Merge "(bug 34211) Initial focus on Special:Block is nowhere"
authorjenkins-bot <jenkins-bot@gerrit.wikimedia.org>
Tue, 5 Feb 2013 18:15:25 +0000 (18:15 +0000)
committerGerrit Code Review <gerrit@wikimedia.org>
Tue, 5 Feb 2013 18:15:25 +0000 (18:15 +0000)
991 files changed:
.gitignore
CREDITS
RELEASE-NOTES-1.21
UPGRADE
api.php
bin/ulimit4.sh [deleted file]
bin/ulimit5.sh [new file with mode: 0644]
composer.json [new file with mode: 0644]
docs/hooks.txt
includes/Action.php
includes/ArrayUtils.php [new file with mode: 0644]
includes/Article.php
includes/AutoLoader.php
includes/Block.php
includes/Category.php
includes/CategoryPage.php
includes/CategoryViewer.php
includes/Categoryfinder.php
includes/Cdb.php
includes/Cdb_PHP.php
includes/ChangeTags.php
includes/ChangesFeed.php
includes/ChangesList.php
includes/Collation.php
includes/ConfEditor.php
includes/Cookie.php
includes/CryptRand.php
includes/DefaultSettings.php
includes/DeprecatedGlobal.php
includes/EditPage.php
includes/Exception.php
includes/Export.php
includes/ExternalEdit.php
includes/ExternalUser.php
includes/FakeTitle.php
includes/Feed.php
includes/FeedUtils.php
includes/FileDeleteForm.php
includes/ForkController.php
includes/FormOptions.php
includes/GlobalFunctions.php
includes/HTMLForm.php
includes/HistoryBlob.php
includes/Hooks.php
includes/Html.php
includes/HttpFunctions.php
includes/ImagePage.php
includes/Import.php
includes/LinkFilter.php
includes/Linker.php
includes/LinksUpdate.php
includes/MagicWord.php
includes/Message.php
includes/MessageBlobStore.php
includes/Metadata.php
includes/MimeMagic.php
includes/Namespace.php
includes/OutputHandler.php
includes/OutputPage.php
includes/PHPVersionError.php
includes/Pager.php
includes/PathRouter.php
includes/Preferences.php
includes/PrefixSearch.php
includes/ProtectionForm.php
includes/ProxyTools.php
includes/RecentChange.php
includes/Revision.php
includes/Sanitizer.php
includes/ScopedCallback.php [new file with mode: 0644]
includes/Setup.php
includes/SiteConfiguration.php
includes/Skin.php
includes/SkinLegacy.php
includes/SkinTemplate.php
includes/SpecialPage.php
includes/SpecialPageFactory.php
includes/SquidPurgeClient.php
includes/Status.php
includes/StringUtils.php
includes/StubObject.php
includes/Timestamp.php
includes/Title.php
includes/User.php
includes/UserMailer.php
includes/WatchedItem.php
includes/WebRequest.php
includes/WebResponse.php
includes/WebStart.php
includes/Wiki.php
includes/WikiFilePage.php
includes/WikiPage.php
includes/Xml.php
includes/ZhConversion.php
includes/ZipDirectoryReader.php
includes/actions/DeleteAction.php
includes/actions/EditAction.php
includes/actions/HistoryAction.php
includes/actions/InfoAction.php
includes/actions/ProtectAction.php
includes/actions/PurgeAction.php
includes/actions/RenderAction.php
includes/actions/ViewAction.php
includes/api/ApiBase.php
includes/api/ApiBlock.php
includes/api/ApiComparePages.php
includes/api/ApiCreateAccount.php [new file with mode: 0644]
includes/api/ApiDelete.php
includes/api/ApiDisabled.php
includes/api/ApiEditPage.php
includes/api/ApiEmailUser.php
includes/api/ApiExpandTemplates.php
includes/api/ApiFeedContributions.php
includes/api/ApiFeedWatchlist.php
includes/api/ApiFileRevert.php
includes/api/ApiFormatBase.php
includes/api/ApiFormatDbg.php
includes/api/ApiFormatDump.php
includes/api/ApiFormatJson.php
includes/api/ApiFormatNone.php
includes/api/ApiFormatPhp.php
includes/api/ApiFormatRaw.php
includes/api/ApiFormatTxt.php
includes/api/ApiFormatWddx.php
includes/api/ApiFormatXml.php
includes/api/ApiFormatYaml.php
includes/api/ApiHelp.php
includes/api/ApiImport.php
includes/api/ApiLogin.php
includes/api/ApiLogout.php
includes/api/ApiMain.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/ApiQueryDisabled.php
includes/api/ApiQueryDuplicateFiles.php
includes/api/ApiQueryExtLinksUsage.php
includes/api/ApiQueryExternalLinks.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/ApiQueryPageProps.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/CacheDependency.php
includes/cache/HTMLCacheUpdate.php
includes/cache/HTMLFileCache.php
includes/cache/LocalisationCache.php
includes/cache/MessageCache.php
includes/cache/SquidUpdate.php
includes/content/AbstractContent.php
includes/content/Content.php
includes/content/ContentHandler.php
includes/content/CssContent.php
includes/content/CssContentHandler.php
includes/content/JavaScriptContent.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/IContextSource.php
includes/context/RequestContext.php
includes/dao/DBAccessBase.php
includes/db/CloneDatabase.php
includes/db/Database.php
includes/db/DatabaseError.php
includes/db/DatabaseIbm_db2.php
includes/db/DatabaseMssql.php
includes/db/DatabaseMysql.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/ORMRow.php
includes/db/ORMTable.php
includes/diff/DairikiDiff.php
includes/diff/DifferenceEngine.php
includes/diff/WikiDiff3.php
includes/externalstore/ExternalStore.php
includes/externalstore/ExternalStoreDB.php
includes/externalstore/ExternalStoreHttp.php
includes/externalstore/ExternalStoreMedium.php [new file with mode: 0644]
includes/filebackend/FSFile.php
includes/filebackend/FSFileBackend.php
includes/filebackend/FileBackend.php
includes/filebackend/FileBackendGroup.php
includes/filebackend/FileOp.php
includes/filebackend/SwiftFileBackend.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 [new file with mode: 0644]
includes/filerepo/FSRepo.php
includes/filerepo/FileRepo.php
includes/filerepo/ForeignAPIRepo.php
includes/filerepo/LocalRepo.php
includes/filerepo/RepoGroup.php
includes/filerepo/file/ArchivedFile.php
includes/filerepo/file/File.php
includes/filerepo/file/ForeignAPIFile.php
includes/filerepo/file/LocalFile.php
includes/filerepo/file/OldLocalFile.php
includes/filerepo/file/UnregisteredLocalFile.php
includes/installer/CliInstaller.php
includes/installer/DatabaseInstaller.php
includes/installer/DatabaseUpdater.php
includes/installer/Ibm_db2Installer.php
includes/installer/Installer.i18n.php
includes/installer/Installer.php
includes/installer/MysqlInstaller.php
includes/installer/MysqlUpdater.php
includes/installer/OracleInstaller.php
includes/installer/OracleUpdater.php
includes/installer/PostgresUpdater.php
includes/installer/SqliteUpdater.php
includes/installer/WebInstaller.php
includes/installer/WebInstallerOutput.php
includes/installer/WebInstallerPage.php
includes/interwiki/Interwiki.php
includes/job/Job.php
includes/job/JobQueue.php
includes/job/JobQueueDB.php
includes/job/JobQueueGroup.php
includes/job/jobs/DoubleRedirectJob.php
includes/job/jobs/DuplicateJob.php
includes/job/jobs/NullJob.php
includes/json/Services_JSON.php
includes/libs/CSSJanus.php
includes/libs/GenericArrayObject.php
includes/libs/IEContentAnalyzer.php
includes/logging/LogEntry.php
includes/logging/LogEventsList.php
includes/logging/LogFormatter.php
includes/logging/LogPage.php
includes/logging/LogPager.php
includes/media/BMP.php
includes/media/BitmapMetadataHandler.php
includes/media/DjVu.php
includes/media/DjVuImage.php
includes/media/Exif.php
includes/media/ExifBitmap.php
includes/media/FormatMetadata.php
includes/media/GIF.php
includes/media/GIFMetadataExtractor.php
includes/media/IPTC.php
includes/media/ImageHandler.php
includes/media/Jpeg.php
includes/media/MediaHandler.php
includes/media/MediaTransformOutput.php
includes/media/PNG.php
includes/media/PNGMetadataExtractor.php
includes/media/SVG.php
includes/media/SVGMetadataExtractor.php
includes/media/Tiff.php
includes/media/XCF.php
includes/media/XMP.php
includes/media/XMPInfo.php
includes/media/XMPValidate.php
includes/mime.types
includes/normal/RandomTest.php
includes/normal/Utf8CaseGenerate.php
includes/normal/Utf8Test.php
includes/normal/UtfNormalBench.php
includes/normal/UtfNormalDefines.php
includes/normal/UtfNormalGenerate.php
includes/normal/UtfNormalMemStress.php
includes/normal/UtfNormalTest.php
includes/normal/UtfNormalTest2.php
includes/objectcache/APCBagOStuff.php
includes/objectcache/BagOStuff.php
includes/objectcache/DBABagOStuff.php
includes/objectcache/EhcacheBagOStuff.php
includes/objectcache/EmptyBagOStuff.php
includes/objectcache/HashBagOStuff.php
includes/objectcache/MemcachedBagOStuff.php
includes/objectcache/MemcachedClient.php
includes/objectcache/MemcachedPeclBagOStuff.php
includes/objectcache/MemcachedPhpBagOStuff.php
includes/objectcache/MultiWriteBagOStuff.php
includes/objectcache/RedisBagOStuff.php
includes/objectcache/SqlBagOStuff.php
includes/objectcache/WinCacheBagOStuff.php
includes/objectcache/XCacheBagOStuff.php
includes/parser/CoreLinkFunctions.php
includes/parser/CoreParserFunctions.php
includes/parser/DateFormatter.php
includes/parser/LinkHolderArray.php
includes/parser/Parser.php
includes/parser/ParserCache.php
includes/parser/ParserOutput.php
includes/parser/Parser_LinkHooks.php
includes/parser/Preprocessor.php
includes/parser/Preprocessor_DOM.php
includes/parser/Preprocessor_Hash.php
includes/parser/Preprocessor_HipHop.hphp
includes/parser/StripState.php
includes/parser/Tidy.php
includes/profiler/Profiler.php
includes/profiler/ProfilerSimple.php
includes/profiler/ProfilerSimpleText.php
includes/profiler/ProfilerSimpleTrace.php
includes/profiler/ProfilerSimpleUDP.php
includes/resourceloader/ResourceLoader.php
includes/resourceloader/ResourceLoaderFileModule.php
includes/resourceloader/ResourceLoaderLanguageDataModule.php
includes/resourceloader/ResourceLoaderModule.php
includes/resourceloader/ResourceLoaderStartUpModule.php
includes/resourceloader/ResourceLoaderWikiModule.php
includes/revisiondelete/RevisionDelete.php
includes/search/SearchEngine.php
includes/search/SearchIBM_DB2.php
includes/search/SearchMssql.php
includes/search/SearchMySQL.php
includes/search/SearchOracle.php
includes/search/SearchPostgres.php
includes/search/SearchSqlite.php
includes/search/SearchUpdate.php
includes/site/MediaWikiSite.php
includes/site/Site.php
includes/site/SiteArray.php [deleted file]
includes/site/SiteList.php
includes/site/SiteObject.php [deleted file]
includes/site/SiteSQLStore.php [new file with mode: 0644]
includes/site/SiteStore.php [new file with mode: 0644]
includes/site/Sites.php [deleted file]
includes/site/SitesTable.php [deleted file]
includes/specials/SpecialAllmessages.php
includes/specials/SpecialAllpages.php
includes/specials/SpecialBlankpage.php
includes/specials/SpecialBlock.php
includes/specials/SpecialBlockList.php
includes/specials/SpecialBooksources.php
includes/specials/SpecialBrokenRedirects.php
includes/specials/SpecialCategories.php
includes/specials/SpecialChangeEmail.php
includes/specials/SpecialChangePassword.php
includes/specials/SpecialComparePages.php
includes/specials/SpecialContributions.php
includes/specials/SpecialDeletedContributions.php
includes/specials/SpecialDisambiguations.php
includes/specials/SpecialDoubleRedirects.php
includes/specials/SpecialEditWatchlist.php
includes/specials/SpecialExport.php
includes/specials/SpecialFileDuplicateSearch.php
includes/specials/SpecialImport.php
includes/specials/SpecialLinkSearch.php
includes/specials/SpecialListfiles.php
includes/specials/SpecialListgrouprights.php
includes/specials/SpecialListredirects.php
includes/specials/SpecialListusers.php
includes/specials/SpecialMostlinkedtemplates.php
includes/specials/SpecialMovepage.php
includes/specials/SpecialNewimages.php
includes/specials/SpecialNewpages.php
includes/specials/SpecialPasswordReset.php
includes/specials/SpecialPreferences.php
includes/specials/SpecialPrefixindex.php
includes/specials/SpecialProtectedpages.php
includes/specials/SpecialProtectedtitles.php
includes/specials/SpecialRandompage.php
includes/specials/SpecialRandomredirect.php
includes/specials/SpecialRecentchanges.php
includes/specials/SpecialRecentchangeslinked.php
includes/specials/SpecialRevisiondelete.php
includes/specials/SpecialSearch.php
includes/specials/SpecialSpecialpages.php
includes/specials/SpecialStatistics.php
includes/specials/SpecialUnblock.php
includes/specials/SpecialUncategorizedcategories.php
includes/specials/SpecialUndelete.php
includes/specials/SpecialUpload.php
includes/specials/SpecialUploadStash.php
includes/specials/SpecialUserlogin.php
includes/specials/SpecialUserrights.php
includes/specials/SpecialVersion.php
includes/specials/SpecialWatchlist.php
includes/specials/SpecialWhatlinkshere.php
includes/templates/Usercreate.php
includes/templates/Userlogin.php
includes/upload/AssembleUploadChunks.php
includes/upload/PublishStashedFile.php [new file with mode: 0644]
includes/upload/UploadBase.php
includes/upload/UploadFromChunks.php
includes/upload/UploadFromStash.php
includes/upload/UploadStash.php
includes/zhtable/.gitignore [deleted file]
includes/zhtable/Makefile [deleted file]
includes/zhtable/Makefile.py [deleted file]
includes/zhtable/README [deleted file]
includes/zhtable/printutf8.c [deleted file]
includes/zhtable/simp2trad.manual [deleted file]
includes/zhtable/simp2trad_noconvert.manual [deleted file]
includes/zhtable/simp2trad_supp_set.manual [deleted file]
includes/zhtable/simpphrases.manual [deleted file]
includes/zhtable/simpphrases_exclude.manual [deleted file]
includes/zhtable/toCN.manual [deleted file]
includes/zhtable/toHK.manual [deleted file]
includes/zhtable/toSG.manual [deleted file]
includes/zhtable/toSimp.manual [deleted file]
includes/zhtable/toTW.manual [deleted file]
includes/zhtable/toTrad.manual [deleted file]
includes/zhtable/trad2simp.manual [deleted file]
includes/zhtable/trad2simp_noconvert.manual [deleted file]
includes/zhtable/trad2simp_supp_set.manual [deleted file]
includes/zhtable/trad2simp_supp_unset.manual [deleted file]
includes/zhtable/tradphrases.manual [deleted file]
includes/zhtable/tradphrases_exclude.manual [deleted file]
languages/Language.php
languages/LanguageConverter.php
languages/classes/LanguageZh_hans.php
languages/data/plurals-mediawiki.xml
languages/messages/MessagesAce.php
languages/messages/MessagesAeb.php
languages/messages/MessagesAf.php
languages/messages/MessagesAln.php
languages/messages/MessagesAls.php [deleted file]
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/MessagesBat_smg.php [deleted file]
languages/messages/MessagesBcc.php
languages/messages/MessagesBcl.php
languages/messages/MessagesBe.php
languages/messages/MessagesBe_tarask.php
languages/messages/MessagesBe_x_old.php [deleted file]
languages/messages/MessagesBg.php
languages/messages/MessagesBh.php
languages/messages/MessagesBho.php
languages/messages/MessagesBjn.php
languages/messages/MessagesBn.php
languages/messages/MessagesBo.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/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/MessagesCv.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/MessagesDv.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/MessagesFiu_vro.php [deleted file]
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.php
languages/messages/MessagesGan_hans.php
languages/messages/MessagesGan_hant.php
languages/messages/MessagesGd.php
languages/messages/MessagesGl.php
languages/messages/MessagesGrc.php
languages/messages/MessagesGsw.php
languages/messages/MessagesGu.php
languages/messages/MessagesGv.php
languages/messages/MessagesHa.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/MessagesJut.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/MessagesKs_arab.php
languages/messages/MessagesKs_deva.php
languages/messages/MessagesKsh.php
languages/messages/MessagesKu_latn.php
languages/messages/MessagesKw.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/MessagesLn.php
languages/messages/MessagesLo.php
languages/messages/MessagesLoz.php
languages/messages/MessagesLt.php
languages/messages/MessagesLtg.php
languages/messages/MessagesLus.php
languages/messages/MessagesLv.php
languages/messages/MessagesLzh.php
languages/messages/MessagesLzz.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/MessagesMzn.php
languages/messages/MessagesNah.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/MessagesNo.php [deleted file]
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/MessagesRgn.php
languages/messages/MessagesRm.php
languages/messages/MessagesRo.php
languages/messages/MessagesRoa_rup.php [deleted file]
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/MessagesSei.php
languages/messages/MessagesSgs.php
languages/messages/MessagesSh.php
languages/messages/MessagesShi.php
languages/messages/MessagesSi.php
languages/messages/MessagesSimple.php [deleted file]
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/MessagesTpi.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_classical.php [deleted file]
languages/messages/MessagesZh_hans.php
languages/messages/MessagesZh_hant.php
languages/messages/MessagesZh_min_nan.php [deleted file]
languages/messages/MessagesZh_yue.php [deleted file]
maintenance/Maintenance.php
maintenance/archives/patch-ufg_group-length-increase-255.sql [new file with mode: 0644]
maintenance/archives/patch-ufg_group-length-increase.sql [deleted file]
maintenance/archives/patch-ug_group-length-increase-255.sql [new file with mode: 0644]
maintenance/archives/patch-ug_group-length-increase.sql [deleted file]
maintenance/archives/patch-user_former_groups.sql
maintenance/archives/upgradeLogging.php
maintenance/backupTextPass.inc
maintenance/benchmarks/bench_wfBaseConvert.php [new file with mode: 0644]
maintenance/checkSyntax.php
maintenance/cleanupUploadStash.php
maintenance/copyFileBackend.php
maintenance/deleteEqualMessages.php [new file with mode: 0644]
maintenance/deleteOldRevisions.php
maintenance/deleteOrphanedRevisions.php
maintenance/dev/includes/router.php
maintenance/doMaintenance.php
maintenance/dumpLinks.php
maintenance/dumpTextPass.php
maintenance/edit.php
maintenance/eval.php
maintenance/fileOpPerfTest.php
maintenance/fixSlaveDesync.php
maintenance/formatInstallDoc.php
maintenance/fuzz-tester.php
maintenance/importImages.inc
maintenance/importImages.php
maintenance/language/languages.inc
maintenance/language/messageTypes.inc
maintenance/language/messages.inc
maintenance/language/zhtable/.gitignore [new file with mode: 0644]
maintenance/language/zhtable/Makefile [new file with mode: 0644]
maintenance/language/zhtable/Makefile.py [new file with mode: 0755]
maintenance/language/zhtable/README [new file with mode: 0644]
maintenance/language/zhtable/simp2trad.manual [new file with mode: 0644]
maintenance/language/zhtable/simp2trad_noconvert.manual [new file with mode: 0644]
maintenance/language/zhtable/simp2trad_supp_set.manual [new file with mode: 0644]
maintenance/language/zhtable/simpphrases.manual [new file with mode: 0644]
maintenance/language/zhtable/simpphrases_exclude.manual [new file with mode: 0644]
maintenance/language/zhtable/toCN.manual [new file with mode: 0644]
maintenance/language/zhtable/toHK.manual [new file with mode: 0644]
maintenance/language/zhtable/toSG.manual [new file with mode: 0644]
maintenance/language/zhtable/toSimp.manual [new file with mode: 0644]
maintenance/language/zhtable/toTW.manual [new file with mode: 0644]
maintenance/language/zhtable/toTrad.manual [new file with mode: 0644]
maintenance/language/zhtable/trad2simp.manual [new file with mode: 0644]
maintenance/language/zhtable/trad2simp_noconvert.manual [new file with mode: 0644]
maintenance/language/zhtable/trad2simp_supp_set.manual [new file with mode: 0644]
maintenance/language/zhtable/trad2simp_supp_unset.manual [new file with mode: 0644]
maintenance/language/zhtable/tradphrases.manual [new file with mode: 0644]
maintenance/language/zhtable/tradphrases_exclude.manual [new file with mode: 0644]
maintenance/locking/LockServerDaemon.php
maintenance/mcc.php
maintenance/mctest.php
maintenance/mergeMessageFileList.php
maintenance/migrateUserGroup.php
maintenance/mwdocgen.php
maintenance/namespaceDupes.php
maintenance/nextJobDB.php
maintenance/oracle/archives/patch-fa_sha1.sql [new file with mode: 0644]
maintenance/oracle/archives/patch-job_attempts.sql [new file with mode: 0644]
maintenance/oracle/archives/patch-job_token.sql [new file with mode: 0644]
maintenance/oracle/archives/patch-sites.sql [new file with mode: 0644]
maintenance/oracle/archives/patch-ufg_group-length-increase-255.sql [new file with mode: 0644]
maintenance/oracle/archives/patch-ufg_group-length-increase.sql [deleted file]
maintenance/oracle/archives/patch-ug_group-length-increase-255.sql [new file with mode: 0644]
maintenance/oracle/archives/patch-ug_group-length-increase.sql [deleted file]
maintenance/oracle/archives/patch-uploadstash-us_props.sql [new file with mode: 0644]
maintenance/oracle/archives/patch-user_former_groups.sql
maintenance/oracle/tables.sql
maintenance/orphans.php
maintenance/populateLogUsertext.php
maintenance/postgres/archives/patch-sites.sql [new file with mode: 0644]
maintenance/postgres/tables.sql
maintenance/preprocessDump.php
maintenance/proxy_check.php
maintenance/purgeList.php
maintenance/reassignEdits.php
maintenance/rebuildLocalisationCache.php
maintenance/rebuildtextindex.php
maintenance/refreshLinks.php
maintenance/removeUnusedAccounts.php
maintenance/runJobs.php
maintenance/showJobs.php
maintenance/showStats.php
maintenance/sqlite/archives/patch-ufg_group-length-increase-255.sql [new file with mode: 0644]
maintenance/sqlite/archives/patch-ufg_group-length-increase.sql [deleted file]
maintenance/sqlite/archives/patch-ug_group-length-increase-255.sql [new file with mode: 0644]
maintenance/sqlite/archives/patch-ug_group-length-increase.sql [deleted file]
maintenance/storage/compressOld.php
maintenance/storage/fixBug20757.php
maintenance/storage/moveToExternal.php
maintenance/storage/recompressTracked.php
maintenance/storage/resolveStubs.php
maintenance/storage/storageTypeStats.php
maintenance/storage/testCompression.php
maintenance/tables.sql
maintenance/term/MWTerm.php
maintenance/upgrade1_5.php [deleted file]
maintenance/userOptions.php
profileinfo.php
resources/Resources.php
resources/jquery/jquery.arrowSteps.js
resources/jquery/jquery.client.js
resources/jquery/jquery.makeCollapsible.js
resources/jquery/jquery.suggestions.js
resources/jquery/jquery.tablesorter.js
resources/mediawiki.action/mediawiki.action.edit.preview.js
resources/mediawiki.action/mediawiki.action.view.dblClickEdit.js
resources/mediawiki.action/mediawiki.action.view.rightClickEdit.js
resources/mediawiki.language/mediawiki.language.js
resources/mediawiki.special/mediawiki.special.block.js
resources/mediawiki.special/mediawiki.special.changeemail.js
resources/mediawiki.special/mediawiki.special.changeslist.css
resources/mediawiki.special/mediawiki.special.movePage.js
resources/mediawiki.special/mediawiki.special.preferences.js
resources/mediawiki.special/mediawiki.special.recentchanges.js
resources/mediawiki.special/mediawiki.special.search.js
resources/mediawiki.special/mediawiki.special.undelete.js
resources/mediawiki.special/mediawiki.special.upload.js
resources/mediawiki.special/mediawiki.special.userLogin.signup.js [new file with mode: 0644]
resources/mediawiki/mediawiki.Uri.js
resources/mediawiki/mediawiki.jqueryMsg.js
resources/mediawiki/mediawiki.jqueryMsg.peg
resources/mediawiki/mediawiki.searchSuggest.css [new file with mode: 0644]
resources/mediawiki/mediawiki.searchSuggest.js
resources/mediawiki/mediawiki.util.js
serialized/serialize.php
skins/Chick.php
skins/CologneBlue.php
skins/Modern.php
skins/MonoBook.php
skins/Nostalgia.php
skins/Standard.php
skins/Vector.php
skins/common/commonPrint.css
skins/common/shared.css
tests/TestsAutoLoader.php
tests/parser/parserTest.inc
tests/parser/parserTests.txt
tests/phpunit/Makefile
tests/phpunit/MediaWikiPHPUnitCommand.php
tests/phpunit/MediaWikiTestCase.php
tests/phpunit/data/xmp/gps.result.php
tests/phpunit/includes/BlockTest.php
tests/phpunit/includes/CdbTest.php
tests/phpunit/includes/DiffHistoryBlobTest.php
tests/phpunit/includes/ExternalStoreTest.php
tests/phpunit/includes/ExtraParserTest.php
tests/phpunit/includes/FormOptionsInitializationTest.php
tests/phpunit/includes/FormOptionsTest.php
tests/phpunit/includes/GlobalFunctions/GlobalTest.php
tests/phpunit/includes/GlobalFunctions/wfBaseConvertTest.php [new file with mode: 0644]
tests/phpunit/includes/GlobalFunctions/wfGetCallerTest.php
tests/phpunit/includes/HooksTest.php
tests/phpunit/includes/HttpTest.php
tests/phpunit/includes/IPTest.php
tests/phpunit/includes/LinksUpdateTest.php
tests/phpunit/includes/LocalFileTest.php
tests/phpunit/includes/MWNamespaceTest.php
tests/phpunit/includes/MessageTest.php
tests/phpunit/includes/OutputPageTest.php [new file with mode: 0644]
tests/phpunit/includes/RevisionStorageTest.php
tests/phpunit/includes/RevisionStorageTest_ContentHandlerUseDB.php
tests/phpunit/includes/RevisionTest.php
tests/phpunit/includes/SampleTest.php
tests/phpunit/includes/SanitizerTest.php
tests/phpunit/includes/SeleniumConfigurationTest.php
tests/phpunit/includes/SiteConfigurationTest.php
tests/phpunit/includes/TemplateCategoriesTest.php
tests/phpunit/includes/TimestampTest.php
tests/phpunit/includes/TitlePermissionTest.php
tests/phpunit/includes/TitleTest.php
tests/phpunit/includes/UserTest.php
tests/phpunit/includes/WikiPageTest.php
tests/phpunit/includes/WikiPageTest_ContentHandlerUseDB.php
tests/phpunit/includes/api/ApiAccountCreationTest.php [new file with mode: 0644]
tests/phpunit/includes/api/ApiBlockTest.php
tests/phpunit/includes/api/ApiGeneratorTest.php
tests/phpunit/includes/api/ApiOptionsTest.php
tests/phpunit/includes/api/ApiParseTest.php
tests/phpunit/includes/api/ApiPurgeTest.php
tests/phpunit/includes/api/ApiQueryRevisionsTest.php
tests/phpunit/includes/api/ApiQueryTest.php
tests/phpunit/includes/api/ApiTest.php
tests/phpunit/includes/api/ApiTestCase.php
tests/phpunit/includes/api/ApiTestCaseUpload.php
tests/phpunit/includes/api/ApiWatchTest.php
tests/phpunit/includes/api/PrefixUniquenessTest.php
tests/phpunit/includes/api/format/ApiFormatPhpTest.php
tests/phpunit/includes/api/generateRandomImages.php
tests/phpunit/includes/content/ContentHandlerTest.php
tests/phpunit/includes/content/TextContentTest.php
tests/phpunit/includes/content/WikitextContentTest.php
tests/phpunit/includes/db/DatabaseSQLTest.php
tests/phpunit/includes/db/DatabaseSqliteTest.php
tests/phpunit/includes/db/DatabaseTest.php
tests/phpunit/includes/db/ORMRowTest.php
tests/phpunit/includes/db/ORMTableTest.php
tests/phpunit/includes/filebackend/FileBackendTest.php
tests/phpunit/includes/filerepo/StoreBatchTest.php
tests/phpunit/includes/libs/CSSJanusTest.php
tests/phpunit/includes/libs/GenericArrayObjectTest.php
tests/phpunit/includes/logging/LogFormatterTest.php
tests/phpunit/includes/logging/LogTests.i18n.php
tests/phpunit/includes/media/ExifRotationTest.php
tests/phpunit/includes/media/MediaHandlerTest.php
tests/phpunit/includes/media/PNGMetadataExtractorTest.php
tests/phpunit/includes/media/SVGMetadataExtractorTest.php
tests/phpunit/includes/objectcache/BagOStuffTest.php [new file with mode: 0644]
tests/phpunit/includes/parser/MagicVariableTest.php
tests/phpunit/includes/parser/MediaWikiParserTest.php
tests/phpunit/includes/parser/ParserMethodsTest.php
tests/phpunit/includes/parser/ParserOutputTest.php
tests/phpunit/includes/parser/PreprocessorTest.php
tests/phpunit/includes/search/SearchEngineTest.php
tests/phpunit/includes/site/MediaWikiSiteTest.php
tests/phpunit/includes/site/SiteArrayTest.php [deleted file]
tests/phpunit/includes/site/SiteListTest.php
tests/phpunit/includes/site/SiteObjectTest.php [deleted file]
tests/phpunit/includes/site/SiteSQLStoreTest.php [new file with mode: 0644]
tests/phpunit/includes/site/SiteTest.php [new file with mode: 0644]
tests/phpunit/includes/site/SitesTest.php [deleted file]
tests/phpunit/includes/site/TestSites.php
tests/phpunit/includes/specials/SpecialRecentchangesTest.php
tests/phpunit/includes/specials/SpecialSearchTest.php
tests/phpunit/includes/upload/UploadTest.php
tests/phpunit/install-phpunit.sh
tests/phpunit/languages/LanguageBhTest.php [deleted file]
tests/phpunit/languages/LanguageBhoTest.php [new file with mode: 0644]
tests/phpunit/languages/LanguageMlTest.php
tests/phpunit/languages/LanguageTest.php
tests/phpunit/languages/utils/CLDRPluralRuleEvaluatorTest.php
tests/phpunit/maintenance/DumpTestCase.php
tests/phpunit/maintenance/MaintenanceTest.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/maintenance/getSlaveServerTest.php
tests/phpunit/skins/SideBarTest.php
tests/phpunit/suite.xml
tests/phpunit/suites/UploadFromUrlTestSuite.php
tests/qunit/suites/resources/jquery/jquery.client.test.js
tests/qunit/suites/resources/jquery/jquery.tablesorter.test.js
tests/qunit/suites/resources/mediawiki/mediawiki.Uri.test.js
tests/qunit/suites/resources/mediawiki/mediawiki.jqueryMsg.test.js
thumb.php

index a47a454..ceff243 100644 (file)
@@ -1,6 +1,9 @@
 # Repository management
 .svn
 
+# git-deploy status file:
+/.deploy
+
 # Editors
 *.kate-swp
 *~
@@ -34,6 +37,11 @@ StartProfiler.php
 # Building & testing
 node_modules/
 
+# Composer
+/vendor
+/composer.lock
+/composer.json
+
 # Operating systems
 ## Mac OS X
 .DS_Store
diff --git a/CREDITS b/CREDITS
index 217109a..7da6cb6 100644 (file)
--- a/CREDITS
+++ b/CREDITS
@@ -41,6 +41,7 @@ following names for their contribution to the product.
 * John Du Hart
 * Jon Harald Søby
 * Juliano F. Ravasi
+* Ryan Kaldari
 * Leo Koppelkamm
 * Leon Weber
 * Leslie Hoare
@@ -56,6 +57,8 @@ following names for their contribution to the product.
 * Neil Kandalgaonkar
 * Nicolas Dumazet
 * Niklas Laxström
+* Ori Livneh
+* Patrick Reilly
 * Philip Tzou
 * Platonides
 * Purodha Blissenbach
@@ -72,6 +75,7 @@ following names for their contribution to the product.
 * Siebrand Mazeland
 * SQL
 * Soxred93
+* Szymon Świerkosz
 * Thomas Bleher
 * Tim Starling
 * Timo Tijhof
@@ -82,6 +86,8 @@ following names for their contribution to the product.
 * Yuri Astrakhan
 
 == Patch Contributors ==
+* Aaron Pramana
+* Aaron Ball
 * Agbad
 * Ahmad Sherif
 * Alejandro Mery
@@ -93,7 +99,9 @@ following names for their contribution to the product.
 * Asier Lostalé
 * Azliq7
 * Bagariavivek
+* Bartosz Dziewoński
 * Beau
+* Benny Situ
 * Bergi
 * Borislav Manolov
 * Brad Jorsch
@@ -101,6 +109,7 @@ following names for their contribution to the product.
 * Brianna Laugher
 * Carlin
 * Carsten Nielsen
+* Chris Steipp
 * Christian Neubauer
 * Christian Aistleitner
 * Conrad Irwin
@@ -109,26 +118,35 @@ following names for their contribution to the product.
 * Dan Collins
 * Dan Nessett
 * Daniel Arnold
+* Daniel Werner
 * David Baumgarten
 * Denny Vrandecic
+* Dévai Tamás
 * Edward Z. Yang
 * Elvis Stansvik
 * Erwin Dokter
+* Federico Leva
 * FunPika
 * fomafix
+* Gabriel Wicke
 * Gero Scholz
 * Gilles van den Hoven
 * Grunny
 * Harry Burt
 * Ireas
 * Jacob Block
+* Jan Gerber
+* Jan Luca Naumann
 * Jaska Zedlik
 * Jeremy Baron
 * Jidanni
 * Jimmy Xu
 * Jonathan Wiltshire
 * John N
+* Jure Kajzer
 * Karun Dambiec
+* Katie Filbert
+* Kevin Israel
 * Kim Hyun-Joon
 * Lee Worden
 * Lejonel
@@ -137,12 +155,16 @@ following names for their contribution to the product.
 * Lucas Garczewski
 * Luigi Corsaro
 * Lupo
+* Madman
 * Manuel Menal
 * Marcin Cieślak
 * Marcus Buck
 * Mark A. Pelletier
+* Mark Hershberger
+* Mark Holmquist
 * Marooned
 * Mathias Ertl
+* Matthias Mullie
 * Matthew Britton
 * mati
 * Max
@@ -170,32 +192,42 @@ following names for their contribution to the product.
 * Nischay Nahata
 * Olaf Lenz
 * Olivier Finlay Beaton
+* Patricio Molina
 * Paul Copperman
 * Paul Oranje
+* Peter Gehres
+* Petr Onderka
 * PieRRoMaN
 * quietust
 * René Kijewski
 * rgcjonas
+* Rob Moen
 * Robert Treat
 * RockMFR
 * Russell Blau
 * Rusty Burchfield
+* S Page
 * Salvatore Ingala
+* Santhosh Thottingal
 * Scott Colcord
+* Sébastien Santoro
 * Simon Walker
 * Solitarius
 * Søren Løvborg
 * Srikanth Lakshmanan
 * Stefano Codari
 * Str4nd
+* Subramanya Sastry
 * svip
 * The Evil IP address
 * Tim Landscheidt
 * Tisane
+* Tyler Anthony Romeo
 * Umherirrender
 * Van de Bugger
 * Ville Stadista
 * Vitaliy Filippov
+* Waldir Pimenta
 * William Demchick
 * Yusuke Matsubara
 * Yuvaraj Pandian T
index 78ef1df..9852162 100644 (file)
@@ -1,4 +1,3 @@
-
 Security reminder: MediaWiki does not require PHP's register_globals. If you
 have it on, turn it '''off''' if you can.
 
@@ -13,6 +12,10 @@ production.
 * (bug 29374) $wgVectorUseSimpleSearch is now enabled by default.
 * Deprecated $wgAllowRealName is removed. Use $wgHiddenPrefs[] = 'realname'
   instead.
+* (bug 39957) Added $wgUnwatchedPageThreshold, specifying minimum count
+  of page watchers required for the number to be accessible to users
+  without the unwatchedpages permission.
+* $wgBug34832TransitionalRollback has been removed.
 
 === New features in 1.21 ===
 * (bug 38110) Schema changes (adding or dropping tables, indicies and
@@ -57,11 +60,35 @@ production.
   debug mode: wfMsg, wfMsgNoTrans, wfMsgForContent, wfMsgForContentNoTrans,
   wfMsgReal, wfMsgGetKey, wfMsgHtml, wfMsgWikiHtml, wfMsgExt, wfEmptyMsg. Use
   the Message class, or the global method wfMessage.
+* Added $wgEnableCanonicalServerLink, off by default. If enabled, a
+  <link rel=canonical> tag is added to every page indicating the correct server
+  to use.
 * Debug message emitted by wfDebugLog() will now be prefixed with the group
   name when its logged to the default log file. That is the case whenever the
   group has no key in wgDebugLogGroups, that will help triage the default log.
 * (bug 24620) Add types to LogFormatter.
 * jQuery JSON upgraded from 2.3 to 2.4.0.
+* Added GetDoubleUnderscoreIDs hook, for modifying the list of magic words.
+* DatabaseUpdater class has two new methods to ease extensions schema changes:
+  dropExtensionIndex and renameExtensionIndex.
+* New preference type - 'api'. Preferences of this type are not shown on
+  Special:Preferences, but are still available via the action=options API.
+* (bug 39397) Hide rollback link if a user is the only contributor of the page.
+* $wgPageInfoTransclusionLimit limits the list size of transcluded articles
+  on the info action. Default is 50.
+* Added action=createaccount to allow user account creation.
+* (bug 40124) action=options API also allows for setting of arbitrary
+  preferences, provided that their names are prefixed with 'userjs-'. This
+  officially reenables the feature that was undocumented and defective
+  in MW 1.20 (saving preferences using Special:Preferences cleared any
+  additional fields) and which has been disabled in 1.20.1 as a part of
+  a security fix (bug 42202).
+* Added the ability to limit the wall clock time used by shell processes,
+  as well as the CPU time. Configurable with $wgMaxShellWallClockTime.
+* Added $wgWhitelistReadRegexp for regex whitelisting.
+* (bug 5346) Categories that are redirects will be displayed italic in
+  the category links section at the bottom of a page.
+* (bug 43915) New maintenance script deleteEqualMessages.php.
 
 === Bug fixes in 1.21 ===
 * (bug 40353) SpecialDoubleRedirect should support interwiki redirects.
@@ -97,7 +124,7 @@ production.
   needed.
 * (bug 41886) Rowspans are no longer exploded by tablesorter until the table is
   actually sorted.
-* (bug 2865)  User interface HTML elements don't use lang attribute
+* (bug 2865)  User interface HTML elements don't use lang attribute.
   (completed the fix by adding the lang attribute to firstHeading).
 * (bug 42173) Removed namespace prefixes on Special:UncategorizedCategories.
 * (bug 36053) Log in "returnto" feature forgets query parameters if no
@@ -106,12 +133,31 @@ production.
 * (bug 14901) Email notification mistakes log action for new page creation.
   Enotif no longer sends "page has been created" notifications for some log
   actions. The following events now have a correct message: page creation,
-  deletion, move, restore (undeletion), change (edit).
+  deletion, move, restore (undeletion), change (edit). Parameter
+  $CHANGEDORCREATED is deprecated in 'enotif_body' and scheduled for removal in
+  MediaWiki 1.23.
 * (bug 457) In the sidebar of Vector, CologneBlue, Monobook, and Monobook-based
   skins, the heading levels have been changed from (variously per skin)
   <h4>, <h5> or <h6> to only <h3>s, with a <h2> hidden heading above them.
   If you are styling or scripting the headings in a custom way, this change
   will require updates to your site's CSS or JS.
+* (bug 41342) jquery.suggestions should cancel any active (async) fetches
+  before it triggers another fetch.
+* (bug 42184) $wgUploadSizeWarning missing second variable.
+* (bug 34581) removeUnusedAccounts.php maintenance script now ignores newuser
+  log when determining whether an account is used.
+* (bug 43379) Gracefully fail if rev_len is unavailable for a revision on the
+  History page.
+* (bug 42949) API no longer assumes all exceptions are MWException.
+* (bug 41733) Hide "New user message" (.usermessage) element from printable view.
+* (bug 39062) Special:Contributions will display changes that don't have
+  a parent id instead of just an empty bullet item.
+* (bug 37209) "LinkCache doesn't currently know about this title" error fixed.
+* wfMerge() now works if $wgDiff3 contains spaces
+* (bug 43052) mediawiki.action.view.dblClickEdit.dblClickEdit should trigger
+  ca-edit click instead opening URL directly.
+* (bug 43964) Invalid value of "link" parameter in <gallery> no longer produces
+  a fatal error.
 
 === API changes in 1.21 ===
 * prop=revisions can now report the contentmodel and contentformat.
@@ -124,6 +170,35 @@ production.
 * (bug 41042) Revert change to action=parse&page=... behavior when the page
   does not exist.
 * (bug 27202) Add timestamp sort to list=allimages.
+* (bug 43137) Don't return the sha1 of revisions through the API if the content is
+  revision-deleted.
+* ApiQueryImageInfo now also returns imageinfo for redirects.
+* list=alltransclusions added to enumerate every instance of page embedding
+* list=alllinks & alltransclusions now allow both 'from' and 'continue' in
+  the same query. When both are present, 'from' is simply ignored.
+* list=alllinks & alltransclusions now allow 'unique' in generators, to yield
+  a list of all link/template target pages instead of source pages.
+* BREAKING CHANGE: list=logevents output format changed for details of some log
+  types. Specifically, details that were formerly reported under a key like
+  "4::foo" will now be reported under a key of simply "foo".
+* BREAKING CHANGE: '??_badcontinue' error code was changed to '??badcontinue'
+  for all query modules.
+* ApiQueryBase adds 'badcontinue' error code if module has 'continue' parameter.
+* (bug 35885) Removed version parameter and all getVersion() methods.
+* action=options now takes a "resetkinds" option, which allows only resetting
+  certain types of preferences when the "reset" option is set.
+* (bug 36751) ApiQueryImageInfo now returns imageinfo for the redirect target
+  when queried with &redirects=.
+* (bug 31849) ApiQueryImageInfo no longer gets confused when asked for info on
+  a redirect and its target.
+* (bug 43849) ApiQueryImageInfo no longer throws exceptions with ForeignDBRepo
+  redirects.
+* On error, any warnings generated before that error will be shown in the result.
+
+=== API internal changes in 1.21 ===
+* For debugging only, a new global $wgDebugAPI removes many API restrictions when true.
+  Never use on the production servers, as this flag introduces security holes.
+  Whenever enabled, a warning will also be added to all output.
 
 === Languages updated in 1.21 ===
 
@@ -169,9 +244,11 @@ due to database schema changes.
 If upgrading from before 1.7, you may want to run refreshLinks.php to ensure
 new database fields are filled with data.
 
-If you are upgrading from MediaWiki 1.4.x or earlier, some major database
-changes are made, and there is a slightly higher chance that things could
-break. Don't forget to always back up your database before upgrading!
+If you are upgrading from MediaWiki 1.4.x or earlier, you should upgrade to
+1.5 first. The upgrade script maintenance/upgrade1_5.php has been removed
+with MediaWiki 1.21.
+
+Don't forget to always back up your database before upgrading!
 
 See the file UPGRADE for more detailed upgrade instructions.
 
diff --git a/UPGRADE b/UPGRADE
index 3e3cb13..2c6df98 100644 (file)
--- a/UPGRADE
+++ b/UPGRADE
@@ -39,8 +39,8 @@ Download the files for the new version of the software. These are available
 as a compressed "tar" archive from the Wikimedia Download Service
 (http://download.wikimedia.org/mediawiki).
 
-You can also obtain the new files directly from our Subversion source code
-repository, via a checkout or export operation.
+You can also obtain the new files directly from our Git source code
+repository.
 
 Replace the existing MediaWiki files with the new. You should preserve the
 LocalSettings.php file and the "extensions" and "images" directories.
@@ -150,6 +150,10 @@ UTF-8; an experimental command-line upgrade helper script,
 'upgrade1_5.php', can do this -- run it prior to 'update.php' or
 the web upgrader.
 
+NOTE that upgrade1_5.php does not work properly with recent version
+of MediaWiki. If upgrading a 1.4.x wiki, you should upgrade to 1.5
+first.  upgrade1_5.php has been removed from MediaWiki 1.21.
+
 If you absolutely cannot make the UTF-8 upgrade work, you can try
 doing it by hand: dump your old database, convert the dump file
 using iconv as described here:
diff --git a/api.php b/api.php
index 7fae373..4efcdba 100644 (file)
--- a/api.php
+++ b/api.php
@@ -97,7 +97,7 @@ if ( $wgAPIRequestLog ) {
        if ( $module->mustBePosted() ) {
                $items[] = "action=" . $wgRequest->getVal( 'action' );
        } else {
-               $items[] = wfArrayToCGI( $wgRequest->getValues() );
+               $items[] = wfArrayToCgi( $wgRequest->getValues() );
        }
        wfErrorLog( implode( ',', $items ) . "\n", $wgAPIRequestLog );
        wfDebug( "Logged API request to $wgAPIRequestLog\n" );
@@ -107,4 +107,3 @@ if ( $wgAPIRequestLog ) {
 // get here to worry about whether this should be = or =&, but the file has to parse properly.
 $lb = wfGetLBFactory();
 $lb->shutdown();
-
diff --git a/bin/ulimit4.sh b/bin/ulimit4.sh
deleted file mode 100755 (executable)
index 2a840d2..0000000
+++ /dev/null
@@ -1,4 +0,0 @@
-#!/bin/bash
-
-ulimit -t $1 -v $2 -f $3
-eval "$4"
diff --git a/bin/ulimit5.sh b/bin/ulimit5.sh
new file mode 100644 (file)
index 0000000..fd8aae2
--- /dev/null
@@ -0,0 +1,21 @@
+#!/bin/bash
+
+if [ "$1" -gt 0 ]; then
+       ulimit -t "$1"
+fi
+if [ "$2" -gt 0 ]; then
+       ulimit -v "$2"
+fi
+if [ "$3" -gt 0 ]; then
+       ulimit -f "$3"
+fi
+if [ "$4" -gt 0 -a -x "/usr/bin/timeout" ]; then
+       /usr/bin/timeout $4 /bin/bash -c "$5"
+       STATUS="$?"
+       if [ "$STATUS" == 124 ]; then
+               echo "ulimit5.sh: timed out." 1>&2
+       fi
+       exit "$STATUS"
+else
+       eval "$5"
+fi
diff --git a/composer.json b/composer.json
new file mode 100644 (file)
index 0000000..e480ab6
--- /dev/null
@@ -0,0 +1,27 @@
+{
+       "name": "mediawiki/core",
+       "version": "1.21-alpha",
+       "description": "Free software wiki application developed by the Wikimedia Foundation and others",
+       "keywords": ["mediawiki", "wiki"],
+       "homepage": "https://www.mediawiki.org/",
+       "authors": [
+               {
+                       "name": "MediaWiki Community",
+                       "homepage": "https://www.mediawiki.org/wiki/Special:Version/Credits"
+               }
+       ],
+       "license": "GPL-2.0",
+       "support": {
+               "issues": "https://bugzilla.wikimedia.org/",
+               "irc": "irc://irc.freenode.net/mediawiki",
+               "wiki": "https://www.mediawiki.org/"
+       },
+       "require": {
+               "php": ">=5.3.2"
+       },
+       "suggest": {
+               "ext-fileinfo": "*",
+               "ext-mbstring": "*",
+               "ext-wikidiff2": "*"
+       }
+}
index c53baef..f9274a5 100644 (file)
@@ -234,7 +234,9 @@ MediaWiki 1.4rc1.
 This is a list of known events and parameters; please add to it if you're going
 to add events to the MediaWiki code.
 
-'AbortAutoAccount': Return false to cancel automated local account creation, where normally authentication against an external auth plugin would be creating a local account.
+'AbortAutoAccount': Return false to cancel automated local account creation,
+where normally authentication against an external auth plugin would be creating
+a local account.
 $user: the User object about to be created (read-only, incomplete)
 &$abortMsg: out parameter: name of error message to be displayed to user
 
@@ -242,7 +244,7 @@ $user: the User object about to be created (read-only, incomplete)
 $autoblockip: The IP going to be autoblocked.
 $block: The block from which the autoblock is coming.
 
-'AbortDiffCache': Can be used to cancel the caching of a diff
+'AbortDiffCache': Can be used to cancel the caching of a diff.
 &$diffEngine: DifferenceEngine object
 
 'AbortEmailNotification': Can be used to cancel email notifications for an edit.
@@ -257,7 +259,7 @@ $password: the password being submitted, not yet checked for validity
           a machine API rather than the HTML user interface.
 &$msg: the message identifier for abort reason (new in 1.18, not available before 1.18)
 
-'AbortMove': allows to abort moving an article (title)
+'AbortMove': Allows to abort moving an article (title).
 $old: old title
 $nt: new title
 $user: user who is doing the move
@@ -268,31 +270,32 @@ $reason: the reason for the move (added in 1.13)
 $user: the User object about to be created (read-only, incomplete)
 &$msg: out parameter: HTML to display on abort
 
-'ActionBeforeFormDisplay': before executing the HTMLForm object
+'ActionBeforeFormDisplay': Before executing the HTMLForm object.
 $name: name of the action
 &$form: HTMLForm object
 $article: Article object
 
-'ActionModifyFormFields': before creating an HTMLForm object for a page action;
-       allows to change the fields on the form that will be generated
+'ActionModifyFormFields': Before creating an HTMLForm object for a page action;
+Allows to change the fields on the form that will be generated.
 $name: name of the action
 &$fields: HTMLForm descriptor array
 $article: Article object
 
-'AddNewAccount': after a user account is created
+'AddNewAccount': After a user account is created.
 $user: the User object that was created. (Parameter added in 1.7)
 $byEmail: true when account was created "by email" (added in 1.12)
 
-'AfterFinalPageOutput': At the end of OutputPage::output() but before
-final ob_end_flush() which will send the buffered output to the client.
-This allows for last-minute modification of the output within the buffer
-by using ob_get_clean().
+'AfterFinalPageOutput': At the end of OutputPage::output() but before final
+ob_end_flush() which will send the buffered output to the client. This allows
+for last-minute modification of the output within the buffer by using
+ob_get_clean().
+&$output: OutputPage object
 
-'AfterImportPage': When a page import is completed
+'AfterImportPage': When a page import is completed.
 $title: Title under which the revisions were imported
 $origTitle: Title provided by the XML file
 $revCount: Number of revisions in the XML file
-$sRevCount: Number of sucessfully imported revisions
+$sRevCount: Number of successfully imported revisions
 $pageInfo: associative array of page information
 
 'AfterFinalPageOutput': Nearly at the end of OutputPage::output() but
@@ -304,166 +307,162 @@ $output: The OutputPage object where output() was called
 'AjaxAddScript': Called in output page just before the initialisation
 of the javascript ajax engine. The hook is only called when ajax
 is enabled ( $wgUseAjax = true; ).
+&$output: OutputPage object
 
-'AlternateEdit': before checking if a user can edit a page and
-before showing the edit form ( EditPage::edit() ). This is triggered
-on &action=edit.
-$EditPage: the EditPage object
+'AlternateEdit': Before checking if a user can edit a page and before showing
+the edit form ( EditPage::edit() ). This is triggered on &action=edit.
+$editPage: the EditPage object
 
-'AlternateEditPreview': before generating the preview of the page when editing
+'AlternateEditPreview': Before generating the preview of the page when editing
 ( EditPage::getPreviewText() ).
-$EditPage: the EditPage object
+$editPage: the EditPage object
 &$content: the Content object for the text field from the edit page
 &$previewHTML: Text to be placed into the page for the preview
 &$parserOutput: the ParserOutput object for the preview
 return false and set $previewHTML and $parserOutput to output custom page
 preview HTML.
 
-'AlternateUserMailer': Called before mail is sent so that mail could
-be logged (or something else) instead of using PEAR or PHP's mail().
-Return false to skip the regular method of sending mail.  Return a
-string to return a php-mail-error message containing the error.
-Returning true will continue with sending email in the regular way.
+'AlternateUserMailer': Called before mail is sent so that mail could be logged
+(or something else) instead of using PEAR or PHP's mail(). Return false to skip
+the regular method of sending mail.  Return a string to return a php-mail-error
+message containing the error. Returning true will continue with sending email
+in the regular way.
 $headers: Associative array of headers for the email
 $to: MailAddress object or array
 $from: From address
 $subject: Subject of the email
 $body: Body of the message
 
-'APIAfterExecute': after calling the execute() method of an API module.
-Use this to extend core API modules.
+'APIAfterExecute': After calling the execute() method of an API module. Use
+this to extend core API modules.
 &$module: Module object
 
-'ApiCheckCanExecute': Called during ApiMain::checkCanExecute. Use to
-further authenticate and authorize API clients before executing the
-module. Return false and set a message to cancel the request.
+'ApiCheckCanExecute': Called during ApiMain::checkCanExecute. Use to further
+authenticate and authorize API clients before executing the module. Return
+false and set a message to cancel the request.
 $module: Module object
 $user: Current user
 &$message: API usage message to die with, as a message key or array
 as accepted by ApiBase::dieUsageMsg.
 
-'APIEditBeforeSave': before saving a page with api.php?action=edit,
-after processing request parameters. Return false to let the request
-fail, returning an error message or an <edit result="Failure"> tag
-if $resultArr was filled.
-$EditPage : the EditPage object
+'APIEditBeforeSave': Before saving a page with api.php?action=edit, after
+processing request parameters. Return false to let the request fail, returning
+an error message or an <edit result="Failure"> tag if $resultArr was filled.
+$editPage : the EditPage object
 $text : the new text of the article (has yet to be saved)
 &$resultArr : data in this array will be added to the API result
 
-'APIGetAllowedParams': use this hook to modify a module's parameters.
+'APIGetAllowedParams': Use this hook to modify a module's parameters.
 &$module: ApiBase Module object
 &$params: Array of parameters
 
-'APIGetDescription': use this hook to modify a module's description
+'APIGetDescription': Use this hook to modify a module's description.
 &$module: ApiBase Module object
 &$desc: Array of descriptions
 
-'APIGetParamDescription': use this hook to modify a module's parameter
+'APIGetParamDescription': Use this hook to modify a module's parameter
 descriptions.
 &$module: ApiBase Module object
 &$desc: Array of parameter descriptions
 
-'APIGetResultProperties': use this hook to mofify the properties
-in a module's result.
+'APIGetResultProperties': Use this hook to modify the properties in a module's
+result.
 &$module: ApiBase Module object
 &$properties: Array of properties
 
-'APIQueryAfterExecute': after calling the execute() method of an
+'APIQueryAfterExecute': After calling the execute() method of an
 action=query submodule. Use this to extend core API modules.
 &$module: Module object
 
-'APIQueryGeneratorAfterExecute': after calling the executeGenerator()
-method of an action=query submodule. Use this to extend core API modules.
+'APIQueryGeneratorAfterExecute': After calling the executeGenerator() method of
+an action=query submodule. Use this to extend core API modules.
 &$module: Module object
 &$resultPageSet: ApiPageSet object
 
-'APIQueryInfoTokens': use this hook to add custom tokens to prop=info.
-Every token has an action, which will be used in the intoken parameter
-and in the output (actiontoken="..."), and a callback function which
-should return the token, or false if the user isn't allowed to obtain
-it. The prototype of the callback function is func($pageid, $title)
-where $pageid is the page ID of the page the token is requested for
-and $title is the associated Title object. In the hook, just add
-your callback to the $tokenFunctions array and return true (returning
-false makes no sense)
+'APIQueryInfoTokens': Use this hook to add custom tokens to prop=info. Every
+token has an action, which will be used in the intoken parameter and in the
+output (actiontoken="..."), and a callback function which should return the
+token, or false if the user isn't allowed to obtain it. The prototype of the
+callback function is func($pageid, $title), where $pageid is the page ID of the
+page the token is requested for and $title is the associated Title object. In
+the hook, just add your callback to the $tokenFunctions array and return true
+(returning false makes no sense).
 $tokenFunctions: array(action => callback)
 
-'APIQueryRevisionsTokens': use this hook to add custom tokens to prop=revisions.
-Every token has an action, which will be used in the rvtoken parameter
-and in the output (actiontoken="..."), and a callback function which
-should return the token, or false if the user isn't allowed to obtain
-it. The prototype of the callback function is func($pageid, $title, $rev)
-where $pageid is the page ID of the page associated to the revision the
-token is requested for, $title the associated Title object and $rev the
-associated Revision object. In the hook, just add your callback to the
-$tokenFunctions array and return true (returning false makes no sense)
+'APIQueryRevisionsTokens': Use this hook to add custom tokens to prop=revisions.
+Every token has an action, which will be used in the rvtoken parameter and in
+the output (actiontoken="..."), and a callback function which should return the
+token, or false if the user isn't allowed to obtain it. The prototype of the
+callback function is func($pageid, $title, $rev), where $pageid is the page ID
+of the page associated to the revision the token is requested for, $title the
+associated Title object and $rev the associated Revision object. In the hook,
+just add your callback to the $tokenFunctions array and return true (returning
+false makes no sense).
 $tokenFunctions: array(action => callback)
 
-'APIQueryRecentChangesTokens': use this hook to add custom tokens to
-list=recentchanges.
-Every token has an action, which will be used in the rctoken parameter
-and in the output (actiontoken="..."), and a callback function which
-should return the token, or false if the user isn't allowed to obtain
-it. The prototype of the callback function is func($pageid, $title, $rc)
-where $pageid is the page ID of the page associated to the revision the
-token is requested for, $title the associated Title object and $rc the
-associated RecentChange object. In the hook, just add your callback to the
-$tokenFunctions array and return true (returning false makes no sense)
+'APIQueryRecentChangesTokens': Use this hook to add custom tokens to
+list=recentchanges. Every token has an action, which will be used in the rctoken
+parameter and in the output (actiontoken="..."), and a callback function which
+should return the token, or false if the user isn't allowed to obtain it. The
+prototype of the callback function is func($pageid, $title, $rc), where $pageid
+is the page ID of the page associated to the revision the token is requested
+for, $title the associated Title object and $rc the associated RecentChange
+object. In the hook, just add your callback to the $tokenFunctions array and
+return true (returning false makes no sense).
 $tokenFunctions: array(action => callback)
 
-'APIQuerySiteInfoGeneralInfo': use this hook to add extra information to
-the sites general information.
+'APIQuerySiteInfoGeneralInfo': Use this hook to add extra information to the
+sites general information.
 $module: the current ApiQuerySiteInfo module
 &$results: array of results, add things here
 
-'APIQueryUsersTokens': use this hook to add custom token to list=users.
-Every token has an action, which will be used in the ustoken parameter
-and in the output (actiontoken="..."), and a callback function which
-should return the token, or false if the user isn't allowed to obtain
-it. The prototype of the callback function is func($user) where $user
-is the User object. In the hook, just add your callback to the
-$tokenFunctions array and return true (returning false makes no sense)
+'APIQueryUsersTokens': Use this hook to add custom token to list=users. Every
+token has an action, which will be used in the ustoken parameter and in the
+output (actiontoken="..."), and a callback function which should return the
+token, or false if the user isn't allowed to obtain it. The prototype of the
+callback function is func($user) where $user is the User object. In the hook,
+just add your callback to the $tokenFunctions array and return true (returning
+false makes no sense).
 $tokenFunctions: array(action => callback)
 
-'ApiMain::onException': Called by ApiMain::executeActionWithErrorHandling()
-when an exception is thrown during API action execution.
+'ApiMain::onException': Called by ApiMain::executeActionWithErrorHandling() when
+an exception is thrown during API action execution.
 $apiMain: Calling ApiMain instance.
 $e: Exception object.
 
-'ApiRsdServiceApis': Add or remove APIs from the RSD services list.
-Each service should have its own entry in the $apis array and have a
-unique name, passed as key for the array that represents the service data.
-In this data array, the key-value-pair identified by the apiLink key is
-required.
+'ApiRsdServiceApis': Add or remove APIs from the RSD services list. Each service
+should have its own entry in the $apis array and have a unique name, passed as
+key for the array that represents the service data. In this data array, the
+key-value-pair identified by the apiLink key is required.
 &$apis: array of services
 
-'ApiTokensGetTokenTypes': use this hook to extend action=tokens with new
-token types.
+'ApiTokensGetTokenTypes': Use this hook to extend action=tokens with new token
+types.
 &$tokenTypes: supported token types in format 'type' => callback function
 used to retrieve this type of tokens.
 
-'ArticleAfterFetchContent': after fetching content of an article from
-the database. DEPRECATED, use ArticleAfterFetchContentObject instead.
+'ArticleAfterFetchContent': After fetching content of an article from the
+database. DEPRECATED, use ArticleAfterFetchContentObject instead.
 $article: the article (object) being loaded from the database
 &$content: the content (string) of the article
 
-'ArticleAfterFetchContentObject': after fetching content of an article from
-the database
+'ArticleAfterFetchContentObject': After fetching content of an article from the
+database.
 $article: the article (object) being loaded from the database
 &$content: the content of the article, as a Content object
 
-'ArticleConfirmDelete': before writing the confirmation form for article
-       deletion
+'ArticleConfirmDelete': Before writing the confirmation form for article
+deletion.
 $article: the article (object) being deleted
-$output: the OutputPage object ($wgOut)
+$output: the OutputPage object
 &$reason: the reason (string) the article is being deleted
 
-'ArticleContentOnDiff': before showing the article content below a diff.
-Use this to change the content in this area or how it is loaded.
- $diffEngine: the DifferenceEngine
- $output: the OutputPage object ($wgOut)
+'ArticleContentOnDiff': Before showing the article content below a diff. Use
+this to change the content in this area or how it is loaded.
+$diffEngine: the DifferenceEngine
+$output: the OutputPage object
 
-'ArticleDelete': before an article is deleted
+'ArticleDelete': Before an article is deleted.
 $wikiPage: the WikiPage (object) being deleted
 $user: the user (object) deleting the article
 $reason: the reason (string) the article is being deleted
@@ -472,7 +471,7 @@ $error: if the deletion was prohibited, the (raw HTML) error message to display
 $status: Status object, modify this to throw an error. Overridden by $error
   (added in 1.20)
 
-'ArticleDeleteComplete': after an article is deleted
+'ArticleDeleteComplete': After an article is deleted.
 $wikiPage: the WikiPage that was deleted
 $user: the user that deleted the article
 $reason: the reason the article was deleted
@@ -480,27 +479,28 @@ $id: id of the article that was deleted
 $content: the Content of the deleted page
 $logEntry: the ManualLogEntry used to record the deletion
 
-'ArticleEditUpdateNewTalk': before updating user_newtalk when a user talk page
-was changed
+'ArticleEditUpdateNewTalk': Before updating user_newtalk when a user talk page
+was changed.
 $wikiPage: WikiPage (object) of the user talk page
 
-'ArticleEditUpdates': when edit updates (mainly link tracking) are made when an
-article has been changed
+'ArticleEditUpdates': When edit updates (mainly link tracking) are made when an
+article has been changed.
 $wikiPage: the WikiPage (object)
 $editInfo: data holder that includes the parser output ($editInfo->output) for
 that page after the change
 $changed: bool for if the page was changed
 
-'ArticleEditUpdatesDeleteFromRecentchanges': before deleting old entries from
-recentchanges table, return false to not delete old entries
+'ArticleEditUpdatesDeleteFromRecentchanges': Before deleting old entries from
+recentchanges table, return false to not delete old entries.
 $wikiPage: WikiPage (object) being modified
 
 'ArticleFromTitle': when creating an article object from a title object using
-Wiki::articleFromTitle()
-$title: title (object) used to create the article object
-$article: article (object) that will be returned
+Wiki::articleFromTitle().
+$title: Title (object) used to create the article object
+$article: Article (object) that will be returned
 
-'ArticleInsertComplete': After a new article is created. DEPRECATED, use PageContentInsertComplete
+'ArticleInsertComplete': After a new article is created. DEPRECATED, use
+PageContentInsertComplete.
 $wikiPage: WikiPage created
 $user: User creating the article
 $text: New content
@@ -511,55 +511,56 @@ $section: (No longer used)
 $flags: Flags passed to WikiPage::doEditContent()
 $revision: New Revision of the article
 
-'ArticleMergeComplete': after merging to article using Special:Mergehistory
+'ArticleMergeComplete': After merging to article using Special:Mergehistory.
 $targetTitle: target title (object)
 $destTitle: destination title (object)
 
-'ArticlePageDataAfter': after loading data of an article from the database
+'ArticlePageDataAfter': After loading data of an article from the database.
 $wikiPage: WikiPage (object) whose data were loaded
 $row: row (object) returned from the database server
 
-'ArticlePageDataBefore': before loading data of an article from the database
+'ArticlePageDataBefore': Before loading data of an article from the database.
 $wikiPage: WikiPage (object) that data will be loaded
-$fields: fileds (array) to load from the database
+$fields: fields (array) to load from the database
 
-'ArticlePrepareTextForEdit': called when preparing text to be saved
+'ArticlePrepareTextForEdit': Called when preparing text to be saved.
 $wikiPage: the WikiPage being saved
 $popts: parser options to be used for pre-save transformation
 
-'ArticleProtect': before an article is protected
+'ArticleProtect': Before an article is protected.
 $wikiPage: the WikiPage being protected
 $user: the user doing the protection
 $protect: boolean whether this is a protect or an unprotect
 $reason: Reason for protect
 $moveonly: boolean whether this is for move only or not
 
-'ArticleProtectComplete': after an article is protected
+'ArticleProtectComplete': After an article is protected.
 $wikiPage: the WikiPage that was protected
 $user: the user who did the protection
 $protect: boolean whether it was a protect or an unprotect
 $reason: Reason for protect
 $moveonly: boolean whether it was for move only or not
 
-'ArticlePurge': before executing "&action=purge"
+'ArticlePurge': Before executing "&action=purge".
 $wikiPage: WikiPage (object) to purge
 
-'ArticleRevisionVisibilitySet': called when changing visibility of one or more
-revision of an article
-&$title: title object of the article
+'ArticleRevisionVisibilitySet': Called when changing visibility of one or more
+revisions of an article.
+&$title: Title object of the article
 
-'ArticleRevisionUndeleted': after an article revision is restored
+'ArticleRevisionUndeleted': After an article revision is restored.
 $title: the article title
 $revision: the revision
 $oldPageID: the page ID of the revision when archived (may be null)
 
-'ArticleRollbackComplete': after an article rollback is completed
+'ArticleRollbackComplete': After an article rollback is completed.
 $wikiPage: the WikiPage that was edited
 $user: the user who did the rollback
 $revision: the revision the page was reverted back to
 $current: the reverted revision
 
-'ArticleSave': before an article is saved. DEPRECATED, use PageContentSave instead
+'ArticleSave': Before an article is saved. DEPRECATED, use PageContentSave
+instead.
 $wikiPage: the WikiPage (object) being saved
 $user: the user (object) saving the article
 $text: the new article text
@@ -568,7 +569,8 @@ $isminor: minor flag
 $iswatch: watch flag
 $section: section #
 
-'ArticleSaveComplete': After an article has been updated. DEPRECATED, use PageContentSaveComplete instead.
+'ArticleSaveComplete': After an article has been updated. DEPRECATED, use
+PageContentSaveComplete instead.
 $wikiPage: WikiPage modified
 $user: User performing the modification
 $text: New content
@@ -581,10 +583,10 @@ $revision: New Revision of the article
 $status: Status object about to be returned by doEditContent()
 $baseRevId: the rev ID (or false) this edit was based on
 
-'ArticleUndelete': When one or more revisions of an article are restored
+'ArticleUndelete': When one or more revisions of an article are restored.
 $title: Title corresponding to the article restored
-$create: Whether or not the restoration caused the page to be created
-(i.e. it didn't exist before)
+$create: Whether or not the restoration caused the page to be created (i.e. it
+  didn't exist before).
 $comment: The comment associated with the undeletion.
 
 'ArticleUndeleteLogEntry': When a log entry is generated but not yet saved.
@@ -592,8 +594,8 @@ $pageArchive: the PageArchive object
 &$logEntry: ManualLogEntry object
 $user: User who is performing the log action
 
-'ArticleUpdateBeforeRedirect': After a page is updated (usually on save),
-before the user is redirected back to the page
+'ArticleUpdateBeforeRedirect': After a page is updated (usually on save), before
+the user is redirected back to the page.
 &$article: the article
 &$sectionanchor: The section anchor link (e.g. "#overview" )
 &$extraq: Extra query parameters which can be added via hooked functions
@@ -608,60 +610,61 @@ viewing.
 &$outputDone: whether the output for this page finished or not. Set to a ParserOutput
 object to both indicate that the output is done and what parser output was used.
 
-'ArticleViewRedirect': before setting "Redirected from ..." subtitle when
-follwed an redirect
+'ArticleViewRedirect': Before setting "Redirected from ..." subtitle when a
+redirect was followed.
 $article: target article (object)
 
-'ArticleViewCustom': allows to output the text of the article in a different format than wikitext.
-DEPRECATED, use ArticleContentViewCustom instead.
-Note that it is preferrable to implement proper handing for a custom data type using the ContentHandler facility.
+'ArticleViewCustom': Allows to output the text of the article in a different
+format than wikitext. DEPRECATED, use ArticleContentViewCustom instead. Note
+that it is preferable to implement proper handing for a custom data type using
+the ContentHandler facility.
 $text: text of the page
 $title: title of the page
 $output: reference to $wgOut
 
-'ArticleContentViewCustom': allows to output the text of the article in a different format than wikitext.
-Note that it is preferrable to implement proper handing for a custom data type using the ContentHandler facility.
+'ArticleContentViewCustom': Allows to output the text of the article in a
+different format than wikitext. Note that it is preferable to implement proper
+handing for a custom data type using the ContentHandler facility.
 $content: content of the page, as a Content object
 $title: title of the page
 $output: reference to $wgOut
 
 'AuthPluginAutoCreate': Called when creating a local account for an user logged
-in from an external authentication method
+in from an external authentication method.
 $user: User object created locally
 
-'AuthPluginSetup': update or replace authentication plugin object ($wgAuth)
-Gives a chance for an extension to set it programattically to a variable class.
+'AuthPluginSetup': Update or replace authentication plugin object ($wgAuth).
+Gives a chance for an extension to set it programmatically to a variable class.
 &$auth: the $wgAuth object, probably a stub
 
-'AutopromoteCondition': check autopromote condition for user.
+'AutopromoteCondition': Check autopromote condition for user.
 $type: condition type
 $args: arguments
 $user: user
 $result: result of checking autopromote condition
 
-'BacklinkCacheGetPrefix': allows to set prefix for a spefific link table
+'BacklinkCacheGetPrefix': Allows to set prefix for a specific link table.
 $table: table name
 &$prefix: prefix
 
-'BacklinkCacheGetConditions': allows to set conditions for query when links to certain title
-are fetched
+'BacklinkCacheGetConditions': Allows to set conditions for query when links to
+certain title are fetched.
 $table: table name
 $title: title of the page to which backlinks are sought
 &$conds: query conditions
 
-'BadImage': When checking against the bad image list
+'BadImage': When checking against the bad image list. Change $bad and return
+false to override. If an image is "bad", it is not rendered inline in wiki
+pages or galleries in category pages.
 $name: Image name being checked
 &$bad: Whether or not the image is "bad"
 
-Change $bad and return false to override. If an image is "bad", it is not
-rendered inline in wiki pages or galleries in category pages.
-
-'BeforeDisplayNoArticleText': before displaying noarticletext or noarticletext-nopermission
-at Article::showMissingArticle()
-
+'BeforeDisplayNoArticleText': Before displaying message key "noarticletext" or
+"noarticletext-nopermission" at Article::showMissingArticle().
 $article: article object
 
-'BeforeInitialize': before anything is initialized in MediaWiki::performRequest()
+'BeforeInitialize': Before anything is initialized in
+MediaWiki::performRequest().
 &$title: Title being used for request
 $unused: null
 &$output: OutputPage object
@@ -669,7 +672,7 @@ $unused: null
 $request: WebRequest object
 $mediaWiki: Mediawiki object
 
-'BeforePageDisplay': Prior to outputting a page
+'BeforePageDisplay': Prior to outputting a page.
 &$out: OutputPage object
 &$skin: Skin object
 
@@ -680,27 +683,31 @@ $out: OutputPage object
 &$redirect: URL, modifiable
 &$code: HTTP code (eg '301' or '302'), modifiable
 
-'BeforeParserFetchFileAndTitle': before an image is rendered by Parser
+'BeforeParserFetchFileAndTitle': Before an image is rendered by Parser.
 $parser: Parser object
 $nt: the image title
 &$options: array of options to RepoGroup::findFile
 &$descQuery: query string to add to thumbnail URL
 
+FIXME: Where does the below sentence fit in?
 If 'broken' is a key in $options then the file will appear as a broken thumbnail.
 
-'BeforeParserFetchTemplateAndtitle': before a template is fetched by Parser
+'BeforeParserFetchTemplateAndtitle': Before a template is fetched by Parser.
 $parser: Parser object
 $title: title of the template
 &$skip: skip this template and link it?
 &$id: the id of the revision being parsed
 
-'BeforeParserrenderImageGallery': before an image gallery is rendered by Parser
+'BeforeParserrenderImageGallery': Before an image gallery is rendered by Parser.
 &$parser: Parser object
 &$ig: ImageGallery object
 
-'BeforeWelcomeCreation': before the welcomecreation message is displayed to a newly created user
-&$welcome_creation_msg: MediaWiki message name to display on the welcome screen to a newly created user account
-&$injected_html: Any HTML to inject after the "logged in" message of a newly created user account
+'BeforeWelcomeCreation': Before the welcomecreation message is displayed to a
+newly created user.
+&$welcome_creation_msg: MediaWiki message name to display on the welcome screen
+  to a newly created user account.
+&$injected_html: Any HTML to inject after the "logged in" message of a newly
+  created user account
 
 'BitmapHandlerTransform': before a file is transformed, gives extension the
 possibility to transform it themselves
@@ -709,54 +716,60 @@ $image: File
 &$scalerParams: Array with scaler parameters
 &$mto: null, set to a MediaTransformOutput
 
-'BitmapHandlerCheckImageArea': by BitmapHandler::normaliseParams, after all normalizations have been performed, except for the $wgMaxImageArea check
+'BitmapHandlerCheckImageArea': By BitmapHandler::normaliseParams, after all
+normalizations have been performed, except for the $wgMaxImageArea check.
 $image: File
 &$params: Array of parameters
-&$checkImageAreaHookResult: null, set to true or false to override the $wgMaxImageArea check result
+&$checkImageAreaHookResult: null, set to true or false to override the
+  $wgMaxImageArea check result.
 
-'PerformRetroactiveAutoblock': called before a retroactive autoblock is applied to a user
+'PerformRetroactiveAutoblock': Called before a retroactive autoblock is applied
+to a user.
 $block: Block object (which is set to be autoblocking)
 &$blockIds: Array of block IDs of the autoblock
 
-'BlockIp': before an IP address or user is blocked
+'BlockIp': Before an IP address or user is blocked.
 $block: the Block object about to be saved
 $user: the user _doing_ the block (not the one being blocked)
 
-'BlockIpComplete': after an IP address or user is blocked
+'BlockIpComplete': After an IP address or user is blocked.
 $block: the Block object that was saved
 $user: the user who did the block (not the one being blocked)
 
-'BookInformation': Before information output on Special:Booksources
+'BookInformation': Before information output on Special:Booksources.
 $isbn: ISBN to show information for
 $output: OutputPage object in use
 
-'CanonicalNamespaces': For extensions adding their own namespaces or altering the defaults
+'CanonicalNamespaces': For extensions adding their own namespaces or altering
+the defaults.
 &$namespaces: Array of namespace numbers with corresponding canonical names
 
-'CategoryPageView': before viewing a categorypage in CategoryPage::view
+'CategoryPageView': Before viewing a categorypage in CategoryPage::view.
 $catpage: CategoryPage instance
 
-'ChangePasswordForm': For extensions that need to add a field to the ChangePassword form
-via the Preferences form
-&$extraFields: An array of arrays that hold fields like would be passed to the pretty function.
+'ChangePasswordForm': For extensions that need to add a field to the
+ChangePassword form via the Preferences form.
+&$extraFields: An array of arrays that hold fields like would be passed to the
+  pretty function.
 
 'ChangesListInsertArticleLink': Override or augment link to article in RC list.
 &$changesList: ChangesList instance.
 &$articlelink: HTML of link to article (already filled-in).
-&$s:           HTML of row that is being constructed.
-&$rc:          RecentChange instance.
-$unpatrolled:  Whether or not we are showing unpatrolled changes.
-$watched:      Whether or not the change is watched by the user.
+&$s: HTML of row that is being constructed.
+&$rc: RecentChange instance.
+$unpatrolled: Whether or not we are showing unpatrolled changes.
+$watched: Whether or not the change is watched by the user.
 
-'Collation::factory': Called if $wgCategoryCollation is an unknown collation
+'Collation::factory': Called if $wgCategoryCollation is an unknown collation.
 $collationName: Name of the collation in question
-&$collationObject: Null. Replace with a subclass of the Collation class that implements
-the collation given in $collationName.
+&$collationObject: Null. Replace with a subclass of the Collation class that
+  implements the collation given in $collationName.
 
-'ConfirmEmailComplete': Called after a user's email has been confirmed successfully
+'ConfirmEmailComplete': Called after a user's email has been confirmed
+successfully.
 $user: user (object) whose email is being confirmed
 
-'ContentHandlerDefaultModelFor': Called when the default content model is determiend
+'ContentHandlerDefaultModelFor': Called when the default content model is determined
 for a given title. May be used to assign a different model for that title.
 $title: the Title in question
 &$model: the model name. Use with CONTENT_MODEL_XXX constants.
@@ -809,7 +822,7 @@ etc.
 'DatabaseOraclePostInit': Called after initialising an Oracle database
 &$db: the DatabaseOracle object
 
-'Debug': called when outputting a debug log line via wfDebug() or wfDebugLog()
+'Debug': Called when outputting a debug log line via wfDebug() or wfDebugLog()
 $text: plaintext string to be output
 $group: null or a string naming a logging group (as defined in $wgDebugLogGroups)
 
@@ -820,7 +833,7 @@ $title: the diff page title (nullable)
 $old: the ?old= param value from the url
 $new: the ?new= param value from the url
 
-'DiffViewHeader': called before diff display
+'DiffViewHeader': Called before diff display
 $diff: DifferenceEngine object that's calling
 $oldRev: Revision object of the "old" revision (may be null/invalid)
 $newRev: Revision object of the "new" revision
@@ -856,11 +869,18 @@ $text: content of the edit box
 &$error: error message to return
 $summary: Edit summary for page
 
-'EditFilterMergedContent': Post-section-merge edit filter
-$editor: EditPage instance (object)
-$content: content of the edit box, as a Content object
-&$error: error message to return
+'EditFilterMergedContent': Post-section-merge edit filter.
+This may be triggered by the EditPage or any other facility that modifies page content.
+Use the $status object to indicate whether the edit should be allowed, and to provide
+a reason for disallowing it. Return false to abort the edit, and true to continue.
+Returning true if $status->isOK() returns false means "don't save but continue user
+interaction", e.g. show the edit form.
+$context: object implementing the IContextSource interface.
+$content: content of the edit box, as a Content object.
+$status: Status object to represent errors, etc.
 $summary: Edit summary for page
+$user: the User object representing the user whois performing the edit.
+$minoredit: whether the edit was marked as minor by the user.
 
 'EditFormPreloadText': Allows population of the edit form when creating
 new pages
@@ -871,7 +891,7 @@ new pages
 pages
 $editPage: EditPage    object
 
-'EditPage::attemptSave': called before an article is
+'EditPage::attemptSave': Called before an article is
 saved, that is before WikiPage::doEditContent() is called
 $editpage_Obj: the current EditPage object
 
@@ -910,46 +930,51 @@ sections.
 &$editor: EditPage instance
 &$out: OutputPage instance
 
-'EditPageBeforeEditButtons':  allows modifying the edit buttons below the
-textarea in the edit form
+'EditPageBeforeEditButtons': Allows modifying the edit buttons below the
+textarea in the edit form.
 &$editpage: The current EditPage object
 &$buttons: Array of edit buttons "Save", "Preview", "Live", and "Diff"
 &$tabindex: HTML tabindex of the last edit check/button
 
-'EditPageBeforeEditChecks':  allows modifying the edit checks below the
-textarea in the edit form
+'EditPageBeforeEditChecks': Allows modifying the edit checks below the textarea
+in the edit form.
 &$editpage: The current EditPage object
 &$checks: Array of edit checks like "watch this page"/"minor edit"
 &$tabindex: HTML tabindex of the last edit check/button
 
-'EditPageBeforeEditToolbar': allows modifying the edit toolbar above the
-textarea in the edit form
+'EditPageBeforeEditToolbar': Allows modifying the edit toolbar above the
+textarea in the edit form.
 &$toolbar: The toolbar HTMl
 
-'EditPageCopyrightWarning': Allow for site and per-namespace customization of contribution/copyright notice.
+'EditPageCopyrightWarning': Allow for site and per-namespace customization of
+contribution/copyright notice.
 $title: title of page being edited
-&$msg: localization message name, overridable. Default is either 'copyrightwarning' or 'copyrightwarning2'
+&$msg: localization message name, overridable. Default is either
+  'copyrightwarning' or 'copyrightwarning2'.
 
-'EditPageGetDiffText': Allow modifying the wikitext that will be used in
-"Show changes". DEPRECATED. Use EditPageGetDiffContent instead.
-Note that it is preferrable to implement diff handling for different data types using the ContentHandler facility.
+'EditPageGetDiffText': DEPRECATED. Use EditPageGetDiffContent instead. Allow
+modifying the wikitext that will be used in "Show changes". Note that it is
+preferable to implement diff handling for different data types using the
+ContentHandler facility.
 $editPage: EditPage object
 &$newtext: wikitext that will be used as "your version"
 
 'EditPageGetDiffContent': Allow modifying the wikitext that will be used in
-"Show changes".
-Note that it is preferrable to implement diff handling for different data types using the ContentHandler facility.
+"Show changes". Note that it is preferable to implement diff handling for
+different data types using the ContentHandler facility.
 $editPage: EditPage object
 &$newtext: wikitext that will be used as "your version"
 
-'EditPageGetPreviewText': Allow modifying the wikitext that will be previewed.
-DEPRECATED. Use EditPageGetPreviewContent instead.
-Note that it is preferrable to implement previews for different data types using the COntentHandler facility.
+'EditPageGetPreviewText': DEPRECATED. Use EditPageGetPreviewContent instead.
+Allow modifying the wikitext that will be previewed. Note that it is preferable
+to implement previews for different data types using the ContentHandler
+facility.
 $editPage: EditPage object
 &$toparse: wikitext that will be parsed
 
-'EditPageGetPreviewContent': Allow modifying the wikitext that will be previewed.
-Note that it is preferrable to implement previews for different data types using the COntentHandler facility.
+'EditPageGetPreviewContent': Allow modifying the wikitext that will be
+previewed. Note that it is preferable to implement previews for different data
+types using the ContentHandler facility.
 $editPage: EditPage object
 &$content: Content object to be previewed (may be replaced by hook function)
 
@@ -957,7 +982,7 @@ $editPage: EditPage object
 &$editpage: The current EditPage object
 &$res: the HTML of the error text
 
-'EditPageTosSummary':  Give a chance for site and per-namespace customizations
+'EditPageTosSummary': Give a chance for site and per-namespace customizations
 of terms of service summary link that might exist separately from the copyright
 notice.
 $title: title of page being edited
@@ -971,73 +996,80 @@ $link: Default link
 &$result: Result (alter this to override the generated links)
 $lang: The language code to use for the link in the wfMessage function
 
-'EmailConfirmed': When checking that the user's email address is "confirmed"
+'EmailConfirmed': When checking that the user's email address is "confirmed".
 $user: User being checked
 $confirmed: Whether or not the email address is confirmed
 This runs before the other checks, such as anonymity and the real check; return
 true to allow those checks to occur, and false if checking is done.
 
-'EmailUser': before sending email from one user to another
+'EmailUser': Before sending email from one user to another.
 $to: address of receiving user
 $from: address of sending user
 $subject: subject of the mail
 $text: text of the mail
 
-'EmailUserCC': before sending the copy of the email to the author
+'EmailUserCC': Before sending the copy of the email to the author.
 $to: address of receiving user
 $from: address of sending user
 $subject: subject of the mail
 $text: text of the mail
 
-'EmailUserComplete': after sending email from one user to another
+'EmailUserComplete': After sending email from one user to another.
 $to: address of receiving user
 $from: address of sending user
 $subject: subject of the mail
 $text: text of the mail
 
-'EmailUserForm': after building the email user form object
+'EmailUserForm': After building the email user form object.
 $form: HTMLForm object
 
-'EmailUserPermissionsErrors': to retrieve permissions errors for emailing a user.
+'EmailUserPermissionsErrors': to retrieve permissions errors for emailing a
+user.
 $user: The user who is trying to email another user.
 $editToken: The user's edit token.
-&$hookErr: Out-param for the error. Passed as the parameters to OutputPage::showErrorPage.
+&$hookErr: Out-param for the error. Passed as the parameters to
+  OutputPage::showErrorPage.
 
-'ExemptFromAccountCreationThrottle': Exemption from the account creation throttle
+'ExemptFromAccountCreationThrottle': Exemption from the account creation
+throttle.
 $ip: The ip address of the user
 
-'ExtensionTypes': called when generating the extensions credits, use this to change the tables headers
+'ExtensionTypes': Called when generating the extensions credits, use this to
+change the tables headers.
 &$extTypes: associative array of extensions types
 
-'ExtractThumbParameters': called when extracting thumbnail parameters from a thumbnail file name
+'ExtractThumbParameters': Called when extracting thumbnail parameters from a
+thumbnail file name.
 $thumbname: the base name of the thumbnail file
 &$params: the currently extracted params (has source name, temp or archived zone)
 
-'FetchChangesList': When fetching the ChangesList derivative for
-a particular user
+'FetchChangesList': When fetching the ChangesList derivative for a particular
+user.
 $user: User the list is being fetched for
 &$skin: Skin object to be used with the list
-&$list: List object (defaults to NULL, change it to an object
-       instance and return false override the list derivative used)
+&$list: List object (defaults to NULL, change it to an object instance and
+  return false override the list derivative used)
 
-'FileDeleteComplete': When a file is deleted
+'FileDeleteComplete': When a file is deleted.
 $file: reference to the deleted file
 $oldimage: in case of the deletion of an old image, the name of the old file
 $article: in case all revisions of the file are deleted a reference to the
-       WikiFilePage associated with the file.
+  WikiFilePage associated with the file.
 $user: user who performed the deletion
 $reason: reason
 
-'FileTransformed': When a file is transformed and moved into storage
+'FileTransformed': When a file is transformed and moved into storage.
 $file: reference to the File object
 $thumb: the MediaTransformOutput object
 $tmpThumbPath: The temporary file system path of the transformed file
 $thumbPath: The permanent storage path of the transformed file
 
-'FileUpload': When a file upload occurs
+'FileUpload': When a file upload occurs.
 $file : Image object representing the file that was uploaded
-$reupload : Boolean indicating if there was a previously another image there or not (since 1.17)
-$hasDescription : Boolean indicating that there was already a description page and a new one from the comment wasn't created (since 1.17)
+$reupload : Boolean indicating if there was a previously another image there or
+  not (since 1.17)
+$hasDescription : Boolean indicating that there was already a description page
+  and a new one from the comment wasn't created (since 1.17)
 
 'FileUndeleteComplete': When a file is undeleted
 $title: title object to the file
@@ -1045,28 +1077,30 @@ $fileVersions: array of undeleted versions. Empty if all versions were restored
 $user: user who performed the undeletion
 $reason: reason
 
-'FormatAutocomments': When an autocomment is formatted by the Linker
- &$comment: Reference to the accumulated comment. Initially null, when set the default code will be skipped.
+'FormatAutocomments': When an autocomment is formatted by the Linker.
+ &$comment: Reference to the accumulated comment. Initially null, when set the
+   default code will be skipped.
  $pre: Initial part of the parsed comment before the call to the hook.
  $auto: The extracted part of the parsed comment before the call to the hook.
  $post: The final part of the parsed comment before the call to the hook.
  $title: An optional title object used to links to sections. Can be null.
  $local: Boolean indicating whether section links should refer to local page.
 
-'GetAutoPromoteGroups': When determining which autopromote groups a user
-is entitled to be in.
+'GetAutoPromoteGroups': When determining which autopromote groups a user is
+entitled to be in.
 &$user: user to promote.
 &$promote: groups that will be added.
 
 'GetBlockedStatus': after loading blocking status of an user from the database
 $user: user (object) being checked
 
-'GetCacheVaryCookies': get cookies that should vary cache options
+'GetCacheVaryCookies': Get cookies that should vary cache options.
 $out: OutputPage object
 &$cookies: array of cookies name, add a value to it if you want to add a cookie
-       that have to vary cache options
+  that have to vary cache options
 
-'GetCanonicalURL': modify fully-qualified URLs used for IRC and e-mail notifications
+'GetCanonicalURL': Modify fully-qualified URLs used for IRC and e-mail
+notifications.
 $title: Title object of page
 $url: string value as output (out parameter, can modify)
 $query: query options passed to Title::getCanonicalURL()
@@ -1075,157 +1109,170 @@ $query: query options passed to Title::getCanonicalURL()
 $title: Title object that we need to get a sortkey for
 &$sortkey: Sortkey to use.
 
-'GetFullURL': modify fully-qualified URLs used in redirects/export/offsite data
+'GetDoubleUnderscoreIDs': Modify the list of behavior switch (double
+underscore) magic words. Called by MagicWord.
+&$doubleUnderscoreIDs: array of strings
+
+'GetFullURL': Modify fully-qualified URLs used in redirects/export/offsite data.
 $title: Title object of page
 $url: string value as output (out parameter, can modify)
 $query: query options passed to Title::getFullURL()
 
-'GetInternalURL': modify fully-qualified URLs used for squid cache purging
+'GetInternalURL': Modify fully-qualified URLs used for squid cache purging.
 $title: Title object of page
 $url: string value as output (out parameter, can modify)
 $query: query options passed to Title::getInternalURL()
 
-'GetIP': modify the ip of the current user (called only once)
+'GetIP': modify the ip of the current user (called only once).
 &$ip: string holding the ip as determined so far
 
-'GetLinkColours': modify the CSS class of an array of page links
+'GetLinkColours': modify the CSS class of an array of page links.
 $linkcolour_ids: array of prefixed DB keys of the pages linked to,
        indexed by page_id.
 &$colours: (output) array of CSS classes, indexed by prefixed DB keys
 
-'GetLocalURL': modify local URLs as output into page links. Note that if you
-       are working with internal urls (non-interwiki) then it may be preferable
-       to work with the GetLocalURL::Internal or GetLocalURL::Article hooks as
-       GetLocalURL can be buggy for internal urls on render if you do not
-       re-implement the horrible hack that Title::getLocalURL uses
-       in your own extension.
+'GetLocalURL': Modify local URLs as output into page links. Note that if you are
+working with internal urls (non-interwiki) then it may be preferable to work
+with the GetLocalURL::Internal or GetLocalURL::Article hooks as GetLocalURL can
+be buggy for internal urls on render if you do not re-implement the horrible
+hack that Title::getLocalURL uses in your own extension.
 $title: Title object of page
 &$url: string value as output (out parameter, can modify)
 $query: query options passed to Title::getLocalURL()
 
-'GetLocalURL::Internal': modify local URLs to internal pages.
+'GetLocalURL::Internal': Modify local URLs to internal pages.
 $title: Title object of page
 &$url: string value as output (out parameter, can modify)
 $query: query options passed to Title::getLocalURL()
 
-'GetLocalURL::Article': modify local URLs specifically pointing to article paths
-       without any fancy queries or variants.
+'GetLocalURL::Article': Modify local URLs specifically pointing to article paths
+without any fancy queries or variants.
 $title: Title object of page
 &$url: string value as output (out parameter, can modify)
 
-'GetMetadataVersion': modify the image metadata version currently in use. This is
-       used when requesting image metadata from a ForiegnApiRepo. Media handlers
-       that need to have versioned metadata should add an element to the end of
-       the version array of the form 'handler_name=version'. Most media handlers
-       won't need to do this unless they broke backwards compatibility with a
-       previous version of the media handler metadata output.
+'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
+version array of the form 'handler_name=version'. Most media handlers won't need
+to do this unless they broke backwards compatibility with a previous version of
+the media handler metadata output.
 &$version: Array of version strings
 
-'GetPreferences': modify user preferences
+'GetPreferences': Modify user preferences.
 $user: User whose preferences are being modified.
 &$preferences: Preferences description array, to be fed to an HTMLForm object
 
 'getUserPermissionsErrors': Add a permissions error when permissions errors are
-       checked for.  Use instead of userCan for most cases. Return false if the
-       user can't do it, and populate $result with the reason in the form of
-       array( messagename, param1, param2, ... ).  For consistency, error messages
-       should be plain text with no special coloring, bolding, etc. to show that
-       they're errors; presenting them properly to the user as errors is done by
-       the caller.
+checked for. Use instead of userCan for most cases. Return false if the user
+can't do it, and populate $result with the reason in the form of
+array( messagename, param1, param2, ... ). For consistency, error messages
+should be plain text with no special coloring, bolding, etc. to show that
+they're errors; presenting them properly to the user as errors is done by the
+caller.
 $title: Title object being checked against
 $user : Current user object
 $action: Action being checked
 $result: User permissions error to add. If none, return true.
 
-'getUserPermissionsErrorsExpensive': Absolutely the same, but is called only
-       if expensive checks are enabled.
+'getUserPermissionsErrorsExpensive': Equal to getUserPermissionsErrors, but is
+called only if expensive checks are enabled. Add a permissions error when
+permissions errors are checked for. Return false if the user can't do it, and
+populate $result with the reason in the form of array( messagename, param1,
+param2, ... ). For consistency, error messages should be plain text with no
+special coloring, bolding, etc. to show that they're errors; presenting them
+properly to the user as errors is done by the caller.
 
-'GitViewers': called when generating the list of git viewers for Special:Version, use
-       this to change the list.
-&$extTypes: associative array of repo URLS to viewer URLs.
+$title: Title object being checked against
+$user : Current user object
+$action: Action being checked
+$result: User permissions error to add. If none, return true.
 
+'GitViewers': Called when generating the list of git viewers for
+Special:Version, use this to change the list.
+&$extTypes: associative array of repo URLS to viewer URLs.
 
 'ImageBeforeProduceHTML': Called before producing the HTML created by a wiki
-       image insertion.  You can skip the default logic entirely by returning
-       false, or just modify a few things using call-by-reference.
+image insertion. You can skip the default logic entirely by returning false, or
+just modify a few things using call-by-reference.
 &$skin: Skin object
 &$title: Title object of the image
 &$file: File object, or false if it doesn't exist
 &$frameParams: Various parameters with special meanings; see documentation in
-       includes/Linker.php for Linker::makeImageLink
+  includes/Linker.php for Linker::makeImageLink
 &$handlerParams: Various parameters with special meanings; see documentation in
-       includes/Linker.php for Linker::makeImageLink
+  includes/Linker.php for Linker::makeImageLink
 &$time: Timestamp of file in 'YYYYMMDDHHIISS' string form, or false for current
 &$res: Final HTML output, used if you return false
 
 
 'ImageOpenShowImageInlineBefore': Call potential extension just before showing
-       the image on an image page
+the image on an image page.
 $imagePage: ImagePage object ($this)
 $output: $wgOut
 
-'ImagePageAfterImageLinks': called after the image links section on an image
-       page is built
+'ImagePageAfterImageLinks': Called after the image links section on an image
+page is built.
 $imagePage: ImagePage object ($this)
 &$html: HTML for the hook to add
 
-'ImagePageFileHistoryLine': called when a file history line is contructed
+'ImagePageFileHistoryLine': Called when a file history line is constructed.
 $file: the file
 $line: the HTML of the history line
 $css: the line CSS class
 
-'ImagePageFindFile': called when fetching the file associated with an image page
+'ImagePageFindFile': Called when fetching the file associated with an image
+page.
 $page: ImagePage object
 &$file: File object
 &$displayFile: displayed File object
 
-'ImagePageShowTOC': called when the file toc on an image page is generated
+'ImagePageShowTOC': Called when the file toc on an image page is generated.
 $page: ImagePage object
 &$toc: Array of <li> strings
 
 'ImgAuthBeforeStream': executed before file is streamed to user, but only when
-       using img_auth.php
+using img_auth.php.
 &$title: the Title object of the file as it would appear for the upload page
 &$path: the original file and path name when img_auth was invoked by the the web
-       server
+  server
 &$name: the name only component of the file
 &$result: The location to pass back results of the hook routine (only used if
-       failed)
-       $result[0]=The index of the header message
-       $result[1]=The index of the body text message
-       $result[2 through n]=Parameters passed to body text message. Please note the
-       header message cannot receive/use parameters.
+  failed)
+  $result[0]=The index of the header message
+  $result[1]=The index of the body text message
+  $result[2 through n]=Parameters passed to body text message. Please note the
+  header message cannot receive/use parameters.
 
-'ImportHandleLogItemXMLTag': When parsing a XML tag in a log item
+'ImportHandleLogItemXMLTag': When parsing a XML tag in a log item.
 $reader: XMLReader object
 $logInfo: Array of information
 Return false to stop further processing of the tag
 
-'ImportHandlePageXMLTag': When parsing a XML tag in a page
+'ImportHandlePageXMLTag': When parsing a XML tag in a page.
 $reader: XMLReader object
 $pageInfo: Array of information
 Return false to stop further processing of the tag
 
-'ImportHandleRevisionXMLTag': When parsing a XML tag in a page revision
+'ImportHandleRevisionXMLTag': When parsing a XML tag in a page revision.
 $reader: XMLReader object
 $pageInfo: Array of page information
 $revisionInfo: Array of revision information
 Return false to stop further processing of the tag
 
-'ImportHandleToplevelXMLTag': When parsing a top level XML tag
+'ImportHandleToplevelXMLTag': When parsing a top level XML tag.
 $reader: XMLReader object
 Return false to stop further processing of the tag
 
-'ImportHandleUploadXMLTag': When parsing a XML tag in a file upload
+'ImportHandleUploadXMLTag': When parsing a XML tag in a file upload.
 $reader: XMLReader object
 $revisionInfo: Array of information
 Return false to stop further processing of the tag
 
-'InfoAction': When building information to display on the action=info page
+'InfoAction': When building information to display on the action=info page.
 $context: IContextSource object
 &$pageInfo: Array of information
 
-'InitializeArticleMaybeRedirect': MediaWiki check to see if title is a redirect
+'InitializeArticleMaybeRedirect': MediaWiki check to see if title is a redirect.
 $title: Title object ($wgTitle)
 $request: WebRequest
 $ignoreRedirect: boolean to skip redirect check
@@ -1238,10 +1285,10 @@ $prefix: interwiki prefix we are looking for.
 &$iwData: output array describing the interwiki with keys iw_url, iw_local,
   iw_trans and optionally iw_api and iw_wikiid.
 
-'InternalParseBeforeSanitize': during Parser's internalParse method just before the
-parser removes unwanted/dangerous HTML tags and after nowiki/noinclude/includeonly/
-onlyinclude and other processings. Ideal for syntax-extensions after template/parser
-function execution which respect nowiki and HTML-comments.
+'InternalParseBeforeSanitize': during Parser's internalParse method just before
+the parser removes unwanted/dangerous HTML tags and after nowiki/noinclude/
+includeonly/onlyinclude and other processings. Ideal for syntax-extensions after
+template/parser function execution which respect nowiki and HTML-comments.
 &$parser: Parser object
 &$text: string containing partially parsed text
 &$stripState: Parser's internal StripState object
@@ -1252,7 +1299,8 @@ but after nowiki/noinclude/includeonly/onlyinclude and other processings.
 &$text: string containing partially parsed text
 &$stripState: Parser's internal StripState object
 
-'InvalidateEmailComplete': Called after a user's email has been invalidated successfully
+'InvalidateEmailComplete': Called after a user's email has been invalidated
+successfully.
 $user: user (object) whose email is being invalidated
 
 'IRCLineURL': When constructing the URL to use in an IRC notification.
@@ -1267,8 +1315,8 @@ $article: article (object) being checked
 $ip: IP being check
 $result: Change this value to override the result of wfIsTrustedProxy()
 
-'isValidEmailAddr': Override the result of User::isValidEmailAddr(), for ins-
-tance to return false if the domain name doesn't match your organization
+'isValidEmailAddr': Override the result of User::isValidEmailAddr(), for
+instance to return false if the domain name doesn't match your organization.
 $addr: The e-mail address entered by the user
 &$result: Set this and return false to override the internal checks
 
@@ -1290,55 +1338,55 @@ CanonicalNamespaces for that.
 $wgExtensionMessagesFiles instead.
 Use this to define synonyms of magic words depending of the language
 $magicExtensions: associative array of magic words synonyms
-$lang: laguage code (string)
+$lang: language code (string)
 
 'LanguageGetSpecialPageAliases': DEPRECATED, use $specialPageAliases in a file
 listed in $wgExtensionMessagesFiles instead.
 Use to define aliases of special pages names depending of the language
 $specialPageAliases: associative array of magic words synonyms
-$lang: laguage code (string)
+$lang: language code (string)
 
 'LanguageGetTranslatedLanguageNames': Provide translated language names.
 &$names: array of language code => language name
 $code language of the preferred translations
 
 'LinkBegin': Used when generating internal and interwiki links in
-Linker::link(), before processing starts.  Return false to skip default proces-
-sing and return $ret.  See documentation for Linker::link() for details on the
-expected meanings of parameters.
+Linker::link(), before processing starts.  Return false to skip default
+processing and return $ret. See documentation for Linker::link() for details on
+the expected meanings of parameters.
 $skin: the Skin object
 $target: the Title that the link is pointing to
-&$html: the contents that the <a> tag should have (raw HTML); null means "de-
-       fault"
-&$customAttribs: the HTML attributes that the <a> tag should have, in associa-
-       tive array form, with keys and values unescaped.  Should be merged with de-
-       fault values, with a value of false meaning to suppress the attribute.
+&$html: the contents that the <a> tag should have (raw HTML); null means
+  "default".
+&$customAttribs: the HTML attributes that the <a> tag should have, in
+associative array form, with keys and values unescaped.  Should be merged with
+default values, with a value of false meaning to suppress the attribute.
 &$query: the query string to add to the generated URL (the bit after the "?"),
-       in associative array form, with keys and values unescaped.
+  in associative array form, with keys and values unescaped.
 &$options: array of options.  Can include 'known', 'broken', 'noclasses'.
 &$ret: the value to return if your hook returns false.
 
 'LinkEnd': Used when generating internal and interwiki links in Linker::link(),
 just before the function returns a value.  If you return true, an <a> element
-with HTML attributes $attribs and contents $html will be returned.  If you re-
-turn false, $ret will be returned.
+with HTML attributes $attribs and contents $html will be returned.  If you
+return false, $ret will be returned.
 $skin: the Skin object
 $target: the Title object that the link is pointing to
 $options: the options.  Will always include either 'known' or 'broken', and may
-       include 'noclasses'.
+  include 'noclasses'.
 &$html: the final (raw HTML) contents of the <a> tag, after processing.
-&$attribs: the final HTML attributes of the <a> tag, after processing, in asso-
-       ciative array form.
+&$attribs: the final HTML attributes of the <a> tag, after processing, in
+  associative array form.
 &$ret: the value to return if your hook returns false.
 
 'LinkerMakeExternalImage': At the end of Linker::makeExternalImage() just
-before the return
+before the return.
 &$url: the image url
 &$alt: the image's alt text
 &$img: the new image HTML (if returning false)
 
 'LinkerMakeExternalLink': At the end of Linker::makeExternalLink() just
-before the return
+before the return.
 &$url: the link url
 &$text: the link text
 &$link: the new link HTML (if returning false)
@@ -1346,23 +1394,29 @@ before the return
 $linkType: The external link type
 
 'LinksUpdate': At the beginning of LinksUpdate::doUpdate() just before the
-actual update
+actual update.
 &$linksUpdate: the LinksUpdate object
 
-'LinksUpdateComplete': At the end of LinksUpdate::doUpdate() when updating has
-completed
+'LinksUpdateAfterInsert': At the end of LinksUpdate::incrTableUpdate() after
+each link table insert.  For example, pagelinks, imagelinks, externallinks.
+$linksUpdate: LinksUpdate object
+$table: the table to insert links to
+$insertions: an array of links to insert
+
+'LinksUpdateComplete': At the end of LinksUpdate::doUpdate() when updating,
+including delete and insert, has completed for all link tables
 &$linksUpdate: the LinksUpdate object
 
-'LinksUpdateConstructed': At the end of LinksUpdate() is contruction.
+'LinksUpdateConstructed': At the end of LinksUpdate() is construction.
 &$linksUpdate: the LinksUpdate object
 
 'ListDefinedTags': When trying to find all defined tags.
 &$tags: The list of tags.
 
-'LoadExtensionSchemaUpdates': called during database installation and updates
+'LoadExtensionSchemaUpdates': Called during database installation and updates.
 &updater: A DatabaseUpdater subclass
 
-'LocalFile::getHistory': called before file history query performed
+'LocalFile::getHistory': Called before file history query performed.
 $file: the File object
 $tables: tables
 $fields: select fields
@@ -1370,91 +1424,89 @@ $conds: conditions
 $opts: query options
 $join_conds: JOIN conditions
 
-'LocalFilePurgeThumbnails': called before thumbnails for a local file a purged
+'LocalFilePurgeThumbnails': Called before thumbnails for a local file a purged.
 $file: the File object
 $archiveName: name of an old file version or false if it's the current one
 
-'LocalisationCacheRecache': Called when loading the localisation data into cache
+'LocalisationCacheRecache': Called when loading the localisation data into
+cache.
 $cache: The LocalisationCache object
 $code: language code
 &$alldata: The localisation data from core and extensions
 
-'LogEventsListShowLogExtract': called before the string is added to OutputPage. Returning false will prevent the string from being added to the OutputPage
+'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
 $types: String or Array Log types to show
 $page: String or Title The page title to show log entries for
 $user: String The user who made the log entries
 $param: Associative Array with the following additional options:
- - lim Integer Limit of items to show, default is 50
- - conds Array Extra conditions for the query (e.g. "log_action != 'revision'")
- - showIfEmpty boolean Set to false if you don't want any output in case the loglist is empty if set to true (default), "No matching items in log" is displayed if loglist is empty
- - msgKey Array If you want a nice box with a message, set this to the key of the message. First element is the message key, additional optional elements are parameters for the key that are processed with wfMessage()->params()->parseAsBlock()
- - offset Set to overwrite offset parameter in $wgRequest set to '' to unset offset
- - wrap String Wrap the message in html (usually something like "&lt;div ...>$1&lt;/div>").
- - flags Integer display flags (NO_ACTION_LINK,NO_EXTRA_USER_LINKS)
-
-'LoggableUserIPData': called when IP data for a user action can be logged by extensions like CheckUser.
-This is intended for when users do things that do not already create edits or log entries.
-$context: The context the of the action, which includes the user and request
-$data: Associative array of data for handlers to record. It must include values for:
- - 'namespace' Integer namespace for target title (NS_SPECIAL is allowed)
- - 'title'     Database key string for target title (empty string if not applicable)
- - 'pageid'    Integer page ID for target title (zero if not applicable)
- - 'action'    Wikitext string in the same format as an edit summary
- - 'comment'   Wikitext string in the same format as an edit summary
- - 'timestamp' Timestamp when the action occured
-
-'LoginAuthenticateAudit': a login attempt for a valid user account either
+  - lim Integer Limit of items to show, default is 50
+  - conds Array Extra conditions for the query (e.g. "log_action != 'revision'")
+  - showIfEmpty boolean Set to false if you don't want any output in case the
+    loglist is empty if set to true (default), "No matching items in log" is
+    displayed if loglist is empty
+  - msgKey Array If you want a nice box with a message, set this to the key of
+    the message. First element is the message key, additional optional elements
+    are parameters for the key that are processed with
+    wfMessage()->params()->parseAsBlock()
+  - offset Set to overwrite offset parameter in $wgRequest set to '' to unset
+    offset
+  - wrap String Wrap the message in html (usually something like
+    "&lt;div ...>$1&lt;/div>").
+  - flags Integer display flags (NO_ACTION_LINK,NO_EXTRA_USER_LINKS)
+
+'LoginAuthenticateAudit': A login attempt for a valid user account either
 succeeded or failed. No return data is accepted; this hook is for auditing only.
 $user: the User object being authenticated against
 $password: the password being submitted and found wanting
 $retval: a LoginForm class constant with authenticateUserData() return
-       value (SUCCESS, WRONG_PASS, etc)
+  value (SUCCESS, WRONG_PASS, etc.).
 
-'LogLine': Processes a single log entry on Special:Log
+'LogLine': Processes a single log entry on Special:Log.
 $log_type: string for the type of log entry (e.g. 'move'). Corresponds to
-       logging.log_type database field.
+  logging.log_type database field.
 $log_action: string for the type of log action (e.g. 'delete', 'block',
-       'create2'). Corresponds to logging.log_action database field.
+  'create2'). Corresponds to logging.log_action database field.
 $title: Title object that corresponds to logging.log_namespace and
-       logging.log_title database fields.
+  logging.log_title database fields.
 $paramArray: Array of parameters that corresponds to logging.log_params field.
-       Note that only $paramArray[0] appears to contain anything.
+  Note that only $paramArray[0] appears to contain anything.
 &$comment: string that corresponds to logging.log_comment database field, and
-       which is displayed in the UI.
+  which is displayed in the UI.
 &$revert: string that is displayed in the UI, similar to $comment.
 $time: timestamp of the log entry (added in 1.12)
 
-'MaintenanceRefreshLinksInit': before executing the refreshLinks.php maintenance script
+'MaintenanceRefreshLinksInit': before executing the refreshLinks.php maintenance
+script.
 $refreshLinks: RefreshLinks object
 
-'MagicWordwgVariableIDs': When definig new magic words IDs.
+'MagicWordwgVariableIDs': When defining new magic words IDs.
 $variableIDs: array of strings
 
-'MakeGlobalVariablesScript': called right before Skin::makeVariablesScript
-is executed. Ideally, this hook should only be used to add variables that
-depend on the current page/request; static configuration should be added
-through ResourceLoaderGetConfigVars instead.
-&$vars: variable (or multiple variables) to be added into the output
-       of Skin::makeVariablesScript
-$out: The OutputPage which called the hook,
-    can be used to get the real title
+'MakeGlobalVariablesScript': Called right before Skin::makeVariablesScript is
+executed. Ideally, this hook should only be used to add variables that depend on
+the current page/request; static configuration should be added through
+ResourceLoaderGetConfigVars instead.
+&$vars: variable (or multiple variables) to be added into the output of
+  Skin::makeVariablesScript
+$out: The OutputPage which called the hook, can be used to get the real title.
 
-'MarkPatrolled': before an edit is marked patrolled
+'MarkPatrolled': Before an edit is marked patrolled.
 $rcid: ID of the revision to be marked patrolled
 $user: the user (object) marking the revision as patrolled
-$wcOnlySysopsCanPatrol: config setting indicating whether the user
-       needs to be a sysop in order to mark an edit patrolled
+$wcOnlySysopsCanPatrol: config setting indicating whether the user needs to be a
+  sysop in order to mark an edit patrolled.
 
-'MarkPatrolledComplete': after an edit is marked patrolled
+'MarkPatrolledComplete': After an edit is marked patrolled.
 $rcid: ID of the revision marked as patrolled
 $user: user (object) who marked the edit patrolled
-$wcOnlySysopsCanPatrol: config setting indicating whether the user
-       must be a sysop to patrol the edit
+$wcOnlySysopsCanPatrol: config setting indicating whether the user must be a
+  sysop to patrol the edit.
 
-'MediaWikiPerformAction': Override MediaWiki::performAction().
-Use this to do something completely different, after the basic
-globals have been set up, but before ordinary actions take place.
+'MediaWikiPerformAction': Override MediaWiki::performAction(). Use this to do
+something completely different, after the basic globals have been set up, but
+before ordinary actions take place.
 $output: $wgOut
 $article: $wgArticle
 $title: $wgTitle
@@ -1462,12 +1514,12 @@ $user: $wgUser
 $request: $wgRequest
 $mediaWiki: The $mediawiki object
 
-'MessagesPreLoad': When loading a message from the database
+'MessagesPreLoad': When loading a message from the database.
 $title: title of the message (string)
 $message: value (string), change it to the message you want to define
 
-'MessageCacheReplace': When a message page is changed.
-Useful for updating caches.
+'MessageCacheReplace': When a message page is changed. Useful for updating
+caches.
 $title: name of the page changed.
 $text: new contents of the page.
 
@@ -1478,12 +1530,11 @@ $db: The database object to be queried.
 &$opts: Options for the query.
 &$join_conds: Join conditions for the query.
 
-'MonoBookTemplateToolboxEnd': Called by Monobook skin after toolbox links have
-been rendered (useful for adding more)
-Note: this is only run for the Monobook skin. This hook is deprecated and
-may be removed in the future. To add items to the toolbox you should use
-the SkinTemplateToolboxEnd hook instead, which works for all
-"SkinTemplate"-type skins.
+'MonoBookTemplateToolboxEnd': DEPRECATED. Called by Monobook skin after toolbox
+links have been rendered (useful for adding more). Note: this is only run for
+the Monobook skin. To add items to the toolbox you should use the
+SkinTemplateToolboxEnd hook instead, which works for all "SkinTemplate"-type
+skins.
 $tools: array of tools
 
 'BaseTemplateToolbox': Called by BaseTemplate when building the $toolbox array
@@ -1492,16 +1543,18 @@ still letting the skin make final decisions on skin-specific markup conventions
 using this hook.
 &$sk: The BaseTemplate base skin template
 &$toolbox: An array of toolbox items, see BaseTemplate::getToolbox and
-       BaseTemplate::makeListItem for details on the format of individual
-       items inside of this array
+  BaseTemplate::makeListItem for details on the format of individual items
+  inside of this array.
 
-'NamespaceIsMovable': Called when determining if it is possible to pages in a namespace.
+'NamespaceIsMovable': Called when determining if it is possible to pages in a
+namespace.
 $index: Integer; the index of the namespace being checked.
-$result: Boolean; whether MediaWiki currently thinks that pages in this namespace are movable.
-Hooks may change this value to override the return value of MWNamespace::isMovable()
+$result: Boolean; whether MediaWiki currently thinks that pages in this
+  namespace are movable. Hooks may change this value to override the return
+  value of MWNamespace::isMovable().
 
-'NewRevisionFromEditComplete': called when a revision was inserted
-due to an edit
+'NewRevisionFromEditComplete': Called when a revision was inserted due to an
+edit.
 $wikiPage: the WikiPage edited
 $rev: the new revision
 $baseID: the revision ID this was based off, if any
@@ -1509,44 +1562,46 @@ $user: the editing user
 
 'NormalizeMessageKey': Called before the software gets the text of a message
 (stuff in the MediaWiki: namespace), useful for changing WHAT message gets
-displayed
+displayed.
 &$key: the message being looked up. Change this to something else to change
-       what message gets displayed (string)
+  what message gets displayed (string)
 &$useDB: whether or not to look up the message in the database (bool)
 &$langCode: the language code to get the message for (string) - or -
-       whether to use the content language (true) or site language (false) (bool)
+  whether to use the content language (true) or site language (false) (bool)
 &$transform: whether or not to expand variables and templates
-       in the message (bool)
+  in the message (bool)
 
-'OldChangesListRecentChangesLine': Customize entire Recent Changes line.
+'OldChangesListRecentChangesLine': Customize entire recent changes line, or
+return false to omit the line from RecentChanges and Watchlist special pages.
 &$changeslist: The OldChangesList instance.
 &$s: HTML of the form "<li>...</li>" containing one RC entry.
 &$rc: The RecentChange object.
+&$classes: array of css classes for the <li> element
 
-'OpenSearchUrls': Called when constructing the OpenSearch description XML.
-Hooks can alter or append to the array of URLs for search & suggestion formats.
+'OpenSearchUrls': Called when constructing the OpenSearch description XML. Hooks
+can alter or append to the array of URLs for search & suggestion formats.
 &$urls: array of associative arrays with Url element attributes
 
 'OtherBlockLogLink': Get links to the block log from extensions which blocks
-       users and/or IP addresses too
+users and/or IP addresses too.
 $otherBlockLink: An array with links to other block logs
 $ip: The requested IP address or username
 
-'OutputPageBeforeHTML': a page has been processed by the parser and
-the resulting HTML is about to be displayed.
+'OutputPageBeforeHTML': A page has been processed by the parser and the
+resulting HTML is about to be displayed.
 $parserOutput: the parserOutput (object) that corresponds to the page
 $text: the text that will be displayed, in HTML (string)
 
-'OutputPageBodyAttributes': called when OutputPage::headElement is creating the body
-tag to allow for extensions to add attributes to the body of the page they might
-need. Or to allow building extensions to add body classes that aren't of high
-enough demand to be included in core.
+'OutputPageBodyAttributes': Called when OutputPage::headElement is creating the
+body tag to allow for extensions to add attributes to the body of the page they
+might need. Or to allow building extensions to add body classes that aren't of
+high enough demand to be included in core.
 $out: The OutputPage which called the hook, can be used to get the real title
 $sk: The Skin that called OutputPage::headElement
 &$bodyAttrs: An array of attributes for the body tag passed to Html::openElement
 
 'OutputPageCheckLastModified': when checking if the page has been modified
-since the last visit
+since the last visit.
 &$modifiedTimes: array of timestamps.
        The following keys are set: page, user, epoch
 
@@ -1554,16 +1609,16 @@ since the last visit
 $out: OutputPage instance (object)
 $parserOutput: parserOutput instance being added in $out
 
-'OutputPageMakeCategoryLinks': links are about to be generated for the page's
+'OutputPageMakeCategoryLinks': Links are about to be generated for the page's
 categories. Implementations should return false if they generate the category
 links, so the default link generation is skipped.
 $out: OutputPage instance (object)
 $categories: associative array, keys are category names, values are category
-       types ("normal" or "hidden")
+  types ("normal" or "hidden")
 $links: array, intended to hold the result. Must be an associative array with
-       category types as keys and arrays of HTML links as values.
+  category types as keys and arrays of HTML links as values.
 
-'PageContentInsertComplete': After a new article is created
+'PageContentInsertComplete': After a new article is created.
 $wikiPage: WikiPage created
 $user: User creating the article
 $content: New content as a Content object
@@ -1574,13 +1629,13 @@ $section: (No longer used)
 $flags: Flags passed to WikiPage::doEditContent()
 $revision: New Revision of the article
 
-'PageContentLanguage': allows changing the language in which the content of
-page is written. Defaults to the wiki content language ($wgContLang).
+'PageContentLanguage': Allows changing the language in which the content of a
+page is written. Defaults to the wiki content language ($wgContLang).
 $title: Title object
 &$pageLang: the page content language (either an object or a language code)
 $wgLang: the user language
 
-'PageContentSave': before an article is saved.
+'PageContentSave': Before an article is saved.
 $wikiPage: the WikiPage (object) being saved
 $user: the user (object) saving the article
 $content: the new article content, as a Content object
@@ -1589,7 +1644,7 @@ $isminor: minor flag
 $iswatch: watch flag
 $section: section #
 
-'PageContentSaveComplete': After an article has been updated
+'PageContentSaveComplete': After an article has been updated.
 $wikiPage: WikiPage modified
 $user: User performing the modification
 $content: New content, as a Content object
@@ -1605,58 +1660,62 @@ $baseRevId: the rev ID (or false) this edit was based on
 'PageHistoryBeforeList': When a history page list is about to be constructed.
 $article: the article that the history is loading for
 
-'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
 
-'PageHistoryPager::getQueryInfo': when a history pager query parameter set
-is constructed
+'PageHistoryPager::getQueryInfo': when a history pager query parameter set is
+constructed.
 $pager: the pager
 $queryInfo: the query parameters
 
-'PageRenderingHash': alter the parser cache option hash key
-A parser extension which depends on user options should install
-this hook and append its values to the key.
+'PageRenderingHash': Alter the parser cache option hash key. A parser extension
+which depends on user options should install this hook and append its values to
+the key.
 $hash: reference to a hash key string which can be modified
 
 'ParserAfterParse': Called from Parser::parse() just after the call to
-Parser::internalParse() returns
+Parser::internalParse() returns.
 $parser: parser object
 $text: text being parsed
 $stripState: stripState used (object)
 
-'ParserAfterStrip': Same as ParserBeforeStrip
+'ParserAfterStrip': Called at end of parsing time.
+TODO: No more strip, deprecated ?
+$parser: parser object
+$text: text being parsed
+$stripState: stripState used (object)
 
 'ParserAfterTidy': Called after Parser::tidy() in Parser::parse()
 $parser: Parser object being used
-$text: text that'll be returned
+$text: text that will be returned
 
-'ParserBeforeInternalParse': called at the beginning of Parser::internalParse()
+'ParserBeforeInternalParse': Called at the beginning of Parser::internalParse().
 $parser: Parser object
 $text: text to parse
 $stripState: StripState instance being used
 
-'ParserBeforeStrip': Called at start of parsing time
-(no more strip, deprecated ?)
+'ParserBeforeStrip': Called at start of parsing time.
+TODO: No more strip, deprecated ?
 $parser: parser object
 $text: text being parsed
 $stripState: stripState used (object)
 
-'ParserBeforeTidy': called before tidy and custom tags replacements
+'ParserBeforeTidy': Called before tidy and custom tags replacements.
 $parser: Parser object being used
 $text: actual text
 
-'ParserClearState': called at the end of Parser::clearState()
+'ParserClearState': Called at the end of Parser::clearState().
 $parser: Parser object being cleared
 
-'ParserCloned': called when the parser is cloned
+'ParserCloned': Called when the parser is cloned.
 $parser: Newly-cloned Parser object
 
-'ParserFirstCallInit': called when the parser initialises for the first time
+'ParserFirstCallInit': Called when the parser initialises for the first time.
 &$parser: Parser object being cleared
 
-'ParserGetVariableValueSwitch': called when the parser need the value of a
+'ParserGetVariableValueSwitch': Called when the parser need the value of a
 custom magic word
 $parser: Parser object
 $varCache: array to store the value in case of multiples calls of the
@@ -1665,18 +1724,18 @@ $index: index (string) of the magic
 $ret: value of the magic word (the hook should set it)
 $frame: PPFrame object to use for expanding any template variables
 
-'ParserGetVariableValueTs': use this to change the value of the time for the
-{{LOCAL...}} magic word
+'ParserGetVariableValueTs': Use this to change the value of the time for the
+{{LOCAL...}} magic word.
 $parser: Parser object
 $time: actual time (timestamp)
 
-'ParserGetVariableValueVarCache': use this to change the value of the
-variable cache or return false to not use it
+'ParserGetVariableValueVarCache': use this to change the value of the variable
+cache or return false to not use it.
 $parser: Parser object
-$varCache: varaiable cache (array)
+$varCache: variable cache (array)
 
-'ParserLimitReport': called at the end of Parser:parse() when the parser will
-include comments about size of the text parsed
+'ParserLimitReport': Called at the end of Parser:parse() when the parser will
+include comments about size of the text parsed.
 $parser: Parser object
 $limitReport: text that will be included (without comment tags)
 
@@ -1688,27 +1747,26 @@ $file: file object that will be used to create the image
 $parser: Parser object that called the hook
 
 'ParserSectionCreate': Called each time the parser creates a document section
-from wikitext.  Use this to apply per-section modifications to HTML (like
+from wikitext. Use this to apply per-section modifications to HTML (like
 wrapping the section in a DIV).  Caveat: DIVs are valid wikitext, and a DIV
-can begin in one section and end in another.  Make sure your code can handle
-that case gracefully.  See the EditSectionClearerLink extension for an
-example.
+can begin in one section and end in another. Make sure your code can handle
+that case gracefully. See the EditSectionClearerLink extension for an example.
 $parser: the calling Parser instance
 $section: the section number, zero-based, but section 0 is usually empty
 &$sectionContent: ref to the content of the section. modify this.
 $showEditLinks: boolean describing whether this section has an edit link
 
-'ParserTestParser': called when creating a new instance of Parser in
-maintenance/parserTests.inc
+'ParserTestParser': Called when creating a new instance of Parser in
+maintenance/parserTests.inc.
 $parser: Parser object created
 
 'ParserTestGlobals': Allows to define globals for parser tests.
 &$globals: Array with all the globals which should be set for parser tests.
-       The arrays keys serve as the globals names, its values are the globals values.
+  The arrays keys serve as the globals names, its values are the globals values.
 
-'ParserTestTables': alter the list of tables to duplicate when parser tests
-are run. Use when page save hooks require the presence of custom tables
-to ensure that tests continue to run properly.
+'ParserTestTables': Alter the list of tables to duplicate when parser tests are
+run. Use when page save hooks require the presence of custom tables to ensure
+that tests continue to run properly.
 &$tables: array of table names
 
 'PersonalUrls': Alter the user-specific navigation links (e.g. "my page,
@@ -1716,21 +1774,22 @@ my talk page, my contributions" etc).
 &$personal_urls: Array of link specifiers (see SkinTemplate.php)
 &$title: Title object representing the current page
 
-'PingLimiter': Allows extensions to override the results of User::pingLimiter()
+'PingLimiter': Allows extensions to override the results of User::pingLimiter().
 &$user : User performing the action
 $action : Action being performed
 &$result : Whether or not the action should be prevented
 Change $result and return false to give a definitive answer, otherwise
 the built-in rate limiting checks are used, if enabled.
 
-'PlaceNewSection': Override placement of new sections.
+'PlaceNewSection': Override placement of new sections. Return false and put the
+merged text into $text to override the default behavior.
 $wikipage : WikiPage object
 $oldtext : the text of the article before editing
 $subject : subject of the new section
 &$text : text of the new section
-Return false and put the merged text into $text to override the default behavior.
 
-'PreferencesGetLegend': Override the text used for the <legend> of a preferences section
+'PreferencesGetLegend': Override the text used for the <legend> of a
+preferences section.
 $form: the PreferencesForm object. This is a ContextSource as well
 $key: the section name
 &$legend: the legend text. Defaults to wfMessage( "prefs-$key" )->text() but may be overridden
@@ -1742,71 +1801,82 @@ $search : search term (not guaranteed to be conveniently normalized)
 $limit : maximum number of results to return
 &$results : out param: array of page names (strings)
 
-'PrefsEmailAudit': called when user changes his email address
+'PrefsEmailAudit': Called when user changes their email address.
 $user: User (object) changing his email address
 $oldaddr: old email address (string)
 $newaddr: new email address (string)
 
-'PrefsPasswordAudit': called when user changes his password
-$user: User (object) changing his passoword
+'PrefsPasswordAudit': Called when user changes his password.
+$user: User (object) changing his password
 $newPass: new password
 $error: error (string) 'badretype', 'wrongpassword', 'error' or 'success'
 
-'ProtectionForm::buildForm': called after all protection type fieldsets are made in the form
+'ProtectionForm::buildForm': Called after all protection type fieldsets are made
+in the form.
 $article: the title being (un)protected
 $output: a string of the form HTML so far
 
-'ProtectionForm::save': called when a protection form is submitted
+'ProtectionForm::save': Called when a protection form is submitted.
 $article: the title being (un)protected
-$errorMsg: an html message string of an error or an array of message name and its parameters
+$errorMsg: an html message string of an error or an array of message name and
+  its parameters
 
-'ProtectionForm::showLogExtract': called after the protection log extract is shown
+'ProtectionForm::showLogExtract': Called after the protection log extract is
+shown.
 $article: the page the form is shown for
 $out: OutputPage object
 
-'RawPageViewBeforeOutput': Right before the text is blown out in action=raw
+'RawPageViewBeforeOutput': Right before the text is blown out in action=raw.
 &$obj: RawPage object
 &$text: The text that's going to be the output
 
-'RecentChange_save': called at the end of RecentChange::save()
+'RecentChange_save': Called at the end of RecentChange::save().
 $recentChange: RecentChange object
 
-'RedirectSpecialArticleRedirectParams': lets you alter the set of
-parameter names such as "oldid" that are preserved when using
-redirecting special pages such as Special:MyPage and Special:MyTalk.
+'RedirectSpecialArticleRedirectParams': Lets you alter the set of parameter
+names such as "oldid" that are preserved when using redirecting special pages
+such as Special:MyPage and Special:MyTalk.
 &$redirectParams: An array of parameters preserved by redirecting special pages.
 
-'RequestContextCreateSkin': Called when RequestContext::getSkin creates a skin instance.
-Can be used by an extension override what skin is used in certain contexts.
+'RequestContextCreateSkin': Called when RequestContext::getSkin creates a skin
+instance. Can be used by an extension override what skin is used in certain
+contexts.
 IContextSource $context: The RequestContext the skin is being created for.
-&$skin: A variable reference you may set a Skin instance or string key on to override the skin that will be used for the context.
+&$skin: A variable reference you may set a Skin instance or string key on to
+  override the skin that will be used for the context.
 
-'ResourceLoaderGetConfigVars': called at the end of
+'ResourceLoaderGetConfigVars': Called at the end of
 ResourceLoaderStartUpModule::getConfig(). Use this to export static
-configuration variables to JavaScript. Things that depend on the current
-page/request state must be added through MakeGlobalVariablesScript instead.
+configuration variables to JavaScript. Things that depend on the current page
+or request state must be added through MakeGlobalVariablesScript instead.
 &$vars: array( variable name => value )
 
-'ResourceLoaderGetStartupModules': Run once the startup module is being generated. This allows you
-to add modules to the startup module. This hook should be used sparingly since any module added here
-will be loaded on all pages. This hook is useful if you want to make code available to module loader
+'ResourceLoaderGetStartupModules': Run once the startup module is being
+generated. This allows you to add modules to the startup module. This hook
+should be used sparingly since any module added here will be loaded on all
+pages. This hook is useful if you want to make code available to module loader
 scripts.
 
-'ResourceLoaderRegisterModules': Right before modules information is required, such as when responding to a resource
+'ResourceLoaderRegisterModules': Right before modules information is required,
+such as when responding to a resource
 loader request or generating HTML output.
 &$resourceLoader: ResourceLoader object
 
-'ResourceLoaderTestModules': let you add new JavaScript testing modules. This is called after the addition of 'qunit' and MediaWiki testing resources.
-&testModules: array of JavaScript testing modules. The 'qunit' framework, included in core, is fed using tests/qunit/QUnitTestResources.php.
+'ResourceLoaderTestModules': Let you add new JavaScript testing modules. This is
+called after the addition of 'qunit' and MediaWiki testing resources.
+&testModules: array of JavaScript testing modules. The 'qunit' framework,
+  included in core, is fed using tests/qunit/QUnitTestResources.php.
 &ResourceLoader object
+
 To add a new qunit module named 'myext.tests':
 testModules['qunit']['myext.tests'] = array(
        'script' => 'extension/myext/tests.js',
        'dependencies' => <any module dependency you might have>
 );
-For qunit framework, the mediawiki.tests.qunit.testrunner dependency will be added to any module.
+For QUnit framework, the mediawiki.tests.qunit.testrunner dependency will be
+added to any module.
 
-'RevisionInsertComplete': called after a revision is inserted into the DB
+'RevisionInsertComplete': Called after a revision is inserted into the database.
 &$revision: the Revision
 $data: the data stored in old_text.  The meaning depends on $flags: if external
   is set, it's the URL of the revision text in external storage; otherwise,
@@ -1815,13 +1885,14 @@ $data: the data stored in old_text.  The meaning depends on $flags: if external
 $flags: a comma-delimited list of strings representing the options used.  May
   include: utf8 (this will always be set for new revisions); gzip; external.
 
-'SearchUpdate': Prior to search update completion
+'SearchUpdate': Prior to search update completion.
 $id : Page id
 $namespace : Page namespace
 $title : Page title
 $text : Current text being indexed
 
-'SearchGetNearMatchBefore': Perform exact-title-matches in "go" searches before the normal operations
+'SearchGetNearMatchBefore': Perform exact-title-matches in "go" searches before
+the normal operations.
 $allSearchTerms : Array of the search terms in all content languages
 &$titleResult : Outparam; the value to return. A Title object or null.
 
@@ -1831,11 +1902,13 @@ runs after.
 $term : Search term string
 &$title : Outparam; set to $title object and return false for a match
 
-'SearchGetNearMatch': An extra chance for exact-title-matches in "go" searches if nothing was found
+'SearchGetNearMatch': An extra chance for exact-title-matches in "go" searches
+if nothing was found.
 $term : Search term string
 &$title : Outparam; set to $title object and return false for a match
 
-'SearchGetNearMatchComplete': A chance to modify exact-title-matches in "go" searches
+'SearchGetNearMatchComplete': A chance to modify exact-title-matches in "go"
+searches.
 $term : Search term string
 &$title : Current Title object that is being returned (null if none found).
 
@@ -1853,9 +1926,11 @@ $title : Current Title object being displayed in search results.
 'SearchableNamespaces': An option to modify which namespaces are searchable.
 &$arr : Array of namespaces ($nsId => $name) which will be used.
 
+'SeleniumSettings': TODO
+
 'SetupAfterCache': Called in Setup.php, after cache objects are set
 
-'ShowMissingArticle': Called when generating the output for a non-existent page
+'ShowMissingArticle': Called when generating the output for a non-existent page.
 $article: The article object corresponding to the page
 
 'ShowRawCssJs': Customise the output of raw CSS and JavaScript in page views.
@@ -1883,50 +1958,52 @@ $terms: Search terms, for highlighting
 &$size: HTML of page size. May be modified.
 &$date: HTML of of page modification date. May be modified.
 &$related: HTML of additional info for the matching page. May be modified.
-&$html: May be set to the full HTML that should be used to represent the search hit. Must include
-the <li> ... </li> tags. Will only be used if the hook function returned false.
+&$html: May be set to the full HTML that should be used to represent the search
+  hit. Must include the <li> ... </li> tags. Will only be used if the hook
+  function returned false.
 
-'SiteNoticeBefore': Before the sitenotice/anonnotice is composed
+'SiteNoticeBefore': Before the sitenotice/anonnotice is composed. Return true to
+allow the normal method of notice selection/rendering to work, or change the
+value of $siteNotice and return false to alter it.
 &$siteNotice: HTML returned as the sitenotice
 $skin: Skin object
-Return true to allow the normal method of notice selection/rendering to work,
-or change the value of $siteNotice and return false to alter it.
 
-'SiteNoticeAfter': After the sitenotice/anonnotice is composed
-&$siteNotice: HTML sitenotice
+'SiteNoticeAfter': After the sitenotice/anonnotice is composed.
+&$siteNotice: HTML sitenotice. Alter the contents of $siteNotice to add to/alter
+  the sitenotice/anonnotice.
 $skin: Skin object
-Alter the contents of $siteNotice to add to/alter the sitenotice/anonnotice.
 
-'SkinAfterBottomScripts': At the end of Skin::bottomScripts()
+'SkinAfterBottomScripts': At the end of Skin::bottomScripts().
 $skin: Skin object
-&$text: bottomScripts Text
-Append to $text to add additional text/scripts after the stock bottom scripts.
+&$text: bottomScripts Text. Append to $text to add additional text/scripts after
+  the stock bottom scripts.
 
 'SkinAfterContent': Allows extensions to add text after the page content and
-article metadata.
+article metadata. This hook should work in all skins. Set the &$data variable to
+the text you're going to add.
 &$data: (string) Text to be printed out directly (without parsing)
 $skin: Skin object
-This hook should work in all skins. Just set the &$data variable to the text
-you're going to add.
 
-'SkinBuildSidebar': At the end of Skin::buildSidebar()
+'SkinBuildSidebar': At the end of Skin::buildSidebar().
 $skin: Skin object
 &$bar: Sidebar contents
 Modify $bar to add or modify sidebar portlets.
 
-'SkinCopyrightFooter': Allow for site and per-namespace customization of copyright notice.
+'SkinCopyrightFooter': Allow for site and per-namespace customization of
+copyright notice.
 $title: displayed page title
 $type: 'normal' or 'history' for old/diff views
-&$msg: overridable message; usually 'copyright' or 'history_copyright'. This message must be in HTML format, not wikitext!
+&$msg: overridable message; usually 'copyright' or 'history_copyright'. This
+  message must be in HTML format, not wikitext!
 &$link: overridable HTML link to be passed into the message as $1
 &$forContent: overridable flag if copyright footer is shown in content language.
 
-'SkinGetPoweredBy'
-&$text: additional 'powered by' icons in HTML.
-Note: Modern skin does not use the MediaWiki icon but plain text instead
+'SkinGetPoweredBy': TODO
+&$text: additional 'powered by' icons in HTML. Note: Modern skin does not use
+the MediaWiki icon but plain text instead.
 $skin: Skin object
 
-'SkinSubPageSubtitle': At the beginning of Skin::subPageSubtitle()
+'SkinSubPageSubtitle': At the beginning of Skin::subPageSubtitle().
 &$subpages: Subpage links HTML
 $skin: Skin object
 $out: OutputPage object
@@ -1935,25 +2012,30 @@ subPageSubtitle() generates.
 If true is returned, $subpages will be ignored and the rest of
 subPageSubtitle() will run.
 
-'SkinTemplateBuildNavUrlsNav_urlsAfterPermalink': after creating the
-"permanent link" tab
+'SkinTemplateBuildNavUrlsNav_urlsAfterPermalink': After creating the "permanent
+link" tab.
 $sktemplate: SkinTemplate object
 $nav_urls: array of tabs
 
-Alter the structured navigation links in SkinTemplates, there are three of these hooks called in different spots.
-'SkinTemplateNavigation': Called on content pages after the tabs have been added but before before variants have been added
-'SkinTemplateNavigation::SpecialPage': Called on special pages after the special tab is added but before variants have been added
-'SkinTemplateNavigation::Universal': Called on both content and special pages after variants have been added
+To alter the structured navigation links in SkinTemplates, there are three
+hooks called in different spots:
+
+'SkinTemplateNavigation': Called on content pages after the tabs have been
+added, but before variants have been added.
+'SkinTemplateNavigation::SpecialPage': Called on special pages after the special
+tab is added but before variants have been added.
+'SkinTemplateNavigation::Universal': Called on both content and special pages
+after variants have been added.
 &$sktemplate: SkinTemplate object
-&$links: Structured navigation links
-This is used to alter the navigation for skins which use buildNavigationUrls such as Vector.
+&$links: Structured navigation links. This is used to alter the navigation for
+  skins which use buildNavigationUrls such as Vector.
 
-'SkinTemplateOutputPageBeforeExec': Before SkinTemplate::outputPage()
-starts page output
+'SkinTemplateOutputPageBeforeExec': Before SkinTemplate::outputPage() starts
+page output.
 &$sktemplate: SkinTemplate object
 &$tpl: Template engine object
 
-'SkinTemplatePreventOtherActiveTabs': use this to prevent showing active tabs
+'SkinTemplatePreventOtherActiveTabs': Use this to prevent showing active tabs.
 $sktemplate: SkinTemplate object
 $res: set to true to prevent active tabs
 
@@ -1970,53 +2052,56 @@ $checkEdit: Whether or not the action=edit query should be added if appropriate.
 &$text: Link text.
 &$result: Complete assoc. array if you want to return true.
 
+'SkinTemplateTabs': TODO
+
 'SkinTemplateToolboxEnd': Called by SkinTemplate skins after toolbox links have
-been rendered (useful for adding more)
+been rendered (useful for adding more).
 $sk: The QuickTemplate based skin template running the hook.
 $dummy: Called when SkinTemplateToolboxEnd is used from a BaseTemplate skin,
-  extensions that add support for BaseTemplateToolbox should watch for this dummy
-  parameter with "$dummy=false" in their code and return without echoing any html
-  to avoid creating duplicate toolbox items.
+  extensions that add support for BaseTemplateToolbox should watch for this
+  dummy parameter with "$dummy=false" in their code and return without echoing
+  any HTML to avoid creating duplicate toolbox items.
 
-'SoftwareInfo': Called by Special:Version for returning information about
-the software
-$software: The array of software in format 'name' => 'version'.
-       See SpecialVersion::softwareInformation()
+'SoftwareInfo': Called by Special:Version for returning information about the
+software.
+$software: The array of software in format 'name' => 'version'. See
+  SpecialVersion::softwareInformation().
 
 'SpecialContributionsBeforeMainOutput': Before the form on Special:Contributions
 $id: User identifier
 
-'SpecialListusersDefaultQuery': called right before the end of
-UsersPager::getDefaultQuery()
+'SpecialListusersDefaultQuery': Called right before the end of
+UsersPager::getDefaultQuery().
 $pager: The UsersPager instance
 $query: The query array to be returned
 
-'SpecialListusersFormatRow': called right before the end of
-UsersPager::formatRow()
+'SpecialListusersFormatRow': Called right before the end of
+UsersPager::formatRow().
 $item: HTML to be returned. Will be wrapped in <li></li> after the hook finishes
 $row: Database row object
 
-'SpecialListusersHeader': called before closing the <fieldset> in
-UsersPager::getPageHeader()
+'SpecialListusersHeader': Called before closing the <fieldset> in
+UsersPager::getPageHeader().
 $pager: The UsersPager instance
 $out: The header HTML
 
-'SpecialListusersHeaderForm': called before adding the submit button in
-UsersPager::getPageHeader()
+'SpecialListusersHeaderForm': Called before adding the submit button in
+UsersPager::getPageHeader().
 $pager: The UsersPager instance
 $out: The header HTML
 
-'SpecialListusersQueryInfo': called right before the end of
+'SpecialListusersQueryInfo': Called right before the end of.
 UsersPager::getQueryInfo()
 $pager: The UsersPager instance
 $query: The query array to be returned
 
-'SpecialMovepageAfterMove': called after moving a page
+'SpecialMovepageAfterMove': Called after moving a page.
 $movePage: MovePageForm object
 $oldTitle: old title (object)
 $newTitle: new title (object)
 
-'SpecialNewpagesConditions': called when building sql query for Special:NewPages
+'SpecialNewpagesConditions': Called when building sql query for
+Special:NewPages.
 &$special: NewPagesPager object (subclass of ReverseChronologicalPager)
 $opts: FormOptions object containing special page options
 &$conds: array of WHERE conditionals for query
@@ -2024,50 +2109,55 @@ $opts: FormOptions object containing special page options
 &$fields: array of columns to select
 &$join_conds: join conditions for the tables
 
-'SpecialNewPagesFilters': called after building form options at NewPages
+'SpecialNewPagesFilters': Called after building form options at NewPages.
 $special: the special page object
-&$filters: associative array of filter definitions. The keys are the HTML name/URL parameters.
-Each key maps to an associative array with a 'msg' (message key) and a 'default' value.
+&$filters: associative array of filter definitions. The keys are the HTML
+  name/URL parameters. Each key maps to an associative array with a 'msg'
+  (message key) and a 'default' value.
 
-'SpecialPage_initList': called when setting up SpecialPage::$mList, use this
-hook to remove a core special page
+'SpecialPage_initList': Called when setting up SpecialPage::$mList, use this
+hook to remove a core special page.
 $list: list (array) of core special pages
 
-'SpecialPageAfterExecute': called after SpecialPage::execute
+'SpecialPageAfterExecute': Called after SpecialPage::execute.
 $special: the SpecialPage object
 $subPage: the subpage string or null if no subpage was specified
 
-'SpecialPageBeforeExecute': called before SpecialPage::execute
+'SpecialPageBeforeExecute': Called before SpecialPage::execute.
 $special: the SpecialPage object
 $subPage: the subpage string or null if no subpage was specified
 
-'SpecialPasswordResetOnSubmit': when executing a form submission on Special:PasswordReset
-$users: array of User objects
+'SpecialPasswordResetOnSubmit': When executing a form submission on
+Special:PasswordReset.
+$users: array of User objects.
 $data: array of data submitted by the user
-&$error: string, error code (message name) used to describe to error (out paramater).
-       The hook needs to return false when setting this, otherwise it will have no effect.
+&$error: string, error code (message key) used to describe to error (out
+  parameter). The hook needs to return false when setting this, otherwise it
+  will have no effect.
 
-'SpecialRandomGetRandomTitle': called during the execution of Special:Random,
-use this to change some selection criteria or substitute a different title
+'SpecialRandomGetRandomTitle': Called during the execution of Special:Random,
+use this to change some selection criteria or substitute a different title.
 &$randstr: The random number from wfRandom()
 &$isRedir: Boolean, whether to select a redirect or non-redirect
 &$namespaces: An array of namespace indexes to get the title from
 &$extra: An array of extra SQL statements
 &$title: If the hook returns false, a Title object to use instead of the
-result from the normal query
+  result from the normal query
 
-'SpecialRecentChangesFilters': called after building form options at RecentChanges
+'SpecialRecentChangesFilters': Called after building form options at
+RecentChanges.
 $special: the special page object
-&$filters: associative array of filter definitions. The keys are the HTML name/URL parameters.
-Each key maps to an associative array with a 'msg' (message key) and a 'default' value.
+&$filters: associative array of filter definitions. The keys are the HTML
+  name/URL parameters. Each key maps to an associative array with a 'msg'
+  (message key) and a 'default' value.
 
-'SpecialRecentChangesPanel': called when building form options in
-SpecialRecentChanges
+'SpecialRecentChangesPanel': Called when building form options in
+SpecialRecentChanges.
 &$extraOpts: array of added items, to which can be added
 $opts: FormOptions for this request
 
-'SpecialRecentChangesQuery': called when building sql query for
-SpecialRecentChanges and SpecialRecentChangesLinked
+'SpecialRecentChangesQuery': Called when building SQL query for
+SpecialRecentChanges and SpecialRecentChangesLinked.
 &$conds: array of WHERE conditionals for query
 &$tables: array of tables to be queried
 &$join_conds: join conditions for the tables
@@ -2075,217 +2165,247 @@ $opts: FormOptions for this request
 &$query_options: array of options for the database request
 &$select: Array of columns to select
 
-'SpecialSearchCreateLink': called when making the message to create a page or
-go to the existing page
+'SpecialSearchCreateLink': Called when making the message to create a page or
+go to the existing page.
 $t: title object searched for
 &$params: an array of the default message name and page title (as parameter)
 
-'SpecialSearchGo': called when user clicked the "Go"
+'SpecialSearchGo': Called when user clicked the "Go".
 &$title: title object generated from the text entered by the user
 &$term: the search term entered by the user
 
-'SpecialSearchNogomatch': called when user clicked the "Go" button but the
-target doesn't exist
+'SpecialSearchNogomatch': Called when user clicked the "Go" button but the
+target doesn't exist.
 &$title: title object generated from the text entered by the user
 
-'SpecialSearchPowerBox': the equivalent of SpecialSearchProfileForm for
-the advanced form, a.k.a. power search box
+'SpecialSearchPowerBox': The equivalent of SpecialSearchProfileForm for
+the advanced form, a.k.a. power search box.
 &$showSections: an array to add values with more options to
 $term: the search term (not a title object)
 $opts: an array of hidden options (containing 'redirs' and 'profile')
 
-'SpecialSearchProfiles': allows modification of search profiles
+'SpecialSearchProfiles': Allows modification of search profiles.
 &$profiles: profiles, which can be modified.
 
-'SpecialSearchProfileForm': allows modification of search profile forms
+'SpecialSearchProfileForm': Allows modification of search profile forms.
 $search: special page object
 &$form: String: form html
 $profile: String: current search profile
 $term: String: search term
 $opts: Array: key => value of hidden options for inclusion in custom forms
 
-'SpecialSearchSetupEngine': allows passing custom data to search engine
-$search: special page object
+'SpecialSearchSetupEngine': Allows passing custom data to search engine.
+$search: SpecialSearch special page object
 $profile: String: current search profile
 $engine: the search engine
 
-'SpecialSearchResults': called before search result display when there
-are matches
+'SpecialSearchResultsPrepend': Called immediately before returning HTML
+on the search results page.  Useful for including an external search
+provider.  To disable the output of MediaWiki search output, return
+false.
+$specialSearch: SpecialSearch object ($this)
+$output: $wgOut
+$term: Search term specified by the user
+
+'SpecialSearchResultsAppend': Called after all search results HTML has
+been output.  Note that in some cases, this hook will not be called (no
+results, too many results, SpecialSearchResultsPrepend returned false,
+etc).
+$specialSearch: SpecialSearch object ($this)
+$output: $wgOut
+$term: Search term specified by the user
+
+'SpecialSearchResults': Called before search result display when there are
+matches.
 $term: string of search term
 &$titleMatches: empty or SearchResultSet object
 &$textMatches: empty or SearchResultSet object
 
-'SpecialSearchNoResults': called before search result display when there are
-no matches
+'SpecialSearchNoResults': Called before search result display when there are no
+matches.
 $term: string of search term
 
-'SpecialStatsAddExtra': add extra statistic at the end of Special:Statistics
+'SpecialStatsAddExtra': Add extra statistic at the end of Special:Statistics.
 &$extraStats: Array to save the new stats
-              ( $extraStats['<name of statistic>'] => <value>; )
+  ( $extraStats['<name of statistic>'] => <value>; )
 
 'SpecialUploadComplete': Called after successfully uploading a file from
-Special:Upload
+Special:Upload.
 $form: The SpecialUpload object
 
-'SpecialVersionExtensionTypes': called when generating the extensions credits,
-use this to change the tables headers
+'SpecialVersionExtensionTypes': Called when generating the extensions credits,
+use this to change the tables headers.
 $extTypes: associative array of extensions types
 
-'SpecialVersionVersionUrl': called when building the URL for Special:Version
+'SpecialVersionVersionUrl': Called when building the URL for Special:Version.
 $wgVersion: Current $wgVersion for you to use
 &$versionUrl: Raw url to link to (eg: release notes)
 
-'SpecialWatchlistFilters': called after building form options at Watchlist
+'SpecialWatchlistFilters': Called after building form options at Watchlist.
 $special: the special page object
-&$filters: associative array of filter definitions. The keys are the HTML name/URL parameters.
-Each key maps to an associative array with a 'msg' (message key) and a 'default' value.
+&$filters: associative array of filter definitions. The keys are the HTML
+  name/URL parameters. Each key maps to an associative array with a 'msg'
+  (message key) and a 'default' value.
 
-'SpecialWatchlistQuery': called when building sql query for SpecialWatchlist
+'SpecialWatchlistQuery': Called when building sql query for SpecialWatchlist.
 &$conds: array of WHERE conditionals for query
 &$tables: array of tables to be queried
 &$join_conds: join conditions for the tables
 &$fields: array of query fields
 
-'TestCanonicalRedirect': called when about to force a redirect to a canonical URL for a title when we have no other parameters on the URL. Gives a chance for extensions that alter page view behavior radically to abort that redirect or handle it manually.
+'TestCanonicalRedirect': Called when about to force a redirect to a canonical
+URL for a title when we have no other parameters on the URL. Gives a chance for
+extensions that alter page view behavior radically to abort that redirect or
+handle it manually.
 $request: WebRequest
 $title: Title of the currently found title obj
 $output: OutputPage object
 
-'TitleArrayFromResult': called when creating an TitleArray object from a
-database result
+'ThumbnailBeforeProduceHTML': Called before an image HTML is about to be
+rendered (by ThumbnailImage:toHtml method).
+$thumbnail: the ThumbnailImage object
+&$attribs: image attribute array
+&$linkAttribs: image link attribute array
+
+'TitleArrayFromResult': Called when creating an TitleArray object from a
+database result.
 &$titleArray: set this to an object to override the default object returned
 $res: database result used to create the object
 
 'TitleGetRestrictionTypes': Allows extensions to modify the types of protection
-  that can be applied.
+that can be applied.
 $title: The title in question.
 &$types: The types of protection available.
 
-'TitleIsCssOrJsPage': Called when determining if a page is a CSS or JS page
+'TitleIsCssOrJsPage': Called when determining if a page is a CSS or JS page.
 $title: Title object that is being checked
-$result: Boolean; whether MediaWiki currently thinks this is a CSS/JS page. Hooks may change this value to override the return value of Title::isCssOrJsPage()
-
-'TitleIsAlwaysKnown': Called when determining if a page exists.
-Allows overriding default behaviour for determining if a page exists.
-If $isKnown is kept as null, regular checks happen. If it's a boolean, this value is returned by the isKnown method.
+$result: Boolean; whether MediaWiki currently thinks this is a CSS/JS page.
+  Hooks may change this value to override the return value of
+  Title::isCssOrJsPage().
+
+'TitleIsAlwaysKnown': Called when determining if a page exists. Allows
+overriding default behaviour for determining if a page exists. If $isKnown is
+kept as null, regular checks happen. If it's a boolean, this value is returned
+by the isKnown method.
 $title: Title object that is being checked
 &$isKnown: Boolean|null; whether MediaWiki currently thinks this page is known
 
-'TitleIsMovable': Called when determining if it is possible to move a page.
-Note that this hook is not called for interwiki pages or pages in immovable namespaces: for these, isMovable() always returns false.
+'TitleIsMovable': Called when determining if it is possible to move a page. Note
+that this hook is not called for interwiki pages or pages in immovable
+namespaces: for these, isMovable() always returns false.
 $title: Title object that is being checked
-$result: Boolean; whether MediaWiki currently thinks this page is movable. Hooks may change this value to override the return value of Title::isMovable()
+$result: Boolean; whether MediaWiki currently thinks this page is movable.
+  Hooks may change this value to override the return value of
+  Title::isMovable().
 
 'TitleIsWikitextPage': Called when determining if a page is a wikitext or should
-be handled by seperate handler (via ArticleViewCustom)
+be handled by separate handler (via ArticleViewCustom).
 $title: Title object that is being checked
-$result: Boolean; whether MediaWiki currently thinks this is a wikitext page. Hooks may change this value to override the return value of Title::isWikitextPage()
+$result: Boolean; whether MediaWiki currently thinks this is a wikitext page.
+  Hooks may change this value to override the return value of
+  Title::isWikitextPage()
 
-'TitleMoveComplete': after moving an article (title)
+'TitleMoveComplete': After moving an article (title).
 $old: old title
 $nt: new title
 $user: user who did the move
 $pageid: database ID of the page that's been moved
 $redirid: database ID of the created redirect
 
-'TitleReadWhitelist': called at the end of read permissions checks, just before
-       adding the default error message if nothing allows the user to read the page.
-       If a handler wants a title to *not* be whitelisted, it should also return false.
+'TitleReadWhitelist': Called at the end of read permissions checks, just before
+adding the default error message if nothing allows the user to read the page. If
+a handler wants a title to *not* be whitelisted, it should also return false.
 $title: Title object being checked against
 $user: Current user object
 &$whitelisted: Boolean value of whether this title is whitelisted
 
-'UndeleteForm::showHistory': called in UndeleteForm::showHistory, after a
+'UndeleteForm::showHistory': Called in UndeleteForm::showHistory, after a
 PageArchive object has been created but before any further processing is done.
 &$archive: PageArchive object
 $title: Title object of the page that we're viewing
 
-'UndeleteForm::showRevision': called in UndeleteForm::showRevision, after a
+'UndeleteForm::showRevision': Called in UndeleteForm::showRevision, after a
 PageArchive object has been created but before any further processing is done.
 &$archive: PageArchive object
 $title: Title object of the page that we're viewing
 
-'UndeleteForm::undelete': called un UndeleteForm::undelete, after checking that
+'UndeleteForm::undelete': Called un UndeleteForm::undelete, after checking that
 the site is not in read-only mode, that the Title object is not null and after
 a PageArchive object has been constructed but before performing any further
 processing.
 &$archive: PageArchive object
 $title: Title object of the page that we're about to undelete
 
-'UndeleteShowRevision': called when showing a revision in Special:Undelete
+'UndeleteShowRevision': Called when showing a revision in Special:Undelete.
 $title: title object related to the revision
 $rev: revision (object) that will be viewed
 
-'UnknownAction': An unknown "action" has occured (useful for defining
-                your own actions)
+'UnknownAction': An unknown "action" has occurred (useful for defining your own
+actions).
 $action: action name
 $article: article "acted on"
 
-'UnitTestsList': Called when building a list of files with PHPUnit tests
+'UnitTestsList': Called when building a list of files with PHPUnit tests.
 &$files: list of files
 
-'UnwatchArticle': before a watch is removed from an article
+'UnwatchArticle': Before a watch is removed from an article.
 $user: user watching
 $page: WikiPage object to be removed
 
-'UnwatchArticleComplete': after a watch is removed from an article
+'UnwatchArticleComplete': After a watch is removed from an article.
 $user: user that watched
 $page: WikiPage object that was watched
 
-'UpdateUserMailerFormattedPageStatus': before notification email gets sent
+'UpdateUserMailerFormattedPageStatus': Before notification email gets sent.
 $formattedPageStatus: list of valid page states
 
-'UploadForm:initial': before the upload form is generated
+'UploadForm:initial': Before the upload form is generated. You might set the
+member-variables $uploadFormTextTop and $uploadFormTextAfterSummary to inject
+text (HTML) either before or after the editform.
 $form: UploadForm object
-You might set the member-variables $uploadFormTextTop and
-$uploadFormTextAfterSummary to inject text (HTML) either before
-or after the editform.
 
-'UploadForm:BeforeProcessing': at the beginning of processUpload()
+'UploadForm:BeforeProcessing': At the beginning of processUpload(). Lets you
+poke at member variables like $mUploadDescription before the file is saved. Do
+not use this hook to break upload processing. This will return the user to a
+blank form with no error message; use UploadVerification and UploadVerifyFile
+instead.
 $form: UploadForm object
-Lets you poke at member variables like $mUploadDescription before the
-file is saved.
-Do not use this hook to break upload processing. This will return the user to
-a blank form with no error message; use UploadVerification and
-UploadVerifyFile instead
 
-'UploadCreateFromRequest': when UploadBase::createFromRequest has been called
+'UploadCreateFromRequest': When UploadBase::createFromRequest has been called.
 $type: (string) the requested upload type
 &$className: the class name of the Upload instance to be created
 
-'UploadComplete': when Upload completes an upload
+'UploadComplete': when Upload completes an upload.
 &$upload: an UploadBase child instance
 
-'UploadFormInitDescriptor': after the descriptor for the upload form as been
-       assembled
+'UploadFormInitDescriptor': After the descriptor for the upload form as been
+assembled.
 $descriptor: (array) the HTMLForm descriptor
 
 'UploadFormSourceDescriptors': after the standard source inputs have been
 added to the descriptor
 $descriptor: (array) the HTMLForm descriptor
 
-'UploadVerification': additional chances to reject an uploaded file. Consider
-                      using UploadVerifyFile instead.
+'UploadVerification': Additional chances to reject an uploaded file. Consider
+using UploadVerifyFile instead.
 string $saveName: destination file name
 string $tempName: filesystem path to the temporary file for checks
-string &$error: output: message key for message to show if upload canceled
-       by returning false. May also be an array, where the first element
-       is the message key and the remaining elements are used as parameters to
-       the message.
+string &$error: output: message key for message to show if upload canceled by
+  returning false. May also be an array, where the first element is the message
+  key and the remaining elements are used as parameters to the message.
 
 'UploadVerifyFile': extra file verification, based on mime type, etc. Preferred
-                    in most cases over UploadVerification.
+in most cases over UploadVerification.
 object $upload: an instance of UploadBase, with all info about the upload
-string $mime: the uploaded file's mime type, as detected by MediaWiki. Handlers
-       will typically only apply for specific mime types.
+string $mime: The uploaded file's mime type, as detected by MediaWiki. Handlers
+  will typically only apply for specific mime types.
 object &$error: output: true if the file is valid. Otherwise, an indexed array
-       representing the problem with the file, where the first element
-       is the message key and the remaining elements are used as parameters to
-       the message.
+  representing the problem with the file, where the first element is the message
+  key and the remaining elements are used as parameters to the message.
 
-'UploadComplete': Upon completion of a file upload
+'UploadComplete': Upon completion of a file upload.
 $uploadBase: UploadBase (or subclass) object. File can be accessed by
-       $uploadBase->getLocalFile().
+  $uploadBase->getLocalFile().
 
 'User::mailPasswordInternal': before creation and mailing of a user's new
 temporary password
@@ -2293,254 +2413,258 @@ $user: the user who sent the message out
 $ip: IP of the user who sent the message out
 $u: the account whose new password will be set
 
-'UserAddGroup': called when adding a group; return false to override
+'UserAddGroup': Called when adding a group; return false to override
 stock group addition.
 $user: the user object that is to have a group added
 &$group: the group to add, can be modified
 
-'UserArrayFromResult': called when creating an UserArray object from a
-database result
+'UserArrayFromResult': Called when creating an UserArray object from a database
+result.
 &$userArray: set this to an object to override the default object returned
 $res: database result used to create the object
 
-'userCan': To interrupt/advise the "user can do X to Y article" check.
-If you want to display an error message, try getUserPermissionsErrors.
+'userCan': To interrupt/advise the "user can do X to Y article" check. If you
+want to display an error message, try getUserPermissionsErrors.
 $title: Title object being checked against
 $user : Current user object
 $action: Action being checked
 $result: Pointer to result returned if hook returns false. If null is returned,
-       userCan checks are continued by internal code.
+  userCan checks are continued by internal code.
 
-'UserCanSendEmail': To override User::canSendEmail() permission check
+'UserCanSendEmail': To override User::canSendEmail() permission check.
 $user: User (object) whose permission is being checked
 &$canSend: bool set on input, can override on output
 
-'UserClearNewTalkNotification': called when clearing the
-"You have new messages!" message, return false to not delete it
-$user: User (object) that'll clear the message
+'UserClearNewTalkNotification': Called when clearing the "You have new
+messages!" message, return false to not delete it.
+$user: User (object) that will clear the message
 
-'UserComparePasswords': called when checking passwords, return false to
-override the default password checks
+'UserComparePasswords': Called when checking passwords, return false to
+override the default password checks.
 &$hash: String of the password hash (from the database)
 &$password: String of the plaintext password the user entered
 &$userId: Integer of the user's ID or Boolean false if the user ID was not
-       supplied
+  supplied
 &$result: If the hook returns false, this Boolean value will be checked to
-       determine if the password was valid
+  determine if the password was valid
 
 'UserCreateForm': change to manipulate the login form
 $template: SimpleTemplate instance for the form
 
-'UserCryptPassword': called when hashing a password, return false to implement
-your own hashing method
+'UserCryptPassword': Called when hashing a password, return false to implement
+your own hashing method.
 &$password: String of the plaintext password to encrypt
 &$salt: String of the password salt or Boolean false if no salt is provided
-&$wgPasswordSalt: Boolean of whether the salt is used in the default
-       hashing method
+&$wgPasswordSalt: Boolean of whether the salt is used in the default hashing
+  method
 &$hash: If the hook returns false, this String will be used as the hash
 
-'UserEffectiveGroups': Called in User::getEffectiveGroups()
+'UserEffectiveGroups': Called in User::getEffectiveGroups().
 $user: User to get groups for
 &$groups: Current effective groups
 
-'UserGetAllRights': after calculating a list of all available rights
+'UserGetAllRights': After calculating a list of all available rights.
 &$rights: Array of rights, which may be added to.
 
-'UserGetDefaultOptions': after fetching the core default, this hook is ran
-right before returning the options to the caller. WARNING: this hook is
-called for every call to User::getDefaultOptions(), which means it's
-potentially called dozens or hundreds of times. You may want to cache
-the results of non-trivial operations in your hook function for this reason.
+'UserGetDefaultOptions': After fetching the core default, this hook is run right
+before returning the options to the caller. Warning: This hook is called for
+every call to User::getDefaultOptions(), which means it's potentially called
+dozens or hundreds of times. You may want to cache the results of non-trivial
+operations in your hook function for this reason.
 &$defaultOptions: Array of preference keys and their default values.
 
-'UserGetEmail': called when getting an user email address
+'UserGetEmail': Called when getting an user email address.
 $user: User object
 &$email: email, change this to override local email
 
-'UserGetEmailAuthenticationTimestamp': called when getting the timestamp of
-email authentification
+'UserGetEmailAuthenticationTimestamp': Called when getting the timestamp of
+email authentication.
 $user: User object
-&$timestamp: timestamp, change this to override local email authentification
-       timestamp
+&$timestamp: timestamp, change this to override local email authentication
+  timestamp
 
-'UserGetImplicitGroups': Called in User::getImplicitGroups()
+'UserGetImplicitGroups': Called in User::getImplicitGroups().
 &$groups: List of implicit (automatically-assigned) groups
 
-'UserGetLanguageObject': Called when getting user's interface language object
+'UserGetLanguageObject': Called when getting user's interface language object.
 $user: User object
-&$code: Langauge code that will be used to create the object
+&$code: Language code that will be used to create the object
+$context: RequestContext object
 
-'UserGetReservedNames': allows to modify $wgReservedUsernames at run time
+'UserGetReservedNames': Allows to modify $wgReservedUsernames at run time.
 &$reservedUsernames: $wgReservedUsernames
 
-'UserGetRights': Called in User::getRights()
+'UserGetRights': Called in User::getRights().
 $user: User to get rights for
 &$rights: Current rights
 
-'UserIsBlockedFrom': Check if a user is blocked from a specific page (for specific block
-       exemptions).
+'UserIsBlockedFrom': Check if a user is blocked from a specific page (for
+specific block exemptions).
 $user: User in question
 $title: Title of the page in question
 &$blocked: Out-param, whether or not the user is blocked from that page.
-&$allowUsertalk: If the user is blocked, whether or not the block allows users to edit their
-                  own user talk pages.
+&$allowUsertalk: If the user is blocked, whether or not the block allows users
+  to edit their own user talk pages.
 
 'UserIsBlockedGlobally': Check if user is blocked on all wikis.
 &$user: User object
 $ip: User's IP address
 &$blocked: Whether the user is blocked, to be modified by the hook
 
-'UserLoadAfterLoadFromSession': called to authenticate users on
-external/environmental means; occurs after session is loaded
+'UserLoadAfterLoadFromSession': Called to authenticate users on external or
+environmental means; occurs after session is loaded.
 $user: user object being loaded
 
-'UserLoadDefaults': called when loading a default user
+'UserLoadDefaults': Called when loading a default user.
 $user: user object
 $name: user name
 
-'UserLoadFromDatabase': called when loading a user from the database
+'UserLoadFromDatabase': Called when loading a user from the database.
 $user: user object
 &$s: database query object
 
-'UserLoadFromSession': called to authenticate users on external/environmental
-means; occurs before session is loaded
+'UserLoadFromSession': Called to authenticate users on external/environmental
+means; occurs before session is loaded.
 $user: user object being loaded
-&$result: set this to a boolean value to abort the normal authentification
-       process
+&$result: set this to a boolean value to abort the normal authentication
+  process
 
-'UserLoadOptions': when user options/preferences are being loaded from
-the database.
+'UserLoadOptions': When user options/preferences are being loaded from the
+database.
 $user: User object
 &$options: Options, can be modified.
 
-'UserLoginComplete': after a user has logged in
+'UserLoginComplete': After a user has logged in.
 $user: the user object that was created on login
 $inject_html: Any HTML to inject after the "logged in" message.
 
 'UserLoginForm': change to manipulate the login form
 $template: SimpleTemplate instance for the form
 
-'UserLogout': before a user logs out
+'UserLogout': Before a user logs out.
 $user: the user object that is about to be logged out
 
-'UserLogoutComplete': after a user has logged out
+'UserLogoutComplete': After a user has logged out.
 $user: the user object _after_ logout (won't have name, ID, etc.)
 $inject_html: Any HTML to inject after the "logged out" message.
 $oldName: name of the user before logout (string)
 
-'UserRemoveGroup': called when removing a group; return false to override
-stock group removal.
+'UserRemoveGroup': Called when removing a group; return false to override stock
+group removal.
 $user: the user object that is to have a group removed
 &$group: the group to be removed, can be modified
 
-'UserRights': After a user's group memberships are changed
+'UserRights': After a user's group memberships are changed.
 $user  : User object that was changed
 $add   : Array of strings corresponding to groups added
 $remove: Array of strings corresponding to groups removed
 
-'UserRetrieveNewTalks': called when retrieving "You have new messages!"
-message(s)
+'UserRetrieveNewTalks': Called when retrieving "You have new messages!"
+message(s).
 $user: user retrieving new talks messages
 $talks: array of new talks page(s)
 
-'UserSaveSettings': called when saving user settings
+'UserSaveSettings': Called when saving user settings.
 $user: User object
 
 'UserSaveOptions': Called just before saving user preferences/options.
 $user: User object
 &$options: Options, modifiable
 
-'UserSetCookies': called when setting user cookies
+'UserSetCookies': Called when setting user cookies.
 $user: User object
 &$session: session array, will be added to $_SESSION
 &$cookies: cookies array mapping cookie name to its value
 
-'UserSetEmail': called when changing user email address
+'UserSetEmail': Called when changing user email address.
 $user: User object
 &$email: new email, change this to override new email address
 
-'UserSetEmailAuthenticationTimestamp': called when setting the timestamp
-of email authentification
+'UserSetEmailAuthenticationTimestamp': Called when setting the timestamp of
+email authentication.
 $user: User object
 &$timestamp: new timestamp, change this to override local email
-authentification timestamp
+authentication timestamp
 
-'UserToolLinksEdit': Called when generating a list of user tool links, eg "Foobar (Talk | Contribs | Block)"
+'UserToolLinksEdit': Called when generating a list of user tool links, e.g.
+"Foobar (Talk | Contribs | Block)".
 $userId: User id of the current user
 $userText: User name of the current user
 &$items: Array of user tool links as HTML fragments
 
-'WantedPages::getQueryInfo': called in WantedPagesPage::getQueryInfo(), can be
-used to alter the SQL query which gets the list of wanted pages
+'WantedPages::getQueryInfo': Called in WantedPagesPage::getQueryInfo(), can be
+used to alter the SQL query which gets the list of wanted pages.
 &$wantedPages: WantedPagesPage object
 &$query: query array, see QueryPage::getQueryInfo() for format documentation
 
-'WatchArticle': before a watch is added to an article
+'WatchArticle': Before a watch is added to an article.
 $user: user that will watch
 $page: WikiPage object to be watched
 
-'WatchArticleComplete': after a watch is added to an article
+'WatchArticleComplete': After a watch is added to an article.
 $user: user that watched
 $page: WikiPage object watched
 
 'WatchlistEditorBuildRemoveLine': when building remove lines in
-       Special:Watchlist/edit
+Special:Watchlist/edit.
 &$tools: array of extra links
 $title: Title object
 $redirect: whether the page is a redirect
 $skin: Skin object
 
-'WebRequestPathInfoRouter': While building the PathRouter to parse the REQUEST_URI.
+'WebRequestPathInfoRouter': While building the PathRouter to parse the
+REQUEST_URI.
 $router: The PathRouter instance
 
 'WikiExporter::dumpStableQuery': Get the SELECT query for "stable" revisions
-dumps
-One, and only one hook should set this, and return false.
+dumps. One, and only one hook should set this, and return false.
 &$tables: Database tables to use in the SELECT query
 &$opts: Options to use for the query
 &$join: Join conditions
 
 'WikiPageDeletionUpdates': manipulate the list of DataUpdates to be applied when
-       a page is deleted. Called in WikiPage::getDeletionUpdates().
-       Note that updates specific to a content model should be provided by the
-       respective Content's getDeletionUpdates() method.
+a page is deleted. Called in WikiPage::getDeletionUpdates(). Note that updates
+specific to a content model should be provided by the respective Content's
+getDeletionUpdates() method.
 $page: the WikiPage
 $content: the Content to generate updates for
 &$updates: the array of DataUpdate objects. Hook function may want to add to it.
 
-'wfShellWikiCmd': Called when generating a shell-escaped command line
-       string to run a MediaWiki cli script.
+'wfShellWikiCmd': Called when generating a shell-escaped command line string to
+run a MediaWiki cli script.
 &$script: MediaWiki cli script path
 &$parameters: Array of arguments and options to the script
 &$options: Associative array of options, may contain the 'php' and 'wrapper'
-       keys
+  keys
 
-'wgQueryPages': called when initialising $wgQueryPages, use this to add new
-query pages to be updated with maintenance/updateSpecialPages.php
+'wgQueryPages': Called when initialising $wgQueryPages, use this to add new
+query pages to be updated with maintenance/updateSpecialPages.php.
 $query: $wgQueryPages itself
 
-'XmlDumpWriterOpenPage': Called at the end of XmlDumpWriter::openPage, to allow extra
- metadata to be added.
+'XmlDumpWriterOpenPage': Called at the end of XmlDumpWriter::openPage, to allow
+extra metadata to be added.
 $obj: The XmlDumpWriter object.
 &$out: The output string.
 $row: The database row for the page.
 $title: The title of the page.
 
-'XmlDumpWriterWriteRevision': Called at the end of a revision in an XML dump, to add extra
- metadata.
+'XmlDumpWriterWriteRevision': Called at the end of a revision in an XML dump, to
+add extra metadata.
 $obj: The XmlDumpWriter object.
 &$out: The text being output.
 $row: The database row for the revision.
 $text: The revision text.
 
-'XMPGetInfo': Called when obtaining the list of XMP tags to extract. Can be used to add
-       additional tags to extract.
-&$items: Array containing information on which items to extract. See XMPInfo for details on the format.
+'XMPGetInfo': Called when obtaining the list of XMP tags to extract. Can be used
+to add additional tags to extract.
+&$items: Array containing information on which items to extract. See XMPInfo for
+  details on the format.
 
-'XMPGetResults': Called just before returning the results array of parsing xmp data. Can be
-       used to post-process the results.
-&$data: Array of metadata sections (such as $data['xmp-general']) each section is an array of
-       metadata tags returned (each tag is either a value, or an array of values).
+'XMPGetResults': Called just before returning the results array of parsing xmp
+data. Can be used to post-process the results.
+&$data: Array of metadata sections (such as $data['xmp-general']) each section
+  is an array of metadata tags returned (each tag is either a value, or an array
+  of values).
 
 More hooks might be available but undocumented, you can execute
-./maintenance/findhooks.php to find hidden one.
+'php maintenance/findHooks.php' to find hidden ones.
index 8201763..0bc5ba2 100644 (file)
@@ -61,7 +61,7 @@ abstract class Action {
         * @param $overrides Array
         * @return bool|null|string
         */
-       private final static function getClass( $action, array $overrides ) {
+       final private static function getClass( $action, array $overrides ) {
                global $wgActions;
                $action = strtolower( $action );
 
@@ -88,7 +88,7 @@ abstract class Action {
         * @return Action|bool|null false if the action is disabled, null
         *     if it is not recognised
         */
-       public final static function factory( $action, Page $page, IContextSource $context = null ) {
+       final public static function factory( $action, Page $page, IContextSource $context = null ) {
                $class = self::getClass( $action, $page->getActionOverrides() );
                if ( $class ) {
                        $obj = new $class( $page, $context );
@@ -106,7 +106,7 @@ abstract class Action {
         * @param $context IContextSource
         * @return string: action name
         */
-       public final static function getActionName( IContextSource $context ) {
+       final public static function getActionName( IContextSource $context ) {
                global $wgActions;
 
                $request = $context->getRequest();
@@ -150,7 +150,7 @@ abstract class Action {
         * @param $name String: name of an action
         * @return Bool
         */
-       public final static function exists( $name ) {
+       final public static function exists( $name ) {
                return self::getClass( $name, array() ) !== null;
        }
 
@@ -158,7 +158,7 @@ abstract class Action {
         * Get the IContextSource in use here
         * @return IContextSource
         */
-       public final function getContext() {
+       final public function getContext() {
                if ( $this->context instanceof IContextSource ) {
                        return $this->context;
                }
@@ -170,7 +170,7 @@ abstract class Action {
         *
         * @return WebRequest
         */
-       public final function getRequest() {
+       final public function getRequest() {
                return $this->getContext()->getRequest();
        }
 
@@ -179,7 +179,7 @@ abstract class Action {
         *
         * @return OutputPage
         */
-       public final function getOutput() {
+       final public function getOutput() {
                return $this->getContext()->getOutput();
        }
 
@@ -188,7 +188,7 @@ abstract class Action {
         *
         * @return User
         */
-       public final function getUser() {
+       final public function getUser() {
                return $this->getContext()->getUser();
        }
 
@@ -197,7 +197,7 @@ abstract class Action {
         *
         * @return Skin
         */
-       public final function getSkin() {
+       final public function getSkin() {
                return $this->getContext()->getSkin();
        }
 
@@ -206,7 +206,7 @@ abstract class Action {
         *
         * @return Language
         */
-       public final function getLanguage() {
+       final public function getLanguage() {
                return $this->getContext()->getLanguage();
        }
 
@@ -216,7 +216,7 @@ abstract class Action {
         * @deprecated 1.19 Use getLanguage instead
         * @return Language
         */
-       public final function getLang() {
+       final public function getLang() {
                wfDeprecated( __METHOD__, '1.19' );
                return $this->getLanguage();
        }
@@ -225,7 +225,7 @@ abstract class Action {
         * Shortcut to get the Title object from the page
         * @return Title
         */
-       public final function getTitle() {
+       final public function getTitle() {
                return $this->page->getTitle();
        }
 
@@ -235,7 +235,7 @@ abstract class Action {
         *
         * @return Message object
         */
-       public final function msg() {
+       final public function msg() {
                $params = func_get_args();
                return call_user_func_array( array( $this->getContext(), 'msg' ), $params );
        }
@@ -255,7 +255,7 @@ abstract class Action {
         * Return the name of the action this object responds to
         * @return String lowercase
         */
-       public abstract function getName();
+       abstract public function getName();
 
        /**
         * Get the permission required to perform this action.  Often, but not always,
@@ -350,13 +350,13 @@ abstract class Action {
         * $this->getOutput(), etc.
         * @throws ErrorPageError
         */
-       public abstract function show();
+       abstract public function show();
 
        /**
         * Execute the action in a silent fashion: do not display anything or release any errors.
         * @return Bool whether execution was successful
         */
-       public abstract function execute();
+       abstract public function execute();
 }
 
 /**
@@ -368,7 +368,7 @@ abstract class FormAction extends Action {
         * Get an HTMLForm descriptor array
         * @return Array
         */
-       protected abstract function getFormFields();
+       abstract protected function getFormFields();
 
        /**
         * Add pre- or post-text to the form
@@ -406,7 +406,7 @@ abstract class FormAction extends Action {
                        $this->getRequest()->getQueryValues(),
                        array( 'action' => null, 'title' => null )
                );
-               $form->addHiddenField( 'redirectparams', wfArrayToCGI( $params ) );
+               $form->addHiddenField( 'redirectparams', wfArrayToCgi( $params ) );
 
                $form->addPreText( $this->preText() );
                $form->addPostText( $this->postText() );
@@ -425,14 +425,14 @@ abstract class FormAction extends Action {
         * @param  $data Array
         * @return Bool|Array true for success, false for didn't-try, array of errors on failure
         */
-       public abstract function onSubmit( $data );
+       abstract public function onSubmit( $data );
 
        /**
         * Do something exciting on successful processing of the form.  This might be to show
         * a confirmation message (watch, rollback, etc) or to redirect somewhere else (edit,
         * protect, etc).
         */
-       public abstract function onSuccess();
+       abstract public function onSuccess();
 
        /**
         * The basic pattern for actions is to display some sort of HTMLForm UI, maybe with
@@ -508,7 +508,7 @@ abstract class FormlessAction extends Action {
         * @return String|null will be added to the HTMLForm if present, or just added to the
         *     output if not.  Return null to not add anything
         */
-       public abstract function onView();
+       abstract public function onView();
 
        /**
         * We don't want an HTMLForm
diff --git a/includes/ArrayUtils.php b/includes/ArrayUtils.php
new file mode 100644 (file)
index 0000000..d1b72a0
--- /dev/null
@@ -0,0 +1,33 @@
+<?php
+
+class ArrayUtils {
+       /**
+        * Sort the given array in a pseudo-random order which depends only on the
+        * given key and each element value. This is typically used for load
+        * balancing between servers each with a local cache.
+        *
+        * Keys are preserved. The input array is modified in place.
+        *
+        * Note: Benchmarking on PHP 5.3 and 5.4 indicates that for small
+        * strings, md5() is only 10% slower than hash('joaat',...) etc.,
+        * since the function call overhead dominates. So there's not much
+        * justification for breaking compatibility with installations
+        * compiled with ./configure --disable-hash.
+        *
+        * @param $array The array to sort
+        * @param $key The string key
+        * @param $separator A separator used to delimit the array elements and the
+        *     key. This can be chosen to provide backwards compatibility with
+        *     various consistent hash implementations that existed before this
+        *     function was introduced.
+        */
+       static function consistentHashSort( &$array, $key, $separator = "\000" ) {
+               $hashes = array();
+               foreach ( $array as $elt ) {
+                       $hashes[$elt] = md5( $elt . $separator . $key );
+               }
+               uasort( $array, function ( $a, $b ) use ( $hashes ) {
+                       return strcmp( $hashes[$a], $hashes[$b] );
+               } );
+       }
+}
index 5a887b6..75008ce 100644 (file)
@@ -280,15 +280,13 @@ class Article extends Page {
                                $message = $this->getContext()->getUser()->isLoggedIn() ? 'noarticletext' : 'noarticletextanon';
                                $content = new MessageContent( $message, null, 'parsemag' );
                        }
-                       wfProfileOut( __METHOD__ );
-
-                       return $content;
                } else {
                        $this->fetchContentObject();
-                       wfProfileOut( __METHOD__ );
-
-                       return $this->mContentObject;
+                       $content = $this->mContentObject;
                }
+
+               wfProfileOut( __METHOD__ );
+               return $content;
        }
 
        /**
@@ -403,7 +401,7 @@ class Article extends Page {
         *
         * @note code that wants to retrieve page content from the database should use WikiPage::getContent().
         *
-        * @return Content|null
+        * @return Content|null|boolean false
         *
         * @since 1.21
         */
@@ -864,15 +862,21 @@ class Article extends Page {
 
                $ns = $this->getTitle()->getNamespace();
 
-               if ( $ns == NS_USER || $ns == NS_USER_TALK ) {
-                       # Don't index user and user talk pages for blocked users (bug 11443)
-                       if ( !$this->getTitle()->isSubpage() ) {
-                               if ( Block::newFromTarget( null, $this->getTitle()->getText() ) instanceof Block ) {
-                                       return array(
-                                               'index'  => 'noindex',
-                                               'follow' => 'nofollow'
-                                       );
-                               }
+               # Don't index user and user talk pages for blocked users (bug 11443)
+               if ( ( $ns == NS_USER || $ns == NS_USER_TALK ) && !$this->getTitle()->isSubpage() ) {
+                       $specificTarget = null;
+                       $vagueTarget = null;
+                       $titleText = $this->getTitle()->getText();
+                       if ( IP::isValid( $titleText ) ) {
+                               $vagueTarget = $titleText;
+                       } else {
+                               $specificTarget = $titleText;
+                       }
+                       if ( Block::newFromTarget( $specificTarget, $vagueTarget ) instanceof Block ) {
+                               return array(
+                                       'index'  => 'noindex',
+                                       'follow' => 'nofollow'
+                               );
                        }
                }
 
@@ -988,9 +992,7 @@ class Article extends Page {
                                }
 
                                // Add a <link rel="canonical"> tag
-                               $outputPage->addLink( array( 'rel' => 'canonical',
-                                       'href' => $this->getTitle()->getLocalURL() )
-                               );
+                               $outputPage->setCanonicalUrl( $this->getTitle()->getLocalURL() );
 
                                // Tell the output object that the user arrived at this article through a redirect
                                $outputPage->setRedirectedFrom( $this->mRedirectedFrom );
@@ -1120,7 +1122,7 @@ class Article extends Page {
 
                # Show delete and move logs
                LogEventsList::showLogExtract( $outputPage, array( 'delete', 'move' ), $this->getTitle(), '',
-                       array(  'lim' => 10,
+                       array( 'lim' => 10,
                                'conds' => array( "log_action != 'revision'" ),
                                'showIfEmpty' => false,
                                'msgKey' => array( 'moveddeleted-notice' ) )
@@ -1481,7 +1483,7 @@ class Article extends Page {
                                $reason = $this->generateReason( $hasHistory );
                        } catch ( MWException $e ) {
                                # if a page is horribly broken, we still want to be able to delete it. so be lenient about errors here.
-                               wfDebug("Error while building auto delete summary: $e");
+                               wfDebug( "Error while building auto delete summary: $e" );
                                $reason = '';
                        }
                }
index ecfe208..1ee8da7 100644 (file)
@@ -33,6 +33,7 @@ $wgAutoloadLocalClasses = array(
        'AjaxDispatcher' => 'includes/AjaxDispatcher.php',
        'AjaxResponse' => 'includes/AjaxResponse.php',
        'AlphabeticPager' => 'includes/Pager.php',
+       'ArrayUtils' => 'includes/ArrayUtils.php',
        'Article' => 'includes/Article.php',
        'AtomFeed' => 'includes/Feed.php',
        'AuthPlugin' => 'includes/AuthPlugin.php',
@@ -93,6 +94,7 @@ $wgAutoloadLocalClasses = array(
        'ExternalStore' => 'includes/externalstore/ExternalStore.php',
        'ExternalStoreDB' => 'includes/externalstore/ExternalStoreDB.php',
        'ExternalStoreHttp' => 'includes/externalstore/ExternalStoreHttp.php',
+       'ExternalStoreMedium' => 'includes/externalstore/ExternalStoreMedium.php',
        'ExternalUser' => 'includes/ExternalUser.php',
        'FakeTitle' => 'includes/FakeTitle.php',
        'Fallback' => 'includes/Fallback.php',
@@ -114,6 +116,7 @@ $wgAutoloadLocalClasses = array(
        'HistoryBlobStub' => 'includes/HistoryBlob.php',
        'Hooks' => 'includes/Hooks.php',
        'Html' => 'includes/Html.php',
+       'HTMLApiField' => 'includes/HTMLForm.php',
        'HTMLCheckField' => 'includes/HTMLForm.php',
        'HTMLEditTools' => 'includes/HTMLForm.php',
        'HTMLFloatField' => 'includes/HTMLForm.php',
@@ -216,6 +219,7 @@ $wgAutoloadLocalClasses = array(
        'Sanitizer' => 'includes/Sanitizer.php',
        'DataUpdate' => 'includes/DataUpdate.php',
        'SqlDataUpdate' => 'includes/SqlDataUpdate.php',
+       'ScopedCallback' => 'includes/ScopedCallback.php',
        'ScopedPHPTimeout' => 'includes/ScopedPHPTimeout.php',
        'SiteConfiguration' => 'includes/SiteConfiguration.php',
        'SiteStats' => 'includes/SiteStats.php',
@@ -331,6 +335,7 @@ $wgAutoloadLocalClasses = array(
        'ApiBase' => 'includes/api/ApiBase.php',
        'ApiBlock' => 'includes/api/ApiBlock.php',
        'ApiComparePages' => 'includes/api/ApiComparePages.php',
+       'ApiCreateAccount' => 'includes/api/ApiCreateAccount.php',
        'ApiDelete' => 'includes/api/ApiDelete.php',
        'ApiDisabled' => 'includes/api/ApiDisabled.php',
        'ApiEditPage' => 'includes/api/ApiEditPage.php',
@@ -568,7 +573,7 @@ $wgAutoloadLocalClasses = array(
        'DBLockManager' => 'includes/filebackend/lockmanager/DBLockManager.php',
        'LSLockManager' => 'includes/filebackend/lockmanager/LSLockManager.php',
        'MemcLockManager' => 'includes/filebackend/lockmanager/MemcLockManager.php',
-       'QuorumLockManager' => 'includes/filebackend/lockmanager/LockManager.php',
+       'QuorumLockManager' => 'includes/filebackend/lockmanager/QuorumLockManager.php',
        'MySqlLockManager'=> 'includes/filebackend/lockmanager/DBLockManager.php',
        'NullLockManager' => 'includes/filebackend/lockmanager/LockManager.php',
        'FileOp' => 'includes/filebackend/FileOp.php',
@@ -879,11 +884,12 @@ $wgAutoloadLocalClasses = array(
        # includes/site
        'MediaWikiSite' => 'includes/site/MediaWikiSite.php',
        'Site' => 'includes/site/Site.php',
-       'SiteArray' => 'includes/site/SiteArray.php',
+       'SiteObject' => 'includes/site/Site.php',
+       'SiteArray' => 'includes/site/SiteList.php',
        'SiteList' => 'includes/site/SiteList.php',
-       'SiteObject' => 'includes/site/SiteObject.php',
-       'Sites' => 'includes/site/Sites.php',
-       'SitesTable' => 'includes/site/SitesTable.php',
+       'SiteSQLStore' => 'includes/site/SiteSQLStore.php',
+       'Sites' => 'includes/site/SiteSQLStore.php',
+       'SiteStore' => 'includes/site/SiteStore.php',
 
        # includes/specials
        'ActiveUsersPager' => 'includes/specials/SpecialActiveusers.php',
@@ -1075,7 +1081,7 @@ $wgAutoloadLocalClasses = array(
        'wikiStatsOutput' => 'maintenance/language/StatOutputs.php',
 
        # maintenance/term
-       'AnsiTermColorer'  => 'maintenance/term/MWTerm.php',
+       'AnsiTermColorer' => 'maintenance/term/MWTerm.php',
        'DummyTermColorer' => 'maintenance/term/MWTerm.php',
 
        # mw-config
index e05b2ac..1d1e2c0 100644 (file)
@@ -65,11 +65,11 @@ class Block {
                $timestamp = 0, $auto = 0, $expiry = '', $anonOnly = 0, $createAccount = 0, $enableAutoblock = 0,
                $hideName = 0, $blockEmail = 0, $allowUsertalk = 0, $byText = '' )
        {
-               if( $timestamp === 0 ){
+               if( $timestamp === 0 ) {
                        $timestamp = wfTimestampNow();
                }
 
-               if( count( func_get_args() ) > 0 ){
+               if( count( func_get_args() ) > 0 ) {
                        # Soon... :D
                        # wfDeprecated( __METHOD__ . " with arguments" );
                }
@@ -206,16 +206,16 @@ class Block {
         */
        public function load( $address = '', $user = 0 ) {
                wfDeprecated( __METHOD__, '1.18' );
-               if( $user ){
+               if( $user ) {
                        $username = User::whoIs( $user );
                        $block = self::newFromTarget( $username, $address );
                } else {
                        $block = self::newFromTarget( null, $address );
                }
 
-               if( $block instanceof Block ){
+               if( $block instanceof Block ) {
                        # This is mildly evil, but hey, it's B/C :D
-                       foreach( $block as $variable => $value ){
+                       foreach( $block as $variable => $value ) {
                                $this->$variable = $value;
                        }
                        return true;
@@ -237,7 +237,7 @@ class Block {
        protected function newLoad( $vagueTarget = null ) {
                $db = wfGetDB( $this->mFromMaster ? DB_MASTER : DB_SLAVE );
 
-               if( $this->type !== null ){
+               if( $this->type !== null ) {
                        $conds = array(
                                'ipb_address' => array( (string)$this->target ),
                        );
@@ -247,7 +247,7 @@ class Block {
 
                # Be aware that the != '' check is explicit, since empty values will be
                # passed by some callers (bug 29116)
-               if( $vagueTarget != ''){
+               if( $vagueTarget != '' ) {
                        list( $target, $type ) = self::parseTarget( $vagueTarget );
                        switch( $type ) {
                                case self::TYPE_USER:
@@ -285,20 +285,20 @@ class Block {
                # This is begging for $this = $bestBlock, but that's not allowed in PHP :(
                $bestBlockPreventsEdit = null;
 
-               foreach( $res as $row ){
+               foreach( $res as $row ) {
                        $block = self::newFromRow( $row );
 
                        # Don't use expired blocks
-                       if( $block->deleteIfExpired() ){
+                       if( $block->deleteIfExpired() ) {
                                continue;
                        }
 
                        # Don't use anon only blocks on users
-                       if( $this->type == self::TYPE_USER && !$block->isHardblock() ){
+                       if( $this->type == self::TYPE_USER && !$block->isHardblock() ) {
                                continue;
                        }
 
-                       if( $block->getType() == self::TYPE_RANGE ){
+                       if( $block->getType() == self::TYPE_RANGE ) {
                                # This is the number of bits that are allowed to vary in the block, give
                                # or take some floating point errors
                                $end = wfBaseconvert( $block->getRangeEnd(), 16, 10 );
@@ -313,14 +313,14 @@ class Block {
                                $score = $block->getType();
                        }
 
-                       if( $score < $bestBlockScore ){
+                       if( $score < $bestBlockScore ) {
                                $bestBlockScore = $score;
                                $bestRow = $row;
                                $bestBlockPreventsEdit = $block->prevents( 'edit' );
                        }
                }
 
-               if( $bestRow !== null ){
+               if( $bestRow !== null ) {
                        $this->initFromRow( $bestRow );
                        $this->prevents( 'edit', $bestBlockPreventsEdit );
                        return true;
@@ -371,9 +371,9 @@ class Block {
        protected static function getIpFragment( $hex ) {
                global $wgBlockCIDRLimit;
                if ( substr( $hex, 0, 3 ) == 'v6-' ) {
-                       return 'v6-' . substr( substr( $hex, 3 ), 0,  floor( $wgBlockCIDRLimit['IPv6'] / 4 ) );
+                       return 'v6-' . substr( substr( $hex, 3 ), 0, floor( $wgBlockCIDRLimit['IPv6'] / 4 ) );
                } else {
-                       return substr( $hex, 0,  floor( $wgBlockCIDRLimit['IPv4'] / 4 ) );
+                       return substr( $hex, 0, floor( $wgBlockCIDRLimit['IPv4'] / 4 ) );
                }
        }
 
@@ -418,7 +418,7 @@ class Block {
         * @param  $row ResultWrapper row from the ipblocks table
         * @return Block
         */
-       public static function newFromRow( $row ){
+       public static function newFromRow( $row ) {
                $block = new Block;
                $block->initFromRow( $row );
                return $block;
@@ -465,7 +465,7 @@ class Block {
                Block::purgeExpired();
 
                $row = $this->getDatabaseArray();
-               $row['ipb_id'] = $dbw->nextSequenceValue("ipblocks_ipb_id_seq");
+               $row['ipb_id'] = $dbw->nextSequenceValue( "ipblocks_ipb_id_seq" );
 
                $dbw->insert(
                        'ipblocks',
@@ -510,8 +510,8 @@ class Block {
         * @param $db DatabaseBase
         * @return Array
         */
-       protected function getDatabaseArray( $db = null ){
-               if( !$db ){
+       protected function getDatabaseArray( $db = null ) {
+               if( !$db ) {
                        $db = wfGetDB( DB_SLAVE );
                }
                $expiry = $db->encodeExpiry( $this->mExpiry );
@@ -576,6 +576,13 @@ class Block {
         * @return Array: block IDs of retroactive autoblocks made
         */
        protected static function defaultRetroactiveAutoblock( Block $block, array &$blockIds ) {
+               global $wgPutIPinRC;
+
+               // No IPs are in recentchanges table, so nothing to select
+               if( !$wgPutIPinRC ) {
+                       return;
+               }
+
                $dbr = wfGetDB( DB_SLAVE );
 
                $options = array( 'ORDER BY' => 'rc_timestamp DESC' );
@@ -585,9 +592,9 @@ class Block {
                $options['LIMIT'] = 1;
 
                $res = $dbr->select( 'recentchanges', array( 'rc_ip' ), $conds,
-                       __METHOD__ ,  $options );
+                       __METHOD__, $options );
 
-               if ( !$dbr->numRows( $res ) ) {
+               if ( !$res->numRows() ) {
                        # No results, don't autoblock anything
                        wfDebug( "No IP found to retroactively autoblock\n" );
                } else {
@@ -689,7 +696,7 @@ class Block {
                wfDebug( "Autoblocking {$this->getTarget()}@" . $autoblockIP . "\n" );
                $autoblock->setTarget( $autoblockIP );
                $autoblock->setBlocker( $this->getBlocker() );
-               $autoblock->mReason = wfMessage( 'autoblocker', $this->getTarget(), $this->mReason )->inContentLanguage()->text();
+               $autoblock->mReason = wfMessage( 'autoblocker', $this->getTarget(), $this->mReason )->inContentLanguage()->plain();
                $timestamp = wfTimestampNow();
                $autoblock->mTimestamp = $timestamp;
                $autoblock->mAuto = 1;
@@ -990,9 +997,11 @@ class Block {
         * Purge expired blocks from the ipblocks table
         */
        public static function purgeExpired() {
-               $dbw = wfGetDB( DB_MASTER );
-               $dbw->delete( 'ipblocks',
-                       array( 'ipb_expiry < ' . $dbw->addQuotes( $dbw->timestamp() ) ), __METHOD__ );
+               if ( !wfReadOnly() ) {
+                       $dbw = wfGetDB( DB_MASTER );
+                       $dbw->delete( 'ipblocks',
+                               array( 'ipb_expiry < ' . $dbw->addQuotes( $dbw->timestamp() ) ), __METHOD__ );
+               }
        }
 
        /**
@@ -1041,24 +1050,24 @@ class Block {
        public static function newFromTarget( $specificTarget, $vagueTarget = null, $fromMaster = false ) {
 
                list( $target, $type ) = self::parseTarget( $specificTarget );
-               if( $type == Block::TYPE_ID || $type == Block::TYPE_AUTO ){
+               if( $type == Block::TYPE_ID || $type == Block::TYPE_AUTO ) {
                        return Block::newFromID( $target );
 
-               } elseif( $target === null && $vagueTarget == '' ){
+               } elseif( $target === null && $vagueTarget == '' ) {
                        # We're not going to find anything useful here
                        # Be aware that the == '' check is explicit, since empty values will be
                        # passed by some callers (bug 29116)
                        return null;
 
-               } elseif( in_array( $type, array( Block::TYPE_USER, Block::TYPE_IP, Block::TYPE_RANGE ) ) ) {
+               } elseif( in_array( $type, array( Block::TYPE_USER, Block::TYPE_IP, Block::TYPE_RANGE, null ) ) ) {
                        $block = new Block();
                        $block->fromMaster( $fromMaster );
 
-                       if( $type !== null ){
+                       if( $type !== null ) {
                                $block->setTarget( $target );
                        }
 
-                       if( $block->newLoad( $vagueTarget ) ){
+                       if( $block->newLoad( $vagueTarget ) ) {
                                return $block;
                        }
                }
@@ -1066,22 +1075,23 @@ class Block {
        }
 
        /**
-        * From an existing Block, get the target and the type of target.  Note that it is
-        * always safe to treat the target as a string; for User objects this will return
-        * User::__toString() which in turn gives User::getName().
+        * From an existing Block, get the target and the type of target.
+        * Note that, except for null, it is always safe to treat the target
+        * as a string; for User objects this will return User::__toString()
+        * which in turn gives User::getName().
         *
-        * @param $target String|Int|User
-        * @return array( User|String, Block::TYPE_ constant )
+        * @param $target String|Int|User|null
+        * @return array( User|String|null, Block::TYPE_ constant|null )
         */
        public static function parseTarget( $target ) {
                # We may have been through this before
-               if( $target instanceof User ){
-                       if( IP::isValid( $target->getName() ) ){
+               if( $target instanceof User ) {
+                       if( IP::isValid( $target->getName() ) ) {
                                return array( $target, self::TYPE_IP );
                        } else {
                                return array( $target, self::TYPE_USER );
                        }
-               } elseif( $target === null ){
+               } elseif( $target === null ) {
                        return array( null, null );
                }
 
@@ -1102,7 +1112,7 @@ class Block {
 
                # Consider the possibility that this is not a username at all
                # but actually an old subpage (bug #29797)
-               if( strpos( $target, '/' ) !== false ){
+               if( strpos( $target, '/' ) !== false ) {
                        # An old subpage, drill down to the user behind it
                        $parts = explode( '/', $target );
                        $target = $parts[0];
@@ -1169,7 +1179,7 @@ class Block {
         * Set the target for this block, and update $this->type accordingly
         * @param $target Mixed
         */
-       public function setTarget( $target ){
+       public function setTarget( $target ) {
                list( $this->target, $this->type ) = self::parseTarget( $target );
        }
 
@@ -1177,7 +1187,7 @@ class Block {
         * Get the user who implemented this block
         * @return User|string Local User object or string for a foreign user
         */
-       public function getBlocker(){
+       public function getBlocker() {
                return $this->blocker;
        }
 
@@ -1185,7 +1195,7 @@ class Block {
         * Set the user who implemented (or will implement) this block
         * @param $user User|string Local User object or username string for foriegn users
         */
-       public function setBlocker( $user ){
+       public function setBlocker( $user ) {
                $this->blocker = $user;
        }
 }
index b9c9609..53e44d7 100644 (file)
@@ -75,11 +75,11 @@ class Category {
                        # Okay, there were no contents.  Nothing to initialize.
                        if ( $this->mTitle ) {
                                # If there is a title object but no record in the category table, treat this as an empty category
-                               $this->mID      = false;
-                               $this->mName    = $this->mTitle->getDBkey();
-                               $this->mPages   = 0;
+                               $this->mID = false;
+                               $this->mName = $this->mTitle->getDBkey();
+                               $this->mPages = 0;
                                $this->mSubcats = 0;
-                               $this->mFiles   = 0;
+                               $this->mFiles = 0;
 
                                return true;
                        } else {
@@ -87,11 +87,11 @@ class Category {
                        }
                }
 
-               $this->mID      = $row->cat_id;
-               $this->mName    = $row->cat_title;
-               $this->mPages   = $row->cat_pages;
+               $this->mID = $row->cat_id;
+               $this->mName = $row->cat_title;
+               $this->mPages = $row->cat_pages;
                $this->mSubcats = $row->cat_subcats;
-               $this->mFiles   = $row->cat_files;
+               $this->mFiles = $row->cat_files;
 
                # (bug 13683) If the count is negative, then 1) it's obviously wrong
                # and should not be kept, and 2) we *probably* don't have to scan many
@@ -179,16 +179,16 @@ class Category {
                                $cat->mName = $title->getDBkey(); # if we have a title object, fetch the category name from there
                        }
 
-                       $cat->mID =   false;
+                       $cat->mID = false;
                        $cat->mSubcats = 0;
-                       $cat->mPages   = 0;
-                       $cat->mFiles   = 0;
+                       $cat->mPages = 0;
+                       $cat->mFiles = 0;
                } else {
-                       $cat->mName    = $row->cat_title;
-                       $cat->mID      = $row->cat_id;
+                       $cat->mName = $row->cat_title;
+                       $cat->mID = $row->cat_id;
                        $cat->mSubcats = $row->cat_subcats;
-                       $cat->mPages   = $row->cat_pages;
-                       $cat->mFiles   = $row->cat_files;
+                       $cat->mPages = $row->cat_pages;
+                       $cat->mFiles = $row->cat_files;
                }
 
                return $cat;
@@ -350,9 +350,9 @@ class Category {
                wfProfileOut( __METHOD__ );
 
                # Now we should update our local counts.
-               $this->mPages   = $result->pages;
+               $this->mPages = $result->pages;
                $this->mSubcats = $result->subcats;
-               $this->mFiles   = $result->files;
+               $this->mFiles = $result->files;
 
                return $ret;
        }
index 32e270e..3e69dd4 100644 (file)
@@ -56,7 +56,7 @@ class CategoryPage extends Article {
                $diffOnly = $request->getBool( 'diffonly',
                        $this->getContext()->getUser()->getOption( 'diffonly' ) );
 
-               if ( isset( $diff ) && $diffOnly ) {
+               if ( $diff !== null && $diffOnly ) {
                        parent::view();
                        return;
                }
index b59b4e1..7678ffe 100644 (file)
@@ -71,11 +71,12 @@ class CategoryViewer extends ContextSource {
         * @since 1.19 $context is a second, required parameter
         * @param $title Title
         * @param $context IContextSource
-        * @param $from String
-        * @param $until String
+        * @param $from Array An array with keys page, subcat,
+        *        and file for offset of results of each section (since 1.17)
+        * @param $until Array An array with 3 keys for until of each section (since 1.17)
         * @param $query Array
         */
-       function __construct( $title, IContextSource $context, $from = '', $until = '', $query = array() ) {
+       function __construct( $title, IContextSource $context, $from = array(), $until = array(), $query = array() ) {
                global $wgCategoryPagingLimit;
                $this->title = $title;
                $this->setContext( $context );
@@ -311,7 +312,10 @@ class CategoryViewer extends ContextSource {
                                ),
                                array(
                                        'categorylinks' => array( 'INNER JOIN', 'cl_from = page_id' ),
-                                       'category' => array( 'LEFT JOIN', 'cat_title = page_title AND page_namespace = ' . NS_CATEGORY )
+                                       'category' => array( 'LEFT JOIN', array(
+                                               'cat_title = page_title',
+                                               'page_namespace' => NS_CATEGORY
+                                       ))
                                )
                        );
 
index 589950f..cb67aa8 100644 (file)
@@ -211,7 +211,7 @@ class Categoryfinder {
                        $res = $this->dbr->select(
                                /* FROM   */ 'page',
                                /* SELECT */ array( 'page_id', 'page_title' ),
-                               /* WHERE  */ array( 'page_namespace' => NS_CATEGORY , 'page_title' => $layer ),
+                               /* WHERE  */ array( 'page_namespace' => NS_CATEGORY, 'page_title' => $layer ),
                                __METHOD__ . '-2'
                        );
                        foreach ( $res as $o ) {
index 2a6a3d2..1c4587a 100644 (file)
@@ -133,7 +133,7 @@ class CdbReader_DBA {
        }
 
        function close() {
-               if( isset($this->handle) ) {
+               if( isset( $this->handle ) ) {
                        dba_close( $this->handle );
                }
                unset( $this->handle );
@@ -165,7 +165,7 @@ class CdbWriter_DBA {
        }
 
        function close() {
-               if( isset($this->handle) ) {
+               if( isset( $this->handle ) ) {
                        dba_close( $this->handle );
                }
                if ( wfIsWindows() ) {
@@ -183,4 +183,3 @@ class CdbWriter_DBA {
                }
        }
 }
-
index f58e07e..71b55f8 100644 (file)
@@ -332,10 +332,10 @@ class CdbWriter_PHP extends CdbWriter {
         */
        public function close() {
                $this->finish();
-               if( isset($this->handle) ) {
+               if( isset( $this->handle ) ) {
                        fclose( $this->handle );
                }
-               if ( wfIsWindows() && file_exists($this->realFileName) ) {
+               if ( wfIsWindows() && file_exists( $this->realFileName ) ) {
                        unlink( $this->realFileName );
                }
                if ( !rename( $this->tmpFileName, $this->realFileName ) ) {
@@ -351,7 +351,7 @@ class CdbWriter_PHP extends CdbWriter {
        protected function write( $buf ) {
                $len = fwrite( $this->handle, $buf );
                if ( $len !== strlen( $buf ) ) {
-                       $this->throwException( 'Error writing to CDB file "'.$this->tmpFileName.'".' );
+                       $this->throwException( 'Error writing to CDB file "' . $this->tmpFileName . '".' );
                }
        }
 
@@ -363,7 +363,7 @@ class CdbWriter_PHP extends CdbWriter {
                $newpos = $this->pos + $len;
                if ( $newpos > 0x7fffffff ) {
                        $this->throwException(
-                               'A value in the CDB file "'.$this->tmpFileName.'" is too large.' );
+                               'A value in the CDB file "' . $this->tmpFileName . '" is too large.' );
                }
                $this->pos = $newpos;
        }
@@ -392,10 +392,10 @@ class CdbWriter_PHP extends CdbWriter {
         */
        protected function addbegin( $keylen, $datalen ) {
                if ( $keylen > 0x7fffffff ) {
-                       $this->throwException( 'Key length too long in file "'.$this->tmpFileName.'".' );
+                       $this->throwException( 'Key length too long in file "' . $this->tmpFileName . '".' );
                }
                if ( $datalen > 0x7fffffff ) {
-                       $this->throwException( 'Data length too long in file "'.$this->tmpFileName.'".' );
+                       $this->throwException( 'Data length too long in file "' . $this->tmpFileName . '".' );
                }
                $buf = pack( 'VV', $keylen, $datalen );
                $this->write( $buf );
@@ -470,7 +470,7 @@ class CdbWriter_PHP extends CdbWriter {
                // Write the pointer array at the start of the file
                rewind( $this->handle );
                if ( ftell( $this->handle ) != 0 ) {
-                       $this->throwException( 'Error rewinding to start of file "'.$this->tmpFileName.'".' );
+                       $this->throwException( 'Error rewinding to start of file "' . $this->tmpFileName . '".' );
                }
                $this->write( $final );
        }
index 18f425a..1dd9b59 100644 (file)
@@ -169,7 +169,7 @@ class ChangeTags {
         *
         * @throws MWException When unable to determine appropriate JOIN condition for tagging
         */
-       static function modifyDisplayQuery( &$tables, &$fields,  &$conds,
+       static function modifyDisplayQuery( &$tables, &$fields, &$conds,
                                                                                &$join_conds, &$options, $filter_tag = false ) {
                global $wgRequest, $wgUseTagFilter;
 
@@ -221,7 +221,7 @@ class ChangeTags {
         *        - if $fullForm is false: Array with
         *        - if $fullForm is true: String, html fragment
         */
-       public static function buildTagFilterSelector( $selected='', $fullForm = false, Title $title = null ) {
+       public static function buildTagFilterSelector( $selected = '', $fullForm = false, Title $title = null ) {
                global $wgUseTagFilter;
 
                if ( !$wgUseTagFilter || !count( self::listDefinedTags() ) ) {
index ee4c2d6..ae30272 100644 (file)
@@ -135,7 +135,7 @@ class ChangesFeed {
                $feedLastmod = $messageMemc->get( $timekey );
 
                if( ( $wgFeedCacheTimeout > 0 ) && $feedLastmod ) {
-                   /**
+                       /**
                         * If the cached feed was rendered very recently, we may
                         * go ahead and use it even if there have been edits made
                         * since it was rendered. This keeps a swarm of requests
index f8dbf3b..a9b9c31 100644 (file)
@@ -30,7 +30,7 @@
  */
 class RCCacheEntry extends RecentChange {
        var $secureName, $link;
-       var $curlink , $difflink, $lastlink, $usertalklink, $versionlink;
+       var $curlink, $difflink, $lastlink, $usertalklink, $versionlink;
        var $userlink, $timestamp, $watched;
 
        /**
@@ -136,7 +136,7 @@ class ChangesList extends ContextSource {
         */
        protected function recentChangesFlags( $flags, $nothing = '&#160;' ) {
                $f = '';
-               foreach( array( 'newpage', 'minor', 'bot', 'unpatrolled' ) as $flag ){
+               foreach( array( 'newpage', 'minor', 'bot', 'unpatrolled' ) as $flag ) {
                        $f .= isset( $flags[$flag] ) && $flags[$flag]
                                ? self::flag( $flag )
                                : $nothing;
@@ -217,7 +217,7 @@ class ChangesList extends ContextSource {
                $lang = $context->getLanguage();
                $code = $lang->getCode();
                static $fastCharDiff = array();
-               if ( !isset($fastCharDiff[$code]) ) {
+               if ( !isset( $fastCharDiff[$code] ) ) {
                        $fastCharDiff[$code] = $wgMiserMode || $context->msg( 'rc-change-size' )->plain() === '$1';
                }
 
@@ -286,6 +286,10 @@ class ChangesList extends ContextSource {
                }
        }
 
+       /**
+        * @param $s string HTML to update
+        * @param $rc_timestamp mixed
+        */
        public function insertDateHeader( &$s, $rc_timestamp ) {
                # Make date header if necessary
                $date = $this->getLanguage()->userDate( $rc_timestamp, $this->getUser() );
@@ -299,6 +303,11 @@ class ChangesList extends ContextSource {
                }
        }
 
+       /**
+        * @param $s string HTML to update
+        * @param $title Title
+        * @param $logtype string
+        */
        public function insertLog( &$s, $title, $logtype ) {
                $page = new LogPage( $logtype );
                $logname = $page->getName()->escaped();
@@ -306,7 +315,7 @@ class ChangesList extends ContextSource {
        }
 
        /**
-        * @param $s
+        * @param $s string HTML to update
         * @param $rc RecentChange
         * @param $unpatrolled
         */
@@ -319,7 +328,7 @@ class ChangesList extends ContextSource {
                } else {
                        $query = array(
                                'curid' => $rc->mAttribs['rc_cur_id'],
-                               'diff'  => $rc->mAttribs['rc_this_oldid'],
+                               'diff' => $rc->mAttribs['rc_this_oldid'],
                                'oldid' => $rc->mAttribs['rc_last_oldid']
                        );
 
@@ -349,7 +358,7 @@ class ChangesList extends ContextSource {
        }
 
        /**
-        * @param $s
+        * @param $s string HTML to update
         * @param $rc RecentChange
         * @param $unpatrolled
         * @param $watched
@@ -369,7 +378,7 @@ class ChangesList extends ContextSource {
                        array( 'class' => 'mw-changeslist-title' ),
                        $params
                );
-               if( $this->isDeleted($rc,Revision::DELETED_TEXT) ) {
+               if( $this->isDeleted( $rc, Revision::DELETED_TEXT ) ) {
                        $articlelink = '<span class="history-deleted">' . $articlelink . '</span>';
                }
                # To allow for boldening pages watched by this user
@@ -378,20 +387,33 @@ class ChangesList extends ContextSource {
                $articlelink .= $this->getLanguage()->getDirMark();
 
                wfRunHooks( 'ChangesListInsertArticleLink',
-                       array(&$this, &$articlelink, &$s, &$rc, $unpatrolled, $watched) );
+                       array( &$this, &$articlelink, &$s, &$rc, $unpatrolled, $watched ) );
 
                $s .= " $articlelink";
        }
 
        /**
-        * @param $s
+        * Get the timestamp from $rc formatted with current user's settings
+        * and a separator
+        *
         * @param $rc RecentChange
+        * @return string HTML fragment
         */
-       public function insertTimestamp( &$s, $rc ) {
-               $s .= $this->message['semicolon-separator'] . '<span class="mw-changeslist-date">' .
+       public function getTimestamp( $rc ) {
+               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> ';
        }
 
+       /**
+        * Insert time timestamp string from $rc into $s
+        *
+        * @param $s string HTML to update
+        * @param $rc RecentChange
+        */
+       public function insertTimestamp( &$s, $rc ) {
+               $s .= $this->getTimestamp( $rc );
+       }
+
        /**
         * Insert links to user page, user talk page and eventually a blocking link
         *
@@ -512,14 +534,14 @@ class ChangesList extends ContextSource {
                        $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'] )
+                       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'],
-                                       'user'      => $rc->mAttribs['rc_user'],
+                                       'title' => $page,
+                                       'id' => $rc->mAttribs['rc_this_oldid'],
+                                       'user' => $rc->mAttribs['rc_user'],
                                        'user_text' => $rc->mAttribs['rc_user_text'],
-                                       'deleted'   => $rc->mAttribs['rc_deleted']
+                                       'deleted' => $rc->mAttribs['rc_deleted']
                                ) );
                                $s .= ' '.Linker::generateRollback( $rev, $this->getContext() );
                        }
@@ -532,10 +554,10 @@ class ChangesList extends ContextSource {
         * @param $classes
         */
        public function insertTags( &$s, &$rc, &$classes ) {
-               if ( empty($rc->mAttribs['ts_tags']) )
+               if ( empty( $rc->mAttribs['ts_tags'] ) )
                        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;
        }
@@ -568,7 +590,8 @@ class OldChangesList extends ChangesList {
         * @param $rc RecentChange, passed by reference
         * @param $watched Bool (default false)
         * @param $linenumber Int (default null)
-        * @return string
+        *
+        * @return string|bool
         */
        public function recentChangesLine( &$rc, $watched = false, $linenumber = null ) {
                global $wgRCShowChangedSize;
@@ -656,13 +679,16 @@ 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'] );
                }
 
-               wfRunHooks( 'OldChangesListRecentChangesLine', array(&$this, &$s, $rc) );
+               if ( !wfRunHooks( 'OldChangesListRecentChangesLine', array( &$this, &$s, $rc, &$classes ) ) ) {
+                       wfProfileOut( __METHOD__ );
+                       return false;
+               }
 
                wfProfileOut( __METHOD__ );
-               return "$dateheader<li class=\"".implode( ' ', $classes )."\">".$s."</li>\n";
+               return "$dateheader<li class=\"" . implode( ' ', $classes ) . "\">" . $s . "</li>\n";
        }
 }
 
@@ -796,7 +822,7 @@ class EnhancedChangesList extends ChangesList {
                        $lastLink = $this->message['last'];
                } else {
                        $lastLink = Linker::linkKnown( $rc->getTitle(), $this->message['last'],
-                               array(), $curIdEq + array('diff' => $thisOldid, 'oldid' => $lastOldid) + $rcIdQuery );
+                               array(), $curIdEq + array( 'diff' => $thisOldid, 'oldid' => $lastOldid ) + $rcIdQuery );
                }
 
                # Make user links
@@ -808,7 +834,7 @@ class EnhancedChangesList extends ChangesList {
                }
 
                $rc->lastlink = $lastLink;
-               $rc->curlink  = $curLink;
+               $rc->curlink = $curLink;
                $rc->difflink = $diffLink;
 
                # Put accumulated information into the cache, for later display
@@ -817,10 +843,10 @@ class EnhancedChangesList extends ChangesList {
                $secureName = $title->getPrefixedDBkey();
                if( $type == RC_MOVE || $type == RC_MOVE_OVER_REDIRECT ) {
                        # Use an @ character to prevent collision with page names
-                       $this->rc_cache['@@' . ($this->rcMoveIndex++)] = array($rc);
+                       $this->rc_cache['@@' . ($this->rcMoveIndex++)] = array( $rc );
                } else {
                        # Logs are grouped by type
-                       if( $type == RC_LOG ){
+                       if( $type == RC_LOG ) {
                                $secureName = SpecialPage::getTitleFor( 'Log', $logType )->getPrefixedDBkey();
                        }
                        if( !isset( $this->rc_cache[$secureName] ) ) {
@@ -926,7 +952,7 @@ class EnhancedChangesList extends ChangesList {
                                implode( $this->message['semicolon-separator'], $users )
                        )->escaped() . '</span>';
 
-               $tl = '<span class="mw-collapsible-toggle mw-enhancedchanges-arrow"></span>';
+               $tl = '<span class="mw-collapsible-toggle mw-enhancedchanges-arrow mw-enhancedchanges-arrow-space"></span>';
                $r .= "<td>$tl</td>";
 
                # Main line
@@ -938,7 +964,7 @@ class EnhancedChangesList extends ChangesList {
                ) );
 
                # Timestamp
-               $r .= '&#160;'.$block[0]->timestamp.'&#160;</td><td>';
+               $r .= '&#160;' . $block[0]->timestamp . '&#160;</td><td>';
 
                # Article link
                if( $namehidden ) {
@@ -953,7 +979,7 @@ class EnhancedChangesList extends ChangesList {
 
                $queryParams['curid'] = $curId;
                # Changes message
-               $n = count($block);
+               $n = count( $block );
                static $nchanges = array();
                if ( !isset( $nchanges[$n] ) ) {
                        $nchanges[$n] = $this->msg( 'nchanges' )->numParams( $n )->escaped();
@@ -1008,7 +1034,7 @@ class EnhancedChangesList extends ChangesList {
                # Character difference (does not apply if only log items)
                if( $wgRCShowChangedSize && !$allLogs ) {
                        $last = 0;
-                       $first = count($block) - 1;
+                       $first = count( $block ) - 1;
                        # Some events (like logs) have an "empty" size, so we need to skip those...
                        while( $last < $first && $block[$last]->mAttribs['rc_new_len'] === null ) {
                                $last++;
@@ -1027,7 +1053,7 @@ class EnhancedChangesList extends ChangesList {
                }
 
                $r .= $users;
-               $r .= $this->numberofWatchingusers($block[0]->numberofWatchingusers);
+               $r .= $this->numberofWatchingusers( $block[0]->numberofWatchingusers );
 
                # Sub-entries
                foreach( $block as $rcObj ) {
@@ -1055,7 +1081,7 @@ class EnhancedChangesList extends ChangesList {
                                $link = $rcObj->timestamp;
                        # Revision link
                        } elseif( !ChangesList::userCan( $rcObj, Revision::DELETED_TEXT, $this->getUser() ) ) {
-                               $link = '<span class="history-deleted">'.$rcObj->timestamp.'</span> ';
+                               $link = '<span class="history-deleted">' . $rcObj->timestamp . '</span> ';
                        } else {
                                if ( $rcObj->unpatrolled && $type == RC_NEW) {
                                        $params['rcid'] = $rcObj->mAttribs['rc_id'];
@@ -1068,7 +1094,7 @@ class EnhancedChangesList extends ChangesList {
                                                $params
                                        );
                                if( $this->isDeleted( $rcObj, Revision::DELETED_TEXT ) ) {
-                                       $link = '<span class="history-deleted">'.$link.'</span> ';
+                                       $link = '<span class="history-deleted">' . $link . '</span> ';
                                }
                        }
                        $r .= $link . '</span>';
@@ -1118,7 +1144,7 @@ class EnhancedChangesList extends ChangesList {
         * @param $title String: text
         * @return String: HTML "<img>" tag
         */
-       protected function arrow( $dir, $alt='', $title='' ) {
+       protected function arrow( $dir, $alt = '', $title = '' ) {
                global $wgStylePath;
                $encUrl = htmlspecialchars( $wgStylePath . '/common/images/Arr_' . $dir . '.png' );
                $encAlt = htmlspecialchars( $alt );
@@ -1180,7 +1206,7 @@ class EnhancedChangesList extends ChangesList {
                $r = Html::openElement( 'table', array( 'class' => $classes ) ) .
                        Html::openElement( 'tr' );
 
-               $r .= '<td class="mw-enhanced-rc"><span class="mw-enhancedchanges-arrow mw-enhancedchanges-arrow-space"></span>';
+               $r .= '<td class="mw-enhanced-rc"><span class="mw-enhancedchanges-arrow-space"></span>';
                # Flag and Timestamp
                if( $type == RC_MOVE || $type == RC_MOVE_OVER_REDIRECT ) {
                        $r .= '&#160;&#160;&#160;&#160;'; // 4 flags -> 4 spaces
@@ -1192,7 +1218,7 @@ class EnhancedChangesList extends ChangesList {
                                'bot' => $rcObj->mAttribs['rc_bot'],
                        ) );
                }
-               $r .= '&#160;'.$rcObj->timestamp.'&#160;</td><td>';
+               $r .= '&#160;' . $rcObj->timestamp . '&#160;</td><td>';
                # Article or log link
                if( $logType ) {
                        $logPage = new LogPage( $logType );
@@ -1224,7 +1250,7 @@ class EnhancedChangesList extends ChangesList {
                if ( $type == RC_LOG ) {
                        $r .= $this->insertLogEntry( $rcObj );
                } else {
-                       $r .= ' '.$rcObj->userlink . $rcObj->usertalklink;
+                       $r .= ' ' . $rcObj->userlink . $rcObj->usertalklink;
                        $r .= $this->insertComment( $rcObj );
                        $this->insertRollback( $r, $rcObj );
                }
@@ -1232,7 +1258,7 @@ class EnhancedChangesList extends ChangesList {
                # Tags
                $this->insertTags( $r, $rcObj, $classes );
                # Show how many people are watching this if enabled
-               $r .= $this->numberofWatchingusers($rcObj->numberofWatchingusers);
+               $r .= $this->numberofWatchingusers( $rcObj->numberofWatchingusers );
 
                $r .= "</td></tr></table>\n";
 
@@ -1265,7 +1291,7 @@ class EnhancedChangesList extends ChangesList {
 
                wfProfileOut( __METHOD__ );
 
-               return '<div>'.$blockOut.'</div>';
+               return '<div>' . $blockOut . '</div>';
        }
 
        /**
index 3cc7902..f53ce02 100644 (file)
@@ -375,4 +375,3 @@ class IcuCollation extends Collation {
                return false;
        }
 }
-
index e563416..699e83a 100644 (file)
@@ -1095,4 +1095,3 @@ class ConfEditorToken {
                return $this->type == 'END';
        }
 }
-
index 48216f0..a6eb79a 100644 (file)
@@ -113,7 +113,7 @@ class Cookie {
                }
 
                // Don't allow cookies for "co.uk" or "gov.uk", etc, but allow "supermarket.uk"
-               if ( strrpos( $domain, "." ) - strlen( $domain )  == -3 ) {
+               if ( strrpos( $domain, "." ) - strlen( $domain ) == -3 ) {
                        if ( ( count( $dc ) == 2 && strlen( $dc[0] ) <= 2 )
                                || ( count( $dc ) == 3 && strlen( $dc[0] ) == "" && strlen( $dc[1] ) <= 2 ) ) {
                                return false;
@@ -165,8 +165,8 @@ class Cookie {
        protected function canServeDomain( $domain ) {
                if ( $domain == $this->domain
                        || ( strlen( $domain ) > strlen( $this->domain )
-                                && substr( $this->domain, 0, 1 ) == '.'
-                                && substr_compare( $domain, $this->domain, -strlen( $this->domain ),
+                               && substr( $this->domain, 0, 1 ) == '.'
+                               && substr_compare( $domain, $this->domain, -strlen( $this->domain ),
                                                                        strlen( $this->domain ), true ) == 0 ) ) {
                        return true;
                }
index fcf6a39..4255d56 100644 (file)
@@ -106,7 +106,11 @@ class MWCryptRand {
                                        }
                                }
                                // The absolute filename itself will differ from install to install so don't leave it out
-                               $state .= realpath( $file );
+                               if( ( $path = realpath( $file ) ) !== false ) {
+                                       $state .= $path;
+                               } else {
+                                       $state .= $file;
+                               }
                                $state .= implode( '', $stat );
                        } else {
                                // The fact that the file isn't there is worth at least a
index e12b3be..68c4542 100644 (file)
@@ -123,9 +123,9 @@ $wgScriptPath       = '/wiki';
  * redirect loops when "pretty URLs" are used.
  */
 $wgUsePathInfo =
-       ( strpos( php_sapi_name(), 'cgi' ) === false ) &&
-       ( strpos( php_sapi_name(), 'apache2filter' ) === false ) &&
-       ( strpos( php_sapi_name(), 'isapi' ) === false );
+       ( strpos( PHP_SAPI, 'cgi' ) === false ) &&
+       ( strpos( PHP_SAPI, 'apache2filter' ) === false ) &&
+       ( strpos( PHP_SAPI, 'isapi' ) === false );
 
 /**
  * The extension to append to script names by default. This can either be .php
@@ -438,14 +438,34 @@ $wgUseInstantCommons = false;
 
 /**
  * File backend structure configuration.
+ *
  * This is an array of file backend configuration arrays.
  * Each backend configuration has the following parameters:
- *  - 'name'        : A unique name for the backend
- *  - 'class'       : The file backend class to use
- *  - 'wikiId'      : A unique string that identifies the wiki (container prefix)
- *  - 'lockManager' : The name of a lock manager (see $wgLockManagers)
- *
- * Additional parameters are specific to the class used.
+ *  - 'name'         : A unique name for the backend
+ *  - 'class'        : The file backend class to use
+ *  - 'wikiId'       : A unique string that identifies the wiki (container prefix)
+ *  - 'lockManager'  : The name of a lock manager (see $wgLockManagers)
+ *
+ * See FileBackend::__construct() for more details.
+ * Additional parameters are specific to the file backend class used.
+ * These settings should be global to all wikis when possible.
+ *
+ * There are two particularly important aspects about each backend:
+ *   - a) Whether it is fully qualified or wiki-relative.
+ *        By default, the paths of files are relative to the current wiki,
+ *        which works via prefixing them with the current wiki ID when accessed.
+ *        Setting 'wikiId' forces the backend to be fully qualified by prefixing
+ *        all paths with the specified value instead. This can be useful if
+ *        multiple wikis need to share the same data. Note that 'name' is *not*
+ *        part of any prefix and thus should not be relied upon for namespacing.
+ *   - b) Whether it is only defined for some wikis or is defined on all
+ *        wikis in the wiki farm. Defining a backend globally is useful
+ *        if multiple wikis need to share the same data.
+ * One should be aware of these aspects when configuring a backend for use with
+ * any basic feature or plugin. For example, suppose an extension stores data for
+ * different wikis in different directories and sometimes needs to access data from
+ * a foreign wiki's directory in order to render a page on given wiki. The extension
+ * would need a fully qualified backend that is defined on all wikis in the wiki farm.
  */
 $wgFileBackends = array();
 
@@ -455,6 +475,7 @@ $wgFileBackends = array();
  *  - 'name'        : A unique name for the lock manager
  *  - 'class'       : The lock manger class to use
  * Additional parameters are specific to the class used.
+ * These settings should be global to all wikis.
  */
 $wgLockManagers = array();
 
@@ -890,7 +911,7 @@ $wgMaxAnimatedGifArea = 1.25e7;
  *  $wgTiffThumbnailType = array( 'jpg', 'image/jpeg' );
  * @endcode
  */
- $wgTiffThumbnailType = false;
+$wgTiffThumbnailType = false;
 
 /**
  * If rendered thumbnail files are older than this timestamp, they
@@ -1264,6 +1285,12 @@ $wgSMTP = false;
  */
 $wgAdditionalMailParams = null;
 
+/**
+ * For parts of the system that have been updated to provide HTML email content, send
+ * both text and HTML parts as the body of the email
+ */
+$wgAllowHTMLEmail = false;
+
 /**
  * True: from page editor if s/he opted-in. False: Enotif mails appear to come
  * from $wgEmergencyContact
@@ -2363,7 +2390,7 @@ $wgDisableLangConversion = false;
 /** Whether to enable language variant conversion for links. */
 $wgDisableTitleConversion = false;
 
-/** Whether to enable cononical language links in meta data. */
+/** Whether to enable canonical language links in meta data. */
 $wgCanonicalLanguageLinks = true;
 
 /** Default variant code, if false, the default will be the language code */
@@ -2463,17 +2490,6 @@ $wgLocaltimezone = null;
  */
 $wgLocalTZoffset = null;
 
-/**
- * If set to true, this will roll back a few bug fixes introduced in 1.19,
- * emulating the 1.18 behaviour, to avoid introducing bug 34832. In 1.19,
- * language variant conversion is disabled in interface messages. Setting this
- * to true re-enables it.
- *
- * @todo This variable should be removed (implicitly false) in 1.20 or earlier.
- */
-$wgBug34832TransitionalRollback = true;
-
-
 /** @} */ # End of language/charset settings
 
 /*************************************************************************//**
@@ -2826,12 +2842,21 @@ $wgSend404Code = true;
 /**
  * The $wgShowRollbackEditCount variable is used to show how many edits will be
  * rollback. The numeric value of the varible are the limit up to are counted.
- * If the value is false or 0, the edits are not counted.
+ * If the value is false or 0, the edits are not counted. Disabling this will
+ * furthermore prevent MediaWiki from hiding some useless rollback links.
  *
  * @since 1.20
  */
 $wgShowRollbackEditCount = 10;
 
+/**
+ * Output a <link rel="canonical"> tag on every page indicating the canonical
+ * server which should be used, i.e. $wgServer or $wgCanonicalServer. Since
+ * detection of the current server is unreliable, the link is sent
+ * unconditionally.
+ */
+$wgEnableCanonicalServerLink = false;
+
 /** @} */ # End of output format settings }
 
 /*************************************************************************//**
@@ -3213,11 +3238,13 @@ $wgNamespacesWithSubpages = array(
        NS_TALK           => true,
        NS_USER           => true,
        NS_USER_TALK      => true,
+       NS_PROJECT        => true,
        NS_PROJECT_TALK   => true,
        NS_FILE_TALK      => true,
        NS_MEDIAWIKI      => true,
        NS_MEDIAWIKI_TALK => true,
        NS_TEMPLATE_TALK  => true,
+       NS_HELP           => true,
        NS_HELP_TALK      => true,
        NS_CATEGORY_TALK  => true
 );
@@ -3810,6 +3837,34 @@ $wgBlockDisablesLogin = false;
  */
 $wgWhitelistRead = false;
 
+/**
+ * Pages anonymous user may see, set as an array of regular expressions.
+ *
+ * This function will match the regexp against the title name, which
+ * is without underscore.
+ *
+ * @par Example:
+ * To whitelist [[Main Page]]:
+ * @code
+ * $wgWhitelistReadRegexp = array( "/Main Page/" );
+ * @endcode
+ *
+ * @note Unless ^ and/or $ is specified, a regular expression might match
+ * pages not intended to be whitelisted.  The above example will also
+ * whitelist a page named 'Security Main Page'.
+ *
+ * @par Example:
+ * To allow reading any page starting with 'User' regardless of the case:
+ * @code
+ * $wgWhitelistReadRegexp = array( "@^UsEr.*@i" );
+ * @endcode
+ * Will allow both [[User is banned]] and [[User:JohnDoe]]
+ *
+ * @note This will only work if $wgGroupPermissions['*']['read'] is false --
+ * see below. Otherwise, ALL pages are accessible, regardless of this setting.
+ */
+$wgWhitelistReadRegexp = false;
+
 /**
  * Should editors be required to have a validated e-mail
  * address before being allowed to edit?
@@ -4291,6 +4346,7 @@ $wgRateLimitsExcludedIPs = array();
 /**
  * Log IP addresses in the recentchanges table; can be accessed only by
  * extensions (e.g. CheckUser) or a DB admin
+ * Used for retroactive autoblocks
  */
 $wgPutIPinRC = true;
 
@@ -4640,6 +4696,13 @@ $wgAggregateStatsID = false;
  */
 $wgDisableCounters = false;
 
+/**
+ * InfoAction retrieves a list of transclusion links (both to and from).
+ * This number puts a limit on that query in the case of highly transcluded
+ * templates.
+ */
+$wgPageInfoTransclusionLimit = 50;
+
 /**
  * Set this to an integer to only do synchronous site_stats updates
  * one every *this many* updates. The other requests go into pending
@@ -4995,8 +5058,8 @@ $wgUpgradeKey = false;
  * @since 1.20
  */
 $wgGitRepositoryViewers = array(
-    'https://gerrit.wikimedia.org/r/p/(.*)' => 'https://gerrit.wikimedia.org/r/gitweb?p=$1;h=%H',
-    'ssh://(?:[a-z0-9_]+@)?gerrit.wikimedia.org:29418/(.*)' => 'https://gerrit.wikimedia.org/r/gitweb?p=$1;h=%H',
+       'https://gerrit.wikimedia.org/r/p/(.*)' => 'https://gerrit.wikimedia.org/r/gitweb?p=$1;h=%H',
+       'ssh://(?:[a-z0-9_]+@)?gerrit.wikimedia.org:29418/(.*)' => 'https://gerrit.wikimedia.org/r/gitweb?p=$1;h=%H',
 );
 
 /** @} */ # End of maintenance }
@@ -5158,6 +5221,15 @@ $wgAllowCategorizedRecentChanges = false;
  */
 $wgUseTagFilter = true;
 
+/**
+ * If set to an integer, pages that are watched by more users than this
+ * threshold will not require the unwatchedpages permission to view the
+ * number of watchers.
+ *
+ * @since 1.21
+ */
+$wgUnwatchedPageThreshold = false;
+
 /** @} */ # end RC/watchlist }
 
 /************************************************************************//**
@@ -5432,7 +5504,8 @@ $wgJobClasses = array(
 
 /**
 
- * Jobs that must be explicitly requested, i.e. aren't run by job runners unless special flags are set.
+ * Jobs that must be explicitly requested, i.e. aren't run by job runners unless
+ * special flags are set. The values here are keys of $wgJobClasses.
  *
  * These can be:
  * - Very long-running jobs.
@@ -5970,6 +6043,22 @@ $wgEnableAPI = true;
  */
 $wgEnableWriteAPI = true;
 
+/**
+ *
+ *     WARNING: SECURITY THREAT - debug use only
+ *
+ * Disables many security checks in the API for debugging purposes.
+ * This flag should never be used on the production servers, as it introduces
+ * a number of potential security holes. Even when enabled, the validation
+ * will still be performed, but instead of failing, API will return a warning.
+ * Also, there will always be a warning notifying that this flag is set.
+ * At this point, the flag allows GET requests to go through for modules
+ * requiring POST.
+ *
+ * @since 1.21
+ */
+$wgDebugAPI = false;
+
 /**
  * API module extensions.
  * Associative array mapping module name to class name.
@@ -6087,10 +6176,16 @@ $wgMaxShellMemory = 102400;
 $wgMaxShellFileSize = 102400;
 
 /**
- * Maximum CPU time in seconds for shell processes under linux
+ * Maximum CPU time in seconds for shell processes under Linux
  */
 $wgMaxShellTime = 180;
 
+/**
+ * Maximum wall clock time (i.e. real time, of the kind the clock on the wall
+ * would measure) in seconds for shell processes under Linux
+ */
+$wgMaxShellWallClockTime = 180;
+
 /**
  * Executable path of the PHP cli binary (php/php5). Should be set up on install.
  */
@@ -6151,6 +6246,15 @@ $wgUpdateRowsPerJob = 500;
  */
 $wgUpdateRowsPerQuery = 100;
 
+/**
+ * Do not purge all the pages that use a page when it is edited
+ * if there are more than this many such pages. This is used to
+ * avoid invalidating a large portion of the squid/parser cache.
+ *
+ * This setting should factor in any squid/parser cache expiry settings.
+ */
+$wgMaxBacklinksInvalidate = false;
+
 /** @} */ # End job queue }
 
 /************************************************************************//**
@@ -6349,8 +6453,9 @@ $wgRequirePasswordforEmailChange = true;
  *
  * @since 1.20
  */
-$wgSiteTypes = array();
-$wgSiteTypes['mediawiki'] = 'MediaWikiSite';
+$wgSiteTypes = array(
+       'mediawiki' => 'MediaWikiSite',
+);
 
 /**
  * For really cool vim folding this needs to be at the end:
index 4d7b968..d48bd0b 100644 (file)
@@ -27,7 +27,7 @@
  */
 
 class DeprecatedGlobal extends StubObject {
-        // The m's are to stay consistent with parent class.
+       // The m's are to stay consistent with parent class.
        protected $mRealValue, $mVersion;
 
        function __construct( $name, $realValue, $version = false ) {
index 292d2b7..80c091e 100644 (file)
@@ -546,8 +546,8 @@ class EditPage {
                        // Standard preference behaviour
                        return true;
                } elseif ( !$this->mTitle->exists() &&
-                 isset( $wgPreviewOnOpenNamespaces[$this->mTitle->getNamespace()] ) &&
-                 $wgPreviewOnOpenNamespaces[$this->mTitle->getNamespace()] )
+                       isset( $wgPreviewOnOpenNamespaces[$this->mTitle->getNamespace()] ) &&
+                       $wgPreviewOnOpenNamespaces[$this->mTitle->getNamespace()] )
                {
                        // Categories are special
                        return true;
@@ -577,13 +577,15 @@ class EditPage {
        }
 
        /**
-        * Does this EditPage class support section editing?
-        * This is used by EditPage subclasses to indicate their ui cannot handle section edits
+        * Returns whether section editing is supported for the current page.
+        * Subclasses may override this to replace the default behavior, which is
+        * to check ContentHandler::supportsSections.
         *
-        * @return bool
+        * @return bool true if this edit page supports sections, false otherwise.
         */
        protected function isSectionEditSupported() {
-               return true;
+               $contentHandler = ContentHandler::getForTitle( $this->mTitle );
+               return $contentHandler->supportsSections();
        }
 
        /**
@@ -597,6 +599,11 @@ class EditPage {
 
                # Section edit can come from either the form or a link
                $this->section = $request->getVal( 'wpSection', $request->getVal( 'section' ) );
+
+               if ( $this->section !== null && $this->section !== '' && !$this->isSectionEditSupported() ) {
+                       throw new ErrorPageError( 'sectioneditnotsupported-title', 'sectioneditnotsupported-text' );
+               }
+
                $this->isNew = !$this->mTitle->exists() || $this->section == 'new';
 
                if ( $request->wasPosted() ) {
@@ -610,15 +617,18 @@ class EditPage {
                                // modified by subclasses
                                wfProfileIn( get_class( $this ) . "::importContentFormData" );
                                $textbox1 = $this->importContentFormData( $request );
-                               if ( isset( $textbox1 ) ) {
+                               if ( $textbox1 !== null ) {
                                        $this->textbox1 = $textbox1;
                                }
 
                                wfProfileOut( get_class( $this ) . "::importContentFormData" );
                        }
 
+                       # Trim spaces on user supplied text
+                       $summary = trim( $request->getText( 'wpSummary' ) );
+
                        # Truncate for whole multibyte characters
-                       $this->summary = $wgContLang->truncate( $request->getText( 'wpSummary' ), 255 );
+                       $this->summary = $wgContLang->truncate( $summary, 255 );
 
                        # If the summary consists of a heading, e.g. '==Foobar==', extract the title from the
                        # header syntax, e.g. 'Foobar'. This is mainly an issue when we are using wpSummary for
@@ -1218,6 +1228,54 @@ class EditPage {
                }
        }
 
+       /**
+        * Run hooks that can filter edits just before they get saved.
+        *
+        * @param Content $content the Content to filter.
+        * @param Status  $status for reporting the outcome to the caller
+        * @param User    $user the user performing the edit
+        *
+        * @return bool
+        */
+       protected function runPostMergeFilters( Content $content, Status $status, User $user ) {
+               // Run old style post-section-merge edit filter
+               if ( !ContentHandler::runLegacyHooks( 'EditFilterMerged',
+                       array( $this, $content, &$this->hookError, $this->summary ) ) ) {
+
+                       # Error messages etc. could be handled within the hook...
+                       $status->fatal( 'hookaborted' );
+                       $status->value = self::AS_HOOK_ERROR;
+                       return false;
+               } elseif ( $this->hookError != '' ) {
+                       # ...or the hook could be expecting us to produce an error
+                       $status->fatal( 'hookaborted' );
+                       $status->value = self::AS_HOOK_ERROR_EXPECTED;
+                       return false;
+               }
+
+               // Run new style post-section-merge edit filter
+               if ( !wfRunHooks( 'EditFilterMergedContent',
+                       array( $this->mArticle->getContext(), $content, $status, $this->summary,
+                               $user, $this->minoredit ) ) ) {
+
+                       # Error messages etc. could be handled within the hook...
+                       // XXX: $status->value may already be something informative...
+                       $this->hookError = $status->getWikiText();
+                       $status->fatal( 'hookaborted' );
+                       $status->value = self::AS_HOOK_ERROR;
+                       return false;
+               } elseif ( !$status->isOK() ) {
+                       # ...or the hook could be expecting us to produce an error
+                       // FIXME this sucks, we should just use the Status object throughout
+                       $this->hookError = $status->getWikiText();
+                       $status->fatal( 'hookaborted' );
+                       $status->value = self::AS_HOOK_ERROR_EXPECTED;
+                       return false;
+               }
+
+               return true;
+       }
+
        /**
         * Attempt submission (no UI)
         *
@@ -1235,7 +1293,7 @@ class EditPage {
 
                $status = Status::newGood();
 
-               wfProfileIn( __METHOD__  );
+               wfProfileIn( __METHOD__ );
                wfProfileIn( __METHOD__ . '-checks' );
 
                if ( !wfRunHooks( 'EditPage::attemptSave', array( $this ) ) ) {
@@ -1243,16 +1301,17 @@ class EditPage {
                        $status->fatal( 'hookaborted' );
                        $status->value = self::AS_HOOK_ERROR;
                        wfProfileOut( __METHOD__ . '-checks' );
-                       wfProfileOut( __METHOD__  );
+                       wfProfileOut( __METHOD__ );
                        return $status;
                }
 
                try {
                        # Construct Content object
                        $textbox_content = $this->toEditContent( $this->textbox1 );
-               } catch (MWContentSerializationException $ex) {
+               } catch ( MWContentSerializationException $ex ) {
                        $status->fatal( 'content-failed-to-parse', $this->contentModel, $this->contentFormat, $ex->getMessage() );
                        $status->value = self::AS_PARSE_ERROR;
+                       wfProfileOut( __METHOD__ . '-checks' );
                        wfProfileOut( __METHOD__ );
                        return $status;
                }
@@ -1265,7 +1324,7 @@ class EditPage {
                                $status->setResult( false, $code );
 
                                wfProfileOut( __METHOD__ . '-checks' );
-                               wfProfileOut( __METHOD__  );
+                               wfProfileOut( __METHOD__ );
 
                                return $status;
                }
@@ -1386,17 +1445,7 @@ class EditPage {
                                return $status;
                        }
 
-                       // Run post-section-merge edit filter
-                       if ( !wfRunHooks( 'EditFilterMerged', array( $this, $this->textbox1, &$this->hookError, $this->summary ) ) ) {
-                               # Error messages etc. could be handled within the hook...
-                               $status->fatal( 'hookaborted' );
-                               $status->value = self::AS_HOOK_ERROR;
-                               wfProfileOut( __METHOD__ );
-                               return $status;
-                       } elseif ( $this->hookError != '' ) {
-                               # ...or the hook could be expecting us to produce an error
-                               $status->fatal( 'hookaborted' );
-                               $status->value = self::AS_HOOK_ERROR_EXPECTED;
+                       if ( !$this->runPostMergeFilters( $textbox_content, $status, $wgUser ) ) {
                                wfProfileOut( __METHOD__ );
                                return $status;
                        }
@@ -1459,7 +1508,7 @@ class EditPage {
                                                $this->isConflict = false;
                                                wfDebug( __METHOD__ . ": conflict suppressed; new section\n" );
                                        }
-                               } elseif ( $this->section == '' && Revision::userWasLastToEdit( DB_MASTER,  $this->mTitle->getArticleID(),
+                               } elseif ( $this->section == '' && Revision::userWasLastToEdit( DB_MASTER, $this->mTitle->getArticleID(),
                                                        $wgUser->getId(), $this->edittime ) ) {
                                        # Suppress edit conflict with self, except for section edits where merging is required.
                                        wfDebug( __METHOD__ . ": Suppressing edit conflict, same user.\n" );
@@ -1510,20 +1559,7 @@ class EditPage {
                                return $status;
                        }
 
-                       // Run post-section-merge edit filter
-                       $hook_args = array( $this, $content, &$this->hookError, $this->summary );
-
-                       if ( !ContentHandler::runLegacyHooks( 'EditFilterMerged', $hook_args )
-                               || !wfRunHooks( 'EditFilterMergedContent', $hook_args ) ) {
-                               # Error messages etc. could be handled within the hook...
-                               $status->fatal( 'hookaborted' );
-                               $status->value = self::AS_HOOK_ERROR;
-                               wfProfileOut( __METHOD__ );
-                               return $status;
-                       } elseif ( $this->hookError != '' ) {
-                               # ...or the hook could be expecting us to produce an error
-                               $status->fatal( 'hookaborted' );
-                               $status->value = self::AS_HOOK_ERROR_EXPECTED;
+                       if ( !$this->runPostMergeFilters( $content, $status, $wgUser ) ) {
                                wfProfileOut( __METHOD__ );
                                return $status;
                        }
@@ -1624,12 +1660,7 @@ class EditPage {
                        $doEditStatus = $this->mArticle->doEditContent( $content, $this->summary, $flags,
                                                                                                                        false, null, $this->contentFormat );
 
-               if ( $doEditStatus->isOK() ) {
-                               $result['redirect'] = $content->isRedirect();
-                       $this->updateWatchlist();
-                       wfProfileOut( __METHOD__ );
-                       return $status;
-               } else {
+               if ( !$doEditStatus->isOK() ) {
                        // Failure from doEdit()
                        // Show the edit conflict page for certain recognized errors from doEdit(),
                        // but don't show it for errors from extension hooks
@@ -1644,6 +1675,11 @@ class EditPage {
                        wfProfileOut( __METHOD__ );
                        return $doEditStatus;
                }
+
+               $result['redirect'] = $content->isRedirect();
+               $this->updateWatchlist();
+               wfProfileOut( __METHOD__ );
+               return $status;
        }
 
        /**
@@ -1672,15 +1708,14 @@ class EditPage {
        }
 
        /**
-        * @private
-        * @todo document
+        * Attempts to merge text content with base and current revisions
         *
         * @param $editText string
         *
         * @return bool
         * @deprecated since 1.21, use mergeChangesIntoContent() instead
         */
-       function mergeChangesInto( &$editText ){
+       function mergeChangesInto( &$editText ) {
                ContentHandler::deprecated( __METHOD__, "1.21" );
 
                $editContent = $this->toEditContent( $editText );
@@ -1695,14 +1730,17 @@ class EditPage {
        }
 
        /**
-        * @private
-        * @todo document
+        * Attempts to do 3-way merge of edit content with a base revision
+        * and current content, in case of edit conflict, in whichever way appropriate
+        * for the content type.
+        *
+        * @since 1.21
         *
         * @param $editContent
+        *
         * @return bool
-        * @since since 1.WD
         */
-       private function mergeChangesIntoContent( &$editContent ){
+       private function mergeChangesIntoContent( &$editContent ) {
                wfProfileIn( __METHOD__ );
 
                $db = wfGetDB( DB_MASTER );
@@ -1733,10 +1771,10 @@ class EditPage {
                        $editContent = $result;
                        wfProfileOut( __METHOD__ );
                        return true;
-               } else {
-                       wfProfileOut( __METHOD__ );
-                       return false;
                }
+
+               wfProfileOut( __METHOD__ );
+               return false;
        }
 
        /**
@@ -2850,21 +2888,24 @@ HTML
                $dbr = wfGetDB( DB_SLAVE );
                $data = $dbr->selectRow(
                        array( 'logging', 'user' ),
-                       array( 'log_type',
-                                  'log_action',
-                                  'log_timestamp',
-                                  'log_user',
-                                  'log_namespace',
-                                  'log_title',
-                                  'log_comment',
-                                  'log_params',
-                                  'log_deleted',
-                                  'user_name' ),
-                       array( 'log_namespace' => $this->mTitle->getNamespace(),
-                                  'log_title' => $this->mTitle->getDBkey(),
-                                  'log_type' => 'delete',
-                                  'log_action' => 'delete',
-                                  'user_id=log_user' ),
+                       array(
+                               'log_type',
+                               'log_action',
+                               'log_timestamp',
+                               'log_user',
+                               'log_namespace',
+                               'log_title',
+                               'log_comment',
+                               'log_params',
+                               'log_deleted',
+                               'user_name'
+                       ), array(
+                               'log_namespace' => $this->mTitle->getNamespace(),
+                               'log_title' => $this->mTitle->getDBkey(),
+                               'log_type' => 'delete',
+                               'log_action' => 'delete',
+                               'user_id=log_user'
+                       ),
                        __METHOD__,
                        array( 'LIMIT' => 1, 'ORDER BY' => 'log_timestamp DESC' )
                );
@@ -2934,7 +2975,7 @@ HTML
                        $parserOptions = $this->mArticle->makeParserOptions( $this->mArticle->getContext() );
                        $parserOptions->setEditSection( false );
                        $parserOptions->setIsPreview( true );
-                       $parserOptions->setIsSectionPreview( !is_null($this->section) && $this->section !== '' );
+                       $parserOptions->setIsSectionPreview( !is_null( $this->section ) && $this->section !== '' );
 
                        # don't parse non-wikitext pages, show message about preview
                        if ( $this->mTitle->isCssJsSubpage() || $this->mTitle->isCssOrJsPage() ) {
@@ -2957,7 +2998,7 @@ 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() . "</div>";
                                }
                        }
 
@@ -2993,7 +3034,7 @@ HTML
                                }
                        }
                } catch ( MWContentSerializationException $ex ) {
-                       $m = wfMessage('content-failed-to-parse', $this->contentModel, $this->contentFormat, $ex->getMessage() );
+                       $m = wfMessage( 'content-failed-to-parse', $this->contentModel, $this->contentFormat, $ex->getMessage() );
                        $note .= "\n\n" . $m->parse();
                        $previewHTML = '';
                }
@@ -3416,7 +3457,7 @@ HTML
                global $wgOut, $wgLang;
                $this->textbox2 = $this->textbox1;
 
-               if( is_array( $match ) ){
+               if( is_array( $match ) ) {
                        $match = $wgLang->listToText( $match );
                }
                $wgOut->prepareErrorPage( wfMessage( 'spamprotectiontitle' ) );
index f09e8f8..81d1a9b 100644 (file)
@@ -262,7 +262,7 @@ class MWException extends Exception {
                if ( defined( 'MW_API' ) ) {
                        // Unhandled API exception, we can't be sure that format printer is alive
                        header( 'MediaWiki-API-Error: internal_api_error_' . get_class( $this ) );
-                       wfHttpError(500, 'Internal Server Error', $this->getText() );
+                       wfHttpError( 500, 'Internal Server Error', $this->getText() );
                } elseif ( self::isCommandLine() ) {
                        MWExceptionHandler::printError( $this->getText() );
                } else {
@@ -329,7 +329,7 @@ class ErrorPageError extends MWException {
                $this->msg = $msg;
                $this->params = $params;
 
-               if( $msg instanceof Message ){
+               if( $msg instanceof Message ) {
                        parent::__construct( $msg );
                } else {
                        parent::__construct( wfMessage( $msg )->text() );
@@ -423,7 +423,7 @@ class PermissionsError extends ErrorPageError {
  * @ingroup Exception
  */
 class ReadOnlyError extends ErrorPageError {
-       public function __construct(){
+       public function __construct() {
                parent::__construct(
                        'readonly',
                        'readonlytext',
@@ -439,14 +439,14 @@ class ReadOnlyError extends ErrorPageError {
  * @ingroup Exception
  */
 class ThrottledError extends ErrorPageError {
-       public function __construct(){
+       public function __construct() {
                parent::__construct(
                        'actionthrottled',
                        'actionthrottledtext'
                );
        }
 
-       public function report(){
+       public function report() {
                global $wgOut;
                $wgOut->setStatusCode( 503 );
                parent::report();
@@ -460,7 +460,7 @@ class ThrottledError extends ErrorPageError {
  * @ingroup Exception
  */
 class UserBlockedError extends ErrorPageError {
-       public function __construct( Block $block ){
+       public function __construct( Block $block ) {
                global $wgLang, $wgRequest;
 
                $blocker = $block->getBlocker();
@@ -536,7 +536,7 @@ class UserNotLoggedIn extends ErrorPageError {
         */
        public function __construct(
                $reasonMsg = 'exception-nologin-text',
-               $titleMsg  = 'exception-nologin',
+               $titleMsg = 'exception-nologin',
                $params = null
        ) {
                parent::__construct( $titleMsg, $reasonMsg, $params );
@@ -560,21 +560,45 @@ class HttpError extends MWException {
         * @param $content String|Message: content of the message
         * @param $header String|Message: content of the header (\<title\> and \<h1\>)
         */
-       public function __construct( $httpCode, $content, $header = null ){
+       public function __construct( $httpCode, $content, $header = null ) {
                parent::__construct( $content );
                $this->httpCode = (int)$httpCode;
                $this->header = $header;
                $this->content = $content;
        }
 
+       /**
+        * Returns the HTTP status code supplied to the constructor.
+        *
+        * @return int
+        */
+       public function getStatusCode() {
+               return $this->httpCode;
+       }
+
+       /**
+        * Report the HTTP error.
+        * Sends the appropriate HTTP status code and outputs an
+        * HTML page with an error message.
+        */
        public function report() {
                $httpMessage = HttpStatus::getMessage( $this->httpCode );
 
-               header( "Status: {$this->httpCode} {$httpMessage}" );
+               header( "Status: {$this->httpCode} {$httpMessage}", true, $this->httpCode );
                header( 'Content-type: text/html; charset=utf-8' );
 
+               print $this->getHTML();
+       }
+
+       /**
+        * Returns HTML for reporting the HTTP error.
+        * This will be a minimal but complete HTML document.
+        *
+        * @return string HTML
+        */
+       public function getHTML() {
                if ( $this->header === null ) {
-                       $header = $httpMessage;
+                       $header = HttpStatus::getMessage( $this->httpCode );
                } elseif ( $this->header instanceof Message ) {
                        $header = $this->header->escaped();
                } else {
@@ -587,7 +611,7 @@ class HttpError extends MWException {
                        $content = htmlspecialchars( $this->content );
                }
 
-               print "<!DOCTYPE html>\n".
+               return "<!DOCTYPE html>\n".
                        "<html><head><title>$header</title></head>\n" .
                        "<body><h1>$header</h1><p>$content</p></body></html>\n";
        }
index 45a5366..8893c6c 100644 (file)
@@ -87,10 +87,10 @@ class WikiExporter {
                        $buffer = WikiExporter::BUFFER, $text = WikiExporter::TEXT ) {
                $this->db = $db;
                $this->history = $history;
-               $this->buffer  = $buffer;
-               $this->writer  = new XmlDumpWriter();
-               $this->sink    = new DumpOutput();
-               $this->text    = $text;
+               $this->buffer = $buffer;
+               $this->writer = new XmlDumpWriter();
+               $this->sink = new DumpOutput();
+               $this->text = $text;
        }
 
        /**
@@ -226,7 +226,7 @@ class WikiExporter {
                foreach ( $res as $row ) {
                        $this->author_list .= "<contributor>" .
                                "<username>" .
-                               htmlentities( $row->rev_user_text )  .
+                               htmlentities( $row->rev_user_text ) .
                                "</username>" .
                                "<id>" .
                                $row->rev_user .
@@ -330,7 +330,7 @@ class WikiExporter {
                                $join['revision'] = array( 'INNER JOIN', 'page_id=rev_page' );
                        } elseif ( $this->history & WikiExporter::CURRENT ) {
                                # Latest revision dumps...
-                               if ( $this->list_authors && $cond != '' )  { // List authors, if so desired
+                               if ( $this->list_authors && $cond != '' ) { // List authors, if so desired
                                        $this->do_list_authors( $cond );
                                }
                                $join['revision'] = array( 'INNER JOIN', 'page_id=rev_page AND page_latest=rev_id' );
@@ -427,10 +427,10 @@ class WikiExporter {
        protected function outputPageStream( $resultset ) {
                $last = null;
                foreach ( $resultset as $row ) {
-                       if ( is_null( $last ) ||
+                       if ( $last === null ||
                                $last->page_namespace != $row->page_namespace ||
                                $last->page_title     != $row->page_title ) {
-                               if ( isset( $last ) ) {
+                               if ( $last !== null ) {
                                        $output = '';
                                        if ( $this->dumpUploads ) {
                                                $output .= $this->writer->writeUploads( $last, $this->dumpUploadFileContents );
@@ -445,7 +445,7 @@ class WikiExporter {
                        $output = $this->writer->writeRevision( $row );
                        $this->sink->writeRevision( $row, $output );
                }
-               if ( isset( $last ) ) {
+               if ( $last !== null ) {
                        $output = '';
                        if ( $this->dumpUploads ) {
                                $output .= $this->writer->writeUploads( $last, $this->dumpUploadFileContents );
@@ -634,7 +634,7 @@ class XmlDumpWriter {
        function writeRevision( $row ) {
                wfProfileIn( __METHOD__ );
 
-               $out  = "    <revision>\n";
+               $out = "    <revision>\n";
                $out .= "      " . Xml::element( 'id', null, strval( $row->rev_id ) ) . "\n";
                if( isset( $row->rev_parent_id ) && $row->rev_parent_id ) {
                        $out .= "      " . Xml::element( 'parentid', null, strval( $row->rev_parent_id ) ) . "\n";
@@ -674,12 +674,12 @@ class XmlDumpWriter {
                }
 
                if ( isset( $row->rev_sha1 ) && $row->rev_sha1 && !( $row->rev_deleted & Revision::DELETED_TEXT ) ) {
-                       $out .= "      " . Xml::element('sha1', null, strval( $row->rev_sha1 ) ) . "\n";
+                       $out .= "      " . Xml::element( 'sha1', null, strval( $row->rev_sha1 ) ) . "\n";
                } else {
                        $out .= "      <sha1/>\n";
                }
 
-               if ( isset( $row->rev_content_model ) && !is_null( $row->rev_content_model )  ) {
+               if ( isset( $row->rev_content_model ) && !is_null( $row->rev_content_model ) ) {
                        $content_model = strval( $row->rev_content_model );
                } else {
                        // probably using $wgContentHandlerUseDB = false;
@@ -688,7 +688,7 @@ class XmlDumpWriter {
                        $content_model = ContentHandler::getDefaultModelFor( $title );
                }
 
-               $out .= "      " . Xml::element('model', null, strval( $content_model ) ) . "\n";
+               $out .= "      " . Xml::element( 'model', null, strval( $content_model ) ) . "\n";
 
                if ( isset( $row->rev_content_format ) && !is_null( $row->rev_content_format ) ) {
                        $content_format = strval( $row->rev_content_format );
@@ -699,7 +699,7 @@ class XmlDumpWriter {
                        $content_format = $content_handler->getDefaultFormat();
                }
 
-               $out .= "      " . Xml::element('format', null, strval( $content_format ) ) . "\n";
+               $out .= "      " . Xml::element( 'format', null, strval( $content_format ) ) . "\n";
 
                wfRunHooks( 'XmlDumpWriterWriteRevision', array( &$this, &$out, $row, $text ) );
 
@@ -720,7 +720,7 @@ class XmlDumpWriter {
        function writeLogItem( $row ) {
                wfProfileIn( __METHOD__ );
 
-               $out  = "  <logitem>\n";
+               $out = "  <logitem>\n";
                $out .= "    " . Xml::element( 'id', null, strval( $row->log_id ) ) . "\n";
 
                $out .= $this->writeTimestamp( $row->log_timestamp, "    " );
@@ -1009,7 +1009,7 @@ class DumpFileOutput extends DumpOutput {
         * @throws MWException
         */
        function renameOrException( $newname ) {
-                       if (rename( $this->filename, $newname ) ) {
+                       if ( !rename( $this->filename, $newname ) ) {
                                throw new MWException( __METHOD__ . ": rename of file {$this->filename} to $newname failed\n" );
                        }
        }
@@ -1072,7 +1072,7 @@ class DumpPipeOutput extends DumpFileOutput {
         */
        function __construct( $command, $file = null ) {
                if ( !is_null( $file ) ) {
-                       $command .=  " > " . wfEscapeShellArg( $file );
+                       $command .= " > " . wfEscapeShellArg( $file );
                }
 
                $this->startCommand( $command );
@@ -1128,7 +1128,7 @@ class DumpPipeOutput extends DumpFileOutput {
                        $this->renameOrException( $newname );
                        if ( $open ) {
                                $command = $this->command;
-                               $command .=  " > " . wfEscapeShellArg( $this->filename );
+                               $command .= " > " . wfEscapeShellArg( $this->filename );
                                $this->startCommand( $command );
                        }
                }
@@ -1361,7 +1361,7 @@ class DumpNamespaceFilter extends DumpFilter {
                        "NS_PROJECT_TALK"   => NS_PROJECT_TALK,
                        "NS_FILE"           => NS_FILE,
                        "NS_FILE_TALK"      => NS_FILE_TALK,
-                       "NS_IMAGE"          => NS_IMAGE,  // NS_IMAGE is an alias for NS_FILE
+                       "NS_IMAGE"          => NS_IMAGE, // NS_IMAGE is an alias for NS_FILE
                        "NS_IMAGE_TALK"     => NS_IMAGE_TALK,
                        "NS_MEDIAWIKI"      => NS_MEDIAWIKI,
                        "NS_MEDIAWIKI_TALK" => NS_MEDIAWIKI_TALK,
@@ -1529,7 +1529,7 @@ class DumpMultiWriter {
        function getFilenames() {
                $filenames = array();
                for ( $i = 0; $i < $this->count; $i++ ) {
-                       $filenames[] =  $this->sinks[$i]->getFilenames();
+                       $filenames[] = $this->sinks[$i]->getFilenames();
                }
                return $filenames;
        }
index 3468325..3f73376 100644 (file)
@@ -87,7 +87,7 @@ class ExternalEdit extends ContextSource {
                                                'URL' => $image->getCanonicalURL()
                                        )
                                );
-                       } else{
+                       } else {
                                $urls = array();
                        }
                } else {
index 23944a5..8cf9c84 100644 (file)
@@ -128,7 +128,7 @@ abstract class ExternalUser {
         * @param $name string
         * @return bool Success?
         */
-       protected abstract function initFromName( $name );
+       abstract protected function initFromName( $name );
 
        /**
         * Given an id, which was at some previous point in history returned by
@@ -138,7 +138,7 @@ abstract class ExternalUser {
         * @param $id string
         * @return bool Success?
         */
-       protected abstract function initFromId( $id );
+       abstract protected function initFromId( $id );
 
        /**
         * Try to magically initialize the user from cookies or similar information
@@ -280,12 +280,12 @@ abstract class ExternalUser {
         *
         * @param $id int user_id
         */
-       public final function linkToLocal( $id ) {
+       final public function linkToLocal( $id ) {
                $dbw = wfGetDB( DB_MASTER );
                $dbw->replace( 'external_user',
                        array( 'eu_local_id', 'eu_external_id' ),
                        array( 'eu_local_id' => $id,
-                                  'eu_external_id' => $this->getId() ),
+                               'eu_external_id' => $this->getId() ),
                        __METHOD__ );
        }
 
@@ -294,7 +294,7 @@ abstract class ExternalUser {
         * a local user.
         * @return Mixed User if the account is linked, Null otherwise.
         */
-       public final function getLocalUser(){
+       final public function getLocalUser() {
                $dbr = wfGetDB( DB_SLAVE );
                $row = $dbr->selectRow(
                        'external_user',
index 60f7600..efa213f 100644 (file)
@@ -114,9 +114,9 @@ class FakeTitle extends Title {
        function getParentCategories() { $this->error(); }
        function getParentCategoryTree( $children = array() ) { $this->error(); }
        function pageCond() { $this->error(); }
-       function getPreviousRevisionID( $revId, $flags=0 ) { $this->error(); }
-       function getNextRevisionID( $revId, $flags=0 ) { $this->error(); }
-       function getFirstRevision( $flags=0 ) { $this->error(); }
+       function getPreviousRevisionID( $revId, $flags = 0 ) { $this->error(); }
+       function getNextRevisionID( $revId, $flags = 0 ) { $this->error(); }
+       function getFirstRevision( $flags = 0 ) { $this->error(); }
        function isNewPage() { $this->error(); }
        function getEarliestRevTime( $flags = 0 ) { $this->error(); }
        function countRevisionsBetween( $old, $new ) { $this->error(); }
index f9dbf5b..8e000ae 100644 (file)
@@ -243,9 +243,9 @@ abstract class ChannelFeed extends FeedItem {
         */
        function contentType() {
                global $wgRequest;
-               $ctype = $wgRequest->getVal('ctype','application/xml');
-               $allowedctypes = array('application/xml','text/xml','application/rss+xml','application/atom+xml');
-               return (in_array($ctype, $allowedctypes) ? $ctype : 'application/xml');
+               $ctype = $wgRequest->getVal( 'ctype', 'application/xml' );
+               $allowedctypes = array( 'application/xml', 'text/xml', 'application/rss+xml', 'application/atom+xml' );
+               return (in_array( $ctype, $allowedctypes ) ? $ctype : 'application/xml');
        }
 
        /**
index 82c6e4a..66f6275 100644 (file)
@@ -39,7 +39,7 @@ class FeedUtils {
        public static function checkPurge( $timekey, $key ) {
                global $wgRequest, $wgUser, $messageMemc;
                $purge = $wgRequest->getVal( 'action' ) === 'purge';
-               if ( $purge && $wgUser->isAllowed('purge') ) {
+               if ( $purge && $wgUser->isAllowed( 'purge' ) ) {
                        $messageMemc->delete( $timekey );
                        $messageMemc->delete( $key );
                }
@@ -102,7 +102,7 @@ class FeedUtils {
         * @param $actiontext String: text of the action; in case of log event
         * @return String
         */
-       public static function formatDiffRow( $title, $oldid, $newid, $timestamp, $comment, $actiontext='' ) {
+       public static function formatDiffRow( $title, $oldid, $newid, $timestamp, $comment, $actiontext = '' ) {
                global $wgFeedDiffCutoff, $wgLang;
                wfProfileIn( __METHOD__ );
 
index e2fcd9c..48073f7 100644 (file)
@@ -80,13 +80,13 @@ class FileDeleteForm {
                $this->oldimage = $wgRequest->getText( 'oldimage', false );
                $token = $wgRequest->getText( 'wpEditToken' );
                # Flag to hide all contents of the archived revisions
-               $suppress = $wgRequest->getVal( 'wpSuppress' ) && $wgUser->isAllowed('suppressrevision');
+               $suppress = $wgRequest->getVal( 'wpSuppress' ) && $wgUser->isAllowed( 'suppressrevision' );
 
                if( $this->oldimage ) {
                        $this->oldfile = RepoGroup::singleton()->getLocalRepo()->newFromArchiveName( $this->title, $this->oldimage );
                }
 
-               if( !self::haveDeletableFile($this->file, $this->oldfile, $this->oldimage) ) {
+               if( !self::haveDeletableFile( $this->file, $this->oldfile, $this->oldimage ) ) {
                        $wgOut->addHTML( $this->prepareMessage( 'filedelete-nofile' ) );
                        $wgOut->addReturnTo( $this->title );
                        return;
@@ -344,7 +344,7 @@ class FileDeleteForm {
         *
         * @return bool
         */
-       public static function isValidOldSpec($oldimage) {
+       public static function isValidOldSpec( $oldimage ) {
                return strlen( $oldimage ) >= 16
                        && strpos( $oldimage, '/' ) === false
                        && strpos( $oldimage, '\\' ) === false;
@@ -360,7 +360,7 @@ class FileDeleteForm {
         * @param $oldimage File
         * @return bool
         */
-       public static function haveDeletableFile(&$file, &$oldfile, $oldimage) {
+       public static function haveDeletableFile( &$file, &$oldfile, $oldimage ) {
                return $oldimage
                        ? $oldfile && $oldfile->exists() && $oldfile->isLocal()
                        : $file && $file->exists() && $file->isLocal();
index 448bc03..89ad955 100644 (file)
@@ -53,7 +53,7 @@ class ForkController {
        const RESTART_ON_ERROR = 1;
 
        public function __construct( $numProcs, $flags = 0 ) {
-               if ( php_sapi_name() != 'cli' ) {
+               if ( PHP_SAPI != 'cli' ) {
                        throw new MWException( "ForkController cannot be used from the web." );
                }
                $this->procsToStart = $numProcs;
@@ -140,7 +140,7 @@ class ForkController {
                // Don't share DB, storage, or memcached connections
                wfGetLBFactory()->destroyInstance();
                FileBackendGroup::destroySingleton();
-               LockManagerGroup::destroySingleton();
+               LockManagerGroup::destroySingletons();
                ObjectCache::clear();
                $wgMemc = null;
        }
index 1cfe88e..598be05 100644 (file)
@@ -2,7 +2,7 @@
 /**
  * Helper class to keep track of options when mixing links and form elements.
  *
- * Copyright © 2008, Niklas Laxstiröm
+ * Copyright © 2008, Niklas Laxström
  * Copyright © 2011, Antoine Musso
  *
  * This program is free software; you can redistribute it and/or modify
@@ -178,8 +178,9 @@ class FormOptions implements ArrayAccess {
 
        /**
         * @todo Document
-        * @param $name String: option name
-        * @return null
+        * @param string $name Option name
+        * @throws MWException If option does not exist.
+        * @return mixed Value or the default value if it is null.
         */
        public function consumeValue( $name ) {
                $this->validateName( $name, true );
index d0a2042..c57018e 100644 (file)
@@ -50,7 +50,7 @@ if ( !function_exists( 'mb_substr' ) ) {
         * @codeCoverageIgnore
         * @return string
         */
-       function mb_substr( $str, $start, $count='end' ) {
+       function mb_substr( $str, $start, $count = 'end' ) {
                return Fallback::mb_substr( $str, $start, $count );
        }
 
@@ -392,7 +392,7 @@ function wfArrayToCgi( $array1, $array2 = null, $prefix = '' ) {
 
        $cgi = '';
        foreach ( $array1 as $key => $value ) {
-               if ( !is_null($value) && $value !== false ) {
+               if ( !is_null( $value ) && $value !== false ) {
                        if ( $cgi != '' ) {
                                $cgi .= '&';
                        }
@@ -1235,17 +1235,21 @@ function wfLogProfilingData() {
  *
  * @param $key String
  * @param $count Int
+ * @return void
  */
 function wfIncrStats( $key, $count = 1 ) {
        global $wgStatsMethod;
 
        $count = intval( $count );
+       if ( $count == 0 ) {
+               return;
+       }
 
        if( $wgStatsMethod == 'udp' ) {
-               global $wgUDPProfilerHost, $wgUDPProfilerPort, $wgDBname, $wgAggregateStatsID;
+               global $wgUDPProfilerHost, $wgUDPProfilerPort, $wgAggregateStatsID;
                static $socket;
 
-               $id = $wgAggregateStatsID !== false ? $wgAggregateStatsID : $wgDBname;
+               $id = $wgAggregateStatsID !== false ? $wgAggregateStatsID : wfWikiID();
 
                if ( !$socket ) {
                        $socket = socket_create( AF_INET, SOCK_DGRAM, SOL_UDP );
@@ -2437,7 +2441,7 @@ define( 'TS_ISO_8601_BASIC', 9 );
  * @param $outputtype Mixed: A timestamp in one of the supported formats, the
  *                    function will autodetect which format is supplied and act
  *                    accordingly.
- * @param $ts Mixed: the timestamp to convert or 0 for the current timestamp
+ * @param $ts Mixed: optional timestamp to convert, default 0 for the current time
  * @return Mixed: String / false The same date in the format specified in $outputtype or false
  */
 function wfTimestamp( $outputtype = TS_UNIX, $ts = 0 ) {
@@ -2445,7 +2449,7 @@ function wfTimestamp( $outputtype = TS_UNIX, $ts = 0 ) {
                $timestamp = new MWTimestamp( $ts );
                return $timestamp->getTimestamp( $outputtype );
        } catch( TimestampException $e ) {
-               wfDebug("wfTimestamp() fed bogus time value: TYPE=$outputtype; VALUE=$ts\n");
+               wfDebug( "wfTimestamp() fed bogus time value: TYPE=$outputtype; VALUE=$ts\n" );
                return false;
        }
 }
@@ -2677,8 +2681,7 @@ function wfDl( $extension, $fileName = null ) {
        }
 
        $canDl = false;
-       $sapi = php_sapi_name();
-       if( $sapi == 'cli' || $sapi == 'cgi' || $sapi == 'embed' ) {
+       if( PHP_SAPI == 'cli' || PHP_SAPI == 'cgi' || PHP_SAPI == 'embed' ) {
                $canDl = ( function_exists( 'dl' ) && is_callable( 'dl' )
                && wfIniGetBool( 'enable_dl' ) && !wfIniGetBool( 'safe_mode' ) );
        }
@@ -2767,12 +2770,13 @@ function wfEscapeShellArg( ) {
  *                 (non-zero is usually failure)
  * @param $environ Array optional environment variables which should be
  *                 added to the executed command environment.
- * @param $limits Array optional array with limits(filesize, memory, time)
+ * @param $limits Array optional array with limits(filesize, memory, time, walltime)
  *                 this overwrites the global wgShellMax* limits.
  * @return string collected stdout as a string (trailing newlines stripped)
  */
 function wfShellExec( $cmd, &$retval = null, $environ = array(), $limits = array() ) {
-       global $IP, $wgMaxShellMemory, $wgMaxShellFileSize, $wgMaxShellTime;
+       global $IP, $wgMaxShellMemory, $wgMaxShellFileSize, $wgMaxShellTime,
+               $wgMaxShellWallClockTime;
 
        static $disabled;
        if ( is_null( $disabled ) ) {
@@ -2819,15 +2823,20 @@ function wfShellExec( $cmd, &$retval = null, $environ = array(), $limits = array
        $cmd = $envcmd . $cmd;
 
        if ( php_uname( 's' ) == 'Linux' ) {
-               $time = intval ( isset($limits['time']) ? $limits['time'] : $wgMaxShellTime );
-               $mem = intval ( isset($limits['memory']) ? $limits['memory'] : $wgMaxShellMemory );
-               $filesize = intval ( isset($limits['filesize']) ? $limits['filesize'] : $wgMaxShellFileSize );
-
-               if ( $time > 0 && $mem > 0 ) {
-                       $script = "$IP/bin/ulimit4.sh";
-                       if ( is_executable( $script ) ) {
-                               $cmd = '/bin/bash ' . escapeshellarg( $script ) . " $time $mem $filesize " . escapeshellarg( $cmd );
-                       }
+               $time = intval ( isset( $limits['time'] ) ? $limits['time'] : $wgMaxShellTime );
+               if ( isset( $limits['walltime'] ) ) {
+                       $wallTime = intval( $limits['walltime'] );
+               } elseif ( isset( $limits['time'] ) ) {
+                       $wallTime = $time;
+               } else {
+                       $wallTime = intval( $wgMaxShellWallClockTime );
+               }
+               $mem = intval ( isset( $limits['memory'] ) ? $limits['memory'] : $wgMaxShellMemory );
+               $filesize = intval ( isset( $limits['filesize'] ) ? $limits['filesize'] : $wgMaxShellFileSize );
+
+               if ( $time > 0 || $mem > 0 || $filesize > 0 || $wallTime > 0 ) {
+                       $cmd = '/bin/bash ' . escapeshellarg( "$IP/bin/ulimit5.sh" ) .
+                               " $time $mem $filesize $wallTime " . escapeshellarg( $cmd );
                }
        }
        wfDebug( "wfShellExec: $cmd\n" );
@@ -2936,7 +2945,7 @@ function wfMerge( $old, $mine, $yours, &$result ) {
        fclose( $yourtextFile );
 
        # Check for a conflict
-       $cmd = $wgDiff3 . ' -a --overlap-only ' .
+       $cmd = wfEscapeShellArg( $wgDiff3 ) . ' -a --overlap-only ' .
                wfEscapeShellArg( $mytextName ) . ' ' .
                wfEscapeShellArg( $oldtextName ) . ' ' .
                wfEscapeShellArg( $yourtextName );
@@ -2950,7 +2959,7 @@ function wfMerge( $old, $mine, $yours, &$result ) {
        pclose( $handle );
 
        # Merge differences
-       $cmd = $wgDiff3 . ' -a -e --merge ' .
+       $cmd = wfEscapeShellArg( $wgDiff3 ) . ' -a -e --merge ' .
                wfEscapeShellArg( $mytextName, $oldtextName, $yourtextName );
        $handle = popen( $cmd, 'r' );
        $result = '';
@@ -3179,84 +3188,97 @@ function wfDoUpdates( $commit = '' ) {
  * Supports base 2 through 36; digit values 10-36 are represented
  * as lowercase letters a-z. Input is case-insensitive.
  *
- * @param $input String: of digits
- * @param $sourceBase Integer: 2-36
- * @param $destBase Integer: 2-36
- * @param $pad Integer: 1 or greater
- * @param $lowercase Boolean
- * @return String or false on invalid input
- */
-function wfBaseConvert( $input, $sourceBase, $destBase, $pad = 1, $lowercase = true ) {
-       $input = strval( $input );
-       if( $sourceBase < 2 ||
+ * @param string $input Input number
+ * @param int $sourceBase Base of the input number
+ * @param int $destBase Desired base of the output
+ * @param int $pad Minimum number of digits in the output (pad with zeroes)
+ * @param bool $lowercase Whether to output in lowercase or uppercase
+ * @param string $engine Either "gmp", "bcmath", or "php"
+ * @return string|bool The output number as a string, or false on error
+ */
+function wfBaseConvert( $input, $sourceBase, $destBase, $pad = 1, $lowercase = true, $engine = 'auto' ) {
+       if(
+               $sourceBase < 2 ||
                $sourceBase > 36 ||
                $destBase < 2 ||
                $destBase > 36 ||
-               $pad < 1 ||
-               $sourceBase != intval( $sourceBase ) ||
-               $destBase != intval( $destBase ) ||
-               $pad != intval( $pad ) ||
-               !is_string( $input ) ||
-               $input == '' ) {
+               $sourceBase != (int) $sourceBase ||
+               $destBase != (int) $destBase ||
+               $pad != (int) $pad ||
+               !preg_match( "/^[" . substr( '0123456789abcdefghijklmnopqrstuvwxyz', 0, $sourceBase ) . "]+$/i", $input )
+       ) {
                return false;
        }
-       $digitChars = ( $lowercase ) ? '0123456789abcdefghijklmnopqrstuvwxyz' : '0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZ';
-       $inDigits = array();
-       $outChars = '';
 
-       // Decode and validate input string
-       $input = strtolower( $input );
-       for( $i = 0; $i < strlen( $input ); $i++ ) {
-               $n = strpos( $digitChars, $input[$i] );
-               if( $n === false || $n > $sourceBase ) {
-                       return false;
+       static $baseChars = array (
+               10 => 'a', 11 => 'b', 12 => 'c', 13 => 'd', 14 => 'e', 15 => 'f',
+               16 => 'g', 17 => 'h', 18 => 'i', 19 => 'j', 20 => 'k', 21 => 'l',
+               22 => 'm', 23 => 'n', 24 => 'o', 25 => 'p', 26 => 'q', 27 => 'r',
+               28 => 's', 29 => 't', 30 => 'u', 31 => 'v', 32 => 'w', 33 => 'x',
+               34 => 'y', 35 => 'z',
+
+               '0' => 0,  '1' => 1,  '2' => 2,  '3' => 3,  '4' => 4,  '5' => 5,
+               '6' => 6,  '7' => 7,  '8' => 8,  '9' => 9,  'a' => 10, 'b' => 11,
+               'c' => 12, 'd' => 13, 'e' => 14, 'f' => 15, 'g' => 16, 'h' => 17,
+               'i' => 18, 'j' => 19, 'k' => 20, 'l' => 21, 'm' => 22, 'n' => 23,
+               'o' => 24, 'p' => 25, 'q' => 26, 'r' => 27, 's' => 28, 't' => 29,
+               'u' => 30, 'v' => 31, 'w' => 32, 'x' => 33, 'y' => 34, 'z' => 35
+       );
+
+       if( extension_loaded( 'gmp' ) && ( $engine == 'auto' || $engine == 'gmp' ) ) {
+               $result = gmp_strval( gmp_init( $input, $sourceBase ), $destBase );
+       } elseif( extension_loaded( 'bcmath' ) && ( $engine == 'auto' || $engine == 'bcmath' ) ) {
+               $decimal = '0';
+               foreach( str_split( strtolower( $input ) ) as $char ) {
+                       $decimal = bcmul( $decimal, $sourceBase );
+                       $decimal = bcadd( $decimal, $baseChars[$char] );
                }
-               $inDigits[] = $n;
-       }
 
-       // Iterate over the input, modulo-ing out an output digit
-       // at a time until input is gone.
-       while( count( $inDigits ) ) {
-               $work = 0;
-               $workDigits = array();
+               for( $result = ''; bccomp( $decimal, 0 ); $decimal = bcdiv( $decimal, $destBase, 0 ) ) {
+                       $result .= $baseChars[bcmod( $decimal, $destBase )];
+               }
 
-               // Long division...
-               foreach( $inDigits as $digit ) {
-                       $work *= $sourceBase;
-                       $work += $digit;
+               $result = strrev( $result );
+       } else {
+               $inDigits = array();
+               foreach( str_split( strtolower( $input ) ) as $char ) {
+                       $inDigits[] = $baseChars[$char];
+               }
 
-                       if( $work < $destBase ) {
-                               // Gonna need to pull another digit.
-                               if( count( $workDigits ) ) {
-                                       // Avoid zero-padding; this lets us find
-                                       // the end of the input very easily when
-                                       // length drops to zero.
-                                       $workDigits[] = 0;
-                               }
-                       } else {
-                               // Finally! Actual division!
-                               $workDigits[] = intval( $work / $destBase );
+               // Iterate over the input, modulo-ing out an output digit
+               // at a time until input is gone.
+               $result = '';
+               while( $inDigits ) {
+                       $work = 0;
+                       $workDigits = array();
 
-                               // Isn't it annoying that most programming languages
-                               // don't have a single divide-and-remainder operator,
-                               // even though the CPU implements it that way?
-                               $work = $work % $destBase;
+                       // Long division...
+                       foreach( $inDigits as $digit ) {
+                               $work *= $sourceBase;
+                               $work += $digit;
+
+                               if( $workDigits || $work >= $destBase ) {
+                                       $workDigits[] = (int) ( $work / $destBase );
+                               }
+                               $work %= $destBase;
                        }
-               }
 
-               // All that division leaves us with a remainder,
-               // which is conveniently our next output digit.
-               $outChars .= $digitChars[$work];
+                       // All that division leaves us with a remainder,
+                       // which is conveniently our next output digit.
+                       $result .= $baseChars[$work];
+
+                       // And we continue!
+                       $inDigits = $workDigits;
+               }
 
-               // And we continue!
-               $inDigits = $workDigits;
+               $result = strrev( $result );
        }
 
-       while( strlen( $outChars ) < $pad ) {
-               $outChars .= '0';
+       if( !$lowercase ) {
+               $result = strtoupper( $result );
        }
 
-       return strrev( $outChars );
+       return str_pad( $result, $pad, '0', STR_PAD_LEFT );
 }
 
 /**
index ef24b62..86eb38d 100644 (file)
@@ -96,6 +96,7 @@ class HTMLForm extends ContextSource {
 
        // A mapping of 'type' inputs onto standard HTMLFormField subclasses
        static $typeMappings = array(
+               'api' => 'HTMLApiField',
                'text' => 'HTMLTextField',
                'textarea' => 'HTMLTextAreaField',
                'select' => 'HTMLSelectField',
@@ -638,9 +639,9 @@ class HTMLForm extends ContextSource {
                        : 'application/x-www-form-urlencoded';
                # Attributes
                $attribs = array(
-                       'action'  => $this->mAction === false ? $this->getTitle()->getFullURL() : $this->mAction,
-                       'method'  => $this->mMethod,
-                       'class'   => 'visualClear',
+                       'action' => $this->mAction === false ? $this->getTitle()->getFullURL() : $this->mAction,
+                       'method' => $this->mMethod,
+                       'class' => 'visualClear',
                        'enctype' => $encType,
                );
                if ( !empty( $this->mId ) ) {
@@ -711,8 +712,8 @@ class HTMLForm extends ContextSource {
 
                foreach ( $this->mButtons as $button ) {
                        $attrs = array(
-                               'type'  => 'submit',
-                               'name'  => $button['name'],
+                               'type' => 'submit',
+                               'name' => $button['name'],
                                'value' => $button['value']
                        );
 
@@ -2429,3 +2430,21 @@ class HTMLEditTools extends HTMLFormField {
                return $msg;
        }
 }
+
+class HTMLApiField extends HTMLFormField {
+       public function getTableRow( $value ) {
+               return '';
+       }
+
+       public function getDiv( $value ) {
+               return $this->getTableRow( $value );
+       }
+
+       public function getRaw( $value ) {
+               return $this->getTableRow( $value );
+       }
+
+       public function getInputHTML( $value ) {
+               return '';
+       }
+}
index 05c27fe..5974173 100644 (file)
@@ -232,8 +232,6 @@ class HistoryBlobStub {
         * @return string
         */
        function getText() {
-               $fname = 'HistoryBlobStub::getText';
-
                if( isset( self::$blobCache[$this->mOldId] ) ) {
                        $obj = self::$blobCache[$this->mOldId];
                } else {
@@ -244,13 +242,12 @@ class HistoryBlobStub {
                        }
                        $flags = explode( ',', $row->old_flags );
                        if( in_array( 'external', $flags ) ) {
-                               $url=$row->old_text;
+                               $url = $row->old_text;
                                $parts = explode( '://', $url, 2 );
                                if ( !isset( $parts[1] ) || $parts[1] == '' ) {
-                                       wfProfileOut( $fname );
                                        return false;
                                }
-                               $row->old_text = ExternalStore::fetchFromUrl($url);
+                               $row->old_text = ExternalStore::fetchFromUrl( $url );
 
                        }
                        if( !in_array( 'object', $flags ) ) {
@@ -398,7 +395,7 @@ class DiffHistoryBlob implements HistoryBlob {
         */
        function addItem( $text ) {
                if ( $this->mFrozen ) {
-                       throw new MWException( __METHOD__.": Cannot add more items after sleep/wakeup" );
+                       throw new MWException( __METHOD__ . ": Cannot add more items after sleep/wakeup" );
                }
 
                $this->mItems[] = $text;
@@ -433,7 +430,7 @@ class DiffHistoryBlob implements HistoryBlob {
         * @throws MWException
         */
        function compress() {
-               if ( !function_exists( 'xdiff_string_rabdiff' ) ){
+               if ( !function_exists( 'xdiff_string_rabdiff' ) ) {
                        throw new MWException( "Need xdiff 1.5+ support to write DiffHistoryBlob\n" );
                }
                if ( isset( $this->mDiffs ) ) {
@@ -538,11 +535,11 @@ class DiffHistoryBlob implements HistoryBlob {
                # Check the checksum if hash/mhash is available
                $ofp = $this->xdiffAdler32( $base );
                if ( $ofp !== false && $ofp !== substr( $diff, 0, 4 ) ) {
-                       wfDebug( __METHOD__. ": incorrect base checksum\n" );
+                       wfDebug( __METHOD__ . ": incorrect base checksum\n" );
                        return false;
                }
                if ( $header['csize'] != strlen( $base ) ) {
-                       wfDebug( __METHOD__. ": incorrect base length\n" );
+                       wfDebug( __METHOD__ . ": incorrect base length\n" );
                        return false;
                }
 
@@ -571,7 +568,7 @@ class DiffHistoryBlob implements HistoryBlob {
                                $out .= substr( $base, $x['off'], $x['csize'] );
                                break;
                        default:
-                               wfDebug( __METHOD__.": invalid op\n" );
+                               wfDebug( __METHOD__ . ": invalid op\n" );
                                return false;
                        }
                }
index 9e201a2..a29e5fe 100644 (file)
@@ -150,6 +150,7 @@ class Hooks {
                        return true;
                }
 
+               wfProfileIn( 'hook: ' . $event );
                $hooks = self::getHandlers( $event );
 
                foreach ( $hooks as $hook ) {
@@ -288,10 +289,12 @@ class Hooks {
                                        );
                                }
                        } elseif ( !$retval ) {
+                               wfProfileOut( 'hook: ' . $event );
                                return false;
                        }
                }
 
+               wfProfileOut( 'hook: ' . $event );
                return true;
        }
 
index 14456e4..cc9b54b 100644 (file)
@@ -465,8 +465,7 @@ class Html {
                        $key = strtolower( $key );
 
                        // Here we're blacklisting some HTML5-only attributes...
-                       if ( !$wgHtml5 && in_array( $key, self::$HTMLFiveOnlyAttribs )
-                        ) {
+                       if ( !$wgHtml5 && in_array( $key, self::$HTMLFiveOnlyAttribs ) ) {
                                continue;
                        }
 
@@ -738,7 +737,7 @@ class Html {
                        }
                }
 
-               if (substr($value, 0, 1) == "\n") {
+               if ( substr( $value, 0, 1 ) == "\n" ) {
                        // Workaround for bug 12130: browsers eat the initial newline
                        // assuming that it's just for show, but they do keep the later
                        // newlines, which we may want to preserve during editing.
@@ -930,7 +929,7 @@ class Html {
                        $icon = $wgStylePath.'/common/images/'.$icon;
                }
 
-               $s  = Html::openElement( 'div', array( 'class' => "mw-infobox $class") );
+               $s = Html::openElement( 'div', array( 'class' => "mw-infobox $class") );
 
                $s .= Html::openElement( 'div', array( 'class' => 'mw-infobox-left' ) ).
                                Html::element( 'img',
index ab27a74..9e9f0da 100644 (file)
@@ -244,7 +244,7 @@ class MWHttpRequest {
                }
 
                $members = array( "postData", "proxy", "noProxy", "sslVerifyHost", "caInfo",
-                                 "method", "followRedirects", "maxRedirects", "sslVerifyCert", "callback" );
+                               "method", "followRedirects", "maxRedirects", "sslVerifyCert", "callback" );
 
                foreach ( $members as $o ) {
                        if ( isset( $options[$o] ) ) {
@@ -284,7 +284,7 @@ class MWHttpRequest {
                        Http::$httpEngine = function_exists( 'curl_init' ) ? 'curl' : 'php';
                } elseif ( Http::$httpEngine == 'curl' && !function_exists( 'curl_init' ) ) {
                        throw new MWException( __METHOD__ . ': curl (http://php.net/curl) is not installed, but' .
-                                                                  ' Http::$httpEngine is set to "curl"' );
+                               ' Http::$httpEngine is set to "curl"' );
                }
 
                switch( Http::$httpEngine ) {
@@ -328,10 +328,13 @@ class MWHttpRequest {
        public function proxySetup() {
                global $wgHTTPProxy;
 
-               if ( $this->proxy || !$this->noProxy ) {
+               // If there is an explicit proxy set and proxies are not disabled, then use it
+               if ( $this->proxy && !$this->noProxy ) {
                        return;
                }
 
+               // Otherwise, fallback to $wgHTTPProxy/http_proxy (when set) if this is not a machine
+               // local URL and proxies are not disabled
                if ( Http::isLocalURL( $this->url ) || $this->noProxy ) {
                        $this->proxy = '';
                } elseif ( $wgHTTPProxy ) {
@@ -643,12 +646,12 @@ class MWHttpRequest {
                        $locations = $headers[ 'location' ];
                        $domain = '';
                        $foundRelativeURI = false;
-                       $countLocations = count($locations);
+                       $countLocations = count( $locations );
 
                        for ( $i = $countLocations - 1; $i >= 0; $i-- ) {
                                $url = parse_url( $locations[ $i ] );
 
-                               if ( isset($url[ 'host' ]) ) {
+                               if ( isset( $url['host'] ) ) {
                                        $domain = $url[ 'scheme' ] . '://' . $url[ 'host' ];
                                        break;  //found correct URI (with host)
                                } else {
@@ -827,7 +830,7 @@ class PhpHttpRequest extends MWHttpRequest {
                parent::execute();
 
                if ( is_array( $this->postData ) ) {
-                       $this->postData = wfArrayToCGI( $this->postData );
+                       $this->postData = wfArrayToCgi( $this->postData );
                }
 
                if ( $this->parsedUrl['scheme'] != 'http' &&
index ecf4f89..2a3e8e8 100644 (file)
@@ -156,7 +156,7 @@ class ImagePage extends Article {
                        $pageLang = $this->getTitle()->getPageViewLanguage();
                        $out->addHTML( Xml::openElement( 'div', array( 'id' => 'mw-imagepage-content',
                                'lang' => $pageLang->getHtmlCode(), 'dir' => $pageLang->getDir(),
-                               'class' => 'mw-content-'.$pageLang->getDir() ) ) );
+                               'class' => 'mw-content-' . $pageLang->getDir() ) ) );
 
                        parent::view();
 
@@ -327,7 +327,8 @@ class ImagePage extends Article {
                        $height_orig = $this->displayImg->getHeight( $page );
                        $height = $height_orig;
 
-                       $longDesc = wfMessage( 'parentheses', $this->displayImg->getLongDesc() )->text();
+                       $filename = wfEscapeWikiText( $this->displayImg->getName() );
+                       $linktext = $filename;
 
                        wfRunHooks( 'ImageOpenShowImageInlineBefore', array( &$this, &$out ) );
 
@@ -351,7 +352,7 @@ class ImagePage extends Article {
                                                # Note that $height <= $maxHeight now, but might not be identical
                                                # because of rounding.
                                        }
-                                       $msgbig = wfMessage( 'show-big-image' )->escaped();
+                                       $linktext = wfMessage( 'show-big-image' )->escaped();
                                        if ( $this->displayImg->getRepo()->canTransformVia404() ) {
                                                $thumbSizes = $wgImageLimits;
                                        } else {
@@ -381,7 +382,7 @@ class ImagePage extends Article {
                                                        params( count( $otherSizes ) )->parse()
                                                );
                                        }
-                               } elseif ( $width == 0 && $height == 0 ){
+                               } elseif ( $width == 0 && $height == 0 ) {
                                        # Some sort of audio file that doesn't have dimensions
                                        # Don't output a no hi res message for such a file
                                        $msgsmall = '';
@@ -397,7 +398,6 @@ class ImagePage extends Article {
                                $params['height'] = $height;
                                $thumbnail = $this->displayImg->transform( $params );
 
-                               $showLink = true;
                                $anchorclose = Html::rawElement( 'div', array( 'class' => 'mw-filepage-resolutioninfo' ), $msgsmall );
 
                                $isMulti = $this->displayImg->isMultipage() && $this->displayImg->pageCount() > 1;
@@ -471,48 +471,39 @@ class ImagePage extends Article {
                                                "<hr />$thumb1\n$thumb2<br style=\"clear: both\" /></div></td></tr></table>"
                                        );
                                }
-                       } else {
+                       } elseif ( $this->displayImg->isSafeFile() ) {
                                # if direct link is allowed but it's not a renderable image, show an icon.
-                               if ( $this->displayImg->isSafeFile() ) {
-                                       $icon = $this->displayImg->iconThumb();
-
-                                       $out->addHTML( '<div class="fullImageLink" id="file">' .
-                                               $icon->toHtml( array( 'file-link' => true ) ) .
-                                               "</div>\n" );
-                               }
+                               $icon = $this->displayImg->iconThumb();
 
-                               $showLink = true;
+                               $out->addHTML( '<div class="fullImageLink" id="file">' .
+                                       $icon->toHtml( array( 'file-link' => true ) ) .
+                                       "</div>\n" );
                        }
 
-                       if ( $showLink ) {
-                               $filename = wfEscapeWikiText( $this->displayImg->getName() );
-                               $linktext = $filename;
-                               if ( isset( $msgbig ) ) {
-                                       $linktext = wfEscapeWikiText( $msgbig );
-                               }
-                               $medialink = "[[Media:$filename|$linktext]]";
-
-                               if ( !$this->displayImg->isSafeFile() ) {
-                                       $warning = wfMessage( 'mediawarning' )->plain();
-                                       // dirmark is needed here to separate the file name, which
-                                       // most likely ends in Latin characters, from the description,
-                                       // which may begin with the file type. In RTL environment
-                                       // this will get messy.
-                                       // The dirmark, however, must not be immediately adjacent
-                                       // to the filename, because it can get copied with it.
-                                       // See bug 25277.
-                                       $out->addWikiText( <<<EOT
+                       $longDesc = wfMessage( 'parentheses', $this->displayImg->getLongDesc() )->text();
+
+                       $medialink = "[[Media:$filename|$linktext]]";
+
+                       if ( !$this->displayImg->isSafeFile() ) {
+                               $warning = wfMessage( 'mediawarning' )->plain();
+                               // dirmark is needed here to separate the file name, which
+                               // most likely ends in Latin characters, from the description,
+                               // which may begin with the file type. In RTL environment
+                               // this will get messy.
+                               // The dirmark, however, must not be immediately adjacent
+                               // to the filename, because it can get copied with it.
+                               // See bug 25277.
+                               $out->addWikiText( <<<EOT
 <div class="fullMedia"><span class="dangerousLink">{$medialink}</span> $dirmark<span class="fileInfo">$longDesc</span></div>
 <div class="mediaWarning">$warning</div>
 EOT
-                                               );
-                               } else {
-                                       $out->addWikiText( <<<EOT
+                                       );
+                       } else {
+                               $out->addWikiText( <<<EOT
 <div class="fullMedia">{$medialink} {$dirmark}<span class="fileInfo">$longDesc</span>
 </div>
 EOT
-                                       );
-                               }
+                               );
                        }
 
                        // Add cannot animate thumbnail warning
@@ -547,7 +538,7 @@ EOT
                                        array( 'delete', 'move' ),
                                        $this->getTitle()->getPrefixedText(),
                                        '',
-                                       array(  'lim' => 10,
+                                       array( 'lim' => 10,
                                                'conds' => array( "log_action != 'revision'" ),
                                                'showIfEmpty' => false,
                                                'msgKey' => array( 'moveddeleted-notice' )
@@ -614,7 +605,7 @@ EOT
 
                /* Add canonical to head if there is no local page for this shared file */
                if( $descUrl && $this->mPage->getID() == 0 ) {
-                       $out->addLink( array( 'rel' => 'canonical', 'href' => $descUrl ) );
+                       $out->setCanonicalUrl( $descUrl );
                }
 
                $wrap = "<div class=\"sharedUploadNotice\">\n$1\n</div>\n";
@@ -639,7 +630,7 @@ EOT
                return $uploadTitle->getFullURL( array(
                        'wpDestFile' => $this->mPage->getFile()->getName(),
                        'wpForReUpload' => 1
-                ) );
+               ) );
        }
 
        /**
@@ -796,9 +787,14 @@ EOT
 
                        $link = Linker::linkKnown( Title::makeTitle( $element->page_namespace, $element->page_title ) );
                        if ( !isset( $redirects[$element->page_title] ) ) {
+                               # No redirects
                                $liContents = $link;
+                       } elseif ( count( $redirects[$element->page_title] ) === 0 ) {
+                               # Redirect without usages
+                               $liContents = wfMessage( 'linkstoimage-redirect' )->rawParams( $link, '' )->parse();
                        } else {
-                               $ul = "<ul class='mw-imagepage-redirectstofile'>\n";
+                               # Redirect with usages
+                               $li = '';
                                foreach ( $redirects[$element->page_title] as $row ) {
                                        $currentCount++;
                                        if ( $currentCount > $limit ) {
@@ -806,13 +802,18 @@ EOT
                                        }
 
                                        $link2 = Linker::linkKnown( Title::makeTitle( $row->page_namespace, $row->page_title ) );
-                                       $ul .= Html::rawElement(
+                                       $li .= Html::rawElement(
                                                'li',
                                                array( 'class' => 'mw-imagepage-linkstoimage-ns' . $element->page_namespace ),
                                                $link2
                                                ) . "\n";
                                }
-                               $ul .= '</ul>';
+
+                               $ul = Html::rawElement(
+                                       'ul',
+                                       array( 'class' => 'mw-imagepage-redirectstofile'),
+                                       $li
+                                       ) . "\n";
                                $liContents = wfMessage( 'linkstoimage-redirect' )->rawParams(
                                        $link, $ul )->parse();
                        }
@@ -1043,9 +1044,9 @@ class ImageHistoryList extends ContextSource {
                                } else {
                                        list( $ts, ) = explode( '!', $img, 2 );
                                        $query = array(
-                                               'type'   => 'oldimage',
+                                               'type' => 'oldimage',
                                                'target' => $this->title->getPrefixedText(),
-                                               'ids'    => $ts,
+                                               'ids' => $ts,
                                        );
                                        $del = Linker::revDeleteLink( $query,
                                                $file->isDeleted( File::DELETED_RESTRICTED ), $canHide );
@@ -1165,7 +1166,7 @@ class ImageHistoryList extends ContextSource {
        protected function getThumbForLine( $file ) {
                $lang = $this->getLanguage();
                $user = $this->getUser();
-               if ( $file->allowInlineDisplay() && $file->userCan( File::DELETED_FILE,$user )
+               if ( $file->allowInlineDisplay() && $file->userCan( File::DELETED_FILE, $user )
                        && !$file->isDeleted( File::DELETED_FILE ) )
                {
                        $params = array(
@@ -1225,7 +1226,7 @@ class ImageHistoryPseudoPager extends ReverseChronologicalPager {
         * @param ImagePage $imagePage
         */
        function __construct( $imagePage ) {
-               parent::__construct();
+               parent::__construct( $imagePage->getContext() );
                $this->mImagePage = $imagePage;
                $this->mTitle = clone ( $imagePage->getTitle() );
                $this->mTitle->setFragment( '#filehistory' );
index bd9ce25..cc642e4 100644 (file)
@@ -400,7 +400,7 @@ class WikiImporter {
        /** Left in for debugging */
        private function dumpElement() {
                static $lookup = null;
-               if (!$lookup) {
+               if ( !$lookup ) {
                        $xmlReaderConstants = array(
                                "NONE",
                                "ELEMENT",
@@ -473,7 +473,7 @@ class WikiImporter {
                                $skip = true;
                        }
 
-                       if ($skip) {
+                       if ( $skip ) {
                                $keepReading = $this->reader->next();
                                $skip = false;
                                $this->debug( "Skip" );
@@ -897,7 +897,7 @@ class UploadSourceAdapter {
         * @return bool
         */
        function stream_open( $path, $mode, $options, &$opened_path ) {
-               $url = parse_url($path);
+               $url = parse_url( $path );
                $id = $url['host'];
 
                if ( !isset( self::$sourceRegistrations[$id] ) ) {
@@ -918,22 +918,22 @@ class UploadSourceAdapter {
                $leave = false;
 
                while ( !$leave && !$this->mSource->atEnd() &&
-                               strlen($this->mBuffer) < $count ) {
+                               strlen( $this->mBuffer ) < $count ) {
                        $read = $this->mSource->readChunk();
 
-                       if ( !strlen($read) ) {
+                       if ( !strlen( $read ) ) {
                                $leave = true;
                        }
 
                        $this->mBuffer .= $read;
                }
 
-               if ( strlen($this->mBuffer) ) {
+               if ( strlen( $this->mBuffer ) ) {
                        $return = substr( $this->mBuffer, 0, $count );
                        $this->mBuffer = substr( $this->mBuffer, $count );
                }
 
-               $this->mPosition += strlen($return);
+               $this->mPosition += strlen( $return );
 
                return $return;
        }
@@ -1390,7 +1390,7 @@ class WikiRevision {
                                array( 'rev_page' => $pageId,
                                        'rev_timestamp' => $dbw->timestamp( $this->timestamp ),
                                        'rev_user_text' => $userText,
-                                       'rev_comment'   => $this->getComment() ),
+                                       'rev_comment' => $this->getComment() ),
                                __METHOD__
                        );
                        if( $prior ) {
@@ -1405,15 +1405,15 @@ class WikiRevision {
                # @todo FIXME: Use original rev_id optionally (better for backups)
                # Insert the row
                $revision = new Revision( array(
-                       'title'      => $this->title,
-                       'page'       => $pageId,
-                       'content_model'  => $this->getModel(),
+                       'title' => $this->title,
+                       'page' => $pageId,
+                       'content_model' => $this->getModel(),
                        'content_format' => $this->getFormat(),
-                       'text'       => $this->getContent()->serialize( $this->getFormat() ), //XXX: just set 'content' => $this->getContent()?
-                       'comment'    => $this->getComment(),
-                       'user'       => $userId,
-                       'user_text'  => $userText,
-                       'timestamp'  => $this->timestamp,
+                       'text' => $this->getContent()->serialize( $this->getFormat() ), //XXX: just set 'content' => $this->getContent()?
+                       'comment' => $this->getComment(),
+                       'user' => $userId,
+                       'user_text' => $userText,
+                       'timestamp' => $this->timestamp,
                        'minor_edit' => $this->minor,
                        ) );
                $revision->insertOn( $dbw );
@@ -1442,13 +1442,13 @@ class WikiRevision {
                // @todo FIXME: Use original log ID (better for backups)
                $prior = $dbw->selectField( 'logging', '1',
                        array( 'log_type' => $this->getType(),
-                               'log_action'    => $this->getAction(),
+                               'log_action' => $this->getAction(),
                                'log_timestamp' => $dbw->timestamp( $this->timestamp ),
                                'log_namespace' => $this->getTitle()->getNamespace(),
-                               'log_title'     => $this->getTitle()->getDBkey(),
-                               'log_comment'   => $this->getComment(),
+                               'log_title' => $this->getTitle()->getDBkey(),
+                               'log_comment' => $this->getComment(),
                                #'log_user_text' => $this->user_text,
-                               'log_params'    => $this->params ),
+                               'log_params' => $this->params ),
                        __METHOD__
                );
                // @todo FIXME: This could fail slightly for multiple matches :P
@@ -1650,7 +1650,7 @@ class ImportStreamSource {
                        return Status::newFatal( 'importnofile' );
                }
                if( !empty( $upload['error'] ) ) {
-                       switch($upload['error']){
+                       switch( $upload['error'] ) {
                                case 1: # The uploaded file exceeds the upload_max_filesize directive in php.ini.
                                        return Status::newFatal( 'importuploaderrorsize' );
                                case 2: # The uploaded file exceeds the MAX_FILE_SIZE directive that was specified in the HTML form.
index c2f6b1e..28379c7 100644 (file)
@@ -89,7 +89,7 @@ class LinkFilter {
         * @param $prot        String: protocol
         * @return Array to be passed to DatabaseBase::buildLike() or false on error
         */
-        public static function makeLikeArray( $filterEntry , $prot = 'http://' ) {
+       public static function makeLikeArray( $filterEntry, $prot = 'http://' ) {
                $db = wfGetDB( DB_MASTER );
                if ( substr( $filterEntry, 0, 2 ) == '*.' ) {
                        $subdomains = true;
@@ -118,7 +118,7 @@ class LinkFilter {
                }
                // Reverse the labels in the hostname, convert to lower case
                // For emails reverse domainpart only
-               if ( $prot == 'mailto:' && strpos($host, '@') ) {
+               if ( $prot == 'mailto:' && strpos( $host, '@' ) ) {
                        // complete email adress
                        $mailparts = explode( '@', $host );
                        $domainpart = strtolower( implode( '.', array_reverse( explode( '.', $mailparts[1] ) ) ) );
index 408538b..4555398 100644 (file)
@@ -33,7 +33,7 @@ class Linker {
         * Flags for userToolLinks()
         */
        const TOOL_LINKS_NOBLOCK = 1;
-       const TOOL_LINKS_EMAIL   = 2;
+       const TOOL_LINKS_EMAIL = 2;
 
        /**
         * Get the appropriate HTML attributes to add to the "a" element of an ex-
@@ -600,9 +600,9 @@ class Linker {
                $prefix = $postfix = '';
 
                if ( 'center' == $fp['align'] ) {
-                       $prefix  = '<div class="center">';
+                       $prefix = '<div class="center">';
                        $postfix = '</div>';
-                       $fp['align']   = 'none';
+                       $fp['align'] = 'none';
                }
                if ( $file && !isset( $hp['width'] ) ) {
                        if ( isset( $hp['height'] ) && $file->isVectorized() ) {
@@ -724,7 +724,7 @@ class Linker {
                                $extLinkAttrs = $parser->getExternalLinkAttribs( $frameParams['link-url'] );
                                foreach ( $extLinkAttrs as $name => $val ) {
                                        // Currently could include 'rel' and 'target'
-                                       $mtoParams['parser-extlink-'.$name] = $val;
+                                       $mtoParams['parser-extlink-' . $name] = $val;
                                }
                        }
                } elseif ( isset( $frameParams['link-title'] ) && $frameParams['link-title'] !== '' ) {
@@ -751,7 +751,7 @@ class Linker {
         * @return mixed
         */
        public static function makeThumbLinkObj( Title $title, $file, $label = '', $alt,
-               $align = 'right', $params = array(), $framed = false , $manualthumb = "" )
+               $align = 'right', $params = array(), $framed = false, $manualthumb = "" )
        {
                $frameParams = array(
                        'alt' => $alt,
@@ -947,10 +947,10 @@ class Linker {
                        return '<a href="' . htmlspecialchars( $href ) . '" class="new" title="' .
                                htmlspecialchars( $title->getPrefixedText(), ENT_QUOTES ) . '">' .
                                $encLabel . '</a>';
-               } else {
-                       wfProfileOut( __METHOD__ );
-                       return self::linkKnown( $title, $encLabel, array(), wfCgiToArray( $query ) );
                }
+
+               wfProfileOut( __METHOD__ );
+               return self::linkKnown( $title, $encLabel, array(), wfCgiToArray( $query ) );
        }
 
        /**
@@ -1028,7 +1028,7 @@ class Linker {
                        $key = strtolower( $name );
                }
 
-               return self::linkKnown( SpecialPage::getTitleFor( $name ) , wfMessage( $key )->text() );
+               return self::linkKnown( SpecialPage::getTitleFor( $name ), wfMessage( $key )->text() );
        }
 
        /**
@@ -1038,9 +1038,11 @@ class Linker {
         * @param $escape Boolean: do we escape the link text?
         * @param $linktype String: type of external link. Gets added to the classes
         * @param $attribs Array of extra attributes to <a>
+        * @param $title Title|null Title object used for title specific link attributes
         * @return string
         */
-       public static function makeExternalLink( $url, $text, $escape = true, $linktype = '', $attribs = array() ) {
+       public static function makeExternalLink( $url, $text, $escape = true, $linktype = '', $attribs = array(), $title = null ) {
+               global $wgTitle;
                $class = "external";
                if ( $linktype ) {
                        $class .= " $linktype";
@@ -1053,6 +1055,11 @@ class Linker {
                if ( $escape ) {
                        $text = htmlspecialchars( $text );
                }
+
+               if ( !$title ) {
+                       $title = $wgTitle;
+               }
+               $attribs['rel'] = Parser::getExternalLinkRel( $url, $title );
                $link = '';
                $success = wfRunHooks( 'LinkerMakeExternalLink',
                        array( &$url, &$text, &$link, &$attribs, $linktype ) );
@@ -1241,7 +1248,7 @@ class Linker {
        /**
         * This function is called by all recent changes variants, by the page history,
         * and by the user contributions list. It is responsible for formatting edit
-        * comments. It escapes any HTML in the comment, but adds some CSS to format
+        * summaries. It escapes any HTML in the summary, but adds some CSS to format
         * auto-generated comments (from section editing) and formats [[wikilinks]].
         *
         * @author Erik Moeller <moeller@scireview.de>
@@ -1278,6 +1285,7 @@ class Linker {
        static $autocommentLocal;
 
        /**
+        * Converts autogenerated comments in edit summaries into section links.
         * The pattern for autogen comments is / * foo * /, which makes for
         * some nasty regex.
         * We look for all comments, match any text before and after the comment,
@@ -1303,6 +1311,7 @@ class Linker {
        }
 
        /**
+        * Helper function for Linker::formatAutocomments
         * @param $match
         * @return string
         */
@@ -1663,11 +1672,10 @@ class Linker {
                $lang = wfGetLangObj( $lang );
                $title = wfMessage( 'toc' )->inLanguage( $lang )->escaped();
 
-               return
-                  '<table id="toc" class="toc"><tr><td>'
-                . '<div id="toctitle"><h2>' . $title . "</h2></div>\n"
-                . $toc
-                . "</ul>\n</td></tr></table>\n";
+               return '<table id="toc" class="toc"><tr><td>'
+                       . '<div id="toctitle"><h2>' . $title . "</h2></div>\n"
+                       . $toc
+                       . "</ul>\n</td></tr></table>\n";
        }
 
        /**
@@ -1754,19 +1762,101 @@ class Linker {
         * changes, so this allows sysops to combat a busy vandal without bothering
         * other users.
         *
+        * If the option verify is set this function will return the link only in case the
+        * revision can be reverted. Please note that due to performance limitations
+        * it might be assumed that a user isn't the only contributor of a page while
+        * (s)he is, which will lead to useless rollback links. Furthermore this wont
+        * work if $wgShowRollbackEditCount is disabled, so this can only function
+        * as an additional check.
+        *
+        * If the option noBrackets is set the rollback link wont be enclosed in []
+        *
         * @param $rev Revision object
         * @param $context IContextSource context to use or null for the main context.
+        * @param $options array
         * @return string
         */
-       public static function generateRollback( $rev, IContextSource $context = null ) {
+       public static function generateRollback( $rev, IContextSource $context = null, $options = array( 'verify' ) ) {
                if ( $context === null ) {
                        $context = RequestContext::getMain();
                }
+               $editCount = false;
+               if ( in_array( 'verify', $options ) ) {
+                       $editCount = self::getRollbackEditCount( $rev, true );
+                       if ( $editCount === false ) {
+                               return '';
+                       }
+               }
+
+               $inner = self::buildRollbackLink( $rev, $context, $editCount );
 
-               return '<span class="mw-rollback-link">'
-                       . $context->msg( 'brackets' )->rawParams(
-                               self::buildRollbackLink( $rev, $context ) )->plain()
-                       . '</span>';
+               if ( !in_array( 'noBrackets', $options ) ) {
+                       $inner = $context->msg( 'brackets' )->rawParams( $inner )->plain();
+               }
+
+               return '<span class="mw-rollback-link">' . $inner . '</span>';
+       }
+
+       /**
+        * This function will return the number of revisions which a rollback
+        * would revert and, if $verify is set it will verify that a revision
+        * can be reverted (that the user isn't the only contributor and the
+        * revision we might rollback to isn't deleted). These checks can only
+        * function as an additional check as this function only checks against
+        * the last $wgShowRollbackEditCount edits.
+        *
+        * Returns null if $wgShowRollbackEditCount is disabled or false if $verify
+        * is set and the user is the only contributor of the page.
+        *
+        * @param $rev Revision object
+        * @param $verify Bool Try to verfiy that this revision can really be rolled back
+        * @return integer|bool|null
+        */
+       public static function getRollbackEditCount( $rev, $verify ) {
+               global $wgShowRollbackEditCount;
+               if ( !is_int( $wgShowRollbackEditCount ) || !$wgShowRollbackEditCount > 0 ) {
+                       // Nothing has happened, indicate this by returning 'null'
+                       return null;
+               }
+
+               $dbr = wfGetDB( DB_SLAVE );
+
+               // Up to the value of $wgShowRollbackEditCount revisions are counted
+               $res = $dbr->select(
+                       'revision',
+                       array( 'rev_user_text', 'rev_deleted' ),
+                       // $rev->getPage() returns null sometimes
+                       array( 'rev_page' => $rev->getTitle()->getArticleID() ),
+                       __METHOD__,
+                       array(
+                               'USE INDEX' => array( 'revision' => 'page_timestamp' ),
+                               'ORDER BY' => 'rev_timestamp DESC',
+                               'LIMIT' => $wgShowRollbackEditCount + 1
+                       )
+               );
+
+               $editCount = 0;
+               $moreRevs = false;
+               foreach ( $res as $row ) {
+                       if ( $rev->getRawUserText() != $row->rev_user_text ) {
+                               if ( $verify && ( $row->rev_deleted & Revision::DELETED_TEXT || $row->rev_deleted & Revision::DELETED_USER ) ) {
+                                       // If the user or the text of the revision we might rollback to is deleted in some way we can't rollback
+                                       // Similar to the sanity checks in WikiPage::commitRollback
+                                       return false;
+                               }
+                               $moreRevs = true;
+                               break;
+                       }
+                       $editCount++;
+               }
+
+               if ( $verify && $editCount <= $wgShowRollbackEditCount && !$moreRevs ) {
+                       // We didn't find at least $wgShowRollbackEditCount revisions made by the current user
+                       // and there weren't any other revisions. That means that the current user is the only
+                       // editor, so we can't rollback
+                       return false;
+               }
+               return $editCount;
        }
 
        /**
@@ -1774,9 +1864,10 @@ class Linker {
         *
         * @param $rev Revision object
         * @param $context IContextSource context to use or null for the main context.
+        * @param $editCount integer Number of edits that would be reverted
         * @return String: HTML fragment
         */
-       public static function buildRollbackLink( $rev, IContextSource $context = null ) {
+       public static function buildRollbackLink( $rev, IContextSource $context = null, $editCount = false ) {
                global $wgShowRollbackEditCount, $wgMiserMode;
 
                // To config which pages are effected by miser mode
@@ -1808,25 +1899,8 @@ class Linker {
                }
 
                if( !$disableRollbackEditCount && is_int( $wgShowRollbackEditCount ) && $wgShowRollbackEditCount > 0 ) {
-                       $dbr = wfGetDB( DB_SLAVE );
-
-                       // Up to the value of $wgShowRollbackEditCount revisions are counted
-                       $res = $dbr->select( 'revision',
-                               array( 'rev_id', 'rev_user_text' ),
-                               // $rev->getPage() returns null sometimes
-                               array( 'rev_page' => $rev->getTitle()->getArticleID() ),
-                               __METHOD__,
-                               array(  'USE INDEX' => 'page_timestamp',
-                                       'ORDER BY' => 'rev_timestamp DESC',
-                                       'LIMIT' => $wgShowRollbackEditCount + 1 )
-                       );
-
-                       $editCount = 0;
-                       while( $row = $dbr->fetchObject( $res ) ) {
-                               if( $rev->getUserText() != $row->rev_user_text ) {
-                                       break;
-                               }
-                               $editCount++;
+                       if ( !is_numeric( $editCount ) ) {
+                               $editCount = self::getRollbackEditCount( $rev, false );
                        }
 
                        if( $editCount > $wgShowRollbackEditCount ) {
@@ -1856,13 +1930,19 @@ class Linker {
        /**
         * Returns HTML for the "templates used on this page" list.
         *
+        * Make an HTML list of templates, and then add a "More..." link at
+        * the bottom. If $more is null, do not add a "More..." link. If $more
+        * is a Title, make a link to that title and use it. If $more is a string,
+        * directly paste it in as the link.
+        *
         * @param $templates Array of templates from Article::getUsedTemplate
         * or similar
-        * @param $preview Boolean: whether this is for a preview
-        * @param $section Boolean: whether this is for a section edit
+        * @param bool $preview Whether this is for a preview
+        * @param bool $section Whether this is for a section edit
+        * @param Title|string|null $more A link for "More..." of the templates
         * @return String: HTML output
         */
-       public static function formatTemplates( $templates, $preview = false, $section = false ) {
+       public static function formatTemplates( $templates, $preview = false, $section = false, $more = null ) {
                wfProfileIn( __METHOD__ );
 
                $outText = '';
@@ -1919,9 +1999,16 @@ class Linker {
                                        . wfMessage( 'word-separator' )->escaped()
                                        . $protected . '</li>';
                        }
+
+                       if ( $more instanceof Title ) {
+                               $outText .= '<li>' . self::link( $more, wfMessage( 'moredotdotdot' ) ) . '</li>';
+                       } elseif ( $more ) {
+                               $outText .= "<li>$more</li>";
+                       }
+
                        $outText .= '</ul>';
                }
-               wfProfileOut( __METHOD__  );
+               wfProfileOut( __METHOD__ );
                return $outText;
        }
 
@@ -1947,7 +2034,7 @@ class Linker {
                        }
                        $outText .= '</ul>';
                }
-               wfProfileOut( __METHOD__  );
+               wfProfileOut( __METHOD__ );
                return $outText;
        }
 
@@ -1987,7 +2074,7 @@ class Linker {
                        # Compatibility: formerly some tooltips had [alt-.] hardcoded
                        $tooltip = preg_replace( "/ ?\[alt-.\]$/", '', $tooltip );
                        # Message equal to '-' means suppress it.
-                       if (  $tooltip == '-' ) {
+                       if ( $tooltip == '-' ) {
                                $tooltip = false;
                        }
                }
@@ -2069,17 +2156,17 @@ class Linker {
                                // RevDelete links using revision ID are stable across
                                // page deletion and undeletion; use when possible.
                                $query = array(
-                                       'type'   => 'revision',
+                                       'type' => 'revision',
                                        'target' => $title->getPrefixedDBkey(),
-                                       'ids'    => $rev->getId()
+                                       'ids' => $rev->getId()
                                );
                        } else {
                                // Older deleted entries didn't save a revision ID.
                                // We have to refer to these by timestamp, ick!
                                $query = array(
-                                       'type'   => 'archive',
+                                       'type' => 'archive',
                                        'target' => $title->getPrefixedDBkey(),
-                                       'ids'    => $rev->getTimestamp()
+                                       'ids' => $rev->getTimestamp()
                                );
                        }
                        return Linker::revDeleteLink( $query,
@@ -2199,7 +2286,7 @@ class Linker {
         * @return string the a-element
         */
        static function makeKnownLinkObj(
-               $title, $text = '', $query = '', $trail = '', $prefix = '' , $aprops = '', $style = ''
+               $title, $text = '', $query = '', $trail = '', $prefix = '', $aprops = '', $style = ''
        ) {
                wfDeprecated( __METHOD__, '1.21' );
 
index 7ddf863..83883b5 100644 (file)
@@ -213,14 +213,14 @@ class LinksUpdate extends SqlDataUpdate {
                $existing = $this->getExistingImages();
                $imageUpdates = array_diff_key( $existing, $this->mImages ) + array_diff_key( $this->mImages, $existing );
 
-               $this->dumbTableUpdate( 'pagelinks',     $this->getLinkInsertions(),     'pl_from' );
-               $this->dumbTableUpdate( 'imagelinks',    $this->getImageInsertions(),    'il_from' );
+               $this->dumbTableUpdate( 'pagelinks', $this->getLinkInsertions(), 'pl_from' );
+               $this->dumbTableUpdate( 'imagelinks', $this->getImageInsertions(), 'il_from' );
                $this->dumbTableUpdate( 'categorylinks', $this->getCategoryInsertions(), 'cl_from' );
                $this->dumbTableUpdate( 'templatelinks', $this->getTemplateInsertions(), 'tl_from' );
                $this->dumbTableUpdate( 'externallinks', $this->getExternalInsertions(), 'el_from' );
-               $this->dumbTableUpdate( 'langlinks',     $this->getInterlangInsertions(),'ll_from' );
-               $this->dumbTableUpdate( 'iwlinks',       $this->getInterwikiInsertions(),'iwl_from' );
-               $this->dumbTableUpdate( 'page_props',    $this->getPropertyInsertions(), 'pp_page' );
+               $this->dumbTableUpdate( 'langlinks', $this->getInterlangInsertions(), 'll_from' );
+               $this->dumbTableUpdate( 'iwlinks', $this->getInterwikiInsertions(), 'iwl_from' );
+               $this->dumbTableUpdate( 'page_props', $this->getPropertyInsertions(), 'pp_page' );
 
                # Update the cache of all the category pages and image description
                # pages which were changed, and fix the category table count
@@ -291,7 +291,7 @@ class LinksUpdate extends SqlDataUpdate {
                $this->mDb->delete( $table, array( $fromField => $this->mId ), __METHOD__ );
                if ( count( $insertions ) ) {
                        # The link array was constructed without FOR UPDATE, so there may
-                       # be collisions.  This may cause minor link table inconsistencies,
+                       # be collisions. This may cause minor link table inconsistencies,
                        # which is better than crippling the site with lock contention.
                        $this->mDb->insert( $table, $insertions, __METHOD__, array( 'IGNORE' ) );
                }
@@ -342,6 +342,7 @@ class LinksUpdate extends SqlDataUpdate {
                }
                if ( count( $insertions ) ) {
                        $this->mDb->insert( $table, $insertions, __METHOD__, 'IGNORE' );
+                       wfRunHooks( 'LinksUpdateAfterInsert', array( $this, $table, $insertions ) );
                }
        }
 
@@ -359,9 +360,9 @@ class LinksUpdate extends SqlDataUpdate {
                                : $dbkeys;
                        foreach ( $diffs as $dbk => $id ) {
                                $arr[] = array(
-                                       'pl_from'      => $this->mId,
+                                       'pl_from' => $this->mId,
                                        'pl_namespace' => $ns,
-                                       'pl_title'     => $dbk
+                                       'pl_title' => $dbk
                                );
                        }
                }
@@ -379,9 +380,9 @@ class LinksUpdate extends SqlDataUpdate {
                        $diffs = isset( $existing[$ns] ) ? array_diff_key( $dbkeys, $existing[$ns] ) : $dbkeys;
                        foreach ( $diffs as $dbk => $id ) {
                                $arr[] = array(
-                                       'tl_from'      => $this->mId,
+                                       'tl_from' => $this->mId,
                                        'tl_namespace' => $ns,
-                                       'tl_title'     => $dbk
+                                       'tl_title' => $dbk
                                );
                        }
                }
@@ -400,7 +401,7 @@ class LinksUpdate extends SqlDataUpdate {
                foreach( $diffs as $iname => $dummy ) {
                        $arr[] = array(
                                'il_from' => $this->mId,
-                               'il_to'   => $iname
+                               'il_to' => $iname
                        );
                }
                return $arr;
@@ -417,9 +418,9 @@ class LinksUpdate extends SqlDataUpdate {
                foreach( $diffs as $url => $dummy ) {
                        foreach( wfMakeUrlIndexes( $url ) as $index ) {
                                $arr[] = array(
-                                       'el_from'   => $this->mId,
-                                       'el_to'     => $url,
-                                       'el_index'  => $index,
+                                       'el_from' => $this->mId,
+                                       'el_to' => $url,
+                                       'el_index' => $index,
                                );
                        }
                }
@@ -458,8 +459,8 @@ class LinksUpdate extends SqlDataUpdate {
                                $this->mTitle->getCategorySortkey( $prefix ) );
 
                        $arr[] = array(
-                               'cl_from'    => $this->mId,
-                               'cl_to'      => $name,
+                               'cl_from' => $this->mId,
+                               'cl_to' => $name,
                                'cl_sortkey' => $sortkey,
                                'cl_timestamp' => $this->mDb->timestamp(),
                                'cl_sortkey_prefix' => $prefix,
@@ -482,8 +483,8 @@ class LinksUpdate extends SqlDataUpdate {
                $arr = array();
                foreach( $diffs as $lang => $title ) {
                        $arr[] = array(
-                               'll_from'  => $this->mId,
-                               'll_lang'  => $lang,
+                               'll_from' => $this->mId,
+                               'll_lang' => $lang,
                                'll_title' => $title
                        );
                }
@@ -500,9 +501,9 @@ class LinksUpdate extends SqlDataUpdate {
                $arr = array();
                foreach ( $diffs as $name => $value ) {
                        $arr[] = array(
-                               'pp_page'      => $this->mId,
-                               'pp_propname'  => $name,
-                               'pp_value'     => $value,
+                               'pp_page' => $this->mId,
+                               'pp_propname' => $name,
+                               'pp_value' => $value,
                        );
                }
                return $arr;
@@ -520,9 +521,9 @@ class LinksUpdate extends SqlDataUpdate {
                        $diffs = isset( $existing[$prefix] ) ? array_diff_key( $dbkeys, $existing[$prefix] ) : $dbkeys;
                        foreach ( $diffs as $dbk => $id ) {
                                $arr[] = array(
-                                       'iwl_from'   => $this->mId,
+                                       'iwl_from' => $this->mId,
                                        'iwl_prefix' => $prefix,
-                                       'iwl_title'  => $dbk
+                                       'iwl_title' => $dbk
                                );
                        }
                }
index 6d2e1dc..257a46d 100644 (file)
@@ -217,7 +217,7 @@ class MagicWord {
 
        /**#@-*/
 
-       function __construct($id = 0, $syn = array(), $cs = false) {
+       function __construct( $id = 0, $syn = array(), $cs = false ) {
                $this->mId = $id;
                $this->mSynonyms = (array)$syn;
                $this->mCaseSensitive = $cs;
@@ -282,6 +282,7 @@ class MagicWord {
         */
        static function getDoubleUnderscoreArray() {
                if ( is_null( self::$mDoubleUnderscoreArray ) ) {
+                       wfRunHooks( 'GetDoubleUnderscoreIDs', array( &self::$mDoubleUnderscoreIDs ) );
                        self::$mDoubleUnderscoreArray = new MagicWordArray( self::$mDoubleUnderscoreIDs );
                }
                return self::$mDoubleUnderscoreArray;
@@ -366,7 +367,7 @@ class MagicWord {
         * @return string
         */
        function getRegex() {
-               if ($this->mRegex == '' ) {
+               if ( $this->mRegex == '' ) {
                        $this->initRegex();
                }
                return $this->mRegex;
@@ -392,7 +393,7 @@ class MagicWord {
         * @return string
         */
        function getRegexStart() {
-               if ($this->mRegex == '' ) {
+               if ( $this->mRegex == '' ) {
                        $this->initRegex();
                }
                return $this->mRegexStart;
@@ -404,7 +405,7 @@ class MagicWord {
         * @return string
         */
        function getBaseRegex() {
-               if ($this->mRegex == '') {
+               if ( $this->mRegex == '' ) {
                        $this->initRegex();
                }
                return $this->mBaseRegex;
@@ -453,9 +454,9 @@ class MagicWord {
                        # blank elements and re-sort the indices.
                        # See also bug 6526
 
-                       $matches = array_values(array_filter($matches));
+                       $matches = array_values( array_filter( $matches ) );
 
-                       if ( count($matches) == 1 ) {
+                       if ( count( $matches ) == 1 ) {
                                return $matches[0];
                        } else {
                                return $matches[1];
@@ -577,7 +578,7 @@ class MagicWord {
         *
         * @return bool
         */
-       function getWasModified(){
+       function getWasModified() {
                return $this->mModified;
        }
 
@@ -594,10 +595,10 @@ class MagicWord {
         *
         * @return bool
         */
-       function replaceMultiple( $magicarr, $subject, &$result ){
+       function replaceMultiple( $magicarr, $subject, &$result ) {
                $search = array();
                $replace = array();
-               foreach( $magicarr as $id => $replacement ){
+               foreach( $magicarr as $id => $replacement ) {
                        $mw = MagicWord::get( $id );
                        $search[] = $mw->getRegex();
                        $replace[] = $replacement;
@@ -617,7 +618,7 @@ class MagicWord {
        function addToArray( &$array, $value ) {
                global $wgContLang;
                foreach ( $this->mSynonyms as $syn ) {
-                       $array[$wgContLang->lc($syn)] = $value;
+                       $array[$wgContLang->lc( $syn )] = $value;
                }
        }
 
@@ -811,7 +812,7 @@ class MagicWordArray {
                        return array( $magicName, $paramValue );
                }
                // This shouldn't happen either
-               throw new MWException( __METHOD__.': parameter not found' );
+               throw new MWException( __METHOD__ . ': parameter not found' );
        }
 
        /**
index 976f144..8d8cdee 100644 (file)
@@ -252,9 +252,9 @@ class Message {
        public static function newFallbackSequence( /*...*/ ) {
                $keys = func_get_args();
                if ( func_num_args() == 1 ) {
-                       if ( is_array($keys[0]) ) {
+                       if ( is_array( $keys[0] ) ) {
                                // Allow an array to be passed as the first argument instead
-                               $keys = array_values($keys[0]);
+                               $keys = array_values( $keys[0] );
                        } else {
                                // Optimize a single string to not need special fallback handling
                                $keys = $keys[0];
@@ -416,7 +416,7 @@ class Message {
         */
        public function content() {
                if ( !$this->content ) {
-                       $this->content = new MessageContent( $this->key );
+                       $this->content = new MessageContent( $this );
                }
 
                return $this->content;
@@ -431,7 +431,7 @@ class Message {
                $string = $this->fetchMessage();
 
                if ( $string === false ) {
-                       $key =  htmlspecialchars( is_array( $this->key ) ? $this->key[0] : $this->key );
+                       $key = htmlspecialchars( is_array( $this->key ) ? $this->key[0] : $this->key );
                        if ( $this->format === 'plain' ) {
                                return '<' . $key . '>';
                        }
@@ -457,11 +457,11 @@ class Message {
                        if( preg_match( '/^<p>(.*)\n?<\/p>\n?$/sU', $string, $m ) ) {
                                $string = $m[1];
                        }
-               } elseif( $this->format === 'block-parse' ){
+               } elseif( $this->format === 'block-parse' ) {
                        $string = $this->parseText( $string );
-               } elseif( $this->format === 'text' ){
+               } elseif( $this->format === 'text' ) {
                        $string = $this->transformText( $string );
-               } elseif( $this->format === 'escaped' ){
+               } elseif( $this->format === 'escaped' ) {
                        $string = $this->transformText( $string );
                        $string = htmlspecialchars( $string, ENT_QUOTES, 'UTF-8', false );
                }
@@ -474,13 +474,30 @@ class Message {
 
        /**
         * Magic method implementation of the above (for PHP >= 5.2.0), so we can do, eg:
-        *     $foo = Message::get($key);
+        *     $foo = Message::get( $key );
         *     $string = "<abbr>$foo</abbr>";
         * @since 1.18
         * @return String
         */
        public function __toString() {
-               return $this->toString();
+               // PHP doesn't allow __toString to throw exceptions and will
+               // trigger a fatal error if it does. So, catch any exceptions.
+
+               try {
+                       return $this->toString();
+               } catch ( Exception $ex ) {
+                       try {
+                               trigger_error( "Exception caught in " . __METHOD__ . " (message " . $this->key . "): "
+                                       . $ex, E_USER_WARNING );
+                       } catch ( Exception $ex ) {
+                               // Doh! Cause a fatal error after all?
+                       }
+
+                       if ( $this->format === 'plain' ) {
+                               return '<' . $this->key . '>';
+                       }
+                       return '&lt;' . $this->key . '&gt;';
+               }
        }
 
        /**
index 09561bd..6322be7 100644 (file)
@@ -80,42 +80,45 @@ class MessageBlobStore {
                        return false;
                }
 
-               $dbw = wfGetDB( DB_MASTER );
-               $success = $dbw->insert( 'msg_resource', array(
-                               'mr_lang' => $lang,
-                               'mr_resource' => $name,
-                               'mr_blob' => $blob,
-                               'mr_timestamp' => $dbw->timestamp()
-                       ),
-                       __METHOD__,
-                       array( 'IGNORE' )
-               );
-
-               if ( $success ) {
-                       if ( $dbw->affectedRows() == 0 ) {
-                               // Blob was already present, fetch it
-                               $blob = $dbw->selectField( 'msg_resource', 'mr_blob', array(
-                                               'mr_resource' => $name,
-                                               'mr_lang' => $lang,
-                                       ),
-                                       __METHOD__
-                               );
-                       } else {
-                               // Update msg_resource_links
-                               $rows = array();
+               try {
+                       $dbw = wfGetDB( DB_MASTER );
+                       $success = $dbw->insert( 'msg_resource', array(
+                                       'mr_lang' => $lang,
+                                       'mr_resource' => $name,
+                                       'mr_blob' => $blob,
+                                       'mr_timestamp' => $dbw->timestamp()
+                               ),
+                               __METHOD__,
+                               array( 'IGNORE' )
+                       );
 
-                               foreach ( $module->getMessages() as $key ) {
-                                       $rows[] = array(
-                                               'mrl_resource' => $name,
-                                               'mrl_message' => $key
+                       if ( $success ) {
+                               if ( $dbw->affectedRows() == 0 ) {
+                                       // Blob was already present, fetch it
+                                       $blob = $dbw->selectField( 'msg_resource', 'mr_blob', array(
+                                                       'mr_resource' => $name,
+                                                       'mr_lang' => $lang,
+                                               ),
+                                               __METHOD__
+                                       );
+                               } else {
+                                       // Update msg_resource_links
+                                       $rows = array();
+
+                                       foreach ( $module->getMessages() as $key ) {
+                                               $rows[] = array(
+                                                       'mrl_resource' => $name,
+                                                       'mrl_message' => $key
+                                               );
+                                       }
+                                       $dbw->insert( 'msg_resource_links', $rows,
+                                               __METHOD__, array( 'IGNORE' )
                                        );
                                }
-                               $dbw->insert( 'msg_resource_links', $rows,
-                                       __METHOD__, array( 'IGNORE' )
-                               );
                        }
+               } catch ( Exception $e ) {
+                       wfDebug( __METHOD__ . " failed to update DB: $e\n" );
                }
-
                return $blob;
        }
 
@@ -141,48 +144,51 @@ class MessageBlobStore {
                $oldBlob = $row->mr_blob;
                $newBlob = self::generateMessageBlob( $module, $lang );
 
-               $newRow = array(
-                       'mr_resource' => $name,
-                       'mr_lang' => $lang,
-                       'mr_blob' => $newBlob,
-                       'mr_timestamp' => $dbw->timestamp()
-               );
+               try {
+                       $newRow = array(
+                               'mr_resource' => $name,
+                               'mr_lang' => $lang,
+                               'mr_blob' => $newBlob,
+                               'mr_timestamp' => $dbw->timestamp()
+                       );
 
-               $dbw->replace( 'msg_resource',
-                       array( array( 'mr_resource', 'mr_lang' ) ),
-                       $newRow, __METHOD__
-               );
+                       $dbw->replace( 'msg_resource',
+                               array( array( 'mr_resource', 'mr_lang' ) ),
+                               $newRow, __METHOD__
+                       );
 
-               // Figure out which messages were added and removed
-               $oldMessages = array_keys( FormatJson::decode( $oldBlob, true ) );
-               $newMessages = array_keys( FormatJson::decode( $newBlob, true ) );
-               $added = array_diff( $newMessages, $oldMessages );
-               $removed = array_diff( $oldMessages, $newMessages );
+                       // Figure out which messages were added and removed
+                       $oldMessages = array_keys( FormatJson::decode( $oldBlob, true ) );
+                       $newMessages = array_keys( FormatJson::decode( $newBlob, true ) );
+                       $added = array_diff( $newMessages, $oldMessages );
+                       $removed = array_diff( $oldMessages, $newMessages );
 
-               // Delete removed messages, insert added ones
-               if ( $removed ) {
-                       $dbw->delete( 'msg_resource_links', array(
-                                       'mrl_resource' => $name,
-                                       'mrl_message' => $removed
-                               ), __METHOD__
-                       );
-               }
+                       // Delete removed messages, insert added ones
+                       if ( $removed ) {
+                               $dbw->delete( 'msg_resource_links', array(
+                                               'mrl_resource' => $name,
+                                               'mrl_message' => $removed
+                                       ), __METHOD__
+                               );
+                       }
 
-               $newLinksRows = array();
+                       $newLinksRows = array();
 
-               foreach ( $added as $message ) {
-                       $newLinksRows[] = array(
-                               'mrl_resource' => $name,
-                               'mrl_message' => $message
-                       );
-               }
+                       foreach ( $added as $message ) {
+                               $newLinksRows[] = array(
+                                       'mrl_resource' => $name,
+                                       'mrl_message' => $message
+                               );
+                       }
 
-               if ( $newLinksRows ) {
-                       $dbw->insert( 'msg_resource_links', $newLinksRows, __METHOD__,
-                                array( 'IGNORE' ) // just in case
-                       );
+                       if ( $newLinksRows ) {
+                               $dbw->insert( 'msg_resource_links', $newLinksRows, __METHOD__,
+                                       array( 'IGNORE' ) // just in case
+                               );
+                       }
+               } catch ( Exception $e ) {
+                       wfDebug( __METHOD__ . " failed to update DB: $e\n" );
                }
-
                return $newBlob;
        }
 
@@ -192,50 +198,58 @@ class MessageBlobStore {
         * @param $key String: message key
         */
        public static function updateMessage( $key ) {
-               $dbw = wfGetDB( DB_MASTER );
-
-               // Keep running until the updates queue is empty.
-               // Due to update conflicts, the queue might not be emptied
-               // in one iteration.
-               $updates = null;
-               do {
-                       $updates = self::getUpdatesForMessage( $key, $updates );
-
-                       foreach ( $updates as $k => $update ) {
-                               // Update the row on the condition that it
-                               // didn't change since we fetched it by putting
-                               // the timestamp in the WHERE clause.
-                               $success = $dbw->update( 'msg_resource',
-                                       array(
-                                               'mr_blob' => $update['newBlob'],
-                                               'mr_timestamp' => $dbw->timestamp() ),
-                                       array(
-                                               'mr_resource' => $update['resource'],
-                                               'mr_lang' => $update['lang'],
-                                               'mr_timestamp' => $update['timestamp'] ),
-                                       __METHOD__
-                               );
+               try {
+                       $dbw = wfGetDB( DB_MASTER );
+
+                       // Keep running until the updates queue is empty.
+                       // Due to update conflicts, the queue might not be emptied
+                       // in one iteration.
+                       $updates = null;
+                       do {
+                               $updates = self::getUpdatesForMessage( $key, $updates );
+
+                               foreach ( $updates as $k => $update ) {
+                                       // Update the row on the condition that it
+                                       // didn't change since we fetched it by putting
+                                       // the timestamp in the WHERE clause.
+                                       $success = $dbw->update( 'msg_resource',
+                                               array(
+                                                       'mr_blob' => $update['newBlob'],
+                                                       'mr_timestamp' => $dbw->timestamp() ),
+                                               array(
+                                                       'mr_resource' => $update['resource'],
+                                                       'mr_lang' => $update['lang'],
+                                                       'mr_timestamp' => $update['timestamp'] ),
+                                               __METHOD__
+                                       );
 
-                               // Only requeue conflicted updates.
-                               // If update() returned false, don't retry, for
-                               // fear of getting into an infinite loop
-                               if ( !( $success && $dbw->affectedRows() == 0 ) ) {
-                                       // Not conflicted
-                                       unset( $updates[$k] );
+                                       // Only requeue conflicted updates.
+                                       // If update() returned false, don't retry, for
+                                       // fear of getting into an infinite loop
+                                       if ( !( $success && $dbw->affectedRows() == 0 ) ) {
+                                               // Not conflicted
+                                               unset( $updates[$k] );
+                                       }
                                }
-                       }
-               } while ( count( $updates ) );
+                       } while ( count( $updates ) );
 
-               // No need to update msg_resource_links because we didn't add
-               // or remove any messages, we just changed their contents.
+                       // No need to update msg_resource_links because we didn't add
+                       // or remove any messages, we just changed their contents.
+               } catch ( Exception $e ) {
+                       wfDebug( __METHOD__ . " failed to update DB: $e\n" );
+               }
        }
 
        public static function clear() {
                // TODO: Give this some more thought
                // TODO: Is TRUNCATE better?
-               $dbw = wfGetDB( DB_MASTER );
-               $dbw->delete( 'msg_resource', '*', __METHOD__ );
-               $dbw->delete( 'msg_resource_links', '*', __METHOD__ );
+               try {
+                       $dbw = wfGetDB( DB_MASTER );
+                       $dbw->delete( 'msg_resource', '*', __METHOD__ );
+                       $dbw->delete( 'msg_resource_links', '*', __METHOD__ );
+               } catch ( Exception $e ) {
+                       wfDebug( __METHOD__ . " failed to update DB: $e\n" );
+               }
        }
 
        /**
index 0ca1539..0b8014a 100644 (file)
@@ -34,7 +34,7 @@ abstract class RdfMetaData {
                $this->mArticle = $article;
        }
 
-       public abstract function show();
+       abstract public function show();
 
        protected function setup() {
                global $wgOut, $wgRequest;
@@ -42,7 +42,7 @@ abstract class RdfMetaData {
                $httpaccept = isset( $_SERVER['HTTP_ACCEPT'] ) ? $_SERVER['HTTP_ACCEPT'] : null;
                $rdftype = wfNegotiateType( wfAcceptToPrefs( $httpaccept ), wfAcceptToPrefs( self::RDF_TYPE_PREFS ) );
 
-               if( !$rdftype ){
+               if( !$rdftype ) {
                        throw new HttpError( 406, wfMessage( 'notacceptable' ) );
                }
 
@@ -70,7 +70,7 @@ abstract class RdfMetaData {
                $lastEditor = User::newFromId( $this->mArticle->getUser() );
                $this->person( 'creator', $lastEditor );
 
-               foreach( $this->mArticle->getContributors() as $user ){
+               foreach( $this->mArticle->getContributors() as $user ) {
                        $this->person( 'contributor', $user );
                }
 
@@ -82,10 +82,10 @@ abstract class RdfMetaData {
                print "\t\t<dc:{$name}>{$value}</dc:{$name}>\n";
        }
 
-       protected function date($timestamp) {
-               return substr($timestamp, 0, 4) . '-'
-                 . substr($timestamp, 4, 2) . '-'
-                 . substr($timestamp, 6, 2);
+       protected function date( $timestamp ) {
+               return substr( $timestamp, 0, 4 ) . '-'
+                       . substr( $timestamp, 4, 2 ) . '-'
+                       . substr( $timestamp, 6, 2 );
        }
 
        protected function pageOrString( $name, $page, $str ) {
@@ -95,7 +95,7 @@ abstract class RdfMetaData {
                        $nt = Title::newFromText( $page );
                }
 
-               if( !$nt || $nt->getArticleID() == 0 ){
+               if( !$nt || $nt->getArticleID() == 0 ) {
                        $this->element( $name, $str );
                } else {
                        $this->page( $name, $nt );
@@ -110,13 +110,13 @@ abstract class RdfMetaData {
                $this->url( $name, $title->getFullUrl() );
        }
 
-       protected function url($name, $url) {
+       protected function url( $name, $url ) {
                $url = htmlspecialchars( $url );
                print "\t\t<dc:{$name} rdf:resource=\"{$url}\" />\n";
        }
 
        protected function person( $name, User $user ) {
-               if( $user->isAnon() ){
+               if( $user->isAnon() ) {
                        $this->element( $name, wfMessage( 'anonymous' )->numParams( 1 )->text() );
                } else {
                        $real = $user->getRealName();
@@ -141,19 +141,19 @@ abstract class RdfMetaData {
                global $wgRightsPage, $wgRightsUrl, $wgRightsText;
 
                if( $wgRightsPage && ( $nt = Title::newFromText( $wgRightsPage ) )
-                       && ($nt->getArticleID() != 0)) {
-                       $this->page('rights', $nt);
-               } elseif( $wgRightsUrl ){
-                       $this->url('rights', $wgRightsUrl);
-               } elseif( $wgRightsText ){
+                       && ( $nt->getArticleID() != 0 ) ) {
+                       $this->page( 'rights', $nt );
+               } elseif( $wgRightsUrl ) {
+                       $this->url( 'rights', $wgRightsUrl );
+               } elseif( $wgRightsText ) {
                        $this->element( 'rights', $wgRightsText );
                }
        }
 
-       protected function getTerms( $url ){
+       protected function getTerms( $url ) {
                global $wgLicenseTerms;
 
-               if( $wgLicenseTerms ){
+               if( $wgLicenseTerms ) {
                        return $wgLicenseTerms;
                } else {
                        $known = $this->getKnownLicenses();
@@ -166,23 +166,23 @@ abstract class RdfMetaData {
        }
 
        protected function getKnownLicenses() {
-               $ccLicenses = array('by', 'by-nd', 'by-nd-nc', 'by-nc',
-                                                       'by-nc-sa', 'by-sa');
-               $ccVersions = array('1.0', '2.0');
+               $ccLicenses = array( 'by', 'by-nd', 'by-nd-nc', 'by-nc',
+                                                       'by-nc-sa', 'by-sa' );
+               $ccVersions = array( '1.0', '2.0' );
                $knownLicenses = array();
 
-               foreach ($ccVersions as $version) {
-                       foreach ($ccLicenses as $license) {
-                               if( $version == '2.0' && substr( $license, 0, 2) != 'by' ) {
+               foreach ( $ccVersions as $version ) {
+                       foreach ( $ccLicenses as $license ) {
+                               if( $version == '2.0' && substr( $license, 0, 2 ) != 'by' ) {
                                        # 2.0 dropped the non-attribs licenses
                                        continue;
                                }
                                $lurl = "http://creativecommons.org/licenses/{$license}/{$version}/";
-                               $knownLicenses[$lurl] = explode('-', $license);
+                               $knownLicenses[$lurl] = explode( '-', $license );
                                $knownLicenses[$lurl][] = 're';
                                $knownLicenses[$lurl][] = 'di';
                                $knownLicenses[$lurl][] = 'no';
-                               if (!in_array('nd', $knownLicenses[$lurl])) {
+                               if ( !in_array( 'nd', $knownLicenses[$lurl] ) ) {
                                        $knownLicenses[$lurl][] = 'de';
                                }
                        }
@@ -191,13 +191,12 @@ abstract class RdfMetaData {
                /* Handle the GPL and LGPL, too. */
 
                $knownLicenses['http://creativecommons.org/licenses/GPL/2.0/'] =
-                 array('de', 're', 'di', 'no', 'sa', 'sc');
+                       array( 'de', 're', 'di', 'no', 'sa', 'sc' );
                $knownLicenses['http://creativecommons.org/licenses/LGPL/2.1/'] =
-                 array('de', 're', 'di', 'no', 'sa', 'sc');
+                       array( 'de', 're', 'di', 'no', 'sa', 'sc' );
                $knownLicenses['http://www.gnu.org/copyleft/fdl.html'] =
-                 array('de', 're', 'di', 'no', 'sa', 'sc');
+                       array( 'de', 're', 'di', 'no', 'sa', 'sc' );
 
                return $knownLicenses;
        }
 }
-
index 65a2a6f..108ba1d 100644 (file)
@@ -197,14 +197,14 @@ class MimeMagic {
 
                if ( $wgMimeTypeFile ) {
                        if ( is_file( $wgMimeTypeFile ) and is_readable( $wgMimeTypeFile ) ) {
-                               wfDebug( __METHOD__.": loading mime types from $wgMimeTypeFile\n" );
+                               wfDebug( __METHOD__ . ": loading mime types from $wgMimeTypeFile\n" );
                                $types .= "\n";
                                $types .= file_get_contents( $wgMimeTypeFile );
                        } else {
-                               wfDebug( __METHOD__.": can't load mime types from $wgMimeTypeFile\n" );
+                               wfDebug( __METHOD__ . ": can't load mime types from $wgMimeTypeFile\n" );
                        }
                } else {
-                       wfDebug( __METHOD__.": no mime types file defined, using build-ins only.\n" );
+                       wfDebug( __METHOD__ . ": no mime types file defined, using build-ins only.\n" );
                }
 
                $types = str_replace( array( "\r\n", "\n\r", "\n\n", "\r\r", "\r" ), "\n", $types );
@@ -213,7 +213,7 @@ class MimeMagic {
                $this->mMimeToExt = array();
                $this->mToMime = array();
 
-               $lines = explode( "\n",$types );
+               $lines = explode( "\n", $types );
                foreach ( $lines as $s ) {
                        $s = trim( $s );
                        if ( empty( $s ) ) {
@@ -231,7 +231,7 @@ class MimeMagic {
                        }
 
                        $mime = substr( $s, 0, $i );
-                       $ext = trim( substr($s, $i+1 ) );
+                       $ext = trim( substr( $s, $i+1 ) );
 
                        if ( empty( $ext ) ) {
                                continue;
@@ -272,17 +272,17 @@ class MimeMagic {
 
                if ( $wgMimeInfoFile ) {
                        if ( is_file( $wgMimeInfoFile ) and is_readable( $wgMimeInfoFile ) ) {
-                               wfDebug( __METHOD__.": loading mime info from $wgMimeInfoFile\n" );
+                               wfDebug( __METHOD__ . ": loading mime info from $wgMimeInfoFile\n" );
                                $info .= "\n";
                                $info .= file_get_contents( $wgMimeInfoFile );
                        } else {
-                               wfDebug(__METHOD__.": can't load mime info from $wgMimeInfoFile\n");
+                               wfDebug( __METHOD__ . ": can't load mime info from $wgMimeInfoFile\n" );
                        }
                } else {
-                       wfDebug(__METHOD__.": no mime info file defined, using build-ins only.\n");
+                       wfDebug( __METHOD__ . ": no mime info file defined, using build-ins only.\n" );
                }
 
-               $info = str_replace( array( "\r\n", "\n\r", "\n\n", "\r\r", "\r" ), "\n", $info);
+               $info = str_replace( array( "\r\n", "\n\r", "\n\n", "\r\r", "\r" ), "\n", $info );
                $info = str_replace( "\t", " ", $info );
 
                $this->mMimeTypeAliases = array();
@@ -330,9 +330,9 @@ class MimeMagic {
                                $this->mMediaTypes[$mtype][] = $mime;
                        }
 
-                       if ( sizeof( $m ) > 1 ) {
+                       if ( count( $m ) > 1 ) {
                                $main = $m[0];
-                               for ( $i=1; $i<sizeof($m); $i += 1 ) {
+                               for ( $i = 1; $i < count( $m ); $i += 1 ) {
                                        $mime = $m[$i];
                                        $this->mMimeTypeAliases[$mime] = $main;
                                }
@@ -511,7 +511,7 @@ class MimeMagic {
        public function improveTypeFromExtension( $mime, $ext ) {
                if ( $mime === 'unknown/unknown' ) {
                        if ( $this->isRecognizableExtension( $ext ) ) {
-                               wfDebug( __METHOD__. ': refusing to guess mime type for .' .
+                               wfDebug( __METHOD__ . ': refusing to guess mime type for .' .
                                        "$ext file, we should have recognized it\n" );
                        } else {
                                // Not something we can detect, so simply
@@ -525,7 +525,7 @@ class MimeMagic {
                                // find the proper mime type for that file extension
                                $mime = $this->guessTypesForExtension( $ext );
                        } else {
-                               wfDebug( __METHOD__. ": refusing to guess better type for $mime file, " .
+                               wfDebug( __METHOD__ . ": refusing to guess better type for $mime file, " .
                                        ".$ext is not a known OPC extension.\n" );
                                $mime = 'application/zip';
                        }
@@ -535,7 +535,7 @@ class MimeMagic {
                        $mime = $this->mMimeTypeAliases[$mime];
                }
 
-               wfDebug(__METHOD__.": improved mime type for .$ext: $mime\n");
+               wfDebug( __METHOD__ . ": improved mime type for .$ext: $mime\n" );
                return $mime;
        }
 
@@ -555,14 +555,14 @@ class MimeMagic {
         */
        public function guessMimeType( $file, $ext = true ) {
                if ( $ext ) { // TODO: make $ext default to false. Or better, remove it.
-                       wfDebug( __METHOD__.": WARNING: use of the \$ext parameter is deprecated. " .
+                       wfDebug( __METHOD__ . ": WARNING: use of the \$ext parameter is deprecated. " .
                                "Use improveTypeFromExtension(\$mime, \$ext) instead.\n" );
                }
 
                $mime = $this->doGuessMimeType( $file, $ext );
 
                if( !$mime ) {
-                       wfDebug( __METHOD__.": internal type detection failed for $file (.$ext)...\n" );
+                       wfDebug( __METHOD__ . ": internal type detection failed for $file (.$ext)...\n" );
                        $mime = $this->detectMimeType( $file, $ext );
                }
 
@@ -570,7 +570,7 @@ class MimeMagic {
                        $mime = $this->mMimeTypeAliases[$mime];
                }
 
-               wfDebug(__METHOD__.": guessed mime type of $file: $mime\n");
+               wfDebug( __METHOD__ . ": guessed mime type of $file: $mime\n" );
                return $mime;
        }
 
@@ -629,7 +629,7 @@ class MimeMagic {
                        $doctype = strpos( $head, "\x42\x82" );
                        if ( $doctype ) {
                                // Next byte is datasize, then data (sizes larger than 1 byte are very stupid muxers)
-                               $data = substr($head, $doctype+3, 8);
+                               $data = substr( $head, $doctype+3, 8 );
                                if ( strncmp( $data, "matroska", 8 ) == 0 ) {
                                        wfDebug( __METHOD__ . ": recognized file as video/x-matroska\n" );
                                        return "video/x-matroska";
@@ -661,12 +661,11 @@ class MimeMagic {
                 * strings like "<? ", but should it be axed completely?
                 */
                if ( ( strpos( $head, '<?php' ) !== false ) ||
-
-                   ( strpos( $head, "<\x00?\x00p\x00h\x00p" ) !== false ) ||
-                   ( strpos( $head, "<\x00?\x00 " ) !== false ) ||
-                   ( strpos( $head, "<\x00?\x00\n" ) !== false ) ||
-                   ( strpos( $head, "<\x00?\x00\t" ) !== false ) ||
-                   ( strpos( $head, "<\x00?\x00=" ) !== false ) ) {
+                       ( strpos( $head, "<\x00?\x00p\x00h\x00p" ) !== false ) ||
+                       ( strpos( $head, "<\x00?\x00 " ) !== false ) ||
+                       ( strpos( $head, "<\x00?\x00\n" ) !== false ) ||
+                       ( strpos( $head, "<\x00?\x00\t" ) !== false ) ||
+                       ( strpos( $head, "<\x00?\x00=" ) !== false ) ) {
 
                        wfDebug( __METHOD__ . ": recognized $file as application/x-php\n" );
                        return 'application/x-php';
@@ -698,7 +697,7 @@ class MimeMagic {
                } elseif ( substr( $head, 0, 7) == "\xfe\xff\x00#\x00!" ) {
                        $script_type = "UTF-16BE";
                } elseif ( substr( $head, 0, 7 ) == "\xff\xfe#\x00!" ) {
-                       $script_type= "UTF-16LE";
+                       $script_type = "UTF-16LE";
                }
 
                if ( $script_type ) {
@@ -720,14 +719,14 @@ class MimeMagic {
 
                        if ( preg_match( '%/?([^\s]+/)(\w+)%', $head, $match ) ) {
                                $mime = "application/x-{$match[2]}";
-                               wfDebug( __METHOD__.": shell script recognized as $mime\n" );
+                               wfDebug( __METHOD__ . ": shell script recognized as $mime\n" );
                                return $mime;
                        }
                }
 
                // Check for ZIP variants (before getimagesize)
                if ( strpos( $tail, "PK\x05\x06" ) !== false ) {
-                       wfDebug( __METHOD__.": ZIP header present in $file\n" );
+                       wfDebug( __METHOD__ . ": ZIP header present in $file\n" );
                        return $this->detectZipType( $head, $tail, $ext );
                }
 
@@ -737,14 +736,14 @@ class MimeMagic {
 
                if( $gis && isset( $gis['mime'] ) ) {
                        $mime = $gis['mime'];
-                       wfDebug( __METHOD__.": getimagesize detected $file as $mime\n" );
+                       wfDebug( __METHOD__ . ": getimagesize detected $file as $mime\n" );
                        return $mime;
                }
 
                // Also test DjVu
                $deja = new DjVuImage( $file );
                if( $deja->isValid() ) {
-                       wfDebug( __METHOD__.": detected $file as image/vnd.djvu\n" );
+                       wfDebug( __METHOD__ . ": detected $file as image/vnd.djvu\n" );
                        return 'image/vnd.djvu';
                }
 
@@ -766,7 +765,7 @@ class MimeMagic {
         */
        function detectZipType( $header, $tail = null, $ext = false ) {
                if( $ext ) { # TODO: remove $ext param
-                       wfDebug( __METHOD__.": WARNING: use of the \$ext parameter is deprecated. " .
+                       wfDebug( __METHOD__ . ": WARNING: use of the \$ext parameter is deprecated. " .
                                "Use improveTypeFromExtension(\$mime, \$ext) instead.\n" );
                }
 
@@ -797,7 +796,7 @@ class MimeMagic {
 
                if ( preg_match( $opendocRegex, substr( $header, 30 ), $matches ) ) {
                        $mime = $matches[1];
-                       wfDebug( __METHOD__.": detected $mime from ZIP archive\n" );
+                       wfDebug( __METHOD__ . ": detected $mime from ZIP archive\n" );
                } elseif ( preg_match( $openxmlRegex, substr( $header, 30 ) ) ) {
                        $mime = "application/x-opc+zip";
                        # TODO: remove the block below, as soon as improveTypeFromExtension is used everywhere
@@ -814,7 +813,7 @@ class MimeMagic {
                                        $mime = "application/zip";
                                }
                        }
-                       wfDebug( __METHOD__.": detected an Open Packaging Conventions archive: $mime\n" );
+                       wfDebug( __METHOD__ . ": detected an Open Packaging Conventions archive: $mime\n" );
                } elseif ( substr( $header, 0, 8 ) == "\xd0\xcf\x11\xe0\xa1\xb1\x1a\xe1" &&
                                ($headerpos = strpos( $tail, "PK\x03\x04" ) ) !== false &&
                                preg_match( $openxmlRegex, substr( $tail, $headerpos + 30 ) ) ) {
@@ -843,9 +842,9 @@ class MimeMagic {
                                        break;
                        }
 
-                       wfDebug( __METHOD__.": detected a MS Office document with OPC trailer\n");
+                       wfDebug( __METHOD__ . ": detected a MS Office document with OPC trailer\n" );
                } else {
-                       wfDebug( __METHOD__.": unable to identify type of ZIP archive\n" );
+                       wfDebug( __METHOD__ . ": unable to identify type of ZIP archive\n" );
                }
                return $mime;
        }
@@ -872,7 +871,7 @@ class MimeMagic {
                global $wgMimeDetectorCommand;
 
                if ( $ext ) { # TODO:  make $ext default to false. Or better, remove it.
-                       wfDebug( __METHOD__.": WARNING: use of the \$ext parameter is deprecated. Use improveTypeFromExtension(\$mime, \$ext) instead.\n" );
+                       wfDebug( __METHOD__ . ": WARNING: use of the \$ext parameter is deprecated. Use improveTypeFromExtension(\$mime, \$ext) instead.\n" );
                }
 
                $m = null;
@@ -898,7 +897,7 @@ class MimeMagic {
                                $m = finfo_file( $mime_magic_resource, $file );
                                finfo_close( $mime_magic_resource );
                        } else {
-                               wfDebug( __METHOD__.": finfo_open failed on ".FILEINFO_MIME."!\n" );
+                               wfDebug( __METHOD__ . ": finfo_open failed on ".FILEINFO_MIME."!\n" );
                        }
                } elseif ( function_exists( "mime_content_type" ) ) {
 
@@ -911,9 +910,9 @@ class MimeMagic {
                        # Also note that this has been DEPRECATED in favor of the fileinfo extension by PECL, see above.
                        # see http://www.php.net/manual/en/ref.mime-magic.php for details.
 
-                       $m = mime_content_type($file);
+                       $m = mime_content_type( $file );
                } else {
-                       wfDebug( __METHOD__.": no magic mime detector found!\n" );
+                       wfDebug( __METHOD__ . ": no magic mime detector found!\n" );
                }
 
                if ( $m ) {
@@ -925,7 +924,7 @@ class MimeMagic {
                        if ( strpos( $m, 'unknown' ) !== false ) {
                                $m = null;
                        } else {
-                               wfDebug( __METHOD__.": magic mime type of $file: $m\n" );
+                               wfDebug( __METHOD__ . ": magic mime type of $file: $m\n" );
                                return $m;
                        }
                }
@@ -937,11 +936,11 @@ class MimeMagic {
                }
                if ( $ext ) {
                        if( $this->isRecognizableExtension( $ext ) ) {
-                               wfDebug( __METHOD__. ": refusing to guess mime type for .$ext file, we should have recognized it\n" );
+                               wfDebug( __METHOD__ . ": refusing to guess mime type for .$ext file, we should have recognized it\n" );
                        } else {
                                $m = $this->guessTypesForExtension( $ext );
                                if ( $m ) {
-                                       wfDebug( __METHOD__.": extension mime type of $file: $m\n" );
+                                       wfDebug( __METHOD__ . ": extension mime type of $file: $m\n" );
                                        return $m;
                                }
                        }
@@ -1066,7 +1065,7 @@ class MimeMagic {
 
                foreach ( $m as $mime ) {
                        foreach ( $this->mMediaTypes as $type => $codes ) {
-                               if ( in_array($mime, $codes, true ) ) {
+                               if ( in_array( $mime, $codes, true ) ) {
                                        return $type;
                                }
                        }
index 46af002..e35bf07 100644 (file)
@@ -67,7 +67,7 @@ class MWNamespace {
        public static function isMovable( $index ) {
                global $wgAllowImageMoving;
 
-               $result = !( $index < NS_MAIN || ( $index == NS_FILE && !$wgAllowImageMoving )  || $index == NS_CATEGORY );
+               $result = !( $index < NS_MAIN || ( $index == NS_FILE && !$wgAllowImageMoving ) || $index == NS_CATEGORY );
 
                /**
                 * @since 1.20
@@ -290,9 +290,9 @@ class MWNamespace {
         * @param $index Int: namespace index
         * @return bool
         */
-        public static function canTalk( $index ) {
+       public static function canTalk( $index ) {
                return $index >= NS_MAIN;
-        }
+       }
 
        /**
         * Does this namespace contain content, for the purposes of calculating
index 78435e4..abf091e 100644 (file)
@@ -156,7 +156,7 @@ function wfMangleFlashPolicy( $s ) {
  * @param $length int
  */
 function wfDoContentLength( $length ) {
-       if ( !headers_sent() && $_SERVER['SERVER_PROTOCOL'] == 'HTTP/1.0' ) {
+       if ( !headers_sent() && isset( $_SERVER['SERVER_PROTOCOL'] ) && $_SERVER['SERVER_PROTOCOL'] == 'HTTP/1.0' ) {
                header( "Content-Length: $length" );
        }
 }
index 868c786..89d7c0b 100644 (file)
@@ -43,6 +43,7 @@ class OutputPage extends ContextSource {
        var $mKeywords = array();
 
        var $mLinktags = array();
+       var $mCanonicalUrl = false;
 
        /// Additional stylesheets. Looks like this is for extensions. Might be replaced by resource loader.
        var $mExtStyles = array();
@@ -316,7 +317,9 @@ class OutputPage extends ContextSource {
        }
 
        /**
-        * Add a new \<link\> tag to the page header
+        * Add a new \<link\> tag to the page header.
+        *
+        * Note: use setCanonicalUrl() for rel=canonical.
         *
         * @param $linkarr Array: associative array of attributes.
         */
@@ -336,6 +339,14 @@ class OutputPage extends ContextSource {
                $this->addLink( $linkarr );
        }
 
+       /**
+        * Set the URL to be used for the <link rel=canonical>. This should be used
+        * in preference to addLink(), to avoid duplicate link tags.
+        */
+       function setCanonicalUrl( $url ) {
+               $this->mCanonicalUrl = $url;
+       }
+
        /**
         * Get the value of the "rel" attribute for metadata links
         *
@@ -428,10 +439,10 @@ class OutputPage extends ContextSource {
         * @param $type string
         * @return Array
         */
-       protected function filterModules( $modules, $position = null, $type = ResourceLoaderModule::TYPE_COMBINED ){
+       protected function filterModules( $modules, $position = null, $type = ResourceLoaderModule::TYPE_COMBINED ) {
                $resourceLoader = $this->getResourceLoader();
                $filteredModules = array();
-               foreach( $modules as $val ){
+               foreach( $modules as $val ) {
                        $module = $resourceLoader->getModule( $val );
                        if( $module instanceof ResourceLoaderModule
                                && $module->getOrigin() <= $this->getAllowedModules( $type )
@@ -501,7 +512,7 @@ class OutputPage extends ContextSource {
         * @return Array of module names
         */
        public function getModuleStyles( $filter = false, $position = null ) {
-               return $this->getModules( $filter,  $position, 'mModuleStyles' );
+               return $this->getModules( $filter, $position, 'mModuleStyles' );
        }
 
        /**
@@ -1239,8 +1250,8 @@ class OutputPage extends ContextSource {
         * @param $type String ResourceLoaderModule TYPE_ constant
         * @return Int ResourceLoaderModule ORIGIN_ class constant
         */
-       public function getAllowedModules( $type ){
-               if( $type == ResourceLoaderModule::TYPE_COMBINED ){
+       public function getAllowedModules( $type ) {
+               if( $type == ResourceLoaderModule::TYPE_COMBINED ) {
                        return min( array_values( $this->mAllowedModules ) );
                } else {
                        return isset( $this->mAllowedModules[$type] )
@@ -1254,7 +1265,7 @@ class OutputPage extends ContextSource {
         * @param  $type String ResourceLoaderModule TYPE_ constant
         * @param  $level Int ResourceLoaderModule class constant
         */
-       public function setAllowedModules( $type, $level ){
+       public function setAllowedModules( $type, $level ) {
                $this->mAllowedModules[$type] = $level;
        }
 
@@ -1263,8 +1274,8 @@ class OutputPage extends ContextSource {
         * @param  $type String
         * @param  $level Int ResourceLoaderModule class constant
         */
-       public function reduceAllowedModules( $type, $level ){
-               $this->mAllowedModules[$type] = min( $this->getAllowedModules($type), $level );
+       public function reduceAllowedModules( $type, $level ) {
+               $this->mAllowedModules[$type] = min( $this->getAllowedModules( $type ), $level );
        }
 
        /**
@@ -1424,6 +1435,9 @@ class OutputPage extends ContextSource {
         */
        public function addWikiText( $text, $linestart = true, $interface = true ) {
                $title = $this->getTitle(); // Work arround E_STRICT
+               if ( !$title ) {
+                       throw new MWException( 'Title is null' );
+               }
                $this->addWikiTextTitle( $text, $title, $linestart, /*tidy*/false, $interface );
        }
 
@@ -1859,7 +1873,7 @@ class OutputPage extends ContextSource {
                                        wfDebug( __METHOD__ . ": proxy caching with ESI; {$this->mLastModified} **\n", false );
                                        # start with a shorter timeout for initial testing
                                        # header( 'Surrogate-Control: max-age=2678400+2678400, content="ESI/1.0"');
-                                       $response->header( 'Surrogate-Control: max-age='.$wgSquidMaxage.'+'.$this->mSquidMaxage.', content="ESI/1.0"');
+                                       $response->header( 'Surrogate-Control: max-age=' . $wgSquidMaxage . '+' . $this->mSquidMaxage . ', content="ESI/1.0"');
                                        $response->header( 'Cache-Control: s-maxage=0, must-revalidate, max-age=0' );
                                } else {
                                        # We'll purge the proxy cache for anons explicitly, but require end user agents
@@ -1869,7 +1883,7 @@ class OutputPage extends ContextSource {
                                        wfDebug( __METHOD__ . ": local proxy caching; {$this->mLastModified} **\n", false );
                                        # start with a shorter timeout for initial testing
                                        # header( "Cache-Control: s-maxage=2678400, must-revalidate, max-age=0" );
-                                       $response->header( 'Cache-Control: s-maxage='.$this->mSquidMaxage.', must-revalidate, max-age=0' );
+                                       $response->header( 'Cache-Control: s-maxage=' . $this->mSquidMaxage . ', must-revalidate, max-age=0' );
                                }
                        } else {
                                # We do want clients to cache if they can, but they *must* check for updates
@@ -1878,7 +1892,7 @@ class OutputPage extends ContextSource {
                                $response->header( 'Expires: ' . gmdate( 'D, d M Y H:i:s', 0 ) . ' GMT' );
                                $response->header( "Cache-Control: private, must-revalidate, max-age=0" );
                        }
-                       if($this->mLastModified) {
+                       if( $this->mLastModified ) {
                                $response->header( "Last-Modified: {$this->mLastModified}" );
                        }
                } else {
@@ -2057,7 +2071,7 @@ class OutputPage extends ContextSource {
 
                $this->prepareErrorPage( $title );
 
-               if ( $msg instanceof Message ){
+               if ( $msg instanceof Message ) {
                        $this->addHTML( $msg->parseAsBlock() );
                } else {
                        $this->addWikiMsgArray( $msg, $params );
@@ -2114,7 +2128,7 @@ class OutputPage extends ContextSource {
                                        unset( $returntoquery['title'] );
                                        unset( $returntoquery['returnto'] );
                                        unset( $returntoquery['returntoquery'] );
-                                       $query['returntoquery'] = wfArrayToCGI( $returntoquery );
+                                       $query['returntoquery'] = wfArrayToCgi( $returntoquery );
                                }
                        }
                        $loginLink = Linker::linkKnown(
@@ -2258,7 +2272,7 @@ class OutputPage extends ContextSource {
 
                        $pageLang = $this->getTitle()->getPageLanguage();
                        $params = array(
-                               'id'   => 'wpTextbox1',
+                               'id' => 'wpTextbox1',
                                'name' => 'wpTextbox1',
                                'cols' => $this->getUser()->getOption( 'cols' ),
                                'rows' => $this->getUser()->getOption( 'rows' ),
@@ -2469,7 +2483,7 @@ $templates
                        'mediawiki.page.startup',
                        'mediawiki.page.ready',
                ) );
-               if ( $wgIncludeLegacyJavaScript ){
+               if ( $wgIncludeLegacyJavaScript ) {
                        $this->addModules( 'mediawiki.legacy.wikibits' );
                }
 
@@ -2697,7 +2711,7 @@ $templates
                                }
                        }
 
-                       if( $group == 'noscript' ){
+                       if( $group == 'noscript' ) {
                                $links .= Html::rawElement( 'noscript', array(), $link ) . "\n";
                        } else {
                                $links .= $link . "\n";
@@ -3040,6 +3054,8 @@ $templates
 
                $tags = array();
 
+               $canonicalUrl = $this->mCanonicalUrl;
+
                if ( $addContentType ) {
                        if ( $wgHtml5 ) {
                                # More succinct than <meta http-equiv=Content-Type>, has the
@@ -3050,7 +3066,7 @@ $templates
                                        'http-equiv' => 'Content-Type',
                                        'content' => "$wgMimeType; charset=UTF-8"
                                ) );
-                               $tags['meta-content-style-type'] = Html::element( 'meta', array(  // bug 15835
+                               $tags['meta-content-style-type'] = Html::element( 'meta', array( // bug 15835
                                        'http-equiv' => 'Content-Style-Type',
                                        'content' => 'text/css'
                                ) );
@@ -3079,7 +3095,7 @@ $templates
                        );
                        $tags['meta-keywords'] = Html::element( 'meta', array(
                                'name' => 'keywords',
-                               'content' =>  preg_replace(
+                               'content' => preg_replace(
                                        array_keys( $strip ),
                                        array_values( $strip ),
                                        implode( ',', $this->mKeywords )
@@ -3184,10 +3200,7 @@ $templates
                                                );
                                        }
                                } else {
-                                       $tags['canonical'] = Html::element( 'link', array(
-                                               'rel' => 'canonical',
-                                               'href' => $this->getTitle()->getCanonicalUrl()
-                                       ) );
+                                       $canonicalUrl = $this->getTitle()->getLocalURL();
                                }
                        }
                }
@@ -3256,6 +3269,24 @@ $templates
                                }
                        }
                }
+
+               # Canonical URL
+               global $wgEnableCanonicalServerLink;
+               if ( $wgEnableCanonicalServerLink ) {
+                       if ( $canonicalUrl !== false ) {
+                               $canonicalUrl = wfExpandUrl( $canonicalUrl, PROTO_CANONICAL );
+                       } else {
+                               $reqUrl = $this->getRequest()->getRequestURL();
+                               $canonicalUrl = wfExpandUrl( $reqUrl, PROTO_CANONICAL );
+                       }
+               }
+               if ( $canonicalUrl !== false ) {
+                       $tags[] = Html::element( 'link', array(
+                               'rel' => 'canonical',
+                               'href' => $canonicalUrl
+                       ) );
+               }
+
                return $tags;
        }
 
@@ -3348,7 +3379,7 @@ $templates
                if ( $wgUseSiteCss ) {
                        $moduleStyles[] = 'site';
                        $moduleStyles[] = 'noscript';
-                       if( $this->getUser()->isLoggedIn() ){
+                       if( $this->getUser()->isLoggedIn() ) {
                                $moduleStyles[] = 'user.groups';
                        }
                }
@@ -3484,11 +3515,15 @@ $templates
         * Transform "media" attribute based on request parameters
         *
         * @param $media String: current value of the "media" attribute
-        * @return String: modified value of the "media" attribute
+        * @return String: modified value of the "media" attribute, or null to skip
+        * this stylesheet
         */
        public static function transformCssMedia( $media ) {
                global $wgRequest, $wgHandheldForIPhone;
 
+               // http://www.w3.org/TR/css3-mediaqueries/#syntax
+               $screenMediaQueryRegex = '/^(?:only\s+)?screen\b/i';
+
                // Switch in on-screen display for media testing
                $switches = array(
                        'printable' => 'print',
@@ -3498,8 +3533,20 @@ $templates
                        if( $wgRequest->getBool( $switch ) ) {
                                if( $media == $targetMedia ) {
                                        $media = '';
-                               } elseif( $media == 'screen' ) {
-                                       return null;
+                               } elseif( preg_match( $screenMediaQueryRegex, $media ) === 1 ) {
+                                       // This regex will not attempt to understand a comma-separated media_query_list
+                                       //
+                                       // Example supported values for $media: 'screen', 'only screen', 'screen and (min-width: 982px)' ),
+                                       // Example NOT supported value for $media: '3d-glasses, screen, print and resolution > 90dpi'
+                                       //
+                                       // If it's a print request, we never want any kind of screen styesheets
+                                       // If it's a handheld request (currently the only other choice with a switch),
+                                       // we don't want simple 'screen' but we might want screen queries that
+                                       // have a max-width or something, so we'll pass all others on and let the
+                                       // client do the query.
+                                       if( $targetMedia == 'print' || $media == 'screen' ) {
+                                               return null;
+                                       }
                                }
                        }
                }
@@ -3582,7 +3629,7 @@ $templates
                                                '1.20'
                                        );
                                }
-                       }  else {
+                       } else {
                                $args = array();
                                $name = $spec;
                        }
index 2aed2af..c60c107 100644 (file)
@@ -37,7 +37,7 @@
  * @note Since we can't rely on anything, the minimum PHP versions and MW current
  * version are hardcoded here
  */
-function wfPHPVersionError( $type ){
+function wfPHPVersionError( $type ) {
        $mwVersion = '1.21';
        $phpVersion = PHP_VERSION;
        $message = "MediaWiki $mwVersion requires at least PHP version 5.3.2, you are using PHP $phpVersion.";
index 077430d..9e937e4 100644 (file)
@@ -866,7 +866,7 @@ abstract class ReverseChronologicalPager extends IndexPager {
                if ( $this->mMonth ) {
                        $month = $this->mMonth + 1;
                        // For December, we want January 1 of the next year
-                       if ($month > 12) {
+                       if ( $month > 12 ) {
                                $month = 1;
                                $year++;
                        }
@@ -1160,7 +1160,7 @@ abstract class TablePager extends IndexPager {
                        # The pair is either $index => $limit, in which case the $value
                        # will be numeric, or $limit => $text, in which case the $value
                        # will be a string.
-                       if( is_int( $value ) ){
+                       if( is_int( $value ) ) {
                                $limit = $value;
                                $text = $this->getLanguage()->formatNum( $limit );
                        } else {
index 2dbc7ec..3be504a 100644 (file)
@@ -293,7 +293,7 @@ class PathRouter {
                        foreach ( $m as $matchKey => $matchValue ) {
                                if ( preg_match( '/^par\d+$/u', $matchKey ) ) {
                                        $n = intval( substr( $matchKey, 3 ) );
-                                       $data['$'.$n] = rawurldecode( $matchValue );
+                                       $data['$' . $n] = rawurldecode( $matchValue );
                                }
                        }
                        // If present give our $data array a $key as well
index 9a10867..1e4f85f 100644 (file)
@@ -891,7 +891,7 @@ class Preferences {
                        'max' => $watchlistdaysMax,
                        'section' => 'watchlist/displaywatchlist',
                        'help' => $context->msg( 'prefs-watchlist-days-max' )->numParams(
-                                                $watchlistdaysMax )->text(),
+                               $watchlistdaysMax )->text(),
                        'label-message' => 'prefs-watchlist-days',
                );
                $defaultPreferences['wllimit'] = array(
@@ -1240,6 +1240,13 @@ class Preferences {
                        $formDescriptor = array_diff_key( $formDescriptor, $removeKeys );
                }
 
+               // Remove type=api preferences. They are not intended for rendering in the form.
+               foreach ( $formDescriptor as $name => $info ) {
+                       if ( isset( $info['type'] ) && $info['type'] === 'api' ) {
+                               unset( $formDescriptor[$name] );
+                       }
+               }
+
                /**
                 * @var $htmlForm PreferencesForm
                 */
@@ -1326,7 +1333,7 @@ class Preferences {
         * @param $alldata
         * @return int
         */
-       static function filterIntval( $value, $alldata ){
+       static function filterIntval( $value, $alldata ) {
                return intval( $value );
        }
 
@@ -1400,15 +1407,14 @@ class Preferences {
                # via $wgHiddenPrefs, we don't want to destroy that setting in case the preference
                # is subsequently re-enabled
                # TODO: maintenance script to actually delete these
-               foreach( $wgHiddenPrefs as $pref ){
+               foreach( $wgHiddenPrefs as $pref ) {
                        # If the user has not set a non-default value here, the default will be returned
                        # and subsequently discarded
                        $formData[$pref] = $user->getOption( $pref, null, true );
                }
 
-               //  Keeps old preferences from interfering due to back-compat
-               //  code, etc.
-               $user->resetOptions();
+               // Keep old preferences from interfering due to back-compat code, etc.
+               $user->resetOptions( 'unused', $form->getContext() );
 
                foreach ( $formData as $key => $value ) {
                        $user->setOption( $key, $value );
index 5d4b35c..7df6a50 100644 (file)
@@ -45,7 +45,7 @@ class PrefixSearch {
                // Find a Title which is not an interwiki and is in NS_MAIN
                $title = Title::newFromText( $search );
                if( $title && $title->getInterwiki() == '' ) {
-                       $ns = array($title->getNamespace());
+                       $ns = array( $title->getNamespace() );
                        if( $ns[0] == NS_MAIN ) {
                                $ns = $namespaces; // no explicit prefix, use default namespaces
                        }
index e844a1e..17e4372 100644 (file)
@@ -139,7 +139,7 @@ class ProtectionForm {
                                        if( !$wgUser->isAllowedAny( 'protect', 'editprotected' ) )
                                                continue;
                                } else {
-                                       if( !$wgUser->isAllowed($val) )
+                                       if( !$wgUser->isAllowed( $val ) )
                                                continue;
                                }
                                $this->mRestrictions[$action] = $val;
@@ -207,6 +207,7 @@ class ProtectionForm {
                global $wgOut;
 
                $wgOut->setRobotPolicy( 'noindex,nofollow' );
+               $wgOut->addBacklinkSubtitle( $this->mTitle );
 
                if ( is_array( $err ) ) {
                        $wgOut->wrapWikiMsg( "<p class='error'>\n$1\n</p>\n", $err );
@@ -214,15 +215,27 @@ class ProtectionForm {
                        $wgOut->addHTML( "<p class='error'>{$err}</p>\n" );
                }
 
+               if ( $this->mTitle->getRestrictionTypes() === array() ) {
+                       // No restriction types available for the current title
+                       // this might happen if an extension alters the available types
+                       $wgOut->setPageTitle( wfMessage( 'protect-norestrictiontypes-title', $this->mTitle->getPrefixedText() ) );
+                       $wgOut->addWikiText( wfMessage( 'protect-norestrictiontypes-text' )->text() );
+
+                       // Show the log in case protection was possible once
+                       $this->showLogExtract( $wgOut );
+                       // return as there isn't anything else we can do
+                       return;
+               }
+
                list( $cascadeSources, /* $restrictions */ ) = $this->mTitle->getCascadeProtectionSources();
-               if ( $cascadeSources && count($cascadeSources) > 0 ) {
+               if ( $cascadeSources && count( $cascadeSources ) > 0 ) {
                        $titles = '';
 
                        foreach ( $cascadeSources as $title ) {
                                $titles .= '* [[:' . $title->getPrefixedText() . "]]\n";
                        }
 
-                       $wgOut->wrapWikiMsg( "<div id=\"mw-protect-cascadeon\">\n$1\n" . $titles . "</div>", array( 'protect-cascadeon', count($cascadeSources) ) );
+                       $wgOut->wrapWikiMsg( "<div id=\"mw-protect-cascadeon\">\n$1\n" . $titles . "</div>", array( 'protect-cascadeon', count( $cascadeSources ) ) );
                }
 
                # Show an appropriate message if the user isn't allowed or able to change
@@ -236,7 +249,6 @@ class ProtectionForm {
                                wfEscapeWikiText( $this->mTitle->getPrefixedText() ) );
                }
 
-               $wgOut->addBacklinkSubtitle( $this->mTitle );
                $wgOut->addHTML( $this->buildForm() );
                $this->showLogExtract( $wgOut );
        }
@@ -272,7 +284,7 @@ class ProtectionForm {
                $expiry = array();
                foreach( $this->mApplicableTypes as $action ) {
                        $expiry[$action] = $this->getExpiry( $action );
-                       if( empty($this->mRestrictions[$action]) )
+                       if( empty( $this->mRestrictions[$action] ) )
                                continue; // unprotected
                        if ( !$expiry[$action] ) {
                                $this->show( array( 'protect_expiry_invalid' ) );
@@ -288,7 +300,7 @@ class ProtectionForm {
                #  to a semi-protected page.
                $edit_restriction = isset( $this->mRestrictions['edit'] ) ? $this->mRestrictions['edit'] : '';
                $this->mCascade = $wgRequest->getBool( 'mwProtect-cascade' );
-               if ($this->mCascade && ($edit_restriction != 'protect') &&
+               if ( $this->mCascade && ($edit_restriction != 'protect') &&
                        !User::groupHasPermission( $edit_restriction, 'protect' ) )
                        $this->mCascade = false;
 
@@ -400,14 +412,14 @@ class ProtectionForm {
                                wfMessage( 'protect-othertime-op' )->text(),
                                "othertime"
                        ) . "\n";
-                       foreach( explode(',', $scExpiryOptions) as $option ) {
-                               if ( strpos($option, ":") === false ) {
+                       foreach( explode( ',', $scExpiryOptions ) as $option ) {
+                               if ( strpos( $option, ":" ) === false ) {
                                        $show = $value = $option;
                                } else {
-                                       list($show, $value) = explode(":", $option);
+                                       list( $show, $value ) = explode( ":", $option );
                                }
-                               $show = htmlspecialchars($show);
-                               $value = htmlspecialchars($value);
+                               $show = htmlspecialchars( $show );
+                               $value = htmlspecialchars( $value );
                                $expiryFormOptions .= Xml::option( $show, $value, $this->mExpirySelection[$action] === $value ) . "\n";
                        }
                        # Add expiry dropdown
@@ -446,7 +458,7 @@ class ProtectionForm {
                        "</td></tr>";
                }
                # Give extensions a chance to add items to the form
-               wfRunHooks( 'ProtectionForm::buildForm', array($this->mArticle,&$out) );
+               wfRunHooks( 'ProtectionForm::buildForm', array( $this->mArticle, &$out ) );
 
                $out .= Xml::closeElement( 'tbody' ) . Xml::closeElement( 'table' );
 
@@ -557,7 +569,7 @@ class ProtectionForm {
                                if( !$wgUser->isAllowedAny( 'protect', 'editprotected' ) && !$this->disabled )
                                        continue;
                        } else {
-                               if( !$wgUser->isAllowed($key) && !$this->disabled )
+                               if( !$wgUser->isAllowed( $key ) && !$this->disabled )
                                        continue;
                        }
                        $levels[] = $key;
@@ -632,6 +644,6 @@ class ProtectionForm {
                $out->addHTML( Xml::element( 'h2', null, $protectLogPage->getName()->text() ) );
                LogEventsList::showLogExtract( $out, 'protect', $this->mTitle );
                # Let extensions add other relevant log extracts
-               wfRunHooks( 'ProtectionForm::showLogExtract', array($this->mArticle,$out) );
+               wfRunHooks( 'ProtectionForm::showLogExtract', array( $this->mArticle, $out ) );
        }
 }
index 349789f..1a147b1 100644 (file)
@@ -109,7 +109,7 @@ function wfProxyCheck() {
        if ( !$skip ) {
                $title = SpecialPage::getTitleFor( 'Blockme' );
                $iphash = md5( $ip . $wgProxyKey );
-               $url = wfExpandUrl( $title->getFullURL( 'ip='.$iphash ), PROTO_HTTP );
+               $url = wfExpandUrl( $title->getFullURL( 'ip=' . $iphash ), PROTO_HTTP );
 
                foreach ( $wgProxyPorts as $port ) {
                        $params = implode( ' ', array(
index 87fa428..0470426 100644 (file)
@@ -235,6 +235,9 @@ class RecentChange {
                        unset( $this->mAttribs['rc_ip'] );
                }
 
+               # Trim spaces on user supplied text
+               $this->mAttribs['rc_comment'] = trim( $this->mAttribs['rc_comment'] );
+
                # Make sure summary is truncated (whole multibyte characters)
                $this->mAttribs['rc_comment'] = $wgContLang->truncate( $this->mAttribs['rc_comment'], 255 );
 
@@ -797,7 +800,7 @@ class RecentChange {
                # see http://www.irssi.org/documentation/formats for some colour codes. prefix is \003,
                # no colour (\003) switches back to the term default
                $fullString = "$titleString\0034 $flag\00310 " .
-                                         "\00302$url\003 \0035*\003 \00303$user\003 \0035*\003 $szdiff \00310$comment\003\n";
+                       "\00302$url\003 \0035*\003 \00303$user\003 \0035*\003 $szdiff \00310$comment\003\n";
 
                return $fullString;
        }
index cc79c64..4bdce87 100644 (file)
@@ -254,9 +254,11 @@ class Revision implements IDBAccessObject {
                        $matchId = 'page_latest';
                }
                return self::loadFromConds( $db,
-                       array( "rev_id=$matchId",
-                                  'page_namespace' => $title->getNamespace(),
-                                  'page_title'     => $title->getDBkey() )
+                       array(
+                               "rev_id=$matchId",
+                               'page_namespace' => $title->getNamespace(),
+                               'page_title'     => $title->getDBkey()
+                       )
                );
        }
 
@@ -272,9 +274,11 @@ class Revision implements IDBAccessObject {
         */
        public static function loadFromTimestamp( $db, $title, $timestamp ) {
                return self::loadFromConds( $db,
-                       array( 'rev_timestamp'  => $db->timestamp( $timestamp ),
-                                  'page_namespace' => $title->getNamespace(),
-                                  'page_title'     => $title->getDBkey() )
+                       array(
+                               'rev_timestamp'  => $db->timestamp( $timestamp ),
+                               'page_namespace' => $title->getNamespace(),
+                               'page_title'     => $title->getDBkey()
+                       )
                );
        }
 
@@ -330,9 +334,11 @@ class Revision implements IDBAccessObject {
        public static function fetchRevision( $title ) {
                return self::fetchFromConds(
                        wfGetDB( DB_SLAVE ),
-                       array( 'rev_id=page_latest',
-                                  'page_namespace' => $title->getNamespace(),
-                                  'page_title'     => $title->getDBkey() )
+                       array(
+                               'rev_id=page_latest',
+                               'page_namespace' => $title->getNamespace(),
+                               'page_title'     => $title->getDBkey()
+                       )
                );
        }
 
@@ -493,13 +499,13 @@ class Revision implements IDBAccessObject {
                        $this->mTimestamp =         $row->rev_timestamp;
                        $this->mDeleted   = intval( $row->rev_deleted );
 
-                       if( !isset( $row->rev_parent_id ) ) {
-                               $this->mParentId = is_null( $row->rev_parent_id ) ? null : 0;
+                       if ( !isset( $row->rev_parent_id ) ) {
+                               $this->mParentId = null;
                        } else {
-                               $this->mParentId  = intval( $row->rev_parent_id );
+                               $this->mParentId = intval( $row->rev_parent_id );
                        }
 
-                       if( !isset( $row->rev_len ) || is_null( $row->rev_len ) ) {
+                       if ( !isset( $row->rev_len ) ) {
                                $this->mSize = null;
                        } else {
                                $this->mSize = intval( $row->rev_len );
@@ -532,7 +538,7 @@ class Revision implements IDBAccessObject {
                        }
 
                        // Lazy extraction...
-                       $this->mText      = null;
+                       $this->mText = null;
                        if( isset( $row->old_text ) ) {
                                $this->mTextRow = $row;
                        } else {
@@ -557,8 +563,8 @@ class Revision implements IDBAccessObject {
                        if ( !empty( $row['content'] ) ) {
                                //@todo: when is that set? test with external store setup! check out insertOn() [dk]
                                if ( !empty( $row['text_id'] ) ) {
-                                       throw new MWException( "Text already stored in external store (id {$row['text_id']}), "
-                                                                                       . "can't serialize content object" );
+                                       throw new MWException( "Text already stored in external store (id {$row['text_id']}), " .
+                                               "can't serialize content object" );
                                }
 
                                $row['content_model'] = $row['content']->getModel();
@@ -615,12 +621,12 @@ class Revision implements IDBAccessObject {
                                } elseif ( $this->mTitle->getArticleID() !== $this->mPage ) {
                                        // Got different page IDs. This may be legit (e.g. during undeletion),
                                        // but it seems worth mentioning it in the log.
-                                       wfDebug( "Page ID " . $this->mPage . " mismatches the ID "
-                                                       . $this->mTitle->getArticleID() . " provided by the Title object." );
+                                       wfDebug( "Page ID " . $this->mPage . " mismatches the ID " .
+                                               $this->mTitle->getArticleID() . " provided by the Title object." );
                                }
                        }
 
-                       $this->mCurrent   = false;
+                       $this->mCurrent = false;
 
                        // If we still have no length, see it we have the text to figure it out
                        if ( !$this->mSize ) {
@@ -718,7 +724,7 @@ class Revision implements IDBAccessObject {
                                array( 'page', 'revision' ),
                                self::selectPageFields(),
                                array( 'page_id=rev_page',
-                                          'rev_id' => $this->mId ),
+                                       'rev_id' => $this->mId ),
                                __METHOD__ );
                        if ( $row ) {
                                $this->mTitle = Title::newFromRow( $row );
index 0034afe..cf6c106 100644 (file)
@@ -381,7 +381,7 @@ class Sanitizer {
                                'h2', 'h3', 'h4', 'h5', 'h6', 'cite', 'code', 'em', 's',
                                'strike', 'strong', 'tt', 'var', 'div', 'center',
                                'blockquote', 'ol', 'ul', 'dl', 'table', 'caption', 'pre',
-                               'ruby', 'rt' , 'rb' , 'rp', 'p', 'span', 'abbr', 'dfn',
+                               'ruby', 'rt', 'rb', 'rp', 'p', 'span', 'abbr', 'dfn',
                                'kbd', 'samp'
                        );
                        if ( $wgHtml5 ) {
@@ -431,7 +431,7 @@ class Sanitizer {
                $extratags = array_flip( $extratags );
                $removetags = array_flip( $removetags );
                $htmlpairs = array_merge( $extratags, $htmlpairsStatic );
-               $htmlelements = array_diff_key( array_merge( $extratags, $htmlelementsStatic ) , $removetags );
+               $htmlelements = array_diff_key( array_merge( $extratags, $htmlelementsStatic ), $removetags );
 
                # Remove HTML comments
                $text = Sanitizer::removeHTMLcomments( $text );
@@ -604,9 +604,9 @@ class Sanitizer {
         */
        static function removeHTMLcomments( $text ) {
                wfProfileIn( __METHOD__ );
-               while (($start = strpos($text, '<!--')) !== false) {
-                       $end = strpos($text, '-->', $start + 4);
-                       if ($end === false) {
+               while ( ($start = strpos( $text, '<!--' ) ) !== false ) {
+                       $end = strpos( $text, '-->', $start + 4 );
+                       if ( $end === false ) {
                                # Unterminated comment; bail out
                                break;
                        }
@@ -615,22 +615,22 @@ class Sanitizer {
 
                        # Trim space and newline if the comment is both
                        # preceded and followed by a newline
-                       $spaceStart = max($start - 1, 0);
+                       $spaceStart = max( $start - 1, 0 );
                        $spaceLen = $end - $spaceStart;
-                       while (substr($text, $spaceStart, 1) === ' ' && $spaceStart > 0) {
+                       while ( substr( $text, $spaceStart, 1 ) === ' ' && $spaceStart > 0 ) {
                                $spaceStart--;
                                $spaceLen++;
                        }
-                       while (substr($text, $spaceStart + $spaceLen, 1) === ' ')
+                       while ( substr( $text, $spaceStart + $spaceLen, 1 ) === ' ' )
                                $spaceLen++;
-                       if (substr($text, $spaceStart, 1) === "\n" and substr($text, $spaceStart + $spaceLen, 1) === "\n") {
+                       if ( substr( $text, $spaceStart, 1 ) === "\n" and substr( $text, $spaceStart + $spaceLen, 1 ) === "\n" ) {
                                # Remove the comment, leading and trailing
                                # spaces, and leave only one newline.
-                               $text = substr_replace($text, "\n", $spaceStart, $spaceLen + 1);
+                               $text = substr_replace( $text, "\n", $spaceStart, $spaceLen + 1 );
                        }
                        else {
                                # Remove just the comment.
-                               $text = substr_replace($text, '', $start, $end - $start);
+                               $text = substr_replace( $text, '', $start, $end - $start );
                        }
                }
                wfProfileOut( __METHOD__ );
@@ -1039,7 +1039,7 @@ class Sanitizer {
                $id = str_replace( array_keys( $replace ), array_values( $replace ), $id );
 
                if ( !preg_match( '/^[a-zA-Z]/', $id )
-               && !in_array( 'noninitial', $options ) )  {
+               && !in_array( 'noninitial', $options ) ) {
                        // Initial character must be a letter!
                        $id = "x$id";
                }
diff --git a/includes/ScopedCallback.php b/includes/ScopedCallback.php
new file mode 100644 (file)
index 0000000..1d5b26b
--- /dev/null
@@ -0,0 +1,40 @@
+<?php
+/**
+ * This file deals with RAII style scoped callbacks.
+ *
+ * This program is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation; either version 2 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License along
+ * with this program; if not, write to the Free Software Foundation, Inc.,
+ * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
+ * http://www.gnu.org/copyleft/gpl.html
+ *
+ * @file
+ */
+
+/**
+ * Class for asserting that a callback happens when an dummy object leaves scope
+ */
+class ScopedCallback {
+       /** @var Closure */
+       protected $callback;
+
+       /**
+        * @param $callback Closure
+        */
+       public function __construct( Closure $callback ) {
+               $this->callback = $callback;
+       }
+
+       function __destruct() {
+               call_user_func( $this->callback );
+       }
+}
index f6c8245..273d75b 100644 (file)
@@ -50,19 +50,19 @@ if ( $wgLoadScript === false ) $wgLoadScript = "$wgScriptPath/load$wgScriptExten
 
 if ( $wgArticlePath === false ) {
        if ( $wgUsePathInfo ) {
-               $wgArticlePath      = "$wgScript/$1";
+               $wgArticlePath = "$wgScript/$1";
        } else {
-               $wgArticlePath      = "$wgScript?title=$1";
+               $wgArticlePath = "$wgScript?title=$1";
        }
 }
 
-if ( !empty($wgActionPaths) && !isset($wgActionPaths['view']) ) {
+if ( !empty( $wgActionPaths ) && !isset( $wgActionPaths['view'] ) ) {
        # 'view' is assumed the default action path everywhere in the code
        # but is rarely filled in $wgActionPaths
        $wgActionPaths['view'] = $wgArticlePath;
 }
 
-if ( !empty($wgActionPaths) && !isset($wgActionPaths['view']) ) {
+if ( !empty( $wgActionPaths ) && !isset( $wgActionPaths['view'] ) ) {
        # 'view' is assumed the default action path everywhere in the code
        # but is rarely filled in $wgActionPaths
        $wgActionPaths['view'] = $wgArticlePath ;
@@ -323,7 +323,7 @@ if ( !$wgEnotifMinorEdits ) {
 }
 
 # $wgDisabledActions is deprecated as of 1.18
-foreach( $wgDisabledActions as $action ){
+foreach( $wgDisabledActions as $action ) {
        $wgActions[$action] = false;
 }
 
@@ -353,12 +353,13 @@ if ( $wgAjaxUploadDestCheck ) {
 
 if ( $wgNewUserLog ) {
        # Add a new log type
-       $wgLogTypes[]                        = 'newusers';
-       $wgLogNames['newusers']              = 'newuserlogpage';
-       $wgLogHeaders['newusers']            = 'newuserlogpagetext';
+       $wgLogTypes[] = 'newusers';
+       $wgLogNames['newusers'] = 'newuserlogpage';
+       $wgLogHeaders['newusers'] = 'newuserlogpagetext';
        $wgLogActionsHandlers['newusers/newusers'] = 'NewUsersLogFormatter';
        $wgLogActionsHandlers['newusers/create'] = 'NewUsersLogFormatter';
        $wgLogActionsHandlers['newusers/create2'] = 'NewUsersLogFormatter';
+       $wgLogActionsHandlers['newusers/byemail'] = 'NewUsersLogFormatter';
        $wgLogActionsHandlers['newusers/autocreate'] = 'NewUsersLogFormatter';
 }
 
index 6a861d8..7e96d45 100644 (file)
@@ -83,7 +83,7 @@
  * $conf->settings = array(
  *     'wgMergeSetting' = array(
  *             # Value that will be shared among all wikis:
- *             'default' => array(  NS_USER => true ),
+ *             'default' => array( NS_USER => true ),
  *
  *             # Leading '+' means merging the array of value with the defaults
  *             '+beta' => array( NS_HELP => true ),
@@ -183,7 +183,7 @@ class SiteConfiguration {
         * @param $params Array: array of parameters.
         * @return Mixed the value of the setting requested.
         */
-       protected function getSetting( $settingName, $wiki, /*array*/ $params ){
+       protected function getSetting( $settingName, $wiki, /*array*/ $params ) {
                $retval = null;
                if( array_key_exists( $settingName, $this->settings ) ) {
                        $thisSetting =& $this->settings[$settingName];
@@ -205,7 +205,7 @@ class SiteConfiguration {
                                                        $retval = $thisSetting[$tag];
                                                }
                                                break 2;
-                                       } elseif( array_key_exists( "+$tag", $thisSetting ) && is_array($thisSetting["+$tag"]) ) {
+                                       } elseif( array_key_exists( "+$tag", $thisSetting ) && is_array( $thisSetting["+$tag"] ) ) {
                                                if( !isset( $retval ) ) {
                                                        $retval = array();
                                                }
@@ -216,7 +216,7 @@ class SiteConfiguration {
                                $suffix = $params['suffix'];
                                if( !is_null( $suffix ) ) {
                                        if( array_key_exists( $suffix, $thisSetting ) ) {
-                                               if ( isset($retval) && is_array($retval) && is_array($thisSetting[$suffix]) ) {
+                                               if ( isset( $retval ) && is_array( $retval ) && is_array( $thisSetting[$suffix] ) ) {
                                                        $retval = self::arrayMerge( $retval, $thisSetting[$suffix] );
                                                } else {
                                                        $retval = $thisSetting[$suffix];
@@ -360,9 +360,9 @@ class SiteConfiguration {
        public function extractGlobalSetting( $setting, $wiki, $params ) {
                $value = $this->getSetting( $setting, $wiki, $params );
                if ( !is_null( $value ) ) {
-                       if (substr($setting,0,1) == '+' && is_array($value)) {
-                               $setting = substr($setting,1);
-                               if ( is_array($GLOBALS[$setting]) ) {
+                       if ( substr( $setting, 0, 1 ) == '+' && is_array( $value ) ) {
+                               $setting = substr( $setting, 1 );
+                               if ( is_array( $GLOBALS[$setting] ) ) {
                                        $GLOBALS[$setting] = self::arrayMerge( $GLOBALS[$setting], $value );
                                } else {
                                        $GLOBALS[$setting] = $value;
@@ -395,7 +395,7 @@ class SiteConfiguration {
         * @param $wiki String
         * @return array
         */
-       protected function getWikiParams( $wiki ){
+       protected function getWikiParams( $wiki ) {
                static $default = array(
                        'suffix' => null,
                        'lang' => null,
@@ -413,7 +413,7 @@ class SiteConfiguration {
                        return $default;
                }
 
-               foreach( $default as $name => $def ){
+               foreach( $default as $name => $def ) {
                        if( !isset( $ret[$name] ) || ( is_array( $default[$name] ) && !is_array( $ret[$name] ) ) ) {
                                $ret[$name] = $default[$name];
                        }
@@ -434,7 +434,7 @@ class SiteConfiguration {
         * @param $wikiTags Array The tags assigned to the wiki.
         * @return array
         */
-       protected function mergeParams( $wiki, $suffix, /*array*/ $params, /*array*/ $wikiTags ){
+       protected function mergeParams( $wiki, $suffix, /*array*/ $params, /*array*/ $wikiTags ) {
                $ret = $this->getWikiParams( $wiki );
 
                if( is_null( $ret['suffix'] ) ) {
@@ -446,7 +446,7 @@ class SiteConfiguration {
                $ret['params'] += $params;
 
                // Automatically fill that ones if needed
-               if( !isset( $ret['params']['lang'] ) && !is_null( $ret['lang'] ) ){
+               if( !isset( $ret['params']['lang'] ) && !is_null( $ret['lang'] ) ) {
                        $ret['params']['lang'] = $ret['lang'];
                }
                if( !isset( $ret['params']['site'] ) && !is_null( $ret['suffix'] ) ) {
@@ -509,9 +509,9 @@ class SiteConfiguration {
                $out = $array1;
                for( $i = 1; $i < func_num_args(); $i++ ) {
                        foreach( func_get_arg( $i ) as $key => $value ) {
-                               if ( isset($out[$key]) && is_array($out[$key]) && is_array($value) ) {
+                               if ( isset( $out[$key] ) && is_array( $out[$key] ) && is_array( $value ) ) {
                                        $out[$key] = self::arrayMerge( $out[$key], $value );
-                               } elseif ( !isset($out[$key]) || !$out[$key] && !is_numeric($key) ) {
+                               } elseif ( !isset( $out[$key] ) || !$out[$key] && !is_numeric( $key ) ) {
                                        // Values that evaluate to true given precedence, for the primary purpose of merging permissions arrays.
                                        $out[$key] = $value;
                                } elseif ( is_numeric( $key ) ) {
index 4889863..723ede4 100644 (file)
@@ -262,7 +262,7 @@ abstract class Skin extends ContextSource {
         * @return Title
         */
        public function getRelevantTitle() {
-               if ( isset($this->mRelevantTitle) ) {
+               if ( isset( $this->mRelevantTitle ) ) {
                        return $this->mRelevantTitle;
                }
                return $this->getTitle();
@@ -286,7 +286,7 @@ abstract class Skin extends ContextSource {
         * @return User
         */
        public function getRelevantUser() {
-               if ( isset($this->mRelevantUser) ) {
+               if ( isset( $this->mRelevantUser ) ) {
                        return $this->mRelevantUser;
                }
                $title = $this->getRelevantTitle();
@@ -435,7 +435,7 @@ abstract class Skin extends ContextSource {
                $colon = $this->msg( 'colon-separator' )->escaped();
 
                if ( !empty( $allCats['normal'] ) ) {
-                       $t = $embed . implode( "{$pop}{$embed}" , $allCats['normal'] ) . $pop;
+                       $t = $embed . implode( "{$pop}{$embed}", $allCats['normal'] ) . $pop;
 
                        $msg = $this->msg( 'pagecategories' )->numParams( count( $allCats['normal'] ) )->escaped();
                        $linkPage = wfMessage( 'pagecategorieslink' )->inContentLanguage()->text();
@@ -456,7 +456,7 @@ abstract class Skin extends ContextSource {
 
                        $s .= "<div id=\"mw-hidden-catlinks\" class=\"mw-hidden-catlinks$class\">" .
                                $this->msg( 'hidden-categories' )->numParams( count( $allCats['hidden'] ) )->escaped() .
-                               $colon . '<ul>' . $embed . implode( "{$pop}{$embed}" , $allCats['hidden'] ) . $pop . '</ul>' .
+                               $colon . '<ul>' . $embed . implode( "{$pop}{$embed}", $allCats['hidden'] ) . $pop . '</ul>' .
                                '</div>';
                }
 
@@ -499,7 +499,7 @@ abstract class Skin extends ContextSource {
 
                        # add our current element to the list
                        $eltitle = Title::newFromText( $element );
-                       $return .=  Linker::link( $eltitle, htmlspecialchars( $eltitle->getText() ) );
+                       $return .= Linker::link( $eltitle, htmlspecialchars( $eltitle->getText() ) );
                }
 
                return $return;
@@ -860,7 +860,7 @@ abstract class Skin extends ContextSource {
                if ( is_string( $icon ) ) {
                        $html = $icon;
                } else { // Assuming array
-                       $url = isset($icon["url"]) ? $icon["url"] : null;
+                       $url = isset( $icon["url"] ) ? $icon["url"] : null;
                        unset( $icon["url"] );
                        if ( isset( $icon["src"] ) && $withImage === 'withImage' ) {
                                $html = Html::element( 'img', $icon ); // do this the lazy way, just pass icon data as an attribute array
index 7fb17a7..c1c7219 100644 (file)
@@ -120,7 +120,7 @@ class LegacyTemplate extends BaseTemplate {
                }
 
                $s .= "\n<div id='content'>\n<div id='topbar'>\n" .
-                 "<table cellspacing='0' style='width: 100%;'>\n<tr>\n";
+                       "<table cellspacing='0' style='width: 100%;'>\n<tr>\n";
 
                if ( $this->getSkin()->qbSetting() == 0 ) {
                        $s .= "<td class='top' style='text-align: left; vertical-align: top;' rowspan='{$rows}'>\n" .
@@ -179,10 +179,10 @@ class LegacyTemplate extends BaseTemplate {
                $search = $wgRequest->getText( 'search' );
 
                $s = '<form id="searchform' . $this->searchboxes . '" name="search" class="inline" method="post" action="'
-                 . $this->getSkin()->escapeSearchLink() . "\">\n"
-                 . '<input type="text" id="searchInput' . $this->searchboxes . '" name="search" size="19" value="'
-                 . htmlspecialchars( substr( $search, 0, 256 ) ) . "\" />\n"
-                 . '<input type="submit" name="go" value="' . wfMessage( 'searcharticle' )->text() . '" />';
+                       . $this->getSkin()->escapeSearchLink() . "\">\n"
+                       . '<input type="text" id="searchInput' . $this->searchboxes . '" name="search" size="19" value="'
+                       . htmlspecialchars( substr( $search, 0, 256 ) ) . "\" />\n"
+                       . '<input type="submit" name="go" value="' . wfMessage( 'searcharticle' )->text() . '" />';
 
                if ( $wgUseTwoButtonsSearchForm ) {
                        $s .= '&#160;<input type="submit" name="fulltext" value="' . wfMessage( 'searchbutton' )->text() . "\" />\n";
@@ -253,7 +253,7 @@ class LegacyTemplate extends BaseTemplate {
                $lang = $title->getPageLanguage();
                $variants = $lang->getVariants();
 
-               if ( !$wgDisableLangConversion && sizeof( $variants ) > 1
+               if ( !$wgDisableLangConversion && count( $variants ) > 1
                        && !$title->isSpecialPage() ) {
                        foreach ( $variants as $code ) {
                                $varname = $lang->getVariantname( $code );
@@ -263,7 +263,7 @@ class LegacyTemplate extends BaseTemplate {
                                }
                                $s = $wgLang->pipeList( array(
                                        $s,
-                                       '<a href="' . htmlspecialchars( $title->getLocalURL( 'variant=' . $code ) ) . '" lang="' . $code . '" hreflang="' . $code .  '">' . htmlspecialchars( $varname ) . '</a>'
+                                       '<a href="' . htmlspecialchars( $title->getLocalURL( 'variant=' . $code ) ) . '" lang="' . $code . '" hreflang="' . $code . '">' . htmlspecialchars( $varname ) . '</a>'
                                ) );
                        }
                }
@@ -345,7 +345,7 @@ class LegacyTemplate extends BaseTemplate {
                                        $s .= $this->deleteThisPage();
                                }
 
-                               if ( $wgUser->isAllowed( 'protect' ) ) {
+                               if ( $wgUser->isAllowed( 'protect' ) && $title->getRestrictionTypes() ) {
                                        $s .= $sep . $this->protectThisPage();
                                }
 
@@ -610,7 +610,7 @@ class LegacyTemplate extends BaseTemplate {
                $diff = $wgRequest->getVal( 'diff' );
                $title = $this->getSkin()->getTitle();
 
-               if ( $title->getArticleID() && ( ! $diff ) && $wgUser->isAllowed( 'protect' ) ) {
+               if ( $title->getArticleID() && ( ! $diff ) && $wgUser->isAllowed( 'protect' ) && $title->getRestrictionTypes() ) {
                        if ( $title->isProtected() ) {
                                $text = wfMessage( 'unprotectthispage' )->text();
                                $query = array( 'action' => 'unprotect' );
index da4af61..86972ee 100644 (file)
@@ -169,7 +169,7 @@ class SkinTemplate extends Skin {
                        unset( $query['returnto'] );
                        unset( $query['returntoquery'] );
                }
-               $this->thisquery = wfArrayToCGI( $query );
+               $this->thisquery = wfArrayToCgi( $query );
                $this->loggedin = $user->isLoggedIn();
                $this->username = $user->getName();
 
@@ -219,7 +219,7 @@ class SkinTemplate extends Skin {
                if ( $subpagestr !== '' ) {
                        $subpagestr = '<span class="subpages">' . $subpagestr . '</span>';
                }
-               $tpl->set( 'subtitle',  $subpagestr . $out->getSubtitle() );
+               $tpl->set( 'subtitle', $subpagestr . $out->getSubtitle() );
 
                $undelete = $this->getUndeleteLink();
                if ( $undelete === '' ) {
@@ -403,7 +403,7 @@ class SkinTemplate extends Skin {
                        $pageLang = $title->getPageViewLanguage();
                        $realBodyAttribs['lang'] = $pageLang->getHtmlCode();
                        $realBodyAttribs['dir'] = $pageLang->getDir();
-                       $realBodyAttribs['class'] = 'mw-content-'.$pageLang->getDir();
+                       $realBodyAttribs['class'] = 'mw-content-' . $pageLang->getDir();
                }
 
                $out->mBodytext = Html::rawElement( 'div', $realBodyAttribs, $out->mBodytext );
@@ -413,25 +413,28 @@ class SkinTemplate extends Skin {
                $language_urls = array();
 
                if ( !$wgHideInterlanguageLinks ) {
-                       foreach( $out->getLanguageLinks() as $l ) {
-                               $tmp = explode( ':', $l, 2 );
-                               $class = 'interwiki-' . $tmp[0];
-                               unset( $tmp );
-                               $nt = Title::newFromText( $l );
-                               if ( $nt ) {
-                                       $ilLangName = Language::fetchLanguageName( $nt->getInterwiki() );
+                       foreach( $out->getLanguageLinks() as $languageLinkText ) {
+                               $languageLinkParts = explode( ':', $languageLinkText, 2 );
+                               $class = 'interwiki-' . $languageLinkParts[0];
+                               unset( $languageLinkParts );
+                               $languageLinkTitle = Title::newFromText( $languageLinkText );
+                               if ( $languageLinkTitle ) {
+                                       $ilInterwikiCode = $languageLinkTitle->getInterwiki();
+                                       $ilLangName = Language::fetchLanguageName( $ilInterwikiCode );
+
                                        if ( strval( $ilLangName ) === '' ) {
-                                               $ilLangName = $l;
+                                               $ilLangName = $languageLinkText;
                                        } else {
                                                $ilLangName = $this->formatLanguageName( $ilLangName );
                                        }
+
                                        $language_urls[] = array(
-                                               'href' => $nt->getFullURL(),
+                                               'href' => $languageLinkTitle->getFullURL(),
                                                'text' => $ilLangName,
-                                               'title' => $nt->getText(),
+                                               'title' => $languageLinkTitle->getText(),
                                                'class' => $class,
-                                               'lang' => $nt->getInterwiki(),
-                                               'hreflang' => $nt->getInterwiki(),
+                                               'lang' => $ilInterwikiCode,
+                                               'hreflang' => $ilInterwikiCode
                                        );
                                }
                        }
@@ -574,7 +577,7 @@ class SkinTemplate extends Skin {
                        $a['wpStickHTTPS'] = true;
                }
 
-               $returnto = wfArrayToCGI( $a );
+               $returnto = wfArrayToCgi( $a );
                if( $this->loggedin ) {
                        $personal_urls['userpage'] = array(
                                'text' => $this->username,
@@ -690,12 +693,14 @@ class SkinTemplate extends Skin {
        }
 
        /**
-        * TODO document
-        * @param  $title Title
-        * @param  $message String message key
-        * @param  $selected Bool
-        * @param  $query String
-        * @param  $checkEdit Bool
+        * Builds an array with tab definition
+        *
+        * @param Title $title page where the tab links to
+        * @param string|array $message message key or an array of message keys (will fall back)
+        * @param boolean $selected display the tab as selected
+        * @param string $query query string attached to tab URL
+        * @param boolean $checkEdit check if $title exists and mark with .new if one doesn't
+        *
         * @return array
         */
        function tabAction( $title, $message, $selected, $query = '', $checkEdit = false ) {
@@ -705,7 +710,11 @@ class SkinTemplate extends Skin {
                }
                if( $checkEdit && !$title->isKnown() ) {
                        $classes[] = 'new';
-                       $query = 'action=edit&redlink=1';
+                       if ( $query !== '' ) {
+                               $query = 'action=edit&redlink=1&' . $query;
+                       } else {
+                               $query = 'action=edit&redlink=1';
+                       }
                }
 
                // wfMessageFallback will nicely accept $message as an array of fallbacks
@@ -957,7 +966,7 @@ class SkinTemplate extends Skin {
                                        }
                                }
 
-                               if ( $title->getNamespace() !== NS_MEDIAWIKI && $title->quickUserCan( 'protect', $user ) ) {
+                               if ( $title->getNamespace() !== NS_MEDIAWIKI && $title->quickUserCan( 'protect', $user ) && $title->getRestrictionTypes() ) {
                                        $mode = $title->isProtected() ? 'unprotect' : 'protect';
                                        $content_navigation['actions'][$mode] = array(
                                                'class' => ( $onPage && $action == $mode ) ? 'selected' : false,
@@ -1002,6 +1011,12 @@ class SkinTemplate extends Skin {
                                        // Gets preferred variant (note that user preference is
                                        // only possible for wiki content language variant)
                                        $preferred = $pageLang->getPreferredVariant();
+                                       if ( Action::getActionName( $this ) === 'view' ) {
+                                               $params = $request->getQueryValues();
+                                               unset( $params['title'] );
+                                       } else {
+                                               $params = array();
+                                       }
                                        // Loops over each variant
                                        foreach( $variants as $code ) {
                                                // Gets variant name from language code
@@ -1015,7 +1030,7 @@ class SkinTemplate extends Skin {
                                                $content_navigation['variants'][] = array(
                                                        'class' => ( $code == $preferred ) ? 'selected' : false,
                                                        'text' => $varname,
-                                                       'href' => $title->getLocalURL( array( 'variant' => $code ) ),
+                                                       'href' => $title->getLocalURL( array( 'variant' => $code ) + $params ),
                                                        'lang' => $code,
                                                        'hreflang' => $code
                                                );
@@ -1036,7 +1051,7 @@ class SkinTemplate extends Skin {
                }
 
                // Equiv to SkinTemplateContentActions
-               wfRunHooks( 'SkinTemplateNavigation::Universal', array( &$this,  &$content_navigation ) );
+               wfRunHooks( 'SkinTemplateNavigation::Universal', array( &$this, &$content_navigation ) );
 
                // Setup xml ids and tooltip info
                foreach ( $content_navigation as $section => &$links ) {
index e844d93..3b3a5ee 100644 (file)
@@ -598,7 +598,7 @@ class SpecialPage {
         *
         * @param $subPage string|null
         */
-       public final function run( $subPage ) {
+       final public function run( $subPage ) {
                /**
                 * Gets called before @see SpecialPage::execute.
                 *
@@ -846,7 +846,7 @@ class SpecialPage {
 
                foreach ( $wgFeedClasses as $format => $class ) {
                        $theseParams = $params + array( 'feedformat' => $format );
-                       $url = $feedTemplate . wfArrayToCGI( $theseParams );
+                       $url = $feedTemplate . wfArrayToCgi( $theseParams );
                        $this->getOutput()->addFeedLink( $format, $url );
                }
        }
@@ -863,7 +863,7 @@ abstract class FormSpecialPage extends SpecialPage {
         * Get an HTMLForm descriptor array
         * @return Array
         */
-       protected abstract function getFormFields();
+       abstract protected function getFormFields();
 
        /**
         * Add pre- or post-text to the form
@@ -878,6 +878,16 @@ abstract class FormSpecialPage extends SpecialPage {
         */
        protected function alterForm( HTMLForm $form ) {}
 
+       /**
+        * Get message prefix for HTMLForm
+        *
+        * @since 1.21
+        * @return string
+        */
+       protected function getMessagePrefix() {
+               return strtolower( $this->getName() );
+       }
+
        /**
         * Get the HTMLForm to control behaviour
         * @return HTMLForm|null
@@ -885,16 +895,16 @@ abstract class FormSpecialPage extends SpecialPage {
        protected function getForm() {
                $this->fields = $this->getFormFields();
 
-               $form = new HTMLForm( $this->fields, $this->getContext() );
+               $form = new HTMLForm( $this->fields, $this->getContext(), $this->getMessagePrefix() );
                $form->setSubmitCallback( array( $this, 'onSubmit' ) );
-               $form->setWrapperLegend( $this->msg( strtolower( $this->getName() ) . '-legend' ) );
+               $form->setWrapperLegend( $this->msg( $this->getMessagePrefix() . '-legend' ) );
                $form->addHeaderText(
-                       $this->msg( strtolower( $this->getName() ) . '-text' )->parseAsBlock() );
+                       $this->msg( $this->getMessagePrefix() . '-text' )->parseAsBlock() );
 
                // Retain query parameters (uselang etc)
                $params = array_diff_key(
                        $this->getRequest()->getQueryValues(), array( 'title' => null ) );
-               $form->addHiddenField( 'redirectparams', wfArrayToCGI( $params ) );
+               $form->addHiddenField( 'redirectparams', wfArrayToCgi( $params ) );
 
                $form->addPreText( $this->preText() );
                $form->addPostText( $this->postText() );
@@ -911,13 +921,13 @@ abstract class FormSpecialPage extends SpecialPage {
         * @param  $data Array
         * @return Bool|Array true for success, false for didn't-try, array of errors on failure
         */
-       public abstract function onSubmit( array $data );
+       abstract public function onSubmit( array $data );
 
        /**
         * Do something exciting on successful processing of the form, most likely to show a
         * confirmation message
         */
-       public abstract function onSuccess();
+       abstract public function onSuccess();
 
        /**
         * Basic SpecialPage workflow: get a form, send it to the user; get some data back,
@@ -1035,7 +1045,7 @@ abstract class RedirectSpecialPage extends UnlistedSpecialPage {
                // Redirect to index.php with query parameters
                } elseif ( $redirect === true ) {
                        global $wgScript;
-                       $url = $wgScript . '?' . wfArrayToCGI( $query );
+                       $url = $wgScript . '?' . wfArrayToCgi( $query );
                        $this->getOutput()->redirect( $url );
                        return $redirect;
                } else {
@@ -1268,7 +1278,7 @@ class SpecialMytalk extends RedirectSpecialArticle {
  */
 class SpecialMycontributions extends RedirectSpecialPage {
        function __construct() {
-               parent::__construct(  'Mycontributions' );
+               parent::__construct( 'Mycontributions' );
                $this->mAllowedRedirectParams = array( 'limit', 'namespace', 'tagfilter',
                        'offset', 'dir', 'year', 'month', 'feed' );
        }
index fa1bca4..add7efc 100644 (file)
@@ -95,7 +95,7 @@ class SpecialPageFactory {
                'Preferences'               => 'SpecialPreferences',
                'Contributions'             => 'SpecialContributions',
                'Listgrouprights'           => 'SpecialListGroupRights',
-               'Listusers'                 => 'SpecialListUsers' ,
+               'Listusers'                 => 'SpecialListUsers',
                'Listadmins'                => 'SpecialListAdmins',
                'Listbots'                  => 'SpecialListBots',
                'Activeusers'               => 'SpecialActiveUsers',
@@ -119,7 +119,7 @@ class SpecialPageFactory {
                'Upload'                    => 'SpecialUpload',
                'UploadStash'               => 'SpecialUploadStash',
 
-               // Wiki data and tools
+               // Data and tools
                'Statistics'                => 'SpecialStatistics',
                'Allmessages'               => 'SpecialAllmessages',
                'Version'                   => 'SpecialVersion',
@@ -336,7 +336,7 @@ class SpecialPageFactory {
         * Find the object with a given name and return it (or NULL)
         *
         * @param $name String Special page name, may be localised and/or an alias
-        * @return SpecialPage object or null if the page doesn't exist
+        * @return SpecialPage|null SpecialPage object or null if the page doesn't exist
         */
        public static function getPage( $name ) {
                list( $realName, /*...*/ ) = self::resolveAlias( $name );
@@ -371,12 +371,10 @@ class SpecialPageFactory {
                        global $wgUser;
                        $user = $wgUser;
                }
-               $context = RequestContext::newExtraneousContext( Title::newMainPage() );
-               $context->setUser( $user );
                foreach ( self::getList() as $name => $rec ) {
                        $page = self::getPage( $name );
                        if ( $page ) { // not null
-                               $page->setContext( $context );
+                               $page->setContext( RequestContext::getMain() );
                                if ( $page->isListed()
                                        && ( !$page->isRestricted() || $page->userCanExecute( $user ) )
                                ) {
@@ -478,7 +476,7 @@ class SpecialPageFactory {
                        if ( $name != $page->getLocalName() && !$context->getRequest()->wasPosted() ) {
                                $query = $context->getRequest()->getQueryValues();
                                unset( $query['title'] );
-                               $query = wfArrayToCGI( $query );
+                               $query = wfArrayToCgi( $query );
                                $title = $page->getTitle( $par );
                                $url = $title->getFullUrl( $query );
                                $context->getOutput()->redirect( $url );
index 7d75f2c..f5fd195 100644 (file)
@@ -293,7 +293,7 @@ class SquidPurgeClient {
                        if ( count( $lines ) < 2 ) {
                                return 'done';
                        }
-                       if ( $this->readState == 'status' )  {
+                       if ( $this->readState == 'status' ) {
                                $this->processStatusLine( $lines[0] );
                        } else { // header
                                $this->processHeaderLine( $lines[0] );
@@ -318,7 +318,7 @@ class SquidPurgeClient {
                                return 'done';
                        }
                default:
-                       throw new MWException( __METHOD__.': unexpected state' );
+                       throw new MWException( __METHOD__ . ': unexpected state' );
                }
        }
 
@@ -373,7 +373,7 @@ class SquidPurgeClient {
         * @param $msg string
         */
        protected function log( $msg ) {
-               wfDebugLog( 'squid', __CLASS__." ($this->host): $msg\n" );
+               wfDebugLog( 'squid', __CLASS__ . " ($this->host): $msg\n" );
        }
 }
 
@@ -429,14 +429,14 @@ class SquidPurgeClientPool {
                        $numReady = socket_select( $readSockets, $writeSockets, $exceptSockets, $timeout );
                        wfRestoreWarnings();
                        if ( $numReady === false ) {
-                               wfDebugLog( 'squid', __METHOD__.': Error in stream_select: ' .
+                               wfDebugLog( 'squid', __METHOD__ . ': Error in stream_select: ' .
                                        socket_strerror( socket_last_error() ) . "\n" );
                                break;
                        }
                        // Check for timeout, use 1% tolerance since we aimed at having socket_select()
                        // exit at precisely the overall timeout
                        if ( microtime( true ) - $startTime > $this->timeout * 0.99 ) {
-                               wfDebugLog( 'squid', __CLASS__.": timeout ({$this->timeout}s)\n" );
+                               wfDebugLog( 'squid', __CLASS__ . ": timeout ({$this->timeout}s)\n" );
                                break;
                        } elseif ( !$numReady ) {
                                continue;
index 2553f54..4298aee 100644 (file)
@@ -176,10 +176,10 @@ class Status {
                if ( count( $this->errors ) == 0 ) {
                        if ( $this->ok ) {
                                $this->fatal( 'internalerror_info',
-                                       __METHOD__." called for a good result, this is incorrect\n" );
+                                       __METHOD__ . " called for a good result, this is incorrect\n" );
                        } else {
                                $this->fatal( 'internalerror_info',
-                                       __METHOD__.": Invalid result object: no error text but not OK\n" );
+                                       __METHOD__ . ": Invalid result object: no error text but not OK\n" );
                        }
                }
                if ( count( $this->errors ) == 1 ) {
@@ -190,7 +190,7 @@ class Status {
                                $s = wfMessage( $longContext, "* $s\n" )->plain();
                        }
                } else {
-                       $s = '* '. implode("\n* ",
+                       $s = '* '. implode( "\n* ",
                                $this->getErrorMessageArray( $this->errors ) ) . "\n";
                        if ( $longContext ) {
                                $s = wfMessage( $longContext, $s )->plain();
@@ -216,7 +216,7 @@ class Status {
                                $msg = $error['message'];
                        } elseif ( isset( $error['message'] ) && isset( $error['params'] ) ) {
                                $msg = wfMessage( $error['message'],
-                                       array_map( 'wfEscapeWikiText', $this->cleanParams( $error['params'] ) )  );
+                                       array_map( 'wfEscapeWikiText', $this->cleanParams( $error['params'] ) ) );
                        } else {
                                $msgName = array_shift( $error );
                                $msg = wfMessage( $msgName,
index 54a85dc..6647de4 100644 (file)
@@ -135,12 +135,12 @@ class StringUtils {
                $m = array();
 
                while ( $inputPos < strlen( $subject ) &&
-                 preg_match( "!($encStart)|($encEnd)!S$flags", $subject, $m, PREG_OFFSET_CAPTURE, $inputPos ) )
+                       preg_match( "!($encStart)|($encEnd)!S$flags", $subject, $m, PREG_OFFSET_CAPTURE, $inputPos ) )
                {
                        $tokenOffset = $m[0][1];
                        if ( $m[1][0] != '' ) {
                                if ( $foundStart &&
-                                 $strcmp( $endDelim, substr( $subject, $tokenOffset, $endLength ) ) == 0 )
+                                       $strcmp( $endDelim, substr( $subject, $tokenOffset, $endLength ) ) == 0 )
                                {
                                        # An end match is present at the same location
                                        $tokenType = 'end';
@@ -432,7 +432,7 @@ class ReplacementArray {
         * @param $from string
         */
        function removePair( $from ) {
-               unset($this->data[$from]);
+               unset( $this->data[$from] );
                $this->fss = false;
        }
 
index cc0adb7..8a1e758 100644 (file)
@@ -118,7 +118,7 @@ class StubObject {
                }
 
                if ( get_class( $GLOBALS[$this->mGlobal] ) != $this->mClass ) {
-                       $fname = __METHOD__.'-'.$this->mGlobal;
+                       $fname = __METHOD__ . '-' . $this->mGlobal;
                        wfProfileIn( $fname );
                        $caller = wfGetCaller( $level );
                        if ( ++$recursionLevel > 2 ) {
index 3b7b801..630ac53 100644 (file)
@@ -54,7 +54,9 @@ class MWTimestamp {
                "seconds" => 1000, // 1000 milliseconds per second
                "minutes" => 60, // 60 seconds per minute
                "hours" => 60, // 60 minutes per hour
-               "days" => 24 // 24 hours per day
+               "days" => 24, // 24 hours per day
+               "months" => 30, // approximately 30 days per month
+               "years" => 12, // 12 months per year
        );
 
        /**
index 896218b..6aa4cd2 100644 (file)
@@ -689,7 +689,7 @@ class Title {
                }
 
                if( !$this->mContentModel ) {
-                       throw new MWException( "failed to determin content model!" );
+                       throw new MWException( 'Failed to determine content model!' );
                }
 
                return $this->mContentModel;
@@ -1330,7 +1330,7 @@ class Title {
         * second argument named variant. This was deprecated in favor
         * of passing an array of option with a "variant" key
         * Once $query2 is removed for good, this helper can be dropped
-        * andthe wfArrayToCGI moved to getLocalURL();
+        * andthe wfArrayToCgi moved to getLocalURL();
         *
         * @since 1.19 (r105919)
         * @param $query
@@ -1342,15 +1342,15 @@ class Title {
                        wfDeprecated( "Title::get{Canonical,Full,Link,Local} method called with a second parameter is deprecated. Add your parameter to an array passed as the first parameter.", "1.19" );
                }
                if ( is_array( $query ) ) {
-                       $query = wfArrayToCGI( $query );
+                       $query = wfArrayToCgi( $query );
                }
                if ( $query2 ) {
                        if ( is_string( $query2 ) ) {
                                // $query2 is a string, we will consider this to be
                                // a deprecated $variant argument and add it to the query
-                               $query2 = wfArrayToCGI( array( 'variant' => $query2 ) );
+                               $query2 = wfArrayToCgi( array( 'variant' => $query2 ) );
                        } else {
-                               $query2 = wfArrayToCGI( $query2 );
+                               $query2 = wfArrayToCgi( $query2 );
                        }
                        // If we have $query content add a & to it first
                        if ( $query ) {
@@ -1838,10 +1838,9 @@ class Title {
         * @return Array list of errors
         */
        private function checkSpecialsAndNSPermissions( $action, $user, $errors, $doExpensiveQueries, $short ) {
-               # Only 'createaccount' and 'execute' can be performed on
-               # special pages, which don't actually exist in the DB.
-               $specialOKActions = array( 'createaccount', 'execute', 'read' );
-               if ( NS_SPECIAL == $this->mNamespace && !in_array( $action, $specialOKActions ) ) {
+               # Only 'createaccount' can be performed on special pages,
+               # which don't actually exist in the DB.
+               if ( NS_SPECIAL == $this->mNamespace && $action !== 'createaccount' ) {
                        $errors[] = array( 'ns-specialprotected' );
                }
 
@@ -1850,7 +1849,7 @@ class Title {
                        $ns = $this->mNamespace == NS_MAIN ?
                                wfMessage( 'nstab-main' )->text() : $this->getNsText();
                        $errors[] = $this->mNamespace == NS_MEDIAWIKI ?
-                               array( 'protectedinterface' ) : array( 'namespaceprotected',  $ns );
+                               array( 'protectedinterface' ) : array( 'namespaceprotected', $ns );
                }
 
                return $errors;
@@ -2088,7 +2087,7 @@ class Title {
         * @return Array list of errors
         */
        private function checkReadPermissions( $action, $user, $errors, $doExpensiveQueries, $short ) {
-               global $wgWhitelistRead, $wgRevokePermissions;
+               global $wgWhitelistRead, $wgWhitelistReadRegexp, $wgRevokePermissions;
                static $useShortcut = null;
 
                # Initialize the $useShortcut boolean, to determine if we can skip quite a bit of code below
@@ -2156,6 +2155,17 @@ class Title {
                        }
                }
 
+               if( !$whitelisted && is_array( $wgWhitelistReadRegexp ) && !empty( $wgWhitelistReadRegexp ) ) {
+                       $name = $this->getPrefixedText();
+                       // Check for regex whitelisting
+                       foreach ( $wgWhitelistReadRegexp as $listItem ) {
+                               if ( preg_match( $listItem, $name ) ) {
+                                       $whitelisted = true;
+                                       break;
+                               }
+                       }
+               }
+
                if ( !$whitelisted ) {
                        # If the title is not whitelisted, give extensions a chance to do so...
                        wfRunHooks( 'TitleReadWhitelist', array( $this, $user, &$whitelisted ) );
@@ -2361,7 +2371,8 @@ class Title {
                $expiry = array( 'create' => $expiry );
 
                $page = WikiPage::factory( $this );
-               $status = $page->doUpdateRestrictions( $limit, $expiry, false, $reason, $wgUser );
+               $cascade = false;
+               $status = $page->doUpdateRestrictions( $limit, $expiry, $cascade, $reason, $wgUser );
 
                return $status->isOK();
        }
@@ -2985,6 +2996,7 @@ class Title {
                        return $this->mLatestID = 0;
                }
                $linkCache = LinkCache::singleton();
+               $linkCache->addLinkObj( $this );
                $cached = $linkCache->getGoodLinkFieldObj( $this, 'revision' );
                if ( $cached === null ) { # check the assumption that the cache actually knows about this title
                        # XXX: this does apparently happen, see https://bugzilla.wikimedia.org/show_bug.cgi?id=37209
@@ -3502,9 +3514,11 @@ class Title {
                if ( !$wgContentHandlerUseDB &&
                                $this->getContentModel() !== $nt->getContentModel() ) {
                        // can't move a page if that would change the page's content model
-                       $errors[] = array( 'bad-target-model',
-                                                       ContentHandler::getLocalizedName( $this->getContentModel() ),
-                                                       ContentHandler::getLocalizedName( $nt->getContentModel() ) );
+                       $errors[] = array(
+                               'bad-target-model',
+                               ContentHandler::getLocalizedName( $this->getContentModel() ),
+                               ContentHandler::getLocalizedName( $nt->getContentModel() )
+                       );
                }
 
                // Image-specific checks
@@ -3977,7 +3991,7 @@ class Title {
                }
                # Get the article text
                $rev = Revision::newFromTitle( $nt, false, Revision::READ_LATEST );
-               if( !is_object( $rev ) ){
+               if( !is_object( $rev ) ) {
                        return false;
                }
                $content = $rev->getContent();
@@ -4029,7 +4043,7 @@ class Title {
                        array()
                );
 
-               if ( $dbr->numRows( $res ) > 0 ) {
+               if ( $res->numRows() > 0 ) {
                        foreach ( $res as $row ) {
                                // $data[] = Title::newFromText($wgContLang->getNSText ( NS_CATEGORY ).':'.$row->cl_to);
                                $data[$wgContLang->getNSText( NS_CATEGORY ) . ':' . $row->cl_to] = $this->getFullText();
@@ -4461,6 +4475,7 @@ class Title {
         * @return Bool true if the update succeded
         */
        public function invalidateCache() {
+               global $wgMemc;
                if ( wfReadOnly() ) {
                        return false;
                }
@@ -4472,6 +4487,14 @@ class Title {
                        __METHOD__
                );
                HTMLFileCache::clearFileCache( $this );
+
+               // Clear page info.
+               $revision = WikiPage::factory( $this )->getRevision();
+               if( $revision !== null ) {
+                       $memcKey = wfMemcKey( 'infoaction', $this->getPrefixedText(), $revision->getId() );
+                       $success = $success && $wgMemc->delete( $memcKey );
+               }
+
                return $success;
        }
 
index 28ff630..309d755 100644 (file)
@@ -253,7 +253,7 @@ class User {
        /**
         * @return String
         */
-       function __toString(){
+       function __toString() {
                return $this->getName();
        }
 
@@ -293,6 +293,7 @@ class User {
                                wfRunHooks( 'UserLoadAfterLoadFromSession', array( $this ) );
                                break;
                        default:
+                               wfProfileOut( __METHOD__ );
                                throw new MWException( "Unrecognised value for User->mFrom: \"{$this->mFrom}\"" );
                }
                wfProfileOut( __METHOD__ );
@@ -332,6 +333,9 @@ class User {
                                $this->$name = $data[$name];
                        }
                }
+
+               $this->mLoadedItems = true;
+
                return true;
        }
 
@@ -543,7 +547,7 @@ class User {
         * @return Bool
         */
        public static function isIP( $name ) {
-               return preg_match('/^\d{1,3}\.\d{1,3}\.\d{1,3}\.(?:xxx|\d{1,3})$/',$name) || IP::isIPv6($name);
+               return preg_match( '/^\d{1,3}\.\d{1,3}\.\d{1,3}\.(?:xxx|\d{1,3})$/', $name ) || IP::isIPv6( $name );
        }
 
        /**
@@ -1201,6 +1205,7 @@ class User {
                $this->mRights = null;
                $this->mEffectiveGroups = null;
                $this->mImplicitGroups = null;
+               $this->mGroups = null;
                $this->mOptions = null;
                $this->mOptionsLoaded = false;
                $this->mEditCount = null;
@@ -1446,7 +1451,7 @@ class User {
                        // But this is a crappy hack and should die.
                        return false;
                }
-               return !$this->isAllowed('noratelimit');
+               return !$this->isAllowed( 'noratelimit' );
        }
 
        /**
@@ -1462,7 +1467,7 @@ class User {
        public function pingLimiter( $action = 'edit' ) {
                # Call the 'PingLimiter' hook
                $result = false;
-               if( !wfRunHooks( 'PingLimiter', array( &$this, $action, $result ) ) ) {
+               if( !wfRunHooks( 'PingLimiter', array( &$this, $action, &$result ) ) ) {
                        return $result;
                }
 
@@ -1564,7 +1569,7 @@ class User {
         * @param $bFromSlave Bool Whether to check the slave database instead of the master
         * @return Block|null
         */
-       public function getBlock( $bFromSlave = true ){
+       public function getBlock( $bFromSlave = true ) {
                $this->getBlockedStatus( $bFromSlave );
                return $this->mBlock instanceof Block ? $this->mBlock : null;
        }
@@ -2224,7 +2229,7 @@ class User {
                # set it, and then it was disabled removing their ability to change it).  But
                # we don't want to erase the preferences in the database in case the preference
                # is re-enabled again.  So don't touch $mOptions, just override the returned value
-               if( in_array( $oname, $wgHiddenPrefs ) && !$ignoreHidden ){
+               if( in_array( $oname, $wgHiddenPrefs ) && !$ignoreHidden ) {
                        return self::getDefaultOption( $oname );
                }
 
@@ -2250,9 +2255,9 @@ class User {
                # set it, and then it was disabled removing their ability to change it).  But
                # we don't want to erase the preferences in the database in case the preference
                # is re-enabled again.  So don't touch $mOptions, just override the returned value
-               foreach( $wgHiddenPrefs as $pref ){
+               foreach( $wgHiddenPrefs as $pref ) {
                        $default = self::getDefaultOption( $pref );
-                       if( $default !== null ){
+                       if( $default !== null ) {
                                $options[$pref] = $default;
                        }
                }
@@ -2279,7 +2284,7 @@ class User {
         * @return Int User's current value for the option
         * @see getOption()
         */
-       public function getIntOption( $oname, $defaultOverride=0 ) {
+       public function getIntOption( $oname, $defaultOverride = 0 ) {
                $val = $this->getOption( $oname );
                if( $val == '' ) {
                        $val = $defaultOverride;
@@ -2305,12 +2310,137 @@ class User {
        }
 
        /**
-        * Reset all options to the site defaults
+        * Return a list of the types of user options currently returned by
+        * User::getOptionKinds().
+        *
+        * Currently, the option kinds are:
+        * - 'registered' - preferences which are registered in core MediaWiki or
+        *                  by extensions using the UserGetDefaultOptions hook.
+        * - 'registered-multiselect' - as above, using the 'multiselect' type.
+        * - 'userjs' - preferences with names starting with 'userjs-', intended to
+        *              be used by user scripts.
+        * - 'unused' - preferences about which MediaWiki doesn't know anything.
+        *              These are usually legacy options, removed in newer versions.
+        *
+        * The API (and possibly others) use this function to determine the possible
+        * option types for validation purposes, so make sure to update this when a
+        * new option kind is added.
+        *
+        * @see User::getOptionKinds
+        * @return array Option kinds
+        */
+       public static function listOptionKinds() {
+               return array(
+                       'registered',
+                       'registered-multiselect',
+                       'userjs',
+                       'unused'
+               );
+       }
+
+       /**
+        * Return an associative array mapping preferences keys to the kind of a preference they're
+        * used for. Different kinds are handled differently when setting or reading preferences.
+        *
+        * See User::listOptionKinds for the list of valid option types that can be provided.
+        *
+        * @see User::listOptionKinds
+        * @param $context IContextSource
+        * @param $options array assoc. array with options keys to check as keys. Defaults to $this->mOptions.
+        * @return array the key => kind mapping data
         */
-       public function resetOptions() {
+       public function getOptionKinds( IContextSource $context, $options = null ) {
+               $this->loadOptions();
+               if ( $options === null ) {
+                       $options = $this->mOptions;
+               }
+
+               $prefs = Preferences::getPreferences( $this, $context );
+               $mapping = array();
+
+               // Multiselect options are stored in the database with one key per
+               // option, each having a boolean value. Extract those keys.
+               $multiselectOptions = array();
+               foreach ( $prefs as $name => $info ) {
+                       if ( ( isset( $info['type'] ) && $info['type'] == 'multiselect' ) ||
+                                       ( isset( $info['class'] ) && $info['class'] == 'HTMLMultiSelectField' ) ) {
+                               $opts = HTMLFormField::flattenOptions( $info['options'] );
+                               $prefix = isset( $info['prefix'] ) ? $info['prefix'] : $name;
+
+                               foreach ( $opts as $value ) {
+                                       $multiselectOptions["$prefix$value"] = true;
+                               }
+
+                               unset( $prefs[$name] );
+                       }
+               }
+
+               // $value is ignored
+               foreach ( $options as $key => $value ) {
+                       if ( isset( $prefs[$key] ) ) {
+                               $mapping[$key] = 'registered';
+                       } elseif( isset( $multiselectOptions[$key] ) ) {
+                               $mapping[$key] = 'registered-multiselect';
+                       } elseif ( substr( $key, 0, 7 ) === 'userjs-' ) {
+                               $mapping[$key] = 'userjs';
+                       } else {
+                               $mapping[$key] = 'unused';
+                       }
+               }
+
+               return $mapping;
+       }
+
+       /**
+        * Reset certain (or all) options to the site defaults
+        *
+        * The optional parameter determines which kinds of preferences will be reset.
+        * Supported values are everything that can be reported by getOptionKinds()
+        * and 'all', which forces a reset of *all* preferences and overrides everything else.
+        *
+        * @param $resetKinds array|string which kinds of preferences to reset. Defaults to
+        *                                 array( 'registered', 'registered-multiselect', 'unused' )
+        *                                 for backwards-compatibility.
+        * @param $context IContextSource|null context source used when $resetKinds
+        *                                     does not contain 'all', passed to getOptionKinds().
+        *                                     Defaults to RequestContext::getMain() when null.
+        */
+       public function resetOptions(
+               $resetKinds = array( 'registered', 'registered-multiselect', 'unused' ),
+               IContextSource $context = null
+       ) {
                $this->load();
+               $defaultOptions = self::getDefaultOptions();
 
-               $this->mOptions = self::getDefaultOptions();
+               if ( !is_array( $resetKinds ) ) {
+                       $resetKinds = array( $resetKinds );
+               }
+
+               if ( in_array( 'all', $resetKinds ) ) {
+                       $newOptions = $defaultOptions;
+               } else {
+                       if ( $context === null ) {
+                               $context = RequestContext::getMain();
+                       }
+
+                       $optionKinds = $this->getOptionKinds( $context );
+                       $resetKinds = array_intersect( $resetKinds, self::listOptionKinds() );
+                       $newOptions = array();
+
+                       // Use default values for the options that should be deleted, and
+                       // copy old values for the ones that shouldn't.
+                       foreach ( $this->mOptions as $key => $value ) {
+                               if ( in_array( $optionKinds[$key], $resetKinds ) ) {
+                                       if ( array_key_exists( $key, $defaultOptions ) ) {
+                                               $newOptions[$key] = $defaultOptions[$key];
+                                       }
+                               } else {
+                                       $newOptions[$key] = $value;
+                               }
+                       }
+               }
+
+               $this->mOptions = $newOptions;
                $this->mOptionsLoaded = true;
        }
 
@@ -2490,7 +2620,7 @@ class User {
                        if( $this->getId() ) {
                                $dbw->insert( 'user_groups',
                                        array(
-                                               'ug_user'  => $this->getID(),
+                                               'ug_user' => $this->getID(),
                                                'ug_group' => $group,
                                        ),
                                        __METHOD__,
@@ -2515,13 +2645,13 @@ class User {
                        $dbw = wfGetDB( DB_MASTER );
                        $dbw->delete( 'user_groups',
                                array(
-                                       'ug_user'  => $this->getID(),
+                                       'ug_user' => $this->getID(),
                                        'ug_group' => $group,
                                ), __METHOD__ );
                        // Remember that the user was in this group
                        $dbw->insert( 'user_former_groups',
                                array(
-                                       'ufg_user'  => $this->getID(),
+                                       'ufg_user' => $this->getID(),
                                        'ufg_group' => $group,
                                ),
                                __METHOD__,
@@ -2558,10 +2688,10 @@ class User {
         *
         * @return bool
         */
-       public function isAllowedAny( /*...*/ ){
+       public function isAllowedAny( /*...*/ ) {
                $permissions = func_get_args();
-               foreach( $permissions as $permission ){
-                       if( $this->isAllowed( $permission ) ){
+               foreach( $permissions as $permission ) {
+                       if( $this->isAllowed( $permission ) ) {
                                return true;
                        }
                }
@@ -2573,10 +2703,10 @@ class User {
         * @internal param $varargs string
         * @return bool True if the user is allowed to perform *all* of the given actions
         */
-       public function isAllowedAll( /*...*/ ){
+       public function isAllowedAll( /*...*/ ) {
                $permissions = func_get_args();
-               foreach( $permissions as $permission ){
-                       if( !$this->isAllowed( $permission ) ){
+               foreach( $permissions as $permission ) {
+                       if( !$this->isAllowed( $permission ) ) {
                                return false;
                        }
                }
@@ -2750,7 +2880,7 @@ class User {
                        return;
                }
                $id = $this->getId();
-               if( $id != 0 )  {
+               if( $id != 0 ) {
                        $dbw = wfGetDB( DB_MASTER );
                        $dbw->update( 'watchlist',
                                array( /* SET */
@@ -3135,7 +3265,7 @@ class User {
                wfDeprecated( __METHOD__, '1.17' );
 
                global $wgUseDynamicDates, $wgRenderHashAppend, $wgLang, $wgContLang;
-               if( $this->mHash ){
+               if( $this->mHash ) {
                        return $this->mHash;
                }
 
@@ -3176,14 +3306,14 @@ class User {
         */
        public function isBlockedFromCreateAccount() {
                $this->getBlockedStatus();
-               if( $this->mBlock && $this->mBlock->prevents( 'createaccount' ) ){
+               if( $this->mBlock && $this->mBlock->prevents( 'createaccount' ) ) {
                        return $this->mBlock;
                }
 
                # bug 13611: if the IP address the user is trying to create an account from is
                # blocked with createaccount disabled, prevent new account creation there even
                # when the user is logged in
-               if( $this->mBlockedFromCreateAccount === false ){
+               if ( $this->mBlockedFromCreateAccount === false && !$this->isAllowed( 'ipblock-exempt' ) ) {
                        $this->mBlockedFromCreateAccount = Block::newFromTarget( null, $this->getRequest()->getIP() );
                }
                return $this->mBlockedFromCreateAccount instanceof Block && $this->mBlockedFromCreateAccount->prevents( 'createaccount' )
@@ -3928,7 +4058,7 @@ class User {
                        $groups = array_merge_recursive(
                                $groups, $this->changeableByGroup( $addergroup )
                        );
-                       $groups['add']    = array_unique( $groups['add'] );
+                       $groups['add'] = array_unique( $groups['add'] );
                        $groups['remove'] = array_unique( $groups['remove'] );
                        $groups['add-self'] = array_unique( $groups['add-self'] );
                        $groups['remove-self'] = array_unique( $groups['remove-self'] );
@@ -4087,54 +4217,73 @@ class User {
        }
 
        /**
-        * Add a newuser log entry for this user. Before 1.19 the return value was always true.
+        * Add a newuser log entry for this user.
+        * Before 1.19 the return value was always true.
+        *
+        * @param $action string|bool: account creation type.
+        *   - String, one of the following values:
+        *     - 'create' for an anonymous user creating an account for himself.
+        *       This will force the action's performer to be the created user itself,
+        *       no matter the value of $wgUser
+        *     - 'create2' for a logged in user creating an account for someone else
+        *     - 'byemail' when the created user will receive its password by e-mail
+        *   - Boolean means whether the account was created by e-mail (deprecated):
+        *     - true will be converted to 'byemail'
+        *     - false will be converted to 'create' if this object is the same as
+        *       $wgUser and to 'create2' otherwise
         *
-        * @param $byEmail Boolean: account made by email?
         * @param $reason String: user supplied reason
         *
         * @return int|bool True if not $wgNewUserLog; otherwise ID of log item or 0 on failure
         */
-       public function addNewUserLogEntry( $byEmail = false, $reason = '' ) {
-               global $wgUser, $wgContLang, $wgNewUserLog;
+       public function addNewUserLogEntry( $action = false, $reason = '' ) {
+               global $wgUser, $wgNewUserLog;
                if( empty( $wgNewUserLog ) ) {
                        return true; // disabled
                }
 
-               if( $this->getName() == $wgUser->getName() ) {
-                       $action = 'create';
-               } else {
-                       $action = 'create2';
-                       if ( $byEmail ) {
-                               if ( $reason === '' ) {
-                                       $reason = wfMessage( 'newuserlog-byemail' )->inContentLanguage()->text();
-                               } else {
-                                       $reason = $wgContLang->commaList( array(
-                                               $reason, wfMessage( 'newuserlog-byemail' )->inContentLanguage()->text() ) );
-                               }
+               if ( $action === true ) {
+                       $action = 'byemail';
+               } elseif ( $action === false ) {
+                       if ( $this->getName() == $wgUser->getName() ) {
+                               $action = 'create';
+                       } else {
+                               $action = 'create2';
                        }
                }
-               $log = new LogPage( 'newusers' );
-               return (int)$log->addEntry(
-                       $action,
-                       $this->getUserPage(),
-                       $reason,
-                       array( $this->getId() )
-               );
+
+               if ( $action === 'create' || $action === 'autocreate' ) {
+                       $performer = $this;
+               } else {
+                       $performer = $wgUser;
+               }
+
+               $logEntry = new ManualLogEntry( 'newusers', $action );
+               $logEntry->setPerformer( $performer );
+               $logEntry->setTarget( $this->getUserPage() );
+               $logEntry->setComment( $reason );
+               $logEntry->setParameters( array(
+                       '4::userid' => $this->getId(),
+               ) );
+               $logid = $logEntry->insert();
+
+               if ( $action !== 'autocreate' ) {
+                       $logEntry->publish( $logid );
+               }
+
+               return (int)$logid;
        }
 
        /**
         * Add an autocreate newuser log entry for this user
         * Used by things like CentralAuth and perhaps other authplugins.
+        * Consider calling addNewUserLogEntry() directly instead.
         *
         * @return bool
         */
        public function addNewUserLogEntryAutoCreate() {
-               global $wgNewUserLog;
-               if( !$wgNewUserLog ) {
-                       return true; // disabled
-               }
-               $log = new LogPage( 'newusers', false );
-               $log->addEntry( 'autocreate', $this->getUserPage(), '', array( $this->getId() ), $this );
+               $this->addNewUserLogEntry( 'autocreate' );
+
                return true;
        }
 
index b8b6aa8..7d11342 100644 (file)
@@ -21,6 +21,7 @@
  * @author <brion@pobox.com>
  * @author <mail@tgries.de>
  * @author Tim Starling
+ * @author Luke Welling lwelling@wikimedia.org
  */
 
 
@@ -112,6 +113,10 @@ class UserMailer {
         * @param $headers array Associative Array: keys are header field names,
         *                 values are ... values.
         * @param $endl String: The end of line character.  Defaults to "\n"
+        *
+        * Note RFC2822 says newlines must be CRLF (\r\n)
+        * but php mail naively "corrects" it and requires \n for the "correction" to work
+        *
         * @return String
         */
        static function arrayToHeaderString( $headers, $endl = "\n" ) {
@@ -131,10 +136,10 @@ class UserMailer {
                global $wgSMTP, $wgServer;
 
                $msgid = uniqid( wfWikiID() . ".", true ); /* true required for cygwin */
-               if ( is_array($wgSMTP) && isset($wgSMTP['IDHost']) && $wgSMTP['IDHost'] ) {
+               if ( is_array( $wgSMTP ) && isset( $wgSMTP['IDHost'] ) && $wgSMTP['IDHost'] ) {
                        $domain = $wgSMTP['IDHost'];
                } else {
-                       $url = wfParseUrl($wgServer);
+                       $url = wfParseUrl( $wgServer );
                        $domain = $url['host'];
                }
                return "<$msgid@$domain>";
@@ -149,19 +154,47 @@ class UserMailer {
         * @param $to MailAddress: recipient's email (or an array of them)
         * @param $from MailAddress: sender's email
         * @param $subject String: email's subject.
-        * @param $body String: email's text.
+        * @param $body String: email's text or Array of two strings to be the text and html bodies
         * @param $replyto MailAddress: optional reply-to email (default: null).
         * @param $contentType String: optional custom Content-Type (default: text/plain; charset=UTF-8)
         * @throws MWException
         * @return Status object
         */
        public static function send( $to, $from, $subject, $body, $replyto = null, $contentType = 'text/plain; charset=UTF-8' ) {
-               global $wgSMTP, $wgEnotifMaxRecips, $wgAdditionalMailParams;
-
+               global $wgSMTP, $wgEnotifMaxRecips, $wgAdditionalMailParams, $wgAllowHTMLEmail;
+               $mime = null;
                if ( !is_array( $to ) ) {
                        $to = array( $to );
                }
 
+               // mail body must have some content
+               $minBodyLen = 10;
+               // arbitrary but longer than Array or Object to detect casting error
+
+               // body must either be a string or an array with text and body
+               if (
+                       !(
+                               !is_array( $body ) &&
+                               strlen( $body ) >= $minBodyLen
+                       )
+                       &&
+                       !(
+                               is_array( $body ) &&
+                               isset( $body['text'] ) &&
+                               isset( $body['html'] ) &&
+                               strlen( $body['text'] ) >= $minBodyLen &&
+                               strlen( $body['html'] ) >= $minBodyLen
+                       )
+               ) {
+                       // if it is neither we have a problem
+                       return Status::newFatal( 'user-mail-no-body' );
+               }
+
+               if ( !$wgAllowHTMLEmail && is_array( $body ) ) {
+                       // HTML not wanted.  Dump it.
+                       $body = $body['text'];
+               }
+
                wfDebug( __METHOD__ . ': sending mail to ' . implode( ', ', $to ) . "\n" );
 
                # Make sure we have at least one address
@@ -211,18 +244,53 @@ class UserMailer {
                }
 
                $headers['Date'] = date( 'r' );
-               $headers['MIME-Version'] = '1.0';
-               $headers['Content-type'] = ( is_null( $contentType ) ?
-                       'text/plain; charset=UTF-8' : $contentType );
-               $headers['Content-transfer-encoding'] = '8bit';
-
                $headers['Message-ID'] = self::makeMsgId();
                $headers['X-Mailer'] = 'MediaWiki mailer';
 
+               # Line endings need to be different on Unix and Windows due to
+               # the bug described at http://trac.wordpress.org/ticket/2603
+               if ( wfIsWindows() ) {
+                       $endl = "\r\n";
+               } else {
+                       $endl = "\n";
+               }
+
+               if ( is_array( $body ) ) {
+                       // we are sending a multipart message
+                       wfDebug( "Assembling mulitpart mime email\n" );
+                       if ( !stream_resolve_include_path( 'Mail/mime.php' ) ) {
+                               wfDebug( "PEAR Mail_Mime package is not installed. Falling back to text email.\n" );
+                       }
+                       else {
+                               require_once( 'Mail/mime.php' );
+                               if ( wfIsWindows() ) {
+                                       $body['text'] = str_replace( "\n", "\r\n", $body['text'] );
+                                       $body['html'] = str_replace( "\n", "\r\n", $body['html'] );
+                               }
+                               $mime = new Mail_mime( array( 'eol' => $endl ) );
+                               $mime->setTXTBody( $body['text'] );
+                               $mime->setHTMLBody( $body['html'] );
+                               $body = $mime->get();  // must call get() before headers()
+                               $headers = $mime->headers( $headers );
+                       }
+               }
+               if ( !isset( $mime ) ) {
+                       // sending text only, either deliberately or as a fallback
+                       if ( wfIsWindows() ) {
+                               $body = str_replace( "\n", "\r\n", $body );
+                       }
+                       $headers['MIME-Version'] = '1.0';
+                       $headers['Content-type'] = ( is_null( $contentType ) ?
+                               'text/plain; charset=UTF-8' : $contentType );
+                       $headers['Content-transfer-encoding'] = '8bit';
+               }
+
                $ret = wfRunHooks( 'AlternateUserMailer', array( $headers, $to, $from, $subject, $body ) );
                if ( $ret === false ) {
+                       // the hook implementation will return false to skip regular mail sending
                        return Status::newGood();
                } elseif ( $ret !== true ) {
+                       // the hook implementation will return a string to pass an error message
                        return Status::newFatal( 'php-mail-error', $ret );
                }
 
@@ -231,7 +299,7 @@ class UserMailer {
                        # PEAR MAILER
                        #
 
-                       if ( ! stream_resolve_include_path( 'Mail.php' ) ) {
+                       if ( !stream_resolve_include_path( 'Mail.php' ) ) {
                                throw new MWException( 'PEAR mail package is not installed' );
                        }
                        require_once( 'Mail.php' );
@@ -272,17 +340,7 @@ class UserMailer {
                        #
                        # PHP mail()
                        #
-
-                       # Line endings need to be different on Unix and Windows due to
-                       # the bug described at http://trac.wordpress.org/ticket/2603
-                       if ( wfIsWindows() ) {
-                               $body = str_replace( "\n", "\r\n", $body );
-                               $endl = "\r\n";
-                       } else {
-                               $endl = "\n";
-                       }
-
-                       if( count($to) > 1 ) {
+                       if( count( $to ) > 1 ) {
                                $headers['To'] = 'undisclosed-recipients:;';
                        }
                        $headers = self::arrayToHeaderString( $headers, $endl );
@@ -295,6 +353,7 @@ class UserMailer {
                        set_error_handler( 'UserMailer::errorHandler' );
 
                        $safeMode = wfIniGetBool( 'safe_mode' );
+
                        foreach ( $to as $recip ) {
                                if ( $safeMode ) {
                                        $sent = mail( $recip, self::quotedPrintable( $subject ), $body, $headers );
@@ -342,6 +401,12 @@ class UserMailer {
        /**
         * Converts a string into quoted-printable format
         * @since 1.17
+        *
+        * From PHP5.3 there is a built in function quoted_printable_encode()
+        * This method does not duplicate that.
+        * This method is doing Q encoding inside encoded-words as defined by RFC 2047
+        * This is for email headers.
+        * The built in quoted_printable_encode() is for email bodies
         * @return string
         */
        public static function quotedPrintable( $string, $charset = '' ) {
@@ -452,9 +517,9 @@ class EmailNotification {
                                                        array( /* SET */
                                                                'wl_notificationtimestamp' => $dbw->timestamp( $timestamp )
                                                        ), array( /* WHERE */
-                                                               'wl_user'      => $watchers,
+                                                               'wl_user' => $watchers,
                                                                'wl_namespace' => $title->getNamespace(),
-                                                               'wl_title'     => $title->getDBkey(),
+                                                               'wl_title' => $title->getDBkey(),
                                                        ), $fname
                                                );
                                                $dbw->commit( $fname );
@@ -645,15 +710,19 @@ class EmailNotification {
                        if ( !$wgEnotifImpersonal ) {
                                // For personal mail, also show a link to the diff of all changes
                                // since last visited.
-                               $keys['$NEWPAGE'] .= "\n\n" .  wfMessage( 'enotif_lastvisited',
+                               $keys['$NEWPAGE'] .= "\n\n" . wfMessage( 'enotif_lastvisited',
                                        $this->title->getCanonicalUrl( 'diff=0&oldid=' . $this->oldid ) )
                                        ->inContentLanguage()->text();
                        }
-                       $keys['$OLDID']   = $this->oldid;
+                       $keys['$OLDID'] = $this->oldid;
+                       // @deprecated Remove in MediaWiki 1.23.
+                       $keys['$CHANGEDORCREATED'] = wfMessage( 'changed' )->inContentLanguage()->text();
                } else {
                        # clear $OLDID placeholder in the message template
-                       $keys['$OLDID']   = '';
+                       $keys['$OLDID'] = '';
                        $keys['$NEWPAGE'] = '';
+                       // @deprecated Remove in MediaWiki 1.23.
+                       $keys['$CHANGEDORCREATED'] = wfMessage( 'created' )->inContentLanguage()->text();
                }
 
                $keys['$PAGETITLE'] = $this->title->getPrefixedText();
@@ -681,11 +750,11 @@ class EmailNotification {
 
                # Now build message's subject and body
                $this->subject = wfMessage( 'enotif_subject_' . $this->pageStatus )->inContentLanguage()
-                       ->params( $pageTitle, $keys['$PAGEEDITOR'] )->escaped();
+                       ->params( $pageTitle, $keys['$PAGEEDITOR'] )->text();
 
                $keys['$PAGEINTRO'] = wfMessage( 'enotif_body_intro_' . $this->pageStatus )
                        ->inContentLanguage()->params( $pageTitle, $keys['$PAGEEDITOR'], $pageTitleUrl )
-                       ->escaped();
+                       ->text();
 
                $body = wfMessage( 'enotif_body' )->inContentLanguage()->plain();
                $body = strtr( $body, $keys );
@@ -702,13 +771,13 @@ class EmailNotification {
                {
                        $editorAddress = new MailAddress( $this->editor );
                        if ( $wgEnotifFromEditor ) {
-                               $this->from    = $editorAddress;
+                               $this->from = $editorAddress;
                        } else {
-                               $this->from    = $adminAddress;
+                               $this->from = $adminAddress;
                                $this->replyto = $editorAddress;
                        }
                } else {
-                       $this->from    = $adminAddress;
+                       $this->from = $adminAddress;
                        $this->replyto = new MailAddress( $wgNoReplyAddress );
                }
        }
index 932af16..240ebc7 100644 (file)
@@ -27,7 +27,7 @@
  * @ingroup Watchlist
  */
 class WatchedItem {
-       var $mTitle, $mUser, $id, $ns, $ti;
+       var $mTitle, $mUser;
        private $loaded = false, $watched, $timestamp;
 
        /**
@@ -40,17 +40,32 @@ class WatchedItem {
                $wl = new WatchedItem;
                $wl->mUser = $user;
                $wl->mTitle = $title;
-               $wl->id = $user->getId();
-               # Patch (also) for email notification on page changes T.Gries/M.Arndt 11.09.2004
-               # TG patch: here we do not consider pages and their talk pages equivalent - why should we ?
-               # The change results in talk-pages not automatically included in watchlists, when their parent page is included
-               # $wl->ns = $title->getNamespace() & ~1;
-               $wl->ns = $title->getNamespace();
 
-               $wl->ti = $title->getDBkey();
                return $wl;
        }
 
+       /**
+        * Title being watched
+        * @return Title
+        */
+       protected function getTitle() {
+               return $this->mTitle;
+       }
+
+       /** Helper to retrieve the title namespace */
+       protected function getTitleNs() {
+               return $this->getTitle()->getNamespace();
+       }
+
+       /** Helper to retrieve the title DBkey */
+       protected function getTitleDBkey() {
+               return $this->getTitle()->getDBkey();
+       }
+       /** Helper to retrieve the user id */
+       protected function getUserId() {
+               return $this->mUser->getId();
+       }
+
        /**
         * Return an array of conditions to select or update the appropriate database
         * row.
@@ -58,7 +73,11 @@ class WatchedItem {
         * @return array
         */
        private function dbCond() {
-               return array( 'wl_user' => $this->id, 'wl_namespace' => $this->ns, 'wl_title' => $this->ti );
+               return array(
+                       'wl_user' => $this->getUserId(),
+                       'wl_namespace' => $this->getTitleNs(),
+                       'wl_title' => $this->getTitleDBkey(),
+               );
        }
 
        /**
@@ -143,22 +162,22 @@ class WatchedItem {
                // if there's already an entry for this page
                $dbw = wfGetDB( DB_MASTER );
                $dbw->insert( 'watchlist',
-                 array(
-                       'wl_user' => $this->id,
-                       'wl_namespace' => MWNamespace::getSubject($this->ns),
-                       'wl_title' => $this->ti,
-                       'wl_notificationtimestamp' => null
-                 ), __METHOD__, 'IGNORE' );
+                       array(
+                               'wl_user' => $this->getUserId(),
+                               'wl_namespace' => MWNamespace::getSubject( $this->getTitleNs() ),
+                               'wl_title' => $this->getTitleDBkey(),
+                               'wl_notificationtimestamp' => null
+                       ), __METHOD__, 'IGNORE' );
 
                // Every single watched page needs now to be listed in watchlist;
                // namespace:page and namespace_talk:page need separate entries:
                $dbw->insert( 'watchlist',
-                 array(
-                       'wl_user' => $this->id,
-                       'wl_namespace' => MWNamespace::getTalk($this->ns),
-                       'wl_title' => $this->ti,
-                       'wl_notificationtimestamp' => null
-                 ), __METHOD__, 'IGNORE' );
+                       array(
+                               'wl_user' => $this->getUserId(),
+                               'wl_namespace' => MWNamespace::getTalk( $this->getTitleNs() ),
+                               'wl_title' => $this->getTitleDBkey(),
+                               'wl_notificationtimestamp' => null
+                       ), __METHOD__, 'IGNORE' );
 
                $this->watched = true;
 
@@ -177,9 +196,9 @@ class WatchedItem {
                $dbw = wfGetDB( DB_MASTER );
                $dbw->delete( 'watchlist',
                        array(
-                               'wl_user' => $this->id,
-                               'wl_namespace' => MWNamespace::getSubject($this->ns),
-                               'wl_title' => $this->ti
+                               'wl_user' => $this->getUserId(),
+                               'wl_namespace' => MWNamespace::getSubject( $this->getTitleNs() ),
+                               'wl_title' => $this->getTitleDBkey(),
                        ), __METHOD__
                );
                if ( $dbw->affectedRows() ) {
@@ -192,9 +211,9 @@ class WatchedItem {
                # entries: clear them
                $dbw->delete( 'watchlist',
                        array(
-                               'wl_user' => $this->id,
-                               'wl_namespace' => MWNamespace::getTalk($this->ns),
-                               'wl_title' => $this->ti
+                               'wl_user' => $this->getUserId(),
+                               'wl_namespace' => MWNamespace::getTalk( $this->getTitleNs() ),
+                               'wl_title' => $this->getTitleDBkey(),
                        ), __METHOD__
                );
 
index 8cf25bb..4cc28c3 100644 (file)
@@ -76,7 +76,7 @@ class WebRequest {
         *
         * @return Array: Any query arguments found in path matches.
         */
-       static public function getPathInfo( $want = 'all' ) {
+       public static function getPathInfo( $want = 'all' ) {
                global $wgUsePathInfo;
                // PATH_INFO is mangled due to http://bugs.php.net/bug.php?id=31892
                // And also by Apache 2.x, double slashes are converted to single slashes.
@@ -192,7 +192,14 @@ class WebRequest {
         * @return array
         */
        public static function detectProtocolAndStdPort() {
-               return ( isset( $_SERVER['HTTPS'] ) && $_SERVER['HTTPS'] == 'on' ) ? array( 'https', 443 ) : array( 'http', 80 );
+               if ( ( isset( $_SERVER['HTTPS'] ) && $_SERVER['HTTPS'] == 'on' ) ||
+                       ( isset( $_SERVER['HTTP_X_FORWARDED_PROTO'] ) &&
+                       $_SERVER['HTTP_X_FORWARDED_PROTO'] == 'https' ) ) {
+                       $arr = array( 'https', 443 );
+               } else {
+                       $arr = array( 'http', 80 );
+               }
+               return $arr;
        }
 
        /**
@@ -558,9 +565,9 @@ class WebRequest {
         *
         * @return Array
         */
-        public function getQueryValues() {
+       public function getQueryValues() {
                return $_GET;
-        }
+       }
 
        /**
         * Get the HTTP method used for this request.
@@ -612,7 +619,7 @@ class WebRequest {
                        global $wgCookiePrefix;
                        $prefix = $wgCookiePrefix;
                }
-               return $this->getGPCVal( $_COOKIE, $prefix . $key , $default );
+               return $this->getGPCVal( $_COOKIE, $prefix . $key, $default );
        }
 
        /**
@@ -713,7 +720,7 @@ class WebRequest {
                $newquery = $this->getQueryValues();
                unset( $newquery['title'] );
                $newquery = array_merge( $newquery, $array );
-               $query = wfArrayToCGI( $newquery );
+               $query = wfArrayToCgi( $newquery );
                return $onlyquery ? $query : $wgTitle->getLocalURL( $query );
        }
 
@@ -842,7 +849,7 @@ class WebRequest {
                } else {
                        foreach ( $_SERVER as $name => $value ) {
                                if ( substr( $name, 0, 5 ) === 'HTTP_' ) {
-                                       $name = str_replace( '_', '-',  substr( $name, 5 ) );
+                                       $name = str_replace( '_', '-', substr( $name, 5 ) );
                                        $this->headers[$name] = $value;
                                } elseif ( $name === 'CONTENT_LENGTH' ) {
                                        $this->headers['CONTENT-LENGTH'] = $value;
@@ -1307,6 +1314,10 @@ class FauxRequest extends WebRequest {
                return $this->wasPosted;
        }
 
+       public function getCookie( $key, $prefix = null, $default = null ) {
+               return $default;
+       }
+
        public function checkSessionCookie() {
                return false;
        }
index e467738..37dbef4 100644 (file)
@@ -52,7 +52,7 @@ class WebResponse {
         */
        public function setcookie( $name, $value, $expire = 0, $prefix = null, $domain = null, $forceSecure = null ) {
                global $wgCookiePath, $wgCookiePrefix, $wgCookieDomain;
-               global $wgCookieSecure,$wgCookieExpiration, $wgCookieHttpOnly;
+               global $wgCookieSecure, $wgCookieExpiration, $wgCookieHttpOnly;
                if ( $expire == 0 ) {
                        $expire = time() + $wgCookieExpiration;
                }
@@ -159,7 +159,7 @@ class FauxResponse extends WebResponse {
         * @param $name string
         * @return string
         */
-       public function getcookie( $name )  {
+       public function getcookie( $name ) {
                if ( isset( $this->cookies[$name] ) ) {
                        return $this->cookies[$name];
                }
index 247f810..28cc949 100644 (file)
@@ -62,7 +62,7 @@ if ( ini_get( 'register_globals' ) ) {
 # points and when $wgOut gets disabled or overridden.
 header( 'X-Content-Type-Options: nosniff' );
 
-$wgRequestTime = microtime(true);
+$wgRequestTime = microtime( true );
 # getrusage() does not exist on the Microsoft Windows platforms, catching this
 if ( function_exists ( 'getrusage' ) ) {
        $wgRUstart = getrusage();
@@ -80,11 +80,15 @@ define( 'MEDIAWIKI', true );
 
 # Full path to working directory.
 # Makes it possible to for example to have effective exclude path in apc.
-# Also doesn't break installations using symlinked includes, like
-# __DIR__ would do.
+# __DIR__ breaks symlinked includes, but realpath() returns false
+# if we don't have permissions on parent directories.
 $IP = getenv( 'MW_INSTALL_PATH' );
 if ( $IP === false ) {
-       $IP = realpath( '.' );
+       if( realpath( '.' ) ) {
+               $IP = realpath( '.' );
+       } else {
+               $IP = dirname( __DIR__ );
+       }
 }
 
 if ( isset( $_SERVER['MW_COMPILED'] ) ) {
@@ -119,7 +123,7 @@ if ( defined( 'MW_CONFIG_CALLBACK' ) ) {
        MWFunction::call( MW_CONFIG_CALLBACK );
 } else {
        if ( !defined( 'MW_CONFIG_FILE' ) ) {
-               define('MW_CONFIG_FILE', MWInit::interpretedPath( 'LocalSettings.php' ) );
+               define( 'MW_CONFIG_FILE', MWInit::interpretedPath( 'LocalSettings.php' ) );
        }
 
        # LocalSettings.php is the per site customization file. If it does not exist
index d4840cc..21a7d9a 100644 (file)
@@ -126,7 +126,7 @@ class MediaWiki {
         * @return Title
         */
        public function getTitle() {
-               if( $this->context->getTitle() === null ){
+               if( $this->context->getTitle() === null ) {
                        $this->context->setTitle( $this->parseTitle() );
                }
                return $this->context->getTitle();
@@ -331,8 +331,18 @@ class MediaWiki {
                wfProfileIn( __METHOD__ );
 
                $title = $this->context->getTitle();
-               $article = Article::newFromTitle( $title, $this->context );
-               $this->context->setWikiPage( $article->getPage() );
+               if ( $this->context->canUseWikiPage() ) {
+                       // Try to use request context wiki page, as there
+                       // is already data from db saved in per process
+                       // cache there from this->getAction() call.
+                       $page = $this->context->getWikiPage();
+                       $article = Article::newFromWikiPage( $page, $this->context );
+               } else {
+                       // This case should not happen, but just in case.
+                       $article = Article::newFromTitle( $title, $this->context );
+                       $this->context->setWikiPage( $article->getPage() );
+               }
+
                // NS_MEDIAWIKI has no redirects.
                // It is also used for CSS/JS, so performance matters here...
                if ( $title->getNamespace() == NS_MEDIAWIKI ) {
@@ -497,7 +507,7 @@ class MediaWiki {
                        && $request->getMethod() == 'GET'
                ) {
                        $redirUrl = $request->getFullRequestURL();
-                       $redirUrl = str_replace( 'http://' , 'https://' , $redirUrl );
+                       $redirUrl = str_replace( 'http://', 'https://', $redirUrl );
 
                        // Setup dummy Title, otherwise OutputPage::redirect will fail
                        $title = Title::newFromText( NS_MAIN, 'REDIR' );
@@ -606,39 +616,22 @@ class MediaWiki {
                }
 
                $group = JobQueueGroup::singleton();
-               $types = $group->getDefaultQueueTypes();
-               shuffle( $types ); // avoid starvation
-
-               // Scan the queues for a job N times...
                do {
-                       $jobFound = false; // found a job in any queue?
-                       // Find a queue with a job on it and run it...
-                       foreach ( $types as $i => $type ) {
-                               $queue = $group->get( $type );
-                               if ( $queue->isEmpty() ) {
-                                       unset( $types[$i] ); // don't keep checking this queue
-                                       continue;
-                               }
-                               $job = $queue->pop();
-                               if ( $job ) {
-                                       $jobFound = true;
-                                       $output = $job->toString() . "\n";
-                                       $t = - microtime( true );
-                                       $success = $job->run();
-                                       $queue->ack( $job ); // done
-                                       $t += microtime( true );
-                                       $t = round( $t * 1000 );
-                                       if ( !$success ) {
-                                               $output .= "Error: " . $job->getLastError() . ", Time: $t ms\n";
-                                       } else {
-                                               $output .= "Success, Time: $t ms\n";
-                                       }
-                                       wfDebugLog( 'jobqueue', $output );
-                                       break;
+                       $job = $group->pop( JobQueueGroup::USE_CACHE ); // job from any queue
+                       if ( $job ) {
+                               $output = $job->toString() . "\n";
+                               $t = - microtime( true );
+                               $success = $job->run();
+                               $group->ack( $job ); // done
+                               $t += microtime( true );
+                               $t = round( $t * 1000 );
+                               if ( !$success ) {
+                                       $output .= "Error: " . $job->getLastError() . ", Time: $t ms\n";
                                } else {
-                                       unset( $types[$i] ); // don't keep checking this queue
+                                       $output .= "Success, Time: $t ms\n";
                                }
+                               wfDebugLog( 'jobqueue', $output );
                        }
-               } while ( --$n && $jobFound );
+               } while ( --$n && $job );
        }
 }
index 0114cce..fa23072 100644 (file)
@@ -42,7 +42,7 @@ class WikiFilePage extends WikiPage {
 
        public function getActionOverrides() {
                $overrides = parent::getActionOverrides();
-               $overrides[ 'revert' ] = 'RevertFileAction';
+               $overrides['revert'] = 'RevertFileAction';
                return $overrides;
        }
 
index 68068a8..57007eb 100644 (file)
@@ -229,8 +229,8 @@ class WikiPage extends Page implements IDBAccessObject {
         */
        protected function clearCacheFields() {
                $this->mCounter = null;
-               $this->mRedirectTarget = null; # Title object if set
-               $this->mLastRevision = null; # Latest revision
+               $this->mRedirectTarget = null; // Title object if set
+               $this->mLastRevision = null; // Latest revision
                $this->mTouched = '19700101000000';
                $this->mTimestamp = '';
                $this->mIsRedirect = false;
@@ -339,8 +339,8 @@ class WikiPage extends Page implements IDBAccessObject {
                        $data = $this->pageDataFromTitle( wfGetDB( DB_MASTER ), $this->mTitle );
                } elseif ( $from === self::READ_NORMAL ) {
                        $data = $this->pageDataFromTitle( wfGetDB( DB_SLAVE ), $this->mTitle );
-                       # Use a "last rev inserted" timestamp key to dimish the issue of slave lag.
-                       # Note that DB also stores the master position in the session and checks it.
+                       // Use a "last rev inserted" timestamp key to dimish the issue of slave lag.
+                       // Note that DB also stores the master position in the session and checks it.
                        $touched = $this->getCachedLastEditTime();
                        if ( $touched ) { // key set
                                if ( !$data || $touched > wfTimestamp( TS_MW, $data->page_touched ) ) {
@@ -377,7 +377,7 @@ class WikiPage extends Page implements IDBAccessObject {
 
                        $this->mTitle->loadFromRow( $data );
 
-                       # Old-fashioned restrictions
+                       // Old-fashioned restrictions
                        $this->mTitle->loadRestrictions( $data->page_restrictions );
 
                        $this->mCounter     = intval( $data->page_counter );
@@ -463,7 +463,7 @@ class WikiPage extends Page implements IDBAccessObject {
         */
        public function getContentModel() {
                if ( $this->exists() ) {
-                       # look at the revision's actual content model
+                       // look at the revision's actual content model
                        $rev = $this->getRevision();
 
                        if ( $rev !== null ) {
@@ -474,7 +474,7 @@ class WikiPage extends Page implements IDBAccessObject {
                        }
                }
 
-               # use the default model for this page
+               // use the default model for this page
                return $this->mTitle->getContentModel();
        }
 
@@ -613,7 +613,7 @@ class WikiPage extends Page implements IDBAccessObject {
        public function getContent( $audience = Revision::FOR_PUBLIC, User $user = null ) {
                $this->loadLastEdit();
                if ( $this->mLastRevision ) {
-                       return $this->mLastRevision->getContent( $audience );
+                       return $this->mLastRevision->getContent( $audience, $user );
                }
                return null;
        }
@@ -630,7 +630,7 @@ class WikiPage extends Page implements IDBAccessObject {
         * @return String|false The text of the current revision
         * @deprecated as of 1.21, getContent() should be used instead.
         */
-       public function getText( $audience = Revision::FOR_PUBLIC, User $user = null ) { #@todo: deprecated, replace usage!
+       public function getText( $audience = Revision::FOR_PUBLIC, User $user = null ) { // @todo: deprecated, replace usage!
                ContentHandler::deprecated( __METHOD__, '1.21' );
 
                $this->loadLastEdit();
@@ -812,7 +812,7 @@ class WikiPage extends Page implements IDBAccessObject {
                $hasLinks = null;
 
                if ( $wgArticleCountMethod === 'link' ) {
-                       # nasty special case to avoid re-parsing to detect links
+                       // nasty special case to avoid re-parsing to detect links
 
                        if ( $editInfo ) {
                                // ParserOutput::getLinks() is a 2D array of page links, so
@@ -845,7 +845,7 @@ class WikiPage extends Page implements IDBAccessObject {
                        return $this->mRedirectTarget;
                }
 
-               # Query the redirect table
+               // Query the redirect table
                $dbr = wfGetDB( DB_SLAVE );
                $row = $dbr->selectRow( 'redirect',
                        array( 'rd_namespace', 'rd_title', 'rd_fragment', 'rd_interwiki' ),
@@ -860,7 +860,7 @@ class WikiPage extends Page implements IDBAccessObject {
                                $row->rd_fragment, $row->rd_interwiki );
                }
 
-               # This page doesn't have an entry in the redirect table
+               // This page doesn't have an entry in the redirect table
                return $this->mRedirectTarget = $this->insertRedirect();
        }
 
@@ -958,7 +958,7 @@ class WikiPage extends Page implements IDBAccessObject {
         * @return UserArrayFromResult
         */
        public function getContributors() {
-               # @todo FIXME: This is expensive; cache this info somewhere.
+               // @todo FIXME: This is expensive; cache this info somewhere.
 
                $dbr = wfGetDB( DB_SLAVE );
 
@@ -1122,13 +1122,13 @@ class WikiPage extends Page implements IDBAccessObject {
                        return;
                }
 
-               # Don't update page view counters on views from bot users (bug 14044)
+               // Don't update page view counters on views from bot users (bug 14044)
                if ( !$wgDisableCounters && !$user->isAllowed( 'bot' ) && $this->mTitle->exists() ) {
                        DeferredUpdates::addUpdate( new ViewCountUpdate( $this->getId() ) );
                        DeferredUpdates::addUpdate( new SiteStatsUpdate( 1, 0, 0 ) );
                }
 
-               # Update newtalk / watchlist notification status
+               // Update newtalk / watchlist notification status
                $user->clearNotification( $this->mTitle );
        }
 
@@ -1139,7 +1139,7 @@ class WikiPage extends Page implements IDBAccessObject {
        public function doPurge() {
                global $wgUseSquid;
 
-               if( !wfRunHooks( 'ArticlePurge', array( &$this ) ) ){
+               if( !wfRunHooks( 'ArticlePurge', array( &$this ) ) ) {
                        return false;
                }
 
@@ -1158,7 +1158,7 @@ class WikiPage extends Page implements IDBAccessObject {
                }
 
                if ( $this->mTitle->getNamespace() == NS_MEDIAWIKI ) {
-                       //@todo: move this logic to MessageCache
+                       // @todo: move this logic to MessageCache
 
                        if ( $this->mTitle->exists() ) {
                                // NOTE: use transclusion text for messages.
@@ -1197,12 +1197,12 @@ class WikiPage extends Page implements IDBAccessObject {
                        'page_title'        => $this->mTitle->getDBkey(),
                        'page_counter'      => 0,
                        'page_restrictions' => '',
-                       'page_is_redirect'  => 0, # Will set this shortly...
+                       'page_is_redirect'  => 0, // Will set this shortly...
                        'page_is_new'       => 1,
                        'page_random'       => wfRandom(),
                        'page_touched'      => $dbw->timestamp(),
-                       'page_latest'       => 0, # Fill this in shortly...
-                       'page_len'          => 0, # Fill this in shortly...
+                       'page_latest'       => 0, // Fill this in shortly...
+                       'page_len'          => 0, // Fill this in shortly...
                ), __METHOD__, 'IGNORE' );
 
                $affected = $dbw->affectedRows();
@@ -1243,7 +1243,7 @@ class WikiPage extends Page implements IDBAccessObject {
                $conditions = array( 'page_id' => $this->getId() );
 
                if ( !is_null( $lastRevision ) ) {
-                       # An extra check against threads stepping on each other
+                       // An extra check against threads stepping on each other
                        $conditions['page_latest'] = $lastRevision;
                }
 
@@ -1272,7 +1272,7 @@ class WikiPage extends Page implements IDBAccessObject {
                        $this->setCachedLastEditTime( $now );
                        $this->mLatest = $revision->getId();
                        $this->mIsRedirect = (bool)$rt;
-                       # Update the LinkCache.
+                       // Update the LinkCache.
                        LinkCache::singleton()->addGoodLinkObj( $this->getId(), $this->mTitle, $len, $this->mIsRedirect,
                                                                                                        $this->mLatest, $revision->getContentModel() );
                }
@@ -1346,7 +1346,7 @@ class WikiPage extends Page implements IDBAccessObject {
                        $prev = $row->rev_id;
                        $lastRevIsRedirect = (bool)$row->page_is_redirect;
                } else {
-                       # No or missing previous revision; mark the page as new
+                       // No or missing previous revision; mark the page as new
                        $prev = 0;
                        $lastRevIsRedirect = null;
                }
@@ -1426,7 +1426,7 @@ class WikiPage extends Page implements IDBAccessObject {
                        throw new MWException( "sections not supported for content model " . $this->getContentHandler()->getModelID() );
                }
 
-               # could even make section title, but that's not required.
+               // could even make section title, but that's not required.
                $sectionContent = ContentHandler::makeContent( $text, $this->getTitle() );
 
                $newContent = $this->replaceSectionContent( $section, $sectionContent, $sectionTitle, $edittime );
@@ -1491,7 +1491,7 @@ class WikiPage extends Page implements IDBAccessObject {
                                return null;
                        }
 
-                       //FIXME: $oldContent might be null?
+                       // FIXME: $oldContent might be null?
                        $newContent = $oldContent->replaceSection( $section, $sectionContent, $sectionTitle );
                }
 
@@ -1625,7 +1625,7 @@ class WikiPage extends Page implements IDBAccessObject {
                                                                   User $user = null, $serialisation_format = null ) {
                global $wgUser, $wgUseAutomaticEditSummaries, $wgUseRCPatrol, $wgUseNPPatrol;
 
-               # Low-level sanity check
+               // Low-level sanity check
                if ( $this->mTitle->getText() === '' ) {
                        throw new MWException( 'Something is trying to edit an article with an empty title' );
                }
@@ -1649,7 +1649,7 @@ class WikiPage extends Page implements IDBAccessObject {
 
                $flags = $this->checkFlags( $flags );
 
-               # handle hook
+               // handle hook
                $hook_args = array( &$this, &$user, &$content, &$summary,
                                                        $flags & EDIT_MINOR, null, null, &$flags, &$status );
 
@@ -1666,7 +1666,7 @@ class WikiPage extends Page implements IDBAccessObject {
                        return $status;
                }
 
-               # Silently ignore EDIT_MINOR if not allowed
+               // Silently ignore EDIT_MINOR if not allowed
                $isminor = ( $flags & EDIT_MINOR ) && $user->isAllowed( 'minoredit' );
                $bot = $flags & EDIT_FORCE_BOT;
 
@@ -1679,7 +1679,7 @@ class WikiPage extends Page implements IDBAccessObject {
 
                $handler = $content->getContentHandler();
 
-               # Provide autosummaries if one is not provided and autosummaries are enabled.
+               // Provide autosummaries if one is not provided and autosummaries are enabled.
                if ( $wgUseAutomaticEditSummaries && $flags & EDIT_AUTOSUMMARY && $summary == '' ) {
                        if ( !$old_content ) $old_content = null;
                        $summary = $handler->getAutosummary( $old_content, $content, $flags );
@@ -1695,18 +1695,18 @@ class WikiPage extends Page implements IDBAccessObject {
                $this->mTimestamp = $now;
 
                if ( $flags & EDIT_UPDATE ) {
-                       # Update article, but only if changed.
+                       // Update article, but only if changed.
                        $status->value['new'] = false;
 
                        if ( !$oldid ) {
-                               # Article gone missing
+                               // Article gone missing
                                wfDebug( __METHOD__ . ": EDIT_UPDATE specified but article doesn't exist\n" );
                                $status->fatal( 'edit-gone-missing' );
 
                                wfProfileOut( __METHOD__ );
                                return $status;
                        } elseif ( !$old_content ) {
-                               # Sanity check for bug 37225
+                               // Sanity check for bug 37225
                                wfProfileOut( __METHOD__ );
                                throw new MWException( "Could not find text for current revision {$oldid}." );
                        }
@@ -1724,7 +1724,7 @@ class WikiPage extends Page implements IDBAccessObject {
                                'timestamp'  => $now,
                                'content_model' => $content->getModel(),
                                'content_format' => $serialisation_format,
-                       ) ); #XXX: pass content object?!
+                       ) ); // XXX: pass content object?!
 
                        $changed = !$content->equals( $old_content );
 
@@ -1747,17 +1747,17 @@ class WikiPage extends Page implements IDBAccessObject {
 
                                $revisionId = $revision->insertOn( $dbw );
 
-                               # Update page
-                               #
-                               # Note that we use $this->mLatest instead of fetching a value from the master DB
-                               # during the course of this function. This makes sure that EditPage can detect
-                               # edit conflicts reliably, either by $ok here, or by $article->getTimestamp()
-                               # before this function is called. A previous function used a separate query, this
-                               # creates a window where concurrent edits can cause an ignored edit conflict.
+                               // Update page
+                               //
+                               // Note that we use $this->mLatest instead of fetching a value from the master DB
+                               // during the course of this function. This makes sure that EditPage can detect
+                               // edit conflicts reliably, either by $ok here, or by $article->getTimestamp()
+                               // before this function is called. A previous function used a separate query, this
+                               // creates a window where concurrent edits can cause an ignored edit conflict.
                                $ok = $this->updateRevisionOn( $dbw, $revision, $oldid, $oldIsRedirect );
 
                                if ( !$ok ) {
-                                       # Belated edit conflict! Run away!!
+                                       // Belated edit conflict! Run away!!
                                        $status->fatal( 'edit-conflict' );
 
                                        $dbw->rollback( __METHOD__ );
@@ -1767,18 +1767,18 @@ class WikiPage extends Page implements IDBAccessObject {
                                }
 
                                wfRunHooks( 'NewRevisionFromEditComplete', array( $this, $revision, $baseRevId, $user ) );
-                               # Update recentchanges
+                               // Update recentchanges
                                if ( !( $flags & EDIT_SUPPRESS_RC ) ) {
-                                       # Mark as patrolled if the user can do so
+                                       // Mark as patrolled if the user can do so
                                        $patrolled = $wgUseRCPatrol && !count(
                                                $this->mTitle->getUserPermissionsErrors( 'autopatrol', $user ) );
-                                       # Add RC row to the DB
+                                       // Add RC row to the DB
                                        $rc = RecentChange::notifyEdit( $now, $this->mTitle, $isminor, $user, $summary,
                                                $oldid, $this->getTimestamp(), $bot, '', $oldsize, $newsize,
                                                $revisionId, $patrolled
                                        );
 
-                                       # Log auto-patrolled edits
+                                       // Log auto-patrolled edits
                                        if ( $patrolled ) {
                                                PatrolLog::record( $rc, true, $user );
                                        }
@@ -1791,7 +1791,7 @@ class WikiPage extends Page implements IDBAccessObject {
                                $revision->setId( $this->getLatest() );
                        }
 
-                       # Update links tables, site stats, etc.
+                       // Update links tables, site stats, etc.
                        $this->doEditUpdates(
                                $revision,
                                $user,
@@ -1809,7 +1809,7 @@ class WikiPage extends Page implements IDBAccessObject {
                                $this->mTitle->invalidateCache();
                        }
                } else {
-                       # Create new article
+                       // Create new article
                        $status->value['new'] = true;
 
                        $dbw->begin( __METHOD__ );
@@ -1826,8 +1826,8 @@ class WikiPage extends Page implements IDBAccessObject {
 
                        $status->merge( $prepStatus );
 
-                       # Add the page record; stake our claim on this title!
-                       # This will return false if the article already exists
+                       // Add the page record; stake our claim on this title!
+                       // This will return false if the article already exists
                        $newid = $this->insertOn( $dbw );
 
                        if ( $newid === false ) {
@@ -1838,7 +1838,7 @@ class WikiPage extends Page implements IDBAccessObject {
                                return $status;
                        }
 
-                       # Save the revision text...
+                       // Save the revision text...
                        $revision = new Revision( array(
                                'page'       => $newid,
                                'title'      => $this->getTitle(), // for determining the default content model
@@ -1854,28 +1854,28 @@ class WikiPage extends Page implements IDBAccessObject {
                        ) );
                        $revisionId = $revision->insertOn( $dbw );
 
-                       # Bug 37225: use accessor to get the text as Revision may trim it
+                       // Bug 37225: use accessor to get the text as Revision may trim it
                        $content = $revision->getContent(); // sanity; get normalized version
 
                        if ( $content ) {
                                $newsize = $content->getSize();
                        }
 
-                       # Update the page record with revision data
+                       // Update the page record with revision data
                        $this->updateRevisionOn( $dbw, $revision, 0 );
 
                        wfRunHooks( 'NewRevisionFromEditComplete', array( $this, $revision, false, $user ) );
 
-                       # Update recentchanges
+                       // Update recentchanges
                        if ( !( $flags & EDIT_SUPPRESS_RC ) ) {
-                               # Mark as patrolled if the user can do so
+                               // Mark as patrolled if the user can do so
                                $patrolled = ( $wgUseRCPatrol || $wgUseNPPatrol ) && !count(
                                        $this->mTitle->getUserPermissionsErrors( 'autopatrol', $user ) );
-                               # Add RC row to the DB
+                               // Add RC row to the DB
                                $rc = RecentChange::notifyNew( $now, $this->mTitle, $isminor, $user, $summary, $bot,
                                        '', $newsize, $revisionId, $patrolled );
 
-                               # Log auto-patrolled edits
+                               // Log auto-patrolled edits
                                if ( $patrolled ) {
                                        PatrolLog::record( $rc, true, $user );
                                }
@@ -1883,7 +1883,7 @@ class WikiPage extends Page implements IDBAccessObject {
                        $user->incEditCount();
                        $dbw->commit( __METHOD__ );
 
-                       # Update links, etc.
+                       // Update links, etc.
                        $this->doEditUpdates( $revision, $user, array( 'created' => true ) );
 
                        $hook_args = array( &$this, &$user, $content, $summary,
@@ -1893,7 +1893,7 @@ class WikiPage extends Page implements IDBAccessObject {
                        wfRunHooks( 'PageContentInsertComplete', $hook_args );
                }
 
-               # Do updates right now unless deferral was requested
+               // Do updates right now unless deferral was requested
                if ( !( $flags & EDIT_DEFER_UPDATES ) ) {
                        DeferredUpdates::doUpdates();
                }
@@ -1907,7 +1907,7 @@ class WikiPage extends Page implements IDBAccessObject {
                ContentHandler::runLegacyHooks( 'ArticleSaveComplete', $hook_args );
                wfRunHooks( 'PageContentSaveComplete', $hook_args );
 
-               # Promote user to any groups they meet the criteria for
+               // Promote user to any groups they meet the criteria for
                $user->addAutopromoteOnceGroups( 'onEdit' );
 
                wfProfileOut( __METHOD__ );
@@ -1948,7 +1948,7 @@ class WikiPage extends Page implements IDBAccessObject {
        public function prepareTextForEdit( $text, $revid = null, User $user = null ) {
                ContentHandler::deprecated( __METHOD__, '1.21' );
                $content = ContentHandler::makeContent( $text, $this->getTitle() );
-               return $this->prepareContentForEdit( $content, $revid , $user );
+               return $this->prepareContentForEdit( $content, $revid, $user );
        }
 
        /**
@@ -1974,7 +1974,7 @@ class WikiPage extends Page implements IDBAccessObject {
                        && $this->mPreparedEdit->newContent->equals( $content )
                        && $this->mPreparedEdit->revid == $revid
                        && $this->mPreparedEdit->format == $serialization_format
-                       #XXX: also check $user here?
+                       // XXX: also check $user here?
                ) {
                        // Already prepared
                        return $this->mPreparedEdit;
@@ -1995,7 +1995,7 @@ class WikiPage extends Page implements IDBAccessObject {
                $edit->newContent = $content;
                $edit->oldContent = $this->getContent( Revision::RAW );
 
-               #NOTE: B/C for hooks! don't use these fields!
+               // NOTE: B/C for hooks! don't use these fields!
                $edit->newText = $edit->newContent ? ContentHandler::getContentText( $edit->newContent ) : '';
                $edit->oldText = $edit->oldContent ? ContentHandler::getContentText( $edit->oldContent ) : '';
                $edit->pst = $edit->pstContent ? $edit->pstContent->serialize( $serialization_format ) : '';
@@ -2028,8 +2028,8 @@ class WikiPage extends Page implements IDBAccessObject {
                $options += array( 'changed' => true, 'created' => false, 'oldcountable' => null );
                $content = $revision->getContent();
 
-               # Parse the text
-               # Be careful not to double-PST: $text is usually already PST-ed once
+               // Parse the text
+               // Be careful not to double-PST: $text is usually already PST-ed once
                if ( !$this->mPreparedEdit || $this->mPreparedEdit->output->getFlag( 'vary-revision' ) ) {
                        wfDebug( __METHOD__ . ": No prepared edit or vary-revision is set...\n" );
                        $editInfo = $this->prepareContentForEdit( $content, $revision->getId(), $user );
@@ -2038,13 +2038,13 @@ class WikiPage extends Page implements IDBAccessObject {
                        $editInfo = $this->mPreparedEdit;
                }
 
-               # Save it to the parser cache
+               // Save it to the parser cache
                if ( $wgEnableParserCache ) {
                        $parserCache = ParserCache::singleton();
                        $parserCache->save( $editInfo->output, $this, $editInfo->popts );
                }
 
-               # Update the links tables and other secondary data
+               // Update the links tables and other secondary data
                if ( $content ) {
                        $updates = $content->getSecondaryDataUpdates( $this->getTitle(), null, true, $editInfo->output );
                        DataUpdate::runUpdates( $updates );
@@ -2062,7 +2062,7 @@ class WikiPage extends Page implements IDBAccessObject {
                                $cutoff = $dbw->timestamp( time() - $wgRCMaxAge );
                                $dbw->delete(
                                        'recentchanges',
-                                       array( "rc_timestamp < '$cutoff'" ),
+                                       array( 'rc_timestamp < ' . $dbw->addQuotes( $cutoff ) ),
                                        __METHOD__
                                );
                        }
@@ -2093,11 +2093,11 @@ class WikiPage extends Page implements IDBAccessObject {
 
                DeferredUpdates::addUpdate( new SiteStatsUpdate( 0, 1, $good, $total ) );
                DeferredUpdates::addUpdate( new SearchUpdate( $id, $title, $content->getTextForSearchIndex() ) );
-               #@TODO: let the search engine decide what to do with the content object
+               // @TODO: let the search engine decide what to do with the content object
 
-               # If this is another user's talk page, update newtalk.
-               # Don't do this if $options['changed'] = false (null-edits) nor if
-               # it's a minor edit and the user doesn't want notifications for those.
+               // If this is another user's talk page, update newtalk.
+               // Don't do this if $options['changed'] = false (null-edits) nor if
+               // it's a minor edit and the user doesn't want notifications for those.
                if ( $options['changed']
                        && $this->mTitle->getNamespace() == NS_USER_TALK
                        && $shortTitle != $user->getTitleKey()
@@ -2119,7 +2119,7 @@ class WikiPage extends Page implements IDBAccessObject {
                }
 
                if ( $this->mTitle->getNamespace() == NS_MEDIAWIKI ) {
-                       #XXX: could skip pseudo-messages like js/css here, based on content model.
+                       // XXX: could skip pseudo-messages like js/css here, based on content model.
                        $msgtext = $content ? $content->getWikitextForTransclusion() : null;
                        if ( $msgtext === false || $msgtext === null ) $msgtext = '';
 
@@ -2151,7 +2151,7 @@ class WikiPage extends Page implements IDBAccessObject {
                ContentHandler::deprecated( __METHOD__, "1.21" );
 
                $content = ContentHandler::makeContent( $text, $this->getTitle() );
-               return $this->doQuickEditContent( $content, $user, $comment , $minor );
+               return $this->doQuickEditContent( $content, $user, $comment, $minor );
        }
 
        /**
@@ -2178,7 +2178,7 @@ class WikiPage extends Page implements IDBAccessObject {
                        'length'     => $content->getSize(),
                        'comment'    => $comment,
                        'minor_edit' => $minor ? 1 : 0,
-               ) ); #XXX: set the content object?
+               ) ); // XXX: set the content object?
                $revision->insertOn( $dbw );
                $this->updateRevisionOn( $dbw, $revision );
 
@@ -2216,8 +2216,8 @@ class WikiPage extends Page implements IDBAccessObject {
                // Take this opportunity to purge out expired restrictions
                Title::purgeExpiredRestrictions();
 
-               # @todo FIXME: Same limitations as described in ProtectionForm.php (line 37);
-               # we expect a single selection, but the schema allows otherwise.
+               // @todo FIXME: Same limitations as described in ProtectionForm.php (line 37);
+               // we expect a single selection, but the schema allows otherwise.
                $isProtected = false;
                $protect = false;
                $changed = false;
@@ -2234,7 +2234,7 @@ class WikiPage extends Page implements IDBAccessObject {
                                $protect = true;
                        }
 
-                       # Get current restrictions on $action
+                       // Get current restrictions on $action
                        $current = implode( '', $this->mTitle->getRestrictions( $action ) );
                        if ( $current != '' ) {
                                $isProtected = true;
@@ -2243,9 +2243,9 @@ class WikiPage extends Page implements IDBAccessObject {
                        if ( $limit[$action] != $current ) {
                                $changed = true;
                        } elseif ( $limit[$action] != '' ) {
-                               # Only check expiry change if the action is actually being
-                               # protected, since expiry does nothing on an not-protected
-                               # action.
+                               // Only check expiry change if the action is actually being
+                               // protected, since expiry does nothing on an not-protected
+                               // action.
                                if ( $this->mTitle->getRestrictionExpiry( $action ) != $expiry[$action] ) {
                                        $changed = true;
                                }
@@ -2256,12 +2256,12 @@ class WikiPage extends Page implements IDBAccessObject {
                        $changed = true;
                }
 
-               # If nothing's changed, do nothing
+               // If nothing's changed, do nothing
                if ( !$changed ) {
                        return Status::newGood();
                }
 
-               if ( !$protect ) { # No protection at all means unprotection
+               if ( !$protect ) { // No protection at all means unprotection
                        $revCommentMsg = 'unprotectedarticle';
                        $logAction = 'unprotect';
                } elseif ( $isProtected ) {
@@ -2274,42 +2274,64 @@ class WikiPage extends Page implements IDBAccessObject {
 
                $encodedExpiry = array();
                $protectDescription = '';
+               # Some bots may parse IRC lines, which are generated from log entries which contain plain
+               # protect description text. Keep them in old format to avoid breaking compatibility.
+               # TODO: Fix protection log to store structured description and format it on-the-fly.
+               $protectDescriptionLog = '';
                foreach ( $limit as $action => $restrictions ) {
                        $encodedExpiry[$action] = $dbw->encodeExpiry( $expiry[$action] );
                        if ( $restrictions != '' ) {
-                               $protectDescription .= $wgContLang->getDirMark() . "[$action=$restrictions] (";
+                               $protectDescriptionLog .= $wgContLang->getDirMark() . "[$action=$restrictions] (";
+                               # $action is one of $wgRestrictionTypes = array( 'create', 'edit', 'move', 'upload' ).
+                               # All possible message keys are listed here for easier grepping:
+                               # * restriction-create
+                               # * restriction-edit
+                               # * restriction-move
+                               # * restriction-upload
+                               $actionText = wfMessage( 'restriction-' . $action )->inContentLanguage()->text();
+                               # $restrictions is one of $wgRestrictionLevels = array( '', 'autoconfirmed', 'sysop' ),
+                               # with '' filtered out. All possible message keys are listed below:
+                               # * protect-level-autoconfirmed
+                               # * protect-level-sysop
+                               $restrictionsText = wfMessage( 'protect-level-' . $restrictions )->inContentLanguage()->text();
                                if ( $encodedExpiry[$action] != 'infinity' ) {
-                                       $protectDescription .= wfMessage(
+                                       $expiryText = wfMessage(
                                                'protect-expiring',
-                                               $wgContLang->timeanddate( $expiry[$action], false, false ) ,
-                                               $wgContLang->date( $expiry[$action], false, false ) ,
+                                               $wgContLang->timeanddate( $expiry[$action], false, false ),
+                                               $wgContLang->date( $expiry[$action], false, false ),
                                                $wgContLang->time( $expiry[$action], false, false )
                                        )->inContentLanguage()->text();
                                } else {
-                                       $protectDescription .= wfMessage( 'protect-expiry-indefinite' )
+                                       $expiryText = wfMessage( 'protect-expiry-indefinite' )
                                                ->inContentLanguage()->text();
                                }
 
-                               $protectDescription .= ') ';
+                               if ( $protectDescription !== '' ) {
+                                       $protectDescription .= wfMessage( 'word-separator' )->inContentLanguage()->text();
+                               }
+                               $protectDescription .= wfMessage( 'protect-summary-desc' )
+                                       ->params( $actionText, $restrictionsText, $expiryText )
+                                       ->inContentLanguage()->text();
+                               $protectDescriptionLog .= $expiryText . ') ';
                        }
                }
-               $protectDescription = trim( $protectDescription );
+               $protectDescriptionLog = trim( $protectDescriptionLog );
 
-               if ( $id ) { # Protection of existing page
+               if ( $id ) { // Protection of existing page
                        if ( !wfRunHooks( 'ArticleProtect', array( &$this, &$user, $limit, $reason ) ) ) {
                                return Status::newGood();
                        }
 
-                       # Only restrictions with the 'protect' right can cascade...
-                       # Otherwise, people who cannot normally protect can "protect" pages via transclusion
+                       // Only restrictions with the 'protect' right can cascade...
+                       // Otherwise, people who cannot normally protect can "protect" pages via transclusion
                        $editrestriction = isset( $limit['edit'] ) ? array( $limit['edit'] ) : $this->mTitle->getRestrictions( 'edit' );
 
-                       # The schema allows multiple restrictions
+                       // The schema allows multiple restrictions
                        if ( !in_array( 'protect', $editrestriction ) && !in_array( 'sysop', $editrestriction ) ) {
                                $cascade = false;
                        }
 
-                       # Update restrictions table
+                       // Update restrictions table
                        foreach ( $limit as $action => $restrictions ) {
                                if ( $restrictions != '' ) {
                                        $dbw->replace( 'page_restrictions', array( array( 'pr_page', 'pr_type' ) ),
@@ -2327,7 +2349,7 @@ class WikiPage extends Page implements IDBAccessObject {
                                }
                        }
 
-                       # Prepare a null revision to be added to the history
+                       // Prepare a null revision to be added to the history
                        $editComment = $wgContLang->ucfirst(
                                wfMessage(
                                        $revCommentMsg,
@@ -2335,23 +2357,25 @@ class WikiPage extends Page implements IDBAccessObject {
                                )->inContentLanguage()->text()
                        );
                        if ( $reason ) {
-                               $editComment .= ": $reason";
+                               $editComment .= wfMessage( 'colon-separator' )->inContentLanguage()->text() . $reason;
                        }
                        if ( $protectDescription ) {
-                               $editComment .= " ($protectDescription)";
+                               $editComment .= wfMessage( 'word-separator' )->inContentLanguage()->text();
+                               $editComment .= wfMessage( 'parentheses' )->params( $protectDescription )->inContentLanguage()->text();
                        }
                        if ( $cascade ) {
-                               // FIXME: Should use 'brackets' message.
-                               $editComment .= ' [' . wfMessage( 'protect-summary-cascade' )
-                                       ->inContentLanguage()->text() . ']';
+                               $editComment .= wfMessage( 'word-separator' )->inContentLanguage()->text();
+                               $editComment .= wfMessage( 'brackets' )->params(
+                                       wfMessage( 'protect-summary-cascade' )->inContentLanguage()->text()
+                               )->inContentLanguage()->text();
                        }
 
-                       # Insert a null revision
+                       // Insert a null revision
                        $nullRevision = Revision::newNullRevision( $dbw, $id, $editComment, true );
                        $nullRevId = $nullRevision->insertOn( $dbw );
 
                        $latest = $this->getLatest();
-                       # Update page record
+                       // Update page record
                        $dbw->update( 'page',
                                array( /* SET */
                                        'page_touched' => $dbw->timestamp(),
@@ -2364,8 +2388,8 @@ class WikiPage extends Page implements IDBAccessObject {
 
                        wfRunHooks( 'NewRevisionFromEditComplete', array( $this, $nullRevision, $latest, $user ) );
                        wfRunHooks( 'ArticleProtectComplete', array( &$this, &$user, $limit, $reason ) );
-               } else { # Protection of non-existing page (also known as "title protection")
-                       # Cascade protection is meaningless in this case
+               } else { // Protection of non-existing page (also known as "title protection")
+                       // Cascade protection is meaningless in this case
                        $cascade = false;
 
                        if ( $limit['create'] != '' ) {
@@ -2396,10 +2420,10 @@ class WikiPage extends Page implements IDBAccessObject {
                if ( $logAction == 'unprotect' ) {
                        $logParams = array();
                } else {
-                       $logParams = array( $protectDescription, $cascade ? 'cascade' : '' );
+                       $logParams = array( $protectDescriptionLog, $cascade ? 'cascade' : '' );
                }
 
-               # Update the protection log
+               // Update the protection log
                $log = new LogPage( 'protect' );
                $log->addEntry( $logAction, $this->mTitle, trim( $reason ), $logParams, $user );
 
@@ -2562,7 +2586,7 @@ class WikiPage extends Page implements IDBAccessObject {
                        ), __METHOD__
                );
 
-               # Now that it's safely backed up, delete it
+               // Now that it's safely backed up, delete it
                $dbw->delete( 'page', array( 'page_id' => $id ), __METHOD__ );
                $ok = ( $dbw->affectedRows() > 0 ); // getArticleID() uses slave, could be laggy
 
@@ -2574,7 +2598,7 @@ class WikiPage extends Page implements IDBAccessObject {
 
                $this->doDeleteUpdates( $id, $content );
 
-               # Log the deletion, if the page was suppressed, log it at Oversight instead
+               // Log the deletion, if the page was suppressed, log it at Oversight instead
                $logtype = $suppress ? 'suppress' : 'delete';
 
                $logEntry = new ManualLogEntry( $logtype, 'delete' );
@@ -2601,20 +2625,20 @@ class WikiPage extends Page implements IDBAccessObject {
         *        This may be needed because $this->getContent() may already return null when the page proper was deleted.
         */
        public function doDeleteUpdates( $id, Content $content = null ) {
-               # update site status
+               // update site status
                DeferredUpdates::addUpdate( new SiteStatsUpdate( 0, 1, - (int)$this->isCountable(), -1 ) );
 
-               # remove secondary indexes, etc
+               // remove secondary indexes, etc
                $updates = $this->getDeletionUpdates( $content );
                DataUpdate::runUpdates( $updates );
 
-               # Clear caches
+               // Clear caches
                WikiPage::onArticleDelete( $this->mTitle );
 
-               # Reset this object
+               // Reset this object
                $this->clear();
 
-               # Clear the cached article id so the interface doesn't act like we exist
+               // Clear the cached article id so the interface doesn't act like we exist
                $this->mTitle->resetArticleID( 0 );
        }
 
@@ -2647,7 +2671,7 @@ class WikiPage extends Page implements IDBAccessObject {
        ) {
                $resultDetails = null;
 
-               # Check permissions
+               // Check permissions
                $editErrors = $this->mTitle->getUserPermissionsErrors( 'edit', $user );
                $rollbackErrors = $this->mTitle->getUserPermissionsErrors( 'rollback', $user );
                $errors = array_merge( $editErrors, wfArrayDiff2( $rollbackErrors, $editErrors ) );
@@ -2660,7 +2684,7 @@ class WikiPage extends Page implements IDBAccessObject {
                        $errors[] = array( 'actionthrottledtext' );
                }
 
-               # If there were errors, bail out now
+               // If there were errors, bail out now
                if ( !empty( $errors ) ) {
                        return $errors;
                }
@@ -2693,16 +2717,16 @@ class WikiPage extends Page implements IDBAccessObject {
                        return array( array( 'readonlytext' ) );
                }
 
-               # Get the last editor
+               // Get the last editor
                $current = $this->getRevision();
                if ( is_null( $current ) ) {
-                       # Something wrong... no page?
+                       // Something wrong... no page?
                        return array( array( 'notanarticle' ) );
                }
 
                $from = str_replace( '_', ' ', $fromP );
-               # User name given should match up with the top revision.
-               # If the user was deleted then $from should be empty.
+               // User name given should match up with the top revision.
+               // If the user was deleted then $from should be empty.
                if ( $from != $current->getUserText() ) {
                        $resultDetails = array( 'current' => $current );
                        return array( array( 'alreadyrolled',
@@ -2712,8 +2736,8 @@ class WikiPage extends Page implements IDBAccessObject {
                        ) );
                }
 
-               # Get the last edit not by this guy...
-               # Note: these may not be public values
+               // Get the last edit not by this guy...
+               // Note: these may not be public values
                $user = intval( $current->getRawUser() );
                $user_text = $dbw->addQuotes( $current->getRawUserText() );
                $s = $dbw->selectRow( 'revision',
@@ -2725,21 +2749,21 @@ class WikiPage extends Page implements IDBAccessObject {
                                'ORDER BY' => 'rev_timestamp DESC' )
                        );
                if ( $s === false ) {
-                       # No one else ever edited this page
+                       // No one else ever edited this page
                        return array( array( 'cantrollback' ) );
                } elseif ( $s->rev_deleted & Revision::DELETED_TEXT || $s->rev_deleted & Revision::DELETED_USER ) {
-                       # Only admins can see this text
+                       // Only admins can see this text
                        return array( array( 'notvisiblerev' ) );
                }
 
                $set = array();
                if ( $bot && $guser->isAllowed( 'markbotedits' ) ) {
-                       # Mark all reverted edits as bot
+                       // Mark all reverted edits as bot
                        $set['rc_bot'] = 1;
                }
 
                if ( $wgUseRCPatrol ) {
-                       # Mark all reverted edits as patrolled
+                       // Mark all reverted edits as patrolled
                        $set['rc_patrolled'] = 1;
                }
 
@@ -2753,7 +2777,7 @@ class WikiPage extends Page implements IDBAccessObject {
                        );
                }
 
-               # Generate the edit summary if necessary
+               // Generate the edit summary if necessary
                $target = Revision::newFromId( $s->rev_id );
                if ( empty( $summary ) ) {
                        if ( $from == '' ) { // no public user name
@@ -2763,7 +2787,7 @@ class WikiPage extends Page implements IDBAccessObject {
                        }
                }
 
-               # Allow the custom summary to use the same args as the default message
+               // Allow the custom summary to use the same args as the default message
                $args = array(
                        $target->getUserText(), $from, $s->rev_id,
                        $wgContLang->timeanddate( wfTimestamp( TS_MW, $s->rev_timestamp ) ),
@@ -2775,10 +2799,13 @@ class WikiPage extends Page implements IDBAccessObject {
                        $summary = wfMsgReplaceArgs( $summary, $args );
                }
 
-               # Truncate for whole multibyte characters.
+               // Trim spaces on user supplied text
+               $summary = trim( $summary );
+
+               // Truncate for whole multibyte characters.
                $summary = $wgContLang->truncate( $summary, 255 );
 
-               # Save
+               // Save
                $flags = EDIT_UPDATE;
 
                if ( $guser->isAllowed( 'minoredit' ) ) {
@@ -2789,7 +2816,7 @@ class WikiPage extends Page implements IDBAccessObject {
                        $flags |= EDIT_FORCE_BOT;
                }
 
-               # Actually store the edit
+               // Actually store the edit
                $status = $this->doEditContent( $target->getContent(), $summary, $flags, $target->getId(), $guser );
 
                if ( !$status->isOK() ) {
@@ -2826,7 +2853,7 @@ class WikiPage extends Page implements IDBAccessObject {
         * @param $title Title object
         */
        public static function onArticleCreate( $title ) {
-               # Update existence markers on article/talk tabs...
+               // Update existence markers on article/talk tabs...
                if ( $title->isTalkPage() ) {
                        $other = $title->getSubjectPage();
                } else {
@@ -2847,7 +2874,7 @@ class WikiPage extends Page implements IDBAccessObject {
         * @param $title Title
         */
        public static function onArticleDelete( $title ) {
-               # Update existence markers on article/talk tabs...
+               // Update existence markers on article/talk tabs...
                if ( $title->isTalkPage() ) {
                        $other = $title->getSubjectPage();
                } else {
@@ -2860,21 +2887,21 @@ class WikiPage extends Page implements IDBAccessObject {
                $title->touchLinks();
                $title->purgeSquid();
 
-               # File cache
+               // File cache
                HTMLFileCache::clearFileCache( $title );
 
-               # Messages
+               // Messages
                if ( $title->getNamespace() == NS_MEDIAWIKI ) {
                        MessageCache::singleton()->replace( $title->getDBkey(), false );
                }
 
-               # Images
+               // Images
                if ( $title->getNamespace() == NS_FILE ) {
                        $update = new HTMLCacheUpdate( $title, 'imagelinks' );
                        $update->doUpdate();
                }
 
-               # User talk pages
+               // User talk pages
                if ( $title->getNamespace() == NS_USER_TALK ) {
                        $user = User::newFromName( $title->getText(), false );
                        if ( $user ) {
@@ -2882,7 +2909,7 @@ class WikiPage extends Page implements IDBAccessObject {
                        }
                }
 
-               # Image redirects
+               // Image redirects
                RepoGroup::singleton()->getLocalRepo()->invalidateImageRedirect( $title );
        }
 
@@ -2896,14 +2923,13 @@ class WikiPage extends Page implements IDBAccessObject {
                // Invalidate caches of articles which include this page
                DeferredUpdates::addHTMLCacheUpdate( $title, 'templatelinks' );
 
-
                // Invalidate the caches of all pages which redirect here
                DeferredUpdates::addHTMLCacheUpdate( $title, 'redirect' );
 
-               # Purge squid for this page only
+               // Purge squid for this page only
                $title->purgeSquid();
 
-               # Clear file cache for this page only
+               // Clear file cache for this page only
                HTMLFileCache::clearFileCache( $title );
        }
 
@@ -2949,7 +2975,7 @@ class WikiPage extends Page implements IDBAccessObject {
        * @deprecated since 1.21, use ContentHandler::getAutosummary() instead
        */
        public static function getAutosummary( $oldtext, $newtext, $flags ) {
-               # NOTE: stub for backwards-compatibility. assumes the given text is wikitext. will break horribly if it isn't.
+               // NOTE: stub for backwards-compatibility. assumes the given text is wikitext. will break horribly if it isn't.
 
                ContentHandler::deprecated( __METHOD__, '1.21' );
 
@@ -2982,15 +3008,15 @@ class WikiPage extends Page implements IDBAccessObject {
                $ns = $this->mTitle->getNamespace();
                $dbw = wfGetDB( DB_MASTER );
 
-               # First make sure the rows exist.  If one of the "deleted" ones didn't
-               # exist, we might legitimately not create it, but it's simpler to just
-               # create it and then give it a negative value, since the value is bogus
-               # anyway.
-               #
-               # Sometimes I wish we had INSERT ... ON DUPLICATE KEY UPDATE.
+               // First make sure the rows exist.  If one of the "deleted" ones didn't
+               // exist, we might legitimately not create it, but it's simpler to just
+               // create it and then give it a negative value, since the value is bogus
+               // anyway.
+               //
+               // Sometimes I wish we had INSERT ... ON DUPLICATE KEY UPDATE.
                $insertCats = array_merge( $added, $deleted );
                if ( !$insertCats ) {
-                       # Okay, nothing to do
+                       // Okay, nothing to do
                        return;
                }
 
@@ -3008,10 +3034,10 @@ class WikiPage extends Page implements IDBAccessObject {
                $removeFields = array( 'cat_pages = cat_pages - 1' );
 
                if ( $ns == NS_CATEGORY ) {
-                       $addFields[]    = 'cat_subcats = cat_subcats + 1';
+                       $addFields[] = 'cat_subcats = cat_subcats + 1';
                        $removeFields[] = 'cat_subcats = cat_subcats - 1';
                } elseif ( $ns == NS_FILE ) {
-                       $addFields[]    = 'cat_files = cat_files + 1';
+                       $addFields[] = 'cat_files = cat_files + 1';
                        $removeFields[] = 'cat_files = cat_files - 1';
                }
 
@@ -3051,7 +3077,7 @@ class WikiPage extends Page implements IDBAccessObject {
                // that cascaded protections apply as soon as the changes
                // are visible.
 
-               # Get templates from templatelinks
+               // Get templates from templatelinks
                $id = $this->mTitle->getArticleID();
 
                $tlTemplates = array();
@@ -3067,7 +3093,7 @@ class WikiPage extends Page implements IDBAccessObject {
                        $tlTemplates["{$row->tl_namespace}:{$row->tl_title}"] = true;
                }
 
-               # Get templates from parser output.
+               // Get templates from parser output.
                $poTemplates = array();
                foreach ( $parserOutput->getTemplates() as $ns => $templates ) {
                        foreach ( $templates as $dbk => $id ) {
@@ -3075,12 +3101,12 @@ class WikiPage extends Page implements IDBAccessObject {
                        }
                }
 
-               # Get the diff
+               // Get the diff
                $templates_diff = array_diff_key( $poTemplates, $tlTemplates );
 
                if ( count( $templates_diff ) > 0 ) {
-                       # Whee, link updates time.
-                       # Note: we are only interested in links here. We don't need to get other DataUpdate items from the parser output.
+                       // Whee, link updates time.
+                       // Note: we are only interested in links here. We don't need to get other DataUpdate items from the parser output.
                        $u = new LinksUpdate( $this->mTitle, $parserOutput, false );
                        $u->doUpdate();
                }
@@ -3289,7 +3315,7 @@ class PoolWorkArticleView extends PoolCounterWork {
         * @param $content Content|String: content to parse or null to load it; may also be given as a wikitext string, for BC
         */
        function __construct( Page $page, ParserOptions $parserOptions, $revid, $useParserCache, $content = null ) {
-               if ( is_string($content) ) { #BC: old style call
+               if ( is_string( $content ) ) { // BC: old style call
                        $modelId = $page->getRevision()->getContentModel();
                        $format = $page->getRevision()->getContentFormat();
                        $content = ContentHandler::makeContent( $content, $page->getTitle(), $modelId, $format );
@@ -3345,7 +3371,7 @@ class PoolWorkArticleView extends PoolCounterWork {
                if ( $this->content !== null ) {
                        $content = $this->content;
                } elseif ( $isCurrent ) {
-                       #XXX: why use RAW audience here, and PUBLIC (default) below?
+                       // XXX: why use RAW audience here, and PUBLIC (default) below?
                        $content = $this->page->getContent( Revision::RAW );
                } else {
                        $rev = Revision::newFromTitle( $this->page->getTitle(), $this->revid );
@@ -3353,7 +3379,7 @@ class PoolWorkArticleView extends PoolCounterWork {
                        if ( $rev === null ) {
                                $content = null;
                        } else {
-                               #XXX: why use PUBLIC audience here (default), and RAW above?
+                               // XXX: why use PUBLIC audience here (default), and RAW above?
                                $content = $rev->getContent();
                        }
                }
@@ -3366,7 +3392,7 @@ class PoolWorkArticleView extends PoolCounterWork {
                $this->parserOutput = $content->getParserOutput( $this->page->getTitle(), $this->revid, $this->parserOptions );
                $time += microtime( true );
 
-               # Timing hack
+               // Timing hack
                if ( $time > 3 ) {
                        wfDebugLog( 'slow-parse', sprintf( "%-5.2f %s", $time,
                                $this->page->getTitle()->getPrefixedDBkey() ) );
@@ -3432,4 +3458,3 @@ class PoolWorkArticleView extends PoolCounterWork {
                return false;
        }
 }
-
index 67f3658..59d4222 100644 (file)
@@ -192,7 +192,7 @@ class Xml {
                } elseif( $encMonth ) {
                        $thisMonth = intval( gmdate( 'n' ) );
                        $thisYear = intval( gmdate( 'Y' ) );
-                       if( intval($encMonth) > $thisMonth ) {
+                       if( intval( $encMonth ) > $thisMonth ) {
                                $thisYear--;
                        }
                        $encYear = $thisYear;
@@ -369,10 +369,10 @@ class Xml {
                $a = array( 'for' => $id );
 
                # FIXME avoid copy pasting below:
-               if( isset( $attribs['class'] ) ){
+               if( isset( $attribs['class'] ) ) {
                                $a['class'] = $attribs['class'];
                }
-               if( isset( $attribs['title'] ) ){
+               if( isset( $attribs['title'] ) ) {
                                $a['title'] = $attribs['title'];
                }
 
@@ -500,7 +500,7 @@ class Xml {
                                } elseif ( substr( $value, 0, 1) == '*' && substr( $value, 1, 1) != '*' ) {
                                        // A new group is starting ...
                                        $value = trim( substr( $value, 1 ) );
-                                       if( $optgroup ) $options .= self::closeElement('optgroup');
+                                       if( $optgroup ) $options .= self::closeElement( 'optgroup' );
                                        $options .= self::openElement( 'optgroup', array( 'label' => $value ) );
                                        $optgroup = true;
                                } elseif ( substr( $value, 0, 2) == '**' ) {
@@ -509,13 +509,13 @@ class Xml {
                                        $options .= self::option( $value, $value, $selected === $value );
                                } else {
                                        // groupless reason list
-                                       if( $optgroup ) $options .= self::closeElement('optgroup');
+                                       if( $optgroup ) $options .= self::closeElement( 'optgroup' );
                                        $options .= self::option( $value, $value, $selected === $value );
                                        $optgroup = false;
                                }
                        }
 
-                       if( $optgroup ) $options .= self::closeElement('optgroup');
+                       if( $optgroup ) $options .= self::closeElement( 'optgroup' );
 
                $attribs = array();
 
@@ -636,10 +636,10 @@ class Xml {
                } elseif ( is_null( $value ) ) {
                        $s = 'null';
                } elseif ( is_int( $value ) || is_float( $value ) ) {
-                       $s = strval($value);
+                       $s = strval( $value );
                } elseif ( is_array( $value ) && // Make sure it's not associative.
-                                       array_keys($value) === range( 0, count($value) - 1 ) ||
-                                       count($value) == 0
+                                       array_keys( $value ) === range( 0, count( $value ) - 1 ) ||
+                                       count( $value ) == 0
                                ) {
                        $s = '[';
                        foreach ( $value as $elt ) {
@@ -682,22 +682,11 @@ class Xml {
         * @return string
         */
        public static function encodeJsCall( $name, $args ) {
-               $s = "$name(";
-               $first = true;
-
-               foreach ( $args as $arg ) {
-                       if ( $first ) {
-                               $first = false;
-                       } else {
-                               $s .= ', ';
-                       }
-
-                       $s .= Xml::encodeJsVar( $arg );
+               foreach ( $args as &$arg ) {
+                       $arg = Xml::encodeJsVar( $arg );
                }
 
-               $s .= ");\n";
-
-               return $s;
+               return "$name(" . implode( ', ', $args ) . ");\n";
        }
 
        /**
@@ -775,7 +764,7 @@ class Xml {
                foreach( $fields as $labelmsg => $input ) {
                        $id = "mw-$labelmsg";
                        $form .= Xml::openElement( 'tr', array( 'id' => $id ) );
-                       $form .= Xml::tags( 'td', array('class' => 'mw-label'), wfMessage( $labelmsg )->parse() );
+                       $form .= Xml::tags( 'td', array( 'class' => 'mw-label'), wfMessage( $labelmsg )->parse() );
                        $form .= Xml::openElement( 'td', array( 'class' => 'mw-input' ) ) . $input . Xml::closeElement( 'td' );
                        $form .= Xml::closeElement( 'tr' );
                }
index 34efc38..df98836 100644 (file)
@@ -15769,6 +15769,7 @@ $zh2Hans = array(
 '達著述' => '达著述',
 '近角聪信' => '近角聪信',
 '近角聰信' => '近角聪信',
+'这么' => '这么',
 '遠著' => '远着',
 '遠著書' => '远著书',
 '遠著作' => '远著作',
index ccdf2bb..fc36b1f 100644 (file)
@@ -181,7 +181,7 @@ class ZipDirectoryReader {
         * Throw an error, and log a debug message
         */
        function error( $code, $debugMessage ) {
-               wfDebug( __CLASS__.": Fatal error: $debugMessage\n" );
+               wfDebug( __CLASS__ . ": Fatal error: $debugMessage\n" );
                throw new ZipDirectoryReaderError( $code );
        }
 
@@ -220,7 +220,7 @@ class ZipDirectoryReader {
                if ( $structSize + $this->eocdr['file comment length'] != strlen( $block ) - $sigPos ) {
                        $this->error( 'zip-bad', 'trailing bytes after the end of the file comment' );
                }
-               if (   $this->eocdr['disk'] !== 0
+               if ( $this->eocdr['disk'] !== 0
                        || $this->eocdr['CD start disk'] !== 0 )
                {
                        $this->error( 'zip-unsupported', 'more than one disk (in EOCDR)' );
@@ -262,7 +262,7 @@ class ZipDirectoryReader {
         * may replace the regular "end of central directory record" in ZIP64 files.
         */
        function readZip64EndOfCentralDirectoryRecord() {
-               if (   $this->eocdr64Locator['eocdr64 start disk'] != 0
+               if ( $this->eocdr64Locator['eocdr64 start disk'] != 0
                        || $this->eocdr64Locator['number of disks'] != 0 )
                {
                        $this->error( 'zip-unsupported', 'more than one disk (in EOCDR64 locator)' );
@@ -286,7 +286,7 @@ class ZipDirectoryReader {
                if ( $data['signature'] !== "PK\x06\x06" ) {
                        $this->error( 'zip-bad', 'wrong signature on Zip64 end of central directory record' );
                }
-               if (   $data['disk'] !== 0
+               if ( $data['disk'] !== 0
                        || $data['CD start disk'] !== 0 )
                {
                        $this->error( 'zip-unsupported', 'more than one disk (in EOCDR64)' );
@@ -327,7 +327,7 @@ class ZipDirectoryReader {
                $offset = $this->eocdr['CD offset'];
                $numEntries = $this->eocdr['CD entries total'];
                $endPos = $this->eocdr['position'];
-               if (   $size == 0xffffffff
+               if ( $size == 0xffffffff
                        || $offset == 0xffffffff
                        || $numEntries == 0xffff )
                {
@@ -395,7 +395,7 @@ class ZipDirectoryReader {
                        $data += $this->unpack( $block, $variableInfo, $pos );
                        $pos += $this->getStructSize( $variableInfo );
 
-                       if (   $this->zip64 && (
+                       if ( $this->zip64 && (
                                   $data['compressed size'] == 0xffffffff
                                || $data['uncompressed size'] == 0xffffffff
                                || $data['local header offset'] == 0xffffffff ) )
@@ -618,7 +618,7 @@ class ZipDirectoryReader {
                                        $pos += $fieldSize;
                                        break;
                                default:
-                                       throw new MWException( __METHOD__.": invalid type \"$typeName\"" );
+                                       throw new MWException( __METHOD__ . ": invalid type \"$typeName\"" );
                                }
                        } else {
                                // Unsigned little-endian integer
index 5a5a382..3cb24e6 100644 (file)
@@ -29,11 +29,11 @@ class DeleteAction extends FormlessAction {
                return 'delete';
        }
 
-       public function onView(){
+       public function onView() {
                return null;
        }
 
-       public function show(){
+       public function show() {
 
                $this->page->delete();
 
index 08a33f4..eb261fc 100644 (file)
@@ -29,11 +29,11 @@ class EditAction extends FormlessAction {
                return 'edit';
        }
 
-       public function onView(){
+       public function onView() {
                return null;
        }
 
-       public function show(){
+       public function show() {
                $page = $this->page;
                $request = $this->getRequest();
                $user = $this->getUser();
@@ -62,7 +62,7 @@ class SubmitAction extends EditAction {
                return 'submit';
        }
 
-       public function show(){
+       public function show() {
                if ( session_id() == '' ) {
                        // Send a cookie so anons get talk message notifications
                        wfSetupSession();
index 61de3b6..d26228a 100644 (file)
@@ -23,7 +23,7 @@
  */
 
 /**
- * This class handles printing the history page for an article.  In order to
+ * This class handles printing the history page for an article. In order to
  * be efficient, it uses timestamps rather than offsets for paging, to avoid
  * costly LIMIT,offset queries.
  *
@@ -132,7 +132,7 @@ class HistoryAction extends FormlessAction {
                                array( 'delete', 'move' ),
                                $this->getTitle(),
                                '',
-                               array(  'lim' => 10,
+                               array( 'lim' => 10,
                                        'conds' => array( "log_action != 'revision'" ),
                                        'showIfEmpty' => false,
                                        'msgKey' => array( 'moveddeleted-notice' )
@@ -154,7 +154,7 @@ class HistoryAction extends FormlessAction {
                 * Option to show only revisions that have been (partially) hidden via RevisionDelete
                 */
                if ( $request->getBool( 'deleted' ) ) {
-                       $conds = array( "rev_deleted != '0'" );
+                       $conds = array( 'rev_deleted != 0' );
                } else {
                        $conds = array();
                }
@@ -176,7 +176,7 @@ class HistoryAction extends FormlessAction {
                        ) .
                        Html::hidden( 'title', $this->getTitle()->getPrefixedDBKey() ) . "\n" .
                        Html::hidden( 'action', 'history' ) . "\n" .
-                       Xml::dateMenu( $year, $month ) . '&#160;' .
+                       Xml::dateMenu( ( $year == null ? date( "Y" ) : $year ), $month ) . '&#160;' .
                        ( $tagSelector ? ( implode( '&#160;', $tagSelector ) . '&#160;' ) : '' ) .
                        $checkDeleted .
                        Xml::submitButton( $this->msg( 'allpagessubmit' )->text() ) . "\n" .
@@ -222,7 +222,7 @@ class HistoryAction extends FormlessAction {
                }
 
                if ( $offset ) {
-                       $offsets = array( "rev_timestamp $oper '$offset'" );
+                       $offsets = array( 'rev_timestamp $oper ' . $dbr->addQuotes( $dbr->timestamp( $offset ) ) );
                } else {
                        $offsets = array();
                }
@@ -231,7 +231,7 @@ class HistoryAction extends FormlessAction {
 
                return $dbr->select( 'revision',
                        Revision::selectFields(),
-                       array_merge( array( "rev_page=$page_id" ), $offsets ),
+                       array_merge( array( 'rev_page' => $page_id ), $offsets ),
                        __METHOD__,
                        array( 'ORDER BY' => "rev_timestamp $dirs",
                                'USE INDEX' => 'page_timestamp', 'LIMIT' => $limit )
@@ -515,7 +515,7 @@ class HistoryPager extends ReverseChronologicalPager {
        function submitButton( $message, $attributes = array() ) {
                # Disable submit button if history has 1 revision only
                if ( $this->getNumRows() > 1 ) {
-                       return Xml::submitButton( $message , $attributes );
+                       return Xml::submitButton( $message, $attributes );
                } else {
                        return '';
                }
@@ -602,19 +602,22 @@ class HistoryPager extends ReverseChronologicalPager {
                        $s .= ' ' . ChangesList::flag( 'minor' );
                }
 
-               # Size is always public data
-               $prevSize = isset( $this->parentLens[$row->rev_parent_id] )
-                       ? $this->parentLens[$row->rev_parent_id]
-                       : 0;
-               $sDiff = ChangesList::showCharacterDifference( $prevSize, $rev->getSize() );
-               $fSize = Linker::formatRevisionSize($rev->getSize());
-               $s .= ' <span class="mw-changeslist-separator">. .</span> ' . "$fSize $sDiff";
+               # Sometimes rev_len isn't populated
+               if ( $rev->getSize() !== null ) {
+                       # Size is always public data
+                       $prevSize = isset( $this->parentLens[$row->rev_parent_id] )
+                               ? $this->parentLens[$row->rev_parent_id]
+                               : 0;
+                       $sDiff = ChangesList::showCharacterDifference( $prevSize, $rev->getSize() );
+                       $fSize = Linker::formatRevisionSize( $rev->getSize() );
+                       $s .= ' <span class="mw-changeslist-separator">. .</span> ' . "$fSize $sDiff";
+               }
 
                # Text following the character difference is added just before running hooks
                $s2 = Linker::revComment( $rev, false, true );
 
                if ( $notificationtimestamp && ( $row->rev_timestamp >= $notificationtimestamp ) ) {
-                       $s2 .= ' <span class="updatedmarker">' .  $this->msg( 'updatedmarker' )->escaped() . '</span>';
+                       $s2 .= ' <span class="updatedmarker">' . $this->msg( 'updatedmarker' )->escaped() . '</span>';
                        $classes[] = 'mw-history-line-updated';
                }
 
@@ -623,9 +626,12 @@ class HistoryPager extends ReverseChronologicalPager {
                # Rollback and undo links
                if ( $prevRev && $this->getTitle()->quickUserCan( 'edit', $user ) ) {
                        if ( $latest && $this->getTitle()->quickUserCan( 'rollback', $user ) ) {
-                               $this->preventClickjacking();
-                               $tools[] = '<span class="mw-rollback-link">' .
-                                       Linker::buildRollbackLink( $rev, $this->getContext() ) . '</span>';
+                               // Get a rollback link without the brackets
+                               $rollbackLink = Linker::generateRollback( $rev, $this->getContext(), array( 'verify', 'noBrackets' ) );
+                               if ( $rollbackLink ) {
+                                       $this->preventClickjacking();
+                                       $tools[] = $rollbackLink;
+                               }
                        }
 
                        if ( !$rev->isDeleted( Revision::DELETED_TEXT )
@@ -665,7 +671,7 @@ class HistoryPager extends ReverseChronologicalPager {
                        $s .= ' <span class="mw-changeslist-separator">. .</span> ' . $s2;
                }
 
-               wfRunHooks( 'PageHistoryLineEnding', array( $this, &$row , &$s, &$classes ) );
+               wfRunHooks( 'PageHistoryLineEnding', array( $this, &$row, &$s, &$classes ) );
 
                $attribs = array();
                if ( $classes ) {
index 29c3d7e..1cca95c 100644 (file)
@@ -165,15 +165,21 @@ class InfoAction extends FormlessAction {
         * @return array
         */
        protected function pageInfo() {
-               global $wgContLang, $wgRCMaxAge;
+               global $wgContLang, $wgRCMaxAge, $wgMemc, $wgUnwatchedPageThreshold, $wgPageInfoTransclusionLimit;
 
                $user = $this->getUser();
                $lang = $this->getLanguage();
                $title = $this->getTitle();
                $id = $title->getArticleID();
 
-               // Get page information that would be too "expensive" to retrieve by normal means
-               $pageCounts = self::pageCounts( $title, $user );
+               $memcKey = wfMemcKey( 'infoaction', sha1( $title->getPrefixedText() ), $this->page->getLatest() );
+               $pageCounts = $wgMemc->get( $memcKey );
+               if ( $pageCounts === false ) {
+                       // Get page information that would be too "expensive" to retrieve by normal means
+                       $pageCounts = self::pageCounts( $title );
+
+                       $wgMemc->set( $memcKey, $pageCounts );
+               }
 
                // Get page properties
                $dbr = wfGetDB( DB_SLAVE );
@@ -259,7 +265,11 @@ class InfoAction extends FormlessAction {
                        );
                }
 
-               if ( isset( $pageCounts['watchers'] ) ) {
+               if (
+                       $user->isAllowed( 'unwatchedpages' ) ||
+                       ( $wgUnwatchedPageThreshold !== false &&
+                         $pageCounts['watchers'] >= $wgUnwatchedPageThreshold )
+               ) {
                        // Number of page watchers
                        $pageInfo['header-basic'][] = array(
                                $this->msg( 'pageinfo-watchers' ), $lang->formatNum( $pageCounts['watchers'] )
@@ -300,6 +310,24 @@ class InfoAction extends FormlessAction {
                        );
                }
 
+               if ( $title->inNamespace( NS_CATEGORY ) ) {
+                       $category = Category::newFromTitle( $title );
+                       $pageInfo['category-info'] = array(
+                               array(
+                                       $this->msg( 'pageinfo-category-pages' ),
+                                       $lang->formatNum( $category->getPageCount() )
+                               ),
+                               array(
+                                       $this->msg( 'pageinfo-category-subcats' ),
+                                       $lang->formatNum( $category->getSubcatCount() )
+                               ),
+                               array(
+                                       $this->msg( 'pageinfo-category-files' ),
+                                       $lang->formatNum( $category->getFileCount() )
+                               )
+                       );
+               }
+
                // Page protection
                $pageInfo['header-restrictions'] = array();
 
@@ -358,6 +386,22 @@ class InfoAction extends FormlessAction {
                $pageInfo['header-edits'] = array();
 
                $firstRev = $this->page->getOldestRevision();
+               $lastRev = $this->page->getRevision();
+               $batch = new LinkBatch;
+
+               $firstRevUser = $firstRev->getUserText( Revision::FOR_THIS_USER );
+               if ( $firstRevUser !== '' ) {
+                       $batch->add( NS_USER, $firstRevUser );
+                       $batch->add( NS_USER_TALK, $firstRevUser );
+               }
+
+               $lastRevUser = $lastRev->getUserText( Revision::FOR_THIS_USER );
+               if ( $lastRevUser !== '' ) {
+                       $batch->add( NS_USER, $lastRevUser );
+                       $batch->add( NS_USER_TALK, $lastRevUser );
+               }
+
+               $batch->execute();
 
                // Page creator
                $pageInfo['header-edits'][] = array(
@@ -379,7 +423,7 @@ class InfoAction extends FormlessAction {
                // Latest editor
                $pageInfo['header-edits'][] = array(
                        $this->msg( 'pageinfo-lastuser' ),
-                       Linker::revUserTools( $this->page->getRevision() )
+                       Linker::revUserTools( $lastRev )
                );
 
                // Date of latest edit
@@ -432,11 +476,17 @@ class InfoAction extends FormlessAction {
 
                $localizedList = Html::rawElement( 'ul', array(), implode( '', $listItems ) );
                $hiddenCategories = $this->page->getHiddenCategories();
-               $transcludedTemplates = $title->getTemplateLinksFrom();
 
-               if ( count( $listItems ) > 0
-                       || count( $hiddenCategories ) > 0
-                       || count( $transcludedTemplates ) > 0 ) {
+               if (
+                       count( $listItems ) > 0 ||
+                       count( $hiddenCategories ) > 0 ||
+                       $pageCounts['transclusion']['from'] > 0 ||
+                       $pageCounts['transclusion']['to'] > 0
+               ) {
+                       $options = array( 'LIMIT' => $wgPageInfoTransclusionLimit );
+                       $transcludedTemplates = $title->getTemplateLinksFrom( $options );
+                       $transcludedTargets = $title->getTemplateLinksTo( $options );
+
                        // Page properties
                        $pageInfo['header-properties'] = array();
 
@@ -458,11 +508,44 @@ class InfoAction extends FormlessAction {
                        }
 
                        // Transcluded templates
-                       if ( count( $transcludedTemplates ) > 0 ) {
+                       if ( $pageCounts['transclusion']['from'] > 0 ) {
+                               if ( $pageCounts['transclusion']['from'] > count( $transcludedTemplates ) ) {
+                                       $more = $this->msg( 'morenotlisted' )->escaped();
+                               } else {
+                                       $more = null;
+                               }
+
                                $pageInfo['header-properties'][] = array(
                                        $this->msg( 'pageinfo-templates' )
-                                               ->numParams( count( $transcludedTemplates ) ),
-                                       Linker::formatTemplates( $transcludedTemplates )
+                                               ->numParams( $pageCounts['transclusion']['from'] ),
+                                       Linker::formatTemplates(
+                                               $transcludedTemplates,
+                                               false,
+                                               false,
+                                               $more )
+                               );
+                       }
+
+                       if ( $pageCounts['transclusion']['to'] > 0 ) {
+                               if ( $pageCounts['transclusion']['to'] > count( $transcludedTargets ) ) {
+                                       $more = Linker::link(
+                                               $whatLinksHere,
+                                               $this->msg( 'moredotdotdot' )->escaped(),
+                                               array(),
+                                               array( 'hidelinks' => 1, 'hideredirs' => 1 )
+                                       );
+                               } else {
+                                       $more = null;
+                               }
+
+                               $pageInfo['header-properties'][] = array(
+                                       $this->msg( 'pageinfo-transclusions' )
+                                               ->numParams( $pageCounts['transclusion']['to'] ),
+                                       Linker::formatTemplates(
+                                               $transcludedTargets,
+                                               false,
+                                               false,
+                                               $more )
                                );
                        }
                }
@@ -473,11 +556,10 @@ class InfoAction extends FormlessAction {
        /**
         * Returns page counts that would be too "expensive" to retrieve by normal means.
         *
-        * @param $title Title object
-        * @param $user User object
+        * @param Title $title Title to get counts for
         * @return array
         */
-       protected static function pageCounts( $title, $user ) {
+       protected static function pageCounts( Title $title ) {
                global $wgRCMaxAge, $wgDisableCounters;
 
                wfProfileIn( __METHOD__ );
@@ -497,19 +579,17 @@ class InfoAction extends FormlessAction {
                        $result['views'] = $views;
                }
 
-               if ( $user->isAllowed( 'unwatchedpages' ) ) {
-                       // Number of page watchers
-                       $watchers = (int) $dbr->selectField(
-                               'watchlist',
-                               'COUNT(*)',
-                               array(
-                                       'wl_namespace' => $title->getNamespace(),
-                                       'wl_title'     => $title->getDBkey(),
-                               ),
-                               __METHOD__
-                       );
-                       $result['watchers'] = $watchers;
-               }
+               // Number of page watchers
+               $watchers = (int) $dbr->selectField(
+                       'watchlist',
+                       'COUNT(*)',
+                       array(
+                               'wl_namespace' => $title->getNamespace(),
+                               'wl_title'     => $title->getDBkey(),
+                       ),
+                       __METHOD__
+               );
+               $result['watchers'] = $watchers;
 
                // Total number of edits
                $edits = (int) $dbr->selectField(
@@ -537,8 +617,8 @@ class InfoAction extends FormlessAction {
                        'revision',
                        'COUNT(rev_page)',
                        array(
-                               'rev_page' => $id ,
-                               "rev_timestamp >= $threshold"
+                               'rev_page' => $id,
+                               "rev_timestamp >= " . $dbr->addQuotes( $threshold )
                        ),
                        __METHOD__
                );
@@ -550,7 +630,7 @@ class InfoAction extends FormlessAction {
                        'COUNT(DISTINCT rev_user_text)',
                        array(
                                'rev_page' => $id,
-                               "rev_timestamp >= $threshold"
+                               "rev_timestamp >= " . $dbr->addQuotes( $threshold )
                        ),
                        __METHOD__
                );
@@ -583,6 +663,24 @@ class InfoAction extends FormlessAction {
                                + $result['subpages']['nonredirects'];
                }
 
+               // Counts for the number of transclusion links (to/from)
+               $result['transclusion']['to'] = (int) $dbr->selectField(
+                       'templatelinks',
+                       'COUNT(tl_from)',
+                       array(
+                               'tl_namespace' => $title->getNamespace(),
+                               'tl_title' => $title->getDBkey()
+                       ),
+                       __METHOD__
+               );
+
+               $result['transclusion']['from'] = (int) $dbr->selectField(
+                       'templatelinks',
+                       'COUNT(*)',
+                       array( 'tl_from' => $title->getArticleID() ),
+                       __METHOD__
+               );
+
                wfProfileOut( __METHOD__ );
                return $result;
        }
index f053ede..1b55a3c 100644 (file)
@@ -29,11 +29,11 @@ class ProtectAction extends FormlessAction {
                return 'protect';
        }
 
-       public function onView(){
+       public function onView() {
                return null;
        }
 
-       public function show(){
+       public function show() {
 
                $this->page->protect();
 
@@ -47,7 +47,7 @@ class UnprotectAction extends ProtectAction {
                return 'unprotect';
        }
 
-       public function show(){
+       public function show() {
 
                $this->page->unprotect();
 
index cd58889..4c5171c 100644 (file)
@@ -62,7 +62,7 @@ class PurgeAction extends FormAction {
                $this->checkCanExecute( $this->getUser() );
 
                if ( $this->getUser()->isAllowed( 'purge' ) ) {
-                       $this->redirectParams = wfArrayToCGI( array_diff_key(
+                       $this->redirectParams = wfArrayToCgi( array_diff_key(
                                $this->getRequest()->getQueryValues(),
                                array( 'title' => null, 'action' => null )
                        ) );
index 80af79c..23cae6a 100644 (file)
@@ -29,11 +29,11 @@ class RenderAction extends FormlessAction {
                return 'render';
        }
 
-       public function onView(){
+       public function onView() {
                return null;
        }
 
-       public function show(){
+       public function show() {
 
                $this->page->render();
 
index d57585e..af5a674 100644 (file)
@@ -29,11 +29,11 @@ class ViewAction extends FormlessAction {
                return 'view';
        }
 
-       public function onView(){
+       public function onView() {
                return null;
        }
 
-       public function show(){
+       public function show() {
                $this->page->view();
        }
 
index 1b176e7..68302b1 100644 (file)
@@ -105,15 +105,19 @@ abstract class ApiBase extends ContextSource {
         * The result data should be stored in the ApiResult object available
         * through getResult().
         */
-       public abstract function execute();
+       abstract public function execute();
 
        /**
         * Returns a string that identifies the version of the extending class.
         * Typically includes the class name, the svn revision, timestamp, and
         * last author. Usually done with SVN's Id keyword
         * @return string
+        * @deprecated since 1.21, version string is no longer supported
         */
-       public abstract function getVersion();
+       public function getVersion() {
+               wfDeprecated( __METHOD__, '1.21' );
+               return '';
+       }
 
        /**
         * Get the name of the module being executed by this instance
@@ -299,23 +303,6 @@ abstract class ApiBase extends ContextSource {
                        }
 
                        $msg .= $this->makeHelpArrayToString( $lnPrfx, "Help page", $this->getHelpUrls() );
-
-                       if ( $this->getMain()->getShowVersions() ) {
-                               $versions = $this->getVersion();
-                               $pattern = '/(\$.*) ([0-9a-z_]+\.php) (.*\$)/i';
-                               $callback = array( $this, 'makeHelpMsg_callback' );
-
-                               if ( is_array( $versions ) ) {
-                                       foreach ( $versions as &$v ) {
-                                               $v = preg_replace_callback( $pattern, $callback, $v );
-                                       }
-                                       $versions = implode( "\n  ", $versions );
-                               } else {
-                                       $versions = preg_replace_callback( $pattern, $callback, $versions );
-                               }
-
-                               $msg .= "Version:\n  $versions\n";
-                       }
                }
 
                return $msg;
@@ -340,13 +327,15 @@ abstract class ApiBase extends ContextSource {
                        return '';
                }
                if ( !is_array( $input ) ) {
-                       $input = array(
-                               $input
-                       );
+                       $input = array( $input );
                }
 
                if ( count( $input ) > 0 ) {
-                       $msg = $title . ( count( $input ) > 1 ? 's' : '' ) . ":\n  ";
+                       if ( $title ) {
+                               $msg = $title . ( count( $input ) > 1 ? 's' : '' ) . ":\n  ";
+                       } else {
+                               $msg = '  ';
+                       }
                        $msg .= implode( $prefix, $input ) . "\n";
                        return $msg;
                }
@@ -486,44 +475,6 @@ abstract class ApiBase extends ContextSource {
                }
        }
 
-       /**
-        * Callback for preg_replace_callback() call in makeHelpMsg().
-        * Replaces a source file name with a link to ViewVC
-        *
-        * @param $matches array
-        * @return string
-        */
-       public function makeHelpMsg_callback( $matches ) {
-               global $wgAutoloadClasses, $wgAutoloadLocalClasses;
-
-               $file = '';
-               if ( isset( $wgAutoloadLocalClasses[get_class( $this )] ) ) {
-                       $file = $wgAutoloadLocalClasses[get_class( $this )];
-               } elseif ( isset( $wgAutoloadClasses[get_class( $this )] ) ) {
-                       $file = $wgAutoloadClasses[get_class( $this )];
-               }
-
-               // Do some guesswork here
-               $path = strstr( $file, 'includes/api/' );
-               if ( $path === false ) {
-                       $path = strstr( $file, 'extensions/' );
-               } else {
-                       $path = 'phase3/' . $path;
-               }
-
-               // Get the filename from $matches[2] instead of $file
-               // If they're not the same file, they're assumed to be in the
-               // same directory
-               // This is necessary to make stuff like ApiMain::getVersion()
-               // returning the version string for ApiBase work
-               if ( $path ) {
-                       return "{$matches[0]}\n   https://svn.wikimedia.org/" .
-                                       "viewvc/mediawiki/trunk/" . dirname( $path ) .
-                                       "/{$matches[2]}";
-               }
-               return $matches[0];
-       }
-
        /**
         * Returns the description string for this module
         * @return mixed string or array of strings
@@ -703,7 +654,7 @@ 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', "{$p}invalidparammix" );
+                       $this->dieUsage( "The parameters {$p}" . implode( ", {$p}", $intersection ) . ' can not be used together', "{$p}invalidparammix" );
                } elseif ( count( $intersection ) == 0 ) {
                        $this->dieUsage( "One of the parameters {$p}" . implode( ", {$p}", $required ) . ' is required', "{$p}missingparam" );
                }
@@ -1152,11 +1103,11 @@ abstract class ApiBase extends ContextSource {
         * @return string
         */
        function validateTimestamp( $value, $paramName ) {
-               $value = wfTimestamp( TS_UNIX, $value );
-               if ( $value === 0 ) {
+               $unixTimestamp = wfTimestamp( TS_UNIX, $value );
+               if ( $unixTimestamp === false ) {
                        $this->dieUsage( "Invalid value '$value' for timestamp parameter $paramName", "badtimestamp_{$paramName}" );
                }
-               return wfTimestamp( TS_MW, $value );
+               return wfTimestamp( TS_MW, $unixTimestamp );
        }
 
        /**
@@ -1352,8 +1303,8 @@ abstract class ApiBase extends ContextSource {
                // 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.' ),
+               '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.' ),
 
                'filename-tooshort' => array( 'code' => 'filename-tooshort', 'info' => 'The filename is too short' ),
@@ -1387,6 +1338,26 @@ abstract class ApiBase extends ContextSource {
                $this->dieUsage( $parsed['info'], $parsed['code'] );
        }
 
+       /**
+        * Will only set a warning instead of failing if the global $wgDebugAPI
+        * is set to true. Otherwise behaves exactly as dieUsageMsg().
+        * @param $error (array|string) Element of a getUserPermissionsErrors()-style array
+        * @since 1.21
+        */
+       public function dieUsageMsgOrDebug( $error ) {
+               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'] );
+               }
+       }
+
        /**
         * Return the error message related to a certain array
         * @param $error array Element of a getUserPermissionsErrors()-style array
@@ -1398,7 +1369,7 @@ abstract class ApiBase extends ContextSource {
 
                // Check whether the error array was nested
                // array( array( <code>, <params> ), array( <another_code>, <params> ) )
-               if( is_array( $key ) ){
+               if( is_array( $key ) ) {
                        $error = $key;
                        $key = array_shift( $error );
                }
@@ -1689,12 +1660,4 @@ abstract class ApiBase extends ContextSource {
                }
                print "\n</pre>\n";
        }
-
-       /**
-        * Returns a string that identifies the version of this class.
-        * @return string
-        */
-       public static function getBaseVersion() {
-               return __CLASS__ . ': $Id$';
-       }
 }
index c879b35..2e4155a 100644 (file)
  */
 class ApiBlock extends ApiBase {
 
-       public function __construct( $main, $action ) {
-               parent::__construct( $main, $action );
-       }
-
        /**
         * Blocks the user specified in the parameters for the given expiry, with the
         * given reason, and with all other settings provided in the params. If the block
@@ -55,6 +51,7 @@ class ApiBlock extends ApiBase {
                if ( !$user->isAllowed( 'block' ) ) {
                        $this->dieUsageMsg( 'cantblock' );
                }
+
                # bug 15810: blocked admins should have limited access here
                if ( $user->isBlocked() ) {
                        $status = SpecialBlock::checkUnblockSelf( $params['user'], $user );
@@ -62,6 +59,13 @@ class ApiBlock extends ApiBase {
                                $this->dieUsageMsg( array( $status ) );
                        }
                }
+
+               $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() ) ) ) {
+                       $this->dieUsageMsg( array( 'nosuchuser', $params['user'] ) );
+               }
+
                if ( $params['hidename'] && !$user->isAllowed( 'hideuser' ) ) {
                        $this->dieUsageMsg( 'canthide' );
                }
@@ -70,6 +74,7 @@ class ApiBlock extends ApiBase {
                }
 
                $data = array(
+                       'PreviousTarget' => $params['user'],
                        'Target' => $params['user'],
                        'Reason' => array(
                                $params['reason'],
@@ -83,7 +88,7 @@ class ApiBlock extends ApiBase {
                        'DisableEmail' => $params['noemail'],
                        'HideUser' => $params['hidename'],
                        'DisableUTEdit' => !$params['allowusertalk'],
-                       'AlreadyBlocked' => $params['reblock'],
+                       'Reblock' => $params['reblock'],
                        'Watch' => $params['watchuser'],
                        'Confirm' => true,
                );
@@ -99,7 +104,7 @@ class ApiBlock extends ApiBase {
                $res['userID'] = $target instanceof User ? $target->getId() : 0;
 
                $block = Block::newFromTarget( $target );
-               if( $block instanceof Block ){
+               if( $block instanceof Block ) {
                        $res['expiry'] = $block->mExpiry == $this->getDB()->getInfinity()
                                ? 'infinite'
                                : wfTimestamp( TS_ISO_8601, $block->mExpiry );
@@ -256,8 +261,4 @@ class ApiBlock extends ApiBase {
        public function getHelpUrls() {
                return 'https://www.mediawiki.org/wiki/API:Block';
        }
-
-       public function getVersion() {
-               return __CLASS__ . ': $Id$';
-       }
 }
index 6741259..6b894c1 100644 (file)
 
 class ApiComparePages extends ApiBase {
 
-       public function __construct( $main, $action ) {
-               parent::__construct( $main, $action );
-       }
-
        public function execute() {
                $params = $this->extractRequestParams();
 
@@ -85,11 +81,11 @@ class ApiComparePages extends ApiBase {
         * @return int
         */
        private function revisionOrTitleOrId( $revision, $titleText, $titleId ) {
-               if( $revision ){
+               if( $revision ) {
                        return $revision;
                } elseif( $titleText ) {
                        $title = Title::newFromText( $titleText );
-                       if( !$title ){
+                       if( !$title ) {
                                $this->dieUsageMsg( array( 'invalidtitle', $titleText ) );
                        }
                        return $title->getLatestRevID();
@@ -172,8 +168,4 @@ class ApiComparePages extends ApiBase {
                        'api.php?action=compare&fromrev=1&torev=2' => 'Create a diff between revision 1 and 2',
                );
        }
-
-       public function getVersion() {
-               return __CLASS__ . ': $Id$';
-       }
 }
diff --git a/includes/api/ApiCreateAccount.php b/includes/api/ApiCreateAccount.php
new file mode 100644 (file)
index 0000000..8c49c17
--- /dev/null
@@ -0,0 +1,269 @@
+<?php
+/**
+ * Created on August 7, 2012
+ *
+ * Copyright © 2012 Tyler Romeo <tylerromeo@gmail.com>
+ *
+ * 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
+ */
+
+/**
+ * Unit to authenticate account registration attempts to the current wiki.
+ *
+ * @ingroup API
+ */
+class ApiCreateAccount extends ApiBase {
+       public function execute() {
+               $params = $this->extractRequestParams();
+
+               $result = array();
+
+               // Init session if necessary
+               if ( session_id() == '' ) {
+                       wfSetupSession();
+               }
+
+               if( $params['mailpassword'] && !$params['email'] ) {
+                       $this->dieUsageMsg( 'noemail' );
+               }
+
+               $context = new DerivativeContext( $this->getContext() );
+               $context->setRequest( new DerivativeRequest(
+                       $this->getContext()->getRequest(),
+                       array(
+                               'type' => 'signup',
+                               'uselang' => $params['language'],
+                               'wpName' => $params['name'],
+                               'wpPassword' => $params['password'],
+                               'wpRetype' => $params['password'],
+                               'wpDomain' => $params['domain'],
+                               'wpEmail' => $params['email'],
+                               'wpRealName' => $params['realname'],
+                               'wpCreateaccountToken' => $params['token'],
+                               'wpCreateaccount' => $params['mailpassword'] ? null : '1',
+                               'wpCreateaccountMail' => $params['mailpassword'] ? '1' : null
+                       )
+               ) );
+
+               $loginForm = new LoginForm();
+               $loginForm->setContext( $context );
+               $loginForm->load();
+
+               $status = $loginForm->addNewaccountInternal();
+               $result = array();
+               if( $status->isGood() ) {
+                       // Success!
+                       $user = $status->getValue();
+
+                       // If we showed up language selection links, and one was in use, be
+                       // smart (and sensible) and save that language as the user's preference
+                       global $wgLoginLanguageSelector, $wgEmailAuthentication;
+                       if( $wgLoginLanguageSelector && $params['language'] ) {
+                               $user->setOption( 'language', $params['language'] );
+                       }
+
+                       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' ) );
+                       } elseif( $wgEmailAuthentication && Sanitizer::validateEmail( $user->getEmail() ) ) {
+                               // Send out an email authentication message if needed
+                               $status->merge( $user->sendConfirmationMail() );
+                       }
+
+                       // Save settings (including confirmation token)
+                       $user->saveSettings();
+
+                       wfRunHooks( 'AddNewAccount', array( $user, $params['mailpassword'] ) );
+
+                       if ( $params['mailpassword'] ) {
+                               $logAction = 'byemail';
+                       } elseif ( $this->getUser()->isLoggedIn() ) {
+                               $logAction = 'create2';
+                       } else {
+                               $logAction = 'create';
+                       }
+                       $user->addNewUserLogEntry( $logAction, (string)$params['reason'] );
+
+                       // Add username, id, and token to result.
+                       $result['username'] = $user->getName();
+                       $result['userid'] = $user->getId();
+                       $result['token'] = $user->getToken();
+               }
+
+               $apiResult = $this->getResult();
+
+               if( $status->hasMessage( 'sessionfailure' ) ) {
+                       // Token was incorrect, so add it to result, but don't throw an exception.
+                       $result['token'] = LoginForm::getCreateaccountToken();
+                       $result['result'] = 'needtoken';
+               } elseif( !$status->isOK() ) {
+                       // There was an error. Die now.
+                       // Cannot use dieUsageMsg() directly because extensions
+                       // might return custom error messages.
+                       $errors = $status->getErrorsArray();
+                       if( $errors[0] instanceof Message ) {
+                               $code = 'aborted';
+                               $desc = $errors[0];
+                       } else {
+                               $code = array_shift( $errors[0] );
+                               $desc = wfMessage( $code, $errors[0] );
+                       }
+                       $this->dieUsage( $desc, $code );
+               } elseif( !$status->isGood() ) {
+                       // Status is not good, but OK. This means warnings.
+                       $result['result'] = 'warning';
+
+                       // Add any warnings to the result
+                       $warnings = $status->getErrorsByType( 'warning' );
+                       if( $warnings ) {
+                               foreach( $warnings as &$warning ) {
+                                       $apiResult->setIndexedTagName( $warning['params'], 'param' );
+                               }
+                               $apiResult->setIndexedTagName( $warnings, 'warning' );
+                               $result['warnings'] = $warnings;
+                       }
+               } else {
+                       // Everything was fine.
+                       $result['result'] = 'success';
+               }
+
+               $apiResult->addValue( null, 'createaccount', $result );
+       }
+
+       public function getDescription() {
+               return 'Create a new user account.';
+       }
+
+       public function mustBePosted() {
+               return true;
+       }
+
+       public function isReadMode() {
+               return false;
+       }
+
+       public function isWriteMode() {
+               return true;
+       }
+
+       public function getAllowedParams() {
+               global $wgEmailConfirmToEdit;
+               return array(
+                       'name' => array(
+                               ApiBase::PARAM_TYPE => 'user',
+                               ApiBase::PARAM_REQUIRED => true
+                       ),
+                       'password' => null,
+                       'domain' => null,
+                       'token' => null,
+                       'email' => array(
+                               ApiBase::PARAM_TYPE => 'string',
+                               ApiBase::PARAM_REQUIRED => $wgEmailConfirmToEdit
+                       ),
+                       'realname' => null,
+                       'mailpassword' => array(
+                               ApiBase::PARAM_TYPE => 'boolean',
+                               ApiBase::PARAM_DFLT => false
+                       ),
+                       'reason' => null,
+                       'language' => null
+               );
+       }
+
+       public function getParamDescription() {
+               $p = $this->getModulePrefix();
+               return array(
+                       'name' => 'User Name',
+                       'password' => "Password (ignored if {$p}mailpassword is set)",
+                       'domain' => 'Domain (optional)',
+                       'token' => 'Account creation token obtained in first request',
+                       'email' => 'Email address of user',
+                       'realname' => 'Real Name of user',
+                       'mailpassword' => 'Whether to generate and mail a random password to the user',
+                       'reason' => "Optional reason for creating the account (used when {$p}mailpassword is set)",
+                       'language' => 'Language code to set for the user.'
+               );
+       }
+
+       public function getResultProperties() {
+               return array(
+                       'createaccount' => array(
+                               'result' => array(
+                                       ApiBase::PROP_TYPE => array(
+                                               'success',
+                                               'warning',
+                                               'needtoken'
+                                       )
+                               ),
+                               'username' => array(
+                                       ApiBase::PROP_TYPE => 'string',
+                                       ApiBase::PROP_NULLABLE => true
+                               ),
+                               'userid' => array(
+                                       ApiBase::PROP_TYPE => 'int',
+                                       ApiBase::PROP_NULLABLE => true
+                               ),
+                               'token' => array(
+                                       ApiBase::PROP_TYPE => 'string',
+                                       ApiBase::PROP_NULLABLE => true
+                               ),
+                       )
+               );
+       }
+
+       public function getPossibleErrors() {
+               $localErrors = array(
+                       'wrongpassword',
+                       'sessionfailure',
+                       'sorbs_create_account_reason',
+                       'noname',
+                       'userexists',
+                       'password-name-match',
+                       'password-login-forbidden',
+                       'noemailtitle',
+                       'invalidemailaddress',
+                       'externaldberror'
+               );
+
+               $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 )->parse() );
+               }
+
+               // 'passwordtooshort' has parameters. :(
+               global $wgMinimalPasswordLength;
+               $errors[] = array(
+                       'code' => 'passwordtooshort',
+                       'info' => wfMessage( 'passwordtooshort', $wgMinimalPasswordLength )->parse()
+               );
+               return $errors;
+       }
+
+       public function getExamples() {
+               return array(
+                       'api.php?action=createaccount&name=testuser&password=test123',
+                       'api.php?action=createaccount&name=testmailuser&mailpassword=true&reason=MyReason',
+               );
+       }
+
+       public function getHelpUrls() {
+               return 'https://www.mediawiki.org/wiki/API:Account creation';
+       }
+}
index 964e0ae..422524d 100644 (file)
  */
 class ApiDelete extends ApiBase {
 
-       public function __construct( $main, $action ) {
-               parent::__construct( $main, $action );
-       }
-
        /**
         * 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
@@ -267,8 +263,4 @@ class ApiDelete extends ApiBase {
        public function getHelpUrls() {
                return 'https://www.mediawiki.org/wiki/API:Delete';
        }
-
-       public function getVersion() {
-               return __CLASS__ . ': $Id$';
-       }
 }
index 13975ae..e5ef3b7 100644 (file)
  */
 class ApiDisabled extends ApiBase {
 
-       public function __construct( $main, $action ) {
-               parent::__construct( $main, $action );
-       }
-
        public function execute() {
                $this->dieUsage( "The \"{$this->getModuleName()}\" module has been disabled.", 'moduledisabled' );
        }
@@ -63,8 +59,4 @@ class ApiDisabled extends ApiBase {
        public function getExamples() {
                return array();
        }
-
-       public function getVersion() {
-               return __CLASS__ . ': $Id$';
-       }
 }
index cae4a21..f6e0679 100644 (file)
  */
 class ApiEditPage extends ApiBase {
 
-       public function __construct( $query, $moduleName ) {
-               parent::__construct( $query, $moduleName );
-       }
-
        public function execute() {
                $user = $this->getUser();
                $params = $this->extractRequestParams();
@@ -68,12 +64,12 @@ class ApiEditPage extends ApiBase {
                                $redirValues = array();
                                foreach ( $titles as $id => $newTitle ) {
 
-                                       if ( !isset( $titles[ $id - 1 ] ) ) {
-                                               $titles[ $id - 1 ] = $oldTitle;
+                                       if ( !isset( $titles[$id - 1] ) ) {
+                                               $titles[$id - 1] = $oldTitle;
                                        }
 
                                        $redirValues[] = array(
-                                               'from' => $titles[ $id - 1 ]->getPrefixedText(),
+                                               'from' => $titles[$id - 1]->getPrefixedText(),
                                                'to' => $newTitle->getPrefixedText()
                                        );
 
@@ -649,8 +645,4 @@ class ApiEditPage extends ApiBase {
        public function getHelpUrls() {
                return 'https://www.mediawiki.org/wiki/API:Edit';
        }
-
-       public function getVersion() {
-               return __CLASS__ . ': $Id$';
-       }
 }
index 4fa0343..5a5c572 100644 (file)
  */
 class ApiEmailUser extends ApiBase {
 
-       public function __construct( $main, $action ) {
-               parent::__construct( $main, $action );
-       }
-
        public function execute() {
                $params = $this->extractRequestParams();
 
@@ -160,8 +156,4 @@ class ApiEmailUser extends ApiBase {
        public function getHelpUrls() {
                return 'https://www.mediawiki.org/wiki/API:E-mail';
        }
-
-       public function getVersion() {
-               return __CLASS__ . ': $Id$';
-       }
 }
index 160f5b9..826171b 100644 (file)
  */
 class ApiExpandTemplates extends ApiBase {
 
-       public function __construct( $main, $action ) {
-               parent::__construct( $main, $action );
-       }
-
        public function execute() {
                // Cache may vary on $wgUser because ParserOptions gets data from it
                $this->getMain()->setCacheMode( 'anon-public-user-private' );
@@ -130,8 +126,4 @@ class ApiExpandTemplates extends ApiBase {
        public function getHelpUrls() {
                return 'https://www.mediawiki.org/wiki/API:Parsing_wikitext#expandtemplates';
        }
-
-       public function getVersion() {
-               return __CLASS__ . ': $Id$';
-       }
 }
index fb6a06f..015a992 100644 (file)
  */
 class ApiFeedContributions extends ApiBase {
 
-       public function __construct( $main, $action ) {
-               parent::__construct( $main, $action );
-       }
-
        /**
         * This module uses a custom feed wrapper printer.
         *
@@ -51,7 +47,7 @@ class ApiFeedContributions extends ApiBase {
                        $this->dieUsage( 'Syndication feeds are not available', 'feed-unavailable' );
                }
 
-               if( !isset( $wgFeedClasses[ $params['feedformat'] ] ) ) {
+               if( !isset( $wgFeedClasses[$params['feedformat']] ) ) {
                        $this->dieUsage( 'Invalid subscription feed type', 'feed-invalid' );
                }
 
@@ -213,8 +209,4 @@ class ApiFeedContributions extends ApiBase {
                        'api.php?action=feedcontributions&user=Reedy',
                );
        }
-
-       public function getVersion() {
-               return __CLASS__ . ': $Id$';
-       }
 }
index 6ccb02f..a3b4682 100644 (file)
  */
 class ApiFeedWatchlist extends ApiBase {
 
-       public function __construct( $main, $action ) {
-               parent::__construct( $main, $action );
-       }
-
        /**
         * This module uses a custom feed wrapper printer.
         *
@@ -62,7 +58,7 @@ class ApiFeedWatchlist extends ApiBase {
                                $this->dieUsage( 'Syndication feeds are not available', 'feed-unavailable' );
                        }
 
-                       if( !isset( $wgFeedClasses[ $params['feedformat'] ] ) ) {
+                       if( !isset( $wgFeedClasses[$params['feedformat']] ) ) {
                                $this->dieUsage( 'Invalid subscription feed type', 'feed-invalid' );
                        }
                        if ( !is_null( $params['wlexcludeuser'] ) ) {
@@ -233,8 +229,4 @@ class ApiFeedWatchlist extends ApiBase {
        public function getHelpUrls() {
                return 'https://www.mediawiki.org/wiki/API:Watchlist_feed';
        }
-
-       public function getVersion() {
-               return __CLASS__ . ': $Id$';
-       }
 }
index 092b003..9520dc7 100644 (file)
@@ -37,10 +37,6 @@ class ApiFileRevert extends ApiBase {
 
        protected $params;
 
-       public function __construct( $main, $action ) {
-               parent::__construct( $main, $action );
-       }
-
        public function execute() {
                $this->params = $this->extractRequestParams();
                // Extract the file and archiveName from the request parameters
@@ -73,8 +69,8 @@ class ApiFileRevert extends ApiBase {
        protected function checkPermissions( $user ) {
                $title = $this->file->getTitle();
                $permissionErrors = array_merge(
-                       $title->getUserPermissionsErrors( 'edit' , $user ),
-                       $title->getUserPermissionsErrors( 'upload' , $user )
+                       $title->getUserPermissionsErrors( 'edit', $user ),
+                       $title->getUserPermissionsErrors( 'upload', $user )
                );
 
                if ( $permissionErrors ) {
@@ -195,8 +191,4 @@ class ApiFileRevert extends ApiBase {
                                => 'Revert Wiki.png to the version of 20110305152740',
                );
        }
-
-       public function getVersion() {
-               return __CLASS__ . ': $Id$';
-       }
 }
index 8ad9b8c..5bbc62e 100644 (file)
@@ -58,7 +58,7 @@ abstract class ApiFormatBase extends ApiBase {
         * This method is not called if getIsHtml() returns true.
         * @return string
         */
-       public abstract function getMimeType();
+       abstract public function getMimeType();
 
        /**
         * Whether this formatter needs raw data such as _element tags
@@ -308,10 +308,6 @@ See the <a href='https://www.mediawiki.org/wiki/API'>complete documentation</a>,
        public function getDescription() {
                return $this->getIsHtml() ? ' (pretty-print in HTML)' : '';
        }
-
-       public static function getBaseVersion() {
-               return __CLASS__ . ': $Id$';
-       }
 }
 
 /**
@@ -381,8 +377,4 @@ class ApiFormatFeedWrapper extends ApiFormatBase {
                        ApiBase::dieDebug( __METHOD__, 'Invalid feed class/item' );
                }
        }
-
-       public function getVersion() {
-               return __CLASS__ . ': $Id$';
-       }
 }
index 3d2a39c..1b2e02c 100644 (file)
  */
 class ApiFormatDbg extends ApiFormatBase {
 
-       public function __construct( $main, $format ) {
-               parent::__construct( $main, $format );
-       }
-
        public function getMimeType() {
                // This looks like it should be text/plain, but IE7 is so
                // brain-damaged it tries to parse text/plain as HTML if it
@@ -48,8 +44,4 @@ class ApiFormatDbg extends ApiFormatBase {
        public function getDescription() {
                return 'Output data in PHP\'s var_export() format' . parent::getDescription();
        }
-
-       public function getVersion() {
-               return __CLASS__ . ': $Id$';
-       }
 }
index 0f055e1..62253e1 100644 (file)
  */
 class ApiFormatDump extends ApiFormatBase {
 
-       public function __construct( $main, $format ) {
-               parent::__construct( $main, $format );
-       }
-
        public function getMimeType() {
                // This looks like it should be text/plain, but IE7 is so
                // brain-damaged it tries to parse text/plain as HTML if it
@@ -52,8 +48,4 @@ class ApiFormatDump extends ApiFormatBase {
        public function getDescription() {
                return 'Output data in PHP\'s var_dump() format' . parent::getDescription();
        }
-
-       public function getVersion() {
-               return __CLASS__ . ': $Id$';
-       }
 }
index acbc7d3..19c5e5f 100644 (file)
@@ -90,8 +90,4 @@ class ApiFormatJson extends ApiFormatBase {
                        return 'Output data in JSON format' . parent::getDescription();
                }
        }
-
-       public function getVersion() {
-               return __CLASS__ . ': $Id$';
-       }
 }
index b3bde37..78023af 100644 (file)
  */
 class ApiFormatNone extends ApiFormatBase {
 
-       public function __construct( $main, $format ) {
-               parent::__construct( $main, $format );
-       }
-
        public function getMimeType() {
                return 'text/plain';
        }
@@ -44,8 +40,4 @@ class ApiFormatNone extends ApiFormatBase {
        public function getDescription() {
                return 'Output nothing' . parent::getDescription();
        }
-
-       public function getVersion() {
-               return __CLASS__ . ': $Id$';
-       }
 }
index fac2ca5..b2d1f04 100644 (file)
  */
 class ApiFormatPhp extends ApiFormatBase {
 
-       public function __construct( $main, $format ) {
-               parent::__construct( $main, $format );
-       }
-
        public function getMimeType() {
                return 'application/vnd.php.serialized';
        }
@@ -45,8 +41,4 @@ class ApiFormatPhp extends ApiFormatBase {
        public function getDescription() {
                return 'Output data in serialized PHP format' . parent::getDescription();
        }
-
-       public function getVersion() {
-               return __CLASS__ . ': $Id$';
-       }
 }
index 184f0a3..d278efa 100644 (file)
@@ -66,8 +66,4 @@ class ApiFormatRaw extends ApiFormatBase {
                }
                $this->printText( $data['text'] );
        }
-
-       public function getVersion() {
-               return __CLASS__ . ': $Id$';
-       }
 }
index 7141459..4130e70 100644 (file)
  */
 class ApiFormatTxt extends ApiFormatBase {
 
-       public function __construct( $main, $format ) {
-               parent::__construct( $main, $format );
-       }
-
        public function getMimeType() {
                // This looks like it should be text/plain, but IE7 is so
                // brain-damaged it tries to parse text/plain as HTML if it
@@ -48,8 +44,4 @@ class ApiFormatTxt extends ApiFormatBase {
        public function getDescription() {
                return 'Output data in PHP\'s print_r() format' . parent::getDescription();
        }
-
-       public function getVersion() {
-               return __CLASS__ . ': $Id$';
-       }
 }
index 65056e4..62b69bb 100644 (file)
  */
 class ApiFormatWddx extends ApiFormatBase {
 
-       public function __construct( $main, $format ) {
-               parent::__construct( $main, $format );
-       }
-
        public function getMimeType() {
                return 'text/xml';
        }
@@ -112,8 +108,4 @@ class ApiFormatWddx extends ApiFormatBase {
        public function getDescription() {
                return 'Output data in WDDX format' . parent::getDescription();
        }
-
-       public function getVersion() {
-               return __CLASS__ . ': $Id$';
-       }
 }
index 5ccf185..b4e8e33 100644 (file)
@@ -36,10 +36,6 @@ class ApiFormatXml extends ApiFormatBase {
        private $mIncludeNamespace = false;
        private $mXslt = null;
 
-       public function __construct( $main, $format ) {
-               parent::__construct( $main, $format );
-       }
-
        public function getMimeType() {
                return 'text/xml';
        }
@@ -92,7 +88,7 @@ class ApiFormatXml extends ApiFormatBase {
         *
         * @par Example:
         * @verbatim
-        * name='root',  value = array( '_element'=>'page', 'x', 'y', 'z')
+        * name='root', value = array( '_element'=>'page', 'x', 'y', 'z')
         * @endverbatim
         * creates:
         * @verbatim
@@ -105,7 +101,7 @@ class ApiFormatXml extends ApiFormatBase {
         *
         * @par Example:
         * @verbatim
-        * name='root',  value = array( '*'=>'text', 'lang'=>'en', 'id'=>10)
+        * name='root', value = array( '*'=>'text', 'lang'=>'en', 'id'=>10)
         * @endverbatim
         * creates:
         * @verbatim
@@ -205,7 +201,13 @@ class ApiFormatXml extends ApiFormatBase {
                                // ignore
                                break;
                        default:
-                               $retval .= $indstr . Xml::element( $elemName, null, $elemValue );
+                               // to make sure null value doesn't produce unclosed element,
+                               // which is what Xml::element( $elemName, null, null ) returns
+                               if ( $elemValue === null ) {
+                                       $retval .= $indstr . Xml::element( $elemName );
+                               } else {
+                                       $retval .= $indstr . Xml::element( $elemName, null, $elemValue );
+                               }
                                break;
                }
                return $retval;
@@ -248,8 +250,4 @@ class ApiFormatXml extends ApiFormatBase {
        public function getDescription() {
                return 'Output data in XML format' . parent::getDescription();
        }
-
-       public function getVersion() {
-               return __CLASS__ . ': $Id$';
-       }
 }
index 9a8e3bc..700d4a5 100644 (file)
@@ -37,8 +37,4 @@ class ApiFormatYaml extends ApiFormatJson {
        public function getDescription() {
                return 'Output data in YAML format' . ApiFormatBase::getDescription();
        }
-
-       public function getVersion() {
-               return __CLASS__ . ': $Id$';
-       }
 }
index 2b5de21..86f8112 100644 (file)
  */
 class ApiHelp extends ApiBase {
 
-       public function __construct( $main, $action ) {
-               parent::__construct( $main, $action );
-       }
-
        /**
         * Module for displaying help
         */
@@ -151,8 +147,4 @@ class ApiHelp extends ApiBase {
                        'https://www.mediawiki.org/wiki/API:Quick_start_guide',
                );
        }
-
-       public function getVersion() {
-               return __CLASS__ . ': $Id$';
-       }
 }
index 637c1ff..408805e 100644 (file)
  */
 class ApiImport extends ApiBase {
 
-       public function __construct( $main, $action ) {
-               parent::__construct( $main, $action );
-       }
-
        public function execute() {
                $user = $this->getUser();
                $params = $this->extractRequestParams();
@@ -150,7 +146,7 @@ class ApiImport extends ApiBase {
 
        public function getDescription() {
                return array(
-                       'Import a page from another wiki, or an XML file.' ,
+                       'Import a page from another wiki, or an XML file.',
                        'Note that the HTTP POST must be done as a file upload (i.e. using multipart/form-data) when',
                        'sending a file for the "xml" parameter.'
                );
@@ -186,10 +182,6 @@ class ApiImport extends ApiBase {
        public function getHelpUrls() {
                return 'https://www.mediawiki.org/wiki/API:Import';
        }
-
-       public function getVersion() {
-               return __CLASS__ . ': $Id$';
-       }
 }
 
 /**
index 1f91fe9..3df952f 100644 (file)
@@ -278,8 +278,4 @@ class ApiLogin extends ApiBase {
        public function getHelpUrls() {
                return 'https://www.mediawiki.org/wiki/API:Login';
        }
-
-       public function getVersion() {
-               return __CLASS__ . ': $Id$';
-       }
 }
index b2f634d..2ba92a6 100644 (file)
  */
 class ApiLogout extends ApiBase {
 
-       public function __construct( $main, $action ) {
-               parent::__construct( $main, $action );
-       }
-
        public function execute() {
                $user = $this->getUser();
                $oldName = $user->getName();
@@ -75,8 +71,4 @@ class ApiLogout extends ApiBase {
        public function getHelpUrls() {
                return 'https://www.mediawiki.org/wiki/API:Logout';
        }
-
-       public function getVersion() {
-               return __CLASS__ . ': $Id$';
-       }
 }
index 97f5ecd..70c31c1 100644 (file)
@@ -51,6 +51,7 @@ class ApiMain extends ApiBase {
        private static $Modules = array(
                'login' => 'ApiLogin',
                'logout' => 'ApiLogout',
+               'createaccount' => 'ApiCreateAccount',
                'query' => 'ApiQuery',
                'expandtemplates' => 'ApiExpandTemplates',
                'parse' => 'ApiParse',
@@ -131,7 +132,7 @@ class ApiMain extends ApiBase {
        private $mPrinter;
 
        private $mModules, $mModuleNames, $mFormats, $mFormatNames;
-       private $mResult, $mAction, $mShowVersions, $mEnableWrite;
+       private $mResult, $mAction, $mEnableWrite;
        private $mInternalMode, $mSquidMaxage, $mModule;
 
        private $mCacheMode = 'private';
@@ -187,7 +188,6 @@ class ApiMain extends ApiBase {
                $this->mFormatNames = array_keys( $this->mFormats );
 
                $this->mResult = new ApiResult( $this );
-               $this->mShowVersions = false;
                $this->mEnableWrite = $enableWrite;
 
                $this->mSquidMaxage = - 1; // flag for executeActionWithErrorHandling()
@@ -375,7 +375,7 @@ class ApiMain extends ApiBase {
                        wfRunHooks( 'ApiMain::onException', array( $this, $e ) );
 
                        // Log it
-                       if ( !( $e instanceof UsageException ) ) {
+                       if ( $e instanceof MWException && !( $e instanceof UsageException ) ) {
                                global $wgLogExceptionBacktrace;
                                if ( $wgLogExceptionBacktrace ) {
                                        wfDebugLog( 'exception', $e->getLogMessage() . "\n" . $e->getTraceAsString() . "\n" );
@@ -384,7 +384,7 @@ class ApiMain extends ApiBase {
                                }
                        }
 
-                       // Handle any kind of exception by outputing properly formatted error message.
+                       // Handle any kind of exception by outputting properly formatted error message.
                        // If this fails, an unhandled exception should be thrown so that global error
                        // handler will process and log it.
 
@@ -622,7 +622,6 @@ class ApiMain extends ApiBase {
                        if ( $this->mPrinter->getWantsHelp() || $this->mAction == 'help' ) {
                                ApiResult::setContent( $errMessage, $this->makeHelpMsg() );
                        }
-
                } else {
                        global $wgShowSQLErrors, $wgShowExceptionDetails;
                        // Something is seriously wrong
@@ -639,6 +638,10 @@ class ApiMain extends ApiBase {
                        ApiResult::setContent( $errMessage, $wgShowExceptionDetails ? "\n\n{$e->getTraceAsString()}\n\n" : '' );
                }
 
+               // Remember all the warnings to re-add them later
+               $oldResult = $result->getData();
+               $warnings = isset( $oldResult['warnings'] ) ? $oldResult['warnings'] : null;
+
                $result->reset();
                $result->disableSizeCheck();
                // Re-add the id
@@ -646,11 +649,13 @@ class ApiMain extends ApiBase {
                if ( !is_null( $requestid ) ) {
                        $result->addValue( null, 'requestid', $requestid );
                }
-
                if ( $wgShowHostnames ) {
                        // servedby is especially useful when debugging errors
                        $result->addValue( null, 'servedby', wfHostName() );
                }
+               if ( $warnings !== null ) {
+                       $result->addValue( null, 'warnings', $warnings );
+               }
 
                $result->addValue( null, 'error', $errMessage );
 
@@ -680,7 +685,6 @@ class ApiMain extends ApiBase {
 
                $params = $this->extractRequestParams();
 
-               $this->mShowVersions = $params['version'];
                $this->mAction = $params['action'];
 
                if ( !is_string( $this->mAction ) ) {
@@ -786,9 +790,10 @@ class ApiMain extends ApiBase {
         * @param $params Array an array with the request parameters
         */
        protected function setupExternalResponse( $module, $params ) {
-               // Ignore mustBePosted() for internal calls
-               if ( $module->mustBePosted() && !$this->getRequest()->wasPosted() ) {
-                       $this->dieUsageMsg( array( 'mustbeposted', $this->mAction ) );
+               if ( !$this->getRequest()->wasPosted() && $module->mustBePosted() ) {
+                       // Module requires POST. GET request might still be allowed
+                       // if $wgDebugApi is true, otherwise fail.
+                       $this->dieUsageMsgOrDebug( array( 'mustbeposted', $this->mAction ) );
                }
 
                // See if custom printer is used
@@ -875,7 +880,7 @@ class ApiMain extends ApiBase {
                if ( !$table ) {
                        $chars = ';@$!*(),/:';
                        for ( $i = 0; $i < strlen( $chars ); $i++ ) {
-                               $table[ rawurlencode( $chars[$i] ) ] = $chars[$i];
+                               $table[rawurlencode( $chars[$i] )] = $chars[$i];
                        }
                }
                return strtr( rawurlencode( $s ), $table );
@@ -926,6 +931,11 @@ class ApiMain extends ApiBase {
         * @param $isError bool
         */
        protected function printResult( $isError ) {
+               global $wgDebugAPI;
+               if( $wgDebugAPI !== false ) {
+                       $this->getResult()->setWarning( 'SECURITY WARNING: $wgDebugAPI is enabled' );
+               }
+
                $this->getResult()->cleanUpUTF8();
                $printer = $this->mPrinter;
                $printer->profileIn();
@@ -967,7 +977,6 @@ class ApiMain extends ApiBase {
                                ApiBase::PARAM_DFLT => 'help',
                                ApiBase::PARAM_TYPE => $this->mModuleNames
                        ),
-                       'version' => false,
                        'maxlag'  => array(
                                ApiBase::PARAM_TYPE => 'integer'
                        ),
@@ -994,7 +1003,6 @@ class ApiMain extends ApiBase {
                return array(
                        'format' => 'The format of the output',
                        'action' => 'What action you would like to perform. See below for module help',
-                       'version' => 'When showing help, include version for each module',
                        'maxlag' => array(
                                'Maximum lag can be used when MediaWiki is installed on a database replicated cluster.',
                                'To save actions causing any more site replication lag, this parameter can make the client',
@@ -1110,8 +1118,7 @@ class ApiMain extends ApiBase {
                $this->setHelp();
                // Get help text from cache if present
                $key = wfMemcKey( 'apihelp', $this->getModuleName(),
-                       SpecialVersion::getVersion( 'nodb' ) .
-                       $this->getShowVersions() );
+                       SpecialVersion::getVersion( 'nodb' ) );
                if ( $wgAPICacheHelpTimeout > 0 ) {
                        $cached = $wgMemc->get( $key );
                        if ( $cached ) {
@@ -1139,6 +1146,7 @@ class ApiMain extends ApiBase {
                foreach ( array_keys( $this->mModules ) as $moduleName ) {
                        $module = new $this->mModules[$moduleName] ( $this, $moduleName );
                        $msg .= self::makeHelpMsgHeader( $module, 'action' );
+
                        $msg2 = $module->makeHelpMsg();
                        if ( $msg2 !== false ) {
                                $msg .= $msg2;
@@ -1149,9 +1157,8 @@ class ApiMain extends ApiBase {
                $msg .= "\n$astriks Permissions $astriks\n\n";
                foreach ( self::$mRights as $right => $rightMsg ) {
                        $groups = User::getGroupsWithPermission( $right );
-                       $msg .= "* " . $right . " *\n  " . wfMsgReplaceArgs( $rightMsg[ 'msg' ], $rightMsg[ 'params' ] ) .
+                       $msg .= "* " . $right . " *\n  " . wfMsgReplaceArgs( $rightMsg['msg'], $rightMsg['params'] ) .
                                                "\nGranted to:\n  " . str_replace( '*', 'all', implode( ', ', $groups ) ) . "\n\n";
-
                }
 
                $msg .= "\n$astriks Formats  $astriks\n\n";
@@ -1201,25 +1208,11 @@ class ApiMain extends ApiBase {
        /**
         * Check whether the user wants us to show version information in the API help
         * @return bool
+        * @deprecated since 1.21, always returns false
         */
        public function getShowVersions() {
-               return $this->mShowVersions;
-       }
-
-       /**
-        * Returns the version information of this file, plus it includes
-        * the versions for all files that are not callable proper API modules
-        *
-        * @return array
-        */
-       public function getVersion() {
-               $vers = array();
-               $vers[] = 'MediaWiki: ' . SpecialVersion::getVersion() . "\n    https://svn.wikimedia.org/viewvc/mediawiki/trunk/phase3/";
-               $vers[] = __CLASS__ . ': $Id$';
-               $vers[] = ApiBase::getBaseVersion();
-               $vers[] = ApiFormatBase::getBaseVersion();
-               $vers[] = ApiQueryBase::getBaseVersion();
-               return $vers;
+               wfDeprecated( __METHOD__, '1.21' );
+               return false;
        }
 
        /**
index 9d73562..3f54fee 100644 (file)
  */
 class ApiMove extends ApiBase {
 
-       public function __construct( $main, $action ) {
-               parent::__construct( $main, $action );
-       }
-
        public function execute() {
                $user = $this->getUser();
                $params = $this->extractRequestParams();
@@ -82,9 +78,16 @@ class ApiMove extends ApiBase {
                }
 
                $r = array( 'from' => $fromTitle->getPrefixedText(), 'to' => $toTitle->getPrefixedText(), 'reason' => $params['reason'] );
-               if ( !$params['noredirect'] || !$user->isAllowed( 'suppressredirect' ) ) {
+
+               if ( $fromTitle->exists() ) {
+                       //NOTE: we assume that if the old title exists, it's because it was re-created as
+                       // a redirect to the new title. This is not safe, but what we did before was
+                       // even worse: we just determined whether a redirect should have been created,
+                       // and reported that it was created if it should have, without any checks.
+                       // Also note that isRedirect() is unreliable because of bug 37209.
                        $r['redirectcreated'] = '';
                }
+
                if( $toTitleExists ) {
                        $r['moveoverredirect'] = '';
                }
@@ -122,7 +125,7 @@ class ApiMove extends ApiBase {
                        }
                }
 
-               $watch = "preferences";
+               $watch = 'preferences';
                if ( isset( $params['watchlist'] ) ) {
                        $watch = $params['watchlist'];
                } elseif ( $params['watch'] ) {
@@ -295,8 +298,4 @@ class ApiMove extends ApiBase {
        public function getHelpUrls() {
                return 'https://www.mediawiki.org/wiki/API:Move';
        }
-
-       public function getVersion() {
-               return __CLASS__ . ': $Id$';
-       }
 }
index ef56274..caf361a 100644 (file)
  */
 class ApiOpenSearch extends ApiBase {
 
-       public function __construct( $main, $action ) {
-               parent::__construct( $main, $action );
-       }
-
        public function getCustomPrinter() {
                return $this->getMain()->createPrinterByName( 'json' );
        }
@@ -123,8 +119,4 @@ class ApiOpenSearch extends ApiBase {
        public function getHelpUrls() {
                return 'https://www.mediawiki.org/wiki/API:Opensearch';
        }
-
-       public function getVersion() {
-               return __CLASS__ . ': $Id$';
-       }
 }
index 01a3760..faebcdc 100644 (file)
  */
 class ApiOptions extends ApiBase {
 
-       public function __construct( $main, $action ) {
-               parent::__construct( $main, $action );
-       }
-
        /**
         * Changes preferences of the current user.
         */
@@ -54,7 +50,7 @@ class ApiOptions extends ApiBase {
                }
 
                if ( $params['reset'] ) {
-                       $user->resetOptions();
+                       $user->resetOptions( $params['resetkinds'] );
                        $changed = true;
                }
 
@@ -74,35 +70,34 @@ class ApiOptions extends ApiBase {
                }
 
                $prefs = Preferences::getPreferences( $user, $this->getContext() );
-
-               // Multiselect options are stored in the database with one key per
-               // option, each having a boolean value. Extract those keys.
-               $multiselectOptions = array();
-               foreach ( $prefs as $name => $info ) {
-                       if ( ( isset( $info['type'] ) && $info['type'] == 'multiselect' ) ||
-                                       ( isset( $info['class'] ) && $info['class'] == 'HTMLMultiSelectField' ) ) {
-                               $options = HTMLFormField::flattenOptions( $info['options'] );
-                               $prefix = isset( $info['prefix'] ) ? $info['prefix'] : $name;
-
-                               foreach ( $options as $value ) {
-                                       $multiselectOptions["$prefix$value"] = true;
-                               }
-
-                               unset( $prefs[$name] );
-                       }
-               }
+               $prefsKinds = $user->getOptionKinds( $this->getContext(), $changes );
 
                foreach ( $changes as $key => $value ) {
-                       if ( isset( $prefs[$key] ) ) {
-                               $field = HTMLForm::loadInputFromParameters( $key, $prefs[$key] );
-                               $validation = $field->validate( $value, $user->getOptions() );
-                       } elseif( isset( $multiselectOptions[$key] ) ) {
-                               // A key for a multiselect option.
-                               $validation = true;
-                               $value = (bool)$value;
-                       } else {
-                               $this->setWarning( "Not a valid preference: $key" );
-                               continue;
+                       switch ( $prefsKinds[$key] ) {
+                               case 'registered':
+                                       // Regular option.
+                                       $field = HTMLForm::loadInputFromParameters( $key, $prefs[$key] );
+                                       $validation = $field->validate( $value, $user->getOptions() );
+                                       break;
+                               case 'registered-multiselect':
+                                       // A key for a multiselect option.
+                                       $validation = true;
+                                       $value = $value !== null ? (bool) $value : null;
+                                       break;
+                               case 'userjs':
+                                       // Allow non-default preferences prefixed with 'userjs-', to be set by user scripts
+                                       if ( strlen( $key ) > 255 ) {
+                                               $validation = "key too long (no more than 255 bytes allowed)";
+                                       } elseif ( preg_match( "/[^a-zA-Z0-9_-]/", $key ) !== 0 ) {
+                                               $validation = "invalid key (only a-z, A-Z, 0-9, _, - allowed)";
+                                       } else {
+                                               $validation = true;
+                                       }
+                                       break;
+                               case 'unused':
+                               default:
+                                       $validation = "not a valid preference";
+                                       break;
                        }
                        if ( $validation === true ) {
                                $user->setOption( $key, $value );
@@ -129,12 +124,20 @@ class ApiOptions extends ApiBase {
        }
 
        public function getAllowedParams() {
+               $optionKinds = User::listOptionKinds();
+               $optionKinds[] = 'all';
+
                return array(
                        'token' => array(
                                ApiBase::PARAM_TYPE => 'string',
                                ApiBase::PARAM_REQUIRED => true
                        ),
                        'reset' => false,
+                       'resetkinds' => array(
+                               ApiBase::PARAM_TYPE => $optionKinds,
+                               ApiBase::PARAM_DFLT => 'all',
+                               ApiBase::PARAM_ISMULTI => true
+                       ),
                        'change' => array(
                                ApiBase::PARAM_ISMULTI => true,
                        ),
@@ -162,15 +165,20 @@ class ApiOptions extends ApiBase {
        public function getParamDescription() {
                return array(
                        'token' => 'An options token previously obtained through the action=tokens',
-                       'reset' => 'Resets all preferences to the site defaults',
-                       'change' => 'List of changes, formatted name=value (e.g. skin=vector), value cannot contain pipe characters',
+                       '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',
                        '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',
                );
        }
 
        public function getDescription() {
-               return 'Change preferences of the current user';
+               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.'
+               );
        }
 
        public function getPossibleErrors() {
@@ -199,8 +207,4 @@ class ApiOptions extends ApiBase {
                        'api.php?action=options&reset=&change=skin=monobook&optionname=nickname&optionvalue=[[User:Beau|Beau]]%20([[User_talk:Beau|talk]])&token=123ABC',
                );
        }
-
-       public function getVersion() {
-               return __CLASS__ . ': $Id$';
-       }
 }
index 0f5be6b..4dbccc6 100644 (file)
@@ -562,7 +562,7 @@ class ApiPageSet extends ApiQueryBase {
 
                        // Get pageIDs data from the `page` table
                        $this->profileDBIn();
-                       $res = $db->select( $tables, $fields, $where,  __METHOD__ );
+                       $res = $db->select( $tables, $fields, $where, __METHOD__ );
                        foreach ( $res as $row ) {
                                $revid = intval( $row->rev_id );
                                $pageid = intval( $row->rev_page );
@@ -705,9 +705,10 @@ class ApiPageSet extends ApiQueryBase {
                                if ( $this->mConvertTitles &&
                                                count( $wgContLang->getVariants() ) > 1  &&
                                                !$titleObj->exists() ) {
-                                       // Language::findVariantLink will modify titleObj into
+                                       // Language::findVariantLink will modify titleText and titleObj into
                                        // the canonical variant if possible
-                                       $wgContLang->findVariantLink( $title, $titleObj );
+                                       $titleText = is_string( $title ) ? $title : $titleObj->getPrefixedText();
+                                       $wgContLang->findVariantLink( $titleText, $titleObj );
                                        $titleWasConverted = $unconvertedTitle !== $titleObj->getPrefixedText();
                                }
 
@@ -728,7 +729,11 @@ class ApiPageSet extends ApiQueryBase {
                        // namespace is localized or the capitalization is
                        // different
                        if ( $titleWasConverted ) {
-                               $this->mConvertedTitles[$title] = $titleObj->getPrefixedText();
+                               $this->mConvertedTitles[$unconvertedTitle] = $titleObj->getPrefixedText();
+                               // In this case the page can't be Special.
+                               if ( is_string( $title ) && $title !== $unconvertedTitle ) {
+                                       $this->mNormalizedTitles[$title] = $unconvertedTitle;
+                               }
                        } elseif ( is_string( $title ) && $title !== $titleObj->getPrefixedText() ) {
                                $this->mNormalizedTitles[$title] = $titleObj->getPrefixedText();
                        }
@@ -786,8 +791,4 @@ class ApiPageSet extends ApiQueryBase {
                        array( 'code' => 'multisource', 'info' => "Cannot use 'revids' at the same time as 'dataSource'" ),
                ) );
        }
-
-       public function getVersion() {
-               return __CLASS__ . ': $Id$';
-       }
 }
index 343a262..42c490e 100644 (file)
@@ -114,10 +114,10 @@ class ApiParamInfo extends ApiBase {
                $result = $this->getResult();
                $retval['classname'] = get_class( $obj );
                $retval['description'] = implode( "\n", (array)$obj->getFinalDescription() );
-
                $retval['examples'] = '';
 
-               $retval['version'] = implode( "\n", (array)$obj->getVersion() );
+               // version is deprecated since 1.21, but needs to be returned for v1
+               $retval['version'] = '';
                $retval['prefix'] = $obj->getModulePrefix();
 
                if ( $obj->isReadMode() ) {
@@ -366,8 +366,4 @@ class ApiParamInfo extends ApiBase {
        public function getHelpUrls() {
                return 'https://www.mediawiki.org/wiki/API:Parameter_information';
        }
-
-       public function getVersion() {
-               return __CLASS__ . ': $Id$';
-       }
 }
index 08764a5..1e9e503 100644 (file)
@@ -36,10 +36,6 @@ class ApiParse extends ApiBase {
        /** @var Content $pstContent */
        private $pstContent = null;
 
-       public function __construct( $main, $action ) {
-               parent::__construct( $main, $action );
-       }
-
        public function execute() {
                // The data is hot but user-dependent, like page views, so we set vary cookies
                $this->getMain()->setCacheMode( 'anon-public-user-private' );
@@ -102,7 +98,7 @@ class ApiParse extends ApiBase {
                                $popts->enableLimitReport( !$params['disablepp'] );
 
                                // If for some reason the "oldid" is actually the current revision, it may be cached
-                               if ( $rev->isCurrent() )  {
+                               if ( $rev->isCurrent() ) {
                                        // May get from/save to parser cache
                                        $p_result = $this->getParsedContent( $pageObj, $popts,
                                                $pageid, isset( $prop['wikitext'] ) ) ;
@@ -450,14 +446,14 @@ class ApiParse extends ApiBase {
                        $text = Language::fetchLanguageName( $nt->getInterwiki() );
 
                        $langs[] = Html::element( 'a',
-                               array( 'href' => $nt->getFullURL(), 'title' => $nt->getText(), 'class' => "external" ),
+                               array( 'href' => $nt->getFullURL(), 'title' => $nt->getText(), 'class' => 'external' ),
                                $text == '' ? $l : $text );
                }
 
                $s .= implode( wfMessage( 'pipe-separator' )->escaped(), $langs );
 
                if ( $wgContLang->isRTL() ) {
-                       $s = Html::rawElement( 'span', array( 'dir' => "LTR" ), $s );
+                       $s = Html::rawElement( 'span', array( 'dir' => 'LTR' ), $s );
                }
 
                return $s;
@@ -671,8 +667,4 @@ class ApiParse extends ApiBase {
        public function getHelpUrls() {
                return 'https://www.mediawiki.org/wiki/API:Parsing_wikitext#parse';
        }
-
-       public function getVersion() {
-               return __CLASS__ . ': $Id$';
-       }
 }
index cb5e081..4d4fbba 100644 (file)
  */
 class ApiPatrol extends ApiBase {
 
-       public function __construct( $main, $action ) {
-               parent::__construct( $main, $action );
-       }
-
        /**
         * Patrols the article or provides the reason the patrol failed.
         */
@@ -120,8 +116,4 @@ class ApiPatrol extends ApiBase {
        public function getHelpUrls() {
                return 'https://www.mediawiki.org/wiki/API:Patrol';
        }
-
-       public function getVersion() {
-               return __CLASS__ . ': $Id$';
-       }
 }
index b3ca67e..95fdbce 100644 (file)
  */
 class ApiProtect extends ApiBase {
 
-       public function __construct( $main, $action ) {
-               parent::__construct( $main, $action );
-       }
-
        public function execute() {
                global $wgRestrictionLevels;
                $params = $this->extractRequestParams();
@@ -234,8 +230,4 @@ class ApiProtect extends ApiBase {
        public function getHelpUrls() {
                return 'https://www.mediawiki.org/wiki/API:Protect';
        }
-
-       public function getVersion() {
-               return __CLASS__ . ': $Id$';
-       }
 }
index dbfa89c..fa888c9 100644 (file)
  */
 class ApiPurge extends ApiBase {
 
-       public function __construct( $main, $action ) {
-               parent::__construct( $main, $action );
-       }
-
        /**
         * Purges the cache of a page
         */
@@ -187,8 +183,4 @@ class ApiPurge extends ApiBase {
        public function getHelpUrls() {
                return 'https://www.mediawiki.org/wiki/API:Purge';
        }
-
-       public function getVersion() {
-               return __CLASS__ . ': $Id$';
-       }
 }
index d24745c..e5e6ca4 100644 (file)
@@ -76,6 +76,7 @@ class ApiQuery extends ApiBase {
                'allimages' => 'ApiQueryAllImages',
                'alllinks' => 'ApiQueryAllLinks',
                'allpages' => 'ApiQueryAllPages',
+               'alltransclusions' => 'ApiQueryAllLinks',
                'allusers' => 'ApiQueryAllUsers',
                'backlinks' => 'ApiQueryBacklinks',
                'blocks' => 'ApiQueryBlocks',
@@ -121,6 +122,7 @@ class ApiQuery extends ApiBase {
                'allimages' => 'ApiQueryAllImages',
                'alllinks' => 'ApiQueryAllLinks',
                'allpages' => 'ApiQueryAllPages',
+               'alltransclusions' => 'ApiQueryAllLinks',
                'backlinks' => 'ApiQueryBacklinks',
                'categories' => 'ApiQueryCategories',
                'categorymembers' => 'ApiQueryCategoryMembers',
@@ -774,12 +776,4 @@ class ApiQuery extends ApiBase {
                        'https://www.mediawiki.org/wiki/API:Lists',
                );
        }
-
-       public function getVersion() {
-               $psModule = new ApiPageSet( $this );
-               $vers = array();
-               $vers[] = __CLASS__ . ': $Id$';
-               $vers[] = $psModule->getVersion();
-               return $vers;
-       }
 }
index c2beaec..496a0eb 100644 (file)
@@ -60,10 +60,7 @@ class ApiQueryAllCategories extends ApiQueryGeneratorBase {
 
                if ( !is_null( $params['continue'] ) ) {
                        $cont = explode( '|', $params['continue'] );
-                       if ( count( $cont ) != 1 ) {
-                               $this->dieUsage( "Invalid continue param. You should pass the " .
-                                       "original value returned by the previous query", "_badcontinue" );
-                       }
+                       $this->dieContinueUsageIf( count( $cont ) != 1 );
                        $op = $params['dir'] == 'descending' ? '<' : '>';
                        $cont_from = $db->addQuotes( $cont[0] );
                        $this->addWhere( "cat_title $op= $cont_from" );
@@ -224,12 +221,6 @@ class ApiQueryAllCategories extends ApiQueryGeneratorBase {
                return 'Enumerate all categories';
        }
 
-       public function getPossibleErrors() {
-               return array_merge( parent::getPossibleErrors(), array(
-                       array( 'code' => '_badcontinue', 'info' => 'Invalid continue param. You should pass the original value returned by the previous query' ),
-               ) );
-       }
-
        public function getExamples() {
                return array(
                        'api.php?action=query&list=allcategories&acprop=size',
@@ -240,8 +231,4 @@ class ApiQueryAllCategories extends ApiQueryGeneratorBase {
        public function getHelpUrls() {
                return 'https://www.mediawiki.org/wiki/API:Allcategories';
        }
-
-       public function getVersion() {
-               return __CLASS__ . ': $Id$';
-       }
 }
index e6a0194..bbc5272 100644 (file)
@@ -113,10 +113,7 @@ class ApiQueryAllImages extends ApiQueryGeneratorBase {
                        // Pagination
                        if ( !is_null( $params['continue'] ) ) {
                                $cont = explode( '|', $params['continue'] );
-                               if ( count( $cont ) != 1 ) {
-                                       $this->dieUsage( 'Invalid continue param. You should pass the ' .
-                                               'original value returned by the previous query', '_badcontinue' );
-                               }
+                               $this->dieContinueUsageIf( count( $cont ) != 1 );
                                $op = ( $ascendingOrder ? '>' : '<' );
                                $continueFrom = $db->addQuotes( $cont[0] );
                                $this->addWhere( "img_name $op= $continueFrom" );
@@ -175,12 +172,13 @@ class ApiQueryAllImages extends ApiQueryGeneratorBase {
 
                $sha1 = false;
                if ( isset( $params['sha1'] ) ) {
-                       if ( !$this->validateSha1Hash( $params['sha1'] ) ) {
+                       $sha1 = strtolower( $params['sha1'] );
+                       if ( !$this->validateSha1Hash( $sha1 ) ) {
                                $this->dieUsage( 'The SHA1 hash provided is not valid', 'invalidsha1hash' );
                        }
-                       $sha1 = wfBaseConvert( $params['sha1'], 16, 36, 31 );
+                       $sha1 = wfBaseConvert( $sha1, 16, 36, 31 );
                } elseif ( isset( $params['sha1base36'] ) ) {
-                       $sha1 = $params['sha1base36'];
+                       $sha1 = strtolower( $params['sha1base36'] );
                        if ( !$this->validateSha1Base36Hash( $sha1 ) ) {
                                $this->dieUsage( 'The SHA1Base36 hash provided is not valid', 'invalidsha1base36hash' );
                        }
@@ -384,7 +382,6 @@ class ApiQueryAllImages extends ApiQueryGeneratorBase {
                        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' => '_badcontinue', 'info' => 'Invalid continue param. You should pass the original value returned by the previous query' ),
                ) );
        }
 
@@ -408,8 +405,4 @@ class ApiQueryAllImages extends ApiQueryGeneratorBase {
        public function getHelpUrls() {
                return 'https://www.mediawiki.org/wiki/API:Allimages';
        }
-
-       public function getVersion() {
-               return __CLASS__ . ': $Id$';
-       }
 }
index da4840f..e355f8b 100644 (file)
 class ApiQueryAllLinks extends ApiQueryGeneratorBase {
 
        public function __construct( $query, $moduleName ) {
-               parent::__construct( $query, $moduleName, 'al' );
+               switch ( $moduleName ) {
+                       case 'alllinks':
+                               $prefix = 'al';
+                               $this->table = 'pagelinks';
+                               $this->tablePrefix = 'pl_';
+                               $this->dfltNamespace = NS_MAIN;
+                               $this->indexTag = 'l';
+                               $this->description = 'Enumerate all links that point to a given namespace';
+                               $this->descriptionLink = 'link';
+                               $this->descriptionLinked = 'linked';
+                               $this->descriptionLinking = 'linking';
+                               break;
+                       case 'alltransclusions':
+                               $prefix = 'at';
+                               $this->table = 'templatelinks';
+                               $this->tablePrefix = 'tl_';
+                               $this->dfltNamespace = NS_TEMPLATE;
+                               $this->indexTag = 't';
+                               $this->description = 'List all transclusions (pages embedded using {{x}}), including non-existing';
+                               $this->descriptionLink = 'transclusion';
+                               $this->descriptionLinked = 'transcluded';
+                               $this->descriptionLinking = 'transcluding';
+                               break;
+                       default:
+                               ApiBase::dieDebug( __METHOD__, 'Unknown module name' );
+               }
+
+               parent::__construct( $query, $moduleName, $prefix );
        }
 
        public function execute() {
@@ -55,75 +82,71 @@ class ApiQueryAllLinks extends ApiQueryGeneratorBase {
                $db = $this->getDB();
                $params = $this->extractRequestParams();
 
+               $pfx = $this->tablePrefix;
                $prop = array_flip( $params['prop'] );
                $fld_ids = isset( $prop['ids'] );
                $fld_title = isset( $prop['title'] );
 
                if ( $params['unique'] ) {
-                       if ( !is_null( $resultPageSet ) ) {
-                               $this->dieUsage( $this->getModuleName() . ' cannot be used as a generator in unique links mode', 'params' );
-                       }
                        if ( $fld_ids ) {
-                               $this->dieUsage( $this->getModuleName() . ' cannot return corresponding page ids in unique links mode', 'params' );
+                               $this->dieUsage(
+                                       "{$this->getModuleName()} cannot return corresponding page ids in unique {$this->descriptionLink}s mode",
+                                       'params' );
                        }
                        $this->addOption( 'DISTINCT' );
                }
 
-               $this->addTables( 'pagelinks' );
-               $this->addWhereFld( 'pl_namespace', $params['namespace'] );
+               $this->addTables( $this->table );
+               $this->addWhereFld( $pfx . 'namespace', $params['namespace'] );
 
-               if ( !is_null( $params['from'] ) && !is_null( $params['continue'] ) ) {
-                       $this->dieUsage( 'alcontinue and alfrom cannot be used together', 'params' );
-               }
-               if ( !is_null( $params['continue'] ) ) {
+               $continue = !is_null( $params['continue'] );
+               if ( $continue ) {
                        $continueArr = explode( '|', $params['continue'] );
                        $op = $params['dir'] == 'descending' ? '<' : '>';
                        if ( $params['unique'] ) {
-                               if ( count( $continueArr ) != 1 ) {
-                                       $this->dieUsage( 'Invalid continue parameter', 'badcontinue' );
-                               }
+                               $this->dieContinueUsageIf( count( $continueArr ) != 1 );
                                $continueTitle = $db->addQuotes( $continueArr[0] );
-                               $this->addWhere( "pl_title $op= $continueTitle" );
+                               $this->addWhere( "{$pfx}title $op= $continueTitle" );
                        } else {
-                               if ( count( $continueArr ) != 2 ) {
-                                       $this->dieUsage( 'Invalid continue parameter', 'badcontinue' );
-                               }
+                               $this->dieContinueUsageIf( count( $continueArr ) != 2 );
                                $continueTitle = $db->addQuotes( $continueArr[0] );
                                $continueFrom = intval( $continueArr[1] );
                                $this->addWhere(
-                                       "pl_title $op $continueTitle OR " .
-                                       "(pl_title = $continueTitle AND " .
-                                       "pl_from $op= $continueFrom)"
+                                       "{$pfx}title $op $continueTitle OR " .
+                                       "({$pfx}title = $continueTitle AND " .
+                                       "{$pfx}from $op= $continueFrom)"
                                );
                        }
                }
 
-               $from = ( is_null( $params['from'] ) ? null : $this->titlePartToKey( $params['from'] ) );
+               // 'continue' always overrides 'from'
+               $from = ( $continue || is_null( $params['from'] ) ? null : $this->titlePartToKey( $params['from'] ) );
                $to = ( is_null( $params['to'] ) ? null : $this->titlePartToKey( $params['to'] ) );
-               $this->addWhereRange( 'pl_title', 'newer', $from, $to );
+               $this->addWhereRange( $pfx . 'title', 'newer', $from, $to );
 
                if ( isset( $params['prefix'] ) ) {
-                       $this->addWhere( 'pl_title' . $db->buildLike( $this->titlePartToKey( $params['prefix'] ), $db->anyString() ) );
+                       $this->addWhere( $pfx . 'title' . $db->buildLike( $this->titlePartToKey( $params['prefix'] ), $db->anyString() ) );
                }
 
-               $this->addFields( 'pl_title' );
-               $this->addFieldsIf( 'pl_from', !$params['unique'] );
+               $this->addFields( array( 'pl_title' => $pfx . 'title' ) );
+               $this->addFieldsIf( array( 'pl_from' => $pfx . 'from' ), !$params['unique'] );
 
-               $this->addOption( 'USE INDEX', 'pl_namespace' );
+               $this->addOption( 'USE INDEX', $pfx . 'namespace' );
                $limit = $params['limit'];
                $this->addOption( 'LIMIT', $limit + 1 );
 
                $sort = ( $params['dir'] == 'descending' ? ' DESC' : '' );
                $orderBy = array();
-               $orderBy[] = 'pl_title' . $sort;
+               $orderBy[] = $pfx . 'title' . $sort;
                if ( !$params['unique'] ) {
-                       $orderBy[] = 'pl_from' . $sort;
+                       $orderBy[] = $pfx . 'from' . $sort;
                }
                $this->addOption( 'ORDER BY', $orderBy );
 
                $res = $this->select( __METHOD__ );
 
                $pageids = array();
+               $titles = array();
                $count = 0;
                $result = $this->getResult();
                foreach ( $res as $row ) {
@@ -132,7 +155,7 @@ class ApiQueryAllLinks extends ApiQueryGeneratorBase {
                                if ( $params['unique'] ) {
                                        $this->setContinueEnumParameter( 'continue', $row->pl_title );
                                } else {
-                                       $this->setContinueEnumParameter( 'continue', $row->pl_title . "|" . $row->pl_from );
+                                       $this->setContinueEnumParameter( 'continue', $row->pl_title . '|' . $row->pl_from );
                                }
                                break;
                        }
@@ -151,17 +174,21 @@ class ApiQueryAllLinks extends ApiQueryGeneratorBase {
                                        if ( $params['unique'] ) {
                                                $this->setContinueEnumParameter( 'continue', $row->pl_title );
                                        } else {
-                                               $this->setContinueEnumParameter( 'continue', $row->pl_title . "|" . $row->pl_from );
+                                               $this->setContinueEnumParameter( 'continue', $row->pl_title . '|' . $row->pl_from );
                                        }
                                        break;
                                }
+                       } elseif ( $params['unique'] ) {
+                               $titles[] = Title::makeTitle( $params['namespace'], $row->pl_title );
                        } else {
                                $pageids[] = $row->pl_from;
                        }
                }
 
                if ( is_null( $resultPageSet ) ) {
-                       $result->setIndexedTagName_internal( array( 'query', $this->getModuleName() ), 'l' );
+                       $result->setIndexedTagName_internal( array( 'query', $this->getModuleName() ), $this->indexTag );
+               } elseif ( $params['unique'] ) {
+                       $resultPageSet->populateFromTitles( $titles );
                } else {
                        $resultPageSet->populateFromPageIDs( $pageids );
                }
@@ -183,7 +210,7 @@ class ApiQueryAllLinks extends ApiQueryGeneratorBase {
                                )
                        ),
                        'namespace' => array(
-                               ApiBase::PARAM_DFLT => 0,
+                               ApiBase::PARAM_DFLT => $this->dfltNamespace,
                                ApiBase::PARAM_TYPE => 'namespace'
                        ),
                        'limit' => array(
@@ -205,18 +232,23 @@ class ApiQueryAllLinks extends ApiQueryGeneratorBase {
 
        public function getParamDescription() {
                $p = $this->getModulePrefix();
+               $link = $this->descriptionLink;
+               $linking = $this->descriptionLinking;
                return array(
-                       'from' => 'The page title to start enumerating from',
-                       'to' => 'The page title to stop enumerating at',
-                       'prefix' => 'Search for all page titles that begin with this value',
-                       'unique' => "Only show unique links. Cannot be used with generator or {$p}prop=ids",
+                       'from' => "The title of the $link to start enumerating from",
+                       'to' => "The title of the $link to stop enumerating at",
+                       'prefix' => "Search for all $link titles that begin with this value",
+                       'unique' => array(
+                                       "Only show distinct $link titles. Cannot be used with {$p}prop=ids.",
+                                       'When used as a generator, yields target pages instead of source pages.',
+                       ),
                        'prop' => array(
                                'What pieces of information to include',
-                               " ids    - Adds pageid of where the link is from (Cannot be used with {$p}unique)",
-                               ' title  - Adds the title of the link',
+                               " ids    - Adds the pageid of the $linking page (Cannot be used with {$p}unique)",
+                               " title  - Adds the title of the $link",
                        ),
                        'namespace' => 'The namespace to enumerate',
-                       'limit' => 'How many total links to return',
+                       'limit' => "How many total items to return",
                        'continue' => 'When more results are available, use this to continue',
                        'dir' => 'The direction in which to list',
                );
@@ -235,30 +267,34 @@ class ApiQueryAllLinks extends ApiQueryGeneratorBase {
        }
 
        public function getDescription() {
-               return 'Enumerate all links that point to a given namespace';
+               return $this->description;
        }
 
        public function getPossibleErrors() {
                $m = $this->getModuleName();
+               $link = $this->descriptionLink;
                return array_merge( parent::getPossibleErrors(), array(
-                       array( 'code' => 'params', 'info' => "{$m} cannot be used as a generator in unique links mode" ),
-                       array( 'code' => 'params', 'info' => "{$m} cannot return corresponding page ids in unique links mode" ),
-                       array( 'code' => 'params', 'info' => 'alcontinue and alfrom cannot be used together' ),
-                       array( 'code' => 'badcontinue', 'info' => 'Invalid continue parameter' ),
+                       array( 'code' => 'params', 'info' => "{$m} cannot return corresponding page ids in unique {$link}s mode" ),
                ) );
        }
 
        public function getExamples() {
+               $p = $this->getModulePrefix();
+               $link = $this->descriptionLink;
+               $linked = $this->descriptionLinked;
                return array(
-                       'api.php?action=query&list=alllinks&alunique=&alfrom=B',
+                       "api.php?action=query&list=all{$link}s&{$p}from=B&{$p}prop=ids|title"
+                                       => "List $linked titles with page ids they are from, including missing ones. Start at B",
+                       "api.php?action=query&list=all{$link}s&{$p}unique=&{$p}from=B"
+                                       => "List unique $linked titles",
+                       "api.php?action=query&generator=all{$link}s&g{$p}unique=&g{$p}from=B"
+                                       => "Gets all $link targets, marking the missing ones",
+                       "api.php?action=query&generator=all{$link}s&g{$p}from=B"
+                                       => "Gets pages containing the {$link}s",
                );
        }
 
        public function getHelpUrls() {
-               return 'https://www.mediawiki.org/wiki/API:Alllinks';
-       }
-
-       public function getVersion() {
-               return __CLASS__ . ': $Id$';
+               return "https://www.mediawiki.org/wiki/API:All{$this->descriptionLink}s";
        }
 }
index f5e1146..fcc3dba 100644 (file)
@@ -143,7 +143,7 @@ class ApiQueryAllMessages extends ApiQueryBase {
                                }
 
                                if ( $customiseFilterEnabled ) {
-                                       $messageIsCustomised = isset( $customisedMessages['pages'][ $langObj->ucfirst( $message ) ] );
+                                       $messageIsCustomised = isset( $customisedMessages['pages'][$langObj->ucfirst( $message )] );
                                        if ( $customised === $messageIsCustomised ) {
                                                if ( $customised ) {
                                                        $a['customised'] = '';
@@ -291,8 +291,4 @@ class ApiQueryAllMessages extends ApiQueryBase {
        public function getHelpUrls() {
                return 'https://www.mediawiki.org/wiki/API:Meta#allmessages_.2F_am';
        }
-
-       public function getVersion() {
-               return __CLASS__ . ': $Id$';
-       }
 }
index 16cc31d..0c6692a 100644 (file)
@@ -69,10 +69,7 @@ class ApiQueryAllPages extends ApiQueryGeneratorBase {
 
                if ( !is_null( $params['continue'] ) ) {
                        $cont = explode( '|', $params['continue'] );
-                       if ( count( $cont ) != 1 ) {
-                               $this->dieUsage( "Invalid continue param. You should pass the " .
-                                       "original value returned by the previous query", "_badcontinue" );
-                       }
+                       $this->dieContinueUsageIf( count( $cont ) != 1 );
                        $op = $params['dir'] == 'descending' ? '<' : '>';
                        $cont_from = $db->addQuotes( $cont[0] );
                        $this->addWhere( "page_title $op= $cont_from" );
@@ -226,7 +223,7 @@ class ApiQueryAllPages extends ApiQueryGeneratorBase {
                        'to' => null,
                        'prefix' => null,
                        'namespace' => array(
-                               ApiBase::PARAM_DFLT => 0,
+                               ApiBase::PARAM_DFLT => NS_MAIN,
                                ApiBase::PARAM_TYPE => 'namespace',
                        ),
                        'filterredir' => array(
@@ -336,7 +333,6 @@ class ApiQueryAllPages extends ApiQueryGeneratorBase {
                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' => 'prlevel may not be used without prtype' ),
-                       array( 'code' => '_badcontinue', 'info' => 'Invalid continue param. You should pass the original value returned by the previous query' ),
                ) );
        }
 
@@ -359,8 +355,4 @@ class ApiQueryAllPages extends ApiQueryGeneratorBase {
        public function getHelpUrls() {
                return 'https://www.mediawiki.org/wiki/API:Allpages';
        }
-
-       public function getVersion() {
-               return __CLASS__ . ': $Id$';
-       }
 }
index 79f6469..37f2b0f 100644 (file)
@@ -444,8 +444,4 @@ class ApiQueryAllUsers extends ApiQueryBase {
        public function getHelpUrls() {
                return 'https://www.mediawiki.org/wiki/API:Allusers';
        }
-
-       public function getVersion() {
-               return __CLASS__ . ': $Id$';
-       }
 }
index 06db87b..0df2899 100644 (file)
@@ -406,20 +406,14 @@ class ApiQueryBacklinks extends ApiQueryGeneratorBase {
                // null stuff out now so we know what's set and what isn't
                $this->rootTitle = $this->contID = $this->redirID = null;
                $rootNs = intval( $continueList[0] );
-               if ( $rootNs === 0 && $continueList[0] !== '0' ) {
-                       // Illegal continue parameter
-                       $this->dieUsage( 'Invalid continue param. You should pass the original value returned by the previous query', '_badcontinue' );
-               }
+               $this->dieContinueUsageIf( $rootNs === 0 && $continueList[0] !== '0' );
+
                $this->rootTitle = Title::makeTitleSafe( $rootNs, $continueList[1] );
+               $this->dieContinueUsageIf( !$this->rootTitle );
 
-               if ( !$this->rootTitle ) {
-                       $this->dieUsage( 'Invalid continue param. You should pass the original value returned by the previous query', '_badcontinue' );
-               }
                $contID = intval( $continueList[2] );
+               $this->dieContinueUsageIf( $contID === 0 && $continueList[2] !== '0' );
 
-               if ( $contID === 0 && $continueList[2] !== '0' ) {
-                       $this->dieUsage( 'Invalid continue param. You should pass the original value returned by the previous query', '_badcontinue' );
-               }
                $this->contID = $contID;
                $id2 = isset( $continueList[3] ) ? $continueList[3] : null;
                $redirID = intval( $id2 );
@@ -455,12 +449,12 @@ class ApiQueryBacklinks extends ApiQueryGeneratorBase {
                                ApiBase::PARAM_ISMULTI => true,
                                ApiBase::PARAM_TYPE => 'namespace'
                        ),
-                       'dir' => array(\r
-                               ApiBase::PARAM_DFLT => 'ascending',\r
-                               ApiBase::PARAM_TYPE => array(\r
-                                       'ascending',\r
-                                       'descending'\r
-                               )\r
+                       'dir' => array(
+                               ApiBase::PARAM_DFLT => 'ascending',
+                               ApiBase::PARAM_TYPE => array(
+                                       'ascending',
+                                       'descending'
+                               )
                        ),
                        'filterredir' => array(
                                ApiBase::PARAM_DFLT => 'all',
@@ -535,7 +529,6 @@ class ApiQueryBacklinks extends ApiQueryGeneratorBase {
                        $this->getTitleOrPageIdErrorMessage(),
                        array(
                                array( 'code' => 'bad_image_title', 'info' => "The title for {$this->getModuleName()} query must be an image" ),
-                               array( 'code' => '_badcontinue', 'info' => 'Invalid continue param. You should pass the original value returned by the previous query' ),
                        )
                );
        }
@@ -562,8 +555,4 @@ class ApiQueryBacklinks extends ApiQueryGeneratorBase {
        public function getHelpUrls() {
                return $this->helpUrl;
        }
-
-       public function getVersion() {
-               return __CLASS__ . ': $Id$';
-       }
 }
index 5f4d9f9..addcf07 100644 (file)
@@ -351,7 +351,7 @@ abstract class ApiQueryBase extends ApiBase {
                }
                $result = $this->getResult();
                $fit = $result->addValue( array( 'query', 'pages', $pageId,
-                                        $this->getModuleName() ), null, $item );
+                       $this->getModuleName() ), null, $item );
                if ( !$fit ) {
                        return false;
                }
@@ -374,6 +374,19 @@ abstract class ApiQueryBase extends ApiBase {
                $result->enableSizeCheck();
        }
 
+       /**
+        * 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
+        */
+       protected function dieContinueUsageIf( $condition ) {
+               if ( $condition ) {
+                       $this->dieUsage(
+                               'Invalid continue param. You should pass the original value returned by the previous query',
+                               'badcontinue' );
+               }
+       }
+
        /**
         * Get the Query database connection (read-only)
         * @return DatabaseBase
@@ -549,18 +562,21 @@ abstract class ApiQueryBase extends ApiBase {
         * @return array
         */
        public function getPossibleErrors() {
-               return array_merge( parent::getPossibleErrors(), array(
+               $errors = parent::getPossibleErrors();
+               $errors = array_merge( $errors, array(
                        array( 'invalidtitle', 'title' ),
                        array( 'invalidtitle', 'key' ),
                ) );
-       }
-
-       /**
-        * Get version string for use in the API help output
-        * @return string
-        */
-       public static function getBaseVersion() {
-               return __CLASS__ . ': $Id$';
+               $params = $this->getFinalParams();
+               if ( array_key_exists( 'continue', $params ) ) {
+                       $errors = array_merge( $errors, array(
+                               array(
+                                       'code' => 'badcontinue',
+                                       'info' => 'Invalid continue param. You should pass the original value returned by the previous query'
+                               ),
+                       ) );
+               }
+               return $errors;
        }
 }
 
@@ -607,5 +623,5 @@ abstract class ApiQueryGeneratorBase extends ApiQueryBase {
         * @param $resultPageSet ApiPageSet: All output should be appended to
         *  this object
         */
-       public abstract function executeGenerator( $resultPageSet );
+       abstract public function executeGenerator( $resultPageSet );
 }
index 7cc1755..d9be9f2 100644 (file)
@@ -132,10 +132,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_range_end = ipb_range_start", isset( $show['!range'] ) );
-                       $this->addWhereIf( "ipb_range_end > ipb_range_start", isset( $show['range'] ) );
+                       $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'] ) );
                }
 
                if ( !$this->getUser()->isAllowed( 'hideuser' ) ) {
@@ -404,8 +404,4 @@ class ApiQueryBlocks extends ApiQueryBase {
        public function getHelpUrls() {
                return 'https://www.mediawiki.org/wiki/API:Blocks';
        }
-
-       public function getVersion() {
-               return __CLASS__ . ': $Id$';
-       }
 }
index 309c2ce..2b48eb0 100644 (file)
@@ -85,10 +85,7 @@ class ApiQueryCategories extends ApiQueryGeneratorBase {
 
                if ( !is_null( $params['continue'] ) ) {
                        $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" );
-                       }
+                       $this->dieContinueUsageIf( count( $cont ) != 2 );
                        $op = $params['dir'] == 'descending' ? '<' : '>';
                        $clfrom = intval( $cont[0] );
                        $clto = $this->getDB()->addQuotes( $cont[1] );
@@ -276,8 +273,4 @@ class ApiQueryCategories extends ApiQueryGeneratorBase {
        public function getHelpUrls() {
                return 'https://www.mediawiki.org/wiki/API:Properties#categories_.2F_cl';
        }
-
-       public function getVersion() {
-               return __CLASS__ . ': $Id$';
-       }
 }
index 31517fa..fbe555c 100644 (file)
@@ -146,8 +146,4 @@ class ApiQueryCategoryInfo extends ApiQueryBase {
        public function getHelpUrls() {
                return 'https://www.mediawiki.org/wiki/API:Properties#categoryinfo_.2F_ci';
        }
-
-       public function getVersion() {
-               return __CLASS__ . ': $Id$';
-       }
 }
index 55ce023..fd9d4c5 100644 (file)
@@ -106,11 +106,7 @@ class ApiQueryCategoryMembers extends ApiQueryGeneratorBase {
                } else {
                        if ( $params['continue'] ) {
                                $cont = explode( '|', $params['continue'], 3 );
-                               if ( count( $cont ) != 3 ) {
-                                       $this->dieUsage( 'Invalid continue param. You should pass the original value returned '.
-                                               'by the previous query', '_badcontinue'
-                                       );
-                               }
+                               $this->dieContinueUsageIf( count( $cont ) != 3 );
 
                                // Remove the types to skip from $queryTypes
                                $contTypeIndex = array_search( $cont[0], $queryTypes );
@@ -118,7 +114,7 @@ class ApiQueryCategoryMembers extends ApiQueryGeneratorBase {
 
                                // Add a WHERE clause for sortkey and from
                                // pack( "H*", $foo ) is used to convert hex back to binary
-                               $escSortkey = $this->getDB()->addQuotes( pack( "H*", $cont[1] ) );
+                               $escSortkey = $this->getDB()->addQuotes( pack( 'H*', $cont[1] ) );
                                $from = intval( $cont[2] );
                                $op = $dir == 'newer' ? '>' : '<';
                                // $contWhere is used further down
@@ -247,7 +243,7 @@ class ApiQueryCategoryMembers extends ApiQueryGeneratorBase {
 
                if ( is_null( $resultPageSet ) ) {
                        $result->setIndexedTagName_internal(
-                                        array( 'query', $this->getModuleName() ), 'cm' );
+                               array( 'query', $this->getModuleName() ), 'cm' );
                }
        }
 
@@ -403,7 +399,6 @@ class ApiQueryCategoryMembers extends ApiQueryGeneratorBase {
                        $this->getTitleOrPageIdErrorMessage(),
                        array(
                                array( 'code' => 'invalidcategory', 'info' => 'The category name you entered is not valid' ),
-                               array( 'code' => 'badcontinue', 'info' => 'Invalid continue param. You should pass the original value returned by the previous query' ),
                        )
                );
        }
@@ -418,8 +413,4 @@ class ApiQueryCategoryMembers extends ApiQueryGeneratorBase {
        public function getHelpUrls() {
                return 'https://www.mediawiki.org/wiki/API:Categorymembers';
        }
-
-       public function getVersion() {
-               return __CLASS__ . ': $Id$';
-       }
 }
index e69ccbd..27d95ee 100644 (file)
@@ -160,10 +160,9 @@ class ApiQueryDeletedrevs extends ApiQueryBase {
 
                if ( !is_null( $params['continue'] ) && ( $mode == 'all' || $mode == 'revs' ) ) {
                        $cont = explode( '|', $params['continue'] );
-                       if ( count( $cont ) != 3 ) {
-                               $this->dieUsage( 'Invalid continue param. You should pass the original value returned by the previous query', 'badcontinue' );
-                       }
+                       $this->dieContinueUsageIf( count( $cont ) != 3 );
                        $ns = intval( $cont[0] );
+                       $this->dieContinueUsageIf( strval( $ns ) !== $cont[0] );
                        $title = $db->addQuotes( $cont[1] );
                        $ts = $db->addQuotes( $db->timestamp( $cont[2] ) );
                        $op = ( $dir == 'newer' ? '>' : '<' );
@@ -307,7 +306,7 @@ class ApiQueryDeletedrevs extends ApiQueryBase {
                        ),
                        'namespace' => array(
                                ApiBase::PARAM_TYPE => 'namespace',
-                               ApiBase::PARAM_DFLT => 0,
+                               ApiBase::PARAM_DFLT => NS_MAIN,
                        ),
                        'limit' => array(
                                ApiBase::PARAM_DFLT => 10,
@@ -397,7 +396,6 @@ class ApiQueryDeletedrevs extends ApiQueryBase {
                        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' => 'badcontinue', 'info' => 'Invalid continue param. You should pass the original value returned by the previous query' ),
                        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" ),
@@ -423,8 +421,4 @@ class ApiQueryDeletedrevs extends ApiQueryBase {
        public function getHelpUrls() {
                return 'https://www.mediawiki.org/wiki/API:Deletedrevs';
        }
-
-       public function getVersion() {
-               return __CLASS__ . ': $Id$';
-       }
 }
index 6715969..cf0d841 100644 (file)
  */
 class ApiQueryDisabled extends ApiQueryBase {
 
-       public function __construct( $main, $action ) {
-               parent::__construct( $main, $action );
-       }
-
        public function execute() {
                $this->setWarning( "The \"{$this->getModuleName()}\" module has been disabled." );
        }
@@ -61,8 +57,4 @@ class ApiQueryDisabled extends ApiQueryBase {
        public function getExamples() {
                return array();
        }
-
-       public function getVersion() {
-               return __CLASS__ . ': $Id$';
-       }
 }
index 8f0fd3b..3b04426 100644 (file)
@@ -66,10 +66,7 @@ class ApiQueryDuplicateFiles extends ApiQueryGeneratorBase {
                $skipUntilThisDup = false;
                if ( isset( $params['continue'] ) ) {
                        $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' );
-                       }
+                       $this->dieContinueUsageIf( count( $cont ) != 2 );
                        $fromImage = $cont[0];
                        $skipUntilThisDup = $cont[1];
                        // Filter out any images before $fromImage
@@ -133,7 +130,7 @@ class ApiQueryDuplicateFiles extends ApiQueryGeneratorBase {
                                        break;
                                }
                                if ( !is_null( $resultPageSet ) ) {
-                                       $titles[] = $file->getTitle();
+                                       $titles[] = $dupFile->getTitle();
                                } else {
                                        $r = array(
                                                'name' => $dupName,
@@ -204,12 +201,6 @@ class ApiQueryDuplicateFiles extends ApiQueryGeneratorBase {
                return 'List all files that are duplicates of the given file(s) based on hash values';
        }
 
-       public function getPossibleErrors() {
-               return array_merge( parent::getPossibleErrors(), array(
-                       array( 'code' => '_badcontinue', 'info' => 'Invalid continue param. You should pass the original value returned by the previous query' ),
-               ) );
-       }
-
        public function getExamples() {
                return array(
                        'api.php?action=query&titles=File:Albert_Einstein_Head.jpg&prop=duplicatefiles',
@@ -220,8 +211,4 @@ class ApiQueryDuplicateFiles extends ApiQueryGeneratorBase {
        public function getHelpUrls() {
                return 'https://www.mediawiki.org/wiki/API:Properties#duplicatefiles_.2F_df';
        }
-
-       public function getVersion() {
-               return __CLASS__ . ': $Id$';
-       }
 }
index 6081601..98380d6 100644 (file)
@@ -272,8 +272,4 @@ class ApiQueryExtLinksUsage extends ApiQueryGeneratorBase {
        public function getHelpUrls() {
                return 'https://www.mediawiki.org/wiki/API:Exturlusage';
        }
-
-       public function getVersion() {
-               return __CLASS__ . ': $Id$';
-       }
 }
index 1449a96..c4a39d6 100644 (file)
@@ -166,8 +166,4 @@ class ApiQueryExternalLinks extends ApiQueryBase {
        public function getHelpUrls() {
                return 'https://www.mediawiki.org/wiki/API:Properties#extlinks_.2F_el';
        }
-
-       public function getVersion() {
-               return __CLASS__ . ': $Id$';
-       }
 }
index dbca1d9..8718371 100644 (file)
@@ -77,10 +77,7 @@ class ApiQueryFilearchive extends ApiQueryBase {
 
                if ( !is_null( $params['continue'] ) ) {
                        $cont = explode( '|', $params['continue'] );
-                       if ( count( $cont ) != 1 ) {
-                               $this->dieUsage( "Invalid continue param. You should pass the " .
-                                       "original value returned by the previous query", "_badcontinue" );
-                       }
+                       $this->dieContinueUsageIf( count( $cont ) != 1 );
                        $op = $params['dir'] == 'descending' ? '<' : '>';
                        $cont_from = $db->addQuotes( $cont[0] );
                        $this->addWhere( "fa_name $op= $cont_from" );
@@ -103,15 +100,16 @@ class ApiQueryFilearchive extends ApiQueryBase {
                if ( $sha1Set || $sha1base36Set ) {
                        $sha1 = false;
                        if ( $sha1Set ) {
-                               if ( !$this->validateSha1Hash( $params['sha1'] ) ) {
+                               $sha1 = strtolower( $params['sha1'] );
+                               if ( !$this->validateSha1Hash( $sha1 ) ) {
                                        $this->dieUsage( 'The SHA1 hash provided is not valid', 'invalidsha1hash' );
                                }
-                               $sha1 = wfBaseConvert( $params['sha1'], 16, 36, 31 );
+                               $sha1 = wfBaseConvert( $sha1, 16, 36, 31 );
                        } elseif ( $sha1base36Set ) {
-                               if ( !$this->validateSha1Base36Hash( $params['sha1base36'] ) ) {
+                               $sha1 = strtolower( $params['sha1base36'] );
+                               if ( !$this->validateSha1Base36Hash( $sha1 ) ) {
                                        $this->dieUsage( 'The SHA1Base36 hash provided is not valid', 'invalidsha1base36hash' );
                                }
-                               $sha1 = $params['sha1base36'];
                        }
                        if ( $sha1 ) {
                                $this->addWhereFld( 'fa_sha1', $sha1 );
@@ -365,7 +363,6 @@ class ApiQueryFilearchive extends ApiQueryBase {
                        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' => '_badcontinue', 'info' => 'Invalid continue param. You should pass the original value returned by the previous query' ),
                ) );
        }
 
@@ -377,8 +374,4 @@ class ApiQueryFilearchive extends ApiQueryBase {
                        ),
                );
        }
-
-       public function getVersion() {
-               return __CLASS__ . ': $Id$';
-       }
 }
index c5012f0..b47d31f 100644 (file)
@@ -56,10 +56,7 @@ class ApiQueryIWBacklinks extends ApiQueryGeneratorBase {
 
                if ( !is_null( $params['continue'] ) ) {
                        $cont = explode( '|', $params['continue'] );
-                       if ( count( $cont ) != 3 ) {
-                               $this->dieUsage( 'Invalid continue param. You should pass the ' .
-                                       'original value returned by the previous query', '_badcontinue' );
-                       }
+                       $this->dieContinueUsageIf( count( $cont ) != 3 );
 
                        $db = $this->getDB();
                        $op = $params['dir'] == 'descending' ? '<' : '>';
@@ -233,7 +230,6 @@ class ApiQueryIWBacklinks extends ApiQueryGeneratorBase {
        public function getPossibleErrors() {
                return array_merge( parent::getPossibleErrors(), array(
                        array( 'missingparam', 'prefix' ),
-                       array( 'code' => '_badcontinue', 'info' => 'Invalid continue param. You should pass the original value returned by the previous query' ),
                ) );
        }
 
@@ -243,8 +239,4 @@ class ApiQueryIWBacklinks extends ApiQueryGeneratorBase {
                        'api.php?action=query&generator=iwbacklinks&giwbltitle=Test&giwblprefix=wikibooks&prop=info'
                );
        }
-
-       public function getVersion() {
-               return __CLASS__ . ': $Id$';
-       }
 }
index 30c7f5a..fc77b4e 100644 (file)
@@ -58,10 +58,7 @@ class ApiQueryIWLinks extends ApiQueryBase {
 
                if ( !is_null( $params['continue'] ) ) {
                        $cont = explode( '|', $params['continue'] );
-                       if ( count( $cont ) != 3 ) {
-                               $this->dieUsage( 'Invalid continue param. You should pass the ' .
-                                       'original value returned by the previous query', '_badcontinue' );
-                       }
+                       $this->dieContinueUsageIf( count( $cont ) != 3 );
                        $op = $params['dir'] == 'descending' ? '<' : '>';
                        $db = $this->getDB();
                        $iwlfrom = intval( $cont[0] );
@@ -187,7 +184,6 @@ class ApiQueryIWLinks extends ApiQueryBase {
        public function getPossibleErrors() {
                return array_merge( parent::getPossibleErrors(), array(
                        array( 'missingparam', 'prefix' ),
-                       array( 'code' => '_badcontinue', 'info' => 'Invalid continue param. You should pass the original value returned by the previous query' ),
                ) );
        }
 
@@ -196,8 +192,4 @@ class ApiQueryIWLinks extends ApiQueryBase {
                        'api.php?action=query&prop=iwlinks&titles=Main%20Page' => 'Get interwiki links from the [[Main Page]]',
                );
        }
-
-       public function getVersion() {
-               return __CLASS__ . ': $Id$';
-       }
 }
index 1933c78..4b9bc98 100644 (file)
@@ -56,10 +56,7 @@ class ApiQueryImageInfo extends ApiQueryBase {
                        if ( !is_null( $params['continue'] ) ) {
                                $skip = true;
                                $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' );
-                               }
+                               $this->dieContinueUsageIf( count( $cont ) != 2 );
                                $fromTitle = strval( $cont[0] );
                                $fromTimestamp = $cont[1];
                                // Filter out any titles before $fromTitle
@@ -79,14 +76,14 @@ class ApiQueryImageInfo extends ApiQueryBase {
                        } else {
                                $images = RepoGroup::singleton()->findFiles( $titles );
                        }
-                       foreach ( $images as $img ) {
-                               // Skip redirects
-                               if ( $img->getOriginalTitle()->isRedirect() ) {
+                       foreach ( $titles as $title ) {
+                               if ( !isset( $images[$title] ) ) {
                                        continue;
                                }
 
                                $start = $skip ? $fromTimestamp : $params['start'];
-                               $pageId = $pageIds[NS_FILE][ $img->getOriginalTitle()->getDBkey() ];
+                               $pageId = $pageIds[NS_FILE][$title];
+                               $img = $images[$title];
 
                                $fit = $result->addValue(
                                        array( 'query', 'pages', intval( $pageId ) ),
@@ -438,7 +435,7 @@ class ApiQueryImageInfo extends ApiQueryBase {
         */
        protected function getContinueStr( $img ) {
                return $img->getOriginalTitle()->getText() .
-                       '|' .  $img->getTimestamp();
+                       '|' . $img->getTimestamp();
        }
 
        public function getAllowedParams() {
@@ -542,7 +539,7 @@ class ApiQueryImageInfo extends ApiQueryBase {
                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.",
-                                           'Only the current version of the image can be scaled' ),
+                                               'Only the current version of the image can be scaled' ),
                        'urlheight' => "Similar to {$p}urlwidth. Cannot be used without {$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" ),
@@ -705,8 +702,4 @@ class ApiQueryImageInfo extends ApiQueryBase {
        public function getHelpUrls() {
                return 'https://www.mediawiki.org/wiki/API:Properties#imageinfo_.2F_ii';
        }
-
-       public function getVersion() {
-               return __CLASS__ . ': $Id$';
-       }
 }
index 6052a75..aa7359b 100644 (file)
@@ -62,10 +62,7 @@ class ApiQueryImages extends ApiQueryGeneratorBase {
                $this->addWhereFld( 'il_from', array_keys( $this->getPageSet()->getGoodTitles() ) );
                if ( !is_null( $params['continue'] ) ) {
                        $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' );
-                       }
+                       $this->dieContinueUsageIf( count( $cont ) != 2 );
                        $op = $params['dir'] == 'descending' ? '<' : '>';
                        $ilfrom = intval( $cont[0] );
                        $ilto = $this->getDB()->addQuotes( $cont[1] );
@@ -185,12 +182,6 @@ class ApiQueryImages extends ApiQueryGeneratorBase {
                return 'Returns all images contained on the given page(s)';
        }
 
-       public function getPossibleErrors() {
-               return array_merge( parent::getPossibleErrors(), array(
-                       array( 'code' => '_badcontinue', 'info' => 'Invalid continue param. You should pass the original value returned by the previous query' ),
-               ) );
-       }
-
        public function getExamples() {
                return array(
                        'api.php?action=query&prop=images&titles=Main%20Page' => 'Get a list of images used in the [[Main Page]]',
@@ -201,8 +192,4 @@ class ApiQueryImages extends ApiQueryGeneratorBase {
        public function getHelpUrls() {
                return 'https://www.mediawiki.org/wiki/API:Properties#images_.2F_im';
        }
-
-       public function getVersion() {
-               return __CLASS__ . ': $Id$';
-       }
 }
index e5cea96..94b6ad8 100644 (file)
@@ -118,11 +118,11 @@ class ApiQueryInfo extends ApiQueryBase {
                }
 
                // The token is always the same, let's exploit that
-               if ( !isset( ApiQueryInfo::$cachedTokens[ 'edit' ] ) ) {
-                       ApiQueryInfo::$cachedTokens[ 'edit' ] = $wgUser->getEditToken();
+               if ( !isset( ApiQueryInfo::$cachedTokens['edit'] ) ) {
+                       ApiQueryInfo::$cachedTokens['edit'] = $wgUser->getEditToken();
                }
 
-               return ApiQueryInfo::$cachedTokens[ 'edit' ];
+               return ApiQueryInfo::$cachedTokens['edit'];
        }
 
        public static function getDeleteToken( $pageid, $title ) {
@@ -132,11 +132,11 @@ class ApiQueryInfo extends ApiQueryBase {
                }
 
                // The token is always the same, let's exploit that
-               if ( !isset( ApiQueryInfo::$cachedTokens[ 'delete' ] ) ) {
-                       ApiQueryInfo::$cachedTokens[ 'delete' ] = $wgUser->getEditToken();
+               if ( !isset( ApiQueryInfo::$cachedTokens['delete'] ) ) {
+                       ApiQueryInfo::$cachedTokens['delete'] = $wgUser->getEditToken();
                }
 
-               return ApiQueryInfo::$cachedTokens[ 'delete' ];
+               return ApiQueryInfo::$cachedTokens['delete'];
        }
 
        public static function getProtectToken( $pageid, $title ) {
@@ -146,11 +146,11 @@ class ApiQueryInfo extends ApiQueryBase {
                }
 
                // The token is always the same, let's exploit that
-               if ( !isset( ApiQueryInfo::$cachedTokens[ 'protect' ] ) ) {
-                       ApiQueryInfo::$cachedTokens[ 'protect' ] = $wgUser->getEditToken();
+               if ( !isset( ApiQueryInfo::$cachedTokens['protect'] ) ) {
+                       ApiQueryInfo::$cachedTokens['protect'] = $wgUser->getEditToken();
                }
 
-               return ApiQueryInfo::$cachedTokens[ 'protect' ];
+               return ApiQueryInfo::$cachedTokens['protect'];
        }
 
        public static function getMoveToken( $pageid, $title ) {
@@ -160,11 +160,11 @@ class ApiQueryInfo extends ApiQueryBase {
                }
 
                // The token is always the same, let's exploit that
-               if ( !isset( ApiQueryInfo::$cachedTokens[ 'move' ] ) ) {
-                       ApiQueryInfo::$cachedTokens[ 'move' ] = $wgUser->getEditToken();
+               if ( !isset( ApiQueryInfo::$cachedTokens['move'] ) ) {
+                       ApiQueryInfo::$cachedTokens['move'] = $wgUser->getEditToken();
                }
 
-               return ApiQueryInfo::$cachedTokens[ 'move' ];
+               return ApiQueryInfo::$cachedTokens['move'];
        }
 
        public static function getBlockToken( $pageid, $title ) {
@@ -174,11 +174,11 @@ class ApiQueryInfo extends ApiQueryBase {
                }
 
                // The token is always the same, let's exploit that
-               if ( !isset( ApiQueryInfo::$cachedTokens[ 'block' ] ) ) {
-                       ApiQueryInfo::$cachedTokens[ 'block' ] = $wgUser->getEditToken();
+               if ( !isset( ApiQueryInfo::$cachedTokens['block'] ) ) {
+                       ApiQueryInfo::$cachedTokens['block'] = $wgUser->getEditToken();
                }
 
-               return ApiQueryInfo::$cachedTokens[ 'block' ];
+               return ApiQueryInfo::$cachedTokens['block'];
        }
 
        public static function getUnblockToken( $pageid, $title ) {
@@ -193,11 +193,11 @@ class ApiQueryInfo extends ApiQueryBase {
                }
 
                // The token is always the same, let's exploit that
-               if ( !isset( ApiQueryInfo::$cachedTokens[ 'email' ] ) ) {
-                       ApiQueryInfo::$cachedTokens[ 'email' ] = $wgUser->getEditToken();
+               if ( !isset( ApiQueryInfo::$cachedTokens['email'] ) ) {
+                       ApiQueryInfo::$cachedTokens['email'] = $wgUser->getEditToken();
                }
 
-               return ApiQueryInfo::$cachedTokens[ 'email' ];
+               return ApiQueryInfo::$cachedTokens['email'];
        }
 
        public static function getImportToken( $pageid, $title ) {
@@ -207,11 +207,11 @@ class ApiQueryInfo extends ApiQueryBase {
                }
 
                // The token is always the same, let's exploit that
-               if ( !isset( ApiQueryInfo::$cachedTokens[ 'import' ] ) ) {
-                       ApiQueryInfo::$cachedTokens[ 'import' ] = $wgUser->getEditToken();
+               if ( !isset( ApiQueryInfo::$cachedTokens['import'] ) ) {
+                       ApiQueryInfo::$cachedTokens['import'] = $wgUser->getEditToken();
                }
 
-               return ApiQueryInfo::$cachedTokens[ 'import' ];
+               return ApiQueryInfo::$cachedTokens['import'];
        }
 
        public static function getWatchToken( $pageid, $title ) {
@@ -221,11 +221,11 @@ class ApiQueryInfo extends ApiQueryBase {
                }
 
                // The token is always the same, let's exploit that
-               if ( !isset( ApiQueryInfo::$cachedTokens[ 'watch' ] ) ) {
-                       ApiQueryInfo::$cachedTokens[ 'watch' ] = $wgUser->getEditToken( 'watch' );
+               if ( !isset( ApiQueryInfo::$cachedTokens['watch'] ) ) {
+                       ApiQueryInfo::$cachedTokens['watch'] = $wgUser->getEditToken( 'watch' );
                }
 
-               return ApiQueryInfo::$cachedTokens[ 'watch' ];
+               return ApiQueryInfo::$cachedTokens['watch'];
        }
 
        public static function getOptionsToken( $pageid, $title ) {
@@ -235,11 +235,11 @@ class ApiQueryInfo extends ApiQueryBase {
                }
 
                // The token is always the same, let's exploit that
-               if ( !isset( ApiQueryInfo::$cachedTokens[ 'options' ] ) ) {
-                       ApiQueryInfo::$cachedTokens[ 'options' ] = $wgUser->getEditToken();
+               if ( !isset( ApiQueryInfo::$cachedTokens['options'] ) ) {
+                       ApiQueryInfo::$cachedTokens['options'] = $wgUser->getEditToken();
                }
 
-               return ApiQueryInfo::$cachedTokens[ 'options' ];
+               return ApiQueryInfo::$cachedTokens['options'];
        }
 
        public function execute() {
@@ -268,10 +268,7 @@ class ApiQueryInfo extends ApiQueryBase {
                        // Throw away any titles we're gonna skip so they don't
                        // clutter queries
                        $cont = explode( '|', $this->params['continue'] );
-                       if ( count( $cont ) != 2 ) {
-                               $this->dieUsage( 'Invalid continue param. You should pass the original ' .
-                                               'value returned by the previous query', '_badcontinue' );
-                       }
+                       $this->dieContinueUsageIf( count( $cont ) != 2 );
                        $conttitle = Title::makeTitleSafe( $cont[0], $cont[1] );
                        foreach ( $this->everything as $pageid => $title ) {
                                if ( Title::compare( $title, $conttitle ) >= 0 ) {
@@ -349,7 +346,7 @@ class ApiQueryInfo extends ApiQueryBase {
                        $pageInfo['touched'] = wfTimestamp( TS_ISO_8601, $this->pageTouched[$pageid] );
                        $pageInfo['lastrevid'] = intval( $this->pageLatest[$pageid] );
                        $pageInfo['counter'] = $wgDisableCounters
-                               ? ""
+                               ? ''
                                : intval( $this->pageCounter[$pageid] );
                        $pageInfo['length'] = intval( $this->pageLength[$pageid] );
 
@@ -809,12 +806,6 @@ class ApiQueryInfo extends ApiQueryBase {
                return 'Get basic page information such as namespace, title, last touched date, ...';
        }
 
-       public function getPossibleErrors() {
-               return array_merge( parent::getPossibleErrors(), array(
-                       array( 'code' => '_badcontinue', 'info' => 'Invalid continue param. You should pass the original value returned by the previous query' ),
-               ) );
-       }
-
        public function getExamples() {
                return array(
                        'api.php?action=query&prop=info&titles=Main%20Page',
@@ -825,8 +816,4 @@ class ApiQueryInfo extends ApiQueryBase {
        public function getHelpUrls() {
                return 'https://www.mediawiki.org/wiki/API:Properties#info_.2F_in';
        }
-
-       public function getVersion() {
-               return __CLASS__ . ': $Id$';
-       }
 }
index 3920407..7a4880a 100644 (file)
@@ -56,10 +56,7 @@ class ApiQueryLangBacklinks extends ApiQueryGeneratorBase {
 
                if ( !is_null( $params['continue'] ) ) {
                        $cont = explode( '|', $params['continue'] );
-                       if ( count( $cont ) != 3 ) {
-                               $this->dieUsage( 'Invalid continue param. You should pass the ' .
-                                       'original value returned by the previous query', '_badcontinue' );
-                       }
+                       $this->dieContinueUsageIf( count( $cont ) != 3 );
 
                        $db = $this->getDB();
                        $op = $params['dir'] == 'descending' ? '<' : '>';
@@ -233,7 +230,6 @@ class ApiQueryLangBacklinks extends ApiQueryGeneratorBase {
        public function getPossibleErrors() {
                return array_merge( parent::getPossibleErrors(), array(
                        array( 'missingparam', 'lang' ),
-                       array( 'code' => '_badcontinue', 'info' => 'Invalid continue param. You should pass the original value returned by the previous query' ),
                ) );
        }
 
@@ -243,8 +239,4 @@ class ApiQueryLangBacklinks extends ApiQueryGeneratorBase {
                        'api.php?action=query&generator=langbacklinks&glbltitle=Test&glbllang=fr&prop=info'
                );
        }
-
-       public function getVersion() {
-               return __CLASS__ . ': $Id$';
-       }
 }
index 3109a09..0aaa588 100644 (file)
@@ -56,10 +56,7 @@ class ApiQueryLangLinks extends ApiQueryBase {
                $this->addWhereFld( 'll_from', array_keys( $this->getPageSet()->getGoodTitles() ) );
                if ( !is_null( $params['continue'] ) ) {
                        $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' );
-                       }
+                       $this->dieContinueUsageIf( count( $cont ) != 2 );
                        $op = $params['dir'] == 'descending' ? '<' : '>';
                        $llfrom = intval( $cont[0] );
                        $lllang = $this->getDB()->addQuotes( $cont[1] );
@@ -179,7 +176,6 @@ class ApiQueryLangLinks extends ApiQueryBase {
        public function getPossibleErrors() {
                return array_merge( parent::getPossibleErrors(), array(
                        array( 'missingparam', 'lang' ),
-                       array( 'code' => '_badcontinue', 'info' => 'Invalid continue param. You should pass the original value returned by the previous query' ),
                ) );
        }
 
@@ -192,8 +188,4 @@ class ApiQueryLangLinks extends ApiQueryBase {
        public function getHelpUrls() {
                return 'https://www.mediawiki.org/wiki/API:Properties#langlinks_.2F_ll';
        }
-
-       public function getVersion() {
-               return __CLASS__ . ': $Id$';
-       }
 }
index 9e4b7eb..69d81ae 100644 (file)
@@ -112,10 +112,7 @@ class ApiQueryLinks extends ApiQueryGeneratorBase {
 
                if ( !is_null( $params['continue'] ) ) {
                        $cont = explode( '|', $params['continue'] );
-                       if ( count( $cont ) != 3 ) {
-                               $this->dieUsage( 'Invalid continue param. You should pass the ' .
-                                       'original value returned by the previous query', '_badcontinue' );
-                       }
+                       $this->dieContinueUsageIf( count( $cont ) != 3 );
                        $op = $params['dir'] == 'descending' ? '<' : '>';
                        $plfrom = intval( $cont[0] );
                        $plns = intval( $cont[1] );
@@ -241,17 +238,13 @@ class ApiQueryLinks extends ApiQueryGeneratorBase {
                $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&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",
                );
        }
 
        public function getHelpUrls() {
                return $this->helpUrl;
        }
-
-       public function getVersion() {
-               return __CLASS__ . ': $Id$';
-       }
 }
index e51b558..f89c826 100644 (file)
@@ -58,7 +58,7 @@ class ApiQueryLogEvents extends ApiQueryBase {
                $this->fld_details = isset( $prop['details'] );
                $this->fld_tags = isset( $prop['tags'] );
 
-               $hideLogs = LogEventsList::getExcludeClause( $db );
+               $hideLogs = LogEventsList::getExcludeClause( $db, 'user', $this->getUser() );
                if ( $hideLogs !== false ) {
                        $this->addWhere( $hideLogs );
                }
@@ -70,7 +70,7 @@ class ApiQueryLogEvents extends ApiQueryBase {
                        'user' => array( 'JOIN',
                                'user_id=log_user' ),
                        'page' => array( 'LEFT JOIN',
-                               array(  'log_namespace=page_namespace',
+                               array( 'log_namespace=page_namespace',
                                        'log_title=page_title' ) ) ) );
                $index = array( 'logging' => 'times' ); // default, may change
 
@@ -151,7 +151,7 @@ class ApiQueryLogEvents extends ApiQueryBase {
                        if ( is_null( $title ) ) {
                                $this->dieUsage( "Bad title value '$prefix'", 'param_prefix' );
                        }
-                       $this->addWhereFld( 'log_namespace',  $title->getNamespace() );
+                       $this->addWhereFld( 'log_namespace', $title->getNamespace() );
                        $this->addWhere( 'log_title ' . $db->buildLike( $title->getDBkey(), $db->anyString() ) );
                }
 
@@ -201,7 +201,7 @@ class ApiQueryLogEvents extends ApiQueryBase {
        public static function addLogParams( $result, &$vals, $params, $type, $action, $ts, $legacy = false ) {
                switch ( $type ) {
                        case 'move':
-                               if ( $legacy ){
+                               if ( $legacy ) {
                                        $targetKey = 0;
                                        $noredirKey = 1;
                                } else {
@@ -209,21 +209,21 @@ class ApiQueryLogEvents extends ApiQueryBase {
                                        $noredirKey = '5::noredir';
                                }
 
-                               if ( isset( $params[ $targetKey ] ) ) {
-                                       $title = Title::newFromText( $params[ $targetKey ] );
+                               if ( isset( $params[$targetKey] ) ) {
+                                       $title = Title::newFromText( $params[$targetKey] );
                                        if ( $title ) {
                                                $vals2 = array();
                                                ApiQueryBase::addTitleInfo( $vals2, $title, 'new_' );
                                                $vals[$type] = $vals2;
                                        }
                                }
-                               if ( isset( $params[ $noredirKey ] ) && $params[ $noredirKey ] ) {
+                               if ( isset( $params[$noredirKey] ) && $params[$noredirKey] ) {
                                        $vals[$type]['suppressedredirect'] = '';
                                }
                                $params = null;
                                break;
                        case 'patrol':
-                               if ( $legacy ){
+                               if ( $legacy ) {
                                        $cur = 0;
                                        $prev = 1;
                                        $auto = 2;
@@ -267,9 +267,19 @@ class ApiQueryLogEvents extends ApiQueryBase {
                                break;
                }
                if ( !is_null( $params ) ) {
-                       $result->setIndexedTagName( $params, 'param' );
-                       $result->setIndexedTagName_recursive( $params, 'param' );
-                       $vals = array_merge( $vals, $params );
+                       $logParams = array();
+                       // Keys like "4::paramname" can't be used for output so we change them to "paramname"
+                       foreach ( $params as $key => $value ) {
+                               if ( strpos( $key, ':' ) === false ) {
+                                       $logParams[$key] = $value;
+                                       continue;
+                               }
+                               $logParam = explode( ':', $key, 3 );
+                               $logParams[$logParam[2]] = $value;
+                       }
+                       $result->setIndexedTagName( $logParams, 'param' );
+                       $result->setIndexedTagName_recursive( $logParams, 'param' );
+                       $vals = array_merge( $vals, $logParams );
                }
                return $vals;
        }
@@ -367,8 +377,12 @@ class ApiQueryLogEvents extends ApiQueryBase {
                if ( !is_null( $params['prop'] ) && in_array( 'parsedcomment', $params['prop'] ) ) {
                        // formatComment() calls wfMessage() among other things
                        return 'anon-public-user-private';
-               } else {
+               } elseif ( LogEventsList::getExcludeClause( $this->getDB(), 'user', $this->getUser() )
+                       === LogEventsList::getExcludeClause( $this->getDB(), 'public' )
+               ) { // Output can only contain public data.
                        return 'public';
+               } else {
+                       return 'anon-public-user-private';
                }
        }
 
@@ -531,8 +545,4 @@ class ApiQueryLogEvents extends ApiQueryBase {
        public function getHelpUrls() {
                return 'https://www.mediawiki.org/wiki/API:Logevents';
        }
-
-       public function getVersion() {
-               return __CLASS__ . ': $Id$';
-       }
 }
index f0c2b1b..41d8f11 100644 (file)
@@ -35,7 +35,7 @@ abstract class ApiQueryORM extends ApiQueryBase {
         *
         * @return IORMTable
         */
-       protected abstract function getTable();
+       abstract protected function getTable();
 
        /**
         * Returns the name of the individual rows.
index 1eef67e..9dd2c6a 100644 (file)
@@ -49,7 +49,7 @@ class ApiQueryPageProps extends ApiQueryBase {
 
                $this->addTables( 'page_props' );
                $this->addFields( array( 'pp_page', 'pp_propname', 'pp_value' ) );
-               $this->addWhereFld( 'pp_page',  array_keys( $pages ) );
+               $this->addWhereFld( 'pp_page', array_keys( $pages ) );
 
                if ( $this->params['continue'] ) {
                        $this->addWhere( 'pp_page >=' . intval( $this->params['continue'] ) );
@@ -146,8 +146,4 @@ class ApiQueryPageProps extends ApiQueryBase {
        public function getHelpUrls() {
                return 'https://www.mediawiki.org/wiki/API:Properties#pageprops_.2F_pp';
        }
-
-       public function getVersion() {
-               return __CLASS__ . ': $Id$';
-       }
 }
index 0205005..4aa0000 100644 (file)
@@ -264,8 +264,4 @@ class ApiQueryProtectedTitles extends ApiQueryGeneratorBase {
        public function getHelpUrls() {
                return 'https://www.mediawiki.org/wiki/API:Protectedtitles';
        }
-
-       public function getVersion() {
-               return __CLASS__ . ': $Id$';
-       }
 }
index a8be26d..1c9deb7 100644 (file)
@@ -211,7 +211,7 @@ class ApiQueryQueryPage extends ApiQueryGeneratorBase {
 
        public function getPossibleErrors() {
                return array_merge( parent::getPossibleErrors(), array(
-                        array( 'specialpage-cantexecute' )
+                       array( 'specialpage-cantexecute' )
                ) );
        }
 
@@ -220,8 +220,4 @@ class ApiQueryQueryPage extends ApiQueryGeneratorBase {
                        'api.php?action=query&list=querypage&qppage=Ancientpages'
                );
        }
-
-       public function getVersion() {
-               return __CLASS__ . ': $Id$';
-       }
 }
index ddf5841..99854c1 100644 (file)
@@ -183,8 +183,4 @@ class ApiQueryRandom extends ApiQueryGeneratorBase {
        public function getExamples() {
                return 'api.php?action=query&list=random&rnnamespace=0&rnlimit=2';
        }
-
-       public function getVersion() {
-               return __CLASS__ . ': $Id: ApiQueryRandom.php overlordq$';
-       }
 }
index 84c2332..6acca67 100644 (file)
@@ -234,7 +234,7 @@ class ApiQueryRecentChanges extends ApiQueryGeneratorBase {
                        $this->addFieldsIf( 'rc_comment', $this->fld_comment || $this->fld_parsedcomment );
                        $this->addFieldsIf( 'rc_user', $this->fld_user );
                        $this->addFieldsIf( 'rc_user_text', $this->fld_user || $this->fld_userid );
-                       $this->addFieldsIf( array( 'rc_minor', 'rc_type', 'rc_bot' ) , $this->fld_flags );
+                       $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 );
@@ -260,7 +260,7 @@ class ApiQueryRecentChanges extends ApiQueryGeneratorBase {
                if ( !is_null( $params['tag'] ) ) {
                        $this->addTables( 'change_tag' );
                        $this->addJoinConds( array( 'change_tag' => array( 'INNER JOIN', array( 'rc_id=ct_rc_id' ) ) ) );
-                       $this->addWhereFld( 'ct_tag' , $params['tag'] );
+                       $this->addWhereFld( 'ct_tag', $params['tag'] );
                        global $wgOldChangeTagsIndex;
                        $index['change_tag'] = $wgOldChangeTagsIndex ? 'ct_tag' : 'change_tag_tag_id';
                }
@@ -341,6 +341,9 @@ class ApiQueryRecentChanges extends ApiQueryGeneratorBase {
                        case RC_LOG:
                                $vals['type'] = 'log';
                                break;
+                       case RC_EXTERNAL:
+                               $vals['type'] = 'external';
+                               break;
                        case RC_MOVE_OVER_REDIRECT:
                                $vals['type'] = 'move over redirect';
                                break;
@@ -477,6 +480,8 @@ class ApiQueryRecentChanges extends ApiQueryGeneratorBase {
                                return RC_NEW;
                        case 'log':
                                return RC_LOG;
+                       case 'external':
+                               return RC_EXTERNAL;
                }
        }
 
@@ -573,6 +578,7 @@ class ApiQueryRecentChanges extends ApiQueryGeneratorBase {
                                ApiBase::PARAM_ISMULTI => true,
                                ApiBase::PARAM_TYPE => array(
                                        'edit',
+                                       'external',
                                        'new',
                                        'log'
                                )
@@ -730,8 +736,4 @@ class ApiQueryRecentChanges extends ApiQueryGeneratorBase {
        public function getHelpUrls() {
                return 'https://www.mediawiki.org/wiki/API:Recentchanges';
        }
-
-       public function getVersion() {
-               return __CLASS__ . ': $Id$';
-       }
 }
index 66ff3f0..9b54ee5 100644 (file)
@@ -189,7 +189,7 @@ class ApiQueryRevisions extends ApiQueryBase {
                if ( !is_null( $params['tag'] ) ) {
                        $this->addTables( 'change_tag' );
                        $this->addJoinConds( array( 'change_tag' => array( 'INNER JOIN', array( 'rev_id=ct_rev_id' ) ) ) );
-                       $this->addWhereFld( 'ct_tag' , $params['tag'] );
+                       $this->addWhereFld( 'ct_tag', $params['tag'] );
                        global $wgOldChangeTagsIndex;
                        $index['change_tag'] = $wgOldChangeTagsIndex ? 'ct_tag' : 'change_tag_tag_id';
                }
@@ -338,10 +338,7 @@ class ApiQueryRevisions extends ApiQueryBase {
 
                        if ( !is_null( $params['continue'] ) ) {
                                $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' );
-                               }
+                               $this->dieContinueUsageIf( count( $cont ) != 2 );
                                $pageid = intval( $cont[0] );
                                $revid = intval( $cont[1] );
                                $this->addWhere(
@@ -439,12 +436,14 @@ class ApiQueryRevisions extends ApiQueryBase {
                        }
                }
 
-               if ( $this->fld_sha1 ) {
+               if ( $this->fld_sha1 && !$revision->isDeleted( Revision::DELETED_TEXT ) ) {
                        if ( $revision->getSha1() != '' ) {
                                $vals['sha1'] = wfBaseConvert( $revision->getSha1(), 36, 16, 40 );
                        } else {
                                $vals['sha1'] = '';
                        }
+               } elseif ( $this->fld_sha1 ) {
+                       $vals['sha1hidden'] = '';
                }
 
                if ( $this->fld_contentmodel ) {
@@ -491,19 +490,19 @@ class ApiQueryRevisions extends ApiQueryBase {
 
                $content = null;
                global $wgParser;
-               if ( $this->fld_content || !is_null( $this->difftotext ) ) {
+               if ( $this->fld_content || !is_null( $this->diffto ) || !is_null( $this->difftotext ) ) {
                        $content = $revision->getContent();
                        // Expand templates after getting section content because
                        // template-added sections don't count and Parser::preprocess()
                        // will have less input
-                       if ( $this->section !== false ) {
+                       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' );
                                }
                        }
                }
-               if ( $this->fld_content && !$revision->isDeleted( Revision::DELETED_TEXT ) ) {
+               if ( $this->fld_content && $content && !$revision->isDeleted( Revision::DELETED_TEXT ) ) {
                        $text = null;
 
                        if ( $this->generateXML ) {
@@ -567,13 +566,20 @@ class ApiQueryRevisions extends ApiQueryBase {
                                ApiResult::setContent( $vals, $text );
                        }
                } elseif ( $this->fld_content ) {
-                       $vals['texthidden'] = '';
+                       if ( $revision->isDeleted( Revision::DELETED_TEXT ) ) {
+                               $vals['texthidden'] = '';
+                       } else {
+                               $vals['textmissing'] = '';
+                       }
                }
 
                if ( !is_null( $this->diffto ) || !is_null( $this->difftotext ) ) {
                        global $wgAPIMaxUncachedDiffs;
                        static $n = 0; // Number of uncached diffs we've had
-                       if ( $n < $wgAPIMaxUncachedDiffs ) {
+
+                       if ( is_null( $content ) ) {
+                               $vals['textmissing'] = '';
+                       } elseif ( $n < $wgAPIMaxUncachedDiffs ) {
                                $vals['diff'] = array();
                                $context = new DerivativeContext( $this->getContext() );
                                $context->setTitle( $title );
@@ -786,7 +792,8 @@ class ApiQueryRevisions extends ApiQueryBase {
                                        ApiBase::PROP_TYPE => 'string',
                                        ApiBase::PROP_NULLABLE => true
                                ),
-                               'texthidden' => 'boolean'
+                               'texthidden' => 'boolean',
+                               'textmissing' => 'boolean',
                        ),
                        'contentmodel' => array(
                                'contentmodel' => 'string'
@@ -847,8 +854,4 @@ class ApiQueryRevisions extends ApiQueryBase {
        public function getHelpUrls() {
                return 'https://www.mediawiki.org/wiki/API:Properties#revisions_.2F_rv';
        }
-
-       public function getVersion() {
-               return __CLASS__ . ': $Id$';
-       }
 }
index 364433d..8618339 100644 (file)
@@ -168,7 +168,7 @@ class ApiQuerySearch extends ApiQueryGeneratorBase {
                                        }
                                }
                                if ( isset( $prop['hasrelated'] ) && $result->hasRelated() ) {
-                                       $vals['hasrelated'] = "";
+                                       $vals['hasrelated'] = '';
                                }
 
                                // Add item to results and see whether it fits
@@ -205,7 +205,7 @@ class ApiQuerySearch extends ApiQueryGeneratorBase {
                                ApiBase::PARAM_REQUIRED => true
                        ),
                        'namespace' => array(
-                               ApiBase::PARAM_DFLT => 0,
+                               ApiBase::PARAM_DFLT => NS_MAIN,
                                ApiBase::PARAM_TYPE => 'namespace',
                                ApiBase::PARAM_ISMULTI => true,
                        ),
@@ -359,8 +359,4 @@ class ApiQuerySearch extends ApiQueryGeneratorBase {
        public function getHelpUrls() {
                return 'https://www.mediawiki.org/wiki/API:Search';
        }
-
-       public function getVersion() {
-               return __CLASS__ . ': $Id$';
-       }
 }
index bb22448..3b4220c 100644 (file)
@@ -120,7 +120,7 @@ class ApiQuerySiteinfo extends ApiQueryBase {
                $data['sitename'] = $GLOBALS['wgSitename'];
                $data['generator'] = "MediaWiki {$GLOBALS['wgVersion']}";
                $data['phpversion'] = phpversion();
-               $data['phpsapi'] = php_sapi_name();
+               $data['phpsapi'] = PHP_SAPI;
                $data['dbtype'] = $GLOBALS['wgDBtype'];
                $data['dbversion'] = $this->getDB()->getServerVersion();
 
@@ -462,7 +462,7 @@ class ApiQuerySiteinfo extends ApiQueryBase {
                                }
                                if ( isset( $ext['author'] ) ) {
                                        $ret['author'] = is_array( $ext['author'] ) ?
-                                               implode( ', ', $ext['author' ] ) : $ext['author'];
+                                               implode( ', ', $ext['author'] ) : $ext['author'];
                                }
                                if ( isset( $ext['url'] ) ) {
                                        $ret['url'] = $ext['url'];
@@ -559,7 +559,7 @@ class ApiQuerySiteinfo extends ApiQueryBase {
                ksort( $myWgHooks );
 
                $data = array();
-               foreach ( $myWgHooks as $hook => $hooks )  {
+               foreach ( $myWgHooks as $hook => $hooks ) {
                        $arr = array(
                                'name' => $hook,
                                'subscribers' => array_map( array( 'SpecialVersion', 'arrayToString' ), $hooks ),
@@ -667,8 +667,4 @@ class ApiQuerySiteinfo extends ApiQueryBase {
        public function getHelpUrls() {
                return 'https://www.mediawiki.org/wiki/API:Meta#siteinfo_.2F_si';
        }
-
-       public function getVersion() {
-               return __CLASS__ . ': $Id$';
-       }
 }
index a310d10..7128920 100644 (file)
@@ -138,9 +138,4 @@ class ApiQueryStashImageInfo extends ApiQueryImageInfo {
                );
        }
 
-       public function getVersion() {
-               return __CLASS__ . ': $Id$';
-       }
-
 }
-
index de30d06..e0637ff 100644 (file)
@@ -195,8 +195,4 @@ class ApiQueryTags extends ApiQueryBase {
                        'api.php?action=query&list=tags&tgprop=displayname|description|hitcount'
                );
        }
-
-       public function getVersion() {
-               return __CLASS__ . ': $Id$';
-       }
 }
index f30b132..2410f05 100644 (file)
@@ -160,10 +160,7 @@ class ApiQueryContributions extends ApiQueryBase {
                // Handle continue parameter
                if ( $this->multiUserMode && !is_null( $this->params['continue'] ) ) {
                        $continue = explode( '|', $this->params['continue'] );
-                       if ( count( $continue ) != 2 ) {
-                               $this->dieUsage( 'Invalid continue param. You should pass the original ' .
-                                       'value returned by the previous query', '_badcontinue' );
-                       }
+                       $this->dieContinueUsageIf( count( $continue ) != 2 );
                        $db = $this->getDB();
                        $encUser = $db->addQuotes( $continue[0] );
                        $encTS = $db->addQuotes( $db->timestamp( $continue[1] ) );
@@ -223,7 +220,7 @@ 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' );
                        }
@@ -546,8 +543,4 @@ class ApiQueryContributions extends ApiQueryBase {
        public function getHelpUrls() {
                return 'https://www.mediawiki.org/wiki/API:Usercontribs';
        }
-
-       public function getVersion() {
-               return __CLASS__ . ': $Id$';
-       }
 }
index 6690665..963c8f8 100644 (file)
@@ -303,8 +303,4 @@ class ApiQueryUserInfo extends ApiQueryBase {
        public function getHelpUrls() {
                return 'https://www.mediawiki.org/wiki/API:Meta#userinfo_.2F_ui';
        }
-
-       public function getVersion() {
-               return __CLASS__ . ': $Id$';
-       }
 }
index edcbc1a..50ea587 100644 (file)
@@ -124,7 +124,7 @@ class ApiQueryUsers extends ApiQueryBase {
                                $this->addWhereFld( 'user_name', $goodNames );
                                $this->addTables( 'user_groups' );
                                $this->addJoinConds( array( 'user_groups' => array( 'INNER JOIN', 'ug_user=user_id' ) ) );
-                               $this->addFields( array('user_name', 'ug_group') );
+                               $this->addFields( array( 'user_name', 'ug_group' ) );
                                $userGroupsRes = $this->select( __METHOD__ );
 
                                foreach( $userGroupsRes as $row ) {
@@ -161,7 +161,7 @@ class ApiQueryUsers extends ApiQueryBase {
                                }
 
                                if ( isset( $this->prop['implicitgroups'] ) ) {
-                                       $data[$name]['implicitgroups'] =  $user->getAutomaticGroups();
+                                       $data[$name]['implicitgroups'] = $user->getAutomaticGroups();
                                }
 
                                if ( isset( $this->prop['rights'] ) ) {
@@ -396,8 +396,4 @@ class ApiQueryUsers extends ApiQueryBase {
        public function getHelpUrls() {
                return 'https://www.mediawiki.org/wiki/API:Users';
        }
-
-       public function getVersion() {
-               return __CLASS__ . ': $Id$';
-       }
 }
index a1a3372..dd50624 100644 (file)
@@ -116,7 +116,7 @@ class ApiQueryWatchlist extends ApiQueryGeneratorBase {
                ) );
 
                $userId = $user->getId();
-               $this->addJoinConds( array( 'watchlist' => array('INNER JOIN',
+               $this->addJoinConds( array( 'watchlist' => array( 'INNER JOIN',
                        array(
                                'wl_user' => $userId,
                                'wl_namespace=rc_namespace',
@@ -518,8 +518,4 @@ class ApiQueryWatchlist extends ApiQueryGeneratorBase {
        public function getHelpUrls() {
                return 'https://www.mediawiki.org/wiki/API:Watchlist';
        }
-
-       public function getVersion() {
-               return __CLASS__ . ': $Id$';
-       }
 }
index 6b24aef..2cb4d9e 100644 (file)
@@ -71,11 +71,9 @@ class ApiQueryWatchlistRaw extends ApiQueryGeneratorBase {
 
                if ( isset( $params['continue'] ) ) {
                        $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" );
-                       }
+                       $this->dieContinueUsageIf( count( $cont ) != 2 );
                        $ns = intval( $cont[0] );
+                       $this->dieContinueUsageIf( strval( $ns ) !== $cont[0] );
                        $title = $this->getDB()->addQuotes( $cont[1] );
                        $op = $params['dir'] == 'ascending' ? '>' : '<';
                        $this->addWhere(
@@ -224,8 +222,4 @@ class ApiQueryWatchlistRaw extends ApiQueryGeneratorBase {
                        'api.php?action=query&generator=watchlistraw&gwrshow=changed&prop=revisions',
                );
        }
-
-       public function getVersion() {
-               return __CLASS__ . ': $Id$';
-       }
 }
index 91e2081..5f752b3 100644 (file)
@@ -367,8 +367,4 @@ class ApiResult extends ApiBase {
        public function execute() {
                ApiBase::dieDebug( __METHOD__, 'execute() is not supported on Result object' );
        }
-
-       public function getVersion() {
-               return __CLASS__ . ': $Id$';
-       }
 }
index 677df16..6e55a5e 100644 (file)
  */
 class ApiRollback extends ApiBase {
 
-       public function __construct( $main, $action ) {
-               parent::__construct( $main, $action );
-       }
-
        /**
         * @var Title
         */
@@ -205,8 +201,4 @@ class ApiRollback extends ApiBase {
        public function getHelpUrls() {
                return 'https://www.mediawiki.org/wiki/API:Rollback';
        }
-
-       public function getVersion() {
-               return __CLASS__ . ': $Id$';
-       }
 }
index f0e1fad..c4a1328 100644 (file)
  */
 class ApiRsd extends ApiBase {
 
-       public function __construct( $main, $action ) {
-               parent::__construct( $main, $action );
-       }
-
        public function execute() {
                $result = $this->getResult();
 
@@ -155,10 +151,6 @@ class ApiRsd extends ApiBase {
                }
                return $outputData;
        }
-
-       public function getVersion() {
-               return __CLASS__ . ': $Id$';
-       }
 }
 
 class ApiFormatXmlRsd extends ApiFormatXml {
@@ -170,8 +162,4 @@ class ApiFormatXmlRsd extends ApiFormatXml {
        public function getMimeType() {
                return 'application/rsd+xml';
        }
-
-       public function getVersion() {
-               return __CLASS__ . ': $Id$';
-       }
 }
index 098b1a6..7a47a0c 100644 (file)
  */
 class ApiSetNotificationTimestamp extends ApiBase {
 
-       public function __construct( $main, $action ) {
-               parent::__construct( $main, $action );
-       }
-
        public function execute() {
                $user = $this->getUser();
 
@@ -49,7 +45,7 @@ class ApiSetNotificationTimestamp extends ApiBase {
                $args = array_merge( array( $params, 'entirewatchlist' ), array_keys( $pageSet->getAllowedParams() ) );
                call_user_func_array( array( $this, 'requireOnlyOneParameter' ), $args );
 
-               $dbw = $this->getDB( DB_MASTER );
+               $dbw = wfGetDB( DB_MASTER, 'api' );
 
                $timestamp = null;
                if ( isset( $params['timestamp'] ) ) {
@@ -278,8 +274,4 @@ class ApiSetNotificationTimestamp extends ApiBase {
        public function getHelpUrls() {
                return 'https://www.mediawiki.org/wiki/API:SetNotificationTimestamp';
        }
-
-       public function getVersion() {
-               return __CLASS__ . ': $Id$';
-       }
 }
index 2c9b482..518bfce 100644 (file)
  */
 class ApiTokens extends ApiBase {
 
-       public function __construct( $main, $action ) {
-               parent::__construct( $main, $action );
-       }
-
        public function execute() {
                wfProfileIn( __METHOD__ );
                $params = $this->extractRequestParams();
@@ -151,8 +147,4 @@ class ApiTokens extends ApiBase {
                        'api.php?action=tokens&type=email|move' => 'Retrieve an email token and a move token'
                );
        }
-
-       public function getVersion() {
-               return __CLASS__ . ': $Id$';
-       }
 }
index e34771f..bc7f6e7 100644 (file)
  */
 class ApiUnblock extends ApiBase {
 
-       public function __construct( $main, $action ) {
-               parent::__construct( $main, $action );
-       }
-
        /**
         * Unblocks the specified user or provides the reason the unblock failed.
         */
@@ -178,8 +174,4 @@ class ApiUnblock extends ApiBase {
        public function getHelpUrls() {
                return 'https://www.mediawiki.org/wiki/API:Block';
        }
-
-       public function getVersion() {
-               return __CLASS__ . ': $Id$';
-       }
 }
index 2ee8641..f53f065 100644 (file)
  */
 class ApiUndelete extends ApiBase {
 
-       public function __construct( $main, $action ) {
-               parent::__construct( $main, $action );
-       }
-
        public function execute() {
                $params = $this->extractRequestParams();
 
@@ -176,8 +172,4 @@ class ApiUndelete extends ApiBase {
        public function getHelpUrls() {
                return 'https://www.mediawiki.org/wiki/API:Undelete';
        }
-
-       public function getVersion() {
-               return __CLASS__ . ': $Id$';
-       }
 }
index 89eff2e..2627396 100644 (file)
@@ -36,10 +36,6 @@ class ApiUpload extends ApiBase {
 
        protected $mParams;
 
-       public function __construct( $main, $action ) {
-               parent::__construct( $main, $action );
-       }
-
        public function execute() {
                // Check whether upload is enabled
                if ( !UploadBase::isEnabled() ) {
@@ -51,6 +47,9 @@ class ApiUpload extends ApiBase {
                // Parameter handling
                $this->mParams = $this->extractRequestParams();
                $request = $this->getMain()->getRequest();
+               // Check if async mode is actually supported
+               $this->mParams['async'] = ( $this->mParams['async'] && !wfIsWindows() );
+               $this->mParams['async'] = false; // XXX: disabled per bug 44080
                // Add the uploaded file to the params array
                $this->mParams['file'] = $request->getFileName( 'file' );
                $this->mParams['chunk'] = $request->getFileName( 'chunk' );
@@ -62,17 +61,15 @@ class ApiUpload extends ApiBase {
 
                // Select an upload module
                if ( !$this->selectUploadModule() ) {
-                       // This is not a true upload, but a status request or similar
-                       return;
-               }
-               if ( !isset( $this->mUpload ) ) {
+                       return; // not a true upload, but a status request or similar
+               } elseif ( !isset( $this->mUpload ) ) {
                        $this->dieUsage( 'No upload module set', 'nomodule' );
                }
 
                // First check permission to upload
                $this->checkPermissions( $user );
 
-               // Fetch the file
+               // Fetch the file (usually a no-op)
                $status = $this->mUpload->fetchFile();
                if ( !$status->isGood() ) {
                        $errors = $status->getErrorsArray();
@@ -89,6 +86,8 @@ class ApiUpload extends ApiBase {
                        if ( !$this->mUpload->getTitle() ) {
                                $this->dieUsage( 'Invalid file title supplied', 'internal-error' );
                        }
+               } elseif ( $this->mParams['async'] ) {
+                       // defer verification to background process
                } else {
                        $this->verifyUpload();
                }
@@ -96,15 +95,15 @@ class ApiUpload extends ApiBase {
                // Check if the user has the rights to modify or overwrite the requested title
                // (This check is irrelevant if stashing is already requested, since the errors
                //  can always be fixed by changing the title)
-               if ( ! $this->mParams['stash'] ) {
+               if ( !$this->mParams['stash'] ) {
                        $permErrors = $this->mUpload->verifyTitlePermissions( $user );
                        if ( $permErrors !== true ) {
                                $this->dieRecoverableError( $permErrors[0], 'filename' );
                        }
                }
+
                // Get the result based on the current upload context:
                $result = $this->getContextResult();
-
                if ( $result['result'] === 'Success' ) {
                        $result['imageinfo'] = $this->mUpload->getImageInfo( $this->getResult() );
                }
@@ -119,7 +118,7 @@ class ApiUpload extends ApiBase {
         * Get an uplaod result based on upload context
         * @return array
         */
-       private function getContextResult(){
+       private function getContextResult() {
                $warnings = $this->getApiWarnings();
                if ( $warnings && !$this->mParams['ignorewarnings'] ) {
                        // Get warnings formated in result array format
@@ -135,12 +134,13 @@ class ApiUpload extends ApiBase {
                // performUpload will return a formatted properly for the API with status
                return $this->performUpload( $warnings );
        }
+
        /**
         * Get Stash Result, throws an expetion if the file could not be stashed.
         * @param $warnings array Array of Api upload warnings
         * @return array
         */
-       private function getStashResult( $warnings ){
+       private function getStashResult( $warnings ) {
                $result = array ();
                // Some uploads can request they be stashed, so as not to publish them immediately.
                // In this case, a failure to stash ought to be fatal
@@ -156,12 +156,13 @@ class ApiUpload extends ApiBase {
                }
                return $result;
        }
+
        /**
         * Get Warnings Result
         * @param $warnings array Array of Api upload warnings
         * @return array
         */
-       private function getWarningsResult( $warnings ){
+       private function getWarningsResult( $warnings ) {
                $result = array();
                $result['result'] = 'Warning';
                $result['warnings'] = $warnings;
@@ -175,6 +176,7 @@ class ApiUpload extends ApiBase {
                }
                return $result;
        }
+
        /**
         * Get the result of a chunk upload.
         * @param $warnings array Array of Api upload warnings
@@ -192,7 +194,7 @@ class ApiUpload extends ApiBase {
                $request = $this->getMain()->getRequest();
                $chunkPath = $request->getFileTempname( 'chunk' );
                $chunkSize = $request->getUpload( 'chunk' )->getSize();
-               if ($this->mParams['offset'] == 0) {
+               if ( $this->mParams['offset'] == 0 ) {
                        $result['filekey'] = $this->performStash();
                } else {
                        $status = $this->mUpload->addChunk(
@@ -206,7 +208,7 @@ class ApiUpload extends ApiBase {
                        if( $this->mParams['offset'] + $chunkSize == $this->mParams['filesize'] ) {
                                if ( $this->mParams['async'] && !wfIsWindows() ) {
                                        $progress = UploadBase::getSessionStatus( $this->mParams['filekey'] );
-                                       if ( $progress && $progress['result'] !== 'Failed' ) {
+                                       if ( $progress && $progress['result'] === 'Poll' ) {
                                                $this->dieUsage( "Chunk assembly already in progress.", 'stashfailed' );
                                        }
                                        UploadBase::setSessionStatus(
@@ -218,6 +220,7 @@ class ApiUpload extends ApiBase {
                                        $cmd = wfShellWikiCmd(
                                                "$IP/includes/upload/AssembleUploadChunks.php",
                                                array(
+                                                       '--wiki', wfWikiID(),
                                                        '--filename', $this->mParams['filename'],
                                                        '--filekey', $this->mParams['filekey'],
                                                        '--userid', $this->getUser()->getId(),
@@ -225,7 +228,9 @@ class ApiUpload extends ApiBase {
                                                        '--quiet'
                                                )
                                        ) . " < " . wfGetNull() . " > " . wfGetNull() . " 2>&1 &";
-                                       wfShellExec( $cmd, $retVal ); // start a process in the background
+                                       // Start a process in the background. Enforce the time limits via PHP
+                                       // since ulimit4.sh seems to often not work for this particular usage.
+                                       wfShellExec( $cmd, $retVal, array(), array( 'time' => 0, 'memory' => 0 ) );
                                        if ( $retVal == 0 ) {
                                                $result['result'] = 'Poll';
                                        } else {
@@ -241,7 +246,7 @@ class ApiUpload extends ApiBase {
                                        }
 
                                        // We have a new filekey for the fully concatenated file.
-                                       $result['filekey'] =  $this->mUpload->getLocalFile()->getFileKey();
+                                       $result['filekey'] = $this->mUpload->getLocalFile()->getFileKey();
 
                                        // Remove chunk from stash. (Checks against user ownership of chunks.)
                                        $this->mUpload->stash->removeFile( $this->mParams['filekey'] );
@@ -263,7 +268,7 @@ class ApiUpload extends ApiBase {
         * @throws MWException
         * @return String file key
         */
-       function performStash() {
+       private function performStash() {
                try {
                        $stashFile = $this->mUpload->stashFile();
 
@@ -288,7 +293,7 @@ class ApiUpload extends ApiBase {
         * @param $data array Optional extra data to pass to the user
         * @throws UsageException
         */
-       function dieRecoverableError( $error, $parameter, $data = array() ) {
+       private function dieRecoverableError( $error, $parameter, $data = array() ) {
                try {
                        $data['filekey'] = $this->performStash();
                        $data['sessionkey'] = $data['filekey'];
@@ -317,6 +322,7 @@ class ApiUpload extends ApiBase {
                                'filekey', 'file', 'url', 'statuskey' );
                }
 
+               // Status report for "upload to stash"/"upload from stash"
                if ( $this->mParams['filekey'] && $this->mParams['checkstatus'] ) {
                        $progress = UploadBase::getSessionStatus( $this->mParams['filekey'] );
                        if ( !$progress ) {
@@ -324,6 +330,9 @@ class ApiUpload extends ApiBase {
                        } elseif ( !$progress['status']->isGood() ) {
                                $this->dieUsage( $progress['status']->getWikiText(), 'stashfailed' );
                        }
+                       if ( isset( $progress['status']->value['verification'] ) ) {
+                               $this->checkVerification( $progress['status']->value['verification'] );
+                       }
                        unset( $progress['status'] ); // remove Status object
                        $this->getResult()->addValue( null, $this->getModuleName(), $progress );
                        return false;
@@ -353,7 +362,7 @@ class ApiUpload extends ApiBase {
                if ( $this->mParams['chunk'] ) {
                        // Chunk upload
                        $this->mUpload = new UploadFromChunks();
-                       if( isset( $this->mParams['filekey'] ) ){
+                       if( isset( $this->mParams['filekey'] ) ) {
                                // handle new chunk
                                $this->mUpload->continueChunks(
                                        $this->mParams['filename'],
@@ -374,8 +383,11 @@ class ApiUpload extends ApiBase {
                        }
 
                        $this->mUpload = new UploadFromStash( $this->getUser() );
-
-                       $this->mUpload->initialize( $this->mParams['filekey'], $this->mParams['filename'] );
+                       // This will not download the temp file in initialize() in async mode.
+                       // We still have enough information to call checkWarnings() and such.
+                       $this->mUpload->initialize(
+                               $this->mParams['filekey'], $this->mParams['filename'], !$this->mParams['async']
+                       );
                } elseif ( isset( $this->mParams['file'] ) ) {
                        $this->mUpload = new UploadFromFile();
                        $this->mUpload->initialize(
@@ -437,12 +449,19 @@ class ApiUpload extends ApiBase {
         * Performs file verification, dies on error.
         */
        protected function verifyUpload( ) {
-               global $wgFileExtensions;
-
                $verification = $this->mUpload->verifyUpload( );
                if ( $verification['status'] === UploadBase::OK ) {
                        return;
+               } else {
+                       return $this->checkVerification( $verification );
                }
+       }
+
+       /**
+        * Performs file verification, dies on error.
+        */
+       protected function checkVerification( array $verification ) {
+               global $wgFileExtensions;
 
                // TODO: Move them to ApiBase's message map
                switch( $verification['status'] ) {
@@ -500,7 +519,7 @@ class ApiUpload extends ApiBase {
                                break;
                        default:
                                $this->dieUsage( 'An unknown error occurred', 'unknown-error',
-                                               0, array( 'code' =>  $verification['status'] ) );
+                                               0, array( 'code' => $verification['status'] ) );
                                break;
                }
        }
@@ -552,6 +571,8 @@ class ApiUpload extends ApiBase {
         * @return array
         */
        protected function performUpload( $warnings ) {
+               global $IP;
+
                // Use comment as initial page text by default
                if ( is_null( $this->mParams['text'] ) ) {
                        $this->mParams['text'] = $this->mParams['comment'];
@@ -566,29 +587,63 @@ class ApiUpload extends ApiBase {
                }
 
                // No errors, no warnings: do the upload
-               $status = $this->mUpload->performUpload( $this->mParams['comment'],
-                       $this->mParams['text'], $watch, $this->getUser() );
-
-               if ( !$status->isGood() ) {
-                       $error = $status->getErrorsArray();
-
-                       if ( count( $error ) == 1 && $error[0][0] == 'async' ) {
-                               // The upload can not be performed right now, because the user
-                               // requested so
-                               return array(
-                                       'result' => 'Queued',
-                                       'statuskey' => $error[0][1],
-                               );
+               if ( $this->mParams['async'] ) {
+                       $progress = UploadBase::getSessionStatus( $this->mParams['filekey'] );
+                       if ( $progress && $progress['result'] === 'Poll' ) {
+                               $this->dieUsage( "Upload from stash already in progress.", 'publishfailed' );
+                       }
+                       UploadBase::setSessionStatus(
+                               $this->mParams['filekey'],
+                               array( 'result' => 'Poll', 'stage' => 'queued', 'status' => Status::newGood() )
+                       );
+                       $retVal = 1;
+                       $cmd = wfShellWikiCmd(
+                               "$IP/includes/upload/PublishStashedFile.php",
+                               array(
+                                       '--wiki', wfWikiID(),
+                                       '--filename', $this->mParams['filename'],
+                                       '--filekey', $this->mParams['filekey'],
+                                       '--userid', $this->getUser()->getId(),
+                                       '--comment', $this->mParams['comment'],
+                                       '--text', $this->mParams['text'],
+                                       '--watch', $watch,
+                                       '--sessionid', session_id(),
+                                       '--quiet'
+                               )
+                       ) . " < " . wfGetNull() . " > " . wfGetNull() . " 2>&1 &";
+                       // Start a process in the background. Enforce the time limits via PHP
+                       // since ulimit4.sh seems to often not work for this particular usage.
+                       wfShellExec( $cmd, $retVal, array(), array( 'time' => 0, 'memory' => 0 ) );
+                       if ( $retVal == 0 ) {
+                               $result['result'] = 'Poll';
                        } else {
-                               $this->getResult()->setIndexedTagName( $error, 'error' );
+                               UploadBase::setSessionStatus( $this->mParams['filekey'], false );
+                               $this->dieUsage(
+                                       "Failed to start PublishStashedFile.php", 'publishfailed' );
+                       }
+               } else {
+                       $status = $this->mUpload->performUpload( $this->mParams['comment'],
+                               $this->mParams['text'], $watch, $this->getUser() );
 
-                               $this->dieUsage( 'An internal error occurred', 'internal-error', 0, $error );
+                       if ( !$status->isGood() ) {
+                               $error = $status->getErrorsArray();
+
+                               if ( count( $error ) == 1 && $error[0][0] == 'async' ) {
+                                       // The upload can not be performed right now, because the user
+                                       // requested so
+                                       return array(
+                                               'result' => 'Queued',
+                                               'statuskey' => $error[0][1],
+                                       );
+                               } else {
+                                       $this->getResult()->setIndexedTagName( $error, 'error' );
+
+                                       $this->dieUsage( 'An internal error occurred', 'internal-error', 0, $error );
+                               }
                        }
+                       $result['result'] = 'Success';
                }
 
-               $file = $this->mUpload->getLocalFile();
-
-               $result['result'] = 'Success';
                $result['filename'] = $file->getName();
                if ( $warnings && count( $warnings ) > 0 ) {
                        $result['warnings'] = $warnings;
@@ -683,7 +738,7 @@ class ApiUpload extends ApiBase {
                        'offset' => 'Offset of chunk in bytes',
                        'filesize' => 'Filesize of entire upload',
 
-                       'async', 'Make potentially large file operations asynchronous when possible',
+                       'async' => 'Make potentially large file operations asynchronous when possible',
                        'asyncdownload' => 'Make fetching a URL asynchronous',
                        'leavemessage' => 'If asyncdownload is used, leave a message on the user talk page if finished',
                        'statuskey' => 'Fetch the upload status for this file key (upload by URL)',
@@ -736,7 +791,7 @@ class ApiUpload extends ApiBase {
                        ' * Have the MediaWiki server fetch a file from a URL, using the "url" parameter',
                        ' * Complete an earlier upload that failed due to warnings, using the "filekey" parameter',
                        'Note that the HTTP POST must be done as a file upload (i.e. using multipart/form-data) when',
-                       'sending the "file".  Also you must get and send an edit token before doing any upload stuff'
+                       'sending the "file". Also you must get and send an edit token before doing any upload stuff'
                );
        }
 
@@ -756,6 +811,7 @@ class ApiUpload extends ApiBase {
                                array( 'code' => 'filename-tooshort', 'info' => 'The filename is too short' ),
                                array( 'code' => 'overwrite', 'info' => 'Overwriting an existing file is not allowed' ),
                                array( 'code' => 'stashfailed', 'info' => 'Stashing temporary file failed' ),
+                               array( 'code' => 'publishfailed', 'info' => 'Publishing of stashed file failed' ),
                                array( 'code' => 'internal-error', 'info' => 'An internal error occurred' ),
                                array( 'code' => 'asynccopyuploaddisabled', 'info' => 'Asynchronous copy uploads disabled' ),
                                array( 'fileexists-forbidden' ),
@@ -784,8 +840,4 @@ class ApiUpload extends ApiBase {
        public function getHelpUrls() {
                return 'https://www.mediawiki.org/wiki/API:Upload';
        }
-
-       public function getVersion() {
-               return __CLASS__ . ': $Id$';
-       }
 }
index cbb66a4..b9b1eed 100644 (file)
  */
 class ApiUserrights extends ApiBase {
 
-       public function __construct( $main, $action ) {
-               parent::__construct( $main, $action );
-       }
-
        private $mUser = null;
 
        public function execute() {
@@ -141,8 +137,4 @@ class ApiUserrights extends ApiBase {
        public function getHelpUrls() {
                return 'https://www.mediawiki.org/wiki/API:User_group_membership';
        }
-
-       public function getVersion() {
-               return __CLASS__ . ': $Id$';
-       }
 }
index 275275e..2454e33 100644 (file)
  */
 class ApiWatch extends ApiBase {
 
-       public function __construct( $main, $action ) {
-               parent::__construct( $main, $action );
-       }
-
        public function execute() {
                $user = $this->getUser();
                if ( !$user->isLoggedIn() ) {
@@ -151,8 +147,4 @@ class ApiWatch extends ApiBase {
        public function getHelpUrls() {
                return 'https://www.mediawiki.org/wiki/API:Watch';
        }
-
-       public function getVersion() {
-               return __CLASS__ . ': $Id$';
-       }
 }
index 5cdc867..c67b655 100644 (file)
@@ -404,7 +404,7 @@ class GlobalDependency extends CacheDependency {
         * @return bool
         */
        function isExpired() {
-               if( !isset($GLOBALS[$this->name]) ) {
+               if( !isset( $GLOBALS[$this->name] ) ) {
                        return true;
                }
                return $GLOBALS[$this->name] != $this->value;
index 791ae3e..88e7928 100644 (file)
@@ -46,6 +46,8 @@ class HTMLCacheUpdate implements DeferrableUpdate {
        }
 
        public function doUpdate() {
+               global $wgMaxBacklinksInvalidate;
+
                wfProfileIn( __METHOD__ );
 
                $job = new HTMLCacheUpdateJob(
@@ -58,7 +60,9 @@ class HTMLCacheUpdate implements DeferrableUpdate {
                );
 
                $count = $this->mTitle->getBacklinkCache()->getNumLinks( $this->mTable, 200 );
-               if ( $count >= 200 ) { // many backlinks
+               if ( $wgMaxBacklinksInvalidate !== false && $count > $wgMaxBacklinksInvalidate ) {
+                       wfDebug( "Skipped HTML cache invalidation of {$this->mTitle->getPrefixedText()}." );
+               } elseif ( $count >= 200 ) { // many backlinks
                        JobQueueGroup::singleton()->push( $job );
                        JobQueueGroup::singleton()->deduplicateRootJob( $job );
                } else { // few backlinks ($count might be off even if 0)
index fca071a..6476646 100644 (file)
@@ -168,10 +168,10 @@ class HTMLFileCache extends FileCacheBase {
                $now = wfTimestampNow();
                if ( $this->useGzip() ) {
                        $text = str_replace(
-                               '</html>', '<!-- Cached/compressed '.$now." -->\n</html>", $text );
+                               '</html>', '<!-- Cached/compressed ' . $now . " -->\n</html>", $text );
                } else {
                        $text = str_replace(
-                               '</html>', '<!-- Cached '.$now." -->\n</html>", $text );
+                               '</html>', '<!-- Cached ' . $now . " -->\n</html>", $text );
                }
 
                // Store text to FS...
index 7cc1b9c..dc3151e 100644 (file)
@@ -604,7 +604,7 @@ class LocalisationCache {
                                } elseif ( in_array( $key, self::$mergeableAliasListKeys ) ) {
                                        $value = array_merge_recursive( $value, $fallbackValue );
                                } elseif ( in_array( $key, self::$optionalMergeKeys ) ) {
-                                       if ( !empty( $value['inherit'] ) )  {
+                                       if ( !empty( $value['inherit'] ) ) {
                                                $value = array_merge( $fallbackValue, $value );
                                        }
 
index d567035..bd4ce22 100644 (file)
@@ -264,6 +264,8 @@ class MessageCache {
        function load( $code = false ) {
                global $wgUseLocalMessageCache;
 
+               $exception = null; // deferred error
+
                if( !is_string( $code ) ) {
                        # This isn't really nice, so at least make a note about it and try to
                        # fall back
@@ -326,25 +328,30 @@ class MessageCache {
                        $where[] = 'loading from database';
 
                        $this->lock( $cacheKey );
-
                        # Limit the concurrency of loadFromDB to a single process
                        # This prevents the site from going down when the cache expires
                        $statusKey = wfMemcKey( 'messages', $code, 'status' );
                        $success = $this->mMemc->add( $statusKey, 'loading', MSG_LOAD_TIMEOUT );
-                       if ( $success ) {
+                       if ( $success ) { // acquired lock
                                $cache = $this->loadFromDB( $code );
                                $success = $this->setCache( $cache, $code );
-                       }
-                       if ( $success ) {
-                               $success = $this->saveToCaches( $cache, true, $code );
-                               if ( $success ) {
-                                       $this->mMemc->delete( $statusKey );
+                               if ( $success ) { // messages loaded
+                                       $success = $this->saveToCaches( $cache, true, $code );
+                                       if ( $success ) {
+                                               $this->mMemc->delete( $statusKey );
+                                       } else {
+                                               $this->mMemc->set( $statusKey, 'error', 60 * 5 );
+                                               wfDebug( __METHOD__ . ": set() error: restart memcached server!\n" );
+                                               $exception = new MWException( "Could not save cache for '$code'." );
+                                       }
                                } else {
-                                       $this->mMemc->set( $statusKey, 'error', 60 * 5 );
-                                       wfDebug( "MemCached set error in MessageCache: restart memcached server!\n" );
+                                       $this->mMemc->delete( $statusKey );
+                                       $exception = new MWException( "Could not load cache from DB for '$code'." );
                                }
+                       } else {
+                               $exception = new MWException( "Could not acquire '$statusKey' lock." );
                        }
-                       $this->unlock($cacheKey);
+                       $this->unlock( $cacheKey );
                }
 
                if ( !$success ) {
@@ -353,7 +360,11 @@ class MessageCache {
                        // This used to go on, but that led to lots of nasty side
                        // effects like gadgets and sidebar getting cached with their
                        // default content
-                       throw new MWException( "MessageCache failed to load messages" );
+                       if ( $exception instanceof Exception ) {
+                               throw $exception;
+                       } else {
+                               throw new MWException( "MessageCache failed to load messages" );
+                       }
                } else {
                        # All good, just record the success
                        $info = implode( ', ', $where );
@@ -534,7 +545,7 @@ class MessageCache {
                        $serialized = serialize( $cache );
                        $hash = md5( $serialized );
                        $this->mMemc->set( wfMemcKey( 'messages', $code, 'hash' ), $hash, $this->mExpiry );
-                       if ($wgLocalMessageCacheSerialized) {
+                       if ( $wgLocalMessageCacheSerialized ) {
                                $this->saveToLocal( $serialized, $hash, $code );
                        } else {
                                $this->saveToScript( $cache, $hash, $code );
index 6b48fa4..bcc8446 100644 (file)
@@ -65,7 +65,7 @@ class SquidUpdate {
                                'pl_from=page_id' ),
                        __METHOD__ );
                $blurlArr = $title->getSquidURLs();
-               if ( $dbr->numRows( $res ) <= $wgMaxSquidPurgeTitles ) {
+               if ( $res->numRows() <= $wgMaxSquidPurgeTitles ) {
                        foreach ( $res as $BL ) {
                                $tobj = Title::makeTitle( $BL->page_namespace, $BL->page_title ) ;
                                $blurlArr[] = $tobj->getInternalURL();
index 386f55a..7341602 100644 (file)
  *
  * @author Daniel Kinzler
  */
+
+/**
+ * Base implementation for content objects.
+ *
+ * @ingroup Content
+ */
 abstract class AbstractContent implements Content {
 
        /**
@@ -69,7 +75,7 @@ abstract class AbstractContent implements Content {
                if ( $modelId !== $this->model_id ) {
                        throw new MWException(
                                "Bad content model: " .
-                               "expected {$this->model_id}  " .
+                               "expected {$this->model_id} " .
                                "but got $modelId."
                        );
                }
@@ -208,7 +214,7 @@ abstract class AbstractContent implements Content {
         * resulting ParserOutput object.
         *
         * Subclasses may override this to determine the secondary data updates more
-        * efficiently, preferrably without the need to generate a parser output object.
+        * efficiently, preferably without the need to generate a parser output object.
         *
         * @see Content::getSecondaryDataUpdates()
         *
@@ -230,7 +236,7 @@ abstract class AbstractContent implements Content {
                Content $old = null,
                $recursive = true, ParserOutput $parserOutput = null
        ) {
-               if ( !$parserOutput ) {
+               if ( $parserOutput === null ) {
                        $parserOutput = $this->getParserOutput( $title, null, null, false );
                }
 
index 35b51c3..75ac5f2 100644 (file)
  *
  * @author Daniel Kinzler
  */
+
+/**
+ * Base interface for content objects.
+ *
+ * @ingroup Content
+ */
 interface Content {
 
        /**
index cff49df..5e0447f 100644 (file)
@@ -1,7 +1,34 @@
 <?php
+/**
+ * Base class for content handling.
+ *
+ * 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
+ *
+ * @since 1.21
+ *
+ * @file
+ * @ingroup Content
+ *
+ * @author Daniel Kinzler
+ */
 
 /**
  * Exception representing a failure to serialize or unserialize a content object.
+ *
+ * @ingroup Content
  */
 class MWContentSerializationException extends MWException {
 
@@ -24,27 +51,7 @@ class MWContentSerializationException extends MWException {
  * type), but wikitext content may be represented by a DOM or AST structure in
  * the future.
  *
- * 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
- *
- * @since 1.21
- *
- * @file
  * @ingroup Content
- *
- * @author Daniel Kinzler
  */
 abstract class ContentHandler {
 
@@ -406,7 +413,7 @@ abstract class ContentHandler {
         * @param $format null|String The desired serialization format
         * @return string Serialized form of the content
         */
-       public abstract function serializeContent( Content $content, $format = null );
+       abstract public function serializeContent( Content $content, $format = null );
 
        /**
         * Unserializes a Content object of the type supported by this ContentHandler.
@@ -417,7 +424,7 @@ abstract class ContentHandler {
         * @param $format null|String the format used for serialization
         * @return Content the Content object created by deserializing $blob
         */
-       public abstract function unserializeContent( $blob, $format = null );
+       abstract public function unserializeContent( $blob, $format = null );
 
        /**
         * Creates an empty Content object of the type supported by this
@@ -427,7 +434,7 @@ abstract class ContentHandler {
         *
         * @return Content
         */
-       public abstract function makeEmptyContent();
+       abstract public function makeEmptyContent();
 
        /**
         * Creates a new Content object that acts as a redirect to the given page,
@@ -436,6 +443,9 @@ abstract class ContentHandler {
         * This default implementation always returns null. Subclasses supporting redirects
         * must override this method.
         *
+        * Note that subclasses that override this method to return a Content object
+        * should also override supportsRedirects() to return true.
+        *
         * @since 1.21
         *
         * @param Title $destination the page to redirect to.
@@ -778,7 +788,7 @@ abstract class ContentHandler {
         *    boolean false if no revision occurred
         *
         * @XXX &$hasHistory is extremely ugly, it's here because
-        * WikiPage::getAutoDeleteReason() and Article::getReason()
+        * WikiPage::getAutoDeleteReason() and Article::generateReason()
         * have it / want it.
         */
        public function getAutoDeleteReason( Title $title, &$hasHistory ) {
@@ -959,15 +969,30 @@ abstract class ContentHandler {
 
        /**
         * Returns true if this content model supports sections.
-        *
         * This default implementation returns false.
         *
+        * Content models that return true here should also implement
+        * Content::getSection, Content::replaceSection, etc. to handle sections..
+        *
         * @return boolean whether sections are supported.
         */
        public function supportsSections() {
                return false;
        }
 
+       /**
+        * Returns true if this content model supports redirects.
+        * This default implementation returns false.
+        *
+        * Content models that return true here should also implement
+        * ContentHandler::makeRedirectContent to return a Content object.
+        *
+        * @return boolean whether redirects are supported.
+        */
+       public function supportsRedirects() {
+               return false;
+       }
+
        /**
         * Logs a deprecation warning, visible if $wgDevelopmentWarnings, but only if
         * self::$enableDeprecationWarnings is set to true.
@@ -1049,7 +1074,7 @@ 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
@@ -1089,4 +1114,3 @@ abstract class ContentHandler {
                return $ok;
        }
 }
-
index 29527cf..3d4eb24 100644 (file)
@@ -1,5 +1,7 @@
 <?php
 /**
+ * Content object for CSS pages.
+ *
  * 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
  *
  * @author Daniel Kinzler
  */
+
+/**
+ * Content object for CSS pages.
+ *
+ * @ingroup Content
+ */
 class CssContent extends TextContent {
        public function __construct( $text ) {
                parent::__construct( $text, CONTENT_MODEL_CSS );
index 2c68d2f..cb5a349 100644 (file)
@@ -1,5 +1,7 @@
 <?php
 /**
+ * Content handler for CSS pages.
+ *
  * 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
  * http://www.gnu.org/copyleft/gpl.html
  *
  * @file
+ * @ingroup Content
  */
 
 /**
+ * Content handler for CSS pages.
+ *
  * @since 1.21
+ * @ingroup Content
  */
 class CssContentHandler extends TextContentHandler {
 
index 770f233..7508079 100644 (file)
@@ -1,6 +1,7 @@
 <?php
-
 /**
+ * Content for JavaScript pages.
+ *
  * 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
  *
  * @author Daniel Kinzler
  */
+
+/**
+ * Content for JavaScript pages.
+ *
+ * @ingroup Content
+ */
 class JavaScriptContent extends TextContent {
        public function __construct( $text ) {
                parent::__construct( $text, CONTENT_MODEL_JAVASCRIPT );
@@ -57,4 +64,4 @@ class JavaScriptContent extends TextContent {
 
                return $html;
        }
-}
\ No newline at end of file
+}
index b5b4ee2..33fa917 100644 (file)
@@ -1,5 +1,7 @@
 <?php
 /**
+ * Content handler for JavaScript pages.
+ *
  * 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
  * @file
  */
 
-# XXX: make ScriptContentHandler base class, do highlighting stuff there?
-
 /**
+ * Content handler for JavaScript pages.
+ *
  * @since 1.21
+ * @ingroup Content
+ * @todo make ScriptContentHandler base class, do highlighting stuff there?
  */
 class JavaScriptContentHandler extends TextContentHandler {
 
index d38355d..b36b670 100644 (file)
@@ -1,9 +1,6 @@
 <?php
-
 /**
- * Wrapper allowing us to handle a system message as a Content object. Note that this is generally *not* used
- * to represent content from the MediaWiki namespace, and that there is no MessageContentHandler. MessageContent
- * is just intended as glue for wrapping a message programatically.
+ * Wrapper content object allowing to handle a system message as a Content object.
  *
  * 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
  *
  * @author Daniel Kinzler
  */
+
+/**
+ * Wrapper allowing us to handle a system message as a Content object.
+ * Note that this is generally *not* used to represent content from the
+ * MediaWiki namespace, and that there is no MessageContentHandler.
+ * MessageContent is just intended as glue for wrapping a message programatically.
+ *
+ * @ingroup Content
+ */
 class MessageContent extends AbstractContent {
 
        /**
@@ -149,4 +155,4 @@ class MessageContent extends AbstractContent {
                $po = new ParserOutput( $html );
                return $po;
        }
-}
\ No newline at end of file
+}
index 872738b..0f7a531 100644 (file)
@@ -1,10 +1,7 @@
 <?php
-
 /**
  * Content object implementation for representing flat text.
  *
- * TextContent instances are immutable
- *
  * 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
  *
  * @author Daniel Kinzler
  */
+
+/**
+ * Content object implementation for representing flat text.
+ *
+ * TextContent instances are immutable
+ *
+ * @ingroup Content
+ */
 class TextContent extends AbstractContent {
 
        public function __construct( $text, $model_id = CONTENT_MODEL_TEXT ) {
index 90802f6..e7f41e1 100644 (file)
@@ -1,5 +1,7 @@
 <?php
 /**
+ * Base content handler class for flat text contents.
+ *
  * 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
  * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
  * http://www.gnu.org/copyleft/gpl.html
  *
+ * @since 1.21
+ *
  * @file
+ * @ingroup Content
  */
 
 /**
- * @since 1.21
+ * Base content handler implementation for flat text contents.
+ *
+ * @ingroup Content
  */
 class TextContentHandler extends ContentHandler {
 
index dabb855..89aac20 100644 (file)
@@ -1,5 +1,7 @@
 <?php
 /**
+ * Content object for wiki text pages.
+ *
  * 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
  *
  * @author Daniel Kinzler
  */
+
+/**
+ * Content object for wiki text pages.
+ *
+ * @ingroup Content
+ */
 class WikitextContent extends TextContent {
 
        public function __construct( $text ) {
@@ -233,7 +241,7 @@ class WikitextContent extends TextContent {
                        case 'any':
                                return true;
                        case 'comma':
-                               return strpos( $text,  ',' ) !== false;
+                               return strpos( $text, ',' ) !== false;
                        case 'link':
                                if ( $hasLinks === null ) { # not known, find out
                                        if ( !$title ) {
index 4ec20ef..f78ccbb 100644 (file)
@@ -1,5 +1,7 @@
 <?php
 /**
+ * Content handler for wiki text pages.
+ *
  * 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
  * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
  * http://www.gnu.org/copyleft/gpl.html
  *
+ * @since 1.21
+ *
  * @file
+ * @ingroup Content
  */
 
 /**
- * @since 1.21
+ * Content handler for wiki text pages.
+ *
+ * @ingroup Content
  */
 class WikitextContentHandler extends TextContentHandler {
 
@@ -59,6 +66,17 @@ class WikitextContentHandler extends TextContentHandler {
                return new WikitextContent( $redirectText );
        }
 
+       /**
+        * Returns true because wikitext supports redirects.
+        *
+        * @see ContentHandler::supportsRedirects
+        *
+        * @return boolean whether redirects are supported.
+        */
+       public function supportsRedirects() {
+               return true;
+       }
+
        /**
         * Returns true because wikitext supports sections.
         *
index d5a6d15..4a02f0b 100644 (file)
@@ -28,7 +28,6 @@
  * member variable and provide accessors to it.
  */
 abstract class ContextSource implements IContextSource {
-
        /**
         * @var IContextSource
         */
@@ -42,7 +41,7 @@ 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;
@@ -52,7 +51,7 @@ abstract class ContextSource implements IContextSource {
         * Set the IContextSource object
         *
         * @since 1.18
-        * @param $context IContextSource
+        * @param IContextSource $context
         */
        public function setContext( IContextSource $context ) {
                $this->context = $context;
@@ -107,7 +106,7 @@ abstract class ContextSource implements IContextSource {
         * Get the OutputPage object
         *
         * @since 1.18
-        * @return OutputPage object
+        * @return OutputPage
         */
        public function getOutput() {
                return $this->getContext()->getOutput();
@@ -159,7 +158,7 @@ abstract class ContextSource implements IContextSource {
         * Parameters are the same as wfMessage()
         *
         * @since 1.18
-        * @return Message object
+        * @return Message
         */
        public function msg( /* $args */ ) {
                $args = func_get_args();
index a4e3272..b9a7006 100644 (file)
@@ -30,7 +30,6 @@
  *     a different Title instance set on it.
  */
 class DerivativeContext extends ContextSource {
-
        /**
         * @var WebRequest
         */
@@ -68,7 +67,7 @@ class DerivativeContext extends ContextSource {
 
        /**
         * Constructor
-        * @param $context IContextSource Context to inherit from
+        * @param IContextSource $context Context to inherit from
         */
        public function __construct( IContextSource $context ) {
                $this->setContext( $context );
@@ -77,7 +76,7 @@ class DerivativeContext extends ContextSource {
        /**
         * Set the WebRequest object
         *
-        * @param $r WebRequest object
+        * @param WebRequest $r
         */
        public function setRequest( WebRequest $r ) {
                $this->request = $r;
@@ -99,7 +98,7 @@ class DerivativeContext extends ContextSource {
        /**
         * Set the Title object
         *
-        * @param $t Title object
+        * @param Title $t
         */
        public function setTitle( Title $t ) {
                $this->title = $t;
@@ -140,7 +139,7 @@ class DerivativeContext extends ContextSource {
         * Set the WikiPage object
         *
         * @since 1.19
-        * @param $p WikiPage object
+        * @param WikiPage $p
         */
        public function setWikiPage( WikiPage $p ) {
                $this->wikipage = $p;
@@ -166,7 +165,7 @@ class DerivativeContext extends ContextSource {
        /**
         * Set the OutputPage object
         *
-        * @param $o OutputPage
+        * @param OutputPage $o
         */
        public function setOutput( OutputPage $o ) {
                $this->output = $o;
@@ -175,7 +174,7 @@ class DerivativeContext extends ContextSource {
        /**
         * Get the OutputPage object
         *
-        * @return OutputPage object
+        * @return OutputPage
         */
        public function getOutput() {
                if ( !is_null( $this->output ) ) {
@@ -188,7 +187,7 @@ class DerivativeContext extends ContextSource {
        /**
         * Set the User object
         *
-        * @param $u User
+        * @param User $u
         */
        public function setUser( User $u ) {
                $this->user = $u;
@@ -211,7 +210,7 @@ class DerivativeContext extends ContextSource {
         * Set the Language object
         *
         * @deprecated 1.19 Use setLanguage instead
-        * @param $l Mixed Language instance or language code
+        * @param Language|string $l Language instance or language code
         */
        public function setLang( $l ) {
                wfDeprecated( __METHOD__, '1.19' );
@@ -221,7 +220,7 @@ class DerivativeContext extends ContextSource {
        /**
         * Set the Language object
         *
-        * @param $l Mixed Language instance or language code
+        * @param Language|string $l Language instance or language code
         * @throws MWException
         * @since 1.19
         */
@@ -263,7 +262,7 @@ class DerivativeContext extends ContextSource {
        /**
         * Set the Skin object
         *
-        * @param $s Skin
+        * @param Skin $s
         */
        public function setSkin( Skin $s ) {
                $this->skin = clone $s;
@@ -282,6 +281,4 @@ class DerivativeContext extends ContextSource {
                        return $this->getContext()->getSkin();
                }
        }
-
 }
-
index 476035b..0399081 100644 (file)
@@ -27,7 +27,6 @@
  * Interface for objects which can provide a context on request.
  */
 interface IContextSource {
-
        /**
         * Get the WebRequest object
         *
@@ -66,7 +65,7 @@ interface IContextSource {
        /**
         * Get the OutputPage object
         *
-        * @return OutputPage object
+        * @return OutputPage
         */
        public function getOutput();
 
@@ -103,8 +102,7 @@ interface IContextSource {
        /**
         * Get a Message object with context set
         *
-        * @return Message object
+        * @return Message
         */
        public function msg();
 }
-
index e4de030..96d27b0 100644 (file)
@@ -28,7 +28,6 @@
  * Group all the pieces relevant to the context of a request into one instance
  */
 class RequestContext implements IContextSource {
-
        /**
         * @var WebRequest
         */
@@ -67,7 +66,7 @@ class RequestContext implements IContextSource {
        /**
         * Set the WebRequest object
         *
-        * @param $r WebRequest object
+        * @param WebRequest $r
         */
        public function setRequest( WebRequest $r ) {
                $this->request = $r;
@@ -89,7 +88,7 @@ class RequestContext implements IContextSource {
        /**
         * Set the Title object
         *
-        * @param $t Title object
+        * @param Title $t
         */
        public function setTitle( Title $t ) {
                $this->title = $t;
@@ -137,7 +136,7 @@ class RequestContext implements IContextSource {
         * Set the WikiPage object
         *
         * @since 1.19
-        * @param $p WikiPage object
+        * @param WikiPage $p
         */
        public function setWikiPage( WikiPage $p ) {
                $contextTitle = $this->getTitle();
@@ -180,7 +179,7 @@ class RequestContext implements IContextSource {
        /**
         * Get the OutputPage object
         *
-        * @return OutputPage object
+        * @return OutputPage
         */
        public function getOutput() {
                if ( $this->output === null ) {
@@ -192,7 +191,7 @@ class RequestContext implements IContextSource {
        /**
         * Set the User object
         *
-        * @param $u User
+        * @param User $u
         */
        public function setUser( User $u ) {
                $this->user = $u;
@@ -213,7 +212,7 @@ class RequestContext implements IContextSource {
        /**
         * Accepts a language code and ensures it's sane. Outputs a cleaned up language
         * code and replaces with $wgLanguageCode if not sane.
-        * @param $code string
+        * @param string $code Language code
         * @return string
         */
        public static function sanitizeLangCode( $code ) {
@@ -223,7 +222,7 @@ class RequestContext implements IContextSource {
                $code = strtolower( $code );
 
                # Validate $code
-               if( empty( $code ) || !Language::isValidCode( $code ) || ( $code === 'qqq' ) ) {
+               if ( empty( $code ) || !Language::isValidCode( $code ) || ( $code === 'qqq' ) ) {
                        wfDebug( "Invalid user language code\n" );
                        $code = $wgLanguageCode;
                }
@@ -235,7 +234,7 @@ class RequestContext implements IContextSource {
         * Set the Language object
         *
         * @deprecated 1.19 Use setLanguage instead
-        * @param $l Mixed Language instance or language code
+        * @param Language|string $l Language instance or language code
         */
        public function setLang( $l ) {
                wfDeprecated( __METHOD__, '1.19' );
@@ -245,7 +244,7 @@ class RequestContext implements IContextSource {
        /**
         * Set the Language object
         *
-        * @param $l Mixed Language instance or language code
+        * @param Language|string $l Language instance or language code
         * @throws MWException
         * @since 1.19
         */
@@ -271,36 +270,47 @@ class RequestContext implements IContextSource {
        }
 
        /**
-        * Get the Language object
+        * Get the Language object.
+        * Initialization of user or request objects can depend on this.
         *
         * @return Language
         * @since 1.19
         */
        public function getLanguage() {
+               if ( isset( $this->recursion ) ) {
+                       throw new MWException( 'Recursion detected' );
+               }
+
                if ( $this->lang === null ) {
+                       $this->recursion = true;
+
                        global $wgLanguageCode, $wgContLang;
-                       $code = $this->getRequest()->getVal(
-                               'uselang',
-                               $this->getUser()->getOption( 'language' )
-                       );
+
+                       $request = $this->getRequest();
+                       $user = $this->getUser();
+
+                       $code = $request->getVal( 'uselang', $user->getOption( 'language' ) );
                        $code = self::sanitizeLangCode( $code );
 
-                       wfRunHooks( 'UserGetLanguageObject', array( $this->getUser(), &$code ) );
+                       wfRunHooks( 'UserGetLanguageObject', array( $user, &$code, $this ) );
 
-                       if( $code === $wgLanguageCode ) {
+                       if ( $code === $wgLanguageCode ) {
                                $this->lang = $wgContLang;
                        } else {
                                $obj = Language::factory( $code );
                                $this->lang = $obj;
                        }
+
+                       unset( $this->recursion );
                }
+
                return $this->lang;
        }
 
        /**
         * Set the Skin object
         *
-        * @param $s Skin
+        * @param Skin $s
         */
        public function setSkin( Skin $s ) {
                $this->skin = clone $s;
@@ -322,7 +332,7 @@ class RequestContext implements IContextSource {
                        // If the hook worked try to set a skin from it
                        if ( $skin instanceof Skin ) {
                                $this->skin = $skin;
-                       } elseif ( is_string($skin) ) {
+                       } elseif ( is_string( $skin ) ) {
                                $this->skin = Skin::newFromKey( $skin );
                        }
 
@@ -330,7 +340,7 @@ class RequestContext implements IContextSource {
                        // then go through the normal processing to load a skin
                        if ( $this->skin === null ) {
                                global $wgHiddenPrefs;
-                               if( !in_array( 'skin', $wgHiddenPrefs ) ) {
+                               if ( !in_array( 'skin', $wgHiddenPrefs ) ) {
                                        # get the user skin
                                        $userSkin = $this->getUser()->getOption( 'skin' );
                                        $userSkin = $this->getRequest()->getVal( 'useskin', $userSkin );
@@ -356,7 +366,7 @@ class RequestContext implements IContextSource {
         * Get a Message object with context set
         * Parameters are the same as wfMessage()
         *
-        * @return Message object
+        * @return Message
         */
        public function msg() {
                $args = func_get_args();
@@ -368,7 +378,7 @@ class RequestContext implements IContextSource {
        /**
         * Get the RequestContext object associated with the main request
         *
-        * @return RequestContext object
+        * @return RequestContext
         */
        public static function getMain() {
                static $instance = null;
@@ -388,11 +398,11 @@ class RequestContext implements IContextSource {
         *   language or a uselang param in the fauxrequest data may change the lang
         * - Skin will be based on the anonymous user, should be the wiki's default skin
         *
-        * @param $title Title Title to use for the extraneous request
-        * @param $request Mixed A WebRequest or data to use for a FauxRequest
+        * @param Title $title Title to use for the extraneous request
+        * @param WebRequest|array $request A WebRequest or data to use for a FauxRequest
         * @return RequestContext
         */
-       public static function newExtraneousContext( Title $title, $request=array() ) {
+       public static function newExtraneousContext( Title $title, $request = array() ) {
                $context = new self;
                $context->setTitle( $title );
                if ( $request instanceof WebRequest ) {
@@ -403,5 +413,4 @@ class RequestContext implements IContextSource {
                $context->user = User::newFromName( '127.0.0.1', false );
                return $context;
        }
-
 }
index a27bef5..20cf5b4 100644 (file)
@@ -33,7 +33,7 @@ abstract class DBAccessBase implements IDBAccessObject {
         * @var String|bool $wiki The target wiki's name. This must be an ID
         * that LBFactory can understand.
         */
-       protected $wiki;
+       protected $wiki = false;
 
        /**
         * @param String|bool $wiki The target wiki's name. This must be an ID
index 4ff7913..56717b6 100644 (file)
@@ -100,12 +100,12 @@ class CloneDatabase {
 
                        if( $this->dropCurrentTables && !in_array( $this->db->getType(), array( 'postgres', 'oracle' ) ) ) {
                                $this->db->dropTable( $tbl, __METHOD__ );
-                               wfDebug( __METHOD__." dropping {$newTableName}\n", true);
+                               wfDebug( __METHOD__ . " dropping {$newTableName}\n", true );
                                //Dropping the oldTable because the prefix was changed
                        }
 
                        # Create new table
-                       wfDebug( __METHOD__." duplicating $oldTableName to $newTableName\n", true );
+                       wfDebug( __METHOD__ . " duplicating $oldTableName to $newTableName\n", true );
                        $this->db->duplicateTableStructure( $oldTableName, $newTableName, $this->useTemporaryTables );
                }
        }
index ffc4de0..7e865c1 100644 (file)
@@ -112,8 +112,8 @@ interface DatabaseType {
         * The value inserted should be fetched from nextSequenceValue()
         *
         * Example:
-        * $id = $dbw->nextSequenceValue('page_page_id_seq');
-        * $dbw->insert('page',array('page_id' => $id));
+        * $id = $dbw->nextSequenceValue( 'page_page_id_seq' );
+        * $dbw->insert( 'page', array( 'page_id' => $id ) );
         * $id = $dbw->insertId();
         *
         * @return int
@@ -393,7 +393,7 @@ abstract class DatabaseBase implements DatabaseType {
                return wfSetVar( $this->mTablePrefix, $prefix );
        }
 
-       /**
+       /**
         * Set the filehandle to copy write statements to.
         *
         * @param $fh filehandle
@@ -584,7 +584,7 @@ abstract class DatabaseBase implements DatabaseType {
                global $wgDebugDBTransactions;
                $this->mFlags |= $flag;
                if ( ( $flag & DBO_TRX) & $wgDebugDBTransactions ) {
-                       wfDebug("Implicit transactions are now  disabled.\n");
+                       wfDebug( "Implicit transactions are now  disabled.\n" );
                }
        }
 
@@ -597,7 +597,7 @@ abstract class DatabaseBase implements DatabaseType {
                global $wgDebugDBTransactions;
                $this->mFlags &= ~$flag;
                if ( ( $flag & DBO_TRX ) && $wgDebugDBTransactions ) {
-                       wfDebug("Implicit transactions are now disabled.\n");
+                       wfDebug( "Implicit transactions are now disabled.\n" );
                }
        }
 
@@ -671,12 +671,12 @@ abstract class DatabaseBase implements DatabaseType {
                        if ( $wgCommandLineMode ) {
                                $this->mFlags &= ~DBO_TRX;
                                if ( $wgDebugDBTransactions ) {
-                                       wfDebug("Implicit transaction open disabled.\n");
+                                       wfDebug( "Implicit transaction open disabled.\n" );
                                }
                        } else {
                                $this->mFlags |= DBO_TRX;
                                if ( $wgDebugDBTransactions ) {
-                                       wfDebug("Implicit transaction open enabled.\n");
+                                       wfDebug( "Implicit transaction open enabled.\n" );
                                }
                        }
                }
@@ -724,7 +724,7 @@ abstract class DatabaseBase implements DatabaseType {
         *    Valid options are: host, user, password, dbname, flags, tablePrefix
         * @return DatabaseBase subclass or null
         */
-       public final static function factory( $dbType, $p = array() ) {
+       final public static function factory( $dbType, $p = array() ) {
                $canonicalDBTypes = array(
                        'mysql', 'postgres', 'sqlite', 'oracle', 'mssql', 'ibm_db2'
                );
@@ -772,7 +772,7 @@ abstract class DatabaseBase implements DatabaseType {
         * @param $errno
         * @param $errstr
         */
-       protected function connectionErrorHandler( $errno,  $errstr ) {
+       protected function connectionErrorHandler( $errno, $errstr ) {
                $this->mPHPError = $errstr;
        }
 
@@ -811,7 +811,7 @@ abstract class DatabaseBase implements DatabaseType {
         * @since 1.20
         * @return bool: Whether connection was closed successfully
         */
-       protected abstract function closeConnection();
+       abstract protected function closeConnection();
 
        /**
         * @param $error String: fallback error message, used if none is given by DB
@@ -833,7 +833,7 @@ abstract class DatabaseBase implements DatabaseType {
         * @param  $sql String: SQL query.
         * @return ResultWrapper Result object to feed to fetchObject, fetchRow, ...; or false on failure
         */
-       protected abstract function doQuery( $sql );
+       abstract protected function doQuery( $sql );
 
        /**
         * Determine whether a query writes to the DB.
@@ -921,7 +921,7 @@ abstract class DatabaseBase implements DatabaseType {
                        if ( strpos( $sqlstart, "SHOW " ) !== 0 && strpos( $sqlstart, "SET " ) !== 0 ) {
                                global $wgDebugDBTransactions;
                                if ( $wgDebugDBTransactions ) {
-                                       wfDebug("Implicit transaction start.\n");
+                                       wfDebug( "Implicit transaction start.\n" );
                                }
                                $this->begin( __METHOD__ . " ($fname)" );
                                $this->mTrxAutomatic = true;
@@ -1096,7 +1096,7 @@ abstract class DatabaseBase implements DatabaseType {
                        case '\\&': return '&';
                }
 
-               list( /* $n */ , $arg ) = each( $this->preparedArgs );
+               list( /* $n */, $arg ) = each( $this->preparedArgs );
 
                switch( $matches[1] ) {
                        case '?': return $this->addQuotes( $arg );
@@ -1180,26 +1180,9 @@ abstract class DatabaseBase implements DatabaseType {
                        }
                }
 
-               if ( isset( $options['GROUP BY'] ) ) {
-                       $gb = is_array( $options['GROUP BY'] )
-                               ? implode( ',', $options['GROUP BY'] )
-                               : $options['GROUP BY'];
-                       $preLimitTail .= " GROUP BY {$gb}";
-               }
+               $preLimitTail .= $this->makeGroupByWithHaving( $options );
 
-               if ( isset( $options['HAVING'] ) ) {
-                       $having = is_array( $options['HAVING'] )
-                               ? $this->makeList( $options['HAVING'], LIST_AND )
-                               : $options['HAVING'];
-                       $preLimitTail .= " HAVING {$having}";
-               }
-
-               if ( isset( $options['ORDER BY'] ) ) {
-                       $ob = is_array( $options['ORDER BY'] )
-                               ? implode( ',', $options['ORDER BY'] )
-                               : $options['ORDER BY'];
-                       $preLimitTail .= " ORDER BY {$ob}";
-               }
+               $preLimitTail .= $this->makeOrderBy( $options );
 
                // if (isset($options['LIMIT'])) {
                //      $tailOpts .= $this->limitResult('', $options['LIMIT'],
@@ -1261,6 +1244,49 @@ abstract class DatabaseBase implements DatabaseType {
                return array( $startOpts, $useIndex, $preLimitTail, $postLimitTail );
        }
 
+       /**
+        * Returns an optional GROUP BY with an optional HAVING
+        *
+        * @param $options Array: associative array of options
+        * @return string
+        * @see DatabaseBase::select()
+        * @since 1.21
+        */
+       public function makeGroupByWithHaving( $options ) {
+               $sql = '';
+               if ( isset( $options['GROUP BY'] ) ) {
+                       $gb = is_array( $options['GROUP BY'] )
+                               ? implode( ',', $options['GROUP BY'] )
+                               : $options['GROUP BY'];
+                       $sql .= ' GROUP BY ' . $gb;
+               }
+               if ( isset( $options['HAVING'] ) ) {
+                       $having = is_array( $options['HAVING'] )
+                               ? $this->makeList( $options['HAVING'], LIST_AND )
+                               : $options['HAVING'];
+                       $sql .= ' HAVING ' . $having;
+               }
+               return $sql;
+       }
+
+       /**
+        * Returns an optional ORDER BY
+        *
+        * @param $options Array: associative array of options
+        * @return string
+        * @see DatabaseBase::select()
+        * @since 1.21
+        */
+       public function makeOrderBy( $options ) {
+               if ( isset( $options['ORDER BY'] ) ) {
+                       $ob = is_array( $options['ORDER BY'] )
+                               ? implode( ',', $options['ORDER BY'] )
+                               : $options['ORDER BY'];
+                       return ' ORDER BY ' . $ob;
+               }
+               return '';
+       }
+
        /**
         * Execute a SELECT query constructed using the various parameters provided.
         * See below for full details of the parameters.
@@ -1393,7 +1419,7 @@ abstract class DatabaseBase implements DatabaseType {
         * join, the second is an SQL fragment giving the join condition for that
         * table. For example:
         *
-        *    array( 'page' => array('LEFT JOIN','page_latest=rev_id') )
+        *    array( 'page' => array( 'LEFT JOIN', 'page_latest=rev_id' ) )
         *
         * @return ResultWrapper. If the query returned no rows, a ResultWrapper
         *   with no rows in it will be returned. If there was a query error, a
@@ -2030,47 +2056,39 @@ abstract class DatabaseBase implements DatabaseType {
                # Split database and table into proper variables.
                # We reverse the explode so that database.table and table both output
                # the correct table.
-               $dbDetails = array_reverse( explode( '.', $name, 2 ) );
-               if ( isset( $dbDetails[1] ) ) {
-                       list( $table, $database ) = $dbDetails;
+               $dbDetails = explode( '.', $name, 2 );
+               if ( count( $dbDetails ) == 2 ) {
+                       list( $database, $table ) = $dbDetails;
+                       # We don't want any prefix added in this case
+                       $prefix = '';
                } else {
                        list( $table ) = $dbDetails;
-               }
-               $prefix = $this->mTablePrefix; # Default prefix
-
-               # A database name has been specified in input. We don't want any
-               # prefixes added.
-               if ( isset( $database ) ) {
-                       $prefix = '';
+                       if ( $wgSharedDB !== null # We have a shared database
+                               && !$this->isQuotedIdentifier( $table ) # Paranoia check to prevent shared tables listing '`table`'
+                               && in_array( $table, $wgSharedTables ) # A shared table is selected
+                       ) {
+                               $database = $wgSharedDB;
+                               $prefix   = $wgSharedPrefix === null ? $this->mTablePrefix : $wgSharedPrefix;
+                       } else {
+                               $database = null;
+                               $prefix = $this->mTablePrefix; # Default prefix
+                       }
                }
 
-               # Note that we use the long format because php will complain in in_array if
-               # the input is not an array, and will complain in is_array if it is not set.
-               if ( !isset( $database ) # Don't use shared database if pre selected.
-                && isset( $wgSharedDB ) # We have a shared database
-                && !$this->isQuotedIdentifier( $table ) # Paranoia check to prevent shared tables listing '`table`'
-                && isset( $wgSharedTables )
-                && is_array( $wgSharedTables )
-                && in_array( $table, $wgSharedTables ) ) { # A shared table is selected
-                       $database = $wgSharedDB;
-                       $prefix   = isset( $wgSharedPrefix ) ? $wgSharedPrefix : $prefix;
+               # Quote $table and apply the prefix if not quoted.
+               $tableName = "{$prefix}{$table}";
+               if ( $format == 'quoted' && !$this->isQuotedIdentifier( $tableName ) ) {
+                       $tableName = $this->addIdentifierQuotes( $tableName );
                }
 
-               # Quote the $database and $table and apply the prefix if not quoted.
-               if ( isset( $database ) ) {
+               # Quote $database and merge it with the table name if needed
+               if ( $database !== null ) {
                        if ( $format == 'quoted' && !$this->isQuotedIdentifier( $database ) ) {
                                $database = $this->addIdentifierQuotes( $database );
                        }
+                       $tableName = $database . '.' . $tableName;
                }
 
-               $table = "{$prefix}{$table}";
-               if ( $format == 'quoted' && !$this->isQuotedIdentifier( $table ) ) {
-                       $table = $this->addIdentifierQuotes( "{$table}" );
-               }
-
-               # Merge our database and table into our final table name.
-               $tableName = ( isset( $database ) ? "{$database}.{$table}" : "{$table}" );
-
                return $tableName;
        }
 
@@ -2079,7 +2097,7 @@ abstract class DatabaseBase implements DatabaseType {
         * This is handy when you need to construct SQL for joins
         *
         * Example:
-        * extract($dbr->tableNames('user','watchlist'));
+        * extract( $dbr->tableNames( 'user', 'watchlist' ) );
         * $sql = "SELECT wl_namespace,wl_title FROM $watchlist,$user
         *         WHERE wl_user=user_id AND wl_user=$nameWithQuotes";
         *
@@ -2101,7 +2119,7 @@ abstract class DatabaseBase implements DatabaseType {
         * This is handy when you need to construct SQL for joins
         *
         * Example:
-        * list( $user, $watchlist ) = $dbr->tableNamesN('user','watchlist');
+        * list( $user, $watchlist ) = $dbr->tableNamesN( 'user', 'watchlist' );
         * $sql = "SELECT wl_namespace,wl_title FROM $watchlist,$user
         *         WHERE wl_user=user_id AND wl_user=$nameWithQuotes";
         *
@@ -2593,7 +2611,7 @@ abstract class DatabaseBase implements DatabaseType {
         * @param $fname String name of the calling function
         *
         * @throws DBUnexpectedError
-        * @return bool
+        * @return bool|ResultWrapper
         */
        public function delete( $table, $conds, $fname = 'DatabaseBase::delete' ) {
                if ( !$conds ) {
@@ -2653,7 +2671,7 @@ abstract class DatabaseBase implements DatabaseType {
                list( $startOpts, $useIndex, $tailOpts ) = $this->makeSelectOptions( $selectOptions );
 
                if ( is_array( $srcTable ) ) {
-                       $srcTable =  implode( ',', array_map( array( &$this, 'tableName' ), $srcTable ) );
+                       $srcTable = implode( ',', array_map( array( &$this, 'tableName' ), $srcTable ) );
                } else {
                        $srcTable = $this->tableName( $srcTable );
                }
@@ -3448,7 +3466,7 @@ abstract class DatabaseBase implements DatabaseType {
                        // replace `{$var}`
                        $ins = str_replace( '`{$' . $var . '}`', $this->addIdentifierQuotes( $value ), $ins );
                        // replace /*$var*/
-                       $ins = str_replace( '/*$' . $var . '*/', $this->strencode( $value ) , $ins );
+                       $ins = str_replace( '/*$' . $var . '*/', $this->strencode( $value ), $ins );
                }
                return $ins;
        }
index a53a674..18b2733 100644 (file)
@@ -176,7 +176,7 @@ class DBConnectionError extends DBError {
                return "$text<hr />$extra";
        }
 
-       public function reportHTML(){
+       public function reportHTML() {
                global $wgUseFileCache;
 
                # Check whether we can serve a file-cached copy of the page with the error underneath
@@ -289,10 +289,10 @@ 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" .
-                 "Query: $sql\n" .
-                 "Function: $fname\n" .
-                 "Error: $errno $error\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";
                parent::__construct( $db, $message );
 
                $this->error = $error;
index 880d702..57fc7b9 100644 (file)
@@ -143,13 +143,12 @@ class IBM_DB2Result{
         * @param $sql String
         * @param $columns Array
         */
-       public function __construct( $db, $result, $num_rows, $sql, $columns ){
+       public function __construct( $db, $result, $num_rows, $sql, $columns ) {
                $this->db = $db;
 
-               if( $result instanceof ResultWrapper ){
+               if( $result instanceof ResultWrapper ) {
                        $this->result = $result->result;
-               }
-               else{
+               } else {
                        $this->result = $result;
                }
 
@@ -224,7 +223,7 @@ class IBM_DB2Result{
         * @return mixed Array on success, false on failure
         * @throws DBUnexpectedError
         */
-       public function fetchRow(){
+       public function fetchRow() {
                if ( $this->result
                                && $this->num_rows > 0
                                && $this->current_pos >= 0
@@ -239,7 +238,7 @@ class IBM_DB2Result{
                                }
                        }
 
-                       if ( $this->loadedLines > $this->current_pos ){
+                       if ( $this->loadedLines > $this->current_pos ) {
                                return $this->resultSet[$this->current_pos++];
                        }
 
@@ -251,7 +250,7 @@ class IBM_DB2Result{
         * Free a DB2 result object
         * @throws DBUnexpectedError
         */
-       public function freeResult(){
+       public function freeResult() {
                unset( $this->resultSet );
                if ( !@db2_free_result( $this->result ) ) {
                        throw new DBUnexpectedError( $this, "Unable to free DB2 result\n" );
@@ -420,7 +419,7 @@ class DatabaseIbm_db2 extends DatabaseBase {
         * Returns the database connection object
         * @return Object
         */
-       public function getDb(){
+       public function getDb() {
                return $this->mConn;
        }
 
@@ -788,8 +787,8 @@ class DatabaseIbm_db2 extends DatabaseBase {
                // Wide characters are evil -- some of them look like '
                $s = utf8_encode( $s );
                // Fix its stupidity
-               $from = array(  "\\\\", "\\'",  '\\n',  '\\t',  '\\"',  '\\r' );
-               $to = array(            "\\",           "''",           "\n",           "\t",           '"',            "\r" );
+               $from = array( "\\\\", "\\'", '\\n', '\\t', '\\"', '\\r' );
+               $to = array( "\\", "''", "\n", "\t", '"', "\r" );
                $s = str_replace( $from, $to, $s ); // DB2 expects '', not \' escaping
                return $s;
        }
@@ -1116,10 +1115,10 @@ class DatabaseIbm_db2 extends DatabaseBase {
 
                // find out the primary keys
                $keyres = $this->doQuery( "SELECT NAME FROM SYSIBM.SYSCOLUMNS WHERE TBNAME = '"
-                 . strtoupper( $table )
-                 . "' AND TBCREATOR = '"
-                 . strtoupper( $schema )
-                 . "' AND KEYSEQ > 0" );
+                       . strtoupper( $table )
+                       . "' AND TBCREATOR = '"
+                       . strtoupper( $schema )
+                       . "' AND KEYSEQ > 0" );
 
                $keys = array();
                for (
@@ -1380,15 +1379,9 @@ class DatabaseIbm_db2 extends DatabaseBase {
                        }
                }
 
-               if ( isset( $options['GROUP BY'] ) ) {
-                       $preLimitTail .= " GROUP BY {$options['GROUP BY']}";
-               }
-               if ( isset( $options['HAVING'] ) ) {
-                       $preLimitTail .= " HAVING {$options['HAVING']}";
-               }
-               if ( isset( $options['ORDER BY'] ) ) {
-                       $preLimitTail .= " ORDER BY {$options['ORDER BY']}";
-               }
+               $preLimitTail .= $this->makeGroupByWithHaving( $options );
+
+               $preLimitTail .= $this->makeOrderBy( $options );
 
                if ( isset( $noKeyOptions['DISTINCT'] )
                        || isset( $noKeyOptions['DISTINCTROW'] ) )
index 317ff09..57ffd4f 100644 (file)
@@ -102,7 +102,7 @@ class DatabaseMssql extends DatabaseBase {
                $ntAuthPassTest = strtolower( $password );
 
                // Decide which auth scenerio to use
-               if( $ntAuthPassTest == 'ntauth' && $ntAuthUserTest == 'ntauth' ){
+               if( $ntAuthPassTest == 'ntauth' && $ntAuthUserTest == 'ntauth' ) {
                        // Don't add credentials to $connectionInfo
                } else {
                        $connectionInfo['UID'] = $user;
@@ -156,7 +156,7 @@ 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)
@@ -319,7 +319,7 @@ class DatabaseMssql extends DatabaseBase {
                if ( isset( $options['EXPLAIN'] ) ) {
                        unset( $options['EXPLAIN'] );
                }
-               return parent::selectSQLText(  $table, $vars, $conds, $fname, $options, $join_conds );
+               return parent::selectSQLText( $table, $vars, $conds, $fname, $options, $join_conds );
        }
 
        /**
@@ -414,7 +414,7 @@ class DatabaseMssql extends DatabaseBase {
                $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}'" );
-               if( $res && $res->numrows() ){
+               if( $res && $res->numrows() ) {
                        // There is an identity for this table.
                        $identity = array_pop( $res->fetch( SQLSRV_FETCH_ASSOC ) );
                }
@@ -431,7 +431,7 @@ class DatabaseMssql extends DatabaseBase {
                                // iterate through
                                foreach ($a as $k => $v ) {
                                        if ( $k == $identity ) {
-                                               if( !is_null($v) ){
+                                               if( !is_null($v) ) {
                                                        // 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;";
@@ -484,7 +484,7 @@ class DatabaseMssql extends DatabaseBase {
                                } elseif ( is_array( $value ) || is_object( $value ) ) {
                                        if ( is_object( $value ) && strtolower( get_class( $value ) ) == 'blob' ) {
                                                $sql .= $this->addQuotes( $value );
-                                       }  else {
+                                       } else {
                                                $sql .= $this->addQuotes( serialize( $value ) );
                                        }
                                } else {
@@ -608,9 +608,9 @@ class DatabaseMssql extends DatabaseBase {
                } else {
                        $sql = '
                                SELECT * FROM (
-                                 SELECT sub2.*, ROW_NUMBER() OVER(ORDER BY sub2.line2) AS line3 FROM (
-                                       SELECT 1 AS line2, sub1.* FROM (' . $sql . ') AS sub1
-                                 ) as sub2
+                                       SELECT sub2.*, ROW_NUMBER() OVER(ORDER BY sub2.line2) AS line3 FROM (
+                                               SELECT 1 AS line2, sub1.* FROM (' . $sql . ') AS sub1
+                                       ) as sub2
                                ) AS sub3
                                WHERE line3 BETWEEN ' . ( $offset + 1 ) . ' AND ' . ( $offset + $limit );
                        return $sql;
@@ -770,17 +770,17 @@ class DatabaseMssql extends DatabaseBase {
                $newUser = $this->escapeIdentifier( $newUser );
                $loginPassword = $this->addQuotes( $loginPassword );
 
-               $this->doQuery("CREATE DATABASE $dbName;");
-               $this->doQuery("USE $dbName;");
-               $this->doQuery("CREATE SCHEMA $dbName;");
-               $this->doQuery("
+               $this->doQuery( "CREATE DATABASE $dbName;" );
+               $this->doQuery( "USE $dbName;" );
+               $this->doQuery( "CREATE SCHEMA $dbName;" );
+               $this->doQuery( "
                                                CREATE
                                                        LOGIN $newUser
                                                WITH
                                                        PASSWORD=$loginPassword
                                                ;
-                                       ");
-               $this->doQuery("
+                                       " );
+               $this->doQuery( "
                                                CREATE
                                                        USER $newUser
                                                FOR
@@ -788,8 +788,8 @@ class DatabaseMssql extends DatabaseBase {
                                                WITH
                                                        DEFAULT_SCHEMA=$dbName
                                                ;
-                                       ");
-               $this->doQuery("
+                                       " );
+               $this->doQuery( "
                                                GRANT
                                                        BACKUP DATABASE,
                                                        BACKUP LOG,
@@ -804,15 +804,15 @@ class DatabaseMssql extends DatabaseBase {
                                                        DATABASE::$dbName
                                                TO $newUser
                                                ;
-                                       ");
-               $this->doQuery("
+                                       " );
+               $this->doQuery( "
                                                GRANT
                                                        CONTROL
                                                ON
                                                        SCHEMA::$dbName
                                                TO $newUser
                                                ;
-                                       ");
+                                       " );
 
 
        }
@@ -908,29 +908,23 @@ class DatabaseMssql extends DatabaseBase {
                        }
                }
 
-               if ( isset( $options['GROUP BY'] ) ) {
-                       $tailOpts .= " GROUP BY {$options['GROUP BY']}";
-               }
-               if ( isset( $options['HAVING'] ) ) {
-                       $tailOpts .= " HAVING {$options['GROUP BY']}";
-               }
-               if ( isset( $options['ORDER BY'] ) ) {
-                       $tailOpts .= " ORDER BY {$options['ORDER BY']}";
-               }
+               $tailOpts .= $this->makeGroupByWithHaving( $options );
+
+               $tailOpts .= $this->makeOrderBy( $options );
 
                if ( isset( $noKeyOptions['DISTINCT'] ) && isset( $noKeyOptions['DISTINCTROW'] ) ) {
                        $startOpts .= 'DISTINCT';
                }
 
                // we want this to be compatible with the output of parent::makeSelectOptions()
-               return array( $startOpts, '' , $tailOpts, '' );
+               return array( $startOpts, '', $tailOpts, '' );
        }
 
        /**
         * Get the type of the DBMS, as it appears in $wgDBtype.
         * @return string
         */
-       function getType(){
+       function getType() {
                return 'mssql';
        }
 
index 36a1126..c5100b5 100644 (file)
@@ -133,7 +133,7 @@ class DatabaseMysql extends DatabaseBase {
                                substr( $password, 0, 3 ) . "..., error: " . $error . "\n" );
 
                        wfProfileOut( __METHOD__ );
-                       $this->reportConnectionError( $error );
+                       return $this->reportConnectionError( $error );
                }
 
                if ( $dbName != '' ) {
@@ -146,7 +146,7 @@ class DatabaseMysql extends DatabaseBase {
                                        "from client host " . wfHostname() . "\n" );
 
                                wfProfileOut( __METHOD__ );
-                               $this->reportConnectionError( "Error selecting database $dbName" );
+                               return $this->reportConnectionError( "Error selecting database $dbName" );
                        }
                }
 
@@ -361,7 +361,7 @@ class DatabaseMysql extends DatabaseBase {
         * @param $options string|array
         * @return int
         */
-       public function estimateRowCount( $table, $vars='*', $conds='', $fname = 'DatabaseMysql::estimateRowCount', $options = array() ) {
+       public function estimateRowCount( $table, $vars = '*', $conds = '', $fname = 'DatabaseMysql::estimateRowCount', $options = array() ) {
                $options['EXPLAIN'] = true;
                $res = $this->select( $table, $vars, $conds, $fname, $options );
                if ( $res === false ) {
@@ -393,7 +393,7 @@ class DatabaseMysql extends DatabaseBase {
                for( $i = 0; $i < $n; $i++ ) {
                        $meta = mysql_fetch_field( $res->result, $i );
                        if( $field == $meta->name ) {
-                               return new MySQLField($meta);
+                               return new MySQLField( $meta );
                        }
                }
                return false;
@@ -449,7 +449,7 @@ class DatabaseMysql extends DatabaseBase {
        function strencode( $s ) {
                $sQuoted = mysql_real_escape_string( $s, $this->mConn );
 
-               if($sQuoted === false) {
+               if( $sQuoted === false ) {
                        $this->ping();
                        $sQuoted = mysql_real_escape_string( $s, $this->mConn );
                }
@@ -597,10 +597,9 @@ class DatabaseMysql extends DatabaseBase {
                if ( $res && $row = $this->fetchRow( $res ) ) {
                        wfProfileOut( $fname );
                        return $row[0];
-               } else {
-                       wfProfileOut( $fname );
-                       return false;
                }
+               wfProfileOut( $fname );
+               return false;
        }
 
        /**
@@ -686,7 +685,7 @@ class DatabaseMysql extends DatabaseBase {
 
        public function streamStatementEnd( &$sql, &$newLine ) {
                if ( strtoupper( substr( $newLine, 0, 9 ) ) == 'DELIMITER' ) {
-                       preg_match( '/^DELIMITER\s+(\S+)/' , $newLine, $m );
+                       preg_match( '/^DELIMITER\s+(\S+)/', $newLine, $m );
                        $this->delimiter = $m[1];
                        $newLine = '';
                }
@@ -722,7 +721,7 @@ class DatabaseMysql extends DatabaseBase {
                if( $row->lockstatus == 1 ) {
                        return true;
                } else {
-                       wfDebug( __METHOD__." failed to acquire lock\n" );
+                       wfDebug( __METHOD__ . " failed to acquire lock\n" );
                        return false;
                }
        }
@@ -900,7 +899,7 @@ class DatabaseMysql extends DatabaseBase {
                $endArray = array();
 
                foreach( $result as $table ) {
-                       $vars = get_object_vars($table);
+                       $vars = get_object_vars( $table );
                        $table = array_pop( $vars );
 
                        if( !$prefix || strpos( $table, $prefix ) === 0 ) {
index 2f9a05c..5195a83 100644 (file)
@@ -23,7 +23,7 @@
 
 /**
  * The oci8 extension is fairly weak and doesn't support oci_num_rows, among
- * other things.  We use a wrapper class to handle that and other
+ * other things. We use a wrapper class to handle that and other
  * Oracle-specific bits, like converting column names back to lowercase.
  * @ingroup Database
  */
@@ -69,7 +69,7 @@ class ORAResult {
                        $this->nrows = count( $this->rows );
                }
 
-               if ($this->nrows > 0) {
+               if ( $this->nrows > 0 ) {
                        foreach ( $this->rows[0] as $k => $v ) {
                                $this->columns[$k] = strtolower( oci_field_name( $stmt, $k + 1 ) );
                        }
@@ -80,7 +80,7 @@ class ORAResult {
        }
 
        public function free() {
-               unset($this->db);
+               unset( $this->db );
        }
 
        public function seek( $row ) {
@@ -92,7 +92,7 @@ class ORAResult {
        }
 
        public function numFields() {
-               return count($this->columns);
+               return count( $this->columns );
        }
 
        public function fetchObject() {
@@ -633,7 +633,7 @@ class DatabaseOracle extends DatabaseBase {
                }
                list( $startOpts, $useIndex, $tailOpts ) = $this->makeSelectOptions( $selectOptions );
                if ( is_array( $srcTable ) ) {
-                       $srcTable =  implode( ',', array_map( array( &$this, 'tableName' ), $srcTable ) );
+                       $srcTable = implode( ',', array_map( array( &$this, 'tableName' ), $srcTable ) );
                } else {
                        $srcTable = $this->tableName( $srcTable );
                }
@@ -778,8 +778,8 @@ class DatabaseOracle extends DatabaseBase {
 
        function listTables( $prefix = null, $fname = 'DatabaseOracle::listTables' ) {
                $listWhere = '';
-               if (!empty($prefix)) {
-                       $listWhere = ' AND table_name LIKE \''.strtoupper($prefix).'%\'';
+               if ( !empty( $prefix ) ) {
+                       $listWhere = ' AND table_name LIKE \'' . strtoupper( $prefix ) . '%\'';
                }
 
                $owner = strtoupper( $this->mDBname );
@@ -787,12 +787,12 @@ class DatabaseOracle extends DatabaseBase {
 
                // dirty code ... i know
                $endArray = array();
-               $endArray[] = strtoupper($prefix.'MWUSER');
-               $endArray[] = strtoupper($prefix.'PAGE');
-               $endArray[] = strtoupper($prefix.'IMAGE');
+               $endArray[] = strtoupper( $prefix . 'MWUSER' );
+               $endArray[] = strtoupper( $prefix . 'PAGE' );
+               $endArray[] = strtoupper( $prefix . 'IMAGE' );
                $fixedOrderTabs = $endArray;
-               while (($row = $result->fetchRow()) !== false) {
-                       if (!in_array($row['table_name'], $fixedOrderTabs))
+               while ( ($row = $result->fetchRow()) !== false ) {
+                       if ( !in_array( $row['table_name'], $fixedOrderTabs ) )
                                $endArray[] = $row['table_name'];
                }
 
@@ -800,7 +800,7 @@ class DatabaseOracle extends DatabaseBase {
        }
 
        public function dropTable( $tableName, $fName = 'DatabaseOracle::dropTable' ) {
-               $tableName = $this->tableName($tableName);
+               $tableName = $this->tableName( $tableName );
                if( !$this->tableExists( $tableName ) ) {
                        return false;
                }
@@ -846,7 +846,7 @@ 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%\'' );
-               if ( !( $row =  $rset->fetchRow() ) ) {
+               if ( !( $row = $rset->fetchRow() ) ) {
                        return oci_server_version( $this->mConn );
                }
                return $row['version'];
@@ -907,7 +907,7 @@ class DatabaseOracle extends DatabaseBase {
                        $table = array_map( array( &$this, 'tableNameInternal' ), $table );
                        $tableWhere = 'IN (';
                        foreach( $table as &$singleTable ) {
-                               $singleTable = $this->removeIdentifierQuotes($singleTable);
+                               $singleTable = $this->removeIdentifierQuotes( $singleTable );
                                if ( isset( $this->mFieldInfoCache["$singleTable.$field"] ) ) {
                                        return $this->mFieldInfoCache["$singleTable.$field"];
                                }
@@ -915,14 +915,14 @@ class DatabaseOracle extends DatabaseBase {
                        }
                        $tableWhere = rtrim( $tableWhere, ',' ) . ')';
                } else {
-                       $table = $this->removeIdentifierQuotes(  $this->tableNameInternal( $table ) );
+                       $table = $this->removeIdentifierQuotes( $this->tableNameInternal( $table ) );
                        if ( isset( $this->mFieldInfoCache["$table.$field"] ) ) {
                                return $this->mFieldInfoCache["$table.$field"];
                        }
                        $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__ );
@@ -957,7 +957,7 @@ class DatabaseOracle extends DatabaseBase {
                if ( is_array( $table ) ) {
                        throw new DBUnexpectedError( $this, 'DatabaseOracle::fieldInfo called with table array!' );
                }
-               return $this->fieldInfoMulti ($table, $field);
+               return $this->fieldInfoMulti( $table, $field );
        }
 
        protected function doBegin( $fname = 'DatabaseOracle::begin' ) {
@@ -1066,7 +1066,7 @@ class DatabaseOracle extends DatabaseBase {
                if ( $db == null || $db == $this->mUser ) {
                        return true;
                }
-               $sql = 'ALTER SESSION SET CURRENT_SCHEMA=' . strtoupper($db);
+               $sql = 'ALTER SESSION SET CURRENT_SCHEMA=' . strtoupper( $db );
                $stmt = oci_parse( $this->mConn, $sql );
                wfSuppressWarnings();
                $success = oci_execute( $stmt );
@@ -1101,11 +1101,11 @@ class DatabaseOracle extends DatabaseBase {
        }
 
        public function removeIdentifierQuotes( $s ) {
-               return strpos($s, '/*Q*/') === FALSE ? $s : substr($s, 5);
+               return strpos( $s, '/*Q*/' ) === FALSE ? $s : substr( $s, 5 );
        }
 
        public function isQuotedIdentifier( $s ) {
-               return strpos($s, '/*Q*/') !== FALSE;
+               return strpos( $s, '/*Q*/' ) !== FALSE;
        }
 
        private function wrapFieldForWhere( $table, &$col, &$val ) {
@@ -1139,7 +1139,7 @@ class DatabaseOracle extends DatabaseBase {
        }
 
        function selectRow( $table, $vars, $conds, $fname = 'DatabaseOracle::selectRow', $options = array(), $join_conds = array() ) {
-               if ( is_array($conds) ) {
+               if ( is_array( $conds ) ) {
                        $conds = $this->wrapConditionsForWhere( $table, $conds );
                }
                return parent::selectRow( $table, $vars, $conds, $fname, $options, $join_conds );
@@ -1166,15 +1166,14 @@ class DatabaseOracle extends DatabaseBase {
                        }
                }
 
-               if ( isset( $options['GROUP BY'] ) ) {
-                       $preLimitTail .= " GROUP BY {$options['GROUP BY']}";
-               }
-               if ( isset( $options['ORDER BY'] ) ) {
-                       $preLimitTail .= " ORDER BY {$options['ORDER BY']}";
+               $preLimitTail .= $this->makeGroupByWithHaving( $options );
+
+               $preLimitTail .= $this->makeOrderBy( $options );
+
+               if ( isset( $noKeyOptions['FOR UPDATE'] ) ) {
+                       $postLimitTail .= ' FOR UPDATE';
                }
 
-               # if ( isset( $noKeyOptions['FOR UPDATE'] ) ) $tailOpts .= ' FOR UPDATE';
-               # if ( isset( $noKeyOptions['LOCK IN SHARE MODE'] ) ) $tailOpts .= ' LOCK IN SHARE MODE';
                if ( isset( $noKeyOptions['DISTINCT'] ) || isset( $noKeyOptions['DISTINCTROW'] ) ) {
                        $startOpts .= 'DISTINCT';
                }
@@ -1189,13 +1188,13 @@ class DatabaseOracle extends DatabaseBase {
        }
 
        public function delete( $table, $conds, $fname = 'DatabaseOracle::delete' ) {
-               if ( is_array($conds) ) {
+               if ( is_array( $conds ) ) {
                        $conds = $this->wrapConditionsForWhere( $table, $conds );
                }
                // a hack for deleting pages, users and images (which have non-nullable FKs)
                // all deletions on these tables have transactions so final failure rollbacks these updates
                $table = $this->tableName( $table );
-               if ( $table == $this->tableName( 'user' )  ) {
+               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 );
@@ -1205,7 +1204,7 @@ class DatabaseOracle extends DatabaseBase {
                                $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' )  ) {
+               } elseif ( $table == $this->tableName( 'image' ) ) {
                                $this->update( 'oldimage', array( 'oi_name' => 0 ), array( 'oi_name' => $conds['img_name'] ), $fname );
                }
                return parent::delete( $table, $conds, $fname );
index 419488e..86b8e8a 100644 (file)
@@ -176,8 +176,8 @@ class PostgresTransactionState {
                                $old = reset( $this->mCurrentState );
                                $new = reset( $this->mNewState );
                                foreach ( self::$WATCHED as $watched ) {
-                                       if ($old !== $new) {
-                                               $this->log_changed($old, $new, $watched);
+                                       if ( $old !== $new ) {
+                                               $this->log_changed( $old, $new, $watched );
                                        }
                                        $old = next( $this->mCurrentState );
                                        $new = next( $this->mNewState );
@@ -197,11 +197,11 @@ class PostgresTransactionState {
        }
 
        protected function log_changed( $old, $new, $watched ) {
-               wfDebug(sprintf($watched["desc"],
+               wfDebug( sprintf( $watched["desc"],
                        $this->mConn,
                        $this->describe_changed( $old, $watched["states"] ),
-                       $this->describe_changed( $new, $watched["states"] ))
-               );
+                       $this->describe_changed( $new, $watched["states"] )
+               ) );
        }
 }
 
@@ -218,7 +218,7 @@ class SavepointPostgres {
        protected $id;
        protected $didbegin;
 
-       public function __construct ($dbw, $id) {
+       public function __construct ( $dbw, $id ) {
                $this->dbw = $dbw;
                $this->id = $id;
                $this->didbegin = false;
@@ -232,12 +232,14 @@ class SavepointPostgres {
        public function __destruct() {
                if ( $this->didbegin ) {
                        $this->dbw->rollback();
+                       $this->didbegin = false;
                }
        }
 
        public function commit() {
                if ( $this->didbegin ) {
                        $this->dbw->commit();
+                       $this->didbegin = false;
                }
        }
 
@@ -245,29 +247,29 @@ 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 ) );
                }
        }
 
        public function savepoint() {
-               $this->query("SAVEPOINT",
+               $this->query( "SAVEPOINT",
                        "Transaction state: savepoint \"%s\" established.\n",
                        "Transaction state: establishment of savepoint \"%s\" FAILED.\n"
                );
        }
 
        public function release() {
-               $this->query("RELEASE",
+               $this->query( "RELEASE",
                        "Transaction state: savepoint \"%s\" released.\n",
                        "Transaction state: release of savepoint \"%s\" FAILED.\n"
                );
        }
 
        public function rollback() {
-               $this->query("ROLLBACK TO",
+               $this->query( "ROLLBACK TO",
                        "Transaction state: savepoint \"%s\" rolled back.\n",
                        "Transaction state: rollback of savepoint \"%s\" FAILED.\n"
                );
@@ -604,7 +606,7 @@ class DatabasePostgres extends DatabaseBase {
         * Takes same arguments as Database::select()
         * @return int
         */
-       function estimateRowCount( $table, $vars = '*', $conds='', $fname = 'DatabasePostgres::estimateRowCount', $options = array() ) {
+       function estimateRowCount( $table, $vars = '*', $conds = '', $fname = 'DatabasePostgres::estimateRowCount', $options = array() ) {
                $options['EXPLAIN'] = true;
                $res = $this->select( $table, $vars, $conds, $fname, $options );
                $rows = -1;
@@ -682,7 +684,7 @@ class DatabasePostgres extends DatabaseBase {
                                        AND     i.indclass[s.g] = opcls.oid
                                        AND     pg_am.oid = opcls.opcmethod
 __INDEXATTR__;
-               $res = $this->query($sql, __METHOD__);
+               $res = $this->query( $sql, __METHOD__ );
                $a = array();
                if ( $res ) {
                        foreach ( $res as $row ) {
@@ -690,7 +692,7 @@ __INDEXATTR__;
                                        $row->attname,
                                        $row->opcname,
                                        $row->amname,
-                                       $row->option);
+                                       $row->option );
                        }
                } else {
                        return null;
@@ -733,7 +735,7 @@ __INDEXATTR__;
                }
 
                $table = $this->tableName( $table );
-               if (isset( $this->numeric_version ) ) {
+               if ( !isset( $this->numeric_version ) ) {
                        $this->getServerVersion();
                }
 
@@ -985,7 +987,7 @@ __INDEXATTR__;
                $endArray = array();
 
                foreach( $result as $table ) {
-                       $vars = get_object_vars($table);
+                       $vars = get_object_vars( $table );
                        $table = array_pop( $vars );
                        if( !$prefix || strpos( $table, $prefix ) === 0 ) {
                                $endArray[] = $table;
@@ -1066,7 +1068,7 @@ __INDEXATTR__;
         * @return string return default schema for the current session
         */
        function getCurrentSchema() {
-               $res = $this->query( "SELECT current_schema()", __METHOD__);
+               $res = $this->query( "SELECT current_schema()", __METHOD__ );
                $row = $this->fetchRow( $res );
                return $row[0];
        }
@@ -1082,11 +1084,11 @@ __INDEXATTR__;
         * @return array list of actual schemas for the current sesson
         */
        function getSchemas() {
-               $res = $this->query( "SELECT current_schemas(false)", __METHOD__);
+               $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);
+               return $this->pg_array_parse( $row[0], $schemas );
        }
 
        /**
@@ -1099,10 +1101,10 @@ __INDEXATTR__;
         * @return array how to search for table names schemas for the current user
         */
        function getSearchPath() {
-               $res = $this->query( "SHOW search_path", __METHOD__);
+               $res = $this->query( "SHOW search_path", __METHOD__ );
                $row = $this->fetchRow( $res );
                /* PostgreSQL returns SHOW values as strings */
-               return explode(",", $row[0]);
+               return explode( ",", $row[0] );
        }
 
        /**
@@ -1113,7 +1115,7 @@ __INDEXATTR__;
         * @param $search_path array list of schemas to be searched by default
         */
        function setSearchPath( $search_path ) {
-               $this->query( "SET search_path = " . implode(", ", $search_path) );
+               $this->query( "SET search_path = " . implode( ", ", $search_path ) );
        }
 
        /**
@@ -1134,7 +1136,7 @@ __INDEXATTR__;
                if ( $this->schemaExists( $desired_schema ) ) {
                        if ( in_array( $desired_schema, $this->getSchemas() ) ) {
                                $this->mCoreSchema = $desired_schema;
-                               wfDebug("Schema \"" . $desired_schema . "\" already in the search path\n");
+                               wfDebug( "Schema \"" . $desired_schema . "\" already in the search path\n" );
                        } else {
                                /**
                                 * Prepend our schema (e.g. 'mediawiki') in front
@@ -1146,11 +1148,11 @@ __INDEXATTR__;
                                        $this->addIdentifierQuotes( $desired_schema ));
                                $this->setSearchPath( $search_path );
                                $this->mCoreSchema = $desired_schema;
-                               wfDebug("Schema \"" . $desired_schema . "\" added to the search path\n");
+                               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__ );
@@ -1256,8 +1258,8 @@ SQL;
        }
 
        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",
+               $SQL = sprintf( "SELECT 1 FROM information_schema.table_constraints " .
+                               "WHERE constraint_schema = %s AND table_name = %s AND constraint_name = %s",
                        $this->addQuotes( $this->getCoreSchema() ),
                        $this->addQuotes( $table ),
                        $this->addQuotes( $constraint )
@@ -1384,23 +1386,9 @@ SQL;
                        }
                }
 
-               if ( isset( $options['GROUP BY'] ) ) {
-                       $gb = is_array( $options['GROUP BY'] )
-                               ? implode( ',', $options['GROUP BY'] )
-                               : $options['GROUP BY'];
-                       $preLimitTail .= " GROUP BY {$gb}";
-               }
-
-               if ( isset( $options['HAVING'] ) ) {
-                       $preLimitTail .= " HAVING {$options['HAVING']}";
-               }
+               $preLimitTail .= $this->makeGroupByWithHaving( $options );
 
-               if ( isset( $options['ORDER BY'] ) ) {
-                       $ob = is_array( $options['ORDER BY'] )
-                               ? implode( ',', $options['ORDER BY'] )
-                               : $options['ORDER BY'];
-                       $preLimitTail .= " ORDER BY {$ob}";
-               }
+               $preLimitTail .= $this->makeOrderBy( $options );
 
                //if ( isset( $options['LIMIT'] ) ) {
                //      $tailOpts .= $this->limitResult( '', $options['LIMIT'],
index d30d984..9120c28 100644 (file)
@@ -127,6 +127,8 @@ class DatabaseSqlite extends DatabaseBase {
                # set error codes only, don't raise exceptions
                if ( $this->mOpened ) {
                        $this->mConn->setAttribute( PDO::ATTR_ERRMODE, PDO::ERRMODE_SILENT );
+                       # Enforce LIKE to be case sensitive, just like MySQL\r
+                       $this->query( 'PRAGMA case_sensitive_like = 1' );
                        return true;
                }
        }
@@ -161,7 +163,7 @@ class DatabaseSqlite extends DatabaseBase {
                        $res = $this->query( "SELECT sql FROM sqlite_master WHERE tbl_name = '$table'", __METHOD__ );
                        if ( $res ) {
                                $row = $res->fetchRow();
-                               self::$fulltextEnabled = stristr($row['sql'], 'fts' ) !== false;
+                               self::$fulltextEnabled = stristr( $row['sql'], 'fts' ) !== false;
                        }
                }
                return self::$fulltextEnabled;
@@ -848,7 +850,7 @@ class DatabaseSqlite extends DatabaseBase {
                $endArray = array();
 
                foreach( $result as $table ) {
-                       $vars = get_object_vars($table);
+                       $vars = get_object_vars( $table );
                        $table = array_pop( $vars );
 
                        if( !$prefix || strpos( $table, $prefix ) === 0 ) {
index c846788..5e11076 100644 (file)
@@ -138,7 +138,7 @@ class ResultWrapper implements Iterator {
 
        /**
         * Fetch the next row from the given result object, in associative array
-        * form.  Fields are retrieved with $row['fieldname'].
+        * form. Fields are retrieved with $row['fieldname'].
         *
         * @return Array
         * @throws DBUnexpectedError Thrown if the database returns an error
@@ -306,4 +306,3 @@ class LikeMatch {
  */
 interface DBMasterPos {
 }
-
index 1ea4b12..6a7a5bb 100644 (file)
@@ -272,4 +272,4 @@ interface IORMRow {
         */
        public function getTable();
 
-}
\ No newline at end of file
+}
index 67dbdfe..e46dbc0 100644 (file)
@@ -97,6 +97,8 @@ interface IORMTable {
         * Selects the the specified fields of the records matching the provided
         * conditions and returns them as DBDataObject. Field names get prefixed.
         *
+        * @see DatabaseBase::select()
+        *
         * @since 1.20
         *
         * @param array|string|null $fields
@@ -104,7 +106,8 @@ interface IORMTable {
         * @param array $options
         * @param string|null $functionName
         *
-        * @return ORMResult
+        * @return ORMResult The result set
+        * @throw 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 );
@@ -136,6 +139,7 @@ interface IORMTable {
         * @param null|string $functionName
         *
         * @return ResultWrapper
+        * @throw 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 );
index e82c54b..cc7f133 100644 (file)
@@ -240,7 +240,7 @@ class LBFactory_Simple extends LBFactory {
        function newExternalLB( $cluster, $wiki = false ) {
                global $wgExternalServers;
                if ( !isset( $wgExternalServers[$cluster] ) ) {
-                       throw new MWException( __METHOD__.": Unknown cluster \"$cluster\"" );
+                       throw new MWException( __METHOD__ . ": Unknown cluster \"$cluster\"" );
                }
                return new LoadBalancer( array(
                        'servers' => $wgExternalServers[$cluster]
@@ -345,7 +345,7 @@ class ChronologyProtector {
                if ( $lb->getServerCount() > 1 && !empty( $this->startupPos[$masterName] ) ) {
                        $info = $lb->parentInfo();
                        $pos = $this->startupPos[$masterName];
-                       wfDebug( __METHOD__.": LB " . $info['id'] . " waiting for master pos $pos\n" );
+                       wfDebug( __METHOD__ . ": LB " . $info['id'] . " waiting for master pos $pos\n" );
                        $lb->waitFor( $this->startupPos[$masterName] );
                }
        }
@@ -370,11 +370,11 @@ class ChronologyProtector {
                $db = $lb->getAnyOpenConnection( 0 );
                $info = $lb->parentInfo();
                if ( !$db || !$db->doneWrites() ) {
-                       wfDebug( __METHOD__.": LB {$info['id']}, no writes done\n" );
+                       wfDebug( __METHOD__ . ": LB {$info['id']}, no writes done\n" );
                        return;
                }
                $pos = $db->getMasterPos();
-               wfDebug( __METHOD__.": LB {$info['id']} has master pos $pos\n" );
+               wfDebug( __METHOD__ . ": LB {$info['id']} has master pos $pos\n" );
                $this->shutdownPos[$masterName] = $pos;
        }
 
@@ -384,7 +384,7 @@ class ChronologyProtector {
         */
        function shutdown() {
                if ( session_id() != '' && count( $this->shutdownPos ) ) {
-                       wfDebug( __METHOD__.": saving master pos for " .
+                       wfDebug( __METHOD__ . ": saving master pos for " .
                                count( $this->shutdownPos ) . " master(s)\n" );
                        $_SESSION[__CLASS__] = $this->shutdownPos;
                }
index 9b468a7..88b7500 100644 (file)
@@ -83,7 +83,7 @@ class LBFactory_Multi extends LBFactory {
 
                foreach ( $required as $key ) {
                        if ( !isset( $conf[$key] ) ) {
-                               throw new MWException( __CLASS__.": $key is required in configuration" );
+                               throw new MWException( __CLASS__ . ": $key is required in configuration" );
                        }
                        $this->$key = $conf[$key];
                }
@@ -161,7 +161,7 @@ class LBFactory_Multi extends LBFactory {
         */
        function newExternalLB( $cluster, $wiki = false ) {
                if ( !isset( $this->externalLoads[$cluster] ) ) {
-                       throw new MWException( __METHOD__.": Unknown cluster \"$cluster\"" );
+                       throw new MWException( __METHOD__ . ": Unknown cluster \"$cluster\"" );
                }
                $template = $this->serverTemplate;
                if ( isset( $this->externalTemplateOverrides ) ) {
index 8ba5f4f..d42a152 100644 (file)
@@ -45,7 +45,7 @@ class LoadBalancer {
         */
        function __construct( $params ) {
                if ( !isset( $params['servers'] ) ) {
-                       throw new MWException( __CLASS__.': missing servers parameter' );
+                       throw new MWException( __CLASS__ . ': missing servers parameter' );
                }
                $this->mServers = $params['servers'];
 
@@ -205,11 +205,11 @@ class LoadBalancer {
                global $wgReadOnly, $wgDBClusterTimeout, $wgDBAvgStatusPoll, $wgDBtype;
 
                # @todo FIXME: For now, only go through all this for mysql databases
-               if ($wgDBtype != 'mysql') {
+               if ( $wgDBtype != 'mysql' ) {
                        return $this->getWriterIndex();
                }
 
-               if ( count( $this->mServers ) == 1 )  {
+               if ( count( $this->mServers ) == 1 ) {
                        # Skip the load balancing if there's only one server
                        return 0;
                } elseif ( $group === false and $this->mReadIndex >= 0 ) {
@@ -230,7 +230,7 @@ class LoadBalancer {
                                $nonErrorLoads = $this->mGroupLoads[$group];
                        } else {
                                # No loads for this group, return false and the caller can use some other group
-                               wfDebug( __METHOD__.": no loads for group $group\n" );
+                               wfDebug( __METHOD__ . ": no loads for group $group\n" );
                                wfProfileOut( __METHOD__ );
                                return false;
                        }
@@ -258,7 +258,7 @@ class LoadBalancer {
                                        $i = $this->pickRandom( $currentLoads );
                                } else {
                                        $i = $this->getRandomNonLagged( $currentLoads, $wiki );
-                                       if ( $i === false && count( $currentLoads ) != 0 )  {
+                                       if ( $i === false && count( $currentLoads ) != 0 ) {
                                                # All slaves lagged. Switch to read-only mode
                                                wfDebugLog( 'replication', "All slaves lagged. Switch to read-only mode\n" );
                                                $wgReadOnly = 'The database has been automatically locked ' .
@@ -272,16 +272,16 @@ class LoadBalancer {
                                        # pickRandom() returned false
                                        # This is permanent and means the configuration or the load monitor
                                        # wants us to return false.
-                                       wfDebugLog( 'connect', __METHOD__.": pickRandom() returned false\n" );
+                                       wfDebugLog( 'connect', __METHOD__ . ": pickRandom() returned false\n" );
                                        wfProfileOut( __METHOD__ );
                                        return false;
                                }
 
-                               wfDebugLog( 'connect', __METHOD__.": Using reader #$i: {$this->mServers[$i]['host']}...\n" );
+                               wfDebugLog( 'connect', __METHOD__ . ": Using reader #$i: {$this->mServers[$i]['host']}...\n" );
                                $conn = $this->openConnection( $i, $wiki );
 
                                if ( !$conn ) {
-                                       wfDebugLog( 'connect', __METHOD__.": Failed connecting to $i/$wiki\n" );
+                                       wfDebugLog( 'connect', __METHOD__ . ": Failed connecting to $i/$wiki\n" );
                                        unset( $nonErrorLoads[$i] );
                                        unset( $currentLoads[$i] );
                                        continue;
@@ -320,7 +320,7 @@ class LoadBalancer {
 
                        # Some servers must have been overloaded
                        if ( $overloadedServers == 0 ) {
-                               throw new MWException( __METHOD__.": unexpectedly found no overloaded servers" );
+                               throw new MWException( __METHOD__ . ": unexpectedly found no overloaded servers" );
                        }
                        # Back off for a while
                        # Scale the sleep time by the number of connected threads, to produce a
@@ -358,7 +358,7 @@ class LoadBalancer {
         */
        function sleep( $t ) {
                wfProfileIn( __METHOD__ );
-               wfDebug( __METHOD__.": waiting $t us\n" );
+               wfDebug( __METHOD__ . ": waiting $t us\n" );
                usleep( $t );
                wfProfileOut( __METHOD__ );
                return $t;
@@ -392,7 +392,7 @@ class LoadBalancer {
                wfProfileIn( __METHOD__ );
                $this->mWaitForPos = $pos;
                for ( $i = 1; $i < count( $this->mServers ); $i++ ) {
-                       $this->doWait( $i , true );
+                       $this->doWait( $i, true );
                }
                wfProfileOut( __METHOD__ );
        }
@@ -435,15 +435,15 @@ class LoadBalancer {
                        }
                }
 
-               wfDebug( __METHOD__.": Waiting for slave #$index to catch up...\n" );
+               wfDebug( __METHOD__ . ": Waiting for slave #$index to catch up...\n" );
                $result = $conn->masterPosWait( $this->mWaitForPos, $this->mWaitTimeout );
 
                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" );
+                       wfDebug( __METHOD__ . ": Timed out waiting for slave #$index pos {$this->mWaitForPos}\n" );
                        return false;
                } else {
-                       wfDebug( __METHOD__.": Done\n" );
+                       wfDebug( __METHOD__ . ": Done\n" );
                        return true;
                }
        }
@@ -479,7 +479,7 @@ class LoadBalancer {
                        $groupIndex = $this->getReaderIndex( $groups, $wiki );
                        if ( $groupIndex !== false ) {
                                $serverName = $this->getServerName( $groupIndex );
-                               wfDebug( __METHOD__.": using server $serverName for group $groups\n" );
+                               wfDebug( __METHOD__ . ": using server $serverName for group $groups\n" );
                                $i = $groupIndex;
                        }
                } else {
@@ -487,7 +487,7 @@ class LoadBalancer {
                                $groupIndex = $this->getReaderIndex( $group, $wiki );
                                if ( $groupIndex !== false ) {
                                        $serverName = $this->getServerName( $groupIndex );
-                                       wfDebug( __METHOD__.": using server $serverName for group $group\n" );
+                                       wfDebug( __METHOD__ . ": using server $serverName for group $group\n" );
                                        $i = $groupIndex;
                                        break;
                                }
@@ -525,8 +525,8 @@ class LoadBalancer {
         * @throws MWException
         */
        public function reuseConnection( $conn ) {
-               $serverIndex = $conn->getLBInfo('serverIndex');
-               $refCount = $conn->getLBInfo('foreignPoolRefCount');
+               $serverIndex = $conn->getLBInfo( 'serverIndex' );
+               $refCount = $conn->getLBInfo( 'foreignPoolRefCount' );
                $dbName = $conn->getDBname();
                $prefix = $conn->tablePrefix();
                if ( strval( $prefix ) !== '' ) {
@@ -535,7 +535,7 @@ class LoadBalancer {
                        $wiki = $dbName;
                }
                if ( $serverIndex === null || $refCount === null ) {
-                       wfDebug( __METHOD__.": this connection was not opened as a foreign connection\n" );
+                       wfDebug( __METHOD__ . ": this connection was not opened as a foreign connection\n" );
                        /**
                         * This can happen in code like:
                         *   foreach ( $dbs as $db ) {
@@ -549,15 +549,15 @@ class LoadBalancer {
                        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 ) {
                        $this->mConns['foreignFree'][$serverIndex][$wiki] = $conn;
                        unset( $this->mConns['foreignUsed'][$serverIndex][$wiki] );
-                       wfDebug( __METHOD__.": freed connection $serverIndex/$wiki\n" );
+                       wfDebug( __METHOD__ . ": freed connection $serverIndex/$wiki\n" );
                } else {
-                       wfDebug( __METHOD__.": reference count for $serverIndex/$wiki reduced to $refCount\n" );
+                       wfDebug( __METHOD__ . ": reference count for $serverIndex/$wiki reduced to $refCount\n" );
                }
        }
 
@@ -579,7 +579,7 @@ class LoadBalancer {
                wfProfileIn( __METHOD__ );
                if ( $wiki !== false ) {
                        $conn = $this->openForeignConnection( $i, $wiki );
-                       wfProfileOut( __METHOD__);
+                       wfProfileOut( __METHOD__ );
                        return $conn;
                }
                if ( isset( $this->mConns['local'][$i][0] ) ) {
@@ -620,18 +620,18 @@ class LoadBalancer {
         * @return DatabaseBase
         */
        function openForeignConnection( $i, $wiki ) {
-               wfProfileIn(__METHOD__);
+               wfProfileIn( __METHOD__ );
                list( $dbName, $prefix ) = wfSplitWikiID( $wiki );
                if ( isset( $this->mConns['foreignUsed'][$i][$wiki] ) ) {
                        // Reuse an already-used connection
                        $conn = $this->mConns['foreignUsed'][$i][$wiki];
-                       wfDebug( __METHOD__.": reusing connection $i/$wiki\n" );
+                       wfDebug( __METHOD__ . ": reusing connection $i/$wiki\n" );
                } elseif ( isset( $this->mConns['foreignFree'][$i][$wiki] ) ) {
                        // Reuse a free connection for the same wiki
                        $conn = $this->mConns['foreignFree'][$i][$wiki];
                        unset( $this->mConns['foreignFree'][$i][$wiki] );
                        $this->mConns['foreignUsed'][$i][$wiki] = $conn;
-                       wfDebug( __METHOD__.": reusing free connection $i/$wiki\n" );
+                       wfDebug( __METHOD__ . ": reusing free connection $i/$wiki\n" );
                } elseif ( !empty( $this->mConns['foreignFree'][$i] ) ) {
                        // Reuse a connection from another wiki
                        $conn = reset( $this->mConns['foreignFree'][$i] );
@@ -646,7 +646,7 @@ class LoadBalancer {
                                $conn->tablePrefix( $prefix );
                                unset( $this->mConns['foreignFree'][$i][$oldWiki] );
                                $this->mConns['foreignUsed'][$i][$wiki] = $conn;
-                               wfDebug( __METHOD__.": reusing free connection from $oldWiki for $wiki\n" );
+                               wfDebug( __METHOD__ . ": reusing free connection from $oldWiki for $wiki\n" );
                        }
                } else {
                        // Open a new connection
@@ -655,13 +655,13 @@ class LoadBalancer {
                        $server['foreignPoolRefCount'] = 0;
                        $conn = $this->reallyOpenConnection( $server, $dbName );
                        if ( !$conn->isOpen() ) {
-                               wfDebug( __METHOD__.": error opening connection for $i/$wiki\n" );
+                               wfDebug( __METHOD__ . ": error opening connection for $i/$wiki\n" );
                                $this->mErrorConnection = $conn;
                                $conn = false;
                        } else {
                                $conn->tablePrefix( $prefix );
                                $this->mConns['foreignUsed'][$i][$wiki] = $conn;
-                               wfDebug( __METHOD__.": opened new connection for $i/$wiki\n" );
+                               wfDebug( __METHOD__ . ": opened new connection for $i/$wiki\n" );
                        }
                }
 
@@ -670,7 +670,7 @@ class LoadBalancer {
                        $refCount = $conn->getLBInfo( 'foreignPoolRefCount' );
                        $conn->setLBInfo( 'foreignPoolRefCount', $refCount + 1 );
                }
-               wfProfileOut(__METHOD__);
+               wfProfileOut( __METHOD__ );
                return $conn;
        }
 
index 146ac61..cb3376f 100644 (file)
@@ -159,7 +159,7 @@ class LoadMonitor_MySQL implements LoadMonitor {
 
                $times = array();
                foreach ( $serverIndexes as $i ) {
-                       if ($i == 0) { # Master
+                       if ( $i == 0 ) { # Master
                                $times[$i] = 0;
                        } elseif ( false !== ( $conn = $this->parent->getAnyOpenConnection( $i ) ) ) {
                                $times[$i] = $conn->getLag();
@@ -173,7 +173,7 @@ class LoadMonitor_MySQL implements LoadMonitor {
                $wgMemc->set( $memcKey, $times, $expiry );
 
                # But don't give the timestamp to the caller
-               unset($times['timestamp']);
+               unset( $times['timestamp'] );
                $lagTimes = $times;
 
                wfProfileOut( __METHOD__ );
@@ -189,7 +189,7 @@ class LoadMonitor_MySQL implements LoadMonitor {
                if ( !$threshold ) {
                        return 0;
                }
-               $status = $conn->getMysqlStatus("Thread%");
+               $status = $conn->getMysqlStatus( "Thread%" );
                if ( $status['Threads_running'] > $threshold ) {
                        $server = $conn->getProperty( 'mServer' );
                        wfLogDBError( "LB backoff from $server - Threads_running = {$status['Threads_running']}\n" );
@@ -199,4 +199,3 @@ class LoadMonitor_MySQL implements LoadMonitor {
                }
        }
 }
-
index 7542797..077eab0 100644 (file)
@@ -28,4 +28,4 @@
  */
 interface ORMIterator extends Iterator {
 
-}
\ No newline at end of file
+}
index 5c730fb..6acc124 100644 (file)
@@ -31,7 +31,7 @@
  * @author Jeroen De Dauw < jeroendedauw@gmail.com >
  */
 
-abstract class ORMRow implements IORMRow {
+class ORMRow implements IORMRow {
 
        /**
         * The fields of the object.
index 1292963..06f88c1 100644 (file)
@@ -19,6 +19,7 @@
  * http://www.gnu.org/copyleft/gpl.html
  *
  * @since 1.20
+ * Non-abstract since 1.21
  *
  * @file ORMTable.php
  * @ingroup ORM
  * @author Jeroen De Dauw < jeroendedauw@gmail.com >
  */
 
-abstract class ORMTable extends DBAccessBase implements IORMTable {
+class ORMTable extends DBAccessBase implements IORMTable {
 
        /**
-        * Gets the db field prefix.
+        * Cache for instances, used by the singleton method.
         *
         * @since 1.20
+        * @deprecated since 1.21
         *
-        * @return string
+        * @var ORMTable[]
         */
-       protected abstract function getFieldPrefix();
+       protected static $instanceCache = array();
 
        /**
-        * Cache for instances, used by the singleton method.
+        * @since 1.21
         *
-        * @since 1.20
-        * @var array of DBTable
+        * @var string
         */
-       protected static $instanceCache = array();
+       protected $tableName;
+
+       /**
+        * @since 1.21
+        *
+        * @var string[]
+        */
+       protected $fields = array();
+
+       /**
+        * @since 1.21
+        *
+        * @var string
+        */
+       protected $fieldPrefix = '';
+
+       /**
+        * @since 1.21
+        *
+        * @var string
+        */
+       protected $rowClass = 'ORMRow';
+
+       /**
+        * @since 1.21
+        *
+        * @var array
+        */
+       protected $defaults = array();
 
        /**
         * ID of the database connection to use for read operations.
         * Can be changed via @see setReadDb.
         *
         * @since 1.20
+        *
         * @var integer DB_ enum
         */
        protected $readDb = DB_SLAVE;
 
+       /**
+        * Constructor.
+        *
+        * @since 1.21
+        *
+        * @param string $tableName
+        * @param string[] $fields
+        * @param array $defaults
+        * @param string|null $rowClass
+        * @param string $fieldPrefix
+        */
+       public function __construct( $tableName = '', array $fields = array(), array $defaults = array(), $rowClass = null, $fieldPrefix = '' ) {
+               $this->tableName = $tableName;
+               $this->fields = $fields;
+               $this->defaults = $defaults;
+
+               if ( is_string( $rowClass ) ) {
+                       $this->rowClass = $rowClass;
+               }
+
+               $this->fieldPrefix = $fieldPrefix;
+       }
+
+       /**
+        * @see IORMTable::getName
+        *
+        * @since 1.21
+        *
+        * @return string
+        * @throws MWException
+        */
+       public function getName() {
+               if ( $this->tableName === '' ) {
+                       throw new MWException( 'The table name needs to be set' );
+               }
+
+               return $this->tableName;
+       }
+
+       /**
+        * Gets the db field prefix.
+        *
+        * @since 1.20
+        *
+        * @return string
+        */
+       protected function getFieldPrefix() {
+               return $this->fieldPrefix;
+       }
+
+       /**
+        * @see IORMTable::getRowClass
+        *
+        * @since 1.21
+        *
+        * @return string
+        */
+       public function getRowClass() {
+               return $this->rowClass;
+       }
+
+       /**
+        * @see ORMTable::getFields
+        *
+        * @since 1.21
+        *
+        * @return array
+        * @throws MWException
+        */
+       public function getFields() {
+               if ( $this->fields === array() ) {
+                       throw new MWException( 'The table needs to have one or more fields' );
+               }
+
+               return $this->fields;
+       }
+
        /**
         * Returns a list of default field values.
         * field name => field value
@@ -64,7 +171,7 @@ abstract class ORMTable extends DBAccessBase implements IORMTable {
         * @return array
         */
        public function getDefaults() {
-               return array();
+               return $this->defaults;
        }
 
        /**
@@ -95,7 +202,8 @@ abstract class ORMTable extends DBAccessBase implements IORMTable {
         */
        public function select( $fields = null, array $conditions = array(),
                                                        array $options = array(), $functionName  = null ) {
-               return new ORMResult( $this, $this->rawSelect( $fields, $conditions, $options, $functionName ) );
+               $res = $this->rawSelect( $fields, $conditions, $options, $functionName );
+               return new ORMResult( $this, $res );
        }
 
        /**
@@ -109,7 +217,8 @@ abstract class ORMTable extends DBAccessBase implements IORMTable {
         * @param array $options
         * @param string|null $functionName
         *
-        * @return array of self
+        * @return array of row objects
+        * @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 ) {
@@ -130,11 +239,12 @@ abstract 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 ) {
@@ -154,7 +264,29 @@ abstract class ORMTable extends DBAccessBase implements IORMTable {
                        $options
                );
 
+               /* @var Exception $error */
+               $error = null;
+
+               if ( $result === false ) {
+                       // Database connection was in "ignoreErrors" mode. We don't like that.
+                       // So, we emulate the DBQueryError that should have been thrown.
+                       $error = new DBQueryError(
+                               $dbr,
+                               $dbr->lastError(),
+                               $dbr->lastErrno(),
+                               $dbr->lastQuery(),
+                               is_null( $functionName ) ? __METHOD__ : $functionName
+                       );
+               }
+
                $this->releaseConnection( $dbr );
+
+               if ( $error ) {
+                       // Note: construct the error before releasing the connection,
+                       // but throw it after.
+                       throw $error;
+               }
+
                return $result;
        }
 
@@ -227,7 +359,7 @@ abstract class ORMTable extends DBAccessBase implements IORMTable {
 
                $objects = $this->select( $fields, $conditions, $options, $functionName );
 
-               return $objects->isEmpty() ? false : $objects->current();
+               return ( !$objects || $objects->isEmpty() ) ? false : $objects->current();
        }
 
        /**
@@ -655,6 +787,7 @@ abstract class ORMTable extends DBAccessBase implements IORMTable {
         * Get an instance of this class.
         *
         * @since 1.20
+        * @deprecated since 1.21
         *
         * @return IORMTable
         */
index 6a6f930..6ef5fcb 100644 (file)
@@ -43,14 +43,14 @@ class _DiffOp {
         * @return int
         */
        function norig() {
-               return $this->orig ? sizeof( $this->orig ) : 0;
+               return $this->orig ? count( $this->orig ) : 0;
        }
 
        /**
         * @return int
         */
        function nclosing() {
-               return $this->closing ? sizeof( $this->closing ) : 0;
+               return $this->closing ? count( $this->closing ) : 0;
        }
 }
 
@@ -167,7 +167,7 @@ class _DiffOp_Change extends _DiffOp {
  */
 class _DiffEngine {
 
-       const MAX_XREF_LENGTH =  10000;
+       const MAX_XREF_LENGTH = 10000;
 
        protected $xchanged, $ychanged;
 
@@ -194,8 +194,8 @@ class _DiffEngine {
                $this->_shift_boundaries( $to_lines, $this->ychanged, $this->xchanged );
 
                // Compute the edit operations.
-               $n_from = sizeof( $from_lines );
-               $n_to = sizeof( $to_lines );
+               $n_from = count( $from_lines );
+               $n_to = count( $to_lines );
 
                $edits = array();
                $xi = $yi = 0;
@@ -221,7 +221,7 @@ class _DiffEngine {
                        }
 
                        $add = array();
-                       while ( $yi < $n_to && $this->ychanged[$yi] )  {
+                       while ( $yi < $n_to && $this->ychanged[$yi] ) {
                                $add[] = $to_lines[$yi++];
                        }
 
@@ -254,8 +254,8 @@ class _DiffEngine {
                        unset( $wikidiff3 );
                } else {
                        // old diff
-                       $n_from = sizeof( $from_lines );
-                       $n_to = sizeof( $to_lines );
+                       $n_from = count( $from_lines );
+                       $n_to = count( $to_lines );
                        $this->xchanged = $this->ychanged = array();
                        $this->xv = $this->yv = array();
                        $this->xind = $this->yind = array();
@@ -303,7 +303,7 @@ class _DiffEngine {
                        }
 
                        // Find the LCS.
-                       $this->_compareseq( 0, sizeof( $this->xv ), 0, sizeof( $this->yv ) );
+                       $this->_compareseq( 0, count( $this->xv ), 0, count( $this->yv ) );
                }
                wfProfileOut( __METHOD__ );
        }
@@ -491,8 +491,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 ) {
@@ -533,9 +532,9 @@ class _DiffEngine {
                $i = 0;
                $j = 0;
 
-               assert( 'sizeof($lines) == sizeof($changed)' );
-               $len = sizeof( $lines );
-               $other_len = sizeof( $other_changed );
+               assert( 'count($lines) == count($changed)' );
+               $len = count( $lines );
+               $other_len = count( $other_changed );
 
                while ( 1 ) {
                        /*
@@ -713,7 +712,7 @@ class Diff {
                $lcs = 0;
                foreach ( $this->edits as $edit ) {
                        if ( $edit->type == 'copy' ) {
-                               $lcs += sizeof( $edit->orig );
+                               $lcs += count( $edit->orig );
                        }
                }
                return $lcs;
@@ -732,7 +731,7 @@ class Diff {
 
                foreach ( $this->edits as $edit ) {
                        if ( $edit->orig ) {
-                               array_splice( $lines, sizeof( $lines ), 0, $edit->orig );
+                               array_splice( $lines, count( $lines ), 0, $edit->orig );
                        }
                }
                return $lines;
@@ -751,7 +750,7 @@ class Diff {
 
                foreach ( $this->edits as $edit ) {
                        if ( $edit->closing ) {
-                               array_splice( $lines, sizeof( $lines ), 0, $edit->closing );
+                               array_splice( $lines, count( $lines ), 0, $edit->closing );
                        }
                }
                return $lines;
@@ -829,23 +828,23 @@ class MappedDiff extends Diff {
                $mapped_from_lines, $mapped_to_lines ) {
                wfProfileIn( __METHOD__ );
 
-               assert( 'sizeof( $from_lines ) == sizeof( $mapped_from_lines )' );
-               assert( 'sizeof( $to_lines ) == sizeof( $mapped_to_lines )' );
+               assert( 'count( $from_lines ) == count( $mapped_from_lines )' );
+               assert( 'count( $to_lines ) == count( $mapped_to_lines )' );
 
                parent::__construct( $mapped_from_lines, $mapped_to_lines );
 
                $xi = $yi = 0;
-               for ( $i = 0; $i < sizeof( $this->edits ); $i++ ) {
+               for ( $i = 0; $i < count( $this->edits ); $i++ ) {
                        $orig = &$this->edits[$i]->orig;
                        if ( is_array( $orig ) ) {
-                               $orig = array_slice( $from_lines, $xi, sizeof( $orig ) );
-                               $xi += sizeof( $orig );
+                               $orig = array_slice( $from_lines, $xi, count( $orig ) );
+                               $xi += count( $orig );
                        }
 
                        $closing = &$this->edits[$i]->closing;
                        if ( is_array( $closing ) ) {
-                               $closing = array_slice( $to_lines, $yi, sizeof( $closing ) );
-                               $yi += sizeof( $closing );
+                               $closing = array_slice( $to_lines, $yi, count( $closing ) );
+                               $yi += count( $closing );
                        }
                }
                wfProfileOut( __METHOD__ );
@@ -900,7 +899,7 @@ class DiffFormatter {
                foreach ( $diff->edits as $edit ) {
                        if ( $edit->type == 'copy' ) {
                                if ( is_array( $block ) ) {
-                                       if ( sizeof( $edit->orig ) <= $nlead + $ntrail ) {
+                                       if ( count( $edit->orig ) <= $nlead + $ntrail ) {
                                                $block[] = $edit;
                                        } else {
                                                if ( $ntrail ) {
@@ -916,9 +915,9 @@ class DiffFormatter {
                                $context = $edit->orig;
                        } else {
                                if ( !is_array( $block ) ) {
-                                       $context = array_slice( $context, sizeof( $context ) - $nlead );
-                                       $x0 = $xi - sizeof( $context );
-                                       $y0 = $yi - sizeof( $context );
+                                       $context = array_slice( $context, count( $context ) - $nlead );
+                                       $x0 = $xi - count( $context );
+                                       $y0 = $yi - count( $context );
                                        $block = array();
                                        if ( $context ) {
                                                $block[] = new _DiffOp_Copy( $context );
@@ -928,10 +927,10 @@ class DiffFormatter {
                        }
 
                        if ( $edit->orig ) {
-                               $xi += sizeof( $edit->orig );
+                               $xi += count( $edit->orig );
                        }
                        if ( $edit->closing ) {
-                               $yi += sizeof( $edit->closing );
+                               $yi += count( $edit->closing );
                        }
                }
 
@@ -1365,7 +1364,7 @@ class TableDiffFormatter extends DiffFormatter {
         */
        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";
+                       '<td colspan="2" class="diff-lineno"><!--LINE ' . $ybeg . "--></td></tr>\n";
                return $r;
        }
 
index 6fcf0e8..a3239a3 100644 (file)
@@ -152,7 +152,7 @@ class DifferenceEngine extends ContextSource {
        function deletedLink( $id ) {
                if ( $this->getUser()->isAllowed( 'deletedhistory' ) ) {
                        $dbr = wfGetDB( DB_SLAVE );
-                       $row = $dbr->selectRow('archive', '*',
+                       $row = $dbr->selectRow( 'archive', '*',
                                array( 'ar_rev_id' => $id ),
                                __METHOD__ );
                        if ( $row ) {
@@ -294,8 +294,11 @@ class DifferenceEngine extends ContextSource {
 
                        if ( $samePage && $this->mNewPage->quickUserCan( 'edit', $user ) ) {
                                if ( $this->mNewRev->isCurrent() && $this->mNewPage->userCan( 'rollback', $user ) ) {
-                                       $out->preventClickjacking();
-                                       $rollback = '&#160;&#160;&#160;' . Linker::generateRollback( $this->mNewRev, $this->getContext() );
+                                       $rollbackLink = Linker::generateRollback( $this->mNewRev, $this->getContext() );
+                                       if ( $rollbackLink ) {
+                                               $out->preventClickjacking();
+                                               $rollback = '&#160;&#160;&#160;' . $rollbackLink;
+                                       }
                                }
                                if ( !$this->mOldRev->isDeleted( Revision::DELETED_TEXT ) && !$this->mNewRev->isDeleted( Revision::DELETED_TEXT ) ) {
                                        $undoLink = ' ' . $this->msg( 'parentheses' )->rawParams(
index 6672744..4ce9f19 100644 (file)
@@ -64,7 +64,7 @@ class WikiDiff3 {
 
        public function diff( /*array*/ $from, /*array*/ $to ) {
                // remember initial lengths
-               $m = sizeof( $from );
+               $m = count( $from );
                $n = count( $to );
 
                $this->heuristicUsed = false;
index 1b7c29d..5dd49d7 100644 (file)
@@ -1,6 +1,10 @@
 <?php
 /**
- * Data storage in external repositories.
+ * @defgroup ExternalStorage ExternalStorage
+ */
+
+/**
+ * Interface for data storage in external repositories.
  *
  * 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
  */
 
 /**
- * @defgroup ExternalStorage ExternalStorage
- */
-
-/**
- * Constructor class for data kept in external repositories
+ * Constructor class for key/value blob data kept in external repositories.
+ *
+ * Objects in external stores are defined by a special URL. The URL is of
+ * the form "<store protocal>://<location>/<object name>". The protocal is used
+ * to determine what ExternalStoreMedium class is used. The location identifies
+ * particular storage instances or database clusters for store class to use.
+ *
+ * When an object is inserted into a store, the calling code uses a partial URL of
+ * the form "<store protocal>://<location>" and receives the full object URL on success.
+ * This is useful since object names can be sequential IDs, UUIDs, or hashes.
+ * Callers are not responsible for unique name generation.
  *
  * External repositories might be populated by maintenance/async
  * scripts, thus partial moving of data may be possible, as well
- * as possibility to have any storage format (i.e. for archives)
+ * as the possibility to have any storage format (i.e. for archives).
  *
  * @ingroup ExternalStorage
  */
 class ExternalStore {
-       var $mParams;
-
        /**
-        * @param $params array
+        * Get an external store object of the given type, with the given parameters
+        *
+        * @param $proto string Type of external storage, should be a value in $wgExternalStores
+        * @param $params array Associative array of ExternalStoreMedium parameters
+        * @return ExternalStoreMedium|bool The store class or false on error
         */
-       function __construct( $params = array() ) {
-               $this->mParams = $params;
+       public static function getStoreObject( $proto, array $params = array() ) {
+               global $wgExternalStores;
+
+               if ( !$wgExternalStores || !in_array( $proto, $wgExternalStores ) ) {
+                       return false; // protocol not enabled
+               }
+
+               $class = 'ExternalStore' . ucfirst( $proto );
+               // Any custom modules should be added to $wgAutoLoadClasses for on-demand loading
+               return MWInit::classExists( $class ) ? new $class( $params ) : false;
        }
 
        /**
         * Fetch data from given URL
         *
-        * @param $url String: The URL of the text to get
-        * @param $params Array: associative array of parameters for the ExternalStore object.
+        * @param $url string The URL of the text to get
+        * @param $params array Associative array of ExternalStoreMedium parameters
         * @return string|bool The text stored or false on error
+        * @throws MWException
         */
-       static function fetchFromURL( $url, $params = array() ) {
-               global $wgExternalStores;
-
-               if( !$wgExternalStores ) {
-                       return false;
-               }
-
+       public static function fetchFromURL( $url, array $params = array() ) {
                $parts = explode( '://', $url, 2 );
-
                if ( count( $parts ) != 2 ) {
-                       return false;
+                       return false; // invalid URL
                }
 
                list( $proto, $path ) = $parts;
-
-               if ( $path == '' ) { // Bad URL
+               if ( $path == '' ) { // bad URL
                        return false;
                }
 
@@ -78,48 +91,32 @@ class ExternalStore {
        }
 
        /**
-        * Get an external store object of the given type, with the given parameters
+        * Store a data item to an external store, identified by a partial URL
+        * The protocol part is used to identify the class, the rest is passed to the
+        * class itself as a parameter.
         *
-        * @param $proto String: type of external storage, should be a value in $wgExternalStores
-        * @param $params Array: associative array of parameters for the ExternalStore object.
-        * @return ExternalStore|bool ExternalStore class or false on error
+        * @param $url String A partial external store URL ("<store type>://<location>")
+        * @param $data string
+        * @param $params array Associative array of ExternalStoreMedium parameters
+        * @return string|bool The URL of the stored data item, or false on error
+        * @throws MWException
         */
-       static function getStoreObject( $proto, $params = array() ) {
-               global $wgExternalStores;
-               if( !$wgExternalStores ) {
-                       return false;
-               }
-
-               /* Protocol not enabled */
-               if( !in_array( $proto, $wgExternalStores ) ) {
-                       return false;
+       public static function insert( $url, $data, array $params = array() ) {
+               $parts = explode( '://', $url, 2 );
+               if ( count( $parts ) != 2 ) {
+                       return false; // invalid URL
                }
 
-               $class = 'ExternalStore' . ucfirst( $proto );
-               /* Any custom modules should be added to $wgAutoLoadClasses for on-demand loading */
-               if( !MWInit::classExists( $class ) ) {
+               list( $proto, $path ) = $parts;
+               if ( $path == '' ) { // bad URL
                        return false;
                }
 
-               return new $class($params);
-       }
-
-       /**
-        * Store a data item to an external store, identified by a partial URL
-        * The protocol part is used to identify the class, the rest is passed to the
-        * class itself as a parameter.
-        * @param $url
-        * @param $data
-        * @param $params array
-        * @return string|bool The URL of the stored data item, or false on error
-        */
-       static function insert( $url, $data, $params = array() ) {
-               list( $proto, $params ) = explode( '://', $url, 2 );
                $store = self::getStoreObject( $proto, $params );
                if ( $store === false ) {
                        return false;
                } else {
-                       return $store->store( $params, $data );
+                       return $store->store( $path, $data );
                }
        }
 
@@ -128,53 +125,52 @@ class ExternalStore {
         * This function does not need a url param, it builds it by
         * itself. It also fails-over to the next possible clusters.
         *
-        * @param $data String
-        * @param $storageParams Array: associative array of parameters for the ExternalStore object.
-        * @throws MWException|DBConnectionError|DBQueryError
+        * @param $data string
+        * @param $params array Associative array of ExternalStoreMedium parameters
         * @return string|bool The URL of the stored data item, or false on error
+        * @throws MWException
         */
-       public static function insertToDefault( $data, $storageParams = array() ) {
+       public static function insertToDefault( $data, array $params = array() ) {
                global $wgDefaultExternalStore;
-               $tryStores = (array)$wgDefaultExternalStore;
+
                $error = false;
+               $tryStores = (array)$wgDefaultExternalStore;
                while ( count( $tryStores ) > 0 ) {
-                       $index = mt_rand(0, count( $tryStores ) - 1);
+                       $index = mt_rand( 0, count( $tryStores ) - 1 );
                        $storeUrl = $tryStores[$index];
-                       wfDebug( __METHOD__.": trying $storeUrl\n" );
-                       list( $proto, $params ) = explode( '://', $storeUrl, 2 );
-                       $store = self::getStoreObject( $proto, $storageParams );
+                       wfDebug( __METHOD__ . ": trying $storeUrl\n" );
+                       list( $proto, $path ) = explode( '://', $storeUrl, 2 );
+                       $store = self::getStoreObject( $proto, $params );
                        if ( $store === false ) {
                                throw new MWException( "Invalid external storage protocol - $storeUrl" );
                        }
                        try {
-                               $url = $store->store( $params, $data ); // Try to save the object
-                       } catch ( DBConnectionError $error ) {
-                               $url = false;
-                       } catch( DBQueryError $error ) {
+                               $url = $store->store( $path, $data ); // Try to save the object
+                       } catch ( MWException $error ) {
                                $url = false;
                        }
-                       if ( $url ) {
+                       if ( strlen( $url ) ) {
                                return $url; // Done!
                        } else {
                                unset( $tryStores[$index] ); // Don't try this one again!
                                $tryStores = array_values( $tryStores ); // Must have consecutive keys
-                               wfDebugLog( 'ExternalStorage', "Unable to store text to external storage $storeUrl" );
+                               wfDebugLog( 'ExternalStorage',
+                                       "Unable to store text to external storage $storeUrl" );
                        }
                }
                // All stores failed
                if ( $error ) {
-                       // Rethrow the last connection error
-                       throw $error;
+                       throw $error; // rethrow the last error
                } else {
                        throw new MWException( "Unable to store text to external storage" );
                }
        }
 
        /**
-        * @param $data
-        * @param $wiki
-        *
-        * @return string
+        * @param $data string
+        * @param $wiki string
+        * @return string|bool The URL of the stored data item, or false on error
+        * @throws MWException
         */
        public static function insertToForeignDefault( $data, $wiki ) {
                return self::insertToDefault( $data, array( 'wiki' => $wiki ) );
index 172e4f6..3857771 100644 (file)
  */
 
 /**
- * DB accessable external objects
+ * DB accessable external objects.
+ *
+ * In this system, each store "location" maps to a database "cluster".
+ * The clusters must be defined in the normal LBFactory configuration.
+ *
  * @ingroup ExternalStorage
  */
-class ExternalStoreDB {
+class ExternalStoreDB extends ExternalStoreMedium {
+       /**
+        * The URL returned is of the form of the form DB://cluster/id
+        * or DB://cluster/id/itemid for concatened storage.
+        *
+        * @see ExternalStoreMedium::fetchFromURL()
+        */
+       public function fetchFromURL( $url ) {
+               $path = explode( '/', $url );
+               $cluster = $path[2];
+               $id = $path[3];
+               if ( isset( $path[4] ) ) {
+                       $itemID = $path[4];
+               } else {
+                       $itemID = false;
+               }
+
+               $ret =& $this->fetchBlob( $cluster, $id, $itemID );
+
+               if ( $itemID !== false && $ret !== false ) {
+                       return $ret->getItem( $itemID );
+               }
+               return $ret;
+       }
 
        /**
-        * @param $params array
+        * @see ExternalStoreMedium::store()
         */
-       function __construct( $params = array() ) {
-               $this->mParams = $params;
+       public function store( $cluster, $data ) {
+               $dbw = $this->getMaster( $cluster );
+               $id = $dbw->nextSequenceValue( 'blob_blob_id_seq' );
+               $dbw->insert( $this->getTable( $dbw ),
+                       array( 'blob_id' => $id, 'blob_text' => $data ),
+                       __METHOD__ );
+               $id = $dbw->insertId();
+               if ( !$id ) {
+                       throw new MWException( __METHOD__.': no insert ID' );
+               }
+               if ( $dbw->getFlag( DBO_TRX ) ) {
+                       $dbw->commit( __METHOD__ );
+               }
+               return "DB://$cluster/$id";
        }
 
        /**
@@ -40,7 +79,7 @@ class ExternalStoreDB {
         * @return LoadBalancer object
         */
        function &getLoadBalancer( $cluster ) {
-               $wiki = isset($this->mParams['wiki']) ? $this->mParams['wiki'] : false;
+               $wiki = isset( $this->params['wiki'] ) ? $this->params['wiki'] : false;
 
                return wfGetLBFactory()->getExternalLB( $cluster, $wiki );
        }
@@ -54,12 +93,12 @@ class ExternalStoreDB {
        function &getSlave( $cluster ) {
                global $wgDefaultExternalStore;
 
-               $wiki = isset($this->mParams['wiki']) ? $this->mParams['wiki'] : false;
+               $wiki = isset( $this->params['wiki'] ) ? $this->params['wiki'] : false;
                $lb =& $this->getLoadBalancer( $cluster );
 
                if ( !in_array( "DB://" . $cluster, (array)$wgDefaultExternalStore ) ) {
                        wfDebug( "read only external store" );
-                       $lb->allowLagged(true);
+                       $lb->allowLagged( true );
                } else {
                        wfDebug( "writable external store" );
                }
@@ -74,7 +113,7 @@ class ExternalStoreDB {
         * @return DatabaseBase object
         */
        function &getMaster( $cluster ) {
-               $wiki = isset($this->mParams['wiki']) ? $this->mParams['wiki'] : false;
+               $wiki = isset( $this->params['wiki'] ) ? $this->params['wiki'] : false;
                $lb =& $this->getLoadBalancer( $cluster );
                return $lb->getConnection( DB_MASTER, array(), $wiki );
        }
@@ -93,29 +132,6 @@ class ExternalStoreDB {
                return $table;
        }
 
-       /**
-        * Fetch data from given URL
-        * @param $url String: an url of the form DB://cluster/id or DB://cluster/id/itemid for concatened storage.
-        * @return mixed
-        */
-       function fetchFromURL( $url ) {
-               $path = explode( '/', $url );
-               $cluster = $path[2];
-               $id = $path[3];
-               if ( isset( $path[4] ) ) {
-                       $itemID = $path[4];
-               } else {
-                       $itemID = false;
-               }
-
-               $ret =& $this->fetchBlob( $cluster, $id, $itemID );
-
-               if ( $itemID !== false && $ret !== false ) {
-                       return $ret->getItem( $itemID );
-               }
-               return $ret;
-       }
-
        /**
         * Fetch a blob item out of the database; a cache of the last-loaded
         * blob will be kept so that multiple loads out of a multi-item blob
@@ -162,28 +178,4 @@ class ExternalStoreDB {
                $externalBlobCache = array( $cacheID => &$ret );
                return $ret;
        }
-
-       /**
-        * Insert a data item into a given cluster
-        *
-        * @param $cluster String: the cluster name
-        * @param $data String: the data item
-        * @throws MWException
-        * @return string URL
-        */
-       function store( $cluster, $data ) {
-               $dbw = $this->getMaster( $cluster );
-               $id = $dbw->nextSequenceValue( 'blob_blob_id_seq' );
-               $dbw->insert( $this->getTable( $dbw ),
-                       array( 'blob_id' => $id, 'blob_text' => $data ),
-                       __METHOD__ );
-               $id = $dbw->insertId();
-               if ( !$id ) {
-                       throw new MWException( __METHOD__.': no insert ID' );
-               }
-               if ( $dbw->getFlag( DBO_TRX ) ) {
-                       $dbw->commit( __METHOD__ );
-               }
-               return "DB://$cluster/$id";
-       }
 }
index 311e32b..345c17b 100644 (file)
  *
  * @ingroup ExternalStorage
  */
-class ExternalStoreHttp {
-
+class ExternalStoreHttp extends ExternalStoreMedium {
        /**
-        * Fetch data from given URL
-        *
-        * @param $url String: the URL
-        * @return String: the content at $url
+        * @see ExternalStoreMedium::fetchFromURL()
         */
-       function fetchFromURL( $url ) {
-               $ret = Http::get( $url );
-               return $ret;
+       public function fetchFromURL( $url ) {
+               return Http::get( $url );
        }
 
-       /* XXX: may require other methods, for store, delete,
-        * whatever, for initial ext storage
+       /**
+        * @see ExternalStoreMedium::store()
         */
+       public function store( $cluster, $data ) {
+               throw new MWException( "ExternalStoreHttp is read-only and does not support store()." );
+       }
 }
diff --git a/includes/externalstore/ExternalStoreMedium.php b/includes/externalstore/ExternalStoreMedium.php
new file mode 100644 (file)
index 0000000..6794dd5
--- /dev/null
@@ -0,0 +1,58 @@
+<?php
+/**
+ * External storage in some particular medium.
+ *
+ * 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 ExternalStorage
+ * @author Aaron Schulz
+ */
+
+/**
+ * Accessable external objects
+ * @ingroup ExternalStorage
+ */
+abstract class ExternalStoreMedium {
+       /** @var Array */
+       protected $params = array();
+
+       /**
+        * @param $params array Options
+        */
+       public function __construct( array $params = array() ) {
+               $this->params = $params;
+       }
+
+       /**
+        * Fetch data from given external store URL
+        *
+        * @param $url string An external store URL
+        * @return string|bool The text stored or false on error
+        * @throws MWException
+        */
+       public abstract function fetchFromURL( $url );
+
+       /**
+        * Insert a data item into a given location
+        *
+        * @param $location string: the location name
+        * @param $data string: the data item
+        * @return string|bool The URL of the stored data item, or false on error
+        * @throws MWException
+        */
+       public abstract function store( $location, $data );
+}
index 5141ec5..acbc4a9 100644 (file)
@@ -104,7 +104,7 @@ class FSFile {
         */
        public function getProps( $ext = true ) {
                wfProfileIn( __METHOD__ );
-               wfDebug( __METHOD__.": Getting file info for $this->path\n" );
+               wfDebug( __METHOD__ . ": Getting file info for $this->path\n" );
 
                $info = self::placeholderProps();
                $info['fileExists'] = $this->exists();
@@ -140,9 +140,9 @@ class FSFile {
                        }
                        $info['sha1'] = $this->getSha1Base36();
 
-                       wfDebug(__METHOD__.": $this->path loaded, {$info['size']} bytes, {$info['mime']}.\n");
+                       wfDebug( __METHOD__ . ": $this->path loaded, {$info['size']} bytes, {$info['mime']}.\n" );
                } else {
-                       wfDebug(__METHOD__.": $this->path NOT FOUND!\n");
+                       wfDebug( __METHOD__ . ": $this->path NOT FOUND!\n" );
                }
 
                wfProfileOut( __METHOD__ );
index 3c23e4c..a1d46c1 100644 (file)
@@ -46,6 +46,7 @@ class FSFileBackend extends FileBackendStore {
        protected $fileOwner; // string; required OS username to own files
        protected $currentUser; // string; OS username running this script
 
+       /** @var Array */
        protected $hadWarningErrors = array();
 
        /**
@@ -196,7 +197,9 @@ class FSFileBackend extends FileBackendStore {
                                $status->fatal( 'backend-fail-create', $params['dst'] );
                                return $status;
                        }
+                       $this->trapWarnings();
                        $bytes = file_put_contents( $tempFile->getPath(), $params['content'] );
+                       $this->untrapWarnings();
                        if ( $bytes === false ) {
                                $status->fatal( 'backend-fail-create', $params['dst'] );
                                return $status;
@@ -209,7 +212,9 @@ class FSFileBackend extends FileBackendStore {
                        $status->value = new FSFileOpHandle( $this, $params, 'Create', $cmd, $dest );
                        $tempFile->bind( $status->value );
                } else { // immediate write
+                       $this->trapWarnings();
                        $bytes = file_put_contents( $dest, $params['content'] );
+                       $this->untrapWarnings();
                        if ( $bytes === false ) {
                                $status->fatal( 'backend-fail-create', $params['dst'] );
                                return $status;
@@ -251,7 +256,9 @@ class FSFileBackend extends FileBackendStore {
                        ) );
                        $status->value = new FSFileOpHandle( $this, $params, 'Store', $cmd, $dest );
                } else { // immediate write
+                       $this->trapWarnings();
                        $ok = copy( $params['src'], $dest );
+                       $this->untrapWarnings();
                        // In some cases (at least over NFS), copy() returns true when it fails
                        if ( !$ok || ( filesize( $params['src'] ) !== filesize( $dest ) ) ) {
                                if ( $ok ) { // PHP bug
@@ -311,11 +318,15 @@ class FSFileBackend extends FileBackendStore {
                        ) );
                        $status->value = new FSFileOpHandle( $this, $params, 'Copy', $cmd, $dest );
                } else { // immediate write
+                       $this->trapWarnings();
                        $ok = copy( $source, $dest );
+                       $this->untrapWarnings();
                        // In some cases (at least over NFS), copy() returns true when it fails
                        if ( !$ok || ( filesize( $source ) !== filesize( $dest ) ) ) {
                                if ( $ok ) { // PHP bug
+                                       $this->trapWarnings();
                                        unlink( $dest ); // remove broken file
+                                       $this->untrapWarnings();
                                        trigger_error( __METHOD__ . ": copy() failed but returned true." );
                                }
                                $status->fatal( 'backend-fail-copy', $params['src'], $params['dst'] );
@@ -371,7 +382,9 @@ class FSFileBackend extends FileBackendStore {
                        ) );
                        $status->value = new FSFileOpHandle( $this, $params, 'Move', $cmd );
                } else { // immediate write
+                       $this->trapWarnings();
                        $ok = rename( $source, $dest );
+                       $this->untrapWarnings();
                        clearstatcache(); // file no longer at source
                        if ( !$ok ) {
                                $status->fatal( 'backend-fail-move', $params['src'], $params['dst'] );
@@ -419,7 +432,9 @@ class FSFileBackend extends FileBackendStore {
                        ) );
                        $status->value = new FSFileOpHandle( $this, $params, 'Copy', $cmd );
                } else { // immediate write
+                       $this->trapWarnings();
                        $ok = unlink( $source );
+                       $this->untrapWarnings();
                        if ( !$ok ) {
                                $status->fatal( 'backend-fail-delete', $params['src'] );
                                return $status;
@@ -449,15 +464,18 @@ class FSFileBackend extends FileBackendStore {
                $contRoot = $this->containerFSRoot( $shortCont, $fullCont ); // must be valid
                $dir = ( $dirRel != '' ) ? "{$contRoot}/{$dirRel}" : $contRoot;
                $existed = is_dir( $dir ); // already there?
-               if ( !wfMkdirParents( $dir ) ) { // make directory and its parents
+               // Create the directory and its parents as needed...
+               $this->trapWarnings();
+               if ( !wfMkdirParents( $dir ) ) {
                        $status->fatal( 'directorycreateerror', $params['dir'] ); // fails on races
                } elseif ( !is_writable( $dir ) ) {
                        $status->fatal( 'directoryreadonlyerror', $params['dir'] );
                } elseif ( !is_readable( $dir ) ) {
                        $status->fatal( 'directorynotreadableerror', $params['dir'] );
                }
+               $this->untrapWarnings();
+               // Respect any 'noAccess' or 'noListing' flags...
                if ( is_dir( $dir ) && !$existed ) {
-                       // Respect any 'noAccess' or 'noListing' flags...
                        $status->merge( $this->doSecureInternal( $fullCont, $dirRel, $params ) );
                }
                return $status;
@@ -474,19 +492,21 @@ class FSFileBackend extends FileBackendStore {
                $dir = ( $dirRel != '' ) ? "{$contRoot}/{$dirRel}" : $contRoot;
                // Seed new directories with a blank index.html, to prevent crawling...
                if ( !empty( $params['noListing'] ) && !file_exists( "{$dir}/index.html" ) ) {
+                       $this->trapWarnings();
                        $bytes = file_put_contents( "{$dir}/index.html", $this->indexHtmlPrivate() );
+                       $this->untrapWarnings();
                        if ( $bytes === false ) {
                                $status->fatal( 'backend-fail-create', $params['dir'] . '/index.html' );
-                               return $status;
                        }
                }
                // Add a .htaccess file to the root of the container...
                if ( !empty( $params['noAccess'] ) && !file_exists( "{$contRoot}/.htaccess" ) ) {
+                       $this->trapWarnings();
                        $bytes = file_put_contents( "{$contRoot}/.htaccess", $this->htaccessPrivate() );
+                       $this->untrapWarnings();
                        if ( $bytes === false ) {
                                $storeDir = "mwstore://{$this->name}/{$shortCont}";
                                $status->fatal( 'backend-fail-create', "{$storeDir}/.htaccess" );
-                               return $status;
                        }
                }
                return $status;
@@ -504,19 +524,21 @@ class FSFileBackend extends FileBackendStore {
                // Unseed new directories with a blank index.html, to allow crawling...
                if ( !empty( $params['listing'] ) && is_file( "{$dir}/index.html" ) ) {
                        $exists = ( file_get_contents( "{$dir}/index.html" ) === $this->indexHtmlPrivate() );
+                       $this->trapWarnings();
                        if ( $exists && !unlink( "{$dir}/index.html" ) ) { // reverse secure()
                                $status->fatal( 'backend-fail-delete', $params['dir'] . '/index.html' );
-                               return $status;
                        }
+                       $this->untrapWarnings();
                }
                // Remove the .htaccess file from the root of the container...
                if ( !empty( $params['access'] ) && is_file( "{$contRoot}/.htaccess" ) ) {
                        $exists = ( file_get_contents( "{$contRoot}/.htaccess" ) === $this->htaccessPrivate() );
+                       $this->trapWarnings();
                        if ( $exists && !unlink( "{$contRoot}/.htaccess" ) ) { // reverse secure()
                                $storeDir = "mwstore://{$this->name}/{$shortCont}";
                                $status->fatal( 'backend-fail-delete', "{$storeDir}/.htaccess" );
-                               return $status;
                        }
+                       $this->untrapWarnings();
                }
                return $status;
        }
@@ -530,11 +552,11 @@ class FSFileBackend extends FileBackendStore {
                list( $b, $shortCont, $r ) = FileBackend::splitStoragePath( $params['dir'] );
                $contRoot = $this->containerFSRoot( $shortCont, $fullCont ); // must be valid
                $dir = ( $dirRel != '' ) ? "{$contRoot}/{$dirRel}" : $contRoot;
-               wfSuppressWarnings();
+               $this->trapWarnings();
                if ( is_dir( $dir ) ) {
                        rmdir( $dir ); // remove directory if empty
                }
-               wfRestoreWarnings();
+               $this->untrapWarnings();
                return $status;
        }
 
@@ -664,9 +686,9 @@ class FSFileBackend extends FileBackendStore {
                                } else {
                                        $tmpPath = $tmpFile->getPath();
                                        // Copy the source file over the temp file
-                                       wfSuppressWarnings();
+                                       $this->trapWarnings();
                                        $ok = copy( $source, $tmpPath );
-                                       wfRestoreWarnings();
+                                       $this->untrapWarnings();
                                        if ( !$ok ) {
                                                $tmpFiles[$src] = null;
                                        } else {
@@ -729,9 +751,9 @@ class FSFileBackend extends FileBackendStore {
         * @return bool Success
         */
        protected function chmod( $path ) {
-               wfSuppressWarnings();
+               $this->trapWarnings();
                $ok = chmod( $path, $this->fileMode );
-               wfRestoreWarnings();
+               $this->untrapWarnings();
 
                return $ok;
        }
@@ -767,12 +789,11 @@ class FSFileBackend extends FileBackendStore {
        /**
         * Listen for E_WARNING errors and track whether any happen
         *
-        * @return bool
+        * @return void
         */
        protected function trapWarnings() {
                $this->hadWarningErrors[] = false; // push to stack
                set_error_handler( array( $this, 'handleWarning' ), E_WARNING );
-               return false; // invoke normal PHP error handler
        }
 
        /**
@@ -786,9 +807,12 @@ class FSFileBackend extends FileBackendStore {
        }
 
        /**
+        * @param $errno integer
+        * @param $errstr string
         * @return bool
         */
-       private function handleWarning() {
+       private function handleWarning( $errno, $errstr ) {
+               wfDebugLog( 'FSFileBackend', $errstr ); // more detailed error logging
                $this->hadWarningErrors[count( $this->hadWarningErrors ) - 1] = true;
                return true; // suppress from PHP handler
        }
@@ -837,12 +861,15 @@ abstract class FSFileBackendList implements Iterator {
         * @param $params array
         */
        public function __construct( $dir, array $params ) {
-               $dir = realpath( $dir ); // normalize
-               $this->suffixStart = strlen( $dir ) + 1; // size of "path/to/dir/"
+               $path = realpath( $dir ); // normalize
+               if( $path === false ) {
+                       $path = $dir;
+               }
+               $this->suffixStart = strlen( $path ) + 1; // size of "path/to/dir/"
                $this->params = $params;
 
                try {
-                       $this->iter = $this->initIterator( $dir );
+                       $this->iter = $this->initIterator( $path );
                } catch ( UnexpectedValueException $e ) {
                        $this->iter = null; // bad permissions? deleted?
                }
@@ -934,8 +961,12 @@ abstract class FSFileBackendList implements Iterator {
         * @param $path string
         * @return string
         */
-       protected function getRelPath( $path ) {
-               return strtr( substr( realpath( $path ), $this->suffixStart ), '\\', '/' );
+       protected function getRelPath( $dir ) {
+               $path = realpath( $dir );
+               if( $path === false ) {
+                       $path = $dir;
+               }
+               return strtr( substr( $path, $this->suffixStart ), '\\', '/' );
        }
 }
 
index 0b7c072..a3e1de3 100644 (file)
@@ -77,6 +77,7 @@ abstract class FileBackend {
         *                   This should consist of alphanumberic, '-', and '_' characters.
         *                   This name should not be changed after use.
         *   - wikiId      : Prefix to container names that is unique to this wiki.
+        *                   If not provided, this defaults to the current wiki ID.
         *                   It should only consist of alphanumberic, '-', and '_' characters.
         *   - lockManager : Registered name of a file lock manager to use.
         *   - fileJournal : File journal configuration; see FileJournal::factory().
@@ -100,7 +101,7 @@ abstract class FileBackend {
                        : wfWikiID(); // e.g. "my_wiki-en_"
                $this->lockManager = ( $config['lockManager'] instanceof LockManager )
                        ? $config['lockManager']
-                       : LockManagerGroup::singleton()->get( $config['lockManager'] );
+                       : LockManagerGroup::singleton( $this->wikiId )->get( $config['lockManager'] );
                $this->fileJournal = isset( $config['fileJournal'] )
                        ? ( ( $config['fileJournal'] instanceof FileJournal )
                                ? $config['fileJournal']
@@ -313,6 +314,7 @@ abstract class FileBackend {
                if ( empty( $opts['force'] ) ) { // sanity
                        unset( $opts['nonLocking'] );
                }
+               $scope = $this->getScopedPHPBehaviorForOps(); // try to ignore client aborts
                return $this->doOperationsInternal( $ops, $opts );
        }
 
@@ -514,9 +516,9 @@ abstract class FileBackend {
         *                           header when GETs/HEADs of the destination file are made.
         *                           Backends that don't support file metadata will ignore this.
         *                           See http://tools.ietf.org/html/rfc6266 (since 1.20).
-        *   - headers             : If supplied, the backend will return these headers when
-        *                           GETs/HEADs of the destination file are made. Header values
-        *                           should be smaller than 256 bytes, often options or numbers.
+        *   - headers             : If supplied with a header name/value map, the backend will
+        *                           reply with these headers when GETs/HEADs of the destination
+        *                           file are made. Header values should be smaller than 256 bytes.
         *                           Existing headers will remain, but these will replace any
         *                           conflicting previous headers, and headers will be removed
         *                           if they are set to an empty string.
@@ -543,6 +545,7 @@ abstract class FileBackend {
                foreach ( $ops as &$op ) {
                        $op['overwrite'] = true; // avoids RTTs in key/value stores
                }
+               $scope = $this->getScopedPHPBehaviorForOps(); // try to ignore client aborts
                return $this->doQuickOperationsInternal( $ops );
        }
 
@@ -686,6 +689,7 @@ abstract class FileBackend {
                if ( empty( $params['bypassReadOnly'] ) && $this->isReadOnly() ) {
                        return Status::newFatal( 'backend-fail-readonly', $this->name, $this->readOnly );
                }
+               $scope = $this->getScopedPHPBehaviorForOps(); // try to ignore client aborts
                return $this->doPrepare( $params );
        }
 
@@ -713,6 +717,7 @@ abstract class FileBackend {
                if ( empty( $params['bypassReadOnly'] ) && $this->isReadOnly() ) {
                        return Status::newFatal( 'backend-fail-readonly', $this->name, $this->readOnly );
                }
+               $scope = $this->getScopedPHPBehaviorForOps(); // try to ignore client aborts
                return $this->doSecure( $params );
        }
 
@@ -741,6 +746,7 @@ abstract class FileBackend {
                if ( empty( $params['bypassReadOnly'] ) && $this->isReadOnly() ) {
                        return Status::newFatal( 'backend-fail-readonly', $this->name, $this->readOnly );
                }
+               $scope = $this->getScopedPHPBehaviorForOps(); // try to ignore client aborts
                return $this->doPublish( $params );
        }
 
@@ -765,6 +771,7 @@ abstract class FileBackend {
                if ( empty( $params['bypassReadOnly'] ) && $this->isReadOnly() ) {
                        return Status::newFatal( 'backend-fail-readonly', $this->name, $this->readOnly );
                }
+               $scope = $this->getScopedPHPBehaviorForOps(); // try to ignore client aborts
                return $this->doClean( $params );
        }
 
@@ -773,6 +780,21 @@ abstract class FileBackend {
         */
        abstract protected function doClean( array $params );
 
+       /**
+        * Enter file operation scope.
+        * This just makes PHP ignore user aborts/disconnects until the return
+        * value leaves scope. This returns null and does nothing in CLI mode.
+        *
+        * @return ScopedCallback|null
+        */
+       final protected function getScopedPHPBehaviorForOps() {
+               if ( php_sapi_name() != 'cli' ) { // http://bugs.php.net/bug.php?id=47540
+                       $old = ignore_user_abort( true ); // avoid half-finished operations
+                       return new ScopedCallback( function() use ( $old ) { ignore_user_abort( $old ); } );
+               }
+               return null;
+       }
+
        /**
         * Check if a file exists at a storage path in the backend.
         * This returns false if only a directory exists at the path.
index 8bbc96d..0bf5279 100644 (file)
@@ -87,6 +87,9 @@ class FileBackendGroup {
                        $thumbDir = isset( $info['thumbDir'] )
                                ? $info['thumbDir']
                                : "{$directory}/thumb";
+                       $transcodedDir = isset( $info['transcodedDir'] )
+                               ? $info['transcodedDir']
+                               : "{$directory}/transcoded";
                        $fileMode = isset( $info['fileMode'] )
                                ? $info['fileMode']
                                : 0644;
@@ -98,6 +101,7 @@ class FileBackendGroup {
                                'containerPaths' => array(
                                        "{$repoName}-public"  => "{$directory}",
                                        "{$repoName}-thumb"   => $thumbDir,
+                                       "{$repoName}-transcoded"   => $transcodedDir,
                                        "{$repoName}-deleted" => $deletedDir,
                                        "{$repoName}-temp"    => "{$directory}/temp"
                                ),
@@ -122,7 +126,9 @@ class FileBackendGroup {
                                throw new MWException( "Cannot register a backend with no name." );
                        }
                        $name = $config['name'];
-                       if ( !isset( $config['class'] ) ) {
+                       if ( isset( $this->backends[$name] ) ) {
+                               throw new MWException( "Backend with name `{$name}` already registered." );
+                       } elseif ( !isset( $config['class'] ) ) {
                                throw new MWException( "Cannot register backend `{$name}` with no class." );
                        }
                        $class = $config['class'];
index 7952bcb..28f5b73 100644 (file)
@@ -167,7 +167,7 @@ abstract class FileOp {
         * @return Array
         */
        final public function applyDependencies( array $deps ) {
-               $deps['read']  += array_fill_keys( $this->storagePathsRead(), 1 );
+               $deps['read'] += array_fill_keys( $this->storagePathsRead(), 1 );
                $deps['write'] += array_fill_keys( $this->storagePathsChanged(), 1 );
                return $deps;
        }
index f4457de..d825d04 100644 (file)
@@ -46,6 +46,10 @@ class SwiftFileBackend extends FileBackendStore {
        protected $swiftCDNExpiry; // integer; how long to cache things in the CDN
        protected $swiftCDNPurgable; // boolean; whether object CDN purging is enabled
 
+       // Rados Gateway specific options
+       protected $rgwS3AccessKey; // string; S3 access key
+       protected $rgwS3SecretKey; // string; S3 authentication key
+
        /** @var CF_Connection */
        protected $conn; // Swift connection handle
        protected $sessionStarted = 0; // integer UNIX timestamp
@@ -87,6 +91,16 @@ class SwiftFileBackend extends FileBackendStore {
         *   - cacheAuthInfo      : Whether to cache authentication tokens in APC, XCache, ect.
         *                          If those are not available, then the main cache will be used.
         *                          This is probably insecure in shared hosting environments.
+        *   - rgwS3AccessKey     : Ragos Gateway S3 "access key" value on the account.
+        *                          Do not set this until it has been set in the backend.
+        *                          This is used for generating expiring pre-authenticated URLs.
+        *                          Only use this when using rgw and to work around
+        *                          http://tracker.newdream.net/issues/3454.
+        *   - rgwS3SecretKey     : Ragos Gateway S3 "secret key" value on the account.
+        *                          Do not set this until it has been set in the backend.
+        *                          This is used for generating expiring pre-authenticated URLs.
+        *                          Only use this when using rgw and to work around
+        *                          http://tracker.newdream.net/issues/3454.
         */
        public function __construct( array $config ) {
                parent::__construct( $config );
@@ -122,13 +136,19 @@ class SwiftFileBackend extends FileBackendStore {
                $this->swiftCDNPurgable = isset( $config['swiftCDNPurgable'] )
                        ? $config['swiftCDNPurgable']
                        : true;
+               $this->rgwS3AccessKey = isset( $config['rgwS3AccessKey'] )
+                       ? $config['rgwS3AccessKey']
+                       : '';
+               $this->rgwS3SecretKey = isset( $config['rgwS3SecretKey'] )
+                       ? $config['rgwS3SecretKey']
+                       : '';
                // Cache container information to mask latency
                $this->memCache = wfGetMainCache();
                // Process cache for container info
                $this->connContainerCache = new ProcessCacheLRU( 300 );
                // Cache auth token information to avoid RTTs
                if ( !empty( $config['cacheAuthInfo'] ) ) {
-                       if ( php_sapi_name() === 'cli' ) {
+                       if ( PHP_SAPI === 'cli' ) {
                                $this->srvCache = wfGetMainCache(); // preferrably memcached
                        } else {
                                try { // look for APC, XCache, WinCache, ect...
@@ -968,7 +988,7 @@ class SwiftFileBackend extends FileBackendStore {
                                $objects = $container->list_objects( $limit, $after, $prefix );
                                foreach ( $objects as $object ) { // files
                                        $objectDir = $this->getParentDir( $object ); // directory of object
-                                       if ( $objectDir !== false ) { // file has a parent dir
+                                       if ( $objectDir !== false && $objectDir !== $dir ) {
                                                // Swift stores paths in UTF-8, using binary sorting.
                                                // See function "create_container_table" in common/db.py.
                                                // If a directory is not "greater" than the last one,
@@ -1180,7 +1200,9 @@ class SwiftFileBackend extends FileBackendStore {
         * @return string|null
         */
        public function getFileHttpUrl( array $params ) {
-               if ( $this->swiftTempUrlKey != '' ) { // temp urls enabled
+               if ( $this->swiftTempUrlKey != '' ||
+                       ( $this->rgwS3AccessKey != '' && $this->rgwS3SecretKey != '' ) )
+               {
                        list( $srcCont, $srcRel ) = $this->resolveStoragePathReal( $params['src'] );
                        if ( $srcRel === null ) {
                                return null; // invalid path
@@ -1188,7 +1210,31 @@ class SwiftFileBackend extends FileBackendStore {
                        try {
                                $sContObj = $this->getContainer( $srcCont );
                                $obj = new CF_Object( $sContObj, $srcRel, false, false ); // skip HEAD
-                               return $obj->get_temp_url( $this->swiftTempUrlKey, 86400, "GET" );
+                               if ( $this->swiftTempUrlKey != '' ) {
+                                       return $obj->get_temp_url( $this->swiftTempUrlKey, 86400, "GET" );
+                               } else { // give S3 API URL for rgw
+                                       $expires = time() + 86400;
+                                       // Path for signature starts with the bucket
+                                       $spath = '/' . rawurlencode( $srcCont ) . '/' .
+                                               str_replace( '%2F', '/', rawurlencode( $srcRel ) );
+                                       // Calculate the hash
+                                       $signature = base64_encode( hash_hmac(
+                                               'sha1',
+                                               "GET\n\n\n{$expires}\n{$spath}",
+                                               $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(
+                                               str_replace( '/swift/v1', '', // S3 API is the rgw default
+                                                       $sContObj->cfs_http->getStorageUrl() . $spath ),
+                                               array(
+                                                       'Signature'      => $signature,
+                                                       'Expires'        => $expires,
+                                                       'AWSAccessKeyId' => $this->rgwS3AccessKey )
+                                       );
+                               }
                        } catch ( NoSuchContainerException $e ) {
                        } catch ( CloudFilesException $e ) { // some other exception?
                                $this->handleException( $e, null, __METHOD__, $params );
@@ -1237,8 +1283,8 @@ class SwiftFileBackend extends FileBackendStore {
                $cfOps = $batch->execute();
                foreach ( $cfOps as $index => $cfOp ) {
                        $status = Status::newGood();
+                       $function = '_getResponse' . $fileOpHandles[$index]->call;
                        try { // catch exceptions; update status
-                               $function = '_getResponse' . $fileOpHandles[$index]->call;
                                $this->$function( $cfOp, $status, $fileOpHandles[$index]->params );
                                $this->purgeCDNCache( $fileOpHandles[$index]->affectedObjects );
                        } catch ( CloudFilesException $e ) { // some other exception?
@@ -1256,12 +1302,12 @@ class SwiftFileBackend extends FileBackendStore {
         *
         * $readGrps is a 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
-        *                          matches the expression and the request is not for a listing.
-        *                          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 for a listing.
+        *   - 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
+        *                           matches the expression and the request is not for a listing.
+        *                           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 for a listing.
         *
         * $writeGrps is a list of the possible criteria for a request to have
         * access to write to a container. Each item is of the following format:
index a8fe258..7b365c1 100644 (file)
@@ -22,7 +22,8 @@
  */
 
 /**
- * Version of LockManager based on using DB table locks.
+ * Version of LockManager based on using DB table row locks.
+ *
  * This is meant for multi-wiki systems that may share files.
  * All locks are blocking, so it might be useful to set a small
  * lock-wait timeout via server config to curtail deadlocks.
@@ -67,6 +68,7 @@ class DBLockManager extends QuorumLockManager {
         *                   each having an odd-numbered list of DB names (peers) as values.
         *                   Any DB named 'localDBMaster' will automatically use the DB master
         *                   settings for this wiki (without the need for a dbServers entry).
+        *                   Only use 'localDBMaster' if the domain is a valid wiki ID.
         *   - 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.
@@ -122,7 +124,7 @@ class DBLockManager extends QuorumLockManager {
 
                if ( $type == self::LOCK_EX ) { // writer locks
                        try {
-                               $keys = array_unique( array_map( 'LockManager::sha1Base36', $paths ) );
+                               $keys = array_unique( array_map( array( $this, 'sha1Base36Absolute' ), $paths ) );
                                # Build up values for INSERT clause
                                $data = array();
                                foreach ( $keys as $key ) {
@@ -197,8 +199,8 @@ class DBLockManager extends QuorumLockManager {
                if ( !isset( $this->conns[$lockDb] ) ) {
                        $db = null;
                        if ( $lockDb === 'localDBMaster' ) {
-                               $lb = wfGetLBFactory()->newMainLB();
-                               $db = $lb->getConnection( DB_MASTER );
+                               $lb = wfGetLBFactory()->getMainLB( $this->domain );
+                               $db = $lb->getConnection( DB_MASTER, array(), $this->domain );
                        } elseif ( isset( $this->dbServers[$lockDb] ) ) {
                                $config = $this->dbServers[$lockDb];
                                $db = DatabaseBase::factory( $config['type'], $config );
@@ -321,7 +323,7 @@ class MySqlLockManager extends DBLockManager {
                $status = Status::newGood();
 
                $db = $this->getConnection( $lockSrv ); // checked in isServerUp()
-               $keys = array_unique( array_map( 'LockManager::sha1Base36', $paths ) );
+               $keys = array_unique( array_map( array( $this, 'sha1Base36Absolute' ), $paths ) );
                # Build up values for INSERT clause
                $data = array();
                foreach ( $keys as $key ) {
index 9a6206f..f374fdd 100644 (file)
@@ -237,8 +237,7 @@ class FSLockManager extends LockManager {
         * @return string
         */
        protected function getLockPath( $path ) {
-               $hash = self::sha1Base36( $path );
-               return "{$this->lockDir}/{$hash}.lock";
+               return "{$this->lockDir}/{$this->sha1Base36Absolute( $path )}.lock";
        }
 
        /**
index 3de6183..96d37ab 100644 (file)
@@ -94,7 +94,7 @@ class LSLockManager extends QuorumLockManager {
 
                // Send out the command and get the response...
                $type = ( $type == self::LOCK_SH ) ? 'SH' : 'EX';
-               $keys = array_unique( array_map( 'LockManager::sha1Base36', $paths ) );
+               $keys = array_unique( array_map( array( $this, 'sha1Base36Absolute' ), $paths ) );
                $response = $this->sendCommand( $lockSrv, 'ACQUIRE', $type, $keys );
 
                if ( $response !== 'ACQUIRED' ) {
@@ -115,7 +115,7 @@ class LSLockManager extends QuorumLockManager {
 
                // Send out the command and get the response...
                $type = ( $type == self::LOCK_SH ) ? 'SH' : 'EX';
-               $keys = array_unique( array_map( 'LockManager::sha1Base36', $paths ) );
+               $keys = array_unique( array_map( array( $this, 'sha1Base36Absolute' ), $paths ) );
                $response = $this->sendCommand( $lockSrv, 'RELEASE', $type, $keys );
 
                if ( $response !== 'RELEASED' ) {
index 51454a4..f988ff4 100644 (file)
@@ -53,6 +53,8 @@ abstract class LockManager {
        /** @var Array Map of (resource path => lock type => count) */
        protected $locksHeld = array();
 
+       protected $domain; // string; domain (usually wiki ID)
+
        /* Lock types; stronger locks have higher values */
        const LOCK_SH = 1; // shared lock (for reads)
        const LOCK_UW = 2; // shared lock (for reads used to write elsewhere)
@@ -61,9 +63,14 @@ abstract class LockManager {
        /**
         * Construct a new instance from configuration
         *
+        * $config paramaters include:
+        *   - domain : Domain (usually wiki ID) that all resources are relative to [optional]
+        *
         * @param $config Array
         */
-       public function __construct( array $config ) {}
+       public function __construct( array $config ) {
+               $this->domain = isset( $config['domain'] ) ? $config['domain'] : wfWikiID();
+       }
 
        /**
         * Lock the resources at the given abstract paths
@@ -94,13 +101,15 @@ abstract class LockManager {
        }
 
        /**
-        * Get the base 36 SHA-1 of a string, padded to 31 digits
+        * Get the base 36 SHA-1 of a string, padded to 31 digits.
+        * 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
         * @return string
         */
-       final protected static function sha1Base36( $path ) {
-               return wfBaseConvert( sha1( $path ), 16, 36, 31 );
+       final protected function sha1Base36Absolute( $path ) {
+               return wfBaseConvert( sha1( "{$this->domain}:{$path}" ), 16, 36, 31 );
        }
 
        /**
@@ -122,216 +131,6 @@ abstract class LockManager {
        abstract protected function doUnlock( array $paths, $type );
 }
 
-/**
- * Version of LockManager that uses a quorum from peer servers for locks.
- * The resource space can also be sharded into separate peer groups.
- *
- * @ingroup LockManager
- * @since 1.20
- */
-abstract class QuorumLockManager extends LockManager {
-       /** @var Array Map of bucket indexes to peer server lists */
-       protected $srvsByBucket = array(); // (bucket index => (lsrv1, lsrv2, ...))
-
-       /**
-        * @see LockManager::doLock()
-        * @param $paths array
-        * @param $type int
-        * @return Status
-        */
-       final protected function doLock( array $paths, $type ) {
-               $status = Status::newGood();
-
-               $pathsToLock = array(); // (bucket => paths)
-               // Get locks that need to be acquired (buckets => locks)...
-               foreach ( $paths as $path ) {
-                       if ( isset( $this->locksHeld[$path][$type] ) ) {
-                               ++$this->locksHeld[$path][$type];
-                       } elseif ( isset( $this->locksHeld[$path][self::LOCK_EX] ) ) {
-                               $this->locksHeld[$path][$type] = 1;
-                       } else {
-                               $bucket = $this->getBucketFromKey( $path );
-                               $pathsToLock[$bucket][] = $path;
-                       }
-               }
-
-               $lockedPaths = array(); // files locked in this attempt
-               // Attempt to acquire these locks...
-               foreach ( $pathsToLock as $bucket => $paths ) {
-                       // Try to acquire the locks for this bucket
-                       $status->merge( $this->doLockingRequestBucket( $bucket, $paths, $type ) );
-                       if ( !$status->isOK() ) {
-                               $status->merge( $this->doUnlock( $lockedPaths, $type ) );
-                               return $status;
-                       }
-                       // Record these locks as active
-                       foreach ( $paths as $path ) {
-                               $this->locksHeld[$path][$type] = 1; // locked
-                       }
-                       // Keep track of what locks were made in this attempt
-                       $lockedPaths = array_merge( $lockedPaths, $paths );
-               }
-
-               return $status;
-       }
-
-       /**
-        * @see LockManager::doUnlock()
-        * @param $paths array
-        * @param $type int
-        * @return Status
-        */
-       final protected function doUnlock( array $paths, $type ) {
-               $status = Status::newGood();
-
-               $pathsToUnlock = array();
-               foreach ( $paths as $path ) {
-                       if ( !isset( $this->locksHeld[$path][$type] ) ) {
-                               $status->warning( 'lockmanager-notlocked', $path );
-                       } else {
-                               --$this->locksHeld[$path][$type];
-                               // Reference count the locks held and release locks when zero
-                               if ( $this->locksHeld[$path][$type] <= 0 ) {
-                                       unset( $this->locksHeld[$path][$type] );
-                                       $bucket = $this->getBucketFromKey( $path );
-                                       $pathsToUnlock[$bucket][] = $path;
-                               }
-                               if ( !count( $this->locksHeld[$path] ) ) {
-                                       unset( $this->locksHeld[$path] ); // no SH or EX locks left for key
-                               }
-                       }
-               }
-
-               // Remove these specific locks if possible, or at least release
-               // all locks once this process is currently not holding any locks.
-               foreach ( $pathsToUnlock as $bucket => $paths ) {
-                       $status->merge( $this->doUnlockingRequestBucket( $bucket, $paths, $type ) );
-               }
-               if ( !count( $this->locksHeld ) ) {
-                       $status->merge( $this->releaseAllLocks() );
-               }
-
-               return $status;
-       }
-
-       /**
-        * 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 $paths Array List of resource keys to lock
-        * @param $type integer LockManager::LOCK_EX or LockManager::LOCK_SH
-        * @return Status
-        */
-       final protected function doLockingRequestBucket( $bucket, array $paths, $type ) {
-               $status = Status::newGood();
-
-               $yesVotes = 0; // locks made on trustable servers
-               $votesLeft = count( $this->srvsByBucket[$bucket] ); // remaining peers
-               $quorum = floor( $votesLeft/2 + 1 ); // simple majority
-               // Get votes for each peer, in order, until we have enough...
-               foreach ( $this->srvsByBucket[$bucket] as $lockSrv ) {
-                       if ( !$this->isServerUp( $lockSrv ) ) {
-                               --$votesLeft;
-                               $status->warning( 'lockmanager-fail-svr-acquire', $lockSrv );
-                               continue; // server down?
-                       }
-                       // Attempt to acquire the lock on this peer
-                       $status->merge( $this->getLocksOnServer( $lockSrv, $paths, $type ) );
-                       if ( !$status->isOK() ) {
-                               return $status; // vetoed; resource locked
-                       }
-                       ++$yesVotes; // success for this peer
-                       if ( $yesVotes >= $quorum ) {
-                               return $status; // lock obtained
-                       }
-                       --$votesLeft;
-                       $votesNeeded = $quorum - $yesVotes;
-                       if ( $votesNeeded > $votesLeft ) {
-                               break; // short-circuit
-                       }
-               }
-               // At this point, we must not have met the quorum
-               $status->setResult( false );
-
-               return $status;
-       }
-
-       /**
-        * Attempt to release locks with the peers for a bucket
-        *
-        * @param $bucket integer
-        * @param $paths Array List of resource keys to lock
-        * @param $type integer LockManager::LOCK_EX or LockManager::LOCK_SH
-        * @return Status
-        */
-       final protected function doUnlockingRequestBucket( $bucket, array $paths, $type ) {
-               $status = Status::newGood();
-
-               foreach ( $this->srvsByBucket[$bucket] as $lockSrv ) {
-                       if ( !$this->isServerUp( $lockSrv ) ) {
-                               $status->fatal( 'lockmanager-fail-svr-release', $lockSrv );
-                       // Attempt to release the lock on this peer
-                       } else {
-                               $status->merge( $this->freeLocksOnServer( $lockSrv, $paths, $type ) );
-                       }
-               }
-
-               return $status;
-       }
-
-       /**
-        * Get the bucket for resource path.
-        * This should avoid throwing any exceptions.
-        *
-        * @param $path string
-        * @return integer
-        */
-       protected function getBucketFromKey( $path ) {
-               $prefix = substr( sha1( $path ), 0, 2 ); // first 2 hex chars (8 bits)
-               return (int)base_convert( $prefix, 16, 10 ) % count( $this->srvsByBucket );
-       }
-
-       /**
-        * Check if a lock server is up
-        *
-        * @param $lockSrv string
-        * @return bool
-        */
-       abstract protected function isServerUp( $lockSrv );
-
-       /**
-        * Get a connection to a lock server and acquire locks on $paths
-        *
-        * @param $lockSrv string
-        * @param $paths array
-        * @param $type integer
-        * @return Status
-        */
-       abstract protected function getLocksOnServer( $lockSrv, array $paths, $type );
-
-       /**
-        * Get a connection to a lock server and release locks on $paths.
-        *
-        * Subclasses must effectively implement this or releaseAllLocks().
-        *
-        * @param $lockSrv string
-        * @param $paths array
-        * @param $type integer
-        * @return Status
-        */
-       abstract protected function freeLocksOnServer( $lockSrv, array $paths, $type );
-
-       /**
-        * Release all locks that this session is holding.
-        *
-        * Subclasses must effectively implement this or freeLocksOnServer().
-        *
-        * @return Status
-        */
-       abstract protected function releaseAllLocks();
-}
-
 /**
  * Simple version of LockManager that does nothing
  * @since 1.19
index 8c8c940..f0d5818 100644 (file)
  * @since 1.19
  */
 class LockManagerGroup {
-       /**
-        * @var LockManagerGroup
-        */
-       protected static $instance = null;
+       /** @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();
 
-       protected function __construct() {}
+       /**
+        * @param $domain string Domain (usually wiki ID)
+        */
+       protected function __construct( $domain ) {
+               $this->domain = $domain;
+       }
 
        /**
+        * @param $domain string Domain (usually wiki ID)
         * @return LockManagerGroup
         */
-       public static function singleton() {
-               if ( self::$instance == null ) {
-                       self::$instance = new self();
-                       self::$instance->initFromGlobals();
+       public static function singleton( $domain = false ) {
+               $domain = ( $domain === false ) ? wfWikiID() : $domain;
+               if ( !isset( self::$instances[$domain] ) ) {
+                       self::$instances[$domain] = new self( $domain );
+                       self::$instances[$domain]->initFromGlobals();
                }
-               return self::$instance;
+               return self::$instances[$domain];
        }
 
        /**
-        * Destroy the singleton instance, so that a new one will be created next
-        * time singleton() is called.
+        * Destroy the singleton instances
+        *
+        * @return void
         */
-       public static function destroySingleton() {
-               self::$instance = null;
+       public static function destroySingletons() {
+               self::$instances = array();
        }
 
        /**
@@ -78,6 +86,7 @@ class LockManagerGroup {
         */
        protected function register( array $configs ) {
                foreach ( $configs as $config ) {
+                       $config['domain'] = $this->domain;
                        if ( !isset( $config['name'] ) ) {
                                throw new MWException( "Cannot register a lock manager with no name." );
                        }
@@ -115,6 +124,21 @@ class LockManagerGroup {
                return $this->managers[$name]['instance'];
        }
 
+       /**
+        * Get the config array for a lock manager object with a given name
+        *
+        * @param $name string
+        * @return Array
+        * @throws MWException
+        */
+       public function config( $name ) {
+               if ( !isset( $this->managers[$name] ) ) {
+                       throw new MWException( "No lock manager defined with the name `$name`." );
+               }
+               $class = $this->managers[$name]['class'];
+               return array( 'class' => $class ) + $this->managers[$name]['config'];
+       }
+
        /**
         * Get the default lock manager configured for the site.
         * Returns NullLockManager if no lock manager could be found.
index b8e25e7..099f11d 100644 (file)
@@ -50,7 +50,6 @@ class MemcLockManager extends QuorumLockManager {
 
        protected $lockExpiry; // integer; maximum time locks can be held
        protected $session = ''; // string; random SHA-1 UUID
-       protected $wikiId = ''; // string
 
        /**
         * Construct a new instance from configuration.
@@ -61,7 +60,6 @@ class MemcLockManager extends QuorumLockManager {
         *                    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.
-        *   - wikiId       : Wiki ID string that all resources are relative to. [optional]
         *
         * @param Array $config
         * @throws MWException
@@ -88,8 +86,6 @@ class MemcLockManager extends QuorumLockManager {
                        }
                }
 
-               $this->wikiId = isset( $config['wikiId'] ) ? $config['wikiId'] : wfWikiID();
-
                $met = ini_get( 'max_execution_time' ); // this is 0 in CLI mode
                $this->lockExpiry = $met ? 2*(int)$met : 2*3600;
 
@@ -111,7 +107,7 @@ class MemcLockManager extends QuorumLockManager {
                        foreach ( $paths as $path ) {
                                $status->fatal( 'lockmanager-fail-acquirelock', $path );
                        }
-                       return; // FIXME: Should return a Status object
+                       return $status;
                }
 
                // Fetch all the existing lock records...
@@ -252,9 +248,7 @@ class MemcLockManager extends QuorumLockManager {
         * @return string
         */
        protected function recordKeyForPath( $path ) {
-               $hash = LockManager::sha1Base36( $path );
-               list( $db, $prefix ) = wfSplitWikiID( $this->wikiId );
-               return wfForeignMemcKey( $db, $prefix, __CLASS__, 'locks', $hash );
+               return implode( ':', array( __CLASS__, 'locks', $this->sha1Base36Absolute( $path ) ) );
        }
 
        /**
diff --git a/includes/filebackend/lockmanager/QuorumLockManager.php b/includes/filebackend/lockmanager/QuorumLockManager.php
new file mode 100644 (file)
index 0000000..76a3ad6
--- /dev/null
@@ -0,0 +1,232 @@
+<?php
+/**
+ * Version of LockManager that uses a quorum from peer servers for locks.
+ *
+ * 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 LockManager
+ */
+
+/**
+ * Version of LockManager that uses a quorum from peer servers for locks.
+ * The resource space can also be sharded into separate peer groups.
+ *
+ * @ingroup LockManager
+ * @since 1.20
+ */
+abstract class QuorumLockManager extends LockManager {
+       /** @var Array Map of bucket indexes to peer server lists */
+       protected $srvsByBucket = array(); // (bucket index => (lsrv1, lsrv2, ...))
+
+       /**
+        * @see LockManager::doLock()
+        * @param $paths array
+        * @param $type int
+        * @return Status
+        */
+       final protected function doLock( array $paths, $type ) {
+               $status = Status::newGood();
+
+               $pathsToLock = array(); // (bucket => paths)
+               // Get locks that need to be acquired (buckets => locks)...
+               foreach ( $paths as $path ) {
+                       if ( isset( $this->locksHeld[$path][$type] ) ) {
+                               ++$this->locksHeld[$path][$type];
+                       } elseif ( isset( $this->locksHeld[$path][self::LOCK_EX] ) ) {
+                               $this->locksHeld[$path][$type] = 1;
+                       } else {
+                               $bucket = $this->getBucketFromPath( $path );
+                               $pathsToLock[$bucket][] = $path;
+                       }
+               }
+
+               $lockedPaths = array(); // files locked in this attempt
+               // Attempt to acquire these locks...
+               foreach ( $pathsToLock as $bucket => $paths ) {
+                       // Try to acquire the locks for this bucket
+                       $status->merge( $this->doLockingRequestBucket( $bucket, $paths, $type ) );
+                       if ( !$status->isOK() ) {
+                               $status->merge( $this->doUnlock( $lockedPaths, $type ) );
+                               return $status;
+                       }
+                       // Record these locks as active
+                       foreach ( $paths as $path ) {
+                               $this->locksHeld[$path][$type] = 1; // locked
+                       }
+                       // Keep track of what locks were made in this attempt
+                       $lockedPaths = array_merge( $lockedPaths, $paths );
+               }
+
+               return $status;
+       }
+
+       /**
+        * @see LockManager::doUnlock()
+        * @param $paths array
+        * @param $type int
+        * @return Status
+        */
+       final protected function doUnlock( array $paths, $type ) {
+               $status = Status::newGood();
+
+               $pathsToUnlock = array();
+               foreach ( $paths as $path ) {
+                       if ( !isset( $this->locksHeld[$path][$type] ) ) {
+                               $status->warning( 'lockmanager-notlocked', $path );
+                       } else {
+                               --$this->locksHeld[$path][$type];
+                               // Reference count the locks held and release locks when zero
+                               if ( $this->locksHeld[$path][$type] <= 0 ) {
+                                       unset( $this->locksHeld[$path][$type] );
+                                       $bucket = $this->getBucketFromPath( $path );
+                                       $pathsToUnlock[$bucket][] = $path;
+                               }
+                               if ( !count( $this->locksHeld[$path] ) ) {
+                                       unset( $this->locksHeld[$path] ); // no SH or EX locks left for key
+                               }
+                       }
+               }
+
+               // Remove these specific locks if possible, or at least release
+               // all locks once this process is currently not holding any locks.
+               foreach ( $pathsToUnlock as $bucket => $paths ) {
+                       $status->merge( $this->doUnlockingRequestBucket( $bucket, $paths, $type ) );
+               }
+               if ( !count( $this->locksHeld ) ) {
+                       $status->merge( $this->releaseAllLocks() );
+               }
+
+               return $status;
+       }
+
+       /**
+        * 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 $paths Array List of resource keys to lock
+        * @param $type integer LockManager::LOCK_EX or LockManager::LOCK_SH
+        * @return Status
+        */
+       final protected function doLockingRequestBucket( $bucket, array $paths, $type ) {
+               $status = Status::newGood();
+
+               $yesVotes = 0; // locks made on trustable servers
+               $votesLeft = count( $this->srvsByBucket[$bucket] ); // remaining peers
+               $quorum = floor( $votesLeft/2 + 1 ); // simple majority
+               // Get votes for each peer, in order, until we have enough...
+               foreach ( $this->srvsByBucket[$bucket] as $lockSrv ) {
+                       if ( !$this->isServerUp( $lockSrv ) ) {
+                               --$votesLeft;
+                               $status->warning( 'lockmanager-fail-svr-acquire', $lockSrv );
+                               continue; // server down?
+                       }
+                       // Attempt to acquire the lock on this peer
+                       $status->merge( $this->getLocksOnServer( $lockSrv, $paths, $type ) );
+                       if ( !$status->isOK() ) {
+                               return $status; // vetoed; resource locked
+                       }
+                       ++$yesVotes; // success for this peer
+                       if ( $yesVotes >= $quorum ) {
+                               return $status; // lock obtained
+                       }
+                       --$votesLeft;
+                       $votesNeeded = $quorum - $yesVotes;
+                       if ( $votesNeeded > $votesLeft ) {
+                               break; // short-circuit
+                       }
+               }
+               // At this point, we must not have met the quorum
+               $status->setResult( false );
+
+               return $status;
+       }
+
+       /**
+        * Attempt to release locks with the peers for a bucket
+        *
+        * @param $bucket integer
+        * @param $paths Array List of resource keys to lock
+        * @param $type integer LockManager::LOCK_EX or LockManager::LOCK_SH
+        * @return Status
+        */
+       final protected function doUnlockingRequestBucket( $bucket, array $paths, $type ) {
+               $status = Status::newGood();
+
+               foreach ( $this->srvsByBucket[$bucket] as $lockSrv ) {
+                       if ( !$this->isServerUp( $lockSrv ) ) {
+                               $status->fatal( 'lockmanager-fail-svr-release', $lockSrv );
+                       // Attempt to release the lock on this peer
+                       } else {
+                               $status->merge( $this->freeLocksOnServer( $lockSrv, $paths, $type ) );
+                       }
+               }
+
+               return $status;
+       }
+
+       /**
+        * Get the bucket for resource path.
+        * This should avoid throwing any exceptions.
+        *
+        * @param $path string
+        * @return integer
+        */
+       protected function getBucketFromPath( $path ) {
+               $prefix = substr( sha1( $path ), 0, 2 ); // first 2 hex chars (8 bits)
+               return (int)base_convert( $prefix, 16, 10 ) % count( $this->srvsByBucket );
+       }
+
+       /**
+        * Check if a lock server is up
+        *
+        * @param $lockSrv string
+        * @return bool
+        */
+       abstract protected function isServerUp( $lockSrv );
+
+       /**
+        * Get a connection to a lock server and acquire locks on $paths
+        *
+        * @param $lockSrv string
+        * @param $paths array
+        * @param $type integer
+        * @return Status
+        */
+       abstract protected function getLocksOnServer( $lockSrv, array $paths, $type );
+
+       /**
+        * Get a connection to a lock server and release locks on $paths.
+        *
+        * Subclasses must effectively implement this or releaseAllLocks().
+        *
+        * @param $lockSrv string
+        * @param $paths array
+        * @param $type integer
+        * @return Status
+        */
+       abstract protected function freeLocksOnServer( $lockSrv, array $paths, $type );
+
+       /**
+        * Release all locks that this session is holding.
+        *
+        * Subclasses must effectively implement this or freeLocksOnServer().
+        *
+        * @return Status
+        */
+       abstract protected function releaseAllLocks();
+}
index 635cb95..e49f37d 100644 (file)
@@ -46,6 +46,9 @@ class FSRepo extends FileRepo {
                        $thumbDir = isset( $info['thumbDir'] )
                                ? $info['thumbDir']
                                : "{$directory}/thumb";
+                       $transcodedDir = isset( $info['transcodedDir'] )
+                               ? $info['transcodedDir']
+                               : "{$directory}/transcoded";
                        $fileMode = isset( $info['fileMode'] )
                                ? $info['fileMode']
                                : 0644;
@@ -59,6 +62,7 @@ class FSRepo extends FileRepo {
                                        "{$repoName}-public"  => "{$directory}",
                                        "{$repoName}-temp"    => "{$directory}/temp",
                                        "{$repoName}-thumb"   => $thumbDir,
+                                       "{$repoName}-transcoded"   => $transcodedDir,
                                        "{$repoName}-deleted" => $deletedDir
                                ),
                                'fileMode'       => $fileMode,
index 82f7b49..05e71d4 100644 (file)
@@ -120,7 +120,7 @@ class FileRepo {
                $this->isPrivate = !empty( $info['isPrivate'] );
                // Give defaults for the basic zones...
                $this->zones = isset( $info['zones'] ) ? $info['zones'] : array();
-               foreach ( array( 'public', 'thumb', 'temp', 'deleted' ) as $zone ) {
+               foreach ( array( 'public', 'thumb', 'transcoded', 'temp', 'deleted' ) as $zone ) {
                        if ( !isset( $this->zones[$zone]['container'] ) ) {
                                $this->zones[$zone]['container'] = "{$this->name}-{$zone}";
                        }
@@ -204,7 +204,7 @@ class FileRepo {
         * @return String or false
         */
        public function getZoneUrl( $zone, $ext = null ) {
-               if ( in_array( $zone, array( 'public', 'temp', 'thumb' ) ) ) { // standard public zones
+               if ( in_array( $zone, array( 'public', 'temp', 'thumb', 'transcoded' ) ) ) { // standard public zones
                        if ( $ext !== null && isset( $this->zones[$zone]['urlsByExt'][$ext] ) ) {
                                return $this->zones[$zone]['urlsByExt'][$ext]; // custom URL for extension/zone
                        } elseif ( isset( $this->zones[$zone]['url'] ) ) {
@@ -220,6 +220,8 @@ class FileRepo {
                                return false; // no public URL
                        case 'thumb':
                                return $this->thumbUrl;
+                       case 'transcoded':
+                               return "{$this->url}/transcoded";
                        default:
                                return false;
                }
@@ -240,7 +242,7 @@ class FileRepo {
         */
        public function getZoneHandlerUrl( $zone ) {
                if ( isset( $this->zones[$zone]['handlerUrl'] )
-                       && in_array( $zone, array( 'public', 'temp', 'thumb' ) ) )
+                       && in_array( $zone, array( 'public', 'temp', 'thumb', 'transcoded' ) ) )
                {
                        return $this->zones[$zone]['handlerUrl'];
                }
@@ -694,7 +696,7 @@ class FileRepo {
        public function getDescriptionStylesheetUrl() {
                if ( isset( $this->scriptDirUrl ) ) {
                        return $this->makeUrl( 'title=MediaWiki:Filepage.css&' .
-                               wfArrayToCGI( Skin::getDynamicStylesheetQuery() ) );
+                               wfArrayToCgi( Skin::getDynamicStylesheetQuery() ) );
                }
                return false;
        }
@@ -955,7 +957,7 @@ class FileRepo {
                $hashPath   = $this->getHashPath( $originalName );
                $dstRel     = "{$hashPath}{$date}!{$originalName}";
                $dstUrlRel  = $hashPath . $date . '!' . rawurlencode( $originalName );
-               $virtualUrl = $this->getVirtualUrl( 'temp' )  . '/' . $dstUrlRel;
+               $virtualUrl = $this->getVirtualUrl( 'temp' ) . '/' . $dstUrlRel;
 
                $result = $this->quickImport( $srcPath, $virtualUrl );
                $result->value = $virtualUrl;
@@ -1105,7 +1107,7 @@ class FileRepo {
                        if ( !$this->initDirectory( $dstDir )->isOK() ) {
                                return $this->newFatal( 'directorycreateerror', $dstDir );
                        }
-                       if ( !$this->initDirectory($archiveDir )->isOK() ) {
+                       if ( !$this->initDirectory( $archiveDir )->isOK() ) {
                                return $this->newFatal( 'directorycreateerror', $archiveDir );
                        }
 
@@ -1670,10 +1672,17 @@ class FileRepo {
                                        'directory' => ( $this->zones['thumb']['directory'] == '' )
                                                ? 'temp'
                                                : $this->zones['thumb']['directory'] . '/temp'
+                               ),
+                               'transcoded'  => array(
+                                       'container' => $this->zones['transcoded']['container'],
+                                       'directory' => ( $this->zones['transcoded']['directory'] == '' )
+                                               ? 'temp'
+                                               : $this->zones['transcoded']['directory'] . '/temp'
                                )
                        ),
                        'url'        => $this->getZoneUrl( 'temp' ),
                        'thumbUrl'   => $this->getZoneUrl( 'thumb' ) . '/temp',
+                       'transcodedUrl'   => $this->getZoneUrl( 'transcoded' ) . '/temp',
                        'hashLevels' => $this->hashLevels // performance
                ) );
        }
index 7697e4e..e1ecb96 100644 (file)
@@ -267,7 +267,7 @@ class ForeignAPIRepo extends FileRepo {
                $sizekey = "$width:$height:$params";
 
                /* Get the array of urls that we already know */
-               $knownThumbUrls = $wgMemc->get($key);
+               $knownThumbUrls = $wgMemc->get( $key );
                if( !$knownThumbUrls ) {
                        /* No knownThumbUrls for this file */
                        $knownThumbUrls = array();
@@ -294,9 +294,9 @@ class ForeignAPIRepo extends FileRepo {
                        wfDebug( __METHOD__ . " The deduced filename $fileName is not safe\n" );
                        return false;
                }
-               $localPath =  $this->getZonePath( 'thumb' ) . "/" . $this->getHashPath( $name ) . $name;
+               $localPath = $this->getZonePath( 'thumb' ) . "/" . $this->getHashPath( $name ) . $name;
                $localFilename = $localPath . "/" . $fileName;
-               $localUrl =  $this->getZoneUrl( 'thumb' ) . "/" . $this->getHashPath( $name ) . rawurlencode( $name ) . "/" . rawurlencode( $fileName );
+               $localUrl = $this->getZoneUrl( 'thumb' ) . "/" . $this->getHashPath( $name ) . rawurlencode( $name ) . "/" . rawurlencode( $fileName );
 
                if( $backend->fileExists( array( 'src' => $localFilename ) )
                        && isset( $metadata['timestamp'] ) )
index 118e981..0fbaeef 100644 (file)
@@ -212,8 +212,8 @@ class LocalRepo extends FileRepo {
                $dbr = $this->getSlaveDB();
                $id = $dbr->selectField(
                        'page', // Table
-                       'page_id',  //Field
-                       array(  //Conditions
+                       'page_id', //Field
+                       array( //Conditions
                                'page_namespace' => $title->getNamespace(),
                                'page_title' => $title->getDBkey(),
                        ),
@@ -323,4 +323,3 @@ class LocalRepo extends FileRepo {
                }
        }
 }
-
index f9e5759..1f5ae91 100644 (file)
@@ -131,7 +131,7 @@ class RepoGroup {
                        $time = isset( $options['time'] ) ? $options['time'] : '';
                        $dbkey = $title->getDBkey();
                        if ( isset( $this->cache[$dbkey][$time] ) ) {
-                               wfDebug( __METHOD__.": got File:$dbkey from process cache\n" );
+                               wfDebug( __METHOD__ . ": got File:$dbkey from process cache\n" );
                                # Move it to the end of the list so that we can delete the LRU entry later
                                $this->pingCache( $dbkey );
                                # Return the entry
@@ -388,12 +388,12 @@ class RepoGroup {
         */
        function splitVirtualUrl( $url ) {
                if ( substr( $url, 0, 9 ) != 'mwrepo://' ) {
-                       throw new MWException( __METHOD__.': unknown protocol' );
+                       throw new MWException( __METHOD__ . ': unknown protocol' );
                }
 
                $bits = explode( '/', substr( $url, 9 ), 3 );
                if ( count( $bits ) != 3 ) {
-                       throw new MWException( __METHOD__.": invalid mwrepo URL: $url" );
+                       throw new MWException( __METHOD__ . ": invalid mwrepo URL: $url" );
                }
                return $bits;
        }
@@ -433,7 +433,7 @@ class RepoGroup {
                while ( count( $this->cache ) >= self::MAX_CACHE_SIZE ) {
                        reset( $this->cache );
                        $key = key( $this->cache );
-                       wfDebug( __METHOD__.": evicting $key\n" );
+                       wfDebug( __METHOD__ . ": evicting $key\n" );
                        unset( $this->cache[$key] );
                }
        }
index e1a8547..b02d92b 100644 (file)
@@ -68,7 +68,7 @@ class ArchivedFile {
         * @param int $id
         * @param string $key
         */
-       function __construct( $title, $id=0, $key='' ) {
+       function __construct( $title, $id = 0, $key = '' ) {
                $this->id = -1;
                $this->title = false;
                $this->name = false;
@@ -95,11 +95,11 @@ class ArchivedFile {
                        $this->name = $title->getDBkey();
                }
 
-               if ($id) {
+               if ( $id ) {
                        $this->id = $id;
                }
 
-               if ($key) {
+               if ( $key ) {
                        $this->key = $key;
                }
 
@@ -130,7 +130,7 @@ class ArchivedFile {
                        $conds['fa_name'] = $this->title->getDBkey();
                }
 
-               if( !count($conds)) {
+               if( !count( $conds ) ) {
                        throw new MWException( "No specific information for retrieving archived file" );
                }
 
@@ -197,7 +197,7 @@ class ArchivedFile {
         * @since 1.21
         */
        public function loadFromRow( $row ) {
-               $this->id = intval($row->fa_id);
+               $this->id = intval( $row->fa_id );
                $this->name = $row->fa_name;
                $this->archive_name = $row->fa_archive_name;
                $this->group = $row->fa_storage_group;
index 9adcc99..f371115 100644 (file)
@@ -40,7 +40,7 @@
  * never name a file class explictly outside of the repo class. Instead use the
  * repo's factory functions to generate file objects, for example:
  *
- * RepoGroup::singleton()->getLocalRepo()->newFile($title);
+ * RepoGroup::singleton()->getLocalRepo()->newFile( $title );
  *
  * The convenience functions wfLocalFile() and wfFindFile() should be sufficient
  * in most cases.
@@ -54,7 +54,7 @@ abstract class File {
        const DELETED_RESTRICTED = 8;
 
        /** Force rendering in the current process */
-       const RENDER_NOW   = 1;
+       const RENDER_NOW = 1;
        /**
         * Force rendering even if thumbnail already exist and using RENDER_NOW
         * I.e. you have to pass both flags: File::RENDER_NOW | File::RENDER_FORCE
@@ -348,7 +348,7 @@ abstract class File {
                        if ( $this->canRender() ) {
                                return $this->createThumb( $this->getWidth() );
                        } else {
-                               wfDebug( __METHOD__.': supposed to render ' . $this->getName() .
+                               wfDebug( __METHOD__ . ': supposed to render ' . $this->getName() .
                                        ' (' . $this->getMimeType() . "), but can't!\n" );
                                return $this->getURL(); #hm... return NULL?
                        }
@@ -663,13 +663,13 @@ abstract class File {
                if ( $this->allowInlineDisplay() ) {
                        return true;
                }
-               if ($this->isTrustedFile()) {
+               if ( $this->isTrustedFile() ) {
                        return true;
                }
 
                $type = $this->getMediaType();
                $mime = $this->getMimeType();
-               #wfDebug("LocalFile::isSafeFile: type= $type, mime= $mime\n");
+               #wfDebug( "LocalFile::isSafeFile: type= $type, mime= $mime\n" );
 
                if ( !$type || $type === MEDIATYPE_UNKNOWN ) {
                        return false; #unknown type, not trusted
@@ -842,7 +842,7 @@ abstract class File {
                global $wgIgnoreImageErrors;
 
                if ( $wgIgnoreImageErrors && !( $flags & self::RENDER_NOW ) ) {
-                       return $this->handler->getTransform( $this, $thumbPath, $thumbUrl, $params );
+                       return $this->getHandler()->getTransform( $this, $thumbPath, $thumbUrl, $params );
                } else {
                        return new MediaTransformError( 'thumbnail_error',
                                $params['width'], 0, wfMessage( 'thumbnail-dest-create' )->text() );
@@ -873,17 +873,18 @@ abstract class File {
                                $params['descriptionUrl'] = wfExpandUrl( $descriptionUrl, PROTO_CANONICAL );
                        }
 
+                       $handler = $this->getHandler();
                        $script = $this->getTransformScript();
                        if ( $script && !( $flags & self::RENDER_NOW ) ) {
                                // Use a script to transform on client request, if possible
-                               $thumb = $this->handler->getScriptedTransform( $this, $script, $params );
+                               $thumb = $handler->getScriptedTransform( $this, $script, $params );
                                if ( $thumb ) {
                                        break;
                                }
                        }
 
                        $normalisedParams = $params;
-                       $this->handler->normaliseParams( $this, $normalisedParams );
+                       $handler->normaliseParams( $this, $normalisedParams );
 
                        $thumbName = $this->thumbName( $normalisedParams );
                        $thumbUrl = $this->getThumbUrl( $thumbName );
@@ -896,20 +897,21 @@ abstract class File {
                                        // XXX: Pass in the storage path even though we are not rendering anything
                                        // and the path is supposed to be an FS path. This is due to getScalerType()
                                        // getting called on the path and clobbering $thumb->getUrl() if it's false.
-                                       $thumb = $this->handler->getTransform( $this, $thumbPath, $thumbUrl, $params );
+                                       $thumb = $handler->getTransform( $this, $thumbPath, $thumbUrl, $params );
                                        break;
                                }
                                // Clean up broken thumbnails as needed
                                $this->migrateThumbFile( $thumbName );
                                // Check if an up-to-date thumbnail already exists...
-                               wfDebug( __METHOD__.": Doing stat for $thumbPath\n" );
-                               if ( $this->repo->fileExists( $thumbPath ) && !( $flags & self::RENDER_FORCE ) ) {
+                               wfDebug( __METHOD__ . ": Doing stat for $thumbPath\n" );
+                               if ( !( $flags & self::RENDER_FORCE ) && $this->repo->fileExists( $thumbPath ) ) {
                                        $timestamp = $this->repo->getFileTimestamp( $thumbPath );
                                        if ( $timestamp !== false && $timestamp >= $wgThumbnailEpoch ) {
                                                // XXX: Pass in the storage path even though we are not rendering anything
                                                // and the path is supposed to be an FS path. This is due to getScalerType()
                                                // getting called on the path and clobbering $thumb->getUrl() if it's false.
-                                               $thumb = $this->handler->getTransform( $this, $thumbPath, $thumbUrl, $params );
+                                               $thumb = $handler->getTransform(
+                                                       $this, $thumbPath, $thumbUrl, $params );
                                                $thumb->setStoragePath( $thumbPath );
                                                break;
                                        }
@@ -936,7 +938,7 @@ abstract class File {
 
                        // Actually render the thumbnail...
                        wfProfileIn( __METHOD__ . '-doTransform' );
-                       $thumb = $this->handler->doTransform( $this, $tmpThumbPath, $thumbUrl, $params );
+                       $thumb = $handler->doTransform( $this, $tmpThumbPath, $thumbUrl, $params );
                        wfProfileOut( __METHOD__ . '-doTransform' );
                        $tmpFile->bind( $thumb ); // keep alive with $thumb
 
@@ -946,7 +948,7 @@ abstract class File {
                                $this->lastError = $thumb->toText();
                                // Ignore errors if requested
                                if ( $wgIgnoreImageErrors && !( $flags & self::RENDER_NOW ) ) {
-                                       $thumb = $this->handler->getTransform( $this, $tmpThumbPath, $thumbUrl, $params );
+                                       $thumb = $handler->getTransform( $this, $tmpThumbPath, $thumbUrl, $params );
                                }
                        } elseif ( $this->repo && $thumb->hasFile() && !$thumb->fileIsSource() ) {
                                // Copy the thumbnail from the file system into storage...
@@ -1245,6 +1247,18 @@ abstract class File {
                return $this->repo->getZonePath( 'thumb' ) . '/' . $this->getThumbRel( $suffix );
        }
 
+       /**
+        * Get the path of the transcoded directory, or a particular file if $suffix is specified
+        *
+        * @param $suffix bool|string if not false, the name of a media file
+        *
+        * @return string
+        */
+       function getTranscodedPath( $suffix = false ) {
+               $this->assertRepoDefined();
+               return $this->repo->getZonePath( 'transcoded' ) . '/' . $this->getThumbRel( $suffix );
+       }
+
        /**
         * Get the URL of the archive directory, or a particular file if $suffix is specified
         *
@@ -1286,22 +1300,45 @@ abstract class File {
        }
 
        /**
-        * Get the URL of the thumbnail directory, or a particular file if $suffix is specified
+        * Get the URL of the zone directory, or a particular file if $suffix is specified
         *
-        * @param $suffix bool|string if not false, the name of a thumbnail file
+        * @param $zone string name of requested zone
+        * @param $suffix bool|string if not false, the name of a file in zone
         *
         * @return string path
         */
-       function getThumbUrl( $suffix = false ) {
+       function getZoneUrl( $zone, $suffix = false ) {
                $this->assertRepoDefined();
                $ext = $this->getExtension();
-               $path = $this->repo->getZoneUrl( 'thumb', $ext ) . '/' . $this->getUrlRel();
+               $path = $this->repo->getZoneUrl( $zone, $ext ) . '/' . $this->getUrlRel();
                if ( $suffix !== false ) {
                        $path .= '/' . rawurlencode( $suffix );
                }
                return $path;
        }
 
+       /**
+        * Get the URL of the thumbnail directory, or a particular file if $suffix is specified
+        *
+        * @param $suffix bool|string if not false, the name of a thumbnail file
+        *
+        * @return string path
+        */
+       function getThumbUrl( $suffix = false ) {
+               return $this->getZoneUrl( 'thumb', $suffix );
+       }
+
+       /**
+        * Get the URL of the transcoded directory, or a particular file if $suffix is specified
+        *
+        * @param $suffix bool|string if not false, the name of a media file
+        *
+        * @return string path
+        */
+       function getTranscodedUrl( $suffix = false ) {
+               return $this->getZoneUrl( 'transcoded', $suffix );
+       }
+
        /**
         * Get the public zone virtual URL for a current version source file
         *
@@ -1364,7 +1401,7 @@ abstract class File {
         * @throws MWException
         */
        function readOnlyError() {
-               throw new MWException( get_class($this) . ': write operations are not supported' );
+               throw new MWException( get_class( $this ) . ': write operations are not supported' );
        }
 
        /**
@@ -1498,9 +1535,9 @@ abstract class File {
         * @param $target Title New file name
         * @return FileRepoStatus object.
         */
-        function move( $target ) {
+       function move( $target ) {
                $this->readOnlyError();
-        }
+       }
 
        /**
         * Delete all versions of the file.
@@ -1625,15 +1662,15 @@ abstract class File {
                $renderUrl = $this->repo->getDescriptionRenderUrl( $this->getName(), $wgLang->getCode() );
                if ( $renderUrl ) {
                        if ( $this->repo->descriptionCacheExpiry > 0 ) {
-                               wfDebug("Attempting to get the description from cache...");
+                               wfDebug( "Attempting to get the description from cache..." );
                                $key = $this->repo->getLocalCacheKey( 'RemoteFileDescription', 'url', $wgLang->getCode(),
                                                                        $this->getName() );
-                               $obj = $wgMemc->get($key);
-                               if ($obj) {
-                                       wfDebug("success!\n");
+                               $obj = $wgMemc->get( $key );
+                               if ( $obj ) {
+                                       wfDebug( "success!\n" );
                                        return $obj;
                                }
-                               wfDebug("miss\n");
+                               wfDebug( "miss\n" );
                        }
                        wfDebug( "Fetching shared description from $renderUrl\n" );
                        $res = Http::get( $renderUrl );
@@ -1719,7 +1756,7 @@ abstract class File {
         * @return array
         */
        static function getPropsFromPath( $path, $ext = true ) {
-               wfDebug( __METHOD__.": Getting file info for $path\n" );
+               wfDebug( __METHOD__ . ": Getting file info for $path\n" );
                wfDeprecated( __METHOD__, '1.19' );
 
                $fsFile = new FSFile( $path );
index 5648261..84e0df6 100644 (file)
@@ -189,7 +189,7 @@ class ForeignAPIFile extends File {
         * @param string $method
         * @return int|null|string
         */
-       public function getUser( $method='text' ) {
+       public function getUser( $method = 'text' ) {
                return isset( $this->mInfo['user'] ) ? strval( $this->mInfo['user'] ) : null;
        }
 
@@ -256,7 +256,7 @@ class ForeignAPIFile extends File {
         */
        function getThumbPath( $suffix = '' ) {
                if ( $this->repo->canCacheThumbs() ) {
-                       $path = $this->repo->getZonePath('thumb') . '/' . $this->getHashPath( $this->getName() );
+                       $path = $this->repo->getZonePath( 'thumb' ) . '/' . $this->getHashPath( $this->getName() );
                        if ( $suffix ) {
                                $path = $path . $suffix . '/';
                        }
@@ -293,7 +293,7 @@ class ForeignAPIFile extends File {
                global $wgMemc, $wgContLang;
 
                $url = $this->repo->getDescriptionRenderUrl( $this->getName(), $wgContLang->getCode() );
-               $key = $this->repo->getLocalCacheKey( 'RemoteFileDescription', 'url', md5($url) );
+               $key = $this->repo->getLocalCacheKey( 'RemoteFileDescription', 'url', md5( $url ) );
 
                $wgMemc->delete( $key );
        }
index a9678b7..0ddebc9 100644 (file)
@@ -24,7 +24,7 @@
 /**
  * Bump this number when serialized cache records may be incompatible.
  */
-define( 'MW_FILE_VERSION', 8 );
+define( 'MW_FILE_VERSION', 9 );
 
 /**
  * Class to represent a local file in the wiki's own database
@@ -36,7 +36,7 @@ define( 'MW_FILE_VERSION', 8 );
  * never name a file class explictly outside of the repo class. Instead use the
  * repo's factory functions to generate file objects, for example:
  *
- * RepoGroup::singleton()->getLocalRepo()->newFile($title);
+ * RepoGroup::singleton()->getLocalRepo()->newFile( $title );
  *
  * The convenience functions wfLocalFile() and wfFindFile() should be sufficient
  * in most cases.
@@ -67,7 +67,8 @@ class LocalFile extends File {
                $sha1,             # SHA-1 base 36 content hash
                $user, $user_text, # User, who uploaded the file
                $description,      # Description of current revision of the file
-               $dataLoaded,       # Whether or not all this has been loaded from the database (loadFromXxx)
+               $dataLoaded,       # Whether or not core data has been loaded from the database (loadFromXxx)
+               $extraDataLoaded,  # Whether or not lazy-loaded data has been loaded from the database
                $upgraded,         # Whether the row was upgraded on load
                $locked,           # True if the image row is locked
                $missing,          # True if file is not present in file system. Not to be cached in memcached
@@ -82,6 +83,8 @@ class LocalFile extends File {
 
        protected $repoClass = 'LocalRepo';
 
+       const LOAD_ALL = 1; // integer; load all the lazy fields too (like metadata)
+
        /**
         * Create a LocalFile from a title
         * Do not call this except from inside a repo class.
@@ -175,6 +178,7 @@ class LocalFile extends File {
                $this->historyLine = 0;
                $this->historyRes = null;
                $this->dataLoaded = false;
+               $this->extraDataLoaded = false;
 
                $this->assertRepoDefined();
                $this->assertTitleDefined();
@@ -200,6 +204,7 @@ class LocalFile extends File {
 
                wfProfileIn( __METHOD__ );
                $this->dataLoaded = false;
+               $this->extraDataLoaded = false;
                $key = $this->getCacheKey();
 
                if ( !$key ) {
@@ -210,13 +215,17 @@ class LocalFile extends File {
                $cachedValues = $wgMemc->get( $key );
 
                // Check if the key existed and belongs to this version of MediaWiki
-               if ( isset( $cachedValues['version'] ) && ( $cachedValues['version'] == MW_FILE_VERSION ) ) {
+               if ( isset( $cachedValues['version'] ) && $cachedValues['version'] == MW_FILE_VERSION ) {
                        wfDebug( "Pulling file metadata from cache key $key\n" );
                        $this->fileExists = $cachedValues['fileExists'];
                        if ( $this->fileExists ) {
                                $this->setProps( $cachedValues );
                        }
                        $this->dataLoaded = true;
+                       $this->extraDataLoaded = true;
+                       foreach ( $this->getLazyCacheFields( '' ) as $field ) {
+                               $this->extraDataLoaded = $this->extraDataLoaded && isset( $cachedValues[$field] );
+                       }
                }
 
                if ( $this->dataLoaded ) {
@@ -252,7 +261,17 @@ class LocalFile extends File {
                        }
                }
 
-               $wgMemc->set( $key, $cache, 60 * 60 * 24 * 7 ); // A week
+               // Strip off excessive entries from the subset of fields that can become large.
+               // If the cache value gets to large it will not fit in memcached and nothing will
+               // get cached at all, causing master queries for any file access.
+               foreach ( $this->getLazyCacheFields( '' ) as $field ) {
+                       if ( isset( $cache[$field] ) && strlen( $cache[$field] ) > 100*1024 ) {
+                               unset( $cache[$field] ); // don't let the value get too big
+                       }
+               }
+
+               // Cache presence for 1 week and negatives for 1 day
+               $wgMemc->set( $key, $cache, $this->fileExists ? 86400 * 7 : 86400 );
        }
 
        /**
@@ -287,6 +306,28 @@ class LocalFile extends File {
                return $results[$prefix];
        }
 
+       /**
+        * @return array
+        */
+       function getLazyCacheFields( $prefix = 'img_' ) {
+               static $fields = array( 'metadata' );
+               static $results = array();
+
+               if ( $prefix == '' ) {
+                       return $fields;
+               }
+
+               if ( !isset( $results[$prefix] ) ) {
+                       $prefixedFields = array();
+                       foreach ( $fields as $field ) {
+                               $prefixedFields[] = $prefix . $field;
+                       }
+                       $results[$prefix] = $prefixedFields;
+               }
+
+               return $results[$prefix];
+       }
+
        /**
         * Load file metadata from the DB
         */
@@ -297,9 +338,9 @@ class LocalFile extends File {
 
                # Unconditionally set loaded=true, we don't want the accessors constantly rechecking
                $this->dataLoaded = true;
+               $this->extraDataLoaded = true;
 
                $dbr = $this->repo->getMasterDB();
-
                $row = $dbr->selectRow( 'image', $this->getCacheFields( 'img_' ),
                        array( 'img_name' => $this->getName() ), $fname );
 
@@ -313,27 +354,70 @@ class LocalFile extends File {
        }
 
        /**
-        * Decode a row from the database (either object or array) to an array
-        * with timestamps and MIME types decoded, and the field prefix removed.
-        * @param $row
+        * Load lazy file metadata from the DB.
+        * This covers fields that are sometimes not cached.
+        */
+       protected function loadExtraFromDB() {
+               # Polymorphic function name to distinguish foreign and local fetches
+               $fname = get_class( $this ) . '::' . __FUNCTION__;
+               wfProfileIn( $fname );
+
+               # Unconditionally set loaded=true, we don't want the accessors constantly rechecking
+               $this->extraDataLoaded = true;
+
+               $dbr = $this->repo->getSlaveDB();
+               // In theory the file could have just been renamed/deleted...oh well
+               $row = $dbr->selectRow( 'image', $this->getLazyCacheFields( 'img_' ),
+                       array( 'img_name' => $this->getName() ), $fname );
+
+               if ( !$row ) { // fallback to master
+                       $dbr = $this->repo->getMasterDB();
+                       $row = $dbr->selectRow( 'image', $this->getLazyCacheFields( 'img_' ),
+                               array( 'img_name' => $this->getName() ), $fname );
+               }
+
+               if ( $row ) {
+                       foreach ( $this->unprefixRow( $row, 'img_' ) as $name => $value ) {
+                               $this->$name = $value;
+                       }
+               } else {
+                       throw new MWException( "Could not find data for image '{$this->getName()}'." );
+               }
+
+               wfProfileOut( $fname );
+       }
+
+       /**
+        * @param Row $row
         * @param $prefix string
-        * @throws MWException
-        * @return array
+        * @return Array
         */
-       function decodeRow( $row, $prefix = 'img_' ) {
+       protected function unprefixRow( $row, $prefix = 'img_' ) {
                $array = (array)$row;
                $prefixLength = strlen( $prefix );
 
                // Sanity check prefix once
                if ( substr( key( $array ), 0, $prefixLength ) !== $prefix ) {
-                       throw new MWException( __METHOD__ .  ': incorrect $prefix parameter' );
+                       throw new MWException( __METHOD__ . ': incorrect $prefix parameter' );
                }
 
                $decoded = array();
-
                foreach ( $array as $name => $value ) {
                        $decoded[substr( $name, $prefixLength )] = $value;
                }
+               return $decoded;
+       }
+
+       /**
+        * Decode a row from the database (either object or array) to an array
+        * with timestamps and MIME types decoded, and the field prefix removed.
+        * @param $row
+        * @param $prefix string
+        * @throws MWException
+        * @return array
+        */
+       function decodeRow( $row, $prefix = 'img_' ) {
+               $decoded = $this->unprefixRow( $row, $prefix );
 
                $decoded['timestamp'] = wfTimestamp( TS_MW, $decoded['timestamp'] );
 
@@ -357,6 +441,8 @@ class LocalFile extends File {
         */
        function loadFromRow( $row, $prefix = 'img_' ) {
                $this->dataLoaded = true;
+               $this->extraDataLoaded = true;
+
                $array = $this->decodeRow( $row, $prefix );
 
                foreach ( $array as $name => $value ) {
@@ -369,8 +455,9 @@ class LocalFile extends File {
 
        /**
         * Load file metadata from cache or DB, unless already loaded
+        * @param integer $flags
         */
-       function load() {
+       function load( $flags = 0 ) {
                if ( !$this->dataLoaded ) {
                        if ( !$this->loadFromCache() ) {
                                $this->loadFromDB();
@@ -378,6 +465,9 @@ class LocalFile extends File {
                        }
                        $this->dataLoaded = true;
                }
+               if ( ( $flags & self::LOAD_ALL ) && !$this->extraDataLoaded ) {
+                       $this->loadExtraFromDB();
+               }
        }
 
        /**
@@ -397,7 +487,7 @@ class LocalFile extends File {
                } else {
                        $handler = $this->getHandler();
                        if ( $handler ) {
-                               $validity = $handler->isMetadataValid( $this, $this->metadata );
+                               $validity = $handler->isMetadataValid( $this, $this->getMetadata() );
                                if ( $validity === MediaHandler::METADATA_BAD
                                        || ( $validity === MediaHandler::METADATA_COMPATIBLE && $wgUpdateCompatibleMetadata )
                                ) {
@@ -464,6 +554,7 @@ class LocalFile extends File {
        /**
         * Set properties in this object to be equal to those given in the
         * associative array $info. Only cacheable fields can be set.
+        * All fields *must* be set in $info except for getLazyCacheFields().
         *
         * If 'mime' is given, it will be split into major_mime/minor_mime.
         * If major_mime/minor_mime are given, $this->mime will also be set.
@@ -570,7 +661,7 @@ class LocalFile extends File {
         * @return string
         */
        function getMetadata() {
-               $this->load();
+               $this->load( self::LOAD_ALL ); // large metadata is loaded in another step
                return $this->metadata;
        }
 
@@ -810,7 +901,7 @@ class LocalFile extends File {
        protected function purgeThumbList( $dir, $files ) {
                $fileListDebug = strtr(
                        var_export( $files, true ),
-                       array("\n"=>'')
+                       array( "\n" => '' )
                );
                wfDebug( __METHOD__ . ": $fileListDebug\n" );
 
@@ -996,6 +1087,9 @@ class LocalFile extends File {
                        $options['headers'] = array();
                }
 
+               // Trim spaces on user supplied text
+               $comment = trim( $comment );
+
                // truncate nicely or the DB will do it for us
                // non-nicely (dangling multi-byte chars, non-truncated version in cache).
                $comment = $wgContLang->truncate( $comment, 255 );
@@ -1191,7 +1285,7 @@ class LocalFile extends File {
                                $log->getRcComment(),
                                false
                        );
-                       if (!is_null($nullRevision)) {
+                       if ( !is_null( $nullRevision ) ) {
                                $nullRevision->insertOn( $dbw );
 
                                wfRunHooks( 'NewRevisionFromEditComplete', array( $wikiPage, $nullRevision, $latest, $user ) );
index 40d7dca..4f27c8d 100644 (file)
@@ -42,7 +42,7 @@ class OldLocalFile extends LocalFile {
        static function newFromTitle( $title, $repo, $time = null ) {
                # The null default value is only here to avoid an E_STRICT
                if ( $time === null ) {
-                       throw new MWException( __METHOD__.' got null for $time parameter' );
+                       throw new MWException( __METHOD__ . ' got null for $time parameter' );
                }
                return new self( $title, $repo, $time, null );
        }
@@ -132,7 +132,7 @@ class OldLocalFile extends LocalFile {
                $this->requestedTime = $time;
                $this->archive_name = $archiveName;
                if ( is_null( $time ) && is_null( $archiveName ) ) {
-                       throw new MWException( __METHOD__.': must specify at least one of $time or $archiveName' );
+                       throw new MWException( __METHOD__ . ': must specify at least one of $time or $archiveName' );
                }
        }
 
@@ -164,18 +164,19 @@ class OldLocalFile extends LocalFile {
         * @return bool
         */
        function isVisible() {
-               return $this->exists() && !$this->isDeleted(File::DELETED_FILE);
+               return $this->exists() && !$this->isDeleted( File::DELETED_FILE );
        }
 
        function loadFromDB() {
                wfProfileIn( __METHOD__ );
+
                $this->dataLoaded = true;
                $dbr = $this->repo->getSlaveDB();
                $conds = array( 'oi_name' => $this->getName() );
                if ( is_null( $this->requestedTime ) ) {
                        $conds['oi_archive_name'] = $this->archive_name;
                } else {
-                       $conds[] = 'oi_timestamp = ' . $dbr->addQuotes( $dbr->timestamp( $this->requestedTime ) );
+                       $conds['oi_timestamp'] = $dbr->timestamp( $this->requestedTime );
                }
                $row = $dbr->selectRow( 'oldimage', $this->getCacheFields( 'oi_' ),
                        $conds, __METHOD__, array( 'ORDER BY' => 'oi_timestamp DESC' ) );
@@ -184,6 +185,42 @@ class OldLocalFile extends LocalFile {
                } else {
                        $this->fileExists = false;
                }
+
+               wfProfileOut( __METHOD__ );
+       }
+
+       /**
+        * Load lazy file metadata from the DB
+        */
+       protected function loadExtraFromDB() {
+               wfProfileIn( __METHOD__ );
+
+               $this->extraDataLoaded = true;
+               $dbr = $this->repo->getSlaveDB();
+               $conds = array( 'oi_name' => $this->getName() );
+               if ( is_null( $this->requestedTime ) ) {
+                       $conds['oi_archive_name'] = $this->archive_name;
+               } else {
+                       $conds['oi_timestamp'] = $dbr->timestamp( $this->requestedTime );
+               }
+               // In theory the file could have just been renamed/deleted...oh well
+               $row = $dbr->selectRow( 'oldimage', $this->getLazyCacheFields( 'oi_' ),
+                       $conds, __METHOD__, array( 'ORDER BY' => 'oi_timestamp DESC' ) );
+
+               if ( !$row ) { // fallback to master
+                       $dbr = $this->repo->getMasterDB();
+                       $row = $dbr->selectRow( 'oldimage', $this->getLazyCacheFields( 'oi_' ),
+                               $conds, __METHOD__, array( 'ORDER BY' => 'oi_timestamp DESC' ) );
+               }
+
+               if ( $row ) {
+                       foreach ( $this->unprefixRow( $row, 'oi_' ) as $name => $value ) {
+                               $this->$name = $value;
+                       }
+               } else {
+                       throw new MWException( "Could not find data for image '{$this->archive_name}'." );
+               }
+
                wfProfileOut( __METHOD__ );
        }
 
@@ -218,7 +255,7 @@ class OldLocalFile extends LocalFile {
 
                # Don't destroy file info of missing files
                if ( !$this->fileExists ) {
-                       wfDebug( __METHOD__.": file does not exist, aborting\n" );
+                       wfDebug( __METHOD__ . ": file does not exist, aborting\n" );
                        wfProfileOut( __METHOD__ );
                        return;
                }
@@ -226,7 +263,7 @@ class OldLocalFile extends LocalFile {
                $dbw = $this->repo->getMasterDB();
                list( $major, $minor ) = self::splitMime( $this->mime );
 
-               wfDebug(__METHOD__.': upgrading '.$this->archive_name." to the current schema\n");
+               wfDebug( __METHOD__ . ': upgrading ' . $this->archive_name . " to the current schema\n" );
                $dbw->update( 'oldimage',
                        array(
                                'oi_size'       => $this->size, // sanity
index 698d1eb..9a7f653 100644 (file)
@@ -71,7 +71,7 @@ class UnregisteredLocalFile extends File {
         */
        function __construct( $title = false, $repo = false, $path = false, $mime = false ) {
                if ( !( $title && $repo ) && !$path ) {
-                       throw new MWException( __METHOD__.': not enough parameters, must specify title and repo, or a full path' );
+                       throw new MWException( __METHOD__ . ': not enough parameters, must specify title and repo, or a full path' );
                }
                if ( $title instanceof Title ) {
                        $this->title = File::normalizeTitle( $title, 'exception' );
index 38b4a82..75e55f1 100644 (file)
@@ -193,7 +193,7 @@ class CliInstaller extends Installer {
 
        public function envCheckPath( ) {
                if ( !$this->specifiedScriptPath ) {
-                       $this->showMessage( 'config-no-cli-uri', $this->getVar("wgScriptPath") );
+                       $this->showMessage( 'config-no-cli-uri', $this->getVar( "wgScriptPath" ) );
                }
                return parent::envCheckPath();
        }
index 75ede23..10d23fb 100644 (file)
@@ -62,12 +62,12 @@ abstract class DatabaseInstaller {
        /**
         * Return the internal name, e.g. 'mysql', or 'sqlite'.
         */
-       public abstract function getName();
+       abstract public function getName();
 
        /**
         * @return bool Returns true if the client library is compiled in.
         */
-       public abstract function isCompiled();
+       abstract public function isCompiled();
 
        /**
         * Checks for installation prerequisites other than those checked by isCompiled()
@@ -85,7 +85,7 @@ abstract class DatabaseInstaller {
         *
         * If this is called, $this->parent can be assumed to be a WebInstaller.
         */
-       public abstract function getConnectForm();
+       abstract public function getConnectForm();
 
        /**
         * Set variables based on the request array, assuming it was submitted
@@ -96,7 +96,7 @@ abstract class DatabaseInstaller {
         *
         * @return Status
         */
-       public abstract function submitConnectForm();
+       abstract public function submitConnectForm();
 
        /**
         * Get HTML for a web form that retrieves settings used for installation.
@@ -127,7 +127,7 @@ abstract class DatabaseInstaller {
         *
         * @return Status
         */
-       public abstract function openConnection();
+       abstract public function openConnection();
 
        /**
         * Create the database and return a Status object indicating success or
@@ -135,7 +135,7 @@ abstract class DatabaseInstaller {
         *
         * @return Status
         */
-       public abstract function setupDatabase();
+       abstract public function setupDatabase();
 
        /**
         * Connect to the database using the administrative user/password currently
@@ -218,7 +218,7 @@ abstract class DatabaseInstaller {
         *
         * @return String
         */
-       public abstract function getLocalSettings();
+       abstract public function getLocalSettings();
 
        /**
         * Override this to provide DBMS-specific schema variables, to be
@@ -240,7 +240,7 @@ abstract class DatabaseInstaller {
                if ( $status->isOK() ) {
                        $status->value->setSchemaVars( $this->getSchemaVars() );
                } else {
-                       throw new MWException( __METHOD__.': unexpected DB connection error' );
+                       throw new MWException( __METHOD__ . ': unexpected DB connection error' );
                }
        }
 
@@ -252,7 +252,7 @@ abstract class DatabaseInstaller {
        public function enableLB() {
                $status = $this->getConnection();
                if ( !$status->isOK() ) {
-                       throw new MWException( __METHOD__.': unexpected DB connection error' );
+                       throw new MWException( __METHOD__ . ': unexpected DB connection error' );
                }
                LBFactory::setInstance( new LBFactory_Single( array(
                        'connection' => $status->value ) ) );
index dde2193..746cd12 100644 (file)
@@ -256,6 +256,19 @@ abstract class DatabaseUpdater {
                $this->extensionUpdates[] = array( 'dropField', $tableName, $columnName, $sqlPath, true );
        }
 
+       /**
+        * Drop an index from an extension table
+        *
+        * @since 1.21
+        *
+        * @param $tableName string The table name
+        * @param $indexName string The index name
+        * @param $sqlPath string The path to the SQL change path
+        */
+       public function dropExtensionIndex( $tableName, $indexName, $sqlPath ) {
+               $this->extensionUpdates[] = array( 'dropIndex', $tableName, $indexName, $sqlPath, true );
+       }
+
        /**
         *
         * @since 1.20
@@ -267,6 +280,32 @@ abstract class DatabaseUpdater {
                $this->extensionUpdates[] = array( 'dropTable', $tableName, $sqlPath, true );
        }
 
+       /**
+        * Rename an index on an extension table
+        *
+        * @since 1.21
+        *
+        * @param $tableName string The table name
+        * @param $oldIndexName string The old index name
+        * @param $newIndexName string The new index name
+        * @param $skipBothIndexExistWarning Boolean: Whether to warn if both the old and the new indexes exist. [facultative; by default, false]
+        * @param $sqlPath string The path to the SQL change path
+        */
+       public function renameExtensionIndex( $tableName, $oldIndexName, $newIndexName, $sqlPath, $skipBothIndexExistWarning = false ) {
+               $this->extensionUpdates[] = array( 'renameIndex', $tableName, $oldIndexName, $newIndexName, $skipBothIndexExistWarning, $sqlPath, true );
+       }
+
+       /**
+        * @since 1.21
+        *
+        * @param $tableName string The table name
+        * @param $fieldName string The field to be modified
+        * @param $sqlPath string The path to the SQL change path
+        */
+       public function modifyExtensionField( $tableName, $fieldName, $sqlPath) {
+               $this->extensionUpdates[] = array( 'modifyField', $tableName, $fieldName, $sqlPath, true );
+       }
+
        /**
         *
         * @since 1.20
@@ -412,7 +451,7 @@ abstract class DatabaseUpdater {
                $key = "updatelist-$version-" . time();
                $this->db->insert( 'updatelog',
                        array( 'ul_key' => $key, 'ul_value' => serialize( $updates ) ),
-                        __METHOD__ );
+                       __METHOD__ );
                $this->db->setFlag( DBO_DDLMODE );
        }
 
@@ -464,6 +503,26 @@ abstract class DatabaseUpdater {
                        $this->db->fieldExists( 'updatelog', 'ul_value', __METHOD__ );
        }
 
+       /**
+        * Returns whether updates should be executed on the database table $name.
+        * Updates will be prevented if the table is a shared table and it is not
+        * specified to run updates on shared tables.
+        *
+        * @param $name String table name
+        * @return bool
+        */
+       protected function doTable( $name ) {
+               global $wgSharedDB, $wgSharedTables;
+
+               // Don't bother to check $wgSharedTables if there isn't a shared database
+               // or the user actually also wants to do updates on the shared database.
+               if ( $wgSharedDB === null || $this->shared ) {
+                       return true;
+               }
+
+               return !in_array( $name, $wgSharedTables );
+       }
+
        /**
         * Before 1.17, we used to handle updates via stuff like
         * $wgExtNewTables/Fields/Indexes. This is nasty :) We refactored a lot
@@ -474,11 +533,7 @@ abstract class DatabaseUpdater {
         */
        protected function getOldGlobalUpdates() {
                global $wgExtNewFields, $wgExtNewTables, $wgExtModifiedFields,
-                       $wgExtNewIndexes, $wgSharedDB, $wgSharedTables;
-
-               $doUser = $this->shared ?
-                       $wgSharedDB && in_array( 'user', $wgSharedTables ) :
-                       !$wgSharedDB || !in_array( 'user', $wgSharedTables );
+                       $wgExtNewIndexes;
 
                $updates = array();
 
@@ -489,12 +544,10 @@ abstract class DatabaseUpdater {
                }
 
                foreach ( $wgExtNewFields as $fieldRecord ) {
-                       if ( $fieldRecord[0] != 'user' || $doUser ) {
-                               $updates[] = array(
-                                       'addField', $fieldRecord[0], $fieldRecord[1],
-                                               $fieldRecord[2], true
-                               );
-                       }
+                       $updates[] = array(
+                               'addField', $fieldRecord[0], $fieldRecord[1],
+                                       $fieldRecord[2], true
+                       );
                }
 
                foreach ( $wgExtNewIndexes as $fieldRecord ) {
@@ -522,7 +575,7 @@ abstract class DatabaseUpdater {
         *
         * @return Array
         */
-       protected abstract function getCoreUpdateList();
+       abstract protected function getCoreUpdateList();
 
        /**
         * Append an SQL fragment to the open file handle.
@@ -555,6 +608,7 @@ abstract class DatabaseUpdater {
 
        /**
         * Applies a SQL patch
+        *
         * @param $path String Path to the patch file
         * @param $isFullPath Boolean Whether to treat $path as a relative or not
         * @param $msg String Description of the patch
@@ -579,18 +633,23 @@ abstract class DatabaseUpdater {
                } else {
                        $this->db->sourceFile( $path );
                }
-               $this->output( "done.\n" );
+               $this->output( "done.\n" );
                return true;
        }
 
        /**
         * Add a new table to the database
+        *
         * @param $name String Name of the new table
         * @param $patch String Path to the patch file
         * @param $fullpath Boolean Whether to treat $patch path as a relative or not
         * @return Boolean false if this was skipped because schema changes are skipped
         */
        protected function addTable( $name, $patch, $fullpath = false ) {
+               if ( !$this->doTable( $name ) ) {
+                       return true;
+               }
+
                if ( $this->db->tableExists( $name, __METHOD__ ) ) {
                        $this->output( "...$name table already exists.\n" );
                } else {
@@ -601,6 +660,7 @@ abstract class DatabaseUpdater {
 
        /**
         * Add a new field to an existing table
+        *
         * @param $table String Name of the table to modify
         * @param $field String Name of the new field
         * @param $patch String Path to the patch file
@@ -608,6 +668,10 @@ abstract class DatabaseUpdater {
         * @return Boolean false if this was skipped because schema changes are skipped
         */
        protected function addField( $table, $field, $patch, $fullpath = false ) {
+               if ( !$this->doTable( $table ) ) {
+                       return true;
+               }
+
                if ( !$this->db->tableExists( $table, __METHOD__ ) ) {
                        $this->output( "...$table table does not exist, skipping new field patch.\n" );
                } elseif ( $this->db->fieldExists( $table, $field, __METHOD__ ) ) {
@@ -620,6 +684,7 @@ abstract class DatabaseUpdater {
 
        /**
         * Add a new index to an existing table
+        *
         * @param $table String Name of the table to modify
         * @param $index String Name of the new index
         * @param $patch String Path to the patch file
@@ -627,9 +692,12 @@ abstract class DatabaseUpdater {
         * @return Boolean false if this was skipped because schema changes are skipped
         */
        protected function addIndex( $table, $index, $patch, $fullpath = false ) {
+               if ( !$this->doTable( $table ) ) {
+                       return true;
+               }
+
                if ( !$this->db->tableExists( $table, __METHOD__ ) ) {
                        $this->output( "...skipping: '$table' table doesn't exist yet.\n" );
-                       return false;
                } else if ( $this->db->indexExists( $table, $index, __METHOD__ ) ) {
                        $this->output( "...index $index already set on $table table.\n" );
                } else {
@@ -648,6 +716,10 @@ abstract class DatabaseUpdater {
         * @return Boolean false if this was skipped because schema changes are skipped
         */
        protected function dropField( $table, $field, $patch, $fullpath = false ) {
+               if ( !$this->doTable( $table ) ) {
+                       return true;
+               }
+
                if ( $this->db->fieldExists( $table, $field, __METHOD__ ) ) {
                        return $this->applyPatch( $patch, $fullpath, "Table $table contains $field field. Dropping" );
                } else {
@@ -660,12 +732,16 @@ abstract class DatabaseUpdater {
         * Drop an index from an existing table
         *
         * @param $table String: Name of the table to modify
-        * @param $index String: Name of the old index
+        * @param $index String: Name of the index
         * @param $patch String: Path to the patch file
         * @param $fullpath Boolean: Whether to treat $patch path as a relative or not
         * @return Boolean false if this was skipped because schema changes are skipped
         */
        protected function dropIndex( $table, $index, $patch, $fullpath = false ) {
+               if ( !$this->doTable( $table ) ) {
+                       return true;
+               }
+
                if ( $this->db->indexExists( $table, $index, __METHOD__ ) ) {
                        return $this->applyPatch( $patch, $fullpath, "Dropping $index index from table $table" );
                } else {
@@ -674,6 +750,48 @@ abstract class DatabaseUpdater {
                return true;
        }
 
+       /**
+        * Rename an index from an existing table
+        *
+        * @param $table String: Name of the table to modify
+        * @param $oldIndex String: Old name of the index
+        * @param $newIndex String: New name of the index
+        * @param $skipBothIndexExistWarning Boolean: Whether to warn if both the old and the new indexes exist.
+        * @param $patch String: Path to the patch file
+        * @param $fullpath Boolean: Whether to treat $patch path as a relative or not
+        * @return Boolean false if this was skipped because schema changes are skipped
+        */
+       protected function renameIndex( $table, $oldIndex, $newIndex, $skipBothIndexExistWarning, $patch, $fullpath = false ) {
+               if ( !$this->doTable( $table ) ) {
+                       return true;
+               }
+
+               // First requirement: the table must exist
+               if ( !$this->db->tableExists( $table, __METHOD__ ) ) {
+                       $this->output( "...skipping: '$table' table doesn't exist yet.\n" );
+                       return true;
+               }
+
+               // Second requirement: the new index must be missing
+               if ( $this->db->indexExists( $table, $newIndex, __METHOD__ ) ) {
+                       $this->output( "...index $newIndex already set on $table table.\n" );
+                       if ( !$skipBothIndexExistWarning && $this->db->indexExists( $table, $oldIndex, __METHOD__ ) ) {
+                               $this->output( "...WARNING: $oldIndex still exists, despite it has been renamed into $newIndex (which also exists).\n" .
+                                       "            $oldIndex should be manually removed if not needed anymore.\n" );
+                       }
+                       return true;
+               }
+
+               // Third requirement: the old index must exist
+               if ( !$this->db->indexExists( $table, $oldIndex, __METHOD__ ) ) {
+                       $this->output( "...skipping: index $oldIndex doesn't exist.\n" );
+                       return true;
+               }
+
+               // Requirements have been satisfied, patch can be applied
+               return $this->applyPatch( $patch, $fullpath, "Renaming index $oldIndex into $newIndex to table $table" );
+       }
+
        /**
         * If the specified table exists, drop it, or execute the
         * patch if one is provided.
@@ -686,6 +804,10 @@ abstract class DatabaseUpdater {
         * @return Boolean false if this was skipped because schema changes are skipped
         */
        public function dropTable( $table, $patch = false, $fullpath = false ) {
+               if ( !$this->doTable( $table ) ) {
+                       return true;
+               }
+
                if ( $this->db->tableExists( $table, __METHOD__ ) ) {
                        $msg = "Dropping table $table";
 
@@ -713,6 +835,10 @@ abstract class DatabaseUpdater {
         * @return Boolean false if this was skipped because schema changes are skipped
         */
        public function modifyField( $table, $field, $patch, $fullpath = false ) {
+               if ( !$this->doTable( $table ) ) {
+                       return true;
+               }
+
                $updateKey = "$table-$field-$patch";
                if ( !$this->db->tableExists( $table, __METHOD__ ) ) {
                        $this->output( "...$table table does not exist, skipping modify field patch.\n" );
index ca9bdf4..bf19055 100644 (file)
@@ -47,7 +47,7 @@ class Ibm_db2Installer extends DatabaseInstaller {
         * Get the DB2 database extension name
         * @return string
         */
-       public function getName(){
+       public function getName() {
                return 'ibm_db2';
        }
 
index 928f143..2366495 100644 (file)
@@ -17,19 +17,19 @@ $messages['en'] = array(
        'config-information'              => 'Information',
        'config-localsettings-upgrade'    => "A <code>LocalSettings.php</code> file has been detected.
 To upgrade this installation, please enter the value of <code>\$wgUpgradeKey</code> in the box below.
-You will find it in LocalSettings.php.",
-       'config-localsettings-cli-upgrade'    => 'A LocalSettings.php file has been detected.
-To upgrade this installation, please run update.php instead',
+You will find it in <code>LocalSettings.php</code>.",
+       'config-localsettings-cli-upgrade'    => 'A <code>LocalSettings.php</code> file has been detected.
+To upgrade this installation, please run <code>update.php</code> instead',
        'config-localsettings-key'        => 'Upgrade key:',
        'config-localsettings-badkey'     => 'The key you provided is incorrect.',
        'config-upgrade-key-missing'      => 'An existing installation of MediaWiki has been detected.
-To upgrade this installation, please put the following line at the bottom of your LocalSettings.php:
+To upgrade this installation, please put the following line at the bottom of your <code>LocalSettings.php</code>:
 
 $1',
-       'config-localsettings-incomplete' => 'The existing LocalSettings.php appears to be incomplete.
+       'config-localsettings-incomplete' => 'The existing <code>LocalSettings.php</code> appears to be incomplete.
 The $1 variable is not set.
-Please change LocalSettings.php so that this variable is set, and click "Continue".',
-       'config-localsettings-connection-error' => 'An error was encountered when connecting to the database using the settings specified in LocalSettings.php or AdminSettings.php. Please fix these settings and try again.
+Please change <code>LocalSettings.php</code> so that this variable is set, and click "{{int:Config-continue}}".',
+       'config-localsettings-connection-error' => 'An error was encountered when connecting to the database using the settings specified in <code>LocalSettings.php</code> or <code>AdminSettings.php</code>. Please fix these settings and try again.
 
 $1',
        'config-session-error'            => 'Error starting session: $1',
@@ -163,7 +163,9 @@ Installation aborted.',
        'config-using531'                 => 'MediaWiki cannot be used with PHP $1 due to a bug involving reference parameters to <code>__call()</code>.
 Upgrade to PHP 5.3.2 or higher, or downgrade to PHP 5.3.0 to resolve this.
 Installation aborted.',
-       'config-suhosin-max-value-length' => "Suhosin is installed and limits the GET parameter length to $1 bytes. MediaWiki's ResourceLoader component will work around this limit, but that will degrade performance. If at all possible, you should set suhosin.get.max_value_length to 1024 or higher in php.ini , and set \$wgResourceLoaderMaxQueryLength to the same value in LocalSettings.php .",
+       'config-suhosin-max-value-length' => "Suhosin is installed and limits the GET parameter <code>length</code> to $1 bytes.
+MediaWiki's ResourceLoader component will work around this limit, but that will degrade performance.
+If at all possible, you should set <code>suhosin.get.max_value_length</code> to 1024 or higher in <code>php.ini</code>, and set <code>\$wgResourceLoaderMaxQueryLength</code> to the same value in <code>LocalSettings.php</code>.",
        'config-db-type'                  => 'Database type:',
        'config-db-host'                  => 'Database host:',
        'config-db-host-help'             => 'If your database server is on different server, enter the host name or IP address here.
@@ -249,7 +251,7 @@ If you do not see the database system you are trying to use listed below, then f
        'config-support-postgres'         => '* $1 is a popular open source database system as an alternative to MySQL ([http://www.php.net/manual/en/pgsql.installation.php how to compile PHP with PostgreSQL support]). There may be some minor outstanding bugs, and it is not recommended for use in a production environment.',
        'config-support-sqlite'           => '* $1 is a lightweight database system which is very well supported. ([http://www.php.net/manual/en/pdo.installation.php How to compile PHP with SQLite support], uses PDO)',
        'config-support-oracle'           => '* $1 is a commercial enterprise database. ([http://www.php.net/manual/en/oci8.installation.php How to compile PHP with OCI8 support])',
-       'config-support-ibm_db2'          => '* $1 is a commercial enterprise database.',
+       'config-support-ibm_db2'          => '* $1 is a commercial enterprise database. ([http://www.php.net/manual/en/ibm-db2.installation.php How to compile PHP with IBM DB2 support])',
        'config-header-mysql'             => 'MySQL settings',
        'config-header-postgres'          => 'PostgreSQL settings',
        'config-header-sqlite'            => 'SQLite settings',
@@ -316,8 +318,8 @@ This is '''not recommended''' unless you are having problems with your wiki.",
        'config-upgrade-done-no-regenerate' => "Upgrade complete.
 
 You can now [$1 start using your wiki].",
-       'config-regenerate'               => 'Regenerate LocalSettings.php →',
-       'config-show-table-status'        => 'SHOW TABLE STATUS query failed!',
+       'config-regenerate'               => 'Regenerate <code>LocalSettings.php</code> →',
+       'config-show-table-status'        => '<code>SHOW TABLE STATUS</code> query failed!',
        'config-unknown-collation'        => "'''Warning:''' Database is using unrecognised collation.",
        'config-db-web-account'           => 'Database account for web access',
        'config-db-web-help'              => 'Select the username and password that the web server will use to connect to the database server, during ordinary operation of the wiki.',
@@ -359,7 +361,7 @@ In '''UTF-8 mode''', MySQL will know what character set your data is in, and can
        'config-ns-other-default'         => 'MyWiki',
        'config-project-namespace-help'   => 'Following Wikipedia\'s example, many wikis keep their policy pages separate from their content pages, in a "\'\'\'project namespace\'\'\'".
 All page titles in this namespace start with a certain prefix, which you can specify here.
-Traditionally, this prefix is derived from the name of the wiki, but it cannot contain punctuation characters such as "#" or ":".',
+Usually, this prefix is derived from the name of the wiki, but it cannot contain punctuation characters such as "#" or ":".',
        'config-ns-invalid'               => 'The specified namespace "<nowiki>$1</nowiki>" is invalid.
 Specify a different project namespace.',
        'config-ns-conflict'               => 'The specified namespace "<nowiki>$1</nowiki>" conflicts with a default MediaWiki namespace.
@@ -391,7 +393,7 @@ You can now skip the remaining configuration and install the wiki right now.',
        'config-optional-continue'        => 'Ask me more questions.',
        'config-optional-skip'            => "I'm bored already, just install the wiki.",
        'config-profile'                  => 'User rights profile:',
-       'config-profile-wiki'             => 'Traditional wiki',
+       'config-profile-wiki'             => 'Open wiki',
        'config-profile-no-anon'          => 'Account creation required',
        'config-profile-fishbowl'         => 'Authorized editors only',
        'config-profile-private'          => 'Private wiki',
@@ -401,7 +403,7 @@ In MediaWiki, it is easy to review the recent changes, and to revert any damage
 However, many have found MediaWiki to be useful in a wide variety of roles, and sometimes it is not easy to convince everyone of the benefits of the wiki way.
 So you have the choice.
 
-A '''{{int:config-profile-wiki}}''' allows anyone to edit, without even logging in.
+The '''{{int:config-profile-wiki}}''' model allows anyone to edit, without even logging in.
 A wiki with '''{{int:config-profile-no-anon}}''' provides extra accountability, but may deter casual contributors.
 
 The '''{{int:config-profile-fishbowl}}''' scenario allows approved users to edit, but the public can view the pages, including history.
@@ -492,7 +494,7 @@ They may require additional configuration, but you can enable them now',
        'config-install-alreadydone'      => "'''Warning:''' You seem to have already installed MediaWiki and are trying to install it again.
 Please proceed to the next page.",
        'config-install-begin'            => 'By pressing "{{int:config-continue}}", you will begin the installation of MediaWiki.
-If you still want to make changes, press back.',
+If you still want to make changes, press "{{int:config-back}}".',
        'config-install-step-done'        => 'done',
        'config-install-step-failed'      => 'failed',
        'config-install-extensions'       => 'Including extensions',
@@ -548,7 +550,7 @@ $3
 '''Note''': If you do not do this now, this generated configuration file will not be available to you later if you exit the installation without downloading it.
 
 When that has been done, you can '''[$2 enter your wiki]'''.",
-       'config-download-localsettings' => 'Download LocalSettings.php',
+       'config-download-localsettings' => 'Download <code>LocalSettings.php</code>',
        'config-help' => 'help',
        'config-nofile'     => 'File "$1" could not be found. Has it been deleted?',
        'mainpagetext'      => "'''MediaWiki has been successfully installed.'''",
@@ -583,7 +585,7 @@ $messages['qqq'] = array(
        'config-title' => 'Parameters:
 * $1 is the version of MediaWiki that is being installed.',
        'config-information' => '{{Identical|Information}}',
-       'config-localsettings-cli-upgrade' => 'Do not translate the <code>LocalSettings.php</code> and the <code>update.php</code> parts.',
+       'config-localsettings-cli-upgrade' => '{{doc-important|Do not translate the <code>LocalSettings.php</code> and the <code>update.php</code> parts.}}',
        'config-session-error' => 'Parameters:
 * $1 is the error that was encountered with the session.',
        'config-session-expired' => 'Parameters:
@@ -601,15 +603,17 @@ $messages['qqq'] = array(
 * $1 is the version of PHP that has been installed.',
        'config-unicode-pure-php-warning' => 'PECL is the name of a group producing standard pieces of software for PHP, and intl is the name of their library handling some aspects of internationalization.',
        'config-unicode-update-warning' => "ICU is a body producing standard software tools for support of Unicode and other internationalization aspects. This message warns the system administrator installing MediaWiki that the server's software is not up-to-date and MediaWiki will have problems handling some characters.",
-       'config-no-db' => 'Do not translate: <code>./configure --with-mysql</code>.
-<br />
-Do not translate: <code>php5-mysql</code>.
-
+       'config-no-db' => '{{doc-important|Do not translate "<code>./configure --with-mysql</code>" and "<code>php5-mysql</code>".}}
 Parameters:
 * $1 is comma separated list of database types supported by MediaWiki.',
        'config-no-fts3' => 'A "[[:wikipedia:Front and back ends|backend]]" is a system or component that ordinary users don\'t interact with directly and don\'t need to know about, and that is responsible for a distinct task or service - for example, a storage back-end is a generic system for storing data which other applications can use. Possible alternatives for back-end are "system" or "service", or (depending on context and language) even leave it untranslated.',
+       'config-magic-quotes-runtime' => '{{Related|Config-fatal}}',
+       'config-magic-quotes-sybase' => '{{Related|Config-fatal}}',
+       'config-mbstring' => '{{Related|Config-fatal}}',
+       'config-ze1' => '{{Related|Config-fatal}}',
        'config-pcre' => 'PCRE is an initialism for "Perl-compatible regular expression". Perl is programming language whose [[:w:regular expression|regular expression]] syntax is popular and used in other languages using a library called PCRE.',
-       'config-pcre-no-utf8' => "PCRE is a name of a programmers' library for supporting regular expressions. It can probably be translated without change.",
+       'config-pcre-no-utf8' => "PCRE is a name of a programmers' library for supporting regular expressions. It can probably be translated without change.
+{{Related|Config-fatal}}",
        'config-memory-raised' => 'Parameters:
 * $1 is the configured <code>memory_limit</code>.
 * $2 is the value to which <code>memory_limit</code> was raised.',
@@ -625,11 +629,15 @@ Add dir="ltr" to the <nowiki><code></nowiki> for right-to-left languages.',
        'config-no-cli-uri' => 'Parameters:
 * $1 is the default value for scriptpath.',
        'config-no-cli-uploads-check' => 'CLI = [[w:Command-line interface|command-line interface]] (i.e. the installer runs as a command-line script, not using HTML interface via an internet browser)',
-       'config-suhosin-max-value-length' => 'Message shown when PHP parameter suhosin.get.max_value_length is between 0 and 1023 (that max value is hard set in MediaWiki software)',
+       'config-suhosin-max-value-length' => '{{doc-important|Do not translate "length", "suhosin.get.max_value_length", "php.ini", "$wgResourceLoaderMaxQueryLength" and "LocalSettings.php".}}
+Message shown when PHP parameter <code>suhosin.get.max_value_length</code> is between 0 and 1023 (that max value is hard set in MediaWiki software).',
+       'config-db-host-help' => '{{doc-singularthey}}',
        'config-db-host-oracle' => 'TNS = [[:wikipedia:Transparent Network Substrate|Transparent Network Substrate]] (<== wikipedia link)',
        'config-db-wiki-settings' => 'This is more acurate: "Enter identifying or distinguishing data for this wiki" since a MySQL database can host tables of several wikis.',
        'config-db-account-oracle-warn' => 'A "[[:wikipedia:Front and back ends|backend]]" is a system or component that ordinary users don\'t interact with directly and don\'t need to know about, and that is responsible for a distinct task or service - for example, a storage back-end is a generic system for storing data which other applications can use. Possible alternatives for back-end are "system" or "service", or (depending on context and language) even leave it untranslated.',
        'config-db-account-lock' => "It might be easier to translate ''normal operation'' as \"also after the installation process\"",
+       'config-pg-test-error' => '* $1 - database name
+* $2 - error message',
        'config-type-mysql' => '{{optional}}',
        'config-type-postgres' => '{{optional}}',
        'config-type-sqlite' => '{{optional}}',
@@ -644,6 +652,7 @@ Add dir="ltr" to the <nowiki><code></nowiki> for right-to-left languages.',
 * $1 - a link to the SQLite home page having the anchor text "SQLite".',
        'config-support-oracle' => 'Parameters:
 * $1 - a link to the Oracle home page, the anchor text of which is "Oracle".',
+       'config-support-ibm_db2' => 'Used in the DBConnect step of the installer, explaining what is the ibm_db2 database',
        'config-connection-error' => '$1 is the external error from the database, such as "DB connection error: Access denied for user \'dba\'@\'localhost\' (using password: YES) (localhost)."
 
 If you\'re translating this message to a right-to-left language, consider writing <nowiki><div dir="ltr">$1.</div></nowiki>. (When the bidi features for HTML5 will be implemented in the browsers, it will probably be a good idea to write it as <nowiki><div dir="auto">$1.</div></nowiki>.)',
@@ -651,7 +660,7 @@ If you\'re translating this message to a right-to-left language, consider writin
        'config-sqlite-dir-unwritable' => 'webserver refers to a software like Apache or Lighttpd.',
        'config-can-upgrade' => 'Parameters:
 * $1 - Version or Revision indicator.',
-       'config-show-table-status' => '{{doc-important|"SHOW TABLE STATUS" is a MySQL command. Do not translate this.}}',
+       'config-show-table-status' => '{{doc-important|"<code>SHOW TABLE STATUS</code>" is a MySQL command. Do not translate this.}}',
        'config-db-web-account-same' => 'checkbox label',
        'config-db-web-create' => 'checkbox label',
        'config-ns-generic' => '{{Identical|Project}}',
@@ -666,8 +675,10 @@ If you\'re translating this message to a right-to-left language, consider writin
 * {{msg-mw|config-profile-private}}',
        'config-upload-help' => 'The word "mode" here refers to the access rights given to various user groups when attempting to create and store files and/or subdiretories in the said directory on the server. It also refers to the <code>mode</code> command used to maipulate said right mask under Unix, Linux, and similar operating systems. A less operating-system-centric translation is fine.',
        'config-logo-help' => '',
-       'config-cc-not-chosen' => 'Do not translate the <code>"proceed".</code> part.
-This message refers to a block of HTML being embedded into the installer page. It comes from the Creative Commons Web site. The block is in the English language. It is a scripted license chooser. When an individual license has been selected, it asks you to klick "proceed" so as to return to the MediaWiki installer page.',
+       'config-cc-not-chosen' => '{{doc-important|Do not translate the "<code>proceed</code>" part.}}
+This message refers to a block of HTML being embedded into the installer page. It comes from the Creative Commons Web site. The block is in the English language. It is a scripted license chooser. When an individual license has been selected, it asks you to click "proceed" so as to return to the MediaWiki installer page.',
+       'config-memcached-servers' => '{{doc-important|Do not translate "memcached".}}
+{{Identical|Memcached server}}',
        'config-extensions' => '{{Identical|Extension}}',
        'config-install-step-done' => '{{Identical|Done}}',
        'config-install-database' => '*{{msg-mw|Config-install-database}}
@@ -780,8 +791,8 @@ See also:
        'config-download-localsettings' => 'The link text used in the download link in config-install-done.',
        'config-help' => 'This is used in help boxes.
 {{Identical|Help}}',
-       'mainpagetext' => 'Along with {{msg|mainpagedocfooter}}, the text you will see on the Main Page when your wiki is installed.',
-       'mainpagedocfooter' => 'Along with {{msg|mainpagetext}}, the text you will see on the Main Page when your wiki is installed.
+       'mainpagetext' => 'Along with {{msg-mw|mainpagedocfooter}}, the text you will see on the Main Page when your wiki is installed.',
+       'mainpagedocfooter' => 'Along with {{msg-mw|mainpagetext}}, the text you will see on the Main Page when your wiki is installed.
 This might be a good place to put information about <nowiki>{{GRAMMAR:}}</nowiki>. See [[{{NAMESPACE}}:{{BASEPAGENAME}}/fi]] for an example. For languages having grammatical distinctions and not having an appropriate <nowiki>{{GRAMMAR:}}</nowiki> software available, a suggestion to check and possibly amend the messages having <nowiki>{{SITENAME}}</nowiki> may be valuable. See [[{{NAMESPACE}}:{{BASEPAGENAME}}/ksh]] for an example.',
 );
 
@@ -875,8 +886,8 @@ U gebruik tans $2.',
        'config-upgrade-done-no-regenerate' => 'Opgradering is voltooi.
 
 U kan nou [$1 u wiki gebruik].',
-       'config-regenerate' => 'Herskep LocalSettings.php →',
-       'config-show-table-status' => 'Die uitvoer van SHOW TABLE STATUS het gefaal!',
+       'config-regenerate' => 'Herskep <code>LocalSettings.php</code> →',
+       'config-show-table-status' => 'Die uitvoer van <code>SHOW TABLE STATUS</code> het gefaal!',
        'config-db-web-account' => 'Databasisgebruiker vir toegang tot die web',
        'config-mysql-engine' => 'Stoor-enjin:',
        'config-mysql-innodb' => 'InnoDB',
@@ -901,7 +912,7 @@ U kan nou [$1 u wiki gebruik].',
        'config-admin-email' => 'E-posadres:',
        'config-optional-continue' => 'Vra my meer vrae.',
        'config-optional-skip' => 'Ek is reeds verveeld, installeer maar net die wiki.',
-       'config-profile-wiki' => 'Tradisionele wiki',
+       'config-profile-wiki' => 'Tradisionele wiki', # Fuzzy
        'config-profile-no-anon' => 'Skep van gebruiker is verpligtend',
        'config-profile-fishbowl' => 'Slegs vir gemagtigde redaksie',
        'config-profile-private' => 'Privaat wiki',
@@ -958,7 +969,7 @@ U sal dit moet [$1 aflaai] en dit in die hoofgids van u wiki-installasie plaas;
 '''Let wel''': As u dit nie nou doen nie, sal die gegenereerde konfigurasielêer nie later meer beskikbaar wees nadat u die installasie afgesluit het nie.
 
 As dit gedoen is, kan u '''[u $2 wiki besoek]'''.", # Fuzzy
-       'config-download-localsettings' => 'Laai LocalSettings.php af',
+       'config-download-localsettings' => 'Laai <code>LocalSettings.php</code> af',
        'config-help' => 'hulp',
        'mainpagetext' => "'''MediaWiki is suksesvol geïnstalleer.'''",
        'mainpagedocfooter' => "Konsulteer '''[//meta.wikimedia.org/wiki/Help:Contents User's Guide]''' vir inligting oor hoe om die wikisagteware te gebruik.
@@ -966,7 +977,7 @@ As dit gedoen is, kan u '''[u $2 wiki besoek]'''.", # Fuzzy
 == Hoe om te Begin ==
 * [//www.mediawiki.org/wiki/Manual:Configuration_settings Configuration settings list]
 * [//www.mediawiki.org/wiki/Manual:FAQ MediaWiki FAQ]
-* [https://lists.wikimedia.org/mailman/listinfo/mediawiki-announce MediaWiki release mailing list]",
+* [https://lists.wikimedia.org/mailman/listinfo/mediawiki-announce MediaWiki release mailing list]", # Fuzzy
 );
 
 /** Gheg Albanian (Gegë)
@@ -1239,6 +1250,7 @@ $messages['be'] = array(
  * @author Jim-by
  * @author Wizardist
  * @author Zedlik
+ * @author 아라
  */
 $messages['be-tarask'] = array(
        'config-desc' => 'Праграма ўсталяваньня MediaWiki',
@@ -1246,19 +1258,19 @@ $messages['be-tarask'] = array(
        'config-information' => 'Інфармацыя',
        'config-localsettings-upgrade' => 'Выяўлены файл <code>LocalSettings.php</code>.
 Каб абнавіць гэтае усталяваньне, калі ласка, увядзіце значэньне <code>$wgUpgradeKey</code> у полі ніжэй.
-Яго можна знайсьці ў LocalSettings.php.',
-       'config-localsettings-cli-upgrade' => 'Быў знойдзены файл LocalSettings.php.
-Каб зьмяніць гэтае ўсталяваньне, калі ласка, запусьціце update.php',
+Яго можна знайсьці ў <code>LocalSettings.php</code>.',
+       'config-localsettings-cli-upgrade' => 'Быў знойдзены файл <code>LocalSettings.php</code>.
+Каб зьмяніць гэтае ўсталяваньне, калі ласка, запусьціце <code>update.php</code>',
        'config-localsettings-key' => 'Ключ паляпшэньня:',
        'config-localsettings-badkey' => 'Пададзены Вамі ключ зьяўляецца няслушным',
        'config-upgrade-key-missing' => 'Выяўленае існуючае ўсталяваньне MediaWiki.
-Каб абнавіць гэтае ўсталяваньне, калі ласка, устаўце наступны радок у канец Вашага LocalSettings.php:
+Каб абнавіць гэтае ўсталяваньне, калі ласка, устаўце наступны радок у канец Вашага <code>LocalSettings.php</code>:
 
 $1',
-       'config-localsettings-incomplete' => 'Выглядае, што існуючы LocalSettings.php зьяўляецца няпоўным.
+       'config-localsettings-incomplete' => 'Выглядае, што існуючы <code>LocalSettings.php</code> зьяўляецца няпоўным.
 Не ўстаноўленая пераменная $1.
-Калі ласка, зьмяніце LocalSettings.php так, каб была ўстаноўленая гэтая пераменная, і націсьніце «Працягваць».',
-       'config-localsettings-connection-error' => 'Адбылася памылка падчас злучэньня з базай зьвестак з выкарыстаньнем наладаў, пазначаных у LocalSettings.php ці AdminSettings.php. Калі ласка, выпраўце гэтыя налады і паспрабуйце зноў.
+Калі ласка, зьмяніце <code>LocalSettings.php</code> так, каб была ўстаноўленая гэтая пераменная, і націсьніце «{{int:Config-continue}}».',
+       'config-localsettings-connection-error' => 'Адбылася памылка падчас злучэньня з базай зьвестак з выкарыстаньнем наладаў, пазначаных у <code>LocalSettings.php</code> ці <code>AdminSettings.php</code>. Калі ласка, выпраўце гэтыя налады і паспрабуйце зноў.
 
 $1',
        'config-session-error' => 'Памылка стварэньня сэсіі: $1',
@@ -1392,7 +1404,9 @@ MediaWiki патрабуе падтрымкі UTF-8 для слушнай пра
        'config-using531' => 'PHP $1 не сумяшчальнае з MediaWiki з-за памылкі ў перадачы парамэтраў па ўказальніку да <code>__call()</code>.
 Абнавіце PHP да вэрсіі 5.3.2 ці болей позьняй, ці адкаціце да вэрсіі 5.3.0 каб гэта выправіць.
 Усталяваньне перарванае.',
-       'config-suhosin-max-value-length' => 'Suhosin усталяваны і абмяжоўвае даўжыню парамэтра GET у $1 {{PLURAL:$1|байт|байты|байтаў}}. ResourceLoader для MediaWiki будзе абходзіць гэтае абмежаваньне, што, аднак, адаб’ецца на хуткадзеяньні. Калі магчыма, варта ўстанавіць suhosin.get.max_value_length роўным 1024 ці больш у php.ini, а таксама ўстанавіць тое ж значэньне для $wgResourceLoaderMaxQueryLength у LocalSettings.php.',
+       'config-suhosin-max-value-length' => 'Suhosin усталяваны і абмяжоўвае <code>даўжыню</code> парамэтра GET да $1 {{PLURAL:$1|байта|байтаў}}.
+ResourceLoader, складнік MediaWiki, будзе абходзіць гэтае абмежаваньне, што, адаб’ецца на прадукцыйнасьці.
+Калі магчыма, варта ўсталяваць у <code>php.ini</code> <code>suhosin.get.max_value_length</code> роўным 1024 ці больш, а таксама вызначыць тое ж значэньне для <code>$wgResourceLoaderMaxQueryLength</code> у LocalSettings.php.',
        'config-db-type' => 'Тып базы зьвестак:',
        'config-db-host' => 'Хост базы зьвестак:',
        'config-db-host-help' => 'Калі сэрвэр Вашай базы зьвестак знаходзіцца на іншым сэрвэры, увядзіце тут імя хоста ці IP-адрас.
@@ -1476,7 +1490,7 @@ $1
        'config-support-postgres' => '* $1 — вядомая сыстэма базы зьвестак з адкрытым кодам, якая зьяўляецца альтэрнатывай MySQL ([http://www.php.net/manual/en/pgsql.installation.php як кампіляваць PHP з падтрымкай PostgreSQL]). Яна можа ўтрымліваць дробныя памылкі, і не рэкамэндуецца выкарыстоўваць яе для працуючых праектаў.',
        'config-support-sqlite' => '* $1 — невялікая сыстэма базы зьвестак, якая мае вельмі добрую падтрымку. ([http://www.php.net/manual/en/pdo.installation.php як кампіляваць PHP з падтрымкай SQLite], выкарыстоўвае PDO)',
        'config-support-oracle' => '* $1 зьяўляецца камэрцыйнай прафэсійнай базай зьвестак. ([http://www.php.net/manual/en/oci8.installation.php Як скампіляваць PHP з падтрымкай OCI8])',
-       'config-support-ibm_db2' => '* $1 â\80\94 Ð±Ð°Ð·Ð° Ð·Ñ\8cвеÑ\81Ñ\82ак ÐºÐ°Ð¼Ñ\8dÑ\80Ñ\86Ñ\8bйнага Ð¿Ñ\80адпÑ\80Ñ\8bемÑ\81Ñ\82ва.',
+       'config-support-ibm_db2' => '* $1 â\80\94 Ð±Ð°Ð·Ð° Ð·Ñ\8cвеÑ\81Ñ\82ак Ð¼Ð°Ñ\88Ñ\82абÑ\83 Ð¿Ñ\80адпÑ\80Ñ\8bемÑ\81Ñ\82ва. ([http://www.php.net/manual/en/ibm-db2.installation.php Ð¯Ðº Ñ\81кампÑ\96лÑ\8fваÑ\86Ñ\8c PHP Ð· Ð¿Ð°Ð´Ñ\82Ñ\80Ñ\8bмкай IBM DB2])',
        'config-header-mysql' => 'Налады MySQL',
        'config-header-postgres' => 'Налады PostgreSQL',
        'config-header-sqlite' => 'Налады SQLite',
@@ -1543,8 +1557,8 @@ chmod a+w $3</pre>',
        'config-upgrade-done-no-regenerate' => 'Абнаўленьне скончанае.
 
 Цяпер Вы можаце [$1 пачаць працу з вікі].',
-       'config-regenerate' => 'Рэгенэраваць LocalSettings.php →',
-       'config-show-table-status' => "Запыт 'SHOW TABLE STATUS' не атрымаўся!",
+       'config-regenerate' => 'Рэгенэраваць <code>LocalSettings.php</code> →',
+       'config-show-table-status' => "Запыт '<code>SHOW TABLE STATUS</code>' не атрымаўся!",
        'config-unknown-collation' => "'''Папярэджаньне:''' база зьвестак выкарыстоўвае нераспазнанае супастаўленьне.",
        'config-db-web-account' => 'Рахунак базы зьвестак для вэб-доступу',
        'config-db-web-help' => 'Выберыце імя карыстальніка і пароль, які выкарыстоўваецца вэб-сэрвэрам для злучэньня з сэрвэрам базы зьвестак, падчас звычайных апэрацыяў вікі.',
@@ -1616,7 +1630,7 @@ chmod a+w $3</pre>',
        'config-optional-continue' => 'Задаць болей пытаньняў.',
        'config-optional-skip' => 'Хопіць, проста ўсталяваць вікі.',
        'config-profile' => 'Профіль правоў удзельніка:',
-       'config-profile-wiki' => 'ТÑ\80адÑ\8bÑ\86Ñ\8bйная вікі',
+       'config-profile-wiki' => 'Ð\90дкÑ\80Ñ\8bÑ\82ая вікі',
        'config-profile-no-anon' => 'Патрэбнае стварэньне рахунку',
        'config-profile-fishbowl' => 'Толькі для аўтарызаваных рэдактараў',
        'config-profile-private' => 'Прыватная вікі',
@@ -1632,7 +1646,7 @@ chmod a+w $3</pre>',
 Сцэнар '''{{int:config-profile-fishbowl}}''' дазваляе рэдагаваць зацьверджаным удзельнікам, але ўсе могуць праглядаць старонкі іх гісторыю.
 '''{{int:config-profile-private}}''' дазваляе праглядаць і рэдагаваць старонкі толькі зацьверджаным удзельнікам.
 
-Больш складаныя правы ўдзельнікаў даступныя пасьля ўсталяваньня, глядзіце [//www.mediawiki.org/wiki/Manual:User_rights адпаведную старонку дакумэнтацыі].",
+Больш складаныя правы ўдзельнікаў даступныя пасьля ўсталяваньня, глядзіце [//www.mediawiki.org/wiki/Manual:User_rights адпаведную старонку дакумэнтацыі].", # Fuzzy
        'config-license' => 'Аўтарскія правы і ліцэнзія:',
        'config-license-none' => 'Без інфармацыі пра ліцэнзію',
        'config-license-cc-by-sa' => 'Creative Commons Attribution Share Alike',
@@ -1717,7 +1731,7 @@ chmod a+w $3</pre>',
        'config-install-alreadydone' => "'''Папярэджаньне:''' здаецца, што Вы ўжо ўсталёўвалі MediaWiki і спрабуеце зрабіць гэтай зноў.
 Калі ласка, перайдзіце на наступную старонку.",
        'config-install-begin' => 'Пасьля націску кнопкі «{{int:config-continue}}» пачнецца ўсталяваньне MediaWiki.
-Калі Вы жадаеце што-небудзь зьмяніць, націсьніце кнопку «Вярнуцца».',
+Калі Вы жадаеце што-небудзь зьмяніць, націсьніце кнопку «Вярнуцца».', # Fuzzy
        'config-install-step-done' => 'зроблена',
        'config-install-step-failed' => 'не атрымалася',
        'config-install-extensions' => 'Уключаючы пашырэньні',
@@ -1773,7 +1787,7 @@ $3
 '''Заўвага''': калі Вы гэтага ня зробіце зараз, то створаны файл ня будзе даступны Вам потым, калі Вы выйдзеце з праграмы ўсталяваньня  без яго загрузкі.
 
 Калі Вы гэта зробіце, Вы можаце '''[$2 ўвайсьці ў Вашую вікі]'''.",
-       'config-download-localsettings' => 'Загрузіць LocalSettings.php',
+       'config-download-localsettings' => 'Загрузіць <code>LocalSettings.php</code>',
        'config-help' => 'дапамога',
        'config-nofile' => 'Файл «$1» ня знойдзены. Ці быў ён выдалены?',
        'mainpagetext' => "'''MediaWiki пасьпяхова ўсталяваная.'''",
@@ -1782,11 +1796,12 @@ $3
 == З чаго пачаць ==
 * [//www.mediawiki.org/wiki/Manual:Configuration_settings Сьпіс парамэтраў канфігурацыі]
 * [//www.mediawiki.org/wiki/Manual:FAQ Частыя пытаньні MediaWiki]
-* [https://lists.wikimedia.org/mailman/listinfo/mediawiki-announce Рассылка паведамленьняў пра зьяўленьне новых вэрсіяў MediaWiki]',
+* [https://lists.wikimedia.org/mailman/listinfo/mediawiki-announce Рассылка паведамленьняў пра зьяўленьне новых вэрсіяў MediaWiki]', # Fuzzy
 );
 
 /** Bulgarian (български)
  * @author DCLXVI
+ * @author 아라
  */
 $messages['bg'] = array(
        'config-desc' => 'Инсталатор на МедияУики',
@@ -1794,19 +1809,19 @@ $messages['bg'] = array(
        'config-information' => 'Информация',
        'config-localsettings-upgrade' => 'Беше открит файл <code>LocalSettings.php</code>.
 За надграждане на съществуващата инсталация, необходимо е в кутията по-долу да се въведе стойността на <code>$wgUpgradeKey</code>.
-Тази информация е налична в LocalSettings.php.',
-       'config-localsettings-cli-upgrade' => 'Беше открит файл LocalSettings.php.
-За надграждане на наличната инсталация, необходимо е да се стартира update.php',
+Тази информация е налична в <code>LocalSettings.php</code>.',
+       'config-localsettings-cli-upgrade' => 'Беше открит файл <code>LocalSettings.php</code>.
+За надграждане на наличната инсталация, необходимо е да се стартира <code>update.php</code>',
        'config-localsettings-key' => 'Ключ за надграждане:',
        'config-localsettings-badkey' => 'Предоставеният ключ е неправилен.',
        'config-upgrade-key-missing' => 'Беше открита съществуваща инсталация на МедияУики.
-За надграждане на съществуващата инсталация, необходимо е да се постави следният ред в края на файла LocalSettings.php:
+За надграждане на съществуващата инсталация, необходимо е да се постави следният ред в края на файла <code>LocalSettings.php</code>:
 
 $1',
-       'config-localsettings-incomplete' => 'Съществуващият файл LocalSettings.php изглежда непълен.
+       'config-localsettings-incomplete' => 'Съществуващият файл <code>LocalSettings.php</code> изглежда непълен.
 Променливата $1 не е зададена.
-Необходимо е да се редактира файлът LocalSettings.php и да се зададе променливата, след което да се натисне "Продължаване".',
-       'config-localsettings-connection-error' => 'Възникна грешка при свързване с базата от данни чрез данните, посочени в LocalSettings.php или AdminSettings.php. Необходимо е да се коригират тези настройки преди повторен опит за свързване.
+Необходимо е да се редактира файлът <code>LocalSettings.php</code> и да се зададе променливата, след което да се натисне „{{int:Config-continue}}“.',
+       'config-localsettings-connection-error' => 'Възникна грешка при свързване с базата от данни чрез данните, посочени в <code>LocalSettings.php</code> или <code>AdminSettings.php</code>. Необходимо е да се коригират тези настройки преди повторен опит за свързване.
 
 $1',
        'config-session-error' => 'Грешка при създаване на сесия: $1',
@@ -1934,7 +1949,7 @@ $1
        'config-using531' => 'МедияУики не може да се използва с PHP $1 заради проблем с референтните параметри за <code>__call()</code>.
 За разрешаване на този проблем е необходимо да се обнови до PHP 5.3.2 или по-нова версия или да се инсталира по-стара версия, напр. PHP 5.3.0.
 Инсталацията беше прекратена.',
-       'config-suhosin-max-value-length' => 'Suhosin е инсталиран и ограничава дължината на параметъра GET на $1 байта. Компонентът на МедияУики ResourceLoader ще може да пренебрегне частично това ограничение, но това ще намали производителността. По възможност е препоръчително да се настрои suhosin.get.max_value_length на 1024 или по-голяма стойност в php.ini и в LocalSettings.php да се настрои $wgResourceLoaderMaxQueryLength със същата стойност.',
+       'config-suhosin-max-value-length' => 'Suhosin е инсталиран и ограничава дължината на параметъра GET на $1 байта. Компонентът на МедияУики ResourceLoader ще може да пренебрегне частично това ограничение, но това ще намали производителността. По възможност е препоръчително да се настрои <code>suhosin.get.max_value_length</code> на 1024 или по-голяма стойност в <code>php.ini</code> и в LocalSettings.php да се настрои <code>$wgResourceLoaderMaxQueryLength</code> със същата стойност.', # Fuzzy
        'config-db-type' => 'Тип на базата от данни:',
        'config-db-host' => 'Хост на базата от данни:',
        'config-db-host-help' => 'Ако базата от данни е на друг сървър, в кутията се въвежда името на хоста или IP адреса.
@@ -2001,7 +2016,7 @@ $1
        'config-support-postgres' => '* $1 е популярна система за бази от данни с отворен изходен код, която е алтернатива на MySQL ([http://www.php.net/manual/en/pgsql.installation.php как се компилира PHP с поддръжка на PostgreSQL]). Възможно е все още да има грешки, затова не се препоръчва да се използва в общодостъпна среда.',
        'config-support-sqlite' => '* $1 е лека система за база от данни, която е много добре поддържана. ([http://www.php.net/manual/en/pdo.installation.php Как се компилира PHP с поддръжка на SQLite], използва PDO)',
        'config-support-oracle' => '* $1 е комерсиална корпоративна база от данни. ([http://www.php.net/manual/en/oci8.installation.php Как се компилира PHP с поддръжка на OCI8])',
-       'config-support-ibm_db2' => '* $1 е комерсиална фирмена база от данни.',
+       'config-support-ibm_db2' => '* $1 е комерсиална фирмена база от данни. ([http://www.php.net/manual/en/ibm-db2.installation.php Как се компилира PHP с поддръжка на IBM DB2])',
        'config-header-mysql' => 'Настройки за MySQL',
        'config-header-postgres' => 'Настройки за PostgreSQL',
        'config-header-sqlite' => 'Настройки за SQLite',
@@ -2068,8 +2083,8 @@ chmod a+w $3</pre>',
        'config-upgrade-done-no-regenerate' => 'Обновяването приключи.
 
 Вече е възможно [$1 да използвате уикито].',
-       'config-regenerate' => 'Създаване на LocalSettings.php →',
-       'config-show-table-status' => 'Заявката SHOW TABLE STATUS не сполучи!',
+       'config-regenerate' => 'Създаване на <code>LocalSettings.php</code> →',
+       'config-show-table-status' => 'Заявката <code>SHOW TABLE STATUS</code> не сполучи!',
        'config-unknown-collation' => "'''Предупреждение:''' Базата от данни използва неразпозната колация.",
        'config-db-web-account' => 'Сметка за уеб достъп до базата от данни',
        'config-db-web-help' => 'Избиране на потребителско име и парола, които уеб сървърът ще използва да се свързва с базата от данни при обичайната работа на уикито.',
@@ -2140,7 +2155,7 @@ chmod a+w $3</pre>',
        'config-optional-continue' => 'Задаване на допълнителни въпроси.',
        'config-optional-skip' => 'Достатъчно, инсталиране на уикито.',
        'config-profile' => 'Профил на потребителските права:',
-       'config-profile-wiki' => 'ТÑ\80адиÑ\86ионно уики',
+       'config-profile-wiki' => 'Ð\9eÑ\82воÑ\80ено уики',
        'config-profile-no-anon' => 'Необходимо е създаване на сметка',
        'config-profile-fishbowl' => 'Само одобрени редактори',
        'config-profile-private' => 'Затворено уики',
@@ -2156,7 +2171,7 @@ chmod a+w $3</pre>',
 Уики, което е '''{{int:config-profile-fishbowl}}''' позволява на всички да преглеждат страниците, но само предварително одобрени редактори могат да редактират съдържанието.
 В '''{{int:config-profile-private}}''' само предварително одобрени потребители могат да четат и редактират съдържанието.
 
-Детайлно обяснение на конфигурациите на потребителските права е достъпно след инсталацията в [//www.mediawiki.org/wiki/Manual:User_rights Наръчника за потребителски права].",
+Детайлно обяснение на конфигурациите на потребителските права е достъпно след инсталацията в [//www.mediawiki.org/wiki/Manual:User_rights Наръчника за потребителски права].", # Fuzzy
        'config-license' => 'Авторски права и лиценз:',
        'config-license-none' => 'Без лиценз',
        'config-license-cc-by-sa' => 'Криейтив Комънс Признание-Споделяне на споделеното',
@@ -2239,8 +2254,8 @@ chmod a+w $3</pre>',
 Възможно е те да изискват допълнително конфигуриране, но сега могат да бъдат включени.',
        'config-install-alreadydone' => "'''Предупреждение:''' Изглежда вече сте инсталирали МедияУики и се опитвате да го инсталирате отново.
 Продължете към следващата страница.",
-       'config-install-begin' => 'Инсталацията на МедияУики ще започне след натискане на бутона "{{int:config-continue}}".
\90ко Ð¶ÐµÐ»Ð°ÐµÑ\82е Ð´Ð° Ð½Ð°Ð¿Ñ\80авиÑ\82е Ð¿Ñ\80омени, Ð½Ð°Ñ\82иÑ\81неÑ\82е Ð\92Ñ\80Ñ\8aÑ\89ане.',
+       'config-install-begin' => 'Инсталацията на МедияУики ще започне след натискане на бутона „{{int:config-continue}}“.
\92 Ñ\81лÑ\83Ñ\87ай, Ñ\87е Ðµ Ð½ÐµÐ¾Ð±Ñ\85одимо Ð´Ð° Ñ\81е Ð½Ð°Ð¿Ñ\80авÑ\8fÑ\82 Ð¿Ñ\80омени, Ð¸Ð·Ð¿Ð¾Ð»Ð·Ð²Ð° Ñ\81е Ð±Ñ\83Ñ\82она â\80\9e{{int:config-back}}â\80\9c.',
        'config-install-step-done' => 'готово',
        'config-install-step-failed' => 'неуспешно',
        'config-install-extensions' => 'Добавяне на разширенията',
@@ -2295,16 +2310,17 @@ $3
 '''Забележка''': Ако това не бъде извършено сега, генерираният конфигурационен файл няма да е достъпен на по-късен етап ако не бъде изтеглен сега или инсталацията приключи без изтеглянето му.
 
 Когато файлът вече е в основната директория, '''[$2 уикито ще е достъпно на този адрес]'''.",
-       'config-download-localsettings' => 'Изтегляне на LocalSettings.php',
+       'config-download-localsettings' => 'Изтегляне на <code>LocalSettings.php</code>',
        'config-help' => 'помощ',
        'config-nofile' => 'Файлът „$1“ не може да бъде открит. Да не е бил изтрит?',
        'mainpagetext' => "'''Уикито беше успешно инсталирано.'''",
-       'mainpagedocfooter' => 'Разгледайте [//meta.wikimedia.org/wiki/Help:Contents ръководството] за подробна информация относно използването на софтуера.
+       'mainpagedocfooter' => 'РазгледайÑ\82е [//meta.wikimedia.org/wiki/Help:Contents Ñ\80Ñ\8aководÑ\81Ñ\82воÑ\82о] Ð·Ð° Ð¿Ð¾Ð´Ñ\80обна Ð¸Ð½Ñ\84оÑ\80маÑ\86иÑ\8f Ð¾Ñ\82ноÑ\81но Ð¸Ð·Ð¿Ð¾Ð»Ð·Ð²Ð°Ð½ÐµÑ\82о Ð½Ð° Ñ\83ики Ñ\81оÑ\84Ñ\82Ñ\83еÑ\80а.
 
 == Първи стъпки ==
-* [//www.mediawiki.org/wiki/Manual:Configuration_settings Ð\9aонÑ\84игÑ\83Ñ\80аÑ\86ионни Ð½Ð°Ñ\81Ñ\82Ñ\80ойки]
+* [//www.mediawiki.org/wiki/Manual:Configuration_settings Ð\9dаÑ\81Ñ\82Ñ\80ойки Ð·Ð° ÐºÐ¾Ð½Ñ\84игÑ\83Ñ\80иÑ\80ане]
 * [//www.mediawiki.org/wiki/Manual:FAQ ЧЗВ за МедияУики]
-* [https://lists.wikimedia.org/mailman/listinfo/mediawiki-announce Пощенски списък относно нови версии на МедияУики]',
+* [https://lists.wikimedia.org/mailman/listinfo/mediawiki-announce Пощенски списък относно нови версии на МедияУики]
+* [//www.mediawiki.org/wiki/Localisation#Translation_resources Локализиране на МедияУики]',
 );
 
 /** Banjar (Bahasa Banjar)
@@ -2454,6 +2470,7 @@ $messages['bpy'] = array(
  * @author Fulup
  * @author Gwendal
  * @author Y-M D
+ * @author 아라
  */
 $messages['br'] = array(
        'config-desc' => 'Poellad staliañ MediaWIki',
@@ -2461,19 +2478,19 @@ $messages['br'] = array(
        'config-information' => 'Titouroù',
        'config-localsettings-upgrade' => 'Kavet ez eus bet ur restr <code>LocalSettings.php</code>.
 Evit hizivaat ar staliadur-se, merkit an talvoud <code>$wgUpgradeKey</code> er voest dindan.
-E gavout a rit e LocalSettings.php.',
-       'config-localsettings-cli-upgrade' => 'Dinoet ez eus bet ur restr LocalSettings.php.
-Evit lakaat ar staliadur-mañ a-live, implijit update.php e plas',
+E gavout a rit e <code>LocalSettings.php</code>.',
+       'config-localsettings-cli-upgrade' => 'Dinoet ez eus bet ur restr <code>LocalSettings.php</code>.
+Evit lakaat ar staliadur-mañ a-live, implijit <code>update.php</code> e plas',
        'config-localsettings-key' => "Alc'hwez hizivaat :",
        'config-localsettings-badkey' => "Direizh eo an alc'hwez merket ganeoc'h",
        'config-upgrade-key-missing' => 'Kavet ez eus bet ur staliadur kent eus MediaWiki.
-Evit hizivaat ar staliadur-se, ouzhpennit al linenn da-heul e traoñ ho restr LocalSettings.php:
+Evit hizivaat ar staliadur-se, ouzhpennit al linenn da-heul e traoñ ho restr <code>LocalSettings.php</code>:
 
 $1',
-       'config-localsettings-incomplete' => "Diglok e seblant bezañ ar restr LocalSettings.php zo anezhi dija.
+       'config-localsettings-incomplete' => "Diglok e seblant bezañ ar restr <code>LocalSettings.php</code> zo anezhi dija.
 An argemmenn $1 n'eo ket termenet.
-Kemmit LocalSettings.php evit ma vo termenet an argemmenn-se, ha klikit war « Kenderc'hel ».",
-       'config-localsettings-connection-error' => "C'hoarvezet ez eus ur fazi en ur gevreañ ouzh an diaz roadennoù oc'h implijout an arventennoù diferet e LocalSettings.php pe AdminSettings.php. Reizhit an arventennoù-se hag esaeit en-dro.
+Kemmit <code>LocalSettings.php</code> evit ma vo termenet an argemmenn-se, ha klikit war « {{int:Config-continue}} ».",
+       'config-localsettings-connection-error' => "C'hoarvezet ez eus ur fazi en ur gevreañ ouzh an diaz roadennoù oc'h implijout an arventennoù diferet e <code>LocalSettings.php</code> pe <code>AdminSettings.php</code>. Reizhit an arventennoù-se hag esaeit en-dro.
 
 $1",
        'config-session-error' => "Fazi e-ser loc'hañ an dalc'h : $1",
@@ -2652,7 +2669,7 @@ Ma ne welit ket amañ dindan ar reizhiad diaz titouroù a fell deoc'h ober ganti
        'config-support-postgres' => "* Ur reizhiad diaz titouroù brudet ha digor eo $1. Gallout a ra ober evit MySQL ([http://www.php.net/manual/en/pgsql.installation.php Penaos kempunañ PHP gant skor PostgreSQL]). Gallout a ra bezañ un nebeud drein bihan enni ha n'eo ket erbedet he implijout en un endro produiñ.",
        'config-support-sqlite' => "* $1 zo ur reizhiad diaz titouroù skañv skoret eus ar c'hentañ. ([http://www.php.net/manual/en/pdo.installation.php Penaos kempunañ PHP gant skor SQLite], implijout a ra PDO)",
        'config-support-oracle' => '* $1 zo un diaz titouroù kenwerzhel. ([http://www.php.net/manual/en/oci8.installation.php Penaos kempunañ PHP gant skor OCI8])',
-       'config-support-ibm_db2' => '* Un diaz titouroù evit embregerezhioù kenwerzhel eo $1.',
+       'config-support-ibm_db2' => '* Un diaz titouroù evit embregerezhioù kenwerzhel eo $1.', # Fuzzy
        'config-header-mysql' => 'Arventennoù MySQL',
        'config-header-postgres' => 'Arventennoù PostgreSQL',
        'config-header-sqlite' => 'Arventennoù SQLite',
@@ -2694,8 +2711,8 @@ Da hizivaat anezho da VediaWiki $1, klikañ war '''Kenderc'hel'''.",
        'config-upgrade-done-no-regenerate' => 'Hizivadenn kaset da benn.
 
 Gallout a rit [$1 kregiñ da implijout ho wiki].',
-       'config-regenerate' => 'Adgenel LocalSettings.php →',
-       'config-show-table-status' => "C'hwitet ar reked SHOW TABLE STATUS !",
+       'config-regenerate' => 'Adgenel <code>LocalSettings.php</code> →',
+       'config-show-table-status' => "C'hwitet ar reked <code>SHOW TABLE STATUS</code> !",
        'config-unknown-collation' => "'''Diwallit :''' Emañ an diaz roadennoù o renkañ an traoù diouzh un urzh lizherennek dianav.",
        'config-db-web-account' => 'Kont an diaz roadennoù evit ar voned Kenrouedad',
        'config-db-web-help' => 'Diuzañ an anv implijer hag ar ger-tremen a vo implijet gant ar servijer web evit kevreañ ouzh ar servijer diaz roadennoù pa vez ar wiki o vont en-dro war ar pemdez.',
@@ -2742,7 +2759,7 @@ Gellout a rit tremen ar c'hefluniadur nevez ha staliañ ar wiki war-eeun.",
        'config-optional-continue' => "Sevel muioc'h a goulennoù ouzhin.",
        'config-optional-skip' => 'Aet on skuizh, staliañ ar wiki hepken.',
        'config-profile' => 'Profil ar gwirioù implijer :',
-       'config-profile-wiki' => 'Wiki hengounel',
+       'config-profile-wiki' => 'Wiki hengounel', # Fuzzy
        'config-profile-no-anon' => 'Krouidigezh ur gont ret',
        'config-profile-fishbowl' => 'Embanner aotreet hepken',
        'config-profile-private' => 'Wiki prevez',
@@ -2799,7 +2816,7 @@ Marteze e vo ezhomm kefluniañ pelloc'h met gallout a rit o gweredekaat bremañ.
        'config-install-alreadydone' => "'''Diwallit''': Staliet hoc'h eus MediaWiki dija war a seblant hag emaoc'h o klask e staliañ c'hoazh.
 Kit d'ar bajenn war-lerc'h, mar plij.",
        'config-install-begin' => 'Pa vo bet pouezet ganeoc\'h war "{{int:config-continue}}"  e krogo staliadur MediaWiki.
-Pouezit war Kent mar fell deoc\'h cheñch tra pe dra.',
+Pouezit war Kent mar fell deoc\'h cheñch tra pe dra.', # Fuzzy
        'config-install-step-done' => 'graet',
        'config-install-step-failed' => "c'hwitet",
        'config-install-extensions' => 'En ur gontañ an astennoù',
@@ -2827,7 +2844,7 @@ Gwiriit hag-eñ e c'hall an implijer « $1 » skrivañ er brastres « $2 ».",
        'config-install-mainpage' => "O krouiñ ar bajenn bennañ gant un endalc'had dre ziouer",
        'config-install-extension-tables' => 'O krouiñ taolennoù evit an astennoù gweredekaet',
        'config-install-mainpage-failed' => "Ne c'haller ket ensoc'hañ ar bajenn bennañ: $1",
-       'config-download-localsettings' => 'Pellgargañ LocalSettings.php',
+       'config-download-localsettings' => 'Pellgargañ <code>LocalSettings.php</code>',
        'config-help' => 'skoazell',
        'mainpagetext' => "'''Meziant MediaWiki staliet.'''",
        'mainpagedocfooter' => "Sellit ouzh [//meta.wikimedia.org/wiki/Help:Contents Sturlevr an implijerien] evit gouzout hiroc'h war an doare da implijout ar meziant wiki.
@@ -2836,7 +2853,7 @@ Gwiriit hag-eñ e c'hall an implijer « $1 » skrivañ er brastres « $2 ».",
 
 * [//www.mediawiki.org/wiki/Manual:Configuration_settings Configuration settings list]
 * [//www.mediawiki.org/wiki/Manual:FAQ MediaWiki FAQ]
-* [https://lists.wikimedia.org/mailman/listinfo/mediawiki-announce MediaWiki release mailing list]",
+* [https://lists.wikimedia.org/mailman/listinfo/mediawiki-announce MediaWiki release mailing list]", # Fuzzy
 );
 
 /** Bosnian (bosanski)
@@ -2848,7 +2865,7 @@ $messages['bs'] = array(
        'config-information' => 'Informacija',
        'config-localsettings-upgrade' => 'Otkrivena je datoteka <code>LocalSettings.php</code>.
 Da biste unaprijedili vaš softver, molimo vas upišite vrijednost od <code>$wgUpgradeKey</code> u okvir ispod.
-Naći ćete ga u LocalSettings.php.',
+Naći ćete ga u <code>LocalSettings.php</code>.',
        'config-localsettings-key' => 'Ključ za nadgradnju:',
        'config-session-error' => 'Greška pri pokretanju sesije: $1',
        'config-no-session' => 'Vaši podaci sesije su izgubljeni!
@@ -2921,15 +2938,28 @@ Ovo '''nije preporučeno''' osim ako nemate problema s vašom wiki.",
 == Početak ==
 * [//www.mediawiki.org/wiki/Manual:Configuration_settings Lista postavki]
 * [//www.mediawiki.org/wiki/Manual:FAQ MediaWiki najčešće postavljana pitanja]
-* [https://lists.wikimedia.org/mailman/listinfo/mediawiki-announce Lista E-Mail adresa MediaWiki]',
+* [https://lists.wikimedia.org/mailman/listinfo/mediawiki-announce Lista E-Mail adresa MediaWiki]', # Fuzzy
 );
 
 /** Catalan (català)
+ * @author Pitort
  * @author පසිඳු කාවින්ද
  */
 $messages['ca'] = array(
        'config-page-language' => 'Llengua',
        'config-page-name' => 'Nom',
+       'config-charset-mysql5' => 'MySQL 4.1/5.0 UTF-8',
+       'config-mysql-innodb' => 'InnoDB',
+       'config-mysql-myisam' => 'MyISAM',
+       'config-mysql-utf8' => 'UTF-8',
+       'config-ns-generic' => 'Projecte',
+       'config-admin-password' => 'Contrasenya:',
+       'config-profile-wiki' => 'Wiki públic',
+       'config-profile-private' => 'Wiki privat',
+       'config-license-pd' => 'Domini públic',
+       'config-upload-deleted' => 'Directori pels arxius suprimits:',
+       'config-advanced-settings' => 'Configuració avançada',
+       'config-extensions' => 'Extensions',
        'mainpagetext' => "'''El programari del MediaWiki s'ha instaŀlat correctament.'''",
        'mainpagedocfooter' => "Consulteu la [//meta.wikimedia.org/wiki/Help:Contents Guia d'Usuari] per a més informació sobre com utilitzar-lo.
 
@@ -2937,7 +2967,7 @@ $messages['ca'] = array(
 
 * [//www.mediawiki.org/wiki/Manual:Configuration_settings Llista de característiques configurables]
 * [//www.mediawiki.org/wiki/Manual:FAQ PMF del MediaWiki]
-* [https://lists.wikimedia.org/mailman/listinfo/mediawiki-announce Llista de correu (''listserv'') per a anuncis del MediaWiki]",
+* [https://lists.wikimedia.org/mailman/listinfo/mediawiki-announce Llista de correu (''listserv'') per a anuncis del MediaWiki]", # Fuzzy
 );
 
 /** Chechen (нохчийн)
@@ -2968,15 +2998,17 @@ $messages['ceb'] = array(
 
 /** Sorani Kurdish (کوردی)
  * @author Asoxor
+ * @author Calak
  */
 $messages['ckb'] = array(
        'mainpagetext' => "'''میدیاویکی بە سەرکەوتوویی دامەزرا.'''",
-       'mainpagedocfooter' => 'پرس Ø¨Ú©Û\95 Ø¨Û\95 [//meta.wikimedia.org/wiki/Help:Contents Ú\95Û\8eÙ\86Ù\88Û\8eÙ\86Û\8cÛ\8c Ø¨Û\95کارھÛ\8eÙ\86Û\95راÙ\86] Ø¨Û\86 Ø²Ø§Ù\86Û\8cارÛ\8c Ø³Û\95بارÛ\95ت Ø¨Û\95 Ø¨Û\95کارھÛ\8eÙ\86اÙ\86Û\8c Ù\86Û\95رÙ\85اÙ\85Û\8eرÛ\8c Ù\88Û\8cÚ©Û\8c.
+       'mainpagedocfooter' => 'Ù\84Û\95 [//meta.wikimedia.org/wiki/Help:Contents Ú\95Û\8eÙ\86Ù\88Û\8eÙ\86Û\8cÛ\8c Ø¨Û\95کارھÛ\8eÙ\86Û\95راÙ\86] Ø¨Û\86 Ø²Ø§Ù\86Û\8cارÛ\8c Ø³Û\95بارÛ\95ت Ø¨Û\95 Ø¨Û\95کارھÛ\8eÙ\86اÙ\86Û\8c Ù\86Û\95رÙ\85اÙ\85Û\8eرÛ\8c Ù\88Û\8cÚ©Û\8c Ú©Û\95ÚµÚ© Ù\88Û\95ربگرÛ\95.
 
 == دەستپێکردن ==
-* [//www.mediawiki.org/wiki/Manual:Configuration_settings لیستی ڕێکخستنەکان شێوەپێدان]
-* [//www.mediawiki.org/wiki/Manual:FAQ پرسیارە دوپاتکراوەکانی میدیاویکی (MediaWiki FAQ)]
-* [https://lists.wikimedia.org/mailman/listinfo/mediawiki-announce لیستی ئیمەیلی وەشانەکانی میدیاویکی]',
+* [//www.mediawiki.org/wiki/Manual:Configuration_settings پێرستی ڕێکخستنەکانی شێوەپێدان]
+* [//www.mediawiki.org/wiki/Manual:FAQ پرسیارە دووپاتکراوەکانی میدیاویکی (MediaWiki FAQ)]
+* [https://lists.wikimedia.org/mailman/listinfo/mediawiki-announce پێرستی ئیمەیلی وەشانەکانی میدیاویکی]
+* [//www.mediawiki.org/wiki/Localisation#Translation_resources خۆماڵیکردنی ویکیمیدیا بۆ زمانەکەت]',
 );
 
 /** Capiznon (Capiceño)
@@ -3020,25 +3052,26 @@ $messages['crh-latn'] = array(
 /** Czech (česky)
  * @author Danny B.
  * @author Mormegil
+ * @author 아라
  */
 $messages['cs'] = array(
        'config-desc' => 'Instalační program pro MediaWiki',
        'config-title' => 'Instalace MediaWiki $1',
        'config-information' => 'Informace',
        'config-localsettings-upgrade' => 'Byl nalezen soubor <code>LocalSettings.php</code>.
-Pokud chcete stávající instalaci aktualizovat, zadejte hodnotu <code>$wgUpgradeKey</code>, kterou naleznete v souboru LocalSettings.php, do následujícího rámečku.',
-       'config-localsettings-cli-upgrade' => 'Byl detekován soubor <code>LocalSettings.php</code>
+Pokud chcete stávající instalaci aktualizovat, zadejte hodnotu <code>$wgUpgradeKey</code>, kterou naleznete v souboru <code>LocalSettings.php</code>, do následujícího rámečku.',
+       'config-localsettings-cli-upgrade' => 'Byl detekován soubor <code><code>LocalSettings.php</code></code>
 Pro aktualizaci spusťte místo instalace skript <code>update.php</code>.',
        'config-localsettings-key' => 'Klíč pro aktualizaci:',
        'config-localsettings-badkey' => 'Zadaný klíč je nesprávný.',
        'config-upgrade-key-missing' => 'Byla detekována existující instalace MediaWiki.
-Pokud ji chcete aktualizovat, přidejte následující řádku na konec souboru LocalSettings.php:
+Pokud ji chcete aktualizovat, přidejte následující řádku na konec souboru <code>LocalSettings.php</code>:
 
 $1',
-       'config-localsettings-incomplete' => 'Existující soubor LocalSettings.php vypadá neúplný.
+       'config-localsettings-incomplete' => 'Existující soubor <code>LocalSettings.php</code> vypadá neúplný.
 Není nastavena proměnná $1.
-Upravte soubor LocalSettings.php tak, aby tuto proměnnou obsahoval, a klikněte na „Pokračovat“.',
-       'config-localsettings-connection-error' => 'Při připojování k databázi s využitím nastavení uvedených v LocalSettings.php nebo AdminSettings.php došlo k chybě. Opravte tato nastavení a zkuste to znovu.
+Upravte soubor <code>LocalSettings.php</code> tak, aby tuto proměnnou obsahoval, a klikněte na „{{int:Config-continue}}“.',
+       'config-localsettings-connection-error' => 'Při připojování k databázi s využitím nastavení uvedených v <code>LocalSettings.php</code> nebo <code>AdminSettings.php</code> došlo k chybě. Opravte tato nastavení a zkuste to znovu.
 
 $1',
        'config-session-error' => 'Nepodařilo se inicializovat relaci: $1',
@@ -3170,7 +3203,9 @@ Instalace přerušena.',
        'config-using531' => 'MediaWiki nelze používat na PHP $1 kvůli chybě při předávání parametrů odkazem do <code>__call()</code>.
 Pro vyřešení upgradujte na PHP 5.3.2 nebo vyšší nebo downgradujte na PHP 5.3.0.
 Instalace přerušena.',
-       'config-suhosin-max-value-length' => 'Je nainstalován Suhosin, který omezuje délku parametrů GET na $1 bajtů. Komponenta ResourceLoader z MediaWiki dokáže s tímto omezením pracovat, ale sníží to výkon. Pokud to je alespoň trochu možné, měli byste v php.ini nastavit suhosin.get.max_value_length na 1024 nebo vyšší a na stejnou hodnotu nastavit v LocalSettings.php proměnnou $wgResourceLoaderMaxQueryLength.',
+       'config-suhosin-max-value-length' => 'Je nainstalován Suhosin, který omezuje délku parametrů GET na $1 bajtů.
+Komponenta ResourceLoader z MediaWiki dokáže s tímto omezením pracovat, ale sníží to výkon.
+Pokud to je alespoň trochu možné, měli byste v <code>php.ini</code> nastavit <code>suhosin.get.max_value_length</code> na 1024 nebo vyšší a na stejnou hodnotu nastavit v <code>LocalSettings.php</code> proměnnou <code>$wgResourceLoaderMaxQueryLength</code>.',
        'config-db-type' => 'Typ databáze:',
        'config-db-host' => 'Databázový server:',
        'config-db-host-help' => 'Pokud je váš databázový server na jiném počítači, zadejte zde jméno stroje nebo IP adresu.
@@ -3256,7 +3291,7 @@ Pokud v nabídce níže nevidíte databázový systém, který chcete použít,
        'config-support-postgres' => '* $1 je populární open-source databázový systém používaný jako alternativa k MySQL ([http://www.php.net/manual/en/pgsql.installation.php jak přeložit PHP s podporou PostgreSQL]). Mohou se vyskytnout ještě nějaké menší chyby, použití v produkčním prostředí se nedoporučuje.',
        'config-support-sqlite' => '* $1 je velmi dobře podporovaný lehký databázový systém. ([http://www.php.net/manual/en/pdo.installation.php Jak přeložit PHP s podporou SQLite], používá PDO)',
        'config-support-oracle' => '* $1 je komerční podniková databáze. ([http://www.php.net/manual/en/oci8.installation.php Jak přeložit PHP s podporou OCI8])',
-       'config-support-ibm_db2' => '* $1 je komerční podniková databáze.',
+       'config-support-ibm_db2' => '* $1 je komerční podniková databáze. ([http://www.php.net/manual/en/ibm-db2.installation.php Jak přeložit PHP s podporou IBM DB2])',
        'config-header-mysql' => 'Nastavení MySQL',
        'config-header-postgres' => 'Nastavení PostgreSQL',
        'config-header-sqlite' => 'Nastavení SQLite',
@@ -3323,8 +3358,8 @@ To se ale '''nedoporučuje''', pokud s wiki nemáte problémy.",
        'config-upgrade-done-no-regenerate' => 'Aktualizace byla dokončena.
 
 Svou wiki teď můžete [$1 začít používat].',
-       'config-regenerate' => 'Přegenerovat LocalSettings.php →',
-       'config-show-table-status' => 'Dotaz SHOW TABLE STATUS se nezdařil!',
+       'config-regenerate' => 'Přegenerovat <code>LocalSettings.php</code> →',
+       'config-show-table-status' => 'Dotaz <code>SHOW TABLE STATUS</code> se nezdařil!',
        'config-unknown-collation' => "'''Upozornění:''' Databáze používá nerozpoznané řazení.",
        'config-db-web-account' => 'Databázový účet pro webový přístup',
        'config-db-web-help' => 'Zvolte uživatelské jméno a heslo, které bude webový server používat pro připojení k databázovému serveru při běžném provozu wiki.',
@@ -3396,7 +3431,7 @@ Zbývající konfiguraci už můžete přeskočit a nainstalovat wiki hned teď.
        'config-optional-continue' => 'Ptejte se mě dál.',
        'config-optional-skip' => 'Už mě to nudí, prostě nainstalujte wiki.',
        'config-profile' => 'Profil uživatelských práv:',
-       'config-profile-wiki' => 'Tradiční wiki',
+       'config-profile-wiki' => 'Otevřená wiki',
        'config-profile-no-anon' => 'Vyžadována registrace uživatelů',
        'config-profile-fishbowl' => 'Editace jen pro vybrané',
        'config-profile-private' => 'Soukromá wiki',
@@ -3406,7 +3441,7 @@ V MediaWiki můžete snadno kontrolovat poslední změny a vracet zpět libovoln
 Mnoho lidí však zjistilo, že je MediaWiki užitečné v širokém spektru rolí a někdy není snadné všechny přesvědčit o výhodách wikizvyklostí.
 Takže si můžete vybrat.
 
-'''{{int:config-profile-wiki}}''' dovoluje editovat všem, aniž by se museli přihlašovat.
+Model '''{{int:config-profile-wiki}}''' dovoluje editovat všem, aniž by se museli přihlašovat.
 Na wiki, kde je '''{{int:config-profile-no-anon}}''', se lépe řídí zodpovědnost, ale může to odradit náhodné přispěvatele.
 
 Profil '''{{int:config-profile-fishbowl}}''' umožňuje schváleným uživatelům editovat, ale veřejnost si může stránky prohlížet včetně jejich historie.
@@ -3497,7 +3532,7 @@ Mohou vyžadovat dodatečnou konfiguraci, ale teď je můžete povolit.',
        'config-install-alreadydone' => "'''Upozornění:''' Vypadá to, že jste MediaWiki již nainstalovali a teď se o to pokoušíte znovu.
 Pokračujte na další stránku.",
        'config-install-begin' => 'Stisknutím „{{int:config-continue}}“ spustíte instalaci MediaWiki.
-Pokud ještě chcete udělat nějaké změny, stiskněte tlačítko zpět.',
+Pokud ještě chcete udělat nějaké změny, stiskněte „{{int:config-back}}“.',
        'config-install-step-done' => 'hotovo',
        'config-install-step-failed' => 'selhaly',
        'config-install-extensions' => 'Vkládají se rozšíření',
@@ -3553,7 +3588,7 @@ $3
 '''Poznámka''': Pokud to neuděláte hned, tento vygenerovaný konfigurační soubor nebude později dostupný, pokud instalaci opustíte, aniž byste si ho stáhli.
 
 Až to dokončíte, můžete '''[$2 vstoupit do své wiki]'''.",
-       'config-download-localsettings' => 'Stáhnout LocalSettings.php',
+       'config-download-localsettings' => 'Stáhnout <code>LocalSettings.php</code>',
        'config-help' => 'nápověda',
        'config-nofile' => 'Soubor „$1“ nelze nalézt. Byl smazán?',
        'mainpagetext' => "'''MediaWiki byla úspěšně nainstalována.'''",
@@ -3563,7 +3598,8 @@ Až to dokončíte, můžete '''[$2 vstoupit do své wiki]'''.",
 
 * [//www.mediawiki.org/wiki/Manual:Configuration_settings Nastavení konfigurace]
 * [//www.mediawiki.org/wiki/Manual:FAQ Často kladené otázky o MediaWiki]
-* [https://lists.wikimedia.org/mailman/listinfo/mediawiki-announce E-mailová konference oznámení MediaWiki]',
+* [https://lists.wikimedia.org/mailman/listinfo/mediawiki-announce E-mailová konference oznámení MediaWiki]
+* [//www.mediawiki.org/wiki/Localisation#Translation_resources Překlad MediaWiki do vašeho jazyka]',
 );
 
 /** Kashubian (kaszëbsczi)
@@ -3616,8 +3652,10 @@ $messages['da'] = array(
  * @author LWChris
  * @author Metalhead64
  * @author Purodha
+ * @author Rillke
  * @author The Evil IP address
  * @author Umherirrender
+ * @author 아라
  */
 $messages['de'] = array(
        'config-desc' => 'Das MediaWiki-Installationsprogramm',
@@ -3625,19 +3663,19 @@ $messages['de'] = array(
        'config-information' => 'Informationen',
        'config-localsettings-upgrade' => 'Eine Datei <code>LocalSettings.php</code> wurde gefunden.
 Um die vorhandene Installation aktualisieren zu können, muss der Wert des Parameters <code>$wgUpgradeKey</code> im folgenden Eingabefeld angegeben werden.
-Der Parameterwert befindet sich in der Datei LocalSettings.php.',
-       'config-localsettings-cli-upgrade' => 'Eine Datei <code>LocalSettings.php</code> wurde gefunden.
+Der Parameterwert befindet sich in der Datei <code>LocalSettings.php</code>.',
+       'config-localsettings-cli-upgrade' => 'Eine Datei <code><code>LocalSettings.php</code></code> wurde gefunden.
 Um die vorhandene Installation zu aktualisieren, muss die Datei <code>update.php</code> ausgeführt werden.',
        'config-localsettings-key' => 'Aktualisierungsschlüssel:',
        'config-localsettings-badkey' => 'Der angegebene Aktualisierungsschlüssel ist falsch.',
        'config-upgrade-key-missing' => 'Eine MediaWiki-Installation wurde gefunden.
-Um die vorhandene Installation aktualisieren zu können, muss die unten angegebene Codezeile in die Datei LocalSettings.php an deren Ende eingefügt werden:
+Um die vorhandene Installation aktualisieren zu können, muss die unten angegebene Codezeile in die Datei <code>LocalSettings.php</code> an deren Ende eingefügt werden:
 
 $1',
-       'config-localsettings-incomplete' => 'Die vorhandene Datei LocalSettings.php scheint unvollständig zu sein.
+       'config-localsettings-incomplete' => 'Die vorhandene Datei <code>LocalSettings.php</code> scheint unvollständig zu sein.
 Die Variable <code>$1</code> wurde nicht definiert.
-Die Datei LocalSettings.php muss entsprechend geändert werden, so dass sie definiert ist. Klicke danach auf „Weiter“.',
-       'config-localsettings-connection-error' => 'Beim Verbindungsversuch zur Datenbank ist, unter Verwendung der in den Dateien LocalSettings.php oder AdminSettings.php hinterlegten Einstellungen, ein Fehler aufgetreten. Diese Einstellungen müssen korrigiert werden. Danach kann ein erneuter Versuch unternommen werden.
+Die Datei <code>LocalSettings.php</code> muss entsprechend geändert werden, so dass sie definiert ist. Klicke danach auf „{{int:Config-continue}}“.',
+       'config-localsettings-connection-error' => 'Beim Verbindungsversuch zur Datenbank ist, unter Verwendung der in den Dateien <code>LocalSettings.php</code> oder <code>AdminSettings.php</code> hinterlegten Einstellungen, ein Fehler aufgetreten. Diese Einstellungen müssen korrigiert werden. Danach kann ein erneuter Versuch unternommen werden.
 
 $1',
        'config-session-error' => 'Fehler beim Starten der Sitzung: $1',
@@ -3768,7 +3806,10 @@ PHP muss auf Version 5.2.9 oder später sowie libxml2 auf die Version 2.7.3 oder
        'config-using531' => 'MediaWiki kann nicht zusammen mit PHP $1 verwendet werden. Grund hierfür ist ein Fehler im Zusammenhang mit den Verweisparametern zu <code>__call()</code>.
 PHP muss auf Version 5.3.2 oder höher oder 5.3.0 oder niedriger aktualisiert werden, um das Problem zu beheben.
 Die Installation wurde abgebrochen.',
-       'config-suhosin-max-value-length' => 'Suhosin ist installiert und beschränkt die Länge des GET-Parameters auf $1 Bytes. Der ResouceLoader von MediaWiki wird zwar unter diesen Bedingungen funktionieren, allerdings nur mit verminderter Leistungsfähigkeit. Sofern möglich sollte der Parameter <code>suhosin.get.max_value_length</code> in der Datei php.ini auf 1024 oder höher festgelegt werden. Gleichzeitig muss der Parameter <code>$wgResourceLoaderMaxQueryLength</code> in der Datei LocalSettings.php auf den selben Wert eingestellt werden.',
+       'config-suhosin-max-value-length' => 'Suhosin ist installiert und beschränkt die Länge des GET-Parameters auf $1 Bytes.
+Der ResouceLoader von MediaWiki wird zwar unter diesen Bedingungen funktionieren, allerdings nur mit verminderter Leistungsfähigkeit.
+Sofern möglich sollte der Parameter <code>suhosin.get.max_value_length</code> in der Datei <code>php.ini</code> auf 1024 oder höher festgelegt werden.
+Gleichzeitig muss der Parameter <code>$wgResourceLoaderMaxQueryLength</code> in der Datei <code>LocalSettings.php</code> auf den selben Wert eingestellt werden.',
        'config-db-type' => 'Datenbanksystem:',
        'config-db-host' => 'Datenbankserver:',
        'config-db-host-help' => 'Sofern sich die Datenbank auf einem anderen Server befindet, ist hier der Servername oder die entsprechende IP-Adresse anzugeben.
@@ -3852,7 +3893,7 @@ Sofern nicht das Datenbanksystem angezeigt wird, das verwendet werden soll, gibt
        'config-support-postgres' => '* $1 ist ein beliebtes Open-Source-Datenbanksystem und eine Alternative zu MySQL ([http://www.php.net/manual/de/pgsql.installation.php Anleitung zur Kompilierung von PHP mit PostgreSQL-Unterstützung]). Es gibt allerdings einige kleinere Implementierungsfehler, so dass von der Nutzung in einer Produktivumgebung abgeraten wird.',
        'config-support-sqlite' => '* $1 ist ein verschlanktes Datenbanksystem, das auch gut unterstützt wird ([http://www.php.net/manual/de/pdo.installation.php Anleitung zur Kompilierung von PHP mit SQLite-Unterstützung], verwendet PHP Data Objects (PDO))',
        'config-support-oracle' => '* $1 ist eine kommerzielle Unternehmensdatenbank ([http://www.php.net/manual/en/oci8.installation.php Anleitung zur Kompilierung von PHP mit OCI8-Unterstützung (en)])',
-       'config-support-ibm_db2' => '* $1 ist eine kommerzielle Unternehmensdatenbank',
+       'config-support-ibm_db2' => '* $1 ist eine kommerzielle Unternehmensdatenbank ([http://www.php.net/manual/en/ibm-db2.installation.php PHP mit IBM-DB2-Support kompilieren])',
        'config-header-mysql' => 'MySQL-Einstellungen',
        'config-header-postgres' => 'PostgreSQL-Einstellungen',
        'config-header-sqlite' => 'SQLite-Einstellungen',
@@ -3920,8 +3961,8 @@ Dies wird '''nicht empfohlen''', es sei denn, es treten Probleme mit dem Wiki au
        'config-upgrade-done-no-regenerate' => 'Die Aktualisierung ist abgeschlossen.
 
 Das Wiki kann nun [$1 genutzt werden].',
-       'config-regenerate' => 'LocalSettings.php neu erstellen →',
-       'config-show-table-status' => 'Die Abfrage SHOW TABLE STATUS ist gescheitert!',
+       'config-regenerate' => '<code>LocalSettings.php</code> neu erstellen →',
+       'config-show-table-status' => 'Die Abfrage <code>SHOW TABLE STATUS</code> ist gescheitert!',
        'config-unknown-collation' => "'''Warnung:''' Die Datenbank nutzt eine unbekannte Kollation.",
        'config-db-web-account' => 'Datenbankkonto für den Webzugriff',
        'config-db-web-help' => 'Bitte Benutzernamen und Passwort auswählen, die der Webserver während des Normalbetriebes dazu verwenden soll, eine Verbindung zum Datenbankserver herzustellen.',
@@ -3932,10 +3973,10 @@ Das hier angegebene Datenbankkonto muss daher bereits vorhanden sein.',
        'config-mysql-engine' => 'Speicher-Engine:',
        'config-mysql-innodb' => 'InnoDB',
        'config-mysql-myisam' => 'MyISAM',
-       'config-mysql-myisam-dep' => "'''Warnung:''' Es wurde MyISAM als Speicher-Engine für MySQL ausgewählt, die aus folgenden Gründen nicht die für den Einsatz mit MediaWiki empfohlene ist:
-* sie unterstützt aufgrund von Tabellensperrungen kaum die nebenläufige Ausführung von Aktionen
-* sie ist anfälliger für Datenprobleme
-* sie wird von MediaWiki nicht immer adäquat unterstützt
+       'config-mysql-myisam-dep' => "'''Warnung:''' Es wurde MyISAM als Speicher-Engine für MySQL ausgewählt, die aus folgenden Gründen nicht für den Einsatz mit MediaWiki empfohlen ist:
+* Sie unterstützt aufgrund von Tabellensperrungen kaum die nebenläufige Ausführung von Aktionen.
+* Sie ist anfälliger für Datenprobleme.
+* Sie wird von MediaWiki nicht immer adäquat unterstützt.
 
 Sofern die vorhandene MySQL-Installation die Speicher-Engine InnoDB unterstützt, wird deren Verwendung eindringlich empfohlen.
 Sofern sie sie nicht unterstützt, sollte eine entsprechende Aktualisierung nunmehr Erwägung gezogen werden.",
@@ -4003,7 +4044,7 @@ Mit MediaWiki ist es einfach die letzten Änderungen nachzuvollziehen und unbrau
 
 Allerdings finden etliche Menschen Wikis auch mit anderen Bearbeitungskonzepten sinnvoll. Manchmal ist es zudem nicht einfach alle Beteiligten von den Vorteilen des „Wiki-Prinzips” zu überzeugen. Darum ist diese Auswahl möglich.
 
-Ein '''{{int:config-profile-wiki}}''' ermöglicht es jedermann, sogar ohne über ein Benutzerkonto zu verfügen, Bearbeitungen vorzunehmen.
+Das Modell „'''{{int:config-profile-wiki}}'''“ ermöglicht es jedermann, sogar ohne über ein Benutzerkonto zu verfügen, Bearbeitungen vorzunehmen.
 Ein Wiki bei dem die '''{{int:config-profile-no-anon}}''' ist, fordert von den Benutzern eine höhere Verantwortung für ihre Bearbeitungen ein, könnte allerdings Personen abschrecken, die nur gelegentlich Bearbeitungen vornehmen wollen. Ein Wiki für '''{{int:config-profile-fishbowl}}''' gestattet es nur bestimmten Benutzern, Bearbeitungen vorzunehmen. Allerdings kann dabei die Allgemeinheit die Seiten immer noch betrachten und Änderungen nachvollziehen. Ein '''{{int:config-profile-private}}''' gestattet es nur ausgewählten Benutzern, Seiten zu betrachten sowie zu bearbeiten.
 
 Komplexere Konzepte zur Zugriffssteuerung können erst nach abgeschlossenem Installationsvorgang eingerichtet werden. Hierzu gibt es weitere Informationen auf der Website mit der [//www.mediawiki.org/wiki/Manual:User_rights entsprechenden Anleitung].",
@@ -4091,7 +4132,7 @@ Es könnten zusätzliche Konfigurierungen zu einzelnen Erweiterungen erforderlic
        'config-install-alreadydone' => "'''Warnung:''' Es wurde eine vorhandene MediaWiki-Installation gefunden.
 Es muss daher mit den nächsten Seite weitergemacht werden.",
        'config-install-begin' => 'Durch Drücken von „{{int:config-continue}}“ wird die Installation von MediaWiki gestartet.
-Sofern Änderungen vorgenommen werden sollen, kann man auf „← Zurück“ klicken.',
+Sofern Änderungen vorgenommen werden sollen, kann man auf „{{int:config-back}}“ klicken.',
        'config-install-step-done' => 'erledigt',
        'config-install-step-failed' => 'gescheitert',
        'config-install-extensions' => 'Programmerweiterungen',
@@ -4147,7 +4188,7 @@ $3
 '''Hinweis:''' Die Konfigurationsdatei sollte jetzt unbedingt heruntergeladen werden. Sie wird nach Beenden des Installationsprogramms, nicht mehr zur Verfügung stehen.
 
 Sobald alles erledigt wurde, kann auf das '''[$2 Wiki zugegriffen werden]'''. Wir wünschen viel Spaß und Erfolg mit dem Wiki.",
-       'config-download-localsettings' => 'LocalSettings.php herunterladen',
+       'config-download-localsettings' => '<code>LocalSettings.php</code> herunterladen',
        'config-help' => 'Hilfe',
        'config-nofile' => 'Die Datei „$1“ konnte nicht gefunden werden. Wurde sie gelöscht?',
        'mainpagetext' => "'''MediaWiki wurde erfolgreich installiert.'''",
@@ -4267,10 +4308,71 @@ $messages['dtp'] = array(
 );
 
 /** Greek (Ελληνικά)
+ * @author Glavkos
+ * @author Protnet
+ * @author ZaDiak
  */
 $messages['el'] = array(
+       'config-desc' => 'Το πρόγραμμα εγκατάστασης για το MediaWiki',
+       'config-title' => 'Εγκατάσταση MediaWiki $1',
+       'config-information' => 'Πληροφορίες',
+       'config-your-language' => 'Η γλώσσα σας:',
+       'config-wiki-language' => 'Γλώσσα του wiki:',
+       'config-back' => '← Πίσω',
+       'config-continue' => 'Συνέχεια →',
+       'config-page-language' => 'Γλώσσα',
+       'config-page-welcome' => 'Καλώς ήλθατε στο MediaWiki!',
+       'config-page-name' => 'Όνομα',
+       'config-page-options' => 'Επιλογές',
+       'config-page-install' => 'Εγκατάσταση',
+       'config-page-complete' => 'Ολοκληρώθηκε!',
+       'config-page-restart' => 'Επανεκκίνηση εγκατάστασης',
+       'config-page-copying' => 'Αντιγραφή',
+       'config-page-upgradedoc' => 'Αναβάθμιση',
+       'config-page-existingwiki' => 'Υπάρχον βίκι',
+       'config-restart' => 'Ναι, κάντε επανεκκίνηση',
+       'config-env-php' => 'H PHP $1 είναι εγκατεστημένη.',
+       'config-db-type' => 'Τύπος βάσης δεδομένων:',
+       'config-db-host' => 'Φιλοξενία βάσης δεδομένων:',
+       'config-db-wiki-settings' => 'Αναγνώριση αυτού του βίκι',
+       'config-db-name' => 'Όνομα βάσης δεδομένων:',
+       'config-db-install-account' => 'Λογαριασμός χρήστη για την εγκατάσταση',
+       'config-db-username' => 'Όνομα χρήστη βάσης δεδομένων:',
+       'config-db-password' => 'Κωδικός πρόσβασης βάσης δεδομένων:',
+       'config-charset-mysql5-binary' => 'MySQL 4.1/5.0 δυαδικό',
+       'config-header-mysql' => 'Ρυθμίσεις MySQL',
+       'config-header-postgres' => 'Ρυθμίσεις PostgreSQL',
+       'config-header-sqlite' => 'Ρυθμίσεις SQLite',
+       'config-header-oracle' => 'Ρυθμίσεις Oracle',
+       'config-header-ibm_db2' => 'Ρυθμίσεις IBM DB2',
+       'config-invalid-db-type' => 'Μη έγκυρος τύπος βάσης δεδομένων',
+       'config-mysql-utf8' => 'UTF-8',
+       'config-site-name' => 'Όνομα του βίκι:',
+       'config-site-name-blank' => 'Εισαγάγετε όνομα ιστοχώρου.',
+       'config-project-namespace' => 'Περιοχή ονόματος εγχειρήματος:',
+       'config-ns-generic' => 'Εγχείρημα',
+       'config-ns-site-name' => 'Ίδιο με το όνομα του wiki: $1',
+       'config-ns-other' => 'Άλλο (προσδιορίστε)',
+       'config-admin-box' => 'Λογαριασμός διαχειριστή',
+       'config-admin-name' => 'Το όνομά σας:',
+       'config-admin-password' => 'Κωδικός πρόσβασης:',
+       'config-admin-password-confirm' => 'Επανάληψη κωδικού πρόσβασης:',
+       'config-admin-email' => 'Διεύθυνση ηλεκτρονικού ταχυδρομείου:',
+       'config-optional-continue' => 'Να ερωτηθώ περισσότερες ερωτήσεις.',
+       'config-profile-wiki' => 'Παραδοσιακό wiki', # Fuzzy
+       'config-profile-no-anon' => 'Απαιτείται η δημιουργία λογαριασμού',
+       'config-profile-private' => 'Ιδιωτικό wiki',
+       'config-email-settings' => 'Ρυθμίσεις ηλεκτρονικού ταχυδρομείου',
+       'config-upload-settings' => 'Ανέβασμα εικόνων και άλλων αρχείων',
+       'config-upload-enable' => 'Ενεργοποιήστε το ανέβασμα αρχείων',
+       'config-logo' => 'Διεύθυνση URL λογότυπου:',
+       'config-cc-again' => 'Επιλέξτε ξανά...',
+       'config-extensions' => 'Επεκτάσεις',
+       'config-install-step-done' => 'έγινε',
+       'config-install-step-failed' => 'απέτυχε',
+       'config-help' => 'βοήθεια',
        'mainpagetext' => "'''To λογισμικό MediaWiki εγκαταστάθηκε με επιτυχία.'''",
-       'mainpagedocfooter' => 'Περισσότερες πληροφορίες σχετικά με τη χρήση και με τη ρύθμιση παραμέτρων θα βρείτε στους συνδέσμους: [//meta.wikimedia.org/wiki/MediaWiki_localisation Οδηγίες για τροποποίηση του περιβάλλοντος εργασίας] και [//meta.wikimedia.org/wiki/MediaWiki_User%27s_Guide Εγχειρίδιο χρήστη].',
+       'mainpagedocfooter' => 'Περισσότερες πληροφορίες σχετικά με τη χρήση και με τη ρύθμιση παραμέτρων θα βρείτε στους συνδέσμους: [//meta.wikimedia.org/wiki/MediaWiki_localisation Οδηγίες για τροποποίηση του περιβάλλοντος εργασίας] και [//meta.wikimedia.org/wiki/MediaWiki_User%27s_Guide Εγχειρίδιο χρήστη].', # Fuzzy
 );
 
 /** Esperanto (Esperanto)
@@ -4308,6 +4410,7 @@ $messages['eo'] = array(
  * @author Sanbec
  * @author Translationista
  * @author Vivaelcelta
+ * @author 아라
  */
 $messages['es'] = array(
        'config-desc' => 'El instalador para MediaWiki',
@@ -4315,19 +4418,19 @@ $messages['es'] = array(
        'config-information' => 'Información',
        'config-localsettings-upgrade' => 'Se ha encontrado un archivo <code>LocalSettings.php</code>.
 Para actualizar esta instalación, por favor ingresa el valor de <code>$wgUpgradeKey</code> en el cuadro de abajo.
-Lo encontrarás en LocalSettings.php.',
-       'config-localsettings-cli-upgrade' => 'Se ha detectado un archivo LocalSettings.php.
-Para actualizar la instalación, vuelva a ejecutar update.php',
+Lo encontrarás en <code>LocalSettings.php</code>.',
+       'config-localsettings-cli-upgrade' => 'Se ha detectado un archivo <code>LocalSettings.php</code>.
+Para actualizar la instalación, vuelva a ejecutar <code>update.php</code>',
        'config-localsettings-key' => 'Clave de actualización:',
        'config-localsettings-badkey' => 'La clave proporcionada es incorrecta.',
        'config-upgrade-key-missing' => 'Se ha detectado una instalación existente de MediaWiki.
-Para actualizar la instalación, por favor, ponga la siguiente línea al final de su archivo LocalSettings.php:
+Para actualizar la instalación, por favor, ponga la siguiente línea al final de su archivo <code>LocalSettings.php</code>:
 
 $1',
-       'config-localsettings-incomplete' => 'El archivo LocalSettings.php existente parece estar incompleto.
+       'config-localsettings-incomplete' => 'El archivo <code>LocalSettings.php</code> existente parece estar incompleto.
 La variable $1 no está definida.
-Cambie el archivo LocalSettings.php para que esta variable quede establecida y haga clic en "Continuar".',
-       'config-localsettings-connection-error' => 'Se detectó un error al conectarse a la base de datos utilizando la configuración especificada en los archivos LocalSettings.php o AdminSettings.php. Corrija estas opciones y vuelva a intentarlo.
+Cambie el archivo <code>LocalSettings.php</code> para que esta variable quede establecida y haga clic en "{{int:Config-continue}}".',
+       'config-localsettings-connection-error' => 'Se detectó un error al conectarse a la base de datos utilizando la configuración especificada en los archivos <code>LocalSettings.php</code> o <code>AdminSettings.php</code>. Corrija estas opciones y vuelva a intentarlo.
 
 $1',
        'config-session-error' => 'Error comenzando sesión: $1',
@@ -4460,7 +4563,9 @@ Instalación anulada.',
        'config-using531' => 'MediaWiki no puede utilizarse con PHP $1 debido a un error con los parámetros de referencia para <code>__call()</code> .
 Actualice el sistema a PHP 5.3.2 o superior, o vuelva a la versión PHP 5.3.0 para resolver este problema.
 Instalación anulada.',
-       'config-suhosin-max-value-length' => 'Suhosin está instalado y limita la longitud del parámetro GET a $1 bytes. El componente ResourceLoader de MediaWiki trabajará en este límite, pero eso degradará el rendimiento. Si es posible, debe establecer el valor de suhosin.get.max_value_length en 1024 o superior en el archivo php.ini y establecer $wgResourceLoaderMaxQueryLength en el mismo valor en LocalSettings.php.',
+       'config-suhosin-max-value-length' => 'Suhosin está instalado y limita el parámetro <code>length</code> GET a $1 bytes. 
+El componente ResourceLoader (gestor de recursos) de MediaWiki trabajará en este límite, pero eso perjudicará el rendimiento.
+Si es posible, deberías establecer <code>suhosin.get.max_value_length</code> en el valor 1024 o superior en <code>php.ini</code> y establecer <code>$wgResourceLoaderMaxQueryLength</code> en el mismo valor en <code>php.ini</code>.',
        'config-db-type' => 'Tipo de base de datos',
        'config-db-host' => 'Servidor de la base de datos:',
        'config-db-host-help' => 'Si su servidor de base de datos está en otro servidor, escriba el nombre del host o su dirección IP aquí.
@@ -4541,9 +4646,9 @@ $1
 Si no encuentras en el listado el sistema de base de datos que estás intentando utilizar, sigue las instrucciones vinculadas arriba para habilitar la compatibilidad.',
        'config-support-mysql' => '* $1 es la base de datos mayoritaria para MediaWiki y la que goza de mayor compatibilidad ([http://www.php.net/manual/es/mysql.installation.php cómo compilar PHP con compatibilidad MySQL])',
        'config-support-postgres' => '$1 es un popular sistema de base de datos de código abierto, alternativa a MySQL. ([http://www.php.net/manual/es/pgsql.installation.php cómo compilar PHP con compatibilidad PostgreSQL]). Puede haber algunos defectos menores destacables, y no es recomendable para uso en un entorno de producción.',
-       'config-support-sqlite' => '* $1 es una base de datos ligera con gran compatibilidad con MediaWiki. ([http://www.php.net/manual/es/pdo.installation.php Cómo compilar PHP con compatibilidad SQLite], usa PDO)',
+       'config-support-sqlite' => '* $1 es una base de datos ligera con gran compatibilidad con MediaWiki ([http://www.php.net/manual/es/pdo.installation.php cómo compilar PHP con compatibilidad SQLite usando PDO]).',
        'config-support-oracle' => '* $1 es una base de datos comercial a nivel empresarial ([http://www.php.net/manual/es/oci8.installation.php cómo compilar PHP con compatibilidad con OCI8])',
-       'config-support-ibm_db2' => ' $1  es una base de datos de empresa comercial.',
+       'config-support-ibm_db2' => '* $1 es una base de datos comercial a nivel empresarial ([http://www.php.net/manual/es/ibm-db2.installation.php cómo compilar PHP con compatibilidad con ibm_db2]).', # Fuzzy
        'config-header-mysql' => 'Configuración de MySQL',
        'config-header-postgres' => 'Configuración de PostgreSQL',
        'config-header-sqlite' => 'Configuración de SQLite',
@@ -4609,8 +4714,8 @@ Esto '''no se recomienda''' a menos que esté teniendo problemas con su wiki.",
        'config-upgrade-done-no-regenerate' => 'Actualización completa.
 
 Usted puede ahora [$1  empezar a usar su wiki].',
-       'config-regenerate' => 'Regenerar LocalSettings.php →',
-       'config-show-table-status' => 'SHOW TABLE STATUS ha fallado!',
+       'config-regenerate' => 'Regenerar <code>LocalSettings.php</code> →',
+       'config-show-table-status' => '<code>SHOW TABLE STATUS</code> ha fallado!',
        'config-unknown-collation' => "'''Advertencia:''' La base de datos está utilizando una intercalación no reconocida.",
        'config-db-web-account' => 'Cuenta de base de datos para acceso Web',
        'config-db-web-help' => 'Elige el usuario y contraseña que el servidor Web usará para conectarse al servidor de la base de datos durante el fincionamiento normal del wiki.',
@@ -4683,7 +4788,7 @@ Ahora puedes saltarte el resto de pasos e instalar el wiki con valores predeterm
        'config-optional-continue' => 'Hazme más preguntas.',
        'config-optional-skip' => 'Ya estoy aburrido, sólo instala el wiki.',
        'config-profile' => 'Perfil de derechos de usuario:',
-       'config-profile-wiki' => 'Wiki tradicional',
+       'config-profile-wiki' => 'Wiki tradicional', # Fuzzy
        'config-profile-no-anon' => 'Creación de cuenta requerida',
        'config-profile-fishbowl' => 'Sólo editores autorizados',
        'config-profile-private' => 'Wiki privado',
@@ -4698,7 +4803,7 @@ Un wiki con '''{{int:config-profile-no-anon}}''' ofrece rendición de cuentas ad
 El escenario '''{{int:config-profile-fishbowl}}''' permite editar a los usuarios autorizados, pero el público puede ver las páginas, incluyendo el historial.
 Un '''{{int:config-profile-private}}''' sólo permite ver páginas a los usuarios autorizados, el mismo grupo al que le está permitido editar.
 
-Configuraciones más complejas de derechos de usuario están disponibles después de la instalación, consulte [//www.mediawiki.org/wiki/Manual:User_rights esta entrada en el manual].",
+Configuraciones más complejas de derechos de usuario están disponibles después de la instalación, consulte [//www.mediawiki.org/wiki/Manual:User_rights esta entrada en el manual].", # Fuzzy
        'config-license' => 'Copyright and licencia:',
        'config-license-none' => 'Pie sin licencia',
        'config-license-cc-by-sa' => 'Creative Commons Reconocimiento Compartir Igual',
@@ -4783,7 +4888,7 @@ Puede que necesiten configuraciones adicionales, pero puedes habilitarlas ahora.
        'config-install-alreadydone' => "'''Aviso:''' Parece que ya habías instalado MediaWiki y estás intentando instalarlo nuevamente.
 Pasa a la próxima página, por favor.",
        'config-install-begin' => 'Pulsando "{{int:config-continue}}", se iniciará la instalación de MediaWiki.
-Si todavía desea realizar algún cambio, pulse atrás.',
+Si todavía desea realizar algún cambio, pulse atrás.', # Fuzzy
        'config-install-step-done' => 'hecho',
        'config-install-step-failed' => 'falló',
        'config-install-extensions' => 'Extensiones inclusive',
@@ -4837,7 +4942,7 @@ $3
 '''Nota''': Si no haces esto ahora, este archivo de configuración generado no estará disponible para usted más tarde si sale de la instalación sin descargarlo.
 
 Cuando lo haya hecho, usted puede '''[$2  entrar en su wiki]'''.",
-       'config-download-localsettings' => 'Descargar archivo LocalSettings.php',
+       'config-download-localsettings' => 'Descargar archivo <code>LocalSettings.php</code>',
        'config-help' => 'Ayuda',
        'config-nofile' => 'El archivo "$1" no se pudo encontrar. ¿Se ha eliminado?',
        'mainpagetext' => "'''MediaWiki ha sido instalado con éxito.'''",
@@ -4864,26 +4969,74 @@ $messages['es-formal'] = array(
 
 /** Estonian (eesti)
  * @author Avjoska
+ * @author Pikne
  */
 $messages['et'] = array(
+       'config-information' => 'Teave',
+       'config-session-error' => 'Tõrge seansi alustamisel: $1',
+       'config-your-language' => 'Oma keel:',
+       'config-wiki-language' => 'Viki keel:',
        'config-back' => '← Tagasi',
        'config-continue' => 'Jätka →',
        'config-page-language' => 'Keel',
        'config-page-welcome' => 'Tere tulemast MediaWikisse!',
+       'config-page-dbconnect' => 'Andmebaasiga ühendamine',
+       'config-page-upgrade' => 'Olemasoleva installi uuendus',
+       'config-page-dbsettings' => 'Andmebaasi sätted',
        'config-page-name' => 'Nimi',
        'config-page-options' => 'Seaded',
        'config-page-install' => 'Paigaldamine',
        'config-page-complete' => 'Valmis!',
+       'config-page-restart' => 'Alusta installimist uuesti',
+       'config-page-readme' => 'Loe mind',
+       'config-page-copying' => 'Kopeerimine',
+       'config-page-upgradedoc' => 'Uuendamine',
+       'config-page-existingwiki' => 'Olemasolev viki',
+       'config-restart' => 'Jah, tee taaskäivitus',
        'config-db-name' => 'Andmebaasi nimi:',
        'config-db-username' => 'Andmebaasi kasutajanimi:',
        'config-db-password' => 'Andmebaasi parool:',
+       'config-db-port' => 'Andmebaasi port:',
+       'config-invalid-db-type' => 'Vigane andmebaasi tüüp',
+       'config-site-name' => 'Viki nimi:',
+       'config-site-name-blank' => 'Sisestage lehekülje nimi.',
+       'config-project-namespace' => 'Projekti nimeruum:',
+       'config-ns-generic' => 'Projekt',
+       'config-admin-box' => 'Administraatorikonto',
+       'config-admin-name' => 'Sinu nimi:',
+       'config-admin-password' => 'Parool:',
+       'config-admin-password-confirm' => 'Parool uuesti:',
+       'config-admin-name-blank' => 'Sisesta administraatori kasutajanimi.',
+       'config-admin-password-blank' => 'Sisesta administraatorikonto parool.',
+       'config-admin-password-same' => 'Parool ei tohi kattuda kasutajanimega.',
+       'config-admin-password-mismatch' => 'Sisestatud kaks parooli ei lange kokku.',
        'config-admin-email' => 'E-posti aadress:',
+       'config-admin-error-bademail' => 'Sisestasid vigase e-posti aadressi.',
        'config-optional-continue' => 'Küsi minult veel küsimusi.',
+       'config-profile-private' => 'Eraviki',
+       'config-license' => 'Autoriõigus ja litsents:',
+       'config-license-none' => 'Litsentsijaluseta',
+       'config-license-cc-by-sa' => 'Creative Commonsi litsents "Autorile viitamine + jagamine samadel tingimustel"',
+       'config-license-cc-by' => 'Creative Commonsi litsents "Autorile viitamine"',
+       'config-license-cc-by-nc-sa' => 'Creative Commonsi litsents "Autorile viitamine + mitteäriline eesmärk + jagamine samadel tingimustel"',
+       'config-email-settings' => 'E-posti sätted',
+       'config-email-sender' => 'Saatja e-aadress:',
+       'config-logo' => 'Logo internetiaadress:',
+       'config-cc-again' => 'Vali uuesti...',
+       'config-extensions' => 'Lisad',
        'config-install-step-done' => 'valmis',
        'config-install-step-failed' => 'ebaõnnestus',
+       'config-install-user-alreadyexists' => 'Kasutaja "$1" on juba olemas',
+       'config-install-tables' => 'Tabelite loomine',
+       'config-help' => 'abi',
        'mainpagetext' => "'''MediaWiki tarkvara on edukalt paigaldatud.'''",
-       'mainpagedocfooter' => 'Juhiste saamiseks kasutamise ning konfigureerimise kohta vaata palun inglisekeelset [//meta.wikimedia.org/wiki/MediaWiki_localisation dokumentatsiooni liidese kohaldamisest]
-ning [//meta.wikimedia.org/wiki/MediaWiki_User%27s_Guide kasutusjuhendit].',
+       'mainpagedocfooter' => 'Vikitarkvara kasutamise kohta leiad lisateavet [//meta.wikimedia.org/wiki/Help:Contents juhendist].
+
+== Alustamine ==
+* [//www.mediawiki.org/wiki/Manual:Configuration_settings Häälestussätete loend]
+* [//www.mediawiki.org/wiki/Manual:FAQ MediaWiki KKK]
+* [https://lists.wikimedia.org/mailman/listinfo/mediawiki-announce MediaWiki versiooniuuenduste postiloend]
+* [//www.mediawiki.org/wiki/Localisation#Translation_resources MediaWiki lokaliseerimine]',
 );
 
 /** Basque (euskara)
@@ -4995,18 +5148,22 @@ $messages['fa'] = array(
        'config-desc' => 'نصب کنندهٔ ویکی‌مدیا',
        'config-title' => 'نصب ویکی‌مدیا $1',
        'config-information' => 'اطلاعات',
+       'config-localsettings-key' => 'کلید ارتقا:',
        'config-your-language' => 'زبان شما:',
        'config-wiki-language' => 'زبان ویکی:',
        'config-back' => '→ بازگشت',
        'config-continue' => 'ادامه ←',
        'config-page-language' => 'زبان',
        'config-page-welcome' => 'به مدیاویکی خوش آمدید!',
+       'config-page-dbconnect' => 'اتصال به پایگاه داده',
        'config-page-name' => 'نام',
        'config-page-options' => 'گزینه‌ها',
        'config-page-install' => 'نصب',
        'config-page-complete' => 'کامل!',
        'config-page-readme' => 'مرا بخوان',
        'config-page-releasenotes' => 'یادداشت‌های انتشار',
+       'config-page-copying' => 'تکثیر',
+       'config-page-upgradedoc' => 'ارتقا',
        'config-page-existingwiki' => 'ویکی موجود',
        'config-restart' => 'بله ، آن دوباره راه اندازی کن',
        'config-sidebar' => '* [//www.mediawiki.org صفحهٔ اصلی مدیاویکی]
@@ -5025,13 +5182,20 @@ $messages['fa'] = array(
        'config-db-host' => 'میزبان پایگاه اطلاعات:',
        'config-db-username' => 'نام کاربری پایگاه اطلاعات:',
        'config-db-password' => 'کلمه عبور پایگاه اطلاعات:',
+       'config-mysql-old' => 'مای‌اس‌کیو‌ال نسخهٔ $1 و یا بالاتر نیاز است، شما نسخهٔ $2 را دارید.',
+       'config-db-port' => 'درگاه پایگاه‌داده:',
        'config-header-mysql' => 'تنظیمات مای‌اس‌کیو‌ال',
        'config-connection-error' => '$1.
 
 میزبان، نام کاربری و گذرواژه را بررسی کنید و دوباره امتحان کنید.',
+       'config-mysql-binary' => 'دودویی',
+       'config-mysql-utf8' => 'UTF-8',
        'config-site-name' => 'نام ویکی:',
        'config-site-name-blank' => 'نام تارنما را وارد کنید.',
        'config-project-namespace' => 'فضای نام پروژه:',
+       'config-ns-generic' => 'پروژه',
+       'config-ns-other-default' => 'ویکی‌من',
+       'config-admin-box' => 'حساب مدیر سیستم',
        'config-admin-name' => 'نام شما:',
        'config-admin-password' => 'کلمه عبور:',
        'config-admin-password-confirm' => 'دوباره کلمه عبور:',
@@ -5044,6 +5208,7 @@ $messages['fa'] = array(
        'config-email-settings' => 'تنظیمات پست الکترونیکی',
        'config-upload-enable' => 'فعال سازی بارگذاری پرونده',
        'config-logo' => 'نشانی نامواره:',
+       'config-extensions' => 'افزونه‌ها',
        'config-install-step-done' => 'انجام شد',
        'config-install-step-failed' => 'ناموفق بود',
        'config-help' => 'راهنما',
@@ -5055,7 +5220,7 @@ $messages['fa'] = array(
 
 * [//www.mediawiki.org/wiki/Manual:Configuration_settings تنظیم پیکربندی]
 * [//www.mediawiki.org/wiki/Manual:FAQ MediaWiki پرسش‌های متداول]
-* [https://lists.wikimedia.org/mailman/listinfo/mediawiki-announce فهرست پست الکترونیکی نسخه‌های مدیاویکی]',
+* [https://lists.wikimedia.org/mailman/listinfo/mediawiki-announce فهرست پست الکترونیکی نسخه‌های مدیاویکی]', # Fuzzy
 );
 
 /** Finnish (suomi)
@@ -5065,6 +5230,8 @@ $messages['fa'] = array(
  * @author Nike
  * @author Olli
  * @author Str4nd
+ * @author VezonThunder
+ * @author 아라
  */
 $messages['fi'] = array(
        'config-desc' => 'MediaWiki-asennin',
@@ -5072,19 +5239,28 @@ $messages['fi'] = array(
        'config-information' => 'Tiedot',
        'config-localsettings-upgrade' => '<code>LocalSettings.php</code>-tiedosto havaittiin.
 Kirjoita muuttujan <code>$wgUpgradeKey</code> arvo alla olevaan kenttään päivittääksesi asennuksen.
-Löydät sen LocalSettings.php-tiedostosta.',
-       'config-localsettings-cli-upgrade' => 'LocalSettings.php-tiedosto havaittiin.
-Päivitä asennus suorittamalla update.php.',
+Löydät sen <code>LocalSettings.php</code>-tiedostosta.',
+       'config-localsettings-cli-upgrade' => '<code>LocalSettings.php</code>-tiedosto havaittiin.
+Päivitä asennus suorittamalla <code>update.php</code>.',
        'config-localsettings-key' => 'Päivitysavain',
        'config-localsettings-badkey' => 'Antamasi avain on virheellinen.',
-       'config-localsettings-incomplete' => 'Nykyinen LocalSettings.php-tiedosto näyttää olevan puutteellinen.
+       'config-upgrade-key-missing' => 'Havaittiin aiempi MediaWiki-asennus.
+Päivittääksesi tämän asennuksen lisää <code>LocalSettings.php</code>-tiedostosi loppuun seuraava rivi:
+
+$1',
+       'config-localsettings-incomplete' => 'Nykyinen <code>LocalSettings.php</code>-tiedosto näyttää olevan puutteellinen.
 Muuttujaa $1 ei ole asetettu.
-Muuta LocalSettings.php-tiedostoa siten, että muuttuja on asetettu ja napsauta »Jatka».',
+Muuta <code>LocalSettings.php</code>-tiedostoa siten, että muuttuja on asetettu ja napsauta »{{int:Config-continue}}».',
+       'config-localsettings-connection-error' => 'Virhe yhdistettäessä tietokantaan käyttäen tiedostossa <code>LocalSettings.php</code> tai <code>AdminSettings.php</code> määritettyjä asetuksia. Korjaa asetukset ja yritä uudelleen.
+
+$1',
        'config-session-error' => 'Istunnon aloittaminen epäonnistui: $1',
        'config-session-expired' => 'Istuntotietosi näyttävät olevan vanhentuneita.
 Istuntojen elinajaksi on määritelty $1.
 Voit muuttaa tätä asetusta vaihtamalla kohtaa <code>session.gc_maxlifetime</code> php.ini-tiedostossa.
 Käynnistä asennusprosessi uudelleen.',
+       'config-no-session' => 'Istuntosi tiedot menetettiin!
+Tarkista php.ini-tiedostosi ja varmista, että <code>session.save_path</code> on asetettu sopivaan kansioon.',
        'config-your-language' => 'Asennuksen kieli',
        'config-your-language-help' => 'Valitse kieli, jota haluat käyttää asennuksen ajan.',
        'config-wiki-language' => 'Wikin kieli',
@@ -5157,7 +5333,7 @@ Asennus saattaa epäonnistua!",
        'config-type-sqlite' => 'SQLite',
        'config-type-oracle' => 'Oracle',
        'config-type-ibm_db2' => 'IBM DB2',
-       'config-support-ibm_db2' => '* $1 on kaupallinen tietokanta yrityskäyttöön.',
+       'config-support-ibm_db2' => '* $1 on kaupallinen tietokanta yrityskäyttöön.', # Fuzzy
        'config-header-mysql' => 'MySQL-asetukset',
        'config-header-postgres' => 'PostgreSQL-asetukset',
        'config-header-sqlite' => 'SQLite-asetukset',
@@ -5186,8 +5362,8 @@ Tämä '''ei ole suositeltavaa''', jos wikissäsi ei ole ongelmia.",
        'config-upgrade-done-no-regenerate' => 'Päivitys valmis.
 
 Voit [$1 aloittaa wikin käytön].',
-       'config-regenerate' => 'Luo LocalSettings.php uudelleen →',
-       'config-show-table-status' => 'Kysely SHOW TABLE STATUS epäonnistui!',
+       'config-regenerate' => 'Luo <code>LocalSettings.php</code> uudelleen →',
+       'config-show-table-status' => 'Kysely <code>SHOW TABLE STATUS</code> epäonnistui!',
        'config-mysql-engine' => 'Tallennusmoottori',
        'config-mysql-innodb' => 'InnoDB',
        'config-mysql-myisam' => 'MyISAM',
@@ -5207,7 +5383,7 @@ Voit [$1 aloittaa wikin käytön].',
        'config-admin-error-bademail' => 'Annoit virheellisen sähköpostiosoitteen.',
        'config-almost-done' => 'Olet jo lähes valmis!
 Voit ohittaa jäljellä olevat määritykset ja asentaa wikin juuri nyt.',
-       'config-profile-wiki' => 'Perinteinen wiki',
+       'config-profile-wiki' => 'Avoin wiki',
        'config-profile-no-anon' => 'Tunnuksen luonti vaaditaan',
        'config-profile-private' => 'Yksityinen wiki',
        'config-license' => 'Tekijänoikeus ja lisenssi:',
@@ -5220,7 +5396,7 @@ Voit ohittaa jäljellä olevat määritykset ja asentaa wikin juuri nyt.',
        'config-install-step-failed' => 'epäonnistui',
        'config-install-user-alreadyexists' => 'Käyttäjä $1 on jo olemassa',
        'config-install-interwiki-list' => 'Tiedostoa <code>interwiki.list</code> ei voitu lukea.',
-       'config-download-localsettings' => 'Lataa LocalSettings.php',
+       'config-download-localsettings' => 'Lataa <code>LocalSettings.php</code>',
        'config-help' => 'ohje',
        'mainpagetext' => "'''MediaWiki on onnistuneesti asennettu.'''",
        'mainpagedocfooter' => "Lisätietoja käytöstä on sivulla [//meta.wikimedia.org/wiki/Help:Contents User's Guide].
@@ -5265,6 +5441,7 @@ $messages['fo'] = array(
  * @author Verdy p
  * @author Wyz
  * @author Yumeki
+ * @author 아라
  */
 $messages['fr'] = array(
        'config-desc' => 'Le programme d’installation de MediaWiki',
@@ -5272,20 +5449,20 @@ $messages['fr'] = array(
        'config-information' => 'Informations',
        'config-localsettings-upgrade' => 'Un fichier <code>LocalSettings.php</code> a été détecté.
 Pour mettre à jour cette installation, veuillez saisir la valeur de <code>$wgUpgradeKey</code> dans le champ ci-dessous.
-Vous la trouverez dans LocalSettings.php.',
-       'config-localsettings-cli-upgrade' => 'Un fichier LocalSettings.php a été détecté.
-Pour mettre à niveau cette installation, veuillez exécuter update.php',
+Vous la trouverez dans <code>LocalSettings.php</code>.',
+       'config-localsettings-cli-upgrade' => 'Un fichier <code>LocalSettings.php</code> a été détecté.
+Pour mettre à niveau cette installation, veuillez exécuter <code>update.php</code>',
        'config-localsettings-key' => 'Clé de mise à jour :',
        'config-localsettings-badkey' => 'La clé que vous avez fournie est incorrecte',
        'config-upgrade-key-missing' => 'Une installation existante de MediaWiki a été détectée.
 
-Pour mettre à jour cette installation, veuillez ajouter la ligne suivante à la fin de votre fichier LocalSettings.php
+Pour mettre à jour cette installation, veuillez ajouter la ligne suivante à la fin de votre fichier <code>LocalSettings.php</code>
 
 $1',
-       'config-localsettings-incomplete' => 'Le fichier LocalSettings.php existant semble être incomplet.
+       'config-localsettings-incomplete' => 'Le fichier <code>LocalSettings.php</code> existant semble être incomplet.
 La variable $1 n’est pas définie.
-Veuillez modifier LocalSettings.php de sorte que cette variable soit définie, puis cliquer sur « Continuer ».',
-       'config-localsettings-connection-error' => 'Une erreur est survenue lors de la connexion à la base de données en utilisant la configuration spécifiée dans LocalSettings.php ou AdminSettings.php. Veuillez corriger cette configuration puis réessayer.
+Veuillez modifier <code>LocalSettings.php</code> de sorte que cette variable soit définie, puis cliquer sur « {{int:Config-continue}} ».',
+       'config-localsettings-connection-error' => 'Une erreur est survenue lors de la connexion à la base de données en utilisant la configuration spécifiée dans <code>LocalSettings.php</code> ou <code>AdminSettings.php</code>. Veuillez corriger cette configuration puis réessayer.
 
 $1',
        'config-session-error' => 'Erreur lors du démarrage de la session : $1',
@@ -5417,7 +5594,8 @@ Installation interrompue.',
        'config-using531' => 'MediaWiki ne peut pas être utilisé avec PHP $1 à cause d’un bogue affectant les paramètres passés par référence à <code>__call()</code>.
 Veuillez mettre à jour votre système vers PHP 5.3.2 ou plus récent ou revenir à PHP 5.3.0 pour résoudre ce problème.
 Installation interrompue.',
-       'config-suhosin-max-value-length' => 'Suhosin est installé et limite la longueur du paramètre GET à $1 octets. Le <code>ResourceLoader</code> de MediaWiki va répondre en respectant cette limite, mais ses performances seront dégradées. Si possible, vous devriez définir <code>suhosin.get.max_value_length</code> à 1024 ou plus dans le fichier <code>php.ini</code>, et fixer <code>$wgResourceLoaderMaxQueryLength</code> à la même valeur dans <code>LocalSettings.php</code>.',
+       'config-suhosin-max-value-length' => 'Suhosin est installé et limite la <code>longueur</code> du paramètre GET à $1 octets.
+Le composant ResourceLoader de MediaWiki va répondre en respectant cette limite, mais ses performances seront dégradées. Si possible, vous devriez définir <code>suhosin.get.max_value_length</code> à 1024 ou plus dans le fichier <code>php.ini</code>, et fixer <code>$wgResourceLoaderMaxQueryLength</code> à la même valeur dans <code>LocalSettings.php</code>.',
        'config-db-type' => 'Type de base de données :',
        'config-db-host' => 'Nom d’hôte de la base de données :',
        'config-db-host-help' => 'Si votre serveur de base de données est sur un serveur différent, saisissez ici son nom d’hôte ou son adresse IP.
@@ -5499,7 +5677,7 @@ Si vous ne voyez pas le système de base de données que vous essayez d'utiliser
        'config-support-postgres' => "* $1 est un système de base de données populaire et ''open source'' qui peut être une alternative à MySQL ([http://www.php.net/manual/en/pgsql.installation.php how to compile PHP with PostgreSQL support]). Il peut contenir quelques bogues mineurs et n'est pas recommandé dans un environnement de production.",
        'config-support-sqlite' => '* $1 est un système de base de données léger qui est bien supporté. ([http://www.php.net/manual/en/pdo.installation.php How to compile PHP with SQLite support], utilise PDO)',
        'config-support-oracle' => '* $1 est un système commercial de gestion de base de données d’entreprise. ([http://www.php.net/manual/en/oci8.installation.php Comment compiler PHP avec le support OCI8])',
-       'config-support-ibm_db2' => "* $1 est une base de données d'entreprise commerciale.",
+       'config-support-ibm_db2' => "* $1 est une base de données d'entreprise commerciale. ([http://www.php.net/manual/en/ibm-db2.installation.php Comment compiler PHP avec le support de DB2 d’IBM])",
        'config-header-mysql' => 'Paramètres de MySQL',
        'config-header-postgres' => 'Paramètres de PostgreSQL',
        'config-header-sqlite' => 'Paramètres de SQLite',
@@ -5566,8 +5744,8 @@ Ce '''n'est pas recommandé''' sauf si vous rencontrez des problèmes avec votre
        'config-upgrade-done-no-regenerate' => 'Mise à jour terminée.
 
 Vous pouvez maintenant [$1 commencer à utiliser votre wiki].',
-       'config-regenerate' => 'Regénérer LocalSettings.php →',
-       'config-show-table-status' => 'Échec de la requête SHOW TABLE STATUS !',
+       'config-regenerate' => 'Regénérer <code>LocalSettings.php</code> →',
+       'config-show-table-status' => 'Échec de la requête <code>SHOW TABLE STATUS</code> !',
        'config-unknown-collation' => "'''Attention:''' La base de données effectue un classement alphabétique (''collation'') inconnu.",
        'config-db-web-account' => "Compte de la base de données pour l'accès Web",
        'config-db-web-help' => "Sélectionnez le nom d'utilisateur et le mot de passe que le serveur web utilisera pour se connecter au serveur de base de données pendant le fonctionnement habituel du wiki.",
@@ -5635,7 +5813,7 @@ Vous pouvez passer la configuration restante et installer immédiatement le wiki
        'config-optional-continue' => 'Me poser davantage de questions.',
        'config-optional-skip' => 'J’en ai assez, installer simplement le wiki.',
        'config-profile' => 'Profil des droits d’utilisateurs :',
-       'config-profile-wiki' => 'Wiki traditionnel',
+       'config-profile-wiki' => 'Wiki ouvert',
        'config-profile-no-anon' => 'Création de compte requise',
        'config-profile-fishbowl' => 'Éditeurs autorisés seulement',
        'config-profile-private' => 'Wiki privé',
@@ -5645,7 +5823,7 @@ Avec MediaWiki, il est facile de vérifier les modifications récentes et de ré
 Cependant, de nombreuses autres utilisations ont été trouvées au logiciel et il n’est pas toujours facile de convaincre tout le monde des bénéfices de l’esprit wiki.
 Vous avez donc le choix.
 
-'''{{int:config-profile-wiki}}''' autorise toute personne à modifier, y compris sans s’identifier.
+Le modèle '''{{int:config-profile-wiki}}''' autorise toute personne à modifier, y compris sans s’identifier.
 '''{{int:config-profile-no-anon}}''' fournit plus de contrôle, par l’identification, mais peut rebuter les contributeurs occasionnels.
 
 '''{{int:config-profile-fishbowl}}''' autorise la modification par les utilisateurs approuvés, mais le public peut toujours lire les pages et leur historique.
@@ -5734,8 +5912,8 @@ Si vous ne le connaissez pas, la valeur par défaut est 11211.",
 Elles peuvent nécessiter une configuration supplémentaire, mais vous pouvez les activer maintenant',
        'config-install-alreadydone' => "'''Attention''': Vous semblez avoir déjà installé MediaWiki et tentez de l'installer à nouveau.
 S'il vous plaît, allez à la page suivante.",
-       'config-install-begin' => "En appuyant sur {{int:config-continue}}, vous commencerez l'installation de MediaWiki.
-Si vous voulez apporter des modifications, appuyez sur Retour.",
+       'config-install-begin' => 'En appuyant sur {{int:config-continue}}, vous commencerez l\'installation de MediaWiki.
+Si vous voulez apporter des modifications, appuyez sur "{{int:config-back}}".',
        'config-install-step-done' => 'fait',
        'config-install-step-failed' => 'échec',
        'config-install-extensions' => 'Inclusion des extensions',
@@ -5788,16 +5966,17 @@ $3
 '''Note''': Si vous ne le faites pas maintenant, ce fichier de configuration généré ne sera pas disponible plus tard si vous quittez l'installation sans le télécharger.
 
 Lorsque c'est fait, vous pouvez '''[$2 accéder à votre wiki]'''.",
-       'config-download-localsettings' => 'Télécharger LocalSettings.php',
+       'config-download-localsettings' => 'Télécharger <code>LocalSettings.php</code>',
        'config-help' => 'aide',
        'config-nofile' => 'Le fichier « $1 » est introuvable. A-t-il été supprimé ?',
        'mainpagetext' => "'''MediaWiki a été installé avec succès.'''",
-       'mainpagedocfooter' => 'Consultez le [//meta.wikimedia.org/wiki/Aide:Contenu Guide de l’utilisateur] pour plus d’informations sur l’utilisation de ce logiciel.
+       'mainpagedocfooter' => 'Consultez le [//meta.wikimedia.org/wiki/Aide:Contenu Guide de l’utilisateur] pour plus d’informations sur l’utilisation de ce logiciel de wiki.
 
-== Démarrer avec MediaWiki ==
+== Pour démarrer ==
 * [//www.mediawiki.org/wiki/Manual:Configuration_settings Liste des paramètres de configuration]
 * [//www.mediawiki.org/wiki/Manual:FAQ/fr FAQ sur MediaWiki]
-* [https://lists.wikimedia.org/mailman/listinfo/mediawiki-announce Liste de discussion sur les distributions de MediaWiki]',
+* [https://lists.wikimedia.org/mailman/listinfo/mediawiki-announce Liste de discussion sur les distributions de MediaWiki]
+* [//www.mediawiki.org/wiki/Localisation#Translation_resources Adaptez MediaWiki dans votre langue]',
 );
 
 /** Cajun French (français cadien)
@@ -5882,8 +6061,8 @@ Portant, MediaWiki at fôta de PHP $2 ou ben ples hôt.',
        'config-missing-db-host' => 'Vos dête buchiér una valor por « Hôto de la bâsa de balyês »',
        'config-missing-db-server-oracle' => 'Vos dête buchiér una valor por « TNS de la bâsa de balyês »',
        'config-sqlite-readonly' => 'Lo fichiér <code>$1</code> est pas accèssiblo en ècritura.',
-       'config-regenerate' => 'Refâre LocalSettings.php →',
-       'config-show-table-status' => 'Falyita de la requéta SHOW TABLE STATUS !',
+       'config-regenerate' => 'Refâre <code>LocalSettings.php</code> →',
+       'config-show-table-status' => 'Falyita de la requéta <code>SHOW TABLE STATUS</code> !',
        'config-db-web-account' => 'Compto de la bâsa de balyês por l’accès vouèbe',
        'config-db-web-account-same' => 'Utilisâd lo mémo compto que por l’enstalacion',
        'config-db-web-create' => 'Féte lo compto s’ègziste p’oncor',
@@ -5909,7 +6088,7 @@ Portant, MediaWiki at fôta de PHP $2 ou ben ples hôt.',
        'config-admin-email' => 'Adrèce èlèctronica :',
        'config-optional-continue' => 'Mè posar més de quèstions.',
        'config-profile' => 'Profil des drêts d’usanciér :',
-       'config-profile-wiki' => 'Vouiqui tradicionâl',
+       'config-profile-wiki' => 'Vouiqui tradicionâl', # Fuzzy
        'config-profile-no-anon' => 'Crèacion de compto nècèssèra',
        'config-profile-fishbowl' => 'Solament los èditors ôtorisâs',
        'config-profile-private' => 'Vouiqui privâ',
@@ -5962,7 +6141,7 @@ Portant, MediaWiki at fôta de PHP $2 ou ben ples hôt.',
        'config-install-mainpage' => 'Crèacion de la pâge principâla avouéc un contegnu per dèfôt',
        'config-install-extension-tables' => 'Crèacion de trâbles por les èxtensions activâs',
        'config-install-mainpage-failed' => 'Empossiblo d’entrebetar la pâge principâla : $1',
-       'config-download-localsettings' => 'Tèlèchargiér LocalSettings.php',
+       'config-download-localsettings' => 'Tèlèchargiér <code>LocalSettings.php</code>',
        'config-help' => 'éde',
        'mainpagetext' => "'''MediaWiki at étâ enstalâ avouéc reusséta.'''",
        'mainpagedocfooter' => 'Vêde lo [//meta.wikimedia.org/wiki/Aide:Contenu guido d’usanciér] por més d’enformacions sur l’usâjo de la programeria vouiqui.
@@ -5970,7 +6149,7 @@ Portant, MediaWiki at fôta de PHP $2 ou ben ples hôt.',
 == Emmodar avouéc MediaWiki ==
 * [//www.mediawiki.org/wiki/Manual:Configuration_settings Lista des paramètres de configuracion]
 * [//www.mediawiki.org/wiki/Manual:FAQ/fr FDQ sur MediaWiki]
-* [https://lists.wikimedia.org/mailman/listinfo/mediawiki-announce Lista de discussion sur les distribucions de MediaWiki]',
+* [https://lists.wikimedia.org/mailman/listinfo/mediawiki-announce Lista de discussion sur les distribucions de MediaWiki]', # Fuzzy
 );
 
 /** Northern Frisian (Nordfriisk)
@@ -6075,6 +6254,7 @@ $messages['gd'] = array(
 /** Galician (galego)
  * @author Elisardojm
  * @author Toliño
+ * @author 아라
  */
 $messages['gl'] = array(
        'config-desc' => 'O programa de instalación de MediaWiki',
@@ -6082,19 +6262,19 @@ $messages['gl'] = array(
        'config-information' => 'Información',
        'config-localsettings-upgrade' => 'Detectouse un ficheiro <code>LocalSettings.php</code>.
 Para actualizar esta instalación, introduza o valor de <code>$wgUpgradeKey</code> na caixa.
-Pode atopalo en LocalSettings.php.',
-       'config-localsettings-cli-upgrade' => 'Detectouse un ficheiro LocalSettings.php.
-Para actualizar esta instalación, execute update.php',
+Pode atopalo en <code>LocalSettings.php</code>.',
+       'config-localsettings-cli-upgrade' => 'Detectouse un ficheiro <code>LocalSettings.php</code>.
+Para actualizar esta instalación, execute <code>update.php</code>',
        'config-localsettings-key' => 'Clave de actualización:',
        'config-localsettings-badkey' => 'A clave dada é incorrecta',
        'config-upgrade-key-missing' => 'Detectouse unha instalación existente de MediaWiki.
-Para actualizar esta instalación, inclúa esta liña ao final do ficheiro LocalSettings.php:
+Para actualizar esta instalación, inclúa esta liña ao final do ficheiro <code>LocalSettings.php</code>:
 
 $1',
-       'config-localsettings-incomplete' => 'Semella que o ficheiro LocalSettings.php existente está incompleto.
+       'config-localsettings-incomplete' => 'Semella que o ficheiro <code>LocalSettings.php</code> existente está incompleto.
 A variable $1 non está establecida.
-Modifique o ficheiro LocalSettings.php de xeito que a variable quede establecida e prema en "Continuar".',
-       'config-localsettings-connection-error' => 'Atopouse un erro ao conectar coa base de datos empregando a configuración especificada no ficheiro LocalSettings.php ou no ficheiro AdminSettings.php. Corrixa esta configuración e inténteo de novo.
+Modifique o ficheiro <code>LocalSettings.php</code> de xeito que a variable quede establecida e prema en "{{int:Config-continue}}".',
+       'config-localsettings-connection-error' => 'Atopouse un erro ao conectar coa base de datos empregando a configuración especificada no ficheiro <code>LocalSettings.php</code> ou no ficheiro <code>AdminSettings.php</code>. Corrixa esta configuración e inténteo de novo.
 
 $1',
        'config-session-error' => 'Erro ao iniciar a sesión: $1',
@@ -6227,7 +6407,9 @@ Instalación abortada.',
        'config-using531' => 'O PHP $1 non é compatible con MediaWiki debido a un erro que afecta aos parámetros de referencia de <code>__call()</code>.
 Actualice o sistema á versión 5.3.2 ou posterior do PHP ou volva á versión 5.3.0 do PHP para arranxar o problema.
 Instalación abortada.',
-       'config-suhosin-max-value-length' => 'Suhosin está instalado e limita a lonxitude do parámetro GET a $1 bytes. O compoñente ResourceLoader (xestor de recursos) de MediaWiki traballa neste límite, pero este prexudica o rendemento. Se é posible, debería establecer suhosin.get.max_value_length no valor 1024 ou superior en php.ini e establecer $wgResourceLoaderMaxQueryLength no mesmo valor en LocalSettings.php.',
+       'config-suhosin-max-value-length' => 'Suhosin está instalado e limita o parámetro GET <code>length</code> a $1 bytes.
+O compoñente ResourceLoader (xestor de recursos) de MediaWiki traballa neste límite, pero este prexudica o rendemento.
+Se é posible, debería establecer <code>suhosin.get.max_value_length</code> no valor 1024 ou superior en <code>php.ini</code> e establecer <code>$wgResourceLoaderMaxQueryLength</code> no mesmo valor en <code>LocalSettings.php</code>.',
        'config-db-type' => 'Tipo de base de datos:',
        'config-db-host' => 'Servidor da base de datos:',
        'config-db-host-help' => 'Se o servidor da súa base de datos está nun servidor diferente, escriba o nome do servidor ou o enderezo IP aquí.
@@ -6310,8 +6492,8 @@ Se non ve listado a continuación o sistema de base de datos que intenta usar, s
        'config-support-mysql' => '* $1 é o obxectivo principal para MediaWiki e está mellor soportado ([http://www.php.net/manual/en/mysql.installation.php como compilar o PHP con soporte MySQL])',
        'config-support-postgres' => '* $1 é un sistema de base de datos popular e de código aberto como alternativa a MySQL ([http://www.php.net/manual/en/pgsql.installation.php como compilar o PHP con soporte PostgreSQL]). É posible que haxa algúns pequenos erros e non se recomenda o seu uso nunha contorna de produción.',
        'config-support-sqlite' => '* $1 é un sistema de base de datos lixeiro moi ben soportado. ([http://www.php.net/manual/en/pdo.installation.php Como compilar o PHP con soporte SQLite], emprega PDO)',
-       'config-support-oracle' => '* $1 é un sistema comercial de xestión de base de datos de empresa. ([http://www.php.net/manual/en/oci8.installation.php Como compilar PHP con soporte OCI8])',
-       'config-support-ibm_db2' => '* $1 é unha base de datos de empresa comercial.',
+       'config-support-oracle' => '* $1 é un sistema comercial de xestión de base de datos de empresa. ([http://www.php.net/manual/en/oci8.installation.php Como compilar PHP con soporte OCI8])',
+       'config-support-ibm_db2' => '* $1 é unha base de datos de empresa comercial. ([http://www.php.net/manual/en/ibm-db2.installation.php Como compilar o PHP con soporte IBM DB2])',
        'config-header-mysql' => 'Configuración do MySQL',
        'config-header-postgres' => 'Configuración do PostgreSQL',
        'config-header-sqlite' => 'Configuración do SQLite',
@@ -6378,8 +6560,8 @@ Isto '''non é recomendable''' a menos que estea a ter problemas co seu wiki.",
        'config-upgrade-done-no-regenerate' => 'Actualización completada.
 
 Xa pode [$1 comezar a usar o seu wiki].',
-       'config-regenerate' => 'Rexenerar LocalSettings.php →',
-       'config-show-table-status' => 'A pescuda SHOW TABLE STATUS fallou!',
+       'config-regenerate' => 'Rexenerar <code>LocalSettings.php</code> →',
+       'config-show-table-status' => 'A pescuda <code>SHOW TABLE STATUS</code> fallou!',
        'config-unknown-collation' => "'''Atención:''' A base de datos está a empregar unha clasificación alfabética irrecoñecible.",
        'config-db-web-account' => 'Conta na base de datos para o acceso á internet',
        'config-db-web-help' => 'Seleccione o nome de usuario e contrasinal que o servidor web empregará para se conectar ao servidor da base de datos durante o funcionamento normal do wiki.',
@@ -6452,7 +6634,7 @@ Neste paso pode saltar o resto da configuración e instalar o wiki agora mesmo.'
        'config-optional-continue' => 'Facédeme máis preguntas.',
        'config-optional-skip' => 'Xa estou canso. Instalade o wiki.',
        'config-profile' => 'Perfil dos dereitos de usuario:',
-       'config-profile-wiki' => 'Wiki tradicional',
+       'config-profile-wiki' => 'Wiki aberto',
        'config-profile-no-anon' => 'Necesítase a creación dunha conta',
        'config-profile-fishbowl' => 'Só os editores autorizados',
        'config-profile-private' => 'Wiki privado',
@@ -6461,7 +6643,7 @@ En MediaWiki, é doado revisar os cambios recentes e reverter calquera dano feit
 Porén, moita xente atopa MediaWiki útil nunha ampla variedade de papeis, e ás veces non é fácil convencer a todos dos beneficios que leva consigo o estilo wiki.
 Vostede decide.
 
-O tipo '''{{int:config-profile-wiki}}''' permite a edición por parte de calquera, mesmo sen rexistro.
+O modelo '''{{int:config-profile-wiki}}''' permite a edición por parte de calquera, mesmo sen rexistro.
 A opción '''{{int:config-profile-no-anon}}''' proporciona un control maior, pero pode desalentar os colaboradores casuais.
 
 O escenario '''{{int:config-profile-fishbowl}}''' restrinxe a edición aos usuarios aprobados, pero o público pode ollar as páxinas, incluíndo os historiais.
@@ -6552,7 +6734,7 @@ Quizais necesite algunha configuración adicional, pero pode activalas agora',
        'config-install-alreadydone' => "'''Atención:''' Semella que xa instalou MediaWiki e que o está a instalar de novo.
 Vaia ata a seguinte páxina.",
        'config-install-begin' => 'Ao premer en "{{int:config-continue}}", comezará a instalación de MediaWiki.
-Se aínda quere facer algún cambio, volva atrás.',
+Se aínda quere facer algún cambio, prema en "{{int:config-back}}".',
        'config-install-step-done' => 'feito',
        'config-install-step-failed' => 'erro',
        'config-install-extensions' => 'Incluíndo as extensións',
@@ -6608,7 +6790,7 @@ $3
 '''Nota:''' Se non fai iso agora, este ficheiro de configuración xerado non estará dispoñible máis adiante se sae da instalación sen descargalo.
 
 Cando faga todo isto, xa poderá '''[$2 entrar no seu wiki]'''.",
-       'config-download-localsettings' => 'Descargar o LocalSettings.php',
+       'config-download-localsettings' => 'Descargar o <code>LocalSettings.php</code>',
        'config-help' => 'axuda',
        'config-nofile' => 'Non se puido atopar o ficheiro "$1". Se cadra, foi borrado?',
        'mainpagetext' => "'''MediaWiki instalouse correctamente.'''",
@@ -6617,7 +6799,8 @@ Cando faga todo isto, xa poderá '''[$2 entrar no seu wiki]'''.",
 == Primeiros pasos ==
 * [//www.mediawiki.org/wiki/Manual:Configuration_settings Lista das opcións de configuración]
 * [//www.mediawiki.org/wiki/Manual:FAQ Preguntas máis frecuentes sobre MediaWiki]
-* [https://lists.wikimedia.org/mailman/listinfo/mediawiki-announce Lista de correo dos lanzamentos de MediaWiki]',
+* [https://lists.wikimedia.org/mailman/listinfo/mediawiki-announce Lista de correo dos lanzamentos de MediaWiki]
+* [//www.mediawiki.org/wiki/Localisation#Translation_resources Localice MediaWiki á súa lingua]',
 );
 
 /** Goan Konkani (Latin script) (Konknni)
@@ -6651,7 +6834,7 @@ $messages['gsw'] = array(
        'config-information' => 'Information',
        'config-localsettings-upgrade' => "'''Warnig:''' E Datei <code>LocalSettings.php</code> isch gfunde wore.
 Fir d Aktualisierig vu dr däre Inschtallation, gib bitte dr Wärt vum Parameter <code>\$wgUpgradeKey</code> im Fäld unten yy.
-Du findsch dr Wärt in dr Datei LocalSettings.php.",
+Du findsch dr Wärt in dr Datei <code>LocalSettings.php</code>.",
        'config-localsettings-key' => 'Aktualisierigsschlissel:',
        'config-localsettings-badkey' => 'Dr Aktualisierigsschlissel, wu du aagee hesch, isch falsch.',
        'config-session-error' => 'Fähler bim Starte vu dr Sitzig: $1',
@@ -6750,7 +6933,7 @@ S Objäktcaching isch wäge däm nit aktiviert.",
 Miniaturaasichte vu Bilder sin megli, sobald s Uffelade vu Dateie aktiviert isch.',
        'config-help' => 'Hilf',
        'mainpagetext' => "'''MediaWiki isch erfolgrich inschtalliert worre.'''",
-       'mainpagedocfooter' => 'Lueg uf d [//meta.wikimedia.org/wiki/MediaWiki_localisation Dokumentation fir d Aapassig vu dr Benutzeroberflächi] un s [//meta.wikimedia.org/wiki/Help:Contents Benutzerhandbuech] fir d Hilf iber d Benutzig un s Yystelle.',
+       'mainpagedocfooter' => 'Lueg uf d [//meta.wikimedia.org/wiki/MediaWiki_localisation Dokumentation fir d Aapassig vu dr Benutzeroberflächi] un s [//meta.wikimedia.org/wiki/Help:Contents Benutzerhandbuech] fir d Hilf iber d Benutzig un s Yystelle.', # Fuzzy
 );
 
 /** Gujarati (ગુજરાતી)
@@ -6795,6 +6978,7 @@ $messages['haw'] = array(
  * @author Amire80
  * @author YaronSh
  * @author ערן
+ * @author 아라
  */
 $messages['he'] = array(
        'config-desc' => 'תכנית ההתקנה של מדיה־ויקי',
@@ -6802,19 +6986,19 @@ $messages['he'] = array(
        'config-information' => 'פרטים',
        'config-localsettings-upgrade' => 'זוהה קובץ <code>LocalSettings.php</code>.
 כדי לשדרג את ההתקנה הזאת, נא להקליד את הערך של <code>$wgUpgradeKey</code> בתיבה להלן.
-אפשר למצוא אותו בקובץ LocalSettings.php.',
-       'config-localsettings-cli-upgrade' => 'זוהה קובץ LocalSettings.php.
-כדי לשדרג את ההתקנה הזאת, הריצו את update.php ולא את הקובץ הזה.',
+אפשר למצוא אותו בקובץ <code>LocalSettings.php</code>.',
+       'config-localsettings-cli-upgrade' => 'זוהה קובץ <code>LocalSettings.php</code>.
+כדי לשדרג את ההתקנה הזאת, הריצו את <code>update.php</code> ולא את הקובץ הזה.',
        'config-localsettings-key' => 'מפתח השדרוג:',
        'config-localsettings-badkey' => 'המפתח שהקלדתם שגוי',
        'config-upgrade-key-missing' => 'זוהתה התקנה קיימת של מדיה־ויקי.
-כדי לשדרג את ההתקנה הזאת, אנא כתבו את השורה הבא בתחתית קובץ LocalSettings.php שלכם:
+כדי לשדרג את ההתקנה הזאת, אנא כתבו את השורה הבא בתחתית קובץ <code>LocalSettings.php</code> שלכם:
 
 $1',
-       'config-localsettings-incomplete' => 'נראה שקובץ LocalSettings.php הקיים אינו שלם.
+       'config-localsettings-incomplete' => 'נראה שקובץ <code>LocalSettings.php</code> הקיים אינו שלם.
 המשתנה $1 אינו מוגדר.
-נו לשנות את קובץ LocalSettings.php שלכם כך שהמשתנה הזה יהיה מוגדר וללחוץ "המשך".',
-       'config-localsettings-connection-error' => 'אירעה שגיאה בעת חיבור למסד נתונים עם הגדרות ב־LocalSettings.php או ב־AdminSettings.php. נא לתקן את ההגדרות האלו ולנסות שוב.
+נו לשנות את קובץ <code>LocalSettings.php</code> שלכם כך שהמשתנה הזה יהיה מוגדר וללחוץ "{{int:Config-continue}}".',
+       'config-localsettings-connection-error' => 'אירעה שגיאה בעת חיבור למסד נתונים עם הגדרות ב־<code>LocalSettings.php</code> או ב־<code>AdminSettings.php</code>. נא לתקן את ההגדרות האלו ולנסות שוב.
 
 $1',
        'config-session-error' => 'שגיאה באתחול שיחה: $1',
@@ -6946,7 +7130,7 @@ $1
        'config-using531' => 'אי־אפשר להשתמש במדיה־ויקי עם <span dir="ltr">PHP $1</span> בגלל באג בפרמטרים של הפניות (reference parameters) ל־<code dir="ltr">__call()</code>.
 שדרגו ל־PHP 5.3.2 או לגרסה גבוהה יותר כדי לתקן את זה ([//bugs.php.net/bug.php?id=50394 bug filed with PHP]) או שַנמכו ל־PHP 5.3.0 כדי לפתור את הבעיה הזאת.
 ההתקנה בוטלה.',
-       'config-suhosin-max-value-length' => 'מותקן פה Suhosin והוא מגביל את אורך פרמטר GET ל־$1 בתים. רכיב ResourceLoader של מדיה־ויקי יעקוף את המגלבה הזאת, אבל זה יפגע בביצועים. אם זה בכלל אפשרי, כדי לתקן את הערך של suhosin.get.max_value_length ל־1024 בקובץ php.ini ולהגדיר את ‎$wgResourceLoaderMaxQueryLength לאותו הערך בקובץ LocalSettings.php.',
+       'config-suhosin-max-value-length' => 'מותקן פה Suhosin והוא מגביל את אורך פרמטר GET ל־$1 בתים. רכיב ResourceLoader של מדיה־ויקי יעקוף את המגלבה הזאת, אבל זה יפגע בביצועים. אם זה בכלל אפשרי, כדי לתקן את הערך של <code>suhosin.get.max_value_length</code> ל־1024 בקובץ <code>php.ini</code> ולהגדיר את ‎<code>$wgResourceLoaderMaxQueryLength</code> לאותו הערך בקובץ LocalSettings.php.', # Fuzzy
        'config-db-type' => 'סוג מסד הנתונים:',
        'config-db-host' => 'שרת מסד הנתונים:',
        'config-db-host-help' => 'אם שרת מסד הנתונים שלכם נמצא על שרת אחר, הקלידו את שם המחשב או את כתובת ה־IP כאן.
@@ -7027,7 +7211,7 @@ $1
        'config-support-postgres' => '$1 הוא מסד נתונים נפוץ בקוד פתוח והוא נפוץ בתור חלופה ל־MySQL (ר׳ [http://www.php.net/manual/en/pgsql.installation.php how to compile PHP with PostgreSQL support]). ייתכן שיש בתצורה הזאת באגים מסוימים והיא לא מומלצת לסביבות מבצעיות.',
        'config-support-sqlite' => '* $1 הוא מסד נתונים קליל עם תמיכה טובה מאוד. (ר׳ [http://www.php.net/manual/en/pdo.installation.php How to compile PHP with SQLite support], משתמש ב־PDO)',
        'config-support-oracle' => '* $1 הוא מסד נתונים עסקי מסחרי. (ר׳ [http://www.php.net/manual/en/oci8.installation.php How to compile PHP with OCI8 support])',
-       'config-support-ibm_db2' => '* $1 הוא מסד נתונים מסחרי ארגוני.',
+       'config-support-ibm_db2' => '* $1 הוא מסד נתונים מסחרי ארגוני.', # Fuzzy
        'config-header-mysql' => 'הגדרות MySQL',
        'config-header-postgres' => 'הגדרות PostgreSQL',
        'config-header-sqlite' => 'הגדרות SQLite',
@@ -7094,8 +7278,8 @@ chmod a+w $3</pre></div>',
        'config-upgrade-done-no-regenerate' => 'השדרוג הושלם.
 
 עכשיו אפשר [$1 להתחיל להשתמש בוויקי שלכם].',
-       'config-regenerate' => 'לחולל מחדש את LocalSettings.php ←',
-       'config-show-table-status' => 'שאילתת SHOW TABLE STATUS נכשלה!',
+       'config-regenerate' => 'לחולל מחדש את <code>LocalSettings.php</code> ←',
+       'config-show-table-status' => 'שאילתת <code>SHOW TABLE STATUS</code> נכשלה!',
        'config-unknown-collation' => "'''אזהרה:''' מסד הנתונים משתמש בשיטת מיון שאינה מוּכּרת.",
        'config-db-web-account' => 'חשבון במסד הנתונים לגישה מהרשת',
        'config-db-web-help' => 'לבחור את שם המשתמש ואת הססמה ששרת הווב ישתמש בו להתחברות לשרת מסד הנתונים בזמן פעילות רגילה של הוויקי.',
@@ -7167,7 +7351,7 @@ chmod a+w $3</pre></div>',
        'config-optional-continue' => 'הצגת שאלות נוספות.',
        'config-optional-skip' => 'משעמם לי, תתקינו לי כבר את הוויקי הזה.',
        'config-profile' => 'תסריט הרשאות משתמשים:',
-       'config-profile-wiki' => 'ויקי מסורתי',
+       'config-profile-wiki' => 'ויקי מסורתי', # Fuzzy
        'config-profile-no-anon' => 'נדרשת יצירת חשבון',
        'config-profile-fishbowl' => 'עורכים מורשים בלבד',
        'config-profile-private' => 'ויקי פרטי',
@@ -7182,7 +7366,7 @@ chmod a+w $3</pre></div>',
 בתסריט '''{{int:config-profile-fishbowl}}''' רק משתמשים שקיבלו אישור יכולים לערוך, אבל כל הגולשים יכולים לקרוא את הדפים ואת גרסאותיהם הקודמות.
 ב'''{{int:config-profile-private}}''' רק משתמשים שקיבלו אישור יכולים לקרוא ולערוך דפים.
 
-הגדרות מורכבות של הרשאות אפשריות אחרי ההתקנה, ר׳ את [//www.mediawiki.org/wiki/Manual:User_rights הפרק על הנושא הזה בספר ההדרכה].",
+הגדרות מורכבות של הרשאות אפשריות אחרי ההתקנה, ר׳ את [//www.mediawiki.org/wiki/Manual:User_rights הפרק על הנושא הזה בספר ההדרכה].", # Fuzzy
        'config-license' => 'זכויות יוצרים ורישיון:',
        'config-license-none' => 'ללא כותרת תחתית עם רישיון',
        'config-license-cc-by-sa' => 'קריאייטיב קומונז–ייחוס–שיתוף זהה',
@@ -7267,7 +7451,7 @@ chmod a+w $3</pre></div>',
        'config-install-alreadydone' => "'''אזהרה:''' נראה שכבר התקנתם את מדיה־ויקי ואתם מנסים להתקין אותה שוב.
 אנה התקדמו לדף הבא.",
        'config-install-begin' => 'כשתלחצו על "{{int:config-continue}}", תתחילו את ההתקנה של מדיה־ויקי.
-אם אתם עדיין רוצים לשנות משהו, לחצו על "הקודם".',
+אם אתם עדיין רוצים לשנות משהו, לחצו על "הקודם".', # Fuzzy
        'config-install-step-done' => 'בוצע',
        'config-install-step-failed' => 'נכשל',
        'config-install-extensions' => 'כולל הרחבות',
@@ -7323,7 +7507,7 @@ $3
 '''שימו לב''': אם לא תעשו זאת עכשיו, קובץ ההגדרות המחוּלל לא יהיה זמין לכם שוב.
 
 אחרי שתעשו את זה, תוכלו '''[$2 להיכנס לוויקי שלכם]'''.",
-       'config-download-localsettings' => 'הורדת LocalSettings.php',
+       'config-download-localsettings' => 'הורדת <code>LocalSettings.php</code>',
        'config-help' => 'עזרה',
        'config-nofile' => 'הקובץ "$1" לא נמצא. האם הוא נמחק?',
        'mainpagetext' => "'''תוכנת מדיה־ויקי הותקנה בהצלחה.'''",
@@ -7332,7 +7516,7 @@ $3
 == קישורים שימושיים ==
 * [//www.mediawiki.org/wiki/Manual:Configuration_settings רשימת ההגדרות]
 * [//www.mediawiki.org/wiki/Manual:FAQ שאלות ותשובות על מדיה־ויקי]
-* [https://lists.wikimedia.org/mailman/listinfo/mediawiki-announce רשימת התפוצה על השקת גרסאות]',
+* [https://lists.wikimedia.org/mailman/listinfo/mediawiki-announce רשימת התפוצה על השקת גרסאות]', # Fuzzy
 );
 
 /** Hindi (हिन्दी)
@@ -7383,6 +7567,7 @@ i [//meta.wikimedia.org/wiki/MediaWiki_User%27s_Guide Vodič za suradnike] za po
 
 /** Upper Sorbian (hornjoserbsce)
  * @author Michawiki
+ * @author 아라
  */
 $messages['hsb'] = array(
        'config-desc' => 'Instalaciski program za MediaWiki',
@@ -7390,19 +7575,19 @@ $messages['hsb'] = array(
        'config-information' => 'Informacije',
        'config-localsettings-upgrade' => 'Dataja <code>LocalSettings.php</code> je so wotkryła.
 Zo by tutu instalaciju aktualizował, zapodaj prošu hódnotu za parameter <code>$wgUpgradeKey</code> do slědowaceho pola.
-Namakaš tón parameter w dataji LocalSettings.php.',
-       'config-localsettings-cli-upgrade' => 'Dataja LocalSettings.php bu wotkryta.
-Zo by tutu instalaciju aktualizował, wuwjedźće update.php',
+Namakaš tón parameter w dataji <code>LocalSettings.php</code>.',
+       'config-localsettings-cli-upgrade' => 'Dataja <code>LocalSettings.php</code> bu wotkryta.
+Zo by tutu instalaciju aktualizował, wuwjedźće <code>update.php</code>',
        'config-localsettings-key' => 'Aktualizaciski kluč:',
        'config-localsettings-badkey' => 'Kluč, kotryž sy podał, je wopak',
        'config-upgrade-key-missing' => 'Eksistowaca instalacija MediaWiki je so wotkryła.
-Zo by tutu instalaciju aktualizował, staj prošu slědowacu linku deleka w dataji LocalSettings.php:
+Zo by tutu instalaciju aktualizował, staj prošu slědowacu linku deleka w dataji <code>LocalSettings.php</code>:
 
 $1',
-       'config-localsettings-incomplete' => 'Zda so, zo eksistwoaca dataja LocalSettings.php je njedospołna.
+       'config-localsettings-incomplete' => 'Zda so, zo eksistwoaca dataja <code>LocalSettings.php</code> je njedospołna.
 Wariabla $1 njeje nastajena.
-Prošu změń dataju LocalSettings.php, zo by so tuta wariabla nastajiła a klikń na "Dale".',
-       'config-localsettings-connection-error' => 'Při zwjazowanju z datowej banku z pomocu nastajenjow podatych w LocalSettings.php abo AdminSettings.php je zmylk wustupił. Prošu skoriguj tute nastajenja a spytaj hišće raz.
+Prošu změń dataju <code>LocalSettings.php</code>, zo by so tuta wariabla nastajiła a klikń na "{{int:Config-continue}}".',
+       'config-localsettings-connection-error' => 'Při zwjazowanju z datowej banku z pomocu nastajenjow podatych w <code>LocalSettings.php</code> abo <code>AdminSettings.php</code> je zmylk wustupił. Prošu skoriguj tute nastajenja a spytaj hišće raz.
 
 $1',
        'config-session-error' => 'Zmylk při startowanju posedźenja: $1',
@@ -7530,7 +7715,7 @@ Změń ju jenož, jeli su přeswědčiwe přičiny za to.',
        'config-support-mysql' => '* $1 je primarny cil za MediaWiki a podpěruje so najlěpje ([http://www.php.net/manual/en/mysql.installation.php Nawod ke kompilowanju  PHP z  MySQL-podpěru])',
        'config-support-postgres' => '* $1 je popularny system datoweje banki zjawneho žórła jako alternatiwa k MySQL ([http://www.php.net/manual/en/pgsql.installation.php nawod za kompilowanje PHP z podpěru PostgreSQL]). Móhło hišće někotre zmylki eksistować, a njeporuča so jón w produktiwnej wokolinje wužiwać.',
        'config-support-oracle' => '* $1 je komercielna předewzaćelska datowa banka. ([http://www.php.net/manual/en/oci8.installation.php Nawod za kompilowanje PHP z OCI8-podpěru])',
-       'config-support-ibm_db2' => '* $1 je komercielna předewzaćelska datowa banka.',
+       'config-support-ibm_db2' => '* $1 je komercielna předewzaćelska datowa banka.', # Fuzzy
        'config-header-mysql' => 'Nastajenja MySQL',
        'config-header-postgres' => 'Nastajenja PostgreSQL',
        'config-header-sqlite' => 'Nastajenja SQLite',
@@ -7572,8 +7757,8 @@ Zo by je na MediaWiki $1 aktualizował, klikń na '''Dale'''.",
        'config-upgrade-done-no-regenerate' => 'Aktualizacija dokónčena.
 
 Móžeš nětko [$1 swój wiki wužiwać].',
-       'config-regenerate' => 'LocalSettings.php znowa wutworić →',
-       'config-show-table-status' => 'Naprašowanje SHOW TABLE STATUS je so njeporadźiło!',
+       'config-regenerate' => '<code>LocalSettings.php</code> znowa wutworić →',
+       'config-show-table-status' => 'Naprašowanje <code>SHOW TABLE STATUS</code> je so njeporadźiło!',
        'config-unknown-collation' => "'''Warnowanje:''' Datowa banka njeznatu kolaciju wužiwa.",
        'config-db-web-account' => 'Konto datoweje banki za webpřistup',
        'config-db-web-help' => 'wubjer wužiwarske mjeno a hesło, kotrejž webserwer budźe wužiwać, zo by z serwerom datoweje banki za wšědnu operaciju zwjazać',
@@ -7622,7 +7807,7 @@ Móžeš nětko zbytnu konfiguraciju přeskočić a wiki hnydom instalować.',
        'config-optional-continue' => 'Dalše prašenja?',
        'config-optional-skip' => 'Instaluj nětko wiki.',
        'config-profile' => 'Profil wužiwarskich prawow:',
-       'config-profile-wiki' => 'Tradicionelny wiki',
+       'config-profile-wiki' => 'Tradicionelny wiki', # Fuzzy
        'config-profile-no-anon' => 'Załoženje konto je trěbne',
        'config-profile-fishbowl' => 'Jenož awtorizowani wobdźěłarjo',
        'config-profile-private' => 'Priwatny wiki',
@@ -7680,7 +7865,7 @@ To móže sej přidatnu konfiguraciju wužadać, ale móžeš je nětko zmóžni
        'config-install-alreadydone' => "'''Warnowanje:''' Zda so, zo sy hižo MediaWiki instalował a pospytuješ jón znowa instalować.
 Prošu pokročuj z přichodnej stronu.",
        'config-install-begin' => 'Přez kliknjenje na "{{int:config-continue}}" budźe so instalacija MediaWiki startować.
-Jeli hišće chceš něšto změnić, klikń na "Wróćo".',
+Jeli hišće chceš něšto změnić, klikń na "Wróćo".', # Fuzzy
        'config-install-step-done' => 'dokónčene',
        'config-install-step-failed' => 'njeporadźiło',
        'config-install-extensions' => 'Inkluziwnje rozšěrjenja',
@@ -7716,7 +7901,7 @@ Standardna lisćina sp přeskakuje.",
        'config-install-mainpage' => 'Hłowna strona so ze standardnym wobsahom wutworja',
        'config-install-extension-tables' => 'Tabele za zmóžnjene rozšěrjenja so tworja',
        'config-install-mainpage-failed' => 'Powěsć njeda so zasunyć: $1',
-       'config-download-localsettings' => 'LocalSettings.php sćahnyć',
+       'config-download-localsettings' => '<code>LocalSettings.php</code> sćahnyć',
        'config-help' => 'pomoc',
        'config-nofile' => 'Dataja "$1" njeje so namakała. Je so zhašała?',
        'mainpagetext' => "'''MediaWiki bu wuspěšnje instalowany.'''",
@@ -7726,7 +7911,7 @@ Standardna lisćina sp přeskakuje.",
 
 * [//www.mediawiki.org/wiki/Manual:Configuration_settings Wo nastajenjach]
 * [//www.mediawiki.org/wiki/Manual:FAQ MediaWiki FAQ]
-* [https://lists.wikimedia.org/mailman/listinfo/mediawiki-announce MediaWiki release mailing list]',
+* [https://lists.wikimedia.org/mailman/listinfo/mediawiki-announce MediaWiki release mailing list]', # Fuzzy
 );
 
 /** Haitian (Kreyòl ayisyen)
@@ -7746,25 +7931,26 @@ $messages['ht'] = array(
 /** Hungarian (magyar)
  * @author Dani
  * @author Glanthor Reviol
+ * @author 아라
  */
 $messages['hu'] = array(
        'config-desc' => 'A MediaWiki telepítője',
        'config-title' => 'A MediaWiki $1 telepítése',
        'config-information' => 'Információ',
        'config-localsettings-upgrade' => 'Már létezik a <code>LocalSettings.php</code> fájl.
-A telepített szoftver frissítéséhez írd be az alábbi mezőbe a <code>$wgUpgradeKey</code> beállítás értékét, melyet a LocalSettings.php nevű fájlban találhatsz meg.',
-       'config-localsettings-cli-upgrade' => 'A LocalSettings.php fájl megtalálható.
-A telepített rendszer frissítéséhez futtasd az update.php-t.',
+A telepített szoftver frissítéséhez írd be az alábbi mezőbe a <code>$wgUpgradeKey</code> beállítás értékét, melyet a <code>LocalSettings.php</code> nevű fájlban találhatsz meg.',
+       'config-localsettings-cli-upgrade' => 'A <code>LocalSettings.php</code> fájl megtalálható.
+A telepített rendszer frissítéséhez futtasd az <code>update.php</code>-t.',
        'config-localsettings-key' => 'Frissítési kulcs:',
        'config-localsettings-badkey' => 'A megadott kulcs érvénytelen.',
        'config-upgrade-key-missing' => 'A telepítő a MediaWiki meglévő példányát észlelte.
-A telepített rendszer frissítéséhez helyezd el az alábbi sort a LocalSettings.php végére:
+A telepített rendszer frissítéséhez helyezd el az alábbi sort a <code>LocalSettings.php</code> végére:
 
 $1',
-       'config-localsettings-incomplete' => 'A meglévő LocalSettings.php hiányosnak tűnik.
+       'config-localsettings-incomplete' => 'A meglévő <code>LocalSettings.php</code> hiányosnak tűnik.
 A(z) $1 változó értéke nincs beállítva.
-Módosítsd a LocalSettings.php fájlt úgy, hogy ez a változó be legyen állítva, majd kattints a „Folytatás” gombra.',
-       'config-localsettings-connection-error' => 'Nem sikerült csatlakozni az adatbázishoz a LocalSettings.php-ben vagy az AdminSettings.php-ben megadott adatokkal. Ellenőrizd a beállításokat, majd próbáld újra.
+Módosítsd a <code>LocalSettings.php</code> fájlt úgy, hogy ez a változó be legyen állítva, majd kattints a „{{int:Config-continue}}” gombra.',
+       'config-localsettings-connection-error' => 'Nem sikerült csatlakozni az adatbázishoz a <code>LocalSettings.php</code>-ben vagy az <code>AdminSettings.php</code>-ben megadott adatokkal. Ellenőrizd a beállításokat, majd próbáld újra.
 
 $1',
        'config-session-error' => 'Nem sikerült elindítani a munkamenetet: $1',
@@ -7889,7 +8075,7 @@ Telepítés megszakítva.',
        'config-using531' => 'A MediaWiki nem használható a PHP $1-es verziójával, mert hiba van a <code>__call()</code> függvénynek átadott referenciaparaméterekkel.
 A probléma kiküszöböléséhez frissíts a PHP 5.3.2-es verziójára, vagy használd a korábbi, 5.3.0-ásat.
 Telepítés megszakítva.',
-       'config-suhosin-max-value-length' => 'A Suhosin telepítve van, és a GET paraméter hosszát $1 bájtra korlátozza. A MediaWiki erőforrásbetöltő összetevője megkerüli a problémát, de így csökkenni fog a teljesítmény. Ha lehetséges, állítsd be a suhosin.get.max_value_length értékét legalább 1024-re a php.iniben, és állítsd be a $wgResourceLoaderMaxQueryLength változót ugyanerre az értékre a LocalSettings.php-ben.',
+       'config-suhosin-max-value-length' => 'A Suhosin telepítve van, és a GET paraméter hosszát $1 bájtra korlátozza. A MediaWiki erőforrásbetöltő összetevője megkerüli a problémát, de így csökkenni fog a teljesítmény. Ha lehetséges, állítsd be a <code>suhosin.get.max_value_length</code> értékét legalább 1024-re a <code>php.ini</code>ben, és állítsd be a <code>$wgResourceLoaderMaxQueryLength</code> változót ugyanerre az értékre a LocalSettings.php-ben.', # Fuzzy
        'config-db-type' => 'Adatbázis típusa:',
        'config-db-host' => 'Adatbázis hosztneve:',
        'config-db-host-help' => 'Ha az adatbázisszerver másik szerveren található, add meg a hosztnevét vagy az IP-címét.
@@ -7967,7 +8153,7 @@ Ha az alábbi listán nem találod azt a rendszert, melyet használni szeretnél
        'config-support-postgres' => '* A $1 népszerű, nyílt forráskódú adatbázisrendszer, a MySQL alternatívája ([http://www.php.net/manual/en/pgsql.installation.php Hogyan fordítható a PHP PostgreSQL-támogatással]). Több apró, javítatlan hiba is előfordulhat, így nem ajánlott éles környezetben használni.',
        'config-support-sqlite' => '* Az $1 egy könnyű, nagyon jól támogatott adatbázisrendszer. ([http://www.php.net/manual/en/pdo.installation.php Hogyan fordítható a PHP SQLite-támogatással], PDO-t használ)',
        'config-support-oracle' => '* Az $1 kereskedelmi, vállalati adatbázisrendszer. ([http://www.php.net/manual/en/oci8.installation.php Hogyan fordítható a PHP OCI8-támogatással])',
-       'config-support-ibm_db2' => '* Az $1 kereskedelmi vállalati adatbázisrendszer.',
+       'config-support-ibm_db2' => '* Az $1 kereskedelmi vállalati adatbázisrendszer.', # Fuzzy
        'config-header-mysql' => 'MySQL-beállítások',
        'config-header-postgres' => 'PostgreSQL-beállítások',
        'config-header-sqlite' => 'SQLite-beállítások',
@@ -8034,8 +8220,8 @@ Ez '''nem ajánlott''', csak akkor, ha problémák vannak a wikivel.",
        'config-upgrade-done-no-regenerate' => "A frissítés befejeződött.
 
 Most már '''[$1 beléphetsz a wikibe]'''.",
-       'config-regenerate' => 'LocalSettings.php elkészítése újra →',
-       'config-show-table-status' => 'A SHOW TABLE STATUS lekérdezés nem sikerült!',
+       'config-regenerate' => '<code>LocalSettings.php</code> elkészítése újra →',
+       'config-show-table-status' => 'A <code>SHOW TABLE STATUS</code> lekérdezés nem sikerült!',
        'config-unknown-collation' => "'''Figyelmeztetés:''' az adatbázis ismeretlen egybevetést használ.",
        'config-db-web-account' => 'A webes hozzáférésnél használt adatbázisfiók',
        'config-db-web-help' => 'Add meg azt a felhasználónevet és jelszót, amit a webszerver a wiki általános működése során használ a csatlakozáshoz.',
@@ -8106,7 +8292,7 @@ A további konfigurációt kihagyhatod, és most azonnal elindíthatod a wiki te
        'config-optional-continue' => 'További információk megadása.',
        'config-optional-skip' => 'Épp elég volt, települjön a wiki!',
        'config-profile' => 'Felhasználói jogosultságok profilja:',
-       'config-profile-wiki' => 'Hagyományos wiki',
+       'config-profile-wiki' => 'Hagyományos wiki', # Fuzzy
        'config-profile-no-anon' => 'Felhasználói fiók létrehozása szükséges',
        'config-profile-fishbowl' => 'Csak engedélyezett szerkesztők',
        'config-profile-private' => 'Privát wiki',
@@ -8120,7 +8306,7 @@ Választhatsz!
 
 Lehetőség van arra is, hogy '''{{lc:{{int:config-profile-fishbowl}}}}''' módosíthassák a lapokat, de a nyilvánosság ekkor megtekintheti a lapokat és azok laptörténetét is. '''{{int:config-profile-private}}''' esetén csak az engedélyezett szerkesztők tekinthetik meg a lapokat, és ugyanez a csoport szerkeszthet.
 
-Telepítés után jóval összetettebb jogosultságrendszer állítható össze, további információ a [//www.mediawiki.org/wiki/Manual:User_rights kézikönyv kapcsolódó bejegyzésében].",
+Telepítés után jóval összetettebb jogosultságrendszer állítható össze, további információ a [//www.mediawiki.org/wiki/Manual:User_rights kézikönyv kapcsolódó bejegyzésében].", # Fuzzy
        'config-license' => 'Szerzői jog és licenc:',
        'config-license-none' => 'Nincs licencjelzés',
        'config-license-cc-by-sa' => 'Creative Commons Nevezd meg! - Így add tovább!',
@@ -8204,7 +8390,7 @@ Lehetséges, hogy további beállításra lesz szükség hozzájuk, de már most
        'config-install-alreadydone' => "'''Figyelmeztetés:''' Úgy tűnik, hogy a MediaWiki telepítve van, és te ismét megpróbálod telepíteni.
 Folytasd a következő oldalon.",
        'config-install-begin' => 'A „{{int:config-continue}}” gomb megnyomása elindítja a MediaWiki telepítését.
-Ha szeretnél módosítani a beállításokon, kattints a vissza gombra.',
+Ha szeretnél módosítani a beállításokon, kattints a vissza gombra.', # Fuzzy
        'config-install-step-done' => 'kész',
        'config-install-step-failed' => 'sikertelen',
        'config-install-extensions' => 'Kiterjesztések beillesztése',
@@ -8255,7 +8441,7 @@ $3
 '''Megjegyzés''': Ha ezt most nem teszed meg, és kilépsz a telepítésből, az elkészített konfigurációs fájlt nem tudod elérni a későbbiekben.
 
 Ha végeztél a fájl elhelyezésével, '''[$2 beléphetsz a wikibe]'''.",
-       'config-download-localsettings' => 'LocalSettings.php letöltése',
+       'config-download-localsettings' => '<code>LocalSettings.php</code> letöltése',
        'config-help' => 'segítség',
        'mainpagetext' => "'''A MediaWiki telepítése sikeresen befejeződött.'''",
        'mainpagedocfooter' => "Ha segítségre van szükséged a wikiszoftver használatához, akkor keresd fel a [//meta.wikimedia.org/wiki/Help:Contents User's Guide] oldalt.
@@ -8263,7 +8449,7 @@ Ha végeztél a fájl elhelyezésével, '''[$2 beléphetsz a wikibe]'''.",
 == Alapok (angol nyelven) ==
 * [//www.mediawiki.org/wiki/Manual:Configuration_settings Beállítások listája]
 * [//www.mediawiki.org/wiki/Manual:FAQ MediaWiki GyIK]
-* [https://lists.wikimedia.org/mailman/listinfo/mediawiki-announce MediaWiki-kiadások levelezőlistája]",
+* [https://lists.wikimedia.org/mailman/listinfo/mediawiki-announce MediaWiki-kiadások levelezőlistája]", # Fuzzy
 );
 
 /** Magyar (magázó) (Magyar (magázó))
@@ -8342,7 +8528,7 @@ Ha ezzel készen van, '''[$2 beléphet a wikibe]'''.", # Fuzzy
 == Alapok (angol nyelven) ==
 * [//www.mediawiki.org/wiki/Manual:Configuration_settings Beállítások listája]
 * [//www.mediawiki.org/wiki/Manual:FAQ MediaWiki GyIK]
-* [https://lists.wikimedia.org/mailman/listinfo/mediawiki-announce MediaWiki-kiadások levelezőlistája]",
+* [https://lists.wikimedia.org/mailman/listinfo/mediawiki-announce MediaWiki-kiadások levelezőlistája]", # Fuzzy
 );
 
 /** Armenian (Հայերեն)
@@ -8360,6 +8546,7 @@ $messages['hy'] = array(
 
 /** Interlingua (interlingua)
  * @author McDutchie
+ * @author 아라
  */
 $messages['ia'] = array(
        'config-desc' => 'Le installator de MediaWiki',
@@ -8367,19 +8554,19 @@ $messages['ia'] = array(
        'config-information' => 'Information',
        'config-localsettings-upgrade' => 'Un file <code>LocalSettings.php</code> ha essite detegite.
 Pro actualisar iste installation, per favor entra le valor de <code>$wgUpgradeKey</code> in le quadro hic infra.
-Iste se trova in LocalSettings.php.',
-       'config-localsettings-cli-upgrade' => 'Un file LocalSettings.php file ha essite detegite.
-Pro actualisar iste installation, per favor executa upgrade.php.',
+Iste se trova in <code>LocalSettings.php</code>.',
+       'config-localsettings-cli-upgrade' => 'Un file <code>LocalSettings.php</code> file ha essite detegite.
+Pro actualisar iste installation, per favor executa <code>update.php</code>.',
        'config-localsettings-key' => 'Clave de actualisation:',
        'config-localsettings-badkey' => 'Le clave que tu forniva es incorrecte',
        'config-upgrade-key-missing' => 'Un installation existente de MediaWiki ha essite detegite.
-Pro actualisar iste installation, es necessari adjunger le sequente linea al fin del file LocalSettings.php:
+Pro actualisar iste installation, es necessari adjunger le sequente linea al fin del file <code>LocalSettings.php</code>:
 
 $1',
-       'config-localsettings-incomplete' => 'Le file LocalSettings.php existente pare esser incomplete.
+       'config-localsettings-incomplete' => 'Le file <code>LocalSettings.php</code> existente pare esser incomplete.
 Le variabile $1 non es definite.
-Per favor cambia LocalSettings.php de sorta que iste variabile es definite, e clicca "Continuar".',
-       'config-localsettings-connection-error' => 'Un error esseva incontrate durante le connexion al base de datos usante le configurationes specificate in LocalSettings.php o AdminSettings.php. Per favor repara iste configurationes e tenta lo de novo.
+Per favor cambia <code>LocalSettings.php</code> de sorta que iste variabile es definite, e clicca "{{int:Config-continue}}".',
+       'config-localsettings-connection-error' => 'Un error esseva incontrate durante le connexion al base de datos usante le configurationes specificate in <code>LocalSettings.php</code> o <code>AdminSettings.php</code>. Per favor repara iste configurationes e tenta lo de novo.
 
 $1',
        'config-session-error' => 'Error al comenciamento del session: $1',
@@ -8513,7 +8700,7 @@ Installation abortate.',
        'config-using531' => 'MediaWiki non pote esser usate con PHP $1 a causa de un defecto concernente parametros de referentia a <code>__call()</code>.
 Actualisa a PHP 5.3.2 o plus recente, o retrograda a PHP 5.3.0 pro remediar isto.
 Installation abortate.',
-       'config-suhosin-max-value-length' => 'Suhosin es installate e limita le longitude del parametro GET a $1 bytes. Le componente ResourceLoader de MediaWiki pote contornar iste limite, ma isto degradara le rendimento. Si possibile, tu deberea mitter suhosin.get.max_value_length a 1024 o plus in php.ini , e mitter $wgResourceLoaderMaxQueryLength al mesme valor in LocalSettings.php .',
+       'config-suhosin-max-value-length' => 'Suhosin es installate e limita le longitude del parametro GET a $1 bytes. Le componente ResourceLoader de MediaWiki pote contornar iste limite, ma isto degradara le rendimento. Si possibile, tu deberea mitter <code>suhosin.get.max_value_length</code> a 1024 o plus in <code>php.ini</code> , e mitter <code>$wgResourceLoaderMaxQueryLength</code> al mesme valor in LocalSettings.php .', # Fuzzy
        'config-db-type' => 'Typo de base de datos:',
        'config-db-host' => 'Servitor de base de datos:',
        'config-db-host-help' => 'Si tu servitor de base de datos es in un altere servitor, entra hic le nomine o adresse IP del servitor.
@@ -8597,7 +8784,7 @@ Si tu non vide hic infra le systema de base de datos que tu tenta usar, alora se
        'config-support-postgres' => '* $1 es un systema de base de datos popular e open source, alternativa a MySQL ([http://www.php.net/manual/en/pgsql.installation.php como compilar PHP con supporto de PostgreSQL]). Es possibile que resta alcun minor defectos non resolvite, dunque illo non es recommendate pro uso in un ambiente de production.',
        'config-support-sqlite' => '* $1 es un systema de base de datos legier que es multo ben supportate. ([http://www.php.net/manual/en/pdo.installation.php Como compilar PHP con supporto de SQLite], usa PDO)',
        'config-support-oracle' => '* $1 es un banca de datos commercial pro interprisas. ([http://www.php.net/manual/en/oci8.installation.php Como compilar PHP con supporto de OCI8])',
-       'config-support-ibm_db2' => '* $1 es un systema commercial de base de datos pro interprisas.',
+       'config-support-ibm_db2' => '* $1 es un systema commercial de base de datos pro interprisas.', # Fuzzy
        'config-header-mysql' => 'Configuration de MySQL',
        'config-header-postgres' => 'Configuration de PostgreSQL',
        'config-header-sqlite' => 'Configuration de SQLite',
@@ -8664,8 +8851,8 @@ Isto '''non es recommendate''' si tu non ha problemas con tu wiki.",
        'config-upgrade-done-no-regenerate' => 'Actualisation complete.
 
 Tu pote ora [$1 comenciar a usar tu wiki].',
-       'config-regenerate' => 'Regenerar LocalSettings.php →',
-       'config-show-table-status' => 'Le consulta SHOW TABLE STATUS falleva!',
+       'config-regenerate' => 'Regenerar <code>LocalSettings.php</code> →',
+       'config-show-table-status' => 'Le consulta <code>SHOW TABLE STATUS</code> falleva!',
        'config-unknown-collation' => "'''Aviso:''' Le base de datos usa un collation non recognoscite.",
        'config-db-web-account' => 'Conto de base de datos pro accesso via web',
        'config-db-web-help' => 'Selige le nomine de usator e contrasigno que le servitor web usara pro connecter al servitor de base de datos, durante le operation ordinari del wiki.',
@@ -8737,7 +8924,7 @@ Tu pote ora saltar le configuration remanente e installar le wiki immediatemente
        'config-optional-continue' => 'Pone me plus questiones.',
        'config-optional-skip' => 'Isto me es jam tediose. Simplemente installa le wiki.',
        'config-profile' => 'Profilo de derectos de usator:',
-       'config-profile-wiki' => 'Wiki traditional',
+       'config-profile-wiki' => 'Wiki traditional', # Fuzzy
        'config-profile-no-anon' => 'Creation de conto obligatori',
        'config-profile-fishbowl' => 'Modificatores autorisate solmente',
        'config-profile-private' => 'Wiki private',
@@ -8753,7 +8940,7 @@ Un wiki con '''{{int:config-profile-no-anon}}''' attribue additional responsabil
 Le scenario '''{{int:config-profile-fishbowl}}''' permitte al usatores approbate de modificar, ma le publico pote vider le paginas, includente lor historia.
 Un '''{{int:config-profile-private}}''' permitte solmente al usatores approbate de vider le paginas e de modificar los.
 
-Configurationes de derectos de usator plus complexe es disponibile post installation, vide le [//www.mediawiki.org/wiki/Manual:User_rights pertinente section del manual].",
+Configurationes de derectos de usator plus complexe es disponibile post installation, vide le [//www.mediawiki.org/wiki/Manual:User_rights pertinente section del manual].", # Fuzzy
        'config-license' => 'Copyright e licentia:',
        'config-license-none' => 'Nulle licentia in pede de paginas',
        'config-license-cc-by-sa' => 'Creative Commons Attribution Share Alike',
@@ -8838,7 +9025,7 @@ Istes pote requirer additional configuration, ma tu pote activar los ora.',
        'config-install-alreadydone' => "'''Aviso:''' Il pare que tu ha jam installate MediaWiki e tenta installar lo de novo.
 Per favor continua al proxime pagina.",
        'config-install-begin' => 'Un clic sur "{{int:config-continue}}" comencia le installation de MediaWiki.
-Pro facer alterationes, clicca sur "Retro".',
+Pro facer alterationes, clicca sur "Retro".', # Fuzzy
        'config-install-step-done' => 'finite',
        'config-install-step-failed' => 'fallite',
        'config-install-extensions' => 'Include le extensiones',
@@ -8895,7 +9082,7 @@ $3
 '''Nota''': Si tu non discarga iste file de configuration ora, illo non essera disponibile plus tarde.
 
 Post facer isto, tu pote '''[$2 entrar in tu wiki]'''.",
-       'config-download-localsettings' => 'Discargar LocalSettings.php',
+       'config-download-localsettings' => 'Discargar <code>LocalSettings.php</code>',
        'config-help' => 'adjuta',
        'config-nofile' => 'Le file "$1" non poteva esser trovate. Ha illo essite delite?',
        'mainpagetext' => "'''MediaWiki ha essite installate con successo.'''",
@@ -8904,7 +9091,7 @@ Post facer isto, tu pote '''[$2 entrar in tu wiki]'''.",
 == Pro initiar ==
 * [//www.mediawiki.org/wiki/Manual:Configuration_settings Lista de configurationes]
 * [//www.mediawiki.org/wiki/Manual:FAQ FAQ a proposito de MediaWiki]
-* [https://lists.wikimedia.org/mailman/listinfo/mediawiki-announce Lista de diffusion pro annuncios de nove versiones de MediaWiki]',
+* [https://lists.wikimedia.org/mailman/listinfo/mediawiki-announce Lista de diffusion pro annuncios de nove versiones de MediaWiki]', # Fuzzy
 );
 
 /** Indonesian (Bahasa Indonesia)
@@ -8912,6 +9099,7 @@ Post facer isto, tu pote '''[$2 entrar in tu wiki]'''.",
  * @author IvanLanin
  * @author Kenrick95
  * @author Reedy
+ * @author 아라
  */
 $messages['id'] = array(
        'config-desc' => 'Penginstal untuk MediaWiki',
@@ -8919,19 +9107,19 @@ $messages['id'] = array(
        'config-information' => 'Informasi',
        'config-localsettings-upgrade' => 'Berkas <code>LocalSettings.php</code> sudah ada.
 Untuk memutakhirkan instalasi ini, masukkan nilai <code>$wgUpgradeKey</code> dalam kotak yang tersedia di bawah ini.
-Anda dapat menemukan nilai tersebut dalam LocalSettings.php.',
-       'config-localsettings-cli-upgrade' => 'Berkas LocalSettings.php terdeteksi.
-Untuk meningkatkan versi, harap jalankan update.php.',
+Anda dapat menemukan nilai tersebut dalam <code>LocalSettings.php</code>.',
+       'config-localsettings-cli-upgrade' => 'Berkas <code>LocalSettings.php</code> terdeteksi.
+Untuk meningkatkan versi, harap jalankan <code>update.php</code>.',
        'config-localsettings-key' => 'Kunci pemutakhiran:',
        'config-localsettings-badkey' => 'Kunci yang Anda berikan tidak benar',
        'config-upgrade-key-missing' => 'Suatu instalasi MediaWiki telah terdeteksi.
-Untuk memutakhirkan instalasi ini, silakan masukkan baris berikut di bagian bawah LocalSettings.php Anda:
+Untuk memutakhirkan instalasi ini, silakan masukkan baris berikut di bagian bawah <code>LocalSettings.php</code> Anda:
 
 $1',
-       'config-localsettings-incomplete' => 'LocalSettings.php yang ada tampaknya tidak lengkap.
+       'config-localsettings-incomplete' => '<code>LocalSettings.php</code> yang ada tampaknya tidak lengkap.
 Variabel $1 tidak diatur.
-Silakan ubah LocalSettings.php untuk mengatur variabel ini dan klik "Lanjutkan".',
-       'config-localsettings-connection-error' => 'Timbul galat saat menghubungkan ke basis data dengan menggunakan setelan yang ditentukan di LocalSettings.php atau AdminSettings.php. Harap perbaiki setelan ini dan coba lagi.
+Silakan ubah <code>LocalSettings.php</code> untuk mengatur variabel ini dan klik "{{int:Config-continue}}".',
+       'config-localsettings-connection-error' => 'Timbul galat saat menghubungkan ke basis data dengan menggunakan setelan yang ditentukan di <code>LocalSettings.php</code> atau <code>AdminSettings.php</code>. Harap perbaiki setelan ini dan coba lagi.
 
 $1',
        'config-session-error' => 'Kesalahan sesi mulai: $1',
@@ -9055,7 +9243,7 @@ Instalasi dibatalkan.',
        'config-using531' => 'MediaWiki tidak dapat dijalankan dengan PHP $1 karena bug yang melibatkan parameter referensi untuk <code>__call()</code> .
 Tingkatkan ke PHP 5.3.2 atau lebih baru, atau turunkan ke PHP versi 5.3.0 untuk menyelesaikan hal ini.
 Instalasi dibatalkan.',
-       'config-suhosin-max-value-length' => 'Suhosin terpasang dan membatasi panjang parameter GET sebesar $1 bita. Komponen ResourceLoader MediaWiki akan mengatasi batasan ini, tapi penanganannya akan menurunkan kinerja. Jika memungkinkan, Anda sebaiknya menetapkan nilai suhosin.get.max_value_length menjadi 1024 atau lebih tinggi dalam php.ini dan menyetel $wgResourceLoaderMaxQueryLength dengan nilai yang sama dalam LocalSettings.php.',
+       'config-suhosin-max-value-length' => 'Suhosin terpasang dan membatasi panjang parameter GET sebesar $1 bita. Komponen ResourceLoader MediaWiki akan mengatasi batasan ini, tapi penanganannya akan menurunkan kinerja. Jika memungkinkan, Anda sebaiknya menetapkan nilai <code>suhosin.get.max_value_length</code> menjadi 1024 atau lebih tinggi dalam <code>php.ini</code> dan menyetel <code>$wgResourceLoaderMaxQueryLength</code> dengan nilai yang sama dalam LocalSettings.php.', # Fuzzy
        'config-db-type' => 'Jenis basis data:',
        'config-db-host' => 'Inang basis data:',
        'config-db-host-help' => 'Jika server basis data Anda berada di server yang berbeda, masukkan nama inang atau alamat IP di sini.
@@ -9137,7 +9325,7 @@ Jika Anda tidak melihat sistem basis data yang Anda gunakan tercantum di bawah i
        'config-support-postgres' => '* $1 adalah sistem basis data sumber terbuka populer sebagai alternatif untuk MySQL ([http://www.php.net/manual/en/pgsql.installation.php cara mengompilasi PHP dengan dukungan PostgreSQL]). Mungkin ada beberapa bug terbuka dan alternatif ini tidak direkomendasikan untuk dipakai dalam lingkungan produksi.',
        'config-support-sqlite' => '* $1 adalah sistem basis data yang ringan yang sangat baik dukungannya. ([http://www.php.net/manual/en/pdo.installation.php cara mengompilasi PHP dengan dukungan SQLite], menggunakan PDO)',
        'config-support-oracle' => '* $1 adalah basis data komersial untuka perusahaan. ([http://www.php.net/manual/en/oci8.installation.php cara mengompilasi PHP dengan dukungan OCI8])',
-       'config-support-ibm_db2' => '* $1 adalah basis data-perusahaan komersial.',
+       'config-support-ibm_db2' => '* $1 adalah basis data-perusahaan komersial.', # Fuzzy
        'config-header-mysql' => 'Pengaturan MySQL',
        'config-header-postgres' => 'Pengaturan PostgreSQL',
        'config-header-sqlite' => 'Pengaturan SQLite',
@@ -9204,8 +9392,8 @@ Tindakan ini '''tidak dianjurkan''' kecuali jika Anda mengalami masalah dengan w
        'config-upgrade-done-no-regenerate' => 'Pemutakhiran selesai.
 
 Anda sekarang dapat [$1 mulai menggunakan wiki Anda].',
-       'config-regenerate' => 'Regenerasi LocalSettings.php →',
-       'config-show-table-status' => 'Kueri SHOW TABLE STATUS gagal!',
+       'config-regenerate' => 'Regenerasi <code>LocalSettings.php</code> →',
+       'config-show-table-status' => 'Kueri <code>SHOW TABLE STATUS</code> gagal!',
        'config-unknown-collation' => "'''Peringatan:''' basis data menggunakan kolasi yang tidak dikenal.",
        'config-db-web-account' => 'Akun basis data untuk akses web',
        'config-db-web-help' => 'Masukkan nama pengguna dan sandi yang akan digunakan server web untuk terhubung ke server basis data saat operasi normal wiki.',
@@ -9268,7 +9456,7 @@ Anda sekarang dapat melewati sisa konfigurasi dan menginstal wiki sekarang.',
        'config-optional-continue' => 'Berikan saya pertanyaan lagi.',
        'config-optional-skip' => 'Saya sudah bosan, instal saja wikinya.',
        'config-profile' => 'Profil hak pengguna:',
-       'config-profile-wiki' => 'Wiki tradisional',
+       'config-profile-wiki' => 'Wiki tradisional', # Fuzzy
        'config-profile-no-anon' => 'Pembuatan akun diperlukan',
        'config-profile-fishbowl' => 'Khusus penyunting terdaftar',
        'config-profile-private' => 'Wiki pribadi',
@@ -9282,7 +9470,7 @@ Namun, berbagai kegunaan lain dari MediaWiki telah ditemukan, dan kadang tidak m
 '''{{int:config-profile-fishbowl}}''' memungkinkan pengguna yang disetujui untuk menyunting, tetapi publik dapat melihat halaman, termasuk riwayatnya.
 '''{{int:config-profile-private}}''' hanya memungkinkan pengguna yang disetujui untuk melihat dan menyunting halaman.
 
-Konfigurasi hak pengguna yang lebih kompleks tersedia setelah instalasi. Lihat [//www.mediawiki.org/wiki/Manual:User_rights/id entri manual terkait].",
+Konfigurasi hak pengguna yang lebih kompleks tersedia setelah instalasi. Lihat [//www.mediawiki.org/wiki/Manual:User_rights/id entri manual terkait].", # Fuzzy
        'config-license' => 'Hak cipta dan lisensi:',
        'config-license-none' => 'Tidak ada lisensi',
        'config-license-cc-by-sa' => 'Creative Commons Atribusi Berbagi Serupa',
@@ -9367,7 +9555,7 @@ Ekstensi tersebut mungkin memerlukan konfigurasi tambahan, tetapi Anda dapat men
        'config-install-alreadydone' => "'''Peringatan:''' Anda tampaknya telah menginstal MediaWiki dan mencoba untuk menginstalnya lagi.
 Lanjutkan ke halaman berikutnya.",
        'config-install-begin' => 'Dengan menekan "{{int:config-continue}}", Anda akan memulai instalasi MediaWiki.
-Jika Anda masih ingin membuat perubahan, tekan "{{int:config-back}}".',
+Jika Anda masih ingin membuat perubahan, tekan "{{int:config-back}}".', # Fuzzy
        'config-install-step-done' => 'selesai',
        'config-install-step-failed' => 'gagal',
        'config-install-extensions' => 'Termasuk ekstensi',
@@ -9395,7 +9583,8 @@ Mengabaikan daftar bawaan.",
        'config-install-keys' => 'Membuat kunci rahasia',
        'config-insecure-keys' => "'''Peringatan:''' {{PLURAL:$2|Suatu|Beberapa}} kunci aman ($1) yang dibuat selama instalasi {{PLURAL:$2|tidak|tidak}} benar-benar aman. Pertimbangkan untuk mengubah {{PLURAL:$2|kunci|kunci-kunci}} tersebut secara manual.",
        'config-install-sysop' => 'Membuat akun pengguna pengurus',
-       'config-install-subscribe-fail' => 'Tidak dapat berlangganan mediawiki-announce', # Fuzzy
+       'config-install-subscribe-fail' => 'Tidak dapat berlangganan mediawiki-announce: $1',
+       'config-install-subscribe-notpossible' => 'cURL tidak diinstal dan allow_url_fopen tidak tersedia.',
        'config-install-mainpage' => 'Membuat halaman utama dengan konten bawaan',
        'config-install-extension-tables' => 'Pembuatan tabel untuk ekstensi yang diaktifkan',
        'config-install-mainpage-failed' => 'Tidak dapat membuat halaman utama: $1',
@@ -9414,16 +9603,17 @@ $3
 '''Catatan''': Jika Anda tidak melakukannya sekarang, berkas konfigurasi yang dihasilkan ini tidak akan tersedia lagi setelah Anda keluar dari proses instalasi tanpa mengunduhnya.
 
 Setelah melakukannya, Anda dapat '''[$2 memasuki wiki Anda]'''.",
-       'config-download-localsettings' => 'Unduh LocalSettings.php',
+       'config-download-localsettings' => 'Unduh <code>LocalSettings.php</code>',
        'config-help' => 'bantuan',
+       'config-nofile' => 'Berkas "$1" tidak dapat ditemukan. Mungkin sudah dihapus?',
        'mainpagetext' => "'''MediaWiki telah terpasang dengan sukses'''.",
        'mainpagedocfooter' => 'Silakan baca [//www.mediawiki.org/wiki/Help:Contents/id Panduan Pengguna] untuk cara penggunaan perangkat lunak wiki ini.
 
 == Memulai penggunaan ==
-
 * [//www.mediawiki.org/wiki/Manual:Configuration_settings/id Daftar pengaturan konfigurasi]
 * [//www.mediawiki.org/wiki/Manual:FAQ/id Daftar pertanyaan yang sering diajukan mengenai MediaWiki]
-* [https://lists.wikimedia.org/mailman/listinfo/mediawiki-announce Milis rilis MediaWiki]',
+* [https://lists.wikimedia.org/mailman/listinfo/mediawiki-announce Milis rilis MediaWiki]
+* [//www.mediawiki.org/wiki/Localisation#Translation_resources Terjemahkan MediaWiki ke bahasa Anda]',
 );
 
 /** Interlingue (Interlingue)
@@ -9436,6 +9626,12 @@ $messages['ie'] = array(
  * @author Ukabia
  */
 $messages['ig'] = array(
+       'config-back' => '← Laàzú',
+       'config-continue' => 'Gawazie →',
+       'config-page-language' => 'Ásụ̀sụ̀',
+       'config-page-name' => 'Áhà',
+       'config-page-install' => 'Sụ̀ímé',
+       'config-restart' => 'Eeh, bìdówárí ya.',
        'config-admin-password' => 'Okwúngáfè:',
        'config-admin-password-confirm' => 'Okwúngáfè mgbe ozor:',
        'mainpagetext' => "'''MediaWiki a banyélé nke oma.'''",
@@ -9444,7 +9640,7 @@ $messages['ig'] = array(
 == I bídó ==
 * [//www.mediawiki.org/wiki/Manual:Configuration_settings Ndétu ndósé ihe]
 * [//www.mediawiki.org/wiki/Manual:FAQ FAQ MediaWiki]
-* [https://lists.wikimedia.org/mailman/listinfo/mediawiki-announce wéfù ndétu nke ozi MediaWiki]",
+* [https://lists.wikimedia.org/mailman/listinfo/mediawiki-announce wéfù ndétu nke ozi MediaWiki]", # Fuzzy
 );
 
 /** Iloko (Ilokano)
@@ -9485,6 +9681,7 @@ $messages['is'] = array(
  * @author F. Cosoleto
  * @author Gianfranco
  * @author Karika
+ * @author 아라
  */
 $messages['it'] = array(
        'config-desc' => 'Il programma di installazione per MediaWiki',
@@ -9492,19 +9689,19 @@ $messages['it'] = array(
        'config-information' => 'Informazioni',
        'config-localsettings-upgrade' => 'È stato rilevato un file <code>LocalSettings.php</code>.
 Per aggiornare questa installazione, si prega di inserire il valore di <code>$wgUpgradeKey</code> nella casella qui sotto.
-Lo potete trovare in LocalSettings.php.',
-       'config-localsettings-cli-upgrade' => 'È stato rilevato un file LocalSettings.php.
-Per aggiornare questa installazione, eseguire update.php',
+Lo potete trovare in <code>LocalSettings.php</code>.',
+       'config-localsettings-cli-upgrade' => 'È stato rilevato un file <code>LocalSettings.php</code>.
+Per aggiornare questa installazione, eseguire <code>update.php</code>',
        'config-localsettings-key' => 'Chiave di aggiornamento:',
        'config-localsettings-badkey' => 'La chiave che hai fornito non è corretta.',
        'config-upgrade-key-missing' => "È stata rilevata un'installazione esistente di MediaWiki.
-Per aggiornare questa installazione, si prega di inserire la seguente riga nella parte inferiore del tuo LocalSettings.php:
+Per aggiornare questa installazione, si prega di inserire la seguente riga nella parte inferiore del tuo <code>LocalSettings.php</code>:
 
 $1",
-       'config-localsettings-incomplete' => 'Il file LocalSettings.php esistente sembra essere incompleto.
+       'config-localsettings-incomplete' => 'Il file <code>LocalSettings.php</code> esistente sembra essere incompleto.
 La variabile $1 non è impostata.
-Cambia LocalSettings.php in modo che questa variabile sia impostata e fai clic su "Continua".',
-       'config-localsettings-connection-error' => 'Si è verificato un errore durante la connessione al database utilizzando le impostazioni specificate in LocalSettings.php o AdminSettings.php. Si prega di correggere queste impostazioni e riprovare.
+Cambia <code>LocalSettings.php</code> in modo che questa variabile sia impostata e fai clic su "{{int:Config-continue}}".',
+       'config-localsettings-connection-error' => 'Si è verificato un errore durante la connessione al database utilizzando le impostazioni specificate in <code>LocalSettings.php</code> o <code>AdminSettings.php</code>. Si prega di correggere queste impostazioni e riprovare.
 
 $1',
        'config-session-error' => "Errore nell'avvio della sessione: $1",
@@ -9539,6 +9736,15 @@ Controlla il tuo file php.ini ed assicurati che <code>session.save_path</code> 
        'config-welcome' => "=== Controllo dell'ambiente ===
 Vengono eseguiti controlli di base per vedere se questo ambiente è adatto per l'installazione di MediaWiki.
 Se hai bisogno di aiuto durante l'installazione, è necessario fornire i risultati di questi controlli.",
+       'config-sidebar' => '* [//www.mediawiki.org Pagina principale MediaWiki]
+* [//www.mediawiki.org/wiki/Aiuto:Guida ai contenuti per utenti]
+* [//www.mediawiki.org/wiki/Manuale:Guida ai contenuti per admin]
+* [//www.mediawiki.org/wiki/Manuale:FAQ FAQ]
+----
+* <doclink href=Readme>Leggimi</doclink>
+* <doclink href=ReleaseNotes>Note di versione</doclink>
+* <doclink href=Copying>Copie</doclink>
+* <doclink href=UpgradeDoc>Aggiornamenti</doclink>',
        'config-env-good' => "L'ambiente è stato controllato.
 È possibile installare MediaWiki.",
        'config-env-bad' => "L'ambiente è stato controllato.
@@ -9602,6 +9808,7 @@ Da cambiare solamente se si è sicuri di averne bisogno.',
        'config-header-oracle' => 'Impostazioni Oracle',
        'config-header-ibm_db2' => 'Impostazioni IBM DB2',
        'config-invalid-db-type' => 'Tipo di database non valido',
+       'config-missing-db-name' => 'È necessario immettere un valore per "Nome del database"',
        'config-db-web-account' => "Account del database per l'accesso web",
        'config-db-web-create' => "Crea l'account se non esiste già",
        'config-mysql-engine' => 'Storage engine:',
@@ -9635,7 +9842,7 @@ Inserire un indirizzo email se si desidera effettuare l'iscrizione alla mailing
        'config-almost-done' => 'Hai quasi finito!
 Adesso puoi saltare la rimanente parte della configurazione e semplicemente installare la wiki.',
        'config-optional-continue' => 'Fammi altre domande.',
-       'config-profile-wiki' => 'Wiki tradizionale',
+       'config-profile-wiki' => 'Wiki tradizionale', # Fuzzy
        'config-profile-no-anon' => 'Creazione utenza obbligatoria',
        'config-profile-fishbowl' => 'Solo editori autorizzati',
        'config-profile-private' => 'Wiki privata',
@@ -9683,7 +9890,7 @@ In precedenza Wikipedia ha utilizzato la GNU Free Documentation License. La GFDL
        'config-install-subscribe-notpossible' => 'cURL non è installato e allow_url_fopen non è disponibile.',
        'config-install-mainpage' => 'Creazione della pagina principale con contenuto predefinito',
        'config-install-mainpage-failed' => 'Impossibile inserire la pagina principale: $1',
-       'config-download-localsettings' => 'Scarica LocalSettings.php',
+       'config-download-localsettings' => 'Scarica <code>LocalSettings.php</code>',
        'config-help' => 'aiuto',
        'config-nofile' => 'Il file "$1" non può essere trovato. È stato eliminato?',
        'mainpagetext' => "'''Installazione di MediaWiki completata correttamente.'''",
@@ -9694,7 +9901,8 @@ I seguenti collegamenti sono in lingua inglese:
 
 * [//www.mediawiki.org/wiki/Manual:Configuration_settings Impostazioni di configurazione]
 * [//www.mediawiki.org/wiki/Manual:FAQ Domande frequenti su MediaWiki]
-* [https://lists.wikimedia.org/mailman/listinfo/mediawiki-announce Mailing list annunci MediaWiki]",
+* [https://lists.wikimedia.org/mailman/listinfo/mediawiki-announce Mailing list annunci MediaWiki]
+* [//www.mediawiki.org/wiki/Localisation#Translation_resources Localizza MediaWiki nella tua lingua]",
 );
 
 /** Japanese (日本語)
@@ -9714,25 +9922,29 @@ $messages['ja'] = array(
        'config-information' => '情報',
        'config-localsettings-upgrade' => 'ファイル <code>LocalSettings.php</code> を検出しました。
 インストールされているものをアップグレードするには、<code>$wgUpgradeKey</code> の値を以下の欄に入力してください。
-この値は LocalSettings.php 内にあります。',
-       'config-localsettings-cli-upgrade' => 'ファイル LocalSettings.php を検出しました。
-インストールされているものをアップグレードするには、update.php を実行してください',
+この値は <code>LocalSettings.php</code> 内にあります。',
+       'config-localsettings-cli-upgrade' => 'ファイル <code>LocalSettings.php</code> を検出しました。
+インストールされているものをアップグレードするには、<code>update.php</code> を実行してください',
        'config-localsettings-key' => 'アップグレード キー:',
        'config-localsettings-badkey' => '与えられたキーが間違っています',
        'config-upgrade-key-missing' => 'MediaWiki が既にインストールされていることを検出しました。
-インストールされているものをアップグレードするために、以下の行を LocalSettings.php の末尾に挿入してください:
+インストールされているものをアップグレードするために、以下の行を <code>LocalSettings.php</code> の末尾に挿入してください:
 
 $1',
-       'config-localsettings-incomplete' => '既存の LocalSettings.php の内容は不完全のようです。
+       'config-localsettings-incomplete' => '既存の <code>LocalSettings.php</code> の内容は不完全のようです。
 変数 $1 が設定されていません。
-LocalSettings.php 内でこの変数を設定して、「{{int:Config-continue}}」をクリックしてください。',
+<code>LocalSettings.php</code> 内でこの変数を設定して、「{{int:Config-continue}}」をクリックしてください。',
+       'config-localsettings-connection-error' => '<code>LocalSettings.php</code> または <code>AdminSettings.php</code> で指定した設定を使用してデータベースに接続する際にエラーが発生しました。
+設定を修正してから再度試してください。
+
+$1',
        'config-session-error' => 'セッションの開始エラー: $1',
        'config-session-expired' => 'セッションの有効期限が切れたようです。
 セッションの有効期間は$1に設定されています。
 php.iniの<code>session.gc_maxlifetime</code>を設定することで、この問題を改善できます。
 インストール作業を再起動させてください。',
-       'config-no-session' => 'セッションのデータが消失しました
-php.iniを確認し、<code>session.save_path</code>が適切なディレクトリに設定されていることを確認してください。',
+       'config-no-session' => 'セッションのデータが消失しました!
+php.ini 内で <code>session.save_path</code> が適切なディレクトリに設定されていることを確認してください。',
        'config-your-language' => 'あなたの言語:',
        'config-your-language-help' => 'インストール作業に使用する言語を選択してください。',
        'config-wiki-language' => 'ウィキの言語:',
@@ -9754,7 +9966,7 @@ php.iniを確認し、<code>session.save_path</code>が適切なディレクト
        'config-page-copying' => 'コピー',
        'config-page-upgradedoc' => 'アップグレード',
        'config-page-existingwiki' => '既存のウィキ',
-       'config-help-restart' => '入力した保存データをすべて消去して、インストール作業を再起動しますか',
+       'config-help-restart' => '入力した保存データをすべて消去して、インストール作業を再起動しますか?',
        'config-restart' => 'はい、再起動します',
        'config-welcome' => '=== 環境の確認 ===
 基本的な確認では、現在の環境がMediaWikiのインストールに適しているかを確認します。
@@ -9788,32 +10000,32 @@ MediaWikiのインストールはできません。',
        'config-unicode-using-intl' => 'Unicode正規化に[http://pecl.php.net/intl intl PECL 拡張機能]を使用。',
        'config-unicode-pure-php-warning' => "'''警告''': Unicode 正規化の処理に [http://pecl.php.net/intl intl PECL 拡張機能]を利用できないため、処理が遅いピュア PHP の実装を代わりに使用しています。
 高トラフィックのサイトを運営する場合は、[//www.mediawiki.org/wiki/Unicode_normalization_considerations Unicode 正規化]をお読みください。",
-       'config-unicode-update-warning' => "'''警告''':インストールされているバージョンのUnicode正規化ラッパーは、[http://site.icu-project.org/ ICUプロジェクト]のライブラリの古いバージョンを使用しています。
-Unicodeを少しでも利用する可能性があるなら、[//www.mediawiki.org/wiki/Unicode_normalization_considerations アップグレード]する必要があります。",
+       'config-unicode-update-warning' => "'''警告''': インストールされているバージョンの Unicode 正規化ラッパーは、[http://site.icu-project.org/ ICU プロジェクト]のライブラリの古いバージョンを使用しています。
+Unicode を少しでも利用する可能性がある場合は、[//www.mediawiki.org/wiki/Unicode_normalization_considerations アップグレード]してください。",
        'config-no-db' => '適切なデータベース ドライバーが見つかりませんでした! PHP にデータベース ドライバーをインストールする必要があります。
 以下の種類のデータベースに対応しています: $1
 
 共有サーバーを使用している場合は、適切なデータベース ドライバーのインストールを、サーバーの管理者に依頼してください。
 PHP を自分でコンパイルした場合は、例えば <code>./configure --with-mysql</code> を実行して、データベース クライアントを使用できるように再設定してください。
 Debian または Ubuntu のパッケージから PHP をインストールした場合は、php5-mysql モジュールもインストールする必要があります。',
-       'config-no-fts3' => "'''警告''':SQLiteは[//sqlite.org/fts3.html FTS3]モジュールなしでコンパイルされており、検索機能はこのバックエンドで利用不可能になります。",
-       'config-register-globals' => "'''警告:PHPの<code>[http://php.net/register_globals register_globals]</code>オプションが有効になっています。'''
+       'config-no-fts3' => "'''警告''': SQLite は [//sqlite.org/fts3.html FTS3] モジュールなしでコンパイルされており、このバックエンドでは検索機能は利用できなくなります。",
+       'config-register-globals' => "'''警告: PHP の <code>[http://php.net/register_globals register_globals]</code> オプションが有効になっています。'''
 '''可能なら無効化してください。'''
-MediaWikiは動作しますが、サーバーは、潜在的なセキュリティ脆弱性を露呈します。",
-       'config-magic-quotes-runtime' => "'''致命的エラー:[http://www.php.net/manual/en/ref.info.php#ini.magic-quotes-runtime magic_quotes_runtime]が動作しています!'''
+MediaWiki は動作しますが、サーバーの潜在的なセキュリティ脆弱性が露呈されます。",
+       'config-magic-quotes-runtime' => "'''致命的エラー: [http://www.php.net/manual/en/ref.info.php#ini.magic-quotes-runtime magic_quotes_runtime] が動作しています!'''
 このオプションは、予期せずデータ入力を破壊します。
\81\93ã\81®ã\82ªã\83\97ã\82·ã\83§ã\83³ã\81\8cç\84¡å\8a¹å\8c\96ã\81\95ã\82\8cã\81ªã\81\84ã\81\8bã\81\8eã\82\8aã\80\81MediaWikiã\82\92ã\82¤ã\83³ã\82¹ã\83\88ã\83¼ã\83«ã\81\97å\88©ç\94¨ã\81\99ã\82\8bã\81\93ã\81¨ã\81¯ã\81§ã\81\8dã\81¾ã\81\9bã\82\93ã\80\82",
-       'config-magic-quotes-sybase' => "'''致命的エラー:[http://www.php.net/manual/en/ref.info.php#ini.magic-quotes-sybase magic_quotes_sybase]が動作しています!'''
\81\93ã\81®ã\82ªã\83\97ã\82·ã\83§ã\83³ã\82\92ç\84¡å\8a¹å\8c\96ã\81\97ã\81ªã\81\84é\99\90ã\82\8aã\80\81MediaWiki ã\81®ã\82¤ã\83³ã\82¹ã\83\88ã\83¼ã\83«ã\82\84使ç\94¨ã\81¯ã\81§ã\81\8dã\81¾ã\81\9bã\82\93ã\80\82",
+       'config-magic-quotes-sybase' => "'''致命的エラー: [http://www.php.net/manual/en/ref.info.php#ini.magic-quotes-sybase magic_quotes_sybase] が動作しています!'''
 このオプションは、予期せずデータ入力を破壊します。
\81\93ã\81®ã\82ªã\83\97ã\82·ã\83§ã\83³ã\81\8cç\84¡å\8a¹å\8c\96ã\81\95ã\82\8cã\81ªã\81\84ã\81\8bã\81\8eã\82\8aã\80\81MediaWikiã\82\92ã\82¤ã\83³ã\82¹ã\83\88ã\83¼ã\83«ã\81\97å\88©ç\94¨ã\81\99ã\82\8bã\81\93ã\81¨ã\81¯ã\81§ã\81\8dã\81¾ã\81\9bã\82\93ã\80\82",
-       'config-mbstring' => "'''致命的エラー:[http://www.php.net/manual/en/ref.mbstring.php#mbstring.overload mbstring.func_overload]が動作しています!'''
-このオプションは、エラーを引き起こし、予期せずデータ入力を破壊する可能性があります。
\81\93ã\81®ã\82ªã\83\97ã\82·ã\83§ã\83³ã\81\8cç\84¡å\8a¹å\8c\96ã\81\95ã\82\8cã\81ªã\81\84ã\81\8bã\81\8eã\82\8aã\80\81MediaWikiã\82\92ã\82¤ã\83³ã\82¹ã\83\88ã\83¼ã\83«ã\81\97å\88©ç\94¨ã\81\99ã\82\8bã\81\93ã\81¨ã\81¯ã\81§ã\81\8dã\81¾ã\81\9bã\82\93ã\80\82",
-       'config-ze1' => "'''致命的エラー:[http://www.php.net/manual/en/ini.core.php zend.ze1_compatibility_mode]が動作しています!'''
-このオプションは、MediaWikiにおいて深刻なバグを引き起こします。
\81\93ã\81®ã\82ªã\83\97ã\82·ã\83§ã\83³ã\81\8cç\84¡å\8a¹å\8c\96ã\81\95ã\82\8cã\81ªã\81\84ã\81\8bã\81\8eã\82\8aã\80\81MediaWikiã\82\92ã\82¤ã\83³ã\82¹ã\83\88ã\83¼ã\83«ã\81\97å\88©ç\94¨ã\81\99ã\82\8bã\81\93ã\81¨ã\81¯ã\81§ã\81\8dã\81¾ã\81\9bã\82\93ã\80\82",
-       'config-safe-mode' => "'''警告:'''PHPの[http://www.php.net/features.safe-mode セーフモード]が有効です。
\89¹ã\81«ã\83\95ã\82¡ã\82¤ã\83«ã\81®ã\82¢ã\83\83ã\83\97ã\83­ã\83¼ã\83\89<code>math</code>ã\81®ã\82µã\83\9dã\83¼ã\83\88ã\81«ã\81\8aã\81\84ã\81¦ã\80\81å\95\8fé¡\8cã\81\8cç\99ºç\94\9fã\81\99ã\82\8bå\8f¯è\83½æ\80§があります。",
\81\93ã\81®ã\82ªã\83\97ã\82·ã\83§ã\83³ã\82\92ç\84¡å\8a¹å\8c\96ã\81\97ã\81ªã\81\84é\99\90ã\82\8aã\80\81MediaWiki ã\81®ã\82¤ã\83³ã\82¹ã\83\88ã\83¼ã\83«ã\82\84使ç\94¨ã\81¯ã\81§ã\81\8dã\81¾ã\81\9bã\82\93ã\80\82",
+       'config-mbstring' => "'''致命的エラー: [http://www.php.net/manual/en/ref.mbstring.php#mbstring.overload mbstring.func_overload] が動作しています!'''
+このオプションは、エラーを引き起こし、予期せずデータを破壊するおそれがあります。
\81\93ã\81®ã\82ªã\83\97ã\82·ã\83§ã\83³ã\82\92ç\84¡å\8a¹å\8c\96ã\81\97ã\81ªã\81\84é\99\90ã\82\8aã\80\81MediaWiki ã\81®ã\82¤ã\83³ã\82¹ã\83\88ã\83¼ã\83«ã\82\84使ç\94¨ã\81¯ã\81§ã\81\8dã\81¾ã\81\9bã\82\93ã\80\82",
+       'config-ze1' => "'''致命的エラー: [http://www.php.net/manual/en/ini.core.php zend.ze1_compatibility_mode] が動作しています!'''
+このオプションは、MediaWiki において深刻なバグを引き起こします。
\81\93ã\81®ã\82ªã\83\97ã\82·ã\83§ã\83³ã\82\92ç\84¡å\8a¹å\8c\96ã\81\97ã\81ªã\81\84é\99\90ã\82\8aã\80\81MediaWiki ã\81®ã\82¤ã\83³ã\82¹ã\83\88ã\83¼ã\83«ã\82\84使ç\94¨ã\81¯ã\81§ã\81\8dã\81¾ã\81\9bã\82\93ã\80\82",
+       'config-safe-mode' => "'''警告:''' PHPの[http://www.php.net/features.safe-mode セーフモード]が有効になっています。
\89¹ã\81«ã\80\81ã\83\95ã\82¡ã\82¤ã\83«ã\81®ã\82¢ã\83\83ã\83\97ã\83­ã\83¼ã\83\89ã\82\84<code>math</code>æ©\9fè\83½ã\81§ã\80\81å\95\8fé¡\8cã\81\8cç\99ºç\94\9fã\81\99ã\82\8bã\81\8aã\81\9dã\82\8cがあります。",
        'config-xml-bad' => 'PHPのXMLモジュールが不足しています。
 MediaWikiは、このモジュールの関数を必要としているため、この構成では動作しません。
 Mandrakeを実行している場合、php-xmlパッケージをインストールしてください。',
@@ -9822,13 +10034,13 @@ MediaWikiは、Perl互換の正規表現関数の動作が必要です。',
        'config-pcre-no-utf8' => "'''致命的エラー''': PHP の PCRE が PCRE_UTF8 対応なしでコンパイルされているようです。
 MediaWiki を正しく動作させるには、UTF-8 対応が必要です。",
        'config-memory-raised' => 'PHPの<code>memory_limit</code>は$1で、$2に引き上げられました。',
-       'config-memory-bad' => "'''警告:'''PHPの<code>memory_limit</code>は$1です。
\81\93ã\82\8cã\81¯ã\80\81é\9d\9e常ã\81«é\81\85ã\81\84å\8f¯è\83½æ\80§ã\81\8cã\81\82ã\82\8aます。
\82¤ã\83³ã\82¹ã\83\88ã\83¼ã\83«ã\81\8c失æ\95\97ã\81\99ã\82\8bã\81\8bã\82\82ã\81\97ã\82\8cã\81¾ã\81\9bã\82\93ï¼\81",
+       'config-memory-bad' => "'''警告:''' PHPの<code>memory_limit</code>に$1に設定されています。
\81\93ã\81®å\80¤ã\81¯ã\81\8aã\81\9dã\82\89ã\81\8få°\8fã\81\95ã\81\99ã\81\8eます。
\82¤ã\83³ã\82¹ã\83\88ã\83¼ã\83«ã\81\8c失æ\95\97ã\81\99ã\82\8bã\81\8aã\81\9dã\82\8cã\81\8cã\81\82ã\82\8aã\81¾ã\81\99!",
        'config-xcache' => '[http://xcache.lighttpd.net/ XCache] がインストール済み',
        'config-apc' => '[http://www.php.net/apc APC] がインストール済み',
        'config-wincache' => '[http://www.iis.net/download/WinCacheForPhp WinCache] がインストール済み',
-       'config-no-cache' => "'''警告:'''[http://www.php.net/apc APC]、[http://xcache.lighttpd.net/ XCache]、[http://www.iis.net/download/WinCacheForPhp WinCache] のいずれも見つかりませんでした。
+       'config-no-cache' => "'''警告:''' [http://www.php.net/apc APC]、[http://xcache.lighttpd.net/ XCache]、[http://www.iis.net/download/WinCacheForPhp WinCache] のいずれも見つかりませんでした。
 オブジェクトのキャッシュは有効化されません。",
        'config-diff3-bad' => 'GNU diff3 が見つかりません。',
        'config-imagemagick' => 'ImageMagickが見つかりました:<code>$1</code>。
@@ -9837,11 +10049,12 @@ MediaWiki を正しく動作させるには、UTF-8 対応が必要です。",
 アップロードが有効なら、画像のサムネイルが利用できます。',
        'config-no-scaling' => 'GDライブラリもImageMagickも見つかりませんでした。
 画像のサムネイル生成は無効になります。',
-       'config-no-uri' => "'''エラー:'''現在のURIを決定できませんでした。
+       'config-no-uri' => "'''エラー:''' 現在のURIを決定できませんでした。
 インストールは中止されました。",
+       'config-no-cli-uri' => "'''警告''': --scriptpath が指定されていないため、既定値 <code>$1</code> を使用します。",
        'config-using-server' => 'サーバー名「<nowiki>$1</nowiki>」を使用しています。',
        'config-using-uri' => 'サーバー URL「<nowiki>$1$2</nowiki>」を使用しています。',
-       'config-uploads-not-safe' => "'''警告:'''アップロードの既定ディレクトリ <code>$1</code> に、任意のスクリプト実行に関する脆弱性があります。
+       'config-uploads-not-safe' => "'''警告:''' アップロードの既定ディレクトリ <code>$1</code> に、任意のスクリプト実行に関する脆弱性があります。
 MediaWiki はアップロードされたファイルのセキュリティ上の脅威を確認しますが、アップロードを有効化する前に、[//www.mediawiki.org/wiki/Manual:Security#Upload_security このセキュリティ上の脆弱性を解決する]ことを強く推奨します。",
        'config-brokenlibxml' => 'このシステムで使われているPHPとlibxml2のバージョンのこの組み合わせにはバグがあります。具体的には、MediaWikiやその他のウェブアプリケーションでhiddenデータが破損する可能性があります。
 PHPを5.2.9かそれ以降のバージョンに、libxml2を2.7.3かそれ以降のバージョンにアップグレードしてください([//bugs.php.net/bug.php?id=45996 PHPでのバグ情報])。
@@ -9849,7 +10062,9 @@ PHPを5.2.9かそれ以降のバージョンに、libxml2を2.7.3かそれ以降
        'config-using531' => 'PHP$1は<code>__call()</code>の引数参照に関するバグのため、MediaWikiと互換性がありません。
 PHP5.3.2以降に更新するか、この([//bugs.php.net/bug.php?id=50394 PHPに提出されたバグ])を修正するためにPHP5.3.0へ戻してください。
 インストールは中止されました。',
-       'config-suhosin-max-value-length' => 'Suhosin がインストールされており、GETパラメータの長さを $1 バイトに制限しています。MediaWiki の ResourceLoader コンポーネントはこの制限を回避しますが、パフォーマンスは低下します。可能な限り、php.ini で suhosin.get.max_value_length を 1024 以上に設定し、同じ値を LocalSettings.php 中で $wgResourceLoaderMaxQueryLength に設定してください。',
+       'config-suhosin-max-value-length' => 'Suhosin がインストールされており、GET パラメーターの <code>length</code> を $1 バイトに制限しています。
+MediaWiki の ResourceLoader コンポーネントはこの制限を回避しますが、パフォーマンスは低下します。
+可能な限り、<code>php.ini</code> で <code>suhosin.get.max_value_length</code> を 1024 以上に設定し、同じ値を <code>LocalSettings.php</code> 内で <code>$wgResourceLoaderMaxQueryLength</code> に設定してください。',
        'config-db-type' => 'データベースの種類:',
        'config-db-host' => 'データベースのホスト:',
        'config-db-host-help' => '異なるサーバー上にデータベースサーバーがある場合、ホスト名またはIPアドレスをここに入力してください。
@@ -9872,9 +10087,11 @@ PostgreSQLを使用している場合、UNIXソケットで接続するにはこ
        'config-db-username' => 'データベースのユーザー名:',
        'config-db-password' => 'データベースのパスワード:',
        'config-db-password-empty' => '新しいデータベースの利用者名 $1 のパスワードを入力してください。
-パスワードを設定しないでユーザを作ることもできるかもしれませんが、安全ではありません。',
-       'config-db-install-username' => 'インストール中にデータベースに接続するために使うユーザ名を入力してください。これは MediaWiki アカウントのユーザ名 (利用者名) のことではありません。あなたのデータベースでのユーザ名です。',
-       'config-db-install-password' => 'インストール中にデータベースに接続するために使うパスワードを入力してください。これは MediaWiki アカウントパスワードのことではありません。あなたのデータベースでのパスワードです。',
+パスワードを設定せずにユーザーを作成できる場合もありますが、安全ではありません。',
+       'config-db-install-username' => 'インストール中にデータベースへの接続で使用するユーザー名を入力してください。
+これは MediaWiki アカウントの利用者名のことではありません。あなたのデータベースでのユーザー名です。',
+       'config-db-install-password' => 'インストール中にデータベースへの接続で使用するパスワードを入力してください。
+これは MediaWiki アカウントのパスワードのことではありません。あなたのデータベースでのパスワードです。',
        'config-db-install-help' => 'インストール作業中にデータベースに接続するための利用者名とパスワードを入力してください。',
        'config-db-account-lock' => 'インストール作業終了後も同じ利用者名とパスワードを使用する',
        'config-db-wiki-account' => 'インストール作業終了後の利用者アカウント',
@@ -9900,6 +10117,7 @@ PostgreSQLを使用している場合、UNIXソケットで接続するにはこ
        'config-db-schema' => 'MediaWiki のスキーマ:',
        'config-db-schema-help' => '通常はこのスキーマで問題ありません。
 必要な場合のみ変更してください。',
+       'config-pg-test-error' => "データベース '''$1''' に接続できません: $2",
        'config-sqlite-dir' => 'SQLite データ ディレクトリ:',
        'config-sqlite-dir-help' => "SQLite は単一のファイル内にすべてのデータを格納しています。
 
@@ -9923,11 +10141,11 @@ PostgreSQLを使用している場合、UNIXソケットで接続するにはこ
 $1
 
 使用しようとしているデータベース システムが下記の一覧にない場合は、上記リンク先の手順に従ってインストールしてください。',
-       'config-support-mysql' => '* $1ã\81¯MediaWikiã\81®ä¸»è¦\81ã\81ªå¯¾è±¡ã\81§ã\80\81ã\82\82ã\81£ã\81¨ã\82\82ã\82µã\83\9dã\83¼ã\83\88ã\81\95ã\82\8cã\81¦ã\81\84ã\81¾ã\81\99ï¼\88[http://www.php.net/manual/en/mysql.installation.php MySQLã\81®ã\82µã\83\9dã\83¼ã\83\88ä¸\8bã\81§PHPã\82\92ã\82³ã\83³ã\83\91ã\82¤ã\83«ã\81\99ã\82\8bæ\96¹æ³\95]ï¼\89',
-       'config-support-postgres' => '* $1は、MySQLの代替として、人気のあるオープンソースデータベースシステムです([http://www.php.net/manual/en/pgsql.installation.php PostgreSQLのサポート下でPHPをコンパイルする方法])',
-       'config-support-sqlite' => '* $1は、良くサポートされている、軽量データベースシステムです。([http://www.php.net/manual/en/pdo.installation.php SQLiteのサポート下でPHPをコンパイルする方法]、PDOを使用)',
-       'config-support-oracle' => '* $1は商業企業のデータベースです。([http://www.php.net/manual/en/oci8.installation.php OCI8サポートなPHPをコンパイルする方法])',
-       'config-support-ibm_db2' => '* $1 は商業企業のデータベースです。',
+       'config-support-mysql' => '* $1ã\81¯MediaWikiã\81®ä¸»è¦\81ã\81ªå¯¾è±¡ã\81§ã\81\82ã\82\8aã\80\81æ\9c\80ã\82\82ã\82µã\83\9dã\83¼ã\83\88ã\81\95ã\82\8cã\81¦ã\81\84ã\81¾ã\81\99 ([http://www.php.net/manual/en/mysql.installation.php MySQLã\81«å¯¾å¿\9cã\81\97ã\81\9fPHPã\82\92ã\82³ã\83³ã\83\91ã\82¤ã\83«ã\81\99ã\82\8bæ\96¹æ³\95])',
+       'config-support-postgres' => '* $1は、MySQLの代替として人気があるオープンソースのデータベースシステムです ([http://www.php.net/manual/en/pgsql.installation.php PostgreSQLに対応したPHPをコンパイルする方法])',
+       'config-support-sqlite' => '* $1は、良くサポートされている、軽量データベースシステムです。([http://www.php.net/manual/ja/pdo.installation.php SQLiteに対応したPHPをコンパイルする方法]、PDOを使用)',
+       'config-support-oracle' => '* $1は商業企業のデータベースです。([http://www.php.net/manual/en/oci8.installation.php OCI8サポートなPHPをコンパイルする方法])',
+       'config-support-ibm_db2' => '* $1 は商業企業のデータベースです。([http://www.php.net/manual/en/ibm-db2.installation.php IBM DB2に対応したPHPをコンパイルする方法])',
        'config-header-mysql' => 'MySQL の設定',
        'config-header-postgres' => 'PostgreSQL の設定',
        'config-header-sqlite' => 'SQLite の設定',
@@ -9945,7 +10163,7 @@ $1
 アスキー英字(a-z, A-Z)、数字(0-9)、下線(_)、ハイフン(-)のみを使用してください。',
        'config-connection-error' => '$1。
 
-以下のホスト名、ユーザ名、パスワードを確認してから再度試してください。',
+以下のホスト名、ユーザ名、パスワードを確認してから再度試してください。',
        'config-invalid-schema' => '「$1」は MediaWiki のスキーマとして無効です。
 ASCII の英数字 (a-z、A-Z、0-9)、下線 (_) のみを使用してください。',
        'config-postgres-old' => 'PostgreSQL $1 以降が必要です。ご使用中の PostgreSQL は $2 です。',
@@ -9992,8 +10210,8 @@ chmod a+w $3</pre>',
        'config-upgrade-done-no-regenerate' => 'アップグレードが完了しました。
 
 [$1 ウィキの使用を開始]することができます。',
-       'config-regenerate' => 'LocalSettings.phpを再生成→',
-       'config-show-table-status' => 'SHOW TABLE STATUSクエリーが失敗しました!',
+       'config-regenerate' => '<code>LocalSettings.php</code> を再生成→',
+       'config-show-table-status' => '<code>SHOW TABLE STATUS</code> クエリが失敗しました!',
        'config-unknown-collation' => "'''警告:''' データベースは認識されない照合を使用しています。",
        'config-db-web-account' => 'ウェブアクセスのためのデータベースアカウント',
        'config-db-web-help' => 'ウィキの通常の操作の際に、ウェブ サーバーがデータベース サーバーに接続できるように、ユーザー名とパスワードを指定してください。',
@@ -10008,7 +10226,7 @@ chmod a+w $3</pre>',
 
 '''MyISAM'''は、利用者が1人の場合、あるいは読み込み専用でインストールする場合に、より処理が早くなるでしょう。
 ただし、MyISAMのデータベースは、InnoDBより高頻度で破損する傾向があります。",
-       'config-mysql-charset' => 'データベースの文字セット',
+       'config-mysql-charset' => 'データベースの文字セット:',
        'config-mysql-binary' => 'バイナリ',
        'config-mysql-utf8' => 'UTF-8',
        'config-mysql-charset-help' => "'''バイナリ モード'''では、MediaWiki は、UTF-8 テキストをデータベースのバイナリ フィールドに格納します。
@@ -10025,8 +10243,8 @@ chmod a+w $3</pre>',
        'config-ns-other' => 'その他 (指定してください)',
        'config-ns-other-default' => 'マイウィキ',
        'config-project-namespace-help' => "ウィキペディアの例に従い、多くのウィキは、コンテンツのページとは分離したポリシーページを「'''プロジェクトの名前空間'''」に持っています。
-この名前空間のページのタイトルはすべて、ある接頭辞で始まります。それをここで指定することができます。
-この接頭辞はウィキの名前に由来するのが伝統的ですが、「#」や「:」のような区切り文字を含めることはできません。",
+この名前空間内のページのページ名はすべて特定の接頭辞で始まります。それをここで指定できます。
+通常、この接頭辞はウィキ名に基づきますが、「#」や「:」のような区切り文字を含めることはできません。",
        'config-ns-invalid' => '"<nowiki>$1</nowiki>"のように指定された名前空間は無効です。
 違うプロジェクト名前空間を指定してください。',
        'config-admin-box' => '管理アカウント',
@@ -10035,11 +10253,11 @@ chmod a+w $3</pre>',
        'config-admin-password-confirm' => 'パスワードの再入力:',
        'config-admin-help' => '希望するユーザー名をここに入力してください (例: "Joe Bloggs")。
 この名前でこのウィキにログインすることになります。',
-       'config-admin-name-blank' => '管理者のユーザ名を入力してください。',
-       'config-admin-name-invalid' => 'æ\8c\87å®\9aã\81\95ã\82\8cã\81\9fã\83¦ã\83¼ã\82¶å\90\8d "<nowiki>$1</nowiki>" は無効です。
-別のユーザ名を指定してください。',
+       'config-admin-name-blank' => '管理者のユーザ名を入力してください。',
+       'config-admin-name-invalid' => 'æ\8c\87å®\9aã\81\97ã\81\9fã\83¦ã\83¼ã\82¶ã\83¼å\90\8dã\80\8c<nowiki>$1</nowiki>ã\80\8dは無効です。
+別のユーザ名を指定してください。',
        'config-admin-password-blank' => '管理者アカウントのパスワードを入力してください。',
-       'config-admin-password-same' => 'ユーザ名と同じパスワードは使えません。',
+       'config-admin-password-same' => 'ユーザー名と同じパスワードは使用できません。',
        'config-admin-password-mismatch' => '入力された2つのパスワードが一致しません。',
        'config-admin-email' => 'メールアドレス:',
        'config-admin-email-help' => 'メールアドレスを入力してください。他の利用者からのメールの受け取り、パスワードのリセット、ウォッチリストに登録したページの更新通知に使用します。空欄のままにすることもできます。',
@@ -10048,26 +10266,26 @@ chmod a+w $3</pre>',
        'config-subscribe' => '[https://lists.wikimedia.org/mailman/listinfo/mediawiki-announce リリース告知のメーリングリスト]を購読する。',
        'config-subscribe-help' => 'これは、リリースの告知(重要なセキュリティに関する案内を含む)に使われる、低容量のメーリングリストです。
 このメーリングリストを購読して、新しいバージョンが出た場合にMediaWikiを更新してください。',
-       'config-almost-done' => 'これでほぼ終わりました
-残りの設定を飛ばして、今すぐにウィキをインストールできます。',
+       'config-almost-done' => 'これでほぼ終わりました!
+残りの設定を飛ばして、ウィキを今すぐインストールできます。',
        'config-optional-continue' => '私にもっと質問してください。',
        'config-optional-skip' => 'もう飽きてしまったので、とにかくウィキをインストールしてください。',
        'config-profile' => '利用者権限のプロファイル:',
-       'config-profile-wiki' => '伝統的なウィキ',
+       'config-profile-wiki' => '伝統的なウィキ', # Fuzzy
        'config-profile-no-anon' => 'アカウントの作成が必要',
        'config-profile-fishbowl' => '承認された編集者のみ',
        'config-profile-private' => '非公開ウィキ',
-       'config-profile-help' => "ã\82¦ã\82£ã\82­ã\81¯ã\80\81ã\81\9fã\81\8fã\81\95ã\82\93ã\81®äººã\81\8cå\8f¯è\83½ã\81ªé\99\90ã\82\8aã\81\9dã\81®ã\82¦ã\82£ã\82­ã\82\92ç·¨é\9b\86ã\81§ã\81\8dã\82\8bã\81¨ã\81\8dã\80\81最も優れた働きをします。
-MediaWikiã\81§ã\81¯ã\80\81æ\9c\80è¿\91ã\81®æ\9b´æ\96°ã\82\92確èª\8dã\81\97ã\80\81ç¥\9eçµ\8c質ã\81ªã\80\81ã\82\82ã\81\97ã\81\8fã\81¯æ\82ªæ\84\8fã\82\92æ\8c\81ã\81£ã\81\9få\88©ç\94¨è\80\85ã\81\8bã\82\89ã\81®æ\90\8d害ã\82\92å·®ã\81\97æ\88»ã\81\99ã\81\93ã\81¨ã\81\8cã\80\81ç°¡å\8d\98ã\81«ã\81§ã\81\8dます。
+       'config-profile-help' => "ã\82¦ã\82£ã\82­ã\81¯ã\80\81ã\81§ã\81\8dã\82\8bã\81 ã\81\91å¤\9aã\81\8fã\81®äººã\81\8cç·¨é\9b\86ã\81§ã\81\8dã\82\8bã\82\88ã\81\86ã\81«ã\81\99ã\82\8bã\81¨最も優れた働きをします。
+MediaWikiã\81§ã\81¯ã\80\81æ\9c\80è¿\91ã\81®æ\9b´æ\96°ã\82\92確èª\8dã\81\97ã\82\84ã\81\99ã\81\8fã\80\81ç¥\9eçµ\8c質ã\81ªã\80\81ã\81¾ã\81\9fã\81¯æ\82ªæ\84\8fã\82\92æ\8c\81ã\81£ã\81\9få\88©ç\94¨è\80\85ã\81\8bã\82\89ã\81®æ\90\8d害ã\82\92ç°¡å\8d\98ã\81«å·®ã\81\97æ\88»ã\81\9bます。
 
 しかし一方で、MediaWikiは、さらにさまざまな形態での利用も優れていると言われています。また、時には、すべての人にウィキ手法の利点を説得させるのは容易ではないかもしれません。
 そこで、選択肢があります。
 
-'''{{int:config-profile-wiki}}'''は、ログインしなくても、誰でも編集できるものです。
-'''{{int:config-profile-no-anon}}'''なウィキは、各編集に対してより強い説明責任を付与しますが、気軽な投稿を阻害するかもしれません。
+「'''{{int:config-profile-wiki}}'''」モデルでは、ログインしなくても、誰でも編集できます。
+「'''{{int:config-profile-no-anon}}'''」なウィキでは、各編集に対してより強い説明責任を付与しますが、気軽な投稿を阻害するかもしれません。
 
-'''{{int:config-profile-fishbowl}}'''のウィキは、承認された利用者が編集でき、一方、一般の人はページ(とその履歴)を閲覧できます。
-'''{{int:config-profile-private}}'''は、承認された利用者のみがページを閲覧でき、そのグループが編集できます。
+「'''{{int:config-profile-fishbowl}}'''」シナリオでは、承認された利用者のみが編集でき、一般の人はページ (とその履歴) を閲覧できます。
+「'''{{int:config-profile-private}}'''」では、承認された利用者のみがページを閲覧でき、そのグループが編集できます。
 
 より複雑な利用者権限の設定は、インストール後に設定できます。詳細は[//www.mediawiki.org/wiki/Manual:User_rights 関連するマニュアル]をご覧ください。",
        'config-license' => '著作権とライセンス:',
@@ -10078,23 +10296,23 @@ MediaWikiでは、最近の更新を確認し、神経質な、もしくは悪
        'config-license-gfdl' => 'GNU フリー文書利用許諾契約書 1.3 以降',
        'config-license-pd' => 'パブリック・ドメイン',
        'config-license-cc-choose' => 'その他のクリエイティブ・コモンズ・ライセンスを選択する',
-       'config-license-help' => "多くの公開ウィキでは、すべての寄稿物が[http://freedomdefined.org/Definition フリーライセンス]のに置かれています。
+       'config-license-help' => "多くの公開ウィキでは、すべての寄稿物が[http://freedomdefined.org/Definition フリーライセンス]のもとに置かれています。
 こうすることにより、コミュニティによる共有の感覚が生まれ、長期的な寄稿が促されます。
 私的ウィキや企業のウィキでは、通常、フリーライセンスにする必要はありません。
 
 ウィキペディアにあるテキストをあなたのウィキで利用し、逆にあなたのウィキにあるテキストをウィキペディアに複製することを許可したい場合には、'''クリエイティブ・コモンズ 表示-継承'''を選択するべきです。
 
 ウィキペディアは以前、GNUフリー文書利用許諾契約書(GFDL)を使用していました。
-GFDL は有効なライセンスですが、内容を理解するのは困難です。
-また、GFDL の元に置かれているコンテンツの再利用も困難です。",
+GFDLは有効なライセンスですが、内容を理解するのは困難です。
+また、GFDLのもとに置かれているコンテンツの再利用も困難です。",
        'config-email-settings' => 'メールの設定',
        'config-enable-email' => 'メール送信を有効にする',
        'config-enable-email-help' => 'メールを使用したい場合は、[http://www.php.net/manual/en/mail.configuration.php PHP のメール設定]が正しく設定されている必要があります。
 メールの機能を使用しない場合は、ここで無効にすることができます。',
        'config-email-user' => '利用者間のメールを有効にする',
-       'config-email-user-help' => '設å®\9aã\81«ã\81\8aã\81\84ã\81¦æ\9c\89å\8a¹ã\81«ã\81ªã\81£ã\81¦ã\81\84ã\82\8bå ´å\90\88ã\80\81ã\81\99ã\81¹ã\81¦ã\81®ã\83¦ã\83¼ã\82がお互いにメールのやりとりを行うことを許可する。',
-       'config-email-usertalk' => 'ã\83¦ã\83¼ã\82¶ã\81®ã\83\88ã\83¼ã\82¯ã\83\9aã\83¼ã\82¸ã\81«ã\81\8aã\81\91ã\82\8b通知を有効にする',
-       'config-email-usertalk-help' => '設定で有効にしているならば、ユーザのトークページの変更の通知を受けることをユーザに許可する。',
+       'config-email-user-help' => '設å®\9aã\81§æ\9c\89å\8a¹ã\81«ã\81ªã\81£ã\81¦ã\81\84ã\82\8bå ´å\90\88ã\80\81ã\81\99ã\81¹ã\81¦ã\81®ã\83¦ã\83¼ã\82¶ã\83¼がお互いにメールのやりとりを行うことを許可する。',
+       'config-email-usertalk' => 'ã\83¦ã\83¼ã\82¶ã\83¼ã\81®ã\83\88ã\83¼ã\82¯ã\83\9aã\83¼ã\82¸ã\81§ã\81®通知を有効にする',
+       'config-email-usertalk-help' => '設定で有効にしている場合は、ユーザーのトークページの変更の通知を受けることをユーザーに許可する。',
        'config-email-watchlist' => 'ウォッチリストの通知を有効にする',
        'config-email-watchlist-help' => '利用者が設定で有効にしている場合、閲覧されたページに関する通知を受け取ることを許可する。',
        'config-email-auth' => 'メールの認証を有効にする',
@@ -10135,8 +10353,8 @@ GFDL は有効なライセンスですが、内容を理解するのは困難で
 中〜大規模サイトではこれを有効にすることを強くお勧めします。小規模サイトでも同様に効果があります。',
        'config-cache-none' => 'キャッシングしない(機能は取り払われます、しかもより大きなウィキサイト上でスピードの問題が発生します)',
        'config-cache-accel' => 'PHP オブジェクト キャッシュ (APC、XCache、WinCache のいずれか)',
-       'config-cache-memcached' => 'Memcachedを使用(追加の設定が必要です)',
-       'config-memcached-servers' => 'メモリをキャッシュされたサーバ:',
+       'config-cache-memcached' => 'memcached を使用 (追加の設定が必要)',
+       'config-memcached-servers' => 'memcached サーバー:',
        'config-memcached-help' => 'Memcachedを使用するIPアドレスの一覧。
 カンマ区切りで、利用する特定のポートの指定が必要です。例:
 127.0.0.1:11211
@@ -10148,7 +10366,7 @@ GFDL は有効なライセンスですが、内容を理解するのは困難で
        'config-install-alreadydone' => "'''警告:''' 既にMediaWikiがインストール済みで、再びインストールし直そうとしています。
 次のページへ進んでください。",
        'config-install-begin' => '「{{int:config-continue}}」を押すと、MediaWiki のインストールを開始できます。
-変更したい設定がある場合は、「{{int:Config-back}}」を押してください。',
+変更したい設定がある場合は、「{{int:config-back}}」を押してください。',
        'config-install-step-done' => '実行',
        'config-install-step-failed' => '失敗した',
        'config-install-extensions' => '拡張機能を含む',
@@ -10166,34 +10384,34 @@ GFDL は有効なライセンスですが、内容を理解するのは困難で
        'config-install-user-missing-create' => '指定したユーザー「$1」は存在しません。
 アカウントを作成する場合は、下の「アカウント作成」をクリックしてください。',
        'config-install-tables' => 'テーブルの作成',
-       'config-install-tables-exist' => "'''警告''':MediaWikiテーブルは既に存在するようです。
-作成を飛ばします。",
+       'config-install-tables-exist' => "'''警告''': MediaWiki テーブルは既に存在するようです。
+作成を省略します。",
        'config-install-tables-failed' => "'''エラー''': テーブルの作成が、以下のエラーにより失敗しました: $1",
        'config-install-interwiki' => '既定のウィキ間テーブルの導入',
        'config-install-interwiki-list' => 'ファイル <code>interwiki.list</code> から読み取れませんでした。',
-       'config-install-interwiki-exists' => "'''警告'''ウィキ間テーブルは既に登録されているようです。
+       'config-install-interwiki-exists' => "'''警告'''ウィキ間テーブルは既に登録されているようです。
 既定のテーブルを無視します。",
        'config-install-stats' => '統計情報の初期化',
        'config-install-keys' => '秘密鍵の生成',
        'config-install-sysop' => '管理者のアカウントの作成',
        'config-install-mainpage' => 'メインページを既定の内容で作成',
        'config-install-mainpage-failed' => 'メインページを挿入できませんでした: $1',
-       'config-install-done' => "'''おめでとうございます'''
+       'config-install-done' => "'''おめでとうございます!'''
 MediaWikiのインストールに成功しました。
 
 <code>LocalSettings.php</code>ファイルが生成されました。
\81\99ã\81¹ã\81¦ã\81®è¨­å®\9aã\81\8cã\81\9dã\81®ã\83\95ã\82¡ã\82¤ã\83«ã\81«å\90«ã\81¾ã\82\8cã\81¦います。
\81\93ã\81®ã\83\95ã\82¡ã\82¤ã\83«ã\81¯ã\81\99ã\81¹ã\81¦ã\81®è¨­å®\9aã\82\92å\90«ã\82\93ã\81§います。
 
\81\9dã\82\8cã\82\92ã\83\80ã\82¦ã\83³ã\83­ã\83¼ã\83\89ã\81\97ã\80\81ã\82¦ã\82£ã\82­ã\82\92ã\82¤ã\83³ã\82¹ã\83\88ã\83¼ã\83«ã\81\97ã\81\9få\9fºæº\96ã\83\87ã\82£ã\83¬ã\82¯ã\83\88ã\83ªï¼\88index.phpã\81¨å\90\8cã\81\98ã\83\87ã\82£ã\83¬ã\82¯ã\83\88ã\83ªï¼\89ã\81«è¨­ç½®ã\81\99ã\82\8bå¿\85è¦\81ã\81\8cã\81\82ã\82\8aã\81¾ã\81\99ã\80\82ã\83\80ã\82¦ã\83³ã\83­ã\83¼ã\83\89ã\81¯è\87ªå\8b\95ç\9a\84ã\81«é\96\8bå§\8bã\81\97ã\81¦ã\81\84るはずです。
\81\93ã\82\8cã\82\92ã\83\80ã\82¦ã\83³ã\83­ã\83¼ã\83\89ã\81\97ã\81¦ã\80\81ã\82¦ã\82£ã\82­ã\82\92ã\82¤ã\83³ã\82¹ã\83\88ã\83¼ã\83«ã\81\97ã\81\9få\9fºæº\96ã\83\87ã\82£ã\83¬ã\82¯ã\83\88ã\83ª (index.phpã\81¨å\90\8cã\81\98ã\83\87ã\82£ã\83¬ã\82¯ã\83\88ã\83ª) ã\81«è¨­ç½®ã\81\99ã\82\8bå¿\85è¦\81ã\81\8cã\81\82ã\82\8aã\81¾ã\81\99ã\80\82ã\83\80ã\82¦ã\83³ã\83­ã\83¼ã\83\89ã\81¯è\87ªå\8b\95ç\9a\84ã\81«é\96\8bå§\8bã\81\95ã\82\8cるはずです。
 
\83\80ã\82¦ã\83³ã\83­ã\83¼ã\83\89ã\81\8cé\96\8bå§\8bã\81\97ã\81¦ã\81\84ã\81ªã\81\84å ´å\90\88ã\80\81ã\81¾ã\81\9fã\83\80ã\82¦ã\83³ã\83­ã\83¼ã\83\89ã\82\92ã\82­ã\83£ã\83³ã\82»ã\83«ã\81\97ã\81\9få ´å\90\88ã\81¯ã\80\81ä¸\8bè¨\98ã\81®ã\83ªã\83³ã\82¯ã\81\8bã\82\89ã\83\80ã\82¦ã\83³ã\83­ã\83¼ã\83\89ã\82\92å\86\8dé\96\8bã\81\99ã\82\8bã\81\93ã\81¨ã\81\8cã\81§ã\81\8dã\81¾ã\81\99ï¼\9a
\83\80ã\82¦ã\83³ã\83­ã\83¼ã\83\89ã\81\8cé\96\8bå§\8bã\81\95ã\82\8cã\81¦ã\81\84ã\81ªã\81\84å ´å\90\88ã\80\81ã\81¾ã\81\9fã\81¯ã\83\80ã\82¦ã\83³ã\83­ã\83¼ã\83\89ã\82\92ã\82­ã\83£ã\83³ã\82»ã\83«ã\81\97ã\81\9få ´å\90\88ã\81¯ã\80\81ä¸\8bè¨\98ã\81®ã\83ªã\83³ã\82¯ã\82\92ã\82¯ã\83ªã\83\83ã\82¯ã\81\97ã\81¦ã\83\80ã\82¦ã\83³ã\83­ã\83¼ã\83\89ã\82\92å\86\8dé\96\8bã\81§ã\81\8dã\81¾ã\81\99:
 
 $3
 
-'''注æ\84\8f''': ã\82\82ã\81\97ã\80\81ã\81\93ã\82\8cã\82\92ä»\8aã\81\97ã\81ªã\81\91ã\82\8cã\81°ã\80\81ã\81¤ã\81¾ã\82\8aã\80\81ã\81\93ã\81®ã\83\95ã\82¡ã\82¤ã\83«ã\82\92ã\83\80ã\82¦ã\83³ã\83­ã\83¼ã\83\89ã\81\9bã\81\9aã\82¤ã\83³ã\82¹ã\83\88ã\83¼ã\83«ã\82\92çµ\82äº\86ã\81\97ã\81\9få ´å\90\88ã\80\81ã\81\93ã\81®ç\94\9fæ\88\90ã\81\95ã\82\8cã\81\9f設å®\9aã\83\95ã\82¡ã\82¤ã\83«ã\81¯å\88©ç\94¨ã\81\95ã\82\8cã\81¾ã\81\9bã\82\93
+'''注æ\84\8f''': ã\81\93ã\81®ç\94\9fæ\88\90ã\81\95ã\82\8cã\81\9f設å®\9aã\83\95ã\82¡ã\82¤ã\83«ã\82\92ã\83\80ã\82¦ã\83³ã\83­ã\83¼ã\83\89ã\81\9bã\81\9aã\81«ã\82¤ã\83³ã\82¹ã\83\88ã\83¼ã\83«ã\82\92çµ\82äº\86ã\81\99ã\82\8bã\81¨ã\80\81ã\81\93ã\81®ã\83\95ã\82¡ã\82¤ã\83«ã\81¯å\88©ç\94¨ã\81§ã\81\8dã\81ªã\81\8fã\81ªã\82\8aã\81¾ã\81\99
 
-それを完了すれば、'''[$2 ウィキに入る]'''ことができます。",
-       'config-download-localsettings' => 'LocalSettings.php をダウンロード',
+上記の作業が完了すると、'''[$2 ウィキに入る]'''ことができます。",
+       'config-download-localsettings' => '<code>LocalSettings.php</code> をダウンロード',
        'config-help' => 'ヘルプ',
        'config-nofile' => 'ファイル「$1」が見つかりませんでした。削除された可能性があります。',
        'mainpagetext' => "'''MediaWiki のインストールに成功しました。'''",
@@ -10301,7 +10519,8 @@ $messages['ka'] = array(
        'config-admin-password-confirm' => 'პაროლი ხელმეორედ:',
        'config-admin-name-blank' => 'შეიყვანეთ ადმინისტრატორის მომხმარებლის სახელი.',
        'config-admin-email' => 'ელ. ფოსტის მისამართი:',
-       'config-profile-wiki' => 'ტრადიციული ვიკი',
+       'config-profile' => 'მომხმარებელთა უფლებების პროფილი:',
+       'config-profile-wiki' => 'ღია ვიკი',
        'config-profile-private' => 'დახურული ვიკი',
        'config-license' => 'საავტორო უფლები და ლიცენზია:',
        'config-license-cc-by-sa' => 'Creative Commons Attribution Share Alike',
@@ -10320,7 +10539,8 @@ $messages['ka'] = array(
        'config-install-step-done' => 'შესრულდა',
        'config-install-step-failed' => 'ვერ მოხერხდა',
        'config-install-tables' => 'ცხრილების შექმნა',
-       'config-download-localsettings' => 'LocalSettings.php-ის გადმოწერა',
+       'config-install-interwiki-list' => 'ვერ მოიძებნა ფაილი <code>interwiki.list</code>.',
+       'config-download-localsettings' => '<code>LocalSettings.php</code>-ის გადმოწერა',
        'config-help' => 'დახმარება',
        'mainpagetext' => "'''მედიავიკი წარმატებით ჩაიტვირთა.'''",
        'mainpagedocfooter' => 'ვიკი პროგრამის გამოყენების ინფორმაციისთვის იხილეთ [//meta.wikimedia.org/wiki/Help:Contents მომხმარებლის მეგზური].
@@ -10329,7 +10549,8 @@ $messages['ka'] = array(
 
 * [//www.mediawiki.org/wiki/Manual:Configuration_settings კონფიგურაციის მაჩვენებლების სია]
 * [//www.mediawiki.org/wiki/Manual:FAQ MediaWiki FAQ]
-* [https://lists.wikimedia.org/mailman/listinfo/mediawiki-announce მედიავიკის გამოცემის დაგზავნის სია]',
+* [https://lists.wikimedia.org/mailman/listinfo/mediawiki-announce მედიავიკის გამოცემის დაგზავნის სია]
+* [//www.mediawiki.org/wiki/Localisation#Translation_resources მედიავიკის ლოკალიზება თქვენ ენაზე]',
 );
 
 /** Kara-Kalpak (Qaraqalpaqsha)
@@ -10462,24 +10683,24 @@ $messages['kn'] = array(
  * @author 아라
  */
 $messages['ko'] = array(
-       'config-desc' => '미디어위키 설치 마법사',
+       'config-desc' => '미디어위키 설치 프로그램',
        'config-title' => 'MediaWiki $1 설치',
        'config-information' => '정보',
-       'config-localsettings-upgrade' => '<code>LocalSettings.php</code> í\8c\8cì\9d¼ì\9d´ ê°\90ì§\80ë\90\98ì\97\88ì\8aµë\8b\88ë\8b¤.
+       'config-localsettings-upgrade' => '<code>LocalSettings.php</code> í\8c\8cì\9d¼ì\9d\84 ê°\90ì§\80í\96\88ì\8aµë\8b\88ë\8b¤.
 이 설치를 업그레이드하려면 아래 상자에 <code>$wgUpgradeKey</code>의 값을 입력하세요.
-LocalSettings.php에 찾으세요.',
-       'config-localsettings-cli-upgrade' => 'LocalSettings.php í\8c\8cì\9d¼ì\9d´ ê°\90ì§\80ë\90\98ì\97\88ì\8aµë\8b\88ë\8b¤.
-이 설치를 업그레이드하려면 update.php를 대신 실행하세요',
+<code>LocalSettings.php</code>에 찾을 수 있습니다.',
+       'config-localsettings-cli-upgrade' => '<code>LocalSettings.php</code> í\8c\8cì\9d¼ì\9d\84 ê°\90ì§\80í\96\88ì\8aµë\8b\88ë\8b¤.
+이 설치를 업그레이드하려면 <code>update.php</code>를 대신 실행하세요',
        'config-localsettings-key' => '업그레이드 키:',
        'config-localsettings-badkey' => '제공한 키가 잘못되었습니다.',
        'config-upgrade-key-missing' => '미디어위키의 기존 설치가 감지되었습니다.
-이 설치를 업그레이드하려면 LocalSettings.php의 아래에 다음 줄을 넣으세요:
+이 설치를 업그레이드하려면 <code>LocalSettings.php</code>의 아래에 다음 줄을 넣으세요:
 
 $1',
-       'config-localsettings-incomplete' => '기존 LocalSettings.php가 완전하지 않은 것 같습니다.
+       'config-localsettings-incomplete' => '기존 <code>LocalSettings.php</code>가 완전하지 않은 것 같습니다.
 $1 변수가 설정되어 있지 않습니다.
-이 변수가 설정되도록 LocalSettings.php를 바꾸고 "계속"을 클릭하세요.',
-       'config-localsettings-connection-error' => 'LocalSettings.php 또는 AdminSettings.php에 지정한 설정을 사용하여 데이터베이스에 연결할 때 오류가 발생했습니다. 이러한 설정을 수정하고 다시 시도하세요.
+이 변수가 설정되도록 <code>LocalSettings.php</code>를 바꾸고 "{{int:Config-continue}}"을 클릭하세요.',
+       'config-localsettings-connection-error' => '<code>LocalSettings.php</code> 또는 <code>AdminSettings.php</code>에 지정한 설정을 사용하여 데이터베이스에 연결할 때 오류가 발생했습니다. 이러한 설정을 수정하고 다시 시도하세요.
 
 $1',
        'config-session-error' => '세션 시작 오류: $1',
@@ -10487,12 +10708,12 @@ $1',
 세션은 $1의 작동 시간 동안 구성됩니다.
 php.ini에 있는 <code>session.gc_maxlifetime</code>에서 설정해 이를 증가시킬 수 있습니다.
 설치 과정을 다시 시작합니다.',
-       'config-no-session' => 'ì\84¸ì\85\98 ë\8d°ì\9d´í\84°ê°\80 ì\86\90ì\8b¤ë\90\98ì\97\88습니다!
+       'config-no-session' => 'ì\84¸ì\85\98 ë\8d°ì\9d´í\84°ê°\80 ì\97\86ì\96´ì¡\8c습니다!
 php.ini를 확인하고 <code>session.save_path</code>가 적절한 디렉토리로 설정되어 있는지 확인하세요.',
        'config-your-language' => '설치 언어:',
        'config-your-language-help' => '설치 과정에서 사용할 언어를 선택하세요.',
        'config-wiki-language' => '위키 언어:',
-       'config-wiki-language-help' => '주ë¡\9c ì\9e\91ì\84±ë\90  ì\9c\84í\82¤ì\97\90 ë\8c\80í\95\9c 언어를 선택하세요.',
+       'config-wiki-language-help' => 'ì\9c\84í\82¤ì\97\90 ì£¼ë¡\9c ì\9e\91ì\84±ë\90  언어를 선택하세요.',
        'config-back' => '← 뒤로',
        'config-continue' => '계속 →',
        'config-page-language' => '언어',
        'config-env-php' => 'PHP $1(이)가 설치되었습니다.',
        'config-env-php-toolow' => 'PHP $1(이)가 설치되었습니다.
 하지만 미디어위키는 PHP $2 이상이 필요합니다.',
-       'config-unicode-using-utf8' => '유니코드 정규화에 대해 Brion Vibber의 utf8_normalize.so를 사용합니다.',
-       'config-unicode-using-intl' => '유니코드 정규화에 ë\8c\80í\95´ [http://pecl.php.net/intl intl PECL í\99\95ì\9e¥]ì\9d\84 ì\82¬ì\9a©í\95©ë\8b\88ë\8b¤.',
-       'config-unicode-pure-php-warning' => "'''경고''': [http://pecl.php.net/intl intl PECL 확장]은 PHP만으로 구현하는 데에는 느려질 정도로 성능이 떨어지는 유니코드 정규화를 처리할 수 없습니다.
-높은 트래픽의 사이트에서 실행하려면 [//www.mediawiki.org/wiki/Unicode_normalization_considerations 유니코드 정규화]에 대해 약간 참고해야 합니다.",
+       'config-unicode-using-utf8' => '유니코드 정규화에 Brion Vibber의 utf8_normalize.so를 사용합니다.',
+       'config-unicode-using-intl' => '유니코드 정규화에 [http://pecl.php.net/intl intl PECL í\99\95ì\9e¥ ê¸°ë\8a¥]ì\9d\84 ì\82¬ì\9a©í\95©ë\8b\88ë\8b¤.',
+       'config-unicode-pure-php-warning' => "'''경고''': 유니코드 정규화를 처리할 [http://pecl.php.net/intl intl PECL 확장 기능]을 사용할 수 없기 때문에 느린 순수한 PHP 구현을 대신 사용합니다.
+높은 트래픽 사이트에서 실행하려면 [//www.mediawiki.org/wiki/Unicode_normalization_considerations 유니코드 정규화]를 읽어보시기 바랍니다.",
        'config-unicode-update-warning' => "'''경고''': 유니코드 정규화 래퍼의 설치된 버전은 [http://site.icu-project.org/ ICU 프로젝트]의 라이브러리의 이전 버전을 사용합니다.
 만약 유니코드를 사용하는 것에 대해 우려가 된다면 [//www.mediawiki.org/wiki/Unicode_normalization_considerations 업그레이드]해야합니다.",
        'config-no-db' => '적절한 데이터베이스 드라이버를 찾을 수 없습니다! PHP에 데이터베이스 드라이버를 설치해야 합니다.
 다음 데이터베이스 유형을 지원합니다 : $1.
 
-호스팅을 공유하고 있다면 적절한 데이터베이스 드라이버를 설치하도록 호스팅 제공 업체에 문의하세요.
-PHP를 ì§\81ì \91 ì»´í\8c\8cì\9d¼í\95  ê²½ì\9a° ë\8d°ì\9d´í\84°ë² ì\9d´ì\8a¤ í\81´ë\9d¼ì\9d´ì\96¸í\8a¸ë¥¼ ì\82¬ì\9a©í\95\98ì\97¬ í\99\9cì\84±í\99\94í\95\98ë\8f\84ë¡\9d ë\8b¤ì\8b\9c ì\84¤ì \95í\95\98ì\84¸ì\9a\94. ì\98\88ë\93¤ ë\93¤ì\96´ <code>./configure --with-mysql</code>ì\9d\84 ì\82¬ì\9a©하세요.
+공유하는 호스팅을 사용하고 있다면 적절한 데이터베이스 드라이버를 설치하도록 호스팅 제공 업체에 문의하세요.
+PHP를 ì§\81ì \91 ì»´í\8c\8cì\9d¼í\96\88ë\8b¤ë©´ ì\98\88를 ë\93¤ì\96´ <code>./configure --with-mysql</code>ì\9d\84 ì\82¬ì\9a©í\95\98ì\97¬ ë\8d°ì\9d´í\84°ë² ì\9d´ì\8a¤ í\81´ë\9d¼ì\9d´ì\96¸í\8a¸ë¥¼ í\99\9cì\84±í\99\94í\95\98ë\8f\84ë¡\9d ë\8b¤ì\8b\9c ì\84¤ì \95하세요.
 데비안이나 우분트 패키지에서 PHP를 설치했다면 php-mysql 모듈도 설치해야 합니다.',
        'config-outdated-sqlite' => "'''경고''': SQLite 필요한 최소 $2 버전보다 낮은 $1(이)가 있습니다. SQLite는 사용할 수 없습니다.",
        'config-no-fts3' => "'''경고''': SQLite는 [//sqlite.org/fts3.html FTS3 모듈] 없이 컴파일되어, 검색 기능은 백엔드에 사용할 수 없습니다.",
        'config-register-globals' => "'''경고: PHP의 <code>[http://php.net/register_globals register_globals]</code> 옵션이 활성화되어 있습니다.'''
 '''가능하면 이를 비활성화하십시오.'''
-미ë\94\94ì\96´ì\9c\84í\82¤ë\8a\94 ì\9e\91ë\8f\99í\95\98ì§\80ë§\8c ì\84\9cë²\84ì\97\90 ì\9e ì\9e¬ì \81ì\9d¸ ë³´ì\95\88 ì·¨ì\95½ì \90ì\97\90 노출됩니다.",
+미ë\94\94ì\96´ì\9c\84í\82¤ë\8a\94 ì\9e\91ë\8f\99í\95\98ì§\80ë§\8c ì\84\9cë²\84ì\97\90 ì\9e ì\9e¬ì \81ì\9d¸ ë³´ì\95\88 ì·¨ì\95½ì \90ì\9d´ 노출됩니다.",
        'config-magic-quotes-runtime' => "'''치명: [http://www.php.net/manual/en/ref.info.php#ini.magic-quotes-runtime magic_quotes_runtime]이 활성합니다!'''
 이 옵션은 데이터를 입력하는 데 예기치 않는 손상이 일어납니다.
\84¤ì¹\98í\95  ì\88\98 ì\97\86ì\8aµë\8b\88ë\8b¤. ë\98\90ë\8a\94 ë¯¸ë\94\94ì\96´ì\9c\84í\82¤ê°\80 ì\82¬ì\9a©í\95\98ì§\80 ì\95\8aë\8a\94 ì\9d´ ì\98µì\85\98ì\9d\84 ë¹\84í\99\9cì\84±í\99\94í\95\98ì\8b­ì\8b\9cì\98¤.",
\9d´ ì\98µì\85\98ì\9d\84 ë¹\84í\99\9cì\84±í\99\94í\95\98ì§\80 ì\95\8aë\8a\94 í\95\9c ë¯¸ë\94\94ì\96´ì\9c\84í\82¤ë¥¼ ì\84¤ì¹\98í\95\98ê³  ì\82¬ì\9a©í\95  ì\88\98 ì\97\86ì\8aµë\8b\88ë\8b¤.",
        'config-magic-quotes-sybase' => "'''치명: [http://www.php.net/manual/en/ref.info.php#ini.magic-quotes-sybase magic_quotes_sybase]이 활성합니다!'''
 이 옵션은 데이터를 입력하는 데 예기치 않는 손상이 일어납니다.
\84¤ì¹\98í\95  ì\88\98 ì\97\86ì\8aµë\8b\88ë\8b¤. ë\98\90ë\8a\94 ë¯¸ë\94\94ì\96´ì\9c\84í\82¤ê°\80 ì\82¬ì\9a©í\95\98ì§\80 ì\95\8aë\8a\94 ì\9d´ ì\98µì\85\98ì\9d\84 ë¹\84í\99\9cì\84±í\99\94í\95\98ì\8b­ì\8b\9cì\98¤.",
\9d´ ì\98µì\85\98ì\9d\84 ë¹\84í\99\9cì\84±í\99\94í\95\98ì§\80 ì\95\8aë\8a\94 í\95\9c ë¯¸ë\94\94ì\96´ì\9c\84í\82¤ë¥¼ ì\84¤ì¹\98í\95\98ê³  ì\82¬ì\9a©í\95  ì\88\98 ì\97\86ì\8aµë\8b\88ë\8b¤.",
        'config-mbstring' => "'''치명: [http://www.php.net/manual/en/ref.mbstring.php#mbstring.overload mbstring.func_overload]이 활성합니다!'''
 이 옵션은 오류가 발생하고 데이터를 입력하는 데 예기치 않는 손상이 일어날 수 있습니다.
\84¤ì¹\98í\95  ì\88\98 ì\97\86ì\8aµë\8b\88ë\8b¤. ë\98\90ë\8a\94 ë¯¸ë\94\94ì\96´ì\9c\84í\82¤ê°\80 ì\82¬ì\9a©í\95\98ì§\80 ì\95\8aë\8a\94 ì\9d´ ì\98µì\85\98ì\9d\84 ë¹\84í\99\9cì\84±í\99\94í\95\98ì\8b­ì\8b\9cì\98¤.",
\9d´ ì\98µì\85\98ì\9d\84 ë¹\84í\99\9cì\84±í\99\94í\95\98ì§\80 ì\95\8aë\8a\94 í\95\9c ë¯¸ë\94\94ì\96´ì\9c\84í\82¤ë¥¼ ì\84¤ì¹\98í\95\98ê³  ì\82¬ì\9a©í\95  ì\88\98 ì\97\86ì\8aµë\8b\88ë\8b¤.",
        'config-ze1' => "'''치명: [http://www.php.net/manual/en/ini.core.php zend.ze1_compatibility_mode]이 활성합니다!'''
-이 옵션은 미디어위키에 끔찍한 버그를 일으킵니다.
\84¤ì¹\98í\95  ì\88\98 ì\97\86ì\8aµë\8b\88ë\8b¤. ë\98\90ë\8a\94 ë¯¸ë\94\94ì\96´ì\9c\84í\82¤ê°\80 ì\82¬ì\9a©í\95\98ì§\80 ì\95\8aë\8a\94 ì\9d´ ì\98µì\85\98ì\9d\84 ë¹\84í\99\9cì\84±í\99\94í\95\98ì\8b­ì\8b\9cì\98¤.",
+이 옵션은 미디어위키에 심간한 버그를 일으킵니다.
\9d´ ì\98µì\85\98ì\9d\84 ë¹\84í\99\9cì\84±í\99\94í\95\98ì§\80 ì\95\8aë\8a\94 í\95\9c ë¯¸ë\94\94ì\96´ì\9c\84í\82¤ë¥¼ ì\84¤ì¹\98í\95\98ê³  ì\82¬ì\9a©í\95  ì\88\98 ì\97\86ì\8aµë\8b\88ë\8b¤.",
        'config-safe-mode' => "'''경고:''' [http://www.php.net/features.safe-mode 안전 모드]이 활성합니다!
 특히 파일을 올리거나 <code>math</code>를 지원하는 데 문제가 발생할 수 있습니다.",
        'config-xml-bad' => 'PHP의 XML 모듈이 없습니다.
@@ -10588,16 +10809,16 @@ Mandrake를 실행하고 있다면 php-xml 패키지를 설치하세요.',
        'config-apc' => '[http://www.php.net/apc APC]가 설치되었습니다',
        'config-wincache' => '[http://www.iis.net/download/WinCacheForPhp WinCache]가 설치되었습니다',
        'config-no-cache' => "'''경고:''' [http://www.php.net/apc APC], [http://xcache.lighttpd.net/ XCache] 또는 [http://www.iis.net/download/WinCacheForPhp WinCache]를 찾을 수 없습니다.
-ê°\9cì²´ ìº\90ì\8b±ì\9d´ í\99\9cì\84±í\99\94ë\90\98ì§\80 ì\95\8aì\8aµë\8b\88ë\8b¤.",
+ê°\9cì²´ ìº\90ì\8b±ì\9d\84 í\99\9cì\84±í\99\94í\95\98ì§\80 ì\95\8aì\8aµë\8b\88ë\8b¤.",
        'config-mod-security' => "'''경고''': 웹 서버에 [http://modsecurity.org/ mod_security]가 허용되었습니다. 잘못 설정된 경우 미디어위키나 사용자가 임의의 콘텐츠를 게시할 수 있는 다른 소프트웨어에 대한 문제를 일으킬 수 있습니다.
 [http://modsecurity.org/documentation/ mod_security] 문서를 참고하거나 임의의 오류가 발생할 경우 호스트의 지원 요청에 문의하십시오.",
        'config-diff3-bad' => 'GNU diff3를 찾을 수 없습니다.',
        'config-imagemagick' => 'ImageMagick를 찾았습니다: <code>$1</code>.
\98¬ë¦¬ê¸°ë¥¼ í\99\9cì\84±í\99\94í\95  ê²½ì\9a° ê·¸ë¦¼ ì\84¬ë\84¤ì\9d¼ì\9d´ í\99\9cì\84±í\99\94ë\90  ê²\83ì\9e\85니다.',
\98¬ë¦¬ê¸°ë¥¼ í\99\9cì\84±í\99\94í\95  ê²½ì\9a° ê·¸ë¦¼ ì\84¬ë\84¤ì\9d¼ì\9d´ í\99\9cì\84±í\99\94ë\90©니다.',
        'config-gd' => '내장된 GD 그래픽 라이브러리를 찾았습니다.
\98¬ë¦¬ê¸°ë¥¼ í\99\9cì\84±í\99\94í\95  ê²½ì\9a° ê·¸ë¦¼ ì\84¬ë\84¤ì\9d¼ì\9d´ í\99\9cì\84±í\99\94ë\90  ê²\83ì\9e\85니다.',
\98¬ë¦¬ê¸°ë¥¼ í\99\9cì\84±í\99\94í\95  ê²½ì\9a° ê·¸ë¦¼ ì\84¬ë\84¤ì\9d¼ì\9d´ í\99\9cì\84±í\99\94ë\90©니다.',
        'config-no-scaling' => 'GD 라이브러리나 ImageMagick를 찾을 수 없습니다.
-그림 ì\84¬ë\84¤ì\9d¼ì\9d´ ë¹\84í\99\9cì\84±í\99\94ë\90  ê²\83ì\9e\85니다.',
+그림 ì\84¬ë\84¤ì\9d¼ì\9d´ ë¹\84í\99\9cì\84±í\99\94ë\90©니다.',
        'config-no-uri' => "'''오류:''' 현재 URI를 확인할 수 없습니다.
 설치가 중단되었습니다.",
        'config-no-cli-uri' => "'''경고''': 기본값을 사용하여 --scriptpath를 지정하지 않았습니다: <code>$1</code>.",
@@ -10607,21 +10828,23 @@ Mandrake를 실행하고 있다면 php-xml 패키지를 설치하세요.',
 미디어위키는 보안 위협에 대한 모든 올린 파일을 검사하지만, 올리기를 활성화하기 전에 [//www.mediawiki.org/wiki/Manual:Security#Upload_security 이 보안 취약점을 해결할 것]을 매우 권장합니다.",
        'config-no-cli-uploads-check' => "'''경고:''' 올리기에 대한 기본 디렉토리(<code>$1</code>)는 CLI를 설치하는 동안 임의의 스크립트 실행에 대한 취약점에 대해 검사되지 않습니다.",
        'config-brokenlibxml' => '시스템에 버그가 있는 PHP와 libxml2의 조합이 있으며 미디어위키나 다른 웹 어플리케이션에 숨겨진 데이터 손상을 일으킬 수 있습니다.
-PHP 5.2.9 이후와 libxml2 2.7.3 이후로 업그레이드하세요 ([//bugs.php.net/bug.php?id=45996 PHP에 제기한 버그]).
+PHP 5.2.9 이후와 libxml2 2.7.3 이후로 업그레이드하세요. ([//bugs.php.net/bug.php?id=45996 PHP에 제기한 버그])
 설치가 중단되었습니다.',
        'config-using531' => '미디어위키는 <code>__call()</code>을 참고로 매개 변수를 포함하는 버그로 인해 PHP $1(와)과 함께 사용할 수 없습니다.
 문제를 해결하려면 PHP 5.3.2 이상로 업그레이드하거나 PHP 5.3.0으로 다운그레이드를 하세요.
 설치가 중단되었습니다.',
-       'config-suhosin-max-value-length' => 'Suhosin(수호신)이 설치되었고 $1 바이트로 GET 매개 변수 길이를 제한하고 있습니다. 미디어위키의 ResourceLoader 구성 요소는 이 제한을 해결하지만 성능이 저하됩니다. 가능하면 php.ini의 suhosin.get.max_value_length에 1024 이상으로 설정하고 LocalSettings.php의 $wgResourceLoaderMaxQueryLength에 같은 값을 설정해야 합니다.',
+       'config-suhosin-max-value-length' => 'Suhosin이 설치되었고 $1 바이트로 GET 매개 변수인 <code>length</code>를 제한하고 있습니다.
+미디어위키의 ResourceLoader 구성 요소는 이 제한을 해결하지만 성능이 저하됩니다.
+가능하면 <code>php.ini</code>의 <code>suhosin.get.max_value_length</code>에 1024 이상으로 설정하고 <code>LocalSettings.php</code>의 <code>$wgResourceLoaderMaxQueryLength</code>에 같은 값을 설정해야 합니다.',
        'config-db-type' => '데이터베이스 종류:',
        'config-db-host' => '데이터베이스 호스트:',
-       'config-db-host-help' => 'ë\8d°ì\9d´í\84°ë² ì\9d´ì\8a¤ ì\84\9cë²\84ê°\80 ë\8b¤ë¥¸ ì\84\9cë²\84ì\97\90 ì\9e\88ì\9d\84 ê²½ì\9a° 여기에 호스트 이름이나 IP 주소를 입력하세요.
+       'config-db-host-help' => 'ë\8d°ì\9d´í\84°ë² ì\9d´ì\8a¤ ì\84\9cë²\84ê°\80 ë\8b¤ë¥¸ ì\84\9cë²\84ì\97\90 ì\9e\88ì\9c¼ë©´ 여기에 호스트 이름이나 IP 주소를 입력하세요.
 
-공유된 웹 호스팅을 사용하는 경우 호스팅 공급자는 올바른 호스트 이름을 설명해야 합니다.
+공유하는 웹 호스팅을 사용하고 있으면 호스팅 제공 업체는 호스트 이름을 설명하고 있을 것입니다.
 
\9c\88ë\8f\84 ì\84\9cë²\84ì\97\90 ì\84¤ì¹\98í\95\98ê³  MySQLì\9d\84 ì\82¬ì\9a©í\95  ê²½ì\9a° "localhost"ë\8a\94 ì\84\9cë²\84 ì\9d´ë¦\84ì\9c¼ë¡\9c ì\9e\91ë\8f\99í\95\98ì§\80 ì\95\8aì\9d\84 ì\88\98 ì\9e\88ì\8aµë\8b\88ë\8b¤. ê·¸ë \87ì§\80 ì\95\8aì\9c¼면 로컬 IP 주소로 "127.0.0.1"를 시도하세요.
\9c\88ë\8f\84 ì\84\9cë²\84ì\97\90 ì\84¤ì¹\98í\95\98ê³  MySQLì\9d\84 ì\82¬ì\9a©í\95\98ë©´ "localhost"ë\8a\94 ì\84\9cë²\84 ì\9d´ë¦\84ì\9c¼ë¡\9c ì\9e\91ë\8f\99í\95\98ì§\80 ì\95\8aì\9d\84 ì\88\98 ì\9e\88ì\8aµë\8b\88ë\8b¤. ê·¸ë \87ê²\8c ë\90\9cë\8b¤면 로컬 IP 주소로 "127.0.0.1"를 시도하세요.
 
-PostgreSQLì\9d\84 ì\82¬ì\9a©í\95  ê²½ì\9a° 유닉스 소켓을 통해 연결되도록 입력란을 비워두세요.',
+PostgreSQLì\9d\84 ì\82¬ì\9a©í\95\98ë©´ 유닉스 소켓을 통해 연결되도록 입력란을 비워두세요.',
        'config-db-host-oracle' => '데이터베이스 TNS:',
        'config-db-host-oracle-help' => '유효한 [http://download.oracle.com/docs/cd/B28359_01/network.111/b28317/tnsnames.htm 로컬 연결 이름]을 입력하세요. tnsnames.ora 파일이 이 설치에 보여야 합니다.<br />10g 이후의 클라이언트 라이브러리를 사용하는 경우 [http://download.oracle.com/docs/cd/E11882_01/network.112/e10836/naming.htm 쉬운 연결] 네이밍 메소드도 사용할 수 있습니다.',
        'config-db-wiki-settings' => '이 위키 식별',
@@ -10629,13 +10852,13 @@ PostgreSQL을 사용할 경우 유닉스 소켓을 통해 연결되도록 입력
        'config-db-name-help' => '위키를 식별하기 위한 이름을 선택하세요.
 공백이 없어야 합니다.
 
-공유된 웹 호스팅 사용하는 경우 호스팅 제공 업체가 특정 데이터베이스 이름을 제공하거나 제어판에서 데이터베이스를 만들 수 있도록 합니다.',
+공유하는 웹 호스팅 사용하면 호스팅 제공 업체가 특정 데이터베이스 이름을 제공하거나 관리 패널에서 데이터베이스를 만들 수 있습니다.',
        'config-db-name-oracle' => '데이터베이스 스키마:',
        'config-db-account-oracle-warn' => '데이터베이스 백엔드로 오라클을 설치하기 위해 지원하는 세 가지 시나리오가 있습니다:
 
 설치 과정의 일부로 데이터베이스 계정을 만들려면 설치를 위해 데이터베이스 계정으로 SYSDBA 역할을 가진 계정을 제공하고 웹 접근 계정에 대해 원하는 자격 증명을 지정하세요, 그렇지 않으면 수동으로 웹 접근 계정을 만들 수 있으며 (필요한 경우 권한 스키마 개체를 만들어야 합니다) 또는 다른 계정 두 개를 만들고 권한을 가진 하나의 웹 접근을 위한 제한된 하나를 제공할 수 있습니다.
 
\95\84ì\9a\94í\95\9c ê¶\8cí\95\9cì\9d\84 ê°\80ì§\84 ê³\84ì \95ì\9d\84 ë§\8cë\93\9cë\8a\94 ì\8a¤í\81¬ë¦½í\8a¸ë\8a\94 ì\9d´ ì\84¤ì¹\98ì\9d\98 "maintenance/oracle/" ë\94\94ë \89í\86 ë¦¬ì\97\90ì\84\9c ì°¾ì\9d\84 ì\88\98 ì\9e\88ì\8aµë\8b\88ë\8b¤. ì \9cí\95\9cë\90\9c ê³\84ì \95ì\9d\84 ì\82¬ì\9a©í\95\98ë©´ ê¸°ë³¸ ê³\84ì \95ì\9c¼ë¡\9c ëª¨ë\93  ê´\80리 ê¸°ë\8a¥ì\9d\84 ë¹\84í\99\9cì\84±í\99\94í\95  ê²\83ì\9d\84 ì\97¼ë\91\90í\95´ ë\91\90십시오.',
\95\84ì\9a\94í\95\9c ê¶\8cí\95\9cì\9d\84 ê°\80ì§\84 ê³\84ì \95ì\9d\84 ë§\8cë\93\9cë\8a\94 ì\8a¤í\81¬ë¦½í\8a¸ë\8a\94 ì\9d´ ì\84¤ì¹\98ì\9d\98 "maintenance/oracle/" ë\94\94ë \89í\86 ë¦¬ì\97\90ì\84\9c ì°¾ì\9d\84 ì\88\98 ì\9e\88ì\8aµë\8b\88ë\8b¤. ì \9cí\95\9cë\90\9c ê³\84ì \95ì\9d\84 ì\82¬ì\9a©í\95\98ë©´ ê¸°ë³¸ ê³\84ì \95ì\9c¼ë¡\9c ëª¨ë\93  ê´\80리 ê¸°ë\8a¥ì\9d\84 ë¹\84í\99\9cì\84±í\99\94í\95  ê²\83ì\9d\84 ì\9c ì\9d\98í\95\98십시오.',
        'config-db-install-account' => '설치를 위한 사용자 계정',
        'config-db-username' => '데이터베이스 사용자 이름:',
        'config-db-password' => '데이터베이스 비밀번호:',
@@ -10663,25 +10886,25 @@ PostgreSQL을 사용할 경우 유닉스 소켓을 통해 연결되도록 입력
 
 '''바이너리 모드'''에서는 미디어위키는 바이너리 필드의 데이터베이스에 UTF-8 텍스트를 저장합니다.
 MySQL의 UTF-8 모드를 보다 더 효율적이고 유니코드 문자의 전체 범위를 사용할 수 있습니다.
-'''UTF-8 모드'''에서는 MySQL은 데이터를 설정하는 어떤 문자열인지를 알 것이며, 표현하고 적절하게 그것을 변환할 수 있지만
-[//en.wikipedia.org/wiki/Mapping_of_Unicode_character_planes 기본 다국어 범위] 상의 문자를 저장하지 못하게 될 수 있습니다.",
+'''UTF-8 모드'''에서는 MySQL은 데이터를 설정하는 문자 집합을 알고 있기 때문에 적절하게 표현하고 변환할 수 있지만
+[//ko.wikipedia.org/wiki/%EC%9C%A0%EB%8B%88%EC%BD%94%EB%93%9C_%ED%8F%89%EB%A9%B4#.EA.B8.B0.EB.B3.B8_.EB.8B.A4.EA.B5.AD.EC.96.B4_.ED.8F.89.EB.A9.B4 기본 다국어 평면] 밖의 문자를 저장할 수 없습니다.",
        'config-mysql-old' => 'MySQL $1 이상이 필요하나 $2(이)가 있습니다.',
        'config-db-port' => '데이터베이스 포트:',
        'config-db-schema' => '미디어위키에 대한 스키마:',
-       'config-db-schema-help' => '이 스키마는 보통 괜찮습니다.
-필요로 알고 있을 경우에만 이를 바꾸세요.',
+       'config-db-schema-help' => '보통 이 스키마는 문제가 없습니다.
+필요한 경우에만 바꾸세요.',
        'config-pg-test-error' => "'''$1''' 데이터베이스에 연결할 수 없습니다: $2",
        'config-sqlite-dir' => 'SQLite 데이터 디렉토리:',
-       'config-sqlite-dir-help' => 'SQLite는 하나의 파일에 모든 데이터를 저장합니다.
+       'config-sqlite-dir-help' => "SQLite는 하나의 파일에 모든 데이터를 저장합니다.
 
-제공하는 디렉토리는 설치하는 동안 웹 서버에 의해 쓸 수 있어야 합니다.
+제공하는 디렉토리는 설치하는 동안 웹 서버 쓸 수 있어야 합니다.
 
-PHP 파일이 있는 곳을 우리가 이를 맡길 수 없는 이유는 웹을 통해 접근할 수 없다는 것입니다.
+이 디렉토리는 웹을 통해 접근할 수 '''없어야''' 하는데 PHP 파일이 있는 곳에 넣을 수 없는 것은 이 때문입니다.
 
-설치 마법사가 이과 함께 .htaccess 파일을 만들지만 거기서 실패하면 누군가는 원본 데이터베이스에 접근하는 데 실패합니다.
-원시 사용자 데이터(이메일 주소, 암호 해시) 뿐만 아니라 삭제된 개정판과 위키의 다른 제한된 데이터를 포함합니다.
+설치 프로그램은 <code>.htaccess</code> 파일을 작성하지만 이것이 실패하면 누군가가 원본 데이터베이스에 접근할 수 있습니다.
+데이터베이스는 원본 사용자 데이터(이메일 주소, 해시한 비밀번호) 뿐만 아니라 삭제된 판과 위키의 다른 제한된 데이터를 포함합니다.
 
-<code>/var/lib/mediawiki/yourwiki</code>와 같이 모두 다른 곳에서 데이터베이스를 넣어보도록 하세요.',
+예를 들어 <code>/var/lib/mediawiki/yourwiki</code>와 같이 다른 곳에 데이터베이스를 넣는 것이 좋습니다.",
        'config-oracle-def-ts' => '기본 테이블공간:',
        'config-oracle-temp-ts' => '임시 테이블공간:',
        'config-type-oracle' => '오라클',
 
 데이터베이스 시스템이 표시되지 않을 때 아래에 나열된 다음 지원을 활성화하려면 위의 링크된 지시에 따라 설치해볼 수 있습니다.',
        'config-support-mysql' => '* $1은 미디어위키의 기본 대상으로 가장 잘 지원합니다. ([http://www.php.net/manual/en/mysql.installation.php MySQL을 지원하여 PHP를 컴파일하는 방법])',
-       'config-support-postgres' => '* $1은 MySQL의 대안으로 인기있는 오픈 소스 데이터베이스 시스템입니다. ([http://www.php.net/manual/en/pgsql.installation.php PostgreSQL을 지원하여 PHP를 컴파일하는 방법]) 몇가지 사소한 해결하지 못한 버그가 있을 수 있으며, 이를 제작 환경에서 사용하지 않는 것이 좋습니다.',
+       'config-support-postgres' => '* $1은 MySQL의 대안으로 인기 있는 오픈 소스 데이터베이스 시스템입니다. ([http://www.php.net/manual/en/pgsql.installation.php PostgreSQL을 지원하여 PHP를 컴파일하는 방법]) 몇가지 사소한 해결하지 못한 버그가 있을 수 있으며, 이를 제작 환경에서 사용하지 않는 것이 좋습니다.',
        'config-support-sqlite' => '* $1는 매우 잘 지원하는 가벼운 데이터베이스 시스템입니다. ([http://www.php.net/manual/en/pdo.installation.php SQLite를 지원하여 PHP를 컴파일하는 방법], PDO 사용)',
        'config-support-oracle' => '* $1은 상용 엔터프라이스 데이터베이스입니다. ([http://www.php.net/manual/en/oci8.installation.php OCI8을 지원하여 PHP를 컴파일하는 방법])',
-       'config-support-ibm_db2' => '* $1는 상용 엔터프라이즈 데이터베이스입니다.',
+       'config-support-ibm_db2' => '* $1는 상용 엔터프라이즈 데이터베이스입니다.([http://www.php.net/manual/en/ibm-db2.installation.php IBM DB2를 지원하여 PHP를 컴파일하는 방법])',
        'config-header-mysql' => 'MySQL 설정',
        'config-header-postgres' => 'PostgreSQL 설정',
        'config-header-sqlite' => 'SQLite 설정',
@@ -10716,39 +10939,39 @@ ASCII 글자 (a-z, A-Z), 숫자 (0-9), 밑줄 (_)과 하이픈 (-)만 사용하
 호스트, 계정 이름과 비밀번호를 확인하고 다시 시도하세요.',
        'config-invalid-schema' => '미디어위키 "$1"에 대한 스키마가 잘못됐습니다.
 ASCII 글자 (a-z, A-Z), 숫자 (0-9), 밑줄 (_)과 하이픈 (-)만 사용하세요.',
-       'config-db-sys-create-oracle' => '설치 마법사는 새 계정을 만들기 위한 SYSDBA 계정만을 지원합니다.',
+       'config-db-sys-create-oracle' => '설치 프로그램은 새 계정을 만들기 위한 SYSDBA 계정만을 지원합니다.',
        'config-db-sys-user-exists-oracle' => '"$1" 사용자 계정이 이미 존재합니다. SYSDBA는 새 계정을 만드는 데에만 사용할 수 있습니다!',
        'config-postgres-old' => 'PostgreSQL $1 이상이 필요하나 $2(이)가 있습니다.',
        'config-sqlite-name-help' => '위키를 식별하기 위한 이름을 선택하세요.
 공백이나 하이픈을 사용하지 마십시오.
 SQLite 데이터 파일 이름에 사용됩니다.',
-       'config-sqlite-parent-unwritable-group' => '<code><nowiki>$1</nowiki></code> 데이터 디렉토리를 만들 수 없으며 <code><nowiki>$2</nowiki></code> 상위 디렉토리에 웹 서버에 의해 쓸 수 없기 때문입니다.
+       'config-sqlite-parent-unwritable-group' => '<code><nowiki>$1</nowiki></code> 데이터 디렉토리를 만들 수 없으며 웹 서버는 <code><nowiki>$2</nowiki></code> 상위 디렉토리에 쓸 수 없기 때문입니다.
 
-설치 마법사는 웹 서버로 실행중인 사용자를 결정할 수 없습니다.
-ê³\84ì\86\8dí\95\98려면 ì\9d´ë¥¼ 쓸 수 있는 <code><nowiki>$3</nowiki></code> 디렉토리를 만드세요.
+설치 프로그램은 웹 서버로 실행중인 사용자를 지정할 수 없습니다.
+ê³\84ì\86\8dí\95\98려면 ì\9b¹ ì\84\9cë²\84ê°\80 쓸 수 있는 <code><nowiki>$3</nowiki></code> 디렉토리를 만드세요.
 유닉스/리눅스 시스템에서의 수행:
 
 <pre>cd $2
 mkdir $3
 chgrp $4 $3
 chmod g+w $3</pre>',
-       'config-sqlite-parent-unwritable-nogroup' => '<code><nowiki>$1</nowiki></code> 데이터 디렉토리를 만들 수 없으며 <code><nowiki>$2</nowiki></code> 상위 디렉토리에 웹 서버에 의해 쓸 수 없기 때문입니다.
+       'config-sqlite-parent-unwritable-nogroup' => '<code><nowiki>$1</nowiki></code> 데이터 디렉토리를 만들 수 없으며 웹 서버는 <code><nowiki>$2</nowiki></code> 상위 디렉토리에 쓸 수 없기 때문입니다.
 
-설치 마법사는 웹 서버로 실행중인 사용자를 결정할 수 없습니다.
-ê³\84ì\86\8dí\95\98려면 ì\9d´(ì\99\80 ê¸°í\83\80!)를 전역으로 쓸 수 있는 <code><nowiki>$3</nowiki></code> 디렉토리를 만드세요.
+설치 프로그램은 웹 서버로 실행중인 사용자를 지정할 수 없습니다.
+ê³\84ì\86\8dí\95\98려면 ì\9b¹ ì\84\9cë²\84\99\80 ê¸°í\83\80!)ê°\80 전역으로 쓸 수 있는 <code><nowiki>$3</nowiki></code> 디렉토리를 만드세요.
 유닉스/리눅스 시스템에서의 수행:
 
 <pre>cd $2
 mkdir $3
 chmod a+w $3</pre>',
-       'config-sqlite-mkdir-error' => '"$1" 데이터 디렉토리를 만드는 중 오류났습니다.
+       'config-sqlite-mkdir-error' => '"$1" 데이터 디렉토리를 만드는 중 오류가 났습니다.
 경로를 확인하고 다시 시도하세요.',
        'config-sqlite-dir-unwritable' => '"$1" 디렉토리에 쓸 수 없습니다.
 웹 서버를 쓸 수 있도록 권한을 바꾸고 다시 시도하세요.',
        'config-sqlite-connection-error' => '$1.
 
 호스트, 계정 이름과 비밀번호를 확인하고 다시 시도하세요.',
-       'config-sqlite-readonly' => '<code>$1</code> í\8c\8cì\9d¼ì\9d\80 ì\93°ê¸°ê°\80 ë¶\88ê°\80ë\8a¥í\95©니다.',
+       'config-sqlite-readonly' => '<code>$1</code> í\8c\8cì\9d¼ì\9d\80 ì\93¸ ì\88\98 ì\97\86ì\8aµ니다.',
        'config-sqlite-cant-create-db' => '<code>$1</code> 데이터베이스 파일을 만들 수 없습니다.',
        'config-sqlite-fts3-downgrade' => 'PHP가 FTS3 지원이 없어졌습니다. 테이블을 다운그레이드하세요.',
        'config-can-upgrade' => "이 데이터베이스에 미디어위키 테이블이 있습니다.
@@ -10758,12 +10981,12 @@ chmod a+w $3</pre>',
 이제 [$1 위키를 시작]할 수 있습니다.
 
 만약 <code>LocalSettings.php</code> 파일을 다시 만들기를 원하면 아래의 버튼을 클릭하세요.
\9d´ê²\83ì\9d\80 ì\9c\84í\82¤ì\97\90 ë¬¸ì \9cê°\80 ì\9e\88ì§\80 ì\95\8aë\8a\94 í\95\9c '''ê¶\8cì\9e¥í\95\98ì§\80 ì\95\8aì\8aµë\8b\88ë\8b¤'''.",
+위키에 문제가 있지 않는 한 '''권장하지 않습니다'''.",
        'config-upgrade-done-no-regenerate' => '업그레이드가 완료되었습니다.
 
 이제 [$1 위키를 시작]할 수 있습니다.',
-       'config-regenerate' => 'LocalSettings.php 다시 만들기 →',
-       'config-show-table-status' => 'SHOW TABLE STATUS 쿼리 실패!',
+       'config-regenerate' => '<code>LocalSettings.php</code> 다시 만들기 →',
+       'config-show-table-status' => '<code>SHOW TABLE STATUS</code> 쿼리를 실패했습니다!',
        'config-unknown-collation' => "'''경고:''' 데이터베이스가 인식하지 않는 정렬을 사용하고 있습니다.",
        'config-db-web-account' => '웹 접근을 위한 데이터베이스 계정',
        'config-db-web-help' => '위키의 일반적인 작업 중에 데이터베이스 서버에 연결하는 데 사용할 웹 서버에 대한 계정 이름과 비밀번호를 선택하세요.',
@@ -10781,7 +11004,7 @@ chmod a+w $3</pre>',
 
 MySQL 설치가 InnoDB를 지원한다면 그 선택 대신에 InnoDB를 선택할 것을 매우 권장합니다.
 MySQL 설치가 InnoDB를 지원하지 않는다면 아마도 업그레이드를 해야 할 수도 있습니다.",
-       'config-mysql-engine-help' => "'''InnoDB'''는 동시적인 지원에 좋기 때문에 거의 항상 최고의 옵션입니다.
+       'config-mysql-engine-help' => "'''InnoDB'''는 동시적인 지원에 좋기 때문에 대부분 최고의 옵션입니다.
 
 '''MyISAM'''은 단일 사용자 또는 읽기 전용 설치에 빠를 수 있습니다.
 MyISAM 데이터베이스는 InnoDB 데이터베이스보다 더 자주 손실될 수 있습니다.",
@@ -10790,8 +11013,8 @@ MyISAM 데이터베이스는 InnoDB 데이터베이스보다 더 자주 손실
        'config-mysql-utf8' => 'UTF-8',
        'config-mysql-charset-help' => "'''바이너리 모드'''에서는 미디어위키는 바이너리 필드의 데이터베이스에 UTF-8 텍스트를 저장합니다.
 MySQL의 UTF-8 모드를 보다 더 효율적이고 유니코드 문자의 전체 범위를 사용할 수 있습니다.
-'''UTF-8 모드'''에서는 MySQL은 데이터를 설정하는 어떤 문자열인지를 알 것이며, 표현하고 적절하게 그것을 변환할 수 있지만
-[//en.wikipedia.org/wiki/Mapping_of_Unicode_character_planes 기본 다국어 범위] 상의 문자를 저장하지 못하게 될 수 있습니다.",
+'''UTF-8 모드'''에서는 MySQL은 데이터를 설정하는 문자 집합을 알고 있기 때문에 적절하게 표현하고 변환할 수 있지만
+[//ko.wikipedia.org/wiki/%EC%9C%A0%EB%8B%88%EC%BD%94%EB%93%9C_%ED%8F%89%EB%A9%B4#.EA.B8.B0.EB.B3.B8_.EB.8B.A4.EA.B5.AD.EC.96.B4_.ED.8F.89.EB.A9.B4 기본 다국어 평면] 밖의 문자를 저장할 수 없습니다.",
        'config-ibm_db2-low-db-pagesize' => "DB2 데이터베이스에 부족한 페이지 크기가 기본 테이블 공간에 있습니다. 페이지 크기는 '''32K''' 이상이어야 합니다.",
        'config-site-name' => '위키 이름:',
        'config-site-name-help' => '브라우저 제목 표시줄과 다른 여러 곳에 나타납니다.',
@@ -10835,23 +11058,23 @@ MySQL의 UTF-8 모드를 보다 더 효율적이고 유니코드 문자의 전
        'config-optional-continue' => '더 많은 질문을 물어보세요.',
        'config-optional-skip' => '지겨워요, 그냥 위키를 설치할래요.',
        'config-profile' => '사용자 권한 프로필:',
-       'config-profile-wiki' => '평범한 위키',
+       'config-profile-wiki' => '열린 위키',
        'config-profile-no-anon' => '계정 만들기 필요',
-       'config-profile-fishbowl' => '승인된 편집자만 이용 가능',
+       'config-profile-fishbowl' => '승인된 편집자만',
        'config-profile-private' => '비공개 위키',
-       'config-profile-help' => "ì\9c\84í\82¤ë\8a\94 ë§\8eì\9d\80 ì\82¬ë\9e\8cë\93¤ì\9d´ ê°\80ë\8a¥í\95\9c í\95\9c í\95´ë\8b¹ ì\9c\84í\82¤ë¥¼ í\8e¸ì§\91í\95  ë\95\8c 가장 뛰어난 역할을 합니다.
-미ë\94\94ì\96´ì\9c\84í\82¤ì\97\90ì\84\9cë\8a\94 ìµ\9cê·¼ ë°\94ë\80\9cì\9d\84 ê²\80í\86 í\95\98ê³ , ì\84 í\95\98ê±°ë\82\98 ì\95\85ì\9d\98ì \81ì\9d¸ ì\82¬ì\9a©ì\9e\90ì\9d\98 ëª¨ë\93  손실을 되돌리는 것이 쉽습니다.
+       'config-profile-help' => "ì\9c\84í\82¤ë\8a\94 ë§\8eì\9d\80 ì\82¬ë\9e\8cë\93¤ì\9d´ ê°\80ë\8a¥í\95\9c í\95\9c í\8e¸ì§\91í\95  ì\88\98 ì\9e\88ë\8f\84ë¡\9d í\95\98ë©´ 가장 뛰어난 역할을 합니다.
+미ë\94\94ì\96´ì\9c\84í\82¤ì\97\90ì\84\9cë\8a\94 ìµ\9cê·¼ ë°\94ë\80\9cì\9d\84 ê²\80í\86 í\95\98기 ì\89½ê³ , ì\84 í\95\98ê±°ë\82\98 ì\95\85ì\9d\98ì \81ì\9d¸ ì\82¬ì\9a©ì\9e\90ì\9d\98 ì\96´ë\96 í\95\9c 손실을 되돌리는 것이 쉽습니다.
 
-그러나 많은 사람들이 미디어위키가 다양한 역할로 유용하지만, 때로는 모든 사람에게 위키 방식의 장점을 모두 설득하기 쉽지 않을 지도 모릅니다.
+그러나 많은 사람이 미디어위키는 다양한 역할로 유용하지만, 때로는 모든 사람에게 위키 방식의 장점을 설득하기 쉽지 않을 지도 모릅니다.
 그래서 선택할 수 있습니다.
 
-'''{{int:config-profile-wiki}}''' 로그인하지 않고도 누구나 편집할 수 있습니다.
-'''{{int:config-profile-no-anon}}'''는 각 편집에 추가적으로 강한 책임성을 제공하지만, 부담 없는 기여를 저해할 수도 있습니다.
+'''{{int:config-profile-wiki}}''' 모델은 로그인하지 않고도 누구나 편집할 수 있습니다.
+'''{{int:config-profile-no-anon}}'''인 위키는 각 편집에 추가적으로 강한 책임을 제공하지만, 부담 없는 기여를 저해할 수도 있습니다.
 
-'''{{int:config-profile-fishbowl}}''' 같은 경우는 승인된 사용자만 편집할 수 있지만, 대중은 역사를 포함하여 페이지를 볼 수 있습니다.
-'''{{int:config-profile-private}}'''는 승인된 사용자만 같은 그룹에서 편집할 수 있고 볼 수 있습니다.
+'''{{int:config-profile-fishbowl}}''' 시나리오는 승인된 사용자만 편집할 수 있지만, 대중은 역사를 포함하여 문서를 볼 수 있습니다.
+'''{{int:config-profile-private}}'''는 승인된 사용자만 문서를 볼 수 있으며 해당 그룹을 편집할 수 있습니다.
 
-더 복잡한 사용자 권한을 설정하여 설치한 후 사용할 수 있도록 하려면 [//www.mediawiki.org/wiki/Manual:User_rights 관련 매뉴얼 항목]을 참고하세요.",
+더 복잡한 사용자 권한을 설정은 설치한 후 사용할 수 있으며 [//www.mediawiki.org/wiki/Manual:User_rights 관련 설명서 항목]을 참고하세요.",
        'config-license' => '저작권 및 라이선스:',
        'config-license-none' => '라이선스 바닥글 없음',
        'config-license-cc-by-sa' => '크리에이티브 커먼즈 저작자표시-동일조건변경허락',
@@ -10861,15 +11084,15 @@ MySQL의 UTF-8 모드를 보다 더 효율적이고 유니코드 문자의 전
        'config-license-gfdl' => 'GNU 자유 문서 사용 허가서 1.3 이상',
        'config-license-pd' => '퍼블릭 도메인',
        'config-license-cc-choose' => '다른 크리에이티브 커먼즈 라이선스 선택',
-       'config-license-help' => '많은 공개 위키는 모든 기여를 [http://freedomdefined.org/Definition 자유 라이선스] 하에 넣습니다.
\9d´ë\9f´ ê²½ì\9a° 커뮤니티 소유권의 이해를 할 수 있도록 하고 장기적인 기여를 장려합니다.
+       'config-license-help' => "많은 공개 위키는 모든 기여를 [http://freedomdefined.org/Definition 자유 라이선스] 하에 넣습니다.
\9d´ë \87ê²\8c í\95\98ë©´ 커뮤니티 소유권의 이해를 할 수 있도록 하고 장기적인 기여를 장려합니다.
 일반적으로 개인 또는 회사 위키에 대해서는 필요하지 않습니다.
 
-위키백과의 텍스트를 사용할 수 있도록 하고 위키백과가 위키에서 복사한 텍스트를 사용할 수 있도록 원한다면 크리에이티브 커먼즈 저작자표시-동일조건변경허락으로 선택해야 합니다.
+위키백과의 텍스트를 사용할 수 있도록 하고 위키백과가 위키에서 복사한 텍스트를 사용할 수 있도록 원한다면 '''크리에이티브 커먼즈 저작자표시-동일조건변경허락'''으로 선택해야 합니다.
 
 위키백과는 이전에 GNU 자유 문서 사용 허가서를 사용했습니다.
-GFDL은 유효한 라이선스이지만 이해하기 어렵습니다.
-GFDL 하에 라이선스 내용을 재사용하는 것도 어렵습니다.',
+GFDL은 유효한 라이선스이지만 내용을 이해하기 어렵습니다.
+GFDL 하에 사용을 허가한 내용을 재사용하는 것도 어렵습니다.",
        'config-email-settings' => '이메일 설정',
        'config-enable-email' => '발신 이메일 활성화',
        'config-enable-email-help' => '이메일을 작동하려면 [http://www.php.net/manual/en/mail.configuration.php PHP의 메일 설정]을 올바르게 설정해야 합니다.
@@ -10881,7 +11104,7 @@ GFDL 하에 라이선스 내용을 재사용하는 것도 어렵습니다.',
        'config-email-watchlist' => '주시문서 목록 알림 활성화',
        'config-email-watchlist-help' => '환경 설정에서 활성화한 경우 사용자가 주시한 문서에 대한 알림을 받도록 활성화합니다.',
        'config-email-auth' => '이메일 인증 활성화',
-       'config-email-auth-help' => "이 설정이 활성화되어 있으면 사용자는 이메일 주소를 설정하거나 바꿀 때마다 그들에게 보낸 링크를 사용하여 이메일 주소를 확인해야 합니다.
+       'config-email-auth-help' => "이 설정이 활성화되어 있으면 사용자는 이메일 주소를 설정하거나 바꿀 때마다 링크를 사용하여 이메일 주소를 확인해야 합니다.
 인증된 이메일 주소만 다른 사용자로부터의 이메일이나 바뀜 알림 이메일을 받을 수 있습니다.
 이메일 기능의 남용 가능성이 있기 때문에 이 옵션을 설정하는 것은 공개 위키에서 '''권장'''합니다.",
        'config-email-sender' => '반송 이메일 주소',
@@ -10891,7 +11114,7 @@ GFDL 하에 라이선스 내용을 재사용하는 것도 어렵습니다.',
        'config-upload-settings' => '그림과 파일 올리기',
        'config-upload-enable' => '파일 올리기 활성화',
        'config-upload-help' => '파일 올리기는 서버에 잠재적인 보안 위험에 쉽게 노출될 수 있습니다.
\9e\90ì\84¸í\95\9c ë\82´ì\9a©ì\9d\80 ë§¤ë\89´ì\96¼ì\9d\98 [//www.mediawiki.org/wiki/Manual:Security ë³´ì\95\88 ë¬¸ë\8b¨]ì\9d\84 ì\9d½ì\96´ë³´세요.
\9e\90ì\84¸í\95\9c ë\82´ì\9a©ì\9d\80 ë§¤ë\89´ì\96¼ì\9d\98 [//www.mediawiki.org/wiki/Manual:Security ë³´ì\95\88 ë¬¸ë\8b¨]ì\9d\84 ì°¸ê³ í\95\98세요.
 
 파일 올리기를 활성화하려면 미디어위키의 루트 디렉토리에 있는 <code>images</code> 하위 디렉토리에서 웹 서버가 기록할 수 있도록 모드를 바꿉니다.
 그 다음 이 옵션을 활성화합니다.',
@@ -10899,10 +11122,10 @@ GFDL 하에 라이선스 내용을 재사용하는 것도 어렵습니다.',
        'config-upload-deleted-help' => '삭제된 파일을 보관할 디렉토리를 선택하세요.
 이상적으로 웹에서 접근할 수 없게 해야 합니다.',
        'config-logo' => '로고 URL:',
-       'config-logo-help' => '미디어위키 기본 스킨은 사이드바 메뉴 위에 135×160픽셀의 로고를 포함하고 있습니다.
+       'config-logo-help' => '미디어위키의 기본 스킨은 사이드바 메뉴 위에 135×160 픽셀의 로고를 포함하고 있습니다.
 적당한 크기로 이미지를 올리고 URL을 여기에 입력하세요.
 
-ë¡\9cê³  ì\82¬ì\9a©ì\9d\84 ì\9b\90í\95\98ì§\80 ì\95\8aì\9c¼ë©´ ì\9d´ ì\83\81ì\9e\90를 ë¹\84ì\9b\8c ë\91\90ì\8b­ì\8b\9cì\98¤.',
+ë¡\9cê³  ì\82¬ì\9a©ì\9d\84 ì\9b\90í\95\98ì§\80 ì\95\8aì\9c¼ë©´ ì\9d´ ì\83\81ì\9e\90를 ë¹\84ì\9a°ì\84¸ì\9a\94.',
        'config-instantcommons' => '인스턴트 공용 활성화',
        'config-instantcommons-help' => '[//www.mediawiki.org/wiki/InstantCommons 인스턴트 공용]은 [//commons.wikimedia.org/ 위키미디어 공용] 사이트에서 찾을 수 있는 그림, 소리 및 다른 미디어를 위키에서 사용할 수 있도록 하는 기능입니다.
 이렇게 하려면 미디어위키가 인터넷에 접근해야합니다.
@@ -10936,7 +11159,7 @@ GFDL 하에 라이선스 내용을 재사용하는 것도 어렵습니다.',
        'config-install-alreadydone' => "'''경고:''' 이미 미디어위키를 설치했고 다시 설치하려고 합니다.
 다음 페이지에서 진행하세요.",
        'config-install-begin' => '"{{int:config-continue}}"을 누르면 미디어위키의 설치를 시작합니다.
-그래도 바꾸는 것을 원한다면 뒤로를 누릅니다.',
+그래도 바꾸는 것을 원한다면 "{{int:config-back}}"를 누르세요.',
        'config-install-step-done' => '완료',
        'config-install-step-failed' => '실패',
        'config-install-extensions' => '확장 기능을 포함하는 중',
@@ -10954,7 +11177,7 @@ GFDL 하에 라이선스 내용을 재사용하는 것도 어렵습니다.',
 
 현재 미디어위키는 테이블을 웹 사용자가 소유해야 합니다. 다른 웹 계정 이름을 지정하거나 "뒤로"를 클릭하고 적절한 권한의 설치할 사용자를 지정하세요.',
        'config-install-user' => '데이터베이스 사용자를 만드는 중',
-       'config-install-user-alreadyexists' => '"$1" ì\82¬ì\9a©ì\9e\90ê°\80 ì\9d´ë¯¸ ì\9e\88ì\9d\8c',
+       'config-install-user-alreadyexists' => '"$1" ì\82¬ì\9a©ì\9e\90ê°\80 ì\9d´ë¯¸ ì\9e\88ì\8aµë\8b\88ë\8b¤',
        'config-install-user-create-failed' => '"$1" 사용자 만드는 중 실패: $2',
        'config-install-user-grant-failed' => '"$1" 사용자에 대한 권한 부여 실패: $2',
        'config-install-user-missing' => '지정한 "$1" 사용자가 존재하지 않습니다.',
@@ -10980,7 +11203,7 @@ GFDL 하에 라이선스 내용을 재사용하는 것도 어렵습니다.',
        'config-install-done' => "'''축하합니다!'''
 미디어위키가 성공적으로 설치되었습니다.
 
-설치 마법사가 <code>LocalSettings.php</code> 파일을 만들었습니다.
+설치 프로그램이 <code>LocalSettings.php</code> 파일을 만들었습니다.
 모든 설정이 포함되어 있습니다.
 
 파일을 다운로드하여 위키 설치의 거점에 넣어야 합니다. (index.php와 같은 디렉토리) 다운로드가 자동으로 시작됩니다.
@@ -10989,20 +11212,21 @@ GFDL 하에 라이선스 내용을 재사용하는 것도 어렵습니다.',
 
 $3
 
-'''참고''': ì§\80ê¸\88 ì\9d´ë \87ê²\8c í\95\98ì§\80 ì\95\8aì\9c¼ë©´, ì\9d´ ì\84¤ì \95 í\8c\8cì\9d¼ì\9d\84 ë\8b¤ì\9a´ë¡\9cë\93\9cí\95\98ì§\80 ì\95\8aê³  ì\84¤ì¹\98를 ì¢\85ë£\8cí\95  ê²½ì\9a° ë§\8cë\93¤ì\96´ì§\84 ì\84¤ì \95 파일은 나중에 사용할 수 없습니다.
+'''참고''': ì\9d´ ì\83\9dì\84±í\95\9c ì\84¤ì \95 í\8c\8cì\9d¼ì\9d\84 ë\8b¤ì\9a´ë¡\9cë\93\9cí\95\98ì§\80 ì\95\8aê³  ì\84¤ì¹\98를 ë\81\9dë\82´ë©´ ì\9d´ 파일은 나중에 사용할 수 없습니다.
 
 완료되었으면 '''[$2 위키에 들어갈 수 있습니다]'''.",
-       'config-download-localsettings' => 'LocalSettings.php 다운로드',
+       'config-download-localsettings' => '<code>LocalSettings.php</code> 다운로드',
        'config-help' => '도움말',
        'config-nofile' => '"$1" 파일을 찾을 수 없습니다. 이미 삭제되었나요?',
        'mainpagetext' => "'''미디어위키가 성공적으로 설치되었습니다.'''",
-       'mainpagedocfooter' => '[//meta.wikimedia.org/wiki/Help:Contents 이곳]에서 위키 프로그램에 대한 정보를 얻을 수 있습니다.
+       'mainpagedocfooter' => '[//meta.wikimedia.org/wiki/Help:Contents 이곳]에서 위키 소프트웨어에 대한 정보를 얻을 수 있습니다.
 
 == 시작하기 ==
 
-* [//www.mediawiki.org/wiki/Manual:Configuration_settings 설정하기]
+* [//www.mediawiki.org/wiki/Manual:Configuration_settings 설정하기 목록]
 * [//www.mediawiki.org/wiki/Manual:FAQ 미디어위키 FAQ]
-* [https://lists.wikimedia.org/mailman/listinfo/mediawiki-announce 미디어위키 발표 메일링 리스트]',
+* [https://lists.wikimedia.org/mailman/listinfo/mediawiki-announce 미디어위키 발표 메일링 리스트]
+* [//www.mediawiki.org/wiki/Localisation#Translation_resources 내 언어로 미디어위키 지역화]',
 );
 
 /** Karachay-Balkar (къарачай-малкъар)
@@ -11027,21 +11251,21 @@ $messages['ksh'] = array(
        'config-desc' => 'Et Projramm för Mediwiki opzesäze.',
        'config-title' => 'MediaWiki $1 opsäze',
        'config-information' => 'Enfomazjuhn',
-       'config-localsettings-upgrade' => 'De Dattei <code lang="en">LocalSettings.php</code> es ald doh.
+       'config-localsettings-upgrade' => 'De Dattei <code lang="en"><code>LocalSettings.php</code></code> es ald doh.
 De Projramme vum Wiki künne op der neußte Shtand jebraat wääde:
 Donn doför dä Wäät vum <code lang="en">$wgUpgradeKey</code> en dat heh Feld enjävve.
-Do fenggs_et en dä Dattei <code lang="en">LocalSettings.php</code> om ẞööver.',
-       'config-localsettings-cli-upgrade' => 'En Dattei <code lang="en">LocalSettings.php</code> es jefonge woode.
+Do fenggs_et en dä Dattei <code lang="en"><code>LocalSettings.php</code></code> om ẞööver.',
+       'config-localsettings-cli-upgrade' => 'En Dattei <code lang="en"><code>LocalSettings.php</code></code> es jefonge woode.
 Öm et Wiki_Projramm op ene neue Shtand ze bränge, donn <code lang="en">update.php</code> oproofe.',
        'config-localsettings-key' => 'Der Schlößel för et Projramm op ene neue Schtand ze bränge:',
        'config-localsettings-badkey' => 'Dinge Schlößel paß nit.',
        'config-upgrade-key-missing' => 'Mer han jefonge, dat MediaWiki ald enschtalleed es.
-Üm de Projramme un Daate o der neue Schtand bränge ze künne, dunn aan et Engk vun dä Dattei <code lang="en">LocalSettings.php</code> op dämm ẞööver:
+Üm de Projramme un Daate o der neue Schtand bränge ze künne, dunn aan et Engk vun dä Dattei <code lang="en"><code>LocalSettings.php</code></code> op dämm ẞööver:
 
 $1
 
 aanhange.',
-       'config-localsettings-incomplete' => 'Mer han en Dattei <code lang="en">LocalSettings.php:</code> jefonge, ävver di schingk nit kumplätt ze sin.
+       'config-localsettings-incomplete' => 'Mer han en Dattei <code lang="en"><code>LocalSettings.php</code>:</code> jefonge, ävver di schingk nit kumplätt ze sin.
 De Varijable <code lang="en">$1</code> es nit jesatz.
 Bes esu joot, un donn di Dattei esu aanpaße, dat se jesaz ea, un dann donn op „{{int:config-continue}}“ klecke.',
        'config-localsettings-connection-error' => 'Ene Fähler es opjetrodde wi mer en Verbendung noh de Datebangk opmaache wullte met dä Enshtellunge uß dä Dattei <code lang="en">LocalSettings</code> udder uß dä Dattei <code lang="en">LocalSettings</code> un et hät nit jeflupp. Bes esu joot un dat repareere un versöhg et dann norr_ens.
@@ -11179,7 +11403,7 @@ Heh jeihd et nit wigger.',
        'config-using531' => 'MediaWiki läuf nit met PHP $1 zosamme wääje enem [//bugs.php.net/bug.php?id=50394 Fähler em Zosammehang met Parrameetere för <code lang="en">__call()</code>].
 Jangk op de Version 5.3.2 vum <i lang="en">PHP</i> ov dohnoh, udder op de Version 5.3.0 udder dovöör, öm dat Problem ze ömjonn.
 Heh jeiht et nit wigger.',
-       'config-suhosin-max-value-length' => '<i lang="en">Suhosin</i> es enschtalleet. Dröm kann ene <code lang="en">GET</code>-Parrameeter nit övver {{PLURAL:$1|ei Byte|$q Bytes|noll Byte}} lang wääde. En MediaWiki singe <i lang="en">ResourceLoader</i> kütt doh zwa drömeröm, ävver dat brems. Wann müjelesch, doht <code lang="en">suhosin.get.max_value_length</code> en dä Dattei <code lang="en">php.ini</code> op 1024 Bytes udder drövver enschtälle. un dann moß <code lang="en">$wgResourceLoaderMaxQueryLength</code> en dä Dattei <code lang="en">LocalSettings.php</code> op däsälve Wäät jesaz wääde.',
+       'config-suhosin-max-value-length' => '<i lang="en">Suhosin</i> es enschtalleet. Dröm kann ene <code lang="en">GET</code>-Parrameeter nit övver {{PLURAL:$1|ei Byte|$q Bytes|noll Byte}} lang wääde. En MediaWiki singe <i lang="en">ResourceLoader</i> kütt doh zwa drömeröm, ävver dat brems. Wann müjelesch, doht <code lang="en">suhosin.get.max_value_length</code> en dä Dattei <code lang="en">php.ini</code> op 1024 Bytes udder drövver enschtälle. un dann moß <code lang="en">$wgResourceLoaderMaxQueryLength</code> en dä Dattei <code lang="en">LocalSettings.php</code> op däsälve Wäät jesaz wääde.', # Fuzzy
        'config-db-type' => 'De Zoot Daatebangk:',
        'config-db-host' => 'Dä Name vun däm Rääschner met dä Daatebangk:',
        'config-db-host-help' => 'Wann Dinge ẞööver för de Daatebangk ob enem andere Rääschner es, donn heh dämm singe Name udder dämm sing <i lang="en">IP</i>-Addräß enjävve.
@@ -11271,7 +11495,7 @@ Wann dat Daatebangk_Süßteem, wat De nämme wells, onge nit dobei es, dann donn
        'config-support-postgres' => '* <i lang="en">$1</i> es e bikannt Daatebangksüßteem met offe Quälltäxde, un en och en Wahl nävve <i lang="en">MySQL</i> ([http://www.php.net/manual/de/pgsql.installation.php Aanleidung för et Övversäze un Enreeschte von PHP met <i lang="en">PostgreSQL</i> dobei, op Deutsch]) Et sinn_er ävver paa klein Fählershe bekannt, um kunne dat em Momang för et reschtijje Werke nit emfähle.',
        'config-support-sqlite' => '* <i lang="en">$1</i> es e eijfach Daatebangksüßteem, wat joot ongershtöz weed. ([http://www.php.net/manual/de/pdo.installation.php Aanleidong för et Övversäze un Enreeschte von PHP met <i lang="en">SQLite</i> dobei, op Deutsch])',
        'config-support-oracle' => '* <i lang="en">$1</i> es e jeschäfflesch Daatebangksüßteem för Ferme. ([http://www.php.net/manual/de/oci8.installation.php Aanleidong för et Övversäze un Enreeschte von PHP met <i lang="en">OCI8</i> dobei, op Deutsch])',
-       'config-support-ibm_db2' => '* $1 es en Datebengk för et Jeschäff un fö Ongernehme.',
+       'config-support-ibm_db2' => '* $1 es en Datebengk för et Jeschäff un fö Ongernehme.', # Fuzzy
        'config-header-mysql' => 'De Enshtällunge för de <i lang="en">MySQL</i> Daatebangk',
        'config-header-postgres' => 'De Enshtällunge för de <i lang="en">PostgreSQL</i> Daatebangk',
        'config-header-sqlite' => 'De Enshtällunge för de <i lang="en">SQLite</i> Daatebangk',
@@ -11335,7 +11559,7 @@ Dat dom_mer ävver '''nit vörschlonn'''em Jääjedeil, ußer, wann et Probleme
 
 Mer kann dat Wiki jäz [$1 bruche].',
        'config-regenerate' => 'Donn de Dattei <code lang="en">LocalSettings.php</code> neu opsäze →',
-       'config-show-table-status' => 'Et Kommando <code lang="en">SHOW TABLE STATUS</code> aan de Daatebangk es donävve jejange!',
+       'config-show-table-status' => 'Et Kommando <code lang="en"><code>SHOW TABLE STATUS</code></code> aan de Daatebangk es donävve jejange!',
        'config-unknown-collation' => "'''Opjepaß:''' De Daatabangk deiht en onbikannte Reijefollsch bruche, för Booshtaabe un Zeishe ze verjliishe un ze zotteere.",
        'config-db-web-account' => 'Dä Zohjang zor Daatebangk för et Wiki',
        'config-db-web-help' => 'Donn ene Name un e Paßwoot för der Zohjang zor Daatebangk för et Wiki em nomaale Bedrief aanjävve.',
@@ -11408,7 +11632,7 @@ Do künnts jez der Räß vun de einzel Enshtellunge övverjonn, un et Wiki tirä
        'config-optional-continue' => 'De wells noch mieh Frore jeshtallt krijje un noch mieh Enshtällunge maache?',
        'config-optional-skip' => 'Nä, lohß dä Ömshtand, donn eifarr_et Wiki opsäze.',
        'config-profile' => 'Enshtällunge för de Metmaacher ier Rääschte:',
-       'config-profile-wiki' => 'E tradizjonäll offe Wiki',
+       'config-profile-wiki' => 'E tradizjonäll offe Wiki', # Fuzzy
        'config-profile-no-anon' => 'Schriever möße enlogge',
        'config-profile-fishbowl' => 'Bloß ußdröcklesch zohjelohße Schriever',
        'config-profile-private' => 'E jeschloße Privat_Wiki',
@@ -11426,7 +11650,7 @@ Esu häß De de Wahl:
 
 '''{{int:config-profile-private}}''' kann nur lässe, wäh en et Wiki zohjelohße es, un desellve Jropp kann uch schrieve.
 
-Noch ander un un opwändijere Enshtellunge för de Rääschte sin müjjelesch, wann et Wiki ens aam Loufe es. Loor Der doför de [//www.mediawiki.org/wiki/Manual:User_rights zopaß Hölp em Handbooch] aan.",
+Noch ander un un opwändijere Enshtellunge för de Rääschte sin müjjelesch, wann et Wiki ens aam Loufe es. Loor Der doför de [//www.mediawiki.org/wiki/Manual:User_rights zopaß Hölp em Handbooch] aan.", # Fuzzy
        'config-license' => 'Urhävverrääsch un Lizänz:',
        'config-license-none' => 'Kein Fooßreih övver de Lizänz',
        'config-license-cc-by-sa' => '<i lang="en">Creative Commons</i> Der Name moß jenannt sin, et Wiggerjävve es zohjelohße onger dersellve Bedengunge',
@@ -11509,7 +11733,7 @@ Do kann se heh un jez aanschallde, ävver se künnte noch zohsäzlesch Enshtellu
 Et sühd esu uß, wi wann De MediaWiki ald enshtalleet hätß, un wöhrs aam Versöhke, dat norr_ens ze donn.
 Jang wigger op de näähßte Sigg.",
        'config-install-begin' => 'Wann De op „{{int:config-continue}}“ klecks, jeiht de Enshtallazjuhn vum MediaWiki loßß.
-Wann De noch Änderonge maache wells, dann kleck op „{{int:config-back}}“.',
+Wann De noch Änderonge maache wells, dann kleck op „{{int:config-back}}“.', # Fuzzy
        'config-install-step-done' => 'jedonn',
        'config-install-step-failed' => 'donävve jejange',
        'config-install-extensions' => 'Zohsazprojramme enjeschloße',
@@ -11576,7 +11800,7 @@ Wann De mem Ronger- un widder Huhlaade fäädesh bes, kanns De '''[\$2 en Ding W
 Dat es och all op Änglesch:
 * [//www.mediawiki.org/wiki/Manual:Configuration_settings Configuration settings list]
 * [//www.mediawiki.org/wiki/Manual:FAQ MediaWiki FAQ]
-* [https://lists.wikimedia.org/mailman/listinfo/mediawiki-announce MediaWiki release mailing list]',
+* [https://lists.wikimedia.org/mailman/listinfo/mediawiki-announce MediaWiki release mailing list]', # Fuzzy
 );
 
 /** Kurdish (Latin script) (Kurdî (latînî)‎)
@@ -11616,6 +11840,7 @@ $messages['lad'] = array(
 
 /** Luxembourgish (Lëtzebuergesch)
  * @author Robby
+ * @author 아라
  */
 $messages['lb'] = array(
        'config-desc' => 'Den Installatiounsprogramm vu MediaWiki',
@@ -11623,12 +11848,12 @@ $messages['lb'] = array(
        'config-information' => 'Informatioun',
        'config-localsettings-upgrade' => "'''Opgepasst''': E Fichier <code>LocalSettings.php</code> gouf fonnt.
 Är Software kann aktualiséiert ginn, setzt w.e.g. de Wäert vum <code>\$wgUpgradeKey</code> an d'Këscht.
-Dir fannt en am LocalSettings.php.",
+Dir fannt en am <code>LocalSettings.php</code>.",
        'config-localsettings-key' => 'Aktualisatiounsschlëssel:',
        'config-localsettings-badkey' => 'De Schlëssel deen Dir aginn hutt ass net korrekt',
-       'config-localsettings-incomplete' => 'De Fichier LocalSettings.php schéngt net komplett ze sinn.
+       'config-localsettings-incomplete' => 'De Fichier <code>LocalSettings.php</code> schéngt net komplett ze sinn.
 D\'Variabel $1 ass net definéiert.
-Ännert w.e.g. de Fichier LocalSettings.php esou datt déi Variabel definéiert ass a klickt op "Virufueren".',
+Ännert w.e.g. de Fichier <code>LocalSettings.php</code> esou datt déi Variabel definéiert ass a klickt op "{{int:Config-continue}}".',
        'config-session-error' => 'Feeler beim Starte vun der Sessioun: $1',
        'config-no-session' => "D'Donnéeë vun ärer Sessioun si verluergaangen!
 Kuckt Är php.ini no a vergewëssert Iech datt <code>session.save_path</code>  op adequate REpertoire agestallt ass.",
@@ -11721,7 +11946,7 @@ Wann et de Kont net gëtt, a wann den Installatiouns-Kont genuch Rechter huet, g
        'config-type-sqlite' => 'SQLite',
        'config-type-oracle' => 'Oracle',
        'config-type-ibm_db2' => 'IBM DB2',
-       'config-support-ibm_db2' => '* $1 ass eng kommerziell Firma fir Datebanken',
+       'config-support-ibm_db2' => '* $1 ass eng kommerziell Firma fir Datebanken', # Fuzzy
        'config-header-mysql' => 'MySQL-Astellungen',
        'config-header-postgres' => 'PostgreSQL-Astellungen',
        'config-header-sqlite' => 'SQLite-Astellungen',
@@ -11741,7 +11966,7 @@ E gëtt fir den Numm vum SQLite Date-Fichier benotzt.',
        'config-upgrade-done-no-regenerate' => "D'Aktualisatioun ass ofgeschloss.
 
 Dir kënnt elo [$1 ufänken Är Wiki ze benotzen]",
-       'config-regenerate' => 'LocalSettings.php regeneréieren →',
+       'config-regenerate' => '<code>LocalSettings.php</code> regeneréieren →',
        'config-db-web-account' => 'Datebankkont fir den Accès iwwer de Web',
        'config-db-web-account-same' => 'Dee selwechte Kont wéi bei der Installatioun benotzen',
        'config-db-web-create' => 'De Kont uleeë wann et e net scho gëtt',
@@ -11779,7 +12004,7 @@ Dir kënnt elo déi Astellungen déi nach iwwreg sinn iwwersprangen an d'Wiki el
        'config-optional-continue' => 'Stellt mir méi Froen.',
        'config-optional-skip' => "Ech hunn es genuch, installéier just d'Wiki.",
        'config-profile' => 'Profil vun de Benotzerrechter:',
-       'config-profile-wiki' => 'Traditionell Wiki',
+       'config-profile-wiki' => 'Traditionell Wiki', # Fuzzy
        'config-profile-no-anon' => 'Uleeë vun engem Benotzerkont verlaangt',
        'config-profile-fishbowl' => 'Nëmmen autoriséiert Editeuren',
        'config-profile-private' => 'Privat Wiki',
@@ -11818,7 +12043,7 @@ Dir kënnt elo déi Astellungen déi nach iwwreg sinn iwwersprangen an d'Wiki el
        'config-install-sysop' => 'Administrateur Benotzerkont gëtt ugeluecht',
        'config-install-extension-tables' => "D'Tabelle fir déi aktivéiert Erweiderunge ginn ugeluecht",
        'config-install-mainpage-failed' => "D'Haaptsäit konnt net dragesat ginn: $1",
-       'config-download-localsettings' => 'LocalSettings.php eroflueden',
+       'config-download-localsettings' => '<code>LocalSettings.php</code> eroflueden',
        'config-help' => 'Hëllef',
        'config-nofile' => 'De Fichier "$1" gouf net fonnt. Gouf e geläscht?',
        'mainpagetext' => "'''MediaWiki gouf installéiert.'''",
@@ -11827,7 +12052,7 @@ Dir kënnt elo déi Astellungen déi nach iwwreg sinn iwwersprangen an d'Wiki el
 == Starthëllefen ==
 * [//www.mediawiki.org/wiki/Manual:Configuration_settings Hëllef bei der Konfiguratioun]
 * [//www.mediawiki.org/wiki/Manual:FAQ MediaWiki-FAQ]
-* [https://lists.wikimedia.org/mailman/listinfo/mediawiki-announce Mailinglëscht vun neie MediaWiki-Versiounen]",
+* [https://lists.wikimedia.org/mailman/listinfo/mediawiki-announce Mailinglëscht vun neie MediaWiki-Versiounen]", # Fuzzy
 );
 
 /** Lingua Franca Nova (Lingua Franca Nova)
@@ -11876,8 +12101,65 @@ $messages['lo'] = array(
 );
 
 /** Lithuanian (lietuvių)
+ * @author Eitvys200
  */
 $messages['lt'] = array(
+       'config-information' => 'Informacija',
+       'config-your-language' => 'Jūsų kalba:',
+       'config-wiki-language' => 'Viki kalba:',
+       'config-back' => '← Atgal',
+       'config-continue' => 'Toliau →',
+       'config-page-language' => 'Kalba',
+       'config-page-welcome' => 'Sveiki atvykę į MediaWiki!',
+       'config-page-name' => 'Vardas',
+       'config-page-options' => 'Parinktys',
+       'config-page-install' => 'Įdiegti',
+       'config-page-complete' => 'Baigta!',
+       'config-page-restart' => 'Iš naujo paleiskite diegimą',
+       'config-page-readme' => 'Perskaityk manę',
+       'config-page-copying' => 'Kopijuojama',
+       'config-page-upgradedoc' => 'Atnaujinama',
+       'config-restart' => 'Taip, paleiskite jį iš naujo',
+       'config-charset-mysql5' => 'MySQL 4.1/5.0 UTF-8',
+       'config-type-ibm_db2' => 'IBM DB2',
+       'config-header-mysql' => 'MySQL nustatymai',
+       'config-header-postgres' => 'PostgreSQL nustatymai',
+       'config-header-sqlite' => 'SQLite nustatymai',
+       'config-header-oracle' => 'Oracle nustatymai',
+       'config-header-ibm_db2' => 'IBM DB2 nustatymai',
+       'config-mysql-innodb' => 'InnoDB',
+       'config-mysql-myisam' => 'MyISAM',
+       'config-mysql-utf8' => 'UTF-8',
+       'config-site-name' => 'Viki pavadinimas:',
+       'config-site-name-blank' => 'Įveskite svetainės pavadinimą.',
+       'config-project-namespace' => 'Projekto pavadinimas:',
+       'config-ns-generic' => 'Projektas',
+       'config-ns-site-name' => 'Toks pat kaip viki pavadinimas: $1',
+       'config-admin-box' => 'Administratoriaus paskyra',
+       'config-admin-name' => 'Jūsų vardas:',
+       'config-admin-password' => 'Slaptažodis:',
+       'config-admin-password-confirm' => 'Slaptažodis dar kartą:',
+       'config-admin-name-blank' => 'Įveskite administratoriaus vartotojo vardą.',
+       'config-admin-password-blank' => 'Įvesti administratoriaus paskyros slaptažodį.',
+       'config-admin-password-same' => 'Slaptažodis turi būti ne toks pat, kaip vartotojo vardas.',
+       'config-admin-password-mismatch' => 'Įvesti slaptažodžiai nesutampa.',
+       'config-admin-email' => 'El. pašto adresas:',
+       'config-optional-continue' => 'Paklausti daugiau klausimų.',
+       'config-optional-skip' => 'Man jau nuobodu, tiesiog įdiekite viki.',
+       'config-profile' => 'Vartotojo teisių paskyra:',
+       'config-profile-wiki' => 'Tradicinė viki',
+       'config-profile-private' => 'Privati viki',
+       'config-license-pd' => 'Viešas Domenas',
+       'config-email-settings' => 'El. pašto nustatymai',
+       'config-upload-enable' => 'Įgalinti failų įkėlimus',
+       'config-logo' => 'Logotipo URL:',
+       'config-cc-again' => 'Pasirinkti dar kartą...',
+       'config-extensions' => 'Plėtiniai',
+       'config-install-step-done' => 'atlikta',
+       'config-install-step-failed' => 'nepavyko',
+       'config-install-schema' => 'Kuriama schema',
+       'config-install-keys' => 'Generuojami slapti raktai',
+       'config-help' => 'pagalba',
        'mainpagetext' => "'''MediaWiki sėkmingai įdiegta.'''",
        'mainpagedocfooter' => 'Informacijos apie wiki programinės įrangos naudojimą, ieškokite [//meta.wikimedia.org/wiki/Help:Contents žinyne].
 
@@ -11885,7 +12167,7 @@ $messages['lt'] = array(
 
 * [//www.mediawiki.org/wiki/Manual:Configuration_settings Konfigūracijos nustatymų sąrašas]
 * [//www.mediawiki.org/wiki/Manual:FAQ MediaWiki DUK]
-* [https://lists.wikimedia.org/mailman/listinfo/mediawiki-announce MediaWiki pranešimai paštu apie naujas versijas]',
+* [https://lists.wikimedia.org/mailman/listinfo/mediawiki-announce MediaWiki pranešimai paštu apie naujas versijas]', # Fuzzy
 );
 
 /** Latvian (latviešu)
@@ -12047,6 +12329,7 @@ $messages['min'] = array(
 
 /** Macedonian (македонски)
  * @author Bjankuloski06
+ * @author 아라
  */
 $messages['mk'] = array(
        'config-desc' => 'Инсталатор на МедијаВики',
@@ -12054,19 +12337,19 @@ $messages['mk'] = array(
        'config-information' => 'Информации',
        'config-localsettings-upgrade' => 'Востановена е податотека <code>LocalSettings.php</code>.
 За да ја надградите инсталцијава, внесете ја вредноста на <code>$wgUpgradeKey</code> во полето подолу.
-Тоа е го најдете во LocalSettings.php.',
-       'config-localsettings-cli-upgrade' => 'Утврдено е присуството на податотеката „LocalSettings.php“.
-За да ја надградите инсталацијата, пуштете ја „update.php“ наместо горенаведената.',
+Тоа е го најдете во <code>LocalSettings.php</code>.',
+       'config-localsettings-cli-upgrade' => 'Утврдено е присуството на податотеката „<code>LocalSettings.php</code>“.
+За да ја надградите инсталацијата, пуштете ја „<code>update.php</code>“ наместо горенаведената.',
        'config-localsettings-key' => 'Надградбен клуч:',
        'config-localsettings-badkey' => 'Клучот што го наведовте е погрешен',
        'config-upgrade-key-missing' => 'Востановена е постоечка инсталација на МедијаВики.
-За да ја надградите, вметнете го следниов ред на дното од вашата страница LocalSettings.php:
+За да ја надградите, вметнете го следниов ред на дното од вашата страница <code>LocalSettings.php</code>:
 
 $1',
-       'config-localsettings-incomplete' => 'Постоечката страница LocalSettings.php е нецелосна.
+       'config-localsettings-incomplete' => 'Постоечката страница <code>LocalSettings.php</code> е нецелосна.
 Не е поставена променливата $1.
-Изменете ја страницата LocalSettings.php така што ќе ѝ зададете вредност на променливата, па стиснете на „Продолжи“.',
-       'config-localsettings-connection-error' => 'Се појави грешка при поврзувањето со базата користејќи ги поставките назначени во LocalSettings.php или AdminSettings.php. Исправете ги овие поставки и обидете се повторно.
+Изменете ја страницата <code>LocalSettings.php</code> така што ќе ѝ зададете вредност на променливата, па стиснете на „{{int:Config-continue}}“.',
+       'config-localsettings-connection-error' => 'Се појави грешка при поврзувањето со базата користејќи ги поставките назначени во <code>LocalSettings.php</code> или <code>AdminSettings.php</code>. Исправете ги овие поставки и обидете се повторно.
 
 $1',
        'config-session-error' => 'Грешка при започнување на сесијата: $1',
@@ -12199,7 +12482,7 @@ $1
 Надградете го на PHP 5.2.9 и libxml2 2.7.3 или нивни понови верзии! ПРЕКИНУВАМ ([//bugs.php.net/bug.php?id=45996 грешката е заведена во PHP]).',
        'config-using531' => 'МедијаВики не може да се користи со PHP $1 поради грешка кај упатните параметри за <code>__call()</code>.
 За да го решите проблемот, надградете го на PHP 5.3.2 или понова верзија, или пак користете го постариот PHP 5.3.0.',
-       'config-suhosin-max-value-length' => 'Suhosin е инсталиран и ја ограничува должината на параметарот GET на $1 bytes. Делот ResourceLoader на МедијаВики ќе ја заобиколува ова граница, но со тоа ќе се влоши делотворноста. Ако е воопшто можно, на suhosin.get.max_value_length треба да го наместите на 1024 или поевеќе во php.ini , и да му ја зададете истата вредност на $wgResourceLoaderMaxQueryLength во LocalSettings.php .',
+       'config-suhosin-max-value-length' => 'Suhosin е инсталиран и ја ограничува должината на параметарот GET на $1 бајти. Делот ResourceLoader на МедијаВики ќе ја заобиколува ова граница, но со тоа ќе се влоши делотворноста. Ако е воопшто можно, на <code>suhosin.get.max_value_length</code> треба да го наместите на 1024 или повеќе во <code>php.ini</code>, и да му ја зададете истата вредност на <code>$wgResourceLoaderMaxQueryLength</code> во <code>LocalSettings.php</code>.',
        'config-db-type' => 'Тип на база:',
        'config-db-host' => 'Домаќин на базата:',
        'config-db-host-help' => 'Ако вашата база е на друг опслужувач, тогаш тука внесете го името на домаќинот или IP-адресата.
@@ -12283,7 +12566,7 @@ $1
        'config-support-postgres' => '* $1 е популарен систем на бази на податоци со отворен код кој претставува алтернатива на MySQL ([http://www.php.net/manual/en/pgsql.installation.php како да составите PHP со поддршка за PostgreSQL]). Може сè уште да има некои грешки. па затоа не се препорачува за употреба во производна средина.',
        'config-support-sqlite' => '* $1 е лесен систем за бази на податоци кој е многу добро поддржан. ([http://www.php.net/manual/en/pdo.installation.php Како да составите PHP со поддршка за SQLite], користи PDO)',
        'config-support-oracle' => '* $1 е база на податоци на комерцијално претпријатие. ([http://www.php.net/manual/en/oci8.installation.php Како да составите PHP со поддршка за OCI8])',
-       'config-support-ibm_db2' => '* $1 is комерцијална база на податоциза фирми.',
+       'config-support-ibm_db2' => '* $1 е комерцијална база на податоциза фирми. ([http://www.php.net/manual/en/ibm-db2.installation.php Како да составите PHP со поддршка за IBM DB2])',
        'config-header-mysql' => 'Нагодувања на MySQL',
        'config-header-postgres' => 'Нагодувања на PostgreSQL',
        'config-header-sqlite' => 'Нагодувања на SQLite',
@@ -12350,8 +12633,8 @@ chmod a+w $3</pre>',
        'config-upgrade-done-no-regenerate' => 'Надградбата заврши.
 
 Сега можете да [$1 почнете да го користите викито].',
-       'config-regenerate' => 'Пресоздај LocalSettings.php →',
-       'config-show-table-status' => 'Барањето SHOW TABLE STATUS не успеа!',
+       'config-regenerate' => 'Пресоздај <code>LocalSettings.php</code> →',
+       'config-show-table-status' => 'Барањето <code>SHOW TABLE STATUS</code> не успеа!',
        'config-unknown-collation' => "'''Предупредување:''' Базата корисни непрепознаена упатна споредба.",
        'config-db-web-account' => 'Сметка на базата за мрежен пристап',
        'config-db-web-help' => 'Одберете корисничко име и лозинка што ќе ги користи мрежниот опслужувач за поврзување со опслужувачот на базта на податоци во текот на редовната работа со викито.',
@@ -12423,7 +12706,7 @@ chmod a+w $3</pre>',
        'config-optional-continue' => 'Постави ми повеќе прашања.',
        'config-optional-skip' => 'Веќе ми здосади, дај само инсталирај го викито.',
        'config-profile' => 'Профил на кориснички права:',
-       'config-profile-wiki' => 'ТÑ\80адиÑ\86ионално вики',
+       'config-profile-wiki' => 'Ð\9eÑ\82воÑ\80ено вики',
        'config-profile-no-anon' => 'Задолжително отворање сметка',
        'config-profile-fishbowl' => 'Само овластени уредници',
        'config-profile-private' => 'Приватно вики',
@@ -12433,7 +12716,7 @@ chmod a+w $3</pre>',
 Многумина имаат најдено најразлични полезни примени за МедијаВики, но понекогаш не е лесно да убедите некого во предностите на вики-концептот.
 Значи имате избор.
 
-'''{{int:config-profile-wiki}}''' — секој може да го уредува, дури и без најавување.
+'''{{int:config-profile-wiki}}''' — модел според кој секој може да уредува, дури и без најавување.
 Ако имате вики со '''задолжително отворање на сметка''', тогаш добивате повеќе контрола, но ова може даги одврати спонтаните учесници.
 
 '''{{int:config-profile-fishbowl}}''' — може да уредуваат само уредници што имаат добиено дозвола за тоа, но јавноста може да ги гледа страниците, вклучувајќи ја нивната историја.
@@ -12524,7 +12807,7 @@ chmod a+w $3</pre>',
        'config-install-alreadydone' => "'''Предупредување:''' Изгледа дека веќе го имате инсталирано МедијаВики и сега сакате да го инсталирате повторно.
 Продолжете на следната страница.",
        'config-install-begin' => 'Стискајќи на „{{int:config-continue}}“ ќе ја започнете инсталацијата на МедијаВики.
-Ако сакате да направите измени во досегашното, стиснете на „Назад“.',
+Ако сакате да направите измени во досегашното, стиснете на „{{int:config-back}}“.',
        'config-install-step-done' => 'готово',
        'config-install-step-failed' => 'не успеа',
        'config-install-extensions' => 'Вклучувам додатоци',
@@ -12580,7 +12863,7 @@ $3
 '''Напомена''': Ако ова не го направите сега, податотеката со поставки повеќе нема да биде на достапна.
 
 Откога ќе завршите со тоа, можете да '''[$2 влезете на вашето вики]'''.",
-       'config-download-localsettings' => 'Преземи го LocalSettings.php',
+       'config-download-localsettings' => 'Преземи го <code>LocalSettings.php</code>',
        'config-help' => 'помош',
        'config-nofile' => 'Податотеката „$1“ не е пронајдена. Да не е избришана?',
        'mainpagetext' => "'''МедијаВики е успешно инсталиран.'''",
@@ -12660,7 +12943,7 @@ $1
        'config-connection-error' => '$1.
 
 താഴെ നൽകിയിരിക്കുന്ന ഹോസ്റ്റ്, ഉപയോക്തൃനാമം, രഹസ്യവാക്ക് എന്നിവ പരിശോധിച്ച് വീണ്ടും ശ്രമിക്കുക.',
-       'config-regenerate' => 'LocalSettings.php പുനഃസൃഷ്ടിക്കുക →',
+       'config-regenerate' => '<code>LocalSettings.php</code> പുനഃസൃഷ്ടിക്കുക →',
        'config-mysql-engine' => 'സ്റ്റോറേജ് എൻജിൻ:',
        'config-site-name' => 'വിക്കിയുടെ പേര്:',
        'config-site-name-help' => 'ഇത് ബ്രൗസറിന്റെ ടൈറ്റിൽ ബാറിലും മറ്റനേകം ഇടങ്ങളിലും പ്രദർശിപ്പിക്കപ്പെടും.',
@@ -12692,7 +12975,7 @@ $1
 ബാക്കിയുള്ളവ അവഗണിച്ച് വിക്കി ഇൻസ്റ്റോൾ ചെയ്യാവുന്നതാണ്.',
        'config-optional-continue' => 'കൂടുതൽ ചോദ്യങ്ങൾ ചോദിക്കൂ.',
        'config-optional-skip' => 'എനിക്ക് മടുത്തു, ഒന്ന് ഇൻസ്റ്റോൾ ചെയ്ത് തീർക്ക്.',
-       'config-profile-wiki' => 'പരമ്പരാഗത വിക്കി',
+       'config-profile-wiki' => 'പരമ്പരാഗത വിക്കി', # Fuzzy
        'config-profile-no-anon' => 'അംഗത്വ സൃഷ്ടി ചെയ്യേണ്ടതുണ്ട്',
        'config-profile-fishbowl' => 'അനുവാദമുള്ളവർ മാത്രം തിരുത്തുക',
        'config-profile-private' => 'സ്വകാര്യ വിക്കി',
@@ -12746,7 +13029,7 @@ $3
 == പ്രാരംഭസഹായികൾ ==
 * [//www.mediawiki.org/wiki/Manual:Configuration_settings ക്രമീകരണങ്ങളുടെ പട്ടിക]
 * [//www.mediawiki.org/wiki/Manual:FAQ മീഡിയവിക്കി പതിവുചോദ്യങ്ങൾ]
-* [https://lists.wikimedia.org/mailman/listinfo/mediawiki-announce മീഡിയവിക്കി പ്രകാശന മെയിലിങ് ലിസ്റ്റ്]',
+* [https://lists.wikimedia.org/mailman/listinfo/mediawiki-announce മീഡിയവിക്കി പ്രകാശന മെയിലിങ് ലിസ്റ്റ്]', # Fuzzy
 );
 
 /** Mongolian (монгол)
@@ -12778,8 +13061,19 @@ $messages['mr'] = array(
 
 /** Malay (Bahasa Melayu)
  * @author Anakmalaysia
+ * @author Pizza1016
  */
 $messages['ms'] = array(
+       'config-desc' => 'Pemasang MediaWiki',
+       'config-title' => 'Pasangan MediaWiki $1',
+       'config-information' => 'Maklumat',
+       'config-localsettings-key' => 'Kunci naik taraf:',
+       'config-localsettings-badkey' => 'Kunci yang anda berikan tidak betul.',
+       'config-session-error' => 'Ralat ketika memulakan sesi: $1',
+       'config-your-language' => 'Bahasa kamu:',
+       'config-your-language-help' => 'Pilihkan bahasa untuk digunakan dalam proses pemasangan ini.',
+       'config-wiki-language' => 'Bahasa wiki:',
+       'config-wiki-language-help' => 'Pilih bahasa utama wiki yang bakal dicipta ini.',
        'config-back' => '← Undur',
        'config-continue' => 'Teruskan →',
        'config-page-language' => 'Bahasa',
@@ -12790,6 +13084,13 @@ $messages['ms'] = array(
        'config-page-name' => 'Nama',
        'config-page-options' => 'Pilihan',
        'config-page-install' => 'Pasang',
+       'config-page-complete' => 'Selesai!',
+       'config-page-restart' => 'Mulakan semula pemasangan',
+       'config-page-readme' => 'Baca saya',
+       'config-page-releasenotes' => 'Catatan keluaran',
+       'config-page-copying' => 'Sedang menyalin',
+       'config-page-upgradedoc' => 'Sedang menaik taraf',
+       'config-page-existingwiki' => 'Wiki sedia ada',
        'config-env-php' => 'PHP $1 dipasang.',
        'config-env-php-toolow' => 'PHP $1 dipasang.
 Bagaimanapun, MediaWiki memerlukan PHP $2 ke atas.',
@@ -12797,6 +13098,14 @@ Bagaimanapun, MediaWiki memerlukan PHP $2 ke atas.',
        'config-unicode-using-intl' => '[http://pecl.php.net/intl Sambungan intl PECL] digunakan untuk penormalan Unicode.',
        'config-db-charset' => 'Peranggu aksara pangkalan data',
        'config-type-ibm_db2' => 'IBM DB2',
+       'config-header-mysql' => 'Keutamaan MySQL',
+       'config-header-postgres' => 'Keutamaan PostgreSQL',
+       'config-header-sqlite' => 'Keutamaan SQLite',
+       'config-header-oracle' => 'Keutamaan Oracle',
+       'config-header-ibm_db2' => 'Keutamaan IBM DB2',
+       'config-invalid-db-type' => 'Jenis pangkalan data tidak sah',
+       'config-db-web-account-same' => 'Gunakan akaun yang sama seperti dalam pemasangan',
+       'config-db-web-create' => 'Ciptakan akaun jika belum wujud',
        'config-mysql-engine' => 'Enjin storan:',
        'config-mysql-innodb' => 'InnoDB',
        'config-mysql-myisam' => 'MyISAM',
@@ -12811,19 +13120,26 @@ Bagaimanapun, MediaWiki memerlukan PHP $2 ke atas.',
        'config-ns-site-name' => 'Sama dengan nama wiki: $1',
        'config-ns-other' => 'Lain-lain (nyatakan)',
        'config-ns-other-default' => 'MyWiki',
+       'config-admin-box' => 'Akaun penyelia',
+       'config-admin-name' => 'Nama kamu:',
        'config-admin-password' => 'Kata laluan:',
+       'config-admin-password-confirm' => 'Kata laluan lagi:',
+       'config-admin-password-mismatch' => 'Kata-kata laluan yang kamu berikan tidak sepadan.',
        'config-admin-email' => 'Alamat e-mel:',
+       'config-admin-error-bademail' => 'Kamu telah memberikan alamat e-mel yang tidak betul.',
+       'config-optional-skip' => 'Saya sudah bosan, pasangkanlah wiki sahaja.',
        'config-license' => 'Hak cipta dan lesen:',
        'config-license-none' => 'Tiada pengaki lesen',
        'config-license-cc-by-sa' => 'Creative Commons Attribution Share Alike',
        'config-license-cc-by' => 'Creative Commons Attribution',
        'config-license-cc-by-nc-sa' => 'Creative Commons Attribution Non-Commercial Share Alike',
        'config-license-cc-0' => 'Creative Commons Zero (Domain Awam)',
-       'config-license-gfdl' => 'Lesen Dokumentasi Bebas GNU 1.3 ke atas',
+       'config-license-gfdl' => 'Lesen Dokumentasi Bebas GNU 1.3 atau ke atas',
        'config-license-pd' => 'Domain Awam',
        'config-email-settings' => 'Tetapan e-mel',
        'config-install-step-done' => 'siap',
        'config-install-step-failed' => 'gagal',
+       'config-install-user-alreadyexists' => 'Pengguna "$1" sudah wujud',
        'config-help' => 'bantuan',
        'mainpagetext' => "'''MediaWiki telah berjaya dipasang.'''",
        'mainpagedocfooter' => 'Sila rujuk [//meta.wikimedia.org/wiki/Help:Contents Panduan Penggunaan] untuk maklumat mengenai penggunaan perisian wiki ini.
@@ -12832,13 +13148,23 @@ Bagaimanapun, MediaWiki memerlukan PHP $2 ke atas.',
 
 * [//www.mediawiki.org/wiki/Manual:Configuration_settings Senarai tetapan konfigurasi]
 * [//www.mediawiki.org/wiki/Manual:FAQ Soalan Lazim MediaWiki]
-* [https://lists.wikimedia.org/mailman/listinfo/mediawiki-announce Senarai mel bagi keluaran MediaWiki]',
+* [https://lists.wikimedia.org/mailman/listinfo/mediawiki-announce Senarai mel bagi keluaran MediaWiki]', # Fuzzy
 );
 
 /** Maltese (Malti)
  * @author Chrisportelli
  */
 $messages['mt'] = array(
+       'config-title' => "Installazzjoni ta' MediaWiki $1",
+       'config-information' => 'Informazzjoni',
+       'config-localsettings-key' => 'Ċavetta tal-aġġornament:',
+       'config-localsettings-badkey' => 'Iċ-ċavetta li tajt hija ħażina.',
+       'config-your-language' => 'Il-lingwa tiegħek:',
+       'config-your-language-help' => "Agħżel lingwa li tixtieq tuża' matul il-proċess ta' installazzjoni.",
+       'config-wiki-language' => 'Lingwi tal-wiki:',
+       'config-wiki-language-help' => 'Agħżel il-lingwa li l-wiki se tkun l-aktar użata fil-wiki.',
+       'config-back' => '← Lura',
+       'config-continue' => 'Kompli →',
        'config-page-language' => 'Lingwa',
        'config-page-welcome' => 'Merħba fuq MediaWiki!',
        'config-page-dbconnect' => 'Aqbad mad-databażi',
@@ -12851,13 +13177,77 @@ $messages['mt'] = array(
        'config-page-restart' => "Erġa' ibda l-installazzjoni",
        'config-page-readme' => 'Aqrani',
        'config-page-releasenotes' => 'Noti tal-verżjoni',
+       'config-page-upgradedoc' => 'Aġġornament',
+       'config-page-existingwiki' => 'Wiki eżistenti',
+       'config-restart' => "Iva, erġa' ibda",
+       'config-env-php' => 'PHP $1 huwa installat.',
+       'config-db-wiki-settings' => 'Identifika din il-wiki',
+       'config-db-name' => 'Isem tad-databażi:',
+       'config-db-install-account' => 'Kont tal-utent għall-installazzjoni',
+       'config-db-username' => 'Isem tal-utent tad-databażi:',
+       'config-db-password' => 'Password tad-databażi:',
+       'config-db-port' => 'Port tad-databażi:',
+       'config-db-schema' => 'Skema għal MediaWiki:',
+       'config-db-web-create' => 'Oħloq il-kont jekk għadu ma jeżistix',
+       'config-mysql-innodb' => 'InnoDB',
+       'config-mysql-myisam' => 'MyISAM',
+       'config-mysql-charset' => "Sett ta' karattri tad-databażi:",
+       'config-mysql-binary' => 'Binarju',
+       'config-mysql-utf8' => 'UTF-8',
+       'config-site-name' => 'Isem tal-wiki:',
+       'config-site-name-help' => "Dan se jidher fil-barra tat-titlu tal-browżer u f'diversi postijiet oħra.",
+       'config-site-name-blank' => 'Daħħal isem tas-sit.',
+       'config-project-namespace' => 'Spazju tal-isem tal-proġett:',
+       'config-ns-generic' => 'Proġett',
+       'config-ns-site-name' => 'L-istess bħall-isem tal-wiki: $1',
+       'config-ns-other' => 'Oħrajn (speċifika)',
+       'config-ns-other-default' => 'MyWiki',
+       'config-ns-invalid' => 'L-ispazju speċifikat "<nowiki>$1</nowiki>" huwa ħażin.
+Speċifika spazju tal-isem tal-proġett differenti.',
+       'config-ns-conflict' => 'L-ispazju speċifikat "<nowiki>$1</nowiki>" joħloq kunflitt ma\' spazju tal-isem ieħor tal-MediaWiki.
+Speċifika spazju tal-isem tal-proġett differenti.',
+       'config-admin-box' => 'Kont tal-amministratur',
+       'config-admin-name' => 'Ismek:',
+       'config-admin-password' => 'Password:',
+       'config-admin-password-confirm' => "Erġa' daħħal il-password:",
+       'config-admin-help' => 'Daħħal l-isem tal-utent preferit hawnhekk, per eżempju "Joe Borg".
+Dan huwa l-isem li se tuża\' kull darba li tidħol fil-wiki.',
+       'config-admin-name-blank' => 'Daħħal isem tal-utent għall-amministratur.',
+       'config-admin-name-invalid' => 'L-isem tal-utent speċifikat "<nowiki>$1</nowiki>" huwa ħażin.
+Speċifika isem tal-utent differenti.',
+       'config-admin-password-blank' => 'Daħħal password għall-kont tal-amministratur.',
+       'config-admin-password-same' => 'Il-password ma tistax tkun l-istess bħall-isem tal-utent.',
+       'config-admin-password-mismatch' => 'Il-passwords li daħħalt ma jaqblux.',
+       'config-admin-email' => 'Indirizz elettroniku:',
+       'config-admin-error-bademail' => 'Daħħalt indirizz elettroniku ħażin.',
+       'config-almost-done' => "Kważi lest!
+Jekk trid tista' taqbeż il-parti li jmiss tal-konfigurazzjoni u sempliċiment tinstalla l-wiki.",
+       'config-optional-continue' => 'Staqsini aktar mistoqsijiet.',
+       'config-optional-skip' => 'Xbajt diġà, installa l-wiki.',
+       'config-profile-wiki' => 'Wiki tradizzjonali', # Fuzzy
+       'config-profile-no-anon' => 'Huwa obbligatorju l-ħolqien tal-kont',
+       'config-profile-fishbowl' => 'Edituri awtorizzati biss',
+       'config-profile-private' => 'Wiki privata',
+       'config-license-cc-by-sa' => 'Creative Commons Attribution Share Alike',
+       'config-license-cc-by' => 'Creative Commons Attribution',
+       'config-license-cc-by-nc-sa' => 'Creative Commons Attribution Non-Commercial Share Alike',
+       'config-license-cc-0' => 'Creative Commons Zero (dominju pubbliku)',
+       'config-license-pd' => 'Dominju pubbliku',
+       'config-license-cc-choose' => 'Agħżel waħda mil-liċenzji tal-Creative Commons',
+       'config-upload-deleted' => 'Direttorju għall-fajls imħassra:',
+       'config-upload-deleted-help' => "Agħżel direttorju fejn iżżomm fajls imħassra.
+Idealment, dan m'għandux ikun aċċessibbli mill-web.",
+       'config-logo' => 'URL tal-logo:',
+       'config-download-localsettings' => 'Niżżel <code>LocalSettings.php</code>',
+       'config-help' => 'għajnuna',
+       'config-nofile' => 'Il-fajl "$1" ma setax jinstab. Dan ġie mħassar?',
        'mainpagetext' => "'''MediaWiki ġie installat b'suċċess.'''",
        'mainpagedocfooter' => "Ikkonsulta l-[//meta.wikimedia.org/wiki/Help:Contents Gwida għall-utenti] sabiex tikseb iktar informazzjoni dwar kif tuża' s-softwer tal-wiki.
 
 == Biex tibda ==
 * [//www.mediawiki.org/wiki/Manual:Configuration_settings Lista ta' preferenzi għall-konfigurazzjoni]
 * [//www.mediawiki.org/wiki/Manual:FAQ Mistoqsijiet rikorrenti fuq il-MediaWiki]
-* [https://lists.wikimedia.org/mailman/listinfo/mediawiki-announce Il-lista tal-posta tħabbar 'l MediaWiki]",
+* [https://lists.wikimedia.org/mailman/listinfo/mediawiki-announce Il-lista tal-posta tħabbar 'l MediaWiki]", # Fuzzy
 );
 
 /** Burmese (မြန်မာဘာသာ)
@@ -12911,6 +13301,7 @@ $messages['nan'] = array(
 /** Norwegian Bokmål (norsk (bokmål)‎)
  * @author Event
  * @author Nghtwlkr
+ * @author 아라
  */
 $messages['nb'] = array(
        'config-desc' => 'Installasjonsprogrammet for MediaWiki',
@@ -12918,19 +13309,19 @@ $messages['nb'] = array(
        'config-information' => 'Informasjon',
        'config-localsettings-upgrade' => 'En <code>LocalSettings.php</code>-fil har blitt oppdaget.
 For å oppgradere denne installasjonen, skriv inn verdien av <code>$wgUpgradeKey</code> i boksen nedenfor.
-Du finner denne i LocalSettings.php.',
-       'config-localsettings-cli-upgrade' => "Filen ''LocalSettings.php'' er funnet.
+Du finner denne i <code>LocalSettings.php</code>.',
+       'config-localsettings-cli-upgrade' => "Filen ''<code>LocalSettings.php</code>'' er funnet.
 For å oppgradere denne installasjonen, vennligst kjør ''update.php'' i stedet",
        'config-localsettings-key' => 'Oppgraderingsnøkkel:',
        'config-localsettings-badkey' => 'Nøkkelen du oppga er feil.',
        'config-upgrade-key-missing' => "En eksisterende installasjon av MediaWiki er funnet.
-For å oppgradere denne installasjonen, vær vennlig å legge til følgende linje helt til slutt i din ''LocalSettings.php''-fil:
+For å oppgradere denne installasjonen, vær vennlig å legge til følgende linje helt til slutt i din ''<code>LocalSettings.php</code>''-fil:
 
 $1",
-       'config-localsettings-incomplete' => "Den eksisterende ''LocalSettings.php'' ser ut til å være ufullstendig.
+       'config-localsettings-incomplete' => "Den eksisterende ''<code>LocalSettings.php</code>'' ser ut til å være ufullstendig.
 Variabelen $1 har ingen verdi.
-Vær vennlig å endre ''LocalSettings.php'' slik at variabelen får en verdi, og klikk ''Fortsett''.",
-       'config-localsettings-connection-error' => "Det ble funnet en feil ved tilknytning av databasen med innstillingene i ''LocalSettings.php'' eller ''AdminSettings.php''. Vær vennlig å rette opp disse innstillingene og prøv igjen.
+Vær vennlig å endre ''<code>LocalSettings.php</code>'' slik at variabelen får en verdi, og klikk ''{{int:Config-continue}}''.",
+       'config-localsettings-connection-error' => "Det ble funnet en feil ved tilknytning av databasen med innstillingene i ''<code>LocalSettings.php</code>'' eller ''<code>AdminSettings.php</code>''. Vær vennlig å rette opp disse innstillingene og prøv igjen.
 
 $1",
        'config-session-error' => 'Feil under oppstart av økt: $1',
@@ -13063,7 +13454,7 @@ Installasjon abortert.',
        'config-using531' => 'MediaWiki kan ikke brukes med PHP $1 på grunn av en feil med referanseparametere til <code>__call()</code>.
 Oppgrader til PHP 5.3.2 eller høyere, eller nedgrader til PHP 5.3.0 for å løse dette.
 Installasjonen avbrutt.',
-       'config-suhosin-max-value-length' => 'Suhosin er installert og begrenser GET-parameterlengder til $1 bytes. MediaWiki\'s ResourceLoader-komponent klarer å komme rundt denne begrensningen, med med redusert ytelse. På mulig bør du sette suhosin.get.max_value_length til minst 1024 i php.ini, og sette $wgResourceLoaderMaxQueryLength til samme verdi i LocalSettings.php.',
+       'config-suhosin-max-value-length' => 'Suhosin er installert og begrenser GET-parameterlengder til $1 bytes. MediaWiki\'s ResourceLoader-komponent klarer å komme rundt denne begrensningen, med med redusert ytelse. På mulig bør du sette <code>suhosin.get.max_value_length</code> til minst 1024 i <code>php.ini</code>, og sette <code>$wgResourceLoaderMaxQueryLength</code> til samme verdi i LocalSettings.php.', # Fuzzy
        'config-db-type' => 'Databasetype:',
        'config-db-host' => 'Databasevert:',
        'config-db-host-help' => 'Hvis databasen kjører på en annen tjenermaskin, skriv inn vertsnavnet eller IP-adressen her.
@@ -13148,7 +13539,7 @@ Hvis du ikke ser databasesystemet du prøver å bruke i listen nedenfor, følg i
        'config-support-postgres' => '* $1 er et populært åpen kildekode-databasesystem som er et alternativ til MySQL ([http://www.php.net/manual/en/pgsql.installation.php hvordan kompilere PHP med PostgreSQL-støtte]). Det kan være noen små utestående feil og det anbefales ikke for bruk i et produksjonsmiljø.',
        'config-support-sqlite' => '* $1 er et lettvekts-databasesystem som er veldig godt støttet. ([http://www.php.net/manual/en/pdo.installation.php hvordan kompilere PHP med SQLite-støtte], bruker PDO)',
        'config-support-oracle' => '* $1 er en kommersiell bedriftsdatabase. ([http://www.php.net/manual/en/oci8.installation.php Hvordan kompilere PHP med OCI8-støtte])',
-       'config-support-ibm_db2' => '* $1 er en kommersiell bedriftsdatabase.',
+       'config-support-ibm_db2' => '* $1 er en kommersiell bedriftsdatabase.', # Fuzzy
        'config-header-mysql' => 'MySQL-innstillinger',
        'config-header-postgres' => 'PostgreSQL-innstillinger',
        'config-header-sqlite' => 'SQLite-innstillinger',
@@ -13215,8 +13606,8 @@ Dette er '''ikke anbefalt''' med mindre du har problemer med wikien din.",
        'config-upgrade-done-no-regenerate' => 'Oppgradering fullført.
 
 Du kan nå [$1 begynne å bruke wikien din].',
-       'config-regenerate' => 'Regenerer LocalSettings.php →',
-       'config-show-table-status' => 'SHOW TABLE STATUS etterspørselen mislyktes!',
+       'config-regenerate' => 'Regenerer <code>LocalSettings.php</code> →',
+       'config-show-table-status' => '<code>SHOW TABLE STATUS</code> etterspørselen mislyktes!',
        'config-unknown-collation' => "'''Advarsel:''' Databasen bruker en ukjent sortering.",
        'config-db-web-account' => 'Databasekonto for nettilgang',
        'config-db-web-help' => 'Velg brukernavnet og passordet som nettjeneren skal bruke for å koble til databasetjeneren under ordinær drift av wikien.',
@@ -13280,7 +13671,7 @@ Du kan hoppe over de resterende konfigurasjonene og installere wikien nå.',
        'config-optional-continue' => 'Spør meg flere spørsmål.',
        'config-optional-skip' => 'Jeg er lei, bare installer wikien.',
        'config-profile' => 'Brukerrettighetsprofil:',
-       'config-profile-wiki' => 'Tradisjonell wiki',
+       'config-profile-wiki' => 'Tradisjonell wiki', # Fuzzy
        'config-profile-no-anon' => 'Kontoopprettelse påkrevd',
        'config-profile-fishbowl' => 'Kun autoriserte bidragsytere',
        'config-profile-private' => 'Privat wiki',
@@ -13296,7 +13687,7 @@ En wiki med '''{{int:config-profile-no-anon}}''' tilbyr ekstra ansvarlighet, men
 '''{{int:config-profile-fishbowl}}'''-scenariet tillater godkjente brukere å redigere, mens publikum kan se sider, og også historikken.
 En '''{{int:config-profile-private}}''' tillater kun godkjente brukere å se sider, den samme gruppen som får lov til å redigere dem.
 
-Mer komplekse konfigurasjoner av brukerrettigheter er tilgjengelig etter installasjon, se det [//www.mediawiki.org/wiki/Manual:User_rights relevante manualavsnittet].",
+Mer komplekse konfigurasjoner av brukerrettigheter er tilgjengelig etter installasjon, se det [//www.mediawiki.org/wiki/Manual:User_rights relevante manualavsnittet].", # Fuzzy
        'config-license' => 'Opphavsrett og lisens:',
        'config-license-none' => 'Ingen lisensbunntekst',
        'config-license-cc-by-sa' => 'Creative Commons Navngivelse Del på samme vilkår',
@@ -13357,7 +13748,7 @@ For mer informasjon om denne funksjonen, inklusive instruksjoner om hvordan man
        'config-install-user-grant-failed' => 'Å gi tillatelse til brukeren «$1» mislyktes: $2',
        'config-install-tables' => 'Oppretter tabeller',
        'config-install-mainpage-failed' => 'Kunne ikke sette inn hovedside: $1',
-       'config-download-localsettings' => 'Last ned LocalSettings.php',
+       'config-download-localsettings' => 'Last ned <code>LocalSettings.php</code>',
        'config-help' => 'hjelp',
        'config-nofile' => 'Filen "$1" ble ikke funnet. Kan den være blitt slettet?',
        'mainpagetext' => "'''MediaWiki-programvaren er nå installert.'''",
@@ -13366,7 +13757,7 @@ For mer informasjon om denne funksjonen, inklusive instruksjoner om hvordan man
 ==Å starte==
 *[//www.mediawiki.org/wiki/Manual:Configuration_settings Oppsettsliste]
 *[//www.mediawiki.org/wiki/Manual:FAQ Ofte stilte spørsmål]
-*[https://lists.wikimedia.org/mailman/listinfo/mediawiki-announce MediaWiki e-postliste]',
+*[https://lists.wikimedia.org/mailman/listinfo/mediawiki-announce MediaWiki e-postliste]', # Fuzzy
 );
 
 /** Low German (Plattdüütsch)
@@ -13411,6 +13802,7 @@ $messages['ne'] = array(
  * @author SPQRobin
  * @author Siebrand
  * @author Tjcool007
+ * @author 아라
  */
 $messages['nl'] = array(
        'config-desc' => 'Het installatieprogramma voor MediaWiki',
@@ -13418,19 +13810,19 @@ $messages['nl'] = array(
        'config-information' => 'Gegevens',
        'config-localsettings-upgrade' => 'Er is een bestaand instellingenbestand <code>LocalSettings.php</code> gevonden.
 Voer de waarde van <code>$wgUpgradeKey</code> in in onderstaande invoerveld om deze installatie bij te werken.
-De instelling is terug te vinden in LocalSettings.php.',
-       'config-localsettings-cli-upgrade' => 'Het bestand LocalSettings.php is al aanwezig.
-Voer update.php uit om deze installatie bij te werken.',
+De instelling is terug te vinden in <code>LocalSettings.php</code>.',
+       'config-localsettings-cli-upgrade' => 'Het bestand <code>LocalSettings.php</code> is al aanwezig.
+Voer <code>update.php</code> uit om deze installatie bij te werken.',
        'config-localsettings-key' => 'Upgradesleutel:',
        'config-localsettings-badkey' => 'De sleutel die u hebt opgegeven is onjuist',
        'config-upgrade-key-missing' => 'Er is een bestaande installatie van MediaWiki aangetroffen.
-Plaats de volgende regel onderaan uw LocalSettings.php om deze installatie bij te werken:
+Plaats de volgende regel onderaan uw <code>LocalSettings.php</code> om deze installatie bij te werken:
 
 $1',
-       'config-localsettings-incomplete' => 'De bestaande inhoud van LocalSettings.php lijkt incompleet.
+       'config-localsettings-incomplete' => 'De bestaande inhoud van <code>LocalSettings.php</code> lijkt incompleet.
 De variabele $1 is niet ingesteld.
-Wijzig LocalSettings.php zodat deze variabele is ingesteld en klik op "Doorgaan".',
-       'config-localsettings-connection-error' => 'Er is een fout opgetreden tijdens het verbinden van de database met de instellingen uit LocalSettings.php of AdminSettings.php. Los het probleem met de instellingen op en probeer het daarna opnieuw.
+Wijzig <code>LocalSettings.php</code> zodat deze variabele is ingesteld en klik op "{{int:Config-continue}}".',
+       'config-localsettings-connection-error' => 'Er is een fout opgetreden tijdens het verbinden van de database met de instellingen uit <code>LocalSettings.php</code> of <code>AdminSettings.php</code>. Los het probleem met de instellingen op en probeer het daarna opnieuw.
 
 $1',
        'config-session-error' => 'Fout bij het begin van de sessie: $1',
@@ -13540,7 +13932,7 @@ De installatie kan mislukken!",
        'config-xcache' => '[http://xcache.lighttpd.net/ XCache] is op dit moment geïnstalleerd',
        'config-apc' => '[http://www.php.net/apc APC] is op dit moment geïnstalleerd',
        'config-wincache' => '[http://www.iis.net/download/WinCacheForPhp WinCache] is op dit moment geïnstalleerd',
-       'config-no-cache' => "'''Waarschuwing:''' [http://www.php.net/apc APC] of [http://trac.lighttpd.net/ xcache / XCache] is niet aangetroffen.
+       'config-no-cache' => "'''Waarschuwing:''' [http://www.php.net/apc APC], [http://xcache.lighttpd.net/ XCache] of [http://www.iis.net/download/WinCacheForPhp WinCache] is niet aangetroffen.
 Het cachen van objecten is niet ingeschakeld.",
        'config-mod-security' => "'''Waarschuwing:''' uw webserver heeft de module [http://modsecurity.org/ mod_security] ingeschakeld. Als deze onjuist is ingesteld, kan dit problemen geven in combinatie met MediaWiki of andere software die gebruikers in staat stelt willekeurige inhoud te posten.
 Lees de [http://modsecurity.org/documentation/ documentatie over mod_security] of neem contact op met de helpdesk van uw provider als u tegen problemen aanloopt.",
@@ -13554,17 +13946,18 @@ Het maken van miniaturen van afbeeldingen wordt uitgeschakeld.',
        'config-no-uri' => "'''Fout:''' de huidige URI kon niet vastgesteld worden.
 De installatie is afgebroken.",
        'config-no-cli-uri' => "'''Waarschuwing:''' de parameter ==scriptpath is niet opgegeven. De standaardwaarde wordt gebruikt: <code>$1</code>.",
-       'config-using-server' => 'Servernaam "<nowiki>$1</nowiki>" wordt gebruikt.',
+       'config-using-server' => 'De servernaam "<nowiki>$1</nowiki>" wordt gebruikt.',
        'config-using-uri' => 'De server-URL "<nowiki>$1$2</nowiki>" wordt gebruikt.',
        'config-uploads-not-safe' => "'''Waarschuwing:''' uw uploadmap <code>$1</code> kan gebruikt worden voor het arbitrair uitvoeren van scripts.
-Hoewel MediaWiki alle toegevoegde bestanden  controleert op bedreigingen, is het zeer aan te bevelen het [//www.mediawiki.org/wiki/Manual:Security#Upload_security beveiligingslek te verhelpen] alvorens uploads in te schakelen.",
+Hoewel MediaWiki alle toegevoegde bestanden controleert op bedreigingen, is het zeer aan te bevelen het [//www.mediawiki.org/wiki/Manual:Security#Upload_security beveiligingslek te verhelpen] alvorens uploads in te schakelen.",
        'config-no-cli-uploads-check' => "''Waarschuwing:'' uw standaardmap voor uploads (<code>$1</code>) wordt niet gecontroleerd op kwetsbaarheden voor het uitvoeren van willekeurige scripts gedurende de CLI-installatie.",
        'config-brokenlibxml' => 'Uw systeem heeft een combinatie van PHP- en libxml2-versies geïnstalleerd die is foutgevoelig is en kan leiden tot onzichtbare beschadiging van gegevens in MediaWiki en andere webapplicaties.
-Upgrade naar PHP 5.2.9 of hoger en libxml2 2.7.3 of hoger! De installatie wordt afgebroken ([//bugs.php.net/bug.php?id=45996 bij PHP gerapporteerde fout]).',
+Upgrade naar PHP 5.2.9 of hoger en libxml2 2.7.3 of hoger([//bugs.php.net/bug.php?id=45996 bij PHP gerapporteerde fout]).
+De installatie wordt afgebroken.',
        'config-using531' => 'PHP $1 is niet compatibel met MediaWiki vanwege een fout met betrekking tot referentieparameters met <code>__call()</code>.
 Werk uw PHP bij naar PHP 5.3.2 of hoger of werk bij naar de lagere versie PHP 5.3.0 om dit op te lossen.
 De installatie wordt afgebroken.',
-       'config-suhosin-max-value-length' => 'Suhosin is geïnstalleerd en beperkt de lengte van de GET-parameter tot $1 bytes. De ResourceLoader van MediaWiki omzeilt deze beperking, maar dat is slecht voor de prestaties. Als het mogelijk is, moet u de waarde "suhosin.get.max_value_length" in php.ini instellen op 1024 of hoger en $wgResourceLoaderMaxQueryLength in LocalSettings.php op dezelfde waarde instellen.',
+       'config-suhosin-max-value-length' => 'Suhosin is geïnstalleerd en beperkt de lengte van de GET-parameter tot $1 bytes. De ResourceLoader van MediaWiki omzeilt deze beperking, maar dat is slecht voor de prestaties. Als het mogelijk is, moet u de waarde "<code>suhosin.get.max_value_length</code>" in <code>php.ini</code> instellen op 1024 of hoger en <code>$wgResourceLoaderMaxQueryLength</code> in LocalSettings.php op dezelfde waarde instellen.', # Fuzzy
        'config-db-type' => 'Databasetype:',
        'config-db-host' => 'Databasehost:',
        'config-db-host-help' => 'Als uw databaseserver een andere server is, voer dan de hostnaam of het IP-adres hier in.
@@ -13598,7 +13991,7 @@ Hoewel het wellicht mogelijk is gebruikers aan te maken zonder wachtwoord, is di
        'config-db-install-help' => 'Voer de gebruikersnaam en het wachtwoord in die worden gebruikt voor de databaseverbinding tijdens het installatieproces.',
        'config-db-account-lock' => 'Dezelfde gebruiker en wachwoord gebruiken na de installatie',
        'config-db-wiki-account' => 'Gebruiker voor na de installatie',
-       'config-db-wiki-help' => 'Selecteer de gebruikersnaam en het wachtwoord die gebruikt worden om verbinding te maken met de database na de installatie.
+       'config-db-wiki-help' => 'Voer de gebruikersnaam en het wachtwoord in die gebruikt worden om verbinding te maken met de database na de installatie.
 Als de gebruiker niet bestaat en de gebruiker die tijdens de installatie gebruikt wordt voldoende rechten heeft, wordt deze gebruiker aangemaakt met de minimaal benodigde rechten voor het laten werken van de wiki.',
        'config-db-prefix' => 'Databasetabelvoorvoegsel:',
        'config-db-prefix-help' => "Als u een database moet gebruiken voor meerdere wiki's, of voor MediaWiki en een andere applicatie, dan kunt u ervoor kiezen om een voorvoegsel toe te voegen aan de tabelnamen om conflicten te voorkomen.
@@ -13625,12 +14018,12 @@ Wijzig het alleen als u weet dat dit nodig is.',
        'config-sqlite-dir' => 'Gegevensmap voor SQLite:',
        'config-sqlite-dir-help' => "SQLite slaat alle gegevens op in een enkel bestand.
 
-De map die u opgeeft moet schrijfbaar zijn voor de webserver tijdens de installatie.
+De map die u opgeeft moet beschrijfbaar zijn voor de webserver tijdens de installatie.
 
 Deze mag '''niet toegankelijk''' zijn via het web en het bestand mag dus niet tussen de PHP-bestanden staan.
 
 Het installatieprogramma schrijft het bestand <code>.htaccess</code> weg met het databasebestand, maar als dat niet werkt kan iemand zich toegang tot het ruwe databasebestand verschaffen.
-Ook de gebruikersgegevens (e-mailsadressen, wachtwoordhashes) en verwijderde versies en overige gegevens met beperkte toegang via MediaWiki zijn dan onbeschermd.
+Ook de gebruikersgegevens (e-mailadressen, wachtwoordhashes) en verwijderde versies en overige gegevens met beperkte toegang via MediaWiki zijn dan onbeschermd.
 
 Overweeg om de database op een totaal andere plaats neer te zetten, bijvoorbeeld in <code>/var/lib/mediawiki/yourwiki</code>.",
        'config-oracle-def-ts' => 'Standaard tablespace:',
@@ -13649,7 +14042,7 @@ Als u het databasesysteem dat u wilt gebruiken niet in de lijst terugvindt, volg
        'config-support-postgres' => '* $1 is een populair open source databasesysteem als alternatief voor MySQL ([http://www.php.net/manual/en/pgsql.installation.php hoe PHP gecompileerd moet zijn met ondersteuning voor PostgreSQL]). Het is mogelijk dat er een aantal bekende problemen zijn met MediaWiki in combinatie met deze database en daarom wordt PostgreSQL niet aanbevolen voor een productieomgeving.',
        'config-support-sqlite' => '* $1 is een zeer goed ondersteund lichtgewicht databasesysteem ([http://www.php.net/manual/en/pdo.installation.php hoe PHP gecompileerd zijn met ondersteuning voor SQLite]; gebruikt PDO)',
        'config-support-oracle' => '* $1 is een commerciële data voor grote bedrijven ([http://www.php.net/manual/en/oci8.installation.php PHP compileren met ondersteuning voor OCI8]).',
-       'config-support-ibm_db2' => '* $1 is een commerciële enterprisedatabase.',
+       'config-support-ibm_db2' => '* $1 is een commerciële enterprisedatabase. ([http://www.php.net/manual/en/ibm-db2.installation.php Hoe PHP compolieren met ondersteuning voor IBM DB2])',
        'config-header-mysql' => 'MySQL-instellingen',
        'config-header-postgres' => 'PostgreSQL-instellingen',
        'config-header-sqlite' => 'SQLite-instellingen',
@@ -13676,7 +14069,7 @@ Gebruik alleen letters (a-z, A-Z), cijfers (0-9) en liggende streepjes (_).',
 U gebruikt $2.',
        'config-sqlite-name-help' => 'Kies een naam die uw wiki identificeert.
 Gebruik geen spaties of koppeltekens.
-Deze naam wordt gebruikt voor het gegevensbestands van SQLite.',
+Deze naam wordt gebruikt voor het gegevensbestand van SQLite.',
        'config-sqlite-parent-unwritable-group' => 'Het was niet mogelijk de gegevensmap <code><nowiki>$1</nowiki></code> te maken omdat in de bovenliggende map <code><nowiki>$2</nowiki></code> niet geschreven mag worden door de webserver.
 
 Het installatieprogramma heeft vast kunnen stellen onder welke gebruiker de webserver draait.
@@ -13717,9 +14110,9 @@ Als u uw <code>LocalSettings.php</code> opnieuw wilt aanmaken, klik dan op de kn
 Dit is '''niet aan te raden''' tenzij u problemen hebt met uw wiki.",
        'config-upgrade-done-no-regenerate' => 'Het bijwerken is afgerond.
 
-U kunt u [$1 uw wiki gebruiken].',
-       'config-regenerate' => 'LocalSettings.php opnieuw aanmaken →',
-       'config-show-table-status' => 'Het uitvoeren van SHOW TABLE STATUS is mislukt!',
+U kunt nu [$1 uw wiki gebruiken].',
+       'config-regenerate' => '<code>LocalSettings.php</code> opnieuw aanmaken →',
+       'config-show-table-status' => 'Het uitvoeren van <code>SHOW TABLE STATUS</code> is mislukt!',
        'config-unknown-collation' => "'''Waarschuwing:''' de database gebruikt een collatie die niet wordt herkend.",
        'config-db-web-account' => 'Databasegebruiker voor webtoegang',
        'config-db-web-help' => 'Selecteer de gebruikersnaam en het wachtwoord die de webserver gebruikt om verbinding te maken met de databaseserver na de installatie.',
@@ -13730,7 +14123,7 @@ De gebruiker die u hier opgeeft moet al bestaan.',
        'config-mysql-engine' => 'Opslagmethode:',
        'config-mysql-innodb' => 'InnoDB',
        'config-mysql-myisam' => 'MyISAM',
-       'config-mysql-myisam-dep' => "'''Waarschuwing''': U hebt MyISAM geselecteerd als opslagengine voor MySQL. Dit is niet aan te raden voor MediaWiki omdat:
+       'config-mysql-myisam-dep' => "'''Waarschuwing''': u hebt MyISAM geselecteerd als opslagengine voor MySQL. Dit is niet aan te raden voor MediaWiki omdat:
 * het nauwelijks ondersteuning biedt voor gebruik door meerdere gebruikers tegelijkertijd door het locken van tabellen;
 * het meer vatbaar is voor corruptie dan andere engines;
 * de code van MediaWiki niet alstijd omgaat met MyISAM zoals dat zou moeten.
@@ -13745,7 +14138,7 @@ MyISAM-databases raken vaker corrupt dan InnoDB-databases.",
        'config-mysql-binary' => 'Binair',
        'config-mysql-utf8' => 'UTF-8',
        'config-mysql-charset-help' => "In '''binaire modus''' slaat MediaWiki tekst in UTF-8 op in binaire databasevelden.
-Dit is efficiënter dan de UTF-8-modus van MySQL en stelt u in staat de volledige reeks Unicode-tekens te gebruiken.
+Dit is efficiënter dan de UTF-8-modus van MySQL en stelt u in staat de volledige reeks Unicodetekens te gebruiken.
 
 In '''UTF-8-modus''' kent MySQL de tekenset van uw gegevens en kan de databaseserver ze juist weergeven en converteren.
 Het is dat niet mogelijk tekens op te slaan die de \"[//nl.wikipedia.org/wiki/Lijst_van_Unicode-subbereiken#Basic_Multilingual_Plane Basic Multilingual Plane]\" te boven gaan.",
@@ -13786,13 +14179,13 @@ Kies een andere gebruikersnaam.',
        'config-subscribe-help' => 'Dit is een mailinglijst met een laag volume voor aankondigingen van nieuwe versies, inclusief belangrijke aankondigingen met betrekking tot beveiliging.
 Abonneer uzelf erop en werk uw MediaWiki-installatie bij als er nieuwe versies uitkomen.',
        'config-subscribe-noemail' => 'U hebt geprobeerd zich te abonneren op de mailinglijst voor release-aankondigingen zonder een e-mailadres op te geven.
-Geef een e-mailadres op als u zich wil abonneren op de mailinglijst.',
+Geef een e-mailadres op als u zich wilt abonneren op de mailinglijst.',
        'config-almost-done' => 'U bent bijna klaar!
 Als u wilt kunt u de overige instellingen overslaan en de wiki nu installeren.',
        'config-optional-continue' => 'Stel me meer vragen.',
        'config-optional-skip' => 'Laat dat maar, installeer gewoon de wiki.',
        'config-profile' => 'Gebruikersrechtenprofiel:',
-       'config-profile-wiki' => 'Traditionele wiki',
+       'config-profile-wiki' => 'Open wiki',
        'config-profile-no-anon' => 'Gebruiker aanmaken verplicht',
        'config-profile-fishbowl' => 'Alleen voor geautoriseerde bewerkers',
        'config-profile-private' => 'Privéwiki',
@@ -13802,7 +14195,7 @@ In MediaWiki is het eenvoudig om de recente wijzigingen te controleren en eventu
 Daarnaast vinden velen MediaWiki goed inzetbaar in vele andere rollen, en soms is het niet handig om helemaal \"op de wikimanier\" te werken.
 Daarom biedt dit installatieprogramma u de volgende keuzes voor de basisinstelling van gebruikersvrijheden:
 
-Een '''{{int:config-profile-wiki}}''' staat iedereen toe te bewerken, zonder zelfs aan te melden.
+Het profiel '''{{int:config-profile-wiki}}''' staat iedereen toe te bewerken, zonder zelfs aan te melden.
 Een wiki met '''{{int:config-profile-no-anon}}\" biedt extra verantwoordelijkheid, maar kan afschrikken toevallige gebruikers afschrikken.
 
 Het scenario '''{{int:config-profile-fishbowl}}''' laat gebruikers waarvoor dat is ingesteld bewerkt, maar andere gebruikers kunnen alleen pagina's bekijken, inclusief de bewerkingsgeschiedenis.
@@ -13829,25 +14222,25 @@ Dit is nog steeds een geldige licentie, maar deze licentie is lastig te begrijpe
 Het is ook lastig inhoud te hergebruiken onder de GFDL.",
        'config-email-settings' => 'E-mailinstellingen',
        'config-enable-email' => 'Uitgaande e-mail inschakelen',
-       'config-enable-email-help' => "Als u wilt dat e-mailen mogelijk is, dan moeten [http://www.php.net/manual/en/mail.configuration.php PHP's e-mailinstellingen] correct zijn.
-Als u niet wilt dat e-mailen mogelijk is, dan kunt u de instellingen hier uitschakelen.",
+       'config-enable-email-help' => 'Als u wilt dat e-mailen mogelijk is, dan moeten de [http://www.php.net/manual/en/mail.configuration.php e-mailinstellingen van PHP] correct zijn.
+Als u niet wilt dat e-mailen mogelijk is, dan kunt u de instellingen hier uitschakelen.',
        'config-email-user' => 'E-mail tussen gebruikers inschakelen',
        'config-email-user-help' => 'Gebruikers toestaan e-mail aan elkaar te verzenden als dit in de voorkeuren is ingesteld.',
        'config-email-usertalk' => 'Gebruikersoverlegmeldingen inschakelen',
-       'config-email-usertalk-help' => 'Gebruikers toestaan notificaties te ontvangen bij wijzigingen op de eigen overlegpagina als dit in de voorkeuren is ingesteld',
-       'config-email-watchlist' => 'Volglijstnotificatie inschakelen',
-       'config-email-watchlist-help' => "Gebruikers toestaan notificaties te ontvangen bij wijzigingen van pagina's op hun volglijst als dit in de voorkeuren is ingesteld",
+       'config-email-usertalk-help' => 'Gebruikers toestaan meldingen te ontvangen bij wijzigingen op de eigen overlegpagina, als dit in de voorkeuren is ingesteld.',
+       'config-email-watchlist' => 'Volglijstmeldingen inschakelen',
+       'config-email-watchlist-help' => "Gebruikers toestaan meldingen te ontvangen bij wijzigingen van pagina's op hun volglijst, als dit in de voorkeuren is ingesteld.",
        'config-email-auth' => 'E-mailbevestiging inschakelen',
        'config-email-auth-help' => "Als deze instelling actief is, moeten gebruikers hun e-mailadres bevestigen via een verwijziging die ze per e-mail wordt toegezonden.
 Alleen bevestigde e-mailadressen kunnen e-mail ontvangen van andere gebruikers of wijzigingsnotificaties ontvangen.
-Het inschakelen van deze instelling is '''aan te raden''' voor openbare wiki's vanwege de mogelijkheden voor misbruik van e-mailmogelijkheden.",
+Het inschakelen van deze instelling wordt '''aangeraden''' voor openbare wiki's vanwege de mogelijkheden voor misbruik van e-mailmogelijkheden.",
        'config-email-sender' => 'E-mailadres voor antwoorden:',
        'config-email-sender-help' => 'Voer het e-mailadres in dat u wilt gebruiken als antwoordadres voor uitgaande e-mail.
 Als een e-mail niet bezorgd kan worden, wordt dat op dit e-mailadres gemeld.
 Veel mailservers vereisen dat tenminste het domein bestaat.',
        'config-upload-settings' => 'Afbeeldingen en bestanden uploaden',
        'config-upload-enable' => 'Uploaden van bestanden inschakelen',
-       'config-upload-help' => "Het uploaden van bestanden stelt uw server mogelijk bloot aan beveiligingsrisico's.
+       'config-upload-help' => "Het toestaan van het uploaden van bestanden stelt uw server mogelijk bloot aan beveiligingsrisico's.
 Er is meer [//www.mediawiki.org/wiki/Manual:Security informatie over beveiliging] beschikbaar in de handleiding.
 
 Om het bestandsuploads mogelijk te maken kunt u de rechten op de submap <code>images</code> onder de hoofdmap van MediaWiki aanpassen, zodat de webserver erin kan schrijven.
@@ -13895,7 +14288,7 @@ Mogelijk moet u aanvullende instellingen maken, maar u kunt deze uitbreidingen n
        'config-install-alreadydone' => "'''Waarschuwing:''' het lijkt alsof u MediaWiki al hebt geïnstalleerd en probeert het programma opnieuw te installeren.
 Ga alstublieft door naar de volgende pagina.",
        'config-install-begin' => 'Als u nu op "{{int:config-continue}}" klikt, begint de installatie van MediaWiki.
-Als u nog wijzigingen wilt maken, klik dan op "Terug".',
+Als u nog wijzigingen wilt maken, klik dan op "{{int:config-back}}".',
        'config-install-step-done' => 'afgerond',
        'config-install-step-failed' => 'mislukt',
        'config-install-extensions' => 'Inclusief uitbreidingen',
@@ -13918,9 +14311,9 @@ MediaWiki vereist momenteel dat de tabellen van de webgebruiker zijn. Geef een a
        'config-install-user-grant-failed' => 'Het geven van rechten aan gebruiker "$1" is mislukt: $2',
        'config-install-user-missing' => 'De opgegeven gebruiker "$1" bestaat niet.',
        'config-install-user-missing-create' => 'De opgegeven gebruiker "$1" bestaat niet.
-Klik op "registreren" onderaan als u het wilt aanmaken.',
+Klik op "registreren" onderaan als u de gebruiker wilt aanmaken.',
        'config-install-tables' => 'Tabellen aanmaken',
-       'config-install-tables-exist' => "'''Waarschuwing''': de MediaWiki-tabellen lijken al te bestaan.
+       'config-install-tables-exist' => "'''Waarschuwing''': de MediaWikitabellen lijken al te bestaan.
 Het aanmaken wordt overgeslagen.",
        'config-install-tables-failed' => "'''Fout''': het aanmaken van een tabel is mislukt met de volgende foutmelding: $1",
        'config-install-interwiki' => 'Bezig met het vullen van de interwikitabel',
@@ -13945,14 +14338,14 @@ Dit bevat al uw instellingen.
 U moet het bestand downloaden en in de hoofdmap van uw wiki-installatie plaatsten; in dezelfde map als index.php.
 De download moet u automatisch zijn aangeboden.
 
-Als de download niet is aangeboden of als u de download hebt geannuleerd, dan kunt u de download opnieuw starten door op de onderstaande verwijzing te klikken:
+Als de download niet is aangeboden of als u de download hebt geannuleerd, dan kunt u de download opnieuw starten door op de onderstaande koppeling te klikken:
 
 $3
 
 '''Let op''': als u dit niet nu doet, dan het is bestand als u later de installatieprocedure afsluit zonder het bestand te downloaden niet meer beschikbaar.
 
 Na het plaatsen van het bestand met instellingen kunt u '''[$2 uw wiki betreden]'''.",
-       'config-download-localsettings' => 'LocalSettings.php downloaden',
+       'config-download-localsettings' => '<code>LocalSettings.php</code> downloaden',
        'config-help' => 'hulp',
        'config-nofile' => 'Het bestand "$1" is niet gevonden. Is het verwijderd?',
        'mainpagetext' => "'''De installatie van MediaWiki is geslaagd.'''",
@@ -13962,7 +14355,254 @@ Na het plaatsen van het bestand met instellingen kunt u '''[$2 uw wiki betreden]
 
 * [//www.mediawiki.org/wiki/Manual:Configuration_settings Lijst met instellingen]
 * [//www.mediawiki.org/wiki/Manual:FAQ Veelgestelde vragen (FAQ)]
-* [https://lists.wikimedia.org/mailman/listinfo/mediawiki-announce Mailinglijst voor aankondigingen van nieuwe versies]', # Fuzzy
+* [https://lists.wikimedia.org/mailman/listinfo/mediawiki-announce Mailinglijst voor aankondigingen van nieuwe versies]
+* [//www.mediawiki.org/wiki/Localisation#Translation_resources Maak MediaWiki beschikbaar in uw taal]',
+);
+
+/** Nederlands (informeel)‎ (Nederlands (informeel)‎)
+ * @author Siebrand
+ */
+$messages['nl-informal'] = array(
+       'config-localsettings-badkey' => 'De sleutel die je hebt opgegeven is onjuist',
+       'config-upgrade-key-missing' => 'Er is een bestaande installatie van MediaWiki aangetroffen.
+Plaats de volgende regel onderaan je <code>LocalSettings.php</code> om deze installatie bij te werken:
+
+$1',
+       'config-session-expired' => 'Je sessiegegevens zijn verlopen.
+Sessies zijn ingesteld om een levensduur van $1 te hebben.
+Je kunt deze wijzigen via de instelling <code>session.gc_maxlifetime</code> in php.ini.
+Begin het installatieproces opnieuw.',
+       'config-no-session' => 'Je sessiegegevens zijn verloren gegaan.
+Controleer je php.ini en zorg dat er een juiste map is ingesteld voor <code>session.save_path</code>.',
+       'config-your-language' => 'Jouw taal:',
+       'config-help-restart' => 'Wil je alle opgeslagen gegevens die je hebt ingevoerd wissen en het installatieproces opnieuw starten?',
+       'config-welcome' => '=== Controle omgeving ===
+Er worden een aantal basiscontroles uitgevoerd met als doel vast te stellen of deze omgeving geschikt is voor een installatie van MediaWiki.
+Als je hulp nodig hebt bij de installatie, lever deze gegevens dan ook aan.',
+       'config-copyright' => "=== Auteursrechten en voorwaarden ===
+
+$1
+
+Dit programma is vrije software. Je mag het verder verspreiden en/of aanpassen in overeenstemming met de voorwaarden van de GNU General Public License zoals uitgegeven door de Free Software Foundation; ofwel versie 2 van de Licentie of - naar eigen keuze - enige latere versie.
+
+Dit programma wordt verspreid in de hoop dat het nuttig is, maar '''zonder enige garantie''', zelfs zonder de impliciete garantie van '''verkoopbaarheid''' of '''geschiktheid voor een bepaald doel'''.
+Zie de GNU General Public License voor meer informatie.
+
+Samen met dit programma hoor je een <doclink href=Copying>exemplaar van de GNU General Public License</doclink> ontvangen te hebben; zo niet, schrijf dan aan de Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, Verenigde Staten. Of [http://www.gnu.org/copyleft/gpl.html lees de licentie online].",
+       'config-env-good' => 'De omgeving is gecontroleerd.
+Je kunt MediaWiki installeren.',
+       'config-env-bad' => 'De omgeving is gecontroleerd.
+Je kunt MediaWiki niet installeren.',
+       'config-unicode-pure-php-warning' => "'''Waarschuwing''': de [http://pecl.php.net/intl PECL-extensie intl] is niet beschikbaar om de Unicodenormalisatie af te handelen en daarom wordt de langzame PHP-implementatie gebruikt.
+Als je MediaWiki voor een website met veel verkeer installeert, lees je dan in over [//www.mediawiki.org/wiki/Unicode_normalization_considerations Unicodenormalisatie].",
+       'config-unicode-update-warning' => "'''Waarschuwing''': de geïnstalleerde versie van de Unicodenormalisatiewrapper maakt gebruik van een oudere versie van [http://site.icu-project.org/ de bibliotheek van het ICU-project].
+Je moet [//www.mediawiki.org/wiki/Unicode_normalization_considerations bijwerken] als Unicode voor jou van belang is.",
+       'config-no-db' => 'Het was niet mogelijk een geschikte databasedriver te vinden voor PHP.
+Je moet een databasedriver installeren voor PHP.
+De volgende databases worden ondersteund: $1.
+
+Als je op een gedeelde omgeving zit, vraag dan aan je hostingprovider een geschikte databasedriver te installeren.
+Als je PHP zelf hebt gecompileerd, wijzig dan je instellingen zodat een databasedriver wordt geactiveerd, bijvoorbeeld via <code>./configure --with-mysql</code>.
+Als je PHP hebt geïnstalleerd via een Debian- of Ubuntu-package, installeer dan ook de module php5-mysql.',
+       'config-outdated-sqlite' => "''' Waarschuwing:''' je gebruikt SQLite $1. SQLite is niet beschikbaar omdat de minimaal vereiste versie $2 is.",
+       'config-register-globals' => "'''Waarschuwing: de PHP-optie <code>[http://php.net/register_globals register_globals]</code> is ingeschakeld.'''
+'''Schakel deze uit als dat mogelijk is.'''
+MediaWiki kan ermee werken, maar je server is dan meer kwetsbaar voor beveiligingslekken.",
+       'config-magic-quotes-runtime' => "'''Onherstelbare fout: [http://www.php.net/manual/en/ref.info.php#ini.magic-quotes-runtime magic_quotes_runtime] is actief!'''
+Deze instelling zorgt voor gegevenscorruptie.
+Je kunt MediaWiki niet installeren tenzij deze instelling is uitgeschakeld.",
+       'config-magic-quotes-sybase' => "'''Onherstelbare fout: [http://www.php.net/manual/en/ref.info.php#ini.magic-quotes-runtime magic_quotes_sybase] is actief!'''
+Deze instelling zorgt voor gegevenscorruptie.
+Je kunt MediaWiki niet installeren tenzij deze instelling is uitgeschakeld.",
+       'config-mbstring' => "'''Onherstelbare fout: [http://www.php.net/manual/en/ref.mbstring.php#mbstring.overload mbstring.func_overload] is actief!'''
+Deze instelling zorgt voor gegevenscorruptie.
+Je kunt MediaWiki niet installeren tenzij deze instelling is uitgeschakeld.",
+       'config-ze1' => "'''Onherstelbare fout: [http://www.php.net/manual/en/ini.core.php zend.ze1_compatibility_mode] is actief!'''
+Deze instelling zorgt voor grote problemen in MediaWiki.
+Je kunt MediaWiki niet installeren tenzij deze instelling is uitgeschakeld.",
+       'config-xml-bad' => 'De XML-module van PHP ontbreekt.
+MediaWiki heeft de functies van deze module nodig en werkt niet zonder deze module.
+Als je gebruik maakt van Mandrake, installeer dan het package php-xml.',
+       'config-mod-security' => "'''Waarschuwing:''' je webserver heeft de module [http://modsecurity.org/ mod_security] ingeschakeld. Als deze onjuist is ingesteld, kan dit problemen geven in combinatie met MediaWiki of andere software die gebruikers in staat stelt willekeurige inhoud te posten.
+Lees de [http://modsecurity.org/documentation/ documentatie over mod_security] of neem contact op met de helpdesk van je provider als je tegen problemen aanloopt.",
+       'config-imagemagick' => 'ImageMagick aangetroffen: <code>$1</code>.
+Het aanmaken van miniaturen van afbeeldingen wordt ingeschakeld als je uploaden inschakelt.',
+       'config-gd' => 'Ingebouwde GD grafische bibliotheek aangetroffen.
+Het aanmaken van miniaturen van afbeeldingen wordt ingeschakeld als je uploaden inschakelt.',
+       'config-uploads-not-safe' => "'''Waarschuwing:''' je uploadmap <code>$1</code> kan gebruikt worden voor het arbitrair uitvoeren van scripts.
+Hoewel MediaWiki alle toegevoegde bestanden controleert op bedreigingen, is het zeer aan te bevelen het [//www.mediawiki.org/wiki/Manual:Security#Upload_security beveiligingslek te verhelpen] alvorens uploads in te schakelen.",
+       'config-no-cli-uploads-check' => "''Waarschuwing:'' je standaardmap voor uploads (<code>$1</code>) wordt niet gecontroleerd op kwetsbaarheden voor het uitvoeren van willekeurige scripts gedurende de CLI-installatie.",
+       'config-brokenlibxml' => 'Je systeem heeft een combinatie van PHP- en libxml2-versies geïnstalleerd die is foutgevoelig is en kan leiden tot onzichtbare beschadiging van gegevens in MediaWiki en andere webapplicaties.
+Upgrade naar PHP 5.2.9 of hoger en libxml2 2.7.3 of hoger([//bugs.php.net/bug.php?id=45996 bij PHP gerapporteerde fout]).
+De installatie wordt afgebroken.',
+       'config-db-host-help' => 'Als je databaseserver een andere server is, voer dan de hostnaam of het IP-adres hier in.
+
+Als je gebruik maakt van gedeelde webhosting, hoort je provider je de juiste hostnaam te hebben verstrekt.
+
+Als je MediaWiki op een Windowsserver installeert en MySQL gebruikt, dan werkt "localhost" mogelijk niet als servernaam.
+Als het inderdaad niet werkt, probeer dan "127.0.0.1" te gebruiken als lokaal IP-adres.
+
+Als je PostgreSQL gebruikt, laat dit veld dan leeg om via een Unix-socket te verbinden.',
+       'config-db-host-oracle-help' => 'Voer een geldige [http://download.oracle.com/docs/cd/B28359_01/network.111/b28317/tnsnames.htm Local Connect Name] in; een tnsnames.ora-bestand moet zichtbaar zijn voor deze installatie.<br />Als je gebruik maakt van clientlibraries 10g of een latere versie, kan je ook gebruik maken van de naamgevingsmethode [http://download.oracle.com/docs/cd/E11882_01/network.112/e10836/naming.htm Easy Connect].',
+       'config-db-name-help' => 'Kies een naam die je wiki identificeert.
+Er mogen geen spaties gebruikt worden.
+Als je gebruik maakt van gedeelde webhosting, dan hoort je provider ofwel jou een te gebruiken databasenaam gegeven te hebben, of je aangegeven te hebben hoe je databases kunt aanmaken.',
+       'config-db-account-oracle-warn' => 'Er zijn drie ondersteunde scenario\'s voor het installeren van Oracle als databasebackend:
+
+Als je een databasegebruiker wilt aanmaken als onderdeel van het installatieproces, geef dan de gegevens op van een databasegebruiker in met de rol SYSDBA voor de installatie en voer de gewenste aanmeldgegevens in voor de gebruiker met webtoegang. Je kunt ook de gebruiker met webtoegang handmatig aanmaken en alleen van die gebruiker de aanmeldgegevens opgeven als deze de vereiste rechten heeft om schemaobjecten aan te maken. Als laatste is het mogelijk om aanmeldgegevens van twee verschillende gebruikers op te geven; een met de rechten om schemaobjecten aan te maken, en een met alleen webtoegang.
+
+Een script voor het aanmaken van een gebruiker met de vereiste rechten is te vinden in de map "maintenance/oracle/" van deze installatie. Onthoud dat het gebruiken van een gebruiker met beperkte rechten alle mogelijkheden om beheerscripts uit te voeren met de standaard gebruiker onmogelijk maakt.',
+       'config-db-prefix-help' => "Als je een database moet gebruiken voor meerdere wiki's, of voor MediaWiki en een andere applicatie, dan kan je ervoor kiezen om een voorvoegsel toe te voegen aan de tabelnamen om conflicten te voorkomen.
+Gebruik geen spaties.
+
+Dit veld wordt meestal leeg gelaten.",
+       'config-charset-help' => "'''Waarschuwing:''' als je '''achterwaarts compatibel met UTF-8''' gebruikt met MySQL 4.1+ en een back-up van de database maakt met <code>mysqldump</code>, dan kunnen alle niet-ASCII-tekens in je back-ups onherstelbaar beschadigd raken.
+
+In '''binaire modus''' slaat MediaWiki tekst in UTF-8 op in binaire databasevelden.
+Dit is efficiënter dan de UTF-8-modus van MySQL en stelt je in staat de volledige reeks Unicode-tekens te gebruiken.
+In '''UTF-8-modus''' kent MySQL de tekenset van je gegevens en kan de databaseserver ze juist weergeven en converteren.
+Het is dan niet mogelijk tekens op te slaan die de \"[//nl.wikipedia.org/wiki/Lijst_van_Unicode-subbereiken#Basic_Multilingual_Plane Basic Multilingual Plane]\" te boven gaan.",
+       'config-mysql-old' => 'Je moet MySQL $1 of later gebruiken.
+Jij gebruikt $2.',
+       'config-db-schema-help' => 'Dit schema klopt meestal.
+Wijzig het alleen als je weet dat dit nodig is.',
+       'config-sqlite-dir-help' => "SQLite slaat alle gegevens op in een enkel bestand.
+
+De map die je opgeeft moet beschrijfbaar zijn voor de webserver tijdens de installatie.
+
+Deze mag '''niet toegankelijk''' zijn via het web en het bestand mag dus niet tussen de PHP-bestanden staan.
+
+Het installatieprogramma schrijft het bestand <code>.htaccess</code> weg met het databasebestand, maar als dat niet werkt kan iemand zich toegang tot het ruwe databasebestand verschaffen.
+Ook de gebruikersgegevens (e-mailadressen, wachtwoordhashes) en verwijderde versies en overige gegevens met beperkte toegang via MediaWiki zijn dan onbeschermd.
+
+Overweeg om de database op een totaal andere plaats neer te zetten, bijvoorbeeld in <code>/var/lib/mediawiki/yourwiki</code>.",
+       'config-support-info' => 'MediaWiki ondersteunt de volgende databasesystemen:
+
+$1
+
+Als je het databasesysteem dat je wilt gebruiken niet in de lijst terugvindt, volg dan de handleiding waarnaar hierboven wordt verwezen om ondersteuning toe te voegen.',
+       'config-missing-db-name' => 'Je moet een waarde ingeven voor "Databasenaam"',
+       'config-missing-db-host' => 'Je moet een waarde invoeren voor "Databaseserver"',
+       'config-missing-db-server-oracle' => 'Je moet een waarde voor "Database-TNS" ingeven',
+       'config-postgres-old' => 'PostgreSQL $1 of hoger is vereist.
+Jij gebruikt $2.',
+       'config-sqlite-name-help' => 'Kies een naam die je wiki identificeert.
+Gebruik geen spaties of koppeltekens.
+Deze naam wordt gebruikt voor het gegevensbestand van SQLite.',
+       'config-upgrade-done' => "Het bijwerken is afgerond.
+
+Je kunt [$1 je wiki nu gebruiken].
+
+Als je je <code>LocalSettings.php</code> opnieuw wilt aanmaken, klik dan op de knop hieronder.
+Dit is '''niet aan te raden''' tenzij je problemen hebt met je wiki.",
+       'config-upgrade-done-no-regenerate' => 'Het bijwerken is afgerond.
+
+Je kunt nu [$1 je wiki gebruiken].',
+       'config-db-web-no-create-privs' => 'De gebruiker die je hebt opgegeven voor de installatie heeft niet voldoende rechten om een gebruiker aan te maken.
+De gebruiker die je hier opgeeft moet al bestaan.',
+       'config-mysql-myisam-dep' => "'''Waarschuwing''': je hebt MyISAM geselecteerd als opslagengine voor MySQL. Dit is niet aan te raden voor MediaWiki omdat:
+* het nauwelijks ondersteuning biedt voor gebruik door meerdere gebruikers tegelijkertijd door het locken van tabellen;
+* het meer vatbaar is voor corruptie dan andere engines;
+* de code van MediaWiki niet alstijd omgaat met MyISAM zoals dat zou moeten.
+
+Als je installatie van MySQL InnoDB ondersteunt, gebruik dat dan vooral.
+Als je installatie van MySQL geen ondersteuning heeft voor InnoDB, denk dan na over upgraden.",
+       'config-mysql-charset-help' => "In '''binaire modus''' slaat MediaWiki tekst in UTF-8 op in binaire databasevelden.
+Dit is efficiënter dan de UTF-8-modus van MySQL en stelt je in staat de volledige reeks Unicodetekens te gebruiken.
+
+In '''UTF-8-modus''' kent MySQL de tekenset van je gegevens en kan de databaseserver ze juist weergeven en converteren.
+Het is dat niet mogelijk tekens op te slaan die de \"[//nl.wikipedia.org/wiki/Lijst_van_Unicode-subbereiken#Basic_Multilingual_Plane Basic Multilingual Plane]\" te boven gaan.",
+       'config-ibm_db2-low-db-pagesize' => "Je DB2-database heeft een standaard tablespace met een onvoldoende grote pagesize. De pagesize moet tenminste '''32K''' zijn.",
+       'config-project-namespace-help' => "In het kielzog van Wikipedia beheren veel wiki's hun beleidspagina's apart van hun inhoudelijke pagina's in een \"'''projectnaamruimte'''\".
+Alle paginanamen in deze naamruimte beginnen met een bepaald voorvoegsel dat je hier kunt aangeven.
+Dit voorvoegsel wordt meestal afgeleid van de naam van de wiki, maar het kan geen bijzondere tekens bevatten als \"#\" of \":\".",
+       'config-admin-name' => 'Je naam:',
+       'config-admin-password-mismatch' => 'De twee door jou ingevoerde wachtwoorden komen niet overeen.',
+       'config-admin-email-help' => "Voer hier een e-mailadres in om e-mail te kunnen ontvangen van andere gebruikers op de wiki, je wachtwoord opnieuw in te kunnen stellen en op de hoogte te worden gehouden van wijzigingen van pagina's op uw volglijst. Je kunt het veld leeg laten.",
+       'config-admin-error-bademail' => 'Je hebt een ongeldig e-mailadres opgegeven',
+       'config-subscribe-help' => 'Dit is een mailinglijst met een laag volume voor aankondigingen van nieuwe versies, inclusief belangrijke aankondigingen met betrekking tot beveiliging.
+Abonneer jezelf erop en werk je MediaWiki-installatie bij als er nieuwe versies uitkomen.',
+       'config-subscribe-noemail' => 'Je hebt geprobeerd je te abonneren op de mailinglijst voor release-aankondigingen zonder een e-mailadres op te geven.
+Geef een e-mailadres op als je je wilt abonneren op de mailinglijst.',
+       'config-almost-done' => 'Je bent bijna klaar!
+Als je wilt kan je de overige instellingen overslaan en de wiki nu installeren.',
+       'config-profile-help' => "Wiki's werken het beste als ze door zoveel mogelijk gebruikers worden bewerkt.
+In MediaWiki is het eenvoudig om de recente wijzigingen te controleren en eventuele foutieve of kwaadwillende bewerkingen terug te draaien.
+
+Daarnaast vinden velen MediaWiki goed inzetbaar in vele andere rollen, en soms is het niet handig om helemaal \"op de wikimanier\" te werken.
+Daarom biedt dit installatieprogramma je de volgende keuzes voor de basisinstelling van gebruikersvrijheden:
+
+Een '''{{int:config-profile-wiki}}''' staat iedereen toe te bewerken, zonder zelfs aan te melden.
+Een wiki met '''{{int:config-profile-no-anon}}\" biedt extra verantwoordelijkheid, maar kan afschrikken toevallige gebruikers afschrikken.
+
+Het scenario '''{{int:config-profile-fishbowl}}''' laat gebruikers waarvoor dat is ingesteld bewerkt, maar andere gebruikers kunnen alleen pagina's bekijken, inclusief de bewerkingsgeschiedenis.
+In een '''{{int:config-profile-private}}''' kunnen alleen goedgekeurde gebruikers pagina's bekijken en bewerken.
+
+Meer complexe instellingen voor gebruikersrechten zijn te maken na de installatie; hierover is meer te lezen in de [//www.mediawiki.org/wiki/Manual:User_rights handleiding].", # Fuzzy
+       'config-license-help' => "In veel openbare wiki's zijn alle bijdragen beschikbaar onder een [http://freedomdefined.org/Definition vrije licentie].
+Dit helpt bij het creëren van een gevoel van gemeenschappelijk eigendom en stimuleert bijdragen op lange termijn.
+Dit is over het algemeen niet nodig is voor een particuliere of zakelijke wiki.
+
+Als je teksten uit Wikipedia wilt kunnen gebruiken en je wilt het mogelijk maken teksten uit je wiki naar Wikipedia te kopiëren, kies dan de licentie '''Creative Commons Naamsvermelding-Gelijk delen'''.
+
+De GNU Free Documentation License is de oude licentie voor inhoud uit Wikipedia.
+Dit is nog steeds een geldige licentie, maar deze licentie is lastig te begrijpen.
+Het is ook lastig inhoud te hergebruiken onder de GFDL.",
+       'config-enable-email-help' => 'Als je wilt dat e-mailen mogelijk is, dan moeten de [http://www.php.net/manual/en/mail.configuration.php e-mailinstellingen van PHP] correct zijn.
+Als je niet wilt dat e-mailen mogelijk is, dan kan je de instellingen hier uitschakelen.',
+       'config-upload-help' => "Het toestaan van het uploaden van bestanden stelt je server mogelijk bloot aan beveiligingsrisico's.
+Er is meer [//www.mediawiki.org/wiki/Manual:Security informatie over beveiliging] beschikbaar in de handleiding.
+
+Om het bestandsuploads mogelijk te maken kan je de rechten op de submap <code>images</code> onder de hoofdmap van MediaWiki aanpassen, zodat de webserver erin kan schrijven.
+Daarmee wordt deze functie ingeschakeld.",
+       'config-logo-help' => 'Het standaarduiterlijk van MediaWiki bevat ruimte voor een logo van 135x160 pixels boven het menu.
+Upload een afbeelding met de juiste afmetingen en voer de URL hier in.
+
+Als je geen logo wilt gebruiken, kan je dit veld leeg laten.',
+       'config-cc-not-chosen' => 'Kies alsjeblieft de Creative Commonslicentie die je wilt gebruiken en klik op "doorgaan".',
+       'config-memcache-needservers' => 'Je hebt Memcached geselecteerd als je cache, maar je hebt geen servers opgegeven.',
+       'config-memcache-badip' => 'Je hebt een ongeldig IP-adres ingevoerd voor Memcached: $1.',
+       'config-memcache-noport' => 'Je hebt geen poort opgegeven voor de Memcachedserver: $1.
+De standaardpoort is 11211.',
+       'config-extensions-help' => 'De bovenstaande uitbreidingen zijn aangetroffen in de map <code>./extensions</code>.
+
+Mogelijk moet je aanvullende instellingen maken, maar je kunt deze uitbreidingen nu inschakelen.',
+       'config-install-alreadydone' => "'''Waarschuwing:''' het lijkt alsof je MediaWiki al hebt geïnstalleerd en probeert het programma opnieuw te installeren.
+Ga alsjeblieft door naar de volgende pagina.",
+       'config-install-begin' => 'Als je nu op "{{int:config-continue}}" klikt, begint de installatie van MediaWiki.
+Als je nog wijzigingen wilt maken, klik dan op "Terug".', # Fuzzy
+       'config-pg-no-plpgsql' => 'Je moet de taal PL/pgSQL installeren in de database $1',
+       'config-pg-no-create-privs' => 'De gebruiker die je hebt opgegeven door de installatie heeft niet voldoende rechten om een gebruiker aan te maken.',
+       'config-pg-not-in-role' => 'De gebruiker die je hebt opgegeven voor de webgebruiker bestaat al.
+De gebruiker die je hebt opgegeven voor installatie is geen superuser en geen lid van de rol van de webgebruiker, en kan het dus geen objecten aanmaken die van de webgebruiker zijn.
+
+MediaWiki vereist momenteel dat de tabellen van de webgebruiker zijn. Geef een andere webgebruikersnaam op, of klik op "terug" en geef een gebruiker op die voldoende installatierechten heeft.',
+       'config-install-user-missing-create' => 'De opgegeven gebruiker "$1" bestaat niet.
+Klik op "registreren" onderaan als je de gebruiker wilt aanmaken.',
+       'config-install-done' => "'''Gefeliciteerd!'''
+Je hebt MediaWiki met geïnstalleerd.
+
+Het installatieprogramma heeft het bestand <code>LocalSettings.php</code> aangemaakt.
+Dit bevat al je instellingen.
+
+Je moet het bestand downloaden en in de hoofdmap van uw wikiinstallatie plaatsten; in dezelfde map als index.php.
+De download moet je automatisch zijn aangeboden.
+
+Als de download niet is aangeboden of als je de download hebt geannuleerd, dan kan je de download opnieuw starten door op de onderstaande koppeling te klikken:
+
+$3
+
+'''Let op''': als je dit niet nu doet, dan het is bestand als u later de installatieprocedure afsluit zonder het bestand te downloaden niet meer beschikbaar.
+
+Na het plaatsen van het bestand met instellingen kan je '''[$2 je wiki betreden]'''.",
+       'mainpagedocfooter' => 'Raadpleeg de [//meta.wikimedia.org/wiki/NL_Help:Inhoudsopgave handleiding] voor informatie over het gebruik van de wikisoftware.
+
+== Meer hulp over MediaWiki ==
+
+* [//www.mediawiki.org/wiki/Manual:Configuration_settings Lijst met instellingen]
+* [//www.mediawiki.org/wiki/Manual:FAQ Veelgestelde vragen (FAQ)]
+* [https://lists.wikimedia.org/mailman/listinfo/mediawiki-announce Mailinglijst voor aankondigingen van nieuwe versies]
+* [//www.mediawiki.org/wiki/Localisation#Translation_resources Maak MediaWiki beschikbaar in jouw taal]',
 );
 
 /** Norwegian Nynorsk (norsk (nynorsk)‎)
@@ -14102,6 +14742,7 @@ $messages['pdc'] = array(
  * @author Saper
  * @author Sp5uhe
  * @author Woytecr
+ * @author 아라
  */
 $messages['pl'] = array(
        'config-desc' => 'Instalator MediaWiki',
@@ -14109,19 +14750,19 @@ $messages['pl'] = array(
        'config-information' => 'Informacja',
        'config-localsettings-upgrade' => 'Plik <code>LocalSettings.php</code> istnieje.
 Aby oprogramowanie zostało zaktualizowane musisz wstawić wartość <code>$wgUpgradeKey</code> w poniższe pole.
-Odnajdziesz ją w LocalSettings.php.',
-       'config-localsettings-cli-upgrade' => 'Wykryto obecność pliku LocalSettings.php.
-Aktualizację należy wykonać poprzez uruchomienie update.php',
+Odnajdziesz ją w <code>LocalSettings.php</code>.',
+       'config-localsettings-cli-upgrade' => 'Wykryto obecność pliku <code>LocalSettings.php</code>.
+Aktualizację należy wykonać poprzez uruchomienie <code>update.php</code>',
        'config-localsettings-key' => 'Klucz aktualizacji',
        'config-localsettings-badkey' => 'Podany klucz jest nieprawidłowy',
        'config-upgrade-key-missing' => 'Wykryto zainstalowane wcześniej MediaWiki.
-Jeśli chcesz je zaktualizować dodaj na koniec pliku LocalSettings.php poniższą linię tekstu.
+Jeśli chcesz je zaktualizować dodaj na koniec pliku <code>LocalSettings.php</code> poniższą linię tekstu.
 
 $1',
-       'config-localsettings-incomplete' => 'Istniejący plik LocalSettings.php wygląda na niekompletny.
+       'config-localsettings-incomplete' => 'Istniejący plik <code>LocalSettings.php</code> wygląda na niekompletny.
 Brak wartości zmiennej $1.
-Zmień plik LocalSettings.php, tak by zawierał deklarację wartości tej zmiennej, a następnie kliknij „Dalej”.',
-       'config-localsettings-connection-error' => 'Wystąpił błąd podczas łączenia z bazą danych z wykorzystaniem danych z LocalSettings.php lub AdminSettings.php.
+Zmień plik <code>LocalSettings.php</code>, tak by zawierał deklarację wartości tej zmiennej, a następnie kliknij „{{int:Config-continue}}”.',
+       'config-localsettings-connection-error' => 'Wystąpił błąd podczas łączenia z bazą danych z wykorzystaniem danych z <code>LocalSettings.php</code> lub <code>AdminSettings.php</code>.
 Popraw ustawienia i spróbuj ponownie.
 
 $1',
@@ -14252,7 +14893,7 @@ Instalacja została przerwana.',
        'config-using531' => 'MediaWiki nie może być używane z PHP $1 z powodu błędu dotyczącego referencyjnych argumentów funkcji <code>__call()</code>.
 Uaktualnij do PHP 5.3.2 lub nowszego. Możesz również cofnąć wersję do PHP 5.3.0, aby naprawić ten błąd.
 Instalacja została przerwana.',
-       'config-suhosin-max-value-length' => 'Jest zainstalowany Suhosin i ogranicza długość parametru GET do $1  bajtów. Komponent ResourceLoader w MediaWiki  wykona obejście tego ograniczenia, ale kosztem wydajności. Jeśli to możliwe należy ustawić suhosin.get.max_value_length na 1024 lub wyższej w php.ini oraz ustawić $wgResourceLoaderMaxQueryLength w LocalSettings.php na tę samą wartość.',
+       'config-suhosin-max-value-length' => 'Jest zainstalowany Suhosin i ogranicza długość parametru GET do $1  bajtów. Komponent ResourceLoader w MediaWiki  wykona obejście tego ograniczenia, ale kosztem wydajności. Jeśli to możliwe należy ustawić <code>suhosin.get.max_value_length</code> na 1024 lub wyższej w <code>php.ini</code> oraz ustawić <code>$wgResourceLoaderMaxQueryLength</code> w LocalSettings.php na tę samą wartość.', # Fuzzy
        'config-db-type' => 'Typ bazy danych',
        'config-db-host' => 'Adres serwera bazy danych',
        'config-db-host-help' => 'Jeśli serwer bazy danych jest na innej maszynie, wprowadź jej nazwę domenową lub adres IP.
@@ -14334,7 +14975,7 @@ Poniżej wyświetlone są systemy baz danych gotowe do użycia. Jeżeli poniżej
        'config-support-postgres' => '* $1 jest popularnym systemem baz danych, często stosowanym zamiast MySQL  ([http://www.php.net/manual/en/pgsql.installation.php Zobacz, jak skompilować PHP ze wsparciem dla PostgreSQL]). Z powodu możliwości wystąpienia drobnych błędów, nie jest zalecana do wymagających wdrożeń.',
        'config-support-sqlite' => '* $1 jest niewielkim systemem bazy danych, z którym MediaWiki bardzo dobrze współpracuje. ([http://www.php.net/manual/en/pdo.installation.php Jak skompilować PHP ze wsparciem dla SQLite], korzystając z PDO)',
        'config-support-oracle' => '* $1 jest komercyjną profesjonalną bazą danych. ([http://www.php.net/manual/en/oci8.installation.php Jak skompilować PHP ze wsparciem dla OCI8])',
-       'config-support-ibm_db2' => '* $1 jest komercyjną zaawansowaną bazą danych.',
+       'config-support-ibm_db2' => '* $1 jest komercyjną zaawansowaną bazą danych.', # Fuzzy
        'config-header-mysql' => 'Ustawienia MySQL',
        'config-header-postgres' => 'Ustawienia PostgreSQL',
        'config-header-sqlite' => 'Ustawienia SQLite',
@@ -14401,8 +15042,8 @@ Jest to '''nie zalecane''', chyba że występują problemy z twoją wiki.",
        'config-upgrade-done-no-regenerate' => 'Aktualizacja zakończona.
 
 Możesz wreszcie [$1 zacząć korzystać ze swojej wiki].',
-       'config-regenerate' => 'Ponowne generowanie LocalSettings.php →',
-       'config-show-table-status' => 'Zapytanie „SHOW TABLE STATUS” nie powiodło się!',
+       'config-regenerate' => 'Ponowne generowanie <code>LocalSettings.php</code> →',
+       'config-show-table-status' => 'Zapytanie „<code>SHOW TABLE STATUS</code>” nie powiodło się!',
        'config-unknown-collation' => "'''Uwaga''' – bazy danych używa nierozpoznanej metody porównywania.",
        'config-db-web-account' => 'Konto bazy danych dla dostępu przez WWW',
        'config-db-web-help' => 'Wybierz nazwę użytkownika i hasło, z których korzystać będzie serwer WWW do łączenia się z serwerem baz danych, podczas zwykłej pracy z wiki.',
@@ -14474,7 +15115,7 @@ Możesz pominąć pozostałe czynności konfiguracyjne i zainstalować wiki.',
        'config-optional-continue' => 'Zadaj mi więcej pytań.',
        'config-optional-skip' => 'Jestem już znudzony, po prostu zainstaluj wiki.',
        'config-profile' => 'Profil uprawnień użytkowników',
-       'config-profile-wiki' => 'Tradycyjne wiki',
+       'config-profile-wiki' => 'Tradycyjne wiki', # Fuzzy
        'config-profile-no-anon' => 'Wymagane utworzenie konta',
        'config-profile-fishbowl' => 'Wyłącznie zatwierdzeni edytorzy',
        'config-profile-private' => 'Prywatna wiki',
@@ -14489,7 +15130,7 @@ Wiki z '''{{int:config-profile-no-anon}}''' zawiera dodatkowe funkcje rozliczani
 Scenariusz '''{{int:config-profile-fishbowl}}''' umożliwia zatwierdzonym użytkownikom edycję, ale wyświetlanie stron jest powszechnie dostępne, włącznie z historią.
 Ustawienie '''{{int:config-profile-private}}'' ' pozwala na wyświetlanie stron tylko zatwierdzonym użytkownikom, ta sama grupa może edytować.
 
-Bardziej skomplikowane konfiguracje uprawnień użytkowników są dostępne po zakończeniu instalacji, zobacz [//www.mediawiki.org/wiki/Manual:User_rights odpowiednią część podręcznika].",
+Bardziej skomplikowane konfiguracje uprawnień użytkowników są dostępne po zakończeniu instalacji, zobacz [//www.mediawiki.org/wiki/Manual:User_rights odpowiednią część podręcznika].", # Fuzzy
        'config-license' => 'Prawa autorskie i licencja',
        'config-license-none' => 'Brak stopki z licencją',
        'config-license-cc-by-sa' => 'Creative Commons – za uznaniem autora, na tych samych zasadach',
@@ -14574,7 +15215,7 @@ Mogą one wymagać dodatkowych czynności konfiguracyjnych, ale można je teraz
        'config-install-alreadydone' => "'''Uwaga''' – wydaje się, że MediaWiki jest już zainstalowane, a obecnie próbujesz zainstalować je ponownie.
 Przejdź do następnej strony.",
        'config-install-begin' => 'Po naciśnięciu "{{int:config-continue}}", rozpocznie się instalacji MediaWiki.
-Jeśli nadal chcesz dokonać zmian, naciśnij wstecz.',
+Jeśli nadal chcesz dokonać zmian, naciśnij wstecz.', # Fuzzy
        'config-install-step-done' => 'gotowe',
        'config-install-step-failed' => 'nieudane',
        'config-install-extensions' => 'Włącznie z rozszerzeniami',
@@ -14629,7 +15270,7 @@ $3
 '''Uwaga''': Jeśli tego nie zrobisz tego teraz, wygenerowany plik konfiguracyjny nie będzie już dostępny po zakończeniu instalacji.
 
 Po załadowaniu pliku konfiguracyjnego możesz '''[ $2  wejść na wiki]'''.",
-       'config-download-localsettings' => 'Pobierz LocalSettings.php',
+       'config-download-localsettings' => 'Pobierz <code>LocalSettings.php</code>',
        'config-help' => 'pomoc',
        'config-nofile' => 'Nie udało się odnaleźć pliku "$1". Czy nie został usunięty?',
        'mainpagetext' => "'''Instalacja MediaWiki powiodła się.'''",
@@ -14638,13 +15279,14 @@ Po załadowaniu pliku konfiguracyjnego możesz '''[ $2  wejść na wiki]'''.",
 == Na początek ==
 * [//www.mediawiki.org/wiki/Manual:Configuration_settings Lista ustawień konfiguracyjnych]
 * [//www.mediawiki.org/wiki/Manual:FAQ MediaWiki FAQ]
-* [https://lists.wikimedia.org/mailman/listinfo/mediawiki-announce Komunikaty o nowych wersjach MediaWiki]',
+* [https://lists.wikimedia.org/mailman/listinfo/mediawiki-announce Komunikaty o nowych wersjach MediaWiki]', # Fuzzy
 );
 
 /** Piedmontese (Piemontèis)
  * @author Borichèt
  * @author Dragonòt
  * @author Krinkle
+ * @author 아라
  */
 $messages['pms'] = array(
        'config-desc' => "L'instalador për mediaWiki",
@@ -14653,10 +15295,20 @@ $messages['pms'] = array(
        'config-localsettings-upgrade' => "A l'é stàit trovà n'archivi <code>LocalSettings.php</code>.
 Për agiorné cost'anstalassion, ch'a anserissa ël valor ëd <code>\$wgUpgradeKey</code> ant la casela sì-sota.
 A la trovrà an LocalSetting.php.",
-       'config-localsettings-cli-upgrade' => "N'archivi LocalSettings.php a l'é stàit trovà.
-Për agiorné sta instalassion, për piasì fà anvece giré update.php",
+       'config-localsettings-cli-upgrade' => "N'archivi <code>LocalSettings.php</code> a l'é stàit trovà.
+Për agiorné sta instalassion, për piasì fà anvece giré <code>update.php</code>",
        'config-localsettings-key' => "Ciav d'agiornament:",
        'config-localsettings-badkey' => "La ciav ch'it l'has dàit a l'é pa giusta.",
+       'config-upgrade-key-missing' => "A l'é stàita trovà n'istalassion esistenta ëd MediaWiki. 
+Për agiorné soa istalassion, për piasì ch'a buta la linia sì-sota al fond ëd sò <code>LocalSettings.php</code>:
+
+$1",
+       'config-localsettings-incomplete' => "L'esistent <code>LocalSettings.php</code> a smija esse ancomplet.
+La variàbil $1 a l'é nen ampostà.
+Për piasì, ch'a modìfica <code>LocalSettings.php</code> ëd fasson che costa variàbil a sia ampostà, e ch'a sgnaca «{{int:Config-continue}}».",
+       'config-localsettings-connection-error' => "A l'é ancapitaje n'eror an colegand-se a la base ëd dàit an dovrand j'ampostassion specificà an <code>LocalSettings.php</code> o <code>AdminSettings.php</code>. Për piasì, ch'a coregia cost'ampostassion e ch'a preuva torna.
+
+$1",
        'config-session-error' => 'Eror an fasend parte la session: $1',
        'config-session-expired' => "Ij sò dat ëd session a smijo scadù.
 Le session a son configurà për na durà ëd $1.
@@ -14684,6 +15336,7 @@ Ch'a contròla sò php.ini e ch'as sigura che <code>session.save_path</code> a s
        'config-page-releasenotes' => 'Nòte ëd publicassion',
        'config-page-copying' => 'Copié',
        'config-page-upgradedoc' => 'Agiorné',
+       'config-page-existingwiki' => 'Wiki esistenta',
        'config-help-restart' => "Veul-lo scancelé tùit ij dat salvà ch'a l'ha anserì e anandié torna ël process d'instalassion?",
        'config-restart' => 'É!, felo torna parte',
        'config-welcome' => "=== Contròj d'ambient ===
@@ -14712,13 +15365,21 @@ It peule instalé MediaWiki.",
        'config-env-bad' => "L'ambient a l'é stàit controlà.
 It peule pa instalé MediaWiki.",
        'config-env-php' => "PHP $1 a l'é instalà.",
+       'config-env-php-toolow' => "PHP $1 a l'é instalà.
+Ant tùit ij cas, MediaWiki a ciama PHP $2 o pi neuv.",
        'config-unicode-using-utf8' => 'As deuvra utf8_normalize.so ëd Brion Vibber për la normalisassion Unicode.',
        'config-unicode-using-intl' => "As deuvra l'[http://pecl.php.net/intl estension intl PECL] për la normalisassion Unicode.",
        'config-unicode-pure-php-warning' => "'''Avis:''' L'[http://pecl.php.net/intl estension intl PECL] a l'é pa disponìbil për gestì la normalisassion Unicode, da già che l'implementassion an PHP pur a faliss për lentëssa.
 S'a gestiss un sit a àut tràfich, a dovrìa lese cheicòs an sla [//www.mediawiki.org/wiki/Unicode_normalization_considerations normalisassion Unicode].",
        'config-unicode-update-warning' => "'''Avis:''' La version instalà dlë spassiador ëd normalisassion Unicode a deuvra na version veja ëd la librarìa dël [http://site.icu-project.org/ proget ICU].
 A dovrìa fé n'[//www.mediawiki.org/wiki/Unicode_normalization_considerations agiornament] s'a l'é anteressà a dovré Unicode.",
-       'config-no-db' => 'Impossìbil tové un pilòta ëd base ëd dàit bon!', # Fuzzy
+       'config-no-db' => "Impossìbil trové un pilòta ëd base ëd dàit bon! A dev instalé un pilòta ëd base ëd dàit për PHP.
+Le sòrt ëd database ch'a ven-o a son apogià: $1.
+
+S'a l'é ansima a 'n servissi partagià, ch'a ciama a sò fornidor ëd servissi d'instalé un pilòta ëd base ëd dàit compatìbil.
+S'a l'é compilasse PHP chiel-midem, ch'a lo configura torna con un client ëd base ëd dàit abilità, për esempi an dovrand <code>./configure --with-mysql</code>.
+S'a l'ha instalà PHP dai pachèt Debian o Ubuntu, antlora a dev ëdcò istalé ël mòdul php5-mysql.",
+       'config-outdated-sqlite' => "'''Avis''': chiel a l'ha SQLite $1, che a l'é pi vej che la version mìnima dont a-i é damanca $2. SQLite a sarà pa disponìbil.",
        'config-no-fts3' => "'''Avis''': SQLite a l'é compilà sensa ël mòdul [//sqlite.org/fts3.html FTS3], le funsion d'arserca a saran pa disponìbij su cost motor.",
        'config-register-globals' => "'''Avis: L'opsion <code>[http://php.net/register_globals register_globals]</code> ëd PHP a l'é abilità.'''
 '''Ch'a la disabìlita s'a peul.'''
@@ -14742,14 +15403,19 @@ MediaWiki a l'ha da manca dle funsion an sto mòdul e a travajërà pa an costa
 S'a fa giré mandrake, ch'a instala ël pachet php-xml.",
        'config-pcre' => "A smija che ël mòdul d'apògg PCRE a sia mancant.
 MediaWiki a l'ha da manca dle funsion d'espression regolar Perl-compatìbij për marcé.",
+       'config-pcre-no-utf8' => "'''Fatal''': ël mòdul PCRE ëd PHP a smija esse compilà sensa l'apògg PCRE_UTF8.
+MediaWiki a ciama l'apògg d'UTF8 për marcé për da bin.",
        'config-memory-raised' => "<code>memory_limit</code> ëd PHP a l'é $1, aussà a $2.",
        'config-memory-bad' => "'''Avis:''' <code>memory_limit</code> ëd PHP a l'é $1.
 Sossì a l'é probabilment tròp bass.
 L'instalassion a peul falì!",
+       'config-ctype' => "'''Fatal''': PHP a dev esse compilà con l'apògg për l'[http://www.php.net/manual/en/ctype.installation.php extension Ctype].",
        'config-xcache' => "[http://xcache.lighttpd.net/ XCache] a l'é instalà",
        'config-apc' => "[http://www.php.net/apc APC] a l'é instalà",
        'config-wincache' => "[http://www.iis.net/download/WinCacheForPhp WinCache]  a l'é instalà",
        'config-no-cache' => "'''Avis:''' As treuva pa [http://www.php.net/apc APC], [http://xcache.lighttpd.net/ XCache] o [http://www.iis.net/download/WinCacheForPhp WinCache]. Ël buté d'oget an memòria local a l'é pa abilità.",
+       'config-mod-security' => "'''Avis''': Sò servent për l'aragnà a l'ha [http://modsecurity.org/ mod_security] abilità. Se mal configurà, a peul causé dij problema për MediaWiki o d'àutri programa ch'a përmëtto a j'utent dë spedì un contnù qualsëssìa.
+Ch'a fasa arferiment a la [http://modsecurity.org/documentation/ mod_security documentassion] o ch'a contata l'echip ëd sò servissi s'a-j rivo dj'eror casuaj.",
        'config-diff3-bad' => 'GNU diff3 pa trovà.',
        'config-imagemagick' => "Trovà ImageMagick: <code>$1</code>.
 La miniaturisassion ëd figure a sarà abilità s'it abìlite le carie.",
@@ -14759,27 +15425,52 @@ La miniaturisassion ëd figure a sarà abilità s'a abìlita ij cariament.",
 La miniaturisassion ëd figure a sarà disabilità.',
        'config-no-uri' => "'''Eror:''' As peul pa determiné l'URI corenta.
 Instalassion abortìa.",
+       'config-no-cli-uri' => "'''Avis''': pa gnun --scriptpath specificà, a sarà dovrà ël predefinì: <code>$1</code>.",
+       'config-using-server' => 'Utilisassion dël nòm ëd servent "<nowiki>$1</nowiki>".',
+       'config-using-uri' => "Utilisassion ëd l'anliura ëd servent «<nowiki>$1$2</nowiki>».",
        'config-uploads-not-safe' => "'''Avis:''' Sò dossié stàndard për carié <code>$1</code> a l'é vulneràbil a l'esecussion ëd qualsëssìa senari.
 Bele che MediaWiki a contròla j'aspet ëd sicurëssa ëd tùit j'archivi carià, a l'é motobin arcomandà ëd [//www.mediawiki.org/wiki/Manual:Security#Upload_security saré ës përtus ëd sicurëssa] prima d'abilité ij cariament.",
+       'config-no-cli-uploads-check' => "'''Avis:''' Toa cartela predefinìa për j-amportassion (<code>$1</code>) a l'é nen controlà a propòsit ëd la vulnerabilità
+d'esecussion ëd senari arbitrari durant l'istalassion CLI.",
+       'config-brokenlibxml' => "Sò sistema a l'ha na combinassion ëd version PHP e libxml2 che a l'ha dij bigat e a peul provoché la corussion ëd dat ëstërmà an MediaWiki e d'àutre aplicassion për l'aragnà.
+Ch'a agiorna a PHP 5.2.9 o pi neuv e libxml2 2.7.3 o pi neuv ([//bugs.php.net/bug.php?id=45996 bug filed with PHP]).
+Istalassion abortìa.",
+       'config-using531' => "MediaWiki a peul pa esse dovrà con PHP $1 a motiv d'un bigat ch'a ìmplica ij paràmetr d'arferiment a <code>__call()</code>.
+Ch'a agiorna a PHP 5.3.2 o pi neuv, o ch'a torna andré a PHP 5.3.0 për arzòlve ës problema.
+Istalassion abortìa.",
+       'config-suhosin-max-value-length' => 'Suhosin a l\'é instalà e a lìmita la longheur dël paràmetr GET a $1 byte. Ël component ResourceLoader ëd MediaWiki a travajerà an rispetand ës lìmit, ma sòn a degraderà le prestassion. Se possìbil, a dovrìa amposté suhosin.get.max_value_lenght a 1024 o pi àut an <code>php.ini</code>, e amposté <code>$wgResourceLoaderMaxQueryLength</code> al midem valor an LocalSettings.php .', # Fuzzy
        'config-db-type' => 'Sòrt ëd base ëd dàit:',
        'config-db-host' => 'Ospitant ëd la base ëd dàit:',
-       'config-db-host-help' => "Se sò servent ëd base ëd dàit a l'é su un servent diferent, ch'a anseriss ambelessì ël nòm dl'ospitant o l'adrëssa IP.
+       'config-db-host-help' => "Se sò servent ëd base ëd dàit a l'é su un servent diferent, ch'a anserissa ambelessì ël nòm dl'ospitant o l'adrëssa IP.
 
 S'a deuvra n'ospitalità partagià, sò fornidor d'ospitalità a dovrìa deje ël nòm dl'ospitant giust ant soa documentassion.
 
-Se a anstala su un servent Windows e a deuvra MySQL, dovré \"localhost\" a podrìa funsioné nen com nòm dël servent. S'a marcia nen, ch'a preuva \"127.0.0.1\" com adrëssa IP local.", # Fuzzy
+Se a anstala su un servent Windows e a deuvra MySQL, dovré «localhost» a podrìa funsioné nen com nòm dël servent. S'a marcia nen, ch'a preuva «127.0.0.1» com adrëssa IP local.
+
+S'a deuvra PostgresSQL, ch'a lassa sto camp bianch për coleghesse a travers un socket UNIX.",
        'config-db-host-oracle' => 'TNS dla base ëd dàit:',
        'config-db-host-oracle-help' => "Anserì un [http://download.oracle.com/docs/cd/B28359_01/network.111/b28317/tnsnames.htm nòm ëd conession local] bon; n'archivi tnsnames.ora a dev esse visìbil da costa anstalassion..<br />S'a deuvra le librarìe cliente 10g o pi neuve a peul ëdcò dovré ël métod ëd nominassion [http://download.oracle.com/docs/cd/E11882_01/network.112/e10836/naming.htm Easy Connect].",
        'config-db-wiki-settings' => 'Identìfica sta wiki',
        'config-db-name' => 'Nòm dla base ëd dàit:',
        'config-db-name-help' => "Ch'a serna un nòm ch'a identìfica soa wiki.
-A dovrìa conten-e gnun ëspassi o tratin.
+A dovrìa conten-e gnun ëspassi.
 
-S'a deuvra n'ospitalità partagià, sò fornidor ëd l'ospitalità a-j darà un nòm ëd base ëd dàit specìfich da dovré, o a lassrà ch'a lo crea via un panel ëd contròl.", # Fuzzy
+S'a deuvra n'ospitalità partagià, sò fornidor ëd l'ospitalità a-j darà un nòm ëd base ëd dàit specìfich da dovré o a lassrà ch'a lo crea via un panel ëd contròl.",
        'config-db-name-oracle' => 'Schema dla base ëd dàit:',
+       'config-db-account-oracle-warn' => "A-i é tre possibilità mantnùe për istalé Oracle tanme terminal ëd base ëd dàit:
+
+S'a veul creé un cont ëd base ëd dàit com part dël process d'istalassion, për piasì ch'a fornissa un cont con ël ròl SYSDBA com cont ëd base ëd dàit për l'istalassion e ch'a specìfica le credensiaj vorsùe për ël cont d'acess an sl'aragnà, dësnò a peul ëdcò creé ël cont d'acess an sl'aragnà manualment e mach fornì col cont (se a l'ha ij përmess necessari për creé j'oget dë schema) o fornì doi cont diferent, un con ij privilegi ëd creé e un limità për l'acess an sla Ragnà.
+
+Ij senari për creé un cont con ij privilegi necessari a peul esse trovà ant la cartela «manutension/oracol/» ëd costa istalassion. Ch'a ten-a da ment che dovrand un cont limità a disabiliterà tute le funsion ëd manutension con ël cont predefinì.",
        'config-db-install-account' => "Cont d'utent për l'instalassion.",
        'config-db-username' => "Nòm d'utent dla base ëd dàit:",
        'config-db-password' => 'Ciav dla base ëd dàit:',
+       'config-db-password-empty' => "Për piasì, ch'a anserissa na ciav për ël neuv utent ëd base ëd dàit: $1.
+Con tut ch'a sia possìbil creé d'utent sensa ciav, a l'é pa na ròba sigura.",
+       'config-db-install-username' => "Ch'a nserissa lë stranòm che a sarà dovrà për coleghesse a la base ëd dàit durant ël process d'istalassion.
+Cost-sì a l'é nen lë stranòm dël cont MediaWiki; a l'é lë stranòm për soa base ëd dàit.",
+       'config-db-install-password' => "Ch'a anserissa la ciav che a sarà dovrà për coleghesse a la base ëd dàit durant ël process d'istalassion.
+Costa-sì a l'é nen la ciav dël cont MediaWiki; a l'é la ciav për soa base ëd dàit.",
        'config-db-install-help' => "Ch'a anserissa lë stranòm d'utent e la ciav che a saran dovrà për coleghesse a la base ëd dàit durant ël process d'instalassion.",
        'config-db-account-lock' => "Dovré ij midem stranòm d'utent e ciav durant j'operassion normaj",
        'config-db-wiki-account' => "Cont d'utent për j'operassion normaj",
@@ -14787,9 +15478,9 @@ S'a deuvra n'ospitalità partagià, sò fornidor ëd l'ospitalità a-j darà un
 S'ël cont a esist pa, e ël cont d'instalassion a l'ha ij privilegi ch'a-i van, sto cont utent a sarà creà con ij privilegi mìnin për fé marcé la wiki.",
        'config-db-prefix' => 'Prefiss dle tàule dla base ëd dàit:',
        'config-db-prefix-help' => "S'a l'ha dabzògn ëd partagé na base ëd dàit an tra vàire wiki, o tra MediaWiki e n'àutra aplicassion dl'aragnà, a peul serne ëd gionté un prefiss a tùit ij nòm ëd le tàule për evité ëd conflit.
-Ch'a deuvra ni dë spassi ni ëd tratin.
+Ch'a deuvra pa dë spassi.
 
-Cost camp a l'é lassà normalment veuid.", # Fuzzy
+Cost camp a l'é lassà normalment veuid.",
        'config-db-charset' => 'Ansema dij caràter dla base ëd dàit',
        'config-charset-mysql5-binary' => 'MySQL 4.1/5.0 binari',
        'config-charset-mysql5' => 'MySQL 4.1/5.0 UTF-8',
@@ -14802,8 +15493,9 @@ An '''manera UTF-8''', MySQL a arconòss an che ansema ëd caràter a son ij sò
        'config-mysql-old' => "A-i é da manca ëd MySQL $1 o pi recent, chiel a l'ha $2.",
        'config-db-port' => 'Porta dla base ëd dàit:',
        'config-db-schema' => 'Schema për MediaWiki',
-       'config-db-schema-help' => "Jë schema sì-dzora a son normalment giust.
-Ch'a-j cangia mach s'a sa ch'a n'ha da manca.", # Fuzzy
+       'config-db-schema-help' => "Lë schema sì-sota a l'é ëd sòlit giust.
+Ch'a lo cangia mach s'a sa ch'a n'ha da manca.",
+       'config-pg-test-error' => "Impossìbil coleghesse a la base ëd dàit '''$1'''; $2",
        'config-sqlite-dir' => 'Dossié dij dat SQLite:',
        'config-sqlite-dir-help' => "SQLite a memorisa tùit ij dat ant n'archivi ùnich.
 
@@ -14817,33 +15509,39 @@ Lòn a comprend ij dat brut ëd l'utent (adrëssa ëd pòsta eletrònica, ciav t
 Ch'a consìdera ëd buté la base ëd dàit tuta antrega da n'àutra part, për esempi an <code>/var/lib/mediawiki/yourwiki</code>.",
        'config-oracle-def-ts' => 'Spassi dla tàula dë stàndard:',
        'config-oracle-temp-ts' => 'Spassi dla tàula temporani:',
+       'config-type-ibm_db2' => 'IBM DB2',
        'config-support-info' => "MediaWiki a manten ij sistema ëd base ëd dàit sì-dapress:
 
 $1
 
 S'a vëd pa listà sì-sota ël sistema ëd base ëd dàit ch'a preuva a dovré, antlora va andaré a j'istrussion dl'anliura sì-dzora për abilité ël manteniment.",
        'config-support-mysql' => "* $1 e l'é l'obietiv primari për MediaWiki e a l'é mej mantnù ([http://www.php.net/manual/en/mysql.installation.php com compilé PHP con ël manteniment MySQL])",
-       'config-support-postgres' => "* $1 e l'é un sistema ëd base ëd dàit popolar a sorgiss duverta com alternativa a MySQL ([http://www.php.net/manual/en/pgsql.installation.php com compilé PHP con ël manteniment ëd PostgreSQL])", # Fuzzy
+       'config-support-postgres' => "* $1 e l'é un sistema ëd base ëd dàit popolar a sorgiss duverta com alternativa a MySQL ([http://www.php.net/manual/en/pgsql.installation.php com compilé PHP con ël manteniment ëd PostgreSQL]). A peulo ess-ie chèich cit bigat, e a l'é nen arcomandà ëd dovrelo an n'ambient ëd produssion.",
        'config-support-sqlite' => "* $1 e l'é un sistema ëd base ëd dàit leger che a l'é motobin bin mantnù ([http://www.php.net/manual/en/pdo.installation.php com compilé PHP con ël manteniment ëd SQLite], a deuvra PDO)",
        'config-support-oracle' => "* $1 a l'é na base ëd dàit comersial për j'amprèise. ([http://www.php.net/manual/en/oci8.installation.php Com compilé PHP con ël manteniment OCI8])",
+       'config-support-ibm_db2' => "* $1 a l'é na base ëd dàit d'asiendal comersial.", # Fuzzy
        'config-header-mysql' => 'Ampostassion MySQL',
        'config-header-postgres' => 'Ampostassion PostgreSQL',
        'config-header-sqlite' => 'Ampostassion SQLite',
        'config-header-oracle' => 'Ampostassion Oracle',
+       'config-header-ibm_db2' => "Ampostassion d'IBM DB2",
        'config-invalid-db-type' => 'Sòrt ëd ëd base ëd dàit pa bon-a',
        'config-missing-db-name' => 'A dev buteje un valor për "Nòm ëd la base ëd dàit"',
+       'config-missing-db-host' => 'A dev buteje un valor për "l\'òspit ëd la base ëd dàit"',
        'config-missing-db-server-oracle' => 'A dev buteje un valor për "TNS ëd la base ëd dat"',
        'config-invalid-db-server-oracle' => 'TNS ëd la base ëd dat pa bon "$1".
 Dovré mach dle litre ASCII (a-z, A-Z), nùmer (0-9), sotlignadure (_) e pontin (.).',
        'config-invalid-db-name' => 'Nòm ëd la base ëd dàit pa bon "$1".
-Dovré mach litre ASCII (a-z, A-Z), nùmer (0-9) e sotlignadure (_).', # Fuzzy
+Dovré mach litre ASCII (a-z, A-Z), nùmer (0-9), sotlignadure (_) e tratin (-).',
        'config-invalid-db-prefix' => 'Prefiss dla base ëd dàit pa bon "$1".
-Dovré mach litre ASCII (a-z, A-Z), nùmer (0-9) e sotlignadure (_).', # Fuzzy
+Dovré mach litre ASCII (a-z, A-Z), nùmer (0-9), sotlignadure (_) e tratin (-).',
        'config-connection-error' => "$1.
 
 Controla l'ospitant, lë stranòm d'utent e la ciav sì-sota e prové torna.",
        'config-invalid-schema' => 'Schema pa bon për MediaWiki "$1".
 Dovré mach litre ASCII (a-z, A-Z), nùmer (0-9) e sotlignadure (_).',
+       'config-db-sys-create-oracle' => "L'istalador a arconòss mach ij cont SYSDBA durant la creassion d'un cont neuv.",
+       'config-db-sys-user-exists-oracle' => 'Ël cont utent "$1" a esist già. SYSDBA a peul mach esse dovrà për creé un cont neuv!',
        'config-postgres-old' => "A-i é da manca ëd PostgreSQL $1 o pi recent, chiel a l'ha $2.",
        'config-sqlite-name-help' => "Serne un nòm ch'a identìfica soa wiki.
 Dovré nì dë spassi nì ëd tratin.
@@ -14883,8 +15581,11 @@ Adess a peule [$1 ancaminé a dovré soa wiki].
 
 S'a veul generé torna sò archivi <code>LocalSettings.php</code>, ch'a sgnaca ël boton sì-sota.
 Sòn a l'è '''pa arcomandà''' gavà ch'a rancontra dij problema con soa wiki.",
-       'config-regenerate' => 'Generé torna LocalSettings.php →',
-       'config-show-table-status' => 'Arcesta SHOW TABLE STATUS falìa!',
+       'config-upgrade-done-no-regenerate' => 'Agiornament complet.
+
+It peule adess [$1 ancaminé a dovré toa wiki].',
+       'config-regenerate' => 'Generé torna <code>LocalSettings.php</code> →',
+       'config-show-table-status' => 'Arcesta <code>SHOW TABLE STATUS</code> falìa!',
        'config-unknown-collation' => "'''Avis:''' La base ëd dàit a deuvra na classificassion pa arconossùa.",
        'config-db-web-account' => "Cont dla base ëd dàit për l'acess a l'aragnà",
        'config-db-web-help' => "Ch'a selession-a lë stranòm d'utent e la ciav che ël servent ëd l'aragnà a dovrërà për coleghesse al servent dle base ëd dàit, durant j'operassion ordinarie dla wiki.",
@@ -14895,6 +15596,13 @@ Sòn a l'è '''pa arcomandà''' gavà ch'a rancontra dij problema con soa wiki."
        'config-mysql-engine' => 'Motor ëd memorisassion:',
        'config-mysql-innodb' => 'InnoDB',
        'config-mysql-myisam' => 'MyISAM',
+       'config-mysql-myisam-dep' => "'''Avis''': A l'ha selessionà MyISAM com motor ëd memorisassion për MySQL, che a l'é pa arcomandà da dovré con MediaWiki, përchè:
+* a sopòrta a pen-a la contemporanità për via ëd saradure ëd tàula
+* a l'é pi soget a la corussion che j'àutri motor
+* ël còdes bas ëd MediaWiki pa sempe a gestiss MyISAM com a dovrìa
+
+Se soa istalassion MySQL a manten InnoDB, a l'é fortement arcomandà ch'a serna pitòst col-lì.
+Se soa istalassion MySQL a manten nen InnoDB, a peul esse ch'a sia ël moment ëd n'agiornament.",
        'config-mysql-engine-help' => "'''InnoDB''' a l'é scasi sempe la mej opsion, da già ch'a l'ha un bon manteniment dla concorensa.
 
 '''MyISAM''' a peul esse pi lest an instalassion për n'utent sol o mach an letura.
@@ -14906,6 +15614,7 @@ La base ëd dàit MyISAM a tira a corompse pi 'd soens che la base ëd dàit Inn
 Sòn a l'é pi eficient che la manera UTF-8 ëd MySQL, e a-j përmët ëd dovré l'ansema antregh ëd caràter Unicode.
 
 An '''manera UTF-8''', MySQL a conossrà an che ansem ëd caràter a son ij sò dat, e a peul presenteje e convertije apropriatament, ma a-j lassa pa memorisé ij caràter ëdzora al [//en.wikipedia.org/wiki/Mapping_of_Unicode_character_planes pian multilenghìstich ëd base].",
+       'config-ibm_db2-low-db-pagesize' => "Soa base ëd dàit DB2 a l'ha në spassi d'ambaronament predefinì con na dimension ëd pàgina insuficent. La dimension ëd pàgina a dev esse '''32K''' o pi gròssa.",
        'config-site-name' => 'Nòm ëd la wiki:',
        'config-site-name-help' => "Sòn a comparirà ant la bara dël tìtol dël navigador e an vàire d'àutri pòst.",
        'config-site-name-blank' => "Ch'a buta un nòm ëd sit.",
@@ -14918,6 +15627,8 @@ An '''manera UTF-8''', MySQL a conossrà an che ansem ëd caràter a son ij sò
 Tùit ij tìtoj ëd pàgina ant cost ëspassi nominal a parto con un sert prefiss, che a peul specifiché ambelessì.
 Tradissionalment, sto prefiss a l'é derivà dal nòm ëd la wiki, ma a peul pa conten-e caràter ëd pontegiatura coma \"#\" o \":\".",
        'config-ns-invalid' => 'Lë spassi nominal specificà "<nowiki>$1</nowiki>" a l\'é pa bon.
+Specìfica në spassi nominal ëd proget diferent.',
+       'config-ns-conflict' => 'Lë spassi nominal specificà "<nowiki>$1</nowiki>" a và contra në spassi nominal predefinì ëd MediaWiki.
 Specìfica në spassi nominal ëd proget diferent.',
        'config-admin-box' => "Cont ëd l'Aministrator",
        'config-admin-name' => 'Tò nòm:',
@@ -14932,18 +15643,21 @@ Specìfica un nòm utent diferent.',
        'config-admin-password-same' => "La ciav a dev nen esse l'istessa ëd lë stranòm d'utent.",
        'config-admin-password-mismatch' => "Le doe ciav che a l'ha scrivù a son diferente antra 'd lor.",
        'config-admin-email' => 'Adrëssa ëd pòsta eletrònica:',
-       'config-admin-email-help' => "Ch'a anserissa ambelessì n'adrëssa ëd pòsta eletrònica për përmëtt-je d'arsèive ëd mëssagi da d'àutri utent an sla wiki, riamposté soa ciav, e esse anformà ëd camgiament a le pàgine ch'a ten sot-euj.", # Fuzzy
+       'config-admin-email-help' => "Ch'a anserissa ambelessì n'adrëssa ëd pòsta eletrònica për përmëtt-je d'arsèive ëd mëssagi da d'àutri utent an sla wiki, riamposté soa ciav, e esse anformà dle modìfiche a le pàgine ch'a ten sot-euj. A peule lassé ës camp veuid.",
        'config-admin-error-user' => 'Eror antern an creand n\'aministrator con lë stranòm "<nowiki>$1</nowiki>".',
        'config-admin-error-password' => 'Eror antern an ampostand na ciav për l\'admin "<nowiki>$1</nowiki>": <pre>$2</pre>',
+       'config-admin-error-bademail' => "A l'ha butà n'adrëssa ëd pòsta eletrònica pa bon-a.",
        'config-subscribe' => "Ch'a sot-scriva la [https://lists.wikimedia.org/mailman/listinfo/mediawiki-announce lista ëd discussion ëd j'anonsi ëd publicassion].",
        'config-subscribe-help' => "Costa a l'é na lista ëd discussion a bass tràfich dovrà për j'anonsi ëd publicassion, comprèis d'amportant anonsi ëd sicurëssa.
 A dovrìa sot-ëscrivla e agiorné soa instalassion mediaWiki quand che ëd version neuve a rivo.",
+       'config-subscribe-noemail' => "A l'ha provà a abonesse a la lista ëd difusion dij comunicà sensa dé n'adrëssa ëd pòsta eletrònica.
+Për piasì, ch'a fornissa n'adrëssa ëd pòsta eletrònica s'a veul abonesse a la lista ëd pòsta.",
        'config-almost-done' => "A l'ha bele che fàit!
 A peul adess sauté la configurassion rimanenta e instalé dlongh la wiki.",
        'config-optional-continue' => "Ciameme d'àutre chestion.",
        'config-optional-skip' => 'I son già anojà, instala mach la wiki.',
        'config-profile' => "Profil dij drit d'utent:",
-       'config-profile-wiki' => 'Wiki tradissional',
+       'config-profile-wiki' => 'Deurb wiki',
        'config-profile-no-anon' => 'A venta creé un cont',
        'config-profile-fishbowl' => 'Mach editor autorisà',
        'config-profile-private' => 'Wiki privà',
@@ -14953,7 +15667,7 @@ An MediaWiki, a l'é bel fé revisioné ij cambi recent, e buté andré minca da
 An tùit ij cas, an tanti a l'han trovà che MediaWiki a sia ùtil ant na gran varietà ëd manere, e dle vire a l'é pa bel fé convince cheidun dij vantagi dla wiki.
 Parèj a l'ha doe possibilità.
 
-Un '''{{int:config-profile-wiki}}''' a përmët a chicassìa ëd modifiché, bele sensa intré ant ël sistema.
+Ël model '''{{int:config-profile-wiki}}''' a përmët a chicassìa ëd modifiché, bele sensa intré ant ël sistema.
 Na wiki con  '''{{int:config-profile-no-anon}}''' a dà pì 'd contròl, ma a peul slontané dij contribudor casuaj.
 
 Ël senari '''{{int:config-profile-fishbowl}}''' a përmët a j'utent aprovà ëd modifiché, ma ël pùblich a peul vëdde le pàgine, comprèisa la stòria.
@@ -14963,7 +15677,10 @@ Configurassion ëd drit d'utent pi complicà a son disponìbij apress l'instalas
        'config-license' => "Drit d'autor e licensa",
        'config-license-none' => 'Gnun-a licensa an nòta an bass',
        'config-license-cc-by-sa' => 'Creative Commons atribussion an part uguaj',
+       'config-license-cc-by' => 'Creative Commons Attribution',
        'config-license-cc-by-nc-sa' => 'Creative Commons atribussion nen comersial an part uguaj',
+       'config-license-cc-0' => 'Creative Commons Zero (domini pùblich)',
+       'config-license-gfdl' => 'Licensa GNU Free Documentation 1.3 o pi neuva',
        'config-license-pd' => 'Domini Pùblich',
        'config-license-cc-choose' => 'Selessioné na licensa Creative Commons përsonalisà',
        'config-license-help' => "Vàire wiki pùbliche a buto tute le contribussion sota na [http://freedomdefined.org/Definition licensa lìbera]. Sòn a giuta a creé un sens d'apartenensa a la comunità e a ancoragia ëd contribussion ëd longa durà.
@@ -14971,8 +15688,9 @@ A l'é generalment nen necessari për na wiki privà o d'asienda.
 
 S'a veul podèj dovré dij test da Wikipedia, e a veul che Wikipedia a aceta dij test copià da soa wiki, a dovrìa serne '''Creative Commons Attribution Share Alike'''.
 
-La GNU Free Documentation License a l'era la veja licensa dont sota a-i era Wikipedia.
-A l'é anco' na licensa bon-a, an tùit ij cas, sta licensa a l'ha chèich funsion ch'a rendo difìcij l'utilisassion e l'antërpretassion.", # Fuzzy
+Wikipedia prima a dovrava la GNU Free Documentation License.
+La GDFL a l'é anco' na licensa bon-a, ma a l'é malfé da capila.
+A l'é ëdcò mal fé riutilisé dël contnù licensià sota la GDFL.",
        'config-email-settings' => 'Ampostassion ëd pòsta eletrònica',
        'config-enable-email' => 'Abilité ij mëssagi ëd pòsta eletrònica an surtìa',
        'config-enable-email-help' => "S'a veul che la pòsta eletrònica a marcia, j'[http://www.php.net/manual/en/mail.configuration.php ampostassion ëd pòsta eletrònica PHP] a devo esse configurà për da bin.
@@ -15002,10 +15720,10 @@ Peui ch'a abìlita costa opsion.",
        'config-upload-deleted-help' => "ch'a serna un dossié andova goerné j'archivi scancelà.
 Idealment, sòn a dovrìa pa esse acessìbil an sl'aragnà.",
        'config-logo' => 'Anliura dla marca:',
-       'config-logo-help' => "La pel dë stàndard ëd MediaWiki a comprend lë spassi për na marca ëd 135x160 pontin ant ël canton an àut a snista.
+       'config-logo-help' => "La pel dë stàndard ëd MediaWiki a comprend lë spassi për na marca ëd 135x160 pontin dzora la lista dla bara lateral.
 Ch'a dëscaria na figura ëd la dimension aproprià, e ch'a anserissa l'anliura ambelessì.
 
-S'a veul gnun-e marche, ch'a lassa ës camp bianch.", # Fuzzy
+S'a veul gnun-e marche, ch'a lassa ës camp bianch.",
        'config-instantcommons' => 'Abìlita Instant Commons',
        'config-instantcommons-help' => "[//www.mediawiki.org/wiki/InstantCommons Instant Commons] a l'é na funsion ch'a përmët a le wiki ëd dovré dle figure, dij son e d'àutri mojen trovà an sël sit [//commons.wikimedia.org/ Wikimedia Commons].
 Për dovré sossì, MediaWiki a l'ha da manca dl'acess a la ragnà.
@@ -15024,21 +15742,45 @@ Ij sit da mesan a gròss a son motobin ancoragià a abilité sòn, e ij sit cit
        'config-cache-memcached' => "Dovré Memcached (a ciama n'ampostassion e na configurassion adissionaj)",
        'config-memcached-servers' => 'Servent Memcached:',
        'config-memcached-help' => "Lista d'adrësse IP da dovré për Memcached.
-A dovrìa esse separà con dle vìrgole e specifiché la pòrta da dovré (për esempi: 127.0.0.1:11211, 192.168.1.25:11211).", # Fuzzy
+A dovrìa specifichene un-a për linia e specifiché la pòrta da dovré. Për esempi:
+127.0.0.1:11211
+192.168.1.25:11211",
+       'config-memcache-needservers' => "A l'ha selessionà Memcached com soa sòrt ëd memorisassion local ma a l'ha specificà gnun servent.",
+       'config-memcache-badip' => "It l'ha anserì n'adrëssa IP pa bon-a për Memcached: $1.",
+       'config-memcache-noport' => "A l'ha pa specificà na pòrta da dovré për ël servent Memcached: $1.
+S'a conòsse nen la pòrta, cola predefinìa a l'é 11211.",
+       'config-memcache-badport' => 'Ij nùmer ëd pòrta ëd Memcached a dovrìo esse tra $1 e $2.',
        'config-extensions' => 'Estension',
        'config-extensions-help' => "J'estension listà dì-sota a son ëstàite trovà ant sò dossié <code>./extensions</code>.
 
 A peulo avèj da manca ëd configurassion adissionaj, ma a peul abiliteje adess",
        'config-install-alreadydone' => "'''Avis''' A smija ch'a l'abie già instalà MediaWiki e ch'a preuva a instalelo torna.
 Për piasì, ch'a vada a la pàgina ch'a-i ven.",
+       'config-install-begin' => 'An sgnacand "{{int:config-continue}}", a anandiërà l\'istalassion ëd MediaWiki.
+S\'a veul anco\' fé dle modìfiche, ch\'a sgnaca su "{{int:config-back}}".',
        'config-install-step-done' => 'fàit',
        'config-install-step-failed' => 'falì',
        'config-install-extensions' => "Comprende j'estension",
        'config-install-database' => 'Creassion ëd la base ëd dàit',
+       'config-install-schema' => 'Creassion dë schema',
+       'config-install-pg-schema-not-exist' => 'Lë schema postgreSQL a esist pa.',
        'config-install-pg-schema-failed' => 'Creassion dle tàule falìa.
 Sigurte che l\'utent "$1" a peussa scrive lë schema "$2".',
+       'config-install-pg-commit' => 'Salvé ij cambi.',
+       'config-install-pg-plpgsql' => 'Contròl dël langagi PL/pgSQL',
+       'config-pg-no-plpgsql' => 'A dev istalé ël langage PL/pgSQL ant la base ëd dàit $1',
+       'config-pg-no-create-privs' => "Ël cont ch'a l'ha specificà për l'istalassion a l'ha pa basta 'd privilegi për creé un cont.",
+       'config-pg-not-in-role' => "Ël cont ch'a l'ha specificà për l'utent ëd la ragnà a esist già.
+Ël cont ch'a l'has specificà për l'istalassion a l'é pa un superutent e a l'é pa un mémber dla partìa dj'utent dla Ragnà, parèj a peul pa creé dj'oget ch'a apartenent a l'utent dla Ragnà.
+
+MediaWiki al moment a ciama che le tàule a sia possedùe da n'utent dla Ragnà. Për piasì, ch'a specìfica n'àutr nòm ëd cont dla Ragnà, o ch'a sgnaca ansima a \"andré\" e ch'a specìfica n'utent ch'a l'ha ij privilegi ch'a basto për l'anstalassion.",
        'config-install-user' => "Creassion ëd n'utent ëd la base ëd dàit",
+       'config-install-user-alreadyexists' => 'L\'utent "$1" a esist già',
+       'config-install-user-create-failed' => "Faliment ant la creassion ëd l'utent «$1»: $2",
        'config-install-user-grant-failed' => 'Falì a dé ij përmess a l\'utent "$1": $2',
+       'config-install-user-missing' => 'L\'utent specificà "$1" a esist pa.',
+       'config-install-user-missing-create' => "L'utent specificà «$1» a esist pa.
+Për piasì, ch'a selession-a la casela «cont da creé» sì-sota s'a veul creelo.",
        'config-install-tables' => 'Creassion dle tàule',
        'config-install-tables-exist' => "'''Avis''': A smija che le tàule ëd mediaWiki a esisto già.
 Sauté la creassion.",
@@ -15047,26 +15789,41 @@ Sauté la creassion.",
        'config-install-interwiki-list' => "As peul pa trovesse l'archivi <code>interwiki.list</code>.",
        'config-install-interwiki-exists' => "'''Avis''': La tàula interwiki a smija ch'a l'abia già dj'element.
 Për stàndard, la lista a sarà sautà.",
-       'config-install-keys' => 'Generassion ëd la ciav segreta', # Fuzzy
+       'config-install-stats' => 'Inissialisassion dle statìstiche',
+       'config-install-keys' => 'Generassion ëd le ciav segrete',
+       'config-insecure-keys' => "'''Avis:''' {{PLURAL:$2|Na ciav sigura|Dle ciav sigure}} ($1) generà durant l'istalassion {{PLURAL:$2|a l'é|a son}} pa completament sigure. Ch'a consìdera ëd modifiche{{PLURAL:$2|la|je}} manualment.",
        'config-install-sysop' => "Creassion dël cont ëd l'utent aministrator",
+       'config-install-subscribe-fail' => 'As peul pa sot-scrivse mediawiki-announce: $1',
+       'config-install-subscribe-notpossible' => "cURL a l'é pa istalà e allow_url_fopen a l'é pa disponìbil.",
+       'config-install-mainpage' => 'Creassion ëd la pàgina prinsipal con un contnù predefinì',
+       'config-install-extension-tables' => "Creassion ëd tàule për j'estension abilità",
+       'config-install-mainpage-failed' => 'As peul pa inserisse la pàgina prinsipal: $1',
        'config-install-done' => "'''Congratulassion!'''
 A l'ha instalà për da bin mediaWiki.
 
 L'instalador a l'ha generà n'archivi <code>LocalSettings.php</code>.
 A conten tuta soa configurassion.
 
-A dovrà [$1 dëscarielo] e butelo ant la bas ëd l'instalassion ëd soa wiki (ël midem dossié d'index.php).
+A dovrà dëscarielo e butelo ant la bas ëd l'instalassion ëd soa wiki (ël midem dossié d'index.php). La dëscaria a dovrìa esse ancaminà automaticament.
+
+Se la dëscaria a l'é pa disponìbil, o s'a l'ha scancelala, a peul torna ancaminé la dëscaria an sgnacand an sla liura sì-sota:
+
+$3
+
 '''Nòta''': S'a lo fa nen adess, cost archivi ëd configurassion generà a sarà pa disponìbil për chiel pi tard s'a chita l'instalassion sensa dëscarielo.
 
-Quand che a l'é stàit fàit, a peul '''[$2 intré an soa wiki]'''.", # Fuzzy
+Quand che a l'é stàit fàit, a peul '''[$2 intré an soa wiki]'''.",
+       'config-download-localsettings' => 'Dëscarié <code>LocalSettings.php</code>',
        'config-help' => 'agiut',
+       'config-nofile' => "L'archivi «$1» as treuva nen. A l'é stàit ëscancelà?",
        'mainpagetext' => "'''MediaWiki a l'é staita anstalà a la përfession.'''",
        'mainpagedocfooter' => "Che a varda la [//meta.wikimedia.org/wiki/Help:Contents User's Guide] për avèj dj'anformassion ant sël coma dovré ël programa dla wiki.
 
 == Për anandiesse a travajé ==
 * [//www.mediawiki.org/wiki/Manual:Configuration_settings Lista dij paràmeter ëd configurassion]
 * [//www.mediawiki.org/wiki/Manual:FAQ MediaWiki Chestion frequente]
-* [https://lists.wikimedia.org/mailman/listinfo/mediawiki-announce Lista ëd discussion an sla distribussion ëd MediaWiki]",
+* [https://lists.wikimedia.org/mailman/listinfo/mediawiki-announce Lista ëd discussion an sla distribussion ëd MediaWiki]
+* [//www.mediawiki.org/wiki/Localisation#Translation_resources Localisa MediaWiki për toa lenga]",
 );
 
 /** Pontic (Ποντιακά)
@@ -15125,7 +15882,7 @@ $messages['ps'] = array(
        'config-admin-password' => 'پټنوم:',
        'config-admin-password-confirm' => 'پټنوم يو ځل بيا:',
        'config-admin-email' => 'برېښليک پته:',
-       'config-profile-wiki' => 'دوديزه ويکي',
+       'config-profile-wiki' => 'دوديزه ويکي', # Fuzzy
        'config-license-pd' => 'ټولګړی شپول',
        'config-email-settings' => 'د برېښليک امستنې',
        'config-install-step-done' => 'ترسره شو',
@@ -15137,7 +15894,8 @@ $messages['ps'] = array(
 == پيلول ==
 * [//www.mediawiki.org/wiki/Manual:Configuration_settings د امستنو د سازونې لړليک]
 * [//www.mediawiki.org/wiki/Manual:FAQ د ميډياويکي ډېرځليزې پوښتنې]
-* [https://lists.wikimedia.org/mailman/listinfo/mediawiki-announce د مېډياويکي د برېښليکونو لړليک]',
+* [https://lists.wikimedia.org/mailman/listinfo/mediawiki-announce د مېډياويکي د برېښليکونو لړليک]
+* [//www.mediawiki.org/wiki/Localisation#Translation_resources خپلې ژبې لپاره MediaWiki ځايتابول]',
 );
 
 /** Portuguese (português)
@@ -15147,6 +15905,7 @@ $messages['ps'] = array(
  * @author Platonides
  * @author SandroHc
  * @author Waldir
+ * @author 아라
  */
 $messages['pt'] = array(
        'config-desc' => 'O instalador do MediaWiki',
@@ -15154,19 +15913,19 @@ $messages['pt'] = array(
        'config-information' => 'Informação',
        'config-localsettings-upgrade' => 'Foi detectado um ficheiro <code>LocalSettings.php</code>.
 Para actualizar esta instalação, por favor introduza o valor de <code>$wgUpgradeKey</code> na caixa abaixo.
-Encontra este valor no LocalSettings.php.',
-       'config-localsettings-cli-upgrade' => 'Foi detectada a existência de um ficheiro LocalSettings.php.
-Para actualizar esta instalação execute o update.php, por favor.',
+Encontra este valor no <code>LocalSettings.php</code>.',
+       'config-localsettings-cli-upgrade' => 'Foi detectada a existência de um ficheiro <code>LocalSettings.php</code>.
+Para actualizar esta instalação execute o <code>update.php</code>, por favor.',
        'config-localsettings-key' => 'Chave de actualização:',
        'config-localsettings-badkey' => 'A chave que forneceu está incorreta.',
        'config-upgrade-key-missing' => 'Foi detectada uma instalação existente do MediaWiki.
-Para actualizar esta instalação, por favor coloque a seguinte linha no final do seu LocalSettings.php:
+Para actualizar esta instalação, por favor coloque a seguinte linha no final do seu <code>LocalSettings.php</code>:
 
 $1',
-       'config-localsettings-incomplete' => 'O ficheiro LocalSettings.php existente parece estar incompleto.
+       'config-localsettings-incomplete' => 'O ficheiro <code>LocalSettings.php</code> existente parece estar incompleto.
 A variável $1 não está definida.
-Por favor defina esta variável no LocalSettings.php e clique "Continuar".',
-       'config-localsettings-connection-error' => 'Ocorreu um erro ao ligar à base de dados usando as configurações especificadas no LocalSettings.php ou AdminSettings.php. Por favor corrija essas configurações e tente novamente.
+Por favor defina esta variável no <code>LocalSettings.php</code> e clique "{{int:Config-continue}}".',
+       'config-localsettings-connection-error' => 'Ocorreu um erro ao ligar à base de dados usando as configurações especificadas no <code>LocalSettings.php</code> ou <code>AdminSettings.php</code>. Por favor corrija essas configurações e tente novamente.
 
 $1',
        'config-session-error' => 'Erro ao iniciar a sessão: $1',
@@ -15298,7 +16057,7 @@ Instalação interrompida.',
        'config-using531' => 'O MediaWiki não pode ser usado com o PHP $1 devido a um problema que envolve parâmetros de referência para <code>__call()</code>.
 Para resolver este problema, actualize o PHP para a versão 5.3.2 ou posterior, ou reverta-o para a 5.3.0.
 Instalação interrompida.',
-       'config-suhosin-max-value-length' => 'O Suhosin está instalado e limita a $1 bytes o comprimento do parâmetro GET. O componente ResourceLoader do MediaWiki pode tornear este limite, mas prejudicando o desempenho. Se lhe for possível, deve atribuir o valor 1024 ou maior ao parâmetro suhosin.get.max_value_length no ficheiro php.ini, e definir o mesmo valor para $wgResourceLoaderMaxQueryLength no ficheiro LocalSettings.php.',
+       'config-suhosin-max-value-length' => 'O Suhosin está instalado e limita a $1 bytes o comprimento do parâmetro GET. O componente ResourceLoader do MediaWiki pode tornear este limite, mas prejudicando o desempenho. Se lhe for possível, deve atribuir o valor 1024 ou maior ao parâmetro <code>suhosin.get.max_value_length</code> no ficheiro <code>php.ini</code>, e definir o mesmo valor para <code>$wgResourceLoaderMaxQueryLength</code> no ficheiro LocalSettings.php.', # Fuzzy
        'config-db-type' => 'Tipo da base de dados:',
        'config-db-host' => 'Servidor da base de dados:',
        'config-db-host-help' => 'Se a base de dados estiver num servidor separado, introduza aqui o nome ou o endereço IP desse servidor.
@@ -15382,7 +16141,7 @@ Se a plataforma que pretende usar não está listada abaixo, siga as instruçõe
        'config-support-postgres' => '* $1 é uma plataforma de base de dados comum, de fonte aberta, alternativa ao MySQL ([http://www.php.net/manual/en/pgsql.installation.php como compilar PHP com suporte PostgreSQL]). Poderão existir alguns pequenos problemas e não é recomendado o seu uso em ambientes de exploração/produção.',
        'config-support-sqlite' => '* $1 é uma plataforma de base de dados ligeira muito bem suportada. ([http://www.php.net/manual/en/pdo.installation.php Como compilar PHP com suporte SQLite], usa PDO)',
        'config-support-oracle' => '* $1 é uma base de dados de uma empresa comercial. ([http://www.php.net/manual/en/oci8.installation.php How to compile PHP with OCI8 support])',
-       'config-support-ibm_db2' => '* $1 é uma base de dados empresarial.',
+       'config-support-ibm_db2' => '* $1 é uma base de dados empresarial.', # Fuzzy
        'config-header-mysql' => 'Definições MySQL',
        'config-header-postgres' => 'Definições PostgreSQL',
        'config-header-sqlite' => 'Definições SQLite',
@@ -15449,8 +16208,8 @@ Esta operação '''não é recomendada''' a menos que esteja a ter problemas com
        'config-upgrade-done-no-regenerate' => 'Actualização terminada.
 
 Agora pode [$1 começar a usar a sua wiki].',
-       'config-regenerate' => 'Regenerar o LocalSettings.php →',
-       'config-show-table-status' => 'A consulta SHOW TABLE STATUS falhou!',
+       'config-regenerate' => 'Regenerar o <code>LocalSettings.php</code> →',
+       'config-show-table-status' => 'A consulta <code>SHOW TABLE STATUS</code> falhou!',
        'config-unknown-collation' => "'''Aviso:''' A base de dados está a utilizar uma colação ''(collation)'' desconhecida.",
        'config-db-web-account' => 'Conta na base de dados para acesso pela internet',
        'config-db-web-help' => 'Seleccione o nome de utilizador e a palavra-chave que o servidor de internet irá utilizar para aceder ao servidor da base de dados, durante a operação normal da wiki.',
@@ -15523,7 +16282,7 @@ Agora pode saltar as configurações restantes e instalar já a wiki.',
        'config-optional-continue' => 'Faz-me mais perguntas.',
        'config-optional-skip' => 'Já estou aborrecido, instala lá a wiki.',
        'config-profile' => 'Perfil de permissões:',
-       'config-profile-wiki' => 'Wiki tradicional',
+       'config-profile-wiki' => 'Wiki tradicional', # Fuzzy
        'config-profile-no-anon' => 'Criação de conta exigida',
        'config-profile-fishbowl' => 'Somente utilizadores autorizados',
        'config-profile-private' => 'Wiki privada',
@@ -15539,7 +16298,7 @@ Uma wiki com '''{{int:config-profile-no-anon}}''' atribui mais responsabilidade,
 Um cenário '''{{int:config-profile-fishbowl}}''' permite que os utilizadores aprovados editem, mas que o público visione as páginas, incluindo o historial das mesmas.
 Uma '''{{int:config-profile-private}}''' só permite que os utilizadores aprovados visionem as páginas e as editem.
 
-Após a instalação, estarão disponíveis mais configurações de privilégios. Consulte [//www.mediawiki.org/wiki/Manual:User_rights a entrada relevante no Manual].",
+Após a instalação, estarão disponíveis mais configurações de privilégios. Consulte [//www.mediawiki.org/wiki/Manual:User_rights a entrada relevante no Manual].", # Fuzzy
        'config-license' => 'Direitos de autor e licença:',
        'config-license-none' => 'Sem rodapé com a licença',
        'config-license-cc-by-sa' => 'Creative Commons - Atribuição - Partilha nos Mesmos Termos',
@@ -15624,7 +16383,7 @@ Estas talvez necessitem de configurações adicionais, mas pode activá-las agor
        'config-install-alreadydone' => "'''Aviso:''' Parece que já instalou o MediaWiki e está a tentar instalá-lo novamente.
 Passe para a próxima página, por favor.",
        'config-install-begin' => 'Ao clicar "{{int:config-continue}}", vai iniciar a instalação do MediaWiki.
-Se quiser fazer mais alterações, clique Voltar.',
+Se quiser fazer mais alterações, clique Voltar.', # Fuzzy
        'config-install-step-done' => 'terminado',
        'config-install-step-failed' => 'falhou',
        'config-install-extensions' => 'A incluir as extensões',
@@ -15680,7 +16439,7 @@ $3
 '''Nota''': Se não fizer isto agora, o ficheiro que foi gerado deixará de estar disponível quando sair do processo de instalação.
 
 Depois de terminar o passo anterior, pode '''[$2 entrar na wiki]'''.",
-       'config-download-localsettings' => 'Download do LocalSettings.php',
+       'config-download-localsettings' => 'Download do <code>LocalSettings.php</code>',
        'config-help' => 'ajuda',
        'config-nofile' => 'Não foi possível encontrar o ficheiro "$1". Terá sido apagado?',
        'mainpagetext' => "'''MediaWiki instalado com sucesso.'''",
@@ -15690,7 +16449,7 @@ Depois de terminar o passo anterior, pode '''[$2 entrar na wiki]'''.",
 
 * [//www.mediawiki.org/wiki/Manual:Configuration_settings Lista de opções de configuração]
 * [//www.mediawiki.org/wiki/Manual:FAQ Perguntas e respostas frequentes sobre o MediaWiki]
-* [https://lists.wikimedia.org/mailman/listinfo/mediawiki-announce Subscreva a lista de divulgação de novas versões do MediaWiki]',
+* [https://lists.wikimedia.org/mailman/listinfo/mediawiki-announce Subscreva a lista de divulgação de novas versões do MediaWiki]', # Fuzzy
 );
 
 /** Brazilian Portuguese (português do Brasil)
@@ -15705,13 +16464,13 @@ $messages['pt-br'] = array(
        'config-information' => 'Informações',
        'config-localsettings-upgrade' => 'Foi detectada a existência do arquivo <code>LocalSettings.php</code>.
 Para atualizar esta instalação, insira no box abaixo o valor de <code>$wgUpgradeKey</code>.
-Essa informação pode ser encontrada no arquivo LocalSettings.php',
-       'config-localsettings-cli-upgrade' => 'Foi detectada a existência do arquivo <code>LocalSettings.php</code>.
+Essa informação pode ser encontrada no arquivo <code>LocalSettings.php</code>',
+       'config-localsettings-cli-upgrade' => 'Foi detectada a existência do arquivo <code><code>LocalSettings.php</code></code>.
 Esta instalação deverá ser atualizada através do <code>update.php</code>',
        'config-localsettings-key' => 'Chave de atualização:',
        'config-localsettings-badkey' => 'A chave fornecida está incorreta.',
        'config-upgrade-key-missing' => 'Foi detectada uma instalação existente do MediaWiki.
-Para atualizar esta instalação, por favor, coloque a seguinte linha na parte inferior do seu LocalSettings.php:
+Para atualizar esta instalação, por favor, coloque a seguinte linha na parte inferior do seu <code>LocalSettings.php</code>:
 
 $ 1', # Fuzzy
        'config-session-error' => 'Erro ao iniciar a sessão: $1',
@@ -15785,7 +16544,7 @@ Se você não pretende usar um logotipo, deixe este campo em branco.', # Fuzzy
 
 * [//www.mediawiki.org/wiki/Manual:Configuration_settings Lista de opções de configuração]
 * [//www.mediawiki.org/wiki/Manual:FAQ FAQ do MediaWiki]
-* [https://lists.wikimedia.org/mailman/listinfo/mediawiki-announce Lista de discussão com avisos de novas versões do MediaWiki]',
+* [https://lists.wikimedia.org/mailman/listinfo/mediawiki-announce Lista de discussão com avisos de novas versões do MediaWiki]', # Fuzzy
 );
 
 /** Quechua (Runa Simi)
@@ -15821,10 +16580,16 @@ $messages['rm'] = array(
 );
 
 /** Romanian (română)
+ * @author Firilacroco
  * @author Minisarm
  * @author Stelistcristi
  */
 $messages['ro'] = array(
+       'config-desc' => 'Programul de instalare pentru MediaWiki',
+       'config-title' => 'Instalarea MediaWiki $1',
+       'config-information' => 'Informații',
+       'config-localsettings-key' => 'Cheie de actualizare:',
+       'config-localsettings-badkey' => 'Cheia furnizată este incorectă.',
        'config-session-error' => 'Eroare la pornirea sesiunii: $1',
        'config-your-language' => 'Limba ta:',
        'config-your-language-help' => 'Alege o limbă pentru a o utiliza în timpul procesului de instalare.',
@@ -15840,46 +16605,153 @@ $messages['ro'] = array(
        'config-page-name' => 'Nume',
        'config-page-options' => 'Opţiuni',
        'config-page-install' => 'Instalare',
+       'config-page-complete' => 'Finalizat!',
        'config-page-restart' => 'Reporneşte instalarea',
        'config-page-readme' => 'Citeşte-mă',
        'config-page-releasenotes' => 'Note de lansare',
+       'config-page-copying' => 'Copiere',
+       'config-page-upgradedoc' => 'Actualizare',
+       'config-page-existingwiki' => 'Wiki existent',
+       'config-restart' => 'Da, repornește.',
+       'config-env-php' => 'PHP $1 este instalat.',
+       'config-env-php-toolow' => 'PHP $1 este instalat.
+Totuși, MediaWiki necesită PHP $2 sau mai nou.',
        'config-db-type' => 'Tipul bazei de date:',
        'config-db-host' => 'Gazdă bază de date:',
+       'config-db-host-oracle' => 'Baza de date TNS:',
+       'config-db-wiki-settings' => 'Identificați acest wiki',
+       'config-db-name' => 'Numele bazei de date:',
+       'config-db-name-oracle' => 'Schema bazei de date:',
+       'config-db-username' => 'Nume de utilizator pentru baza de date:',
+       'config-db-password' => 'Parola bazei de date:',
+       'config-db-prefix' => 'Prefixul tabelelor din baza de date:',
+       'config-db-charset' => 'Setul de caractere al bazei de date',
+       'config-charset-mysql5-binary' => 'MySQL 4.1/5.0 binar',
+       'config-charset-mysql5' => 'MySQL 4.1/5.0 UTF-8',
+       'config-db-port' => 'Portul bazei de date:',
+       'config-db-schema' => 'Schema pentru MediaWiki:',
+       'config-sqlite-dir' => 'Director de date SQLite:',
+       'config-oracle-def-ts' => 'Spațiu de stocare („tablespace”) implicit:',
+       'config-oracle-temp-ts' => 'Spațiu de stocare („tablespace”) temporar:',
+       'config-type-ibm_db2' => 'IBM DB2',
        'config-header-mysql' => 'Setările MySQL',
+       'config-header-postgres' => 'Setări PostgreSQL',
        'config-header-sqlite' => 'Setări SQLite',
        'config-header-oracle' => 'Setări Oracle',
+       'config-header-ibm_db2' => 'Setări IBM DB2',
+       'config-invalid-db-type' => 'Tip de bază de date incorect',
        'config-missing-db-name' => 'Trebuie să introduci o valoare pentru „Numele bazei de date”',
+       'config-connection-error' => '$1.
+
+Verificați gazda, numele de utilizator și parola și reîncercați.',
+       'config-upgrade-done-no-regenerate' => 'Actualizare completă.
+
+Acum puteți [$1 începe să vă folosiți wikiul].',
+       'config-regenerate' => 'Regenerare <code>LocalSettings.php</code> →',
+       'config-unknown-collation' => 'AVERTISMENT: Baza de date folosește o colaționare nerecunoscută.',
+       'config-db-web-account' => 'Contul bazei de date pentru accesul web.',
+       'config-db-web-create' => 'Creați contul dacă nu există deja',
        'config-mysql-engine' => 'Motor de stocare:',
        'config-mysql-innodb' => 'InnoDB',
        'config-mysql-myisam' => 'MyISAM',
+       'config-mysql-charset' => 'Setul de caractere al bazei de date:',
+       'config-mysql-binary' => 'Binar',
+       'config-mysql-utf8' => 'UTF-8',
+       'config-site-name' => 'Numele wikiului:',
        'config-site-name-blank' => 'Introduceți un nume pentru sit.',
+       'config-project-namespace' => 'Spațiul de nume al proiectului:',
        'config-ns-generic' => 'Proiect',
+       'config-ns-site-name' => 'Același nume ca al wikiului: $1',
+       'config-ns-other' => 'Altul (specificați)',
+       'config-ns-other-default' => 'MyWiki',
+       'config-admin-box' => 'Cont de administrator',
+       'config-admin-name' => 'Numele dumneavoastră:',
        'config-admin-password' => 'Parolă:',
+       'config-admin-password-confirm' => 'Parola, din nou:',
+       'config-admin-password-blank' => 'Introduceți o parolă pentru contul de administrator.',
+       'config-admin-password-same' => 'Parola trebuie să difere de numele de utilizator.',
+       'config-admin-password-mismatch' => 'Cele două parole introduse nu corespund.',
+       'config-admin-email' => 'Adresa de e-mail:',
+       'config-admin-error-bademail' => 'Ați introdus o adresă de e-mail incorectă.',
+       'config-almost-done' => 'Sunteți aproape gata!
+Puteți sări peste configurarea rămasă și să instalați wikiul chiar acum.',
        'config-optional-continue' => 'Adresează-mi mai multe întrebări.',
        'config-optional-skip' => 'Sunt deja plictisit, doar instalează wikiul.',
-       'config-profile-wiki' => 'Wiki tradițional',
+       'config-profile' => 'Profilul drepturilor de utilizator:',
+       'config-profile-wiki' => 'Wiki tradițional', # Fuzzy
+       'config-profile-no-anon' => 'Crearea de cont este necesară',
+       'config-profile-fishbowl' => 'Doar editorii autorizați',
        'config-profile-private' => 'Wiki privat',
+       'config-license' => 'Drepturi de autor și licență:',
+       'config-license-none' => 'Fără licență în subsolul paginii',
+       'config-license-cc-by-sa' => 'Creative Commons Atribuire și distribuire în condiții identice',
+       'config-license-cc-by' => 'Creative Commons Atribuire',
+       'config-license-cc-by-nc-sa' => 'Creative Commons Atribuire, necomercial și distribuire în condiții identice',
+       'config-license-cc-0' => 'Creative Commons Zero (domeniu public)',
+       'config-license-gfdl' => 'Licența GNU pentru Documentare Liberă 1.3 sau ulterioară',
+       'config-license-pd' => 'Domeniu public',
+       'config-license-cc-choose' => 'Alegeți o licență Creative Commons personalizată',
        'config-email-settings' => 'Setări pentru e-mail',
+       'config-email-usertalk' => 'Activați notificările pentru pagina de discuții a utilizatorului',
+       'config-upload-deleted' => 'Director pentru fișierele șterse:',
+       'config-logo' => 'Adresa URL a siglei:',
+       'config-cc-again' => 'Alegeți din nou...',
+       'config-advanced-settings' => 'Configurare avansată',
+       'config-cache-options' => 'Parametrii pentru stocarea temporară a obiectelor:',
+       'config-extensions' => 'Extensii',
        'config-install-step-done' => 'realizat',
+       'config-install-step-failed' => 'eșuat',
+       'config-install-extensions' => 'Se includ extensiile',
+       'config-install-database' => 'Se creează baza de date',
+       'config-install-schema' => 'Se creează schema',
+       'config-install-pg-schema-not-exist' => 'Schema PostgreSQL nu există.',
+       'config-install-pg-commit' => 'Se validează modificările',
+       'config-install-user' => 'Se creează utilizatorul pentru baza de date',
+       'config-install-user-alreadyexists' => 'Utilizatorul „$1” există deja',
+       'config-install-user-create-failed' => 'Crearea utilizatorului „$1” a eșuat: $2',
+       'config-install-tables' => 'Se creează tabelele',
+       'config-install-stats' => 'Se inițializează statisticile',
+       'config-install-keys' => 'Se generează cheile secrete',
+       'config-install-sysop' => 'Se creează contul de administrator',
+       'config-install-mainpage-failed' => 'Nu s-a putut insera pagina principală: $1',
+       'config-download-localsettings' => 'Descarcă <code>LocalSettings.php</code>',
+       'config-help' => 'ajutor',
        'mainpagetext' => "'''Programul Wiki a fost instalat cu succes.'''",
        'mainpagedocfooter' => 'Consultați [//meta.wikimedia.org/wiki/Help:Contents Ghidul utilizatorului (en)] pentru informații despre utilizarea software-ului wiki.
 
 == Primii pași ==
 * [//www.mediawiki.org/wiki/Manual:Configuration_settings Lista parametrilor configurabili (en)]
 * [//www.mediawiki.org/wiki/Manual:FAQ Întrebări frecvente despre MediaWiki (en)]
-* [https://lists.wikimedia.org/mailman/listinfo/mediawiki-announce Lista de discuții a MediaWiki (en)]',
+* [https://lists.wikimedia.org/mailman/listinfo/mediawiki-announce Lista de discuții a MediaWiki (en)]', # Fuzzy
 );
 
 /** tarandíne (tarandíne)
  * @author Joetaras
  */
 $messages['roa-tara'] = array(
+       'config-desc' => "'U 'nstallatore de MediaUicchi",
+       'config-title' => 'Installazzione de MediaUicchi $1',
+       'config-information' => "'Mbormaziune",
+       'config-localsettings-key' => 'Chiave de aggiornamende:',
+       'config-page-language' => 'Lènghe',
+       'config-page-name' => 'Nome',
        'config-db-charset' => "'Nzieme de carattere d'u database",
        'config-charset-mysql5-binary' => 'MySQL 4.1/5.0 binary',
        'config-charset-mysql5' => 'MySQL 4.1/5.0 UTF-8',
        'config-charset-mysql4' => 'MySQL 4.0 backwards-compatible UTF-8',
+       'config-db-port' => "Porte d'u database:",
+       'config-db-schema' => 'Scheme pe MediaUicchi:',
+       'config-type-mysql' => 'MySQL',
+       'config-type-postgres' => 'PostgreSQL',
+       'config-type-sqlite' => 'SQLite',
+       'config-type-oracle' => 'Oracle',
+       'config-admin-email' => 'Indirizze e-mail:',
        'config-install-step-done' => 'fatte',
        'config-install-step-failed' => 'fallite',
+       'config-install-extensions' => "'Ngludenne le estenziune",
+       'config-install-database' => "Stoche a 'mboste l'archivije",
+       'config-install-schema' => "Stoche a creje 'u scheme",
+       'config-install-pg-schema-not-exist' => "'U scheme PostgreSQL non g'esiste.",
        'config-help' => 'ajute',
        'mainpagetext' => "'''MediaUicchi ha state 'nstallete.'''",
        'mainpagedocfooter' => "Vè vide [//meta.wikimedia.org/wiki/Help:Contents User's Guide] pe l'mbormaziune sus a cumme s'ause 'u softuer wiki.
@@ -15887,7 +16759,8 @@ $messages['roa-tara'] = array(
 == Pe accumenzà ==
 * [//www.mediawiki.org/wiki/Manual:Configuration_settings Liste pe le configuraziune]
 * [//www.mediawiki.org/wiki/Manual:FAQ FAQ de MediaWiki]
-* [https://lists.wikimedia.org/mailman/listinfo/mediawiki-announce Liste d'a poste de MediaWiki]",
+* [https://lists.wikimedia.org/mailman/listinfo/mediawiki-announce Elenghe d'a poste de MediaUicchi]
+* [//www.mediawiki.org/wiki/Localisation#Translation_resources Localizzazzione de MediaUicchi pa lènga toje]",
 );
 
 /** Russian (русский)
@@ -15902,6 +16775,7 @@ $messages['roa-tara'] = array(
  * @author Yuriy Apostol
  * @author Александр Сигачёв
  * @author Сrower
+ * @author 아라
  */
 $messages['ru'] = array(
        'config-desc' => 'Инсталлятор MediaWiki',
@@ -15909,19 +16783,19 @@ $messages['ru'] = array(
        'config-information' => 'Информация',
        'config-localsettings-upgrade' => 'Обнаружен файл <code>LocalSettings.php</code>.
 Для обновления этой установки, пожалуйста, введите значение <code>$wgUpgradeKey</code>.
-Его можно найти в файле LocalSettings.php.',
-       'config-localsettings-cli-upgrade' => 'Обнаружен файл LocalSettings.php.
-Для обновления этой установки, пожалуйста, запустите update.php',
+Его можно найти в файле <code>LocalSettings.php</code>.',
+       'config-localsettings-cli-upgrade' => 'Обнаружен файл <code>LocalSettings.php</code>.
+Для обновления этой установки, пожалуйста, запустите <code>update.php</code>',
        'config-localsettings-key' => 'Ключ обновления:',
        'config-localsettings-badkey' => 'Вы указали неправильный ключ',
        'config-upgrade-key-missing' => 'Обнаружена существующая установленная копия MediaWiki.
-Чтобы обновить обнаруженную установку, пожалуйста, добавьте следующую строку в конец вашего файла LocalSettings.php:
+Чтобы обновить обнаруженную установку, пожалуйста, добавьте следующую строку в конец вашего файла <code>LocalSettings.php</code>:
 
 $1',
-       'config-localsettings-incomplete' => 'Похоже, что существующий файл LocalSettings.php не является полными.
+       'config-localsettings-incomplete' => 'Похоже, что существующий файл <code>LocalSettings.php</code> не является полными.
 Не установлена переменная $1.
-Пожалуйста, измените LocalSettings.php так, чтобы значение этой переменной было задано, затем нажмите «Продолжить».',
-       'config-localsettings-connection-error' => 'Произошла ошибка при подключении к базе данных с помощью настроек, указанных в LocalSettings.php или AdminSettings.php. Пожалуйста, исправьте эти настройки и повторите попытку.
+Пожалуйста, измените <code>LocalSettings.php</code> так, чтобы значение этой переменной было задано, затем нажмите «{{int:Config-continue}}».',
+       'config-localsettings-connection-error' => 'Произошла ошибка при подключении к базе данных с помощью настроек, указанных в <code>LocalSettings.php</code> или <code>AdminSettings.php</code>. Пожалуйста, исправьте эти настройки и повторите попытку.
 
 $1',
        'config-session-error' => 'Ошибка при запуске сессии: $1',
@@ -16052,7 +16926,7 @@ MediaWiki требует поддержки UTF-8 для корректной р
        'config-using531' => 'PHP $1 не совместим с MediaWiki из-за ошибки с параметрами-ссылками при вызовах <code>__call()</code>.
 Обновитесь до PHP 5.3.2 и выше, или откатитесь до PHP 5.3.0, чтобы избежать этой проблемы.
 Установка прервана.',
-       'config-suhosin-max-value-length' => 'Suhosin установлен и ограничивает длину параметра GET до $1 байт. Компонент MediaWiki ResourceLoader будет обходить это ограничение, но это снизит производительность. Если это возможно, следует установить suhosin.get.max_value_length 1024 или выше в php.ini, а также установить для $wgResourceLoaderMaxQueryLength такое же значение в LocalSettings.php.',
+       'config-suhosin-max-value-length' => 'Suhosin установлен и ограничивает длину параметра GET до $1 байт. Компонент MediaWiki ResourceLoader будет обходить это ограничение, но это снизит производительность. Если это возможно, следует установить <code>suhosin.get.max_value_length</code> 1024 или выше в <code>php.ini</code>, а также установить для <code>$wgResourceLoaderMaxQueryLength</code> такое же значение в LocalSettings.php.', # Fuzzy
        'config-db-type' => 'Тип базы данных:',
        'config-db-host' => 'Хост базы данных:',
        'config-db-host-help' => 'Если сервер базы данных находится на другом сервере, введите здесь его имя хоста или IP-адрес.
@@ -16138,7 +17012,7 @@ $1
        'config-support-postgres' => '* $1 — популярная открытая СУБД, альтернатива MySQL ([http://www.php.net/manual/en/pgsql.installation.php инструкция, как собрать PHP с поддержкой PostgreSQL]). Могут встречаться небольшие неисправленные ошибки, не рекомендуется для использования в рабочей системе.',
        'config-support-sqlite' => '* $1 — это легковесная система баз данных, имеющая очень хорошую поддержку. ([http://www.php.net/manual/en/pdo.installation.php инструкция, как собрать PHP с поддержкой SQLite], работающей посредством PDO)',
        'config-support-oracle' => '* $1 — это коммерческая база данных масштаба предприятия. ([http://www.php.net/manual/en/oci8.installation.php Как собрать PHP с поддержкой OCI8])',
-       'config-support-ibm_db2' => '$1 — коммерческая база данных масштаба предприятия.',
+       'config-support-ibm_db2' => '$1 — коммерческая база данных масштаба предприятия.', # Fuzzy
        'config-header-mysql' => 'Настройки MySQL',
        'config-header-postgres' => 'Настройки PostgreSQL',
        'config-header-sqlite' => 'Настройки SQLite',
@@ -16205,8 +17079,8 @@ chmod a+w $3</pre>',
        'config-upgrade-done-no-regenerate' => 'Обновление завершено.
 
 Теперь вы можете [$1 начать работу с вики].',
-       'config-regenerate' => 'Создать LocalSettings.php заново →',
-       'config-show-table-status' => 'Запрос «SHOW TABLE STATUS» не выполнен!',
+       'config-regenerate' => 'Создать <code>LocalSettings.php</code> заново →',
+       'config-show-table-status' => 'Запрос «<code>SHOW TABLE STATUS</code>» не выполнен!',
        'config-unknown-collation' => "'''Внимание:''' База данных использует нераспознанные правила сортировки.",
        'config-db-web-account' => 'Учётная запись для доступа к базе данных из веб-сервера',
        'config-db-web-help' => 'Выберите имя пользователя и пароль, которые веб-сервер будет использовать для подключения к серверу базы данных при обычной работе вики.',
@@ -16277,7 +17151,7 @@ chmod a+w $3</pre>',
        'config-optional-continue' => 'Произвести тонкую настройку',
        'config-optional-skip' => 'Хватит, установить вики',
        'config-profile' => 'Профиль прав прользователей:',
-       'config-profile-wiki' => 'ТÑ\80адиÑ\86ионная вики',
+       'config-profile-wiki' => 'Ð\9eÑ\82кÑ\80Ñ\8bÑ\82ая вики',
        'config-profile-no-anon' => 'Требуется создание учётной записи',
        'config-profile-fishbowl' => 'Только для авторизованных редакторов',
        'config-profile-private' => 'Закрытая вики',
@@ -16287,7 +17161,7 @@ chmod a+w $3</pre>',
 Однако, движок MediaWiki можно использовать и иными способами, и не далеко не всех удаётся убедить в преимуществах открытой вики-работы.
 Так что в вас есть выбор.
 
\9aонÑ\84игÑ\83Ñ\80аÑ\86иÑ\8f '''«{{int:config-profile-wiki}}»''' позволяет всем править страницы даже не регистрируясь на сайте. Конфигурация '''{{int:config-profile-no-anon}}''' обеспечивает дополнительный учёт, но может отсечь случайных участников.
\9cоделÑ\8c '''«{{int:config-profile-wiki}}»''' позволяет всем править страницы даже не регистрируясь на сайте. Конфигурация '''{{int:config-profile-no-anon}}''' обеспечивает дополнительный учёт, но может отсечь случайных участников.
 
 Сценарий '''«{{int:config-profile-fishbowl}}»''' разрешает редактирование только определённым участникам, но общедоступным остаётся просмотр страниц, в том числе просмотр истории изменения. В режиме '''«{{int:config-profile-private}}»''' просмотр страниц разрешён только определённым пользователям, какая-то их часть может иметь также права на редактирование.
 
@@ -16375,7 +17249,7 @@ GFDL может быть использована, но она сложна дл
        'config-install-alreadydone' => "'''Предупреждение:''' Вы, кажется, уже устанавливали MediaWiki и пытаетесь произвести повторную установку.
 Пожалуйста, перейдите на следующую страницу.",
        'config-install-begin' => 'Нажав «{{int:config-continue}}», вы начнёте установку MediaWiki.
-Если вы хотите внести изменения, нажмите «Назад».',
+Если вы хотите внести изменения, нажмите «{{int:config-back}}».',
        'config-install-step-done' => 'выполнено',
        'config-install-step-failed' => 'не удалось',
        'config-install-extensions' => 'В том числе расширения',
@@ -16431,7 +17305,7 @@ $3
 '''Примечание''': Если вы не сделаете этого сейчас, то сгенерированный файл конфигурации не будет доступен вам в дальнейшем, если вы выйдете из установки, не скачивая его.
 
 По окончании действий, описанных выше, вы сможете '''[$2 войти в вашу вики]'''.",
-       'config-download-localsettings' => 'Загрузить LocalSettings.php',
+       'config-download-localsettings' => 'Загрузить <code>LocalSettings.php</code>',
        'config-help' => 'справка',
        'config-nofile' => 'Файл "$1" не удается найти. Он был удален?',
        'mainpagetext' => "'''Вики-движок «MediaWiki» успешно установлен.'''",
@@ -16440,7 +17314,8 @@ $3
 == Некоторые полезные ресурсы ==
 * [//www.mediawiki.org/wiki/Manual:Configuration_settings Список возможных настроек];
 * [//www.mediawiki.org/wiki/Manual:FAQ Часто задаваемые вопросы и ответы по MediaWiki];
-* [https://lists.wikimedia.org/mailman/listinfo/mediawiki-announce Рассылка уведомлений о выходе новых версий MediaWiki].',
+* [https://lists.wikimedia.org/mailman/listinfo/mediawiki-announce Рассылка уведомлений о выходе новых версий MediaWiki].
+* [//www.mediawiki.org/wiki/Localisation#Translation_resources Перевод MediaWiki на свой язык]',
 );
 
 /** Rusyn (русиньскый)
@@ -16560,62 +17435,146 @@ $messages['shi'] = array(
  * @author පසිඳු කාවින්ද
  */
 $messages['si'] = array(
+       'config-desc' => 'මාධ්‍යවිකි සඳහා වූ ස්ථාපකය',
+       'config-title' => 'මාධ්‍යවිකි $1 ස්ථාපනය',
        'config-information' => 'තොරතුරු',
+       'config-localsettings-key' => 'උසස්කිරීම් යතුර:',
+       'config-localsettings-badkey' => 'ඔබ ඉදිරිපත් කෙරූ යතුර වැරදිය.',
+       'config-session-error' => 'සැසිය ඇරඹීමේ දෝෂය: $1',
        'config-your-language' => 'ඔබේ භාෂාව:',
        'config-wiki-language' => 'විකි භාෂාව:',
        'config-back' => '← ආපසු',
        'config-continue' => 'ඉදිරියට →',
        'config-page-language' => 'භාෂාව',
        'config-page-welcome' => 'මාධ්‍යවිකි වෙත පිළිගනිමු!',
+       'config-page-dbconnect' => 'දත්ත සංචිතයට සම්බන්ධ කරන්න',
+       'config-page-upgrade' => 'පවත්නා ස්ථාපනය උසස් කරන්න',
        'config-page-dbsettings' => 'දත්ත සංචිත සැකසුම්',
        'config-page-name' => 'නම',
        'config-page-options' => 'විකල්ප',
        'config-page-install' => 'ස්ථාපනය',
        'config-page-complete' => 'සම්පූර්ණයි!',
+       'config-page-restart' => 'ස්ථාපනය යළි අරඹන්න',
        'config-page-readme' => 'මාව කියවන්න',
        'config-page-releasenotes' => 'නිකුතු සටහන්',
        'config-page-copying' => 'පිටපත් කරමින්',
+       'config-page-upgradedoc' => 'උසස් කරමින්',
+       'config-page-existingwiki' => 'පවත්නා විකිය',
+       'config-env-php' => 'PHP $1 ස්ථාපිතයි.',
+       'config-db-type' => 'දත්ත සංචිත වර්ගය:',
+       'config-db-host' => 'දත්ත සංචිත ධාරක:',
+       'config-db-wiki-settings' => 'මෙම විකිය හඳුනා ගන්න',
        'config-db-name' => 'දත්ත සංචිතයේ නම:',
+       'config-db-name-oracle' => 'දත්ත සංචිත සංක්ෂිප්ත නිරූපණය:',
+       'config-db-install-account' => 'ස්ථාපනය සඳහා පරිශීලක ගිණුම',
+       'config-db-username' => 'දත්ත සංචිතයේ පරිශීලක නාමය:',
+       'config-db-password' => 'දත්ත සංචිතයේ මුරපදය:',
+       'config-db-wiki-account' => 'සාමාන්‍ය ක්‍රියාකාරිත්වය සඳහා පරිශීලක ගිණුම',
+       'config-db-prefix' => 'දත්ත සංචිත වගු උපසර්ගය:',
+       'config-db-charset' => 'දත්ත සංචිත අක්ෂර කට්ටලය',
+       'config-charset-mysql5-binary' => 'MySQL 4.1/5.0 ද්විමය',
        'config-charset-mysql5' => 'MySQL 4.1/5.0 UTF-8',
+       'config-charset-mysql4' => 'MySQL 4.0 ආපස්සට-ගැළපෙන UTF-8',
        'config-db-port' => 'දත්ත සංචිතයේ කවුළුව:',
+       'config-db-schema' => 'මාධ්‍යවිකි සඳහා සංක්ෂිප්ත නිරූපණය:',
+       'config-pg-test-error' => "'''$1''' දත්ත සංචිතය වෙත සම්බන්ධ විය නොහැක: $2",
+       'config-sqlite-dir' => 'SQLite දත්ත නාමවලිය:',
+       'config-oracle-def-ts' => 'සාමාන්‍ය වගු අවකාශය:',
+       'config-oracle-temp-ts' => 'තාවකාලික වගු අවකාශය:',
        'config-type-ibm_db2' => 'IBM DB2',
        'config-header-mysql' => 'MySQL සැකසුම්',
        'config-header-postgres' => 'PostgreSQL සැකසුම්',
        'config-header-sqlite' => 'SQLite සැකසුම්',
        'config-header-oracle' => 'ඔරකල් සැකසුම්',
        'config-header-ibm_db2' => 'IBM DB2 සැකසුම්',
+       'config-invalid-db-type' => 'වලංගු නොවන දත්ත සංචිත වර්ගය',
+       'config-missing-db-name' => '"දත්ත සංචිත නාමය" සඳහා ඔබ විසින් අගයක් දිය යුතු වේ',
+       'config-missing-db-host' => '"දත්ත සංචිත ධාරකය" සඳහා ඔබ විසින් අගයක් දිය යුතු වේ',
+       'config-missing-db-server-oracle' => '"දත්ත සංචිත TNS" සඳහා ඔබ විසින් අගයක් දිය යුතු වේ',
+       'config-regenerate' => 'නැවත ජනිත කරන්න <code>LocalSettings.php</code> →',
+       'config-db-web-account' => 'ජාල ප්‍රවේශනය සඳහා දත්ත සංචිත ගිණුම',
+       'config-mysql-engine' => 'ආචයන එන්ජිම:',
        'config-mysql-innodb' => 'InnoDB',
        'config-mysql-myisam' => 'MyISAM',
        'config-mysql-binary' => 'ද්විමය',
        'config-mysql-utf8' => 'UTF-8',
+       'config-site-name' => 'විකියෙහි නම:',
        'config-site-name-blank' => 'අඩවි නාමයක් යොදන්න.',
        'config-project-namespace' => 'ව්‍යාපෘතියේ නාමඅවකාශය:',
        'config-ns-generic' => 'ව්‍යාපෘතිය',
+       'config-ns-site-name' => 'විකියෙහි නම ලෙසම: $1',
        'config-ns-other' => 'වෙනත් (විශේෂණය කරන්න)',
        'config-ns-other-default' => 'මගේවිකිය',
        'config-admin-box' => 'පරිපාලක ගිණුම',
        'config-admin-name' => 'ඔබේ නම:',
        'config-admin-password' => 'මුරපදය:',
        'config-admin-password-confirm' => 'මුරපදය නැවතත්:',
+       'config-admin-name-blank' => 'පරිපාලක පරිශීලක නාමය යොදන්න.',
+       'config-admin-password-blank' => 'පරිපාලක ගිණුම සඳහා මුරපදය යොදන්න.',
+       'config-admin-password-same' => 'මුරපදය හා පරිශීලක නාමය එක සමාන නොවිය යුතුය.',
+       'config-admin-password-mismatch' => 'ඔබ ඇතුළු කල මුරපද දෙක නොගැලපේ.',
        'config-admin-email' => 'විද්‍යුත්-තැපැල් ලිපිනය:',
-       'config-profile-wiki' => 'සාම්ප්‍රදායික විකිය',
+       'config-admin-error-bademail' => 'ඔබ විසින් වලංගු නොවන විද්‍යුත්-ලිපිනයක් යොදා ඇත.',
+       'config-optional-continue' => 'මගෙන් තව ප්‍රශ්ණ අහන්න.',
+       'config-optional-skip' => 'මම දැනටමත් කම්මැලි වී ඇත, විකිය ස්ථාපනය කරන්න.',
+       'config-profile' => 'පරිශීලක හිමිකම් පැතිකඩ:',
+       'config-profile-wiki' => 'සාම්ප්‍රදායික විකිය', # Fuzzy
        'config-profile-no-anon' => 'ගිණුම් තැනීම අවශ්‍යයි',
+       'config-profile-fishbowl' => 'අවසරලත් සංස්කාරකවරුන් පමණි',
        'config-profile-private' => 'පුද්ගලික විකිය',
+       'config-license' => 'කතුහිමිකම සහ බලපත්‍රය:',
+       'config-license-none' => 'බලපත්‍ර පාද තලයක් නොමැත',
+       'config-license-cc-by-sa' => 'නිර්මාණාත්මක පොදුජන ආරෝපණය හුවමාරුවට සමානව',
+       'config-license-cc-by' => 'නිර්මාණාත්මක පොදුජන ආරෝපණය',
+       'config-license-cc-by-nc-sa' => 'නිර්මාණාත්මක පොදුජන ආරෝපණය වාණිජ්‍ය-නොවන හුවමාරුවට සමානව',
        'config-license-pd' => 'පොදු වසම',
        'config-email-settings' => 'විද්‍යුත්-තැපැල් සැකසුම්',
+       'config-enable-email' => 'පිටතට යොමු වූ විද්‍යුත්-තැපෑල සක්‍රිය කරන්න',
+       'config-email-user' => 'පරිශීලක-වෙත-පරිශීලක විද්‍යුත්-තැපෑල සක්‍රිය කරන්න',
+       'config-email-usertalk' => 'පරිශීලක කතාබහ පිටු නිවේදනය සක්‍රිය කරන්න',
+       'config-email-watchlist' => 'මුරලැයිස්තු නිවේදනය සක්‍රිය කරන්න',
+       'config-email-auth' => 'විද්‍යුත්-තැපැල් සහතික කිරීම සක්‍රිය කරන්න',
+       'config-email-sender' => 'ප්‍රත්‍යාගමන විද්‍යුත්-තැපැල් ලිපිනය:',
+       'config-upload-settings' => 'පින්තූර සහ ගොනු උඩුගත කිරීම්',
+       'config-upload-enable' => 'ගොනු උඩුගත කිරීම් සක්‍රිය කරන්න',
        'config-upload-deleted' => 'මැකූ ගොනු සඳහා නාමාවලිය:',
+       'config-logo' => 'ලාංඡනයේ URL:',
+       'config-instantcommons' => 'ක්ෂණික කොමන්ස් සක්‍රිය කරන්න',
+       'config-cc-again' => 'නැවත ඇහිඳගන්න...',
+       'config-advanced-settings' => 'උසස් වින්‍යාසගතකෙරුම',
+       'config-cache-options' => 'වස්තු කෑෂය සඳහා සැකසුම්:',
+       'config-memcached-servers' => 'මතකකෑෂිත සර්වරයන්:',
        'config-extensions' => 'විස්තීර්ණ',
        'config-install-step-done' => 'සිදුකලා',
        'config-install-step-failed' => 'අසාර්ථකයි',
+       'config-install-extensions' => 'විස්තීර්ණ අඩංගු කරමින්',
+       'config-install-database' => 'දත්ත සංචිතය සකසමින්',
+       'config-install-schema' => 'සංක්ෂිප්ත නිරූපණය තනමින්',
+       'config-install-pg-schema-not-exist' => 'PostgreSQL සංක්ෂිප්ත නිරූපණය නොපවතියි.',
+       'config-install-pg-commit' => 'වෙනස්කම් ප්‍රයාපනය කරමින්',
+       'config-install-pg-plpgsql' => 'PL/pgSQL භාෂාව සඳහා පරික්ෂා කරමින්',
+       'config-install-user' => 'දත්ත සංචිත පරිශීලක තනමින්',
+       'config-install-user-alreadyexists' => '"$1" පරිශීලක දැනටමත් පවතී',
+       'config-install-user-create-failed' => '"$1" පරිශීලක තැනීම අසාර්ථකයි: $2',
+       'config-install-user-missing' => 'විශේෂණය කෙරූ "$1" පරිශීලකයා නොපවතියි.',
        'config-install-tables' => 'වගු තනමින්',
+       'config-install-interwiki' => 'සාමාන්‍ය අන්තර්විකි වගුව ගහනය කරමින්',
+       'config-install-interwiki-list' => '<code>interwiki.list</code> ගොනුව කියවිය නොහැක.',
+       'config-install-stats' => 'සංඛ්‍යානය අරඹමින්',
+       'config-install-keys' => 'රහස් යතුරු ජනිත කරමින්',
+       'config-install-sysop' => 'පරිපාලක පරිශීලක ගිණුම තනමින්',
+       'config-install-mainpage' => 'සාමාන්‍ය අන්තර්ගතය සමඟින් ප්‍රධාන පිටුව තනමින්',
+       'config-install-mainpage-failed' => 'ප්‍රධාන පිටුව ඇතුල් කල නොහැක: $1',
+       'config-download-localsettings' => '<code>LocalSettings.php</code> බාගන්න',
        'config-help' => 'උදව්',
+       'config-nofile' => '"$1" ගොනුව සොයාගත නොහැක. එක මැකිලා ගියාවත්ද?',
        'mainpagetext' => "'''මීඩියාවිකි සාර්ථක ලෙස ස්ථාපනය කරන ලදි.'''",
        'mainpagedocfooter' => 'විකි මෘදුකාංග භාවිතා කිරීම පිළිබඳ තොරතුරු සඳහා  [//meta.wikimedia.org/wiki/Help:Contents පරිශීලකයන් සඳහා නියමුව] හදාරන්න.
 
 == ඇරඹුම ==
 * [//www.mediawiki.org/wiki/Manual:Configuration_settings වින්‍යාස සැකසුම්]
 * [//www.mediawiki.org/wiki/Manual:FAQ මීඩියාවිකි නිති-විමසන-පැන]
-* [https://lists.wikimedia.org/mailman/listinfo/mediawiki-announce මීඩියාවිකි නිකුතුව තැපැල් ලැයිස්තුව]',
+* [https://lists.wikimedia.org/mailman/listinfo/mediawiki-announce මීඩියාවිකි නිකුතුව තැපැල් ලැයිස්තුව]', # Fuzzy
 );
 
 /** Slovak (slovenčina)
@@ -16627,7 +17586,7 @@ $messages['sk'] = array(
        'config-back' => '← Späť',
        'config-continue' => 'Pokračovať →',
        'config-page-language' => 'Jazyk',
-       'config-download-localsettings' => 'Stiahnuť LocalSettings.php',
+       'config-download-localsettings' => 'Stiahnuť <code>LocalSettings.php</code>',
        'config-nofile' => 'Súbor "$1" sa nenašiel. Bol zmazaný?',
        'mainpagetext' => "'''Softvér MediaWiki bol úspešne nainštalovaný.'''",
        'mainpagedocfooter' => 'Informácie ako používať wiki softvér nájdete v [//meta.wikimedia.org/wiki/Help:Contents Používateľskej príručke].
@@ -16636,7 +17595,7 @@ $messages['sk'] = array(
 
 * [//www.mediawiki.org/wiki/Manual:Configuration_settings Zoznam konfiguračných nastavení]
 * [//www.mediawiki.org/wiki/Manual:FAQ MediaWiki FAQ]
-* [https://lists.wikimedia.org/mailman/listinfo/mediawiki-announce mailing list nových verzií MediaWiki]',
+* [https://lists.wikimedia.org/mailman/listinfo/mediawiki-announce mailing list nových verzií MediaWiki]', # Fuzzy
 );
 
 /** Slovenian (slovenščina)
@@ -16647,12 +17606,12 @@ $messages['sl'] = array(
        'config-desc' => 'Namestitveni program za MediaWiki',
        'config-title' => 'Namestitev MediaWiki $1',
        'config-information' => 'Informacije',
-       'config-localsettings-cli-upgrade' => 'Zaznana je bila datoteka LocalSettings.php.
-Za nadgradnjo te namestitve zaženite update.php',
+       'config-localsettings-cli-upgrade' => 'Zaznana je bila datoteka <code>LocalSettings.php</code>.
+Za nadgradnjo te namestitve zaženite <code>update.php</code>',
        'config-localsettings-key' => 'Nadgraditveni ključ:',
        'config-localsettings-badkey' => 'Naveden ključ je napačen.',
        'config-upgrade-key-missing' => 'Zaznana je bila obstoječa namestitev MediaWiki.
-Za nadgradnjo te namestitve vstavite naslednjo vrstico na dno vaše LocalSettings.php:
+Za nadgradnjo te namestitve vstavite naslednjo vrstico na dno vaše <code>LocalSettings.php</code>:
 
 $1',
        'config-session-error' => 'Napaka pri začenjanju seje: $1',
@@ -16763,8 +17722,8 @@ Preverite mapo podatkov in ime zbirke podatkov spodaj ter poskusite znova.',
        'config-upgrade-done-no-regenerate' => 'Nadgradnja je končana.
 
 Sedaj lahko [$1 začnete uporabljati vaš wiki].',
-       'config-regenerate' => 'Ponovno ustvari LocalSettings.php →',
-       'config-show-table-status' => 'Poizvedba SHOW TABLE STATUS ni uspela!',
+       'config-regenerate' => 'Ponovno ustvari <code>LocalSettings.php</code> →',
+       'config-show-table-status' => 'Poizvedba <code>SHOW TABLE STATUS</code> ni uspela!',
        'config-unknown-collation' => "'''Opozorilo:''' Zbirke podatkov uporablja neprepoznano razvrščanje znakov.",
        'config-db-web-account' => 'Račun zbirke podatkov za spletni dostop',
        'config-db-web-account-same' => 'Uporabi enak račun kot za namestitev',
@@ -16809,7 +17768,7 @@ Sedaj lahko preskočite preostalo konfiguriranje in zdaj namestite wiki.',
        'config-optional-continue' => 'Zastavi mi več vprašanj.',
        'config-optional-skip' => 'Se že dolgočasim; samo namesti wiki.',
        'config-profile' => 'Profil uporabniških pravic:',
-       'config-profile-wiki' => 'Klasičen wiki',
+       'config-profile-wiki' => 'Odprti wiki',
        'config-profile-no-anon' => 'Zahtevano je ustvarjanje računa',
        'config-profile-fishbowl' => 'Samo pooblaščeni urejevalci',
        'config-profile-private' => 'Zasebni wiki',
@@ -16848,11 +17807,11 @@ Vnesite ime dovoljenja ročno.',
        'config-install-pg-schema-not-exist' => 'Shema PostgreSQL ne obstaja.',
        'config-install-user-alreadyexists' => 'Uporabnik »$1« že obstaja',
        'config-install-tables' => 'Ustvarjanje tabel',
-       'config-download-localsettings' => 'Prenesi LocalSettings.php',
+       'config-download-localsettings' => 'Prenesi <code>LocalSettings.php</code>',
        'config-help' => 'pomoč',
        'mainpagetext' => "'''Programje MediaWiki je bilo uspešno nameščeno.'''",
        'mainpagedocfooter' => 'Za uporabo in pomoč pri nastavitvi, prosimo, preglejte [//meta.wikimedia.org/wiki/MediaWiki_localisation dokumentacijo za prilagajanje vmesnika]
-in [//meta.wikimedia.org/wiki/MediaWiki_User%27s_Guide Uporabniški priročnik].',
+in [//meta.wikimedia.org/wiki/MediaWiki_User%27s_Guide Uporabniški priročnik].', # Fuzzy
 );
 
 /** Lower Silesian (Schläsch)
@@ -17073,12 +18032,14 @@ MediaWiki kräver PHP $2 eller högre.',
        'config-diff3-bad' => 'GNU diff3 hittades inte.',
        'config-using-server' => 'Använder servernamn "<nowiki>$1</nowiki>".',
        'config-using-uri' => 'Använder server-URL "<nowiki>$1$2</nowiki>".',
+       'config-db-type' => 'Databastyp:',
        'config-db-wiki-settings' => 'Identifiera denna wiki',
        'config-db-name' => 'Databasnamn:',
        'config-db-name-oracle' => 'Databasschema:',
        'config-db-install-account' => 'Användarkonto för installation',
        'config-db-username' => 'Databas-användarnamn:',
        'config-db-password' => 'Databas-lösenord:',
+       'config-db-port' => 'Databasport:',
        'config-db-schema' => 'Schema för MediaWiki',
        'config-header-mysql' => 'MySQL-inställningar',
        'config-header-postgres' => 'PostgreSQL-inställningar',
@@ -17107,10 +18068,19 @@ Detta '''rekommenderas inte''' om du har problem med din wiki.",
        'config-upgrade-done-no-regenerate' => 'Uppgraderingen slutfördes.
 
 Du kan nu [$1 börja använda din wiki].',
+       'config-db-web-account-same' => 'Använd samma konto som för installation',
+       'config-db-web-create' => 'Skapa kontot om det inte redan finns',
+       'config-mysql-engine' => 'Lagringsmotor:',
+       'config-mysql-binary' => 'Binär',
        'config-mysql-utf8' => 'UTF-8',
        'config-site-name' => 'Namnet på wikin:',
        'config-site-name-blank' => 'Ange ett sidnamn.',
        'config-ns-generic' => 'Projekt',
+       'config-ns-invalid' => 'Den angivna namnrymden "<nowiki>$1</nowiki>" är ogiltig.
+Ange ett annat namnrymd för projektet.',
+       'config-ns-conflict' => 'Den angivna namnrymden "<nowiki>$1</nowiki>" står i konflikt med en standardnamnrymd för MediaWiki.
+Ange ett annat namnrymd för projektet.',
+       'config-admin-box' => 'Administratörskonto',
        'config-admin-name' => 'Ditt namn:',
        'config-admin-password' => 'Lösenord:',
        'config-admin-password-confirm' => 'Lösenord igen:',
@@ -17120,26 +18090,78 @@ Detta är namnet du kommer att använda för att logga in på wikin.',
        'config-admin-name-invalid' => 'Det angivna användarnamnet "<nowiki>$1</nowiki>" är ogiltigt.
 Ange ett annat användarnamn.',
        'config-admin-password-blank' => 'Ange ett lösenord för administratörskontot.',
+       'config-admin-password-same' => 'Lösenordet får inte vara samma som användarnamnet.',
+       'config-admin-password-mismatch' => 'De två lösenord du uppgett överensstämmer inte med varandra.',
        'config-admin-email' => 'E-postadress:',
        'config-admin-error-bademail' => 'Du har angivit en felaktigt e-postadress.',
+       'config-almost-done' => 'Du är nästan färdig!
+Du kan nu hoppa över återstående konfigurationer och installera wikin nu.',
        'config-optional-continue' => 'Ställ fler frågor till mig.',
+       'config-optional-skip' => 'Jag är redan uttråkad, bara installera wiki.',
+       'config-profile-wiki' => 'Öppen wiki',
+       'config-profile-fishbowl' => 'Endast auktoriserade redigerare',
        'config-profile-private' => 'Privat wiki',
        'config-license' => 'Upphovsrätt och licens:',
+       'config-license-none' => 'Ingen licenssidfot',
+       'config-license-cc-by-sa' => 'Creative Commons Erkännande Dela Lika',
+       'config-license-cc-by' => 'Creative Commons Erkännande',
+       'config-license-cc-by-nc-sa' => 'Creative Commons Erkännande Icke-Kommersiell Dela Lika',
+       'config-license-cc-0' => 'Creative Commons Zero (allmän egendom)',
+       'config-license-gfdl' => 'GNU Free Documentation License 1.3 eller senare',
        'config-license-pd' => 'Allmän egendom',
+       'config-license-cc-choose' => 'Välj en anpassad Creative Commons-licens',
        'config-email-settings' => 'E-postinställningar',
+       'config-email-watchlist' => 'Aktivera meddelanden för bevakningslistan',
+       'config-upload-settings' => 'Bild- och filuppladdningar',
+       'config-upload-enable' => 'Aktivera filöverföringar',
+       'config-upload-deleted' => 'Mapp för raderade filer:',
+       'config-logo' => 'Logotyp-URL:',
+       'config-cc-again' => 'Välj igen...',
+       'config-advanced-settings' => 'Avancerad konfiguration',
+       'config-extensions' => 'Tillägg',
        'config-install-step-done' => 'klar',
        'config-install-step-failed' => 'misslyckades',
+       'config-install-database' => 'Konfigurerar databas',
+       'config-install-schema' => 'Skapar schema',
+       'config-install-user' => 'Skapar databasanvändare',
+       'config-install-user-alreadyexists' => 'Användaren "$1" finns redan',
+       'config-install-user-create-failed' => 'Misslyckades att skapa användare "$1": $2',
+       'config-install-user-missing' => 'Den angivna användaren "$1" existerar inte.',
+       'config-install-tables' => 'Skapar tabeller',
+       'config-install-interwiki' => 'Lägger till standardtabell för interwiki',
+       'config-install-interwiki-list' => 'Kunde inte läsa filen <code>interwiki.list</code>.',
+       'config-install-stats' => 'Initierar statistik',
+       'config-install-keys' => 'Genererar hemliga nycklar',
        'config-insecure-keys' => "'''Varning:''' {{PLURAL:$2|En säkerhetsnyckel|Säkerhetsnycklar}} ($1) som generades under installationen är inte helt {{PLURAL:$2|säker|säkra}} . Överväg att ändra {{PLURAL:$2|den|dem}} manuellt.",
-       'config-download-localsettings' => 'Ladda ned LocalSettings.php',
+       'config-install-sysop' => 'Skapar administratörskonto',
+       'config-install-mainpage' => 'Skapa huvudsida med standardinnehåll',
+       'config-install-extension-tables' => 'Skapar tabeller för aktiverade tillägg',
+       'config-install-done' => "'''Grattis!'''
+Du har installerat MediaWiki.
+
+Installationsprogrammet har genererat filen <code>LocalSettings.php</code>.
+Det innehåller alla dina konfigurationer.
+
+Du kommer att behöva ladda ned den och placera den i botten av din wiki-installation (samma mapp som index.php). Nedladdningen borde ha startats automatiskt.
+
+Om ingen nedladdning erbjöds, eller om du har avbrutit det kan du starta om nedladdningen genom att klicka på länken nedan:
+
+$3
+
+'''OBS''': Om du inte gör detta nu, kommer denna genererade konfigurationsfil inte vara tillgänglig för dig senare om du avslutar installationen utan att ladda ned den.
+
+När det är klart, kan du '''[$2 gå in på din wiki]'''.",
+       'config-download-localsettings' => 'Ladda ned <code>LocalSettings.php</code>',
        'config-help' => 'hjälp',
+       'config-nofile' => 'Filen "$1" kunde inte hittas. Har den tagits bort?',
        'mainpagetext' => "'''MediaWiki har installerats utan problem.'''",
        'mainpagedocfooter' => 'Information om hur wiki-programvaran används finns i [//meta.wikimedia.org/wiki/Help:Contents användarguiden].
 
 == Att komma igång ==
-
 * [//www.mediawiki.org/wiki/Manual:Configuration_settings Lista över konfigurationsinställningar]
 * [//www.mediawiki.org/wiki/Manual:FAQ MediaWiki FAQ]
-* [https://lists.wikimedia.org/mailman/listinfo/mediawiki-announce MediaWiki release mail list]',
+* [https://lists.wikimedia.org/mailman/listinfo/mediawiki-announce MediaWiki release mail list]
+* [//www.mediawiki.org/wiki/Localisation#Translation_resources Lokalisera MediaWiki för ditt språk]',
 );
 
 /** Swahili (Kiswahili)
@@ -17239,7 +18261,7 @@ $messages['ta'] = array(
        'config-optional-continue' => 'என்னை இன்னும் அதிகமாக வினவு.',
        'config-optional-skip' => 'நான் ஏற்கனவே சோர்வடைந்துள்ளேன், விக்கியை மட்டும் உருவாக்கு.',
        'config-profile' => 'பயனர் உரிமைகள் சுயவிவரம்:',
-       'config-profile-wiki' => 'பாரம்பரிய விக்கி',
+       'config-profile-wiki' => 'பாரம்பரிய விக்கி', # Fuzzy
        'config-profile-no-anon' => 'கணக்கு உருவாக்குதல் அவசியம்',
        'config-profile-private' => 'தனியார் விக்கி',
        'config-license' => 'பதிப்புரிமை மற்றும் உரிமம்:',
@@ -17260,7 +18282,7 @@ $messages['ta'] = array(
        'config-install-tables' => 'வரிசைப் பட்டியல்களை உருவாக்குகிறது',
        'config-install-mainpage' => 'இயல்புநிலை உள்ளடக்கத்துடன் முதற்பக்கத்தை உருவாக்குகிறது',
        'config-install-extension-tables' => 'செயற்படுத்தப்பட்ட நீட்சிகளுக்கு வரிசைப் பட்டியல்களை உருவாக்குகிறது',
-       'config-download-localsettings' => 'LocalSettings.phpஐத் தரவிறக்கவும்',
+       'config-download-localsettings' => '<code>LocalSettings.php</code>ஐத் தரவிறக்கவும்',
        'config-help' => 'உதவி',
        'mainpagetext' => "'''விக்கி மென்பொருள் வெற்றிகரமாக உள்ளிடப்பட்டது.'''",
        'mainpagedocfooter' => 'விக்கி மென்பொருளைப் பயன்படுத்துவது தொடர்பாக [//meta.wikimedia.org/wiki/Help:Contents பயனர் வழிகாட்டியைப்] பார்க்க.
@@ -17269,7 +18291,7 @@ $messages['ta'] = array(
 
 * [//www.mediawiki.org/wiki/Manual:Configuration_settings அமைப்புக்களை மாற்றம் செய்தல்]
 * [//www.mediawiki.org/wiki/Manual:FAQ மிடியாவிக்கி பொதுவான கேள்விகள்]
-* [https://lists.wikimedia.org/mailman/listinfo/mediawiki-announce மீடியாவிக்கி வெளியீடு மின்னஞ்சல் பட்டியல்]',
+* [https://lists.wikimedia.org/mailman/listinfo/mediawiki-announce மீடியாவிக்கி வெளியீடு மின்னஞ்சல் பட்டியல்]', # Fuzzy
 );
 
 /** Tulu (ತುಳು)
@@ -17414,6 +18436,7 @@ $messages['tk'] = array(
 /** Tagalog (Tagalog)
  * @author AnakngAraw
  * @author Sky Harbor
+ * @author 아라
  */
 $messages['tl'] = array(
        'config-desc' => 'Ang tagapagluklok para sa MediaWiki',
@@ -17421,20 +18444,20 @@ $messages['tl'] = array(
        'config-information' => 'Kabatiran',
        'config-localsettings-upgrade' => 'Napansin ang isang talaksang <code>LocalSettings.php</code>.
 Upang maitaas ang uri ng pagluluklok na ito, paki ipasok ang halaga ng <code>$wgUpgradeKey</code> sa loob ng kahong nasa ibaba.
-Matatagpuan mo ito sa loob ng LocalSettings.php.',
-       'config-localsettings-cli-upgrade' => 'Napansin ang isang talaksan ng LocalSettings.php.
-Upang isapanahon ang pagtatalagang ito, mangyaring patakbuhin sa halip ang update.php',
+Matatagpuan mo ito sa loob ng <code>LocalSettings.php</code>.',
+       'config-localsettings-cli-upgrade' => 'Napansin ang isang talaksan ng <code>LocalSettings.php</code>.
+Upang isapanahon ang pagtatalagang ito, mangyaring patakbuhin sa halip ang <code>update.php</code>',
        'config-localsettings-key' => 'Susi ng pagsasapanahon:',
        'config-localsettings-badkey' => 'Hindi tama ang susing ibinigay mo.',
        'config-upgrade-key-missing' => 'Napansin ang isang umiiral na pagtatalaga ng MediaWiki.
-Upang isapanahon ang katalagahang ito, mangyaring ilagay ang sumusunod na guhit sa ilalim ng iyong LocalSettings.php:
+Upang isapanahon ang katalagahang ito, mangyaring ilagay ang sumusunod na guhit sa ilalim ng iyong <code>LocalSettings.php</code>:
 
 $1',
-       'config-localsettings-incomplete' => 'Lumilitaw na hindi pa buo ang umiiral na LocalSettings.php.
+       'config-localsettings-incomplete' => 'Lumilitaw na hindi pa buo ang umiiral na <code>LocalSettings.php</code>.
 Ang pabagu-bagong $1 ay hindi nakatakda.
-Mangyaring baguhin ang  LocalSettings.php upang ang maitakda ang pagpapabagu-bagong ito, at pindutin ang "Magpatuloy".',
-       'config-localsettings-connection-error' => 'Isang kamalian ang nakatagpo noong kumakabit sa kalipunan ng dato na ginagamit ang tinukoy na mga katakdaan sa loob ng LocalSettings.php o
-AdminSettings.php. Paki kumpunihin ang mga katakdaang ito at subukang muli.
+Mangyaring baguhin ang  <code>LocalSettings.php</code> upang ang maitakda ang pagpapabagu-bagong ito, at pindutin ang "{{int:Config-continue}}".',
+       'config-localsettings-connection-error' => 'Isang kamalian ang nakatagpo noong kumakabit sa kalipunan ng dato na ginagamit ang tinukoy na mga katakdaan sa loob ng <code>LocalSettings.php</code> o
+<code>AdminSettings.php</code>. Paki kumpunihin ang mga katakdaang ito at subukang muli.
 
 $1',
        'config-session-error' => 'Kamalian sa pagsisimula ng sesyon: $1',
@@ -17563,7 +18586,7 @@ Pinigilan ang pag-iinstala.",
        'config-brokenlibxml' => "Ang sistema mo ay mayroong isang pagsasama ng mga bersiyon ng PHP at libxml2 na maaaring masurot at maaaring makapagsanhi ng pagkasira ng datong nakakubli sa loob ng MediaWiki at iba pang mga aplikasyon ng sangkasaputan.
 Magtaas ng uri upang maging PHP 5.2.9 o mas lalong huli at libxml2 2.7.3 o mas lalong huli ([//bugs.php.net/bug.php?id=45996 isinalansan ang surot o ''bug'' na mayroong PHP]). Binigo ang pagluluklok.",
        'config-using531' => 'Hindi maaaring gamitin ang MediaWiki na kapiling ang PHP na $1 dahil sa isang surot na kinasasangkutan ng mga parametrong pangsangguni sa <code>__call()</code>. Magtaas ng uri upang maging PHP 5.3.2 o mas mataas, o magbaba ng uri upang maging PHP 5.3.0 upang malutas ito. Binigo ang pagluluklok.',
-       'config-suhosin-max-value-length' => 'Nakaluklok ang Suhosin at hinahanggahan ang haba ng parametro ng GET sa $1 mga byte. Ang sangkap na ResourceLoader ng MediaWiki ay gagana sa paligid ng hangganang ito, subalit pasasamain nito ang pagganap. Kung talagang maaari, dapat mong itakda ang suhosin.get.max_value_length upang maging 1024 o mas mataas sa loob ng php.ini, at itakda ang $wgResourceLoaderMaxQueryLength sa katulad na halaga sa loob ng LocalSettings.php.',
+       'config-suhosin-max-value-length' => 'Nakaluklok ang Suhosin at hinahanggahan ang haba ng parametro ng GET sa $1 mga byte. Ang sangkap na ResourceLoader ng MediaWiki ay gagana sa paligid ng hangganang ito, subalit pasasamain nito ang pagganap. Kung talagang maaari, dapat mong itakda ang <code>suhosin.get.max_value_length</code> upang maging 1024 o mas mataas sa loob ng <code>php.ini</code>, at itakda ang <code>$wgResourceLoaderMaxQueryLength</code> sa katulad na halaga sa loob ng LocalSettings.php.', # Fuzzy
        'config-db-type' => 'Uri ng kalipunan ng datos:',
        'config-db-host' => 'Tagapagpasinaya ng kalipunan ng datos:',
        'config-db-host-help' => 'Kung ang iyong tagapaghain ng kalipunan ng dato ay nasa ibabaw ng isang ibang tagapaghain, ipasok ang pangalan ng tagapagpasinaya o tirahan ng IP dito.
@@ -17648,7 +18671,7 @@ Kung hindi mo makita ang sistema ng kalipunan ng dato na sinusubukan mong gamiti
        'config-support-postgres' => '* Ang $1 ay isang bantog na sistema ng kalipunan ng dato na bukas ang pinagmulan na panghalili sa MySQL ([http://www.php.net/manual/en/pgsql.installation.php paano magtipon ng PHP na mayroong suporta ng PostgreSQL]). Maaaring mayroong ilang hindi pangunahing mga surot na natitira pa, at hindi iminumungkahi para gamitin sa loob ng isang kapaligiran ng produksiyon.',
        'config-support-sqlite' => 'Ang $1 ay isang magaan ang timbang na sistema ng kalipunan ng dato na sinusuportahan nang napaka mainam. ([http://www.php.net/manual/en/pdo.installation.php Paano magtipon ng PHP na mayroong suporta ng SQLite], gumagamit ng PDO)',
        'config-support-oracle' => '* Ang $1 ay isang kalipunan ng dato ng kasigasigang pangkalakal. ([http://www.php.net/manual/en/oci8.installation.php Paano magtipunan ng PHP na mayroong suporta ng OCI8])',
-       'config-support-ibm_db2' => '* Ang $1 ay isang kalipunan ng dato ng kasigasigang pangkalakal.',
+       'config-support-ibm_db2' => '* Ang $1 ay isang kalipunan ng dato ng kasigasigang pangkalakal.', # Fuzzy
        'config-header-mysql' => 'Mga katakdaan ng MySQL',
        'config-header-postgres' => 'Mga katakdaan ng PostgreSQL',
        'config-header-sqlite' => 'Mga katakdaan ng SQLite',
@@ -17715,8 +18738,8 @@ Kung nais mong muling likhain ang iyong talaksang <code>LocalSettings.php</code>
        'config-upgrade-done-no-regenerate' => 'Buo na ang pagsasapanahon.
 
 Maaari ka na ngayong [$1 magsimula sa paggamit ng wiki mo].',
-       'config-regenerate' => 'Muling likhain ang LocalSettings.php →',
-       'config-show-table-status' => 'Nabigo ang pagtatanong na IPAKITA ANG KALAGAYAN NG TALAHANAYAN!',
+       'config-regenerate' => 'Muling likhain ang <code>LocalSettings.php</code> →',
+       'config-show-table-status' => 'Nabigo ang pagtatanong na IPAKITA ANG KALAGAYAN NG TALAHANAYAN!', # Fuzzy
        'config-unknown-collation' => "'''Babala:''' Ang kalipunan ng dato ay gumagagamit ng hindi nakikilalang pag-iipon.",
        'config-db-web-account' => 'Akawnt ng kalipunan ng dato para sa pagpunta sa web',
        'config-db-web-help' => 'Piliin ang pangalan ng tagagamit at hudyat na gagamitin ng tagapaghain ng web upang umugnay sa tagapaghain ng kalipunan ng dato, habang nasa pangkaraniwang pagtakbo ng wiki.',
@@ -17786,7 +18809,7 @@ Maaari mo ngayong laktawan ang natitira pang pag-aayos at iluklok na ang wiki ng
        'config-optional-continue' => 'Magtanong sa akin ng marami pang mga tanong.',
        'config-optional-skip' => 'Naiinip na ako, basta iluklok na lang ang wiki.',
        'config-profile' => 'Balangkas ng mga karapatan ng tagagamit:',
-       'config-profile-wiki' => 'Tradisyonal na wiki',
+       'config-profile-wiki' => 'Tradisyonal na wiki', # Fuzzy
        'config-profile-no-anon' => 'Kailangan ang paglikha ng akawnt',
        'config-profile-fishbowl' => 'Pinahintulutang mga patnugot lamang',
        'config-profile-private' => 'Pribadong wiki',
@@ -17802,7 +18825,7 @@ Ang isang wiki na mayroong '''{{int:config-profile-no-anon}}''' ay nagbibigay ng
 Ang tagpo na '''{{int:config-profile-fishbowl}}''' ay nagpapahintulot lamang sa pinayagang mga tagagamit na makatingin ng mga pahina, na kapiling ang pangkat na pinayagang  makapamatnugot.
 Ang isang '''{{int:config-profile-private}}''' ay nagpapahintulot lamang sa pinayagang mga tagagamit na makatingin ng mga pahina, na kapiling ang pangkat na pinayagang makapamatnugot.
 
-Ang mas masasalimuot na mga kaayusan ng mga karapatan ng tagagamit ay makukuha pagkaraan ng pagluluklok, tingnan ang [//www.mediawiki.org/wiki/Manual:User_rights may kaugnayang kinamay na lahok].",
+Ang mas masasalimuot na mga kaayusan ng mga karapatan ng tagagamit ay makukuha pagkaraan ng pagluluklok, tingnan ang [//www.mediawiki.org/wiki/Manual:User_rights may kaugnayang kinamay na lahok].", # Fuzzy
        'config-license' => 'Karapatang-ari at lisensiya:',
        'config-license-none' => 'Walang talababa ng lisensiya',
        'config-license-cc-by-sa' => 'Malikhaing Pangkaraniwang Pagtukoy Pamamahaging Magkatulad',
@@ -17887,7 +18910,7 @@ Maaaring mangailangan ang mga ito ng karagdagang kaayusan, subalit mapapagana mo
        'config-install-alreadydone' => "'''Babala:''' Tila nailuklok mo na ang MediaWiki at tinatangka mong iluklok ito ulit.
 Paki magpatuloy sa susunod na pahina.",
        'config-install-begin' => 'Sa pamamagitan ng pagpindot sa "{{int:config-continue}}", sisimulan mo ang pagluluklok ng MediaWiki.
-Kung nais mo paring gumawa ng mga pagbabago, paki pindutin ang bumalik.',
+Kung nais mo paring gumawa ng mga pagbabago, paki pindutin ang bumalik.', # Fuzzy
        'config-install-step-done' => 'nagawa na',
        'config-install-step-failed' => 'nabigo',
        'config-install-extensions' => 'Isinasama ang mga karugtong',
@@ -17943,7 +18966,7 @@ $3
 '''Paunawa''': Kapag hindi mo ito ginawa ngayon, ang nagawang talaksang ito ng pagkakaayos ay hindi mo na makukuha mamaya kapag lumabas ka mula sa pagluluklok na hindi ikinakarga itong paibaba.
 
 Kapag nagawa na iyan, maaari ka nang '''[$2 pumasok sa wiki mo]'''.",
-       'config-download-localsettings' => 'Ikargang paibaba ang LocalSettings.php',
+       'config-download-localsettings' => 'Ikargang paibaba ang <code>LocalSettings.php</code>',
        'config-help' => 'saklolo',
        'config-nofile' => 'Hindi matagpuan ang talaksang "$1". Binura na ba ito?',
        'mainpagetext' => "'''Matagumpay na ininstala ang MediaWiki.'''",
@@ -17953,7 +18976,7 @@ Kapag nagawa na iyan, maaari ka nang '''[$2 pumasok sa wiki mo]'''.",
 
 * [//www.mediawiki.org/wiki/Manual:Configuration_settings Tala ng mga nakatakdang kumpigurasyon]
 * [//www.mediawiki.org/wiki/Manual:FAQ Mga malimit itanong sa MediaWiki]
-* [https://lists.wikimedia.org/mailman/listinfo/mediawiki-announce Tala ng mga pinadadalhan ng liham ng MediaWiki]",
+* [https://lists.wikimedia.org/mailman/listinfo/mediawiki-announce Tala ng mga pinadadalhan ng liham ng MediaWiki]", # Fuzzy
 );
 
 /** толышә зывон (толышә зывон)
@@ -18027,7 +19050,9 @@ $messages['ug-arab'] = array(
  * @author Alex Khimich
  * @author Base
  * @author Diemon.ukr
+ * @author Ата
  * @author Тест
+ * @author 아라
  */
 $messages['uk'] = array(
        'config-desc' => 'Інсталятор MediaWiki',
@@ -18036,14 +19061,26 @@ $messages['uk'] = array(
        'config-localsettings-upgrade' => "'''Увага''': було виявлено файл <code>LocalSettings.php</code>.
 Ваше програмне забезпечення може бути оновлено.
 Будь-ласка, перемістіть файл <code>LocalSettings.php</code> в іншу безпечну директорію, а потім знову запустіть програму установки.",
-       'config-localsettings-cli-upgrade' => 'Виявлено файл LocalSettings.php.
-Щоб оновити наявну установку, запустіть update.php',
+       'config-localsettings-cli-upgrade' => 'Виявлено файл <code>LocalSettings.php</code>.
+Щоб оновити наявну установку, запустіть <code>update.php</code>',
        'config-localsettings-key' => 'Ключ оновлення:',
        'config-localsettings-badkey' => 'Ви вказали неправильний ключ.',
        'config-upgrade-key-missing' => 'Виявлено наявну установку MediaWiki.
-Для оновлення цієї установки, будь ласка, вставте такий рядок в кінець вашого LocalSettings.php:
+Для оновлення цієї установки, будь ласка, вставте такий рядок в кінець вашого <code>LocalSettings.php</code>:
+$1',
+       'config-localsettings-incomplete' => 'Існуючий файл <code>LocalSettings.php</code> виявився неповним.
+Не вказано змінну $1.
+Будь ласка, змініть <code>LocalSettings.php</code> так, щоб цю змінну було задано, і натисніть "{{int:Config-continue}}".',
+       'config-localsettings-connection-error' => 'Сталася помилка при підключення до бази даних з допомогою налаштувань на сторінці <code>LocalSettings.php</code> чи <code>AdminSettings.php</code>. Будь ласка, виплавте ці налаштування і спробуйте знову.
+
 $1',
        'config-session-error' => 'Помилка початку сесії: $1',
+       'config-session-expired' => 'Час Вашої сесії минув.
+Задана тривалість сесії — $1.
+Ви можете збільшити її, змінивши <code>session.gc_maxlifetime</code> у php.ini.
+Перезапустіть процес встановлення.',
+       'config-no-session' => 'Дані сесії було втрачено!
+Перевірте Ваш php.ini і переконайтесь, що <code>session.save_path</code> встановлено у відповідну папку.',
        'config-your-language' => 'Ваша мова:',
        'config-your-language-help' => 'Оберіть мову для використання в процесі установки.',
        'config-wiki-language' => 'Мова для вікі:',
@@ -18064,39 +19101,189 @@ $1',
        'config-page-releasenotes' => 'Інформація про версію',
        'config-page-copying' => 'Копіювання',
        'config-page-upgradedoc' => 'Оновлення',
+       'config-page-existingwiki' => 'Існуюча вікі',
        'config-help-restart' => 'Ви бажаєте видалити всі введені та збережені вами дані і запустити процес установки спочатку?',
        'config-restart' => 'Так, перезапустити установку',
        'config-welcome' => '=== Перевірка оточення ===
 Проводяться базові перевірки, щоб виявити, чи можлива установка MediaWiki у даній системі.
 Вкажіть результати цих перевірок при зверненні за допомогою під час установки.',
+       'config-copyright' => "=== Авторське право і умови ===
+
+$1
+
+Ця програма є вільним програмним забезпеченням; Ви можете розповсюджувати та/або змінювати її під ліцензією GNU General Public License, опублікованою Фондом вільного програмного забезпечення; версією 2 цієї ліцензії або будь-якою пізнішою на Ваш вибір.
+
+Ця програма поширюється з надією на те, що вона буде корисною, однак '''без жодних гарантій'''; навіть без неявної гарантії '''комерційної цінності''' або '''придатності для певних цілей'''.
+Див. GNU General Public License для детальної інформації.
+
+Ви повинні були отримати <doclink href=Copying>копію GNU General Public License</doclink> разом із цією програмою; якщо ж ні, зверніться до Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. або [http://www.gnu.org/copyleft/gpl.html ознайомтесь з нею онлайн].",
        'config-sidebar' => '* [//www.mediawiki.org Сайт MediaWiki]
-* [//www.mediawiki.org/wiki/Help:Contents/uk Керівництво користувача]
-* [//www.mediawiki.org/wiki/Manual:Contents/uk Керівництво адміністратора]
-* [//www.mediawiki.org/wiki/Manual:FAQ/uk FAQ]', # Fuzzy
+* [//www.mediawiki.org/wiki/Help:Contents Посібник користувача]
+* [//www.mediawiki.org/wiki/Manual:Contents Посібник адміністратора]
+* [//www.mediawiki.org/wiki/Manual:FAQ FAQ]
+----
+* <doclink href=Readme>Read me</doclink>
+* <doclink href=ReleaseNotes>Інформація про випуск</doclink>
+* <doclink href=Copying>Ліцензія</doclink>
+* <doclink href=UpgradeDoc>Оновлення</doclink>',
        'config-env-good' => 'Перевірку середовища успішно завершено.
 Ви можете встановити MediaWiki.',
        'config-env-bad' => 'Було проведено перевірку середовища. Ви не можете встановити MediaWiki.',
        'config-env-php' => 'Встановлено версію PHP: $1.',
+       'config-env-php-toolow' => 'Встановлено PHP $1.
+Натомість MediaWiki вимагає PHP $2 і вище.',
        'config-unicode-using-utf8' => 'Використовувати utf8_normalize.so Брайона Віббера для нормалізації Юнікоду.',
        'config-unicode-using-intl' => 'Використовувати [http://pecl.php.net/intl міжнародне розширення PECL] для нормалізації Юнікоду.',
        'config-unicode-pure-php-warning' => "'''Увага''': [http://pecl.php.net/intl міжнародне розширення PECL] не може провести нормалізацію Юнікоду.
 Якщо ваш сайт має високий трафік, вам варто почитати про [//www.mediawiki.org/wiki/Unicode_normalization_considerations нормалізацію Юнікоду].",
+       'config-unicode-update-warning' => "'''Увага''': Встановлена версія обгортки нормалізації Юнікоду використовує стару версію бібліотеки [http://site.icu-project.org/ проекту ICU].
+Ви маєте [//www.mediawiki.org/wiki/Unicode_normalization_considerations оновити версію], якщо плануєте повноцінно використовувати Юнікод.",
        'config-no-db' => 'Не вдалося знайти відповідний драйвер бази даних! Вам необхідно встановити драйвер бази даних для PHP. Підтримуються такі типи баз даних: $1.
 
 Якщо ви користуєтесь віртуальним хостингом, попросіть вашого хостинг-провайдера інсталювати відповідний драйвер бази даних.
 Якщо ви скомпілювали PHP самостійно, переналаштуйте його з включенням клієнта бази даних, наприклад за допомогою <code>./configure --with-mysql</code>.
 Якщо установлено PHP з пакетів Debian або Ubuntu, тоді ви також повинні встановити php5-mysql модуль.',
+       'config-outdated-sqlite' => "'''Увага''': у Вас встановлена версія SQLite $1, а це нижче, ніж мінімально необхідна версія $2. SQLite буде недоступним.",
+       'config-no-fts3' => "'''Увага''': SQLite зібраний без [//sqlite.org/fts3.html модуля FTS3], функції пошуку не будуть працювати у цій системі.",
+       'config-register-globals' => "'''Увага: Опція PHP <code>[http://php.net/register_globals register_globals]</code> увімкнена.'''
+'''Вимкніть її, якщо це можливо.'''
+MediaWiki буде працювати, але Ваш сервер буде більш вразливим до потенційного проникнення зовні.",
+       'config-magic-quotes-runtime' => "'''Проблема: Опція PHP [http://www.php.net/manual/en/ref.info.php#ini.magic-quotes-runtime magic_quotes_runtime] увімкнена!'''
+Ця опція призводить до непередбачуваного пошкодження даних.
+Ви не можете встановити і використовувати MediaWiki, поки не буде вимкнено цю опцію.",
+       'config-magic-quotes-sybase' => "'''Проблема: Опція PHP [http://www.php.net/manual/en/ref.info.php#ini.magic-quotes-sybase magic_quotes_sybase] увімкнена!'''
+Ця опція призводить до непередбачуваного пошкодження даних.
+Ви не можете встановити і використовувати MediaWiki, поки не буде вимкнено цю опцію.",
+       'config-mbstring' => "'''Проблема: Опція PHP [http://www.php.net/manual/en/ref.mbstring.php#mbstring.overload mbstring.func_overload] увімкнена!'''
+Ця опція призводить до непередбачуваного пошкодження даних.
+Ви не можете встановити і використовувати MediaWiki, поки не буде вимкнено цю опцію.",
+       'config-ze1' => "'''Проблема: Опція PHP [http://www.php.net/manual/en/ini.core.php zend.ze1_compatibility_mode] увімкнена!'''
+Ця опція призводить до непередбачуваного пошкодження даних.
+Ви не можете встановити і використовувати MediaWiki, поки не буде вимкнено цю опцію.",
+       'config-safe-mode' => "'''Увага:''' Опція PHP [http://www.php.net/features.safe-mode «безпечний режим»] увімкнена.
+Це може спричинити проблеми, зокрема із завантаженням файлів та вставкою математичних формул.",
+       'config-xml-bad' => 'XML-модуть PHP відсутній.
+MediaWiki необхідні його функції, без цього модуля вона працювати не буде.
+Якщо Ви використовуєте Mandrake, встановіть php-xml пакет.',
+       'config-pcre' => 'Модуть підтримку PCRE не знайдено.
+Для роботи MediaWiki необхідна підтримка Perl-сумісних регулярних виразів.',
+       'config-pcre-no-utf8' => "'''Помилка''': PCRE-модуть PHP, вочевидь, було зібрано без підтримки PCRE_UTF8.
+MediaWiki вимагає підтримку UTF-8 для коректної роботи.",
+       'config-memory-raised' => "Обмеження пам'яті PHP (<code>memory_limit</code>) $1, піднято до $2.",
+       'config-memory-bad' => "'''Увага:''' Розмір пам'яті PHP (<code>memory_limit</code>) становить $1.
+Імовірно, це замало.
+Встановлення може не вдатись!",
+       'config-ctype' => "'''Помилка''': PHP має бути зібраним з підтримкою [http://www.php.net/manual/en/ctype.installation.php розширення Ctype].",
        'config-xcache' => '[http://xcache.lighttpd.net/ XCache] встановлено',
        'config-apc' => '[http://www.php.net/apc APC] встановлено',
        'config-wincache' => '[http://www.iis.net/download/WinCacheForPhp WinCache] встановлено',
+       'config-no-cache' => "'''Увага:''' Не вдалося знайти [http://www.php.net/apc APC], [http://xcache.lighttpd.net/ XCache] чи [http://www.iis.net/download/WinCacheForPhp WinCache].
+Кешування об'єктів не ввімкнено.",
+       'config-mod-security' => "'''Увага''': на Вашому веб-сервері увімкнено [http://modsecurity.org/ mod_security]. У разі неправильних налаштувать, він може викликати проблеми MediaWiki або іншого ПЗ, яке дозволяє користувачам надсилати довільний вміст.
+Зверніться до [http://modsecurity.org/documentation/ документації mod_security] або підтримки Вашого хостера, якщо під час роботи виникають незрозумілі помилки.",
+       'config-diff3-bad' => 'GNU diff3 не знайдено.',
+       'config-imagemagick' => 'Виявлено ImageMagick: <code>$1</code>.
+Буде ввімкнуто відображення мініатюр, якщо ви дозволите завантаження файлів.',
+       'config-gd' => 'Виявлено вбудовано графічну бібліотеку GD.
+Буде ввімкнуто відображення мініатюр, якщо ви дозволите завантаження файлів.',
+       'config-no-scaling' => 'Не вдалося виявити бібліотеку GD чи ImageMagick.
+Відображення мініатюр буде вимкнено.',
+       'config-no-uri' => "'''Помилка:''' Не вдалося визначити поточний URI.
+Встановлення перервано.",
+       'config-no-cli-uri' => "'''Увага''': Не задано параметр --scriptpath, використовується за замовчуванням: <code>$1</code>.",
+       'config-using-server' => 'Використовується ім\'я сервера "<nowiki>$1</nowiki>".',
+       'config-using-uri' => 'Використовується URL сервера "<nowiki>$1$2</nowiki>".',
+       'config-uploads-not-safe' => "'''Увага:''' Ваша типова папка для завантажень <code>$1</code> вразлива до виконання довільних скриптів.
+Хоча MediaWiki перевіряє усі завантажені файли на наявність загроз, наполегливо рекомендується [//www.mediawiki.org/wiki/Manual:Security#Upload_security закрити дану вразливість] перед тим, як дозволяти завантаження файлів.",
+       'config-no-cli-uploads-check' => "'''Увага:''' Ваша типова папка для завантажень (<code>$1</code>) не перевірялась на вразливість до виконання довільних скриптів під час встановлення CLI.",
+       'config-brokenlibxml' => 'У Вашій системі невдале поєднання версій PHP і libxml2, яке може спричинити пошкодження прихованих даних у MediaWiki та інших веб-застосунках.
+Оновіть PHP до версії 5.2.9 або пізнішої і libxml2 до 2.7.3 або пізнішої ([//bugs.php.net/bug.php?id=45996 відомості про помилку]).
+Встановлення перервано.',
+       'config-using531' => 'MediaWiki не можна використовувати разом з PHP $1 через помилку з параметрами-посиланнями <code>__call()</code>.
+Оновіть PHP до версії 5.3.2 і вище або відкотіть до PHP 5.3.0 щоб уникнути цієї проблеми.
+Встановлення скасовано.',
+       'config-suhosin-max-value-length' => 'Suhosin встановлено і обмежує довжину параметра GET до $1 байтів. Компонент MediaWiki ResourceLoader буде обходити це обмеження, однак це зменшить продуктивність. Якщо це можливо, Вам варто встановити значення <code>suhosin.get.max_value_length</code> 1024 і більше у <code>php.ini</code> і встановити таке ж значення <code>$wgResourceLoaderMaxQueryLength</code> у LocalSettings.php .', # Fuzzy
        'config-db-type' => 'Тип бази даних:',
        'config-db-host' => 'Хост бази даних:',
+       'config-db-host-help' => 'Якщо сервер бази даних знаходиться на іншому сервері, введіть тут ім\'я хосту і IP адресу.
+
+Якщо Ви використовуєте віртуальний хостинг, Ваш хостинг-провайдер має надати Вам правильне ім\'я хосту у його документації.
+
+Якщо у Вас сервер із Windows Ви використовуєте MySQL, параметр "localhost" може не працювати для імені сервера. Якщо не працює, використайте "127.0.0.1" як локальну IP-адресу.
+
+Якщо Ви використовуєте PostgreSQL, залиште це поле пустим, щоб під\'єднатись через сокет Unix.',
+       'config-db-host-oracle' => 'TNS бази даних:',
+       'config-db-host-oracle-help' => 'Введіть допустиме [http://download.oracle.com/docs/cd/B28359_01/network.111/b28317/tnsnames.htm Local Connect Name]; файл tnsnames.ora має бути видимим для цієї інсталяції. <br />Якщо Ви використовуєте бібліотеки 10g чи новіші, можна також використовувати метод іменування [http://download.oracle.com/docs/cd/E11882_01/network.112/e10836/naming.htm Easy Connect].',
+       'config-db-wiki-settings' => 'Ідентифікувати цю вікі',
        'config-db-name' => 'Назва бази даних:',
+       'config-db-name-help' => 'Виберіть назву, що ідентифікує Вашу вікі.
+Вона не повинна містити пробілів.
+
+Якщо Ви використовуєте віртуальний хостинг, Ваш хостинг-провайдер або надасть Вам конкретну назву бази даних, або дозволить створювати бази даних з допомогою панелі управління.',
+       'config-db-name-oracle' => 'Схема бази даних:',
+       'config-db-account-oracle-warn' => 'Є три підтримувані сценарії установки Oracle:
+
+Якщо Ви хочете створити обліковий запис бази даних у процесі встановлення, будь ласка, вкажіть обліковий запис ролі SYSDBA для установки і бажані повноваження для облікового запису з веб-доступом. В протилежному випадку Ви можете або створити обліковий запис з веб-доступом вручну і вказати тільки цей обліковий запис (якщо він має необхідні дозволи на створення об\'єктів-схем), або вказати два різні облікові записи, з яких в одного будуть права на створення, а в другого, обмеженого — права веб-доступу.
+
+Скрипт для створення облікового запису з необхідними повноваженнями можна знайти у папці "maintenance/oracle/" цієї інсталяції. Майте на увазі, що використання обмеженого облікового запису вимкне можливість використання технічного обслуговування з облікового запису за замовчуванням.',
+       'config-db-install-account' => 'Обліковий запис користувача для встановлення',
+       'config-db-username' => "Ім'я користувача бази даних:",
        'config-db-password' => 'Пароль бази даних:',
+       'config-db-password-empty' => 'Будь ласка, введіть пароль для нового користувача бази даних: $1.
+Хоча можна створювати користувачів без паролів, це не є безпечним.',
+       'config-db-install-username' => "Введіть ім'я користувача, яке буде використано для підключення до бази даних під час процесу встановлення.
+Це не ім'я користувача облікового запису MediaWiki; це ім'я користувача для Вашої бази даних.",
+       'config-db-install-password' => 'Введіть пароль, який буде використано для підключення до бази даних під час процесу встановлення.
+Це не пароль облікового запису MediaWiki; це пароль для Вашої бази даних.',
+       'config-db-install-help' => "Введіть ім'я користувача і пароль, які буде використано для підключення до бази даних у процесі встановлення.",
+       'config-db-account-lock' => "Використовувати ті ж ім'я користувача і пароль і для звичайної роботи",
+       'config-db-wiki-account' => 'Обліковий запис користувача для звичайної роботи',
+       'config-db-wiki-help' => "Введіть ім'я користувача і пароль, які будуть використовуватись для з'єднання з базою даних під час звичайної роботи.
+Якщо обліковий запис не існує, а в облікового запису інсталяції є достатні повноваження, цей обліковий запис користувача буде створено з мінімальними правами, що необхідні для роботи з вікі.",
+       'config-db-prefix' => 'Префікс таблиць бази даних:',
+       'config-db-prefix-help' => 'Якщо треба ділити одну базу даних між декількома вікі або між MediaWiki та іншим веб-застосунком, Ви можете додати префікс до усіх назв таблиць для уникнення конфліктів.
+Не використовуйте пробіли.
+
+Це поле зазвичай залишають пустим.',
        'config-db-charset' => 'Кодування бази даних',
        'config-charset-mysql5-binary' => 'MySQL 4.1/5.0 binary',
        'config-charset-mysql5' => 'MySQL 4.1/5.0 UTF-8',
+       'config-charset-mysql4' => 'MySQL 4.0 зворотно сумісна з UTF-8',
+       'config-charset-help' => "'''Увага:''' Якщо Ви використовуєте '''зворотно сумісну UTF-8''' на MySQL 4.1+ і створюєте резервні копії бази даних з допомогою <code>mysqldump</code>, це може викривити усі не-ASCII символи, незворотно пошкодивши резервні копії!
+
+У '''бінарному режимі''' MediaWiki зберігає текст UTF-8 у базі даних з бінарними полями.
+Це більш ефективно, ніж UTF-8 режим MySQL, і дозволяє використовувати увесь набір символів Юнікоду.
+У '''режимі UTF-8''' MySQL буде знати, якого символу стосуються Ваші дані, і могтиме відображати та конвертувати їх належним чином,
+але не дозволятиме зберігати символи, що виходять за межі [//en.wikipedia.org/wiki/Mapping_of_Unicode_character_planes Basic Multilingual Plane].",
+       'config-mysql-old' => 'Необхідна MySQL $1 або пізніша, а у Вас $2.',
        'config-db-port' => 'Порт бази даних:',
+       'config-db-schema' => 'Схема для MediaWiki',
+       'config-db-schema-help' => 'Ця схема зазвичай працює добре. 
+Змінюйте її тільки якщо знаєте, що Вам це потрібно.',
+       'config-pg-test-error' => "Не вдається підключитися до бази даних '''$1''': $2",
+       'config-sqlite-dir' => 'Папка даних SQLite:',
+       'config-sqlite-dir-help' => "SQLite зберігає усі дані в єдиному файлі.
+
+Папка, яку Ви вказуєте, має бути доступна серверу для запису під час встановлення.
+
+Вона '''не''' повинна бути доступна через інтернет, тому ми і не поміщуємо її туди, де Ваші файли PHP.
+
+Інсталятор пропише у неї файл <code>.htaccess</code>, але якщо це не спрацює, хтось може отримати доступ до Вашої вихідної бази даних, яка містить вихідні дані користувача (адреси електронної пошти, хеші паролів), а також видалені версії та інші обмежені дані на вікі.
+
+За можливості розташуйте базу даних десь окремо, наприклад в <code>/var/lib/mediawiki/yourwiki</code>.",
+       'config-oracle-def-ts' => 'Простір таблиць за замовчуванням:',
+       'config-oracle-temp-ts' => 'Тимчасовий простір таблиць:',
+       'config-type-ibm_db2' => 'IBM DB2',
+       'config-support-info' => 'MediaWiki підтримує таки системи баз даних:
+
+$1
+
+Якщо Ви не бачите серед перерахованих систему баз даних, яку використовуєте, виконайте вказівки, вказані вище, щоб увімкнути підтримку.',
+       'config-support-mysql' => '* $1 є основною для MediaWiki і найкраще підтримується ([http://www.php.net/manual/en/mysql.installation.php як зібрати PHP з допомогою MySQL])',
+       'config-support-postgres' => '* $1 — популярна відкрита СУБД, альтернатива MySQL ([http://www.php.net/manual/en/pgsql.installation.php як зібрати PHP з допомогою PostgreSQL]). Можуть зустрічатись деякі невеликі невиправлені помилки, не рекомендується використовувати у робочій системі.',
+       'config-support-sqlite' => '* $1 — легка система баз даних, яка дуже добре підтримується. ([http://www.php.net/manual/en/pdo.installation.php Як зібрати PHP з допомогою SQLite], що використовує PDO)',
+       'config-support-oracle' => '* $1 — комерційна база даних масштабу підприємства. ([http://www.php.net/manual/en/oci8.installation.php Як зібрати PHP з підтримкою OCI8])',
+       'config-support-ibm_db2' => '* $1 — комерційна база даних масштабу підприємства.', # Fuzzy
        'config-header-mysql' => 'Налаштування MySQL',
        'config-header-postgres' => 'Налаштування PostgreSQL',
        'config-header-sqlite' => 'Налаштування SQLite',
@@ -18106,42 +19293,299 @@ $1',
        'config-missing-db-name' => "Ви повинні ввести значення параметру «Ім'я бази даних»",
        'config-missing-db-host' => 'Ви повинні ввести значення параметру «Хост бази даних»',
        'config-missing-db-server-oracle' => 'Ви повинні ввести значення параметру «TNS бази даних»',
+       'config-invalid-db-server-oracle' => 'Неприпустиме TNS бази даних "$1".
+Використовуйте тільки ASCII букви (a-z, A-Z), цифри (0-9), знаки підкреслення (_) і крапки (.).',
        'config-invalid-db-name' => 'Неприпустима назва бази даних "$1".
 Використовуйте тільки ASCII букви (a-z, A-Z), цифри (0-9), знаки підкреслення (_) і дефіси (-).',
        'config-invalid-db-prefix' => 'Неприпустимий префікс бази даних "$1".
 Використовуйте тільки ASCII букви (a-z, A-Z), цифри (0-9), знаки підкреслення (_) і дефіси (-).',
+       'config-connection-error' => "$1.
+
+Перевірте хост, ім'я користувача та пароль і спробуйте ще раз.",
+       'config-invalid-schema' => 'Неприпустима схема для MediaWiki "$1".
+Використовуйте тільки ASCII букви (a-z, A-Z), цифри (0-9) і знаки підкреслення(_).',
+       'config-db-sys-create-oracle' => 'Інсталятор підтримує лише використання облікового запису SYSDBA для створення нового облікового запису.',
+       'config-db-sys-user-exists-oracle' => 'Обліковий запис користувача "$1" уже існує. SYSDBA використовується лише для створення новий облікових записів!',
+       'config-postgres-old' => 'Необхідна PostgreSQL $1 або пізніша, а у Вас $2.',
+       'config-sqlite-name-help' => 'Виберіть назву, що ідентифікує Вашу вікі.
+Не використовуйте пробіли і дефіси.
+Це буде використовуватись у назві файлу даних SQLite.',
+       'config-sqlite-parent-unwritable-group' => 'Не можна створити папку даних <code><nowiki>$1</nowiki></code>, оскільки батьківська папка <code><nowiki>$2</nowiki></code> не доступна веб-серверу для запису.
+
+Інсталятор виявив, під яким користувачем працює Ваш сервер.
+Зробіть папку <code><nowiki>$3</nowiki></code> доступною для запису, щоб продовжити.
+В ОС Unix/Linux виконайте:
+
+<pre>cd $2
+mkdir $3
+chgrp $4 $3
+chmod g+w $3</pre>',
+       'config-sqlite-parent-unwritable-nogroup' => 'Не можна створити папку даних <code><nowiki>$1</nowiki></code>, оскільки батьківська папка <code><nowiki>$2</nowiki></code> не доступна веб-серверу для запису.
+
+Інсталятор не зміг виявити, під яким користувачем працює Ваш сервер.
+Зробіть папку <code><nowiki>$3</nowiki></code> доступною для запису серверу (і всім!) глобально, щоб продовжити.
+В ОС Unix/Linux виконайте:
+
+<pre>cd $2
+mkdir $3
+chmod a+w $3</pre>',
+       'config-sqlite-mkdir-error' => 'Помилка при створенні папки даних "$1".
+Перевірте розташування і спробуйте знову.',
+       'config-sqlite-dir-unwritable' => 'Не можливо записати до папки "$1".
+Змініть налаштування доступу так, щоб веб-сервер міг писати до неї, і спробуйте ще раз.',
+       'config-sqlite-connection-error' => '$1.
+
+Перевірте папку даних і назву бази даних нижче та спробуйте знову.',
        'config-sqlite-readonly' => 'Файл <code>$1</code> недоступний для запису.',
        'config-sqlite-cant-create-db' => 'Не вдалося створити файл бази даних <code>$1</code>.',
+       'config-sqlite-fts3-downgrade' => 'У PHP немає підтримки FTS3, скидаю таблиці',
+       'config-can-upgrade' => "У цій базі даних є таблиці MediaWiki.
+Щоб оновити їх до MediaWiki $1, натисніть '''Продовжити'''.",
+       'config-upgrade-done' => "Оновлення завершено.
+
+Ви можете зараз [$1 починати використовувати свою вікі].
+
+Якщо Ви хочете повторно згенерувати файл <code>LocalSettings.php</code>, натисніть на кнопку нижче.
+Це '''не рекомендується''', якщо тільки у Вас не виникли проблеми з Вашою вікі.",
+       'config-upgrade-done-no-regenerate' => 'Оновлення завершено.
+
+Ви можете зараз [$1 починати використовувати свою вікі].',
+       'config-regenerate' => 'Повторно згенерувати <code>LocalSettings.php</code> →',
+       'config-show-table-status' => 'Запит <code>SHOW TABLE STATUS</code> не виконано!',
+       'config-unknown-collation' => "'''Увага:''' База даних використовує нерозпізнане сортування.",
+       'config-db-web-account' => 'Обліковий запис бази даних для інтернет-доступу',
+       'config-db-web-help' => "Оберіть ім'я користувача і пароль, які веб-сервер буде використовувати для з'єднання із сервером бази даних під час звичайної роботи вікі.",
+       'config-db-web-account-same' => 'Використати той же обліковий запис для встановлення',
        'config-db-web-create' => 'Створити обліковий запис, якщо його ще не існує',
+       'config-db-web-no-create-privs' => 'Обліковий запис, вказаний Вами для встановлення, не має достатніх повноважень для створення облікового запису.
+Обліковий запис, який Ви вказуєте тут, уже повинен існувати.',
+       'config-mysql-engine' => 'Двигун бази даних:',
+       'config-mysql-innodb' => 'InnoDB',
+       'config-mysql-myisam' => 'MyISAM',
+       'config-mysql-myisam-dep' => "'''Увага''': Ви обрали MyISAM для зберігання даних MySQL, що не рекомендовано для роботи з MediaWiki, оскільки:
+* він слабко підтримує паралелізм через блокування таблиць
+* він більш схильний до ушкоджень, ніж інші двигуни
+* база коду MediaWiki не завжди працює з MyISAM так, як мала б.
+
+Якщо Ваша інсталяція MySQL підтримує InnoDB, дуже рекомендується вибрати цей двигун.
+Якщо Ваша інсталяція MySQL не підтримує InnoDB, можливо настав час її оновити.",
+       'config-mysql-engine-help' => "'''InnoDB''' є завжди кращим вибором, оскільки краще підтримує паралельний доступ.
+
+'''MyISAM''' може бути швидшим для одного користувача або в інсталяціях read-only.
+Бази даних MyISAM схильні псуватись частіше, ніж бази InnoDB.",
        'config-mysql-charset' => 'Кодування бази даних:',
        'config-mysql-binary' => 'Двійкове',
+       'config-mysql-utf8' => 'UTF-8',
+       'config-mysql-charset-help' => "У '''бінарному режимі''' MediaWiki зберігає текст UTF-8 у базі даних з бінарними полями.
+Це більш ефективно, ніж UTF-8 режим MySQL, і дозволяє використовувати увесь набір символів Юнікоду.
+
+У '''режимі UTF-8''' MySQL буде знати, якого символу стосуються Ваші дані, і могтиме відображати та конвертувати їх належним чином, але не дозволятиме зберігати символи, що виходять за межі [//en.wikipedia.org/wiki/Mapping_of_Unicode_character_planes Basic Multilingual Plane].",
+       'config-ibm_db2-low-db-pagesize' => "У Вашій базі даних DB2 за замовчуванням заданий табличний простір з недостатнім розміром сторінки. Розмір сторінки має бути '''32K''' і більше.",
        'config-site-name' => 'Назва вікі:',
+       'config-site-name-help' => 'Це буде відображатись у заголовку вікна браузера та у деяких інших місцях.',
        'config-site-name-blank' => 'Введіть назву сайту.',
        'config-project-namespace' => 'Простір назв проекту:',
        'config-ns-generic' => 'Проект',
+       'config-ns-site-name' => 'Те ж саме, що й назва вікі: $1',
+       'config-ns-other' => 'Інше (вкажіть)',
+       'config-ns-other-default' => 'MyWiki',
+       'config-project-namespace-help' => 'За прикладом Вікіпедії, чимало вікі тримають свої сторінки правил окремо від сторінок основного вмісту, у "\'\'\'просторі імен проекту\'\'\'".
+Усі назви сторінок у цьому просторі імен починаються з певного префікса, який Ви можете вказати тут.
+Традиційно цей префікс виводиться з назви вікі, але не може містити знаки пунктуація, як-то "#" чи ":".',
+       'config-ns-invalid' => 'Вказаний простір імен "<nowiki>$1</nowiki>" не припустимий.
+Вкажіть інший простір імен проекту.',
+       'config-ns-conflict' => 'Вказаний простір імен "<nowiki>$1</nowiki>" конфліктує зі стандартним простором імен MediaWiki.
+Вкажіть інший простір імен проекту.',
+       'config-admin-box' => 'Обліковий запис адміністратора',
        'config-admin-name' => "Ваше ім'я:",
        'config-admin-password' => 'Пароль:',
        'config-admin-password-confirm' => 'Пароль ще раз:',
+       'config-admin-help' => 'Введіть бажане ім\'я користувача тут, наприклад "Павло НЛО".
+Це ім\'я ви будете використовувати про вході у вікі.',
+       'config-admin-name-blank' => "Введіть ім'я користувача адміністратора.",
+       'config-admin-name-invalid' => 'Вказане ім\'я користувача "<nowiki>$1</nowiki>" не припустиме.
+Вкажіть інше ім\'я користувача.',
+       'config-admin-password-blank' => 'Введіть пароль до облікового запису адміністратора.',
+       'config-admin-password-same' => "Пароль не може бути таким же, як ім'я користувача.",
        'config-admin-password-mismatch' => 'Два введені вами паролі не збігаються.',
        'config-admin-email' => 'Адреса електронної пошти:',
+       'config-admin-email-help' => 'Введіть адресу електронної пошти, щоб мати змогу отримувати електронну пошту від інших користувачів у вікі, відновити пароль і отримувати повідомлення про зміни, внесені до сторінок у Вашому списку спостереження. Ви можете залишити це поле пустим.',
+       'config-admin-error-user' => 'Внутрішня помилка під час створення адміністратора з ім\'ям "<nowiki>$1</nowiki>".',
+       'config-admin-error-password' => 'Внутрішня помилка під час встановлення пароля для адміністратора "<nowiki>$1</nowiki>":<pre>$2</pre>',
+       'config-admin-error-bademail' => 'Ви ввели недопустиму адресу електронної пошти.',
+       'config-subscribe' => 'Підписатися на [https://lists.wikimedia.org/mailman/listinfo/mediawiki-announce розсилку анонсів нових версій MediaWiki].',
+       'config-subscribe-help' => "Це список розсилки з малим обсягом повідомлень, що використовується для анонсування релізів, а також важливих повідомлень про безпеку.
+Вам варто підписати і оновлювати інсталяцію MediaWiki, коли з'являтимуться нові версії.",
+       'config-subscribe-noemail' => 'Ви намагались підписатись на розсилку анонсів релізів, не вказавши адреси електронної пошти.
+Будь ласка, вкажіть адресу електронної пошти, якщо хочете підписатись на розсилку.',
+       'config-almost-done' => 'Майже готово!
+Ви можете зараз пропустити налаштування, що залишилось, і встановити вікі прямо зараз.',
+       'config-optional-continue' => 'Запитуйте ще.',
+       'config-optional-skip' => 'Це вже втомлює, просто встановити вікі.',
+       'config-profile' => 'Профіль прав користувача:',
+       'config-profile-wiki' => 'Традиційна вікі', # Fuzzy
+       'config-profile-no-anon' => 'Необхідно створити обліковий запис',
+       'config-profile-fishbowl' => 'Тільки для авторизованих редакторів',
+       'config-profile-private' => 'Приватна вікі',
+       'config-profile-help' => "Вікі краще працюють, коли Ви дозволяєте їх редагувати якомога ширшому колу людей.
+У MediaWiki легко переглядати останні зміни і відкочувати будь-яку шкоду, спричинену недосвідченими або зловмисними користувачами.
+
+Одначе, MediaWiki може бути корисна по-різному, й інколи важко переконати у вигідності відкритої вікі-роботи.
+Тож у Вас є вибір.
+
+'''{{int:config-profile-wiki}}''' дозволяє редагувати будь-кому, навіть без входження в систему.
+Вікі з вимогою \"'''{{int:config-profile-no-anon}}'''\" дає певний облік, але може відвернути випадкових дописувачів.
+Спосіб \"'''{{int:config-profile-fishbowl}}'''\" дозволяє редагувати підтвердженим користувачам, а переглядати сторінки і історію можуть усі.
+'''{{int:config-profile-private}}''' дозволяє переглядати сторінки і редагувати лише підтвердженим користувачам.
+
+Детальніші конфігурації прав користувачів доступні після встановлення, див. [//www.mediawiki.org/wiki/Manual:User_rights відповідний розділ посібника].", # Fuzzy
        'config-license' => 'Авторські права і ліцензія:',
+       'config-license-none' => 'Без ліцензії у нижньому колонтитулі',
+       'config-license-cc-by-sa' => 'Creative Commons Attribution Share Alike',
+       'config-license-cc-by' => 'Creative Commons Attribution',
        'config-license-cc-by-nc-sa' => 'Creative Commons Attribution Non-Commercial Share Alike',
+       'config-license-cc-0' => 'Creative Commons Zero (Суспільне надбання)',
+       'config-license-gfdl' => 'GNU Free Documentation License 1.3 або пізніша',
+       'config-license-pd' => 'Суспільне надбання (Public Domain)',
+       'config-license-cc-choose' => 'Виберіть одну з ліцензій Creative Commons',
+       'config-license-help' => "Чимало загальнодоступних вікі публікують увесь свій вміст під [http://freedomdefined.org/Definition вільною ліцензією]. Це розвиває відчуття спільної власності і заохочує довготривалу участь. У загальному випадку для приватної чи корпоративної вікі у цьому немає необхідності.
+
+Якщо Ви хочете мати змогу використовувати текст з Вікіпедії і дати Вікіпедії змогу використовувати текст, скопійований з Вашої вікі, вам необхідно обрати '''Creative Commons Attribution Share Alike'''.
+
+Раніше Вікіпедія використовувала GNU Free Documentation License.
+GFDL — допустима ліцензія, але у ній важко розібратися, а контент під GFDL важко використовувати повторно.",
        'config-email-settings' => 'Налаштування електронної пошти',
+       'config-enable-email' => 'Увімкнути вихідну електронну пошту',
+       'config-enable-email-help' => 'Якщо Ви хочете, що електронна пошта працювала, необхідно виставити коректні [http://www.php.net/manual/en/mail.configuration.php налаштування пошти у PHP].
+Якщо Вам не потрібні жодні можливості електронної пошти у вікі, можете тут їх відключити.',
+       'config-email-user' => 'Увімкнути електронну пошту користувач-користувачеві',
+       'config-email-user-help' => 'Дозволити усім користувачам надсилати один одному електронну пошту, якщо вони увімкнули цю можливість у своїх налаштуваннях.',
+       'config-email-usertalk' => 'Увімкнути сповіщення про повідомлення на сторінці обговорення користувача',
+       'config-email-usertalk-help' => 'Дозволити користувачам отримувати сповіщення про зміни на своїй сторінці обговорення, якщо вони увімкнули цю можливість у своїх налаштуваннях.',
+       'config-email-watchlist' => 'Увімкнути сповіщення про зміни у списку спостереження',
+       'config-email-watchlist-help' => 'Дозволити користувачам отримувати сповіщення про сторінки з їхнього списку спостереження, якщо вони увімкнули цю можливість у своїх налаштуваннях.',
+       'config-email-auth' => 'Увімкнути автентифікацію через електронну пошту',
+       'config-email-auth-help' => "Якщо ця опція увімкнена, користувачам треба підтвердити свою адресу електронної пошти з допомогою надісланого їм посилання, коли вони встановлюють чи змінюють її.
+Тільки автентифіковані адреси електронної пошти отримують листи від інших користувачів або змінювати поштові сповіщення.
+Увімкнення цієї опції '''рекомендується''' загальнодоступним вікі через можливі зловживання функціями електронної пошти.",
+       'config-email-sender' => 'Зворотна адреса електронної пошти:',
+       'config-email-sender-help' => "Введіть адресу електронної пошти, що буде використовуватись як зворотна адреса для вихідної пошти.
+На неї будуть надсилатись відмови.
+Чимало поштових серверів вимагають, щоб принаймні доменне ім'я було допустимим.",
+       'config-upload-settings' => 'Завантаження зображень і файлів',
        'config-upload-enable' => 'Дозволити завантаження файлів',
+       'config-upload-help' => 'Завантаження файлів підставляє Ваш сервер під потенційні загрози.
+Детальнішу інформацію можна почитати у посібнику, [//www.mediawiki.org/wiki/Manual:Security розділ про безпеку].
+
+Щоб дозволити завантаження файлів, змініть режим підпапки <code>images</code> у кореневій папці MediaWiki так, щоб сервер міг у неї записувати.
+Потім увімкніть цю опцію.',
        'config-upload-deleted' => 'Каталог для вилучених файлів:',
+       'config-upload-deleted-help' => 'Оберіть папку для архівації видалених файлів.
+В ідеалі, вона не має бути доступною через інтернет.',
+       'config-logo' => 'URL логотипу:',
+       'config-logo-help' => 'Стандартна схема оформлення MediaWiki містить вільне для логотипу місце над бічною панеллю розміром 135x160 пікселів. 
+Завантажте зображення відповідного розміру і введіть тут його URL.
+
+Якщо Вам не потрібен логотип, залиште це поле пустим.',
+       'config-instantcommons' => 'Увімкнути Instant Commons',
+       'config-instantcommons-help' => '[//www.mediawiki.org/wiki/InstantCommons Instant Commons] це функція, що дозволяє вікі використовувати зображення, звуки та інші медіа, розміщені на [//commons.wikimedia.org/ Вікісховищі].
+Для цього MediaWiki необхідний доступ до інтернету.
+
+Додаткову інформацію стосовно цієї функції, включаючи інструкції, як її увімкнути у вікі, відмінних від Вікісховища, дивіться у [//mediawiki.org/wiki/Manual:$wgForeignFileRepos посібнику].',
+       'config-cc-error' => 'Механізм вибору ліцензії Creative Commons не дав результатів.
+Введіть назву ліцензії вручну.',
        'config-cc-again' => 'Виберіть знову ...',
+       'config-cc-not-chosen' => 'Оберіть, яку ліцензію Creative Commons Ви хочете використовувати, і натисніть "продовжити".',
+       'config-advanced-settings' => 'Розширені налаштування',
+       'config-cache-options' => "Налаштування кешування об'єктів:",
+       'config-cache-help' => "Кешування об'єктів використовується для покращення швидкодії MediaWiki методом кешування часто використовуваних даних.
+Заохочується увімкнення цієї можливості для середніх і великих сайтів, малі сайти також можуть відчути її перевагу.",
+       'config-cache-none' => 'Без кешування (жодні функції не втрачаються, але впливає на швидкодію великих вікі-сайтів)',
+       'config-cache-accel' => "PHP кешування об'єктів (APC, XCache чи WinCache)",
+       'config-cache-memcached' => 'Використовувати Memcached (вимагає додаткової установки і налаштування)',
+       'config-memcached-servers' => 'Сервери Memcached:',
+       'config-memcached-help' => 'Список IP-адрес, що викоритовує Memcached.
+Вкажіть по одному в рядку, разом з портами. Наприклад:
+ 127.0.0.1:11211
+ 192.168.1.25:1234',
+       'config-memcache-needservers' => 'Ви обрали тип кешування Memcached, але не вказали ніяких серверів.',
+       'config-memcache-badip' => 'Ви ввели недопустиму IP-адресу для Memcached: $1.',
+       'config-memcache-noport' => 'Ви не вказали порт для сервера Memcached: $1.
+Якщо Ви його не знаєте, за замовчуванням використовується 11211.',
+       'config-memcache-badport' => 'Номери портів Memcached повинні лежати в межах від $1 до $2.',
        'config-extensions' => 'Розширення',
+       'config-extensions-help' => 'Розширення, перераховані вище, були знайдені у папці <code>./extensions</code>.
+
+Вони можуть потребувати додаткових налаштувань, але Ви можете увімкнути їх зараз.',
+       'config-install-alreadydone' => "'''Увага:''' Здається, Ви вже встановлювали MediaWiki і зараз намагаєтесь встановити її знову.
+Будь ласка, перейдіть на наступну сторінку.",
+       'config-install-begin' => 'Натискаючи "{{int:config-continue}}", Ви розпочинаєте встановлення MediaWiki.
+Якщо Ви все ще хочете внести зміни, натисніть "Назад".', # Fuzzy
        'config-install-step-done' => 'виконано',
        'config-install-step-failed' => 'не вдалося',
+       'config-install-extensions' => 'У тому числі розширення',
+       'config-install-database' => 'Налаштування бази даних',
+       'config-install-schema' => 'Створення схеми',
+       'config-install-pg-schema-not-exist' => 'Схеми PostgreSQL не існує.',
+       'config-install-pg-schema-failed' => 'Не вдалось створити таблиці.
+Переконайтесь, що користувач "$1" може писати до схеми "$2".',
+       'config-install-pg-commit' => 'Внесення змін',
+       'config-install-pg-plpgsql' => 'Перевірка мови PL/pgSQL',
+       'config-pg-no-plpgsql' => 'Вам необхідно встановити мову PL/pgSQL у базі даних $1',
+       'config-pg-no-create-privs' => 'Обліковий запис, вказаний для встановлення, має недостатньо прав для створення облікового запису.',
+       'config-pg-not-in-role' => 'Обліковий запис, який Ви вказали для веб-користувача, уже існує.
+Обліковий запис, який Ви вказали для встановлення не є суперюзером і не відноситься до ролі веб-користувача, тому неможливо створити об\'єкти, що належать веб-користувачеві.
+
+У даний час MediaWiki вимагає, щоб усі таблиці належали веб-користувачу. Будь ласка, вкажіть інше ім\'я облікового запису або натисніть "Назад" та вкажіть користувача з достатніми правами.',
+       'config-install-user' => 'Створення користувача бази даних',
+       'config-install-user-alreadyexists' => 'Користувач "$1" уже існує',
+       'config-install-user-create-failed' => 'Не вдалося створити користувача "$1": $2',
+       'config-install-user-grant-failed' => 'Не вдалося надати права користувачеві "$1": $2',
+       'config-install-user-missing' => 'Зазначеного користувача "$1" не існує.',
+       'config-install-user-missing-create' => 'Зазначеного користувача "$1" не існує.
+Будь ласка, поставте галочку "Створити обліковий запис", якщо хочете його створити.',
+       'config-install-tables' => 'Створення таблиць',
+       'config-install-tables-exist' => "'''Увага''': Таблиці MediaWiki уже, здається, існують.
+Пропуск створення.",
+       'config-install-tables-failed' => "'''Помилка''': Не вдалося створити таблицю внаслідок такої помилки: $1",
+       'config-install-interwiki' => 'Заповнення таблиці інтервікі значеннями за замовчуванням',
        'config-install-interwiki-list' => 'Не вдалося знайти файл <code>interwiki.list</code>.',
+       'config-install-interwiki-exists' => "'''Увага''': Таблиця інтервікі уже, здається, має записи.
+Створення стандартного списку пропускається.",
+       'config-install-stats' => 'Ініціалізація статистики',
+       'config-install-keys' => 'Генерація секретних ключів',
+       'config-insecure-keys' => "'''Увага:''' {{PLURAL:$2|Секретний ключ|Секретні ключі}} ($1), {{PLURAL:$2|згенерований в процесі встановлення, недостатньо надійний|згенеровані в процесі встановлення, недостатньо надійні}}. Розгляньте можливість {{PLURAL:$2|його|їх}} заміни вручку.",
+       'config-install-sysop' => 'Створення облікового запису адміністратора',
+       'config-install-subscribe-fail' => 'Не можливо підписатись на mediawiki-announce: $1',
+       'config-install-subscribe-notpossible' => 'cURL не встановлено і опція allow_url_fopen не доступна.',
+       'config-install-mainpage' => 'Створення головної сторінки із вмістом за замовчуванням',
+       'config-install-extension-tables' => 'Створення таблиць для увімкнених розширень',
+       'config-install-mainpage-failed' => 'Не вдається вставити головну сторінку: $1',
+       'config-install-done' => "'''Вітаємо!'''
+Ви успішно встановили MediaWiki.
+
+Інсталятор згенерував файл <code>LocalSettings.php</code>, який містить усі Ваші налаштування.
+
+Вам необхідно завантажити його і помістити у кореневу папку Вашої вікі (туди ж, де index.php). Завантаження мало початись автоматично.
+
+Якщо завантаження не почалось або Ви його скасували, можете заново його почати, натиснувши на посилання внизу:
+
+$3
+
+'''Примітка''': Якщо Ви не зробите цього зараз, цей файл не буде доступним пізніше, коли Ви вийдете з встановлення, не скачавши його.
+
+Після виконання дій, описаних вище, Ви зможете '''[$2 увійти у свою вікі]'''.",
+       'config-download-localsettings' => 'Завантажити <code>LocalSettings.php</code>',
        'config-help' => 'допомога',
+       'config-nofile' => 'Файл "$1" не знайдено. Його видалено?',
        'mainpagetext' => 'Програмне забезпечення «MediaWiki» успішно встановлене.',
-       'mainpagedocfooter' => 'Інформацію про роботу з цією вікі можна знайти в [//meta.wikimedia.org/wiki/%D0%9F%D0%BE%D0%BC%D0%BE%D1%89%D1%8C:%D0%A1%D0%BE%D0%B4%D0%B5%D1%80%D0%B6%D0%B0%D0%BD%D0%B8%D0%B5 посібнику користувача].
+       'mainpagedocfooter' => 'Інформацію про роботу з цією вікі можна знайти в [//meta.wikimedia.org/wiki/Help:Contents посібнику користувача].
 
 == Деякі корисні ресурси ==
 * [//www.mediawiki.org/wiki/Manual:Configuration_settings Список налаштувань];
 * [//www.mediawiki.org/wiki/Manual:FAQ Часті питання з приводу MediaWiki];
-* [https://lists.wikimedia.org/mailman/listinfo/mediawiki-announce Розсилка повідомлень про появу нових версій MediaWiki].',
+* [https://lists.wikimedia.org/mailman/listinfo/mediawiki-announce Розсилка повідомлень про появу нових версій MediaWiki];
+* [//www.mediawiki.org/wiki/Localisation#Translation_resources Локалізуйте MediaWiki своєю мовою]',
 );
 
 /** Urdu (اردو)
@@ -18382,27 +19826,30 @@ $messages['zea'] = array(
 );
 
 /** Simplified Chinese (中文(简体)‎)
+ * @author Anthony Fok
  * @author Hydra
  * @author Hzy980512
  * @author Liangent
  * @author PhiLiP
  * @author Xiaomingyan
  * @author Yfdyh000
+ * @author 乌拉跨氪
  * @author 阿pp
+ * @author 아라
  */
 $messages['zh-hans'] = array(
        'config-desc' => 'MediaWiki安装程序',
        'config-title' => 'MediaWiki $1配置',
        'config-information' => '信息',
-       'config-localsettings-upgrade' => '已检测到<code>LocalSettings.php</code>文件。要升级该配置,请在下面的框中输入<code>$wgUpgradeKey</code>的值。您可以在LocalSettings.php中找到它。',
-       'config-localsettings-cli-upgrade' => '已检测到LocalSettings.php文件。要升级该配置,请直接运行update.php。',
+       'config-localsettings-upgrade' => '已检测到<code>LocalSettings.php</code>文件。要升级该配置,请在下面的框中输入<code>$wgUpgradeKey</code>的值。您可以在<code>LocalSettings.php</code>中找到它。',
+       'config-localsettings-cli-upgrade' => '已检测到<code>LocalSettings.php</code>文件。要升级该配置,请直接运行<code>update.php</code>。',
        'config-localsettings-key' => '升级密钥:',
        'config-localsettings-badkey' => '您提供的密钥不正确。',
-       'config-upgrade-key-missing' => '检测到MediaWiki的配置已经存在。若要升级该配置,请将下面一行文本添加到LocalSettings.php的底部:
+       'config-upgrade-key-missing' => '检测到MediaWiki的配置已经存在。若要升级该配置,请将下面一行文本添加到<code>LocalSettings.php</code>的底部:
 
 $1',
-       'config-localsettings-incomplete' => '当前的LocalSettings.php可能并不完整,因为变量$1没有设置。请在LocalSettings.php设置该变量,并单击“继续”。',
-       'config-localsettings-connection-error' => '在使用LocalSettings.php或AdminSettings.php中指定的设置连接数据库时发生错误。请修复相应设置并重试。
+       'config-localsettings-incomplete' => '当前的<code>LocalSettings.php</code>可能并不完整,因为变量$1没有设置。请在<code>LocalSettings.php</code>设置该变量,并单击“{{int:Config-continue}}”。',
+       'config-localsettings-connection-error' => '在使用<code>LocalSettings.php</code>或<code>AdminSettings.php</code>中指定的设置连接数据库时发生错误。请修复相应设置并重试。
 
 $1',
        'config-session-error' => '启动会话出错:$1',
@@ -18457,7 +19904,8 @@ $1',
        'config-env-php-toolow' => '已安装PHP $1;但是,MediaWiki需要PHP $2或更高版本。',
        'config-unicode-using-utf8' => '使用Brion Vibber的utf8_normalize.so实现Unicode正常化。',
        'config-unicode-using-intl' => '使用[http://pecl.php.net/intl intl PECL扩展]实现Unicode正常化。',
-       'config-unicode-pure-php-warning' => "'''警告''':[http://pecl.php.net/intl intl PECL扩展]无法处理Unicode正常化,故只能退而采用运行较慢的纯PHP实现的方法。如果您运行着一个高流量的站点,请参阅[//www.mediawiki.org/wiki/Unicode_normalization_considerations Unicode正常化]一文。",
+       'config-unicode-pure-php-warning' => "'''警告''':因为尚未安装 [http://pecl.php.net/intl intl PECL 扩展]以处理 Unicode 正常化,故只能退而采用运行较慢的纯 PHP 实现的方法。
+如果您运行着一个高流量的站点,请参阅 [//www.mediawiki.org/wiki/Unicode_normalization_considerations Unicode 正常化]一文。",
        'config-unicode-update-warning' => "'''警告''':Unicode正常化封装器的已安装版本使用了旧版本的[http://site.icu-project.org/ ICU项目]库。如果您需要使用Unicode,请将其[//www.mediawiki.org/wiki/Unicode_normalization_considerations 升级]。",
        'config-no-db' => '找不到合适的数据库驱动!您需要为PHP安装数据库驱动。目前支持以下数据库:$1。
 
@@ -18498,7 +19946,7 @@ Object caching is not enabled.",
        'config-no-cli-uploads-check' => "'''警告''':在CLI安装过程中,没有对您的默认上传目录(<code>$1</code>)进行执行任意脚本的漏洞检查。",
        'config-brokenlibxml' => '您的系统安装的PHP和libxml2版本组合存在故障,并可能在MediaWiki和其他web应用程序中造成隐藏的数据损坏。请将PHP升级到5.2.9或以上,libxml2升级到2.7.3或以上([//bugs.php.net/bug.php?id=45996 PHP的故障报告])。安装已中断。',
        'config-using531' => '由于函数<code>__call()</code>的引用参数存在故障,PHP $1和MediaWiki无法兼容。请升级到PHP 5.3.2或更高版本,或降级到PHP 5.3.0以修复该问题。安装已中断。',
-       'config-suhosin-max-value-length' => 'Suhosin已经安装并将GET请求的参数长度限制在$1字节。MediaWiki的ResourceLoader部件可以在此限制下正常工作,但其性能会被降低。如果可能,请在php.ini中将suhosin.get.max_value_length设为1024或更高值,并在LocalSettings.php中将$wgResourceLoaderMaxQueryLength设为同一值。',
+       'config-suhosin-max-value-length' => 'Suhosin已经安装并将GET请求的参数长度限制在$1字节。MediaWiki的ResourceLoader部件可以在此限制下正常工作,但其性能会被降低。如果可能,请在<code>php.ini</code>中将<code>suhosin.get.max_value_length</code>设为1024或更高值,并在LocalSettings.php中将<code>$wgResourceLoaderMaxQueryLength</code>设为同一值。', # Fuzzy
        'config-db-type' => '数据库类型:',
        'config-db-host' => '数据库主机:',
        'config-db-host-help' => '如果您的数据库在别的服务器上,请在这里输入它的域名或IP地址。
@@ -18571,7 +20019,7 @@ $1
        'config-support-postgres' => '* $1是一种流行的开源数据库系统,可作为MySQL的替代([http://www.php.net/manual/en/pgsql.installation.php 如何将对PostgreSQL的支持编译进PHP中])。本程序中可能依然存在一些小而明显的错误,因此并不建议在生产环境中使用该数据库系统。',
        'config-support-sqlite' => '* $1是一种轻量级的数据库系统,能被良好地支持。([http://www.php.net/manual/en/pdo.installation.php 如何将对SQLite的支持编译进PHP中],须使用PDO)',
        'config-support-oracle' => '* $1是一种商用企业级的数据库。([http://www.php.net/manual/en/oci8.installation.php 如何将对OCI8的支持编译进PHP中])',
-       'config-support-ibm_db2' => '* $1是一种商用企业级数据库。',
+       'config-support-ibm_db2' => '* $1是一种商用企业级数据库。([http://www.php.net/manual/en/ibm-db2.installation.php 如何编译支持IBM DB2的PHP])',
        'config-header-mysql' => 'MySQL设置',
        'config-header-postgres' => 'PostgreSQL设置',
        'config-header-sqlite' => 'SQLite设置',
@@ -18624,8 +20072,8 @@ chmod a+w $3</pre>',
        'config-upgrade-done-no-regenerate' => '升级完成。
 
 现在您可以[$1 开始使用您的wiki]了。',
-       'config-regenerate' => '重新生成LocalSettings.php →',
-       'config-show-table-status' => 'SHOW TABLE STATUS语句执行失败!',
+       'config-regenerate' => '重新生成<code>LocalSettings.php</code> →',
+       'config-show-table-status' => '<code>SHOW TABLE STATUS</code>语句执行失败!',
        'config-unknown-collation' => "'''警告:'''数据库使用了无法识别的整理。",
        'config-db-web-account' => '供网页访问使用的数据库帐号',
        'config-db-web-help' => '请指定在wiki执行普通操作时,网页服务器用于连接数据库服务器的用户名和密码。',
@@ -18685,7 +20133,7 @@ chmod a+w $3</pre>',
        'config-optional-continue' => '多问我一些问题吧。',
        'config-optional-skip' => '我已经不耐烦了,赶紧安装我的wiki。',
        'config-profile' => '用户权限配置:',
-       'config-profile-wiki' => '传统wiki',
+       'config-profile-wiki' => '开放的wiki',
        'config-profile-no-anon' => '需要注册帐号',
        'config-profile-fishbowl' => '编辑受限',
        'config-profile-private' => '非公开wiki',
@@ -18762,7 +20210,7 @@ GNU自由文档许可证是维基百科曾经使用过的许可证,并迄今
 
 您可能要对它们进行额外的配置,但您现在可以启用它们。',
        'config-install-alreadydone' => "'''警告:'''您似乎已经安装了MediaWiki,并试图重新安装它。请前往下一个页面。",
-       'config-install-begin' => '点击“{{int:config-continue}}”后,您将开始安装MediaWiki。如果您还想对配置作一些修改,请点击后退。',
+       'config-install-begin' => '点击“{{int:config-continue}}”后,您将开始安装MediaWiki。如果您还想对配置作一些修改,请点击“{{int:config-back}}”。',
        'config-install-step-done' => '完成',
        'config-install-step-failed' => '失败',
        'config-install-extensions' => '正在启用扩展',
@@ -18813,7 +20261,7 @@ $3
 '''注意''':如果您现在不完成本步骤,而是没有下载便退出了安装过程,此后您将无法获得自动生成的配置文件。
 
 当本步骤完成后,您可以 '''[$2 进入您的wiki]'''。",
-       'config-download-localsettings' => '下载LocalSettings.php',
+       'config-download-localsettings' => '下载<code>LocalSettings.php</code>',
        'config-help' => '帮助',
        'config-nofile' => '找不到文件“$1”。它是否已被删除?',
        'mainpagetext' => "'''已成功安装MediaWiki。'''",
 == 入门 ==
 * [//www.mediawiki.org/wiki/Manual:Configuration_settings MediaWiki配置设置列表]
 * [//www.mediawiki.org/wiki/Manual:FAQ/zh-hans MediaWiki常见问题]
-* [https://lists.wikimedia.org/mailman/listinfo/mediawiki-announce MediaWiki发布邮件列表]',
+* [https://lists.wikimedia.org/mailman/listinfo/mediawiki-announce MediaWiki发布邮件列表]
+* [//www.mediawiki.org/wiki/Localisation#Translation_resources 本地化MediaWiki到您的语言]',
 );
 
 /** Traditional Chinese (中文(繁體)‎)
+ * @author Anthony Fok
  * @author Hzy980512
  * @author Liangent
  * @author Mark85296341
+ * @author Simon Shek
+ * @author 아라
  */
 $messages['zh-hant'] = array(
        'config-desc' => 'MediaWiki安裝程序',
        'config-title' => 'MediaWiki $1配置',
        'config-information' => '資訊',
-       'config-localsettings-upgrade' => '已檢測到<code>LocalSettings.php</code>文件。要升級該配置,請在下面的框中輸入<code>$wgUpgradeKey</code>的值。您可以在LocalSettings.php中找到它。',
-       'config-localsettings-cli-upgrade' => '已檢測到LocalSettings.php文件。要升級該配置,請直接執行update.php。',
+       'config-localsettings-upgrade' => '已檢測到<code>LocalSettings.php</code>文件。要升級該配置,請在下面的框中輸入<code>$wgUpgradeKey</code>的值。您可以在<code>LocalSettings.php</code>中找到它。',
+       'config-localsettings-cli-upgrade' => '已檢測到<code>LocalSettings.php</code>文件。要升級該配置,請直接執行<code>update.php</code>。',
        'config-localsettings-key' => '升級密鑰:',
        'config-localsettings-badkey' => '您提供的密鑰不正確。',
-       'config-upgrade-key-missing' => '檢測到MediaWiki的配置已經存在。若要升級該配置,請將下面一行文本添加到LocalSettings.php的底部:
+       'config-upgrade-key-missing' => '檢測到MediaWiki的配置已經存在。若要升級該配置,請將下面一行文本添加到<code>LocalSettings.php</code>的底部:
 
 $1',
-       'config-localsettings-incomplete' => '當前的LocalSettings.php可能並不完整,因為變量$1沒有設置。請在LocalSettings.php設置該變量,並單擊“繼續”。',
-       'config-localsettings-connection-error' => '在使用LocalSettings.php或AdminSettings.php中指定的設置連接數據庫時發生錯誤。請修復相應設置並重試。
+       'config-localsettings-incomplete' => '當前的<code>LocalSettings.php</code>可能並不完整,因為變量$1沒有設置。請在<code>LocalSettings.php</code>設置該變量,並單擊“{{int:Config-continue}}”。',
+       'config-localsettings-connection-error' => '在使用<code>LocalSettings.php</code>或<code>AdminSettings.php</code>中指定的設置連接數據庫時發生錯誤。請修復相應設置並重試。
 
 $1',
        'config-session-error' => '啟動會話出錯:$1',
@@ -18893,11 +20345,11 @@ $1',
 * <doclink href=UpgradeDoc>升級</doclink>',
        'config-env-good' => '環境檢查已經完成。您可以安裝MediaWiki。',
        'config-env-bad' => '環境檢查已經完成。您不能安裝MediaWiki。',
-       'config-env-php' => 'PHP $1已安裝。',
-       'config-env-php-toolow' => '已安裝PHP $1;但是,MediaWiki需要PHP $2或更高版本。',
-       'config-unicode-using-utf8' => '使用Brion Vibber的utf8_normalize.so實現Unicode正常化。',
-       'config-unicode-using-intl' => '使用[http://pecl.php.net/intl intl PECL擴展]實現Unicode正常化。',
-       'config-unicode-pure-php-warning' => "'''警告''':[http://pecl.php.net/intl intl PECL擴展]無法處理Unicode正常化,故只能退而採用運行較慢的純PHP實現的方法。如果您運行着一個高流量的站點,請參閱[//www.mediawiki.org/wiki/Unicode_normalization_considerations Unicode正常化]一文。",
+       'config-env-php' => 'PHP $1 已安裝。',
+       'config-env-php-toolow' => '已安裝 PHP $1;但是,MediaWiki 需要 PHP $2 或更高版本。',
+       'config-unicode-using-utf8' => '將使用 Brion Vibber 的 utf8_normalize.so 以實作 Unicode 正規化。',
+       'config-unicode-using-intl' => '將使用 [http://pecl.php.net/intl intl PECL 延伸函式庫]以實作 Unicode 正規化。',
+       'config-unicode-pure-php-warning' => "'''警告''':因為尚未安裝 [http://pecl.php.net/intl intl PECL 延伸函式庫]以處理 Unicode 正規化,故只能退而採用較慢的純 PHP 實作。如果您運行着一個高流量的網站,請參閱 [//www.mediawiki.org/wiki/Unicode_normalization_considerations Unicode 正規化]一文。",
        'config-unicode-update-warning' => "'''警告''':Unicode正常化封裝器的已安裝版本使用了舊版本的[http://site.icu-project.org/ ICU項目]庫。如果您需要使用Unicode,請將其[//www.mediawiki.org/wiki/Unicode_normalization_considerations 升級]。",
        'config-no-db' => '找不到合適的數據庫驅動!您需要為PHP安裝數據庫驅動。目前支持以下數據庫:$1。
 
@@ -18938,7 +20390,7 @@ Object caching is not enabled.",
        'config-no-cli-uploads-check' => "'''警告''':在CLI安裝過程中,沒有對您的默認上傳目錄(<code>$1</code>)進行執行任意腳本的漏洞檢查。",
        'config-brokenlibxml' => '您的系統安裝的PHP和libxml2版本組合存在故障,並可能在MediaWiki和其他web應用程序中造成隱藏的數據損壞。請將PHP升級到5.2.9或以上,libxml2升級到2.7.3或以上([//bugs.php.net/bug.php?id=45996 PHP的故障報告])。安裝已中斷。',
        'config-using531' => '由於函數<code>__call()</code>的引用參數存在故障,PHP $1和MediaWiki無法兼容。請升級到PHP 5.3.2或更高版本,或降級到PHP 5.3.0以修復該問題。安裝已中斷。',
-       'config-suhosin-max-value-length' => 'Suhosin已經安裝並將GET請求的參數長度限制在$1字節。MediaWiki的ResourceLoader部件可以在此限制下正常工作,但其性能會被降低。如果可能,請在php.ini中將suhosin.get.max_value_length設為1024或更高值,並在LocalSettings.php中將$wgResourceLoaderMaxQueryLength設為同一值。',
+       'config-suhosin-max-value-length' => 'Suhosin已經安裝並將GET請求的參數長度限制在$1字節。MediaWiki的ResourceLoader部件可以在此限制下正常工作,但其性能會被降低。如果可能,請在<code>php.ini</code>中將<code>suhosin.get.max_value_length</code>設為1024或更高值,並在LocalSettings.php中將<code>$wgResourceLoaderMaxQueryLength</code>設為同一值。', # Fuzzy
        'config-db-type' => '資料庫類型:',
        'config-db-host' => '資料庫主機:',
        'config-db-host-help' => '如果您的數據庫在別的服務器上,請在這裡輸入它的域名或IP地址。
@@ -19011,7 +20463,7 @@ $1
        'config-support-postgres' => '* $1是一種流行的開源數據庫系統,可作為MySQL的替代([http://www.php.net/manual/en/pgsql.installation.php 如何將對PostgreSQL的支持編譯進PHP中])。本程序中可能依然存在一些小而明顯的錯誤,因此並不建議在生產環境中使用該數據庫系統。',
        'config-support-sqlite' => '* $1是一種輕量級的數據庫系統,能被良好地支持。([http://www.php.net/manual/en/pdo.installation.php 如何將對SQLite的支持編譯進PHP中],須使用PDO)',
        'config-support-oracle' => '* $1是一種商用企業級的數據庫。([http://www.php.net/manual/en/oci8.installation.php 如何將對OCI8的支持編譯進PHP中])',
-       'config-support-ibm_db2' => '* $1是一種商用企業級數據庫。',
+       'config-support-ibm_db2' => '* $1是一種商用企業級數據庫。', # Fuzzy
        'config-header-mysql' => 'MySQL 的設定',
        'config-header-postgres' => 'PostgreSQL設置',
        'config-header-sqlite' => 'SQLite 的設定',
@@ -19064,8 +20516,8 @@ chmod a+w $3</pre>',
        'config-upgrade-done-no-regenerate' => '升級完成。
 
 現在您可以[$1 開始使用您的wiki]了。',
-       'config-regenerate' => '重新生成LocalSettings.php →',
-       'config-show-table-status' => '查詢SHOW TABLE STATUS失敗!',
+       'config-regenerate' => '重新生成<code>LocalSettings.php</code> →',
+       'config-show-table-status' => '查詢<code>SHOW TABLE STATUS</code>失敗!',
        'config-unknown-collation' => "'''警告:'''數據庫使用了無法識別的整理。",
        'config-db-web-account' => '供網頁訪問使用的數據庫帳號',
        'config-db-web-help' => '請指定在wiki執行普通操作時,網頁服務器用於連接數據庫服務器的用戶名和密碼。',
@@ -19113,7 +20565,7 @@ chmod a+w $3</pre>',
        'config-admin-password-blank' => '輸入管理員帳號密碼。',
        'config-admin-password-same' => '密碼不能與使用者名稱相同。',
        'config-admin-password-mismatch' => '兩次輸入的密碼並不相同。',
-       'config-admin-email' => 'E-mail 地址:',
+       'config-admin-email' => '電郵地址:',
        'config-admin-email-help' => '輸入電子郵件地址後,您可以收到此wiki上其他用戶發來的電子郵件,並能重置您的密碼,還可在監視列表中頁面被更改時收到郵件通知。您可以將此字段留空。',
        'config-admin-error-user' => '在創建用戶名為“<nowiki>$1</nowiki>”的管理員帳號時發生內部錯誤。',
        'config-admin-error-password' => '在為管理員“<nowiki>$1</nowiki>”設置密碼時發生內部錯誤:<pre>$2</pre>',
@@ -19125,7 +20577,7 @@ chmod a+w $3</pre>',
        'config-optional-continue' => '多問我一些問題吧。',
        'config-optional-skip' => '我已經不耐煩了,趕緊安裝我的wiki。',
        'config-profile' => '用戶權限配置:',
-       'config-profile-wiki' => '傳統wiki',
+       'config-profile-wiki' => '傳統wiki', # Fuzzy
        'config-profile-no-anon' => '需要註冊帳號',
        'config-profile-fishbowl' => '編輯受限',
        'config-profile-private' => '非公開wiki',
@@ -19137,7 +20589,7 @@ chmod a+w $3</pre>',
 
 '''{{int:config-profile-fishbowl}}'''模式只允許獲批准的用戶編輯,但對公眾開放頁面瀏覽(包括歷史記錄)。'''{{int:config-profile-private}}'''則只允許獲批准的用戶瀏覽、編輯頁面。
 
-安裝完成後,您還可以對用戶權限進行更多、更複雜的配置,參見[//www.mediawiki.org/wiki/Manual:User_rights 相關的使用手冊]。",
+安裝完成後,您還可以對用戶權限進行更多、更複雜的配置,參見[//www.mediawiki.org/wiki/Manual:User_rights 相關的使用手冊]。", # Fuzzy
        'config-license' => '版權和許可證:',
        'config-license-none' => '頁腳無許可證',
        'config-license-cc-by-sa' => '知識共享署名-相同方式分享',
@@ -19202,7 +20654,7 @@ GNU自由文檔許可證是維基百科曾經使用過的許可證,並迄今
 
 您可能要對它們進行額外的配置,但您現在可以啟用它們。',
        'config-install-alreadydone' => "'''警告:'''您似乎已經安裝了MediaWiki,並試圖重新安裝它。請前往下一個頁面。",
-       'config-install-begin' => '點擊“{{int:config-continue}}”後,您將開始安裝MediaWiki。如果您還想對配置作一些修改,請點擊後退。',
+       'config-install-begin' => '點擊“{{int:config-continue}}”後,您將開始安裝MediaWiki。如果您還想對配置作一些修改,請點擊後退。', # Fuzzy
        'config-install-step-done' => '完成',
        'config-install-step-failed' => '失敗',
        'config-install-extensions' => '正在啟用擴展',
@@ -19253,7 +20705,7 @@ $3
 '''注意''':如果您現在不完成本步驟,而是沒有下載便退出了安裝過程,此後您將無法獲得自動生成的配置文件。
 
 當本步驟完成後,您可以 '''[$2 進入您的wiki]'''。",
-       'config-download-localsettings' => '下載LocalSettings.php',
+       'config-download-localsettings' => '下載<code>LocalSettings.php</code>',
        'config-help' => '說明',
        'mainpagetext' => "'''已成功安裝MediaWiki。'''",
        'mainpagedocfooter' => '請參閱[//meta.wikimedia.org/wiki/Help:Contents 用戶手冊]以獲得使用此wiki軟體的訊息!
@@ -19261,7 +20713,8 @@ $3
 == 入門 ==
 * [//www.mediawiki.org/wiki/Manual:Configuration_settings MediaWiki配置設定清單]
 * [//www.mediawiki.org/wiki/Manual:FAQ MediaWiki常見問題解答]
-* [https://lists.wikimedia.org/mailman/listinfo/mediawiki-announce MediaWiki發佈郵件清單]',
+* [https://lists.wikimedia.org/mailman/listinfo/mediawiki-announce MediaWiki發佈郵件清單]
+* [//www.mediawiki.org/wiki/Localisation#Translation_resources MediaWiki界面本地化]',
 );
 
 /** Chinese (Hong Kong) (‪中文(香港)‬)
index c673f6f..325f894 100644 (file)
@@ -313,19 +313,19 @@ abstract class Installer {
         * output format such as HTML or text before being sent to the user.
         * @param $msg
         */
-       public abstract function showMessage( $msg /*, ... */ );
+       abstract public function showMessage( $msg /*, ... */ );
 
        /**
         * Same as showMessage(), but for displaying errors
         * @param $msg
         */
-       public abstract function showError( $msg /*, ... */ );
+       abstract public function showError( $msg /*, ... */ );
 
        /**
         * Show a message to the installing user by using a Status object
         * @param $status Status
         */
-       public abstract function showStatusMessage( Status $status );
+       abstract public function showStatusMessage( Status $status );
 
        /**
         * Constructor, always call this from child classes.
@@ -488,7 +488,7 @@ abstract class Installer {
                if( !$_lsExists ) {
                        return false;
                }
-               unset($_lsExists);
+               unset( $_lsExists );
 
                require( "$IP/includes/DefaultSettings.php" );
                require( "$IP/LocalSettings.php" );
@@ -927,7 +927,7 @@ abstract class Installer {
         * Helper function to be called from envCheckServer()
         * @return String
         */
-       protected abstract function envGetDefaultServer();
+       abstract protected function envGetDefaultServer();
 
        /**
         * Environment check for setting $IP and $wgScriptPath.
@@ -1073,18 +1073,18 @@ abstract class Installer {
         * @return string
         */
        protected function unicodeChar( $c ) {
-               $c = hexdec($c);
-               if ($c <= 0x7F) {
-                       return chr($c);
-               } elseif ($c <= 0x7FF) {
-                       return chr(0xC0 | $c >> 6) . chr(0x80 | $c & 0x3F);
-               } elseif ($c <= 0xFFFF) {
-                       return chr(0xE0 | $c >> 12) . chr(0x80 | $c >> 6 & 0x3F)
-                               . chr(0x80 | $c & 0x3F);
-               } elseif ($c <= 0x10FFFF) {
-                       return chr(0xF0 | $c >> 18) . chr(0x80 | $c >> 12 & 0x3F)
-                               . chr(0x80 | $c >> 6 & 0x3F)
-                               . chr(0x80 | $c & 0x3F);
+               $c = hexdec( $c );
+               if ( $c <= 0x7F ) {
+                       return chr( $c );
+               } elseif ( $c <= 0x7FF ) {
+                       return chr( 0xC0 | $c >> 6 ) . chr( 0x80 | $c & 0x3F );
+               } elseif ( $c <= 0xFFFF ) {
+                       return chr( 0xE0 | $c >> 12 ) . chr( 0x80 | $c >> 6 & 0x3F )
+                               . chr( 0x80 | $c & 0x3F );
+               } elseif ( $c <= 0x10FFFF ) {
+                       return chr( 0xF0 | $c >> 18 ) . chr( 0x80 | $c >> 12 & 0x3F )
+                               . chr( 0x80 | $c >> 6 & 0x3F )
+                               . chr( 0x80 | $c & 0x3F );
                } else {
                        return false;
                }
@@ -1105,8 +1105,8 @@ abstract class Installer {
                 * Note that we use the hex representation to create the code
                 * points in order to avoid any Unicode-destroying during transit.
                 */
-               $not_normal_c = $this->unicodeChar("FA6C");
-               $normal_c = $this->unicodeChar("242EE");
+               $not_normal_c = $this->unicodeChar( "FA6C" );
+               $normal_c = $this->unicodeChar( "242EE" );
 
                $useNormalizer = 'php';
                $needsUpdate = false;
index f66f15f..4eb2d39 100644 (file)
@@ -107,7 +107,7 @@ class MysqlInstaller extends DatabaseInstaller {
                }
                if ( !strlen( $newValues['wgDBname'] ) ) {
                        $status->fatal( 'config-missing-db-name' );
-               } elseif ( !preg_match( '/^[a-z0-9_-]+$/i', $newValues['wgDBname'] ) ) {
+               } elseif ( !preg_match( '/^[a-z0-9+_-]+$/i', $newValues['wgDBname'] ) ) {
                        $status->fatal( 'config-invalid-db-name', $newValues['wgDBname'] );
                }
                if ( !preg_match( '/^[a-z0-9_-]*$/i', $newValues['wgDBprefix'] ) ) {
@@ -516,7 +516,8 @@ class MysqlInstaller extends DatabaseInstaller {
                }
 
                if( $tryToCreate ) {
-                       $createHostList = array($server,
+                       $createHostList = array(
+                               $server,
                                'localhost',
                                'localhost.localdomain',
                                '%'
index bbeb685..a19637e 100644 (file)
@@ -203,10 +203,8 @@ class MysqlUpdater extends DatabaseUpdater {
                        array( 'addField', 'revision',      'rev_sha1',         'patch-rev_sha1.sql' ),
                        array( 'addField', 'archive',       'ar_sha1',          'patch-ar_sha1.sql' ),
                        array( 'addIndex', 'page', 'page_redirect_namespace_len', 'patch-page_redirect_namespace_len.sql' ),
-                       array( 'modifyField', 'user_groups', 'ug_group', 'patch-ug_group-length-increase.sql' ),
                        array( 'addField',      'uploadstash',  'us_chunk_inx',         'patch-uploadstash_chunk.sql' ),
                        array( 'addfield', 'job',           'job_timestamp',    'patch-jobs-add-timestamp.sql' ),
-                       array( 'modifyField', 'user_former_groups', 'ufg_group', 'patch-ufg_group-length-increase.sql' ),
 
                        // 1.20
                        array( 'addIndex', 'revision', 'page_user_timestamp', 'patch-revision-user-page-index.sql' ),
@@ -228,6 +226,8 @@ class MysqlUpdater extends DatabaseUpdater {
                        array( 'addField', 'job',           'job_attempts',       'patch-job_attempts.sql' ),
                        array( 'doEnableProfiling' ),
                        array( 'addField', 'uploadstash',      'us_props',      'patch-uploadstash-us_props.sql' ),
+                       array( 'modifyField', 'user_groups', 'ug_group', 'patch-ug_group-length-increase-255.sql' ),
+                       array( 'modifyField', 'user_former_groups', 'ufg_group', 'patch-ufg_group-length-increase-255.sql' ),
                );
        }
 
@@ -240,6 +240,10 @@ class MysqlUpdater extends DatabaseUpdater {
         * @param $patchFile String: path to the patch to correct the field
         */
        protected function checkBin( $table, $field, $patchFile ) {
+               if ( !$this->doTable( $table ) ) {
+                       return true;
+               }
+
                $tableName = $this->db->tableName( $table );
                $res = $this->db->query( "SELECT $field FROM $tableName LIMIT 0", __METHOD__ );
                $flags = explode( ' ', mysql_field_flags( $res->result, 0 ) );
@@ -260,6 +264,10 @@ class MysqlUpdater extends DatabaseUpdater {
         * @return Boolean
         */
        protected function indexHasField( $table, $index, $field ) {
+               if ( !$this->doTable( $table ) ) {
+                       return true;
+               }
+
                $info = $this->db->indexInfo( $table, $index, __METHOD__ );
                if ( $info ) {
                        foreach ( $info as $row ) {
@@ -279,6 +287,10 @@ class MysqlUpdater extends DatabaseUpdater {
        protected function doInterwikiUpdate() {
                global $IP;
 
+               if ( !$this->doTable( 'interwiki' ) ) {
+                       return true;
+               }
+
                if ( $this->db->tableExists( "interwiki", __METHOD__ ) ) {
                        $this->output( "...already have interwiki table\n" );
                        return;
@@ -317,7 +329,7 @@ class MysqlUpdater extends DatabaseUpdater {
                }
 
                if( $this->applyPatch( 'patch-fix-il_from.sql', false, "Fixing ancient broken imagelinks table." ) ) {
-                       $this->output("NOTE: you will have to run maintenance/refreshLinks.php after this." );
+                       $this->output( "NOTE: you will have to run maintenance/refreshLinks.php after this." );
                }
        }
 
@@ -567,6 +579,10 @@ class MysqlUpdater extends DatabaseUpdater {
        }
 
        protected function doUserUniqueUpdate() {
+               if ( !$this->doTable( 'user' ) ) {
+                       return true;
+               }
+
                $duper = new UserDupes( $this->db, array( $this, 'output' ) );
                if ( $duper->hasUniqueIndex() ) {
                        $this->output( "...already have unique user_name index.\n" );
@@ -580,6 +596,10 @@ class MysqlUpdater extends DatabaseUpdater {
        }
 
        protected function doUserGroupsUpdate() {
+               if ( !$this->doTable( 'user_groups' ) ) {
+                       return true;
+               }
+
                if ( $this->db->tableExists( 'user_groups', __METHOD__ ) ) {
                        $info = $this->db->fieldInfo( 'user_groups', 'ug_group' );
                        if ( $info->type() == 'int' ) {
@@ -779,12 +799,21 @@ class MysqlUpdater extends DatabaseUpdater {
 
        protected function doEnableProfiling() {
                global $wgProfileToDatabase;
+
+               if ( !$this->doTable( 'profiling' ) ) {
+                       return true;
+               }
+
                if ( $wgProfileToDatabase === true && ! $this->db->tableExists( 'profiling', __METHOD__ ) ) {
                        $this->applyPatch( 'patch-profiling.sql', false, 'Add profiling table' );
                }
        }
 
        protected function doMaybeProfilingMemoryUpdate() {
+               if ( !$this->doTable( 'profiling' ) ) {
+                       return true;
+               }
+
                if ( !$this->db->tableExists( 'profiling', __METHOD__ ) ) {
                        return true;
                } elseif ( $this->db->fieldExists( 'profiling', 'pf_memory', __METHOD__ ) ) {
@@ -856,6 +885,10 @@ class MysqlUpdater extends DatabaseUpdater {
        }
 
        protected function doUserNewTalkTimestampNotNull() {
+               if ( !$this->doTable( 'user_newtalk' ) ) {
+                       return true;
+               }
+
                $info = $this->db->fieldInfo( 'user_newtalk', 'user_last_timestamp' );
                if ( $info === false ) {
                        return;
index 845816e..4c72a8f 100644 (file)
@@ -119,7 +119,7 @@ class OracleInstaller extends DatabaseInstaller {
                                        return $status;
                                }
                                if ( !$this->getVar( '_CreateDBAccount' ) ) {
-                                       $status->fatal('config-db-sys-create-oracle');
+                                       $status->fatal( 'config-db-sys-create-oracle' );
                                }
                        } else {
                                return $status;
@@ -241,7 +241,7 @@ class OracleInstaller extends DatabaseInstaller {
                        $status->fatal( 'config-db-sys-user-exists-oracle', $this->getVar( 'wgDBuser' ) );
                }
 
-               if ($status->isOK()) {
+               if ( $status->isOK() ) {
                        // user created or already existing, switching back to a normal connection
                        // as the new user has all needed privileges to setup the rest of the schema
                        // i will be using that user as _InstallUser from this point on
index 5523470..cafe8cd 100644 (file)
@@ -59,12 +59,10 @@ class OracleUpdater extends DatabaseUpdater {
                        array( 'addField', 'archive', 'ar_sha1', 'patch-ar_sha1_field.sql' ),
                        array( 'doRemoveNotNullEmptyDefaults2' ),
                        array( 'addIndex', 'page', 'i03', 'patch-page_redirect_namespace_len.sql' ),
-                       array( 'modifyField', 'user_groups', 'ug_group', 'patch-ug_group-length-increase.sql' ),
                        array( 'addField', 'uploadstash', 'us_chunk_inx', 'patch-us_chunk_inx_field.sql' ),
                        array( 'addField', 'job', 'job_timestamp', 'patch-job_timestamp_field.sql' ),
                        array( 'addIndex', 'job', 'i02', 'patch-job_timestamp_index.sql' ),
                        array( 'doPageRestrictionsPKUKFix' ),
-                       array( 'modifyField', 'user_former_groups', 'ufg_group', 'patch-ufg_group-length-increase.sql' ),
 
                        //1.20
                        array( 'addIndex', 'ipblocks', 'i05', 'patch-ipblocks_i05_index.sql' ),
@@ -79,6 +77,13 @@ class OracleUpdater extends DatabaseUpdater {
                        array( 'addField',      'page',     'page_content_model',               'patch-page-page_content_model.sql' ),
                        array( 'dropField', 'site_stats', 'ss_admins',  'patch-ss_admins.sql' ),
                        array( 'dropField', 'recentchanges', 'rc_moved_to_title', 'patch-rc_moved.sql' ),
+                       array( 'addTable', 'sites',                            'patch-sites.sql' ),
+                       array( 'addField', 'filearchive',   'fa_sha1',          'patch-fa_sha1.sql' ),
+                       array( 'addField', 'job',           'job_token',         'patch-job_token.sql' ),
+                       array( 'addField', 'job',           'job_attempts',       'patch-job_attempts.sql' ),
+                       array( 'addField', 'uploadstash',      'us_props',      'patch-uploadstash-us_props.sql' ),
+                       array( 'modifyField', 'user_groups', 'ug_group', 'patch-ug_group-length-increase-255.sql' ),
+                       array( 'modifyField', 'user_former_groups', 'ufg_group', 'patch-ufg_group-length-increase-255.sql' ),
 
                        // KEEP THIS AT THE BOTTOM!!
                        array( 'doRebuildDuplicateFunction' ),
@@ -158,7 +163,7 @@ class OracleUpdater extends DatabaseUpdater {
         * converted to NULL in Oracle
         */
        protected function doRemoveNotNullEmptyDefaults() {
-               $meta = $this->db->fieldInfo( 'categorylinks' , 'cl_sortkey_prefix' );
+               $meta = $this->db->fieldInfo( 'categorylinks', 'cl_sortkey_prefix' );
                if ( $meta->isNullable() ) {
                        return;
                }
@@ -166,7 +171,7 @@ class OracleUpdater extends DatabaseUpdater {
        }
 
        protected function doRemoveNotNullEmptyDefaults2() {
-               $meta = $this->db->fieldInfo( 'ipblocks' , 'ipb_by_text' );
+               $meta = $this->db->fieldInfo( 'ipblocks', 'ipb_by_text' );
                if ( $meta->isNullable() ) {
                        return;
                }
@@ -225,7 +230,7 @@ class OracleUpdater extends DatabaseUpdater {
        /**
         * Overload: because of the DDL_MODE tablename escaping is a bit dodgy
         */
-       protected function purgeCache() {
+       public function purgeCache() {
                # We can't guarantee that the user will be able to use TRUNCATE,
                # but we know that DELETE is available to us
                $this->output( "Purging caches..." );
index 5a13d42..643459f 100644 (file)
@@ -90,6 +90,7 @@ class PostgresUpdater extends DatabaseUpdater {
                        array( 'addTable', 'uploadstash',       'patch-uploadstash.sql' ),
                        array( 'addTable', 'user_former_groups','patch-user_former_groups.sql' ),
                        array( 'addTable', 'external_user',     'patch-external_user.sql' ),
+                       array( 'addTable', 'sites',             'patch-sites.sql' ),
 
                        # Needed before new field
                        array( 'convertArchive2' ),
@@ -155,6 +156,7 @@ class PostgresUpdater extends DatabaseUpdater {
                        array( 'addPgField', 'uploadstash',   'us_chunk_inx',         "INTEGER NULL" ),
                        array( 'addPgField', 'job',           'job_timestamp',        "TIMESTAMPTZ" ),
                        array( 'addPgField', 'job',           'job_random',           "INTEGER NOT NULL DEFAULT 0" ),
+                       array( 'addPgField', 'job',           'job_attempts',         "INTEGER NOT NULL DEFAULT 0" ),
                        array( 'addPgField', 'job',           'job_token',            "TEXT NOT NULL DEFAULT ''" ),
                        array( 'addPgField', 'job',           'job_token_timestamp',  "TIMESTAMPTZ" ),
                        array( 'addPgField', 'job',           'job_sha1',             "TEXT NOT NULL DEFAULT ''" ),
@@ -233,65 +235,66 @@ class PostgresUpdater extends DatabaseUpdater {
                        array( 'addPgIndex', 'job',           'job_timestamp_idx',      '(job_timestamp)' ),
                        array( 'addPgIndex', 'job',           'job_sha1',               '(job_sha1)' ),
                        array( 'addPgIndex', 'job',           'job_cmd_token',          '(job_cmd, job_token, job_random)' ),
+                       array( 'addPgIndex', 'job',           'job_cmd_token_id',       '(job_cmd, job_token, job_id)' ),
                        array( 'addPgIndex', 'filearchive',   'fa_sha1',                '(fa_sha1)' ),
 
                        array( 'checkIndex', 'pagelink_unique', array(
-                               array('pl_from', 'int4_ops', 'btree', 0),
-                               array('pl_namespace', 'int2_ops', 'btree', 0),
-                               array('pl_title', 'text_ops', 'btree', 0),
+                               array( 'pl_from', 'int4_ops', 'btree', 0 ),
+                               array( 'pl_namespace', 'int2_ops', 'btree', 0 ),
+                               array( 'pl_title', 'text_ops', 'btree', 0 ),
                        ),
                        'CREATE UNIQUE INDEX pagelink_unique ON pagelinks (pl_from,pl_namespace,pl_title)' ),
                        array( 'checkIndex', 'cl_sortkey', array(
-                               array('cl_to', 'text_ops', 'btree', 0),
-                               array('cl_sortkey', 'text_ops', 'btree', 0),
-                               array('cl_from', 'int4_ops', 'btree', 0),
+                               array( 'cl_to', 'text_ops', 'btree', 0 ),
+                               array( 'cl_sortkey', 'text_ops', 'btree', 0 ),
+                               array( 'cl_from', 'int4_ops', 'btree', 0 ),
                        ),
                        'CREATE INDEX cl_sortkey ON "categorylinks" USING "btree" ("cl_to", "cl_sortkey", "cl_from")' ),
                        array( 'checkIndex', 'logging_times', array(
-                               array('log_timestamp', 'timestamptz_ops', 'btree', 0),
+                               array( 'log_timestamp', 'timestamptz_ops', 'btree', 0 ),
                        ),
                        'CREATE INDEX "logging_times" ON "logging" USING "btree" ("log_timestamp")' ),
                        array( 'dropIndex', 'oldimage', 'oi_name' ),
                        array( 'checkIndex', 'oi_name_archive_name', array(
-                               array('oi_name', 'text_ops', 'btree', 0),
-                               array('oi_archive_name', 'text_ops', 'btree', 0),
+                               array( 'oi_name', 'text_ops', 'btree', 0 ),
+                               array( 'oi_archive_name', 'text_ops', 'btree', 0 ),
                        ),
                        'CREATE INDEX "oi_name_archive_name" ON "oldimage" USING "btree" ("oi_name", "oi_archive_name")' ),
                        array( 'checkIndex', 'oi_name_timestamp', array(
-                               array('oi_name', 'text_ops', 'btree', 0),
-                               array('oi_timestamp', 'timestamptz_ops', 'btree', 0),
+                               array( 'oi_name', 'text_ops', 'btree', 0 ),
+                               array( 'oi_timestamp', 'timestamptz_ops', 'btree', 0 ),
                        ),
                        'CREATE INDEX "oi_name_timestamp" ON "oldimage" USING "btree" ("oi_name", "oi_timestamp")' ),
                        array( 'checkIndex', 'page_main_title', array(
-                               array('page_title', 'text_pattern_ops', 'btree', 0),
+                               array( 'page_title', 'text_pattern_ops', 'btree', 0 ),
                        ),
                        'CREATE INDEX "page_main_title" ON "page" USING "btree" ("page_title" "text_pattern_ops") WHERE ("page_namespace" = 0)' ),
                        array( 'checkIndex', 'page_mediawiki_title', array(
-                               array('page_title', 'text_pattern_ops', 'btree', 0),
+                               array( 'page_title', 'text_pattern_ops', 'btree', 0 ),
                        ),
                        'CREATE INDEX "page_mediawiki_title" ON "page" USING "btree" ("page_title" "text_pattern_ops") WHERE ("page_namespace" = 8)' ),
                        array( 'checkIndex', 'page_project_title', array(
-                               array('page_title', 'text_pattern_ops', 'btree', 0),
+                               array( 'page_title', 'text_pattern_ops', 'btree', 0 ),
                        ),
                        'CREATE INDEX "page_project_title" ON "page" USING "btree" ("page_title" "text_pattern_ops") WHERE ("page_namespace" = 4)' ),
                        array( 'checkIndex', 'page_talk_title', array(
-                               array('page_title', 'text_pattern_ops', 'btree', 0),
+                               array( 'page_title', 'text_pattern_ops', 'btree', 0 ),
                        ),
                        'CREATE INDEX "page_talk_title" ON "page" USING "btree" ("page_title" "text_pattern_ops") WHERE ("page_namespace" = 1)' ),
                        array( 'checkIndex', 'page_user_title', array(
-                               array('page_title', 'text_pattern_ops', 'btree', 0),
+                               array( 'page_title', 'text_pattern_ops', 'btree', 0 ),
                        ),
                        'CREATE INDEX "page_user_title" ON "page" USING "btree" ("page_title" "text_pattern_ops") WHERE ("page_namespace" = 2)' ),
                        array( 'checkIndex', 'page_utalk_title', array(
-                               array('page_title', 'text_pattern_ops', 'btree', 0),
+                               array( 'page_title', 'text_pattern_ops', 'btree', 0 ),
                        ),
                        'CREATE INDEX "page_utalk_title" ON "page" USING "btree" ("page_title" "text_pattern_ops") WHERE ("page_namespace" = 3)' ),
                        array( 'checkIndex', 'ts2_page_text', array(
-                               array('textvector', 'tsvector_ops', 'gist', 0),
+                               array( 'textvector', 'tsvector_ops', 'gist', 0 ),
                        ),
                        'CREATE INDEX "ts2_page_text" ON "pagecontent" USING "gist" ("textvector")' ),
                        array( 'checkIndex', 'ts2_page_title', array(
-                               array('titlevector', 'tsvector_ops', 'gist', 0),
+                               array( 'titlevector', 'tsvector_ops', 'gist', 0 ),
                        ),
                        'CREATE INDEX "ts2_page_title" ON "page" USING "gist" ("titlevector")' ),
 
@@ -300,10 +303,10 @@ class PostgresUpdater extends DatabaseUpdater {
                        array( 'checkRevUserFkey' ),
                        array( 'dropIndex', 'ipblocks', 'ipb_address'),
                        array( 'checkIndex', 'ipb_address_unique', array(
-                               array('ipb_address', 'text_ops', 'btree', 0),
-                               array('ipb_user',    'int4_ops', 'btree', 0),
-                               array('ipb_auto',    'int2_ops', 'btree', 0),
-                               array('ipb_anon_only', 'int2_ops', 'btree', 0),
+                               array( 'ipb_address', 'text_ops', 'btree', 0 ),
+                               array( 'ipb_user',    'int4_ops', 'btree', 0 ),
+                               array( 'ipb_auto',    'int2_ops', 'btree', 0 ),
+                               array( 'ipb_anon_only', 'int2_ops', 'btree', 0 ),
                        ),
                        'CREATE UNIQUE INDEX ipb_address_unique ON ipblocks (ipb_address,ipb_user,ipb_auto,ipb_anon_only)' ),
 
@@ -506,7 +509,7 @@ END;
                        $this->output( "Creating sequence $ns\n" );
                        $this->db->query( "CREATE SEQUENCE $ns" );
                        if( $pkey !== false ) {
-                               $this->setDefault( $table,  $pkey, '"nextval"(\'"' . $ns . '"\'::"regclass")' );
+                               $this->setDefault( $table, $pkey, '"nextval"(\'"' . $ns . '"\'::"regclass")' );
                        }
                }
        }
index 1d6bca0..b5cd640 100644 (file)
@@ -82,10 +82,8 @@ class SqliteUpdater extends DatabaseUpdater {
                        array( 'addField', 'revision',      'rev_sha1',         'patch-rev_sha1.sql' ),
                        array( 'addField', 'archive',       'ar_sha1',          'patch-ar_sha1.sql' ),
                        array( 'addIndex', 'page', 'page_redirect_namespace_len', 'patch-page_redirect_namespace_len.sql' ),
-                       array( 'modifyField', 'user_groups', 'ug_group', 'patch-ug_group-length-increase.sql' ),
                        array( 'addField',      'uploadstash',  'us_chunk_inx',         'patch-uploadstash_chunk.sql' ),
                        array( 'addfield', 'job',           'job_timestamp',    'patch-jobs-add-timestamp.sql' ),
-                       array( 'modifyField', 'user_former_groups', 'ufg_group', 'patch-ug_group-length-increase.sql' ),
 
                        // 1.20
                        array( 'addIndex', 'revision', 'page_user_timestamp', 'patch-revision-user-page-index.sql' ),
@@ -108,6 +106,8 @@ class SqliteUpdater extends DatabaseUpdater {
                        array( 'addField', 'job',           'job_attempts',      'patch-job_attempts.sql' ),
                        array( 'doEnableProfiling' ),
                        array( 'addField', 'uploadstash',      'us_props',      'patch-uploadstash-us_props.sql' ),
+                       array( 'modifyField', 'user_groups', 'ug_group', 'patch-ug_group-length-increase-255.sql' ),
+                       array( 'modifyField', 'user_former_groups', 'ufg_group', 'patch-ufg_group-length-increase-255.sql' ),
                );
        }
 
index 4892770..c080871 100644 (file)
@@ -426,7 +426,7 @@ class WebInstaller extends Installer {
                $url = preg_replace( '/\?.*$/', '', $url );
 
                if ( $query ) {
-                       $url .= '?' . wfArrayToCGI( $query );
+                       $url .= '?' . wfArrayToCgi( $query );
                }
 
                return $url;
@@ -933,7 +933,7 @@ class WebInstaller extends Installer {
         * @return string
         */
        public function getRadioSet( $params ) {
-               if ( !isset( $params['controlName']  ) ) {
+               if ( !isset( $params['controlName'] ) ) {
                        $params['controlName'] = 'config_' . $params['var'];
                }
 
@@ -1079,7 +1079,7 @@ class WebInstaller extends Installer {
                ) );
                $anchor = Html::rawElement( 'a',
                        array( 'href' => $this->getURL( array( 'localsettings' => 1 ) ) ),
-                       $img . ' ' . wfMessage( 'config-download-localsettings' )->escaped() );
+                       $img . ' ' . wfMessage( 'config-download-localsettings' )->parse() );
                return Html::rawElement( 'div', array( 'class' => 'config-download-link' ), $anchor );
        }
 
@@ -1096,7 +1096,7 @@ class WebInstaller extends Installer {
                } elseif ( !empty( $_SERVER['SCRIPT_NAME'] ) ) {
                        $path = $_SERVER['SCRIPT_NAME'];
                }
-               if ($path !== false) {
+               if ( $path !== false ) {
                        $uri = preg_replace( '{^(.*)/(mw-)?config.*$}', '$1', $path );
                        $this->setVar( 'wgScriptPath', $uri );
                } else {
index f3166c2..42f451f 100644 (file)
@@ -219,7 +219,7 @@ class WebInstallerOutput {
                $dbTypes = $this->parent->getDBTypes();
 
                $this->parent->request->response()->header( 'Content-Type: text/html; charset=utf-8' );
-               if (!$this->allowFrames) {
+               if ( !$this->allowFrames ) {
                        $this->parent->request->response()->header( 'X-Frame-Options: DENY' );
                }
                if ( $this->redirectTarget ) {
@@ -239,7 +239,7 @@ class WebInstallerOutput {
        <meta http-equiv="Content-type" content="text/html; charset=utf-8" />
        <title><?php $this->outputTitle(); ?></title>
        <?php echo $this->getCssUrl() . "\n"; ?>
-       <?php echo Html::inlineScript(  "var dbTypes = " . Xml::encodeJsVar( $dbTypes ) ) . "\n"; ?>
+       <?php echo Html::inlineScript( "var dbTypes = " . Xml::encodeJsVar( $dbTypes ) ) . "\n"; ?>
        <?php echo $this->getJQuery() . "\n"; ?>
        <?php echo Html::linkedScript( '../skins/common/config.js' ) . "\n"; ?>
 </head>
index f1340d7..07047f2 100644 (file)
@@ -36,7 +36,7 @@ abstract class WebInstallerPage {
         */
        public $parent;
 
-       public abstract function execute();
+       abstract public function execute();
 
        /**
         * Constructor.
@@ -369,7 +369,7 @@ class WebInstaller_ExistingWiki extends WebInstallerPage {
 
                // Set the relevant variables from LocalSettings.php
                $requiredVars = array( 'wgDBtype' );
-               $status = $this->importVariables( $requiredVars , $vars );
+               $status = $this->importVariables( $requiredVars, $vars );
                $installer = $this->parent->getDBInstaller();
                $status->merge( $this->importVariables( $installer->getGlobalNames(), $vars ) );
                if ( !$status->isOK() ) {
@@ -645,7 +645,7 @@ class WebInstaller_Name extends WebInstallerPage {
                        $this->parent->getTextBox( array(
                                'var' => 'wgSitename',
                                'label' => 'config-site-name',
-                         'help' => $this->parent->getHelpBox( 'config-site-name-help' )
+                               'help' => $this->parent->getHelpBox( 'config-site-name-help' )
                        ) ) .
                        $this->parent->getRadioSet( array(
                                'var' => '_NamespaceType',
@@ -955,7 +955,7 @@ class WebInstaller_Options extends WebInstallerPage {
 
                // We'll hide/show this on demand when the value changes, see config.js.
                $cacheval = $this->getVar( 'wgMainCacheType' );
-               if (!$cacheval) {
+               if ( !$cacheval ) {
                        // We need to set a default here; but don't hardcode it
                        // or we lose it every time we reload the page for validation
                        // or going back!
@@ -1002,7 +1002,7 @@ class WebInstaller_Options extends WebInstallerPage {
                $styleUrl = $server . dirname( dirname( $this->parent->getUrl() ) ) .
                        '/skins/common/config-cc.css';
                $iframeUrl = 'http://creativecommons.org/license/?' .
-                       wfArrayToCGI( array(
+                       wfArrayToCgi( array(
                                'partner' => 'MediaWiki',
                                'exit_url' => $exitUrl,
                                'lang' => $this->getVar( '_UserLang' ),
@@ -1025,7 +1025,7 @@ class WebInstaller_Options extends WebInstallerPage {
                } else {
                        $iframeAttribs['src'] = $this->getCCPartnerUrl();
                }
-               $wrapperStyle = ($this->getVar('_LicenseCode') == 'cc-choose') ? '' : 'display: none';
+               $wrapperStyle = ($this->getVar( '_LicenseCode' ) == 'cc-choose') ? '' : 'display: none';
 
                return
                        "<div class=\"config-cc-wrapper\" id=\"config-cc-wrapper\" style=\"$wrapperStyle\">\n" .
@@ -1155,12 +1155,12 @@ class WebInstaller_Install extends WebInstallerPage {
                        return 'continue';
                } elseif( $this->parent->request->wasPosted() ) {
                        $this->startForm();
-                       $this->addHTML("<ul>");
+                       $this->addHTML( "<ul>" );
                        $results = $this->parent->performInstallation(
                                array( $this, 'startStage'),
                                array( $this, 'endStage' )
                        );
-                       $this->addHTML("</ul>");
+                       $this->addHTML( "</ul>" );
                        // PerformInstallation bails on a fatal, so make sure the last item
                        // completed before giving 'next.' Likewise, only provide back on failure
                        $lastStep = end( $results );
@@ -1259,7 +1259,7 @@ class WebInstaller_Restart extends WebInstallerPage {
 
 abstract class WebInstaller_Document extends WebInstallerPage {
 
-       protected abstract function getFileName();
+       abstract protected function getFileName();
 
        public  function execute() {
                $text = $this->getFileContents();
@@ -1287,8 +1287,8 @@ class WebInstaller_ReleaseNotes extends WebInstaller_Document {
        protected function getFileName() {
                global $wgVersion;
 
-               if(preg_match( '/^(\d+)\.(\d+).*/i', $wgVersion, $result ) ) {
-                       throw new MWException('Variable $wgVersion has an invalid value.');
+               if( !preg_match( '/^(\d+)\.(\d+).*/i', $wgVersion, $result ) ) {
+                       throw new MWException( 'Variable $wgVersion has an invalid value.' );
                }
 
                return 'RELEASE-NOTES-' . $result[1] . '.' . $result[2];
@@ -1302,4 +1302,3 @@ class WebInstaller_UpgradeDoc extends WebInstaller_Document {
 class WebInstaller_Copying extends WebInstaller_Document {
        protected function getFileName() { return 'COPYING'; }
 }
-
index eacf9a8..4003fa8 100644 (file)
  * schema updates etc, which aren't wiki-related)
  */
 class Interwiki {
-
        // Cache - removes oldest entry when it hits limit
        protected static $smCache = array();
        const CACHE_LIMIT = 100; // 0 means unlimited, any other value is max number of entries.
 
        protected $mPrefix, $mURL, $mAPI, $mWikiID, $mLocal, $mTrans;
 
-       public function __construct( $prefix = null, $url = '', $api = '', $wikiId = '', $local = 0, $trans = 0 ) {
+       public function __construct( $prefix = null, $url = '', $api = '', $wikiId = '', $local = 0,
+               $trans = 0
+       ) {
                $this->mPrefix = $prefix;
                $this->mURL = $url;
                $this->mAPI = $api;
@@ -46,10 +47,10 @@ class Interwiki {
        /**
         * Check whether an interwiki prefix exists
         *
-        * @param $prefix String: interwiki prefix to use
-        * @return Boolean: whether it exists
+        * @param string $prefix Interwiki prefix to use
+        * @return bool Whether it exists
         */
-       static public function isValidInterwiki( $prefix ) {
+       public static function isValidInterwiki( $prefix ) {
                $result = self::fetch( $prefix );
                return (bool)$result;
        }
@@ -57,28 +58,28 @@ class Interwiki {
        /**
         * Fetch an Interwiki object
         *
-        * @param $prefix String: interwiki prefix to use
+        * @param string $prefix Interwiki prefix to use
         * @return Interwiki|null|bool
         */
-       static public function fetch( $prefix ) {
+       public static function fetch( $prefix ) {
                global $wgContLang;
-               if( $prefix == '' ) {
+               if ( $prefix == '' ) {
                        return null;
                }
                $prefix = $wgContLang->lc( $prefix );
-               if( isset( self::$smCache[$prefix] ) ) {
+               if ( isset( self::$smCache[$prefix] ) ) {
                        return self::$smCache[$prefix];
                }
                global $wgInterwikiCache;
-               if( $wgInterwikiCache ) {
+               if ( $wgInterwikiCache ) {
                        $iw = Interwiki::getInterwikiCached( $prefix );
                } else {
                        $iw = Interwiki::load( $prefix );
-                       if( !$iw ) {
+                       if ( !$iw ) {
                                $iw = false;
                        }
                }
-               if( self::CACHE_LIMIT && count( self::$smCache ) >= self::CACHE_LIMIT ) {
+               if ( self::CACHE_LIMIT && count( self::$smCache ) >= self::CACHE_LIMIT ) {
                        reset( self::$smCache );
                        unset( self::$smCache[key( self::$smCache )] );
                }
@@ -91,7 +92,7 @@ class Interwiki {
         *
         * @note More logic is explained in DefaultSettings.
         *
-        * @param $prefix String: interwiki prefix
+        * @param string $prefix Interwiki prefix
         * @return Interwiki object
         */
        protected static function getInterwikiCached( $prefix ) {
@@ -114,19 +115,19 @@ class Interwiki {
         *
         * @note More logic is explained in DefaultSettings.
         *
-        * @param $prefix String: database key
-        * @return String: the entry
+        * @param string $prefix Database key
+        * @return string The interwiki entry
         */
        protected static function getInterwikiCacheEntry( $prefix ) {
                global $wgInterwikiCache, $wgInterwikiScopes, $wgInterwikiFallbackSite;
                static $db, $site;
 
                wfDebug( __METHOD__ . "( $prefix )\n" );
-               if( !$db ) {
+               if ( !$db ) {
                        $db = CdbReader::open( $wgInterwikiCache );
                }
                /* Resolve site name */
-               if( $wgInterwikiScopes >= 3 && !$site ) {
+               if ( $wgInterwikiScopes >= 3 && !$site ) {
                        $site = $db->get( '__sites:' . wfWikiID() );
                        if ( $site == '' ) {
                                $site = $wgInterwikiFallbackSite;
@@ -146,15 +147,14 @@ class Interwiki {
                        $value = '';
                }
 
-
                return $value;
        }
 
        /**
         * Load the interwiki, trying first memcached then the DB
         *
-        * @param $prefix string The interwiki prefix
-        * @return Boolean: the prefix is valid
+        * @param string $prefix The interwiki prefix
+        * @return bool If $prefix is valid
         */
        protected static function load( $prefix ) {
                global $wgMemc, $wgInterwikiExpiry;
@@ -172,9 +172,9 @@ class Interwiki {
                        }
                }
 
-               if( $iwData && is_array( $iwData ) ) { // is_array is hack for old keys
+               if ( $iwData && is_array( $iwData ) ) { // is_array is hack for old keys
                        $iw = Interwiki::loadFromArray( $iwData );
-                       if( $iw ) {
+                       if ( $iw ) {
                                return $iw;
                        }
                }
@@ -203,11 +203,11 @@ class Interwiki {
        /**
         * Fill in member variables from an array (e.g. memcached result, Database::fetchRow, etc)
         *
-        * @param $mc array Associative array: row from the interwiki table
-        * @return Boolean|Interwiki whether everything was there
+        * @param array $mc Associative array: row from the interwiki table
+        * @return Interwiki|bool Interwiki object or false if $mc['iw_url'] is not set
         */
        protected static function loadFromArray( $mc ) {
-               if( isset( $mc['iw_url'] ) ) {
+               if ( isset( $mc['iw_url'] ) ) {
                        $iw = new Interwiki();
                        $iw->mURL = $mc['iw_url'];
                        $iw->mLocal = isset( $mc['iw_local'] ) ? $mc['iw_local'] : 0;
@@ -223,8 +223,8 @@ class Interwiki {
        /**
         * Fetch all interwiki prefixes from interwiki cache
         *
-        * @param $local null|string If not null, limits output to local/non-local interwikis
-        * @return Array List of prefixes
+        * @param null|string $local If not null, limits output to local/non-local interwikis
+        * @return array List of prefixes
         * @since 1.19
         */
        protected static function getAllPrefixesCached( $local ) {
@@ -232,11 +232,11 @@ class Interwiki {
                static $db, $site;
 
                wfDebug( __METHOD__ . "()\n" );
-               if( !$db ) {
+               if ( !$db ) {
                        $db = CdbReader::open( $wgInterwikiCache );
                }
                /* Resolve site name */
-               if( $wgInterwikiScopes >= 3 && !$site ) {
+               if ( $wgInterwikiScopes >= 3 && !$site ) {
                        $site = $db->get( '__sites:' . wfWikiID() );
                        if ( $site == '' ) {
                                $site = $wgInterwikiFallbackSite;
@@ -257,11 +257,11 @@ class Interwiki {
 
                $data = array();
 
-               foreach( $sources as $source ) {
+               foreach ( $sources as $source ) {
                        $list = $db->get( "__list:{$source}" );
                        foreach ( explode( ' ', $list ) as $iw_prefix ) {
                                $row = $db->get( "{$source}:{$iw_prefix}" );
-                               if( !$row ) {
+                               if ( !$row ) {
                                        continue;
                                }
 
@@ -273,8 +273,8 @@ class Interwiki {
 
                                $data[$iw_prefix] = array(
                                        'iw_prefix' => $iw_prefix,
-                                       'iw_url'    => $iw_url,
-                                       'iw_local'  => $iw_local,
+                                       'iw_url' => $iw_url,
+                                       'iw_local' => $iw_local,
                                );
                        }
                }
@@ -287,8 +287,8 @@ class Interwiki {
        /**
         * Fetch all interwiki prefixes from DB
         *
-        * @param $local string|null If not null, limits output to local/non-local interwikis
-        * @return Array List of prefixes
+        * @param string|null $local If not null, limits output to local/non-local interwikis
+        * @return array List of prefixes
         * @since 1.19
         */
        protected static function getAllPrefixesDB( $local ) {
@@ -318,8 +318,8 @@ class Interwiki {
        /**
         * Returns all interwiki prefixes
         *
-        * @param $local string|null If set, limits output to local/non-local interwikis
-        * @return Array List of prefixes
+        * @param string|null $local If set, limits output to local/non-local interwikis
+        * @return array List of prefixes
         * @since 1.19
         */
        public static function getAllPrefixes( $local = null ) {
@@ -335,15 +335,15 @@ class Interwiki {
        /**
         * Get the URL for a particular title (or with $1 if no title given)
         *
-        * @param $title String: what text to put for the article name
-        * @return String: the URL
+        * @param string $title What text to put for the article name
+        * @return string The URL
         * @note Prior to 1.19 The getURL with an argument was broken.
         *       If you if you use this arg in an extension that supports MW earlier
         *       than 1.19 please wfUrlencode and substitute $1 on your own.
         */
        public function getURL( $title = null ) {
                $url = $this->mURL;
-               if( $title !== null ) {
+               if ( $title !== null ) {
                        $url = str_replace( "$1", wfUrlencode( $title ), $url );
                }
                return $url;
@@ -352,7 +352,7 @@ class Interwiki {
        /**
         * Get the API URL for this wiki
         *
-        * @return String: the URL
+        * @return string The URL
         */
        public function getAPI() {
                return $this->mAPI;
@@ -361,7 +361,7 @@ class Interwiki {
        /**
         * Get the DB name for this wiki
         *
-        * @return String: the DB name
+        * @return string The DB name
         */
        public function getWikiID() {
                return $this->mWikiID;
@@ -371,7 +371,7 @@ class Interwiki {
         * Is this a local link from a sister project, or is
         * it something outside, like Google
         *
-        * @return Boolean
+        * @return bool
         */
        public function isLocal() {
                return $this->mLocal;
@@ -381,7 +381,7 @@ class Interwiki {
         * Can pages from this wiki be transcluded?
         * Still requires $wgEnableScaryTransclusion
         *
-        * @return Boolean
+        * @return bool
         */
        public function isTranscludable() {
                return $this->mTrans;
@@ -390,7 +390,7 @@ class Interwiki {
        /**
         * Get the name for the interwiki site
         *
-        * @return String
+        * @return string
         */
        public function getName() {
                $msg = wfMessage( 'interwiki-name-' . $this->mPrefix )->inContentLanguage();
@@ -400,7 +400,7 @@ class Interwiki {
        /**
         * Get a description for this interwiki
         *
-        * @return String
+        * @return string
         */
        public function getDescription() {
                $msg = wfMessage( 'interwiki-desc-' . $this->mPrefix )->inContentLanguage();
@@ -409,8 +409,8 @@ class Interwiki {
 
        /**
         * Return the list of interwiki fields that should be selected to create
-        * a new interwiki object.
-        * @return array
+        * a new Interwiki object.
+        * @return string[]
         */
        public static function selectFields() {
                return array(
index 927ca4e..5f3cdf5 100644 (file)
@@ -242,6 +242,13 @@ abstract class Job {
                                if ( $paramString != '' ) {
                                        $paramString .= ' ';
                                }
+
+                               if ( is_array( $value ) ) {
+                                       $value = "array(" . count( $value ) . ")";
+                               } else if ( is_object( $value ) && !method_exists( $value, '__toString' ) ) {
+                                       $value = "object(" . get_class( $value ) . ")";
+                               }
+
                                $paramString .= "$key=$value";
                        }
                }
index 65c0725..92beb2c 100644 (file)
@@ -36,6 +36,8 @@ abstract class JobQueue {
 
        const QoS_Atomic = 1; // integer; "all-or-nothing" job insertions
 
+       const MAX_ATTEMPTS = 3; // integer; number of times to try a job
+
        /**
         * @param $params array
         */
@@ -49,19 +51,23 @@ abstract class JobQueue {
        /**
         * Get a job queue object of the specified type.
         * $params includes:
-        *   class    : What job class to use (determines job type)
-        *   wiki     : wiki ID of the wiki the jobs are for (defaults to current wiki)
-        *   type     : The name of the job types this queue handles
-        *   order    : Order that pop() selects jobs, one of "fifo", "timestamp" or "random".
-        *              If "fifo" is used, the queue will effectively be FIFO. Note that
-        *              job completion will not appear to be exactly FIFO if there are multiple
-        *              job runners since jobs can take different times to finish once popped.
-        *              If "timestamp" is used, the queue will at least be loosely ordered
-        *              by timestamp, allowing for some jobs to be popped off out of order.
-        *              If "random" is used, pop() will pick jobs in random order. This might be
-        *              useful for improving concurrency depending on the queue storage medium.
-        *   claimTTL : If supported, the queue will recycle jobs that have been popped
-        *              but not acknowledged as completed after this many seconds.
+        *   - class    : What job class to use (determines job type)
+        *   - wiki     : wiki ID of the wiki the jobs are for (defaults to current wiki)
+        *   - type     : The name of the job types this queue handles
+        *   - order    : Order that pop() selects jobs, one of "fifo", "timestamp" or "random".
+        *                If "fifo" is used, the queue will effectively be FIFO. Note that
+        *                job completion will not appear to be exactly FIFO if there are multiple
+        *                job runners since jobs can take different times to finish once popped.
+        *                If "timestamp" is used, the queue will at least be loosely ordered
+        *                by timestamp, allowing for some jobs to be popped off out of order.
+        *                If "random" is used, pop() will pick jobs in random order. This might be
+        *                useful for improving concurrency depending on the queue storage medium.
+        *   - claimTTL : If supported, the queue will recycle jobs that have been popped
+        *                but not acknowledged as completed after this many seconds. Recycling
+        *                of jobs simple means re-inserting them into the queue. Jobs can be
+        *                attempted up to three times before being discarded.
+        *
+        * Queue classes should throw an exception if they do not support the options given.
         *
         * @param $params array
         * @return JobQueue
@@ -94,10 +100,11 @@ abstract class JobQueue {
        }
 
        /**
-        * Quickly check if the queue is empty.
+        * Quickly check if the queue is empty (has no available jobs).
         * Queue classes should use caching if they are any slower without memcached.
         *
         * @return bool
+        * @throws MWException
         */
        final public function isEmpty() {
                wfProfileIn( __METHOD__ );
@@ -113,12 +120,68 @@ abstract class JobQueue {
        abstract protected function doIsEmpty();
 
        /**
-        * Push a batch of jobs into the queue
+        * Get the number of available jobs in the queue.
+        * Queue classes should use caching if they are any slower without memcached.
+        *
+        * @return integer
+        * @throws MWException
+        */
+       final public function getSize() {
+               wfProfileIn( __METHOD__ );
+               $res = $this->doGetSize();
+               wfProfileOut( __METHOD__ );
+               return $res;
+       }
+
+       /**
+        * @see JobQueue::getSize()
+        * @return integer
+        */
+       abstract protected function doGetSize();
+
+       /**
+        * Get the number of acquired jobs (these are temporarily out of the queue).
+        * Queue classes should use caching if they are any slower without memcached.
+        *
+        * @return integer
+        * @throws MWException
+        */
+       final public function getAcquiredCount() {
+               wfProfileIn( __METHOD__ );
+               $res = $this->doGetAcquiredCount();
+               wfProfileOut( __METHOD__ );
+               return $res;
+       }
+
+       /**
+        * @see JobQueue::getAcquiredCount()
+        * @return integer
+        */
+       abstract protected function doGetAcquiredCount();
+
+       /**
+        * Push a single jobs into the queue.
+        * This does not require $wgJobClasses to be set for the given job type.
+        *
+        * @param $jobs Job|Array
+        * @param $flags integer Bitfield (supports JobQueue::QoS_Atomic)
+        * @return bool Returns false on failure
+        * @throws MWException
+        */
+       final public function push( $jobs, $flags = 0 ) {
+               $jobs = is_array( $jobs ) ? $jobs : array( $jobs );
+
+               return $this->batchPush( $jobs, $flags );
+       }
+
+       /**
+        * Push a batch of jobs into the queue.
+        * This does not require $wgJobClasses to be set for the given job type.
         *
         * @param $jobs array List of Jobs
         * @param $flags integer Bitfield (supports JobQueue::QoS_Atomic)
+        * @return bool Returns false on failure
         * @throws MWException
-        * @return bool
         */
        final public function batchPush( array $jobs, $flags = 0 ) {
                foreach ( $jobs as $job ) {
@@ -139,11 +202,22 @@ abstract class JobQueue {
        abstract protected function doBatchPush( array $jobs, $flags );
 
        /**
-        * Pop a job off of the queue
+        * Pop a job off of the queue.
+        * This requires $wgJobClasses to be set for the given job type.
         *
         * @return Job|bool Returns false on failure
+        * @throws MWException
         */
        final public function pop() {
+               global $wgJobClasses;
+
+               if ( $this->wiki !== wfWikiID() ) {
+                       throw new MWException( "Cannot pop '{$this->type}' job off foreign wiki queue." );
+               } elseif ( !isset( $wgJobClasses[$this->type] ) ) {
+                       // Do not pop jobs if there is no class for the queue type
+                       throw new MWException( "Unrecognized job type '{$this->type}'." );
+               }
+
                wfProfileIn( __METHOD__ );
                $job = $this->doPop();
                wfProfileOut( __METHOD__ );
@@ -157,11 +231,13 @@ abstract class JobQueue {
        abstract protected function doPop();
 
        /**
-        * Acknowledge that a job was completed
+        * Acknowledge that a job was completed.
+        *
+        * This does nothing for certain queue classes or if "claimTTL" is not set.
         *
         * @param $job Job
-        * @throws MWException
         * @return bool
+        * @throws MWException
         */
        final public function ack( Job $job ) {
                if ( $job->getType() !== $this->type ) {
@@ -204,9 +280,11 @@ abstract class JobQueue {
         * Essentially, the new batch of jobs belong to a new "root job" and the older ones to a
         * previous "root job" for the same task of "update links of pages that use template X".
         *
+        * This does nothing for certain queue classes.
+        *
         * @param $job Job
-        * @throws MWException
         * @return bool
+        * @throws MWException
         */
        final public function deduplicateRootJob( Job $job ) {
                if ( $job->getType() !== $this->type ) {
@@ -228,9 +306,12 @@ abstract class JobQueue {
        }
 
        /**
-        * Wait for any slaves or backup servers to catch up
+        * Wait for any slaves or backup servers to catch up.
+        *
+        * This does nothing for certain queue classes.
         *
         * @return void
+        * @throws MWException
         */
        final public function waitForBackups() {
                wfProfileIn( __METHOD__ );
index 719761b..9b3ffa7 100644 (file)
  * @since 1.21
  */
 class JobQueueDB extends JobQueue {
-       const CACHE_TTL      = 300; // integer; seconds to cache queue information
-       const MAX_AGE_PRUNE  = 604800; // integer; seconds a job can live once claimed
-       const MAX_ATTEMPTS   = 3; // integer; number of times to try a job
-       const MAX_JOB_RANDOM = 2147483647; // integer; 2^31 - 1, used for job_random
+       const CACHE_TTL_SHORT = 30; // integer; seconds to cache info without re-validating
+       const CACHE_TTL_LONG  = 300; // integer; seconds to cache info that is kept up to date
+       const MAX_AGE_PRUNE   = 604800; // integer; seconds a job can live once claimed
+       const MAX_JOB_RANDOM  = 2147483647; // integer; 2^31 - 1, used for job_random
+       const MAX_OFFSET      = 255; // integer; maximum number of rows to skip
+
+       protected $cluster = false; // string; name of an external DB cluster
+
+       /**
+        * Additional parameters include:
+        *   - cluster : The name of an external cluster registered via LBFactory.
+        *               If not specified, the primary DB cluster for the wiki will be used.
+        *               This can be overridden with a custom cluster so that DB handles will
+        *               be retrieved via LBFactory::getExternalLB() and getConnection().
+        * @param $params array
+        */
+       protected function __construct( array $params ) {
+               parent::__construct( $params );
+               $this->cluster = isset( $params['cluster'] ) ? $params['cluster'] : false;
+       }
 
        /**
         * @see JobQueue::doIsEmpty()
@@ -40,7 +56,7 @@ class JobQueueDB extends JobQueue {
        protected function doIsEmpty() {
                global $wgMemc;
 
-               $key = $this->getEmptinessCacheKey();
+               $key = $this->getCacheKey( 'empty' );
 
                $isEmpty = $wgMemc->get( $key );
                if ( $isEmpty === 'true' ) {
@@ -49,14 +65,63 @@ class JobQueueDB extends JobQueue {
                        return false;
                }
 
-               $found = $this->getSlaveDB()->selectField( // unclaimed job
+               list( $dbr, $scope ) = $this->getSlaveDB();
+               $found = $dbr->selectField( // unclaimed job
                        'job', '1', array( 'job_cmd' => $this->type, 'job_token' => '' ), __METHOD__
                );
-               $wgMemc->add( $key, $found ? 'false' : 'true', self::CACHE_TTL );
+               $wgMemc->add( $key, $found ? 'false' : 'true', self::CACHE_TTL_LONG );
 
                return !$found;
        }
 
+       /**
+        * @see JobQueue::doGetSize()
+        * @return integer
+        */
+       protected function doGetSize() {
+               global $wgMemc;
+
+               $key = $this->getCacheKey( 'size' );
+
+               $size = $wgMemc->get( $key );
+               if ( is_int( $size ) ) {
+                       return $size;
+               }
+
+               list( $dbr, $scope ) = $this->getSlaveDB();
+               $size = (int)$dbr->selectField( 'job', 'COUNT(*)',
+                       array( 'job_cmd' => $this->type, 'job_token' => '' ),
+                       __METHOD__
+               );
+               $wgMemc->set( $key, $size, self::CACHE_TTL_SHORT );
+
+               return $size;
+       }
+
+       /**
+        * @see JobQueue::doGetAcquiredCount()
+        * @return integer
+        */
+       protected function doGetAcquiredCount() {
+               global $wgMemc;
+
+               $key = $this->getCacheKey( 'acquiredcount' );
+
+               $count = $wgMemc->get( $key );
+               if ( is_int( $count ) ) {
+                       return $count;
+               }
+
+               list( $dbr, $scope ) = $this->getSlaveDB();
+               $count = (int)$dbr->selectField( 'job', 'COUNT(*)',
+                       array( 'job_cmd' => $this->type, "job_token != {$dbr->addQuotes( '' )}" ),
+                       __METHOD__
+               );
+               $wgMemc->set( $key, $count, self::CACHE_TTL_SHORT );
+
+               return $count;
+       }
+
        /**
         * @see JobQueue::doBatchPush()
         * @param array $jobs
@@ -66,7 +131,7 @@ class JobQueueDB extends JobQueue {
         */
        protected function doBatchPush( array $jobs, $flags ) {
                if ( count( $jobs ) ) {
-                       $dbw = $this->getMasterDB();
+                       list( $dbw, $scope ) = $this->getMasterDB();
 
                        $rowSet = array(); // (sha1 => job) map for jobs that are de-duplicated
                        $rowList = array(); // list of jobs for jobs that are are not de-duplicated
@@ -81,11 +146,11 @@ class JobQueueDB extends JobQueue {
                        }
 
                        $atomic = ( $flags & self::QoS_Atomic );
-                       $key    = $this->getEmptinessCacheKey();
-                       $ttl    = self::CACHE_TTL;
+                       $key    = $this->getCacheKey( 'empty' );
+                       $ttl    = self::CACHE_TTL_LONG;
 
                        $dbw->onTransactionIdle(
-                               function() use ( $dbw, $rowSet, $rowList, $atomic, $key, $ttl
+                               function() use ( $dbw, $rowSet, $rowList, $atomic, $key, $ttl, $scope
                        ) {
                                global $wgMemc;
 
@@ -115,6 +180,8 @@ class JobQueueDB extends JobQueue {
                                                $dbw->insert( 'job', $rowBatch, __METHOD__ );
                                        }
                                        wfIncrStats( 'job-insert', count( $rows ) );
+                                       wfIncrStats( 'job-insert-duplicate',
+                                               count( $rowSet ) + count( $rowList ) - count( $rows ) );
                                } catch ( DBError $e ) {
                                        if ( $atomic ) {
                                                $dbw->rollback( __METHOD__ );
@@ -139,11 +206,11 @@ class JobQueueDB extends JobQueue {
        protected function doPop() {
                global $wgMemc;
 
-               if ( $wgMemc->get( $this->getEmptinessCacheKey() ) === 'true' ) {
+               if ( $wgMemc->get( $this->getCacheKey( 'empty' ) ) === 'true' ) {
                        return false; // queue is empty
                }
 
-               $dbw = $this->getMasterDB();
+               list( $dbw, $scope ) = $this->getMasterDB();
                $dbw->commit( __METHOD__, 'flush' ); // flush existing transaction
 
                $uuid = wfRandomString( 32 ); // pop attempt
@@ -160,13 +227,10 @@ class JobQueueDB extends JobQueue {
                                $rand = mt_rand( 0, self::MAX_JOB_RANDOM ); // encourage concurrent UPDATEs
                                $gte  = (bool)mt_rand( 0, 1 ); // find rows with rand before/after $rand
                                $row  = $this->claimRandom( $uuid, $rand, $gte );
-                               if ( !$row ) { // need to try the other direction
-                                       $row = $this->claimRandom( $uuid, $rand, !$gte );
-                               }
                        }
                        // Check if we found a row to reserve...
                        if ( !$row ) {
-                               $wgMemc->set( $this->getEmptinessCacheKey(), 'true', self::CACHE_TTL );
+                               $wgMemc->set( $this->getCacheKey( 'empty' ), 'true', self::CACHE_TTL_LONG );
                                break; // nothing to do
                        }
                        wfIncrStats( 'job-pop' );
@@ -182,6 +246,7 @@ class JobQueueDB extends JobQueue {
                        $job->id = $row->job_id; // XXX: work around broken subclasses
                        // Flag this job as an old duplicate based on its "root" job...
                        if ( $this->isRootJobOldDuplicate( $job ) ) {
+                               wfIncrStats( 'job-pop-duplicate' );
                                $job = DuplicateJob::newFromJob( $job ); // convert to a no-op
                        }
                        break; // done
@@ -199,23 +264,55 @@ class JobQueueDB extends JobQueue {
         * @return Row|false
         */
        protected function claimRandom( $uuid, $rand, $gte ) {
-               $dbw  = $this->getMasterDB();
-               $ineq = $gte ? '>=' : '<=';
+               global $wgMemc;
+
+               list( $dbw, $scope ) = $this->getMasterDB();
+               // Check cache to see if the queue has <= OFFSET items
+               $tinyQueue = $wgMemc->get( $this->getCacheKey( 'small' ) );
 
                $row = false; // the row acquired
+               $invertedDirection = false; // whether one job_random direction was already scanned
                // This uses a replication safe method for acquiring jobs. One could use UPDATE+LIMIT
                // instead, but that either uses ORDER BY (in which case it deadlocks in MySQL) or is
                // not replication safe. Due to http://bugs.mysql.com/bug.php?id=6980, subqueries cannot
                // be used here with MySQL.
                do {
-                       $row = $dbw->selectRow( 'job', '*', // find a random job
-                               array(
-                                       'job_cmd'   => $this->type,
-                                       'job_token' => '',
-                                       "job_random {$ineq} {$dbw->addQuotes( $rand )}" ),
-                               __METHOD__
-                               // Bug 42614: "ORDER BY job_random" causes slowness on mysql for some reason
-                       );
+                       if ( $tinyQueue ) { // queue has <= MAX_OFFSET rows
+                               // For small queues, using OFFSET will overshoot and return no rows more often.
+                               // Instead, this uses job_random to pick a row (possibly checking both directions).
+                               $ineq = $gte ? '>=' : '<=';
+                               $dir  = $gte ? 'ASC' : 'DESC';
+                               $row  = $dbw->selectRow( 'job', '*', // find a random job
+                                       array(
+                                               'job_cmd'   => $this->type,
+                                               'job_token' => '', // unclaimed
+                                               "job_random {$ineq} {$dbw->addQuotes( $rand )}" ),
+                                       __METHOD__,
+                                       array( 'ORDER BY' => "job_random {$dir}" )
+                               );
+                               if ( !$row && !$invertedDirection ) {
+                                       $gte = !$gte;
+                                       $invertedDirection = true;
+                                       continue; // try the other direction
+                               }
+                       } else { // table *may* have >= MAX_OFFSET rows
+                               // Bug 42614: "ORDER BY job_random" with a job_random inequality causes high CPU
+                               // in MySQL if there are many rows for some reason. This uses a small OFFSET
+                               // instead of job_random for reducing excess claim retries.
+                               $row = $dbw->selectRow( 'job', '*', // find a random job
+                                       array(
+                                               'job_cmd'   => $this->type,
+                                               'job_token' => '', // unclaimed
+                                       ),
+                                       __METHOD__,
+                                       array( 'OFFSET' => mt_rand( 0, self::MAX_OFFSET ) )
+                               );
+                               if ( !$row ) {
+                                       $tinyQueue = true; // we know the queue must have <= MAX_OFFSET rows
+                                       $wgMemc->set( $this->getCacheKey( 'small' ), 1, 30 );
+                                       continue; // use job_random
+                               }
+                       }
                        if ( $row ) { // claim the job
                                $dbw->update( 'job', // update by PK
                                        array(
@@ -245,7 +342,7 @@ class JobQueueDB extends JobQueue {
         * @return Row|false
         */
        protected function claimOldest( $uuid ) {
-               $dbw  = $this->getMasterDB();
+               list( $dbw, $scope ) = $this->getMasterDB();
 
                $row = false; // the row acquired
                do {
@@ -306,7 +403,7 @@ class JobQueueDB extends JobQueue {
         */
        protected function recycleStaleJobs() {
                $now   = time();
-               $dbw   = $this->getMasterDB();
+               list( $dbw, $scope ) = $this->getMasterDB();
                $count = 0; // affected rows
 
                if ( !$dbw->lock( "jobqueue-recycle-{$this->type}", __METHOD__, 1 ) ) {
@@ -341,6 +438,7 @@ class JobQueueDB extends JobQueue {
                                        __METHOD__
                                );
                                $count += $dbw->affectedRows();
+                               wfIncrStats( 'job-recycle', $dbw->affectedRows() );
                        }
                }
 
@@ -379,7 +477,7 @@ class JobQueueDB extends JobQueue {
                        throw new MWException( "Job of type '{$job->getType()}' has no ID." );
                }
 
-               $dbw = $this->getMasterDB();
+               list( $dbw, $scope ) = $this->getMasterDB();
                $dbw->commit( __METHOD__, 'flush' ); // flush existing transaction
 
                // Delete a row with a single DELETE without holding row locks over RTTs...
@@ -405,10 +503,11 @@ class JobQueueDB extends JobQueue {
                $key = $this->getRootJobCacheKey( $params['rootJobSignature'] );
                // Callers should call batchInsert() and then this function so that if the insert
                // fails, the de-duplication registration will be aborted. Since the insert is
-               // deferred till "transaction idle", do that same here, so that the ordering is
+               // deferred till "transaction idle", do the same here, so that the ordering is
                // maintained. Having only the de-duplication registration succeed would cause
                // jobs to become no-ops without any actual jobs that made them redundant.
-               $this->getMasterDB()->onTransactionIdle( function() use ( $params, $key ) {
+               list( $dbw, $scope ) = $this->getMasterDB();
+               $dbw->onTransactionIdle( function() use ( $params, $key, $scope ) {
                        global $wgMemc;
 
                        $timestamp = $wgMemc->get( $key ); // current last timestamp of this job
@@ -456,17 +555,34 @@ class JobQueueDB extends JobQueue {
        }
 
        /**
-        * @return DatabaseBase
+        * @return Array (DatabaseBase, ScopedCallback)
         */
        protected function getSlaveDB() {
-               return wfGetDB( DB_SLAVE, array(), $this->wiki );
+               return $this->getDB( DB_SLAVE );
        }
 
        /**
-        * @return DatabaseBase
+        * @return Array (DatabaseBase, ScopedCallback)
         */
        protected function getMasterDB() {
-               return wfGetDB( DB_MASTER, array(), $this->wiki );
+               return $this->getDB( DB_MASTER );
+       }
+
+       /**
+        * @param $index integer (DB_SLAVE/DB_MASTER)
+        * @return Array (DatabaseBase, ScopedCallback)
+        */
+       protected function getDB( $index ) {
+               $lb = ( $this->cluster !== false )
+                       ? wfGetLBFactory()->getExternalLB( $this->cluster, $this->wiki )
+                       : wfGetLB( $this->wiki );
+               $conn = $lb->getConnection( $index, array(), $this->wiki );
+               return array(
+                       $conn,
+                       new ScopedCallback( function() use ( $lb, $conn ) {
+                               $lb->reuseConnection( $conn );
+                       } )
+               );
        }
 
        /**
@@ -474,7 +590,7 @@ class JobQueueDB extends JobQueue {
         * @return array
         */
        protected function insertFields( Job $job ) {
-               $dbw = $this->getMasterDB();
+               list( $dbw, $scope ) = $this->getMasterDB();
                return array(
                        // Fields that describe the nature of the job
                        'job_cmd'       => $job->getType(),
@@ -495,9 +611,9 @@ class JobQueueDB extends JobQueue {
        /**
         * @return string
         */
-       private function getEmptinessCacheKey() {
+       private function getCacheKey( $property ) {
                list( $db, $prefix ) = wfSplitWikiID( $this->wiki );
-               return wfForeignMemcKey( $db, $prefix, 'jobqueue', $this->type, 'isempty' );
+               return wfForeignMemcKey( $db, $prefix, 'jobqueue', $this->type, $property );
        }
 
        /**
index 10fe51c..cf0215b 100644 (file)
@@ -31,16 +31,24 @@ class JobQueueGroup {
        /** @var Array */
        protected static $instances = array();
 
+       /** @var ProcessCacheLRU */
+       protected $cache;
+
        protected $wiki; // string; wiki ID
 
-       const TYPE_DEFAULT = 1; // integer; job not in $wgJobTypesExcludedFromDefaultQueue
+       const TYPE_DEFAULT = 1; // integer; jobs popped by default
        const TYPE_ANY     = 2; // integer; any job
 
+       const USE_CACHE = 1; // integer; use process cache
+
+       const PROC_CACHE_TTL = 15; // integer; seconds
+
        /**
         * @param $wiki string Wiki ID
         */
        protected function __construct( $wiki ) {
                $this->wiki = $wiki;
+               $this->cache = new ProcessCacheLRU( 1 );
        }
 
        /**
@@ -55,6 +63,15 @@ class JobQueueGroup {
                return self::$instances[$wiki];
        }
 
+       /**
+        * Destroy the singleton instances
+        *
+        * @return void
+        */
+       public static function destroySingletons() {
+               self::$instances = array();
+       }
+
        /**
         * @param $type string
         * @return JobQueue Job queue object for a given queue type
@@ -73,7 +90,8 @@ class JobQueueGroup {
        }
 
        /**
-        * Insert jobs into the respective queues of with the belong
+        * Insert jobs into the respective queues of with the belong.
+        * This inserts the jobs into the queue specified by $wgJobTypeConf.
         *
         * @param $jobs Job|array A single Job or a list of Jobs
         * @throws MWException
@@ -93,30 +111,49 @@ class JobQueueGroup {
 
                $ok = true;
                foreach ( $jobsByType as $type => $jobs ) {
-                       if ( !$this->get( $type )->batchPush( $jobs ) ) {
+                       if ( !$this->get( $type )->push( $jobs ) ) {
                                $ok = false;
                        }
                }
 
+               if ( $this->cache->has( 'queues-ready', 'list' ) ) {
+                       $list = $this->cache->get( 'queues-ready', 'list' );
+                       if ( count( array_diff( array_keys( $jobsByType ), $list ) ) ) {
+                               $this->cache->clear( 'queues-ready' );
+                       }
+               }
+
                return $ok;
        }
 
        /**
         * Pop a job off one of the job queues
         *
-        * @param $type integer JobQueueGroup::TYPE_* constant
+        * @param $queueType integer JobQueueGroup::TYPE_* constant
+        * @param $flags integer Bitfield of JobQueueGroup::USE_* constants
         * @return Job|bool Returns false on failure
         */
-       public function pop( $type = self::TYPE_DEFAULT ) {
-               $types = ( $type == self::TYPE_DEFAULT )
-                       ? $this->getDefaultQueueTypes()
-                       : $this->getQueueTypes();
+       public function pop( $queueType = self::TYPE_DEFAULT, $flags = 0 ) {
+               if ( $flags & self::USE_CACHE ) {
+                       if ( !$this->cache->has( 'queues-ready', 'list', self::PROC_CACHE_TTL ) ) {
+                               $this->cache->set( 'queues-ready', 'list', $this->getQueuesWithJobs() );
+                       }
+                       $types = $this->cache->get( 'queues-ready', 'list' );
+               } else {
+                       $types = $this->getQueuesWithJobs();
+               }
+
+               if ( $queueType == self::TYPE_DEFAULT ) {
+                       $types = array_intersect( $types, $this->getDefaultQueueTypes() );
+               }
                shuffle( $types ); // avoid starvation
 
                foreach ( $types as $type ) { // for each queue...
                        $job = $this->get( $type )->pop();
-                       if ( $job ) {
-                               return $job; // found
+                       if ( $job ) { // found
+                               return $job;
+                       } else { // not found
+                               $this->cache->clear( 'queues-ready' );
                        }
                }
 
@@ -178,4 +215,17 @@ class JobQueueGroup {
                }
                return $types;
        }
+
+       /**
+        * @return Array List of default job types that have non-empty queues
+        */
+       public function getDefaultQueuesWithJobs() {
+               $types = array();
+               foreach ( $this->getDefaultQueueTypes() as $type ) {
+                       if ( !$this->get( $type )->isEmpty() ) {
+                               $types[] = $type;
+                       }
+               }
+               return $types;
+       }
 }
index fb73bf1..3cb5894 100644 (file)
@@ -207,4 +207,3 @@ class DoubleRedirectJob extends Job {
                return self::$user;
        }
 }
-
index 6e056de..23418e3 100644 (file)
@@ -45,11 +45,11 @@ final class DuplicateJob extends Job {
         * @return Job
         */
        public static function newFromJob( Job $job ) {
-               $job = new self( $job->getTitle(), $job->getParams(), $job->getId() );
-               $job->command = $job->getType();
-               $job->params  = is_array( $job->params ) ? $job->params : array();
-               $job->params  = array( 'isDuplicate' => true ) + $job->params;
-               return $job;
+               $djob = new self( $job->getTitle(), $job->getParams(), $job->getId() );
+               $djob->command = $job->getType();
+               $djob->params  = is_array( $djob->params ) ? $djob->params : array();
+               $djob->params  = array( 'isDuplicate' => true ) + $djob->params;
+               return $djob;
        }
 
        public function run() {
index 4996984..b4ea27d 100644 (file)
@@ -42,6 +42,7 @@ class NullJob extends Job {
                if ( !isset( $this->params['usleep'] ) ) {
                        $this->params['usleep'] = 0;
                }
+               $this->removeDuplicates = !empty( $this->params['removeDuplicates'] );
        }
 
        public function run() {
index 2566072..fe84369 100644 (file)
@@ -424,7 +424,7 @@ class Services_JSON
                                */
 
                                // treat as a JSON object
-                               if (is_array($var) && count($var) && (array_keys($var) !== range(0, sizeof($var) - 1))) {
+                               if (is_array($var) && count($var) && (array_keys($var) !== range(0, count($var) - 1))) {
                                        $this->indent++;
                                        $properties = array_map(array($this, 'name_value'),
                                                                array_keys($var),
index 4ebbc49..76c5b6a 100644 (file)
@@ -57,6 +57,7 @@ class CSSJanus {
                'lookahead_not_open_brace' => null,
                'lookahead_not_closing_paren' => null,
                'lookahead_for_closing_paren' => null,
+               'lookahead_not_letter' => '(?![a-zA-Z])',
                'lookbehind_not_letter' => '(?<![a-zA-Z])',
                'chars_within_selector' => '[^\}]*?',
                'noflip_annotation' => '\/\*\s*@noflip\s*\*\/',
@@ -104,8 +105,8 @@ class CSSJanus {
                $patterns['noflip_class'] = "/({$patterns['noflip_annotation']}{$patterns['chars_within_selector']}})/i";
                $patterns['direction_ltr'] = "/({$patterns['direction']})ltr/i";
                $patterns['direction_rtl'] = "/({$patterns['direction']})rtl/i";
-               $patterns['left'] = "/{$patterns['lookbehind_not_letter']}(left){$patterns['lookahead_not_closing_paren']}{$patterns['lookahead_not_open_brace']}/i";
-               $patterns['right'] = "/{$patterns['lookbehind_not_letter']}(right){$patterns['lookahead_not_closing_paren']}{$patterns['lookahead_not_open_brace']}/i";
+               $patterns['left'] = "/{$patterns['lookbehind_not_letter']}(left){$patterns['lookahead_not_letter']}{$patterns['lookahead_not_closing_paren']}{$patterns['lookahead_not_open_brace']}/i";
+               $patterns['right'] = "/{$patterns['lookbehind_not_letter']}(right){$patterns['lookahead_not_letter']}{$patterns['lookahead_not_closing_paren']}{$patterns['lookahead_not_open_brace']}/i";
                $patterns['left_in_url'] = "/{$patterns['lookbehind_not_letter']}(left){$patterns['lookahead_for_closing_paren']}/i";
                $patterns['right_in_url'] = "/{$patterns['lookbehind_not_letter']}(right){$patterns['lookahead_for_closing_paren']}/i";
                $patterns['ltr_in_url'] = "/{$patterns['lookbehind_not_letter']}(ltr){$patterns['lookahead_for_closing_paren']}/i";
index 9b3e796..ef7587d 100644 (file)
@@ -41,7 +41,7 @@ abstract class GenericArrayObject extends ArrayObject {
         *
         * @return string
         */
-       public abstract function getObjectType();
+       abstract public function getObjectType();
 
        /**
         * @see SiteList::getNewOffset()
index cfc7f53..fae06ad 100644 (file)
@@ -848,4 +848,3 @@ class IEContentAnalyzer {
                return 'unknown';
        }
 }
-
index 1f94b43..ed9aa5a 100644 (file)
@@ -442,8 +442,11 @@ class ManualLogEntry extends LogEntryBase {
                        $this->timestamp = wfTimestampNow();
                }
 
+               # Trim spaces on user supplied text
+               $comment = trim( $this->getComment() );
+
                # Truncate for whole multibyte characters.
-               $comment = $wgContLang->truncate( $this->getComment(), 255 );
+               $comment = $wgContLang->truncate( $comment, 255 );
 
                $data = array(
                        'log_id' => $id,
index c478b43..d34bf6e 100644 (file)
@@ -74,7 +74,7 @@ class LogEventsList extends ContextSource {
        public function showHeader( $type ) {
                wfDeprecated( __METHOD__, '1.19' );
                // If only one log type is used, then show a special message...
-               $headerType = (count($type) == 1) ? $type[0] : '';
+               $headerType = (count( $type ) == 1) ? $type[0] : '';
                $out = $this->getOutput();
                if( LogPage::isLogType( $headerType ) ) {
                        $page = new LogPage( $headerType );
@@ -97,8 +97,8 @@ class LogEventsList extends ContextSource {
         * @param $filter: array
         * @param $tagFilter: array?
         */
-       public function showOptions( $types=array(), $user='', $page='', $pattern='', $year='',
-               $month = '', $filter = null, $tagFilter='' ) {
+       public function showOptions( $types=array(), $user = '', $page = '', $pattern = '', $year = '',
+               $month = '', $filter = null, $tagFilter = '' ) {
                global $wgScript, $wgMiserMode;
 
                $title = SpecialPage::getTitleFor( 'Log' );
@@ -117,7 +117,7 @@ class LogEventsList extends ContextSource {
                $html .= $this->getExtraInputs( $types ) . "\n";
 
                // Title pattern, if allowed
-               if (!$wgMiserMode) {
+               if ( !$wgMiserMode ) {
                        $html .= $this->getTitlePattern( $pattern ) . "\n";
                }
 
@@ -125,12 +125,12 @@ class LogEventsList extends ContextSource {
                $html .= Xml::tags( 'p', null, Xml::dateMenu( $year, $month ) );
 
                // Tag filter
-               if ($tagSelector) {
+               if ( $tagSelector ) {
                        $html .= Xml::tags( 'p', null, implode( '&#160;', $tagSelector ) );
                }
 
                // Filter links
-               if ($filter) {
+               if ( $filter ) {
                        $html .= Xml::tags( 'p', null, $this->getFilterLinks( $filter ) );
                }
 
@@ -162,7 +162,7 @@ class LogEventsList extends ContextSource {
                        $query = $this->getDefaultQuery();
                        $queryKey = "hide_{$type}_log";
 
-                       $hideVal = 1 - intval($val);
+                       $hideVal = 1 - intval( $val );
                        $query[$queryKey] = $hideVal;
 
                        $link = Linker::linkKnown(
@@ -176,7 +176,7 @@ class LogEventsList extends ContextSource {
                        $hiddens .= Html::hidden( "hide_{$type}_log", $val ) . "\n";
                }
                // Build links
-               return '<small>'.$this->getLanguage()->pipeList( $links ) . '</small>' . $hiddens;
+               return '<small>' . $this->getLanguage()->pipeList( $links ) . '</small>' . $hiddens;
        }
 
        private function getDefaultQuery() {
@@ -198,7 +198,7 @@ class LogEventsList extends ContextSource {
         * @return String: Formatted HTML
         */
        private function getTypeMenu( $queryTypes ) {
-               $queryType = count($queryTypes) == 1 ? $queryTypes[0] : '';
+               $queryType = count( $queryTypes ) == 1 ? $queryTypes[0] : '';
                $selector = $this->getTypeSelector();
                $selector->setDefault( $queryType );
                return $selector->getHtml();
@@ -212,7 +212,7 @@ class LogEventsList extends ContextSource {
        public function getTypeSelector() {
                $typesByName = array(); // Temporary array
                // First pass to load the log names
-               foreach(  LogPage::validTypes() as $type ) {
+               foreach( LogPage::validTypes() as $type ) {
                        $page = new LogPage( $type );
                        $restriction = $page->getRestriction();
                        if ( $this->getUser()->isAllowed( $restriction ) ) {
@@ -221,7 +221,7 @@ class LogEventsList extends ContextSource {
                }
 
                // Second pass to sort by name
-               asort($typesByName);
+               asort( $typesByName );
 
                // Always put "All public logs" on top
                $public = $typesByName[''];
@@ -273,10 +273,10 @@ class LogEventsList extends ContextSource {
        private function getExtraInputs( $types ) {
                $offender = $this->getRequest()->getVal( 'offender' );
                $user = User::newFromName( $offender, false );
-               if( !$user || ($user->getId() == 0 && !IP::isIPAddress($offender) ) ) {
+               if( !$user || ( $user->getId() == 0 && !IP::isIPAddress( $offender ) ) ) {
                        $offender = ''; // Blank field if invalid
                }
-               if( count($types) == 1 && $types[0] == 'suppress' ) {
+               if( count( $types ) == 1 && $types[0] == 'suppress' ) {
                        return Xml::inputLabel( $this->msg( 'revdelete-offender' )->text(), 'offender',
                                'mw-log-offender', 20, $offender );
                }
@@ -383,8 +383,8 @@ class LogEventsList extends ContextSource {
         * @param $right string
         * @return Boolean
         */
-       public static function typeAction( $row, $type, $action, $right='' ) {
-               $match = is_array($type) ?
+       public static function typeAction( $row, $type, $action, $right = '' ) {
+               $match = is_array( $type ) ?
                        in_array( $row->log_type, $type ) : $row->log_type == $type;
                if( $match ) {
                        $match = is_array( $action ) ?
@@ -468,13 +468,13 @@ class LogEventsList extends ContextSource {
         * @return Integer Number of total log items (not limited by $lim)
         */
        public static function showLogExtract(
-               &$out, $types=array(), $page='', $user='', $param = array()
+               &$out, $types=array(), $page = '', $user = '', $param = array()
        ) {
                $defaultParameters = array(
                        'lim' => 25,
                        'conds' => array(),
                        'showIfEmpty' => true,
-                       'msgKey' => array(''),
+                       'msgKey' => array( '' ),
                        'wrap' => "$1",
                        'flags' => 0
                );
@@ -520,8 +520,8 @@ class LogEventsList extends ContextSource {
                                }
                        }
                        $s .= $loglist->beginLogEventsList() .
-                                $logBody .
-                                $loglist->endLogEventsList();
+                               $logBody .
+                               $loglist->endLogEventsList();
                } else {
                        if ( $showIfEmpty ) {
                                $s = Html::rawElement( 'div', array( 'class' => 'mw-warning-logempty' ),
@@ -560,7 +560,7 @@ class LogEventsList extends ContextSource {
                /* hook can return false, if we don't want the message to be emitted (Wikia BugId:7093) */
                if ( wfRunHooks( 'LogEventsListShowLogExtract', array( &$s, $types, $page, $user, $param ) ) ) {
                        // $out can be either an OutputPage object or a String-by-reference
-                       if ( $out instanceof OutputPage ){
+                       if ( $out instanceof OutputPage ) {
                                $out->addHTML( $s );
                        } else {
                                $out = $s;
@@ -575,24 +575,31 @@ class LogEventsList extends ContextSource {
         *
         * @param $db DatabaseBase
         * @param $audience string, public/user
+        * @param $user User object to check, or null to use $wgUser
         * @return Mixed: string or false
         */
-       public static function getExcludeClause( $db, $audience = 'public' ) {
-               global $wgLogRestrictions, $wgUser;
+       public static function getExcludeClause( $db, $audience = 'public', User $user = null ) {
+               global $wgLogRestrictions;
+
+               if ( $audience != 'public' && $user === null ) {
+                       global $wgUser;
+                       $user = $wgUser;
+               }
+
                // Reset the array, clears extra "where" clauses when $par is used
                $hiddenLogs = array();
+
                // Don't show private logs to unprivileged users
                foreach( $wgLogRestrictions as $logType => $right ) {
-                       if( $audience == 'public' || !$wgUser->isAllowed($right) ) {
-                               $safeType = $db->strencode( $logType );
-                               $hiddenLogs[] = $safeType;
+                       if( $audience == 'public' || !$user->isAllowed( $right ) ) {
+                               $hiddenLogs[] = $logType;
                        }
                }
-               if( count($hiddenLogs) == 1 ) {
+               if( count( $hiddenLogs ) == 1 ) {
                        return 'log_type != ' . $db->addQuotes( $hiddenLogs[0] );
                } elseif( $hiddenLogs ) {
-                       return 'log_type NOT IN (' . $db->makeList($hiddenLogs) . ')';
+                       return 'log_type NOT IN (' . $db->makeList( $hiddenLogs ) . ')';
                }
                return false;
        }
- }
+}
index 3029925..5ff0434 100644 (file)
@@ -198,12 +198,12 @@ class LogFormatter {
                        case 'move':
                                switch( $entry->getSubtype() ) {
                                        case 'move':
-                                               $movesource =  $parameters['4::target'];
+                                               $movesource = $parameters['4::target'];
                                                $text = wfMessage( '1movedto2' )
                                                        ->rawParams( $target, $movesource )->inContentLanguage()->escaped();
                                                break;
                                        case 'move_redir':
-                                               $movesource =  $parameters['4::target'];
+                                               $movesource = $parameters['4::target'];
                                                $text = wfMessage( '1movedto2_redir' )
                                                        ->rawParams( $target, $movesource )->inContentLanguage()->escaped();
                                                break;
@@ -270,6 +270,7 @@ class LogFormatter {
                                                        ->inContentLanguage()->escaped();
                                                break;
                                        case 'create2':
+                                       case 'byemail':
                                                $text = wfMessage( 'newuserlog-create2-entry' )
                                                        ->rawParams( $target )->inContentLanguage()->escaped();
                                                break;
@@ -587,7 +588,7 @@ class LogFormatter {
                        return $this->msg( $message )->text();
                }
 
-               $content =  $this->msg( $message )->escaped();
+               $content = $this->msg( $message )->escaped();
                $attribs = array( 'class' => 'history-deleted' );
                return Html::rawElement( 'span', $attribs, $content );
        }
@@ -712,7 +713,7 @@ class LegacyLogFormatter extends LogFormatter {
 
                $performer = $this->getPerformerElement();
                if ( !$this->irctext ) {
-                       $action = $performer .  $this->msg( 'word-separator' )->text() . $action;
+                       $action = $performer . $this->msg( 'word-separator' )->text() . $action;
                }
 
                return $action;
@@ -891,9 +892,11 @@ class DeleteLogFormatter extends LogFormatter {
                $params = parent::getMessageParameters();
                $subtype = $this->entry->getSubtype();
                if ( in_array( $subtype, array( 'event', 'revision' ) ) ) {
+                       // $params[3] here is 'revision' for page revisions, 'oldimage' for file versions, or a comma-separated list of log_ids for log entries.
+                       // $subtype here is 'revision' for page revisions and file versions, or 'event' for log entries.
                        if (
-                               ($subtype === 'event' && count( $params ) === 6 ) ||
-                               ($subtype === 'revision' && isset( $params[3] ) && $params[3] === 'revision' )
+                               ( $subtype === 'event' && count( $params ) === 6 ) ||
+                               ( $subtype === 'revision' && isset( $params[3] ) && ( $params[3] === 'revision' || $params[3] === 'oldimage' ) )
                        ) {
                                $paramStart = $subtype === 'revision' ? 4 : 3;
 
@@ -910,7 +913,7 @@ class DeleteLogFormatter extends LogFormatter {
                                foreach ( $extra as $v ) {
                                        $changes[] = $this->msg( $v )->plain();
                                }
-                               $changeText =  $this->context->getLanguage()->listToText( $changes );
+                               $changeText = $this->context->getLanguage()->listToText( $changes );
 
 
                                $newParams = array_slice( $params, 0, 3 );
@@ -954,7 +957,7 @@ class DeleteLogFormatter extends LogFormatter {
                                $this->msg( $message )->escaped(),
                                array(),
                                array( 'target' => $this->entry->getTarget()->getPrefixedDBkey() )
-                        );
+                       );
                        return $this->msg( 'parentheses' )->rawParams( $revert )->escaped();
 
                case 'revision': // If an edit was hidden from a page give a review link to the history
@@ -1083,7 +1086,8 @@ class PatrolLogFormatter extends LogFormatter {
 class NewUsersLogFormatter extends LogFormatter {
        protected function getMessageParameters() {
                $params = parent::getMessageParameters();
-               if ( $this->entry->getSubtype() === 'create2' ) {
+               $subtype = $this->entry->getSubtype();
+               if ( $subtype === 'create2' || $subtype === 'byemail' ) {
                        if ( isset( $params[3] ) ) {
                                $target = User::newFromId( $params[3] );
                        } else {
@@ -1106,7 +1110,8 @@ class NewUsersLogFormatter extends LogFormatter {
        }
 
        public function getPreloadTitles() {
-               if ( $this->entry->getSubtype() === 'create2' ) {
+               $subtype = $this->entry->getSubtype();
+               if ( $subtype === 'create2' || $subtype === 'byemail' ) {
                        //add the user talk to LinkBatch for the userLink
                        return array( Title::makeTitle( NS_USER_TALK, $this->entry->getTarget()->getText() ) );
                }
index 07238a0..9778f27 100644 (file)
@@ -271,7 +271,7 @@ class LogPage {
                                                $params[2] = isset( $params[2] ) ?
                                                        self::formatBlockFlags( $params[2], $langObj ) : '';
                                        // Page protections
-                                       } elseif ( $type == 'protect' && count($params) == 3 ) {
+                                       } elseif ( $type == 'protect' && count( $params ) == 3 ) {
                                                // Restrictions and expiries
                                                if( $skin ) {
                                                        $details .= $wgLang->getDirMark() . htmlspecialchars( " {$params[1]}" );
@@ -421,6 +421,9 @@ class LogPage {
                        $comment = '';
                }
 
+               # Trim spaces on user supplied text
+               $comment = trim( $comment );
+
                # Truncate for whole multibyte characters.
                $comment = $wgContLang->truncate( $comment, 255 );
 
index ea1be8e..fad1058 100644 (file)
@@ -71,7 +71,7 @@ class LogPager extends ReverseChronologicalPager {
        public function getFilterParams() {
                global $wgFilterLogTypes;
                $filters = array();
-               if( count($this->types) ) {
+               if( count( $this->types ) ) {
                        return $filters;
                }
                foreach( $wgFilterLogTypes as $type => $default ) {
@@ -95,13 +95,15 @@ class LogPager extends ReverseChronologicalPager {
         */
        private function limitType( $types ) {
                global $wgLogRestrictions;
+
+               $user = $this->getUser();
                // If $types is not an array, make it an array
                $types = ($types === '') ? array() : (array)$types;
                // Don't even show header for private logs; don't recognize it...
                $needReindex = false;
                foreach ( $types as $type ) {
                        if( isset( $wgLogRestrictions[$type] )
-                               && !$this->getUser()->isAllowed($wgLogRestrictions[$type])
+                               && !$user->isAllowed( $wgLogRestrictions[$type] )
                        ) {
                                $needReindex = true;
                                $types = array_diff( $types, array( $type ) );
@@ -116,14 +118,14 @@ class LogPager extends ReverseChronologicalPager {
                // Don't show private logs to unprivileged users.
                // Also, only show them upon specific request to avoid suprises.
                $audience = $types ? 'user' : 'public';
-               $hideLogs = LogEventsList::getExcludeClause( $this->mDb, $audience );
+               $hideLogs = LogEventsList::getExcludeClause( $this->mDb, $audience, $user );
                if( $hideLogs !== false ) {
                        $this->mConds[] = $hideLogs;
                }
-               if( count($types) ) {
+               if( count( $types ) ) {
                        $this->mConds['log_type'] = $types;
                        // Set typeCGI; used in url param for paging
-                       if( count($types) == 1 ) $this->typeCGI = $types[0];
+                       if( count( $types ) == 1 ) $this->typeCGI = $types[0];
                }
        }
 
@@ -138,7 +140,7 @@ class LogPager extends ReverseChronologicalPager {
                        return false;
                }
                $usertitle = Title::makeTitleSafe( NS_USER, $name );
-               if( is_null($usertitle) ) {
+               if( is_null( $usertitle ) ) {
                        return false;
                }
                /* Fetch userid at first, if known, provides awesome query plan afterwards */
@@ -152,9 +154,9 @@ class LogPager extends ReverseChronologicalPager {
                        // Paranoia: avoid brute force searches (bug 17342)
                        $user = $this->getUser();
                        if( !$user->isAllowed( 'deletedhistory' ) ) {
-                               $this->mConds[] = $this->mDb->bitAnd('log_deleted', LogPage::DELETED_USER) . ' = 0';
+                               $this->mConds[] = $this->mDb->bitAnd( 'log_deleted', LogPage::DELETED_USER ) . ' = 0';
                        } elseif( !$user->isAllowed( 'suppressrevision' ) ) {
-                               $this->mConds[] = $this->mDb->bitAnd('log_deleted', LogPage::SUPPRESSED_USER) .
+                               $this->mConds[] = $this->mDb->bitAnd( 'log_deleted', LogPage::SUPPRESSED_USER ) .
                                        ' != ' . LogPage::SUPPRESSED_USER;
                        }
                        $this->performer = $usertitle->getText();
@@ -207,9 +209,9 @@ class LogPager extends ReverseChronologicalPager {
                // Paranoia: avoid brute force searches (bug 17342)
                $user = $this->getUser();
                if( !$user->isAllowed( 'deletedhistory' ) ) {
-                       $this->mConds[] = $db->bitAnd('log_deleted', LogPage::DELETED_ACTION) . ' = 0';
+                       $this->mConds[] = $db->bitAnd( 'log_deleted', LogPage::DELETED_ACTION) . ' = 0';
                } elseif( !$user->isAllowed( 'suppressrevision' ) ) {
-                       $this->mConds[] = $db->bitAnd('log_deleted', LogPage::SUPPRESSED_ACTION) .
+                       $this->mConds[] = $db->bitAnd( 'log_deleted', LogPage::SUPPRESSED_ACTION) .
                                ' != ' . LogPage::SUPPRESSED_ACTION;
                }
        }
@@ -249,10 +251,10 @@ class LogPager extends ReverseChronologicalPager {
                # avoids site-breaking filesorts.
                } elseif( $this->title || $this->pattern || $this->performer ) {
                        $index['logging'] = array( 'page_time', 'user_time' );
-                       if( count($this->types) == 1 ) {
+                       if( count( $this->types ) == 1 ) {
                                $index['logging'][] = 'log_user_type_time';
                        }
-               } elseif( count($this->types) == 1 ) {
+               } elseif( count( $this->types ) == 1 ) {
                        $index['logging'] = 'type_time';
                } else {
                        $index['logging'] = 'times';
index a515c63..46d1b95 100644 (file)
@@ -62,7 +62,7 @@ class BmpHandler extends BitmapHandler {
                        return false;
                }
                $header = fread( $f, 54 );
-               fclose($f);
+               fclose( $f );
 
                // Extract binary form of width and height from the header
                $w = substr( $header, 18, 4);
index 2b04f78..55deef0 100644 (file)
@@ -190,7 +190,7 @@ class BitmapMetadataHandler {
         * @param $filename String full path to file
         * @return Array Array for storage in img_metadata.
         */
-       static public function PNG ( $filename ) {
+       public static function PNG ( $filename ) {
                $showXMP = function_exists( 'xml_parser_create_ns' );
 
                $meta = new self();
@@ -219,7 +219,7 @@ class BitmapMetadataHandler {
         * @param $filename string full path to file
         * @return Array metadata array
         */
-       static public function GIF ( $filename ) {
+       public static function GIF ( $filename ) {
 
                $meta = new self();
                $baseArray = GIFMetadataExtractor::getMetadata( $filename );
@@ -260,7 +260,7 @@ class BitmapMetadataHandler {
         * @throws MWException
         * @return Array The metadata.
         */
-       static public function Tiff ( $filename ) {
+       public static function Tiff ( $filename ) {
                if ( file_exists( $filename ) ) {
                        $byteOrder = self::getTiffByteOrder( $filename );
                        if ( !$byteOrder ) {
index 84672e0..0a39a2c 100644 (file)
@@ -183,7 +183,7 @@ class DjVuHandler extends ImageHandler {
                if ( $wgDjvuPostProcessor ) {
                        $cmd .= " | {$wgDjvuPostProcessor}";
                }
-               $cmd .= ' > ' . wfEscapeShellArg($dstPath) . ') 2>&1';
+               $cmd .= ' > ' . wfEscapeShellArg( $dstPath ) . ') 2>&1';
                wfProfileIn( 'ddjvu' );
                wfDebug( __METHOD__.": $cmd\n" );
                $retval = '';
@@ -194,7 +194,7 @@ class DjVuHandler extends ImageHandler {
                if ( $retval != 0 || $removed ) {
                        wfDebugLog( 'thumbnail',
                                sprintf( 'thumbnail failed on %s: error %d "%s" from "%s"',
-                                       wfHostname(), $retval, trim($err), $cmd ) );
+                                       wfHostname(), $retval, trim( $err ), $cmd ) );
                        return new MediaTransformError( 'thumbnail_error', $width, $height, $err );
                } else {
                        $params = array(
@@ -228,7 +228,7 @@ class DjVuHandler extends ImageHandler {
         * @param $gettext Boolean: DOCUMENT (Default: false)
         * @return bool
         */
-       function getMetaTree( $image , $gettext = false ) {
+       function getMetaTree( $image, $gettext = false ) {
                if ( isset( $image->dejaMetaTree ) ) {
                        return $image->dejaMetaTree;
                }
@@ -247,7 +247,7 @@ class DjVuHandler extends ImageHandler {
                        $image->djvuTextTree = false;
                        $tree = new SimpleXMLElement( $metadata );
                        if( $tree->getName() == 'mw-djvu' ) {
-                               foreach($tree->children() as $b){
+                               foreach( $tree->children() as $b ) {
                                        if( $b->getName() == 'DjVuTxt' ) {
                                                $image->djvuTextTree = $b;
                                        }
@@ -322,7 +322,7 @@ class DjVuHandler extends ImageHandler {
                }
        }
 
-       function getPageText( $image, $page ){
+       function getPageText( $image, $page ) {
                $tree = $this->getMetaTree( $image, true );
                if ( !$tree ) {
                        return false;
index cad9c1b..5300947 100644 (file)
@@ -43,9 +43,9 @@ class DjVuImage {
                $this->mFilename = $filename;
        }
 
-        /**
-         * @const DJVUTXT_MEMORY_LIMIT Memory limit for the DjVu description software
-         */
+       /**
+        * @const DJVUTXT_MEMORY_LIMIT Memory limit for the DjVu description software
+        */
        const DJVUTXT_MEMORY_LIMIT = 300000;
 
        /**
@@ -260,7 +260,7 @@ class DjVuImage {
                if ( isset( $wgDjvuTxt ) ) {
                        wfProfileIn( 'djvutxt' );
                        $cmd = wfEscapeShellArg( $wgDjvuTxt ) . ' --detail=page ' . wfEscapeShellArg( $this->mFilename ) ;
-                       wfDebug( __METHOD__.": $cmd\n" );
+                       wfDebug( __METHOD__ . ": $cmd\n" );
                        $retval = '';
                        $txt = wfShellExec( $cmd, $retval, array(), array( 'memory' => self::DJVUTXT_MEMORY_LIMIT ) );
                        wfProfileOut( 'djvutxt' );
index bdacbc8..63b2122 100644 (file)
@@ -290,8 +290,8 @@ class Exif {
                        // Only give a warning for b/c, since originally we didn't
                        // require this. The number of things affected by this is
                        // rather small.
-                       wfWarn( 'Exif class did not have byte order specified. '
-                        . 'Some properties may be decoded incorrectly.' );
+                       wfWarn( 'Exif class did not have byte order specified. ' .
+                               'Some properties may be decoded incorrectly.' );
                        $this->byteOrder = 'BE'; // BE seems about twice as popular as LE in jpg's.
                }
 
@@ -322,7 +322,7 @@ class Exif {
 
                foreach ( array_keys( $this->mRawExifData ) as $section ) {
                        if ( !in_array( $section, array_keys( $this->mExifTags ) ) ) {
-                               $this->debug( $section , __FUNCTION__, "'$section' is not a valid Exif section" );
+                               $this->debug( $section, __FUNCTION__, "'$section' is not a valid Exif section" );
                                continue;
                        }
 
@@ -396,8 +396,8 @@ class Exif {
                if ( isset ( $this->mFilteredExifData['ComponentsConfiguration'] ) ) {
                        $val = $this->mFilteredExifData['ComponentsConfiguration'];
                        $ccVals = array();
-                       for ($i = 0; $i < strlen($val); $i++) {
-                               $ccVals[$i] = ord( substr($val, $i, 1) );
+                       for ( $i = 0; $i < strlen( $val ); $i++ ) {
+                               $ccVals[$i] = ord( substr( $val, $i, 1 ) );
                        }
                        $ccVals['_type'] = 'ol'; //this is for formatting later.
                        $this->mFilteredExifData['ComponentsConfiguration'] = $ccVals;
@@ -413,11 +413,11 @@ class Exif {
                if ( isset ( $this->mFilteredExifData['GPSVersion'] ) ) {
                        $val = $this->mFilteredExifData['GPSVersion'];
                        $newVal = '';
-                       for ($i = 0; $i < strlen($val); $i++) {
+                       for ( $i = 0; $i < strlen( $val ); $i++ ) {
                                if ( $i !== 0 ) {
                                        $newVal .= '.';
                                }
-                               $newVal .= ord( substr($val, $i, 1) );
+                               $newVal .= ord( substr( $val, $i, 1 ) );
                        }
                        if ( $this->byteOrder === 'LE' ) {
                                // Need to reverse the string
@@ -442,17 +442,17 @@ class Exif {
        private function charCodeString ( $prop ) {
                if ( isset( $this->mFilteredExifData[$prop] ) ) {
 
-                       if ( strlen($this->mFilteredExifData[$prop]) <= 8 ) {
+                       if ( strlen( $this->mFilteredExifData[$prop] ) <= 8 ) {
                                //invalid. Must be at least 9 bytes long.
 
-                               $this->debug( $this->mFilteredExifData[$prop] , __FUNCTION__, false );
-                               unset($this->mFilteredExifData[$prop]);
+                               $this->debug( $this->mFilteredExifData[$prop], __FUNCTION__, false );
+                               unset( $this->mFilteredExifData[$prop] );
                                return;
                        }
-                       $charCode = substr( $this->mFilteredExifData[$prop], 0, 8);
-                       $val = substr( $this->mFilteredExifData[$prop], 8);
+                       $charCode = substr( $this->mFilteredExifData[$prop], 0, 8 );
+                       $val = substr( $this->mFilteredExifData[$prop], 8 );
 
-                       switch ($charCode) {
+                       switch ( $charCode ) {
                                case "\x4A\x49\x53\x00\x00\x00\x00\x00":
                                        //JIS
                                        $charset = "Shift-JIS";
@@ -466,9 +466,9 @@ class Exif {
                        }
                        // This could possibly check to see if iconv is really installed
                        // or if we're using the compatibility wrapper in globalFunctions.php
-                       if ($charset) {
+                       if ( $charset ) {
                                wfSuppressWarnings();
-                               $val = iconv($charset, 'UTF-8//IGNORE', $val);
+                               $val = iconv( $charset, 'UTF-8//IGNORE', $val );
                                wfRestoreWarnings();
                        } else {
                                // if valid utf-8, assume that, otherwise assume windows-1252
@@ -476,17 +476,17 @@ class Exif {
                                UtfNormal::quickIsNFCVerify( $valCopy ); //validates $valCopy.
                                if ( $valCopy !== $val ) {
                                        wfSuppressWarnings();
-                                       $val = iconv('Windows-1252', 'UTF-8//IGNORE', $val);
+                                       $val = iconv( 'Windows-1252', 'UTF-8//IGNORE', $val );
                                        wfRestoreWarnings();
                                }
                        }
 
                        //trim and check to make sure not only whitespace.
-                       $val = trim($val);
+                       $val = trim( $val );
                        if ( strlen( $val ) === 0 ) {
                                //only whitespace.
-                               $this->debug( $this->mFilteredExifData[$prop] , __FUNCTION__, "$prop: Is only whitespace" );
-                               unset($this->mFilteredExifData[$prop]);
+                               $this->debug( $this->mFilteredExifData[$prop], __FUNCTION__, "$prop: Is only whitespace" );
+                               unset( $this->mFilteredExifData[$prop] );
                                return;
                        }
 
@@ -580,7 +580,7 @@ class Exif {
         */
        function getFormattedData() {
                wfDeprecated( __METHOD__, '1.18' );
-               if (!$this->mFormattedExifData) {
+               if ( !$this->mFormattedExifData ) {
                        $this->makeFormattedData();
                }
                return $this->mFormattedExifData;
@@ -612,7 +612,7 @@ class Exif {
         * @return bool
         */
        private function isByte( $in ) {
-               if ( !is_array( $in ) && sprintf('%d', $in) == $in && $in >= 0 && $in <= 255 ) {
+               if ( !is_array( $in ) && sprintf( '%d', $in ) == $in && $in >= 0 && $in <= 255 ) {
                        $this->debug( $in, __FUNCTION__, true );
                        return true;
                } else {
@@ -648,7 +648,7 @@ class Exif {
         * @return bool
         */
        private function isShort( $in ) {
-               if ( !is_array( $in ) && sprintf('%d', $in) == $in && $in >= 0 && $in <= 65536 ) {
+               if ( !is_array( $in ) && sprintf( '%d', $in ) == $in && $in >= 0 && $in <= 65536 ) {
                        $this->debug( $in, __FUNCTION__, true );
                        return true;
                } else {
@@ -662,7 +662,7 @@ class Exif {
         * @return bool
         */
        private function isLong( $in ) {
-               if ( !is_array( $in ) && sprintf('%d', $in) == $in && $in >= 0 && $in <= 4294967296 ) {
+               if ( !is_array( $in ) && sprintf( '%d', $in ) == $in && $in >= 0 && $in <= 4294967296 ) {
                        $this->debug( $in, __FUNCTION__, true );
                        return true;
                } else {
@@ -843,4 +843,3 @@ class Exif {
                }
        }
 }
-
index 34a1f51..c34e67b 100644 (file)
@@ -34,8 +34,8 @@ class ExifBitmapHandler extends BitmapHandler {
 
        function convertMetadataVersion( $metadata, $version = 1 ) {
                // basically flattens arrays.
-               $version = explode(';', $version, 2);
-               $version = intval($version[0]);
+               $version = explode( ';', $version, 2 );
+               $version = intval( $version[0] );
                if ( $version < 1 || $version >= 2 ) {
                        return $metadata;
                }
@@ -56,7 +56,7 @@ class ExifBitmapHandler extends BitmapHandler {
                        && is_array( $metadata['Software'][0])
                        && isset( $metadata['Software'][0][0] )
                        && isset( $metadata['Software'][0][1])
-                ) {
+               ) {
                        $metadata['Software'] = $metadata['Software'][0][0] . ' (Version '
                                . $metadata['Software'][0][1] . ')';
                }
@@ -102,11 +102,11 @@ class ExifBitmapHandler extends BitmapHandler {
                                $exif['MEDIAWIKI_EXIF_VERSION'] == 1 )
                        {
                                //back-compatible but old
-                               wfDebug( __METHOD__.": back-compat version\n" );
+                               wfDebug( __METHOD__ . ": back-compat version\n" );
                                return self::METADATA_COMPATIBLE;
                        }
                        # Wrong (non-compatible) version
-                       wfDebug( __METHOD__.": wrong version\n" );
+                       wfDebug( __METHOD__ . ": wrong version\n" );
                        return self::METADATA_BAD;
                }
                return self::METADATA_GOOD;
@@ -163,7 +163,7 @@ class ExifBitmapHandler extends BitmapHandler {
                        $rotation = 0;
                }
 
-               if ($rotation == 90 || $rotation == 270) {
+               if ( $rotation == 90 || $rotation == 270 ) {
                        $width = $gis[0];
                        $gis[0] = $gis[1];
                        $gis[1] = $width;
@@ -225,4 +225,3 @@ class ExifBitmapHandler extends BitmapHandler {
                return 0;
        }
 }
-
index f2710f7..7109f42 100644 (file)
@@ -80,20 +80,20 @@ class FormatMetadata {
                        }
 
                        //This is done differently as the tag is an array.
-                       if ($tag == 'GPSTimeStamp' && count($vals) === 3) {
+                       if ( $tag == 'GPSTimeStamp' && count( $vals ) === 3) {
                                //hour min sec array
 
-                               $h = explode('/', $vals[0]);
-                               $m = explode('/', $vals[1]);
-                               $s = explode('/', $vals[2]);
+                               $h = explode( '/', $vals[0] );
+                               $m = explode( '/', $vals[1] );
+                               $s = explode( '/', $vals[2] );
 
                                // this should already be validated
                                // when loaded from file, but it could
                                // come from a foreign repo, so be
                                // paranoid.
-                               if ( !isset($h[1])
-                                       || !isset($m[1])
-                                       || !isset($s[1])
+                               if ( !isset( $h[1] )
+                                       || !isset( $m[1] )
+                                       || !isset( $s[1] )
                                        || $h[1] == 0
                                        || $m[1] == 0
                                        || $s[1] == 0
@@ -631,7 +631,7 @@ class FormatMetadata {
                                case 'MaxApertureValue':
                                        if ( strpos( $val, '/' ) !== false ) {
                                                // need to expand this earlier to calculate fNumber
-                                               list($n, $d) = explode('/', $val);
+                                               list( $n, $d ) = explode( '/', $val );
                                                if ( is_numeric( $n ) && is_numeric( $d ) ) {
                                                        $val = $n / $d;
                                                }
@@ -809,7 +809,7 @@ class FormatMetadata {
 
                                case 'LanguageCode':
                                        $lang = Language::fetchLanguageName( strtolower( $val ), $wgLang->getCode() );
-                                       if ($lang) {
+                                       if ( $lang ) {
                                                $val = htmlspecialchars( $lang );
                                        } else {
                                                $val = htmlspecialchars( $val );
@@ -850,7 +850,7 @@ class FormatMetadata {
                }
 
                if ( !is_array( $vals ) ) {
-                        return $vals; // do nothing if not an array;
+                       return $vals; // do nothing if not an array;
                }
                elseif ( count( $vals ) === 1 && $type !== 'lang' ) {
                        return $vals[0];
@@ -899,7 +899,7 @@ class FormatMetadata {
                                        }
                                        $content .= self::langItem(
                                                $vals[$cLang], $cLang,
-                                                $isDefault, $noHtml );
+                                               $isDefault, $noHtml );
 
                                        unset( $vals[$cLang] );
                                }
@@ -915,8 +915,8 @@ class FormatMetadata {
                                }
                                if ( $defaultItem !== false ) {
                                        $content = self::langItem( $defaultItem,
-                                               $defaultLang, true, $noHtml )
-                                                . $content;
+                                               $defaultLang, true, $noHtml ) .
+                                               $content;
                                }
                                if ( $noHtml ) {
                                        return $content;
@@ -951,8 +951,8 @@ class FormatMetadata {
         */
        private static function langItem( $value, $lang, $default = false, $noHtml = false ) {
                if ( $lang === false && $default === false) {
-                       throw new MWException('$lang and $default cannot both '
-                               . 'be false.');
+                       throw new MWException( '$lang and $default cannot both '
+                               . 'be false.' );
                }
 
                if ( $noHtml ) {
@@ -1017,7 +1017,7 @@ class FormatMetadata {
        static function msg( $tag, $val, $arg = null, $arg2 = null ) {
                global $wgContLang;
 
-               if ($val === '')
+               if ( $val === '' )
                        $val = 'value';
                return wfMessage( $wgContLang->lc( "exif-$tag-$val" ), $arg, $arg2 )->text();
        }
@@ -1033,10 +1033,10 @@ class FormatMetadata {
        static function formatNum( $num, $round = false ) {
                global $wgLang;
                $m = array();
-               if( is_array($num) ) {
+               if( is_array( $num ) ) {
                        $out = array();
                        foreach( $num as $number ) {
-                               $out[] = self::formatNum($number);
+                               $out[] = self::formatNum( $number );
                        }
                        return $wgLang->commaList( $out );
                }
@@ -1120,13 +1120,13 @@ class FormatMetadata {
         * @param $val String: The 8 digit news code.
         * @return string The human readable form
         */
-       static private function convertNewsCode( $val ) {
+       private static function convertNewsCode( $val ) {
                if ( !preg_match( '/^\d{8}$/D', $val ) ) {
                        // Not a valid news code.
                        return $val;
                }
                $cat = '';
-               switch( substr( $val , 0, 2 ) ) {
+               switch( substr( $val, 0, 2 ) ) {
                        case '01':
                                $cat = 'ace';
                                break;
@@ -1238,7 +1238,7 @@ class FormatMetadata {
         * @return String of html-ish looking wikitext
         */
        public static function collapseContactInfo( $vals ) {
-               if( ! ( isset( $vals['CiAdrExtadr'] )
+               if( !( isset( $vals['CiAdrExtadr'] )
                        || isset( $vals['CiAdrCity'] )
                        || isset( $vals['CiAdrCtry'] )
                        || isset( $vals['CiEmailWork'] )
index da8fc6f..2e532fe 100644 (file)
@@ -39,7 +39,7 @@ class GIFHandler extends BitmapHandler {
                        return self::BROKEN_FILE;
                }
 
-               return serialize($parsedGIFMetadata);
+               return serialize( $parsedGIFMetadata );
        }
 
        /**
@@ -53,7 +53,7 @@ class GIFHandler extends BitmapHandler {
                        return false;
                }
                $meta = unserialize( $meta );
-                if ( !isset( $meta['metadata'] ) || count( $meta['metadata'] ) <= 1 ) {
+               if ( !isset( $meta['metadata'] ) || count( $meta['metadata'] ) <= 1 ) {
                        return false;
                }
 
@@ -85,7 +85,7 @@ class GIFHandler extends BitmapHandler {
        function isAnimatedImage( $image ) {
                $ser = $image->getMetadata();
                if ( $ser ) {
-                       $metadata = unserialize($ser);
+                       $metadata = unserialize( $ser );
                        if( $metadata['frameCount'] > 1 ) {
                                return true;
                        }
@@ -119,13 +119,13 @@ class GIFHandler extends BitmapHandler {
                wfRestoreWarnings();
 
                if ( !$data || !is_array( $data ) ) {
-                       wfDebug(__METHOD__ . ' invalid GIF metadata' );
+                       wfDebug( __METHOD__ . ' invalid GIF metadata' );
                        return self::METADATA_BAD;
                }
 
                if ( !isset( $data['metadata']['_MW_GIF_VERSION'] )
                        || $data['metadata']['_MW_GIF_VERSION'] != GIFMetadataExtractor::VERSION ) {
-                       wfDebug(__METHOD__ . ' old but compatible GIF metadata' );
+                       wfDebug( __METHOD__ . ' old but compatible GIF metadata' );
                        return self::METADATA_COMPATIBLE;
                }
                return self::METADATA_GOOD;
@@ -141,10 +141,10 @@ class GIFHandler extends BitmapHandler {
                $original = parent::getLongDesc( $image );
 
                wfSuppressWarnings();
-               $metadata = unserialize($image->getMetadata());
+               $metadata = unserialize( $image->getMetadata() );
                wfRestoreWarnings();
 
-               if (!$metadata || $metadata['frameCount'] <=  1) {
+               if ( !$metadata || $metadata['frameCount'] <= 1 ) {
                        return $original;
                }
 
index 7a162c3..8b44585 100644 (file)
@@ -49,9 +49,9 @@ class GIFMetadataExtractor {
         * @return array
         */
        static function getMetadata( $filename ) {
-               self::$gif_frame_sep = pack( "C", ord("," ) );
-               self::$gif_extension_sep = pack( "C", ord("!" ) );
-               self::$gif_term = pack( "C", ord(";" ) );
+               self::$gif_frame_sep = pack( "C", ord( "," ) );
+               self::$gif_extension_sep = pack( "C", ord( "!" ) );
+               self::$gif_term = pack( "C", ord( ";" ) );
 
                $frameCount = 0;
                $duration = 0.0;
@@ -73,7 +73,7 @@ class GIFMetadataExtractor {
 
                // Check for the GIF header
                $buf = fread( $fh, 6 );
-               if ( !($buf == 'GIF87a' || $buf == 'GIF89a') ) {
+               if ( !( $buf == 'GIF87a' || $buf == 'GIF89a' ) ) {
                        throw new Exception( "Not a valid GIF file; header: $buf" );
                }
 
@@ -93,7 +93,7 @@ class GIFMetadataExtractor {
                while( !feof( $fh ) ) {
                        $buf = fread( $fh, 1 );
 
-                       if ($buf == self::$gif_frame_sep) {
+                       if ( $buf == self::$gif_frame_sep ) {
                                // Found a frame
                                $frameCount++;
 
@@ -114,7 +114,7 @@ class GIFMetadataExtractor {
                                $extension_code = unpack( 'C', $buf );
                                $extension_code = $extension_code[1];
 
-                               if ($extension_code == 0xF9) {
+                               if ( $extension_code == 0xF9 ) {
                                        // Graphics Control Extension.
                                        fread( $fh, 1 ); // Block size
 
@@ -132,10 +132,10 @@ class GIFMetadataExtractor {
                                        if ( strlen( $term ) < 1 ) throw new Exception( "Ran out of input" );
                                        $term = unpack( 'C', $term );
                                        $term = $term[1];
-                                       if ($term != 0 ) {
+                                       if ( $term != 0 ) {
                                                throw new Exception( "Malformed Graphics Control Extension block" );
                                        }
-                               } elseif ($extension_code == 0xFE) {
+                               } elseif ( $extension_code == 0xFE ) {
                                        // Comment block(s).
                                        $data = self::readBlock( $fh );
                                        if ( $data === "" ) {
@@ -164,7 +164,7 @@ class GIFMetadataExtractor {
                                                // is identical to the last, only extract once.
                                                $comment[] = $data;
                                        }
-                               } elseif ($extension_code == 0xFF) {
+                               } elseif ( $extension_code == 0xFF ) {
                                        // Application extension (Netscape info about the animated gif)
                                        // or XMP (or theoretically any other type of extension block)
                                        $blockLength = fread( $fh, 1 );
@@ -173,7 +173,7 @@ class GIFMetadataExtractor {
                                        $blockLength = $blockLength[1];
                                        $data = fread( $fh, $blockLength );
 
-                                       if ($blockLength != 11 ) {
+                                       if ( $blockLength != 11 ) {
                                                wfDebug( __METHOD__ . ' GIF application block with wrong length' );
                                                fseek( $fh, -($blockLength + 1), SEEK_CUR );
                                                self::skipBlock( $fh );
@@ -184,7 +184,7 @@ class GIFMetadataExtractor {
                                        if ( $data == 'NETSCAPE2.0' ) {
                                                $data = fread( $fh, 2 ); // Block length and introduction, should be 03 01
 
-                                               if ($data != "\x03\x01") {
+                                               if ( $data != "\x03\x01" ) {
                                                        throw new Exception( "Expected \x03\x01, got $data" );
                                                }
 
@@ -194,7 +194,7 @@ class GIFMetadataExtractor {
                                                $loopData = unpack( 'v', $loopData );
                                                $loopCount = $loopData[1];
 
-                                               if ($loopCount != 1) {
+                                               if ( $loopCount != 1 ) {
                                                        $isLooped = true;
                                                }
 
@@ -231,7 +231,7 @@ class GIFMetadataExtractor {
                                if ( strlen( $buf ) < 1 ) throw new Exception( "Ran out of input" );
                                $byte = unpack( 'C', $buf );
                                $byte = $byte[1];
-                               throw new Exception( "At position: ".ftell($fh). ", Unknown byte ".$byte );
+                               throw new Exception( "At position: " . ftell( $fh ) . ", Unknown byte " . $byte );
                        }
                }
 
@@ -284,7 +284,7 @@ class GIFMetadataExtractor {
                        if ( strlen( $buf ) < 1 ) throw new Exception( "Ran out of input" );
                        $block_len = unpack( 'C', $buf );
                        $block_len = $block_len[1];
-                       if ($block_len == 0) {
+                       if ( $block_len == 0 ) {
                                return;
                        }
                        fread( $fh, $block_len );
index 8fd3552..3ae59ad 100644 (file)
@@ -41,15 +41,15 @@ class IPTC {
        static function parse( $rawData ) {
                $parsed = iptcparse( $rawData );
                $data = Array();
-               if (!is_array($parsed)) {
+               if ( !is_array( $parsed ) ) {
                                return $data;
                }
 
                $c = '';
                //charset info contained in tag 1:90.
-               if (isset($parsed['1#090']) && isset($parsed['1#090'][0])) {
-                       $c = self::getCharset($parsed['1#090'][0]);
-                       if ($c === false) {
+               if ( isset( $parsed['1#090'] ) && isset( $parsed['1#090'][0] ) ) {
+                       $c = self::getCharset( $parsed['1#090'][0] );
+                       if ( $c === false ) {
                                //Unknown charset. refuse to parse.
                                //note: There is a different between
                                //unknown and no charset specified.
@@ -59,8 +59,8 @@ class IPTC {
                }
 
                foreach ( $parsed as $tag => $val ) {
-                       if ( isset( $val[0] ) && trim($val[0]) == '' ) {
-                               wfDebugLog('iptc', "IPTC tag $tag had only whitespace as its value.");
+                       if ( isset( $val[0] ) && trim( $val[0] ) == '' ) {
+                               wfDebugLog( 'iptc', "IPTC tag $tag had only whitespace as its value." );
                                continue;
                        }
                        switch( $tag ) {
@@ -175,7 +175,7 @@ class IPTC {
                                        if ( isset( $parsed['2#070'] ) ) {
                                                //if a version is set for the software.
                                                $softwareVersion = self::convIPTC( $parsed['2#070'], $c );
-                                               unset($parsed['2#070']);
+                                               unset( $parsed['2#070'] );
                                                $data['Software'] = array( array( $software[0], $softwareVersion[0] ) );
                                        } else {
                                                $data['Software'] = $software;
@@ -227,8 +227,8 @@ class IPTC {
                                        } else {
                                                $time = Array();
                                        }
-                                       $timestamp =  self::timeHelper( $val, $time, $c );
-                                       if ($timestamp) {
+                                       $timestamp = self::timeHelper( $val, $time, $c );
+                                       if ( $timestamp ) {
                                                $data['DateTimeOriginal'] = $timestamp;
                                        }
                                        break;
@@ -241,8 +241,8 @@ class IPTC {
                                        } else {
                                                $time = Array();
                                        }
-                                       $timestamp =  self::timeHelper( $val, $time, $c );
-                                       if ($timestamp) {
+                                       $timestamp = self::timeHelper( $val, $time, $c );
+                                       if ( $timestamp ) {
                                                $data['DateTimeDigitized'] = $timestamp;
                                        }
                                        break;
@@ -254,8 +254,8 @@ class IPTC {
                                        } else {
                                                $time = Array();
                                        }
-                                       $timestamp =  self::timeHelper( $val, $time, $c );
-                                       if ($timestamp) {
+                                       $timestamp = self::timeHelper( $val, $time, $c );
+                                       if ( $timestamp ) {
                                                $data['DateTimeReleased'] = $timestamp;
                                        }
                                        break;
@@ -267,8 +267,8 @@ class IPTC {
                                        } else {
                                                $time = Array();
                                        }
-                                       $timestamp =  self::timeHelper( $val, $time, $c );
-                                       if ($timestamp) {
+                                       $timestamp = self::timeHelper( $val, $time, $c );
+                                       if ( $timestamp ) {
                                                $data['DateTimeExpires'] = $timestamp;
                                        }
                                        break;
@@ -313,7 +313,7 @@ class IPTC {
                                        // describing the subject matter of the content.
                                        $codes = self::convIPTC( $val, $c );
                                        foreach ( $codes as $ic ) {
-                                               $fields = explode(':', $ic, 3 );
+                                               $fields = explode( ':', $ic, 3 );
 
                                                if ( count( $fields ) < 2 ||
                                                        $fields[0] !== 'IPTC' )
@@ -362,25 +362,25 @@ class IPTC {
                if ( count( $date ) === 1 ) {
                        //the standard says this should always be 1
                        //just double checking.
-                       list($date) = self::convIPTC( $date, $c );
+                       list( $date ) = self::convIPTC( $date, $c );
                } else {
                        return null;
                }
 
                if ( count( $time ) === 1 ) {
-                       list($time) = self::convIPTC( $time, $c );
+                       list( $time ) = self::convIPTC( $time, $c );
                        $dateOnly = false;
                } else {
                        $time = '000000+0000'; //placeholder
                        $dateOnly = true;
                }
 
-               if ( ! ( preg_match('/\d\d\d\d\d\d[-+]\d\d\d\d/', $time)
+               if ( !( preg_match('/\d\d\d\d\d\d[-+]\d\d\d\d/', $time)
                        && preg_match('/\d\d\d\d\d\d\d\d/', $date)
-                       && substr($date, 0, 4) !== '0000'
-                       && substr($date, 4, 2) !== '00'
-                       && substr($date, 6, 2) !== '00'
-                ) ) {
+                       && substr( $date, 0, 4 ) !== '0000'
+                       && substr( $date, 4, 2 ) !== '00'
+                       && substr( $date, 6, 2 ) !== '00'
+               ) ) {
                        //something wrong.
                        // Note, this rejects some valid dates according to iptc spec
                        // for example: the date 00000400 means the photo was taken in
@@ -425,7 +425,7 @@ class IPTC {
        */
        private static function convIPTC ( $data, $charset ) {
                if ( is_array( $data ) ) {
-                       foreach ($data as &$val) {
+                       foreach ( $data as &$val ) {
                                $val = self::convIPTCHelper( $val, $charset );
                        }
                } else {
@@ -444,18 +444,18 @@ class IPTC {
        private static function convIPTCHelper ( $data, $charset ) {
                if ( $charset ) {
                        wfSuppressWarnings();
-                       $data = iconv($charset, "UTF-8//IGNORE", $data);
+                       $data = iconv( $charset, "UTF-8//IGNORE", $data );
                        wfRestoreWarnings();
-                       if ($data === false) {
+                       if ( $data === false ) {
                                $data = "";
-                               wfDebugLog('iptc', __METHOD__ . " Error converting iptc data charset $charset to utf-8");
+                               wfDebugLog( 'iptc', __METHOD__ . " Error converting iptc data charset $charset to utf-8" );
                        }
                } else {
                        //treat as utf-8 if is valid utf-8. otherwise pretend its windows-1252
                        // most of the time if there is no 1:90 tag, it is either ascii, latin1, or utf-8
                        $oldData = $data;
                        UtfNormal::quickIsNFCVerify( $data ); //make $data valid utf-8
-                       if ($data === $oldData) {
+                       if ( $data === $oldData ) {
                                return $data; //if validation didn't change $data
                        } else {
                                return self::convIPTCHelper( $oldData, 'Windows-1252' );
@@ -472,7 +472,7 @@ class IPTC {
        * all iso 2022 escape codes. In practise, the code for utf-8 is the
        * only code that seems to have wide use. It does detect that code.
        */
-       static function getCharset($tag) {
+       static function getCharset( $tag ) {
 
                //According to iim standard, charset is defined by the tag 1:90.
                //in which there are iso 2022 escape sequences to specify the character set.
@@ -590,7 +590,7 @@ class IPTC {
                                $c = 'CSN_369103';
                                break;
                        default:
-                               wfDebugLog('iptc', __METHOD__ . 'Unknown charset in iptc 1:90: ' . bin2hex( $tag ) );
+                               wfDebugLog( 'iptc', __METHOD__ . 'Unknown charset in iptc 1:90: ' . bin2hex( $tag ) );
                                //at this point just give up and refuse to parse iptc?
                                $c = false;
                }
index 6175907..472372c 100644 (file)
@@ -162,11 +162,11 @@ abstract class ImageHandler extends MediaHandler {
 
                # Sanity check $width
                if( $width <= 0) {
-                       wfDebug( __METHOD__.": Invalid destination width: $width\n" );
+                       wfDebug( __METHOD__ . ": Invalid destination width: $width\n" );
                        return false;
                }
                if ( $srcWidth <= 0 ) {
-                       wfDebug( __METHOD__.": Invalid source width: $srcWidth\n" );
+                       wfDebug( __METHOD__ . ": Invalid source width: $srcWidth\n" );
                        return false;
                }
 
@@ -188,7 +188,7 @@ abstract class ImageHandler extends MediaHandler {
                if ( !$this->normaliseParams( $image, $params ) ) {
                        return false;
                }
-               $url = $script . '&' . wfArrayToCGI( $this->getScriptParams( $params ) );
+               $url = $script . '&' . wfArrayToCgi( $this->getScriptParams( $params ) );
 
                if( $image->mustRender() || $params['width'] < $image->getWidth() ) {
                        return new ThumbnailImage( $image, $url, false, $params );
index a15b652..5ea30f2 100644 (file)
@@ -37,7 +37,7 @@ class JpegHandler extends ExifBitmapHandler {
                        $meta = BitmapMetadataHandler::Jpeg( $filename );
                        if ( !is_array( $meta ) ) {
                                // This should never happen, but doesn't hurt to be paranoid.
-                               throw new MWException('Metadata array is not an array');
+                               throw new MWException( 'Metadata array is not an array' );
                        }
                        $meta['MEDIAWIKI_EXIF_VERSION'] = Exif::version();
                        return serialize( $meta );
@@ -60,4 +60,3 @@ class JpegHandler extends ExifBitmapHandler {
        }
 
 }
-
index dd764e9..fb305db 100644 (file)
@@ -135,9 +135,9 @@ abstract class MediaHandler {
        */
        static function getMetadataVersion () {
                $version = Array( '2' ); // core metadata version
-               wfRunHooks('GetMetadataVersion', Array(&$version));
+               wfRunHooks( 'GetMetadataVersion', Array( &$version ) );
                return implode( ';', $version);
-        }
+       }
 
        /**
        * Convert metadata version.
@@ -365,7 +365,7 @@ abstract class MediaHandler {
         * @return array for use displaying metadata.
         */
        function formatMetadataHelper( $metadataArray ) {
-                $result = array(
+               $result = array(
                        'visible' => array(),
                        'collapsed' => array()
                );
index 97a2d1d..1fbe029 100644 (file)
@@ -198,10 +198,10 @@ abstract class MediaTransformOutput {
        public function getDescLinkAttribs( $title = null, $params = '' ) {
                $query = '';
                if ( $this->page && $this->page !== 1 ) {
-                         $query = 'page=' . urlencode( $this->page );
+                       $query = 'page=' . urlencode( $this->page );
                }
                if( $params ) {
-                       $query .= $query ? '&'.$params : $params;
+                       $query .= $query ? '&' . $params : $params;
                }
                $attribs = array(
                        'href' => $this->file->getTitle()->getLocalURL( $query ),
@@ -237,7 +237,7 @@ class ThumbnailImage extends MediaTransformOutput {
                # Previous parameters:
                #   $file, $url, $width, $height, $path = false, $page = false
 
-               if( is_array( $parameters ) ){
+               if( is_array( $parameters ) ) {
                        $defaults = array(
                                'page' => false
                        );
@@ -301,7 +301,7 @@ class ThumbnailImage extends MediaTransformOutput {
 
                $alt = empty( $options['alt'] ) ? '' : $options['alt'];
 
-               $query = empty( $options['desc-query'] )  ? '' : $options['desc-query'];
+               $query = empty( $options['desc-query'] ) ? '' : $options['desc-query'];
 
                if ( !empty( $options['custom-url-link'] ) ) {
                        $linkAttribs = array( 'href' => $options['custom-url-link'] );
@@ -347,6 +347,9 @@ class ThumbnailImage extends MediaTransformOutput {
                if ( !empty( $this->responsiveUrls ) ) {
                        $attribs['srcset'] = Html::srcSet( $this->responsiveUrls );
                }
+
+               wfRunHooks( 'ThumbnailBeforeProduceHTML', array( $this, &$attribs, &$linkAttribs ) );
+
                return $this->linkWrap( $linkAttribs, Xml::element( 'img', $attribs ) );
        }
 
@@ -401,7 +404,7 @@ class MediaTransformError extends MediaTransformOutput {
 class TransformParameterError extends MediaTransformError {
        function __construct( $params ) {
                parent::__construct( 'thumbnail_error',
-                       max( isset( $params['width']  ) ? $params['width']  : 0, 120 ),
+                       max( isset( $params['width'] ) ? $params['width'] : 0, 120 ),
                        max( isset( $params['height'] ) ? $params['height'] : 0, 120 ),
                        wfMessage( 'thumbnail_invalid_params' )->text() );
        }
index a23821f..b8a5b40 100644 (file)
@@ -44,7 +44,7 @@ class PNGHandler extends BitmapHandler {
                        return self::BROKEN_FILE;
                }
 
-               return serialize($metadata);
+               return serialize( $metadata );
        }
 
        /**
@@ -74,8 +74,8 @@ class PNGHandler extends BitmapHandler {
         */
        function isAnimatedImage( $image ) {
                $ser = $image->getMetadata();
-               if ($ser) {
-                       $metadata = unserialize($ser);
+               if ( $ser ) {
+                       $metadata = unserialize( $ser );
                        if( $metadata['frameCount'] > 1 ) return true;
                }
                return false;
@@ -105,13 +105,13 @@ class PNGHandler extends BitmapHandler {
                wfRestoreWarnings();
 
                if ( !$data || !is_array( $data ) ) {
-                       wfDebug(__METHOD__ . ' invalid png metadata' );
+                       wfDebug( __METHOD__ . ' invalid png metadata' );
                        return self::METADATA_BAD;
                }
 
                if ( !isset( $data['metadata']['_MW_PNG_VERSION'] )
                        || $data['metadata']['_MW_PNG_VERSION'] != PNGMetadataExtractor::VERSION ) {
-                       wfDebug(__METHOD__ . ' old but compatible png metadata' );
+                       wfDebug( __METHOD__ . ' old but compatible png metadata' );
                        return self::METADATA_COMPATIBLE;
                }
                return self::METADATA_GOOD;
@@ -126,7 +126,7 @@ class PNGHandler extends BitmapHandler {
                $original = parent::getLongDesc( $image );
 
                wfSuppressWarnings();
-               $metadata = unserialize($image->getMetadata());
+               $metadata = unserialize( $image->getMetadata() );
                wfRestoreWarnings();
 
                if( !$metadata || $metadata['frameCount'] <= 0 )
index 55f087a..87f705c 100644 (file)
@@ -417,7 +417,7 @@ class PNGMetadataExtractor {
         * @throws Exception if too big.
         * @return String The chunk.
         */
-       static private function read( $fh, $size ) {
+       private static function read( $fh, $size ) {
                if ( $size > self::MAX_CHUNK_SIZE ) {
                        throw new Exception( __METHOD__ . ': Chunk size of ' . $size .
                                ' too big. Max size is: ' . self::MAX_CHUNK_SIZE );
index f7e988f..cddab51 100644 (file)
@@ -170,14 +170,14 @@ class SvgHandler extends ImageHandler {
                                $cmd = str_replace(
                                        array( '$path/', '$width', '$height', '$input', '$output' ),
                                        array( $wgSVGConverterPath ? wfEscapeShellArg( "$wgSVGConverterPath/" ) : "",
-                                                  intval( $width ),
-                                                  intval( $height ),
-                                                  wfEscapeShellArg( $srcPath ),
-                                                  wfEscapeShellArg( $dstPath ) ),
+                                               intval( $width ),
+                                               intval( $height ),
+                                               wfEscapeShellArg( $srcPath ),
+                                               wfEscapeShellArg( $dstPath ) ),
                                        $wgSVGConverters[$wgSVGConverter]
                                ) . " 2>&1";
                                wfProfileIn( 'rsvg' );
-                               wfDebug( __METHOD__.": $cmd\n" );
+                               wfDebug( __METHOD__ . ": $cmd\n" );
                                $err = wfShellExec( $cmd, $retval );
                                wfProfileOut( 'rsvg' );
                        }
@@ -185,7 +185,7 @@ class SvgHandler extends ImageHandler {
                $removed = $this->removeBadFile( $dstPath, $retval );
                if ( $retval != 0 || $removed ) {
                        wfDebugLog( 'thumbnail', sprintf( 'thumbnail failed on %s: error %d "%s" from "%s"',
-                                       wfHostname(), $retval, trim($err), $cmd ) );
+                                       wfHostname(), $retval, trim( $err ), $cmd ) );
                        return new MediaTransformError( 'thumbnail_error', $width, $height, $err );
                }
                return true;
index 456c016..e4235a7 100644 (file)
@@ -67,7 +67,7 @@ class SVGReader {
                if ( $size > $wgSVGMetadataCutoff ) {
                        $this->debug( "SVG is $size bytes, which is bigger than $wgSVGMetadataCutoff. Truncating." );
                        $contents = file_get_contents( $source, false, null, -1, $wgSVGMetadataCutoff );
-                       if ($contents === false) {
+                       if ( $contents === false ) {
                                throw new MWException( 'Error reading SVG file.' );
                        }
                        $this->reader->XML( $contents, null, LIBXML_NOERROR | LIBXML_NOWARNING );
@@ -132,7 +132,7 @@ class SVGReader {
                $this->debug( "<svg> tag is correct." );
                $this->handleSVGAttribs();
 
-               $exitDepth =  $this->reader->depth;
+               $exitDepth = $this->reader->depth;
                $keepReading = $this->reader->read();
                while ( $keepReading ) {
                        $tag = $this->reader->localName;
@@ -187,7 +187,7 @@ class SVGReader {
                while( $keepReading ) {
                        if( $this->reader->localName == $name && $this->reader->namespaceURI == self::NS_SVG && $this->reader->nodeType == XmlReader::END_ELEMENT ) {
                                break;
-                       } elseif( $this->reader->nodeType == XmlReader::TEXT ){
+                       } elseif( $this->reader->nodeType == XmlReader::TEXT ) {
                                $this->metadata[$metafield] = trim( $this->reader->value );
                        }
                        $keepReading = $this->reader->read();
@@ -227,7 +227,7 @@ class SVGReader {
                if ( $this->reader->isEmptyElement ) {
                        return;
                }
-               $exitDepth =  $this->reader->depth;
+               $exitDepth = $this->reader->depth;
                $keepReading = $this->reader->read();
                while( $keepReading ) {
                        if( $this->reader->localName == $name && $this->reader->depth <= $exitDepth
@@ -285,9 +285,9 @@ class SVGReader {
                $width = null;
                $height = null;
 
-               if( $this->reader->getAttribute('viewBox') ) {
+               if( $this->reader->getAttribute( 'viewBox' ) ) {
                        // min-x min-y width height
-                       $viewBox = preg_split( '/\s+/', trim( $this->reader->getAttribute('viewBox') ) );
+                       $viewBox = preg_split( '/\s+/', trim( $this->reader->getAttribute( 'viewBox' ) ) );
                        if( count( $viewBox ) == 4 ) {
                                $viewWidth = $this->scaleSVGUnit( $viewBox[2] );
                                $viewHeight = $this->scaleSVGUnit( $viewBox[3] );
@@ -297,12 +297,12 @@ class SVGReader {
                                }
                        }
                }
-               if( $this->reader->getAttribute('width') ) {
-                       $width = $this->scaleSVGUnit( $this->reader->getAttribute('width'), $defaultWidth );
+               if( $this->reader->getAttribute( 'width' ) ) {
+                       $width = $this->scaleSVGUnit( $this->reader->getAttribute( 'width' ), $defaultWidth );
                        $this->metadata['originalWidth'] = $this->reader->getAttribute( 'width' );
                }
-               if( $this->reader->getAttribute('height') ) {
-                       $height = $this->scaleSVGUnit( $this->reader->getAttribute('height'), $defaultHeight );
+               if( $this->reader->getAttribute( 'height' ) ) {
+                       $height = $this->scaleSVGUnit( $this->reader->getAttribute( 'height' ), $defaultHeight );
                        $this->metadata['originalHeight'] = $this->reader->getAttribute( 'height' );
                }
 
@@ -329,7 +329,7 @@ class SVGReader {
         * @param $viewportSize: Float optional scale for percentage units...
         * @return float: length in pixels
         */
-       static function scaleSVGUnit( $length, $viewportSize=512 ) {
+       static function scaleSVGUnit( $length, $viewportSize = 512 ) {
                static $unitLength = array(
                        'px' => 1.0,
                        'pt' => 1.25,
index 55dff77..0042208 100644 (file)
@@ -82,7 +82,7 @@ class TiffHandler extends ExifBitmapHandler {
                                $meta = BitmapMetadataHandler::Tiff( $filename );
                                if ( !is_array( $meta ) ) {
                                        // This should never happen, but doesn't hurt to be paranoid.
-                                       throw new MWException('Metadata array is not an array');
+                                       throw new MWException( 'Metadata array is not an array' );
                                }
                                $meta['MEDIAWIKI_EXIF_VERSION'] = Exif::version();
                                return serialize( $meta );
index 555fa1f..ba0d419 100644 (file)
@@ -84,7 +84,7 @@ class XCFHandler extends BitmapHandler {
                # The image structure always starts at offset 0 in the XCF file.
                # So we just read it :-)
                $binaryHeader = fread( $f, 26 );
-               fclose($f);
+               fclose( $f );
 
                # Master image structure:
                #
index c5743d7..e4833fc 100644 (file)
@@ -114,7 +114,7 @@ class XMPReader {
        */
        private function resetXMLParser() {
 
-               if ($this->xmlParser) {
+               if ( $this->xmlParser ) {
                        //is this needed?
                        xml_parser_free( $this->xmlParser );
                }
@@ -156,7 +156,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'] )
@@ -201,7 +201,7 @@ class XMPReader {
                                        // To avoid copying over the _type meta-fields.
                                        continue;
                                }
-                               foreach(  $loc as $field => $val ) {
+                               foreach( $loc as $field => $val ) {
                                        $data['xmp-general'][$field . 'Created'][] = $val;
                                }
                        }
@@ -255,7 +255,7 @@ class XMPReader {
                        if ( !$this->charset ) {
                                $bom = array();
                                if ( preg_match( '/\xEF\xBB\xBF|\xFE\xFF|\x00\x00\xFE\xFF|\xFF\xFE\x00\x00|\xFF\xFE/',
-                                        $content, $bom )
+                                       $content, $bom )
                                ) {
                                        switch ( $bom[0] ) {
                                                case "\xFE\xFF":
@@ -275,7 +275,7 @@ class XMPReader {
                                                        break;
                                                default:
                                                        //this should be impossible to get to
-                                                       throw new MWException("Invalid BOM");
+                                                       throw new MWException( "Invalid BOM" );
                                                        break;
 
                                        }
@@ -324,13 +324,13 @@ class XMPReader {
                $guid = substr( $content, 0, 32 );
                if ( !isset( $this->results['xmp-special']['HasExtendedXMP'] )
                        || $this->results['xmp-special']['HasExtendedXMP'] !== $guid ) {
-                       wfDebugLog('XMP', __METHOD__ . " Ignoring XMPExtended block due to wrong guid (guid= '$guid' )");
+                       wfDebugLog( 'XMP', __METHOD__ . " Ignoring XMPExtended block due to wrong guid (guid= '$guid')" );
                        return false;
                }
-               $len  = unpack( 'Nlength/Noffset', substr( $content, 32, 8 ) );
+               $len = unpack( 'Nlength/Noffset', substr( $content, 32, 8 ) );
 
-               if (!$len || $len['length'] < 4 || $len['offset'] < 0 || $len['offset'] > $len['length'] ) {
-                       wfDebugLog('XMP', __METHOD__ . 'Error reading extended XMP block, invalid length or offset.');
+               if ( !$len || $len['length'] < 4 || $len['offset'] < 0 || $len['offset'] > $len['length'] ) {
+                       wfDebugLog( 'XMP', __METHOD__ . 'Error reading extended XMP block, invalid length or offset.' );
                        return false;
                }
 
@@ -345,8 +345,8 @@ class XMPReader {
                // so the probability that it will have > 128k, and be in the wrong order is very low...
 
                if ( $len['offset'] !== $this->extendedXMPOffset ) {
-                       wfDebugLog('XMP', __METHOD__ . 'Ignoring XMPExtended block due to wrong order. (Offset was '
-                               . $len['offset'] . ' but expected ' . $this->extendedXMPOffset . ')');
+                       wfDebugLog( 'XMP', __METHOD__ . 'Ignoring XMPExtended block due to wrong order. (Offset was '
+                               . $len['offset'] . ' but expected ' . $this->extendedXMPOffset . ')' );
                        return false;
                }
 
@@ -366,7 +366,7 @@ class XMPReader {
                        $atEnd = false;
                }
 
-               wfDebugLog('XMP', __METHOD__ . 'Parsing a XMPExtended block');
+               wfDebugLog( 'XMP', __METHOD__ . 'Parsing a XMPExtended block' );
                return $this->parse( $actualContent, $atEnd );
        }
 
@@ -488,7 +488,7 @@ class XMPReader {
                if ( $this->curItem[0] !== $elm
                        && !( $elm === self::NS_RDF . ' Description'
                                && $this->mode[0] === self::MODE_STRUCT )
-                ) {
+               ) {
                        throw new MWException( "nesting mismatch. got a </$elm> but expected a </" . $this->curItem[0] . '>' );
                }
 
index aa411df..a4ba741 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;
@@ -260,7 +260,7 @@ class XMPInfo {
                                'mode'      => XMPReader::MODE_SIMPLE,
                                'validate'  => 'validateDate',
                        ),
-                       'DateTimeDigitized' => array(  /* xmp:CreateDate */
+                       'DateTimeDigitized' => array( /* xmp:CreateDate */
                                'map_group' => 'exif',
                                'mode'      => XMPReader::MODE_SIMPLE,
                                'validate'  => 'validateDate',
@@ -552,12 +552,12 @@ class XMPInfo {
                                'map_group' => 'exif',
                                'mode'      => XMPReader::MODE_LANG,
                        ),
-                       'DateTime'          => array(  /* proper prop is xmp:ModifyDate */
+                       'DateTime'          => array( /* proper prop is xmp:ModifyDate */
                                'map_group' => 'exif',
                                'mode'      => XMPReader::MODE_SIMPLE,
                                'validate'  => 'validateDate',
                        ),
-                       'ImageDescription'  => array(  /* proper one is dc:description */
+                       'ImageDescription'  => array( /* proper one is dc:description */
                                'map_group' => 'exif',
                                'mode'      => XMPReader::MODE_LANG,
                        ),
@@ -622,7 +622,7 @@ class XMPInfo {
                                'mode'      => XMPReader::MODE_SIMPLE,
                                'validate'  => 'validateInteger',
                        ),
-                       'Software'          => array(  /* see xmp:CreatorTool */
+                       'Software'          => array( /* see xmp:CreatorTool */
                                'map_group' => 'exif',
                                'mode'      => XMPReader::MODE_SIMPLE,
                        ),
index e3fd59f..59547e5 100644 (file)
@@ -95,8 +95,8 @@ class XMPValidate {
                        return;
                }
                if ( !preg_match( '/^[-+]?\d*(?:\.?\d*)$/D', $val )
-                       || !is_numeric($val)
-                ) {
+                       || !is_numeric( $val )
+               ) {
                        wfDebugLog( 'XMP', __METHOD__ . " Expected rating but got $val" );
                        $val = null;
                        return;
@@ -247,8 +247,8 @@ class XMPValidate {
                $res = array();
                if ( !preg_match(
                        /* ahh! scary regex... */
-                       '/^([0-3]\d{3})(?:-([01]\d)(?:-([0-3]\d)(?:T([0-2]\d):([0-6]\d)(?::([0-6]\d)(?:\.\d+)?)?([-+]\d{2}:\d{2}|Z)?)?)?)?$/D'
-                       , $val, $res)
+                       '/^([0-3]\d{3})(?:-([01]\d)(?:-([0-3]\d)(?:T([0-2]\d):([0-6]\d)(?::([0-6]\d)(?:\.\d+)?)?([-+]\d{2}:\d{2}|Z)?)?)?)?$/D',
+                       $val, $res )
                ) {
                        wfDebugLog( 'XMP', __METHOD__ . " Expected date but got $val" );
                        $val = null;
index 5b64201..a89d229 100644 (file)
@@ -65,6 +65,7 @@ audio/basic au snd
 audio/midi mid midi kar
 audio/mpeg mpga mp2 mp3
 audio/ogg oga ogg spx
+video/webm webm
 audio/webm webm
 audio/x-aiff aif aiff aifc
 audio/x-matroska mka mkv
@@ -120,7 +121,6 @@ video/mpeg mpeg mpg mpe
 video/ogg ogv ogm ogg
 video/quicktime qt mov
 video/vnd.mpegurl mxu
-video/webm webm
 video/x-flv flv
 video/x-matroska mkv mka
 video/x-msvideo avi
index 23471e9..9dc1c86 100644 (file)
@@ -26,7 +26,7 @@
  * @ingroup UtfNormal
  */
 
-if( php_sapi_name() != 'cli' ) {
+if( PHP_SAPI != 'cli' ) {
        die( "Run me from the command line please.\n" );
 }
 
index d9deb3c..eaa2304 100644 (file)
@@ -25,7 +25,7 @@
  * @ingroup UtfNormal
  */
 
-if( php_sapi_name() != 'cli' ) {
+if( PHP_SAPI != 'cli' ) {
        die( "Run me from the command line please.\n" );
 }
 
index 6eae6e7..904a27f 100644 (file)
@@ -34,7 +34,7 @@ mb_internal_encoding( "utf-8" );
 
 $verbose = false;
 #$verbose = true;
-if( php_sapi_name() != 'cli' ) {
+if( PHP_SAPI != 'cli' ) {
        die( "Run me from the command line please.\n" );
 }
 
index 6642844..392ba2b 100644 (file)
@@ -34,7 +34,7 @@ require_once 'UtfNormal.php';
 
 define( 'BENCH_CYCLES', 5 );
 
-if( php_sapi_name() != 'cli' ) {
+if( PHP_SAPI != 'cli' ) {
        die( "Run me from the command line please.\n" );
 }
 
@@ -80,7 +80,7 @@ function benchmarkTest( &$u, $filename, $desc ) {
        }
 }
 
-function benchTime(){
+function benchTime() {
        $st = explode( ' ', microtime() );
        return (float)$st[0] + (float)$st[1];
 }
index 64624b8..b07e339 100644 (file)
@@ -26,7 +26,7 @@
  */
 
 define( 'UNICODE_HANGUL_FIRST', 0xac00 );
-define( 'UNICODE_HANGUL_LAST',  0xd7a3 );
+define( 'UNICODE_HANGUL_LAST', 0xd7a3 );
 
 define( 'UNICODE_HANGUL_LBASE', 0x1100 );
 define( 'UNICODE_HANGUL_VBASE', 0x1161 );
index 11d06d4..f392df5 100644 (file)
@@ -25,7 +25,7 @@
  * @ingroup UtfNormal
  */
 
-if( php_sapi_name() != 'cli' ) {
+if( PHP_SAPI != 'cli' ) {
        die( "Run me from the command line please.\n" );
 }
 
index 1277dc2..257e105 100644 (file)
@@ -38,7 +38,7 @@ define( 'BENCH_CYCLES', 1 );
 define( 'BIGSIZE', 1024 * 1024 * 10); // 10m
 ini_set('memory_limit', BIGSIZE + 120 * 1024 * 1024);
 
-if( php_sapi_name() != 'cli' ) {
+if( PHP_SAPI != 'cli' ) {
        die( "Run me from the command line please.\n" );
 }
 
@@ -82,7 +82,7 @@ function benchmarkTest( &$u, $filename, $desc ) {
        }
 }
 
-function benchTime(){
+function benchTime() {
        $st = explode( ' ', microtime() );
        return (float)$st[0] + (float)$st[1];
 }
index 5872ec3..22e6471 100644 (file)
@@ -54,7 +54,7 @@ require_once 'UtfNormalDefines.php';
 require_once 'UtfNormalUtil.php';
 require_once 'UtfNormal.php';
 
-if( php_sapi_name() != 'cli' ) {
+if( PHP_SAPI != 'cli' ) {
        die( "Run me from the command line please.\n" );
 }
 
index 691bfaa..f4a8379 100644 (file)
@@ -22,7 +22,7 @@
  * @ingroup UtfNormal
  */
 
-if( php_sapi_name() != 'cli' ) {
+if( PHP_SAPI != 'cli' ) {
        die( "Run me from the command line please.\n" );
 }
 
index 1a0de21..6c558ce 100644 (file)
 class APCBagOStuff extends BagOStuff {
        /**
         * @param $key string
+        * @param $casToken[optional] int
         * @return mixed
         */
-       public function get( $key ) {
+       public function get( $key, &$casToken = null ) {
                $val = apc_fetch( $key );
 
+               $casToken = $val;
+
                if ( is_string( $val ) ) {
                        if ( $this->isInteger( $val ) ) {
                                $val = intval( $val );
@@ -61,6 +64,18 @@ class APCBagOStuff extends BagOStuff {
                return true;
        }
 
+       /**
+        * @param $casToken mixed
+        * @param $key string
+        * @param $value mixed
+        * @param $exptime int
+        * @return bool
+        */
+       public function cas( $casToken, $key, $value, $exptime = 0 ) {
+               // APC's CAS functions only work on integers
+               throw new MWException( "CAS is not implemented in " . __CLASS__ );
+       }
+
        /**
         * @param $key string
         * @param $time int
@@ -72,6 +87,17 @@ class APCBagOStuff extends BagOStuff {
                return true;
        }
 
+       /**
+        * @param $key string
+        * @param $callback closure Callback method to be executed
+        * @param $exptime int Either an interval in seconds or a unix timestamp for expiry
+        * @param $attempts int The amount of times to attempt a merge in case of failure
+        * @return bool success
+        */
+       public function merge( $key, closure $callback, $exptime = 0, $attempts = 10 ) {
+               return $this->mergeViaLock( $key, $callback, $exptime, $attempts );
+       }
+
        public function incr( $key, $value = 1 ) {
                return apc_inc( $key, $value );
        }
@@ -79,19 +105,4 @@ class APCBagOStuff extends BagOStuff {
        public function decr( $key, $value = 1 ) {
                return apc_dec( $key, $value );
        }
-
-       /**
-        * @return Array
-        */
-       public function keys() {
-               $info = apc_cache_info( 'user' );
-               $list = $info['cache_list'];
-               $keys = array();
-
-               foreach ( $list as $entry ) {
-                       $keys[] = $entry['info'];
-               }
-
-               return $keys;
-       }
 }
index 7bbaff9..1205ceb 100644 (file)
@@ -56,9 +56,10 @@ abstract class BagOStuff {
        /**
         * Get an item with the given key. Returns false if it does not exist.
         * @param $key string
+        * @param $casToken[optional] mixed
         * @return mixed Returns false on failure
         */
-       abstract public function get( $key );
+       abstract public function get( $key, &$casToken = null );
 
        /**
         * Set an item.
@@ -69,6 +70,16 @@ abstract class BagOStuff {
         */
        abstract public function set( $key, $value, $exptime = 0 );
 
+       /**
+        * Check and set an item.
+        * @param $casToken mixed
+        * @param $key string
+        * @param $value mixed
+        * @param $exptime int Either an interval in seconds or a unix timestamp for expiry
+        * @return bool success
+        */
+       abstract public function cas( $casToken, $key, $value, $exptime = 0 );
+
        /**
         * Delete an item.
         * @param $key string
@@ -78,31 +89,115 @@ abstract class BagOStuff {
        abstract public function delete( $key, $time = 0 );
 
        /**
+        * Merge changes into the existing cache value (possibly creating a new one).
+        * The callback function returns the new value given the current value (possibly false),
+        * and takes the arguments: (this BagOStuff object, cache key, current value).
+        *
         * @param $key string
-        * @param $timeout integer
+        * @param $callback closure Callback method to be executed
+        * @param $exptime int Either an interval in seconds or a unix timestamp for expiry
+        * @param $attempts int The amount of times to attempt a merge in case of failure
         * @return bool success
         */
-       public function lock( $key, $timeout = 0 ) {
-               /* stub */
-               return true;
+       public function merge( $key, closure $callback, $exptime = 0, $attempts = 10 ) {
+               return $this->mergeViaCas( $key, $callback, $exptime, $attempts );
        }
 
        /**
+        * @see BagOStuff::merge()
+        *
         * @param $key string
+        * @param $callback closure Callback method to be executed
+        * @param $exptime int Either an interval in seconds or a unix timestamp for expiry
+        * @param $attempts int The amount of times to attempt a merge in case of failure
         * @return bool success
         */
-       public function unlock( $key ) {
-               /* stub */
-               return true;
+       protected function mergeViaCas( $key, closure $callback, $exptime = 0, $attempts = 10 ) {
+               do {
+                       $casToken = null; // passed by reference
+                       $currentValue = $this->get( $key, $casToken ); // get the old value
+                       $value = $callback( $this, $key, $currentValue ); // derive the new value
+
+                       if ( $value === false ) {
+                               $success = true; // do nothing
+                       } elseif ( $currentValue === false ) {
+                               // Try to create the key, failing if it gets created in the meantime
+                               $success = $this->add( $key, $value, $exptime );
+                       } else {
+                               // Try to update the key, failing if it gets changed in the meantime
+                               $success = $this->cas( $casToken, $key, $value, $exptime );
+                       }
+               } while ( !$success && --$attempts );
+
+               return $success;
        }
 
        /**
-        * @todo: what is this?
-        * @return Array
+        * @see BagOStuff::merge()
+        *
+        * @param $key string
+        * @param $callback closure Callback method to be executed
+        * @param $exptime int Either an interval in seconds or a unix timestamp for expiry
+        * @param $attempts int The amount of times to attempt a merge in case of failure
+        * @return bool success
         */
-       public function keys() {
-               /* stub */
-               return array();
+       protected function mergeViaLock( $key, closure $callback, $exptime = 0, $attempts = 10 ) {
+               if ( !$this->lock( $key, 60 ) ) {
+                       return false;
+               }
+
+               $currentValue = $this->get( $key ); // get the old value
+               $value = $callback( $this, $key, $currentValue ); // derive the new value
+
+               if ( $value === false ) {
+                       $success = true; // do nothing
+               } else {
+                       $success = $this->set( $key, $value, $exptime ); // set the new value
+               }
+
+               if ( !$this->unlock( $key ) ) {
+                       // this should never happen
+                       trigger_error( "Could not release lock for key '$key'." );
+               }
+
+               return $success;
+       }
+
+       /**
+        * @param $key string
+        * @param $timeout integer [optional]
+        * @return bool success
+        */
+       public function lock( $key, $timeout = 60 ) {
+               $timestamp = microtime( true ); // starting UNIX timestamp
+               if ( $this->add( "{$key}:lock", $timeout ) ) {
+                       return true;
+               }
+
+               $uRTT  = ceil( 1e6 * ( microtime( true ) - $timestamp ) ); // estimate RTT (us)
+               $sleep = 2*$uRTT; // rough time to do get()+set()
+
+               $locked   = false; // lock acquired
+               $attempts = 0; // failed attempts
+               do {
+                       if ( ++$attempts >= 3 && $sleep <= 1e6 ) {
+                               // Exponentially back off after failed attempts to avoid network spam.
+                               // About 2*$uRTT*(2^n-1) us of "sleep" happen for the next n attempts.
+                               $sleep *= 2;
+                       }
+                       usleep( $sleep ); // back off
+                       $locked = $this->add( "{$key}:lock", $timeout );
+               } while( !$locked );
+
+               return $locked;
+       }
+
+       /**
+        * @param $key string
+        * @return bool success
+        */
+       public function unlock( $key ) {
+               return $this->delete( "{$key}:lock" );
        }
 
        /**
index 36ced49..51ce777 100644 (file)
@@ -111,9 +111,10 @@ class DBABagOStuff extends BagOStuff {
 
        /**
         * @param $key string
+        * @param $casToken[optional] mixed
         * @return mixed
         */
-       public function get( $key ) {
+       public function get( $key, &$casToken = null ) {
                wfProfileIn( __METHOD__ );
                wfDebug( __METHOD__ . "($key)\n" );
 
@@ -138,7 +139,10 @@ class DBABagOStuff extends BagOStuff {
                        $val = false;
                }
 
+               $casToken = $val;
+
                wfProfileOut( __METHOD__ );
+
                return $val;
        }
 
@@ -167,6 +171,42 @@ class DBABagOStuff extends BagOStuff {
                return $ret;
        }
 
+       /**
+        * @param $casToken mixed
+        * @param $key string
+        * @param $value mixed
+        * @param $exptime int
+        * @return bool
+        */
+       public function cas( $casToken, $key, $value, $exptime = 0 ) {
+               wfProfileIn( __METHOD__ );
+               wfDebug( __METHOD__ . "($key)\n" );
+
+               $blob = $this->encode( $value, $exptime );
+
+               $handle = $this->getWriter();
+               if ( !$handle ) {
+                       wfProfileOut( __METHOD__ );
+                       return false;
+               }
+
+               // DBA is locked to any other write connection, so we can safely
+               // compare the current & previous value before saving new value
+               $val = dba_fetch( $key, $handle );
+               list( $val, $exptime ) = $this->decode( $val );
+               if ( $casToken !== $val ) {
+                       dba_close( $handle );
+                       wfProfileOut( __METHOD__ );
+                       return false;
+               }
+
+               $ret = dba_replace( $key, $blob, $handle );
+               dba_close( $handle );
+
+               wfProfileOut( __METHOD__ );
+               return $ret;
+       }
+
        /**
         * @param $key string
         * @param $time int
@@ -264,23 +304,4 @@ class DBABagOStuff extends BagOStuff {
 
                return ( $value === false ) ? false : (int)$value;
        }
-
-       function keys() {
-               $reader = $this->getReader();
-               $k1 = dba_firstkey( $reader );
-
-               if ( !$k1 ) {
-                       return array();
-               }
-
-               $result[] = $k1;
-
-               $key = dba_nextkey( $reader );
-               while ( $key ) {
-                       $result[] = $key;
-                       $key = dba_nextkey( $reader );
-               }
-
-               return $result;
-       }
 }
index 60d0645..960668f 100644 (file)
@@ -39,13 +39,13 @@ class EhcacheBagOStuff extends BagOStuff {
         */
        function __construct( $params ) {
                if ( !defined( 'CURLOPT_TIMEOUT_MS' ) ) {
-                       throw new MWException( __CLASS__.' requires curl version 7.16.2 or later.' );
+                       throw new MWException( __CLASS__ . ' requires curl version 7.16.2 or later.' );
                }
                if ( !extension_loaded( 'zlib' ) ) {
-                       throw new MWException( __CLASS__.' requires the zlib extension' );
+                       throw new MWException( __CLASS__ . ' requires the zlib extension' );
                }
                if ( !isset( $params['servers'] ) ) {
-                       throw new MWException( __METHOD__.': servers parameter is required' );
+                       throw new MWException( __METHOD__ . ': servers parameter is required' );
                }
                $this->servers = $params['servers'];
                $this->cacheName = isset( $params['cache'] ) ? $params['cache'] : 'mw';
@@ -65,9 +65,10 @@ class EhcacheBagOStuff extends BagOStuff {
 
        /**
         * @param $key string
+        * @param $casToken[optional] mixed
         * @return bool|mixed
         */
-       public function get( $key ) {
+       public function get( $key, &$casToken = null ) {
                wfProfileIn( __METHOD__ );
                $response = $this->doItemRequest( $key );
                if ( !$response || $response['http_code'] == 404 ) {
@@ -75,7 +76,7 @@ class EhcacheBagOStuff extends BagOStuff {
                        return false;
                }
                if ( $response['http_code'] >= 300 ) {
-                       wfDebug( __METHOD__.": GET failure, got HTTP {$response['http_code']}\n" );
+                       wfDebug( __METHOD__ . ": GET failure, got HTTP {$response['http_code']}\n" );
                        wfProfileOut( __METHOD__ );
                        return false;
                }
@@ -84,7 +85,7 @@ class EhcacheBagOStuff extends BagOStuff {
                if ( $type == 'application/vnd.php.serialized+deflate' ) {
                        $body = gzinflate( $body );
                        if ( !$body ) {
-                               wfDebug( __METHOD__.": error inflating $key\n" );
+                               wfDebug( __METHOD__ . ": error inflating $key\n" );
                                wfProfileOut( __METHOD__ );
                                return false;
                        }
@@ -92,11 +93,13 @@ class EhcacheBagOStuff extends BagOStuff {
                } elseif ( $type == 'application/vnd.php.serialized' ) {
                        $data = unserialize( $body );
                } else {
-                       wfDebug( __METHOD__.": unknown content type \"$type\"\n" );
+                       wfDebug( __METHOD__ . ": unknown content type \"$type\"\n" );
                        wfProfileOut( __METHOD__ );
                        return false;
                }
 
+               $casToken = $body;
+
                wfProfileOut( __METHOD__ );
                return $data;
        }
@@ -124,7 +127,7 @@ class EhcacheBagOStuff extends BagOStuff {
                if ( $code == 404 ) {
                        // Maybe the cache does not exist yet, let's try creating it
                        if ( !$this->createCache( $key ) ) {
-                               wfDebug( __METHOD__.": cache creation failed\n" );
+                               wfDebug( __METHOD__ . ": cache creation failed\n" );
                                wfProfileOut( __METHOD__ );
                                return false;
                        }
@@ -133,9 +136,9 @@ class EhcacheBagOStuff extends BagOStuff {
 
                $result = false;
                if ( !$code ) {
-                       wfDebug( __METHOD__.": PUT failure for key $key\n" );
+                       wfDebug( __METHOD__ . ": PUT failure for key $key\n" );
                } elseif ( $code >= 300 ) {
-                       wfDebug( __METHOD__.": PUT failure for key $key: HTTP $code\n" );
+                       wfDebug( __METHOD__ . ": PUT failure for key $key: HTTP $code\n" );
                } else {
                        $result = true;
                }
@@ -144,6 +147,20 @@ class EhcacheBagOStuff extends BagOStuff {
                return $result;
        }
 
+       /**
+        * @param $casToken mixed
+        * @param $key string
+        * @param $value mixed
+        * @param $exptime int
+        * @return bool
+        */
+       public function cas( $casToken, $key, $value, $exptime = 0 ) {
+               // Not sure if we can implement CAS for ehcache. There appears to be CAS-support per
+               // http://ehcache.org/documentation/get-started/consistency-options#cas-cache-operations,
+               // but I can't find any docs for our current implementation.
+               throw new MWException( "CAS is not implemented in " . __CLASS__ );
+       }
+
        /**
         * @param $key string
         * @param $time int
@@ -155,7 +172,7 @@ class EhcacheBagOStuff extends BagOStuff {
                        array( CURLOPT_CUSTOMREQUEST => 'DELETE' ) );
                $code = isset( $response['http_code'] ) ? $response['http_code'] : 0;
                if ( !$response || ( $code != 404 && $code >= 300 ) ) {
-                       wfDebug( __METHOD__.": DELETE failure for key $key\n" );
+                       wfDebug( __METHOD__ . ": DELETE failure for key $key\n" );
                        $result = false;
                } else {
                        $result = true;
@@ -164,6 +181,14 @@ class EhcacheBagOStuff extends BagOStuff {
                return $result;
        }
 
+       /**
+        * @see BagOStuff::merge()
+        * @return bool success
+        */
+       public function merge( $key, closure $callback, $exptime = 0, $attempts = 10 ) {
+               return $this->mergeViaLock( $key, $callback, $exptime, $attempts );
+       }
+
        /**
         * @param $key string
         * @return string
@@ -231,7 +256,7 @@ class EhcacheBagOStuff extends BagOStuff {
         * @return bool
         */
        protected function createCache( $key ) {
-               wfDebug( __METHOD__.": creating cache for $key\n" );
+               wfDebug( __METHOD__ . ": creating cache for $key\n" );
                $response = $this->doCacheRequest( $key,
                        array(
                                CURLOPT_POST => 1,
@@ -239,7 +264,7 @@ class EhcacheBagOStuff extends BagOStuff {
                                CURLOPT_POSTFIELDS => '',
                        ) );
                if ( !$response ) {
-                       wfDebug( __CLASS__.": failed to create cache for $key\n" );
+                       wfDebug( __CLASS__ . ": failed to create cache for $key\n" );
                        return false;
                }
                return ( $response['http_code'] == 201 /* created */
@@ -279,7 +304,7 @@ class EhcacheBagOStuff extends BagOStuff {
        protected function doRequest( $curl, $url, $curlOptions = array() ) {
                if ( array_diff_key( $curlOptions, $this->curlOptions ) ) {
                        // var_dump( array_diff_key( $curlOptions, $this->curlOptions ) );
-                       throw new MWException( __METHOD__.": to prevent options set in one doRequest() " .
+                       throw new MWException( __METHOD__ . ": to prevent options set in one doRequest() " .
                                "call from affecting subsequent doRequest() calls, only options listed " .
                                "in \$this->curlOptions may be specified in the \$curlOptions parameter." );
                }
@@ -289,7 +314,7 @@ class EhcacheBagOStuff extends BagOStuff {
                curl_setopt_array( $curl, $curlOptions );
                $result = curl_exec( $curl );
                if ( $result === false ) {
-                       wfDebug( __CLASS__.": curl error: " . curl_error( $curl ) . "\n" );
+                       wfDebug( __CLASS__ . ": curl error: " . curl_error( $curl ) . "\n" );
                        return false;
                }
                $info = curl_getinfo( $curl );
index bd28b24..cc57ff1 100644 (file)
@@ -30,9 +30,10 @@ class EmptyBagOStuff extends BagOStuff {
 
        /**
         * @param $key string
+        * @param $casToken[optional] mixed
         * @return bool
         */
-       function get( $key ) {
+       function get( $key, &$casToken = null ) {
                return false;
        }
 
@@ -46,6 +47,17 @@ class EmptyBagOStuff extends BagOStuff {
                return true;
        }
 
+       /**
+        * @param $casToken mixed
+        * @param $key string
+        * @param $value mixed
+        * @param $exp int
+        * @return bool
+        */
+       function cas( $casToken, $key, $value, $exp = 0 ) {
+               return true;
+       }
+
        /**
         * @param $key string
         * @param $time int
@@ -54,6 +66,17 @@ class EmptyBagOStuff extends BagOStuff {
        function delete( $key, $time = 0 ) {
                return true;
        }
+
+       /**
+        * @param $key string
+        * @param $callback closure Callback method to be executed
+        * @param $exptime int Either an interval in seconds or a unix timestamp for expiry
+        * @param $attempts int The amount of times to attempt a merge in case of failure
+        * @return bool success
+        */
+       public function merge( $key, closure $callback, $exptime = 0, $attempts = 10 ) {
+               return true;
+       }
 }
 
 /**
index 799f26a..d061eff 100644 (file)
@@ -52,9 +52,10 @@ class HashBagOStuff extends BagOStuff {
 
        /**
         * @param $key string
+        * @param $casToken[optional] mixed
         * @return bool|mixed
         */
-       function get( $key ) {
+       function get( $key, &$casToken = null ) {
                if ( !isset( $this->bag[$key] ) ) {
                        return false;
                }
@@ -63,6 +64,8 @@ class HashBagOStuff extends BagOStuff {
                        return false;
                }
 
+               $casToken = $this->bag[$key][0];
+
                return $this->bag[$key][0];
        }
 
@@ -77,6 +80,21 @@ class HashBagOStuff extends BagOStuff {
                return true;
        }
 
+       /**
+        * @param $casToken mixed
+        * @param $key string
+        * @param $value mixed
+        * @param $exptime int
+        * @return bool
+        */
+       function cas( $casToken, $key, $value, $exptime = 0 ) {
+               if ( $this->get( $key ) === $casToken ) {
+                       return $this->set( $key, $value, $exptime );
+               }
+
+               return false;
+       }
+
        /**
         * @param $key string
         * @param $time int
@@ -91,12 +109,4 @@ class HashBagOStuff extends BagOStuff {
 
                return true;
        }
-
-       /**
-        * @return array
-        */
-       function keys() {
-               return array_keys( $this->bag );
-       }
 }
-
index 643d2e9..4f8209d 100644 (file)
@@ -57,10 +57,11 @@ class MemcachedBagOStuff extends BagOStuff {
 
        /**
         * @param $key string
+        * @param $casToken[optional] mixed
         * @return Mixed
         */
-       public function get( $key ) {
-               return $this->client->get( $this->encodeKey( $key ) );
+       public function get( $key, &$casToken = null ) {
+               return $this->client->get( $this->encodeKey( $key ), $casToken );
        }
 
        /**
@@ -74,6 +75,18 @@ class MemcachedBagOStuff extends BagOStuff {
                        $this->fixExpiry( $exptime ) );
        }
 
+       /**
+        * @param $key string
+        * @param $casToken mixed
+        * @param $value
+        * @param $exptime int
+        * @return bool
+        */
+       public function cas( $casToken, $key, $value, $exptime = 0 ) {
+               return $this->client->cas( $casToken, $this->encodeKey( $key ),
+                       $value, $this->fixExpiry( $exptime ) );
+       }
+
        /**
         * @param $key string
         * @param $time int
@@ -166,15 +179,9 @@ class MemcachedBagOStuff extends BagOStuff {
         * Send a debug message to the log
         */
        protected function debugLog( $text ) {
-               global $wgDebugLogGroups;
-               if( !isset( $wgDebugLogGroups['memcached'] ) ) {
-                       # Prefix message since it will end up in main debug log file
-                       $text = "memcached: $text";
-               }
                if ( substr( $text, -1 ) !== "\n" ) {
                        $text .= "\n";
                }
                wfDebugLog( 'memcached', $text );
        }
 }
-
index 787a168..2342d63 100644 (file)
@@ -408,10 +408,11 @@ class MWMemcached {
         * Retrieves the value associated with the key from the memcache server
         *
         * @param $key array|string key to retrieve
+        * @param $casToken[optional] Float
         *
         * @return Mixed
         */
-       public function get( $key ) {
+       public function get( $key, &$casToken = null ) {
                wfProfileIn( __METHOD__ );
 
                if ( $this->_debug ) {
@@ -437,14 +438,14 @@ class MWMemcached {
                        $this->stats['get'] = 1;
                }
 
-               $cmd = "get $key\r\n";
+               $cmd = "gets $key\r\n";
                if ( !$this->_fwrite( $sock, $cmd ) ) {
                        wfProfileOut( __METHOD__ );
                        return false;
                }
 
                $val = array();
-               $this->_load_items( $sock, $val );
+               $this->_load_items( $sock, $val, $casToken );
 
                if ( $this->_debug ) {
                        foreach ( $val as $k => $v ) {
@@ -498,7 +499,7 @@ class MWMemcached {
                $gather = array();
                // Send out the requests
                foreach ( $socks as $sock ) {
-                       $cmd = 'get';
+                       $cmd = 'gets';
                        foreach ( $sock_keys[ intval( $sock ) ] as $key ) {
                                $cmd .= ' ' . $key;
                        }
@@ -512,7 +513,7 @@ class MWMemcached {
                // Parse responses
                $val = array();
                foreach ( $gather as $sock ) {
-                       $this->_load_items( $sock, $val );
+                       $this->_load_items( $sock, $val, $casToken );
                }
 
                if ( $this->_debug ) {
@@ -617,6 +618,28 @@ class MWMemcached {
                return $this->_set( 'set', $key, $value, $exp );
        }
 
+       // }}}
+       // {{{ cas()
+
+       /**
+        * Sets a key to a given value in the memcache if the current value still corresponds
+        * to a known, given value.  Returns true if set successfully.
+        *
+        * @param $casToken Float: current known value
+        * @param $key String: key to set value as
+        * @param $value Mixed: value to set
+        * @param $exp Integer: (optional) Expiration time. This can be a number of seconds
+        * to cache for (up to 30 days inclusive).  Any timespans of 30 days + 1 second or
+        * longer must be the timestamp of the time at which the mapping should expire. It
+        * is safe to use timestamps in all cases, regardless of exipration
+        * eg: strtotime("+3 hour")
+        *
+        * @return Boolean: TRUE on success
+        */
+       public function cas( $casToken, $key, $value, $exp = 0 ) {
+               return $this->_set( 'cas', $key, $value, $exp, $casToken );
+       }
+
        // }}}
        // {{{ set_compress_threshold()
 
@@ -879,19 +902,20 @@ class MWMemcached {
         *
         * @param $sock Resource: socket to read from
         * @param $ret Array: returned values
+        * @param $casToken[optional] Float
         * @return boolean True for success, false for failure
         *
         * @access private
         */
-       function _load_items( $sock, &$ret ) {
+       function _load_items( $sock, &$ret, &$casToken = null ) {
                while ( 1 ) {
                        $decl = $this->_fgets( $sock );
                        if( $decl === false ) {
                                return false;
                        } elseif ( $decl == "END" ) {
                                return true;
-                       } elseif ( preg_match( '/^VALUE (\S+) (\d+) (\d+)$/', $decl, $match ) ) {
-                               list( $rkey, $flags, $len ) = array( $match[1], $match[2], $match[3] );
+                       } elseif ( preg_match( '/^VALUE (\S+) (\d+) (\d+) (\d+)$/', $decl, $match ) ) {
+                               list( $rkey, $flags, $len, $casToken ) = array( $match[1], $match[2], $match[3], $match[4] );
                                $data = $this->_fread( $sock, $len + 2 );
                                if ( $data === false ) {
                                        return false;
@@ -933,11 +957,12 @@ class MWMemcached {
         * longer must be the timestamp of the time at which the mapping should expire. It
         * is safe to use timestamps in all cases, regardless of exipration
         * eg: strtotime("+3 hour")
+        * @param $casToken[optional] Float
         *
         * @return Boolean
         * @access private
         */
-       function _set( $cmd, $key, $val, $exp ) {
+       function _set( $cmd, $key, $val, $exp, $casToken = null ) {
                if ( !$this->_active ) {
                        return false;
                }
@@ -966,7 +991,7 @@ class MWMemcached {
                $len = strlen( $val );
 
                if ( $this->_have_zlib && $this->_compress_enable &&
-                        $this->_compress_threshold && $len >= $this->_compress_threshold )
+                       $this->_compress_threshold && $len >= $this->_compress_threshold )
                {
                        $c_val = gzcompress( $val, 9 );
                        $c_len = strlen( $c_val );
@@ -980,7 +1005,13 @@ class MWMemcached {
                                $flags |= self::COMPRESSED;
                        }
                }
-               if ( !$this->_fwrite( $sock, "$cmd $key $flags $exp $len\r\n$val\r\n" ) ) {
+
+               $command = "$cmd $key $flags $exp $len";
+               if ( $casToken ) {
+                       $command .= " $casToken";
+               }
+
+               if ( !$this->_fwrite( $sock, "$command\r\n$val\r\n" ) ) {
                        return false;
                }
 
@@ -1036,11 +1067,6 @@ class MWMemcached {
         * @param $text string
         */
        function _debugprint( $text ) {
-               global $wgDebugLogGroups;
-               if( !isset( $wgDebugLogGroups['memcached'] ) ) {
-                       # Prefix message since it will end up in main debug log file
-                       $text = "memcached: $text";
-               }
                wfDebugLog( 'memcached', $text );
        }
 
index 7793710..9f06fa0 100644 (file)
@@ -104,14 +104,16 @@ class MemcachedPeclBagOStuff extends MemcachedBagOStuff {
 
        /**
         * @param $key string
+        * @param $casToken[optional] float
         * @return Mixed
         */
-       public function get( $key ) {
+       public function get( $key, &$casToken = null ) {
                wfProfileIn( __METHOD__ );
                $this->debugLog( "get($key)" );
-               $value = $this->checkResult( $key, parent::get( $key ) );
+               $result = $this->client->get( $this->encodeKey( $key ), null, $casToken );
+               $result = $this->checkResult( $key, $result );
                wfProfileOut( __METHOD__ );
-               return $value;
+               return $result;
        }
 
        /**
@@ -125,6 +127,18 @@ class MemcachedPeclBagOStuff extends MemcachedBagOStuff {
                return $this->checkResult( $key, parent::set( $key, $value, $exptime ) );
        }
 
+       /**
+        * @param $casToken float
+        * @param $key string
+        * @param $value
+        * @param $exptime int
+        * @return bool
+        */
+       public function cas( $casToken, $key, $value, $exptime = 0 ) {
+               $this->debugLog( "cas($key)" );
+               return $this->checkResult( $key, parent::cas( $casToken, $key, $value, $exptime ) );
+       }
+
        /**
         * @param $key string
         * @param $time int
index 5a9ee50..33a134c 100644 (file)
@@ -100,4 +100,3 @@ class MemcachedPhpBagOStuff extends MemcachedBagOStuff {
                return $this->client->decr( $this->encodeKey( $key ), $value );
        }
 }
-
index 2f37c23..4120749 100644 (file)
@@ -61,9 +61,10 @@ class MultiWriteBagOStuff extends BagOStuff {
 
        /**
         * @param $key string
+        * @param $casToken[optional] mixed
         * @return bool|mixed
         */
-       public function get( $key ) {
+       public function get( $key, &$casToken = null ) {
                foreach ( $this->caches as $cache ) {
                        $value = $cache->get( $key );
                        if ( $value !== false ) {
@@ -73,6 +74,17 @@ class MultiWriteBagOStuff extends BagOStuff {
                return false;
        }
 
+       /**
+        * @param $casToken mixed
+        * @param $key string
+        * @param $value mixed
+        * @param $exptime int
+        * @return bool
+        */
+       public function cas( $casToken, $key, $value, $exptime = 0 ) {
+               throw new MWException( "CAS is not implemented in " . __CLASS__ );
+       }
+
        /**
         * @param $key string
         * @param $value mixed
@@ -156,6 +168,17 @@ class MultiWriteBagOStuff extends BagOStuff {
                }
        }
 
+       /**
+        * @param $key string
+        * @param $callback closure Callback method to be executed
+        * @param $exptime int Either an interval in seconds or a unix timestamp for expiry
+        * @param $attempts int The amount of times to attempt a merge in case of failure
+        * @return bool success
+        */
+       public function merge( $key, closure $callback, $exptime = 0, $attempts = 10 ) {
+               return $this->doWrite( 'merge', $key, $callback, $exptime );
+       }
+
        /**
         * @param $method string
         * @return bool
index 40784f5..2946407 100644 (file)
@@ -90,7 +90,7 @@ class RedisBagOStuff extends BagOStuff {
                }
        }
 
-       public function get( $key ) {
+       public function get( $key, &$casToken = null ) {
                wfProfileIn( __METHOD__ );
                list( $server, $conn ) = $this->getConnection( $key );
                if ( !$conn ) {
@@ -103,6 +103,7 @@ class RedisBagOStuff extends BagOStuff {
                        $result = false;
                        $this->handleException( $server, $e );
                }
+               $casToken = $result;
                $this->logRequest( 'get', $key, $server, $result );
                wfProfileOut( __METHOD__ );
                return $result;
@@ -133,6 +134,49 @@ class RedisBagOStuff extends BagOStuff {
                return $result;
        }
 
+       /**
+        * @param $casToken mixed
+        * @param $key string
+        * @param $value mixed
+        * @param $exptime int
+        * @return bool
+        */
+       public function cas( $casToken, $key, $value, $expiry = 0 ) {
+               wfProfileIn( __METHOD__ );
+               list( $server, $conn ) = $this->getConnection( $key );
+               if ( !$conn ) {
+                       wfProfileOut( __METHOD__ );
+                       return false;
+               }
+               $expiry = $this->convertToRelative( $expiry );
+               try {
+                       $conn->watch( $key );
+
+                       if ( $this->get( $key ) !== $casToken ) {
+                               wfProfileOut( __METHOD__ );
+                               return false;
+                       }
+
+                       $conn->multi();
+
+                       if ( !$expiry ) {
+                               // No expiry, that is very different from zero expiry in Redis
+                               $conn->set( $key, $value );
+                       } else {
+                               $conn->setex( $key, $expiry, $value );
+                       }
+
+                       $result = $conn->exec();
+               } catch ( RedisException $e ) {
+                       $result = false;
+                       $this->handleException( $server, $e );
+               }
+
+               $this->logRequest( 'cas', $key, $server, $result );
+               wfProfileOut( __METHOD__ );
+               return $result;
+       }
+
        public function delete( $key, $time = 0 ) {
                wfProfileIn( __METHOD__ );
                list( $server, $conn ) = $this->getConnection( $key );
@@ -288,23 +332,10 @@ class RedisBagOStuff extends BagOStuff {
                if ( count( $this->servers ) === 1 ) {
                        $candidates = $this->servers;
                } else {
-                       // Use consistent hashing
-                       //
-                       // Note: Benchmarking on PHP 5.3 and 5.4 indicates that for small
-                       // strings, md5() is only 10% slower than hash('joaat',...) etc.,
-                       // since the function call overhead dominates. So there's not much
-                       // justification for breaking compatibility with installations
-                       // compiled with ./configure --disable-hash.
-                       $hashes = array();
-                       foreach ( $this->servers as $server ) {
-                               $hashes[$server] = md5( $server . '/' . $key );
-                       }
-                       asort( $hashes );
+                       $candidates = $this->servers;
+                       ArrayUtils::consistentHashSort( $candidates, $key, '/' );
                        if ( !$this->automaticFailover ) {
-                               reset( $hashes );
-                               $candidates = array( key( $hashes ) );
-                       } else {
-                               $candidates = array_keys( $hashes );
+                               $candidates = array_slice( $candidates, 0, 1 );
                        }
                }
 
@@ -418,4 +449,3 @@ class RedisBagOStuff extends BagOStuff {
                        ( $result === false ? "failure" : "success" ) );
        }
 }
-
index 222d475..bae1b75 100644 (file)
@@ -32,23 +32,26 @@ class SqlBagOStuff extends BagOStuff {
         */
        var $lb;
 
-       /**
-        * @var DatabaseBase
-        */
-       var $db;
-       var $serverInfo;
+       var $serverInfos;
+       var $serverNames;
+       var $numServers;
+       var $conns;
        var $lastExpireAll = 0;
        var $purgePeriod = 100;
        var $shards = 1;
        var $tableName = 'objectcache';
 
-       protected $connFailureTime = 0; // UNIX timestamp
-       protected $connFailureError; // exception
+       protected $connFailureTimes = array(); // UNIX timestamps
+       protected $connFailureErrors = array(); // exceptions
 
        /**
         * Constructor. Parameters are:
-        *   - server:   A server info structure in the format required by each
-        *               element in $wgDBServers.
+        *   - server:      A server info structure in the format required by each
+        *                  element in $wgDBServers.
+        *
+        *   - servers:     An array of server info structures describing a set of
+        *                  database servers to distribute keys to. If this is
+        *                  specified, the "server" option will be ignored.
         *
         *   - purgePeriod: The average number of object cache requests in between
         *                  garbage collection operations, where expired entries
@@ -59,8 +62,8 @@ class SqlBagOStuff extends BagOStuff {
         *
         *   - tableName:   The table name to use, default is "objectcache".
         *
-        *   - shards:      The number of tables to use for data storage. If this is
-        *                  more than 1, table names will be formed in the style
+        *   - shards:      The number of tables to use for data storage on each server.
+        *                  If this is more than 1, table names will be formed in the style
         *                  objectcacheNNN where NNN is the shard index, between 0 and
         *                  shards-1. The number of digits will be the minimum number
         *                  required to hold the largest shard index. Data will be
@@ -70,9 +73,19 @@ class SqlBagOStuff extends BagOStuff {
         * @param $params array
         */
        public function __construct( $params ) {
-               if ( isset( $params['server'] ) ) {
-                       $this->serverInfo = $params['server'];
-                       $this->serverInfo['load'] = 1;
+               if ( isset( $params['servers'] ) ) {
+                       $this->serverInfos = $params['servers'];
+                       $this->numServers = count( $this->serverInfos );
+                       $this->serverNames = array();
+                       foreach ( $this->serverInfos as $i => $info ) {
+                               $this->serverNames[$i] = isset( $info['host'] ) ? $info['host'] : "#$i";
+                       }
+               } elseif ( isset( $params['server'] ) ) {
+                       $this->serverInfos = array( $params['server'] );
+                       $this->numServers = count( $this->serverInfos );
+               } else {
+                       $this->serverInfos = false;
+                       $this->numServers = 1;
                }
                if ( isset( $params['purgePeriod'] ) ) {
                        $this->purgePeriod = intval( $params['purgePeriod'] );
@@ -86,27 +99,37 @@ class SqlBagOStuff extends BagOStuff {
        }
 
        /**
-        * @throws
+        * Get a connection to the specified database
+        *
+        * @param $serverIndex integer
         * @return DatabaseBase
         */
-       protected function getDB() {
+       protected function getDB( $serverIndex ) {
                global $wgDebugDBTransactions;
 
-               # Don't keep timing out trying to connect for each call if the DB is down
-               if ( $this->connFailureError && ( time() - $this->connFailureTime ) < 60 ) {
-                       throw $this->connFailureError;
-               }
+               if ( !isset( $this->conns[$serverIndex] ) ) {
+                       if ( $serverIndex >= $this->numServers ) {
+                               throw new MWException( __METHOD__ . ": Invalid server index \"$serverIndex\"" );
+                       }
+
+                       # Don't keep timing out trying to connect for each call if the DB is down
+                       if ( isset( $this->connFailureErrors[$serverIndex] )
+                               && ( time() - $this->connFailureTimes[$serverIndex] ) < 60 )
+                       {
+                               throw $this->connFailureErrors[$serverIndex];
+                       }
 
-               if ( !isset( $this->db ) ) {
                        # If server connection info was given, use that
-                       if ( $this->serverInfo ) {
+                       if ( $this->serverInfos ) {
                                if ( $wgDebugDBTransactions ) {
-                                       wfDebug( sprintf( "Using provided serverInfo for SqlBagOStuff\n" ) );
+                                       wfDebug( "Using provided serverInfo for SqlBagOStuff\n" );
                                }
-                               $this->lb = new LoadBalancer( array(
-                                       'servers' => array( $this->serverInfo ) ) );
-                               $this->db = $this->lb->getConnection( DB_MASTER );
-                               $this->db->clearFlag( DBO_TRX );
+                               $info = $this->serverInfos[$serverIndex];
+                               $type = isset( $info['type'] ) ? $info['type'] : 'mysql';
+                               $host = isset( $info['host'] ) ? $info['host'] : '[unknown]';
+                               wfDebug( __CLASS__ . ": connecting to $host\n" );
+                               $db = DatabaseBase::factory( $type, $info );
+                               $db->clearFlag( DBO_TRX );
                        } else {
                                /*
                                 * We must keep a separate connection to MySQL in order to avoid deadlocks
@@ -115,32 +138,42 @@ class SqlBagOStuff extends BagOStuff {
                                 */
                                if ( wfGetDB( DB_MASTER )->getType() == 'mysql' ) {
                                        $this->lb = wfGetLBFactory()->newMainLB();
-                                       $this->db = $this->lb->getConnection( DB_MASTER );
-                                       $this->db->clearFlag( DBO_TRX ); // auto-commit mode
+                                       $db = $this->lb->getConnection( DB_MASTER );
+                                       $db->clearFlag( DBO_TRX ); // auto-commit mode
                                } else {
-                                       $this->db = wfGetDB( DB_MASTER );
+                                       $db = wfGetDB( DB_MASTER );
                                }
                        }
                        if ( $wgDebugDBTransactions ) {
-                               wfDebug( sprintf( "Connection %s will be used for SqlBagOStuff\n", $this->db ) );
+                               wfDebug( sprintf( "Connection %s will be used for SqlBagOStuff\n", $db ) );
                        }
+                       $this->conns[$serverIndex] = $db;
                }
 
-               return $this->db;
+               return $this->conns[$serverIndex];
        }
 
        /**
-        * Get the table name for a given key
+        * Get the server index and table name for a given key
         * @param $key string
-        * @return string
+        * @return Array: server index and table name
         */
        protected function getTableByKey( $key ) {
                if ( $this->shards > 1 ) {
                        $hash = hexdec( substr( md5( $key ), 0, 8 ) ) & 0x7fffffff;
-                       return $this->getTableByShard( $hash % $this->shards );
+                       $tableIndex = $hash % $this->shards;
                } else {
-                       return $this->tableName;
+                       $tableIndex = 0;
+               }
+               if ( $this->numServers > 1 ) {
+                       $sortedServers = $this->serverNames;
+                       ArrayUtils::consistentHashSort( $sortedServers, $key );
+                       reset( $sortedServers );
+                       $serverIndex = key( $sortedServers );
+               } else {
+                       $serverIndex = 0;
                }
+               return array( $serverIndex, $this->getTableNameByShard( $tableIndex ) );
        }
 
        /**
@@ -148,7 +181,7 @@ class SqlBagOStuff extends BagOStuff {
         * @param $index int
         * @return string
         */
-       protected function getTableByShard( $index ) {
+       protected function getTableNameByShard( $index ) {
                if ( $this->shards > 1 ) {
                        $decimals = strlen( $this->shards - 1 );
                        return $this->tableName .
@@ -160,11 +193,16 @@ class SqlBagOStuff extends BagOStuff {
 
        /**
         * @param $key string
+        * @param $casToken[optional] mixed
         * @return mixed
         */
-       public function get( $key ) {
+       public function get( $key, &$casToken = null ) {
                $values = $this->getMulti( array( $key ) );
-               return array_key_exists( $key, $values ) ? $values[$key] : false;
+               if ( array_key_exists( $key, $values ) ) {
+                       $casToken = $values[$key];
+                       return $values[$key];
+               }
+               return false;
        }
 
        /**
@@ -174,59 +212,61 @@ class SqlBagOStuff extends BagOStuff {
        public function getMulti( array $keys ) {
                $values = array(); // array of (key => value)
 
-               try {
-                       $db = $this->getDB();
-                       $keysByTableName = array();
-                       foreach ( $keys as $key ) {
-                               $tableName = $this->getTableByKey( $key );
-                               if ( !isset( $keysByTableName[$tableName] ) ) {
-                                       $keysByTableName[$tableName] = array();
-                               }
-                               $keysByTableName[$tableName][] = $key;
-                       }
+               $keysByTable = array();
+               foreach ( $keys as $key ) {
+                       list( $serverIndex, $tableName ) = $this->getTableByKey( $key );
+                       $keysByTable[$serverIndex][$tableName][] = $key;
+               }
 
-                       $this->garbageCollect(); // expire old entries if any
+               $this->garbageCollect(); // expire old entries if any
 
-                       $dataRows = array();
-                       foreach ( $keysByTableName as $tableName => $tableKeys ) {
-                               $res = $db->select( $tableName,
-                                       array( 'keyname', 'value', 'exptime' ),
-                                       array( 'keyname' => $tableKeys ),
-                                       __METHOD__ );
-                               foreach ( $res as $row ) {
-                                       $dataRows[$row->keyname] = $row;
+               $dataRows = array();
+               foreach ( $keysByTable as $serverIndex => $serverKeys ) {
+                       $db = $this->getDB( $serverIndex );
+                       try {
+                               foreach ( $serverKeys as $tableName => $tableKeys ) {
+                                       $res = $db->select( $tableName,
+                                               array( 'keyname', 'value', 'exptime' ),
+                                               array( 'keyname' => $tableKeys ),
+                                               __METHOD__ );
+                                       foreach ( $res as $row ) {
+                                               $row->serverIndex = $serverIndex;
+                                               $row->tableName = $tableName;
+                                               $dataRows[$row->keyname] = $row;
+                                       }
                                }
+                       } catch ( DBError $e ) {
+                               $this->handleReadError( $e, $serverIndex );
                        }
+               }
 
-                       foreach ( $keys as $key ) {
-                               if ( isset( $dataRows[$key] ) ) { // HIT?
-                                       $row = $dataRows[$key];
-                                       $this->debug( "get: retrieved data; expiry time is " . $row->exptime );
-                                       if ( $this->isExpired( $row->exptime ) ) { // MISS
-                                               $this->debug( "get: key has expired, deleting" );
-                                               try {
-                                                       $db->begin( __METHOD__ );
-                                                       # Put the expiry time in the WHERE condition to avoid deleting a
-                                                       # newly-inserted value
-                                                       $db->delete( $this->getTableByKey( $key ),
-                                                               array( 'keyname' => $key, 'exptime' => $row->exptime ),
-                                                               __METHOD__ );
-                                                       $db->commit( __METHOD__ );
-                                               } catch ( DBQueryError $e ) {
-                                                       $this->handleWriteError( $e );
-                                               }
-                                               $values[$key] = false;
-                                       } else { // HIT
-                                               $values[$key] = $this->unserialize( $db->decodeBlob( $row->value ) );
+               foreach ( $keys as $key ) {
+                       if ( isset( $dataRows[$key] ) ) { // HIT?
+                               $row = $dataRows[$key];
+                               $this->debug( "get: retrieved data; expiry time is " . $row->exptime );
+                               $db = $this->getDB( $row->serverIndex );
+                               if ( $this->isExpired( $db, $row->exptime ) ) { // MISS
+                                       $this->debug( "get: key has expired, deleting" );
+                                       try {
+                                               $db->begin( __METHOD__ );
+                                               # 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__ );
+                                       } catch ( DBQueryError $e ) {
+                                               $this->handleWriteError( $e, $row->serverIndex );
                                        }
-                               } else { // MISS
                                        $values[$key] = false;
-                                       $this->debug( 'get: no matching rows' );
+                               } else { // HIT
+                                       $values[$key] = $this->unserialize( $db->decodeBlob( $row->value ) );
                                }
+                       } else { // MISS
+                               $values[$key] = false;
+                               $this->debug( 'get: no matching rows' );
                        }
-               } catch ( DBError $e ) {
-                       $this->handleReadError( $e );
-               };
+               }
 
                return $values;
        }
@@ -238,8 +278,9 @@ class SqlBagOStuff extends BagOStuff {
         * @return bool
         */
        public function set( $key, $value, $exptime = 0 ) {
+               list( $serverIndex, $tableName ) = $this->getTableByKey( $key );
                try {
-                       $db = $this->getDB();
+                       $db = $this->getDB( $serverIndex );
                        $exptime = intval( $exptime );
 
                        if ( $exptime < 0 ) {
@@ -247,7 +288,7 @@ class SqlBagOStuff extends BagOStuff {
                        }
 
                        if ( $exptime == 0 ) {
-                               $encExpiry = $this->getMaxDateTime();
+                               $encExpiry = $this->getMaxDateTime( $db );
                        } else {
                                if ( $exptime < 3.16e8 ) { # ~10 years
                                        $exptime += time();
@@ -259,7 +300,7 @@ class SqlBagOStuff extends BagOStuff {
                        // (bug 24425) use a replace if the db supports it instead of
                        // delete/insert to avoid clashes with conflicting keynames
                        $db->replace(
-                               $this->getTableByKey( $key ),
+                               $tableName,
                                array( 'keyname' ),
                                array(
                                        'keyname' => $key,
@@ -268,29 +309,79 @@ class SqlBagOStuff extends BagOStuff {
                                ), __METHOD__ );
                        $db->commit( __METHOD__ );
                } catch ( DBError $e ) {
-                       $this->handleWriteError( $e );
+                       $this->handleWriteError( $e, $serverIndex );
                        return false;
                }
 
                return true;
        }
 
+       /**
+        * @param $casToken mixed
+        * @param $key string
+        * @param $value mixed
+        * @param $exptime int
+        * @return bool
+        */
+       public function cas( $casToken, $key, $value, $exptime = 0 ) {
+               $db = $this->getDB();
+               $exptime = intval( $exptime );
+
+               if ( $exptime < 0 ) {
+                       $exptime = 0;
+               }
+
+               if ( $exptime == 0 ) {
+                       $encExpiry = $this->getMaxDateTime();
+               } else {
+                       if ( $exptime < 3.16e8 ) { # ~10 years
+                               $exptime += time();
+                       }
+
+                       $encExpiry = $db->timestamp( $exptime );
+               }
+               try {
+                       $db->begin( __METHOD__ );
+                       // (bug 24425) use a replace if the db supports it instead of
+                       // delete/insert to avoid clashes with conflicting keynames
+                       $db->update(
+                               $this->getTableByKey( $key ),
+                               array(
+                                       'keyname' => $key,
+                                       'value' => $db->encodeBlob( $this->serialize( $value ) ),
+                                       'exptime' => $encExpiry
+                               ),
+                               array(
+                                       'keyname' => $key,
+                                       'value' => $db->encodeBlob( $this->serialize( $casToken ) )
+                               ), __METHOD__ );
+                       $db->commit( __METHOD__ );
+               } catch ( DBQueryError $e ) {
+                       $this->handleWriteError( $e );
+
+                       return false;
+               }
+
+               return (bool) $db->affectedRows();
+       }
+
        /**
         * @param $key string
         * @param $time int
         * @return bool
         */
        public function delete( $key, $time = 0 ) {
+               list( $serverIndex, $tableName ) = $this->getTableByKey( $key );
                try {
-                       $db = $this->getDB();
+                       $db = $this->getDB( $serverIndex );
                        $db->begin( __METHOD__ );
                        $db->delete(
-                               $this->getTableByKey( $key ),
+                               $tableName,
                                array( 'keyname' => $key ),
                                __METHOD__ );
                        $db->commit( __METHOD__ );
                } catch ( DBError $e ) {
-                       $this->handleWriteError( $e );
+                       $this->handleWriteError( $e, $serverIndex );
                        return false;
                }
 
@@ -303,9 +394,9 @@ class SqlBagOStuff extends BagOStuff {
         * @return int|null
         */
        public function incr( $key, $step = 1 ) {
+               list( $serverIndex, $tableName ) = $this->getTableByKey( $key );
                try {
-                       $db = $this->getDB();
-                       $tableName = $this->getTableByKey( $key );
+                       $db = $this->getDB( $serverIndex );
                        $step = intval( $step );
                        $db->begin( __METHOD__ );
                        $row = $db->selectRow(
@@ -321,7 +412,7 @@ class SqlBagOStuff extends BagOStuff {
                                return null;
                        }
                        $db->delete( $tableName, array( 'keyname' => $key ), __METHOD__ );
-                       if ( $this->isExpired( $row->exptime ) ) {
+                       if ( $this->isExpired( $db, $row->exptime ) ) {
                                // Expired, do not reinsert
                                $db->commit( __METHOD__ );
 
@@ -343,51 +434,29 @@ class SqlBagOStuff extends BagOStuff {
                        }
                        $db->commit( __METHOD__ );
                } catch ( DBError $e ) {
-                       $this->handleWriteError( $e );
+                       $this->handleWriteError( $e, $serverIndex );
                        return null;
                }
 
                return $newValue;
        }
 
-       /**
-        * @return Array
-        */
-       public function keys() {
-               $result = array();
-
-               try {
-                       $db = $this->getDB();
-                       for ( $i = 0; $i < $this->shards; $i++ ) {
-                               $res = $db->select( $this->getTableByShard( $i ),
-                                       array( 'keyname' ), false, __METHOD__ );
-                               foreach ( $res as $row ) {
-                                       $result[] = $row->keyname;
-                               }
-                       }
-               } catch ( DBError $e ) {
-                       $this->handleReadError( $e );
-               }
-
-               return $result;
-       }
-
        /**
         * @param $exptime string
         * @return bool
         */
-       protected function isExpired( $exptime ) {
-               return $exptime != $this->getMaxDateTime() && wfTimestamp( TS_UNIX, $exptime ) < time();
+       protected function isExpired( $db, $exptime ) {
+               return $exptime != $this->getMaxDateTime( $db ) && wfTimestamp( TS_UNIX, $exptime ) < time();
        }
 
        /**
         * @return string
         */
-       protected function getMaxDateTime() {
+       protected function getMaxDateTime( $db ) {
                if ( time() > 0x7fffffff ) {
-                       return $this->getDB()->timestamp( 1 << 62 );
+                       return $db->timestamp( 1 << 62 );
                } else {
-                       return $this->getDB()->timestamp( 0x7fffffff );
+                       return $db->timestamp( 0x7fffffff );
                }
        }
 
@@ -419,87 +488,91 @@ class SqlBagOStuff extends BagOStuff {
         * @return bool
         */
        public function deleteObjectsExpiringBefore( $timestamp, $progressCallback = false ) {
-               try {
-                       $db = $this->getDB();
-                       $dbTimestamp = $db->timestamp( $timestamp );
-                       $totalSeconds = false;
-                       $baseConds = array( 'exptime < ' . $db->addQuotes( $dbTimestamp ) );
-                       for ( $i = 0; $i < $this->shards; $i++ ) {
-                               $maxExpTime = false;
-                               while ( true ) {
-                                       $conds = $baseConds;
-                                       if ( $maxExpTime !== false ) {
-                                               $conds[] = 'exptime > ' . $db->addQuotes( $maxExpTime );
-                                       }
-                                       $rows = $db->select(
-                                               $this->getTableByShard( $i ),
-                                               array( 'keyname', 'exptime' ),
-                                               $conds,
-                                               __METHOD__,
-                                               array( 'LIMIT' => 100, 'ORDER BY' => 'exptime' ) );
-                                       if ( !$rows->numRows() ) {
-                                               break;
-                                       }
-                                       $keys = array();
-                                       $row = $rows->current();
-                                       $minExpTime = $row->exptime;
-                                       if ( $totalSeconds === false ) {
-                                               $totalSeconds = wfTimestamp( TS_UNIX, $timestamp )
-                                                       - wfTimestamp( TS_UNIX, $minExpTime );
-                                       }
-                                       foreach ( $rows as $row ) {
-                                               $keys[] = $row->keyname;
-                                               $maxExpTime = $row->exptime;
-                                       }
-
-                                       $db->begin( __METHOD__ );
-                                       $db->delete(
-                                               $this->getTableByShard( $i ),
-                                               array(
-                                                       'exptime >= ' . $db->addQuotes( $minExpTime ),
-                                                       'exptime < ' . $db->addQuotes( $dbTimestamp ),
-                                                       'keyname' => $keys
-                                               ),
-                                               __METHOD__ );
-                                       $db->commit( __METHOD__ );
+               for ( $serverIndex = 0; $serverIndex < $this->numServers; $serverIndex++ ) {
+                       try {
+                               $db = $this->getDB( $serverIndex );
+                               $dbTimestamp = $db->timestamp( $timestamp );
+                               $totalSeconds = false;
+                               $baseConds = array( 'exptime < ' . $db->addQuotes( $dbTimestamp ) );
+                               for ( $i = 0; $i < $this->shards; $i++ ) {
+                                       $maxExpTime = false;
+                                       while ( true ) {
+                                               $conds = $baseConds;
+                                               if ( $maxExpTime !== false ) {
+                                                       $conds[] = 'exptime > ' . $db->addQuotes( $maxExpTime );
+                                               }
+                                               $rows = $db->select(
+                                                       $this->getTableNameByShard( $i ),
+                                                       array( 'keyname', 'exptime' ),
+                                                       $conds,
+                                                       __METHOD__,
+                                                       array( 'LIMIT' => 100, 'ORDER BY' => 'exptime' ) );
+                                               if ( !$rows->numRows() ) {
+                                                       break;
+                                               }
+                                               $keys = array();
+                                               $row = $rows->current();
+                                               $minExpTime = $row->exptime;
+                                               if ( $totalSeconds === false ) {
+                                                       $totalSeconds = wfTimestamp( TS_UNIX, $timestamp )
+                                                               - wfTimestamp( TS_UNIX, $minExpTime );
+                                               }
+                                               foreach ( $rows as $row ) {
+                                                       $keys[] = $row->keyname;
+                                                       $maxExpTime = $row->exptime;
+                                               }
 
-                                       if ( $progressCallback ) {
-                                               if ( intval( $totalSeconds ) === 0 ) {
-                                                       $percent = 0;
-                                               } else {
-                                                       $remainingSeconds = wfTimestamp( TS_UNIX, $timestamp )
-                                                               - wfTimestamp( TS_UNIX, $maxExpTime );
-                                                       if ( $remainingSeconds > $totalSeconds ) {
-                                                               $totalSeconds = $remainingSeconds;
+                                               $db->begin( __METHOD__ );
+                                               $db->delete(
+                                                       $this->getTableNameByShard( $i ),
+                                                       array(
+                                                               'exptime >= ' . $db->addQuotes( $minExpTime ),
+                                                               'exptime < ' . $db->addQuotes( $dbTimestamp ),
+                                                               'keyname' => $keys
+                                                       ),
+                                                       __METHOD__ );
+                                               $db->commit( __METHOD__ );
+
+                                               if ( $progressCallback ) {
+                                                       if ( intval( $totalSeconds ) === 0 ) {
+                                                               $percent = 0;
+                                                       } else {
+                                                               $remainingSeconds = wfTimestamp( TS_UNIX, $timestamp )
+                                                                       - wfTimestamp( TS_UNIX, $maxExpTime );
+                                                               if ( $remainingSeconds > $totalSeconds ) {
+                                                                       $totalSeconds = $remainingSeconds;
+                                                               }
+                                                               $percent = ( $i + $remainingSeconds / $totalSeconds )
+                                                                       / $this->shards * 100;
                                                        }
-                                                       $percent = ( $i + $remainingSeconds / $totalSeconds )
-                                                               / $this->shards * 100;
+                                                       $percent = ( $percent / $this->numServers )
+                                                               + ( $serverIndex / $this->numServers * 100 );
+                                                       call_user_func( $progressCallback, $percent );
                                                }
-                                               call_user_func( $progressCallback, $percent );
                                        }
                                }
+                       } catch ( DBError $e ) {
+                               $this->handleWriteError( $e, $serverIndex );
+                               return false;
                        }
-               } catch ( DBError $e ) {
-                       $this->handleWriteError( $e );
-                       return false;
                }
-
                return true;
        }
 
        public function deleteAll() {
-               try {
-                       $db = $this->getDB();
-                       for ( $i = 0; $i < $this->shards; $i++ ) {
-                               $db->begin( __METHOD__ );
-                               $db->delete( $this->getTableByShard( $i ), '*', __METHOD__ );
-                               $db->commit( __METHOD__ );
+               for ( $serverIndex = 0; $serverIndex < $this->numServers; $serverIndex++ ) {
+                       try {
+                               $db = $this->getDB( $serverIndex );
+                               for ( $i = 0; $i < $this->shards; $i++ ) {
+                                       $db->begin( __METHOD__ );
+                                       $db->delete( $this->getTableNameByShard( $i ), '*', __METHOD__ );
+                                       $db->commit( __METHOD__ );
+                               }
+                       } catch ( DBError $e ) {
+                               $this->handleWriteError( $e, $serverIndex );
+                               return false;
                        }
-               } catch ( DBError $e ) {
-                       $this->handleWriteError( $e );
-                       return false;
                }
-
                return true;
        }
 
@@ -545,58 +618,77 @@ class SqlBagOStuff extends BagOStuff {
        /**
         * Handle a DBError which occurred during a read operation.
         */
-       protected function handleReadError( DBError $exception ) {
+       protected function handleReadError( DBError $exception, $serverIndex ) {
                if ( $exception instanceof DBConnectionError ) {
-                       $this->connFailureTime  = time();
-                       $this->connFailureError = $exception;
+                       $this->markServerDown( $exception, $serverIndex );
                }
                wfDebugLog( 'SQLBagOStuff', "DBError: {$exception->getMessage()}" );
-               if ( $this->db ) {
-                       wfDebug( __METHOD__ . ": ignoring query error\n" );
-               } else {
+               if ( $exception instanceof DBConnectionError ) {
                        wfDebug( __METHOD__ . ": ignoring connection error\n" );
+               } else {
+                       wfDebug( __METHOD__ . ": ignoring query error\n" );
                }
        }
 
        /**
         * Handle a DBQueryError which occurred during a write operation.
         */
-       protected function handleWriteError( DBError $exception ) {
+       protected function handleWriteError( DBError $exception, $serverIndex ) {
                if ( $exception instanceof DBConnectionError ) {
-                       $this->connFailureTime  = time();
-                       $this->connFailureError = $exception;
+                       $this->markServerDown( $exception, $serverIndex );
                }
-               if ( $this->db && $this->db->wasReadOnlyError() ) {
+               if ( $exception->db && $exception->db->wasReadOnlyError() ) {
                        try {
-                               $this->db->rollback( __METHOD__ );
+                               $exception->db->rollback( __METHOD__ );
                        } catch ( DBError $e ) {}
                }
                wfDebugLog( 'SQLBagOStuff', "DBError: {$exception->getMessage()}" );
-               if ( $this->db ) {
-                       wfDebug( __METHOD__ . ": ignoring query error\n" );
-               } else {
+               if ( $exception instanceof DBConnectionError ) {
                        wfDebug( __METHOD__ . ": ignoring connection error\n" );
+               } else {
+                       wfDebug( __METHOD__ . ": ignoring query error\n" );
                }
        }
 
+       /**
+        * Mark a server down due to a DBConnectionError exception
+        */
+       protected function markServerDown( $exception, $serverIndex ) {
+               if ( isset( $this->connFailureTimes[$serverIndex] ) ) {
+                       if ( time() - $this->connFailureTimes[$serverIndex] >= 60 ) {
+                               unset( $this->connFailureTimes[$serverIndex] );
+                               unset( $this->connFailureErrors[$serverIndex] );
+                       } else {
+                               wfDebug( __METHOD__ . ": Server #$serverIndex already down\n" );
+                               return;
+                       }
+               }
+               $now = time();
+               wfDebug( __METHOD__ . ": Server #$serverIndex down until " . ( $now + 60 ) . "\n" );
+               $this->connFailureTimes[$serverIndex] = $now;
+               $this->connFailureErrors[$serverIndex] = $exception;
+       }
+
        /**
         * Create shard tables. For use from eval.php.
         */
        public function createTables() {
-               $db = $this->getDB();
-               if ( $db->getType() !== 'mysql'
-                       || version_compare( $db->getServerVersion(), '4.1.0', '<' ) )
-               {
-                       throw new MWException( __METHOD__ . ' is not supported on this DB server' );
-               }
+               for ( $serverIndex = 0; $serverIndex < $this->numServers; $serverIndex++ ) {
+                       $db = $this->getDB( $serverIndex );
+                       if ( $db->getType() !== 'mysql'
+                               || version_compare( $db->getServerVersion(), '4.1.0', '<' ) )
+                       {
+                               throw new MWException( __METHOD__ . ' is not supported on this DB server' );
+                       }
 
-               for ( $i = 0; $i < $this->shards; $i++ ) {
-                       $db->begin( __METHOD__ );
-                       $db->query(
-                               'CREATE TABLE ' . $db->tableName( $this->getTableByShard( $i ) ) .
-                               ' LIKE ' . $db->tableName( 'objectcache' ),
-                               __METHOD__ );
-                       $db->commit( __METHOD__ );
+                       for ( $i = 0; $i < $this->shards; $i++ ) {
+                               $db->begin( __METHOD__ );
+                               $db->query(
+                                       'CREATE TABLE ' . $db->tableName( $this->getTableNameByShard( $i ) ) .
+                                       ' LIKE ' . $db->tableName( 'objectcache' ),
+                                       __METHOD__ );
+                               $db->commit( __METHOD__ );
+                       }
                }
        }
 }
@@ -605,4 +697,3 @@ class SqlBagOStuff extends BagOStuff {
  * Backwards compatibility alias
  */
 class MediaWikiBagOStuff extends SqlBagOStuff { }
-
index 21aa39e..83f51f9 100644 (file)
@@ -33,11 +33,14 @@ class WinCacheBagOStuff extends BagOStuff {
         * Get a value from the WinCache object cache
         *
         * @param $key String: cache key
+        * @param $casToken[optional] int: cas token
         * @return mixed
         */
-       public function get( $key ) {
+       public function get( $key, &$casToken = null ) {
                $val = wincache_ucache_get( $key );
 
+               $casToken = $val;
+
                if ( is_string( $val ) ) {
                        $val = unserialize( $val );
                }
@@ -61,6 +64,19 @@ class WinCacheBagOStuff extends BagOStuff {
                return ( is_array( $result ) && $result === array() ) || $result;
        }
 
+       /**
+        * Store a value in the WinCache object cache, race condition-safe
+        *
+        * @param $casToken int: cas token
+        * @param $key String: cache key
+        * @param $value int: object to store
+        * @param $exptime Int: expiration time
+        * @return bool
+        */
+       public function cas( $casToken, $key, $value, $exptime = 0 ) {
+               return wincache_ucache_cas( $key, $casToken, serialize( $value ) );
+       }
+
        /**
         * Remove a value from the WinCache object cache
         *
@@ -73,23 +89,4 @@ class WinCacheBagOStuff extends BagOStuff {
 
                return true;
        }
-
-       /**
-        * @return Array
-        */
-       public function keys() {
-               $info = wincache_ucache_info();
-               $list = $info['ucache_entries'];
-               $keys = array();
-
-               if ( is_null( $list ) ) {
-                       return array();
-               }
-
-               foreach ( $list as $entry ) {
-                       $keys[] = $entry['key_name'];
-               }
-
-               return $keys;
-       }
 }
index 6c88289..2722e9c 100644 (file)
@@ -32,9 +32,10 @@ class XCacheBagOStuff extends BagOStuff {
         * Get a value from the XCache object cache
         *
         * @param $key String: cache key
+        * @param $casToken mixed: cas token
         * @return mixed
         */
-       public function get( $key ) {
+       public function get( $key, &$casToken = null ) {
                $val = xcache_get( $key );
 
                if ( is_string( $val ) ) {
@@ -43,6 +44,8 @@ class XCacheBagOStuff extends BagOStuff {
                        } else {
                                $val = unserialize( $val );
                        }
+               } elseif ( is_null( $val ) ) {
+                       return false;
                }
 
                return $val;
@@ -65,6 +68,18 @@ class XCacheBagOStuff extends BagOStuff {
                return true;
        }
 
+       /**
+        * @param $casToken mixed
+        * @param $key string
+        * @param $value mixed
+        * @param $exptime int
+        * @return bool
+        */
+       public function cas( $casToken, $key, $value, $exptime = 0 ) {
+               // Can't find any documentation on xcache cas
+               throw new MWException( "CAS is not implemented in " . __CLASS__ );
+       }
+
        /**
         * Remove a value from the XCache object cache
         *
@@ -77,6 +92,21 @@ class XCacheBagOStuff extends BagOStuff {
                return true;
        }
 
+       /**
+        * Merge an item.
+        * XCache does not seem to support any way of performing CAS - this however will
+        * provide a way to perform CAS-like functionality.
+        *
+        * @param $key string
+        * @param $callback closure Callback method to be executed
+        * @param $exptime int Either an interval in seconds or a unix timestamp for expiry
+        * @param $attempts int The amount of times to attempt a merge in case of failure
+        * @return bool success
+        */
+       public function merge( $key, closure $callback, $exptime = 0, $attempts = 10 ) {
+               return $this->mergeViaLock( $key, $callback, $exptime, $attempts );
+       }
+
        public function incr( $key, $value = 1 ) {
                return xcache_inc( $key, $value );
        }
index 4bfa9d3..1cabf76 100644 (file)
@@ -47,15 +47,15 @@ class CoreLinkFunctions {
         */
        static function defaultLinkHook( $parser, $holders, $markers,
                        Title $title, $titleText, &$displayText = null, &$leadingColon = false ) {
-               if( isset($displayText) && $markers->findMarker( $displayText ) ) {
+               if( isset( $displayText ) && $markers->findMarker( $displayText ) ) {
                        # There are links inside of the displayText
                        # For backwards compatibility the deepest links are dominant so this
                        # link should not be handled
-                       $displayText = $markers->expand($displayText);
+                       $displayText = $markers->expand( $displayText );
                        # Return false so that this link is reverted back to WikiText
                        return false;
                }
-               return $holders->makeHolder( $title, isset($displayText) ? $displayText : $titleText, array(), '', '' );
+               return $holders->makeHolder( $title, isset( $displayText ) ? $displayText : $titleText, array(), '', '' );
        }
 
        /**
@@ -73,15 +73,15 @@ class CoreLinkFunctions {
                global $wgContLang;
                # When a category link starts with a : treat it as a normal link
                if( $leadingColon ) return true;
-               if( isset($sortText) && $markers->findMarker( $sortText ) ) {
+               if( isset( $sortText ) && $markers->findMarker( $sortText ) ) {
                        # There are links inside of the sortText
                        # For backwards compatibility the deepest links are dominant so this
                        # link should not be handled
-                       $sortText = $markers->expand($sortText);
+                       $sortText = $markers->expand( $sortText );
                        # Return false so that this link is reverted back to WikiText
                        return false;
                }
-               if( !isset($sortText) ) $sortText = $parser->getDefaultSort();
+               if( !isset( $sortText ) ) $sortText = $parser->getDefaultSort();
                $sortText = Sanitizer::decodeCharReferences( $sortText );
                $sortText = str_replace( "\n", '', $sortText );
                $sortText = $wgContLang->convertCategoryKey( $sortText );
index 8917b6d..b2a72a4 100644 (file)
@@ -422,7 +422,7 @@ class CoreParserFunctions {
                return self::formatRaw( SiteStats::images(), $raw );
        }
        static function numberofadmins( $parser, $raw = null ) {
-               return self::formatRaw( SiteStats::numberingroup('sysop'), $raw );
+               return self::formatRaw( SiteStats::numberingroup( 'sysop' ), $raw );
        }
        static function numberofedits( $parser, $raw = null ) {
                return self::formatRaw( SiteStats::edits(), $raw );
@@ -662,21 +662,31 @@ class CoreParserFunctions {
                        $length = $cache[$page];
                } elseif( $parser->incrementExpensiveFunctionCount() ) {
                        $rev = Revision::newFromTitle( $title, false, Revision::READ_NORMAL );
-                       $id = $rev ? $rev->getPage() : 0;
+                       $pageID = $rev ? $rev->getPage() : 0;
+                       $revID = $rev ? $rev->getId() : 0;
                        $length = $cache[$page] = $rev ? $rev->getSize() : 0;
 
                        // Register dependency in templatelinks
-                       $parser->mOutput->addTemplate( $title, $id, $rev ? $rev->getId() : 0 );
+                       $parser->mOutput->addTemplate( $title, $pageID, $revID );
                }
                return self::formatRaw( $length, $raw );
        }
 
        /**
-       * Returns the requested protection level for the current page
+        * Returns the requested protection level for the current page
+        *
+        * @param Parser $parser
+        * @param string $type
+        * @param string $title
+        *
         * @return string
         */
-       static function protectionlevel( $parser, $type = '' ) {
-               $restrictions = $parser->mTitle->getRestrictions( strtolower( $type ) );
+       static function protectionlevel( $parser, $type = '', $title = '' ) {
+               $titleObject = Title::newFromText( $title );
+               if ( !( $titleObject instanceof Title ) ) {
+                       $titleObject = $parser->mTitle;
+               }
+               $restrictions = $titleObject->getRestrictions( strtolower( $type ) );
                # Title::getRestrictions returns an array, its possible it may have
                # multiple values in the future
                return implode( $restrictions, ',' );
@@ -790,7 +800,7 @@ class CoreParserFunctions {
 
        // Usage {{filepath|300}}, {{filepath|nowiki}}, {{filepath|nowiki|300}} or {{filepath|300|nowiki}}
        // or {{filepath|300px}}, {{filepath|200x300px}}, {{filepath|nowiki|200x300px}}, {{filepath|200x300px|nowiki}}
-       public static function filepath( $parser, $name='', $argA='', $argB='' ) {
+       public static function filepath( $parser, $name = '', $argA = '', $argB = '' ) {
                $file = wfFindFile( $name );
 
                if( $argA == 'nowiki' ) {
index 0f22675..88d68a7 100644 (file)
@@ -102,11 +102,11 @@ class DateFormatter {
 
                # Rules
                #            pref    source       target
-               $this->rules[self::DMY][self::MD]       = self::DM;
-               $this->rules[self::ALL][self::MD]       = self::MD;
-               $this->rules[self::MDY][self::DM]       = self::MD;
-               $this->rules[self::ALL][self::DM]       = self::DM;
-               $this->rules[self::NONE][self::ISO2]    = self::ISO1;
+               $this->rules[self::DMY][self::MD] = self::DM;
+               $this->rules[self::ALL][self::MD] = self::MD;
+               $this->rules[self::MDY][self::DM] = self::MD;
+               $this->rules[self::ALL][self::DM] = self::DM;
+               $this->rules[self::NONE][self::ISO2] = self::ISO1;
 
                $this->preferences = array(
                        'default' => self::NONE,
@@ -145,7 +145,7 @@ class DateFormatter {
         * @param $options Array: can contain 'linked' and/or 'match-whole'
         * @return mixed|String
         */
-       function reformat( $preference, $text, $options = array('linked') ) {
+       function reformat( $preference, $text, $options = array( 'linked' ) ) {
                $linked = in_array( 'linked', $options );
                $match_whole = in_array( 'match-whole', $options );
 
@@ -172,21 +172,21 @@ class DateFormatter {
                        $regex = $this->regexes[$i];
 
                        // Horrible hack
-                       if (!$linked) {
+                       if ( !$linked ) {
                                $regex = str_replace( array( '\[\[', '\]\]' ), '', $regex );
                        }
 
-                       if ($match_whole) {
+                       if ( $match_whole ) {
                                // Let's hope this works
                                $regex = preg_replace( '!^/!', '/^', $regex );
                                $regex = str_replace( $this->regexTrail,
-                                       '$'.$this->regexTrail, $regex );
+                                       '$' . $this->regexTrail, $regex );
                        }
 
                        // Another horrible hack
                        $this->mLinked = $linked;
                        $text = preg_replace_callback( $regex, array( &$this, 'replace' ), $text );
-                       unset($this->mLinked);
+                       unset( $this->mLinked );
                }
                return $text;
        }
@@ -203,7 +203,7 @@ class DateFormatter {
 
                $bits = array();
                $key = $this->keys[$this->mSource];
-               for ( $p=0; $p < strlen($key); $p++ ) {
+               for ( $p=0; $p < strlen( $key ); $p++ ) {
                        if ( $key[$p] != ' ' ) {
                                $bits[$key[$p]] = $matches[$p+1];
                        }
@@ -220,7 +220,7 @@ class DateFormatter {
        function formatDate( $bits, $link = true ) {
                $format = $this->targets[$this->mTarget];
 
-               if (!$link) {
+               if ( !$link ) {
                        // strip piped links
                        $format = preg_replace( '/\[\[[^|]+\|([^\]]+)\]\]/', '$1', $format );
                        // strip remaining links
@@ -246,7 +246,7 @@ class DateFormatter {
                        }
                }
 
-               if ( !isset($bits['d']) ) {
+               if ( !isset( $bits['d'] ) ) {
                        $bits['d'] = sprintf( '%02d', $bits['j'] );
                }
 
@@ -263,7 +263,7 @@ class DateFormatter {
                                        $text .= $bits['y'];
                                        break;
                                case 'j': # ordinary day of month
-                                       if ( !isset($bits['j']) ) {
+                                       if ( !isset( $bits['j'] ) ) {
                                                $text .= intval( $bits['d'] );
                                        } else {
                                                $text .= $bits['j'];
@@ -271,7 +271,7 @@ class DateFormatter {
                                        break;
                                case 'F': # long month
                                        if ( !isset( $bits['F'] ) ) {
-                                               $m = intval($bits['m']);
+                                               $m = intval( $bits['m'] );
                                                if ( $m > 12 || $m < 1 ) {
                                                        $fail = true;
                                                } else {
@@ -293,7 +293,7 @@ class DateFormatter {
                }
 
                $isoBits = array();
-               if ( isset($bits['y']) )
+               if ( isset( $bits['y'] ) )
                        $isoBits[] = $bits['y'];
                $isoBits[] = $bits['m'];
                $isoBits[] = $bits['d'];
index e1fdbc3..5e93466 100644 (file)
@@ -217,7 +217,7 @@ class LinkHolderArray {
         */
        function makeHolder( $nt, $text = '', $query = array(), $trail = '', $prefix = ''  ) {
                wfProfileIn( __METHOD__ );
-               if ( ! is_object($nt) ) {
+               if ( !is_object( $nt ) ) {
                        # Fail gracefully
                        $retVal = "<!-- ERROR -->{$prefix}{$text}{$trail}";
                } else {
@@ -226,7 +226,7 @@ class LinkHolderArray {
 
                        $entry = array(
                                'title' => $nt,
-                               'text' => $prefix.$text.$inside,
+                               'text' => $prefix . $text . $inside,
                                'pdbk' => $nt->getPrefixedDBkey(),
                        );
                        if ( $query !== array() ) {
@@ -281,7 +281,7 @@ class LinkHolderArray {
                $linkCache = LinkCache::singleton();
                $output = $this->parent->getOutput();
 
-               wfProfileIn( __METHOD__.'-check' );
+               wfProfileIn( __METHOD__ . '-check' );
                $dbr = wfGetDB( DB_SLAVE );
                $threshold = $this->parent->getOptions()->getStubThreshold();
 
@@ -322,7 +322,7 @@ class LinkHolderArray {
                }
                if ( $queries ) {
                        $where = array();
-                       foreach( $queries as $ns => $pages ){
+                       foreach( $queries as $ns => $pages ) {
                                $where[] = $dbr->makeList(
                                        array(
                                                'page_namespace' => $ns,
@@ -355,19 +355,19 @@ class LinkHolderArray {
                        }
                        unset( $res );
                }
-               if ( count($linkcolour_ids) ) {
+               if ( count( $linkcolour_ids ) ) {
                        //pass an array of page_ids to an extension
                        wfRunHooks( 'GetLinkColours', array( $linkcolour_ids, &$colours ) );
                }
-               wfProfileOut( __METHOD__.'-check' );
+               wfProfileOut( __METHOD__ . '-check' );
 
                # Do a second query for different language variants of links and categories
-               if($wgContLang->hasVariants()) {
+               if( $wgContLang->hasVariants() ) {
                        $this->doVariants( $colours );
                }
 
                # Construct search and replace arrays
-               wfProfileIn( __METHOD__.'-construct' );
+               wfProfileIn( __METHOD__ . '-construct' );
                $replacePairs = array();
                foreach ( $this->internals as $ns => $entries ) {
                        foreach ( $entries as $index => $entry ) {
@@ -399,16 +399,16 @@ class LinkHolderArray {
                        }
                }
                $replacer = new HashtableReplacer( $replacePairs, 1 );
-               wfProfileOut( __METHOD__.'-construct' );
+               wfProfileOut( __METHOD__ . '-construct' );
 
                # Do the thing
-               wfProfileIn( __METHOD__.'-replace' );
+               wfProfileIn( __METHOD__ . '-replace' );
                $text = preg_replace_callback(
                        '/(<!--LINK .*?-->)/',
                        $replacer->cb(),
                        $text);
 
-               wfProfileOut( __METHOD__.'-replace' );
+               wfProfileOut( __METHOD__ . '-replace' );
                wfProfileOut( __METHOD__ );
        }
 
@@ -497,20 +497,24 @@ class LinkHolderArray {
                // process categories, check if a category exists in some variant
                $categoryMap = array(); // maps $category_variant => $category (dbkeys)
                $varCategories = array(); // category replacements oldDBkey => newDBkey
-               foreach( $output->getCategoryLinks() as $category ){
+               foreach ( $output->getCategoryLinks() as $category ) {
+                       $categoryTitle = Title::makeTitleSafe( NS_CATEGORY, $category );
+                       $linkBatch->addObj( $categoryTitle );
                        $variants = $wgContLang->autoConvertToAllVariants( $category );
-                       foreach($variants as $variant){
-                               if($variant != $category){
-                                       $variantTitle = Title::newFromDBkey( Title::makeName(NS_CATEGORY,$variant) );
-                                       if(is_null($variantTitle)) continue;
+                       foreach ( $variants as $variant ) {
+                               if ( $variant !== $category ) {
+                                       $variantTitle = Title::makeTitleSafe( NS_CATEGORY, $variant );
+                                       if ( is_null( $variantTitle ) ) {
+                                               continue;
+                                       }
                                        $linkBatch->addObj( $variantTitle );
-                                       $categoryMap[$variant] = $category;
+                                       $categoryMap[$variant] = array( $category, $categoryTitle );
                                }
                        }
                }
 
 
-               if(!$linkBatch->isEmpty()){
+               if( !$linkBatch->isEmpty() ) {
                        // construct query
                        $dbr = wfGetDB( DB_SLAVE );
                        $varRes = $dbr->select( 'page',
@@ -556,25 +560,28 @@ class LinkHolderArray {
                                }
 
                                // check if the object is a variant of a category
-                               if(isset($categoryMap[$vardbk])){
-                                       $oldkey = $categoryMap[$vardbk];
-                                       if($oldkey != $vardbk)
-                                               $varCategories[$oldkey]=$vardbk;
+                               if ( isset( $categoryMap[$vardbk] ) ) {
+                                       list( $oldkey, $oldtitle ) = $categoryMap[$vardbk];
+                                       if ( !isset( $varCategories[$oldkey] ) && !$oldtitle->exists() ) {
+                                               $varCategories[$oldkey] = $vardbk;
+                                       }
                                }
                        }
                        wfRunHooks( 'GetLinkColours', array( $linkcolour_ids, &$colours ) );
 
                        // rebuild the categories in original order (if there are replacements)
-                       if(count($varCategories)>0){
+                       if( count( $varCategories ) > 0 ) {
                                $newCats = array();
                                $originalCats = $output->getCategories();
-                               foreach($originalCats as $cat => $sortkey){
+                               foreach( $originalCats as $cat => $sortkey ) {
                                        // make the replacement
-                                       if( array_key_exists($cat,$varCategories) )
+                                       if( array_key_exists( $cat, $varCategories ) ) {
                                                $newCats[$varCategories[$cat]] = $sortkey;
-                                       else $newCats[$cat] = $sortkey;
+                                       } else {
+                                               $newCats[$cat] = $sortkey;
+                                       }
                                }
-                               $output->setCategoryLinks($newCats);
+                               $output->setCategoryLinks( $newCats );
                        }
                }
        }
index 0f22755..876e3b7 100644 (file)
@@ -215,8 +215,8 @@ class Parser {
        public function __construct( $conf = array() ) {
                $this->mConf = $conf;
                $this->mUrlProtocols = wfUrlProtocols();
-               $this->mExtLinkBracketedRegex = '/\[(((?i)' . $this->mUrlProtocols . ')'.
-                       self::EXT_LINK_URL_CLASS.'+)\p{Zs}*([^\]\\x00-\\x08\\x0a-\\x1F]*?)\]/Su';
+               $this->mExtLinkBracketedRegex = '/\[(((?i)' . $this->mUrlProtocols . ')' .
+                       self::EXT_LINK_URL_CLASS . '+)\p{Zs}*([^\]\\x00-\\x08\\x0a-\\x1F]*?)\]/Su';
                if ( isset( $conf['preprocessorClass'] ) ) {
                        $this->mPreprocessorClass = $conf['preprocessorClass'];
                } elseif ( defined( 'MW_COMPILED' ) ) {
@@ -357,7 +357,7 @@ class Parser {
                 */
 
                global $wgUseTidy, $wgAlwaysUseTidy;
-               $fname = __METHOD__.'-' . wfGetCaller();
+               $fname = __METHOD__ . '-' . wfGetCaller();
                wfProfileIn( __METHOD__ );
                wfProfileIn( $fname );
 
@@ -412,9 +412,7 @@ class Parser {
                if ( !( $options->getDisableContentConversion()
                                || isset( $this->mDoubleUnderscores['nocontentconvert'] ) ) )
                {
-                       # Run convert unconditionally in 1.18-compatible mode
-                       global $wgBug34832TransitionalRollback;
-                       if ( $wgBug34832TransitionalRollback || !$this->mOptions->getInterfaceMessage() ) {
+                       if ( !$this->mOptions->getInterfaceMessage() ) {
                                # The position of the convert() call should not be changed. it
                                # assumes that the links are all replaced and the only thing left
                                # is the <nowiki> mark.
@@ -501,8 +499,8 @@ class Parser {
                                "Preprocessor generated node count: " .
                                        "{$this->mGeneratedPPNodeCount}/{$this->mOptions->getMaxGeneratedPPNodeCount()}\n" .
                                "Post-expand include size: {$this->mIncludeSizes['post-expand']}/$max bytes\n" .
-                               "Template argument size: {$this->mIncludeSizes['arg']}/$max bytes\n".
-                               "Highest expansion depth: {$this->mHighestExpansionDepth}/{$this->mOptions->getMaxPPExpandDepth()}\n".
+                               "Template argument size: {$this->mIncludeSizes['arg']}/$max bytes\n" .
+                               "Highest expansion depth: {$this->mHighestExpansionDepth}/{$this->mOptions->getMaxPPExpandDepth()}\n" .
                                $PFreport;
                        wfRunHooks( 'ParserLimitReport', array( $this, &$limitReport ) );
                        $text .= "\n<!-- \n$limitReport-->\n";
@@ -608,7 +606,7 @@ class Parser {
         *
         * @return string
         */
-       static public function getRandomString() {
+       public static function getRandomString() {
                return wfRandomString( 16 );
        }
 
@@ -781,12 +779,7 @@ class Parser {
         * Get the language object for language conversion
         */
        function getConverterLanguage() {
-               global $wgBug34832TransitionalRollback, $wgContLang;
-               if ( $wgBug34832TransitionalRollback ) {
-                       return $wgContLang;
-               } else {
-                       return $this->getTargetLanguage();
-               }
+               return $this->getTargetLanguage();
        }
 
        /**
@@ -944,33 +937,33 @@ class Parser {
                        $line = trim( $outLine );
 
                        if ( $line === '' ) { # empty line, go to next line
-                               $out .= $outLine."\n";
+                               $out .= $outLine . "\n";
                                continue;
                        }
 
                        $first_character = $line[0];
                        $matches = array();
 
-                       if ( preg_match( '/^(:*)\{\|(.*)$/', $line , $matches ) ) {
+                       if ( preg_match( '/^(:*)\{\|(.*)$/', $line, $matches ) ) {
                                # First check if we are starting a new table
                                $indent_level = strlen( $matches[1] );
 
                                $attributes = $this->mStripState->unstripBoth( $matches[2] );
-                               $attributes = Sanitizer::fixTagAttributes( $attributes , 'table' );
-
-                               $outLine = str_repeat( '<dl><dd>' , $indent_level ) . "<table{$attributes}>";
-                               array_push( $td_history , false );
-                               array_push( $last_tag_history , '' );
-                               array_push( $tr_history , false );
-                               array_push( $tr_attributes , '' );
-                               array_push( $has_opened_tr , false );
+                               $attributes = Sanitizer::fixTagAttributes( $attributes, 'table' );
+
+                               $outLine = str_repeat( '<dl><dd>', $indent_level ) . "<table{$attributes}>";
+                               array_push( $td_history, false );
+                               array_push( $last_tag_history, '' );
+                               array_push( $tr_history, false );
+                               array_push( $tr_attributes, '' );
+                               array_push( $has_opened_tr, false );
                        } elseif ( count( $td_history ) == 0 ) {
                                # Don't do any of the following
-                               $out .= $outLine."\n";
+                               $out .= $outLine . "\n";
                                continue;
-                       } elseif ( substr( $line , 0 , 2 ) === '|}' ) {
+                       } elseif ( substr( $line, 0, 2 ) === '|}' ) {
                                # We are ending a table
-                               $line = '</table>' . substr( $line , 2 );
+                               $line = '</table>' . substr( $line, 2 );
                                $last_tag = array_pop( $last_tag_history );
 
                                if ( !array_pop( $has_opened_tr ) ) {
@@ -985,8 +978,8 @@ class Parser {
                                        $line = "</{$last_tag}>{$line}";
                                }
                                array_pop( $tr_attributes );
-                               $outLine = $line . str_repeat( '</dd></dl>' , $indent_level );
-                       } elseif ( substr( $line , 0 , 2 ) === '|-' ) {
+                               $outLine = $line . str_repeat( '</dd></dl>', $indent_level );
+                       } elseif ( substr( $line, 0, 2 ) === '|-' ) {
                                # Now we have a table row
                                $line = preg_replace( '#^\|-+#', '', $line );
 
@@ -999,7 +992,7 @@ class Parser {
                                $line = '';
                                $last_tag = array_pop( $last_tag_history );
                                array_pop( $has_opened_tr );
-                               array_push( $has_opened_tr , true );
+                               array_push( $has_opened_tr, true );
 
                                if ( array_pop( $tr_history ) ) {
                                        $line = '</tr>';
@@ -1010,27 +1003,27 @@ class Parser {
                                }
 
                                $outLine = $line;
-                               array_push( $tr_history , false );
-                               array_push( $td_history , false );
-                               array_push( $last_tag_history , '' );
-                       } elseif ( $first_character === '|' || $first_character === '!' || substr( $line , 0 , 2 )  === '|+' ) {
+                               array_push( $tr_history, false );
+                               array_push( $td_history, false );
+                               array_push( $last_tag_history, '' );
+                       } elseif ( $first_character === '|' || $first_character === '!' || substr( $line, 0, 2 )  === '|+' ) {
                                # This might be cell elements, td, th or captions
-                               if ( substr( $line , 0 , 2 ) === '|+' ) {
+                               if ( substr( $line, 0, 2 ) === '|+' ) {
                                        $first_character = '+';
-                                       $line = substr( $line , 1 );
+                                       $line = substr( $line, 1 );
                                }
 
-                               $line = substr( $line , 1 );
+                               $line = substr( $line, 1 );
 
                                if ( $first_character === '!' ) {
-                                       $line = str_replace( '!!' , '||' , $line );
+                                       $line = str_replace( '!!', '||', $line );
                                }
 
                                # Split up multiple cells on the same line.
                                # FIXME : This can result in improper nesting of tags processed
                                # by earlier parser steps, but should avoid splitting up eg
                                # attribute values containing literal "||".
-                               $cells = StringUtils::explodeMarkup( '||' , $line );
+                               $cells = StringUtils::explodeMarkup( '||', $line );
 
                                $outLine = '';
 
@@ -1042,10 +1035,10 @@ class Parser {
                                                if ( !array_pop( $tr_history ) ) {
                                                        $previous = "<tr{$tr_after}>\n";
                                                }
-                                               array_push( $tr_history , true );
-                                               array_push( $tr_attributes , '' );
+                                               array_push( $tr_history, true );
+                                               array_push( $tr_attributes, '' );
                                                array_pop( $has_opened_tr );
-                                               array_push( $has_opened_tr , true );
+                                               array_push( $has_opened_tr, true );
                                        }
 
                                        $last_tag = array_pop( $last_tag_history );
@@ -1064,10 +1057,10 @@ class Parser {
                                                $last_tag = '';
                                        }
 
-                                       array_push( $last_tag_history , $last_tag );
+                                       array_push( $last_tag_history, $last_tag );
 
                                        # A cell could contain both parameters and data
-                                       $cell_data = explode( '|' , $cell , 2 );
+                                       $cell_data = explode( '|', $cell, 2 );
 
                                        # Bug 553: Note that a '|' inside an invalid link should not
                                        # be mistaken as delimiting cell parameters
@@ -1077,12 +1070,12 @@ class Parser {
                                                $cell = "{$previous}<{$last_tag}>{$cell_data[0]}";
                                        } else {
                                                $attributes = $this->mStripState->unstripBoth( $cell_data[0] );
-                                               $attributes = Sanitizer::fixTagAttributes( $attributes , $last_tag );
+                                               $attributes = Sanitizer::fixTagAttributes( $attributes, $last_tag );
                                                $cell = "{$previous}<{$last_tag}{$attributes}>{$cell_data[1]}";
                                        }
 
                                        $outLine .= $cell;
-                                       array_push( $td_history , true );
+                                       array_push( $td_history, true );
                                }
                        }
                        $out .= $outLine . "\n";
@@ -1182,7 +1175,7 @@ class Parser {
 
                # replaceInternalLinks may sometimes leave behind
                # absolute URLs, which have to be masked to hide them from replaceExternalLinks
-               $text = str_replace( $this->mUniqPrefix.'NOPARSE', '', $text );
+               $text = str_replace( $this->mUniqPrefix . 'NOPARSE', '', $text );
 
                $text = $this->doMagicLinks( $text );
                $text = $this->formatHeadings( $text, $origText, $isMain );
@@ -1250,7 +1243,7 @@ class Parser {
                                $CssClass = 'mw-magiclink-pmid';
                                $id = $m[4];
                        } else {
-                               throw new MWException( __METHOD__.': unrecognised match type "' .
+                               throw new MWException( __METHOD__ . ': unrecognised match type "' .
                                        substr( $m[0], 0, 20 ) . '"' );
                        }
                        $url = wfMessage( $urlmsg, $id )->inContentLanguage()->text();
@@ -1340,8 +1333,7 @@ class Parser {
                wfProfileIn( __METHOD__ );
                for ( $i = 6; $i >= 1; --$i ) {
                        $h = str_repeat( '=', $i );
-                       $text = preg_replace( "/^$h(.+)$h\\s*$/m",
-                         "<h$i>\\1</h$i>", $text );
+                       $text = preg_replace( "/^$h(.+)$h\\s*$/m", "<h$i>\\1</h$i>", $text );
                }
                wfProfileOut( __METHOD__ );
                return $text;
@@ -1362,7 +1354,7 @@ class Parser {
                foreach ( $lines as $line ) {
                        $outtext .= $this->doQuotes( $line ) . "\n";
                }
-               $outtext = substr( $outtext, 0,-1 );
+               $outtext = substr( $outtext, 0, -1 );
                wfProfileOut( __METHOD__ );
                return $outtext;
        }
@@ -1478,7 +1470,7 @@ class Parser {
                                                } elseif ( $state === 'ib' ) {
                                                        $output .= '</b></i><b>'; $state = 'b';
                                                } elseif ( $state === 'both' ) {
-                                                       $output .= '<b><i>'.$buffer.'</i>'; $state = 'b';
+                                                       $output .= '<b><i>' . $buffer . '</i>'; $state = 'b';
                                                } else { # $state can be 'b' or ''
                                                        $output .= '<i>'; $state .= 'i';
                                                }
@@ -1490,7 +1482,7 @@ class Parser {
                                                } elseif ( $state === 'ib' ) {
                                                        $output .= '</b>'; $state = 'i';
                                                } elseif ( $state === 'both' ) {
-                                                       $output .= '<i><b>'.$buffer.'</b>'; $state = 'i';
+                                                       $output .= '<i><b>' . $buffer . '</b>'; $state = 'i';
                                                } else { # $state can be 'i' or ''
                                                        $output .= '<b>'; $state .= 'b';
                                                }
@@ -1504,7 +1496,7 @@ class Parser {
                                                } elseif ( $state === 'ib' ) {
                                                        $output .= '</b></i>'; $state = '';
                                                } elseif ( $state === 'both' ) {
-                                                       $output .= '<i><b>'.$buffer.'</b></i>'; $state = '';
+                                                       $output .= '<i><b>' . $buffer . '</b></i>'; $state = '';
                                                } else { # ($state == '')
                                                        $buffer = ''; $state = 'both';
                                                }
@@ -1524,7 +1516,7 @@ class Parser {
                        }
                        # There might be lonely ''''', so make sure we have a buffer
                        if ( $state === 'both' && $buffer ) {
-                               $output .= '<b><i>'.$buffer.'</i></b>';
+                               $output .= '<b><i>' . $buffer . '</i></b>';
                        }
                        return $output;
                }
@@ -1767,7 +1759,7 @@ class Parser {
        function replaceInternalLinks2( &$s ) {
                wfProfileIn( __METHOD__ );
 
-               wfProfileIn( __METHOD__.'-setup' );
+               wfProfileIn( __METHOD__ . '-setup' );
                static $tc = FALSE, $e1, $e1_img;
                # the % is needed to support urlencoded titles as well
                if ( !$tc ) {
@@ -1797,9 +1789,9 @@ class Parser {
                }
 
                if ( is_null( $this->mTitle ) ) {
-                       wfProfileOut( __METHOD__.'-setup' );
+                       wfProfileOut( __METHOD__ . '-setup' );
                        wfProfileOut( __METHOD__ );
-                       throw new MWException( __METHOD__.": \$this->mTitle is null\n" );
+                       throw new MWException( __METHOD__ . ": \$this->mTitle is null\n" );
                }
                $nottalk = !$this->mTitle->isTalkPage();
 
@@ -1814,14 +1806,8 @@ class Parser {
                        $prefix = '';
                }
 
-               if ( $this->getConverterLanguage()->hasVariants() ) {
-                       $selflink = $this->getConverterLanguage()->autoConvertToAllVariants(
-                               $this->mTitle->getPrefixedText() );
-               } else {
-                       $selflink = array( $this->mTitle->getPrefixedText() );
-               }
                $useSubpages = $this->areSubpagesAllowed();
-               wfProfileOut( __METHOD__.'-setup' );
+               wfProfileOut( __METHOD__ . '-setup' );
 
                # Loop for each link
                for ( ; $line !== false && $line !== null ; $a->next(), $line = $a->current() ) {
@@ -1834,24 +1820,24 @@ class Parser {
                        }
 
                        if ( $useLinkPrefixExtension ) {
-                               wfProfileIn( __METHOD__.'-prefixhandling' );
+                               wfProfileIn( __METHOD__ . '-prefixhandling' );
                                if ( preg_match( $e2, $s, $m ) ) {
                                        $prefix = $m[2];
                                        $s = $m[1];
                                } else {
-                                       $prefix='';
+                                       $prefix = '';
                                }
                                # first link
                                if ( $first_prefix ) {
                                        $prefix = $first_prefix;
                                        $first_prefix = false;
                                }
-                               wfProfileOut( __METHOD__.'-prefixhandling' );
+                               wfProfileOut( __METHOD__ . '-prefixhandling' );
                        }
 
                        $might_be_img = false;
 
-                       wfProfileIn( __METHOD__."-e1" );
+                       wfProfileIn( __METHOD__ . "-e1" );
                        if ( preg_match( $e1, $line, $m ) ) { # page with normal text or alt
                                $text = $m[2];
                                # If we get a ] at the beginning of $m[3] that means we have a link that's something like:
@@ -1873,7 +1859,7 @@ class Parser {
                                # fix up urlencoded title texts
                                if ( strpos( $m[1], '%' ) !== false ) {
                                        # Should anchors '#' also be rejected?
-                                       $m[1] = str_replace( array('<', '>'), array('&lt;', '&gt;'), rawurldecode( $m[1] ) );
+                                       $m[1] = str_replace( array( '<', '>' ), array( '&lt;', '&gt;' ), rawurldecode( $m[1] ) );
                                }
                                $trail = $m[3];
                        } elseif ( preg_match( $e1_img, $line, $m ) ) { # Invalid, but might be an image with a link in its caption
@@ -1885,18 +1871,18 @@ class Parser {
                                $trail = "";
                        } else { # Invalid form; output directly
                                $s .= $prefix . '[[' . $line ;
-                               wfProfileOut( __METHOD__."-e1" );
+                               wfProfileOut( __METHOD__ . "-e1" );
                                continue;
                        }
-                       wfProfileOut( __METHOD__."-e1" );
-                       wfProfileIn( __METHOD__."-misc" );
+                       wfProfileOut( __METHOD__ . "-e1" );
+                       wfProfileIn( __METHOD__ . "-misc" );
 
                        # Don't allow internal links to pages containing
                        # PROTO: where PROTO is a valid URL protocol; these
                        # should be external links.
                        if ( preg_match( '/^(?i:' . $this->mUrlProtocols . ')/', $m[1] ) ) {
                                $s .= $prefix . '[[' . $line ;
-                               wfProfileOut( __METHOD__."-misc" );
+                               wfProfileOut( __METHOD__ . "-misc" );
                                continue;
                        }
 
@@ -1913,21 +1899,21 @@ class Parser {
                                $link = substr( $link, 1 );
                        }
 
-                       wfProfileOut( __METHOD__."-misc" );
-                       wfProfileIn( __METHOD__."-title" );
+                       wfProfileOut( __METHOD__ . "-misc" );
+                       wfProfileIn( __METHOD__ . "-title" );
                        $nt = Title::newFromText( $this->mStripState->unstripNoWiki( $link ) );
                        if ( $nt === null ) {
                                $s .= $prefix . '[[' . $line;
-                               wfProfileOut( __METHOD__."-title" );
+                               wfProfileOut( __METHOD__ . "-title" );
                                continue;
                        }
 
                        $ns = $nt->getNamespace();
                        $iw = $nt->getInterWiki();
-                       wfProfileOut( __METHOD__."-title" );
+                       wfProfileOut( __METHOD__ . "-title" );
 
                        if ( $might_be_img ) { # if this is actually an invalid link
-                               wfProfileIn( __METHOD__."-might_be_img" );
+                               wfProfileIn( __METHOD__ . "-might_be_img" );
                                if ( $ns == NS_FILE && $noforce ) { # but might be an image
                                        $found = false;
                                        while ( true ) {
@@ -1959,16 +1945,16 @@ class Parser {
                                                $holders->merge( $this->replaceInternalLinks2( $text ) );
                                                $s .= "{$prefix}[[$link|$text";
                                                # note: no $trail, because without an end, there *is* no trail
-                                               wfProfileOut( __METHOD__."-might_be_img" );
+                                               wfProfileOut( __METHOD__ . "-might_be_img" );
                                                continue;
                                        }
                                } else { # it's not an image, so output it raw
                                        $s .= "{$prefix}[[$link|$text";
                                        # note: no $trail, because without an end, there *is* no trail
-                                       wfProfileOut( __METHOD__."-might_be_img" );
+                                       wfProfileOut( __METHOD__ . "-might_be_img" );
                                        continue;
                                }
-                               wfProfileOut( __METHOD__."-might_be_img" );
+                               wfProfileOut( __METHOD__ . "-might_be_img" );
                        }
 
                        $wasblank = ( $text  == '' );
@@ -1985,7 +1971,7 @@ class Parser {
                        # Link not escaped by : , create the various objects
                        if ( $noforce ) {
                                # Interwikis
-                               wfProfileIn( __METHOD__."-interwiki" );
+                               wfProfileIn( __METHOD__ . "-interwiki" );
                                if ( $iw && $this->mOptions->getInterwikiMagic() && $nottalk && Language::fetchLanguageName( $iw, null, 'mw' ) ) {
                                        // XXX: the above check prevents links to sites with identifiers that are not language codes
 
@@ -1997,13 +1983,13 @@ class Parser {
 
                                        $s = rtrim( $s . $prefix );
                                        $s .= trim( $trail, "\n" ) == '' ? '': $prefix . $trail;
-                                       wfProfileOut( __METHOD__."-interwiki" );
+                                       wfProfileOut( __METHOD__ . "-interwiki" );
                                        continue;
                                }
-                               wfProfileOut( __METHOD__."-interwiki" );
+                               wfProfileOut( __METHOD__ . "-interwiki" );
 
                                if ( $ns == NS_FILE ) {
-                                       wfProfileIn( __METHOD__."-image" );
+                                       wfProfileIn( __METHOD__ . "-image" );
                                        if ( !wfIsBadImage( $nt->getDBkey(), $this->mTitle ) ) {
                                                if ( $wasblank ) {
                                                        # if no parameters were passed, $text
@@ -2024,12 +2010,12 @@ class Parser {
                                        } else {
                                                $s .= $prefix . $trail;
                                        }
-                                       wfProfileOut( __METHOD__."-image" );
+                                       wfProfileOut( __METHOD__ . "-image" );
                                        continue;
                                }
 
                                if ( $ns == NS_CATEGORY ) {
-                                       wfProfileIn( __METHOD__."-category" );
+                                       wfProfileIn( __METHOD__ . "-category" );
                                        $s = rtrim( $s . "\n" ); # bug 87
 
                                        if ( $wasblank ) {
@@ -2048,14 +2034,18 @@ class Parser {
                                         */
                                        $s .= trim( $prefix . $trail, "\n" ) == '' ? '' : $prefix . $trail;
 
-                                       wfProfileOut( __METHOD__."-category" );
+                                       wfProfileOut( __METHOD__ . "-category" );
                                        continue;
                                }
                        }
 
                        # Self-link checking
                        if ( $nt->getFragment() === '' && $ns != NS_SPECIAL ) {
-                               if ( in_array( $nt->getPrefixedText(), $selflink, true ) ) {
+                               if ( $nt->equals( $this->mTitle ) || ( !$nt->isKnown() && in_array(
+                                       $this->mTitle->getPrefixedText(),
+                                       $this->getConverterLanguage()->autoConvertToAllVariants( $nt->getPrefixedText() ),
+                                       true
+                               ) ) ) {
                                        $s .= $prefix . Linker::makeSelfLinkObj( $nt, $text, '', $trail );
                                        continue;
                                }
@@ -2064,7 +2054,7 @@ class Parser {
                        # NS_MEDIA is a pseudo-namespace for linking directly to a file
                        # @todo FIXME: Should do batch file existence checks, see comment below
                        if ( $ns == NS_MEDIA ) {
-                               wfProfileIn( __METHOD__."-media" );
+                               wfProfileIn( __METHOD__ . "-media" );
                                # Give extensions a chance to select the file revision for us
                                $options = array();
                                $descQuery = false;
@@ -2075,11 +2065,11 @@ class Parser {
                                # Cloak with NOPARSE to avoid replacement in replaceExternalLinks
                                $s .= $prefix . $this->armorLinks(
                                        Linker::makeMediaLinkFile( $nt, $file, $text ) ) . $trail;
-                               wfProfileOut( __METHOD__."-media" );
+                               wfProfileOut( __METHOD__ . "-media" );
                                continue;
                        }
 
-                       wfProfileIn( __METHOD__."-always_known" );
+                       wfProfileIn( __METHOD__ . "-always_known" );
                        # Some titles, such as valid special pages or files in foreign repos, should
                        # be shown as bluelinks even though they're not included in the page table
                        #
@@ -2092,7 +2082,7 @@ class Parser {
                                # Links will be added to the output link list after checking
                                $s .= $holders->makeHolder( $nt, $text, array(), $trail, $prefix );
                        }
-                       wfProfileOut( __METHOD__."-always_known" );
+                       wfProfileOut( __METHOD__ . "-always_known" );
                }
                wfProfileOut( __METHOD__ );
                return $holders;
@@ -2280,7 +2270,7 @@ class Parser {
                } else {
                        return '<!-- ERR 3 -->';
                }
-               return $text."\n";
+               return $text . "\n";
        }
        /**#@-*/
 
@@ -2395,13 +2385,13 @@ class Parser {
 
                        # If we have no prefixes, go to paragraph mode.
                        if ( 0 == $prefixLength ) {
-                               wfProfileIn( __METHOD__."-paragraph" );
+                               wfProfileIn( __METHOD__ . "-paragraph" );
                                # No prefix (not in list)--go to paragraph mode
                                # XXX: use a stack for nestable elements like span, table and div
                                $openmatch = preg_match('/(?:<table|<blockquote|<h1|<h2|<h3|<h4|<h5|<h6|<pre|<tr|<p|<ul|<ol|<dl|<li|<\\/tr|<\\/td|<\\/th)/iS', $t );
                                $closematch = preg_match(
                                        '/(?:<\\/table|<\\/blockquote|<\\/h1|<\\/h2|<\\/h3|<\\/h4|<\\/h5|<\\/h6|'.
-                                       '<td|<th|<\\/?div|<hr|<\\/pre|<\\/p|'.$this->mUniqPrefix.'-pre|<\\/li|<\\/ul|<\\/ol|<\\/dl|<\\/?center)/iS', $t );
+                                       '<td|<th|<\\/?div|<hr|<\\/pre|<\\/p|'.$this->mUniqPrefix . '-pre|<\\/li|<\\/ul|<\\/ol|<\\/dl|<\\/?center)/iS', $t );
                                if ( $openmatch or $closematch ) {
                                        $paragraphStack = false;
                                        # TODO bug 5718: paragraph closed
@@ -2415,7 +2405,7 @@ class Parser {
                                                # pre
                                                if ( $this->mLastSection !== 'pre' ) {
                                                        $paragraphStack = false;
-                                                       $output .= $this->closeParagraph().'<pre>';
+                                                       $output .= $this->closeParagraph() . '<pre>';
                                                        $this->mLastSection = 'pre';
                                                }
                                                $t = substr( $t, 1 );
@@ -2423,7 +2413,7 @@ class Parser {
                                                # paragraph
                                                if ( trim( $t ) === '' ) {
                                                        if ( $paragraphStack ) {
-                                                               $output .= $paragraphStack.'<br />';
+                                                               $output .= $paragraphStack . '<br />';
                                                                $paragraphStack = false;
                                                                $this->mLastSection = 'p';
                                                        } else {
@@ -2441,20 +2431,20 @@ class Parser {
                                                                $paragraphStack = false;
                                                                $this->mLastSection = 'p';
                                                        } elseif ( $this->mLastSection !== 'p' ) {
-                                                               $output .= $this->closeParagraph().'<p>';
+                                                               $output .= $this->closeParagraph() . '<p>';
                                                                $this->mLastSection = 'p';
                                                        }
                                                }
                                        }
                                }
-                               wfProfileOut( __METHOD__."-paragraph" );
+                               wfProfileOut( __METHOD__ . "-paragraph" );
                        }
                        # somewhere above we forget to get out of pre block (bug 785)
                        if ( $preCloseMatch && $this->mInPre ) {
                                $this->mInPre = false;
                        }
                        if ( $paragraphStack === false ) {
-                               $output .= $t."\n";
+                               $output .= $t . "\n";
                        }
                }
                while ( $prefixLength ) {
@@ -2588,7 +2578,7 @@ class Parser {
                                if ( $c === ">" ) {
                                        $stack--;
                                        if ( $stack < 0 ) {
-                                               wfDebug( __METHOD__.": Invalid input; too many close tags\n" );
+                                               wfDebug( __METHOD__ . ": Invalid input; too many close tags\n" );
                                                wfProfileOut( __METHOD__ );
                                                return false;
                                        }
@@ -2628,7 +2618,7 @@ class Parser {
                        }
                }
                if ( $stack > 0 ) {
-                       wfDebug( __METHOD__.": Invalid input; not enough close tags (stack $stack, state $state)\n" );
+                       wfDebug( __METHOD__ . ": Invalid input; not enough close tags (stack $stack, state $state)\n" );
                        wfProfileOut( __METHOD__ );
                        return false;
                }
@@ -2856,7 +2846,7 @@ class Parser {
                                $value = $this->getRevisionUser();
                                break;
                        case 'namespace':
-                               $value = str_replace( '_',' ',$wgContLang->getNsText( $this->mTitle->getNamespace() ) );
+                               $value = str_replace( '_', ' ', $wgContLang->getNsText( $this->mTitle->getNamespace() ) );
                                break;
                        case 'namespacee':
                                $value = wfUrlencode( $wgContLang->getNsText( $this->mTitle->getNamespace() ) );
@@ -2865,7 +2855,7 @@ class Parser {
                                $value = $this->mTitle->getNamespace();
                                break;
                        case 'talkspace':
-                               $value = $this->mTitle->canTalk() ? str_replace( '_',' ',$this->mTitle->getTalkNsText() ) : '';
+                               $value = $this->mTitle->canTalk() ? str_replace( '_', ' ', $this->mTitle->getTalkNsText() ) : '';
                                break;
                        case 'talkspacee':
                                $value = $this->mTitle->canTalk() ? wfUrlencode( $this->mTitle->getTalkNsText() ) : '';
@@ -3077,7 +3067,7 @@ class Parser {
                if ( $frame === false ) {
                        $frame = $this->getPreprocessor()->newFrame();
                } elseif ( !( $frame instanceof PPFrame ) ) {
-                       wfDebug( __METHOD__." called using plain parameters instead of a PPFrame instance. Creating custom frame.\n" );
+                       wfDebug( __METHOD__ . " called using plain parameters instead of a PPFrame instance. Creating custom frame.\n" );
                        $frame = $this->getPreprocessor()->newCustomFrame( $frame );
                }
 
@@ -3160,7 +3150,7 @@ class Parser {
        function braceSubstitution( $piece, $frame ) {
                global $wgContLang;
                wfProfileIn( __METHOD__ );
-               wfProfileIn( __METHOD__.'-setup' );
+               wfProfileIn( __METHOD__ . '-setup' );
 
                # Flags
                $found = false;             # $text has been filled
@@ -3185,12 +3175,12 @@ class Parser {
                # $args is a list of argument nodes, starting from index 0, not including $part1
                # @todo FIXME: If piece['parts'] is null then the call to getLength() below won't work b/c this $args isn't an object
                $args = ( null == $piece['parts'] ) ? array() : $piece['parts'];
-               wfProfileOut( __METHOD__.'-setup' );
+               wfProfileOut( __METHOD__ . '-setup' );
 
                $titleProfileIn = null; // profile templates
 
                # SUBST
-               wfProfileIn( __METHOD__.'-modifiers' );
+               wfProfileIn( __METHOD__ . '-modifiers' );
                if ( !$found ) {
 
                        $substMatch = $this->mSubstWords->matchStartAndRemove( $part1 );
@@ -3247,7 +3237,7 @@ class Parser {
                                $forceRawInterwiki = true;
                        }
                }
-               wfProfileOut( __METHOD__.'-modifiers' );
+               wfProfileOut( __METHOD__ . '-modifiers' );
 
                # Parser functions
                if ( !$found ) {
@@ -3394,7 +3384,7 @@ class Parser {
                                        }
                                } elseif ( MWNamespace::isNonincludable( $title->getNamespace() ) ) {
                                        $found = false; # access denied
-                                       wfDebug( __METHOD__.": template inclusion denied for " . $title->getPrefixedDBkey() );
+                                       wfDebug( __METHOD__ . ": template inclusion denied for " . $title->getPrefixedDBkey() );
                                } else {
                                        list( $text, $title ) = $this->getTemplateDom( $title );
                                        if ( $text !== false ) {
@@ -3429,7 +3419,7 @@ class Parser {
                                $text = '<span class="error">'
                                        . wfMessage( 'parser-template-loop-warning', $titleText )->inContentLanguage()->text()
                                        . '</span>';
-                               wfDebug( __METHOD__.": template loop broken at '$titleText'\n" );
+                               wfDebug( __METHOD__ . ": template loop broken at '$titleText'\n" );
                        }
                        wfProfileOut( __METHOD__ . '-loadtpl' );
                }
@@ -3725,7 +3715,7 @@ class Parser {
                global $wgEnableScaryTranscluding;
 
                if ( !$wgEnableScaryTranscluding ) {
-                       return wfMessage('scarytranscludedisabled')->inContentLanguage()->text();
+                       return wfMessage( 'scarytranscludedisabled' )->inContentLanguage()->text();
                }
 
                $url = $title->getFullUrl( "action=$action" );
@@ -3744,7 +3734,7 @@ class Parser {
                global $wgTranscludeCacheExpiry;
                $dbr = wfGetDB( DB_SLAVE );
                $tsCond = $dbr->timestamp( time() - $wgTranscludeCacheExpiry );
-               $obj = $dbr->selectRow( 'transcache', array('tc_time', 'tc_contents' ),
+               $obj = $dbr->selectRow( 'transcache', array( 'tc_time', 'tc_contents' ),
                                array( 'tc_url' => $url, "tc_time >= " . $dbr->addQuotes( $tsCond ) ) );
                if ( $obj ) {
                        return $obj->tc_contents;
@@ -3761,7 +3751,7 @@ class Parser {
                }
 
                $dbw = wfGetDB( DB_MASTER );
-               $dbw->replace( 'transcache', array('tc_url'), array(
+               $dbw->replace( 'transcache', array( 'tc_url' ), array(
                        'tc_url' => $url,
                        'tc_time' => $dbw->timestamp( time() ),
                        'tc_contents' => $text)
@@ -3787,7 +3777,7 @@ class Parser {
                $argName = trim( $nameWithSpaces );
                $object = false;
                $text = $frame->getArgument( $argName );
-               if (  $text === false && $parts->getLength() > 0
+               if ( $text === false && $parts->getLength() > 0
                  && (
                        $this->ot['html']
                        || $this->ot['pre']
@@ -3840,7 +3830,7 @@ class Parser {
                $content = !isset( $params['inner'] ) ? null : $frame->expand( $params['inner'] );
                $marker = "{$this->mUniqPrefix}-$name-" . sprintf( '%08X', $this->mMarkerIndex++ ) . self::MARKER_SUFFIX;
 
-               $isFunctionTag = isset( $this->mFunctionTagHooks[strtolower($name)] ) &&
+               $isFunctionTag = isset( $this->mFunctionTagHooks[strtolower( $name )] ) &&
                        ( $this->ot['html'] || $this->ot['pre'] );
                if ( $isFunctionTag ) {
                        $markerType = 'none';
@@ -3905,7 +3895,7 @@ class Parser {
                } elseif ( $markerType === 'general' ) {
                        $this->mStripState->addGeneral( $marker, $output );
                } else {
-                       throw new MWException( __METHOD__.': invalid marker type' );
+                       throw new MWException( __METHOD__ . ': invalid marker type' );
                }
                return $marker;
        }
@@ -4004,7 +3994,7 @@ class Parser {
         */
        public function addTrackingCategory( $msg ) {
                if ( $this->mTitle->getNamespace() === NS_SPECIAL ) {
-                       wfDebug( __METHOD__.": Not adding tracking category $msg to special page!\n" );
+                       wfDebug( __METHOD__ . ": Not adding tracking category $msg to special page!\n" );
                        return false;
                }
                // Important to parse with correct title (bug 31469)
@@ -4023,7 +4013,7 @@ class Parser {
                        $this->mOutput->addCategory( $containerCategory->getDBkey(), $this->getDefaultSort() );
                        return true;
                } else {
-                       wfDebug( __METHOD__.": [[MediaWiki:$msg]] is not a valid title!\n" );
+                       wfDebug( __METHOD__ . ": [[MediaWiki:$msg]] is not a valid title!\n" );
                        return false;
                }
        }
@@ -4211,7 +4201,7 @@ class Parser {
                        # to allow setting directionality in toc items.
                        $tocline = preg_replace(
                                array( '#<(?!/?(span|sup|sub|i|b)(?: [^>]*)?>).*?'.'>#', '#<(/?(?:span(?: dir="(?:rtl|ltr)")?|sup|sub|i|b))(?: .*?)?'.'>#' ),
-                               array( '',                          '<$1>' ),
+                               array( '', '<$1>' ),
                                $safeHeadline
                        );
                        $tocline = trim( $tocline );
@@ -4332,9 +4322,9 @@ class Parser {
                                // We use a page and section attribute to stop the language converter from converting these important bits
                                // of data, but put the headline hint inside a content block because the language converter is supposed to
                                // be able to convert that piece of data.
-                               $editlink = '<mw:editsection page="' . htmlspecialchars($editlinkArgs[0]);
-                               $editlink .= '" section="' . htmlspecialchars($editlinkArgs[1]) .'"';
-                               if ( isset($editlinkArgs[2]) ) {
+                               $editlink = '<mw:editsection page="' . htmlspecialchars( $editlinkArgs[0] );
+                               $editlink .= '" section="' . htmlspecialchars( $editlinkArgs[1] ) . '"';
+                               if ( isset( $editlinkArgs[2] ) ) {
                                        $editlink .= '>' . $editlinkArgs[2] . '</mw:editsection>';
                                } else {
                                        $editlink .= '/>';
@@ -4499,14 +4489,14 @@ class Parser {
                        '~~~' => $sigText
                ) );
 
-               # Context links ("pipe trick"): [[|name]] and [[name (context)|]]
+               # Context links ("pipe tricks"): [[|name]] and [[name (context)|]]
                $tc = '[' . Title::legalChars() . ']';
                $nc = '[ _0-9A-Za-z\x80-\xff-]'; # Namespaces can use non-ascii!
 
-               $p1 = "/\[\[(:?$nc+:|:|)($tc+?)( ?\\($tc+\\))\\|]]/";                  # [[ns:page (context)|]]
-               $p4 = "/\[\[(:?$nc+:|:|)($tc+?)( ?($tc+))\\|]]/";                    # [[ns:page(context)|]] (double-width brackets, added in r40257)
-               $p3 = "/\[\[(:?$nc+:|:|)($tc+?)( ?\\($tc+\\)|)((?:, |,)$tc+|)\\|]]/"; # [[ns:page (context), context|]]
-               $p2 = "/\[\[\\|($tc+)]]/";                                             # [[|page]]
+               $p1 = "/\[\[(:?$nc+:|:|)($tc+?)( ?\\($tc+\\))\\|]]/";                   # [[ns:page (context)|]]
+               $p4 = "/\[\[(:?$nc+:|:|)($tc+?)( ?($tc+))\\|]]/";                           # [[ns:page(context)|]] (double-width brackets, added in r40257)
+               $p3 = "/\[\[(:?$nc+:|:|)($tc+?)( ?\\($tc+\\)|)((?:, |,)$tc+|)\\|]]/";         # [[ns:page (context), context|]] (using either single or double-width comma)
+               $p2 = "/\[\[\\|($tc+)]]/";                                              # [[|page]] (reverse pipe trick: add context from page title)
 
                # try $p1 first, to turn "[[A, B (C)|]]" into "[[A, B (C)|A, B]]"
                $text = preg_replace( $p1, '[[\\1\\2\\3|\\2]]', $text );
@@ -4570,7 +4560,7 @@ class Parser {
                        } else {
                                # Failed to validate; fall back to the default
                                $nickname = $username;
-                               wfDebug( __METHOD__.": $username has bad XML tags in signature.\n" );
+                               wfDebug( __METHOD__ . ": $username has bad XML tags in signature.\n" );
                        }
                }
 
@@ -4831,7 +4821,7 @@ class Parser {
                # Add to function cache
                $mw = MagicWord::get( $id );
                if ( !$mw )
-                       throw new MWException( __METHOD__.'() expecting a magic word identifier.' );
+                       throw new MWException( __METHOD__ . '() expecting a magic word identifier.' );
 
                $synonyms = $mw->getSynonyms();
                $sensitive = intval( $mw->isCaseSensitive() );
@@ -4986,7 +4976,7 @@ class Parser {
                                // is defined for images in galleries
 
                                $matches[3] = $this->recursiveTagParse( trim( $matches[3] ) );
-                               $parameterMatches = StringUtils::explode('|', $matches[3]);
+                               $parameterMatches = StringUtils::explode( '|', $matches[3] );
                                $magicWordAlt = MagicWord::get( 'img_alt' );
                                $magicWordLink = MagicWord::get( 'img_link' );
 
@@ -4994,14 +4984,18 @@ class Parser {
                                        if ( $match = $magicWordAlt->matchVariableStartToEnd( $parameterMatch ) ) {
                                                $alt = $this->stripAltText( $match, false );
                                        }
-                                       elseif( $match = $magicWordLink->matchVariableStartToEnd( $parameterMatch ) ){
-                                               $link = strip_tags($this->replaceLinkHoldersText($match));
+                                       elseif( $match = $magicWordLink->matchVariableStartToEnd( $parameterMatch ) ) {
+                                               $linkValue = strip_tags( $this->replaceLinkHoldersText( $match ) );
                                                $chars = self::EXT_LINK_URL_CLASS;
                                                $prots = $this->mUrlProtocols;
                                                //check to see if link matches an absolute url, if not then it must be a wiki link.
-                                               if(!preg_match( "/^($prots)$chars+$/u", $link)){
-                                                       $localLinkTitle = Title::newFromText($link);
-                                                       $link = $localLinkTitle->getLocalURL();
+                                               if ( preg_match( "/^($prots)$chars+$/u", $linkValue ) ) {
+                                                       $link = $linkValue;
+                                               } else {
+                                                       $localLinkTitle = Title::newFromText( $linkValue );
+                                                       if ( $localLinkTitle !== null ) {
+                                                               $link = $localLinkTitle->getLocalURL();
+                                                       }
                                                }
                                        }
                                        else {
@@ -5013,7 +5007,7 @@ class Parser {
                                $label = substr( $label, 1 );
                        }
 
-                       $ig->add( $title, $label, $alt ,$link);
+                       $ig->add( $title, $label, $alt, $link );
                }
                return $ig->toHTML();
        }
@@ -5028,7 +5022,7 @@ class Parser {
                } else {
                        $handlerClass = '';
                }
-               if ( !isset( $this->mImageParams[$handlerClass]  ) ) {
+               if ( !isset( $this->mImageParams[$handlerClass] ) ) {
                        # Initialise static lists
                        static $internalParamNames = array(
                                'horizAlign' => array( 'left', 'right', 'center', 'none' ),
@@ -5392,7 +5386,7 @@ class Parser {
         * @return String: for "get", the extracted section text.
         *                 for "replace", the whole page with the section replaced.
         */
-       private function extractSections( $text, $section, $mode, $newText='' ) {
+       private function extractSections( $text, $section, $mode, $newText = '' ) {
                global $wgTitle; # not generally used but removes an ugly failure mode
                $this->startParse( $wgTitle, new ParserOptions, self::OT_PLAIN, true );
                $outText = '';
@@ -5513,7 +5507,7 @@ class Parser {
         * @param $deftext String: default to return if section is not found
         * @return string text of the requested section
         */
-       public function getSection( $text, $section, $deftext='' ) {
+       public function getSection( $text, $section, $deftext = '' ) {
                return $this->extractSections( $text, $section, "get", $deftext );
        }
 
@@ -5839,7 +5833,7 @@ class Parser {
         */
        function unserializeHalfParsedText( $data ) {
                if ( !isset( $data['version'] ) || $data['version'] != self::HALF_PARSED_VERSION ) {
-                       throw new MWException( __METHOD__.': invalid version' );
+                       throw new MWException( __METHOD__ . ': invalid version' );
                }
 
                # First, extract the strip state.
index d419621..0faa40a 100644 (file)
@@ -67,7 +67,7 @@ class ParserCache {
 
                // idhash seem to mean 'page id' + 'rendering hash' (r3710)
                $pageid = $article->getID();
-               $renderkey = (int)($wgRequest->getVal('action') == 'render');
+               $renderkey = (int)($wgRequest->getVal( 'action' ) == 'render');
 
                $key = wfMemcKey( 'pcache', 'idhash', "{$pageid}-{$renderkey}!{$hash}" );
                return $key;
index 28d07f1..27b75ac 100644 (file)
@@ -51,6 +51,7 @@ class ParserOutput extends CacheTime {
                private $mIndexPolicy = '';       # 'index' or 'noindex'?  Any other value will result in no change.
                private $mAccessedOptions = array(); # List of ParserOptions (stored in the keys)
                private $mSecondaryDataUpdates = array(); # List of DataUpdate, used to save info from the page somewhere else.
+               private $mExtensionData = array(); # extra data used by extensions
 
        const EDITSECTION_REGEX = '#<(?:mw:)?editsection page="(.*?)" section="(.*?)"(?:/>|>(.*?)(</(?:mw:)?editsection>))#';
 
@@ -82,13 +83,13 @@ class ParserOutput extends CacheTime {
        function replaceEditSectionLinksCallback( $m ) {
                global $wgOut, $wgLang;
                $args = array(
-                       htmlspecialchars_decode($m[1]),
-                       htmlspecialchars_decode($m[2]),
-                       isset($m[4]) ? $m[3] : null,
+                       htmlspecialchars_decode( $m[1] ),
+                       htmlspecialchars_decode( $m[2] ),
+                       isset( $m[4] ) ? $m[3] : null,
                );
                $args[0] = Title::newFromText( $args[0] );
-               if ( !is_object($args[0]) ) {
-                       throw new MWException("Bad parser output text.");
+               if ( !is_object( $args[0] ) ) {
+                       throw new MWException( "Bad parser output text." );
                }
                $args[] = $wgLang->getCode();
                $skin = $wgOut->getSkin();
@@ -189,7 +190,7 @@ class ParserOutput extends CacheTime {
         * @param $title Title object
         * @param $id Mixed: optional known page_id so we can skip the lookup
         */
-       function addLink( $title, $id = null ) {
+       function addLink( Title $title, $id = null ) {
                if ( $title->isExternal() ) {
                        // Don't record interwikis in pagelinks
                        $this->addInterwikiLink( $title );
@@ -260,7 +261,7 @@ class ParserOutput extends CacheTime {
                if( $prefix == '' ) {
                        throw new MWException( 'Non-interwiki link passed, internal parser error.' );
                }
-               if (!isset($this->mInterwikiLinks[$prefix])) {
+               if ( !isset( $this->mInterwikiLinks[$prefix] ) ) {
                        $this->mInterwikiLinks[$prefix] = array();
                }
                $this->mInterwikiLinks[$prefix][$title->getDBkey()] = 1;
@@ -370,15 +371,31 @@ class ParserOutput extends CacheTime {
         *     Wikimedia Commons.
         *     This is not actually implemented, yet but would be pretty cool.
         *
-        * Do not use setProperty() to set a property which is only used in a
-        * context where the ParserOutput object itself is already available, for
-        * example a normal page view. There is no need to save such a property
+        * @note: Do not use setProperty() to set a property which is only used
+        * in a context where the ParserOutput object itself is already available,
+        * for example a normal page view. There is no need to save such a property
         * in the database since it the text is already parsed. You can just hook
         * OutputPageParserOutput and get your data out of the ParserOutput object.
         *
-        * If you are writing an extension where you want to set
-        * a property in the parser which is used by an OutputPageParserOutput hook,
-        * just use a custom variable within the ParserOutput object:
+        * If you are writing an extension where you want to set a property in the
+        * parser which is used by an OutputPageParserOutput hook, you have to
+        * associate the extension data directly with the ParserOutput object.
+        * Since MediaWiki 1.21, you can use setExtensionData() to do this:
+        *
+        * @par Example:
+        * @code
+        *    $parser->getOutput()->setExtensionData( 'my_ext_foo', '...' );
+        * @endcode
+        *
+        * And then later, in OutputPageParserOutput or similar:
+        *
+        * @par Example:
+        * @code
+        *    $output->getExtensionData( 'my_ext_foo' );
+        * @endcode
+        *
+        * In MediaWiki 1.20 and older, you have to use a custom member variable
+        * within the ParserOutput object:
         *
         * @par Example:
         * @code
@@ -390,7 +407,7 @@ class ParserOutput extends CacheTime {
                $this->mProperties[$name] = $value;
        }
 
-       public function getProperty( $name ){
+       public function getProperty( $name ) {
                return isset( $this->mProperties[$name] ) ? $this->mProperties[$name] : false;
        }
 
@@ -407,20 +424,20 @@ class ParserOutput extends CacheTime {
         * into account to produce this output or false if not available.
         * @return mixed Array
         */
-        public function getUsedOptions() {
+       public function getUsedOptions() {
                if ( !isset( $this->mAccessedOptions ) ) {
                        return array();
                }
                return array_keys( $this->mAccessedOptions );
-        }
+       }
 
-        /**
-         * Callback passed by the Parser to the ParserOptions to keep track of which options are used.
-         * @access private
-         */
-        function recordOption( $option ) {
-                $this->mAccessedOptions[$option] = true;
-        }
+       /**
+        * Callback passed by the Parser to the ParserOptions to keep track of which options are used.
+        * @access private
+        */
+       function recordOption( $option ) {
+               $this->mAccessedOptions[$option] = true;
+       }
 
        /**
         * Adds an update job to the output. Any update jobs added to the output will eventually bexecuted in order to
@@ -457,13 +474,75 @@ class ParserOutput extends CacheTime {
 
                $linksUpdate = new LinksUpdate( $title, $this, $recursive );
 
-               if ( $this->mSecondaryDataUpdates === array() ) {
-                       return array( $linksUpdate );
+               return array_merge( $this->mSecondaryDataUpdates, array( $linksUpdate ) );
+       }
+
+       /**
+        * Attaches arbitrary data to this ParserObject. This can be used to store some information in
+        * the ParserOutput object for later use during page output. The data will be cached along with
+        * the ParserOutput object, but unlike data set using setProperty(), it is not recorded in the
+        * database.
+        *
+        * This method is provided to overcome the unsafe practice of attaching extra information to a
+        * ParserObject by directly assigning member variables.
+        *
+        * To use setExtensionData() to pass extension information from a hook inside the parser to a
+        * hook in the page output, use this in the parser hook:
+        *
+        * @par Example:
+        * @code
+        *    $parser->getOutput()->setExtensionData( 'my_ext_foo', '...' );
+        * @endcode
+        *
+        * And then later, in OutputPageParserOutput or similar:
+        *
+        * @par Example:
+        * @code
+        *    $output->getExtensionData( 'my_ext_foo' );
+        * @endcode
+        *
+        * In MediaWiki 1.20 and older, you have to use a custom member variable
+        * within the ParserOutput object:
+        *
+        * @par Example:
+        * @code
+        *    $parser->getOutput()->my_ext_foo = '...';
+        * @endcode
+        *
+        * @since 1.21
+        *
+        * @param string $key The key for accessing the data. Extensions should take care to avoid
+        *               conflicts in naming keys. It is suggested to use the extension's name as a
+        *               prefix.
+        *
+        * @param mixed $value The value to set. Setting a value to null is equivalent to removing
+        *              the value.
+        */
+       public function setExtensionData( $key, $value ) {
+               if ( $value === null ) {
+                       unset( $this->mExtensionData[$key] );
                } else {
-                       $updates = array_merge( $this->mSecondaryDataUpdates, array( $linksUpdate ) );
+                       $this->mExtensionData[$key] = $value;
                }
+       }
 
-               return $updates;
-        }
+       /**
+        * Gets extensions data previously attached to this ParserOutput using setExtensionData().
+        * Typically, such data would be set while parsing the page, e.g. by a parser function.
+        *
+        * @since 1.21
+        *
+        * @param string $key The key to look up.
+        *
+        * @return mixed The value previously set for the given key using setExtensionData( $key ),
+        *         or null if no value was set for this key.
+        */
+       public function getExtensionData( $key ) {
+               if ( isset( $this->mExtensionData[$key] ) ) {
+                       return $this->mExtensionData[$key];
+               }
+
+               return null;
+       }
 
 }
index e4f5d12..f6da6c7 100644 (file)
@@ -105,9 +105,9 @@ class Parser_LinkHooks extends Parser {
         */
        public function setLinkHook( $ns, $callback, $flags = 0 ) {
                if( $flags & SLH_PATTERN && !is_string($ns) )
-                       throw new MWException( __METHOD__.'() expecting a regex string pattern.' );
-               elseif( $flags | ~SLH_PATTERN && !is_int($ns) )
-                       throw new MWException( __METHOD__.'() expecting a namespace index.' );
+                       throw new MWException( __METHOD__ . '() expecting a regex string pattern.' );
+               elseif( $flags | ~SLH_PATTERN && !is_int( $ns ) )
+                       throw new MWException( __METHOD__ . '() expecting a namespace index.' );
                $oldVal = isset( $this->mLinkHooks[$ns] ) ? $this->mLinkHooks[$ns][0] : null;
                $this->mLinkHooks[$ns] = array( $callback, $flags );
                return $oldVal;
@@ -133,8 +133,8 @@ class Parser_LinkHooks extends Parser {
        function replaceInternalLinks2( &$s ) {
                wfProfileIn( __METHOD__ );
 
-               wfProfileIn( __METHOD__.'-setup' );
-               static $tc = FALSE, $titleRegex;//$e1, $e1_img;
+               wfProfileIn( __METHOD__ . '-setup' );
+               static $tc = FALSE, $titleRegex; //$e1, $e1_img;
                if( !$tc ) {
                        # the % is needed to support urlencoded titles as well
                        $tc = Title::legalChars() . '#%';
@@ -149,12 +149,12 @@ class Parser_LinkHooks extends Parser {
                $holders = new LinkHolderArray( $this );
 
                if( is_null( $this->mTitle ) ) {
+                       wfProfileOut( __METHOD__ . '-setup' );
                        wfProfileOut( __METHOD__ );
-                       wfProfileOut( __METHOD__.'-setup' );
-                       throw new MWException( __METHOD__.": \$this->mTitle is null\n" );
+                       throw new MWException( __METHOD__ . ": \$this->mTitle is null\n" );
                }
 
-               wfProfileOut( __METHOD__.'-setup' );
+               wfProfileOut( __METHOD__ . '-setup' );
 
                $offset = 0;
                $offsetStack = array();
@@ -167,7 +167,7 @@ class Parser_LinkHooks extends Parser {
                        # Determine if the bracket is a starting or ending bracket
                        # When we find both, use the first one
                        elseif( $startBracketOffset !== false && $endBracketOffset !== false )
-                            $isStart = $startBracketOffset <= $endBracketOffset;
+                               $isStart = $startBracketOffset <= $endBracketOffset;
                        # When we only found one, check which it is
                        else $isStart = $startBracketOffset !== false;
                        $bracketOffset = $isStart ? $startBracketOffset : $endBracketOffset;
@@ -178,26 +178,26 @@ class Parser_LinkHooks extends Parser {
                        } else {
                                /** Closing bracket **/
                                # Pop the start pos for our current link zone off the stack
-                               $startBracketOffset = array_pop($offsetStack);
+                               $startBracketOffset = array_pop( $offsetStack );
                                # Just to clean up the code, lets place offsets on the outer ends
                                $endBracketOffset += 2;
 
                                # Only do logic if we actually have a opening bracket for this
-                               if( isset($startBracketOffset) ) {
+                               if( isset( $startBracketOffset ) ) {
                                        # Extract text inside the link
-                                       @list( $titleText, $paramText ) = explode('|',
-                                               substr($s, $startBracketOffset+2, $endBracketOffset-$startBracketOffset-4), 2);
+                                       @list( $titleText, $paramText ) = explode( '|',
+                                               substr( $s, $startBracketOffset + 2, $endBracketOffset - $startBracketOffset - 4 ), 2 );
                                        # Create markers only for valid links
                                        if( preg_match( $titleRegex, $titleText ) ) {
                                                # Store the text for the marker
-                                               $marker = $markers->addMarker($titleText, $paramText);
+                                               $marker = $markers->addMarker( $titleText, $paramText );
                                                # Replace the current link with the marker
-                                               $s = substr($s,0,$startBracketOffset).
-                                                       $marker.
-                                                       substr($s, $endBracketOffset);
+                                               $s = substr( $s, 0, $startBracketOffset ) .
+                                                       $marker .
+                                                       substr( $s, $endBracketOffset );
                                                # We have modified $s, because of this we need to set the
                                                # offset manually since the end position is different now
-                                               $offset = $startBracketOffset+strlen($marker);
+                                               $offset = $startBracketOffset+strlen( $marker );
                                                continue;
                                        }
                                        # ToDo: Some LinkHooks may allow recursive links inside of
@@ -212,9 +212,9 @@ class Parser_LinkHooks extends Parser {
                }
 
                # Now expand our tree
-               wfProfileIn( __METHOD__.'-expand' );
+               wfProfileIn( __METHOD__ . '-expand' );
                $s = $markers->expand( $s );
-               wfProfileOut( __METHOD__.'-expand' );
+               wfProfileOut( __METHOD__ . '-expand' );
 
                wfProfileOut( __METHOD__ );
                return $holders;
@@ -222,12 +222,14 @@ class Parser_LinkHooks extends Parser {
 
        function replaceInternalLinksCallback( $parser, $holders, $markers, $titleText, $paramText ) {
                wfProfileIn( __METHOD__ );
-               $wt = isset($paramText) ? "[[$titleText|$paramText]]" : "[[$titleText]]";
-               wfProfileIn( __METHOD__."-misc" );
+               $wt = isset( $paramText ) ? "[[$titleText|$paramText]]" : "[[$titleText]]";
+               wfProfileIn( __METHOD__ . "-misc" );
+
                # Don't allow internal links to pages containing
                # PROTO: where PROTO is a valid URL protocol; these
                # should be external links.
-               if( preg_match('/^\b(?i:' . wfUrlProtocols() . ')/', $titleText) ) {
+               if( preg_match( '/^\b(?i:' . wfUrlProtocols() . ')/', $titleText ) ) {
+                       wfProfileOut( __METHOD__ . "-misc" );
                        wfProfileOut( __METHOD__ );
                        return $wt;
                }
@@ -241,17 +243,17 @@ class Parser_LinkHooks extends Parser {
                $leadingColon = $titleText[0] == ':';
                if( $leadingColon ) $titleText = substr( $titleText, 1 );
 
-               wfProfileOut( __METHOD__."-misc" );
+               wfProfileOut( __METHOD__ . "-misc" );
                # Make title object
-               wfProfileIn( __METHOD__."-title" );
+               wfProfileIn( __METHOD__ . "-title" );
                $title = Title::newFromText( $this->mStripState->unstripNoWiki( $titleText ) );
                if( !$title ) {
-                       wfProfileOut( __METHOD__."-title" );
+                       wfProfileOut( __METHOD__ . "-title" );
                        wfProfileOut( __METHOD__ );
                        return $wt;
                }
                $ns = $title->getNamespace();
-               wfProfileOut( __METHOD__."-title" );
+               wfProfileOut( __METHOD__ . "-title" );
 
                # Default for Namespaces is a default link
                # ToDo: Default for patterns is plain wikitext
@@ -277,7 +279,7 @@ class Parser_LinkHooks extends Parser {
                if( $return === false ) {
                        # False (no link) was returned, output plain wikitext
                        # Build it again as the hook is allowed to modify $paramText
-                       $return = isset($paramText) ? "[[$titleText|$paramText]]" : "[[$titleText]]";
+                       $return = isset( $paramText ) ? "[[$titleText|$paramText]]" : "[[$titleText]]";
                }
                # Content was returned, return it
                wfProfileOut( __METHOD__ );
@@ -298,14 +300,14 @@ class LinkMarkerReplacer {
                $this->callback = $callback;
        }
 
-       function addMarker($titleText, $paramText) {
+       function addMarker( $titleText, $paramText ) {
                $id = $this->nextId++;
                $this->markers[$id] = array( $titleText, $paramText );
                return "<!-- LINKMARKER $id -->";
        }
 
        function findMarker( $string ) {
-               return (bool) preg_match('/<!-- LINKMARKER [0-9]+ -->/', $string );
+               return (bool) preg_match( '/<!-- LINKMARKER [0-9]+ -->/', $string );
        }
 
        function expand( $string ) {
@@ -313,8 +315,8 @@ class LinkMarkerReplacer {
        }
 
        function callback( $m ) {
-               $id = intval($m[1]);
-               if( !array_key_exists($id, $this->markers) ) return $m[0];
+               $id = intval( $m[1] );
+               if( !array_key_exists( $id, $this->markers ) ) return $m[0];
                $args = $this->markers[$id];
                array_unshift( $args, $this );
                array_unshift( $args, $this->holders );
index bd13f9a..687dceb 100644 (file)
@@ -84,9 +84,9 @@ interface PPFrame {
        /**
         * Create a child frame
         *
-        * @param $args array
-        * @param $title Title
-        * @param $indexOffset A number subtracted from the index attributes of the arguments
+        * @param array $args
+        * @param Title $title
+        * @param int $indexOffset A number subtracted from the index attributes of the arguments
         *
         * @return PPFrame
         */
index 53f3feb..2505528 100644 (file)
@@ -137,9 +137,9 @@ class Preprocessor_DOM implements Preprocessor {
                $cacheable = ( $wgPreprocessorCacheThreshold !== false
                        && strlen( $text ) > $wgPreprocessorCacheThreshold );
                if ( $cacheable ) {
-                       wfProfileIn( __METHOD__.'-cacheable' );
+                       wfProfileIn( __METHOD__ . '-cacheable' );
 
-                       $cacheKey = wfMemcKey( 'preprocess-xml', md5($text), $flags );
+                       $cacheKey = wfMemcKey( 'preprocess-xml', md5( $text ), $flags );
                        $cacheValue = $wgMemc->get( $cacheKey );
                        if ( $cacheValue ) {
                                $version = substr( $cacheValue, 0, 8 );
@@ -152,11 +152,11 @@ class Preprocessor_DOM implements Preprocessor {
                }
                if ( $xml === false ) {
                        if ( $cacheable ) {
-                               wfProfileIn( __METHOD__.'-cache-miss' );
+                               wfProfileIn( __METHOD__ . '-cache-miss' );
                                $xml = $this->preprocessToXml( $text, $flags );
                                $cacheValue = sprintf( "%08d", self::CACHE_VERSION ) . $xml;
                                $wgMemc->set( $cacheKey, $cacheValue, 86400 );
-                               wfProfileOut( __METHOD__.'-cache-miss' );
+                               wfProfileOut( __METHOD__ . '-cache-miss' );
                                wfDebugLog( "Preprocessor", "Saved preprocessor XML to memcached (key $cacheKey)" );
                        } else {
                                $xml = $this->preprocessToXml( $text, $flags );
@@ -169,10 +169,10 @@ class Preprocessor_DOM implements Preprocessor {
                $this->parser->mGeneratedPPNodeCount += substr_count( $xml, '<' );
                $max = $this->parser->mOptions->getMaxGeneratedPPNodeCount();
                if ( $this->parser->mGeneratedPPNodeCount > $max ) {
-                       throw new MWException( __METHOD__.': generated node count limit exceeded' );
+                       throw new MWException( __METHOD__ . ': generated node count limit exceeded' );
                }
 
-               wfProfileIn( __METHOD__.'-loadXML' );
+               wfProfileIn( __METHOD__ . '-loadXML' );
                $dom = new DOMDocument;
                wfSuppressWarnings();
                $result = $dom->loadXML( $xml );
@@ -183,13 +183,13 @@ class Preprocessor_DOM implements Preprocessor {
                        // 1 << 19 == XML_PARSE_HUGE, needed so newer versions of libxml2 don't barf when the XML is >256 levels deep
                        $result = $dom->loadXML( $xml, 1 << 19 );
                        if ( !$result ) {
-                               throw new MWException( __METHOD__.' generated invalid XML' );
+                               throw new MWException( __METHOD__ . ' generated invalid XML' );
                        }
                }
                $obj = new PPNode_DOM( $dom->documentElement );
-               wfProfileOut( __METHOD__.'-loadXML' );
+               wfProfileOut( __METHOD__ . '-loadXML' );
                if ( $cacheable ) {
-                       wfProfileOut( __METHOD__.'-cacheable' );
+                       wfProfileOut( __METHOD__ . '-cacheable' );
                }
                wfProfileOut( __METHOD__ );
                return $obj;
@@ -397,7 +397,7 @@ class Preprocessor_DOM implements Preprocessor {
 
                                                if ( $stack->top ) {
                                                        $part = $stack->top->getCurrentPart();
-                                                       if ( ! (isset( $part->commentEnd ) && $part->commentEnd == $wsStart - 1 )) {
+                                                       if ( !(isset( $part->commentEnd ) && $part->commentEnd == $wsStart - 1 )) {
                                                                $part->visualEnd = $wsStart;
                                                        }
                                                        // Else comments abutting, no change in visual end
@@ -758,7 +758,7 @@ class PPDStack {
 
        function pop() {
                if ( !count( $this->stack ) ) {
-                       throw new MWException( __METHOD__.': no elements remaining' );
+                       throw new MWException( __METHOD__ . ': no elements remaining' );
                }
                $temp = array_pop( $this->stack );
 
@@ -815,7 +815,7 @@ class PPDStackElement {
        }
 
        function &getAccum() {
-               return $this->parts[count($this->parts) - 1]->out;
+               return $this->parts[count( $this->parts ) - 1]->out;
        }
 
        function addPart( $s = '' ) {
@@ -824,7 +824,7 @@ class PPDStackElement {
        }
 
        function getCurrentPart() {
-               return $this->parts[count($this->parts) - 1];
+               return $this->parts[count( $this->parts ) - 1];
        }
 
        /**
@@ -1118,7 +1118,7 @@ class PPFrame_DOM implements PPFrame {
                                        }
                                        # Add a strip marker in PST mode so that pstPass2() can run some old-fashioned regexes on the result
                                        # Not in RECOVER_COMMENTS mode (extractSections) though
-                                       elseif ( $this->parser->ot['wiki'] && ! ( $flags & PPFrame::RECOVER_COMMENTS ) ) {
+                                       elseif ( $this->parser->ot['wiki'] && !( $flags & PPFrame::RECOVER_COMMENTS ) ) {
                                                $out .= $this->parser->insertStripItem( $contextNode->textContent );
                                        }
                                        # Recover the literal comment in RECOVER_COMMENTS and pre+no-remove
@@ -1175,7 +1175,7 @@ class PPFrame_DOM implements PPFrame {
                                }
                        } else {
                                wfProfileOut( __METHOD__ );
-                               throw new MWException( __METHOD__.': Invalid parameter type' );
+                               throw new MWException( __METHOD__ . ': Invalid parameter type' );
                        }
 
                        if ( $newIterator !== false ) {
@@ -1459,25 +1459,25 @@ class PPTemplateFrame_DOM extends PPFrame_DOM {
        function getArguments() {
                $arguments = array();
                foreach ( array_merge(
-                               array_keys($this->numberedArgs),
-                               array_keys($this->namedArgs)) as $key ) {
-                       $arguments[$key] = $this->getArgument($key);
+                               array_keys( $this->numberedArgs ),
+                               array_keys( $this->namedArgs ) ) as $key ) {
+                       $arguments[$key] = $this->getArgument( $key );
                }
                return $arguments;
        }
 
        function getNumberedArguments() {
                $arguments = array();
-               foreach ( array_keys($this->numberedArgs) as $key ) {
-                       $arguments[$key] = $this->getArgument($key);
+               foreach ( array_keys( $this->numberedArgs ) as $key ) {
+                       $arguments[$key] = $this->getArgument( $key );
                }
                return $arguments;
        }
 
        function getNamedArguments() {
                $arguments = array();
-               foreach ( array_keys($this->namedArgs) as $key ) {
-                       $arguments[$key] = $this->getArgument($key);
+               foreach ( array_keys( $this->namedArgs ) as $key ) {
+                       $arguments[$key] = $this->getArgument( $key );
                }
                return $arguments;
        }
index a4e408e..a871205 100644 (file)
@@ -116,9 +116,9 @@ class Preprocessor_Hash implements Preprocessor {
 
                $cacheable = $wgPreprocessorCacheThreshold !== false && strlen( $text ) > $wgPreprocessorCacheThreshold;
                if ( $cacheable ) {
-                       wfProfileIn( __METHOD__.'-cacheable' );
+                       wfProfileIn( __METHOD__ . '-cacheable' );
 
-                       $cacheKey = wfMemcKey( 'preprocess-hash', md5($text), $flags );
+                       $cacheKey = wfMemcKey( 'preprocess-hash', md5( $text ), $flags );
                        $cacheValue = $wgMemc->get( $cacheKey );
                        if ( $cacheValue ) {
                                $version = substr( $cacheValue, 0, 8 );
@@ -127,12 +127,12 @@ class Preprocessor_Hash implements Preprocessor {
                                        // From the cache
                                        wfDebugLog( "Preprocessor",
                                                "Loaded preprocessor hash from memcached (key $cacheKey)" );
-                                       wfProfileOut( __METHOD__.'-cacheable' );
+                                       wfProfileOut( __METHOD__ . '-cacheable' );
                                        wfProfileOut( __METHOD__ );
                                        return $hash;
                                }
                        }
-                       wfProfileIn( __METHOD__.'-cache-miss' );
+                       wfProfileIn( __METHOD__ . '-cache-miss' );
                }
 
                $rules = array(
@@ -332,7 +332,7 @@ class Preprocessor_Hash implements Preprocessor {
 
                                                if ( $stack->top ) {
                                                        $part = $stack->top->getCurrentPart();
-                                                       if ( ! (isset( $part->commentEnd ) && $part->commentEnd == $wsStart - 1 )) {
+                                                       if ( !(isset( $part->commentEnd ) && $part->commentEnd == $wsStart - 1 )) {
                                                                $part->visualEnd = $wsStart;
                                                        }
                                                        // Else comments abutting, no change in visual end
@@ -391,7 +391,7 @@ class Preprocessor_Hash implements Preprocessor {
                                }
                                // <includeonly> and <noinclude> just become <ignore> tags
                                if ( in_array( $lowerName, $ignoredElements ) ) {
-                                       $accum->addNodeWithText(  'ignore', substr( $text, $tagStartPos, $i - $tagStartPos ) );
+                                       $accum->addNodeWithText( 'ignore', substr( $text, $tagStartPos, $i - $tagStartPos ) );
                                        continue;
                                }
 
@@ -549,7 +549,7 @@ class Preprocessor_Hash implements Preprocessor {
                                        }
                                }
 
-                               if ($matchingCount <= 0) {
+                               if ( $matchingCount <= 0 ) {
                                        # No matching element found in callback array
                                        # Output a literal closing brace and continue
                                        $accum->addLiteral( str_repeat( $curChar, $count ) );
@@ -591,10 +591,10 @@ class Preprocessor_Hash implements Preprocessor {
                                                                $lastNode = $node;
                                                        }
                                                        if ( !$node ) {
-                                                               throw new MWException( __METHOD__. ': eqpos not found' );
+                                                               throw new MWException( __METHOD__ . ': eqpos not found' );
                                                        }
                                                        if ( $node->name !== 'equals' ) {
-                                                               throw new MWException( __METHOD__ .': eqpos is not equals' );
+                                                               throw new MWException( __METHOD__ . ': eqpos is not equals' );
                                                        }
                                                        $equalsNode = $node;
 
@@ -639,7 +639,7 @@ class Preprocessor_Hash implements Preprocessor {
                                $accum =& $stack->getAccum();
 
                                # Re-add the old stack element if it still has unmatched opening characters remaining
-                               if ($matchingCount < $piece->count) {
+                               if ( $matchingCount < $piece->count ) {
                                        $piece->parts = array( new PPDPart_Hash );
                                        $piece->count -= $matchingCount;
                                        # do we still qualify for any callback with remaining count?
@@ -696,11 +696,11 @@ class Preprocessor_Hash implements Preprocessor {
                $rootNode->lastChild = $stack->rootAccum->lastNode;
 
                // Cache
-               if ($cacheable) {
+               if ( $cacheable ) {
                        $cacheValue = sprintf( "%08d", self::CACHE_VERSION ) . serialize( $rootNode );
                        $wgMemc->set( $cacheKey, $cacheValue, 86400 );
-                       wfProfileOut( __METHOD__.'-cache-miss' );
-                       wfProfileOut( __METHOD__.'-cacheable' );
+                       wfProfileOut( __METHOD__ . '-cache-miss' );
+                       wfProfileOut( __METHOD__ . '-cacheable' );
                        wfDebugLog( "Preprocessor", "Saved preprocessor Hash to memcached (key $cacheKey)" );
                }
 
@@ -1038,7 +1038,7 @@ class PPFrame_Hash implements PPFrame {
                                        }
                                        # Add a strip marker in PST mode so that pstPass2() can run some old-fashioned regexes on the result
                                        # Not in RECOVER_COMMENTS mode (extractSections) though
-                                       elseif ( $this->parser->ot['wiki'] && ! ( $flags & PPFrame::RECOVER_COMMENTS ) ) {
+                                       elseif ( $this->parser->ot['wiki'] && !( $flags & PPFrame::RECOVER_COMMENTS ) ) {
                                                $out .= $this->parser->insertStripItem( $contextNode->firstChild->value );
                                        }
                                        # Recover the literal comment in RECOVER_COMMENTS and pre+no-remove
@@ -1085,7 +1085,7 @@ class PPFrame_Hash implements PPFrame {
                                        $newIterator = $contextNode->getChildren();
                                }
                        } else {
-                               throw new MWException( __METHOD__.': Invalid parameter type' );
+                               throw new MWException( __METHOD__ . ': Invalid parameter type' );
                        }
 
                        if ( $newIterator !== false ) {
@@ -1374,9 +1374,9 @@ class PPTemplateFrame_Hash extends PPFrame_Hash {
        function getArguments() {
                $arguments = array();
                foreach ( array_merge(
-                               array_keys($this->numberedArgs),
-                               array_keys($this->namedArgs)) as $key ) {
-                       $arguments[$key] = $this->getArgument($key);
+                               array_keys( $this->numberedArgs ),
+                               array_keys( $this->namedArgs ) ) as $key ) {
+                       $arguments[$key] = $this->getArgument( $key );
                }
                return $arguments;
        }
@@ -1386,8 +1386,8 @@ class PPTemplateFrame_Hash extends PPFrame_Hash {
         */
        function getNumberedArguments() {
                $arguments = array();
-               foreach ( array_keys($this->numberedArgs) as $key ) {
-                       $arguments[$key] = $this->getArgument($key);
+               foreach ( array_keys( $this->numberedArgs ) as $key ) {
+                       $arguments[$key] = $this->getArgument( $key );
                }
                return $arguments;
        }
@@ -1397,8 +1397,8 @@ class PPTemplateFrame_Hash extends PPFrame_Hash {
         */
        function getNamedArguments() {
                $arguments = array();
-               foreach ( array_keys($this->namedArgs) as $key ) {
-                       $arguments[$key] = $this->getArgument($key);
+               foreach ( array_keys( $this->namedArgs ) as $key ) {
+                       $arguments[$key] = $this->getArgument( $key );
                }
                return $arguments;
        }
index 8059e35..bd5e1a7 100644 (file)
@@ -121,7 +121,7 @@ class Preprocessor_HipHop implements Preprocessor {
                if ( $cacheable ) {
                        wfProfileIn( __METHOD__.'-cacheable' );
 
-                       $cacheKey = strval( wfMemcKey( 'preprocess-hash', md5($text), $flags ) );
+                       $cacheKey = strval( wfMemcKey( 'preprocess-hash', md5( $text ), $flags ) );
                        $cacheValue = strval( $wgMemc->get( $cacheKey ) );
                        if ( $cacheValue !== '' ) {
                                $version = substr( $cacheValue, 0, 8 );
@@ -347,7 +347,7 @@ class Preprocessor_HipHop implements Preprocessor {
 
                                                if ( $stack->top ) {
                                                        $part = $stack->getTop()->getCurrentPart();
-                                                       if ( ! (isset( $part->commentEnd ) && $part->commentEnd == $wsStart - 1 )) {
+                                                       if ( !(isset( $part->commentEnd ) && $part->commentEnd == $wsStart - 1 )) {
                                                                $part->visualEnd = $wsStart;
                                                        }
                                                        // Else comments abutting, no change in visual end
@@ -411,7 +411,7 @@ class Preprocessor_HipHop implements Preprocessor {
                                }
                                // <includeonly> and <noinclude> just become <ignore> tags
                                if ( in_array( $lowerName, $ignoredElements ) ) {
-                                       $accum->addNodeWithText(  'ignore', strval( substr( $text, $tagStartPos, $i - $tagStartPos ) ) );
+                                       $accum->addNodeWithText( 'ignore', strval( substr( $text, $tagStartPos, $i - $tagStartPos ) ) );
                                        continue;
                                }
 
@@ -578,7 +578,7 @@ class Preprocessor_HipHop implements Preprocessor {
                                        }
                                }
 
-                               if ($matchingCount <= 0) {
+                               if ( $matchingCount <= 0 ) {
                                        # No matching element found in callback array
                                        # Output a literal closing brace and continue
                                        $accum->addLiteral( str_repeat( $curChar, $count ) );
@@ -671,7 +671,7 @@ class Preprocessor_HipHop implements Preprocessor {
                                $accum = $stack->getAccum();
 
                                # Re-add the old stack element if it still has unmatched opening characters remaining
-                               if ($matchingCount < $piece->count) {
+                               if ( $matchingCount < $piece->count ) {
                                        $piece->parts = array( new PPDPart_HipHop );
                                        $piece->count -= $matchingCount;
                                        # do we still qualify for any callback with remaining count?
@@ -729,7 +729,7 @@ class Preprocessor_HipHop implements Preprocessor {
                $rootNode->lastChild = $stack->rootAccum->lastNode;
 
                // Cache
-               if ($cacheable) {
+               if ( $cacheable ) {
                        $cacheValue = sprintf( "%08d", self::CACHE_VERSION ) . serialize( $rootNode );
                        $wgMemc->set( $cacheKey, $cacheValue, 86400 );
                        wfProfileOut( __METHOD__.'-cache-miss' );
@@ -865,7 +865,7 @@ class PPDStackElement_HipHop {
         * @return PPDAccum_HipHop
         */
        function getAccum() {
-               return PPDAccum_HipHop::cast( $this->parts[count($this->parts) - 1]->out );
+               return PPDAccum_HipHop::cast( $this->parts[count( $this->parts ) - 1]->out );
        }
 
        /**
@@ -879,7 +879,7 @@ class PPDStackElement_HipHop {
         * @return PPDPart_HipHop
         */
        function getCurrentPart() {
-               return PPDPart_HipHop::cast( $this->parts[count($this->parts) - 1] );
+               return PPDPart_HipHop::cast( $this->parts[count( $this->parts ) - 1] );
        }
 
        /**
@@ -1216,7 +1216,7 @@ class PPFrame_HipHop implements PPFrame {
                                        }
                                        # Add a strip marker in PST mode so that pstPass2() can run some old-fashioned regexes on the result
                                        # Not in RECOVER_COMMENTS mode (extractSections) though
-                                       elseif ( $this->parser->ot['wiki'] && ! ( $flags & PPFrame::RECOVER_COMMENTS ) ) {
+                                       elseif ( $this->parser->ot['wiki'] && !( $flags & PPFrame::RECOVER_COMMENTS ) ) {
                                                $out .= $this->parser->insertStripItem( $contextNode->firstChild->value );
                                        }
                                        # Recover the literal comment in RECOVER_COMMENTS and pre+no-remove
@@ -1569,8 +1569,8 @@ class PPTemplateFrame_HipHop extends PPFrame_HipHop {
         */
        function getNumberedArguments() {
                $arguments = array();
-               foreach ( array_keys($this->numberedArgs) as $key ) {
-                       $arguments[$key] = $this->getArgument($key);
+               foreach ( array_keys( $this->numberedArgs ) as $key ) {
+                       $arguments[$key] = $this->getArgument( $key );
                }
                return $arguments;
        }
@@ -1580,8 +1580,8 @@ class PPTemplateFrame_HipHop extends PPFrame_HipHop {
         */
        function getNamedArguments() {
                $arguments = array();
-               foreach ( array_keys($this->namedArgs) as $key ) {
-                       $arguments[$key] = $this->getArgument($key);
+               foreach ( array_keys( $this->namedArgs ) as $key ) {
+                       $arguments[$key] = $this->getArgument( $key );
                }
                return $arguments;
        }
index 57f623d..5f3f18e 100644 (file)
@@ -233,4 +233,3 @@ class StripState {
                return preg_replace( $this->regex, '', $text );
        }
 }
-
index 5cc1b0f..4994d3e 100644 (file)
@@ -68,9 +68,9 @@ class MWTidyWrapper {
                $wrappedtext = preg_replace( '!<(link|meta)([^>]*?)(/{0,1}>)!', '<html-$1$2$3', $wrappedtext );
 
                // Wrap the whole thing in a doctype and body for Tidy.
-               $wrappedtext = '<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"'.
-                       ' "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"><html>'.
-                       '<head><title>test</title></head><body>'.$wrappedtext.'</body></html>';
+               $wrappedtext = '<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"' .
+                       ' "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"><html>' .
+                       '<head><title>test</title></head><body>' . $wrappedtext . '</body></html>';
 
                return $wrappedtext;
        }
@@ -260,24 +260,24 @@ class MWTidy {
 
                        wfProfileOut( __METHOD__ );
                        return $tidy->errorBuffer;
+               }
+
+               $tidy->cleanRepair();
+               $retval = $tidy->getStatus();
+               if ( $retval == 2 ) {
+                       // 2 is magic number for fatal error
+                       // http://www.php.net/manual/en/function.tidy-get-status.php
+                       $cleansource = null;
                } else {
-                       $tidy->cleanRepair();
-                       $retval = $tidy->getStatus();
-                       if ( $retval == 2 ) {
-                               // 2 is magic number for fatal error
-                               // http://www.php.net/manual/en/function.tidy-get-status.php
-                               $cleansource = null;
-                       } else {
-                               $cleansource = tidy_get_output( $tidy );
-                               if ( $wgDebugTidy && $retval > 0 ) {
-                                       $cleansource .= "<!--\nTidy reports:\n" .
-                                               str_replace( '-->', '--&gt;', $tidy->errorBuffer ) .
-                                               "\n-->";
-                               }
+                       $cleansource = tidy_get_output( $tidy );
+                       if ( $wgDebugTidy && $retval > 0 ) {
+                               $cleansource .= "<!--\nTidy reports:\n" .
+                                       str_replace( '-->', '--&gt;', $tidy->errorBuffer ) .
+                                       "\n-->";
                        }
-
-                       wfProfileOut( __METHOD__ );
-                       return $cleansource;
                }
+
+               wfProfileOut( __METHOD__ );
+               return $cleansource;
        }
 }
index f6f2117..1ead836 100644 (file)
@@ -157,7 +157,7 @@ class Profiler {
         */
        public function profileIn( $functionname ) {
                global $wgDebugFunctionEntry;
-               if( $wgDebugFunctionEntry ){
+               if( $wgDebugFunctionEntry ) {
                        $this->debug( str_repeat( ' ', count( $this->mWorkStack ) ) . 'Entering ' . $functionname . "\n" );
                }
 
@@ -174,22 +174,22 @@ class Profiler {
                $memory = memory_get_usage();
                $time = $this->getTime();
 
-               if( $wgDebugFunctionEntry ){
+               if( $wgDebugFunctionEntry ) {
                        $this->debug( str_repeat( ' ', count( $this->mWorkStack ) - 1 ) . 'Exiting ' . $functionname . "\n" );
                }
 
-               $bit = array_pop($this->mWorkStack);
+               $bit = array_pop( $this->mWorkStack );
 
-               if (!$bit) {
-                       $this->debug("Profiling error, !\$bit: $functionname\n");
+               if ( !$bit ) {
+                       $this->debug( "Profiling error, !\$bit: $functionname\n" );
                } else {
-                       //if( $wgDebugProfiling ){
-                               if( $functionname == 'close' ){
+                       //if( $wgDebugProfiling ) {
+                               if( $functionname == 'close' ) {
                                        $message = "Profile section ended by close(): {$bit[0]}";
                                        $this->debug( "$message\n" );
                                        $this->mStack[] = array( $message, 0, 0.0, 0, 0.0, 0 );
                                }
-                               elseif( $bit[0] != $functionname ){
+                               elseif( $bit[0] != $functionname ) {
                                        $message = "Profiling error: in({$bit[0]}), out($functionname)";
                                        $this->debug( "$message\n" );
                                        $this->mStack[] = array( $message, 0, 0.0, 0, 0.0, 0 );
@@ -205,7 +205,7 @@ class Profiler {
         * Close opened profiling sections
         */
        public function close() {
-               while( count( $this->mWorkStack ) ){
+               while( count( $this->mWorkStack ) ) {
                        $this->profileOut( 'close' );
                }
        }
@@ -228,7 +228,7 @@ class Profiler {
                global $wgDebugFunctionEntry, $wgProfileCallTree;
                $wgDebugFunctionEntry = false;
 
-               if( !count( $this->mStack ) && !count( $this->mCollated ) ){
+               if( !count( $this->mStack ) && !count( $this->mCollated ) ) {
                        return "No profiling output\n";
                }
 
@@ -254,16 +254,16 @@ class Profiler {
         * @return array
         */
        function remapCallTree( $stack ) {
-               if( count( $stack ) < 2 ){
+               if( count( $stack ) < 2 ) {
                        return $stack;
                }
                $outputs = array ();
-               for( $max = count( $stack ) - 1; $max > 0; ){
+               for( $max = count( $stack ) - 1; $max > 0; ) {
                        /* Find all items under this entry */
                        $level = $stack[$max][1];
                        $working = array ();
-                       for( $i = $max -1; $i >= 0; $i-- ){
-                               if( $stack[$i][1] > $level ){
+                       for( $i = $max -1; $i >= 0; $i-- ) {
+                               if( $stack[$i][1] > $level ) {
                                        $working[] = $stack[$i];
                                } else {
                                        break;
@@ -271,7 +271,7 @@ class Profiler {
                        }
                        $working = $this->remapCallTree( array_reverse( $working ) );
                        $output = array();
-                       foreach( $working as $item ){
+                       foreach( $working as $item ) {
                                array_push( $output, $item );
                        }
                        array_unshift( $output, $stack[$max] );
@@ -280,8 +280,8 @@ class Profiler {
                        array_unshift( $outputs, $output );
                }
                $final = array();
-               foreach( $outputs as $output ){
-                       foreach( $output as $item ){
+               foreach( $outputs as $output ) {
+                       foreach( $output as $item ) {
                                $final[] = $item;
                        }
                }
@@ -293,9 +293,9 @@ class Profiler {
         * @return string
         */
        function getCallTreeLine( $entry ) {
-               list( $fname, $level, $start, /* $x */, $end = $entry;
+               list( $fname, $level, $start, /* $x */, $end ) = $entry;
                $delta = $end - $start;
-               $space = str_repeat(' ', $level);
+               $space = str_repeat( ' ', $level );
                # The ugly double sprintf is to work around a PHP bug,
                # which has been fixed in recent releases.
                return sprintf( "%10s %s %s\n", trim( sprintf( "%7.3f", $delta * 1000.0 ) ), $space, $fname );
@@ -386,23 +386,23 @@ class Profiler {
                $this->mMemory = array();
 
                # Estimate profiling overhead
-               $profileCount = count($this->mStack);
+               $profileCount = count( $this->mStack );
                self::calculateOverhead( $profileCount );
 
                # First, subtract the overhead!
                $overheadTotal = $overheadMemory = $overheadInternal = array();
-               foreach( $this->mStack as $entry ){
+               foreach( $this->mStack as $entry ) {
                        $fname = $entry[0];
                        $start = $entry[2];
                        $end = $entry[4];
                        $elapsed = $end - $start;
                        $memory = $entry[5] - $entry[3];
 
-                       if( $fname == '-overhead-total' ){
+                       if( $fname == '-overhead-total' ) {
                                $overheadTotal[] = $elapsed;
                                $overheadMemory[] = $memory;
                        }
-                       elseif( $fname == '-overhead-internal' ){
+                       elseif( $fname == '-overhead-internal' ) {
                                $overheadInternal[] = $elapsed;
                        }
                }
@@ -411,7 +411,7 @@ class Profiler {
                $overheadInternal = $overheadInternal ? array_sum( $overheadInternal ) / count( $overheadInternal ) : 0;
 
                # Collate
-               foreach( $this->mStack as $index => $entry ){
+               foreach( $this->mStack as $index => $entry ) {
                        $fname = $entry[0];
                        $start = $entry[2];
                        $end = $entry[4];
@@ -420,7 +420,7 @@ class Profiler {
                        $memory = $entry[5] - $entry[3];
                        $subcalls = $this->calltreeCount( $this->mStack, $index );
 
-                       if( !preg_match( '/^-overhead/', $fname ) ){
+                       if( !preg_match( '/^-overhead/', $fname ) ) {
                                # Adjust for profiling overhead (except special values with elapsed=0
                                if( $elapsed ) {
                                        $elapsed -= $overheadInternal;
@@ -429,7 +429,7 @@ class Profiler {
                                }
                        }
 
-                       if( !array_key_exists( $fname, $this->mCollated ) ){
+                       if( !array_key_exists( $fname, $this->mCollated ) ) {
                                $this->mCollated[$fname] = 0;
                                $this->mCalls[$fname] = 0;
                                $this->mMemory[$fname] = 0;
@@ -441,8 +441,8 @@ class Profiler {
                        $this->mCollated[$fname] += $elapsed;
                        $this->mCalls[$fname]++;
                        $this->mMemory[$fname] += $memory;
-                       $this->mMin[$fname] = min($this->mMin[$fname], $elapsed);
-                       $this->mMax[$fname] = max($this->mMax[$fname], $elapsed);
+                       $this->mMin[$fname] = min( $this->mMin[$fname], $elapsed );
+                       $this->mMax[$fname] = max( $this->mMax[$fname], $elapsed );
                        $this->mOverhead[$fname] += $subcalls;
                }
 
@@ -467,11 +467,11 @@ class Profiler {
 
                $total = isset( $this->mCollated['-total'] ) ? $this->mCollated['-total'] : 0;
 
-               foreach( $this->mCollated as $fname => $elapsed ){
+               foreach( $this->mCollated as $fname => $elapsed ) {
                        $calls = $this->mCalls[$fname];
                        $percent = $total ? 100. * $elapsed / $total : 0;
                        $memory = $this->mMemory[$fname];
-                       $prof .= sprintf($format, substr($fname, 0, $nameWidth), $calls, (float) ($elapsed * 1000), (float) ($elapsed * 1000) / $calls, $percent, $memory, ($this->mMin[$fname] * 1000.0), ($this->mMax[$fname] * 1000.0), $this->mOverhead[$fname]);
+                       $prof .= sprintf( $format, substr( $fname, 0, $nameWidth ), $calls, (float) ($elapsed * 1000), (float) ($elapsed * 1000) / $calls, $percent, $memory, ( $this->mMin[$fname] * 1000.0 ), ( $this->mMax[$fname] * 1000.0 ), $this->mOverhead[$fname] );
                }
                $prof .= "\nTotal: $total\n\n";
 
@@ -483,7 +483,7 @@ class Profiler {
         */
        protected static function calculateOverhead( $profileCount ) {
                wfProfileIn( '-overhead-total' );
-               for( $i = 0; $i < $profileCount; $i++ ){
+               for( $i = 0; $i < $profileCount; $i++ ) {
                        wfProfileIn( '-overhead-internal' );
                        wfProfileOut( '-overhead-internal' );
                }
@@ -499,10 +499,10 @@ class Profiler {
         * @return Integer
         * @private
         */
-       function calltreeCount($stack, $start) {
+       function calltreeCount( $stack, $start ) {
                $level = $stack[$start][1];
                $count = 0;
-               for ($i = $start -1; $i >= 0 && $stack[$i][1] > $level; $i --) {
+               for ( $i = $start -1; $i >= 0 && $stack[$i][1] > $level; $i-- ) {
                        $count ++;
                }
                return $count;
@@ -511,7 +511,7 @@ class Profiler {
        /**
         * Log the whole profiling data into the database.
         */
-       public function logData(){
+       public function logData() {
                global $wgProfilePerHost, $wgProfileToDatabase;
 
                # Do not log anything if database is readonly (bug 5375)
@@ -524,7 +524,7 @@ class Profiler {
                        return;
                }
 
-               if( $wgProfilePerHost ){
+               if( $wgProfilePerHost ) {
                        $pfhost = wfHostname();
                } else {
                        $pfhost = '';
@@ -533,7 +533,7 @@ class Profiler {
                try {
                        $this->collateData();
 
-                       foreach( $this->mCollated as $name => $elapsed ){
+                       foreach( $this->mCollated as $name => $elapsed ) {
                                $eventCount = $this->mCalls[$name];
                                $timeSum = (float) ($elapsed * 1000);
                                $memorySum = (float)$this->mMemory[$name];
@@ -557,9 +557,9 @@ class Profiler {
 
                                $rc = $dbw->affectedRows();
                                if ( $rc == 0 ) {
-                                       $dbw->insert('profiling', array ('pf_name' => $name, 'pf_count' => $eventCount,
+                                       $dbw->insert( 'profiling', array ( 'pf_name' => $name, 'pf_count' => $eventCount,
                                                'pf_time' => $timeSum, 'pf_memory' => $memorySum, 'pf_server' => $pfhost ),
-                                               __METHOD__, array ('IGNORE'));
+                                               __METHOD__, array ( 'IGNORE' ) );
                                }
                                // When we upgrade to mysql 4.1, the insert+update
                                // can be merged into just a insert with this construct added:
@@ -589,4 +589,18 @@ class Profiler {
                        wfDebug( $s );
                }
        }
+
+       /**
+        * Get the content type sent out to the client.
+        * Used for profilers that output instead of store data.
+        * @return string
+        */
+       protected function getContentType() {
+               foreach ( headers_list() as $header ) {
+                       if ( preg_match( '#^content-type: (\w+/\w+);?#i', $header, $m ) ) {
+                               return $m[1];
+                       }
+               }
+               return null;
+       }
 }
index d1d1c5d..1322e47 100644 (file)
@@ -29,7 +29,7 @@
 class ProfilerSimple extends Profiler {
        var $mMinimumTime = 0;
 
-       var $zeroEntry = array('cpu'=> 0.0, 'cpu_sq' => 0.0, 'real' => 0.0, 'real_sq' => 0.0, 'count' => 0);
+       var $zeroEntry = array( 'cpu'=> 0.0, 'cpu_sq' => 0.0, 'real' => 0.0, 'real_sq' => 0.0, 'count' => 0 );
        var $errorEntry;
 
        public function isPersistent() {
@@ -57,33 +57,33 @@ class ProfilerSimple extends Profiler {
                $this->mMinimumTime = $min;
        }
 
-       function profileIn($functionname) {
+       function profileIn( $functionname ) {
                global $wgDebugFunctionEntry;
-               if ($wgDebugFunctionEntry) {
-                       $this->debug(str_repeat(' ', count($this->mWorkStack)).'Entering '.$functionname."\n");
+               if ( $wgDebugFunctionEntry ) {
+                       $this->debug( str_repeat( ' ', count( $this->mWorkStack ) ) . 'Entering ' . $functionname . "\n" );
                }
                $this->mWorkStack[] = array( $functionname, count( $this->mWorkStack ), $this->getTime(), $this->getTime( 'cpu' ) );
        }
 
-       function profileOut($functionname) {
+       function profileOut( $functionname ) {
                global $wgDebugFunctionEntry;
 
-               if ($wgDebugFunctionEntry) {
-                       $this->debug(str_repeat(' ', count($this->mWorkStack) - 1).'Exiting '.$functionname."\n");
+               if ( $wgDebugFunctionEntry ) {
+                       $this->debug( str_repeat( ' ', count( $this->mWorkStack ) - 1 ) . 'Exiting ' . $functionname . "\n" );
                }
 
-               list($ofname, /* $ocount */ ,$ortime,$octime) = array_pop($this->mWorkStack);
+               list( $ofname, /* $ocount */, $ortime, $octime ) = array_pop( $this->mWorkStack );
 
-               if (!$ofname) {
-                       $this->debug("Profiling error: $functionname\n");
+               if ( !$ofname ) {
+                       $this->debug( "Profiling error: $functionname\n" );
                } else {
-                       if ($functionname == 'close') {
+                       if ( $functionname == 'close' ) {
                                $message = "Profile section ended by close(): {$ofname}";
                                $functionname = $ofname;
                                $this->debug( "$message\n" );
                                $this->mCollated[$message] = $this->errorEntry;
                        }
-                       elseif ($ofname != $functionname) {
+                       elseif ( $ofname != $functionname ) {
                                $message = "Profiling error: in({$ofname}), out($functionname)";
                                $this->debug( "$message\n" );
                                $this->mCollated[$message] = $this->errorEntry;
@@ -91,7 +91,7 @@ class ProfilerSimple extends Profiler {
                        $entry =& $this->mCollated[$functionname];
                        $elapsedcpu = $this->getTime( 'cpu' ) - $octime;
                        $elapsedreal = $this->getTime() - $ortime;
-                       if (!is_array($entry)) {
+                       if ( !is_array( $entry ) ) {
                                $entry = $this->zeroEntry;
                                $this->mCollated[$functionname] =& $entry;
                        }
index 3e7d6fa..37350bf 100644 (file)
@@ -48,12 +48,20 @@ class ProfilerSimpleText extends ProfilerSimple {
                        $totalReal = isset( $this->mCollated['-total'] )
                                ? $this->mCollated['-total']['real']
                                : 0; // profiling mismatch error?
-                       uasort( $this->mCollated, array('self','sort') );
-                       array_walk( $this->mCollated, array('self','format'), $totalReal );
-                       if ( $this->visible ) {
-                               print '<pre>'.self::$out.'</pre>';
-                       } else {
+                       uasort( $this->mCollated, array( 'self', 'sort' ) );
+                       array_walk( $this->mCollated, array( 'self', 'format' ), $totalReal );
+                       if ( PHP_SAPI === 'cli' ) {
                                print "<!--\n".self::$out."\n-->\n";
+                       } elseif ( $this->getContentType() === 'text/html' ) {
+                               if ( $this->visible ) {
+                                       print '<pre>'.self::$out.'</pre>';
+                               } else {
+                                       print "<!--\n".self::$out."\n-->\n";
+                               }
+                       } elseif ( $this->getContentType() === 'text/javascript' ) {
+                               print "\n/*\n".self::$out."*/\n";
+                       } elseif ( $this->getContentType() === 'text/css' ) {
+                               print "\n/*\n".self::$out."*/\n";
                        }
                }
        }
index 822e9fe..d44dfe1 100644 (file)
@@ -32,18 +32,18 @@ class ProfilerSimpleTrace extends ProfilerSimple {
 
        function profileIn( $functionname ) {
                parent::profileIn( $functionname );
-               $this->trace .= "         " . sprintf("%6.1f",$this->memoryDiff()) .
-                               str_repeat( " ", count($this->mWorkStack)) . " > " . $functionname . "\n";
+               $this->trace .= "         " . sprintf( "%6.1f", $this->memoryDiff() ) .
+                               str_repeat( " ", count( $this->mWorkStack ) ) . " > " . $functionname . "\n";
        }
 
-       function profileOut($functionname) {
+       function profileOut( $functionname ) {
                global $wgDebugFunctionEntry;
 
                if ( $wgDebugFunctionEntry ) {
-                       $this->debug(str_repeat(' ', count($this->mWorkStack) - 1).'Exiting '.$functionname."\n");
+                       $this->debug( str_repeat( ' ', count( $this->mWorkStack ) - 1 ) . 'Exiting ' . $functionname . "\n" );
                }
 
-               list( $ofname, /* $ocount */ , $ortime ) = array_pop( $this->mWorkStack );
+               list( $ofname, /* $ocount */, $ortime ) = array_pop( $this->mWorkStack );
 
                if ( !$ofname ) {
                        $this->trace .= "Profiling error: $functionname\n";
@@ -58,7 +58,7 @@ class ProfilerSimpleTrace extends ProfilerSimple {
                        }
                        $elapsedreal = $this->getTime() - $ortime;
                        $this->trace .= sprintf( "%03.6f %6.1f", $elapsedreal, $this->memoryDiff() ) .
-                                       str_repeat(" ", count( $this->mWorkStack ) + 1 ) . " < " . $functionname . "\n";
+                                       str_repeat( " ", count( $this->mWorkStack ) + 1 ) . " < " . $functionname . "\n";
                }
        }
 
@@ -69,6 +69,14 @@ class ProfilerSimpleTrace extends ProfilerSimple {
        }
 
        function logData() {
-               print "<!-- \n {$this->trace} \n -->";
+               if ( PHP_SAPI === 'cli' ) {
+                       print "<!-- \n {$this->trace} \n -->";
+               } elseif ( $this->getContentType() === 'text/html' ) {
+                       print "<!-- \n {$this->trace} \n -->";
+               } elseif ( $this->getContentType() === 'text/javascript' ) {
+                       print "\n/*\n {$this->trace}\n*/";
+               } elseif ( $this->getContentType() === 'text/css' ) {
+                       print "\n/*\n {$this->trace}\n*/";
+               }
        }
 }
index a95ccb0..abefa81 100644 (file)
@@ -50,7 +50,7 @@ class ProfilerSimpleUDP extends ProfilerSimple {
                $plength = 0;
                $packet = "";
                foreach ( $this->mCollated as $entry => $pfdata ) {
-                       if( !isset($pfdata['count'])
+                       if( !isset( $pfdata['count'] )
                                || !isset( $pfdata['cpu'] )
                                || !isset( $pfdata['cpu_sq'] )
                                || !isset( $pfdata['real'] )
index b4bd98c..5abe226 100644 (file)
@@ -176,6 +176,7 @@ class ResourceLoader {
                } catch ( Exception $exception ) {
                        // Return exception as a comment
                        $result = $this->makeComment( $exception->__toString() );
+                       $this->hasErrors = true;
                }
 
                wfProfileOut( __METHOD__ );
@@ -435,6 +436,7 @@ class ResourceLoader {
 
                wfProfileIn( __METHOD__ );
                $errors = '';
+               $this->hasErrors = false;
 
                // Split requested modules into two groups, modules and missing
                $modules = array();
@@ -446,6 +448,7 @@ class ResourceLoader {
                                // This is a security issue, see bug 34907.
                                if ( $module->getGroup() === 'private' ) {
                                        $errors .= $this->makeComment( "Cannot show private module \"$name\"" );
+                                       $this->hasErrors = true;
                                        continue;
                                }
                                $modules[$name] = $this->getModule( $name );
@@ -460,6 +463,7 @@ class ResourceLoader {
                } catch( Exception $e ) {
                        // Add exception to the output as a comment
                        $errors .= $this->makeComment( $e->__toString() );
+                       $this->hasErrors = true;
                }
 
                wfProfileIn( __METHOD__.'-getModifiedTime' );
@@ -477,14 +481,12 @@ class ResourceLoader {
                        } catch ( Exception $e ) {
                                // Add exception to the output as a comment
                                $errors .= $this->makeComment( $e->__toString() );
+                               $this->hasErrors = true;
                        }
                }
 
                wfProfileOut( __METHOD__.'-getModifiedTime' );
 
-               // Send content type and cache related headers
-               $this->sendResponseHeaders( $context, $mtime );
-
                // If there's an If-Modified-Since header, respond with a 304 appropriately
                if ( $this->tryRespondLastModified( $context, $mtime ) ) {
                        wfProfileOut( __METHOD__ );
@@ -501,6 +503,7 @@ class ResourceLoader {
                // response in a comment if we're in debug mode.
                if ( $context->getDebug() && strlen( $warnings = ob_get_contents() ) ) {
                        $response = $this->makeComment( $warnings ) . $response;
+                       $this->hasErrors = true;
                }
 
                // Save response to file cache unless there are errors
@@ -515,6 +518,9 @@ class ResourceLoader {
                        }
                }
 
+               // Send content type and cache related headers
+               $this->sendResponseHeaders( $context, $mtime, $this->hasErrors );
+
                // Remove the output buffer and output the response
                ob_end_clean();
                echo $response;
@@ -526,13 +532,15 @@ class ResourceLoader {
         * Send content type and last modified headers to the client.
         * @param $context ResourceLoaderContext
         * @param $mtime string TS_MW timestamp to use for last-modified
+        * @param $error bool Whether there are commented-out errors in the response
         * @return void
         */
-       protected function sendResponseHeaders( ResourceLoaderContext $context, $mtime ) {
+       protected function sendResponseHeaders( ResourceLoaderContext $context, $mtime, $errors ) {
                global $wgResourceLoaderMaxage;
                // If a version wasn't specified we need a shorter expiry time for updates
                // to propagate to clients quickly
-               if ( is_null( $context->getVersion() ) ) {
+               // If there were errors, we also need a shorter expiry time so we can recover quickly
+               if ( is_null( $context->getVersion() ) || $errors ) {
                        $maxage  = $wgResourceLoaderMaxage['unversioned']['client'];
                        $smaxage = $wgResourceLoaderMaxage['unversioned']['server'];
                // If a version was specified we can use a longer expiry time since changing
@@ -680,6 +688,7 @@ class ResourceLoader {
                        } catch ( Exception $e ) {
                                // Add exception to the output as a comment
                                $exceptions .= $this->makeComment( $e->__toString() );
+                               $this->hasErrors = true;
                        }
                } else {
                        $blobs = array();
@@ -785,6 +794,7 @@ class ResourceLoader {
                        } catch ( Exception $e ) {
                                // Add exception to the output as a comment
                                $exceptions .= $this->makeComment( $e->__toString() );
+                               $this->hasErrors = true;
 
                                // Register module as missing
                                $missing[] = $name;
index ffa3046..9904107 100644 (file)
@@ -170,7 +170,7 @@ class ResourceLoaderFileModule extends ResourceLoaderModule {
         *         // Scripts to include in the startup module
         *         'loaderScripts' => [file path string or array of file path strings],
         *         // Modules which must be loaded before this module
-        *         'dependencies' => [modile name string or array of module name strings],
+        *         'dependencies' => [module name string or array of module name strings],
         *         // Styles to always load
         *         'styles' => [file path string or array of file path strings],
         *         // Styles to include in specific skin contexts
@@ -312,15 +312,19 @@ class ResourceLoaderFileModule extends ResourceLoaderModule {
                // Collect referenced files
                $this->localFileRefs = array_unique( $this->localFileRefs );
                // If the list has been modified since last time we cached it, update the cache
-               if ( $this->localFileRefs !== $this->getFileDependencies( $context->getSkin() ) && !wfReadOnly() ) {
-                       $dbw = wfGetDB( DB_MASTER );
-                       $dbw->replace( 'module_deps',
-                               array( array( 'md_module', 'md_skin' ) ), array(
-                                       'md_module' => $this->getName(),
-                                       'md_skin' => $context->getSkin(),
-                                       'md_deps' => FormatJson::encode( $this->localFileRefs ),
-                               )
-                       );
+               try {
+                       if ( $this->localFileRefs !== $this->getFileDependencies( $context->getSkin() ) ) {
+                               $dbw = wfGetDB( DB_MASTER );
+                               $dbw->replace( 'module_deps',
+                                       array( array( 'md_module', 'md_skin' ) ), array(
+                                               'md_module' => $this->getName(),
+                                               'md_skin' => $context->getSkin(),
+                                               'md_deps' => FormatJson::encode( $this->localFileRefs ),
+                                       )
+                               );
+                       }
+               } catch ( Exception $e ) {
+                       wfDebug( __METHOD__ . " failed to update DB: $e\n" );
                }
                return $styles;
        }
@@ -437,9 +441,9 @@ class ResourceLoaderFileModule extends ResourceLoaderModule {
                        return $this->modifiedTime[$context->getHash()] = 1;
                }
 
-               wfProfileIn( __METHOD__.'-filemtime' );
+               wfProfileIn( __METHOD__ . '-filemtime' );
                $filesMtime = max( array_map( array( __CLASS__, 'safeFilemtime' ), $files ) );
-               wfProfileOut( __METHOD__.'-filemtime' );
+               wfProfileOut( __METHOD__ . '-filemtime' );
                $this->modifiedTime[$context->getHash()] = max(
                        $filesMtime,
                        $this->getMsgBlobMtime( $context->getLanguage() ) );
@@ -567,7 +571,7 @@ class ResourceLoaderFileModule extends ResourceLoaderModule {
                foreach ( array_unique( $scripts ) as $fileName ) {
                        $localPath = $this->getLocalPath( $fileName );
                        if ( !file_exists( $localPath ) ) {
-                               throw new MWException( __METHOD__.": script file not found: \"$localPath\"" );
+                               throw new MWException( __METHOD__ . ": script file not found: \"$localPath\"" );
                        }
                        $contents = file_get_contents( $localPath );
                        if ( $wgResourceLoaderValidateStaticJS ) {
@@ -624,7 +628,7 @@ class ResourceLoaderFileModule extends ResourceLoaderModule {
        protected function readStyleFile( $path, $flip ) {
                $localPath = $this->getLocalPath( $path );
                if ( !file_exists( $localPath ) ) {
-                       $msg = __METHOD__.": style file not found: \"$localPath\"";
+                       $msg = __METHOD__ . ": style file not found: \"$localPath\"";
                        wfDebugLog( 'resourceloader', $msg );
                        throw new MWException( $msg );
                }
@@ -649,23 +653,6 @@ class ResourceLoaderFileModule extends ResourceLoaderModule {
                );
        }
 
-       /**
-        * Safe version of filemtime(), which doesn't throw a PHP warning if the file doesn't exist
-        * but returns 1 instead.
-        * @param $filename string File name
-        * @return int UNIX timestamp, or 1 if the file doesn't exist
-        */
-       protected static function safeFilemtime( $filename ) {
-               if ( file_exists( $filename ) ) {
-                       return filemtime( $filename );
-               } else {
-                       // We only ever map this function on an array if we're gonna call max() after,
-                       // so return our standard minimum timestamps here. This is 1, not 0, because
-                       // wfTimestamp(0) == NOW
-                       return 1;
-               }
-       }
-
        /**
         * Get whether CSS for this module should be flipped
         * @param $context ResourceLoaderContext
index c916c4a..9679a59 100644 (file)
@@ -28,6 +28,7 @@
 class ResourceLoaderLanguageDataModule extends ResourceLoaderModule {
 
        protected $language;
+       protected $targets = array( 'desktop', 'mobile' );
        /**
         * Get the grammar forms for the site content language.
         *
index 0e170fb..e4ae0a2 100644 (file)
@@ -58,6 +58,7 @@ abstract class ResourceLoaderModule {
        /* Protected Members */
 
        protected $name = null;
+       protected $targets = array( 'desktop' );
 
        // In-object cache for file dependencies
        protected $fileDeps = array();
@@ -289,6 +290,15 @@ abstract class ResourceLoaderModule {
                return array();
        }
 
+       /**
+        * Get target(s) for the module, eg ['desktop'] or ['desktop', 'mobile']
+        *
+        * @return array of strings
+        */
+       public function getTargets() {
+               return $this->targets;
+       }
+
        /**
         * Get the files this module depends on indirectly for a given skin.
         * Currently these are only image files referenced by the module's CSS.
@@ -451,12 +461,19 @@ abstract class ResourceLoaderModule {
        }
 
        /**
-        * Get target(s) for the module, eg ['desktop'] or ['desktop', 'mobile']
-        * Default implementation hardcodes 'desktop'.
-        *
-        * @return array of strings
+        * Safe version of filemtime(), which doesn't throw a PHP warning if the file doesn't exist
+        * but returns 1 instead.
+        * @param $filename string File name
+        * @return int UNIX timestamp, or 1 if the file doesn't exist
         */
-       public function getTargets() {
-               return array( 'desktop' );
+       protected static function safeFilemtime( $filename ) {
+               if ( file_exists( $filename ) ) {
+                       return filemtime( $filename );
+               } else {
+                       // We only ever map this function on an array if we're gonna call max() after,
+                       // so return our standard minimum timestamps here. This is 1, not 0, because
+                       // wfTimestamp(0) == NOW
+                       return 1;
+               }
        }
 }
index 1d36911..32cf6b2 100644 (file)
@@ -224,7 +224,7 @@ class ResourceLoaderStartUpModule extends ResourceLoaderModule {
                                "};\n";
 
                        // Conditional script injection
-                       $scriptTag = Html::linkedScript( $wgLoadScript . '?' . wfArrayToCGI( $query ) );
+                       $scriptTag = Html::linkedScript( $wgLoadScript . '?' . wfArrayToCgi( $query ) );
                        $out .= "if ( isCompatible() ) {\n" .
                                "\t" . Xml::encodeJsCall( 'document.write', array( $scriptTag ) ) .
                                "}\n" .
index 1e61a3e..4ea9f4e 100644 (file)
@@ -42,7 +42,20 @@ abstract class ResourceLoaderWikiModule extends ResourceLoaderModule {
        /* Abstract Protected Methods */
 
        /**
+        * Subclasses should return an associative array of resources in the module.
+        * Keys should be the title of a page in the MediaWiki or User namespace.
+        *
+        * Values should be a nested array of options.  The supported keys are 'type' and
+        * (CSS only) 'media'.
+        *
+        * For scripts, 'type' should be 'script'.
+        *
+        * For stylesheets, 'type' should be 'style'.
+        * There is an optional media key, the value of which can be the
+        * medium ('screen', 'print', etc.) of the stylesheet.
+        *
         * @param $context ResourceLoaderContext
+        * @return array
         */
        abstract protected function getPages( ResourceLoaderContext $context );
 
@@ -134,7 +147,7 @@ abstract class ResourceLoaderWikiModule extends ResourceLoaderModule {
                                continue;
                        }
                        $title = Title::newFromText( $titleText );
-                       if ( !$title || $title->isRedirect()  ) {
+                       if ( !$title || $title->isRedirect() ) {
                                continue;
                        }
                        $media = isset( $options['media'] ) ? $options['media'] : 'all';
index 6ceadff..5340cb9 100644 (file)
@@ -424,7 +424,7 @@ class RevDel_ArchivedRevisionItem extends RevDel_ArchiveItem {
                $dbw->update( 'archive',
                        array( 'ar_deleted' => $bits ),
                        array( 'ar_rev_id' => $this->row->ar_rev_id,
-                                  'ar_deleted' => $this->getBits()
+                               'ar_deleted' => $this->getBits()
                        ),
                        __METHOD__ );
                return (bool)$dbw->affectedRows();
@@ -899,7 +899,7 @@ class RevDel_LogItem extends RevDel_Item {
                $action = $formatter->getActionText();
                // Comment
                $comment = $this->list->getLanguage()->getDirMark() . Linker::commentBlock( $this->row->log_comment );
-               if( LogEventsList::isDeleted($this->row,LogPage::DELETED_COMMENT) ) {
+               if( LogEventsList::isDeleted( $this->row, LogPage::DELETED_COMMENT ) ) {
                        $comment = '<span class="history-deleted">' . $comment . '</span>';
                }
 
index 0199edb..5e5755c 100644 (file)
@@ -45,7 +45,7 @@ class SearchEngine {
         */
        protected $db;
 
-       function __construct($db = null) {
+       function __construct( $db = null ) {
                if ( $db ) {
                        $this->db = $db;
                } else {
@@ -183,7 +183,7 @@ class SearchEngine {
 
                        # Exact match? No need to look further.
                        $title = Title::newFromText( $term );
-                       if ( is_null( $title ) ){
+                       if ( is_null( $title ) ) {
                                return null;
                        }
 
@@ -1142,8 +1142,8 @@ class SearchHighlighter {
                                // add more lines
                                $add = $index + 1;
                                while ( $len < $targetchars - 20
-                                          && array_key_exists( $add, $all )
-                                          && !array_key_exists( $add, $snippets ) ) {
+                                               && array_key_exists( $add, $all )
+                                               && !array_key_exists( $add, $snippets ) ) {
                                        $offsets[$add] = 0;
                                        $tt = "\n" . $this->extract( $all[$add], 0, $targetchars - $len, $offsets[$add] );
                                        $extended[$add] = $tt;
@@ -1153,7 +1153,7 @@ class SearchHighlighter {
                        }
                }
 
-               // $snippets = array_map('htmlspecialchars', $extended);
+               // $snippets = array_map( 'htmlspecialchars', $extended );
                $snippets = $extended;
                $last = - 1;
                $extract = '';
@@ -1243,7 +1243,7 @@ class SearchHighlighter {
                        $posEnd = $end;
                }
 
-               if ( $end > $start )  {
+               if ( $end > $start ) {
                        return substr( $text, $start, $end - $start );
                } else {
                        return '';
@@ -1332,12 +1332,12 @@ class SearchHighlighter {
                $fname = __METHOD__;
                wfProfileIn( $fname );
 
-               // $text = preg_replace("/'{2,5}/", "", $text);
-               // $text = preg_replace("/\[[a-z]+:\/\/[^ ]+ ([^]]+)\]/", "\\2", $text);
-               // $text = preg_replace("/\[\[([^]|]+)\]\]/", "\\1", $text);
-               // $text = preg_replace("/\[\[([^]]+\|)?([^|]]+)\]\]/", "\\2", $text);
-               // $text = preg_replace("/\\{\\|(.*?)\\|\\}/", "", $text);
-               // $text = preg_replace("/\\[\\[[A-Za-z_-]+:([^|]+?)\\]\\]/", "", $text);
+               // $text = preg_replace( "/'{2,5}/", "", $text );
+               // $text = preg_replace( "/\[[a-z]+:\/\/[^ ]+ ([^]]+)\]/", "\\2", $text );
+               // $text = preg_replace( "/\[\[([^]|]+)\]\]/", "\\1", $text );
+               // $text = preg_replace( "/\[\[([^]]+\|)?([^|]]+)\]\]/", "\\2", $text );
+               // $text = preg_replace( "/\\{\\|(.*?)\\|\\}/", "", $text );
+               // $text = preg_replace( "/\\[\\[[A-Za-z_-]+:([^|]+?)\\]\\]/", "", $text );
                $text = preg_replace( "/\\{\\{([^|]+?)\\}\\}/", "", $text );
                $text = preg_replace( "/\\{\\{([^|]+\\|)(.*?)\\}\\}/", "\\2", $text );
                $text = preg_replace( "/\\[\\[([^|]+?)\\]\\]/", "\\1", $text );
@@ -1419,8 +1419,7 @@ class SearchHighlighter {
 
                        $line = htmlspecialchars( $pre . $found . $post );
                        $pat2 = '/(' . $terms . ")/i";
-                       $line = preg_replace( $pat2,
-                         "<span class='searchmatch'>\\1</span>", $line );
+                       $line = preg_replace( $pat2, "<span class='searchmatch'>\\1</span>", $line );
 
                        $extract .= "${line}\n";
                }
index 368d900..ebc9d5a 100644 (file)
@@ -34,7 +34,7 @@ class SearchIBM_DB2 extends SearchEngine {
         * Creates an instance of this class
         * @param $db DatabaseIbm_db2: database object
         */
-       function __construct($db) {
+       function __construct( $db ) {
                parent::__construct( $db );
        }
 
@@ -45,8 +45,8 @@ class SearchIBM_DB2 extends SearchEngine {
         * @return SqlSearchResultSet
         */
        function searchText( $term ) {
-               $resultSet = $this->db->resultObject($this->db->query($this->getQuery($this->filter($term), true)));
-               return new SqlSearchResultSet($resultSet, $this->searchTerms);
+               $resultSet = $this->db->resultObject( $this->db->query( $this->getQuery( $this->filter( $term ), true ) ) );
+               return new SqlSearchResultSet( $resultSet, $this->searchTerms );
        }
 
        /**
@@ -55,9 +55,9 @@ class SearchIBM_DB2 extends SearchEngine {
         * @param $term String: taw search term
         * @return SqlSearchResultSet
         */
-       function searchTitle($term) {
-               $resultSet = $this->db->resultObject($this->db->query($this->getQuery($this->filter($term), false)));
-               return new SqlSearchResultSet($resultSet, $this->searchTerms);
+       function searchTitle( $term ) {
+               $resultSet = $this->db->resultObject( $this->db->query( $this->getQuery( $this->filter( $term ), false ) ) );
+               return new SqlSearchResultSet( $resultSet, $this->searchTerms );
        }
 
 
@@ -66,7 +66,7 @@ class SearchIBM_DB2 extends SearchEngine {
         * @return String
         */
        function queryRedirect() {
-               if ($this->showRedirects) {
+               if ( $this->showRedirects ) {
                        return '';
                } else {
                        return 'AND page_is_redirect=0';
@@ -78,10 +78,10 @@ class SearchIBM_DB2 extends SearchEngine {
         * @return String
         */
        function queryNamespaces() {
-               if( is_null($this->namespaces) )
+               if( is_null( $this->namespaces ) )
                        return '';
-               $namespaces = implode(',', $this->namespaces);
-               if ($namespaces == '') {
+               $namespaces = implode( ',', $this->namespaces );
+               if ( $namespaces == '' ) {
                        $namespaces = '0';
                }
                return 'AND page_namespace IN (' . $namespaces . ')';
@@ -92,7 +92,7 @@ class SearchIBM_DB2 extends SearchEngine {
         * @return String
         */
        function queryLimit( $sql ) {
-               return $this->db->limitResult($sql, $this->limit, $this->offset);
+               return $this->db->limitResult( $sql, $this->limit, $this->offset );
        }
 
        /**
@@ -100,7 +100,7 @@ class SearchIBM_DB2 extends SearchEngine {
         * subclasses may define this though
         * @return String
         */
-       function queryRanking($filteredTerm, $fulltext) {
+       function queryRanking( $filteredTerm, $fulltext ) {
                // requires Net Search Extender or equivalent
                // return ' ORDER BY score(1)';
                return '';
@@ -114,10 +114,10 @@ class SearchIBM_DB2 extends SearchEngine {
         * @return String
         */
        function getQuery( $filteredTerm, $fulltext ) {
-               return $this->queryLimit($this->queryMain($filteredTerm, $fulltext) . ' ' .
+               return $this->queryLimit( $this->queryMain( $filteredTerm, $fulltext ) . ' ' .
                        $this->queryRedirect() . ' ' .
                        $this->queryNamespaces() . ' ' .
-                       $this->queryRanking( $filteredTerm, $fulltext ) . ' ');
+                       $this->queryRanking( $filteredTerm, $fulltext ) . ' ' );
        }
 
 
@@ -126,7 +126,7 @@ class SearchIBM_DB2 extends SearchEngine {
         * @param $fulltext Boolean
         * @return String
         */
-       function getIndexField($fulltext) {
+       function getIndexField( $fulltext ) {
                return $fulltext ? 'si_text' : 'si_title';
        }
 
@@ -138,9 +138,9 @@ class SearchIBM_DB2 extends SearchEngine {
         * @return String
         */
        function queryMain( $filteredTerm, $fulltext ) {
-               $match = $this->parseQuery($filteredTerm, $fulltext);
-               $page        = $this->db->tableName('page');
-               $searchindex = $this->db->tableName('searchindex');
+               $match = $this->parseQuery( $filteredTerm, $fulltext );
+               $page = $this->db->tableName( 'page' );
+               $searchindex = $this->db->tableName( 'searchindex' );
                return 'SELECT page_id, page_namespace, page_title ' .
                        "FROM $page,$searchindex " .
                        'WHERE page_id=si_page AND ' . $match;
@@ -149,7 +149,7 @@ class SearchIBM_DB2 extends SearchEngine {
        /** @todo document
         * @return string
         */
-       function parseQuery($filteredText, $fulltext) {
+       function parseQuery( $filteredText, $fulltext ) {
                global $wgContLang;
                $lc = SearchEngine::legalSearchChars();
                $this->searchTerms = array();
@@ -158,9 +158,9 @@ class SearchIBM_DB2 extends SearchEngine {
                $m = array();
                $q = array();
 
-               if (preg_match_all('/([-+<>~]?)(([' . $lc . ']+)(\*?)|"[^"]*")/',
-                         $filteredText, $m, PREG_SET_ORDER)) {
-                       foreach($m as $terms) {
+               if ( preg_match_all( '/([-+<>~]?)(([' . $lc . ']+)(\*?)|"[^"]*")/',
+                               $filteredText, $m, PREG_SET_ORDER ) ) {
+                       foreach( $m as $terms ) {
 
                                // Search terms in all variant forms, only
                                // apply on wiki with LanguageConverter
@@ -173,19 +173,19 @@ class SearchIBM_DB2 extends SearchEngine {
                                else
                                        $q[] = $terms[1] . $wgContLang->normalizeForSearch( $terms[2] );
 
-                               if (!empty($terms[3])) {
+                               if ( !empty( $terms[3] ) ) {
                                        $regexp = preg_quote( $terms[3], '/' );
-                                       if ($terms[4])
+                                       if ( $terms[4] )
                                                $regexp .= "[0-9A-Za-z_]+";
                                } else {
-                                       $regexp = preg_quote(str_replace('"', '', $terms[2]), '/');
+                                       $regexp = preg_quote(str_replace( '"', '', $terms[2]), '/' );
                                }
                                $this->searchTerms[] = $regexp;
                        }
                }
 
-               $searchon = $this->db->strencode(join(',', $q));
-               $field = $this->getIndexField($fulltext);
+               $searchon = $this->db->strencode( join( ',', $q ) );
+               $field = $this->getIndexField( $fulltext );
 
                // requires Net Search Extender or equivalent
                //return " CONTAINS($field, '$searchon') > 0 ";
@@ -201,18 +201,18 @@ class SearchIBM_DB2 extends SearchEngine {
         * @param $title String
         * @param $text String
         */
-       function update($id, $title, $text) {
-               $dbw = wfGetDB(DB_MASTER);
-               $dbw->replace('searchindex',
-                       array('si_page'),
+       function update( $id, $title, $text ) {
+               $dbw = wfGetDB( DB_MASTER );
+               $dbw->replace( 'searchindex',
+                       array( 'si_page' ),
                        array(
                                'si_page' => $id,
                                'si_title' => $title,
                                'si_text' => $text
                        ), 'SearchIBM_DB2::update' );
                // ?
-               //$dbw->query("CALL ctx_ddl.sync_index('si_text_idx')");
-               //$dbw->query("CALL ctx_ddl.sync_index('si_title_idx')");
+               //$dbw->query( "CALL ctx_ddl.sync_index('si_text_idx')" );
+               //$dbw->query( "CALL ctx_ddl.sync_index('si_title_idx')" );
        }
 
        /**
@@ -222,13 +222,13 @@ class SearchIBM_DB2 extends SearchEngine {
         * @param $id Integer
         * @param $title String
         */
-       function updateTitle($id, $title) {
-               $dbw = wfGetDB(DB_MASTER);
+       function updateTitle( $id, $title ) {
+               $dbw = wfGetDB( DB_MASTER );
 
-               $dbw->update('searchindex',
-                       array('si_title' => $title),
-                       array('si_page'  => $id),
+               $dbw->update( 'searchindex',
+                       array( 'si_title' => $title ),
+                       array( 'si_page'  => $id ),
                        'SearchIBM_DB2::updateTitle',
-                       array());
+                       array() );
        }
 }
index 23dd479..85fe148 100644 (file)
@@ -253,5 +253,3 @@ class MssqlSearchResultSet extends SearchResultSet {
                return new SearchResult( $row );
        }
 }
-
-
index 5cee03e..a76662b 100644 (file)
@@ -58,7 +58,7 @@ class SearchMySQL extends SearchEngine {
                # @todo FIXME: This doesn't handle parenthetical expressions.
                $m = array();
                if( preg_match_all( '/([-+<>~]?)(([' . $lc . ']+)(\*?)|"[^"]*")/',
-                         $filteredText, $m, PREG_SET_ORDER ) ) {
+                               $filteredText, $m, PREG_SET_ORDER ) ) {
                        foreach( $m as $bits ) {
                                @list( /* all */, $modifier, $term, $nonQuoted, $wildcard ) = $bits;
 
@@ -221,7 +221,7 @@ class SearchMySQL extends SearchEngine {
         */
        protected function queryFeatures( &$query ) {
                foreach ( $this->features as $feature => $value ) {
-                       if ( $feature ===  'list-redirects' && !$value ) {
+                       if ( $feature === 'list-redirects' && !$value ) {
                                $query['conds']['page_is_redirect'] = 0;
                        } elseif( $feature === 'title-suffix-filter' && $value ) {
                                $query['conds'][] = 'page_title' . $this->db->buildLike( $this->db->anyString(), $value );
index 29070e1..009502b 100644 (file)
@@ -61,7 +61,7 @@ class SearchOracle extends SearchEngine {
         * Creates an instance of this class
         * @param $db DatabasePostgres: database object
         */
-       function __construct($db) {
+       function __construct( $db ) {
                parent::__construct( $db );
        }
 
@@ -72,11 +72,11 @@ class SearchOracle extends SearchEngine {
         * @return SqlSearchResultSet
         */
        function searchText( $term ) {
-               if ($term == '')
-                       return new SqlSearchResultSet(false, '');
+               if ( $term == '' )
+                       return new SqlSearchResultSet( false, '' );
 
-               $resultSet = $this->db->resultObject($this->db->query($this->getQuery($this->filter($term), true)));
-               return new SqlSearchResultSet($resultSet, $this->searchTerms);
+               $resultSet = $this->db->resultObject( $this->db->query( $this->getQuery( $this->filter( $term ), true ) ) );
+               return new SqlSearchResultSet( $resultSet, $this->searchTerms );
        }
 
        /**
@@ -85,12 +85,12 @@ class SearchOracle extends SearchEngine {
         * @param $term String: raw search term
         * @return SqlSearchResultSet
         */
-       function searchTitle($term) {
-               if ($term == '')
-                       return new SqlSearchResultSet(false, '');
+       function searchTitle( $term ) {
+               if ( $term == '' )
+                       return new SqlSearchResultSet( false, '' );
 
-               $resultSet = $this->db->resultObject($this->db->query($this->getQuery($this->filter($term), false)));
-               return new MySQLSearchResultSet($resultSet, $this->searchTerms);
+               $resultSet = $this->db->resultObject( $this->db->query( $this->getQuery( $this->filter( $term ), false ) ) );
+               return new MySQLSearchResultSet( $resultSet, $this->searchTerms );
        }
 
 
@@ -99,7 +99,7 @@ class SearchOracle extends SearchEngine {
         * @return String
         */
        function queryRedirect() {
-               if ($this->showRedirects) {
+               if ( $this->showRedirects ) {
                        return '';
                } else {
                        return 'AND page_is_redirect=0';
@@ -111,7 +111,7 @@ class SearchOracle extends SearchEngine {
         * @return String
         */
        function queryNamespaces() {
-               if( is_null($this->namespaces) )
+               if( is_null( $this->namespaces ) )
                        return '';
                if ( !count( $this->namespaces ) ) {
                        $namespaces = '0';
@@ -129,7 +129,7 @@ class SearchOracle extends SearchEngine {
         * @return String
         */
        function queryLimit( $sql ) {
-               return $this->db->limitResult($sql, $this->limit, $this->offset);
+               return $this->db->limitResult( $sql, $this->limit, $this->offset );
        }
 
        /**
@@ -150,10 +150,10 @@ class SearchOracle extends SearchEngine {
         * @return String
         */
        function getQuery( $filteredTerm, $fulltext ) {
-               return $this->queryLimit($this->queryMain($filteredTerm, $fulltext) . ' ' .
+               return $this->queryLimit( $this->queryMain( $filteredTerm, $fulltext ) . ' ' .
                        $this->queryRedirect() . ' ' .
                        $this->queryNamespaces() . ' ' .
-                       $this->queryRanking( $filteredTerm, $fulltext ) . ' ');
+                       $this->queryRanking( $filteredTerm, $fulltext ) . ' ' );
        }
 
 
@@ -162,7 +162,7 @@ class SearchOracle extends SearchEngine {
         * @param $fulltext Boolean
         * @return String
         */
-       function getIndexField($fulltext) {
+       function getIndexField( $fulltext ) {
                return $fulltext ? 'si_text' : 'si_title';
        }
 
@@ -174,9 +174,9 @@ class SearchOracle extends SearchEngine {
         * @return String
         */
        function queryMain( $filteredTerm, $fulltext ) {
-               $match = $this->parseQuery($filteredTerm, $fulltext);
-               $page        = $this->db->tableName('page');
-               $searchindex = $this->db->tableName('searchindex');
+               $match = $this->parseQuery( $filteredTerm, $fulltext );
+               $page = $this->db->tableName( 'page' );
+               $searchindex = $this->db->tableName( 'searchindex' );
                return 'SELECT page_id, page_namespace, page_title ' .
                        "FROM $page,$searchindex " .
                        'WHERE page_id=si_page AND ' . $match;
@@ -187,7 +187,7 @@ class SearchOracle extends SearchEngine {
         * as part of a WHERE clause
         * @return string
         */
-       function parseQuery($filteredText, $fulltext) {
+       function parseQuery( $filteredText, $fulltext ) {
                global $wgContLang;
                $lc = SearchEngine::legalSearchChars();
                $this->searchTerms = array();
@@ -195,9 +195,9 @@ class SearchOracle extends SearchEngine {
                # @todo FIXME: This doesn't handle parenthetical expressions.
                $m = array();
                $searchon = '';
-               if (preg_match_all('/([-+<>~]?)(([' . $lc . ']+)(\*?)|"[^"]*")/',
-                         $filteredText, $m, PREG_SET_ORDER)) {
-                       foreach($m as $terms) {
+               if ( preg_match_all( '/([-+<>~]?)(([' . $lc . ']+)(\*?)|"[^"]*")/',
+                               $filteredText, $m, PREG_SET_ORDER ) ) {
+                       foreach( $m as $terms ) {
                                // Search terms in all variant forms, only
                                // apply on wiki with LanguageConverter
                                $temp_terms = $wgContLang->autoConvertToAllVariants( $terms[2] );
@@ -210,27 +210,27 @@ class SearchOracle extends SearchEngine {
                                else {
                                        $searchon .= ($terms[1] == '-' ? ' ~' : ' & ') . $this->escapeTerm( $terms[2] );
                                }
-                               if (!empty($terms[3])) {
+                               if ( !empty( $terms[3] ) ) {
                                        $regexp = preg_quote( $terms[3], '/' );
-                                       if ($terms[4])
+                                       if ( $terms[4] )
                                                $regexp .= "[0-9A-Za-z_]+";
                                } else {
-                                       $regexp = preg_quote(str_replace('"', '', $terms[2]), '/');
+                                       $regexp = preg_quote( str_replace( '"', '', $terms[2] ), '/' );
                                }
                                $this->searchTerms[] = $regexp;
                        }
                }
 
 
-               $searchon = $this->db->addQuotes(ltrim($searchon, ' &'));
-               $field = $this->getIndexField($fulltext);
+               $searchon = $this->db->addQuotes( ltrim( $searchon, ' &' ) );
+               $field = $this->getIndexField( $fulltext );
                return " CONTAINS($field, $searchon, 1) > 0 ";
        }
 
-       private function escapeTerm($t) {
+       private function escapeTerm( $t ) {
                global $wgContLang;
-               $t = $wgContLang->normalizeForSearch($t);
-               $t = isset($this->reservedWords[strtoupper($t)]) ? '{'.$t.'}' : $t;
+               $t = $wgContLang->normalizeForSearch( $t );
+               $t = isset( $this->reservedWords[strtoupper( $t )] ) ? '{'.$t.'}' : $t;
                $t = preg_replace('/^"(.*)"$/', '($1)', $t);
                $t = preg_replace('/([-&|])/', '\\\\$1', $t);
                return $t;
@@ -243,10 +243,10 @@ class SearchOracle extends SearchEngine {
         * @param $title String
         * @param $text String
         */
-       function update($id, $title, $text) {
-               $dbw = wfGetDB(DB_MASTER);
-               $dbw->replace('searchindex',
-                       array('si_page'),
+       function update( $id, $title, $text ) {
+               $dbw = wfGetDB( DB_MASTER );
+               $dbw->replace( 'searchindex',
+                       array( 'si_page' ),
                        array(
                                'si_page' => $id,
                                'si_title' => $title,
@@ -271,14 +271,14 @@ class SearchOracle extends SearchEngine {
         * @param $id Integer
         * @param $title String
         */
-       function updateTitle($id, $title) {
-               $dbw = wfGetDB(DB_MASTER);
+       function updateTitle( $id, $title ) {
+               $dbw = wfGetDB( DB_MASTER );
 
-               $dbw->update('searchindex',
-                       array('si_title' => $title),
-                       array('si_page'  => $id),
+               $dbw->update( 'searchindex',
+                       array( 'si_title' => $title ),
+                       array( 'si_page'  => $id ),
                        'SearchOracle::updateTitle',
-                       array());
+                       array() );
        }
 
 
index 6864889..727cc16 100644 (file)
@@ -51,11 +51,11 @@ class SearchPostgres extends SearchEngine {
         * @return PostgresSearchResultSet
         */
        function searchTitle( $term ) {
-               $q = $this->searchQuery( $term , 'titlevector', 'page_title' );
-               $olderror = error_reporting(E_ERROR);
+               $q = $this->searchQuery( $term, 'titlevector', 'page_title' );
+               $olderror = error_reporting( E_ERROR );
                $resultSet = $this->db->resultObject( $this->db->query( $q, 'SearchPostgres', true ) );
-               error_reporting($olderror);
-               if (!$resultSet) {
+               error_reporting( $olderror );
+               if ( !$resultSet ) {
                        // Needed for "Query requires full scan, GIN doesn't support it"
                        return new SearchResultTooMany();
                }
@@ -66,8 +66,8 @@ class SearchPostgres extends SearchEngine {
                $q = $this->searchQuery( $term, 'textvector', 'old_text' );
                $olderror = error_reporting(E_ERROR);
                $resultSet = $this->db->resultObject( $this->db->query( $q, 'SearchPostgres', true ) );
-               error_reporting($olderror);
-               if (!$resultSet) {
+               error_reporting( $olderror );
+               if ( !$resultSet ) {
                        return new SearchResultTooMany();
                }
                return new PostgresSearchResultSet( $resultSet, $this->searchTerms );
@@ -99,16 +99,16 @@ class SearchPostgres extends SearchEngine {
                $m = array();
                if( preg_match_all('/([-!]?)(\S+)\s*/', $term, $m, PREG_SET_ORDER ) ) {
                        foreach( $m as $terms ) {
-                               if (strlen($terms[1])) {
+                               if ( strlen( $terms[1] ) ) {
                                        $searchstring .= ' & !';
                                }
-                               if (strtolower($terms[2]) === 'and') {
+                               if ( strtolower( $terms[2] ) === 'and' ) {
                                        $searchstring .= ' & ';
                                }
-                               elseif (strtolower($terms[2]) === 'or' or $terms[2] === '|') {
+                               elseif ( strtolower( $terms[2] ) === 'or' or $terms[2] === '|' ) {
                                        $searchstring .= ' | ';
                                }
-                               elseif (strtolower($terms[2]) === 'not') {
+                               elseif ( strtolower( $terms[2] ) === 'not' ) {
                                        $searchstring .= ' & !';
                                }
                                else {
@@ -133,7 +133,7 @@ class SearchPostgres extends SearchEngine {
                $searchstring = preg_replace('/^[\'"](.*)[\'"]$/', "$1", $searchstring);
 
                ## Quote the whole thing
-               $searchstring = $this->db->addQuotes($searchstring);
+               $searchstring = $this->db->addQuotes( $searchstring );
 
                wfDebug( "parseQuery returned: $searchstring \n" );
 
@@ -154,15 +154,15 @@ class SearchPostgres extends SearchEngine {
 
                ## We need a separate query here so gin does not complain about empty searches
                $SQL = "SELECT to_tsquery($searchstring)";
-               $res = $this->db->query($SQL);
-               if (!$res) {
+               $res = $this->db->query( $SQL );
+               if ( !$res ) {
                        ## TODO: Better output (example to catch: one 'two)
-                       die ("Sorry, that was not a valid search string. Please go back and try again");
+                       die( "Sorry, that was not a valid search string. Please go back and try again" );
                }
                $top = $res->fetchRow();
                $top = $top[0];
 
-               if ($top === "") { ## e.g. if only stopwords are used XXX return something better
+               if ( $top === "" ) { ## e.g. if only stopwords are used XXX return something better
                        $query = "SELECT page_id, page_namespace, page_title, 0 AS score ".
                                "FROM page p, revision r, pagecontent c WHERE p.page_latest = r.rev_id " .
                                "AND r.rev_text_id = c.old_id AND 1=0";
@@ -182,14 +182,14 @@ class SearchPostgres extends SearchEngine {
                }
 
                ## Redirects
-               if (! $this->showRedirects)
+               if ( !$this->showRedirects )
                        $query .= ' AND page_is_redirect = 0';
 
                ## Namespaces - defaults to 0
-               if( !is_null($this->namespaces) ){ // null -> search all
-                       if ( count($this->namespaces) < 1)
+               if( !is_null( $this->namespaces ) ) { // null -> search all
+                       if ( count( $this->namespaces ) < 1 ) {
                                $query .= ' AND page_namespace = 0';
-                       else {
+                       else {
                                $namespaces = $this->db->makeList( $this->namespaces );
                                $query .= " AND page_namespace IN ($namespaces)";
                        }
@@ -211,7 +211,7 @@ class SearchPostgres extends SearchEngine {
                $SQL = "UPDATE pagecontent SET textvector = NULL WHERE old_id IN ".
                                "(SELECT rev_text_id FROM revision WHERE rev_page = " . intval( $pageid ) .
                                " ORDER BY rev_text_id DESC OFFSET 1)";
-               $this->db->query($SQL);
+               $this->db->query( $SQL );
                return true;
        }
 
@@ -226,7 +226,7 @@ class SearchPostgres extends SearchEngine {
  */
 class PostgresSearchResult extends SearchResult {
        function __construct( $row ) {
-               parent::__construct($row);
+               parent::__construct( $row );
                $this->score = $row->score;
        }
        function getScore() {
index e52e4fe..f91399a 100644 (file)
@@ -62,7 +62,7 @@ class SearchSqlite extends SearchEngine {
 
                $m = array();
                if( preg_match_all( '/([-+<>~]?)(([' . $lc . ']+)(\*?)|"[^"]*")/',
-                         $filteredText, $m, PREG_SET_ORDER ) ) {
+                               $filteredText, $m, PREG_SET_ORDER ) ) {
                        foreach( $m as $bits ) {
                                @list( /* all */, $modifier, $term, $nonQuoted, $wildcard ) = $bits;
 
@@ -214,7 +214,7 @@ class SearchSqlite extends SearchEngine {
         * @return String
         */
        function queryNamespaces() {
-               if( is_null($this->namespaces) )
+               if( is_null( $this->namespaces ) )
                        return '';  # search all
                if ( !count( $this->namespaces ) ) {
                        $namespaces = '0';
@@ -266,7 +266,7 @@ class SearchSqlite extends SearchEngine {
         */
        function queryMain( $filteredTerm, $fulltext ) {
                $match = $this->parseQuery( $filteredTerm, $fulltext );
-               $page        = $this->db->tableName( 'page' );
+               $page = $this->db->tableName( 'page' );
                $searchindex = $this->db->tableName( 'searchindex' );
                return "SELECT $searchindex.rowid, page_namespace, page_title " .
                        "FROM $page,$searchindex " .
@@ -317,7 +317,7 @@ class SearchSqlite extends SearchEngine {
         * @param $id Integer
         * @param $title String
         */
-    function updateTitle( $id, $title ) {
+       function updateTitle( $id, $title ) {
                if ( !$this->fulltextSearchSupported() ) {
                        return;
                }
index 40dd36c..eabcda3 100644 (file)
@@ -34,7 +34,12 @@ class SearchUpdate implements DeferrableUpdate {
        private $mTitleWords;
 
        function __construct( $id, $title, $text = false ) {
-               $nt = Title::newFromText( $title );
+               if ( is_string( $title ) ) {
+                       $nt = Title::newFromText( $title );
+               } else {
+                       $nt = $title;
+               }
+
                if( $nt ) {
                        $this->mId = $id;
                        $this->mText = $text;
@@ -74,7 +79,7 @@ class SearchUpdate implements DeferrableUpdate {
                $text = preg_replace( "/<\\/?\\s*[A-Za-z][^>]*?>/",
                        ' ', $wgContLang->lc( " " . $text . " " ) ); # Strip HTML markup
                $text = preg_replace( "/(^|\\n)==\\s*([^\\n]+)\\s*==(\\s)/sD",
-                 "\\1\\2 \\2 \\2\\3", $text ); # Emphasize headings
+                       "\\1\\2 \\2 \\2\\3", $text ); # Emphasize headings
 
                # Strip external URLs
                $uc = "A-Za-z0-9_\\/:.,~%\\-+&;#?!=()@\\x80-\\xFF";
@@ -92,7 +97,7 @@ class SearchUpdate implements DeferrableUpdate {
                $text = preg_replace( $pat2, " \\1 \\3", $text );
 
                $text = preg_replace( "/([^{$lc}])([{$lc}]+)]]([a-z]+)/",
-                 "\\1\\2 \\2\\3", $text ); # Handle [[game]]s
+                       "\\1\\2 \\2\\3", $text ); # Handle [[game]]s
 
                # Strip all remaining non-search characters
                $text = preg_replace( "/[^{$lc}]+/", " ", $text );
@@ -122,7 +127,7 @@ class SearchUpdate implements DeferrableUpdate {
                wfRunHooks( 'SearchUpdate', array( $this->mId, $this->mNamespace, $this->mTitle, &$text ) );
 
                # Perform the actual update
-               $search->update($this->mId, $search->normalizeText( Title::indexTitle( $this->mNamespace, $this->mTitle ) ),
+               $search->update( $this->mId, $search->normalizeText( Title::indexTitle( $this->mNamespace, $this->mTitle ) ),
                                $search->normalizeText( $text ) );
 
                wfProfileOut( __METHOD__ );
index b2e2e71..d4613aa 100644 (file)
  *
  * @ingroup Site
  */
-class MediaWikiSite extends SiteObject {
+class MediaWikiSite extends Site {
 
        const PATH_FILE = 'file_path';
        const PATH_PAGE = 'page_path';
 
        /**
         * @since 1.21
+        * @deprecated Just use the constructor or the factory Site::newForType
         *
         * @param integer $globalId
         *
         * @return MediaWikiSite
         */
        public static function newFromGlobalId( $globalId ) {
-               return SitesTable::singleton()->newRow( array(
-                       'type' => Site::TYPE_MEDIAWIKI,
-                       'global_key' => $globalId,
-               ), true );
+               $site = new static();
+               $site->setGlobalId( $globalId );
+               return $site;
+       }
+
+       /**
+        * Constructor.
+        *
+        * @since 1.21
+        *
+        * @param string $type
+        */
+       public function __construct( $type = self::TYPE_MEDIAWIKI ) {
+               parent::__construct( $type );
        }
 
        /**
@@ -167,7 +178,7 @@ class MediaWikiSite extends SiteObject {
         * @param array $externalData A reply from the API on a external server.
         * @param string $pageTitle Identifies the page at the external site, needing normalization.
         *
-        * @return array|false a 'page' structure representing the page identified by $pageTitle.
+        * @return array|boolean a 'page' structure representing the page identified by $pageTitle.
         */
        private static function extractPageRecord( $externalData, $pageTitle ) {
                // If there is a special case with only one returned page
@@ -290,16 +301,16 @@ class MediaWikiSite extends SiteObject {
        }
 
        /**
-        * @see Site::getPagePath
+        * @see Site::getPageUrl
         *
         * This implementation returns a URL constructed using the path returned by getLinkPath().
-        * In addition to the default behaviour implemented by SiteObject::getPageUrl(), this
+        * In addition to the default behaviour implemented by Site::getPageUrl(), this
         * method converts the $pageName to DBKey-format by replacing spaces with underscores
         * before using it in the URL.
         *
         * @since 1.21
         *
-        * @param $pagename string: Page name (default: false)
+        * @param string|boolean $pageName Page name or false (default: false)
         *
         * @return string
         */
@@ -325,7 +336,7 @@ class MediaWikiSite extends SiteObject {
         *
         * @since 1.21
         *
-        * @param string|false $path
+        * @param string|boolean $path
         *
         * @return string
         */
index 200a006..5394860 100644 (file)
@@ -1,7 +1,7 @@
 <?php
 
 /**
- * Interface for site objects.
+ * Represents a single site.
  *
  * 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
@@ -26,7 +26,7 @@
  * @license GNU GPL v2+
  * @author Jeroen De Dauw < jeroendedauw@gmail.com >
  */
-interface Site {
+class Site implements Serializable {
 
        const TYPE_UNKNOWN = 'unknown';
        const TYPE_MEDIAWIKI = 'mediawiki';
@@ -38,42 +38,140 @@ interface Site {
 
        const SOURCE_LOCAL = 'local';
 
+       const PATH_LINK = 'link';
+
+
        /**
-        * Returns the global site identifier (ie enwiktionary).
+        * A version ID that identifies the serialization structure used by getSerializationData()
+        * and unserialize(). This is useful for constructing cache keys in cases where the cache relies
+        * on serialization for storing the SiteList.
         *
+        * @var string A string uniquely identifying the version of the serialization structure.
+        */
+       const SERIAL_VERSION_ID = '2013-01-23';
+
+       /**
         * @since 1.21
         *
-        * @return string
+        * @var string|null
         */
-       public function getGlobalId();
+       protected $globalId = null;
 
        /**
-        * Sets the global site identifier (ie enwiktionary).
+        * @since 1.21
         *
+        * @var string
+        */
+       protected $type = self::TYPE_UNKNOWN;
+
+       /**
         * @since 1.21
         *
-        * @param string $globalId
+        * @var string
         */
-       public function setGlobalId( $globalId );
+       protected $group = self::GROUP_NONE;
 
        /**
-        * Returns the type of the site (ie mediawiki).
+        * @since 1.21
         *
+        * @var string
+        */
+       protected $source = self::SOURCE_LOCAL;
+
+       /**
         * @since 1.21
         *
-        * @return string
+        * @var string|null
+        */
+       protected $languageCode = null;
+
+       /**
+        * Holds the local ids for this site.
+        * local id type => [ ids for this type (strings) ]
+        *
+        * @since 1.21
+        *
+        * @var array[]
+        */
+       protected $localIds = array();
+
+       /**
+        * @since 1.21
+        *
+        * @var array
+        */
+       protected $extraData = array();
+
+       /**
+        * @since 1.21
+        *
+        * @var array
+        */
+       protected $extraConfig = array();
+
+       /**
+        * @since 1.21
+        *
+        * @var bool
         */
-       public function getType();
+       protected $forward = false;
 
        /**
-        * Sets the type of the site (ie mediawiki).
-        * TODO: remove, we cannot change this after instantiation
+        * @since 1.21
+        *
+        * @var int|null
+        */
+       protected $internalId = null;
+
+       /**
+        * Constructor.
         *
         * @since 1.21
         *
         * @param string $type
         */
-       public function setType( $type );
+       public function __construct( $type = self::TYPE_UNKNOWN ) {
+               $this->type = $type;
+       }
+
+       /**
+        * Returns the global site identifier (ie enwiktionary).
+        *
+        * @since 1.21
+        *
+        * @return string|null
+        */
+       public function getGlobalId() {
+               return $this->globalId;
+       }
+
+       /**
+        * Sets the global site identifier (ie enwiktionary).
+        *
+        * @since 1.21
+        *
+        * @param string|null $globalId
+        *
+        * @throws MWException
+        */
+       public function setGlobalId( $globalId ) {
+               if ( $globalId !== null && !is_string( $globalId ) ) {
+                       throw new MWException( '$globalId needs to be string or null' );
+               }
+
+               $this->globalId = $globalId;
+       }
+
+       /**
+        * Returns the type of the site (ie mediawiki).
+        *
+        * @since 1.21
+        *
+        * @return string
+        */
+       public function getType() {
+               return $this->type;
+       }
 
        /**
         * Gets the type of the site (ie wikipedia).
@@ -82,7 +180,9 @@ interface Site {
         *
         * @return string
         */
-       public function getGroup();
+       public function getGroup() {
+               return $this->group;
+       }
 
        /**
         * Sets the type of the site (ie wikipedia).
@@ -90,8 +190,16 @@ interface Site {
         * @since 1.21
         *
         * @param string $group
+        *
+        * @throws MWException
         */
-       public function setGroup( $group );
+       public function setGroup( $group ) {
+               if ( !is_string( $group ) ) {
+                       throw new MWException( '$group needs to be a string' );
+               }
+
+               $this->group = $group;
+       }
 
        /**
         * Returns the source of the site data (ie 'local', 'wikidata', 'my-magical-repo').
@@ -100,7 +208,9 @@ interface Site {
         *
         * @return string
         */
-       public function getSource();
+       public function getSource() {
+               return $this->source;
+       }
 
        /**
         * Sets the source of the site data (ie 'local', 'wikidata', 'my-magical-repo').
@@ -108,18 +218,46 @@ interface Site {
         * @since 1.21
         *
         * @param string $source
+        *
+        * @throws MWException
         */
-       public function setSource( $source );
+       public function setSource( $source ) {
+               if ( !is_string( $source ) ) {
+                       throw new MWException( '$source needs to be a string' );
+               }
+
+               $this->source = $source;
+       }
 
        /**
-        * Returns the protocol of the site, ie 'http://', 'irc://', '//'
-        * Or false if it's not known.
+        * Gets if site.tld/path/key:pageTitle should forward users to  the page on
+        * the actual site, where "key" is the local identifier.
         *
         * @since 1.21
         *
-        * @return string|false
+        * @return boolean
         */
-       public function getProtocol();
+       public function shouldForward() {
+               return $this->forward;
+       }
+
+       /**
+        * Sets if site.tld/path/key:pageTitle should forward users to  the page on
+        * the actual site, where "key" is the local identifier.
+        *
+        * @since 1.21
+        *
+        * @param boolean $shouldForward
+        *
+        * @throws MWException
+        */
+       public function setForward( $shouldForward ) {
+               if ( !is_bool( $shouldForward ) ) {
+                       throw new MWException( '$shouldForward needs to be a boolean' );
+               }
+
+               $this->forward = $shouldForward;
+       }
 
        /**
         * Returns the domain of the site, ie en.wikipedia.org
@@ -127,9 +265,95 @@ interface Site {
         *
         * @since 1.21
         *
-        * @return string|false
+        * @return string|null
+        */
+       public function getDomain() {
+               $path = $this->getLinkPath();
+
+               if ( $path === null ) {
+                       return null;
+               }
+
+               return parse_url( $path, PHP_URL_HOST );
+       }
+
+       /**
+        * Returns the protocol of the site.
+        *
+        * @since 1.21
+        *
+        * @throws MWException
+        * @return string
+        */
+       public function getProtocol() {
+               $path = $this->getLinkPath();
+
+               if ( $path === null ) {
+                       return '';
+               }
+
+               $protocol = parse_url( $path, PHP_URL_SCHEME );
+
+               // Malformed URL
+               if ( $protocol === false ) {
+                       throw new MWException( "failed to parse URL '$path'" );
+               }
+
+               // No schema
+               if ( $protocol === null ) {
+                       // Used for protocol relative URLs
+                       $protocol = '';
+               }
+
+               return $protocol;
+       }
+
+       /**
+        * Sets the path used to construct links with.
+        * Shall be equivalent to setPath( getLinkPathType(), $fullUrl ).
+        *
+        * @param string $fullUrl
+        *
+        * @since 1.21
+        *
+        * @throws MWException
+        */
+       public function setLinkPath( $fullUrl ) {
+               $type = $this->getLinkPathType();
+
+               if ( $type === null ) {
+                       throw new MWException( "This Site does not support link paths." );
+               }
+
+               $this->setPath( $type, $fullUrl );
+       }
+
+       /**
+        * Returns the path used to construct links with or false if there is no such path.
+        *
+        * Shall be equivalent to getPath( getLinkPathType() ).
+        *
+        * @return string|null
+        */
+       public function getLinkPath() {
+               $type = $this->getLinkPathType();
+               return $type === null ? null: $this->getPath( $type );
+       }
+
+       /**
+        * Returns the main path type, that is the type of the path that should generally be used to construct links
+        * to the target site.
+        *
+        * This default implementation returns Site::PATH_LINK as the default path type. Subclasses can override this
+        * to define a different default path type, or return false to disable site links.
+        *
+        * @since 1.21
+        *
+        * @return string|null
         */
-       public function getDomain();
+       public function getLinkPathType() {
+               return self::PATH_LINK;
+       }
 
        /**
         * Returns the full URL for the given page on the site.
@@ -138,79 +362,155 @@ interface Site {
         * This generated URL is usually based upon the path returned by getLinkPath(),
         * but this is not a requirement.
         *
+        * This implementation returns a URL constructed using the path returned by getLinkPath().
+        *
         * @since 1.21
-        * @see Site::getLinkPath()
         *
-        * @param bool|String $page
+        * @param bool|String $pageName
         *
-        * @return string|false
+        * @return string|boolean false
         */
-       public function getPageUrl( $page = false );
+       public function getPageUrl( $pageName = false ) {
+               $url = $this->getLinkPath();
+
+               if ( $url === false ) {
+                       return false;
+               }
+
+               if ( $pageName !== false ) {
+                       $url = str_replace( '$1', rawurlencode( $pageName ), $url ) ;
+               }
+
+               return $url;
+       }
 
        /**
-        * Returns language code of the sites primary language.
-        * Or false if it's not known.
+        * Returns $pageName without changes.
+        * Subclasses may override this to apply some kind of normalization.
+        *
+        * @see Site::normalizePageName
         *
         * @since 1.21
         *
-        * @return string|false
+        * @param string $pageName
+        *
+        * @return string
         */
-       public function getLanguageCode();
+       public function normalizePageName( $pageName ) {
+               return $pageName;
+       }
 
        /**
-        * Sets language code of the sites primary language.
+        * Returns the type specific fields.
         *
         * @since 1.21
         *
-        * @param string $languageCode
+        * @return array
         */
-       public function setLanguageCode( $languageCode );
+       public function getExtraData() {
+               return $this->extraData;
+       }
 
        /**
-        * Returns the normalized, canonical form of the given page name.
-        * How normalization is performed or what the properties of a normalized name are depends on the site.
-        * The general contract of this method is that the normalized form shall refer to the same content
-        * as the original form, and any other page name referring to the same content will have the same normalized form.
+        * Sets the type specific fields.
         *
-        * Note that this method may call out to the target site to perform the normalization, so it may be slow
-        * and fail due to IO errors.
+        * @since 1.21
+        *
+        * @param array $extraData
+        */
+       public function setExtraData( array $extraData ) {
+               $this->extraData = $extraData;
+       }
+
+       /**
+        * Returns the type specific config.
         *
         * @since 1.21
         *
-        * @param string $pageName
+        * @return array
+        */
+       public function getExtraConfig() {
+               return $this->extraConfig;
+       }
+
+       /**
+        * Sets the type specific config.
         *
-        * @return string the normalized page name
+        * @since 1.21
+        *
+        * @param array $extraConfig
         */
-       public function normalizePageName( $pageName );
+       public function setExtraConfig( array $extraConfig ) {
+               $this->extraConfig = $extraConfig;
+       }
 
        /**
-        * Returns the interwiki link identifiers that can be used for this site.
+        * Returns language code of the sites primary language.
+        * Or null if it's not known.
         *
         * @since 1.21
         *
-        * @return array of string
+        * @return string|null
         */
-       public function getInterwikiIds();
+       public function getLanguageCode() {
+               return $this->languageCode;
+       }
 
        /**
-        * Returns the equivalent link identifiers that can be used to make
-        * the site show up in interfaces such as the "language links" section.
+        * Sets language code of the sites primary language.
         *
         * @since 1.21
         *
-        * @return array of string
+        * @param string $languageCode
         */
-       public function getNavigationIds();
+       public function setLanguageCode( $languageCode ) {
+               $this->languageCode = $languageCode;
+       }
 
        /**
-        * Adds an local identifier to the site.
+        * Returns the set internal identifier for the site.
         *
         * @since 1.21
         *
-        * @param string $type The type of the identifier, element of the Site::ID_ enum
+        * @return string|null
+        */
+       public function getInternalId() {
+               return $this->internalId;
+       }
+
+       /**
+        * Sets the internal identifier for the site.
+        * This typically is a primary key in a db table.
+        *
+        * @since 1.21
+        *
+        * @param int|null $internalId
+        */
+       public function setInternalId( $internalId = null ) {
+               $this->internalId = $internalId;
+       }
+
+       /**
+        * Adds a local identifier.
+        *
+        * @since 1.21
+        *
+        * @param string $type
         * @param string $identifier
         */
-       public function addLocalId( $type, $identifier );
+       public function addLocalId( $type, $identifier ) {
+               if ( $this->localIds === false ) {
+                       $this->localIds = array();
+               }
+
+               if ( !array_key_exists( $type, $this->localIds ) ) {
+                       $this->localIds[$type] = array();
+               }
+
+               if ( !in_array( $identifier, $this->localIds[$type] ) ) {
+                       $this->localIds[$type][] = $identifier;
+               }
+       }
 
        /**
         * Adds an interwiki id to the site.
@@ -219,7 +519,9 @@ interface Site {
         *
         * @param string $identifier
         */
-       public function addInterwikiId( $identifier );
+       public function addInterwikiId( $identifier ) {
+               $this->addLocalId( self::ID_INTERWIKI, $identifier );
+       }
 
        /**
         * Adds a navigation id to the site.
@@ -228,35 +530,66 @@ interface Site {
         *
         * @param string $identifier
         */
-       public function addNavigationId( $identifier );
+       public function addNavigationId( $identifier ) {
+               $this->addLocalId( self::ID_EQUIVALENT, $identifier );
+       }
+
+       /**
+        * Returns the interwiki link identifiers that can be used for this site.
+        *
+        * @since 1.21
+        *
+        * @return string[]
+        */
+       public function getInterwikiIds() {
+               return array_key_exists( self::ID_INTERWIKI, $this->localIds ) ? $this->localIds[self::ID_INTERWIKI] : array();
+       }
 
        /**
-        * Saves the site.
+        * Returns the equivalent link identifiers that can be used to make
+        * the site show up in interfaces such as the "language links" section.
         *
         * @since 1.21
         *
-        * @param string|null $functionName
+        * @return string[]
         */
-       public function save( $functionName = null );
+       public function getNavigationIds() {
+               return array_key_exists( self::ID_EQUIVALENT, $this->localIds ) ? $this->localIds[self::ID_EQUIVALENT] : array();
+       }
 
        /**
-        * Returns the internal ID of the site.
+        * Returns all local ids
         *
         * @since 1.21
         *
-        * @return integer
+        * @return array[]
         */
-       public function getInternalId();
+       public function getLocalIds() {
+               return $this->localIds;
+       }
 
        /**
-        * Sets the provided url as path of the specified type.
+        * Sets the path used to construct links with.
+        * Shall be equivalent to setPath( getLinkPathType(), $fullUrl ).
         *
         * @since 1.21
         *
         * @param string $pathType
         * @param string $fullUrl
+        *
+        * @throws MWException
         */
-       public function setPath( $pathType, $fullUrl );
+       public function setPath( $pathType, $fullUrl ) {
+               if ( !is_string( $fullUrl ) ) {
+                       throw new MWException( '$fullUrl needs to be a string' );
+               }
+
+               if ( !array_key_exists( 'paths', $this->extraData ) ) {
+                       $this->extraData['paths'] = array();
+               }
+
+               $this->extraData['paths'][$pathType] = $fullUrl;
+       }
 
        /**
         * Returns the path of the provided type or false if there is no such path.
@@ -265,52 +598,106 @@ interface Site {
         *
         * @param string $pathType
         *
-        * @return string|false
+        * @return string|null
         */
-       public function getPath( $pathType );
+       public function getPath( $pathType ) {
+               $paths = $this->getAllPaths();
+               return array_key_exists( $pathType, $paths ) ? $paths[$pathType] : null;
+       }
 
        /**
-        * Sets the path used to construct links with.
-        * Shall be equivalent to setPath( getLinkPathType(), $fullUrl ).
-        *
-        * @param string $fullUrl
+        * Returns the paths as associative array.
+        * The keys are path types, the values are the path urls.
         *
         * @since 1.21
+        *
+        * @return string[]
         */
-       public function setLinkPath( $fullUrl );
+       public function getAllPaths() {
+               return array_key_exists( 'paths', $this->extraData ) ? $this->extraData['paths'] : array();
+       }
 
        /**
-        * Returns the path used to construct links with or false if there is no such path.
-        * Shall be equivalent to getPath( getLinkPathType() ).
+        * Removes the path of the provided type if it's set.
+        *
+        * @since 1.21
         *
-        * @return string|false
+        * @param string $pathType
         */
-       public function getLinkPath();
+       public function removePath( $pathType ) {
+               if ( array_key_exists( 'paths', $this->extraData ) ) {
+                       unset( $this->extraData['paths'][$pathType] );
+               }
+       }
 
        /**
-        * Returns the path type used to construct links with.
+        * @since 1.21
+        *
+        * @param string $siteType
         *
-        * @return string|false
+        * @return Site
         */
-       public function getLinkPathType();
+       public static function newForType( $siteType ) {
+               global $wgSiteTypes;
+
+               if ( array_key_exists( $siteType, $wgSiteTypes ) ) {
+                       return new $wgSiteTypes[$siteType]();
+               }
+
+               return new Site();
+       }
 
        /**
-        * Returns the paths as associative array.
-        * The keys are path types, the values are the path urls.
+        * @see Serializable::serialize
         *
         * @since 1.21
         *
-        * @return array of string
+        * @return string
         */
-       public function getAllPaths();
+       public function serialize() {
+               $fields = array(
+                       'globalid' => $this->globalId,
+                       'type' => $this->type,
+                       'group' => $this->group,
+                       'source' => $this->source,
+                       'language' => $this->languageCode,
+                       'localids' => $this->localIds,
+                       'config' => $this->extraConfig,
+                       'data' => $this->extraData,
+                       'forward' => $this->forward,
+                       'internalid' => $this->internalId,
+
+               );
+
+               return serialize( $fields );
+       }
 
        /**
-        * Removes the path of the provided type if it's set.
+        * @see Serializable::unserialize
         *
         * @since 1.21
         *
-        * @param string $pathType
+        * @param string $serialized
         */
-       public function removePath( $pathType );
+       public function unserialize( $serialized ) {
+               $fields = unserialize( $serialized );
+
+               $this->__construct( $fields['type'] );
+
+               $this->setGlobalId( $fields['globalid'] );
+               $this->setGroup( $fields['group'] );
+               $this->setSource( $fields['source'] );
+               $this->setLanguageCode( $fields['language'] );
+               $this->localIds = $fields['localids'];
+               $this->setExtraConfig( $fields['config'] );
+               $this->setExtraData( $fields['data'] );
+               $this->setForward( $fields['forward'] );
+               $this->setInternalId( $fields['internalid'] );
+       }
 
-}
\ No newline at end of file
+}
+
+/**
+ * @deprecated
+ */
+class SiteObject extends Site {}
diff --git a/includes/site/SiteArray.php b/includes/site/SiteArray.php
deleted file mode 100644 (file)
index 096a179..0000000
+++ /dev/null
@@ -1,240 +0,0 @@
-<?php
-
-/**
- * Implementation of SiteList using GenericArrayObject.
- *
- * 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
- *
- * @since 1.21
- *
- * @file
- * @ingroup Site
- *
- * @license GNU GPL v2+
- * @author Jeroen De Dauw < jeroendedauw@gmail.com >
- */
-class SiteArray extends GenericArrayObject implements SiteList {
-
-       /**
-        * Internal site identifiers pointing to their sites offset value.
-        *
-        * @since 1.21
-        *
-        * @var array of integer
-        */
-       protected $byInternalId = array();
-
-       /**
-        * Global site identifiers pointing to their sites offset value.
-        *
-        * @since 1.21
-        *
-        * @var array of string
-        */
-       protected $byGlobalId = array();
-
-       /**
-        * @see GenericArrayObject::getObjectType
-        *
-        * @since 1.21
-        *
-        * @return string
-        */
-       public function getObjectType() {
-               return 'Site';
-       }
-
-       /**
-        * @see GenericArrayObject::preSetElement
-        *
-        * @since 1.21
-        *
-        * @param int|string $index
-        * @param Site $site
-        *
-        * @return boolean
-        */
-       protected function preSetElement( $index, $site ) {
-               if ( $this->hasSite( $site->getGlobalId() ) ) {
-                       $this->removeSite( $site->getGlobalId() );
-               }
-
-               $this->byGlobalId[$site->getGlobalId()] = $index;
-               $this->byInternalId[$site->getInternalId()] = $index;
-
-               return true;
-       }
-
-       /**
-        * @see ArrayObject::offsetUnset()
-        *
-        * @since 1.21
-        *
-        * @param mixed $index
-        */
-       public function offsetUnset( $index ) {
-               if ( $this->offsetExists( $index ) ) {
-                       /**
-                        * @var Site $site
-                        */
-                       $site = $this->offsetGet( $index );
-
-                       unset( $this->byGlobalId[$site->getGlobalId()] );
-                       unset( $this->byInternalId[$site->getInternalId()] );
-               }
-
-               parent::offsetUnset( $index );
-       }
-
-       /**
-        * @see SiteList::getGlobalIdentifiers
-        *
-        * @since 1.21
-        *
-        * @return array
-        */
-       public function getGlobalIdentifiers() {
-               return array_keys( $this->byGlobalId );
-       }
-
-       /**
-        * @see SiteList::hasSite
-        *
-        * @param string $globalSiteId
-        *
-        * @return boolean
-        */
-       public function hasSite( $globalSiteId ) {
-               return array_key_exists( $globalSiteId, $this->byGlobalId );
-       }
-
-       /**
-        * @see SiteList::getSite
-        *
-        * @since 1.21
-        *
-        * @param string $globalSiteId
-        *
-        * @return Site
-        */
-       public function getSite( $globalSiteId ) {
-               return $this->offsetGet( $this->byGlobalId[$globalSiteId] );
-       }
-
-       /**
-        * @see SiteList::removeSite
-        *
-        * @since 1.21
-        *
-        * @param string $globalSiteId
-        */
-       public function removeSite( $globalSiteId ) {
-               $this->offsetUnset( $this->byGlobalId[$globalSiteId] );
-       }
-
-       /**
-        * @see SiteList::isEmpty
-        *
-        * @since 1.21
-        *
-        * @return boolean
-        */
-       public function isEmpty() {
-               return $this->byGlobalId === array();
-       }
-
-       /**
-        * @see SiteList::hasInternalId
-        *
-        * @param integer $id
-        *
-        * @return boolean
-        */
-       public function hasInternalId( $id ) {
-               return array_key_exists( $id, $this->byInternalId );
-       }
-
-       /**
-        * @see SiteList::getSiteByInternalId
-        *
-        * @since 1.21
-        *
-        * @param integer $id
-        *
-        * @return Site
-        */
-       public function getSiteByInternalId( $id ) {
-               return $this->offsetGet( $this->byInternalId[$id] );
-       }
-
-       /**
-        * @see SiteList::removeSiteByInternalId
-        *
-        * @since 1.21
-        *
-        * @param integer $id
-        */
-       public function removeSiteByInternalId( $id ) {
-               $this->offsetUnset( $this->byInternalId[$id] );
-       }
-
-       /**
-        * @see SiteList::setSite
-        *
-        * @since 1.21
-        *
-        * @param Site $site
-        */
-       public function setSite( Site $site ) {
-               $this[] = $site;
-       }
-
-       /**
-        * @see GenericArrayObject::getSerializationData
-        *
-        * @since 1.21
-        *
-        * @return array
-        */
-       protected function getSerializationData() {
-               return array_merge(
-                       parent::getSerializationData(),
-                       array(
-                               'internalIds' => $this->byInternalId,
-                               'globalIds' => $this->byGlobalId,
-                       )
-               );
-       }
-
-       /**
-        * @see GenericArrayObject::unserialize
-        *
-        * @since 1.21
-        *
-        * @param string $serialization
-        *
-        * @return array
-        */
-       public function unserialize( $serialization ) {
-               $serializationData = parent::unserialize( $serialization );
-
-               $this->byInternalId = $serializationData['internalIds'];
-               $this->byGlobalId = $serializationData['globalIds'];
-
-               return $serializationData;
-       }
-
-}
index 6273364..d21520c 100644 (file)
@@ -1,7 +1,7 @@
 <?php
 
 /**
- * Interface for lists of Site objects.
+ * Collection of Site objects.
  *
  * 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
  * @license GNU GPL v2+
  * @author Jeroen De Dauw < jeroendedauw@gmail.com >
  */
-interface SiteList extends Countable, Traversable, Serializable, ArrayAccess {
+class SiteList extends GenericArrayObject {
+
+       /**
+        * Internal site identifiers pointing to their sites offset value.
+        *
+        * @since 1.21
+        *
+        * @var array of integer
+        */
+       protected $byInternalId = array();
+
+       /**
+        * Global site identifiers pointing to their sites offset value.
+        *
+        * @since 1.21
+        *
+        * @var array of string
+        */
+       protected $byGlobalId = array();
+
+       /**
+        * @see GenericArrayObject::getObjectType
+        *
+        * @since 1.21
+        *
+        * @return string
+        */
+       public function getObjectType() {
+               return 'Site';
+       }
+
+       /**
+        * @see GenericArrayObject::preSetElement
+        *
+        * @since 1.21
+        *
+        * @param int|string $index
+        * @param Site $site
+        *
+        * @return boolean
+        */
+       protected function preSetElement( $index, $site ) {
+               if ( $this->hasSite( $site->getGlobalId() ) ) {
+                       $this->removeSite( $site->getGlobalId() );
+               }
+
+               $this->byGlobalId[$site->getGlobalId()] = $index;
+               $this->byInternalId[$site->getInternalId()] = $index;
+
+               return true;
+       }
+
+       /**
+        * @see ArrayObject::offsetUnset()
+        *
+        * @since 1.21
+        *
+        * @param mixed $index
+        */
+       public function offsetUnset( $index ) {
+               if ( $this->offsetExists( $index ) ) {
+                       /**
+                        * @var Site $site
+                        */
+                       $site = $this->offsetGet( $index );
+
+                       unset( $this->byGlobalId[$site->getGlobalId()] );
+                       unset( $this->byInternalId[$site->getInternalId()] );
+               }
+
+               parent::offsetUnset( $index );
+       }
 
        /**
         * Returns all the global site identifiers.
@@ -36,7 +107,9 @@ interface SiteList extends Countable, Traversable, Serializable, ArrayAccess {
         *
         * @return array
         */
-       public function getGlobalIdentifiers();
+       public function getGlobalIdentifiers() {
+               return array_keys( $this->byGlobalId );
+       }
 
        /**
         * Returns if the list contains the site with the provided global site identifier.
@@ -45,7 +118,9 @@ interface SiteList extends Countable, Traversable, Serializable, ArrayAccess {
         *
         * @return boolean
         */
-       public function hasSite( $globalSiteId );
+       public function hasSite( $globalSiteId ) {
+               return array_key_exists( $globalSiteId, $this->byGlobalId );
+       }
 
        /**
         * Returns the Site with the provided global site identifier.
@@ -57,7 +132,9 @@ interface SiteList extends Countable, Traversable, Serializable, ArrayAccess {
         *
         * @return Site
         */
-       public function getSite( $globalSiteId );
+       public function getSite( $globalSiteId ) {
+               return $this->offsetGet( $this->byGlobalId[$globalSiteId] );
+       }
 
        /**
         * Removes the site with the specified global site identifier.
@@ -67,7 +144,20 @@ interface SiteList extends Countable, Traversable, Serializable, ArrayAccess {
         *
         * @param string $globalSiteId
         */
-       public function removeSite( $globalSiteId );
+       public function removeSite( $globalSiteId ) {
+               $this->offsetUnset( $this->byGlobalId[$globalSiteId] );
+       }
+
+       /**
+        * Returns if the list contains no sites.
+        *
+        * @since 1.21
+        *
+        * @return boolean
+        */
+       public function isEmpty() {
+               return $this->byGlobalId === array();
+       }
 
        /**
         * Returns if the list contains the site with the provided site id.
@@ -76,7 +166,9 @@ interface SiteList extends Countable, Traversable, Serializable, ArrayAccess {
         *
         * @return boolean
         */
-       public function hasInternalId( $id );
+       public function hasInternalId( $id ) {
+               return array_key_exists( $id, $this->byInternalId );
+       }
 
        /**
         * Returns the Site with the provided site id.
@@ -88,7 +180,9 @@ interface SiteList extends Countable, Traversable, Serializable, ArrayAccess {
         *
         * @return Site
         */
-       public function getSiteByInternalId( $id );
+       public function getSiteByInternalId( $id ) {
+               return $this->offsetGet( $this->byInternalId[$id] );
+       }
 
        /**
         * Removes the site with the specified site id.
@@ -98,7 +192,9 @@ interface SiteList extends Countable, Traversable, Serializable, ArrayAccess {
         *
         * @param integer $id
         */
-       public function removeSiteByInternalId( $id );
+       public function removeSiteByInternalId( $id ) {
+               $this->offsetUnset( $this->byInternalId[$id] );
+       }
 
        /**
         * Sets a site in the list. If the site was not there,
@@ -108,15 +204,97 @@ interface SiteList extends Countable, Traversable, Serializable, ArrayAccess {
         *
         * @param Site $site
         */
-       public function setSite( Site $site );
+       public function setSite( Site $site ) {
+               $this[] = $site;
+       }
 
        /**
-        * Returns if the site list contains no sites.
+        * Returns the sites that are in the provided group.
         *
         * @since 1.21
         *
-        * @return boolean
+        * @param string $groupName
+        *
+        * @return SiteList
+        */
+       public function getGroup( $groupName ) {
+               $group = new self();
+
+               /**
+                * @var \Site $site
+                */
+               foreach ( $this as $site ) {
+                       if ( $site->getGroup() === $groupName ) {
+                               $group[] = $site;
+                       }
+               }
+
+               return $group;
+       }
+
+       /**
+        * A version ID that identifies the serialization structure used by getSerializationData()
+        * and unserialize(). This is useful for constructing cache keys in cases where the cache relies
+        * on serialization for storing the SiteList.
+        *
+        * @var string A string uniquely identifying the version of the serialization structure,
+        *             not including any sub-structures.
+        */
+       const SERIAL_VERSION_ID = '2013-01-23';
+
+       /**
+        * Returns the version ID that identifies the serialization structure used by
+        * getSerializationData() and unserialize(), including the structure of any nested structures.
+        * This is useful for constructing cache keys in cases where the cache relies
+        * on serialization for storing the SiteList.
+        *
+        * @return string A string uniquely identifying the version of the serialization structure,
+        *                including any sub-structures.
+        */
+       public static function getSerialVersionId() {
+               return self::SERIAL_VERSION_ID . '+Site:' . Site::SERIAL_VERSION_ID;
+       }
+
+       /**
+        * @see GenericArrayObject::getSerializationData
+        *
+        * @since 1.21
+        *
+        * @return array
         */
-       public function isEmpty();
+       protected function getSerializationData() {
+               //NOTE: When changing the structure, either implement unserialize() to handle the
+               //      old structure too, or update SERIAL_VERSION_ID to kill any caches.
+               return array_merge(
+                       parent::getSerializationData(),
+                       array(
+                               'internalIds' => $this->byInternalId,
+                               'globalIds' => $this->byGlobalId,
+                       )
+               );
+       }
 
-}
\ No newline at end of file
+       /**
+        * @see GenericArrayObject::unserialize
+        *
+        * @since 1.21
+        *
+        * @param string $serialization
+        *
+        * @return array
+        */
+       public function unserialize( $serialization ) {
+               $serializationData = parent::unserialize( $serialization );
+
+               $this->byInternalId = $serializationData['internalIds'];
+               $this->byGlobalId = $serializationData['globalIds'];
+
+               return $serializationData;
+       }
+
+}
+
+/**
+ * @deprecated
+ */
+class SiteArray extends SiteList {}
diff --git a/includes/site/SiteObject.php b/includes/site/SiteObject.php
deleted file mode 100644 (file)
index 217f860..0000000
+++ /dev/null
@@ -1,570 +0,0 @@
-<?php
-
-/**
- * Class representing a single site.
- *
- * 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
- *
- * @since 1.21
- *
- * @file
- * @ingroup Site
- *
- * @license GNU GPL v2+
- * @author Jeroen De Dauw < jeroendedauw@gmail.com >
- * @author Daniel Werner
- */
-class SiteObject extends ORMRow implements Site {
-
-       const PATH_LINK = 'link';
-
-       /**
-        * Holds the local ids for this site.
-        * You can obtain them via @see getLocalIds
-        *
-        * @since 1.21
-        *
-        * @var array|false
-        */
-       protected $localIds = false;
-
-       /**
-        * @see Site::getGlobalId
-        *
-        * @since 1.21
-        *
-        * @return string
-        */
-       public function getGlobalId() {
-               return $this->getField( 'global_key' );
-       }
-
-       /**
-        * @see Site::setGlobalId
-        *
-        * @since 1.21
-        *
-        * @param string $globalId
-        */
-       public function setGlobalId( $globalId ) {
-               $this->setField( 'global_key', $globalId );
-       }
-
-       /**
-        * @see Site::getType
-        *
-        * @since 1.21
-        *
-        * @return string
-        */
-       public function getType() {
-               return $this->getField( 'type' );
-       }
-
-       /**
-        * @see Site::setType
-        *
-        * @since 1.21
-        *
-        * @param string $type
-        */
-       public function setType( $type ) {
-               $this->setField( 'type', $type );
-       }
-
-       /**
-        * @see Site::getGroup
-        *
-        * @since 1.21
-        *
-        * @return string
-        */
-       public function getGroup() {
-               return $this->getField( 'group' );
-       }
-
-       /**
-        * @see Site::setGroup
-        *
-        * @since 1.21
-        *
-        * @param string $group
-        */
-       public function setGroup( $group ) {
-               $this->setField( 'group', $group );
-       }
-
-       /**
-        * @see Site::getSource
-        *
-        * @since 1.21
-        *
-        * @return string
-        */
-       public function getSource() {
-               return $this->getField( 'source' );
-       }
-
-       /**
-        * @see Site::setSource
-        *
-        * @since 1.21
-        *
-        * @param string $source
-        */
-       public function setSource( $source ) {
-               $this->setField( 'source', $source );
-       }
-
-       /**
-        * @see Site::getDomain
-        *
-        * @since 1.21
-        *
-        * @return string|false
-        */
-       public function getDomain() {
-               $path = $this->getLinkPath();
-
-               if ( $path === false ) {
-                       return false;
-               }
-
-               return parse_url( $path, PHP_URL_HOST );
-       }
-
-       /**
-        * @see Site::getProtocol
-        *
-        * @since 1.21
-        *
-        * @throws MWException
-        * @return string|false
-        */
-       public function getProtocol() {
-               $path = $this->getLinkPath();
-
-               if ( $path === false ) {
-                       return '';
-               }
-
-               $protocol = parse_url( $path, PHP_URL_SCHEME );
-
-               // Malformed URL
-               if ( $protocol === false ) {
-                       throw new MWException( "failed to parse URL $path" );
-               }
-
-               // No schema
-               if ( $protocol === null ) {
-                       // Used for protocol relative URLs
-                       $protocol = '';
-               }
-
-               return $protocol;
-       }
-
-       /**
-        * Sets the path used to construct links with.
-        * @see Site::setLinkPath
-        *
-        * @param string $fullUrl
-        *
-        * @since 1.21
-        *
-        * @throws MWException
-        */
-       public function setLinkPath( $fullUrl ) {
-               $type = $this->getLinkPathType();
-
-               if ( $type === false ) {
-                       throw new MWException( "This SiteObject does not support link paths." );
-               }
-
-               $this->setPath( $type, $fullUrl );
-       }
-
-       /**
-        * Returns the path path used to construct links with or false if there is no such path.
-        *
-        * @see Site::getLinkPath
-        *
-        * @return string|false
-        */
-       public function getLinkPath() {
-               $type = $this->getLinkPathType();
-               return $type === false ? false : $this->getPath( $type );
-       }
-
-       /**
-        * @see Site::getLinkPathType
-        *
-        * Returns the main path type, that is the type of the path that should generally be used to construct links
-        * to the target site.
-        *
-        * This default implementation returns SiteObject::PATH_LINK as the default path type. Subclasses can override this
-        * to define a different default path type, or return false to disable site links.
-        *
-        * @since 1.21
-        *
-        * @return string|false
-        */
-       public function getLinkPathType() {
-               return self::PATH_LINK;
-       }
-
-       /**
-        * @see Site::getPageUrl
-        *
-        * This implementation returns a URL constructed using the path returned by getLinkPath().
-        *
-        * @since 1.21
-        *
-        * @param bool|String $pageName
-        *
-        * @return string|false
-        */
-       public function getPageUrl( $pageName = false ) {
-               $url = $this->getLinkPath();
-
-               if ( $url === false ) {
-                       return false;
-               }
-
-               if ( $pageName !== false ) {
-                       $url = str_replace( '$1', rawurlencode( $pageName ), $url ) ;
-               }
-
-               return $url;
-       }
-
-       /**
-        * Returns $pageName without changes.
-        * Subclasses may override this to apply some kind of normalization.
-        *
-        * @see Site::normalizePageName
-        *
-        * @since 1.21
-        *
-        * @param string $pageName
-        *
-        * @return string
-        */
-       public function normalizePageName( $pageName ) {
-               return $pageName;
-       }
-
-       /**
-        * Returns the value of a type specific field, or the value
-        * of the $default parameter in case it's not set.
-        *
-        * @since 1.21
-        *
-        * @param string $fieldName
-        * @param mixed $default
-        *
-        * @return array
-        */
-       protected function getExtraData( $fieldName, $default = null ) {
-               $data = $this->getField( 'data', array() );
-               return array_key_exists( $fieldName,$data ) ? $data[$fieldName] : $default;
-       }
-
-       /**
-        * Sets the value of a type specific field.
-        * @since 1.21
-        *
-        * @param string $fieldName
-        * @param mixed $value
-        */
-       protected function setExtraData( $fieldName, $value = null ) {
-               $data = $this->getField( 'data', array() );
-               $data[$fieldName] = $value;
-               $this->setField( 'data', $data );
-       }
-
-       /**
-        * @see Site::getLanguageCode
-        *
-        * @since 1.21
-        *
-        * @return string|false
-        */
-       public function getLanguageCode() {
-               return $this->getField( 'language', false );
-       }
-
-       /**
-        * @see Site::setLanguageCode
-        *
-        * @since 1.21
-        *
-        * @param string $languageCode
-        */
-       public function setLanguageCode( $languageCode ) {
-               $this->setField( 'language', $languageCode );
-       }
-
-       /**
-        * Returns the local identifiers of this site.
-        *
-        * @since 1.21
-        *
-        * @param string $type
-        *
-        * @return array
-        */
-       protected function getLocalIds( $type ) {
-               if ( $this->localIds === false ) {
-                       $this->loadLocalIds();
-               }
-
-               return array_key_exists( $type, $this->localIds ) ? $this->localIds[$type] : array();
-       }
-
-       /**
-        * Loads the local ids for the site.
-        *
-        * @since 1.21
-        */
-       protected function loadLocalIds() {
-               $dbr = wfGetDB( $this->getTable()->getReadDb() );
-
-               $ids = $dbr->select(
-                       'site_identifiers',
-                       array(
-                               'si_type',
-                               'si_key',
-                       ),
-                       array(
-                               'si_site' => $this->getId(),
-                       ),
-                       __METHOD__
-               );
-
-               $this->localIds = array();
-
-               foreach ( $ids as $id ) {
-                       $this->addLocalId( $id->si_type, $id->si_key );
-               }
-       }
-
-       /**
-        * Adds a local identifier.
-        *
-        * @since 1.21
-        *
-        * @param string $type
-        * @param string $identifier
-        */
-       public function addLocalId( $type, $identifier ) {
-               if ( $this->localIds === false ) {
-                       $this->localIds = array();
-               }
-
-               if ( !array_key_exists( $type, $this->localIds ) ) {
-                       $this->localIds[$type] = array();
-               }
-
-               if ( !in_array( $identifier, $this->localIds[$type] ) ) {
-                       $this->localIds[$type][] = $identifier;
-               }
-       }
-
-       /**
-        * @see Site::addInterwikiId
-        *
-        * @since 1.21
-        *
-        * @param string $identifier
-        */
-       public function addInterwikiId( $identifier ) {
-               $this->addLocalId( 'interwiki', $identifier );
-       }
-
-       /**
-        * @see Site::addNavigationId
-        *
-        * @since 1.21
-        *
-        * @param string $identifier
-        */
-       public function addNavigationId( $identifier ) {
-               $this->addLocalId( 'equivalent', $identifier );
-       }
-
-       /**
-        * @see Site::getInterwikiIds
-        *
-        * @since 1.21
-        *
-        * @return array of string
-        */
-       public function getInterwikiIds() {
-               return $this->getLocalIds( 'interwiki' );
-       }
-
-       /**
-        * @see Site::getNavigationIds
-        *
-        * @since 1.21
-        *
-        * @return array of string
-        */
-       public function getNavigationIds() {
-               return $this->getLocalIds( 'equivalent' );
-       }
-
-       /**
-        * @see Site::getInternalId
-        *
-        * @since 1.21
-        *
-        * @return integer
-        */
-       public function getInternalId() {
-               return $this->getId();
-       }
-
-       /**
-        * @see IORMRow::save
-        * @see Site::save
-        *
-        * @since 1.21
-        *
-        * @param string|null $functionName
-        *
-        * @return boolean Success indicator
-        */
-       public function save( $functionName = null ) {
-               $dbw = $this->table->getWriteDbConnection();
-
-               $trx = $dbw->trxLevel();
-
-               if ( $trx == 0 ) {
-                       $dbw->begin( __METHOD__ );
-               }
-
-               $this->setField( 'protocol', $this->getProtocol() );
-               $this->setField( 'domain', strrev( $this->getDomain() ) . '.' );
-
-               $existedAlready = $this->hasIdField();
-
-               $success = parent::save( $functionName );
-
-               if ( $success && $existedAlready ) {
-                       $dbw->delete(
-                               'site_identifiers',
-                               array( 'si_site' => $this->getId() ),
-                               __METHOD__
-                       );
-               }
-
-               if ( $success && $this->localIds !== false ) {
-                       foreach ( $this->localIds as $type => $ids ) {
-                               foreach ( $ids as $id ) {
-                                       $dbw->insert(
-                                               'site_identifiers',
-                                               array(
-                                                       'si_site' => $this->getId(),
-                                                       'si_type' => $type,
-                                                       'si_key' => $id,
-                                               ),
-                                               __METHOD__
-                                       );
-                               }
-                       }
-               }
-
-               if ( $trx == 0 ) {
-                       $dbw->commit( __METHOD__ );
-               }
-
-               return $success;
-       }
-
-       /**
-        * @since 1.21
-        *
-        * @see ORMRow::onRemoved
-        */
-       protected function onRemoved() {
-               $dbw = $this->table->getWriteDbConnection();
-
-               $dbw->delete(
-                       'site_identifiers',
-                       array(
-                               'si_site' => $this->getId()
-                       ),
-                       __METHOD__
-               );
-
-               parent::onRemoved();
-       }
-
-       /**
-        * @see Site::setPath
-        *
-        * @since 1.21
-        *
-        * @param string $pathType
-        * @param string $fullUrl
-        */
-       public function setPath( $pathType, $fullUrl ) {
-               $paths = $this->getExtraData( 'paths', array() );
-               $paths[$pathType] = $fullUrl;
-               $this->setExtraData( 'paths', $paths );
-       }
-
-       /**
-        * @see Sitres::getPath
-        *
-        * @since 1.21
-        *
-        * @param string $pathType
-        *
-        * @return string|false
-        */
-       public function getPath( $pathType ) {
-               $paths = $this->getExtraData( 'paths', array() );
-               return array_key_exists( $pathType, $paths ) ? $paths[$pathType] : false;
-       }
-
-       /**
-        * @see Sitres::getAll
-        *
-        * @since 1.21
-        *
-        * @return array of string
-        */
-       public function getAllPaths() {
-               return $this->getExtraData( 'paths', array() );
-       }
-
-       /**
-        * @see Sitres::removePath
-        *
-        * @since 1.21
-        *
-        * @param string $pathType
-        */
-       public function removePath( $pathType ) {
-               $paths = $this->getExtraData( 'paths', array() );
-               unset( $paths[$pathType] );
-               $this->setExtraData( 'paths', $paths );
-       }
-
-}
diff --git a/includes/site/SiteSQLStore.php b/includes/site/SiteSQLStore.php
new file mode 100644 (file)
index 0000000..c462057
--- /dev/null
@@ -0,0 +1,486 @@
+<?php
+
+/**
+ * Represents the site configuration of a wiki.
+ * Holds a list of sites (ie SiteList) and takes care
+ * of retrieving and caching site information when appropriate.
+ *
+ * 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
+ *
+ * @since 1.21
+ *
+ * @file
+ * @ingroup Site
+ *
+ * @license GNU GPL v2+
+ * @author Jeroen De Dauw < jeroendedauw@gmail.com >
+ */
+class SiteSQLStore implements SiteStore {
+
+       /**
+        * @since 1.21
+        *
+        * @var SiteList|null
+        */
+       protected $sites = null;
+
+       /**
+        * @var ORMTable
+        */
+       protected $sitesTable;
+
+       /**
+        * @var string|null
+        */
+       private $cacheKey = null;
+
+       /**
+        * @since 1.21
+        *
+        * @param ORMTable|null $sitesTable
+        *
+        * @return SiteStore
+        */
+       public static function newInstance( ORMTable $sitesTable = null ) {
+               return new static( $sitesTable );
+       }
+
+       /**
+        * Constructor.
+        *
+        * @since 1.21
+        *
+        * @param ORMTable|null $sitesTable
+        */
+       protected function __construct( ORMTable $sitesTable = null ) {
+               if ( $sitesTable === null ) {
+                       $sitesTable = $this->newSitesTable();
+               }
+
+               $this->sitesTable = $sitesTable;
+       }
+
+       /**
+        * Constructs a cache key to use for caching the list of sites.
+        *
+        * This includes the concrete class name of the site list as well as a version identifier
+        * for the list's serialization, to avoid problems when unserializing site lists serialized
+        * by an older version, e.g. when reading from a cache.
+        *
+        * The cache key also includes information about where the sites were loaded from, e.g.
+        * the name of a database table.
+        *
+        * @see SiteList::getSerialVersionId
+        *
+        * @return String The cache key.
+        */
+       protected function getCacheKey() {
+               wfProfileIn( __METHOD__ );
+
+               if ( $this->cacheKey === null ) {
+                       $type = 'SiteList#' . SiteList::getSerialVersionId();
+                       $source = $this->sitesTable->getName();
+
+                       if ( $this->sitesTable->getTargetWiki() !== false ) {
+                               $source = $this->sitesTable->getTargetWiki() . '.' . $source;
+                       }
+
+                       $this->cacheKey = wfMemcKey( "$source/$type" );
+               }
+
+               wfProfileOut( __METHOD__ );
+               return $this->cacheKey;
+       }
+
+       /**
+        * @see SiteStore::getSites
+        *
+        * @since 1.21
+        *
+        * @param string $source either 'cache' or 'recache'
+        *
+        * @return SiteList
+        */
+       public function getSites( $source = 'cache' ) {
+               wfProfileIn( __METHOD__ );
+
+               if ( $source === 'cache' ) {
+                       if ( $this->sites === null ) {
+                               $cache = wfGetMainCache();
+                               $sites = $cache->get( $this->getCacheKey() );
+
+                               if ( is_object( $sites ) ) {
+                                       $this->sites = $sites;
+                               } else {
+                                       $this->loadSites();
+                               }
+                       }
+               }
+               else {
+                       $this->loadSites();
+               }
+
+               wfProfileOut( __METHOD__ );
+               return $this->sites;
+       }
+
+       /**
+        * Returns a new Site object constructed from the provided ORMRow.
+        *
+        * @since 1.21
+        *
+        * @param ORMRow $siteRow
+        *
+        * @return Site
+        */
+       protected function siteFromRow( ORMRow $siteRow ) {
+               wfProfileIn( __METHOD__ );
+
+               $site = Site::newForType( $siteRow->getField( 'type', Site::TYPE_UNKNOWN ) );
+
+               $site->setGlobalId( $siteRow->getField( 'global_key' ) );
+
+               $site->setInternalId( $siteRow->getField( 'id' ) );
+
+               if ( $siteRow->hasField( 'forward' ) ) {
+                       $site->setForward( $siteRow->getField( 'forward' ) );
+               }
+
+               if ( $siteRow->hasField( 'group' ) ) {
+                       $site->setGroup( $siteRow->getField( 'group' ) );
+               }
+
+               if ( $siteRow->hasField( 'language' ) ) {
+                       $site->setLanguageCode( $siteRow->getField( 'language' ) === '' ? null : $siteRow->getField( 'language' ) );
+               }
+
+               if ( $siteRow->hasField( 'source' ) ) {
+                       $site->setSource( $siteRow->getField( 'source' ) );
+               }
+
+               if ( $siteRow->hasField( 'data' ) ) {
+                       $site->setExtraData( $siteRow->getField( 'data' ) );
+               }
+
+               if ( $siteRow->hasField( 'config' ) ) {
+                       $site->setExtraConfig( $siteRow->getField( 'config' ) );
+               }
+
+               wfProfileOut( __METHOD__ );
+               return $site;
+       }
+
+       /**
+        * Fetches the site from the database and loads them into the sites field.
+        *
+        * @since 1.21
+        */
+       protected function loadSites() {
+               wfProfileIn( __METHOD__ );
+
+               $this->sites = new SiteList();
+
+               foreach ( $this->sitesTable->select() as $siteRow ) {
+                       $this->sites[] = $this->siteFromRow( $siteRow );
+               }
+
+               // Batch load the local site identifiers.
+               $ids = wfGetDB( $this->sitesTable->getReadDb() )->select(
+                       'site_identifiers',
+                       array(
+                               'si_site',
+                               'si_type',
+                               'si_key',
+                       ),
+                       array(),
+                       __METHOD__
+               );
+
+               foreach ( $ids as $id ) {
+                       if ( $this->sites->hasInternalId( $id->si_site ) ) {
+                               $site = $this->sites->getSiteByInternalId( $id->si_site );
+                               $site->addLocalId( $id->si_type, $id->si_key );
+                               $this->sites->setSite( $site );
+                       }
+               }
+
+               $cache = wfGetMainCache();
+               $cache->set( $this->getCacheKey(), $this->sites );
+
+               wfProfileOut( __METHOD__ );
+       }
+
+       /**
+        * @see SiteStore::getSite
+        *
+        * @since 1.21
+        *
+        * @param string $globalId
+        * @param string $source
+        *
+        * @return Site|null
+        */
+       public function getSite( $globalId, $source = 'cache' ) {
+               wfProfileIn( __METHOD__ );
+
+               $sites = $this->getSites( $source );
+
+               wfProfileOut( __METHOD__ );
+               return $sites->hasSite( $globalId ) ? $sites->getSite( $globalId ) : null;
+       }
+
+       /**
+        * @see SiteStore::saveSite
+        *
+        * @since 1.21
+        *
+        * @param Site $site
+        *
+        * @return boolean Success indicator
+        */
+       public function saveSite( Site $site ) {
+               return $this->saveSites( array( $site ) );
+       }
+
+       /**
+        * @see SiteStore::saveSites
+        *
+        * @since 1.21
+        *
+        * @param Site[] $sites
+        *
+        * @return boolean Success indicator
+        */
+       public function saveSites( array $sites ) {
+               wfProfileIn( __METHOD__ );
+
+               if ( empty( $sites ) ) {
+                       wfProfileOut( __METHOD__ );
+                       return true;
+               }
+
+               $dbw = $this->sitesTable->getWriteDbConnection();
+
+               $trx = $dbw->trxLevel();
+
+               if ( $trx == 0 ) {
+                       $dbw->begin( __METHOD__ );
+               }
+
+               $success = true;
+
+               $internalIds = array();
+               $localIds = array();
+
+               foreach ( $sites as $site ) {
+                       $fields = array(
+                               // Site data
+                               'global_key' => $site->getGlobalId(), // TODO: check not null
+                               'type' => $site->getType(),
+                               'group' => $site->getGroup(),
+                               'source' => $site->getSource(),
+                               'language' => $site->getLanguageCode() === null ? '' : $site->getLanguageCode(),
+                               'protocol' => $site->getProtocol(),
+                               'domain' => strrev( $site->getDomain() ) . '.',
+                               'data' => $site->getExtraData(),
+
+                               // Site config
+                               'forward' => $site->shouldForward(),
+                               'config' => $site->getExtraConfig(),
+                       );
+
+                       if ( $site->getInternalId() !== null ) {
+                               $fields['id'] = $site->getInternalId();
+                               $internalIds[] = $site->getInternalId();
+                       }
+
+                       $siteRow = new ORMRow( $this->sitesTable, $fields );
+                       $success = $siteRow->save( __METHOD__ ) && $success;
+
+                       foreach ( $site->getLocalIds() as $idType => $ids ) {
+                               foreach ( $ids as $id ) {
+                                       $localIds[] = array( $siteRow->getId(), $idType, $id );
+                               }
+                       }
+               }
+
+               if ( $internalIds !== array() ) {
+                       $dbw->delete(
+                               'site_identifiers',
+                               array( 'si_site' => $internalIds ),
+                               __METHOD__
+                       );
+               }
+
+               foreach ( $localIds as $localId ) {
+                       $dbw->insert(
+                               'site_identifiers',
+                               array(
+                                       'si_site' => $localId[0],
+                                       'si_type' => $localId[1],
+                                       'si_key' => $localId[2],
+                               ),
+                               __METHOD__
+                       );
+               }
+
+               if ( $trx == 0 ) {
+                       $dbw->commit( __METHOD__ );
+               }
+
+               // purge cache
+               $this->reset();
+
+               wfProfileOut( __METHOD__ );
+               return $success;
+       }
+
+       /**
+        * Purges the internal and external cache of the site list, forcing the list
+        * of sites to be re-read from the database.
+        *
+        * @since 1.21
+        */
+       public function reset() {
+               wfProfileIn( __METHOD__ );
+               // purge cache
+               $cache = wfGetMainCache();
+               $cache->delete( $this->getCacheKey() );
+               $this->sites = null;
+
+               wfProfileOut( __METHOD__ );
+       }
+
+       /**
+        * Clears the list of sites stored in the database.
+        *
+        * @see SiteStore::clear()
+        *
+        * @return bool success
+        */
+       public function clear() {
+               wfProfileIn( __METHOD__ );
+               $dbw = $this->sitesTable->getWriteDbConnection();
+
+               $trx = $dbw->trxLevel();
+
+               if ( $trx == 0 ) {
+                       $dbw->begin( __METHOD__ );
+               }
+
+               $ok = $dbw->delete( 'sites', '*', __METHOD__ );
+               $ok = $dbw->delete( 'site_identifiers', '*', __METHOD__ ) && $ok;
+
+               if ( $trx == 0 ) {
+                       $dbw->commit( __METHOD__ );
+               }
+
+               $this->reset();
+
+               wfProfileOut( __METHOD__ );
+               return $ok;
+       }
+
+       /**
+        * @since 1.21
+        *
+        * @return ORMTable
+        */
+       protected function newSitesTable() {
+               return new ORMTable(
+                       'sites',
+                       array(
+                               'id' => 'id',
+
+                               // Site data
+                               'global_key' => 'str',
+                               'type' => 'str',
+                               'group' => 'str',
+                               'source' => 'str',
+                               'language' => 'str',
+                               'protocol' => 'str',
+                               'domain' => 'str',
+                               'data' => 'array',
+
+                               // Site config
+                               'forward' => 'bool',
+                               'config' => 'array',
+                       ),
+                       array(
+                               'type' => Site::TYPE_UNKNOWN,
+                               'group' => Site::GROUP_NONE,
+                               'source' => Site::SOURCE_LOCAL,
+                               'data' => array(),
+
+                               'forward' => false,
+                               'config' => array(),
+                               'language' => '',
+                       ),
+                       'ORMRow',
+                       'site_'
+               );
+       }
+
+}
+
+/**
+ * @deprecated
+ */
+class Sites extends SiteSQLStore {
+
+       /**
+        * Factory for creating new site objects.
+        *
+        * @since 1.21
+        * @deprecated
+        *
+        * @param string|boolean false $globalId
+        *
+        * @return Site
+        */
+       public static function newSite( $globalId = false ) {
+               $site = new Site();
+
+               if ( $globalId !== false ) {
+                       $site->setGlobalId( $globalId );
+               }
+
+               return $site;
+       }
+
+       /**
+        * @deprecated
+        * @return SiteStore
+        */
+       public static function singleton() {
+               static $singleton;
+
+               if ( $singleton === null ) {
+                       $singleton = new static();
+               }
+
+               return $singleton;
+       }
+
+       /**
+        * @deprecated
+        * @return SiteList
+        */
+       public function getSiteGroup( $group ) {
+               return $this->getSites()->getGroup( $group );
+       }
+
+}
diff --git a/includes/site/SiteStore.php b/includes/site/SiteStore.php
new file mode 100644 (file)
index 0000000..52ba8fb
--- /dev/null
@@ -0,0 +1,85 @@
+<?php
+
+/**
+ * Interface for service objects providing a storage interface for Site objects.
+ *
+ * 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
+ *
+ * @since 1.21
+ *
+ * @file
+ * @ingroup Site
+ *
+ * @license GNU GPL v2+
+ * @author Jeroen De Dauw < jeroendedauw@gmail.com >
+ */
+interface SiteStore {
+
+       /**
+        * Saves the provided site.
+        *
+        * @since 1.21
+        *
+        * @param Site $site
+        *
+        * @return boolean Success indicator
+        */
+       public function saveSite( Site $site );
+
+       /**
+        * Saves the provided sites.
+        *
+        * @since 1.21
+        *
+        * @param Site[] $sites
+        *
+        * @return boolean Success indicator
+        */
+       public function saveSites( array $sites );
+
+       /**
+        * Returns the site with provided global id, or null if there is no such site.
+        *
+        * @since 1.21
+        *
+        * @param string $globalId
+        * @param string $source either 'cache' or 'recache'.
+        * If 'cache', the values are allowed (but not obliged) to come from a cache.
+        *
+        * @return Site|null
+        */
+       public function getSite( $globalId, $source = 'cache' );
+
+       /**
+        * Returns a list of all sites. By default this site is
+        * fetched from the cache, which can be changed to loading
+        * the list from the database using the $useCache parameter.
+        *
+        * @since 1.21
+        *
+        * @param string $source either 'cache' or 'recache'.
+        * If 'cache', the values are allowed (but not obliged) to come from a cache.
+        *
+        * @return SiteList
+        */
+       public function getSites( $source = 'cache' );
+
+       /**
+        * Deletes all sites from the database. After calling clear(), getSites() will return an empty
+        * list and getSite() will return null until saveSite() or saveSites() is called.
+        */
+       public function clear();
+}
diff --git a/includes/site/Sites.php b/includes/site/Sites.php
deleted file mode 100644 (file)
index edd3d64..0000000
+++ /dev/null
@@ -1,192 +0,0 @@
-<?php
-
-/**
- * Represents the site configuration of a wiki.
- * Holds a list of sites (ie SiteList) and takes care
- * of retrieving and caching site information when appropriate.
- *
- * 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
- *
- * @since 1.21
- *
- * @file
- * @ingroup Site
- *
- * @license GNU GPL v2+
- * @author Jeroen De Dauw < jeroendedauw@gmail.com >
- */
-class Sites {
-
-       /**
-        * @since 1.21
-        * @var SiteList|false
-        */
-       protected $sites = false;
-
-       /**
-        * Constructor.
-        *
-        * @since 1.21
-        */
-       protected function __construct() {}
-
-       /**
-        * Returns an instance of Sites.
-        *
-        * @since 1.21
-        *
-        * @return Sites
-        */
-       public static function singleton() {
-               static $instance = false;
-
-               if ( $instance === false ) {
-                       $instance = new static();
-               }
-
-               return $instance;
-       }
-
-       /**
-        * Factory for creating new site objects.
-        *
-        * @since 1.21
-        *
-        * @param string|false $globalId
-        *
-        * @return Site
-        */
-       public static function newSite( $globalId = false ) {
-               /**
-                * @var Site $site
-                */
-               $site = SitesTable::singleton()->newRow( array(), true );
-
-               if ( $globalId !== false ) {
-                       $site->setGlobalId( $globalId );
-               }
-
-               return $site;
-       }
-
-       /**
-        * Returns a list of all sites. By default this site is
-        * fetched from the cache, which can be changed to loading
-        * the list from the database using the $useCache parameter.
-        *
-        * @since 1.21
-        *
-        * @param string $source either 'cache' or 'recache'
-        *
-        * @return SiteList
-        */
-       public function getSites( $source = 'cache' ) {
-               if ( $source === 'cache' ) {
-                       if ( $this->sites === false ) {
-                               $cache = wfGetMainCache();
-                               $sites = $cache->get( wfMemcKey( 'SiteList' ) );
-
-                               if ( is_object( $sites ) ) {
-                                       $this->sites = $sites;
-                               }
-                               else {
-                                       $this->loadSites();
-                               }
-                       }
-               }
-               else {
-                       $this->loadSites();
-               }
-
-               return $this->sites;
-       }
-
-       /**
-        * Returns a list of sites in the given group. Calling getGroup() on any of
-        * the sites in the resulting SiteList shall return $group.
-        *
-        * @since 1.21
-        *
-        * @param string $group th group to get.
-        *
-        * @return SiteList
-        */
-       public function getSiteGroup( $group ) {
-               $sites = self::getSites();
-
-               $siteGroup = new SiteArray();
-
-               /* @var Site $site */
-               foreach ( $sites as $site ) {
-                       if ( $site->getGroup() == $group ) {
-                               $siteGroup->append( $site );
-                       }
-               }
-
-               return $siteGroup;
-       }
-
-       /**
-        * Fetches the site from the database and loads them into the sites field.
-        *
-        * @since 1.21
-        */
-       protected function loadSites() {
-               $this->sites = new SiteArray( SitesTable::singleton()->select() );
-
-               // Batch load the local site identifiers.
-               $dbr = wfGetDB( SitesTable::singleton()->getReadDb() );
-
-               $ids = $dbr->select(
-                       'site_identifiers',
-                       array(
-                               'si_site',
-                               'si_type',
-                               'si_key',
-                       ),
-                       array(),
-                       __METHOD__
-               );
-
-               foreach ( $ids as $id ) {
-                       if ( $this->sites->hasInternalId( $id->si_site ) ) {
-                               $site = $this->sites->getSiteByInternalId( $id->si_site );
-                               $site->addLocalId( $id->si_type, $id->si_key );
-                               $this->sites->setSite( $site );
-                       }
-               }
-
-               $cache = wfGetMainCache();
-               $cache->set( wfMemcKey( 'SiteList' ), $this->sites );
-       }
-
-       /**
-        * Returns the site with provided global id, or false if there is no such site.
-        *
-        * @since 1.21
-        *
-        * @param string $globalId
-        * @param string $source
-        *
-        * @return Site|false
-        */
-       public function getSite( $globalId, $source = 'cache' ) {
-               $sites = $this->getSites( $source );
-
-               return $sites->hasSite( $globalId ) ? $sites->getSite( $globalId ) : false;
-       }
-
-}
diff --git a/includes/site/SitesTable.php b/includes/site/SitesTable.php
deleted file mode 100644 (file)
index bb12740..0000000
+++ /dev/null
@@ -1,136 +0,0 @@
-<?php
-
-/**
- * Represents the sites database table.
- * All access to this table should be done through this class.
- *
- * 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
- *
- * @since 1.21
- *
- * @file
- * @ingroup Site
- *
- * @license GNU GPL v2+
- * @author Jeroen De Dauw < jeroendedauw@gmail.com >
- */
-class SitesTable extends ORMTable {
-
-       /**
-        * @see IORMTable::getName()
-        * @since 1.21
-        * @return string
-        */
-       public function getName() {
-               return 'sites';
-       }
-
-       /**
-        * @see IORMTable::getFieldPrefix()
-        * @since 1.21
-        * @return string
-        */
-       public function getFieldPrefix() {
-               return 'site_';
-       }
-
-       /**
-        * @see IORMTable::getRowClass()
-        * @since 1.21
-        * @return string
-        */
-       public function getRowClass() {
-               return 'SiteObject';
-       }
-
-       /**
-        * @see IORMTable::getFields()
-        * @since 1.21
-        * @return array
-        */
-       public function getFields() {
-               return array(
-                       'id' => 'id',
-
-                       // Site data
-                       'global_key' => 'str',
-                       'type' => 'str',
-                       'group' => 'str',
-                       'source' => 'str',
-                       'language' => 'str',
-                       'protocol' => 'str',
-                       'domain' => 'str',
-                       'data' => 'array',
-
-                       // Site config
-                       'forward' => 'bool',
-                       'config' => 'array',
-               );
-       }
-
-       /**
-        * @see IORMTable::getDefaults()
-        * @since 1.21
-        * @return array
-        */
-       public function getDefaults() {
-               return array(
-                       'type' => Site::TYPE_UNKNOWN,
-                       'group' => Site::GROUP_NONE,
-                       'source' => Site::SOURCE_LOCAL,
-                       'data' => array(),
-
-                       'forward' => false,
-                       'config' => array(),
-                       'language' => 'en', // XXX: can we default to '' instead?
-               );
-       }
-
-       /**
-        * Returns the class name for the provided site type.
-        *
-        * @since 1.21
-        *
-        * @param integer $siteType
-        *
-        * @return string
-        */
-       protected static function getClassForType( $siteType ) {
-               global $wgSiteTypes;
-               return array_key_exists( $siteType, $wgSiteTypes ) ? $wgSiteTypes[$siteType] : 'SiteObject';
-       }
-
-       /**
-        * Factory method to construct a new Site instance.
-        *
-        * @since 1.21
-        *
-        * @param array $data
-        * @param boolean $loadDefaults
-        *
-        * @return Site
-        */
-       public function newRow( array $data, $loadDefaults = false ) {
-               if ( !array_key_exists( 'type', $data ) ) {
-                       $data['type'] = Site::TYPE_UNKNOWN;
-               }
-
-               $class = static::getClassForType( $data['type'] );
-
-               return new $class( $this, $data, $loadDefaults );
-       }
-
-}
\ No newline at end of file
index fe9d41e..5f8a0e4 100644 (file)
@@ -118,7 +118,7 @@ class AllmessagesTablePager extends TablePager {
                $request = $this->getRequest();
 
                $this->filter = $request->getVal( 'filter', 'all' );
-               if( $this->filter === 'all' ){
+               if( $this->filter === 'all' ) {
                        $this->custom = null; // So won't match in either case
                } else {
                        $this->custom = ($this->filter == 'unmodified');
@@ -126,7 +126,7 @@ class AllmessagesTablePager extends TablePager {
 
                $prefix = $this->getLanguage()->ucfirst( $request->getVal( 'prefix', '' ) );
                $prefix = $prefix != '' ? Title::makeTitleSafe( NS_MEDIAWIKI, $request->getVal( 'prefix', null ) ) : null;
-               if( $prefix !== null ){
+               if( $prefix !== null ) {
                        $this->displayPrefix = $prefix->getDBkey();
                        $this->prefix = '/^' . preg_quote( $this->displayPrefix ) . '/i';
                } else {
@@ -150,7 +150,7 @@ class AllmessagesTablePager extends TablePager {
                $msg = wfMessage( 'allmessages-language' );
                $langSelect = Xml::languageSelector( $this->langcode, false, null, $attrs, $msg );
 
-               $out  = Xml::openElement( 'form', array( 'method' => 'get', 'action' => $wgScript, 'id' => 'mw-allmessages-form' ) ) .
+               $out = Xml::openElement( 'form', array( 'method' => 'get', 'action' => $wgScript, 'id' => 'mw-allmessages-form' ) ) .
                        Xml::fieldset( $this->msg( 'allmessages-filter-legend' )->text() ) .
                        Html::hidden( 'title', $this->getTitle()->getPrefixedText() ) .
                        Xml::openElement( 'table', array( 'class' => 'mw-allmessages-table' ) ) . "\n" .
@@ -216,7 +216,7 @@ class AllmessagesTablePager extends TablePager {
        function getAllMessages( $descending ) {
                wfProfileIn( __METHOD__ );
                $messageNames = Language::getLocalisationCache()->getSubitemList( 'en', 'messages' );
-               if( $descending ){
+               if( $descending ) {
                        rsort( $messageNames );
                } else {
                        asort( $messageNames );
@@ -331,15 +331,15 @@ class AllmessagesTablePager extends TablePager {
                        </tr></thead><tbody>\n";
        }
 
-       function formatValue( $field, $value ){
-               switch( $field ){
+       function formatValue( $field, $value ) {
+               switch( $field ) {
 
                        case 'am_title' :
 
                                $title = Title::makeTitle( NS_MEDIAWIKI, $value . $this->suffix );
                                $talk  = Title::makeTitle( NS_MEDIAWIKI_TALK, $value . $this->suffix );
 
-                               if( $this->mCurrentRow->am_customised ){
+                               if( $this->mCurrentRow->am_customised ) {
                                        $title = Linker::linkKnown( $title, $this->getLanguage()->lcfirst( $value ) );
                                } else {
                                        $title = Linker::link(
@@ -351,7 +351,7 @@ class AllmessagesTablePager extends TablePager {
                                        );
                                }
                                if ( $this->mCurrentRow->am_talk_exists ) {
-                                       $talk = Linker::linkKnown( $talk , $this->talk );
+                                       $talk = Linker::linkKnown( $talk, $this->talk );
                                } else {
                                        $talk = Linker::link(
                                                $talk,
@@ -370,12 +370,12 @@ class AllmessagesTablePager extends TablePager {
                return '';
        }
 
-       function formatRow( $row ){
+       function formatRow( $row ) {
                // Do all the normal stuff
                $s = parent::formatRow( $row );
 
                // But if there's a customised message, add that too.
-               if( $row->am_customised ){
+               if( $row->am_customised ) {
                        $s .= Xml::openElement( 'tr', $this->getRowAttrs( $row, true ) );
                        $formatted = strval( $this->formatValue( 'am_actual', $row->am_actual ) );
                        if ( $formatted == '' ) {
@@ -387,19 +387,19 @@ class AllmessagesTablePager extends TablePager {
                return $s;
        }
 
-       function getRowAttrs( $row, $isSecond = false ){
+       function getRowAttrs( $row, $isSecond = false ) {
                $arr = array();
-               if( $row->am_customised ){
+               if( $row->am_customised ) {
                        $arr['class'] = 'allmessages-customised';
                }
-               if( !$isSecond ){
+               if( !$isSecond ) {
                        $arr['id'] = Sanitizer::escapeId( 'msg_' . $this->getLanguage()->lcfirst( $row->am_title ) );
                }
                return $arr;
        }
 
-       function getCellAttrs( $field, $value ){
-               if( $this->mCurrentRow->am_customised && $field == 'am_title' ){
+       function getCellAttrs( $field, $value ) {
+               if( $this->mCurrentRow->am_customised && $field == 'am_title' ) {
                        return array( 'rowspan' => '2', 'class' => $field );
                } elseif( $field == 'am_title' ) {
                        return array( 'class' => $field );
@@ -420,16 +420,15 @@ class AllmessagesTablePager extends TablePager {
                return SpecialPage::getTitleFor( 'Allmessages', false );
        }
 
-       function isFieldSortable( $x ){
+       function isFieldSortable( $x ) {
                return false;
        }
 
-       function getDefaultSort(){
+       function getDefaultSort() {
                return '';
        }
 
-       function getQueryInfo(){
+       function getQueryInfo() {
                return '';
        }
 }
-
index 0f8b255..eeda739 100644 (file)
@@ -61,7 +61,7 @@ class SpecialAllpages extends IncludableSpecialPage {
         *
         * @param $name string: name of the special page, as seen in links and URLs (default: 'Allpages')
         */
-       function __construct( $name = 'Allpages' ){
+       function __construct( $name = 'Allpages' ) {
                parent::__construct( $name );
        }
 
@@ -127,7 +127,7 @@ class SpecialAllpages extends IncludableSpecialPage {
                        Xml::label( $this->msg( 'allpagesfrom' )->text(), 'nsfrom' ) .
                        "       </td>
        <td class='mw-input'>" .
-                       Xml::input( 'from', 30, str_replace('_',' ',$from), array( 'id' => 'nsfrom' ) ) .
+                       Xml::input( 'from', 30, str_replace( '_', ' ', $from ), array( 'id' => 'nsfrom' ) ) .
                        "       </td>
 </tr>
 <tr>
@@ -135,7 +135,7 @@ class SpecialAllpages extends IncludableSpecialPage {
                        Xml::label( $this->msg( 'allpagesto' )->text(), 'nsto' ) .
                        "       </td>
                        <td class='mw-input'>" .
-                       Xml::input( 'to', 30, str_replace('_',' ',$to), array( 'id' => 'nsto' ) ) .
+                       Xml::input( 'to', 30, str_replace( '_', ' ', $to ), array( 'id' => 'nsto' ) ) .
                        "               </td>
 </tr>
 <tr>
@@ -180,7 +180,7 @@ class SpecialAllpages extends IncludableSpecialPage {
                $where = array( 'page_namespace' => $namespace );
 
                if ( $hideredirects ) {
-                       $where[ 'page_is_redirect' ] = 0;
+                       $where['page_is_redirect'] = 0;
                }
 
                $from = Title::makeTitleSafe( $namespace, $from );
@@ -188,18 +188,18 @@ class SpecialAllpages extends IncludableSpecialPage {
                $from = ( $from && $from->isLocal() ) ? $from->getDBkey() : null;
                $to = ( $to && $to->isLocal() ) ? $to->getDBkey() : null;
 
-               if( isset($from) )
-                       $where[] = 'page_title >= '.$dbr->addQuotes( $from );
-               if( isset($to) )
-                       $where[] = 'page_title <= '.$dbr->addQuotes( $to );
+               if( isset( $from ) )
+                       $where[] = 'page_title >= ' . $dbr->addQuotes( $from );
+               if( isset( $to ) )
+                       $where[] = 'page_title <= ' . $dbr->addQuotes( $to );
 
                global $wgMemc;
-               $key = wfMemcKey( 'allpages', 'ns', $namespace, $from, $to );
+               $key = wfMemcKey( 'allpages', 'ns', $namespace, sha1( $from ), sha1( $to ) );
                $lines = $wgMemc->get( $key );
 
                $count = $dbr->estimateRowCount( 'page', '*', $where, __METHOD__ );
-               $maxPerSubpage = intval($count/$this->maxLineCount);
-               $maxPerSubpage = max($maxPerSubpage,$this->maxPerPage);
+               $maxPerSubpage = intval( $count / $this->maxLineCount );
+               $maxPerSubpage = max( $maxPerSubpage, $this->maxPerPage );
 
                if( !is_array( $lines ) ) {
                        $options = array( 'LIMIT' => 1 );
@@ -217,9 +217,9 @@ class SpecialAllpages extends IncludableSpecialPage {
                                        : array( 'page_title >= ' . $dbr->addQuotes( $lastTitle ) );
                                $res = $dbr->select( 'page', /* FROM */
                                        'page_title', /* WHAT */
-                                       array_merge($where,$chunk),
+                                       array_merge( $where, $chunk ),
                                        __METHOD__,
-                                       array ('LIMIT' => 2, 'OFFSET' => $maxPerSubpage - 1, 'ORDER BY' => 'page_title ASC')
+                                       array( 'LIMIT' => 2, 'OFFSET' => $maxPerSubpage - 1, 'ORDER BY' => 'page_title ASC' )
                                );
 
                                $s = $dbr->fetchObject( $res );
@@ -228,7 +228,7 @@ class SpecialAllpages extends IncludableSpecialPage {
                                } else {
                                        // Final chunk, but ended prematurely. Go back and find the end.
                                        $endTitle = $dbr->selectField( 'page', 'MAX(page_title)',
-                                               array_merge($where,$chunk),
+                                               array_merge( $where, $chunk ),
                                                __METHOD__ );
                                        array_push( $lines, $endTitle );
                                        $done = true;
@@ -250,7 +250,7 @@ class SpecialAllpages extends IncludableSpecialPage {
                // If there are only two or less sections, don't even display them.
                // Instead, display the first section directly.
                if( count( $lines ) <= 2 ) {
-                       if( !empty($lines) ) {
+                       if( !empty( $lines ) ) {
                                $this->showChunk( $namespace, $from, $to, $hideredirects );
                        } else {
                                $output->addHTML( $this->namespaceForm( $namespace, $from, $to, $hideredirects ) );
@@ -272,7 +272,7 @@ class SpecialAllpages extends IncludableSpecialPage {
                if( $this->including() ) {
                        $out2 = '';
                } else {
-                       if( isset($from) || isset($to) ) {
+                       if( isset( $from ) || isset( $to ) ) {
                                $out2 = Xml::openElement( 'table', array( 'class' => 'mw-allpages-table-form' ) ).
                                                '<tr>
                                                        <td>' .
@@ -311,12 +311,12 @@ class SpecialAllpages extends IncludableSpecialPage {
                $queryparams = $namespace ? "namespace=$namespace&" : '';
 
                $queryhideredirects = array();
-               if ($hideredirects) {
-                       $queryhideredirects[ 'hideredirects' ] = 1;
+               if ( $hideredirects ) {
+                       $queryhideredirects['hideredirects'] = 1;
                }
 
                $special = $this->getTitle();
-               $link = htmlspecialchars( $special->getLocalUrl( $queryparams . 'from=' . urlencode($inpoint) . '&to=' . urlencode($outpoint), $queryhideredirects ) );
+               $link = htmlspecialchars( $special->getLocalUrl( $queryparams . 'from=' . urlencode( $inpoint ) . '&to=' . urlencode( $outpoint ), $queryhideredirects ) );
 
                $out = $this->msg( 'alphaindexline' )->rawParams(
                        "<a href=\"$link\">$inpointf</a></td><td>",
@@ -335,7 +335,7 @@ class SpecialAllpages extends IncludableSpecialPage {
                global $wgContLang;
                $output = $this->getOutput();
 
-               $fromList = $this->getNamespaceKeyAndText($namespace, $from);
+               $fromList = $this->getNamespaceKeyAndText( $namespace, $from );
                $toList = $this->getNamespaceKeyAndText( $namespace, $to );
                $namespaces = $wgContLang->getNamespaces();
                $n = 0;
@@ -357,7 +357,7 @@ class SpecialAllpages extends IncludableSpecialPage {
                        );
 
                        if ( $hideredirects ) {
-                               $conds[ 'page_is_redirect' ] = 0;
+                               $conds['page_is_redirect'] = 0;
                        }
 
                        if( $toKey !== "" ) {
@@ -416,10 +416,10 @@ class SpecialAllpages extends IncludableSpecialPage {
                                $res_prev = $dbr->select(
                                        'page',
                                        'page_title',
-                                       array( 'page_namespace' => $namespace, 'page_title < '.$dbr->addQuotes($from) ),
+                                       array( 'page_namespace' => $namespace, 'page_title < ' . $dbr->addQuotes( $from ) ),
                                        __METHOD__,
                                        array( 'ORDER BY' => 'page_title DESC',
-                                               'LIMIT' => $this->maxPerPage, 'OFFSET' => ($this->maxPerPage - 1 )
+                                               'LIMIT' => $this->maxPerPage, 'OFFSET' => ( $this->maxPerPage - 1 )
                                        )
                                );
 
@@ -438,7 +438,7 @@ class SpecialAllpages extends IncludableSpecialPage {
                                                array( 'page_namespace' => $namespace ), __METHOD__, $options );
                                        # Show the previous link if it s not the current requested chunk
                                        if( $from != $reallyFirstPage_title ) {
-                                               $prevTitle =  Title::makeTitle( $namespace, $reallyFirstPage_title );
+                                               $prevTitle = Title::makeTitle( $namespace, $reallyFirstPage_title );
                                        } else {
                                                $prevTitle = null;
                                        }
@@ -477,7 +477,7 @@ class SpecialAllpages extends IncludableSpecialPage {
 
                        if( $n == $this->maxPerPage && $s = $res->fetchObject() ) {
                                # $s is the first link of the next chunk
-                               $t = Title::makeTitle($namespace, $s->page_title);
+                               $t = Title::makeTitle( $namespace, $s->page_title );
                                $query = array( 'from' => $t->getText() );
 
                                if( $namespace )
@@ -518,11 +518,11 @@ class SpecialAllpages extends IncludableSpecialPage {
         * @param $text String: the name of the article
         * @return array( int namespace, string dbkey, string pagename ) or NULL on error
         */
-       protected function getNamespaceKeyAndText($ns, $text) {
+       protected function getNamespaceKeyAndText( $ns, $text ) {
                if ( $text == '' )
                        return array( $ns, '', '' ); # shortcut for common case
 
-               $t = Title::makeTitleSafe($ns, $text);
+               $t = Title::makeTitleSafe( $ns, $text );
                if ( $t && $t->isLocal() ) {
                        return array( $t->getNamespace(), $t->getDBkey(), $t->getText() );
                } elseif ( $t ) {
@@ -530,8 +530,8 @@ class SpecialAllpages extends IncludableSpecialPage {
                }
 
                # try again, in case the problem was an empty pagename
-               $text = preg_replace('/(#|$)/', 'X$1', $text);
-               $t = Title::makeTitleSafe($ns, $text);
+               $text = preg_replace( '/(#|$)/', 'X$1', $text );
+               $t = Title::makeTitleSafe( $ns, $text );
                if ( $t && $t->isLocal() ) {
                        return array( $t->getNamespace(), '', '' );
                } else {
index 42d3377..bfa2f95 100644 (file)
@@ -33,6 +33,6 @@ class SpecialBlankpage extends UnlistedSpecialPage {
        }
        public function execute( $par ) {
                $this->setHeaders();
-               $this->getOutput()->addWikiMsg('intentionallyblankpage');
+               $this->getOutput()->addWikiMsg( 'intentionallyblankpage' );
        }
 }
index af39b34..ac05f67 100644 (file)
@@ -62,7 +62,7 @@ class SpecialBlock extends FormSpecialPage {
         * @throws ErrorPageError
         */
        protected function checkExecutePermissions( User $user ) {
-                parent::checkExecutePermissions( $user );
+               parent::checkExecutePermissions( $user );
 
                # bug 15810: blocked admins should have limited access here
                $status = self::checkUnblockSelf( $this->target, $user );
@@ -240,7 +240,7 @@ class SpecialBlock extends FormSpecialPage {
 
                if ( $block instanceof Block && !$block->mAuto # The block exists and isn't an autoblock
                        && ( $this->type != Block::TYPE_RANGE # The block isn't a rangeblock
-                         || $block->getTarget() == $this->target ) # or if it is, the range is what we're about to block
+                               || $block->getTarget() == $this->target ) # or if it is, the range is what we're about to block
                        )
                {
                        $fields['HardBlock']['default'] = $block->isHardblock();
@@ -387,7 +387,7 @@ class SpecialBlock extends FormSpecialPage {
                        );
                }
 
-               $text =  Html::rawElement(
+               $text = Html::rawElement(
                        'p',
                        array( 'class' => 'mw-ipb-conveniencelinks' ),
                        $this->getLanguage()->pipeList( $links )
@@ -651,7 +651,7 @@ class SpecialBlock extends FormSpecialPage {
                }
 
                if ( $data['HideUser'] ) {
-                       if ( !$performer->isAllowed('hideuser') ) {
+                       if ( !$performer->isAllowed( 'hideuser' ) ) {
                                # this codepath is unreachable except by a malicious user spoofing forms,
                                # or by race conditions (user has oversight and sysop, loads block form,
                                # and is de-oversighted before submission); so need to fail completely
@@ -694,10 +694,16 @@ class SpecialBlock extends FormSpecialPage {
                # Try to insert block. Is there a conflicting block?
                $status = $block->insert();
                if ( !$status ) {
+                       # Indicates whether the user is confirming the block and is aware of
+                       # the conflict (did not change the block target in the meantime)
+                       $blockNotConfirmed = !$data['Confirm'] || ( array_key_exists( 'PreviousTarget', $data )
+                               && $data['PreviousTarget'] !== $target );
+
+                       # Special case for API - bug 32434
+                       $reblockNotAllowed = ( array_key_exists( 'Reblock', $data ) && !$data['Reblock'] );
+
                        # Show form unless the user is already aware of this...
-                       if ( !$data['Confirm'] || ( array_key_exists( 'PreviousTarget', $data )
-                               && $data['PreviousTarget'] !== $target ) )
-                       {
+                       if( $blockNotConfirmed || $reblockNotAllowed ) {
                                return array( array( 'ipb_already_blocked', $block->getTarget() ) );
                        # Otherwise, try to update the block...
                        } else {
@@ -764,7 +770,7 @@ class SpecialBlock extends FormSpecialPage {
                        $logParams
                );
                # Relate log ID to block IDs (bug 25763)
-               $blockIds = array_merge( array( $status['id'] ), $status['autoIds']  );
+               $blockIds = array_merge( array( $status['id'] ), $status['autoIds'] );
                $log->addRelations( 'ipb_id', $blockIds, $log_id );
 
                # Report to the user
index d740082..56b9b00 100644 (file)
@@ -113,14 +113,14 @@ class SpecialBlockList extends SpecialPage {
 
                $conds = array();
                # Is the user allowed to see hidden blocks?
-               if ( !$this->getUser()->isAllowed( 'hideuser' ) ){
+               if ( !$this->getUser()->isAllowed( 'hideuser' ) ) {
                        $conds['ipb_deleted'] = 0;
                }
 
-               if ( $this->target !== '' ){
+               if ( $this->target !== '' ) {
                        list( $target, $type ) = Block::parseTarget( $this->target );
 
-                       switch( $type ){
+                       switch( $type ) {
                                case Block::TYPE_ID:
                                case Block::TYPE_AUTO:
                                        $conds['ipb_id'] = $target;
@@ -269,11 +269,11 @@ class BlockListPager extends TablePager {
                                break;
 
                        case 'ipb_target':
-                               if( $row->ipb_auto ){
+                               if( $row->ipb_auto ) {
                                        $formatted = $this->msg( 'autoblockid', $row->ipb_id )->parse();
                                } else {
                                        list( $target, $type ) = Block::parseTarget( $row->ipb_address );
-                                       switch( $type ){
+                                       switch( $type ) {
                                                case Block::TYPE_USER:
                                                case Block::TYPE_IP:
                                                        $formatted = Linker::userLink( $target->getId(), $target );
@@ -292,8 +292,8 @@ class BlockListPager extends TablePager {
 
                        case 'ipb_expiry':
                                $formatted = $this->getLanguage()->formatExpiry( $value, /* User preference timezone */ true );
-                               if( $this->getUser()->isAllowed( 'block' ) ){
-                                       if( $row->ipb_auto ){
+                               if( $this->getUser()->isAllowed( 'block' ) ) {
+                                       if( $row->ipb_auto ) {
                                                $links[] = Linker::linkKnown(
                                                        SpecialPage::getTitleFor( 'Unblock' ),
                                                        $msg['unblocklink'],
@@ -391,14 +391,14 @@ class BlockListPager extends TablePager {
                );
 
                # Is the user allowed to see hidden blocks?
-               if ( !$this->getUser()->isAllowed( 'hideuser' ) ){
+               if ( !$this->getUser()->isAllowed( 'hideuser' ) ) {
                        $info['conds']['ipb_deleted'] = 0;
                }
 
                return $info;
        }
 
-       public function getTableClass(){
+       public function getTableClass() {
                return 'TablePager mw-blocklist';
        }
 
@@ -418,7 +418,7 @@ class BlockListPager extends TablePager {
         * Do a LinkBatch query to minimise database load when generating all these links
         * @param $result
         */
-       function preprocessResults( $result ){
+       function preprocessResults( $result ) {
                wfProfileIn( __METHOD__ );
                # Do a link batch query
                $lb = new LinkBatch;
@@ -437,7 +437,7 @@ class BlockListPager extends TablePager {
                }
 
                $ua = UserArray::newFromIDs( $userids );
-               foreach( $ua as $user ){
+               foreach( $ua as $user ) {
                        $name = str_replace( ' ', '_', $user->getName() );
                        $lb->add( NS_USER, $name );
                        $lb->add( NS_USER_TALK, $name );
@@ -472,7 +472,7 @@ class HTMLBlockedUsersItemSelect extends HTMLSelectField {
                        // This adds the explicitly requested limit value to the drop-down,
                        // then makes sure it's sorted correctly so when we output the list
                        // later, the custom option doesn't just show up last.
-                       $this->mParams['options'][ $this->mParent->getLanguage()->formatNum( $value ) ] = intval($value);
+                       $this->mParams['options'][$this->mParent->getLanguage()->formatNum( $value )] = intval( $value );
                        asort( $this->mParams['options'] );
                }
 
index 6d27c1b..255b1b6 100644 (file)
@@ -62,7 +62,7 @@ class SpecialBookSources extends SpecialPage {
        }
 
        /**
-        * Returns whether a given ISBN (10 or 13) is valid.  True indicates validity.
+        * Returns whether a given ISBN (10 or 13) is valid. True indicates validity.
         * @param $isbn string ISBN passed for check
         * @return bool
         */
@@ -71,7 +71,7 @@ class SpecialBookSources extends SpecialPage {
                $sum = 0;
                if( strlen( $isbn ) == 13 ) {
                        for( $i = 0; $i < 12; $i++ ) {
-                               if($i % 2 == 0) {
+                               if( $i % 2 == 0 ) {
                                        $sum += $isbn[$i];
                                } else {
                                        $sum += 3 * $isbn[$i];
@@ -79,19 +79,19 @@ class SpecialBookSources extends SpecialPage {
                        }
 
                        $check = (10 - ($sum % 10)) % 10;
-                       if ($check == $isbn[12]) {
+                       if ( $check == $isbn[12] ) {
                                return true;
                        }
                } elseif( strlen( $isbn ) == 10 ) {
-                       for($i = 0; $i < 9; $i++) {
+                       for( $i = 0; $i < 9; $i++ ) {
                                $sum += $isbn[$i] * ($i + 1);
                        }
 
                        $check = $sum % 11;
-                       if($check == 10) {
+                       if( $check == 10 ) {
                                $check = "X";
                        }
-                       if($check == $isbn[9]) {
+                       if( $check == $isbn[9] ) {
                                return true;
                        }
                }
index 97de72a..77b69e8 100644 (file)
@@ -50,6 +50,7 @@ class BrokenRedirectsPage extends QueryPage {
        }
 
        function getQueryInfo() {
+               $dbr = wfGetDB( DB_SLAVE );
                return array(
                        'tables' => array(
                                'redirect',
@@ -68,7 +69,7 @@ class BrokenRedirectsPage extends QueryPage {
                                // but aren't "broken" either.
                                // Special pages and interwiki links
                                'rd_namespace >= 0',
-                               '(rd_interwiki IS NULL OR rd_interwiki = "")',
+                               'rd_interwiki IS NULL OR rd_interwiki = ' . $dbr->addQuotes( '' ),
                                'p2.page_namespace IS NULL',
                        ),
                        'join_conds' => array(
index 1232e3f..44388c4 100644 (file)
@@ -72,7 +72,7 @@ class CategoryPager extends AlphabeticPager {
        function getQueryInfo() {
                return array(
                        'tables' => array( 'category' ),
-                       'fields' => array( 'cat_title','cat_pages' ),
+                       'fields' => array( 'cat_title', 'cat_pages' ),
                        'conds' => array( 'cat_pages > 0' ),
                        'options' => array( 'USE INDEX' => 'cat_title' ),
                );
@@ -112,7 +112,7 @@ class CategoryPager extends AlphabeticPager {
                return parent::getBody();
        }
 
-       function formatRow($result) {
+       function formatRow( $result ) {
                $title = Title::makeTitle( NS_CATEGORY, $result->cat_title );
                $titleText = Linker::link( $title, htmlspecialchars( $title->getText() ) );
                $count = $this->msg( 'nmembers' )->numParams( $result->cat_pages )->escaped();
index eae8e3a..53faba7 100644 (file)
@@ -195,7 +195,7 @@ class SpecialChangeEmail extends UnlistedSpecialPage {
                        if ( $type != 'text' ) {
                                $out .= Xml::label( $this->msg( $label )->text(), $name );
                        } else {
-                               $out .=  $this->msg( $label )->escaped();
+                               $out .= $this->msg( $label )->escaped();
                        }
                        $out .= "</td>\n";
                        $out .= "\t<td class='mw-input'>";
index 54a2771..fba2bf0 100644 (file)
@@ -73,8 +73,10 @@ class SpecialChangePassword extends UnlistedSpecialPage {
                                }
 
                                $this->attemptReset( $this->mNewpass, $this->mRetype );
-                               $this->getOutput()->addWikiMsg( 'resetpass_success' );
-                               if( !$user->isLoggedIn() ) {
+
+                               if( $user->isLoggedIn() ) {
+                                       $this->doReturnTo();
+                               } else {
                                        LoginForm::setLoginToken();
                                        $token = LoginForm::getLoginToken();
                                        $data = array(
@@ -82,7 +84,7 @@ class SpecialChangePassword extends UnlistedSpecialPage {
                                                'wpName'       => $this->mUserName,
                                                'wpDomain'     => $this->mDomain,
                                                'wpLoginToken' => $token,
-                                               'wpPassword'   => $this->mNewpass,
+                                               'wpPassword'   => $request->getVal( 'wpNewPassword' ),
                                                'returnto'     => $request->getVal( 'returnto' ),
                                        );
                                        if( $request->getCheck( 'wpRemember' ) ) {
@@ -92,7 +94,7 @@ class SpecialChangePassword extends UnlistedSpecialPage {
                                        $login->setContext( $this->getContext() );
                                        $login->execute( null );
                                }
-                               $this->doReturnTo();
+                               return;
                        } catch( PasswordError $e ) {
                                $this->error( $e->getMessage() );
                        }
@@ -112,7 +114,7 @@ class SpecialChangePassword extends UnlistedSpecialPage {
         * @param $msg string
         */
        function error( $msg ) {
-               $this->getOutput()->addHTML( Xml::element('p', array( 'class' => 'error' ), $msg ) );
+               $this->getOutput()->addHTML( Xml::element( 'p', array( 'class' => 'error' ), $msg ) );
        }
 
        function showForm() {
@@ -202,7 +204,7 @@ class SpecialChangePassword extends UnlistedSpecialPage {
                        if ( $type != 'text' )
                                $out .= Xml::label( $this->msg( $label )->text(), $name );
                        else
-                               $out .=  $this->msg( $label )->escaped();
+                               $out .= $this->msg( $label )->escaped();
                        $out .= "</td>\n";
                        $out .= "\t<td class='mw-input'>";
                        $out .= $field;
@@ -216,7 +218,13 @@ class SpecialChangePassword extends UnlistedSpecialPage {
         * @throws PasswordError when cannot set the new password because requirements not met.
         */
        protected function attemptReset( $newpass, $retype ) {
-               $user = User::newFromName( $this->mUserName );
+               $isSelf = ( $this->mUserName === $this->getUser()->getName() );
+               if ( $isSelf ) {
+                       $user = $this->getUser();
+               } else {
+                       $user = User::newFromName( $this->mUserName );
+               }
+
                if( !$user || $user->isAnon() ) {
                        throw new PasswordError( $this->msg( 'nosuchusershort', $this->mUserName )->text() );
                }
@@ -231,7 +239,7 @@ class SpecialChangePassword extends UnlistedSpecialPage {
                        throw new PasswordError( $this->msg( 'login-throttled' )->text() );
                }
 
-               if( !$user->checkTemporaryPassword($this->mOldpass) && !$user->checkPassword($this->mOldpass) ) {
+               if( !$user->checkTemporaryPassword( $this->mOldpass ) && !$user->checkPassword( $this->mOldpass ) ) {
                        wfRunHooks( 'PrefsPasswordAudit', array( $user, $newpass, 'wrongpassword' ) );
                        throw new PasswordError( $this->msg( 'resetpass-wrong-oldpass' )->text() );
                }
@@ -250,7 +258,12 @@ class SpecialChangePassword extends UnlistedSpecialPage {
                        throw new PasswordError( $e->getMessage() );
                }
 
-               $user->setCookies();
+               if ( $isSelf ) {
+                       // This is needed to keep the user connected since
+                       // changing the password also modifies the user's token.
+                       $user->setCookies();
+               }
+
                $user->saveSettings();
        }
 }
index 2b7036c..8be1cf0 100644 (file)
@@ -106,7 +106,7 @@ class SpecialComparePages extends SpecialPage {
                $form->trySubmit();
        }
 
-       public static function showDiff( $data, HTMLForm $form ){
+       public static function showDiff( $data, HTMLForm $form ) {
                $rev1 = self::revOrTitle( $data['Revision1'], $data['Page1'] );
                $rev2 = self::revOrTitle( $data['Revision2'], $data['Page2'] );
 
@@ -128,11 +128,11 @@ class SpecialComparePages extends SpecialPage {
        }
 
        public static function revOrTitle( $revision, $title ) {
-               if( $revision ){
+               if( $revision ) {
                        return $revision;
                } elseif( $title ) {
                        $title = Title::newFromText( $title );
-                       if( $title instanceof Title ){
+                       if( $title instanceof Title ) {
                                return $title->getLatestRevID();
                        }
                }
index c58d4da..af4d4fb 100644 (file)
@@ -152,7 +152,7 @@ class SpecialContributions extends SpecialPage {
                                $apiParams['month'] = $this->opts['month'];
                        }
 
-                       $url = wfScript( 'api' ) . '?' . wfArrayToCGI( $apiParams );
+                       $url = wfScript( 'api' ) . '?' . wfArrayToCgi( $apiParams );
 
                        $out->redirect( $url, '301' );
                        return;
@@ -360,7 +360,7 @@ class SpecialContributions extends SpecialPage {
                if ( !isset( $this->opts['target'] ) ) {
                        $this->opts['target'] = '';
                } else {
-                       $this->opts['target'] = str_replace( '_' , ' ' , $this->opts['target'] );
+                       $this->opts['target'] = str_replace( '_', ' ', $this->opts['target'] );
                }
 
                if ( !isset( $this->opts['namespace'] ) ) {
@@ -424,7 +424,7 @@ class SpecialContributions extends SpecialPage {
                        Xml::radioLabel(
                                $this->msg( 'sp-contributions-newbies' )->text(),
                                'contribs',
-                               'newbie' ,
+                               'newbie',
                                'newbie',
                                $this->opts['contribs'] == 'newbie',
                                array( 'class' => 'mw-input' )
@@ -727,10 +727,10 @@ class ContribsPager extends ReverseChronologicalPager {
                        }
                }
                if ( $this->deletedOnly ) {
-                       $condition[] = "rev_deleted != '0'";
+                       $condition[] = 'rev_deleted != 0';
                }
                if ( $this->topOnly ) {
-                       $condition[] = "rev_id = page_latest";
+                       $condition[] = 'rev_id = page_latest';
                }
                return array( $tables, $index, $condition, $join_conds );
        }
@@ -827,7 +827,7 @@ class ContribsPager extends ReverseChronologicalPager {
                 */
                wfSuppressWarnings();
                $rev = new Revision( $row );
-               $validRevision = $rev->getParentId() !== null;
+               $validRevision = (bool) $rev->getId();
                wfRestoreWarnings();
 
                if ( $validRevision ) {
@@ -946,8 +946,12 @@ class ContribsPager extends ReverseChronologicalPager {
                // Let extensions add data
                wfRunHooks( 'ContributionsLineEnding', array( $this, &$ret, $row, &$classes ) );
 
-               $classes = implode( ' ', $classes );
-               $ret = "<li class=\"$classes\">$ret</li>\n";
+               if ( $classes === array() && $ret === '' ) {
+                       wfDebug( 'Dropping Special:Contribution row that could not be formatted' );
+                       $ret = "<!-- Could not format Special:Contribution row. -->\n";
+               } else {
+                       $ret = Html::rawElement( 'li', array( 'class' => $classes ), $ret ) . "\n";
+               }
 
                wfProfileOut( __METHOD__ );
                return $ret;
index bdeb7fe..0c934a4 100644 (file)
@@ -168,7 +168,7 @@ class DeletedContribsPager extends IndexPager {
 
                $user = $this->getUser();
 
-               if( $user->isAllowed('deletedtext') ) {
+               if( $user->isAllowed( 'deletedtext' ) ) {
                        $last = Linker::linkKnown(
                                $undelete,
                                $this->messages['diff'],
@@ -475,7 +475,7 @@ class DeletedContributionsPage extends SpecialPage {
                if ( !isset( $options['target'] ) ) {
                        $options['target'] = '';
                } else {
-                       $options['target'] = str_replace( '_' , ' ' , $options['target'] );
+                       $options['target'] = str_replace( '_', ' ', $options['target'] );
                }
 
                if ( !isset( $options['namespace'] ) ) {
@@ -499,7 +499,7 @@ class DeletedContributionsPage extends SpecialPage {
                        $f .= "\t" . Html::hidden( $name, $value ) . "\n";
                }
 
-               $f .=  Xml::openElement( 'fieldset' ) .
+               $f .= Xml::openElement( 'fieldset' ) .
                        Xml::element( 'legend', array(), $this->msg( 'sp-contributions-search' )->text() ) .
                        Xml::tags( 'label', array( 'for' => 'target' ), $this->msg( 'sp-contributions-username' )->parse() ) . ' ' .
                        Html::input( 'target', $options['target'], 'text', array(
index 48180a7..a9c554a 100644 (file)
@@ -59,20 +59,20 @@ class DisambiguationsPage extends QueryPage {
                        if( $dp->getNamespace() != NS_TEMPLATE ) {
                                # @todo FIXME: We assume the disambiguation message is a template but
                                # the page can potentially be from another namespace :/
-                               wfDebug("Mediawiki:disambiguationspage message does not refer to a template!\n");
+                               wfDebug( "Mediawiki:disambiguationspage message does not refer to a template!\n" );
                        }
                        $linkBatch->addObj( $dp );
                } else {
                                # Get all the templates linked from the Mediawiki:Disambiguationspage
                                $disPageObj = Title::makeTitleSafe( NS_MEDIAWIKI, 'disambiguationspage' );
                                $res = $dbr->select(
-                                       array('pagelinks', 'page'),
+                                       array( 'pagelinks', 'page' ),
                                        'pl_title',
-                                       array('page_id = pl_from',
+                                       array( 'page_id = pl_from',
                                                'pl_namespace' => NS_TEMPLATE,
                                                'page_namespace' => $disPageObj->getNamespace(),
-                                               'page_title' => $disPageObj->getDBkey()),
-                                       __METHOD__ );
+                                               'page_title' => $disPageObj->getDBkey()
+                                       ), __METHOD__ );
 
                                foreach ( $res as $row ) {
                                        $linkBatch->addObj( Title::makeTitle( NS_TEMPLATE, $row->pl_title ));
index ee07323..512fd85 100644 (file)
@@ -51,6 +51,7 @@ class DoubleRedirectsPage extends QueryPage {
 
        function reallyGetQueryInfo( $namespace = null, $title = null ) {
                $limitToTitle = !( $namespace === null && $title === null );
+               $dbr = wfGetDB( DB_SLAVE );
                $retval = array (
                        'tables' => array (
                                'ra' => 'redirect',
@@ -82,7 +83,7 @@ class DoubleRedirectsPage extends QueryPage {
 
                                // Need to check both NULL and "" for some reason,
                                // apparently either can be stored for non-iw entries.
-                               '(ra.rd_interwiki IS NULL OR ra.rd_interwiki = "")',
+                               'ra.rd_interwiki IS NULL OR ra.rd_interwiki = ' . $dbr->addQuotes( '' ),
 
                                'pb.page_namespace = ra.rd_namespace',
                                'pb.page_title = ra.rd_title',
@@ -117,7 +118,7 @@ class DoubleRedirectsPage extends QueryPage {
                        $dbr = wfGetDB( DB_SLAVE );
                        $qi = $this->reallyGetQueryInfo( $result->namespace,
                                        $result->title );
-                       $res = $dbr->select($qi['tables'], $qi['fields'],
+                       $res = $dbr->select( $qi['tables'], $qi['fields'],
                                        $qi['conds'], __METHOD__ );
                        if ( $res ) {
                                $result = $dbr->fetchObject( $res );
@@ -128,7 +129,7 @@ class DoubleRedirectsPage extends QueryPage {
                }
 
                $titleB = Title::makeTitle( $result->nsb, $result->tb );
-               $titleC = Title::makeTitle( $result->nsc, $result->tc, '',  $result->iwc );
+               $titleC = Title::makeTitle( $result->nsc, $result->tc, '', $result->iwc );
 
                $linkA = Linker::linkKnown(
                        $titleA,
index eca62f2..40971c7 100644 (file)
@@ -49,7 +49,7 @@ class SpecialEditWatchlist extends UnlistedSpecialPage {
 
        private $badItems = array();
 
-       public function __construct(){
+       public function __construct() {
                parent::__construct( 'EditWatchlist' );
        }
 
@@ -85,9 +85,9 @@ class SpecialEditWatchlist extends UnlistedSpecialPage {
 
                # B/C: $mode used to be waaay down the parameter list, and the first parameter
                # was $wgUser
-               if( $mode instanceof User ){
+               if( $mode instanceof User ) {
                        $args = func_get_args();
-                       if( count( $args >= 4 ) ){
+                       if( count( $args >= 4 ) ) {
                                $mode = $args[3];
                        }
                }
@@ -101,7 +101,7 @@ class SpecialEditWatchlist extends UnlistedSpecialPage {
                        case self::EDIT_RAW:
                                $out->setPageTitle( $this->msg( 'watchlistedit-raw-title' ) );
                                $form = $this->getRawForm();
-                               if( $form->show() ){
+                               if( $form->show() ) {
                                        $out->addHTML( $this->successMessage );
                                        $out->addReturnTo( SpecialPage::getTitleFor( 'Watchlist' ) );
                                }
@@ -111,7 +111,7 @@ class SpecialEditWatchlist extends UnlistedSpecialPage {
                        default:
                                $out->setPageTitle( $this->msg( 'watchlistedit-normal-title' ) );
                                $form = $this->getNormalForm();
-                               if( $form->show() ){
+                               if( $form->show() ) {
                                        $out->addHTML( $this->successMessage );
                                        $out->addReturnTo( SpecialPage::getTitleFor( 'Watchlist' ) );
                                } elseif ( $this->toc !== false ) {
@@ -153,7 +153,7 @@ class SpecialEditWatchlist extends UnlistedSpecialPage {
                return array_unique( $list );
        }
 
-       public function submitRaw( $data ){
+       public function submitRaw( $data ) {
                $wanted = $this->extractTitles( $data['Titles'] );
                $current = $this->getWatchlist();
 
@@ -164,7 +164,7 @@ class SpecialEditWatchlist extends UnlistedSpecialPage {
                        $this->unwatchTitles( $toUnwatch );
                        $this->getUser()->invalidateCache();
 
-                       if( count( $toWatch ) > 0 || count( $toUnwatch ) > 0 ){
+                       if( count( $toWatch ) > 0 || count( $toUnwatch ) > 0 ) {
                                $this->successMessage = $this->msg( 'watchlistedit-raw-done' )->parse();
                        } else {
                                return false;
@@ -185,7 +185,7 @@ class SpecialEditWatchlist extends UnlistedSpecialPage {
                        $this->clearWatchlist();
                        $this->getUser()->invalidateCache();
 
-                       if( count( $current ) > 0 ){
+                       if( count( $current ) > 0 ) {
                                $this->successMessage = $this->msg( 'watchlistedit-raw-done' )->parse();
                        } else {
                                return false;
@@ -289,7 +289,7 @@ class SpecialEditWatchlist extends UnlistedSpecialPage {
 
                $res = $dbr->select(
                        array( 'watchlist' ),
-                       array( 'wl_namespace',  'wl_title' ),
+                       array( 'wl_namespace', 'wl_title' ),
                        array( 'wl_user' => $this->getUser()->getId() ),
                        __METHOD__,
                        array( 'ORDER BY' => array( 'wl_namespace', 'wl_title' ) )
@@ -470,26 +470,26 @@ class SpecialEditWatchlist extends UnlistedSpecialPage {
         *
         * @return HTMLForm
         */
-       protected function getNormalForm(){
+       protected function getNormalForm() {
                global $wgContLang;
 
                $fields = array();
                $count = 0;
 
-               foreach( $this->getWatchlistInfo() as $namespace => $pages ){
+               foreach( $this->getWatchlistInfo() as $namespace => $pages ) {
                        if ( $namespace >= 0 ) {
-                               $fields['TitlesNs'.$namespace] = array(
+                               $fields['TitlesNs' . $namespace] = array(
                                        'class' => 'EditWatchlistCheckboxSeriesField',
                                        'options' => array(),
                                        'section' => "ns$namespace",
                                );
                        }
 
-                       foreach( array_keys( $pages ) as $dbkey ){
+                       foreach( array_keys( $pages ) as $dbkey ) {
                                $title = Title::makeTitleSafe( $namespace, $dbkey );
                                if ( $this->checkTitle( $title, $namespace, $dbkey ) ) {
                                        $text = $this->buildRemoveLine( $title );
-                                       $fields['TitlesNs'.$namespace]['options'][$text] = htmlspecialchars( $title->getPrefixedText() );
+                                       $fields['TitlesNs' . $namespace]['options'][$text] = $title->getPrefixedText();
                                        $count++;
                                }
                        }
@@ -519,7 +519,7 @@ class SpecialEditWatchlist extends UnlistedSpecialPage {
                $form->setTitle( $this->getTitle() );
                $form->setSubmitTextMsg( 'watchlistedit-normal-submit' );
                # Used message keys: 'accesskey-watchlistedit-normal-submit', 'tooltip-watchlistedit-normal-submit'
-               $form->setSubmitTooltip('watchlistedit-normal-submit');
+               $form->setSubmitTooltip( 'watchlistedit-normal-submit' );
                $form->setWrapperLegendMsg( 'watchlistedit-normal-legend' );
                $form->addHeaderText( $this->msg( 'watchlistedit-normal-explain' )->parse() );
                $form->setSubmitCallback( array( $this, 'submitNormal' ) );
@@ -564,7 +564,7 @@ class SpecialEditWatchlist extends UnlistedSpecialPage {
         *
         * @return HTMLForm
         */
-       protected function getRawForm(){
+       protected function getRawForm() {
                $titles = implode( $this->getWatchlist(), "\n" );
                $fields = array(
                        'Titles' => array(
@@ -577,7 +577,7 @@ class SpecialEditWatchlist extends UnlistedSpecialPage {
                $form->setTitle( $this->getTitle( 'raw' ) );
                $form->setSubmitTextMsg( 'watchlistedit-raw-submit' );
                # Used message keys: 'accesskey-watchlistedit-raw-submit', 'tooltip-watchlistedit-raw-submit'
-               $form->setSubmitTooltip('watchlistedit-raw-submit');
+               $form->setSubmitTooltip( 'watchlistedit-raw-submit' );
                $form->setWrapperLegendMsg( 'watchlistedit-raw-legend' );
                $form->addHeaderText( $this->msg( 'watchlistedit-raw-explain' )->parse() );
                $form->setSubmitCallback( array( $this, 'submitRaw' ) );
@@ -648,7 +648,7 @@ class WatchlistEditor extends SpecialEditWatchlist {}
  * Extend HTMLForm purely so we can have a more sane way of getting the section headers
  */
 class EditWatchlistNormalHTMLForm extends HTMLForm {
-       public function getLegend( $namespace ){
+       public function getLegend( $namespace ) {
                $namespace = substr( $namespace, 2 );
                return $namespace == NS_MAIN
                        ? $this->msg( 'blanknamespace' )->escaped()
index 18dde20..9eb555a 100644 (file)
@@ -124,7 +124,7 @@ class SpecialExport extends SpecialPage {
                        if ( $this->curonly ) {
                                $history = WikiExporter::CURRENT;
                        } elseif ( !$historyCheck ) {
-                               if ( $limit > 0 && ($wgExportMaxHistory == 0 || $limit < $wgExportMaxHistory ) ) {
+                               if ( $limit > 0 && ( $wgExportMaxHistory == 0 || $limit < $wgExportMaxHistory ) ) {
                                        $history['limit'] = $limit;
                                }
                                if ( !is_null( $offset ) ) {
@@ -339,7 +339,7 @@ class SpecialExport extends SpecialPage {
 
                        // This might take a while... :D
                        wfSuppressWarnings();
-                       set_time_limit(0);
+                       set_time_limit( 0 );
                        wfRestoreWarnings();
                }
 
@@ -405,7 +405,7 @@ class SpecialExport extends SpecialPage {
 
                foreach ( $res as $row ) {
                        $n = $row->page_title;
-                       if ($row->page_namespace) {
+                       if ( $row->page_namespace ) {
                                $ns = $wgContLang->getNsText( $row->page_namespace );
                                $n = $ns . ':' . $n;
                        }
index 96739ea..366aa81 100644 (file)
@@ -101,7 +101,7 @@ class FileDuplicateSearchPage extends QueryPage {
                $this->setHeaders();
                $this->outputHeader();
 
-               $this->filename =  isset( $par ) ?  $par : $this->getRequest()->getText( 'filename' );
+               $this->filename = isset( $par ) ?  $par : $this->getRequest()->getText( 'filename' );
                $this->file = null;
                $this->hash = '';
                $title = Title::newFromText( $this->filename, NS_FILE );
index 362fc5c..16772ec 100644 (file)
@@ -101,7 +101,7 @@ class SpecialImport extends SpecialPage {
 
                $this->logcomment = $request->getText( 'log-comment' );
                $this->pageLinkDepth = $wgExportMaxLinkDepth == 0 ? 0 : $request->getIntOrNull( 'pagelink-depth' );
-               $this->rootpage = $request->getText( 'rootpage' );\r
+               $this->rootpage = $request->getText( 'rootpage' );
 
                $user = $this->getUser();
                if ( !$user->matchEditToken( $request->getVal( 'editToken' ) ) ) {
@@ -114,7 +114,7 @@ class SpecialImport extends SpecialPage {
                                throw new PermissionsError( 'importupload' );
                        }
                } elseif ( $sourceName == "interwiki" ) {
-                       if( !$user->isAllowed( 'import' ) ){
+                       if( !$user->isAllowed( 'import' ) ) {
                                throw new PermissionsError( 'import' );
                        }
                        $this->interwiki = $request->getVal( 'interwiki' );
@@ -153,7 +153,7 @@ class SpecialImport extends SpecialPage {
 
                        $out->addWikiMsg( "importstart" );
 
-                       $reporter = new ImportReporter( $importer, $isUpload, $this->interwiki , $this->logcomment);
+                       $reporter = new ImportReporter( $importer, $isUpload, $this->interwiki, $this->logcomment );
                        $reporter->setContext( $this->getContext() );
                        $exception = false;
 
@@ -194,14 +194,14 @@ class SpecialImport extends SpecialPage {
                                $this->msg( 'importtext' )->parseAsBlock() .
                                Html::hidden( 'action', 'submit' ) .
                                Html::hidden( 'source', 'upload' ) .
-                               Xml::openElement( 'table', array( 'id' => 'mw-import-table' ) ) .
+                               Xml::openElement( 'table', array( 'id' => 'mw-import-table-upload' ) ) .
 
                                "<tr>
                                        <td class='mw-label'>" .
                                                Xml::label( $this->msg( 'import-upload-filename' )->text(), 'xmlimport' ) .
                                        "</td>
                                        <td class='mw-input'>" .
-                                               Xml::input( 'xmlimport', 50, '', array( 'type' => 'file' ) ) . ' ' .
+                                               Html::input( 'xmlimport', '', 'file', array( 'id' => 'xmlimport' ) ) . ' ' .
                                        "</td>
                                </tr>
                                <tr>
@@ -215,11 +215,11 @@ class SpecialImport extends SpecialPage {
                                </tr>
                                <tr>
                                        <td class='mw-label'>" .
-                                               Xml::label( $this->msg( 'import-interwiki-rootpage' )->text(), 'mw-interwiki-rootpage' ) .
+                                               Xml::label( $this->msg( 'import-interwiki-rootpage' )->text(), 'mw-interwiki-rootpage-upload' ) .
                                        "</td>
                                        <td class='mw-input'>" .
                                                Xml::input( 'rootpage', 50, $this->rootpage,
-                                                       array( 'id' => 'mw-interwiki-rootpage', 'type' => 'text' ) ) . ' ' .
+                                                       array( 'id' => 'mw-interwiki-rootpage-upload', 'type' => 'text' ) ) . ' ' .
                                        "</td>
                                </tr>
                                <tr>
@@ -260,13 +260,13 @@ class SpecialImport extends SpecialPage {
                                Html::hidden( 'action', 'submit' ) .
                                Html::hidden( 'source', 'interwiki' ) .
                                Html::hidden( 'editToken', $user->getEditToken() ) .
-                               Xml::openElement( 'table', array( 'id' => 'mw-import-table' ) ) .
+                               Xml::openElement( 'table', array( 'id' => 'mw-import-table-interwiki' ) ) .
                                "<tr>
                                        <td class='mw-label'>" .
                                                Xml::label( $this->msg( 'import-interwiki-source' )->text(), 'interwiki' ) .
                                        "</td>
                                        <td class='mw-input'>" .
-                                               Xml::openElement( 'select', array( 'name' => 'interwiki' ) )
+                                               Xml::openElement( 'select', array( 'name' => 'interwiki', 'id' => 'interwiki' ) )
                        );
                        foreach( $wgImportSources as $prefix ) {
                                $selected = ( $this->interwiki === $prefix ) ? ' selected="selected"' : '';
@@ -275,7 +275,7 @@ class SpecialImport extends SpecialPage {
 
                        $out->addHTML(
                                                Xml::closeElement( 'select' ) .
-                                               Xml::input( 'frompage', 50, $this->frompage ) .
+                                               Xml::input( 'frompage', 50, $this->frompage, array( 'id' => 'frompage' ) ) .
                                        "</td>
                                </tr>
                                <tr>
@@ -321,11 +321,11 @@ class SpecialImport extends SpecialPage {
                                </tr>
                                <tr>
                                        <td class='mw-label'>" .
-                                               Xml::label( $this->msg( 'import-interwiki-rootpage' )->text(), 'mw-interwiki-rootpage' ) .
+                                               Xml::label( $this->msg( 'import-interwiki-rootpage' )->text(), 'mw-interwiki-rootpage-interwiki' ) .
                                        "</td>
                                        <td class='mw-input'>" .
                                                Xml::input( 'rootpage', 50, $this->rootpage,
-                                                       array( 'id' => 'mw-interwiki-rootpage', 'type' => 'text' ) ) . ' ' .
+                                                       array( 'id' => 'mw-interwiki-rootpage-interwiki', 'type' => 'text' ) ) . ' ' .
                                        "</td>
                                </tr>
                                <tr>
@@ -353,7 +353,7 @@ class ImportReporter extends ContextSource {
        private $mOriginalPageOutCallback = null;
        private $mLogItemCount = 0;
 
-       function __construct( $importer, $upload, $interwiki , $reason=false ) {
+       function __construct( $importer, $upload, $interwiki, $reason = false ) {
                $this->mOriginalPageOutCallback =
                                $importer->setPageOutCallback( array( $this, 'reportPage' ) );
                $this->mOriginalLogCallback =
@@ -410,7 +410,7 @@ class ImportReporter extends ContextSource {
                                $detail = $this->msg( 'import-logentry-upload-detail' )->numParams(
                                        $successCount )->inContentLanguage()->text();
                                if ( $this->reason ) {
-                                       $detail .=  $this->msg( 'colon-separator' )->inContentLanguage()->text() . $this->reason;
+                                       $detail .= $this->msg( 'colon-separator' )->inContentLanguage()->text() . $this->reason;
                                }
                                $log->addEntry( 'upload', $title, $detail );
                        } else {
@@ -419,7 +419,7 @@ class ImportReporter extends ContextSource {
                                $detail = $this->msg( 'import-logentry-interwiki-detail' )->numParams(
                                        $successCount )->params( $interwiki )->inContentLanguage()->text();
                                if ( $this->reason ) {
-                                       $detail .=  $this->msg( 'colon-separator' )->inContentLanguage()->text() . $this->reason;
+                                       $detail .= $this->msg( 'colon-separator' )->inContentLanguage()->text() . $this->reason;
                                }
                                $log->addEntry( 'interwiki', $title, $detail );
                        }
@@ -428,7 +428,7 @@ class ImportReporter extends ContextSource {
                        $dbw = wfGetDB( DB_MASTER );
                        $latest = $title->getLatestRevID();
                        $nullRevision = Revision::newNullRevision( $dbw, $title->getArticleID(), $comment, true );
-                       if (!is_null($nullRevision)) {
+                       if ( !is_null( $nullRevision ) ) {
                                $nullRevision->insertOn( $dbw );
                                $page = WikiPage::factory( $title );
                                # Update page record
index 5de6076..f5fa697 100644 (file)
@@ -64,15 +64,15 @@ class LinkSearchPage extends QueryPage {
 
                $target2 = $target;
                $protocol = '';
-               $pr_sl = strpos($target2, '//' );
-               $pr_cl = strpos($target2, ':' );
+               $pr_sl = strpos( $target2, '//' );
+               $pr_cl = strpos( $target2, ':' );
                if ( $pr_sl ) {
                        // For protocols with '//'
-                       $protocol = substr( $target2, 0 , $pr_sl+2 );
-                       $target2 = substr( $target2, $pr_sl+2 );
+                       $protocol = substr( $target2, 0, $pr_sl + 2 );
+                       $target2 = substr( $target2, $pr_sl + 2 );
                } elseif ( !$pr_sl && $pr_cl ) {
                        // For protocols without '//' like 'mailto:'
-                       $protocol = substr( $target2, 0 , $pr_cl+1 );
+                       $protocol = substr( $target2, 0, $pr_cl + 1 );
                        $target2 = substr( $target2, $pr_cl+1 );
                } elseif ( $protocol == '' && $target2 != '' ) {
                        // default
@@ -84,7 +84,11 @@ class LinkSearchPage extends QueryPage {
                        $protocol = '';
                }
 
-               $out->addWikiMsg( 'linksearch-text', '<nowiki>' . $this->getLanguage()->commaList( $protocols_list ) . '</nowiki>' );
+               $out->addWikiMsg(
+                       'linksearch-text',
+                       '<nowiki>' . $this->getLanguage()->commaList( $protocols_list ) . '</nowiki>',
+                       count( $protocols_list )
+               );
                $s = Xml::openElement( 'form', array( 'id' => 'mw-linksearch-form', 'method' => 'get', 'action' => $GLOBALS['wgScript'] ) ) .
                        Html::hidden( 'title', $this->getTitle()->getPrefixedDbKey() ) .
                        '<fieldset>' .
@@ -134,10 +138,10 @@ class LinkSearchPage extends QueryPage {
         */
        static function mungeQuery( $query, $prot ) {
                $field = 'el_index';
-               $rv = LinkFilter::makeLikeArray( $query , $prot );
+               $rv = LinkFilter::makeLikeArray( $query, $prot );
                if ( $rv === false ) {
                        // LinkFilter doesn't handle wildcard in IP, so we'll have to munge here.
-                       if (preg_match('/^(:?[0-9]{1,3}\.)+\*\s*$|^(:?[0-9]{1,3}\.){3}[0-9]{1,3}:[0-9]*\*\s*$/', $query)) {
+                       if ( preg_match( '/^(:?[0-9]{1,3}\.)+\*\s*$|^(:?[0-9]{1,3}\.){3}[0-9]{1,3}:[0-9]*\*\s*$/', $query ) ) {
                                $dbr = wfGetDB( DB_SLAVE );
                                $rv = array( $prot . rtrim( $query, " \t*" ), $dbr->anyString() );
                                $field = 'el_to';
@@ -197,7 +201,7 @@ class LinkSearchPage extends QueryPage {
         * Override to check query validity.
         */
        function doQuery( $offset = false, $limit = false ) {
-               list( $this->mMungedQuery,  ) = LinkSearchPage::mungeQuery( $this->mQuery, $this->mProt );
+               list( $this->mMungedQuery, ) = LinkSearchPage::mungeQuery( $this->mQuery, $this->mProt );
                if( $this->mMungedQuery === false ) {
                        $this->getOutput()->addWikiMsg( 'linksearch-error' );
                } else {
index d459ac6..661db7b 100644 (file)
 
 class SpecialListFiles extends IncludableSpecialPage {
 
-       public function __construct(){
+       public function __construct() {
                parent::__construct( 'Listfiles' );
        }
 
-       public function execute( $par ){
+       public function execute( $par ) {
                $this->setHeaders();
                $this->outputHeader();
 
@@ -137,7 +137,7 @@ class ImageListPager extends TablePager {
                $tables = array( 'image' );
                $fields = array_keys( $this->getFieldNames() );
                $fields[] = 'img_user';
-               $fields[array_search('thumb', $fields)] = 'img_name AS thumb';
+               $fields[array_search( 'thumb', $fields )] = 'img_name AS thumb';
                $options = $join_conds = array();
 
                # Depends on $wgMiserMode
index 1f95c22..c82522a 100644 (file)
@@ -147,7 +147,7 @@ class SpecialListGroupRights extends SpecialPage {
         * @param $removeSelf Array of group this group is allowed to remove from self or true
         * @return string List of all granted permissions, separated by comma separator
         */
-        private function formatPermissions( $permissions, $revoke, $add, $remove, $addSelf, $removeSelf ) {
+       private function formatPermissions( $permissions, $revoke, $add, $remove, $addSelf, $removeSelf ) {
                $r = array();
                foreach( $permissions as $permission => $granted ) {
                        //show as granted only if it isn't revoked to prevent duplicate display of permissions
@@ -170,7 +170,7 @@ class SpecialListGroupRights extends SpecialPage {
                }
                sort( $r );
                $lang = $this->getLanguage();
-               if( $add === true ){
+               if( $add === true ) {
                        $r[] = $this->msg( 'listgrouprights-addgroup-all' )->escaped();
                } elseif( is_array( $add ) && count( $add ) ) {
                        $add = array_values( array_unique( $add ) );
@@ -179,7 +179,7 @@ class SpecialListGroupRights extends SpecialPage {
                                count( $add )
                        )->parse();
                }
-               if( $remove === true ){
+               if( $remove === true ) {
                        $r[] = $this->msg( 'listgrouprights-removegroup-all' )->escaped();
                } elseif( is_array( $remove ) && count( $remove ) ) {
                        $remove = array_values( array_unique( $remove ) );
@@ -188,7 +188,7 @@ class SpecialListGroupRights extends SpecialPage {
                                count( $remove )
                        )->parse();
                }
-               if( $addSelf === true ){
+               if( $addSelf === true ) {
                        $r[] = $this->msg( 'listgrouprights-addgroup-self-all' )->escaped();
                } elseif( is_array( $addSelf ) && count( $addSelf ) ) {
                        $addSelf = array_values( array_unique( $addSelf ) );
@@ -197,7 +197,7 @@ class SpecialListGroupRights extends SpecialPage {
                                count( $addSelf )
                        )->parse();
                }
-               if( $removeSelf === true ){
+               if( $removeSelf === true ) {
                        $r[] = $this->msg( 'listgrouprights-removegroup-self-all' )->parse();
                } elseif( is_array( $removeSelf ) && count( $removeSelf ) ) {
                        $removeSelf = array_values( array_unique( $removeSelf ) );
index f4acd64..cdad688 100644 (file)
@@ -85,7 +85,7 @@ class ListredirectsPage extends QueryPage {
                $batch->execute();
 
                // Back to start for display
-               if ( $db->numRows( $res ) > 0 ) {
+               if ( $res->numRows() > 0 ) {
                        // If there are no rows we get an error seeking.
                        $db->dataSeek( $res, 0 );
                }
index ea598c3..06e3261 100644 (file)
@@ -212,17 +212,26 @@ class UsersPager extends AlphabeticPager {
                list( $self ) = explode( '/', $this->getTitle()->getPrefixedDBkey() );
 
                # Form tag
-               $out  = Xml::openElement( 'form', array( 'method' => 'get', 'action' => $wgScript, 'id' => 'mw-listusers-form' ) ) .
+               $out = Xml::openElement( 'form', array( 'method' => 'get', 'action' => $wgScript, 'id' => 'mw-listusers-form' ) ) .
                        Xml::fieldset( $this->msg( 'listusers' )->text() ) .
                        Html::hidden( 'title', $self );
 
                # Username field
                $out .= Xml::label( $this->msg( 'listusersfrom' )->text(), 'offset' ) . ' ' .
-                       Xml::input( 'username', 20, $this->requestedUser, array( 'id' => 'offset' ) ) . ' ';
+                       Html::input(
+                               'username',
+                               $this->requestedUser,
+                               'text',
+                               array(
+                                       'id' => 'offset',
+                                       'size' => 20,
+                                       'autofocus' => $this->requestedUser === ''
+                               )
+                       ) . ' ';
 
                # Group drop-down list
                $out .= Xml::label( $this->msg( 'group' )->text(), 'group' ) . ' ' .
-                       Xml::openElement('select',  array( 'name' => 'group', 'id' => 'group' ) ) .
+                       Xml::openElement( 'select', array( 'name' => 'group', 'id' => 'group' ) ) .
                        Xml::option( $this->msg( 'group-all' )->text(), '' );
                foreach( $this->getAllGroups() as $group => $groupText )
                        $out .= Xml::option( $groupText, $group, $group == $this->requestedGroup );
index 22932e5..a2d51db 100644 (file)
@@ -125,4 +125,3 @@ class MostlinkedTemplatesPage extends QueryPage {
                return Linker::link( $wlh, $label );
        }
 }
-
index ce2633f..bf93ef2 100644 (file)
@@ -152,7 +152,7 @@ class MovePageForm extends UnlistedSpecialPage {
                                </tr>";
                        $err = array();
                } else {
-                       if ($this->oldTitle->getNamespace() == NS_USER && !$this->oldTitle->isSubpage() ) {
+                       if ( $this->oldTitle->getNamespace() == NS_USER && !$this->oldTitle->isSubpage() ) {
                                $out->wrapWikiMsg( "<div class=\"error mw-moveuserpage-warning\">\n$1\n</div>", 'moveuserpage-warning' );
                        }
                        $out->addWikiMsg( $wgFixDoubleRedirects ? 'movepagetext' :
@@ -189,7 +189,7 @@ class MovePageForm extends UnlistedSpecialPage {
                                array(
                                        'rd_namespace' => $this->oldTitle->getNamespace(),
                                        'rd_title' => $this->oldTitle->getDBkey(),
-                               ) , __METHOD__ );
+                               ), __METHOD__ );
                } else {
                        $hasRedirects = false;
                }
@@ -254,12 +254,14 @@ class MovePageForm extends UnlistedSpecialPage {
                        }
                }
 
+               $handler = ContentHandler::getForTitle( $this->oldTitle );
+
                $out->addHTML(
-                        Xml::openElement( 'form', array( 'method' => 'post', 'action' => $this->getTitle()->getLocalURL( 'action=submit' ), 'id' => 'movepage' ) ) .
-                        Xml::openElement( 'fieldset' ) .
-                        Xml::element( 'legend', null, $this->msg( 'move-page-legend' )->text() ) .
-                        Xml::openElement( 'table', array( 'id' => 'mw-movepage-table' ) ) .
-                        "<tr>
+                       Xml::openElement( 'form', array( 'method' => 'post', 'action' => $this->getTitle()->getLocalURL( 'action=submit' ), 'id' => 'movepage' ) ) .
+                       Xml::openElement( 'fieldset' ) .
+                       Xml::element( 'legend', null, $this->msg( 'move-page-legend' )->text() ) .
+                       Xml::openElement( 'table', array( 'id' => 'mw-movepage-table' ) ) .
+                       "<tr>
                                <td class='mw-label'>" .
                                        $this->msg( 'movearticle' )->escaped() .
                                "</td>
@@ -309,7 +311,7 @@ class MovePageForm extends UnlistedSpecialPage {
                        );
                }
 
-               if ( $user->isAllowed( 'suppressredirect' ) ) {
+               if ( $user->isAllowed( 'suppressredirect' ) && $handler->supportsRedirects() ) {
                        $out->addHTML( "
                                <tr>
                                        <td></td>
@@ -342,7 +344,7 @@ class MovePageForm extends UnlistedSpecialPage {
                                        'wpMovesubpages',
                                        # Don't check the box if we only have talk subpages to
                                        # move and we aren't moving the talk page.
-                                       $this->moveSubpages && ($this->oldTitle->hasSubpages() || $this->moveTalk),
+                                       $this->moveSubpages && ( $this->oldTitle->hasSubpages() || $this->moveTalk ),
                                        array( 'id' => 'wpMovesubpages' )
                                ) . '&#160;' .
                                Xml::tags( 'label', array( 'for' => 'wpMovesubpages' ),
@@ -357,7 +359,7 @@ class MovePageForm extends UnlistedSpecialPage {
                        );
                }
 
-               $watchChecked = $user->isLoggedIn() && ($this->watch || $user->getBoolOption( 'watchmoves' )
+               $watchChecked = $user->isLoggedIn() && ( $this->watch || $user->getBoolOption( 'watchmoves' )
                        || $user->isWatched( $this->oldTitle ) );
                # Don't allow watching if user is not logged in
                if( $user->isLoggedIn() ) {
@@ -447,7 +449,11 @@ class MovePageForm extends UnlistedSpecialPage {
                        }
                }
 
-               if ( $user->isAllowed( 'suppressredirect' ) ) {
+               $handler = ContentHandler::getForTitle( $ot );
+
+               if ( !$handler->supportsRedirects() ) {
+                       $createRedirect = false;
+               } elseif ( $user->isAllowed( 'suppressredirect' ) ) {
                        $createRedirect = $this->leaveRedirect;
                } else {
                        $createRedirect = true;
@@ -477,7 +483,18 @@ class MovePageForm extends UnlistedSpecialPage {
                $oldText = $ot->getPrefixedText();
                $newText = $nt->getPrefixedText();
 
-               $msgName = $createRedirect ? 'movepage-moved-redirect' : 'movepage-moved-noredirect';
+               if ( $ot->exists() ) {
+                       //NOTE: we assume that if the old title exists, it's because it was re-created as
+                       // a redirect to the new title. This is not safe, but what we did before was
+                       // even worse: we just determined whether a redirect should have been created,
+                       // and reported that it was created if it should have, without any checks.
+                       // Also note that isRedirect() is unreliable because of bug 37209.
+                       $msgName = 'movepage-moved-redirect';
+               } else {
+                       $msgName = 'movepage-moved-noredirect';
+               }
+
+
                $out->addHTML( $this->msg( 'movepage-moved' )->rawParams( $oldLink,
                        $newLink )->params( $oldText, $newText )->parseAsBlock() );
                $out->addWikiMsg( $msgName );
@@ -521,10 +538,10 @@ class MovePageForm extends UnlistedSpecialPage {
                        );
                        $conds['page_namespace'] = array();
                        if( MWNamespace::hasSubpages( $nt->getNamespace() ) ) {
-                               $conds['page_namespace'] []= $ot->getNamespace();
+                               $conds['page_namespace'][] = $ot->getNamespace();
                        }
                        if( $this->moveTalk && MWNamespace::hasSubpages( $nt->getTalkPage()->getNamespace() ) ) {
-                               $conds['page_namespace'] []= $ot->getTalkPage()->getNamespace();
+                               $conds['page_namespace'][] = $ot->getTalkPage()->getNamespace();
                        }
                } elseif( $this->moveTalk ) {
                        $conds = array(
@@ -570,7 +587,7 @@ class MovePageForm extends UnlistedSpecialPage {
                        $newSubpage = Title::makeTitleSafe( $newNs, $newPageName );
                        if( !$newSubpage ) {
                                $oldLink = Linker::linkKnown( $oldSubpage );
-                               $extraOutput []= $this->msg( 'movepage-page-unmoved' )->rawParams( $oldLink
+                               $extraOutput[] = $this->msg( 'movepage-page-unmoved' )->rawParams( $oldLink
                                        )->params( Title::makeName( $newNs, $newPageName ) )->escaped();
                                continue;
                        }
@@ -578,7 +595,7 @@ class MovePageForm extends UnlistedSpecialPage {
                        # This was copy-pasted from Renameuser, bleh.
                        if ( $newSubpage->exists() && !$oldSubpage->isValidMoveTarget( $newSubpage ) ) {
                                $link = Linker::linkKnown( $newSubpage );
-                               $extraOutput []= $this->msg( 'movepage-page-exists' )->rawParams( $link )->escaped();
+                               $extraOutput[] = $this->msg( 'movepage-page-exists' )->rawParams( $link )->escaped();
                        } else {
                                $success = $oldSubpage->moveTo( $newSubpage, true, $this->reason, $createRedirect );
                                if( $success === true ) {
@@ -592,16 +609,16 @@ class MovePageForm extends UnlistedSpecialPage {
                                                array( 'redirect' => 'no' )
                                        );
                                        $newLink = Linker::linkKnown( $newSubpage );
-                                       $extraOutput []= $this->msg( 'movepage-page-moved' )->rawParams( $oldLink, $newLink )->escaped();
+                                       $extraOutput[] = $this->msg( 'movepage-page-moved' )->rawParams( $oldLink, $newLink )->escaped();
                                        ++$count;
                                        if( $count >= $wgMaximumMovedPages ) {
-                                               $extraOutput []= $this->msg( 'movepage-max-pages' )->numParams( $wgMaximumMovedPages )->escaped();
+                                               $extraOutput[] = $this->msg( 'movepage-max-pages' )->numParams( $wgMaximumMovedPages )->escaped();
                                                break;
                                        }
                                } else {
                                        $oldLink = Linker::linkKnown( $oldSubpage );
                                        $newLink = Linker::link( $newSubpage );
-                                       $extraOutput []= $this->msg( 'movepage-page-unmoved' )->rawParams( $oldLink, $newLink )->escaped();
+                                       $extraOutput[] = $this->msg( 'movepage-page-unmoved' )->rawParams( $oldLink, $newLink )->escaped();
                                }
                        }
 
index 350aac6..caf48be 100644 (file)
  */
 class SpecialNewFiles extends IncludableSpecialPage {
 
-       public function __construct(){
+       public function __construct() {
                parent::__construct( 'Newimages' );
        }
 
-       public function execute( $par ){
+       public function execute( $par ) {
                $this->setHeaders();
                $this->outputHeader();
 
@@ -57,7 +57,7 @@ class NewFilesPager extends ReverseChronologicalPager {
 
        function __construct( IContextSource $context, $par = null ) {
                $this->like = $context->getRequest()->getText( 'like' );
-               $this->showbots = $context->getRequest()->getBool( 'showbots' , 0 );
+               $this->showbots = $context->getRequest()->getBool( 'showbots', 0 );
                if ( is_numeric( $par ) ) {
                        $this->setLimit( $par );
                }
@@ -85,10 +85,10 @@ class NewFilesPager extends ReverseChronologicalPager {
                        }
                }
 
-               if( !$wgMiserMode && $this->like !== null ){
+               if( !$wgMiserMode && $this->like !== null ) {
                        $dbr = wfGetDB( DB_SLAVE );
                        $likeObj = Title::newFromURL( $this->like );
-                       if( $likeObj instanceof Title ){
+                       if( $likeObj instanceof Title ) {
                                $like = $dbr->buildLike( $dbr->anyString(), strtolower( $likeObj->getDBkey() ), $dbr->anyString() );
                                $conds[] = "LOWER(img_name) $like";
                        }
@@ -104,18 +104,18 @@ class NewFilesPager extends ReverseChronologicalPager {
                return $query;
        }
 
-       function getIndexField(){
+       function getIndexField() {
                return 'img_timestamp';
        }
 
-       function getStartBody(){
+       function getStartBody() {
                if ( !$this->gallery ) {
                        $this->gallery = new ImageGallery();
                }
                return '';
        }
 
-       function getEndBody(){
+       function getEndBody() {
                return $this->gallery->toHTML();
        }
 
@@ -161,7 +161,7 @@ class NewFilesPager extends ReverseChronologicalPager {
                        ),
                );
 
-               if( $wgMiserMode ){
+               if( $wgMiserMode ) {
                        unset( $fields['like'] );
                }
 
index 85b9cf8..cc301a5 100644 (file)
@@ -105,7 +105,7 @@ class SpecialNewpages extends IncludableSpecialPage {
                        }
                        // PG offsets not just digits!
                        if ( preg_match( '/^offset=([^=]+)$/', $bit, $m ) ) {
-                               $this->opts->setValue( 'offset',  intval( $m[1] ) );
+                               $this->opts->setValue( 'offset', intval( $m[1] ) );
                        }
                        if ( preg_match( '/^username=(.*)$/', $bit, $m ) ) {
                                $this->opts->setValue( 'username', $m[1] );
@@ -113,7 +113,7 @@ class SpecialNewpages extends IncludableSpecialPage {
                        if ( preg_match( '/^namespace=(.*)$/', $bit, $m ) ) {
                                $ns = $this->getLanguage()->getNsIndex( $m[1] );
                                if( $ns !== false ) {
-                                       $this->opts->setValue( 'namespace',  $ns );
+                                       $this->opts->setValue( 'namespace', $ns );
                                }
                        }
                }
@@ -146,7 +146,7 @@ class SpecialNewpages extends IncludableSpecialPage {
 
                        $allValues = $this->opts->getAllValues();
                        unset( $allValues['feed'] );
-                       $out->setFeedAppendQuery( wfArrayToCGI( $allValues ) );
+                       $out->setFeedAppendQuery( wfArrayToCgi( $allValues ) );
                }
 
                $pager = new NewPagesPager( $this, $this->opts );
@@ -296,11 +296,11 @@ class SpecialNewpages extends IncludableSpecialPage {
 
                # Revision deletion works on revisions, so we should cast one
                $row = array(
-                                         'comment' => $result->rc_comment,
-                                         'deleted' => $result->rc_deleted,
-                                         'user_text' => $result->rc_user_text,
-                                         'user' => $result->rc_user,
-                                       );
+                       'comment' => $result->rc_comment,
+                       'deleted' => $result->rc_deleted,
+                       'user_text' => $result->rc_user_text,
+                       'user' => $result->rc_user,
+               );
                $rev = new Revision( $row );
                $rev->setTitle( $title );
 
index d7cf693..f42a7a1 100644 (file)
@@ -86,7 +86,7 @@ class SpecialPasswordReset extends FormSpecialPage {
                        );
                }
 
-               if( $this->getUser()->isAllowed( 'passwordreset' ) ){
+               if( $this->getUser()->isAllowed( 'passwordreset' ) ) {
                        $a['Capture'] = array(
                                'type' => 'check',
                                'label-message' => 'passwordreset-capture',
@@ -136,7 +136,7 @@ class SpecialPasswordReset extends FormSpecialPage {
                        }
                }
 
-               if( isset( $data['Capture'] ) && !$this->getUser()->isAllowed( 'passwordreset' ) ){
+               if( isset( $data['Capture'] ) && !$this->getUser()->isAllowed( 'passwordreset' ) ) {
                        // The user knows they don't have the passwordreset permission, but they tried to spoof the form.  That's naughty
                        throw new PermissionsError( 'passwordreset' );
                }
@@ -162,7 +162,7 @@ class SpecialPasswordReset extends FormSpecialPage {
                        );
                        if ( $res ) {
                                $users = array();
-                               foreach( $res as $row ){
+                               foreach( $res as $row ) {
                                        $users[] = User::newFromRow( $row );
                                }
                        } else {
@@ -180,8 +180,8 @@ class SpecialPasswordReset extends FormSpecialPage {
                        return array( $error );
                }
 
-               if( count( $users ) == 0 ){
-                       if( $method == 'email' ){
+               if( count( $users ) == 0 ) {
+                       if( $method == 'email' ) {
                                // Don't reveal whether or not an email address is in use
                                return true;
                        } else {
@@ -264,7 +264,7 @@ class SpecialPasswordReset extends FormSpecialPage {
 
                if ( $this->result->isGood() ) {
                        return true;
-               } elseif( isset( $data['Capture'] ) && $data['Capture'] ){
+               } elseif( isset( $data['Capture'] ) && $data['Capture'] ) {
                        // The email didn't send, but maybe they knew that and that's why they captured it
                        return true;
                } else {
@@ -275,10 +275,10 @@ class SpecialPasswordReset extends FormSpecialPage {
        }
 
        public function onSuccess() {
-               if( $this->getUser()->isAllowed( 'passwordreset' ) && $this->email != null ){
+               if( $this->getUser()->isAllowed( 'passwordreset' ) && $this->email != null ) {
                        // @todo: Logging
 
-                       if( $this->result->isGood() ){
+                       if( $this->result->isGood() ) {
                                $this->getOutput()->addWikiMsg( 'passwordreset-emailsent-capture' );
                        } else {
                                $this->getOutput()->addWikiMsg( 'passwordreset-emailerror-capture', $this->result->getMessage() );
index c6b2bb6..340172c 100644 (file)
@@ -78,7 +78,7 @@ class SpecialPreferences extends SpecialPage {
 
        public function submitReset( $formData ) {
                $user = $this->getUser();
-               $user->resetOptions();
+               $user->resetOptions( 'all' );
                $user->saveSettings();
 
                $url = $this->getTitle()->getFullURL( 'success' );
index 7740b32..f486ea8 100644 (file)
@@ -29,7 +29,7 @@
 class SpecialPrefixindex extends SpecialAllpages {
        // Inherit $maxPerPage
 
-       function __construct(){
+       function __construct() {
                parent::__construct( 'Prefixindex' );
        }
 
@@ -101,7 +101,7 @@ class SpecialPrefixindex extends SpecialAllpages {
                                Xml::label( $this->msg( 'allpagesprefix' )->text(), 'nsfrom' ) .
                                "</td>
                                <td class='mw-input'>" .
-                                       Xml::input( 'prefix', 30, str_replace('_',' ',$from), array( 'id' => 'nsfrom' ) ) .
+                                       Xml::input( 'prefix', 30, str_replace( '_', ' ', $from ), array( 'id' => 'nsfrom' ) ) .
                                "</td>
                        </tr>
                        <tr>
@@ -145,8 +145,8 @@ class SpecialPrefixindex extends SpecialAllpages {
                        $from = $prefix;
                }
 
-               $fromList = $this->getNamespaceKeyAndText($namespace, $from);
-               $prefixList = $this->getNamespaceKeyAndText($namespace, $prefix);
+               $fromList = $this->getNamespaceKeyAndText( $namespace, $from );
+               $prefixList = $this->getNamespaceKeyAndText( $namespace, $prefix );
                $namespaces = $wgContLang->getNamespaces();
 
                if ( !$prefixList || !$fromList ) {
@@ -227,7 +227,7 @@ class SpecialPrefixindex extends SpecialAllpages {
                } else {
                        $nsForm = $this->namespacePrefixForm( $namespace, $prefix, $hideredirects );
                        $self = $this->getTitle();
-                       $out2 = Xml::openElement( 'table', array( 'id' => 'mw-prefixindex-nav-table' ) )  .
+                       $out2 = Xml::openElement( 'table', array( 'id' => 'mw-prefixindex-nav-table' ) ) .
                                '<tr>
                                        <td>' .
                                                $nsForm .
@@ -248,7 +248,7 @@ class SpecialPrefixindex extends SpecialAllpages {
                                }
                                $nextLink = Linker::linkKnown(
                                                $self,
-                                               $this->msg( 'nextpage', str_replace( '_',' ', $s->page_title ) )->escaped(),
+                                               $this->msg( 'nextpage', str_replace( '_', ' ', $s->page_title ) )->escaped(),
                                                array(),
                                                $query
                                        );
index 74ed537..d580d62 100644 (file)
@@ -51,7 +51,7 @@ class SpecialProtectedpages extends SpecialPage {
                $size = $request->getIntOrNull( 'size' );
                $NS = $request->getIntOrNull( 'namespace' );
                $indefOnly = $request->getBool( 'indefonly' ) ? 1 : 0;
-               $cascadeOnly = $request->getBool('cascadeonly') ? 1 : 0;
+               $cascadeOnly = $request->getBool( 'cascadeonly' ) ? 1 : 0;
 
                $pager = new ProtectedPagesPager( $this, array(), $type, $level, $NS, $sizetype, $size, $indefOnly, $cascadeOnly );
 
@@ -78,7 +78,7 @@ class SpecialProtectedpages extends SpecialPage {
 
                static $infinity = null;
 
-               if( is_null( $infinity ) ){
+               if( is_null( $infinity ) ) {
                        $infinity = wfGetDB( DB_SLAVE )->getInfinity();
                }
 
@@ -109,7 +109,7 @@ class SpecialProtectedpages extends SpecialPage {
                        )->escaped();
                }
 
-               if(!is_null($size = $row->page_len)) {
+               if( !is_null( $size = $row->page_len ) ) {
                        $stxt = $lang->getDirMark() . ' ' . Linker::formatRevisionSize( $size );
                }
 
@@ -154,7 +154,7 @@ class SpecialProtectedpages extends SpecialPage {
         * @param $cascadeOnly Boolean: only cascading protection
         * @return String: input form
         */
-       protected function showOptions( $namespace, $type='edit', $level, $sizetype, $size, $indefOnly, $cascadeOnly ) {
+       protected function showOptions( $namespace, $type = 'edit', $level, $sizetype, $size, $indefOnly, $cascadeOnly ) {
                global $wgScript;
                $title = $this->getTitle();
                return Xml::openElement( 'form', array( 'method' => 'get', 'action' => $wgScript ) ) .
@@ -272,7 +272,7 @@ class SpecialProtectedpages extends SpecialPage {
                // First pass to load the log names
                foreach( $wgRestrictionLevels as $type ) {
                        // Messages used can be 'restriction-level-sysop' and 'restriction-level-autoconfirmed'
-                       if( $type !='' && $type !='*') {
+                       if( $type != '' && $type != '*' ) {
                                $text = $this->msg( "restriction-level-$type" )->text();
                                $m[$text] = $type;
                        }
@@ -300,7 +300,7 @@ class ProtectedPagesPager extends AlphabeticPager {
        public $mForm, $mConds;
        private $type, $level, $namespace, $sizetype, $size, $indefonly;
 
-       function __construct( $form, $conds = array(), $type, $level, $namespace, $sizetype='', $size=0,
+       function __construct( $form, $conds = array(), $type, $level, $namespace, $sizetype = '', $size = 0,
                $indefonly = false, $cascadeonly = false )
        {
                $this->mForm = $form;
@@ -309,7 +309,7 @@ class ProtectedPagesPager extends AlphabeticPager {
                $this->level = $level;
                $this->namespace = $namespace;
                $this->sizetype = $sizetype;
-               $this->size = intval($size);
+               $this->size = intval( $size );
                $this->indefonly = (bool)$indefonly;
                $this->cascadeonly = (bool)$cascadeonly;
                parent::__construct( $form->getContext() );
@@ -336,27 +336,27 @@ class ProtectedPagesPager extends AlphabeticPager {
                $conds[] = 'page_id=pr_page';
                $conds[] = 'pr_type=' . $this->mDb->addQuotes( $this->type );
 
-               if( $this->sizetype=='min' ) {
+               if( $this->sizetype == 'min' ) {
                        $conds[] = 'page_len>=' . $this->size;
-               } elseif( $this->sizetype=='max' ) {
+               } elseif( $this->sizetype == 'max' ) {
                        $conds[] = 'page_len<=' . $this->size;
                }
 
                if( $this->indefonly ) {
-                       $db = wfGetDB( DB_SLAVE );
-                       $conds[] = "pr_expiry = {$db->addQuotes( $db->getInfinity() )} OR pr_expiry IS NULL";
+                       $conds[] = "pr_expiry = {$this->mDb->addQuotes( $this->mDb->getInfinity() )} OR pr_expiry IS NULL";
                }
                if( $this->cascadeonly ) {
-                       $conds[] = "pr_cascade = '1'";
+                       $conds[] = 'pr_cascade = 1';
                }
 
                if( $this->level )
                        $conds[] = 'pr_level=' . $this->mDb->addQuotes( $this->level );
-               if( !is_null($this->namespace) )
+               if( !is_null( $this->namespace ) )
                        $conds[] = 'page_namespace=' . $this->mDb->addQuotes( $this->namespace );
                return array(
                        'tables' => array( 'page_restrictions', 'page' ),
-                       'fields' => 'pr_id,page_namespace,page_title,page_len,pr_type,pr_level,pr_expiry,pr_cascade',
+                       'fields' => array( 'pr_id', 'page_namespace', 'page_title', 'page_len',
+                               'pr_type', 'pr_level', 'pr_expiry', 'pr_cascade' ),
                        'conds' => $conds
                );
        }
index a80f0d0..abb4af3 100644 (file)
@@ -76,7 +76,7 @@ class SpecialProtectedtitles extends SpecialPage {
 
                static $infinity = null;
 
-               if( is_null( $infinity ) ){
+               if( is_null( $infinity ) ) {
                        $infinity = wfGetDB( DB_SLAVE )->getInfinity();
                }
 
@@ -113,7 +113,7 @@ class SpecialProtectedtitles extends SpecialPage {
         * @return string
         * @private
         */
-       function showOptions( $namespace, $type='edit', $level ) {
+       function showOptions( $namespace, $type = 'edit', $level ) {
                global $wgScript;
                $action = htmlspecialchars( $wgScript );
                $title = $this->getTitle();
@@ -161,13 +161,13 @@ class SpecialProtectedtitles extends SpecialPage {
 
                // First pass to load the log names
                foreach( $wgRestrictionLevels as $type ) {
-                       if ( $type !='' && $type !='*') {
+                       if ( $type != '' && $type != '*' ) {
                                $text = $this->msg( "restriction-level-$type" )->text();
                                $m[$text] = $type;
                        }
                }
                // Is there only one level (aside from "all")?
-               if( count($m) <= 2 ) {
+               if( count( $m ) <= 2 ) {
                        return '';
                }
                // Third pass generates sorted XHTML content
@@ -191,7 +191,7 @@ class SpecialProtectedtitles extends SpecialPage {
 class ProtectedTitlesPager extends AlphabeticPager {
        public $mForm, $mConds;
 
-       function __construct( $form, $conds = array(), $type, $level, $namespace, $sizetype='', $size=0 ) {
+       function __construct( $form, $conds = array(), $type, $level, $namespace, $sizetype = '', $size = 0 ) {
                $this->mForm = $form;
                $this->mConds = $conds;
                $this->level = $level;
@@ -234,11 +234,12 @@ class ProtectedTitlesPager extends AlphabeticPager {
                $conds[] = 'pt_expiry>' . $this->mDb->addQuotes( $this->mDb->timestamp() );
                if( $this->level )
                        $conds['pt_create_perm'] = $this->level;
-               if( !is_null($this->namespace) )
+               if( !is_null( $this->namespace ) )
                        $conds[] = 'pt_namespace=' . $this->mDb->addQuotes( $this->namespace );
                return array(
                        'tables' => 'protected_titles',
-                       'fields' => 'pt_namespace,pt_title,pt_create_perm,pt_expiry,pt_timestamp',
+                       'fields' => array( 'pt_namespace', 'pt_title', 'pt_create_perm',
+                               'pt_expiry', 'pt_timestamp' ),
                        'conds' => $conds
                );
        }
@@ -247,4 +248,3 @@ class ProtectedTitlesPager extends AlphabeticPager {
                return 'pt_timestamp';
        }
 }
-
index 307088e..13a7043 100644 (file)
@@ -32,7 +32,7 @@ class RandomPage extends SpecialPage {
        protected $isRedir = false; // should the result be a redirect?
        protected $extra = array(); // Extra SQL statements
 
-       public function __construct( $name = 'Randompage' ){
+       public function __construct( $name = 'Randompage' ) {
                $this->namespaces = MWNamespace::getContentNamespaces();
                parent::__construct( $name );
        }
@@ -49,7 +49,7 @@ class RandomPage extends SpecialPage {
        }
 
        // select redirects instead of normal pages?
-       public function isRedirect(){
+       public function isRedirect() {
                return $this->isRedir;
        }
 
index 88c81b3..51783a2 100644 (file)
@@ -28,7 +28,7 @@
  * @ingroup SpecialPage
  */
 class SpecialRandomredirect extends RandomPage {
-       function __construct(){
+       function __construct() {
                parent::__construct( 'Randomredirect' );
                $this->isRedir = true;
        }
index 2984bc7..7ea3a94 100644 (file)
@@ -42,16 +42,16 @@ class SpecialRecentChanges extends IncludableSpecialPage {
        public function getDefaultOptions() {
                $opts = new FormOptions();
 
-               $opts->add( 'days',  (int)$this->getUser()->getOption( 'rcdays' ) );
+               $opts->add( 'days', (int)$this->getUser()->getOption( 'rcdays' ) );
                $opts->add( 'limit', (int)$this->getUser()->getOption( 'rclimit' ) );
                $opts->add( 'from', '' );
 
-               $opts->add( 'hideminor',     $this->getUser()->getBoolOption( 'hideminor' ) );
-               $opts->add( 'hidebots',      true  );
-               $opts->add( 'hideanons',     false );
-               $opts->add( 'hideliu',       false );
+               $opts->add( 'hideminor', $this->getUser()->getBoolOption( 'hideminor' ) );
+               $opts->add( 'hidebots', true  );
+               $opts->add( 'hideanons', false );
+               $opts->add( 'hideliu', false );
                $opts->add( 'hidepatrolled', $this->getUser()->getBoolOption( 'hidepatrolled' ) );
-               $opts->add( 'hidemyself',    false );
+               $opts->add( 'hidemyself', false );
 
                $opts->add( 'namespace', '', FormOptions::INTNULL );
                $opts->add( 'invert', false );
@@ -155,7 +155,7 @@ class SpecialRecentChanges extends IncludableSpecialPage {
                // Fetch results, prepare a batch link existence check query
                $conds = $this->buildMainQueryConds( $opts );
                $rows = $this->doMainQuery( $conds, $opts );
-               if( $rows === false ){
+               if( $rows === false ) {
                        if( !$this->including() ) {
                                $this->doHeader( $opts );
                        }
@@ -186,7 +186,7 @@ class SpecialRecentChanges extends IncludableSpecialPage {
         *
         * @return Array
         */
-       public function getFeedObject( $feedFormat ){
+       public function getFeedObject( $feedFormat ) {
                $changesFeed = new ChangesFeed( $feedFormat, 'rcfeed' );
                $formatter = $changesFeed->getFeedObject(
                        $this->msg( 'recentchanges' )->inContentLanguage()->text(),
@@ -232,7 +232,7 @@ class SpecialRecentChanges extends IncludableSpecialPage {
                        }
 
                        if( is_numeric( $bit ) ) {
-                               $opts['limit'] =  $bit;
+                               $opts['limit'] = $bit;
                        }
 
                        $m = array();
@@ -281,9 +281,9 @@ class SpecialRecentChanges extends IncludableSpecialPage {
                # It makes no sense to hide both anons and logged-in users
                # Where this occurs, force anons to be shown
                $forcebot = false;
-               if( $opts['hideanons'] && $opts['hideliu'] ){
+               if( $opts['hideanons'] && $opts['hideliu'] ) {
                        # Check if the user wants to show bots only
-                       if( $opts['hidebots'] ){
+                       if( $opts['hidebots'] ) {
                                $opts['hideanons'] = false;
                        } else {
                                $forcebot = true;
@@ -296,9 +296,9 @@ class SpecialRecentChanges extends IncludableSpecialPage {
                $cutoff_unixtime = $cutoff_unixtime - ($cutoff_unixtime % 86400);
                $cutoff = $dbr->timestamp( $cutoff_unixtime );
 
-               $fromValid = preg_match('/^[0-9]{14}$/', $opts['from']);
-               if( $fromValid && $opts['from'] > wfTimestamp(TS_MW,$cutoff) ) {
-                       $cutoff = $dbr->timestamp($opts['from']);
+               $fromValid = preg_match( '/^[0-9]{14}$/', $opts['from'] );
+               if( $fromValid && $opts['from'] > wfTimestamp( TS_MW, $cutoff ) ) {
+                       $cutoff = $dbr->timestamp( $opts['from'] );
                } else {
                        $opts->reset( 'from' );
                }
@@ -351,8 +351,8 @@ class SpecialRecentChanges extends IncludableSpecialPage {
                                        MWNamespace::getAssociated( $opts['namespace'] )
                                );
                                $condition = "(rc_namespace $operator $selectedNS "
-                                                  . $boolean
-                                                  . " rc_namespace $operator $associatedNS)";
+                                       . $boolean
+                                       . " rc_namespace $operator $associatedNS)";
                        }
 
                        $conds[] = $condition;
@@ -387,13 +387,16 @@ class SpecialRecentChanges extends IncludableSpecialPage {
                        $tables[] = 'watchlist';
                        $fields[] = 'wl_user';
                        $fields[] = 'wl_notificationtimestamp';
-                       $join_conds['watchlist'] = array('LEFT JOIN',
-                               "wl_user={$uid} AND wl_title=rc_title AND wl_namespace=rc_namespace");
+                       $join_conds['watchlist'] = array( 'LEFT JOIN', array(
+                               'wl_user' => $uid,
+                               'wl_title=rc_title',
+                               'wl_namespace=rc_namespace'
+                       ));
                }
                if ( $this->getUser()->isAllowed( 'rollback' ) ) {
                        $tables[] = 'page';
                        $fields[] = 'page_latest';
-                       $join_conds['page'] = array('LEFT JOIN', 'rc_cur_id=page_id');
+                       $join_conds['page'] = array( 'LEFT JOIN', 'rc_cur_id=page_id' );
                }
                // Tag stuff.
                ChangeTags::modifyDisplayQuery(
@@ -529,8 +532,12 @@ class SpecialRecentChanges extends IncludableSpecialPage {
                                }
                                $rc->numberofWatchingusers = $watcherCache[$obj->rc_namespace][$obj->rc_title];
                        }
-                       $s .= $list->recentChangesLine( $rc, !empty( $obj->wl_user ), $counter );
-                       --$limit;
+
+                       $changeLine = $list->recentChangesLine( $rc, !empty( $obj->wl_user ), $counter );
+                       if ( $changeLine !== false ) {
+                               $s .= $changeLine;
+                               --$limit;
+                       }
                }
                $s .= $list->endRecentChangesList();
                $this->getOutput()->addHTML( $s );
@@ -538,7 +545,7 @@ class SpecialRecentChanges extends IncludableSpecialPage {
 
        /**
         * Get the query string to append to feed link URLs.
-        * 
+        *
         * @return string
         */
        public function getFeedQuery() {
@@ -722,7 +729,7 @@ class SpecialRecentChanges extends IncludableSpecialPage {
         * @param $opts FormOptions
         */
        function filterByCategories( &$rows, FormOptions $opts ) {
-               $categories = array_map( 'trim', explode( '|' , $opts['categories'] ) );
+               $categories = array_map( 'trim', explode( '|', $opts['categories'] ) );
 
                if( !count( $categories ) ) {
                        return;
index 67a8609..6d7173b 100644 (file)
@@ -29,7 +29,7 @@
 class SpecialRecentchangeslinked extends SpecialRecentChanges {
        var $rclTargetTitle;
 
-       function __construct(){
+       function __construct() {
                parent::__construct( 'Recentchangeslinked' );
        }
 
@@ -50,7 +50,7 @@ class SpecialRecentchangeslinked extends SpecialRecentChanges {
                return $opts;
        }
 
-       public function getFeedObject( $feedFormat ){
+       public function getFeedObject( $feedFormat ) {
                $feed = new ChangesFeed( $feedFormat, false );
                $feedObj = $feed->getFeedObject(
                        $this->msg( 'recentchangeslinked-title', $this->getTargetTitle()->getPrefixedText() )
@@ -71,7 +71,7 @@ class SpecialRecentchangeslinked extends SpecialRecentChanges {
                }
                $outputPage = $this->getOutput();
                $title = Title::newFromURL( $target );
-               if( !$title || $title->getInterwiki() != '' ){
+               if( !$title || $title->getInterwiki() != '' ) {
                        $outputPage->wrapWikiMsg( "<div class=\"errorbox\">\n$1\n</div><br style=\"clear: both\" />", 'allpagesbadtitle' );
                        return false;
                }
@@ -102,11 +102,15 @@ class SpecialRecentchangeslinked extends SpecialRecentChanges {
                if( $uid ) {
                        $tables[] = 'watchlist';
                        $select[] = 'wl_user';
-                       $join_conds['watchlist'] = array( 'LEFT JOIN', "wl_user={$uid} AND wl_title=rc_title AND wl_namespace=rc_namespace" );
+                       $join_conds['watchlist'] = array( 'LEFT JOIN', array(
+                               'wl_user' => $uid,
+                               'wl_title=rc_title',
+                               'wl_namespace=rc_namespace'
+                       ));
                }
                if ( $this->getUser()->isAllowed( 'rollback' ) ) {
                        $tables[] = 'page';
-                       $join_conds['page'] = array('LEFT JOIN', 'rc_cur_id=page_id');
+                       $join_conds['page'] = array( 'LEFT JOIN', 'rc_cur_id=page_id' );
                        $select[] = 'page_latest';
                }
                ChangeTags::modifyDisplayQuery(
@@ -175,7 +179,7 @@ class SpecialRecentchangeslinked extends SpecialRecentChanges {
                                        $subconds["rc_namespace"] = $link_ns;
                                        $subjoin = "rc_title = {$pfx}_to";
                                } else {
-                                       $subjoin = "rc_namespace = {$pfx}_namespace AND rc_title = {$pfx}_title";
+                                       $subjoin = array( "rc_namespace = {$pfx}_namespace", "rc_title = {$pfx}_title" );
                                }
                        }
 
@@ -200,15 +204,15 @@ class SpecialRecentchangeslinked extends SpecialRecentChanges {
                        $subsql[] = $query;
                }
 
-               if( count($subsql) == 0 ) {
+               if( count( $subsql ) == 0 ) {
                        return false; // should never happen
                }
-               if( count($subsql) == 1 && $dbr->unionSupportsOrderAndLimit() ) {
+               if( count( $subsql ) == 1 && $dbr->unionSupportsOrderAndLimit() ) {
                        $sql = $subsql[0];
                } else {
                        // need to resort and relimit after union
-                       $sql = $dbr->unionQueries($subsql, false).' ORDER BY rc_timestamp DESC';
-                       $sql = $dbr->limitResult($sql, $limit, false);
+                       $sql = $dbr->unionQueries( $subsql, false ) . ' ORDER BY rc_timestamp DESC';
+                       $sql = $dbr->limitResult( $sql, $limit, false );
                }
 
                $res = $dbr->query( $sql, __METHOD__ );
@@ -224,16 +228,16 @@ class SpecialRecentchangeslinked extends SpecialRecentChanges {
         * @param $opts FormOptions
         * @return array
         */
-       function getExtraOptions( $opts ){
+       function getExtraOptions( $opts ) {
                $opts->consumeValues( array( 'showlinkedto', 'target', 'tagfilter' ) );
                $extraOpts = array();
                $extraOpts['namespace'] = $this->namespaceFilterForm( $opts );
                $extraOpts['target'] = array( $this->msg( 'recentchangeslinked-page' )->escaped(),
-                       Xml::input( 'target', 40, str_replace('_',' ',$opts['target']) ) .
-                       Xml::check( 'showlinkedto', $opts['showlinkedto'], array('id' => 'showlinkedto') ) . ' ' .
+                       Xml::input( 'target', 40, str_replace( '_', ' ', $opts['target'] ) ) .
+                       Xml::check( 'showlinkedto', $opts['showlinkedto'], array( 'id' => 'showlinkedto' ) ) . ' ' .
                        Xml::label( $this->msg( 'recentchangeslinked-to' )->text(), 'showlinkedto' ) );
                $tagFilter = ChangeTags::buildTagFilterSelector( $opts['tagfilter'] );
-               if ($tagFilter) {
+               if ( $tagFilter ) {
                        $extraOpts['tagfilter'] = $tagFilter;
                }
                return $extraOpts;
index eaf0d52..6f75da4 100644 (file)
@@ -133,7 +133,7 @@ class SpecialRevisionDelete extends UnlistedSpecialPage {
                        $this->ids = explode( ',', $ids );
                } else {
                        # Array input
-                       $this->ids = array_keys( $request->getArray('ids',array()) );
+                       $this->ids = array_keys( $request->getArray( 'ids', array() ) );
                }
                // $this->ids = array_map( 'intval', $this->ids );
                $this->ids = array_unique( array_filter( $this->ids ) );
@@ -191,7 +191,7 @@ class SpecialRevisionDelete extends UnlistedSpecialPage {
 
                $this->otherReason = $request->getVal( 'wpReason' );
                # We need a target page!
-               if( is_null($this->targetObj) ) {
+               if( is_null( $this->targetObj ) ) {
                        $output->addWikiMsg( 'undelete-header' );
                        return;
                }
@@ -204,7 +204,7 @@ class SpecialRevisionDelete extends UnlistedSpecialPage {
                        array( 'revdelete-hide-comment', 'wpHideComment', Revision::DELETED_COMMENT ),
                        array( 'revdelete-hide-user', 'wpHideUser', Revision::DELETED_USER )
                );
-               if( $user->isAllowed('suppressrevision') ) {
+               if( $user->isAllowed( 'suppressrevision' ) ) {
                        $this->checks[] = array( 'revdelete-hide-restricted',
                                'wpHideRestricted', Revision::DELETED_RESTRICTED );
                }
@@ -225,7 +225,7 @@ class SpecialRevisionDelete extends UnlistedSpecialPage {
                # Show relevant lines from the suppression log
                if( $user->isAllowed( 'suppressionlog' ) ) {
                        $suppressLogPage = new LogPage( 'suppress' );
-                       $output->addHTML( "<h2>" . $suppressLogPage->getName()->escaped()  . "</h2>\n" );
+                       $output->addHTML( "<h2>" . $suppressLogPage->getName()->escaped() . "</h2>\n" );
                        LogEventsList::showLogExtract( $output, 'suppress',
                                $this->targetObj, '', array( 'lim' => 25, 'conds' => $qc ) );
                }
@@ -253,7 +253,7 @@ class SpecialRevisionDelete extends UnlistedSpecialPage {
                                        array( 'action' => 'history' )
                                );
                                # Link to deleted edits
-                               if( $this->getUser()->isAllowed('undelete') ) {
+                               if( $this->getUser()->isAllowed( 'undelete' ) ) {
                                        $undelete = SpecialPage::getTitleFor( 'Undelete' );
                                        $links[] = Linker::linkKnown(
                                                $undelete,
@@ -356,7 +356,7 @@ class SpecialRevisionDelete extends UnlistedSpecialPage {
                $UserAllowed = true;
 
                if ( $this->typeName == 'logging' ) {
-                       $this->getOutput()->addWikiMsg( 'logdelete-selected', $this->getLanguage()->formatNum( count($this->ids) ) );
+                       $this->getOutput()->addWikiMsg( 'logdelete-selected', $this->getLanguage()->formatNum( count( $this->ids ) ) );
                } else {
                        $this->getOutput()->addWikiMsg( 'revdelete-selected',
                                $this->targetObj->getPrefixedText(), count( $this->ids ) );
@@ -522,7 +522,7 @@ class SpecialRevisionDelete extends UnlistedSpecialPage {
         */
        protected function submit() {
                # Check edit token on submission
-               $token = $this->getRequest()->getVal('wpEditToken');
+               $token = $this->getRequest()->getVal( 'wpEditToken' );
                if( $this->submitClicked && !$this->getUser()->matchEditToken( $token ) ) {
                        $this->getOutput()->addWikiMsg( 'sessionfailure' );
                        return false;
@@ -537,7 +537,7 @@ class SpecialRevisionDelete extends UnlistedSpecialPage {
                        $comment = $this->otherReason;
                }
                # Can the user set this field?
-               if( $bitParams[Revision::DELETED_RESTRICTED]==1 && !$this->getUser()->isAllowed('suppressrevision') ) {
+               if( $bitParams[Revision::DELETED_RESTRICTED] == 1 && !$this->getUser()->isAllowed( 'suppressrevision' ) ) {
                        throw new PermissionsError( 'suppressrevision' );
                }
                # If the save went through, go to success message...
@@ -579,14 +579,14 @@ class SpecialRevisionDelete extends UnlistedSpecialPage {
        protected function extractBitParams() {
                $bitfield = array();
                foreach( $this->checks as $item ) {
-                       list( /* message */ , $name, $field ) = $item;
+                       list( /* message */, $name, $field ) = $item;
                        $val = $this->getRequest()->getInt( $name, 0 /* unchecked */ );
                        if( $val < -1 || $val > 1) {
                                $val = -1; // -1 for existing value
                        }
                        $bitfield[$field] = $val;
                }
-               if( !isset($bitfield[Revision::DELETED_RESTRICTED]) ) {
+               if( !isset( $bitfield[Revision::DELETED_RESTRICTED] ) ) {
                        $bitfield[Revision::DELETED_RESTRICTED] = 0;
                }
                return $bitfield;
@@ -624,4 +624,3 @@ class SpecialRevisionDelete extends UnlistedSpecialPage {
                );
        }
 }
-
index 7c8ff84..8180963 100644 (file)
@@ -138,7 +138,7 @@ class SpecialSearch extends SpecialPage {
                        // BC with old request format
                        $profile = 'advanced';
                        foreach( $profiles as $key => $data ) {
-                               if ( $nslist === $data['namespaces'] && $key !== 'advanced') {
+                               if ( $nslist === $data['namespaces'] && $key !== 'advanced' ) {
                                        $profile = $key;
                                }
                        }
@@ -159,7 +159,7 @@ class SpecialSearch extends SpecialPage {
                $default = $request->getBool( 'profile' ) ? 0 : 1;
                $this->searchRedirects = $request->getBool( 'redirs', $default ) ? 1 : 0;
                $this->didYouMeanHtml = ''; # html of did you mean... link
-               $this->fulltext = $request->getVal('fulltext');
+               $this->fulltext = $request->getVal( 'fulltext' );
                $this->profile = $profile;
        }
 
@@ -218,7 +218,7 @@ class SpecialSearch extends SpecialPage {
                $search->showRedirects = $this->searchRedirects; // BC
                $search->setFeatureData( 'list-redirects', $this->searchRedirects );
                $search->prefix = $this->mPrefix;
-               $term = $search->transformSearchTerm($term);
+               $term = $search->transformSearchTerm( $term );
 
                wfRunHooks( 'SpecialSearchSetupEngine', array( $this, $this->profile, $search ) );
 
@@ -250,7 +250,7 @@ class SpecialSearch extends SpecialPage {
                $t = Title::newFromText( $term );
 
                // fetch search results
-               $rewritten = $search->replacePrefixes($term);
+               $rewritten = $search->replacePrefixes( $term );
 
                $titleMatches = $search->searchTitle( $rewritten );
                if( !( $titleMatches instanceof SearchResultTooMany ) ) {
@@ -288,6 +288,13 @@ class SpecialSearch extends SpecialPage {
 
                        $this->didYouMeanHtml = '<div class="searchdidyoumean">' . $this->msg( 'search-suggest' )->rawParams( $suggestLink )->text() . '</div>';
                }
+
+               if ( !wfRunHooks( 'SpecialSearchResultsPrepend', array( $this, $out, $term ) ) ) {
+                       # Hook requested termination
+                       wfProfileOut( __METHOD__ );
+                       return;
+               }
+
                // start rendering the page
                $out->addHtml(
                        Xml::openElement(
@@ -304,9 +311,9 @@ class SpecialSearch extends SpecialPage {
                        Xml::openElement( 'tr' ) .
                        Xml::openElement( 'td' ) . "\n" .
                        $this->shortDialog( $term ) .
-                       Xml::closeElement('td') .
-                       Xml::closeElement('tr') .
-                       Xml::closeElement('table')
+                       Xml::closeElement( 'td' ) .
+                       Xml::closeElement( 'tr' ) .
+                       Xml::closeElement( 'table' )
                );
 
                // Sometimes the search engine knows there are too many hits
@@ -316,7 +323,7 @@ class SpecialSearch extends SpecialPage {
                        return;
                }
 
-               $filePrefix = $wgContLang->getFormattedNsText(NS_FILE).':';
+               $filePrefix = $wgContLang->getFormattedNsText( NS_FILE ) . ':';
                if( trim( $term ) === '' || $filePrefix === trim( $term ) ) {
                        $out->addHTML( $this->formHeader( $term, 0, 0 ) );
                        $out->addHtml( $this->getProfileForm( $this->profile, $term ) );
@@ -340,9 +347,9 @@ class SpecialSearch extends SpecialPage {
 
                // get total number of results if backend can calculate it
                $totalRes = 0;
-               if($titleMatches && !is_null( $titleMatches->getTotalHits() ) )
+               if( $titleMatches && !is_null( $titleMatches->getTotalHits() ) )
                        $totalRes += $titleMatches->getTotalHits();
-               if($textMatches && !is_null( $textMatches->getTotalHits() ))
+               if( $textMatches && !is_null( $textMatches->getTotalHits() ) )
                        $totalRes += $textMatches->getTotalHits();
 
                // show number of results and current offset
@@ -404,6 +411,7 @@ class SpecialSearch extends SpecialPage {
                if( $num || $this->offset ) {
                        $out->addHTML( "<p class='mw-search-pager-bottom'>{$prevnext}</p>\n" );
                }
+               wfRunHooks( 'SpecialSearchResultsAppend', array( $this, $out, $term ) );
                wfProfileOut( __METHOD__ );
        }
 
@@ -508,7 +516,7 @@ class SpecialSearch extends SpecialPage {
 
                $out = "";
                $infoLine = $matches->getInfo();
-               if( !is_null($infoLine) ) {
+               if( !is_null( $infoLine ) ) {
                        $out .= "\n<!-- {$infoLine} -->\n";
                }
                $out .= "<ul class='mw-search-results'>\n";
@@ -543,7 +551,7 @@ class SpecialSearch extends SpecialPage {
 
                $t = $result->getTitle();
 
-               $titleSnippet = $result->getTitleSnippet($terms);
+               $titleSnippet = $result->getTitleSnippet( $terms );
 
                if( $titleSnippet == '' )
                        $titleSnippet = null;
@@ -576,12 +584,12 @@ class SpecialSearch extends SpecialPage {
 
                // format redirects / relevant sections
                $redirectTitle = $result->getRedirectTitle();
-               $redirectText = $result->getRedirectSnippet($terms);
+               $redirectText = $result->getRedirectSnippet( $terms );
                $sectionTitle = $result->getSectionTitle();
-               $sectionText = $result->getSectionSnippet($terms);
+               $sectionText = $result->getSectionSnippet( $terms );
                $redirect = '';
 
-               if( !is_null($redirectTitle) ) {
+               if( !is_null( $redirectTitle ) ) {
                        if( $redirectText == '' )
                                $redirectText = null;
 
@@ -593,7 +601,7 @@ class SpecialSearch extends SpecialPage {
 
                $section = '';
 
-               if( !is_null($sectionTitle) ) {
+               if( !is_null( $sectionTitle ) ) {
                        if( $sectionText == '' )
                                $sectionText = null;
 
@@ -604,7 +612,7 @@ class SpecialSearch extends SpecialPage {
                }
 
                // format text extract
-               $extract = "<div class='searchresult'>".$result->getTextSnippet($terms)."</div>";
+               $extract = "<div class='searchresult'>" . $result->getTextSnippet( $terms ) . "</div>";
 
                $lang = $this->getLanguage();
 
@@ -715,16 +723,17 @@ class SpecialSearch extends SpecialPage {
                $terms = $wgContLang->convertForSearchResult( $matches->termMatches() );
 
                $out = "<div id='mw-search-interwiki'><div id='mw-search-interwiki-caption'>".
-                       $this->msg( 'search-interwiki-caption' )->text()  . "</div>\n";
+                       $this->msg( 'search-interwiki-caption' )->text() . "</div>\n";
                $out .= "<ul class='mw-search-iwresults'>\n";
 
                // work out custom project captions
                $customCaptions = array();
                $customLines = explode( "\n", $this->msg( 'search-interwiki-custom' )->text() ); // format per line <iwprefix>:<caption>
-               foreach($customLines as $line) {
-                       $parts = explode(":",$line,2);
-                       if(count($parts) == 2) // validate line
+               foreach( $customLines as $line ) {
+                       $parts = explode( ":", $line, 2 );
+                       if( count( $parts ) == 2 ) { // validate line
                                $customCaptions[$parts[0]] = $parts[1];
+                       }
                }
 
                $prev = null;
@@ -764,7 +773,7 @@ class SpecialSearch extends SpecialPage {
 
                $t = $result->getTitle();
 
-               $titleSnippet = $result->getTitleSnippet($terms);
+               $titleSnippet = $result->getTitleSnippet( $terms );
 
                if( $titleSnippet == '' )
                        $titleSnippet = null;
@@ -776,9 +785,9 @@ class SpecialSearch extends SpecialPage {
 
                // format redirect if any
                $redirectTitle = $result->getRedirectTitle();
-               $redirectText = $result->getRedirectSnippet($terms);
+               $redirectText = $result->getRedirectSnippet( $terms );
                $redirect = '';
-               if( !is_null($redirectTitle) ) {
+               if( !is_null( $redirectTitle ) ) {
                        if( $redirectText == '' )
                                $redirectText = null;
 
@@ -790,8 +799,8 @@ class SpecialSearch extends SpecialPage {
 
                $out = "";
                // display project name
-               if(is_null($lastInterwiki) || $lastInterwiki != $t->getInterwiki()) {
-                       if( array_key_exists($t->getInterwiki(),$customCaptions) ) {
+               if( is_null( $lastInterwiki ) || $lastInterwiki != $t->getInterwiki() ) {
+                       if( array_key_exists( $t->getInterwiki(), $customCaptions ) ) {
                                // captions from 'search-interwiki-custom'
                                $caption = $customCaptions[$t->getInterwiki()];
                        } else {
@@ -801,7 +810,7 @@ class SpecialSearch extends SpecialPage {
                                $caption = $this->msg( 'search-interwiki-default', $parsed['host'] )->text();
                        }
                        // "more results" link (special page stuff could be localized, but we might not know target lang)
-                       $searchTitle = Title::newFromText($t->getInterwiki().":Special:Search");
+                       $searchTitle = Title::newFromText( $t->getInterwiki() . ":Special:Search" );
                        $searchLink = Linker::linkKnown(
                                $searchTitle,
                                $this->msg( 'search-interwiki-more' )->text(),
@@ -909,7 +918,7 @@ class SpecialSearch extends SpecialPage {
                                'fieldset',
                                array( 'id' => 'mw-searchoptions', 'style' => 'margin:0em;' )
                        ) .
-                       Xml::element( 'legend', null, $this->msg('powersearch-legend' )->text() ) .
+                       Xml::element( 'legend', null, $this->msg( 'powersearch-legend' )->text() ) .
                        Xml::tags( 'h4', null, $this->msg( 'powersearch-ns' )->parse() ) .
                        Html::element( 'div', array( 'id' => 'mw-search-togglebox' ) ) .
                        Xml::element( 'div', array( 'class' => 'divider' ), '', false ) .
@@ -976,7 +985,7 @@ class SpecialSearch extends SpecialPage {
         * @return string
         */
        protected function formHeader( $term, $resultsShown, $totalNum ) {
-               $out = Xml::openElement('div', array( 'class' =>  'mw-search-formheader' ) );
+               $out = Xml::openElement( 'div', array( 'class' => 'mw-search-formheader' ) );
 
                $bareterm = $term;
                if( $this->startsWithImage( $term ) ) {
@@ -1013,11 +1022,11 @@ class SpecialSearch extends SpecialPage {
                        );
                }
                $out .= Xml::closeElement( 'ul' );
-               $out .= Xml::closeElement('div') ;
+               $out .= Xml::closeElement( 'div' ) ;
 
                // Results-info
                if ( $resultsShown > 0 ) {
-                       if ( $totalNum > 0 ){
+                       if ( $totalNum > 0 ) {
                                $top = $this->msg( 'showingresultsheader' )
                                        ->numParams( $this->offset + 1, $this->offset + $resultsShown, $totalNum )
                                        ->params( wfEscapeWikiText( $term ) )
@@ -1038,7 +1047,7 @@ class SpecialSearch extends SpecialPage {
                }
 
                $out .= Xml::element( 'div', array( 'style' => 'clear:both' ), '', false );
-               $out .= Xml::closeElement('div');
+               $out .= Xml::closeElement( 'div' );
 
                return $out;
        }
@@ -1123,7 +1132,7 @@ class SpecialSearch extends SpecialPage {
 
                $p = explode( ':', $term );
                if( count( $p ) > 1 ) {
-                       return $p[0]  == $allkeyword;
+                       return $p[0] == $allkeyword;
                }
                return false;
        }
index 1e7c8bb..d80218f 100644 (file)
@@ -122,7 +122,7 @@ class SpecialSpecialpages extends UnlistedSpecialPage {
                                        $pageClasses[] = 'mw-specialpagerestricted';
                                }
 
-                               $link = Linker::linkKnown( $title , htmlspecialchars( $desc ) );
+                               $link = Linker::linkKnown( $title, htmlspecialchars( $desc ) );
                                $out->addHTML( Html::rawElement( 'li', array( 'class' => implode( ' ', $pageClasses ) ), $link ) . "\n" );
 
                                # Split up the larger groups
index 46881ec..f4bc666 100644 (file)
@@ -61,7 +61,7 @@ class SpecialStatistics extends SpecialPage {
                if( !$wgMiserMode ) {
                        $key = wfMemcKey( 'sitestats', 'activeusers-updated' );
                        // Re-calculate the count if the last tally is old...
-                       if( !$wgMemc->get($key) ) {
+                       if( !$wgMemc->get( $key ) ) {
                                $dbw = wfGetDB( DB_MASTER );
                                SiteStatsUpdate::cacheUpdate( $dbw );
                                $wgMemc->set( $key, '1', 24*3600 ); // don't update for 1 day
@@ -222,7 +222,7 @@ class SpecialStatistics extends SpecialPage {
                        }
                        $text .= $this->formatRow( $grouppage . ' ' . $grouplink,
                                $this->getLanguage()->formatNum( $countUsers ),
-                               array( 'class' => 'statistics-group-' . Sanitizer::escapeClass( $group ) . $classZero )  );
+                               array( 'class' => 'statistics-group-' . Sanitizer::escapeClass( $group ) . $classZero ) );
                }
                return $text;
        }
index 853a805..076469c 100644 (file)
@@ -32,11 +32,11 @@ class SpecialUnblock extends SpecialPage {
        protected $type;
        protected $block;
 
-       public function __construct(){
+       public function __construct() {
                parent::__construct( 'Unblock', 'block' );
        }
 
-       public function execute( $par ){
+       public function execute( $par ) {
                $this->checkPermissions();
                $this->checkReadOnly();
 
@@ -56,8 +56,8 @@ class SpecialUnblock extends SpecialPage {
                $form->setSubmitTextMsg( 'ipusubmit' );
                $form->addPreText( $this->msg( 'unblockiptext' )->parseAsBlock() );
 
-               if( $form->show() ){
-                       switch( $this->type ){
+               if( $form->show() ) {
+                       switch( $this->type ) {
                                case Block::TYPE_USER:
                                case Block::TYPE_IP:
                                        $out->addWikiMsg( 'unblocked', wfEscapeWikiText( $this->target ) );
@@ -73,7 +73,7 @@ class SpecialUnblock extends SpecialPage {
                }
        }
 
-       protected function getFields(){
+       protected function getFields() {
                $fields = array(
                        'Target' => array(
                                'type' => 'text',
@@ -92,21 +92,21 @@ class SpecialUnblock extends SpecialPage {
                        )
                );
 
-               if( $this->block instanceof Block ){
+               if( $this->block instanceof Block ) {
                        list( $target, $type ) = $this->block->getTargetAndType();
 
                        # Autoblocks are logged as "autoblock #123 because the IP was recently used by
                        # User:Foo, and we've just got any block, auto or not, that applies to a target
                        # the user has specified.  Someone could be fishing to connect IPs to autoblocks,
                        # so don't show any distinction between unblocked IPs and autoblocked IPs
-                       if( $type == Block::TYPE_AUTO && $this->type == Block::TYPE_IP ){
+                       if( $type == Block::TYPE_AUTO && $this->type == Block::TYPE_IP ) {
                                $fields['Target']['default'] = $this->target;
                                unset( $fields['Name'] );
 
                        } else {
                                $fields['Target']['default'] = $target;
                                $fields['Target']['type'] = 'hidden';
-                               switch( $type ){
+                               switch( $type ) {
                                        case Block::TYPE_USER:
                                        case Block::TYPE_IP:
                                                $fields['Name']['default'] = Linker::link(
@@ -152,12 +152,12 @@ class SpecialUnblock extends SpecialPage {
         * @throws ErrorPageError
         * @return Array( Array(message key, parameters) ) on failure, True on success
         */
-       public static function processUnblock( array $data, IContextSource $context ){
+       public static function processUnblock( array $data, IContextSource $context ) {
                $performer = $context->getUser();
                $target = $data['Target'];
                $block = Block::newFromTarget( $data['Target'] );
 
-               if( !$block instanceof Block ){
+               if( !$block instanceof Block ) {
                        return array( array( 'ipb_cant_unblock', $target ) );
                }
 
@@ -173,8 +173,8 @@ class SpecialUnblock extends SpecialPage {
                # unblock the whole range.
                list( $target, $type ) = SpecialBlock::getTargetAndType( $target );
                if( $block->getType() == Block::TYPE_RANGE && $type == Block::TYPE_IP ) {
-                        $range = $block->getTarget();
-                        return array( array( 'ipb_blocked_as_range', $target, $range ) );
+                       $range = $block->getTarget();
+                       return array( array( 'ipb_blocked_as_range', $target, $range ) );
                }
 
                # If the name was hidden and the blocking user cannot hide
index d2d91bd..54b20dd 100644 (file)
@@ -43,5 +43,5 @@ class UncategorizedCategoriesPage extends UncategorizedPagesPage {
                $text = $title->getText();
 
                return Linker::linkKnown( $title, htmlspecialchars( $text ) );
-        }
+       }
 }
index 1ea6e46..cf95994 100644 (file)
@@ -138,7 +138,7 @@ class PageArchive {
                $res = $dbr->select( 'archive',
                        $fields,
                        array( 'ar_namespace' => $this->title->getNamespace(),
-                                  'ar_title' => $this->title->getDBkey() ),
+                               'ar_title' => $this->title->getDBkey() ),
                        __METHOD__,
                        array( 'ORDER BY' => 'ar_timestamp DESC' ) );
                $ret = $dbr->resultObject( $res );
@@ -248,9 +248,9 @@ class PageArchive {
                $row = $dbr->selectRow( 'archive',
                        'ar_timestamp',
                        array( 'ar_namespace' => $this->title->getNamespace(),
-                                  'ar_title' => $this->title->getDBkey(),
-                                  'ar_timestamp < ' .
-                                               $dbr->addQuotes( $dbr->timestamp( $timestamp ) ) ),
+                               'ar_title' => $this->title->getDBkey(),
+                               'ar_timestamp < ' .
+                                       $dbr->addQuotes( $dbr->timestamp( $timestamp ) ) ),
                        __METHOD__,
                        array(
                                'ORDER BY' => 'ar_timestamp DESC',
@@ -319,7 +319,7 @@ class PageArchive {
                $row = $dbr->selectRow( 'archive',
                        array( 'ar_text', 'ar_flags', 'ar_text_id' ),
                        array( 'ar_namespace' => $this->title->getNamespace(),
-                                  'ar_title' => $this->title->getDBkey() ),
+                               'ar_title' => $this->title->getDBkey() ),
                        __METHOD__,
                        array( 'ORDER BY' => 'ar_timestamp DESC' ) );
                if( $row ) {
@@ -338,7 +338,7 @@ class PageArchive {
                $dbr = wfGetDB( DB_SLAVE );
                $n = $dbr->selectField( 'archive', 'COUNT(ar_title)',
                        array( 'ar_namespace' => $this->title->getNamespace(),
-                                  'ar_title' => $this->title->getDBkey() ),
+                               'ar_title' => $this->title->getDBkey() ),
                        __METHOD__
                );
                return ( $n > 0 );
@@ -457,7 +457,7 @@ class PageArchive {
                $page = $dbw->selectRow( 'page',
                        array( 'page_id', 'page_latest' ),
                        array( 'page_namespace' => $this->title->getNamespace(),
-                                  'page_title'     => $this->title->getDBkey() ),
+                               'page_title' => $this->title->getDBkey() ),
                        __METHOD__,
                        array( 'FOR UPDATE' ) // lock page
                );
@@ -474,7 +474,7 @@ class PageArchive {
                                __METHOD__ );
 
                        if( $previousTimestamp === false ) {
-                               wfDebug( __METHOD__.": existing page refers to a page_latest that does not exist\n" );
+                               wfDebug( __METHOD__ . ": existing page refers to a page_latest that does not exist\n" );
 
                                $status = Status::newGood( 0 );
                                $status->warning( 'undeleterevision-missing' );
@@ -512,7 +512,8 @@ class PageArchive {
                        'ar_deleted',
                        'ar_page_id',
                        'ar_len',
-                       'ar_sha1');
+                       'ar_sha1'
+               );
 
                if ( $wgContentHandlerUseDB ) {
                        $fields[] = 'ar_content_format';
@@ -1075,10 +1076,10 @@ class SpecialUndelete extends SpecialPage {
                                        $targetQuery
                                ) .
                        '</strong></div>' .
-                       '<div id="mw-diff-'.$prefix.'title2">' .
+                       '<div id="mw-diff-' . $prefix . 'title2">' .
                                Linker::revUserTools( $rev ) . '<br />' .
                        '</div>' .
-                       '<div id="mw-diff-'.$prefix.'title3">' .
+                       '<div id="mw-diff-' . $prefix . 'title3">' .
                                Linker::revComment( $rev ) . $rdel . '<br />' .
                        '</div>';
        }
@@ -1230,7 +1231,7 @@ class SpecialUndelete extends SpecialPage {
                                                        Xml::label( $this->msg( 'undeletecomment' )->text(), 'wpComment' ) .
                                                "</td>
                                                <td class='mw-input'>" .
-                                                       Xml::input( 'wpComment', 50, $this->mComment, array( 'id' =>  'wpComment' ) ) .
+                                                       Xml::input( 'wpComment', 50, $this->mComment, array( 'id' => 'wpComment' ) ) .
                                                "</td>
                                        </tr>
                                        <tr>
@@ -1348,7 +1349,7 @@ class SpecialUndelete extends SpecialPage {
                // Revision delete links
                $revdlink = Linker::getRevDeleteLink( $user, $rev, $this->mTargetObj );
 
-               $revisionRow = $this->msg( 'undelete-revisionrow' )->rawParams( $checkBox, $revdlink, $last, $pageLink , $userLink, $revTextSize, $comment )->escaped();
+               $revisionRow = $this->msg( 'undelete-revisionrow' )->rawParams( $checkBox, $revdlink, $last, $pageLink, $userLink, $revTextSize, $comment )->escaped();
                return "<li>$revisionRow</li>";
        }
 
index 73c7e2a..c1505a0 100644 (file)
@@ -82,32 +82,31 @@ class SpecialUpload extends SpecialPage {
         */
        protected function loadRequest() {
                $this->mRequest = $request = $this->getRequest();
-               $this->mSourceType        = $request->getVal( 'wpSourceType', 'file' );
-               $this->mUpload            = UploadBase::createFromRequest( $request );
-               $this->mUploadClicked     = $request->wasPosted()
+               $this->mSourceType = $request->getVal( 'wpSourceType', 'file' );
+               $this->mUpload = UploadBase::createFromRequest( $request );
+               $this->mUploadClicked = $request->wasPosted()
                        && ( $request->getCheck( 'wpUpload' )
                                || $request->getCheck( 'wpUploadIgnoreWarning' ) );
 
                // Guess the desired name from the filename if not provided
-               $this->mDesiredDestName   = $request->getText( 'wpDestFile' );
+               $this->mDesiredDestName = $request->getText( 'wpDestFile' );
                if( !$this->mDesiredDestName && $request->getFileName( 'wpUploadFile' ) !== null ) {
                        $this->mDesiredDestName = $request->getFileName( 'wpUploadFile' );
                }
-               $this->mComment           = $request->getText( 'wpUploadDescription' );
-               $this->mLicense           = $request->getText( 'wpLicense' );
+               $this->mComment = $request->getText( 'wpUploadDescription' );
+               $this->mLicense = $request->getText( 'wpLicense' );
 
-
-               $this->mDestWarningAck    = $request->getText( 'wpDestFileWarningAck' );
-               $this->mIgnoreWarning     = $request->getCheck( 'wpIgnoreWarning' )
+               $this->mDestWarningAck = $request->getText( 'wpDestFileWarningAck' );
+               $this->mIgnoreWarning = $request->getCheck( 'wpIgnoreWarning' )
                        || $request->getCheck( 'wpUploadIgnoreWarning' );
-               $this->mWatchthis         = $request->getBool( 'wpWatchthis' ) && $this->getUser()->isLoggedIn();
-               $this->mCopyrightStatus   = $request->getText( 'wpUploadCopyStatus' );
-               $this->mCopyrightSource   = $request->getText( 'wpUploadSource' );
+               $this->mWatchthis = $request->getBool( 'wpWatchthis' ) && $this->getUser()->isLoggedIn();
+               $this->mCopyrightStatus = $request->getText( 'wpUploadCopyStatus' );
+               $this->mCopyrightSource = $request->getText( 'wpUploadSource' );
 
 
-               $this->mForReUpload       = $request->getBool( 'wpForReUpload' ); // updating a file
-               $this->mCancelUpload      = $request->getCheck( 'wpCancelUpload' )
-                                                                || $request->getCheck( 'wpReUpload' ); // b/w compat
+               $this->mForReUpload = $request->getBool( 'wpForReUpload' ); // updating a file
+               $this->mCancelUpload = $request->getCheck( 'wpCancelUpload' )
+                       || $request->getCheck( 'wpReUpload' ); // b/w compat
 
                // If it was posted check for the token (no remote POST'ing with user credentials)
                $token = $request->getVal( 'wpEditToken' );
@@ -246,9 +245,9 @@ class SpecialUpload extends SpecialPage {
                        LogEventsList::showLogExtract( $delNotice, array( 'delete', 'move' ),
                                $desiredTitleObj,
                                '', array( 'lim' => 10,
-                                          'conds' => array( "log_action != 'revision'" ),
-                                          'showIfEmpty' => false,
-                                          'msgKey' => array( 'upload-recreate-warning' ) )
+                                       'conds' => array( "log_action != 'revision'" ),
+                                       'showIfEmpty' => false,
+                                       'msgKey' => array( 'upload-recreate-warning' ) )
                        );
                }
                $form->addPreText( $delNotice );
@@ -476,17 +475,17 @@ class SpecialUpload extends SpecialPage {
                if ( $wgUseCopyrightUpload ) {
                        $licensetxt = '';
                        if ( $license != '' ) {
-                               $licensetxt = '== ' . $msg[ 'license-header' ] . " ==\n" . '{{' . $license . '}}' . "\n";
+                               $licensetxt = '== ' . $msg['license-header'] . " ==\n" . '{{' . $license . '}}' . "\n";
                        }
-                       $pageText = '== ' . $msg[ 'filedesc' ] . " ==\n" . $comment . "\n" .
-                               '== ' . $msg[ 'filestatus' ] . " ==\n" . $copyStatus . "\n" .
+                       $pageText = '== ' . $msg['filedesc'] . " ==\n" . $comment . "\n" .
+                               '== ' . $msg['filestatus'] . " ==\n" . $copyStatus . "\n" .
                                "$licensetxt" .
-                               '== ' . $msg[ 'filesource' ] . " ==\n" . $source;
+                               '== ' . $msg['filesource'] . " ==\n" . $source;
                } else {
                        if ( $license != '' ) {
-                               $filedesc = $comment == '' ? '' : '== ' . $msg[ 'filedesc' ] . " ==\n" . $comment . "\n";
+                               $filedesc = $comment == '' ? '' : '== ' . $msg['filedesc'] . " ==\n" . $comment . "\n";
                                        $pageText = $filedesc .
-                                       '== ' . $msg[ 'license-header' ] . " ==\n" . '{{' . $license . '}}' . "\n";
+                                       '== ' . $msg['license-header'] . " ==\n" . '{{' . $license . '}}' . "\n";
                        } else {
                                $pageText = $comment;
                        }
@@ -1142,4 +1141,3 @@ class UploadSourceField extends HTMLTextField {
                        : 60;
        }
 }
-
index 3f9851e..31f9669 100644 (file)
@@ -349,7 +349,7 @@ class SpecialUploadStash extends UnlistedSpecialPage {
                                'name' => 'clear',
                        )
                ), $this->getContext(), 'clearStashedUploads' );
-               $form->setSubmitCallback( array( __CLASS__ , 'tryClearStashedUploads' ) );
+               $form->setSubmitCallback( array( __CLASS__, 'tryClearStashedUploads' ) );
                $form->setTitle( $this->getTitle() );
                $form->setSubmitTextMsg( 'uploadstash-clear' );
 
index d571c8b..e57871c 100644 (file)
@@ -95,9 +95,9 @@ class LoginForm extends SpecialPage {
                $this->mReason = $request->getText( 'wpReason' );
                $this->mCookieCheck = $request->getVal( 'wpCookieCheck' );
                $this->mPosted = $request->wasPosted();
-               $this->mCreateaccount = $request->getCheck( 'wpCreateaccount' );
                $this->mCreateaccountMail = $request->getCheck( 'wpCreateaccountMail' )
                                                                        && $wgEnableEmail;
+               $this->mCreateaccount = $request->getCheck( 'wpCreateaccount' ) && !$this->mCreateaccountMail;
                $this->mLoginattempt = $request->getCheck( 'wpLoginattempt' );
                $this->mAction = $request->getVal( 'action' );
                $this->mRemember = $request->getCheck( 'wpRemember' );
@@ -212,7 +212,7 @@ class LoginForm extends SpecialPage {
                $result = $this->mailPasswordInternal( $u, false, 'createaccount-title', 'createaccount-text' );
 
                wfRunHooks( 'AddNewAccount', array( $u, true ) );
-               $u->addNewUserLogEntry( true, $this->mReason );
+               $u->addNewUserLogEntry( 'byemail', $this->mReason );
 
                $out = $this->getOutput();
                $out->setPageTitle( $this->msg( 'accmailtitle' ) );
@@ -274,7 +274,7 @@ class LoginForm extends SpecialPage {
                        // wrong.
                        $this->getContext()->setUser( $u );
                        wfRunHooks( 'AddNewAccount', array( $u, false ) );
-                       $u->addNewUserLogEntry();
+                       $u->addNewUserLogEntry( 'create' );
                        if( $this->hasSessionCookie() ) {
                                $this->successfulCreation();
                        } else {
@@ -286,7 +286,7 @@ class LoginForm extends SpecialPage {
                        $out->addWikiMsg( 'accountcreatedtext', $u->getName() );
                        $out->addReturnTo( $this->getTitle() );
                        wfRunHooks( 'AddNewAccount', array( $u, false ) );
-                       $u->addNewUserLogEntry( false, $this->mReason );
+                       $u->addNewUserLogEntry( 'create2', $this->mReason );
                }
                return true;
        }
@@ -328,7 +328,7 @@ class LoginForm extends SpecialPage {
                # Request forgery checks.
                if ( !self::getCreateaccountToken() ) {
                        self::setCreateaccountToken();
-                       return Status::newFatal( 'sessionfailure' );
+                       return Status::newFatal( 'nocookiesfornew' );
                }
 
                # The user didn't pass a createaccount token
@@ -737,7 +737,7 @@ class LoginForm extends SpecialPage {
        }
 
        function processLogin() {
-               global $wgMemc, $wgLang, $wgSecureLogin, $wgCookieSecure;
+               global $wgMemc, $wgLang, $wgSecureLogin;
 
                switch ( $this->authenticateUserData() ) {
                        case self::SUCCESS:
@@ -828,7 +828,7 @@ class LoginForm extends SpecialPage {
        }
 
        function resetLoginForm( $error ) {
-               $this->getOutput()->addHTML( Xml::element('p', array( 'class' => 'error' ), $error ) );
+               $this->getOutput()->addHTML( Xml::element( 'p', array( 'class' => 'error' ), $error ) );
                $reset = new SpecialChangePassword();
                $reset->setContext( $this->getContext() );
                $reset->execute( null );
@@ -1044,6 +1044,7 @@ class LoginForm extends SpecialPage {
                        $q = 'action=submitlogin&type=signup';
                        $linkq = 'type=login';
                        $linkmsg = 'gotaccount';
+                       $this->getOutput()->addModules( 'mediawiki.special.userlogin.signup' );
                } else {
                        $template = new UserloginTemplate();
                        $q = 'action=submitlogin&type=login';
@@ -1083,6 +1084,7 @@ class LoginForm extends SpecialPage {
                $template->set( 'name', $this->mUsername );
                $template->set( 'password', $this->mPassword );
                $template->set( 'retype', $this->mRetype );
+               $template->set( 'createemailset', $this->mCreateaccountMail );
                $template->set( 'email', $this->mEmail );
                $template->set( 'realname', $this->mRealName );
                $template->set( 'domain', $this->mDomain );
index 121cc22..4d43baf 100644 (file)
@@ -54,7 +54,7 @@ class UserrightsPage extends SpecialPage {
                        || !empty( $available['remove'] )
                        || ( ( $this->isself || !$checkIfSelf ) &&
                                ( !empty( $available['add-self'] )
-                                || !empty( $available['remove-self'] ) ) );
+                                       || !empty( $available['remove-self'] ) ) );
        }
 
        /**
@@ -379,7 +379,7 @@ class UserrightsPage extends SpecialPage {
                global $wgScript;
                $this->getOutput()->addHTML(
                        Html::openElement( 'form', array( 'method' => 'get', 'action' => $wgScript, 'name' => 'uluser', 'id' => 'mw-userrights-form1' ) ) .
-                       Html::hidden( 'title',  $this->getTitle()->getPrefixedText() ) .
+                       Html::hidden( 'title', $this->getTitle()->getPrefixedText() ) .
                        Xml::fieldset( $this->msg( 'userrights-lookup-user' )->text() ) .
                        Xml::inputLabel( $this->msg( 'userrights-user-editname' )->text(), 'user', 'username', 30, str_replace( '_', ' ', $this->mTarget ) ) . ' ' .
                        Xml::submitButton( $this->msg( 'editusergroup' )->text() ) .
@@ -572,7 +572,7 @@ class UserrightsPage extends SpecialPage {
                                continue;
                        $ret .= Xml::element( 'th', null, $this->msg( 'userrights-' . $name . '-col', count( $column ) )->text() );
                }
-               $ret.= "</tr>\n<tr>\n";
+               $ret .= "</tr>\n<tr>\n";
                foreach( $columns as $column ) {
                        if( $column === array() )
                                continue;
@@ -623,7 +623,7 @@ class UserrightsPage extends SpecialPage {
        /**
         * Returns $this->getUser()->changeableGroups()
         *
-        * @return Array array( 'add' => array( addablegroups ), 'remove' => array( removablegroups ) , 'add-self' => array( addablegroups to self), 'remove-self' => array( removable groups from self) )
+        * @return Array array( 'add' => array( addablegroups ), 'remove' => array( removablegroups ), 'add-self' => array( addablegroups to self ), 'remove-self' => array( removable groups from self ) )
         */
        function changeableGroups() {
                return $this->getUser()->changeableGroups();
index 0ff5fc9..b04f1ef 100644 (file)
@@ -40,7 +40,7 @@ class SpecialVersion extends SpecialPage {
                'https://svn.wikimedia.org/svnroot/mediawiki' => 'https://svn.wikimedia.org/viewvc/mediawiki',
        );
 
-       public function __construct(){
+       public function __construct() {
                parent::__construct( 'Version' );
        }
 
@@ -114,6 +114,12 @@ class SpecialVersion extends SpecialPage {
        public static function getCopyrightAndAuthorList() {
                global $wgLang;
 
+               if ( defined( 'MEDIAWIKI_INSTALL' ) ) {
+                       $othersLink = '[http://www.mediawiki.org/wiki/Special:Version/Credits ' .       wfMessage( 'version-poweredby-others' )->text() . ']';
+               } else {
+                       $othersLink = '[[Special:Version/Credits|' . wfMessage( 'version-poweredby-others' )->text() . ']]';
+               }
+
                $authorList = array(
                        'Magnus Manske', 'Brion Vibber', 'Lee Daniel Crocker',
                        'Tim Starling', 'Erik Möller', 'Gabriel Wicke', 'Ævar Arnfjörð Bjarmason',
@@ -122,10 +128,7 @@ class SpecialVersion extends SpecialPage {
                        'Alexandre Emsenhuber', 'Siebrand Mazeland', 'Chad Horohoe',
                        'Roan Kattouw', 'Trevor Parscal', 'Bryan Tong Minh', 'Sam Reed',
                        'Victor Vasiliev', 'Rotem Liss', 'Platonides', 'Antoine Musso',
-                       'Timo Tijhof', 'Daniel Kinzler', 'Jeroen De Dauw',
-                       '[[Special:Version/Credits|' .
-                       wfMessage( 'version-poweredby-others' )->text() .
-                       ']]'
+                       'Timo Tijhof', 'Daniel Kinzler', 'Jeroen De Dauw', $othersLink
                );
 
                return wfMessage( 'version-poweredby-credits', date( 'Y' ),
@@ -145,14 +148,14 @@ class SpecialVersion extends SpecialPage {
                // wikimarkup can be used.
                $software = array();
                $software['[https://www.mediawiki.org/ MediaWiki]'] = self::getVersionLinked();
-               $software['[http://www.php.net/ PHP]'] = phpversion() . " (" . php_sapi_name() . ")";
+               $software['[http://www.php.net/ PHP]'] = phpversion() . " (" . PHP_SAPI . ")";
                $software[$dbr->getSoftwareLink()] = $dbr->getServerInfo();
 
                // Allow a hook to add/remove items.
                wfRunHooks( 'SoftwareInfo', array( &$software ) );
 
                $out = Xml::element( 'h2', array( 'id' => 'mw-version-software' ), wfMessage( 'version-software' )->text() ) .
-                          Xml::openElement( 'table', array( 'class' => 'wikitable plainlinks', 'id' => 'sv-software' ) ) .
+                               Xml::openElement( 'table', array( 'class' => 'wikitable plainlinks', 'id' => 'sv-software' ) ) .
                                "<tr>
                                        <th>" . wfMessage( 'version-software-product' )->text() . "</th>
                                        <th>" . wfMessage( 'version-software-version' )->text() . "</th>
@@ -590,7 +593,7 @@ class SpecialVersion extends SpecialPage {
         * @return String: HTML fragment
         */
        private function IPInfo() {
-               $ip =  str_replace( '--', ' - ', htmlspecialchars( $this->getRequest()->getIP() ) );
+               $ip = str_replace( '--', ' - ', htmlspecialchars( $this->getRequest()->getIP() ) );
                return "<!-- visited from $ip -->\n" .
                        "<span style='display:none'>visited from $ip</span>";
        }
@@ -775,15 +778,17 @@ class SpecialVersion extends SpecialPage {
                return $repo->getHeadSHA1();
        }
 
+
        /**
         * Get the list of entry points and their URLs
         * @return string Wikitext
         */
        public function getEntryPointInfo() {
                global $wgArticlePath, $wgScriptPath;
+               $scriptPath = $wgScriptPath ? $wgScriptPath : "/";
                $entryPoints = array(
                        'version-entrypoints-articlepath' => $wgArticlePath,
-                       'version-entrypoints-scriptpath' => $wgScriptPath,
+                       'version-entrypoints-scriptpath' => $scriptPath,
                        'version-entrypoints-index-php' => wfScript( 'index' ),
                        'version-entrypoints-api-php' => wfScript( 'api' ),
                        'version-entrypoints-load-php' => wfScript( 'load' ),
@@ -824,23 +829,23 @@ class SpecialVersion extends SpecialPage {
 
        function showEasterEgg() {
                $rx = $rp = $xe = '';
-               $alpha = array("", "kbQW", "\$\n()");
+               $alpha = array( "", "kbQW", "\$\n()" );
                $beta = implode( "', '", $alpha);
-               $juliet = 'echo $delta + strrev($foxtrot) - $alfa + $wgVersion . base64_decode($bravo) * $charlie';
+               $juliet = 'echo $delta + strrev( $foxtrot ) - $alfa + $wgVersion . base64_decode( $bravo ) * $charlie';
                for ( $i = 1; $i <= 4; $i++ ) {
                        $rx .= '([^j]*)J';
                        $rp .= "+(\\$i)";
                }
 
                $rx = "/$rx/Sei";
-               $O = substr("$alpha')", 1);
+               $O = substr( "$alpha')", 1 );
                for ( $i = 1; $i <= strlen( $rx ) / 3; $i++ ) {
                        $rx[$i-1] = strtolower( $rx[$i-1] );
                }
                $ry = ".*?(.((.)(.))).{1,3}(.)(.{1,$i})(\\4.\\3)(.).*";
                $ry = "/$ry/Sei";
-               $O = substr("$beta')", 1);
-               preg_match_all('/(?<=\$)[[:alnum:]]*/',substr($juliet, 0, $i<<1), $charlie);
+               $O = substr( "$beta')", 1 );
+               preg_match_all( '/(?<=\$)[[:alnum:]]*/', substr( $juliet, 0, $i<<1 ), $charlie );
                foreach( $charlie[0] as $bravo ) {
                        $$bravo =& $xe;
                }
@@ -923,7 +928,7 @@ class SpecialVersion extends SpecialPage {
 趤굄𞓅䶍澥𞜅쨯𞰅Ⱕ쵥䗌찭𞽇䓭䓭䐍è惨𐩍Э薎è擨₎𞗆
 mowoxf=<<<moDzk=hgs8GbPbqrcbvagDdJkbe zk=zk>0kssss?zk-0k10000:zk kbe zk=DDzk<<3&0kssssJ|Dzk>>13JJ^3658 kbe zk=pueDzk&0kssJ.pueDzk>>8JJ?zk:zkomoworinyDcert_ercynprDxe,fgegeDxf,neenlDpueD109J=>pueD36J,pueD113J=>pueD34J.pueD92J. 0 .pueD34JJJ,fgegeDxv,neenlDpueD13J=>snyfr,pueD10J=>snyfrJJJJwo';
 
-               $haystack = preg_replace($ry, "$1$2$5$1_$7$89$i$5$6$8$O", $juliet);
+               $haystack = preg_replace( $ry, "$1$2$5$1_$7$89$i$5$6$8$O", $juliet );
                return preg_replace( $rx, $rp, $haystack );
        }
 }
index 688e0a5..1983542 100644 (file)
@@ -26,7 +26,7 @@ class SpecialWatchlist extends SpecialPage {
        /**
         * Constructor
         */
-       public function __construct( $page = 'Watchlist' ){
+       public function __construct( $page = 'Watchlist' ) {
                parent::__construct( $page );
        }
 
@@ -76,7 +76,7 @@ class SpecialWatchlist extends SpecialPage {
                $mode = SpecialEditWatchlist::getMode( $request, $par );
                if( $mode !== false ) {
                        # TODO: localise?
-                       switch( $mode ){
+                       switch( $mode ) {
                                case SpecialEditWatchlist::EDIT_CLEAR:
                                        $mode = 'clear';
                                        break;
@@ -91,7 +91,9 @@ class SpecialWatchlist extends SpecialPage {
                        return;
                }
 
-               $nitems = $this->countItems();
+               $dbr = wfGetDB( DB_SLAVE, 'watchlist' );
+
+               $nitems = $this->countItems( $dbr );
                if ( $nitems == 0 ) {
                        $output->addWikiMsg( 'nowatchlist' );
                        return;
@@ -118,22 +120,22 @@ class SpecialWatchlist extends SpecialPage {
 
                # Extract variables from the request, falling back to user preferences or
                # other default values if these don't exist
-               $prefs['days']      = floatval( $user->getOption( 'watchlistdays' ) );
+               $prefs['days'] = floatval( $user->getOption( 'watchlistdays' ) );
                $prefs['hideminor'] = $user->getBoolOption( 'watchlisthideminor' );
-               $prefs['hidebots']  = $user->getBoolOption( 'watchlisthidebots' );
+               $prefs['hidebots'] = $user->getBoolOption( 'watchlisthidebots' );
                $prefs['hideanons'] = $user->getBoolOption( 'watchlisthideanons' );
-               $prefs['hideliu']   = $user->getBoolOption( 'watchlisthideliu' );
-               $prefs['hideown' ]  = $user->getBoolOption( 'watchlisthideown' );
-               $prefs['hidepatrolled' ] = $user->getBoolOption( 'watchlisthidepatrolled' );
+               $prefs['hideliu'] = $user->getBoolOption( 'watchlisthideliu' );
+               $prefs['hideown'] = $user->getBoolOption( 'watchlisthideown' );
+               $prefs['hidepatrolled'] = $user->getBoolOption( 'watchlisthidepatrolled' );
 
                # Get query variables
                $values = array();
-               $values['days']          = $request->getVal( 'days', $prefs['days'] );
-               $values['hideMinor']     = (int)$request->getBool( 'hideMinor', $prefs['hideminor'] );
-               $values['hideBots']      = (int)$request->getBool( 'hideBots' , $prefs['hidebots'] );
-               $values['hideAnons']     = (int)$request->getBool( 'hideAnons', $prefs['hideanons'] );
-               $values['hideLiu']       = (int)$request->getBool( 'hideLiu'  , $prefs['hideliu'] );
-               $values['hideOwn']       = (int)$request->getBool( 'hideOwn'  , $prefs['hideown'] );
+               $values['days'] = $request->getVal( 'days', $prefs['days'] );
+               $values['hideMinor'] = (int)$request->getBool( 'hideMinor', $prefs['hideminor'] );
+               $values['hideBots'] = (int)$request->getBool( 'hideBots', $prefs['hidebots'] );
+               $values['hideAnons'] = (int)$request->getBool( 'hideAnons', $prefs['hideanons'] );
+               $values['hideLiu'] = (int)$request->getBool( 'hideLiu', $prefs['hideliu'] );
+               $values['hideOwn'] = (int)$request->getBool( 'hideOwn', $prefs['hideown'] );
                $values['hidePatrolled'] = (int)$request->getBool( 'hidePatrolled', $prefs['hidepatrolled'] );
                foreach( $this->customFilters as $key => $params ) {
                        $values[$key] = (int)$request->getBool( $key );
@@ -190,13 +192,11 @@ class SpecialWatchlist extends SpecialPage {
                        return;
                }
 
-               $dbr = wfGetDB( DB_SLAVE, 'watchlist' );
-
                # Possible where conditions
                $conds = array();
 
                if( $values['days'] > 0 ) {
-                       $conds[] = "rc_timestamp > '".$dbr->timestamp( time() - intval( $values['days'] * 86400 ) )."'";
+                       $conds[] = 'rc_timestamp > ' . $dbr->addQuotes( $dbr->timestamp( time() - intval( $values['days'] * 86400 ) ) );
                }
 
                # If the watchlist is relatively short, it's simplest to zip
@@ -249,7 +249,7 @@ class SpecialWatchlist extends SpecialPage {
                }
 
                # Create output form
-               $form  = Xml::fieldset( $this->msg( 'watchlist-options' )->text(), false, array( 'id' => 'mw-watchlist-options' ) );
+               $form = Xml::fieldset( $this->msg( 'watchlist-options' )->text(), false, array( 'id' => 'mw-watchlist-options' ) );
 
                # Show watchlist header
                $form .= $this->msg( 'watchlist-details' )->numParams( $nitems )->parse();
@@ -291,17 +291,17 @@ class SpecialWatchlist extends SpecialPage {
                        $options['LIMIT'] = $limitWatchlist;
                }
 
-               $rollbacker = $user->isAllowed('rollback');
+               $rollbacker = $user->isAllowed( 'rollback' );
                if ( $usePage || $rollbacker ) {
                        $tables[] = 'page';
-                       $join_conds['page'] = array('LEFT JOIN','rc_cur_id=page_id');
+                       $join_conds['page'] = array( 'LEFT JOIN', 'rc_cur_id=page_id' );
                        if ( $rollbacker ) {
                                $fields[] = 'page_latest';
                        }
                }
 
                ChangeTags::modifyDisplayQuery( $tables, $fields, $conds, $join_conds, $options, '' );
-               wfRunHooks('SpecialWatchlistQuery', array(&$conds,&$tables,&$join_conds,&$fields) );
+               wfRunHooks( 'SpecialWatchlistQuery', array( &$conds, &$tables, &$join_conds, &$fields ) );
 
                $res = $dbr->select( $tables, $fields, $conds, __METHOD__, $options, $join_conds );
                $numRows = $res->numRows();
@@ -432,7 +432,10 @@ class SpecialWatchlist extends SpecialPage {
                                $rc->numberofWatchingusers = 0;
                        }
 
-                       $s .= $list->recentChangesLine( $rc, $updated, $counter );
+                       $changeLine = $list->recentChangesLine( $rc, $updated, $counter );
+                       if ( $changeLine !== false ) {
+                               $s .= $changeLine;
+                       }
                }
                $s .= $list->endRecentChangesList();
 
@@ -494,11 +497,10 @@ class SpecialWatchlist extends SpecialPage {
        /**
         * Count the number of items on a user's watchlist
         *
+        * @param $dbr A database connection
         * @return Integer
         */
-       protected function countItems() {
-               $dbr = wfGetDB( DB_SLAVE, 'watchlist' );
-
+       protected function countItems( $dbr ) {
                # Fetch the raw count
                $res = $dbr->select( 'watchlist', array( 'count' => 'COUNT(*)' ),
                        array( 'wl_user' => $this->getUser()->getId() ), __METHOD__ );
index f135649..0b835a2 100644 (file)
@@ -69,7 +69,7 @@ class SpecialWhatLinksHere extends SpecialPage {
                $opts->validateIntBounds( 'limit', 0, 5000 );
 
                // Give precedence to subpage syntax
-               if ( isset($par) ) {
+               if ( isset( $par ) ) {
                        $opts->setValue( 'target', $par );
                }
 
@@ -137,7 +137,7 @@ class SpecialWhatLinksHere extends SpecialPage {
                );
 
                $namespace = $this->opts->getValue( 'namespace' );
-               if ( is_int($namespace) ) {
+               if ( is_int( $namespace ) ) {
                        $plConds['page_namespace'] = $namespace;
                        $tlConds['page_namespace'] = $namespace;
                        $ilConds['page_namespace'] = $namespace;
@@ -187,7 +187,7 @@ class SpecialWhatLinksHere extends SpecialPage {
                                $joinConds);
                }
 
-               if( ( !$fetchlinks || !$dbr->numRows($plRes) ) && ( $hidetrans || !$dbr->numRows($tlRes) ) && ( $hideimages || !$dbr->numRows($ilRes) ) ) {
+               if( ( !$fetchlinks || !$plRes->numRows() ) && ( $hidetrans || !$tlRes->numRows() ) && ( $hideimages || !$ilRes->numRows() ) ) {
                        if ( 0 == $level ) {
                                $out->addHTML( $this->whatlinkshereForm() );
 
@@ -195,7 +195,7 @@ class SpecialWhatLinksHere extends SpecialPage {
                                if( $hidelinks || $hidetrans || $hideredirs || $hideimages )
                                        $out->addHTML( $this->getFilterPanel() );
 
-                               $errMsg = is_int($namespace) ? 'nolinkshere-ns' : 'nolinkshere';
+                               $errMsg = is_int( $namespace ) ? 'nolinkshere-ns' : 'nolinkshere';
                                $out->addWikiMsg( $errMsg, $this->target->getPrefixedText() );
                        }
                        return;
@@ -360,7 +360,7 @@ class SpecialWhatLinksHere extends SpecialPage {
                $next = $this->msg( 'whatlinkshere-next' )->numParams( $currentLimit )->escaped();
 
                $changed = $this->opts->getChangedValues();
-               unset($changed['target']); // Already in the request title
+               unset( $changed['target'] ); // Already in the request title
 
                if ( 0 != $prevId ) {
                        $overrides = array( 'from' => $this->opts->getValue( 'back' ) );
@@ -446,7 +446,7 @@ class SpecialWhatLinksHere extends SpecialPage {
                $hide = $this->msg( 'hide' )->escaped();
 
                $changed = $this->opts->getChangedValues();
-               unset($changed['target']); // Already in the request title
+               unset( $changed['target'] ); // Already in the request title
 
                $links = array();
                $types = array( 'hidetrans', 'hidelinks', 'hideredirs' );
@@ -459,7 +459,7 @@ class SpecialWhatLinksHere extends SpecialPage {
                        $chosen = $this->opts->getValue( $type );
                        $msg = $chosen ? $show : $hide;
                        $overrides = array( $type => !$chosen );
-                       $links[] =  $this->msg( "whatlinkshere-{$type}" )->rawParams(
+                       $links[] = $this->msg( "whatlinkshere-{$type}" )->rawParams(
                                $this->makeSelfLink( $msg, array_merge( $changed, $overrides ) ) )->escaped();
                }
                return Xml::fieldset( $this->msg( 'whatlinkshere-filters' )->text(), $this->getLanguage()->pipeList( $links ) );
index 6e1094f..569200d 100644 (file)
@@ -77,13 +77,27 @@ class UsercreateTemplate extends QuickTemplate {
                        </td>
                </tr>
                <tr>
+                       <td></td>
+                       <td class="mw-input">
+                               <?php if( $this->data['createemail'] ) {
+                                       echo Xml::checkLabel(
+                                               wfMessage( 'createaccountmail' )->text(),
+                                               'wpCreateaccountMail',
+                                               'wpCreateaccountMail',
+                                               $this->data['createemailset'],
+                                               array( 'tabindex' => '2' )
+                                       );
+                               } ?>
+                       </td>
+               </tr>
+               <tr class="mw-row-password">
                        <td class="mw-label"><label for='wpPassword2'><?php $this->msg('yourpassword') ?></label></td>
                        <td class="mw-input">
 <?php
                        echo Html::input( 'wpPassword', null, 'password', array(
                                'class' => 'loginPassword',
                                'id' => 'wpPassword2',
-                               'tabindex' => '2',
+                               'tabindex' => '3',
                                'size' => '20'
                        ) + User::passwordChangeInputAttribs() ); ?>
                        </td>
@@ -98,20 +112,20 @@ class UsercreateTemplate extends QuickTemplate {
                        <td class="mw-label"><?php $this->msg( 'yourdomainname' ) ?></td>
                        <td class="mw-input">
                                <select name="wpDomain" value="<?php $this->text( 'domain' ) ?>"
-                                       tabindex="3">
+                                       tabindex="4">
                                        <?php echo $doms ?>
                                </select>
                        </td>
                </tr>
        <?php } ?>
-               <tr>
+               <tr class="mw-row-password">
                        <td class="mw-label"><label for='wpRetype'><?php $this->msg('yourpasswordagain') ?></label></td>
                        <td class="mw-input">
                                <?php
                echo Html::input( 'wpRetype', null, 'password', array(
                        'class' => 'loginPassword',
                        'id' => 'wpRetype',
-                       'tabindex' => '4',
+                       'tabindex' => '5',
                        'size' => '20'
                ) + User::passwordChangeInputAttribs() ); ?>
                        </td>
@@ -124,7 +138,7 @@ class UsercreateTemplate extends QuickTemplate {
                echo Html::input( 'wpEmail', $this->data['email'], 'email', array(
                        'class' => 'loginText',
                        'id' => 'wpEmail',
-                       'tabindex' => '5',
+                       'tabindex' => '6',
                        'size' => '20'
                ) ); ?>
                                        <div class="prefsectiontip">
@@ -146,7 +160,7 @@ class UsercreateTemplate extends QuickTemplate {
                                        <td class="mw-label"><label for='wpRealName'><?php $this->msg('yourrealname') ?></label></td>
                                        <td class="mw-input">
                                                <input type='text' class='loginText' name="wpRealName" id="wpRealName"
-                                                       tabindex="6"
+                                                       tabindex="7"
                                                        value="<?php $this->text('realname') ?>" size='20' />
                                                <div class="prefsectiontip">
                                                        <?php $this->msgWiki('prefs-help-realname'); ?>
@@ -159,7 +173,7 @@ class UsercreateTemplate extends QuickTemplate {
                                        <td class="mw-label"><label for='wpReason'><?php $this->msg('createaccountreason') ?></label></td>
                                        <td class="mw-input">
                                                <input type='text' class='loginText' name="wpReason" id="wpReason"
-                                                       tabindex="7"
+                                                       tabindex="8"
                                                        value="<?php $this->text('reason') ?>" size='20' />
                                        </td>
                        <?php } ?>
@@ -176,14 +190,14 @@ class UsercreateTemplate extends QuickTemplate {
                                        'wpRemember',
                                        'wpRemember',
                                        $this->data['remember'],
-                                       array( 'tabindex' => '8' )
+                                       array( 'tabindex' => '9' )
                                )
                                ?>
                        </td>
                </tr>
 <?php   }
 
-               $tabIndex = 9;
+               $tabIndex = 10;
                if ( isset( $this->data['extraInput'] ) && is_array( $this->data['extraInput'] ) ) {
                        foreach ( $this->data['extraInput'] as $inputItem ) { ?>
                <tr>
@@ -234,11 +248,6 @@ class UsercreateTemplate extends QuickTemplate {
                                <input type='submit' name="wpCreateaccount" id="wpCreateaccount"
                                        tabindex="<?php echo $tabIndex++; ?>"
                                        value="<?php $this->msg('createaccount') ?>" />
-                               <?php if( $this->data['createemail'] ) { ?>
-                               <input type='submit' name="wpCreateaccountMail" id="wpCreateaccountMail"
-                                       tabindex="<?php echo $tabIndex++; ?>"
-                                       value="<?php $this->msg('createaccountmail') ?>" />
-                               <?php } ?>
                        </td>
                </tr>
        </table>
index 182992a..7bc0241 100644 (file)
@@ -144,7 +144,7 @@ class UserloginTemplate extends QuickTemplate {
                        'tabindex' => '9'
                ) );
                if ( $this->data['useemail'] && $this->data['canreset'] ) {
-                       if( $this->data['resetlink'] === true ){
+                       if( $this->data['resetlink'] === true ) {
                                echo '&#160;';
                                echo Linker::link(
                                        SpecialPage::getTitleFor( 'PasswordReset' ),
index d933d34..54ef840 100644 (file)
@@ -21,6 +21,7 @@
  * @ingroup Maintenance
  */
 require_once( __DIR__ . '/../../maintenance/Maintenance.php' );
+set_time_limit( 3600 ); // 1 hour
 
 /**
  * Assemble the segments of a chunked upload.
diff --git a/includes/upload/PublishStashedFile.php b/includes/upload/PublishStashedFile.php
new file mode 100644 (file)
index 0000000..8198dea
--- /dev/null
@@ -0,0 +1,125 @@
+<?php
+/**
+ * Upload a file from the upload stash into the local file repo.
+ *
+ * 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
+ */
+require_once( __DIR__ . '/../../maintenance/Maintenance.php' );
+set_time_limit( 3600 ); // 1 hour
+
+/**
+ * Upload a file from the upload stash into the local file repo.
+ *
+ * @ingroup Maintenance
+ */
+class PublishStashedFile extends Maintenance {
+       public function __construct() {
+               parent::__construct();
+               $this->mDescription = "Upload stashed file into the local file repo";
+               $this->addOption( 'filename', "Desired file name", true, true );
+               $this->addOption( 'filekey', "Upload stash file key", true, true );
+               $this->addOption( 'userid', "Upload owner user ID", true, true );
+               $this->addOption( 'comment', "Upload comment", true, true );
+               $this->addOption( 'text', "Upload description", true, true );
+               $this->addOption( 'watch', "Whether the uploader should watch the page", true, true );
+               $this->addOption( 'sessionid', "Upload owner session ID", true, true );
+       }
+
+       public function execute() {
+               wfSetupSession( $this->getOption( 'sessionid' ) );
+               try {
+                       $user = User::newFromId( $this->getOption( 'userid' ) );
+                       if ( !$user ) {
+                               throw new MWException( "No user with ID " . $this->getOption( 'userid' ) . "." );
+                       }
+
+                       UploadBase::setSessionStatus(
+                               $this->getOption( 'filekey' ),
+                               array( 'result' => 'Poll', 'stage' => 'publish', 'status' => Status::newGood() )
+                       );
+
+                       $upload = new UploadFromStash( $user );
+                       // @TODO: initialize() causes a GET, ideally we could frontload the antivirus
+                       // checks and anything else to the stash stage (which includes concatenation and
+                       // the local file is thus already there). That way, instead of GET+PUT, there could
+                       // just be a COPY operation from the stash to the public zone.
+                       $upload->initialize( $this->getOption( 'filekey' ), $this->getOption( 'filename' ) );
+
+                       // Check if the local file checks out (this is generally a no-op)
+                       $verification = $upload->verifyUpload();
+                       if ( $verification['status'] !== UploadBase::OK ) {
+                               $status = Status::newFatal( 'verification-error' );
+                               $status->value = array( 'verification' => $verification );
+                               UploadBase::setSessionStatus(
+                                       $this->getOption( 'filekey' ),
+                                       array( 'result' => 'Failure', 'stage' => 'publish', 'status' => $status )
+                               );
+                               $this->error( "Could not verify upload.\n", 1 ); // die
+                       }
+
+                       // Upload the stashed file to a permanent location
+                       $status = $upload->performUpload(
+                               $this->getOption( 'comment' ),
+                               $this->getOption( 'text' ),
+                               $this->getOption( 'watch' ),
+                               $user
+                       );
+                       if ( !$status->isGood() ) {
+                               UploadBase::setSessionStatus(
+                                       $this->getOption( 'filekey' ),
+                                       array( 'result' => 'Failure', 'stage' => 'publish', 'status' => $status )
+                               );
+                               $this->error( $status->getWikiText() . "\n", 1 ); // die
+                       }
+
+                       // Build the image info array while we have the local reference handy
+                       $apiMain = new ApiMain(); // dummy object (XXX)
+                       $imageInfo = $upload->getImageInfo( $apiMain->getResult() );
+
+                       // Cleanup any temporary local file
+                       $upload->cleanupTempFile();
+
+                       // Cache the info so the user doesn't have to wait forever to get the final info
+                       UploadBase::setSessionStatus(
+                               $this->getOption( 'filekey' ),
+                               array(
+                                       'result'    => 'Success',
+                                       'stage'     => 'publish',
+                                       'filename'  => $upload->getLocalFile()->getName(),
+                                       'imageinfo' => $imageInfo,
+                                       'status'    => Status::newGood()
+                               )
+                       );
+               } catch ( MWException $e ) {
+                       UploadBase::setSessionStatus(
+                               $this->getOption( 'filekey' ),
+                               array(
+                                       'result' => 'Failure',
+                                       'stage'  => 'publish',
+                                       'status' => Status::newFatal( 'api-error-publishfailed' )
+                               )
+                       );
+                       throw $e;
+               }
+               session_write_close();
+       }
+}
+
+$maintClass = "PublishStashedFile";
+require_once( RUN_MAINTENANCE_IF_MAIN );
index fdd5f65..4eb30ee 100644 (file)
@@ -78,7 +78,7 @@ abstract class UploadBase {
                                                                self::ILLEGAL_FILENAME => 'illegal-filename',
                                                                self::OVERWRITE_EXISTING_FILE => 'overwrite',
                                                                self::VERIFICATION_ERROR => 'verification-error',
-                                                               self::HOOK_ABORTED =>  'hookaborted',
+                                                               self::HOOK_ABORTED => 'hookaborted',
                                                                self::WINDOWS_NONASCII_FILENAME => 'windows-nonascii-filename',
                                                                self::FILENAME_TOO_LONG => 'filename-toolong',
                );
@@ -209,7 +209,7 @@ abstract class UploadBase {
        /**
         * Initialize from a WebRequest. Override this in a subclass.
         */
-       public abstract function initializeFromRequest( &$request );
+       abstract public function initializeFromRequest( &$request );
 
        /**
         * Fetch the file. Usually a no-op
@@ -235,6 +235,14 @@ abstract class UploadBase {
                return $this->mFileSize;
        }
 
+       /**
+        * Get the base 36 SHA1 of the file
+        * @return string
+        */
+       protected function getTempFileSha1Base36() {
+               return FSFile::getSha1Base36FromPath( $this->mTempPath );
+       }
+
        /**
         * @param $srcPath String: the source path
         * @return string the real path if it was a virtual URL
@@ -401,7 +409,7 @@ abstract class UploadBase {
                $this->mFileProps = FSFile::getPropsFromPath( $this->mTempPath, $this->mFinalExtension );
 
                # check mime type, if desired
-               $mime = $this->mFileProps[ 'file-mime' ];
+               $mime = $this->mFileProps['file-mime'];
                $status = $this->verifyMimeType( $mime );
                if ( $status !== true ) {
                        wfProfileOut( __METHOD__ );
@@ -546,7 +554,9 @@ abstract class UploadBase {
        }
 
        /**
-        * Check for non fatal problems with the file
+        * Check for non fatal problems with the file.
+        *
+        * This should not assume that mTempPath is set.
         *
         * @return Array of warnings
         */
@@ -581,7 +591,7 @@ abstract class UploadBase {
 
                global $wgUploadSizeWarning;
                if ( $wgUploadSizeWarning && ( $this->mFileSize > $wgUploadSizeWarning ) ) {
-                       $warnings['large-file'] = $wgUploadSizeWarning;
+                       $warnings['large-file'] = array( $wgUploadSizeWarning, $this->mFileSize );
                }
 
                if ( $this->mFileSize == 0 ) {
@@ -594,7 +604,7 @@ abstract class UploadBase {
                }
 
                // Check dupes against existing files
-               $hash = FSFile::getSha1Base36FromPath( $this->mTempPath );
+               $hash = $this->getTempFileSha1Base36();
                $dupes = RepoGroup::singleton()->findBySha1( $hash );
                $title = $this->getTitle();
                // Remove all matches against self
@@ -758,7 +768,7 @@ abstract class UploadBase {
                }
 
                if( strlen( $partname ) < 1 ) {
-                       $this->mTitleError =  self::MIN_LENGTH_PARTNAME;
+                       $this->mTitleError = self::MIN_LENGTH_PARTNAME;
                        return $this->mTitle = null;
                }
 
@@ -930,7 +940,7 @@ abstract class UploadBase {
                # ugly hack: for text files, always look at the entire file.
                # For binary field, just check the first K.
 
-               if( strpos( $mime,'text/' ) === 0 ) {
+               if( strpos( $mime, 'text/' ) === 0 ) {
                        $chunk = file_get_contents( $file );
                } else {
                        $fp = fopen( $file, 'rb' );
@@ -1080,7 +1090,7 @@ abstract class UploadBase {
 
                foreach( $attribs as $attrib => $value ) {
                        $stripped = $this->stripXmlNamespace( $attrib );
-                       $value = strtolower($value);
+                       $value = strtolower( $value );
 
                        if( substr( $stripped, 0, 2 ) == 'on' ) {
                                wfDebug( __METHOD__ . ": Found event-handler attribute '$attrib'='$value' in uploaded file.\n" );
@@ -1133,8 +1143,8 @@ abstract class UploadBase {
                        # use CSS styles to bring in remote code
                        # catch url("http:..., url('http:..., url(http:..., but not url("#..., url('#..., url(#....
                        if( $stripped == 'style' && preg_match_all( '!((?:font|clip-path|fill|filter|marker|marker-end|marker-mid|marker-start|mask|stroke)\s*:\s*url\s*\(\s*["\']?\s*[^#]+.*?\))!sim', $value, $matches ) ) {
-                               foreach ($matches[1] as $match) {
-                                       if (!preg_match( '!(?:font|clip-path|fill|filter|marker|marker-end|marker-mid|marker-start|mask|stroke)\s*:\s*url\s*\(\s*(#|\'#|"#)!sim', $match ) ) {
+                               foreach ( $matches[1] as $match ) {
+                                       if ( !preg_match( '!(?:font|clip-path|fill|filter|marker|marker-end|marker-mid|marker-start|mask|stroke)\s*:\s*url\s*\(\s*(#|\'#|"#)!sim', $match ) ) {
                                                wfDebug( __METHOD__ . ": Found svg setting a style with remote url '$attrib'='$value' in uploaded file.\n" );
                                                return true;
                                        }
@@ -1224,27 +1234,22 @@ abstract class UploadBase {
                        }
                }
 
+               /* NB: AV_NO_VIRUS is 0 but AV_SCAN_FAILED is false,
+                * so we need the strict equalities === and thus can't use a switch here
+                */
                if ( $mappedCode === AV_SCAN_FAILED ) {
                        # scan failed (code was mapped to false by $exitCodeMap)
                        wfDebug( __METHOD__ . ": failed to scan $file (code $exitCode).\n" );
 
-                       if ( $wgAntivirusRequired ) {
-                               wfProfileOut( __METHOD__ );
-                               return wfMessage( 'virus-scanfailed', array( $exitCode ) )->text();
-                       } else {
-                               wfProfileOut( __METHOD__ );
-                               return null;
-                       }
+                       $output = $wgAntivirusRequired ? wfMessage( 'virus-scanfailed', array( $exitCode ) )->text() : null;
                } elseif ( $mappedCode === AV_SCAN_ABORTED ) {
                        # scan failed because filetype is unknown (probably imune)
                        wfDebug( __METHOD__ . ": unsupported file type $file (code $exitCode).\n" );
-                       wfProfileOut( __METHOD__ );
-                       return null;
+                       $output = null;
                } elseif ( $mappedCode === AV_NO_VIRUS ) {
                        # no virus found
                        wfDebug( __METHOD__ . ": file passed virus scan.\n" );
-                       wfProfileOut( __METHOD__ );
-                       return false;
+                       $output = false;
                } else {
                        $output = trim( $output );
 
@@ -1260,9 +1265,10 @@ abstract class UploadBase {
                        }
 
                        wfDebug( __METHOD__ . ": FOUND VIRUS! scanner feedback: $output \n" );
-                       wfProfileOut( __METHOD__ );
-                       return $output;
                }
+
+               wfProfileOut( __METHOD__ );
+               return $output;
        }
 
        /**
@@ -1373,7 +1379,7 @@ abstract class UploadBase {
 
                if ( self::isThumbName( $file->getName() ) ) {
                        # Check for filenames like 50px- or 180px-, these are mostly thumbnails
-                       $nt_thb = Title::newFromText( substr( $partname , strpos( $partname , '-' ) +1 ) . '.' . $extension, NS_FILE );
+                       $nt_thb = Title::newFromText( substr( $partname, strpos( $partname, '-' ) + 1 ) . '.' . $extension, NS_FILE );
                        $file_thb = wfLocalFile( $nt_thb );
                        if( $file_thb->exists() ) {
                                return array(
@@ -1414,10 +1420,10 @@ abstract class UploadBase {
                $n = strrpos( $filename, '.' );
                $partname = $n ? substr( $filename, 0, $n ) : $filename;
                return (
-                                       substr( $partname , 3, 3 ) == 'px-' ||
-                                       substr( $partname , 2, 3 ) == 'px-'
+                                       substr( $partname, 3, 3 ) == 'px-' ||
+                                       substr( $partname, 2, 3 ) == 'px-'
                                ) &&
-                               preg_match( "/[0-9]{2}/" , substr( $partname , 0, 2 ) );
+                               preg_match( "/[0-9]{2}/", substr( $partname, 0, 2 ) );
        }
 
        /**
index 2b0128b..3d8737d 100644 (file)
@@ -112,7 +112,7 @@ class UploadFromChunks extends UploadFromFile {
                // Concatenate all the chunks to mVirtualTempPath
                $fileList = Array();
                // The first chunk is stored at the mVirtualTempPath path so we start on "chunk 1"
-               for( $i = 0; $i <= $this->getChunkIndex(); $i++ ){
+               for( $i = 0; $i <= $this->getChunkIndex(); $i++ ) {
                        $fileList[] = $this->getVirtualChunkLocation( $i );
                }
 
@@ -127,7 +127,7 @@ class UploadFromChunks extends UploadFromFile {
                $tStart = microtime( true );
                $status = $this->repo->concatenate( $fileList, $tmpPath, FileRepo::DELETE_SOURCE );
                $tAmount = microtime( true ) - $tStart;
-               if( !$status->isOk() ){
+               if( !$status->isOk() ) {
                        return $status;
                }
                wfDebugLog( 'fileconcatenate', "Combined $i chunks in $tAmount seconds.\n" );
@@ -161,7 +161,7 @@ class UploadFromChunks extends UploadFromFile {
         * @param $index
         * @return string
         */
-       function getVirtualChunkLocation( $index ){
+       function getVirtualChunkLocation( $index ) {
                return $this->repo->getVirtualUrl( 'temp' ) .
                                '/' .
                                $this->repo->getHashPath(
@@ -190,7 +190,7 @@ class UploadFromChunks extends UploadFromFile {
                                // Update local chunk index for the current chunk
                                $this->mChunkIndex++;
                                $status = $this->outputChunk( $chunkPath );
-                               if( $status->isGood() ){
+                               if( $status->isGood() ) {
                                        // Update local offset:
                                        $this->mOffset = $preAppendOffset + $chunkSize;
                                        // Update chunk table status db
@@ -206,7 +206,7 @@ class UploadFromChunks extends UploadFromFile {
        /**
         * Update the chunk db table with the current status:
         */
-       private function updateChunkStatus(){
+       private function updateChunkStatus() {
                wfDebug( __METHOD__ . " update chunk status for {$this->mFileKey} offset:" .
                                        $this->getOffset() . ' inx:' . $this->getChunkIndex() . "\n" );
 
@@ -230,7 +230,7 @@ class UploadFromChunks extends UploadFromFile {
        /**
         * Get the chunk db state and populate update relevant local values
         */
-       private function getChunkStatus(){
+       private function getChunkStatus() {
                // get Master db to avoid race conditions.
                // Otherwise, if chunk upload time < replag there will be spurious errors
                $dbw = $this->repo->getMasterDb();
@@ -256,8 +256,8 @@ class UploadFromChunks extends UploadFromFile {
         * Get the current Chunk index
         * @return Integer index of the current chunk
         */
-       private function getChunkIndex(){
-               if( $this->mChunkIndex !== null ){
+       private function getChunkIndex() {
+               if( $this->mChunkIndex !== null ) {
                        return $this->mChunkIndex;
                }
                return 0;
@@ -267,8 +267,8 @@ class UploadFromChunks extends UploadFromFile {
         * Gets the current offset in fromt the stashedupload table
         * @return Integer current byte offset of the chunk file set
         */
-       private function getOffset(){
-               if ( $this->mOffset !== null ){
+       private function getOffset() {
+               if ( $this->mOffset !== null ) {
                        return $this->mOffset;
                }
                return 0;
@@ -281,7 +281,7 @@ class UploadFromChunks extends UploadFromFile {
         * @throws UploadChunkFileException
         * @return FileRepoStatus
         */
-       private function outputChunk( $chunkPath ){
+       private function outputChunk( $chunkPath ) {
                // Key is fileKey + chunk index
                $fileKey = $this->getChunkFileKey();
 
@@ -306,8 +306,8 @@ class UploadFromChunks extends UploadFromFile {
                return $storeStatus;
        }
 
-       private function getChunkFileKey( $index = null ){
-               if( $index === null ){
+       private function getChunkFileKey( $index = null ) {
+               if( $index === null ) {
                        $index = $this->getChunkIndex();
                }
                return $this->mFileKey . '.' . $index ;
index c857f25..71ee96b 100644 (file)
@@ -89,7 +89,7 @@ class UploadFromStash extends UploadBase {
         * @param $key string
         * @param $name string
         */
-       public function initialize( $key, $name = 'upload_file' ) {
+       public function initialize( $key, $name = 'upload_file', $initTempFile = true ) {
                /**
                 * Confirming a temporarily stashed upload.
                 * We don't want path names to be forged, so we keep
@@ -98,7 +98,7 @@ class UploadFromStash extends UploadBase {
                 */
                $metadata = $this->stash->getMetadata( $key );
                $this->initializePathInfo( $name,
-                       $this->getRealPath( $metadata['us_path'] ),
+                       $initTempFile ? $this->getRealPath( $metadata['us_path'] ) : false,
                        $metadata['us_size'],
                        false
                );
@@ -129,6 +129,14 @@ class UploadFromStash extends UploadBase {
                return $this->mSourceType;
        }
 
+       /**
+        * Get the base 36 SHA1 of the file
+        * @return string
+        */
+       protected function getTempFileSha1Base36() {
+               return $this->mFileProps['sha1'];
+       }
+
        /**
         * File has been previously verified so no need to do so again.
         *
index d91649c..65626cf 100644 (file)
@@ -206,8 +206,8 @@ class UploadStash {
                //
                // some things that when combined will make a suitably unique key.
                // see: http://www.jwz.org/doc/mid.html
-               list ($usec, $sec) = explode( ' ', microtime() );
-               $usec = substr($usec, 2);
+               list( $usec, $sec ) = explode( ' ', microtime() );
+               $usec = substr( $usec, 2 );
                $key = wfBaseConvert( $sec . $usec, 10, 36 ) . '.' .
                        wfBaseConvert( mt_rand(), 10, 36 ) . '.'.
                        $this->userId . '.' .
diff --git a/includes/zhtable/.gitignore b/includes/zhtable/.gitignore
deleted file mode 100644 (file)
index c4cf2eb..0000000
+++ /dev/null
@@ -1,3 +0,0 @@
-*.zip
-*.tar.gz
-*.tgz
diff --git a/includes/zhtable/Makefile b/includes/zhtable/Makefile
deleted file mode 100644 (file)
index 5dd88d3..0000000
+++ /dev/null
@@ -1,336 +0,0 @@
-#
-# Creating the file ZhConversion.php used for Simplified/Traditional
-# Chinese conversion. It gets the basic conversion table from the Unihan 
-# database, and construct the phrase tables using phrase libraries in
-# the SCIM packages and the libtabe package. There are also special
-# tables used to for adjustment. 
-#
-
-GREP = LANG=zh_CN.UTF8 grep
-SED = LANG=zh_CN.UTF8 sed
-DIFF = LANG=zh_CN.UTF8 diff
-CC ?= gcc
-
-SF_MIRROR = easynews
-SCIM_TABLES_VER = 0.5.9
-SCIM_PINYIN_VER = 0.5.91
-LIBTABE_VER = 0.2.3
-
-# Installation directory
-INSTDIR = /usr/local/share/zhdaemons/
-
-all: ZhConversion.php tradphrases.notsure simpphrases.notsure wordlist toHans.dict toHant.dict toCN.dict toTW.dict toHK.dict toSG.dict
-
-# Download Unihan database and Traditional Chinese / Simplified Chinese phrases files
-Unihan.zip:
-       wget -nc http://www.unicode.org/Public/UNIDATA/Unihan.zip
-
-scim-tables-$(SCIM_TABLES_VER).tar.gz:
-       wget -nc http://$(SF_MIRROR).dl.sourceforge.net/sourceforge/scim/scim-tables-$(SCIM_TABLES_VER).tar.gz
-
-scim-pinyin-$(SCIM_PINYIN_VER).tar.gz:
-       wget -nc http://$(SF_MIRROR).dl.sourceforge.net/sourceforge/scim/scim-pinyin-$(SCIM_PINYIN_VER).tar.gz
-
-libtabe-$(LIBTABE_VER).tgz:
-       wget -nc http://$(SF_MIRROR).dl.sourceforge.net/sourceforge/libtabe/libtabe-$(LIBTABE_VER).tgz
-
-# Extract the file from a comressed files
-Unihan.txt: Unihan.zip
-       unzip -oq Unihan.zip
-
-EZ.txt.in: scim-tables-$(SCIM_TABLES_VER).tar.gz
-       tar -xzf scim-tables-$(SCIM_TABLES_VER).tar.gz -O scim-tables-$(SCIM_TABLES_VER)/tables/zh/EZ-Big.txt.in > EZ.txt.in
-
-Wubi.txt.in: scim-tables-$(SCIM_TABLES_VER).tar.gz
-       tar -xzf scim-tables-$(SCIM_TABLES_VER).tar.gz -O scim-tables-$(SCIM_TABLES_VER)/tables/zh/Wubi.txt.in > Wubi.txt.in
-
-Ziranma.txt.in: scim-tables-$(SCIM_TABLES_VER).tar.gz
-       tar -xzf scim-tables-$(SCIM_TABLES_VER).tar.gz -O scim-tables-$(SCIM_TABLES_VER)/tables/zh/Ziranma.txt.in > Ziranma.txt.in
-
-
-phrase_lib.txt: scim-pinyin-$(SCIM_PINYIN_VER).tar.gz
-       tar -xzf scim-pinyin-$(SCIM_PINYIN_VER).tar.gz -O scim-pinyin-$(SCIM_PINYIN_VER)/data/phrase_lib.txt > phrase_lib.txt
-
-tsi.src: libtabe-$(LIBTABE_VER).tgz    
-       tar -xzf libtabe-$(LIBTABE_VER).tgz -O libtabe/tsi-src/tsi.src > tsi.src
-
-# Make a word list
-wordlist: phrase_lib.txt EZ.txt.in tsi.src
-       iconv -c -f big5 -t utf8 tsi.src | $(SED) 's/# //g' | $(SED) 's/[ ][0-9].*//' > wordlist
-       $(SED) 's/\(.*\)\t[0-9][0-9]*.*/\1/' phrase_lib.txt | $(SED) '1,5d' >> wordlist
-       $(SED) '1,/BEGIN_TABLE/d' EZ.txt.in | colrm 1 8 | $(SED) 's/\t.*//' | $(GREP) "^...*" >> wordlist
-       sort wordlist | uniq | $(SED) 's/ //g' > t
-       mv t wordlist
-
-printutf8: printutf8.c
-       $(CC) -o printutf8 printutf8.c
-
-unihan.t2s.t: Unihan.txt printutf8
-       $(GREP) kSimplifiedVariant Unihan.txt | $(SED)  '/#/d' | $(SED)  's/kSimplifiedVariant//' | ./printutf8 > unihan.t2s.t
-
-trad2simp.t: trad2simp.manual unihan.t2s.t
-       cp unihan.t2s.t tmp1
-       for I in `colrm 11 < trad2simp.manual` ; do $(SED) "/^$$I/d" tmp1 > tmp2; mv tmp2 tmp1; done
-       cat trad2simp.manual tmp1 > trad2simp.t
-
-unihan.s2t.t: Unihan.txt printutf8
-       $(GREP) kTraditionalVariant Unihan.txt | $(SED)  '/#/d' | $(SED)  's/kTraditionalVariant//' | ./printutf8 > unihan.s2t.t
-
-simp2trad.t: unihan.s2t.t simp2trad.manual
-       cp unihan.s2t.t tmp1
-       for I in `colrm 11 < simp2trad.manual` ; do $(SED) "/^$$I/d" tmp1 > tmp2; mv tmp2 tmp1; done
-       cat simp2trad.manual tmp1 > simp2trad.t
-
-t2s_1tomany.t: trad2simp.t
-       $(GREP) -s ".\{19,\}" trad2simp.t | $(SED)  's/U+...../"/' | $(SED)  's/|U+...../"=>"/' | $(SED)  's/|U+.....//g' | $(SED)  's/|/",/' > t2s_1tomany.t
-
-t2s_1to1.t: trad2simp.t s2t_1tomany.t
-       $(SED)  "/.*|.*|.*|.*/d" trad2simp.t | $(SED)  's/U+[0-9a-z][0-9a-z]*/"/' | $(SED)  's/|U+[0-9a-z][0-9a-z]*/"=>"/' | $(SED)  's/|/",/' > t2s_1to1.t
-       $(GREP)  '"."=>"..",' s2t_1tomany.t | $(SED) 's/\("."\)=>".\(.\)",/"\2"=>\1,/' >> t2s_1to1.t
-       $(GREP)  '"."=>"...",' s2t_1tomany.t | $(SED) 's/\("."\)=>".\(.\).",/"\2"=>\1,/' >> t2s_1to1.t
-       $(GREP)  '"."=>"...",' s2t_1tomany.t | $(SED) 's/\("."\)=>"..\(.\)",/"\2"=>\1,/' >> t2s_1to1.t
-       $(GREP)  '"."=>"....",' s2t_1tomany.t | $(SED) 's/\("."\)=>".\(.\)..",/"\2"=>\1,/' >> t2s_1to1.t
-       $(GREP)  '"."=>"....",' s2t_1tomany.t | $(SED) 's/\("."\)=>"..\(.\).",/"\2"=>\1,/' >> t2s_1to1.t
-       $(GREP)  '"."=>"....",' s2t_1tomany.t | $(SED) 's/\("."\)=>"...\(.\)",/"\2"=>\1,/' >> t2s_1to1.t
-       sort t2s_1to1.t | uniq > t
-       mv t t2s_1to1.t
-
-
-s2t_1tomany.t: simp2trad.t
-       $(GREP) -s ".\{19,\}" simp2trad.t | $(SED)  's/U+...../"/' | $(SED)  's/|U+...../"=>"/' | $(SED)  's/|U+.....//g' | $(SED)  's/|/",/' > s2t_1tomany.t
-
-s2t_1to1.t: simp2trad.t t2s_1tomany.t
-       $(SED)  "/.*|.*|.*|.*/d" simp2trad.t | $(SED)  's/U+[0-9a-z][0-9a-z]*/"/' | $(SED)  's/|U+[0-9a-z][0-9a-z]*/"=>"/' | $(SED)  's/|/",/' > s2t_1to1.t
-       $(GREP)  '"."=>"..",' t2s_1tomany.t | $(SED) 's/\("."\)=>".\(.\)",/"\2"=>\1,/' >> s2t_1to1.t
-       $(GREP)  '"."=>"...",' t2s_1tomany.t | $(SED) 's/\("."\)=>".\(.\).",/"\2"=>\1,/' >> s2t_1to1.t
-       $(GREP)  '"."=>"...",' t2s_1tomany.t | $(SED) 's/\("."\)=>"..\(.\)",/"\2"=>\1,/' >> s2t_1to1.t
-       $(GREP)  '"."=>"....",' t2s_1tomany.t | $(SED) 's/\("."\)=>".\(.\)..",/"\2"=>\1,/' >> s2t_1to1.t
-       $(GREP)  '"."=>"....",' t2s_1tomany.t | $(SED) 's/\("."\)=>"..\(.\).",/"\2"=>\1,/' >> s2t_1to1.t
-       $(GREP)  '"."=>"....",' t2s_1tomany.t | $(SED) 's/\("."\)=>"...\(.\)",/"\2"=>\1,/' >> s2t_1to1.t
-       sort s2t_1to1.t | uniq > t
-       mv t s2t_1to1.t
-
-tphrase.t: EZ.txt.in tsi.src
-       colrm 1 8 < EZ.txt.in | $(SED) 's/\t//g' | $(GREP) "^.\{2,4\}[0-9]" | $(SED) 's/[0-9]//g' > t
-       iconv -c -f big5 -t utf8 tsi.src | $(SED) 's/ [0-9].*//g' | $(SED) 's/[# ]//g'| $(GREP) "^.\{2,4\}"  >> t
-       sort t | uniq > tphrase.t
-
-alltradphrases.t: tphrase.t s2t_1tomany.t tradphrases_exclude.manual
-       for i in `cat s2t_1tomany.t | $(SED) 's/.*=>".//' | $(SED) 's/"//g' |$(SED) 's/,/\n/' | $(SED) 's/\(.\)/\1\n/g' |sort | uniq`; do $(GREP) -s $$i tphrase.t ; done  > alltradphrases.t || true
-       cat alltradphrases.t | $(GREP) -vf tradphrases_exclude.manual > alltradphrases.tt ; mv alltradphrases.tt alltradphrases.t
-
-
-tradphrases_2.t: alltradphrases.t
-       cat alltradphrases.t | $(GREP)  "^..$$" | sort | uniq > tradphrases_2.t
-
-tradphrases_3.t: alltradphrases.t
-       cat alltradphrases.t | $(GREP)  "^...$$" | sort | uniq > tradphrases_3.t
-       for i in `cat tradphrases_2.t`; do $(GREP) $$i tradphrases_3.t ; done | sort | uniq > t3 || true
-       $(DIFF) t3 tradphrases_3.t | $(GREP) ">" | $(SED) 's/> //' > t
-       mv t tradphrases_3.t
-
-
-tradphrases_4.t: alltradphrases.t
-       cat alltradphrases.t | $(GREP)  "^....$$" | sort | uniq > tradphrases_4.t
-       for i in `cat tradphrases_2.t`; do $(GREP) $$i tradphrases_4.t ; done | sort | uniq > t3 || true
-       $(DIFF) t3 tradphrases_4.t | $(GREP) ">" | $(SED) 's/> //' > t
-       mv t tradphrases_4.t
-       for i in `cat tradphrases_3.t`; do $(GREP) $$i tradphrases_4.t ; done | sort | uniq > t3 || true
-       $(DIFF) t3 tradphrases_4.t | $(GREP) ">" | $(SED) 's/> //' > t
-       mv t tradphrases_4.t
-
-tradphrases.t: tradphrases.manual tradphrases_2.t tradphrases_3.t tradphrases_4.t t2s_1tomany.t
-       cat tradphrases.manual tradphrases_2.t tradphrases_3.t tradphrases_4.t |sort | uniq > tradphrases.t
-       for i in `$(SED) 's/"\(.\).*/\1/' t2s_1tomany.t ` ; do $(GREP) $$i tradphrases.t ; done | $(DIFF) tradphrases.t - | $(GREP) '<' | $(SED) 's/< //' > t
-       for i in `$(SED) 's/"\(..\)..*/\1/' t2s_1tomany.t ` ; do $(GREP) $$i tradphrases.t ; done | $(DIFF) tradphrases.t - | $(GREP) '<' | $(SED) 's/< //' >> t
-       mv t tradphrases.t
-       cat tradphrases.t | sort | uniq > t
-       mv t tradphrases.t
-
-tradphrases.notsure: tradphrases_2.t tradphrases_3.t tradphrases_4.t t2s_1tomany.t
-       cat tradphrases_2.t tradphrases_3.t tradphrases_4.t |sort | uniq > t
-       for i in `$(SED) 's/"\(.\).*/\1/' t2s_1tomany.t ` ; do $(GREP) $$i t; done | $(DIFF) t - | $(GREP) '>' | $(SED) 's/> //' > tradphrases.notsure
-
-
-ph.t: phrase_lib.txt
-       $(SED) 's/[\t0-9a-zA-Z]//g' phrase_lib.txt | $(GREP) "^.\{2,4\}$$" > ph.t
-
-Wubi.t: Wubi.txt.in
-       $(SED) '1,/BEGIN_TABLE/d' Wubi.txt.in | colrm 1 8 | $(SED) 's/\t.*//' | $(GREP) "^...*" > Wubi.t
-
-Ziranma.t: Ziranma.txt.in
-       $(SED) '1,/BEGIN_TABLE/d' Ziranma.txt.in | colrm 1 8 | $(SED) 's/\t.*//' | $(GREP) "^...*" > Ziranma.t
-
-
-allsimpphrases.t: t2s_1tomany.t ph.t Wubi.t Ziranma.t simpphrases_exclude.manual
-       rm -f allsimpphrases.t
-       for i in `cat t2s_1tomany.t | $(SED) 's/.*=>".//' | $(SED) 's/"//g' | $(SED) 's/,/\n/' | $(SED) 's/\(.\)/\1\n/g' | sort | uniq `; do $(GREP) $$i Wubi.t >> allsimpphrases.t; done
-       for i in `cat t2s_1tomany.t | $(SED) 's/.*=>".//' | $(SED) 's/"//g' | $(SED) 's/,/\n/' | $(SED) 's/\(.\)/\1\n/g' | sort | uniq `; do $(GREP) $$i Ziranma.t >> allsimpphrases.t; done
-       for i in `cat t2s_1tomany.t | $(SED) 's/.*=>".//' | $(SED) 's/"//g' | $(SED) 's/,/\n/' | $(SED) 's/\(.\)/\1\n/g' | sort | uniq `; do $(GREP) $$i ph.t >> allsimpphrases.t; done
-       cat allsimpphrases.t | $(GREP) -vf simpphrases_exclude.manual > allsimpphrases.tt ; mv allsimpphrases.tt allsimpphrases.t
-
-simpphrases_2.t: allsimpphrases.t
-       cat allsimpphrases.t | $(GREP) "^..$$" | sort | uniq > simpphrases_2.t
-
-simpphrases_3.t: allsimpphrases.t
-       cat allsimpphrases.t | $(GREP) "^...$$" | sort | uniq > simpphrases_3.t
-       for i in `cat simpphrases_2.t`; do $(GREP) $$i simpphrases_3.t ; done | sort | uniq > t3 || true
-       $(DIFF) t3 simpphrases_3.t | $(GREP) ">" | $(SED) 's/> //' > t
-       mv t simpphrases_3.t
-
-simpphrases_4.t: allsimpphrases.t
-       cat allsimpphrases.t | $(GREP) "^....$$" | sort | uniq > simpphrases_4.t
-       rm -f t
-       for i in `cat simpphrases_2.t`; do $(GREP) $$i simpphrases_4.t >> t; done || true
-       sort t | uniq > t3
-       $(DIFF) t3 simpphrases_4.t | $(GREP) ">" | $(SED) 's/> //' > t
-       mv t simpphrases_4.t
-       for i in `cat simpphrases_3.t`; do $(GREP) $$i simpphrases_4.t; done | sort | uniq > t3 || true
-       $(DIFF) t3 simpphrases_4.t | $(GREP) ">" | $(SED) 's/> //' > t
-       mv t simpphrases_4.t
-
-simpphrases.t: simpphrases.manual simpphrases_2.t simpphrases_3.t simpphrases_4.t t2s_1tomany.t
-       cat simpphrases.manual simpphrases_2.t simpphrases_3.t simpphrases_4.t > simpphrases.t
-       for i in `$(SED) 's/"\(.\).*/\1/' t2s_1tomany.t ` ; do $(GREP) $$i simpphrases.t ; done | $(DIFF) simpphrases.t - | $(GREP) '<' | $(SED) 's/< //' > t
-       for i in `$(SED) 's/"\(..\)..*/\1/' t2s_1tomany.t ` ; do $(GREP) $$i simpphrases.t ; done | $(DIFF) simpphrases.t - | $(GREP) '<' | $(SED) 's/< //' >> t
-       mv t simpphrases.t
-       cat simpphrases.t | sort | uniq > t
-       mv t simpphrases.t
-
-simpphrases.notsure: simpphrases_2.t simpphrases_3.t simpphrases_4.t t2s_1tomany.t
-       cat simpphrases_2.t simpphrases_3.t simpphrases_4.t > t
-       for i in `$(SED) 's/"\(.\).*/\1/' t2s_1tomany.t ` ; do $(GREP) $$i t ; done | $(DIFF) t - | $(GREP) '>' | $(SED) 's/> //' > simpphrases.notsure
-
-trad2simp1to1.t: t2s_1tomany.t t2s_1to1.t trad2simp_noconvert.manual
-       $(SED)  's/\(.......\).*/\1",/' t2s_1tomany.t > tt
-       colrm 1 7 < trad2simp.manual | colrm 3 > trad2simpcharsrc.t
-       colrm 1 17 < trad2simp.manual | colrm 3 > trad2simpchardest.t
-       cat trad2simpcharsrc.t | $(GREP) -f trad2simpchardest.t > trad2simprepeatedchar.t
-       cat tt | $(GREP) -vf trad2simprepeatedchar.t > trad2simp1to1.t
-       cat t2s_1to1.t >> trad2simp1to1.t
-       cat trad2simp1to1.t | $(GREP) -vf trad2simp_noconvert.manual > tt
-       mv tt trad2simp1to1.t
-
-simp2trad1to1.t: s2t_1tomany.t s2t_1to1.t simp2trad.manual simp2trad_noconvert.manual
-       $(SED)  's/\(.......\).*/\1",/' s2t_1tomany.t > tt
-       colrm 1 7 < simp2trad.manual | colrm 3 > simp2tradcharsrc.t
-       colrm 1 17 < simp2trad.manual | colrm 3 > simp2tradchardest.t
-       cat simp2tradcharsrc.t | $(GREP) -f simp2tradchardest.t > simp2tradrepeatedchar.t
-       cat tt | $(GREP) -vf simp2tradrepeatedchar.t > simp2trad1to1.t
-       cat s2t_1to1.t >> simp2trad1to1.t
-       cat simp2trad1to1.t | $(GREP) -vf simp2trad_noconvert.manual > tt
-       mv tt simp2trad1to1.t
-
-trad2simp.php: trad2simp1to1.t tradphrases.t trad2simp_supp_unset.manual trad2simp_supp_set.manual
-       printf '<?php\n$$trad2simp=array(' > trad2simp.php
-       cat trad2simp1to1.t >> trad2simp.php
-       $(SED) 's/\(.*\)\t\(.*\)/"\1" => "\2",/' trad2simp_supp_set.manual >> trad2simp.php
-       printf ');\n$$str=\n"' >> trad2simp.php
-       cat tradphrases.t >> trad2simp.php
-       printf '";\n$$t=strtr($$str, $$trad2simp);\necho $$t;\n?>' >> trad2simp.php
-       cat trad2simp1to1.t | $(GREP) -vf trad2simp_supp_unset.manual > tt
-       mv tt trad2simp1to1.t
-
-simp2trad.php: simp2trad1to1.t simpphrases.t simp2trad_supp_set.manual
-       printf '<?php\n$$simp2trad=array(' > simp2trad.php
-       cat simp2trad1to1.t >> simp2trad.php
-       $(SED) 's/\(.*\)\t\(.*\)/"\1" => "\2",/' simp2trad_supp_set.manual >> simp2trad.php
-       printf ');\n$$str=\n"' >> simp2trad.php
-       cat simpphrases.t >> simp2trad.php
-       printf '";\n$$t=strtr($$str, $$simp2trad);\necho $$t;\n?>' >> simp2trad.php
-
-simp2trad.phrases.t: trad2simp.php tradphrases.t simp2trad_supp_set.manual
-       php -f trad2simp.php | $(SED)  's/\(.*\)/"\1" => /' > tmp1
-       cat tradphrases.t | $(SED)  's/\(.*\)/"\1",/' > tmp2
-       paste tmp1 tmp2 > simp2trad.phrases.t
-       colrm 3 < simp2trad_supp_set.manual > simp2trad_supp_noconvert.t
-       cat trad2simp.php | $(GREP) -vf simp2trad_supp_noconvert.t > trad2simp.tt
-       mv trad2simp.tt trad2simp.php
-
-trad2simp.phrases.t: simp2trad.php simpphrases.t trad2simp_supp_set.manual
-       php -f simp2trad.php | $(SED)  's/\(.*\)/"\1" => /' > tmp1
-       cat simpphrases.t | $(SED)  's/\(.*\)/"\1",/' > tmp2
-       paste tmp1 tmp2 > trad2simp.phrases.t
-       colrm 3 < trad2simp_supp_set.manual > trad2simp_supp_noconvert.t
-       cat simp2trad.php | $(GREP) -vf trad2simp_supp_noconvert.t > simp2trad.tt
-       mv simp2trad.tt simp2trad.php
-
-toHans.dict: trad2simp1to1.t trad2simp.phrases.t toSimp.manual
-       cat trad2simp1to1.t | $(SED) 's/[, \t]//g' | $(SED) 's/=>/\t/' > toHans.dict
-       cat trad2simp.phrases.t | $(SED) 's/[, \t]//g' | $(SED) 's/=>/\t/' >> toHans.dict
-       cat toSimp.manual | $(SED) 's/ //g' | $(SED) 's/\(^.*\)\t\(.*\)/"\1"\t"\2"/' >> toHans.dict
-
-toHant.dict: simp2trad1to1.t simp2trad.phrases.t toTrad.manual
-       cat simp2trad1to1.t | $(SED) 's/[, \t]//g' | $(SED) 's/=>/\t/' > toHant.dict
-       cat simp2trad.phrases.t | $(SED) 's/[, \t]//g' | $(SED) 's/=>/\t/' >> toHant.dict
-       cat toTrad.manual | $(SED) 's/ //g' | $(SED) 's/\(^.*\)\t\(.*\)/"\1"\t"\2"/' >> toHant.dict
-
-toTW.dict: toTW.manual
-       cat toTW.manual | $(SED) 's/ //g' | $(SED) 's/\(^.*\)\t\(.*\)/"\1"\t"\2"/' > toTW.dict
-
-toHK.dict: toHK.manual
-       cat toHK.manual | $(SED) 's/ //g' | $(SED) 's/\(^.*\)\t\(.*\)/"\1"\t"\2"/' > toHK.dict
-
-toCN.dict: toCN.manual
-       cat toCN.manual | $(SED) 's/ //g' | $(SED) 's/\(^.*\)\t\(.*\)/"\1"\t"\2"/' > toCN.dict
-
-toSG.dict: toSG.manual
-       cat toSG.manual | $(SED) 's/ //g' | $(SED) 's/\(^.*\)\t\(.*\)/"\1"\t"\2"/' > toSG.dict
-
-ZhConversion.php: simp2trad1to1.t simp2trad.phrases.t trad2simp1to1.t trad2simp.phrases.t toSimp.manual toTrad.manual toCN.manual toHK.manual toSG.manual toTW.manual
-       printf '<?php\n/**\n * Simplified / Traditional Chinese conversion tables\n' > ZhConversion.php
-       printf ' *\n * Automatically generated using code and data in includes/zhtable/\n' >> ZhConversion.php
-       printf ' * Do not modify directly!\n */\n\n' >> ZhConversion.php
-       printf '$$zh2Hant = array(\n' >> ZhConversion.php
-       cat simp2trad1to1.t >> ZhConversion.php
-       echo >> ZhConversion.php
-       cat simp2trad.phrases.t >> ZhConversion.php
-       $(SED) 's/\(.*\)\t\(.*\)/"\1" => "\2",/' toTrad.manual >> ZhConversion.php
-       echo ');' >> ZhConversion.php
-       echo >> ZhConversion.php
-       printf '$$zh2Hans = array(\n' >> ZhConversion.php
-       cat trad2simp1to1.t >> ZhConversion.php
-       echo >> ZhConversion.php
-       cat trad2simp.phrases.t >> ZhConversion.php
-       $(SED) 's/\(.*\)\t\(.*\)/"\1" => "\2",/' toSimp.manual >> ZhConversion.php
-       echo ');' >> ZhConversion.php
-       echo >> ZhConversion.php
-       printf '$$zh2TW = array(\n' >> ZhConversion.php
-       $(SED) 's/\(.*\)\t\(.*\)/"\1" => "\2",/' toTW.manual >> ZhConversion.php
-       echo ');' >> ZhConversion.php
-       echo >> ZhConversion.php
-       printf '$$zh2HK = array(\n' >> ZhConversion.php
-       $(SED) 's/\(.*\)\t\(.*\)/"\1" => "\2",/' toHK.manual >> ZhConversion.php
-       echo ');' >> ZhConversion.php
-       echo >> ZhConversion.php
-       printf '$$zh2CN = array(\n' >> ZhConversion.php
-       $(SED) 's/\(.*\)\t\(.*\)/"\1" => "\2",/' toCN.manual >> ZhConversion.php
-       echo ');' >> ZhConversion.php
-       echo >> ZhConversion.php
-       printf '$$zh2SG = array(\n' >> ZhConversion.php
-       $(SED) 's/\(.*\)\t\(.*\)/"\1" => "\2",/' toSG.manual >> ZhConversion.php
-       echo >> ZhConversion.php
-       printf ');' >> ZhConversion.php
-
-clean: cleantmp cleandl
-
-cleantmp:
-       # Stuff unpacked from the files fetched by wget
-       rm -f \
-               Unihan.txt \
-               EZ.txt.in \
-               Wubi.txt.in \
-               Ziranma.txt.in \
-               phrase_lib.txt \
-               tsi.src
-       # Temporary files and other trash
-       rm -f ZhConversion.php tmp1 tmp2 tmp3 t3 *.t trad2simp.php simp2trad.php *.dict printutf8 *~ \
-               simpphrases.notsure tradphrases.notsure wordlist
-
-cleandl:
-       rm -f \
-               Unihan.zip \
-               scim-tables-$(SCIM_TABLES_VER).tar.gz \
-               scim-pinyin-$(SCIM_PINYIN_VER).tar.gz \
-               libtabe-$(LIBTABE_VER).tgz
-
diff --git a/includes/zhtable/Makefile.py b/includes/zhtable/Makefile.py
deleted file mode 100755 (executable)
index 1342066..0000000
+++ /dev/null
@@ -1,391 +0,0 @@
-#!/usr/bin/env python
-# -*- coding: utf-8 -*-
-# @author Philip
-import tarfile as tf
-import zipfile as zf
-import os, re, shutil, sys, platform
-
-pyversion = platform.python_version()
-islinux = platform.system().lower() == 'linux'
-
-if pyversion[:3] in ['2.6', '2.7']:
-    import urllib as urllib_request
-    import codecs
-    open = codecs.open
-    _unichr = unichr
-    if sys.maxunicode < 0x10000:
-        def unichr(i):
-            if i < 0x10000:
-                return _unichr(i)
-            else:
-                return _unichr( 0xD7C0 + ( i>>10 ) ) + _unichr( 0xDC00 + ( i & 0x3FF ) )
-elif pyversion[:2] == '3.':
-    import urllib.request as urllib_request
-    unichr = chr
-
-def unichr2( *args ):
-    return [unichr( int( i.split('<')[0][2:], 16 ) ) for i in args]
-
-def unichr3( *args ):
-    return [unichr( int( i[2:7], 16 ) ) for i in args if i[2:7]]
-
-# DEFINE
-UNIHAN_VER = '6.2.0'
-SF_MIRROR = 'dfn'
-SCIM_TABLES_VER = '0.5.11'
-SCIM_PINYIN_VER = '0.5.92'
-LIBTABE_VER = '0.2.3'
-# END OF DEFINE
-
-def download( url, dest ):
-    if os.path.isfile( dest ):
-        print( 'File %s is up to date.' % dest )
-        return
-    global islinux
-    if islinux:
-        # we use wget instead urlretrieve under Linux, 
-        # because wget could display details like download progress
-        os.system( 'wget %s -O %s' % ( url, dest ) )
-    else:
-        print( 'Downloading from [%s] ...' % url )
-        urllib_request.urlretrieve( url, dest )
-        print( 'Download complete.\n' )
-    return
-
-def uncompress( fp, member, encoding = 'U8' ):
-    name = member.rsplit( '/', 1 )[-1]
-    print( 'Extracting %s ...' % name )
-    fp.extract( member )
-    shutil.move( member, name )
-    if '/' in member:
-        shutil.rmtree( member.split( '/', 1 )[0] )
-    return open( name, 'rb', encoding, 'ignore' )
-
-unzip = lambda path, member, encoding = 'U8': \
-        uncompress( zf.ZipFile( path ), member, encoding )
-
-untargz = lambda path, member, encoding = 'U8': \
-        uncompress( tf.open( path, 'r:gz' ), member, encoding )
-
-def parserCore( fp, pos, beginmark = None, endmark = None ):
-    if beginmark and endmark:
-        start = False
-    else: start = True
-    mlist = set()
-    for line in fp:
-        if beginmark and line.startswith( beginmark ):
-            start = True
-            continue
-        elif endmark and line.startswith( endmark ):
-            break
-        if start and not line.startswith( '#' ):
-            elems = line.split()
-            if len( elems ) < 2:
-                continue
-            elif len( elems[0] ) > 1 and \
-                len( elems[pos] ) > 1: # words only
-                mlist.add( elems[pos] )
-    return mlist
-
-def tablesParser( path, name ):
-    """ Read file from scim-tables and parse it. """
-    global SCIM_TABLES_VER
-    src = 'scim-tables-%s/tables/zh/%s' % ( SCIM_TABLES_VER, name )
-    fp = untargz( path, src, 'U8' )
-    return parserCore( fp, 1, 'BEGIN_TABLE', 'END_TABLE' )
-
-ezbigParser = lambda path: tablesParser( path, 'EZ-Big.txt.in' )
-wubiParser = lambda path: tablesParser( path, 'Wubi.txt.in' )
-zrmParser = lambda path: tablesParser( path, 'Ziranma.txt.in' )
-
-def phraseParser( path ):
-    """ Read phrase_lib.txt and parse it. """
-    global SCIM_PINYIN_VER
-    src = 'scim-pinyin-%s/data/phrase_lib.txt' % SCIM_PINYIN_VER
-    dst = 'phrase_lib.txt'
-    fp = untargz( path, src, 'U8' )
-    return parserCore( fp, 0 )
-
-def tsiParser( path ):
-    """ Read tsi.src and parse it. """
-    src = 'libtabe/tsi-src/tsi.src'
-    dst = 'tsi.src'
-    fp = untargz( path, src, 'big5hkscs' )
-    return parserCore( fp, 0 )
-
-def unihanParser( path ):
-    """ Read Unihan_Variants.txt and parse it. """
-    fp = unzip( path, 'Unihan_Variants.txt', 'U8' )
-    t2s = dict()
-    s2t = dict()
-    for line in fp:
-        if line.startswith( '#' ):
-            continue
-        else:
-            elems = line.split()
-            if len( elems ) < 3:
-                continue
-            type = elems.pop( 1 )
-            elems = unichr2( *elems )
-            if type == 'kTraditionalVariant':
-                s2t[elems[0]] = elems[1:]
-            elif type == 'kSimplifiedVariant':
-                t2s[elems[0]] = elems[1:]
-    fp.close()
-    return ( t2s, s2t )
-
-def applyExcludes( mlist, path ):
-    """ Apply exclude rules from path to mlist. """
-    excludes = open( path, 'rb', 'U8' ).read().split()
-    excludes = [word.split( '#' )[0].strip() for word in excludes]
-    excludes = '|'.join( excludes )
-    excptn = re.compile( '.*(?:%s).*' % excludes )
-    diff = [mword for mword in mlist if excptn.search( mword )]
-    mlist.difference_update( diff )
-    return mlist
-
-def charManualTable( path ):
-    fp = open( path, 'rb', 'U8' )
-    ret = {}
-    for line in fp:
-        elems = line.split( '#' )[0].split( '|' )
-        elems = unichr3( *elems )
-        if len( elems ) > 1:
-            ret[elems[0]] = elems[1:]
-    return ret
-        
-def toManyRules( src_table ):
-    tomany = set()
-    for ( f, t ) in src_table.iteritems():
-        for i in range( 1, len( t ) ):
-            tomany.add( t[i] )
-    return tomany
-
-def removeRules( path, table ):
-    fp = open( path, 'rb', 'U8' )
-    texc = list()
-    for line in fp:
-        elems = line.split( '=>' )
-        f = t = elems[0].strip()
-        if len( elems ) == 2:
-            t = elems[1].strip()
-        f = f.strip('"').strip("'")
-        t = t.strip('"').strip("'")
-        if f:
-            try:
-                table.pop( f )
-            except:
-                pass
-        if t:
-            texc.append( t )
-    texcptn = re.compile( '^(?:%s)$' % '|'.join( texc ) )
-    for (tmp_f, tmp_t) in table.copy().iteritems():
-        if texcptn.match( tmp_t ):
-            table.pop( tmp_f )
-    return table
-
-def customRules( path ):
-    fp = open( path, 'rb', 'U8' )
-    ret = dict()
-    for line in fp:
-        elems = line.split( '#' )[0].split()
-        if len( elems ) > 1:
-            ret[elems[0]] = elems[1]
-    return ret
-
-def dictToSortedList( src_table, pos ):
-    return sorted( src_table.items(), key = lambda m: m[pos] )
-
-def translate( text, conv_table ):
-    i = 0
-    while i < len( text ):
-        for j in range( len( text ) - i, 0, -1 ):
-            f = text[i:][:j]
-            t = conv_table.get( f )
-            if t:
-                text = text[:i] + t + text[i:][j:]
-                i += len(t) - 1
-                break
-        i += 1
-    return text
-
-def manualWordsTable( path, conv_table, reconv_table ):
-    fp = open( path, 'rb', 'U8' )
-    reconv_table = {}
-    wordlist = [line.split( '#' )[0].strip() for line in fp]
-    wordlist = list( set( wordlist ) )
-    wordlist.sort( key = len, reverse = True )
-    while wordlist:
-        word = wordlist.pop()
-        new_word = translate( word, conv_table )
-        rcv_word = translate( word, reconv_table )
-        if word != rcv_word:
-            reconv_table[word] = word
-        reconv_table[new_word] = word
-    return reconv_table
-
-def defaultWordsTable( src_wordlist, src_tomany, char_conv_table, char_reconv_table ):
-    wordlist = list( src_wordlist )
-    wordlist.sort( key = len, reverse = True )
-    word_conv_table = {}
-    word_reconv_table = {}
-    conv_table = char_conv_table.copy()
-    reconv_table = char_reconv_table.copy()
-    tomanyptn = re.compile( '(?:%s)' % '|'.join( src_tomany ) )
-    while wordlist:
-        conv_table.update( word_conv_table )
-        reconv_table.update( word_reconv_table )
-        word = wordlist.pop()
-        new_word_len = word_len = len( word )
-        while new_word_len == word_len:
-            add = False
-            test_word = translate( word, reconv_table )
-            new_word = translate( word, conv_table )
-            if not reconv_table.get( new_word ) \
-               and ( test_word != word \
-               or ( tomanyptn.search( word ) \
-               and word != translate( new_word, reconv_table ) ) ):
-                word_conv_table[word] = new_word
-                word_reconv_table[new_word] = word
-            try:
-                word = wordlist.pop()
-            except IndexError:
-                break
-            new_word_len = len(word)
-    return word_reconv_table
-
-def PHPArray( table ):
-    lines = ['\'%s\' => \'%s\',' % (f, t) for (f, t) in table if f and t]
-    return '\n'.join(lines)
-
-def main():
-    #Get Unihan.zip:
-    url = 'http://www.unicode.org/Public/%s/ucd/Unihan.zip' % UNIHAN_VER
-    han_dest = 'Unihan.zip'
-    download( url, han_dest )
-    
-    # Get scim-tables-$(SCIM_TABLES_VER).tar.gz:
-    url  = 'http://%s.dl.sourceforge.net/sourceforge/scim/scim-tables-%s.tar.gz' % ( SF_MIRROR, SCIM_TABLES_VER )
-    tbe_dest = 'scim-tables-%s.tar.gz' % SCIM_TABLES_VER
-    download( url, tbe_dest )
-    
-    # Get scim-pinyin-$(SCIM_PINYIN_VER).tar.gz:
-    url  = 'http://%s.dl.sourceforge.net/sourceforge/scim/scim-pinyin-%s.tar.gz' % ( SF_MIRROR, SCIM_PINYIN_VER )
-    pyn_dest = 'scim-pinyin-%s.tar.gz' % SCIM_PINYIN_VER
-    download( url, pyn_dest )
-    
-    # Get libtabe-$(LIBTABE_VER).tgz:
-    url  = 'http://%s.dl.sourceforge.net/sourceforge/libtabe/libtabe-%s.tgz' % ( SF_MIRROR, LIBTABE_VER )
-    lbt_dest = 'libtabe-%s.tgz' % LIBTABE_VER
-    download( url, lbt_dest )
-    
-    # Unihan.txt
-    ( t2s_1tomany, s2t_1tomany ) = unihanParser( han_dest )
-
-    t2s_1tomany.update( charManualTable( 'trad2simp.manual' ) )
-    s2t_1tomany.update( charManualTable( 'simp2trad.manual' ) )
-    
-    t2s_1to1 = dict( [( f, t[0] ) for ( f, t ) in t2s_1tomany.iteritems()] )
-    s2t_1to1 = dict( [( f, t[0] ) for ( f, t ) in s2t_1tomany.iteritems()] )
-    
-    s_tomany = toManyRules( t2s_1tomany )
-    t_tomany = toManyRules( s2t_1tomany )
-
-    # noconvert rules
-    t2s_1to1 = removeRules( 'trad2simp_noconvert.manual', t2s_1to1 )
-    s2t_1to1 = removeRules( 'simp2trad_noconvert.manual', s2t_1to1 )
-    
-    # the supper set for word to word conversion
-    t2s_1to1_supp = t2s_1to1.copy()
-    s2t_1to1_supp = s2t_1to1.copy()
-    t2s_1to1_supp.update( customRules( 'trad2simp_supp_set.manual' ) )
-    s2t_1to1_supp.update( customRules( 'simp2trad_supp_set.manual' ) )
-    
-    # word to word manual rules
-    t2s_word2word_manual = manualWordsTable( 'simpphrases.manual', s2t_1to1_supp, t2s_1to1_supp )
-    t2s_word2word_manual.update( customRules( 'toSimp.manual' ) )
-    s2t_word2word_manual = manualWordsTable( 'tradphrases.manual', t2s_1to1_supp, s2t_1to1_supp )
-    s2t_word2word_manual.update( customRules( 'toTrad.manual' ) )
-
-    # word to word rules from input methods
-    t_wordlist = set()
-    s_wordlist = set()
-    t_wordlist.update( ezbigParser( tbe_dest ),
-                       tsiParser( lbt_dest ) )
-    s_wordlist.update( wubiParser( tbe_dest ),
-                       zrmParser( tbe_dest ),
-                       phraseParser( pyn_dest ) )
-
-    # exclude
-    s_wordlist = applyExcludes( s_wordlist, 'simpphrases_exclude.manual' )
-    t_wordlist = applyExcludes( t_wordlist, 'tradphrases_exclude.manual' )
-
-    s2t_supp = s2t_1to1_supp.copy()
-    s2t_supp.update( s2t_word2word_manual )
-    t2s_supp = t2s_1to1_supp.copy()
-    t2s_supp.update( t2s_word2word_manual )
-
-    # parse list to dict
-    t2s_word2word = defaultWordsTable( s_wordlist, s_tomany, s2t_1to1_supp, t2s_supp )
-    t2s_word2word.update( t2s_word2word_manual )
-    s2t_word2word = defaultWordsTable( t_wordlist, t_tomany, t2s_1to1_supp, s2t_supp )
-    s2t_word2word.update( s2t_word2word_manual )
-    
-    # Final tables
-    # sorted list toHans
-    t2s_1to1 = dict( [( f, t ) for ( f, t ) in t2s_1to1.iteritems() if f != t] )
-    toHans = dictToSortedList( t2s_1to1, 0 ) + dictToSortedList( t2s_word2word, 1 )
-    # sorted list toHant
-    s2t_1to1 = dict( [( f, t ) for ( f, t ) in s2t_1to1.iteritems() if f != t] )
-    toHant = dictToSortedList( s2t_1to1, 0 ) + dictToSortedList( s2t_word2word, 1 )
-    # sorted list toCN
-    toCN = dictToSortedList( customRules( 'toCN.manual' ), 1 )
-    # sorted list toHK
-    toHK = dictToSortedList( customRules( 'toHK.manual' ), 1 )
-    # sorted list toSG
-    toSG = dictToSortedList( customRules( 'toSG.manual' ), 1 )
-    # sorted list toTW
-    toTW = dictToSortedList( customRules( 'toTW.manual' ), 1 )
-    
-    # Get PHP Array
-    php = '''<?php
-/**
- * Simplified / Traditional Chinese conversion tables
- *
- * Automatically generated using code and data in includes/zhtable/
- * Do not modify directly!
- *
- * @file
- */
-
-$zh2Hant = array(\n'''
-    php += PHPArray( toHant ) \
-        +  '\n);\n\n$zh2Hans = array(\n' \
-        +  PHPArray( toHans ) \
-        +  '\n);\n\n$zh2TW = array(\n' \
-        +  PHPArray( toTW ) \
-        +  '\n);\n\n$zh2HK = array(\n' \
-        +  PHPArray( toHK ) \
-        +  '\n);\n\n$zh2CN = array(\n' \
-        +  PHPArray( toCN ) \
-        +  '\n);\n\n$zh2SG = array(\n' \
-        +  PHPArray( toSG ) \
-        +  '\n);\n'
-    
-    f = open( os.path.join( '..', 'ZhConversion.php' ), 'wb', encoding = 'utf8' )
-    print ('Writing ZhConversion.php ... ')
-    f.write( php )
-    f.close()
-    
-    # Remove temporary files
-    print ('Deleting temporary files ... ')
-    os.remove('EZ-Big.txt.in')
-    os.remove('phrase_lib.txt')
-    os.remove('tsi.src')
-    os.remove('Unihan_Variants.txt')
-    os.remove('Wubi.txt.in')
-    os.remove('Ziranma.txt.in')
-    
-
-if __name__ == '__main__':
-    main()
diff --git a/includes/zhtable/README b/includes/zhtable/README
deleted file mode 100644 (file)
index 7e3f87e..0000000
+++ /dev/null
@@ -1,33 +0,0 @@
-The various .manual files contains special mappings not included in the
-unihan database, and phrases not included in the SCIM package. 
-
-- simp2trad.manual: Simplified to Traditional character mapping. Most
-  data adapted from
-
-   冯寿忠,“非对称繁简字”对照表, 《语文建设通讯》1997-9第53期.
-   /http://www.yywzw.com/jt/feng/fengb01.htm
-
-- trad2simp.manual: Traditional to Simplified character mapping.
-
-- simp2trad_noconvert.manual: Do not convert the chars as inapporiate.
-
-- trad2simp_noconvert.manual: Do not convert the chars as inapporiate.
-
-- tradphrases.manual: Phrases in Traditional Chinese. A portition is obtained
-  from the TongWen package (http://tongwen.mozdev.org/)
-
-- simpphrases.manual: Phrases in Simplified Chinese.
-
-- tradphrases_exclude.manual: Excluding several phrases from 
-  the SCIM phrases as inappoiated.
-
-- simpphrases_exclude.manual: Excluding several phrases from
-  the SCIM phrases as inapporated.
-
-- toTrad.manual, toSimp.manual: Special phrase mappings that 
-  tradphrases.manual or simphrases.manual cannot be handled.
-
-- toTW.manual, toCN.manual, toSG.manual and toHK.manual: Special phrase
-  mappings. 
-
-zhengzhu at gmail dot com & shinjiman at gmail dot com
diff --git a/includes/zhtable/printutf8.c b/includes/zhtable/printutf8.c
deleted file mode 100644 (file)
index b6ccf17..0000000
+++ /dev/null
@@ -1,99 +0,0 @@
-#include <stdlib.h>
-#include <stdio.h>
-#include <string.h>
-/* 
- Unicode                   UTF8
-0x00000000 - 0x0000007F: 0xxxxxxx
-0x00000080 - 0x000007FF: 110xxx xx 10xx xxxx
-0x00000800 - 0x0000FFFF: 1110xxxx  10xxxx xx 10xx xxxx
-0x00010000 - 0x001FFFFF: 11110x xx 10xx xxxx 10xxxx xx 10xx xxxx
-0x00200000 - 0x03FFFFFF: 111110xx  10xxxx xx 10xx xxxx 10xxxx xx 10xx xxxx
-0x04000000 - 0x7FFFFFFF: 1111110x  10xx xxxx 10xxxx xx 10xx xxxx 10xxxx xx 10xx xxxx
-
-0000 0      1001 9
-0001 1      1010 A
-0010 2      1011 B
-0011 3      1100 C
-0100 4      1101 D 
-0101 5      1110 E
-0110 6      1111 F
-0111 7
-1000 8
-*/
-void printUTF8(long long u) {
-  long long m;
-  if(u<0x80) {
-    printf("%c", (unsigned char)u);
-  }
-  else if(u<0x800) {
-    m = ((u&0x7c0)>>6) | 0xc0;
-    printf("%c", (unsigned char)m);
-    m = (u&0x3f) | 0x80;
-    printf("%c", (unsigned char)m);
-  }
-  else if(u<0x10000) {
-    m = ((u&0xf000)>>12) | 0xe0;
-    printf("%c",(unsigned char)m);
-    m = ((u&0xfc0)>>6) | 0x80;
-    printf("%c",(unsigned char)m);
-    m = (u & 0x3f) | 0x80;
-    printf("%c",(unsigned char)m);
-  }
-  else if(u<0x200000) {
-    m = ((u&0x1c0000)>>18) | 0xf0;
-    printf("%c", (unsigned char)m);
-    m = ((u& 0x3f000)>>12) | 0x80;
-    printf("%c", (unsigned char)m);
-    m = ((u& 0xfc0)>>6) | 0x80;
-    printf("%c", (unsigned char)m);
-    m = (u&0x3f) | 0x80;
-    printf("%c", (unsigned char)m);
-  }
-  else if(u<0x4000000){
-    m = ((u&0x3000000)>>24) | 0xf8;
-    printf("%c", (unsigned char)m);
-    m = ((u&0xfc0000)>>18) | 0x80;
-    printf("%c", (unsigned char)m);
-    m = ((u&0x3f000)>>12) | 0x80;
-    printf("%c", (unsigned char)m);
-    m = ((u&0xfc00)>>6) | 0x80;
-    printf("%c", (unsigned char)m);
-    m = (u&0x3f) | 0x80;
-    printf("%c", (unsigned char)m);
-  }
-  else {
-    m = ((u&0x40000000)>>30) | 0xfc;
-    printf("%c", (unsigned char)m);
-    m = ((u&0x3f000000)>>24) | 0x80;
-    printf("%c", (unsigned char)m);
-    m = ((u&0xfc0000)>>18) | 0x80;
-    printf("%c", (unsigned char)m);
-    m = ((u&0x3f000)>>12) | 0x80;
-    printf("%c", (unsigned char)m);
-    m = ((u&0xfc0)>>6) | 0x80;
-    printf("%c", (unsigned char)m);
-    m = (u&0x3f)| 0x80;
-    printf("%c", (unsigned char)m);
-  }
-}
-
-int main() {
-  int i,j;
-  long long n1, n2;
-  unsigned char b1[15], b2[15];
-  unsigned char buf[1024];
-  i=0;
-  while(fgets(buf, 1024, stdin)) {
-    //    printf("read %s\n", buf);
-    for(i=0;i<strlen(buf); i++) 
-      if(buf[i]=='U') {
-       if(buf[i+1] == '+') {
-         n1 = strtoll(buf+i+2,0,16);
-         printf("U+%05x", n1);
-         printUTF8(n1);printf("|");
-       }
-      }
-    printf("\n");
-  }
-}
-
diff --git a/includes/zhtable/simp2trad.manual b/includes/zhtable/simp2trad.manual
deleted file mode 100644 (file)
index 1b84f8e..0000000
+++ /dev/null
@@ -1,372 +0,0 @@
-U+03CE0㳠|U+06FBE澾|
-U+0447D䑽|U+26A99𦪙|
-U+0497A䥺|U+091FE釾|
-U+0497D䥽|U+093FA鏺|
-U+04983䦃|U+0942F鐯|
-U+04985䦅|U+09425鐥|
-U+04B6A䭪|U+297AF𩞯|
-U+04C9F䲟|U+09BA3鮣|
-U+04CA0䲠|U+09C06鰆|
-U+04CA1䲡|U+09C0C鰌|
-U+04CA2䲢|U+09C27鰧|
-U+04CA3䲣|U+04C77䱷|
-U+04DAE䶮|U+09F91龑|
-U+04E07万|U+0842C萬|U+04E07万|
-U+04E0E与|U+08207與|U+04E0E与|
-U+04E11丑|U+04E11丑|U+0919C醜|
-U+04E2A个|U+0500B個|U+07B87箇|
-U+04E30丰|U+08C50豐|U+04E30丰|
-U+04E3A为|U+070BA為|U+07232爲|
-U+04E48么|U+04E48么|U+09EBD麽|U+05E7A幺|U+09EBC麼|
-U+04E86了|U+04E86了|U+077AD瞭|
-U+04E8E于|U+065BC於|U+04E8E于|
-U+04E91云|U+096F2雲|U+04E91云|
-U+04EA7产|U+07522產|U+07523産|
-U+04EC6仆|U+04EC6仆|U+050D5僕|
-U+04EC7仇|U+04EC7仇|U+08B8E讎|
-U+04ED1仑|U+04F96侖|U+05D19崙|
-U+04EF7价|U+050F9價|U+04EF7价|
-U+04F17众|U+0773E眾|U+08846衆|
-U+04F19伙|U+04F19伙|U+05925夥|
-U+04F2A伪|U+0507D偽|U+050DE僞|
-U+04F53体|U+09AD4體|U+04F53体|
-U+04F59余|U+04F59余|U+09918餘|
-U+04F63佣|U+04F63佣|U+050AD傭|
-U+0501F借|U+0501F借|U+085C9藉|
-U+0513F儿|U+05152兒|U+0513F儿|
-U+0514B克|U+0514B克|U+0524B剋|
-U+0515A党|U+09EE8黨|U+0515A党|
-U+051AC冬|U+051AC冬|U+09F15鼕|
-U+051B2冲|U+06C96沖|U+0885D衝|
-U+051C6准|U+051C6准|U+06E96準|
-U+051E0几|U+05E7E幾|U+051E0几|
-U+051EB凫|U+09CE7鳧|U+09CEC鳬|
-U+051FA出|U+051FA出|U+09F63齣|
-U+05212划|U+05283劃|U+05212划|
-U+0522B别|U+05225別|U+05F46彆|
-U+0522E刮|U+0522E刮|U+098B3颳|
-U+05236制|U+05236制|U+088FD製|
-U+05343千|U+05343千|U+097C6韆|
-U+05347升|U+05347升|U+06607昇|U+0965E陞|
-U+0535C卜|U+0535C卜|U+08514蔔|
-U+05360占|U+05360占|U+04F54佔|
-U+05364卤|U+09E75鹵|U+06EF7滷|
-U+05377卷|U+05377卷|U+06372捲|
-U+0537A卺|U+05DF9巹|
-U+05382厂|U+05EE0廠|U+05382厂|
-U+05386历|U+06B77歷|U+066C6曆|U+053A4厤|
-U+05395厕|U+05EC1廁|U+053A0厠|
-U+05398厘|U+05398厘|U+091D0釐|
-U+053D1发|U+0767C發|U+09AEE髮|
-U+053EA只|U+053EA只|U+096BB隻|
-U+053F0台|U+053F0台|U+081FA臺|U+06AAF檯|U+098B1颱|
-U+053F6叶|U+08449葉|U+053F6叶|
-U+05401吁|U+05401吁|U+07C72籲|
-U+05408合|U+05408合|U+095A4閤|
-U+0540A吊|U+0540A吊|U+05F14弔|
-U+0540C同|U+0540C同|U+08855衕|
-U+0540E后|U+05F8C後|U+0540E后|
-U+05411向|U+05411向|U+056AE嚮|U+066CF曏|
-U+0542F启|U+0555F啟|U+05553啓|
-U+05446呆|U+05446呆|U+07343獃|
-U+054B8咸|U+054B8咸|U+09E79鹹|
-U+054C4哄|U+054C4哄|U+09B28鬨|
-U+05582喂|U+05582喂|U+09935餵|
-U+056DE回|U+056DE回|U+08FF4迴|
-U+056E2团|U+05718團|U+07CF0糰|
-U+056F0困|U+056F0困|U+0774F睏|
-U+05742坂|U+05742坂|U+0962A阪|
-U+0574F坏|U+058DE壞|U+0574F坏|
-U+0575B坛|U+058C7壇|U+07F48罈|
-U+057FC埼|U+057FC埼|U+07895碕|
-U+05899墙|U+07246牆|U+058BB墻|
-U+058F3壳|U+06BBC殼|U+06BBB殻|
-U+0590D复|U+05FA9復|U+08907複|
-U+05956奖|U+0734E獎|U+0596C奬|
-U+05978奸|U+05978奸|U+059E6姦|
-U+059AB妫|U+05AAF媯|U+05B00嬀|
-U+059DC姜|U+059DC姜|U+08591薑|
-U+05B81宁|U+05BE7寧|U+05B81宁|
-U+05BB6家|U+05BB6家|U+050A2傢|
-U+05C3D尽|U+076E1盡|U+05118儘|
-U+05CB3岳|U+05CB3岳|U+05DBD嶽|
-U+05E03布|U+05E03布|U+04F48佈|
-U+05E18帘|U+07C3E簾|U+05E18帘|
-U+05E5E幞|U+08946襆|
-U+05E72干|U+05E72干|U+04E7E乾|U+05E79幹|U+069A6榦|
-U+05E76并|U+04E26並|U+04F75併|
-U+05E78幸|U+05E78幸|U+05016倖|
-U+05E7F广|U+05EE3廣|U+05E7F广|
-U+05E84庄|U+05E84庄|U+0838A莊|
-U+05EB5庵|U+05EB5庵|U+083F4菴|
-U+05F25弥|U+05F4C彌|U+07030瀰|
-U+05F53当|U+07576當|U+05679噹|
-U+05F55录|U+09304錄|U+09332録|
-U+05F69彩|U+05F69彩|U+07DB5綵|
-U+05F81征|U+05F81征|U+05FB5徵|
-U+05FA1御|U+05FA1御|U+079A6禦|
-U+05FD7志|U+05FD7志|U+08A8C誌|
-U+06076恶|U+060E1惡|U+05641噁|
-U+060AB悫|U+06128愨|U+06164慤|
-U+0613F愿|U+09858願|U+0613F愿|
-U+0621A戚|U+0621A戚|U+0617C慼|U+093DA鏚|
-U+0624D才|U+0624D才|U+07E94纔|
-U+0624E扎|U+0624E扎|U+07D2E紮|
-U+06258托|U+06258托|U+08A17託|
-U+06298折|U+06298折|U+0647A摺|
-U+062C5担|U+064D4擔|U+062C5担|
-U+062FC拼|U+062FC拼|U+062DA拚|
-U+06328挨|U+06328挨|U+06371捱|
-U+0633D挽|U+0633D挽|U+08F13輓|
-U+0636E据|U+064DA據|U+0636E据|
-U+06597斗|U+06597斗|U+09B25鬥|
-U+065CB旋|U+065CB旋|U+0955F镟|
-U+065D7旗|U+065D7旗|U+065C2旂|
-U+066F2曲|U+066F2曲|U+09EAF麯|U+09EB4麯|
-U+0672F术|U+08853術|U+0672E朮|
-U+06731朱|U+06731朱|U+07843硃|
-U+06734朴|U+06734朴|U+06A38樸|
-U+0676F杯|U+0676F杯|U+076C3盃|
-U+0677E松|U+0677E松|U+09B06鬆|
-U+0677F板|U+0677F板|U+095C6闆|
-U+06781极|U+06975極|U+06781极|
-U+067DC柜|U+06AC3櫃|U+067DC柜|
-U+06817栗|U+06817栗|U+06144慄|
-U+06881梁|U+06881梁|U+06A11樑|
-U+068F1棱|U+068F1棱|U+07A1C稜|
-U+06B32欲|U+06B32欲|U+0617E慾|
-U+06C47汇|U+0532F匯|U+06ED9滙|U+05F59彙|
-U+06C84沄|U+06C84沄|U+06F90澐|
-U+06C88沈|U+06C88沈|U+0700B瀋|
-U+06CA9沩|U+06E88溈|U+06F59潙|
-U+06CE8注|U+06CE8注|U+08A3B註|
-U+06D82涂|U+05857塗|U+06D82涂|
-U+06D8C涌|U+06D8C涌|U+06E67湧|
-U+06DC0淀|U+06DC0淀|U+06FB1澱|
-U+06E38游|U+06E38游|U+0904A遊|
-U+06EAF溯|U+06EAF溯|U+06CDD泝|
-U+06F13漓|U+06F13漓|U+07055灕|
-U+070BC炼|U+07149煉|U+0934A鍊|
-U+0753B画|U+0756B畫|U+07575畵|
-U+075C7症|U+075C7症|U+07665癥|
-U+07618瘘|U+0763A瘺|U+0763B瘻|
-U+0786E确|U+078BA確|U+0786E确|
-U+07877硷|U+07906礆|U+09E7C鹼|
-U+079CB秋|U+079CB秋|U+097A6鞦|
-U+079CD种|U+07A2E種|U+079CD种|
-U+07A57穗|U+07A57穗|U+07E50繐|
-U+07AD6竖|U+08C4E豎|U+07AEA竪|
-U+07B51筑|U+07BC9築|U+07B51筑|
-U+07B7E签|U+07C3D簽|U+07C64籤|
-U+07CFB系|U+07CFB系|U+07E6B繫|U+04FC2係|
-U+07D2F累|U+07D2F累|U+07E8D纍|
-U+07EA4纤|U+07E96纖|U+07E34縴|
-U+07EBF线|U+07DDA線|U+07DAB綫|
-U+07EDD绝|U+07D55絕|U+07D76絶|
-U+07EE3绣|U+07D89綉|U+07E61繡|
-U+07EE6绦|U+07D5B絛|U+07E27縧|
-U+07EF1绱|U+07DD4緔|U+0979D鞝|
-U+07EF7绷|U+07DB3綳|U+07E43繃|
-U+07EFF绿|U+07DA0綠|U+07DD1緑|
-U+07F30缰|U+097C1韁|U+07E6E繮|
-U+07FA1羡|U+07FA8羨|
-U+080DC胜|U+052DD勝|U+080DC胜|
-U+080E1胡|U+080E1胡|U+09B0D鬍|U+0885A衚|
-U+0810F脏|U+081DF臟|U+09AD2髒|
-U+0814A腊|U+081D8臘|U+0814A腊|
-U+081F4致|U+081F4致|U+07DFB緻|
-U+0820D舍|U+0820D舍|U+06368捨|
-U+082B8芸|U+082B8芸|U+08553蕓|
-U+082CE苎|U+082E7苧|
-U+082CF苏|U+08607蘇|U+056CC囌|U+07C64甦|
-U+082E7苧|U+085B4薴|
-U+082F9苹|U+0860B蘋|U+082F9苹|
-U+08303范|U+08303范|U+07BC4範|
-U+0836F药|U+0846F葯|U+085E5藥|
-U+083B7获|U+07372獲|U+07A6B穫|
-U+083BC莼|U+08493蒓|U+084F4蓴|
-U+08499蒙|U+08499蒙|U+077C7矇|U+06FDB濛|U+061DE懞|
-U+084D1蓑|U+084D1蓑|U+07C11簑|
-U+08511蔑|U+08511蔑|U+0884A衊|
-U+08574蕴|U+0860A蘊|U+085F4藴|
-U+0866B虫|U+087F2蟲|U+0866B虫|
-U+08721蜡|U+0881F蠟|U+08721蜡|
-U+0874E蝎|U+0880D蠍|
-U+08868表|U+08868表|U+09336錶|
-U+08BF4说|U+08AAA說|U+08AAC説|
-U+08C23谣|U+08B20謠|U+08B21謡|
-U+08C2B谫|U+08B7E譾|U+08B2D謭|
-U+08C37谷|U+08C37谷|U+07A40穀|
-U+08D43赃|U+08D13贓|U+08D1C贜|
-U+08D4D赍|U+09F4E齎|U+08CEB賫|
-U+08D5D赝|U+08D17贗|U+08D0B贋|
-U+08D5E赞|U+08D0A贊|U+08B9A讚|
-U+08F9F辟|U+08F9F辟|U+095E2闢|
-U+09002适|U+09069適|U+09002适|
-U+090C1郁|U+090C1郁|U+09B31鬱|
-U+0915D酝|U+0919E醞|U+09196醖|
-U+09170酰|U+09170酰|U+091AF醯|
-U+09178酸|U+09178酸|U+075E0痠|
-U+091C7采|U+091C7采|U+063A1採|U+057F0埰|
-U+091CC里|U+091CC里|U+088E1裡|U+088CF裏|
-U+093AD鎭|U+093AE鎮|
-U+0949F钟|U+0937E鍾|U+09418鐘|
-U+094A9钩|U+09264鉤|U+0920E鈎|
-U+094B5钵|U+07F3D缽|U+09262鉢|
-U+094F2铲|U+093DF鏟|U+05277剷|
-U+09508锈|U+092B9銹|U+093FD鏽|
-U+09510锐|U+092B3銳|U+092ED鋭|
-U+09528锨|U+06774杴|U+09341鍁|
-U+0954C镌|U+0942B鐫|U+093B8鎸|
-U+09562镢|U+09481钁|U+0941D鐝|
-U+09605阅|U+095B1閱|U+095B2閲|
-U+096C7雇|U+096C7雇|U+050F1僱|
-U+096D5雕|U+096D5雕|U+09D70鵰|
-U+09709霉|U+09709霉|U+09EF4黴|
-U+09762面|U+09762面|U+09EB5麵|U+09EAA麪|U+09EAB麫|
-U+097B2鞲|U+097DD韝|
-U+0987B须|U+09808須|U+09B1A鬚|
-U+09893颓|U+09839頹|U+0983D頽|
-U+0989C颜|U+0984F顏|U+09854顔|
-U+09965饥|U+098E2飢|U+09951饑|
-U+09980馀|U+09918餘|
-U+09986馆|U+09928館|U+08218舘|
-U+09A82骂|U+07F75罵|U+099E1駡|
-U+09C87鲇|U+09BF0鯰|U+09B8E鮎|
-U+09C9E鲞|U+09BD7鯗|U+09B9D鮝|
-U+09CC4鳄|U+09C77鱷|U+09C10鰐|
-U+09E21鸡|U+096DE雞|U+09DC4鷄|
-U+09E5A鹚|U+09DBF鶿|U+09DC0鷀|
-U+09E6E鹮|U+04D09䴉|
-U+09F44齄|U+09F47齇|
-U+20BB6𠮶|U+055F0嗰|
-U+26216𦈖|U+04308䌈|
-U+28C3E𨰾|U+093B7鎷|
-U+28C3F𨰿|U+091F3釳|
-U+28C40𨱀|U+2895B𨥛|
-U+28C41𨱁|U+09220鈠|
-U+28C42𨱂|U+0920B鈋|
-U+28C43𨱃|U+09232鈲|
-U+28C44𨱄|U+0922F鈯|
-U+28C45𨱅|U+09241鉁|
-U+28C47𨱇|U+092B6銶|
-U+28C48𨱈|U+092C9鋉|
-U+28C49𨱉|U+09344鍄|
-U+28C4A𨱊|U+289F1𨧱|
-U+28C4B𨱋|U+09302錂|
-U+28C4C𨱌|U+093C6鏆|
-U+28C4D𨱍|U+093AF鎯|
-U+28C4E𨱎|U+0936E鍮|
-U+28C4F𨱏|U+0939D鎝|
-U+28C50𨱐|U+28AD2𨫒|
-U+28C52𨱒|U+093C9鏉|
-U+28C53𨱓|U+0940E鐎|
-U+28C54𨱔|U+0940F鐏|
-U+28C55𨱕|U+28B82𨮂|
-U+28E02𨸂|U+0958D閍|
-U+28E03𨸃|U+09590閐|
-U+293FC𩏼|U+04A8F䪏|
-U+293FD𩏽|U+293EA𩏪|
-U+293FE𩏾|U+293A2𩎢|
-U+293FF𩏿|U+04A98䪘|
-U+29400𩐀|U+04A97䪗|
-U+29595𩖕|U+294E3𩓣|
-U+29596𩖖|U+09843顃|
-U+29597𩖗|U+04AF4䫴|
-U+29665𩙥|U+098B0颰|
-U+29666𩙦|U+295C0𩗀|
-U+29667𩙧|U+295E1𩗡|
-U+29668𩙨|U+29639𩘹|
-U+29669𩙩|U+29600𩘀|
-U+2966A𩙪|U+098B7颷|
-U+2966B𩙫|U+098BE颾|
-U+2966C𩙬|U+2963A𩘺|
-U+2966D𩙭|U+2961D𩘝|
-U+2966E𩙮|U+04B18䬘|
-U+2966F𩙯|U+04B1D䬝|
-U+29670𩙰|U+29648𩙈|
-U+29805𩠅|U+297D0𩟐|
-U+29806𩠆|U+29726𩜦|
-U+29807𩠇|U+04B40䭀|
-U+29808𩠈|U+04B43䭃|
-U+2980B𩠋|U+29754𩝔|
-U+2980C𩠌|U+09938餸|
-U+299E6𩧦|U+2987A𩡺|
-U+299E8𩧨|U+099CE駎|
-U+299E9𩧩|U+2990A𩤊|
-U+299EA𩧪|U+04BBE䮾|
-U+299EB𩧫|U+099DA駚|
-U+299EC𩧬|U+298A1𩢡|
-U+299ED𩧭|U+04B7F䭿|
-U+299EE𩧮|U+298BE𩢾|
-U+299EF𩧯|U+09A4B驋|
-U+299F0𩧰|U+04B9D䮝|
-U+299F1𩧱|U+29949𩥉|
-U+299F2𩧲|U+099E7駧|
-U+299F3𩧳|U+298B8𩢸|
-U+299F4𩧴|U+099E9駩|
-U+299F5𩧵|U+298B4𩢴|
-U+299F6𩧶|U+298CF𩣏|
-U+299FA𩧺|U+099F6駶|
-U+299FB𩧻|U+298F5𩣵|
-U+299FC𩧼|U+298FA𩣺|
-U+299FF𩧿|U+04BA0䮠|
-U+29A00𩨀|U+09A14騔|
-U+29A01𩨁|U+04B9E䮞|
-U+29A03𩨃|U+09A1D騝|
-U+29A04𩨄|U+09A2A騪|
-U+29A05𩨅|U+29938𩤸|
-U+29A06𩨆|U+29919𩤙|
-U+29A08𩨈|U+09A1F騟|
-U+29A09𩨉|U+29932𩤲|
-U+29A0A𩨊|U+09A1A騚|
-U+29A0B𩨋|U+29944𩥄|
-U+29A0C𩨌|U+29951𩥑|
-U+29A0D𩨍|U+29947𩥇|
-U+29A0F𩨏|U+04BB3䮳|
-U+29A10𩨐|U+299C6𩧆|
-U+29F79𩽹|U+09B65魥|
-U+29F7A𩽺|U+29D69𩵩|
-U+29F7B𩽻|U+29D79𩵹|
-U+29F7C𩽼|U+09BF6鯶|
-U+29F7D𩽽|U+29DB1𩶱|
-U+29F7E𩽾|U+09B9F鮟|
-U+29F7F𩽿|U+29DB0𩶰|
-U+29F80𩾀|U+09B95鮕|
-U+29F81𩾁|U+09BC4鯄|
-U+29F83𩾃|U+09BB8鮸|
-U+29F84𩾄|U+29DF0𩷰|
-U+29F85𩾅|U+29E03𩸃|
-U+29F86𩾆|U+29E26𩸦|
-U+29F87𩾇|U+09BF1鯱|
-U+29F88𩾈|U+04C59䱙|
-U+29F8A𩾊|U+04C6C䱬|
-U+29F8B𩾋|U+04C70䱰|
-U+29F8C𩾌|U+09C47鱇|
-U+29F8C𩾌|U+09C47鱇|
-U+29F8E𩾎|U+29F47𩽇|
-U+2A242𪉂|U+04CB0䲰|
-U+2A243𪉃|U+09CFC鳼|
-U+2A244𪉄|U+29FEA𩿪|
-U+2A245𪉅|U+2A026𪀦|
-U+2A246𪉆|U+09D32鴲|
-U+2A248𪉈|U+09D1C鴜|
-U+2A249𪉉|U+2A048𪁈|
-U+2A24A𪉊|U+09DE8鷨|
-U+2A24B𪉋|U+2A03E𪀾|
-U+2A24C𪉌|U+2A056𪁖|
-U+2A24D𪉍|U+09D5A鵚|
-U+2A24E𪉎|U+2A086𪂆|
-U+2A24F𪉏|U+2A0CF𪃏|
-U+2A250𪉐|U+2A0CD𪃍|
-U+2A251𪉑|U+09DD4鷔|
-U+2A252𪉒|U+2A115𪄕|
-U+2A254𪉔|U+2A106𪄆|
-U+2A255𪉕|U+2A1F3𪇳|
-U+2A388𪎈|U+04D2C䴬|
-U+2A389𪎉|U+09EB2麲|
-U+2A38A𪎊|U+09EA8麨|
-U+2A38B𪎋|U+04D34䴴|
-U+2A38C𪎌|U+09EB3麳|
-U+2A68F𪚏|U+2A600𪘀|
-U+2A690𪚐|U+2A62F𪘯|
diff --git a/includes/zhtable/simp2trad_noconvert.manual b/includes/zhtable/simp2trad_noconvert.manual
deleted file mode 100644 (file)
index a46560a..0000000
+++ /dev/null
@@ -1,139 +0,0 @@
-著
-竈
-彞
-=>"余"
-=>"𫗭"
-=>"𪨧"
-=>"𫚭"
-=>"𫔀"
-=>"𫊻"
-=>"𫋌"
-=>"蚃"
-=>"𩾂"
-=>"𫚜"
-=>"𫚢"
-=>"𧉰"
-=>"䙌"
-=>"𫊮"
-=>"𫋇"
-=>"𫉄"
-=>"𫘛"
-=>"𫘜"
-=>"𫘝"
-=>"𫘟"
-=>"𩧨"
-=>"𩧫"
-=>"𫘞"
-=>"𫘠"
-=>"𩧲"
-=>"𩧴"
-=>"𫘡"
-=>"𩧺"
-=>"𫘣"
-=>"𫘤"
-=>"𫘧"
-=>"𫘥"
-=>"𫘦"
-=>"𩨀"
-=>"𩨊"
-=>"𫘩"
-=>"𩨃"
-=>"𫘪"
-=>"𫘪"
-=>"𫘫"
-=>"𫘬"
-=>"𩨈"
-=>"𫘨"
-=>"𩨄"
-=>"𫘭"
-=>"𩧯"
-=>"𫘯"
-=>"𫘰"
-=>"𫘱"
-=>"𫘽"
-=>"𫚉"
-=>"𩽹"
-=>"𫚌"
-=>"𫚍"
-=>"𫚒"
-=>"𫚑"
-=>"𫚖"
-=>"𩽾"
-=>"䲟"
-=>"𫚓"
-=>"𫚗"
-=>"𫚔"
-=>"𫚛"
-=>"𩾃"
-=>"𫚚"
-=>"𩾁"
-=>"𫚙"
-=>"𫚡"
-=>"𫚞"
-=>"𩾇"
-=>"𩽼"
-=>"𫚣"
-=>"䲠"
-=>"䲡"
-=>"𫚊"
-=>"𫚥"
-=>"𫚕"
-=>"𫚤"
-=>"䲢"
-=>"𫚦"
-=>"𫚧"
-=>"𫚋"
-=>"𩾌"
-=>"𫚪"
-=>"𫚫"
-=>"𫚈"
-=>"𫚭"
-=>"𫛛"
-=>"𪉃"
-=>"𫛚"
-=>"𫛜"
-=>"𫛞"
-=>"𫛝"
-=>"𫛤"
-=>"𫛡"
-=>"𫁡"
-=>"𪉈"
-=>"𫛣"
-=>"𫛦"
-=>"𪉆"
-=>"𫛩"
-=>"𫛪"
-=>"𫛥"
-=>"𪉍"
-=>"𫛭"
-=>"𫛨"
-=>"𫛳"
-=>"𫛱"
-=>"𫛲"
-=>"𫛵"
-=>"𫛶"
-=>"𫛸"
-=>"𫛷"
-=>"𫛯"
-=>"𫛫"
-=>"𫛽"
-=>"𫜀"
-=>"𪉑"
-=>"𫜃"
-=>"𫛴"
-=>"𪉊"
-=>"𫜁"
-=>"𫜄"
-=>"𫛢"
-=>"𫛟"
-=>"𪎊"
-=>"𤿲"
-=>"𪎉"
-=>"𪎌"
-=>"𫜑"
-=>"𫜩"
-=>"𫜪"
-=>"𫜭"
-=>"𫜬"
-=>"𫜮"
-=>"𫜰"
diff --git a/includes/zhtable/simp2trad_supp_set.manual b/includes/zhtable/simp2trad_supp_set.manual
deleted file mode 100644 (file)
index a5038a5..0000000
+++ /dev/null
@@ -1,2 +0,0 @@
-余    餘
-着    著
\ No newline at end of file
diff --git a/includes/zhtable/simpphrases.manual b/includes/zhtable/simpphrases.manual
deleted file mode 100644 (file)
index d8602fe..0000000
+++ /dev/null
@@ -1,2239 +0,0 @@
-乾上乾下
-乾为天
-乾为阳
-乾九
-乾乾
-乾亨
-乾仪
-乾位
-乾健
-乾元
-乾光
-乾兴
-乾冈
-乾刘
-乾刚
-乾化
-乾卦
-乾县
-乾台
-乾吉
-乾启
-乾命
-乾和
-乾嘉
-乾图
-乾坤
-乾城
-乾基
-乾始
-乾姓
-乾宁
-乾宅
-乾宇
-乾安
-乾定
-乾封
-乾居
-乾岗
-乾巛
-乾州
-乾式
-乾录
-乾律
-乾德
-乾心
-乾文
-乾断
-乾方
-乾施
-乾旦
-乾明
-乾昧
-乾晖
-乾景
-乾晷
-乾曜
-乾构
-乾枢
-乾栋
-乾步
-乾氏
-乾泉
-乾清宫
-乾渥
-乾灵
-乾男
-乾皋
-乾盛世
-乾矢
-乾祐
-乾穹
-乾窦
-乾竺
-乾笃
-乾符
-乾策
-乾精
-乾红
-乾纲
-乾纽
-乾络
-乾统
-乾维
-乾罗
-乾花
-乾荫
-乾行
-乾衡
-乾覆
-乾象
-乾象历
-乾贞
-乾贶
-乾车
-乾轴
-乾造
-乾道
-乾鉴
-乾钧
-乾闼
-乾陀
-乾陵
-乾隆
-乾音
-乾顾
-乾风
-乾首
-乾马
-乾鹄
-乾鹊
-乾龙
-乾,健也
-乾,天也
-乾健也
-乾天也
-坤乾
-天道为乾
-尼乾陀
-康乾
-张法乾
-旋乾转坤
-易·乾
-《易乾
-周易乾
-易经·乾
-易经乾
-李乾德
-萧乾
-郭子乾
-雍乾
-乾务
-乾沓和
-乾沓婆
-乾通
-乾忠
-乾淳
-李乾顺
-黄润乾
-男性为乾
-男为乾
-阳为乾
-乾一组
-乾一坛
-陈乾生
-陈公乾生
-字乾生
-不着痕迹
-不着边际
-与着
-与著书
-与著作
-与著名
-与著录
-与著称
-与著者
-与著述
-丑着
-丑著书
-丑著作
-丑著名
-丑著录
-丑著称
-丑著者
-丑著述
-临着
-临著书
-临著作
-临著名
-临著录
-临著称
-临著者
-临著述
-丽着
-丽著书
-丽著作
-丽著名
-丽著录
-丽著称
-丽著者
-丽著述
-乐着
-乐著书
-乐著作
-乐著名
-乐著录
-乐著称
-乐著者
-乐著述
-乘着
-乘著书
-乘著作
-乘著名
-乘著录
-乘著称
-乘著者
-乘著述
-争着
-争著书
-争著作
-争著名
-争著录
-争著称
-争著者
-争著述
-亮着
-亮著书
-亮著作
-亮著名
-亮著录
-亮著称
-亮著者
-亮著述
-仗着
-仗著书
-仗著作
-仗著名
-仗著录
-仗著称
-仗著者
-仗著述
-代表着
-代表著书
-代表著作
-代表著名
-代表著录
-代表著称
-代表著者
-代表著述
-伴着
-伴著书
-伴著作
-伴著名
-伴著录
-伴著称
-伴著者
-伴著述
-低着
-低著书
-低著作
-低著名
-低著录
-低著称
-低著者
-低著述
-住着
-住著书
-住著作
-住著名
-住著录
-住著称
-住著者
-住著述
-侧着
-侧著书
-侧著作
-侧著名
-侧著录
-侧著称
-侧著者
-侧著述
-保障着
-保障著书
-保障著作
-保障著名
-保障著录
-保障著称
-保障著者
-保障著述
-信着
-信著书
-信著作
-信著名
-信著录
-信著称
-信著者
-信著述
-候着
-候著书
-候著作
-候著名
-候著录
-候著称
-候著者
-候著述
-借着
-借著书
-借著作
-借著名
-借著录
-借著称
-借著者
-借著述
-做着
-做著书
-做著作
-做著名
-做著录
-做著称
-做著者
-做著述
-偷着
-偷著书
-偷著作
-偷著名
-偷著录
-偷著称
-偷著者
-偷著述
-光着
-光著书
-光著作
-光著名
-光著录
-光著称
-光著者
-光著述
-关着
-关著书
-关著作
-关著名
-关著录
-关著称
-关著者
-关著述
-冀着
-冀著书
-冀著作
-冀著名
-冀著录
-冀著称
-冀著者
-冀著述
-冒着
-冒著书
-冒著作
-冒著名
-冒著录
-冒著称
-冒著者
-冒著述
-写着
-写著书
-写著作
-写著名
-写著录
-写著称
-写著者
-写著述
-凉着
-凉著书
-凉著作
-凉著名
-凉著录
-凉著称
-凉著者
-凉著述
-制着
-制著书
-制著作
-制著名
-制著录
-制著称
-制著者
-制著述
-刻着
-刻著书
-刻著作
-刻著名
-刻著录
-刻著称
-刻著者
-刻著述
-办着
-办著书
-办著作
-办著名
-办著录
-办著称
-办著者
-办著述
-动着
-动著书
-动著作
-动著名
-动著录
-动著称
-动著者
-动著述
-努力着
-努力著书
-努力著作
-努力著名
-努力著录
-努力著称
-努力著者
-努力著述
-努着
-努著书
-努著作
-努著名
-努著录
-努著称
-努著者
-努著述
-印着
-印著书
-印著作
-印著名
-印著录
-印著称
-印著者
-印著述
-压着
-压著书
-压著作
-压著名
-压著录
-压著称
-压著者
-压著述
-去着
-去著书
-去著作
-去著名
-去著录
-去著称
-去著者
-去著述
-受着
-受著书
-受著作
-受著名
-受著录
-受著称
-受著者
-受著述
-变着
-变著书
-变著作
-变著名
-变著录
-变著称
-变著者
-变著述
-叫着
-叫著书
-叫著作
-叫著名
-叫著录
-叫著称
-叫著者
-叫著述
-向着
-向著书
-向著作
-向著名
-向著录
-向著称
-向著者
-向著述
-含着
-含著书
-含著作
-含著名
-含著录
-含著称
-含著者
-含著述
-听得着
-听不着
-听着
-听著书
-听著作
-听著名
-听著录
-听著称
-听著者
-听著述
-吹着
-吹著书
-吹著作
-吹著名
-吹著录
-吹著称
-吹著者
-吹著述
-味着
-味著书
-味著作
-味著名
-味著录
-味著称
-味著者
-味著述
-响着
-响著书
-响著作
-响著名
-响著录
-响著称
-响著者
-响著述
-哭着
-哭著书
-哭著作
-哭著名
-哭著录
-哭著称
-哭著者
-哭著述
-唱着
-唱著书
-唱著作
-唱著名
-唱著录
-唱著称
-唱著者
-唱著述
-喝着
-喝著书
-喝著作
-喝著名
-喝著录
-喝著称
-喝著者
-喝著述
-嚷着
-嚷著书
-嚷著作
-嚷著名
-嚷著录
-嚷著称
-嚷著者
-嚷著述
-因着
-因著书
-因著作
-因著名
-因著录
-因著称
-因著者
-因著述
-困着
-困著书
-困著作
-困著名
-困著录
-困著称
-困著者
-困著述
-围着
-围著书
-围著作
-围著名
-围著录
-围著称
-围著者
-围著述
-在着
-在著书
-在著作
-在著名
-在著录
-在著称
-在著者
-在著述
-坐着
-坐著书
-坐著作
-坐著名
-坐著录
-坐著称
-坐著者
-坐著述
-备着
-备著书
-备著作
-备著名
-备著录
-备著称
-备著者
-备著述
-夹着
-夹著书
-夹著作
-夹著名
-夹著录
-夹著称
-夹著者
-夹著述
-孤着
-孤著书
-孤著作
-孤著名
-孤著录
-孤著称
-孤著者
-孤著述
-学着
-学著书
-学著作
-学著名
-学著录
-学著称
-学著者
-学著述
-守着
-守著书
-守著作
-守著名
-守著录
-守著称
-守著者
-守著述
-定着
-定著书
-定著作
-定著名
-定著录
-定著称
-定著者
-定著述
-对着
-对著书
-对著作
-对著名
-对著录
-对著称
-对著者
-对著述
-寻着
-寻著书
-寻著作
-寻著名
-寻著录
-寻著称
-寻著者
-寻著述
-展着
-展著书
-展著作
-展著名
-展著录
-展著称
-展著者
-展著述
-带着
-带著书
-带著作
-带著名
-带著录
-带著称
-带著者
-带著述
-帮着
-帮著书
-帮著作
-帮著名
-帮著录
-帮著称
-帮著者
-帮著述
-应着
-应著书
-应著作
-应著名
-应著录
-应著称
-应著者
-应著述
-康着
-康著书
-康著作
-康著名
-康著录
-康著称
-康著者
-康著述
-开着
-开著书
-开著作
-开著名
-开著录
-开著称
-开著者
-开著述
-当着
-当著书
-当著作
-当著名
-当著录
-当著称
-当著者
-当著述
-待着
-待著书
-待著作
-待著名
-待著录
-待著称
-待著者
-待著述
-得着
-得著书
-得著作
-得著名
-得著录
-得著称
-得著者
-得著述
-循着
-循著书
-循著作
-循著名
-循著录
-循著称
-循著者
-循著述
-心着
-心著书
-心著作
-心著名
-心著录
-心著称
-心著者
-心著述
-忍着
-忍著书
-忍著作
-忍著名
-忍著录
-忍著称
-忍著者
-忍著述
-志着
-志著书
-志著作
-志著名
-志著录
-志著称
-志著者
-志著述
-忙着
-忙著书
-忙著作
-忙著名
-忙著录
-忙著称
-忙著者
-忙著述
-怀着
-怀著书
-怀著作
-怀著名
-怀著录
-怀著称
-怀著者
-怀著述
-急着
-急著书
-急著作
-急著名
-急著录
-急著称
-急著者
-急著述
-性着
-性著书
-性著作
-性著名
-性著录
-性著称
-性著者
-性著述
-恋着
-恋著书
-恋著作
-恋著名
-恋著录
-恋著称
-恋著者
-恋著述
-悠着
-悠著书
-悠著作
-悠著名
-悠著录
-悠著称
-悠著者
-悠著述
-惯着
-惯著书
-惯著作
-惯著名
-惯著录
-惯著称
-惯著者
-惯著述
-想着
-想著书
-想著作
-想著名
-想著录
-想著称
-想著者
-想著述
-战着
-战著书
-战著作
-战著名
-战著录
-战著称
-战著者
-战著述
-戴着
-戴著书
-戴著作
-戴著名
-戴著录
-戴著称
-戴著者
-戴著述
-扎着
-扎著书
-扎著作
-扎著名
-扎著录
-扎著称
-扎著者
-扎著述
-打着
-打著书
-打著作
-打著名
-打著录
-打著称
-打著者
-打著述
-扛着
-扛著书
-扛著作
-扛著名
-扛著录
-扛著称
-扛著者
-扛著述
-找得着
-找不着
-抓着
-抓著作
-抓著名
-抓著录
-抓著称
-抓著者
-抓著述
-披着
-披著书
-披著作
-披著名
-披著录
-披著称
-披著者
-披著述
-抬着
-抬著作
-抬著名
-抬著录
-抬著称
-抬著者
-抬著述
-抱着
-抱著作
-抱著名
-抱著录
-抱著称
-抱著者
-抱著述
-拉着
-拉著书
-拉著作
-拉著名
-拉著录
-拉著称
-拉著者
-拉著述
-拎着
-拎著作
-拎著名
-拎著录
-拎著称
-拎著者
-拎著述
-拖着
-拖著作
-拖著名
-拖著录
-拖著称
-拖著者
-拖著述
-拼着
-拼著作
-拼著名
-拼著录
-拼著称
-拼著者
-拼著述
-拿着
-拿著作
-拿著名
-拿著录
-拿著称
-拿著者
-拿著述
-持着
-持著作
-持著名
-持著录
-持著称
-持著者
-持著述
-挑着
-挑著作
-挑著名
-挑著录
-挑著称
-挑著者
-挑著述
-挡着
-挡著作
-挡著名
-挡著录
-挡著称
-挡著者
-挡著述
-挣着
-挣著书
-挣著作
-挣著名
-挣著录
-挣著称
-挣著者
-挣著述
-挥着
-挥著作
-挥著名
-挥著录
-挥著称
-挥著者
-挥著述
-挨着
-挨著作
-挨著名
-挨著录
-挨著称
-挨著者
-挨著述
-捆着
-捆著作
-捆著名
-捆著录
-捆著称
-捆著者
-捆著述
-据着
-据著书
-据著作
-据著名
-据著录
-据著称
-据著者
-据著述
-掖着
-掖著作
-掖著名
-掖著录
-掖著称
-掖著者
-掖著述
-接着
-接著作
-接著名
-接著录
-接著称
-接著者
-接著述
-揉着
-揉著书
-揉著作
-揉著名
-揉著录
-揉著称
-揉著者
-揉著述
-提着
-提著作
-提著名
-提著录
-提著称
-提著者
-提著述
-搂着
-搂著作
-搂著名
-搂著录
-搂著称
-搂著者
-搂著述
-摆着
-摆著作
-摆著名
-摆著录
-摆著称
-摆著者
-摆著述
-撼着
-撼著书
-撼著作
-撼著名
-撼著录
-撼著称
-撼著者
-撼著述
-敞着
-敞著作
-敞著名
-敞著录
-敞著称
-敞著者
-敞著述
-数着
-数著作
-数著名
-数著录
-数著称
-数著者
-数著述
-斗着
-斗著书
-斗著作
-斗著名
-斗著录
-斗著称
-斗著者
-斗著述
-斥着
-斥著书
-斥著作
-斥著名
-斥著录
-斥著称
-斥著者
-斥著述
-昂着
-昂著书
-昂著作
-昂著名
-昂著录
-昂著称
-昂著者
-昂著述
-映着
-映著书
-映著作
-映著名
-映著录
-映著称
-映著者
-映著述
-晃着
-晃著作
-晃著名
-晃著录
-晃著称
-晃著者
-晃著述
-暗着
-暗著书
-暗著作
-暗著名
-暗著录
-暗著称
-暗著者
-暗著述
-有着
-有著书
-有著作
-有著名
-有著录
-有著称
-有著者
-有著述
-望着
-望著作
-望著名
-望著录
-望著称
-望著者
-望著述
-朝着
-朝著作
-朝著名
-朝著录
-朝著称
-朝著者
-朝著述
-本着
-本著书
-本著作
-本著名
-本著录
-本著称
-本著者
-本著述
-杀着
-杀著书
-杀著作
-杀著名
-杀著录
-杀著称
-杀著者
-杀著述
-杂着
-杂著书
-杂著作
-杂著名
-杂著录
-杂著称
-杂著者
-杂著述
-来着
-来著书
-来著作
-来著名
-来著录
-来著称
-来著者
-来著述
-枕着
-枕著作
-枕著名
-枕著录
-枕著称
-枕著者
-枕著述
-梦着
-梦著书
-梦著作
-梦著名
-梦著录
-梦著称
-梦著者
-梦著述
-梳着
-梳著作
-梳著名
-梳著录
-梳著称
-梳著者
-梳著述
-求着
-求著书
-求著作
-求著名
-求著录
-求著称
-求著者
-求著述
-沉着
-沉著书
-沉著作
-沉著名
-沉著录
-沉著称
-沉著者
-沉著述
-沿着
-沿著书
-沿著作
-沿著名
-沿著录
-沿著称
-沿著者
-沿著述
-活着
-活著书
-活著作
-活著名
-活著录
-活著称
-活著者
-活著述
-流着
-流著书
-流著作
-流著名
-流著录
-流著称
-流著者
-流著述
-浮着
-浮著书
-浮著作
-浮著名
-浮著录
-浮著称
-浮著者
-浮著述
-润着
-润著书
-润著作
-润著名
-润著录
-润著称
-润著者
-润著述
-涵着
-涵著书
-涵著作
-涵著名
-涵著录
-涵著称
-涵著者
-涵著述
-渴着
-渴著书
-渴著作
-渴著名
-渴著录
-渴著称
-渴著者
-渴著述
-溢着
-溢著书
-溢著作
-溢著名
-溢著录
-溢著称
-溢著者
-溢著述
-演着
-演著书
-演著作
-演著名
-演著录
-演著称
-演著者
-演著述
-漫着
-漫著书
-漫著作
-漫著名
-漫著录
-漫著称
-漫著者
-漫著述
-点着
-点著作
-点著名
-点著录
-点著称
-点著者
-点著述
-烧着
-烧著作
-烧著名
-烧著录
-烧著称
-烧著者
-烧著述
-照着
-照著书
-照著作
-照著名
-照著录
-照著称
-照著者
-照著述
-爱着
-爱著书
-爱著作
-爱著名
-爱著录
-爱著称
-爱著者
-爱著述
-牵着
-牵著书
-牵著作
-牵著名
-牵著录
-牵著称
-牵著者
-牵著述
-犯得着
-犯不着
-独着
-独著书
-独著作
-独著名
-独著录
-独著称
-独著者
-独著述
-猜着
-猜着书
-猜著作
-猜著名
-猜著录
-猜著称
-猜著者
-猜著述
-甜着
-甜著书
-甜著作
-甜著名
-甜著录
-甜著称
-甜著者
-甜著述
-用得着
-用不着
-用着
-用著书
-用著作
-用著名
-用著录
-用著称
-用著者
-用著述
-留着
-留着书
-留著作
-留著名
-留著录
-留著称
-留著者
-留著述
-疑着
-疑著书
-疑著作
-疑著名
-疑著录
-疑著称
-疑著者
-疑著述
-皱着
-皱著书
-皱著作
-皱著名
-皱著录
-皱著称
-皱著者
-皱著述
-盛着
-盛著书
-盛著作
-盛著名
-盛著录
-盛著称
-盛著者
-盛著述
-盯着
-盯着书
-盯著作
-盯著名
-盯著录
-盯著称
-盯著者
-盯著述
-盾着
-盾著书
-盾著作
-盾著名
-盾著录
-盾著称
-盾著者
-盾著述
-看得着
-看不着
-看着
-看着书
-看著作
-看著名
-看著录
-看著称
-看著者
-看著述
-瞧着
-瞧着书
-瞧著作
-瞧著名
-瞧著录
-瞧著称
-瞧著者
-瞧著述
-着业
-着丝
-着么
-着人
-着什么急
-着他
-着令
-着位
-着体
-着你
-着便
-着凉
-着力
-着劲
-着号
-着呢
-着哩
-着地
-着墨
-着声
-着处
-着她
-着妳
-着姓
-着它
-着定
-着实
-着己
-着帐
-着床
-着庸
-着式
-着录
-着心
-着志
-着忙
-着急
-着恼
-着惊
-着想
-着意
-着慌
-着我
-着手
-着抹
-着摸
-着撰
-着数
-着明
-着末
-着极
-着格
-着棋
-着槁
-着气
-着法
-着浅
-着火
-着然
-着甚
-着生
-着疑
-着白
-着相
-着眼
-着着
-着祂
-着积
-着稿
-着笔
-着籍
-着紧
-着緑
-着绊
-着绩
-着绯
-着绿
-着肉
-着脚
-着舰
-着色
-着节
-着花
-着莫
-着落
-着藁
-着衣
-着装
-着要
-着警
-着趣
-着边
-着迷
-着迹
-着重
-着録
-着闻
-着陆
-着雝
-着鞭
-着题
-着魔
-睡得着
-睡不着
-睡着
-睡著书
-睡著作
-睡著名
-睡著录
-睡著称
-睡著者
-睡著述
-瞒着
-瞒著书
-瞒著作
-瞒著名
-瞒著录
-瞒著称
-瞒著者
-瞒著述
-瞪着
-瞪著书
-瞪著作
-瞪著名
-瞪著录
-瞪著称
-瞪著者
-瞪著述
-福着
-福著书
-福著作
-福著名
-福著录
-福著称
-福著者
-福著述
-空着
-空著书
-空著作
-空著名
-空著录
-空著称
-空著者
-空著述
-穿着
-穿著书
-穿著作
-穿著名
-穿著录
-穿著称
-穿著者
-穿著述
-竖着
-竖著书
-竖著作
-竖著名
-竖著录
-竖著称
-竖著者
-竖著述
-站着
-站著书
-站著作
-站著名
-站著录
-站著称
-站著者
-站著述
-笑着
-笑著书
-笑著作
-笑著名
-笑著录
-笑著称
-笑著者
-笑著述
-管着
-管著书
-管著作
-管著名
-管著录
-管著称
-管著者
-管著述
-绑着
-绑著书
-绑著作
-绑著名
-绑著录
-绑著称
-绑著者
-绑著述
-绕着
-绕著书
-绕著作
-绕著名
-绕著录
-绕著称
-绕著者
-绕著述
-缠着
-缠著书
-缠著作
-缠著名
-缠著录
-缠著称
-缠著者
-缠著述
-罩着
-罩著书
-罩著作
-罩著名
-罩著录
-罩著称
-罩著者
-罩著述
-美着
-美著书
-美著作
-美著名
-美著录
-美著称
-美著者
-美著述
-耀着
-耀著书
-耀著作
-耀著名
-耀著录
-耀著称
-耀著者
-耀著述
-考着
-考著书
-考著作
-考著名
-考著录
-考著称
-考著者
-考著述
-背着
-背著书
-背著作
-背著名
-背著录
-背著称
-背著者
-背著述
-胶着
-胶著书
-胶著作
-胶著名
-胶著录
-胶著称
-胶著者
-胶著述
-艺着
-艺著书
-艺著作
-艺著名
-艺著录
-艺著称
-艺著者
-艺著述
-苦着
-苦著书
-苦著作
-苦著名
-苦著录
-苦著称
-苦著者
-苦著述
-获着
-获著书
-获著作
-获著名
-获著录
-获著称
-获著者
-获著述
-落着
-落著书
-落著作
-落著名
-落著录
-落著称
-落著者
-落著述
-蒙着
-蒙著书
-蒙著作
-蒙著名
-蒙著录
-蒙著称
-蒙著者
-蒙著述
-藏着
-藏著书
-藏著作
-藏著名
-藏著录
-藏著称
-藏著者
-藏著述
-蘸着
-蘸著书
-蘸著作
-蘸著名
-蘸著录
-蘸著称
-蘸著者
-蘸著述
-行着
-行著书
-行著作
-行著名
-行著录
-行著称
-行著者
-行著述
-衣着
-衣著书
-衣著作
-衣著名
-衣著录
-衣著称
-衣著者
-衣著述
-装着
-装著书
-装著作
-装著名
-装著录
-装著称
-装著者
-装著述
-裹着
-裹著书
-裹著作
-裹著名
-裹著录
-裹著称
-裹著者
-裹著述
-见着
-见著书
-见著作
-见著名
-见著录
-见著称
-见著者
-见著述
-记着
-记著书
-记著作
-记著名
-记著录
-记著称
-记著者
-记著述
-试着
-试著书
-试著作
-试著名
-试著录
-试著称
-试著者
-试著述
-语着
-语著书
-语著作
-语著名
-语著录
-语著称
-语著者
-语著述
-豫着
-豫著书
-豫著作
-豫著名
-豫著录
-豫著称
-豫著者
-豫著述
-贞着
-贞著书
-贞著作
-贞著名
-贞著录
-贞著称
-贞著者
-贞著述
-走着
-走著书
-走著作
-走著名
-走著录
-走著称
-走著者
-走著述
-赶着
-赶著书
-赶著作
-赶著名
-赶著录
-赶著称
-赶著者
-赶著述
-趴着
-趴著书
-趴著作
-趴著名
-趴著录
-趴著称
-趴著者
-趴著述
-跃着
-跃著书
-跃著作
-跃著名
-跃著录
-跃著称
-跃著者
-跃著述
-跑着
-跑著书
-跑著作
-跑著名
-跑著录
-跑著称
-跑著者
-跑著述
-跟着
-跟著书
-跟著作
-跟著名
-跟著录
-跟著称
-跟著者
-跟著述
-跪着
-跪著书
-跪著作
-跪著名
-跪著录
-跪著称
-跪著者
-跪著述
-跳着
-跳著书
-跳著作
-跳著名
-跳著录
-跳著称
-跳著者
-跳著述
-踏着
-踏著书
-踏著作
-踏著名
-踏著录
-踏著称
-踏著者
-踏著述
-踩着
-踩著书
-踩著作
-踩著名
-踩著录
-踩著称
-踩著者
-踩著述
-身着
-身著书
-身著作
-身著名
-身著录
-身著称
-身著者
-身著述
-躺着
-躺著书
-躺著作
-躺著名
-躺著录
-躺著称
-躺著者
-躺著述
-转着
-转著书
-转著作
-转著名
-转著录
-转著称
-转著者
-转著述
-载着
-载著书
-载著作
-载著名
-载著录
-载著称
-载著者
-载著述
-达着
-达著书
-达著作
-达著名
-达著录
-达著称
-达著者
-达著述
-远着
-远著书
-远著作
-远著名
-远著录
-远著称
-远著者
-远著述
-连着
-连著书
-连著作
-连著名
-连著录
-连著称
-连著者
-连著述
-追着
-追著书
-追著作
-追著名
-追著录
-追著称
-追著者
-追著述
-逆着
-逆著书
-逆著作
-逆著名
-逆著录
-逆著称
-逆著者
-逆著述
-逼着
-逼著书
-逼著作
-逼著名
-逼著录
-逼著称
-逼著者
-逼著述
-遇着
-遇著书
-遇著作
-遇著名
-遇著录
-遇著称
-遇著者
-遇著述
-配着
-配著书
-配著作
-配著名
-配著录
-配著称
-配著者
-配著述
-酿着
-酿著书
-酿著作
-酿著名
-酿著录
-酿著称
-酿著者
-酿著述
-铺着
-铺著书
-铺著作
-铺著名
-铺著录
-铺著称
-铺著者
-铺著述
-闭着
-闭著书
-闭著作
-闭著名
-闭著录
-闭著称
-闭著者
-闭著述
-闲着
-闲著书
-闲著作
-闲著名
-闲著录
-闲著称
-闲著者
-闲著述
-附着
-附著书
-附著作
-附著名
-附著录
-附著称
-附著者
-附著述
-陋着
-陋著书
-陋著作
-陋著名
-陋著录
-陋著称
-陋著者
-陋著述
-陪着
-陪著书
-陪著作
-陪著名
-陪著录
-陪著称
-陪著者
-陪著述
-随着
-随著书
-随著作
-随著名
-随著录
-随著称
-随著者
-随著述
-隔着
-隔著书
-隔著作
-隔著名
-隔著录
-隔著称
-隔著者
-隔著述
-雅着
-雅著书
-雅著作
-雅著名
-雅著录
-雅著称
-雅著者
-雅著述
-顶着
-顶著书
-顶著作
-顶著名
-顶著录
-顶著称
-顶著者
-顶著述
-顺着
-顺著书
-顺著作
-顺著名
-顺著录
-顺著称
-顺著者
-顺著述
-领着
-领著书
-领著作
-领著名
-领著录
-领著称
-领著者
-领著述
-飘着
-飘著书
-飘著作
-飘著名
-飘著录
-飘著称
-飘著者
-飘著述
-驾着
-驾著书
-驾著作
-驾著名
-驾著录
-驾著称
-驾著者
-驾著述
-骂着
-骂著书
-骂著作
-骂著名
-骂著录
-骂著称
-骂著者
-骂著述
-骑着
-骑著书
-骑著作
-骑著名
-骑著录
-骑著称
-骑著者
-骑著述
-骗着
-骗著书
-骗著作
-骗著名
-骗著录
-骗著称
-骗著者
-骗著述
-高着
-高著书
-高著作
-高著名
-高著录
-高著称
-高著者
-高著述
-髭着
-髭著书
-髭著作
-髭著名
-髭著录
-髭著称
-髭著者
-髭著述
-黏着
-黏著书
-黏著作
-黏著名
-黏著录
-黏著称
-黏著者
-黏著述
-新著龙虎门
-护着
-护著书
-护著作
-护著名
-护著录
-护著称
-护著者
-护著述
-保护着
-爱护着
-庇护着
-传着
-传著书
-传著作
-传著名
-传著录
-传著称
-传著者
-传著述
-标志着
-流露着
-靠着
-靠著作
-靠著名
-靠著录
-靠著称
-靠著者
-靠著述
-玩着
-迫着
-吃得着
-吃不着
-吃着
-闻得着
-闻不着
-闻着
-嗅得着
-嗅不着
-嗅着
-警戒着
-於乎
-於戏
-魏徵
-柳诒徵
-於姓
-於氏
-於夫罗
-於梨华
-卷舌
-樊於期
-於菟
-於潜县
-石碁镇
-因著《
-因著〈
-李泽钜
-於祥玉
-於崇文
-於世成
-於乙宇同
-於宇同
-朴於宇同
-於哲
-於除鞬
-於志贺
-覆蓋
-五箇山
-麽麽
-幺厮
-幺半群
-幺元
-幺爹
-幺叔
-幺舅
-幺爸
-幺妈
-幺姨
-幺娘
-幺妹
-幺小
-幺姓
-姓幺
-幺氏
-麽氏
-幺蛾子
-幺麽
-幺麽小丑
-幺凤
-幺二三
-幺篇
-幺谦
-麴义
-麴英
-麯崇裕
-阿部正瞭
-醯酱
-醯鸡
-醯醋
-醯醢
-醯壶
-苧烯
-近角聪信
-米泽瑠美
-峯岸南
-僧伽吒
-王道乾
-後姓
diff --git a/includes/zhtable/simpphrases_exclude.manual b/includes/zhtable/simpphrases_exclude.manual
deleted file mode 100644 (file)
index 3e9d3ec..0000000
+++ /dev/null
@@ -1,21 +0,0 @@
-整飭
-後
-谘
-彷佛
-三番四复
-三复
-藉
-关於
-对於
-属於
-至於
-夥计
-薹
-嚇
-醣
-捱
-簑
-樑
-摺叠
-餗
-安甯
\ No newline at end of file
diff --git a/includes/zhtable/toCN.manual b/includes/zhtable/toCN.manual
deleted file mode 100644 (file)
index 243f61b..0000000
+++ /dev/null
@@ -1,275 +0,0 @@
-」    ”
-「    “
-『    ‘
-』    ’
-記憶體      内存
-預設 默认
-串列 串行
-串列加速器        串列加速器
-乙太網      以太网
-點陣圖      位图
-常式 例程
-光碟 光盘
-光碟機      光驱
-全形 全角
-載入 加载
-半形 半角
-變數 变量
-雜訊 噪声
-因數 因子
-功能變數名稱     域名
-音效卡      声卡
-字型大小   字号
-字型檔      字库
-欄位 字段
-字元 字符
-字元济      字元济
-字元濟      字元济
-字元会      字元会
-字元會      字元会
-存檔 存盘
-定址 寻址
-章節附註   尾注
-非同步      异步
-匯流排      总线
-括弧 括号
-介面 接口
-控制項      控件
-許可權      权限
-碟片 盘片
-矽片 硅片
-矽谷 硅谷
-硬碟 硬盘
-磁碟 磁盘
-磁軌 磁道
-程式控制   程控
-遠程控制   远程控制
-远程控制   远程控制
-運算元      算子
-演算法      算法
-晶片 芯片
-晶元 芯片
-片語 词组
-軟碟機      软驱
-快閃記憶體        快闪存储器
-滑鼠 鼠标
-滑鼠蛇      滑鼠蛇
-二進位      二进制
-滿二進位   满二进位
-六進位      六进制
-滿六進位   满六进位
-滿十六進位        满十六进位
-八進位      八进制
-滿八進位   满八进位
-十進位      十进制
-滿十進位   满十进位
-16進位       16进位
-滿16進位    满16进位
-二進位制   二进位制
-六進位制   六进位制
-八進位制   八进位制
-十進位制   十进位制
-16進位制    16进位制
-互動式      交互式
-優先順序   优先级
-感測 传感
-攜帶型      便携式
-資訊理論   信息论
-迴圈 循环
-防寫 写保护
-解析度      分辨率
-伺服器      服务器
-等於 等于
-區域網      局域网
-巨集 宏
-掃瞄器      扫瞄仪
-寬頻 宽带
-資料庫      数据库
-萬曆 万历
-永曆 永历
-辭彙 词汇
-母音 元音
-字母 字母
-頭槌 头球
-進球 入球
-顆進球      粒入球
-射門 打门
-蓋火鍋      火锅盖帽
-印表機      打印机
-打印機      打印机
-位元組      字节
-字節 字节
-列印 打印
-打印 打印
-硬體 硬件
-二極體      二极管
-二極管      二极管
-三極體      三极管
-三極管      三极管
-軟體 软件
-軟件 软件
-網路 网络
-網絡 网络
-人工智慧   人工智能
-太空梭      航天飞机
-穿梭機      航天飞机
-網際網路   互联网
-互聯網      互联网
-機械人      机器人
-機器人      机器人
-行動電話   移动电话
-流動電話   移动电话
-調制解調器        调制解调器
-數據機      调制解调器
-短訊 短信
-簡訊 短信
-烏茲別克   乌兹别克斯坦
-葉門 也门
-伯利茲      伯利兹
-貝里斯      伯利兹
-維德角      佛得角
-克羅埃西亞        克罗地亚
-甘比亞      冈比亚
-幾內亞比索        几内亚比绍
-列支敦斯登        列支敦士登
-賴比瑞亞   利比里亚
-迦納 加纳
-加彭 加蓬
-波札那      博茨瓦纳
-盧安達      卢旺达
-瓜地馬拉   危地马拉
-厄瓜多爾   厄瓜多尔
-厄瓜多尔   厄瓜多尔
-厄瓜多      厄瓜多尔
-厄利垂亞   厄立特里亚
-吉布地      吉布提
-哈薩克      哈萨克斯坦
-哥斯大黎加        哥斯达黎加
-吐瓦魯      图瓦卢
-土庫曼      土库曼斯坦
-聖露西亞   圣卢西亚
-聖吉斯納域斯     圣基茨和尼维斯
-聖克里斯多福及尼維斯 圣基茨和尼维斯
-聖文森及格瑞那丁       圣文森特和格林纳丁斯
-聖馬利諾   圣马力诺
-蓋亞那      圭亚那
-坦尚尼亞   坦桑尼亚
-衣索匹亞   埃塞俄比亚
-衣索比亞   埃塞俄比亚
-吉里巴斯   基里巴斯
-塔吉克      塔吉克斯坦
-塞拉利昂   塞拉利昂
-塞普勒斯   塞浦路斯
-塞席爾      塞舌尔
-多米尼克   多米尼加国
-安地卡及巴布達  安提瓜和巴布达
-尼日利亞   尼日利亚
-尼日利亚   尼日利亚
-奈及利亞   尼日利亚
-尼日爾      尼日尔
-尼日尔      尼日尔
-巴貝多      巴巴多斯
-巴布亞紐幾內亞  巴布亚新几内亚
-布基納法索        布基纳法索
-布吉納法索        布基纳法索
-蒲隆地      布隆迪
-帛琉 帕劳
-義大利      意大利
-索羅門群島        所罗门群岛
-汶萊 文莱
-史瓦濟蘭   斯威士兰
-斯洛維尼亞        斯洛文尼亚
-紐西蘭      新西兰
-格瑞那達   格林纳达
-茅利塔尼亞        毛里塔尼亚
-毛里裘斯   毛里求斯
-模里西斯   毛里求斯
-沙地阿拉伯        沙特阿拉伯
-沙烏地阿拉伯     沙特阿拉伯
-波士尼亞赫塞哥維納    波斯尼亚和黑塞哥维那
-辛巴威      津巴布韦
-宏都拉斯   洪都拉斯
-千里達托貝哥     特立尼达和托巴哥
-諾魯 瑙鲁
-萬那杜      瓦努阿图
-溫納圖      瓦努阿图
-葛摩 科摩罗
-象牙海岸   科特迪瓦
-突尼西亞   突尼斯
-索馬利亞   索马里
-寮國 老挝
-肯雅 肯尼亚
-肯亞 肯尼亚
-蘇利南      苏里南
-莫三比克   莫桑比克
-賴索托      莱索托
-貝南 贝宁
-尚比亞      赞比亚
-亞塞拜然   阿塞拜疆
-阿拉伯聯合大公國       阿拉伯联合酋长国
-南韓 韩国
-馬爾地夫   马尔代夫
-馬爾他      马耳他
-馬利共和國        马里共和国
-即食麵      方便面
-快速面      方便面
-速食麵      方便面
-泡麵 方便面
-笨豬跳      蹦极跳
-绑紧跳      蹦极跳
-冷盤 凉菜
-冷菜 凉菜
-散钱 零钱
-谐星 笑星
-夜学 夜校
-华乐 民乐
-中樂 民乐
-軍中樂園    军中乐园
-华乐街      华乐街
-屋价 房价
-計程車      出租车
-單車 自行车
-節慶 节日
-芝士 乾酪
-狗隻 犬只
-士多啤梨   草莓
-忌廉 奶油
-桌球 台球
-撞球 台球
-衞生 卫生
-衛生 卫生
-賓士 奔驰
-平治 奔驰
-平治之亂   平治之乱
-平治之乱   平治之乱
-積架 捷豹
-福斯 大众
-福士 大众
-萬事得      马自达
-寶獅 标志
-拿破崙      拿破仑
-布殊 布什
-布希 布什
-布希亞      布希亚
-布希亚      布希亚
-柯林頓      克林顿
-海珊 侯赛因
-梵谷 凡高
-大衛碧咸   大卫·贝克汉姆
-米高奧雲   迈克尔·欧文
-卡佩雅蒂   珍妮弗·卡普里亚蒂
-沙芬 马拉特·萨芬
-舒麥加      迈克尔·舒马赫
-希特拉      希特勒
-黛安娜      戴安娜
-榴槤 榴莲
-榴梿 榴莲
-矽    硅
-矽肺 矽肺
-矽塵 矽尘
-矽尘 矽尘
-矽鋼 矽钢
-矽钢 矽钢
-侏儸紀      侏罗纪
-甚麽 什么
-甚麼 什么
diff --git a/includes/zhtable/toHK.manual b/includes/zhtable/toHK.manual
deleted file mode 100644 (file)
index 1f7fe7d..0000000
+++ /dev/null
@@ -1,2300 +0,0 @@
-”    」
-“    「
-‘    『
-’    』
-鉤    鈎
-衛    衞
-凶殺 兇殺
-凶殘 兇殘
-緝凶 緝兇
-買凶 買兇
-印表機      打印機
-字节 位元組
-字節 位元組
-列印 打印
-硬件 硬件
-硬體 硬件
-二極體      二極管
-三極體      三極管
-軟體 軟件
-網路 網絡
-人工智慧   人工智能
-航天飞机   穿梭機
-太空梭      穿梭機
-因特网      互聯網
-網際網路   互聯網
-机器人      機械人
-機器人      機械人
-移动电话   流動電話
-行動電話   流動電話
-數據機      調制解調器
-短信 短訊
-簡訊 短訊
-查德 乍得
-葉門 也門
-貝里斯      伯利茲
-維德角      佛得角
-克羅埃西亞        克羅地亞
-甘比亞      岡比亞
-幾內亞比索        幾內亞比紹
-列支敦斯登        列支敦士登
-賴比瑞亞   利比里亞
-迦納 加納
-加彭 加蓬
-波札那      博茨瓦納
-盧安達      盧旺達
-瓜地馬拉   危地馬拉
-厄瓜多尔   厄瓜多爾
-厄瓜多爾   厄瓜多爾
-厄瓜多      厄瓜多爾
-厄利垂亞   厄立特里亞
-吉布地      吉布堤
-哥斯大黎加        哥斯達黎加
-吐瓦魯      圖瓦盧
-聖露西亞   聖盧西亞
-圣基茨和尼维斯  聖吉斯納域斯
-聖克里斯多福及尼維斯 聖吉斯納域斯
-聖文森及格瑞那丁       聖文森特和格林納丁斯
-聖馬利諾   聖馬力諾
-蓋亞那      圭亞那
-坦尚尼亞   坦桑尼亞
-衣索匹亞   埃塞俄比亞
-衣索比亞   埃塞俄比亞
-吉里巴斯   基里巴斯
-塞普勒斯   塞浦路斯
-塞席爾      塞舌爾
-安地卡及巴布達  安提瓜和巴布達
-尼日利亚   尼日利亞
-尼日利亞   尼日利亞
-奈及利亞   尼日利亞
-尼日尔      尼日爾
-尼日爾      尼日爾
-尼日 尼日爾
-巴貝多      巴巴多斯
-巴布亞紐幾內亞  巴布亞新畿內亞
-布吉納法索        布基納法索
-蒲隆地      布隆迪
-帕劳 帛琉
-義大利      意大利
-索羅門群島        所羅門群島
-文莱 汶萊
-史瓦濟蘭   斯威士蘭
-斯洛維尼亞        斯洛文尼亞
-紐西蘭      新西蘭
-格瑞那達   格林納達
-茅利塔尼亞        毛里塔尼亞
-毛里求斯   毛里裘斯
-模里西斯   毛里裘斯
-沙地阿拉伯        沙特阿拉伯
-沙烏地阿拉伯     沙特阿拉伯
-波士尼亞赫塞哥維納    波斯尼亞黑塞哥維那
-辛巴威      津巴布韋
-宏都拉斯   洪都拉斯
-千里達托貝哥     特立尼達和多巴哥
-諾魯 瑙魯
-萬那杜      瓦努阿圖
-葛摩 科摩羅
-索馬利亞   索馬里
-寮國 老撾
-肯尼亚      肯雅
-肯亞 肯雅
-莫三比克   莫桑比克
-賴索托      萊索托
-貝南 貝寧
-尚比亞      贊比亞
-亞塞拜然   阿塞拜疆
-阿拉伯聯合大公國       阿拉伯聯合酋長國
-馬爾地夫   馬爾代夫
-馬利共和國        馬里共和國
-方便面      即食麵
-快速面      即食麵
-速食麵      即食麵
-泡麵 即食麵
-土豆 馬鈴薯
-土豆网      土豆網
-土豆網      土豆網
-华乐 中樂
-民乐 中樂
-計程車      的士
-出租车      的士
-公車 巴士
-公車上書   公車上書
-自行车      單車
-犬只 狗隻
-台球 桌球
-撞球 桌球
-冰淇淋      雪糕
-賓士 平治
-捷豹 積架
-福斯 福士
-雪铁龙      先進
-雪鐵龍      先進
-沃尓沃      富豪
-马自达      萬事得
-馬自達      萬事得
-寶獅 標致
-布什 布殊
-布希 布殊
-布希亞      布希亞
-布希亚      布希亞
-柯林頓      克林頓
-萨达姆      薩達姆
-海珊 侯賽因
-大卫·贝克汉姆   大衛碧咸
-迈克尔·欧文      米高奧雲
-珍妮弗·卡普里亚蒂     卡佩雅蒂
-马拉特·萨芬      沙芬
-迈克尔·舒马赫   舒麥加
-希特勒      希特拉
-狄安娜      戴安娜
-黛安娜      戴安娜
-颁布 頒佈
-頒布 頒佈
-挨著 挨着
-愛著 愛着
-暗著 暗着
-昂著 昂着
-擺著 擺着
-伴著 伴着
-辦著 辦着
-幫著 幫着
-綁著 綁着
-抱著 抱着
-背著 背着
-備著 備着
-本著 本着
-逼著 逼着
-閉著 閉着
-變著 變着
-猜著 猜着
-踩著 踩着
-藏著 藏着
-側著 側着
-纏著 纏着
-敞著 敞着
-唱著 唱着
-朝著 朝着
-沉著 沉着
-乘著 乘着
-持著 持着
-斥著 斥着
-醜著 醜着
-穿著 穿着
-吹著 吹着
-達著 達着
-打著 打着
-待著 待着
-帶著 帶着
-戴著 戴着
-當著 當着
-擋著 擋着
-得著 得着
-瞪著 瞪着
-低著 低着
-點著 點着
-盯著 盯着
-頂著 頂着
-定著 定着
-動著 動着
-鬥著 鬥着
-獨著 獨着
-對著 對着
-盾著 盾着
-犯得著      犯得着
-犯不著      犯不着
-福著 福着
-趕著 趕着
-高著 高着
-隔著 隔着
-跟著 跟着
-孤著 孤着
-關著 關着
-管著 管着
-慣著 慣着
-光著 光着
-跪著 跪着
-裹著 裹着
-撼著 撼着
-喝著 喝着
-候著 候着
-懷著 懷着
-晃著 晃着
-揮著 揮着
-活著 活着
-獲著 獲着
-獲著 獲着
-急著 急着
-記著 記着
-冀著 冀着
-夾著 夾着
-駕著 駕着
-見著 見着
-閑著 閑着
-叫著 叫着
-接著 接着
-借著 借着
-借著 借着
-據著 據着
-開著 開着
-看得著      看得着
-看不著      看不着
-看著 看着
-康著 康着
-扛著 扛着
-考著 考着
-渴著 渴着
-刻著 刻着
-空著 空着
-哭著 哭着
-苦著 苦着
-捆著 捆着
-困著 困着
-拉著 拉着
-來著 來着
-樂著 樂着
-努力著      努力着
-麗著 麗着
-連著 連着
-戀著 戀着
-涼著 涼着
-亮著 亮着
-臨著 臨着
-拎著 拎着
-領著 領着
-流著 流着
-留著 留着
-摟著 摟着
-陋著 陋着
-落著 落着
-罵著 罵着
-瞞著 瞞着
-漫著 漫着
-忙著 忙着
-冒著 冒着
-美著 美着
-夢著 夢着
-蒙著 蒙着
-拿著 拿着
-逆著 逆着
-釀著 釀着
-努著 努着
-趴著 趴着
-跑著 跑着
-陪著 陪着
-配著 配着
-披著 披着
-騙著 騙着
-飄著 飄着
-拼著 拼着
-鋪著 鋪着
-騎著 騎着
-牽著 牽着
-求著 求着
-去著 去着
-嚷著 嚷着
-繞著 繞着
-忍著 忍着
-揉著 揉着
-潤著 潤着
-燒著 燒着
-身著 身着
-沉著 沉着
-盛著 盛着
-試著 試着
-守著 守着
-受著 受着
-梳著 梳着
-豎著 豎着
-數著 數着
-睡得著      睡得着
-睡不著      睡不着
-睡著 睡着
-順著 順着
-隨著 隨着
-踏著 踏着
-抬著 抬着
-躺著 躺着
-提著 提着
-甜著 甜着
-挑著 挑着
-跳著 跳着
-聽得著      聽得着
-聽不著      聽不着
-聽著 聽着
-偷著 偷着
-拖著 拖着
-望著 望着
-圍著 圍着
-味著 味着
-想著 想着
-響著 響着
-向著 向着
-笑著 笑着
-心著 心着
-信著 信着
-行著 行着
-性著 性着
-學著 學着
-尋著 尋着
-循著 循着
-壓著 壓着
-雅著 雅着
-沿著 沿着
-耀著 耀着
-掖著 掖着
-衣著 衣着
-疑著 疑着
-溢著 溢着
-藝著 藝着
-因著 因着
-印著 印着
-應著 應着
-映著 映着
-用得著      用得着
-用不著      用不着
-用著 用着
-悠著 悠着
-有著 有着
-與著 與着
-語著 語着
-豫著 豫着
-遠著 遠着
-躍著 躍着
-雜著 雜着
-載著 載着
-在著 在着
-紮著 紮着
-展著 展着
-站著 站着
-戰著 戰着
-蘸著 蘸着
-仗著 仗着
-找得著      找得着
-找不著      找不着
-照著 照着
-罩著 罩着
-貞著 貞着
-枕著 枕着
-爭著 爭着
-掙著 掙着
-制著 制着
-志著 志着
-皺著 皺着
-住著 住着
-抓著 抓着
-轉著 轉着
-裝著 裝着
-追著 追着
-髭著 髭着
-走著 走着
-坐著 坐着
-做著 做着
-含著 含着
-涵著 涵着
-演著 演着
-保障著      保障着
-黏著 黏着
-膠著 膠着
-附著 附着
-代表著      代表着
-浮著 浮着
-寫著 寫着
-遇著 遇着
-殺著 殺着
-著筆 着筆
-著鞭 着鞭
-著法 着法
-著火 着火
-著急 着急
-著艦 着艦
-著腳 着腳
-著她 着她
-著緊 着緊
-著力 着力
-著涼 着涼
-著陸 着陸
-著錄 着錄
-著落 着落
-著忙 着忙
-著迷 着迷
-著墨 着墨
-著妳 着妳
-著你 着你
-著色 着色
-著什麼急   着什麼急
-著實 着實
-著手 着手
-著數 着數
-著絲 着絲
-著他 着他
-著它 着它
-著祂 着祂
-著我 着我
-著想 着想
-著眼 着眼
-著衣 着衣
-著意 着意
-著重 着重
-著重 着重
-著裝 着裝
-著地 着地
-不著邊際   不着邊際
-不著痕跡   不着痕跡
-挨著作      挨著作
-挨著者      挨著者
-挨著名      挨著名
-挨著述      挨著述
-挨著稱      挨著稱
-挨著錄      挨著錄
-愛著作      愛著作
-愛著者      愛著者
-愛著名      愛著名
-愛著述      愛著述
-愛著稱      愛著稱
-愛著錄      愛著錄
-愛著書      愛著書
-暗著作      暗著作
-暗著者      暗著者
-暗著名      暗著名
-暗著述      暗著述
-暗著稱      暗著稱
-暗著錄      暗著錄
-暗著書      暗著書
-昂著作      昂著作
-昂著者      昂著者
-昂著名      昂著名
-昂著述      昂著述
-昂著稱      昂著稱
-昂著錄      昂著錄
-昂著書      昂著書
-擺著作      擺著作
-擺著者      擺著者
-擺著名      擺著名
-擺著述      擺著述
-擺著稱      擺著稱
-擺著錄      擺著錄
-伴著作      伴著作
-伴著者      伴著者
-伴著名      伴著名
-伴著述      伴著述
-伴著稱      伴著稱
-伴著錄      伴著錄
-伴著書      伴著書
-辦著作      辦著作
-辦著者      辦著者
-辦著名      辦著名
-辦著述      辦著述
-辦著稱      辦著稱
-辦著錄      辦著錄
-辦著書      辦著書
-幫著作      幫著作
-幫著者      幫著者
-幫著名      幫著名
-幫著述      幫著述
-幫著稱      幫著稱
-幫著錄      幫著錄
-幫著書      幫著書
-綁著作      綁著作
-綁著者      綁著者
-綁著名      綁著名
-綁著述      綁著述
-綁著稱      綁著稱
-綁著錄      綁著錄
-綁著書      綁著書
-抱著作      抱著作
-抱著者      抱著者
-抱著名      抱著名
-抱著述      抱著述
-抱著稱      抱著稱
-抱著錄      抱著錄
-背著作      背著作
-背著者      背著者
-背著名      背著名
-背著述      背著述
-背著稱      背著稱
-背著錄      背著錄
-背著書      背著書
-備著作      備著作
-備著者      備著者
-備著名      備著名
-備著述      備著述
-備著稱      備著稱
-備著錄      備著錄
-備著書      備著書
-本著作      本著作
-本著者      本著者
-本著名      本著名
-本著述      本著述
-本著稱      本著稱
-本著錄      本著錄
-本著書      本著書
-逼著作      逼著作
-逼著者      逼著者
-逼著名      逼著名
-逼著述      逼著述
-逼著稱      逼著稱
-逼著錄      逼著錄
-逼著書      逼著書
-閉著作      閉著作
-閉著者      閉著者
-閉著名      閉著名
-閉著述      閉著述
-閉著稱      閉著稱
-閉著錄      閉著錄
-閉著書      閉著書
-變著作      變著作
-變著者      變著者
-變著名      變著名
-變著述      變著述
-變著稱      變著稱
-變著錄      變著錄
-變著書      變著書
-猜著作      猜著作
-猜著者      猜著者
-猜著名      猜著名
-猜著述      猜著述
-猜著稱      猜著稱
-猜著錄      猜著錄
-猜著書      猜著書
-踩著作      踩著作
-踩著者      踩著者
-踩著名      踩著名
-踩著述      踩著述
-踩著稱      踩著稱
-踩著錄      踩著錄
-踩著書      踩著書
-藏著作      藏著作
-藏著者      藏著者
-藏著名      藏著名
-藏著述      藏著述
-藏著稱      藏著稱
-藏著錄      藏著錄
-藏著書      藏著書
-側著作      側著作
-側著者      側著者
-側著名      側著名
-側著述      側著述
-側著稱      側著稱
-側著錄      側著錄
-側著書      側著書
-纏著作      纏著作
-纏著者      纏著者
-纏著名      纏著名
-纏著述      纏著述
-纏著稱      纏著稱
-纏著錄      纏著錄
-纏著書      纏著書
-敞著作      敞著作
-敞著者      敞著者
-敞著名      敞著名
-敞著述      敞著述
-敞著稱      敞著稱
-敞著錄      敞著錄
-唱著作      唱著作
-唱著者      唱著者
-唱著名      唱著名
-唱著述      唱著述
-唱著稱      唱著稱
-唱著錄      唱著錄
-唱著書      唱著書
-朝著作      朝著作
-朝著者      朝著者
-朝著名      朝著名
-朝著述      朝著述
-朝著稱      朝著稱
-朝著錄      朝著錄
-沉著作      沉著作
-沉著者      沉著者
-沉著名      沉著名
-沉著述      沉著述
-沉著稱      沉著稱
-沉著錄      沉著錄
-沉著書      沉著書
-乘著作      乘著作
-乘著者      乘著者
-乘著名      乘著名
-乘著述      乘著述
-乘著稱      乘著稱
-乘著錄      乘著錄
-乘著書      乘著書
-持著作      持著作
-持著者      持著者
-持著名      持著名
-持著述      持著述
-持著稱      持著稱
-持著錄      持著錄
-斥著作      斥著作
-斥著者      斥著者
-斥著名      斥著名
-斥著述      斥著述
-斥著稱      斥著稱
-斥著錄      斥著錄
-斥著書      斥著書
-醜著作      醜著作
-醜著者      醜著者
-醜著名      醜著名
-醜著述      醜著述
-醜著稱      醜著稱
-醜著錄      醜著錄
-醜著書      醜著書
-穿著作      穿著作
-穿著者      穿著者
-穿著名      穿著名
-穿著述      穿著述
-穿著稱      穿著稱
-穿著錄      穿著錄
-穿著書      穿著書
-吹著作      吹著作
-吹著者      吹著者
-吹著名      吹著名
-吹著述      吹著述
-吹著稱      吹著稱
-吹著錄      吹著錄
-吹著書      吹著書
-達著作      達著作
-達著者      達著者
-達著名      達著名
-達著述      達著述
-達著稱      達著稱
-達著錄      達著錄
-達著書      達著書
-打著作      打著作
-打著者      打著者
-打著名      打著名
-打著述      打著述
-打著稱      打著稱
-打著錄      打著錄
-打著書      打著書
-待著作      待著作
-待著者      待著者
-待著名      待著名
-待著述      待著述
-待著稱      待著稱
-待著錄      待著錄
-待著書      待著書
-帶著作      帶著作
-帶著者      帶著者
-帶著名      帶著名
-帶著述      帶著述
-帶著稱      帶著稱
-帶著錄      帶著錄
-帶著書      帶著書
-戴著作      戴著作
-戴著者      戴著者
-戴著名      戴著名
-戴著述      戴著述
-戴著稱      戴著稱
-戴著錄      戴著錄
-戴著書      戴著書
-當著作      當著作
-當著者      當著者
-當著名      當著名
-當著述      當著述
-當著稱      當著稱
-當著錄      當著錄
-當著書      當著書
-擋著作      擋著作
-擋著者      擋著者
-擋著名      擋著名
-擋著述      擋著述
-擋著稱      擋著稱
-擋著錄      擋著錄
-得著作      得著作
-得著者      得著者
-得著名      得著名
-得著述      得著述
-得著稱      得著稱
-得著錄      得著錄
-得著書      得著書
-瞪著作      瞪著作
-瞪著者      瞪著者
-瞪著名      瞪著名
-瞪著述      瞪著述
-瞪著稱      瞪著稱
-瞪著錄      瞪著錄
-瞪著書      瞪著書
-低著作      低著作
-低著者      低著者
-低著名      低著名
-低著述      低著述
-低著稱      低著稱
-低著錄      低著錄
-低著書      低著書
-點著作      點著作
-點著者      點著者
-點著名      點著名
-點著述      點著述
-點著稱      點著稱
-點著錄      點著錄
-點著書      點著書
-盯著作      盯著作
-盯著者      盯著者
-盯著名      盯著名
-盯著述      盯著述
-盯著稱      盯著稱
-盯著錄      盯著錄
-盯著書      盯著書
-頂著作      頂著作
-頂著者      頂著者
-頂著名      頂著名
-頂著述      頂著述
-頂著稱      頂著稱
-頂著錄      頂著錄
-頂著書      頂著書
-定著作      定著作
-定著者      定著者
-定著名      定著名
-定著述      定著述
-定著稱      定著稱
-定著錄      定著錄
-定著書      定著書
-動著作      動著作
-動著者      動著者
-動著名      動著名
-動著述      動著述
-動著稱      動著稱
-動著錄      動著錄
-動著書      動著書
-鬥著作      鬥著作
-鬥著者      鬥著者
-鬥著名      鬥著名
-鬥著述      鬥著述
-鬥著稱      鬥著稱
-鬥著錄      鬥著錄
-鬥著書      鬥著書
-獨著作      獨著作
-獨著者      獨著者
-獨著名      獨著名
-獨著述      獨著述
-獨著稱      獨著稱
-獨著錄      獨著錄
-獨著書      獨著書
-對著作      對著作
-對著者      對著者
-對著名      對著名
-對著述      對著述
-對著稱      對著稱
-對著錄      對著錄
-對著書      對著書
-盾著作      盾著作
-盾著者      盾著者
-盾著名      盾著名
-盾著述      盾著述
-盾著稱      盾著稱
-盾著錄      盾著錄
-盾著書      盾著書
-犯不著作   犯不著作
-犯不著者   犯不著者
-犯不著名   犯不著名
-犯不著述   犯不著述
-犯不著稱   犯不著稱
-犯不著錄   犯不著錄
-犯不著書   犯不著書
-福著作      福著作
-福著者      福著者
-福著名      福著名
-福著述      福著述
-福著稱      福著稱
-福著錄      福著錄
-福著書      福著書
-趕著作      趕著作
-趕著者      趕著者
-趕著名      趕著名
-趕著述      趕著述
-趕著稱      趕著稱
-趕著錄      趕著錄
-趕著書      趕著書
-高著作      高著作
-高著者      高著者
-高著名      高著名
-高著述      高著述
-高著稱      高著稱
-高著錄      高著錄
-高著書      高著書
-隔著作      隔著作
-隔著者      隔著者
-隔著名      隔著名
-隔著述      隔著述
-隔著稱      隔著稱
-隔著錄      隔著錄
-隔著書      隔著書
-跟著作      跟著作
-跟著者      跟著者
-跟著名      跟著名
-跟著述      跟著述
-跟著稱      跟著稱
-跟著錄      跟著錄
-跟著書      跟著書
-孤著作      孤著作
-孤著者      孤著者
-孤著名      孤著名
-孤著述      孤著述
-孤著稱      孤著稱
-孤著錄      孤著錄
-孤著書      孤著書
-關著作      關著作
-關著者      關著者
-關著名      關著名
-關著述      關著述
-關著稱      關著稱
-關著錄      關著錄
-關著書      關著書
-管著作      管著作
-管著者      管著者
-管著名      管著名
-管著述      管著述
-管著稱      管著稱
-管著錄      管著錄
-管著書      管著書
-慣著作      慣著作
-慣著者      慣著者
-慣著名      慣著名
-慣著述      慣著述
-慣著稱      慣著稱
-慣著錄      慣著錄
-慣著書      慣著書
-光著作      光著作
-光著者      光著者
-光著名      光著名
-光著述      光著述
-光著稱      光著稱
-光著錄      光著錄
-光著書      光著書
-跪著作      跪著作
-跪著者      跪著者
-跪著名      跪著名
-跪著述      跪著述
-跪著稱      跪著稱
-跪著錄      跪著錄
-跪著書      跪著書
-裹著作      裹著作
-裹著者      裹著者
-裹著名      裹著名
-裹著述      裹著述
-裹著稱      裹著稱
-裹著錄      裹著錄
-裹著書      裹著書
-撼著作      撼著作
-撼著者      撼著者
-撼著名      撼著名
-撼著述      撼著述
-撼著稱      撼著稱
-撼著錄      撼著錄
-撼著書      撼著書
-喝著作      喝著作
-喝著者      喝著者
-喝著名      喝著名
-喝著述      喝著述
-喝著稱      喝著稱
-喝著錄      喝著錄
-喝著書      喝著書
-候著作      候著作
-候著者      候著者
-候著名      候著名
-候著述      候著述
-候著稱      候著稱
-候著錄      候著錄
-候著書      候著書
-懷著作      懷著作
-懷著者      懷著者
-懷著名      懷著名
-懷著述      懷著述
-懷著稱      懷著稱
-懷著錄      懷著錄
-懷著書      懷著書
-晃著作      晃著作
-晃著者      晃著者
-晃著名      晃著名
-晃著述      晃著述
-晃著稱      晃著稱
-晃著錄      晃著錄
-揮著作      揮著作
-揮著者      揮著者
-揮著名      揮著名
-揮著述      揮著述
-揮著稱      揮著稱
-揮著錄      揮著錄
-活著作      活著作
-活著者      活著者
-活著名      活著名
-活著述      活著述
-活著稱      活著稱
-活著錄      活著錄
-活著書      活著書
-獲著作      獲著作
-獲著者      獲著者
-獲著名      獲著名
-獲著述      獲著述
-獲著稱      獲著稱
-獲著錄      獲著錄
-獲著書      獲著書
-獲著作      獲著作
-獲著者      獲著者
-獲著名      獲著名
-獲著述      獲著述
-獲著稱      獲著稱
-獲著錄      獲著錄
-獲著書      獲著書
-急著作      急著作
-急著者      急著者
-急著名      急著名
-急著述      急著述
-急著稱      急著稱
-急著錄      急著錄
-急著書      急著書
-記著作      記著作
-記著者      記著者
-記著名      記著名
-記著述      記著述
-記著稱      記著稱
-記著錄      記著錄
-記著書      記著書
-冀著作      冀著作
-冀著者      冀著者
-冀著名      冀著名
-冀著述      冀著述
-冀著稱      冀著稱
-冀著錄      冀著錄
-冀著書      冀著書
-夾著作      夾著作
-夾著者      夾著者
-夾著名      夾著名
-夾著述      夾著述
-夾著稱      夾著稱
-夾著錄      夾著錄
-夾著書      夾著書
-駕著作      駕著作
-駕著者      駕著者
-駕著名      駕著名
-駕著述      駕著述
-駕著稱      駕著稱
-駕著錄      駕著錄
-駕著書      駕著書
-見著作      見著作
-見著者      見著者
-見著名      見著名
-見著述      見著述
-見著稱      見著稱
-見著錄      見著錄
-見著書      見著書
-閑著作      閑著作
-閑著者      閑著者
-閑著名      閑著名
-閑著述      閑著述
-閑著稱      閑著稱
-閑著錄      閑著錄
-閑著書      閑著書
-叫著作      叫著作
-叫著者      叫著者
-叫著名      叫著名
-叫著述      叫著述
-叫著稱      叫著稱
-叫著錄      叫著錄
-叫著書      叫著書
-接著作      接著作
-接著者      接著者
-接著名      接著名
-接著述      接著述
-接著稱      接著稱
-接著錄      接著錄
-借著作      借著作
-借著者      借著者
-借著名      借著名
-借著述      借著述
-借著稱      借著稱
-借著錄      借著錄
-借著書      借著書
-借著作      借著作
-借著者      借著者
-借著名      借著名
-借著述      借著述
-借著稱      借著稱
-借著錄      借著錄
-借著書      借著書
-據著作      據著作
-據著者      據著者
-據著名      據著名
-據著述      據著述
-據著稱      據著稱
-據著錄      據著錄
-據著書      據著書
-開著作      開著作
-開著者      開著者
-開著名      開著名
-開著述      開著述
-開著稱      開著稱
-開著錄      開著錄
-開著書      開著書
-看著作      看著作
-看著者      看著者
-看著名      看著名
-看著述      看著述
-看著稱      看著稱
-看著錄      看著錄
-看著書      看著書
-康著作      康著作
-康著者      康著者
-康著名      康著名
-康著述      康著述
-康著稱      康著稱
-康著錄      康著錄
-康著書      康著書
-扛著作      扛著作
-扛著者      扛著者
-扛著名      扛著名
-扛著述      扛著述
-扛著稱      扛著稱
-扛著錄      扛著錄
-扛著書      扛著書
-考著作      考著作
-考著者      考著者
-考著名      考著名
-考著述      考著述
-考著稱      考著稱
-考著錄      考著錄
-考著書      考著書
-渴著作      渴著作
-渴著者      渴著者
-渴著名      渴著名
-渴著述      渴著述
-渴著稱      渴著稱
-渴著錄      渴著錄
-渴著書      渴著書
-刻著作      刻著作
-刻著者      刻著者
-刻著名      刻著名
-刻著述      刻著述
-刻著稱      刻著稱
-刻著錄      刻著錄
-刻著書      刻著書
-空著作      空著作
-空著者      空著者
-空著名      空著名
-空著述      空著述
-空著稱      空著稱
-空著錄      空著錄
-空著書      空著書
-哭著作      哭著作
-哭著者      哭著者
-哭著名      哭著名
-哭著述      哭著述
-哭著稱      哭著稱
-哭著錄      哭著錄
-哭著書      哭著書
-苦著作      苦著作
-苦著者      苦著者
-苦著名      苦著名
-苦著述      苦著述
-苦著稱      苦著稱
-苦著錄      苦著錄
-苦著書      苦著書
-捆著作      捆著作
-捆著者      捆著者
-捆著名      捆著名
-捆著述      捆著述
-捆著稱      捆著稱
-捆著錄      捆著錄
-困著作      困著作
-困著者      困著者
-困著名      困著名
-困著述      困著述
-困著稱      困著稱
-困著錄      困著錄
-困著書      困著書
-拉著作      拉著作
-拉著者      拉著者
-拉著名      拉著名
-拉著述      拉著述
-拉著稱      拉著稱
-拉著錄      拉著錄
-拉著書      拉著書
-來著作      來著作
-來著者      來著者
-來著名      來著名
-來著述      來著述
-來著稱      來著稱
-來著錄      來著錄
-來著書      來著書
-樂著作      樂著作
-樂著者      樂著者
-樂著名      樂著名
-樂著述      樂著述
-樂著稱      樂著稱
-樂著錄      樂著錄
-樂著書      樂著書
-努力著作   努力著作
-努力著者   努力著者
-努力著名   努力著名
-努力著述   努力著述
-努力著稱   努力著稱
-努力著錄   努力著錄
-努力著書   努力著書
-麗著作      麗著作
-麗著者      麗著者
-麗著名      麗著名
-麗著述      麗著述
-麗著稱      麗著稱
-麗著錄      麗著錄
-麗著書      麗著書
-連著作      連著作
-連著者      連著者
-連著名      連著名
-連著述      連著述
-連著稱      連著稱
-連著錄      連著錄
-連著書      連著書
-戀著作      戀著作
-戀著者      戀著者
-戀著名      戀著名
-戀著述      戀著述
-戀著稱      戀著稱
-戀著錄      戀著錄
-戀著書      戀著書
-涼著作      涼著作
-涼著者      涼著者
-涼著名      涼著名
-涼著述      涼著述
-涼著稱      涼著稱
-涼著錄      涼著錄
-涼著書      涼著書
-亮著作      亮著作
-亮著者      亮著者
-亮著名      亮著名
-亮著述      亮著述
-亮著稱      亮著稱
-亮著錄      亮著錄
-亮著書      亮著書
-臨著作      臨著作
-臨著者      臨著者
-臨著名      臨著名
-臨著述      臨著述
-臨著稱      臨著稱
-臨著錄      臨著錄
-臨著書      臨著書
-拎著作      拎著作
-拎著者      拎著者
-拎著名      拎著名
-拎著述      拎著述
-拎著稱      拎著稱
-拎著錄      拎著錄
-領著作      領著作
-領著者      領著者
-領著名      領著名
-領著述      領著述
-領著稱      領著稱
-領著錄      領著錄
-領著書      領著書
-流著作      流著作
-流著者      流著者
-流著名      流著名
-流著述      流著述
-流著稱      流著稱
-流著錄      流著錄
-流著書      流著書
-留著作      留著作
-留著者      留著者
-留著名      留著名
-留著述      留著述
-留著稱      留著稱
-留著錄      留著錄
-留著書      留著書
-摟著作      摟著作
-摟著者      摟著者
-摟著名      摟著名
-摟著述      摟著述
-摟著稱      摟著稱
-摟著錄      摟著錄
-陋著作      陋著作
-陋著者      陋著者
-陋著名      陋著名
-陋著述      陋著述
-陋著稱      陋著稱
-陋著錄      陋著錄
-陋著書      陋著書
-落著作      落著作
-落著者      落著者
-落著名      落著名
-落著述      落著述
-落著稱      落著稱
-落著錄      落著錄
-落著書      落著書
-罵著作      罵著作
-罵著者      罵著者
-罵著名      罵著名
-罵著述      罵著述
-罵著稱      罵著稱
-罵著錄      罵著錄
-罵著書      罵著書
-瞞著作      瞞著作
-瞞著者      瞞著者
-瞞著名      瞞著名
-瞞著述      瞞著述
-瞞著稱      瞞著稱
-瞞著錄      瞞著錄
-瞞著書      瞞著書
-漫著作      漫著作
-漫著者      漫著者
-漫著名      漫著名
-漫著述      漫著述
-漫著稱      漫著稱
-漫著錄      漫著錄
-漫著書      漫著書
-忙著作      忙著作
-忙著者      忙著者
-忙著名      忙著名
-忙著述      忙著述
-忙著稱      忙著稱
-忙著錄      忙著錄
-忙著書      忙著書
-冒著作      冒著作
-冒著者      冒著者
-冒著名      冒著名
-冒著述      冒著述
-冒著稱      冒著稱
-冒著錄      冒著錄
-冒著書      冒著書
-美著作      美著作
-美著者      美著者
-美著名      美著名
-美著述      美著述
-美著稱      美著稱
-美著錄      美著錄
-美著書      美著書
-夢著作      夢著作
-夢著者      夢著者
-夢著名      夢著名
-夢著述      夢著述
-夢著稱      夢著稱
-夢著錄      夢著錄
-夢著書      夢著書
-蒙著作      蒙著作
-蒙著者      蒙著者
-蒙著名      蒙著名
-蒙著述      蒙著述
-蒙著稱      蒙著稱
-蒙著錄      蒙著錄
-蒙著書      蒙著書
-拿著作      拿著作
-拿著者      拿著者
-拿著名      拿著名
-拿著述      拿著述
-拿著稱      拿著稱
-拿著錄      拿著錄
-逆著作      逆著作
-逆著者      逆著者
-逆著名      逆著名
-逆著述      逆著述
-逆著稱      逆著稱
-逆著錄      逆著錄
-逆著書      逆著書
-釀著作      釀著作
-釀著者      釀著者
-釀著名      釀著名
-釀著述      釀著述
-釀著稱      釀著稱
-釀著錄      釀著錄
-釀著書      釀著書
-努著作      努著作
-努著者      努著者
-努著名      努著名
-努著述      努著述
-努著稱      努著稱
-努著錄      努著錄
-努著書      努著書
-趴著作      趴著作
-趴著者      趴著者
-趴著名      趴著名
-趴著述      趴著述
-趴著稱      趴著稱
-趴著錄      趴著錄
-趴著書      趴著書
-跑著作      跑著作
-跑著者      跑著者
-跑著名      跑著名
-跑著述      跑著述
-跑著稱      跑著稱
-跑著錄      跑著錄
-跑著書      跑著書
-陪著作      陪著作
-陪著者      陪著者
-陪著名      陪著名
-陪著述      陪著述
-陪著稱      陪著稱
-陪著錄      陪著錄
-陪著書      陪著書
-配著作      配著作
-配著者      配著者
-配著名      配著名
-配著述      配著述
-配著稱      配著稱
-配著錄      配著錄
-配著書      配著書
-披著作      披著作
-披著者      披著者
-披著名      披著名
-披著述      披著述
-披著稱      披著稱
-披著錄      披著錄
-披著書      披著書
-騙著作      騙著作
-騙著者      騙著者
-騙著名      騙著名
-騙著述      騙著述
-騙著稱      騙著稱
-騙著錄      騙著錄
-騙著書      騙著書
-飄著作      飄著作
-飄著者      飄著者
-飄著名      飄著名
-飄著述      飄著述
-飄著稱      飄著稱
-飄著錄      飄著錄
-飄著書      飄著書
-拼著作      拼著作
-拼著者      拼著者
-拼著名      拼著名
-拼著述      拼著述
-拼著稱      拼著稱
-拼著錄      拼著錄
-鋪著作      鋪著作
-鋪著者      鋪著者
-鋪著名      鋪著名
-鋪著述      鋪著述
-鋪著稱      鋪著稱
-鋪著錄      鋪著錄
-鋪著書      鋪著書
-騎著作      騎著作
-騎著者      騎著者
-騎著名      騎著名
-騎著述      騎著述
-騎著稱      騎著稱
-騎著錄      騎著錄
-騎著書      騎著書
-牽著作      牽著作
-牽著者      牽著者
-牽著名      牽著名
-牽著述      牽著述
-牽著稱      牽著稱
-牽著錄      牽著錄
-牽著書      牽著書
-求著作      求著作
-求著者      求著者
-求著名      求著名
-求著述      求著述
-求著稱      求著稱
-求著錄      求著錄
-求著書      求著書
-去著作      去著作
-去著者      去著者
-去著名      去著名
-去著述      去著述
-去著稱      去著稱
-去著錄      去著錄
-去著書      去著書
-嚷著作      嚷著作
-嚷著者      嚷著者
-嚷著名      嚷著名
-嚷著述      嚷著述
-嚷著稱      嚷著稱
-嚷著錄      嚷著錄
-嚷著書      嚷著書
-繞著作      繞著作
-繞著者      繞著者
-繞著名      繞著名
-繞著述      繞著述
-繞著稱      繞著稱
-繞著錄      繞著錄
-繞著書      繞著書
-忍著作      忍著作
-忍著者      忍著者
-忍著名      忍著名
-忍著述      忍著述
-忍著稱      忍著稱
-忍著錄      忍著錄
-忍著書      忍著書
-揉著作      揉著作
-揉著者      揉著者
-揉著名      揉著名
-揉著述      揉著述
-揉著稱      揉著稱
-揉著錄      揉著錄
-揉著書      揉著書
-潤著作      潤著作
-潤著者      潤著者
-潤著名      潤著名
-潤著述      潤著述
-潤著稱      潤著稱
-潤著錄      潤著錄
-潤著書      潤著書
-燒著作      燒著作
-燒著者      燒著者
-燒著名      燒著名
-燒著述      燒著述
-燒著稱      燒著稱
-燒著錄      燒著錄
-燒著書      燒著書
-身著作      身著作
-身著者      身著者
-身著名      身著名
-身著述      身著述
-身著稱      身著稱
-身著錄      身著錄
-身著書      身著書
-沉著作      沉著作
-沉著者      沉著者
-沉著名      沉著名
-沉著述      沉著述
-沉著稱      沉著稱
-沉著錄      沉著錄
-沉著書      沉著書
-盛著作      盛著作
-盛著者      盛著者
-盛著名      盛著名
-盛著述      盛著述
-盛著稱      盛著稱
-盛著錄      盛著錄
-盛著書      盛著書
-試著作      試著作
-試著者      試著者
-試著名      試著名
-試著述      試著述
-試著稱      試著稱
-試著錄      試著錄
-試著書      試著書
-守著作      守著作
-守著者      守著者
-守著名      守著名
-守著述      守著述
-守著稱      守著稱
-守著錄      守著錄
-守著書      守著書
-受著作      受著作
-受著者      受著者
-受著名      受著名
-受著述      受著述
-受著稱      受著稱
-受著錄      受著錄
-受著書      受著書
-梳著作      梳著作
-梳著者      梳著者
-梳著名      梳著名
-梳著述      梳著述
-梳著稱      梳著稱
-梳著錄      梳著錄
-豎著作      豎著作
-豎著者      豎著者
-豎著名      豎著名
-豎著述      豎著述
-豎著稱      豎著稱
-豎著錄      豎著錄
-豎著書      豎著書
-數著作      數著作
-數著者      數著者
-數著名      數著名
-數著述      數著述
-數著稱      數著稱
-數著錄      數著錄
-睡著作      睡著作
-睡著者      睡著者
-睡著名      睡著名
-睡著述      睡著述
-睡著稱      睡著稱
-睡著錄      睡著錄
-睡著書      睡著書
-順著作      順著作
-順著者      順著者
-順著名      順著名
-順著述      順著述
-順著稱      順著稱
-順著錄      順著錄
-順著書      順著書
-隨著作      隨著作
-隨著者      隨著者
-隨著名      隨著名
-隨著述      隨著述
-隨著稱      隨著稱
-隨著錄      隨著錄
-隨著書      隨著書
-踏著作      踏著作
-踏著者      踏著者
-踏著名      踏著名
-踏著述      踏著述
-踏著稱      踏著稱
-踏著錄      踏著錄
-抬著作      抬著作
-抬著者      抬著者
-抬著名      抬著名
-抬著述      抬著述
-抬著稱      抬著稱
-抬著錄      抬著錄
-躺著作      躺著作
-躺著者      躺著者
-躺著名      躺著名
-躺著述      躺著述
-躺著稱      躺著稱
-躺著錄      躺著錄
-躺著書      躺著書
-提著作      提著作
-提著者      提著者
-提著名      提著名
-提著述      提著述
-提著稱      提著稱
-提著錄      提著錄
-甜著作      甜著作
-甜著者      甜著者
-甜著名      甜著名
-甜著述      甜著述
-甜著稱      甜著稱
-甜著錄      甜著錄
-甜著書      甜著書
-挑著作      挑著作
-挑著者      挑著者
-挑著名      挑著名
-挑著述      挑著述
-挑著稱      挑著稱
-挑著錄      挑著錄
-跳著作      跳著作
-跳著者      跳著者
-跳著名      跳著名
-跳著述      跳著述
-跳著稱      跳著稱
-跳著錄      跳著錄
-跳著書      跳著書
-聽著作      聽著作
-聽著者      聽著者
-聽著名      聽著名
-聽著述      聽著述
-聽著稱      聽著稱
-聽著錄      聽著錄
-聽著書      聽著書
-偷著作      偷著作
-偷著者      偷著者
-偷著名      偷著名
-偷著述      偷著述
-偷著稱      偷著稱
-偷著錄      偷著錄
-偷著書      偷著書
-拖著作      拖著作
-拖著者      拖著者
-拖著名      拖著名
-拖著述      拖著述
-拖著稱      拖著稱
-拖著錄      拖著錄
-望著作      望著作
-望著者      望著者
-望著名      望著名
-望著述      望著述
-望著稱      望著稱
-望著錄      望著錄
-望著書      望著書
-圍著作      圍著作
-圍著者      圍著者
-圍著名      圍著名
-圍著述      圍著述
-圍著稱      圍著稱
-圍著錄      圍著錄
-圍著書      圍著書
-味著作      味著作
-味著者      味著者
-味著名      味著名
-味著述      味著述
-味著稱      味著稱
-味著錄      味著錄
-味著書      味著書
-想著作      想著作
-想著者      想著者
-想著名      想著名
-想著述      想著述
-想著稱      想著稱
-想著錄      想著錄
-想著書      想著書
-響著作      響著作
-響著者      響著者
-響著名      響著名
-響著述      響著述
-響著稱      響著稱
-響著錄      響著錄
-響著書      響著書
-向著作      向著作
-向著者      向著者
-向著名      向著名
-向著述      向著述
-向著稱      向著稱
-向著錄      向著錄
-向著書      向著書
-笑著作      笑著作
-笑著者      笑著者
-笑著名      笑著名
-笑著述      笑著述
-笑著稱      笑著稱
-笑著錄      笑著錄
-笑著書      笑著書
-心著作      心著作
-心著者      心著者
-心著名      心著名
-心著述      心著述
-心著稱      心著稱
-心著錄      心著錄
-心著書      心著書
-信著作      信著作
-信著者      信著者
-信著名      信著名
-信著述      信著述
-信著稱      信著稱
-信著錄      信著錄
-信著書      信著書
-行著作      行著作
-行著者      行著者
-行著名      行著名
-行著述      行著述
-行著稱      行著稱
-行著錄      行著錄
-行著書      行著書
-性著作      性著作
-性著者      性著者
-性著名      性著名
-性著述      性著述
-性著稱      性著稱
-性著錄      性著錄
-性著書      性著書
-學著作      學著作
-學著者      學著者
-學著名      學著名
-學著述      學著述
-學著稱      學著稱
-學著錄      學著錄
-學著書      學著書
-尋著作      尋著作
-尋著者      尋著者
-尋著名      尋著名
-尋著述      尋著述
-尋著稱      尋著稱
-尋著錄      尋著錄
-尋著書      尋著書
-循著作      循著作
-循著者      循著者
-循著名      循著名
-循著述      循著述
-循著稱      循著稱
-循著錄      循著錄
-循著書      循著書
-壓著作      壓著作
-壓著者      壓著者
-壓著名      壓著名
-壓著述      壓著述
-壓著稱      壓著稱
-壓著錄      壓著錄
-壓著書      壓著書
-雅著作      雅著作
-雅著者      雅著者
-雅著名      雅著名
-雅著述      雅著述
-雅著稱      雅著稱
-雅著錄      雅著錄
-雅著書      雅著書
-沿著作      沿著作
-沿著者      沿著者
-沿著名      沿著名
-沿著述      沿著述
-沿著稱      沿著稱
-沿著錄      沿著錄
-沿著書      沿著書
-耀著作      耀著作
-耀著者      耀著者
-耀著名      耀著名
-耀著述      耀著述
-耀著稱      耀著稱
-耀著錄      耀著錄
-耀著書      耀著書
-掖著作      掖著作
-掖著者      掖著者
-掖著名      掖著名
-掖著述      掖著述
-掖著稱      掖著稱
-掖著錄      掖著錄
-衣著作      衣著作
-衣著者      衣著者
-衣著名      衣著名
-衣著述      衣著述
-衣著稱      衣著稱
-衣著錄      衣著錄
-衣著書      衣著書
-疑著作      疑著作
-疑著者      疑著者
-疑著名      疑著名
-疑著述      疑著述
-疑著稱      疑著稱
-疑著錄      疑著錄
-疑著書      疑著書
-溢著作      溢著作
-溢著者      溢著者
-溢著名      溢著名
-溢著述      溢著述
-溢著稱      溢著稱
-溢著錄      溢著錄
-溢著書      溢著書
-藝著作      藝著作
-藝著者      藝著者
-藝著名      藝著名
-藝著述      藝著述
-藝著稱      藝著稱
-藝著錄      藝著錄
-藝著書      藝著書
-因著作      因著作
-因著者      因著者
-因著名      因著名
-因著述      因著述
-因著稱      因著稱
-因著錄      因著錄
-因著書      因著書
-印著作      印著作
-印著者      印著者
-印著名      印著名
-印著述      印著述
-印著稱      印著稱
-印著錄      印著錄
-印著書      印著書
-應著作      應著作
-應著者      應著者
-應著名      應著名
-應著述      應著述
-應著稱      應著稱
-應著錄      應著錄
-應著書      應著書
-映著作      映著作
-映著者      映著者
-映著名      映著名
-映著述      映著述
-映著稱      映著稱
-映著錄      映著錄
-映著書      映著書
-用著作      用著作
-用著者      用著者
-用著名      用著名
-用著述      用著述
-用著稱      用著稱
-用著錄      用著錄
-用著書      用著書
-悠著作      悠著作
-悠著者      悠著者
-悠著名      悠著名
-悠著述      悠著述
-悠著稱      悠著稱
-悠著錄      悠著錄
-悠著書      悠著書
-有著作      有著作
-有著者      有著者
-有著名      有著名
-有著述      有著述
-有著稱      有著稱
-有著錄      有著錄
-有著書      有著書
-與著作      與著作
-與著者      與著者
-與著名      與著名
-與著述      與著述
-與著稱      與著稱
-與著錄      與著錄
-與著書      與著書
-語著作      語著作
-語著者      語著者
-語著名      語著名
-語著述      語著述
-語著稱      語著稱
-語著錄      語著錄
-語著書      語著書
-豫著作      豫著作
-豫著者      豫著者
-豫著名      豫著名
-豫著述      豫著述
-豫著稱      豫著稱
-豫著錄      豫著錄
-豫著書      豫著書
-遠著作      遠著作
-遠著者      遠著者
-遠著名      遠著名
-遠著述      遠著述
-遠著稱      遠著稱
-遠著錄      遠著錄
-遠著書      遠著書
-躍著作      躍著作
-躍著者      躍著者
-躍著名      躍著名
-躍著述      躍著述
-躍著稱      躍著稱
-躍著錄      躍著錄
-躍著書      躍著書
-雜著作      雜著作
-雜著者      雜著者
-雜著名      雜著名
-雜著述      雜著述
-雜著稱      雜著稱
-雜著錄      雜著錄
-雜著書      雜著書
-載著作      載著作
-載著者      載著者
-載著名      載著名
-載著述      載著述
-載著稱      載著稱
-載著錄      載著錄
-載著書      載著書
-在著作      在著作
-在著者      在著者
-在著名      在著名
-在著述      在著述
-在著稱      在著稱
-在著錄      在著錄
-在著書      在著書
-紮著作      紮著作
-紮著者      紮著者
-紮著名      紮著名
-紮著述      紮著述
-紮著稱      紮著稱
-紮著錄      紮著錄
-紮著書      紮著書
-展著作      展著作
-展著者      展著者
-展著名      展著名
-展著述      展著述
-展著稱      展著稱
-展著錄      展著錄
-展著書      展著書
-站著作      站著作
-站著者      站著者
-站著名      站著名
-站著述      站著述
-站著稱      站著稱
-站著錄      站著錄
-站著書      站著書
-戰著作      戰著作
-戰著者      戰著者
-戰著名      戰著名
-戰著述      戰著述
-戰著稱      戰著稱
-戰著錄      戰著錄
-戰著書      戰著書
-蘸著作      蘸著作
-蘸著者      蘸著者
-蘸著名      蘸著名
-蘸著述      蘸著述
-蘸著稱      蘸著稱
-蘸著錄      蘸著錄
-蘸著書      蘸著書
-仗著作      仗著作
-仗著者      仗著者
-仗著名      仗著名
-仗著述      仗著述
-仗著稱      仗著稱
-仗著錄      仗著錄
-仗著書      仗著書
-照著作      照著作
-照著者      照著者
-照著名      照著名
-照著述      照著述
-照著稱      照著稱
-照著錄      照著錄
-照著書      照著書
-罩著作      罩著作
-罩著者      罩著者
-罩著名      罩著名
-罩著述      罩著述
-罩著稱      罩著稱
-罩著錄      罩著錄
-罩著書      罩著書
-貞著作      貞著作
-貞著者      貞著者
-貞著名      貞著名
-貞著述      貞著述
-貞著稱      貞著稱
-貞著錄      貞著錄
-貞著書      貞著書
-枕著作      枕著作
-枕著者      枕著者
-枕著名      枕著名
-枕著述      枕著述
-枕著稱      枕著稱
-枕著錄      枕著錄
-爭著作      爭著作
-爭著者      爭著者
-爭著名      爭著名
-爭著述      爭著述
-爭著稱      爭著稱
-爭著錄      爭著錄
-爭著書      爭著書
-掙著作      掙著作
-掙著者      掙著者
-掙著名      掙著名
-掙著述      掙著述
-掙著稱      掙著稱
-掙著錄      掙著錄
-掙著書      掙著書
-制著作      制著作
-制著者      制著者
-制著名      制著名
-制著述      制著述
-制著稱      制著稱
-制著錄      制著錄
-制著書      制著書
-志著作      志著作
-志著者      志著者
-志著名      志著名
-志著述      志著述
-志著稱      志著稱
-志著錄      志著錄
-志著書      志著書
-皺著作      皺著作
-皺著者      皺著者
-皺著名      皺著名
-皺著述      皺著述
-皺著稱      皺著稱
-皺著錄      皺著錄
-皺著書      皺著書
-住著作      住著作
-住著者      住著者
-住著名      住著名
-住著述      住著述
-住著稱      住著稱
-住著錄      住著錄
-住著書      住著書
-抓著作      抓著作
-抓著者      抓著者
-抓著名      抓著名
-抓著述      抓著述
-抓著稱      抓著稱
-抓著錄      抓著錄
-轉著作      轉著作
-轉著者      轉著者
-轉著名      轉著名
-轉著述      轉著述
-轉著稱      轉著稱
-轉著錄      轉著錄
-轉著書      轉著書
-裝著作      裝著作
-裝著者      裝著者
-裝著名      裝著名
-裝著述      裝著述
-裝著稱      裝著稱
-裝著錄      裝著錄
-裝著書      裝著書
-追著作      追著作
-追著者      追著者
-追著名      追著名
-追著述      追著述
-追著稱      追著稱
-追著錄      追著錄
-追著書      追著書
-髭著作      髭著作
-髭著者      髭著者
-髭著名      髭著名
-髭著述      髭著述
-髭著稱      髭著稱
-髭著錄      髭著錄
-髭著書      髭著書
-走著作      走著作
-走著者      走著者
-走著名      走著名
-走著述      走著述
-走著稱      走著稱
-走著錄      走著錄
-走著書      走著書
-坐著作      坐著作
-坐著者      坐著者
-坐著名      坐著名
-坐著述      坐著述
-坐著稱      坐著稱
-坐著錄      坐著錄
-坐著書      坐著書
-做著作      做著作
-做著者      做著者
-做著名      做著名
-做著述      做著述
-做著稱      做著稱
-做著錄      做著錄
-做著書      做著書
-含著作      含著作
-含著者      含著者
-含著名      含著名
-含著述      含著述
-含著稱      含著稱
-含著錄      含著錄
-含著書      含著書
-涵著作      涵著作
-涵著者      涵著者
-涵著名      涵著名
-涵著述      涵著述
-涵著稱      涵著稱
-涵著錄      涵著錄
-涵著書      涵著書
-演著作      演著作
-演著者      演著者
-演著名      演著名
-演著述      演著述
-演著稱      演著稱
-演著錄      演著錄
-演著書      演著書
-保障著作   保障著作
-保障著者   保障著者
-保障著名   保障著名
-保障著述   保障著述
-保障著稱   保障著稱
-保障著錄   保障著錄
-保障著書   保障著書
-黏著作      黏著作
-黏著者      黏著者
-黏著名      黏著名
-黏著述      黏著述
-黏著稱      黏著稱
-黏著錄      黏著錄
-黏著書      黏著書
-膠著作      膠著作
-膠著者      膠著者
-膠著名      膠著名
-膠著述      膠著述
-膠著稱      膠著稱
-膠著錄      膠著錄
-膠著書      膠著書
-附著作      附著作
-附著者      附著者
-附著名      附著名
-附著述      附著述
-附著稱      附著稱
-附著錄      附著錄
-附著書      附著書
-代表著作   代表著作
-代表著者   代表著者
-代表著名   代表著名
-代表著述   代表著述
-代表著稱   代表著稱
-代表著錄   代表著錄
-代表著書   代表著書
-浮著作      浮著作
-浮著者      浮著者
-浮著名      浮著名
-浮著述      浮著述
-浮著稱      浮著稱
-浮著錄      浮著錄
-浮著書      浮著書
-寫著作      寫著作
-寫著者      寫著者
-寫著名      寫著名
-寫著述      寫著述
-寫著稱      寫著稱
-寫著錄      寫著錄
-寫著書      寫著書
-遇著作      遇著作
-遇著者      遇著者
-遇著名      遇著名
-遇著述      遇著述
-遇著稱      遇著稱
-遇著錄      遇著錄
-遇著書      遇著書
-殺著作      殺著作
-殺著者      殺著者
-殺著名      殺著名
-殺著述      殺著述
-殺著稱      殺著稱
-殺著錄      殺著錄
-殺著書      殺著書
-標誌著      標誌着
-幹著 幹着
-干着 幹着
-干着急      干着急
-流露著      流露着
-靠著 靠着
-靠著作      靠著作
-靠著名      靠著名
-靠著錄      靠著錄
-靠著录      靠著錄
-靠著稱      靠著稱
-靠著称      靠著稱
-靠著者      靠著者
-靠著述      靠著述
-新著龍虎門        新著龍虎門
-迫著 迫着
-心繫著      心繫着
-藉著 藉着
-吃得著      吃得着
-吃不著      吃不着
-吃著 吃着
-聞得著      闻得着
-聞不著      闻不着
-聞著 闻着
-嗅得著      嗅得着
-嗅不著      嗅不着
-嗅著 嗅着
-警戒著      警戒着
-榴莲 榴槤
-榴蓮 榴槤
-发布 發佈
-發布 發佈
-掛鉤 掛鈎
-鉤心鬥角   鈎心鬥角
-咤    咤
-叱吒 叱咤
-叱咤 叱咤
-醯    酰
-醯醬 醯醬
-醯雞 醯雞
-醯酱 醯醬
-醯鸡 醯雞
-醯醋 醯醋
-醯醢 醯醢
-醯壶 醯壺
-醯壺 醯壺
-菸    煙
-雪裡紅      雪裏紅
-雪裡蕻      雪裏蕻
-雪里蕻      雪裏蕻
-雪里红      雪裏紅
-森林裡      森林裏
-森林里      森林裏
-日子裡      日子裏
-日子里      日子裏
-故事裡      故事裏
-故事里      故事裏
-領域裡      領域裏
-领域里      領域裏
-時間裡      時間裏
-时间里      時間裏
-深淵裡      深淵裏
-深渊里      深渊裏
-醫院裡      醫院裏
-医院里      医院裏
-春假裡      春假裏
-春假里      春假裏
-暑假裡      暑假裏
-暑假里      暑假裏
-秋假裡      秋假裏
-秋假里      秋假裏
-寒假裡      寒假裏
-寒假里      寒假裏
-春天裡      春天裏
-春天里      春天裏
-夏天裡      夏天裏
-夏天里      夏天裏
-秋天裡      秋天裏
-秋天里      秋天裏
-冬天裡      冬天裏
-冬天里      冬天裏
-春日裡      春日裏
-夏日裡      夏日裏
-秋日裡      秋日裏
-冬日裡      冬日裏
-春日里      春日裏
-夏日里      夏日裏
-秋日里      秋日裏
-冬日里      冬日裏
-嘴裡 嘴裏
-嘴里 嘴裏
-心裡 心裏
-心里 心裏
-皮裡陽秋   皮裏陽秋
-皮里阳秋   皮裏陽秋
-肚裡 肚裏
-肚里 肚裏
-苦裡 苦裏
-苦里 苦裏
-裡勾外連   裏勾外連
-里勾外连   裏勾外連
-裡面 裏面
-里面 裏面
-這裡 這裏
-這里 這裏
-點裡 點裏
-点里 點裏
-中文裡      中文裏
-中文里      中文裏
-山洞里      山洞裏
-山洞裡      山洞裏
-近角聪信   近角聰信
-近角聰信   近角聰信
-世界里      世界裏
-世界裡      世界裏
-眼睛里      眼睛裏
-眼睛裡      眼睛裏
-百科裡      百科裏
-百科里      百科裏
-歷史裡      歷史裏
-历史里      歷史裏
-戲裡 戲裏
-戏里 戲裏
-作品裡      作品裏
-作品里      作品裏
-專輯裡      專輯裏
-专辑里      專輯裏
-年代裡      年代裏
-年代里      年代裏
-棺材裡      棺材裏
-棺材里      棺材裏
-學裡 學裏
-学里 學裏
-獄裡 獄裏
-狱里 獄裏
-館裡 館裏
-馆里 館裏
-系列裡      系列裏
-系列里      系列裏
-村子裡      村子裏
-村子里      村子裏
-分布 分佈
-分布于      分佈於
-分布於      分佈於
-想象 想像
-無線電視   無綫電視
-无线电视   無綫電視
-無線收費   無綫收費
-无线收费   無綫收費
-無線節目   無綫節目
-无线节目   無綫節目
-無線劇集   無綫劇集
-无线剧集   無綫劇集
-東鐵線      東鐵綫
-东铁线      東鐵綫
-觀塘線      觀塘綫
-观塘线      觀塘綫
-荃灣線      荃灣綫
-荃湾线      荃灣綫
-港島線      港島綫
-港岛线      港島綫
-東涌線      東涌綫
-东涌线      東涌綫
-將軍澳線   將軍澳綫
-将军澳线   將軍澳綫
-西鐵線      西鐵綫
-西铁线      西鐵綫
-馬鞍山線   馬鞍山綫
-马鞍山线   馬鞍山綫
-迪士尼線   迪士尼綫
-迪士尼线   迪士尼綫
-沙田至中環線     沙田至中環綫
-沙田至中环线     沙田至中環綫
-沙中線      沙中綫
-沙中线      沙中綫
-北環線      北環綫
-北环线      北環綫
-機場快線   機場快綫
-机场快线   機場快綫
-505線 505綫
-505线 505綫
-507線 507綫
-507线 507綫
-610線 610綫
-610线 610綫
-614線 614綫
-614线 614綫
-614P線        614P綫
-614P线        614P綫
-615線 615綫
-615线 615綫
-615P線        615P綫
-615P线        615P綫
-705線 705綫
-705线 705綫
-706線 706綫
-706线 706綫
-751線 751綫
-751线 751綫
-751P線        751P綫
-751P线        751P綫
-761P線        761P綫
-761P线        761P綫
diff --git a/includes/zhtable/toSG.manual b/includes/zhtable/toSG.manual
deleted file mode 100644 (file)
index 2d39aa3..0000000
+++ /dev/null
@@ -1,21 +0,0 @@
-」    ”
-「    “
-『    ‘
-』    ’
-方便面      快速面
-速食麵      快速面
-即食麵      快速面
-泡麵 快速面
-蹦极跳      绑紧跳
-笨豬跳      绑紧跳
-凉菜 冷菜
-冷盤 冷菜
-零钱 散钱
-散紙 散钱
-笑星 谐星
-夜校 夜学
-民乐 华乐
-住房 住屋
-房价 屋价
-榴莲 榴梿
-榴蓮 榴梿
\ No newline at end of file
diff --git a/includes/zhtable/toSimp.manual b/includes/zhtable/toSimp.manual
deleted file mode 100644 (file)
index 739d04c..0000000
+++ /dev/null
@@ -1,165 +0,0 @@
-乾县 乾县
-萧乾 萧乾
-乾断 乾断
-乾图 乾图
-乾纲 乾纲
-乾红 乾红
-乾清宫      乾清宫
-乾仪 乾仪
-乾兴 乾兴
-乾冈 乾冈
-乾刘 乾刘
-乾刚 乾刚
-乾启 乾启
-乾宁 乾宁
-乾岗 乾岗
-乾录 乾录
-乾晖 乾晖
-乾构 乾构
-乾枢 乾枢
-乾栋 乾栋
-乾灵 乾灵
-乾窦 乾窦
-乾笃 乾笃
-乾纽 乾纽
-乾络 乾络
-乾统 乾统
-乾维 乾维
-乾罗 乾罗
-乾荫 乾荫
-乾象历      乾象历
-乾贞 乾贞
-乾贶 乾贶
-乾车 乾车
-乾轴 乾轴
-乾鉴 乾鉴
-乾钧 乾钧
-乾闼 乾闼
-乾顾 乾顾
-乾风 乾风
-乾马 乾马
-乾鹄 乾鹄
-乾鹊 乾鹊
-乾龙 乾龙
-张法乾      张法乾
-旋乾转坤   旋乾转坤
-天道为乾   天道为乾
-易经·乾    易经·乾
-易经乾      易经乾
-乾务 乾务
-黄润乾      黄润乾
-男性为乾   男性为乾
-男为乾      男为乾
-阳为乾      阳为乾
-男性为乾   男性为乾
-男性爲乾   男性为乾
-男为乾      男为乾
-男爲乾      男为乾
-阳为乾      阳为乾
-陽爲乾      阳为乾
-乾一组      乾一组
-乾一坛      乾一坛
-陈乾生      陈乾生
-陈公乾生   陈公乾生
-柳诒徵      柳诒徵
-於夫罗      於夫罗
-於梨华      於梨华
-於潜县      於潜县
-於志贺      於志贺
-憑藉 凭借
-藉端 借端
-藉故 借故
-藉口 借口
-藉助 借助
-藉手 借手
-藉詞 借词
-藉機 借机
-藉此 借此
-藉由 借由
-藉著 借着
-藉着 借着
-沈積 沉积
-沈船 沉船
-沈默 沉默
-沈沒 沉没
-彷彿 仿佛
-項鍊 项链
-肘手鍊足   肘手链足
-鍊子 链子
-鍊條 链条
-拉鍊 拉链
-鉸鍊 铰链
-鍊鎖 链锁
-鎖鍊 锁链
-鐵鍊 铁链
-金鍊 金链
-銀鍊 银链
-鍊錘 链锤
-洗鍊 洗练
-石碁镇      石碁镇
-反覆 反复
-回覆 回复
-答覆 答复
-反反覆覆   反反复复
-重覆 重复
-覆核 复核
-覆查 复查
-鬱姓 鬱姓
-鬱氏 鬱氏
-侏儸紀      侏罗纪
-夥計 伙计
-吳其濬      吴其濬
-吴其濬      吴其濬
-乾泉水      干泉水
-么半群      幺半群
-么元 幺元
-么爹 幺爹
-么叔 幺叔
-么舅 幺舅
-么爸 幺爸
-么媽 幺妈
-么姨 幺姨
-么娘 幺娘
-么孃 幺娘
-幺孃 幺娘
-么妹 幺妹
-么小 幺小
-么姓 幺姓
-么氏 幺氏
-么蛾子      幺蛾子
-幺厮 幺厮
-睪丸 睾丸
-附睪 附睾
-隱睪 隱睾
-麼麼 麽麽
-么麼 幺麽
-么麼小丑   幺麽小丑
-么鳳 幺凤
-么二三      幺二三
-么篇 幺篇
-么謙 幺谦
-麴义 麴义
-乾乾淨淨   干干净净
-乾乾脆脆   干干脆脆
-肉乾乾      肉干干
-魚乾乾      鱼干干
-於于同      於于同
-於乙于同   於乙于同
-閻懷禮      闫怀礼
-醯酱 醯酱
-醯鸡 醯鸡
-醯壶 醯壶
-苧烯 苧烯
-李乾顺      李乾顺
-幹著 干着
-氾濫 泛滥
-显著 显著
-顯著 显著
-標誌著      标志着
-近角聪信   近角聪信
-修鍊 修炼
-米泽瑠美   米泽瑠美
-太閤 太阁
-候覆 候复
-待覆 待复
-批覆 批复
diff --git a/includes/zhtable/toTW.manual b/includes/zhtable/toTW.manual
deleted file mode 100644 (file)
index 1a14e99..0000000
+++ /dev/null
@@ -1,411 +0,0 @@
-”    」
-“    「
-‘    『
-’    』
-着    著
-鈎    鉤
-钩    鉤
-衞 衛
-元凶 元凶
-元兇 元凶
-凶器 凶器
-兇器 凶器
-凶徒 凶徒
-兇徒 凶徒
-凶手 凶手
-兇手 凶手
-凶案 凶案
-兇案 凶案
-凶残 凶殘
-凶殘 凶殘
-兇殘 凶殘
-凶杀 凶殺
-凶殺 凶殺
-兇殺 凶殺
-疑凶 疑凶
-疑兇 疑凶
-真凶 真凶
-真兇 真凶
-缉凶 緝凶
-緝凶 緝凶
-緝兇 緝凶
-行凶 行凶
-行兇 行凶
-行凶后      行凶後
-行凶後      行凶後
-行兇後      行凶後
-买凶 買凶
-買凶 買凶
-買兇 買凶
-追凶 追凶
-追兇 追凶
-逞凶斗狠   逞凶鬥狠
-逞凶鬥狠   逞凶鬥狠
-逞兇鬥狠   逞凶鬥狠
-复苏 復甦
-復蘇 復甦
-缺省 預設
-串行 串列
-串列加速器        串列加速器
-以太网      乙太網
-位图 點陣圖
-例程 常式
-光标 游標
-光盘 光碟
-光驱 光碟機
-全角 全形
-加载 載入
-半角 半形
-变量 變數
-噪声 雜訊
-脱机 離線
-声卡 音效卡
-老字号      老字號
-连字号      連字號
-字号 字型大小
-字库 字型檔
-字段 欄位
-字符 字元
-字符集      字符集
-存盘 存檔
-寻址 定址
-尾注 章節附註
-异步 非同步
-总线 匯流排
-括号 括弧
-接口 介面
-控件 控制項
-权限 許可權
-盘片 碟片
-硅片 矽片
-硅谷 矽谷
-硬盘 硬碟
-磁盘 磁碟
-磁道 磁軌
-程控 程式控制
-远程控制   遠程控制
-遠程控制   遠程控制
-行程控制   行程控制
-流程控制   流程控制
-端口 埠
-算子 運算元
-算法 演算法
-芯片 晶片
-芯片 晶元
-词组 片語
-译码 解碼
-软驱 軟碟機
-快闪存储器        快閃記憶體
-闪存 快閃記憶體
-鼠标 滑鼠
-进制 進位
-交互式      互動式
-仿真 模擬
-优先级      優先順序
-传感 感測
-便携式      攜帶型
-信息论      資訊理論
-写保护      防寫
-分辨率      解析度
-服务器      伺服器
-等于 等於
-局域网      區域網
-扫瞄仪      掃瞄器
-宽带 寬頻
-数据库      資料庫
-奶酪 乳酪
-手电 手電筒
-手电筒      手電筒
-万历 萬曆
-永历 永曆
-词汇 辭彙
-习用 慣用
-元音 母音
-新纪元      新紀元
-新紀元      新紀元
-宋元 宋元
-头球 頭槌
-入球 進球
-粒入球      顆進球
-打门 射門
-火锅盖帽   蓋火鍋
-打印机      印表機
-打印機      印表機
-字节 位元組
-字節 位元組
-打印 列印
-打印 列印
-硬件 硬體
-硬件 硬體
-二极管      二極體
-二極管      二極體
-三极管      三極體
-三極管      三極體
-软件 軟體
-軟件 軟體
-网络 網路
-網絡 網路
-人工智能   人工智慧
-航天飞机   太空梭
-航天大学   航天大學
-穿梭機      太空梭
-因特网      網際網路
-互聯網      網際網路
-机器人      機器人
-機械人      機器人
-移动电话   行動電話
-流動電話   行動電話
-调制解调器        數據機
-調制解調器        數據機
-短信 簡訊
-短訊 簡訊
-乌兹别克斯坦     烏茲別克
-乍得 查德
-乍得 查德
-也门 葉門
-也門 葉門
-伯利兹      貝里斯
-伯利茲      貝里斯
-佛得角      維德角
-克罗地亚   克羅埃西亞
-克羅地亞   克羅埃西亞
-冈比亚      甘比亞
-岡比亞      甘比亞
-几内亚比绍        幾內亞比索
-幾內亞比紹        幾內亞比索
-列支敦士登        列支敦斯登
-列支敦士登        列支敦斯登
-利比里亚   賴比瑞亞
-利比里亞   賴比瑞亞
-加纳 迦納
-加納 迦納
-加蓬 加彭
-加蓬 加彭
-博茨瓦纳   波札那
-博茨瓦納   波札那
-卡塔尔      卡達
-卡塔爾      卡達
-卢旺达      盧安達
-盧旺達      盧安達
-危地马拉   瓜地馬拉
-危地馬拉   瓜地馬拉
-厄瓜多尔   厄瓜多
-厄瓜多爾   厄瓜多
-厄立特里亚        厄利垂亞
-厄立特里亞        厄利垂亞
-吉布提      吉布地
-吉布堤      吉布地
-哈萨克斯坦        哈薩克
-哥斯达黎加        哥斯大黎加
-哥斯達黎加        哥斯大黎加
-图瓦卢      吐瓦魯
-圖瓦盧      吐瓦魯
-土库曼斯坦        土庫曼
-圣卢西亚   聖露西亞
-聖盧西亞   聖露西亞
-圣基茨和尼维斯  聖克里斯多福及尼維斯
-聖吉斯納域斯     聖克里斯多福及尼維斯
-圣文森特和格林纳丁斯 聖文森及格瑞那丁
-聖文森特和格林納丁斯 聖文森及格瑞那丁
-圣马力诺   聖馬利諾
-聖馬力諾   聖馬利諾
-圭亚那      蓋亞那
-圭亞那      蓋亞那
-坦桑尼亚   坦尚尼亞
-坦桑尼亞   坦尚尼亞
-埃塞俄比亚        衣索比亞
-埃塞俄比亞        衣索比亞
-基里巴斯   吉里巴斯
-基里巴斯   吉里巴斯
-塔吉克斯坦        塔吉克
-塞拉利昂   獅子山
-塞拉利昂   獅子山
-塞浦路斯   塞普勒斯
-塞浦路斯   塞普勒斯
-塞舌尔      塞席爾
-塞舌爾      塞席爾
-多米尼加共和国  多明尼加
-多米尼加共和國  多明尼加
-多明尼加共和國  多明尼加
-多米尼加国        多米尼克
-多明尼加國        多米尼克
-安提瓜和巴布达  安地卡及巴布達
-安提瓜和巴布達  安地卡及巴布達
-尼日利亚   奈及利亞
-尼日利亞   奈及利亞
-尼日尔      尼日
-尼日爾      尼日
-巴巴多斯   巴貝多
-巴布亚新几内亚  巴布亞紐幾內亞
-巴布亞新畿內亞  巴布亞紐幾內亞
-布基纳法索        布吉納法索
-布基納法索        布吉納法索
-布隆迪      蒲隆地
-布隆迪      蒲隆地
-帕劳 帛琉
-意大利      義大利
-所罗门群岛        索羅門群島
-所羅門群島        索羅門群島
-文莱 汶萊
-斯威士兰   史瓦濟蘭
-斯威士蘭   史瓦濟蘭
-斯洛文尼亚        斯洛維尼亞
-斯洛文尼亞        斯洛維尼亞
-新西兰      紐西蘭
-新西蘭      紐西蘭
-格林纳达   格瑞那達
-格林納達   格瑞那達
-格鲁吉亚   喬治亞
-格魯吉亞   喬治亞
-佐治亚      喬治亞
-佐治亞      喬治亞
-毛里塔尼亚        茅利塔尼亞
-毛里塔尼亞        茅利塔尼亞
-毛里求斯   模里西斯
-毛里裘斯   模里西斯
-沙特阿拉伯        沙烏地阿拉伯
-沙地阿拉伯        沙烏地阿拉伯
-波斯尼亚和黑塞哥维那 波士尼亞赫塞哥維納
-波斯尼亞黑塞哥維那    波士尼亞赫塞哥維納
-津巴布韦   辛巴威
-津巴布韋   辛巴威
-洪都拉斯   宏都拉斯
-洪都拉斯   宏都拉斯
-特立尼达和托巴哥       千里達托貝哥
-特立尼達和多巴哥       千里達托貝哥
-瑙鲁 諾魯
-瑙魯 諾魯
-瓦努阿图   萬那杜
-瓦努阿圖   萬那杜
-溫納圖萬   那杜
-科摩罗      葛摩
-科摩羅      葛摩
-科特迪瓦   象牙海岸
-突尼斯      突尼西亞
-索马里      索馬利亞
-索馬里      索馬利亞
-老挝 寮國
-老撾 寮國
-肯尼亚      肯亞
-肯雅 肯亞
-苏里南      蘇利南
-莫桑比克   莫三比克
-莱索托      賴索托
-萊索托      賴索托
-贝宁 貝南
-貝寧 貝南
-赞比亚      尚比亞
-贊比亞      尚比亞
-阿塞拜疆   亞塞拜然
-阿拉伯联合酋长国       阿拉伯聯合大公國
-阿拉伯聯合酋長國       阿拉伯聯合大公國
-马尔代夫   馬爾地夫
-馬爾代夫   馬爾地夫
-马耳他      馬爾他
-马里共和国        馬利共和國
-馬里共和國        馬利共和國
-方便面      速食麵
-快速面      速食麵
-即食麵      速食麵
-薯仔 土豆
-土豆网      土豆網
-土豆網      土豆網
-蹦极跳      笨豬跳
-绑紧跳      笨豬跳
-冷菜 冷盤
-凉菜 冷盤
-出租车      計程車
-台球 撞球
-桌球 撞球
-卫生 衛生
-衞生 衛生
-平治之亂   平治之亂
-平治之乱   平治之亂
-平治 賓士
-奔驰 賓士
-積架 捷豹
-雪铁龙      雪鐵龍
-萬事得      馬自達
-拿破仑      拿破崙
-拿破侖      拿破崙
-布什 布希
-布殊 布希
-克林顿      柯林頓
-克林頓      柯林頓
-侯赛因      海珊
-侯賽因      海珊
-凡高 梵谷
-狄安娜      黛安娜
-戴安娜      黛安娜
-颁布 頒布
-頒佈 頒布
-彩带 彩帶
-彩排 彩排
-彩楼 彩樓
-彩牌楼      彩牌樓
-彩球 綵球
-彩绸 綵綢
-彩线 綵線
-彩船 綵船
-彩衣 綵衣
-结彩 結綵
-戏彩娱亲   戲綵娛親
-剪彩 剪綵
-榴莲 榴槤
-榴蓮 榴槤
-掛鈎 掛鉤
-挂钩 掛鉤
-鈎心鬥角   鉤心鬥角
-钩心斗角   鉤心鬥角
-酰    醯
-雪裏紅      雪裡紅
-雪裏蕻      雪裡蕻
-森林裏      森林裡
-日子裏      日子裡
-故事裏      故事裡
-領域裏      領域裡
-時間裏      時間裡
-深淵裏      深淵裡
-醫院裏      醫院裡
-春假裏      春假裡
-暑假裏      暑假裡
-秋假裏      秋假裡
-寒假裏      寒假裡
-春天裏      春天裡
-夏天裏      夏天裡
-秋天裏      秋天裡
-冬天裏      冬天裡
-春日裏      春日裡
-夏日裏      夏日裡
-秋日裏      秋日裡
-冬日裏      冬日裡
-百科裏      百科裡
-歷史裏      歷史裡
-戲裏 戲裡
-作品裏      作品裡
-專輯裏      專輯裡
-年代裏      年代裡
-棺材裏      棺材裡
-嘴裏 嘴裡
-心裏 心裡
-皮裏陽秋   皮裡陽秋
-肚裏 肚裡
-苦裏 苦裡
-裏勾外連   裡勾外連
-裏面 裡面
-這裏 這裡
-點裏 點裡
-中文裏      中文裡
-山洞裏      山洞裡
-世界裏      世界裡
-眼睛裏      眼睛裡
-學裏 學裡
-獄裏 獄裡
-館裏 館裡
-系列裏      系列裡
-村子裏      村子裡
-青霉素      青黴素
-想象 想像
-锎    鉲
-信道 信道
-綫    線
diff --git a/includes/zhtable/toTrad.manual b/includes/zhtable/toTrad.manual
deleted file mode 100644 (file)
index b0efd28..0000000
+++ /dev/null
@@ -1,186 +0,0 @@
-手塚治虫   手塚治虫
-校仇 校讎
-仇校 讎校
-仇夷 讎夷
-仇問 讎問
-無言不仇   無言不讎
-視如寇仇   視如寇讎
-往日無仇   往日無讎
-近日無仇   近日無讎
-李連杰      李連杰
-周杰倫      周杰倫
-寶曆 寶曆
-涂謹申      涂謹申
-涂鴻欽      涂鴻欽
-涂壯勳      涂壯勳
-於姓 於姓
-於氏 於氏
-於夫羅      於夫羅
-於梨華      於梨華
-鄭凱云      鄭凱云
-筑陽 筑陽
-筑後 筑後
-采石磯      采石磯
-采石之戰   采石之戰
-張三丰      張三丰
-丰韻 丰韻
-丰儀 丰儀
-丰標不凡   丰標不凡
-干細胞      幹細胞
-干熱 乾熱
-二里頭      二里頭
-水里鄉      水里鄉
-蒙胧 朦朧
-酒曲 酒麴
-呆里呆气   呆裡呆氣
-拜托 拜託
-委托书      委託書
-委托 委託
-挽詞 輓詞
-挽聯 輓聯
-挽詩 輓詩
-於夫罗      於夫羅
-府干預      府干預
-府干擾      府干擾
-分布圖      分布圖
-頁面 頁面
-面條目      面條目
-黃鈺筑      黃鈺筑
-仿佛 彷彿
-凶殘 兇殘
-凶殺 兇殺
-緝凶 緝兇
-行凶後      行兇後
-買凶 買兇
-逞凶鬥狠   逞兇鬥狠
-合著者      合著者
-答复 答覆
-反复 反覆
-索馬里      索馬里
-洗练 洗鍊
-朝乾夕惕   朝乾夕惕
-乾象曆      乾象曆
-乾象历      乾象曆
-不好干預   不好干預
-不干預      不干預
-不干擾      不干擾
-不干牠      不干牠
-矽谷 矽谷
-范文瀾      范文瀾
-發表 發表
-機械系      機械系
-頂多 頂多
-馬占山      馬占山
-叱咤樂壇   叱咤樂壇
-闫怀礼      閆懷禮
-变髒 變髒
-薴烯 薴烯
-后豐 后豐
-于謙 于謙
-詩云 詩云
-鄭凱云      鄭凱云
-云為 云為
-古書云      古書云
-古語云      古語云
-經有云      經有云
-語有云      語有云
-显著标志   顯著標志
-占領 佔領
-采納 採納
-風采 風采
-于樂 于樂
-于軍 于軍
-于堅 于堅
-于帥 于帥
-于濤 于濤
-于贈 于贈
-于會泳      于會泳
-于偉國      于偉國
-于光遠      于光遠
-于鳳至      于鳳至
-于台煙      于台煙
-于國楨      于國楨
-于大寶      于大寶
-于學忠      于學忠
-于小偉      于小偉
-于山國      于山國
-于幼軍      于幼軍
-于廣洲      于廣洲
-于從濂      于從濂
-于志寧      于志寧
-于成龍      于成龍
-于明濤      于明濤
-于根偉      于根偉
-于樹潔      于樹潔
-于正昇      于正昇
-于漢超      于漢超
-于洪區      于洪區
-于湘蘭      于湘蘭
-于蔭霖      于蔭霖
-于遠偉      于遠偉
-于都縣      于都縣
-于震寰      于震寰
-于震環      于震環
-于非闇      于非闇
-于風政      于風政
-于鳳桐      于鳳桐
-于默奧      于默奧
-于爾岑      于爾岑
-于默奧      于默奧
-于貝爾      于貝爾
-于爾根      于爾根
-于雙戈      于雙戈
-于澤爾      于澤爾
-于斯達爾   于斯達爾
-于爾里克   于爾里克
-于奇庫杜克        于奇庫杜克
-于韋斯屈萊        于韋斯屈萊
-于克-蘭多縣       于克-蘭多縣
-于斯納爾斯貝里  于斯納爾斯貝里
-夏于喬      夏于喬
-涂澤民      涂澤民
-涂長望      涂長望
-涂敏恆      涂敏恆
-台历 枱曆
-艷后 艷后
-廢后 廢后
-后髮座      后髮座
-后髮星系團        后髮星系團
-后髮FK型星 后髮FK型星
-后海灣      后海灣
-賈后 賈后
-賢后 賢后
-呂后 呂后
-蟻后 蟻后
-馬格里布   馬格里布
-佳里鎮      佳里鎮
-埔裡社撫墾局     埔裏社撫墾局
-埔裏社撫墾局     埔裏社撫墾局
-有只採      有只採
-任何表達   任何表達
-會干擾      會干擾
-党項 党項
-余三勝      余三勝
-簡筑翎      簡筑翎
-楊雅筑      楊雅筑
-杰威爾音樂        杰威爾音樂
-尸羅精舍   尸羅精舍
-索馬里      索馬里
-騰格里      騰格里
-村里長      村里長
-進制 進制
-模范三軍   模范三軍
-黃詩杰      黃詩杰
-陳冲 陳冲
-劉佳怜      劉佳怜
-范賢惠      范賢惠
-于國治      于國治
-于楓 于楓
-黎吉雲      黎吉雲
-于飛島      于飛島
-鄉愿 鄉愿
-奇迹 奇蹟
-候复 候覆
-待复 待覆
-批复 批覆
-划槳 划槳
diff --git a/includes/zhtable/trad2simp.manual b/includes/zhtable/trad2simp.manual
deleted file mode 100644 (file)
index 747a240..0000000
+++ /dev/null
@@ -1,153 +0,0 @@
-U+04E99亙|U+04E98亘|
-U+04F48佈|U+05E03布|
-U+04F48佈|U+05E03布|
-U+04F54佔|U+05360占|
-U+05016倖|U+05E78幸|
-U+050A2傢|U+05BB6家|
-U+050F1僱|U+096C7雇|
-U+05138儸|U+03469㑩|U+07F57罗|
-U+05147兇|U+051F6凶|
-U+05277剷|U+094F2铲|
-U+052F3勳|U+052CB勋|
-U+0537D卽|U+05373即|
-U+053A4厤|U+05386历|
-U+055AB喫|U+05403吃|
-U+05641噁|U+06076恶|
-U+05690嚐|U+05C1D尝|
-U+056A5嚥|U+054BD咽|
-U+056AE嚮|U+05411向|
-U+056CC囌|U+082CF苏|
-U+0585A塚|U+051A2冢|
-U+058B0墰|U+0575B坛|
-U+058DC壜|U+0575B坛|
-U+05925夥|U+04F19伙|
-U+05BC0寀|U+091C7采|
-U+05D11崑|U+06606昆|
-U+05D19崙|U+04ED1仑|
-U+05D57嵗|U+05C81岁|
-U+05DBD嶽|U+05CB3岳|
-U+05DD6巖|U+05CA9岩|
-U+05DF9巹|U+0537A卺|
-U+05F14弔|U+0540A吊|
-U+05F46彆|U+0522B别|
-U+0617C慼|U+0621A戚|
-U+0617E慾|U+06B32欲|
-U+061DE懞|U+08499蒙|
-U+062DA拚|U+062FC拼|
-U+06331挱|U+06332挲|
-U+06371捱|U+06328挨|
-U+06372捲|U+05377卷|
-U+0647A摺|U+06298折|
-U+065C2旂|U+065D7旗|
-U+065E3旣|U+065E2既|
-U+06607昇|U+05347升|
-U+0672E朮|U+0672F术|
-U+068CA棊|U+068CB棋|
-U+069A6榦|U+05E72干|
-U+069D3槓|U+06760杠|
-U+06A11樑|U+06881梁|
-U+06B05欅|U+06989榉|
-U+06B4E歎|U+053F9叹|
-U+06BAD殭|U+050F5僵|
-U+06C59汙|U+06C61污|
-U+06CDD泝|U+06EAF溯|
-U+06D29洩|U+06CC4泄|
-U+06DD2淒|U+051C4凄|
-U+06DE8淨|U+051C0净|
-U+06DE9淩|U+051CC凌|
-U+06E67湧|U+06D8C涌|
-U+06ED9滙|U+06C47汇|
-U+06F90澐|U+06C84沄|
-U+06FBE澾|U+03CE0㳠|
-U+06FDB濛|U+06FDB濛|U+08499蒙|
-U+07030瀰|U+05F25弥|
-U+071EC燬|U+06BC1毁|
-U+07232爲|U+04E3A为|
-U+07343獃|U+05446呆|
-U+07515甕|U+074EE瓮|
-U+07526甦|U+082CF苏|
-U+0752F甯|U+05B81宁|
-U+0756B畫|U+0753B画|U+05212划|
-U+07575畵|U+0753B画|U+05212划|
-U+075E0痠|U+09178酸|
-U+07652癒|U+06108愈|
-U+07661癡|U+075F4痴|
-U+076C3盃|U+0676F杯|
-U+0771E眞|U+0771F真|
-U+077AD瞭|U+04E86了|
-U+077C7矇|U+08499蒙|
-U+07843硃|U+06731朱|
-U+07895碕|U+057FC埼|
-U+07958祘|U+07B97算|
-U+07A1C稜|U+068F1棱|
-U+07B87箇|U+04E2A个|
-U+07C11簑|U+084D1蓑|
-U+07C64籤|U+07B7E签|
-U+07C72籲|U+05401吁|
-U+07CF0糰|U+056E2团|
-U+07D2E紮|U+0624E扎|
-U+07DAB綫|U+07EBF线|
-U+07DB5綵|U+05F69彩|U+0433D䌽|
-U+07E34縴|U+07EA4纤|
-U+07E50繐|U+07A57穗|
-U+07E94纔|U+0624D才|
-U+07F4E罎|U+0575B坛|
-U+07FA8羨|U+07FA1羡|
-U+08123脣|U+05507唇|
-U+081E5臥|U+05367卧|
-U+08218舘|U+09986馆|
-U+083F4菴|U+05EB5庵|
-U+08457著|U+08457著|U+07740着|
-U+08518蔘|U+053C2参|
-U+08591薑|U+059DC姜|
-U+085C9藉|U+085C9藉|U+0501F借|
-U+0880D蠍|U+0874E蝎|
-U+0884A衊|U+08511蔑|
-U+088CF裏|U+091CC里|
-U+08946襆|U+05E5E幞|
-U+08986覆|U+08986覆|U+0590D复|
-U+08A17託|U+06258托|U+08BAC讬|
-U+08AEE諮|U+054A8咨|U+08C18谘|
-U+08B6D譭|U+06BC1毁|
-U+08B8E讎|U+04EC7仇|
-U+08B9A讚|U+08D5E赞|
-U+08C54豔|U+08273艳|
-U+08FF4迴|U+056DE回|
-U+09031週|U+05468周|
-U+0904A遊|U+06E38游|
-U+09061遡|U+06EAF溯|
-U+091A3醣|U+07CD6糖|
-U+091AF醯|U+09170酰|
-U+0934A鍊|U+070BC炼|U+094FE链|
-U+0938C鎌|U+09570镰|
-U+093AD鎭|U+093AE镇|
-U+093DA鏚|U+0621A戚|
-U+09451鑑|U+09274鉴|
-U+0955F镟|U+065CB旋|
-U+09592閒|U+095F2闲|
-U+095A4閤|U+05408合|
-U+095E2闢|U+08F9F辟|
-U+0962A阪|U+0962A阪|U+05742坂|
-U+0965E陞|U+05347升|
-U+097A6鞦|U+079CB秋|U+097A7鞧|
-U+097C6韆|U+05343千|
-U+097DD韝|U+097B2鞲|
-U+09858願|U+0613F愿|
-U+098F1飱|U+098E7飧|
-U+09918餘|U+04F59余|U+09980馀|
-U+09931餱|U+07CC7糇|
-U+09935餵|U+05582喂|
-U+09B28鬨|U+054C4哄|
-U+09D70鵰|U+096D5雕|U+05F6B彫|
-U+09E7C鹼|U+078B1碱|U+07877硷|
-U+09EAA麪|U+09762面|
-U+09EAB麫|U+09762面|
-U+09EAF麯|U+066F2曲|
-U+09EB4麴|U+066F2曲|U+09EB4麴|
-U+09EF4黴|U+09709霉|
-U+09F15鼕|U+051AC冬|
-U+09F47齇|U+09F44齄|
-U+09F63齣|U+051FA出|
-U+09F91龑|U+04DAE䶮|
-U+21ED5𡻕|U+05C81岁|
-U+298F5𩣵|U+299FB𩧻|
diff --git a/includes/zhtable/trad2simp_noconvert.manual b/includes/zhtable/trad2simp_noconvert.manual
deleted file mode 100644 (file)
index 052bab6..0000000
+++ /dev/null
@@ -1,5 +0,0 @@
-"余"=>
-碁
-藉
-=>"獃"
-𫚭
diff --git a/includes/zhtable/trad2simp_supp_set.manual b/includes/zhtable/trad2simp_supp_set.manual
deleted file mode 100644 (file)
index d1728f0..0000000
+++ /dev/null
@@ -1,3 +0,0 @@
-著    着
-藉    借
-濛    蒙
\ No newline at end of file
diff --git a/includes/zhtable/trad2simp_supp_unset.manual b/includes/zhtable/trad2simp_supp_unset.manual
deleted file mode 100644 (file)
index e69de29..0000000
diff --git a/includes/zhtable/tradphrases.manual b/includes/zhtable/tradphrases.manual
deleted file mode 100644 (file)
index e20ca05..0000000
+++ /dev/null
@@ -1,4311 +0,0 @@
-零隻
-〇隻
-一隻
-二隻
-兩隻
-三隻
-四隻
-五隻
-六隻
-七隻
-八隻
-九隻
-0隻
-1隻
-2隻
-3隻
-4隻
-5隻
-6隻
-7隻
-8隻
-9隻
-0隻
-1隻
-2隻
-3隻
-4隻
-5隻
-6隻
-7隻
-8隻
-9隻
-0只支援
-1只支援
-2只支援
-3只支援
-4只支援
-5只支援
-6只支援
-7只支援
-8只支援
-9只支援
-0只支持
-1只支持
-2只支持
-3只支持
-4只支持
-5只支持
-6只支持
-7只支持
-8只支持
-9只支持
-百隻
-千隻
-萬隻
-億隻
-最多
-至多
-頂多
-多隻
-0多隻
-0多隻
-零多隻
-十多隻
-百多隻
-千多隻
-萬多隻
-億多隻
-這只能
-這只可
-這只在
-這只是
-這只需
-這只會
-這只用
-那只能
-那只可
-那只在
-那只是
-那只需
-那只會
-那只用
-多只能
-多只可
-多只在
-多只有
-多只是
-多只需
-多只會
-多只用
-大只能
-大只可
-大只在
-大只有
-大只是
-大只需
-大只會
-小只能
-小只可
-小只在
-小只有
-小只是
-小只需
-小只會
-隻身
-形單影隻
-首隻
-數天後
-幾天後
-多天後
-零天後
-一天後
-二天後
-兩天後
-三天後
-四天後
-五天後
-六天後
-七天後
-八天後
-九天後
-十天後
-百天後
-千天後
-萬天後
-億天後
-0天後
-1天後
-2天後
-3天後
-4天後
-5天後
-6天後
-7天後
-8天後
-9天後
-0天後
-1天後
-2天後
-3天後
-4天後
-5天後
-6天後
-7天後
-8天後
-9天後
-天後來
-天後天
-天後半
-後印
-萬象
-並存著
-乾絲
-乾著急
-乾魚
-魚乾
-乾梅
-糕乾
-黃乾黑瘦
-馬乾
-香乾
-趲幹
-謀幹
-詞幹
-蟶乾
-薄幹
-腦幹
-營幹
-老乾
-老幹部
-管幹
-盲幹
-煨乾
-海乾
-乾漆
-淚乾
-沒幹
-沒乾沒淨
-枝不得大於榦
-杯乾
-打幹
-打乾噦
-徐幹
-府幹
-乾館
-乾顙
-幹革命
-乾霍亂
-乾雷
-乾阿奶
-乾量
-乾醋
-乾逼
-乾貨
-乾衣
-幹蠱
-乾虔
-乾落
-幹營生
-乾茶錢
-乾茨臘
-乾苔
-乾花
-乾肥
-乾耗
-幹缺
-乾繃
-乾結
-乾餱
-乾篾片
-乾稿
-乾禮
-乾瞪眼
-乾白兒
-乾疥
-乾生子
-乾生受
-幹父之蠱
-乾熬
-乾燈盞
-乾濕
-乾澀
-幹濟
-乾沒
-乾死
-乾村沙
-乾暖
-乾料
-乾敲梆子不賣油
-乾支支
-乾支剌
-乾擦
-乾撇下
-乾撂台
-乾折
-乾急
-幹當
-乾式
-乾屎橛
-幹家
-乾奴才
-幹頭
-乾塢
-乾圓潔淨
-乾回付
-乾啼
-乾哭
-乾噦
-乾咽
-乾和
-幹吏
-乾吊著下巴
-乾號
-乾颱
-乾卦
-乾剝剝
-乾刻版
-乾芻
-幹人
-乾產
-乾喬
-夯幹
-大目乾連
-國之楨榦
-唇乾
-單幹
-勾幹
-豆乾
-果乾
-如果幹
-乾麵
-乾柴
-枯乾
-晒乾
-顛乾倒坤
-強幹
-乾著
-乾眼
-幹的停當
-乾巴
-偎乾
-眼乾
-偷雞不著
-几絲
-划著
-划著走
-別著
-刮著
-千絲萬縷
-參合
-參考價值
-參與
-參與人員
-參與制
-參與感
-參與者
-參觀團
-參觀團體
-參閱
-吃著不盡
-合著
-吊帶褲
-吊掛著
-吊著
-吊褲
-吊褲帶
-向著
-嚴絲合縫
-回絲
-回著
-塗著
-壟斷價格
-壟斷資產
-壟斷集團
-姜絲
-帶團參加
-干著急
-幾絲
-彆著
-怎麼著
-憑藉著
-憑藉
-接著說
-擔著
-擔負著
-敘說著
-斗轉參橫
-旋繞著
-板著臉
-正當著
-沈著
-沖著
-派團參加
-涂著
-湊合著
-瀰漫著
-為著
-煙斗絲
-率團參加
-畫著
-當著
-發著
-直接參与
-睡著了
-秋褲
-積极參与
-積极參加
-簽著
-系著
-絕對參照
-絲來線去
-絲布
-絲板
-絲瓜布
-絲絨布
-絲線
-絲織廠
-絲蟲
-緊繃著
-繃著
-繃著臉
-繃著臉兒
-繫著
-罵著
-肉絲麵
-背向著
-菌絲體
-著兒
-著書立說
-著色軟體
-著重指出
-著錄
-著錄規則
-薑絲
-藉著
-蘊含著
-蘊涵著
-衝著
-被覆著
-覆著
-覆蓋著
-反覆
-訴說著
-說著
-請參閱
-謝絕參觀
-豎著
-豐濱
-豐濱鄉
-豐度
-象徵著
-這麼著
-那麼著
-配合著
-醞釀著
-錄著
-鍛鍊出
-關係著
-雞絲
-雞絲麵
-面朝著
-面臨著
-颳著
-髮絲
-斷髮
-不斷發
-判斷發
-評斷發
-買斷發
-賣斷發
-打斷發
-披頭散髮
-髮禁
-鬥著
-鬧著玩兒
-鯰魚
-世界盃
-其次辟地
-開闢
-闢地
-精闢
-別闢
-另闢
-闢佛
-闢田
-闢築
-闢謠
-闢辟
-透闢
-墾闢
-翕闢
-軒闢
-闢建
-闢室
-各闢
-增闢
-闢邪以律
-錶盤
-錶板
-錶帶
-錶針
-錶蒙子
-袋錶
-腕錶
-碼錶
-錶冠
-魔錶
-彆口氣
-彆強
-皺彆
-一彆頭
-并州
-併兼
-併產
-併骨
-併網
-併線
-併流
-逼併
-併名
-併當
-併火
-併肩子
-併除
-併疊
-忙併
-打併
-簡併
-並發表
-並發現
-並發展
-並發動
-並發布
-火並非
-舉手表
-揮手表
-併一不二
-連三併四
-相併
-撤併
-數罪併罰
-催併
-狂併潮
-薝蔔
-提摩太後書
-當家纔知柴米價
-剛纔一載
-裏海
-骨頭裡掙出來的錢纔做得肉
-恰纔
-遠縣纔至
-別日南鴻纔北去
-然身死纔數月耳
-纔得兩年
-纔則
-纔此
-你纔子發昏
-纔可容顏十五餘
-不採
-披榛採蘭
-謬採虛聲
-採樵人
-回採
-觀採
-開採
-揪採
-樵採
-採訪
-採辦
-採補
-採買
-採風問俗
-採納
-採獵
-採蓮
-採錄
-採購
-採光
-採礦
-採花
-採集
-採擷
-採掘
-採芹人
-採取
-採選
-採摭
-採摘
-採珠
-採種
-採茶
-採石
-採拾
-採收
-採生折割
-採樹種
-採擇
-採藥
-採薇
-採用
-盜採
-採信
-採行
-採證
-採菊
-博採
-採空採穗
-採挖
-採鐵
-採金
-採氣
-採油
-採煤
-採鹽
-採區
-採運
-採風
-官地為寀
-寮寀
-蔘綏
-個人# “個人參數”不是“個人蔘數”
-人蔘
-蕭蔘
-人參與
-人參選
-人參觀
-人參考
-人參展
-人參加
-人參議
-人參謀
-人參酌
-人參照
-人參政
-人參戰
-人參拜
-人參閱
-人參禪
-人參贊
-人參見
-人參透
-人參看
-東衝西突
-天克地衝
-六衝
-撞陣衝軍
-衝波
-衝風
-衝頭陣
-衝堅陷陣
-衝陷
-衝心
-衝州撞府
-衝殺
-衝然
-衝盹
-左衝右突
-虫部
-手塚治虫
-群醜
-百拙千醜
-大醜
-地醜德齊
-丟醜
-亮醜
-揭醜
-倛醜
-嫌好道醜
-醜巴怪
-醜末
-醜婦
-醜地
-醜頭怪臉
-醜女效顰
-醜剌剌
-醜話
-醜媳
-醜吒
-醜聲遠播
-醜夷
-弄醜
-露醜
-摧堅獲醜
-謷醜
-不嫌母醜
-一爭兩醜
-惡直醜正
-很醜
-醜男
-醜斃了
-醜奴兒
-醜言
-醜徒
-醜雜
-醜儕
-醜沮
-醜辭
-醜比
-醜辱
-醜逆
-醜史
-醜賊生
-醜婆子
-出乖弄醜
-出乖露醜
-獲匪其醜
-乙丑
-丁丑
-己丑
-辛丑
-癸丑
-丑時
-丑日
-丑月
-丑年
-文丑
-武丑
-女丑
-小丑
-大丑
-丑婆子
-丑旦
-丑角
-丑三
-丑表功
-公孫丑
-么麼小丑
-齣電影
-齣電視
-齣動畫
-齣節目
-齣卡通
-齣戲
-齣劇
-平平當當
-滿滿當當
-當當丁丁
-丁丁當當
-停停當當
-快快當當
-咯噹
-啷噹
-党參
-党進
-党太尉
-党項
-撲鼕
-洗髮
-牽一髮
-白發其事
-后髮座
-后髮星系團
-后髮FK型星
-波髮藻
-辮髮
-逋髮
-抿髮
-髮漂
-髮匪
-髮腳
-髮癬
-髮釵
-髮飾
-髮紗
-髮上指冠
-髮上沖冠
-髮乳
-髮引千鈞
-髮踴沖冠
-董氏封髮
-胎髮
-禿妃之髮
-捉髮
-綠髮
-括髮
-髡髮
-鵠髮
-截髮
-解髮佯狂
-淨髮
-秋髮
-噙齒戴髮
-青山一髮
-晞髮
-細不容髮
-心細如髮
-祝髮
-擢髮
-齒髮
-齒危髮秀
-沖冠髮怒
-甩髮
-絲髮
-絲恩髮怨
-蒜髮
-算髮
-有髮頭陀寺
-髮箋
-髮屋
-櫛髮工
-鬒髮
-模范棒棒堂
-模范三軍
-模范七棒
-模范14棒
-模范21棒
-顏範
-儀範
-典範
-坤範
-壼範
-容範
-懿範
-明範
-格範
-模範
-樣範
-母範
-洪範
-淑範
-遺範
-科範
-立範
-貽範
-道範
-閨範
-閫範
-雅範
-霽範
-鴻範
-沒樣範
-錢範
-銅範
-金範
-範金
-垂範
-範性形變
-範字
-有事之無範
-置言成範
-吾爲之範我馳驅
-天地為範
-範數
-丰采
-丰標不凡
-丰神
-丰茸
-丰儀
-丰度
-丰情
-丰韵
-子之丰兮
-艸木丰丰
-張三丰
-復始
-複分析
-複輔音
-複元音
-複平面
-複函數
-複流
-反複製
-複對數
-顛覆
-答覆
-覆沒
-覆亡
-覆水難收
-翻雲覆雨
-覆雨翻雲
-覆轍
-覆巢之下無完卵
-覆蓋
-覆命
-天翻地覆
-天覆地載
-撥穀
-扁擬穀盜蟲
-不穀
-辟穀
-米穀
-田穀
-脫穀機
-年穀
-礱穀機
-孤寡不穀
-穀米
-穀旦
-穀圭
-穀貴餓農
-穀食
-穀日
-館穀
-禾穀
-積穀
-嘉穀
-嚼穀
-九穀
-戩穀
-錢穀
-息穀
-殖穀
-川穀
-曬穀
-臧穀亡羊
-種穀
-颳雪
-刮風下雪倒便宜
-广部
-亂鬨不過來
-斗鬨
-亂鬨
-開鬨
-花鬨
-鬨動
-交鬨
-喧鬨
-起鬨
-內鬨
-於後
-猜三划五
-划龍舟
-南迴線
-南迴鐵路
-北迴線
-北迴鐵路
-文匯報
-河流匯集
-品彙
-博彙
-滙豐
-伙頭
-方几
-伏几
-高几
-雪窗螢几
-燕几
-隱几
-饑饉
-乾薑
-毛薑
-薑母
-薑湯
-薑桂
-薑是老的辣
-吃薑
-薑老辣
-野薑
-咬薑呷醋
-薑蓉
-薑黃
-狐藉虎威
-滑藉
-藉寇兵
-藉箸代籌
-藉手
-藉此
-龍捲
-捲舌
-夸父
-夸克
-夸特
-夸毗
-夸麗
-夸姣
-夸人
-夸容
-大言非夸
-言大而夸
-睏覺
-愛睏
-纍堆
-纍紲
-纍臣
-纍瓦結繩
-湘纍
-印纍綬若
-灕湘
-灕然
-澤滲灕而下降
-裏勾外連
-裏手
-水里鄉
-水里溪
-水里濁水溪
-二里頭
-年歷史
-西歷史
-國歷史
-國歷代
-國歷任
-國歷屆
-國歷經
-國歷來
-新歷史
-夏歷史
-百花曆
-寶曆
-穆罕默德曆
-大明曆
-大曆
-台曆
-太初曆
-通曆
-曆本
-曆命
-曆紀
-曆始
-曆室
-曆日
-曆尾
-曆元
-律曆志
-官曆
-回曆
-巧曆
-慶曆
-朱理安曆
-長曆
-藏曆
-四分曆
-三統曆
-額我略曆
-埃及曆
-伊斯蘭教曆
-合曆
-玉曆
-農民曆
-桌曆
-商曆
-周曆
-大衍曆
-皇極曆
-儒略改革曆
-希伯來曆
-格里曆
-格里高利曆
-共和曆
-掛曆
-曆獄
-天文曆表
-日心曆表
-地心曆表
-復活節曆表
-月球曆表
-伊爾汗曆表
-延曆
-共和歷史
-厤物之意
-爰定祥厤
-白黴
-黴黧
-黴黑
-麴黴
-蒙霧露
-懞懞懂懂
-懞直
-老懞
-放懞掙
-矇著
-矇聵
-矇瞍
-矇事
-矇頭轉
-矇松雨
-藏矇歌兒
-矇著鍋兒
-朦朧
-濛濛細雨
-濛汜
-冥濛
-溟濛
-淡濛濛
-凌濛初
-涳濛
-灰濛濛
-澒濛
-瀰山遍野
-瀰瀰
-冷麵
-撈麵
-煮麵
-炆麵
-煎麵
-泡麵
-食麵
-公仔麵
-方便麵
-白粉麵
-棒子麵
-麵缸
-麵坯兒
-麵碼兒
-麵坊
-麵湯
-麵疙瘩
-麵館
-麵漿
-甜水麵
-麵人兒
-麵塑
-捏麵人
-趕麵棍
-擀麵
-過水麵
-蕎麥麵
-巧婦做不得無麵餺飥
-削麵
-小米麵
-壯麵
-吃板刀麵
-吃辣麵
-扯麵
-搋麵
-重羅麵
-雜麵
-雜合麵兒
-溲麵
-索麵
-一鍋麵
-伊府麵
-藥麵兒
-意大利麵
-湯下麵
-茶麵
-麵糰
-冷面相
-糞穢衊面
-湟潦生苹
-食野之苹
-苹縈
-青苹
-青蘋果
-僕僕
-有僕
-冉有僕
-屢顧爾僕
-僕少
-僕雖罷駑
-僕夫
-僕僮
-僕吏
-僕姑
-僕固懷恩
-僕程
-僕使
-僕憎
-僕歐
-僕射
-太僕
-僮僕
-金僕姑
-僕婢
-樸實
-樸訥
-樸念仁
-白樸
-抱素懷樸
-抱朴而長吟兮
-樸鄙
-樸馬
-樸父
-樸陋
-樸魯
-樸厚
-樸學
-樸質
-樸拙
-樸重
-樸素
-樸樕
-樸野
-反樸
-古樸
-胡樸安
-返樸
-渾樸
-儉樸
-簡樸
-拙樸
-斫雕為樸
-斲雕為樸
-質樸
-誠樸
-純樸
-曾樸
-郁樸
-棫樸
-敦樸
-樸鈍
-樸直
-見素抱樸
-掣籤
-標籤
-書籤
-發籤
-粉籤子
-路籤
-更籤
-好籤
-火籤
-籤幐
-籤押
-照入籤
-制籤
-抽公籤
-瑤籤
-藥籤
-萬籤插架
-雲笈七籤
-上簽名
-上簽字
-上簽收
-上簽寫
-下簽名
-下簽字
-下簽收
-下簽寫
-犖确
-磽确
-确瘠
-言辯而确
-數與虜确
-關弓與我确
-拚捨
-廣捨
-齊王捨牛
-捨墮
-捨實
-棄捨
-捨安就危
-施舍之道
-瀋河
-瀋水
-瀋州
-瀋山線
-瀋吉線
-墨沈
-瀋海鐵路
-遼瀋
-胜肽
-胜鍵
-雙胜類
-兀朮
-白朮
-蒼朮
-赤朮
-朮赤
-髼鬆
-皮鬆
-濛鬆雨
-發鬆
-翻鬆
-浮鬆
-弄鬆
-精鬆
-懈鬆
-鬆蛋
-鬆寬
-鬆氣
-鬆一口氣
-鬆元音
-鬆喉
-囉囉囌囌
-囉囌
-骨罈
-罈騞
-餵驢
-剪牡丹喂牛
-鹹粥
-鹹食
-鹹潟
-鹹嘴淡舌
-鹽打怎麼鹹
-鹹派
-鹹批
-錦綉花園
-籲天
-勃鬱
-怫鬱
-氣鬱
-沉鬱
-神荼鬱壘
-躁鬱
-蒼鬱
-漚鬱
-伊鬱
-壹鬱
-悒鬱
-氤鬱
-湮鬱
-陰鬱
-泱鬱
-坱鬱
-滃鬱
-蓊鬱
-紆鬱
-鬱勃
-鬱陶
-鬱律
-鬱壘
-鬱火
-鬱積
-鬱金
-鬱江
-鬱血
-鬱蒸
-鬱症
-鬱沉沉
-鬱熱
-鬱塞
-鬱伊
-鬱邑
-鬱挹
-鬱堙不偶
-鬱泱
-鬱蓊
-鬱紆
-鬱燠
-肝鬱
-鬱卒
-鬱鬱不平
-鬱鬱不樂
-鬱鬱寡歡
-鬱鬱蔥蔥
-鬱鬱而終
-愿樸
-愿而恭
-許愿起經
-北嶽
-嶽麓
-但云
-胡云
-詩云
-注云
-鄭凱云
-云乎
-云然
-云為
-對摺
-網誌
-標標致致
-澄澹精致
-呆緻緻
-光緻緻
-工緻
-功緻
-縝緻
-堅緻
-种放
-种師道
-种師中
-後庄
-舊庄
-正官庄
-龜山庄
-寶山庄
-冬山庄
-員山庄
-松山庄
-厂部
-閤府
-佈道
-剪綵
-衝量
-衝車
-書獃子
-相干
-府干預
-府干涉
-府干政
-府干擾
-府干犯
-府干卿
-一干人
-未乾
-未干涉
-抹乾
-餅乾
-拭乾
-擦乾
-晾乾
-烘乾
-肉乾
-菜乾
-腐乾
-乾脆
-乾淨
-乾燥
-乾旱
-乾涸
-乾洗
-乾女
-乾等
-乾糧
-乾枯
-乾薪
-乾爹
-乾粉
-乾爽
-乾兒
-乾子
-乾渴
-乾股
-乾果
-乾草
-乾菜
-乾笑
-乾餾
-乾電
-乾飯
-乾冰
-乾嘔
-乾材
-乾媽
-乾季
-葡萄乾
-提子乾
-蘿蔔乾
-蘋果乾
-芒果乾
-菠蘿乾
-鳳梨乾
-豆腐乾
-果子乾
-龍眼乾
-乾乾淨淨
-乾柴烈火
-乾乾兒的
-桑乾
-撈乾
-搭乾鋪
-揩乾
-敢幹
-幹探
-幹事
-幹什麼
-幹細胞
-悶著頭兒幹
-配水幹管
-繐幃飄井幹
-站乾岸兒
-秋陰入井幹
-沒梢幹
-楨幹
-據榦而窺井底
-井榦摧敗
-杰特
-李連杰
-周杰倫
-杰倫
-姜文杰
-稜鏡
-稜角
-稜台
-稜錐
-觚稜
-稜子
-稜層
-稜柱
-盧稜伽
-波稜菜
-菠稜菜
-稜縫
-稜等登
-稜稜
-嶒稜
-蹭稜子
-稜體
-二不稜登
-有稜有角
-威稜
-負債纍纍
-傷痕纍纍
-儒略曆
-伊斯蘭曆
-酒麴
-昇平
-爾冬陞
-澹臺
-拜託
-委託
-輓曲
-敬輓
-万俟
-万旗
-鬚鯨
-鬚鯊
-兇手
-兇徒
-兇案
-兇器
-兇殺
-兇殘
-行兇
-緝兇
-追兇
-真兇
-疑兇
-買兇
-元兇
-叶韻
-叶音
-叶恭弘
-叶 恭弘
-叶 恭弘
-於1
-於2
-於3
-於4
-於5
-於6
-於7
-於8
-於9
-於0
-於1
-於2
-於3
-於4
-於5
-於6
-於7
-於8
-於9
-於0
-於一
-於二
-於三
-於四
-於五
-於六
-於七
-於八
-於九
-於十
-於半
-於夫羅
-於梨華
-置於
-佈於
-散於
-播於
-國於
-敗於
-於一役
-畢於
-畢業於
-寒於
-任於
-拘於
-插於
-中於
-於市
-於野
-敏於
-聽於
-短於
-成於
-樊於期
-淡於
-於陸
-於密
-於盡
-禍於
-格於
-猛於
-施於
-於牆
-於物
-於己
-於你
-於我
-於他
-於她
-於它
-於祂
-拒人於
-拒於
-潰於
-窮於
-相於
-形於
-半於
-於始
-於終
-詢於
-美於
-醜於
-好於
-坏於
-強於
-弱於
-差於
-劣於
-於美
-於醜
-於好
-於坏
-於強
-於弱
-於差
-於劣
-於垂
-染指於
-於火
-存十一於千百
-存於
-於勤
-隱於
-藏於
-嚴於
-寬於
-於幕
-給於
-於穆
-於呼哀哉
-於時
-於該
-危於
-於伏
-於何
-於家
-於國
-於潛縣
-於焉
-於徵
-離於
-於畢
-麗於
-下於
-亞於
-同於
-屑於
-絕於
-致於
-於行
-遜於
-任教於
-教於
-自於
-來於
-附於
-於人
-於世
-阻於
-於民
-於盲
-於色
-囿於
-直於
-建於
-都於
-於農
-於樂
-於前
-役於
-於心
-於法
-於事
-助於
-害於
-損於
-益於
-從於
-隨於
-順於
-汲於
-溺於
-迷於
-醉於
-行於
-泥於
-身於
-足於
-溢於
-於衷
-畏於
-視於
-衷於
-狃於
-疲於
-通於
-於途
-老於
-耿於
-於懷
-服於
-臻於
-匿於
-因於
-似於
-遷於
-怒於
-心於
-集於
-容於
-髒詞
-髒心
-新紮
-紙紮
-紮鐵
-紮寨
-一紮
-兩紮
-三紮
-四紮
-五紮
-六紮
-七紮
-八紮
-九紮
-十紮
-百紮
-千紮
-萬紮
-佔1
-佔2
-佔3
-佔4
-佔5
-佔6
-佔7
-佔8
-佔9
-佔0
-佔1
-佔2
-佔3
-佔4
-佔5
-佔6
-佔7
-佔8
-佔9
-佔0
-佔零
-佔〇
-佔一
-佔二
-佔兩
-佔三
-佔四
-佔五
-佔六
-佔七
-佔八
-佔九
-佔十
-佔百
-佔千
-佔万
-佔億
-佔超過
-佔不足
-佔至少
-佔少
-佔至多
-佔半
-佔多
-佔大
-佔小
-佔中
-佔東
-佔西
-佔南
-佔北
-佔平均
-佔總
-獨佔鰲頭
-所佔
-市佔
-佔率
-市佔率
-佔市場
-佔世界
-佔全
-佔國內
-佔美
-佔台
-佔香
-佔澳
-佔加
-佔新
-佔馬
-佔印
-佔英
-佔法
-佔德
-佔葡
-佔俄
-佔蘇
-佔缺
-佔A
-佔B
-佔C
-佔D
-佔E
-佔F
-佔G
-佔H
-佔I
-佔J
-佔K
-佔L
-佔M
-佔N
-佔O
-佔P
-佔Q
-佔R
-佔S
-佔T
-佔U
-佔V
-佔W
-佔X
-佔Y
-佔Z
-佔a
-佔b
-佔c
-佔d
-佔e
-佔f
-佔g
-佔h
-佔i
-佔j
-佔k
-佔l
-佔m
-佔n
-佔o
-佔p
-佔q
-佔r
-佔s
-佔t
-佔u
-佔v
-佔w
-佔x
-佔y
-佔z
-佔A
-佔B
-佔C
-佔D
-佔E
-佔F
-佔G
-佔H
-佔I
-佔J
-佔K
-佔L
-佔M
-佔N
-佔O
-佔P
-佔Q
-佔R
-佔S
-佔T
-佔U
-佔V
-佔W
-佔X
-佔Y
-佔Z
-佔a
-佔b
-佔c
-佔d
-佔e
-佔f
-佔g
-佔h
-佔i
-佔j
-佔k
-佔l
-佔m
-佔n
-佔o
-佔p
-佔q
-佔r
-佔s
-佔t
-佔u
-佔v
-佔w
-佔x
-佔y
-佔z
-佔不佔
-不佔
-佔了
-佔穩
-佔資源
-佔人便宜
-佔頭
-佔道
-佔屋
-佔網
-佔床
-佔座
-佔分
-佔飯
-佔個位
-佔後
-佔著
-佔山
-馬占山
-佔比
-佔停車
-佔哺乳
-佔下風
-少佔
-多佔
-費佔
-佔查
-佔壓
-佔優
-佔劣
-穩佔
-佔整體
-佔局部
-日佔
-美佔
-英佔
-德佔
-法佔
-俄佔
-葡佔
-西佔
-奧佔
-意佔
-義佔
-地佔
-佔場
-佔耕
-狂佔
-徵佔
-圈佔
-已佔
-佔囁
-佔主
-佔次
-寡佔
-佔去
-將佔
-將占卜
-要佔
-要占卜
-會佔
-會占卜
-占卜
-夢有五不占
-占有五不驗
-誌異
-筑前
-筑後
-筑紫
-筑波
-筑州
-筑肥
-筑西
-筑北
-肥筑方言
-筑邦
-筑陽
-南筑
-批准的
-核准的
-為準
-準直
-擺鐘
-編鐘
-碰鐘
-鳴鐘
-晨鐘
-鐘體
-飯後鐘
-盜鐘
-一天鐘
-撞鐘
-殿鐘自鳴
-天文鐘
-天文學鐘
-洛鐘東應
-亮鐘
-郘鐘
-歌鐘
-鐘不撞不鳴
-毀鐘為鐸
-洪鐘
-擊鐘
-警世鐘
-竊鐘掩耳
-琴鐘
-見鐘不打
-釁鐘
-朝鐘
-木鐘
-鐘不扣不鳴
-鐘鳴
-鐘塔
-鐘漏
-鐘琴
-鐘磬
-鐘形蟲
-鐘乳洞
-鐘乳石
-鐘在寺裡
-詩鐘
-懸鐘
-山崩鐘應
-坐鐘
-宗周鐘
-塞耳盜鐘
-二缶鐘惑
-口鐘
-鐘的
-的鐘
-這鐘
-叩鐘
-音聲如鐘
-應鐘
-原子鐘
-泳氣鐘
-電子鐘
-電子鐘錶
-石英鐘錶
-石英鐘
-鐘錶王
-鐘律
-看鐘
-看錶
-看表面
-鐵鐘
-看下鐘
-看下錶
-瞅下鐘
-瞅下錶
-拿下鐘
-拿下錶
-鐘不敲不響
-對準鐘
-對準鐘錶
-對準錶
-鐘錶快
-鐘快
-錶快
-鐘錶慢
-鐘慢
-錶慢
-響鐘
-鐘敲
-大本鐘敲
-大笨鐘敲
-世紀鐘錶
-世紀鐘
-錶王
-鐘王
-鐘錶
-古鐘
-古鐘錶
-鐘面
-鐘表面
-南京鐘
-南京鐘錶
-造鐘錶
-造鐘
-九龍表行
-鐘錶行
-鐘行
-錶行
-小型鐘表面
-小型鐘面
-小型鐘錶
-小型鐘
-中型鐘表面
-中型鐘面
-中型鐘錶
-中型鐘
-大型鐘表面
-大型鐘面
-大型鐘錶
-大型鐘
-鐘匠
-深山何處鐘
-下課鐘
-上課鐘
-老爺鐘
-萬年曆錶
-個鐘
-個鐘錶
-喜歡鐘
-喜歡鐘錶
-喜歡錶
-大鐘
-佛鐘
-鐘壁
-鐘腰
-鐘口
-鐘身
-鐘模
-鐘頂
-鐘紐
-鐘座
-他鐘
-寺鐘
-座鐘
-盜鐘
-大笨鐘
-大本鐘
-鐘錶歷史
-錶的歷史
-鐘錶的歷史
-點多鐘
-點半鐘
-分多鐘
-刻多鐘
-分半鐘
-刻半鐘
-教學鐘
-操作鐘
-南屏晚鐘
-敲鐘
-瞧著鐘
-瞧著鐘錶
-瞧著錶
-警報鐘
-猶如鐘
-猶如鐘錶
-猶如錶
-舊鐘錶
-繁鐘
-四面鐘
-更鐘
-警示鐘
-鐘差
-任何鐘錶
-任何鐘
-任何錶
-任何表示
-任何表達
-任何表演
-選手表現
-選手表達
-選手表示
-選手表明
-選手表決
-分子鐘
-飛行鐘
-鐘罩
-主鐘差
-花鐘
-磬鐘
-主鐘曲線
-鐘速
-紅鐘
-各類鐘
-打著鐘
-鐘意
-衛星鐘
-該鐘
-錶轉
-鐘調
-調鐘錶
-調錶
-原鐘
-鐘錶速
-件鐘
-鐘發音
-逆鐘
-拂鐘無聲
-鐘不空則啞
-看著鐘錶
-看著鐘
-看著錶
-晚鐘
-潛水鐘錶
-潛水鐘
-潛水錶
-樂器鐘
-鐘左右
-埋頭尋鐘錶
-埋頭尋鐘
-埋頭尋錶
-鐘陳列
-驚鐘
-望著鐘錶
-望著鐘
-望著錶
-鐘錶停
-鐘停
-銫鐘
-數字鐘錶
-數字鐘
-顯示鐘錶
-顯示鐘
-顯示錶
-坐如鐘
-錶停
-西周鐘
-東周鐘
-錶速
-機械鐘錶
-機械鐘
-機械錶
-之鐘
-鐘形
-架鐘
-順鐘向
-逆鐘向
-遺傳鐘
-鬧錶
-華嚴鐘
-懷鐘
-生物鐘
-鐘錶的
-錶的嘀嗒
-的鐘錶
-嘀嗒的錶
-鐘好
-鐘太
-鐘不
-鐘有
-鐘盤
-鐘錶盤
-鐘沒
-鐘被
-制鐘
-布穀鳥鐘
-咕咕鐘
-拉克施爾德鐘
-鐘上
-鐘下
-摸鐘
-舊鐘
-舊錶
-台鐘
-鐘響
-叩鐘
-計時錶
-防水錶
-射鵰
-神鵰
-神雕像
-采石磯
-采石之戰
-采石之役
-聊齋志異
-部落發
-角落發
-村落發
-蛇髮女妖
-畢生發展
-對華發動
-中美發表
-尸魂界
-樹樑
-屋樑
-樑柱
-柱樑
-下樑
-上梁山
-昇陽
-僥倖
-夏遊
-秋遊
-冬遊
-黑奴籲天錄
-林郁方
-讚歌
-編餘
-餘墨
-唾餘
-餘韻
-歸餘
-公餘
-寬餘
-餘糧
-餘慶
-餘殃
-餘燼
-劫餘
-結餘
-燼餘
-淨餘
-餕餘
-餘暉
-餘輝
-羨餘
-餘悸
-心餘
-刑餘
-緒餘
-血餘
-朱慶餘
-諸餘
-餘論
-茶餘
-廚餘
-餘裕
-餘氣
-詩餘
-詞餘
-餘僇
-餘辜
-餘責
-餘罪
-無餘
-耳餘
-餘烈
-餘思
-鹽餘
-嬴餘
-贏餘
-王餘魚
-紆餘
-餘波
-餘杯
-餘步
-餘妙
-餘音
-餘聲
-餘明
-餘風
-餘黨
-餘毒
-餘桃
-餘桶
-餘利
-餘瀝
-餘膏
-餘光
-餘杭
-餘竅
-餘缺
-餘暇
-餘閒
-餘羨
-餘響
-餘興
-餘蓄
-餘緒
-餘珍
-餘眾
-餘酲
-餘喘
-餘食
-餘熱
-餘刃
-餘閏
-餘存
-餘業
-餘姚
-餘蔭
-餘映
-餘外
-餘威
-餘味
-餘溫
-餘勇
-多餘
-剩餘
-餘生
-餘歡
-有餘
-一餘
-二餘
-兩餘
-三餘
-四餘
-五餘
-六餘
-七餘
-八餘
-九餘
-十餘
-百餘
-千餘
-萬餘
-億餘
-兆餘
-0餘
-1餘
-2餘
-3餘
-4餘
-5餘
-6餘
-7餘
-8餘
-9餘
-0餘
-1餘
-2餘
-3餘
-4餘
-5餘
-6餘
-7餘
-8餘
-9餘
-余姓
-余光生
-余光中
-余思敏
-余威德
-余子明
-余三勝
-崑山
-崑曲
-崑腔
-崑調
-崑劇
-崑蘇
-蘇崑
-分布圖
-一干家中
-星期後
-不准你
-不准我
-不准他
-不准她
-不准它
-不准誰
-不准許
-准不准你
-准不准我
-准不准他
-准不准她
-准不准它
-准不准誰
-准不准許
-依依不捨
-戀戀不捨
-窮追不捨
-緊追不捨
-鍥而不捨
-稜登
-前言不答後語
-繃扒弔拷
-不弔
-不通弔慶
-陪弔
-盆弔
-屁股大弔了心
-撇弔
-憑弔
-門弔兒
-伐罪弔民
-打出弔入
-搗鬼弔白
-弔膀子
-弔民
-弔民伐罪
-弔奠
-弔頭
-弔古
-弔古尋幽
-弔詭
-弔詭矜奇
-弔客
-弔拷
-弔拷繃扒
-弔扣
-弔賀迎送
-弔鶴
-弔喉
-弔謊
-弔祭
-弔腳兒事
-弔頸
-弔橋
-弔取
-弔孝
-弔紙
-弔者大悅
-弔場
-弔書
-弔詞
-弔死問孤
-弔死問疾
-弔撒
-弔喪
-弔喪問疾
-弔腰撒跨
-弔唁
-弔宴
-弔喭
-弔影
-弔慰
-弔文
-弔問
-頭巾弔在水裡
-提心弔膽
-弄鬼弔猴
-管人弔腳兒事
-開弔
-鶴弔
-昊天不弔
-花馬弔嘴
-會弔
-吉凶慶弔
-蟣蝨相弔
-祭弔
-祭弔文
-青蠅弔客
-慶弔
-形影相弔
-哀弔
-一弔
-唁弔
-於水
-安於
-迫於
-罷於
-蹪於
-於敝
-於過
-甚於
-等於
-定於
-利於
-對於
-推舟於陸
-退藏於密
-歸於
-難於
-移禍於
-生於
-立於
-多於
-勝於
-傳於
-流於
-過於
-關於
-毀於
-基於
-急於
-嫁禍於
-借聽於聾
-見於
-鑒於
-謹於心
-求道於盲
-始於
-於藍
-出於
-輕於
-行百里者半於九十
-幸於
-怠於
-詢於芻蕘
-止於
-至於
-拙於
-忠於
-終於
-重於
-垂於
-善於
-死於
-屬於
-浮於
-在於
-厝薪於火
-易於
-精於
-由於
-於此
-燕巢於幕
-於菟
-於乎
-於戲
-於邑
-補於
-位於
-於今
-於是
-於是乎
-於斯
-寓於
-月離於畢
-月麗於箕
-源於
-且於
-長於
-短於
-現於
-較於
-於之
-分布於
-分散於
-優於
-早於
-晚於
-感於
-鬼谷子
-于美人
-緊緻
-冗餘
-曰云
-若干
-徵婚
-鬥鬨
-事有鬥巧
-歹鬥
-鬥茶
-鬥鴨
-爭奇鬥妍
-誇能鬥智
-春香鬥學
-鬥引
-鬥彩
-鬥武
-鬥悶
-鬥牙拌齒
-鬥幌子
-鬥腳
-雞吵鵝鬥
-辯鬥
-廝鬥
-誇多鬥靡
-臨潼鬥寶
-鬥趣
-撩鬥
-傲霜鬥雪
-賭鬥
-搬鬥
-鬥爭鬥合
-鬥疊
-鬥文
-耍鬥
-鬥巧
-油鬥
-蚊動牛鬥
-卵與石鬥
-挑鬥
-爭奇鬥異
-鬥葉子
-鬥分子
-爭妍鬥奇
-不鬥
-鬥心眼
-鬥頭
-挌鬥
-好鬥
-鬥合
-拚鬥
-兩虎共鬥
-兩鼠鬥穴
-鬥犀臺
-鬥牙鬥齒
-惡鬥
-鬥勝
-鬥富
-鬥艦
-鬥葉兒
-鬥彆氣
-鬥話
-鬥牌
-鬥百草
-鬥打
-鬥犬
-鬥風
-鬥雪紅
-鬥暴
-鬥閑氣
-龍鬥虎傷
-殷師牛鬥
-二虎相鬥
-鬥力
-爭紅鬥紫
-鬥麗
-鬥狠
-鬥飣
-虎鬥
-引鬥
-爭妍鬥豔
-轉鬥千里
-鬥而鑄兵
-困鬥
-好勇鬥狠
-爭奇鬥豔
-使其鬥
-鬥地主
-石樑
-木樑
-藏歷史
-頁面
-方面
-表面
-面條目
-課餘
-節餘
-盈餘
-病餘
-餘地
-餘力
-餘子
-餘事
-扶餘國
-腐餘
-富餘
-之餘
-餘澤
-流風餘俗
-流風餘韻
-淋餘土
-餘一
-餘二
-餘三
-餘四
-餘五
-餘六
-餘七
-餘八
-餘九
-餘十
-零餘
-〇餘
-餘零
-餘〇
-餘1
-餘2
-餘3
-餘4
-餘5
-餘6
-餘7
-餘8
-餘9
-餘0
-餘1
-餘2
-餘3
-餘4
-餘5
-餘6
-餘7
-餘8
-餘9
-餘0
-餘數
-其餘
-尸居餘氣
-賸餘
-餘孽
-殘餘
-業餘
-餘割
-餘款
-餘角
-餘切
-餘霞
-餘下
-餘弦
-餘震
-餘貾
-餘額
-禹餘糧
-餘人
-編余
-病余
-餘俗
-餘倍
-同餘
-大讚
-唄讚
-褒讚
-謬讚
-誄讚
-祝讚
-詩讚
-賞讚
-讚唄
-飛紮
-紮裹
-紮腳
-紮詐
-紮囮
-住紮
-佔畢
-佔頭籌
-佔高枝兒
-隱佔
-憑摺
-沒摺至
-大摺兒
-大週摺
-火摺子
-裝摺
-變徵
-談徵
-納徵
-流徵
-柳詒徵
-固徵
-貴徵
-考徵
-咎徵
-杞宋無徵
-休徵
-徵辟
-徵名責實
-徵發
-徵風召雨
-徵答
-徵啟
-徵選
-徵招
-徵士
-徵庸
-之徵
-瑞徵
-三徵七辟
-額徵
-有徵
-有征服
-有征戰
-有征伐
-有征討
-無徵不信
-文徵明
-徵跡
-徵車
-徵效
-徵怪
-徵聖
-徵咎
-徵吏
-徵令
-本徵
-船鐘
-黃鈺筑
-齊莊
-鴻案相莊
-項莊
-韋莊
-鍋莊
-鄭莊公
-通莊
-蒙莊
-端莊
-票莊
-矜莊
-楚莊問鼎
-楚莊絕纓
-整莊
-打路莊板
-莊騷
-莊語
-莊舄越吟
-莊房
-莊客
-莊農
-平泉莊
-布莊
-香山庄
-寶莊
-坐莊
-周莊王
-發莊
-卞莊
-包莊
-剔莊貨
-劉克莊
-冷莊子
-石家莊
-卞莊子
-新莊市
-當準
-憑準
-沒準
-蜂準
-推情準理
-寇準
-合準
-準保
-準譜
-準分子
-準點
-一個準
-準擬
-準貨幣
-準軍事
-準式
-認準
-三準
-鵝準
-有準
-崑崙
-鎌倉
-請君入甕
-甕安
-痊癒
-治癒
-病癒
-大病初癒
-癒合
-槓桿
-宣洩
-圖鑑
-諮詢
-勳章
-張勳
-趙治勳
-殭屍
-有栖川
-兇惡
-兇狠
-兇猛
-兇橫
-兇悍
-兇險
-兇相
-兇犯
-嫌兇
-兇嫌
-兇疑
-兇刀
-兇槍
-很兇
-兇巴巴
-行兇前
-凝鍊
-鍊貧
-鍊度
-鍊形
-鍊師
-鍊石
-鍊字
-鍊冶
-細鍊
-陳鍊
-闖鍊
-鍊汞
-淬鍊
-鋼之鍊金術師
-索馬里
-范登堡
-世田谷
-製漿
-三統歷史
-伊斯蘭教歷史
-伊斯蘭歷史
-儒略改革歷史
-儒略歷史
-公歷史
-台歷史
-合歷史
-周歷史
-商歷史
-四分歷史
-回歷史
-埃及歷史
-大明歷史
-大歷史
-大衍歷史
-太初歷史
-官歷史
-寶歷史
-巧歷史
-希伯來歷史
-弘歷史
-慶歷史
-日歷史
-星歷史
-月歷史
-朱理安歷史
-桌歷史
-永歷史
-玉歷史
-百花歷史
-皇歷史
-皇極歷史
-穆罕默德歷史
-算歷史
-紀歷史
-舊歷史
-航海歷史
-萬歷史
-行事歷史
-農歷史
-農民歷史
-通歷史
-長歷史
-陰歷史
-陽歷史
-額我略歷史
-黃歷史
-天曆
-天歷史
-美醜
-獻醜
-出醜
-家醜
-遮醜
-醜八怪
-醜名
-醜詆
-醜態
-醜女
-醜類
-醜陋
-醜虜
-醜化
-醜劇
-醜媳婦
-醜小鴨
-醜行
-醜事
-醜聲
-醜人
-醜惡
-醜丫頭
-醜聞
-醜語
-母醜
-一齣子
-齣兒
-賣獃
-發獃
-大獃
-獃獃
-獃等
-獃頭
-獃腦
-獃根
-獃磕
-獃憨獃
-獃話
-獃氣
-獃想
-獃性
-獃滯
-獃著
-獃痴
-獃串了皮
-獃事
-獃人
-獃子
-好獃
-占便宜的是獃
-阿獃
-丰標
-丰姿
-丰韻
-鵰翎
-鵰心雁爪
-鵰鶚
-雙鵰
-撲鼕鼕
-普鼕鼕
-鼕鼕鼓
-令人髮指
-爆發指數
-開發
-剪其髮
-吐哺捉髮
-吐哺握髮
-含齒戴髮
-大金髮苔
-寸髮千金
-心長髮短
-戴髮含齒
-拔髮
-拔鬚
-揪髮
-揪鬚
-整髮用品
-斷髮文身
-滿頭洋髮
-燙一個髮
-燙一次髮
-燙個髮
-燙完髮
-燙次髮
-理一個髮
-理一次髮
-理個髮
-理完髮
-理次髮
-細如髮
-繫於一髮
-膚髮
-皮膚
-生華髮
-蒼髮
-被髮佯狂
-被髮入山
-被髮左衽
-被髮纓冠
-被髮陽狂
-身體髮膚
-髒髮
-髮光可鑑
-髮已霜白
-髮油
-髮為血之本
-髮網
-髮踊沖冠
-髮際
-黃髮
-齒落髮白
-剷頭
-剷刈
-口燥唇乾
-舌乾唇焦
-花菴詞選
-渾箇
-箇中原因
-箇中理由
-箇中高手
-箇中好手
-箇中強手
-箇中滋味
-箇中奧秘
-箇中奧妙
-箇中玄機
-箇中消息
-箇中資訊
-箇中訊息
-對表達
-對表現
-對表演
-對表揚
-對表中
-對表明
-不準確
-並不準確
-一伙頭
-一伙食
-一半只
-一干弟兄
-一干弟子
-一干部下
-一斗斗
-一面食
-萬一只
-上面糊
-不克自制
-不准沒
-不加自制
-不占凶吉
-不占卜
-不占吉凶
-不占算
-不好干涉
-不好干預
-不干預
-不干涉
-不干休
-不干犯
-不干擾
-不干你
-不干我
-不干他
-不干她
-不干它
-不干事
-不斗膽
-不每只
-不采聲
-專向往
-丰容
-之一只
-之二只
-之八九只
-也斗了膽
-事情干脆
-事都干脆
-二只得
-亦云
-人云
-以自制
-們斗了膽
-你斗了膽
-其一只
-其二只
-其八九只
-內面包
-內面包的
-准保護
-准保釋
-几上
-几淨窗明
-几凳
-几子
-几旁
-几椅
-几榻
-几面上
-出征收
-擊扑
-划一槳
-划了一會
-划到岸
-划到江心
-前面店
-千只可
-千只夠
-千只怕
-千只能
-千只足夠
-半只可
-半只夠
-占了卜
-口干冒
-口干政
-口干涉
-口干犯
-口干預
-古書云
-古語云
-只占卜
-只占吉
-只占神問卜
-只占算
-只身上已
-只身上無
-只身上有
-只身上沒
-只身上的
-只身世
-只身為
-只身份
-只身體
-只身前
-只身受
-只身後
-只身子
-只身形
-只身影
-只身心
-只身旁
-只身材
-只身段
-只身邊
-只身首
-只身高
-只采聲
-可自制
-台子女
-台子孫
-台布景
-台面前
-合府上
-後面店
-向往常
-向往日
-向往時
-向往來
-唯一只
-喂了一聲
-喜向往
-四出徵收
-四面包
-多半只
-好斗大
-好斗室
-好斗笠
-好斗篷
-好斗膽
-好斗蓬
-家具體
-家具備
-家具有
-小几
-尸利
-尸祿
-尸臣
-尸鳩
-已占卜
-已占算
-并迭
-所云
-所云云
-所占卜
-所占星
-所占算
-手表決
-手表態
-手表明
-手表演
-手表現
-手表示
-手表達
-手表露
-手表面
-才干休
-才干戈
-才干擾
-才干政
-才干涉
-才干預
-扎好底子
-扎好根
-扑撻
-打吨
-折向往
-拉面上
-拉面具
-拉面前
-拉面巾
-拉面無
-拉面皮
-拉面罩
-拉面色
-拉面部
-捉奸黨
-捉奸徒
-捉奸細
-捉奸賊
-敢情欲
-敢斗了膽
-敲扑
-方向往
-望了望
-桌几
-每每只
-法自制
-洒滌
-洒淅
-洒濯
-洒然
-灘涂
-特制住
-特制定
-特制止
-特制訂
-百只可
-百只夠
-百只怕
-百只足夠
-皮制服
-相克制
-相克服
-短几
-石几
-秒表明
-秒表示
-窗明几亮
-竹几
-精制伏
-精制住
-精制服
-經有云
-給我干脆
-編制法
-能干休
-能干戈
-能干擾
-能干政
-能干涉
-能干預
-能自制
-自制一下
-自制下來
-自制不
-自制之力
-自制之能
-自制他
-自制伏
-自制你
-自制地
-自制她
-自制情
-自制我
-自制服
-自制的能
-自制能力
-船只得
-船只有
-船只能
-草荐
-荐居
-荐臻
-荐饑
-要自制
-語有云
-跌扑
-轉向往
-酒帘
-裡面包
-金表態
-金表情
-金表揚
-金表明
-金表演
-金表現
-金表示
-金表達
-金表露
-金表面
-長几
-隆准許
-雄斗斗
-面包住
-面包辦
-面包廂
-面包含
-面包圍
-面包容
-面包庇
-面包紮
-面包抄
-面包括
-面包攬
-面包涵
-面包管
-面包羅
-面包著
-面包藏
-面包裝
-面包裹
-面包起
-面店舖
-面粉碎
-面粉紅
-面食麵
-面食飯
-顛顛仆仆
-高干擾
-高干預
-高度自制
-黃金表
-天后宮
-一吊錢
-不食乾腊
-傳位于四太子
-儉确之教
-党懷英
-八蜡
-憑几
-南宮适
-大蜡
-子云
-分子雲
-小价
-歲聿云暮
-崖广
-恕乏价催
-悲筑
-折子戲
-揮杆
-搤肮拊背
-文采郁郁
-木杆
-洪适
-球杆
-腊之以為餌
-腊毒
-蜡月
-蜡祭
-言云
-宜云
-貴价
-郁郁菲菲
-馬杆
-造麯
-麴生
-麴秀才
-麴塵
-麴櫱
-大麴
-黃麴毒素
-酒醴麴櫱
-麴道士
-麴錢
-麴車
-麴院
-鼠麴草
-不乾不淨
-生發生
-必須
-須根據
-·范
-、剋制
-,剋制
-。剋制
-!剋制
-?剋制
-;剋制
-:剋制
-不剋制
-也剋制
-了剋制
-他剋制
-們剋制
-剋制不了
-剋制不住
-力剋制
-力求剋制
-可以剋制
-和剋制
-在剋制
-地剋制
-夠剋制
-她剋制
-你剋制
-您剋制
-就剋制
-彼此剋制
-得剋制
-快剋制
-想剋制
-意剋制
-應剋制
-我剋制
-才剋制
-於剋制
-易剋制
-無法剋制
-的剋制
-盡量剋制
-而剋制
-能剋制
-與剋制
-著剋制
-要剋制
-軍隊剋制
-空投佈雷
-火箭佈雷
-海灣佈雷
-空中佈雷
-海上佈雷
-佈雷的
-佈雷,
-佈雷、
-佈雷。
-佈雷;
-佈雷艦
-佈雷艇
-佈雷速度
-佈雷封鎖
-滿拚自盡
-拚生盡死
-拚卻
-拚老命
-拚絕
-成於思
-單單於
-積澱
-澱積
-澱北片
-澱解物
-澱謂之滓
-淺澱
-堙澱
-茂都澱
-並曰入澱
-澱乃不耕之地
-藍澱
-皆可作澱
-澱山
-海淀山後
-澱澱
-掛鈎
-薴悴
-絡腮鬍
-落腮鬍
-山羊鬍
-幸運鬍
-刮鬍
-剃鬍
-吹鬍
-蓄鬍
-白鬍
-長鬍
-鬍髯
-髯鬍
-髭鬍
-鬚鬍
-范文瀾
-范文同
-范文正公
-范文程
-范文芳
-范文藤
-范文虎
-范文照
-發表
-乾重
-若干
-鈎心鬥角
-若干
-乾重
-全面包圍
-全面包裹
-機械系
-體系
-心理
-複分解
-鹰鵰
-叱咤903
-叱咤MY903
-叱咤My903
-叱咤樂壇
-叱咤咤
-叱咤叱咤叱咤咤
-叱咤叱叱咤
-正在叱咤
-空餘
-變髒
-天地志狼
-薴烯
-阿斯圖里亞斯
-雙折射
-心繫家
-心繫國
-心繫祖
-心繫北
-心繫京
-心繫南
-心繫西
-心繫東
-心繫四
-心繫川
-心繫浙
-心繫汶
-心繫廣
-心繫湖
-心繫山
-心繫台
-心繫江
-心繫昌
-心繫香
-心繫澳
-心繫港
-心繫泰
-心繫健
-心繫天
-心繫地
-心繫大
-心繫小
-心繫全
-心繫眾
-心繫奧
-心繫世
-心繫中
-心繫高
-心繫災
-心繫非
-心繫群
-心繫新
-心繫沈
-心繫唐
-心繫黃
-心繫乔
-心繫阮
-心繫父
-心繫母
-心繫病
-心繫故
-心繫哪
-心繫中
-心繫英
-心繫美
-心繫日
-心繫德
-心繫功
-心繫曉
-心繫神
-心繫萬
-心繫的
-心繫在
-心繫兩
-心繫社
-心繫曼
-心繫彼
-心繫風
-心繫募
-心繫一
-心繫何
-心繫困
-心繫輸
-心繫人
-心繫民
-心繫十
-心繫百
-心繫千
-心繫和
-心繫選
-心繫囑
-心繫我
-心繫你
-心繫您
-心繫他
-心繫她
-心繫它
-心繫伊
-心繫長
-心繫舞
-心繫蘭
-心繫五
-心繫生
-心繫婦
-心繫幼
-心繫茶
-心繫動
-心繫沙
-心繫林
-心繫摩
-心繫农
-心繫慈
-心繫麥
-心繫貧
-心繫富
-心繫遠
-心繫近
-心繫宣
-心繫傳
-心繫紅
-心繫老
-心繫重
-心繫震
-心繫妻
-心繫夫
-心繫女
-心繫子
-心繫著
-重回
-挑大樑
-扛大樑
-后豐
-製得
-限制
-控制
-製取
-第四出局
-心臟
-肝臟
-脾臟
-肺臟
-腎臟
-參與
-浮誇
-星巴克
-于謙
-于寘
-淳于
-于禁
-于敏中
-註:# 不作“注:”
-呆呆獸
-劃為# 不作“划為”
-併為一體
-併為一家
-一個# 避免“個裡”的錯誤
-兩個
-二個
-三個
-四個
-五個
-六個
-七個
-八個
-九個
-十個
-百個
-千個
-萬個
-億個
-兆個
-零個
-云:# 不作“雲:”
-電子表格
-雪裡紅
-雪裡蕻
-森林裡
-日子裡
-故事裡
-領域裡
-時間裡
-深淵裡
-醫院裡
-春假裡
-暑假裡
-秋假裡
-寒假裡
-春天裡
-夏天裡
-秋天裡
-冬天裡
-春日裡
-夏日裡
-秋日裡
-冬日裡
-嘴裡
-心裡
-皮裡陽秋
-肚裡
-苦裡
-裡勾外連
-裡面
-這裡
-中文裡
-山洞裡
-世界裡
-眼睛裡
-首發
-夸脫
-誰幹的
-鐘螺
-風采
-代碼表
-編碼表
-字碼表
-電碼表
-科斗
-佔領
-灕水
-點裡
-這只是
-這只不
-這只容
-這只允
-這只採
-這只用
-有只是
-有只不
-有只容
-有只允
-有只採
-有只用
-葉叶琹
-胡子昂
-包括
-特别致
-分别致
-會上簽訂
-會上簽署
-周一 # (及以下)避免“周一齣版”的錯誤
-周二
-周三
-周四
-周五
-周六
-韶山沖
-總裁制
-于丹
-于樂
-于冕
-于軍
-于吉
-于堅
-于姓
-于氏
-于娜
-于娟
-于山
-于帥
-于慧
-于振
-于敏
-于斌
-于晴
-于波
-于濤
-于衡
-于贈
-于越
-于靖
-于勒
-于格
-于仁泰
-于會泳
-于偉國
-于佳卉
-于光遠
-于克勒
-于凌奎
-于鳳至
-于化虎
-于占元
-于台煙
-于品海
-于國楨
-于大寶
-于天仁
-于子千
-于孔兼
-于學忠
-于家堡
-于小偉
-于小彤
-于山國
-于幼軍
-于廣洲
-于康震
-于式枚
-于從濂
-于德海
-于志寧
-于慎行
-于成龍
-于振武
-于明濤
-于是之
-于晨楠
-于根偉
-于樹潔
-于欣源
-于正昇
-于正昌
-于永波
-于漢超
-于江震
-于洪區
-于浩威
-于海洋
-于湘蘭
-于特森
-于玉立
-于秀敏
-于素秋
-于若木
-于蔭霖
-于西翰
-于遠偉
-于道泉
-于都縣
-于震寰
-于震環
-于非闇
-于風政
-于鳳桐
-于默奧
-于家堡
-于爾岑
-于默奧
-于貝爾
-于爾根
-于雙戈
-于里察
-于澤爾
-于斯塔德
-于斯達爾
-于爾里克
-于奇庫杜克
-于韋斯屈萊
-于克-蘭多縣
-于斯納爾斯貝里
-夏于喬
-涂姓
-涂坤
-涂天相
-涂序瑄
-涂澤民
-涂紹煃
-涂羽卿
-涂逢年
-涂長望
-涂謹申
-涂鴻欽
-涂壯勳
-涂醒哲
-涂善妮
-涂敏恆
-總裁制
-故云
-強制作用
-鬱南
-西米谷
-一出生
-二出生
-三出生
-四出生
-五出生
-六出生
-七出生
-八出生
-九出生
-十出生
-一出版
-二出版
-三出版
-四出版
-五出版
-六出版
-七出版
-八出版
-九出版
-十出版
-一出刊
-二出刊
-三出刊
-四出刊
-五出刊
-六出刊
-七出刊
-八出刊
-九出刊
-十出刊
-一出逃
-二出逃
-三出逃
-四出逃
-五出逃
-六出逃
-七出逃
-八出逃
-九出逃
-十出逃
-一出口
-二出口
-三出口
-四出口
-五出口
-六出口
-七出口
-八出口
-九出口
-十出口
-一出祁山
-二出祁山
-三出祁山
-四出祁山
-五出祁山
-六出祁山
-七出祁山
-八出祁山
-九出祁山
-十出祁山
-鬱林
-饑荒
-免徵
-亞美尼亞曆
-百科裡
-歷史裡
-戲裡
-作品裡
-專輯裡
-年代裡
-棺材裡
-注釋
-月面
-路面
-修杰楷
-修杰麟
-學裡
-獄裡
-館裡
-系列裡
-村子裡
-艷后
-廢后
-妖后
-后海灣
-仙后
-賈后
-賢后
-蜂后
-皇后
-王后
-王侯后
-母后
-武后
-歌后
-影后
-封后
-太后
-天后
-呂后
-后里
-后街
-后羿
-后稷
-后座
-后平路
-后安路
-后土
-后北街
-后冠
-望后石
-后角
-蟻后
-后妃
-大周后
-小周后
-染殿后
-准三后
-風后
-后母戊
-風後,
-人如風後入江雲
-中風後
-屏風後
-颱風後
-颳風後
-整風後
-打風後
-遇風後
-聞風後
-逆風後
-順風後
-大風後
-馬格里布
-伊里布
-劃入
-中庄子
-埔裏社撫墾局
-懸掛
-僱傭
-四捨六入
-宿舍
-會干擾
-代表
-高清愿
-瓷製
-竹製
-絲製
-莜麵
-劃入
-簡筑翎
-楊雅筑
-魔杰座
-杰威爾音樂
-彭于晏
-尸羅精舍
-索馬里 # (及以下)避免里海=>裏海的轉換
-西西里
-騰格里
-阿里
-村里長
-進制
-黃詩杰
-陳冲
-何杰
-劉佳怜
-于小惠
-于品海
-于耘婕
-于洋
-于澄
-于光新
-范賢惠
-于國治
-于楓
-于熙珍
-涂善妮
-邱于庭
-熊杰
-卜云吉
-黎吉雲
-于飛島
-代表
-水無怜奈
-傲遊 # 浏览器名
-夏于喬
-賭后
-后海灣
-立后綜
-甲后路
-劉芸后
-謝華后
-趙惠后
-趙威后
-聖后
-陳有后
-許虬
-網遊
-狄志杰
-伊適杰
-于冠華
-于台煙
-于雲鶴
-于忠肅集
-于友澤
-于和偉
-于來山
-于樂
-于天龍
-于謹
-于榮光
-電波鐘
-余三勝
-掛名
-啟發式
-舞后
-甄后
-郭后
-0年 # 協助分詞
-1年
-2年
-3年
-4年
-5年
-6年
-7年
-8年
-9年
-0年
-1年
-2年
-3年
-4年
-5年
-6年
-7年
-8年
-9年
-〇年
-零年
-一年
-兩年
-二年
-三年
-四年
-五年
-六年
-七年
-八年
-九年
-十年
-百年
-千年
-萬年
-億年
-周后
-0周後
-1周後
-2周後
-3周後
-4周後
-5周後
-6周後
-7周後
-8周後
-9周後
-0周後
-1周後
-2周後
-3周後
-4周後
-5周後
-6周後
-7周後
-8周後
-9周後
-零周後
-〇周後
-一周後
-二周後
-兩周後
-三周後
-四周後
-五周後
-六周後
-七周後
-八周後
-九周後
-十周後
-百周後
-千周後
-萬周後
-億周後
-幾周後
-多周後
-前往
-后瑞站
-帝后臺
-新井里美
-樗里子
-伊達里子
-濱田里佳子
-尊后
-叶志穗
-叶不二子
-于立成
-山谷道
-李志喜
-于欣
-于少保
-于海
-於海邊
-於海上
-于凌辰
-于魁智
-于鬯
-于仲文
-于再清
-于震
-於震前
-於震后
-於震中
-固定制
-毗婆尸佛
-尸棄佛
-划船
-划不來
-划拳
-划槳
-划動
-划艇
-划行
-划算
-總裁制
-恒生
-嚴云農
-手裏劍
-秦莊襄王
-伊東怜
-衛後莊公
-餘量
-並行
-郁郁青青
-協防
-對表格
-對表示
-對表達
-對表演
-對表明
-了然後
-戴表元
-張樂于張徐
-余力為
-葉叶琴
-万俟
-幾個
-澀谷區
-協調
-選手
-併發症
-併發重症
-併發模式
-併發型模式
-金色長髮
-紅色長髮
-一頭長髮
-的長髮
-黑色長髮
-前天
-昨天
-今天
-明天
-後天
-數學家
-科學家
-物理學家
-化學家
-生物學家
-天文學家
-游離
-子晳
-紅后假說
-書面
-不只
-高涌泉
-請求
-考試
-測試
-筆試
-口試
-冰冷
-王田里
-后姓
-台州
-田庄英雄
-計劃
-抑制劑
diff --git a/includes/zhtable/tradphrases_exclude.manual b/includes/zhtable/tradphrases_exclude.manual
deleted file mode 100644 (file)
index e6abb4e..0000000
+++ /dev/null
@@ -1,330 +0,0 @@
-三國誌
-聊齋誌異
-北迴
-南迴
-併排
-併進
-併在
-併成
-衝衝
-臺
-著
-佈
-纔
-采
-着
-借
-甦
-荐
-担
-可憐虫
-一齣
-上弔
-弔車
-弔橋
-弔嗓子
-弔床
-弔架
-弔桶
-弔桿
-弔橋
-弔燈
-弔環
-弔籃
-弔胃口
-弔臂
-弔銷
-形影相弔
-被髮
-散髮
-長髮
-髮毛
-髮端
-周而複始
-答複
-複興
-複舊
-顛複
-修複
-報複
-複活
-反複
-迴首
-彙總
-饑餓
-饑不擇食
-饑荒
-憑藉
-藉故
-藉口
-藉端
-藉詞
-藉酒
-蛋捲
-行李捲
-克裡
-纍纍
-華裡
-裡海
-瞭解
-明瞭
-發黴
-矇蔽
-矇住
-濛濛
-矇矇
-下麵
-白麵
-切麵
-和麵
-過水麵
-復甦
-複蘇
-甦醒
-体
-繫數
-遊擊
-馥鬱
-鬱鬱
-改製
-獃住
-獃氣
-獃子
-獃頭獃腦
-儘量
-希腊
-腊肉
-瞭如
-昇
-武鬆
-赤鬆
-黑鬆
-鬆林
-鬆科
-鬆濤
-鬆毛蟲
-鬆節油
-濕地鬆
-尼克鬆
-紮伊爾
-阿布紮比
-阿紮尼亞
-利比裡亞
-斯裡蘭卡
-烏蘇裡江
-加裡寧
-歐幾裡得
-格裡
-巴裡
-居裡
-卡裡
-墨索裡尼
-底裡
-裡人
-裡加
-裡裡
-馬裡
-裡拉
-阿裡
-裡斯
-鄰裡
-鄉裡
-百裡
-特裡
-海裡
-三元裡
-漏鬥
-春捲
-採邑
-嚮日
-佔城
-水錶
-名錶
-錶面
-彆腳
-併力
-併列
-併為
-豐富多採
-採採
-尼採
-小醜
-辛醜
-整齣
-嚴複
-枯幹
-干著急
-單於
-攻剋
-剋服
-闢邪
-釐米
-後樑
-石樑
-木樑
-舊莊
-介係詞
-介繫詞
-餘年
-大阪
-阪田
-豪杰
-七拚八湊
-一捲
-十捲
-上捲
-下捲
-加捲
-不捨
-不識檯舉
-稜登
-半弔子
-分布圖
-星鬥
-筋鬥
-斗鬨
-料鬥
-煙鬥
-熨鬥
-笆鬥
-箕鬥
-金鬥
-門鬥
-風鬥
-鬥子
-鬥笠
-老板娘
-剋制
-洋麵
-病癥
-製裁
-台製
-石家庄
-酒盃
-積极
-殭尸
-上梁不正
-項鍊
-鍊子
-鍊條
-拉鍊
-鉸鍊
-鍊鎖
-鐵鍊
-鍛鍊
-鍊乳
-鍊丹
-至于
-浮于
-附于
-次于
-于人
-助于
-行于
-于衷
-于事
-低于
-大于
-高于
-等于
-位于
-用于
-答覆
-複蓋
-反覆
-藉藉
-蘊藉
-蹈藉
-醞藉
-氆氌
-慰藉
-文藉
-枕藉
-狼藉
-別隻
-鼕鼕
-矇松雨
-佈雷
-丰度
-剪彩
-脣
-菴
-公裡
-箇中
-樑子
-樑書
-讚成
-讚同
-鐘表店
-精採
-鞭尸
-尸身
-尸首
-行尸走肉
-裹尸
-慼慼
-痠
-簑
-捱
-朝乾夕惕
-大曲酒
-神麴
-便于
-偏于
-勇于
-居于
-常見于
-強加于
-從事于
-忙于
-敢于
-服務于
-服從于
-樂于
-歸罪于
-歸諸于
-活動于
-瀕于
-苦于
-莫過于
-處于
-適于
-乾和
-鉤
-高陞
-大胆
-託福
-繫系
-酰
-醯
-大樑
-光採
-鍾錶
-複原
-參与
-浮夸
-剋日
-羡
-旅游
-穀風
-復讎
-避暑山庄
-遊牧
-烟草
-征
-占領
-入夥
-懸挂
-註釋
-浮遊
-冶鍊
-裡子
-裡外
-單隻
-聯係
-那裏
-殺虫藥
-好家伙
-姦污
-併發
-衚衕
index 21ba0bd..5538ac8 100644 (file)
@@ -160,10 +160,10 @@ class Language {
         * @var array
         */
        static public $durationIntervals = array(
-               'millennia' => 31557600000,
-               'centuries' => 3155760000,
-               'decades' => 315576000,
-               'years' => 31557600, // 86400 * 365.25
+               'millennia' => 31556952000,
+               'centuries' => 3155695200,
+               'decades' => 315569520,
+               'years' => 31556952, // 86400 * ( 365 + ( 24 * 3 + 25 ) / 400 )
                'weeks' => 604800,
                'days' => 86400,
                'hours' => 3600,
@@ -177,7 +177,11 @@ class Language {
         * @return Language
         */
        static function factory( $code ) {
-               global $wgLangObjCacheSize;
+               global $wgDummyLanguageCodes, $wgLangObjCacheSize;
+
+               if ( isset( $wgDummyLanguageCodes[$code] ) ) {
+                       $code = $wgDummyLanguageCodes[$code];
+               }
 
                // get the language object to process
                $langObj = isset( self::$mLangObjCache[$code] )
@@ -241,6 +245,78 @@ class Language {
                throw new MWException( "Invalid fallback sequence for language '$code'" );
        }
 
+       /**
+        * Checks whether any localisation is available for that language tag
+        * in MediaWiki (MessagesXx.php exists).
+        *
+        * @param string $code Language tag (in lower case)
+        * @return bool Whether language is supported
+        * @since 1.21
+        */
+       public static function isSupportedLanguage( $code ) {
+               return $code === strtolower( $code ) && is_readable( self::getMessagesFileName( $code ) );
+       }
+
+       /**
+        * Returns true if a language code string is a well-formed language tag
+        * according to RFC 5646.
+        * This function only checks well-formedness; it doesn't check that
+        * language, script or variant codes actually exist in the repositories.
+        *
+        * Based on regexes by Mark Davis of the Unicode Consortium:
+        * http://unicode.org/repos/cldr/trunk/tools/java/org/unicode/cldr/util/data/langtagRegex.txt
+        *
+        * @param $code string
+        * @param $lenient boolean Whether to allow '_' as separator. The default is only '-'.
+        *
+        * @return bool
+        * @since 1.21
+        */
+       public static function isWellFormedLanguageTag( $code, $lenient = false ) {
+               $alpha = '[a-z]';
+               $digit = '[0-9]';
+               $alphanum = '[a-z0-9]';
+               $x = 'x' ; # private use singleton
+               $singleton = '[a-wy-z]'; # other singleton
+               $s = $lenient ? '[-_]' : '-';
+
+               $language = "$alpha{2,8}|$alpha{2,3}$s$alpha{3}";
+               $script = "$alpha{4}"; # ISO 15924
+               $region = "(?:$alpha{2}|$digit{3})"; # ISO 3166-1 alpha-2 or UN M.49
+               $variant = "(?:$alphanum{5,8}|$digit$alphanum{3})";
+               $extension = "$singleton(?:$s$alphanum{2,8})+";
+               $privateUse = "$x(?:$s$alphanum{1,8})+";
+
+               # Define certain grandfathered codes, since otherwise the regex is pretty useless.
+               # Since these are limited, this is safe even later changes to the registry --
+               # the only oddity is that it might change the type of the tag, and thus
+               # the results from the capturing groups.
+               # http://www.iana.org/assignments/language-subtag-registry
+
+               $grandfathered = "en{$s}GB{$s}oed"
+                       . "|i{$s}(?:ami|bnn|default|enochian|hak|klingon|lux|mingo|navajo|pwn|tao|tay|tsu)"
+                       . "|no{$s}(?:bok|nyn)"
+                       . "|sgn{$s}(?:BE{$s}(?:fr|nl)|CH{$s}de)"
+                       . "|zh{$s}min{$s}nan";
+
+               $variantList = "$variant(?:$s$variant)*";
+               $extensionList = "$extension(?:$s$extension)*";
+
+               $langtag = "(?:($language)"
+                       . "(?:$s$script)?"
+                       . "(?:$s$region)?"
+                       . "(?:$s$variantList)?"
+                       . "(?:$s$extensionList)?"
+                       . "(?:$s$privateUse)?)";
+
+               # The final breakdown, with capturing groups for each of these components
+               # The variants, extensions, grandfathered, and private-use may have interior '-'
+
+               $root = "^(?:$langtag|$privateUse|$grandfathered)$";
+
+               return (bool)preg_match( "/$root/", strtolower( $code ) );
+       }
+
        /**
         * Returns true if a language code string is of a valid form, whether or
         * not it exists. This includes codes which are used solely for
@@ -285,6 +361,30 @@ class Language {
                return (bool)preg_match( '/^[a-z0-9-]+$/i', $code );
        }
 
+       /**
+        * Returns true if a language code is an IETF tag known to MediaWiki.
+        *
+        * @param $code string
+        *
+        * @since 1.21
+        * @return bool
+        */
+       public static function isKnownLanguageTag( $tag ) {
+               static $coreLanguageNames;
+
+               if ( $coreLanguageNames === null ) {
+                       include( MWInit::compiledPath( 'languages/Names.php' ) );
+               }
+
+               if ( isset( $coreLanguageNames[$tag] )
+                       || self::fetchLanguageName( $tag, $tag ) !== ''
+               ) {
+                       return true;
+               }
+
+               return false;
+       }
+
        /**
         * @param $code
         * @return String Name of the language class
@@ -1985,7 +2085,7 @@ class Language {
                $segments = array();
 
                foreach ( $intervals as $intervalName => $intervalValue ) {
-                       $message = new Message( 'duration-' . $intervalName, array( $intervalValue ) );
+                       $message = wfMessage( 'duration-' . $intervalName )->numParams( $intervalValue );
                        $segments[] = $message->inLanguage( $this )->escaped();
                }
 
@@ -2863,30 +2963,30 @@ class Language {
                return "<em>$text</em>";
        }
 
-        /**
-         * Normally we output all numbers in plain en_US style, that is
-         * 293,291.235 for twohundredninetythreethousand-twohundredninetyone
-         * point twohundredthirtyfive. However this is not suitable for all
-         * languages, some such as Pakaran want ੨੯੩,੨੯੫.੨੩੫ and others such as
-         * Icelandic just want to use commas instead of dots, and dots instead
-         * of commas like "293.291,235".
-         *
-         * An example of this function being called:
-         * <code>
-         * wfMessage( 'message' )->numParams( $num )->text()
-         * </code>
-         *
-         * See LanguageGu.php for the Gujarati implementation and
-         * $separatorTransformTable on MessageIs.php for
-         * the , => . and . => , implementation.
-         *
-         * @todo check if it's viable to use localeconv() for the decimal
-         *       separator thing.
-         * @param $number Mixed: the string to be formatted, should be an integer
-         *        or a floating point number.
-         * @param $nocommafy Bool: set to true for special numbers like dates
-         * @return string
-         */
+       /**
+        * Normally we output all numbers in plain en_US style, that is
+        * 293,291.235 for twohundredninetythreethousand-twohundredninetyone
+        * point twohundredthirtyfive. However this is not suitable for all
+        * languages, some such as Pakaran want ੨੯੩,੨੯੫.੨੩੫ and others such as
+        * Icelandic just want to use commas instead of dots, and dots instead
+        * of commas like "293.291,235".
+        *
+        * An example of this function being called:
+        * <code>
+        * wfMessage( 'message' )->numParams( $num )->text()
+        * </code>
+        *
+        * See LanguageGu.php for the Gujarati implementation and
+        * $separatorTransformTable on MessageIs.php for
+        * the , => . and . => , implementation.
+        *
+        * @todo check if it's viable to use localeconv() for the decimal
+        *       separator thing.
+        * @param $number Mixed: the string to be formatted, should be an integer
+        *        or a floating point number.
+        * @param $nocommafy Bool: set to true for special numbers like dates
+        * @return string
+        */
        public function formatNum( $number, $nocommafy = false ) {
                global $wgTranslateNumerals;
                if ( !$nocommafy ) {
@@ -2929,37 +3029,37 @@ class Language {
        /**
         * Adds commas to a given number
         * @since 1.19
-        * @param $_ mixed
+        * @param $number mixed
         * @return string
         */
-       function commafy( $_ ) {
+       function commafy( $number ) {
                $digitGroupingPattern = $this->digitGroupingPattern();
-               if ( $_ === null ) {
+               if ( $number === null ) {
                        return '';
                }
 
                if ( !$digitGroupingPattern || $digitGroupingPattern === "###,###,###" ) {
                        // default grouping is at thousands,  use the same for ###,###,### pattern too.
-                       return strrev( (string)preg_replace( '/(\d{3})(?=\d)(?!\d*\.)/', '$1,', strrev( $_ ) ) );
+                       return strrev( (string)preg_replace( '/(\d{3})(?=\d)(?!\d*\.)/', '$1,', strrev( $number ) ) );
                } else {
                        // Ref: http://cldr.unicode.org/translation/number-patterns
                        $sign = "";
-                       if ( intval( $_ ) < 0 ) {
+                       if ( intval( $number ) < 0 ) {
                                // For negative numbers apply the algorithm like positive number and add sign.
                                $sign =  "-";
-                               $_ = substr( $_, 1 );
+                               $number = substr( $number, 1 );
                        }
-                       $numberpart = array();
-                       $decimalpart = array();
+                       $integerPart = array();
+                       $decimalPart = array();
                        $numMatches = preg_match_all( "/(#+)/", $digitGroupingPattern, $matches );
-                       preg_match( "/\d+/", $_, $numberpart );
-                       preg_match( "/\.\d*/", $_, $decimalpart );
-                       $groupedNumber = ( count( $decimalpart ) > 0 ) ? $decimalpart[0]:"";
-                       if ( $groupedNumber  === $_ ) {
+                       preg_match( "/\d+/", $number, $integerPart );
+                       preg_match( "/\.\d*/", $number, $decimalPart );
+                       $groupedNumber = ( count( $decimalPart ) > 0 ) ? $decimalPart[0]:"";
+                       if ( $groupedNumber  === $number ) {
                                // the string does not have any number part. Eg: .12345
                                return $sign . $groupedNumber;
                        }
-                       $start = $end = strlen( $numberpart[0] );
+                       $start = $end = strlen( $integerPart[0] );
                        while ( $start > 0 ) {
                                $match = $matches[0][$numMatches -1] ;
                                $matchLen = strlen( $match );
@@ -2967,7 +3067,7 @@ class Language {
                                if ( $start < 0 ) {
                                        $start = 0;
                                }
-                               $groupedNumber = substr( $_ , $start, $end -$start ) . $groupedNumber ;
+                               $groupedNumber = substr( $number , $start, $end -$start ) . $groupedNumber ;
                                $end = $start;
                                if ( $numMatches > 1 ) {
                                        // use the last pattern for the rest of the number
@@ -2980,6 +3080,7 @@ class Language {
                        return $sign . $groupedNumber;
                }
        }
+
        /**
         * @return String
         */
@@ -3011,25 +3112,26 @@ class Language {
         * @return string
         */
        function listToText( array $l ) {
-               $s = '';
                $m = count( $l ) - 1;
-
-               if ( $m === 0 ) {
-                       return $l[0];
-               } elseif ( $m === 1 ) {
-                       return $l[0] . $this->getMessageFromDB( 'and' ) . $this->getMessageFromDB( 'word-separator' ) . $l[1];
-               } else {
-                       for ( $i = $m; $i >= 0; $i-- ) {
-                               if ( $i == $m ) {
-                                       $s = $l[$i];
-                               } elseif ( $i == $m - 1 ) {
-                                       $s = $l[$i] . $this->getMessageFromDB( 'and' ) . $this->getMessageFromDB( 'word-separator' ) . $s;
-                               } else {
-                                       $s = $l[$i] . $this->getMessageFromDB( 'comma-separator' ) . $s;
-                               }
+               if ( $m < 0 ) {
+                       return '';
+               }
+               if ( $m > 0 ) {
+                       $and = $this->getMessageFromDB( 'and' );
+                       $space = $this->getMessageFromDB( 'word-separator' );
+                       if ( $m > 1 ) {
+                               $comma = $this->getMessageFromDB( 'comma-separator' );
+                       }
+               }
+               $s = $l[$m];
+               for ( $i = $m - 1; $i >= 0; $i-- ) {
+                       if ( $i == $m - 1 ) {
+                               $s = $l[$i] . $and . $space . $s;
+                       } else {
+                               $s = $l[$i] . $comma . $s;
                        }
-                       return $s;
                }
+               return $s;
        }
 
        /**
@@ -3574,7 +3676,7 @@ class Language {
         * @return bool
         */
        public function hasVariants() {
-               return sizeof( $this->getVariants() ) > 1;
+               return count( $this->getVariants() ) > 1;
        }
 
        /**
@@ -4282,5 +4384,4 @@ class Language {
                $form = CLDRPluralRuleEvaluator::evaluateCompiled( $number, $pluralRules );
                return $form;
        }
-
 }
index fed8835..43afe65 100644 (file)
@@ -410,7 +410,7 @@ class LanguageConverter {
                                        $attr = $attrs[$attrName];
                                        // Don't convert URLs
                                        if ( !strpos( $attr, '://' ) ) {
-                                               $attr = $this->convertTo( $attr, $toVariant );
+                                               $attr = $this->recursiveConvertTopLevel( $attr, $toVariant );
                                        }
 
                                        // Remove HTML tags to avoid disrupting the layout
index d95c42e..04b2e16 100644 (file)
@@ -65,4 +65,31 @@ class LanguageZh_hans extends Language {
                wfProfileOut( __METHOD__ );
                return $s;
        }
+
+       /**
+        * Takes a number of seconds and turns it into a text using values such as hours and minutes.
+        *
+        * @since 1.21
+        *
+        * @param integer $seconds The amount of seconds.
+        * @param array $chosenIntervals The intervals to enable.
+        *
+        * @return string
+        */
+       public function formatDuration( $seconds, array $chosenIntervals = array() ) {
+               if ( empty( $chosenIntervals ) ) {
+                       $chosenIntervals = array( 'centuries', 'years', 'days', 'hours', 'minutes', 'seconds' );
+               }
+
+               $intervals = $this->getDurationIntervals( $seconds, $chosenIntervals );
+
+               $segments = array();
+
+               foreach ( $intervals as $intervalName => $intervalValue ) {
+                       $message = wfMessage( 'duration-' . $intervalName )->numParams( $intervalValue );
+                       $segments[] = $message->inLanguage( $this )->escaped();
+               }
+
+               return implode( '', $segments );
+       }
 }
index 0a5f059..0a380a6 100644 (file)
@@ -42,5 +42,9 @@
                <pluralRules locales="fa hu ja vi">
                        <pluralRule count="one">n is 1</pluralRule>
                </pluralRules>
+               <!-- Copied from "bh" -->
+               <pluralRules locales="bho">
+                       <pluralRule count="one">n in 0..1</pluralRule>
+               </pluralRules>
        </plurals>
 </supplementalData>
index 799710a..4861900 100644 (file)
@@ -26,8 +26,8 @@ $namespaceNames = array(
        NS_PROJECT_TALK     => 'Marit_$1',
        NS_FILE             => 'Beureukaih',
        NS_FILE_TALK        => 'Marit_Beureukaih',
-       NS_MEDIAWIKI        => 'AlatWiki',
-       NS_MEDIAWIKI_TALK   => 'Marit_AlatWiki',
+       NS_MEDIAWIKI        => 'MediaWiki',
+       NS_MEDIAWIKI_TALK   => 'Marit_MediaWiki',
        NS_TEMPLATE         => 'Pola',
        NS_TEMPLATE_TALK    => 'Marit_Pola',
        NS_HELP             => 'Beunantu',
@@ -38,28 +38,30 @@ $namespaceNames = array(
 
 $namespaceAliases = array(
        'Istimewa'              => NS_SPECIAL,
+       'Bicara'                => NS_TALK,
        'Pembicaraan'           => NS_TALK,
        'Pengguna'              => NS_USER,
+       'Bicara_Pengguna'       => NS_USER_TALK,
        'Pembicaraan_Pengguna'  => NS_USER_TALK,
        'Pembicaraan_$1'        => NS_PROJECT_TALK,
        'Berkas'                => NS_FILE,
+       'Gambar'                => NS_FILE,
        'Pembicaraan_Berkas'    => NS_FILE_TALK,
+       'Pembicaraan_Gambar'    => NS_FILE_TALK,
+       'AlatWiki'              => NS_MEDIAWIKI,
+       'Marit_AlatWiki'        => NS_MEDIAWIKI_TALK,
        'Pembicaraan_MediaWiki' => NS_MEDIAWIKI_TALK,
+       'MediaWiki_Pembicaraan' => NS_MEDIAWIKI_TALK,
        'Templat'               => NS_TEMPLATE,
        'Pembicaraan_Templat'   => NS_TEMPLATE_TALK,
+       'Templat_Pembicaraan'   => NS_TEMPLATE_TALK,
        'Bantuan'               => NS_HELP,
+       'Bantuan_Pembicaraan'   => NS_HELP_TALK,
        'Pembicaraan_Bantuan'   => NS_HELP_TALK,
        'Kategori'              => NS_CATEGORY,
+       'Kategori_Pembicaraan'  => NS_CATEGORY_TALK,
        'Pembicaraan_Kategori'  => NS_CATEGORY_TALK,
        'Gambar_Pembicaraan'    => NS_FILE_TALK,
-       'MediaWiki_Pembicaraan' => NS_MEDIAWIKI_TALK,
-       'Templat_Pembicaraan'   => NS_TEMPLATE_TALK,
-       'Bantuan_Pembicaraan'   => NS_HELP_TALK,
-       'Kategori_Pembicaraan'  => NS_CATEGORY_TALK,
-       'Gambar'                => NS_FILE,
-       'Pembicaraan_Gambar'    => NS_FILE_TALK,
-       'Bicara'                => NS_TALK,
-       'Bicara_Pengguna'       => NS_USER_TALK,
 );
 
 $specialPageAliases = array(
@@ -205,7 +207,7 @@ $messages = array(
 
 'underline-always' => 'Sabe',
 'underline-never' => "H'an tom",
-'underline-default' => 'Penjelajah web bawaan',
+'underline-default' => 'Kulet atawa ngon peuhah web teupasang',
 
 # Font style option in Special:Preferences
 'editfont-style' => 'Gaya seunurat komputer bak plok andam',
@@ -290,7 +292,8 @@ $messages = array(
 'newwindow' => '(peuhah bak tingkap barô)',
 'cancel' => 'Peubateuë',
 'moredotdotdot' => 'Lom...',
-'mypage' => 'Ôn lôn',
+'morenotlisted' => 'Lom...',
+'mypage' => 'Ôn',
 'mytalk' => 'Marit',
 'anontalk' => 'Peugah haba IP nyoë.',
 'navigation' => 'Navigasi',
@@ -313,7 +316,7 @@ $messages = array(
 'vector-action-protect' => 'Peulindông',
 'vector-action-undelete' => 'Bateuë sampôh',
 'vector-action-unprotect' => 'Gantoe neulindông',
-'vector-simplesearch-preference' => 'Peuudep mita saran nyang geupeusamporeuna (keu kulet Vector khong)',
+'vector-simplesearch-preference' => 'Peuudep beunteueng mita biasa (kulet Vector khong)',
 'vector-view-create' => 'Peugöt',
 'vector-view-edit' => 'Andam',
 'vector-view-history' => 'Atra u likôt',
@@ -323,6 +326,7 @@ $messages = array(
 'namespaces' => 'Ruweuëng nan',
 'variants' => 'Ragam',
 
+'navigation-heading' => 'Menu navigasi',
 'errorpagetitle' => 'Seunalah',
 'returnto' => 'Gisa u $1.',
 'tagline' => 'Nibak {{SITENAME}}',
@@ -419,10 +423,10 @@ $1",
 'youhavenewmessages' => 'Droëneuh   na $1 ($2).',
 'newmessageslink' => 'peusan barô',
 'newmessagesdifflink' => 'neuubah keuneulheuëh',
-'youhavenewmessagesfromusers' => "Droeneuh na $1 nibak {{PLURAL:$3||}}ureueng nguy la'en ($2).",
+'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|neuubah}} baro',
+'newmessagesdifflinkplural' => '{{PLURAL:$1||}}neuubah keuneulheueh',
 'youhavenewmessagesmulti' => 'Droëneuh na padum boh peusan barô bak $1',
 'editsection' => 'andam',
 'editold' => 'andam',
@@ -465,7 +469,8 @@ $1",
 '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 neulakee on kusuih nyang hana sah.</strong>',
+'nospecialpagetext' => "<strong>Droeneuh ka neulakee on kusuih nyang hana sah.</strong>
+Dapeuta on kusuih nyang sah jeuet neu'eu bak [[Special:SpecialPages|{{int:specialpages}}]].",
 
 # General errors
 'error' => 'Seunalah',
@@ -482,14 +487,20 @@ Neulakee basis data nyang keuneulheueh nakeuh:
 nibak fungsi "$2"
 Basis data geupeuhase salah "$3: $4".',
 'laggedslavemode' => 'Peuneugah: On nyoe kadang hana neuubah baro',
+'readonly' => 'Basis data geurok',
+'enterlockreason' => 'Pasoe daleh neurok ngon pajan jeuet geupeuhah',
 'missing-article' => 'Basis data h’an jeuët jiteumèë naseukah nibak ôn nyang sipatôtjih na, nakeuh "$1" $2.
 
 Nyoë biasajih sabab hubông useuëng u geunantoë away nyang ka teusampô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ë.',
 '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',
 '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"',
 'badtitle' => 'Nan hana sah',
 'badtitletext' => 'Nan ôn nyang neulakèë hana sah, soh, atawa nan antarabahsa atawa antarawiki nyang salah sambông.',
 'viewsource' => 'Eu nè',
@@ -527,9 +538,9 @@ Préksa keulayi neu’ija Droëneuh.',
 'passwordtooshort' => "Lageuëm paléng h'an haroh na {{PLURAL:$1|1 karakter|$1 karakter}}.",
 'mailmypassword' => "Peu'ét lageuëm barô",
 'passwordremindertitle' => 'Lageuëm seumeuntara barô keu {{SITENAME}}',
-'passwordremindertext' => 'Salah sidroë (kadang Droëneuh, ngön alamat IP $1) geulakèë kamoë keu meukirém lageuëm rahsia nyang barô keu {{SITENAME}} ($4).
-Lageuëm rahsia keu ureuëng nguy "$2" jinoë nakeuh "$3".
-Droëneuh geupeusaran keu neutamong sigra, lheuëh nyan neugantoë lageuëm rahsia.',
+'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.',
@@ -584,9 +595,9 @@ Alamat IP Droëneuh nakeuh $3, ngön ID neutheun nakeuh $5. Tulông peuseureuta
 '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ë.
 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 asoe bak on nyoe jinoe.
-Droeneuh jeuet [[Special:Search/{{PAGENAME}}|neumita keu nan on nyoe]] bak on la\'en,
-atawa <span class="plainlinks">[{{fullurl:{{#Special:Log}}|page={{FULLPAGENAMEE}}}} neumita log nyang na hubongan]</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ë',
 'updated' => '(Seubarô)',
 'note' => "'''Ceunatat:'''",
 'previewnote' => "'''Beu neuingat meunyo ôn nyoë goh lom neukeubah!'''",
@@ -719,6 +730,9 @@ Surat-e droeneuh h'an geupeugah keu ureueng nyan.",
 
 'grouppage-sysop' => '{{ns:project}}:Ureuëng urôh',
 
+# Special:Log/newusers
+'newuserlogpage' => 'ureuëng nguy barô',
+
 # User rights log
 'rightslog' => 'Log neuubah hak peuhah',
 
@@ -894,9 +908,6 @@ Teuneurang bak [$2 on teuneurangjih] geupeuleumah di yup nyoe.",
 'linksearch-ok' => 'Mita',
 'linksearch-line' => '$1 meusambat nibak $2',
 
-# Special:Log/newusers
-'newuserlogpage' => 'ureuëng nguy barô',
-
 # Special:ListGroupRights
 'listgrouprights-members' => '(dapeuta anggèëta)',
 
@@ -904,7 +915,7 @@ Teuneurang bak [$2 on teuneurangjih] geupeuleumah di yup nyoe.",
 'emailuser' => 'Surat-e ureuëng nguy',
 
 # Watchlist
-'watchlist' => 'Dapeuta keunalön lôn',
+'watchlist' => 'Dapeuta keunalön',
 'mywatchlist' => 'Keunalön',
 'watchlistfor2' => 'Keu $1 $2',
 'addedwatchtext' => "Ôn \"[[:\$1]]\" ka geupeutamah u [[Special:Watchlist|dapeuta keunalön]] Droëneuh. Neu’ubah-neu’ubah bak masa u keuë bak ôn nyan ngön bak ôn peugah habajih, euntreuk leumah nyoë pat. Ôn nyan euntreuk geupeuleumah ''teubay'' bak [[Special:RecentChanges|dapeuta neu’ubah paléng barô]] mangat leubèh mudah leumah.",
@@ -969,10 +980,11 @@ Droëneuh jeuët neugantoë tingkat lindông keu ôn nyoë, tapi nyan hana peung
 # Namespace form on various pages
 'namespace' => 'Ruweuëng nan:',
 'invert' => 'Peubalék peuniléh',
+'namespace_association' => 'Ruweuëng nan meuhubông',
 'blanknamespace' => '(Keuë)',
 
 # Contributions
-'contributions' => 'Peuneugöt',
+'contributions' => 'Peuneugöt {{GENDER:$1|ureuëng nguy}}',
 'contributions-title' => 'Peuneugöt ureuëng nguy keu $1',
 'mycontris' => 'Peuneugöt',
 'contribsub2' => 'Keu $1 ($2)',
@@ -1006,7 +1018,7 @@ Droëneuh jeuët neugantoë tingkat lindông keu ôn nyoë, tapi nyan hana peung
 'whatlinkshere-hideredirs' => '$1 peuninah',
 'whatlinkshere-hidetrans' => '$1 transklusi',
 'whatlinkshere-hidelinks' => '$1 hubông',
-'whatlinkshere-hideimages' => '$1 hubong gamba',
+'whatlinkshere-hideimages' => '$1 hubông beureukaih',
 'whatlinkshere-filters' => 'Saréng',
 
 # Block/unblock
index 8f83464..a4a0b31 100644 (file)
@@ -764,7 +764,6 @@ $2
 'template-protected' => '(حماية كاملة)',
 'template-semiprotected' => '(حماية جزئية)',
 'hiddencategories' => '{{PLURAL:$1|هذه الصفحة غير موجودة في أي تصنايف مخفية|هذه الصفحة موجودة في تصنيف مخفي واحد|هذه الصفحة موجودة في تصنيفين مخفيين|هذه الصفحة موجودة في $1 تصانيف مخفية|هذه الصفحة موجودة في $1 تصنيفا مخفيا|هذه الصفحة موجودة في $1 تصنيف مخفي}}:',
-'nocreatetitle' => 'تم تحديد إنشاء الصفحات',
 'nocreatetext' => 'قام {{SITENAME}} بتحديد القدرة على إنشاء صفحات جديدة.
 يمكنك العودة وتحرير صفحة موجودة بالفعل، أو [[Special:UserLogin|الدخول أو تسجيل حساب]].',
 'nocreate-loggedin' => 'أنت لا تمتلك الصلاحية لإنشاء صفحات جديدة.',
@@ -1040,6 +1039,9 @@ $1",
 'prefs-help-email' => 'عنوان البريد الإلكتروني هو أمر اختياري، ولكن ستحتاج لإعادة تعيين كلمة المرور، إن نسيت كلمة المرور الخاصة بك.',
 'prefs-help-email-others' => 'يمكنك أيضا اختيار للسماح للآخرين الاتصال بك عن طريق صفحة المستخدم أو نقاش المستخدم الخاص بك دون الحاجة إلى الكشف عن الهوية الخاصة بك.',
 
+# Special:Log/newusers
+'newuserlogpage' => 'سجل إنشاء المستخدمين',
+
 # Associated actions - in the sentence "You do not have permission to X"
 'action-edit' => 'modifi hal page',
 
@@ -1148,9 +1150,6 @@ $1",
 # Special:LinkSearch
 'linksearch-line' => '$1 موصولة من $2',
 
-# Special:Log/newusers
-'newuserlogpage' => 'سجل إنشاء المستخدمين',
-
 # Special:ListGroupRights
 'listgrouprights-members' => '(قائمة الأعضاء)',
 
index 37ca3bb..e4262a4 100644 (file)
@@ -255,7 +255,7 @@ $messages = array(
 
 'underline-always' => 'Altyd',
 'underline-never' => 'Nooit',
-'underline-default' => 'Blaaierverstek',
+'underline-default' => 'Standaard in u omslag of webblaaier',
 
 # Font style option in Special:Preferences
 'editfont-style' => 'Lettertipe vir wysigingsvenster:',
@@ -340,6 +340,7 @@ $messages = array(
 'newwindow' => '(verskyn in nuwe venster)',
 'cancel' => 'Kanselleer',
 'moredotdotdot' => 'Meer…',
+'morenotlisted' => 'Meer nie gelys nie...',
 'mypage' => 'Gebruikersblad',
 'mytalk' => 'Bespreking',
 'anontalk' => 'Besprekingsblad vir hierdie IP',
@@ -363,7 +364,7 @@ $messages = array(
 'vector-action-protect' => 'Beskerm',
 'vector-action-undelete' => 'Ontskrap',
 'vector-action-unprotect' => 'Wysig beskerming',
-'vector-simplesearch-preference' => 'Aktiveer verbeterde soek-voorstelle (slegs vir die Vektor omslag)',
+'vector-simplesearch-preference' => 'Aktiveer vereenvoudigde soekbalk (slegs vir die Vektor-omslag)',
 'vector-view-create' => 'Skep',
 'vector-view-edit' => 'Wysig',
 'vector-view-history' => 'Wys geskiedenis',
@@ -539,13 +540,11 @@ Databasis gee foutboodskap: "$3: $4".',
 'laggedslavemode' => 'Waarskuwing: Onlangse wysigings dalk nie in bladsy vervat nie.',
 'readonly' => 'Databasis gesluit',
 'enterlockreason' => 'Rede vir die sluiting,
-en beraming van wanneer ontsluiting sal plaas vind',
-'readonlytext' => 'Die {{SITENAME}} databasis is tans gesluit vir nuwe
-artikelwysigings, waarskynlik vir roetine databasisonderhoud,
+en beraming van wanneer ontsluiting sal plaasvind',
+'readonlytext' => 'Die databasis is tans gesluit vir nuwe artikelwysigings, waarskynlik vir roetine onderhoud,
 waarna dit terug sal wees na normaal.
-Die administreerder wat dit gesluit het se verduideliking:
 
-$1',
+Die administrateur wat dit gesluit het se verduideliking: $1',
 'missing-article' => "Die databasis kon nie soos verwag die teks vir die bladsy genaamd \"\$1\" \$2 kry nie.
 
 Dit gebeur gewoonlik as mens 'n verouderde verskil- of geskiedenis-skakel volg na 'n bladsy wat reeds verwyder is.
@@ -553,7 +552,7 @@ Dit gebeur gewoonlik as mens 'n verouderde verskil- of geskiedenis-skakel volg n
 Indien dit nie die geval is nie, het u moontlik 'n fout in die sagteware ontdek. Rapporteer asseblief die probleem aan 'n [[Special:ListUsers/sysop|administrateur]], en maak 'n nota van die URL.",
 'missingarticle-rev' => '(weergawe#: $1)',
 'missingarticle-diff' => '(Wysiging: $1, $2)',
-'readonly_lag' => 'Die databasis is outomaties gesluit terwyl die slaafdatabasisse sinchroniseer met die meester',
+'readonly_lag' => 'Die databasis is outomaties gesluit terwyl die slaafdatabasisse met die meester gesinchroniseer word',
 'internalerror' => 'Interne fout',
 'internalerror_info' => 'Interne fout: $1',
 'fileappenderrorread' => 'Kon nie "$1" tydens die "append" lees nie.',
@@ -567,7 +566,7 @@ Indien dit nie die geval is nie, het u moontlik 'n fout in die sagteware ontdek.
 'unexpected' => 'Onverwagte waarde: "$1"="$2".',
 'formerror' => 'Fout: kon vorm nie stuur nie',
 'badarticleerror' => 'Die aksie kon nie op hierdie bladsy uitgevoer word nie.',
-'cannotdelete' => 'Die bladsy of lêer "$1" kon nie skrap word nie.
+'cannotdelete' => 'Die bladsy of lêer "$1" kon nie verwyder word nie.
 Iemand anders het dit moontlik reeds geskrap.',
 'cannotdelete-title' => 'Bladsy "$1" kan nie verwyder word nie',
 'delete-hook-aborted' => "Die wysiging is deur 'n hoek gekanselleer.
@@ -586,10 +585,11 @@ Navraag: $2',
 'actionthrottled' => 'Outo-rem op aksie uitgevoer',
 'actionthrottledtext' => "As 'n teen-strooi aksie, word u beperk om hierdie aksie te veel keer in 'n kort tyd uit te voer, en u het hierdie limiet oorskry.
 Probeer asseblief weer oor 'n paar minute.",
-'protectedpagetext' => 'Hierdie bladsy is beskerm om redigering te verhoed.',
+'protectedpagetext' => 'Hierdie bladsy is beskerm om wysigings en ander aksies te verhoed.',
 'viewsourcetext' => 'U mag die bronteks van hierdie bladsy lees en kopieer:',
 'viewyourtext' => "U kan '''u wysigings''' aan die bronteks van hierdie bladsy bekyk en kopieer:",
-'protectedinterface' => 'Hierdie bladsy verskaf teks vir die koppelvlak van die sagteware, en is beskerm om misbruik te voorkom.',
+'protectedinterface' => 'Hierdie bladsy verskaf teks vir die koppelvlak van die sagteware, en is beskerm om misbruik te voorkom.
+Gebruik asseblief [//translatewiki.net/ translatewiki.net] om vertalings by te voeg of te wysig.',
 'editinginterface' => "'''Waarskuwing:''' U is besig om 'n bladsy te redigeer wat koppelvlakinligting aan die programmatuur voorsien. Wysigings aan hierdie bladsy sal die voorkoms van die gebruikerskoppelvlak vir ander gebruikers beïnvloed. Vir vertalings, oorweeg om eerder [//translatewiki.net/wiki/Main_Page?setlang=af translatewiki.net] (die vertalingsprojek vir MediaWiki) te gebruik.",
 'sqlhidden' => '(SQL navraag versteek)',
 'cascadeprotected' => 'Hierdie bladsy is beskerm teen redigering omdat dit ingesluit is in die volgende {{PLURAL:$1|bladsy|bladsye}} wat beskerm is met die "kaskade" opsie aangeskakel: $2',
@@ -627,7 +627,7 @@ Moenie vergeet om u [[Special:Preferences|voorkeure vir {{SITENAME}}]] te stel n
 'securelogin-stick-https' => 'Bly verbind met HTTPS na aanmelding',
 'yourdomainname' => 'U domein:',
 'password-change-forbidden' => 'U kan nie wagwoorde op hierdie wiki verander nie.',
-'externaldberror' => "'n Databasis fout het voorgekom tydens aanmelding of u het nie toestemming om u eksterne rekening op te dateer nie.",
+'externaldberror' => "'n Databasisfout het voorgekom tydens aanmelding of u het nie toestemming om u eksterne rekening op te dateer nie.",
 'login' => 'Teken in',
 'nav-login-createaccount' => 'Teken in',
 'loginprompt' => 'U blaaier moet koekies toelaat om by {{SITENAME}} te kan aanteken.',
@@ -713,6 +713,7 @@ Wag asseblief alvorens u weer probeer.",
 # E-mail sending
 'php-mail-error-unknown' => 'Onbekende fout in PHP se mail()-funksie',
 'user-mail-no-addy' => "Geprobeer om e-pos te stuur sonder 'n e-posadres.",
+'user-mail-no-body' => "Daar is probeer om 'n leë of 'n onredelike kort boodskap te stuur.",
 
 # Change password dialog
 'resetpass' => 'Verander wagwoord',
@@ -773,6 +774,7 @@ Tydelike wagwoord: $2',
 'changeemail-oldemail' => 'Huidige e-posadres:',
 'changeemail-newemail' => 'Nuwe e-posadres:',
 'changeemail-none' => '(geen)',
+'changeemail-password' => 'U wagwoord vir {{SITENAME}}:',
 'changeemail-submit' => 'Wysig E-posadres',
 'changeemail-cancel' => 'Kanselleer',
 
@@ -935,9 +937,9 @@ Deur enigiets hier te plaas, beloof u dat u dit self geskryf het, of dat dit gek
 '''MOENIE WERK WAT DEUR KOPIEREG BESKERM WORD HIER PLAAS SONDER TOESTEMMING NIE!'''",
 'longpageerror' => "'''Fout: die teks wat u bygevoeg het is {{PLURAL:$1|een kilogreep|$1 kilogrepe}} groot, wat groter is as die maksimum van {{PLURAL:$2|een kilogreep|$2 kilogrepe}}.'''
 Die bladsy kan nie gestoor word nie.",
-'readonlywarning' => "'''WAARSKUWING: Die databasis is gesluit vir onderhoud. Dus sal u nie nou u wysigings kan stoor nie. Dalk wil u die teks plak in 'n lêer en stoor vir later.'''
+'readonlywarning' => "'''WAARSKUWING: Die databasis is gesluit vir onderhoud. Dus sal u nie nou u wysigings kan stoor nie. Dalk wil u die teks in 'n lêer plak en stoor vir later.'''
 
-Een administrateur het die databasis geblokkeer vir hierdie rede: $1",
+Die administrateur wat dit gesluit het se verduideliking: $1",
 'protectedpagewarning' => "'''WAARSKUWING: Hierdie bladsy is beveilig sodat slegs administrateurs die inhoud sal kan verander.''' Die nuutste logboekinskrywing word hieronder ter verwysing vertoon:",
 'semiprotectedpagewarning' => "'''Let wel:''' Hierdie artikel is beveilig sodat slegs ingetekende gebruikers dit sal kan wysig. Die nuutste logboekinskrywing word hieronder ter verwysing vertoon:",
 'cascadeprotectedwarning' => "'''Waarskuwing:''' Die bladsy was beveilig sodat dit slegs deur administrateurs gewysig kan word, omrede dit ingesluit is in die volgende {{PLURAL:$1|bladsy|bladsye}} wat kaskade-beskerming geniet:",
@@ -950,7 +952,6 @@ Die nuutste logboekinskrywing word hieronder ter verwysing vertoon:",
 'template-semiprotected' => '(half-beskerm)',
 'hiddencategories' => "Hierdie bladsy is 'n lid van {{PLURAL:$1|1 versteekte kategorie|$1 versteekte kategorië}}:",
 'edittools' => '<!-- Die teks hier sal onderaan wysiging- en oplaaivorms vertoon word. -->',
-'nocreatetitle' => 'Bladsy skepping beperk',
 'nocreatetext' => '{{SITENAME}} het die skep van nuwe bladsye beperk.
 U kan slegs bestaande bladsye wysig, of u kan [[Special:UserLogin|aanteken of registreer]].',
 'nocreate-loggedin' => 'U het nie regte om nuwe blaaie te skep nie.',
@@ -975,6 +976,9 @@ Dit lyk of dit verwyder is.',
 'edit-already-exists' => 'Die bladsy is nie geskep nie.
 Dit bestaan alreeds.',
 'defaultmessagetext' => 'Verstekteks',
+'content-failed-to-parse' => 'Dit was nie moontlik om die inhoud van die MIME-tipe $2 vir die model $1 te verwerk nie: $3.',
+'invalid-content-data' => 'Ongeldige inhoud',
+'content-not-allowed-here' => '"$1" word nie op bladsy [[$2]] toegelaat nie.',
 
 # Content models
 'content-model-wikitext' => 'Wikiteks',
@@ -1136,7 +1140,9 @@ Kontroleer asseblief die logboeke.",
 'revdelete-only-restricted' => "'n Fout het voorgekom met die verberging van die item van $1, $2: u kan nie items onderdruk uit die sig van administrateurs sonder om ook een van die ander sigbaarheidsopsies te kies nie.",
 'revdelete-reason-dropdown' => '* Algemene redes vir skrapping
 ** Skending van outeursreg
-** Onbetaamlike persoonlike inligting',
+** Onbetaamlike persoonlike inligting
+** Onbetaamlike gebruikersnaam
+** Potensieel lasterlike gegewens',
 'revdelete-otherreason' => 'Ander rede:',
 'revdelete-reasonotherlist' => 'Ander rede',
 'revdelete-edit-reasonlist' => 'Wysig skrap redes',
@@ -1345,9 +1351,9 @@ Die aksie kan nie ongedaan gemaak word nie.',
 'prefs-emailconfirm-label' => 'E-posbevestiging:',
 'prefs-textboxsize' => 'Afmetings van die wysigingsvenster',
 'youremail' => 'E-pos',
-'username' => 'Gebruikersnaam:',
-'uid' => 'Gebruiker-ID:',
-'prefs-memberingroups' => 'Lid van {{PLURAL:$1|groep|groepe}}:',
+'username' => '{{GENDER:$1|Gebruikersnaam}}:',
+'uid' => '{{GENDER:$1|Gebruikersnommer}}:',
+'prefs-memberingroups' => '{{GENDER:$2|Lid}} van {{PLURAL:$1|groep|groepe}}:',
 'prefs-registration' => 'Registrasiedatum:',
 'yourrealname' => 'Regte naam:',
 'yourlanguage' => 'Taal:',
@@ -1497,12 +1503,13 @@ Die inligting is vir ander gebruikers sigbaar.',
 'right-sendemail' => 'Stuur e-pos aan ander gebruikers',
 'right-passwordreset' => 'Wys e-posse vir herstel van wagwoord',
 
+# Special:Log/newusers
+'newuserlogpage' => 'Logboek van nuwe gebruikers',
+'newuserlogpagetext' => "Dit is 'n logboek van gebruikers wat onlangs ingeteken het.",
+
 # User rights log
 'rightslog' => 'Gebruikersregtelogboek',
 'rightslogtext' => 'Hier onder is die logboek van gebruikersregte wat verander is.',
-'rightslogentry' => 'wysig gebruikersregte vir $1 van $2 na $3',
-'rightslogentry-autopromote' => 'was outomaties bevorder van $2 na $3',
-'rightsnone' => '(geen)',
 
 # Associated actions - in the sentence "You do not have permission to X"
 'action-read' => 'lees die bladsy',
@@ -1746,6 +1753,7 @@ As daar steeds probleme is, kontak 'n [[Special:ListUsers/sysop|administrateur]]
 'backend-fail-notsame' => "'n Nie-identiese lêer bestaan al reeds by $1.",
 'backend-fail-invalidpath' => "$1 is nie 'n geldige stoorplek nie.",
 'backend-fail-delete' => 'Die lêer $1 kon nie geskrap word nie.',
+'backend-fail-describe' => 'Kon nie metadata vir lêer "$1" verander nie.',
 'backend-fail-alreadyexists' => 'Die lêer $1 bestaan al reeds.',
 'backend-fail-store' => 'Kon nie lêer $1 in $2 stoor nie.',
 'backend-fail-copy' => 'Kon nie lêer $1 na $2 kopieer nie.',
@@ -1762,7 +1770,7 @@ As daar steeds probleme is, kontak 'n [[Special:ListUsers/sysop|administrateur]]
 'backend-fail-internal' => "'n Onbekende fout het in die agterliggende stoorspasie $1 voorgekom.",
 'backend-fail-contenttype' => 'Kon nie die inhoudstipe van die lêer bepaal om na "$1" te stoor nie.',
 'backend-fail-batchsize' => "Die agterliggende stoorspasie het 'n groep van $1 {{PLURAL:$1|operasie|operasies}} ontvang; die limiet is $2 {{PLURAL:$2|operasie|operasies}}.",
-'backend-fail-usable' => 'Kon nie na die lêer "$1" skryf nie vanweë onvoldoende regte of gidse wat nie bestaan nie.',
+'backend-fail-usable' => 'Kon nie die lêer "$1" lees of skryf nie vanweë onvoldoende regte of gidse wat nie bestaan nie.',
 
 # File journal errors
 'filejournal-fail-dbconnect' => 'Kon nie na die joernaal-databasis op die agterliggende stoorspasie "$1" konnekteer nie.',
@@ -2136,7 +2144,7 @@ Sie ook [[Special:WantedCategories|nie-bestaande kategorieë met verwysings]].',
 'linksearch-ok' => 'Soek',
 'linksearch-text' => 'Patrone soos "*.wikipedia.org" kan gebruik word.<br />
 Benodig ten minste een topvlakdomein, soos byvoorbeeld "*.org".<br />
-Ondersteunde protokolle: <code>$1</code> (moenie hierdie in u soektog gebruik nie)',
+{{PLURAL:$2|Ondersteunde protokol|Ondersteunde protokolle}}: <code>$1</code> (http:// word gebruik as niks gespesifiseer is nie)',
 'linksearch-line' => '$1 geskakel vanaf $2',
 'linksearch-error' => 'Patrone kan slegs aan die begin van die rekenaarnaam geplaas word.',
 
@@ -2155,10 +2163,6 @@ Ondersteunde protokolle: <code>$1</code> (moenie hierdie in u soektog gebruik ni
 'activeusers-hidesysops' => 'Versteek administrateurs',
 'activeusers-noresult' => 'Geen gebruikers gevind nie.',
 
-# Special:Log/newusers
-'newuserlogpage' => 'Logboek van nuwe gebruikers',
-'newuserlogpagetext' => "Dit is 'n logboek van gebruikers wat onlangs ingeteken het.",
-
 # Special:ListGroupRights
 'listgrouprights' => 'Gebruikersgroepregte',
 'listgrouprights-summary' => "Hier volg 'n lys van gebruikersgroepe met hulle ooreenstemmende regte wat op die wiki gedefinieer is.
@@ -2182,8 +2186,10 @@ Daar kan [[{{MediaWiki:Listgrouprights-helppage}}|extra inligting]] oor individu
 'mailnologin' => 'Geen versendadres beskikbaar',
 'mailnologintext' => "U moet [[Special:UserLogin|ingeteken]] wees en 'n geldige e-posadres in die [[Special:Preferences|voorkeure]] hê om e-pos aan ander gebruikers te stuur.",
 'emailuser' => 'Stuur e-pos na hierdie gebruiker',
+'emailuser-title-target' => 'E-pos die {{GENDER:$1|gebruiker}}',
+'emailuser-title-notarget' => 'E-pos gebruiker',
 'emailpage' => 'Stuur e-pos na gebruiker',
-'emailpagetext' => 'As dié gebruiker \'n geldige e-posadres in sy/haar gebruikersvoorkeure het, sal hierdie vorm \'n enkele boodskap stuur. Die e-posadres in u [[Special:Preferences|gebruikersvoorkeure]] sal verkyn as die "Van"-adres van die pos. Dus sal die ontvanger kan terug antwoord.',
+'emailpagetext' => 'As {{GENDER:$1|dié gebruiker}} \'n geldige e-posadres in sy/haar gebruikersvoorkeure het, sal hierdie vorm \'n enkele boodskap stuur. Die e-posadres in u [[Special:Preferences|gebruikersvoorkeure]] sal verskyn as die "Van"-adres van die pos. Dus sal die ontvanger kan terug antwoord.',
 'usermailererror' => 'Fout met versending van e-pos:',
 'defemailsubject' => 'E-pos van {{SITENAME}}-gebruiker "$1"',
 'usermaildisabled' => 'E-pos deur gebruikers is gedeaktiveer.',
@@ -2222,9 +2228,8 @@ Daar kan [[{{MediaWiki:Listgrouprights-helppage}}|extra inligting]] oor individu
 'watchnologintext' => 'U moet [[Special:UserLogin|ingeteken]]
 wees om u dophoulys te verander.',
 'addwatch' => 'Voeg by dophoulys',
-'addedwatchtext' => "Die bladsy \"[[:\$1]]\" is by u [[Special:Watchlist|dophoulys]] bygevoeg. Toekomstige wysigings aan hierdie bladsy en sy verwante besprekingsblad sal op [[Special:Watchlist|u dophoulys]] gelys word en sal in '''vetdruk''' in die [[Special:RecentChanges|lys van onlangse wysigings]] vertoon word, sodat u dit makliker kan raaksien.
-
-As u die bladsy later van u dophoulys wil verwyder, kliek \"verwyder van dophoulys\" in die kieslys bo-aan die bladsy.",
+'addedwatchtext' => 'Die bladsy "[[:$1]]" is by u [[Special:Watchlist|dophoulys]] bygevoeg.
+Toekomstige wysigings aan hierdie bladsy en sy bybehorende besprekingsblad sal hier gelys word.',
 'removewatch' => 'Verwyder van dophoulys',
 'removedwatchtext' => 'Die bladsy "[[:$1]]" is van [[Special:Watchlist|u dophoulys]] afgehaal.',
 'watch' => 'Hou dop',
@@ -2253,14 +2258,22 @@ As u die bladsy later van u dophoulys wil verwyder, kliek \"verwyder van dophoul
 'enotif_mailer' => '{{SITENAME}} E-pos kennisgewings',
 'enotif_reset' => 'Merk alle bladsye as besoek',
 'enotif_impersonal_salutation' => '{{SITENAME}} gebruiker',
+'enotif_subject_deleted' => '{{SITENAME}}: bladsy $1 is verwyder deur {{GENDER:$2|$2}}',
+'enotif_subject_created' => '{{SITENAME}}: bladsy $1 is geskep deur {{GENDER:$2|$2}}',
+'enotif_subject_moved' => '{{SITENAME}}: bladsy $1 is geskuif deur {{GENDER:$2|$2}}',
+'enotif_subject_restored' => '{{SITENAME}}: bladsy $1 is teruggeplaas deur {{GENDER:$2|$2}}',
+'enotif_subject_changed' => '{{SITENAME}}: bladsy $1 is gewysig deur {{GENDER:$2|$2}}',
+'enotif_body_intro_deleted' => 'Die bladsy $1 op {{SITENAME}} is deur {{gender:$2|$2}} op $PAGEEDITDATE verwyder. Sien $3 vir die huidige weergawe.',
+'enotif_body_intro_created' => 'Die bladsy $1 op {{SITENAME}} is deur {{GENDER:$2|$2}} op $PAGEEDITDATE geskep. Sien $3 vir die huidige weergawe.',
+'enotif_body_intro_moved' => 'Die bladsy $1 op {{SITENAME}} is deur {{GENDER:$2|$2}} op $PAGEEDITDATE hernoem. Sien $3 vir die huidige weergawe.',
+'enotif_body_intro_restored' => 'Die bladsy $1 op {{SITENAME}} is deur {{GENDER:$2|$2}} op $PAGEEDITDATE teruggeplaas. Sien $3 vir die huidige weergawe.',
+'enotif_body_intro_changed' => 'Die bladsy $1 op {{SITENAME}} is op $PAGEEDITDATE deur {{GENDER:$2|$2}} gewysig. Sien $3 vir die huidige weergawe.',
 'enotif_lastvisited' => 'Sien $1 vir alle wysigings sedert u laaste besoek.',
-'enotif_lastdiff' => 'Sien $1 om hierdie wysiging te bekyk.',
+'enotif_lastdiff' => 'Gaan na $1 om hierdie wysiging te sien.',
 'enotif_anon_editor' => 'anonieme gebruiker $1',
 'enotif_body' => 'Beste $WATCHINGUSERNAME,
 
-Die bladsy $PAGETITLE op {{SITENAME}} is $CHANGEDORCREATED op $PAGEEDITDATE deur $PAGEEDITOR, sien $PAGETITLE_URL vir die nuutste weergawe.
-
-$NEWPAGE
+$PAGEINTRO $NEWPAGE
 
 Samevatting van die wysiging: $PAGESUMMARY $PAGEMINOREDIT
 
@@ -2269,9 +2282,9 @@ E-pos: $PAGEEDITOR_EMAIL
 Wiki: $PAGEEDITOR_WIKI
 
 Tensy u hierdie bladsy besoek, sal u geen verdere kennisgewings ontvang nie.
-U kan ook die waarskuwingsvlag op u dophoulys verstel.
+U kan ook die waarskuwingsvlag op u dophoulys stel.
 
-Groete van {{SITENAME}} se waarskuwingssisteem.
+Groete van {{SITENAME}} se waarskuwingsstelsel.
 
 --
 U kan u e-posvoorkeure stel by:
@@ -2285,6 +2298,8 @@ $UNWATCHURL
 
 Terugvoer en verdere bystand:
 {{canonicalurl:{{MediaWiki:Helppage}}}}',
+'created' => 'geskep',
+'changed' => 'verander',
 
 # Delete
 'deletepage' => 'Skrap bladsy',
@@ -2356,6 +2371,8 @@ Sien die [[Special:ProtectedPages|lys van beveiligde bladsye]] vir alle bladsye
 'prot_1movedto2' => 'het [[$1]] geskuif na [[$2]]',
 'protect-badnamespace-title' => 'Nie-beskermde naamruimte',
 'protect-badnamespace-text' => 'Bladsye in hierdie naamruimte kan nie beskerm word nie.',
+'protect-norestrictiontypes-text' => 'Die bladsy kan nie beveilig word nie omdat daar geen beperkingstipes beskikbaar is nie.',
+'protect-norestrictiontypes-title' => 'Nie beveiligbare bladsy',
 'protect-legend' => 'Bevestig beskerming',
 'protectcomment' => 'Rede:',
 'protectexpiry' => 'Verval:',
@@ -2371,9 +2388,9 @@ Hier volg die huidige instellings vir bladsy '''$1''':",
 Hier is die huidige verstellings vir bladsy '''$1''':",
 'protect-cascadeon' => 'Die bladsy word beskerm want dit is ingesluit by die volgende {{PLURAL:$1|blad|blaaie}} wat kaskade-beskerming geniet. U kan die veiligheidsvlak van die bladsy verander, maar dit sal nie die ander kaskade blaaie beïnvloed nie.',
 'protect-default' => 'Laat alle gebruikers toe',
-'protect-fallback' => 'Hiervoor is "$1" regte nodig',
-'protect-level-autoconfirmed' => 'Blokkeer nuwe en ongeregistreerde gebruikers',
-'protect-level-sysop' => 'Slegs administrateurs',
+'protect-fallback' => 'Laat slegs gebruikers met "$1" regte toe',
+'protect-level-autoconfirmed' => 'Laat slegs "autoconfirmed" gebruikers toe',
+'protect-level-sysop' => 'Laat slegs administrateurs toe',
 'protect-summary-cascade' => 'kaskade',
 'protect-expiring' => 'verval op $2 om $3 (UTC)',
 'protect-expiring-local' => 'verval op $1',
@@ -2439,7 +2456,8 @@ U mag moontlik 'n foutiewe skakel hê, of die weergawe is reeds herstel of uit d
 'undeletedrevisions' => '{{PLURAL:$1|1 weergawe|$1 weergawes}} herstel',
 'undeletedrevisions-files' => '{{PLURAL:$1|1 weergawe|$1 weergawes}} en {{PLURAL:$2|1 lêer|$2 lêers}} herstel',
 'undeletedfiles' => '{{PLURAL:$1|1 lêer|$1 lêers}} herstel',
-'cannotundelete' => 'Skrapping onsuksesvol; miskien het iemand anders dié bladsy al geskrap.',
+'cannotundelete' => 'Terugplasing was onsuksesvol:
+$1',
 'undeletedpage' => "'''$1 is teruggeplaas'''
 
 Konsulteer die [[Special:Log/delete|verwyderingslogboek]] vir 'n rekord van onlangse verwyderings en terugplasings.",
@@ -2723,14 +2741,14 @@ Kies asseblief 'n ander naam.",
 'move-subpages' => 'Skuif al die subbladsye (maksimaal $1)',
 'move-talk-subpages' => 'Skuif al die subbladsye van die besprekingsblad (maksimaal $1)',
 'movepage-page-exists' => 'Die bladsy $1 bestaan reeds en kan nie outomaties oorskryf word nie.',
-'movepage-page-moved' => 'Die bladsy $1 was na $2 geskuif.',
+'movepage-page-moved' => 'Die bladsy $1 is na $2 geskuif.',
 'movepage-page-unmoved' => 'Die bladsy $1 kon nie na $2 geskuif word nie.',
 'movepage-max-pages' => 'Die maksimum van $1 {{PLURAL:$1|bladsy|bladsye}} is geskuif. Die oorblywende bladsye na nie outomaties geskuif word nie.',
 'movelogpage' => 'Skuiflogboek',
 'movelogpagetext' => "Hier onder is 'n lys van geskuifde bladsye.",
 'movesubpage' => '{{PLURAL:$1|Subbladsy|Subbladsye}}',
 'movesubpagetext' => 'Die {{PLURAL:$1|subbladsy|$1 subbladsye}} van hierdie blad word hieronder gewys.',
-'movenosubpage' => 'Die bladsy het geen subbladsye.',
+'movenosubpage' => 'Die bladsy het geen subbladsye nie.',
 'movereason' => 'Rede:',
 'revertmove' => 'rol terug',
 'delete_and_move' => 'Skrap en skuif',
@@ -2745,6 +2763,7 @@ Die teikenartikel "[[:$1]]" bestaan reeds. Wil u dit skrap om plek te maak vir d
 'immobile-target-namespace-iw' => "'n Interwiki-skakel is nie 'n geldige bestemming vir die skuif van die bladsy nie.",
 'immobile-source-page' => 'Die bladsy kan nie geskuif word nie.',
 'immobile-target-page' => 'Dit is nie moontlik om na die titel toe te skuif nie.',
+'bad-target-model' => "Die gewenste bestemming gebruik 'n ander inhoudsmodel. Dit is nie moontlik van $1 na $2 om te skakel nie.",
 'imagenocrossnamespace' => "'n Medialêer kan nie na 'n ander naamruimte geskuif word nie",
 'nonfile-cannot-move-to-file' => 'Net lêers kan na die lêernaamspasie geskuif word',
 'imagetypemismatch' => 'Die nuwe lêer se uitbreiding pas nie by die lêertipe nie',
@@ -2823,6 +2842,7 @@ Alle transwiki-laaie word opgeteken in die [[Special:Log/import|invoer-logboek]]
 'import-interwiki-templates' => 'Sluit alle sjablone in',
 'import-interwiki-submit' => 'Importeer',
 'import-interwiki-namespace' => 'Doelnaamruimte:',
+'import-interwiki-rootpage' => 'Basisblad van bestemming (opsioneel):',
 'import-upload-filename' => 'Lêernaam:',
 'import-comment' => 'Opmerking:',
 'importtext' => 'Gebruik die [[Special:Export|eksport-funksie]] van die wiki waar die inligting vandaan kom.
@@ -2858,6 +2878,10 @@ Die lêer is slegs gedeeltelik opgelaai.',
 'import-error-interwiki' => 'Die bladsy "$1" is nie geïmporteer nie omdat sy naam vir eksterne skakeling (interwiki) gereserveer is.',
 'import-error-special' => 'Die bladsy "$1" is nie geïmporteer nie omdat dit aan \'n spesiale naamruimte behoort waarin geen bladsye geplaas kan word nie.',
 'import-error-invalid' => 'Die bladsy "$1" is nie geïmporteer nie omdat die naam ongeldig is.',
+'import-error-unserialize' => 'Weergawe $2 van die bladsy "$1" kon nie verwerk word nie. Die weergawe hoort inhoudsmodel $3 te gebruik met \'n serialisasie van $4.',
+'import-options-wrong' => 'Verkeerde {{PLURAL:$2|opsie|opsies}}: <nowiki>$1</nowiki>',
+'import-rootpage-invalid' => 'Die gespesifiseerde basisblad is ongeldig.',
+'import-rootpage-nosubpage' => 'Die naamruimte "$1" van die basisblad laat nie subblaaie toe nie.',
 
 # Import log
 'importlogpage' => 'Invoer logboek',
@@ -2977,18 +3001,48 @@ Hierdie situasie was waarskynlik deur 'n skakel na 'n eksterne webtuiste op ons
 
 # Info page
 'pageinfo-title' => 'Inligting oor "$1"',
+'pageinfo-not-current' => 'Hierdie gegewens is slegs vir die huidige weergawe beskikbaar.',
+'pageinfo-header-basic' => 'Basiese inligting',
 'pageinfo-header-edits' => 'Wysigingsgeskiedenis',
+'pageinfo-header-restrictions' => 'Bladsybeskerming',
+'pageinfo-header-properties' => 'Bladsy-eienskappe',
+'pageinfo-display-title' => 'Wys titel',
+'pageinfo-default-sort' => 'Standaard sorteerwyse',
+'pageinfo-length' => 'Bldasylengte (in grepe)',
 'pageinfo-article-id' => 'Bladsy-ID',
+'pageinfo-language' => 'Taal vir die bladsy',
+'pageinfo-robot-policy' => 'Status vir soekenjins',
 'pageinfo-robot-index' => 'Indekseerbaar',
 'pageinfo-robot-noindex' => 'Nie indekseerbaar nie',
 'pageinfo-views' => 'Aantal kere gewys',
 'pageinfo-watchers' => 'Aantal dophouers',
+'pageinfo-redirects-name' => 'Aansture na die bladsy',
+'pageinfo-subpages-name' => 'Subblaaie van die bladsy',
+'pageinfo-subpages-value' => '$1 ($2 {{PLURAL:$2|aanstuur|aansture}}; $3 {{PLURAL:$3|nie-aanstuur|nie-aansture}})',
+'pageinfo-firstuser' => 'Gebruiker wat die bladsy geskep het',
+'pageinfo-firsttime' => 'Datum waarop die bladsy geskep is',
+'pageinfo-lastuser' => 'Laatste wysiger',
+'pageinfo-lasttime' => 'Datum van laatste wysiging',
 'pageinfo-edits' => 'Totale aantal wysigings',
 'pageinfo-authors' => 'Totale aantal verskillende outeurs',
+'pageinfo-recent-edits' => 'Aantal onlangse wysigings (binne die afgelope $1)',
+'pageinfo-recent-authors' => 'Aantal verskillende onlangse outeurs',
+'pageinfo-magic-words' => '{{PLURAL:$1|Magiese woord|Magiese woorde}} ($1)',
+'pageinfo-hidden-categories' => 'Versteekte {{PLURAL:$1|kategorie|kategorieë}} ($1)',
+'pageinfo-templates' => '{{PLURAL:$1|Gebruikte sjabloon|Gebruikte sjablone}} ($1)',
+'pageinfo-transclusions' => '{{PLURAL:$1|Bladsy|Bladsye}} getranskludeerd op ($1)',
+'pageinfo-toolboxlink' => 'Bladinligting',
 'pageinfo-redirectsto' => 'Stuur aan na',
 'pageinfo-redirectsto-info' => 'Inligting',
+'pageinfo-contentpage' => "Getel as 'n bladsy met inhoud",
 'pageinfo-contentpage-yes' => 'Ja',
+'pageinfo-protect-cascading' => 'Beveiliging werk vanaf hier deur',
 'pageinfo-protect-cascading-yes' => 'Ja',
+'pageinfo-protect-cascading-from' => "Bladsy is vanuit 'n ander blad beveilig",
+'pageinfo-category-info' => 'Kategoriegegewens',
+'pageinfo-category-pages' => 'Aantal bladsye',
+'pageinfo-category-subcats' => 'Aantal subkategorieë',
+'pageinfo-category-files' => 'Aantal lêers',
 
 # Skin names
 'skinname-standard' => 'Standaard',
@@ -3005,6 +3059,8 @@ Hierdie situasie was waarskynlik deur 'n skakel na 'n eksterne webtuiste op ons
 'markedaspatrollederror' => 'Kan nie as gekontroleerd merk nie',
 'markedaspatrollederrortext' => "U moet 'n weergawe spesifiseer om as gekontroleerd te merk.",
 'markedaspatrollederror-noautopatrol' => 'U kan nie u eie veranderinge as gekontroleerd merk nie.',
+'markedaspatrollednotify' => 'Hierdie wysiging aan $1 is as gekontroleerd gemerk.',
+'markedaspatrollederrornotify' => 'Merk as gekontroleerd het misluk.',
 
 # Patrol log
 'patrol-log-page' => 'Kontroleringslogboek',
@@ -3032,10 +3088,12 @@ $1',
 'thumbsize' => 'Grootte van duimnaelskets:',
 'widthheightpage' => '$1 × $2, $3 {{PLURAL:$3|bladsy|bladsye}}',
 'file-info' => 'lêergrootte: $1, MIME-tipe: $2',
-'file-info-size' => '$1 × $2 pixels, lêergrootte: $3, MIME type: $4',
-'file-info-size-pages' => '$1 × $2 pikels, lêergrootte: $3, MIME-tipe: $4, $5 {{PLURAL:$5|bladsy|bladsye}}',
+'file-info-size' => '$1 × $2 piksels, lêergrootte: $3, MIME-tipe: $4',
+'file-info-size-pages' => '$1 × $2 piksels, lêergrootte: $3, MIME-tipe: $4, $5 {{PLURAL:$5|bladsy|bladsye}}',
 'file-nohires' => 'Geen hoër resolusie is beskikbaar nie.',
-'svg-long-desc' => 'SVG-lêer, nominaal $1 × $2 pixels, lêergrootte: $3',
+'svg-long-desc' => 'SVG-lêer, normaalweg $1 × $2 piksels, lêergrootte: $3',
+'svg-long-desc-animated' => 'Geanimeerde SVG-lêer, normaalweg $1 × $2 piksels, lêergrootte: $3',
+'svg-long-error' => 'Ongeldige SVG-lêer: $1',
 'show-big-image' => 'Volle resolusie',
 'show-big-image-preview' => 'Grootte van hierdie voorskou: $1.',
 'show-big-image-other' => 'Ander {{PLURAL:$2|resolusie|resolusies}}: $1.',
@@ -3045,6 +3103,8 @@ $1',
 'file-info-png-looped' => 'herhalend',
 'file-info-png-repeat' => '$1 {{PLURAL:$1|keer|kere}} gespeel',
 'file-info-png-frames' => '$1 {{PLURAL:$1|raam|rame}}',
+'file-no-thumb-animation' => "'''Let op: vanweë tegniese beperkinge, kan duimnaels van die lêer nie geanimeerd gewys word nie.'''",
+'file-no-thumb-animation-gif' => "'''Let op: vanweë tegniese beperkinge, kan duimnaels met hoë resolusie GIF-lêers nie geanimeerd gewys word nie.'''",
 
 # Special:NewFiles
 'newimages' => 'Gallery van nuwe beelde',
@@ -3063,6 +3123,8 @@ $1',
 'minutes' => '{{PLURAL:$1|$1 minuut|$1 minute}}',
 'hours' => '{{PLURAL:$1|$1 uur|$1 ure}}',
 'days' => '{{PLURAL:$1|$1 dag|$1 dae}}',
+'months' => '{{PLURAL:$1|een maand|$1 maande}}',
+'years' => '{{PLURAL:$1|een jaar|$1 jaar}}',
 'ago' => '$1 gelede',
 'just-now' => 'Nou net',
 
@@ -3100,7 +3162,7 @@ Ander velde sal versteek wees.
 'exif-imagelength' => 'Hoogte',
 'exif-bitspersample' => 'Grepe per komponent',
 'exif-compression' => 'Kompressiemetode',
-'exif-photometricinterpretation' => 'Pixel-komposisie',
+'exif-photometricinterpretation' => 'Piksel-komposisie',
 'exif-orientation' => 'Oriëntasie',
 'exif-samplesperpixel' => 'Aantal komponente',
 'exif-planarconfiguration' => 'Datastruktuur',
@@ -3556,6 +3618,7 @@ Die bevestigingskode sal om $4 verval.',
 # Scary transclusion
 'scarytranscludedisabled' => '[Interwiki-invoeging van sjablone is afgeskakel]',
 'scarytranscludefailed' => '[Sjabloon $1 kon nie gelaai word nie]',
+'scarytranscludefailed-httpstatus' => '[Sjabloon $1 kon nie gelaai word nie: HTTP $2]',
 'scarytranscludetoolong' => '[Die URL is te lank]',
 
 # Delete conflict
@@ -3673,6 +3736,7 @@ U kan ook die [[Special:EditWatchlist|standaard opdaterigskerm gebruik]].',
 'version-license' => 'Lisensie',
 'version-poweredby-credits' => "Hierdie wiki word aangedryf deur '''[//www.mediawiki.org/ MediaWiki]''', kopiereg © 2001-$1 $2.",
 'version-poweredby-others' => 'andere',
+'version-credits-summary' => 'Ons erken graag die volgende persone vir hul bydrae aan [[Special:Version|MediaWiki]].',
 'version-license-info' => 'MediaWiki is vrye sagteware, u kan MediaWiki versprei en/of wysig onder die voorwaardes van die "GNU Algemene Publieke Lisensie", soos deur die "Free Software Foundation" gepubliseer; óf weergawe 2 van die lisensie, of (as u wil) enige latere weergawe daarvan.
 
 MediaWiki word versprei met die hoop dat dit nuttig sal wees, maar SONDER ENIGE WAARBORGE, selfs sonder geïmpliseerde waarborg van VERHANDELBAARHEID of GESKIKTHEID VIR \'N SPESIFIEKE DOEL. Verwys na die "GNU Algemene Publieke Lisensie" vir meer besonderhede.
@@ -3698,7 +3762,7 @@ Beelde word in hulle volle resolusie gewys. Ander lêertipes word direk met hull
 'fileduplicatesearch-legend' => "Soek vir 'n duplikaat",
 'fileduplicatesearch-filename' => 'Lêernaam:',
 'fileduplicatesearch-submit' => 'Soek',
-'fileduplicatesearch-info' => '$1 × $2 pixels<br />Lêergrootte: $3<br />MIME-tipe: $4',
+'fileduplicatesearch-info' => '$1 × $2 piksels<br />Lêergrootte: $3<br />MIME-tipe: $4',
 'fileduplicatesearch-result-1' => 'Die lêer "$1" het geen identiese duplikate nie.',
 'fileduplicatesearch-result-n' => 'Die lêer "$1" het {{PLURAL:$2|een identiese duplikaat|$2 identiese duplikate}}.',
 'fileduplicatesearch-noresults' => 'Daar is nie \'n lêer met die naam "$1" nie.',
@@ -3816,7 +3880,10 @@ Beelde word in hulle volle resolusie gewys. Ander lêertipes word direk met hull
 'logentry-newusers-create' => 'Gebruiker $1 is geskep',
 'logentry-newusers-create2' => 'Gebruiker $3 is deur $1 geskep',
 'logentry-newusers-autocreate' => 'Die gebruiker $1 is outomaties geskep',
-'newuserlog-byemail' => 'wagwoord is per e-pos versend',
+'logentry-rights-rights' => '$1 het groepslidmaatskap vir $3 van $4 na $5 gewysig',
+'logentry-rights-rights-legacy' => '$1 het groepslidmaatskap vir $3 gewysig',
+'logentry-rights-autopromote' => '$1 is outomaties gepromoveerd van $4 na $5',
+'rightsnone' => '(geen)',
 
 # Feedback
 'feedback-bugornote' => 'As u reg is om \'n tegniese probleem in detail te beskryf, [$1 rapporteer \'n fout].
@@ -3890,6 +3957,4 @@ Anders kan u die eenvoudige vorm hieronder gebruik. U kommentaar sal by die blad
 'duration-centuries' => '$1 {{PLURAL:$1|eeu|eeue}}',
 'duration-millennia' => '$1 {{PLURAL:$1|millennium|millennia}}',
 
-# Unknown messages
-'svg-long-error' => 'Ongeldige SVG-lêer: $1',
 );
index ac98994..88632af 100644 (file)
@@ -733,7 +733,6 @@ Administruesi që e ka mshelë e ka dhânë këtë shpjegim: $1",
 'template-protected' => '(e mbrojtme)',
 'template-semiprotected' => '(gjysë-mbrojtun)',
 'hiddencategories' => 'Kjo faqe bân pjesë në {{PLURAL:$1|1 kategori të msheftë|$1 kategori të mshefta}}:',
-'nocreatetitle' => 'Krijimi i faqeve âsht i kufizuem.',
 'nocreatetext' => '{{SITENAME}} ka kufizue mundësinë e krijimit të faqeve të reja.
 Mundeni me u kthy mbrapa edhe me redaktue faqen ekzistuese, apo [[Special:UserLogin|me u kyçë a me krijue nji llogari]].',
 'nocreate-loggedin' => 'Nuk keni tagër me krijue faqe të reja.',
@@ -1131,11 +1130,12 @@ Mundeni me zgjedhe që të tjerët me ju kontaktue përmjet faqe së diskutimit
 'right-userrights' => 'Redakto të gjitha të drejtat e përdoruesit',
 'right-passwordreset' => 'Fjalëkalimi Reset e një përdoruesi ([[Special:PasswordReset|faqe veçantë]])',
 
+# Special:Log/newusers
+'newuserlogpage' => 'Regjistri i krijimit të përdoruesve',
+
 # User rights log
 'rightslog' => 'Regjsitri i tagrit të përdoruesve',
 'rightslogtext' => 'Ky është një regjistër për ndryshimet e titujve të përdoruesve.',
-'rightslogentry' => 'të drejtat e $1 u ndryshuan prej $2 në $3',
-'rightsnone' => '(asgjë)',
 
 # Associated actions - in the sentence "You do not have permission to X"
 'action-read' => 'lexo këtë faqe',
@@ -1273,9 +1273,6 @@ Faqet në [[Special:Watchlist|listën tuej të mbikëqyrjes]] janë '''të theks
 # Special:LinkSearch
 'linksearch' => 'Vegzat e jashtme',
 
-# Special:Log/newusers
-'newuserlogpage' => 'Regjistri i krijimit të përdoruesve',
-
 # Special:ListGroupRights
 'listgrouprights-members' => '(lista e antarëve)',
 
@@ -1613,6 +1610,7 @@ Tjerat kanë me mbetë të mshefuna.
 # New logging system
 'revdelete-restricted' => 'u vendosën kufizime për administruesit',
 'revdelete-unrestricted' => 'u hoqën kufizimet për administruesit',
+'rightsnone' => '(asgjë)',
 
 # Search suggestions
 'searchsuggest-search' => 'Kërkim',
diff --git a/languages/messages/MessagesAls.php b/languages/messages/MessagesAls.php
deleted file mode 100644 (file)
index 867d2a8..0000000
+++ /dev/null
@@ -1,12 +0,0 @@
-<?php
-/** Alemannisch
- *
- * See MessagesQqq.php for message documentation incl. usage of parameters
- * To improve a translation please visit http://translatewiki.net
- *
- * @ingroup Language
- * @file
- * @comment Deprecated code. Falls back to 'gsw'.
- */
-
-$fallback = 'gsw, de';
index 5aa7ce6..9faead8 100644 (file)
@@ -96,6 +96,9 @@ $messages = array(
 'underline-never' => 'ሁሌም አይሁን',
 'underline-default' => 'የቃኝ ቀዳሚ ባህሪዎች',
 
+# Font style option in Special:Preferences
+'editfont-default' => 'የቃኝ ቀዳሚ ባህሪዎች',
+
 # Dates
 'sunday' => 'እሑድ',
 'monday' => 'ሰኞ',
@@ -199,6 +202,8 @@ $messages = array(
 'vector-view-history' => 'ታሪኩን አሳይ',
 'vector-view-view' => 'ለማንበብ',
 'vector-view-viewsource' => 'ጥሬ ኮድ ለመመልከት',
+'actions' => 'ድርጊቶች',
+'namespaces' => 'ክፍለ-ዊኪዎች',
 
 'errorpagetitle' => 'ስህተት',
 'returnto' => '(ወደ $1 ለመመለስ)',
@@ -214,6 +219,7 @@ $messages = array(
 'printableversion' => 'ለህትመት የተዘጋጀ',
 'permalink' => 'ቋሚ መያያዣ',
 'print' => 'ይታተም',
+'view' => 'ለመመልከት',
 'edit' => 'አርም',
 'create' => 'ለመፍጠር',
 'editthispage' => 'ይህን ገጽ አርም',
@@ -221,6 +227,7 @@ $messages = array(
 'delete' => 'ይጥፋ',
 'deletethispage' => 'ይህን ገጽ ሰርዝ',
 'undelete_short' => '{{PLURAL:$1|አንድ ዕትም|$1 ዕትሞች}} ለመመልስ',
+'viewdeleted_short' => '{{PLURAL:$1|የጠፋውን ዕትም|$1 የጠፉትን ዕትሞች}} ለመመልከት',
 'protect' => 'ጠብቅ',
 'protect_change' => 'የመቆለፍ ደረጃን ለመለወጥ',
 'protectthispage' => 'ይህን ገጽ ለመቆለፍ',
@@ -257,6 +264,7 @@ $messages = array(
 ስለዚህ እባክዎን ትንሽ ቆይተው በድጋሚ ይዎክሩ።
 
 $1',
+'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) and the disambiguation template definition (see disambiguations).
 'aboutsite' => 'ስለ {{SITENAME}}',
@@ -290,6 +298,10 @@ $1',
 'youhavenewmessages' => '$1 አሉዎት ($2)።',
 'newmessageslink' => 'አዲስ መልእክቶች',
 'newmessagesdifflink' => 'የመጨረሻ ለውጥ',
+'youhavenewmessagesfromusers' => 'ከ{{PLURAL:$3|ሌላ አባል|$3 አባላት}} $1 {{PLURAL:$1|አለዎት|አሉልዎ}}። ($2).',
+'youhavenewmessagesmanyusers' => 'ከአሥር አባላት በላይ $1 አሉልዎ! ($2)',
+'newmessageslinkplural' => '{{PLURAL:$1|፩ አዲስ መልዕክት|አዲስ መልእክቶች}}',
+'newmessagesdifflinkplural' => 'መጨረሻ {{PLURAL:$1|ለውጥ|ለውጦች}}',
 'youhavenewmessagesmulti' => 'በ$1 አዲስ መልእክቶች አሉዎት',
 'editsection' => 'አርም',
 'editold' => 'አርም',
@@ -300,6 +312,8 @@ $1',
 'toc' => 'ማውጫ',
 'showtoc' => 'አሳይ',
 'hidetoc' => 'ደብቅ',
+'collapsible-collapse' => 'ይቀነስ',
+'collapsible-expand' => 'ይዘረጋ',
 'thisisdeleted' => '($1ን ለመመልከት ወይም ለመመለስ)',
 'viewdeleted' => '$1 ይታይ?',
 'restorelink' => '{{PLURAL:$1|የጠፋ ዕትም|$1 የጠፉት ዕትሞች}}',
@@ -348,6 +362,7 @@ $1',
 'readonly_lag' => 'ተከታይ ሰርቨሮች ለቀዳሚው እስከሚደርሱ ድረስ መረጃ-ቤቱ በቀጥታ ተቆልፏል።',
 'internalerror' => 'የውስጥ ስህተት',
 'internalerror_info' => 'የውስጥ ስህተት፦ $1',
+'fileappenderror' => '«$1» ወደ «$2» መጨምር አልተቻለም።',
 'filecopyerror' => 'ፋይሉን «$1» ወደ «$2» መቅዳት አልተቻለም።',
 'filerenameerror' => 'የፋይሉን ስም ከ«$1» ወደ «$2» መቀየር አተቻለም።',
 'filedeleteerror' => 'ፋይሉን «$1» ለማጥፋት አልተቻለም።',
@@ -358,6 +373,9 @@ $1',
 'formerror' => 'ስኅተት፦ ማመልከቻ ለማቅረብ አልተቻለም',
 'badarticleerror' => 'ይህ ተግባር በዚሁ ገጽ ላይ ሊደረግ አይቻልም።',
 'cannotdelete' => 'የተወሰነው ገጽ ወይም ፋይል ለማጥፋት አልተቻለም። (ምናልባት በሌላ ሰው እጅ ገና ጠፍቷል።)',
+'cannotdelete-title' => 'ገጹን «$1» ለማጥፋት አልተቻለም።',
+'delete-hook-aborted' => 'መጥፋቱ በሜንጦ ተቋረጠ።
+ምንም ምክንያት አልሰጠም።',
 'badtitle' => 'መጥፎ አርዕስት',
 'badtitletext' => 'የፈለጉት አርዕስት ልክ አልነበረም። ምናልባት ለአርዕስት የማይሆን የፊደል ምልክት አለበት።',
 'perfcached' => 'ማስታወቂያ፡ ይህ መረጃ በየጊዜ የሚታደስ ስለሆነ ዘመናዊ ሳይሆን የቆየ ሊሆን ይችላል። A maximum of {{PLURAL:$1|one result is|$1 results are}} available in the cache.',
@@ -367,6 +385,7 @@ $1',
 ተግባር፦ $1<br />
 ጥያቄ፦ $2',
 'viewsource' => 'ምንጩን ተመልከት',
+'viewsource-title' => 'ጥሬ ኮዱን ለ$1 ለማየት',
 'actionthrottled' => 'ተግባሩ ተቋረጠ',
 'actionthrottledtext' => 'የስፓም መብዛት ለመቃወም፣ በአጭር ጊዜ ውስጥ ይህን ተግባር ብዙ ጊዜ ከመፈጽም ተክለክለዋል። አሁንም ከመጠኑ በላይ በልጠዋል። እባክዎ ከጥቂት ደቂቃ በኋላ እንደገና ይሞክሩ።',
 'protectedpagetext' => 'ይኸው ገጽ እንዳይታረም ተጠብቋል።',
@@ -379,6 +398,8 @@ $2",
 'namespaceprotected' => "በ'''$1''' ክፍለ-ዊኪ ያሉትን ገጾች ለማዘጋጀት ፈቃድ የለዎም።",
 'ns-specialprotected' => 'ልዩ ገጾችን ማረም አይፈቀድም።',
 'titleprotected' => "ይህ አርዕስት እንዳይፈጠር በ[[User:$1|$1]] ተጠብቋል። የተሰጠው ምክንያት ''$2'' ነው።",
+'exception-nologin' => 'ገና አልገቡም',
+'exception-nologin-text' => 'ለዚሁ ገጽ ወይም አድራጎት፣ ወደ ዊኪው በአባልነት ስም አስቀድሞ መግባት ግዴታ ነው።',
 
 # Virus scanner
 'virus-unknownscanner' => 'ያልታወቀ antivirus:',
@@ -388,16 +409,19 @@ $2",
 
 አሁንም በቁጥር መታወቂያዎ ማዘጋጀት ይቻላል። ወይም ደግሞ እንደገና በብዕር ስምዎ መግባት ይችላሉ።
 በጥቂት ሴኮንድ ውስጥ ወደሚከተለው ገጽ በቀጥታ ይመለሳል፦",
+'welcomeuser' => 'ሰላምታ $1!  እንኳን ደህናመጡ።',
 'yourname' => 'Username / የብዕር ስም:',
 'yourpassword' => 'Password / መግቢያ ቃል',
 'yourpasswordagain' => 'መግቢያ ቃልዎን ዳግመኛ ይስጡ',
 'remembermypassword' => 'ለሚቀጥለው ጊዜ በዚ ኮምፒውተር ላይ በአባልነት ስሜ መግባቴን ( ቢባዛ ለ $1 {{PLURAL:$1|ቀን|ቀናት}}) አስታውስ።',
 'yourdomainname' => 'የእርስዎ ከባቢ (domain)፦',
+'password-change-forbidden' => 'በዚሁ ዊኪ መግቢያ ቃልን መቀይር አልተፈቀደም።',
 'externaldberror' => 'ወይም አፍአዊ የማረጋገጫ መረጃ-ቤት ስኅተት ነበረ፣ ወይም አፍአዊ አባልነትዎን ማሳደስ አልተፈቀዱም።',
 'login' => 'ለመግባት',
 'nav-login-createaccount' => 'መግቢያ',
 'loginprompt' => '(You must have cookies enabled to log in to {{SITENAME}}.)',
 'userlogin' => 'ግባ / ተመዝገብ',
+'userloginnocreate' => 'ለመግባት',
 'logout' => 'ከብዕር ስምዎ ለመውጣት',
 'userlogout' => 'መውጫ',
 'notloggedin' => 'አልገቡም',
@@ -406,10 +430,13 @@ $2",
 'createaccount' => 'አዲስ አባል ለመሆን',
 'gotaccount' => "(አባልነት አሁን ካለዎ፥ '''$1''' ይግቡ)",
 'gotaccountlink' => 'በዚህ',
+'userlogin-resetlink' => 'የመግቢያ ዝርዝርዎን ረተዋልን?',
 'createaccountmail' => 'በኢ-ሜል',
+'createaccountreason' => 'ምክንያት:',
 'badretype' => 'የጻፉት መግቢያ ቃሎች አይስማሙም።',
 'userexists' => 'ይህ ብዕር ስም አሁን ይኖራል። እባክዎ፣ ሌላ ብዕር ስም ይምረጡ።',
 'loginerror' => 'የመግባት ስኅተት',
+'createaccounterror' => 'ይህን አባልነት ለመፍጠር አልተቻለም፦ $1',
 'nocookiesnew' => 'ብዕር ስም ተፈጠረ፣ እርስዎ ግን ገና አልገቡም። በ{{SITENAME}} ተጠቃሚዎች ለመግባት የቃኚ-ማስታወሻ (cookie) ይጠቀማል። በርስዎ ኮምፒውተር ግን የቃኚ-ማስታወሻ እንዳይሠራ ተደርጓል። እባክዎ እንዲሠራ ያድርጉና በአዲስ ብዕር ስምና መግቢያ ቃልዎ ይግቡ።።',
 'nocookieslogin' => 'በ{{SITENAME}} ተጠቃሚዎች ለመግባት የቃኚ-ማስታወሻ (cookie) ይጠቀማል። በርስዎ ኮምፒውተር ግን የቃኚ-ማስታወሻ እንዳይሠራ ተደርጓል። እባክዎ እንዲሠራ ያድርጉና እንደገና ይሞክሩ።',
 'noname' => 'የተወሰነው ብዕር ስም ትክክለኛ አይደለም።',
@@ -418,9 +445,12 @@ $2",
 'nosuchuser' => '«$1» የሚል ብዕር ስም አልተገኘም። አጻጻፉን ይመልከቱ ወይም አዲስ ብዕር ስም ያውጡ።',
 'nosuchusershort' => '«$1» የሚል ብዕር ስም አልተገኘም። አጻጻፉን ይመልከቱ።',
 'nouserspecified' => 'አንድ ብዕር ስም መጠቆም ያስፈልጋል።',
+'login-userblocked' => 'ተጠቃሚው አሁን የታገደ ነው። መግባት አልተፈቀደም።',
 'wrongpassword' => 'የተሰጠው መግቢያ ቃል ልክ አልነበረም። ዳግመኛ ይሞክሩ።',
 'wrongpasswordempty' => 'ምንም መግቢያ ቃል አልተሰጠም። ዳግመኛ ይሞክሩ።',
 'passwordtooshort' => 'የመረጡት መግቢያ ቃል ልክ አይሆንም። ቢያንስ $1 ፊደላትና ከብዕር ስምዎ የተለየ መሆን አለበት።',
+'password-name-match' => 'መግቢያ ቃልዎ እና የአባል ስምዎ መለያየት አስፈላጊ ነው።',
+'password-login-forbidden' => 'ይህ አባል ስምና መግቢያ ቃል መጥቀም የተከለከለ ነው።',
 'mailmypassword' => 'አዲስ የይለፍቃል በኢሜሌ ይላክልኝ።',
 'passwordremindertitle' => 'አዲስ ግዜያዊ መግቢያ ቃል (PASSWORD) ለ{{SITENAME}}',
 'passwordremindertext' => 'አንድ ሰው (ከቁጥር አድራሻ #$1 ሆኖ እርስዎ ይሆናሉ) አዲስ መግቢያ ቃል ለ{{SITENAME}} ጠይቋል ($4).
@@ -428,6 +458,7 @@ $2",
 
 ይህ ጥያቄ የእርስዎ ካልሆነ፣ ወይም መግቢያ ቃልዎን ያስታወሱ እንደ ሆነ፣ ይህንን መልእክት ቸል ማለት ይችላሉ። የቆየው መግቢያ ቃል ከዚህ በኋላ ተግባራዊ ሆኖ ይቀጥላል።',
 'noemail' => 'ለብዕር ስም «$1» የተመዘገበ ኢ-ሜል የለም።',
+'noemailcreate' => 'ትክክለኛ ኢ-ሜል ማቅረብ ያስፈልጋል።',
 'passwordsent' => 'አዲስ መግቢያ ቃል ለ«$1» ወደ ተመዘገበው ኢ-ሜል ተልኳል። እባክዎ ከተቀበሉት በኋላ ዳግመኛ ይግቡ።',
 'blocked-mailpassword' => 'የርስዎ ቁጥር አድራሻ ከማዘጋጀት ታግዷልና፣ እንግዲህ ተንኮል ለመከልከል የመግቢያ ቃል ማግኘት ዘዴ ለመጠቀም አይፈቀደም።',
 'eauthentsent' => 'የማረጋገጫ ኢ-ሜል ወዳቀረቡት አድራሻ ተልኳል። ያው አድራሻ በውነት የርስዎ እንደሆነ ለማረጋገጥ፣ እባክዎ በዚያ ደብዳቤ ውስጥ የተጻፈውን መያያዣ ይጫኑ። ከዚያ ቀጥሎ ኢ-ሜል ከሌሎች ተጠቃሚዎች መቀበል ይችላሉ።',
@@ -439,6 +470,8 @@ $2",
 'noemailprefs' => '(በ{{SITENAME}} በኩል ኢሜል ለመቀበል፣ የራስዎን አድራሻ አስቀድመው ማቅረብ ያስፈልጋል።)',
 'emailconfirmlink' => 'አድራሻዎን ለማረጋገጥ',
 'invalidemailaddress' => 'ያው ኢ-ሜል አድራሻ ትክክለኛ አይመስልምና ልንቀበለው አይቻልም። እባክዎ ትክክለኛ አድራሻ ያስግቡ ወይም አለዚያ ጥያቄው ባዶ ይሁን።',
+'cannotchangeemail' => 'በዚሁ ዊኪ ላይ፣ የተሠጠውን ኢ-ሜል አድራሻ ለመቀይር አይቻልም።',
+'emaildisabled' => 'በዚሁ ድረገጽ ኢ-ሜል መላክ አልተቻለም።',
 'accountcreated' => 'ብዕር ስም ተፈጠረ',
 'accountcreatedtext' => 'ለ$1 ብዕር ስም ተፈጥሯል።',
 'createaccount-title' => 'ለ{{SITENAME}} የብዕር ስም መፍጠር',
@@ -447,8 +480,12 @@ $2",
 ይህ ብዕር ስም በስህተት ከተፈጠረ፣ ይህን መልእክት ቸል ማለት ይችላሉ።',
 'login-throttled' => 'በዚሁ አባል ስም በጥቂት ግዜ ውስጥ ከመጠን በላይ ሙከራዎች አድርገዋል።
 እባክዎ እንደገና ሳይሞክሩ ለጥቂት ደቂቃ ይቆዩ።',
+'login-abort-generic' => 'መግባትዎ አልተከናወነም፤ ተሠርዟል።',
 'loginlanguagelabel' => 'ቋምቋ፦ $1',
 
+# E-mail sending
+'user-mail-no-addy' => 'እሚደርስበት ኢ-ሜል አድራሻ ሳይታወቅ መላክ አይቻልም።',
+
 # Change password dialog
 'resetpass' => 'የአባል መግቢያ ቃል ለመቀየር',
 'resetpass_announce' => 'በኢ-ሜል በተላከ ጊዜያዊ ኮድ ገብተዋል። መግባትዎን ለመጨርስ፣ አዲስ መግቢያ ቃል እዚህ መምረጥ አለብዎ።',
@@ -466,6 +503,30 @@ $2",
 ምናልባት መግቢያ ቃልዎን መቀይሩ ተከናወነ፣ ወይም አዲስ ጊዜያዊ መግቢያ ቃልን ጠየቁ።',
 'resetpass-temp-password' => 'ኅላፊ (ጊዜያዊ) መግቢያ ቃል፦',
 
+# Special:PasswordReset
+'passwordreset' => 'መግቢያ ቃል መቀይር',
+'passwordreset-legend' => 'መግቢያ ቃልዎን ለመቀይር',
+'passwordreset-disabled' => 'በዚሁ ዊኪ መግቢያ ቃል መቀይር አልተቻለም',
+'passwordreset-username' => 'የብዕር ስም:',
+'passwordreset-email' => 'የኢ-ሜል አድራሻ:',
+'passwordreset-emailelement' => 'የአባል ስም፦ $1
+ጊዜያዊ መግቢያ ቃል፦ $2',
+'passwordreset-emailsent' => 'የማስታወሻ ኢ-ሜል ተልኳል።',
+'passwordreset-emailsent-capture' => 'የማስታወሻ ኢ-ሜል ተልኳል፤ ከዚህም ታች ይታያል።',
+'passwordreset-emailerror-capture' => 'የማስታወሻ ኢ-ሜል ተልኳል፤ ከዚህም ታች ይታያል፤ ነገር ግን ወደ ተጠቃሚው ለመላክ ስንል አልተከናወነም፡',
+
+# Special:ChangeEmail
+'changeemail' => 'ኢ-ሜል አድራሻዎን ለመቀይር',
+'changeemail-header' => 'የአባልነትዎን ኢ-ሜል አድራሻ ለመቀይር',
+'changeemail-text' => 'ኢ-ሜል አድራሻዎን ለመቀይር ይህን ማመልከቻ ጨርስ። ለውጡን ለማረጋገጥ፣ መግቢያ ቃልዎን ማስገባት አስፈላጊ ነው።',
+'changeemail-no-info' => 'ይህንን ገጽ በቀጥታ ለማግኘት አስቀድሞ መግባት ያስፈልጋል።',
+'changeemail-oldemail' => 'የቆየው ኢ-ሜል አድራሻዎ፦',
+'changeemail-newemail' => 'አዲስ ኢ-ሜል አድራሻ፦',
+'changeemail-none' => '(የለም)',
+'changeemail-password' => 'የ{{SITENAME}} መግቢያ ቃልዎ፦',
+'changeemail-submit' => 'አድራሻዎን ለመቀይር',
+'changeemail-cancel' => 'ይቅር',
+
 # Edit page toolbar
 'bold_sample' => 'ጉልህ ፊደላት',
 'bold_tip' => 'በጉልህ ፊደላት ይጻፍ',
@@ -496,6 +557,7 @@ $2",
 'showdiff' => 'ማነጻጸሪያ',
 'anoneditwarning' => "'''ማስጠንቀቂያ:''' እርስዎ አሁን በአባል ስምዎ ያልገቡ ነዎት።
 ይህን ገፅ ማዘጋጀት፣ ማረምና ማስተካከል ይችላሉ፤ ነገር ግን ያደረጉት ለውጥ በአባልነት ስምዎ ሳይሆን በድህረ ገፅ የመለያ ቁጥር አድራሻዎ (IP address) በገፁ የለውጥ ታሪክ ላይ ይመዘገባሉ።",
+'anonpreviewwarning' => 'እርስዎ ገና ያልገቡ ነዎት። ይህን ገፅ በማቅረብ የመለያ ቁጥር አድራሻዎ (IP address) በገፁ የለውጥ ታሪክ ላይ ይመዘገባል።',
 'missingsummary' => "'''ማስታወሻ፦''' ማጠቃለያ ገና አላቀረቡም። እንደገና «ገጹን ለማቅረብ» ቢጫኑ፣ ያለ ማጠቃለያ ይላካል።",
 'missingcommenttext' => 'እባክዎ አስተያየት ከዚህ በታች ያስግቡ።',
 'missingcommentheader' => "'''ማስታወሻ፦''' ለዚሁ አስተያየት ምንም አርእስት አላቀረቡም። 'ለማቅረብ' እንደገና ቢጫኑ ለውጥዎ ያለ አርዕስት ይሆናል።",
@@ -539,11 +601,17 @@ $1ን ወይም ማንም ሌላ [[{{MediaWiki:Grouppage-sysop}}|መጋቢ]] ስ
 ወደዚህ በስሕተት ከሆነ የመጡት፣ የቃኝውን «Back» ቁልፍ ይጫኑ።',
 'anontalkpagetext' => "----''ይኸው ገጽ ገና ያልገባ ወይም ብዕር ስም የሌለው ተጠቃሚ ውይይት ገጽ ነው። መታወቂያው በ[[ቁጥር አድራሻ]] እንዲሆን ያስፈልጋል። አንዳንዴ ግን አንድ የቁጥር አድራሻ በሁለት ወይም በብዙ ተጠቃሚዎች የጋራ ሊሆን ይችላል። ስለዚህ ለርስዎ የማይገባ ውይይት እንዳይደርስልዎ፣ [[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}}}} ከርዕሱ ጋር የተዛመዱ መዝገቦችን መፈልግ]፣ ይችላሉ። ነገር ግን ይህን ገጽ ለመፍጠር ፈቃድ የለዎም።።',
 'userpage-userdoesnotexist' => 'የብዕር ስም «<nowiki>$1</nowiki>» አልተመዘገበም። እባክዎ ይህን ገጽ ለመፍጠር/ ለማስተካከል የፈለጉ እንደ ሆነ ያረጋግጡ።',
+'userpage-userdoesnotexist-view' => 'የአባል ስም «$1» ገና አልተመዘገበም።',
+'blocked-notice-logextract' => 'ይህ ተጠቃሚ $1 አሁን የታገደ ነው። 
+ከዚህ ታች የማገጃ መዝገብ መጨረሻ ድርጊት ይታያል።',
 'usercssyoucanpreview' => "'''ምክር፦''' ሳይቆጠብ አዲስ CSSዎን ለመሞከር 'ቅድመ እይታ' የሚለውን ይጫኑ።",
 'userjsyoucanpreview' => "'''ምክር፦''' ሳይቆጠብ አዲስ JSዎን ለመሞከር 'ቅድመ እይታ' የሚለውን ይጫኑ።",
 'usercsspreview' => "'''ማስታወሻ፦ CSS-ዎን ለሙከራ ብቻ እያዩ ነው፤ ገና አልተቆጠበም!'''",
 'userjspreview' => "'''ማስታወሻ፦ JavaScriptዎን ለሙከራ ብቻ እያዩ ነው፤ ገና አልተቆጠበም!'''",
+'sitecsspreview' => "'''ማስታወሻ፦ CSSዎን ለሙከራ ብቻ እያዩ ነው፤ ገና አልተቆጠበም!'''",
+'sitejspreview' => "'''ማስታወሻ፦ JavaScriptዎን ለሙከራ ብቻ እያዩ ነው፤ ገና አልተቆጠበም!'''",
 'userinvalidcssjstitle' => "'''ማስጠንቀቂያ፦''' «$1» የሚባል መልክ የለም። ልዩ .css እና .js ገጾች በትንንሽ እንግሊዝኛ ፊደል መጀመር እንዳለባቸው ያስታውሱ። ለምሳሌ፦  {{ns:user}}:Foo/vector.css ልክ ነው እንጂ {{ns:user}}:Foo/Vector.css አይደለም።",
 'updated' => '(የታደሰ)',
 'note' => "'''ማሳሰቢያ፦'''",
@@ -551,6 +619,7 @@ $1ን ወይም ማንም ሌላ [[{{MediaWiki:Grouppage-sysop}}|መጋቢ]] ስ
 'previewconflict' => 'ለማስቀምጥ የመረጡ እንደ ሆነ እንደሚታይ፣ ይህ ቅድመ-ዕይታ በላይኛ ጽሕፈት ማዘጋጀት ክፍል ያለውን ጽሕፈት ያንጸባርቃል።',
 'session_fail_preview' => "'''ይቅርታ! ገጹን ለማቅረብ ስንሂድ፣ አንድ ትንሽ ችግር በመረቡ መረጃ ውስጥ ድንገት ገብቶበታል። እባክዎ፣ እንደገና ገጹን ለማቅረብ አንዴ ይሞክሩ። ከዚያ ገና ካልሠራ፣ ምናልባት ከአባል ስምዎ መውጣትና እንደገና መግባት ይሞክሩ።'''",
 'editing' => '«$1» ማዘጋጀት / ማስተካከል',
+'creating' => '$1ን መፍጠር',
 'editingsection' => '«$1» (ክፍል) ማዘጋጀት / ማስተካከል',
 'editingcomment' => '$1 ማዘጋጀት (ውይይት መጨመር)',
 'editconflict' => 'ተቃራኒ ለውጥ፦ $1',
@@ -581,7 +650,6 @@ $1ን ወይም ማንም ሌላ [[{{MediaWiki:Grouppage-sysop}}|መጋቢ]] ስ
 'template-protected' => '(የተቆለፈ)',
 'template-semiprotected' => '(በከፊል የተቆለፈ)',
 'hiddencategories' => 'ይህ ገጽ በ{{PLURAL:$1|1 የተደበቀ መደብ|$1 የተደበቁ መድቦች}} ውስጥ ይገኛል።',
-'nocreatetitle' => 'የገጽ መፍጠር ተወሰነ',
 'nocreatetext' => '{{SITENAME}} አዳዲስ ገጾችን ለመፍጠር ያሚያስችል ሁኔታ ከለክሏል። ተመልሰው የቆየውን ገጽ ማዘጋጀት ይችላሉ፤ አለዚያ [[Special:UserLogin|በብዕር ስም መግባት]] ይችላሉ።',
 'nocreate-loggedin' => 'አዲስ ገጽ በ{{SITENAME}} ለመፍጠር ፈቃድ የለዎም።',
 'permissionserrors' => 'የፈቃድ ስሕተቶች',
@@ -594,6 +662,7 @@ $1ን ወይም ማንም ሌላ [[{{MediaWiki:Grouppage-sysop}}|መጋቢ]] ስ
 *የገጹ መጥፋት ዝርዝር ከዚህ ታች ይታያል።",
 'moveddeleted-notice' => 'ይኸው ገጽ ከዚህ በፊት የጠፋ ነው።
 የገጹ መጥፋት ዝርዝር ከዚህ ታች ይታያል።',
+'log-fulllog' => 'ሙሉ መዝገቡን ለማየት',
 'edit-hook-aborted' => 'ለውጡ በሜንጦ ተቋረጠ።
 ምንም ምክንያት አልሰጠም።',
 'edit-gone-missing' => 'ገጹን ማሳደስ አልተቻለም።  እንደ ጠፋ ይመስላል።',
@@ -601,6 +670,10 @@ $1ን ወይም ማንም ሌላ [[{{MediaWiki:Grouppage-sysop}}|መጋቢ]] ስ
 'edit-no-change' => 'በጽሕፈቱ አንዳችም አልተለወጠምና ለውጥዎ ቸል ተብሏል።',
 'edit-already-exists' => 'አዲስ ገጽ ለመፍጠር አልተቻለም፤
 ገና ይኖራልና።',
+'defaultmessagetext' => 'የቆየው ጽሕፈት',
+
+# Content models
+'content-model-javascript' => 'ጃቫ ስክሪፕት',
 
 # "Undo" feature
 'undo-success' => "ያ ለውጥ በቀጥታ ሊገለበጥ ይቻላል። እባክዎ ከታች ያለውን ማነጻጸርያ ተመልክተው ይህ እንደሚፈልጉ ያረጋግጡና ለውጡ እንዲገለበጥ '''ገጹን ለማቅረብ''' ይጫኑ።",
@@ -647,8 +720,12 @@ $1ን ወይም ማንም ሌላ [[{{MediaWiki:Grouppage-sysop}}|መጋቢ]] ስ
 'rev-deleted-user' => '(ብዕር ስም ተደለዘ)',
 'rev-deleted-event' => '(መዝገቡ ድርጊት ተወግዷል)',
 'rev-delundel' => 'ይታይ/ይደበቅ',
+'rev-showdeleted' => 'አሳይ',
 'revdelete-nooldid-title' => 'የማይሆን ግብ እትም',
 'revdelete-nooldid-text' => 'ይህ ተግባር የሚፈጸምበት ግብ (አላማ) እትም አልወሰኑም።',
+'revdelete-nologtype-title' => 'ምንም የመዝገብ አይነት አልተሠጠም።',
+'revdelete-no-file' => 'የተወሰነው ፋይል አይኖርም።',
+'revdelete-show-file-submit' => 'አዎን',
 'revdelete-selected' => "'''ከ [[:$1]] {{PLURAL:$2|የተመረጡ ዝርያዎች|የተመረጡ ዝርያዎች}}:'''",
 'logdelete-selected' => "'''{{PLURAL:$1|የተመረጠ መዝገብ ድርጊት|የተመረጡ መዝገብ ድርጊቶች}}፦'''",
 'revdelete-hide-text' => 'የእትሙ ጽሕፈት ይደበቅ',
@@ -656,11 +733,21 @@ $1ን ወይም ማንም ሌላ [[{{MediaWiki:Grouppage-sysop}}|መጋቢ]] ስ
 'revdelete-hide-name' => 'ድርጊትና ግቡ ይደበቅ',
 'revdelete-hide-comment' => 'ማጠቃለያ ይደበቅ',
 'revdelete-hide-user' => 'የአዘጋጁ ብዕር ስም ወይም ቁ. አድርሻ ይደበቅ',
+'revdelete-radio-same' => '(እንደ በፊቱ ይቆይ)',
+'revdelete-radio-set' => 'አዎ',
+'revdelete-radio-unset' => 'አይ',
 'revdelete-suppress' => 'መረጃ ከመጋቢዎችና ከሌሎች ይደበቅ።',
 'revdelete-log' => 'ምክንያቱ፦',
 'revdelete-submit' => 'በተመረጠው ዕትም ይደረግ',
 'revdel-restore' => 'እይታን ለማስተካከል',
+'revdel-restore-deleted' => 'የጠፉት ለውጦች',
+'revdel-restore-visible' => 'ሊታይ የሚችሉ ለውጦች',
 'pagehist' => 'የገጽ ታሪክ',
+'deletedhist' => 'የጠፉት ዕትሞች ታሪክ',
+'revdelete-otherreason' => 'ሌላ/ተጨማሪ ምክንያት፦',
+'revdelete-reasonotherlist' => 'ሌላ ምክንያት',
+'revdelete-edit-reasonlist' => "'ተራ የማጥፋት ምክንያቶች' ለማስተካከል",
+'revdelete-offender' => 'የለውጡ አቅራቢ፦',
 
 # Suppression log
 'suppressionlog' => 'የመከልከል መዝገብ',
@@ -683,6 +770,7 @@ $1ን ወይም ማንም ሌላ [[{{MediaWiki:Grouppage-sysop}}|መጋቢ]] ስ
 'mergehistory-autocomment' => '[[:$1]] ወደ [[:$2]] አዋሐደ',
 'mergehistory-comment' => '[[:$1]] ወደ [[:$2]] አዋሐደ: $3',
 'mergehistory-same-destination' => 'መነሻና መድረሻ ገጾች አንድላይ ሊሆኑ አይቻልም',
+'mergehistory-reason' => 'ምክንያቱ፦',
 
 # Merge log
 'mergelog' => 'የመዋሐድ መዝገብ',
@@ -692,6 +780,9 @@ $1ን ወይም ማንም ሌላ [[{{MediaWiki:Grouppage-sysop}}|መጋቢ]] ስ
 
 # Diffs
 'history-title' => 'የ«$1» እትሞች ታሪክ',
+'difference-title' => 'ከ«$1» ለውጦች መካከል ያለው ልዩነት',
+'difference-title-multipage' => 'ከገጾች «$1» እና «$2» መካከል ያለው ልዩነት',
+'difference-multipage' => '(ከገጾች መካከል ያለው ልዩነት)',
 'lineno' => 'መስመር፡ $1፦',
 'compareselectedversions' => 'የተመረጡትን እትሞች ለማነፃፀር',
 'editundo' => 'ለውጡ ይገለበጥ',
@@ -710,6 +801,9 @@ $1ን ወይም ማንም ሌላ [[{{MediaWiki:Grouppage-sysop}}|መጋቢ]] ስ
 'notextmatches' => 'ጽሕፈት የሚስማማባቸው ገጾች የሉም',
 'prevn' => 'ፊተኛ {{PLURAL:$1|$1}}',
 'nextn' => 'ቀጥሎ {{PLURAL:$1|$1}}',
+'prevn-title' => 'ፊተኛ $1 {{PLURAL:$1|ውጤት|ውጤቶች}}',
+'nextn-title' => '{{PLURAL:$1|የሚቀጥለው|የሚቀጥሉ}} $1 {{PLURAL:$1|ውጤት|ውጤቶች}}',
+'shown-title' => '$1 {{PLURAL:$1|ውጤት|ውጤቶች}} በየገጹ {{PLURAL:$1|ይታይ|ይታዩ}}',
 'viewprevnext' => 'በቁጥር ለማየት፡ ($1 {{int:pipe-separator}} $2) ($3).',
 'searchmenu-legend' => 'የፍለጋ ምርጫዎች',
 'searchmenu-exists' => "'''\"[[:\$1]]\" የሚባል መጣጥፍ በዚሁ ዊኪ ላይ አለ።'''",
@@ -719,6 +813,7 @@ $1ን ወይም ማንም ሌላ [[{{MediaWiki:Grouppage-sysop}}|መጋቢ]] ስ
 'searchprofile-project' => 'የመርሃግብሩ ገጾች',
 'searchprofile-images' => 'ፋይሎች',
 'searchprofile-everything' => 'ሁሉም',
+'searchprofile-advanced' => 'የተደረጀ ፍለጋ',
 'searchprofile-articles-tooltip' => 'በ$1 ለመፈለግ',
 'searchprofile-project-tooltip' => 'በ$1 ለመፈለግ',
 'searchprofile-images-tooltip' => 'ለፋይሎች ለመፈለግ',
@@ -733,6 +828,7 @@ $1ን ወይም ማንም ሌላ [[{{MediaWiki:Grouppage-sysop}}|መጋቢ]] ስ
 'search-interwiki-default' => '$1 ውጤቶች፦',
 'search-interwiki-more' => '(ተጨማሪ)',
 'search-relatedarticle' => 'የተዛመደ',
+'searcheverything-enable' => 'በክፍለ-ዊኪዎች ሁሉ ለመፈለግ',
 'searchrelated' => 'የተዛመደ',
 'searchall' => 'ሁሉ',
 'showingresults' => 'ከ ቁ.#<b>$2</b> ጀምሮ እስከ <b>$1</b> ውጤቶች ድረስ ከዚህ በታች ይታያሉ።',
@@ -768,6 +864,7 @@ $1ን ወይም ማንም ሌላ [[{{MediaWiki:Grouppage-sysop}}|መጋቢ]] ስ
 'skin-preview' => 'ቅድመ-ዕይታ',
 'datedefault' => 'ግድ የለኝም',
 'prefs-datetime' => 'ዘመንና ሰዓት',
+'prefs-user-pages' => 'የአባል ገጾች',
 'prefs-personal' => 'ያባል ዶሴ',
 'prefs-rc' => 'የቅርቡ ለውጦች ዝርዝር',
 'prefs-watchlist' => 'የሚከታተሉ ገጾች',
@@ -777,6 +874,8 @@ $1ን ወይም ማንም ሌላ [[{{MediaWiki:Grouppage-sysop}}|መጋቢ]] ስ
 'prefs-watchlist-edits-max' => '(ከ1,000 ለውጥ በላይ አይሆንም)',
 'prefs-misc' => 'ልዩ ልዩ ምርጫዎች',
 'prefs-resetpass' => 'መግቢያ ቃል ለመቀየር',
+'prefs-changeemail' => 'ኢ-ሜል አድራሻዎን ለመቀይር',
+'prefs-email' => 'የኢ-ሜል ምርጫዎች',
 'prefs-rendering' => ' አቀራረብ',
 'saveprefs' => 'ይቆጠብ',
 'resetprefs' => 'እንደ በፊቱ ይታደስ',
@@ -812,12 +911,18 @@ $1ን ወይም ማንም ሌላ [[{{MediaWiki:Grouppage-sysop}}|መጋቢ]] ስ
 'defaultns' => 'በመጀመርያው ፍለጋዎ በነዚህ ክፍለ-ዊኪዎች ብቻ ይደረግ:',
 'default' => 'ቀዳሚ',
 'prefs-files' => 'የስዕሎች መጠን',
+'prefs-custom-css' => 'ልዩ CSS',
+'prefs-custom-js' => 'ልዩ ጃቫ ስክሪፕት',
+'prefs-emailconfirm-label' => 'የኢ-ሜል ማረጋገጫ',
+'prefs-textboxsize' => 'የማዘጋጀት መስኮት መጠን',
 'youremail' => 'ኢ-ሜል *',
 'username' => 'የብዕር ስም:',
 'uid' => 'የገባበት ቁ.: #',
 'prefs-memberingroups' => 'ተጠቃሚው {{PLURAL:$1|ያለበት ስብስባ|ያለባቸው ስብስባዎች}}፦',
+'prefs-registration' => 'የተመዘገበበት ሰዓት፦',
 'yourrealname' => 'ዕውነተኛ ስም፦',
 'yourlanguage' => 'ቋንቋ',
+'yourvariant' => 'የቋንቋው ቀበሌኛ፦',
 'yournick' => 'ቁልምጫ ስም (ለፊርማ)',
 'badsig' => 'ትክክለኛ ያልሆነ ጥሬ ፊርማ፤ HTML ተመልከት።',
 'badsiglength' => 'ያ ቁልምጫ ስም ከመጠን በላይ ይረዝማል፤ ከ$1 ፊደል በታች መሆን አለበት።',
@@ -832,7 +937,17 @@ $1ን ወይም ማንም ሌላ [[{{MediaWiki:Grouppage-sysop}}|መጋቢ]] ስ
 'prefs-info' => ' መሰረታዊ መረጃ',
 'prefs-signature' => 'ፊርማ',
 'prefs-dateformat' => ' የቀን  ቅርፀት',
+'prefs-advancedediting' => 'የተደረጁ ምርጫዎች',
+'prefs-advancedrc' => 'የተደረጁ ምርጫዎች',
+'prefs-advancedrendering' => 'የተደረጁ ምርጫዎች',
+'prefs-advancedsearchoptions' => 'የተደረጁ ምርጫዎች',
+'prefs-advancedwatchlist' => 'የተደረጁ ምርጫዎች',
 'prefs-displayrc' => 'የማሳያ አማራጮች',
+'prefs-diffs' => 'ልዩነቶች',
+
+# User preference: e-mail validation using jQuery
+'email-address-validity-valid' => 'ኢ-ሜል አድራሻ ትክክለኛ ይመስላል።',
+'email-address-validity-invalid' => 'ትክክለኛ ኢ-ሜል ማቅረብ ያስፈልጋል።',
 
 # User rights
 'userrights' => 'የአባል መብቶች ለማስተዳደር',
@@ -870,6 +985,7 @@ $1ን ወይም ማንም ሌላ [[{{MediaWiki:Grouppage-sysop}}|መጋቢ]] ስ
 'group-sysop-member' => 'መጋቢ',
 'group-bureaucrat-member' => 'አስተዳዳሪ',
 
+'grouppage-user' => '{{ns:project}}:ተጠቃሚዎች',
 'grouppage-autoconfirmed' => '{{ns:project}}:የተረጋገጡ ተጠቃሚዎች',
 'grouppage-bot' => '{{ns:project}}:BOTS',
 'grouppage-sysop' => '{{ns:project}}:መጋቢዎች',
@@ -880,9 +996,11 @@ $1ን ወይም ማንም ሌላ [[{{MediaWiki:Grouppage-sysop}}|መጋቢ]] ስ
 'right-edit' => 'ገጾችን ለማዘጋጀት',
 'right-createpage' => 'ገጾች ለመፍጠር (ውይይት ገጾች ያልሆኑትን)',
 'right-createtalk' => 'የውይይት ገጽ ለመፍጠር',
+'right-createaccount' => 'አዳዲስ አባልነቶችን ለመፍጠር',
 'right-minoredit' => 'ለውጦችን ጥቃቅን ሆኖ ለማመልከት',
 'right-move' => 'ገጾችን ለማዛወር',
 'right-move-subpages' => 'ገጾችን ከነንዑስ ገጾቻቸው ለማዛወር',
+'right-movefile' => 'ፋይሎችን ለማዛወር',
 'right-upload' => 'ፋይሎችን ለመላክ',
 'right-autoconfirmed' => 'በከፊል የተቆለፉት ገጾች ለማረም',
 'right-delete' => 'ገጾችን ለማጥፋት',
@@ -902,12 +1020,15 @@ $1ን ወይም ማንም ሌላ [[{{MediaWiki:Grouppage-sysop}}|መጋቢ]] ስ
 'right-autopatrol' => 'የራሱ ለውጦች በቀጥታ የተሣለፉ ሆነው መመልከት',
 'right-mergehistory' => 'የገጾች እትሞችን ታሪክ ለመዋሐድ',
 'right-userrights' => 'ያባላት ሁሉ መብቶች ለማስተካከል',
+'right-sendemail' => 'ወደ ሌላ አባል ኢ-ሜል ለመላክ',
+
+# Special:Log/newusers
+'newuserlogpage' => 'የአባልነት መዝገብ (user log)',
+'newuserlogpagetext' => 'ይህ መዝገብ ወደ አባልነት የገቡትን ብዕር ስሞች ይዘርዝራል።',
 
 # User rights log
 'rightslog' => 'የአባል መብቶች መዝገብ',
 'rightslogtext' => 'ይህ መዝገብ የአባል መብቶች ሲለወጡ ይዘረዝራል።',
-'rightslogentry' => 'የ$1 ማዕረግ ከ$2 ወደ $3 ለወጠ',
-'rightsnone' => '(የለም)',
 
 # Associated actions - in the sentence "You do not have permission to X"
 'action-read' => 'ይህን ገጽ ለማንበብ',
@@ -918,6 +1039,7 @@ $1ን ወይም ማንም ሌላ [[{{MediaWiki:Grouppage-sysop}}|መጋቢ]] ስ
 'action-minoredit' => 'ይህን ለውጥ ጥቃቅን ሆኖ ለማመልከት',
 'action-move' => 'ይህንን ገጽ ለማዛወር',
 'action-move-subpages' => 'ይህንን ገጽ ከነንዑስ-ገጾቹ ለማዛወር',
+'action-movefile' => 'ይህን ፋይል ለማዛወር',
 'action-upload' => 'ይህንን ፋይል ለመላክ',
 'action-delete' => 'ይህን ገጽ ለማጥፋት',
 'action-deleterevision' => 'ይህን እትም ለማጥፋት',
@@ -933,6 +1055,7 @@ $1ን ወይም ማንም ሌላ [[{{MediaWiki:Grouppage-sysop}}|መጋቢ]] ስ
 'action-autopatrol' => 'የራስዎ ለውጥ የተሣለፈ ሆኖ መመልከት',
 'action-mergehistory' => 'የዚሁን ገጽ ዕትሞች ታሪክ ለማዋሐድ',
 'action-userrights' => 'ያባላት ሁሉ መብቶች ለማስተካከል',
+'action-sendemail' => 'ኢ-ሜል መላክ',
 
 # Recent changes
 'nchanges' => '$1 {{PLURAL:$1|ለውጥ|ለውጦች}}',
@@ -940,7 +1063,9 @@ $1ን ወይም ማንም ሌላ [[{{MediaWiki:Grouppage-sysop}}|መጋቢ]] ስ
 'recentchanges-legend' => 'የቅርብ ለውጥ አማራጮች፦',
 'recentchanges-summary' => 'በዚሁ ገጽ ላይ በቅርብ ጊዜ የወጡ አዳዲስ ለውጦች ለመከታተል ይችላሉ።',
 'recentchanges-feed-description' => 'በዚህ ዊኪ ላይ በቅርብ ግዜ የተለወጠውን በዚሁ feed መከታተል ይችላሉ',
+'recentchanges-label-newpage' => 'ይኸው ለውጥ አዲስ ገጽ ፈጠረ።',
 'recentchanges-label-minor' => 'ይህ ለውጥ ጥቃቅን ነው።',
+'recentchanges-label-bot' => 'ይኸው ለውጥ በሎሌ ተደረገ።',
 'rcnote' => "ከ$5 $4 እ.ኤ.አ. {{PLURAL:$2|ባለፈው 1 ቀን|ባለፉት '''$2''' ቀኖች}} {{PLURAL:$1|የተደረገው '''1''' ለውጥ እታች ይገኛል|የተደረጉት '''$1''' መጨረሻ ለውጦች እታች ይገኛሉ}}።",
 'rcnotefrom' => "ከ'''$2''' ጀምሮ የተቀየሩት ገጾች (እስከ '''$1''' ድረስ) ክዚህ በታች ይታያሉ።",
 'rclistfrom' => '(ከ $1 ጀምሮ አዲስ ለውጦቹን ለማየት)',
@@ -963,6 +1088,7 @@ $1ን ወይም ማንም ሌላ [[{{MediaWiki:Grouppage-sysop}}|መጋቢ]] ስ
 'newsectionsummary' => '/* $1 */ አዲስ ክፍል',
 'rc-enhanced-expand' => 'ዝርዝሩን አሳይ (JavaScript ያስፈልጋል)',
 'rc-enhanced-hide' => 'ዝርዝሩን ደብቅ',
+'rc-old-title' => 'መጀመርያ እንደ «$1» ተፈጠረ።',
 
 # Recent changes linked
 'recentchangeslinked' => 'የተዛመዱ ለውጦች',
@@ -996,6 +1122,7 @@ $1ን ወይም ማንም ሌላ [[{{MediaWiki:Grouppage-sysop}}|መጋቢ]] ስ
 'filename' => 'የፋይል ስም',
 'filedesc' => 'ማጠቃለያ',
 'fileuploadsummary' => 'ማጠቃለያ፦',
+'filereuploadsummary' => 'የፋይሉ ለውጦች፦',
 'filestatus' => 'የማብዛት መብት ሁኔታ፦',
 'filesource' => 'መነሻ፦',
 'uploadedfiles' => 'የተላኩ ፋይሎች',
@@ -1003,12 +1130,23 @@ $1ን ወይም ማንም ሌላ [[{{MediaWiki:Grouppage-sysop}}|መጋቢ]] ስ
 'ignorewarnings' => 'ማስጠንቀቂያ ቸል ይበል',
 'minlength1' => 'የፋይል ስም ቢያንስ አንድ ፊደል መሆን አለበት።',
 'illegalfilename' => 'የፋይሉ ስም «$1» በአርእስት ያልተፈቀደ ፊደል ወይም ምልክት አለበት። እባክዎ፣ ለፋይሉ አዲስ ስም ያውጡና እንደገና ይልኩት።',
+'filename-toolong' => 'የፋይል ስም ከ240 ባይት በላይ ሊረዝም አይቻልም።',
 'badfilename' => 'የፋይል ስም ወደ «$1» ተቀይሯል።',
 'filetype-badmime' => 'የMIME አይነት «$1» ፋይሎች ሊላኩ አይፈቀዱም።',
 'filetype-bad-ie-mime' => 'ይህን ፋይል መላክ አይቻልም፤ Internet Explorer እንደ $1 ይመስለው ነበርና ይህ የማይፈቅድ አደገኛ የፋይል አይነት ነው።',
 'filetype-unwanted-type' => "'''\".\$1\"''' ያልተፈለገ ፋይል አይነት ነው። የተመረጡት ፋይል አይነቶች \$2 ናቸው።",
 'filetype-banned-type' => "'''«.$1»''' ያልተፈቀደ ፋይል አይነት ነው። የተፈቀዱት ፋይል አይነቶች $2 ናቸው።",
 'filetype-missing' => 'ፋይሉ ምንም ቅጥያ (ለምሳሌ «.jpg») የለውም።',
+'empty-file' => 'የላኩት ፋይል ባዶ ነበር።',
+'file-too-large' => 'ያቀረቡት ፋይል ከተፈቀደው መጠን በላይ ነው።',
+'filename-tooshort' => 'የፋይሉ ስም ከተፈቀደው አጭር ነው።',
+'filetype-banned' => 'ይህ አይነት ፋይል አልተፈቀደም።',
+'verification-error' => 'ይሄው ፋይል የፋይልን ማረጋገጫ አላለፈም።',
+'illegal-filename' => 'የፋይሉ ስም የተፈቀደ አይደለም።',
+'overwrite' => 'እንድን ፋይል ደምስሶ መጻፍ አልተፈቀደም።',
+'unknown-error' => 'ያልታወቀ ስኅተት ደረሰ።',
+'tmp-create-error' => 'ጊዜያዊ ፋይልን መፍጠር አልተቻለም።',
+'tmp-write-error' => 'ጊዜያዊ ፋይልን በመጻፍ ስኅተት ደረሰ።',
 'large-file' => 'የፋይል መጠን ከ$1 በላይ እንዳይሆን ይመከራል፤ የዚህ ፋይል መጠን $2 ነው።',
 'largefileserver' => 'ይህ ፋይል ሰርቨሩ ከሚችለው መጠን በላይ ነው።',
 'emptyfile' => 'የላኩት ፋይል ባዶ እንደ ሆነ ይመስላል። ይህ ምናልባት በፋይሉ ስም አንድ ግድፋት ስላለ ይሆናል። እባክዎ ይህን ፋይል በውኑ መላክ እንደ ፈለጉ ያረጋግጡ።',
@@ -1028,24 +1166,50 @@ $1ን ወይም ማንም ሌላ [[{{MediaWiki:Grouppage-sysop}}|መጋቢ]] ስ
 'file-exists-duplicate' => 'ይህ ፋይል {{PLURAL:$1|የሚከተለው ፋኡል|የሚከተሉት ፋይሎች}} ቅጂ ነው፦',
 'file-deleted-duplicate' => 'ለዚህ ፋይል አንድ ቅጂ የሆነ ፋይል ([[:$1]]) ቀድሞ ጠፍቷል። እንደገና ሳይልኩት እባክዎ የዚያውን ፋይል መጥፋት ታሪክ ይመለከቱ።',
 'uploadwarning' => 'የመላክ ማስጠንቀቂያ',
+'uploadwarning-text' => 'እባክዎ፣ እታች ያለውን የፋይልን መግለጫ ቀይርና እንደገና ይሞክሩ።',
 'savefile' => 'ፋይሉ ለመቆጠብ',
 'uploadedimage' => '«[[$1]]» ላከ',
 'overwroteimage' => 'የ«[[$1]]» አዲስ ዕትም ላከ',
 'uploaddisabled' => 'ፋይል መላክ አይቻልም',
 'uploaddisabledtext' => 'ፋይል መላክ በዚህ ዊኪ አይቻልም።',
 'uploadvirus' => 'ፋይሉ ቫይረስ አለበት! ዝርዝር፦ $1',
+'upload-source' => 'መነሻ ፋይል',
 'sourcefilename' => 'የቆየው የፋይሉ ስም፦',
 'destfilename' => 'የፋይሉ አዲስ ስም፦',
+'upload-maxfilesize' => 'የፋይል ግዙፍነት ውሳኔ፦ $1',
+'upload-description' => 'የፋይሉ መግለጫ',
+'upload-options' => 'የመላክ ምርጫዎች',
 'watchthisupload' => 'ይህንን ገጽ ለመከታተል',
 'filewasdeleted' => 'በዚሁ ስም ያለው ፋይል ከዚህ በፊት ተልኮ እንደገና ጠፍቷል።  ዳግመኛ ሳይልኩት $1 ማመልከት ያሻላል።',
 'filename-bad-prefix' => "የሚልኩት ፋይል ስም በ'''«$1»''' ይጀመራል፤ ይህ ብዙ ጊዜ በቁጥራዊ ካሜራ የተወሰነ ገላጭ ያልሆነ ስም ይሆናል። እባክዎ ለፋይልዎ ገላጭ የሆነ ስም ይምረጡ።",
 'upload-success-subj' => 'መላኩ ተከናወነ',
+'upload-failure-subj' => 'የመላክ ችግር',
+'upload-failure-msg' => 'ከ [$2] ለመላክ ስትል አንድ ችግር ደረሰ፤
+
+$1',
+'upload-warning-subj' => 'የመላክ ማስጠንቀቂያ ምልክት',
 
 'upload-proto-error' => 'ትክክለኛ ያልሆነ ወግ (protocol)',
 'upload-proto-error-text' => 'የሩቅ መላክ እንዲቻል URL በ<code>http://</code> ወይም በ<code>ftp://</code> መጀመር አለበት።',
 'upload-file-error' => 'የውስጥ ስህተት',
 'upload-misc-error' => 'ያልታወቀ የመላክ ስህተት',
 'upload-misc-error-text' => 'በተላከበት ጊዜ ያልታወቀ ስህተት ተነሣ። እባክዎ URL ትክክለኛና የሚገኝ መሆኑን አረጋግጠው እንደገና ይሞክሩ። ችግሩ ቢቀጠል፣ መጋቢን ይጠይቁ።',
+'upload-unknown-size' => 'ያልታወቀ መጠን',
+
+# File backend
+'backend-fail-notexists' => '$1 የሚለው ፋይል አይኖርም።',
+'backend-fail-delete' => 'ፋይሉን «$1» ለማጥፋት አልተቻለም።',
+'backend-fail-alreadyexists' => '«$1» የሚባል ፋይል አሁን ይኖራል።',
+'backend-fail-copy' => 'ፋይሉን «$1» ወደ «$2» መቅዳት አልተቻለም።',
+'backend-fail-move' => 'ፋይሉ«$1» ወደ «$2» ማዛወር አተቻለም።',
+'backend-fail-opentemp' => 'ጊዜያዊ ፋይልን መክፈት አልተቻለም።',
+'backend-fail-writetemp' => 'ወደ ጊዜያዊ ፋይል መጻፍ አልተቻለም።',
+'backend-fail-closetemp' => 'ጊዜያዊ ፋይልን መዝጋት አልተቻለም።',
+'backend-fail-read' => 'ፋይሉን «$1» ለማንበብ አልተቻለም።',
+'backend-fail-create' => 'ፋይሉን «$1» ለመጻፍ አልተቻለም።',
+
+# img_auth script messages
+'img-auth-nofile' => '«$1» የሚባል ፋይል አይኖርም።',
 
 # Some likely curl errors. More could be added from <http://curl.haxx.se/libcurl/c/libcurl-errors.html>
 'upload-curl-error6' => 'URLን መድረስ አልተቻለም',
@@ -1068,11 +1232,13 @@ $1ን ወይም ማንም ሌላ [[{{MediaWiki:Grouppage-sysop}}|መጋቢ]] ስ
 'listfiles_search_for' => 'ለMedia ፋይል ስም ፍለጋ፦',
 'imgfile' => 'ፋይሉ',
 'listfiles' => 'የፋይል / ሥዕሎች ዝርዝር',
+'listfiles_thumb' => 'ናሙና',
 'listfiles_date' => 'ቀን እ.ኤ.አ',
 'listfiles_name' => 'የፋይል ስም',
 'listfiles_user' => 'አቅራቢው',
 'listfiles_size' => 'መጠን (byte)',
 'listfiles_description' => 'ማጠቃለያ',
+'listfiles_count' => 'ዕትሞች',
 
 # File description page
 'file-anchor-link' => 'ፋይል',
@@ -1096,7 +1262,10 @@ $1ን ወይም ማንም ሌላ [[{{MediaWiki:Grouppage-sysop}}|መጋቢ]] ስ
 'morelinkstoimage' => 'ለዚህ ፋይል [[Special:WhatLinksHere/$1|ተጨማሪ መያያዣዎችን]] ለማየት።',
 'duplicatesoffile' => '{{PLURAL:$1|የሚከተለው ፋይል የዚህ ፋይል ቅጂ ነው|የሚከተሉት $1 ፋይሎች የዚሁ ፋይል ቅጂዎች ናቸው}}፦',
 'sharedupload' => 'ይህ ፋይል ከጋራ ምንጭ ($1) የተቀሰመ ነው። በማንኛውም ዊኪ ላይ ሊጠቅም ይቻላል።',
+'filepage-nofile' => 'እንዲህ የሚባል ፋይል አይኖርም።',
+'filepage-nofile-link' => 'እንዲህ የሚባል ፋይል አይኖርም፤ እርስዎ ግን [$1 እሱን መላክ] ይችላሉ።',
 'uploadnewversion-linktext' => 'ለዚሁ ፋይል አዲስ ዕትም ለመላክ',
+'shared-repo-from' => 'ከ $1',
 
 # File reversion
 'filerevert' => '$1 ማገልበጥ',
@@ -1193,6 +1362,8 @@ $1ን ወይም ማንም ሌላ [[{{MediaWiki:Grouppage-sysop}}|መጋቢ]] ስ
 'nmembers' => '$1 {{PLURAL:$1|መጣጥፍ|መጣጥፎች}}',
 'nrevisions' => '$1 ለውጦች',
 'nviews' => '$1 {{PLURAL:$1|ዕይታ|ዕይታዎች}}',
+'nimagelinks' => 'በ$1 {{PLURAL:$1|ገጽ|ገጾች}} ላይ ይጠቀማል።',
+'ntransclusions' => 'በ$1 {{PLURAL:$1|ገጽ|ገጾች}} ይጠቀማል።',
 'specialpage-empty' => '(ይህ ገጽ ባዶ ነው።)',
 'lonelypages' => 'ያልተያያዙ ፅሑፎች',
 'lonelypagestext' => 'የሚቀጥሉት ገጾች በ{{SITENAME}} ውስጥ ከሚገኙ ሌሎች ገጾች ጋር አልተያያዙም።',
@@ -1227,6 +1398,7 @@ $1ን ወይም ማንም ሌላ [[{{MediaWiki:Grouppage-sysop}}|መጋቢ]] ስ
 'listusers' => 'አባላት',
 'listusers-editsonly' => 'ለውጦች ያላቸው ተጠቃሚዎች ብቻ ይታዩ',
 'usereditcount' => '$1 {{PLURAL:$1|ለውጥ|ለውጦች}}',
+'usercreated' => 'በ$1 በ$2 {{GENDER:$3|ተፈጠረ|ተፈጠረች}}።',
 'newpages' => 'አዳዲስ መጣጥፎች',
 'newpages-username' => 'በአቅራቢው፦',
 'ancientpages' => 'የቈዩ ፅሑፎች (በተለወጠበት ሰአት)',
@@ -1275,6 +1447,9 @@ $1ን ወይም ማንም ሌላ [[{{MediaWiki:Grouppage-sysop}}|መጋቢ]] ስ
 'allpagesprefix' => 'በዚሁ ፊደል የጀመሩት ገጾች:',
 'allpages-bad-ns' => 'በ{{SITENAME}} «$1» የሚባል ክፍለዊኪ የለም።',
 
+# SpecialCachedPage
+'cachedspecial-refresh-now' => 'መጨረሻውን ለማየት',
+
 # Special:Categories
 'categories' => 'ምድቦች',
 'categoriespagetext' => 'በዚሁ ሥራ ዕቅድ ውስጥ የሚከተሉ መደቦች ይኖራሉ።
@@ -1282,19 +1457,30 @@ $1ን ወይም ማንም ሌላ [[{{MediaWiki:Grouppage-sysop}}|መጋቢ]] ስ
 Also see [[Special:WantedCategories|wanted categories]].',
 'special-categories-sort-abc' => 'በፊደል ተራ ይደርደሩ',
 
+# Special:DeletedContributions
+'deletedcontributions' => 'የአባሉ የጠፉት አስተዋጽኦች',
+'deletedcontributions-title' => 'የአባሉ የጠፉት አስተዋጽኦች',
+'sp-deletedcontributions-contribs' => 'አስተዋጽኦች',
+
 # Special:LinkSearch
 'linksearch' => 'የውጭ ማያያዛዎች',
 'linksearch-ns' => 'ክፍለ-ዊኪ፦',
 'linksearch-ok' => 'ፍለጋ',
+'linksearch-line' => '$1 ከ $2 ተያያዘ።',
 
 # Special:ListUsers
 'listusersfrom' => 'ከዚሁ ፊደል ጀምሮ፦',
 'listusers-submit' => 'ይታይ',
 'listusers-noresult' => 'ማንም ተጠቃሚ አልተገኘም።',
+'listusers-blocked' => '(ታግዷል)',
 
-# Special:Log/newusers
-'newuserlogpage' => 'የአባልነት መዝገብ (user log)',
-'newuserlogpagetext' => 'ይህ መዝገብ ወደ አባልነት የገቡትን ብዕር ስሞች ይዘርዝራል።',
+# Special:ActiveUsers
+'activeusers' => 'ተግባራዊ አባላት ዝርዝር',
+'activeusers-intro' => 'እነዚህ አባላት ባለፈው $1 ቀን ውስጥ ማናቸውንም አይነት ተግባር ፈጸሙ።',
+'activeusers-count' => '$1 {{PLURAL:$1|ለውጥ|ለውጦች}} ባለፈው $3 ቀን ውስጥ',
+'activeusers-hidebots' => 'ሎሌዎች ይደበቁ',
+'activeusers-hidesysops' => 'መጋቢዎች ይደበቁ',
+'activeusers-noresult' => 'ማንም ተጠቃሚ አልተገኘም።',
 
 # Special:ListGroupRights
 'listgrouprights' => 'የተጠቃሚ ስብስባ መብቶች',
@@ -1306,13 +1492,22 @@ Also see [[Special:WantedCategories|wanted categories]].',
 'mailnologin' => 'ምንም መነሻ አድራሻ የለም',
 'mailnologintext' => 'ኢ-ሜል ወደ ሌላ አባል ለመላክ [[Special:UserLogin|መግባት]]ና በ[[Special:Preferences|ምርጫዎችዎ]] ትክክለኛ የኢሜል አድራሻዎ መኖር ያስፈልጋል።',
 'emailuser' => 'ለዚህ/ች ሰው ኢሜል መላክ',
+'emailuser-title-target' => '{{GENDER:$1|ለዚህ|ለዚች}} አባል ኢ-ሜል መላክ',
+'emailuser-title-notarget' => 'ወደ አባል ኢ-ሜል ለመላክ',
 'emailpage' => 'ወደዚህ/ች አባል ኢ-ሜል ለመላክ',
 'emailpagetext' => 'አባሉ በሳቸው «ምርጫዎች» ክፍል ተግባራዊ ኢ-ሜል አድራሻ ያስገቡ እንደሆነ፣ ከታች ያለው ማመልከቻ አንድን ደብዳቤ በቀጥታ ይልካቸዋል።
 
 ተቀባዩም መልስ በቀጥታ ሊሰጡዎ እንዲችሉ፣ በእርስዎ «ምርጫዎች» ክፍል ያስገቡት ኢ-ሜል አድራሻ በደብዳቤዎ «From:» መስመር ይታይላቸዋል።',
 'defemailsubject' => '{{SITENAME}} Email / ኢ-ሜል',
+'usermaildisabledtext' => 'በዚሁ ዊኪ ኢ-ሜል ለአባላት መላክ አይችሉም።',
 'noemailtitle' => 'ኢ-ሜል አይቻልም',
 'noemailtext' => 'ለዚህ/ች አባል ኢ-ሜል መላክ አይቻልም። ወይም ተገቢ ኢ-ሜል አድራሻ የለንም፣ ወይም ከሰው ምንም ኢ-ሜል መቀበል አልወደደ/ችም።',
+'nowikiemailtitle' => 'ምንም ኢ-ሜል አይፈቀድም።',
+'nowikiemailtext' => 'ይህ አባል ከሌሎች ተጠቃሚዎች እ-ሜል ለመቀበል አልፈቀደም።',
+'emailnotarget' => 'ያ ተቀባይ ስም አይኖርም ወይም ትክክል አይደለም።',
+'emailtarget' => 'የተቀባይ አባል ስም ያስግቡ',
+'emailusername' => 'የተጠቃሚ ሥም',
+'emailusernamesubmit' => 'ለማቅረብ',
 'email-legend' => 'ኢ-ሜል ወደ ሌላ የ{{SITENAME}} ተጠቃሚ ለመላክ',
 'emailfrom' => 'ከ',
 'emailto' => 'ለ',
@@ -1327,6 +1522,7 @@ Also see [[Special:WantedCategories|wanted categories]].',
 # Watchlist
 'watchlist' => 'የምከታተላቸው ገጾች፤',
 'mywatchlist' => 'የምከታተላቸው ገጾች፤',
+'watchlistfor2' => 'ለ $1 $2',
 'nowatchlist' => 'ዝርዝርዎ ባዶ ነው። ምንም ገጽ ገና አልተጨመረም።',
 'watchlistanontext' => 'የሚከታተሉት ገጾች ዝርዝርዎን ለመመልከት ወይም ለማስተካከል እባክዎ $1።',
 'watchnologin' => 'ገና አልገቡም',
@@ -1384,6 +1580,8 @@ $NEWPAGE
 
 በተጨማሪ ለመረዳት፦
 {{canonicalurl:{{MediaWiki:Helppage}}}}',
+'created' => 'ተፈጠረ',
+'changed' => 'ተለወጠ',
 
 # Delete
 'deletepage' => 'ገጹ ይጥፋ',
@@ -1398,6 +1596,7 @@ $NEWPAGE
 'confirmdeletetext' => 'ይህን ገጽ ከነ ሙሉ የለውጥ ታሪኩ ሊያጠፉት ነው።
 እባክዎን ይህን የሚያደርጉት አስበውበት፣ በ[[{{MediaWiki:Policy-url}}|መተዳደሪያ ደንብም]] መሰረት መሆኑን ያረጋግጡ።',
 'actioncomplete' => 'ተፈጽሟል',
+'actionfailed' => 'ድርጊቱ አልተከናወነም።',
 'deletedtext' => '«$1» ጠፍቷል።
 
 (የጠፉትን ገጾች ሁሉ ለመመልከት $2 ይዩ።)',
@@ -1436,6 +1635,7 @@ $NEWPAGE
 'movedarticleprotection' => 'የመቆለፍ ደረጃ ከ"[[$2]]" ወደ "[[$1]]" ተቀየረ',
 'protect-title' => 'ለ«$1» የመቆለፍ ደረጃ ለማስተካከል',
 'prot_1movedto2' => '«$1» ወደ «[[$2]]» አዛወረ',
+'protect-badnamespace-text' => 'በዚሁ ክፍለ ዊኪ ያሉት ገጾች ሊቆለፉ አይችሉም።',
 'protect-legend' => 'የመቆለፍ ማረጋገጫ',
 'protectcomment' => 'ምክንያት:',
 'protectexpiry' => 'የሚያልቅበት ግዜ፦',
@@ -1453,6 +1653,7 @@ $NEWPAGE
 'protect-level-sysop' => 'መጋቢዎች ብቻ',
 'protect-summary-cascade' => 'በውስጡም ያለውን የሚያቆልፍ አይነት',
 'protect-expiring' => 'በ$1 (UTC) ያልቃል',
+'protect-expiring-local' => '$1 ያልቃል።',
 'protect-expiry-indefinite' => 'ያልተወሰነ',
 'protect-cascade' => 'በዚህ ገጽ ውስጥ የተካተተው ገጽ ሁሉ ደግሞ ይቆለፍ?',
 'protect-cantedit' => 'ይህንን ገጽ የማዘጋጀት ፈቃድ ስለሌለልዎ መቆለፍ አይቻሎትም።',
@@ -1491,7 +1692,9 @@ $NEWPAGE
 'undelete-nodiff' => 'ቀድመኛ ዕትም አልተገኘም።',
 'undeletebtn' => 'ይመለስ',
 'undeletelink' => 'አሳይ/ወደ ነበረበት መልስ',
+'undeleteviewlink' => 'ተመልከት',
 'undeletereset' => 'ባዶ ይደረግ',
+'undeleteinvert' => 'ምርጫውን ለመገልበጥ',
 'undeletecomment' => 'ማጠቃልያ፦',
 'undeletedrevisions' => '{{PLURAL:$1|1 ዕትም|$1 ዕትሞች}} መለሰ',
 'undeletedrevisions-files' => '{{PLURAL:$1|1 ዕትም|$1 ዕትሞች}} እና {{PLURAL:$2|1 ፋይል|$2 ፋይሎች}} መለሰ',
@@ -1531,10 +1734,17 @@ $1',
 'sp-contributions-newbies-sub' => '(ለአዳዲስ ተጠቃሚዎች)',
 'sp-contributions-newbies-title' => 'የአዳዲስ ተጠቃሚዎች አስተዋጽኦች',
 'sp-contributions-blocklog' => 'የማገጃ መዝገብ',
+'sp-contributions-deleted' => 'የአባሉ የጠፉት አስተዋጽኦች',
+'sp-contributions-logs' => 'መዝገቦች',
 'sp-contributions-talk' => 'ውይይት',
 'sp-contributions-userrights' => 'የአባል መብቶች ለማስተዳደር',
+'sp-contributions-blocked-notice' => 'ይህ ተጠቃሚ $1 አሁን የታገደ ነው። 
+ከዚህ ታች የማገጃ መዝገብ መጨረሻ ድርጊት ይታያል።',
+'sp-contributions-blocked-notice-anon' => 'ይህ IP ቁጥር አሁን የታገደ ነው። 
+ከዚህ ታች የማገጃ መዝገብ መጨረሻ ድርጊት ይታያል።',
 'sp-contributions-search' => 'የሰውን አስተዋጽኦች ለመፈለግ፦',
 'sp-contributions-username' => 'ብዕር ስም ወይም የቁ. አድራሻ፦',
+'sp-contributions-toponly' => 'መጨረሻ ዕትም (ላይና) የሆኑት ለውጦች ብቻ ይታዩ።',
 'sp-contributions-submit' => 'ፍለጋ',
 
 # What links here
@@ -1553,10 +1763,15 @@ $1',
 'whatlinkshere-hideredirs' => 'መምሪያ መንገዶች $1',
 'whatlinkshere-hidetrans' => 'የተሰካ መለጠፊያ $1',
 'whatlinkshere-hidelinks' => 'መያያዣዎች $1',
+'whatlinkshere-hideimages' => 'የፋይል መያያዣዎች $1',
 'whatlinkshere-filters' => 'መለያዎች',
 
 # Block/unblock
+'autoblockid' => 'ቀጥታ ማገጃ #$1',
+'block' => 'ተጠቃሚ ለማገድ',
+'unblock' => 'ከተጠቃሚ ማገጃ ለማንሣት',
 'blockip' => 'ተጠቃሚውን ለማገድ',
+'blockip-title' => 'ማገጃ መጣል',
 'blockip-legend' => 'ተጠቃሚ ለማገድ',
 'blockiptext' => 'ከዚህ ታች ያለው ማመልከቻ በአንድ ቁጥር አድርሻ ወይም ብዕር ስም ላይ ማገጃ (ማዕቀብ) ለመጣል ይጠቀማል።  ይህ በ[[{{MediaWiki:Policy-url}}|መርመርያዎቻችን]] መሠረት ተንኮል ወይም ጉዳት ለመከልከል ብቻ እንዲደረግ ይገባል። ከዚህ ታች የተለየ ምክንያት (ለምሣሌ የተጎዳው ገጽ በማጠቆም) ይጻፉ።',
 'ipadressorusername' => 'የቁ. አድራሻ ወይም የብዕር ስም፦',
@@ -1579,10 +1794,12 @@ $1',
 'ipboptions' => '2 ሰዓቶች:2 hours,1 ቀን:1 day,3 ቀን:3 days,1 ሳምንት:1 week,2 ሳምንት:2 weeks,1 ወር:1 month,3 ወር:3 months,6 ወር:6 months,1 አመት:1 year,ዘላለም:infinite',
 'ipbotheroption' => 'ሌላ',
 'ipbotherreason' => 'ሌላ/ተጨማሪ ምክንያት፦',
+'ipb-confirm' => 'ማገጃውን ለማረጋገጥ',
 'badipaddress' => 'የማይሆን የቁ. አድራሻ',
 'blockipsuccesssub' => 'ማገጃ ተከናወነ',
 'blockipsuccesstext' => '[[Special:Contributions/$1|$1]] ታግዷል።<br />
 ማገጃዎች ለማመልከት [[Special:BlockList|የማገጃ ዝርዝሩን]] ይዩ።',
+'ipb-blockingself' => 'እራስዎን ሊያግዱ ነው። ይሄ በእርግጡ ይደረግን?',
 'ipb-edit-dropdown' => "'ተራ የማገጃ ምክንያቶች' ለማስተካከል",
 'ipb-unblock-addr' => 'ከ$1 መገጃ ለማንሣት',
 'ipb-unblock' => 'ከብዕር ስም ወይም ከቁ. አድራሻ ማገጃ ለማንሣት',
@@ -1592,10 +1809,18 @@ $1',
 'unblockiptext' => 'በዚህ ማመልከቻ ከታገደ ተጠቃሚ ማገጃውን ለማንሣት ይቻላል።',
 'ipusubmit' => 'ማገጃውን ለማንሣት',
 'unblocked' => 'ማገጃ ከ[[User:$1|$1]] ተነሣ',
+'unblocked-range' => 'ማገጃ ከ$1 ተነሣ',
 'unblocked-id' => 'ማገጃ $1 ተነሣ',
+'blocklist' => 'የታገዱት ተጠቃሚዎች',
 'ipblocklist' => 'የድህረ ገፅ መለያዎችንና (IP addresses) እና የተጠቃሚዎችን የብዕር ስም አግድ።',
 'ipblocklist-legend' => 'አንድ የታገደውን ተጠቃሚ ለመፈለግ፦',
+'blocklist-tempblocks' => 'ጊዜያዊ ማገጃዎች ይደበቁ',
+'blocklist-timestamp' => 'የተደረገበት ሰዓት',
+'blocklist-expiry' => 'የሚያልቅበት ግዜ',
+'blocklist-by' => 'ማገጃ የጣለው',
+'blocklist-reason' => 'ምክንያት',
 'ipblocklist-submit' => 'ይፈለግ',
+'ipblocklist-otherblocks' => '{{PLURAL:$1|ሌላ ማገጃ|ሌሎች ማገጃዎች}}',
 'infiniteblock' => 'መቸም ይማያልቅ',
 'expiringblock' => 'በ$1 $2 እ.ኤ.አ. ያልቃል',
 'anononlyblock' => 'ያልገቡት የቁ.# ብቻ',
@@ -1609,6 +1834,7 @@ $1',
 'unblocklink' => 'ማገጃ ለማንሣት',
 'change-blocklink' => 'እገዳውን ቀይር',
 'contribslink' => 'አስተዋጽኦች',
+'emaillink' => 'ኢ-ሜል መላክ',
 'blocklogpage' => 'የማገጃ መዝገብ',
 'blocklogentry' => 'እስከ $2 ድረስ [[$1]] አገዳ $3',
 'blocklogtext' => 'ይህ መዝገብ ተጠቃሚዎች መቸም ሲታገዱ ወይም ማገጃ ሲነሣ የሚዘረዝር ነው። ለአሁኑ የታገዱት ሰዎች [[Special:BlockList|በአሁኑ ማገጃዎች ዝርዝር]] ይታያሉ።',
@@ -1674,6 +1900,7 @@ $1',
 'movepagebtn' => 'ገጹ ይዛወር',
 'pagemovedsub' => 'መዛወሩ ተከናወነ',
 'movepage-moved' => "'''«$1» ወደ «$2» ተዛውሯል'''",
+'movepage-moved-redirect' => 'መምሪያ መንገድ ተፈጠረ።',
 'articleexists' => 'በዚያ አርዕሥት ሌላ ገጽ አሁን አለ። አለበለዚያ የመረጡት ስም ልክ አይደለም - ሌላ አርእስት ይምረጡ።',
 'cantmove-titleprotected' => 'አዲሱ አርዕስት ከመፈጠር ስለተጠበቀ፣ ገጽ ወደዚያው ሥፍራ ለማዛወር አይችሉም።',
 'talkexists' => "'''ገጹ ወደ አዲሱ አርዕስት ተዛወረ፤ እንጂ በአዲሱ አርዕስት የቆየ ውይይት ገጽ አስቀድሞ ስለ ኖረ የዚህ ውይይት ገጽ ሊዛወር አልተቻለም። እባክዎ፣ በእጅ ያጋጥሙአቸው።'''",
@@ -1685,6 +1912,7 @@ $1',
 'movepage-page-unmoved' => 'ገጹ $1 ወደ $2 ሊዛወር አልተቻለም።',
 'movelogpage' => 'የማዛወር መዝገብ',
 'movelogpagetext' => 'ይህ መዝገብ ገጽ ሲዛወር ይመዝገባል። <ይመለስ> ቢጫኑ ኖሮ መዛወሩን ይገለብጣል!',
+'movenosubpage' => 'ይህ ገጽ ምንም ንዑስ ገጽ የለውም።',
 'movereason' => 'ምክንያት:',
 'revertmove' => 'ይመለስ',
 'delete_and_move' => 'ማጥፋትና ማዛወር',
@@ -1709,6 +1937,7 @@ $1',
 'export-submit' => 'ለመላክ',
 'export-addcattext' => 'ከዚሁ መደብ ገጾች ይጨመሩ፦',
 'export-addcat' => 'ለመጨምር',
+'export-addns' => 'ለመጨምር',
 'export-download' => 'እንደ ፋይል ለመቆጠብ',
 'export-templates' => 'ከነመለጠፊያዎቹ',
 
@@ -1720,6 +1949,10 @@ $1',
 '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.',
 'allmessagesnotsupportedDB' => "'''\$wgUseDatabaseMessages''' ስለ ተዘጋ '''{{ns:special}}:Allmessages''' ሊጠቀም አይችልም።",
+'allmessages-filter-legend' => 'ማጣሪያ',
+'allmessages-filter-all' => 'ሁሉ',
+'allmessages-language' => 'ቋንቋ፦',
+'allmessages-filter-submit' => 'ሂድ',
 
 # Thumbnails
 'thumbnail-more' => 'አጎላ',
@@ -1851,6 +2084,7 @@ Please visit [//www.mediawiki.org/wiki/Localisation MediaWiki Localisation] and
 
 # Patrol log
 'patrol-log-page' => 'የማሳለፊያ መዝገብ',
+'log-show-hide-patrol' => 'ማሳለፊያ መዝገቦች',
 
 # Image deletion
 'deletedrevision' => 'የቆየው ዕትም $1 አጠፋ',
@@ -1879,12 +2113,21 @@ $1',
 # Special:NewFiles
 'newimages' => 'የአዳዲስ ሥዕሎች ማሳያ አዳራሽ',
 'imagelisttext' => '$1 የተጨመሩ ሥእሎች ወይም ፋይሎች ከታች ይዘረዝራሉ ($2)።',
+'newimages-legend' => 'ማጣሪያ',
 'showhidebots' => '(«bots» $1)',
 'noimages' => 'ምንም የለም!',
 'ilsubmit' => 'ፍለጋ',
 'bydate' => 'በተጨመሩበት ወቅት',
 'sp-newimages-showfrom' => 'ከ$2፣ $1 እ.ኤ.አ. ጀምሮ አዲስ ይታዩ',
 
+# Video information, used by Language::formatTimePeriod() to format lengths in the above messages
+'seconds' => '$1 ሴኮንድ',
+'minutes' => '$1 ደቂቃ',
+'hours' => '$1 ሰዓት',
+'days' => '$1 ቀን',
+'ago' => 'ከ$1 በፊት',
+'just-now' => 'ገና አሁን',
+
 # Bad image list
 'bad_image_list' => 'ሥርዓቱ እንዲህ ነው፦
 
@@ -2002,6 +2245,20 @@ $1',
 'exif-gpsareainformation' => 'የGPS ክልል ስም',
 'exif-gpsdatestamp' => 'የGPS ቀን',
 'exif-gpsdifferential' => 'GPS ልዩነት ማስተካከል',
+'exif-countrycreated' => 'ፎቶው የተነሣበት ሀገር',
+'exif-countrycodecreated' => 'ፎቶው የተነሣበት ሀገር ኮድ',
+'exif-provinceorstatecreated' => 'ፎቶው የተነሣበት ክፍላገር',
+'exif-citycreated' => 'ፎቶው የተነሣበት ከተማ',
+'exif-countrydest' => 'የታየው ሀገር',
+'exif-countrycodedest' => 'የሚታየው ሀገር ኮድ',
+'exif-provinceorstatedest' => 'የሚታየው ክፍለሀገር',
+'exif-citydest' => 'የሚታየው ከተማ',
+'exif-objectname' => 'አጭር አርዕስት',
+'exif-specialinstructions' => 'ልዩ ማስጠንቀቂያ',
+'exif-source' => 'መነሻ',
+'exif-languagecode' => 'ቋንቋ',
+'exif-cameraownername' => 'ባለ ካሜራ',
+'exif-personinimage' => 'የታየው ሰው',
 
 # EXIF attributes
 'exif-compression-1' => 'ያልተጨመቀ',
@@ -2104,10 +2361,41 @@ $1',
 'exif-gpsspeed-m' => 'ማይል (mile) በየሰዓቱ',
 'exif-gpsspeed-n' => 'Knot (የመርከብ ፍጥነት መለኪያ)',
 
+# Pseudotags used for GPSDestDistanceRef
+'exif-gpsdestdistance-k' => 'ኪሎሜትር',
+'exif-gpsdestdistance-m' => 'ማይል',
+
+'exif-gpsdop-excellent' => 'በጣም ጥሩ',
+'exif-gpsdop-good' => 'ጥሩ ($1)',
+
+'exif-objectcycle-a' => 'ጥዋት ብቻ',
+'exif-objectcycle-p' => 'ማታ ብቻ',
+'exif-objectcycle-b' => 'ጥዋትም ማታም',
+
 # Pseudotags used for GPSTrackRef, GPSImgDirectionRef and GPSDestBearingRef
 'exif-gpsdirection-t' => 'ዕውነተኛ አቅጣጫ',
 'exif-gpsdirection-m' => 'መግነጢሳዊ አቅጣጫ',
 
+'exif-dc-publisher' => 'አሳታሚ',
+'exif-dc-rights' => 'መብቶች',
+
+'exif-isospeedratings-overflow' => 'ከ65535 በላይ',
+
+'exif-iimcategory-clj' => 'ወንጀልና ሕግ',
+'exif-iimcategory-fin' => 'ምጣኔ ሀብትና ንግድ',
+'exif-iimcategory-edu' => 'ትምህርት',
+'exif-iimcategory-hth' => 'ጤንነት',
+'exif-iimcategory-lab' => 'ሥራ',
+'exif-iimcategory-lif' => 'አኗኗርና መዝናናት',
+'exif-iimcategory-pol' => 'ፖለቲካ',
+'exif-iimcategory-rel' => 'ሀይማኖትና እምነት',
+'exif-iimcategory-sci' => 'ሳይንስና ቴክኖዎሎጂ',
+'exif-iimcategory-soi' => 'ኅብረተሠባዊ ጉዳይ',
+'exif-iimcategory-spo' => 'ስፖርት',
+'exif-iimcategory-war' => 'ጦርነት፣ ግጭት ወይም ሁከት',
+
+'exif-urgency-high' => 'ከፍተኛ ($1)',
+
 # External editor support
 'edit-externally' => 'ይህንን ፋይል በአፍአዊ ሶፍትዌር ለማዘጋጀት',
 'edit-externally-help' => '(ለተጨማሪ መረጃ ይህን ገፅ ተመልከቱ [//www.mediawiki.org/wiki/Manual:External_editors setup instructions])',
@@ -2116,6 +2404,7 @@ $1',
 'watchlistall2' => 'ሁሉ',
 'namespacesall' => 'ሁሉ (all)',
 'monthsall' => 'ሁሉ',
+'limitall' => 'ሁሉ',
 
 # E-mail address confirmation
 'confirmemail' => 'ኢ-ሜልዎን ለማረጋገጥ',
@@ -2251,6 +2540,7 @@ $3
 'fileduplicatesearch-legend' => 'ለቅጂ ለመፈልግ',
 'fileduplicatesearch-filename' => 'የፋይል ስም:',
 'fileduplicatesearch-submit' => 'ፍለጋ',
+'fileduplicatesearch-noresults' => '«$1» የሚባል ፋይል አልተገኘም።',
 
 # Special:SpecialPages
 'specialpages' => 'ልዩ ገጾች',
@@ -2259,14 +2549,33 @@ $3
 'specialpages-group-changes' => 'የቅርቡ ለውጦችና መዝገቦች',
 'specialpages-group-users' => 'አባሎችና መብቶች',
 'specialpages-group-highuse' => 'ከፍተኛ ጥቅም ያላቸው ገጾች',
+'specialpages-group-pages' => 'የገጾች ዝርዝሮች',
 'specialpages-group-pagetools' => 'የገጽ መሣሪያዎች',
 'specialpages-group-wiki' => 'የዊኪ መረጃና መሣርያዎች',
+'specialpages-group-spam' => 'የ«ስፓም» ማሳርያዎች',
 
 # Special:BlankPage
 'blankpage' => 'ባዶ ገጽ',
 
+# Special:Tags
+'tag-filter-submit' => 'ማጣሪያ',
+'tags-edit' => 'አርም',
+'tags-hitcount' => '$1 {{PLURAL:$1|ለውጥ|ለውጦች}}',
+
+# Database error messages
+'dberr-header' => 'ይህ ዊኪ ችግር አለው',
+'dberr-usegoogle' => 'ለአሁኑ ጊዜ በጉግል መፈልግ ይችላሉ።',
+
+# HTML forms
+'htmlform-submit' => 'ለማቅረብ',
+'htmlform-selectorother-other' => 'ሌላ',
+
 # New logging system
-'newuserlog-byemail' => 'ማለፊያ-ቃል በኤ-መልዕክት ተልኳል',
+'logentry-delete-delete' => '$1 ገጹን $3 አጠፋ',
+'rightsnone' => '(የለም)',
+
+# Feedback
+'feedback-cancel' => 'ይቅር',
 
 # Search suggestions
 'searchsuggest-search' => 'ፈልግ',
@@ -2297,6 +2606,7 @@ $3
 'api-error-unknown-code' => 'ያልታወቀ ስህተት: "$1"',
 'api-error-unknown-error' => 'የውስጥ ስህተት: የእርስዎን ፋይል ለመላክ ሲሞከር ችግር ተፈጠረ።',
 'api-error-unknown-warning' => 'ያልታወቀ ማስጠንቀቂያ $1',
+'api-error-unknownerror' => 'ያልታወቀ ስህተት: "$1"',
 'api-error-uploaddisabled' => 'ፋይል መላክ በዚህ ውኪ ላይ አልተፈቀደም።',
 'api-error-verification-error' => 'ይህ ፋይል የተበላሸ ወይም ትክክል ያልሆነ ቅጥያ ያለው ሊሆን ይችላል።',
 
index d932ad9..d940006 100644 (file)
@@ -818,7 +818,6 @@ Como información adicional s'amuestra contino a zaguera dentrada en o rechistro
 'hiddencategories' => 'Ista pachina fa parte de {{PLURAL:$1|1 categoría amagata|$1 categorías amagatas}}:',
 'edittools' => "<!-- Iste testo amanixerá baxo os formularios d'edizión y carga. -->",
 'edittools-upload' => '-',
-'nocreatetitle' => "S'ha restrinchito a creyación de pachinas",
 'nocreatetext' => '{{SITENAME}} ha restrinchito a creyación de nuevas pachinas. Puede tornar enta zaga y editar una pachina ya existent, [[Special:UserLogin|identificarse u creyar una cuenta]].',
 'nocreate-loggedin' => 'No tiene premiso ta creyar nuevas pachinas.',
 'sectioneditnotsupported-title' => 'A edición por seccions no ye suportada',
@@ -1339,12 +1338,13 @@ Habría de tener menos de $1 {{PLURAL:$1|carácter|carácters}}.',
 'right-sendemail' => 'Ninviar un correu electronico a atros usuarios',
 'right-passwordreset' => 'Veyer os correus electronicos de restabimiento de claus',
 
+# Special:Log/newusers
+'newuserlogpage' => 'Rechistro de nuevos usuarios',
+'newuserlogpagetext' => "Isto ye un rechistro de creyación d'usuarios.",
+
 # User rights log
 'rightslog' => "Rechistro de cambios en os dreitos d'os usuarios",
 'rightslogtext' => "Iste ye un rechistro d'os cambios en os dreitos d'os usuarios",
-'rightslogentry' => "ha cambiato os dreitos d'usuario de $1: de $2 a $3",
-'rightslogentry-autopromote' => "S'ha promovito automaticament dende $2 ta $3",
-'rightsnone' => '(garra)',
 
 # Associated actions - in the sentence "You do not have permission to X"
 'action-read' => 'leyer ista pachina',
@@ -1957,10 +1957,6 @@ Protocolos suportados: <code>$1</code> (no los adhiba en a suya busca).',
 'activeusers-hidesysops' => 'Amagar administradors',
 'activeusers-noresult' => "No s'han trobato usuarios.",
 
-# Special:Log/newusers
-'newuserlogpage' => 'Rechistro de nuevos usuarios',
-'newuserlogpagetext' => "Isto ye un rechistro de creyación d'usuarios.",
-
 # Special:ListGroupRights
 'listgrouprights' => "Dreitos d'a colla d'usuarios",
 'listgrouprights-summary' => "Contino trobará a lista de collas d'usuario definitas en iste wiki, con os suyos dreitos d'acceso asociatos. Tamién puet trobar aquí [[{{MediaWiki:Listgrouprights-helppage}}|información adicional]] sobre os dreitos individuals.",
@@ -2057,9 +2053,7 @@ L\'adreza de correu-e que endicó en as suyas [[Special:Preferences|preferencias
 'enotif_anon_editor' => 'usuario anonimo $1',
 'enotif_body' => 'Queriu/ida $WATCHINGUSERNAME,
 
-A pachina $PAGETITLE d\'o prochecto {{SITENAME}} s\'ha $CHANGEDORCREATED o día $PAGEEDITDATE por $PAGEEDITOR, veiga a versión actual en $PAGETITLE_URL.
-
-$NEWPAGE
+$PAGEINTRO $NEWPAGE
 
 Resumen de l\'editor: $PAGESUMMARY $PAGEMINOREDIT
 
@@ -2067,8 +2061,9 @@ Contacto con l\'editor:
 correu-e: $PAGEEDITOR_EMAIL
 wiki: $PAGEEDITOR_WIKI
 
-Si no visita a pachina, no recibirá mas notificacions de futuros cambios cambios
+Si no visita a pachina, no recibirá mas notificacions de futuros cambios. 
 Tamién puet cambiar o modo de notificación d\'as pachinas que cosira en a suya lista de seguimiento.
+
 Atentament,
 O servicio de notificacions d\'o prochecto {{SITENAME}}
 
@@ -2083,6 +2078,8 @@ Ta eliminar a pachina d\'a suya lista de seguimiento, vaiga ta $UNWATCHURL
 
 Sucherencias y aduya:
 {{canonicalurl:{{MediaWiki:Helppage}}}}',
+'created' => 'creyata',
+'changed' => 'editata',
 
 # Delete
 'deletepage' => 'Borrar ista pachina',
@@ -3603,7 +3600,7 @@ As imachens s'amuestran en resolución completa, a resta de fichers fan encetar
 'logentry-newusers-create' => "$1 creyó una cuenta d'usuario",
 'logentry-newusers-create2' => "$1 creyó una cuenta d'usuario $3",
 'logentry-newusers-autocreate' => "S'ha creyau automaticament a cuenta $1",
-'newuserlog-byemail' => 'Clau ninviata por correu electronico',
+'rightsnone' => '(garra)',
 
 # Feedback
 'feedback-bugornote' => "Si creye que puede describir en detalle un problema tecnico, [$1 informe d'un bug] por favor.
index 25040a2..87e3aaa 100644 (file)
@@ -476,7 +476,6 @@ folcliċum āgnunge oþþe ȝelīċum frēom horde (sēo $1 for āscungum).
 'template-protected' => '(borgen)',
 'template-semiprotected' => '(sāmborgen)',
 'hiddencategories' => 'Þēos sīde is ȝesīþ {{PLURAL:$1|1 ȝehȳdedes flocces|$1 ȝehȳdeda flocca}}:',
-'nocreatetitle' => 'Sīdan ȝesceaft mǣte',
 'nocreate-loggedin' => 'Þū ne hæfst þafunge to scieppenne nīƿa sīdan.',
 'permissionserrors' => 'Þafunga ƿōh',
 'permissionserrorstext-withaction' => 'Þū ne hæfst þafunge for $2, forþǣm þe {{PLURAL:$1|race|racum}}:',
@@ -632,6 +631,9 @@ folcliċum āgnunge oþþe ȝelīċum frēom horde (sēo $1 for āscungum).
 
 'grouppage-sysop' => '{{ns:project}}:Beƿitendas',
 
+# Special:Log/newusers
+'newuserlogpage' => 'Brūcenda ȝesceaft ȝetalu',
+
 # User rights log
 'rightslog' => 'Brūcenda riht cranic',
 
@@ -834,9 +836,6 @@ Also see [[Special:WantedCategories|wanted categories]].',
 # Special:ActiveUsers
 'activeusers' => 'Hƿata brūcenda ȝetalu',
 
-# Special:Log/newusers
-'newuserlogpage' => 'Brūcenda ȝesceaft ȝetalu',
-
 # Special:ListGroupRights
 'listgrouprights-group' => 'Clīeƿen',
 'listgrouprights-rights' => 'Riht',
@@ -878,6 +877,8 @@ Also see [[Special:WantedCategories|wanted categories]].',
 'enotif_lastvisited' => 'Sēo $1 for eall hƿearfas siþþan þīn læst cyme.',
 'enotif_lastdiff' => 'Sēo $1 to sēonne þisne hƿearf.',
 'enotif_anon_editor' => 'uncūþ brūcend $1',
+'created' => 'ȝescapen',
+'changed' => 'hƿorfen',
 
 # Delete
 'deletepage' => 'Sīdan āfeorsian',
index fc0fd78..9568465 100644 (file)
@@ -54,6 +54,7 @@
  * @author Uwe a
  * @author Zack wadghiri
  * @author Zanatos
+ * @author أحمد
  * @author ترجمان05
  * @author خالد حسني
  * @author روخو
@@ -469,42 +470,42 @@ $imageFiles = array(
 
 $messages = array(
 # User preference toggles
-'tog-underline' => 'ضع خطا تحت الوصلات:',
-'tog-justify' => 'ساÙ\88 الفقرات',
-'tog-hideminor' => 'أخÙ\81 Ø§Ù\84تعدÙ\8aÙ\84ات الطفيفة في أحدث التغييرات',
-'tog-hidepatrolled' => 'أخÙ\81 Ø§Ù\84تعدÙ\8aÙ\84ات المراجعة في أحدث التغييرات',
+'tog-underline' => 'ضع خطا تحت الروابط:',
+'tog-justify' => 'حاذ الفقرات',
+'tog-hideminor' => 'أخÙ\81 Ø§Ù\84تحرÙ\8aرات الطفيفة في أحدث التغييرات',
+'tog-hidepatrolled' => 'أخÙ\81 Ø§Ù\84تحرÙ\8aرات المراجعة في أحدث التغييرات',
 'tog-newpageshidepatrolled' => 'أخف الصفحات المراجعة من قائمة الصفحات الجديدة',
 'tog-extendwatchlist' => 'مدد قائمة المراقبة لعرض كل التغييرات، وليس الأحدث فقط',
-'tog-usenewrc' => 'جÙ\85Ù\91ع Ø§Ù\84تعدÙ\8aÙ\84ات حسب الصفحة في أحدث التغييرات وقائمة المراقبة (يتطلب جافاسكربت)',
+'tog-usenewrc' => 'جÙ\85Ù\91ع Ø§Ù\84تغÙ\8aÙ\8aرات حسب الصفحة في أحدث التغييرات وقائمة المراقبة (يتطلب جافاسكربت)',
 'tog-numberheadings' => 'رقم العناوين تلقائياً',
 'tog-showtoolbar' => 'أظهر شريط التحرير (يتطلب جافاسكربت)',
-'tog-editondblclick' => 'عدÙ\84 Ø§Ù\84صÙ\81حات Ø¹Ù\86د Ø§Ù\84ضغط المزدوج (جافاسكربت)',
-'tog-editsection' => 'Ù\85Ù\83Ù\86 ØªØ¹Ø¯Ù\8aÙ\84 Ø§Ù\84Ø£Ù\82ساÙ\85 Ø¹Ù\86 Ø·Ø±Ù\8aÙ\82 Ù\88صÙ\84ات [عدل]',
-'tog-editsectiononrightclick' => 'Ù\81عÙ\84 ØªØ¹Ø¯Ù\8aÙ\84 Ø§Ù\84Ø£Ù\82ساÙ\85 Ø¨Ù\88اسطة Ù\83بسة Ø§Ù\84Ù\81أرة Ø§Ù\84Ù\8aÙ\85Ù\8aÙ\86 Ø¹Ù\84Ù\89 Ø¹Ù\86اÙ\88Ù\8aÙ\86 Ø§Ù\84Ø£Ù\82ساÙ\85 (جافاسكريبت)',
+'tog-editondblclick' => 'تحرÙ\8aر Ø§Ù\84صÙ\81حات Ø¨Ø§Ù\84Ù\86Ù\82ر المزدوج (جافاسكربت)',
+'tog-editsection' => 'Ù\85Ù\83Ù\86 ØªØ­Ø±Ù\8aر Ø§Ù\84Ø£Ù\82ساÙ\85 Ø¨Ø±Ù\88ابط [عدل]',
+'tog-editsectiononrightclick' => 'Ù\81عÙ\90Ù\91Ù\84 ØªØ­Ø±Ù\8aر Ø§Ù\84Ø£Ù\82ساÙ\85 Ø¨Ø§Ù\84Ù\86Ù\82ر Ø¨Ø§Ù\84Ù\8aÙ\85Ù\8aÙ\86 Ø¹Ù\84Ù\89 Ø¹Ù\86اÙ\88Ù\8aÙ\86 Ø§Ù\84Ø£Ù\82ساÙ\85 (Ù\8aتطÙ\84ب جافاسكريبت)',
 'tog-showtoc' => 'اعرض فهرس المحتويات (للصفحات التي تحتوي على أكثر من 3 عناوين)',
 'tog-rememberpassword' => 'تذكر دخولي بهذا المتصفح (لمدة أقصاها {{PLURAL:$1||يوم واحد|يومان|$1 أيام|$1 يوما|$1 يوم}})',
 'tog-watchcreations' => 'أضف الصفحات التي أنشئها والملفات التي أرفعها إلى قائمة مراقبتي.',
-'tog-watchdefault' => '!!أضÙ\81 Ø§Ù\84صÙ\81حات Ù\88اÙ\84Ù\85Ù\84Ù\81ات Ø§Ù\84تÙ\8a Ø£Ø¹Ø¯Ù\84ها إلى قائمة مراقبتي',
+'tog-watchdefault' => '!!أضÙ\81 Ø§Ù\84صÙ\81حات Ù\88اÙ\84Ù\85Ù\84Ù\81ات Ø§Ù\84تÙ\8a Ø£Ø­Ø±Ø±ها إلى قائمة مراقبتي',
 'tog-watchmoves' => 'أضف الصفحات والملفات التي أنقلها إلى قائمة مراقبتي',
 'tog-watchdeletion' => 'أضف الصفحات والملفات التي أحذفها إلى قائمة مراقبتي',
-'tog-minordefault' => 'عÙ\84Ù\85 Ù\83Ù\84 Ø§Ù\84تعدÙ\8aÙ\84ات Ø·Ù\81Ù\8aÙ\81Ø© Ø§Ù\81تراضيا',
+'tog-minordefault' => 'أشÙ\90Ù\91ر Ù\83Ù\84 Ø§Ù\84تعدÙ\8aÙ\84ات Ø¹Ù\84Ù\89 Ø£Ù\86Ù\87ا Ø·Ù\81Ù\8aÙ\81Ø© Ù\85بدئيا',
 'tog-previewontop' => 'أظهر العرض المسبق قبل صندوق التحرير',
-'tog-previewonfirst' => 'أظÙ\87ر Ù\85عاÙ\8aÙ\86Ø© Ù\85ع Ø£Ù\88Ù\84 ØªØ¹Ø¯Ù\8aÙ\84',
+'tog-previewonfirst' => 'أظÙ\87ر Ù\85عاÙ\8aÙ\86Ø© Ù\85ع Ø£Ù\88Ù\84 ØªØ­Ø±Ù\8aر',
 'tog-nocache' => 'عطّل تخزين المتصفح للصفحة',
-'tog-enotifwatchlistpages' => 'أرسل لي رسالة إلكترونية عندما تُغيّر صفحة أو ملف في قائمة مراقبتي',
+'tog-enotifwatchlistpages' => 'أرسل لي رسالة إلكترونية عندما تتغيّر صفحة أو ملف في قائمة مراقبتي',
 'tog-enotifusertalkpages' => 'أرسل لي رسالة إلكترونية عندما تعدل صفحة نقاشي',
-'tog-enotifminoredits' => 'أرسÙ\84 Ù\84Ù\8a Ø±Ø³Ø§Ù\84Ø© Ø¥Ù\84Ù\83ترÙ\88Ù\86Ù\8aØ© Ø¹Ù\86 Ø§Ù\84تعدÙ\8aÙ\84ات Ø§Ù\84Ø·Ù\81Ù\8aÙ\81Ø© Ù\84Ù\84صÙ\81حات Ù\88اÙ\84Ù\85Ù\84Ù\81ات Ø£Ù\8aضا',
+'tog-enotifminoredits' => 'أرسÙ\84 Ù\84Ù\8a Ø±Ø³Ø§Ù\84Ø© Ø¥Ù\84Ù\83ترÙ\88Ù\86Ù\8aØ© Ø¨Ø´Ø£Ù\86 Ø§Ù\84تحرÙ\8aرات Ø§Ù\84Ø·Ù\81Ù\8aÙ\81Ø© Ù\84Ù\84صÙ\81حات Ù\88اÙ\84Ù\85Ù\84Ù\81ات',
 'tog-enotifrevealaddr' => 'أظهر عنوان بريدي الإلكتروني في رسائل الإخطار',
-'tog-shownumberswatching' => 'اعرض عدد المستخدمين المراقبين',
+'tog-shownumberswatching' => 'اعرض Ø¹Ø¯Ø¯ Ø§Ù\84Ù\85ستخدÙ\85Ù\8aÙ\86 Ø§Ù\84Ù\85راÙ\82بÙ\90Ù\8aÙ\86',
 'tog-oldsig' => 'التوقيع الحالي:',
 'tog-fancysig' => 'عامل التوقيع كنص ويكي (بدون وصلة أوتوماتيكية)',
-'tog-externaleditor' => 'استخدم محرراً خارجياً بشكل افتراضي (للخبراء فقط، يحتاج إعدادات خاصة على حاسوبك) ([//www.mediawiki.org/wiki/Manual:External_editors لمزيد من المعلومات].)',
-'tog-externaldiff' => 'استخدÙ\85 Ù\81رÙ\82اÙ\8b Ø®Ø§Ø±Ø¬Ù\8aاÙ\8b Ø¨Ø´Ù\83Ù\84 Ø§Ù\81تراضÙ\8a (Ù\84Ù\84خبراء Ù\81Ù\82Ø·Ø\8c Ù\8aحتاج إعدادات خاصة على حاسوبك) ([//www.mediawiki.org/wiki/Manual:External_editors للمزيد من المعلومات].)',
+'tog-externaleditor' => 'استخدم محررًا خارجيًا مبدئيا (للخبراء فقط، يتطلب إعدادات خاصة على حاسوبك) ([//www.mediawiki.org/wiki/Manual:External_editors لمزيد من المعلومات].)',
+'tog-externaldiff' => 'استخدÙ\85 Ù\85ستعرض Ù\81رÙ\88Ù\82ات Ø®Ø§Ø±Ø¬Ù\8aÙ\8bا Ù\85بدئÙ\8aا (Ù\84Ù\84خبراء Ù\81Ù\82Ø·Ø\8c Ù\8aتطÙ\84Ù\91ب إعدادات خاصة على حاسوبك) ([//www.mediawiki.org/wiki/Manual:External_editors للمزيد من المعلومات].)',
 'tog-showjumplinks' => 'مكن وصلات "اذهب إلى" المساعدة',
 'tog-uselivepreview' => 'استخدم الاستعراض السريع (جافاسكريبت) (تجريبي)',
-'tog-forceeditsummary' => 'Ù\86بÙ\87Ù\86Ù\8a Ø¹Ù\86د Ø¥Ø¯Ø®Ø§Ù\84 Ù\85Ù\84خص ØªØ¹Ø¯Ù\8aÙ\84 فارغ',
-'tog-watchlisthideown' => 'أخÙ\81 ØªØ¹Ø¯Ù\8aÙ\84اتي من قائمة المراقبة',
-'tog-watchlisthidebots' => 'أخÙ\81 ØªØ¹Ø¯Ù\8aÙ\84ات Ø§Ù\84بÙ\88ت من قائمة المراقبة',
+'tog-forceeditsummary' => 'Ù\86بÙ\87Ù\86Ù\8a Ø¹Ù\86د Ø¥Ø¯Ø®Ø§Ù\84 Ù\85Ù\84خص ØªØ­Ø±Ù\8aر فارغ',
+'tog-watchlisthideown' => 'أخÙ\81 ØªØ­Ø±Ù\8aراتي من قائمة المراقبة',
+'tog-watchlisthidebots' => 'أخÙ\81 ØªØ­Ø±Ù\8aرات Ø§Ù\84رÙ\88بÙ\88تات من قائمة المراقبة',
 'tog-watchlisthideminor' => 'أخف التعديلات الطفيفة من قائمة المراقبة',
 'tog-watchlisthideliu' => 'أخف تعديلات المستخدمين المسجلين من قائمة المراقبة',
 'tog-watchlisthideanons' => 'أخف تعديلات المستخدمين المجهولين من قائمة المراقبة',
@@ -512,7 +513,7 @@ $messages = array(
 'tog-ccmeonemails' => 'أرسل لي نسخا من رسائل البريد الإلكتروني التي أرسلها للمستخدمين الآخرين',
 'tog-diffonly' => 'لا تعرض محتوى الصفحة أسفل الفروقات',
 'tog-showhiddencats' => 'أظهر التصنيفات المخفية',
-'tog-noconvertlink' => 'عطل تحويل عناوين الوصلات',
+'tog-noconvertlink' => 'عطل تحويل عناوين الروابط',
 'tog-norollbackdiff' => 'أزل الفرق بعد القيام باسترجاع',
 
 'underline-always' => 'دائما',
@@ -580,10 +581,10 @@ $messages = array(
 
 # Categories related messages
 'pagecategories' => '{{PLURAL:$1|لا تصنيف|تصنيف|تصنيفان|تصنيفات}}',
-'category_header' => 'صÙ\81حات تصنيف "$1"',
+'category_header' => 'اÙ\84صÙ\81حات Ù\81Ù\8a Ø§Ù\84تصنيف "$1"',
 'subcategories' => 'التصنيفات الفرعية',
 'category-media-header' => 'الوسائط في التصنيف "$1"',
-'category-empty' => "''هذا التصنيف لا يحتوي حاليا على صفحات أو وسائط.''",
+'category-empty' => "''هذا التصنيف لا يحتوي حاليا على صفحات و لا وسائط.''",
 'hidden-categories' => '{{PLURAL:$1|لا تصنيف مخفيا|تصنيف مخفي|تصنيفان مخفيان|تصنيفات مخفية}}',
 'hidden-category-category' => 'تصنيفات مخفية',
 'category-subcat-count' => '{{PLURAL:$2|لا تصانيف فرعية في هذا التصنيف|هذا التصنيف فيه التصنيف الفرعي التالي فقط.|هذا التصنيف فيه {{PLURAL:$1||هذا التصنيف الفرعي|هذين التصنيفين الفرعيين|هذه ال$1 تصانيف الفرعية|هذه ال$1 تصنيفا فرعيا|هذه ال$1 تصنيف فرعي}}، من إجمالي $2.}}',
@@ -595,14 +596,15 @@ $messages = array(
 'listingcontinuesabbrev' => 'متابعة',
 'index-category' => 'صفحات مفهرسة',
 'noindex-category' => 'صفحات غير مفهرسة',
-'broken-file-category' => 'صفحات تحتوي وصلات ملفات معطوبة',
+'broken-file-category' => 'صفحات تحتوي روابط ملفات معطوبة',
 
 'about' => 'عن',
 'article' => 'صفحة محتوى',
 'newwindow' => '(تفتح في نافذة جديدة)',
-'cancel' => 'Ø¥Ù\84غاء',
+'cancel' => 'Ø£Ù\84غÙ\90',
 'moredotdotdot' => 'المزيد...',
-'mypage' => 'صفحتي',
+'morenotlisted' => 'يوجد المزيد غير مسرود...',
+'mypage' => 'صفحة',
 'mytalk' => 'نقاش',
 'anontalk' => 'النقاش لعنوان الأيبي هذا',
 'navigation' => 'إبحار',
@@ -611,7 +613,7 @@ $messages = array(
 # Cologne Blue skin
 'qbfind' => 'جد',
 'qbbrowse' => 'تصفح',
-'qbedit' => 'تعدÙ\8aÙ\84',
+'qbedit' => 'حرÙ\91ر',
 'qbpageoptions' => 'هذه الصفحة',
 'qbmyoptions' => 'صفحاتي',
 'qbspecialpages' => 'الصفحات الخاصة',
@@ -624,40 +626,41 @@ $messages = array(
 'vector-action-move' => 'انقل',
 'vector-action-protect' => 'احم',
 'vector-action-undelete' => 'استرجع الحذف',
-'vector-action-unprotect' => 'غير الحماية',
+'vector-action-unprotect' => 'غيّر الحماية',
 'vector-simplesearch-preference' => 'مكّن شريط البحث المبسط (لواجهة فكتور فقط)',
 'vector-view-create' => 'أنشئ',
 'vector-view-edit' => 'تعديل',
 'vector-view-history' => 'اعرض التاريخ',
 'vector-view-view' => 'اقرأ',
-'vector-view-viewsource' => 'اعرض المصدر',
+'vector-view-viewsource' => 'طاÙ\84ع المصدر',
 'actions' => 'أفعال',
-'namespaces' => 'النطاقات',
+'namespaces' => 'فضاءات التسمية',
 'variants' => 'المتغيرات',
 
+'navigation-heading' => 'قائمة التصفح',
 'errorpagetitle' => 'خطأ',
 'returnto' => 'ارجع إلى $1.',
 'tagline' => 'من {{SITENAME}}',
 'help' => 'مساعدة',
 'search' => 'بحث',
-'searchbutton' => 'بحث',
+'searchbutton' => 'ابحث',
 'go' => 'اذهب',
 'searcharticle' => 'اذهب',
-'history' => 'تاريخ الصفحة',
-'history_short' => 'تاريخ',
-'updatedmarker' => 'تÙ\85 ØªØ­Ø¯Ù\8aØ«Ù\87ا منذ زيارتي الأخيرة',
+'history' => 'تأريخ الصفحة',
+'history_short' => 'تأريخ',
+'updatedmarker' => 'Ø­Ù\8fدÙ\90Ù\91Ø«Ù\8eت منذ زيارتي الأخيرة',
 'printableversion' => 'نسخة للطباعة',
-'permalink' => 'وصلة دائمة',
+'permalink' => 'رابط دائم',
 'print' => 'اطبع',
-'view' => 'عرض',
-'edit' => 'تعدÙ\8aÙ\84',
-'create' => 'Ø£Ù\86شئ',
-'editthispage' => 'تعدÙ\8aÙ\84 هذه الصفحة',
+'view' => 'مطالعة',
+'edit' => 'تحرÙ\8aر',
+'create' => 'Ø¥Ù\86شاء',
+'editthispage' => 'حرÙ\90Ù\91ر هذه الصفحة',
 'create-this-page' => 'أنشئ هذه الصفحة',
 'delete' => 'حذف',
 'deletethispage' => 'احذف هذه الصفحة',
 'undelete_short' => 'استرجاع {{PLURAL:$1|تعديل واحد|تعديلين|$1 تعديلات|$1 تعديل|$1 تعديلا}}',
-'viewdeleted_short' => 'عرض {{PLURAL:$1|تعديل محذوف|$1 تعديلات محذوفة}}',
+'viewdeleted_short' => 'استعرض {{PLURAL:$1|تعدÙ\8aÙ\84 Ù\85حذÙ\88Ù\81|$1 ØªØ¹Ø¯Ù\8aÙ\84ات Ù\85حذÙ\88Ù\81Ø©}}',
 'protect' => 'احم',
 'protect_change' => 'غير',
 'protectthispage' => 'احم هذه الصفحة',
@@ -847,7 +850,7 @@ $1',
 'actionthrottled' => 'لا يمكن عمل المزيد من هذا الفعل',
 'actionthrottledtext' => 'كإجراء ضد السبام، أنت ممنوع من إجراء هذا الفعل عدد كبير من المرات في فترة زمنية قصيرة، ولقد تجاوزت هذا الحد.
 من فضلك حاول مرة ثانية خلال عدة دقائق.',
-'protectedpagetext' => 'هذه الصفحة تمت حمايتها لمنع التعديل.',
+'protectedpagetext' => 'هذه الصفحة تمت حمايتها لمنع التعديل أو أية عمليات أخرى.',
 'viewsourcetext' => 'يمكنك رؤية ونسخ مصدر هذه الصفحة:',
 'viewyourtext' => "يمكنك رؤية ونسخ مصدر ''' تعديلاتك ''' في هذه الصفحة:",
 'protectedinterface' => 'توفر هذه الصفحة نص الواجهة للبرنامج على هذا الويكي، وهي محمية لمنع سوء أستخدامها.
@@ -899,7 +902,7 @@ $2',
 'userlogin' => 'دخول / إنشاء حساب',
 'userloginnocreate' => 'تسجيل الدخول',
 'logout' => 'تسجيل الخروج',
-'userlogout' => 'تسجÙ\8aÙ\84 Ø§Ù\84خرÙ\88ج',
+'userlogout' => 'اخرج',
 'notloggedin' => 'غير مسجل الدخول',
 'nologin' => "ليس لديك حساب؟ '''$1'''.",
 'nologinlink' => 'أنشئ حسابا',
@@ -986,6 +989,7 @@ $2',
 # E-mail sending
 'php-mail-error-unknown' => "خطأ غير معروف في وظيفة البريد PHP's mail()",
 'user-mail-no-addy' => 'لقد حاولت إرسال بريد إلكتروني دون عنوان بريد إلكتروني.',
+'user-mail-no-body' => 'محاول ارسال بريد إلكتروني فارغ أو ذو نص قصير.',
 
 # Change password dialog
 'resetpass' => 'تغيير كلمة السر',
@@ -1046,6 +1050,7 @@ $2
 'changeemail-oldemail' => 'عنوان البريد الإلكتروني الحالي:',
 'changeemail-newemail' => 'عنوان البريد الإلكتروني الجديد:',
 'changeemail-none' => '(لا شيء)',
+'changeemail-password' => 'كلمة سر {{SITENAME}} الخاصة بك:',
 'changeemail-submit' => 'غيّر البريد الإلكتروني',
 'changeemail-cancel' => 'إلغاء',
 
@@ -1175,7 +1180,7 @@ $2
 'note' => "'''ملاحظة:'''",
 'previewnote' => "'''تذكر أن هذه مجرد معاينة أولية.'''
 لم تحفظ تغييراتك إلى الآن!",
-'continue-editing' => 'Ø£Ù\83Ù\85Ù\84 التحرير',
+'continue-editing' => 'اذÙ\87ب Ù\84صÙ\86دÙ\88Ù\82 التحرير',
 'previewconflict' => 'هذا العرض يوضح النص الموجود في صندوق التحرير العلوي والذي سيظهر إذا اخترت الحفظ.',
 'session_fail_preview' => "'''عذرا! لم نتمكن من حفظ التعديلات التي قمت بها نتيجة لضياع بيانات هذه الجلسة.
 من فضلك حاول مرة أخرى.
@@ -1235,7 +1240,6 @@ $2
 'template-semiprotected' => '(حماية جزئية)',
 'hiddencategories' => '{{PLURAL:$1|هذه الصفحة غير موجودة في أي تصنايف مخفية|هذه الصفحة موجودة في تصنيف مخفي واحد|هذه الصفحة موجودة في تصنيفين مخفيين|هذه الصفحة موجودة في $1 تصانيف مخفية|هذه الصفحة موجودة في $1 تصنيفا مخفيا|هذه الصفحة موجودة في $1 تصنيف مخفي}}:',
 'edittools' => '<!-- النص هنا سيظهر تحت صندوق التحرير واستمارة رفع الصور. -->',
-'nocreatetitle' => 'تم تحديد إنشاء الصفحات',
 'nocreatetext' => 'قام {{SITENAME}} بتحديد القدرة على إنشاء صفحات جديدة.
 يمكنك العودة وتحرير صفحة موجودة بالفعل، أو [[Special:UserLogin|الدخول أو تسجيل حساب]].',
 'nocreate-loggedin' => 'أنت لا تمتلك الصلاحية لإنشاء صفحات جديدة.',
@@ -1639,9 +1643,9 @@ $1",
 'prefs-emailconfirm-label' => 'تأكيد البريد الإلكتروني:',
 'prefs-textboxsize' => 'حجم نافذة التحرير',
 'youremail' => 'البريد:',
-'username' => 'اسم المستخدم:',
-'uid' => 'رقم المستخدم:',
-'prefs-memberingroups' => 'عضو في {{PLURAL:$1|مجموعة|مجموعة|مجموعتي|مجموعات}}:',
+'username' => '{{GENDER:$1|اسم المستخدم|اسم المستخدمة}}:',
+'uid' => 'رقم {{GENDER:$1|المستخدم|المستخدمة}}:',
+'prefs-memberingroups' => '{{GENDER:$2|عضو|عضوة}} في {{PLURAL:$1|مجموعة|مجموعة|مجموعتي|مجموعات}}:',
 'prefs-registration' => 'وقت التسجيل:',
 'yourrealname' => 'الاسم الحقيقي:',
 'yourlanguage' => 'اللغة:',
@@ -1661,7 +1665,7 @@ $1",
 'prefs-help-realname' => 'الاسم الحقيقي اختياري.
 لو اخترت أن توفره، فسيستخدم في الإشارة إلى عملك.',
 'prefs-help-email' => 'تحديد عنوان البريد الإلكتروني اختياري، ولكنه يلزم لإعادة تعيين كلمة المرور في حال نسيت كلمة المرور الخاصة بك.',
-'prefs-help-email-others' => 'يمكنك أيضا أن {{GENDER:$1|تسمح|تسمحي}} للآخرين الاتصال بك عن طريق وصلة في صفحة المستخدم أو نقاش المستخدم الخاصة بك. لا يكشف بريدك الإلكتروني عندما يراسلك أحد بهذه الطريقة، ولكن إذا راسلت أحداً سيرى بريدك الإلكتروني.',
+'prefs-help-email-others' => 'يمكنك أيضا أن تسمح للآخرين الاتصال بك عن طريق وصلة في صفحة المستخدم أو نقاش المستخدم الخاصة بك. لا يكشف بريدك الإلكتروني عندما يراسلك أحد بهذه الطريقة، ولكن إذا قمت بالرد سيرى بريدك الإلكتروني.',
 'prefs-help-email-required' => 'عنوان البريد الإلكتروني مطلوب.',
 'prefs-info' => 'المعلومات الأساسية',
 'prefs-i18n' => 'الترجمة',
@@ -1726,7 +1730,7 @@ $1",
 'grouppage-bot' => '{{ns:project}}:بوتات',
 'grouppage-sysop' => '{{ns:project}}:إداريون',
 'grouppage-bureaucrat' => '{{ns:project}}:بيروقراطيون',
-'grouppage-suppress' => '{{ns:project}}:أوفرسايت',
+'grouppage-suppress' => '{{ns:project}}:نظار',
 
 # Rights
 'right-read' => 'قراءة الصفحات',
@@ -1790,15 +1794,13 @@ $1",
 'right-sendemail' => 'إرسال رسائل بريد إلكتروني إلى مستخدمين آخرين',
 'right-passwordreset' => 'عرض رسائل إعادة ضبط كلمات السر',
 
+# Special:Log/newusers
+'newuserlogpage' => 'سجل إنشاء المستخدمين',
+'newuserlogpagetext' => 'هذا سجل بعمليات إنشاء المستخدمين.',
+
 # User rights log
 'rightslog' => 'سجل صلاحيات المستخدمين',
 'rightslogtext' => 'هذا سجل بالتغييرات في صلاحيات المستخدمين.',
-'rightslogentry' => 'غير صلاحيات $1 من $2 إلى $3',
-'rightslogentry-autopromote' => 'تمت ترقيته تلقائيا من $2 إلى $3',
-'logentry-rights-rights' => 'غير $1 صلاحيات $3 من $4 إلى $5',
-'logentry-rights-rights-legacy' => 'غير $1 صلاحيات $3',
-'logentry-rights-autopromote' => 'تمت ترقية $1 تلقائياً من  $4 إلى $5',
-'rightsnone' => '(لا شيء)',
 
 # Associated actions - in the sentence "You do not have permission to X"
 'action-read' => 'قراءة هذه الصفحة',
@@ -1845,7 +1847,7 @@ $1",
 'recentchanges-feed-description' => 'تابع أحدث التغييرات للويكي عبر هذه التلقيمة.',
 'recentchanges-label-newpage' => 'أنشأ هذا التعديل صفحة جديدة',
 'recentchanges-label-minor' => 'هذا تعديل طفيف',
-'recentchanges-label-bot' => 'أجرى هذا التعديل بوت',
+'recentchanges-label-bot' => 'أُجْرِيَ هذا التعديل بواسطة بوت',
 'recentchanges-label-unpatrolled' => 'لم يراجع هذا التعديل إلى الآن',
 'rcnote' => "بالأسفل {{PLURAL:$1|لا توجد تغييرات|التغيير الأخير|آخر تغييرين|آخر '''$1''' تغييرات|آخر '''$1''' تغييرا|آخر '''$1''' تغيير}} في {{PLURAL:$2||'''اليوم''' الماضي|'''اليومين''' الماضيين|ال'''$2''' أيام الماضية|ال'''$2''' يوما الماضيا|ال'''$2''' يوم الماضي}}، كما في $5، $4.",
 'rcnotefrom' => "بالأسفل التغييرات منذ '''$2''' (إلى '''$1''' معروضة).",
@@ -1938,7 +1940,7 @@ $1",
 'filename-tooshort' => 'اسم الملف قصير جدا.',
 'filetype-banned' => 'نوع الملف هذا ممنوع.',
 'verification-error' => 'لم يجتز الملف تحقق صحة الملفات.',
-'hookaborted' => 'اÙ\84تعدÙ\8aÙ\84 Ø§Ù\84Ø°Ù\8a ØªØ­Ø§Ù\88Ù\84 Ø£Ù\86 ØªÙ\82Ù\88Ù\85 Ø¨Ù\87 Ø£Ø¬Ù\87ض Ù\85Ù\86 Ù\82بÙ\84 ØªÙ\85دÙ\8aد Ù\87Ù\88Ù\83',
+'hookaborted' => 'اÙ\84تعدÙ\8aÙ\84 Ø§Ù\84Ø°Ù\8a ØªØ­Ø§Ù\88Ù\84 Ø£Ù\86 ØªÙ\82Ù\88Ù\85 Ø¨Ù\87 Ø£Ø¬Ù\87ض Ù\85Ù\86 Ù\82بÙ\84 Ø§Ù\85تداد.',
 'illegal-filename' => 'لا يسمح باسم الملف هذا.',
 'overwrite' => 'لا يسمح بالكتابة فوق ملف موجود.',
 'unknown-error' => 'خطأ غير معروف حدث.',
@@ -2439,7 +2441,7 @@ $1',
 'linksearch-ok' => 'بحث',
 'linksearch-text' => 'Wildcards مثل "*.wikipedia.org" يمكن استخدامها.
 تحتاج على الأقل إلى نطاق ذو مستوى أعلى، كمثال "*.org".<br />
-البروتوكولات المدعومة: <code>$1</code> (لا تقم بإضافة أي من هذه إلى بحثك).',
+{{PLURAL:$2|البروتوكول المدعوم|البروتوكولان المدعومان|البروتوكولات المدعومة}}: <code>$1</code> (تتم إضافة http:// تلقائيا عند عدم تحديد أي بروتوكول).',
 'linksearch-line' => '$1 موصولة من $2',
 'linksearch-error' => 'الكروت الخاصة يمكن أن تظهر فقط في بداية اسم المضيف.',
 
@@ -2458,10 +2460,6 @@ $1',
 'activeusers-hidesysops' => 'أخف الإداريين',
 'activeusers-noresult' => 'لم يعثر على أي مستخدمين',
 
-# Special:Log/newusers
-'newuserlogpage' => 'سجل إنشاء المستخدمين',
-'newuserlogpagetext' => 'هذا سجل بعمليات إنشاء المستخدمين.',
-
 # Special:ListGroupRights
 'listgrouprights' => 'صلاحيات مجموعات المستخدمين',
 'listgrouprights-summary' => 'التالي قائمة بمجموعات المستخدمين المعرفة في هذا الويكي، بصلاحياتهم المصاحبة.
@@ -2488,7 +2486,7 @@ $1',
 'emailuser-title-target' => 'راسل بالبريد الإلكتروني هذا  {{GENDER:$1| المستخدم}}',
 'emailuser-title-notarget' => 'مراسلة المستخدم',
 'emailpage' => 'إرسال رسالة للمستخدم',
-'emailpagetext' => 'يمكنك استخدام الاستمارة بالأسفل لإرسال رسالة بريد إلكتروني إلى هذا المستخدم.
+'emailpagetext' => 'يمكنك استخدام الاستمارة بالأسفل لإرسال رسالة بريد إلكتروني إلى {{GENDER:$1|هذا المستخدم|هذه المستخدمة}}.
 سيظهر عنوان البريد الإلكتروني الذي أدخلته في [[Special:Preferences|تفضيلاتك]] كعنوان المرسل في البريد الإلكتروني، كي يستطيع المتلقي الرد عليك مباشرة.',
 'usermailererror' => 'جسم البريد أرجع خطأ:',
 'defemailsubject' => 'رسالة {{SITENAME}} من المستخدم "$1"',
@@ -2527,8 +2525,8 @@ $1',
 'watchnologin' => 'غير مسجل الدخول',
 'watchnologintext' => 'يجب أن تكون [[Special:UserLogin|مسجل الدخول]] لتعدل قائمة مراقبتك.',
 'addwatch' => 'إضافة إلى قائمة المراقبة',
-'addedwatchtext' => "أضيفت الصفحة  \"[[:\$1]]\" إلى [[Special:Watchlist|قائمة مراقبتك]].
-التغييرات القادمة على هذه الصفحة وصفحة نقاشها سيتم وضعها هناك، وسيتم إظهار اسم الصفحة بخط '''غليظ''' في صفحة [[Special:RecentChanges|أحدث التغييرات]] لتسهيل تحديدها واكتشافها.",
+'addedwatchtext' => 'أضيفت الصفحة  "[[:$1]]" إلى [[Special:Watchlist|قائمة مراقبتك]].
+التغييرات القادمة على هذه الصفحة وصفحة نقاشها سيتم وضعها هناك.',
 'removewatch' => 'إزالة من قائمة المراقبة',
 'removedwatchtext' => 'أزيلت الصفحة "[[:$1]]" من [[Special:Watchlist|قائمة مراقبتك]].',
 'watch' => 'راقب',
@@ -2559,14 +2557,22 @@ $1',
 'enotif_impersonal_salutation' => 'مستخدم {{SITENAME}}',
 'enotif_subject_deleted' => 'الصفحة {{SITENAME}} $1 حذفها {{الجنس: $2 | $2 }}',
 'enotif_subject_created' => 'الصفحة {{SITENAME}}  $1  أنشأها {{الجنس: $2 | $2 }}',
-'enotif_body_intro_deleted' => 'إن صفحة {{SITENAME}} بعنوان $1 {{GENDER:$2|حذفها|حذفتها}} $2 في $PAGEEDITDATE. لمشاهدة النسخة الحالية راجع $3.',
+'enotif_subject_moved' => 'صفحة {{SITENAME}} $1 {{GENDER:$2|نقلها|نقلتها}} $2',
+'enotif_subject_restored' => 'صفحة {{SITENAME}} $1 {{GENDER:$2|استرجعها|استرجعتها}} $2',
+'enotif_subject_changed' => 'صفحة {{SITENAME}} $1 {{GENDER:$2|عدلها|عدلتها}} $2',
+'enotif_body_intro_deleted' => 'صفحة {{SITENAME}} $1 {{GENDER:$2|حذفها|حذفتها}} $2 في $PAGEEDITDATE.راجع $3.',
+'enotif_body_intro_created' => 'صفحة {{SITENAME}} $1 {{GENDER:$2|أنشأها|أنشأتها}} $2 في $PAGEEDITDATE. لمشاهدة النسخة الحالية راجع $3.',
+'enotif_body_intro_moved' => 'صفحة {{SITENAME}} $1 {{GENDER:$2|نقلها|نقلتها}} $2 في $PAGEEDITDATE. لمشاهدة النسخة الحالية راجع $3.',
+'enotif_body_intro_restored' => 'صفحة {{SITENAME}} $1 {{GENDER:$2|استرجعها|استرجعتها}} $2 في $PAGEEDITDATE. لمشاهدة النسخة الحالية راجع $3.',
+'enotif_body_intro_changed' => 'صفحة {{SITENAME}} $1 {{GENDER:$2|عدلها|عدلتها}} $2 في $PAGEEDITDATE. لمشاهدة النسخة الحالية راجع $3.',
 'enotif_lastvisited' => 'انظر $1 لكل التغييرات منذ زيارتك الأخيرة.',
 'enotif_lastdiff' => 'انظر $1 لرؤية هذا التغيير.',
 'enotif_anon_editor' => 'مستخدم مجهول $1',
 'enotif_body' => 'عزيزي $WATCHINGUSERNAME
-صفحة  $PAGETITLE قد  $CHANGEDORCREATED في $PAGEEDITDATE بواسطة $PAGEEDITOR, انظر $PAGETITLE_URL للنسخة الحالية
-ملخص التعديل: $PAGESUMMARY $PAGEMINOREDIT
 
+$PAGEINTRO $NEWPAGE
+
+ملخص التعديل: $PAGESUMMARY $PAGEMINOREDIT
 
 الاتصال بالمحرر:
 البريد: $PAGEEDITOR_EMAIL
@@ -2575,7 +2581,7 @@ $1',
 لن يكون هناك إخطارات أخرى في حالة حدوث مزيد من التغييرات إلا إذا قمت بزيارة تلك الصفحة.
 يمكنك أيضاً إزالة العلامات عن جميع الصفحات في قائمة مراقبتك.
 
-                       نظام {{SITENAME}} للإعلام بالبريد الإلكتروني
+                   نظام {{SITENAME}} للإعلام بالبريد الإلكتروني
 
 --
 لتغيير إعدادات الإعلام بالبريد الإلكتروني الخاص بك، قم بزيارة
@@ -2587,8 +2593,10 @@ $1',
 لحذف الصفحة من قائمة مراقبتك، قم بزيارة
 $UNWATCHURL
 
-التغذية المرتدة، والحصول على مساعدة إضافية:
+للمقترحات والحصول على مساعدة إضافية:
 {{canonicalurl: {{MediaWiki:Helppage}}}}',
+'created' => 'أنشئت',
+'changed' => 'غيرت',
 
 # Delete
 'deletepage' => 'حذف الصفحة',
@@ -2662,6 +2670,8 @@ $UNWATCHURL
 'prot_1movedto2' => 'نُقلت [[$1]] إلى [[$2]]',
 'protect-badnamespace-title' => 'نطاق لا يحمى',
 'protect-badnamespace-text' => 'صفحات هذا النطاق لا يمكن حمايتها',
+'protect-norestrictiontypes-text' => 'لا يمكن حماية هذه الصفحة لعدم توافر أنواع المحددات المطلوبة.',
+'protect-norestrictiontypes-title' => 'صفحة غير قابلة للحماية',
 'protect-legend' => 'تأكيد الحماية',
 'protectcomment' => 'السبب:',
 'protectexpiry' => 'تنتهي في:',
@@ -2678,9 +2688,9 @@ $UNWATCHURL
 'protect-cascadeon' => 'هذه الصفحة محمية لكونها مضمنة في {{PLURAL:$1|الصفحة|الصفحات}} التالية، والتي بها خيار حماية الصفحات المدمجة فعال.
 يمكنك تغيير مستوى حماية هذه الصفحة بدون التأثير على حماية الصفحات المدمجة الأخرى.',
 'protect-default' => 'اسمح لكل المستخدمين',
-'protect-fallback' => 'يتطلب السماح "$1"',
-'protect-level-autoconfirmed' => 'اÙ\85Ù\86ع Ø§Ù\84Ù\85ستخدÙ\85Ù\8aÙ\86 Ø§Ù\84جدد Ù\88غÙ\8aر Ø§Ù\84Ù\85سجÙ\84Ù\8aÙ\86',
-'protect-level-sysop' => 'اÙ\84إدارÙ\8aÙ\88ن فقط',
+'protect-fallback' => 'السماح فقط للمستخدمين ذوي الصلاحية "$1"',
+'protect-level-autoconfirmed' => 'اÙ\84سÙ\85اح Ù\81Ù\82Ø· Ù\84Ù\84Ù\85ستخدÙ\85Ù\8aÙ\86 Ø§Ù\84Ù\85ؤÙ\83دÙ\8aÙ\86 ØªÙ\84Ù\82ائÙ\8aا',
+'protect-level-sysop' => 'اÙ\84سÙ\85اح Ù\84Ù\84إدارÙ\8aÙ\8aن فقط',
 'protect-summary-cascade' => 'مضمنة',
 'protect-expiring' => 'تنتهي في $1 (UTC)',
 'protect-expiring-local' => 'ينتهي $1',
@@ -2776,11 +2786,11 @@ $1',
 'invert' => 'اعكس الاختيار',
 'tooltip-invert' => 'علم على هذا الصندوق لإخفاء التغييرات للصفحات في النطاق المختار (والنطاق المصاحب لو معلم عليها)',
 'namespace_association' => 'النطاق المقترن',
-'tooltip-namespace_association' => 'علم على هذا الصندوق لتضمين نطاق النقاش أو الموضوع لالمصاحب للنطاق المختار',
+'tooltip-namespace_association' => 'علم على هذا الصندوق لتضمين نطاق النقاش أو الموضوع المصاحب للنطاق المختار',
 'blanknamespace' => '(رئيسي)',
 
 # Contributions
-'contributions' => 'مساهمات المستخدم',
+'contributions' => 'مساهمات {{GENDER:$1|المستخدم|المستخدمة}}',
 'contributions-title' => 'مساهمات {{GENDER:$1|المستخدم|المستخدمة}} $1',
 'mycontris' => 'مساهماتي',
 'contribsub2' => 'ل$1 ($2)',
@@ -2823,7 +2833,7 @@ $1',
 'whatlinkshere-hideredirs' => '$1 التحويلات',
 'whatlinkshere-hidetrans' => '$1 التضمينات',
 'whatlinkshere-hidelinks' => '$1 الوصلات',
-'whatlinkshere-hideimages' => '$1 Ù\88صÙ\84Ø© ØµÙ\88رة',
+'whatlinkshere-hideimages' => '$1 Ù\88صÙ\84ات Ø§Ù\84Ù\85Ù\84Ù\81ات',
 'whatlinkshere-filters' => 'مرشحات',
 
 # Block/unblock
@@ -2987,7 +2997,7 @@ $1',
 إذا اخترت أن تقوم بالتحديث يدوياً، فتأكد من عدم وجود تحويلات [[Special:DoubleRedirects|مزدوجة]] أو [[Special:BrokenRedirects|مكسورة]] وقم بتصحيحها.
 أنت المسؤول عن التأكد من أن الوصلات تصل إلى الصفحات التي يفترض أن تصل إليها.
 
-لاحظ أنه '''لن يتم''' نقل الصفحة إذا وجدت صفحة في العنوان الجديد، إلا إذا كانت فارغة أو صفحة تحويل، ولا تاريخ لها.
+لاحظ أنه '''لن يتم''' نقل الصفحة إذا وجدت صفحة في العنوان الجديد، إلا إذا كانت صفحة تحويل، ولا تاريخ لها.
 هذا يعني أنك تستطيع استرجاع الصفحة إلى مكانها لو قمت بخطأ، وأنك لا يمكنك نسخ هذه الصفحة فوق صفحة موجودة.
 
 '''تحذير!'''
@@ -3328,7 +3338,7 @@ $1',
 
 # Info page
 'pageinfo-title' => 'المعلومات عن «$1»',
-'pageinfo-not-current' => 'لا يمكن إظهار المعلومات إلا عن المراجعة الأخيرة للصفحة',
+'pageinfo-not-current' => 'عذرا، لا يمكن عرض تلك المعلومات للنسخ القديمة.',
 'pageinfo-header-basic' => 'المعلومات الأساسية',
 'pageinfo-header-edits' => 'التعديلات',
 'pageinfo-header-restrictions' => 'حماية الصفحة',
@@ -3357,6 +3367,7 @@ $1',
 'pageinfo-magic-words' => '{{PLURAL:$1|لا كلمات سحرية|الكلمة|الكلمات}} السحرية ($1)',
 'pageinfo-hidden-categories' => '{{PLURAL:$1|لا تصنيفات مخفية|التصنيف المخفي|التصنيفان المخفيان|التصنيفات المخفية ($1)}}',
 'pageinfo-templates' => '{{PLURAL:$1|لا قوالب مضمنة|القالب المضمن|القالبان المضمنان|القوالب المضمنة ($1)}}',
+'pageinfo-transclusions' => '{{PLURAL:$1||صفحة واحدة|صفحتين|$1 صفحات|$1 صفحة}} مضمنة في ($1)',
 'pageinfo-toolboxlink' => 'معلومات عن هذه الصفحة',
 'pageinfo-redirectsto' => 'تحويلة إلى',
 'pageinfo-redirectsto-info' => 'معلومات',
@@ -3365,6 +3376,10 @@ $1',
 'pageinfo-protect-cascading' => 'مصدر توريث  الحماية للصفحات المدمجة',
 'pageinfo-protect-cascading-yes' => 'نعم',
 'pageinfo-protect-cascading-from' => 'حماية الصفحات المدمجة موروثة من',
+'pageinfo-category-info' => 'معلومات التصنيف',
+'pageinfo-category-pages' => 'عدد الصفحات',
+'pageinfo-category-subcats' => 'عدد التصنيفات الفرعية',
+'pageinfo-category-files' => 'عدد الملفات',
 
 # Skin names
 'skinname-standard' => 'كلاسيك',
@@ -3420,6 +3435,7 @@ $1',
 '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' => 'دقة كاملة',
 'show-big-image-preview' => 'حجم هذه المعاينة: $1.',
 'show-big-image-other' => '{{PLURAL:$2||البعد الآخر|البعدان الآخران|الأبعاد الأخرى}}: $1.',
@@ -3454,6 +3470,8 @@ $1',
 'minutes' => '{{PLURAL:$1||دقيقة واحدة|دقيقتين|$1 دقائق|$1 دقيقة}}',
 'hours' => '{{PLURAL:$1||ساعة واحدة|ساعتين|$1 ساعات|$1 ساعة}}',
 'days' => '{{PLURAL:$1||يوم واحد|يومين|$1 أيام|$1 يومًا|$1 يوم}}',
+'months' => '{{PLURAL:$1||شهر واحد|شهرين|$1 شهور|$1 شهرا|$1 شهر}}',
+'years' => '{{PLURAL:$1||سنة واحدة|سنتين|$1 سنين|$1 سنة}}',
 'ago' => 'قبل $1',
 'just-now' => 'الآن فقط',
 
@@ -4188,7 +4206,7 @@ $5
 'version-license' => 'الرخصة',
 'version-poweredby-credits' => "تدار هذه الويكي ب'''[//www.mediawiki.org/ ميدياويكي]''', حقوق النشر © 2001-$1 $2.",
 'version-poweredby-others' => 'آخرون',
-'version-credits-summary' => 'نود أن نعرف بالأشخاص التالية أسماؤهم لمساهمتهم في [[خاص:نسخة|ميدياويكي]].',
+'version-credits-summary' => 'نود أن نعرف بالأشخاص التالية أسماؤهم لمساهمتهم في [[Special:Version|ميدياويكي]].',
 'version-license-info' => "ميدياويكي برنامج حر، يحق لك توزيعه و/أو تعديله وفقاً لبنود رخصة غنو العمومية كما نشرتها مؤسسة البرمجيات الحرة، الإصدار الثاني أو (وفقا لاختيارك أنت) أي إصدار لاحق.
 
 هذا البرنامج يوزع على أمل أن يكون مفيداً، ولكن '''دون أية ضمانات'''، بما في ذلك ضمانات '''التسويق''' أو '''الملاءمة لغرض معين'''. انظر رخصة غنو العمومية لمزيد من التفاصيل.
@@ -4330,11 +4348,14 @@ $5
 'logentry-move-move_redir-noredirect' => 'نقل $1 صفحة $3 إلى التحويلة $4 دون ترك تحويلة',
 'logentry-patrol-patrol' => '$1 مراجعة معلمة $4 للصفحة $3 تم معاينتها',
 'logentry-patrol-patrol-auto' => '$1 مراجعة معلمة تلقائيا $4 للصفحة $3 تم مراجعتها',
-'logentry-newusers-newusers' => 'Ø£Ù\86شأ $1 Ø­Ø³Ø§Ø¨ Ù\85ستخدÙ\85',
-'logentry-newusers-create' => 'Ø£Ù\86شأ $1 Ø­Ø³Ø§Ø¨ Ù\85ستخدÙ\85',
-'logentry-newusers-create2' => 'Ø£Ù\86شأ $1 Ø­Ø³Ø§Ø¨ Ø§Ù\84Ù\85ستخدÙ\85 $3',
+'logentry-newusers-newusers' => 'تÙ\85 Ø¥Ù\86شاء Ø§Ù\84حساب $1',
+'logentry-newusers-create' => 'تÙ\85 Ø¥Ù\86شاء Ø§Ù\84حساب $1',
+'logentry-newusers-create2' => 'Ø£Ù\86شأ $1 Ø§Ù\84حساب $3',
 'logentry-newusers-autocreate' => 'أنشئ حساب $1 تلقائياً',
-'newuserlog-byemail' => 'كلمة السر تم إرسالها بواسطة البريد الإلكتروني',
+'logentry-rights-rights' => 'غير $1 صلاحيات $3 من $4 إلى $5',
+'logentry-rights-rights-legacy' => 'غير $1 صلاحيات $3',
+'logentry-rights-autopromote' => 'تمت ترقية $1 تلقائياً من  $4 إلى $5',
+'rightsnone' => '(لا شيء)',
 
 # Feedback
 'feedback-bugornote' => 'إن كنت مستعدا لشرح  مشكلة تقنية بالتفصيل، رجاءا [$1 قدم تقريرا بالخلل].
@@ -4408,6 +4429,4 @@ $5
 'duration-centuries' => '{{PLURAL: $1||قرن واحد|قرنان|$1 قرون|$1 قرنًا|$1 قرن}}',
 'duration-millennia' => '{{PLURAL: $1||ألفية واحدة|ألفيتان|$1 ألفيات|$1 ألفية}}',
 
-# Unknown messages
-'svg-long-error' => 'ملف SVG غير صالح: $1',
 );
index 9e73891..48901d5 100644 (file)
@@ -44,49 +44,50 @@ $namespaceAliases = array(
 );
 
 $specialPageAliases = array(
-       'Activeusers'               => array( 'ܡܦܠÜ\9aÜ¢Ì\88Ü\90\99ܪÌ\84ܝܙܐ' ),
-       'Allmessages'               => array( 'ܟܠ_ܐܓܪ̈ܬܐ' ),
-       'Allpages'                  => array( 'ܟܠ_ܦܐܬܬ̈ܐ' ),
-       'Ancientpages'              => array( 'ܦܐܬܬ̈ܐ_ܥܬܝܩܬ̈ܐ' ),
+       'Activeusers'               => array( 'ܡܦܠÜ\9aÜ¢Ì\88Ü\90\99ܪÌ\88ܝܙܐ' ),
+       'Allmessages'               => array( 'ܟܠܗܝܢ_ܐܓܪ̈ܬܐ' ),
+       'Allpages'                  => array( 'ܟܠܗܝܢ_ܦܐܬܬ̈ܐ' ),
+       'Ancientpages'              => array( 'ܦܐܬܬ̈ܐ_ܥܬܝܩ̈ܬܐ' ),
        'Badtitle'                  => array( 'ܟܘܢܝܐ_ܠܐ_ܛܒܐ' ),
        'Blankpage'                 => array( 'ܦܐܬܐ_ܣܦܝܩܬܐ' ),
        'BrokenRedirects'           => array( 'ܨܘܝܒ̈ܐ_ܬܒܝܪ̈ܐ' ),
        'Categories'                => array( 'ܣܕܪ̈ܐ' ),
        'ChangeEmail'               => array( 'ܫܚܠܦ_ܒܝܠܕܪܐ_ܐܠܩܛܪܘܢܝܐ' ),
-       'ComparePages'              => array( 'ܦÜ\9aÜ\98Ü¡_Ü\92Ü\9dܢܬ_ܦÜ\90ܬܬÌ\88Ü\90' ),
+       'ComparePages'              => array( 'ܦܚܡ_ܒܝܢܬ_ܦܐܬܬ̈ܐ' ),
        'Confirmemail'              => array( 'ܫܪܪ_ܒܝܠܕܪܐ_ܐܠܩܛܪܘܢܝܐ' ),
-       'Contributions'             => array( 'ܫܘܬܦܘܝܬ̈ܐ' ),
+       'Contributions'             => array( 'ܫܘܬܦܘ̈ܬܐ' ),
        'CreateAccount'             => array( 'ܒܪܝ_ܚܘܫܒܢܐ' ),
        'Deadendpages'              => array( 'ܦܐܬܬ̈ܐ_ܥܡ_ܚܪܬܐ_ܡܝܬܬܐ' ),
-       'DeletedContributions'      => array( 'ܫܘܬܦܘܝܬ̈ܐ_ܫܝܦܬ̈ܐ' ),
+       'DeletedContributions'      => array( 'ܫܘܬܦܘ̈ܬܐ_ܫܝ̈ܦܬܐ' ),
        'Disambiguations'           => array( 'ܬܘܚܡ̈ܐ_ܐܚܪ̈ܢܐ' ),
-       'DoubleRedirects'           => array( 'ܨܘܝܒ̈ܐ_ܥܦܝܦ̈ܐ' ),
+       'DoubleRedirects'           => array( 'ܨܘܝܒ̈ܐ_ܥܦܝ̈ܦܐ' ),
        'EditWatchlist'             => array( 'ܫܚܠܦ_ܪ̈ܗܝܬܐ' ),
        'Emailuser'                 => array( 'ܫܕܪ_ܒܝܠܕܪܐ_ܐܠܩܛܪܘܢܝܐ_ܠܡܦܠܚܢܐ' ),
-       'Fewestrevisions'           => array( 'ܬܢܝܬ̈ܐ_ܒܨܝܪ_ܡܢ_ܟܠ' ),
+       'Fewestrevisions'           => array( 'ܬܢܝ̈ܬܐ_ܒܨܝܪ_ܡܢ_ܟܠ' ),
        'Filepath'                  => array( 'ܫܒܝܠܐ_ܕܦܐܬܐ' ),
        'Log'                       => array( 'ܣܓܠܐ', 'ܣܓܠ̈ܐ' ),
-       'Lonelypages'               => array( 'ܦܐܬܬ̈ܐ_ܝܬܡܬ̈ܐ' ),
+       'Lonelypages'               => array( 'ܦܐܬܬ̈ܐ_ܝܬܡ̈ܬܐ' ),
        'Longpages'                 => array( 'ܦܐܬܬ̈ܐ_ܐܪ̈ܝܟܬܐ' ),
        'Mostlinkedcategories'      => array( 'ܣܕܪ̈ܐ_ܐܣܝܪ̈ܐ_ܝܬܝܪ_ܡܢ_ܟܠ', 'ܣܕܪ̈ܐ_ܦܠܝܚ̈ܐ_ܝܬܝܪ_ܡܢ_ܟܠ' ),
        'Mostlinkedtemplates'       => array( 'ܩܠܒ̈ܐ_ܐܣܝܪ̈ܐ_ܝܬܝܪ_ܡܢ_ܟܠ', 'ܩܠܒ̈ܐ_ܦܠܝܚ̈ܐ_ܝܬܝܪ_ܡܢ_ܟܠ' ),
-       'Mostrevisions'             => array( 'ܬܢܝܬ̈ܐ_ܝܬܝܪ_ܡܢ_ܟܠ' ),
+       'Mostrevisions'             => array( 'ܬܢܝ̈ܬܐ_ܝܬܝܪ_ܡܢ_ܟܠ' ),
        'Movepage'                  => array( 'ܫܢܝ_ܦܐܬܐ' ),
-       'Mycontributions'           => array( 'ܫܘܬܦܘܝܬ̈ܝ' ),
+       'Mycontributions'           => array( 'ܫܘܬܦܘ̈ܬܝ' ),
        'Mypage'                    => array( 'ܦܐܬܐ_ܕܝܠܝ' ),
        'Mytalk'                    => array( 'ܡܡܠܠܐ_ܕܝܠܝ' ),
-       'Myuploads'                 => array( 'ܐܣܩܬ̈ܐ_ܕܝܠܝ' ),
+       'Myuploads'                 => array( 'ܐܣܩ̈ܬܐ_ܕܝܠܝ' ),
        'Newimages'                 => array( 'ܠܦܦ̈ܐ_ܚܕ̈ܬܐ', 'ܨܘܪ̈ܬܐ_ܚܕ̈ܬܬܐ' ),
        'Newpages'                  => array( 'ܦܐܬܬ̈ܐ_ܚܕ̈ܬܬܐ' ),
        'PermanentLink'             => array( 'ܐܣܘܪܐ_ܦܝܘܫܐ' ),
        'Popularpages'              => array( 'ܦܐܬܬ̈ܐ_ܡܫܡܗ̈ܐ' ),
-       'Preferences'               => array( 'ܨܒܝܢܝܘܬ̈ܐ' ),
+       'Preferences'               => array( 'ܨܒܝܢܝܘ̈ܬܐ' ),
        'Protectedpages'            => array( 'ܦܐܬܬ̈ܐ_ܢܛܝܪ̈ܬܐ' ),
        'Protectedtitles'           => array( 'ܟܘܢܝ̈ܐ_ܢܛܝܪ̈ܐ' ),
        'Recentchanges'             => array( 'ܫܘܚܠܦ̈ܐ_ܚܕ̈ܬܐ' ),
        'Search'                    => array( 'ܒܨܝܐ' ),
        'Shortpages'                => array( 'ܦܐܬܬ̈ܐ_ܟܪ̈ܝܬܐ' ),
        'Specialpages'              => array( 'ܦܐܬܬ̈ܐ_ܕ̈ܝܠܢܝܬܐ' ),
+       'Statistics'                => array( 'ܚܒܝܫܘܬ_ܡܢܝܢܐ' ),
        'Uncategorizedcategories'   => array( 'ܣܕܪ̈ܐ_ܠܐ_ܣܕܝܪ̈ܐ' ),
        'Uncategorizedimages'       => array( 'ܠܦܦ̈ܐ_ܠܐ_ܣܕܝܪ̈ܐ', 'ܨܘܪ̈ܬܐ_ܠܐ_ܣܕܝܪ̈ܬܐ' ),
        'Uncategorizedpages'        => array( 'ܦܐܬܬ̈ܐ_ܠܐ_ܣܕܝܪ̈ܬܐ' ),
@@ -94,15 +95,15 @@ $specialPageAliases = array(
        'Unusedcategories'          => array( 'ܣܕܪ̈ܐ_ܠܐ_ܦܠܝܚ̈ܐ' ),
        'Unusedimages'              => array( 'ܠܦܦ̈ܐ_ܠܐ_ܦܠܝܚ̈ܐ', 'ܨܘܪ̈ܬܐ_ܠܐ_ܦܠܝܚܬ̈ܐ' ),
        'Unusedtemplates'           => array( 'ܩܠܒ̈ܐ_ܠܐ_ܦܠܝܚ̈ܐ' ),
-       'Unwatchedpages'            => array( 'ܦܐܬܬ̈ܐ_ܠܐ_ܣܢܝܩܬ̈ܐ' ),
+       'Unwatchedpages'            => array( 'ܦܐܬܬ̈ܐ_ܠܐ_ܣܢܝܩ̈ܬܐ' ),
        'Upload'                    => array( 'ܐܣܩ' ),
        'Userlogin'                 => array( 'ܥܠܠܐ_ܕܡܦܠܚܢܐ' ),
        'Userlogout'                => array( 'ܦܠܛܐ_ܕܡܦܠܚܢܐ' ),
-       'Userrights'                => array( 'Ü\99Ü\95Ì\88Ü©Ü\90\95ܡܦܠÜ\9aÜ¢Ü\90', 'Ü¥Ü\92Ü\98Ü\95_Ü¡Ü\95Ü\92ܪܢÜ\90\95Ü\9bÜ\9fÜ£Ü\90', 'Ü¥Ü\92Ü\98ܕ_ܒܘܛ' ),
-       'Version'                   => array( 'ܨÜ\9aÜ\9aܐ' ),
+       'Userrights'                => array( 'Ü\99Ü\95Ì\88Ü©Ü\90\95ܡܦܠÜ\9aÜ¢Ü\90', 'Ü¥Ü\92Ü\95_Ü¡Ü\95Ü\92ܪܢÜ\90\95Ü\9bÜ\9fÜ£Ü\90', 'Ü¥Ü\92ܕ_ܒܘܛ' ),
+       'Version'                   => array( 'ܡܦܩܬܐ' ),
        'Wantedcategories'          => array( 'ܣܕܪ̈ܐ_ܣܢܝܩ̈ܐ' ),
        'Wantedfiles'               => array( 'ܠܦܦ̈ܐ_ܣܢܝܩ̈ܐ' ),
-       'Wantedpages'               => array( 'ܦܐܬܬ̈ܐ_ܣܢܝܩܬ̈ܐ', 'ܐܣܘܪ̈ܐ_ܬܒܝܪ̈ܐ' ),
+       'Wantedpages'               => array( 'ܦܐܬܬ̈ܐ_ܣܢܝܩ̈ܬܐ', 'ܐܣܘܪ̈ܐ_ܬܒܝܪ̈ܐ' ),
        'Wantedtemplates'           => array( 'ܩܠܒ̈ܐ_ܣܢܝܩ̈ܐ' ),
        'Watchlist'                 => array( 'ܪ̈ܗܝܬܐ' ),
        'Whatlinkshere'             => array( 'ܡܐ_ܐܣܪ_ܠܗܪܟܐ' ),
@@ -140,6 +141,7 @@ $messages = array(
 'tog-underline' => 'ܪܫܘܡ ܣܪܛܐ ܬܚܝܬ ܐܣܪܐ:',
 'tog-justify' => 'ܫܘܐ ܦܬܓܡ̈ܐ',
 'tog-hideminor' => 'ܛܫܝ ܫܘܚܠܦ̈ܐ ܙܥܘܪ̈ܐ ܒܫܘܚܠܦ̈ܐ ܚܕ̈ܬܐ',
+'tog-extendwatchlist' => 'ܐܪܘܚ ܪ̈ܗܝܬܐ ܠܚܘܘܝܐ ܕܟܠܗܘܢ ܫܘܚܠܦ̈ܐ، ܠܐ ܚܕ̈ܬܐ ܒܠܚܘܕ',
 'tog-editondblclick' => 'ܫܚܠܦ ܦܐܬ̈ܐ ܬܪ ܢܩܪܐ ܙܘܓܢܝܐ (ܣܢܝܩ ܠ JavaScript)',
 'tog-editsection' => 'ܡܫܟܚ ܫܘܚܠܦܐ ܕܦܘܣܩ̈ܐ ܒܐܘܪܚܐ ܕܐܝܨܘܪ̈ܐ  [ܫܚܠܦ]',
 'tog-rememberpassword' => 'ܕܟܘܪ ܥܠܠܬܝ ܥܠ ܡܦܐܬܢܐ ܗܢܐ (ܠܡܬܚܐ ܥܠܝܐ ܕ $1 {{PLURAL:$1|ܝܘܡܐ|ܝܘܡܬ̈ܐ}})',
@@ -252,7 +254,7 @@ $messages = array(
 'vector-action-addsection' => 'ܐܘܣܦ ܡܠܘܐܐ',
 'vector-action-delete' => 'ܫܘܦ',
 'vector-action-move' => 'ܫܢܝ',
-'vector-action-protect' => 'Ü¢Ü\9bÜ\98ܪ',
+'vector-action-protect' => 'Ü\9bܪ',
 'vector-action-undelete' => 'ܠܐ ܫܘܦ',
 'vector-action-unprotect' => 'ܫܚܠܦ ܢܛܝܪܘܬܐ',
 'vector-view-create' => 'ܒܪܝ',
@@ -288,9 +290,9 @@ $messages = array(
 'deletethispage' => 'ܫܘܦ ܦܐܬܐ ܗܕܐ',
 'undelete_short' => 'ܠܐ ܫܘܦ {{PLURAL:$1|ܚܕ ܫܘܚܠܦܐ|$1 ܫܘܚܠܦ̈ܐ}}',
 'viewdeleted_short' => 'ܚܙܝ {{PLURAL:$1|ܚܕ ܫܘܚܠܦܐ ܫܝܦܐ|$1 ܫܘܚܠܦ̈ܐ ܫܝܦ̈ܐ}}',
-'protect' => 'Ü¢Ü\9bÜ\98ܪ',
+'protect' => 'Ü\9bܪ',
 'protect_change' => 'ܫܚܠܦ',
-'protectthispage' => 'Ü¢Ü\9bÜ\98ܪ ܗܕܐ ܦܐܬܐ',
+'protectthispage' => 'Ü\9bܪ Ü ܗܕܐ ܦܐܬܐ',
 'unprotect' => 'ܫܚܠܦ ܢܛܝܪܘܬܐ',
 'unprotectthispage' => 'ܫܚܠܦ ܢܛܝܪܘܬܐ ܕܗܕܐ ܦܐܬܐ',
 'newpage' => 'ܦܐܬܐ ܚܕܬܐ',
@@ -370,12 +372,16 @@ $1',
 'toc' => 'ܚܒܝܫܬ̈ܐ',
 'showtoc' => 'ܚܘܝ',
 'hidetoc' => 'ܛܫܝ',
+'collapsible-collapse' => 'ܐܟܪܟ',
+'collapsible-expand' => 'ܪܘܚ',
 'viewdeleted' => 'ܚܙܝ $1؟',
 'restorelink' => '{{PLURAL:$1|ܚܕ ܫܘܚܠܦܐ ܫܝܦܐ|$1 ܫܘܚܠܦ̈ܐ ܫܝܦ̈ܐ}}',
 'site-atom-feed' => '$1 ܛܥܝܡܘܬܐ ܕܐܛܘܡ',
 'page-atom-feed' => '"$1" ܛܥܝܡܘܬܐ ܕܐܛܘܡ',
 'feed-atom' => 'ܐܛܘܡ',
 'red-link-title' => '$1 (ܦܐܬܐ ܗܕܐ ܠܝܬ)',
+'sort-descending' => 'ܣܘܕܪܐ ܡܚܬܐܝܬ',
+'sort-ascending' => 'ܣܘܕܪܐ ܡܣܩܐܝܬ',
 
 # Short words for each namespace, by default used in the namespace tab in monobook
 'nstab-main' => 'ܦܐܬܐ',
@@ -416,6 +422,7 @@ $1',
 ܠܡܘܣܦ ܐܘ ܫܘܚܠܦ ܬܘܪ̈ܓܡܐ ܕܟܠܗܘܢ ܘܝܩܝ، ܐܦܠܚ [//translatewiki.net/ translatewiki.net]، ܬܪܡܝܬܐ ܕܬܘܪܓܡܐ ܕܡܝܕܝܐܘܝܩܝ.",
 'sqlhidden' => '(ܒܘܬܬܐ SQL ܛܫܝܐ)',
 'namespaceprotected' => "ܠܝܬ ܠܟ ܦܣܣܐ ܠܫܚܠܦܬܐ ܕܦܐܬܬ̈ܐ ܒܚܩܠܐ ܕ'''$1'''.",
+'exception-nologin' => 'ܠܝܬܝܟ ܥܠܝܠܐ',
 
 # Login and logout pages
 'logouttext' => "'''ܗܫܐ ܦܠܛܠܟ ܡܢ ܚܘܫܒܢܟ.'''
@@ -456,6 +463,7 @@ $1',
 ܒܒܥܘ ܡܢܟ ܕܬܢܣܐ ܙܒܢ ܐܚܪܝܢ.',
 'wrongpasswordempty' => 'ܡܠܬܐ ܕܥܠܠܐ ܕܐܥܠܬ ܣܦܝܩܬܐ ܐܝܬܝܗ.
 ܒܒܥܘ ܡܢܟ ܕܬܢܣܐ ܙܒܢ ܐܚܪܝܢ.',
+'passwordtooshort' => 'ܡܠܬܐ ܕܥܠܠܐ ܘܠܐ ܕܬܗܘܐ ܕܠܐ ܒܨܪ ܡܢ{{PLURAL:$1|ܐܬܘܬܐ ܚܕ|$1 ܐܬܘ̈ܬܐ}}.',
 'mailmypassword' => 'ܫܕܪ ܠܝ ܡܠܬܐ ܚܕܬܐ ܕܥܠܠܐ',
 'passwordremindertitle' => 'ܡܠܬܐ ܕܥܠܠܐ ܙܒܢܢܝܬܐ ܚܕܬܐ ܠ{{SITENAME}}',
 'noemail' => 'ܠܝܬ ܒܝܠܕܪܐ ܐܠܩܛܪܘܢܝܐ ܠܡܦܠܚܢܐ "$1".',
@@ -472,6 +480,7 @@ $1',
 'oldpassword' => 'ܡܠܬܐ ܕܥܠܠܐ ܥܬܝܩܬܐ:',
 'newpassword' => 'ܡܠܬܐ ܕܥܠܠܐ ܚܕܬܐ:',
 'retypenew' => 'ܟܬܘܒ ܡܠܬܐ ܕܥܠܠܐ ܙܒܢܬܐ ܐܚܪܬܐ:',
+'resetpass_submit' => 'ܛܝܒ ܡܠܬܐ ܕܥܠܠܐ ܘܥܘܠ',
 'resetpass-submit-loggedin' => 'ܫܚܠܦ ܡܠܬܐ ܕܥܠܠܐ',
 'resetpass-submit-cancel' => 'ܒܛܘܠ',
 'resetpass-temp-password' => 'ܡܠܬܐ ܕܥܠܠܐ ܙܒܢܢܝܬܐ:',
@@ -479,7 +488,10 @@ $1',
 # Special:PasswordReset
 'passwordreset' => 'ܣܘܡ ܡܠܬܐ ܕܥܠܠܐ ܙܒܢ ܐܚܪܝܢ',
 'passwordreset-legend' => 'ܣܘܡ ܡܠܬܐ ܕܥܠܠܐ ܙܒܢ ܐܚܪܝܢ',
+'passwordreset-pretext' => '{{PLURAL:$1||ܐܥܠ ܚܕ ܡܢ ܡܢܘܬ̈ܐ ܕܝܕ̈ܥܬܐ ܠܬܬܚܬ}}',
 'passwordreset-username' => 'ܫܡܐ ܕܡܦܠܚܢܐ:',
+'passwordreset-domain' => 'ܪܘܚܬܐ:',
+'passwordreset-email' => 'ܡܘܢܥܐ ܕܒܝܠܕܪܐ ܐܠܩܛܪܘܢܝܐ:',
 
 # Special:ChangeEmail
 'changeemail' => 'ܫܚܠܦ ܒܝܠܕܪܐ ܐܠܩܛܪܘܢܝܐ',
@@ -818,9 +830,12 @@ $1',
 'right-mergehistory' => 'ܚܒܘܛ ܬܫܥܝܬܐ ܕܦܐܬܬ̈ܐ',
 'right-userrights' => 'ܫܚܠܦ ܟܠ ܙܕ̈ܩܐ ܕܡܦܠܚܢܐ',
 
+# Special:Log/newusers
+'newuserlogpage' => 'ܣܓܠܐ ܕܒܪܝܬܐ ܕܡܦܠܚܢܐ',
+'newuserlogpagetext' => 'ܗܢܘ ܣܓܠܐ ܕܒܪܝܐ ܕܡܦܠܚܢ̈ܐ',
+
 # User rights log
 'rightslog' => 'ܣܓܠܐ ܕܙܕ̈ܩܐ ܕܡܦܠܚܢܐ',
-'rightsnone' => '(ܠܐ ܡܕܡ)',
 
 # Associated actions - in the sentence "You do not have permission to X"
 'action-read' => 'ܩܪܝ ܦܐܬܐ ܗܕܐ',
@@ -999,11 +1014,20 @@ $1',
 
 # Statistics
 'statistics' => 'ܚܒܝܫܘܬ ܡܢܝܢܐ',
+'statistics-header-pages' => 'ܚܒܝܫܘܬ ܡܢܝܢ̈ܐ ܕܦܐܬܐ',
+'statistics-header-edits' => 'ܚܒܝܫܘܬ ܡܢܝܢܐ ܕܫܘܚܠܦ̈ܐ',
+'statistics-header-views' => 'ܚܒܝܫܘܬ ܡܢܝܢܐ ܕܚܙܝܐ',
+'statistics-header-users' => 'ܚܒܝܫܘܬ ܡܢܝܢܐ ܕܡܦܠܚܢܐ',
 'statistics-header-hooks' => 'ܚܒܝܫܘܬ ܡܢܝܢܐ ܐܚܪܢܐ',
+'statistics-articles' => 'ܦܐܬܬ̈ܐ ܕܚܒܝܫܬ̈ܐ',
 'statistics-pages' => 'ܦܐܬܬ̈ܐ',
+'statistics-edits' => 'ܫܘܚܠܦ̈ܐ ܕܦܐܬܬ̈ܐ ܡܢ ܫܘܪܝܐ ܕ {{SITENAME}}',
+'statistics-edits-average' => 'ܡܨܥܐ ܕܫܘܚܠܦ̈ܐ ܠܟܠ ܦܐܬܐ',
+'statistics-views-total' => 'ܣܘܝܟܐ ܕܚܙܝܐ',
 'statistics-views-peredit' => 'ܚܘܘܝ̈ܐ ܠܟܠ ܫܘܚܠܦܐ',
 'statistics-users' => '[[Special:ListUsers|ܡܦܠܚܢ̈ܐ]] ܡܣܓܠ̈ܐ',
 'statistics-users-active' => 'ܡܦܠܚܢ̈ܐ ܙܪ̄ܝܙܐ',
+'statistics-mostpopular' => 'ܦܐܬܬ̈ܐ ܚܙܝ̈ܐ ܝܬܝܪ ܡܢ ܟܠ',
 
 'disambiguations' => 'ܦܐܬܬ̈ܐ ܐܣܝܪ̈ܬܐ ܒܦܐܬܬ̈ܐ ܕܬܘܚܡܐ ܐܚܪܢܐ',
 'disambiguationspage' => 'Template:ܬܘܚܡܐ ܐܚܪܢܐ',
@@ -1047,7 +1071,7 @@ $1',
 'mostlinked' => 'ܦܐܬܬ̈ܐ ܐܣܝܪ̈ܬܐ ܝܬܝܪ ܡܢ ܟܠ',
 'mostlinkedcategories' => 'ܣܕܪ̈ܐ ܐܣܝܪ̈ܐ ܝܬܝܪ ܡܢ ܟܠ',
 'mostlinkedtemplates' => 'ܩܠܒ̈ܐ ܐܣܝܪ̈ܐ ܝܬܝܪ ܡܢ ܟܠ',
-'mostcategories' => 'ܦܐܬܬ̈ܐ ܣܕܝܪܐ ܝܬܝܪ ܡܢ ܟܠ',
+'mostcategories' => 'ܦܐܬܬ̈ܐ ܣܕܝܪ̈ܬܐ ܝܬܝܪ ܡܢ ܟܠ',
 'mostimages' => 'ܠܦܦ̈ܐ ܐܣܝܪ̈ܐ ܝܬܝܪ ܡܢ ܟܠ',
 'mostinterwikis' => 'ܦܐܬܬ̈ܐ ܕܐܝܬܠܗܘܢ ܐܣܘܪ̈ܐ ܕܐܢܛܪܘܝܩܝ ܝܬܝܪ ܡܢ ܟܠ',
 'mostrevisions' => 'ܦܐܬܬ̈ܐ ܥܡ ܫܘܚܠܦ̈ܐ ܝܬܝܪ ܡܢ ܟܠ',
@@ -1073,7 +1097,7 @@ $1',
 'notargettitle' => 'ܕܠܐ ܢܘܦܐ',
 'nopagetitle' => 'ܠܝܬ ܗܟܘܬ ܦܐܬܐ ܕܢܘܦܐ',
 'pager-newer-n' => '{{PLURAL:$1|1 1 ܚܕܬܐ|$1 ܚܕ̈ܬܐ}}',
-'pager-older-n' => '{{PLURAL:$1|ܥܬܝܩܐ 1|ܥܬܝܩ̈ܐ $1}}',
+'pager-older-n' => '{{PLURAL:$1|1 ܥܬܝܩܐ|$1 ܥܬܝܩ̈ܐ}}',
 'suppress' => 'ܚܝܘܪܐ',
 
 # Book sources
@@ -1086,6 +1110,7 @@ $1',
 'speciallogtitlelabel' => 'ܢܘܦܐ (ܟܘܢܝܐ ܐܘ ܡܦܠܚܢܐ):',
 'log' => 'ܣܓܠ̈ܐ',
 'all-logs-page' => 'ܟܠ ܣܓܠ̈ܐ ܓܘܢܝ̈ܐ',
+'logempty' => 'ܠܝܬ ܡܠܘܐ̈ܐ ܠܐ̈ܝܡܐ ܒܣܓܠܐ ܗܢܐ.',
 'log-title-wildcard' => 'ܒܨܝ ܥܠ ܟܘܢܝ̈ܐ ܕܫܪܝܢ ܥܡ ܟܬܒܬܐ ܗܕܐ',
 'showhideselectedlogentries' => 'ܚܘܝ/ܛܫܝ ܣܓܠ̈ܐ ܕܥܠܠܐ ܓܒܝ̈ܐ',
 
@@ -1116,9 +1141,9 @@ $1',
 'special-categories-sort-abc' => 'ܛܟܣ ܗܓܝܢܐܝܬ',
 
 # Special:DeletedContributions
-'deletedcontributions' => 'ܫܘܬܦܘܝܬ̈ܐ ܕܡܦܠܚܢܐ ܫܝܦܬ̈ܐ',
-'deletedcontributions-title' => 'ܫܘܬܦܘܝܬ̈ܐ ܕܡܦܠܚܢܐ ܫܝܦܬ̈ܐ',
-'sp-deletedcontributions-contribs' => 'ܫܘܬܦܘܝܬ̈ܐ',
+'deletedcontributions' => 'ܫܘܬܦܘ̈ܬܐ ܫܝ̈ܦܬܐ ܕܡܦܠܚܢܐ',
+'deletedcontributions-title' => 'ܫܘܬܦܘ̈ܬܐ ܫܝ̈ܦܬܐ ܕܡܦܠܚܢܐ',
+'sp-deletedcontributions-contribs' => 'ܫܘܬܦܘ̈ܬܐ',
 
 # Special:LinkSearch
 'linksearch' => 'ܐܣܘܪ̈ܐ ܒܪ̈ܝܐ ܒܨܝܐ',
@@ -1141,10 +1166,6 @@ $1',
 'activeusers-hidesysops' => 'ܛܫܝ ܡܕܒܪ̈ܢܐ',
 'activeusers-noresult' => 'ܠܐ ܐܫܬܟܚ ܡܦܠܚܢ̈ܐ ܐܢܫ̈ܝܢ.',
 
-# Special:Log/newusers
-'newuserlogpage' => 'ܣܓܠܐ ܕܒܪܝܬܐ ܕܡܦܠܚܢܐ',
-'newuserlogpagetext' => 'ܗܢܘ ܣܓܠܐ ܕܒܪܝܐ ܕܡܦܠܚܢ̈ܐ',
-
 # Special:ListGroupRights
 'listgrouprights' => 'ܙܕ̈ܩܐ ܕܟܢܘܫܬܐ ܕܡܦܠܚܢ̈ܐ',
 'listgrouprights-group' => 'ܟܢܘܫܬܐ',
@@ -1213,6 +1234,8 @@ $1',
 'enotif_lastvisited' => 'ܚܙܝ $1 ܠܟܠ ܫܘܚܠܦ̈ܐ ܡܢ ܐܡܬܝ ܕܣܘܥܪܢܐ ܐܚܪܝܐ ܕܝܠܟ.',
 'enotif_lastdiff' => 'ܚܙܝ $1 ܠܚܙܝܐ ܕܫܘܚܠܦܐ ܗܢܐ.',
 'enotif_anon_editor' => 'ܡܦܠܚܢܐ ܠܐ ܝܕܝܥܐ $1',
+'created' => 'ܒܪܐ',
+'changed' => 'ܐܫܬܚܠܦܬ',
 
 # Delete
 'deletepage' => 'ܫܘܦ ܦܐܬܐ',
@@ -1234,7 +1257,7 @@ $1',
 # Rollback
 'rollbacklink' => 'ܐܦܢܝ',
 'editcomment' => "ܦܣܝܩܬ̈ܐ ܕܫܘܚܠܦܐ ܗܘܐ: \"''\$1''\".",
-'revertpage' => 'ܐܗܦܟ ܫܘܚܠܦ̈ܐ ܒܝܕ [[Special:Contributions/$2|$2]] ([[User talk:$2|ܡܡܠܐ]]) ܠܬܢܝܬܐ ܐܚܪܝܬܐ ܒܝܕ [[User:$1|$1]]',
+'revertpage' => 'Ü\90Ü\97ܦÜ\9f Ü«Ü\98Ü\9aܠܦÌ\88Ü\90 Ü\92Ü\9dÜ\95 [[Special:Contributions/$2|$2]] ([[User talk:$2|Ü¡Ü¡Ü Ü Ü\90]]) Ü Ü¬Ü¢Ü\9dܬÜ\90 Ü\90Ü\9aܪÜ\9dܬÜ\90 Ü\92Ü\9dÜ\95 [[User:$1|$1]]',
 
 # Edit tokens
 'sessionfailure-title' => 'ܡܘܬܒܐ ܠܐ ܢܨܚܬ',
@@ -1242,8 +1265,11 @@ $1',
 # Protect
 'protectlogpage' => 'ܣܓܠܐ ܕܢܛܪܐ',
 'protectedarticle' => 'ܢܛܪ "[[$1]]"',
+'modifiedarticleprotection' => 'ܫܚܠܦ ܫܘܝܐ ܕܢܛܪܐ ܕ"[[$1]]"',
 'unprotectedarticle' => 'ܫܩܘܠ ܢܛܝܪܘܬܐ ܡܢ "[[$1]]"',
 'movedarticleprotection' => 'ܫܢܐ ܛܘܝܒ̈ܐ ܕܢܛܪܐ ܡܢ "[[$2]]" ܠ "[[$1]]"',
+'protect-title' => 'ܫܚܠܦ ܫܘܝܐ ܕܢܛܪܐ ܕ"$1"',
+'protect-title-notallowed' => 'ܚܘܝ ܫܘܝܐ ܕܢܛܪܐ ܕ"$1"',
 'prot_1movedto2' => '[[$1]] ܐܬܫܢܝܬ ܠ [[$2]]',
 'protect-legend' => 'ܫܪܪ ܢܘܛܪܐ',
 'protectcomment' => 'ܥܠܬܐ:',
@@ -1253,12 +1279,12 @@ $1',
 'protect-level-sysop' => 'ܡܕܒܪ̈ܢܐ ܒܠܚܘܕ',
 'protect-expiring' => 'ܬܦܪܘܩ ܒ $1 (UTC)',
 'protect-expiry-indefinite' => 'ܠܥܠܡ',
-'protect-othertime' => 'Ü¥Ü\95Ü¢Ü\90 Ü\90Ü\9aܪܬܐ:',
-'protect-othertime-op' => 'Ü¥Ü\95Ü¢Ü\90 Ü\90Ü\9aܪܬܐ',
+'protect-othertime' => 'Ü¥Ü\95Ü¢Ü\90 Ü\90Ü\9aܪܢܐ:',
+'protect-othertime-op' => 'Ü¥Ü\95Ü¢Ü\90 Ü\90Ü\9aܪܢܐ',
 'protect-otherreason' => 'ܥܠܬܐ ܐܚܪܬܐ/ܢܩܝܦܬܐ:',
 'protect-otherreason-op' => 'ܥܠܬܐ ܐܚܪܬܐ',
 'protect-edit-reasonlist' => 'ܫܚܠܦ ܥܠܬܐ ܕܢܛܪܐ',
-'protect-expiry-options' => '1 Ü«Ü¥Ü¬Ü\90:1 hour,1 Ü\9dÜ\98Ü¡Ü\90:1 day,1 Ü«Ü\92Ü\98Ü¥Ü\90:1 week,2 Ü«Ü\92Ü\98Ü¥Ì\88Ü\90:2 weeks,1 Ü\9dܪÜ\9aÜ\90:1 month,3 Ü\9dܪÌ\88Ü\9aÜ\90:3 months,6 Ü\9dܪÌ\88Ü\9aÜ\90:6 months,1 Ü«Ü¢Ü¬ܐ:1 year,ܠܥܠܡ:infinite',
+'protect-expiry-options' => '1 Ü«Ü¥Ü\90:1 hour,1 Ü\9dÜ\98Ü¡:1 day,1 Ü«Ü\92Ü\98Ü¥:1 week,2 Ü«Ü\92Ü\98Ü¥Ì\88Ü\9dÜ¢:2 weeks,1 Ü\9dܪÜ\9a:1 month,3 Ü\9dܪÌ\88Ü\9aÜ\9dÜ¢:3 months,6 Ü\9dܪÌ\88Ü\9aÜ\9dÜ¢:6 months,1 Ü«Ü¢ܐ:1 year,ܠܥܠܡ:infinite',
 'restriction-type' => 'ܦܣܣܐ:',
 'restriction-level' => 'ܫܘܝܐ ܕܣܘܝܟܐ:',
 'minimum-size' => 'ܡܬܚܐ ܬܚܬܝܐ  ܕܥܓܪܐ',
@@ -1292,6 +1318,7 @@ $1',
 'undeletedrevisions-files' => '{{PLURAL:$1|1 ܬܢܝܬܐ|$1 ܬܢܝܬ̈ܐ}} and {{PLURAL:$2|1 ܠܦܦܐ|$2 ܠܦܦܐ}} ܐܦܢܝܬ',
 'undeletedfiles' => '{{PLURAL:$1|1 ܠܦܦܐ|$1 ܠܦܦ̈ܐ}} ܐܦܢܝܬ',
 'undelete-header' => 'ܚܙܝ [[Special:Log/delete|ܣܓܠܐ ܕܫܝܦܐ]] ܠܚܙܝܐ ܕܦܐܬܬ̈ܐ ܫܝܦܬ̈ܐ ܚܕ̈ܬܬܐ.',
+'undelete-search-title' => 'ܒܨܝ ܦܐܬܬ̈ܐ ܫܝܦܬ̈ܐ',
 'undelete-search-box' => 'ܒܨܝ ܦܐܬܬ̈ܐ ܫܝܦܬ̈ܐ',
 'undelete-search-prefix' => 'ܚܘܝ ܦܐܬܬ̈ܐ ܫܪܝܢ ܒ:',
 'undelete-search-submit' => 'ܒܨܝ',
@@ -1305,24 +1332,24 @@ $1',
 'blanknamespace' => '(ܪܫܝܬܐ)',
 
 # Contributions
-'contributions' => 'ܫܘܬܦܘܝܬ̈ܐ ܕܡܦܠܚܢܐ',
-'contributions-title' => 'ܫܘܬܦܘܝܬ̈ܐ ܕܡܦܠܚܢܐ ܠ$1',
-'mycontris' => 'ܫܘܬܦܘܝܬ̈ܐ',
+'contributions' => 'ܫܘܬܦܘ̈ܬܐ ܕܡܦܠܚܢܐ',
+'contributions-title' => 'ܫܘܬܦܘ̈ܬܐ ܕܡܦܠܚܢܐ ܠ$1',
+'mycontris' => 'ܫܘܬܦܘ̈ܬܐ',
 'contribsub2' => 'ܕ $1 ($2)',
 'uctop' => '(ܥܠܝܐ)',
 'month' => 'ܡܢ ܝܪܚܐ ܕ (ܘܡܢ ܩܕܡ ܗܝܕܝܢ):',
 'year' => 'ܡܢ ܫܢܬ (ܘܡܢ ܩܕܡ ܗܝܕܝܢ):',
 
-'sp-contributions-newbies' => 'ܚܘܝ ܫܘܬܦܘܝܬ̈ܐ ܕ ܚܘܫܒܢ̈ܐ ܚܕ̈ܬܐ ܒܠܚܘܕ',
+'sp-contributions-newbies' => 'ܚܘܝ ܫܘܬܦܘ̈ܬܐ ܕܚܘܫܒܢ̈ܐ ܚܕ̈ܬܐ ܒܠܚܘܕ',
 'sp-contributions-newbies-sub' => 'ܠܚܘܫܒܢ̈ܐ ܚܕ̈ܬܐ',
-'sp-contributions-newbies-title' => 'ܫܘܬܦܘܝܬ̈ܐ ܕܡܦܠܚܢܐ ܠܚܘܫܒܢ̈ܐ ܚܕ̈ܬܐ',
+'sp-contributions-newbies-title' => 'ܫܘܬܦܘ̈ܬܐ ܕܡܦܠܚܢܐ ܠܚܘܫܒܢ̈ܐ ܚܕ̈ܬܐ',
 'sp-contributions-blocklog' => 'ܣܓܠܐ ܕܚܪܡܐ',
-'sp-contributions-deleted' => 'ܫܘܬܦܘܝܬ̈ܐ ܕܡܦܠܚܢܐ ܫܝܦܬ̈ܐ',
+'sp-contributions-deleted' => 'ܫܘܬܦܘ̈ܬܐ ܫܝ̈ܦܬܐ ܕܡܦܠܚܢܐ',
 'sp-contributions-uploads' => 'ܡܣܩܬ̈ܐ',
 'sp-contributions-logs' => 'ܣܓܠ̈ܐ',
 'sp-contributions-talk' => 'ܡܡܠܠܐ',
 'sp-contributions-userrights' => 'ܕܘܒܪܐ ܕܙܕ̈ܩܐ ܕܡܦܠܚܢܐ',
-'sp-contributions-search' => 'ܒܨܝ ܫܘܬܦܘܝܬ̈ܐ',
+'sp-contributions-search' => 'ܒܨܝ ܫܘܬܦܘ̈ܬܐ',
 'sp-contributions-username' => 'ܐܝ ܦܝ (IP) ܐܘ ܫܡܐ ܕܡܦܠܚܢܐ:',
 'sp-contributions-toponly' => 'ܚܘܝ ܫܘܚܠܦ̈ܐ ܕܗܢܘܢ ܬܢܝܬ̈ܐ ܐܚܪ̈ܝܬܐ ܒܠܚܘܕ',
 'sp-contributions-submit' => 'ܒܨܝ',
@@ -1358,8 +1385,8 @@ $1',
 'ipbreason' => 'ܥܠܬܐ:',
 'ipbreasonotherlist' => 'ܥܠܬܐ ܐܚܪܬܐ',
 'ipbsubmit' => 'ܚܪܘܡ ܡܦܠܚܢܐ ܗܢܐ',
-'ipbother' => 'Ü¥Ü\95Ü¢Ü\90 Ü\90Ü\9aܪܬܐ',
-'ipboptions' => '2 ܫܥܬ̈ܐ:2 hours,1 ܝܘܡܐ:1 day,3 ܝܘܡܬ̈ܐ:3 days,1 ܫܒܘܥܐ:1 week,2 ܫܒܘܥ̈ܐ:2 weeks,1 ܝܪܚܐ:1 month,3 ܝܪ̈ܚܐ:3 months,6 ܝܪ̈ܚܐ:6 months,1 ܫܢܬܐ:1 year,ܠܥܠܡ:infinite',
+'ipbother' => 'Ü¥Ü\95Ü¢Ü\90 Ü\90Ü\9aܪܢܐ',
+'ipboptions' => '2 ܫܥ̈ܝܢ:2 hours,1 ܝܘܡ:1 day,3 ܝܘܡ̈ܝܢ:3 days,1 ܫܒܘܥ:1 week,2 ܫܒܘܥ̈ܝܢ:2 weeks,1 ܝܪܚ:1 month,3 ܝܪ̈ܚܝܢ:3 months,6 ܝܪ̈ܚܝܢ:6 months,1 ܫܢܐ:1 year,ܠܥܠܡ:infinite',
 'ipbotheroption' => 'ܐܚܪܢܐ',
 'ipbotherreason' => 'ܥܠܬܐ ܐܚܪܬܐ/ܢܩܝܦܬܐ:',
 'ipbhidename' => 'ܛܫܝ ܫܡܐ ܕܡܦܠܚܢܐ ܡܢ ܫܘܚܠܦ̈ܐ ܘܡܟܬܒܘܬ̈ܐ',
@@ -1368,13 +1395,14 @@ $1',
 'ipb-edit-dropdown' => 'ܫܚܠܦ ܥܠܠܬ̈ܐ ܕܚܪܡܐ',
 'ipb-unblock-addr' => 'ܫܩܘܠ ܚܪܡܐ ܡܢ $1',
 'ipb-unblock' => 'ܫܩܘܠ ܚܪܡܐ ܡܢ ܐܝ ܦܝ (IP) ܐܘ ܫܡܐ ܕܡܦܠܚܢܐ',
-'ipb-blocklist-contribs' => 'ܫܘܬܦܘܝܬ̈ܐ ܕ $1',
+'ipb-blocklist-contribs' => 'ܫܘܬܦܘ̈ܬܐ ܕ$1',
 'unblockip' => 'ܫܩܘܠ ܚܪܡܐ ܡܢ ܡܦܠܚܢܐ',
 'ipusubmit' => 'ܫܩܘܠ ܚܪܡܐ ܗܢܐ',
 'unblocked' => 'ܐܫܬܩܠ ܚܪܡܐ ܡܢ [[User:$1|$1]]',
 'blocklist' => 'ܡܦܠܚܢ̈ܐ ܡܚܪ̈ܡܐ',
 'ipblocklist' => 'ܡܦܠܚܢ̈ܐ ܡܚܪ̈ܡܐ',
 'ipblocklist-legend' => 'ܐܫܟܚ ܡܦܠܚܢܐ ܡܚܪܡܐ',
+'blocklist-reason' => 'ܥܠܬܐ',
 'ipblocklist-submit' => 'ܒܨܝ',
 'ipblocklist-localblock' => 'ܚܪܡܐ ܕܘܟܬܢܝܐ',
 'infiniteblock' => 'ܠܥܠܡ',
@@ -1383,7 +1411,7 @@ $1',
 'blocklink' => 'ܚܪܘܡ',
 'unblocklink' => 'ܫܩܘܠ ܚܪܡܐ',
 'change-blocklink' => 'ܫܚܠܦ ܚܪܡܐ',
-'contribslink' => 'ܫܘܬܦܘܝܬ̈ܐ',
+'contribslink' => 'ܫܘܬܦܘ̈ܬܐ',
 'blocklogpage' => 'ܣܓܠܐ ܕܚܪܡܐ',
 'blocklogentry' => 'ܚܪܡ [[$1]] ܠܡܬܚܐ ܕ $2 $3',
 'unblocklogentry' => 'ܫܩܠ ܚܪܡܐ ܡܢ $1',
@@ -1430,6 +1458,7 @@ Do you want to change the settings?',
 # Namespace 8 related
 'allmessages' => 'ܐܓܪ̈ܬܐ ܕܛܟܣܐ',
 'allmessagesname' => 'ܫܡܐ',
+'allmessagescurrent' => 'ܟܬܒܬܐ ܗܫܝܬܐ ܕܐܓܪܬܐ',
 'allmessages-filter-legend' => 'ܡܨܦܝܢܝܬܐ',
 'allmessages-filter-all' => 'ܟܠ',
 'allmessages-prefix' => 'ܡܨܦܝܢܝܬܐ ܐܝܟ ܫܘܪܝܐ',
@@ -1468,7 +1497,7 @@ Do you want to change the settings?',
 'tooltip-ca-addsection' => 'ܫܪܝ ܡܢܬܐ ܚܕܬܐ',
 'tooltip-ca-viewsource' => 'ܗܢܐ ܦܐܬܐ ܢܛܪܬܐ ܐܝܬܝܗܝ.
 ܡܨܐ ܐܢܬ ܕܬܚܙܐ ܡܒܘܥܐ ܕܝܠܗ',
-'tooltip-ca-protect' => 'Ü¢Ü\9bÜ\98ܪ ܗܕܐ ܦܐܬܐ',
+'tooltip-ca-protect' => 'Ü\9bܪ Ü ܗܕܐ ܦܐܬܐ',
 'tooltip-ca-delete' => 'ܫܘܦ ܦܐܬܐ ܗܕܐ',
 'tooltip-ca-move' => 'ܫܢܝ ܦܐܬܐ ܗܕܐ',
 'tooltip-search' => 'ܒܨܝ ܒܓܘ {{SITENAME}}',
@@ -1526,6 +1555,18 @@ Do you want to change the settings?',
 'pageinfo-recent-edits' => 'ܡܢܝܢܐ ܕܫܘܚܠܦ̈ܐ ܐܚܪ̈ܝܐ (ܒ {{PLURAL:$1||ܚܕ ܝܘܡܐ|$1 ܝܘܡܬ̈ܐ}})',
 'pageinfo-recent-authors' => 'ܡܢܝܢܐ ܕܡܫܚܠܦܢ̈ܐ ܡܫܚܠܦ̈ܐ ܐܚܪ̈ܝܐ',
 'pageinfo-toolboxlink' => 'ܝܕ̈ܥܬܐ ܥܠ ܦܐܬܐ',
+'pageinfo-contentpage-yes' => 'ܐܝܢ',
+'pageinfo-protect-cascading-yes' => 'ܐܝܢ',
+
+# Patrolling
+'markaspatrolleddiff' => 'ܫܘܕܥ ܐܝܟ ܟܪܝܟܐ',
+'markaspatrolledtext' => 'ܫܘܕܥ ܦܐܬܐ ܗܕܐ ܐܝܟ ܟܪܝܟܬܐ',
+'markedaspatrolled' => 'ܫܘܕܥܬ ܐܝܟ ܟܪܝܟܐ',
+'markedaspatrollednotify' => 'ܫܘܚܠܦܐ ܗܢܐ ܥܠ $1 ܐܫܬܘܕܥ ܐܝܟ ܟܪܝܟܐ.',
+
+# Patrol log
+'patrol-log-page' => 'ܣܓܠܐ ܕܟܪܟܐ',
+'log-show-hide-patrol' => '$1 ܣܓܠܐ ܕܟܪܟܐ',
 
 # Image deletion
 'filedeleteerror-short' => 'ܦܘܕܐ ܒܫܝܦܐ ܕܠܦܦܐ: $1',
@@ -1539,9 +1580,14 @@ $1',
 
 # Media information
 'thumbsize' => 'ܥܓܪܐ ܕܨܘܪܬܐ ܙܥܘܪܬܐ:',
+'widthheightpage' => '$1 × $2, $3 {{PLURAL:$3|ܦܐܬܐ|ܦܐܬܬ̈ܐ}}',
 'file-info' => 'ܥܓܪܐ ܕܠܦܦܐ: $1, MIME ܐܕܫܐ: $2',
+'file-info-size' => '$1 × $2 ܦܩܣܠ، ܥܓܪܐ ܕܠܦܦܐ: $3، ܐܕܫܐ ܕ MIME: $4',
+'file-info-size-pages' => '$1 × $2 ܦܩܣܠ, ܥܓܪܐ ܕܠܦܦܐ: $3, ܐܕܫܐ ܕ MIME: $4, $5 {{PLURAL:$5|ܦܐܬܐ|ܦܐܬܬ̈ܐ}}',
 'file-nohires' => 'ܠܝܬ ܢܩܕܘܬܐ ܝܬܝܪ ܡܢ ܗܢܐ.',
 'show-big-image' => 'ܢܩܕܘܬܐ ܓܡܝܪܬܐ',
+'show-big-image-preview' => 'ܥܓܪܐ ܕܓܠܚܐ: $1.',
+'show-big-image-size' => '$1 × $2 ܦܩܣܠ',
 
 # Special:NewFiles
 'newimages' => 'ܒܝܬ ܓܠܚܐ ܕܠܦܦ̈ܐ ܚܕܬ̈ܐ',
@@ -1551,9 +1597,20 @@ $1',
 'noimages' => 'ܠܝܬ ܡܕܡ ܠܚܙܝܐ.',
 'ilsubmit' => 'ܒܨܝ',
 'bydate' => 'ܒܣܝܩܘܡܐ',
+'sp-newimages-showfrom' => 'ܚܘܝ ܠܦܦ̈ܐ ܚܕ̈ܬܐ ܕܫܪܝ ܡܢ $2, $1',
+
+# Video information, used by Language::formatTimePeriod() to format lengths in the above messages
+'seconds' => '{{PLURAL:$1|$1 ܪܦܦܐ|$1 ܪ̈ܦܦܐ}}',
+'minutes' => '{{PLURAL:$1|$1 ܩܛܝܢܬܐ|$1 ܩܛܝܢܬ̈ܐ}}',
+'hours' => '{{PLURAL:$1|$1 ܫܥܬܐ|$1 ܫܥܬ̈ܐ}}',
+'days' => '{{PLURAL:$1|$1 ܝܘܡܐ|$1 ܝܘܡܬ̈ܐ}}',
+'ago' => 'ܩܕܡ $1',
+'just-now' => 'ܗܫܐ ܒܪ ܫܥܬܗ',
 
 # Metadata
 'metadata' => 'ܓܠܝܬ̈ܐ ܕܡܝܛܐ',
+'metadata-expand' => 'ܚܘܝ ܐܪ̈ܝܟܬܐ ܪ̈ܘܝܚܬܐ',
+'metadata-collapse' => 'ܛܫܝ ܐܪ̈ܝܟܬܐ ܪ̈ܘܝܚܬܐ',
 
 # EXIF tags
 'exif-imagewidth' => 'ܦܬܘܐ',
@@ -1693,6 +1750,7 @@ $1',
 'fileduplicatesearch-legend' => 'ܒܨܝܐ ܥܠ ܥܘܦܦܐ',
 'fileduplicatesearch-filename' => 'ܫܡܐ ܕܠܦܦܐ:',
 'fileduplicatesearch-submit' => 'ܒܨܝ',
+'fileduplicatesearch-info' => '$1 × $2 ܦܩܣܠ<br /> ܥܓܪܐ ܕܠܦܦܐ: $3<br /> ܐܕܫܐ ܕ MIME: $4',
 
 # Special:SpecialPages
 'specialpages' => 'ܦܐܬܬ̈ܐ ܕ̈ܝܠܢܝܬܐ',
@@ -1744,7 +1802,7 @@ $1',
 'logentry-newusers-create' => 'ܚܘܫܒܢܐ ܕܡܦܠܚܢܐ $1 ܐܬܒܪܐ',
 'logentry-newusers-create2' => 'ܚܘܫܒܢܐ ܕܡܦܠܚܢܐ $3 ܐܬܒܪܐ ܒܝܕ $1',
 'logentry-newusers-autocreate' => 'ܚܘܫܒܢܐ $1 ܐܬܒܪܝ ܝܬܐܝܬ',
-'newuserlog-byemail' => 'ܡܠܬܐ ܕܥܠܠܐ ܐܫܬܕܪܬ ܒܝܕ ܒܝܠܕܪܐ ܐܠܩܛܪܘܢܝܐ',
+'rightsnone' => '(ܠܐ ܡܕܡ)',
 
 # Feedback
 'feedback-subject' => 'ܡܠܘܐܐ:',
index a1ea447..7ece867 100644 (file)
@@ -474,8 +474,8 @@ Rulpakünuy feychi kangelkülelu dungu.",
 'right-browsearchive' => 'kintun pakina ñamümüngelu',
 'right-undelete' => 'Wüñoñamümün kiñe pakina',
 
-# User rights log
-'rightsnone' => 'chemnorume',
+# Special:Log/newusers
+'newuserlogpage' => 'We kellufe ñi wirintukun',
 
 # Associated actions - in the sentence "You do not have permission to X"
 'action-read' => 'chillkatun tüfachi pakina',
@@ -633,9 +633,6 @@ Fey ñi chumngen mülelu ($2 fey ñi chumngen wülngiñ) pengeli tüfa mew.',
 # Special:ListUsers
 'listusers-submit' => 'Pengelün',
 
-# Special:Log/newusers
-'newuserlogpage' => 'We kellufe ñi wirintukun',
-
 # Special:ListGroupRights
 'listgrouprights-members' => '(koneltulu kellufe ñi wif)',
 
@@ -664,6 +661,7 @@ Fey ñi chumngen mülelu ($2 fey ñi chumngen wülngiñ) pengeli tüfa mew.',
 'unwatching' => 'Llaytumekewelay...',
 
 'enotif_impersonal_salutation' => '{{SITENAME}} kellufe',
+'created' => 'Llituy',
 
 # Delete
 'deletepage' => 'Ñamümün tüfachi pakina',
@@ -974,4 +972,7 @@ Ka dungu ellkangeay wünedullin reke.
 # HTML forms
 'htmlform-selectorother-other' => 'Kakelu',
 
+# New logging system
+'rightsnone' => 'chemnorume',
+
 );
index 824b227..2213623 100644 (file)
@@ -756,7 +756,6 @@ l-idari lli qffelha ĝta had ṫfsir: $1",
 'template-semiprotected' => '(ḫimaya ma kamlaċ)',
 'hiddencategories' => '{{PLURAL:$1|L-Katégori l-mĥebbya li kaṫmlek|L-Katégoriyaṫ l-mĥebbyin li kaymelko}} had ṣ-ṣefḫa :',
 'edittools' => '<!-- nass ghayban hna t7t t3dil ot7t istimarat raf3 sowar. -->',
-'nocreatetitle' => "inċa' ṣfaḫi mḫdod",
 'nocreate-loggedin' => 'ma ĝndek-ċ l-heqq ṫsayb ṣ-ṣfaḫi jdad.',
 'sectioneditnotsupported-title' => 'ṫĝdil l-aqsam ma kayn-ċ hna',
 'sectioneditnotsupported-text' => 'ṫṫĝdil l-aqsam ma kayn-ċ f-had ṣfḫa.',
@@ -1187,11 +1186,13 @@ Laḫed ana imken ikono l-indexaṫ dial {{SITENAME}} qdam o ma bqaoċ ṣalḫi
 'right-override-export-depth' => 'tsdir sfahi obinha sfahi lmawsola hta lomq 5',
 'right-sendemail' => 'sift email lmostkhdimin lkhrin',
 
+# Special:Log/newusers
+'newuserlogpage' => 'Ṫariĥ dyal l-ḫsabaṫ j-jdad',
+'newuserlogpagetext' => "hada sijill d-inċa'aṫ l-moṣṫĥdimin.",
+
 # User rights log
 'rightslog' => 'Ĝamaliyaṫ ḫoqoq l-mosṫeĥdim',
 'rightslogtext' => 'hada sijil btaghyirat f salahiyat lmostkhdimin',
-'rightslogentry' => 'ghyr salahiyat $1 mn $2 l $3',
-'rightsnone' => '(walo)',
 
 # Associated actions - in the sentence "You do not have permission to X"
 'action-read' => "Ĥṫareĝ had 'ṣ-ṣefḫa",
@@ -1609,10 +1610,6 @@ daba ka ṫḫwwal l-[[$2]].',
 'activeusers-hidesysops' => 'Khbbi lidariyin',
 'activeusers-noresult' => 'ta mostakhdim matlgach.',
 
-# Special:Log/newusers
-'newuserlogpage' => 'Ṫariĥ dyal l-ḫsabaṫ j-jdad',
-'newuserlogpagetext' => "hada sijill d-inċa'aṫ l-moṣṫĥdimin.",
-
 # Special:ListGroupRights
 'listgrouprights' => 'salahiyat mjmoat lmostkhdimin',
 'listgrouprights-key' => '* <span class="listgrouprights-granted">ḫoqoq mĝtiyya</span>
@@ -1695,6 +1692,8 @@ L-Kṫaba dyal had ṣ-ṣefḫa ġaṫban '''ġliḍa''' fe [[Special:RecentCha
 'enotif_lastvisited' => 'Sir ċof $1 baċ ṫċof ṫ-ṫeġyiraṫ kamlin men ziyarṫek l-leĥĥraniya.',
 'enotif_lastdiff' => 'Ċof $1 baċ ṫċof had ṫ-ṫeġyiraṫ.',
 'enotif_anon_editor' => 'mosṫeĥdim ma mċejjelċ $1',
+'created' => "tnch'at",
+'changed' => 'Beddel',
 
 # Delete
 'deletepage' => "Mḫi had 'ṣ-ṣefḫa",
@@ -2712,6 +2711,6 @@ jrreb l-ĝṛḍ l-ĝadi.',
 # New logging system
 'revdelete-restricted' => 'tḅḅq ḍ-ḍawaḅit ll-idariyyin',
 'revdelete-unrestricted' => 'ḫyyd ḍ-ḍawaḅit ll-idariyyin',
-'newuserlog-byemail' => "lmot de passe raha tsiftat f l'email",
+'rightsnone' => '(walo)',
 
 );
index ad4f067..f532760 100644 (file)
@@ -960,7 +960,6 @@ $2',
 'template-semiprotected' => '(حمايه جزئيه )',
 'hiddencategories' => 'الصفحه دى موجوده فى {{PLURAL:$1|تصنيف مخفى واحد|$1 تصنيف مخفى}}:',
 'edittools' => '<!-- النص هنا هايظهر تحت صندوق التحرير و استمارة  تحميل الصور. -->',
-'nocreatetitle' => 'إنشاء الصفحات اتحدد',
 'nocreatetext' => '{{SITENAME}} حدد القدره على انشاء صفحات جديده.
 ممكن ترجع وتحرر صفحه موجوده بالفعل، او [[Special:UserLogin|الدخول / فتح حساب]].',
 'nocreate-loggedin' => 'انت ما عندك ش صلاحية تعمل صفحات جديدة.',
@@ -1478,11 +1477,13 @@ $1",
 'right-sendemail' => 'يبعت إيميل لليوزرز التانيين',
 'right-passwordreset' => 'إعادة ضبط كلمة سر مستخدم([[Special:PasswordReset|صفحة خاصة]])',
 
+# Special:Log/newusers
+'newuserlogpage' => 'سجل اليوزرز الجداد',
+'newuserlogpagetext' => 'دا سجل لليوزرز الجداد',
+
 # User rights log
 'rightslog' => 'سجل صلاحيات اليوزرز',
 'rightslogtext' => 'ده سجل بالتغييرات ف صلاحيات اليوزرز .',
-'rightslogentry' => 'غير صلاحيات $1 من $2 ل $3',
-'rightsnone' => '(فاضى)',
 
 # Associated actions - in the sentence "You do not have permission to X"
 'action-read' => 'قراية الصفحه دى',
@@ -2024,10 +2025,6 @@ PICT # misc.
 'activeusers-hidesysops' => 'خبى السيسوبات',
 'activeusers-noresult' => 'مالقيناش اى يوزر',
 
-# Special:Log/newusers
-'newuserlogpage' => 'سجل اليوزرز الجداد',
-'newuserlogpagetext' => 'دا سجل لليوزرز الجداد',
-
 # Special:ListGroupRights
 'listgrouprights' => 'حقوق مجموعات اليوزرز',
 'listgrouprights-summary' => 'دى لستة بمجموعات اليوزرز المتعرفة فى الويكى دا، بالحقوق اللى معاهم.
@@ -2139,6 +2136,8 @@ $UNWATCHURL
 
 الfeedback و مساعده اكتر:
 {{canonicalurl:{{MediaWiki:Helppage}}}}',
+'created' => 'إتنشأت',
+'changed' => 'اتغيرت',
 
 # Delete
 'deletepage' => 'امسح الصفحه',
@@ -3476,7 +3475,7 @@ $5
 # New logging system
 'revdelete-restricted' => 'طبق التعليمات على السيسوبات',
 'revdelete-unrestricted' => 'شيل الضوابط من على السيسوبات',
-'newuserlog-byemail' => 'الباسورد اتبعتت بالايميل',
+'rightsnone' => '(فاضى)',
 
 # Search suggestions
 'searchsuggest-search' => 'تدوير',
index cfb4e28..bcd5f06 100644 (file)
@@ -747,6 +747,7 @@ $2
 'changeemail-oldemail' => 'বৰ্তমানৰ ই-মেইল ঠিকনা:',
 'changeemail-newemail' => 'নতুন ই-মেইল ঠিকনা:',
 'changeemail-none' => '(নাই)',
+'changeemail-password' => 'আপোনাৰ  {{SITENAME}} গুপ্তশব্দ:',
 'changeemail-submit' => 'ই-মেইল ঠিকনা সলনি কৰক',
 'changeemail-cancel' => 'বাতিল কৰক',
 
@@ -936,7 +937,6 @@ $1ৰ দ্বাৰা এই অৱৰোধ কৰা হৈছে ।
 'template-protected' => '(সুৰক্ষিত)',
 'template-semiprotected' => '(অৰ্ধ-সুৰক্ষিত)',
 'hiddencategories' => 'এই পৃষ্ঠা {{PLURAL:$1|১-টা নিহিত শ্ৰেণীৰ|$1-টা নিহিত শ্ৰেণীৰ}} সদস্য:',
-'nocreatetitle' => 'পৃষ্ঠা সৃষ্টি সীমিত',
 'nocreatetext' => '{{SITENAME}}ত নতুন পৃষ্ঠা সৃষ্টিৰ ক্ষমতা সীমাবদ্ধ কৰা হৈছে।
 আপুনি ঘূৰি গৈ বৰ্তমানে থকা পৃষ্ঠা এটা সম্পাদনা কৰিব পাৰে, বা [[Special:UserLogin|নতুন সদস্যভৰ্তি হওক/ প্ৰবেশ কৰক]] ।',
 'nocreate-loggedin' => 'নতুন পৃষ্ঠা সৃষ্টি কৰিবলৈ আপোনাৰ অনুমতি নাই ।',
@@ -1341,8 +1341,8 @@ $1",
 'prefs-textboxsize' => 'সম্পাদনা ৱিণ্ড’ৰ আকাৰ',
 'youremail' => 'আপোনাৰ ই-মেইল *',
 'username' => '{{GENDER:$1|সদস্যনাম}}:',
-'uid' => 'সদস্য চিহ্ন:',
-'prefs-memberingroups' => '{{PLURAL:$1|à¦\9fা à¦\97à§\8bà¦\9fৰ|à¦\9fা à¦\97à§\8bà¦\9fৰ}} à¦¸à¦¦à¦¸à§\8dয:',
+'uid' => '{{GENDER:$1|User}} চিহ্ন:',
+'prefs-memberingroups' => '{{PLURAL:$1|à¦\97à§\8bà¦\9f|à¦\97à§\8bà¦\9fসমà§\82হৰ}} {{GENDER:$2|সদসà§\8dয}} :',
 'prefs-registration' => 'পঞ্জীয়ন কৰাৰ সময়:',
 'yourrealname' => 'প্ৰকৃত নাম:',
 'yourlanguage' => 'ভাষা:',
@@ -1492,15 +1492,13 @@ $1",
 'right-sendemail' => 'আন সদস্যলৈ ই-পত্ৰ ঠিকনা পঠিয়াওক',
 'right-passwordreset' => 'পাছৱৰ্ড ৰি-চেটৰ ই-মেইলসমূহ দেখুৱাওক',
 
+# Special:Log/newusers
+'newuserlogpage' => 'সদস্যৰ সৃষ্টি অভিলেখ',
+'newuserlogpagetext' => 'এইখন এখন সদস্য সৃষ্টিৰ ল’গ।',
+
 # User rights log
 'rightslog' => 'সভ্যৰ অধিকাৰৰ লেখ',
 'rightslogtext' => 'সদস্য অধিকাৰৰ পৰিৱৰ্তনসমূহৰ ল’গ',
-'rightslogentry' => "$1-ৰ গোট সদস্যপদ $2-ৰ পৰা $3-লৈ সলনি কৰা হ'ল",
-'rightslogentry-autopromote' => '$2ৰ পৰা $3লৈ স্বয়ংক্ৰিয়ভাৱে পদোন্নীত হ’ল',
-'logentry-rights-rights' => "$1-ৰ গোট সদস্যপদ $3-ৰ পৰা $4-লৈ $5 লৈ সলনি কৰা হ'ল",
-'logentry-rights-rights-legacy' => "$1-ৰ গোট সদস্যপদ $3-লৈ সলনি কৰা হ'ল",
-'logentry-rights-autopromote' => '$1ৰ পৰা  $2ৰ পৰা $3লৈ স্বয়ংক্ৰিয়ভাৱে পদোন্নীত হ’ল',
-'rightsnone' => '(নাই)',
 
 # Associated actions - in the sentence "You do not have permission to X"
 'action-read' => 'এই পৃষ্ঠা পঢ়ক',
@@ -2129,7 +2127,7 @@ https://www.mediawiki.org/wiki/Manual:Image_Authorization চাওক।",
 'linksearch-ok' => 'অনুসন্ধান',
 'linksearch-text' => "ৱাইল্ডকাৰ্ডসমূহ যেনে \"*.wikipedia.org\" ব্যৱহাৰ কৰিব পাৰি।
 অন্তত এটা উচ্চ-স্তৰৰ ডমেইনৰ প্ৰয়োজন, উদাহৰণস্বৰূপ \"*.org\"। <br />
-সমৰ্থিত প্ৰ'ট'ক'লসমূহ: <code>\$1</code> (কোনো প্ৰ'ট'ক'ল নিৰ্দিষ্ট নকৰিলে http:// সূচাব)।",
+সমৰ্থিত {{PLURAL:\$2|প্ৰ'ট'ক'ল|প্ৰ'ট'ক'লসমূহ}} : <code>\$1</code> (কোনো প্ৰ'ট'ক'ল নিৰ্দিষ্ট নকৰিলে http:// সূচাব)।",
 'linksearch-line' => '$2 পৰা $1 সংযোগ কৰা হৈছে',
 'linksearch-error' => "ৱাইল্ডকাৰ্ড কেৱল হ'ষ্টনামৰ আৰম্ভণিতহে দেখা যাব ।",
 
@@ -2148,10 +2146,6 @@ https://www.mediawiki.org/wiki/Manual:Image_Authorization চাওক।",
 'activeusers-hidesysops' => 'প্ৰশাসক নেদেখুৱাব',
 'activeusers-noresult' => "কোনো সদস্য পোৱা নগ'ল।",
 
-# Special:Log/newusers
-'newuserlogpage' => 'সদস্যৰ সৃষ্টি অভিলেখ',
-'newuserlogpagetext' => 'এইখন এখন সদস্য সৃষ্টিৰ ল’গ।',
-
 # Special:ListGroupRights
 'listgrouprights' => 'ব্যৱহাৰকাৰী গোটৰ অধিকাৰ',
 'listgrouprights-summary' => 'এই ৱিকিত থকা গোটসমূহৰ তালিকা সেইবোৰৰ প্ৰৱেশাধিকাৰসহ তলত দিয়া হ’ল ।
@@ -2217,8 +2211,8 @@ https://www.mediawiki.org/wiki/Manual:Image_Authorization চাওক।",
 'watchnologin' => 'প্ৰৱেশ কৰা নাই',
 'watchnologintext' => 'নিৰীক্ষণ তালিকা পৰিৱৰ্তন কৰিবলৈ আপুনি আগতে [[Special:UserLogin|প্ৰৱেশ]] কৰিব লাগিব ।',
 'addwatch' => 'লক্ষ্য-তালিকাত অন্তৰ্ভুক্ত কৰক',
-'addedwatchtext' => "আপোনাৰ [[Special:Watchlist|লক্ষ্য তালিকাত ]] \"[[:\$1]]\" অন্তৰ্ভুক্ত কৰা হ'ল।
-ভৱিষà§\8dযতà§\87 à¦\87য়াত à¦¹à§\8bৱা à¦¸à¦¾à¦²-সলনি à¦\86পà§\81নি à¦\86পà§\8bনাৰ à¦²à¦\95à§\8dষà§\8dয à¦¤à¦¾à¦²à¦¿à¦\95াত à¦¦à§\87à¦\96িব, à¦²à¦\97তà§\87 [[Special:RecentChanges|সামà§\8dপà§\8dৰতিà¦\95 à¦¸à¦¾à¦²-সলনিৰ à¦¤à¦¾à¦²à¦¿à¦\95াত]] à¦\8fà¦\87 à¦ªà§\83ষà§\8dঠাà¦\96ন '''à¦\97াঢ়''' à¦\86à¦\96ৰত à¦¦à§\87à¦\96িব à¦¯à¦¾à¦¤à§\87 à¦\86পà§\81নি à¦¸à¦¹à¦\9cà§\87 à¦§à§°à¦¿à¦¬ à¦ªà¦¾à§°à§\87।",
+'addedwatchtext' => 'আপোনাৰ [[Special:Watchlist|লক্ষ্য তালিকাত ]] "[[:$1]]" পৃষ্ঠাখন অন্তৰ্ভুক্ত কৰা হ\'ল।
+ভৱিষà§\8dযতà§\87 à¦\8fà¦\87 à¦ªà§\83ষà§\8dঠা à¦¬à¦¾ à¦\87য়াৰ à¦\86লà§\8bà¦\9aনা à¦ªà§\83ষà§\8dঠাত à¦¹à§\8bৱা à¦¸à¦¾à¦²-সলনি à¦\86পà§\81নি à¦\86পà§\8bনাৰ à¦²à¦\95à§\8dষà§\8dয à¦¤à¦¾à¦²à¦¿à¦\95াত à¦¦à§\87à¦\96িব।',
 'removewatch' => 'লক্ষ্য-তালিকাৰ পৰা আঁতৰাওক',
 'removedwatchtext' => '"[[:$1]]" পৃষ্ঠাখন [[Special:Watchlist|আপোনাৰ লক্ষ্য-তালিকা]]ৰ পৰা আতৰোৱা হৈছে ।',
 'watch' => 'চকু ৰাখক',
@@ -2252,7 +2246,7 @@ https://www.mediawiki.org/wiki/Manual:Image_Authorization চাওক।",
 'enotif_subject_moved' => '{{SITENAME}} পৃষ্ঠা  $1 {{gender:$2|$2}}ৰ দ্বাৰা স্থানান্তৰ সৃষ্টি কৰা',
 'enotif_subject_restored' => '{{SITENAME}} পৃষ্ঠা $1 {{gender:$2|$2}}ৰ দ্বাৰা পুনৰ স্থাপন কৰা',
 'enotif_subject_changed' => '{{SITENAME}} পৃষ্ঠা $1 {{gender:$2|$2}}ৰ দ্বাৰা সলনি কৰা হ’ল',
-'enotif_body_intro_deleted' => '{{SITENAME}}ৰ পৃষ্ঠা $1, $PAGEEDITDATE তাৰিখে {{gender:$2|$2}}ৰ দ্বাৰা বিলোপ কৰা হৈছিল, বৰ্তমানৰ সংস্কৰণৰ বাবে $3 চাওক।',
+'enotif_body_intro_deleted' => '{{SITENAME}}ৰ পৃষ্ঠা $1ক $PAGEEDITDATE তাৰিখে {{gender:$2|$2}}ৰ দ্বাৰা বিলোপ কৰা হৈছিল। $3 চাওক।',
 'enotif_body_intro_created' => '{{SITENAME}}ৰ পৃষ্ঠা $1, $PAGEEDITDATE তাৰিখে {{gender:$2|$2}}ৰ দ্বাৰা সৃষ্টি কৰা হৈছিল, বৰ্তমানৰ সংস্কৰণৰ বাবে $3 চাওক।',
 'enotif_body_intro_moved' => '{{SITENAME}}ৰ পৃষ্ঠা $1, $PAGEEDITDATE তাৰিখে {{gender:$2|$2}}ৰ দ্বাৰা স্থানান্তৰ কৰা হৈছিল, বৰ্তমানৰ সংস্কৰণৰ বাবে $3 চাওক।',
 'enotif_body_intro_restored' => '{{SITENAME}}ৰ পৃষ্ঠা $1, $PAGEEDITDATE তাৰিখে {{gender:$2|$2}}ৰ দ্বাৰা পুনৰ স্থাপন কৰা হৈছিল, বৰ্তমানৰ সংস্কৰণৰ বাবে $3 চাওক।',
@@ -2290,6 +2284,8 @@ $UNWATCHURL
 
 প্ৰতিক্ৰিয়া আৰু অধিক সহযোগিতাৰ বাবে:
 {{canonicalurl:{{MediaWiki:Helppage}}}}',
+'created' => 'সৃষ্টি কৰা হ’ল',
+'changed' => 'সলোৱা হৈছে',
 
 # Delete
 'deletepage' => 'পৃষ্ঠা বিলোপ কৰক',
@@ -3076,6 +3072,7 @@ $1',
 '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' => "সম্পূৰ্ণ ৰিজ'লিউশ্যন",
 'show-big-image-preview' => 'এই খচৰাৰ আকাৰ: $1.',
 'show-big-image-other' => "আন {{PLURAL:$2|ৰিজ'লিউশ্যন|ৰিজ'লিউশ্যনসমূহ}}: $1।",
@@ -3867,7 +3864,10 @@ $5
 'logentry-newusers-create' => "ব্যৱহাৰকাৰী একাউণ্ট $1 সৃষ্টি কৰা হ'ল",
 'logentry-newusers-create2' => "$1ৰ দ্বাৰা এটা ব্যৱহাৰকাৰী একাউণ্ট $3 সৃষ্টি কৰা হ'ল",
 'logentry-newusers-autocreate' => '$1’ৰ একাউণ্ট স্বয়ংক্ৰিয়ভাৱে সৃষ্টি কৰা হৈছিল',
-'newuserlog-byemail' => 'গুপ্তশব্দ ই-মেইল কৰি পঠোৱা হৈছে',
+'logentry-rights-rights' => "$1ৰ গোট সদস্যপদ $3ৰ পৰা $4লৈ $5 লৈ সলনি কৰা হ'ল",
+'logentry-rights-rights-legacy' => "$1-ৰ গোট সদস্যপদ $3-লৈ সলনি কৰা হ'ল",
+'logentry-rights-autopromote' => '$1ক  $4ৰ পৰা $5লৈ স্বয়ংক্ৰিয়ভাৱে পদোন্নীত কৰা হ’ল',
+'rightsnone' => '(নাই)',
 
 # Feedback
 'feedback-bugornote' => 'যদি আপুনি এটা কাৰিকৰী সমস্যাৰ বিৱৰণ দিবলৈ প্ৰস্তুত, অনুগ্ৰহ কৰি [$1 এটা বাগ ৰিপ\'ৰ্ট কৰক]।
@@ -3941,6 +3941,4 @@ $5
 'duration-centuries' => '$1 {{PLURAL:$1|শতাব্দী|শতাব্দী}}',
 'duration-millennia' => '$1 {{PLURAL:$1|সহস্ৰাব্দ|সহস্ৰাব্দ}}',
 
-# Unknown messages
-'svg-long-error' => 'অবৈধ SVG ফাইল: $1',
 );
index 681ce57..ad0b1b0 100644 (file)
@@ -189,9 +189,10 @@ $messages = array(
 
 'about' => 'Tocante a',
 'article' => 'Páxina de conteníu',
-'newwindow' => '(ábrese nuna ventana nueva)',
+'newwindow' => "(s'abre nuna ventana nueva)",
 'cancel' => 'Encaboxar',
 'moredotdotdot' => 'Más...',
+'morenotlisted' => 'Más na llista...',
 'mypage' => 'Páxina',
 'mytalk' => 'Alderique',
 'anontalk' => 'Alderique pa esta IP',
@@ -275,7 +276,7 @@ $messages = array(
 'otherlanguages' => "N'otres llingües",
 'redirectedfrom' => '(Redirixío dende $1)',
 'redirectpagesub' => 'Páxina de redireición',
-'lastmodifiedat' => "Esta páxina camudóse per postrer vegada'l $1 a les $2.",
+'lastmodifiedat' => "Esta páxina camudóse la postrera vegada'l $1 a les $2.",
 'viewcount' => 'Esta páxina visitóse {{PLURAL:$1|una vegada|$1 vegaes}}.',
 'protectedpage' => 'Páxina protexida',
 'jumpto' => 'Saltar a:',
@@ -307,8 +308,8 @@ $1',
 'policy-url' => 'Project:Polítiques',
 'portal' => 'Portal de la comunidá',
 'portal-url' => 'Project:Portal de la comunidá',
-'privacy' => 'Politica de privacidá',
-'privacypage' => 'Project:Política de privacidá',
+'privacy' => 'Política de proteición de datos',
+'privacypage' => 'Project:Política de proteición de datos',
 
 'badaccess' => 'Fallu de permisos',
 'badaccess-group0' => "Nun tienes permisu pa executar l'aición solicitada.",
@@ -423,7 +424,7 @@ Seique daquién yá lo desaniciara.",
 Nun conseñó esplicación.',
 'badtitle' => 'Títulu incorreutu',
 'badtitletext' => 'El títulu de páxina solicitáu nun ye válidu, ta baleru o tien enllaces interllingua o interwiki incorreutos.
-Pue contener ún o más carauteres que nun se puen usar nos títulos.',
+Pue contener un caráuter o más que nun se puen usar nos títulos.',
 'perfcached' => "Los datos siguientes tán na caché y seique nun tean anovaos. Hai un máximu {{PLURAL:$1|d'un resultáu disponible|de $1 resultaos disponibles}} na caché.",
 'perfcachedts' => "Los datos siguientes tán na caché y anováronse per postrer vegada'l $1. Hai un máximu {{PLURAL:$4|d'un resultáu disponible|de $4 resultaos disponibles}} na caché.",
 'querypage-no-updates' => "Anguaño los anovamientos d'esta páxina tán desactivaos.
@@ -471,12 +472,12 @@ L'alministrador que lu bloquió dio esti motivu: «$3».",
 
 Pues siguir usando {{SITENAME}} de forma anónima, o pues <span class='plainlinks'>[$1 volver entrar]</span> como'l mesmu o como otru usuariu.
 Ten en cuenta que dalgunes páxines puen siguir apaeciendo como si tovía tuvieres coneutáu, hasta que llimpies la caché del restolador.",
-'welcomeuser' => '¡Afayati, $1!',
+'welcomeuser' => '¡Bienllegáu, $1!',
 'welcomecreation-msg' => "Creóse la to cuenta.
 Nun t'escaezas d'escoyer les tos [[Special:Preferences|preferencies de {{SITENAME}}]].",
 'yourname' => "Nome d'usuariu:",
 'yourpassword' => 'Contraseña:',
-'yourpasswordagain' => 'Escribi otra vuelta la clave:',
+'yourpasswordagain' => 'Escribi otra vuelta la contraseña:',
 'remembermypassword' => "Recordar la mio identificación nesti restolador (un máximu {{PLURAL:$1|d'un día|de $1 díes}})",
 'securelogin-stick-https' => "Siguir coneutáu al HTTPS dempués d'identificase",
 'yourdomainname' => 'El to dominiu:',
@@ -488,7 +489,7 @@ Nun t'escaezas d'escoyer les tos [[Special:Preferences|preferencies de {{SITENAM
 'userlogin' => 'Identificase / crear una cuenta',
 'userloginnocreate' => 'Identificase',
 'logout' => 'Dexar de tar identificáu',
-'userlogout' => 'Dexar de tar identificáu',
+'userlogout' => 'Colar',
 'notloggedin' => 'Non identificáu',
 'nologin' => '¿Nun tienes una cuenta? $1.',
 'nologinlink' => 'Crear una cuenta',
@@ -496,7 +497,7 @@ Nun t'escaezas d'escoyer les tos [[Special:Preferences|preferencies de {{SITENAM
 'gotaccount' => '¿Ya tienes una cuenta? $1.',
 'gotaccountlink' => 'Identificase',
 'userlogin-resetlink' => "¿Escaecisti los datos d'identificación?",
-'createaccountmail' => 'Per corréu electrónicu',
+'createaccountmail' => 'Usar una contraseña al debalu temporal y unviala a la direición de corréu electrónicu conseñada más abaxo',
 'createaccountreason' => 'Motivu:',
 'badretype' => "Les claves qu'escribisti nun concuayen.",
 'userexists' => "El nome d'usuariu conseñáu yá ta usándose.
@@ -577,6 +578,7 @@ Por favor espera enantes d'intentalo otra vuelta.",
 # E-mail sending
 'php-mail-error-unknown' => 'Fallu desconocíu na función mail() de PHP.',
 'user-mail-no-addy' => 'Intentasti unviar un corréu electrónicu ensin direición.',
+'user-mail-no-body' => "Trató d'unviar un corréu electrónicu con un cuerpu baleru o curtiu enforma.",
 
 # Change password dialog
 'resetpass' => 'Camudar la clave',
@@ -645,6 +647,7 @@ Clave provisional: $2",
 'changeemail-oldemail' => 'Direición de corréu electrónicu actual:',
 'changeemail-newemail' => 'Direición de corréu electrónicu nueva:',
 'changeemail-none' => '(nengún)',
+'changeemail-password' => 'La to contraseña en {{SITENAME}}:',
 'changeemail-submit' => 'Camudar el corréu electrónicu',
 'changeemail-cancel' => 'Encaboxar',
 
@@ -746,7 +749,7 @@ Si yes un usuariu anónimu y notes qu'hai comentarios irrelevantes empobinaos pa
 'noarticletext' => 'Nestos momentos nun hai testu nesta páxina.
 Pues [[Special:Search/{{PAGENAME}}|guetar esti títulu de páxina]] n\'otres páxines,
 <span class="plainlinks">[{{fullurl:{{#Special:Log}}|page={{FULLPAGENAMEE}}}} guetar los rexistros rellacionaos],
-o [{{fullurl:{{FULLPAGENAME}}|action=edit}} editar esta páxina equí]</span>.',
+o [{{fullurl:{{FULLPAGENAME}}|action=edit}} editar esta páxina]</span>.',
 'noarticletext-nopermission' => 'Nestos momentos nun hai testu nesta páxina.
 Pues [[Special:Search/{{PAGENAME}}|guetar esti títulu de páxina]] n\'otres páxines o <span class="plainlinks">[{{fullurl:{{#Special:Log}}|page={{FULLPAGENAMEE}}}} guetar los rexistros rellacionaos]</span>, pero nun tienes permisu pa crear esta páxina.',
 'missing-revision' => 'La revisión #$1 de la páxina llamada "{{PAGENAME}}" nun esiste.
@@ -816,7 +819,7 @@ Amás tas dexándonos afitao qu'escribisti esto tu mesmu, o que lo copiasti d'un
 'longpageerror' => "'''ERROR: El testu qu'unviasti tien {{PLURAL:$1|un quilobyte|$1 quilobytes}}, que pasa del máximu de {{PLURAL:$2|un quilobyte|$2 quilobytes}}.'''
 Nun se pue grabar.",
 'readonlywarning' => "'''Avisu: La base de datos ta candada por mantenimientu, polo que nun vas poder guardar les tos ediciones nestos momentos.'''
-Seique habríes copiar el testu nun ficheru de testu y guardalu pa intentalo llueu.
+Seique habríes copiar y apegar el testu nun ficheru de testu y guardalu pa intentalo más sero.
 
 L'alministrador que la candó dio esta esplicación: $1",
 'protectedpagewarning' => "'''Avisu: Esta páxina ta candada pa que sólo los alministradores puean editala.'''
@@ -833,7 +836,6 @@ La cabera entrada del rexistru s'ufre darréu pa referencia:",
 'template-semiprotected' => '(semi-protexida)',
 'hiddencategories' => 'Esta páxina pertenez a {{PLURAL:$1|una categoría anubrida|$1 categoríes anubríes}}:',
 'edittools' => "<!-- Esti testu apaecerá baxo los formularios d'edición y xuba. -->",
-'nocreatetitle' => 'Creación de páxines limitada',
 'nocreatetext' => '{{SITENAME}} tien restrinxida la capacidá de crear páxines nueves.
 Pues volver atrás y editar una páxina esistente, o bien [[Special:UserLogin|identificate o crear una cuenta]].',
 'nocreate-loggedin' => 'Nun tienes permisu pa crear páxines nueves.',
@@ -904,7 +906,7 @@ Por favor comprueba la comparanza d'abaxo pa confirmar que ye eso lo que quies f
 El motivu dau por $3 ye ''$2''",
 
 # History pages
-'viewpagelogs' => "Ver rexistros d'esta páxina",
+'viewpagelogs' => "Ver los rexistros d'esta páxina",
 'nohistory' => "Nun hay historial d'ediciones pa esta páxina.",
 'currentrev' => 'Revisión actual',
 'currentrev-asof' => 'Revisión actual a fecha de $1',
@@ -1006,7 +1008,7 @@ $1",
 'logdelete-success' => "'''Visibilidá d'eventos establecida correutamente.'''",
 'logdelete-failure' => "'''Nun se pudo configurar la visibilidá del rexistru:'''
 $1",
-'revdel-restore' => 'Camudar visibilidá',
+'revdel-restore' => 'camudar visibilidá',
 'revdel-restore-deleted' => 'revisiones desaniciaes',
 'revdel-restore-visible' => 'revisiones visibles',
 'pagehist' => 'Historial de la páxina',
@@ -1074,7 +1076,7 @@ Asegúrate de qu'esti cambéu caltenga la continuidá del históricu de la páxi
 'lineno' => 'Llinia $1:',
 'compareselectedversions' => 'Comparar les revisiones seleicionaes',
 'showhideselectedversions' => 'Amosar/anubrir les versiones seleicionaes',
-'editundo' => 'esfacer',
+'editundo' => 'desfacer',
 'diff-multi' => "({{PLURAL:$1|Nun s'amuesa 1 revisión intermedia|Nun s'amuesen $1 revisiones intermedies}} {{PLURAL:$2|d'un usuariu|de $2 usuarios}} )",
 'diff-multi-manyusers' => "({{PLURAL:$1|Nun s'amuesa una revisión intermedia|Nun s'amuesen $1 revisiones intermedies}} de más de $2 {{PLURAL:$2|usuariu|usuarios}})",
 'difference-missing-revision' => "{{PLURAL:$2|Nun s'alcontró|Nun s'alcontraron}} {{PLURAL:$2|una revisión|$2 revisiones}} d'esta diferencia ($1).
@@ -1382,15 +1384,13 @@ Esta información sedrá pública.",
 'right-sendemail' => 'Unviar corréu a otros usuarios',
 'right-passwordreset' => 'Ver los correos de reestablecimientu de conseña',
 
+# Special:Log/newusers
+'newuserlogpage' => "Rexistru de creación d'usuarios",
+'newuserlogpagetext' => "Esti ye un rexistru de creación d'usuarios.",
+
 # User rights log
 'rightslog' => "Rexistru de perfil d'usuariu",
 'rightslogtext' => "Esti ye un rexistru de los cambeos de los perfiles d'usuariu.",
-'rightslogentry' => 'camudó la pertenencia de grupu del usuariu $1 dende $2 a $3',
-'rightslogentry-autopromote' => 'promocionó automáticamente de $2 a $3',
-'logentry-rights-rights' => '$1 camudó la pertenencia a grupos de $3 dende $4 a $5',
-'logentry-rights-rights-legacy' => '$1 camudó la pertenencia a grupos de $3',
-'logentry-rights-autopromote' => '$1 promocionó automáticamente de $4 a $5',
-'rightsnone' => '(nengún)',
 
 # Associated actions - in the sentence "You do not have permission to X"
 'action-read' => 'lleer esta páxina',
@@ -1440,7 +1440,7 @@ Esta información sedrá pública.",
 'recentchanges-label-bot' => 'Esta edición ta fecha por un bot',
 'recentchanges-label-unpatrolled' => 'Esta edición ta ensin patrullar entá',
 'rcnote' => "Equí embaxo {{PLURAL:$1|pue vese '''1''' cambiu|puen vese los caberos '''$1''' cambios}} {{PLURAL:$2|del caberu día|de los caberos '''$2''' díes}}, a fecha de $5, $4.",
-'rcnotefrom' => 'Abaxo tán los cambeos dende <b>$2</b> (hasta <b>$1</b>).',
+'rcnotefrom' => "Abaxo tan los cambeos dende '''$2''' (s'amuesen fasta '''$1''').",
 'rclistfrom' => 'Amosar los nuevos cambios dende $1',
 'rcshowhideminor' => '$1 ediciones menores',
 'rcshowhidebots' => '$1 bots',
@@ -1757,7 +1757,7 @@ Al peñerar por usuariu, s'amuesa namái la cabera versión de los ficheros que
 'filehist-deleteone' => 'desaniciar',
 'filehist-revert' => 'revertir',
 'filehist-current' => 'actual',
-'filehist-datetime' => 'Fecha/Hora',
+'filehist-datetime' => 'Data/Hora',
 'filehist-thumb' => 'Miniatura',
 'filehist-thumbtext' => 'Miniatura de la versión a fecha de $1',
 'filehist-nothumb' => 'Ensin miniatura',
@@ -2026,7 +2026,7 @@ Ver tamién les [[Special:WantedCategories|categoríes más buscaes]].",
 'linksearch-ok' => 'Guetar',
 'linksearch-text' => 'Se puen usar comodinos como "*.wikipedia.org".
 Necesita polo menos un dominiu de primer nivel, como "*.org".<br />
-Protocolos almitíos: <code>$1</code> (el predetermináu ye http:// si nun se conseña dengún protocolu).',
+{{PLURAL:$2|Protocolu almitíu|Protocolos almitíos}}: <code>$1</code> (el predetermináu ye http:// si nun se conseña dengún protocolu).',
 'linksearch-line' => '$1 enllaciáu dende $2',
 'linksearch-error' => 'Los comodinos namái puen apaecer al entamu del nome del güéspede.',
 
@@ -2039,16 +2039,12 @@ Protocolos almitíos: <code>$1</code> (el predetermináu ye http:// si nun se co
 # Special:ActiveUsers
 'activeusers' => "Llista d'usuarios activos",
 'activeusers-intro' => "Esta ye una llista d'usuarios que tuvieron alguna mena d'actividá hai menos de $1 {{PLURAL:$1|día|díes}}.",
-'activeusers-count' => '$1 {{PLURAL:$1|edición|ediciones}} nos caberos {{PLURAL:$3|día|$3 díes}}',
+'activeusers-count' => '$1 {{PLURAL:$1|edición|ediciones}} {{PLURAL:$3|nel caberu día|nos caberos $3 díes}}',
 'activeusers-from' => 'Amosar usuarios principiando dende:',
 'activeusers-hidebots' => 'Anubrir bots',
 'activeusers-hidesysops' => 'Anubrir alministradores',
 'activeusers-noresult' => "Nun s'alcontraron usuarios.",
 
-# Special:Log/newusers
-'newuserlogpage' => "Rexistru de creación d'usuarios",
-'newuserlogpagetext' => "Esti ye un rexistru de creación d'usuarios.",
-
 # Special:ListGroupRights
 'listgrouprights' => "Drechos de los grupos d'usuariu",
 'listgrouprights-summary' => "La siguiente ye una llista de grupos d'usuariu definíos nesta wiki, colos sos drechos d'accesu asociaos.
@@ -2108,7 +2104,7 @@ La direición de corréu electrónicu qu\'especificasti nes [[Special:Preference
 'usermessage-editor' => 'Mensaxería del sistema',
 
 # Watchlist
-'watchlist' => 'La mio páxina de vixilancia',
+'watchlist' => 'Llista de vixilancia',
 'mywatchlist' => 'Llista de vixilancia',
 'watchlistfor2' => 'Pa $1 $2',
 'nowatchlist' => 'La to llista de vixilancia ta vacia.',
@@ -2116,9 +2112,8 @@ La direición de corréu electrónicu qu\'especificasti nes [[Special:Preference
 'watchnologin' => 'Non identificáu',
 'watchnologintext' => 'Tienes que tar [[Special:UserLogin|identificáu]] pa poder camudar la to llista de vixilancia.',
 'addwatch' => 'Amestar a la llista de vixilancia',
-'addedwatchtext' => 'Añadióse la páxina "[[:$1]]" a la to [[Special:Watchlist|llista de vixilancia]]. Los cambeos nesta páxina y la so páxina d\'alderique asociada van salite en negrina na llista de [[Special:RecentChanges|cambeos recientes]] pa que seya más fácil de vela.
-
-Si más tarde quies quitala de la llista de vixilancia calca en "Dexar de vixilar" nel menú llateral.',
+'addedwatchtext' => 'La páxina "[[:$1]]" s\'amestó a la to [[Special:Watchlist|llista de vixilancia]].
+Los futuro cambeos nesta páxina y na so páxina d\'alderique asociada apaecerán allí.',
 'removewatch' => 'Desaniciar de la llista de vixilancia',
 'removedwatchtext' => 'Desapuntóse la páxina "[[:$1]]" de la [[Special:Watchlist|to llista de vixilancia]].',
 'watch' => 'Vixilar',
@@ -2152,7 +2147,7 @@ Si más tarde quies quitala de la llista de vixilancia calca en "Dexar de vixila
 'enotif_subject_moved' => '{{GENDER:$2|$2}} treslladó la páxina «$1» de {{SITENAME}}',
 'enotif_subject_restored' => '{{GENDER:$2|$2}} restauró la páxina «$1» de {{SITENAME}}',
 'enotif_subject_changed' => '{{GENDER:$2|$2}} camudó la páxina «$1» de {{SITENAME}}',
-'enotif_body_intro_deleted' => '{{GENDER:$2|$2}} desanició la páxina «$1» de {{SITENAME}} el $PAGEEDITDATE, consulta $3 pa ver la revisión actual.',
+'enotif_body_intro_deleted' => '{{GENDER:$2|$2}} desanició la páxina «$1» de {{SITENAME}} el $PAGEEDITDATE, consulta $3.',
 'enotif_body_intro_created' => '{{GENDER:$2|$2}} creó la páxina «$1» de {{SITENAME}} el $PAGEEDITDATE, consulta $3 pa ver la revisión actual.',
 'enotif_body_intro_moved' => '{{GENDER:$2|$2}} treslladó la páxina «$1» de {{SITENAME}} el $PAGEEDITDATE, consulta $3 pa ver la revisión actual.',
 'enotif_body_intro_restored' => '{{GENDER:$2|$2}} restauró la páxina «$1» de {{SITENAME}} el $PAGEEDITDATE, consulta $3 pa ver la revisión actual.',
@@ -2186,6 +2181,8 @@ $UNWATCHURL
 
 Más ayuda y sofitu:
 {{canonicalurl:{{MediaWiki:Helppage}}}}',
+'created' => 'creada',
+'changed' => 'camudada',
 
 # Delete
 'deletepage' => 'Esborrar páxina',
@@ -2248,7 +2245,7 @@ navegador pa cargar otra vuelta la páxina y vuelve a intentalo.',
 'protectlogpage' => 'Rexistru de proteiciones',
 'protectlogtext' => 'Darréu ta un rexistru de les protecciones de páxines.
 Consulta la [[Special:ProtectedPages|llista de páxines protexíes]] pa ver les proteiciones actives nestos momentos.',
-'protectedarticle' => 'protexó $1',
+'protectedarticle' => 'protexó «[[$1]]»',
 'modifiedarticleprotection' => 'camudó\'l nivel de proteición de "[[$1]]"',
 'unprotectedarticle' => 'quitó-y la protección a "[[$1]]"',
 'movedarticleprotection' => 'treslladó los parámetros de proteición dende "[[$2]]" a "[[$1]]"',
@@ -2257,6 +2254,8 @@ Consulta la [[Special:ProtectedPages|llista de páxines protexíes]] pa ver les
 'prot_1movedto2' => '[[$1]] treslladáu a [[$2]]',
 'protect-badnamespace-title' => 'Espaciu de nomes non protexible',
 'protect-badnamespace-text' => "Les páxines d'esti espaciu de nomes nun se puen protexer.",
+'protect-norestrictiontypes-text' => 'Esta páxina nun se pue protexer porque nun ta disponible dengún tipu de torga.',
+'protect-norestrictiontypes-title' => 'Páxina non protexible',
 'protect-legend' => 'Confirmar proteición',
 'protectcomment' => 'Motivu:',
 'protectexpiry' => 'Caduca:',
@@ -2272,9 +2271,9 @@ la base de datos. Esta ye la configuración actual de la páxina '''$1''':",
 Esta ye la configuración actual pa la páxina '''$1''':",
 'protect-cascadeon' => "Esta páxina ta protexida nestos momentos porque ta inxerida {{PLURAL:$1|na siguiente páxina, que tien|nes siguientes páxines, que tienen}} activada la proteición en cascada. Pues camudar el nivel de proteición d'esta páxina, pero nun va afeutar a la proteición en cascada.",
 'protect-default' => 'Permitir tolos usuarios',
-'protect-fallback' => 'Requier el permisu "$1"',
-'protect-level-autoconfirmed' => 'Bloquiar usuarios nuevos y non rexistraos',
-'protect-level-sysop' => 'Namái alministradores',
+'protect-fallback' => 'Permitir namái usuarios con permisu "$1"',
+'protect-level-autoconfirmed' => 'Permitir namái usuarios autoconfirmaos',
+'protect-level-sysop' => 'Permitir namái alministradores',
 'protect-summary-cascade' => 'en cascada',
 'protect-expiring' => "caduca'l $1 (UTC)",
 'protect-expiring-local' => 'caduca el $1',
@@ -2375,7 +2374,7 @@ $1",
 'contributions' => 'Collaboraciones {{GENDER:$1|del usuariu|de la usuaria}}',
 'contributions-title' => "Contribuciones d'usuariu pa $1",
 'mycontris' => 'Collaboraciones',
-'contribsub2' => 'De $1 ($2)',
+'contribsub2' => 'Pa $1 ($2)',
 'nocontribs' => "Nun s'atoparon cambeos que coincidan con esi criteriu.",
 'uctop' => '(actual)',
 'month' => "Dende'l mes (y anteriores):",
@@ -2406,7 +2405,7 @@ La cabera entrada del rexistru de bloqueos s'ufre darréu pa referencia:",
 'linkshere' => "Les páxines siguientes enllacien a '''[[:$1]]''':",
 'nolinkshere' => "Nenguna páxina enllaza a '''[[:$1]]'''.",
 'nolinkshere-ns' => "Nenguna páxina enllaza a '''[[:$1]]''' nel espaciu de nome conseñáu.",
-'isredirect' => 'páxina redirixida',
+'isredirect' => 'páxina de redireición',
 'istemplate' => 'tresclusión',
 'isimage' => 'enllaz al ficheru',
 'whatlinkshere-prev' => '{{PLURAL:$1|anterior|anteriores $1}}',
@@ -2445,7 +2444,7 @@ Esto debería facese sólo pa prevenir vandalismu como indiquen les [[{{MediaWik
 'ipbenableautoblock' => "Bloquiar automáticamente la cabera direición IP usada por esti usuariu y toles IP posteriores dende les qu'intente editar",
 'ipbsubmit' => 'Bloquiar esti usuariu',
 'ipbother' => 'Otru periodu:',
-'ipboptions' => '2 hores:2 hours,1 día:1 day,3 díes:3 days,1 selmana:1 week,2 selmanes:2 weeks,1 mes:1 month,3 meses:3 months,6 meses:6 months,1 añu:1 year,pa siempre:infinite',
+'ipboptions' => '2 hores:2 hours,1 día:1 day,3 díes:3 days,1 selmana:1 week,2 selmanes:2 weeks,1 mes:1 month,3 meses:3 months,6 meses:6 months,1 añu:1 year,indefiníu:infinite',
 'ipbotheroption' => 'otru',
 'ipbotherreason' => 'Motivu distintu/adicional:',
 'ipbhidename' => "Anubrir el nome d'usuariu d'ediciones y llistes",
@@ -2567,13 +2566,13 @@ Como nun tienes permisos p'anubrir usuarios, nun pues ver o editar el bloquéu d
 'move-page' => 'Treslladar $1',
 'move-page-legend' => 'Treslladar páxina',
 'movepagetext' => "Usando'l siguiente formulariu vas renomar una páxina, treslladando'l so historial al nuevu nome.
-El nome vieyu va convertise nuna redireición al nuevu.
-Pues actualizar redireiciones qu'enllacien al títulu orixinal automáticamente.
+El nome vieyu va convertise nuna páxina de redireición al títulu nuevu.
+Pues actualizar les redireiciones qu'enllacien al títulu orixinal automáticamente.
 Si prefieres nun lo facer, asegúrate de que nun dexes [[Special:DoubleRedirects|redireiciones dobles]] o [[Special:BrokenRedirects|rotes]].
-Tu yes el responsable de facer que los enllaces queden apuntando aonde se supón qu'han apuntar.
+Tu yes el responsable de facer que los enllaces queden apuntando au se supón que tienen d'apuntar.
 
-Recuerda que la páxina '''nun''' va movese si yá hai una páxina col nuevu títulu, a nun ser que tea vacia o seya una redireición que nun tenga historial.
-Esto significa que pues volver a renomar una páxina col nome orixinal si t'enquivoques, y que nun pues sobreescribir una páxina yá esistente.
+Recuerda que la páxina '''nun''' va movese si yá hai una páxina col nuevu títulu, a nun ser que seya una redireición y nun tenga historial.
+Esto significa que pues volver a renomar una páxina col nome orixinal si t'enquivoques, y nun pues sobreescribir una páxina yá esistente.
 
 ¡AVISU!'''
 Esti pue ser un cambéu importante y inesperáu pa una páxina popular;
@@ -2755,6 +2754,7 @@ Guárdalu nel ordenador y xúbilu equí.",
 'import-error-interwiki' => "La páxina «$1» nun s'importó porque'l so nome ta acutáu pa enllaces esternos (interwiki).",
 'import-error-special' => "La páxina «$1» nun s'importó porque pertenez a un espaciu de nomes especial que nun permite les páxines.",
 'import-error-invalid' => "La páxina «$1» nun s'importó porque tien un nome inválidu.",
+'import-error-unserialize' => 'Nun se pudo quitar la serialización de la revisión $2 de la páxina "$1". Nel informe figura que la revisión usa\'l modelu de conteníu $3 serializáu como $4.',
 'import-options-wrong' => '{{PLURAL:$2|Opción enquivocada|Opciones enquivocaes}}: <nowiki>$1</nowiki>',
 'import-rootpage-invalid' => 'La páxina raíz dada ye un títulu inválidu.',
 'import-rootpage-nosubpage' => 'L\'espaciu de nomes "$1" de la páxina raíz nun permite subpáxines.',
@@ -2793,7 +2793,7 @@ Guárdalu nel ordenador y xúbilu equí.",
 'tooltip-ca-addsection' => 'Emprima una seición nueva',
 'tooltip-ca-viewsource' => 'Esta páxina ta protexida.
 Pues ver el so códigu fonte.',
-'tooltip-ca-history' => "Versiones antigües d'esta páxina.",
+'tooltip-ca-history' => "Versiones antigües d'esta páxina",
 'tooltip-ca-protect' => 'Protexer esta páxina',
 'tooltip-ca-unprotect' => 'Camudar la proteición desta páxina',
 'tooltip-ca-delete' => 'Desaniciar esta páxina',
@@ -2808,7 +2808,7 @@ Pues ver el so códigu fonte.',
 'tooltip-n-mainpage' => 'Visita la portada',
 'tooltip-n-mainpage-description' => 'Visita la portada',
 'tooltip-n-portal' => "Tocante al proyeutu, lo qué pues facer, ú s'alcuentren les coses",
-'tooltip-n-currentevents' => 'Información sobre los asocedíos actuales',
+'tooltip-n-currentevents' => "Alcontrar información de contestu sobro asocedíos d'actualidá",
 'tooltip-n-recentchanges' => 'La llista de cambios recientes de la wiki.',
 'tooltip-n-randompage' => 'Carga una páxina al debalu',
 'tooltip-n-help' => 'El llugar pa deprender',
@@ -2821,7 +2821,7 @@ Pues ver el so códigu fonte.',
 'tooltip-t-upload' => 'Xubir ficheros',
 'tooltip-t-specialpages' => 'Llista de toles páxines especiales',
 'tooltip-t-print' => "Versión imprentable d'esta páxina",
-'tooltip-t-permalink' => 'Enllaz permanente a esta versión de la páxina',
+'tooltip-t-permalink' => 'Enllaz permanente a esta revisión de la páxina',
 'tooltip-ca-nstab-main' => 'Ver la páxina de conteníu',
 'tooltip-ca-nstab-user' => "Ver la páxina d'usuariu",
 'tooltip-ca-nstab-media' => 'Amuesa la páxina de multimedia',
@@ -2837,7 +2837,7 @@ Pues ver el so códigu fonte.',
 'tooltip-preview' => 'Vista previa de los cambios, ¡usa esto enantes de guardar!',
 'tooltip-diff' => 'Amuesa los cambios que fixisti nel testu.',
 'tooltip-compareselectedversions' => "Ver les diferencies ente les dos revisiones seleicionaes d'esta páxina.",
-'tooltip-watch' => 'Amiesta esta páxina na to llista de vixilancia',
+'tooltip-watch' => 'Amiesta esta páxina a la to llista de vixilancia',
 'tooltip-watchlistedit-normal-submit' => 'Desaniciar títulos',
 'tooltip-watchlistedit-raw-submit' => 'Anovar llista de vixilancia',
 'tooltip-recreate' => 'Vuelve a crear la páxina magar que se tenga esborrao',
@@ -2938,6 +2938,7 @@ Probablemente tea causao por un enllaz a un sitiu esternu de la llista prieta.',
 'pageinfo-magic-words' => '{{PLURAL:$1|Pallabra máxica|Pallabres máxiques}} ($1)',
 'pageinfo-hidden-categories' => '{{PLURAL:$1|Categoría anubrida|Categoríes anubríes}} ($1)',
 'pageinfo-templates' => '{{PLURAL:$1|Plantía incluída|Plantíes incluíes}} ($1)',
+'pageinfo-transclusions' => '{{PLURAL:$1|Páxina|Páxines}} trescluyíes en ($1)',
 'pageinfo-toolboxlink' => 'Información de la páxina',
 'pageinfo-redirectsto' => 'Redirixe a',
 'pageinfo-redirectsto-info' => 'información',
@@ -2946,6 +2947,10 @@ Probablemente tea causao por un enllaz a un sitiu esternu de la llista prieta.',
 'pageinfo-protect-cascading' => "Les proteiciones s'activen en serie dende equí",
 'pageinfo-protect-cascading-yes' => 'Sí',
 'pageinfo-protect-cascading-from' => "Les proteiciones s'activen en serie dende",
+'pageinfo-category-info' => 'Información de la categoría',
+'pageinfo-category-pages' => 'Númberu de páxines',
+'pageinfo-category-subcats' => 'Númberu de subcategoríes',
+'pageinfo-category-files' => 'Númberu de ficheros',
 
 # Skin names
 'skinname-standard' => 'Clásicu',
@@ -2999,6 +3004,7 @@ Al executalu pues comprometer el to sistema.",
 'file-nohires' => 'Nun ta disponible con mayor resolución.',
 '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-preview' => "Tamañu d'esta previsualización: $1.",
 'show-big-image-other' => '{{PLURAL:$2|Otra resolución|Otres resoluciones}}: $1.',
@@ -3028,6 +3034,8 @@ Al executalu pues comprometer el to sistema.",
 'minutes' => '{{PLURAL:$1|$1 minutu|$1 minutos}}',
 'hours' => '{{PLURAL:$1|$1 hora|$1 hores}}',
 'days' => '{{PLURAL:$1|$1 día|$1 díes}}',
+'months' => '{{PLURAL:$1|$1 mes|$1 meses}}',
+'years' => '{{PLURAL:$1|$1 añu|$1 años}}',
 'ago' => 'hai $1',
 'just-now' => 'agora mesmo',
 
@@ -3693,7 +3701,7 @@ Les imáxenes amuésense a resolución completa; les demás tribes d'archivu exe
 'specialpages-group-highuse' => 'Páxines mui usaes',
 'specialpages-group-pages' => 'Llistes de páxines',
 'specialpages-group-pagetools' => 'Ferramientes de páxina',
-'specialpages-group-wiki' => 'Datos wiki y ferramientes',
+'specialpages-group-wiki' => 'Datos y ferramientes',
 'specialpages-group-redirects' => 'Páxines especiales de redireición',
 'specialpages-group-spam' => 'Ferramientes pa spam',
 
@@ -3790,8 +3798,12 @@ Les imáxenes amuésense a resolución completa; les demás tribes d'archivu exe
 'logentry-newusers-newusers' => "Se creó la cuenta d'usuariu $1",
 'logentry-newusers-create' => "Se creó la cuenta d'usuariu $1",
 'logentry-newusers-create2' => "$1 creó la cuenta d'usuariu $3",
+'logentry-newusers-byemail' => "$1 creó la cuenta d'usuariu $3 y la contraseña uviose per corréu electrónicu",
 'logentry-newusers-autocreate' => 'La cuenta $1 se creó automáticamente',
-'newuserlog-byemail' => 'conseña unviada per corréu electrónicu',
+'logentry-rights-rights' => '$1 camudó la pertenencia a grupos de $3 dende $4 a $5',
+'logentry-rights-rights-legacy' => '$1 camudó la pertenencia a grupos de $3',
+'logentry-rights-autopromote' => '$1 promocionó automáticamente de $4 a $5',
+'rightsnone' => '(nengún)',
 
 # Feedback
 'feedback-bugornote' => 'Si tas preparáu pa describir un problema técnicu en detalle, [$1 informa del fallu].
@@ -3845,6 +3857,7 @@ D\'otra miente, pues usar el formulariu cenciellu d\'abaxo. El to comentariu apa
 'api-error-ok-but-empty' => 'Fallu internu: nun hai respuesta del sirvidor.',
 'api-error-overwrite' => 'Nun ta permitío sobroscribir un ficheru esistente.',
 'api-error-stashfailed' => 'Fallu internu: el sirvidor nun pudo guardar el ficheru temporal.',
+'api-error-publishfailed' => 'Fallu internu: el sirvidor nun pudo espublizar el ficheru temporal.',
 'api-error-timeout' => 'El sirvidor nun respondió nel tiempu esperáu.',
 'api-error-unclassified' => 'Hebo un fallu desconocíu',
 'api-error-unknown-code' => 'Fallu desconocíu: «$1»',
@@ -3865,6 +3878,4 @@ D\'otra miente, pues usar el formulariu cenciellu d\'abaxo. El to comentariu apa
 'duration-centuries' => '$1 {{PLURAL:$1|sieglu|sieglos}}',
 'duration-millennia' => '$1 {{PLURAL:$1|mileniu|milenios}}',
 
-# Unknown messages
-'svg-long-error' => 'Ficheru SVG inválidu: $1',
 );
index e8c1654..7895ca4 100644 (file)
@@ -659,7 +659,6 @@ Rin dere abdiplekul da va webeks miv suteyel ike mal sangiskafa ok gundafa nuyaf
 'template-protected' => '(nendana)',
 'template-semiprotected' => '(nendamana)',
 'hiddencategories' => 'Batu bu tir bewafu gu {{PLURAL:$1|1 palsena loma|$1 palsena loma}}:',
-'nocreatetitle' => 'Irutana buredura',
 'nocreatetext' => '{{SITENAME}} va roredura va warzafu bu irutar.
 Rodimal aze va tisu bu robetal oke [[Special:UserLogin|va int rodogluyal oke ropataredul]].',
 'nocreate-loggedin' => 'Rin va warzafu bu me ronoredul.',
@@ -1036,10 +1035,12 @@ Rinafe e-mail mane me zo razdar viele ar webesik uzerar.',
 'right-userrights-interwiki' => "Betara va favesikrokeem koe aro 'wiki' xo",
 'right-siteadmin' => 'Origakelekara is dimelekara',
 
+# Special:Log/newusers
+'newuserlogpage' => 'Buredura "log"',
+
 # User rights log
 'rightslog' => '"Log" bu va favesikrokeem',
 'rightslogtext' => 'Tir "log" va betara va favesikroka.',
-'rightsnone' => '(mek)',
 
 # Associated actions - in the sentence "You do not have permission to X"
 'action-read' => 'Redura va batu bu',
@@ -1415,9 +1416,6 @@ Also see [[Special:WantedCategories|wanted categories]].',
 'listusers-submit' => 'Nedira',
 'listusers-noresult' => 'Mek trasiyin favesik.',
 
-# Special:Log/newusers
-'newuserlogpage' => 'Buredura "log"',
-
 # Special:ListGroupRights
 'listgrouprights' => 'Rokeem ke favesiklospa',
 'listgrouprights-group' => 'Lospa',
@@ -1518,6 +1516,8 @@ To change your watchlist settings, visit
 
 Feedback and further assistance:
 {{canonicalurl:{{MediaWiki:Helppage}}}}',
+'created' => 'reduyun',
+'changed' => 'betayan',
 
 # Delete
 'deletepage' => 'Busulara',
@@ -2385,6 +2385,6 @@ This confirmation code will expire at $4.',
 # New logging system
 'revdelete-restricted' => 'irutara rewana pu ristusik',
 'revdelete-unrestricted' => 'irutara tiolteyena pu ristusik',
-'newuserlog-byemail' => 'remravlem staksayan kan e-mail',
+'rightsnone' => '(mek)',
 
 );
index 1fbf8f1..bfdc182 100644 (file)
@@ -7,6 +7,7 @@
  * @ingroup Language
  * @file
  *
+ * @author AZISS
  * @author Cekli829
  * @author Don Alessandro
  * @author E THP
@@ -15,6 +16,7 @@
  * @author Erdemaslancan
  * @author Gulmammad
  * @author Kaganer
+ * @author Khan27
  * @author PPerviz
  * @author PrinceValiant
  * @author Sortilegus
@@ -112,7 +114,7 @@ $messages = array(
 'tog-externaleditor' => 'Susmaya görə xarici müqayisə proqramlarından istifadə et',
 'tog-externaldiff' => 'Susmaya görə xarici müqayisə proqramlarından istifadə et',
 'tog-showjumplinks' => '"Keçid et:" linklərini aktivləşdir',
-'tog-uselivepreview' => 'Canlı sınaq baxışı xüsusiyyətini istifadə et (JavaScript, sınaq mərhələsində)',
+'tog-uselivepreview' => 'Canlı sınaq baxışı xüsusiyyətindən istifadə et (JavaScript tələb edir, sınaq mərhələsindədir)',
 'tog-forceeditsummary' => 'Qısa məzmunu boş saxladıqda mənə bildir',
 'tog-watchlisthideown' => 'Mənim redaktələrimi izləmə siyahısında gizlət',
 'tog-watchlisthidebots' => 'Bot redaktələrini izləmə siyahısında gizlət',
@@ -240,13 +242,14 @@ $messages = array(
 'vector-simplesearch-preference' => 'İnkişaf etmiş axtarma təkliflərini gətir (yalnız Vector görünüşü üçün)',
 'vector-view-create' => 'Yarat',
 'vector-view-edit' => 'Redaktə',
-'vector-view-history' => 'Tarixçə',
+'vector-view-history' => 'Tarixçəyə bax',
 'vector-view-view' => 'Oxu',
 'vector-view-viewsource' => 'Mənbəyə bax',
 'actions' => 'Hərəkətlər',
 'namespaces' => 'Adlar fəzası',
 'variants' => 'Variantlar',
 
+'navigation-heading' => 'Naviqasiya menyusu',
 'errorpagetitle' => 'Xəta',
 'returnto' => '$1 səhifəsinə qayıt.',
 'tagline' => '{{SITENAME}} saytından',
@@ -328,7 +331,7 @@ $1',
 'policy-url' => 'Project:Qaydalar',
 'portal' => 'Kənd meydanı',
 'portal-url' => 'Project:Kənd meydanı',
-'privacy' => 'Gizlilik prinsipi',
+'privacy' => 'Məxfilik siyasəti',
 'privacypage' => 'Project:Gizlilik prinsipi',
 
 'badaccess' => 'İcazə xətası',
@@ -476,12 +479,16 @@ Göstərilən səbəb: "\'\'$2\'\'".',
 'logouttext' => "'''Sistemdən çıxdınız.'''
 
 Siz {{SITENAME}} saytını anonim olaraq istifadə etməyə davam edə bilər və ya eyni, yaxud başqa istifadəçi adı ilə <span class='plainlinks'>[$1 yenidən daxil ola]</span> bilərsiniz. Veb-brauzerin keş yaddaşını təmizləyənədək bəzi səhifələr hələ də sistemdə imişsiniz kimi görünə bilər.",
+'welcomeuser' => 'Xoş gəldin $1!',
+'welcomecreation-msg' => 'Hesabınız yaradıldı.
+[[Special:Preferences|{{SITENAME}} nizamlamalarınızı]] dəyişdirməyi unutmayın.',
 'yourname' => 'İstifadəçi adı',
 'yourpassword' => 'Parol:',
 'yourpasswordagain' => 'Parolu təkrar yazın:',
 'remembermypassword' => 'Məni bu kompyuterdə xatırla (maksimum $1 {{PLURAL:$1|gün|gün}})',
 'securelogin-stick-https' => 'Daxil olduqdan sonra HTTPS-lə əlaqədə qal',
 '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.',
 'login' => 'Daxil ol',
 'nav-login-createaccount' => 'Daxil ol / hesab yarat',
@@ -543,6 +550,7 @@ Aşağıdakı xidmətlərin heç biri üçün Sizə e-məktub göndərilməyəc
 'emailconfirmlink' => 'E-poçt ünvanını təsdiq et',
 'invalidemailaddress' => 'E-poçt ünvanınızı qeyri-düzgün formatda olduğu üçün qəbul edə bilmirik.
 Xahiş edirik düzgün formatlı ünvan daxil edin və ya bu sahəni boş qoyun.',
+'emaildisabled' => 'Bu saytdan e-poçt göndərə bilməzsiniz.',
 'accountcreated' => 'Hesab yaradıldı',
 'accountcreatedtext' => '$1 üçün istifadəçi hesabı yaradıldı.',
 'createaccount-title' => '{{SITENAME}} hesabın yaradılması',
@@ -593,7 +601,7 @@ Müvəqqəti parol: $2',
 'changeemail' => 'E-məktub ünvanını dəyiş',
 'changeemail-oldemail' => 'Hazırki e-poçt ünvanı:',
 'changeemail-newemail' => 'Yeni e-poçt ünvanı:',
-'changeemail-none' => '(heç biri)',
+'changeemail-none' => '(yoxdur)',
 'changeemail-submit' => 'E-poçtu dəyiş',
 'changeemail-cancel' => 'İmtina',
 
@@ -623,7 +631,7 @@ Müvəqqəti parol: $2',
 'minoredit' => 'Kiçik redaktə',
 'watchthis' => 'Bu səhifəni izlə',
 'savearticle' => 'Səhifəni qeyd et',
-'preview' => 'Sınaq göstərişi',
+'preview' => 'Sınaq görüntüsü',
 'showpreview' => 'Sınaq göstərişi',
 'showlivepreview' => 'Canlı sınaq göstərişi',
 'showdiff' => 'Dəyişiklikləri göstər',
@@ -704,7 +712,6 @@ Siz eyni zamanda söz verirsiniz ki, bu yazıları siz özünüz yazmısınız v
 'template-semiprotected' => '(yarım-mühafizə)',
 'hiddencategories' => 'Bu səhifə {{PLURAL:$1|1 gizli kateqoriyaya|$1 gizli kateqoriyaya}} aiddir:',
 'edittools-upload' => '-',
-'nocreatetitle' => 'Səhifə yaratma məhdudlaşdırılıb.',
 'nocreatetext' => '{{SITENAME}} saytında yeni səhifələrin yaradılması imkanları məhdudlaşdırılıb.
 Siz geri qayıdıb mövcud səhifəni və ya  [[Special:UserLogin|sistemə təqdim olunma və ya yeni hesab açmaq]] səhifəsini redaktə edə bilərsiniz.',
 'nocreate-loggedin' => 'Sizin yeni səhifələr yaratmaq üçün icazəniz yoxdur.',
@@ -961,7 +968,7 @@ $1",
 '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östərişi',
+'skin-preview' => 'Sınaq görüntüsü',
 'datedefault' => 'Seçim yoxdur',
 'prefs-beta' => 'Beta xüsusiyyətlər',
 'prefs-datetime' => 'Tarix və vaxt',
@@ -1169,11 +1176,13 @@ Həmçinin kimliyinizi gostərmədən belə, başqalarının sizinlə istifadə
 'right-siteadmin' => 'Məlumatlar bazasının bloklanması və blokun götürülməsi',
 'right-sendemail' => 'Digər istifadəçilərə elektron poçt göndər',
 
+# Special:Log/newusers
+'newuserlogpage' => 'Yeni istifadəçilərin qeydiyyatı',
+'newuserlogpagetext' => 'Yeni qeydiyyatdan keçmiş istifadəçilərin siyahısı.',
+
 # User rights log
 'rightslog' => 'İstifadəçi hüquqları qeydləri',
 'rightslogtext' => 'İstifadəçi hüquqları dəyişikliyi qeydləri.',
-'rightslogentry' => '$1 adlı istifadəçinin istifadəçi qruplarındakı üzvlüyü dəyişdirildi: $2 ► $3',
-'rightsnone' => '(heç biri)',
 
 # Associated actions - in the sentence "You do not have permission to X"
 'action-read' => 'bu səhifənin oxunması',
@@ -1649,10 +1658,6 @@ Həmçinin, [[Special:WantedCategories|tələb olunan kateqoriyalara]] baxın.',
 'activeusers-hidesysops' => 'İdarəçiləri gizlə',
 'activeusers-noresult' => 'İstifadəçi tapılmadı.',
 
-# Special:Log/newusers
-'newuserlogpage' => 'Yeni istifadəçilərin qeydiyyatı',
-'newuserlogpagetext' => 'Yeni qeydiyyatdan keçmiş istifadəçilərin siyahısı.',
-
 # Special:ListGroupRights
 'listgrouprights' => 'İstifadəçi qruplarının hüquqları',
 'listgrouprights-summary' => 'Bu vikidə olan istifadəçi siyahıları və onların hüquqları aşağıda göstərilmişdir.
@@ -1765,6 +1770,8 @@ Siz haqqında söhbət gedən səhifəyə baxanadək səhifədəki digər dəyi
 
 Yardım və təklifləriniz üçün:
 {{canonicalurl:{{MediaWiki:Helppage}}}}',
+'created' => 'yaradıldı',
+'changed' => 'dəyişdi',
 
 # Delete
 'deletepage' => 'Səhifəni sil',
@@ -2985,7 +2992,7 @@ Bu saytda texniki problemlər var.',
 'logentry-newusers-create' => '$1 istifadəçi hesabı yaratdı',
 'logentry-newusers-create2' => '$1 $3 üçün istifadəçi hesabı yaratdı',
 'logentry-newusers-autocreate' => '$1 hesabı avtomatik yaradıldı',
-'newuserlog-byemail' => 'parol e-maillə göndərildi',
+'rightsnone' => '(yoxdur)',
 
 # Feedback
 'feedback-subject' => 'Mövzu:',
index 59e1131..53fd602 100644 (file)
 $fallback = 'fa';
 $rtl = true;
 
+$namespaceNames = array(
+       NS_MEDIA            => 'مئدیا',
+       NS_SPECIAL          => 'اؤزل',
+       NS_MAIN             => '',
+       NS_TALK             => 'دانیشیق',
+       NS_USER             => 'ایستیفاده‌چی',
+       NS_USER_TALK        => 'ایستیفاده‌چی_دانیشیغی',
+       NS_PROJECT_TALK     => '$1_دانیشیق',
+       NS_FILE             => 'فایل',
+       NS_FILE_TALK        => 'فایل_دانیشیغی',
+       NS_MEDIAWIKI        => 'مئدیا‌ویکی',
+       NS_MEDIAWIKI_TALK   => 'مئدیا‌ویکی_دانیشیغی',
+       NS_TEMPLATE         => 'شابلون',
+       NS_TEMPLATE_TALK    => 'شابلون_دانیشیغی',
+       NS_HELP             => 'یاردیم',
+       NS_HELP_TALK        => 'یاردیم_دانیشیغی',
+       NS_CATEGORY         => 'بؤلمه',
+       NS_CATEGORY_TALK    => 'بؤلمه_دانیشیغی',
+);
+
+$specialPageAliases = array(
+       'Activeusers'               => array( 'چالیشقان_ایستسفاده‌چیلر' ),
+       'Allmessages'               => array( 'بوتون_مئساژلار' ),
+       'Allpages'                  => array( 'بوتون_صحیفه‌لر' ),
+       'Ancientpages'              => array( 'اسکی_صحیفه‌لر' ),
+       'Badtitle'                  => array( 'پیس_آد' ),
+       'Blankpage'                 => array( 'بوش_صحیفه' ),
+       'ChangePassword'            => array( 'رمزی_دَییش' ),
+       'CreateAccount'             => array( 'حساب_یارات' ),
+       'Mycontributions'           => array( 'چالیشمالاریم' ),
+       'Mypage'                    => array( 'صحیفه‌م' ),
+       'Mytalk'                    => array( 'دانیشیغیم' ),
+       'Myuploads'                 => array( 'یوکله‌دیکلریم' ),
+       'Newimages'                 => array( 'یئنی_فایل‌لار' ),
+       'Newpages'                  => array( 'یئنی_صحیفه‌لر' ),
+       'PasswordReset'             => array( 'رمز_دَییشمه‌' ),
+       'Randompage'                => array( 'راست‌گله' ),
+       'Recentchanges'             => array( 'سون_دَییشیکلر' ),
+       'Search'                    => array( 'آختار' ),
+       'Shortpages'                => array( 'قیسسا_صحیفه‌لر' ),
+       'Specialpages'              => array( 'اؤزل_صحیفه‌لر' ),
+       'Statistics'                => array( 'آمار' ),
+       'Unusedcategories'          => array( 'ایشلنممیش_بؤلمه‌لر' ),
+       'Unusedimages'              => array( 'ایشلنممیش_فایل‌لار' ),
+       'Unusedtemplates'           => array( 'ایشلنممیش_شابلونلار' ),
+       'Unwatchedpages'            => array( 'باخیلمامیش_صحیفه‌لر' ),
+       'Upload'                    => array( 'یوکله' ),
+       'Version'                   => array( 'نوسخه' ),
+       'Watchlist'                 => array( 'ایزله‌دیکلر' ),
+);
+
+$magicWords = array(
+       'numberofpages'             => array( '1', 'صحیفه‌لر_ساییسی', 'تعدادصفحه‌ها', 'NUMBEROFPAGES' ),
+       'numberofarticles'          => array( '1', 'مقاله‌لر_ساییسی', 'تعدادمقاله‌ها', 'NUMBEROFARTICLES' ),
+       'numberoffiles'             => array( '1', 'قایل‌لار_ساییسی', 'تعدادپرونده‌ها', 'NUMBEROFFILES' ),
+       'numberofusers'             => array( '1', 'ایستیفاده‌چیلر_ساییسی', 'تعدادکاربران', 'NUMBEROFUSERS' ),
+       'numberofactiveusers'       => array( '1', 'چالیشقان_ایستیفاده‌چیلر', 'کاربران‌فعال', 'کاربران_فعال', 'NUMBEROFACTIVEUSERS' ),
+       'numberofedits'             => array( '1', 'دَییشدیرمه_ساییسی', 'تعدادویرایش‌ها', 'NUMBEROFEDITS' ),
+       'pagename'                  => array( '1', 'صحیفه‌نین_آدی', 'نام‌صفحه', 'نام_صفحه', 'PAGENAME' ),
+       'img_right'                 => array( '1', 'ساغ', 'راست', 'right' ),
+       'img_left'                  => array( '1', 'سول', 'چپ', 'left' ),
+       'img_none'                  => array( '1', 'هئچ', 'هیچ', 'none' ),
+       'img_framed'                => array( '1', 'قابیق', 'قاب', 'framed', 'enframed', 'frame' ),
+);
+
 $messages = array(
 # User preference toggles
 'tog-underline' => 'باغلانتی‌لارین آلتینی خطله:',
@@ -78,20 +143,20 @@ $messages = array(
 'editfont-serif' => 'بوجاق‌لی فونت',
 
 # Dates
-'sunday' => 'سود گونو',
-'monday' => 'دوزگونو',
-'tuesday' => 'آرا گون',
-'wednesday' => 'اوْدگونو',
-'thursday' => 'سوگونو',
-'friday' => 'Ø¢Û\8cÙ\86Û\8câ\80\8cÚ¯Ù\88Ù\86',
-'saturday' => 'يئل‌گونو',
-'sun' => 'یکشنبه',
-'mon' => 'دÙ\88Ø´Ù\86بÙ\87',
-'tue' => 'سه‌شنبه',
-'wed' => 'چهارشنبه',
-'thu' => 'پنج‌شنبه',
-'fri' => 'جÙ\88Ù\85عÙ\87',
-'sat' => 'شنبه',
+'sunday' => 'سود گونو(یکشنبه)',
+'monday' => 'دوزگونو(دوشنبه)',
+'tuesday' => 'آرا گون(سه‌شنبه)',
+'wednesday' => 'اوْدگونو(چهارشنبه)',
+'thursday' => 'سوگونو(پنجشنبه)',
+'friday' => 'جÙ\88Ù\85ا(Ø¢Û\8cÙ\86Û\8câ\80\8cÚ¯Ù\88Ù\86)',
+'saturday' => 'يئل‌گونو(شنبه)',
+'sun' => 'سود گونو(یکشنبه)',
+'mon' => 'دÙ\88زگÙ\88Ù\86Ù\88(دÙ\88Ø´Ù\86بÙ\87)',
+'tue' => 'سه‌شنبه(آرا گون)',
+'wed' => 'اوْدگونو (چهارشنبه)',
+'thu' => 'سوگونو(پنجشنبه)',
+'fri' => 'Ø¢Û\8cÙ\86Û\8câ\80\8cÚ¯Ù\88Ù\86(جÙ\88Ù\85ا)',
+'sat' => 'يئل‌گونو(شنبه)',
 'january' => 'ژانویه',
 'february' => 'فئوریه',
 'march' => 'مارس',
@@ -153,6 +218,7 @@ $messages = array(
 'newwindow' => '(یئنی پنجره‌ده آچیلیر)',
 'cancel' => 'لغو ائت',
 'moredotdotdot' => 'داها...',
+'morenotlisted' => 'داها آرتیق لیست اولونماییب‌دیر...',
 'mypage' => 'مقاله',
 'mytalk' => 'دانیشیق',
 'anontalk' => 'بو آی‌پی آدرسینه دانیشیق',
@@ -162,7 +228,7 @@ $messages = array(
 # Cologne Blue skin
 'qbfind' => 'تاپ',
 'qbbrowse' => 'گؤزدن گئچید',
-'qbedit' => 'دَيیشدیر',
+'qbedit' => 'دَییشدیر',
 'qbpageoptions' => 'بو صحیفه‌‌',
 'qbmyoptions' => 'منیم صحیفه‌‌لریم',
 'qbspecialpages' => 'اؤزل صحیفه‌لر',
@@ -182,7 +248,7 @@ $messages = array(
 'vector-view-history' => 'گئچمیشه باخ',
 'vector-view-view' => 'اوخو',
 'vector-view-viewsource' => 'قایناغا باخ',
-'actions' => 'چالیشمالار',
+'actions' => 'ایشلر',
 'namespaces' => 'آدلار فضاسی',
 'variants' => 'واریانتلار',
 
@@ -233,7 +299,7 @@ $messages = array(
 'viewhelppage' => 'یاردیم صحیفه‌سینه باخین',
 'categorypage' => 'بؤلمه صحیفه‌‌سینی گؤستر',
 'viewtalkpage' => 'دانیشیغا باخین',
-'otherlanguages' => 'آیری دیللرده',
+'otherlanguages' => 'آیری دیللرده',
 'redirectedfrom' => '($1 صحیفه‌‌سیندن يؤنلن‌دیریلمیش‌دیر)',
 'redirectpagesub' => 'یوللاندیرما صحیفه‌سی',
 'lastmodifiedat' => 'بو صحیفه‌‌ سون دفعه‌‌ $1، $2 چاغیندا دَییشیلیب‌دیر.',
@@ -266,14 +332,14 @@ $1',
 'mainpage' => 'آنا صحیفه',
 'mainpage-description' => 'آنا صحیفه',
 'policy-url' => 'Project:قایدالار',
-'portal' => 'کند مئيدانی',
-'portal-url' => 'Project: توپلوم پورتالی',
+'portal' => 'توپلوم پورتالی',
+'portal-url' => 'Project:توپلوم پورتالی',
 'privacy' => 'گیزلیلیک سیاستی',
 'privacypage' => 'Project:گیزلیلیک سیاستی',
 
 'badaccess' => 'یول وئرمه خطاسی',
 'badaccess-group0' => 'ایسته‌دیگینیز ایشه ایجازه‌نیز یوخدور.',
-'badaccess-groups' => 'ایسته‌دیگینیز ایشین ایجازه‌سی، تکجه بو {{PLURAL:$2|گروپ|گروپلار}}داکی ایشلدنلره وئریلیب‌دیر: $1.',
+'badaccess-groups' => 'ایسته‌دیگینیز ایشین ایجازه‌سی، تکجه بو {{PLURAL:$2|قروپ|قروپلار}}داکی ایشلدنلره وئریلیب‌دیر: $1.',
 
 'versionrequired' => 'مدئدیاویکی یازیلیمینین $1 نوسخه‌سی لازیم‌دیر',
 'versionrequiredtext' => 'بو یارپاغی ایشلتدماغا، مئدیاویکی یازیلیمینین $1 نوسخه‌سی لازیم‌دیر.
@@ -284,13 +350,13 @@ $1',
 'youhavenewmessages' => 'سیزین $1 ($2) وارینیزدیر.',
 'newmessageslink' => 'یئنی مئساژلار',
 'newmessagesdifflink' => 'سون دَییشیکلیک',
-'youhavenewmessagesfromusers' => 'سÛ\8cزÛ\8cÙ\86 {{PLURAL:$3|بÛ\8cر Ø¨Ø§Ø´Ù\82ا Ø§Û\8cØ´Ù\84دÙ\86â\80\8cدÙ\86|$3 Ø§Û\8cØ´Ù\84دÙ\86‌دن}} $1 وارینیزدیر ($2).',
+'youhavenewmessagesfromusers' => 'سÛ\8cزÛ\8cÙ\86 {{PLURAL:$3|بÛ\8cر Ø¢Û\8cرÛ\8c Ø§Û\8cستÛ\8cÙ\81ادÙ\87â\80\8cÚ\86Û\8câ\80\8cدÙ\86|$3 Ø§Û\8cستÛ\8cÙ\81ادÙ\87â\80\8cÚ\86Û\8c‌دن}} $1 وارینیزدیر ($2).',
 'youhavenewmessagesmanyusers' => 'سیزین چوخلو ایشلدنلردن $1 وارینیزدیر ($2).',
 'newmessageslinkplural' => '{{PLURAL:$1|بیر یئنی مئساژ|یئنی مئساژلار}}',
 'newmessagesdifflinkplural' => 'سون {{PLURAL:$1|دَییشیکلیک|دَییشیکلیکلر}}',
 'youhavenewmessagesmulti' => '$1-دا یئنی بیلدیرینیز وار.',
 'editsection' => 'دَییشدیر',
-'editold' => 'دَییشدیرمک',
+'editold' => 'دَییشدیر',
 'viewsourceold' => 'قایناغا باخ',
 'editlink' => 'دَییشدیر',
 'viewsourcelink' => 'قایناغا باخ',
@@ -298,7 +364,7 @@ $1',
 'toc' => 'ایچینده‌کیلر',
 'showtoc' => 'گؤستر',
 'hidetoc' => 'گیزلت',
-'collapsible-collapse' => 'دارالت',
+'collapsible-collapse' => 'گیزلت',
 'collapsible-expand' => 'گئنیشلندیر',
 'thisisdeleted' => '$1-نا باخ یا اونو قایتار؟',
 'viewdeleted' => '$1 گؤستریلسین؟',
@@ -366,15 +432,15 @@ $1',
 'readonly_lag' => 'ایکینجی درجه‌لی دیتابیس خیدمت‌چیلری، آنا دیتابیسه یئتیشماغا گؤره، بو دیتابیس اوتوماتیک باغلانیب‌دیر',
 'internalerror' => 'ایچ خطاسی',
 'internalerror_info' => 'ایچ خطاسی: $1',
-'fileappenderrorread' => 'اکلَنَنده، «$1»-نو اوخوماق مومکون دئییل‌دیر.',
-'fileappenderror' => '«$1»-نو «$2»-نا اکله‌مک اولانمادی.',
-'filecopyerror' => '«$1» فایلینی، «$2»-نا کوپی اولانمادی.',
+'fileappenderrorread' => 'اکلَنَنده، «$1»-ی اوخوماق مومکون دئییل‌دیر.',
+'fileappenderror' => '«$1»-ی «$2»-ه اکله‌مک اولانمادی.',
+'filecopyerror' => '«$1» فایلی، «$2»-ه کوپی اولانمادی.',
 'filerenameerror' => '«$1» فایلین آدی «$2»-نا دَییشدیریلنمه‌دی.',
 'filedeleteerror' => '«$1» فایلی سیلیننمه‌دی.',
 'directorycreateerror' => '«$1» دایرکتوری‌سی سیلیننمه‌دی.',
 'filenotfound' => '«$1» فایلی تاپیلانمادی.',
 'fileexistserror' => '«$1» فایلینا یازیلانمادی: فایل اؤنجه‌دن واردیر.',
-'unexpected' => 'گؤزÙ\84Ù\86Û\8cÙ\85Ù\84ه‌ین دَیَر: «$1»=«$2»',
+'unexpected' => 'گؤزÙ\84Ù\86Û\8cÙ\84Ù\85ه‌ین دَیَر: «$1»=«$2»',
 'formerror' => 'خطا: فورم یوللانانمادی.',
 'badarticleerror' => 'بو ایشی بو یارپاق اوستون‌ده ائتمک اولماز.',
 'cannotdelete' => '«$1» فایل یا یارپاغی سیلیننمه‌دی.
@@ -406,7 +472,7 @@ $1',
 'sqlhidden' => '(اس‌کیوال سورغوسو گیزلی)',
 'cascadeprotected' => 'بو صحیفه دَییشیکلیکلر قاباغیندا قورونوب‌دور، چونکو بو آشاغیداکی، آبشاری {{PLURAL:$1|سئچمه‌سی|سئچمه‌لری}} سئچیلن، قورونان {{PLURAL:$1|صحیفه|صحیفه‌لر}} ایچینده‌دیر:
 $2',
-'namespaceprotected' => "سیز '''$1''' آدآلانینداکی یارپاقلارین دَییشمه‌سینه ایجازه‌نیز یوخدور.",
+'namespaceprotected' => "سیز '''$1''' آدفضاسینداکی صحیفه‌لرین دَییشمه‌سینه ایجازه‌نیز یوخدور.",
 'customcssprotected' => 'سیز بو CSS صفحه‌سینین دَییشمه‌سینه ایجازه‌نیز یوخدور نییه کی اون‌دا باشقا ایشلدنین شخصی تنظیملری واردیر.',
 'customjsprotected' => 'سیز بو جاوااسکریپت صفحه‌سینین دَییشمه‌سینه ایجازه‌نیز یوخدور، نییه کی اون‌دا باشقا ایشلدنین شخصی تنظیملری واردیر.',
 'ns-specialprotected' => 'اؤزل یارپاقلاری دَییشمک اولماز.',
@@ -455,7 +521,7 @@ $2',
 'gotaccount' => 'اؤنجه‌دن حسابینیز وارمی؟ $1.',
 'gotaccountlink' => 'گیریش',
 'userlogin-resetlink' => 'گیریش بیلگیلرینیزی اونوتموسونوز؟',
-'createaccountmail' => 'اÛ\8cÙ\85Û\8cÙ\84 Ø§Û\8cÙ\84Ù\87',
+'createaccountmail' => 'بÛ\8cر Ú¯Ø¦Ú\86Û\8cجÛ\8c Ø±Ø§Ø³Øªâ\80\8cÚ¯Ù\84Ù\87 Ø±Ù\85ز Ø§Û\8cØ´Ù\84ت Ù\88 Ø§Ù\88Ù\86Ù\88 Ø¢Ø´Ø§ØºÛ\8cدا Ø¨Ù\84Ù\84Ù\86دÛ\8cرÙ\86 Ø§Û\8cÙ\85Û\8cÙ\84 Ø¢Ø¯Ø±Ø³Û\8cÙ\86Ù\87 Ú¯Ø¤Ù\86در',
 'createaccountreason' => 'نَدَن‌لیک:',
 'badretype' => 'یازدیغینیز رمزلر بیر دئییل‌لر.',
 'userexists' => 'یازدیغینیز آد، اؤنجه‌دن ایشده‌دیر.
@@ -531,6 +597,7 @@ $2',
 # E-mail sending
 'php-mail-error-unknown' => 'پی‌اچ‌پی‌نین mail() فونکسیاسیندا تانینمامیش خطا.',
 'user-mail-no-addy' => 'ایمیل آدرسی اولماماق‌لا، ایمیل گؤندرمگه چالیشدی',
+'user-mail-no-body' => 'بیر بوش یا چوخ قیسا یازیسی اولان ایمیل گؤندرمگه چالیشیلدی.',
 
 # Change password dialog
 'resetpass' => 'رمزی دَییشدیر',
@@ -588,6 +655,7 @@ $2
 'changeemail-oldemail' => 'ایندیکی ایمیل آدرس:',
 'changeemail-newemail' => 'یئنی ایمیل آدرسی:',
 'changeemail-none' => '(هئچ)',
+'changeemail-password' => 'سیزین {{SITENAME}} رمزینیز:',
 'changeemail-submit' => 'ایمیلی دَییشدیر',
 'changeemail-cancel' => 'لغو',
 
@@ -616,7 +684,7 @@ $2
 'watchthis' => 'بو صفحه‌نی ایزله',
 'savearticle' => 'صحیفه‌نی قئید ائت',
 'preview' => 'اؤن‌گؤستریش',
-'showpreview' => 'اؤÙ\86 گؤستریش',
+'showpreview' => 'سÛ\8cÙ\86اÙ\82 گؤستریش',
 'showlivepreview' => 'دیری اؤن‌گؤستریش',
 'showdiff' => 'دَییشیکلیکلری گؤستر',
 'anoneditwarning' => "'''دیقت:''' سیز سیستئمه گیرمه‌میسینیز. سیزین آی‌پی آدرسینیز بو صفحه‌نین دییشیک تاریخچه‌سین‌ده یازیلاجاق‌دیر.",
@@ -749,9 +817,9 @@ $2
 آیریجا بو علاوه یازینی سیزین یازدیغینیزدان یا دا سربست کوپیالاما ایجازه‌سی وئرن بیر قایناق‌دان کوپیالادیغینیزی بیزه اؤهده‌لرینه ائتمکدسینیز (دئتال‌لار اوچون ایستیناد: $1).',
 'longpageerror' => "خطا: داخیل متنین اوزون‌لوغو قبول ائدیله بیلر ان چوخ اوزونلوق اولان {{PLURAL: $2 | بیر کیلوبایت | $2 کیلوبایت}} دان چوخ‌دور و {{PLURAL: $1 | بیر کیلوبایت | $1 کیلوبایت}} بؤیوکلوگونده‌دیر.'
 دییشیک‌لیگی‌نین کایدئدیلئمئز.",
-'readonlywarning' => "'''دیققت: باخیم سببی ایله وئریلن‌لر بازاسی بو آندا کیلیدلی‌دیر. بو سببله دییشیک‌لیک‌لری‌نین بو آندا قئیدئدیل میجاغدیر. یازدیق‌لارینیزی باشقا بیر پرونده ده آلیب ساخلایا و داها سونرا تکرار بورا گتیریب یازا بیلرسینیز '
+'readonlywarning' => "'''دیقت: باخیم سببی ایله دیتابیس بو آندا قیفیللی‌دیر. بو سببله دییشیک‌لیکلری‌نین بو آندا قئید ائدیل میه‌جکدیر. یازدیقلارینیزی باشقا بیر فایل‌دا آلیب ساخلایا و داها سونرا یئنی‌دن بورا گتیریب یازا بیلرسینیز.
 
-کیلیدله‌ین خیدمتله بو شرحی علاوه ائتمیش‌دیر: $1",
+اونو قیفیل‌لایان ایداره‌چی، بو شرحی وئریب‌دیر: $1",
 'protectedpagewarning' => "' 'خاطیرلیریق: بو ​​صحیفه باغلانیب دیر و یالنیز مودیر اولان‌لار طرفین‌دن دییش‌دیریله بیلر.'
 سون گونده‌لیک گیردی‌سی ایستیناد مقصدلی آشاغیدا وئریلمیش‌دیر:",
 'semiprotectedpagewarning' => "'قئید:' بو صحیفه محافظه‌لی اولدوغو اوچون یالنیز قئیدیات‌دان کئچمیش ایستیفاده‌چی‌لر دییشدیر ائده بیلرلر.",
@@ -763,7 +831,6 @@ $2
 'template-protected' => '(قورونوب)',
 'template-semiprotected' => '(یاریم‌قورونموش)',
 'hiddencategories' => 'بو صحیفه {{PLURAL:$1|بیر گیزلی دسته‌یه|$1 گیزلی دسته‌لره}} عایددیر:',
-'nocreatetitle' => 'صحیفه یاراتما محدودلاشدیریلیب.',
 'nocreatetext' => '{{SITENAME}} یئنی صحیفه یارادماق ایمکانی‌نی محدودلاشدیریب‌دیر.
 سیز دالی دؤنوب و اؤنجه‌دن اولان بیر صحیفه‌نی دَییشدیره بیلرسینیز، یا دا [[Special:UserLogin|گیریب یوخسا یئنی حساب آچین]].',
 'nocreate-loggedin' => 'سیزین یئنی صحیفه‌لر یاراتماغا ایجازه‌نیز یوخدور.',
@@ -776,8 +843,8 @@ $2
 
 بو صفحه‌نین یئنی‌دن یارادماغی‌نین نه‌قدر اویغون اولدوغونو گرک نظرده آلاسینیز.
 بو صفحه‌نین سیلمک و آپارماق گئچمیشی بوردا گؤستریلیب‌دیر:",
-'moveddeleted-notice' => 'بو یارپاق سیلین‌میش‌دیر
-معلومات اوچون آشاغیدا بو یارپاق‌ین تاریخچه‌سیندن مووافیق سیلمه قئيدلری گؤستریلمیش‌دیر.',
+'moveddeleted-notice' => 'بو صحیفه سیلینمیشدیر.
+معلومات اوچون آشاغیدا بو صحیفه‌نین آددَییشدیرمه و سیلمه قئيدلری گؤستریلیب‌دیر.',
 'log-fulllog' => 'بوتون بیلگی‌لری گؤستر',
 'edit-hook-aborted' => 'دوزلیش‌لر قارماق-پروسئ‌دور طرفین‌دن گئری قایتاریلیب.
 علاوه ایزاهات وئریلمه‌ییب.',
@@ -1023,9 +1090,9 @@ $1",
 'prevn-title' => 'قاباقکی {{PLURAL:$1|بیر|$1}} نتیجه',
 'nextn-title' => 'سونراکی {{PLURAL:$1|بیر|$1}} سونوج',
 'shown-title' => 'هر صحیفه‌ده {{PLURAL:$1|بیر|$1}} نتیجه گؤستر',
-'viewprevnext' => 'گؤستر ($1 {{int:pipe-separator}} $2) ($3).',
+'viewprevnext' => 'گؤستر ($1 {{int:pipe-separator}} $2) ($3)',
 'searchmenu-legend' => 'آختارماق تنظیملری',
-'searchmenu-exists' => "'''\"[[:\$1]]\" آدلی صحیفه بو ویکی‌ده وار.'''",
+'searchmenu-exists' => "'''بو ویکی‌ده «[[:$1]]» آدلی صحیفه واردیر.'''",
 'searchmenu-new' => "'''بو ویکی‌ده «[[:$1]]» صحیفه‌‌سینی يارات!'''",
 'searchhelp-url' => 'Help:ایچینده‌کیلر',
 'searchmenu-prefix' => '[[Special:PrefixIndex/$1| بو اؤن‌اک ایله اولان صحیفه‌لری آختار]]',
@@ -1160,7 +1227,7 @@ $1",
 'youremail' => 'ایمیل:',
 'username' => '{{GENDER:$1|ایستیفاده‌چی آدی}}:',
 'uid' => '{{GENDER:$1|ایستیفاده‌چی}} ID:',
-'prefs-memberingroups' => '{{PLURAL:$1|بیر|$1}} گروپ {{GENDER:$2|عوضو}}و:',
+'prefs-memberingroups' => '{{PLURAL:$1|بیر|$1}} قروپ {{GENDER:$2|عوضو}}و:',
 'prefs-registration' => 'یازیلماق واختی:',
 'yourrealname' => 'دوغرو آد:',
 'yourlanguage' => 'دیل:',
@@ -1227,7 +1294,7 @@ $1",
 'userrights-unchangeable-col' => 'ديَیشدیره بیلمه‌دیگینیز قروپلار',
 
 # Groups
-'group' => 'گروپ:',
+'group' => 'قروپ:',
 'group-user' => 'ایستفاده‌چیلر',
 'group-autoconfirmed' => 'اوتوماتیک دوغرولانمیش ایستیفاده‌چیلر',
 'group-bot' => 'بوتلار',
@@ -1312,15 +1379,13 @@ $1",
 'right-sendemail' => 'باشقا ایستیفاده‌چیلره ایمیل گؤندر',
 'right-passwordreset' => 'رمز یئنی‌له‌مه ایمیل‌لرینه باخ',
 
+# Special:Log/newusers
+'newuserlogpage' => 'ایستیفاده‌چی یارادیلما قئیدی',
+'newuserlogpagetext' => 'بو ایستیفاده‌چی یارادماق سیاهیسیدیر.',
+
 # User rights log
 'rightslog' => 'ایستیفاده‌چی حاقلاری سیاهی‌سی',
 'rightslogtext' => 'بو، ایستیفاده‌چی حاقلارینا اولان دَییشیکلیکلر سیاهی‌سی‌دیر.',
-'rightslogentry' => '$1-ین گروپ عوضولوغو، $2-دن $3-ه دَییشدیریلدی',
-'rightslogentry-autopromote' => 'اوتوماتیک اولاراق $2-دن $3-ه مقامی آرتیریلدی',
-'logentry-rights-rights' => '$1 $3-ین گروپ عوضولوگونو $4-دن $5-ه دَییشدیردی',
-'logentry-rights-rights-legacy' => '$1، $3-ین گروپ عوضولوگونو دَییشدیردی',
-'logentry-rights-autopromote' => '$1-ین مقامی اوتوماتیک $4-دن $5-ه آرتیریلدی',
-'rightsnone' => '(هئچ)',
 
 # Associated actions - in the sentence "You do not have permission to X"
 'action-read' => 'بو صحیفه‌نی اوخو',
@@ -1370,7 +1435,7 @@ $1",
 'recentchanges-label-bot' => 'بو دییشیک بیر بوت طرفیندن ائدیلیب‌دیر',
 'recentchanges-label-unpatrolled' => 'بو دییشیکلیک هله گؤزدن گئچیریلمه‌ییب‌دیر',
 'rcnote' => "آشاغیدا {{PLURAL:$1|'''بیر'''|'''$1'''}} ديَیشیکلیک، سون {{PLURA?:$2|بیر|$2}} گون‌ده، ساعت $5، $4 تاریخینه قدر گلیب‌دیر.",
-'rcnotefrom' => "آشاغیدا '''$2'''-دن ('''$1'''-ه قدر) ديَیشیکلیکلر سادالانمیشدیر.",
+'rcnotefrom' => "آشاغیدا '''$2'''-دن ('''$1'''-ه قدر) ديَیشیکلیکلر گلیبلر.",
 'rclistfrom' => '$1 واختیندان باشلایاراق یئنی دییشیکلری گؤستر',
 'rcshowhideminor' => 'کیچیک دَییشیکلری $1',
 'rcshowhidebots' => 'بوتلاری $1',
@@ -1400,7 +1465,7 @@ $1",
 'recentchangeslinked-feed' => 'ایلگیلی دَییشیکلیکلر',
 'recentchangeslinked-toolbox' => 'ایلگیلی دَییشیکلیکلر',
 'recentchangeslinked-title' => "''$1'' ایله ایلگی‌لی دییشیکلر",
-'recentchangeslinked-noresult' => 'Ù\82ئÙ\8aد Ø§Ù\88Ù\92Ù\84Ù\88Ù\86اÙ\86 Ø¯Ø¤Ù\88ردÙ\87 Ø¹Ù\84اÙ\82Ù\87â\80\8cدار صحیفه‌‌لرده هئچ بیر ديَیشیکلیک يوْخدور.',
+'recentchangeslinked-noresult' => 'Ù\82ئÙ\8aد Ø§Ù\88Ù\92Ù\84Ù\88Ù\86اÙ\86 Ø¯Ø¤Ù\88ردÙ\87 Ø§Û\8cÙ\84Ú¯Û\8cÙ\84Û\8c صحیفه‌‌لرده هئچ بیر ديَیشیکلیک يوْخدور.',
 'recentchangeslinked-summary' => "آشاغیداکی سیياهی، قئيد اوْلونان صحیفه‌‌يه (و يا قئيد اوْلونان کاتئقوْرياداکی صحیفه‌‌لره) داخیلی کئچید وئرن صحیفه‌‌لرده ائدیلمیش سوْن ديَیشیکلیکلرین سیياهیسیدیر. 
 [[Special:Watchlist|ایزله‌مه سیياهینیزداکی]] صحیفه‌‌لر '''قالین''' شریفتله گؤستریلمیشدیر.",
 'recentchangeslinked-page' => 'صحیفه آدی:',
@@ -1747,7 +1812,7 @@ https://www.mediawiki.org/wiki/Manual:Image_Authorization صحیفه‌‌سین
 'mimesearch-summary' => 'بو صحیفه، فایل‌لارین MIME-لارینا گؤره فیلترله‌مگی آچار.
 وئرمک: contenttype/subtype، میثال: <code>image/jpeg</code>.',
 'mimetype' => 'MIME تیپی:',
-'download' => 'اÙ\8eÙ\86دÛ\8cر',
+'download' => 'اندیر',
 
 # Unwatched pages
 'unwatchedpages' => 'ایزلنمه‌میش صحیفه‌لر',
@@ -1791,7 +1856,7 @@ https://www.mediawiki.org/wiki/Manual:Image_Authorization صحیفه‌‌سین
 'statistics-mostpopular' => 'ان چوخ گؤرونموش صحیفه‌لر',
 
 'disambiguations' => 'آیدین‌لاشدیرما صحیفه‌لرینه باغلانتیلاری اولان صحیفه‌لر',
-'disambiguationspage' => 'Template:دقیقلشدیرمه',
+'disambiguationspage' => 'Template:دقیقلشدیرمه',
 'disambiguations-text' => "آشاغیداکی صحیفه‌لرده آزی بیر باغلانتی، '''بلیرلیندیمه صحیفه‌لری'''نه واردیر.
 اولا بیلر اونلاری داها اویغون صحیفه‌یه باغلاماق لازیم اولا.<br />
 بیر صحیفه، بلیرلندیرمه صحیفه‌سی کیمی اولار، اگر [[MediaWiki:Disambiguationspage]] صحیفه‌سینه باغلانمیش بیر شابلون‌دان ایستیفاده ائتسه.",
@@ -1807,7 +1872,7 @@ https://www.mediawiki.org/wiki/Manual:Image_Authorization صحیفه‌‌سین
 
 'brokenredirects' => 'خطالی ایستیقامتلندیرمه',
 'brokenredirectstext' => 'آشاغی‌داکی ایستیقامتلندیرمه‌لر مؤوجود اولمایان صحیفه‌لره کئچید وئریر:',
-'brokenredirects-edit' => 'دَییش',
+'brokenredirects-edit' => 'دَییشدیر',
 'brokenredirects-delete' => 'سیل',
 
 'withoutinterwiki' => 'دیل باغلانتیلاری اولمایان صحیفه‌لر',
@@ -1838,7 +1903,7 @@ https://www.mediawiki.org/wiki/Manual:Image_Authorization صحیفه‌‌سین
 'unusedimages' => 'ایشلنمه‌میش فایل‌لار',
 'popularpages' => 'سئویلن صحیفه‌لر',
 'wantedcategories' => 'یسته نن بؤلمه‌لر',
-'wantedpages' => 'ایسته نن صحیفه‌لر',
+'wantedpages' => 'ایسته‌نیلن صحیفه‌لر',
 'wantedpages-badtitle' => 'مراجعت زامانتی يانلیش باشلیق: $1',
 'wantedfiles' => 'ایسته نن فایللار',
 'wantedfiletext-cat' => 'آشاغیداکی فایل‌لار ایشله‌نیبلر اما یوخدورلار. ائشیک آنباردا اولان فایل‌لار دا اولدوقلارینا باخمایاراق، لیست‌ده گلیبلر. ائله یانلیش باخیشلار <del>خطلنه‌جکلر</del>. هم‌ده، اولمایان فایل‌لاری ایشلدن صحیفه‌لر ده [[:$1]]-ده لیست اولونوبلار.',
@@ -1915,13 +1980,13 @@ https://www.mediawiki.org/wiki/Manual:Image_Authorization صحیفه‌‌سین
 'allarticles' => 'بوتون صحیفه‌لر',
 'allinnamespace' => 'بوتون صحیفه‌لر ($1 صحیفه‌لری)',
 'allnotinnamespace' => 'بوتون صحیفه‌لر ( $1 ساحه‌سینده اولمایان‌لار)',
-'allpagesprev' => 'اونجه‌کی',
+'allpagesprev' => 'قاباقکی',
 'allpagesnext' => 'سونراکی',
 'allpagessubmit' => 'گئت',
 'allpagesprefix' => 'بورا یازدیغینیز حرف‌لرله باشلایان صحیفه‌لری سیاهی‌سینی:',
 'allpagesbadtitle' => 'گیریلن صحیفه آدی دیل‌لر آراسی علاقه و یا wiki آراسی علاقه ائهتیوا ائتدیگین‌دن اعتبارلی دئییل. باش‌لیق‌لاردا ایستیفاده ائدیلمه‌سی قاداغان اولان بیر یا دا داها چوخ کاراکتئر ائهتیوا ائدیر اولا بیلر.',
 'allpages-bad-ns' => '{{SITENAME}} سایتیندا "$1" آد ساحه‌سی یوخ.',
-'allpages-hide-redirects' => 'یؤنلندیرمه‌لری گیزلت',
+'allpages-hide-redirects' => 'یول‌لاندیرمالاری گیزلت',
 
 # SpecialCachedPage
 'cachedspecial-viewing-cached-ttl' => 'سیز بو صفحه نین بیر نوسخه نی گورورسیز کی اورتا توتان یئرلشیب دیر و مومکین دیر $1 اوچون قاباقدان اولا.',
@@ -1949,8 +2014,8 @@ https://www.mediawiki.org/wiki/Manual:Image_Authorization صحیفه‌‌سین
 'linksearch-ok' => 'آختار',
 'linksearch-text' => '«*.wikipedia.org» کیمی نیشانلاری ایشلده بیلرسینیز.
 آزی بیر دنه «*.org» کیمی یوخاری دامنه لازیم‌دیر.<br />
-دستلکلنمیش پروتوکول‌لار: <code>$1</code> (بوش بیراخیلسا، http:// نظرده آلیناجاقدیر).',
-'linksearch-line' => '$2-دن $1 کئچید وئریلیب',
+دستلکلنمیش {{PLURAL:$2|پروتوکول|پروتوکول‌لار}}: <code>$1</code> (بوش بیراخیلسا، http:// نظرده آلیناجاقدیر).',
+'linksearch-line' => '$1، $2-دن باغلانیب‌دیر',
 'linksearch-error' => 'نیشانلار یالنیز آدی اولینده گله بیلرلر.',
 
 # Special:ListUsers
@@ -1962,25 +2027,21 @@ https://www.mediawiki.org/wiki/Manual:Image_Authorization صحیفه‌‌سین
 # Special:ActiveUsers
 'activeusers' => 'چالیشان ایستیفاده‌چیلرین لیستی',
 'activeusers-intro' => 'بوردا سون {{PLURAL:$1|بیر|$1}} گون‌ده بیر ایشلر گؤرن ایستیفاده‌چیلرین لیستی گؤستریلیر.',
-'activeusers-count' => 'سون {{PLURAL:$3|بیر|$3}} گون‌ده، {{PLURAL:$1|بیر|$1}} دَییشیکلیک.',
+'activeusers-count' => 'سون {{PLURAL:$3|گون|$3 گون}}‌ده، {{PLURAL:$1|$1}} چالیشما',
 'activeusers-from' => 'بوندان باشلایاراق ایستیفاده‌چیلری گؤستر:',
 'activeusers-hidebots' => 'بوتلاری گیزلت',
 'activeusers-hidesysops' => 'ایداره‌چیلری گیزلت',
 'activeusers-noresult' => 'هئچ ایستیفاده‌چی تاپیلمادی.',
 
-# Special:Log/newusers
-'newuserlogpage' => 'ایستیفاده‌چی یارادیلما قئیدی',
-'newuserlogpagetext' => 'بو ایستیفاده‌چی یارادماق سیاهیسیدیر.',
-
 # Special:ListGroupRights
-'listgrouprights' => 'ایستیفاده‌چی گروپ حاقلاری',
+'listgrouprights' => 'ایستیفاده‌چی قروپ حاقلاری',
 'listgrouprights-summary' => 'آشاغیدا، بو ویکی‌ده تانیلان ایستیفاده‌چی گروپلاری و اونلارین حاقلاری گؤستریلیر.
 تک حاقلار اوچون ده، [[{{MediaWiki:Listgrouprights-helppage}}|آرتیق بیلگیلر]] اولا بیلر.',
 'listgrouprights-key' => '* <span class="listgrouprights-granted">وئریلمیش حاق</span>
 * <span class="listgrouprights-revoked">قایتاریلمیش حاق</span>',
-'listgrouprights-group' => 'گروپ',
+'listgrouprights-group' => 'قروپ',
 'listgrouprights-rights' => 'حاقلار',
-'listgrouprights-helppage' => 'Help:گروپ حاقلاری',
+'listgrouprights-helppage' => 'Help:قروپ حاقلاری',
 'listgrouprights-members' => '(عضولرین لیستی)',
 'listgrouprights-addgroup' => '{{PLURAL:$2|گروپو|گروپلاری}} آرتیر: $1',
 'listgrouprights-removegroup' => '{{PLURAL:$2|گروپو|گروپلاری}} سیل: $1',
@@ -2037,7 +2098,7 @@ https://www.mediawiki.org/wiki/Manual:Image_Authorization صحیفه‌‌سین
 'watchnologin' => 'داخیل اولمامیسینیز',
 'watchnologintext' => 'ایزلمه سیاهینیزدا دییشیک‌لیک آپارماق اوچون [[Special:UserLogin|داخیل اولمالیسینیز]].',
 'addwatch' => 'ایزلمه سیاهی‌سینا علاوه ائت',
-'addedwatchtext' => '"[[:$1]]" صحیفه‌سی [[Special:Watchlist|ایزلدینز صحیفه‌لر]] سیاهی‌سینا علاوه ائدیلدی. بو صحیفه‌ده و علاقه‌لی موزاکیره صحیفه‌سین‌دکی بوتون دییشیک‌لیک‌لر اورادا گؤستریله‌جک و صحیفه آسان‌لیقلا سئچیلبیلمک اوچون [[Special:RecentChanges|سون دییشیک‌لیک‌لرده]] قالین شریفت‌لرله گؤرونه‌جک‌دیر. <پ> صحیفنی ایزلمه سیاهینیزدان چیخارماق اوچون یان لؤوهه‌دکی "ایزلمه" دویمه‌سینه وورون.',
+'addedwatchtext' => '"[[:$1]]" صحیفه‌سی [[Special:Watchlist|ایزله‌دیکلرینیزه]] آرتیریلدی. بو صحیفه‌ده و ایلگیلی دانیشیق صحیفه‌سین‌ده‌کی بوتون دییشیکلیکلر اوردا گؤستریله‌جکلر.',
 'removewatch' => 'بو صحیفنی ایزلدیگیم صحیفه‌لر سیاهی‌سین‌دان چیخار',
 'removedwatchtext' => '"[[:$1]]" صحیفه‌سی [[Special:Watchlist|ایزلمه سیاهینیزدان]] چیخاریلدی.',
 'watch' => 'ایزله',
@@ -2046,10 +2107,10 @@ https://www.mediawiki.org/wiki/Manual:Image_Authorization صحیفه‌‌سین
 'unwatchthispage' => 'صحیفه ایزلمیی دایان‌دیر',
 'notanarticle' => 'مضمون صحیفه‌سی دئییل',
 'notvisiblerev' => 'باشقا ایستیفادی‌چی‌نین سون دییشیک‌لیگی سیلینیب',
-'watchnochange' => 'وئریلن واخت عرضینده هئچ بیر ایزلدیگینیز صحیفه رئداکته ائدیلممیش‌دیر.',
+'watchnochange' => 'گؤستریلن واخت‌دا هئچ بیر ایزله‌دیگینیز صحیفه دَییشدیریلمه‌ییبدیر.',
 'watchlist-details' => 'دانیشیق صفحه‌لرینی سایمایاراق، {{PLURAL:$1|$1 صفحه‌نی}} ایزله‌ییرسینیز.',
 'wlheader-enotif' => '* ایمیل مکتوبلا بیلدیریش اولا بیلر.',
-'wlheader-showupdated' => "* سون زیارتینیزدن سونرا ائدیلن دییشیک‌لیک‌لر 'قالین شریفتلرل گؤستریلمیش‌دیر.",
+'wlheader-showupdated' => "* سون گؤروشونوزدن سونرا ائدیلن دییشیکلیکلر '''قالین''' گؤستریلیبدیلر.",
 'watchmethod-recent' => 'یئنی دییشیک‌لیک‌لر ایزلنیلن صحیفه‌لر اوچون یوخلانیلیر',
 'watchmethod-list' => 'ایزلنیلن صحیفه‌لر یئنی دییشیک‌لیک‌لر اوچون یوخلانیلیر',
 'watchlistcontains' => 'ایزلمه سیاهینیزدا $1 {{PLURAL:$11|صحیفه}} وار.',
@@ -2071,7 +2132,7 @@ https://www.mediawiki.org/wiki/Manual:Image_Authorization صحیفه‌‌سین
 'enotif_subject_moved' => '{{SITENAME}} $1 صحیفه‌سی، {{gender:$2|$2}} ایله آدی دَییشیلیب‌دیر',
 'enotif_subject_restored' => '{{SITENAME}} $1 صحیفه‌سی، {{gender:$2|$2}} ایله قایتاریلیب‌دیر',
 'enotif_subject_changed' => '{{SITENAME}} $1 صحیفه‌سی، {{gender:$2|$2}} ایله دَییشیلیب‌دیر',
-'enotif_body_intro_deleted' => '{{SITENAME}} صحیفه‌‌$1-ای {{gender:$2|$2}} $PAGEEDITDATE-سینده سیلینمیشدیر، جاری يئنیدن باخما اوچون $3-ای گؤر.',
+'enotif_body_intro_deleted' => '{{SITENAME}} صحیفه‌‌ $1-ی $PAGEEDITDATE تاریخیمده {{gender:$2|$2}} طرفیندن سیلینمیشدیر، $3-ی گؤرون.',
 'enotif_body_intro_created' => '{{SITENAME}} صحیفه‌‌$1-ای {{gender:$2|$2}} $PAGEEDITDATE-سینده سیلینمیشدیر، جاری يئنیدن باخما اوچون $3-ای گؤر.',
 'enotif_body_intro_moved' => '{{SITENAME}} صحیفه‌‌$1-ای {{gender:$2|$2}} $PAGEEDITDATE-سینده حرکت ائتدیریلن ، جاری يئنیدن باخما اوچون $3-ای گؤر.',
 'enotif_body_intro_restored' => '{{SITENAME}} $1 صحیفه‌سی، {{gender:$2|$2}} ایله $PAGEEDITDATE-ده قایتاریلیب‌دیر، سون نوسخه اوچون $3-ه باخین.',
@@ -2101,6 +2162,8 @@ $نئwپاگئ
 
 ياردیم و تکلیفلرینیز اوچون: 
 {{canonicalurl:{{MediaWiki:Helppage}}}}',
+'created' => 'یارادیلیب',
+'changed' => 'ديَیشدی',
 
 # Delete
 'deletepage' => 'صحیفه‌‌نی سیل',
@@ -2171,6 +2234,8 @@ $نئwپاگئ
 'prot_1movedto2' => '[[$1]] آدی دییشیلدی. یئنی آدی: [[$2]]',
 'protect-badnamespace-title' => 'آد سیز حفظ اولموش فضا',
 'protect-badnamespace-text' => 'بو آد ساحه‌سین‌دکی صحیفه‌لر قورونا.',
+'protect-norestrictiontypes-text' => 'بو صحیفه‌نی قوروماق اولماز، چون هئچ بیر محدودلاشدیرما نؤوعو ال‌ده یوخدور.',
+'protect-norestrictiontypes-title' => 'قورونا-بیلمه‌ین صحیفه',
 'protect-legend' => 'قورومایی تصدیق ائت',
 'protectcomment' => 'ندن:',
 'protectexpiry' => 'زامان بیتدی',
@@ -2186,9 +2251,9 @@ $نئwپاگئ
 '$1 صحیفه‌سینده حال-حاضردا ائده بیلجیینیز عملیات‌لار بون‌لاردیر:",
 'protect-cascadeon' => 'بو صحیفه محافظه‌لی‌دیر، چونکی بو صحیفه {{PLURAL:$1|باشقا بیر}} صحیفه‌دن کاسکاد محافظه ائدیلمیش‌دیر. سیز بو صحیفه‌نین محافظه سویه‌سینی دییش‌دیره بیلرسینیز، بو کاسکاد محافظه‌یه تأثیر ائتمه‌یه‌جک.',
 'protect-default' => 'بوتون ایستیفاده‌چی‌لره ایجازه وئر',
-'protect-fallback' => '"$1" ایجازه‌سی طلب اولونور',
-'protect-level-autoconfirmed' => 'Û\8cئÙ\86Û\8c Ù\88 Ø¢Ù\86Ù\88Ù\86Û\8cÙ\85 Ø§Û\8cستÛ\8cÙ\81ادÙ\87â\80\8cÚ\86Û\8câ\80\8cÙ\84رÛ\8c Ø¨Ø§ØºÙ\84ا',
-'protect-level-sysop' => 'یالنیز ایداره‌چی‌لر',
+'protect-fallback' => 'یالنیز «$1» ایجازه‌سی اولان ایستیفاده‌چیلره ایجازه وئر',
+'protect-level-autoconfirmed' => 'Û\8cاÙ\84Ù\86Û\8cز Ø§Ù\88تÙ\88Ù\85اتÛ\8cÚ© Ø¯Ù\88غرÙ\88Ù\84اÙ\86اÙ\86 Ø§Û\8cستÛ\8cÙ\81ادÙ\87â\80\8cÚ\86Û\8cÙ\84رÙ\87 Ø§Û\8cجازÙ\87 Ù\88ئر',
+'protect-level-sysop' => 'یالنیز ایداره‌چیلره ایجازه وئر',
 'protect-summary-cascade' => 'پیلله‌لی',
 'protect-expiring' => '$1 (UTC)- تاریخینده واختی بیتیر',
 'protect-expiring-local' => '$1-ده بیتیر',
@@ -2214,7 +2279,7 @@ $نئwپاگئ
 'pagesize' => '(بایت)',
 
 # Restrictions (nouns)
-'restriction-edit' => 'دَییش',
+'restriction-edit' => 'دَییشدیر',
 'restriction-move' => 'آدینی دَییشدیر',
 'restriction-create' => 'یارات',
 'restriction-upload' => 'یوکله',
@@ -2243,11 +2308,11 @@ $نئwپاگئ
 'undeleterevision-missing' => 'اعتبارسیز و یا ایتکین نوسخه.
 نوسخه تمیر و یا آرخیو‌دن سیلینمیش اولا بیلر یا دا صاحب اولدوغونوز علاقه اشتباه دیر.',
 'undelete-nodiff' => 'اولکی دَییشمه تاپیلمادی.',
-'undeletebtn' => 'برپا ائت',
+'undeletebtn' => 'قایتار',
 'undeletelink' => 'باخ/قایتار',
 'undeleteviewlink' => 'باخ',
 'undeletereset' => 'قور',
-'undeleteinvert' => 'سئچیلن خاریجین‌دکی‌لری',
+'undeleteinvert' => 'سئچیلنی دؤندر',
 'undeletecomment' => 'ندن:',
 'undeletedrevisions' => 'جمعی {{PLURAL:$11|1 دییش|$1 دییشدیر}} گئری قایتاریلدی.',
 'undeletedrevisions-files' => '{{PLURAL:$1|1 نوسخه|$1 نوسخه}} و {{PLURAL:$2|1 فایل|$2 فایل}} برپا ائدیلدی',
@@ -2329,7 +2394,7 @@ $1',
 'whatlinkshere-hidetrans' => 'علاوه‌لری $1',
 'whatlinkshere-hidelinks' => 'باغلانتیلاری $1',
 'whatlinkshere-hideimages' => 'فایل باغلانتیلارینی $1',
-'whatlinkshere-filters' => 'سوزگجلر',
+'whatlinkshere-filters' => 'سۆزگَجلر',
 
 # Block/unblock
 'autoblockid' => 'اوتوماتیک باغلانما #$1',
@@ -2418,7 +2483,7 @@ $1 آدلی ایستیفاده‌چی‌نین باغلانما سببی: "$2"',
 'blocklogpage' => 'باغلاما قئیدلری',
 'blocklog-showlog' => 'بو ایستیفاده‌چی داها اول بلوکلانمیش‌دیر. بلوکلاما گونده‌لیگی رئفئرانس اوچون آشاغیدا گؤستریلیب:',
 'blocklog-showsuppresslog' => 'بو ایستیفاده‌چی داها اول باغلانمیش‌دیر. باغلانما گونده‌لیگی رئفئرانس اوچون آشاغیدا گؤستریلیب:',
-'blocklogentry' => 'طرفیندن [[$1]] بلوْکلاندی، بلوْک مدتی: $2 $3',
+'blocklogentry' => '[[$1]]-ی $2 واختینه قدر بلوْکلادی $3',
 'reblock-logentry' => '[[$1]] اوچون سون تاریخی $2 $3 اولماق اوزره بلوک پارامئترلری دییشدیریلدی',
 'blocklogtext' => 'ایستیفاده‌چی‌لرین باغلانماسی و باغلانماقین گؤتورولمه‌سی سیاهی‌سی.
 آوتوماتیک باغلانمیش ای پی-عنوان‌لار بورادا گؤستریلمیر.
@@ -2482,18 +2547,18 @@ $1 آدلی ایستیفاده‌چی‌نین باغلانما سببی: "$2"',
 'lockedbyandtime' => '({{Gender: $1 | $1}} طرفین‌دن  $2 $3 اعتبار ایله)',
 
 # Move page
-'move-page' => '$1داشینیر',
+'move-page' => '$1 داشینیر',
 'move-page-legend' => 'صحیفه‌نین آدینی دییش',
-'movepagetext' => "آشاغÛ\8câ\80\8cداکÛ\8c Ù\81Ù\88رÙ\85اâ\80\8cداÙ\86 Ø§Û\8cستÛ\8cÙ\81Ù\87â\80\8cدÙ\87 Ø§Ø¦ØªÙ\85Ù\87 ØµØ­Û\8cÙ\81Ù\87â\80\8cÙ\86Û\8cÙ\86 Ø¢Ø¯Û\8cÙ\86Û\8cØ\8c Ø¨Ù\88تÙ\88Ù\86 ØªØ§Ø±Û\8cØ®Ú\86Ù\87â\80\8cسÛ\8cÙ\86Û\8c Ø¯Ù\87 Ú©Ø¤Ú\86Ù\88رÙ\85Ú©Ù\84Ù\87 یئنی باشلیغا دییشه‌جک.
وولکی باش‌لیق یئنی باشلیغا ایستیقامتلندیرمه صحیفه‌سینه چئوریله‌جک.
-کؤهنه صحیفه‌یه کئچیدلری آوتوماتیک اولا‌راق دییشه بیلرسینیز.
-بو سئچیمی ائتمدیگینیز حالدا، [[Special:DoubleRedirects|تکرارلانان]] و یا [[Special:BrokenRedirects|قیریق ایستیقامتلندیرمه‌لری]] یوخلاماغی یاددان چیخارمایین.
-کئچیدلرین لازیمی یئره ایستیقامتلندیریلمه‌سینی تعمین ائتمک سیزین مسولیتینیزده‌دیر.
+'movepagetext' => "آشاغÛ\8câ\80\8cداکÛ\8c Ù\81Ù\88رÙ\85داÙ\86 Ø§Û\8cستÛ\8cÙ\81ادÙ\87 Ø§Ø¦ØªÙ\85Ú©Ø\8c ØµØ­Û\8cÙ\81Ù\87â\80\8cÙ\86Û\8cÙ\86 Ø¢Ø¯Û\8cÙ\86Û\8cØ\8c Ø¨Ù\88تÙ\88Ù\86 ØªØ§Ø±Û\8cØ®Ú\86Ù\87â\80\8cسÛ\8cÙ\86Û\8c Ø¯Ù\87 Ú©Ø¤Ú\86Ù\88رÙ\85Ú©â\80\8cÙ\84Ù\87Ø\8c یئنی باشلیغا دییشه‌جک.
سکی باشلیق یئنی باشلیغا یول‌لاندیریلاجاق‌دیر.
+اسکی صحیفه‌یه اولان یول‌لاندیرماقلاری، اوتوماتیک گونجل‌له‌یه بیلرسینیز.
+بو سئچیمی ائتمه‌دیگینیز حالدا، [[Special:DoubleRedirects|تکرارلانان]] و یا [[Special:BrokenRedirects|قیریق یول‌لاندیرمالاری]] یوخلاماغی یاددان چیخارمایین.
+باغلانتیلاری اویغون یئره یول‌لاندیرماسیندان آرخایین اولماق، سیزین مسئولیتینیزده‌دیر.
 
-نظره آلین کی، هدف باش‌لیغی آلتیندا بیر صحیفه مؤوجوددورسا یئردییشمه 'باش توتمایاجاق. بونا همین صحیفه‌نین بوش اولماسی و یا ایستیقامتلندیرمه صحیفه‌سی اولماسی و کئچمیشده رئداکته ائدیلممه‌سی حال‌لاری استثنا‌دیر. بو او دئمک‌دیر کی، سهون آدینی دییشدیگینیز صحیفه‌لری گئری قایتارا بیلر، بونونلا یاناشی آرتیق مؤوجود اولان صحیفه‌نین اوزرینه باشقا صحیفه یازا بیلمزسینیز.
+نظره آلین کی، هدف باشلیق آلتیندا بیر صحیفه مؤوجود اولسا، یئردییشمه '''باش توتمایاجاق'''، مگر بوکی او صحیفه یول‌لاندیرما اولا و اؤنجه دَییشمه گئچمیشی ده اولمایا. بو او دئمک‌دیر کی، سهواً آدینی دییشدیگینیز صحیفه‌لری گئری قایتارا بیلمک اولار، بونونلا یاناشی آرتیق مؤوجود اولان صحیفه‌نین اوزرینه باشقا صحیفه یازا بیلمزسینیز.
 
-'خبردارلیق!'
-بÙ\88 Û\8cئردÛ\8cÛ\8cØ´Ù\85Ù\87 Ù¾Ù\88Ù¾Ù\88Ù\84Û\8cار ØµØ­Û\8cÙ\81Ù\87 Ø§Ù\88Ú\86Ù\88Ù\86 Ø§Ø³Ø§Ø³â\80\8cÙ\84Û\8c Ù\88 Ú¯Ø¤Ø²Ù\84Ù\86Û\8cÙ\84Ù\85ز Ø§Ù\88Ù\84ا Ø¨Û\8cÙ\84رØ\8c Ø§Ù\88Ù\86ا Ú¯Ø¤Ø±Ù\87 Ø¯Ù\87 Ø¨Ù\88 Ø¯Û\8cÛ\8cØ´Û\8cÚ©â\80\8cÙ\84Û\8cÚ¯Û\8c Û\8cئرÛ\8cÙ\86Ù\87 Û\8cئتÛ\8cرÙ\85زدÙ\86 Ø§Ù\88Ù\84Ø\8c Ø¨Ù\88Ù\86Ù\88Ù\86 Ù\85Ù\88Ù\85Ú©Ù\88Ù\86 Ù\86تÛ\8cجÙ\87â\80\8cÙ\84رÛ\8cÙ\86Û\8c Ø¨Ø§Ø´Ø§ Ø¯Ù\88شدÙ\88Ú¯Ù\88Ù\86Ù\88زدÙ\86 Ø¹Ù\85ین اولون.",
+'''خبردارلیق!'''
+بÙ\88 Û\8cئردÛ\8cÛ\8cØ´Ù\85Ù\87 Ù\85Ø´Ù\87Ù\88ر ØµØ­Û\8cÙ\81Ù\87 Ø§Ù\88Ú\86Ù\88Ù\86 Ø§Ø³Ø§Ø³â\80\8cÙ\84Û\8c Ù\88 Ú¯Ø¤Ø²Ù\84Ù\86Û\8cÙ\84Ù\85ز Ø§Ù\88Ù\84ا Ø¨Û\8cÙ\84رØ\9b Ø§Ù\88Ù\86ا Ú¯Ø¤Ø±Ù\87 Ø¯Ù\87 Ø¨Ù\88 Ø¯Û\8cÛ\8cØ´Û\8cÚ©â\80\8cÙ\84Û\8cÚ¯Û\8c Û\8cئرÛ\8cÙ\86Ù\87 Û\8cئتÛ\8cرÙ\85زدÙ\86 Ø§Ù\88Ù\84Ø\8c Ø¨Ù\88Ù\86Ù\88Ù\86 Ù\85Ù\88Ù\85Ú©Ù\88Ù\86 Ù\86تÛ\8cجÙ\87â\80\8cÙ\84رÛ\8cÙ\86Û\8c Ø¨Ø§Ø´Ø§ Ø¯Ù\88شدÙ\88Ú¯Ù\88Ù\86Ù\88زدÙ\86 Ø¢Ø±Ø®Ø§Û\8cین اولون.",
 'movepagetext-noredirectfixer' => "آشاغی‌داکی فورمو دول‌دورماق بیر صحیفنی یئنی‌دن آدلاندیریر، بوتون کئچمیشینی یئنی آدا داشیییر.
 کؤهنه مؤوزو یئنی باشلیغا بیر ایستیقامتلندیرمه صحیفه‌سی اولار.
 [[Special:DoubleRedirects|جوت]] یا دا [[Special:BrokenRedirects|نوزوک ایستیقامتلندیرمه‌لر]] صحیفه‌لرینی ایداره ائدین.
@@ -2585,9 +2650,9 @@ $1 آدلی ایستیفاده‌چی‌نین باغلانما سببی: "$2"',
 'exportlistauthors' => 'هر صحیفه‌‌ اوچون دَییشدیرمه ائدن سیياهیسینی اؤزونده ساخلايین',
 'export-submit' => 'ایخراج',
 'export-addcattext' => 'صحیفه‌لری بو بولمه دن علاوه ائت:',
-'export-addcat' => 'عÙ\84اÙ\88Ù\87 Ø§Ø¦Øª',
+'export-addcat' => 'آرتÛ\8cر',
 'export-addnstext' => 'صحیفه‌لری آدلار فزاسین‌دان علاوه ائت:',
-'export-addns' => 'عÙ\84اÙ\88Ù\87 Ø§Ø¦Øª',
+'export-addns' => 'آرتÛ\8cر',
 'export-download' => 'فایلی قئید ائت',
 'export-templates' => 'شابلون‌لاری داخیل ائت',
 'export-pagelinks' => 'باغ‌لی صحیفه‌لری داخیل درین‌لیک:',
@@ -2599,13 +2664,13 @@ $1 آدلی ایستیفاده‌چی‌نین باغلانما سببی: "$2"',
 'allmessagescurrent' => 'ایندیکی متن',
 'allmessagestext' => 'بو مئدیا ویکی-ده اولان سیستئم مئساژلارینین سیاهی‌سی‌دیر. اگر مئدیا ویکی-نی لوکاللاش‌دیرماق ایشینده کؤمک ائتمک ایسییرسینیزسه، لطفاً [//www.mediawiki.org/wiki/Localisation MediaWiki Localisation] و [//translatewiki.net translatewiki.net]-ا باش چکین.',
 'allmessagesnotsupportedDB' => "'''\$ wgUseDatabaseMessages''' باغ‌لی اولدوغو اوچون '{{ns:special}}: Allmessages ایستیفاده‌یه آچیق دئییل.",
-'allmessages-filter-legend' => 'فیلتر',
+'allmessages-filter-legend' => 'سۆزگَج',
 'allmessages-filter' => 'خصوصی ائتمک وضعیتینه گؤره فیلترلی:',
 'allmessages-filter-unmodified' => 'دییشدیریلممیش',
 'allmessages-filter-all' => 'بوتون',
 'allmessages-filter-modified' => 'دییشدیریلمیش',
 'allmessages-prefix' => 'اؤنک ایله فیلترلی:',
-'allmessages-language' => 'دیل',
+'allmessages-language' => 'دیل:',
 'allmessages-filter-submit' => 'گئت',
 
 # Thumbnails
@@ -2669,6 +2734,7 @@ $1 آدلی ایستیفاده‌چی‌نین باغلانما سببی: "$2"',
 'import-error-interwiki' => 'صحیفه "$1" داخیل ائدیلممیش‌دیر. چونکی اونون خاریجی باغلانتی سی (interwiki) یئری توتولوب و رئزرو اولوب.',
 'import-error-special' => 'صحیفه «$1» ایچری توکمه اولنمادی، نیه کی بیر اجازه سیز آد ین فضاسینا تعلوقو وار.',
 'import-error-invalid' => 'صحیفه "$1" اعتبار سیز اولماق دلیل اوچون آدی داخیل اولنمور.',
+'import-error-unserialize' => '«$1» صحیفه‌سینین $2 نوسخه‌سی سِریالیزه‌لیقدان چیخاردیلانمادی. بو نوسخه، $4 کیمی سِریالیزه اولان $3 مودِلینی ایشلدمگه بیلدیریلدی.',
 'import-options-wrong' => '{{PLURAL:$2|جزئیات| جزئیات}} یانلیش: <nowiki>$1</nowiki>',
 'import-rootpage-invalid' => 'وئریلن کؤک صحیفه‌‌سی اعتبارسیز آددیر.',
 'import-rootpage-nosubpage' => 'آد فضا سی  "$1" آنا باسئ ٔآلت صحیفه اوچون اجازه وئرمیر.',
@@ -2722,12 +2788,12 @@ $1 آدلی ایستیفاده‌چی‌نین باغلانما سببی: "$2"',
 'tooltip-n-mainpage' => 'آنا صحیفه‌‌یه باخین',
 'tooltip-n-mainpage-description' => 'آنا صحیفه‌یه باخین',
 'tooltip-n-portal' => 'پروژه‌ یه گؤره، سیز نه ایش گوره بیلرسیز، هاردا نه‌لری تاپا بیلرسیز',
-'tooltip-n-currentevents' => 'گونجل اولایلارلا ایلگیلی بیلگیلر تاپ',
+'tooltip-n-currentevents' => 'ایندیکی اولایلارا ایلگیلی بیلگیلر تاپ',
 'tooltip-n-recentchanges' => 'بو ویکی‌ده سون دَییشیکلرین لیستی',
 'tooltip-n-randompage' => 'بیر راست‌گله صحیفه گتیر',
 'tooltip-n-help' => 'آنلاماق یئری',
 'tooltip-t-whatlinkshere' => 'بورایا باغلانان بوتون ویکی صحیفه‌لرین لیستی',
-'tooltip-t-recentchangeslinked' => 'بۇ مقاله‌يه عاید باشقا صحیفه‌‌لرده يئنی ديَیشیکلیکلر',
+'tooltip-t-recentchangeslinked' => 'بو صحیفه‌دن باغلانان صحیفه‌لرین سون دَییشیکلیکلری',
 'tooltip-feed-rss' => 'بو صحیفه‌‌ اوچون آراس‌اس يايیمی',
 'tooltip-feed-atom' => 'بو صحیفه‌‌ اوچون آتوم يايیمی',
 'tooltip-t-contributions' => 'بو ایستیفاده‌چی‌نین وئردیگی دییشیکلر سیاهی‌سی',
@@ -2735,11 +2801,11 @@ $1 آدلی ایستیفاده‌چی‌نین باغلانما سببی: "$2"',
 'tooltip-t-upload' => 'فایل‌لار یوکله',
 'tooltip-t-specialpages' => 'بوتون اؤزل صحیفه‌لرین لیستی',
 'tooltip-t-print' => 'بو صحیفه‌‌نین چاپ ائدیلن نوسخه‌سی',
-'tooltip-t-permalink' => 'یارپاغا بو وئرسیياسینا دایمی کئچید',
+'tooltip-t-permalink' => 'صحیفه‌نین بو نوسخه‌سینه دَییشیلمز باغلانتی',
 'tooltip-ca-nstab-main' => 'مقاله‌یه باخین',
 'tooltip-ca-nstab-user' => 'ایستیفاده‌چی صفحه‌سینه باخ',
 'tooltip-ca-nstab-media' => 'مئدیا-فايل',
-'tooltip-ca-nstab-special' => 'بو بیر اؤزل یارپاق‌دیر، سیز اونو دَییشدیره بیلمزسیز',
+'tooltip-ca-nstab-special' => 'بو بیر اؤزل صحیفه‌دیر، سیز اونو دَییشدیره بیلمزسیز',
 'tooltip-ca-nstab-project' => 'پروژه صحیفه‌سینه باخ',
 'tooltip-ca-nstab-image' => 'فايل صحیفه‌‌سینه باخین',
 'tooltip-ca-nstab-mediawiki' => 'سیستم مئساژلرینه باخ',
@@ -2817,6 +2883,7 @@ $1 آدلی ایستیفاده‌چی‌نین باغلانما سببی: "$2"',
 'pageinfo-magic-words' => 'سیحیرلی {{PLURAL:$1|بیر|$1}} سؤزجوک ($1)',
 'pageinfo-hidden-categories' => 'گیزلی {{PLURAL:$1|بؤلمه|بؤلمه‌لر}} ($1)',
 'pageinfo-templates' => 'ایشله‌دیلمیش {{PLURAL:$1|بیر|$1}} شابلون ($1)',
+'pageinfo-transclusions' => 'ایچینده گلن {{PLURAL:$1|صحیفه|صحیفه‌لر}} ($1)',
 'pageinfo-toolboxlink' => 'صحیفه بیلگی‌سی',
 'pageinfo-redirectsto' => 'ایستیقامتلن‌دیریلن',
 'pageinfo-redirectsto-info' => 'بیلگی',
@@ -2825,6 +2892,13 @@ $1 آدلی ایستیفاده‌چی‌نین باغلانما سببی: "$2"',
 'pageinfo-protect-cascading' => 'مدافعه‌‌لر بورادان شراره کیمی تؤکولور',
 'pageinfo-protect-cascading-yes' => 'بلی',
 'pageinfo-protect-cascading-from' => 'شراره مدافعه‌‌لر بورادان',
+'pageinfo-category-info' => 'بؤلمه بیلگیلری',
+'pageinfo-category-pages' => 'صحیفه‌لرین سایی',
+'pageinfo-category-subcats' => 'آلت‌بؤلمه‌لرین سایی',
+'pageinfo-category-files' => 'فایل‌لارین سایی',
+
+# Skin names
+'skinname-myskin' => 'منیم قابیغیم',
 
 # Patrolling
 'markaspatrolleddiff' => 'ایداره ائدیلمیش اولا‌راق ایشاره‌له',
@@ -2871,6 +2945,7 @@ $1',
 'file-nohires' => 'یوخاری کیفیت الده یوخدور.',
 'svg-long-desc' => 'SVG فایلی، $1 × $2 پیکسئل، فایلین اؤلچوسو: $3',
 'svg-long-desc-animated' => 'فایل اس‌وی‌جی حرکت ائدن، ابعادی <span dir="ltr">$1 × $2</span> پیکسل، فایل اولچوسو: $3',
+'svg-long-error' => 'اعتبارسیز سوگ فایل: $1',
 'show-big-image' => 'یوکسک کیفیتلی',
 'show-big-image-preview' => 'سیناق گؤستریشی اؤلچوسو: $1.',
 'show-big-image-other' => 'دیگر {{PLURAL:$2|نتیج|نتیجه‌لر}}: $1.',
@@ -2887,7 +2962,7 @@ $1',
 'newimages' => 'یئنی فایل‌لارین سیاهی‌سی',
 'imagelisttext' => "آشاغی‌داکی سیاهی '$2 گؤره دوزولموش {{PLURAL:$1|ادد فایلی| ادد فای‌لی}} گؤستریر.",
 'newimages-summary' => 'بو خصوصی صحیفه، ان سون یوک‌لنن فایل‌لاری گؤستریر.',
-'newimages-legend' => 'فیلتر',
+'newimages-legend' => 'سۆزگَج',
 'newimages-label' => 'فایلین (و یا اونون بیر حیسه‌سی‌نین) آدی:',
 'showhidebots' => '($1 روبات دییشدیر)',
 'noimages' => 'هئچ نیی گؤرممک.',
@@ -2897,9 +2972,11 @@ $1',
 
 # Video information, used by Language::formatTimePeriod() to format lengths in the above messages
 'seconds' => '{{PLURAL:$1|$1 ثانی|$1 ثانییه}}',
-'minutes' => '{{PLURAL:$1|$1 دقیق|$1 دقیقه}}',
+'minutes' => '{{PLURAL:$1|$1 دقیقه}}',
 'hours' => '{{PLURAL:$1|$1 ساعت |$1 ساعت}}',
 'days' => '{{PLURAL:$1|$1 گون |$1 گون}}',
+'months' => '{{PLURAL:$1|$1}} آی',
+'years' => '{{PLURAL:$1|$1}} ایل',
 'ago' => '$1 اؤنجه',
 'just-now' => 'ایندی',
 
@@ -3077,7 +3154,7 @@ $1',
 'exif-datetimeexpires' => 'سونرا ایشلتمه',
 'exif-datetimereleased' => 'چیخیش تاریخی',
 'exif-originaltransmissionref' => 'اصلی تاشیماق یئر کودو',
-'exif-identifier' => 'تانیملاییجی',
+'exif-identifier' => 'تانیتدیران',
 'exif-lens' => 'ایستیفاده اولونموش لنز',
 'exif-serialnumber' => 'کامئرانین سئریال نؤمره‌سی',
 'exif-cameraownername' => 'کامئرانین صاحبی',
@@ -3111,8 +3188,8 @@ $1',
 # EXIF attributes
 'exif-compression-1' => 'سیخیلمامیش',
 'exif-compression-2' => 'پسوورد قویماق سی‌سی‌آی‌تی‌تی ۳  گروه دا بیر بعدی هافمن روشی ایله اوزوناسی اوستونده دییشیلیب',
-'exif-compression-3' => 'رمز قرار وئرمک سی‌سی‌آی‌تی‌تی گروپ ۳',
-'exif-compression-4' => 'رمز قرار وئرمک سی‌سی‌آی‌تی‌تی گروپ 4',
+'exif-compression-3' => 'رمز قرار وئرمک سی‌سی‌آی‌تی‌تی قروپ ۳',
+'exif-compression-4' => 'رمز قرار وئرمک سی‌سی‌آی‌تی‌تی قروپ 4',
 
 'exif-copyrighted-true' => 'مؤلف‌لیک حقوقو ایله قورونور',
 'exif-copyrighted-false' => 'عمومی دامنه',
@@ -3428,7 +3505,7 @@ $5
 # Table pager
 'ascending_abbrev' => 'آرتما سیراسینا گؤره',
 'descending_abbrev' => 'آزالما سیراسینا گؤره',
-'table_pager_next' => 'سونراکی صفحه',
+'table_pager_next' => 'سونراکی صحیفه',
 'table_pager_prev' => 'قاباغکی صحیفه',
 'table_pager_first' => 'ایلک صحیفه‌‌',
 'table_pager_last' => 'سون صحیفه‌‌',
@@ -3551,8 +3628,8 @@ $5
 'specialpages-group-users' => 'ایستیفاده‌چی‌لر و حاقلار',
 'specialpages-group-highuse' => 'ان چوخ ایستیفاده ائدیلن صحیفه‌لر',
 'specialpages-group-pages' => 'صحیفه‌لرین سیاهی‌لاری',
-'specialpages-group-pagetools' => 'صحیفه آلتلری',
-'specialpages-group-wiki' => 'ویکی بیلگی‌لری و آلت‌لری',
+'specialpages-group-pagetools' => 'صحیفه آلتلری',
+'specialpages-group-wiki' => 'بیلگیلر و آلتلر',
 'specialpages-group-redirects' => 'خصوصی ایستیقامتلندیرمه صحیفه‌لری',
 'specialpages-group-spam' => 'هرزه یازماق آلت‌لری',
 
@@ -3573,7 +3650,7 @@ $5
 # Special:Tags
 'tags' => 'مومکون دییشیک‌لیک ائتیکئت‌لری',
 'tag-filter' => '[[Special:Tags|اِتیکِت]] سۆزگُجی:',
-'tag-filter-submit' => 'فیلتر',
+'tag-filter-submit' => 'سۆزگَج',
 'tags-title' => 'یاپیشقان',
 'tags-intro' => 'بو صحیفه، یازیلیم دَییشدیرمه‌لری نیشانلایان اِتیکِتلری و اونلارین آنلاملارینی گؤستریر.',
 'tags-tag' => 'یاپیشقان آدی',
@@ -3588,8 +3665,8 @@ $5
 'compare-selector' => 'صحیفه دییشدیر‌لرینی قارشی‌لاش‌دیر',
 'compare-page1' => 'صحیفه 1',
 'compare-page2' => 'صحیفه 2',
-'compare-rev1' => 'نسخهٔ ۱',
-'compare-rev2' => 'نسخهٔ ۲',
+'compare-rev1' => 'نوسخه ۱',
+'compare-rev2' => 'نوسخه ۲',
 'compare-submit' => 'قارشی‌لاش‌دیر',
 'compare-invalid-title' => 'وئردیگینیز باشلیق گئچرسیزدیر.',
 'compare-title-not-exists' => 'وئردیگینیز باشلیق یوخدور.',
@@ -3650,8 +3727,12 @@ $5
 'logentry-newusers-newusers' => ' بیر ایستیفاده‌چی حسابی $1 یاراتدی',
 'logentry-newusers-create' => 'بیر ایستیفاده‌چی حسابی $1 یاراتدی',
 'logentry-newusers-create2' => 'بیر ایستیفاده‌چی $1 حسابی $3 یاراتدی',
+'logentry-newusers-byemail' => '$3 ایستیفاده‌چی حسابی، $1 ایله یارادیلیب و رمز، ایمیل ایله گؤندریلیب‌دیر',
 'logentry-newusers-autocreate' => '$1 حسابی اوتوماتیک یارادیلدی',
-'newuserlog-byemail' => 'رمز ایمیل ایله گؤندریلدی',
+'logentry-rights-rights' => '$1 $3-ین قروپ عوضولوگونو $4-دن $5-ه دَییشدیردی',
+'logentry-rights-rights-legacy' => '$1، $3-ین قروپ عوضولوگونو دَییشدیردی',
+'logentry-rights-autopromote' => '$1-ین مقامی اوتوماتیک $4-دن $5-ه آرتیریلدی',
+'rightsnone' => '(هئچ)',
 
 # Feedback
 'feedback-bugornote' => 'بیر تکنیکی خطانی شرح وئرمگه آماده اولساز، لوطفاً [$1 بیر باگ بیلدیرین].
@@ -3705,6 +3786,7 @@ $5
 'api-error-ok-but-empty' => 'ایچری خطا: خیدمتچی‌دن جاواب گلمه‌دی.',
 'api-error-overwrite' => 'بیر اولان فایلین اوستونه یازماغا ایجازه یوخدور.',
 'api-error-stashfailed' => 'ایچری خطا: خیدمتچی، گئچیجی فایلی ساخلایانمادی.',
+'api-error-publishfailed' => 'ایچری خطاسی: خیدمت‌چی، گئچیجی فایلی یایانمادی.',
 'api-error-timeout' => 'خیدمتچی، گؤزله‌نیلن واخت‌دا جاواب وئرمه‌دی.',
 'api-error-unclassified' => 'بیر تانینمامیش خطا قاباغا گلدی.',
 'api-error-unknown-code' => 'تانینمامیش خطا: «$1».',
@@ -3725,6 +3807,4 @@ $5
 'duration-centuries' => '{{PLURAL:$1|بیر|$1}} یوز-ایل',
 'duration-millennia' => '{{PLURAL:$1|بیر|$1}} مین‌ایل',
 
-# Unknown messages
-'svg-long-error' => 'اعتبارسیز سوگ فایل: $1',
 );
index 9eb9402..1e54f43 100644 (file)
@@ -29,8 +29,8 @@ $namespaceNames = array(
        NS_USER             => 'Ҡатнашыусы',
        NS_USER_TALK        => 'Ҡатнашыусы_менән_һөйләшеү',
        NS_PROJECT_TALK     => '$1_буйынса_фекерләшеү',
-       NS_FILE             => 'РÓ\99Ñ\81ем',
-       NS_FILE_TALK        => 'РÓ\99Ñ\81ем_буйынса_фекерләшеү',
+       NS_FILE             => 'Файл',
+       NS_FILE_TALK        => 'Файл_буйынса_фекерләшеү',
        NS_MEDIAWIKI        => 'MediaWiki',
        NS_MEDIAWIKI_TALK   => 'MediaWiki_буйынса_фекерләшеү',
        NS_TEMPLATE         => 'Ҡалып',
@@ -46,6 +46,8 @@ $namespaceAliases = array(
        'Фекер_алышыу'                => NS_TALK,
        'Ҡатнашыусы_м-н_фекер_алышыу' => NS_USER_TALK,
        '$1_б-са_фекер_алышыу'        => NS_PROJECT_TALK,
+       'Рәсем'                       => NS_FILE,
+       'Рәсем_буйынса_фекерләшеү'    => NS_FILE_TALK,
        'Рәсем_б-са_фекер_алышыу'     => NS_FILE_TALK,
        'MediaWiki_б-са_фекер_алышыу' => NS_MEDIAWIKI_TALK,
        'Ҡалып_б-са_фекер_алышыу'     => NS_TEMPLATE_TALK,
@@ -310,6 +312,7 @@ $messages = array(
 'namespaces' => 'Исем арауыҡтары',
 'variants' => 'Варианттар',
 
+'navigation-heading' => 'Навигация',
 'errorpagetitle' => 'Хата',
 'returnto' => '$1 битенә ҡайтыу.',
 'tagline' => '{{SITENAME}} проектынан',
@@ -555,6 +558,9 @@ $2',
 
 Һеҙ {{SITENAME}} проектында аноним рәүештә дауам итә йәки <span class='plainlinks'>[$1 яңынан таныла]</span> алаһығыҙ (үҙ йәки башҡа исем менән).
 Ҡайһы бер биттәр һеҙ системала танылған һымаҡ күренергә мөмкин, уны бөтөрөү өсөн браузер кэшын таҙартығыҙ.",
+'welcomeuser' => 'Рәхим итегеҙ $1!',
+'welcomecreation-msg' => 'Иҫәп яҙыуығыҙ яһалды.
+Шәхси [[Special:Preferences|{{SITENAME}} көйләүҙәрен]] үҙегеҙгә уңайлы итеп үҙгәртергә онотмағыҙ.',
 'yourname' => 'Ҡатнашыусы исеме',
 'yourpassword' => 'Һеҙҙең пароль',
 'yourpasswordagain' => 'Паролде ҡабаттан яҙыу',
@@ -701,6 +707,7 @@ $2
 'changeemail-oldemail' => 'Хәҙерге электрон почта адресы:',
 'changeemail-newemail' => 'Яңы электрон почта адресы:',
 'changeemail-none' => '(юҡ)',
+'changeemail-password' => '{{SITENAME}} прокты өсөн паролегеҙ:',
 'changeemail-submit' => 'Адресты үҙгәртергә',
 'changeemail-cancel' => 'Кире алырға',
 
@@ -877,7 +884,6 @@ $2
 'template-protected' => '(һаҡланған)',
 'template-semiprotected' => '(өлөшләтә һаҡланған)',
 'hiddencategories' => 'Был бит $1 {{PLURAL:$1|йәшерен категорияға}} керә:',
-'nocreatetitle' => 'Биттәр яһау сикләнгән',
 'nocreatetext' => '{{SITENAME}}, яңы бит яһауҙы рөхсәт итмәгән.
 Һеҙ кире ҡайта һәм булған битте мөхәррирләй, [[Special:UserLogin|системала таныла йәки яңы иҫәп яҙыуы яһай]] алаһығыҙ.',
 'nocreate-loggedin' => 'Яңы биттәр яһау хоҡуғығыҙ юҡ.',
@@ -902,6 +908,15 @@ $2
 'edit-already-exists' => 'Яңы бит яһап булмай.
 Ул былай ҙа бар.',
 'defaultmessagetext' => 'Алдан билдәләнгән яҙма',
+'content-failed-to-parse' => '$2 эстәлеге $1 төрөнә тура килмәй: $3.',
+'invalid-content-data' => 'Ярамаған мәғлүмәт',
+'content-not-allowed-here' => '"$1" эстәлеге [[$2]] бит өсөн ярамай',
+
+# Content models
+'content-model-wikitext' => 'викияҙма',
+'content-model-text' => 'ғәҙәти яҙма',
+'content-model-javascript' => 'JavaScript',
+'content-model-css' => 'CSS',
 
 # Parser/template warnings
 'expensive-parserfunction-warning' => "'''Иғтибар:''' был биттә хәтерҙе күп ҡулланыусы функциялар ныҡ күп.
@@ -1267,9 +1282,9 @@ $1",
 'prefs-emailconfirm-label' => 'Электрон почтаны раҫлау:',
 'prefs-textboxsize' => 'Мөхәррирләү тәҙрәһе дәүмәле',
 'youremail' => 'Электрон почта *',
-'username' => 'Ҡатнашыусы исеме',
-'uid' => 'Ҡатнашыусының идентификаторы:',
-'prefs-memberingroups' => 'Түбәндәге {{PLURAL:$1|төркөм|төркөмдәр}} ағзаһы:',
+'username' => '{{GENDER:$1|Ҡулланыусы исеме}}:',
+'uid' => '{{GENDER:$1|Ҡатнашыусы}} номеры:',
+'prefs-memberingroups' => '{{PLURAL:$1|төркөм}} {{GENDER:$2|ағзаһы}}:',
 'prefs-registration' => 'Теркәлеү ваҡыты:',
 'yourrealname' => 'Һеҙҙең ысын исемегеҙ (*)',
 'yourlanguage' => 'Тышҡы күренештә ҡулланылған тел:',
@@ -1420,12 +1435,13 @@ $1",
 'right-sendemail' => 'Башҡа ҡатнашыусыларға электрон почта аша хат ебәреү',
 'right-passwordreset' => 'Паролде яңыртыу хәбәрҙәрен ҡарау',
 
+# Special:Log/newusers
+'newuserlogpage' => 'Яңы ҡулланыусы яҙмалары',
+'newuserlogpagetext' => 'Яңы теркәлгән ҡатнашыусылар яҙмалары журналы.',
+
 # User rights log
 'rightslog' => 'Ҡулланыусының хоҡуҡтары көндәлеге',
 'rightslogtext' => 'Был — ҡулланыусы хоҡуҡтары үҙгәрештәре яҙмалары журналы',
-'rightslogentry' => '$1 хоҡуҡтары $2 икән, $3 итеп үҙгертелде',
-'rightslogentry-autopromote' => '$2 автоматик рәүештә $3 ителде.',
-'rightsnone' => '(юҡ)',
 
 # Associated actions - in the sentence "You do not have permission to X"
 'action-read' => 'Был битте уҡыу',
@@ -1657,6 +1673,7 @@ $1',
 'backend-fail-notsame' => 'Бер үҡ булмаған файл  $1 бар инде.',
 'backend-fail-invalidpath' => '$1 яраҡлы һаҡлау юлы түгел.',
 'backend-fail-delete' => '«$1» файлын юйып булмай.',
+'backend-fail-describe' => '"$1" файлының метамәғлүмәттәрен үҙгәртеп булманы.',
 'backend-fail-alreadyexists' => '$1 файлы бар инде.',
 'backend-fail-store' => '$1 файлын $2 адресында һаҡлап булманы.',
 'backend-fail-copy' => 'Файлдың күсермәһен $1 адресынан $2 адресына яһап булманы.',
@@ -2067,10 +2084,6 @@ $1',
 'activeusers-hidesysops' => 'Хәкимдәрҙе йәшерергә',
 'activeusers-noresult' => 'Ҡатнашыусылар табылманы',
 
-# Special:Log/newusers
-'newuserlogpage' => 'Яңы ҡулланыусы яҙмалары',
-'newuserlogpagetext' => 'Яңы теркәлгән ҡатнашыусылар яҙмалары журналы.',
-
 # Special:ListGroupRights
 'listgrouprights' => 'Ҡатнашыусылар төркөмө хоҡуҡтары',
 'listgrouprights-summary' => 'Түбәндә был вики-проектта билдәләнгән ҡатнашыусы төркөмдәре килтерелгән һәм уларҙың хоҡуҡтары күрһәтелгән.
@@ -2136,8 +2149,8 @@ $1',
 'watchnologin' => 'Үҙегеҙҙе танытырға кәрәк',
 'watchnologintext' => 'Күҙәтеү исемлегегеҙҙе мөхәррирләү өсөн, һеҙгә [[Special:UserLogin|танылырға]] кәрәк.',
 'addwatch' => 'Күҙәтеү исемлегенә өҫтәргә',
-'addedwatchtext' => "\"[[:\$1]]\" бите [[Special:Watchlist|күҙәтеү исемлегегеҙгә]] өҫтәлде.
-Был биттә һәм уның фекер алышыу битендә бөтә буласаҡ үҙгәртеүҙәр исемлектә һәм [[Special:RecentChanges|һуңғы үҙгәртеүҙәр]] исемлегендә уларҙы еңелерәк табыу өсөн '''ҡалын яҙыу''' менән күрһәтеләсәк.",
+'addedwatchtext' => '"[[:$1]]" бите [[Special:Watchlist|күҙәтеү исемлегегеҙгә]] өҫтәлде.
+Был биттә һәм уның фекер алышыу битендә буласаҡ бар үҙгәртеүҙәр ундағы исемлектә күрһәтеләсәк.',
 'removewatch' => 'Күҙәтеү исемлегенән сығарырға',
 'removedwatchtext' => '«[[:$1]]» бите [[Special:Watchlist|күҙәтеү исемлегегеҙҙән]] сығарылды.',
 'watch' => 'Күҙәтергә',
@@ -2166,20 +2179,28 @@ $1',
 'enotif_mailer' => '{{SITENAME}} проектының белдереү хеҙмәте',
 'enotif_reset' => 'Бөтә биттәрҙе ҡаралған тип билдәләргә',
 'enotif_impersonal_salutation' => '{{SITENAME}} проектының ҡатнашыусыһы',
+'enotif_subject_deleted' => '{{SITENAME}} проектының $1 исемле бите {{gender:$2|$2}} тарафынан юйылды',
+'enotif_subject_created' => '{{SITENAME}} проектының $1 исемле бите {{gender:$2|$2}} тарафынан яһалды',
+'enotif_subject_moved' => '{{SITENAME}} проектының $1 битенең {{gender:$2|$2}} исеме үҙгәртелде',
+'enotif_subject_restored' => '{{SITENAME}} проектының $1 исемле бите {{gender:$2|$2}} тарафынан тергеҙелде',
+'enotif_subject_changed' => '{{SITENAME}} проектының $1 исемле бите {{gender:$2|$2}} тарафынан үҙгәртелде',
+'enotif_body_intro_deleted' => '{{SITENAME}} проектының $1 исемле бите {{gender:$2|$2}} тарафынан юйылды. Ваҡыты: $PAGEEDITDATE. Ҡарағыҙ: $3.',
+'enotif_body_intro_created' => '{{SITENAME}} проектының $1 исемле бите {{gender:$2|$2}} тарафынан яһалды. Ваҡыты: $PAGEEDITDATE. Ҡарағыҙ: $3.',
+'enotif_body_intro_moved' => '{{SITENAME}} проектының $1 исемле бите {{gender:$2|$2}} тарафынан күсерелде. Ваҡыты: $PAGEEDITDATE. Ҡарағыҙ: $3.',
+'enotif_body_intro_restored' => '{{SITENAME}} проектының $1 исемле бите {{gender:$2|$2}} тарафынан тергеҙелде. Ваҡыты: $PAGEEDITDATE. Ҡарағыҙ: $3.',
+'enotif_body_intro_changed' => '{{SITENAME}} проектының $1 исемле бите {{gender:$2|$2}} тарафынан үҙгәртелде. Ваҡыты: $PAGEEDITDATE. Ҡарағыҙ: $3.',
 'enotif_lastvisited' => 'Һеҙҙең аҙаҡҡы кереүегеҙҙән һуңғы үҙгәртеүҙәрҙе ҡарау өсөн, $1 ҡарағыҙ.',
 'enotif_lastdiff' => 'Был үҙгәртеүҙе ҡарау өсөн, $1 ҡарағыҙ.',
 'enotif_anon_editor' => 'танылмаған ҡатнашыусы $1',
 'enotif_body' => 'Хөрмәтле $WATCHINGUSERNAME,
 
-{{SITENAME}} проектының $PAGETITLE бите $PAGEEDITDATE көнө $PAGEEDITOR тарафынан $CHANGEDORCREATED. Биттең ағымдағы өлгөһөн $PAGETITLE_URL адресынан ҡарай алаһығыҙ.
+$PAGEINTRO $NEWPAGE
 
-$NEWPAGE
-
-Мөхәррирләүҙең ҡыҫҡаса аңлатмаһы: $PAGESUMMARY $PAGEMINOREDIT
+Мөхәррирләү аңлатмаһы: $PAGESUMMARY $PAGEMINOREDIT
 
 Үҙгәртеүсе менән бәйләнеш өсөн:
-эл. почта: $PAGEEDITOR_EMAIL
²Ð¸ÐºÐ¸: $PAGEEDITOR_WIKI
+Эл. почта адресы: $PAGEEDITOR_EMAIL
\92ики Ð±Ð¸Ñ\82е: $PAGEEDITOR_WIKI
 
 Әгәр һеҙ был битте ҡарамаһағыҙ, бынан һуң буласаҡ үҙгәртеүҙәр тураһында белдереү алмаясаҡһығыҙ. 
 Һеҙ шулай уҡ күҙәтеү исемлегегеҙҙәге бар биттәр өсөн белдереү көйләүен һүндерә алаһығыҙ.
@@ -2190,14 +2211,16 @@ $NEWPAGE
 Электрон почта белдереүҙәрен көйләү өсөн:
 {{canonicalurl:{{#special:Preferences}}}}
 
-Күҙәтеү исемлеге көйләүҙәрен үҙгәртергә:
+Күҙәтеү исемлеге көйләүҙәрен үҙгәртер өсөн:
 {{canonicalurl:{{#special:EditWatchlist}}}}
 
-Битте һеҙҙең күҙәтеү исемлегенән юйырға
+Битте һеҙҙең күҙәтеү исемлегенән юйыр өсөн:
 $UNWATCHURL
 
 Кире бәйләнеш һәм ярҙам:
 {{canonicalurl:{{MediaWiki:Helppage}}}}',
+'created' => 'булдырылды',
+'changed' => 'үҙгәртелгән',
 
 # Delete
 'deletepage' => 'Битте юйырға',
@@ -2351,8 +2374,8 @@ $2 өлгөһөнә ҡайтыу.',
 'undeletedrevisions' => '$1 {{PLURAL:$1|өлгө}} тергеҙелде',
 'undeletedrevisions-files' => '{{PLURAL:$1|өлгө}} һәм {{PLURAL:$2|файл}} тергеҙелде',
 'undeletedfiles' => '{{PLURAL:$1|файл}} тергеҙелде',
-'cannotundelete' => 'ТеÑ\80геÒ\99еп Ð±Ñ\83лманÑ\8b;
-кемдер был битте алдараҡ тергеҙгән, булырға тейеш.',
+'cannotundelete' => 'ЮйÑ\8bÑ\83Ò\99Ñ\8b ÐºÐ¸Ñ\80е Ð°Ð»Ñ\8bп Ð±Ñ\83лманÑ\8b:
+$1',
 'undeletedpage' => "'''$1 бите тергеҙелде'''
 
 Һуңғы юйыуҙарҙы һәм тергеҙеүҙәрҙе ҡарау өсөн, [[Special:Log/delete|юйыу яҙмалары журналын]] ҡарағыҙ.",
@@ -2662,6 +2685,7 @@ $1 ҡатнашыусыһын бикләү сәбәбе: "$2"',
 'immobile-target-namespace-iw' => 'Интервики һылтанмаһы яңы исем булараҡ ҡулланыла алмай.',
 'immobile-source-page' => 'Был биттең исемен үҙгәртеү мөмкин түгел.',
 'immobile-target-page' => 'Биткә был исемде биреү мөмкин түгел.',
+'bad-target-model' => 'Тап килмәгән мәғлүмәттәр моделе. $1, $2 итеп үҙгәртелмәне.',
 'imagenocrossnamespace' => 'Файлға башҡа исемдәр арауығындағы исемде биреү мөмкин түгел.',
 'nonfile-cannot-move-to-file' => 'Файл булмаған есемгә файл исемдәре арауығындағы исемде биреү мөмкин түгел.',
 'imagetypemismatch' => 'Яңы файл киңәйтеүе уның төрө менән тап килмәй',
@@ -2738,6 +2762,7 @@ $1 ҡатнашыусыһын бикләү сәбәбе: "$2"',
 'import-interwiki-templates' => 'Бөтә ҡалыптарҙы индерергә',
 'import-interwiki-submit' => 'Тейәргә',
 'import-interwiki-namespace' => 'Кәрәкле исемдәр арауығы:',
+'import-interwiki-rootpage' => 'Төп бит (мотлаҡ түгел):',
 'import-upload-filename' => 'Файл исеме:',
 'import-comment' => 'Иҫкәрмә:',
 'importtext' => 'Зинһар, файлды сығанаҡ викинан [[Special:Export|махсус ҡорал]] ярҙамында сығарығыҙ. Артабан уны компьютерығыҙға һаҡлағыҙ һәм бында тейәгеҙ.',
@@ -2773,6 +2798,10 @@ $1 ҡатнашыусыһын бикләү сәбәбе: "$2"',
 'import-error-interwiki' => '«$1» бите импортҡа сығарылманы, сөнки уның исеме тышҡы һылианма  (интервики)өсөн резервланған.',
 'import-error-special' => ' «$1» бите импортҡа сығарылманы, сөнки ул биттәр яһау мөмкин булмаған исемдәр арауығына ҡарай.',
 'import-error-invalid' => '"$1" бите яраҡһыҙ исеме өсөн импортланманы.',
+'import-error-unserialize' => '«$1» битенең $2 өлгөһөн структуралаштырып (десериаялап) булмай. $4 форматында серияланған $3 эстәлегенең моделеның был өлгөлә ҡулланылыуы тураһында хәбәр алынды.',
+'import-options-wrong' => 'Хаталы {{PLURAL:$2|опция|опциялар}}: <nowiki>$1</nowiki>',
+'import-rootpage-invalid' => 'Төп биттең күрһәтелгән исеме яңылыш.',
+'import-rootpage-nosubpage' => 'Төп биттең "$1" исемдәр арауығы эске биттәргә рөхсәт бирмәй.',
 
 # Import log
 'importlogpage' => 'Тейәү яҙмалары журналы',
@@ -2917,9 +2946,17 @@ The wiki server cannot provide data in a format your client can read.',
 'pageinfo-authors' => 'Төрлө авторҙар һаны',
 'pageinfo-recent-edits' => 'Һуңғы ваҡыттағы төҙәтеүҙәр ($1 эсендә)',
 'pageinfo-recent-authors' => 'Төрлө авторҙарҙың һуңғы һаны',
+'pageinfo-magic-words' => 'Тылсымлы {{PLURAL:$1|һүҙ|һүҙҙәр}} ($1)',
 'pageinfo-hidden-categories' => 'Йәшерен {{PLURAL:$1|категория|категориялар}} ($1)',
 'pageinfo-templates' => 'Ҡулланылған {{PLURAL:$1|ҡалып|ҡалыптар}} ($1)',
 'pageinfo-toolboxlink' => 'Бит мәғлүмәттәре',
+'pageinfo-redirectsto' => 'Йүнәлтеү',
+'pageinfo-redirectsto-info' => 'мәғлүмәт',
+'pageinfo-contentpage' => 'Эстәлек бите тип иҫәпләнә',
+'pageinfo-contentpage-yes' => 'Эйе',
+'pageinfo-protect-cascading' => 'Бынан башлап һикәлтәле һаҡлау',
+'pageinfo-protect-cascading-yes' => 'Эйе',
+'pageinfo-protect-cascading-from' => 'Бынан башлап һикәлтәле һаҡлау',
 
 # Skin names
 'skinname-standard' => 'Классик',
@@ -2940,6 +2977,8 @@ The wiki server cannot provide data in a format your client can read.',
 'markedaspatrollederror' => 'Тикшерелгән тип билдәләп булмай',
 'markedaspatrollederrortext' => 'Һеҙ тикшерелгән тип билдәләнәсәк биттең өлгөһөн күрһәтергә тейешһегеҙ.',
 'markedaspatrollederror-noautopatrol' => 'Һеҙгә үҙегеҙҙең үҙгәртеүҙәрегеҙҙе тикшерелгән тип билдәләргә рөхсәт ителмәй.',
+'markedaspatrollednotify' => '$1 битендәге үҙгәртеү патрулләнгән тип билдәләнде.',
+'markedaspatrollederrornotify' => 'Патрулләнгән тип билдәләү уңышһыҙ тамамланды.',
 
 # Patrol log
 'patrol-log-page' => 'Тикшереү яҙмалары журналы',
@@ -2973,6 +3012,7 @@ $1',
 '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' => 'Тулы асыҡлыҡ',
 'show-big-image-preview' => 'Байҡау ваҡытындағы күләм: $1.',
 'show-big-image-other' => '{{PLURAL:$2|Башҡа сиселеш|Башҡа сиселештәр}}: $1.',
@@ -3004,6 +3044,7 @@ $1',
 'hours' => '{{PLURAL:$1|$1 сәғәт|$1 сәғәт}}',
 'days' => '{{PLURAL:$1|$1 көн|$1 көн}}',
 'ago' => '$1 элек',
+'just-now' => 'яңы ғына',
 
 # Bad image list
 'bad_image_list' => 'Формат киләһе рәүештә булырға тейеш:
@@ -3501,6 +3542,7 @@ $5
 # Scary transclusion
 'scarytranscludedisabled' => '[Интервики индереү мөмкинлеге һүндерелгән]',
 'scarytranscludefailed' => '[$1 ҡалыбына мөрәжәғәт итеү хатаһы]',
+'scarytranscludefailed-httpstatus' => '[$1 өсөн ҡалып алып булманы: HTTP $2]',
 'scarytranscludetoolong' => '[URL адрес бигерәк оҙон]',
 
 # Delete conflict
@@ -3611,6 +3653,7 @@ $5
 'version-license' => 'Рөхсәтнамә',
 'version-poweredby-credits' => "Был вики проект '''[//www.mediawiki.org/ MediaWiki]''' нигеҙендә эшләй, copyright © 2001-$1 $2.",
 'version-poweredby-others' => 'башҡалар',
+'version-credits-summary' => '[[Special:Version|MediaWiki]] үҫешенә өлөш индергәндәре өсөн киләһе ҡатнашыусыларға рәхмәт әйтәбеҙ.',
 'version-license-info' => 'MediaWiki — ирекле программа, һеҙ уны Ирекле программалар фонды тарафынан баҫтырылған GNU General Public License рөхсәтнамәһенә ярашлы тарата һәм/йәки үҙгәртә алаһығыҙ (рөхсәтнамәнең йә исенсе өлгөһө, йә унан һуңғы өлгөләре).
 
 MediaWiki файҙалы булыр, тигән өмөттә, ләкин БЕР НИДӘЙ ҘӘ ЯУАПЛЫЛЫҠ ЙӨКЛӘМӘҺЕҘ, хатта фараз ителгән ҺАТЫУ ӨСӨН ЯРАҠЛЫЛЫҠ йәки БИЛДӘЛӘНГӘН МАҠСАТ ӨСӨН ЯРАҠЛЫТЫҠ тураһында яуаплылыҡ йөкләмәһеҙ таратыла. Ентекле мәғлүмәт алыр өсөн, GNU General Public License рөхсәтнамәһе тураһында уҡығыҙ.
@@ -3755,7 +3798,10 @@ MediaWiki файҙалы булыр, тигән өмөттә, ләкин БЕР
 'logentry-newusers-create' => '$1 ҡатнашыусыһының иҫәп яҙмаһы булдырылды',
 'logentry-newusers-create2' => '$3 ҡатнашыусыһының иҫәп яҙмаһы $1 тарафынан булдырылды',
 'logentry-newusers-autocreate' => 'Автоматик рәүештә $1 иҫәп яҙыуы яһалды',
-'newuserlog-byemail' => 'пароль электрон почта адресы аша ебәрелде',
+'logentry-rights-rights' => '$1 $3 ҡулланыусыһының төркөмдәрҙәге ағзалығын $4 икән, $5 тип үҙгәртте',
+'logentry-rights-rights-legacy' => '$1 $3 ҡулланыусыһының төркөм ағзалығын үҙгәртте',
+'logentry-rights-autopromote' => '$1 автоматик рәүештә $2 икән, $3 ителде.',
+'rightsnone' => '(юҡ)',
 
 # Feedback
 'feedback-bugornote' => 'Әгәр Һеҙ техник проблеманы ентекле рәүештә аңлатырға теләһәгеҙ, зинһар, [$1 хата тураһында белдерегеҙ].
index 8c242b2..3132f72 100644 (file)
 
 $fallback = 'de';
 
+$namespaceNames = array(
+       NS_MEDIA            => 'Media',
+       NS_SPECIAL          => 'Spezial',
+       NS_TALK             => 'Dischkrian',
+       NS_USER             => 'Nutza',
+       NS_USER_TALK        => 'Nutza_Dischkrian',
+       NS_PROJECT_TALK     => '$1_Dischkrian',
+       NS_FILE             => 'Datei',
+       NS_FILE_TALK        => 'Datei_Dischkrian',
+       NS_MEDIAWIKI        => 'MediaWiki',
+       NS_MEDIAWIKI_TALK   => 'MediaWiki_Dischkrian',
+       NS_TEMPLATE         => 'Vorlog',
+       NS_TEMPLATE_TALK    => 'Vorlog_Dischkrian',
+       NS_HELP             => 'Huif',
+       NS_HELP_TALK        => 'Huif_Dischkrian',
+       NS_CATEGORY         => 'Kategorie',
+       NS_CATEGORY_TALK    => 'Kategorie_Dischkrian',
+);
+
+$namespaceAliases = array(
+       # German namespaces
+       'Medium'               => NS_MEDIA,
+       'Diskussion'           => NS_TALK,
+       'Benutzer'             => NS_USER,
+       'Benutzer_Diskussion'  => NS_USER_TALK,
+       '$1_Diskussion'        => NS_PROJECT_TALK,
+       'Datei_Diskussion'     => NS_FILE_TALK,
+       'MediaWiki_Diskussion' => NS_MEDIAWIKI_TALK,
+       'Vorlage'              => NS_TEMPLATE,
+       'Vorlage_Diskussion'   => NS_TEMPLATE_TALK,
+       'Hilfe'                => NS_HELP,
+       'Hilfe_Diskussion'     => NS_HELP_TALK,
+       'Kategorie_Diskussion' => NS_CATEGORY_TALK,
+);
+
 $messages = array(
 # User preference toggles
 'tog-underline' => 'Links unterstreichen:',
-'tog-justify' => 'Text ois Blócksootz',
+'tog-justify' => 'Text ois Blocksotz',
 'tog-hideminor' => 'Kloane Änderrungen ausblenden',
 'tog-hidepatrolled' => 'Kontroilirde Änderrungen in dé „Létzten Änderrungen“ ausblenden',
 'tog-newpageshidepatrolled' => 'Kóntróilirde Seiten auf da Listen „Neiche Seiten“ vaberng',
@@ -568,7 +603,6 @@ Zur Informazion foigt da aktuöie Logbuachaitrog:",
 'template-protected' => '(schreibgschitzt)',
 'template-semiprotected' => '(schreibgschitzt fia ned-ogmejdte Nutza)',
 'hiddencategories' => 'De Seitn is in {{PLURAL:$1|a vasteckde Kategorie|$1 vasteckde Kategorina}} eisortiad:',
-'nocreatetitle' => 'De Erstöiung vo naiche Saiten is aigschränkt.',
 'nocreate-loggedin' => "Du host koah Berechtigung, neiche Seiten z' erstön.",
 'permissionserrors' => 'Berechtigungsfeeler',
 'permissionserrorstext' => 'Du bist néd berechtigt, dé Akzión auszfyrn.  {{PLURAL:$1|Grund|Grynd}}:',
@@ -757,6 +791,9 @@ Dei Mail-Adress wead dabei ned ozoagt.',
 'right-edit' => 'Seiten beorweiten',
 'right-block' => 'Benutzer sperrn (Schreiwrecht)',
 
+# Special:Log/newusers
+'newuserlogpage' => 'Neiomejdungs-Logbuach',
+
 # User rights log
 'rightslog' => 'Rechte-Logbiache',
 
@@ -1046,9 +1083,6 @@ Links as Naumensraim wern do néd afglistt.",
 'listusers-submit' => 'Zoag',
 'listusers-noresult' => 'Koane Benutzer gfunden.',
 
-# Special:Log/newusers
-'newuserlogpage' => 'Neiomejdungs-Logbuach',
-
 # Special:ListGroupRights
 'listgrouprights' => 'Benutzergruppmrechtt',
 'listgrouprights-summary' => 'Dés do is a Listen voh dé in dém Wiki definierden Benutzergruppm und da dodamid vabundernen Rechtt.
@@ -1156,6 +1190,8 @@ Um d\' Eihstöungen voh deine Beówochtungslisten åzpassen, bsuachst {{canonica
 Um d\' Seiten voh deiner Beówochtungslisten ower z\' doah, bsuachst $UNWATCHURL
 
 Ryckmödungen und a weidre Hüf: {{canonicalurl:{{MediaWiki:Helppage}}}}',
+'created' => 'erstöd',
+'changed' => 'gänderd',
 
 # Delete
 'deletepage' => 'Seiten léschen',
diff --git a/languages/messages/MessagesBat_smg.php b/languages/messages/MessagesBat_smg.php
deleted file mode 100644 (file)
index 44041f0..0000000
+++ /dev/null
@@ -1,15 +0,0 @@
-<?php
-/** Samogitian
- *
- * ISO 639-3 code 'sgs' should be used. This is code is maintained for backward
- * compatilibity.
- *
- * See MessagesQqq.php for message documentation incl. usage of parameters
- * To improve a translation please visit http://translatewiki.net
- *
- * @ingroup Language
- * @file
- *
- */
-
-$fallback = 'sgs, lt';
index bfc8df8..274b1da 100644 (file)
@@ -757,7 +757,6 @@ $2',
 'template-semiprotected' => '(نیم محافظتی)',
 'hiddencategories' => 'ای صفحه عضوی چه {{PLURAL:$1|1 hidden category|$1 پناهین دسته جات}}:',
 'edittools' => '<!-- <strong>په کپی و پست کتن چه CTRL+V , CTRL+C استفاده کنیت.</strong> -->',
-'nocreatetitle' => 'شرکتن صفحه محدودنت',
 'nocreatetext' => '{{SITENAME}} شما را چه شرکتن نوکین صفحه منه کته.
 شما تونیت برگردیت و یک پیشگین صفحه ای اصلاح کنیت، یا [[Special:UserLogin|وارد بیت یان یک حسابی شرکنیت]].',
 'nocreate-loggedin' => 'شما را اجازت په شرکتن نوکین صفحات نیست.',
@@ -1212,11 +1211,13 @@ $1",
 'right-siteadmin' => 'کبل و پچ دیتابیس',
 'right-override-export-depth' => 'درگیزگ صفحات گون صفحاتی لینک بوتگین ته سطح ۵',
 
+# Special:Log/newusers
+'newuserlogpage' => 'ورود شرکتن کاربر',
+'newuserlogpagetext' => '.شی یک ورودی چه شرکتن کاربر',
+
 # User rights log
 'rightslog' => 'ورودان حقوق کاربر',
 'rightslogtext' => 'شی یک آماری چه تغییرات په حقوق کاربری انت.',
-'rightslogentry' => 'عوض بوت عضویت گروهی په $1  چه $2 په $3',
-'rightsnone' => '(هچ یک)',
 
 # Associated actions - in the sentence "You do not have permission to X"
 'action-read' => 'وانگ این صفحه',
@@ -1704,10 +1705,6 @@ PICT # misc.
 'activeusers-from' => 'پیشدار کاربرانی که شروع بنت گون :‌',
 'activeusers-noresult' => 'هچ کاربری درگیزگ نه بیت',
 
-# Special:Log/newusers
-'newuserlogpage' => 'ورود شرکتن کاربر',
-'newuserlogpagetext' => '.شی یک ورودی چه شرکتن کاربر',
-
 # Special:ListGroupRights
 'listgrouprights' => 'حقوق گروه کاربر',
 'listgrouprights-summary' => 'جهلیگین یک لیستی چه گروهان کاربری تعریف بوتگین ته ای ویکی انت گون آیانی حق دسترسی آن همراهنت.
@@ -1813,6 +1810,8 @@ $NEWPAGE
 
 نظرات و گیشترین کمک:
 {{canonicalurl:{{MediaWiki:Helppage}}}}',
+'created' => 'شربوتت',
+'changed' => 'عوض بوت.',
 
 # Delete
 'deletepage' => 'حذف صفحه',
@@ -3123,6 +3122,6 @@ $5
 # New logging system
 'revdelete-restricted' => 'محدودیت آن په مدیران سیستم بوت',
 'revdelete-unrestricted' => 'به زور چه مدیران سیستم محدودیتان',
-'newuserlog-byemail' => 'کلمه رمز گون ایمیل دیم دهگ بوت',
+'rightsnone' => '(هچ یک)',
 
 );
index 0d75dbe..ad1147b 100644 (file)
@@ -231,6 +231,7 @@ $messages = array(
 'newwindow' => '(minabukas sa bàgong bintanà)',
 'cancel' => 'Kanselaron',
 'moredotdotdot' => 'Kadagdagan...',
+'morenotlisted' => 'Dakol pa an bakong listado...',
 'mypage' => 'An Pahina',
 'mytalk' => 'Orolayan',
 'anontalk' => 'Olay para kaining IP address',
@@ -607,6 +608,7 @@ Pakilaog sana tabi nin sarong tugmadong koreo o pabayae na mayong laman an surat
 # E-mail sending
 'php-mail-error-unknown' => 'Bakong bantog na kasalaan sa PHP mail() function.',
 'user-mail-no-addy' => 'Nagprubar na magpadara nin e-koreo na mayo nin e-koreong address.',
+'user-mail-no-body' => 'Nagprubar na magpadara nin e-surat na mayong laman o daeng kanultulan na halipot an hawak.',
 
 # Change password dialog
 'resetpass' => 'Ribayan an sekretong panlaog',
@@ -667,6 +669,7 @@ Temporaryong sekretong panlaog: $2',
 'changeemail-oldemail' => 'Presenteng e-koreong address:',
 'changeemail-newemail' => 'Bagong e-koreong address:',
 'changeemail-none' => 'mayo tabi.',
+'changeemail-password' => 'An saimong {{SITENAME}} sikretong panlaog:',
 'changeemail-submit' => 'Ribayan an e-koreo',
 'changeemail-cancel' => 'Kanselaha',
 
@@ -849,7 +852,6 @@ An pinakahuring entrada sa talaan pinaghaya sa ibaba bilang reperensiya:",
 'template-semiprotected' => '(semi-protektado)',
 'hiddencategories' => 'Ining pahina sarong miyembro kan {{PLURAL:$1|1 pinagtagong kategorya|$1 pinagtagong mga kategorya}}:',
 'edittools' => '<!-- An teksto digdi mahihiling sa babâ kan mga pormang pighihirá asin pigkakarga. -->',
-'nocreatetitle' => 'Limitado an paggibo nin pahina',
 'nocreatetext' => '{{SITENAME}} pinagpupugol an kakayanan na magmukna nin baguhong mga pahina.
 Ika makakabalik asin magliwat kan eksistidong nang pahina, o [[Special:UserLogin|maglaog ka o magmukna nin sarong panindog]].',
 'nocreate-loggedin' => 'Ika mayo tabi nin permiso tanganing magmukna nin baguhong mga pahina.',
@@ -1250,9 +1252,9 @@ Ini dae tabi matitingkog.',
 'prefs-emailconfirm-label' => 'Kumpirmasyon sa E-koreo',
 'prefs-textboxsize' => 'Sukol kan bintana sa pagliliwat',
 'youremail' => 'E-koreo:',
-'username' => 'Pangaran kan paragamit:',
-'uid' => 'ID kan paragamit:',
-'prefs-memberingroups' => 'Miembro kan {{PLURAL:$1|grupo|grupos}}:',
+'username' => '{{GENDER:$1|Pangaran nin paragamit}}:',
+'uid' => '{{GENDER:$1|Paragamit}} ID:',
+'prefs-memberingroups' => '{{GENDER:$2|Miyembro}} kan {{PLURAL:$1|grupo|mga grupo}}:',
 'prefs-registration' => 'Rehistrasyong oras:',
 'yourrealname' => 'Totoong pangaran:',
 'yourlanguage' => 'Tataramon:',
@@ -1402,15 +1404,13 @@ An saimong e-surat na adres dae ipagbuyagyag kunsoarin na an ibang paragamit mak
 'right-sendemail' => 'Magpadara nin e-koreo sa ibang mga paragamit',
 'right-passwordreset' => 'Tanawon an e-koreo kan pagbabago nin sekretong panlaog',
 
+# Special:Log/newusers
+'newuserlogpage' => 'Paragamit na talaan nin pagmukna',
+'newuserlogpagetext' => 'Ini an talaan kan mga pagmukna nin paragamit.',
+
 # User rights log
 'rightslog' => 'Usip nin derechos nin paragamit',
 'rightslogtext' => 'Ini an historial kan mga pagbabâgo sa mga derecho nin parágamit.',
-'rightslogentry' => 'Rinibayab an pagkamyembro ni $1 sa $2 sagkod sa $3',
-'rightslogentry-autopromote' => 'dati na awtomatikong pinagpalangkaw gikan sa $2 sagkod $3',
-'logentry-rights-rights' => '$1 nagliwat kan pangrupong pagkamiyembro para sa $3 gikan sa $4 pasiring sa $5',
-'logentry-rights-rights-legacy' => '$1 nagliwat kan pangrupong pagkamiyembro para sa $3',
-'logentry-rights-autopromote' => '$1 awtomatikong pinagpalangkaw gikan sa $4 pasiring sa $5',
-'rightsnone' => '(mayô)',
 
 # Associated actions - in the sentence "You do not have permission to X"
 'action-read' => 'basaha ining pahina',
@@ -2025,9 +2025,9 @@ Asin man hilnga an [[Special:WantedCategories|kinakaipong mga kategorya]].',
 'linksearch-pat' => 'Pangarugan sa paghahanap:',
 'linksearch-ns' => 'Espasyong-ngaran:',
 'linksearch-ok' => 'Hanápon',
-'linksearch-text' => 'Mga tsambang baraha arog baka kan "*.wikipedia.org" puwedeng paggamiton.
+'linksearch-text' => 'Mga tsambang baraha arog baka kan "*.wikipedia.org" na puwedeng paggamiton.
 Minakaipo kisera halangkaw na kamugtakan nin kinasakupan, halimbawa "*.org".<br />
-Suportadong mga panundan: <code>$1</code> (defaults to http:// kun mayo nin panundan na pinagkaag).',
+Suportadong {{PLURAL:$2|protokol|mga protokol}}: <code>$1</code> (defaults to http:// kun mayong protokol na pinagkaag).',
 'linksearch-line' => '$1 an nakatakod sa $2',
 'linksearch-error' => 'Mga pantsambang baraha mapuwedeng magluwas sana sa poon kan hostname.',
 
@@ -2046,10 +2046,6 @@ Suportadong mga panundan: <code>$1</code> (defaults to http:// kun mayo nin panu
 'activeusers-hidesysops' => 'Itago an mga administrador',
 'activeusers-noresult' => 'Mayong mga paragamit na nanagboan.',
 
-# Special:Log/newusers
-'newuserlogpage' => 'Paragamit na talaan nin pagmukna',
-'newuserlogpagetext' => 'Ini an talaan kan mga pagmukna nin paragamit.',
-
 # Special:ListGroupRights
 'listgrouprights' => 'Mga karapatan kan grupo nin paragamit',
 'listgrouprights-summary' => 'An minasunod iyo an listahan kan mga grupo nin paragamit na pinaghunsay kaining wiki, kaiba an saindang asosyadong mga karapatan nin paggamit.
@@ -2117,11 +2113,8 @@ An e-surat na estada sa saimong pinaglaog sa [[Special:Preferences|saimong parag
 'watchnologin' => 'Mayô sa laog',
 'watchnologintext' => 'Dapat ika si [[Special:UserLogin|nakalaog]] para puede kang magribay kan saimong lista nin mga pigbabantayán.',
 'addwatch' => 'Idagdag sa bantay-listahan',
-'addedwatchtext' => "Ining pahina \"[[:\$1]]\" dinugang sa saimong mga [[Special:Watchlist|Pigbabantayan]].
-An mga pagbabâgo sa páhinang ini asin sa mga páhinang olay na kapadis kaini ililista digdi,
-asin an páhina isusurat nin '''mahîbog''' sa [[Special:RecentChanges|lista nin mga kaaagi pa sanang pagbabâgo]] para madalî ining mahiling.
-
-Kun boot mong halîon an páhina sa pigbabantayan mo sa maabot na panahon, pindoton an \"Pabayaan\" ''side bar''.",
+'addedwatchtext' => 'Ining pahina "[[:$1]]" dinadagdag sa saimong mga [[Special:Watchlist|Bantay-listahan]].
+An maabot na mga pagbabâgo sa páhinang ini asin sa asosyadong páhina nin olay paglilistahon duman.',
 'removewatch' => 'Halion gikan sa bantay-listahan',
 'removedwatchtext' => 'An pahina "[[:$1]]" pinaghale gikan sa [[Special:Watchlist|saimong bantay-listahan]].',
 'watch' => 'Bantayán',
@@ -2155,7 +2148,7 @@ Kun boot mong halîon an páhina sa pigbabantayan mo sa maabot na panahon, pindo
 'enotif_subject_moved' => '{{SITENAME}} pahina $1 pinagbalyo ni {{gender:$2|$2}}',
 'enotif_subject_restored' => '{{SITENAME}} pahina $1 pinagbalik-liwat ni {{gender:$2|$2}}',
 'enotif_subject_changed' => '{{SITENAME}} pahina $1 pinagliwat ni {{gender:$2|$2}}',
-'enotif_body_intro_deleted' => 'An {{SITENAME}} pahina $1 pinagpura sa $PAGEEDITDATE ni {{gender:$2|$2}}, hilngon $3 para sa pinakahuring rebisyon.',
+'enotif_body_intro_deleted' => 'An {{SITENAME}} pahina $1 pinagpura sa $PAGEEDITDATE ni {{gender:$2|$2}}, hilngon sa $3.',
 'enotif_body_intro_created' => 'An {{SITENAME}} pahina $1 pinagmukna sa $PAGEEDITDATE ni {{gender:$2|$2}}, hilngon $3 para sa pinakahuring rebisyon.',
 'enotif_body_intro_moved' => 'An {{SITENAME}} pahina $1 pinagbalyo sa $PAGEEDITDATE ni {{gender:$2|$2}}, hilngon $3 para sa pinakahuring rebisyon.',
 'enotif_body_intro_restored' => 'An {{SITENAME}} pahina $1 pinagbalik-liwat sa $PAGEEDITDATE ni {{gender:$2|$2}}, hilngon $3 para sa pinakahuring rebisyon.',
@@ -2190,6 +2183,8 @@ $UNWATCHURL
 
 Balik-simbag asin kadagdagang asistensiya:
 {{canonicalurl:{{MediaWiki:Helppage}}}}',
+'created' => 'piggibo',
+'changed' => 'pigbâgo',
 
 # Delete
 'deletepage' => 'Paraon an pahina',
@@ -2261,6 +2256,8 @@ Hilnga tabi an [[Special:ProtectedPages|listahan kan protektadong mga pahina]] p
 'prot_1movedto2' => '[[$1]] piglipat sa [[$2]]',
 'protect-badnamespace-title' => 'Dae maprotektaran na espasyong-ngaran',
 'protect-badnamespace-text' => 'Mga pahina kaining espasyong-ngaran dae tabi protektado.',
+'protect-norestrictiontypes-text' => 'Ining pahina dae maprotektaran ta mayo pang ikinaag na mga tipo nin restriksyon.',
+'protect-norestrictiontypes-title' => 'Dae maprotektaran na pahina',
 'protect-legend' => 'Kompermaron an proteksyon',
 'protectcomment' => 'Rason:',
 'protectexpiry' => 'Mápasó:',
@@ -2275,9 +2272,9 @@ Ini an mga puesta sa ngunyan kaining páhina '''$1''':",
 Uya an ngonyan na mga pwesto kan pahinang '''$1''':",
 'protect-cascadeon' => 'Pigproprotektaran ining pahina sa ngonyan ta sabay ini sa mga nasunod na {{PLURAL:$1|pahina, na may|mga pahina, na may}} proteksyong katarata na nakaandar. Pwede mong bàgohon an tangga nin proteksyon kaining pahina, pero mayò ning epekto sa proteksyong katarata.',
 'protect-default' => 'Tuguti an gabos na mga paragamit',
-'protect-fallback' => 'Mangipo kan "$1" na permiso',
-'protect-level-autoconfirmed' => 'Kubkubon an baguhan asin bakong rehistradong mga paragamit',
-'protect-level-sysop' => 'Para sa mga sysop sana',
+'protect-fallback' => 'Minatugot sana sa mga paragamit na igwang "$1" na permiso',
+'protect-level-autoconfirmed' => 'Minatugot sana sa awtokumpirmadong mga paragamit',
+'protect-level-sysop' => 'Minatugot sana sa mga administrador',
 'protect-summary-cascade' => 'katarata',
 'protect-expiring' => 'mápasó sa $1 (UTC)',
 'protect-expiring-local' => 'mapalso sa $1',
@@ -2570,10 +2567,9 @@ Ika dae makakamukna nin sarong panindog.',
 # Move page
 'move-page' => 'Ibalyo an $1',
 'move-page-legend' => 'Ibalyó an páhina',
-'movepagetext' => "Sa paggagamit kan porma na yaon sa ibaba mariribayan nin pangaran an sarong pahina, maibabalyo an gabos kaining historiya pasiring baguhon na pangaran.
-An lumang titulo magigin sarong panlikwat na pahina pasiring sa baguhong titulo.
+'movepagetext' => "Sa paggagamit kan porma na yaon sa ibaba mariribayan nin pangaran an sarong pahina, maibabalyo an gabos kaining historiya pasiring sa baguhon na titulo.
 Ika makakapagsumpay kan mga panlikwat na magtutukdo awtomatiko pasiring sa orihinal na titulo.
-Kun saimong pinili na dae, seguraduhon na ma-tsek kun [[Special:DoubleRedirects|doble]] o [[Special:BrokenRedirects|parasa an mga panlikwat]].
+Kun saimong pinili na dae, seguraduhon na ma-tsek para sa [[Special:DoubleRedirects|doble]] o [[Special:BrokenRedirects|nabaak namga panlikwat]].
 Ika an responsable para himoong segurado na an mga kilyaw padagos na minatukdo kun saen sinda dapat na magduman.
 
 Giromdoma na an pahina '''dae''' maibabalyo kun igwa na nin sarong pahina sa baguhon na titulo, laen lang kun ini daeng laman o sarong panlikwat asin mayo nin nakaaging historiya nin pagliwat.
@@ -2643,7 +2639,7 @@ Igwa nang páhina na "[[:$1]]". Gusto mong parâon ini tangarig maibalyó?',
 'immobile-target-namespace-iw' => 'An Interwiki na kilyaw bakong balido puntirya para sa pagbalyo nin pahina.',
 'immobile-source-page' => 'Ining pahina bakong mabalyuhon.',
 'immobile-target-page' => 'Dae makakabalyo paduman sa titulong destinasyon.',
-'bad-target-model' => 'An pinagmamawot na destinasyon naggagamit kan nalalaeng modelo nin laog. Dae maipagkonberte gikan sa $1 pasiring sa $.',
+'bad-target-model' => 'An pinagmamawot na destinasyon minagamit kan ibahong modelo nin laog. Dae makapagpalis gikan sa $1 pasiring sa $2.',
 'imagenocrossnamespace' => 'Dae makakapagbalyo nin sagunson paduman sa bakong sagunson na espasyong pangaran.',
 'nonfile-cannot-move-to-file' => 'Dae makakapagbalyo nin bakong-sagunson pasiring sa sagunson kan espasyong-pangaran',
 'imagetypemismatch' => 'An baguhon na ekstensyon nin sagunson dae mai-aampad sa tipong ini',
@@ -2759,6 +2755,7 @@ Paki-otro giraray.',
 'import-error-interwiki' => 'An pahina "$1" bakong importado nin huli ta an pangaran kaini reserbado na para sa panluwas na kasugpunan (interwiki).',
 'import-error-special' => 'An pahina "$1" bakong importado nin huli ta ini kabali sa espesyal an espasyong-ngaran na dae nagtutugot nin mga pahina.',
 'import-error-invalid' => 'An pahina "$1" bakong importado nin huli ta an ngaran kaini imbalido.',
+'import-error-unserialize' => 'An rebisyon sa $2 kan pahina "$1" dae maseryalisado. An rebisyon pinagtala na gumamit nin modelong laman na $3 na seryalisado bilang $4.',
 'import-options-wrong' => 'Salang {{PLURAL:$2|pagpipilian|mga pagpipilian}}: <nowiki>$1</nowiki>',
 'import-rootpage-invalid' => 'An pinagtaong ugat na pahina sarong imbalidong titulo.',
 'import-rootpage-nosubpage' => 'Espasyong-ngaran "$1" kan ugat na pahina dae minatugot nin pan-irarom na mga pahina.',
@@ -2914,6 +2911,7 @@ Ini hurot na pinagkausa nin sarong sugpunan pasiring sa sarong pinagbawal na pan
 'pageinfo-magic-words' => 'Mahiko {{PLURAL:$1|taramon|mga taramon}} ($1)',
 'pageinfo-hidden-categories' => 'Itinago na {{PLURAL:$1|kategorya|mga kategorya}} ($1)',
 'pageinfo-templates' => 'Kabaling pinagbalyo na {{PLURAL:$1|panguyog|mga panguyog}} ($1)',
+'pageinfo-transclusions' => '{{PLURAL:$1|Pahina|Mga Pahina}} kabaling pinagbalyo sa ($1)',
 'pageinfo-toolboxlink' => 'Pahina kan impormasyon',
 'pageinfo-redirectsto' => 'Mga panlikwat paduman sa',
 'pageinfo-redirectsto-info' => 'impo',
@@ -2922,6 +2920,10 @@ Ini hurot na pinagkausa nin sarong sugpunan pasiring sa sarong pinagbawal na pan
 'pageinfo-protect-cascading' => 'An mga proteksyon pasurunod gikan digde',
 'pageinfo-protect-cascading-yes' => 'Iyo',
 'pageinfo-protect-cascading-from' => 'An mga proteksyon pasurunod gikan sa',
+'pageinfo-category-info' => 'Impormasyon sa Kategorya',
+'pageinfo-category-pages' => 'Bilang nin mga pahina',
+'pageinfo-category-subcats' => 'Bilang nin mga sub-kategorya',
+'pageinfo-category-files' => 'Bilang nin mga sagunson',
 
 # Skin names
 'skinname-standard' => 'Klasiko',
@@ -2973,6 +2975,7 @@ Sa pagpapa-andar kaini, an saimong sistema mapupuwedeng makompromiso.",
 'file-nohires' => 'Mayong mas halangkáw na resolusyon.',
 'svg-long-desc' => 'file na SVG, haros $1 × $2 pixels, sokol kan file: $3',
 'svg-long-desc-animated' => 'Animatadong SVG na sagunson, nangangaranang $1 x $2 piksel, kadakulaan nin sagunson: $3',
+'svg-long-error' => 'Imbalidong SVG na sagunson: $1',
 'show-big-image' => 'Todong resolusyon',
 'show-big-image-preview' => 'Sukol kaining patanaw: $1.',
 'show-big-image-other' => 'Ibang {{PLURAL:$2|resolusyon|mga resoluyon}}: $1.',
@@ -3002,6 +3005,8 @@ Sa pagpapa-andar kaini, an saimong sistema mapupuwedeng makompromiso.",
 'minutes' => '{{PLURAL:$1|$1 minuto|$1 minutos}}',
 'hours' => '{{PLURAL:$1|$1 oras|$1 oras}}',
 'days' => '{{PLURAL:$1|$1 aldaw|$1 mga aldaw}}',
+'months' => '{{PLURAL:$1|$1 bulan|$1 mga bulan}}',
+'years' => '{{PLURAL:$1|$1 taon|$1 mga taon}}',
 'ago' => '$1 nakaagi',
 'just-now' => 'ngunyan sana',
 
@@ -3587,7 +3592,7 @@ Pwede mo man [[Special:EditWatchlist|gamiton an standard editor]].',
 'watchlisttools-raw' => 'Hirahón an bàgong pigbabantayan',
 
 # Signatures
-'signature' => '[[{{ns:paragamit}}:$1|$2]] ([[{{ns:olay_nin_paragamit}}:$1|olay]])',
+'signature' => '[[{{ns:user}}:$1|$2]] ([[{{ns:user_talk}}:$1|olay]])',
 
 # Core parser functions
 'unknown_extension_tag' => 'Bakong bistadong ekstensyon nin pagmarka "$1"',
@@ -3613,7 +3618,7 @@ Pwede mo man [[Special:EditWatchlist|gamiton an standard editor]].',
 'version-license' => 'Lisensiya',
 'version-poweredby-credits' => "An wiking ini pinagpagana kan '''[//www.mediawiki.org/ MediaWiki]''', copyright © 2001-$1 $2.",
 'version-poweredby-others' => 'mga iba pa',
-'version-credits-summary' => 'Kami gustong rekonosiron an minasunod na mga persona para sa saindang ambag sa [[Espesyal:Bersyon|Mediawiki]].',
+'version-credits-summary' => 'Gusto niyamong rekonosiron an minasunod na mga persona nin huli kan saindang ambag sa [[Special:Version|Mediawiki]].',
 'version-license-info' => 'An MediaWiki sarong libreng kasungatan; puwede mong ipanao ini asin/o baguhon ini sa irarom kan termino nin HNU (Heneral na Pampublikong Lisensiya) bilang publisado kan Free Software Foundation; maski sa arin na bersyon 2 kan lisensiya, o (saimong pansadireng pagpipilian) arinman na huring bersyon.
 
 An MediaWiki ipinagpanao sa paglaom na ini magigin kapakinabangan, pero MAYO NIN ANUMAN NA WARANTIYA; mayo dawa ngani nin pinaghuhurot na warantiya kan MERKANTIBILIDAD o KAUYUGAN PARA SA SARONG PARTIKULAR NA KATUYUHAN. Hilngon an HNU (Heneral na Pampublikong Lisensiya) para sa kadagdagang mga detalye.
@@ -3757,7 +3762,10 @@ Ining sityo igwang naeksperiyensiyahan na mga kakundian sa teknikal.',
 'logentry-newusers-create' => 'An paragamit na panindog $1 pinagmukna na',
 'logentry-newusers-create2' => 'An paragamit na panindog $3 pinagmukna na ni $1',
 'logentry-newusers-autocreate' => 'An paragamit na panindog $1 awtomatikong pinagmukna na',
-'newuserlog-byemail' => 'an pasa-taramon ipinadara na sa paagi kan e-surat',
+'logentry-rights-rights' => '$1 nagliwat kan pangrupong pagkamiyembro para sa $3 gikan sa $4 pasiring sa $5',
+'logentry-rights-rights-legacy' => '$1 nagliwat kan pangrupong pagkamiyembro para sa $3',
+'logentry-rights-autopromote' => '$1 awtomatikong pinagpalangkaw gikan sa $4 pasiring sa $5',
+'rightsnone' => '(mayô)',
 
 # Feedback
 'feedback-bugornote' => 'Kun ika andam na iladawan an sarong teknikal na problema na igwang detalye tabi [$1 ipaaram an kuto].
@@ -3831,6 +3839,4 @@ Kun bako man, ika makakagamit nin sayon na porma sa ibaba. An saimong komento id
 'duration-centuries' => '$1 {{PLURAL:$1|siglo|mga siglo}}',
 'duration-millennia' => '$1 {{PLURAL:$1|milenyo|mga millenyo}}',
 
-# Unknown messages
-'svg-long-error' => 'Imbalidong SVG na sagunson: $1',
 );
index 4c1ae0b..85f4ee5 100644 (file)
@@ -790,7 +790,6 @@ $2
 'template-protected' => '(ахоўваецца)',
 'template-semiprotected' => '(часткова ахоўвацца)',
 'hiddencategories' => 'Старонка належыць да {{PLURAL:$1|1 схаванай катэгорыі|$1 схаваных катэгорый}}:',
-'nocreatetitle' => 'Стварэнне старонак абмежавана',
 'nocreatetext' => 'На пляцоўцы {{SITENAME}} магчымасці стварэння новых старонак абмежаваныя.
 Вы можаце папрацаваць з існуючай старонкай, або [[Special:UserLogin|увайсці ў сістэму, або завесці сабе рахунак]].',
 'nocreate-loggedin' => 'Вам не дазволена ствараць новых старонак.',
@@ -1308,12 +1307,13 @@ $1",
 'right-sendemail' => 'Адправіць па электроннай пошце іншым карыстальнікам',
 'right-passwordreset' => 'прагляд электронных лістоў са змяненнем пароля',
 
+# Special:Log/newusers
+'newuserlogpage' => 'Журнал рэгістрацыі ўдзельнікаў',
+'newuserlogpagetext' => 'Гэта журнал рэгістрацыі новых удзельнікаў.',
+
 # User rights log
 'rightslog' => 'Журнал правоў удзельнікаў',
 'rightslogtext' => 'Журнал змяненняў у дазволах, прыпісаных удзельнікам.',
-'rightslogentry' => 'зменена групавая прыналежнасць $1 з $2 на $3',
-'rightslogentry-autopromote' => 'быў аўтаматычна перакладзены з $2 да $3',
-'rightsnone' => '(няма)',
 
 # Associated actions - in the sentence "You do not have permission to X"
 'action-read' => 'чытаць гэтую старонку',
@@ -1908,10 +1908,6 @@ $1',
 'activeusers-hidesysops' => 'Без адміністратараў',
 'activeusers-noresult' => 'Няма такіх удзельнікаў.',
 
-# Special:Log/newusers
-'newuserlogpage' => 'Журнал рэгістрацыі ўдзельнікаў',
-'newuserlogpagetext' => 'Гэта журнал рэгістрацыі новых удзельнікаў.',
-
 # Special:ListGroupRights
 'listgrouprights' => 'Дазволы для груп удзельнікаў',
 'listgrouprights-summary' => 'Гэты пералік вызначаных у гэтай вікі груп удзельнікаў, разам з прыпісанымі ім дазволамі.
@@ -2039,6 +2035,8 @@ $UNWATCHURL
 
 Зваротная сувязь і дапамога
 {{canonicalurl:{{MediaWiki:Helppage}}}}',
+'created' => 'створана',
+'changed' => 'зменена',
 
 # Delete
 'deletepage' => 'Сцерці старонку',
@@ -3527,7 +3525,7 @@ MediaWiki распаўсюджваецца, спадзеючыся на прыд
 'logentry-newusers-create' => '$1 стварыў уліковы запіс удзельніка',
 'logentry-newusers-create2' => '$1 стварыў уліковы запіс удзельніка $3',
 'logentry-newusers-autocreate' => 'Аўтаматычна створаны ўліковы запіс $1',
-'newuserlog-byemail' => 'пароль адасланы эл.поштай',
+'rightsnone' => '(няма)',
 
 # Feedback
 'feedback-bugornote' => 'Калі вы гатовыя падрабязна апісаць тэхнічную праблему, калі ласка, [$1 паведаміце пра памылку].
index e86020f..4c8b054 100644 (file)
@@ -393,6 +393,7 @@ $messages = array(
 'newwindow' => '(адкрываецца ў новым акне)',
 'cancel' => 'Скасаваць',
 'moredotdotdot' => 'Далей…',
+'morenotlisted' => 'Болей не паказанага...',
 'mypage' => 'Старонка',
 'mytalk' => 'Гутаркі',
 'anontalk' => 'Гутаркі для гэтага IP-адрасу',
@@ -694,7 +695,7 @@ $2',
 'gotaccount' => "Ужо маеце рахунак? '''$1'''.",
 'gotaccountlink' => 'Увайдзіце',
 'userlogin-resetlink' => 'Забыліся пра зьвесткі для ўваходу?',
-'createaccountmail' => 'па Ñ\8dлекÑ\82Ñ\80оннай Ð¿Ð¾Ñ\88Ñ\86е',
+'createaccountmail' => 'СÑ\82ваÑ\80Ñ\8bÑ\86Ñ\8c Ñ\87аÑ\81овÑ\8b Ð°Ð´Ð²Ð¾Ð»Ñ\8cнÑ\8b Ð¿Ð°Ñ\80олÑ\8c Ñ\96 Ð´Ð°Ñ\81лаÑ\86Ñ\8c Ñ\8fго Ð½Ð° e-mail Ð°Ð´Ñ\80аÑ\81, Ð¿Ð°Ð·Ð½Ð°Ñ\87анÑ\8b Ð½Ñ\96жÑ\8dй',
 'createaccountreason' => 'Прычына:',
 'badretype' => 'Уведзеныя Вамі паролі не супадаюць.',
 'userexists' => 'Уведзенае Вамі імя ўдзельніка ўжо выкарыстоўваецца кімсьці іншым. 
@@ -766,6 +767,7 @@ $2',
 # E-mail sending
 'php-mail-error-unknown' => 'Узьнікла невядомая памылка ў функцыі PHP mail()',
 'user-mail-no-addy' => 'Спроба даслаць электронны ліст без адрасу дастаўкі',
+'user-mail-no-body' => 'Спроба даслаць ліст з пустым або надзвычай кароткім зьместам.',
 
 # Change password dialog
 'resetpass' => 'Зьмяніць пароль',
@@ -827,6 +829,7 @@ $2
 'changeemail-oldemail' => 'Цяперашні адрас электроннай пошты:',
 'changeemail-newemail' => 'Новы адрас электроннай пошты:',
 'changeemail-none' => '(няма)',
+'changeemail-password' => 'Ваш пароль у {{GRAMMAR:месны|{{SITENAME}}}}:',
 'changeemail-submit' => 'Зьмяніць адрас электроннай пошты',
 'changeemail-cancel' => 'Скасаваць',
 
@@ -987,8 +990,8 @@ $2
 '''КАЛІ ЛАСКА, НЕ ЗЬМЯШЧАЙЦЕ ТУТ БЕЗ ДАЗВОЛУ МАТЭРЫЯЛЫ, ЯКІЯ АХОЎВАЮЦЦА АЎТАРСКІМ ПРАВАМ!'''",
 'longpageerror' => "'''Памылка: Аб’ём тэксту, які Вы спрабуеце запісаць складае $1 {{PLURAL:$1|кілябайт|кілябайты|кілябайтаў}}, што болей устаноўленага абмежаваньня на $2 {{PLURAL:$2|кілябайт|кілябайты|кілябайтаў}}.'''
 Старонка ня можа быць захаваная.",
-'readonlywarning' => "'''ПАПЯРЭДЖАНЬНЕ: База зьвестак была заблякаваная для тэхнічнага абслугоўваньня, таму немагчыма зараз захаваць Вашыя зьмены.
-Вы можаце скапіяваць тэкст у файл на Вашым кампутары, а пазьней захаваць сюды.'''
+'readonlywarning' => "'''ПАПЯРЭДЖАНЬНЕ: База зьвестак была заблякаваная для тэхнічнага абслугоўваньня, таму немагчыма зараз захаваць Вашыя зьмены.'''
+Вы можаце скапіяваць тэкст у файл на Вашым кампутары, а пазьней захаваць сюды.
 
 Адміністратар, які заблякаваў базу зьвестак, прапанаваў наступнае тлумачэньне: $1",
 'protectedpagewarning' => "'''Папярэджаньне: Гэтая старонка была абароненая, таму толькі адміністратары могуць рэдагаваць яе.'''
@@ -1004,7 +1007,6 @@ $2
 'template-protected' => '(абаронены)',
 'template-semiprotected' => '(часткова абароненая)',
 'hiddencategories' => 'Гэтая старонка належыць $1 {{PLURAL:$1|схаванай катэгорыі|схаваным катэгорыям|схаваным катэгорыям}}:',
-'nocreatetitle' => 'Стварэньне старонак абмежаванае',
 'nocreatetext' => 'У {{GRAMMAR:месны|{{SITENAME}}}} абмежаванае стварэньне новых старонак.
 Вы можаце вярнуцца і рэдагаваць існуючую старонку, альбо [[Special:UserLogin|ўвайсьці ў сыстэму ці стварыць рахунак]].',
 'nocreate-loggedin' => 'Вы ня маеце дазволу на стварэньне новых старонак.',
@@ -1553,15 +1555,13 @@ $1",
 'right-sendemail' => 'адпраўка электронных лістоў іншым удзельнікам',
 'right-passwordreset' => 'прагляд электронных лістоў з ачысткай паролю',
 
+# Special:Log/newusers
+'newuserlogpage' => 'Журнал стварэньня рахункаў',
+'newuserlogpagetext' => 'Гэта журнал стварэньня рахункаў удзельнікаў і ўдзельніц.',
+
 # User rights log
 'rightslog' => 'Журнал правоў удзельнікаў',
 'rightslogtext' => 'Гэта журнал зьменаў правоў удзельнікаў.',
-'rightslogentry' => 'зьменена прыналежнасьць $1 з групы $2 да $3',
-'rightslogentry-autopromote' => 'быў аўтаматычна падвышаны з $2 да $3',
-'logentry-rights-rights' => '$1 {{GENDER:$1|зьмяніў|зьмяніла}} прыналежнасьць $3 да групы з $4 на $5',
-'logentry-rights-rights-legacy' => '$1 {{GENDER:$1|зьмяніў|зьмяніла}} прыналежнасьць $3 да групаў',
-'logentry-rights-autopromote' => '$1 {{GENDER:$1|быў аўтаматычна пераведзены|была аўтаматычна пераведзеная}} з групы $4 ў $5',
-'rightsnone' => '(няма)',
 
 # Associated actions - in the sentence "You do not have permission to X"
 'action-read' => 'чытаньне гэтай старонкі',
@@ -2181,7 +2181,7 @@ $1',
 'linksearch-ok' => 'Шукаць',
 'linksearch-text' => 'Можна ўжываць сымбалі падстаноўкі, напрыклад, «*.wikipedia.org».<br />
 Неабходны дамэн першага ўзроўню, напрыклад, «*.org».<br />
-Пратаколы, якія падтрымліваюцца: <code>$1</code> (дапомна http://, калі пратакол не пазначаны).',
+{{PLURAL:$2|Пратакол, які падтрымліваецца|Пратаколы, якія падтрымліваюцца}}: <code>$1</code> (дапомна http://, калі пратакол не пазначаны).',
 'linksearch-line' => 'Спасылка на $1 з $2',
 'linksearch-error' => 'Сымбалі падстаноўкі могуць ужывацца толькі ў пачатку адрасоў.',
 
@@ -2194,16 +2194,12 @@ $1',
 # Special:ActiveUsers
 'activeusers' => 'Сьпіс актыўных удзельнікаў',
 'activeusers-intro' => 'Гэта сьпіс удзельнікаў, якія былі актыўнымі на працягу $1 {{PLURAL:$1|апошняга дня|апошніх дзён|апошніх дзён}}.',
-'activeusers-count' => '$1 {{PLURAL:$1|рэдагаваньне|рэдагаваньні|рэдагаваньняў}} за $3 {{PLURAL:$3|апошні дзень|апошнія дні|апошніх дзён}}',
+'activeusers-count' => '$1 {{PLURAL:$1|дзеяньне|дзеяньні|дзеяньняў}} за $3 {{PLURAL:$3|апошні дзень|апошнія дні|апошніх дзён}}',
 'activeusers-from' => 'Паказваць ўдзельнікаў, пачынаючы з:',
 'activeusers-hidebots' => 'Схаваць робатаў',
 'activeusers-hidesysops' => 'Схаваць адміністратараў',
 'activeusers-noresult' => 'Удзельнікі ня знойдзеныя.',
 
-# Special:Log/newusers
-'newuserlogpage' => 'Журнал стварэньня рахункаў',
-'newuserlogpagetext' => 'Гэта журнал стварэньня рахункаў удзельнікаў і ўдзельніц.',
-
 # Special:ListGroupRights
 'listgrouprights' => 'Правы групаў удзельнікаў',
 'listgrouprights-summary' => 'Ніжэй пададзены сьпіс групаў удзельнікаў {{GRAMMAR:родны|{{SITENAME}}}}, разам зь іх правамі.
@@ -2261,7 +2257,7 @@ $1',
 'usermessage-editor' => 'Дастаўка сыстэмных паведамленьняў',
 
 # Watchlist
-'watchlist' => 'Ð\9cой Ñ\81ьпіс назіраньня',
+'watchlist' => 'Сьпіс назіраньня',
 'mywatchlist' => 'Сьпіс назіраньня',
 'watchlistfor2' => 'Для $1 $2',
 'nowatchlist' => 'Ваш сьпіс назіраньня пусты.',
@@ -2269,8 +2265,8 @@ $1',
 'watchnologin' => 'Вы не ўвайшлі ў сыстэму',
 'watchnologintext' => 'Вам неабходна [[Special:UserLogin|ўвайсьці ў сыстэму]], каб зьмяніць Ваш сьпіс назіраньня.',
 'addwatch' => 'Дадаць ў сьпіс назіраньня',
-'addedwatchtext' => "Старонка «[[:$1]]» была дададзеная да Вашага [[Special:Watchlist|сьпісу назіраньня]].
-Наступныя зьмены ў гэтай старонцы і зьвязанай зь ёю старонцы абмеркаваньняў будуць бачныя там, а ў [[Special:RecentChanges|сьпісе апошніх зьменаў]] старонка будзе выглядаць '''тлустай''', каб зьмены было лягчэй заўважыць.",
+'addedwatchtext' => 'Старонка «[[:$1]]» была дададзеная да Вашага [[Special:Watchlist|сьпісу назіраньня]].
+Наступныя зьмены ў гэтай старонцы і зьвязанай зь ёю старонцы абмеркаваньняў будуць бачныя там.',
 'removewatch' => 'Выдаліць са сьпісу назіраньня',
 'removedwatchtext' => 'Старонка «[[:$1]]» была выдаленая з [[Special:Watchlist|Вашага сьпісу назіраньня]].',
 'watch' => 'Назіраць',
@@ -2304,7 +2300,7 @@ $1',
 'enotif_subject_moved' => 'Старонка {{GRAMMAR:родны|{{SITENAME}}}} «$1» была перанесеная {{GENDER:$2|удзельнікам|удзельніцай}} $2',
 'enotif_subject_restored' => 'Старонка {{GRAMMAR:родны|{{SITENAME}}}} «$1» была адноўленая {{GENDER:$2|удзельнікам|удзельніцай}} $2',
 'enotif_subject_changed' => 'Старонка {{GRAMMAR:родны|{{SITENAME}}}} «$1» была зьмененая {{GENDER:$2|удзельнікам|удзельніцай}} $2',
-'enotif_body_intro_deleted' => 'СÑ\82аÑ\80онка {{GRAMMAR:Ñ\80однÑ\8b|{{SITENAME}}}} Â«$1» Ð±Ñ\8bла Ð²Ñ\8bдаленаÑ\8f $PAGEEDITDATE {{GENDER:$2|Ñ\83дзелÑ\8cнÑ\96кам|Ñ\83дзелÑ\8cнÑ\96Ñ\86ай}} $2, Ð¿Ð° Ñ\86Ñ\8fпеÑ\80аÑ\88нÑ\8eÑ\8e Ð²Ñ\8dÑ\80Ñ\81Ñ\96Ñ\8e Ð³Ð»Ñ\8fдзÑ\96Ñ\86е $3.',
+'enotif_body_intro_deleted' => 'Старонка {{GRAMMAR:родны|{{SITENAME}}}} «$1» была выдаленая $PAGEEDITDATE {{GENDER:$2|удзельнікам|удзельніцай}} $2, глядзіце $3.',
 'enotif_body_intro_created' => 'Старонка {{GRAMMAR:родны|{{SITENAME}}}} «$1» была створаная $PAGEEDITDATE {{GENDER:$2|удзельнікам|удзельніцай}} $2, па цяперашнюю вэрсію глядзіце $3.',
 'enotif_body_intro_moved' => 'Старонка {{GRAMMAR:родны|{{SITENAME}}}} «$1» была перанесеная $PAGEEDITDATE {{GENDER:$2|удзельнікам|удзельніцай}} $2, па цяперашнюю вэрсію глядзіце $3.',
 'enotif_body_intro_restored' => 'Старонка {{GRAMMAR:родны|{{SITENAME}}}} «$1» была адноўленая $PAGEEDITDATE {{GENDER:$2|удзельнікам|удзельніцай}} $2, па цяперашнюю вэрсію глядзіце $3.',
@@ -2338,6 +2334,8 @@ $UNWATCHURL
 
 Зваротная сувязь і дапамога:
 {{canonicalurl:{{MediaWiki:Helppage}}}}',
+'created' => 'створаная',
+'changed' => 'зьмененая',
 
 # Delete
 'deletepage' => 'Выдаліць старонку',
@@ -2408,6 +2406,8 @@ $UNWATCHURL
 'prot_1movedto2' => '[[$1]] перанесеная ў [[$2]]',
 'protect-badnamespace-title' => 'Прастора назваў, у якой немагчыма абараняць старонкі',
 'protect-badnamespace-text' => 'Старонкі ў гэтай прасторы назваў ня могуць быць абароненыя.',
+'protect-norestrictiontypes-text' => 'Немагчыма абараніць гэтую старонку, паколькі не існуе тыпаў абароны.',
+'protect-norestrictiontypes-title' => 'Неабараняльная старонка',
 'protect-legend' => 'Пацьверджаньне абароны',
 'protectcomment' => 'Прычына:',
 'protectexpiry' => 'Тэрмін:',
@@ -2424,9 +2424,9 @@ $UNWATCHURL
 'protect-cascadeon' => 'Гэтая старонка часова абароненая, таму што яна ўключаная ў {{PLURAL:$1|наступную старонку, якая абароненая|наступныя старонкі, якія абароненыя|наступныя старонкі, якія абароненыя}} каскаднай абаронай.
 Вы можаце зьмяніць узровень абароны, але гэта не паўплывае на каскадную абарону.',
 'protect-default' => 'Дазволіць усім удзельнікам',
-'protect-fallback' => 'Ð\9fаÑ\82Ñ\80Ñ\8dбнÑ\8b Ð´Ð°Ð·Ð²Ð¾Ð» «$1»',
-'protect-level-autoconfirmed' => 'Ð\91лÑ\8fкаваÑ\86Ñ\8c Ð½Ð¾Ð²Ñ\8bÑ\85 Ñ\96 Ð°Ð½Ð°Ð½Ñ\96мнÑ\8bÑ\85 Ñ\83дзелÑ\8cнÑ\96каÑ\9e',
-'protect-level-sysop' => 'ТолÑ\8cкÑ\96 Ð°Ð´Ð¼Ñ\96нÑ\96Ñ\81Ñ\82Ñ\80аÑ\82аÑ\80Ñ\8b',
+'protect-fallback' => 'Ð\94азволÑ\96Ñ\86Ñ\8c Ñ\82олÑ\8cкÑ\96 Ñ\9eдзелÑ\8cнÑ\96кам Ð· Ð´Ð°Ð·Ð²Ð¾Ð»Ð°Ð¼ «$1»',
+'protect-level-autoconfirmed' => 'Ð\94азволÑ\96Ñ\86Ñ\8c Ñ\82олÑ\8cкÑ\96 Ð°Ñ\9eÑ\82амаÑ\82Ñ\8bÑ\87на Ð¿Ð°Ñ\86Ñ\8cвеÑ\80джанÑ\8bм',
+'protect-level-sysop' => 'Ð\94азволÑ\96Ñ\86Ñ\8c Ñ\82олÑ\8cкÑ\96 Ð°Ð´Ð¼Ñ\96нÑ\96Ñ\81Ñ\82Ñ\80аÑ\82аÑ\80ам',
 'protect-summary-cascade' => 'каскадная',
 'protect-expiring' => 'сканчаецца $1 (UTC)',
 'protect-expiring-local' => 'канчаецца $1',
@@ -2721,16 +2721,16 @@ $1',
 # Move page
 'move-page' => 'Перанесьці $1',
 'move-page-legend' => 'Перанесьці старонку',
-'movepagetext' => "Ð\97 Ð´Ð°Ð¿Ð°Ð¼Ð¾Ð³Ð°Ð¹ Ð³Ñ\8dÑ\82ай Ñ\84оÑ\80мÑ\8b Ð\92Ñ\8b Ð¼Ð¾Ð¶Ð°Ñ\86е Ð·Ñ\8cмÑ\8fнÑ\96Ñ\86Ñ\8c Ð½Ð°Ð·Ð²Ñ\83 Ñ\96 Ð³Ñ\96Ñ\81Ñ\82оÑ\80Ñ\8bÑ\8e Ñ\81Ñ\82аÑ\80онкÑ\96.
+'movepagetext' => "Ð\97 Ð´Ð°Ð¿Ð°Ð¼Ð¾Ð³Ð°Ð¹ Ð³Ñ\8dÑ\82ай Ñ\84оÑ\80мÑ\8b Ð\92Ñ\8b Ð¼Ð¾Ð¶Ð°Ñ\86е Ð¿ÐµÑ\80анеÑ\81Ñ\8cÑ\86Ñ\96 Ñ\81Ñ\82аÑ\80онкÑ\83, Ñ\96 Ñ\80азам Ð·Ñ\8c Ñ\91й Ñ\83Ñ\81Ñ\8e Ð³Ñ\96Ñ\81Ñ\82оÑ\80Ñ\8bÑ\8e.
 Старая назва будзе перанакіроўваць на новую.
 Вы можаце аўтаматычна абнавіць перанакіраваньні на першапачатковую назву.
 Калі вы адмовіцеся, упэўніцеся ў адсутнасьці [[Special:DoubleRedirects|падвойных]] ці [[Special:BrokenRedirects|няслушных перанакіраваньняў]].
 Адказнасьць за дакладнасьць спасылак ляжыць на тым, хто перанёс старонку.
 
-Заўважце, што старонка '''ня будзе''' перанесеная, калі пад новай назвай ужо існуе іншая старонка, за выключэньнем выпадкаў, калі яна пустая альбо зьяўляецца перанакіраваньнем і ня мае гісторыі рэдагаваньняў. Гэта азначае, што існуе магчымасьць адмяніць зьмену назвы, калі Вы памыліліся, але не магчыма выдаліць існую старонку.
+Заўважце, што старонка '''ня будзе''' перанесеная, калі пад новай назвай ужо існуе іншая старонка, за выключэньнем выпадкаў, калі яна пустая альбо зьяўляецца перанакіраваньнем і ня мае гісторыі рэдагаваньняў. Гэта азначае, што існуе магчымасьць скасаваць зьмену назвы, калі Вы памыліліся, але немагчыма выдаліць існую старонку.
 
-'''Ð\9fÐ\90Ð\9fЯРЭÐ\94Ð\96Ð\90Ð\9dЬÐ\9dÐ\95!'''
\97Ñ\8cмена Ð½Ð°Ð·Ð²Ñ\8b Ð¼Ð¾Ð¶Ð° Ð¿Ñ\80Ñ\8bвеÑ\81Ñ\8cÑ\86Ñ\96 Ð´Ð° Ð½ÐµÑ\87аканÑ\8bÑ\85 Ð·Ñ\8cменаÑ\9e Ð¿Ð°Ð¿Ñ\83лÑ\8fÑ\80нÑ\8bÑ\85 Ñ\81Ñ\82аÑ\80онак;
+'''Увага!'''
\97Ñ\8cмена Ð½Ð°Ð·Ð²Ñ\8b Ð¿Ð°Ð¿Ñ\83лÑ\8fÑ\80нÑ\8bÑ\85 Ñ\81Ñ\82аÑ\80онак Ð¼Ð¾Ð¶Ð½Ð° Ñ\81Ñ\82аÑ\86Ñ\86а Ð²ÐµÐ»Ñ\8cмÑ\96 Ð½ÐµÑ\87аканай Ñ\96 Ñ\80Ñ\8dзкай;
 калі ласка, упэўніцеся, што Вы разумееце наступствы такіх зьменаў.",
 'movepagetext-noredirectfixer' => "Скарыстаўшыся гэтай формай, Вы перанесяце старонку з усёй гісторыяй зьменаў да новай назвы.
 Старонка са старой назвай будзе перанакіроўваць на старонку з новай.
@@ -2911,6 +2911,7 @@ $1',
 'import-error-interwiki' => 'Старонка «$1» не была імпартаваная, таму што гэтая назва зарэзэрваваная для інтэрвікі.',
 'import-error-special' => 'Старонка «$1» не была імпартаваная, таму што яна належыць да спэцыяльнай прасторы назваў, старонкі ў якой не дазволеныя.',
 'import-error-invalid' => 'Старонка «$1» не была імпартаваная з-за няслушнасьці назвы.',
+'import-error-unserialize' => 'Не атрымалася дэсэрыялізаваць вэрсію $2 старонкі «$1». Меркавалася, што вэрсія выкарыстоўвала мадэль зьвестак $3 і была сэрыялізавана ў фармаце $4.',
 'import-options-wrong' => '{{PLURAL:$2|Няслушная налада|Няслушныя налады}}: <nowiki>$1</nowiki>',
 'import-rootpage-invalid' => 'Пазначаная назва карнявой старонкі няслушная.',
 'import-rootpage-nosubpage' => 'Падстаронкі ў прасторы назваў «$1» карнявой старонкі не дазволеныя.',
@@ -3060,6 +3061,7 @@ $1',
 'pageinfo-magic-words' => '{{PLURAL:$1|Магічнае слова|Магічныя словы}} ($1)',
 'pageinfo-hidden-categories' => '{{PLURAL:$1|Схаваная катэгорыя|Схаваныя катэгорыі}} ($1)',
 'pageinfo-templates' => '{{PLURAL:$1|Шаблён|Шаблёны}} ($1)',
+'pageinfo-transclusions' => 'Выкарыстаньне на {{PLURAL:$1|іншай старонцы|іншых старонках}} ($1)',
 'pageinfo-toolboxlink' => 'Зьвесткі пра старонку',
 'pageinfo-redirectsto' => 'Перанакіроўвае на',
 'pageinfo-redirectsto-info' => 'інфармацыя',
@@ -3068,6 +3070,10 @@ $1',
 'pageinfo-protect-cascading' => 'Адсюль пачынаецца каскадная абарона',
 'pageinfo-protect-cascading-yes' => 'Так',
 'pageinfo-protect-cascading-from' => 'Каскадная абароная пачынаецца з',
+'pageinfo-category-info' => 'Інфармацыя пра катэгорыю',
+'pageinfo-category-pages' => 'Колькасьць старонак',
+'pageinfo-category-subcats' => 'Колькасьць падкатэгорыяў',
+'pageinfo-category-files' => 'Колькасьць файлаў',
 
 # Skin names
 'skinname-standard' => 'Клясычнае',
@@ -3124,6 +3130,7 @@ $1',
 'file-nohires' => 'Няма вэрсіі зь лепшым разрозьненьнем.',
 '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-preview' => 'Памер прагляду: $1.',
 'show-big-image-other' => '{{PLURAL:$2|Іншае разрозьненьне|Іншыя разрозьненьні}}: $1.',
@@ -3157,6 +3164,8 @@ $1',
 'minutes' => '$1 {{PLURAL:$1|хвіліна|хвіліны|хвілінаў}}',
 'hours' => '$1 {{PLURAL:$1|гадзіна|гадзіны|гадзінаў}}',
 'days' => '$1 {{PLURAL:$1|дзень|дні|дзён}}',
+'months' => '{{PLURAL:$1|$1 месяц|$1 месяцы|$1 месяцаў}}',
+'years' => '{{PLURAL:$1|$1 год|$1 гады|$1 гадоў}}',
 'ago' => '$1 таму',
 'just-now' => 'толькі што',
 
@@ -3348,7 +3357,7 @@ $1',
 'exif-copyrighted' => 'Статус аўтарскіх правоў',
 'exif-copyrightowner' => 'Уласьнік аўтарскіх правоў',
 'exif-usageterms' => 'Умовы выкарыстаньня',
-'exif-webstatement' => 'Ð\97Ñ\8cвеÑ\81Ñ\82кÑ\96 Ð¿Ñ\80а Ð°Ñ\9eÑ\82аÑ\80Ñ\81кÑ\96Ñ\8f Ð¿Ñ\80авÑ\8b Ð°Ð½Ð»Ñ\8fйн',
+'exif-webstatement' => 'Ð\97Ñ\8cвеÑ\81Ñ\82кÑ\96 Ð¿Ñ\80а Ð°Ñ\9eÑ\82аÑ\80Ñ\81кÑ\96Ñ\8f Ð¿Ñ\80авÑ\8b Ð¾Ð½-лайн',
 'exif-originaldocumentid' => 'Унікальны ідэнтыфікатар ці арыгінальны дакумэнт',
 'exif-licenseurl' => 'URL-адрас аўтарскай ліцэнзіі',
 'exif-morepermissionsurl' => 'Інфармацыя пра ўмовы карыстаньня на ўмовах іншых ліцэнзіяў',
@@ -3825,7 +3834,7 @@ MediaWiki распаўсюджваецца з надзеяй, што будзе
 'specialpages-group-highuse' => 'Частаўжываныя старонкі',
 'specialpages-group-pages' => 'Сьпісы старонак',
 'specialpages-group-pagetools' => 'Інструмэнты для старонак',
-'specialpages-group-wiki' => 'Зьвесткі пра вікі і прылады',
+'specialpages-group-wiki' => 'Зьвесткі і прылады',
 'specialpages-group-redirects' => 'Спэцыяльныя старонкі-перанакіраваньні',
 'specialpages-group-spam' => 'Інструмэнты для барацьбы са спамам',
 
@@ -3922,8 +3931,12 @@ MediaWiki распаўсюджваецца з надзеяй, што будзе
 'logentry-newusers-newusers' => 'Быў створаны рахунак $1',
 'logentry-newusers-create' => 'Быў створаны рахунак $1',
 'logentry-newusers-create2' => '$1 стварыў рахунак $3',
+'logentry-newusers-byemail' => '$1 {{GENDER:$2|стварыў|стварыла}} рахунак $3, пароль быў дасланы электроннай поштай',
 'logentry-newusers-autocreate' => 'Рахунак $1 быў створаны аўтаматычна',
-'newuserlog-byemail' => 'Пароль адасланы па электроннай пошце',
+'logentry-rights-rights' => '$1 {{GENDER:$1|зьмяніў|зьмяніла}} прыналежнасьць $3 да групы з $4 на $5',
+'logentry-rights-rights-legacy' => '$1 {{GENDER:$1|зьмяніў|зьмяніла}} прыналежнасьць $3 да групаў',
+'logentry-rights-autopromote' => '$1 {{GENDER:$1|быў аўтаматычна пераведзены|была аўтаматычна пераведзеная}} з групы $4 ў $5',
+'rightsnone' => '(няма)',
 
 # Feedback
 'feedback-bugornote' => 'Калі Вы гатовы падрабязна апісаць тэхнічную праблему, калі ласка [$1 паведаміце пра памылку]. 
@@ -3977,6 +3990,7 @@ MediaWiki распаўсюджваецца з надзеяй, што будзе
 'api-error-ok-but-empty' => 'Унутраная памылка: няма адказу ад сэрвэра.',
 'api-error-overwrite' => 'Замена існуючага файла забароненая.',
 'api-error-stashfailed' => 'Унутраная памылка: сэрвэр ня змог захаваць часовы файл.',
+'api-error-publishfailed' => 'Унутраная памылка: сэрвэр ня змог захаваць часловы файл.',
 'api-error-timeout' => 'Сэрвэр не адказаў у чаканы тэрмін.',
 'api-error-unclassified' => 'Узьнікла невядомая памылка',
 'api-error-unknown-code' => 'Невядомая памылка: «$1».',
@@ -3997,6 +4011,4 @@ MediaWiki распаўсюджваецца з надзеяй, што будзе
 'duration-centuries' => '$1 {{PLURAL:$1|стагодзьдзе|стагодзьдзі|стагодзьдзяў}}',
 'duration-millennia' => '$1 {{PLURAL:$1|тысячагодзьдзе|тысячагодзьдзі|тысячагодзьдзяў}}',
 
-# Unknown messages
-'svg-long-error' => 'Няслушны SVG-файл: $1',
 );
diff --git a/languages/messages/MessagesBe_x_old.php b/languages/messages/MessagesBe_x_old.php
deleted file mode 100644 (file)
index 26895de..0000000
+++ /dev/null
@@ -1,12 +0,0 @@
-<?php
-/** Belarusian in Taraškievica orthography (Беларуская тарашкевіца)
- *
- * See MessagesQqq.php for message documentation incl. usage of parameters
- * To improve a translation please visit http://translatewiki.net
- *
- * @ingroup Language
- * @file
- * @comment dummy language file. Falls back to 'be-tarask'. Backward compat.
- */
-
-$fallback = 'be-tarask';
index 40260ac..71ce78c 100644 (file)
@@ -286,7 +286,7 @@ $messages = array(
 
 'underline-always' => 'Винаги',
 'underline-never' => 'Никога',
-'underline-default' => 'Според настройките на браузъра',
+'underline-default' => 'СпоÑ\80ед Ð½Ð°Ñ\81Ñ\82Ñ\80ойкиÑ\82е Ð½Ð° Ð¾Ð±Ð»Ð¸ÐºÐ° Ð¸Ð»Ð¸ Ð±Ñ\80аÑ\83зÑ\8aÑ\80а',
 
 # Font style option in Special:Preferences
 'editfont-style' => 'Стил на шрифта в кутията за редактиране',
@@ -505,6 +505,7 @@ $1',
 'youhavenewmessagesfromusers' => 'Имате $1 от {{PLURAL:$3|друг потребител|$3 потребители}} ($2).',
 'youhavenewmessagesmanyusers' => 'Имате $1 от много потребители ($2).',
 'newmessageslinkplural' => '{{PLURAL:$1|ново съобщение|нови съобщения}}',
+'newmessagesdifflinkplural' => '{{PLURAL:$1|последна промяна|последни промени}}',
 'youhavenewmessagesmulti' => 'Имате нови съобщения в $1',
 'editsection' => 'редактиране',
 'editold' => 'редактиране',
@@ -609,12 +610,13 @@ $1',
 'viewsource-title' => 'Преглеждане на кода на $1',
 'actionthrottled' => 'Ограничение в скоростта',
 'actionthrottledtext' => 'Като част от защитата против спам, многократното повтаряне на това действие за кратък период от време е ограничено и вие вече сте надвишили лимита си. Опитайте отново след няколко минути.',
-'protectedpagetext' => 'Тази страница е заключена за редактиране.',
+'protectedpagetext' => 'Тази страница е защитена, за да се предотвратят редактиране или други действия.',
 'viewsourcetext' => 'Можете да разгледате и да копирате кодa на страницата:',
 'viewyourtext' => "Можете да прегледате и копирате изходния код на '''вашите редакции''' на тази страница:",
-'protectedinterface' => 'Тази страница съдържа текст, нужен за работата на системата. Тя е защитена против редактиране, за да се предотвратят възможни злоупотреби.',
+'protectedinterface' => 'Тази страница съдържа текст, нужен за работата на системата. Тя е защитена против редактиране, за да се предотвратят възможни злоупотреби.
+За извършване на промяна за всички уикита, посетете [//translatewiki.net/ translatewiki.net], проектът за локализация на MediaWiki.',
 'editinginterface' => "'''Внимание:''' Редактирате страница, която се използва за интерфейса на софтуера. Промяната й ще повлияе на външния вид на уикито.
-За превеждане обмислете използването на [//translatewiki.net/wiki/Main_Page?setlang=bg translatewiki.net], проектът за локализиране на MediaWiki.",
+За превеждане, обмислете използването на [//translatewiki.net/ translatewiki.net], проектът за локализиране на MediaWiki.",
 'sqlhidden' => '(Заявка на SQL — скрита)',
 'cascadeprotected' => 'Тази страница е защитена против редактиране, защото е включена в {{PLURAL:$1|следната страница, която от своя страна има|следните страници, които от своя страна имат}} каскадна защита:
 $2',
@@ -624,9 +626,9 @@ $2',
 'ns-specialprotected' => 'Специалните страници не могат да бъдат редактирани.',
 'titleprotected' => "Тази страница е била защитена срещу създаване от [[User:$1|$1]].
 Посочената причина е ''$2''.",
-'filereadonlyerror' => "Файлът „$1“ не може да бъде променен, тъй като файловото хранилище „$2“ е в режим само за четене.
+'filereadonlyerror' => 'Файлът „$1“ не може да бъде променен, тъй като файловото хранилище „$2“ е в режим само за четене.
 
\94аденаÑ\82а Ð¿Ñ\80иÑ\87ина Ðµ â\80\9e''$3''â\80\9c.",
\90дминиÑ\81Ñ\82Ñ\80аÑ\82оÑ\80Ñ\8aÑ\82, ÐºÐ¾Ð¹Ñ\82о Ð³Ð¾ Ðµ Ð·Ð°ÐºÐ»Ñ\8eÑ\87ил, Ðµ Ð¿Ð¾Ñ\81оÑ\87ил Ñ\81леднаÑ\82а Ð¿Ñ\80иÑ\87ина: â\80\9e$3â\80\9c.',
 
 # Virus scanner
 'virus-badscanner' => "Лоша конфигурация: непознат скенер за вируси: ''$1''",
@@ -796,6 +798,7 @@ $2
 'changeemail-oldemail' => 'Текущ адрес за е-поща:',
 'changeemail-newemail' => 'Нов адрес за е-поща:',
 'changeemail-none' => '(няма)',
+'changeemail-password' => 'Парола за {{SITENAME}}:',
 'changeemail-submit' => 'Промяна на е-пощата',
 'changeemail-cancel' => 'Отказване',
 
@@ -952,7 +955,9 @@ $2
 <div style=\"font-variant:small-caps\">'''Не публикувайте произведения с авторски права без разрешение!'''</div>",
 'longpageerror' => "'''ГРЕШКА: Изпратеният текст е с големина {{PLURAL:$1|един килобайт|$1 килобайта}}, което надвишава позволения максимум от {{PLURAL:$2|един килобайт|$2 килобайта}}.'''
 Поради тази причина той не може да бъде съхранен.",
-'readonlywarning' => "'''ВНИМАНИЕ: Базата от данни беше затворена за поддръжка, затова в момента промените ви не могат да бъдат съхранени. Ако желаете, можете да съхраните страницата като текстов файл и да се опитате да я публикувате по-късно.'''
+'readonlywarning' => "'''ВНИМАНИЕ: Базата от данни беше затворена за поддръжка, затова в момента промените няма да могат да бъдат съхранени.'''
+
+Ако желаете, можете да съхраните страницата като текстов файл и да се опитате да я публикувате по-късно.
 
 Администраторът, който е затворил базата от данни, е посочил следната причина: $1",
 'protectedpagewarning' => "'''Внимание: Страницата е защитена и само потребители със статут на администратори могат да я редактират.'''
@@ -969,7 +974,6 @@ $2
 'template-semiprotected' => '(полузащитен)',
 'hiddencategories' => 'Тази страница е включена в {{PLURAL:$1|Една скрита категория|$1 скрити категории}}:',
 'edittools' => '<!-- Евентуален текст тук ще бъде показван под формулярите за редактиране и качване. -->',
-'nocreatetitle' => 'Създаването на страници е ограничено',
 'nocreatetext' => 'Създаването на нови страници в {{SITENAME}} е ограничено. Можете да се върнете назад и да редактирате някоя от съществуващите страници, [[Special:UserLogin|да се регистрирате или да създадете нова потребителска сметка]].',
 'nocreate-loggedin' => 'Нямате необходимите права да създавате нови страници.',
 'sectioneditnotsupported-title' => 'Не се поддържа редактиране на раздели',
@@ -1152,6 +1156,7 @@ $1",
 'revdelete-reason-dropdown' => '* Стандартни причини за изтриване
 ** Нарушение на авторски права
 ** Неуместна лична информация
+** Неуместно потребителско име
 ** Потенциално клеветническа информация',
 'revdelete-otherreason' => 'Друга/допълнителна причина:',
 'revdelete-reasonotherlist' => 'Друга причина',
@@ -1277,7 +1282,7 @@ $1",
 
 # Preferences page
 'preferences' => 'Настройки',
-'mypreferences' => 'Ð\9cоиÑ\82е Ð½астройки',
+'mypreferences' => 'Ð\9dастройки',
 'prefs-edits' => 'Брой редакции:',
 'prefsnologin' => 'Не сте влезли',
 'prefsnologintext' => 'Необходимо е <span class="plainlinks">[{{fullurl:{{#Special:UserLogin}}|returnto=$1}} да влезете]</span>, за да може да променяте потребителските си настройки.',
@@ -1353,9 +1358,9 @@ $1",
 'prefs-emailconfirm-label' => 'Потвърждаване на адрес за е-поща:',
 'prefs-textboxsize' => 'Размер на кутията за редактиране',
 'youremail' => 'Е-поща:',
-'username' => 'Потребителско име:',
-'uid' => 'Потребителски номер:',
-'prefs-memberingroups' => 'Член на {{PLURAL:$1|група|групи}}:',
+'username' => '{{GENDER:$1|Потребителско име}}:',
+'uid' => '{{GENDER:$1|Потребителски}} номер:',
+'prefs-memberingroups' => '{{GENDER:$2|Член}} на {{PLURAL:$1|група|групи}}:',
 'prefs-registration' => 'Регистрация:',
 'yourrealname' => 'Истинско име:',
 'yourlanguage' => 'Език:',
@@ -1502,14 +1507,13 @@ $1",
 'right-sendemail' => 'Изпращане на е-писма до другите потребители',
 'right-passwordreset' => 'Преглеждане на е-писма за възстановяване на парола',
 
+# Special:Log/newusers
+'newuserlogpage' => 'Дневник на регистрациите',
+'newuserlogpagetext' => 'В този дневник се записват регистрациите на потребители.',
+
 # User rights log
 'rightslog' => 'Дневник на потребителските права',
 'rightslogtext' => 'Това е дневник на промените на потребителски права.',
-'rightslogentry' => 'промени потребителската група на $1 от $2 в $3',
-'rightslogentry-autopromote' => 'автоматично е повишен от $2 до$3',
-'logentry-rights-autopromote' => '
-$1 е автоматично повишен от $4 до $5',
-'rightsnone' => '(никакви)',
 
 # Associated actions - in the sentence "You do not have permission to X"
 'action-read' => 'четене на страницата',
@@ -1919,7 +1923,7 @@ $1',
 
 'disambiguations' => 'Страници, сочещи към пояснителни страници',
 'disambiguationspage' => 'Template:Пояснение',
-'disambiguations-text' => "Следните страници сочат към '''пояснителна страница''', вместо към истинската тематична страница.<br />Една страница се смята за пояснителна, ако ползва шаблон, към който се препраща от [[MediaWiki:Disambiguationspage]]",
+'disambiguations-text' => "Следните страници сочат към '''пояснителна страница''', вместо към истинската тематична страница.<br />Една страница се смята за пояснителна, ако ползва шаблон, към който се препраща от [[MediaWiki:Disambiguationspage]].",
 
 'doubleredirects' => 'Двойни пренасочвания',
 'doubleredirectstext' => 'Тази страница съдържа списък със страници, които пренасочват към друга пренасочваща страница.
@@ -2064,7 +2068,9 @@ $1',
 'linksearch-pat' => 'Търсене по:',
 'linksearch-ns' => 'Именно пространство:',
 'linksearch-ok' => 'Търсене',
-'linksearch-text' => 'Възможна е употребата на заместващи знаци като: „*.wikipedia.org“.<br />Поддържани протоколи: <code>$1</code>',
+'linksearch-text' => 'Възможна е употребата на заместващи знаци като: „*.wikipedia.org“.
+Необходим е поне домейн от най-високо ниво, например „*.org“.<br />
+{{PLURAL:$2|Поддържан протокол|Поддържани протоколи}}: <code>$1</code> (ако не е посочено, по подразбиране се използва http:// ).',
 'linksearch-line' => '$1 с препратка от $2',
 'linksearch-error' => 'Заместващите знаци могат да стоят само в началото на името на хоста.',
 
@@ -2083,10 +2089,6 @@ $1',
 'activeusers-hidesysops' => 'Скриване на администраторите',
 'activeusers-noresult' => 'Няма намерени потребители.',
 
-# Special:Log/newusers
-'newuserlogpage' => 'Дневник на регистрациите',
-'newuserlogpagetext' => 'В този дневник се записват регистрациите на потребители.',
-
 # Special:ListGroupRights
 'listgrouprights' => 'Права по потребителски групи',
 'listgrouprights-summary' => 'По-долу на тази страница е показан списък на групите потребители в това уики с асоциираните им права за достъп. Допълнителна информация за отделните права може да бъде намерена [[{{MediaWiki:Listgrouprights-helppage}}|тук]].',
@@ -2211,6 +2213,8 @@ $UNWATCHURL
 
 За обратна връзка и помощ:
 {{canonicalurl:{{MediaWiki:Helppage}}}}',
+'created' => 'създадена',
+'changed' => 'променена',
 
 # Delete
 'deletepage' => 'Изтриване',
@@ -2287,9 +2291,9 @@ $UNWATCHURL
 'protect-locked-access' => "Нямате правото да променяте нивата на защита на страниците. Ето текущите настройки за страницата „'''$1'''“:",
 'protect-cascadeon' => 'Тази страница е защитена против редактиране, защото е включена в {{PLURAL:$1|следната страница, която от своя страна има|следните страници, които от своя страна имат}} каскадна защита. Можете да промените нивото на защита на страницата, но това няма да повлияе върху каскадната защита.',
 'protect-default' => 'Позволяване за всички потребители',
-'protect-fallback' => 'Ð\9dеобÑ\85одими Ñ\81а права на „$1“',
-'protect-level-autoconfirmed' => 'Ð\91локиÑ\80ане Ð½Ð° Ð½Ð¾Ð²Ð¸ Ð¸ Ð½ÐµÑ\80егиÑ\81Ñ\82Ñ\80иÑ\80ани потребители',
-'protect-level-sysop' => 'Само за администратори',
+'protect-fallback' => 'Ð\9fозволÑ\8fване Ñ\81амо Ð·Ð° Ð¿Ð¾Ñ\82Ñ\80ебиÑ\82ели Ñ\81 права на „$1“',
+'protect-level-autoconfirmed' => 'Ð\9fозволено Ñ\81амо Ð·Ð° Ð°Ð²Ñ\82омаÑ\82иÑ\87но Ð¾Ð´Ð¾Ð±Ñ\80ени потребители',
+'protect-level-sysop' => 'Ð\9fозволено Ñ\81амо за администратори',
 'protect-summary-cascade' => 'каскадно',
 'protect-expiring' => 'изтича на $1 (UTC)',
 'protect-expiring-local' => 'срок на изтичане $1',
@@ -2383,7 +2387,7 @@ $1',
 'blanknamespace' => '(Основно)',
 
 # Contributions
-'contributions' => 'Приноси',
+'contributions' => '{{GENDER:$1|Потребителски}} приноси',
 'contributions-title' => 'Потребителски приноси за $1',
 'mycontris' => 'Приноси',
 'contribsub2' => 'За $1 ($2)',
@@ -2426,7 +2430,7 @@ $1',
 'whatlinkshere-hideredirs' => '$1 на пренасочващи страници',
 'whatlinkshere-hidetrans' => '$1 на включени страници',
 'whatlinkshere-hidelinks' => '$1 на препратки',
-'whatlinkshere-hideimages' => '$1 препратки към файла',
+'whatlinkshere-hideimages' => '$1 Ð½Ð° Ð¿Ñ\80епÑ\80аÑ\82ки ÐºÑ\8aм Ñ\84айла',
 'whatlinkshere-filters' => 'Филтри',
 
 # Block/unblock
@@ -2579,11 +2583,11 @@ $1',
 # Move page
 'move-page' => 'Преместване на $1',
 'move-page-legend' => 'Преместване на страница',
-'movepagetext' => "Ð\9fоÑ\81Ñ\80едÑ\81Ñ\82вом Ð´Ð¾Ð»Ð½Ð¸Ñ\8f Ñ\84оÑ\80мÑ\83лÑ\8fÑ\80 Ð¼Ð¾Ð¶ÐµÑ\82е Ð´Ð° Ð¿Ñ\80еименÑ\83ваÑ\82е Ñ\81Ñ\82Ñ\80аниÑ\86а, Ð¿Ñ\80емеÑ\81Ñ\82вайки Ñ\86Ñ\8fлаÑ\82а Ð¹ история на новото име. Старото заглавие ще се превърне в пренасочваща страница.
\9fÑ\80епÑ\80аÑ\82киÑ\82е ÐºÑ\8aм Ñ\81Ñ\82аÑ\80аÑ\82а Ñ\81Ñ\82Ñ\80аниÑ\86а Ð½Ñ\8fма Ð´Ð° Ð±Ñ\8aдаÑ\82 Ð¿Ñ\80оменени; Ð·Ð°Ñ\82ова Ð¿Ñ\80овеÑ\80еÑ\82е Ð·Ð° Ð´Ð²Ð¾Ð¹Ð½Ð¸ Ð¸Ð»Ð¸ Ð½ÐµÐ²Ð°Ð»Ð¸Ð´Ð½Ð¸ Ð¿Ñ\80енаÑ\81оÑ\87ваниÑ\8f.
-Вие сами би трябвало да се убедите в това, дали препратките продължават да сочат там, където се предполага.
+'movepagetext' => "Ð\98зползванеÑ\82о Ð½Ð° Ñ\84оÑ\80мÑ\83лÑ\8fÑ\80а Ð¿Ð¾-долÑ\83 Ñ\89е Ð¿Ñ\80еименÑ\83ва Ñ\81Ñ\82Ñ\80аниÑ\86а, ÐºÐ°Ñ\82о Ñ\81е Ð¿Ñ\80емеÑ\81Ñ\82и Ñ\86Ñ\8fлаÑ\82а Ñ\9d Ñ\80едакÑ\86ионна Ð¸Ñ\81Ñ\82оÑ\80иÑ\8f история на новото име. Старото заглавие ще се превърне в пренасочваща страница.
\9cоже Ð´Ð° Ñ\81е Ð¸Ð·Ð±ÐµÑ\80е Ð²Ñ\8aзможноÑ\81Ñ\82 Ð¿Ñ\80енаÑ\81оÑ\87ваниÑ\8fÑ\82а ÐºÑ\8aм Ð¾Ñ\80игиналноÑ\82о Ð·Ð°Ð³Ð»Ð°Ð²Ð¸Ðµ Ð´Ð° Ð±Ñ\8aдаÑ\82 Ð¾Ð±Ð½Ð¾Ð²ÐµÐ½Ð¸ Ð°Ð²Ñ\82омаÑ\82иÑ\87но. Ð\92 Ñ\81лÑ\83Ñ\87ай, Ñ\87е Ñ\82ази Ð²Ñ\8aзможноÑ\81Ñ\82 Ð½Ðµ Ðµ Ð¸Ð·Ð±Ñ\80ана, Ð¿Ñ\80епоÑ\80Ñ\8aÑ\87иÑ\82елно Ðµ Ð´Ð° Ñ\81е Ð¿Ñ\80овеÑ\80и Ð·Ð° [[Special:DoubleRedirects|двойни]] Ð¸Ð»Ð¸ [[Special:BrokenRedirects|невалидни Ð¿Ñ\80енаÑ\81оÑ\87ваниÑ\8f]].
+Вие сами би трябвало да се убедите в това дали препратките продължават да сочат там, където се предполага.
 
¡траницата '''няма''' да бъде преместена, ако вече съществува страница с новото име, освен ако е празна или пренасочване и няма редакционна история.
\9eбÑ\8aÑ\80неÑ\82е Ð²Ð½Ð¸Ð¼Ð°Ð½Ð¸Ðµ, Ñ\87е Ñ\81траницата '''няма''' да бъде преместена, ако вече съществува страница с новото име, освен ако е празна или пренасочване и няма редакционна история.
 
 '''ВНИМАНИЕ!'''
 Това може да е голяма и неочаквана промяна за известна страница. Уверете се, че разбирате последствията, преди да продължите.",
@@ -2725,6 +2729,7 @@ $1',
 'import-interwiki-templates' => 'Включване на всички шаблони',
 'import-interwiki-submit' => 'Внасяне',
 'import-interwiki-namespace' => 'Целево именно пространство:',
+'import-interwiki-rootpage' => 'Целева основна страница (незадължително):',
 'import-upload-filename' => 'Име на файл:',
 'import-comment' => 'Коментар:',
 'importtext' => 'Изнесете файла от изходното уики чрез „[[Special:Export|инструмента за изнасяне]]“. Съхранете го на твърдия диск на компютъра си и го качете тук.',
@@ -2756,6 +2761,7 @@ $1',
 'import-error-interwiki' => 'Страницата „$1“ не беше внесена, тъй като името ѝ е запазено за външно свързване (междууики).',
 'import-error-special' => 'Страницата „$1“ не беше внесена, тъй като принадлежи към специално именно пространство, което не позволява страници.',
 'import-error-invalid' => 'Страницата „$1“ не беше внесена, тъй като името ѝ е невалидно.',
+'import-rootpage-invalid' => 'Посочената основна страница е с невалидно заглавие.',
 'import-rootpage-nosubpage' => 'Именното пространство „$1“ на основната страница не позволява създаването на подстраници.',
 
 # Import log
@@ -2874,7 +2880,8 @@ $1',
 # Info page
 'pageinfo-title' => 'Информация за "$1"',
 'pageinfo-header-basic' => 'Основна информация',
-'pageinfo-header-edits' => 'Редакции',
+'pageinfo-header-edits' => 'История на редакциите',
+'pageinfo-header-restrictions' => 'Защита на страницата',
 'pageinfo-article-id' => 'Номер на страницата',
 'pageinfo-views' => 'Брой прегледи',
 'pageinfo-watchers' => 'Брой наблюдаващи страницата',
@@ -2885,6 +2892,7 @@ $1',
 'pageinfo-edits' => 'Общ брой редакции',
 'pageinfo-authors' => 'Общ брой на отделните автори',
 'pageinfo-magic-words' => '{{PLURAL:$1|Вълшебна думичка|Вълшебни думички}} ($1)',
+'pageinfo-toolboxlink' => 'Информация за страницата',
 'pageinfo-contentpage-yes' => 'Да',
 'pageinfo-protect-cascading-yes' => 'Да',
 
@@ -2908,6 +2916,7 @@ $1',
 'markedaspatrollederror' => 'Не е възможно да се отбележи като проверена',
 'markedaspatrollederrortext' => 'Необходимо е да се посочи редакция, която да бъде отбелязана като проверена.',
 'markedaspatrollederror-noautopatrol' => 'Не е разрешено да маркирате своите редакции като проверени.',
+'markedaspatrollednotify' => 'Тази промяна на $1 беше отбелязана като патрулирана.',
 
 # Patrol log
 'patrol-log-page' => 'Дневник на патрула',
@@ -2939,6 +2948,7 @@ $1',
 'file-info-size-pages' => '$1 × $2 пиксела, размер на файла: $3, MIME тип: $4, $5 {{PLURAL:$5|страница|страници}}',
 'file-nohires' => 'Не е налична версия с по-висока разделителна способност.',
 'svg-long-desc' => 'Файл във формат SVG, основен размер: $1 × $2 пиксела, големина на файла: $3',
+'svg-long-error' => 'Невалиден SVG файл: $1',
 'show-big-image' => 'Пълна разделителна способност',
 'show-big-image-preview' => 'Размер на този преглед: $1.',
 'show-big-image-other' => '{{PLURAL:$2|Друга разделителна способност|Други разделителни способности}}: $1.',
@@ -2966,7 +2976,10 @@ $1',
 'minutes' => '{{PLURAL:$1|$1 минута|$1 минути}}',
 'hours' => '{{PLURAL:$1|$1 час|$1 часа}}',
 'days' => '{{PLURAL:$1|$1 ден|$1 дни}}',
+'months' => '{{PLURAL:$1|един месец|$1 месеца}}',
+'years' => '{{PLURAL:$1|една година|$1 години}}',
 'ago' => 'преди $1',
+'just-now' => 'току що',
 
 # Bad image list
 'bad_image_list' => 'Спазва се следният формат:
@@ -3552,14 +3565,14 @@ MediaWiki се разпространява с надеждата, че ще б
 * <span class="mw-specialpagecached">Само складирани специални страници (възможно е да са остарели).</span>',
 'specialpages-group-maintenance' => 'Доклади по поддръжката',
 'specialpages-group-other' => 'Други специални страници',
-'specialpages-group-login' => 'Ð\92лизане / Ñ\80егиÑ\81Ñ\82Ñ\80иÑ\80ане',
+'specialpages-group-login' => 'Ð\92лизане / Ñ\81Ñ\8aздаване Ð½Ð° Ñ\81меÑ\82ка',
 'specialpages-group-changes' => 'Последни промени и дневници',
 'specialpages-group-media' => 'Доклади за файловете и качванията',
 'specialpages-group-users' => 'Потребители и права',
 'specialpages-group-highuse' => 'Широко използвани страници',
 'specialpages-group-pages' => 'Списъци на страниците',
 'specialpages-group-pagetools' => 'Инструменти за страниците',
-'specialpages-group-wiki' => 'Уики Ð´анни и инструменти',
+'specialpages-group-wiki' => 'Ð\94анни и инструменти',
 'specialpages-group-redirects' => 'Пренасочващи специални страници',
 'specialpages-group-spam' => 'Инструменти против спам',
 
@@ -3647,7 +3660,9 @@ MediaWiki се разпространява с надеждата, че ще б
 'logentry-newusers-create' => 'Потребителската сметка $1 беше създадена',
 'logentry-newusers-create2' => '$1 създаде потребителска сметка $3',
 'logentry-newusers-autocreate' => 'Сметката $1 беше създадена автоматично',
-'newuserlog-byemail' => 'паролата е изпратена по е-поща',
+'logentry-rights-autopromote' => '
+$1 е автоматично повишен от $4 до $5',
+'rightsnone' => '(никакви)',
 
 # Feedback
 'feedback-subject' => 'Тема:',
@@ -3696,6 +3711,7 @@ MediaWiki се разпространява с надеждата, че ще б
 'api-error-ok-but-empty' => 'Вътрешна грешка: Няма отговор от сървъра.',
 'api-error-overwrite' => 'Не е позволено презаписването върху съществуващ файл.',
 'api-error-stashfailed' => 'Вътрешна грешка: Сървърът не успя да съхрани временния файл.',
+'api-error-publishfailed' => 'Вътрешна грешка: Сървърът не успя да съхрани временния файл.',
 'api-error-timeout' => 'Сървърът не отговори в рамките на предвиденото време.',
 'api-error-unclassified' => 'Възникна непозната грешка.',
 'api-error-unknown-code' => 'Непозната грешка: "$1"',
index e005efe..1ec602b 100644 (file)
 
 $fallback = 'bho';
 
-$messages = array(
-# User preference toggles
-'tog-underline' => 'लिंक के नीचे रेखा',
-'tog-justify' => 'पैराग्राफ जस्टीफाई',
-'tog-hideminor' => 'हाल के परिवर्तन में मामूली संपादन छुपाईं',
-'tog-numberheadings' => 'स्वयं-सांख्यिकी शिर्षक',
-'tog-rememberpassword' => 'इ ब्राउजर पर हमार प्रवेश जारी रहे (अधिकतम $1 {{PLURAL:$1|दिन|दिन}})',
-'tog-previewonfirst' => 'पहिलका सम्पादन पर पूर्वावलोकन देखीं',
-
-'underline-always' => 'हमेशा',
-'underline-never' => 'कभी ना',
-'underline-default' => 'डिफॉल्ट ब्राउजर',
-
-# 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' => 'दिस',
-
-# Categories related messages
-'pagecategories' => '{{PLURAL:$1|श्रेणी|श्रेणी}}',
-
-'about' => 'बारे में',
-'article' => 'सामग्री पन्ना',
-'newwindow' => '(नया विंडो में खोलीं)',
-'cancel' => 'निरस्त',
-'mytalk' => 'हमार बात',
-'navigation' => 'परिभ्रमण',
-
-# Cologne Blue skin
-'qbfind' => 'खोज',
-'qbbrowse' => 'ब्राउज',
-'qbedit' => 'सम्पादन',
-'qbpageoptions' => 'ई पन्ना',
-'qbmyoptions' => 'हमार पन्ना',
-'qbspecialpages' => 'विशेष पन्ना',
-'faq' => 'साधारण सवाल',
-'faqpage' => 'Project:साधारण सवाल',
-
-# Vector skin
-'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' => 'स्त्रोत देखीं',
-
-'errorpagetitle' => 'त्रुटी',
-'returnto' => 'जाईं $1 पर।',
-'tagline' => 'भोजपुरी {{SITENAME}} से',
-'help' => 'मदद',
-'search' => 'खोज',
-'searchbutton' => 'खोजीं',
-'go' => 'जाईं',
-'searcharticle' => 'जाईं',
-'history' => 'पन्ना के इतिहास',
-'history_short' => 'इतिहास',
-'updatedmarker' => 'हमार अन्तिम आगमन से बदलाव',
-'printableversion' => 'छापे लायक संस्करण',
-'permalink' => 'स्थायी लिंक',
-'print' => 'छापीं',
-'edit' => 'सम्पादन',
-'create' => 'बनाईं',
-'editthispage' => 'ई पन्ना के सम्पादन करीं',
-'create-this-page' => 'ई पन्ना के निर्माण करीं',
-'delete' => 'मिटाईं',
-'deletethispage' => 'ई पन्ना के मिटाईं',
-'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 द्वारा पुन: निर्देशित)',
-'redirectpagesub' => 'पुन: निर्देशित पन्ना',
-'lastmodifiedat' => '$1 के $2 पर ई पन्ना पर अन्तिम बार परिवर्तन भईल।',
-'protectedpage' => 'सुरक्षित पन्ना',
-'jumpto' => 'अहिजा जाईं:',
-'jumptonavigation' => 'परिभ्रमण',
-'jumptosearch' => 'खोजीं',
-'view-pool-error' => 'क्षमा करीं, ई समय सर्वर पर बहुत ज्यादा लोड बढ़ गईल बा।
-ई पन्ना के बहुते प्रयोगकर्ता लोग देखे के कोशिश कर रहल बानी।
-ई पन्ना के फिर से देखे से पहिले कृपया कुछ देर तक इन्तजार करीं।
-
-$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) and the disambiguation template definition (see disambiguations).
-'aboutsite' => '{{SITENAME}} के बारे में',
-'aboutpage' => 'Project:बारे में',
-'copyright' => 'सामग्री $1 के तहत उपलब्ध बा।',
-'copyrightpage' => '{{ns:project}}:लेखाधिकार',
-'currentevents' => 'हाल के घटना',
-'currentevents-url' => 'Project:हाल के घटना',
-'disclaimers' => 'अस्विकरण',
-'disclaimerpage' => 'Project:सामान्य अस्विकरण',
-'edithelp' => 'मदद सम्पादन',
-'edithelppage' => 'Help:सम्पादन',
-'mainpage' => 'मुख्य पन्ना',
-'mainpage-description' => 'पहिलका पन्ना',
-'portal' => 'सामुदायिक पन्ना',
-'portal-url' => 'Project:सामुदायिक पोर्टल',
-'privacy' => 'गोपनीयता नीति',
-'privacypage' => 'Project:गोपनीयता नीति',
-
-'badaccess' => 'अनुमति त्रुटी',
-'badaccess-group0' => 'रउआ जवन कार्रवाई खातिर अनुरोध कईले बानी उ के निष्पादन करे के अनुमति नईखे।',
-
-'ok' => 'ठिक',
-'retrievedfrom' => '"$1" से लियल गईल',
-'youhavenewmessages' => 'रउआ लगे बा $1 ($2).',
-'newmessageslink' => 'नया सन्देश',
-'newmessagesdifflink' => 'अन्तिम परिवर्तन',
-'youhavenewmessagesmulti' => 'रउआ लगे $1 पर नया सन्देश बा',
-'editsection' => 'सम्पादन',
-'editold' => 'सम्पादन',
-'viewsourceold' => 'स्त्रोत देखीं',
-'editlink' => 'सम्पादन',
-'viewsourcelink' => 'स्त्रोत देखीं',
-'editsectionhint' => 'सम्पादन खण्ड: $1',
-'toc' => 'सामग्री',
-'showtoc' => 'देखाईं',
-'hidetoc' => 'छुपाईं',
-'thisisdeleted' => 'देखीं या भंडार करीं $1?',
-'viewdeleted' => '$1 देखब?',
-'site-rss-feed' => '$1 आर एस एस फिड',
-'site-atom-feed' => '$1 एटम फिड',
-'page-rss-feed' => '"$1" आर एस एस फिड',
-'page-atom-feed' => '"$1" एटम फिड',
-'red-link-title' => '$1 (पन्ना मौजूद नईखे)।',
-
-# 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' => 'अईसन कौनो ख़ाश पन्ना नाहि',
-'nospecialpagetext' => '<strong>रउआ एगो अवैद्य विशेष पन्ना के अनुरोध कईले बानी।</strong>
-
-वैद्य विशेष पन्ना के सूची मिल सकत बा [[Special:SpecialPages|{{int:specialpages}}]] पर।',
-
-# General errors
-'error' => 'त्रुटी',
-'databaseerror' => 'डेटाबेस त्रुटी',
-'readonly' => 'डेटाबेस लॉक बा',
-'missing-article' => 'डेटाबास ऊ पन्ना के पाठ्य के ना खोज पाईल जौन ई के खोजे के रहल, नामित "$1" $2.
-ई सब साधारणत: निम्नलिखीत अप्रचलित अन्तर अथवा एगो पन्ना पर इतिहास के लिंक जौन मिटा दिहल गईल बा के कारण भईल।
-
-यदि ई बात नईखे, त हो सकत बा सॉफ्टवेयर में बग पावत होखब।
-कृपया ई एगो  [[Special:ListUsers/sysop|प्रबन्धक]] के यू आर एल के बारे में एगो नोट बनाके खबर करीं।',
-'viewsource' => 'स्त्रोत देखीं',
-
-# Login and logout pages
-'yourname' => 'प्रयोगकर्ता नाम',
-'yourpassword' => 'गुप्त शब्द',
-'yourpasswordagain' => 'गुप्त-शब्द पुन:डालीं:',
-'login' => 'खाता में प्रवेश',
-'nav-login-createaccount' => 'खाता प्रवेश / खाता बनाईं',
-'loginprompt' => '{{SITENAME}} में प्रवेश खातिर राउर कुकिज चालू होवे के चाहीं',
-'userlogin' => 'खाता प्रवेश / खाता बनाईं',
-'userloginnocreate' => 'खाता में प्रवेश',
-'logout' => 'खाता से बाहर',
-'userlogout' => 'खाता से बाहर',
-'notloggedin' => 'खाता में प्रवेश नईखीं भईल',
-'nologin' => 'का एगो खाता नईखे? $1.',
-'nologinlink' => 'एगो खाता बनाईं',
-'createaccount' => 'खाता बनाईं',
-'gotaccount' => 'का पहिले से एगो खाता बा? $1.',
-'gotaccountlink' => 'खाता में प्रवेश',
-'createaccountmail' => 'ई-मेल द्वारा',
-'badretype' => 'रउआ जौन गुप्त शब्द डालत बानी उ नईखे मेल खात।',
-'userexists' => 'ई प्रयोगकर्ता नाम पहिले से इस्तेमाल में बा। कृपया कौनो दोसर नाम चुनीं।',
-'loginerror' => 'खाता प्रवेश में त्रुटि',
-'createaccounterror' => 'ई खाता ना बन पाईल: $1',
-'nocookiesnew' => 'प्रयोगकर्ता खाता त बन गईल, बाँकी रउआ प्रवेश नईखीं भईल।
-{{SITENAME}} प्रयोगकर्ता लोग के खाता में प्रवेश करावे खातिर कुकिज के प्रयोग करेला।
-राउर कुकिज असक्षम बा।
-कृपया उ के सक्षम करीं, उ के बाद राउर नया प्रयोगकर्ता नाम आ गुप्त शब्द के साथ प्रवेश करीं।',
-'nocookieslogin' => '{{SITENAME}} प्रयोगकर्ता लोग के खाता में प्रवेश करावे खातिर कुकिज के प्रयोग करेला।
-राउर कुकिज असक्षम बा।
-कृपया उ के सक्षम करीं आ फिर से कोशिश करीं',
-'noname' => 'रउआ उपयुक्त प्रयोगकर्ता नाम नईखीं निर्दिष्ट कईले।',
-'loginsuccesstitle' => 'खाता प्रवेश में सफल',
-'loginsuccess' => "''' \"\$1\" के रुप में रउआ {{SITENAME}} में अब प्रवेश कर चुकल बानी।'''",
-'nosuchuser' => '"$1" नाम से कौनो प्रयोगकर्ता नईखन।
-प्रयोगकर्ता नाम संवेदनशील मामला बा।
-शब्द-वर्तनी के जाँच करीं, आ चाहे [[Special:UserLogin/signup|एगो नया खाता बनाईं]]।',
-'nouserspecified' => 'रउआ एगो प्रयोगकर्ता नाम निर्दिष्ट करे के बा।',
-'login-userblocked' => 'ई प्रयोगकर्ता के खाता निष्क्रिय हो चुकल बा। प्रवेश के आज्ञा नईखे।',
-'wrongpassword' => 'गलत गुप्त-शब्द डलले बानी।
-कृपया फिर से कोशिश करीं।',
-'wrongpasswordempty' => 'गुप्त-शब्द खाली बा। कृपया फिर से कोशिश करीं।',
-'passwordtooshort' => 'गुप्त-शब्द कम से कम {{PLURAL:$1|1 अक्षर|$1 अक्षर}} के होवे के चाहीं।',
-'password-name-match' => 'राउर गुप्त-शब्द राउर प्रयोगकर्ता नाम से अलग होवे के चाहीं।',
-'mailmypassword' => 'नया गुप्त-शब्द ई-मेल पर भेजीं',
-'passwordremindertitle' => '{{SITENAME}} खातिर नया अस्थायी गुप्त-शब्द',
-
-# Change password dialog
-'resetpass' => 'गुप्त-शब्द बदलीं',
-'oldpassword' => 'पुराना गुप्त-शब्द:',
-'newpassword' => 'नया गुप्त-शब्द:',
-'retypenew' => 'नया गुप्त-शब्द पुन: डालीं:',
-
-# Edit page toolbar
-'bold_tip' => 'मोट पाठ्य',
-'italic_sample' => 'इटालिक पाठ्य',
-'italic_tip' => 'इटालिक पाठ्य',
-'headline_sample' => 'शिर्षक पाठ्य',
-'image_sample' => 'उदाहरण.jpg',
-'media_sample' => 'उदाहरण.ogg',
-'media_tip' => 'फाईल लिंक',
-'sig_tip' => 'timestamp के साथ राउर हस्ताक्षर',
-
-# Edit pages
-'summary' => 'सारांश:',
-'subject' => 'विषय/शिर्षक:',
-'minoredit' => 'छोट परिवर्तन',
-'watchthis' => 'ई पन्ना ध्यानसूची में डालीं',
-'savearticle' => 'पन्ना सुरक्षित करीं',
-'preview' => 'पूर्वावलोकन',
-'showpreview' => 'पूर्वावलोकन देखाईं',
-'showlivepreview' => 'सीधा पूर्वावलोकन',
-'showdiff' => 'परिवर्तन देखाईं',
-'anoneditwarning' => "'''चेतावनी:''' रउआ आपन खाता में प्रवेश नईखीं कईले। ई पन्ना के सम्पादन इतिहास पर राउर आई पी पता दर्ज कईल जाई।",
-'anonpreviewwarning' => "''रउआ खाता में प्रवेश नईखीं भईल। सुरक्षित करेब त ई पन्ना के सम्पादन इतिहास पर राउर आई पी पता दर्ज हो जाई।\"",
-'missingsummary' => "'''स्मरणपत्र:'''रउआ एगो सारांश के सम्पादन नईखीं प्रदान कईले। अगर रउआ \"फिर से सुरक्षित करीं\" पर क्लिक करेब, त राउर सम्पादन बिना एगो सारांश के सुरक्षित हो जाई।",
-'missingcommenttext' => 'कृपया निचे एगो टिप्पणी करीं।',
-'missingcommentheader' => "'''स्मरणपत्र:''' रउआ ई टिप्पणी खातिर कौनो विषय/शिर्षक प्रदान नईखीं कईले। \"{{int:savearticle}}\" यदि रउआ फिर से सुरक्षित करब त राउर सम्पादन बिना कौनो शिर्षक के सुरक्षित हो जाई।",
-'summary-preview' => 'सारांश पूर्वावलोकन:',
-'subject-preview' => 'विषय/शिर्षक पूर्वावलोकन:',
-'blockedtitle' => 'निष्क्रिय प्रयोगकर्ता',
-'blockednoreason' => 'कउनो कारण उल्लेखित नईखे',
-'nosuchsectiontitle' => 'खण्ड ना मिल सकल।',
-'loginreqtitle' => 'खाता में प्रवेश जरुरी बा',
-'loginreqlink' => 'खाता में प्रवेश',
-'accmailtitle' => 'गुप्त-शब्द भेजा गईल',
-'newarticle' => '(नया)',
-'newarticletext' => "रउआ एगो अइसन लिंक के पन्ना के अनुसरण कइले बानी जउन अभी तक उपलब्ध नइखे।
-पन्ना बनावे खातिर, नीचे के बाकस में टाईप करे के शुरु करीं (ज्यादा जानकारी खातिर देखीं [[{{MediaWiki:Helppage}}|मदद पन्ना]])।
-यदि रउआ अहिजा गलती से आ गईल बानी त, आपन ब्राउजर के '''back''' (बैक) बटन दबाईं",
-'yourdiff' => 'अंतर',
-'template-protected' => '(संरक्षित)',
-
-# History pages
-'revisionasof' => '$1 के रुप में संशोधन',
-'revision-info' => '$2 में से $1 के रुप में संशोधन',
-'previousrevision' => '← पुरान संशोधन',
-'nextrevision' => 'नया संशोधन →',
-'currentrevisionlink' => 'हाल के संशोधन',
-'cur' => 'हाल',
-'next' => 'अगिला',
-'last' => 'पछिला',
-'page_first' => 'पहिलका',
-'page_last' => 'आखिरी',
-'histlegend' => "चुनाव अन्तर: तुलना करे खातिर संशोधन के रेडियो बटन पर निशान लगाईं आ enter बटन दबाईं आ चाहे निचला बटन दबाईं।<br />
-Legend: '''({{int:cur}})''' = हाल के संशोधन के साथ अंतर, '''({{int:last}})''' = पुर्ववर्ती संशोधन के साथ अंतर, '''{{int:minoreditletter}}''' = छोट सम्पादन।",
-'history-fieldset-title' => 'इतिहास निहारीं',
-'history-show-deleted' => 'खाली मेटावल',
-'histfirst' => 'बहुत पहिले के',
-'histlast' => 'हाल के',
-'historysize' => '({{PLURAL:$1|1 बाइट|$1 बाइट}})',
-'historyempty' => '(खाली)',
-
-# Revision feed
-'history-feed-title' => 'संशोधन इतिहास',
-'history-feed-description' => 'विकि पर इ पन्ना के संशोधन के इतिहास',
-'history-feed-item-nocomment' => '$1 $2 पर',
-'history-feed-empty' => 'अनुरोध करल गईल पन्ना उपलब्ध नईखे। हो सकत बा उ के विकि पर से मिटा दिहल गईल होखे, आ चाहे उ के नाम बदल देवल गईल होखे।
-प्रासंगिक पन्ना के [[Special:Search|विकि पर खोजे के]] कोशिश करत रहीं।',
-
-# Revision deletion
-'rev-deleted-comment' => '(टिप्पणी मिटा दिहल गईल बा)',
-'rev-deleted-user' => '(प्रयोगकर्ता के नाम मिटा दिहल गईल बा)',
-'rev-deleted-event' => '(लॉग कार्रवाई मिटा दिहल गईल बा)',
-'rev-deleted-user-contribs' => '[प्रयोगकर्ता नाम आ चाहे आइ पी पता हटा दिहल गईल बा - योगदान से सम्पादन छुप गईल बा]',
-'rev-deleted-text-permission' => "ई पन्ना के संशोधन '''मिटा'''' दिहल गईल बा।
-मेटावल जानकारी [{{fullurl:{{#Special:Log}}/delete|page={{FULLPAGENAMEE}}}} डिलेशन लॉग] में मिली।",
-'rev-delundel' => 'दिखाईं/छुपाईं',
-'revdel-restore' => 'दूश्यता बदलीं',
-'revdel-restore-deleted' => 'मिटल संसोधन',
-'revdel-restore-visible' => 'दृश्यमान संसोधन',
-'pagehist' => 'पन्ना के इतिहास',
-'deletedhist' => 'मिटावल इतिहास',
-
-# Merge log
-'revertmerge' => 'अलग करीं',
-'mergelogpagetext' => 'एक पन्ना इतिहास के दुसर पन्ना इतिहास में तुरंत विलय भईल एगो सूची नीचे दिहल बा।',
-
-# Diffs
-'history-title' => "''$1'' के संशोधन इतिहास",
-'lineno' => 'पंक्ति $1:',
-'compareselectedversions' => 'चुनल गईल संशोधन में अन्तर देखीं',
-'showhideselectedversions' => 'चुनल गईल संशोधन दिखाईं/छुपाईं',
-'editundo' => 'पूर्ववत',
-'diff-multi' => '({{PLURAL:$1|एगो मध्यम संशोधन|$1 गो मध्यम संशोधन}} नईखे दिखावल)',
-
-# Search results
-'searchresults' => 'खोज परिणाम',
-'searchresults-title' => '$1 खातिर खोज परिणाम',
-'searchresulttext' => '{{SITENAME}} के खोज करे के बारे में अधिक जानकारी खातिर, देखीं [[{{MediaWiki:Helppage}}| {{int:help}}]]।',
-'searchsubtitle' => '\'\'\'[[:$1]]\'\'\' खातिर राउर करल गईल खोज ([[Special:Prefixindex/$1| "$1" से शुरु होवे वाला सब पन्ना]]{{int:pipe-separator}}[[Special:WhatLinksHere/$1|all pages that link to "$1"]])',
-'searchsubtitleinvalid' => "रउआ '''$1''' खातिर खोज कईनी ह",
-'titlematches' => 'पन्ना के शिर्षक मिलत बा।',
-'notitlematches' => 'पन्ना के शिर्षक नईखे मिलत',
-'textmatches' => 'पन्ना के पाठ्य मिलत बा',
-'notextmatches' => 'पन्ना के पाठ्य नईखे मिलत',
-'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]]'' नाम से पन्ना बनाईं'''",
-'searchhelp-url' => 'Help:सामग्री',
-'searchmenu-prefix' => '[[विशेष:उपसर्ग सूची/$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' => 'सभन सामग्री में खोजीं (वार्ता पन्ना सहित)',
-'search-result-size' => '$1 ({{PLURAL:$2|1 शब्द|$2 शब्द}})',
-'search-result-score' => 'प्रासंगिकता: $1%',
-'search-redirect' => '(पुन: निर्देशण $1)',
-'search-section' => '(खंड $1)',
-'search-suggest' => 'का राउर मतलब बा: $1',
-'search-interwiki-caption' => 'बहिन परियोजना',
-'search-interwiki-default' => '$1 के परिणाम:',
-'search-interwiki-more' => '(अउर)',
-'search-relatedarticle' => 'संबंधित',
-'mwsuggest-disable' => 'AJAX सुझाव असक्षम',
-'searcheverything-enable' => 'सभन सन्दर्भ में खोजीं',
-'searchrelated' => 'संबंधित',
-'searchall' => 'सब',
-'showingresults' => "नीचे देखावल जा रहल बा {{PLURAL:$1|'''1''' परिणाम|'''$1''' परिणाम}} #'''$2''' से शुरु होवे वाला।",
-'showingresultsnum' => "नीचे देखावल जा रहल बा {{PLURAL:$3|'''1''' परिणाम|'''$3''' परिणाम}} #'''$2''' से शुरु होवे वाला।",
-'powersearch' => 'उन्नत खोज',
-'powersearch-legend' => 'उन्नत खोज',
-'powersearch-ns' => 'सन्दर्भ में खोजीं',
-'powersearch-redir' => 'पुन:निर्देश सूची',
-'powersearch-field' => 'खातिर खोज',
-'powersearch-togglelabel' => 'जाँच:',
-'powersearch-toggleall' => 'सब',
-'powersearch-togglenone' => 'कउनो ना',
-'search-external' => 'बाहरी खोज',
-
-# Quickbar
-'qbsettings-none' => 'कउनो ना',
-
-# Preferences page
-'preferences' => 'वरीयता',
-'mypreferences' => 'हमार पसन्द',
-'prefs-edits' => 'सम्पादन संख्या',
-'prefsnologin' => 'खाता में प्रवेश नईखीं कईले',
-'changepassword' => 'गुप्त शब्द बदलीं',
-'skin-preview' => 'पूर्वावलोकन',
-'prefs-rc' => 'तुरंत भईल परिवर्तन',
-
-# Recent changes
-'recentchanges' => 'तुरंत भईल परिवर्तन',
-'rcshowhideminor' => '$1 छोट सम्पादन',
-'diff' => 'अन्तर',
-'hist' => 'इति',
-'hide' => 'छुपाँई',
-'show' => 'दिखाईं',
-'minoreditletter' => 'छो',
-'newpageletter' => 'न',
-'boteditletter' => 'बो',
-'number_of_watching_users_pageview' => '[$1 देखल जा रहल बा {{PLURAL:$1|प्रयोगकर्ता|प्रयोगकर्ता}}]',
-
-# Recent changes linked
-'recentchangeslinked' => 'सम्बन्धित बदलाव',
-'recentchangeslinked-feed' => 'सम्बन्धित बदलाव',
-'recentchangeslinked-toolbox' => 'सम्बन्धित बदलाव',
-
-# Upload
-'upload' => 'फाईल लादीं',
-
-# File description page
-'filehist' => 'पन्ना के इतिहास',
-'filehist-deleteall' => 'सब मिटाईं',
-'filehist-deleteone' => 'मिटाईं',
-'filehist-current' => 'मौजूदा',
-'filehist-datetime' => 'तारिख/समय',
-'filehist-thumb' => 'थम्बनेल',
-'filehist-nothumb' => 'बिन थम्बनेल',
-'filehist-user' => 'प्रयोगकर्ता',
-'filehist-dimensions' => 'आयाम',
-'filehist-filesize' => 'फाईल के आकार',
-'filehist-comment' => 'टिप्पणी',
-'filehist-missing' => 'गायब फाईल',
-'imagelinks' => 'फाईल लिंक',
-'nolinkstoimage' => 'इ फाईल जोड़े कौनो फाइल लिंक नईखे।',
-'morelinkstoimage' => 'इ फाइल संगे जुड़ल [[Special:WhatLinksHere/$1|सब लिंक]] देखीं।',
-'sharedupload' => 'इ फाईल $1 से बा आ दुसर परियोजना में प्रयोग करल जा सकत बा।',
-'sharedupload-desc-there' => 'इ फाईल $1 से बा आ दुसर परियोजना में प्रयोग करल जा सकत बा। अधिक जानकारी खातिर कृपया [$2 फाईल विवरण पन्ना] देखीं।',
-'filepage-nofile' => 'इ नाम से कौनो फाईल उपलब्ध नईखे।',
-'filepage-nofile-link' => 'इ नाम से कौनो फाईल उपलब्ध नईखे, लेकिन रउआ [$1 के लाद] सकत बानी।',
-'uploadnewversion-linktext' => 'इ फाईल के नया संस्करण लादीं।',
-'shared-repo-from' => '$1 से',
-'shared-repo' => 'एगो आवटिंत भंडार गृह',
-'shared-repo-name-wikimediacommons' => 'विकिमीडिया कॉमन्स',
-
-# File reversion
-'filerevert' => 'पुन: निर्देशित $1',
-'filerevert-legend' => 'पुन: निर्देशित फाईल',
-'filerevert-comment' => 'कारण:',
-
-# File deletion
-'filedelete' => '$1 के मिटाईं',
-'filedelete-legend' => 'फाईल के मिटाईं',
-'filedelete-comment' => 'कारण:',
-'filedelete-submit' => 'मिटाईं',
-'filedelete-success' => "'''$1''' के मिटा दिहल गईल बा।",
-'filedelete-nofile' => "'''$1''' उपलब्ध नईखे।",
-
-# Random page
-'randompage' => 'अविशिष्ट पन्ना',
-
-# Miscellaneous special pages
-'nbytes' => '$1 {{PLURAL:$1|बाईट|बाईट्स}}',
-'move' => 'स्थान्तरण',
-'movethispage' => 'ई पन्ना के स्थांतरण करीं',
-
-# Book sources
-'booksources' => 'किताबी स्त्रोत',
-
-# Special:AllPages
-'allpagessubmit' => 'जाईं',
-'allpagesprefix' => 'उपसर्ग के साथे पन्ना प्रदर्शन:',
-
-# E-mail user
-'emailuser' => 'ई प्रयोगकर्ता के ईमेल करीं',
-
-# Watchlist
-'watchlist' => 'हमार ध्यानसूची',
-'mywatchlist' => 'हमार ध्यानसूची',
-'watch' => 'ध्यानसूची में डालीं',
-'watchthispage' => 'ई पन्ना ध्यानसूची में डालीं',
-'unwatch' => 'ध्यानसूची से हटाईं',
-
-# Displayed when you click the "watch" button and it is in the process of watching
-'watching' => 'ध्यानसूची में जाते हुए',
-'unwatching' => 'ध्यानसूची से हटते हुए',
-
-# Undelete
-'undeletelink' => 'देखीं/बहाल करीं',
-
-# Namespace form on various pages
-'namespace' => 'सन्दर्भ',
-'invert' => 'चयनित पलटीं',
-'blanknamespace' => '(मुख्य)',
-
-# Contributions
-'contributions' => 'प्रयोगकर्ता योगदान',
-'contributions-title' => ' $1 खातिर प्रयोगकर्ता योगदान',
-'mycontris' => 'हमार योगदान',
-'nocontribs' => 'ई मानदंड से मिलत जुलत कौनो बदलाव ना मिलल।',
-'uctop' => '(शीर्ष)',
-'month' => 'महिना से (आ उ से पहिले):',
-'year' => 'साल से (आ उ से पहिले):',
-
-'sp-contributions-newbies' => 'खाली नया खाता के योगदान देखीं।',
-'sp-contributions-newbies-sub' => 'नया खाता खातिर',
-'sp-contributions-newbies-title' => 'नया खाता खातिर प्रयोगकर्ता के योगदान।',
-'sp-contributions-blocklog' => 'निष्क्रीय खाता',
-'sp-contributions-deleted' => 'नष्ट प्रयोगकर्ता के योगदान।',
-'sp-contributions-logs' => 'लौग',
-'sp-contributions-talk' => 'बात-चीत',
-'sp-contributions-userrights' => 'प्रयोगकर्ता अधिकार प्रबन्धन',
-'sp-contributions-blocked-notice' => 'ई प्रयोगकर्ता के ई समय निष्क्रीय करल गईल बा।
-नविनतम नष्ट लौग प्रविष्टी उद्धरण खातिर निचे दिहल बा:',
-
-# What links here
-'whatlinkshere' => 'अहिजा का जुड़ी',
-'whatlinkshere-title' => 'पन्ना जौन "$1" से जुड़ेला',
-'whatlinkshere-page' => 'पन्ना:',
-'linkshere' => "नीचे के सब पन्ना '''[[:$1]]''' से जुड़ेला:",
-'nolinkshere' => "'''[[:$1]]''' से कौनो पन्ना नईखे जुड़ल।",
-'nolinkshere-ns' => "चुनल गईल सन्दर्भ में '''[[:$1]]''' से कौनो पन्ना ना जुड़ेला।",
-'isredirect' => 'पुन: निर्दिष्ट पन्ना',
-'isimage' => 'तस्वीर लिंक',
-'whatlinkshere-prev' => '{{PLURAL:$1|पिछला|पिछला $1}}',
-'whatlinkshere-next' => '{{PLURAL:$1|अगला|अगला $1}}',
-'whatlinkshere-links' => '← लिंक',
-'whatlinkshere-hideredirs' => '$1 पुन: निर्देशित',
-'whatlinkshere-hidelinks' => '$1 लिंक',
-'whatlinkshere-hideimages' => '$1 तस्वीर लिंक',
-'whatlinkshere-filters' => 'फिल्टर',
-
-# Block/unblock
-'blockip' => 'प्रतिबंधित प्रयोगकर्ता',
-'blocklink' => 'निष्क्रिय',
-'unblocklink' => 'ताला खोलीं',
-'change-blocklink' => 'ब्लॉक बदलीं',
-'contribslink' => 'योगदान',
-'blocklogpage' => 'निष्क्रिय खाता',
-
-# Move page
-'movepagebtn' => 'पन्ना स्थांतरण करीं',
-'revertmove' => 'पिछलका स्थिति',
-
-# Thumbnails
-'thumbnail-more' => 'बढ़ाईं',
-'filemissing' => 'फाईल गायब',
-
-# Tooltip help for the actions
-'tooltip-pt-userpage' => 'राउर प्रयोगकर्ता पन्ना',
-'tooltip-pt-mytalk' => 'राउर वार्ता पन्ना',
-'tooltip-pt-preferences' => 'राउर पसन्द',
-'tooltip-pt-mycontris' => 'राउर योगदान के सूची',
-'tooltip-pt-login' => 'रउआ के खाता प्रवेश खातिर प्रोत्साहित करल जा रहल बा, बाँकि ई अनिवार्य नईखे',
-'tooltip-pt-anonlogin' => 'रउआ के खाता प्रवेश खातिर प्रोत्साहित करल जा रहल बा, बाँकि ई अनिवार्य नईखे',
-'tooltip-pt-logout' => 'खाता से बाहर',
-'tooltip-ca-talk' => 'सामग्री पन्ना के बारे में बात-चीत',
-'tooltip-ca-edit' => 'रउआ ई पन्ना के सम्पादन कर सकत बानी। कृपया पन्ना सुरक्षित करे से पहिले पूर्वावलोकन बटन के इस्तेमाल करीं।',
-'tooltip-ca-addsection' => 'एगो नया खण्ड शुरु करीं',
-'tooltip-ca-viewsource' => 'इ पन्ना के संरक्षित कर दिहल गईल बा। रऊआ एकर मूल देख सकत बानी।',
-'tooltip-ca-history' => 'ई पन्ना के पिछला संशोधन',
-'tooltip-ca-protect' => 'इ पन्ना के संरक्षित करीं।',
-'tooltip-ca-unprotect' => 'इ पन्ना के संरक्षण हटाईं।',
-'tooltip-ca-delete' => 'ई पन्ना मिटाईं',
-'tooltip-ca-move' => 'ई पन्ना के स्थांतरण करीं',
-'tooltip-ca-watch' => 'इ पन्ना के आपन ध्यानसूची में डालीं',
-'tooltip-search' => '{{SITENAME}} खोजीं',
-'tooltip-search-go' => 'यदि पन्ना मौजूद होई त ईहे सटीक नाम के साथ उ पन्ना पर जाईं',
-'tooltip-search-fulltext' => 'ई पाठ्य खातिर पन्ना खोजीं',
-'tooltip-p-logo' => 'मुख्य पन्ना पर जाईं',
-'tooltip-n-mainpage' => 'मुख्य पन्ना पर जाईं',
-'tooltip-n-mainpage-description' => 'मुख्य पन्ना पर पधारीं',
-'tooltip-n-portal' => 'परियोजना के बारे मेँ, रउआ का कर सकत बानी, वस्तु कहाँ खोजब',
-'tooltip-n-currentevents' => 'वर्तमान के घटना पर पृष्ठभूमी जानकारी खोजीं',
-'tooltip-n-recentchanges' => 'विकि पर तुरंत भईल परिवर्तन के सूची',
-'tooltip-n-randompage' => 'बेतरतिब पन्ना लादीं (Load करीं)',
-'tooltip-n-help' => 'जगह पता लगावे खातिर',
-'tooltip-t-whatlinkshere' => 'अहिजा लिंक होखे वाला सब विकि पन्ना के सूची',
-'tooltip-t-recentchangeslinked' => 'ई पन्ना से जुड़ल पन्नवन पर तुरंत भईल परिवर्तन',
-'tooltip-t-upload' => 'फाईल लादीं (अपलोड )',
-'tooltip-t-specialpages' => 'ख़ाश पन्नवन के सूची',
-'tooltip-t-print' => 'ई पन्ना के छापे लायक संस्करण।',
-'tooltip-t-permalink' => 'ई पन्ना के संसोधन खातिर स्थायी लिंक।',
-'tooltip-ca-nstab-main' => 'सामग्री पन्ना देखीं',
-'tooltip-ca-nstab-special' => 'ई एगो ख़ाश पन्ना ह, रउआ ई पन्ना के सम्पादन नईखीं कर सकत',
-'tooltip-save' => 'आपन बदलाव के सुरक्षित करीं',
-
-# Media information
-'svg-long-desc' => 'एस वी जी फाईल, नॉमिनल्ली $1 x $2 पिक्सल्स, फाईल के आकार $3',
-'show-big-image' => 'पुरा गुणवत्ता',
-'file-info-gif-looped' => 'लूप्ड',
-'file-info-gif-frames' => '$1 {{PLURAL:$1|फ्रेम}}',
-'file-info-png-looped' => 'लूप्ड',
-
-# Bad image list
-'bad_image_list' => 'फोर्मेट निम्न अनुसार बा:
-खाली सूची सामग्री (* से शुरु होवे वाला पंक्ति ) मानल गईल बा।
-पंक्ति पर पहिला लिंक एगो खराब फाईल के साथ जुड़ल होवे के चाहीं।
-कोई भी बाद वाला लिंक ओही पंक्ति पर अईला पर उ के अपवाद मानल जाई, अर्थात जौन पन्ना पर फाईल इनलाईन हो सकत बा।',
-
-# Metadata
-'metadata' => 'मेटाडाटा',
-'metadata-help' => 'इ फाईल में अतिरिक्त जानकारी उपलब्ध बा, हो सकत बा कि इ डिजीटल कैमरा या स्कैनर से लेवल गईल होखे। यदि इ फाईल एकर मूल फाईल में से संशोधित करल गईल बा त कुछ जानकारी उजागर ना हो सकी।',
-'metadata-expand' => 'विस्तृत विवरण देखाईं',
-'metadata-collapse' => 'विस्तृत विवरण छुपाँईं',
-
-# EXIF tags
-'exif-imagewidth' => 'चौड़ाई',
-'exif-imagelength' => 'ऊँचाई',
-'exif-bitspersample' => 'अवयव प्रति बीट',
-'exif-compression' => 'सम्पीड़न प्रणाली',
-'exif-photometricinterpretation' => 'पिक्सल रचना',
-'exif-orientation' => 'अभिसंस्करण',
-'exif-samplesperpixel' => 'अवयवन के संख्या',
-'exif-planarconfiguration' => 'डेटा प्रबन्धन',
-'exif-xresolution' => 'क्षैतिज समाधान',
-'exif-yresolution' => 'लम्बवत समाधान',
-'exif-stripoffsets' => 'चित्र डेटा के स्थिती',
-'exif-jpeginterchangeformatlength' => 'JPEG डेटा के बाइट',
-
-# 'all' in various places, this might be different for inflected languages
-'namespacesall' => 'सब',
-'monthsall' => 'सब',
-'limitall' => 'सब',
-
-# E-mail address confirmation
-'confirmemail' => 'इ-मेल पता कन्फर्म करीं',
-
-# Special:SpecialPages
-'specialpages' => 'ख़ाश पन्ना',
-
-# New logging system
-'revdelete-restricted' => 'प्रबंधक पर प्रतिबंध लागू',
-'revdelete-unrestricted' => 'प्रबंधक पर से प्रतिबंध समाप्त',
-
-);
index 014a8ec..f5c45ed 100644 (file)
@@ -574,6 +574,8 @@ Legend: '''({{int:cur}})''' = हाल के संशोधन के सा
 'watching' => 'ध्यानसूची में जाते हुए',
 'unwatching' => 'ध्यानसूची से हटते हुए',
 
+'created' => 'बनावल गईल',
+
 # Undelete
 'undeletelink' => 'देखीं/बहाल करीं',
 
index 9542b65..ea21777 100644 (file)
@@ -872,7 +872,6 @@ Log masuk pauncitan disadiakan di bawah gasan rujukan:",
 'template-protected' => '(dilindungi)',
 'template-semiprotected' => '(semi-dilindungi)',
 'hiddencategories' => 'Tungkaran ini adalah angguta matan {{PLURAL:$1|1 tumbung tasungkup|$1 tumbung tasungkup}}:',
-'nocreatetitle' => 'Maulah tungkaran dibatasi',
 'nocreatetext' => '{{SITENAME}} lagi mambatasi kakawaan maulah tungkaran hanyar.
 Pian kawa babulik wan mambabak sabuah tungkaran nag ada, atawa [[Special:UserLogin|lbabuat log atawa baulah sabuah akun]]',
 'nocreate-loggedin' => 'Pian kada baisi ijin hagan maulah tungkaran-tungkaran hanyar.',
@@ -1402,12 +1401,13 @@ Amun Pian mamilih manyadiakan ini, ini akan dipuruk gasan paminanduan kulihan ga
 'right-sendemail' => 'Mangirim suril ka papamuruk lain',
 'right-passwordreset' => 'Tiringi setelan-pulang katasunduk suril',
 
+# Special:Log/newusers
+'newuserlogpage' => 'Log pamakai hanyar',
+'newuserlogpagetext' => 'Ngini adalah sabuah log paulahan pamuruk.',
+
 # User rights log
 'rightslog' => 'Log parubahan hak masuk',
 'rightslogtext' => 'Nangini adalah sabuah log paparubahan ka hahak pamuruk.',
-'rightslogentry' => 'Ubah galambang angguta gasan $1 matan $2 ka $3',
-'rightslogentry-autopromote' => 'sudah utumatis diangkat matan $2 ka $3',
-'rightsnone' => '(kadada)',
 
 # Associated actions - in the sentence "You do not have permission to X"
 'action-read' => 'baca tungkaran ini',
@@ -2032,10 +2032,6 @@ Protokol nang didukung: <code>$1</code> (jangan tambahakan dalam panggagaian Pia
 'activeusers-hidesysops' => 'Sungkupakan pambakal',
 'activeusers-noresult' => 'Kadada papamuruk tatamu.',
 
-# Special:Log/newusers
-'newuserlogpage' => 'Log pamakai hanyar',
-'newuserlogpagetext' => 'Ngini adalah sabuah log paulahan pamuruk.',
-
 # Special:ListGroupRights
 'listgrouprights' => 'Galambang hak pamuruk',
 'listgrouprights-summary' => 'Barikut adalah sabuah daptar matan galambang pamuruk nang ada di wiki ngini, lawan hak ungkai masing-masing.
@@ -2159,6 +2155,8 @@ $UNWATCHURL
 
 kitihan-bulik wan pangganian labih jauh:
 {{canonicalurl:{{MediaWiki:Helppage}}}}',
+'created' => "ta'ulah",
+'changed' => "ta'ubah",
 
 # Delete
 'deletepage' => 'Hapus tungkaran',
@@ -3661,7 +3659,7 @@ Situs ngini mangalami kangalihan teknik.',
 'logentry-newusers-create' => '$1 ma-ulah sabuting akun pamakai',
 'logentry-newusers-create2' => '$1 ma-ulah sabuting akun pamakai $3',
 'logentry-newusers-autocreate' => 'Akun $1 utumatis diulah',
-'newuserlog-byemail' => 'Katasunduk dikirimakan lung suril.',
+'rightsnone' => '(kadada)',
 
 # Feedback
 'feedback-bugornote' => 'Pabila Pian siap manjalasakan sabuah masalah taknik rinci muhun [lapurakan sabuah bug $1].
index 28fe789..838e0be 100644 (file)
@@ -201,6 +201,7 @@ $messages = array(
 'newwindow' => '(নতুন উইন্ডোতে খুলবে)',
 'cancel' => 'বাতিল',
 'moredotdotdot' => 'আরও...',
+'morenotlisted' => 'আরও তালিকাভুক্ত হয়নি...',
 'mypage' => 'আমার পাতা',
 'mytalk' => 'আলোচনা',
 'anontalk' => 'এই বেনামী ব্যবহারকারীর আলাপের পাতা',
@@ -234,6 +235,7 @@ $messages = array(
 'namespaces' => 'নামস্থান',
 'variants' => 'বিকল্পসমূহ',
 
+'navigation-heading' => 'পরিভ্রমণ মেনু',
 'errorpagetitle' => 'ত্রুটি',
 'returnto' => '$1 শিরোনামের পাতায় ফেরত যান।',
 'tagline' => '{{SITENAME}} থেকে',
@@ -442,7 +444,7 @@ $1',
 'viewsource-title' => '$1 এর উৎস দেখুন',
 'actionthrottled' => 'কাজের গতি ধীরকরণ',
 'actionthrottledtext' => 'স্প্যাম-রোধী সমাধান হিসেবে এই কাজটি খুব কম সময়ে অনেক বেশিবার সম্পাদনা করার সীমা বেঁধে দেওয়া হয়েছে। আপনি সেই সীমা অতিক্রম করেছেন। অনুগ্রহ করে কয়েক মিনিট পরে আবার চেষ্টা করুন।',
-'protectedpagetext' => 'সম্পাদনা এড়াতে এ পাতাটির ব্যবহার নিয়ন্ত্রণ করা হয়েছে।',
+'protectedpagetext' => 'সমà§\8dপাদনা à¦\85থবা à¦¸à§\8dথানানà§\8dতর à¦\8fড়াতà§\87 à¦\8f à¦ªà¦¾à¦¤à¦¾à¦\9fির à¦¬à§\8dযবহার à¦¨à¦¿à¦¯à¦¼à¦¨à§\8dতà§\8dরণ à¦\95রা à¦¹à¦¯à¦¼à§\87à¦\9bà§\87।',
 'viewsourcetext' => 'এ পাতাটি আপনি দেখতে এবং উৎসের অনুলিপি নিতে পারবেন:',
 'viewyourtext' => "আপনি ' ' ' আপনার সম্পাদনা ' ' ' এই পাতায় দেখতে এবং কপি করতে পারেন:",
 'protectedinterface' => 'এই পাতার বিষয়বস্তু এই উইকি সফটওয়্যারের একটি ইন্টারফেস বার্তা প্রদান করে, তাই এটিকে সুরক্ষিত করে রাখা হয়েছে।
@@ -476,6 +478,9 @@ $2',
 
 এ পরিস্থিতিতে আপনি বেনামে {{SITENAME}} ব্যবহার করতে পারেন, কিংবা একই বা পৃথক নামে <span class='plainlinks'>[$1 আবার প্রবেশ করতে]</span> পারেন।
 লক্ষ্য করুন যে, এর কোন কোন পাতা এখনও এমনভাবে দেখাতে পারে যাতে মনে হবে আপনি আগের অবস্থাতেই আছেন। এক্ষেত্রে আপনাকে আপনার ব্রাওজারের ক্যাশ পরিষ্কার (clear browser cache) করে নিতে হবে।",
+'welcomeuser' => 'স্বাগতম, $1!',
+'welcomecreation-msg' => 'আপনার অ্যাকাউন্ট তৈরী হয়েছে।
+আপনার [[Special:Preferences|{{SITENAME}} পছন্দসমূহ]]  পরিবর্তন করে নিতে ভুলবেন না।',
 'yourname' => 'ব্যবহারকারী নাম:',
 'yourpassword' => 'শব্দচাবি:',
 'yourpasswordagain' => 'শব্দচাবিটি (password) আবার লিখুন',
@@ -628,6 +633,7 @@ $2
 'changeemail-oldemail' => 'বর্তমান ই-মেইল ঠিকানা:',
 'changeemail-newemail' => 'নতুন ই-মেইল ঠিকানা:',
 'changeemail-none' => '(কিছু নাই)',
+'changeemail-password' => 'আপনার {{SITENAME}} শব্দচাবি:',
 'changeemail-submit' => 'ই-মেইল পরিবর্তন',
 'changeemail-cancel' => 'বাতিল',
 
@@ -797,7 +803,6 @@ $1 নিষেধাজ্ঞা আরোপ করেছেন। নিষ
 'template-protected' => '(সুরক্ষিত)',
 'template-semiprotected' => '(অর্ধ-সুরক্ষিত)',
 'hiddencategories' => 'এ পাতাটি যে {{PLURAL:$1|1 লুকায়িত বিষয়শ্রেণীর|$1 লুকায়িত বিষয়শ্রেণীসমূহের}} সদস্য:',
-'nocreatetitle' => 'পাতা তৈরি নিয়ন্ত্রণ করা হয়েছে',
 'nocreatetext' => '{{SITENAME}}-এ নতুন পাতা সৃষ্টি করার ক্ষমতা সীমাবদ্ধ করা হয়েছে।
 আপনি ফিরে গিয়ে ইতিমধ্যে বিদ্যমান কোন পাতা সম্পাদনা করতে পারেন, অথবা [[Special:UserLogin|অ্যাকাউন্টে প্রবেশ কিংবা অ্যাকাউন্ট সৃষ্টি করতে পারেন]]।',
 'nocreate-loggedin' => 'নতুন পাতা তৈরিতে আপনাকে অনুমোতি দেওয়া হয়নি।',
@@ -1194,9 +1199,9 @@ $1",
 'prefs-emailconfirm-label' => 'ই-মেইল নিশ্চিতকরণ:',
 'prefs-textboxsize' => 'সম্পাদনা উইন্ডোর আকার',
 'youremail' => 'ইমেইল *',
-'username' => 'ব্যবহারকারী নাম:',
-'uid' => 'ব্যবহারকারী নং (ID):',
-'prefs-memberingroups' => '{{PLURAL:$1|দলের|দলসমূহের}} সদস্য:',
+'username' => '{{GENDER:$1|ব্যবহারকারী নাম}}:',
+'uid' => '{{GENDER:$1|ব্যবহারকারী}} নং (ID):',
+'prefs-memberingroups' => '{{PLURAL:$1|দলের|দলসমূহের}} {{GENDER:$2|সদস্য}}:',
 'prefs-registration' => 'নিবন্ধের সময়:',
 'yourrealname' => 'আসল নাম *',
 'yourlanguage' => 'ভাষা:',
@@ -1343,12 +1348,13 @@ $1",
 'right-sendemail' => 'অন্য ব্যবহারকারীকে ইমেইল পাঠান',
 'right-passwordreset' => 'পাসওয়ার্ড রিসেট ইমেইল দেখুন',
 
+# Special:Log/newusers
+'newuserlogpage' => 'ব্যবহারকারী সৃষ্টির লগ',
+'newuserlogpagetext' => 'এটি নতুন ব্যবহারকারী সৃষ্টির লগ',
+
 # User rights log
 'rightslog' => 'ব্যবহারকারীর অধিকার লগ',
 'rightslogtext' => 'এটি ব্যবহারকারী অধিকারে আনা পরিবর্তনগুলির একটি লগ।',
-'rightslogentry' => '$1-কে $2 দল থেকে পরিবর্তন করে $3 দলের সদস্য করা হয়েছে',
-'rightslogentry-autopromote' => 'সয়ংক্রিয়ভাবে $2 থেকে $3 উন্নীত হয়েছে',
-'rightsnone' => '(কিছু নাই)',
 
 # Associated actions - in the sentence "You do not have permission to X"
 'action-read' => 'এই পাতাটি পড়ুন',
@@ -1576,6 +1582,7 @@ $1',
 'backend-fail-notsame' => '"$1"-এ আগে থেকেই অপর একটি ফাইল রয়েছে।',
 'backend-fail-invalidpath' => '"$1" একটি ভুল স্টোরেজ পাথ।',
 'backend-fail-delete' => '$1 ফাইলটি অপসারণ সম্ভব নয়।',
+'backend-fail-describe' => '"$1" ফাইলের মেটাডাটা পরিবর্তন সম্ভব নয়।',
 'backend-fail-alreadyexists' => '"$1" নামের একটি ফাইল আগে থেকেই রয়েছে।',
 'backend-fail-store' => '"$2"-এ "$1" ফাইলটি সংরক্ষন করা সম্ভব নয়।',
 'backend-fail-copy' => '"$1" ফাইলটি "$2"-তে কপি করা সম্ভব নয়।',
@@ -1961,7 +1968,7 @@ Maybe you want to edit the description on its [$2 file description page] there.'
 'linksearch-ok' => 'অনুসন্ধান',
 'linksearch-text' => '"*.wikipedia.org" এর মত ওয়াইল্ড কার্ড ব্যবহার করা যেতে পারে।
 নূন্যতম একটি টপ লেভেল ডোমেইন প্রয়োজন, যেমন "*.org".<br />
-যে সকল প্রোটোকল সমর্থন করে: <code>$1</code> (প্রোটকল উল্লেখ করা না হলে http:// ডিফল্ট হিসাবে ব্যবহৃত হবে)।',
+যে সকল {{PLURAL:$2|প্রোটোকল|প্রোটোকলসমূহ}} সমর্থন করে: <code>$1</code> (প্রোটকল উল্লেখ করা না হলে http:// ডিফল্ট হিসাবে ব্যবহৃত হবে)।',
 'linksearch-line' => '$2 থেকে $1 এ লিংক করা হয়েছে',
 'linksearch-error' => 'হোস্ট নামের শুরুতে কেবলমাত্র ওয়াইল্ডকার্ড ব্যবহার করা যায়।',
 
@@ -1980,10 +1987,6 @@ Maybe you want to edit the description on its [$2 file description page] there.'
 'activeusers-hidesysops' => 'প্রশাসক লুকাও',
 'activeusers-noresult' => 'কোনো ব্যবহারকারী পাওয়া যায়নি।',
 
-# Special:Log/newusers
-'newuserlogpage' => 'ব্যবহারকারী সৃষ্টির লগ',
-'newuserlogpagetext' => 'এটি নতুন ব্যবহারকারী সৃষ্টির লগ',
-
 # Special:ListGroupRights
 'listgrouprights' => 'দলগত ব্যবহারকারী অধিকার',
 'listgrouprights-summary' => 'এই উইকির ব্যবহারকারীদের একটি গ্রুপগুলোর তালিকা দেখানো হচ্ছে, সাথে গ্রুপের কার্যপরিধিও উল্লেখ করা হয়েছে।
@@ -2049,12 +2052,9 @@ Maybe you want to edit the description on its [$2 file description page] there.'
 'watchnologin' => 'আপনি এখনও লগ-ইন করেননি।',
 'watchnologintext' => 'আপনার নজর তালিকা পরিবর্তনের জন্য আপনাকে অবশ্যই অ্যাকাউন্টে [[Special:UserLogin|প্রবেশ করতে হবে]]।',
 'addwatch' => 'নজরতালিকায় যোগ করো',
-'addedwatchtext' => "\"<nowiki>\$1</nowiki>\" পাতাটি আপনার [[Special:Watchlist|নজরতালিকা]]-তে যোগ করা হয়েছে৷
-
-ভবিষ্যতে এই পাতা ও এই পাতার সাথে সম্পর্কিত আলোচনা পাতায় সংঘটিত যাবতীয় পরিবর্তন এখানে তালিকাভুক্ত হবে৷
-এছাড়া [[Special:RecentChanges|সাম্প্রতিক পরিবর্তনসমূহ]]তালিকায় এই পাতাটিকে '''গাঢ়''' অক্ষরে দেখানো হবে যাতে আপনি সহজেই পাতাটি শনাক্ত করতে পারেন৷
+'addedwatchtext' => '"[[:$1]]" পাতাটি আপনার [[Special:Watchlist|নজরতালিকা]]-তে যোগ করা হয়েছে৷
 
-পরবরà§\8dতà§\80তà§\87 à¦\86পনি à¦¯à¦¦à¦¿ à¦ªà¦¾à¦¤à¦¾à¦\9fিà¦\95à§\87 à¦\86পনার à¦¨à¦\9cরতালিà¦\95া à¦¥à§\87à¦\95à§\87 à¦¸à¦°à¦¿à¦¯à¦¼à§\87 à¦«à§\87লতà§\87 à¦\9aান, à¦¤à¦¬à§\87 \"নà¦\9cর à¦¸à¦°à¦¿à¦¯à¦¼à§\87 à¦¨à¦¿à¦¨\" à¦\9fà§\8dযাবà¦\9fিতà§\87 à¦\95à§\8dলিà¦\95 à¦\95রবà§\87ন৷",
+ভবিষà§\8dযতà§\87 à¦\8fà¦\87 à¦ªà¦¾à¦¤à¦¾ à¦\93 à¦\8fà¦\87 à¦ªà¦¾à¦¤à¦¾à¦° à¦¸à¦¾à¦¥à§\87 à¦¸à¦®à§\8dপরà§\8dà¦\95িত à¦\86লà§\8bà¦\9aনা à¦ªà¦¾à¦¤à¦¾à¦¯à¦¼ à¦¸à¦\82à¦\98à¦\9fিত à¦¯à¦¾à¦¬à¦¤à§\80য় à¦ªà¦°à¦¿à¦¬à¦°à§\8dতন à¦\8fà¦\96ানà§\87 à¦¤à¦¾à¦²à¦¿à¦\95াভà§\81à¦\95à§\8dত à¦¹à¦¬à§\87৷',
 'removewatch' => 'নজরতালিকা থেকে অপসারণ',
 'removedwatchtext' => '"[[:$1]]" পাতাটি [[Special:Watchlist|নজর তালিকা]] থেকে অপসারিত হয়েছে।',
 'watch' => 'নজর রাখুন',
@@ -2083,40 +2083,47 @@ Maybe you want to edit the description on its [$2 file description page] there.'
 'enotif_mailer' => '{{SITENAME}} বিজ্ঞপ্তি ই-মেইল প্রেরক',
 'enotif_reset' => 'সমস্ত পাতা দেখা হয়েছে হিসেবে চিহ্নিত করুন',
 'enotif_impersonal_salutation' => '{{SITENAME}} ব্যবহারকারী',
+'enotif_subject_deleted' => '{{SITENAME}} এর $1 পাতাটি {{gender:$2|$2}} অপসারণ করেছেন',
+'enotif_subject_created' => '{{SITENAME}} এর $1 পাতাটি {{gender:$2|$2}} তৈরী করেছেন',
+'enotif_subject_moved' => '{{SITENAME}} এর $1 পাতাটি {{gender:$2|$2}} স্থানান্তর করেছেন',
+'enotif_subject_restored' => '{{SITENAME}} এর $1 পাতাটি {{gender:$2|$2}} পুনরায় ফিরিয়ে এনেছেন',
+'enotif_subject_changed' => '{{SITENAME}} এর $1 পাতাটি {{gender:$2|$2}} পরিবর্তন করেছেন',
+'enotif_body_intro_deleted' => '{{SITENAME}} এর $1 পাতাটি {{gender:$2|$2}} $PAGEEDITDATE তারিখে অপসারণ করেছেন, বিস্তারিত $3।',
+'enotif_body_intro_created' => '{{SITENAME}} এর $1 পাতাটি {{gender:$2|$2}} $PAGEEDITDATE তারিখে তৈরী করেছেন, বর্তমান সংস্করণ দেখুন এখানে $3।',
+'enotif_body_intro_moved' => '{{SITENAME}} এর $1 পাতাটি {{gender:$2|$2}} $PAGEEDITDATE তারিখে স্থানান্তর করেছেন, বর্তমান সংস্করণ দেখুন এখানে $3।',
+'enotif_body_intro_restored' => '{{SITENAME}} এর $1 পাতাটি {{gender:$2|$2}} $PAGEEDITDATE আগের অবস্থায় ফিরিয়ে এনেছেন, বর্তমান সংস্করণ দেখুন এখানে $3।',
+'enotif_body_intro_changed' => '{{SITENAME}} এর $1 পাতাটি {{gender:$2|$2}} $PAGEEDITDATE তারিখে পরিবর্তন করেছেন, বর্তমান সংস্করণ দেখুন এখানে $3।',
 'enotif_lastvisited' => 'আপনার শেষ আগমনের পরে সংঘটিত সমস্ত পরিবর্তনের জন্য $1 দেখুন।',
 'enotif_lastdiff' => 'এই পরিবর্তনটি দেখার জন্য $1 দেখুন।',
 'enotif_anon_editor' => 'বেনামী ব্যবহারকারী $1',
-'enotif_body' => '!প্রিয় $WATCHINGUSERNAME,
+'enotif_body' => 'প্রিয় $WATCHINGUSERNAME,
 
-{{SITENAME}}-এর $PAGETITLE শিরোনামের পাতাটি $PAGEEDITDATE তারিখে $PAGEEDITOR $CHANGEDORCREATED করেছেন। পাতাটির বর্তমান সংস্করণের জন্য $PAGETITLE_URL দেখুন।
-
-$NEWPAGE
+$PAGEINTRO $NEWPAGE
 
 সম্পাদকের সারাংশ: $PAGESUMMARY $PAGEMINOREDIT
 
 সম্পাদকের সাথে যোগাযোগের উপায়:
-
-ই-মেইল: $PAGEEDITOR_EMAIL
+ইমেইল: $PAGEEDITOR_EMAIL
 উইকি: $PAGEEDITOR_WIKI
 
-পাতাটির পরবর্তী পরিবর্তনগুলো জন্য আর কোন বিজ্ঞপ্তি পাঠানো হবে না, যতক্ষণ না আপনি এই পাতায় ব্রাউজ করবেন।
-এছাড়া আপনি আপনার নজরতালিকায় রাখা সবগুলি পাতা জন্য বিজ্ঞপ্তি ফ্ল্যাগ শুরুর অবস্থায় ফিরিয়ে নিতে পারেন।
+পাতাটির পরবর্তী পরিবর্তনগুলো জন্য আর কোন বিজ্ঞপ্তি পাঠানো হবে না, যতক্ষণ না আপনি এই পাতায় ব্রাউজ করবেন। এছাড়া আপনি আপনার নজরতালিকায় রাখা সবগুলি পাতা জন্য বিজ্ঞপ্তি ফ্ল্যাগ শুরুর অবস্থায় ফিরিয়ে নিতে পারেন।
 
-
-                        {{SITENAME}} বিজ্ঞপ্তি ব্যবস্থা
+{{SITENAME}} নোটিফিকেশন
 
 --
+ইমেইল নোটিফিকেশন সেটিং পরিবর্তনের জন্য দেখুন
+{{canonicalurl:{{#special:Preferences}}}}
 
-à¦\86পনার à¦¨à¦\9cরতালিà¦\95া à¦¸à§\87à¦\9fিà¦\82স à¦ªà¦°à¦¿à¦¬à¦°à§\8dতন à¦\95রতà§\87 à¦\9aাà¦\87লà§\87 à¦\8fà¦\96ানà§\87 à¦¯à¦¾à¦¨:
+à¦\86পনার à¦¨à¦\9cরতালিà¦\95া à¦¸à§\87à¦\9fিà¦\82স à¦ªà¦°à¦¿à¦¬à¦°à§\8dতন à¦\95রতà§\87 à¦\9aাà¦\87লà§\87 à¦¦à§\87à¦\96à§\81ন, 
 {{canonicalurl:{{#special:EditWatchlist}}}}
 
-
 নজরতালিকা থেকে কোন পাতা অপসারণ করতে চাইলে এখানে যান:
 $UNWATCHURL
 
-
 প্রতিক্রিয়া জানাতে ও আরও সহযোগিতার জন্য:
 {{canonicalurl:{{MediaWiki:Helppage}}}}',
+'created' => 'তৈরী হয়েছিল',
+'changed' => 'পরিবর্তিত',
 
 # Delete
 'deletepage' => 'পাতাটি মুছে ফেলা হোক',
@@ -2187,6 +2194,7 @@ $UNWATCHURL
 'prot_1movedto2' => '[[$1]]-কে [[$2]]-এ সরিয়ে নেওয়া হয়েছে',
 'protect-badnamespace-title' => 'নামস্থানটি সুরক্ষিত করা সম্ভব নয়',
 'protect-badnamespace-text' => 'এই নামস্থানের পাতাগুলো সুরক্ষিত করা সম্ভব নয়।',
+'protect-norestrictiontypes-title' => 'সুরক্ষা প্রযোজ্য নয় এমন পাতা',
 'protect-legend' => 'সুরক্ষা নিশ্চিত করুন',
 'protectcomment' => 'কারণ:',
 'protectexpiry' => 'মেয়াদোত্তীর্ণ হবে:',
@@ -2298,7 +2306,7 @@ $1',
 'blanknamespace' => '(প্রধান)',
 
 # Contributions
-'contributions' => 'ব্যবহারকারীর অবদান',
+'contributions' => '{{GENDER:$1|ব্যবহারকারীর}} অবদান',
 'contributions-title' => '$1 ব্যবহারকারীর অবদানসমূহ',
 'mycontris' => 'অবদান',
 'contribsub2' => '$1 ($2)-এর জন্য',
@@ -2813,6 +2821,10 @@ $1',
 'pageinfo-contentpage' => 'তথ্য পাতা হিসাবে বিবেচিত হয়েছে',
 'pageinfo-contentpage-yes' => 'হ্যাঁ',
 'pageinfo-protect-cascading-yes' => 'হ্যাঁ',
+'pageinfo-category-info' => 'বিষয়শ্রেণী তথ্য',
+'pageinfo-category-pages' => 'পাতার সংখ্যা',
+'pageinfo-category-subcats' => 'উপবিষয়শ্রেণীর সংখ্যা',
+'pageinfo-category-files' => 'ফাইলের সংখ্যা',
 
 # Patrolling
 'markaspatrolleddiff' => 'পরীক্ষিত বলে চিহ্নিত করুন',
@@ -2856,6 +2868,7 @@ $1',
 'file-nohires' => 'এর চেয়ে বেশি রেজোলিউশন লভ্য নয়।',
 'svg-long-desc' => 'SVG ফাইল, সাধারণত $1 × $2 pixels, ফাইলের আকার: $3',
 'svg-long-desc-animated' => 'এনিমেটেড SVG ফাইল, সাধারণত $1 × $2 pixels, ফাইলের আকার: $3',
+'svg-long-error' => 'অবৈধ SVG ফাইল: $1',
 'show-big-image' => 'পূর্ণ রেজোলিউশন',
 'show-big-image-preview' => 'এই প্রিভিউ-এর আকার: $1।',
 'show-big-image-other' => 'অন্যান্য {{PLURAL:$2|আকার|আকারসমূহ}}: $1।',
@@ -2885,7 +2898,10 @@ $1',
 'minutes' => '{{PLURAL:$1|$1 মিনিট|$1 মিনিট}}',
 'hours' => '{{PLURAL:$1|$1 ঘণ্টা|$1 ঘণ্টা}}',
 'days' => '{{PLURAL:$1|$1 দিন|$1 দিন}}',
+'months' => '{{PLURAL:$1|$1 মাস}}',
+'years' => '{{PLURAL:$1|$1 বছর}}',
 'ago' => '$1 আগে',
+'just-now' => 'এখনই',
 
 # Bad image list
 'bad_image_list' => 'ফরম্যাটটি এরকম:
@@ -3589,11 +3605,13 @@ $4-এ নিশ্চিতকরণ কোডটি মেয়াদোত
 'logentry-move-move_redir-noredirect' => '$1 ব্যবহারকারী $3 পাতাটিকে $4 শিরোনামে পুনর্নির্দেশনার ওপর দিয়ে কোনো পুনর্নির্দেশনা ছাড়াই স্থানান্তর করেছেন',
 'logentry-patrol-patrol' => '$1 ব্যবহারকারী $3 পাতার $4 নম্বর সংস্করণ পরীক্ষিত বলে চিহ্নিত করেছেন',
 'logentry-patrol-patrol-auto' => '$1 ব্যবহারকারী স্বয়ংক্রিয়ভাবে $3 পাতার $4 নম্বর সংস্করণ পরীক্ষিত বলে চিহ্নিত করেছেন',
-'logentry-newusers-newusers' => '$1 à¦\8fà¦\95à¦\9fি à¦\85à§\8dযাà¦\95াà¦\89নà§\8dà¦\9f à¦¤à§\88রি à¦\95রà§\87à¦\9bà§\87ন',
-'logentry-newusers-create' => '$1 à¦\8fà¦\95à¦\9fি à¦\85à§\8dযাà¦\95াà¦\89নà§\8dà¦\9f à¦¤à§\88রি à¦\95রà§\87à¦\9bà§\87ন',
-'logentry-newusers-create2' => '$1 ব্যবহারকারী $3 নামে একটি অ্যাকাউন্ট তৈরি করেছেন',
+'logentry-newusers-newusers' => '$1 à¦\85à§\8dযাà¦\95াà¦\89নà§\8dà¦\9fà¦\9fি à¦¤à§\88রি à¦\95রা à¦¹à¦¯à¦¼à§\87à¦\9bà§\87',
+'logentry-newusers-create' => '$1 à¦\85à§\8dযাà¦\95াà¦\89নà§\8dà¦\9fà¦\9fি à¦¤à§\88রà§\80 à¦\95রা à¦¹à¦¯à¦¼à§\87à¦\9bà§\87',
+'logentry-newusers-create2' => '$1 ব্যবহারকারী $3 নামের অ্যাকাউন্টটি তৈরী করেছেন',
 'logentry-newusers-autocreate' => '$1 অ্যাকাউন্টটি স্বয়ংক্রিয়ভাবে তৈরি হয়েছে',
-'newuserlog-byemail' => 'শব্দচাবি ইমেইলের মাধ্যমে পাঠানো হয়েছে',
+'logentry-rights-rights' => '$1 ব্যবহারকারী, $3 এর দলগত সদস্যপদ $4 থেকে $5 এ পরিবর্তন করেছেন',
+'logentry-rights-autopromote' => '$1 সয়ংক্রিয়ভাবে $4 থেকে $5 এ উন্নীত হয়েছে',
+'rightsnone' => '(কিছু নাই)',
 
 # Feedback
 'feedback-subject' => 'বিষয়:',
index cdd68b8..21f2d27 100644 (file)
@@ -531,7 +531,6 @@ $messages = array(
 
 # User rights log
 'rightslog' => 'སྤྱོད་མིའི་ཐོབ་ཐང་།',
-'rightsnone' => '(སྟོང་པ།)',
 
 # Associated actions - in the sentence "You do not have permission to X"
 'action-read' => 'ཤོག་ངོས་འདི་ཀློག་པ།',
@@ -701,6 +700,8 @@ $messages = array(
 'unwatching' => 'ལྟ་ཐོ་ལས་འདོར་བཞིན་པ་་་',
 
 'enotif_reset' => 'ཤོག་ངོས་ཚང་མ་བལྟས་ཟིན་དུ་རྟགས་རྒྱོབ།',
+'created' => 'བཟོས་ཟིན།',
+'changed' => 'བསྒྱུར་ཟིན།',
 
 # Delete
 'deletepage' => 'ཤོག་ངོས་འདོར་བ།',
@@ -877,4 +878,7 @@ $messages = array(
 # Special:SpecialPages
 'specialpages' => 'དམིགས་གསལ་ཤོག་ངོས།',
 
+# New logging system
+'rightsnone' => '(སྟོང་པ།)',
+
 );
index 0cee18a..d345834 100644 (file)
@@ -693,7 +693,6 @@ $2',
 'template-protected' => '(লুকরিসি)',
 'template-semiprotected' => '(আধা-কাচা লুকরিসি)',
 'hiddencategories' => 'এ পাতা এহান যে {{PLURAL:$1|১ নাফঙিসে বিষয়থাকর|$1 নাফঙিসে বিষয়থাকহানির}} সদস্য:',
-'nocreatetitle' => 'পাতা হঙকরানি নিয়ন্ত্রণ করানি অসে',
 'nocreatetext' => '{{SITENAME}}-এরে নুৱা পাতা এহানর পতানিহানাত থিতপা আসে।
 তি আলথকে গিয়া আসে হের পাতা সিলকরানি পারর, নাইলে [[Special:UserLogin|অ্যাকাউন্টহানাত হমানি বারো অ্যাকাউন্ট খুলে পারর]]।',
 'nocreate-loggedin' => 'তরতা নুৱা পাতা হঙকরানির য়্যাথাং নেই।',
@@ -964,9 +963,11 @@ $2',
 
 'grouppage-sysop' => '{{ns:project}}:প্রশাসকগি',
 
+# Special:Log/newusers
+'newuserlogpage' => 'আতাকুরা হঙসে লগহানি',
+
 # User rights log
 'rightslog' => 'আতাকুরার অধিকারর লগ',
-'rightsnone' => '(নেই)',
 
 # Associated actions - in the sentence "You do not have permission to X"
 'action-read' => 'পাতা এহান পাকর',
@@ -1232,9 +1233,6 @@ Also see [[Special:WantedCategories|wanted categories]].',
 # Special:ActiveUsers
 'activeusers-noresult' => 'আতাকুরা নাপেইলাং।',
 
-# Special:Log/newusers
-'newuserlogpage' => 'আতাকুরা হঙসে লগহানি',
-
 # Special:ListGroupRights
 'listgrouprights-key' => '* <span class="listgrouprights-granted">য়্যাথাং পাসে অধিকার</span>
 * <span class="listgrouprights-revoked">থেপকরানি অসে অধিকার</span>',
@@ -1277,6 +1275,8 @@ Also see [[Special:WantedCategories|wanted categories]].',
 'watching' => 'চা...',
 'unwatching' => 'নাউচা...',
 
+'changed' => 'পতেসে',
+
 # Delete
 'deletepage' => 'পাতাহান পুস',
 'confirm' => 'লেপকরানি',
@@ -1728,7 +1728,7 @@ Also see [[Special:WantedCategories|wanted categories]].',
 # New logging system
 'revdelete-restricted' => 'ডান্ডিকরেকুরাগরাঙ সীমাবদ্ধতাহানি ফলা',
 'revdelete-unrestricted' => 'ডান্ডিকরেকুরাগরাঙ সীমাবদ্ধতাহানি নেইকর',
-'newuserlog-byemail' => 'ই-মেইলর মা পেঠাদিয়াসি পাসৱার্ডগ',
+'rightsnone' => '(নেই)',
 
 # Search suggestions
 'searchsuggest-search' => 'বিসারা',
index e8dc4fe..f81921a 100644 (file)
@@ -553,7 +553,7 @@ Goulenn : $2",
 'viewsource-title' => 'Gwelet an tarzh evit $1',
 'actionthrottled' => 'Ober daleet',
 'actionthrottledtext' => "A-benn dizarbenn ar strob, n'haller ket implijout an ober-mañ re alies en ur frapad amzer lakaet, hag aet oc'h dreist ar muzul. Klaskit en-dro a-benn un nebeut munutennoù.",
-'protectedpagetext' => "Prennet eo bet ar bajenn-mañ. N'haller ket kemmañ anezhi ken.",
+'protectedpagetext' => 'Prennet eo bet ar bajenn-mañ kuit na vefe skrivet pe cheñchet un dra bennak enni',
 'viewsourcetext' => 'Gallout a rit gwelet hag eilañ danvez ar bajenn-mañ',
 'viewyourtext' => "Gallout a rit gwelet hag eilañ mammenn ho '''kemmoù''' d'ar bajenn-mañ :",
 'protectedinterface' => 'Testenn ar bajenn-mañ a dalvez evit etrefas ar meziant er wiki-mañ. Setu perak eo bet gwarezet ar bajenn.',
@@ -608,7 +608,7 @@ Notit mat e c'hallo pajennoù zo kenderc'hel da vezañ diskwelet evel pa vefec'h
 'gotaccount' => "Ur gont zo ganeoc'h dija ? '''$1'''.",
 'gotaccountlink' => 'Kevreañ',
 'userlogin-resetlink' => "Ha disoñjet eo bet ho titouroù kevreañ ganeoc'h ?",
-'createaccountmail' => 'dre bostel',
+'createaccountmail' => 'Dre bostel',
 'createaccountreason' => 'Abeg :',
 'badretype' => 'Ne glot ket ar gerioù-tremen an eil gant egile.',
 'userexists' => "Implijet eo an anv implijer lakaet ganeoc'h dija.
@@ -896,10 +896,11 @@ Heñveldra, prometiñ a rit kemer perzh dre zegas skridoù savet ganeoc'h hepken
 '''NA IMPLIJIT KET LABOURIOÙ GANT GWIRIOÙ AOZER (COPYRIGHT) HEP AOTRE D'OBER KEMENT-SE!'''",
 'copyrightwarning2' => "Notit mat e c'hall kement degasadenn graet ganeoc'h war {{SITENAME}} bezañ kemmet, adaozet pe lamet kuit gant an implijerien all. Mar ne fell ket deoc'h e vije kemmet-digemmet ar pezh hoc'h eus skrivet na gemerit ket perzh er raktres-mañ.<br /> Gouestlañ a rit ivez eo bet savet ar boued spered ganeoc'h pe eilet diwar ur vammenn frank a wirioù pe en domani foran (gwelet $1 evit gouzout hiroc'h). '''NA IMPLIJIT KET LABOURIOÙ GANT GWIRIOÙ AOZER HEP AOTRE D'OBER KEMENT-SE!'''",
 'longpageerror' => "'''FAZI : {{PLURAL:$1|Ur c'hilookted|$1 kilookted}} hir eo an destenn lakaet ganeoc'h, ar pezh zo hiroc'h eget {{PLURAL:$2|ur c'hilookted|$2 kilookted}}, ar vent vrasañ aotreet. N'haller ket enrollañ.'''",
-'readonlywarning' => "'''KEMENN DIWALL : stanket eo an diaz titouroù a-benn bezañ trezalc'het; setu ne viot ket evit enrollañ ho kemmoù diouzhtu-diouzhtu eta.
-Gallout a rit eilañ-pegañ an destenn en ur restr skrid all hag enrollañ anezhi a-benn diwezhatoc'hik.'''
+'readonlywarning' => "'''KEMENN DIWALL : prennet eo bet an diaz titouroù evit bezañ trezalc'het; setu ne viot ket evit enrollañ ho kemmoù diouzhtu-diouzhtu eta.'''
 
-Setu an displegadenn lakaet gant ar merour en deus stanket an traoù : $1",
+Gallout a rit eilañ ha pegañ ho testenn en ur restr skrid all hag enrollañ anezhi a-benn diwezhatoc'hik.'''
+
+Setu an displegadenn lakaet gant ar merour eo bet prennet an traoù gantañ : $1",
 'protectedpagewarning' => "'''KEMENN DIWALL: Gwarezet eo bet ar bajenn-mañ. N'eus nemet an implijerien ganto ar statud merour a c'hall kemmañ anezhi.'''
 Enmont diwezhañ ar marilh a ziskouezer amañ a-is evel dave :",
 'semiprotectedpagewarning' => "''Notenn :''' Gwarezet eo ar bajenn-mañ; n'eus nemet an implijerien bet krouet ur gont ganto a kemmañ anezhi. Kasadenn ziwezhañ ar marilh zo diskouezet amañ a-is evel dave :",
@@ -912,7 +913,6 @@ Enmont diwezhañ ar marilh a ziskouezer amañ a-is evel dave :",
 'template-semiprotected' => '(damwarezet)',
 'hiddencategories' => "{{PLURAL:$1|1 rummad kuzhet|$1 rummad kuzhet}} m'emañ rollet ar bajenn-mañ :",
 'edittools' => '<!-- Diskouezet e vo an destenn kinniget amañ dindan ar sternioù kemmañ ha kargañ. -->',
-'nocreatetitle' => "Strishaet eo bet ar c'hrouiñ pajennoù",
 'nocreatetext' => 'Strishaet eo bet an tu da grouiñ pajennoù nevez war {{SITENAME}}.
 Gallout a rit mont war-gil ha lakaat kemmañ ur bajenn zo anezhi dija, pe [[Special:UserLogin|en em enrollañ ha krouiñ ur gont]].',
 'nocreate-loggedin' => "N'oc'h ket aotreet da grouiñ pajennoù nevez.",
@@ -1306,8 +1306,8 @@ Setu aze un dalvoudenn ganet dre zegouezh hag a c'hallfec'h implijout : $1",
 'prefs-emailconfirm-label' => 'Kadarnaat ar postel :',
 'prefs-textboxsize' => 'Ment ar prenestr skridaozañ',
 'youremail' => 'Postel :',
-'username' => 'Anv implijer :',
-'uid' => 'Niv. identelezh an implijer :',
+'username' => '{{GENDER:$1|Anv implijer|Anv implijerez}}:',
+'uid' => '{{GENDER:$1|Niv. identelezh an implijer|Niv. identelezh an implijerez}}:',
 'prefs-memberingroups' => 'Ezel eus {{PLURAL:$1|ar strollad|ar strolladoù}}:',
 'prefs-registration' => 'Deiziad enskrivañ :',
 'yourrealname' => 'Anv gwir*',
@@ -1458,12 +1458,13 @@ Ma skrivit anezhañ e vo implijet evit lakaat war wel ar pezh a vo bet degaset g
 'right-sendemail' => "Kas ur postel d'an implijerien all",
 'right-passwordreset' => 'Gwelet ar posteloù assevel gerioù-tremen',
 
+# Special:Log/newusers
+'newuserlogpage' => "Marilh ar c'hontoù krouet",
+'newuserlogpagetext' => "Marilh krouiñ ar c'hontoù implijer.",
+
 # User rights log
 'rightslog' => 'Marilh statud an implijerien',
 'rightslogtext' => "Setu marilh ar c'hemmoù statud bet c'hoarvezet d'an implijerien.",
-'rightslogentry' => '{{Gender:.|en|he}} deus cheñchet gwirioù an {{Gender:.|implijer|implijerez}}  $1 a oa $2 hag a zo bet lakaet da $3',
-'rightslogentry-autopromote' => 'zo bet anvet ent emgefre a $2 da $3',
-'rightsnone' => '(netra)',
 
 # Associated actions - in the sentence "You do not have permission to X"
 'action-read' => 'lenn ar bajenn-mañ',
@@ -2108,10 +2109,6 @@ Protokoloù skoret : <code>$1</code> (defaults to http:// na lakait hini ebet eu
 'activeusers-hidesysops' => 'Kuzhat ar verourien',
 'activeusers-noresult' => "N'eus bet kavet implijer ebet.",
 
-# Special:Log/newusers
-'newuserlogpage' => "Marilh ar c'hontoù krouet",
-'newuserlogpagetext' => "Marilh krouiñ ar c'hontoù implijer.",
-
 # Special:ListGroupRights
 'listgrouprights' => 'Gwirioù ar strolladoù implijer',
 'listgrouprights-summary' => 'Da-heul ez eus ur roll eus ar strolladoù implijerien termenet war ar wiki-mañ, gant ar gwirioù moned stag outo.
@@ -2244,6 +2241,8 @@ $UNWATCHURL
 
 Evezhiadennoù ha skoazell pelloc\'h :
 {{canonicalurl:{{MediaWiki:Helppage}}}}',
+'created' => 'Krouet',
+'changed' => 'kemmet',
 
 # Delete
 'deletepage' => 'Diverkañ ur bajenn',
@@ -2330,7 +2329,7 @@ Setu an doare a-vremañ evit ar bajenn-mañ '''$1''':",
 'protect-default' => 'Aotren an holl implijerien',
 'protect-fallback' => 'Ezhomm zo aotre "$1"',
 'protect-level-autoconfirmed' => "Stankañ an implijerien nevez hag ar re n'int ket enrollet",
-'protect-level-sysop' => 'Merourien hepken',
+'protect-level-sysop' => 'Aotren ar verourien hepken',
 'protect-summary-cascade' => 'Gwareziñ dre skalierad',
 'protect-expiring' => "a zeu d'e dermen d'an $1",
 'protect-expiring-local' => "a ya d'e dermen d'an $1",
@@ -3037,6 +3036,7 @@ Ma vez erounezet ganeoc'h e c'hallje tagañ ho reizhiad.",
 'file-nohires' => "N'haller ket gwellaat ar pizhder.",
 'svg-long-desc' => 'restr SVG file, pizhder $1 × $2 piksel, ment ar restr : $3',
 'svg-long-desc-animated' => 'Restr SVG bev, ment $1 × $2 piksel, ment ar restr: $3',
+'svg-long-error' => 'Restr SVG direizh : $1',
 'show-big-image' => 'Pizhder leun',
 'show-big-image-preview' => 'Ment ar rakweled-mañ : $1.',
 'show-big-image-other' => '{{PLURAL:$2|pizhder all|pizhderioù all}} : $1.',
@@ -3830,11 +3830,11 @@ Diskouezet eo ar skeudennoù gant ur pizhder uhel, erounit a ra ar restroù all
 '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' => 'Ar gont implijer $1 oa bet krouet',
-'logentry-newusers-create' => 'Ar gont implijer $1 oa bet krouet',
-'logentry-newusers-create2' => 'Ar gont implijer $3 oa bet krouet gant $1',
+'logentry-newusers-newusers' => '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-autocreate' => 'Krouet eo bet kont $1 ent emgefre',
-'newuserlog-byemail' => 'ger-tremen kaset dre bostel',
+'rightsnone' => '(netra)',
 
 # Feedback
 'feedback-bugornote' => "Ma'z oc'h prest da zeskrivañ ur gudenn deknikel dre ar munud e c'hallit [\$1 kemenn un draen].
@@ -3908,6 +3908,4 @@ A-hend-all e c'hallit ober gant ar furmskrid eeunaet dindan. Ouzhpennet e vo hoc
 'duration-centuries' => "$1 {{PLURAL:$1|c'hantved|kantved}}",
 'duration-millennia' => '$1 {{PLURAL:$1|milvloaz|milvoaz}}',
 
-# Unknown messages
-'svg-long-error' => 'Restr SVG direizh : $1',
 );
index d371f4a..ac18a6e 100644 (file)
@@ -396,7 +396,7 @@ $messages = array(
 'category-empty' => "''Ova kategorija trenutno ne sadrži članke ni medije.''",
 'hidden-categories' => '{{PLURAL:$1|Sakrivena kategorija|Sakrivene kategorije}}',
 'hidden-category-category' => 'Sakrivene kategorije',
-'category-subcat-count' => '{{PLURAL:$2|Ova kategorija ima sljedeću $1 podkategoriju.|Ova kategorija ima {{PLURAL:$1|sljedeće podkategorije|sljedećih $1 podkategorija}}, od $2 ukupno.}}',
+'category-subcat-count' => '{{PLURAL:$2|Ova kategorija ima sljedeću podkategoriju.|Ova kategorija ima {{PLURAL:$1|sljedeće podkategorije|sljedećih $1 podkategorija}}, od $2 ukupno.}}',
 'category-subcat-count-limited' => 'Ova kategorija sadrži {{PLURAL:$1|slijedeću $1 podkategoriju|slijedeće $1 podkategorije|slijedećih $1 podkategorija}}.',
 'category-article-count' => '{{PLURAL:$2|U ovoj kategoriji se nalazi $1 članak.|{{PLURAL:$1|Prikazan je $1 članak|Prikazana su $1 članka|Prikazano je $1 članaka}} od ukupno $2 u ovoj kategoriji.}}',
 'category-article-count-limited' => '{{PLURAL:$1|Slijedeća $1 stranica je|Slijedeće $1 stranice su|Slijedećih $1 stranica je}} u ovoj kategoriji.',
@@ -1013,8 +1013,8 @@ Također nam garantujete da ste ovo Vi napisali, ili da ste ga kopirali iz javne
 '''NE ŠALJITE AUTORSKIM PRAVOM ZAŠTIĆENE TEKSTOVE BEZ DOZVOLE!'''",
 'longpageerror' => "'''Greška: Tekst, koji ste poslali, je dug {{PLURAL:$1|jedan kilobajt|$1 kilobajta}}, što je veće od maksimuma, koji iznosi {{PLURAL:$2|jedan kilobajt|$2 kilobajta}}.'''
 Stranica ne može biti sačuvana.",
-'readonlywarning' => "'''PAŽNJA: Baza je zaključana zbog održavanja, tako da nećete moći da sačuvate svoje izmjene za sada.
-Možda želite da kopirate i nalijepite tekst u tekst editor i sačuvate ga za kasnije.'''
+'readonlywarning' => "'''PAŽNJA: Baza je zaključana zbog održavanja, tako da nećete moći da sačuvate svoje izmjene za sada.'''
+Možda želite da kopirate i nalijepite tekst u tekst editor i sačuvate ga za kasnije.
 
 Administrator koji je zaključao bazu je naveo slijedeće objašnjenje: $1",
 'protectedpagewarning' => "'''PAŽNJA: Ova stranica je zaključana tako da samo korisnici sa administratorskim privilegijama mogu da je mijenjaju.'''
@@ -1031,7 +1031,6 @@ Posljednja stavka zapisnika je prikazana ispod kao referenca:",
 'template-semiprotected' => '(polu-zaštićeno)',
 'hiddencategories' => 'Ova stranica pripada u {{PLURAL:$1|$1 skrivenu kategoriju|$1 skrivene kategorije|$1 skrivenih kategorija}}:',
 'edittools' => '<!-- Ovaj tekst će biti prikazan ispod formi za uređivanje i postavljanje. -->',
-'nocreatetitle' => 'Pravljenje stranica ograničeno',
 'nocreatetext' => 'Na {{SITENAME}} je zabranjeno postavljanje novih stranica.
 Možete se vratiti i uređivati već postojeće stranice ili se [[Special:UserLogin|prijaviti ili otvoriti korisnički račun]].',
 'nocreate-loggedin' => 'Nemate dopuštenje da kreirate nove stranice.',
@@ -1217,7 +1216,9 @@ Molimo provjerite zapise.',
 'revdelete-only-restricted' => 'Greška pri sakrivanju stavke od dana $2, $1: ne možete ukloniti stavke od pregledavanja administratora bez da odaberete neku od drugih opcija za uklanjanje.',
 'revdelete-reason-dropdown' => '*Uobičajeni razlozi brisanja
 ** Kršenje autorskih prava
-** Neadekvatni lični podaci',
+** Neprikladan komentar ili lični podac
+** Neprikladno korisničko ime
+** Uvredljivi podaci',
 'revdelete-otherreason' => 'Ostali/dodatni razlog:',
 'revdelete-reasonotherlist' => 'Ostali razlozi',
 'revdelete-edit-reasonlist' => 'Uredi razloge brisanja',
@@ -1420,8 +1421,8 @@ Ovo se ne može vratiti unazad.',
 'prefs-emailconfirm-label' => 'E-mail potvrda:',
 'prefs-textboxsize' => 'Veličina prozora za uređivanje',
 'youremail' => 'E-mail:',
-'username' => 'Korisničko ime:',
-'uid' => 'Korisnički ID:',
+'username' => '{{GENDER:$1|Korisničko}} ime:',
+'uid' => '{{GENDER:$1|Korisnički}} ID:',
 'prefs-memberingroups' => 'Član {{PLURAL:$1|grupe|grupa}}:',
 'prefs-registration' => 'Vrijeme registracije:',
 'yourrealname' => 'Vaše pravo ime:',
@@ -1571,13 +1572,13 @@ Ako izaberete da date ime, biće korišteno za pripisivanje za vaš rad.',
 'right-sendemail' => 'Slanje e-maila drugim korisnicima',
 'right-passwordreset' => 'Pogledaj e-mailove za obnavljanje šifre',
 
+# Special:Log/newusers
+'newuserlogpage' => 'Zapis novih korisnika',
+'newuserlogpagetext' => 'Ovo je zapis o registraciji novih korisnika.',
+
 # User rights log
 'rightslog' => 'Zapisnik korisničkih prava',
 'rightslogtext' => 'Ovo je zapis promjena korisničkih prava.',
-'rightslogentry' => 'promjena članstva u grupi za $1 sa $2 na $3',
-'rightslogentry-autopromote' => 'je automatski unaprijeđen iz $2 u $3',
-'logentry-rights-rights' => '$1 {{GENDER:$1|je promijenio|je promijenila|je promijenio}} članstvo grupe za $3 iz $4 u $5',
-'rightsnone' => '(nema)',
 
 # Associated actions - in the sentence "You do not have permission to X"
 'action-read' => 'čitate ovu stranicu',
@@ -1821,6 +1822,8 @@ Ako se problem ne riješi, kontaktirajte [[Special:ListUsers/sysop|administrator
 'backend-fail-delete' => 'Ne može se izbrisati datoteka $1.',
 'backend-fail-alreadyexists' => 'Datoteka $1 već postoji.',
 'backend-fail-store' => 'Ne može se spremiti datoteka $1 na $2.',
+'backend-fail-copy' => 'Nije uspjelo kopiranje datoteke "$1" u "$2".',
+'backend-fail-move' => 'Nije uspjelo premještanje datoteke "$1" u "$2".',
 'backend-fail-read' => 'Ne mogu čitati datoteku $1.',
 'backend-fail-create' => 'Ne mogu napraviti datoteku $1.',
 
@@ -2020,9 +2023,9 @@ Prije brisanja provjerite da li druge stranice vode na te šablone.',
 
 'disambiguations' => 'Stranice koje vode na čvor članke',
 'disambiguationspage' => '{{ns:template}}:Čvor',
-'disambiguations-text' => "Slijedeće stranice su povezane sa '''čvor stranicom'''.
-Po pravilu, one se trebaju povezati sa konkretnim člankom.<br />
-Stranica se smatra čvorom, ukoliko koristi šablon koji je povezan sa spiskom [[MediaWiki:Disambiguationspage|čvor stranica]]",
+'disambiguations-text' => "Slijedeće stranice sadrže najmanje jedan link na '''čvor stranicom'''.
+Umjesto toga, one se trebaju povezati sa konkretnim konkretnim stranicom.<br />
+Stranica se smatra čvorom, ukoliko koristi šablon koji je povezan sa spiskom [[MediaWiki:Disambiguationspage]]",
 
 'doubleredirects' => 'Dvostruka preusmjerenja',
 'doubleredirectstext' => 'Ova stranica prikazuje stranice koje preusmjeravaju na druga preusmjerenja.
@@ -2190,10 +2193,6 @@ Podržani protokoli: <code>$1</code> (ne dodavajte bilo koji od ovih u vašu pre
 'activeusers-hidesysops' => 'Sakrij administratore',
 'activeusers-noresult' => 'Nije pronađen korisnik.',
 
-# Special:Log/newusers
-'newuserlogpage' => 'Zapis novih korisnika',
-'newuserlogpagetext' => 'Ovo je zapis o registraciji novih korisnika.',
-
 # Special:ListGroupRights
 'listgrouprights' => 'Prava korisničkih grupa',
 'listgrouprights-summary' => 'Slijedi spisak korisničkih grupa na ovoj wiki, s njihovim pravima pristupa.
@@ -2222,7 +2221,7 @@ da biste slali e-poštu drugim korisnicima.',
 'emailuser-title-target' => 'Pošalji e-poruku {{GENDER:$1|korisniku|korisnici|korisniku}}',
 'emailuser-title-notarget' => 'Pošalji e-mail korisniku',
 'emailpage' => 'Pošalji e-mail korisniku',
-'emailpagetext' => 'Možete korisiti formu ispod za slanje e-mail poruka ovom korisniku.
+'emailpagetext' => 'Možete korisiti formu ispod za slanje e-mail poruka {{GENDER:$1|ovom korisniku|ovoj korisnici|ovom korisniku}}.
 E-mail adresa koju ste unijeli u [[Special:Preferences|Vašim korisničkim postavkama]] će biti prikazana kao adresa pošiljaoca, tako da će primaoc poruke moći da Vam odgovori.',
 'usermailererror' => 'Objekat pošte je vratio grešku:',
 'defemailsubject' => '{{SITENAME}} e-pošta od {{GENDER:$1|korisnika|korisnice|korisnika}} $1',
@@ -2253,7 +2252,7 @@ E-mail adresa koju ste unijeli u [[Special:Preferences|Vašim korisničkim posta
 'usermessage-editor' => 'Sistem za poruke',
 
 # Watchlist
-'watchlist' => 'Moji praćeni članci',
+'watchlist' => 'Praćeni članci',
 'mywatchlist' => 'Praćeni članci',
 'watchlistfor2' => 'Za $1 $2',
 'nowatchlist' => 'Nemate ništa na svom spisku praćenih članaka.',
@@ -2261,9 +2260,8 @@ E-mail adresa koju ste unijeli u [[Special:Preferences|Vašim korisničkim posta
 'watchnologin' => 'Niste prijavljeni',
 'watchnologintext' => 'Morate biti [[Special:UserLogin|prijavljeni]] da bi ste mijenjali spisak praćenih članaka.',
 'addwatch' => 'Dodaj na spisak praćenja',
-'addedwatchtext' => 'Stranica "[[:$1]]" je dodata vašem [[Special:Watchlist|spisku praćenih članaka]]. Buduće promjene ove stranice i njoj pridružene stranice za razgovor će biti navedene ovde, i stranica će biti <b>podebljana</b> u [[Special:RecentChanges|spisku]] nedavnih izmjena da bi se lakše uočila.
-
-Ako kasnije želite da uklonite stranicu sa vašeg spiska praćenih članaka, kliknite na "prekini praćenje" na paleti.',
+'addedwatchtext' => 'Stranica "[[:$1]]" je dodata vašem [[Special:Watchlist|spisku praćenih članaka]]. 
+Buduće promjene ove stranice i njoj pridružene stranice za razgovor će biti navedene ovde.',
 'removewatch' => 'Ukloni sa spiska praćenja',
 'removedwatchtext' => 'Stranica "[[:$1]]" je uklonjena iz [[Special:Watchlist|vašeg spiska praćenih članaka]].',
 'watch' => 'Prati članak',
@@ -2325,6 +2323,8 @@ $UNWATCHURL
 
 Povratne informacije i daljnja pomoć:
 {{canonicalurl:{{MediaWiki:Helppage}}}}',
+'created' => 'napravljena',
+'changed' => 'promijenjena',
 
 # Delete
 'deletepage' => 'Obrišite stranicu',
@@ -2475,8 +2475,8 @@ Možda ste unijeli pogrešan link, ili je revizija vraćena ili uklonjena iz arh
 'undeletedrevisions' => '{{PLURAL:$1|$1 revizija vraćena|$1 revizije vraćene|$1 revizija vraćeno}}',
 'undeletedrevisions-files' => '{{PLURAL:$1|1 revizija|$1 revizije|$1 revizija}} i {{PLURAL:$2|1 datoteka|$2 datoteke|$2 datoteka}} vraćeno',
 'undeletedfiles' => '{{PLURAL:$1|1 datoteka vraćena|$1 datoteke vraćene|$1 datoteka vraćeno}}',
-'cannotundelete' => 'Vraćanje nije uspjelo;
-neko drugi je već vratio ovu stranicu.',
+'cannotundelete' => 'Vraćanje nije uspjelo:
+$1',
 'undeletedpage' => "'''$1 je vraćena'''
 
 Provjerite [[Special:Log/delete|zapis brisanja]] za zapise najskorijih brisanja i vraćanja.",
@@ -2912,6 +2912,7 @@ Nedostaje privremeni folder.',
 'javascripttest-title' => 'Pokretanje $1 testova',
 'javascripttest-pagetext-noframework' => 'Ova stranica je određena za pokretanje JavaScript testova.',
 'javascripttest-pagetext-unknownframework' => 'Nepoznat radni okvir testiranja"$1".',
+'javascripttest-pagetext-frameworks' => 'Molimo Vas izaberite jednu od sljedećih testnih okvira: $1',
 'javascripttest-pagetext-skins' => 'Izaberite s kojom temom želite da pokrenete probu:',
 'javascripttest-qunit-intro' => 'Pogledajte [$1 dokumentaciju za testiranje] na mediawiki.org.',
 
@@ -3032,9 +3033,11 @@ Ovo je vjerovatno izazvao vezom ka vanjskoj nepoželjnoj stranici.',
 'spambot_username' => 'MediaWiki čišćenje spama',
 'spam_reverting' => 'Vraćanje na zadnju verziju koja ne sadrži linkove ka $1',
 'spam_blanking' => 'Sve revizije koje sadrže linkove ka $1, očisti',
+'spam_deleting' => 'Sve revizije koje sadrže linkove na $1, brišem',
 
 # Info page
 'pageinfo-title' => 'Informacije za "$1"',
+'pageinfo-not-current' => 'Nažalost, nemoguće je dati ove informacije za starije revizije.',
 'pageinfo-header-basic' => 'Osnovne informacije',
 'pageinfo-header-edits' => 'Historija izmjena',
 'pageinfo-header-restrictions' => 'Zaštita stranice',
@@ -3045,19 +3048,25 @@ Ovo je vjerovatno izazvao vezom ka vanjskoj nepoželjnoj stranici.',
 'pageinfo-language' => 'Jezik sadržaja stranice',
 'pageinfo-views' => 'Broj pogleda',
 'pageinfo-watchers' => 'Broj onih koji pregledaju',
+'pageinfo-redirects-name' => 'Preusmjeravanja na ovu stranicu',
 'pageinfo-subpages-name' => 'Podstranice ove stranice',
 'pageinfo-firstuser' => 'Korisnik koji je napravio stranicu',
 'pageinfo-firsttime' => 'Datum stvaranja stranice',
 'pageinfo-lastuser' => 'Posljednji urednik stranice',
+'pageinfo-lasttime' => 'Datum posljednje izmjene',
 'pageinfo-edits' => 'Ukupan broj izmjena',
 'pageinfo-authors' => 'Ukupan broj različitih autora',
 'pageinfo-recent-edits' => 'Broj nedavnih izmjena (u poslednjih $1)',
+'pageinfo-magic-words' => '{{PLURAL:$1|Čarobna riječ|Čarobne riječi}} ($1)',
+'pageinfo-hidden-categories' => '{{PLURAL:$1|Sakrivena kategorija|Sakrivene kategorije}} ($1)',
+'pageinfo-templates' => '{{PLURAL:$1|Uključeni šablon|Uključeni šabloni}} ($1)',
 'pageinfo-toolboxlink' => 'Informacije o stranici',
 'pageinfo-redirectsto' => 'Preusmjerava na',
 'pageinfo-redirectsto-info' => 'Informacije',
 'pageinfo-contentpage' => 'Broji se kao stranica sa sadržajem',
 'pageinfo-contentpage-yes' => 'Da',
 'pageinfo-protect-cascading-yes' => 'Da',
+'pageinfo-category-pages' => 'Broj stranica',
 
 # Skin names
 'skinname-standard' => 'Klasično',
@@ -3079,6 +3088,8 @@ Ovo je vjerovatno izazvao vezom ka vanjskoj nepoželjnoj stranici.',
 'markedaspatrollederror' => 'Ne može se označiti kao patrolirano',
 'markedaspatrollederrortext' => 'Morate naglasiti reviziju koju treba označiti kao patroliranu.',
 'markedaspatrollederror-noautopatrol' => 'Nije Vam dopušteno da vlastite izmjene označavate patroliranim.',
+'markedaspatrollednotify' => 'Ova izmjena na stranici „$1“ je označena kao pregledana.',
+'markedaspatrollederrornotify' => 'Označavanje stranice pregledanom nije uspjelo.',
 
 # Patrol log
 'patrol-log-page' => 'Zapisnik patroliranja',
@@ -3137,6 +3148,8 @@ $1',
 'minutes' => '{{PLURAL:$1|$1 minuta|$1 minute|$1 minuta}}',
 'hours' => '{{PLURAL:$1|$1 sat|$1 sata|$1 sati}}',
 'days' => '{{PLURAL:$1|$1 dan|$1 dana|$1 dana}}',
+'months' => '{{PLURAL:$1|$1 mjesec|$1 mjeseci}}',
+'years' => '{{PLURAL:$1|$1 godina|$1 godine|$1 godina}}',
 'ago' => 'prije $1',
 
 # Bad image list
@@ -3841,7 +3854,7 @@ Slike su prikazane u punoj veličini, ostale vrste datoteka su prikazane direktn
 * <strong class="mw-specialpagerestricted">Zaštićene posebne stranice.</strong>',
 'specialpages-group-maintenance' => 'Izvještaji za održavanje',
 'specialpages-group-other' => 'Ostale posebne stranice',
-'specialpages-group-login' => 'Prijava / Otvaranje računa',
+'specialpages-group-login' => 'Prijava / otvaranje računa',
 'specialpages-group-changes' => 'Nedavne izmjene i evidencije',
 'specialpages-group-media' => 'Mediji i postavljanje datoteka',
 'specialpages-group-users' => 'Korisnici i korisnička prava',
@@ -3934,9 +3947,12 @@ Slike su prikazane u punoj veličini, ostale vrste datoteka su prikazane direktn
 'logentry-patrol-patrol-auto' => '$1 je automatski označio izmjenu $4 stranice $3 pregledanim',
 'logentry-newusers-newusers' => 'Korisnički račun $1 je napravljen',
 'logentry-newusers-create' => 'Korisnički račun $1 je napravljen',
-'logentry-newusers-create2' => '$1 je napravio korisnički račun $3',
+'logentry-newusers-create2' => '$3 je {{GENDER:$2|napravio|napravila}} korisnički račun $1',
 'logentry-newusers-autocreate' => 'Korisnički račun $1 je automatski napravljen',
-'newuserlog-byemail' => 'šifra je poslana putem e-maila',
+'logentry-rights-rights' => '$1 {{GENDER:$1|je promijenio|je promijenila|je promijenio}} članstvo grupe za $3 iz $4 u $5',
+'logentry-rights-rights-legacy' => '$1 je {{GENDER:$2|promijenio|promijenila|promijenio}} članstvo grupe za $3',
+'logentry-rights-autopromote' => 'Korisničkom računu $1 {{GENDER:$1|je automatski promijenjeno članstvo|su automatski promijenjena članstva}} iz $4 u $5',
+'rightsnone' => '(nema)',
 
 # Feedback
 'feedback-bugornote' => 'Ako ste spremni detaljno opisati tehnički problem molimo [$1 prijavite "bug" (grešku)].
@@ -4007,5 +4023,6 @@ Inače, možete ispuniti jednostavan obrazac ispod. Vaš komentar biti će dodan
 'duration-years' => '$1 {{PLURAL:$1|godina|godine|godina}}',
 'duration-decades' => '$1 {{PLURAL:$1|decenija|decenije|decenija}}',
 'duration-centuries' => '$1 {{PLURAL:$1|vijek|vijeka|vijekova}}',
+'duration-millennia' => '$1 {{PLURAL:$1|milenij|milenija}}',
 
 );
index f47394b..932723a 100644 (file)
@@ -752,6 +752,7 @@ Contrasenya temporal: $2",
 'changeemail-oldemail' => 'Adreça de correu electrònic actual:',
 'changeemail-newemail' => 'Nova adreça de correu electrònic:',
 'changeemail-none' => '(cap)',
+'changeemail-password' => 'La vostra contrasenya a {{SITENAME}}:',
 'changeemail-submit' => 'Canvia de correu electrònic',
 'changeemail-cancel' => 'Cancel·la',
 
@@ -764,7 +765,7 @@ Contrasenya temporal: $2",
 'link_tip' => 'Enllaç intern',
 'extlink_sample' => "http://www.example.com títol de l'enllaç",
 'extlink_tip' => 'Enllaç extern (recordeu el prefix http://)',
-'headline_sample' => "Text per a l'encapçalament",
+'headline_sample' => "Text de l'encapçalament",
 'headline_tip' => 'Encapçalat de secció de 2n nivell',
 'nowiki_sample' => 'Inseriu ací text sense format',
 'nowiki_tip' => 'Ignora el format wiki',
@@ -929,7 +930,6 @@ A continuació es mostra la darrera entrada del registre com a referència:",
 'template-semiprotected' => '(semiprotegida)',
 'hiddencategories' => 'Aquesta pàgina forma part de {{PLURAL:$1|la següent categoria oculta|les següents categories ocultes}}:',
 'edittools' => "<!-- Es mostrarà als formularis d'edició i de càrrega el text que hi haja després d'aquesta línia. -->",
-'nocreatetitle' => "S'ha limitat la creació de pàgines",
 'nocreatetext' => "El projecte {{SITENAME}} ha restringit la possibilitat de crear noves pàgines.
 Podeu modificar les planes ja existents o bé [[Special:UserLogin|entrar en un compte d'usuari]].",
 'nocreate-loggedin' => 'No teniu permisos per a crear pàgines noves.',
@@ -1476,15 +1476,13 @@ Ha de tenir com a molt {{PLURAL:$1|un caràcter|$1 caràcters}}.',
 'right-sendemail' => 'Enviar missatges de correu electrònic a altres usuaris',
 'right-passwordreset' => 'Veure les soŀlicituds de restabliment de contrasenya per correu electrònic',
 
+# Special:Log/newusers
+'newuserlogpage' => "Registre de creació de l'usuari",
+'newuserlogpagetext' => 'Aquest és un registre de creació de nous usuaris.',
+
 # User rights log
 'rightslog' => "Registre dels permisos d'usuari",
 'rightslogtext' => "Aquest és un registre de canvis dels permisos d'usuari.",
-'rightslogentry' => 'ha modificat els drets de $1 del grup $2 a $3',
-'rightslogentry-autopromote' => 'ha estat promogut automàticament de $2 a $3',
-'logentry-rights-rights' => '$1 ha canviat la pertinença de grups per $3 de $4 a $5',
-'logentry-rights-rights-legacy' => '$1 ha canviat la pertinença de grups per $3',
-'logentry-rights-autopromote' => '$1 ha estat promogut automàticament de $4 a $5',
-'rightsnone' => '(cap)',
 
 # Associated actions - in the sentence "You do not have permission to X"
 'action-read' => 'llegir aquesta pàgina',
@@ -2088,8 +2086,8 @@ Vegeu també [[Special:WantedCategories|les categories soŀlicitades]].",
 'linksearch-ns' => 'Espai de noms:',
 'linksearch-ok' => 'Cerca',
 'linksearch-text' => 'Es poden utilitzar caràcters comodí com "*.wikipedia.org".
-Necessita com a mínim un domini de primer nivell, per exemple "*.org".<br />
-Protocols admesos: <code>$1</code> (http:// per defecte si no se n\'especifica cap).',
+Es necessita com a mínim un domini de primer nivell, per exemple "*.org".<br />
+{{PLURAL:$2|Protocol admès|Protocols admesos}}: <code>$1</code> (http:// per defecte si no se n\'especifica cap).',
 'linksearch-line' => '$1 enllaçat a $2',
 'linksearch-error' => "Els caràcters comodí només poden aparèixer a l'inici de l'url.",
 
@@ -2108,10 +2106,6 @@ Protocols admesos: <code>$1</code> (http:// per defecte si no se n\'especifica c
 'activeusers-hidesysops' => 'Amaga administradors',
 'activeusers-noresult' => "No s'han trobat usuaris.",
 
-# Special:Log/newusers
-'newuserlogpage' => "Registre de creació de l'usuari",
-'newuserlogpagetext' => 'Aquest és un registre de creació de nous usuaris.',
-
 # Special:ListGroupRights
 'listgrouprights' => "Drets dels grups d'usuaris",
 'listgrouprights-summary' => "A continuació hi ha una llista dels grups d'usuaris definits en aquest wiki, així com dels seus drets d'accés associats.
@@ -2180,8 +2174,8 @@ L'adreça electrònica que vau indicar a [[Special:Preferences|les vostres prefe
 'watchnologintext' => "Heu d'[[Special:UserLogin|entrar]]
 per modificar el vostre llistat de seguiment.",
 'addwatch' => 'Afegeix a llista de seguiment',
-'addedwatchtext' => "S'ha afegit la pàgina «[[:$1]]» a la vostra [[Special:Watchlist|llista de seguiment]].
-S'hi mostraran els canvis futurs que tinguin lloc en aquesta pàgina i la corresponent discussió. A més la pàgina estarà ressaltada '''en negreta''' a la [[Special:RecentChanges|llista de canvis recents]] perquè pugueu adonar-vos dels canvis amb més facilitat.",
+'addedwatchtext' => 'La pàgina "[[:$1]]" ha estat afegida a la vostra [[Special:Watchlist|llista de seguiment]].
+S\'hi mostraran els canvis futurs que tinguin lloc en aquesta pàgina i la corresponent discussió.',
 'removewatch' => 'Treu de la llista de seguiment',
 'removedwatchtext' => "S'ha tret la pàgina «[[:$1]]» de la vostra [[Special:Watchlist|llista de seguiment]].",
 'watch' => 'Vigila',
@@ -2215,7 +2209,7 @@ S'hi mostraran els canvis futurs que tinguin lloc en aquesta pàgina i la corres
 'enotif_subject_moved' => 'La pàgina $1 de {{SITENAME}} ha estat reanomenada per {{gender:$2|$2}}',
 'enotif_subject_restored' => 'La pàgina $1 de {{SITENAME}} ha estat restaurada per {{gender:$2|$2}}',
 'enotif_subject_changed' => 'La pàgina $1 de {{SITENAME}} ha estat canviada per {{gender:$2|$2}}',
-'enotif_body_intro_deleted' => 'La pàgina $1 de {{SITENAME}} ha estat suprimida el $PAGEEDITDATE per {{gender:$2|$2}}. Aneu a $3 per veure la revisió actual.',
+'enotif_body_intro_deleted' => 'La pàgina $1 de {{SITENAME}} ha estat suprimida el $PAGEEDITDATE per {{gender:$2|$2}}, vegeu $3 .',
 'enotif_body_intro_created' => 'La pàgina $1 de {{SITENAME}} ha estat creada el $PAGEEDITDATE per {{gender:$2|$2}}. Aneu a $3 per veure la revisió actual.',
 'enotif_body_intro_moved' => 'La pàgina $1 de {{SITENAME}} ha estat reanomenada el $PAGEEDITDATE per {{gender:$2|$2}}. Aneu a $3 per veure la revisió actual.',
 'enotif_body_intro_restored' => 'La pàgina $1 de {{SITENAME}} ha estat restaurada el $PAGEEDITDATE per {{gender:$2|$2}}. Aneu a $3 per veure la revisió actual.',
@@ -2250,6 +2244,8 @@ $UNWATCHURL
 
 Suggeriments i ajuda:
 {{canonicalurl:{{MediaWiki:Helppage}}}}',
+'created' => 'creada',
+'changed' => 'modificada',
 
 # Delete
 'deletepage' => 'Elimina la pàgina',
@@ -2260,7 +2256,7 @@ Suggeriments i ajuda:
 'exblank' => 'la pàgina estava en blanc',
 'delete-confirm' => 'Elimina «$1»',
 'delete-legend' => 'Elimina',
-'historywarning' => "'''Avís:''' La pàgina que eliminareu té un historial amb aproximadament {{PLURAL:$1|una modificació|$1 modificacions}}:",
+'historywarning' => "'''Atenció:''' La pàgina que esteu a punt d'eliminar té un historial amb $1 {{PLURAL:$1|versió|versions}}, aproximadament:",
 'confirmdeletetext' => "Esteu a punt d'esborrar de forma permanent una pàgina o imatge i tot el seu historial de la base de dades.
 Confirmeu que realment ho voleu fer, que enteneu les
 conseqüències, i que el que esteu fent està d'acord amb la [[{{MediaWiki:Policy-url}}|política]] del projecte.",
@@ -2819,6 +2815,7 @@ Deseu-lo al vostre ordinador i carregueu-ne una còpia ací.",
 'import-error-interwiki' => "No s'importa la pàgina «$1» perquè el seu nom està reservat a l'enllaçament extern (interwiki).",
 'import-error-special' => "No s'importa la pàgina «$1» perquè el seu nom pertany a l'espai de noms especial que no permet pàgines.",
 'import-error-invalid' => "No s'importa la pàgina «$1» perquè el seu nom no és vàlid.",
+'import-error-unserialize' => 'La revisió $2 de la pàgina "$1" no pot ser desserialitzada. La revisió indica que utilitza el model de contingut $3 serialitzat com a $4.',
 'import-options-wrong' => '{{PLURAL:$2|Opció equivocada|Opcions equivocades}}: <nowiki>$1</nowiki>',
 'import-rootpage-invalid' => 'La pàgina arrel donada és un títol no vàlid.',
 'import-rootpage-nosubpage' => 'L\'espai de noms "$1" de la pàgina arrel no permet subpàgines.',
@@ -3033,6 +3030,7 @@ Si l'executeu, podeu comprometre la seguretat del vostre sistema.",
 'file-nohires' => 'No hi ha cap versió amb una resolució més gran.',
 'svg-long-desc' => 'fitxer SVG, nominalment $1 × $2 píxels, mida del fitxer: $3',
 'svg-long-desc-animated' => 'Fitxer SVG animat, nominalment $1 × $2 píxels, mida del fitxer: $3',
+'svg-long-error' => 'El fitxer SVG no és vàlid: $1',
 'show-big-image' => 'Imatge en màxima resolució',
 'show-big-image-preview' => "Mida d'aquesta previsualització: $1.",
 'show-big-image-other' => '{{PLURAL:$2|Altra resolució|Altres resolucions}}: $1.',
@@ -3821,7 +3819,10 @@ Les imatges es mostren en plena resolució; altres tipus de fitxer s'inicien dir
 'logentry-newusers-create' => "S'ha creat el compte d'usuari $1",
 'logentry-newusers-create2' => "$1 ha creat el compte d'usuari $3",
 'logentry-newusers-autocreate' => "El compte d'usuari $1 ha estat creat de manera automàtica",
-'newuserlog-byemail' => 'contrasenya enviada per correu electrònic',
+'logentry-rights-rights' => '$1 ha canviat la pertinença de grups per $3 de $4 a $5',
+'logentry-rights-rights-legacy' => '$1 ha canviat la pertinença de grups per $3',
+'logentry-rights-autopromote' => '$1 ha estat promogut automàticament de $4 a $5',
+'rightsnone' => '(cap)',
 
 # Feedback
 'feedback-bugornote' => "Si podeu descriure un problema tècnic en detall, [$1 informeu-ne].
@@ -3895,6 +3896,4 @@ Altrament, podeu fer servir un senzill formulari a continuació. El vostre comen
 'duration-centuries' => '$1 {{PLURAL:$1|segle|segles}}',
 'duration-millennia' => '$1 {{PLURAL:$1|mil·leni|mil·lenis}}',
 
-# Unknown messages
-'svg-long-error' => 'El fitxer SVG no és vàlid: $1',
 );
index d47e804..4f0a236 100644 (file)
@@ -409,6 +409,9 @@ Siók-mìng: (dāng) = gâe̤ng dék sĭng bēng-buōng bī-piâng, (sèng) = g
 'group-sysop-member' => 'Guāng-lī-uòng',
 'group-bureaucrat-member' => 'Guăng-lièu-cū',
 
+# Special:Log/newusers
+'newuserlogpage' => 'Kŭi dióng-hô̤ nĭk-cé',
+
 # Recent changes
 'recentchanges' => 'Cī-bŏng gì gāi-biéng',
 'recentchanges-summary' => 'Găk cī hiĕk dŭi-sùi wiki cī-bŏng dék sĭng gì gāi-biéng.',
@@ -567,9 +570,6 @@ Siók-mìng: (dāng) = gâe̤ng dék sĭng bēng-buōng bī-piâng, (sèng) = g
 # Special:LinkSearch
 'linksearch-ok' => 'Sìng-tō̤',
 
-# Special:Log/newusers
-'newuserlogpage' => 'Kŭi dióng-hô̤ nĭk-cé',
-
 # E-mail user
 'emailuser' => 'Gié diêng-piĕ ké̤ṳk ĭ',
 'emailpage' => 'Gié diêng-piĕ ké̤ṳk ĭ',
index 4b2eebe..452ada1 100644 (file)
@@ -826,6 +826,9 @@ $1',
 'grouppage-bureaucrat' => '{{ns:project}}:Даржахой',
 'grouppage-suppress' => '{{ns:project}}:Левисорхой',
 
+# Special:Log/newusers
+'newuserlogpage' => 'Декъашхой дlабазбина тептар',
+
 # User rights log
 'rightslog' => 'Декъашхон бакъона тéптар',
 
@@ -1059,9 +1062,6 @@ PICT # тайп тайпан
 # Special:ActiveUsers
 'activeusers' => 'Жигар декъашхой могlам',
 
-# Special:Log/newusers
-'newuserlogpage' => 'Декъашхой дlабазбина тептар',
-
 # Special:ListGroupRights
 'listgrouprights' => 'Декъашхойн тобанаши бакъонаш',
 'listgrouprights-group' => 'Тоба',
index b894232..b01dfc1 100644 (file)
@@ -844,9 +844,12 @@ Kon gipili nimo nga ihatag kini, gamiton kini aron pasidunggan ka sa imong mga t
 
 'grouppage-sysop' => '{{ns:project}}:Mga tigdumala',
 
+# Special:Log/newusers
+'newuserlogpage' => "Log sa paghimo'g gumagamit",
+'newuserlogpagetext' => "Kini mao ang ''log'' sa bag-ong namugnang mga gumagamit.",
+
 # User rights log
 'rightslog' => 'Log sa mga katungod sa gumagamit',
-'rightsnone' => '(wala)',
 
 # Associated actions - in the sentence "You do not have permission to X"
 'action-read' => 'basaha kining panid',
@@ -972,10 +975,6 @@ Also see [[Special:WantedCategories|wanted categories]].',
 # Special:LinkSearch
 'linksearch' => 'Mga sumpay sa gawas',
 
-# Special:Log/newusers
-'newuserlogpage' => "Log sa paghimo'g gumagamit",
-'newuserlogpagetext' => "Kini mao ang ''log'' sa bag-ong namugnang mga gumagamit.",
-
 # Special:ListGroupRights
 'listgrouprights-members' => '(talaan sa mga miyembro)',
 
@@ -1249,6 +1248,6 @@ Ang uban default nga nakatago.
 # New logging system
 'revdelete-restricted' => 'mga na-aplay nga restriksyon sa mga tagdumala',
 'revdelete-unrestricted' => 'gitangtang ang mga restriksyon alang sa mga tagdumala',
-'newuserlog-byemail' => "ang pasword gipadala na pinaagi sa ''e-mail''",
+'rightsnone' => '(wala)',
 
 );
index 9fc02fb..3d00bf1 100644 (file)
@@ -278,7 +278,7 @@ $messages = array(
 
 'about' => 'سەبارەت',
 'article' => 'بابەت',
-'newwindow' => '(لە پەڕەیەکی نوێ دەکرێتەوە)',
+'newwindow' => '(لە پەڕەیەکی نوێدا دەکرێتەوە)',
 'cancel' => 'ھەڵیوەشێنەوە',
 'moredotdotdot' => 'زیاتر',
 'mypage' => 'پەڕه‌',
@@ -399,7 +399,7 @@ $1',
 
 'badaccess' => 'ھەڵە لە بە دەست ھێنان',
 'badaccess-group0' => 'ڕێگەت پێ نەدراوە بۆ بەجێهێنای ئەو ئەنجامە وا داخوازیت کردووه.',
-'badaccess-groups' => 'ئەو ئەنجامەی وا داخوازیت کردووه مەحدود کراوە بۆ بەکارهێنەرانی {{PLURAL:$2|دەستەی|یەکێک لە دەستەکانی}}: $1',
+'badaccess-groups' => 'ئەو کردەوەیەی داوات کردووه تایبەتە بۆ بەکارھێنەرانی {{PLURAL:$2|گرووپی|گرووپەکانی}}: $1.',
 
 'versionrequired' => 'وەشانی $1ی‌ میدیاویکی پێویستە',
 'versionrequiredtext' => 'پێویستیت بە وەشانی $1ی ویکیمیدیا ھەیە بۆ بەکاربردنی ئەم پەڕەیە.
@@ -429,7 +429,7 @@ $1',
 'hidetoc' => 'بیشارەوە',
 'collapsible-collapse' => 'کۆیبکەوە',
 'collapsible-expand' => 'بڵاویبکەوە',
-'thisisdeleted' => 'نیشاندان یا گەڕاندنەوەی $1؟',
+'thisisdeleted' => '$1 نیشان بدە یا بھێنەوە؟',
 'viewdeleted' => '$1 نیشان بده‌؟',
 'restorelink' => '{{PLURAL:$1|یەک گۆڕانکاریی سڕاو|$1 گۆڕانکاریی سڕاو}}',
 'feedlinks' => 'خۆراک:',
@@ -441,6 +441,8 @@ $1',
 'page-atom-feed' => 'فیدی Atom بۆ «$1»',
 'feed-atom' => 'ئەتۆم',
 'red-link-title' => '$1 (پەڕە بوونی نییە)',
+'sort-descending' => 'ڕیزکردنی بەرەوە ژێر',
+'sort-ascending' => 'ڕیزکردنی بەرەوە ژوور',
 
 # Short words for each namespace, by default used in the namespace tab in monobook
 'nstab-main' => 'پەڕە',
@@ -627,8 +629,8 @@ $2',
 ھیچ ئیمەیلێک بۆ ئەم بابەتانەی خوارەوە نانێردرێت.',
 'noemailprefs' => 'بۆ کەوتنە کاری ئەو تایبەتمەندیانە، لە هەڵبژاردەکانت ئەدرەسەکی ئی‌مێڵ دابین بکە.',
 'emailconfirmlink' => 'ئیمەیلەکەت پشت‌ڕاست بکەرەوە',
-'invalidemailaddress' => 'ئەو ئەدرەسی ئی‌مێڵە لەبەر ئەوەی بە شێوازێکی نەناسراوە، پەسند نەکرا.
-تکایە ئەدرەسێک بە شێوازی ناسراو بنووسە یان ئەو خانەیە بەتاڵ بهێڵەوە.',
+'invalidemailaddress' => 'ناونیشانی ئیمەیل پەسند نەکرا، چون لەوە دەچێت شێوازێکی نادروستی ھەبێت.
+تکایە ناونیشانێک بە شێوازی دروست بنووسە یان ئەو بەشە واڵا بھێڵەوە.',
 'emaildisabled' => 'ئەم ماڵپەڕە ناتوانێ ئیمەیل بنێرێ.',
 'accountcreated' => 'ھەژمار دروست کرا',
 'accountcreatedtext' => 'هەژماری بەکارهێنەری $1 دروست کراوە.',
@@ -699,6 +701,7 @@ $2
 'changeemail-oldemail' => 'ئەدرەسی ئیمەیڵی ئێستا:',
 'changeemail-newemail' => 'ئەدرەسی ئیمەیڵی نوێ:',
 'changeemail-none' => '(ھیچ)',
+'changeemail-password' => 'تێپەڕوشەکەت لە {{SITENAME}}:',
 'changeemail-submit' => 'ئەمەیڵ بگۆڕە',
 'changeemail-cancel' => 'ھەڵیوەشێنەوە',
 
@@ -729,7 +732,7 @@ $2
 'watchthis' => 'ئەم پەڕەیە بخە ژێر چاودێری',
 'savearticle' => 'پەڕەکە پاشەکەوت بکە',
 'preview' => 'پێشبینین',
-'showpreview' => 'پێشبینین نیشانبدە',
+'showpreview' => 'پێشبینین نیشان بدە',
 'showlivepreview' => 'پێشبینینی ڕاسته‌وخۆ',
 'showdiff' => 'گۆڕانکارییەکان نیشان بدە',
 'anoneditwarning' => "'''ھۆشیار بە:''' نەچوویتە ژوورەوە.
@@ -741,7 +744,7 @@ $2
 'missingcommentheader' => "'''بیرهێنانەوە:''' بۆ ئەم بۆچوونەت سەردێڕ\\بابەت ڕاچاو نەکردووە.
 ئەگەر دیسان «{{int:savearticle}}» لێبدەی، دەستکاریەکەت بێ سەردێڕ یان بابەت پاشەکەوت دەبێ.",
 'summary-preview' => 'پێشبینینی کورتە:',
-'subject-preview' => 'پێشبینینی بابەت\\سەردێڕ :',
+'subject-preview' => 'پێشبینینی بابەت/سەردێڕ:',
 'blockedtitle' => 'به‌کار هینه‌ر له‌کار خراوه',
 'blockedtext' => "'''ناوی بەکارهێنەری یان ئای‌پی ئەدرەسی تۆ بەربەست‌ کراوە.'''
 
@@ -881,7 +884,6 @@ $2
 'template-semiprotected' => '(نیوەپارێزراو)',
 'hiddencategories' => 'ئەم پەڕە ئەندامێکی {{PLURAL:$1|١ پۆلی شاراوەیە|$1 پۆلی شاراوەیە}}:',
 'edittools' => '<!-- دەقی ئێرە لە ژێری فۆرمی دەستکاری و بارکردندا نیشان دەدرێت. -->',
-'nocreatetitle' => 'درووست‌کردنی لاپەڕە سنووردار کراوە',
 'nocreatetext' => '{{SITENAME}} توانای درووست‌کردنی لاپەڕە نوێکانی داخستووە.<br />
 ئەتوانی بگەڕێتەوە دواوە و یەکێک لەو لاپەڕانەی وا هەن دەستکاری بکەیت ، یان [[Special:UserLogin|بچۆ ژوورەوە یان هەژمارێک درووست‌بکە]]',
 'nocreate-loggedin' => 'ئیجازەی دروست کردنی پەڕەی نوێت نیە.',
@@ -906,6 +908,7 @@ $2
 'edit-already-exists' => 'توانای درووست‌کردنی لاپەڕەی نوێ نیە.<br />
 ئەوە لەپێش‌دا هەبوو.',
 'defaultmessagetext' => 'دەقی پەیامی هەمیشەیی',
+'invalid-content-data' => 'دراوەی ناوەرۆکی نادروست',
 
 # Content models
 'content-model-wikitext' => 'ویکیدەق',
@@ -963,7 +966,7 @@ $3 هۆکاری "$2" خستوەتەڕوو',
 'historyempty' => '(پووچ)',
 
 # Revision feed
-'history-feed-title' => 'Ù\85Û\8eÚ\98Ù\88Ù\88Û\8c Ù¾Û\8cاÚ\86Ù\88Ù\88Ù\86Û\95Ù\88Û\95',
+'history-feed-title' => 'Ù\85Û\8eÚ\98Ù\88Ù\88Û\8c Ù¾Û\8eداÚ\86Ù\88Ù\88Ù\86Û\95Ù\88Û\95کاÙ\86',
 'history-feed-description' => 'مێژووی پیاچوونەوە بۆ ئەم پەڕە لە ویکییەکە',
 'history-feed-item-nocomment' => '$1 لە $2',
 'history-feed-empty' => 'لاپەڕەی داخوازی‌کراو بوونی نیە.<br />
@@ -1103,7 +1106,7 @@ $1",
 'mergelogpagetext' => 'لە خوارەوە دوایین مێژووی‌لاپەڕە خستنە سەر لاپەڕەیەکی‌تر، دەبینی.',
 
 # Diffs
-'history-title' => 'Ù\85Û\8eÚ\98Ù\88Ù\88Û\8c Ù¾Û\8cاچوونەوەکانی «$1»',
+'history-title' => 'Ù\85Û\8eÚ\98Ù\88Ù\88Û\8c Ù¾Û\8eداچوونەوەکانی «$1»',
 'difference-title' => 'جیاوازیی نێوان پێداچوونەوەکانی «$1»',
 'difference-title-multipage' => 'جیاوازیی نێوان پەڕەی «$1» و «$2»',
 'difference-multipage' => '(جیاوازی نێوان پەڕەکان)',
@@ -1187,7 +1190,7 @@ $1",
 'qbsettings-floatingright' => 'سەراوی ڕاست',
 
 # Preferences page
-'preferences' => 'ھەڵبژاردەکان',
+'preferences' => 'ھەڵبەژاردەکان',
 'mypreferences' => 'ھەڵبژاردەکان',
 'prefs-edits' => 'ژمارەی گۆڕانکارییەکان:',
 'prefsnologin' => 'لەژوورەوە نیت',
@@ -1325,8 +1328,8 @@ $1",
 'userrights-nodatabase' => 'بنکەدراوی $1 بوونی نیە یا لەم شوێنە نیە.',
 'userrights-nologin' => 'بۆ دانانی مافەکانی بەکارهێنەر دەبێ بە هەژماری بەڕێوبەری [[Special:UserLogin|بچیتە ژووروە]].',
 'userrights-notallowed' => 'ھەژمارەکەی تۆ دەسەڵاتی دانان یان لابردنی مافەکانی بەکارھێنەری نییە.',
-'userrights-changeable-col' => 'ئەو گرووپانە بۆت ئەگۆڕدرێن',
-'userrights-unchangeable-col' => 'ئەو گرووپانە بۆت ناگۆڕدرێن',
+'userrights-changeable-col' => 'ئەو گرووپانەی دەتوانی بیگۆڕی',
+'userrights-unchangeable-col' => 'ئەو گرووپانەی ناتوانی بیگۆڕی',
 
 # Groups
 'group' => 'گرووپ:',
@@ -1336,7 +1339,7 @@ $1",
 'group-sysop' => 'بەڕێوبەران',
 'group-bureaucrat' => 'بیوروکراتەکان',
 'group-suppress' => 'چاودێرەکان',
-'group-all' => '(هەموو)',
+'group-all' => '(ھەموو)',
 
 'group-user-member' => '{{GENDER:$1|بەکارھێنەر}}',
 'group-autoconfirmed-member' => '{{GENDER:$1|بەکارھێنەرانی پەسندکراوی خۆگەڕ}}',
@@ -1410,11 +1413,13 @@ $1",
 'right-override-export-depth' => 'هەناردنی لاپەڕەکان کە لاپەڕەکانی بەستەر پێ‌دراو تا قووڵایی 5 لەخۆ بگرێت',
 'right-sendemail' => 'ئەمەیل بنێرە بۆ بەکارھێنەرانی تر',
 
+# Special:Log/newusers
+'newuserlogpage' => 'لۆگی دروستکردنی بەکارھێنەر',
+'newuserlogpagetext' => 'ئەمە لۆگێکی دروستکردنی بەکارھێنەرە.',
+
 # User rights log
 'rightslog' => 'لۆگی مافەکانی بەکارھێنەر',
 'rightslogtext' => 'ئەمە لۆگی دەستکاری مافەکانی بەکار‌هێنەرە.',
-'rightslogentry' => 'بۆ $1 ئەندامەتی گرووپی $2 گۆڕدرا بۆ $3',
-'rightsnone' => '(ھیچ)',
 
 # Associated actions - in the sentence "You do not have permission to X"
 'action-read' => 'خوێندنەوەی ئەم پەڕە',
@@ -1483,7 +1488,7 @@ $1",
 'rc_categories' => 'بەرتەسک‌کردنەوە بە هاوپۆلەکان (به "|" جودای بکەوە‌)',
 'rc_categories_any' => 'هەرکام',
 'rc-change-size-new' => '$1 {{PLURAL:$1|بایت}} پاش گۆڕانکاری',
-'newsectionsummary' => 'بەشی نوێ /* $1 */',
+'newsectionsummary' => '/* $1 */ بەشی نوێ',
 'rc-enhanced-expand' => 'وردەکارییەکان پیشان بدە (پێویستی بە جاڤاسکریپتە)',
 'rc-enhanced-hide' => 'وردەکارییەکان بشارەوە',
 'rc-old-title' => 'بە ناوی سەرەکیی «$1» دروست کراوە',
@@ -1556,9 +1561,9 @@ $2، ئەو جۆرە {{PLURAL:$3|پەڕگەیە کە ڕێگەی|پەڕگانەی
 'large-file' => 'پێشنیار دەکرێت قەبارەی پەڕگەکان زیاتر لە $1 نەبێت؛
 قەبارەی ئەم پەڕگە $2.',
 'largefileserver' => 'ئەم پەڕگە گەورەتر لەوەیە کە ڕاژەکار ڕێگەدەدات.',
-'emptyfile' => 'ئەو پەڕگەی بارت‌کرد لەوەدەچێ بەتاڵ و خاڵی بێت.
-شایەد ئەوە جۆرە هەڵەیەک لە ناوی لاپەڕەکە بێت.
-گەر بە ڕاستی دەتەوێ ئەو پەڕگە باربکەی جارێکی‌کە چاوی لێ‌بکەوە.',
+'emptyfile' => 'ئەو پەڕگەیەی بارت کردووە لەوە دەچێ واڵا بێت.
+لەوانەیە بە ھۆی هەڵەیەک لە تایپی ناوی پەڕگەکە بێت.
+تکایە تاوتوێی بکە ئەگەر بە ڕاستی دەتەوێ ئەم پەڕگەیە بار بکەی.',
 'fileexists' => 'پەڕگەیەک هەر بەو ناوە‌ لە پێش‌دا هەیە، تکایە گەر ئەرخەیان نیت بۆ گۆڕینی، چاوێک لە <strong>[[:$1]]</strong> بکە.
 [[$1|thumb]]',
 'filepageexists' => 'پەڕەی ناساندن بۆ ئەم پەڕگە پێشتر لە <strong>[[:$1]]</strong> درووستکراوە، بەڵام پەڕگەیەک بەو ناوەوە ئێستا نادۆزرێتەوە.
@@ -1631,12 +1636,14 @@ $1',
 'backend-fail-stream' => 'نەکرا پەڕگەی $1 بنێردرێت.',
 'backend-fail-notexists' => 'پەڕگەی $1 بوونی نییە.',
 'backend-fail-delete' => 'نەکرا پەڕگەی $1 بسڕدرێتەوە.',
+'backend-fail-alreadyexists' => 'پەڕگەی «$1» ھەر ئێستا ھەیە.',
 'backend-fail-copy' => 'نەکرا پەڕگەی $1 کۆپی بکرێت بۆ $2.',
 'backend-fail-move' => 'نەکرا پەڕگەی $1 بگوازرێتەوە بۆ $2.',
 'backend-fail-read' => 'نەکرا پەڕگەی $1 بخوێنرێتەوە.',
 'backend-fail-create' => 'نەکرا پەڕگەی $1 بنووسرێت',
 
 # Special:UploadStash
+'uploadstash' => 'ئەمباری بارکردن',
 'uploadstash-errclear' => 'سڕینەوەی پەڕگەکان سەرکەوتوو نەبوو.',
 'uploadstash-refresh' => 'نوێکردنەوەی پێرستی پەڕگەکان',
 
@@ -1669,7 +1676,7 @@ $1',
 لە کاتی پاڵاوتن بۆ بەکارھێنەرێکی تایبەت، تەنیا ئەو پەڕگانە کە بەکارھێنەرەکە دوایین وەشانیانی بارکردبێت نیشان دەدرێن.',
 'listfiles_search_for' => 'بگەڕێ بۆ ناوی میدیای:',
 'imgfile' => 'پەڕگە',
-'listfiles' => 'Ù\84Û\8cستÛ\8c Ù¾Û\95رگەکان',
+'listfiles' => 'Ù¾Û\8eرستÛ\8c Ù¾Û\95Ú\95گەکان',
 'listfiles_thumb' => 'وێنۆک',
 'listfiles_date' => 'ڕێکەوت',
 'listfiles_name' => 'ناو',
@@ -1815,7 +1822,7 @@ $1',
 'withoutinterwiki-legend' => 'پێشگر',
 'withoutinterwiki-submit' => 'پیشاندان',
 
-'fewestrevisions' => 'ئەو پەڕانە کەمترین پیاچوونەوەیان ھەیە',
+'fewestrevisions' => 'پەڕەکان بە کەمترین پێداچوونەوەکان',
 
 # Miscellaneous special pages
 'nbytes' => '$1 {{PLURAL:$1|بایت|بایت}}',
@@ -1841,15 +1848,15 @@ $1',
 'wantedfiles' => 'پەڕگە داواکراوەکان',
 'wantedfiletext-cat' => 'پەڕگەکانی خوارەوە بەکارھێنراون بەڵام بوونیان نییە. پەڕگەکانی ئەمارەکانی دەرەوە لەوانەیە لەم لیستەدا بن ئەگەرچی بوونیان ھەیە. ھەر باشییەکی درۆی وەھا ھێڵی بەسەردا دەکێشرێ. ھەروەھا، ئەو پەڕانە کە پەڕگەیەکیان بەکارھێناوە کە بوونی نییە لە [[:$1]]دا بە ڕیز کراون.',
 'wantedfiletext-nocat' => 'پەڕگەکانی خوارەوە بەکارھێنراون بەڵام بوونیان نییە. پەڕگەکانی ئەمارەکانی دەرەوە لەوانەیە لەم لیستەدا بن ئەگەرچی بوونیان ھەیە. ھەر باشییەکی درۆی وەھا <del>ھێڵی بەسەردا دەکێشرێ</del>.',
-'wantedtemplates' => 'داÚ\95Û\8eÚ\98Û\95 Ø®Ù\88ازراوەکان',
-'mostlinked' => 'ئەو پەڕانە زۆرترین بەستەریان پێدراوە',
-'mostlinkedcategories' => 'ئەو پۆلانە زۆرترین بەستەریان پێدراوە',
-'mostlinkedtemplates' => 'ئÛ\95Ù\88 Ø¯Ø§Ú\95Û\8eÚ\98اÙ\86Û\95 Ø²Û\86رترÛ\8cÙ\86 Ø¨Û\95ستÛ\95رÛ\8cاÙ\86 Ù¾Û\8eدراÙ\88Û\95',
-'mostcategories' => 'پەڕە زۆرتر پۆلێنکراوەکان',
-'mostimages' => 'ئەو پەڕگانە زۆرترین بەستەریان پێدراوە',
+'wantedtemplates' => 'داÚ\95Û\8eÚ\98Û\95 Ø¯Ø§Ù\88اکراوەکان',
+'mostlinked' => 'پەڕەکان بە زۆرترین بەستەری پێدراو',
+'mostlinkedcategories' => 'پۆلەکان بە زۆرترین بەستەری پێدراو',
+'mostlinkedtemplates' => 'داÚ\95Û\8eÚ\98Û\95کاÙ\86 Ø¨Û\95 Ø²Û\86رترÛ\8cÙ\86 Ø¨Û\95ستÛ\95رÛ\8c Ù¾Û\8eدراÙ\88',
+'mostcategories' => 'پەڕەکان بە زۆرترین پۆل',
+'mostimages' => 'پەڕگەکان بە زۆرترین بەستەری پێدراو',
 'mostinterwikis' => 'پەڕەکان بە زۆرترین نێوانویکی',
-'mostrevisions' => 'ئەو پەڕانە زۆرترین پیاچوونەوەیان ھەیە',
-'prefixindex' => 'گشت پەڕەکان بە پێشگرەوە',
+'mostrevisions' => 'پەڕەکان بە زۆرترین پێداچوونەوەکان',
+'prefixindex' => 'Ú¾Û\95Ù\85Ù\88Ù\88 پەڕەکان بە پێشگرەوە',
 'prefixindex-namespace' => 'هەموو پەڕەکان بەپێشگری (بۆشایی ناوی $1)',
 'shortpages' => 'پەڕە کورتەکان',
 'longpages' => 'پەڕە درێژەکان',
@@ -1863,11 +1870,11 @@ $1',
 'protectedtitles' => 'سەرناوە پارێزراوەکان',
 'protectedtitlestext' => 'ئەم سەردێڕانە لە درووست‌کردن پارێزراون',
 'protectedtitlesempty' => 'ھیچ سەرناوێک بەم سنوورانەوە ئێستا نەپارێزراوە.',
-'listusers' => 'Ù\84Û\8cستی بەکارھێنەران',
-'listusers-editsonly' => 'تەنھا ئەو بەکارھێنەرانە نیشان بدە کە دەستکارییان کردووە',
-'listusers-creationsort' => 'ڕیز کردن بە پێی ڕێکەوتی دروست کردن',
+'listusers' => 'Ù¾Û\8eرستی بەکارھێنەران',
+'listusers-editsonly' => 'تەنیا ئەو بەکارھێنەرانە نیشان بدە کە دەستکارییان کردووە',
+'listusers-creationsort' => 'ڕیزکردن بە پێی ڕێکەوتی دروستکردن',
 'usereditcount' => '$1 {{PLURAL:$1|دەستکاری|دەستکاری}}',
-'usercreated' => 'لە $1 کاتژمێر $2 {{GENDER:$3|دروستکراوە}}',
+'usercreated' => 'لە $1، $2 {{GENDER:$3|دروست کراوە}}',
 'newpages' => 'پەڕە نوێکان',
 'newpages-username' => 'ناوی بەکارھێنەر:',
 'ancientpages' => 'کۆنترین پەڕەکان',
@@ -1907,9 +1914,9 @@ $1',
 'alphaindexline' => '$1 تا $2',
 'nextpage' => 'پەڕەی پاشەوە ($1)',
 'prevpage' => 'پەڕەی پێشەوە ($1)',
-'allpagesfrom' => 'بینینی پەڕەکان بە دەست پێ کردن لە:',
-'allpagesto' => 'بینینی پەڕەکان بە دوایی ھاتن بە:',
-'allarticles' => 'ھەمووی وتارەکان',
+'allpagesfrom' => 'نیشاندانی پەڕەکان بە دەستپێکردن لە:',
+'allpagesto' => 'نیشاندانی پەڕەکان بە دوایی ھاتن بە:',
+'allarticles' => 'ھەموو پەڕەکان',
 'allinnamespace' => 'ھەموو پەڕەکان (بۆشایی-ناوی $1)',
 'allnotinnamespace' => 'ھەموو پەڕەکان (ئەوانەی لە بۆشایی-ناوی $1دا نین)',
 'allpagesprev' => 'پێش',
@@ -1935,11 +1942,11 @@ $1',
 
 # Special:DeletedContributions
 'deletedcontributions' => 'بەشدارییە سڕاوەکان',
-'deletedcontributions-title' => 'هاوبەشییەکانی سڕاوەی بەکارهێنەر',
+'deletedcontributions-title' => 'بەشدارییە سڕاوەکانی بەکارھێنەر',
 'sp-deletedcontributions-contribs' => 'بەشدارییەکان',
 
 # Special:LinkSearch
-'linksearch' => 'گەڕان لە لینکە دەرەکییەکان',
+'linksearch' => 'گەڕانی بەستەرە دەرەکییەکان',
 'linksearch-pat' => 'گەڕان بۆ نواندن:',
 'linksearch-ns' => 'بۆشاییی ناو:',
 'linksearch-ok' => 'گەڕان',
@@ -1949,24 +1956,20 @@ $1',
 'linksearch-line' => '$1 بەستەرپێ‌دراو لە $2',
 
 # Special:ListUsers
-'listusersfrom' => 'نیشاندانی بەکارھێنەران بە دست پێکردن لە:',
+'listusersfrom' => 'نیشاندانی بەکارھێنەران بە دەستپێکردن لە:',
 'listusers-submit' => 'نیشانیبدە',
 'listusers-noresult' => 'ھیچ بەکارھێنەرێک نەدۆزرایەوە.',
-'listusers-blocked' => '(بەربەست‌کراو)',
+'listusers-blocked' => '(بەربەست کراوە)',
 
 # Special:ActiveUsers
-'activeusers' => 'Ù\84Û\8cستی بەکارھێنەرە چالاکەکان',
+'activeusers' => 'Ù¾Û\8eرستی بەکارھێنەرە چالاکەکان',
 'activeusers-intro' => 'ئەمە لیستێکی ئەو بەکارھێنەرانەیە کە لە  $1 {{PLURAL:$1|ڕۆژ|ڕۆژ}}ی ڕابردوودا بە جۆرێک چالاکییەکیان ھەبووە.',
 'activeusers-count' => '$1 گۆڕانکاری لە دوایین {{PLURAL:$3|ڕۆژدا|$3 ڕۆژدا}}',
-'activeusers-from' => 'نیشاندانی بەکارھێنەران بە دست پێکردن لە:',
+'activeusers-from' => 'نیشاندانی بەکارھێنەران بە دەستپێکردن لە:',
 'activeusers-hidebots' => 'بۆتەکان بشارەوە',
 'activeusers-hidesysops' => 'بەڕێوبەران بشارەوە',
 'activeusers-noresult' => 'هیچ بەکارهێنەرێک نەدۆزرایەوە',
 
-# Special:Log/newusers
-'newuserlogpage' => 'لۆگی دروستکردنی بەکارھێنەر',
-'newuserlogpagetext' => 'ئەمە لۆگێکی دروستکردنی بەکارھێنەرە.',
-
 # Special:ListGroupRights
 'listgrouprights' => 'مافەکانی گرووپی بەکارھێنەر',
 'listgrouprights-summary' => 'ئەمە لیستێکە لە گرووپەکانی بەکارهێنەر لەسەر ئەم ویکی‌یە، دەگەڵ مافەکانی دەست‌پێ‌گەیشتنی هاوپەیوەندیان.
@@ -2029,8 +2032,8 @@ $1',
 'watchnologin' => 'لە ژوورەوە نیت.',
 'watchnologintext' => 'دەبی لە [[Special:UserLogin|ژوورەوە]] بیت بۆ ئەوەی بتوانی گۆڕانکاری بکەیت لە لیستی چاودێریەکەت‌دا.',
 'addwatch' => 'بیخە سەر لیستی چاودێری',
-'addedwatchtext' => 'پەڕەی «[[:$1]]» خرایە سەر [[Special:Watchlist|لیستی چاودێرییەکەت]].
-گۆڕانکارییەکانی داھاتووی ئەم پەڕە و پەڕەی وتووێژەکەی، لەوێدا ڕیزدەکرێ و پەڕەکە لە [[Special:RecentChanges|لیستی دوایین گۆڕانکارییەکاندا]] ئەستوورکراو دەردەکەوێت بۆ ئەوەی ئاسانتر دەستکەوێت.',
+'addedwatchtext' => 'پەڕەی «[[:$1]]» خرایە ژێر [[Special:Watchlist|پێرستی چاودێری]]یەکەت.
+گۆڕانکارییەکانی داھاتووی ئەم پەڕەیە و پەڕەی وتووێژەکەی، لەوێدا پێرست دەکرێت.',
 'removewatch' => 'لەلیستی چاودێری لایبە',
 'removedwatchtext' => 'پەڕەی «[[:$1]]» لە [[Special:Watchlist|لیستی چاودێریەکەت]] لابرا.',
 'watch' => 'چاودێری بکە',
@@ -2056,14 +2059,14 @@ $1',
 'unwatching' => 'لابردنی چاودێری...',
 
 'enotif_mailer' => 'نامەی ڕاگەیاندنی {{SITENAME}}',
-'enotif_reset' => 'گشت پەڕەکان وەک بینراو دیاری بکە',
+'enotif_reset' => 'Ú¾Û\95Ù\85Ù\88Ù\88 پەڕەکان وەک بینراو دیاری بکە',
 'enotif_impersonal_salutation' => 'بەکارهێنەری      {{SITENAME}}',
 'enotif_subject_deleted' => 'پەڕەی {{SITENAME}} $1 بە دەستی {{gender:$2|$2}} سڕایەوە.',
 'enotif_subject_created' => 'پەڕەی {{SITENAME}} $1 بە دەستی {{gender:$2|$2}} دروست کرا.',
 'enotif_subject_moved' => 'پەڕەی {{SITENAME}} $1 بە دەستی {{gender:$2|$2}} گوازرایەوە.',
 'enotif_subject_restored' => 'پەڕەی {{SITENAME}} $1 بە دەستی {{gender:$2|$2}} ھێنرایەوە.',
 'enotif_subject_changed' => 'پەڕەی {{SITENAME}} $1 بە دەستی {{gender:$2|$2}} گۆڕا.',
-'enotif_body_intro_deleted' => 'پەڕەی {{SITENAME}} $1 لە $PAGEEDITDATE بە دەستی {{gender:$2|$2}} سڕایەوە، بۆ پێداچوونەی ھەنووکە بڕوانە $3.',
+'enotif_body_intro_deleted' => 'پەڕەی {{SITENAME}} $1 لە $PAGEEDITDATE بە دەستی {{gender:$2|$2}} سڕایەوە، بڕوانە $3.',
 'enotif_body_intro_created' => 'پەڕەی {{SITENAME}} $1 لە $PAGEEDITDATE بە دەستی {{gender:$2|$2}} دروست کرا، بۆ پێداچوونەی ھەنووکە بڕوانە $3.',
 'enotif_body_intro_moved' => 'پەڕەی {{SITENAME}} $1 لە $PAGEEDITDATE بە دەستی {{gender:$2|$2}} گوازرایەوە، بۆ پێداچوونەی ھەنووکە بڕوانە $3.',
 'enotif_body_intro_restored' => 'پەڕەی {{SITENAME}} $1 لە $PAGEEDITDATE بە دەستی {{gender:$2|$2}} ھێنرایەوە، بۆ پێداچوونەی ھەنووکە بڕوانە $3.',
@@ -2097,6 +2100,8 @@ $UNWATCHURL
 
 کاردانەوە و یارمەتیی زۆرتر:
 {{canonicalurl:{{MediaWiki:Helppage}}}}',
+'created' => 'دروستکرا',
+'changed' => 'گۆڕدرا',
 
 # Delete
 'deletepage' => 'پەڕە بسڕەوە',
@@ -2160,7 +2165,7 @@ $UNWATCHURL
 'protectlogtext' => 'لە ژێرەوە پێرستێک لە گۆڕانکارییەکانی پەڕە پارێزراوەکان دەبینی.
 بۆ پێرستی ئەو پەڕانەی ئێستا پاراستنیان لە ئارادایە بڕوانە [[Special:ProtectedPages|پێرستی پەڕە پارێزراوەکان]].',
 'protectedarticle' => '«[[$1]]»ی پاراست',
-'modifiedarticleprotection' => 'ئاستی پاراستنی «[[$1]]»ی گۆڕا',
+'modifiedarticleprotection' => 'ئاستی پاراستنی «[[$1]]»ی گۆڕی',
 'unprotectedarticle' => 'پاراستنی لەسەر «[[$1]]» لابرد',
 'movedarticleprotection' => 'ڕێککارییەکانی پاراستن لە  «[[$2]]» گوازرایەوە بۆ «[[$1]]»',
 'protect-title' => 'گۆڕینی ئاستی پاراستنی "$1"',
@@ -2221,17 +2226,17 @@ $UNWATCHURL
 
 # Undelete
 'undelete' => 'پەڕە سڕاوەکان ببینە',
-'undeletepage' => 'Ù¾Û\95Ú\95Û\95 Ø³Ú\95اÙ\88Û\95کاÙ\86 Ø¨Ø¨Û\8cÙ\86Û\95 Ù\88 Ø¨Ú¯Û\95Ú\95ێنەوە',
+'undeletepage' => 'Ù¾Û\95Ú\95Û\95 Ø³Ú\95اÙ\88Û\95کاÙ\86 Ø¨Ø¨Û\8cÙ\86Û\95 Ù\88 Ø¨Ú¾ێنەوە',
 'undeletepagetitle' => "'''ئەمە تێکەڵ‌کراوەی پێداچوونەوە سڕدراوەکانی [[:$1|$1]]'''.",
 'viewdeletedpage' => 'پەڕە سڕاوەکان ببینە',
 'undeletepagetext' => 'ئەم {{PLURAL:$1|سڕاوەتەوە|$1 لاپەڕە سڕاونەتەوە}} بەڵام لەبەر ئەوەی لە ئەرشیڤ‌دا هەن هێشتا دەتوانی بیانهێنیتەوە.
 ئەرشیڤ چەن‌وەخت جارێ لە کاتی دیاری‌کراودا خاوێن‌دەکرێتەوە.',
 'undelete-fieldset-title' => 'هێنانەوەی پێداچوونەوەکان',
-'undeleteextrahelp' => "بۆ هێنانەوەی سەرانسەری مێژووی پەڕەیەک، گشت بۆکسەکان ھەڵنەبژێردراو بھێڵەوە و کلیک بکە لەسەر '''''{{int:undeletebtn}}'''''.
-بۆ ئەنجامدانی ھێنانەوەیەکی بژاردەیی، بۆکسەکانی پەیوەندیدار بەو پیاچوونەوانە دەبێ بھێنرێنەوە ھەڵبژێرە و کلیک بکە لەسەر  '''''{{int:undeletebtn}}'''''.",
+'undeleteextrahelp' => "بۆ ھێنانەوەی گشت مێژووی پەڕەکە، ھەموو چوارچێوەکانی نیشانکردن ھەڵنەبژێردراو بھێڵەوە و لە سەر '''''{{int:undeletebtn}}''''' کرتە بکە.
+بۆ ھێنانەوەی ھەڵبژێردراو، چوارچێوەی بەرامبەر بەو پێداچوونەویەی دەتەوێ بیھێنیتەوە، نیشان بکە و لە سەر '''''{{int:undeletebtn}}''''' کرتە بکە.",
 'undeleterevisions' => '$1 {{PLURAL:$1|پێداچوونەوە|پێداچوونەوە}} ئەرشیڤ‌کرا',
-'undeletehistory' => 'ئÛ\95Ú¯Û\95ر Ù\84اپÛ\95Ú\95Û\95Û\8cÛ\95Ú© Ø¨Ù\87Û\8eÙ\86Û\8cتÛ\95Ù\88Û\95Ø\8c Ù\87Û\95Ù\85Ù\88Ù\88 Ù¾Û\8eداÚ\86Ù\88Ù\88Ù\86Û\95Ù\88Û\95کاÙ\86Û\8c Ø¯Û\95Ú¯Û\95Ú\95Û\8eÙ\86Û\95Ù\88Û\95 Ø¨Û\86 Ù\84اپÛ\95Ú\95Û\95Û\8c Ù\85Û\8eÚ\98Ù\88Ù\88.
-ئÛ\95Ú¯Û\95ر Ù\84Û\95 Ú©Ø§ØªÛ\8c Ø³Ú\95اÙ\88Û\95بÙ\88Ù\88Ù\86Ø\8c Ù\84اپÛ\95Ú\95Û\95Û\8cÛ\95Ú© Ù\87Û\95ر Ø¨Û\95Ù\88 Ù\86اÙ\88Û\95 Ø¯Ø±Ù\88Ù\88ستâ\80\8cکرابÛ\8eتØ\8c Ù¾Û\8eداÚ\86Ù\88Ù\88Ù\86Û\95Ù\88Û\95 Ù\87Û\8eÙ\86راÙ\88Û\95کاÙ\86 Ù\84Û\95 Ù\84اپÛ\95Ú\95Û\95Û\8c Ù\85Û\8eÚ\98Ù\88Ù\88Û\8c Ú©Û\86Ù\86â\80\8cدا Ù\86Û\8cشاÙ\86 Ø¦Û\95درێت.',
+'undeletehistory' => 'ئÛ\95Ú¯Û\95ر Ù¾Û\95Ú\95Û\95Û\8cÛ\95Ú© Ø¨Ú¾Û\8eÙ\86Û\8cتÛ\95Ù\88Û\95Ø\8c Ú¾Û\95Ù\85Ù\88Ù\88 Ù¾Û\8eداÚ\86Ù\88Ù\88Ù\86Û\95Ù\88Û\95کاÙ\86 Ø¯Û\95Ú¯Û\95Ú\95Û\8eÙ\86Û\95Ù\88Û\95 Ø¨Û\86 Ù\85Û\8eÚ\98Ù\88Ù\88Û\8c Ù¾Û\95Ú\95Û\95.
+ئÛ\95Ú¯Û\95ر Ù\84Û\95 Ú©Ø§ØªÛ\8c Ø³Ú\95اÙ\86Û\95Ù\88Û\95Û\8c Ù¾Û\95Ú\95Û\95Ú©Û\95Ù\88Û\95Ø\8c Ù¾Û\95Ú\95Û\95Û\8cÛ\95Ú© Ù\87Û\95ر Ø¨Û\95Ù\88 Ù\86اÙ\88Û\95Ù\88Û\95 Ø¯Ø±Ù\88ست Ú©Ø±Ø§Ø¨Û\8eتØ\8c Ù¾Û\8eداÚ\86Ù\88Ù\88Ù\86Û\95Ù\88Û\95 Ú¯Û\95رÛ\8eÙ\86راÙ\88Û\95کاÙ\86 Ù\84Û\95 Ù\85Û\8eÚ\98Ù\88Ù\88Û\8c Ù¾Û\8eØ´Ù\88Ù\88Û\95Ú©Û\95دا Ø¯Û\95درÛ\95Ú©Û\95Ù\88ێت.',
 'undeletehistorynoadmin' => 'ئەم لاپەڕە سڕاوەتەوە.
 لەو پۆختەی لە خوارەوە دەیبینی، هۆکاری سڕینەوە و هەروا وردەکاریەکان سەبارە بەو کەسەی پێش سڕینەوە دەستکاری لاپەڕەکەی کردووە، دەست‌دەکەوێ.
 دەقی ڕاستی ئەم پێداچوونەوە سڕاوانە تەنها بۆ بەڕێوبەران دەست‌پێ‌گەیشتنی هەیە.',
@@ -2240,10 +2245,10 @@ $UNWATCHURL
 لەوانەیە خەریکی لە بەستەرێکی خراپ کەڵک وەر ئەگری ئا لەوانەیە پێداچوونەوەکە لە ئەرشیڤ لابرابێت.',
 'undelete-nodiff' => 'هیچ پێداچوونەوەیەکی پێشو نەدۆزرایەوە.',
 'undeletebtn' => 'هێنانەوە',
-'undeletelink' => 'ببÛ\8cÙ\86Û\95/بگÛ\95Ú\95ێنەوە',
+'undeletelink' => 'ببÛ\8cÙ\86Û\95/بھێنەوە',
 'undeleteviewlink' => 'دیتن',
 'undeletereset' => 'بردنەوە نووک',
-'undeleteinvert' => 'هەڵگێڕانەوەی هەڵبژاردن',
+'undeleteinvert' => 'ھەڵبژاردەکان پێچەوانە بکە',
 'undeletecomment' => 'هۆکار:',
 'undeletedrevisions' => '{{PLURAL:$1|1 پێداچوونەوە|$1 پێداچوونەوە}} هێنرایەوە',
 'undeletedrevisions-files' => '{{PLURAL:$1|1 پێداچوونەوە|$1 پێداچوونەوە}} و {{PLURAL:$2|1 پەڕگە|$2 پەڕگە}} هێنرایەوە',
@@ -2335,14 +2340,14 @@ $1',
 'ipbexpiry' => 'بەسەرچوون:',
 'ipbreason' => 'هۆکار:',
 'ipbreasonotherlist' => 'هۆکاری تر',
-'ipbreason-dropdown' => '*هۆکارە هاوبەشەکانی بەربست‌کران
-**دانانی زانیاریی هەڵە
-**لابردنی ناوەڕۆکی لاپەڕەکان
-**بÛ\95ستÛ\95ر Ø¨Û\86 Ù\84اپÛ\95Ú\95Û\95Û\8c Ø¯Û\95رÛ\95Ú©Û\8c Ù\86Û\95Ú¯Ù\88Ù\86جاÙ\88
+'ipbreason-dropdown' => '*ھۆکارە ھاوبەشەکانی بەربستن
+**دانانی زانیاریی ھەڵە
+**لابردنی ناوەرۆکی پەڕەکان
+**بەستەر بۆ پەڕەی دەرەکی نەگونجاو
 **نووسینی قسەی بێ‌مانا و بێ‌سوود
-**هەڵسووکەوت یان وتاری هاندەر بۆ توندوتیژی
-**بەکارهێنانی چەن هەژمارە پێکەوە
-**ناوی بەکارهێنەریی نەگونجاو',
+**ھەڵسوکەوت یان وتاری ھاندەر بۆ توندوتیژی
+**بەکارھێنانی چەند ھەژمار پێکەوە
+**ناوی بەکارھێنەریی نەگونجاو',
 'ipb-hardblock' => 'بەرگری بەکارھێنەرانی تۆمارکراو بکە لە دەستکاریکردن لە ڕێگەی ناونیشانی ئەم IPیەوە',
 'ipbcreateaccount' => 'بەرگری بکە لە دروستکردنی ھەژمار',
 'ipbemailban' => 'بەرگری بکە لە ئیمەیل ناردنی بەکارھێنەر',
@@ -2371,11 +2376,12 @@ $1',
 'unblocked' => '[[User:$1|$1]] لە بەربەست دەرهێنرا',
 'unblocked-id' => 'بەربەستی $1 لابرا',
 'blocklist' => 'بەکارھێنەر بەربەستکراوەکان',
-'ipblocklist' => 'بەکارھێنەر بەربەستکراوەکان',
+'ipblocklist' => 'بەکارھێنەرە بەربەستکراوەکان',
 'ipblocklist-legend' => 'دۆزینەوەی بەکارهێنەرێکی بەربەست‌کراو',
 'blocklist-userblocks' => 'ھەژمارە بەربەستکراوەکان بشارەوە',
 'blocklist-target' => 'مەبەست',
 'blocklist-expiry' => 'ھەتا:',
+'blocklist-by' => 'بەڕێوەبەری بەربەستکەر',
 'blocklist-params' => 'پارامەترەکانی بەربەستن',
 'blocklist-reason' => 'ھۆکار',
 'ipblocklist-submit' => 'گەڕان',
@@ -2383,11 +2389,11 @@ $1',
 'ipblocklist-otherblocks' => '{{PLURAL:$1|بەربەستنەکانی}} تر',
 'infiniteblock' => 'بێکۆتایی',
 'expiringblock' => 'لە $2، $1 ماوەی بەسەر دەچێ',
-'anononlyblock' => 'تەنها بۆ چەن سات',
-'noautoblockblock' => 'بەربەستی خۆکار لەکار خسترا',
-'createaccountblock' => 'درووست‌کردنی هەژمارە بەربەست کرا',
-'emailblock' => 'ئی‌مەیل بەربەست‌کرا',
-'blocklist-nousertalk' => 'دەستکاری لاپەڕەی وتووێژی خۆ ناکرێت',
+'anononlyblock' => 'تەنیا بەکارھێنەرە بێناوەکان',
+'noautoblockblock' => 'بەربەستنی خۆگەڕ ناچالاکە',
+'createaccountblock' => 'دروستکردنی ھەژمار ناچالاکە',
+'emailblock' => 'ئیمەیل ناچالاکە',
+'blocklist-nousertalk' => 'دەستکاریکردنی پەڕەی وتووێژی خۆی ناچالاکە',
 'ipblocklist-empty' => 'لیستی بەربەستەکان بەتاڵە',
 'ipblocklist-no-results' => 'ئای‌پی ئەدرەس یان ناوی‌ بەکارهێنەری داواکراو بەربەست نەکراوە.',
 'blocklink' => 'بەربەستن',
@@ -2400,15 +2406,15 @@ $1',
 'blocklogpage' => 'لۆگی بەربەستن',
 'blocklog-showlog' => 'ئەم بەکارھێنەرە پێشتر بربەست کراوە.
 لۆگی بەربەستن لە ژێرەوە ھاتووە:',
-'blocklogentry' => '[[$1]] بەربەست کرا بۆ ماوەی $2 $3',
+'blocklogentry' => '[[$1]]ی بۆ ماوەی $2 بەربەست کرد $3',
 'reblock-logentry' => 'دۆخی ئاستەنگ کردنی [[$1]]  بۆ گۆڕدرا بۆ ماوەی $2 $3',
 'blocklogtext' => 'ئەمە لۆگێکی کردەوەکانی بەربەستن یان لابردنی بەربەستنی بەکارھێنەرە.
 ئەو ئایپی ئەدرەسانە خۆکارانە بەربستکراون بە ڕیز نەکراون.
 سەیری [[Special:BlockList|لیستی بەربەستن]] بکە بۆ بینینی ئەو بەرگری و بەربەستنانە ئێستا لە بەرکاردان.',
-'unblocklogentry' => 'بەربەستنی "$1" بەتاڵ کرا',
-'block-log-flags-anononly' => 'تەنیا بەکارھێنەرە نەناسراوەکان',
-'block-log-flags-nocreate' => 'دروستکردنی ھەژمار ناچالاک کراو',
-'block-log-flags-noautoblock' => 'بەربست‌کردنی خۆکار لە کار خسترا',
+'unblocklogentry' => '$1ی کردەوە',
+'block-log-flags-anononly' => 'تەنیا بەکارھێنەرە بێناوەکان',
+'block-log-flags-nocreate' => 'دروستکردنی ھەژمار ناچالاک کرا',
+'block-log-flags-noautoblock' => 'بەربەستنی خۆگەڕ ناچالاک کرا',
 'block-log-flags-noemail' => 'ئیمەیل ناچالاک کرا',
 'block-log-flags-nousertalk' => 'دەستکاریکردنی پەڕەی وتووێژی خۆی ناچالاک کرا',
 'block-log-flags-angry-autoblock' => 'بەربەستکردنی خۆگەڕی پێشکەوتوو چالاک کرا',
@@ -2556,7 +2562,7 @@ $1',
 بۆ هەناردنی لاپەڕەکان، سەردێڕەکان لە چوارچێوەی دەقی خوارەوە بنووسە، هەر هێڵێک یەک سەردێڕ. هەروا هەڵبژێرە ئایا پێداچوونەوەی ئێستا و هەموو پێداچوونەوە کۆنەکانت دەوێ یان هەر پێداچوونەوەی ئێستا و زانیاریی سەبارەت بە دوایین دەستکاری.
 
 لە بابەتی دواتر هەروەها دەتوانی لە بەستەرێک کەڵک وەرگریت، بۆ نموونە [[{{#Special:Export}}/{{MediaWiki:Mainpage}}]] بۆ لەپەڕەی "[[{{MediaWiki:Mainpage}}]]".',
-'exportall' => 'گشت پەڕەکان ھەناردە بکە',
+'exportall' => 'Ú¾Û\95Ù\85Ù\88Ù\88 پەڕەکان ھەناردە بکە',
 'exportcuronly' => 'تەنها پێداچوونەوەی ئێستا لەخۆ بگرێت نەک هەموو مێژوو',
 'exportnohistory' => "----
 '''ئاگاداربە: '''ھەناردنی ھەموو مێژووی پەڕەکان لەم فۆرمەوە لەبەر ھۆکاری ڕێخستن، داخراوە.",
@@ -2598,7 +2604,7 @@ $1',
 'thumbnail_image-missing' => 'لەوە دەچێ پەڕگە ون بوبێت: $1',
 
 # Special:Import
-'import' => 'هێنانەناوەی لاپەڕەکان',
+'import' => 'ھاوردنی پەڕەکان',
 'importinterwiki' => 'هێنانەناوەی ترانس‌ویکی',
 'import-interwiki-text' => 'بۆ هێنانە‌ناوە ویکی‌یەک و سەردێڕێکی لاپەڕە هەڵبژێرە.
 ڕێکەوتەکانی پێداچوونەوە و ناوی دەستکاری‌کەرەکان دەپارێزدرێت.
@@ -2633,6 +2639,7 @@ $1',
 'import-parse-failure' => 'سەرنەکەوتن لە هێنانەناوەی XML',
 'import-noarticle' => 'هیچ لاپەڕەیەک نیە بۆ هێنانەناوە',
 'import-nonewrevisions' => 'هەموو پێداچوونەوەکان لە پێش‌دا هێنراونەتەناوە.',
+'xml-error-string' => '$1 لە دێڕی $2، ستوونی $3 (بایت $4): $5',
 'import-upload' => 'بارکردنی دراوەی XML',
 'import-token-mismatch' => 'لەدەست‌ڕۆشتنی دراوەکانی ئەو بەشە.
 تکایە دیسان تاقی‌بکەوە.',
@@ -2640,8 +2647,8 @@ $1',
 
 # Import log
 'importlogpage' => 'هێنانەناوەی لۆگ',
-'importlogpagetext' => 'هێنانەناوەی لاپەڕەکان دەگەل مێژووی دەستکاری لە ویکی‌یەکانی دیکەی لە لایەن بەرێوبەرایەتی.',
-'import-logentry-upload' => 'هێنراوەناوەی [[$1]] بە بارکردنی پەڕگە',
+'importlogpagetext' => 'ھاوردنی پەڕەکان لەگەڵ مێژووی دەستکاری لە ویکییەکانی ترەوە.',
+'import-logentry-upload' => 'ھاوردنی [[$1]] بە بارکردنی پەڕگە',
 'import-logentry-upload-detail' => '$1 {{PLURAL:$1|پێداچوونەوە|پێداچوونەوە}}',
 'import-logentry-interwiki' => 'ترانس‌ویکی‌کراو $1',
 'import-logentry-interwiki-detail' => '$1 {{PLURAL:$1|پێداچوونەوە|پێداچوونەوە}} لە $2',
@@ -2752,12 +2759,13 @@ $1',
 'pageinfo-default-sort' => 'کلیلی ڕیزکردنی بەرگریمانە',
 'pageinfo-length' => 'قەبارەی پەڕە (بایت)',
 'pageinfo-article-id' => 'زنجیرەی پەڕە',
+'pageinfo-language' => 'زمانی ناوەرۆکی پەڕە',
 'pageinfo-robot-policy' => 'چۆنێتیی مۆتۆڕی گەڕان',
 'pageinfo-robot-index' => 'شیاو بۆ پێرستکردن',
 'pageinfo-robot-noindex' => 'نەشیاو بۆ پێرستکردن',
 'pageinfo-views' => 'ژمارەی بینینەکان',
 'pageinfo-watchers' => 'ژمارەی چاودێرانی پەڕە',
-'pageinfo-redirects-name' => 'ڕەوانەکردنەکان بۆ ئەم پەڕەیە',
+'pageinfo-redirects-name' => 'ڕەوانەکەرەکان بۆ ئەم پەڕەیە',
 'pageinfo-subpages-name' => 'ژێرپەڕەکانی ئەم پەڕەیە',
 'pageinfo-subpages-value' => '$1 ($2 {{PLURAL:$2|ڕەوانەکەر}}; $3 {{PLURAL:$3|ڕەوانەنەکەر}})',
 'pageinfo-firstuser' => 'دروستکەری پەڕە',
@@ -2771,6 +2779,7 @@ $1',
 'pageinfo-templates' => 'داڕێژە{{PLURAL:$1|ی بەکارگیراو| بەکارگیراوەکان}} ($1)',
 'pageinfo-toolboxlink' => 'زانیاریی پەڕە',
 'pageinfo-redirectsto-info' => 'زانیاری',
+'pageinfo-contentpage' => 'ھەژمارکراو وەک پەڕەی بەناوەرۆک',
 'pageinfo-contentpage-yes' => 'بەڵێ',
 'pageinfo-protect-cascading-yes' => 'بەڵێ',
 
@@ -2821,6 +2830,7 @@ $1',
 'file-info-size' => '$1 × $2 پیکسێل، قەبارەی پەڕگە: $3، جۆری MIME: $4',
 'file-nohires' => 'رەزۆلوشنی سەرتر لەمە لە بەردەست دا نیە.',
 'svg-long-desc' => 'پەڕگەی SVG، بە ناو $1 × $2 پیکسەڵ، قەبارەی پەڕگە: $3',
+'svg-long-error' => 'پەڕگەی SVGی نادروست: $1',
 'show-big-image' => 'گەورەکردنەوە',
 'show-big-image-preview' => 'قەبارەی ئەم پێشبینینە: $1.',
 'show-big-image-other' => '{{PLURAL:$2|ڕەزەلووشنی|ڕەزەلووشنەکانی}} تر: $1.',
@@ -2939,11 +2949,13 @@ $1',
 'exif-lens' => 'لێنزی بەکارگیراو',
 'exif-serialnumber' => 'ژمارە زنجیرەی کامێرا',
 'exif-cameraownername' => 'خاوەنی کامێرا',
+'exif-rating' => 'تازیاری (لە ٥)',
 'exif-copyrighted' => 'ڕەوشی مافی لەبەرگرتنەوە',
 'exif-pngfilecomment' => 'تێبینیی پەڕگەی PNG',
 'exif-contentwarning' => 'ھۆشداری ناوەرۆک',
 'exif-giffilecomment' => 'تێبینیی پەڕگەی GIF',
 'exif-intellectualgenre' => 'جۆری بابەت',
+'exif-subjectnewscode' => 'کۆدی بابەت',
 
 # Make & model, can be wikified in order to link to the camera and model name
 'exif-subjectnewscode-value' => '$2 ($1)',
@@ -3210,6 +3222,8 @@ $5
 'imgmultigoto' => 'بڕۆ بۆ پەڕەی $1',
 
 # Table pager
+'ascending_abbrev' => 'بەرەوە ژوور',
+'descending_abbrev' => 'بەرەوە ژێر',
 'table_pager_next' => 'پەڕەی داهاتوو',
 'table_pager_prev' => 'پەڕەی پێشوو',
 'table_pager_first' => 'پەرەی یەکەم',
@@ -3356,19 +3370,19 @@ $5
 'specialpages-group-maintenance' => 'ڕاپۆرتەکانی چاکسازی',
 'specialpages-group-other' => 'پەڕە تایبەتەکانی دیکە',
 'specialpages-group-login' => 'چوونەژوورەوە / دروستکردنی ھەژمار',
-'specialpages-group-changes' => 'دوایین گۆڕانکارییەکان و ڕەشنووسەکان',
+'specialpages-group-changes' => 'دوایین گۆڕانکارییەکان و لۆگەکان',
 'specialpages-group-media' => 'ڕاپۆرتەکان و بارکردنەکانی میدیا',
 'specialpages-group-users' => 'بەکارھێنەران و مافەکان',
 'specialpages-group-highuse' => 'پەڕە زۆر بەکار ھێنراوەکان',
-'specialpages-group-pages' => 'Ù\84Û\8cستەکانی پەڕەکان',
+'specialpages-group-pages' => 'Ù¾Û\8eرستەکانی پەڕەکان',
 'specialpages-group-pagetools' => 'ئامرازەکانی پەڕە',
-'specialpages-group-wiki' => 'داتا و ئامرازەکانی ویکی',
+'specialpages-group-wiki' => 'دراÙ\88Û\95کاÙ\86 و ئامرازەکانی ویکی',
 'specialpages-group-redirects' => 'پەڕە تایبەتەکانی رەوانکردنەوە',
 'specialpages-group-spam' => 'ئامرازەکانی سپەم',
 
 # Special:BlankPage
 'blankpage' => 'پەڕەی واڵا',
-'intentionallyblankpage' => 'ئÛ\95Ù\85 Ù\84اپÛ\95Ú\95Û\95 Ø¨Û\95Ù\82Û\95ستÛ\8c Ø¨Û\95تاڵ Ù\87Û\8eڵراÙ\88Û\95تÛ\95Ù\88Û\95',
+'intentionallyblankpage' => 'ئÛ\95Ù\85 Ù¾Û\95Ú\95Û\95Û\8cÛ\95 Ù\84Û\95Ù\82Û\95ست Ù\88اڵا Ú¾Û\8eڵراÙ\88Û\95تÛ\95Ù\88Û\95.',
 
 # External image whitelist
 'external_image_whitelist' => ' #ئەم دێڕ ھەر بەم جۆرە کە ھەیە بەجێبێڵە<pre>
@@ -3426,9 +3440,9 @@ $5
 # New logging system
 'logentry-delete-delete' => '$1 پەڕەی $3ی سڕییەوە',
 'logentry-delete-restore' => '$1 پەڕەی $3ی ھێنایەوە',
-'logentry-delete-revision' => '$1 دەرکەوتنی {{PLURAL:$5|پێداچوونەوەیەکی|$5 پێداچوونەوەی}} پەڕەی $3 گۆڕیی: $4',
+'logentry-delete-revision' => '$1 دەرکەوتنی {{PLURAL:$5|پێداچوونەوەیەکی|$5 پێداچوونەوەی}} پەڕەی $3ی گۆڕیی: $4',
 'logentry-suppress-delete' => '$1 پەڕەی $3 بەرگری کرد.',
-'revdelete-content-hid' => 'شاردنەوەی ناوەرۆک',
+'revdelete-content-hid' => 'ناوەرۆک شاردراوە',
 'revdelete-summary-hid' => 'کورتەی دەستکاری شاردراوە',
 'revdelete-uname-hid' => 'ناوی بەکارهێنەری شاراوە',
 'revdelete-content-unhid' => 'ناوەرۆک نیشان درا',
@@ -3444,7 +3458,7 @@ $5
 'logentry-newusers-create' => 'ھەژماری بەکارھێنەریی $1 دروست کرا',
 'logentry-newusers-create2' => 'ھەژماری بەکارھێنەریی $3 لە لایەن $1 دروست کرا',
 'logentry-newusers-autocreate' => 'ھەژماری $1 بە شێوەی خۆگەڕ دروستکرا',
-'newuserlog-byemail' => 'تێپەڕوشە بە ئیمەیل نێردرا.',
+'rightsnone' => '(ھیچ)',
 
 # Feedback
 'feedback-subject' => 'بابەت:',
@@ -3479,6 +3493,4 @@ $5
 'duration-centuries' => '$1 {{PLURAL:$1|سەدە|سەدە}}',
 'duration-millennia' => '$1 {{PLURAL:$1|ھەزارە|ھەزارە}}',
 
-# Unknown messages
-'svg-long-error' => 'پەڕگەی SVGی نادروست: $1',
 );
index dde0ed4..1184b13 100644 (file)
@@ -607,6 +607,9 @@ Tistingan mo i-prefiks ang imo pamangkot upod sang ''tanan:'' para makita mo ang
 
 'grouppage-sysop' => '{{ns:project}}:Mga manugdumala',
 
+# Special:Log/newusers
+'newuserlogpage' => 'Listahan sang pag-ubra sang manug-usar',
+
 # User rights log
 'rightslog' => 'Lista sang mga karapatan sang manug-usar',
 
@@ -714,9 +717,6 @@ Ang paglarawan nga yara sa ibabaw sang [$2 pahina sang paglarawan sang akta] sin
 # Special:LinkSearch
 'linksearch' => 'Panggwa nga mga link',
 
-# Special:Log/newusers
-'newuserlogpage' => 'Listahan sang pag-ubra sang manug-usar',
-
 # Special:ListGroupRights
 'listgrouprights-members' => '(lista sang mga myembro)',
 
index 70d8a54..f824e6f 100644 (file)
@@ -730,7 +730,6 @@ $2 къулланыджысына вакътынджа <code>$3</code> паро
 'template-protected' => '(къорчалав алтында)',
 'template-semiprotected' => '(къысмен къорчалав алтында)',
 'hiddencategories' => 'Бу саифе {{PLURAL:$1|1|$1}} гизли категориягъа менсюптир:',
-'nocreatetitle' => 'Саифе яратув сынъырлыдыр',
 'nocreatetext' => '{{SITENAME}} сайтында янъы саифе яратув сынъырлыдыр.
 Кери къайтып мевджут олгъан саифени денъиштире, [[Special:UserLogin|отурым ача я да янъы бир эсап яратып оласынъыз]].',
 'nocreate-loggedin' => 'Янъы саифелер яратмагъа изининъиз ёкътыр.',
@@ -1023,6 +1022,10 @@ $3 мына бу себепни бильдирди: ''$2''",
 'grouppage-bureaucrat' => '{{ns:project}}:Бюрократлар',
 'grouppage-suppress' => '{{ns:project}}:Тефтишчилер',
 
+# Special:Log/newusers
+'newuserlogpage' => 'Янъы къулланыджы журналы',
+'newuserlogpagetext' => 'Энъ сонъки къайд олгъан къулланыджы журналы.',
+
 # User rights log
 'rightslog' => 'Къулланыджынынъ акълары журналы',
 
@@ -1375,10 +1378,6 @@ $3 мына бу себепни бильдирди: ''$2''",
 'listusers-submit' => 'Косьтер',
 'listusers-noresult' => 'Ич бир къулланыджы тапылмады.',
 
-# Special:Log/newusers
-'newuserlogpage' => 'Янъы къулланыджы журналы',
-'newuserlogpagetext' => 'Энъ сонъки къайд олгъан къулланыджы журналы.',
-
 # Special:ListGroupRights
 'listgrouprights-members' => '(азалар джедвели)',
 
@@ -1470,6 +1469,8 @@ $UNWATCHURL
 
 Ярдым ве теклифлер ичюн:
 {{canonicalurl:{{MediaWiki:Helppage}}}}',
+'created' => 'яратылды',
+'changed' => 'денъиштирильди',
 
 # Delete
 'deletepage' => 'Саифени ёкъ эт',
@@ -2098,9 +2099,6 @@ $5
 # HTML forms
 'htmlform-reset' => 'Денъишикликлерни кери ал',
 
-# New logging system
-'newuserlog-byemail' => 'пароль e-mail вастасынен йиберильген',
-
 # Search suggestions
 'searchsuggest-containing' => 'ичинде бу олгъан...',
 
index d68ea76..4bc2ac1 100644 (file)
@@ -726,7 +726,6 @@ Jurnalnıñ soñki yazısı aşağıda berilgen:",
 'template-protected' => '(qorçalav altında)',
 'template-semiprotected' => '(qısmen qorçalav altında)',
 'hiddencategories' => 'Bu saife {{PLURAL:$1|1|$1}} gizli kategoriyağa mensüptir:',
-'nocreatetitle' => 'Saife yaratuv sıñırlıdır',
 'nocreatetext' => '{{SITENAME}} saytında yañı saife yaratuv sıñırlıdır.
 Keri qaytıp mevcut olğan saifeni deñiştire, [[Special:UserLogin|oturım aça ya da yañı bir esap yaratıp olasıñız]].',
 'nocreate-loggedin' => 'Yañı saifeler yaratmağa iziniñiz yoqtır.',
@@ -1019,6 +1018,10 @@ Eger bildirseñiz, saifelerdeki deñişmelerni kimniñ yapqanını köstermek i
 'grouppage-bureaucrat' => '{{ns:project}}:Bürokratlar',
 'grouppage-suppress' => '{{ns:project}}:Teftişçiler',
 
+# Special:Log/newusers
+'newuserlogpage' => 'Yañı qullanıcı jurnalı',
+'newuserlogpagetext' => 'Eñ sоñki qayd оlğan qullanıcı jurnalı.',
+
 # User rights log
 'rightslog' => 'Qullanıcınıñ aqları jurnalı',
 
@@ -1370,10 +1373,6 @@ Ayrıca [[Special:WantedCategories|talap etilgen kategoriyalarnıñ cedveline]]
 'listusers-submit' => 'Köster',
 'listusers-noresult' => 'İç bir qullanıcı tapılmadı.',
 
-# Special:Log/newusers
-'newuserlogpage' => 'Yañı qullanıcı jurnalı',
-'newuserlogpagetext' => 'Eñ sоñki qayd оlğan qullanıcı jurnalı.',
-
 # Special:ListGroupRights
 'listgrouprights-members' => '(azalar cedveli)',
 
@@ -1463,6 +1462,8 @@ $UNWATCHURL
 
 Yardım ve teklifler içün:
 {{canonicalurl:{{MediaWiki:Helppage}}}}',
+'created' => 'yaratıldı',
+'changed' => 'deñiştirildi',
 
 # Delete
 'deletepage' => 'Saifeni yoq et',
@@ -2092,9 +2093,6 @@ Bitirgen soñ "{{int:Watchlistedit-raw-submit}}" yazısına basıñız.
 # HTML forms
 'htmlform-reset' => 'Deñişikliklerni keri al',
 
-# New logging system
-'newuserlog-byemail' => 'parol e-mail vastasınen yiberilgen',
-
 # Search suggestions
 'searchsuggest-containing' => 'içinde bu olğan...',
 
index ada255e..45bbac7 100644 (file)
@@ -56,19 +56,19 @@ $namespaceNames = array(
 );
 
 $namespaceAliases = array(
-    'Uživatel_diskuse'      => NS_USER_TALK,      # old literal translation backward compatibility
-    'Uživatelka_diskuse'    => NS_USER_TALK,      # female complement to old literal translation style
-    '$1_diskuse'            => NS_PROJECT_TALK,   # old literal translation backward compatibility
-    'Soubor_diskuse'        => NS_FILE_TALK,      # old literal translation backward compatibility
-    'MediaWiki_diskuse'     => NS_MEDIAWIKI_TALK, # old literal translation backward compatibility
-    'Šablona_diskuse'       => NS_TEMPLATE_TALK,  # old literal translation backward compatibility
-    'Nápověda_diskuse'      => NS_HELP_TALK,      # old literal translation backward compatibility
-    'Kategorie_diskuse'     => NS_CATEGORY_TALK,  # old literal translation backward compatibility
+       'Uživatel_diskuse'      => NS_USER_TALK,      # old literal translation backward compatibility
+       'Uživatelka_diskuse'    => NS_USER_TALK,      # female complement to old literal translation style
+       '$1_diskuse'            => NS_PROJECT_TALK,   # old literal translation backward compatibility
+       'Soubor_diskuse'        => NS_FILE_TALK,      # old literal translation backward compatibility
+       'MediaWiki_diskuse'     => NS_MEDIAWIKI_TALK, # old literal translation backward compatibility
+       'Šablona_diskuse'       => NS_TEMPLATE_TALK,  # old literal translation backward compatibility
+       'Nápověda_diskuse'      => NS_HELP_TALK,      # old literal translation backward compatibility
+       'Kategorie_diskuse'     => NS_CATEGORY_TALK,  # old literal translation backward compatibility
 );
 
 $namespaceGenderAliases = array(
-    NS_USER      => array( 'male' => 'Uživatel', 'female' => 'Uživatelka' ),
-    NS_USER_TALK => array( 'male' => 'Diskuse_s_uživatelem', 'female' => 'Diskuse_s_uživatelkou' ),
+       NS_USER      => array( 'male' => 'Uživatel', 'female' => 'Uživatelka' ),
+       NS_USER_TALK => array( 'male' => 'Diskuse_s_uživatelem', 'female' => 'Diskuse_s_uživatelkou' ),
 );
 
 $specialPageAliases = array(
@@ -84,6 +84,7 @@ $specialPageAliases = array(
        'Categories'                => array( 'Kategorie' ),
        'ChangeEmail'               => array( 'Změna_emailu', 'Zmena_emailu' ),
        'ChangePassword'            => array( 'Změna_hesla', 'Zmena_hesla', 'Resetovat_heslo' ),
+       'ComparePages'              => array( 'Porovnání_stránek', 'PorovnáníStránek', 'Porovnani_stranek', 'PorovnaniStranek' ),
        'Confirmemail'              => array( 'Potvrdit_e-mail' ),
        'Contributions'             => array( 'Příspěvky', 'Prispevky' ),
        'CreateAccount'             => array( 'Vytvořit_účet', 'Vytvorit_ucet' ),
@@ -493,6 +494,7 @@ $messages = array(
 'newwindow' => '(otevře se v novém okně)',
 'cancel' => 'Storno',
 'moredotdotdot' => 'Další…',
+'morenotlisted' => 'Další neuvedené…',
 'mypage' => 'Stránka',
 'mytalk' => 'Diskuse',
 'anontalk' => 'Diskuse k této IP adrese',
@@ -792,7 +794,7 @@ Nezapomeňte si upravit své [[Special:Preferences|nastavení {{grammar:2sg|{{SI
 'gotaccount' => "Už jste registrováni? '''$1'''.",
 'gotaccountlink' => 'Přihlaste se',
 'userlogin-resetlink' => 'Zapomněli jste přihlašovací údaje?',
-'createaccountmail' => 'pomocí e-mailu',
+'createaccountmail' => 'Použít dočasné náhodné heslo a odeslat ho na níže uvedenou e-mailovou adresu',
 'createaccountreason' => 'Důvod:',
 'badretype' => 'Vámi napsaná hesla nesouhlasí.',
 'userexists' => 'Zadané uživatelské jméno se již používá.
@@ -862,6 +864,7 @@ Počkejte chvíli, než to zkusíte znovu.',
 # E-mail sending
 'php-mail-error-unknown' => 'Neznámá chyba v PHP funkci mail()',
 'user-mail-no-addy' => 'Pokus o odeslání e-mailu bez e-mailové adresy',
+'user-mail-no-body' => 'Pokus o odeslání prázdného nebo nesmyslně krátkého e-mailu.',
 
 # Change password dialog
 'resetpass' => 'Změna hesla',
@@ -925,6 +928,7 @@ Dočasné heslo: $2',
 'changeemail-oldemail' => 'Stávající e-mailová adresa:',
 'changeemail-newemail' => 'Nová e-mailová adresa:',
 'changeemail-none' => '(žádná)',
+'changeemail-password' => 'Vaše heslo do {{gender:2sg|{{SITENAME}}}}:',
 'changeemail-submit' => 'Změnit e-mail',
 'changeemail-cancel' => 'Storno',
 
@@ -1080,7 +1084,8 @@ Uložením příspěvku se zavazujete, že je vaším dílem nebo je zkopírová
 Uložením příspěvku se zavazujete, že je vaším dílem nebo je zkopírován ze zdrojů, které nejsou chráněny autorským právem (tzv. <em>public domain</em>), podrobnosti najdete na $1. '''Nekopírujte díla chráněná autorským právem bez dovolení!'''",
 'longpageerror' => "'''Chyba: Pokoušíte se uložit text o velikosti {{PLURAL:$1|$1 KiB}}, přičemž dovolené maximum je {{PLURAL:$2|$2 KiB}}.'''
 Vaše změna nemůže být uložena.",
-'readonlywarning' => "'''VAROVÁNÍ: Databáze byla uzamčena kvůli údržbě, takže nebudete moci uložit své změny. Můžete si okopírovat text do souboru a uložit ho na později.'''
+'readonlywarning' => "'''Varování: Databáze byla uzamčena kvůli údržbě, takže momentálně nebudete moci uložit své změny.'''
+Můžete si okopírovat text do souboru a uložit ho na později.
 
 Správce serveru, který databázi zamkl, poskytl toto zdůvodnění: $1",
 'protectedpagewarning' => "'''Varování: Tato stránka byla zamčena, takže ji mohou editovat pouze správci.'''
@@ -1097,7 +1102,6 @@ Níže je pro přehled zobrazen nejnovější protokolovací záznam:",
 'template-semiprotected' => '(polozamčena)',
 'hiddencategories' => 'Tato stránka je zařazena {{PLURAL:$1|v jedné skryté kategorii|ve $1 skrytých kategoriích|v $1 skrytých kategoriích}}:',
 'edittools' => '<!-- Tento text bude zobrazen pod formuláři pro editaci stránek a načítání souborů. -->',
-'nocreatetitle' => 'Vytváření nových stránek je omezeno',
 'nocreatetext' => 'Na {{grammar:6sg|{{SITENAME}}}} je možnost vytváření nových stránek omezena.
 Můžete se vrátit a editovat již existující stránku, nebo [[Special:UserLogin|se přihlásit či se registrovat]].',
 'nocreate-loggedin' => 'Nemáte povoleno zakládat nové stránky.',
@@ -1642,15 +1646,13 @@ Tuto operaci nelze vrátit zpět.',
 'right-sendemail' => 'Odesílání e-mailů ostatním uživatelům',
 'right-passwordreset' => 'Prohlížení e-mailů pro znovunastavení hesla',
 
+# Special:Log/newusers
+'newuserlogpage' => 'Kniha nových uživatelů',
+'newuserlogpagetext' => 'Toto je záznam nově zaregistrovaných uživatelů.',
+
 # User rights log
 'rightslog' => 'Kniha práv uživatelů',
 'rightslogtext' => 'Toto je záznam změn uživatelských práv.',
-'rightslogentry' => 'změnil pro $1 zařazení ve skupinách z $2 na $3',
-'rightslogentry-autopromote' => 'byl automaticky povýšen z $2 na $3',
-'logentry-rights-rights' => '$1 {{GENDER:$1|změnil|změnila}} členství $3 ve skupinách z $4 na $5',
-'logentry-rights-rights-legacy' => '$1 {{GENDER:$1|změnil|změnila}} členství $3 ve skupinách',
-'logentry-rights-autopromote' => '$1 {{GENDER:$1|byl automaticky povýšen|byla automaticky povýšena}} z $4 na $5',
-'rightsnone' => '(žádné)',
 
 # Associated actions - in the sentence "You do not have permission to X"
 'action-read' => 'přečíst tuto stránku',
@@ -2271,7 +2273,7 @@ Podívejte se také na [[Special:WantedCategories|žádané kategorie]].',
 'linksearch-ok' => 'Hledat',
 'linksearch-text' => 'Lze používat zástupné znaky, např. „*.wikipedia.org“.
 Povinná je přinejmenším doména nejvyššího řádu, např. „*.org“.<br />
-Podporované protokoly: <code>$1</code> (pokud není protokol uveden, použije se http://).',
+{{PLURAL:$2|Podporovaný protokol|Podporované protokoly}}: <code>$1</code> (pokud není protokol uveden, použije se http://).',
 'linksearch-line' => '$2 odkazuje na $1',
 'linksearch-error' => 'Zástupné znaky lze použít jen na začátku doménového jména.',
 
@@ -2284,16 +2286,12 @@ Podporované protokoly: <code>$1</code> (pokud není protokol uveden, použije s
 # Special:ActiveUsers
 'activeusers' => 'Seznam aktivních uživatelů',
 'activeusers-intro' => 'Toto je seznam uživatelů, kteří byli nějak aktivní v {{plural:$1|posledním dni|posledních $1 dnech}}.',
-'activeusers-count' => '$1 {{PLURAL:$1|editace|editace|editací}} během {{PLURAL:$3|posledního dne|posledních $3 dnů}}',
+'activeusers-count' => '$1 {{PLURAL:$1|akce|akce|akcí}} během {{PLURAL:$3|posledního dne|posledních $3 dnů}}',
 'activeusers-from' => 'Zobrazit uživatele počínaje od:',
 'activeusers-hidebots' => 'Skrýt roboty',
 'activeusers-hidesysops' => 'Skrýt správce',
 'activeusers-noresult' => 'Nenalezen žádný uživatel.',
 
-# Special:Log/newusers
-'newuserlogpage' => 'Kniha nových uživatelů',
-'newuserlogpagetext' => 'Toto je záznam nově zaregistrovaných uživatelů.',
-
 # Special:ListGroupRights
 'listgrouprights' => 'Práva skupin uživatelů',
 'listgrouprights-summary' => 'Toto je seznam uživatelských skupin definovaných na této wiki a&nbsp;jejich přístupových práv.
@@ -2360,7 +2358,8 @@ E-mailová adresa, kterou máte uvedenu v [[Special:Preferences|nastavení]], se
 'watchnologin' => 'Nejste přihlášen(a)',
 'watchnologintext' => 'Pro sledování stránek se musíte [[Special:UserLogin|přihlásit]].',
 'addwatch' => 'Přidat do sledovaných stránek',
-'addedwatchtext' => 'Stránka „[[:$1]]“ byla přidána mezi stránky, které [[Special:Watchlist|sledujete]]. Budoucí změny této stránky se objeví <b>tučně</b> v [[Special:RecentChanges|seznamu posledních změn]], aby bylo snadnější si jí povšimnout. Pokud budete později chtít stránku ze seznamu sledovaných smazat, klikněte na „Nesledovat tuto stránku“ v liště nástrojů.',
+'addedwatchtext' => 'Stránka „[[:$1]]“ byla přidána mezi stránky, které sledujete.
+Ve [[Special:Watchlist|sledovaných stránkách]] se tak budou objevovat budoucí změny této stránky a přidružené diskuse.',
 'removewatch' => 'Vyřadit ze sledovaných stránek',
 'removedwatchtext' => 'Stránka „[[:$1]]“ byla vyřazena z vašeho [[Special:Watchlist|seznamu sledovaných stránek]].',
 'watch' => 'Sledovat',
@@ -2394,7 +2393,7 @@ E-mailová adresa, kterou máte uvedenu v [[Special:Preferences|nastavení]], se
 'enotif_subject_moved' => '$2 {{gender:$2|přesunul|přesunula}} stránku $1 na {{grammar:6sg|{{SITENAME}}}}',
 'enotif_subject_restored' => '$2 {{gender:$2|obnovil|obnovila}} stránku $1 na {{grammar:6sg|{{SITENAME}}}}',
 'enotif_subject_changed' => '$2 {{gender:$2|změnil|změnila}} stránku $1 na {{grammar:6sg|{{SITENAME}}}}',
-'enotif_body_intro_deleted' => 'V $PAGEEDITDATE {{gender:$2|smazal|smazala}} $2 na {{grammar:6sg|{{SITENAME}}}} stránku $1, vizte aktuální verzi na $3 .',
+'enotif_body_intro_deleted' => '$2 {{gender:$2|smazal|smazala}} $PAGEEDITDATE na {{grammar:6sg|{{SITENAME}}}} stránku $1, vizte $3.',
 'enotif_body_intro_created' => 'V $PAGEEDITDATE {{gender:$2|založil|založila}} $2 na {{grammar:6sg|{{SITENAME}}}} stránku $1, vizte aktuální verzi na $3 .',
 'enotif_body_intro_moved' => 'V $PAGEEDITDATE {{gender:$2|přesunul|přesunula}} $2 na {{grammar:6sg|{{SITENAME}}}} stránku $1, vizte aktuální verzi na $3 .',
 'enotif_body_intro_restored' => 'V $PAGEEDITDATE {{gender:$2|obnovil|obnovila}} $2 na {{grammar:6sg|{{SITENAME}}}} stránku $1, vizte aktuální verzi na $3 .',
@@ -2428,6 +2427,8 @@ $UNWATCHURL
 
 Rady a kontakt:
 {{canonicalurl:{{MediaWiki:Helppage}}}}',
+'created' => 'vytvořil',
+'changed' => 'upravil',
 
 # Delete
 'deletepage' => 'Smazat stránku',
@@ -2493,6 +2494,8 @@ Můžete si prohlédnout též [[Special:ProtectedPages|seznam aktuálně platn
 'prot_1movedto2' => 'Stránka [[$1]] přemístěna na stránku [[$2]]',
 'protect-badnamespace-title' => 'Nezamykatelný jmenný prostor',
 'protect-badnamespace-text' => 'Stránky v tomto jmenném prostoru nelze zamykat.',
+'protect-norestrictiontypes-text' => 'Tuto stránku nelze zamknout, protože nejsou k dispozici žádné typy zámků.',
+'protect-norestrictiontypes-title' => 'Nezamykatelná stránka',
 'protect-legend' => 'Potvrdit zamčení',
 'protectcomment' => 'Důvod:',
 'protectexpiry' => 'Čas vypršení:',
@@ -2507,9 +2510,9 @@ Současné nastavení pro tuto stránku je: '''$1''':",
 Současné nastavení pro tuto stránku je: '''$1''':",
 'protect-cascadeon' => 'Tato stránka je právě zamčena, protože je vložena do {{PLURAL:$1|následující stránky zamčené|následujících stránek zamčených|následujících stránek zamčených}} kaskádovým zámkem. Můžete změnit zámky pro tuto stránku, ale nebude to mít žádný vliv na kaskádové zamčení.',
 'protect-default' => 'Povolit všem',
-'protect-fallback' => 'Vyžaduje oprávnění „$1“',
-'protect-level-autoconfirmed' => 'Zakázat novým a neregistrovaným uživatelům',
-'protect-level-sysop' => 'Pouze správci',
+'protect-fallback' => 'Povolit jen uživatelům s oprávněním „$1“',
+'protect-level-autoconfirmed' => 'Povolit jen automaticky schváleným uživatelům',
+'protect-level-sysop' => 'Povolit jen správcům',
 'protect-summary-cascade' => 'kaskádový',
 'protect-expiring' => 'vyprší $1 (UTC)',
 'protect-expiring-local' => 'vyprší $1',
@@ -2801,11 +2804,12 @@ Přesměrování na původní název můžete nechat aktualizovat automaticky.
 Pokud nenecháte, nezapomeňte poté zkontrolovat [[Special:DoubleRedirects|dvojitá]] nebo [[Special:BrokenRedirects|přerušená]] přesměrování.
 Je na vaší zodpovědnosti zajistit, aby odkazy stále vedly tam, kam mají.
 
-Stránku '''není možno''' přejmenovat, pokud pod cílovým názvem již nějaká stránka existuje, s výjimkou situace, kdy je cílová stránka prázdná nebo je přesměrováním na tuto stránku a nemá žádnou historii editací.
+Stránku '''není možno''' přejmenovat, pokud pod cílovým názvem již nějaká stránka existuje, s výjimkou situace, kdy je cílová stránka přesměrováním na tuto stránku a nemá žádnou historii editací.
 To znamená, že stránku můžete přesunout zpět na původní název, pokud uděláte chybu, a že nemůžete přepsat existující stránku.
 
 '''Upozornění!'''
-Přejmenování oblíbené stránky může být drastická a nečekaná změna; ujistěte se, prosím, že chápete důsledky svého kroku před tím, než změnu provedete.",
+Přejmenování oblíbené stránky může být drastická a nečekaná změna;
+ujistěte se, že chápete důsledky svého kroku před tím, než změnu provedete.",
 'movepagetext-noredirectfixer' => "Použitím tohoto formuláře změníte název stránky a přesunete i celou její historii na nový název.
 Původní název se stane přesměrováním na nový název.
 Nezapomeňte poté zkontrolovat [[Special:DoubleRedirects|dvojitá]] nebo [[Special:BrokenRedirects|přerušená]] přesměrování.
@@ -2976,6 +2980,7 @@ Uložte jej na svůj disk a nahrajte ho sem.',
 'import-error-interwiki' => 'Stránka „$1“ se neimportuje, protože její název je vyhrazen pro externí odkazy (interwiki).',
 'import-error-special' => 'Stránka „$1“ se neimportuje, protože patří do speciálního jmenného prostoru, do kterého stránky nepatří.',
 'import-error-invalid' => 'Stránka „$1“ se neimportuje, protože její název je neplatný.',
+'import-error-unserialize' => 'Nepodařilo se deserializovat revizi $2 stránky „$1“. Revize měla používat model obsahu $3 serializovaný jako $4.',
 'import-options-wrong' => '{{PLURAL:$2|Chybná volba|Chybné volby}}: <nowiki>$1</nowiki>',
 'import-rootpage-invalid' => 'Zadaný název kořenové stránky je neplatný.',
 'import-rootpage-nosubpage' => 'Ve jmenném prostoru „$1“ kořenové stránky nejsou dovoleny podstránky.',
@@ -3157,6 +3162,7 @@ Uložte jej na svůj disk a nahrajte ho sem.',
 'pageinfo-magic-words' => '{{PLURAL:$1|Kouzelné slovo|Kouzelná slova}} ($1)',
 'pageinfo-hidden-categories' => '{{PLURAL:$1|Skrytá|Skryté}} kategorie ($1)',
 'pageinfo-templates' => '{{PLURAL:$1|Použitá šablona|Použité šablony}} ($1)',
+'pageinfo-transclusions' => '{{PLURAL:$1|Stránka, do které|Stránky, do kterých}} je tato stránka vložena ($1)',
 'pageinfo-toolboxlink' => 'Informace o stránce',
 'pageinfo-redirectsto' => 'Přesměrovává na',
 'pageinfo-redirectsto-info' => 'info',
@@ -3165,6 +3171,10 @@ Uložte jej na svůj disk a nahrajte ho sem.',
 'pageinfo-protect-cascading' => 'Kaskádový zámek',
 'pageinfo-protect-cascading-yes' => 'Ano',
 'pageinfo-protect-cascading-from' => 'Zámky pocházejí z kaskádových zámků na',
+'pageinfo-category-info' => 'Informace o kategorii',
+'pageinfo-category-pages' => 'Počet stránek',
+'pageinfo-category-subcats' => 'Počet podkategorií',
+'pageinfo-category-files' => 'Počet souborů',
 
 # Skin names
 'skinname-standard' => 'Klasický',
@@ -3222,6 +3232,7 @@ Otevřením souboru můžete ohrozit svůj počítač.",
 'file-nohires' => 'Větší rozlišení není k dispozici.',
 '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-preview' => 'Velikost tohoto náhledu: $1.',
 'show-big-image-other' => '{{PLURAL:$2|Jiné|Jiná}} rozlišení: $1.',
@@ -3251,8 +3262,9 @@ Otevřením souboru můžete ohrozit svůj počítač.",
 'minutes' => '{{PLURAL:$1|$1 minuta|$1 minuty|$1 minut}}',
 'hours' => '{{PLURAL:$1|$1 hodina|$1 hodiny|$1 hodin}}',
 'days' => '{{PLURAL:$1|$1 den|$1 dny|$1 dní}}',
-'ago' => 'před 
-$1',
+'months' => '{{PLURAL:$1|$1 měsícem|$1 měsíci}}',
+'years' => '{{PLURAL:$1|$1 rokem|$1 roky}}',
+'ago' => 'před $1',
 'just-now' => 'Právě teď',
 
 # Bad image list
@@ -3964,7 +3976,7 @@ Obrázky se zobrazí v plném rozlišení, jiné typy souborů se otevřenou v p
 'specialpages-group-highuse' => 'Často používané stránky',
 'specialpages-group-pages' => 'Seznamy stránek',
 'specialpages-group-pagetools' => 'Nástroje ke stránkám',
-'specialpages-group-wiki' => 'Informace a nástroje k celé wiki',
+'specialpages-group-wiki' => 'Nástroje a data',
 'specialpages-group-redirects' => 'Přesměrovávací speciální stránky',
 'specialpages-group-spam' => 'Protispamové nástroje',
 
@@ -4061,8 +4073,12 @@ Obrázky se zobrazí v plném rozlišení, jiné typy souborů se otevřenou v p
 'logentry-newusers-newusers' => 'Byl založen uživatelský účet $1',
 'logentry-newusers-create' => 'Byl založen uživatelský účet $1',
 'logentry-newusers-create2' => '$1 založil uživatelský účet $3',
+'logentry-newusers-byemail' => '$1 {{GENDER:$2|založil|založila}} uživatelský účet $3, heslo bylo posláno e-mailem',
 'logentry-newusers-autocreate' => 'Automaticky byl založen účet $1',
-'newuserlog-byemail' => 'heslo zasláno e-mailem',
+'logentry-rights-rights' => '$1 {{GENDER:$2|změnil|změnila}} členství $3 ve skupinách z $4 na $5',
+'logentry-rights-rights-legacy' => '$1 změnil členství $3 ve skupinách',
+'logentry-rights-autopromote' => '$1 byl automaticky povýšen z $4 na $5',
+'rightsnone' => '(žádné)',
 
 # Feedback
 'feedback-bugornote' => 'Pokud dokážete podrobně popsat technický problém, můžete [$1 nahlásit chybu].
@@ -4115,7 +4131,8 @@ Jinak můžete využít jednoduchý formulář níže. Váš komentář bude př
 'api-error-nomodule' => 'Interní chyba: není nastaven načítací modul.',
 'api-error-ok-but-empty' => 'Interní chyba: ze serveru nepřišla odpověď.',
 'api-error-overwrite' => 'Není dovoleno přepsat existující soubor.',
-'api-error-stashfailed' => 'Vnitřní chyba: serveru se nepodařilo uložit dočasný soubor.',
+'api-error-stashfailed' => 'Vnitřní chyba: Serveru se nepodařilo uložit dočasný soubor.',
+'api-error-publishfailed' => 'Vnitřní chyba: Serveru se nepodařilo zveřejnit dočasný soubor.',
 'api-error-timeout' => 'Server neodpověděl v očekávaném čase.',
 'api-error-unclassified' => 'Došlo k neznámé chybě',
 'api-error-unknown-code' => 'Neznámá chyba: „$1“',
@@ -4136,6 +4153,4 @@ Jinak můžete využít jednoduchý formulář níže. Váš komentář bude př
 'duration-centuries' => '$1 {{PLURAL:$1|století}}',
 'duration-millennia' => '$1 {{PLURAL:$1|tisíciletí}}',
 
-# Unknown messages
-'svg-long-error' => 'Neplatný soubor SVG: $1',
 );
index 7f37b57..ae8744a 100644 (file)
@@ -710,6 +710,9 @@ Mòżesz zezwòlëc jinszim brëkòwniką na łączbã z Tobą przez Twòją sta
 'right-autoconfirmed' => 'Edicëjô dzélowò zazychrowónych starnów',
 'right-bot' => 'Nacéchòwanié edicëjó jakno aùtomatnych',
 
+# Special:Log/newusers
+'newuserlogpage' => 'Nowi brëkòwnicë',
+
 # User rights log
 'rightslog' => 'Prawa brëkòwnika',
 
@@ -884,9 +887,6 @@ Mòżesz zawãżëc wëszłosc przez wëbranié ôrtu registru, miona brëkòwni
 # Special:LinkSearch
 'linksearch' => 'Bùtnowé lënczi',
 
-# Special:Log/newusers
-'newuserlogpage' => 'Nowi brëkòwnicë',
-
 # Special:ListGroupRights
 'listgrouprights-members' => '(lësta nôlëżników karna)',
 
@@ -929,6 +929,8 @@ Czej chcesz remôc starnã z lëste ùzéronëch artiklów, klikni ''Òprzestôj
 'unwatching' => 'Ju ni ùzéróm...',
 
 'enotif_reset' => 'Òznaczë wszëtczé artiklë jakno òbëzdrzóné',
+'created' => 'zrobionô',
+'changed' => 'zmienioné',
 
 # Delete
 'deletepage' => 'Rëmôj starnã',
index 1914124..3de2da1 100644 (file)
  * @author ОйЛ
  */
 
+$specialPageAliases = array(
+       'Allpages'                  => array( 'Вьсѩ_страницѧ' ),
+       'Categories'                => array( 'Катигорїѩ' ),
+       'Contributions'             => array( 'Добродѣꙗниꙗ' ),
+       'Preferences'               => array( 'Строи' ),
+       'Recentchanges'             => array( 'Послѣдьнѩ_мѣнꙑ' ),
+       'Search'                    => array( 'Исканиѥ' ),
+       'Statistics'                => array( 'Статїстїка' ),
+       'Upload'                    => array( 'Положєниѥ_дѣла' ),
+);
+
 $namespaceNames = array(
        NS_MEDIA            => 'Срѣдьства',
        NS_SPECIAL          => 'Нарочьна',
@@ -445,6 +456,9 @@ $messages = array(
 'grouppage-sysop' => '{{ns:project}}:Съмотритєлє',
 'grouppage-bureaucrat' => '{{ns:project}}:Чинодатєлє',
 
+# Special:Log/newusers
+'newuserlogpage' => 'новъ мѣстъ сътворѥниꙗ їсторїꙗ',
+
 # User rights log
 'rightslog' => 'чинодатєльства їсторїꙗ',
 
@@ -596,9 +610,6 @@ $messages = array(
 # Special:ListUsers
 'listusers-submit' => 'виждь',
 
-# Special:Log/newusers
-'newuserlogpage' => 'новъ мѣстъ сътворѥниꙗ їсторїꙗ',
-
 # E-mail user
 'emailuser' => 'посъли єпїстолѫ',
 
@@ -616,6 +627,8 @@ $messages = array(
 'watching' => 'блюдєниѥ ...',
 'unwatching' => 'оставьлєниѥ блюдєниꙗ ...',
 
+'created' => 'сътворѥнъ ѥстъ',
+
 # Delete
 'deletepage' => 'поничьжєниѥ',
 'excontent' => "вънѫтри бѣ: '$1'",
index cd5b8d6..377a32c 100644 (file)
@@ -11,6 +11,7 @@
  * @author Chavash
  * @author FLAGELLVM DEI
  * @author PCode
+ * @author Salam
  * @author Александр Сигачёв
  */
 
@@ -68,6 +69,7 @@ $messages = array(
 'tog-enotifminoredits' => 'Пĕчĕк улшăнусене те эл. почта урлă пĕлтермелле',
 'tog-enotifrevealaddr' => 'Асăрхаттару пĕлтерĕвĕсенче ман эл. адреса кăтартмалла',
 'tog-shownumberswatching' => 'Страницăна миçе хутшăнакан сăнав списокне кĕртнине кăтартмалла',
+'tog-oldsig' => 'Хальхи алӑ пусни:',
 'tog-fancysig' => 'Хăвăр тунă алă пуснин вики-паллисем',
 'tog-externaleditor' => 'Палăртман чухне тулашри редактора усă курмалла',
 'tog-externaldiff' => 'Палăртман чухне версисене танлаштарма тулашри программăна усă курмалла',
@@ -516,7 +518,6 @@ $1 хутшăнакан патне, е ытти [[{{MediaWiki:Grouppage-sysop}}|
 'templatesusedsection' => 'Ку пайра усă курнă шаблонсем:',
 'template-protected' => '(сыхланă)',
 'template-semiprotected' => '(пĕр пайне сыхланă)',
-'nocreatetitle' => 'Страницăсене хатĕрлессине чакарнă',
 
 # Parser/template warnings
 'expensive-parserfunction-category' => 'Кунта эсир чылай ресурс ыйтакан функцисемпе нумай ĕçлекен страницăсене куратăр',
@@ -659,7 +660,6 @@ $1 хутшăнакан патне, е ытти [[{{MediaWiki:Grouppage-sysop}}|
 
 # User rights log
 'rightslogtext' => 'Ку пользовательсен прависене улăштарниссен журналě',
-'rightsnone' => '(çук)',
 
 # Recent changes
 'recentchanges' => 'Улшăнусем',
@@ -922,6 +922,8 @@ Also see [[Special:WantedCategories|wanted categories]].',
 
 'enotif_reset' => 'Пур страницăсене те пăхнă пек палăрт',
 'enotif_anon_editor' => '$1 анонимлă хутшăнакан',
+'created' => 'хатĕрленĕ',
+'changed' => 'улăштарнă',
 
 # Delete
 'deletepage' => 'Кăларса парахнă статьясем',
@@ -1211,4 +1213,7 @@ Also see [[Special:WantedCategories|wanted categories]].',
 'specialpages-group-users' => 'Хутшăнакансем тата правасем',
 'specialpages-group-highuse' => 'Нумай усă куракан страницăсем',
 
+# New logging system
+'rightsnone' => '(çук)',
+
 );
index 5c3c6f7..ef94fe1 100644 (file)
@@ -12,6 +12,7 @@
  * @author Lloffiwr
  * @author Malafaya
  * @author Reedy
+ * @author Robin Owain
  * @author Thaf
  * @author Urhixidur
  * @author Xxglennxx
@@ -249,6 +250,7 @@ $messages = array(
 'newwindow' => '(yn agor mewn ffenest newydd)',
 'cancel' => 'Diddymu',
 'moredotdotdot' => 'Rhagor...',
+'morenotlisted' => 'Ni restrir y lleill...',
 'mypage' => 'Tudalen defnyddiwr',
 'mytalk' => 'Sgwrs',
 'anontalk' => 'Sgwrs ar gyfer y cyfeiriad IP hwn',
@@ -393,8 +395,8 @@ $1',
 'toc' => 'Cynnwys',
 'showtoc' => 'dangos',
 'hidetoc' => 'cuddio',
-'collapsible-collapse' => 'Crebachu',
-'collapsible-expand' => 'Ehangu',
+'collapsible-collapse' => 'Crebacher',
+'collapsible-expand' => 'Ehanger',
 'thisisdeleted' => 'Ydych chi am ddangos, neu ddad-ddileu $1?',
 'viewdeleted' => 'Gweld $1?',
 'restorelink' => "$1 {{PLURAL:$1|golygiad sydd wedi'i ddileu|golygiad sydd wedi'i ddileu|olygiad sydd wedi'u dileu|golygiad sydd wedi'u dileu|golygiad sydd wedi'u dileu|golygiad sydd wedi'u dileu}}",
@@ -491,7 +493,7 @@ Gofyniad: $2',
 'actionthrottled' => 'Tagwyd y weithred',
 'actionthrottledtext' => "Mae camau gwrth-sbam y wici yn cyfyngu ar ba mor aml y gall defnyddwyr ailwneud y weithred hon mewn byr amser, ac rydych chi wedi croesi'r terfyn.
 Ceisiwch eto ymhen rhai munudau.",
-'protectedpagetext' => "Mae'r dudalen hon wedi'i diogelu rhag cael ei golygu.",
+'protectedpagetext' => "Mae'r dudalen hon wedi'i diogelu rhag cael ei thrin a'i thrafod.",
 'viewsourcetext' => 'Cewch weld a chopïo côd y dudalen:',
 'viewyourtext' => "Cewch weld a copïo ffynhonnell ''eich golygiadau'' i'r dudalen hon:",
 'protectedinterface' => "Testun ar gyfer rhyngwyneb y wici yw cynnwys y dudalen hon. Clowyd y dudalen er mwyn ei diogeli. Os am gyfieithu'r neges neu ei newid ym mhob wici yn hytrach nag yn hwn yn unig, defnyddiwch [//translatewiki.net/ translatewiki.net], y prosiect MediaWiki sy'n hyrwyddo'r gwaith cyfieithu.",
@@ -524,6 +526,7 @@ Y rheswm a roddwyd gan y gweinyddwr a roddodd y ffeil dan glo yw "\'\'$3\'\'".',
 Gallwch ddefnyddio {{SITENAME}} yn anhysbys, neu fe allwch <span class='plainlinks'>[$1 fewngofnodi eto]</span> wrth yr un un enw neu wrth enw arall.
 Sylwer y bydd rhai tudalennau yn parhau i ymddangos fel ag yr oeddent pan oeddech wedi mewngofnodi hyd nes i chi glirio celc eich porwr.",
 'welcomeuser' => 'Croeso, $1!',
+'welcomecreation-msg' => 'Peidiwch ag anghofio newid eich [[Special:Preferences|{{SITENAME}} preferences]].',
 'yourname' => 'Eich enw defnyddiwr:',
 'yourpassword' => 'Eich cyfrinair:',
 'yourpasswordagain' => 'Ail-deipiwch y cyfrinair:',
@@ -611,6 +614,7 @@ Oedwch ychydig cyn mentro eto.',
 # E-mail sending
 'php-mail-error-unknown' => 'Gwall anhysbys yng ngweithrediad post() PHP',
 'user-mail-no-addy' => 'Wedi ceisio anfon e-bost heb gyfeiriad e-bost',
+'user-mail-no-body' => 'Ceisiwyd anfon e-bost gwag neu e-bost oedd a thestun rhy bwt iddo.',
 
 # Change password dialog
 'resetpass' => 'Newid cyfrinair y cyfrif',
@@ -668,6 +672,7 @@ Y cyfrinair dros dro: $2",
 'changeemail-oldemail' => 'Y cyfeiriad e-bost presennol:',
 'changeemail-newemail' => 'Cyfeiriad e-bost newydd:',
 'changeemail-none' => '(dim)',
+'changeemail-password' => 'Eich cyfrinair ar {{SITENAME}}:',
 'changeemail-submit' => 'Newidier y cyfeiriad e-bost',
 'changeemail-cancel' => 'Dileer',
 
@@ -826,9 +831,10 @@ Rydych chi'n cadarnhau mai chi yw awdur y cyfraniad, neu eich bod chi wedi'i gop
 '''PEIDIWCH Â CHYFRANNU GWAITH O DAN HAWLFRAINT HEB GANIATÂD!'''",
 'longpageerror' => "'''GWALL: Mae'r testun yr ydych wedi ei osod yma yn {{PLURAL:$1|$1 cilobeit}} o hyd, ac yn hwy na'r hyd eithaf o {{PLURAL:$2|$2}} cilobeit.
 Ni ellir ei roi ar gadw.'''",
-'readonlywarning' => "'''RHYBUDD: Mae'r databas wedi'i gloi am gyfnod er mwyn cynnal a chadw, felly fyddwch chi ddim yn gallu cadw'ch golygiadau ar hyn o bryd. Rydyn ni'n argymell eich bod chi'n copïo a gludo'r testun i ffeil a'i gadw ar eich disg tan bod y sustem yn weithredol eto.'''
+'readonlywarning' => "'''RHYBUDD: Mae'r gronfa ddata wedi'i chloi am gyfnod er mwyn cynnal a chadw, felly fyddwch chi ddim yn gallu cadw'ch golygiadau ar hyn o bryd.''' 
+Gallwch gopïo'r testun a'i gludo i ffeil destun er mwyn ei gadw tan yn hwyrach.
 
-Cynigiodd y gweinyddwr a glodd y databas y rheswm hwn dros ei gloi: $1",
+Cynigiodd y gweinyddwr a glodd y gronfa ddata y rheswm hwn dros ei chloi: $1",
 'protectedpagewarning' => "'''RHYBUDD: Mae'r dudalen hon wedi'i diogelu. Dim ond gweinyddwyr sydd yn gallu ei golygu.'''
 Dyma'r cofnod lòg diweddaraf, er gwybodaeth:",
 'semiprotectedpagewarning' => "'''Sylwer:''' Mae'r dudalen hon wedi ei chloi; dim ond defnyddwyr cofrestredig a allant ei golygu.
@@ -842,7 +848,6 @@ Dyma'r cofnod lòg diweddaraf, er gwybodaeth:",
 'template-protected' => '(wedi ei diogelu)',
 'template-semiprotected' => '(lled-diogelwyd)',
 'hiddencategories' => "Mae'r dudalen hon yn aelod o $1 {{PLURAL:$1|categori|categori|gategori|chategori|chategori|categori}} cuddiedig:",
-'nocreatetitle' => 'Cyfyngwyd ar greu tudalennau',
 'nocreatetext' => "Mae'r safle hwn wedi cyfyngu'r gallu i greu tudalennau newydd. Gallwch olygu tudalen sydd eisoes yn bodoli, neu [[Special:UserLogin|fewngofnodi, neu greu cyfrif]].",
 'nocreate-loggedin' => "Nid yw'r gallu gennych i greu tudalennau.",
 'sectioneditnotsupported-title' => 'Dim modd golygu fesul adran',
@@ -869,6 +874,7 @@ Mae ar gael yn barod.',
 
 # Content models
 'content-model-wikitext' => 'cystrawen wici',
+'content-model-text' => 'testun plaen',
 'content-model-javascript' => 'JavaScript',
 'content-model-css' => 'CSS',
 
@@ -1080,6 +1086,10 @@ Pan yn gwneud hyn dylid sicrhau nad yw dilyniant hanes tudalennau yn cael ei ddi
 'editundo' => 'dadwneud',
 'diff-multi' => '(Ni ddangosir {{PLURAL:$1|yr $1 diwygiad|yr $1 diwygiad|y $1 ddiwygiad|y $1 diwygiad|y $1 diwygiad|y $1 diwygiad}} rhyngol gan {{PLURAL:$2||un defnyddiwr|$2 ddefnyddiwr|$2 defnyddiwr|$2 o ddefnyddwyr|$2 o ddefnyddwyr}}.)',
 'diff-multi-manyusers' => '(Ni ddangosir {{PLURAL:$1|yr $1 diwygiad|yr $1 diwygiad|y $1 ddiwygiad|y $1 diwygiad|y $1 diwygiad|y $1 diwygiad}} rhyngol gan mwy na $2 {{PLURAL:$2|o ddefnyddwyr}}.)',
+'difference-missing-revision' => "Ni chafwyd hyd i $1 {{PLURAL:$2|diwygiad|diwygiad|ddiwygiad|diwygiad}} o'r gwahaniaeth ($1) {{PLURAL:$2|hwn}}.
+
+Fel arfer, fe ddigwydd hyn pan mae person wedi dilyn hen gyswllt gwahaniaeth i dudalen sydd erbyn hyn wedi cael ei ddileu.
+Mae manylion pellach i'w cael yn [{{fullurl:{{#Special:Log}}/delete|page={{FULLPAGENAMEE}}}} lòg y dileuon].",
 
 # Search results
 'searchresults' => "Canlyniadau'r chwiliad",
@@ -1182,7 +1192,7 @@ Cofiwch y gall mynegeion Google o gynnwys {{SITENAME}} fod ar ei hôl hi.",
 'prefs-setemail' => 'Gosod cyfeiriad e-bost',
 'prefs-email' => 'E-bostio',
 'prefs-rendering' => 'Ymddangosiad',
-'saveprefs' => "Cadw'r dewisiadau",
+'saveprefs' => 'Cadwer y dewisiadau',
 'resetprefs' => "Clirio'r darpar newidiadau",
 'restoreprefs' => 'Adfer yr holl osodiadau diofyn',
 'prefs-editing' => 'Golygu',
@@ -1232,9 +1242,9 @@ Ni allwch ddadwneud y weithred hon.",
 'prefs-emailconfirm-label' => "Cadarnhau'r e-bost:",
 'prefs-textboxsize' => 'Maint y ffenestr olygu',
 'youremail' => 'Eich cyfeiriad e-bost',
-'username' => 'Enw defnyddiwr:',
-'uid' => 'ID Defnyddiwr:',
-'prefs-memberingroups' => "Yn aelod o'r {{PLURAL:$1|grŵp|grŵp|grwpiau|grwpiau|grwpiau|grwpiau}} canlynol:",
+'username' => '{{GENDER:$1|Enw defnyddiwr}}:',
+'uid' => '{{GENDER:$1|ID y defnyddiwr}}:',
+'prefs-memberingroups' => "Yn {{GENDER:$2|aelod}} o'r {{PLURAL:$1|grŵp|grŵp|grwpiau}} canlynol:",
 'prefs-registration' => "Amser dechrau'r cyfrif:",
 'yourrealname' => 'Eich enw cywir*',
 'yourlanguage' => 'Iaith y rhyngwyneb',
@@ -1383,12 +1393,13 @@ Mae'r wybodaeth hon ar gael i'r cyhoedd.",
 'right-sendemail' => 'Anfon e-bost at ddefnyddwyr eraill',
 'right-passwordreset' => "Gweld e-byst sy'n ailosod cyfrinair",
 
+# Special:Log/newusers
+'newuserlogpage' => 'Lòg creu cyfrifon defnyddwyr newydd',
+'newuserlogpagetext' => "Dyma restr o'r defnyddwyr newydd sydd wedi ymuno â'r wici.",
+
 # User rights log
 'rightslog' => 'Lòg galluoedd defnyddiwr',
 'rightslogtext' => 'Lòg y newidiadau i alluoedd defnyddwyr yw hwn.',
-'rightslogentry' => "wedi gosod $1 yn aelod o'r grŵp $3 (grŵp cynt $2)",
-'rightslogentry-autopromote' => "wedi ei ddyrchafu'n awtomatig o $2 i $3",
-'rightsnone' => '(dim)',
 
 # Associated actions - in the sentence "You do not have permission to X"
 'action-read' => 'darllen y dudalen',
@@ -2004,7 +2015,7 @@ Gweler hefyd [[Special:WantedCategories|categorïau sydd eu hangen]].",
 'linksearch-ok' => 'Chwilio',
 'linksearch-text' => 'Gellir defnyddio cardiau gwyllt megis "*.wikipedia.org".
 Mae angen parth lefel-uchaf o leiaf, er enghraifft "*.org".<br />
-Protocoliau sy\'n cael eu cynnal: <code>$1</code> (yn neidio i http:// os na roddir protocol o gwbl).',
+{{PLURAL:$2|Protocol|Protocol|Protocoliau}} sy\'n cael eu cynnal: <code>$1</code> (yn neidio i http:// os na roddir protocol o gwbl).',
 'linksearch-line' => 'Mae cysylltiad i gael i $1 oddi wrth $2',
 'linksearch-error' => "Dim ond ar ddechrau enw'r gwesteiwr y gallwch osod cardiau gwyllt.",
 
@@ -2017,16 +2028,12 @@ Protocoliau sy\'n cael eu cynnal: <code>$1</code> (yn neidio i http:// os na rod
 # Special:ActiveUsers
 'activeusers' => 'Rhestr defnyddwyr gweithgar',
 'activeusers-intro' => 'Dyma restr y defnyddwyr a fuont yn weithgar o fewn y {{PLURAL:$1|diwrnod|diwrnod|deuddydd|tridiau|$1 diwrnod|$1 diwrnod}} diwethaf.',
-'activeusers-count' => '$1 {{PLURAL:$1|golygiad|golygiad|olygiad|golygiad|golygiad|golygiad}} yn ystod y {{PLURAL:$3|diwrnod|diwrnod|deuddydd|tridiau|$3 diwrnod|$3 diwrnod}} diwethaf',
+'activeusers-count' => '$1 {{PLURAL:$1|golygiad|golygiad|olygiad|golygiad}} yn ystod y {{PLURAL:$3|diwrnod|diwrnod|deuddydd|tridiau|$3 diwrnod}} diwethaf',
 'activeusers-from' => "Rhestru'r defnyddwyr gan ddechrau gyda:",
 'activeusers-hidebots' => 'Cuddio botiau',
 'activeusers-hidesysops' => 'Cuddio gweinyddwyr',
 'activeusers-noresult' => "Dim defnyddwyr i'w cael.",
 
-# Special:Log/newusers
-'newuserlogpage' => 'Lòg creu cyfrifon defnyddwyr newydd',
-'newuserlogpagetext' => "Dyma restr o'r defnyddwyr newydd sydd wedi ymuno â'r wici.",
-
 # Special:ListGroupRights
 'listgrouprights' => 'Galluoedd grwpiau defnyddwyr',
 'listgrouprights-summary' => "Dyma restr o'r grwpiau defnyddwyr sydd i'w cael ar y wici hon, ynghyd â galluoedd aelodau'r gwahanol grwpiau. Cewch wybodaeth pellach am y gwahanol alluoedd ar y [[{{MediaWiki:Listgrouprights-helppage}}|dudalen gymorth]].",
@@ -2085,7 +2092,7 @@ Bydd y cyfeiriad e-bost a osodoch yn eich [[Special:Preferences|dewisiadau]] yn
 'usermessage-editor' => 'Golygydd neges y system',
 
 # Watchlist
-'watchlist' => 'Fy rhestr wylio',
+'watchlist' => 'Rhestr wylio',
 'mywatchlist' => 'Rhestr wylio',
 'watchlistfor2' => 'Yn ôl gofyn $1 $2',
 'nowatchlist' => "Mae eich rhestr wylio'n wag.",
@@ -2093,10 +2100,8 @@ Bydd y cyfeiriad e-bost a osodoch yn eich [[Special:Preferences|dewisiadau]] yn
 'watchnologin' => 'Nid ydych wedi mewngofnodi',
 'watchnologintext' => "Mae'n rhaid i chi [[Special:UserLogin|fewngofnodi]] er mwyn newid eich rhestr wylio.",
 'addwatch' => 'Ychwanegu at y rhestr wylio',
-'addedwatchtext' => "Mae'r dudalen \"[[:\$1|\$1]]\" wedi cael ei hychwanegu at eich [[Special:Watchlist|rhestr wylio]].
-Pan fydd y dudalen hon, neu ei thudalen sgwrs, yn newid, fe fyddant yn ymddangos ar eich rhestr wylio ac hefyd '''yn gryf''' ar restr y [[Special:RecentChanges|newidiadau diweddar]], fel ei bod yn haws eu gweld.
-
-Os ydych am ddiddymu'r dudalen o'r rhestr wylio, cliciwch ar \"Stopio gwylio\" yn y bar ar frig y dudalen.",
+'addedwatchtext' => 'Mae\'r dudalen "[[:$1|$1]]" wedi cael ei hychwanegu at eich [[Special:Watchlist|rhestr wylio]].
+Pan fydd y dudalen hon, neu ei thudalen sgwrs, yn newid, fe fyddant yn ymddangos ar y rhestr honno.',
 'removewatch' => 'Tynnu oddi ar eich rhestr wylio',
 'removedwatchtext' => 'Mae\'r dudalen "[[:$1]]" wedi\'i thynnu oddi ar [[Special:Watchlist|eich rhestr wylio]].',
 'watch' => 'Gwylio',
@@ -2125,14 +2130,18 @@ Os ydych am ddiddymu'r dudalen o'r rhestr wylio, cliciwch ar \"Stopio gwylio\" y
 'enotif_mailer' => 'Sustem hysbysu {{SITENAME}}',
 'enotif_reset' => 'Ystyried bod pob tudalen wedi cael ymweliad',
 'enotif_impersonal_salutation' => 'at ddefnyddiwr {{SITENAME}}',
+'enotif_subject_deleted' => 'Dilewyd y dudalen $1 ar {{SITENAME}} gan {{gender:$2|$2}}',
+'enotif_subject_created' => 'Dechrewyd y dudalen $1 ar {{SITENAME}} gan {{gender:$2|$2}}',
+'enotif_subject_moved' => 'Symudwyd y dudalen $1 ar {{SITENAME}} gan {{gender:$2|$2}}',
+'enotif_subject_restored' => 'Adferwyd y dudalen $1 ar {{SITENAME}} gan {{gender:$2|$2}}',
+'enotif_subject_changed' => 'Newidiwyd y dudalen $1 ar {{SITENAME}} gan {{gender:$2|$2}}',
+'enotif_body_intro_deleted' => 'Dilewyd y dudalen $1 ar {{SITENAME}} ar $PAGEEDITDATE gan {{gender:$2|$2}}, gweler $3.',
 'enotif_lastvisited' => 'Gwelwch $1 am bob newid ers eich ymweliad blaenorol.',
 'enotif_lastdiff' => 'Gallwch weld y newid ar $1.',
 'enotif_anon_editor' => 'defnyddiwr anhysbys $1',
 'enotif_body' => 'Annwyl $WATCHINGUSERNAME,
 
-$CHANGEDORCREATED y dudalen \'$PAGETITLE\' ar {{SITENAME}} ar $PAGEEDITDATE gan $PAGEEDITOR; gwelir y diwygiad presennol ar $PAGETITLE_URL.
-
-$NEWPAGE
+$PAGEINTRO $NEWPAGE
 
 Crynodeb y golygydd: $PAGESUMMARY $PAGEMINOREDIT
 
@@ -2140,7 +2149,7 @@ Cysylltu â\'r golygydd:
 e-bost: $PAGEEDITOR_EMAIL
 wici: $PAGEEDITOR_WIKI
 
-Os digwydd mwy o olygiadau i\'r 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, 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}}
 
@@ -2156,6 +2165,8 @@ $UNWATCHURL
 
 Am fwy o gymorth ac adborth:
 {{canonicalurl:{{MediaWiki:Helppage}}}}',
+'created' => 'crëwyd',
+'changed' => 'Newidiwyd',
 
 # Delete
 'deletepage' => 'Dileer y dudalen',
@@ -2194,8 +2205,8 @@ Gallai dileu tudalen, gyda hanes golygu cymaint â hyn iddi, beri dryswch i weit
 'rollback' => 'Gwrthdroi golygiadau',
 'rollback_short' => 'Gwrthdroi',
 'rollbacklink' => 'gwrthdröer',
-'rollbacklinkcount' => 'gwrthdröer $1 {{PLURAL:$1||golygiad|olygiad|golygiad|golygiad|golygiad}}',
-'rollbacklinkcount-morethan' => 'gwrthdröer mwy na $1 {{PLURAL:$1||golygiad|olygiad|golygiad|golygiad|golygiad}}',
+'rollbacklinkcount' => 'gwrthdröer $1 {{PLURAL:$1||golygiad|olygiad|golygiad}}',
+'rollbacklinkcount-morethan' => 'gwrthdröer mwy na $1 {{PLURAL:$1||golygiad|olygiad|golygiad}}',
 'rollbackfailed' => 'Methodd y gwrthdroi',
 'cantrollback' => "Wedi methu gwrthdroi'r golygiad; y cyfrannwr diwethaf oedd unig awdur y dudalen hon.",
 'alreadyrolled' => "Nid yw'n bosib dadwneud y golygiad diwethaf i'r dudalen [[:$1|$1]] gan [[User:$2|$2]] ([[User talk:$2|Sgwrs]]{{int:pipe-separator}}[[Special:Contributions/$2|{{int:contribslink}}]]);
@@ -2240,9 +2251,9 @@ Dyma'r gosodiadau diogelu cyfredol ar gyfer y dudalen '''$1''':",
 Dyma'r gosodiadau diogelu cyfredol ar gyfer y dudalen '''$1''':",
 'protect-cascadeon' => "Mae'r dudalen hon wedi ei diogelu ar hyn o bryd oherwydd ei bod wedi ei chynnwys yn y {{PLURAL:$1|dudalen|dudalen|tudalennau|tudalennau|tudalennau|tudalennau}} canlynol sydd wedi {{PLURAL:$1|ei|ei|eu|eu|eu|eu}} sgydol-diogelu.  Gallwch newid lefel diogelu'r dudalen hon, ond ni fydd hynny'n effeithio ar y sgydol-ddiogelu.",
 'protect-default' => "Caniatáu'r gallu i bob defnyddiwr",
-'protect-fallback' => 'Mynnu\'r gallu "$1"',
-'protect-level-autoconfirmed' => "Blocio defnyddwyr newydd a'r rhai heb gyfrif",
-'protect-level-sysop' => 'Gweinyddwyr yn unig',
+'protect-fallback' => 'Caniatau i\'r defnyddwyr gyda\'r gallu "$1" yn unig wneud hyn',
+'protect-level-autoconfirmed' => "Caniatau'r defnyddwyr sydd wedi eu cadarnhau'n awtomatig yn unig",
+'protect-level-sysop' => 'Gweinyddwyr yn unig caiff wneud',
 'protect-summary-cascade' => 'sgydol',
 'protect-expiring' => 'yn dod i ben am $1 (UTC)',
 'protect-expiring-local' => 'yn dod i ben am $1',
@@ -2537,17 +2548,18 @@ Er mwyn cloi'r gronfa ddata neu ei datgloi, mae'n rhaid i'r gweinydd gwe allu ys
 # Move page
 'move-page' => 'Symud $1',
 'move-page-legend' => 'Symud tudalen',
-'movepagetext' => "Drwy ddefnyddio'r ffurflen isod, byddwch yn ailenwi tudalen, felly yn symud ei holl hanes i'r enw tudalen newydd.
-Caiff yr hen deitl a oedd ar y dudalen ei droi'n dudalen sy'n ailgyfeirio i'r teitl newydd.
+'movepagetext' => "Drwy ddefnyddio'r ffurflen isod, byddwch yn ailenwi tudalen, ac felly yn symud ei holl hanes i'r dudalen a'r enw newydd.
+Caiff y dudalen a'r hen deitl ei throi'n dudalen sy'n ailgyfeirio i'r teitl newydd.
 Gallwch ddiweddaru tudalennau ailgyfeirio sy'n cyfeirio at y teitl gwreiddiol yn awtomatig.
-Os ydych yn dewis peidio â gwneud hyn, gwiriwch [[Special:BrokenRedirects|dudalennau ailgyfeirio nad ydynt yn ailgyfeirio]] neu [[Special:DoubleRedirects|dudalennau ailgyfeirio dwbl]].
-Chi sy'n gyfrifol am wirio bod cysylltiadau yn cyfeirio at y tudalennau cywir.
+Os ydych yn dewis peidio â gwneud hyn, gwiriwch [[Special:DoubleRedirects|dudalennau ailgyfeirio dwbl]] neu 
+[[Special:BrokenRedirects|dudalennau ailgyfeirio nad ydynt yn ailgyfeirio]].
+Chi sy'n gyfrifol am sicrhau bod cysylltiadau yn cyfeirio at y tudalennau cywir.
 
-Sylwer '''na''' chaiff y dudalen ei symud os oes enw ar y dudalen yn bodoli'n barod, oni bai ei bod hi'n wag neu'n dudalen ailgyfeirio ac nad oes hanes golygu ganddi.
-Mae hyn yn golygu y gallwch ailenwi tudalen yn ôl os yr ydych yn gwneud camgymeriad, ond nid ydych yn gallu trosysgrifo tudalen sy'n bodoli'n barod.
+Sylwer '''na''' chaiff y dudalen ei symud os oes tudalen a'r enw newydd ar gael yn barod, oni bai ei bod hi'n dudalen ailgyfeirio ac nad oes hanes golygu ganddi.
+Mae hyn yn golygu y gallwch ailenwi tudalen yn ôl i'w henw gwreiddiol os ydych yn gwneud camgymeriad, ond na allwch drosysgrifo tudalen sy'n bodoli'n barod.
 
 '''Rhybudd!'''
-Gall hwn greu newid annisgwyl a chryf i dudalen boblogaidd;
+Gall hwn fod yn newid mawr ac annisgwyl i dudalen boblogaidd;
 gwnewch yn siŵr eich bod yn deall canlyniadau'r broses hon cyn i chi barhau.",
 'movepagetext-noredirectfixer' => "Wrth ddefnyddio'r ffurflen isod byddwch yn ail-enwi tudalen, gan symud ei hanes gyfan i'r enw newydd.
 Bydd yr hen deitl yn troi'n dudalen ailgyfeirio i'r teitl newydd.
@@ -2691,6 +2703,7 @@ Mae cofnod o bob weithred o fewnforio i'w gweld ar y [[Special:Log/import|lòg m
 'import-interwiki-templates' => 'Cynhwyser pob nodyn',
 'import-interwiki-submit' => 'Mewnforio',
 'import-interwiki-namespace' => 'Parth y cyrchir ato:',
+'import-interwiki-rootpage' => 'Tudalen wraidd y cyrchfan (dewisol):',
 'import-upload-filename' => "Enw'r ffeil:",
 'import-comment' => 'Sylw:',
 'importtext' => "Allforiwch y ffeil o'r wici gwreiddiol trwy ddefnyddio'r [[Special:Export|nodwedd allforio]]. Rhowch hi ar gadw ar eich cyfrifiadur, ac wedyn ei huwchlwytho fan hyn.",
@@ -2726,6 +2739,7 @@ Mae ffolder dros dro yn eisiau.',
 'import-error-special' => 'Ni fewnforiwyd y dudalen "$1" oherwydd ei bod yn perthyn i barth arbennig lle nad oes tudalennau i\'w cael.',
 'import-error-invalid' => 'Ni fewnforwyd y dudalen "$1" oherwydd bod yr enw arni yn annilys.',
 'import-options-wrong' => '{{PLURAL:$2|Dewis|Dewis|Dewisiadau}} annilys: <nowiki>$1</nowiki>',
+'import-rootpage-invalid' => 'Mae teitl y dudalen wraidd a roddir yn annilys.',
 'import-rootpage-nosubpage' => 'Nid yw\'r parth "$1", sef parth y brif dudalen y mewnforir iddi, yn caniatau is-dudalennau.',
 
 # Import log
@@ -2843,6 +2857,7 @@ Achos hyn yn fwy na thebyg yw presenoldeb cysylltiad i wefan ar y rhestr wahardd
 
 # Info page
 'pageinfo-title' => 'Manylion "$1"',
+'pageinfo-not-current' => "Nid oes modd dangos y wybodaeth hon am hen olygiadau, gwaetha'r modd.",
 'pageinfo-header-basic' => 'Gwybodaeth sylfaenol',
 'pageinfo-header-edits' => 'Hanes golygu',
 'pageinfo-header-restrictions' => 'Diogelwch y dudalen',
@@ -2853,10 +2868,13 @@ Achos hyn yn fwy na thebyg yw presenoldeb cysylltiad i wefan ar y rhestr wahardd
 'pageinfo-article-id' => 'ID y dudalen',
 'pageinfo-language' => 'Iaith cynnwys y dudalen',
 'pageinfo-robot-policy' => 'Statws i beiriannau chwilio',
+'pageinfo-robot-index' => 'Gellir ei rhestru gan beiriannau chwilio',
+'pageinfo-robot-noindex' => 'Ni ellir ei rhestru gan beiriannau chwilio',
 'pageinfo-views' => 'Nifer yr ymweliadau',
 'pageinfo-watchers' => 'Nifer gwylwyr y dudalen',
 'pageinfo-redirects-name' => "Nifer yr ailgyfeiriadau i'r dudalen hon",
 'pageinfo-subpages-name' => "Nifer yr is-dudalennau i'r dudalen hon",
+'pageinfo-subpages-value' => '$1 ($2 {{PLURAL:$2|ailgyfeiriad}}; $3 {{PLURAL:$3|is-dudalen arall}})',
 'pageinfo-firstuser' => 'Y defnyddiwr a ddechreuodd y dudalen',
 'pageinfo-firsttime' => "Dyddiad dechrau'r dudalen",
 'pageinfo-lastuser' => 'Y golygydd diweddaraf',
@@ -2864,9 +2882,16 @@ Achos hyn yn fwy na thebyg yw presenoldeb cysylltiad i wefan ar y rhestr wahardd
 'pageinfo-edits' => 'Cyfanswm y golygiadau',
 'pageinfo-authors' => 'Cyfanswm yr awduron gwahanol',
 'pageinfo-recent-edits' => 'Nifer y golygiadau diweddar (o fewn y $1 diwethaf).',
+'pageinfo-recent-authors' => 'Nifer yr awduron gwahanol diweddar',
 'pageinfo-magic-words' => '{{PLURAL:$1|Gair|Gair|Geiriau}} hud ($1)',
 'pageinfo-hidden-categories' => '{{PLURAL:$1|Categori|Categori|Categorïau}} cudd ($1)',
+'pageinfo-templates' => '{{PLURAL:$1|Nodyn|Nodyn|Nodiadau}} a drawsgynhwyswyd ($1)',
 'pageinfo-toolboxlink' => 'Gwybodaeth am y dudalen',
+'pageinfo-redirectsto' => 'Yn ailgyfeirio i',
+'pageinfo-category-info' => 'Gwybodaeth am y categori',
+'pageinfo-category-pages' => 'Nifer y tudalennau',
+'pageinfo-category-subcats' => 'Nifer yr is-gategorïau',
+'pageinfo-category-files' => 'Nifer y ffeiliau',
 
 # Skin names
 'skinname-standard' => 'Safonol',
@@ -2915,6 +2940,7 @@ Mae'n bosib y bydd eich cyfrifiadur yn cael ei danseilio wrth ddefnyddio'r ffeil
 'file-info-size-pages' => '$1 × $2 picsel, maint ffeil: $3, math MIME: $4, $5 {{PLURAL:$5|tudalen|tudalen}}',
 'file-nohires' => 'Wedi ei chwyddo hyd yr eithaf.',
 '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',
 'show-big-image' => 'Maint llawn',
 '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.',
@@ -2924,6 +2950,8 @@ Mae'n bosib y bydd eich cyfrifiadur yn cael ei danseilio wrth ddefnyddio'r ffeil
 'file-info-png-looped' => 'dolennog',
 'file-info-png-repeat' => "wedi'i chwarae {{PLURAL:$1||unwaith|ddwywaith|deirgwaith|$1 gwaith|$1 gwaith}}",
 'file-info-png-frames' => '$1 {{PLURAL:$1|ffrâm}}',
+'file-no-thumb-animation' => "'''Sylwer: Oherwydd cyfyngiadau technegol, ni chaiff mân-luniau o'r ffeil hon eu hanimeiddio.'''",
+'file-no-thumb-animation-gif' => "'''Sylwer: Oherwydd cyfyngiadau technegol, ni chaiff mân-luniau o luniau GIF o gydraniad uchel, fel hon, eu hanimeiddio.'''",
 
 # Special:NewFiles
 'newimages' => 'Oriel y ffeiliau newydd',
@@ -2945,7 +2973,10 @@ Mae'n bosib y bydd eich cyfrifiadur yn cael ei danseilio wrth ddefnyddio'r ffeil
 'minutes' => '{{PLURAL:$1||$1 munud|$1 funud|$1 munud|$1 munud|$1 munud}}',
 'hours' => '{{PLURAL:$1|$1 awr}}',
 'days' => '{{PLURAL:$1||$1 diwrnod|$1 ddiwrnod|$1 diwrnod|$1 diwrnod|$1 diwrnod}}',
+'months' => '{{PLURAL:$1|$1 mis|mis|deufis|$1 mis}}',
+'years' => '{{PLURAL:$1|$1 blwyddyn|blwyddyn|$1 flynedd|$1 blynedd|$1 blynedd|$1 mlynedd}}',
 'ago' => '$1 yn ôl',
+'just-now' => 'nawr',
 
 # Bad image list
 'bad_image_list' => "Dyma'r fformat:
@@ -3585,7 +3616,7 @@ Dangosir delweddau ar eu maint llawn, dechreuir ffeiliau o fathau eraill yn unio
 'specialpages-group-highuse' => 'Tudalennau aml eu defnydd',
 'specialpages-group-pages' => 'Rhestrau tudalennau',
 'specialpages-group-pagetools' => 'Offer trin tudalennau',
-'specialpages-group-wiki' => 'Data ac offer y wici',
+'specialpages-group-wiki' => 'Data ac offer',
 'specialpages-group-redirects' => 'Tudalennau arbennig ailgyfeirio',
 'specialpages-group-spam' => 'Offer sbam',
 
@@ -3683,7 +3714,7 @@ Dangosir delweddau ar eu maint llawn, dechreuir ffeiliau o fathau eraill yn unio
 'logentry-newusers-create' => 'Dechreuwyd y cyfrif defnyddiwr $1',
 'logentry-newusers-create2' => 'Dechreuwyd y cyfrif defnyddiwr $3 gan $1',
 'logentry-newusers-autocreate' => 'Crëwyd y cyfrif $1 yn awtomatig',
-'newuserlog-byemail' => 'anfonwyd y cyfrinair trwy e-bost',
+'rightsnone' => '(dim)',
 
 # Feedback
 'feedback-bugornote' => 'Os ydych yn barod i ddisgrifio problem technegol yn fanwl gallwch [$1 gyflwyno adroddiad am y bỳg]. Fel arall, gallwch ddefnyddio\'r ffurflen syml isod. Fe roddir eich sylwadau ar y dudalen "[$3 $2]", ynghyd â\'ch enw defnyddiwr ac enw\'r gweinydd sydd ar waith gennych.',
index 3e26d7b..da49af5 100644 (file)
@@ -32,6 +32,7 @@
  * @author Morten LJ
  * @author Najami
  * @author Nghtwlkr
+ * @author Palnatoke
  * @author Peter Alberti
  * @author Peter Andersen
  * @author Purodha
@@ -321,6 +322,7 @@ $messages = array(
 'newwindow' => '(åbner i et nyt vindue)',
 'cancel' => 'Afbryd',
 'moredotdotdot' => 'Mere...',
+'morenotlisted' => 'Mere ikke angivet...',
 'mypage' => 'Side',
 'mytalk' => 'Diskussion',
 'anontalk' => 'Diskussionsside for denne IP-adresse',
@@ -620,7 +622,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?',
-'createaccountmail' => 'via e-mail',
+'createaccountmail' => 'Brug en midlertidig tilfældig adgangskode og send den til e-mailadressen angivet nedenfor',
 'createaccountreason' => 'Begrundelse:',
 'badretype' => 'De indtastede adgangskoder er ikke ens.',
 'userexists' => 'Det brugernavn, du har valgt, er allerede i brug.
@@ -692,6 +694,7 @@ Vent venligst før du prøver igen.',
 # E-mail sending
 'php-mail-error-unknown' => "Ukendt fejl i PHP's mail()-funtion",
 'user-mail-no-addy' => 'Forsøgte at sende email uden en email-adresse',
+'user-mail-no-body' => 'Forsøgte at sende en e-mail med tomt eller urimeligt kort indhold.',
 
 # Change password dialog
 'resetpass' => 'Skift adgangskode',
@@ -749,6 +752,7 @@ Midlertidig adgangskode: $2',
 'changeemail-oldemail' => 'Nuværende email-adresse:',
 'changeemail-newemail' => 'Ny email-adresse:',
 'changeemail-none' => '(ingen)',
+'changeemail-password' => 'Din adgangskode til {{SITENAME}}:',
 'changeemail-submit' => 'Ændr email',
 'changeemail-cancel' => 'Afbryd',
 
@@ -914,9 +918,10 @@ Du bekræfter hermed også, at du selv har skrevet denne tekst eller kopieret de
 '''OVERFØR IKKE OPHAVSRETSLIGT BESKYTTET INDHOLD UDEN TILLADELSE!'''",
 'longpageerror' => "'''Fejl: Teksten, som du ville gemme, er {{PLURAL:$1|en kilobyte|$1 kilobytes}} stor, hvilket er mere end det tilladte maksimum på {{PLURAL:$2|en kilobyte|$2 kilobytes}}.'''
 Det er ikke muligt at gemme den.",
-'readonlywarning' => "'''ADVARSEL: Databasen er låst på grund af vedligeholdelse, så du kan ikke gemme dine ændringer lige nu. Det kan godt være en god ide at kopiere din tekst til en tekstfil, så du kan gemme den til senere.'''
+'readonlywarning' => "'''Advarsel: Databasen er låst på grund af vedligeholdelse, så du kan ikke gemme dine ændringer lige nu.'''
+Det kan godt være en god ide at kopiere din tekst til en tekstfil, så du kan gemme den til senere.
 
-Systemadministratoren som låste databasen, gav denne forklaring: $1",
+Administratoren som låste databasen, gav denne forklaring: $1",
 'protectedpagewarning' => "'''ADVARSEL: Denne side er skrivebeskyttet, så kun administratorer kan redigere den.'''<br />
 Den seneste logpost vises nedenfor:",
 'semiprotectedpagewarning' => "'''Bemærk: Siden er låst, så kun registrerede brugere kan ændre den.'''
@@ -931,7 +936,6 @@ Den seneste logpost vises nedenfor:",
 'template-semiprotected' => '(delvist beskyttet)',
 'hiddencategories' => 'Denne side er i {{PLURAL:$1|en skjult kategori|$1 skjulte kategorier}}:',
 'edittools' => '<!-- Denne tekst vises under formularen „Ændre“ samt "Upload". -->',
-'nocreatetitle' => 'Oprettelse af nye sider er begrænset.',
 'nocreatetext' => 'Serveren har begrænset oprettelse af nye sider. Bestående sider kan ændres eller [[Special:UserLogin|logge på]].',
 'nocreate-loggedin' => 'Du har ikke rettigheder til at oprette nye sider.',
 'sectioneditnotsupported-title' => 'Afsnitsredigering understøttes ikke',
@@ -1471,15 +1475,13 @@ Hvis du vælger at oplyse dit navn, vil det blive brugt til at tilskrive dig dit
 'right-sendemail' => 'Sende e-mail til andre brugere',
 'right-passwordreset' => 'Se emails til nulstilling af adgangskoder',
 
+# Special:Log/newusers
+'newuserlogpage' => 'Brugeroprettelseslog',
+'newuserlogpagetext' => 'Dette er en log over de senest oprettede brugere.',
+
 # User rights log
 'rightslog' => 'Rettighedslog',
 'rightslogtext' => 'Dette er en log over ændringer i brugeres rettigheder.',
-'rightslogentry' => 'ændrede grupperettigheder for „$1“ fra „$2“ til „$3“.',
-'rightslogentry-autopromote' => 'blev automatisk forfremmet fra $2 til $3',
-'logentry-rights-rights' => '$1 ændrede gruppemedlemskabet for $3 fra $4 til $5',
-'logentry-rights-rights-legacy' => '$1 ændrede gruppemedlemskabet for $3',
-'logentry-rights-autopromote' => '$1 blev automatisk forfremmet fra $4 til $5',
-'rightsnone' => '(-)',
 
 # Associated actions - in the sentence "You do not have permission to X"
 'action-read' => 'se denne side',
@@ -2103,7 +2105,7 @@ Se også [[Special:WantedCategories|ønskede kategorier]].',
 'linksearch-ok' => 'Søg',
 'linksearch-text' => 'Wildcards som "*.wikipedia.org" kan benyttes.
 Der skal som minimum angives et topniveau-domæne som f. eks. "*.org".<br />
-Understøttede protokoller: <code>$1</code> (bruger automatisk http:// hvis der ikke er angivet nogen protokol).',
+{{PLURAL:$2|Understøttet protokol|Understøttede protokoller}}: <code>$1</code> (bruger automatisk http:// hvis der ikke er angivet nogen protokol).',
 'linksearch-line' => '$2 linker til $1',
 'linksearch-error' => 'Wildcards må kun benyttes i starten af hostnavnet.',
 
@@ -2116,16 +2118,12 @@ Understøttede protokoller: <code>$1</code> (bruger automatisk http:// hvis der
 # Special:ActiveUsers
 'activeusers' => 'Liste over aktive brugere',
 'activeusers-intro' => 'Dette er en liste over brugere, som har haft en eller anden form for aktivitet inden for {{PLURAL:$1|den|de}} seneste {{PLURAL:$1|dag|$1 dage}}.',
-'activeusers-count' => '$1 {{PLURAL:$1|redigering|redigeringer}} i {{PLURAL:$3|det seneste døgn|de seneste $3 dage}}',
+'activeusers-count' => '$1 {{PLURAL:$1|handling|handlinger}} i {{PLURAL:$3|det seneste døgn|de seneste $3 dage}}',
 'activeusers-from' => 'Vis brugere som starter med:',
 'activeusers-hidebots' => 'Skjul robotter',
 'activeusers-hidesysops' => 'Skjul administratorer',
 'activeusers-noresult' => 'Ingen brugere fundet.',
 
-# Special:Log/newusers
-'newuserlogpage' => 'Brugeroprettelseslog',
-'newuserlogpagetext' => 'Dette er en log over de senest oprettede brugere.',
-
 # Special:ListGroupRights
 'listgrouprights' => 'Brugergrupperettigheder',
 'listgrouprights-summary' => 'Denne side viser de brugergrupper der er defineret på denne wiki og de enkelte gruppers rettigheder.
@@ -2192,7 +2190,8 @@ Den e-mail-adresse, du har angivet i [[Special:Preferences|dine indstillinger]],
 'watchnologin' => 'Ikke logget på',
 'watchnologintext' => 'Du skal være [[Special:UserLogin|logget på]] for at kunne ændre din overvågningsliste.',
 'addwatch' => 'Tilføj til overvågningsliste',
-'addedwatchtext' => "Siden \"[[:\$1]]\" er blevet tilføjet til din [[Special:Watchlist|overvågningsliste]]. Fremtidige ændringer til denne side og den tilhørende diskussionsside vil blive listet der, og siden vil fremstå '''fremhævet''' i [[Special:RecentChanges|listen med de seneste ændringer]] for at gøre det lettere at finde den. Hvis du senere vil fjerne siden fra din overvågningsliste, så klik \"Fjern overvågning\".",
+'addedwatchtext' => 'Siden "[[:$1]]" er blevet tilføjet til din [[Special:Watchlist|overvågningsliste]].
+Fremtidige ændringer af denne side og dens tilknyttede diskussionsside vil blive vist der.',
 'removewatch' => 'Fjern fra overvågningsliste',
 'removedwatchtext' => 'Siden "[[:$1]]" er blevet fjernet fra [[Special:Watchlist||din overvågningsliste]].',
 'watch' => 'Overvåg',
@@ -2226,7 +2225,7 @@ Den e-mail-adresse, du har angivet i [[Special:Preferences|dine indstillinger]],
 'enotif_subject_moved' => '{{SITENAME}} side $1 er blevet flyttet af {{gender:$2|$2}}',
 'enotif_subject_restored' => '{{SITENAME}} side $1 er blevet gendannet af {{gender:$2|$2}}',
 'enotif_subject_changed' => '{{SITENAME}} side $1 er blevet ændret af {{gender:$2|$2}}',
-'enotif_body_intro_deleted' => '{{SITENAME}} siden $1 er blevet slettet den $PAGEEDITDATE af {{gender:$2|$2}}, se $3 for den aktuelle version.',
+'enotif_body_intro_deleted' => '{{SITENAME}}siden $1 er blevet slettet $PAGEEDITDATE af {{gender:$2|$2}}, se $3.',
 'enotif_body_intro_created' => '{{SITENAME}} siden $1 er blevet oprettet den $PAGEEDITDATE af {{gender:$2|$2}}, se $3 for den aktuelle version.',
 'enotif_body_intro_moved' => '{{SITENAME}} siden $1 er blevet flyttet den $PAGEEDITDATE af {{gender:$2|$2}}, se $3 for den aktuelle revision.',
 'enotif_body_intro_restored' => '{{SITENAME}} siden $1 er blevet gendannet den $PAGEEDITDATE af {{gender:$2|$2}}, se $3 for den aktuelle version.',
@@ -2260,6 +2259,8 @@ $UNWATCHURL
 
 Tilbagemelding og yderligere hjælp:
 {{canonicalurl:{{MediaWiki:Helppage}}}}',
+'created' => 'oprettet',
+'changed' => 'ændret',
 
 # Delete
 'deletepage' => 'Slet side',
@@ -2327,6 +2328,8 @@ Se [[Special:ProtectedPages|listen over beskyttede sider]] for listen over sideb
 'prot_1movedto2' => '$1 flyttet til $2',
 'protect-badnamespace-title' => 'Navnerum, der ikke kan beskyttes',
 'protect-badnamespace-text' => 'Sider i dette navnerum kan ikke beskyttes.',
+'protect-norestrictiontypes-text' => 'Denne side kan ikke beskyttes, da der er ikke er nogen tilgængelige begrænsningstyper.',
+'protect-norestrictiontypes-title' => 'Ikke muligt at beskytte side',
 'protect-legend' => 'Bekræft beskyttelse',
 'protectcomment' => 'Begrundelse:',
 'protectexpiry' => 'Udløb',
@@ -2339,9 +2342,9 @@ Se [[Special:ProtectedPages|listen over beskyttede sider]] for listen over sideb
 'protect-locked-access' => "Den brugerkonto har ikke de nødvendige rettigheder til at ændre sidebeskyttelsen. Her er de aktuelle beskyttelsesindstillinger for siden '''„$1“:'''",
 'protect-cascadeon' => 'Denne side er del af en nedarvet skrivebeskyttelse. Wen er indeholdt i nedenstående {{PLURAL:$1|side|sider}}, som er skrivebeskyttet med tilvalg af "nedarvende sidebeskyttelse" Sidebeskyttelsen kan ændres for denne side, det påvirker dog ikke kaskadespærringen:',
 'protect-default' => 'Tillad alle brugere',
-'protect-fallback' => 'Kræver "$1"-tilladelse',
-'protect-level-autoconfirmed' => 'Spær for nye og uregistrerede brugere',
-'protect-level-sysop' => 'Kun administratorer',
+'protect-fallback' => 'Tillad kun brugere med "$1" adgang',
+'protect-level-autoconfirmed' => 'Tillad kun autobekræftede brugere',
+'protect-level-sysop' => 'Tillad kun administratorer',
 'protect-summary-cascade' => 'nedarvende',
 'protect-expiring' => 'til $1 (UTC)',
 'protect-expiring-local' => 'udløber $1',
@@ -2807,6 +2810,7 @@ Alle Transwiki import-aktioner protokolleres i [[Special:Log/import|import-logge
 'import-error-interwiki' => 'Siden "$1" importeres ikke, da dens navn er reserveret for eksterne henvisninger (interwiki).',
 'import-error-special' => 'Siden "$1" importeres ikke, da den tilhører et særligt navnerum, der ikke tillader sider.',
 'import-error-invalid' => 'Siden "$1" importeres ikke, da dens navn er ugyldigt.',
+'import-error-unserialize' => 'Ændring $2 af siden "$1" kunne ikke afserialiseres. Ændringen brugte indholdsmodel $3 serialiseret som $4.',
 'import-options-wrong' => '{{PLURAL:$2|Ugyldig indstilling|Ugyldige indstillinger}}: <nowiki>$1</nowiki>',
 'import-rootpage-invalid' => 'Den rodside der er angivet har en ugyldig titel.',
 'import-rootpage-nosubpage' => 'Navnerummet "$1" tillader ikke undersider af rodsiderne.',
@@ -2964,6 +2968,7 @@ Dette skyldes sandsynligvis en henvisning til et sortlistet eksternt websted.',
 'pageinfo-magic-words' => '{{PLURAL:$1|Magisk|Magiske}} ord ($1)',
 'pageinfo-hidden-categories' => '{{PLURAL:$1|Skjult kategori|Skjulte kategorier}} ($1)',
 'pageinfo-templates' => '{{PLURAL:$1|Transkluderet skabelon|Transkluderede skabeloner}} ($1)',
+'pageinfo-transclusions' => '{{PLURAL:$1|Side|Sider}} transkluderet på ( $1 )',
 'pageinfo-toolboxlink' => 'Oplysninger om siden',
 'pageinfo-redirectsto' => 'Omdirigerer til',
 'pageinfo-redirectsto-info' => 'info',
@@ -2972,6 +2977,10 @@ Dette skyldes sandsynligvis en henvisning til et sortlistet eksternt websted.',
 'pageinfo-protect-cascading' => 'Kaskadebeskyttelser begynder her',
 'pageinfo-protect-cascading-yes' => 'Ja',
 'pageinfo-protect-cascading-from' => 'Kaskadebeskyttelser begynder fra',
+'pageinfo-category-info' => 'Kategorioplysninger',
+'pageinfo-category-pages' => 'Antal sider',
+'pageinfo-category-subcats' => 'Antal underkategorier',
+'pageinfo-category-files' => 'Antal filer',
 
 # Skin names
 'skinname-standard' => 'Klassik',
@@ -3028,6 +3037,7 @@ Du kan beskadige dit system hvis du udfører den.",
 'file-nohires' => 'Ingen højere opløsning fundet.',
 '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-preview' => 'Størrelse af denne forhåndsvisning: $1.',
 'show-big-image-other' => '{{PLURAL:$2|Anden opløsning|Andre opløsninger}}: $1.',
@@ -3058,6 +3068,8 @@ Du kan beskadige dit system hvis du udfører den.",
 'minutes' => '{{PLURAL: $1|$1 minut|$1 minutter}}',
 'hours' => '{{PLURAL: $1|$1 time|$1 timer}}',
 'days' => '{{PLURAL: $1|$1 dag|$1 dage}}',
+'months' => '{{PLURAL:$1|$1 måned|$1 måneder}}',
+'years' => '{{PLURAL:$1|$1 år}}',
 'ago' => '$1 siden',
 'just-now' => 'lige nu',
 
@@ -3704,7 +3716,7 @@ Billeder vises i fuld opløsning, og andre mediatyper vil blive aktiveret med de
 'specialpages-group-highuse' => 'Højt profilerede sider',
 'specialpages-group-pages' => 'Sidelister',
 'specialpages-group-pagetools' => 'Sideværktøjer',
-'specialpages-group-wiki' => 'Wikidata og værktøjer',
+'specialpages-group-wiki' => 'Data og værktøjer',
 'specialpages-group-redirects' => 'Specialsider der viderestiller',
 'specialpages-group-spam' => 'Spamværktøjer',
 
@@ -3801,8 +3813,12 @@ Billeder vises i fuld opløsning, og andre mediatyper vil blive aktiveret med de
 'logentry-newusers-newusers' => 'Brugerkontoen $1 blev oprettet',
 'logentry-newusers-create' => 'Brugerkontoen $1 blev oprettet',
 'logentry-newusers-create2' => 'Brugerkontoen $3 blev oprettet af $1',
+'logentry-newusers-byemail' => 'Brugerkonto  $3  blev oprettet af  $1  og adgangskode er sendt via e-mail',
 'logentry-newusers-autocreate' => 'Kontoen $1 blev automatisk oprettet',
-'newuserlog-byemail' => 'kodeord tilsendt pr. e-mail',
+'logentry-rights-rights' => '$1 ændrede gruppemedlemskabet for $3 fra $4 til $5',
+'logentry-rights-rights-legacy' => '$1 ændrede gruppemedlemskabet for $3',
+'logentry-rights-autopromote' => '$1 blev automatisk forfremmet fra $4 til $5',
+'rightsnone' => '(-)',
 
 # Feedback
 'feedback-bugornote' => 'Hvis du er klar til at beskrive et teknisk problem i detaljer, bedes du [$1 rapportere en fejl].
@@ -3856,6 +3872,7 @@ Ellers kan du bruge den enkle formular nedenfor. Din kommentar vil blive tilføj
 'api-error-ok-but-empty' => 'Intern fejl: intet svar fra serveren.',
 'api-error-overwrite' => 'Det er ikke tilladt at overskrive en eksisterende fil.',
 'api-error-stashfailed' => 'Intern fejl: serveren kunne ikke gemme midlertidig fil.',
+'api-error-publishfailed' => 'Intern fejl: serveren kunne ikke udgive midlertidig fil.',
 'api-error-timeout' => 'Serveren svarede ikke tilbage inden for den forventede tid.',
 'api-error-unclassified' => 'En ukendt fejl opstod.',
 'api-error-unknown-code' => 'Ukendt fejl: "$1"',
@@ -3876,6 +3893,4 @@ Ellers kan du bruge den enkle formular nedenfor. Din kommentar vil blive tilføj
 'duration-centuries' => '$1 {{PLURAL:$1|århundrede|århundreder}}',
 'duration-millennia' => '$1 {{PLURAL:$1|årtusind|årtusinder}}',
 
-# Unknown messages
-'svg-long-error' => 'Ugyldig SVG-fil: $1',
 );
index 4002910..53e87ee 100644 (file)
@@ -61,6 +61,7 @@
  * @author Tischbeinahe
  * @author UV
  * @author Umherirrender
+ * @author Vogone
  * @author W (aka Wuzur)
  * @author Wikifan
  * @author Wikinaut
@@ -192,6 +193,7 @@ $specialPageAliases = array(
        'Userlogin'                 => array( 'Anmelden' ),
        'Userlogout'                => array( 'Abmelden' ),
        'Userrights'                => array( 'Benutzerrechte' ),
+       'Version'                   => array( 'Versionsinformationen' ),
        'Wantedcategories'          => array( 'Gewünschte_Kategorien' ),
        'Wantedfiles'               => array( 'Gewünschte_Dateien', 'Fehlende_Dateien' ),
        'Wantedpages'               => array( 'Gewünschte_Seiten' ),
@@ -540,6 +542,7 @@ $messages = array(
 'newwindow' => '(wird in einem neuen Fenster geöffnet)',
 'cancel' => 'Abbrechen',
 'moredotdotdot' => 'Mehr …',
+'morenotlisted' => 'Weitere, nicht aufgeführte …',
 'mypage' => 'Eigene Seite',
 'mytalk' => 'Diskussion',
 'anontalk' => 'Diskussionsseite dieser IP',
@@ -778,7 +781,7 @@ Die Daten werden bis auf Weiteres nicht erneuert.',
 Funktion: $1<br />
 Abfrage: $2',
 'viewsource' => 'Quelltext anzeigen',
-'viewsource-title' => 'Quelltext von Seite $1 ansehen',
+'viewsource-title' => 'Quelltext der Seite $1',
 'actionthrottled' => 'Aktionsanzahl limitiert',
 'actionthrottledtext' => 'Im Rahmen einer Anti-Spam-Maßnahme kann diese Aktion in einem kurzen Zeitabstand nur begrenzt oft ausgeführt werden. Diese Grenze hast du überschritten.
 Bitte versuche es in ein paar Minuten erneut.',
@@ -842,7 +845,7 @@ Vergiss nicht, deine [[Special:Preferences|{{SITENAME}}-Einstellungen]] zu ände
 'gotaccount' => "Du hast bereits ein Benutzerkonto? '''$1'''.",
 'gotaccountlink' => 'Anmelden',
 'userlogin-resetlink' => 'Die Anmeldedaten vergessen?',
-'createaccountmail' => 'Benutzerkonto anlegen (mit Passwortzusendung)',
+'createaccountmail' => 'Ein temporäres Zufallspasswort verwenden und an die unten angegebene E-Mail-Adresse versenden',
 'createaccountreason' => 'Grund:',
 'badretype' => 'Die beiden Passwörter stimmen nicht überein.',
 'userexists' => 'Dieser Benutzername ist schon vergeben.
@@ -912,6 +915,7 @@ Bitte warte, bevor du es erneut probierst.',
 # E-mail sending
 'php-mail-error-unknown' => 'Unbekannter Fehler mit der Funktion mail() von PHP',
 'user-mail-no-addy' => 'Versuchte, eine E-Mail ohne Angabe einer E-Mail-Adresse zu versenden.',
+'user-mail-no-body' => 'Es wurde versucht, eine E-Mail mit einem leeren oder zu kurzen Textkörper zu versenden.',
 
 # Change password dialog
 'resetpass' => 'Passwort ändern',
@@ -968,6 +972,7 @@ Temporäres Passwort: $2',
 'changeemail-oldemail' => 'Aktuelle E-Mail-Adresse:',
 'changeemail-newemail' => 'Neue E-Mail-Adresse:',
 'changeemail-none' => '(keine)',
+'changeemail-password' => 'Dein {{SITENAME}}-Passwort:',
 'changeemail-submit' => 'E-Mail-Adresse ändern',
 'changeemail-cancel' => 'Abbrechen',
 
@@ -1146,7 +1151,6 @@ Zur Information folgt der aktuelle Logbucheintrag:",
 'template-semiprotected' => '(schreibgeschützt für unangemeldete und neue Benutzer)',
 'hiddencategories' => 'Diese Seite ist Mitglied von {{PLURAL:$1|1 versteckter Kategorie|$1 versteckten Kategorien}}:',
 'edittools' => '<!-- Dieser Text wird unter dem „Bearbeiten“-Formular sowie dem „Hochladen“-Formular angezeigt. -->',
-'nocreatetitle' => 'Die Erstellung neuer Seiten ist eingeschränkt.',
 'nocreatetext' => 'Auf {{SITENAME}} wurde das Erstellen neuer Seiten eingeschränkt. Du kannst bestehende Seiten ändern oder dich [[Special:UserLogin|anmelden]].',
 'nocreate-loggedin' => 'Du hast nicht die erforderliche Berechtigung, um neue Seiten erstellen zu können.',
 'sectioneditnotsupported-title' => 'Die Bearbeitung von Abschnitten wird nicht unterstützt',
@@ -1689,15 +1693,13 @@ Dies kann nicht mehr rückgängig gemacht werden.',
 'right-sendemail' => 'E-Mails an andere Benutzer senden',
 'right-passwordreset' => 'Passwort eines Benutzers zurücksetzen und die dazu verschickte E-Mail einsehen',
 
+# Special:Log/newusers
+'newuserlogpage' => 'Neuanmeldungs-Logbuch',
+'newuserlogpagetext' => 'Dies ist ein Logbuch der neu erstellten Benutzerkonten.',
+
 # User rights log
 'rightslog' => 'Rechte-Logbuch',
 'rightslogtext' => 'Dies ist das Logbuch der Änderungen der Benutzerrechte.',
-'rightslogentry' => 'änderte die Benutzerrechte für „$1“ von „$2“ zu „$3“',
-'rightslogentry-autopromote' => 'wurde automatisch von „$2“ zu „$3“ zugeordnet',
-'logentry-rights-rights' => '$1 änderte die Gruppenzugehörigkeit für $3 von $4 zu $5',
-'logentry-rights-rights-legacy' => '$1 änderte die Gruppenzugehörigkeit für $3',
-'logentry-rights-autopromote' => '$1 wurde automatisch von $4 zu $5 zugeordnet',
-'rightsnone' => '(–)',
 
 # Associated actions - in the sentence "You do not have permission to X"
 'action-read' => 'die Seite zu lesen',
@@ -1983,7 +1985,7 @@ Sie kann daher keiner ordnungsgemäßen Sicherheitsüberprüfung unterzogen werd
 
 # Special:UploadStash
 'uploadstash' => 'Vorabspeicherung beim Hochladen',
-'uploadstash-summary' => 'Diese Seite ermöglicht den Zugriff auf Dateien, die hochgeladen wurden, bzw. gerade hochgeladen werden, aber noch nicht auf dem Wiki publiziert wurden. Diese Dateien sind, der hochladende Benutzer ausgenommen, noch nicht öffentlich einsehbar.',
+'uploadstash-summary' => 'Diese Seite ermöglicht den Zugriff auf Dateien, die hochgeladen wurden, bzw. gerade hochgeladen werden, aber noch nicht auf dem Wiki publiziert wurden. Die Dateien sind ausschließlich für den hochladenden Benutzer einsehbar.',
 'uploadstash-clear' => 'Die vorab gespeicherten Dateien entfernen',
 'uploadstash-nofiles' => 'Es sind keine vorab gespeicherten Dateien vorhanden.',
 'uploadstash-badtoken' => 'Das Entfernen der vorab gespeicherten Dateien war erfolglos, vielleicht weil deine Sitzungsdaten abgelaufen sind. Bitte versuche es erneut.',
@@ -2321,7 +2323,7 @@ Siehe auch die Liste der [[Special:WantedCategories|gewünschten Kategorien]].',
 'linksearch-pat' => 'Suchmuster:',
 'linksearch-ns' => 'Namensraum:',
 'linksearch-ok' => 'Suchen',
-'linksearch-text' => 'Diese Spezialseite ermöglicht die Suche nach Seiten, in denen bestimmte Weblinks enthalten sind. Dabei können Platzhalter wie beispielsweise <code>*.beispiel.de</code> benutzt werden. Es muss mindestens eine Top-Level-Domain, z. B. „*.org“. angegeben werden. <br />Unterstützte Protokolle: <code>$1</code> (Standard ist http, falls kein Protokoll angegeben ist.)',
+'linksearch-text' => 'Diese Spezialseite ermöglicht die Suche nach Seiten, in denen bestimmte Weblinks enthalten sind. Dabei können Platzhalter wie beispielsweise <code>*.beispiel.de</code> benutzt werden. Es muss mindestens eine Top-Level-Domain, z. B. „*.org“. angegeben werden. <br />{{PLURAL:$2|Unterstütztes Protokoll|Unterstützte Protokolle}}: <code>$1</code> (Standard ist http, falls kein Protokoll angegeben ist.)',
 'linksearch-line' => '$1 ist verlinkt von $2',
 'linksearch-error' => 'Wildcards können nur am Anfang der URL verwendet werden.',
 
@@ -2334,16 +2336,12 @@ Siehe auch die Liste der [[Special:WantedCategories|gewünschten Kategorien]].',
 # Special:ActiveUsers
 'activeusers' => 'Aktive Benutzer',
 'activeusers-intro' => 'Dies ist eine Liste von Benutzern, die innerhalb {{PLURAL:$1|des letzten Tages|der letzten $1 Tage}} Aktivitäten aufwiesen.',
-'activeusers-count' => '$1 {{PLURAL:$1|Bearbeitung|Bearbeitungen}} in den {{PLURAL:$3|letzten 24 Stunden|vergangenen $3 Tagen}}',
+'activeusers-count' => '$1 {{PLURAL:$1|Aktion|Aktionen}} in den {{PLURAL:$3|letzten 24 Stunden|vergangenen $3 Tagen}}',
 'activeusers-from' => 'Zeige Benutzer ab:',
 'activeusers-hidebots' => 'Bots ausblenden',
 'activeusers-hidesysops' => 'Administratoren ausblenden',
 'activeusers-noresult' => 'Keine Benutzer gefunden.',
 
-# Special:Log/newusers
-'newuserlogpage' => 'Neuanmeldungs-Logbuch',
-'newuserlogpagetext' => 'Dies ist ein Logbuch der neu erstellten Benutzerkonten.',
-
 # Special:ListGroupRights
 'listgrouprights' => 'Benutzergruppenrechte',
 'listgrouprights-summary' => 'Dies ist eine Liste der in diesem Wiki definierten Benutzergruppen und der damit verbundenen Rechte.
@@ -2411,7 +2409,7 @@ Als Absender wird die E-Mail-Adresse aus deinen [[Special:Preferences|Einstellun
 'watchnologintext' => 'Du musst [[Special:UserLogin|angemeldet]] sein, um deine Beobachtungsliste bearbeiten zu können.',
 'addwatch' => 'Zur Beobachtungsliste hinzufügen',
 'addedwatchtext' => 'Die Seite „[[:$1]]“ wurde zu deiner [[Special:Watchlist|Beobachtungsliste]] hinzugefügt.
-Spätere Änderungen an dieser Seite und der zugehörigen Diskussionsseite werden dort gelistet und die Seite wird in der [[Special:RecentChanges|Liste der letzten Änderungen]] in Fettschrift angezeigt.',
+Spätere Änderungen an dieser Seite und der zugehörigen Diskussionsseite werden dort gelistet.',
 'removewatch' => 'Von der Beobachtungsliste entfernen',
 'removedwatchtext' => 'Die Seite „[[:$1]]“ wurde von deiner [[Special:Watchlist|Beobachtungsliste]] entfernt.',
 'watch' => 'Beobachten',
@@ -2445,7 +2443,7 @@ Spätere Änderungen an dieser Seite und der zugehörigen Diskussionsseite werde
 'enotif_subject_moved' => '{{SITENAME}}-Seite $1 wurde von {{GENDER:$2|$2}} verschoben',
 'enotif_subject_restored' => '{{SITENAME}}-Seite $1 wurde von {{GENDER:$2|$2}} wiederhergestellt',
 'enotif_subject_changed' => '{{SITENAME}}-Seite $1 wurde von {{GENDER:$2|$2}} geändert',
-'enotif_body_intro_deleted' => 'Die {{SITENAME}}-Seite $1 wurde am $PAGEEDITDATE von {{GENDER:$2|$2}} gelöscht. Siehe $3 für deren aktuelle Version.',
+'enotif_body_intro_deleted' => 'Die {{SITENAME}}-Seite $1 wurde am $PAGEEDITDATE von {{GENDER:$2|$2}} gelöscht. Siehe $3.',
 'enotif_body_intro_created' => 'Die {{SITENAME}}-Seite $1 wurde am $PAGEEDITDATE von {{GENDER:$2|$2}} erstellt. Siehe $3 für deren aktuelle Version.',
 'enotif_body_intro_moved' => 'Die {{SITENAME}}-Seite $1 wurde am $PAGEEDITDATE von {{GENDER:$2|$2}} verschoben. Siehe $3 für deren aktuelle Version.',
 'enotif_body_intro_restored' => 'Die {{SITENAME}}-Seite $1 wurde am $PAGEEDITDATE von {{GENDER:$2|$2}} wiederhergestellt. Siehe $3 für deren aktuelle Version.',
@@ -2475,6 +2473,8 @@ Um die Einstellungen deiner Beobachtungsliste anzupassen, besuche {{canonicalurl
 Um die Seite von deiner Beobachtungsliste herunterzunehmen, besuche $UNWATCHURL
 
 Rückmeldungen und weitere Hilfe: {{canonicalurl:{{MediaWiki:Helppage}}}}',
+'created' => 'erstellt',
+'changed' => 'geändert',
 
 # Delete
 'deletepage' => 'Seite löschen',
@@ -2540,6 +2540,8 @@ Siehe die [[Special:ProtectedPages|Liste der geschützten Seiten]] für alle akt
 'prot_1movedto2' => 'hat „[[$1]]“ nach „[[$2]]“ verschoben',
 'protect-badnamespace-title' => 'Nicht-schützbarer Namensraum',
 'protect-badnamespace-text' => 'Seiten dieses Namensraums können nicht geschützt werden.',
+'protect-norestrictiontypes-text' => 'Diese Seite kann nicht geschützt werden, da keine Beschränkungstypen verfügbar sind.',
+'protect-norestrictiontypes-title' => 'Nicht schützbare Seite',
 'protect-legend' => 'Seitenschutzstatus ändern',
 'protectcomment' => 'Grund:',
 'protectexpiry' => 'Sperrdauer:',
@@ -2552,9 +2554,9 @@ Siehe die [[Special:ProtectedPages|Liste der geschützten Seiten]] für alle akt
 'protect-locked-access' => "Dein Benutzerkonto verfügt nicht über die notwendigen Rechte zur Änderung des Seitenschutzes. Hier sind die aktuellen Seitenschutzeinstellungen der Seite '''„$1“:'''",
 'protect-cascadeon' => 'Diese Seite ist gegenwärtig Teil einer Kaskadensperre. Sie ist in die {{PLURAL:$1|folgende Seite|folgenden Seiten}} eingebunden, welche durch die Kaskadensperroption geschützt {{PLURAL:$1|ist|sind}}. Der Seitenschutzstatus dieser Seite kann geändert werden, dies hat jedoch keinen Einfluss auf die Kaskadensperre:',
 'protect-default' => 'Alle Benutzer',
-'protect-fallback' => 'Es wird die „$1“-Berechtigung benötigt.',
-'protect-level-autoconfirmed' => 'Sperrung für neue und nicht registrierte Benutzer',
-'protect-level-sysop' => 'Nur Administratoren',
+'protect-fallback' => 'Nur Benutzern mit der „$1“-Berechtigung erlauben.',
+'protect-level-autoconfirmed' => 'Nur automatisch bestätigten Benutzern erlauben',
+'protect-level-sysop' => 'Nur Administratoren erlauben',
 'protect-summary-cascade' => 'kaskadierend',
 'protect-expiring' => 'bis $2, $3 Uhr (UTC)',
 'protect-expiring-local' => 'bis $1',
@@ -2846,22 +2848,22 @@ Siehe die [[Special:BlockList|Liste der gesperrten IP-Adressen und Benutzernamen
 'movepagetext' => "Mit untenstehendem Formular kannst du eine Seite umbenennen, indem du sie mitsamt allen Versionen auf einen neuen Titel verschiebst.
 Der alte Titel wird danach zum neuen weiterleiten.
 Du kannst Weiterleitungen, die auf den Originaltitel verlinken, automatisch korrigieren lassen.
-Stelle sicher, dass du im Anschluss alle [[Special:DoubleRedirects|doppelten]] oder [[Special:BrokenRedirects|kaputten Weiterleitungen]] überprüfst.
+Stelle sicher, dass du im Anschluss alle [[Special:DoubleRedirects|doppelten]] oder [[Special:BrokenRedirects|defekten Weiterleitungen]] überprüfst.
 Du bist dafür verantwortlich, dass Links weiterhin auf das korrekte Ziel verweisen.
 
-Die Seite wird '''nicht''' verschoben, sofern es bereits eine Seite mit dem vorgesehenen Titel gibt, es sei denn, diese ist leer oder eine Weiterleitung ohne Versionsgeschichte.
-Dies bedeutet, dass du die Umbenennung rückgängig machen kannst, sofern du einen Fehler gemacht hast. Du kannst hingegen keine Seite überschreiben.
+Die Seite wird '''nicht''' verschoben, sofern es bereits eine Seite mit dem vorgesehenen Titel gibt, es sei denn, diese eine Weiterleitung ohne Versionsgeschichte.
+Dies bedeutet, dass du die Umbenennung rückgängig machen kannst, sofern du einen Fehler gemacht hast. Du kannst hingegen keine existierende Seite überschreiben.
 
 '''Warnung!'''
 Die Verschiebung kann weitreichende und unerwartete Folgen für häufig besuchte Seiten haben.
 Du solltest daher die Konsequenzen verstanden haben, bevor du jetzt fortfährst.",
 'movepagetext-noredirectfixer' => "Mit untenstehendem Formular kannst du eine Seite umbenennen, indem du sie mitsamt allen Versionen auf einen neuen Titel verschiebst.
 Der alte Titel wird danach zum neuen weiterleiten.
-Stelle sicher, dass du im Anschluss alle [[Special:DoubleRedirects|doppelten]] oder [[Special:BrokenRedirects|kaputten Weiterleitungen]] überprüfst.
+Stelle sicher, dass du im Anschluss alle [[Special:DoubleRedirects|doppelten]] oder [[Special:BrokenRedirects|defekten Weiterleitungen]] überprüfst.
 Du bist dafür verantwortlich, dass Links weiterhin auf das korrekte Ziel verweisen.
 
-Die Seite wird '''nicht''' verschoben, sofern es bereits eine Seite mit dem vorgesehenen Titel gibt, es sei denn, diese ist leer oder eine Weiterleitung ohne Versionsgeschichte.
-Dies bedeutet, dass du die Umbenennung rückgängig machen kannst, sofern du einen Fehler gemacht hast. Du kannst hingegen keine Seite überschreiben.
+Die Seite wird '''nicht''' verschoben, sofern es bereits eine Seite mit dem vorgesehenen Titel gibt, es sei denn, diese ist eine Weiterleitung ohne Versionsgeschichte.
+Dies bedeutet, dass du die Umbenennung rückgängig machen kannst, sofern du einen Fehler gemacht hast. Du kannst hingegen keine existierende Seite überschreiben.
 
 '''Warnung!'''
 Die Verschiebung kann weitreichende und unerwartete Folgen für häufig besuchte Seiten haben.
@@ -3024,7 +3026,7 @@ Diese auf dem lokalen Rechner speichern und danach hier hochladen.',
 'import-noarticle' => 'Es wurde keine zu importierende Seite angegeben!',
 'import-nonewrevisions' => 'Alle Versionen wurden bereits zu einem früheren Zeitpunkt importiert.',
 'xml-error-string' => '$1 Zeile $2, Spalte $3, (Byte $4): $5',
-'import-upload' => 'XML-Daten importieren',
+'import-upload' => 'XML-Dateien importieren',
 'import-token-mismatch' => 'Verlust der Sessiondaten. Bitte versuche es erneut.',
 'import-invalid-interwiki' => 'Aus dem angegebenen Wiki ist kein Import möglich.',
 'import-error-edit' => 'Die Seite „$1“ wurde nicht importiert, da du nicht berechtigt bist, sie zu bearbeiten.',
@@ -3032,6 +3034,7 @@ Diese auf dem lokalen Rechner speichern und danach hier hochladen.',
 'import-error-interwiki' => 'Die Seite „$1“ wurde nicht importiert, da deren Name für externe Links (Interwiki) reserviert ist.',
 'import-error-special' => 'Die Seite „$1“ wurde nicht importiert, da sie zu einem besonderen Namensraum gehört, in dem keine Seiten möglich sind.',
 'import-error-invalid' => 'Seite „$1“ wurde nicht importiert, da deren Name ungültig ist.',
+'import-error-unserialize' => 'Die Version $2 der Seite „$1“ konnte nicht deserialisiert werden. Die Version wurde zur Verwendung des Inhaltsmodells $3 gemeldet, das als $4 serialisiert ist.',
 'import-options-wrong' => 'Falsche {{PLURAL:$2|Option|Optionen}}: <nowiki>$1</nowiki>',
 'import-rootpage-invalid' => 'Der angegebene Stammseitenname ist ungültig.',
 'import-rootpage-nosubpage' => 'Im Namensraum „$1“ der Stammseite sind keine Unterseiten erlaubt.',
@@ -3196,8 +3199,8 @@ Das liegt wahrscheinlich an einem Link auf eine externe Seite.',
 'pageinfo-article-id' => 'Seitenkennnummer',
 'pageinfo-language' => 'Seiteninhaltssprache',
 'pageinfo-robot-policy' => 'Suchmaschinenstatus',
-'pageinfo-robot-index' => 'Indizierbar',
-'pageinfo-robot-noindex' => 'Nicht indizierbar',
+'pageinfo-robot-index' => 'Indexierbar',
+'pageinfo-robot-noindex' => 'Nicht indexierbar',
 'pageinfo-views' => 'Anzahl der Seitenaufrufe',
 'pageinfo-watchers' => 'Anzahl der Beobachter der Seite',
 'pageinfo-redirects-name' => 'Weiterleitungen zu dieser Seite',
@@ -3215,6 +3218,7 @@ Das liegt wahrscheinlich an einem Link auf eine externe Seite.',
 'pageinfo-magic-words' => '{{PLURAL:$1|Magisches Wort|Magische Wörter}} ($1)',
 'pageinfo-hidden-categories' => 'Versteckte {{PLURAL:$1|Kategorie|Kategorien}} ($1)',
 'pageinfo-templates' => 'Eingebundene {{PLURAL:$1|Vorlage|Vorlagen}} ($1)',
+'pageinfo-transclusions' => 'Eingebunden in {{PLURAL:$1|1 Seite|$1 Seiten}}',
 'pageinfo-toolboxlink' => 'Seiteninformationen',
 'pageinfo-redirectsto' => 'Weiterleitungen nach',
 'pageinfo-redirectsto-info' => 'Information',
@@ -3223,6 +3227,10 @@ Das liegt wahrscheinlich an einem Link auf eine externe Seite.',
 'pageinfo-protect-cascading' => 'Seiten mit Kaskadenschutz von hier',
 'pageinfo-protect-cascading-yes' => 'Ja',
 'pageinfo-protect-cascading-from' => 'Seiten mit Kaskadenschutz von',
+'pageinfo-category-info' => 'Kategorieinformationen',
+'pageinfo-category-pages' => 'Anzahl der Seiten',
+'pageinfo-category-subcats' => 'Anzahl der Unterkategorien',
+'pageinfo-category-files' => 'Anzahl der Dateien',
 
 # Skin names
 'skinname-standard' => 'Klassik',
@@ -3280,6 +3288,7 @@ Durch das Herunterladen und Öffnen der Datei kann dein Computer beschädigt wer
 'file-nohires' => 'Keine höhere Auflösung vorhanden.',
 '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-preview' => 'Größe dieser Vorschau: $1.',
 'show-big-image-other' => 'Weitere {{PLURAL:$2|Auflösung|Auflösungen}}: $1.',
@@ -3309,6 +3318,8 @@ Durch das Herunterladen und Öffnen der Datei kann dein Computer beschädigt wer
 'minutes' => '{{PLURAL:$1|$1 Minute|$1 Minuten}}',
 'hours' => '{{PLURAL:$1|einer Stunde|$1 Stunden}}',
 'days' => '{{PLURAL:$1|$1 Tag|$1 Tage}}',
+'months' => '{{PLURAL:$1|Ein Monat|$1 Monate}}',
+'years' => '{{PLURAL:$1|Ein Jahr|$1 Jahre}}',
 'ago' => 'vor $1',
 'just-now' => 'Gerade eben',
 
@@ -3924,6 +3935,7 @@ Du kannst auch die [[Special:EditWatchlist|Standardseite]] zum Bearbeiten benutz
 'version-variables' => 'Erweiterungen mit Variablen',
 'version-antispam' => 'Spamschutzerweiterungen',
 'version-skins' => 'Benutzeroberflächen',
+'version-api' => 'API-Erweiterungen',
 'version-other' => 'Andere Erweiterungen',
 'version-mediahandlers' => 'Mediennutzungserweiterungen',
 'version-hooks' => "Schnittstellen ''(Hooks)''",
@@ -3984,7 +3996,7 @@ Eine [{{SERVER}}{{SCRIPTPATH}}/COPYING Kopie der ''GNU General Public License'']
 'specialpages-group-highuse' => 'Häufig benutzte Seiten',
 'specialpages-group-pages' => 'Seitenlisten',
 'specialpages-group-pagetools' => 'Seitenwerkzeuge',
-'specialpages-group-wiki' => 'Systemdaten und Werkzeuge',
+'specialpages-group-wiki' => 'Daten und Werkzeuge',
 'specialpages-group-redirects' => 'Weiterleitende Spezialseiten',
 'specialpages-group-spam' => 'Spam-Werkzeuge',
 
@@ -4081,8 +4093,12 @@ Eine [{{SERVER}}{{SCRIPTPATH}}/COPYING Kopie der ''GNU General Public License'']
 'logentry-newusers-newusers' => 'Benutzerkonto $1 wurde erstellt',
 'logentry-newusers-create' => 'Benutzerkonto $1 wurde erstellt',
 'logentry-newusers-create2' => 'Benutzerkonto $3 wurde von $1 erstellt',
+'logentry-newusers-byemail' => 'Das Benutzerkonto $3 wurde von $1 erstellt und das Passwort wurde per E-Mail zugesandt',
 'logentry-newusers-autocreate' => 'Benutzerkonto $1 wurde automatisch erstellt',
-'newuserlog-byemail' => 'das Passwort wurde per E-Mail versandt',
+'logentry-rights-rights' => '$1 änderte die Gruppenzugehörigkeit für $3 von $4 zu $5',
+'logentry-rights-rights-legacy' => '$1 änderte die Gruppenzugehörigkeit für $3',
+'logentry-rights-autopromote' => '$1 wurde automatisch von $4 zu $5 zugeordnet',
+'rightsnone' => '(–)',
 
 # Feedback
 'feedback-bugornote' => 'Sofern du detailliert ein technisches Problem beschreiben möchtest, melde bitte [$1 einen Fehler].
@@ -4136,6 +4152,7 @@ Anderenfalls kannst du auch das untenstehende einfache Formular nutzen. Dein Kom
 'api-error-ok-but-empty' => 'Interner Fehler: Der Server reagiert nicht.',
 'api-error-overwrite' => 'Das Überschreiben einer vorhandenen Datei ist nicht erlaubt.',
 'api-error-stashfailed' => 'Interner Fehler: Der Server konnte keine temporäre Datei speichern.',
+'api-error-publishfailed' => 'Interner Fehler: Der Server konnte die temporäre Datei nicht veröffentlichen.',
 'api-error-timeout' => 'Der Server hat nicht innerhalb der erwarteten Zeit reagiert.',
 'api-error-unclassified' => 'Ein unbekannter Fehler ist aufgetreten.',
 'api-error-unknown-code' => 'Unbekannter Fehler: „$1“',
@@ -4156,6 +4173,4 @@ Anderenfalls kannst du auch das untenstehende einfache Formular nutzen. Dein Kom
 'duration-centuries' => '$1 {{PLURAL:$1|Jahrhundert|Jahrhunderte}}',
 'duration-millennia' => '$1 {{PLURAL:$1|Jahrtausend|Jahrtausende}}',
 
-# Unknown messages
-'svg-long-error' => 'Ungültige SVG-Datei: $1',
 );
index e3e8b13..3800fef 100644 (file)
@@ -51,15 +51,15 @@ $specialPageAliases = array(
        'Activeusers'               => array( 'KarberêAktivi', 'AktivKarberi' ),
        'Allmessages'               => array( 'MesaciPêro' ),
        'Allpages'                  => array( 'PeleyPêro' ),
-       'Ancientpages'              => array( 'PeleyVerêni' ),
+       'Ancientpages'              => array( 'PeleyKehani' ),
        'Badtitle'                  => array( 'SernameyoXırab' ),
-       'Blankpage'                 => array( 'PelaVeng', 'VengPela' ),
-       'Block'                     => array( 'Bloke', 'BlokeIP', 'BlokeKarber' ),
-       'Blockme'                   => array( 'BlokêMe' ),
+       'Blankpage'                 => array( 'PelêVengi' ),
+       'Block'                     => array( 'Bloqe', 'BloqeIP', 'BloqeyêKarber' ),
+       'Blockme'                   => array( 'BloqeyêMe' ),
        'Booksources'               => array( 'KıtabeÇıme' ),
        'BrokenRedirects'           => array( 'HetênayışoXırab' ),
-       'Categories'                => array( 'Kategoriye' ),
-       'ChangeEmail'               => array( 'EpostaBıvurnê' ),
+       'Categories'                => array( 'Kategoriy' ),
+       'ChangeEmail'               => array( 'EpostaVurnayış' ),
        'ChangePassword'            => array( 'ParolaBıvurnê', 'ParolaResetke' ),
        'ComparePages'              => array( 'PelaPêverke' ),
        'Confirmemail'              => array( 'EpostayAraştke' ),
@@ -67,9 +67,9 @@ $specialPageAliases = array(
        'CreateAccount'             => array( 'HesabVırazê' ),
        'Deadendpages'              => array( 'PelaBıgirê' ),
        'DeletedContributions'      => array( 'İştıraqêkeBesterneyayê' ),
-       'Disambiguations'           => array( 'ManeoBin' ),
-       'DoubleRedirects'           => array( 'DıletHeteneayış' ),
-       'EditWatchlist'             => array( 'ListeyaTemaşiVurnayış' ),
+       'Disambiguations'           => array( 'Arêzekerdış' ),
+       'DoubleRedirects'           => array( 'HetanayışoDılet' ),
+       'EditWatchlist'             => array( 'ListeyaSeyrkerdışiVurnayış' ),
        'Emailuser'                 => array( 'EpostayaKarberi' ),
        'Export'                    => array( 'Ateberde' ),
        'Fewestrevisions'           => array( 'TewrtaynRevizyon' ),
@@ -77,33 +77,34 @@ $specialPageAliases = array(
        'Filepath'                  => array( 'RayaDosya', 'HerunaDosya', 'CayêDosya' ),
        'Import'                    => array( 'Azeredê', 'Atewrke' ),
        'Invalidateemail'           => array( 'EpostaAraştkerdışiBıterknê' ),
-       'BlockList'                 => array( 'ListeyêBloki', 'IPBloki', 'Blokeyê_IP' ),
+       'BlockList'                 => array( 'ListeyêBloqi', 'IPBloqi', 'Blokqeyê_IP' ),
        'LinkSearch'                => array( 'GreCıgeyrayış' ),
-       'Listadmins'                => array( 'ListeyêXizmetkaran' ),
-       'Listbots'                  => array( 'ListeyêBotan' ),
-       'Listfiles'                 => array( 'ListeyêDosyayan', 'DosyayaListeke', 'ListeyêResiman' ),
-       'Listgrouprights'           => array( 'ListeyêHeqêGruban', 'HeqêGrubdeKarberan' ),
-       'Listredirects'             => array( 'ListeyêHetanayışi' ),
-       'Listusers'                 => array( 'ListeyêKarberan', 'KarberaListeke' ),
+       'Listadmins'                => array( 'ListeyaSerkaran' ),
+       'Listbots'                  => array( 'ListeyaBotan' ),
+       'Listfiles'                 => array( 'ListeyaDosyayan', 'DosyayaListeke', 'ListeyêResiman' ),
+       'Listgrouprights'           => array( 'ListeyaHeqandêGruban', 'HeqêGrubdeKarberan' ),
+       'Listredirects'             => array( 'ListeyaArêzekerdışan' ),
+       'Listusers'                 => array( 'ListeyaKarberan', 'KarberaListeke' ),
        'Lockdb'                    => array( 'DBKilitke' ),
        'Log'                       => array( 'Qeyd', 'Qeydi' ),
-       'Lonelypages'               => array( 'PeleyêBêkesi' ),
-       'Longpages'                 => array( 'PeleyeDergi' ),
-       'MergeHistory'              => array( 'RavêrdaPêtewrke' ),
+       'Lonelypages'               => array( 'PeleyêBêwayıri' ),
+       'Longpages'                 => array( 'PeleyêDergi' ),
+       'MergeHistory'              => array( 'VerênanPêtewrke' ),
        'MIMEsearch'                => array( 'NIMECıgeyrayış' ),
        'Mostcategories'            => array( 'TewrvêşiKategoriyıni' ),
        'Mostimages'                => array( 'DosyeyêkeCırêvêşiGreDeyayo' ),
+       'Mostinterwikis'            => array( 'TewrvêşiTeberwiki' ),
        'Mostlinked'                => array( 'PeleyêkeCırêvêşiGreDeyayo' ),
        'Mostlinkedcategories'      => array( 'KategoriyêkeCırêvêşiGreDeyayo' ),
        'Mostlinkedtemplates'       => array( 'ŞablonêkeCırêvêşiGreDeyayo' ),
        'Mostrevisions'             => array( 'TewrvêşiRevizyon' ),
-       'Movepage'                  => array( 'PelaAhulne' ),
-       'Mycontributions'           => array( 'İştıraqeMe' ),
-       'Mypage'                    => array( 'PelaMe' ),
-       'Mytalk'                    => array( 'PersiyeMe' ),
+       'Movepage'                  => array( 'PelerBerê' ),
+       'Mycontributions'           => array( 'İştıraqêMe' ),
+       'Mypage'                    => array( 'PeleyêMe' ),
+       'Mytalk'                    => array( 'WerênayışêMe' ),
        'Myuploads'                 => array( 'BarkerdışeMe' ),
        'Newimages'                 => array( 'DosyeyêNewey', 'ResimêNewey' ),
-       'Newpages'                  => array( 'PeleyeNewey' ),
+       'Newpages'                  => array( 'PeleyêNewey' ),
        'PasswordReset'             => array( 'ParolaResetkerdış' ),
        'PermanentLink'             => array( 'GreyoDaimi' ),
        'Popularpages'              => array( 'PeleyêPopuleri' ),
@@ -118,7 +119,7 @@ $specialPageAliases = array(
        'Revisiondelete'            => array( 'RevizyoniBesterne' ),
        'Search'                    => array( 'Cıgeyre' ),
        'Shortpages'                => array( 'PeleyêKılmi' ),
-       'Specialpages'              => array( 'PeleyXısusi' ),
+       'Specialpages'              => array( 'PeleyêXısusi' ),
        'Statistics'                => array( 'İstatistiki' ),
        'Tags'                      => array( 'Etiketi' ),
        'Unblock'                   => array( 'BloqiWedarne' ),
@@ -127,14 +128,14 @@ $specialPageAliases = array(
        'Uncategorizedpages'        => array( 'PeleyêkeKategorinêbiyê' ),
        'Uncategorizedtemplates'    => array( 'ŞablonêkeKategorinêbiyê' ),
        'Undelete'                  => array( 'Peyserbiya' ),
-       'Unlockdb'                  => array( 'DBSırmiake' ),
+       'Unlockdb'                  => array( 'DBKılitiAke' ),
        'Unusedcategories'          => array( 'KategoriyêkeNêkaryayê' ),
        'Unusedimages'              => array( 'DosyeyêkeNêkaryayê' ),
        'Unusedtemplates'           => array( 'ŞablonêkeNêkaryayê' ),
        'Unwatchedpages'            => array( 'PeleyêkeNêweyneyênê' ),
-       'Upload'                    => array( 'Barke' ),
+       'Upload'                    => array( 'Barkerdış' ),
        'UploadStash'               => array( 'BarkerdışêNımtey' ),
-       'Userlogin'                 => array( 'KarberDekewtış' ),
+       'Userlogin'                 => array( 'Karberkewtış' ),
        'Userlogout'                => array( 'KarberVıcyayış' ),
        'Userrights'                => array( 'HeqêKarberan', 'SysopKerdış', 'BotKerdış' ),
        'Version'                   => array( 'Versiyon' ),
@@ -142,7 +143,7 @@ $specialPageAliases = array(
        'Wantedfiles'               => array( 'DosyeyêkeWazênê' ),
        'Wantedpages'               => array( 'PeleyêkeWazênê' ),
        'Wantedtemplates'           => array( 'ŞablonêkeWazênê' ),
-       'Watchlist'                 => array( 'Listeyseyri' ),
+       'Watchlist'                 => array( 'ListaSeyri' ),
        'Whatlinkshere'             => array( 'PelarêGre' ),
        'Withoutinterwiki'          => array( 'Bêİnterwiki' ),
 );
@@ -300,6 +301,7 @@ $magicWords = array(
        'defaultsort_noreplace'     => array( '0', 'cewabçıniyo', 'noreplace' ),
        'pagesincategory_all'       => array( '0', 'pêro', 'all' ),
        'pagesincategory_pages'     => array( '0', 'peley', 'pages' ),
+       'pagesincategory_subcats'   => array( '0', 'bınkati', 'subcats' ),
        'pagesincategory_files'     => array( '0', 'dosyey', 'files' ),
 );
 
@@ -460,7 +462,7 @@ $messages = array(
 
 # Vector skin
 'vector-action-addsection' => 'Mesel Vırazê',
-'vector-action-delete' => 'Besterne',
+'vector-action-delete' => 'Bestere',
 'vector-action-move' => 'Berê',
 'vector-action-protect' => 'Bıpawe',
 'vector-action-undelete' => 'Esterıtışi peyser bıgê',
@@ -495,7 +497,7 @@ $messages = array(
 'create' => 'Vıraze',
 'editthispage' => 'Ena pele bıvurne',
 'create-this-page' => 'Na pele bınuse',
-'delete' => 'Besterne',
+'delete' => 'Bestere',
 'deletethispage' => 'Ena perer besternê',
 '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',
@@ -1048,7 +1050,6 @@ Loge peniye cor de este:",
 'hiddencategories' => 'Ena per de {{PLURAL:$1|1 kategoriyo nımıte|$1 kategoriyê nımıtey}} muhtewa benê:',
 'edittools' => '<!-- Text here will be shown below edit and upload forms. -->',
 'edittools-upload' => '-',
-'nocreatetitle' => 'Vıraştışê pele mehcuro',
 'nocreatetext' => '{{SITENAME}}, Pelê neweyi vıraştış re destur çino.
 şıma eşkeni tepiya şêri u eke şıma qayd biyaye yê [[Special:UserLogin|şıma eşkeni hesab akeri]], eke niye [[Special:UserLogin|şıma eşkeni qayd bıbiy]].',
 'nocreate-loggedin' => 'İcaze şıma çino şıma pelo newe akeri.',
@@ -1180,7 +1181,7 @@ Eke şıma serkari u devam bıkeri [$1 no vurnayiş şıma eşkeni bıvini].",
 Îdarekarî eşkeno ena dif bivîne; belki tiya de [{{fullurl:{{#Special:Log}}/suppress|page={{FULLPAGENAMEE}}}} ploxnayış] de teferruat esto.",
 'rev-delundel' => 'bımocne/bınımne',
 'rev-showdeleted' => 'bımocne',
-'revisiondelete' => 'Bıestere/çımraviyarnayışan peyser bia',
+'revisiondelete' => 'Bestere/çımraviyarnayışan peyser bia',
 'revdelete-nooldid-title' => 'Çımraviyarnayışo waşte nêvêreno',
 'revdelete-nooldid-text' => 'Şıma vıraştışê nê fonksiyoni rê ya yew çımraviyarnayışo waşte diyar nêkerdo, çımraviyarnayışo diyarkerde çıniyo, ya ki şıma wazenê ke çımraviyarnayışê nıkayêni bınımnê.',
 'revdelete-nologtype-title' => 'Qet qeydê cınêdiya',
@@ -1556,7 +1557,7 @@ Kaberê bini ke şıma de kewti irtıbat, adresa e-postey şıma eşkera nêbena
 'right-reupload-own' => 'Dosyeyê ke to bar kerdi, inan sero bınuse',
 'right-reupload-shared' => 'Dosyeyê ke ambarê medyao barekerde de, inan mehelli wedare',
 'right-upload_by_url' => 'Yew URL ra dosyan bar bıke',
-'right-purge' => 'Verde ju pela araşt kerdışi hafızay sita besterne',
+'right-purge' => 'Virê sita seba yew pele bêdestur bestere.',
 'right-autoconfirmed' => 'Pelanê ke nême kılit biyê, inan bıvurne',
 'right-bot' => 'Zey yew karê xoserkerdey be',
 'right-nominornewtalk' => 'Pelanê werênayışan rê vurnayışê qıckeki çıniyê, qutiya mesacanê newiyan bıgurene',
@@ -1601,15 +1602,13 @@ Kaberê bini ke şıma de kewti irtıbat, adresa e-postey şıma eşkera nêbena
 'right-sendemail' => 'Karberanê binî ra e-mail bişirav',
 'right-passwordreset' => 'E-postayanê parola reset kerdışa vineno',
 
+# Special:Log/newusers
+'newuserlogpage' => 'Cıkewtışê hesabvıraştışi',
+'newuserlogpagetext' => 'Ena log de viraştişê karberî esta.',
+
 # User rights log
 'rightslog' => 'Qeydê heqanê karberi',
 'rightslogtext' => 'Ena listeyê loganê ke heqqa karbaranî mucneno.',
-'rightslogentry' => 'eza biyayişê grupî $1 ra $2 rê $3î bivurne',
-'rightslogentry-autopromote' => '$2 otomatikmen gırdkerdışi ra kerd $3.',
-'logentry-rights-rights' => '$1 qandê $3 rê ezayina grube $4 ra $5 vuriye',
-'logentry-rights-rights-legacy' => '$1 qandê $3 rê ezayina grube vuriye',
-'logentry-rights-autopromote' => '$1 otomatikmen $4 ra terfi bi ra $5',
-'rightsnone' => '(çino)',
 
 # Associated actions - in the sentence "You do not have permission to X"
 'action-read' => 'ena pela wanayış',
@@ -1628,7 +1627,7 @@ Kaberê bini ke şıma de kewti irtıbat, adresa e-postey şıma eşkera nêbena
 'action-upload_by_url' => 'Ena dosya yew URL ra bar bike',
 'action-writeapi' => 'ser nuşte API gure bike',
 'action-delete' => 'ena perer besternê',
-'action-deleterevision' => 'nê çımraviyarnayışi bıestere',
+'action-deleterevision' => 'nê çımraviyarnayışi bestere',
 'action-deletedhistory' => 'tarixê ena pel ki estereyî biya, ey bivine',
 'action-browsearchive' => 'pelanê esterıteyan bıgeyre',
 'action-undelete' => 'ena pele reyna biyere',
@@ -1938,7 +1937,7 @@ bıewnê keyepel akerdeyo ya zi bıne vınderê u newe ra tesel bıkerê.
 keyepel nıka zaf meşğulo yew dema herayi de newe ra tesel bıkerê.',
 
 'license' => 'Lisans:',
-'license-header' => 'Lisans',
+'license-header' => 'Lisansdayış',
 'nolicense' => 'Theba nêweçineya',
 'license-nopreview' => '(verqeydî çin o)',
 'upload_source_url' => '(yew URLê raştî, şar rê akerde yo)',
@@ -1962,7 +1961,7 @@ keyepel nıka zaf meşğulo yew dema herayi de newe ra tesel bıkerê.',
 'filehist' => 'Ravêrdê dosya',
 'filehist-help' => 'bıploxne ser yew tarih u aye tarih dı versionê dosya bıvin.',
 'filehist-deleteall' => 'hemî biestere',
-'filehist-deleteone' => 'bıestere',
+'filehist-deleteone' => 'bestere',
 'filehist-revert' => 'reyna biyere',
 'filehist-current' => 'nıkayên',
 'filehist-datetime' => 'Tarix/Zeman',
@@ -2010,12 +2009,12 @@ listeya ke ha ver a têna na {{PLURAL:$1|dosyaya ewwili|dosyaya $1 ewwili}} mocn
 'filerevert-badversion' => 'Vesiyonê lokalê verniyê eno dosya pê ena pulêwext de çin o.',
 
 # File deletion
-'filedelete' => '$1 bıestere',
-'filedelete-legend' => 'Dosya bıestere',
+'filedelete' => '$1 bestere',
+'filedelete-legend' => 'Dosya bestere',
 'filedelete-intro' => "Ti ho dosyayê '''[[Media:$1|$1]]'''i u tarixê ey dosyayê hemî estereno.",
 'filedelete-intro-old' => "Ti ho versiyonê '''[[Media:$1|$1]]'''i [$4 $3, $2] estereno.",
 'filedelete-comment' => 'Sebeb:',
-'filedelete-submit' => 'Bıestere',
+'filedelete-submit' => 'Bestere',
 'filedelete-success' => "'''$1'''  esteriyayo.",
 'filedelete-success-old' => "Versiyonê'''[[Media:$1|$1]]'''î $3, $2 esteriyayo.",
 'filedelete-nofile' => "'''$1''' çin o.",
@@ -2090,7 +2089,7 @@ gıreyê her satıri de gıreyi; raş motışê yewın u dıyıni esto.
 'brokenredirects' => 'Hetenayışê vengi',
 'brokenredirectstext' => 'Redireksiyonê ey ki pelanê hama çiniyeno ra link dano:',
 'brokenredirects-edit' => 'bıvurne',
-'brokenredirects-delete' => 'bıestere',
+'brokenredirects-delete' => 'bestere',
 
 'withoutinterwiki' => 'Peleyê ke zıwanan de bina re gırey cı çınyo',
 'withoutinterwiki-summary' => 'Enê pelî ke versiyonê ziwanî binî ra link nidano.',
@@ -2251,10 +2250,6 @@ Qeydeyê destegbiyayey: <code>$1</code> (qet yew qeydeyo hesabiyaye http:// ke n
 'activeusers-hidesysops' => 'İdarekerdoğan bınımne',
 'activeusers-noresult' => 'Karberi nêdiyayê.',
 
-# Special:Log/newusers
-'newuserlogpage' => 'Cıkewtışê hesabvıraştışi',
-'newuserlogpagetext' => 'Ena log de viraştişê karberî esta.',
-
 # Special:ListGroupRights
 'listgrouprights' => 'heqê grubê karberi',
 'listgrouprights-summary' => 'wikiya cêrın a ke tede grubê karberi nişane biyê, listeya heqê cıresayişê inan o.
@@ -2394,16 +2389,18 @@ $UNWATCHURL
 
 Qey hemkari u pêşniyazi:
 {{canonicalurl:{{MediaWiki:Helppage}}}}',
+'created' => 'viraziya',
+'changed' => 'vurneya',
 
 # Delete
-'deletepage' => 'Pele bıestere',
+'deletepage' => 'Pele bestere',
 'confirm' => 'Testiq ke',
 'excontent' => "behso kêm: '$1'",
 'excontentauthor' => "behso kêm: '$1' no/na ('[[Special:Contributions/$2|$2]]'  teyna iştıraq kerdo)",
 'exbeforeblank' => "behsê verê esteriyayişi: '$1'",
 'exblank' => 'zerreyê peli vengo',
-'delete-confirm' => '"$1" bıestere',
-'delete-legend' => 'Bıestere',
+'delete-confirm' => '"$1" bestere',
+'delete-legend' => 'Bestere',
 'historywarning' => "'''Teme:''' Pela ke şıma esterenê tede yew viyarte be teqriben $1 {{PLURAL:$1|versiyon esto|versiyoni estê}}:",
 'confirmdeletetext' => 'Tı ho yew pele u tarixê pele wederneno.
 Tı ra rica keno, tı zani tı ho sekeno, tı zani neticeyanê eno wedarnayışi u tı zani tı ser [[{{MediaWiki:Policy-url}}|poliçe]] kar keno.',
@@ -2581,7 +2578,7 @@ $1',
 'blanknamespace' => '(Ser)',
 
 # Contributions
-'contributions' => 'İştiraqê {{GENDER:$1|Karber}}i',
+'contributions' => 'İştıraqê {{GENDER:$1|karber}}i',
 'contributions-title' => 'Dekerdenê karber de $1',
 'mycontris' => 'İştıraqi',
 'contribsub2' => 'Qandê $1 ($2)',
@@ -3697,6 +3694,7 @@ Gurênayışê nae de, beno ke sistemê şıma zerar bıvêno.",
 'file-nohires' => 'Deha berz agozney cı çıniyo',
 '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-preview' => "Verqayd dergiya: $1'i.",
 'show-big-image-other' => 'Zewmi{{PLURAL:$2|Vılêşnayış|Vılêşnayışê}}: $1.',
@@ -4681,7 +4679,10 @@ Ena sita dı newke xırabiya teknik esta.',
 'logentry-newusers-create' => 'Hesabê karberi $1 vıraziya',
 'logentry-newusers-create2' => 'Hesabê karberi $1 terefê $3 ra vıraziya',
 'logentry-newusers-autocreate' => 'Hesabê $1 Otomatikmen vıraziya',
-'newuserlog-byemail' => 'pê e-mail ra paralo şiravt',
+'logentry-rights-rights' => '$1 qandê $3 rê ezayina grube $4 ra $5 vuriye',
+'logentry-rights-rights-legacy' => '$1 qandê $3 rê ezayina grube vuriye',
+'logentry-rights-autopromote' => '$1 otomatikmen $4 ra terfi bi ra $5',
+'rightsnone' => '(çino)',
 
 # Feedback
 'feedback-bugornote' => 'Jew mersela teferruato teknik esta şıma reca malumatê şıma hazıro se [ $1  jew xırab rapor] bıvinê.Zewbi zi, formê cerê xo rê şenê karfiyê. Vatışê xo pela da "[ $3  $2 ]", namey karber dê xoya piya u wasteriya karfiye.',
@@ -4754,6 +4755,4 @@ Ena sita dı newke xırabiya teknik esta.',
 'duration-centuries' => '$1 {{PLURAL:$1|seserre|seserri}}',
 'duration-millennia' => '$1 {{PLURAL:$1|milenyum|milenyumi}}',
 
-# Unknown messages
-'svg-long-error' => "Nêmeqbul dosyaya SVG'i: $1",
 );
index afedb8f..47ccadb 100644 (file)
@@ -291,6 +291,7 @@ $messages = array(
 'newwindow' => '(se wótcynijo w nowem woknje)',
 'cancel' => 'Pśetergnuś',
 'moredotdotdot' => 'Wěcej…',
+'morenotlisted' => 'Dalšne njepódane...',
 'mypage' => 'Bok',
 'mytalk' => 'Diskusija',
 'anontalk' => 'Diskusija z toś teju IP',
@@ -651,6 +652,7 @@ Móžoš toś te zdźělenje ignorowaś, jolic toś te konto jo se jano zamólnj
 # E-mail sending
 'php-mail-error-unknown' => 'Njeznata zmólka w PHP-funkciji mail()',
 'user-mail-no-addy' => 'Jo se wopytało, e-mail bźez e-mailoweje adrese pósłaś',
+'user-mail-no-body' => 'Jo se wopytało, e-mail bźez teksta abo z pśekrotkim tekstom pósłaś',
 
 # Change password dialog
 'resetpass' => 'Gronidło změniś',
@@ -708,6 +710,7 @@ Nachylne gronidło: $2',
 'changeemail-oldemail' => 'Aktualna e-mailowa adresa:',
 'changeemail-newemail' => 'Nowa e-mailowa adresa:',
 'changeemail-none' => '(žedna)',
+'changeemail-password' => 'Twójo gronidło za {{GRAMMAR:akuzatiw|{{SITENAME}}}}',
 'changeemail-submit' => 'E-mailowu adresu změniś',
 'changeemail-cancel' => 'Pśetergnuś',
 
@@ -873,7 +876,6 @@ Nejnowšy protokolowy zapisk jo dołojce ako referenca pódany:",
 'template-semiprotected' => '(poł šćitane)',
 'hiddencategories' => 'Toś ten bok jo jadna z {{PLURAL:$1|1 schowaneje kategorije|$1 schowaneju kategorijow|$1 schowanych kategorijow|$1 schowanych kategorijow}}:',
 'edittools' => '<!-- Tekst how buźo wiźeś pód wobźěłowańskimi a upload-formularami. -->',
-'nocreatetitle' => 'Załožowanje nowych bokow jo se wobgranicowało.',
 'nocreatetext' => 'Na {{GRAMMAR:lokatiw|{{SITENAME}}}} jo se załoženje nowych bokow wót serwera wobgranicowało. Móžoš hyś slědk a eksistěrujucy bok wobźěłaś, abo se [[Special:UserLogin|pśizjawiś]].',
 'nocreate-loggedin' => 'Njamaš pšawo nowe boki napóraś.',
 'sectioneditnotsupported-title' => 'Wobźěłowanje wótrězka se njepódpěra',
@@ -1415,15 +1417,13 @@ Móžoš toś ten bok wužywaś, aby slědk stajił swóje nastajenja na standar
 'right-sendemail' => 'Drugim wužywarjam e-mail pósłaś',
 'right-passwordreset' => 'E-maile za slědkstajanje gronidłow se woglědaś',
 
+# Special:Log/newusers
+'newuserlogpage' => 'Protokol nowych wužywarjow',
+'newuserlogpagetext' => 'To jo protokol wó nowych wužywarskich kontow.',
+
 # User rights log
 'rightslog' => 'Protokol wužywarskich pšawow',
 'rightslogtext' => 'To jo protokol wužywarskich pšawow.',
-'rightslogentry' => 'Pśisłušnosć ku kupce jo se za „$1“ změniła wót „$2“ na „$3“.',
-'rightslogentry-autopromote' => 'jo se awtomatiski wót $2 do $3 změnił',
-'logentry-rights-rights' => '$1 jo kupkowe cłonkojstwo za $3 z $4 do $5 změnił',
-'logentry-rights-rights-legacy' => '$1 jo kupkowe cłonkojstwo za $3 změnił',
-'logentry-rights-autopromote' => '$1 jo se awtomatiski wót $4 do $5 pówušył',
-'rightsnone' => '(nic)',
 
 # Associated actions - in the sentence "You do not have permission to X"
 'action-read' => 'toś ten bok cytaś',
@@ -2040,7 +2040,7 @@ Glědaj teke [[Special:WantedCategories|póžedane kategorije]].',
 'linksearch-ok' => 'Pytaś',
 'linksearch-text' => 'Jo móžno zastupne znamuška kaž "*.wikipedia.org" wužywaś. 
 Jo nanejmjenjej głowna domena trěbna, na pśikład "*.org"<br />
-Pódpěrane protokole: <code>$1</code> (standard jo http://, jolic žeden protokol njejo pódany).',
+{{PLURAL:$2|Pódpěrany protokol|Pódpěranej protokola|Pódpěrane protokole}}: <code>$1</code> (standard jo http://, jolic žeden protokol njejo pódany).',
 'linksearch-line' => '$1 wótkazany z $2',
 'linksearch-error' => 'Zasupne znamješko daju se jano na zachopjeńku URL wužywaś.',
 
@@ -2059,10 +2059,6 @@ Pódpěrane protokole: <code>$1</code> (standard jo http://, jolic žeden protok
 'activeusers-hidesysops' => 'Administratorow schowaś',
 'activeusers-noresult' => 'Žedne wužywarje namakane.',
 
-# Special:Log/newusers
-'newuserlogpage' => 'Protokol nowych wužywarjow',
-'newuserlogpagetext' => 'To jo protokol wó nowych wužywarskich kontow.',
-
 # Special:ListGroupRights
 'listgrouprights' => 'Pšawa wužywarskeje kupki',
 'listgrouprights-summary' => 'To jo lisćina wužywarskich kupkow definěrowanych w toś tom wikiju z jich zwězanymi pśistupnymi pšawami. Móžo [[{{MediaWiki:Listgrouprights-helppage}}|pśidatne informacije]] wó jadnotliwych pšawach daś.',
@@ -2127,8 +2123,8 @@ E-mailowa adresa, kótaruž sy zapódał w [[Special:Preferences|swójich wužyw
 'watchnologin' => 'Njepśizjawjony(a)',
 'watchnologintext' => 'Musyš [[Special:UserLogin|pśizjawjony]] byś, aby mógał swóju wobglědowańku wobźěłaś.',
 'addwatch' => 'K wobglědowańce dodaś',
-'addedwatchtext' => "Bok \"[[:\$1]]\" jo se k twójej [[Special:Watchlist|wobglědowańce]] dodał.
-Pózdźejšne změny na toś tom boku a w pśisłušecej diskusiji se tam nalicuju, a bok buźo se w [[Special:RecentChanges|lisćinje aktualnych změnow]] '''tucnje''' pokazaś, aby daju se lažčej namakaś.",
+'addedwatchtext' => 'Bok "[[:$1]]" jo se k twójej [[Special:Watchlist|wobglědowańce]] dodał.
+Pózdźejšne změny na toś tom boku a w pśisłušecej diskusiji se tam nalicuju.',
 'removewatch' => 'Z wobglědowańki wulašowaś',
 'removedwatchtext' => 'Bok "[[:$1]]" jo se z [[Special:Watchlist|twójeje wobglědowańki]] wulašowany.',
 'watch' => 'Wobglědowaś',
@@ -2162,7 +2158,7 @@ Pózdźejšne změny na toś tom boku a w pśisłušecej diskusiji se tam nalicu
 'enotif_subject_moved' => 'Bok {{GRAMMAR:genitiw|{{SITENAME}}}} $1 jo se wót {{GENDER:$2|$2}} pśesunuł',
 'enotif_subject_restored' => 'Bok {{GRAMMAR:genitiw|{{SITENAME}}}} $1 jo se wót {{GENDER:$2|$2}} wótnowił',
 'enotif_subject_changed' => 'Bok {{GRAMMAR:genitiw|{{SITENAME}}}} $1 jo se wót {{GENDER:$2|$2}} změnił',
-'enotif_body_intro_deleted' => 'Bok{{GRAMMAR:genitiw|{{SITENAME}}}} $1 jo se na $PAGEEDITDATE wót {{GENDER:$1|$2}} wulašował, glědaj $3 za aktualnu wersiju.',
+'enotif_body_intro_deleted' => 'Bok {{GRAMMAR:genitiw|{{SITENAME}}}} $1 jo se na $PAGEEDITDATE wót {{GENDER:$1|$2}} wulašował, glědaj $3.',
 'enotif_body_intro_created' => 'Bok {{GRAMMAR:genitiw|{{SITENAME}}}} $1 jo se na $PAGEEDITDATE wót {{GENDER:$2|$2}} napórał, glědaj $3 za aktualnu wersiju.',
 'enotif_body_intro_moved' => 'Bok{{GRAMMAR:genitiw|{{SITENAME}}}} $1 jo se na $PAGEEDITDATE wót {{GENDER:$1|$2}} pśesunuł, glědaj $3 za aktualnu wersiju.',
 'enotif_body_intro_restored' => 'Bok {{GRAMMAR:genitiw|{{SITENAME}}}} $1 jo se na $PAGEEDITDATE wót {{GENDER:$2|$2}} wótnowił, glědaj $3 za aktualnu wersiju.',
@@ -2195,6 +2191,8 @@ $UNWATCHURL
 
 Pšašanja a dalšna pomoc:
 {{canonicalurl:{{MediaWiki:Helppage}}}}',
+'created' => 'napórał',
+'changed' => 'změnił',
 
 # Delete
 'deletepage' => 'Bok wulašowaś',
@@ -2260,6 +2258,8 @@ Pšosym nawroś se na bok, wót kótaregož sy pśišeł a wopytaj hyšći raz.'
 'prot_1movedto2' => '„[[$1]]“ pśesunjone na „[[$2]]“',
 'protect-badnamespace-title' => 'Nješćitajobny mjenjowy rum',
 'protect-badnamespace-text' => 'Boki w toś tom mjenjowem rumje njedaju se šćitaś.',
+'protect-norestrictiontypes-text' => 'Toś ten bok njedajo se šćitaś, dokulaž njestoje žedne wobgranicowanja k dispoziciji.',
+'protect-norestrictiontypes-title' => 'Nješćitajobne boki',
 'protect-legend' => 'Šćitanje wobkšuśiś',
 'protectcomment' => 'Pśicyna:',
 'protectexpiry' => 'cas wótběžy:',
@@ -2272,9 +2272,9 @@ Pšosym nawroś se na bok, wót kótaregož sy pśišeł a wopytaj hyšći raz.'
 'protect-locked-access' => "Wašo wužywarske konto njama notne pšawa za změnu šćita toś togo boka. How su aktualne nastajenja šćita boka '''„$1“:'''.",
 'protect-cascadeon' => 'Toś ten bok jo tuchylu šćitany, dokulaž jo zawězany do {{PLURAL:$1|slědujucego boka|slědujuceju bokowu|slědujucych bokow}}, źož kaskadowy šćit jo aktiwěrowany. Status šćita móžo se za toś ten bok změniś, to ale njewówliwujo kaskadowy šćit:',
 'protect-default' => 'Wšyknym wužywarjam dowóliś',
-'protect-fallback' => 'Slědujuce pšawo jo notne: „$1“.',
-'protect-level-autoconfirmed' => 'Nowych a njeregistrěrowanych wužywarjow blokěrowaś',
-'protect-level-sysop' => 'Jano administratory',
+'protect-fallback' => 'Jano wužywarjow z pšawom "$1" dowóliś',
+'protect-level-autoconfirmed' => 'Jano awtomatiski wobkšuśonych wužywarjow dowóliś',
+'protect-level-sysop' => 'Jano administratorow dowóliś',
 'protect-summary-cascade' => 'kaskaděrujucy',
 'protect-expiring' => 'kóńcy $1 (UTC)',
 'protect-expiring-local' => 'płaśiwy do $1',
@@ -2740,6 +2740,7 @@ Wšykne transwiki-importowe akcije protokolěruju se w [[Special:Log/import|log-
 'import-error-interwiki' => 'Bok "$1" se njeimportěrujo, dokulaž jogo mě jo za eksterne wótkazowanje (interwiki) wuměnjone.',
 'import-error-special' => 'Bok "$1" se njeimportěrujo, dokulaž słuša k wósebnemu mjenjowemu rumoju, kótaryž njedowólujo boki.',
 'import-error-invalid' => 'Bok "$1" se njeimportěrujo, dokulaž jogo mě jo njepłaśiwe.',
+'import-error-unserialize' => 'Wersija $2 boka "$1" njedajo se wótserializěrowaś. Wersija jo se za wužywanje wopśimjeśowego $3 k wěsći dała, kótaryž jo ako $4 serializěrowany.',
 'import-options-wrong' => '{{PLURAL:$2|Wopacna opcija|Wopacnej opciji|Wopacne opcije|Wopacne opcije}}: <nowiki>$1</nowiki>',
 'import-rootpage-invalid' => 'Pódany kórjenjowy bok jo njepłaśiwy.',
 'import-rootpage-nosubpage' => 'Mjenjowy rum "$1" kórjenjowego boka njedowólujo pódboki.',
@@ -2896,6 +2897,7 @@ W zespominanju dajo se pśicyna pódaś.',
 'pageinfo-magic-words' => '{{PLURAL:$1|Magiske słowo|Magiskej słowje|Magiske słowa|Magiske słowa}} ($1)',
 'pageinfo-hidden-categories' => '{{PLURAL:$1|Schowana kategorija|Schowanej kategoriji|Schowane kategorije|Schowane kategorije}} ($1)',
 'pageinfo-templates' => '{{PLURAL:$1|Zapśěgnjona pśedłoga|Zapśěgnjonej pśedłoze|Zapśěgnjone pśedłogi|Zapśěgnjone pśedłogi}} ($1)',
+'pageinfo-transclusions' => '{{PLURAL:$1|Bok zapśěgnjony|Boka zapśěgnjonej|Boki zapśěgnjone}}  do ($1)',
 'pageinfo-toolboxlink' => 'Informacije wó boku',
 'pageinfo-redirectsto' => 'Pósrědnja dalej k',
 'pageinfo-redirectsto-info' => 'Info',
@@ -2904,6 +2906,10 @@ W zespominanju dajo se pśicyna pódaś.',
 'pageinfo-protect-cascading' => 'Kaskadowy šćit wót how',
 'pageinfo-protect-cascading-yes' => 'Jo',
 'pageinfo-protect-cascading-from' => 'Kaskadowy šćit wót',
+'pageinfo-category-info' => 'Kategorijowe informacije',
+'pageinfo-category-pages' => 'Licba bokow',
+'pageinfo-category-subcats' => 'Licba pódkategorijow',
+'pageinfo-category-files' => 'Licba datajow',
 
 # Skin names
 'skinname-standard' => 'Klasiski',
@@ -2959,6 +2965,7 @@ $1',
 'file-nohires' => 'Wuše wótgranicowanje njeeksistěrujo.',
 'svg-long-desc' => 'dataja SVG, nominalnje: $1 × $2 piksele, wjelikosć dataje: $3',
 'svg-long-desc-animated' => 'Animěrowana SVG-dataja, zakładnej wótměra $1 × $2 pikselow, datajowa wjelikosć: $3',
+'svg-long-error' => 'Njepłaśiwa SVG-dataja: $1',
 'show-big-image' => 'Połne optiske wótgranicowanje.',
 'show-big-image-preview' => 'Wjelikosć toś togo pśeglěda: $1.',
 'show-big-image-other' => '{{PLURAL:$2|Druge rozeznaśe||Drugej rozeznaśi|Druge rozeznaśa|Druge rozeznaśa}}: $1.',
@@ -2988,6 +2995,8 @@ $1',
 'minutes' => '{{PLURAL:$1|$1 minutu|$1 minutoma|$1 minutami|$1 minutami}}',
 'hours' => '{{PLURAL:$1|$1 góźinu|$1 góźinoma|$1 góźinami|$1 góźinami}}',
 'days' => '{{PLURAL:$1|$1 dnjom|$1 dnjoma|$1 dnjami|$1 dnjami}}',
+'months' => '{{PLURAL:$1|$1 mjasecom|$1 mjasecoma|$1 mjasecami}}',
+'years' => '{{PLURAL:$1|$1 lětom|$1 lětoma|$1 lětami}}',
 'ago' => 'pśed $1',
 'just-now' => 'rowno',
 
@@ -3740,7 +3749,10 @@ Wobraze se w połnym wótgranicowanju pokazuju, druge datajowe typy se ze zwěza
 'logentry-newusers-create' => 'Wužywarske konto $1 jo se załožyło',
 'logentry-newusers-create2' => '$1 jo załožył wužywarske konto $3',
 'logentry-newusers-autocreate' => 'Konto $1 jo se awtomatiski załožyło',
-'newuserlog-byemail' => 'Pótajne słowo bu pśez e-mail pósłane.',
+'logentry-rights-rights' => '$1 jo kupkowe cłonkojstwo za $3 z $4 do $5 změnił',
+'logentry-rights-rights-legacy' => '$1 jo kupkowe cłonkojstwo za $3 změnił',
+'logentry-rights-autopromote' => '$1 jo se awtomatiski wót $4 do $5 pówušył',
+'rightsnone' => '(nic)',
 
 # Feedback
 'feedback-bugornote' => 'Jolic sy zwólny, techniski problem nadrobnje wopisaś, [$1 daj pšosym zmólku k wěsći].
@@ -3814,6 +3826,4 @@ Hować móžoš slědujucy jadnory formular wužywaś. Twój komentar pśidajo s
 'duration-centuries' => '$1 {{PLURAL:$1|stolěśe|stolěśi|stolěśa|stolěśow}}',
 'duration-millennia' => '$1 {{PLURAL:$1|lěttysac|lěttysaca|lěttysace|lěttysacow}}',
 
-# Unknown messages
-'svg-long-error' => 'Njepłaśiwa SVG-dataja: $1',
 );
index b24b850..a0153f0 100644 (file)
@@ -730,7 +730,6 @@ Mangakaun ko nogi do sinuratannu iti mopori, toi dinalin iri mantad domin ginumu
 'template-protected' => '(tingoligai)',
 'template-semiprotected' => '(noumoligan)',
 'hiddencategories' => 'Bolikon diti songkoruhang do {{PLURAL:$1|1 katogori poinlisok|$1 kakatogori poinlisok}}:',
-'nocreatetitle' => 'Momonsoi bolikon wagu pinatagal',
 'nocreatetext' => '{{SITENAME}} tinagal kasagaan momonsoi bobolikon kawawagu.
 Milo ko do gumuli om mongidit di bolikon poinsuang, toi ko [[Special:UserLogin|sumuang log toi momonsoi do takaun.]].',
 'nocreate-loggedin' => 'Ingaa kasagaannu do momonsoi bobolikon wagu.',
@@ -1043,6 +1042,9 @@ Imurai no do indik suang diti {{SITENAME}} nopo nga nokolipas.',
 
 'grouppage-sysop' => '{{ns:project}}:Mandur',
 
+# Special:Log/newusers
+'newuserlogpage' => 'Log pinamansaian momomoguno',
+
 # User rights log
 'rightslog' => 'Log kasagaan momomoguno',
 
@@ -1202,9 +1204,6 @@ Kointalangan dilo [$2 kointalangan pail] okito id siriba.',
 'linksearch-ok' => 'Ihumo',
 'linksearch-line' => '$1 toput mantad $2',
 
-# Special:Log/newusers
-'newuserlogpage' => 'Log pinamansaian momomoguno',
-
 # Special:ListGroupRights
 'listgrouprights-members' => '(lis do kinoruhangan)',
 
index bece75c..8c8289e 100644 (file)
  * @author Deviathan (on dv.wikipedia.org)
  * @author Glacious
  * @author MF-Warburg
+ * @author Ushau97
+ * @author Zhatre
  * @author לערי ריינהארט
  */
 
 $rtl = true;
 
 $namespaceNames = array(
+       NS_MEDIA            => 'މީޑިއާ',
        NS_SPECIAL          => 'ހާއްޞަ',
+       NS_MAIN             => '',
        NS_TALK             => 'ޚިޔާލު',
        NS_USER             => 'މެމްބަރު',
+       NS_USER_TALK        => 'މެމްބަރުގެ_ވާހަކަ',
        NS_FILE             => 'ފައިލް',
        NS_FILE_TALK        => 'ފައިލް_ޚިޔާލު',
        NS_MEDIAWIKI        => 'މީޑިއާވިކީ',
@@ -57,12 +62,18 @@ $specialPageAliases = array(
 
 $messages = array(
 # User preference toggles
-'tog-hideminor' => 'Þ\86ÞªÞ\91Þ¦ Þ\86ÞªÞ\91Þ¦ އުނި އިތުރުތައް އެންމެފަހުގެ ބަދަލުތަކުގެ ލިސްޓުން ފޮރުއްވަވާ',
+'tog-hideminor' => 'Þ\86ÞªÞ\8bÞ¨ އުނި އިތުރުތައް އެންމެފަހުގެ ބަދަލުތަކުގެ ލިސްޓުން ފޮރުއްވަވާ',
 'tog-ccmeonemails' => 'އަޅުގަނޑު އެހެން މެމްބަރުންނަށް ފޮނުވާ އީމެއިލްގެ ނަކަލެއް އަޅުގަނޑަށް ފޮނުވާ',
+'tog-showhiddencats' => 'ފޮރުވިފައިވާ ޤިސްމުތައް ދައްކަވާ',
 
 'underline-always' => 'އަބަދުވެސް',
 'underline-never' => 'ހަމަހިލާ ނޫން',
 
+# Font style option in Special:Preferences
+'editfont-monospace' => 'މޮނޯސްޕޭސްޑް ފޮންޓް',
+'editfont-sansserif' => 'ސޭންސް-ސެރިފް ފޮންޓް',
+'editfont-serif' => 'ސެރިފް ފޮންޓް',
+
 # Dates
 'sunday' => 'އާދީއްތަ',
 'monday' => 'ހޯމަ',
@@ -78,19 +89,19 @@ $messages = array(
 'thu' => 'ބުރާސްފަތި',
 'fri' => 'ހުކުރު',
 'sat' => 'ހޮނިހިރު',
-'january' => 'Þ\96Þ¬Þ\82ÞªÞ\87ަރީ',
+'january' => 'Þ\96Þ¦Þ\82Þ¦Þ\88ަރީ',
 'february' => 'ފެބްރުއަރީ',
 'march' => 'މާރޗް',
-'april' => 'Þ\87Þ¬ޕްރީލް',
+'april' => 'Þ\87Þ­ޕްރީލް',
 'may_long' => 'މެއި',
 'june' => 'ޖޫން',
 'july' => 'ޖުލައި',
-'august' => 'Þ\87Þ®Þ\8eÞ¦Þ\90Þ°Þ\93Þª',
+'august' => 'Þ\87Þ¯Þ\8eÞ¦Þ\90Þ°Þ\93Þ°',
 'september' => 'ސެޕްޓެމްބަރު',
-'october' => 'Þ\87Þ®Þ\86Þ°Þ\93Þ«ބަރު',
+'october' => 'Þ\87Þ®Þ\86Þ°Þ\93Þ¯ބަރު',
 'november' => 'ނޮވެމްބަރު',
 'december' => 'ޑިސެމްބަރު',
-'january-gen' => 'Þ\96Þ¬Þ\82ÞªÞ\87ަރީ',
+'january-gen' => 'Þ\96Þ¦Þ\82Þ¦Þ\88ަރީ',
 'february-gen' => 'ފެބްރުއަރީ',
 'march-gen' => 'މާޗް',
 'april-gen' => 'އޭޕްރިލް',
@@ -102,7 +113,7 @@ $messages = array(
 'october-gen' => 'އޮކްޓޯބަރ',
 'november-gen' => 'ނޮވެމްބަރ',
 'december-gen' => 'ޑިސެމްބަރ',
-'jan' => 'Þ\96Þ¬Þ\82ÞªÞ\87ަރީ',
+'jan' => 'Þ\96Þ¦Þ\82Þ¦Þ\88ަރީ',
 'feb' => 'ފެބްރުއަރީ',
 'mar' => 'މާޗް',
 'apr' => 'އޭޕްރިލް',
@@ -116,15 +127,23 @@ $messages = array(
 'dec' => 'ޑިސެމްބަރ',
 
 # Categories related messages
+'pagecategories' => '{{PLURAL:$1|ޤިސްމު|ޤިސްމުތައް}}',
 'category_header' => 'ގިސްމު "$1" ގައިވާ މަޒުމޫނުތައް',
 'subcategories' => 'ކުދިގިސްމުތައް',
-'category-empty' => "''މި ގިސްމުގައި އެއްވެއސް ސަފްހާ އެއް އަދި އެއްވެސް ފައިލެއް ނުހިމެނެއެވެ.''",
+'category-media-header' => '"$1" ޤިސްމުގައިވާ މީޑިއާ',
+'category-empty' => "''މި ޤިސްމުގައި އެއްވެސް ސަފްހާ އެއް އަދި އެއްވެސް ފައިލެއް ނުހިމެނެއެވެ.''",
+'hidden-categories' => '{{PLURAL:$1|ފޮރުވިފައިވާ ޤިސްމު|ފޮރުވިފައިވާ ޤިސްމުތައް}}',
+'hidden-category-category' => 'ފޮރުވިފައިވާ ޤިސްމުތައް',
+'category-subcat-count-limited' => 'މި ޤިސްމުގައި ހިމެނެނީ {{PLURAL:$1|ކުދިޤިސްމެވެ|$1 ކުދިޤިސްމުތަކެވެ}}.',
 
-'about' => 'ތާރަފު',
+'about' => 'Þ\8cÞ¦Þ¢Þ§Þ\83Þ¦Þ\8aÞª',
 'article' => 'ފިހުރިސްތު ޞަފްޙާ',
 'newwindow' => '(އާ ވިންޑޯ އެއް ހުޅުވޭނެއެވެ)',
 'cancel' => 'މަންސޫހު',
-'mytalk' => 'މަގޭ ވާހަކަ',
+'moredotdotdot' => 'އިތުރަށް...',
+'mypage' => 'މަޒުމޫނު',
+'mytalk' => 'ޚިޔާލު ޞަފްޙާ',
+'anontalk' => 'މި އައި.ޕީ އެޑްރެސްގެ ވާހަކަ',
 'navigation' => 'ސަމުގާ',
 'and' => '&#32;އަދި',
 
@@ -133,104 +152,213 @@ $messages = array(
 'qbedit' => 'އުނިއިތުރުގެންނަވާ',
 'qbpageoptions' => 'މި ޞަފްޙާ',
 'qbmyoptions' => 'މަގޭ ސަފްހާ ތައް',
+'qbspecialpages' => 'ޚާއްޞަ ޞަފްޙާތައް',
+'faq' => 'އެފް.އޭ.ކިއު',
+'faqpage' => 'Project:އެފް.އޭ.ކިއު',
+
+# Vector skin
+'vector-action-addsection' => 'ޚިޔާލެއް އިތުރުކުރައްވާ',
+'vector-action-delete' => 'ފޮހެލައްވާ',
+'vector-action-move' => 'ތަން ބަދަލުކުރައްވާ',
+'vector-action-protect' => 'ދިފާޢުކުރައްވާ',
+'vector-action-unprotect' => 'ދިފާޢުކުރުން ބަދަލުކުރައްވާ',
+'vector-view-create' => 'ފަށްޓަވާ',
+'vector-view-edit' => 'އުނިއިތުރު ގެންނަވާ',
+'vector-view-history' => 'ޞަފްޙާގެ ތާރީޚް',
+'vector-view-view' => 'ކިޔުއްވާ',
+'vector-view-viewsource' => 'މަސްދަރު ބައްލަވާ',
+'actions' => 'ޢަމަލުތައް',
+'namespaces' => 'ނަންސްޕޭސަސް',
 
 'errorpagetitle' => 'ކުށް',
 'returnto' => 'އަނބުރާ $1 އަށް ވަޑައިގަންނަވާ!',
 'tagline' => 'ވިކިޕީޑިއާ އިން',
 'help' => 'އެހީ',
 'search' => 'ހޯއްދަވާ',
+'searchbutton' => 'ހޯއްދަވާ',
 'go' => 'ދުރުވޭ',
+'searcharticle' => 'ދުރުވޭ',
 'history' => 'ޞަފްޙާގެ ތާރީހު',
 'history_short' => 'ތާރީހު',
 'printableversion' => 'ޗާޕަށްފަހި ނުސްހާ',
 'permalink' => 'ދާއިމީ ފާލަން',
 'print' => 'ޗާޕުކުރައްވާ',
+'view' => 'ބައްލަވާ',
 'edit' => 'އުނިއިތުރު ގެންނަވާ',
+'create' => 'ފަށްޓަވާ',
 'editthispage' => 'މި ޞަފްޙާއަށް އުނިއިތުރު ގެންނަވާ',
+'create-this-page' => 'މި ޞަފްޙާ ފަށްޓަވާ',
 'delete' => 'ފޮހެލައްވާ',
 'deletethispage' => 'މި ޞަފްޙާ ފޮހެލައްވާ',
+'viewdeleted_short' => '{{PLURAL:$1|ފޮހެލެވިފައިވާ އެއް އުނިއިތުރު|ފޮހެލެވިފައިވާ $1 އުނިއިތުރު}} ބައްލަވާ',
 'protect' => 'ދިފާއުކުރައްވާ',
 'protect_change' => 'ބަދަލު ގެންނަވާ',
 'protectthispage' => 'މި ޞަފްޙާ ދިފާއުކުރައްވާ',
-'unprotect' => 'Þ\8bÞ¨Þ\8aÞ§Þ\87ÞªÞ\86ÞªÞ\83ÞªÞ\82Þ° Þ\80ÞªÞ\87Þ°Þ\93Þ¦Þ\88Þ§Þ\8dައްވާ',
-'unprotectthispage' => 'މި ޞަފްޙާ ދިފާއުކުރުން ހުއްޓަވާލައްވާ',
+'unprotect' => 'Þ\8bÞ¨Þ\8aÞ§Þ¢ÞªÞ\86ÞªÞ\83ÞªÞ\82Þ° Þ\84Þ¦Þ\8bÞ¦Þ\8dÞªÞ\86ÞªÞ\83ައްވާ',
+'unprotectthispage' => 'މި ޞަފްޙާގެ ދިފާއުކުރުން ބަދަލުކުރައްވާ',
 'newpage' => 'އާ ސަފްޙާ',
 'talkpage' => 'މި ސަފްޙާއާ މެދު ބަހުސްކުރައްވާ',
 'talkpagelinktext' => 'ޚިޔާލު ސަފްޙާ',
 'specialpage' => 'ހާއްސަ ޞަފްޙާ',
+'personaltools' => 'އަމިއްލަ',
+'postcomment' => 'އާ ބައެއް',
 'articlepage' => 'ފިހުރިސްތު ޞަފްޙާ ބައްލަވާ',
 'talk' => 'ބަހުސް',
 'views' => 'ހިޔާލުފުޅުތައް',
 'toolbox' => 'އަތްމަތީފޮށި',
 'userpage' => 'މެންބަރުގެ ޞަފްޙާ ބައްލަވާ',
+'projectpage' => 'މަޝްރޫޢު ޞަފްޙާ ބައްލަވާ',
+'imagepage' => 'ފައިލު ޞަފްޙާ ބައްލަވާ',
+'mediawikipage' => 'މެސެޖު ޞަފްޙާ ބައްލަވާ',
+'templatepage' => 'ފަންވަތް: ޞަފްޙާ ބައްލަވާ',
+'viewhelppage' => 'އެހީ ޞަފްޙާ ބައްލަވާ',
+'categorypage' => 'ޤިސްމު ޞަފްޙާ ބައްލަވާ',
 'viewtalkpage' => 'ބަހުސް ބައްލަވާ',
-'otherlanguages' => 'އެހެން ބަސްބަހުން',
+'otherlanguages' => 'Þ\87Þ¬Þ\80Þ¬Þ\82Þ¨Þ\80Þ¬Þ\82Þ° Þ\84Þ¦Þ\90Þ°Þ\84Þ¦Þ\80ÞªÞ\82Þ°',
 'redirectedfrom' => '(މިސްރާބުކުރެވުނީ $1 އިން)',
 'redirectpagesub' => 'ޞަފްޙާގެ މިސްރާބު އައުކުރައްވާ',
 'lastmodifiedat' => 'މި ޞަފްހާ އަށް އެންމެ ފަހުން ބަދަލެއް ގެނެވިފައިވަނީ $1، $2 ގައެވެ.',
+'viewcount' => 'މި ޞަފްޙާ ވަނީ {{PLURAL:$1|އެއްފަހަރު|$1 ފަހަރު}} ބައްލަވާފައެވެ.',
 'protectedpage' => 'ދިފާއުކުރެވިފައިވާ ޞަފްޙާ',
+'jumpto' => 'ފުންމަވާ:',
+'jumptonavigation' => 'ސަމުގާ',
 'jumptosearch' => 'ހޯއްދަވާ',
+'view-pool-error' => 'މަޢާފުކުރައްވާ، މި ވަގުތު ސާރވާރތައް ވަނީ އޯވާލޯޑް ވެފައެވެ.
+މި ޞަފްޙާއަށް ވަޑައިގަތުމުގެ ކުރިން މަޑުކޮށްލައްވާ!
+$1',
+'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) and the disambiguation template definition (see disambiguations).
-'aboutsite' => 'ވިކިޕީޑިއާ ގެ ތާރަފު',
-'aboutpage' => 'Project:ތާރަފު',
+'aboutsite' => '{{SITENAME}}ގެ ތަޢާރަފު',
+'aboutpage' => 'Project:Þ\8cÞ¦Þ¢Þ§Þ\83Þ¦Þ\8aÞª',
 'copyright' => 'ހުރިހާ މާއްދާއެއް $1 ގެ ދަށުން ލިބެން އެބަހުއްޓެވެ.',
 'copyrightpage' => '{{ns:project}}:ނަކަލުކުރުމުގެހައްގު',
 'currentevents' => 'ހިނގަމުންދާ ހާދިސާތައް',
+'currentevents-url' => 'Project:ހިނގަމުންދާ ހާދިސާތައް',
 'disclaimers' => 'އިއުލާނުތައް',
+'disclaimerpage' => 'Project:ޢާއްމު ޢިއުލާނުތައް',
 'edithelp' => 'ބަދަލުތައް ގެނައުމަށް އެހީ އެއް',
 'edithelppage' => 'އެހީ: އުނިއިތުރު ގެންނެވުން',
 'helppage' => 'Help:ފިހުރިސްތު',
 'mainpage' => 'މައި ޞަފްޙާ',
 'mainpage-description' => 'މައި ޞަފްޙާ',
+'policy-url' => 'Project:ސިޔާސަތު',
 'portal' => 'އާންމު ހޮޅުއަށި',
+'portal-url' => 'Project:ޢާންމު ހޮޅުއަށި',
 'privacy' => 'އަމިއްލަވަންތަ ސިޔާސަތު',
+'privacypage' => 'Project: އަމިއްލަވަންތަ ސިޔާސަތު',
 
 'badaccess' => 'ހުއްދައިގެ ކުށެއް',
 
 'ok' => 'ރަނގަޅު',
+'retrievedfrom' => '$1 އިން',
+'youhavenewmessages' => 'ތިޔަބޭފުޅާއަށް $1 ($2)',
+'newmessageslink' => 'އައު މެސެޖުތައް',
+'newmessagesdifflink' => 'އެންމެ ފަހުގެ ބަދަލު',
 'editsection' => 'އުނިއިތުރު ގެންނަވާ',
+'editold' => 'އުނިއިތުރު ގެންނަވާ',
+'viewsourceold' => 'މަސްދަރު ބައްލަވާ',
+'editlink' => 'އުނިއިތުރު ގެންނަވާ',
+'viewsourcelink' => 'މަސްދަރު ބައްލަވާ',
 'editsectionhint' => 'މަޒްމޫނުގެ $1 ބަޔަށް އުނިއިތުރު ގެންނަނީ',
 'toc' => 'ފިހުރިސްތު',
 'showtoc' => 'ދައްކަވާ',
 'hidetoc' => 'ފޮރުއްވާ',
+'collapsible-collapse' => 'ފޮރުއްވާ',
+'collapsible-expand' => 'ދައްކަވާ',
+'red-link-title' => '$1 (މިއީ ހުސް ޞަފްޙާއެކެވެ)',
 
 # Short words for each namespace, by default used in the namespace tab in monobook
 'nstab-main' => 'މަޒުމޫނު',
 'nstab-user' => 'މެންބަރު ޞަފްޙާ',
-'nstab-special' => 'ހާއްސަ',
+'nstab-media' => 'މީޑިއާ ޞަފްޙާ',
+'nstab-special' => 'ޚާއްސަ ޞަފްޙާ',
+'nstab-project' => 'މަޝްރޫޢު ޞަފްޙާ',
+'nstab-image' => 'ފައިލު',
 'nstab-mediawiki' => 'މެސެޖު',
 'nstab-template' => 'ފަންވަތް',
+'nstab-help' => 'އެހީ ޞަފްޙާ',
 'nstab-category' => 'ގިސްމު',
 
+# Main script and global functions
+'nosuchspecialpage' => 'ތިކަހަލަ ޚާއްސަ ޞަފްޙާއެއް ނުވޭ',
+
 # General errors
 'error' => 'ކުށް',
 'databaseerror' => 'ކޮށާރުގެ އޮޅުމެއް',
+'laggedslavemode' => "'''ސަމާލުކަމަށް:''' މި ޞަފްޙާ އަކީ ފަހުގެ ޞަފްޙާ އަކަށް ނުވުން އެކަށީގެންވެއެވެ.",
+'internalerror_info' => 'އެތެރޭގެ ކުށެއް: $1',
 'cannotdelete' => 'ޞަފްޙާ ނުވަތަ ފައިލު ފޮހެއެއް ނުލެވުނު (ފަހަރެއްގައި މީގެ ކުރީން އެހެން ބޭފުޅަކު ފޮހެލެއްވީ ކަމަށް ވެދާނެ)',
 'badtitle' => 'ނުރަނގަޅު ސުރުހީއެއް',
 'viewsource' => 'މަސްދަރު ބައްލަވާ',
+'viewsource-title' => '$1ގެ މަސްދަރު ބައްލަވާ',
+'viewsourcetext' => 'މިޞަފްޙާގެ މަސްދަރު ބައްލަވައި ތިބޭފުޅާއަށް ކޮޕީ ކުރެވޭނެއެވެ.',
+'namespaceprotected' => "ތިބޭފުޅާއަށް '''$1'''ގައިވާ ޞަފްޙާތަކަށް ބަދަލުގެނައުމުގެ ހުއްދައެއް ނުވޭ!",
+'ns-specialprotected' => 'ޚާއްސަ ޞަފްޙާތަކަށް އުނިއިތުރު ނުގެންނެވޭނެއެވެ.',
 
 # Login and logout pages
-'welcomecreation' => '== މަރުހަބާ، $1 ! ==
-ތިޔަބޭފުޅާގެ މެންބަރުޝިޕް ހެދިއްޖެއެވެ. ތިޔަ ބޭފުޅާގެ ވިކިޕީޑިއާގެ ތަރުޖީހުތައް ބަދަލުކުރައްވަން ހަނދުމަފުޅު ބަހައްޓަވާށެވެ.',
+'logouttext' => "'''ތިބޭފުޅާއަށް ބޭރަށް ވަޑައިގެންނެވިއްޖެ.'''
+
+ތިބޭފުޅާއަށް {{SITENAME}} ބޭނުންކުރެވޭނެއެވެ. ނަމަވެސް އެހެން މެމްބަރެއްގެ ގޮތުގައި <span class='plainlinks'>[$1 ވަދެވަޑައިގަނެވިދާނެއެވެ.]</span> ނުވަތަ ތި މެމްބަރުގެ ގޮތުގައި ވަދެވަޑައިގެންނެވޭނެއެވެ.",
+'welcomeuser' => 'މަރުޙަބާ،  $1!',
 'yourname' => 'މެންބަރުގެނަން',
 'yourpassword' => 'ސިއްރުބަސް',
 'yourpasswordagain' => 'ސިއްރުބަސް އަލުންލިޔުއްވާ',
 'login' => 'ވަދެވަޑައިގަންނަވާ',
+'nav-login-createaccount' => 'ވަންނަވާ / މެންބަރަކަށް ވެވަޑައިގަންނަވާ',
+'loginprompt' => '{{SITENAME}}އަށް ވަންނަވަން ކުކީޒް ބޭނުންވާނެއެވެ.',
 'userlogin' => 'ވަންނަވާ / މެންބަރަކަށް ވެ ވަޑައިގަންނަވާ',
+'userloginnocreate' => 'ވަދެވަޑައިގަންނަވާ',
+'logout' => 'ބޭރަށް ވަޑައިގަންނަވާ',
 'userlogout' => 'ބޭރަށް ވަޑައިގަންނަވާ',
 'nologin' => "މެމްބަރުކަން ހާސިލް ކުރައްވާފައި ނުވޭތޯ؟ '''$1'''",
 'nologinlink' => 'މެމްބަރުކަން ހާސިލް ކުރައްވާ!',
 'createaccount' => 'މެންބަރަކަށް ވެ ވަޑައިގަންނަވާ',
+'gotaccount' => 'މެމްބަރުކަން ހާސިލް ކުރައްވާފައި ނުވޭތޯ؟ $1',
+'gotaccountlink' => 'ވަދެވަޑައިގަންނަވާ',
+'userlogin-resetlink' => 'ވަދެވަޑައިގަތުމުގެ ސިއްރު ބަހާއި މެމްބަރު ނަން ހަނދާންނެތުނީތޯ؟',
+'createaccountreason' => 'ސަބަބު:',
 'badretype' => 'ތިޔަ ލިޔުއްވި ދެ ސިއްރުބަސް އެއް ސިއްރު ބަހާއި އަނެއް ސިއްރު ބަހާއި ދިމަލެއް ނުވޭ. އަދި ސިއްރުބަސް ރަނގަޅަށް ޖައްސަވާށެވެ!',
-'userexists' => 'ތިޔަ ލިޔުއްވި ނަން މިހާރުވެސް ދަނީ ބޭނުން ކުރެވެމުން، އައު ނަމެއް އިހުތިޔާރު ކުރައްވާ!',
+'userexists' => 'ތިޔަ ލިޔުއްވި ނަން މިހާރުވެސް ދަނީ ބޭނުން ކުރެވެމުންނެވެ.
+އައު ނަމެއް އިހުތިޔާރު ކުރައްވާށެވެ.',
+'loginerror' => 'ވަނުމުގެ ކުށެއް',
+'createaccounterror' => 'ތިޔަ އެކައުންޓް ހެދޭގޮތެއް ނުވިއެވެ.: $1',
+'loginsuccesstitle' => 'ވަދެވަޑައިގަތުން ކާމިޔާބު',
+'loginsuccess' => "'''ތިބޭފުޅާއަށް މިހާރު ވަދެވަޑައިގެން ހުންނެވީ {{SITENAME}}އަށް \"\$1\"ގެ ގޮތުގައެވެ.'''",
 'wrongpassword' => 'ތިޔަ ލިޔުއްވި ސިއްރުބަސް އަދި ރަނގަޅެއް ނޫނެވެ! އަދި މަސައްކަތް ކޮށްލައްވާށެވެ!',
 'wrongpasswordempty' => 'ތިޔަ ލިޔުއްވި ސިއްރުބަހެއް ނޭނގުނު. އަލުން މަސައްކަތް ކޮށްލައްވާ!',
 'mailmypassword' => 'ސިއްރުބަސް އީމޭލުކުރައްވާ',
-'acct_creation_throttle_hit' => 'މާފު ކުރައްވާ، އެހެނީ ތިޔަބޭފުޅާ ވަނީ ކުރީއްސުރެ $1 މެންބަރުކަން ހޯއްދަވާފައި އެހެންވީމާ އިތުރަށް ލިބިވަޑައެއް ނުގަންނަވާނެ.',
+'acct_creation_throttle_hit' => 'މި ވިކީ އަށް ތިބޭފުޅާގެ އައިޕީ އެޑްރެސް އިން ފާއިތުވެދިޔަ 24 ގަޑިއިރު ތެރޭ {{PLURAL:$1|1 އެކައުންޓް|$1 އެކައުންޓްތައް}} ހައްދަވާފައިވެއެވެ. އެއީ މި މުއްދަތު ތެރޭގައި ހެއްދެވޭނެ އެންމެ ގިނަ ޢަދަދެވެ.
+އެހެންކަމުން މި ވަގުތު އިތުރު އެކައުންޓެއް ނުހެއްދެވޭނެއެވެ. އެހެން ވަގުތެއްގައި އަދި މަސައްކަތް ކޮށްލައްވާށެވެ.',
+'accountcreated' => 'އެކައުންޓް ހެދިއްޖެއެވެ.',
+'loginlanguagelabel' => 'ބަސް: $1',
 
 # Change password dialog
+'resetpass' => 'ސިއްރުބަސް ބަދަލުކުރައްވާ',
+'resetpass_header' => 'އެކައުންޓްގެ ސިއްރުބަސް ބަދަލުކުރައްވާ',
 'oldpassword' => 'ކުރީގެ ސިއްރުބަސް:',
+'newpassword' => 'އައު ސިއްރުބަސް:',
+'retypenew' => 'އައު ސިއްރުބަސް އަލުންލިޔުއްވާ:',
+'resetpass_submit' => 'ސިއްރުބަސް ހަމަޖައްސަވާފައި ވަދެވަޑައިގަންނަވާ',
+'resetpass_success' => 'ތިބެފުޅާގެ ސިއްރުބަސް ބަދަލުކުރެވިއްޖެ. 
+މިހާރު ވަދެވަޑައިގަންނަވަނީ...',
+'resetpass_forbidden' => 'ސިއްރުބަސް ބަދަލެއް ނުކުރެވޭނެއެވެ',
+'resetpass-submit-loggedin' => 'ސިއްރުބަސް ބަދަލުކުރައްވާ',
+'resetpass-submit-cancel' => 'މަންސޫޚް',
+
+# Special:PasswordReset
+'passwordreset' => 'ސިއްރުބަސް އައު ކުރައްވާ',
+'passwordreset-legend' => 'ސިއްރުބަސް އައު ކުރައްވާ',
+'passwordreset-email' => 'އީމެއިލް އެޑްރެސް:',
+
+# Special:ChangeEmail
+'changeemail' => 'އީމެއިލް އެޑްރެސް ބަދަލުކުރައްވާ',
+'changeemail-header' => 'އެކައުންޓްގެ އީމެއިލް އެޑްރެސް ބަދަލުކުރައްވާ',
+'changeemail-oldemail' => 'މިހާރު ބޭނުންކުރާ އީމެއިލް އެޑްރެސް:',
+'changeemail-newemail' => 'އައު އީމެއިލް އެޑްރެސް:',
+'changeemail-password' => 'ތިޔަބޭފުޅާގެ {{SITENAME}} ސިއްރުބަސް:',
+'changeemail-submit' => 'އީމެއިލް ބަދަލުކުރައްވާ',
+'changeemail-cancel' => 'މަންސޫޚް',
 
 # Edit page toolbar
 'bold_sample' => 'ބޯ އިބާރާތް',
@@ -238,6 +366,8 @@ $messages = array(
 'italic_sample' => 'ކަތި އިބާރާތް',
 'italic_tip' => 'ކަތި އިބާރާތް',
 'headline_sample' => 'ސުރުހީގެ އިބާރާތް',
+'media_tip' => 'ފައިލު ފާލަން',
+'sig_tip' => 'ތިޔަބޭފުޅާގެ ސޮއި، ތާރީޚް ތަތްގަނޑާއެކު',
 
 # Edit pages
 'summary' => 'ހުލާސާ:',
@@ -248,64 +378,147 @@ $messages = array(
 'preview' => 'ނަމޫނާ',
 'showpreview' => 'ނަމޫނާ',
 'showdiff' => 'ބަދަލުތައް ދައްކަވާ',
-'anoneditwarning' => "'''Þ\90Þ¦Þ\89Þ§Þ\8dÞªÞ\86Þ¦Þ\89Þ¦Þ\81Þ°:''' Þ\8cÞ¨Þ\94Þ¦ Þ\84Þ­Þ\8aÞªÞ\85Þ§Þ\88Þ¦Þ\82Þ© Þ\88Þ¨Þ\86Þ¨Þ\95Þ©Þ\91Þ¨Þ\94ާގެ މެމްބަރެއްގެ ގޮތުގައި ވަދެ ވަޑައި ނުގަނެ. އެހެންކަމުން ތިޔަ '''އައި.ޕީ''' އެޑްރެސް މި ސަފްހާގެ ތާރީހުގައި ރެކޯޑު ކުރެވޭނެއެވެ.",
+'anoneditwarning' => "'''Þ\90Þ¦Þ\89Þ§Þ\8dÞªÞ\86Þ¦Þ\89Þ¦Þ\81Þ°:''' Þ\8cÞ¨Þ\94Þ¦ Þ\84Þ­Þ\8aÞªÞ\85Þ§Þ\88Þ¦Þ\82Þ© Þ\88Þ¨Þ\86Þ¨Þ\95Þ©Þ\91Þ¨Þ\87ާގެ މެމްބަރެއްގެ ގޮތުގައި ވަދެ ވަޑައި ނުގަނެ. އެހެންކަމުން ތިޔަ '''އައި.ޕީ''' އެޑްރެސް މި ސަފްހާގެ ތާރީހުގައި ރެކޯޑު ކުރެވޭނެއެވެ.",
 'blockedtitle' => 'މެންބަރާމެދު ވަނީ ފިޔަވަޅުއެޅިފައި',
-'blockedtext' => "ތިޔަ މެމްބަރު، ނުވަތަ ތިޔަ ބޭފުޅާގެ އައި.ޕީ އެޑްރެސް ވަނީ ބްލޮކް ކުރެވިފައެވ
-
-މި އައި.ޕީ އެޑްރެސް ބްލޮކް ކުރީ $1 އެވެ.
+'blockedtext' => "'''ތިޔަ މެމްބަރު، ނުވަތަ ތިޔަ ބޭފުޅާގެ އައި.ޕީ. އެޑްރެސް ވަނީ ބްލޮކް ކުރެވިފައެވެ.'''
 
+ބްލޮކް ކުރީ $1 އެވެ.
 ބްލޮކް ކުރުމުގެ ސަބަބަކަށް ދެވިފައިވަނީ ''$2''.
 
-މި ބްލޮކްގެ މުއްދަތު ހަމަވާނީ: $6<br />
-ބްލޮކް ކުރެވިފައިވަނީ: $7
+* ބްލޮކް ފެށުނީ: $8
+* ބްލޮކްގެ މުއްދަތު ހަމަވާނީ: $6
+* ގަސްތުކުރެވިފައިވާ ބްލޮކީ: $7
 
 މި ބްލޮކް އާއި މެދު ޚިޔާލު ފާޅުކުރައްވާނަމަ  $1 އާއި ނުވަތަ އެހެން [[{{MediaWiki:Grouppage-sysop}}|އެޑްމިނިސްޓްރޭޓަރަކާއި]] ވާހަކަ ދައްކަވާށެވެ.
 އެހެންނަމަވެސް ތިބޭފުޅާގެ [[Special:Preferences|ތަރުޖީހު]] ގައި ރަނގަޅު އީމޭލް އެޑްރެހެއް ކަނޑައަޅުއްވާފައި ނުވާ ނަމަ ތިބޭފުޅާ އަކަށް 'މެމްބަރަށް އީމޭލް ފޮނުއްވަވާ' ގެ ޚިދުމަތެއް ބޭނުން ނުކުރެއްވޭނެއެވެ.
 
-ތިބޭފުޅޭގެ އައި.ޕީ އެޑް ރެސް އަކީ  $3 އެވެ.
-އަދި ބްލޮކް އައި.ޑީ އަކީ #$5 އެވެ.",
+ތިބޭފުޅޭގެ އައި.ޕީ. އެޑްރެސް އަކީ  $3 އެވެ. އަދި ބްލޮކް އައި.ޑީ އަކީ #$5 އެވެ.
+އެޑްމިނިސްޓްރޭޓަރަކާއި ގުޅުއްވާއިރު މަތީގައިވާ މަޢުލޫމާތުތައް ހުށަހަޅުއްވަންވާނެއެވެ.",
+'loginreqtitle' => 'ވަދެވަޑައިގަތުން މަޖުބޫރު',
+'loginreqlink' => 'ވަދެވަޑައިގަންނަވާ',
 'accmailtitle' => 'ސިއްރުބަސް ފޮނުވިއްޖެ.',
 'accmailtext' => '"$1" އަށްޓަކައިވާ ސިއްރު ބަސް $2 އަށް ވަނީ ފޮނުވިފައި',
 'newarticle' => '(އައު)',
+'noarticletext' => 'މި ޞަފްޙާގައި އެއްވެސް ލިޔުމެއް ނުވެއެވެ. ތިޔަބޭފުޅާއަށް މި ނަން [[Special:Search/{{PAGENAME}}|އެހެން ޞަފްޙާތަކުން ހޯއްދެވިދާނެއެވެ]]. ނުވަތަ <span class="plainlinks">[{{fullurl:{{#Special:Log}}|page={{FULLPAGENAMEE}}}} މިއާ ގުޅޭ ލޮގްތައް ހޯއްދެވިދާނެއެވެ].
+[{{fullurl:{{FULLPAGENAME}}|action=edit}} ނުވަތަ މި ޞަފްޙާއަށް އުނިއިތުރު ގެނެވިދާނެއެވެ].</span>.',
+'previewnote' => "'''މިއީ ހަމައެކަނި ނަމޫނާ އެކެވެ.'''
+އަދި ތިބޭފުޅާގެ ބަދަލުތައް ރައްކާނުކުރެވެއެވެ!",
 'editing' => '$1 އަށް އުނިއިތުރު ގެންނަނީ',
-'editingsection' => '$1 ގެ (ބަޔަކަށް) އުނި އިތުރު ގެންނަނީ',
+'creating' => '$1 ފަށްޓަވަނީ',
+'editingsection' => '$1ގެ ބަޔަކަށް އުނިއިތުރު ގެންނަނީ',
+'editingcomment' => '$1ގެ ބަޔަކަށް އުނިއިތުރު ގެންނަނީ',
 'editconflict' => 'އުނިއިތުރުގެންނެވުމުގައި އަރާރުން: $1',
-'yourtext' => 'ތިޔބޭފުޅާގެ ލިޔުއްވުން',
+'yourtext' => 'Þ\8cÞ¨Þ\94Þ¦Þ\84Þ­Þ\8aÞªÞ\85Þ§Þ\8eÞ¬ Þ\8dÞ¨Þ\94ÞªÞ\87Þ°Þ\88ÞªÞ\82Þ°',
 'yourdiff' => 'ތަފާތުތައް',
-'semiprotectedpagewarning' => "'''ސަމާލުކަމަށް:''' މި ޞަފްހާވަނީ ދިފާއު ކުރެވިފައެވެ. އެހެންކަމުން މިސަފްޙާ އަށް އުނި އިތުރު ގެނެވޭނީ ހަމައެކަނި މެމްބަރުކަން ހާސިލް ކުރައްވާފައިވާ ބޭފުޅުންނަށެވެ!",
-'templatesused' => 'މި ޞަފްޙާ ގައި ބޭނުން ކުރެވިފައިވާ ފަންވަތްތައް:',
+'semiprotectedpagewarning' => "'''ސަމާލުކަމަށް:''' މި ޞަފްހާވަނީ ދިފާއު ކުރެވިފައެވެ. އެހެންކަމުން މިސަފްޙާ އަށް އުނިއިތުރު ގެނެވޭނީ ހަމައެކަނި މެމްބަރުކަން ހާޞިލް ކުރައްވާފައިވާ ބޭފުޅުންނަށެވެ.
+ތިރީގައި ވަނީ އެންމެ ފަހުގެ ލޮގް އެވެ:",
+'templatesused' => 'މި ޞަފްޙާ ގައި ބޭނުން ކުރެވިފައިވާ {{PLURAL:$1|ފަންވަތް|ފަންވަތްތައް}}:',
+'template-protected' => '(ދިފާޢުކުރެވިފައި)',
+'template-semiprotected' => '(ބައެއް ދިފާޢުކުރެވިފައި)',
+'recreate-moveddeleted-warn' => "'''ސަމާލުކަމަށް: ތިޔަ ފަށްޓަވަން އުޅުއްވަނީ ކުރީގައި ފޮހެލެވިފައިވާ ޞަފްޙާއެކެވެ.'''
+
+މި ޞަފްޙާ ކުރިއަށް ގެންދެވުމަށް ރަނގަޅުތޯ އަދި އެއްފަހަރު ވިސްނަވާލައްވާށެވެ.
+ފޮހެލެވުނު އަދި ބަދަލުކުރެވުނު ލޮގް ތިރީގައި ވަނީއެވެ :",
+'moveddeleted-notice' => 'މި ޞަފްޙާ ވަނީ ފޮހެލެވިފައެވެ.
+ފޮހެލުމުގެ އަދި ނަން ބަދަލުކުރުމުގެ ލޮގް ތިރީގައިވަނީއެވެ.',
 
 # History pages
+'currentrev' => 'އެންމެފަހުން ގެނެވުނު ބަދަލު',
+'currentrev-asof' => 'އެންމެ ފަހުން ގެނެވުނު ބަދަލު $1',
+'revisionasof' => '$1ގެ ނުސްހާ',
+'previousrevision' => '→ ކުރީގެ ނުސްހާ',
+'nextrevision' => 'ފަހުގެ ނުސްހާ ←',
 'next' => 'ކުރިޔަށް',
+'histfirst' => 'އެންމެ ކުރީގެ',
+'histlast' => 'އެންމެ ފަހުގެ',
+
+# Revision deletion
+'revdel-restore-deleted' => 'ފޮހެލެވިފައިވާ ނުސްހާތައް',
+'revdel-restore-visible' => 'ފާޅު ނުސްހާތައް',
 
 # Diffs
+'lineno' => 'ފޮޅުވަތް $1:',
 'compareselectedversions' => 'އިހުތިޔާރު ކުރެވިފައިވާ ނުސްހާތައް އަޅައިކިޔުއްވާ',
 
 # Search results
+'searchresults' => 'ހޯދުމުގެ ނަތީޖާ',
+'searchresults-title' => 'ހޯދުމުގެ ނަތީޖާ: $1',
+'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-new' => "''' މި ވިކީގައި \"[[:\$1]]\" ފަށްޓަވައިދެއްވާ! '''",
 'searchhelp-url' => 'Help:ފިހުރިސްތު',
+'searchprofile-articles' => 'މަޒުމޫނު ޞަފްޙާތައް',
+'searchprofile-project' => 'އެހީ ޞަފްޙާތަކާއި މަޝްރޫޢު ޞަފްޙާތައް',
+'searchprofile-images' => 'މަލްޓިމީޑިއާ',
+'searchprofile-everything' => 'ހުރިހާ',
+'searchprofile-advanced' => 'ފުންކޮށް',
+'searchprofile-articles-tooltip' => 'ހޯދާނީ $1އިން',
+'searchprofile-project-tooltip' => 'ހޯދާނީ $1އިން',
+'searchprofile-images-tooltip' => 'ފައިލުތައް ހޯއްދަވާ',
+'searchprofile-everything-tooltip' => 'ހޯއްވާނީ ހުރިހާ އެއްޗެއް (ޚިޔާލު ޞަފްޙާތަކާއި އެކު)',
+'search-result-size' => '$1 ({{PLURAL:$2|1 ބަސް|$2 ބަސްތައް}})',
+'search-redirect' => 'މިސްރާބުކުރެވުނީ $1',
+'search-section' => '(ބައި $1)',
+'search-suggest' => 'ބޭނުންފުޅުވަނީ $1 ތޯ؟',
+'searchall' => 'ހުރިހާ',
+'search-nonefound' => 'ތިޔަ ހޯއްދަވާ ލިޔުމެއް ނުފެނުނެވެ.',
 
 # Preferences page
 'preferences' => 'ތަރުޖީހުތައް',
-'mypreferences' => 'މަގޭ ތަރުޖީހުތައް',
+'mypreferences' => 'ތަރުޖީހުތައް',
+'prefs-edits' => 'އުނިއިތުރުތަކުގެ ޢަދަދު:',
 'changepassword' => 'ސިއްރުބަސް ބަދަލުކުރައްވާ',
+'skin-preview' => 'ނަމޫނާ',
+'saveprefs' => 'ރައްކާކުރައްވާ',
 'columns' => 'ކޮލަންތައް:',
+'timezonelegend' => 'ވަގުތު ހިސާބުގަނޑު:',
+'timezoneregion-africa' => 'އެފްރިކާ',
+'timezoneregion-america' => 'އެމެރިކާ',
+'timezoneregion-antarctica' => 'އެންޓާކްޓިކާ',
+'timezoneregion-arctic' => 'އާކްޓިކް',
+'timezoneregion-asia' => 'އޭޝިއާ',
+'timezoneregion-australia' => 'އޮސްޓްރޭލިއާ',
+'timezoneregion-europe' => 'ވިލާތު',
 'prefs-files' => 'ފައިލުތައް',
 'youremail' => '٭ އީމޭލު',
 'username' => 'މެންބަރުނަން:',
 'yourrealname' => '* އަސްލު ނަން',
 'yourlanguage' => 'ބަސް:',
 'yournick' => 'ލަގަބު/ކުއްނިއްޔާ:',
+'badsiglength' => 'ތިބޭފުޅާގެ ސޮއި $1 {{PLURAL:$1|ކަރެކްޓަރަށް|ކަރެކްޓަރުތަކަށް}}ވުރެ ދިގުނުކުރާށެވެ.',
+'yourgender' => 'ޖިންސު:',
+'gender-female' => 'އަންހެން',
 'email' => 'އީމޭލު',
+'prefs-signature' => 'ސޮއި',
 
 # User rights
 'userrights' => 'މެންބަރުގެ ހައްގުތަކުގެ އިންތިޒާމް',
 'userrights-user-editname' => 'މެންބަރުނަން ލިޔުއްވާ:',
 
+# Groups
+'group' => 'ގްރޫޕް:',
+'group-user' => 'މެމްބަރުން',
+'group-autoconfirmed' => 'އޮޓޯމެމްބަރުން',
+'group-bot' => 'ބޮޓުން',
+'group-sysop' => 'އެޑްމިނިސްޓްރޭޓަރުން',
+'group-bureaucrat' => 'ބިއުރޯކްރެޓުން',
+'group-all' => '(ހުރިހާ)',
+
+# Associated actions - in the sentence "You do not have permission to X"
+'action-edit' => 'މި ޞަފްޙާއަށް އުނިއިތުރު ގެންނަވާ',
+
 # Recent changes
-'recentchanges' => 'ފަހު ބަދަލުތައް',
-'recentchanges-summary' => 'މި ވިކިޕީޑިޔާ އަށް ގެނެވިފައިވާ އެންމެ ފަހުގެ ބަދަލުތައް މި ޞަފްހާ އިން ބައްލަވާ!',
+'recentchanges' => 'އެންމެ ފަހުގެ ބަދަލުތައް',
+'recentchanges-summary' => 'މި ވިކިޕީޑިއާ އަށް ގެނެވިފައިވާ އެންމެ ފަހުގެ ބަދަލުތައް މި ޞަފްހާ އިން ބައްލަވާ!',
+'recentchanges-label-newpage' => 'މި އުނިއިތުރުން އާ ޞަފްޙާއެއް ފަށައިގަނެވުނެވެ.',
+'recentchanges-label-minor' => 'މިއީ ކުޑަކުޑަ އުނިއިތުރެކެވެ.',
+'recentchanges-label-bot' => 'މި އުނިއިތުރު ގެނައީ ބޮޓެކެވެ.',
 'diff' => 'ފަރަގު',
+'hist' => 'ތާރީޚް',
 'hide' => 'ފޮރުވާ',
 'show' => 'ދައްކަވާ',
 
@@ -328,49 +541,93 @@ $messages = array(
 'listfiles' => 'ފައިލުތަކުގެ ފިހުރިސްތު',
 
 # File description page
+'file-anchor-link' => 'ފައިލު',
+'filehist' => 'ޞަފްޙާގެ ތާރީޚް',
+'filehist-current' => 'މިހާރު',
+'filehist-datetime' => 'ތާރީޚް/ގަޑި',
+'filehist-thumb' => 'ތަމްބްނެއިލް',
+'filehist-user' => 'މެމްބަރު',
+'filehist-comment' => 'ޚިޔާލު',
 'imagelinks' => 'ފާލަންތައް',
+'sharedupload-desc-here' => 'މި ފައިލަކީ $1ގެ ފައިލެކެވެ. އަދި އެހެން މަޝްރޫޢުތަކުގައި ބޭނުން ކުރެވިފައި ހުރެދާނެއެވެ.
+މި ފައިލުގެ ތަފްސީލް [$2 ފައިލު ތަފްސީލް ޞަފްޙާއިން] ތިރީގައިވަނީއެވެ.',
 
 # Random page
 'randompage' => 'ކޮންމެވެސް ޞަފްޙާއެއް',
 
 # Statistics
 'statistics' => 'ތަފާސްހިސާބުތައް',
+'statistics-header-pages' => 'ޞަފްޙާގެ ތަފާސްހިސާބު',
+'statistics-header-edits' => 'އުނިއިތުރުތަކުގެ ތަފާސްހިސާބު',
+'statistics-header-views' => 'ތަފާސްހިސާބު ބައްލަވާ',
 'statistics-header-users' => 'މެންބަރުގެ ތަފާސްހިސާބު',
+'statistics-header-hooks' => 'އެހެނިހެން ތަފާސްހިސާބު',
+'statistics-articles' => 'މަޒުމޫނުތައް',
+'statistics-pages' => 'ޞަފްޙާތައް',
+'statistics-pages-desc' => 'ވިކީގައިވާ ހުރިހާ ޞަފްޙާއެއް. ޚިޔާލު ޞަފްހާތަކާއި މިސްރާބު ޞަފްޙާތަކާއި އިތުރަށް...',
+'statistics-files' => 'ފޮނުވިފައިވާ ފައިލުތައް',
+'statistics-edits' => '{{SITENAME}} ފެށުނުތާ ޞަފްޙާތަކަށް އުނިއިތުރު ގެނެވުނު އަދަދު',
+'statistics-edits-average' => 'ޞަފްޙާއަކަށް ގެނެވޭ އެވަރަޖު އުނިއިތުރު',
+'statistics-users' => 'ރަޖިސްޓަރކުރެވިފައިވާ [[Special:ListUsers|މެމްބަރުން]]',
+'statistics-users-active' => 'ހަރަކާތްތެރި މެމްބަރުން',
+'statistics-users-active-desc' => 'ފާއިތުވެދިޔަ {{PLURAL:$1|ދުވަސް|$1 ދުވަސްތައް}} ތެރޭގައި ކޮންމެވެސް ކަމެއް ކޮށްފައިވާ މެމްބަރުން',
+'statistics-mostpopular' => 'އެންމެ މަޤްބޫލް ޞަފްޙާތައް',
 
 'brokenredirects' => 'އޮޅިފައިވާ މިސްރާބުތައް',
 
 # Miscellaneous special pages
+'nbytes' => '$1 {{PLURAL:$1|ބައިޓް|ބައިޓްތައް}}',
 'unusedcategories' => 'ބޭނުންނުކުރެވޭ ގިސްމުތައް',
 'unusedimages' => 'ބޭނުންނުކުރެވޭ ފައިލުތައް',
+'popularpages' => 'މަޤްބޫލު ޞަފްޙާތައް',
 'wantedcategories' => 'ބޭނުންފުޅުވާ ގިސްމުތައް',
 'wantedpages' => 'ބޭނުންފުޅުވާ ޞަފްޙާތައް',
 'shortpages' => 'ކުރު ޞަފްޙާތައް',
+'longpages' => 'ދިގު ޞަފްޙާތައް',
+'protectedpages' => 'ދިފާއުކުރެވިފައިވާ ޞަފްޙާތައް',
+'newpages' => 'އާ ޞަފްޙާތައް',
 'ancientpages' => 'ބޯދާ ޞަފްޙާތައް',
 'move' => 'ނަން/ތަން ބަދަލުކުރައްވާ',
 'movethispage' => 'މި ޞަފްހާގެ ނަންބަދަލުކުރައްވާ',
 
 # Book sources
 'booksources' => 'ފޮތްތަކުގެ މަސްދަރުތައް',
+'booksources-go' => 'ދުރުވޭ',
 
 # Special:AllPages
 'allpages' => 'ހުރިހާ ޞަފްޙާތައް',
+'alphaindexline' => '$1 އިން $2',
+'nextpage' => 'ކުރިއަށް ($1)',
+'prevpage' => 'ފަހަތަށް ($1)',
 'allarticles' => 'ހުރިހާ މަޒުމޫނުތައް',
 'allinnamespace' => 'ހުރިހާ ޞަފްޙާތައް (ނުތުގު $1 ގައިވާ)',
 'allpagesprev' => 'ކުރީގެ',
 'allpagesnext' => 'ކުރިޔަށް އޮތް',
 'allpagessubmit' => 'ދުރުވޭ',
 
+# SpecialCachedPage
+'cachedspecial-viewing-cached-ttl' => 'ތިޔަ ބައްލަވަނީ މި ޞަފްޙާގެ ކޭޗްޑް ވައްތަރެވެ. $1',
+
 # Special:Categories
 'categories' => 'ގިސްމުތައް',
 'categoriespagetext' => 'ތިރީގައި މިވާ ގިސްމުތައް ވިކީ ގައި މައުޖޫދުވެގެން ވެއެވެ.
 [[Special:UnusedCategories|Unused categories]] are not shown here.
 Also see [[Special:WantedCategories|wanted categories]].',
 
+# Special:ActiveUsers
+'activeusers' => 'ހަރަކާތްތެރި މެމްބަރުންގެ ލިސްޓު',
+'activeusers-hidebots' => 'ބޮޓް ފޮރުއްވާ',
+'activeusers-hidesysops' => 'އެޑްމިނިސްޓްރޭޓަރުން ފޮރުއްވާ',
+
+# Special:ListGroupRights
+'listgrouprights-members' => '(މެމްބަރުންގެ ލިސްޓު)',
+
 # E-mail user
 'emailuser' => 'މި މެންބަރަށް އީމޭލު ފޮނުއްވާ',
 
 # Watchlist
 'watchlist' => 'މަގޭ ނަޒަރު',
+'mywatchlist' => 'މަގޭ ނަޒަރު',
 'addedwatchtext' => "މި ޞަފްޙާ \"<nowiki>\$1</nowiki>\" ތިޔަބޭފުޅާގެ [[Special:Watchlist|ހާއްސަ ނަޒަރު]] ފިހުރިސްތަށް ލެވިއްޖެއެވެ. ދެން ކުރިމަގުގައި މި ޞަފްޙާ އަދި މިއާ ގުޅޭ ބަހުސް ގެ ޞަފްޙާ އަށް ގެނެވޭ އުނިއިތުރު ތަކުގެ މައުލޫމާތު މިޞަފްހާއަށް ލެވޭނެއެވެ. އަދި އެ ޞަފްޙާތަކުގެ ޝަނާހަތު ފަސޭހަ ކުރުމަށްޓަކައި [[Special:ފަހު ބަދަލުތައް|ފަހު ބަދަލުތަކުގެ ފިހުރިސްތު]] ގައި އެބައިތައް '''ބޯ''' (bold) އަކުރުން ލިޔެވޭނެއެވެ. <p> ކޮންމެ އިރަކުވެސް ތިޔަބޭފުޅާ ހާއްސަ ނަޒަރުގެ ފިހުރިސްތުން މި ޞަފްޙާ އުނިކުރައްވަން ބޭނުންފުޅިއްޔާ މަތީގައި ދެވިފައިވާ \"ހާއްސަ ނަޒަރުން އުނިކުރޭ\" ގައި ކޮއްޓަވާ ލައްވާށެވެ.",
 'watch' => 'ނަޒަރުބަހައްޓަވާ',
 'watchthispage' => 'މި ޞަފްޙާއަށް ނަޒަރުބަހައްޓަވާ',
@@ -388,6 +645,7 @@ Also see [[Special:WantedCategories|wanted categories]].',
 'deletecomment' => 'ސަބަބު',
 
 # Rollback
+'rollbacklink' => 'ކުރީގެ ނުސްހާ އަކަށް ބަދަލުކުރައްވާ',
 'cantrollback' => 'އުނިއިތުރު އިއާދައެއް ނުކުރެވޭނެ؛ އެހެނީ އެންމެ ފަހު އުނިއިތުރުގައި ހިއްސާވި ފަރާތަކީ މިޞަފްޙާގެ ހަމައެކަނި މުއައްލިފެވެ.',
 
 # Protect
@@ -401,6 +659,8 @@ Also see [[Special:WantedCategories|wanted categories]].',
 'undelete' => 'ފޮހެލެވިފައިވާ ޞަފްޙާތައް ބައްލަވާ',
 'viewdeletedpage' => 'ފޮހެލެވިފައިވާ ޞަފްޙާތައް ބައްލަވާ',
 'undeletebtn' => 'އިއާދަ ކުރޭ!',
+'undeleteviewlink' => 'ބައްލަވާ',
+'undelete-show-file-submit' => 'އާދެ',
 
 # Namespace form on various pages
 'blanknamespace' => '(މައި)',
@@ -409,7 +669,9 @@ Also see [[Special:WantedCategories|wanted categories]].',
 'contributions' => 'މެންބަރު ގެ ހިއްސާ',
 'mycontris' => 'މަގޭ ހިއްސާ',
 
+'sp-contributions-talk' => 'ވާހަކަ',
 'sp-contributions-userrights' => 'މެންބަރުގެ ހައްގުތަކުގެ އިންތިޒާމް',
+'sp-contributions-search' => 'ހިއްސާތަށް ހޯއްދަވާ',
 
 # What links here
 'whatlinkshere' => 'މިއާ ގުޅެނީ ކޮންއެއްޗެއް',
@@ -418,9 +680,12 @@ Also see [[Special:WantedCategories|wanted categories]].',
 'blockip' => 'މެންބަރާ މެދު ފިޔަވަޅުއަޅުއްވާ',
 'ipbreason' => 'ސަބަބު',
 'ipbsubmit' => 'މި މެމްބަރާއި މެދު ފިޔަވަޅު އަޅުއްވާ!',
+'ipboptions' => '2 ގަޑިއިރު:2 hours, 1 ދުވަސް:1 day, 3 ދުވަސް:3 days, 1 ހަފްތާ:1 week, 2 ހަފްތާ:2 weeks, 1 މަސް:1 month,3 މަސް:3 months, 6 މަސް:6 months, 1 އަހަރު:1 year, ހަމައެއްނެތް:infinite',
 'badipaddress' => 'ނުރަނގަޅު އައި.ޕީ އެޑްރެހެއް',
+'ipblocklist' => 'ފިޔަވަޅު އެޅިފައިވާ މެމްބަރުން',
 'expiringblock' => 'މުއްދަތު ހަމަވާނީ $1 $2',
 'blocklink' => 'ފިޔަވަޅުއަޅުއްވާ',
+'unblocklink' => 'ފިޔަވަޅުއެޅުން ބަދަލުކުރައްވާ',
 'contribslink' => 'ޙިއްޞާ',
 'proxyblocksuccess' => 'ފުރިހަމަވެއްޖެ.',
 
@@ -448,22 +713,96 @@ Also see [[Special:WantedCategories|wanted categories]].',
 'allmessagesdefault' => 'ކުރީގެ މަތަން',
 'allmessagescurrent' => 'މިހާރުގެ މަތަން',
 
+# Thumbnails
+'thumbnail-more' => 'ބޮޑުކުރައްވާ',
+
 # 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-n-mainpage' => 'މައި ސަފްޙާއަށް ވަަޑައިގަންނަވާ',
+'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-fulltext' => 'މި ބަސް ޞަފްޙާތަކުން ހޯއްދަވާ',
+'tooltip-p-logo' => 'މައި ޞަފްޙާއަށް ވަޑައިގަންނަވާ',
+'tooltip-n-mainpage' => 'މައި ސަފްޙާއަށް ވަޑައިގަންނަވާ',
+'tooltip-n-mainpage-description' => 'މައި ޞަފްޙާއަށް ވަޑައިގަންނަވާ',
+'tooltip-n-portal' => 'މަޝްރޫއާ ބެހޭ ގޮތުން، ތިބޭފުޅާއަށް ކުރެއްވޭނެ ކަންތައްތައް، ކަންކަން ހޯދާނެ ތަން',
+'tooltip-n-currentevents' => 'މިހާރު ހިނގަމުންދާ ހާދިސާތަކުގެ ޚުލާސާއެއް',
+'tooltip-n-recentchanges' => 'ފަހު ބަދަލުތައް',
+'tooltip-n-randompage' => 'ކޮންމެވެސް ޞަފްޙާއެއް',
+'tooltip-n-help' => 'އެހީގެ ޞަފްޙާ',
+'tooltip-t-whatlinkshere' => 'މި ޞަފްޙާއާ ގުޅިފައިވާ ހުރިހާ ޞަފްޙާތައް.',
+'tooltip-t-recentchangeslinked' => 'މި ޞަފްޙާއާ ގުޅުންހުރި ބަދަލުތައް',
+'tooltip-t-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-save' => 'ބަދަލުތައް ރައްކާކުރައްވާ',
+'tooltip-preview' => 'ބަދަލުތައް ދައްކަވާ، ރައްކާކުރެއްވުމުގެ ކުރިން މި ބޭނުންކުރައްވާ!',
+'tooltip-rollback' => '"ކުރީގެ ނުސްހާ އަކަށް ބަދަލުކުރައްވާ" އިން މި ޞަފްޙާއަށް އެންމެ ފަހުން އުނިއިތުރު ގެންނެވި މެމްބަރުގެ އުނިއިތުރު(އުނިއިތުރުތައް) ފޮހެލެވޭނެއެވެ.',
+'tooltip-summary' => 'ކުރު ޚުލާސާއެއް ލިޔުއްވާ',
+
+# Info page
+'pageinfo-toolboxlink' => 'ސަފްޙާ އާއި ބެހޭ މައުލޫމާތު',
+
+# Browsing diffs
+'previousdiff' => '→ ކުރީގެ ނުސްހާ',
+'nextdiff' => 'ފަހުގެ ނުސްހާ ←',
 
 # Special:NewFiles
-'showhidebots' => '($1 Þ\90Þ¬Þ\87Þ°Þ\93Þ¨)',
+'showhidebots' => '($1 Þ\84Þ®Þ\93Þ°Þ\90Þ°)',
 'ilsubmit' => 'ހޯއްދަވާ',
 
+# Metadata
+'metadata' => 'މެޓަޑޭޓާ',
+
 # EXIF tags
+'exif-imagewidth' => 'ފުޅާމިން',
+'exif-imagelength' => 'އުސްމިން',
 'exif-imagedescription' => 'ތަސްވީރުގެ ސުރުހީ',
+'exif-make' => 'ކެމެރާ އުފެއްދި ފަރާތް',
+'exif-model' => 'ކެމެރާ މޮޑެލް',
+'exif-software' => 'ބޭނުންކުރެވުނު ސޮފްޓްވެއަރ',
 'exif-artist' => 'މުސައްނިފު',
 'exif-filesource' => 'ފައިލުގެ މަސްދަރު',
 
 # Pseudotags used for GPSSpeedRef
 'exif-gpsspeed-n' => 'ތަސްވީރުގެ ސުރުހީ',
 
+# Pseudotags used for GPSDestDistanceRef
+'exif-gpsdestdistance-k' => 'ކިލޯމީޓަރު',
+'exif-gpsdestdistance-m' => 'މޭލު',
+
+'exif-iimcategory-edu' => 'ތަޢުލީމު',
+'exif-iimcategory-evn' => 'ތިމާވެށި',
+'exif-iimcategory-hth' => 'ސިއްޙަތު',
+'exif-iimcategory-pol' => 'ސިޔާސަތު',
+'exif-iimcategory-sci' => 'ސައިންސާއި ޓެކްނޮލޮޖީ',
+'exif-iimcategory-spo' => 'ކުޅިވަރު',
+
 # 'all' in various places, this might be different for inflected languages
 'watchlistall2' => 'ހުރިހާ',
 'namespacesall' => 'ހުރިހާ',
@@ -480,4 +819,7 @@ Also see [[Special:WantedCategories|wanted categories]].',
 # Special:SpecialPages
 'specialpages' => 'ހާއްސަ ޞަފްޙާތައް',
 
+# Search suggestions
+'searchsuggest-search' => 'ހޯއްދަވާ',
+
 );
index 2e4e1bc..8da6463 100644 (file)
@@ -20,6 +20,7 @@
  * @author Demmy
  * @author Evropi
  * @author Flyax
+ * @author FocalPoint
  * @author Geraki
  * @author Glavkos
  * @author Grondin
@@ -72,7 +73,7 @@ $namespaceNames = array(
        NS_TALK             => 'Συζήτηση',
        NS_USER             => 'Χρήστης',
        NS_USER_TALK        => 'Συζήτηση_χρήστη',
-       NS_PROJECT_TALK     => '$1_συζήτηση',
+       NS_PROJECT_TALK     => 'Συζήτηση_$1',
        NS_FILE             => 'Αρχείο',
        NS_FILE_TALK        => 'Συζήτηση_αρχείου',
        NS_MEDIAWIKI        => 'MediaWiki',
@@ -86,8 +87,9 @@ $namespaceNames = array(
 );
 
 $namespaceAliases = array(
-       'Μέσον' => NS_MEDIA,
-       'Εικόνα' => NS_FILE,
+       'Μέσον'            => NS_MEDIA,
+       '$1_συζήτηση'      => NS_PROJECT_TALK,
+       'Εικόνα'           => NS_FILE,
        'Συζήτηση_εικόνας' => NS_FILE_TALK,
 );
 
@@ -100,7 +102,7 @@ $specialPageAliases = array(
        'Block'                     => array( 'Φραγή', 'ΦραγήIP', 'ΦραγήΧρήστη' ),
        'Blockme'                   => array( 'ΦραγήΕμένα' ),
        'Booksources'               => array( 'ΠηγέςΒιβλίων' ),
-       'BrokenRedirects'           => array( 'Î\9bανθαÏ\83μένεςΑνακατευθύνσεις' ),
+       'BrokenRedirects'           => array( 'Î\9aαÏ\84εÏ\83Ï\84Ï\81αμμένεςΑνακατευθύνσεις' ),
        'Categories'                => array( 'Κατηγορίες' ),
        'ChangePassword'            => array( 'ΑλλαγήΚωδικού', 'ΑρχικοποίησηΠάσου', 'ΑρχικοποίησηΚωδικού' ),
        'Confirmemail'              => array( 'ΕπιβεβαίωσηEmail' ),
@@ -222,6 +224,7 @@ $magicWords = array(
        'pagenamee'                 => array( '1', 'ΟΝΟΜΑΣΕΛΙΔΑΣΚ', 'PAGENAMEE' ),
        'namespace'                 => array( '1', 'ΠΕΡΙΟΧΗ', 'NAMESPACE' ),
        'namespacee'                => array( '1', 'ΠΕΡΙΟΧΗΚ', 'NAMESPACEE' ),
+       'namespacenumber'           => array( '1', 'ΑΡΙΘΜΟΣΟΝΟΜΑΤΟΣΧΩΡΟΥ', 'NAMESPACENUMBER' ),
        'talkspace'                 => array( '1', 'ΠΕΡΙΟΧΗΣΥΖΗΤΗΣΕΩΝ', 'TALKSPACE' ),
        'talkspacee'                => array( '1', 'ΠΕΡΙΟΧΗΣΥΖΗΤΗΣΕΩΝΚ', 'TALKSPACEE' ),
        'subjectspace'              => array( '1', 'ΠΕΡΙΟΧΗΘΕΜΑΤΩΝ', 'SUBJECTSPACE', 'ARTICLESPACE' ),
@@ -359,41 +362,41 @@ $messages = array(
 'tog-newpageshidepatrolled' => 'Απόκρυψη ελεγμένων σελίδων από τον κατάλογο νέων σελίδων',
 'tog-extendwatchlist' => 'Επέκταση της λίστας παρακολούθησης ώστε να δείχνει όλες τις αλλαγές, όχι μόνο τις πιο πρόσφατες',
 'tog-usenewrc' => 'Χρήση βελτιωμένων πρόσφατων αλλαγών (απαιτεί JavaScript)',
-'tog-numberheadings' => 'Î\91Ï\85Ï\84Ï\8cμαÏ\84η Î±Ï\81ίθμιÏ\83η Ï\84ίÏ\84λων',
+'tog-numberheadings' => 'Î\91Ï\85Ï\84Ï\8cμαÏ\84η Î±Ï\81ίθμηÏ\83η ÎµÏ\80ικεÏ\86αλίδων',
 'tog-showtoolbar' => 'Εμφάνιση μπάρας εργαλείων επεξεργασίας (JavaScript)',
 'tog-editondblclick' => 'Επεξεργασία σελίδων με διπλό κλικ (JavaScript)',
 'tog-editsection' => 'Ενεργοποίηση επεξεργασίας τμημάτων μέσω των συνδέσμων [επεξεργασία]',
 'tog-editsectiononrightclick' => 'Ενεργοποίηση επεξεργασίας τμήματος με δεξί κλικ στους τίτλους των τμημάτων (JavaScript)',
 'tog-showtoc' => 'Εμφάνιση πίνακα περιεχομένων (για σελίδες με περισσότερες από τρεις κεφαλίδες)',
 'tog-rememberpassword' => 'Διατήρηση της σύνδεσης μου σε αυτόν τον browser (για ένα μέγιστο $1 {{PLURAL:$1|ημέρας|ημερών}})',
-'tog-watchcreations' => 'Πρόσθεσε τις σελίδες που δημιουργώ και αρχεία που ανεβάζω στη λίστα παρακολούθησής μου',
-'tog-watchdefault' => 'ΠÏ\81οÏ\83θήκη Ï\84Ï\89ν Ï\83ελίδÏ\89ν Ï\80οÏ\85 ÎµÏ\80εξεÏ\81γάζομαι Ï\83Ï\84η Î»Î¯Ï\83Ï\84α Ï\80αÏ\81ακολοÏ\8dθηÏ\83ηÏ\82.',
-'tog-watchmoves' => 'Πρόσθεσε τις σελίδες που μετακινώ στη λίστα παρακολούθησής μου',
-'tog-watchdeletion' => 'Πρόσθεσε τις σελίδες και αρχεία που διαγράφω στη λίστα παρακολούθησής μου',
-'tog-minordefault' => 'ΠÏ\81οκαθοÏ\81ίÏ\83Ï\84ε Î½Î± Ï\87αÏ\81ακÏ\84ηÏ\81ίζονÏ\84αι Ï\8cλεÏ\82 Î¿Î¹ Î±Î»Î»Î±Î³Î­Ï\82 "μικÏ\81ήÏ\82 ÎºÎ»Î¯Î¼Î±ÎºÎ±Ï\82".',
+'tog-watchcreations' => 'Προσθήκη σελίδων που δημιουργώ και αρχείων που ανεβάζω στη λίστα παρακολούθησής μου',
+'tog-watchdefault' => 'Προσθήκη σελίδων που επεξεργάζομαι στη λίστα παρακολούθησης.',
+'tog-watchmoves' => 'Προσθήκη σελίδων που μετακινώ στη λίστα παρακολούθησής μου',
+'tog-watchdeletion' => 'Προσθήκη σελίδων και αρχείων που διαγράφω στη λίστα παρακολούθησής μου',
+'tog-minordefault' => 'ΣήμανÏ\83η ÎµÎº Ï\80Ï\81οεÏ\80ιλογήÏ\82 Ï\8cλÏ\89ν Ï\84Ï\89ν Î±Î»Î»Î±Î³Ï\8eν Ï\89Ï\82 Î¼Î¹ÎºÏ\81ήÏ\82 ÎºÎ»Î¯Î¼Î±ÎºÎ±Ï\82',
 'tog-previewontop' => 'Εμφάνιση προεπισκόπησης πριν από το πλαίσιο επεξεργασίας και όχι μετά',
 'tog-previewonfirst' => 'Εμφάνιση προεπισκόπησης κατά την πρώτη επεξεργασία',
 'tog-nocache' => 'Απενεργοποίηση κρυφής μνήμης',
-'tog-enotifwatchlistpages' => 'Î\95ιδοÏ\80οίηÏ\83η Î¼Îµ e-mail Ï\83Ï\87εÏ\84ικά Î¼Îµ Î±Î»Î»Î±Î³Î­Ï\82 Ï\83Ï\84ιÏ\82 Ï\83ελίδεÏ\82 Ï\80οÏ\85 Ï\80αÏ\81ακολοÏ\85θÏ\8e.',
-'tog-enotifusertalkpages' => 'Î\95ιδοÏ\80οίηÏ\83η Î¼Îµ e-mail Ï\83Ï\87εÏ\84ικά Î¼Îµ Î±Î»Î»Î±Î³Î­Ï\82 Ï\83Ï\84η Ï\83Ï\85ζήÏ\84ηÏ\83η Ï\84ηÏ\82 Î´Î¹ÎºÎ®Ï\82 Î¼Î¿Ï\85 Ï\83ελίδας χρήστη',
-'tog-enotifminoredits' => 'Î\95ιδοÏ\80οίηÏ\83η Î¼Îµ e-mail ÎºÎ±Î¹ Î³Î¹Î± Ï\84ιÏ\82 Î±Î»Î»Î±Î³Î­Ï\82 Î¼Î¹ÎºÏ\81ήÏ\82 ÎºÎ»Î¯Î¼Î±ÎºÎ±Ï\82 Ï\83ε Î±Ï\85Ï\84ή Ï\84η Ï\83ελίδα',
-'tog-enotifrevealaddr' => 'Î\95μÏ\86άνιÏ\83η Ï\84ηÏ\82 Î·Î»ÎµÎºÏ\84Ï\81ονικήÏ\82 Î¼Î¿Ï\85 Î´Î¹ÎµÏ\8dθÏ\85νÏ\83ηÏ\82 Ï\83Ï\84ιÏ\82 ÎµÎ¹Î´Î¿Ï\80οιήÏ\83ειÏ\82 Ï\80οÏ\85 Î¼Î¿Ï\85 Î±Ï\80οÏ\83Ï\84έλλονÏ\84αι.',
+'tog-enotifwatchlistpages' => 'Î\9dα Î¼Î¿Ï\85 Î±Ï\80οÏ\83Ï\84έλλεÏ\84αι Î¼Î®Î½Ï\85μα Î·Î»ÎµÎºÏ\84Ï\81ονικοÏ\8d Ï\84αÏ\87Ï\85δÏ\81ομείοÏ\85 Ï\8cÏ\84αν Î±Î»Î»Î¬Î¶ÎµÎ¹ Î¼Î¹Î± Ï\83ελίδα Î® Î­Î½Î± Î±Ï\81Ï\87είο Ï\80οÏ\85 Î²Ï\81ίÏ\83κεÏ\84αι Ï\83Ï\84η Î»Î¯Ï\83Ï\84α Ï\80αÏ\81ακολοÏ\8dθηÏ\83ήÏ\82 Î¼Î¿Ï\85',
+'tog-enotifusertalkpages' => 'Î\9dα Î¼Î¿Ï\85 Î±Ï\80οÏ\83Ï\84έλλεÏ\84αι Î¼Î®Î½Ï\85μα Î·Î»ÎµÎºÏ\84Ï\81ονικοÏ\8d Ï\84αÏ\87Ï\85δÏ\81ομείοÏ\85 Ï\8cÏ\84αν Î±Î»Î»Î¬Î¶ÎµÎ¹ Î· Ï\80Ï\81οÏ\83Ï\89Ï\80ική Î¼Î¿Ï\85 Ï\83ελίδα Ï\83Ï\85ζήÏ\84ηÏ\83ης χρήστη',
+'tog-enotifminoredits' => 'Î\9dα Î¼Î¿Ï\85 Î±Ï\80οÏ\83Ï\84έλλεÏ\84αι Î¼Î®Î½Ï\85μα Î·Î»ÎµÎºÏ\84Ï\81ονικοÏ\8d Ï\84αÏ\87Ï\85δÏ\81ομείοÏ\85 ÎºÎ±Î¹ Î³Î¹Î± Î±Î»Î»Î±Î³Î­Ï\82 Î¼Î¹ÎºÏ\81ήÏ\82 ÎºÎ»Î¯Î¼Î±ÎºÎ±Ï\82 Ï\83ε Ï\83ελίδεÏ\82 ÎºÎ±Î¹ Î±Ï\81Ï\87εία',
+'tog-enotifrevealaddr' => 'Î\91Ï\80οκάλÏ\85Ï\88η Ï\84ηÏ\82 Î·Î»ÎµÎºÏ\84Ï\81ονικήÏ\82 Î¼Î¿Ï\85 Î´Î¹ÎµÏ\8dθÏ\85νÏ\83ηÏ\82 Ï\83ε ÎµÎ¹Î´Î¿Ï\80οιήÏ\83ειÏ\82 Î·Î»ÎµÎºÏ\84Ï\81ονικοÏ\8d Ï\84αÏ\87Ï\85δÏ\81ομείοÏ\85',
 'tog-shownumberswatching' => 'Εμφάνιση του αριθμού των συνδεδεμένων χρηστών',
 'tog-oldsig' => 'Υπάρχουσα υπογραφή:',
-'tog-fancysig' => 'Μεταχείριση υπογραφής ως κείμενο wiki (χωρίς έναν αυτόματο σύνδεσμο)',
+'tog-fancysig' => 'Μεταχείριση υπογραφής ως κώδικα wiki (χωρίς αυτόματο σύνδεσμο)',
 'tog-externaleditor' => 'Χρήση εξωτερικού επεξεργαστή από προεπιλογή (για προχωρημένους μόνο, χρειάζεται ειδικές ρυθμίσεις του υπολογιστή σας. [//www.mediawiki.org/wiki/Manual:External_editors Περισσότερες πληροφορίες.])',
 'tog-externaldiff' => 'Χρήση εξωτερικού diff από προεπιλογή (για προχωρημένους μόνο, χρειάζεται ειδικές ρυθμίσεις του υπολογιστή σας. [//www.mediawiki.org/wiki/Manual:External_editors Περισσότερες πληροφορίες.])',
 'tog-showjumplinks' => 'Ενεργοποίησε τους συνδέσμους προσβασιμότητας του τύπου "μετάβαση σε"',
-'tog-uselivepreview' => 'ΧÏ\81ηÏ\83ιμοÏ\80οίηÏ\83ε Î¬Î¼ÎµÏ\83η Ï\80Ï\81οεÏ\80ιÏ\83κÏ\8cÏ\80ηÏ\83η (JavaScript) (Πειραματικό)',
-'tog-forceeditsummary' => 'Î\95ιδοÏ\80οίηÏ\83έ Î¼Îµ Ï\8cÏ\84αν ÎµÎ¹Ï\83άγÏ\89 Î¼Î¹Î± ÎºÎµÎ½Î® Ï\83Ï\8dνοÏ\88η επεξεργασίας',
-'tog-watchlisthideown' => 'Î\91Ï\80Ï\8cκÏ\81Ï\85Ï\88ε Ï\84ιÏ\82 ÎµÏ\80εξεÏ\81γαÏ\83ίεÏ\82 μου από τη λίστα παρακολούθησης',
-'tog-watchlisthidebots' => 'Î\91Ï\80Ï\8cκÏ\81Ï\85Ï\88ε Ï\84ιÏ\82 ÎµÏ\80εξεÏ\81γαÏ\83ίεÏ\82 των bot από τη λίστα παρακολούθησης',
-'tog-watchlisthideminor' => 'Î\91Ï\80Ï\8cκÏ\81Ï\85Ï\88ε Ï\84ιÏ\82 Î¼Î¹ÎºÏ\81ήÏ\82 Ï\83ημαÏ\83ίαÏ\82 ÎµÏ\80εξεÏ\81γαÏ\83ίες από τη λίστα παρακολούθησης',
+'tog-uselivepreview' => 'ΧÏ\81ήÏ\83η Î¶Ï\89νÏ\84ανήÏ\82 Ï\80Ï\81οεÏ\80ιÏ\83κÏ\8cÏ\80ηÏ\83ηÏ\82 (αÏ\80αιÏ\84εί JavaScript) (Ï\80ειραματικό)',
+'tog-forceeditsummary' => 'Î\9dα ÎµÎ¹Î´Î¿Ï\80οιοÏ\8dμαι ÎºÎ±Ï\84ά Ï\84ην ÎµÎ¹Ï\83αγÏ\89γή ÎºÎµÎ½Î®Ï\82 Ï\83Ï\8dνοÏ\88ηÏ\82 επεξεργασίας',
+'tog-watchlisthideown' => 'Î\91Ï\80Ï\8cκÏ\81Ï\85Ï\88η Ï\84Ï\89ν ÎµÏ\80εξεÏ\81γαÏ\83ιÏ\8eν μου από τη λίστα παρακολούθησης',
+'tog-watchlisthidebots' => 'Î\91Ï\80Ï\8cκÏ\81Ï\85Ï\88η Ï\84Ï\89ν ÎµÏ\80εξεÏ\81γαÏ\83ιÏ\8eν των bot από τη λίστα παρακολούθησης',
+'tog-watchlisthideminor' => 'Î\91Ï\80Ï\8cκÏ\81Ï\85Ï\88η Ï\84Ï\89ν ÎµÏ\80εξεÏ\81γαÏ\83ιÏ\8eν Î¼Î¹ÎºÏ\81ήÏ\82 Ï\83ημαÏ\83ίας από τη λίστα παρακολούθησης',
 'tog-watchlisthideliu' => 'Απόκρυψη επεξεργασιών συνδεδεμένων χρηστών από τη λίστα παρακολούθησης',
 'tog-watchlisthideanons' => 'Απόκρυψη επεξεργασιών ανωνύμων χρηστών από τη λίστα παρακολούθησης',
 'tog-watchlisthidepatrolled' => 'Απόκρυψη ελεγμένων επεξεργασιών από τη λίστα παρακολούθησης',
-'tog-ccmeonemails' => 'ΣÏ\84είλε Î¼Î¿Ï\85 αντίγραφα των μηνυμάτων ηλεκτρονικού ταχυδρομείου που στέλνω σε άλλους χρήστες',
-'tog-diffonly' => 'Î\9cην ÎµÎ¼Ï\86ανίζειÏ\82 Ï\84ο Ï\80εÏ\81ιεÏ\87Ï\8cμενο Ï\84ηÏ\82 Ï\83ελίδαÏ\82 κάτω από τις διαφορές των εκδόσεων',
+'tog-ccmeonemails' => 'Î\9dα Î¼Î¿Ï\85 Î±Ï\80οÏ\83Ï\84έλλονÏ\84αι αντίγραφα των μηνυμάτων ηλεκτρονικού ταχυδρομείου που στέλνω σε άλλους χρήστες',
+'tog-diffonly' => 'Î\9dα Î¼Î·Î½ ÎµÎ¼Ï\86ανίζεÏ\84αι Ï\80εÏ\81ιεÏ\87Ï\8cμενο Ï\83ελίδÏ\89ν κάτω από τις διαφορές των εκδόσεων',
 'tog-showhiddencats' => 'Εμφάνιση κρυμμένων κατηγοριών',
 'tog-noconvertlink' => 'Απενεργοποίησε την μετατροπή τίτλου συνδέσμου',
 'tog-norollbackdiff' => 'Παράλειψη διαφοράς μετά την εκτέλεση επαναφοράς',
@@ -463,10 +466,10 @@ $messages = array(
 
 # Categories related messages
 'pagecategories' => '{{PLURAL:$1|Κατηγορία|Κατηγορίες}}',
-'category_header' => 'Î\86Ï\81θÏ\81α Ï\83Ï\84ην ÎºÎ±Ï\84ηγοÏ\81ία "$1"',
+'category_header' => 'ΣελίδεÏ\82 Ï\83Ï\84ην ÎºÎ±Ï\84ηγοÏ\81ία Â«$1»',
 'subcategories' => 'Υποκατηγορίες',
 'category-media-header' => 'Πολυμέσα στην κατηγορία «$1»',
-'category-empty' => "''Î\91Ï\85Ï\84ή Î· ÎºÎ±Ï\84ηγοÏ\81ία Î´ÎµÎ½ Ï\80εÏ\81ιέÏ\87ει Î¬Ï\81θÏ\81α Î® ÎµÎ¹ÎºÏ\8cνεÏ\82.''",
+'category-empty' => "''Î\91Ï\85Ï\84ή Î· ÎºÎ±Ï\84ηγοÏ\81ία Î´ÎµÎ½ Ï\80εÏ\81ιέÏ\87ει Î±Ï\85Ï\84ή Ï\84η Ï\83Ï\84ιγμή Ï\83ελίδεÏ\82 Î® Ï\80ολÏ\85μέÏ\83α.''",
 'hidden-categories' => '{{PLURAL:$1|Κρυμμένη κατηγορία|Κρυμμένες κατηγορίες}}',
 'hidden-category-category' => 'Κρυμμένες κατηγορίες',
 'category-subcat-count' => '{{PLURAL:$2|Αυτή η κατηγορία έχει μόνο την ακόλουθη υποκατηγορία.|Αυτή η κατηγορία έχει {{PLURAL:$1|την ακόλουθη υποκατηγορία|τις ακόλουθες $1 υποκατηγορίες}} , από $2 συνολικά.}}',
@@ -476,8 +479,8 @@ $messages = array(
 'category-file-count' => '{{PLURAL:$2|Αυτή η κατηγορία περιέχει μόνο το ακόλουθο αρχείο.|{{PLURAL:$1|Το ακόλουθο αρχείο είναι|Τα ακόλουθα $1 αρχεία είναι}} σε αυτή την κατηγορία, από $2 συνολικά.}}',
 'category-file-count-limited' => '{{PLURAL:$1|Το ακόλουθο αρχείο είναι|Τα ακόλουθα $1 αρχεία είναι}} στην τρέχουσα κατηγορία.',
 'listingcontinuesabbrev' => 'συνεχίζεται...',
-'index-category' => 'Συντεταγμένες σελίδες',
-'noindex-category' => 'Î\91Ï\83Ï\8dνÏ\84ακÏ\84εÏ\82 Ï\83ελίδες',
+'index-category' => 'Σελίδες καταλογογραφημένες για μηχανές αναζήτησης',
+'noindex-category' => 'ΣελίδεÏ\82 Î¼Î· ÎºÎ±Ï\84αλογογÏ\81αÏ\86ημένεÏ\82 Î³Î¹Î± Î¼Î·Ï\87ανέÏ\82 Î±Î½Î±Î¶Î®Ï\84ηÏ\83ης',
 'broken-file-category' => 'Σελίδες με κατεστραμμένες συνδέσεις',
 
 'about' => 'Σχετικά',
@@ -507,7 +510,7 @@ $messages = array(
 'vector-action-move' => 'Μετακίνηση',
 'vector-action-protect' => 'Προστασία',
 'vector-action-undelete' => 'Επαναφορά',
-'vector-action-unprotect' => 'Î\91λλάξÏ\84ε Ï\84ην Ï\80Ï\81οÏ\83Ï\84αÏ\83ία',
+'vector-action-unprotect' => 'Î\91λλαγή Ï\80Ï\81οÏ\83Ï\84αÏ\83ίαÏ\82',
 'vector-simplesearch-preference' => 'Ενεργοποίηση απλοποιημένης μπάρας αναζήτησης (μόνον Vector skin)',
 'vector-view-create' => 'Δημιουργία',
 'vector-view-edit' => 'Επεξεργασία',
@@ -515,7 +518,7 @@ $messages = array(
 'vector-view-view' => 'Ανάγνωση',
 'vector-view-viewsource' => 'Εμφάνιση κώδικα',
 'actions' => 'Ενέργειες',
-'namespaces' => 'ΠεÏ\81ιοÏ\87έÏ\82 ονομάτων',
+'namespaces' => 'ΧÏ\8eÏ\81οι ονομάτων',
 'variants' => 'Παραλλαγές',
 
 'navigation-heading' => 'Μενού πλοήγησης',
@@ -535,9 +538,9 @@ $messages = array(
 'print' => 'Εκτύπωση',
 'view' => 'Προβολή',
 'edit' => 'Επεξεργασία',
-'create' => 'Î\94ημιοÏ\85Ï\81γήÏ\83Ï\84ε',
+'create' => 'Î\94ημιοÏ\85Ï\81γία',
 'editthispage' => 'Επεξεργασία αυτής της σελίδας',
-'create-this-page' => 'Î\94ημιοÏ\85Ï\81γήÏ\83Ï\84ε Î±Ï\85Ï\84ή Ï\84η Ï\83ελίδα',
+'create-this-page' => 'Î\94ημιοÏ\85Ï\81γία Î±Ï\85Ï\84ήÏ\82 Ï\84ηÏ\82 Ï\83ελίδαÏ\82',
 'delete' => 'Διαγραφή',
 'deletethispage' => 'Διαγραφή αυτής της σελίδας',
 'undelete_short' => 'Να αναστραφεί η διαγραφή {{PLURAL:$1|μιας επεξεργασίας|$1 επεξεργασιών}}.',
@@ -545,8 +548,8 @@ $messages = array(
 'protect' => 'Προστασία',
 'protect_change' => 'αλλαγή προστασίας',
 'protectthispage' => 'Κλείδωμα της σελίδας',
-'unprotect' => 'Î\86Ï\81Ï\83η προστασίας',
-'unprotectthispage' => 'Î\86Ï\81αÏ\84ε Ï\84ην Ï\80Ï\81οÏ\83Ï\84αÏ\83ία αυτής της σελίδας',
+'unprotect' => 'Î\91λλαγή προστασίας',
+'unprotectthispage' => 'Î\91λλαγή Ï\80Ï\81οÏ\83Ï\84αÏ\83ίαÏ\82 αυτής της σελίδας',
 'newpage' => 'Νέα σελίδα',
 'talkpage' => 'Συζήτηση για αυτή τη σελίδα',
 'talkpagelinktext' => 'Συζήτηση',
@@ -584,7 +587,7 @@ $1',
 '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) and the disambiguation template definition (see disambiguations).
-'aboutsite' => 'Σχετικά με τον ιστότοπο {{SITENAME}}',
+'aboutsite' => 'Σχετικά με {{SITENAME}}',
 'aboutpage' => 'Project:Σχετικά',
 'copyright' => 'Το περιεχόμενο είναι διαθέσιμο σύμφωνα με την $1.',
 'copyrightpage' => '{{ns:project}}:Πνευματικά Δικαιώματα',
@@ -629,7 +632,7 @@ $1',
 'toc' => 'Πίνακας περιεχομένων',
 'showtoc' => 'εμφάνιση',
 'hidetoc' => 'απόκρυψη',
-'collapsible-collapse' => 'Î\9aαÏ\84άÏ\81Ï\81εÏ\85Ï\83η',
+'collapsible-collapse' => 'ΣÏ\8dμÏ\80Ï\84Ï\85ξη',
 'collapsible-expand' => 'Ανάπτυξη',
 'thisisdeleted' => 'Εμφάνιση ή αποκατάσταση $1;',
 'viewdeleted' => 'Δείτε το $1;',
@@ -637,16 +640,16 @@ $1',
 'feedlinks' => 'Ροή δεδομένων:',
 'feed-invalid' => 'Άκυρος τύπος συνδρομής σε ροή δεδομένων.',
 'feed-unavailable' => 'Οι ροές δεδομένων δεν είναι διαθέσιμες',
-'site-rss-feed' => '$1 RSS Συνδρομή',
-'site-atom-feed' => '$1 Atom Συνδρομή',
-'page-rss-feed' => '"$1" RSS Συνδρομή',
-'page-atom-feed' => '"$1" Atom Συνδρομή',
+'site-rss-feed' => '$1 ροή RSS',
+'site-atom-feed' => '$1 ροή Atom',
+'page-rss-feed' => '«$1» ροή RSS',
+'page-atom-feed' => '«$1» ροή Atom',
 'red-link-title' => '$1 (η σελίδα δεν υπάρχει)',
 'sort-descending' => 'Φθίνουσα ταξινόμηση',
 'sort-ascending' => 'Αύξουσα ταξινόμηση',
 
 # Short words for each namespace, by default used in the namespace tab in monobook
-'nstab-main' => 'Î\86Ï\81θÏ\81ο',
+'nstab-main' => 'Σελίδα',
 'nstab-user' => 'Σελίδα χρήστη',
 'nstab-media' => 'Ηλεκτρονικά μέσα',
 'nstab-special' => 'Ειδική σελίδα',
@@ -707,11 +710,13 @@ $1',
 'unexpected' => 'Μη προσδοκώμενη τιμή: "$1"="$2"',
 'formerror' => 'Σφάλμα: Δεν ήταν δυνατή η υποβολή της φόρμας!',
 'badarticleerror' => 'Η ενέργεια αυτή δεν μπορεί να εκτελεσθεί στη συγκεκριμένη σελίδα.',
-'cannotdelete' => 'Η σελίδα ή αρχείο "$1" δεν μπόρεσε να διαγραφεί.
\95νδεÏ\87ομένÏ\89Ï\82 Î½Î± Î­Ï\87ει Î®Î´Î· Î´Î¹Î±Î³Ï\81αÏ\86εί Î±Ï\80Ï\8c Î¬Î»Î»Î¿ Ï\87Ï\81ήÏ\83Ï\84η.',
+'cannotdelete' => 'Η σελίδα ή το αρχείο «$1» δεν μπόρεσε να διαγραφεί.
\95νδεÏ\87ομένÏ\89Ï\82 Î½Î± Î­Ï\87ει Î®Î´Î· Î´Î¹Î±Î³Ï\81αÏ\86εί Î±Ï\80Ï\8c ÎºÎ¬Ï\80οιον Î¬Î»Î»Î¿Î½.',
 'cannotdelete-title' => 'Αδύνατη η διαγραφή της σελίδας "$1"',
+'delete-hook-aborted' => 'Η επεξεργασία ματαιώθηκε από το άγκιστρο του συντακτικού αναλυτή.
+Δεν έδωσε εξήγηση.',
 'badtitle' => 'Ακατάλληλος τίτλος',
-'badtitletext' => 'Î\9f Ï\84ίÏ\84λοÏ\82 Ï\84ηÏ\82 Ï\83ελίδαÏ\82 Ï\80οÏ\85 Î¶Î·Ï\84ήÏ\83αÏ\84ε ÎµÎ¯Î½Î±Î¹ Î¬ÎºÏ\85Ï\81οÏ\82 Î® ÎºÎµÎ½Ï\8cÏ\82 Î® Ï\80Ï\81Ï\8cκειÏ\84αι Î³Î¹Î± Î­Î½Î±Î½ ÎµÏ\83Ï\86αλμένα Ï\83Ï\85νδεδεμένο Î´Î¹Î±Î³Î»Ï\89Ï\83Ï\83ικÏ\8c Ï\84ίÏ\84λο (ή ÎµÏ\83Ï\86αλμένα Ï\83Ï\85νδεδεμένο Ï\84ίÏ\84λο Î±Î½Î¬Î¼ÎµÏ\83α Ï\83ε Î´Î¹Î±Ï\86οÏ\81εÏ\84ικά Wiki).',
+'badtitletext' => 'Î\9f Ï\84ίÏ\84λοÏ\82 Ï\84ηÏ\82 Ï\83ελίδαÏ\82 Ï\80οÏ\85 Î¶Î·Ï\84ήÏ\83αÏ\84ε Î´ÎµÎ½ ÎµÎ¯Î½Î±Î¹ Î­Î³ÎºÏ\85Ï\81οÏ\82 Î® ÎµÎ¯Î½Î±Î¹ ÎºÎµÎ½Ï\8cÏ\82 Î® Ï\80Ï\81Ï\8cκειÏ\84αι Î³Î¹Î± Î­Î½Î±Î½ ÎµÏ\83Ï\86αλμένα Ï\83Ï\85νδεδεμένο Î´Î¹Î±Î³Î»Ï\89Ï\83Ï\83ικÏ\8c Ï\84ίÏ\84λο Î® ÎµÏ\83Ï\86αλμένα Ï\83Ï\85νδεδεμένο Ï\84ίÏ\84λο Î±Î½Î¬Î¼ÎµÏ\83α Ï\83ε Î´Î¹Î±Ï\86οÏ\81εÏ\84ικά wiki.',
 'perfcached' => 'Τα δεδομένα που ακολουθούν είναι cached και είναι πιθανόν να μην είναι επικαιροποιημένα. Ένα μέγιστο των  {{PLURAL:$1|one result is|$1 results are}} διαθέσιμο στην cache.',
 'perfcachedts' => 'Τα ακόλουθα δεδομένα είναι αποθηκευμένα στη μνήμη και ενημερώθηκαν τελευταία στις $1. Το μέγιστο {{PLURAL:$4|ενός αποτελέσματος είναι διαθέσιμο|$4 αποτελεσμάτων είναι διαθέσιμα}} στη μνήμη.',
 'querypage-no-updates' => 'Οι ενημερώσεις για αυτή τη σελίδα είναι απενεργοποιημένες. Τα δεδομένα εδώ δεν θα ανανεωθούν προς το παρόν.',
@@ -721,8 +726,9 @@ $1',
 'viewsource' => 'Εμφάνιση κώδικα',
 'viewsource-title' => 'Προβολή πηγής για $1',
 'actionthrottled' => 'Περιορισμένη ενέργεια',
-'actionthrottledtext' => 'Σαν μέτρο anti-spam, περιορίζεται η πολλαπλή επανάληψη αυτής της ενέργειας σε μικρό χρονικό διάστημα. Ξεπεράσατε αυτό το όριο. Παρακαλούμε δοκιμάστε ξανά σε λίγα λεπτά.',
-'protectedpagetext' => 'Αυτή η σελίδα έχει κλειδωθεί για αποτροπή επεξεργασίας της.',
+'actionthrottledtext' => 'Σαν μέτρο κατά του spam, υπάρχει όριο στην εκτέλεση αυτής της ενέργειας πολλές φορές μέσα σε μικρό χρονικό διάστημα και έχετε ξεπεράσει αυτό το όριο.
+Παρακαλούμε δοκιμάστε ξανά σε λίγα λεπτά.',
+'protectedpagetext' => 'Αυτή η σελίδα έχει προστατευθεί για πρόληψη επεξεργασίας ή άλλες ενέργειες.',
 'viewsourcetext' => 'Μπορείτε να δείτε και να αντιγράψετε τον κώδικα αυτής της σελίδας:',
 'viewyourtext' => "Μπορείτε να προβάλετε και να αντιγράψετε τον κώδικα των '''επεξεργασιών σας''' σε αυτήν τη σελίδα:",
 'protectedinterface' => 'Αυτή η σελίδα παρέχει κείμενο διεπαφής για το λογισμικό σε αυτό το wiki, και έχει κλειδωθεί για αποτροπή τυχόν βανδαλισμού.
@@ -730,7 +736,7 @@ $1',
 Για να προσθέσετε ή να αλλάξετε τις μεταφράσεις για όλα τα wikis, παρακαλούμε χρησιμοποιήστε  [//translatewiki.net/ translatewiki.net], το εγχείρημα τοπικοποίησης του  MediaWiki.',
 'editinginterface' => "'''Προσοχή:''' Επεξεργάζεστε μια σελίδα η οποία χρησιμοποιείται για να παρέχει κείμενο διεπαφής για το λογισμικό. Αλλαγές σε αυτή τη σελίδα θα επηρεάσουν την εμφάνιση της διεπαφής χρήστη για τους άλλους χρήστες. Εάν θέλετε να διορθώσετε τη μετάφραση, μπορείτε να χρησιμοποιήσετε το [//translatewiki.net/ translatewiki.net], το εγχείρημα για με τις μεταφράσεις των μηνυμάτων MediaWiki.",
 'sqlhidden' => '(το αίτημα SQL δεν εμφανίζεται)',
-'cascadeprotected' => 'Αυτή η σελίδα έχει προστατευθεί από επεξεργασία, επειδή περιλαμβάνεται στις ακόλουθες {{PLURAL:$1|σελίδα|σελίδες}}, που είναι προστατευμένες με την ενεργοποιημένη "διαδοχική" προστασία στο:
+'cascadeprotected' => 'Αυτή η σελίδα έχει προστατευθεί από επεξεργασία, επειδή περιλαμβάνεται {{PLURAL:$1|στην ακόλουθη σελίδα, που είναι προστατευμένη|στις ακόλουθες σελίδες, που είναι προστατευμένες}} με ενεργοποιημένη τη «διαδοχική» προστασία στο:
 $2',
 'namespaceprotected' => "Δεν έχετε άδεια να επεξεργάζεστε σελίδες στον τομέα '''$1'''.",
 'customcssprotected' => 'Δεν έχετε δικαιώματα για να επεξεργαστείτε αυτή τη σελίδα CSS, επειδή περιέχει προσωπικές ρυθμίσεις άλλου χρήστη.',
@@ -741,6 +747,8 @@ $2',
 'filereadonlyerror' => 'Δεν είναι δυνατή η τροποποίηση του αρχείου " $1 " επειδή το αποθετήριο αρχείων " $2 " είναι σε κατάσταση λειτουργίας μόνο για ανάγνωση.
 
 Ο διαχειριστής που το κλείδωσε προσφέρει αυτή την αιτιολόγηση: " $3 ".',
+'invalidtitle-knownnamespace' => 'Μη έγκυρος τίτλος με χώρο ονομάτων «$2» και κείμενο «$3»',
+'invalidtitle-unknownnamespace' => 'Μη έγκυρος τίτλος με άγνωστο αριθμό χώρου ονομάτων $1 και κείμενο «$2»',
 'exception-nologin' => 'Δεν έχετε συνδεθεί.',
 'exception-nologin-text' => 'Αυτή η σελίδα ή η ενέργεια απαιτεί να είστε {{GENDER:|συνδεμένος|συνδεμένη}} στο wiki.',
 
@@ -779,7 +787,7 @@ $2',
 'gotaccount' => "Έχετε ήδη έναν λογαριασμό; '''$1'''.",
 'gotaccountlink' => 'Είσοδος',
 'userlogin-resetlink' => 'Ξεχάσατε τα στοιχεία σύνδεσής σας;',
-'createaccountmail' => 'Î\9cε Î·Î»ÎµÎºÏ\84Ï\81ονικÏ\8c Ï\84αÏ\87Ï\85δÏ\81ομείο',
+'createaccountmail' => 'ΧÏ\81ήÏ\83η Ï\84Ï\85Ï\87αίοÏ\85 Ï\80Ï\81οÏ\83Ï\89Ï\81ινοÏ\8d ÎºÏ\89δικοÏ\8d Ï\80Ï\81Ï\8cÏ\83βαÏ\83ηÏ\82 ÎºÎ±Î¹ Î±Ï\80οÏ\83Ï\84ολή Ï\84οÏ\85 Ï\83Ï\84η Î´Î¹ÎµÏ\8dθÏ\85νÏ\83η Î·Î»ÎµÎºÏ\84Ï\81ονικοÏ\8d Ï\84αÏ\87Ï\85δÏ\81ομείοÏ\85 Ï\80οÏ\85 ÎºÎ±Î¸Î¿Ï\81ίζεÏ\84αι Ï\80αÏ\81ακάÏ\84Ï\89',
 'createaccountreason' => 'Αιτία:',
 'badretype' => 'Οι κωδικοί που έχετε δηλώσει δεν συμφωνούν μεταξύ τους.',
 'userexists' => 'Το όνομα χρήστη που εισαγάγατε βρίσκεται ήδη σε χρήση.
@@ -821,7 +829,7 @@ $2',
 'mailerror' => 'Σφάλμα στην αποστολή του μηνύματος: $1',
 'acct_creation_throttle_hit' => 'Επισκέπτες αυτού του wiki με την διεύθυνση IP σας έχουν ήδη δημιουργήσει {{PLURAL:$1|ένα λογαριασμό|$1 λογαριασμούς}}, κατά την τελευταία μία ημέρα, που είναι και ο μέγιστος επιτρεπόμενος αριθμός.
 Ως αποτέλεσμα, επισκέπτες αυτού του wiki με αυτήν την διεύθυνση IP δεν μπορούν αυτή την στιγμή να δημιουργήσουν περισσότερους λογαριασμούς.',
-'emailauthenticated' => 'Î\97 Î·Î»ÎµÎºÏ\84Ï\81ονική Ï\83αÏ\82 Î´Î¹ÎµÏ\8dθÏ\85νÏ\83η ÎµÏ\80ιβεβαιÏ\8eθηκε Ï\83Ï\84ιÏ\82 $2, Ï\8eÏ\81α $3.',
+'emailauthenticated' => 'Î\97 Î·Î»ÎµÎºÏ\84Ï\81ονική Ï\83αÏ\82 Î´Î¹ÎµÏ\8dθÏ\85νÏ\83η ÎµÏ\80ιβεβαιÏ\8eθηκε Ï\83Ï\84ιÏ\82 $2, Ï\83Ï\84ιÏ\82 $3.',
 'emailnotauthenticated' => 'Η ηλεκτρονική σας διεύθυνση δεν έχει επαληθευτεί ακόμα.
 Κανένα μήνυμα ηλεκτρονικού ταχυδρομείου δεν θα σταλεί για τις ακόλουθες λειτουργίες.',
 'noemailprefs' => 'Δεν έχει ορισθεί ηλεκτρονική διεύθυνση, οι λειτουργίες που ακολουθούν δεν θα είναι δυνατόν να ολοκληρωθούν.',
@@ -843,7 +851,7 @@ $2',
 'suspicious-userlogout' => 'Το αίτημα αποσύνδεσής σας απερρίφθη επειδή φαίνεται ότι στάλθηκε από ένα λανθασμένο φυλλομετρητή (browser) ή διακομιστή προσωρινής αποθήκευσης.',
 
 # E-mail sending
-'php-mail-error-unknown' => 'Άγνωστο σφάλμα στη συνάρτηση της PHP mail()',
+'php-mail-error-unknown' => 'Άγνωστο σφάλμα στη συνάρτηση mail() της PHP.',
 'user-mail-no-addy' => 'Προσπαθήσατε να στείλετε e-mail χωρίς μια διεύθυνση e-mail.',
 
 # Change password dialog
@@ -890,9 +898,9 @@ $2
 Θα πρέπει να συνδεθείτε τώρα και να επιλέξετε ένα νέο κωδικό. Αν κάποιος άλλος έκανε αυτό το αίτημα ή αν έχετε θυμηθεί τον αρχικό κωδικό πρόσβασής σας, και δεν επιθυμείτε πια να τον αλλάξετε, μπορείτε να αγνοήσετε αυτό το μήνυμα και να συνεχίσετε να χρησιμοποιείτε τον παλιό σας κωδικό πρόσβασης.',
 'passwordreset-emailelement' => 'Όνομα χρήστη: $1
 Προσωρινός κωδικός πρόσβασης:$2',
-'passwordreset-emailsent' => 'Ένα e-mail υπενθύμισης έχει σταλεί.',
-'passwordreset-emailsent-capture' => 'Ένα μήνυμα υπενθύμισης ηλεκτρονικού ταχυδρομείου έχει αποσταλεί, το οποίο φαίνεται πιο κάτω.',
-'passwordreset-emailerror-capture' => 'Ένα μήνυμα υπενθύμισης ηλεκτρονικού ταχυδρομείου έχει δημιουργηθεί, το οποίο φαίνεται πιο κάτω, αλλά απέτυχε η αποστολή του στο χρήστη $1.',
+'passwordreset-emailsent' => 'Έχει αποσταλεί μήνυμα ηλεκτρονικού ταχυδρομείου για υπενθύμιση.',
+'passwordreset-emailsent-capture' => 'Έχει αποσταλεί μήνυμα ηλεκτρονικού ταχυδρομείου για υπενθύμιση, το οποίο φαίνεται πιο κάτω.',
+'passwordreset-emailerror-capture' => 'Ένα μήνυμα υπενθύμισης ηλεκτρονικού ταχυδρομείου έχει δημιουργηθεί, το οποίο φαίνεται πιο κάτω, αλλά απέτυχε η αποστολή του στο χρήστη: $1',
 
 # Special:ChangeEmail
 'changeemail' => 'Αλλαγή της διεύθυνσης ηλεκτρονικού ταχυδρομείου',
@@ -902,6 +910,7 @@ $2
 'changeemail-oldemail' => 'Τρέχουσα διεύθυνση ηλεκτρονικού ταχυδρομείου:',
 'changeemail-newemail' => 'Νέα διεύθυνση ηλεκτρονικού ταχυδρομείου:',
 'changeemail-none' => '(κανένα)',
+'changeemail-password' => 'Ο κωδικός πρόσβασής σας στο εγχείρημα {{SITENAME}}:',
 'changeemail-submit' => 'Αλλαγή διεύθυνσης ηλεκτρονικού ταχυδρομείου',
 'changeemail-cancel' => 'Ακύρωση',
 
@@ -916,8 +925,8 @@ $2
 'extlink_tip' => 'Εξωτερικός σύνδεσμος (μην ξεχάστε το πρόθεμα http:// )',
 'headline_sample' => 'Κείμενο τίτλου',
 'headline_tip' => 'Δεύτερος τίτλος (επίπεδο 2)',
-'nowiki_sample' => 'Î\95ιÏ\83άγεÏ\84ε ÎµÎ´Ï\8e Ï\84ο Î¼Î· Î¼Î¿Ï\81Ï\86οÏ\80οιημένο ÎºÎµÎ¯Î¼ÎµÎ½Î¿.',
-'nowiki_tip' => 'Να αγνοηθεί η μορφοποίηση Wiki.',
+'nowiki_sample' => 'Î\95ιÏ\83αγÏ\89γή Î¼Î· Î¼Î¿Ï\81Ï\86οÏ\80οιημένοÏ\85 ÎºÎµÎ¹Î¼Î­Î½Î¿Ï\85 ÎµÎ´Ï\8e',
+'nowiki_tip' => 'Να αγνοηθεί η μορφοποίηση wiki',
 'image_sample' => 'paradeigma.jpg',
 'image_tip' => 'Ενσωματωμένη εικόνα',
 'media_sample' => 'paradeigma.ogg',
@@ -993,14 +1002,18 @@ $2
 'noarticletext-nopermission' => 'Δεν υπάρχει κείμενο σε αυτή τη σελίδα αυτή τη στιγμή.
 Μπορείτε να [[Special:Search/{{PAGENAME}}|αναζητήσετε αυτόν τον τίτλο σελίδας]] σε άλλες σελίδες,
 ή <span class="plainlinks">[{{fullurl:{{#Special:Log}}|page={{FULLPAGENAMEE}}}} να αναζητήσετε τα σχετικά αρχεία]</span>, αλλά δεν έχεις την άδεια να δημιουργήσεις αυτή τη σελίδα.',
+'missing-revision' => 'Δεν υπάρχει αναθεώρηση με αριθμό $1 για τη σελίδα με όνομα «{{PAGENAME}}».
+
+Αυτό συνήθως προκαλείται από παλιό σύνδεσμο ιστορικού προς σελίδα που έχει διαγραφεί.
+Λεπτομέρειες θα βρείτε στο [{{fullurl:{{#Special:Log}}/delete|page={{FULLPAGENAMEE}}}} ημερολόγιο καταγραφής διαγραφών].',
 'userpage-userdoesnotexist' => 'Ο Λογαριασμός του χρήστη "<nowiki>$1</nowiki>" δεν είναι καταχωρημένος. Παρακαλώ δείτε αν θα θέλατε να δημιουργήσετε/επεξεργαστείτε αυτή τη σελίδα.',
 'userpage-userdoesnotexist-view' => 'Ο λογαριασμός χρήστη "$1" δεν είναι εγγεγραμμένος.',
 'blocked-notice-logextract' => 'Επί του παρόντος, αυτός ο χρήστης έχει υποστεί φραγή. Παρακάτω παρέχεται για αναφορά η πιο πρόσφατη καταχώρηση του αρχείου φραγών.',
-'clearyourcache' => "''' Î£Î·Î¼ÎµÎ¯Ï\89Ï\83η:''' Î¼ÎµÏ\84ά Ï\84ην Î±Ï\80οθήκεÏ\85Ï\83η, Î¯Ï\83Ï\89Ï\82 Ï\87Ï\81ειαÏ\83Ï\84εί Î½Î± Ï\80αÏ\81ακάμÏ\88εÏ\84ε Ï\84ο Ï\87Ï\8eÏ\81ο Ï\80Ï\81οÏ\83Ï\89Ï\81ινήÏ\82 Î±Ï\80οθήκεÏ\85Ï\83ηÏ\82 του προγράμματος περιήγησής σας για να δείτε τις αλλαγές.
- * '''Firefox / Safari:''' Κρατήστε ''Shift'' κάνοντας κλικ στο κουμπί ''Ανανέωση'' ή πατήστε ''Ctrl-F5'' ή ''Ctrl-R'' ('' ⌘-R'' σε Mac)
- * '''Google Chrome:''' Πιέστε τα πλήκτρα ''Ctrl-Shift-R'' (''⌘-Shift-R'' σε Mac)
- * '''Internet Explorer:''' Κρατήστε ''Ctrl'' κάνοντας κλικ στην επιλογή ''Ανανέωση'', ή πατήστε ''Ctrl-F5'' 
- * '''Opera:''' Εκκαθαρίστε την προσωρινή μνήμη στο ''Εργαλεία → Προτιμήσεις''",
+'clearyourcache' => "''' Î£Î·Î¼ÎµÎ¯Ï\89Ï\83η:''' Î¼ÎµÏ\84ά Ï\84ην Î±Ï\80οθήκεÏ\85Ï\83η, Î¯Ï\83Ï\89Ï\82 Ï\87Ï\81ειαÏ\83Ï\84εί Î½Î± Ï\80αÏ\81ακάμÏ\88εÏ\84ε Ï\84ην Ï\80Ï\81οÏ\83Ï\89Ï\81ινή Î¼Î½Î®Î¼Î· του προγράμματος περιήγησής σας για να δείτε τις αλλαγές.
+ * '''Firefox / Safari:''' Κρατήστε πατημένο το ''Shift'' κάνοντας ταυτόχρονα κλικ στο κουμπί ''Ανανέωση'' ή πιέστε ''Ctrl-F5'' ή ''Ctrl-R'' ('' ⌘-R'' σε Mac)
+ * '''Google Chrome:''' Πιέστε ''Ctrl-Shift-R'' (''⌘-Shift-R'' σε Mac)
+ * '''Internet Explorer:''' Κρατήστε πατημένο το ''Ctrl'' κάνοντας ταυτόχρονα κλικ στο κουμπί ''Ανανέωση'', ή πιέστε ''Ctrl-F5'' 
+ * '''Opera:''' Εκκαθαρίστε την προσωρινή μνήμη από το μενού ''Εργαλεία → Προτιμήσεις''",
 'usercssyoucanpreview' => "'''Χρήσιμη συμβουλή:''' Χρησιμοποιήστε το κουμπί \"{{int:showpreview}}\" για να ελέγξτε τα νέα σας CSS πριν τα αποθηκεύσετε.",
 'userjsyoucanpreview' => "'''Χρήσιμη συμβουλή:''' Χρησιμοποιήστε το κουμπί \"{{int:showpreview}}\" για να ελέγξτε τη νέα σας JS πριν την αποθηκεύσετε.",
 'usercsspreview' => "'''Σας υπενθυμίζουμε ότι κάνετε απλώς έλεγχο/προεπισκόπηση του CSS του χρήστη -δεν το έχετε ακόμα αποθηκεύσει! '''",
@@ -1038,8 +1051,8 @@ $2
 '''Μόνο''' το επάνω τμήμα θα αποθηκευθεί όταν πατήσετε \"{{int:savearticle}}\".",
 'yourtext' => 'Το κείμενό σας',
 'storedversion' => 'Αποθηκευμένη έκδοση',
-'nonunicodebrowser' => "'''ΠΡÎ\9fΣÎ\9fΧÎ\97! Î\9f Ï\86Ï\85λλομεÏ\84Ï\81ηÏ\84ήÏ\82 Ï\83αÏ\82 Î´ÎµÎ½ ÎµÎ¯Î½Î±Î¹ Ï\83Ï\85μβαÏ\84Ï\8cÏ\82 Î¼Îµ Ï\84ο unicode.'''
\9cία Ï\80Ï\81οÏ\83Ï\89Ï\81ινή Î»Ï\8dÏ\83η Î´Î¹Î±Ï\84ίθεÏ\84αι Î³Î¹Î± Î½Î± Î¼Ï\80οÏ\81έÏ\83εÏ\84ε Î½Î± ÎµÏ\80εξεÏ\81γαÏ\83Ï\84είÏ\84ε Ï\83ελίδεÏ\82 Î¼Îµ Î±Ï\83Ï\86άλεια: Î¼Î·-ASCII Ï\87αÏ\81ακÏ\84ήÏ\81εÏ\82 θα φαίνονται στο πλαίσιο επεξεργασίας ως δεκαεξαδικοί κωδικοί.",
+'nonunicodebrowser' => "'''ΠΡÎ\9fΣÎ\9fΧÎ\97! Î\9f Ï\80εÏ\81ιηγηÏ\84ήÏ\82 Ï\83αÏ\82 Î´ÎµÎ½ ÎµÎ¯Î½Î±Î¹ Ï\83Ï\85μβαÏ\84Ï\8cÏ\82 Î¼Îµ ÎºÏ\89δικοÏ\80οίηÏ\83η Unicode.'''
\93ια Ï\84ην Î±Ï\83Ï\86αλή ÎµÏ\80εξεÏ\81γαÏ\83ία Ï\84Ï\89ν Ï\83ελίδÏ\89ν Î­Ï\87ει Î²Ï\81εθεί Î­Î½Î±Ï\82 ÎµÎ½Î±Î»Î»Î±ÎºÏ\84ικÏ\8cÏ\82 Ï\84Ï\81Ï\8cÏ\80οÏ\82: Î\8cÏ\83οι Ï\87αÏ\81ακÏ\84ήÏ\81εÏ\82 Î´ÎµÎ½ ÎµÎ¯Î½Î±Î¹ ASCII θα φαίνονται στο πλαίσιο επεξεργασίας ως δεκαεξαδικοί κωδικοί.",
 'editingold' => "'''Προειδοποίηση: Επεξεργάζεστε μια παλιότερη αναθεώρηση αυτής της σελίδας.'''
 Αν την αποθηκεύσετε, όσες αλλαγές έχουν γίνει μετά από αυτή την αναθεώρηση θα χαθούν.",
 'yourdiff' => 'Διαφορές',
@@ -1052,7 +1065,8 @@ $2
 '''ΠΑΡΑΚΑΛΟΥΜΕ ΝΑ ΜΗΝ ΤΟΠΟΘΕΤΕΙΤΕ ΠΝΕΥΜΑΤΙΚΑ ΚΑΤΟΧΥΡΩΜΕΝΟ ΕΡΓΟ ΧΩΡΙΣ ΑΔΕΙΑ!'''",
 'longpageerror' => "'''Σφάλμα: Το κείμενο που καταχωρήσατε έχει μήκος {{PLURAL:$1|ένα kilobyte|$1 kilobytes}}, το οποίο είναι μεγαλύτερο από το μέγιστο {{PLURAL:$2|του ενός kilobyte|των $2 kilobytes}}.'''
 Δεν μπορεί να αποθηκευτεί.",
-'readonlywarning' => "'''ΠΡΟΕΙΔΟΠΟΙΗΣΗ: Η βάση δεδομένων έχει κλειδωθεί για συντήρηση, έτσι δεν θα μπορέσετε να αποθηκεύσετε αυτά που έχετε επεξεργαστεί. Μπορείτε αν θέλετε να αποθηκεύσετε το κείμενο σε αρχείο κειμένου (με αποκοπή-και-επικόλληση) για να το χρησιμοποιήσετε αργότερα.'''
+'readonlywarning' => "'''Προειδοποίηση: Η βάση δεδομένων έχει κλειδωθεί για συντήρηση, έτσι δεν θα μπορέσετε να αποθηκεύσετε τις επεξεργασίες σας αυτή τη στιγμή.'''
+Μπορείτε αν θέλετε να μεταφέρετε με αντιγραφή-επικόλληση το κείμενό σας σε αρχείο κειμένου και να το αποθηκεύσετε για αργότερα.
 
 Ο διαχειριστής που την κλείδωσε έδωσε την εξής εξήγηση: $1",
 'protectedpagewarning' => "'''Προειδοποίηση: Αυτή η σελίδα έχει κλειδωθεί ώστε μόνο χρήστες με δικαιώματα διαχειριστή μπορούν να την επεξεργαστούν.'''
@@ -1069,7 +1083,6 @@ $2
 'template-semiprotected' => '(ημιπροστατευμένη)',
 'hiddencategories' => 'Αυτή η σελίδα είναι μέλος {{PLURAL:$1|μίας κρυμμένης κατηγορίας|$1 κρυμμένων κατηγοριών}}',
 'edittools' => '<!-- Το κείμενο εδώ θα φαίνεται κάτω από τις φόρμες επεξεργασίας και επιφόρτωσης. -->',
-'nocreatetitle' => 'Περιορισμένη δημιουργία σελίδων',
 'nocreatetext' => 'Το {{SITENAME}} έχει περιορίσει την ικανότητα δημιουργίας νέων σελίδων.
 Μπορείτε να πάτε πίσω και να επεξεργαστείτε μια υπάρχουσα σελίδα, ή να [[Special:UserLogin|συνδεθείτε ή να δημιουργήσετε ένα λογαριασμό]].',
 'nocreate-loggedin' => 'Δεν έχετε άδεια να δημιουργήσετε νέες σελίδες.',
@@ -1095,6 +1108,7 @@ $2
 Υπάρχει ήδη.',
 'defaultmessagetext' => 'Προεπιλεγμένο κείμενο μηνύματος',
 'invalid-content-data' => 'Μη έγκυρα δεδομένα περιεχομένου',
+'content-not-allowed-here' => 'Το περιεχόμενο «$1» δεν επιτρέπεται στη σελίδα [[$2]]',
 
 # Content models
 'content-model-wikitext' => 'βικικείμενο',
@@ -1116,6 +1130,7 @@ $2
 'parser-template-loop-warning' => 'Εντοπίστηκε πρότυπο σε βρόχο: [[$1]]',
 'parser-template-recursion-depth-warning' => 'Το όριο του μάκρους της αναδρομής του πρότυπου έχει ξεπεραστεί ($1)',
 'language-converter-depth-warning' => 'Το όριο βάθους του μετατροπέα γλώσσας έχει ξεπεραστεί ($1)',
+'converter-manual-rule-error' => 'Εντοπίστηκε σφάλμα σε μη αυτόματο κανόνα μετατροπής γλώσσας',
 
 # "Undo" feature
 'undo-success' => 'Η επεξεργασία μπορεί να αναστραφεί. Παρακαλώ ελέγξτε την σύγκριση παρακάτω για να επιβεβαιώσετε ότι αυτό είναι το οποίο θέλετε να κάνετε, και έπειτα αποθηκεύστε τις αλλαγές παρακάτω για να τελειώσετε την αναστροφή της επεξεργασίας.',
@@ -1302,6 +1317,10 @@ $1",
 'editundo' => 'αναίρεση',
 'diff-multi' => '({{PLURAL:$1|Μία ενδιάμεση αναθεώρηση|$1 ενδιάμεσες αναθεωρήσεις}} από {{PLURAL:$2|ένα χρήστη|$2 χρήστες}} δεν {{PLURAL:$1|εμφανίζεται|εμφανίζονται}})',
 'diff-multi-manyusers' => '({{PLURAL:$1|Μία ενδιάμεση αναθεώρηση|$1 ενδιάμεσες αναθεωρήσεις}} από περισσότερο από $2 {{PLURAL:$2|χρήστη|χρήστες}} δεν εμφανίζ{{PLURAL:$1|εται|ονται}})',
+'difference-missing-revision' => '{{PLURAL:$2|Μία αναθεώρηση|$2 αναθεωρήσεις}} αυτής της διαφοράς ($1) δεν {{PLURAL:$2|μπόρεσε να βρεθεί|μπόρεσαν να βρεθούν}}.
+
+Αυτό συνήθως προκαλείται από παλιό σύνδεσμο διαφοράς προς σελίδα που έχει διαγραφεί.
+Λεπτομέρειες θα βρείτε στο [{{fullurl:{{#Special:Log}}/delete|page={{FULLPAGENAMEE}}}} ημερολόγιο καταγραφής διαγραφών].',
 
 # Search results
 'searchresults' => 'Αποτελέσματα αναζήτησης',
@@ -1322,7 +1341,7 @@ $1",
 'viewprevnext' => 'Εμφάνιση ($1 {{int:pipe-separator}} $2) ($3).',
 'searchmenu-legend' => 'Επιλογές αναζήτησης',
 'searchmenu-exists' => "'''Υπάρχει μια σελίδα που ονομάζεται \"[[:\$1]]\" σε αυτό το wiki'''",
-'searchmenu-new' => "'''Δημιουργήστε τη σελίδα \"[[:\$1]]\" σε αυτό το wiki!'''",
+'searchmenu-new' => "'''Δημιουργήστε τη σελίδα «[[:$1]]» σε αυτό το wiki!'''",
 'searchhelp-url' => 'Help:Περιεχόμενα',
 'searchmenu-prefix' => '[[Special:PrefixIndex/$1|Πλοηγηθείτε σε σελίδες με αυτό το πρόθεμα]]',
 'searchprofile-articles' => 'Σελίδες περιεχομένων',
@@ -1398,7 +1417,7 @@ $1",
 'prefs-watchlist-token' => 'Σημείο λίστας παρακολούθησης:',
 'prefs-misc' => 'Διάφορες ρυθμίσεις',
 'prefs-resetpass' => 'Αλλαγή κωδικού',
-'prefs-changeemail' => 'Î\91λλαγή Î·Î»ÎµÎºÏ\84Ï\81ονικοÏ\8d Î¼Î·Î½Ï\8dμαÏ\84οÏ\82',
+'prefs-changeemail' => 'Î\91λλαγή Î´Î¹ÎµÏ\8dθÏ\85νÏ\83ηÏ\82 Î·Î»ÎµÎºÏ\84Ï\81ονικοÏ\8d Ï\84αÏ\87Ï\85δÏ\81ομείοÏ\85',
 'prefs-setemail' => 'Ορίστε μια διεύθυνση ηλεκτρονικού ταχυδρομείου',
 'prefs-email' => 'Επιλογές e-mail',
 'prefs-rendering' => 'Εμφάνιση',
@@ -1564,6 +1583,7 @@ $1",
 'right-writeapi' => 'Χρήση του API για επεξεργασία',
 'right-delete' => 'Διαγραφή σελίδων',
 'right-bigdelete' => 'Διαγραφή σελίδων με εκτεταμένο ιστορικό',
+'right-deletelogentry' => 'Διαγραφή και επαναφορά διαγραφής συγκεκριμένων καταχωρήσεων στη λίστα καταγραφών',
 'right-deleterevision' => 'Διαγραφή και επαναφορά συγκεκριμένων εκδόσεων σελίδων',
 'right-deletedhistory' => 'Προβολή διαγραμμένων εκδόσεων του ιστορικού, χωρίς το σχετικό κείμενο',
 'right-deletedtext' => 'Εμφάνιση διεγραμμένου κειμένου και αλλαγών ανάμεσα στις διεγραμμένες εκδόσεις',
@@ -1600,14 +1620,13 @@ $1",
 'right-sendemail' => 'Αποστολή ηλεκτρονικού μηνύματος σε άλλους χρήστες',
 'right-passwordreset' => 'Εμφάνιση email επαναφοράς κωδικού πρόσβασης',
 
+# Special:Log/newusers
+'newuserlogpage' => 'Αρχείο δημιουργίας χρηστών',
+'newuserlogpagetext' => 'Αυτή είναι μια καταγραφή δημιουργίας χρηστών.',
+
 # User rights log
 'rightslog' => 'Αρχείο καταγραφών δικαιωμάτων χρηστών',
 'rightslogtext' => 'Καταγραφές των αλλαγών στα δικαιώματα χρηστών.',
-'rightslogentry' => 'η ιδιότητα μέλους ομάδας για τον/την $1 από $2 σε $3 άλλαξε',
-'rightslogentry-autopromote' => 'προωθήθηκε αυτόματα από $2 σε $3',
-'logentry-rights-rights-legacy' => '{{GENDER:$1|Ο|Η}} $1 άλλαξε την ιδιότητα μέλους ομάδας {{GENDER:$1|του|της}} $3',
-'logentry-rights-autopromote' => '$1 προωθήθηκε αυτόματα από το $4 στο $5',
-'rightsnone' => '(κανένα)',
 
 # Associated actions - in the sentence "You do not have permission to X"
 'action-read' => 'να διαβάσετε αυτή τη σελίδα',
@@ -1855,6 +1874,7 @@ $1',
 'backend-fail-closetemp' => 'Αδύνατο το κλείσιμο προσωρινού αρχείου.',
 'backend-fail-read' => 'Αδύνατη η ανάγνωση αρχείου $1.',
 'backend-fail-create' => 'Αδύνατη η δημιουργία αρχείου $1.',
+'backend-fail-maxsize' => 'Δεν ήταν δυνατή η εγγραφή του αρχείου «$1» γιατί είναι μεγαλύτερο από {{PLURAL:$2|ένα byte|$2 bytes}}.',
 'backend-fail-readonly' => 'Το αντικείμενο αποθήκευσης "$1" αυτή τη στιγμή είναι μόνο για ανάγνωση. Η αιτία που δόθηκε ήταν: "$2"',
 'backend-fail-synced' => 'Το αρχείο "$1" είναι σε κατάσταση ασυνέπειας εντός του εσωτερικού χώρου αποθήκευσης',
 'backend-fail-connect' => 'Δεν ήταν δυνατή η σύνδεση στο αντικείμενο αποθήκευσης "$1".',
@@ -1865,6 +1885,8 @@ $1',
 # Lock manager
 'lockmanager-notlocked' => 'Δεν μπορέσατε να  ξεκλειδώσετε το " $1 ". Δεν είναι κλειδωμένο.',
 'lockmanager-fail-closelock' => 'Δεν μπόρεσε να κλείσει το κλειδωμένο αρχείο για "$1".',
+'lockmanager-fail-deletelock' => 'Δεν μπόρεσε να διαγράψει το αρχείο κλειδώματος για το "$1".',
+'lockmanager-fail-openlock' => 'Δεν μπόρεσε να ανοίξει το αρχείο κλειδώματος για το "$1".',
 
 # ZipDirectoryReader
 'zip-file-open-error' => 'Παρουσιάστηκε σφάλμα κατά το άνοιγμα του αρχείου για ZIP ελέγχους.',
@@ -2084,6 +2106,7 @@ $1',
 # Miscellaneous special pages
 'nbytes' => '$1 {{PLURAL:$1|byte|bytes}}',
 'ncategories' => '$1 {{PLURAL:$1|κατηγορία|κατηγορίες}}',
+'ninterwikis' => '$1 {{PLURAL:$1|σύνδεσμος|σύνδεσμοι}} interwiki',
 'nlinks' => '$1 {{PLURAL:$1|σύνδεσμος|σύνδεσμοι}}',
 'nmembers' => '$1 {{PLURAL:$1|μέλος|μέλη}}',
 'nrevisions' => '$1 {{PLURAL:$1|αναθεώρηση|αναθεωρήσεις}}',
@@ -2166,6 +2189,7 @@ $1',
 'alllogstext' => 'Εποπτική εμφάνιση όλων των ενεργειών φόρτωσης αρχείων, διαγραφής, προστασίας, φραγής και όλων των καταγραφών των διαχειριστών στο αρχείο γεγονότων του {{SITENAME}}. Μπορείτε να περιορίσετε τα αποτελέσματα που εμφανίζονται επιλέγοντας συγκεκριμένο είδος γεγονότων, όνομα χρήστη ή τη σελίδα που επηρεάστηκε.',
 'logempty' => 'Δεν υπάρχουν στοιχεία που να ταιριάζουν στο αρχείο καταγραφών.',
 'log-title-wildcard' => 'Αναζήτησε τίτλους που αρχίζουν με αυτό το κείμενο',
+'showhideselectedlogentries' => 'Εμφάνιση/απόκρυψη επιλεγμένων καταχωρήσεων στη λίστα καταγραφών',
 
 # Special:AllPages
 'allpages' => 'Όλες οι σελίδες',
@@ -2209,9 +2233,9 @@ $1',
 'linksearch-pat' => 'Μοτίβο αναζήτησης:',
 'linksearch-ns' => 'Περιοχή:',
 'linksearch-ok' => 'Αναζήτηση',
-'linksearch-text' => 'ΧαÏ\81ακÏ\84ήÏ\81εÏ\82 Ï\8cÏ\80Ï\89Ï\82 "*.wikipedia.org" Î¼Ï\80οÏ\81οÏ\8dν Î½Î± Ï\87Ï\81ηÏ\83ιμοÏ\80οιηθοÏ\8dν
-ΧÏ\81ειάζεÏ\84αι Ï\84οÏ\85λάÏ\87ιÏ\83Ï\84ον Î­Î½Î± domain Î±Î½Ï\8eÏ\84ατου επιπέδου, για παράδειγμα "*.org".<br />
-Î¥Ï\80οÏ\83Ï\84ηÏ\81ιζÏ\8cμενα Ï\80Ï\81Ï\89Ï\84Ï\8cκολλα: <code>$1</code> (μην Ï\80Ï\81οÏ\83θέÏ\84εÏ\84ε Î¿Ï\80οιαδήÏ\80οÏ\84ε Î±Ï\80Ï\8c Î±Ï\85Ï\84έÏ\82 Ï\83Ï\84ην Î±Î½Î±Î¶Î®Ï\84ηÏ\83ή Ï\83αÏ\82).',
+'linksearch-text' => 'Î\9cÏ\80οÏ\81οÏ\8dν Î½Î± Ï\87Ï\81ηÏ\83ιμοÏ\80οιηθοÏ\8dν Ï\87αÏ\81ακÏ\84ήÏ\81εÏ\82 Î¼Ï\80αλανÏ\84έÏ\81 Ï\8cÏ\80Ï\89Ï\82 "*.wikipedia.org"
+ΧÏ\81ειάζεÏ\84αι Ï\84οÏ\85λάÏ\87ιÏ\83Ï\84ον Î¼Î¹Î± ÎºÎ±Ï\84άληξη Î±Î½Ï\89Ï\84άτου επιπέδου, για παράδειγμα "*.org".<br />
+Î¥Ï\80οÏ\83Ï\84ηÏ\81ιζÏ\8cμενα Ï\80Ï\81Ï\89Ï\84Ï\8cκολλα: <code>$1</code> (αν Î´ÎµÎ½ Î¿Ï\81ιÏ\83Ï\84εί Ï\80Ï\81Ï\89Ï\84Ï\8cκολλο Î· Ï\80Ï\81οεÏ\80ιλογή ÎµÎ¯Î½Î±Î¹ http://).',
 'linksearch-line' => 'Η $1 συνδεδεμένη από την $2',
 'linksearch-error' => 'Λέξεις-μπαλαντέρ μπορεί να εμφανιστούν μόνο στην αρχή τού ονόματος ιστοτόπου (hostname).',
 
@@ -2224,16 +2248,12 @@ $1',
 # Special:ActiveUsers
 'activeusers' => 'Κατάλογος ενεργών χρηστών',
 'activeusers-intro' => 'Αυτή είναι μια λίστα από χρήστες που είχαν κάποιου είδους δραστηριότητα {{PLURAL:$1|την τελευταία $1 μέρα|τις τελευταίες $1 μέρες}}.',
-'activeusers-count' => '$1 {{PLURAL:$1|επεξεργασία|επεξεργασίες}} {{PLURAL:$3|την τελευταία ημέρα|τις τελευταίες $3 ημέρες}}',
+'activeusers-count' => '$1 {{PLURAL:$1|ενέργεια|ενέργειες}} {{PLURAL:$3|την τελευταία μέρα|τις τελευταίες $3 μέρες}}',
 'activeusers-from' => 'Προβολή χρηστών ξεκινώντας από:',
 'activeusers-hidebots' => 'Απόκρυψη bots',
 'activeusers-hidesysops' => 'Απόκρυψη διαχειριστών',
 'activeusers-noresult' => 'Δεν βρέθηκε χρήστης.',
 
-# Special:Log/newusers
-'newuserlogpage' => 'Αρχείο δημιουργίας χρηστών',
-'newuserlogpagetext' => 'Αυτή είναι μια καταγραφή δημιουργίας χρηστών.',
-
 # Special:ListGroupRights
 'listgrouprights' => 'Δικαιώματα ομάδων χρηστών',
 'listgrouprights-summary' => 'Ακόλουθεί μία λίστα με τις ομάδες χρηστών σε αυτό το wiki καθώς και με τα δικαιώματα πρόσβασης αυτών.
@@ -2262,7 +2282,8 @@ $1',
 'emailuser-title-target' => 'Αποστολή e-mail {{GENDER:$1|στο|στη}} χρήστη',
 'emailuser-title-notarget' => 'Αποστολή e-mail σε χρήστη',
 'emailpage' => 'Αποστολή μηνύματος ηλεκτρονικού ταχυδρομείο στο χρήστη',
-'emailpagetext' => 'Συμπληρώνοντας την παρακάτω φόρμα θα στείλετε ένα μήνυμα εφόσον έχετε δηλώσει μια έγκυρη διεύθυνση ηλεκτρονικού ταχυδρομείου στις [[Special:Preferences|προτιμήσεις χρήστη]]. Αυτή θα εμφανιστεί ως διεύθυνση αποστολέα του μηνύματος, ούτως ώστε ο παραλήπτης να μπορέσει να σας απαντήσει.',
+'emailpagetext' => 'Μπορείτε να χρησιμοποιήσετε την παρακάτω φόρμα για να στείλετε ένα μήνυμα ηλεκτρονικού ταχυδρομείου σε {{GENDER:$1|αυτόν το χρήστη|αυτήν τη χρήστρια}}.
+Η διεύθυνση ηλεκτρονικού ταχυδρομείου που έχετε εισαγάγει στις [[Special:Preferences|προτιμήσεις χρήστη σας]] θα εμφανιστεί ως διεύθυνση αποστολέα του μηνύματος ηλεκτρονικού ταχυδρομείου, ούτως ώστε ο παραλήπτης να μπορέσει να απαντήσει απευθείας σε σας.',
 'usermailererror' => 'Σφάλμα ηλεκτρονικού ταχυδρομείου:',
 'defemailsubject' => '{{SITENAME}} e-mail από τον χρήστη "$1"',
 'usermaildisabled' => 'To e-mail χρήστη είναι απενεργοποιημένο',
@@ -2301,11 +2322,8 @@ $1',
 'watchnologin' => 'Δεν έχετε συνδεθεί.',
 'watchnologintext' => 'Για να κάνετε αλλαγές στη λίστα παρακολούθησης πρέπει να [[Special:UserLogin|συνδεθείτε]].',
 'addwatch' => 'Προσθήκη στη λίστα παρακολούθησης',
-'addedwatchtext' => "Η σελίδα \"<nowiki>\$1</nowiki>\" έχει προστεθεί στη [[Special:Watchlist|λίστα παρακολούθησης]].
-Μελλοντικές αλλαγές στη σελίδα καθώς και στη σχετική με τη σελίδα συζήτηση θα φαίνονται '''με έντονα γράμματα''' στη [[Special:RecentChanges|λίστα πρόσφατων αλλαγών]] έτσι ώστε να διευκολύνεται η παρακολούθηση.
-
-
-<p>Αν θελήσετε να αφαιρέσετε τη σελίδα αυτή από τη λίστα παρακολούθησης, κάνετε κλικ στην επιλογή \"παύση παρακολούθησης\" στην μπάρα ενεργειών.",
+'addedwatchtext' => 'Η σελίδα «[[:$1]]» έχει προστεθεί στη [[Special:Watchlist|λίστα παρακολούθησής σας]].
+Μελλοντικές αλλαγές σε αυτή τη σελίδα και στη συσχετισμένη σελίδα συζήτησής της θα εμφανίζονται εδώ.',
 'removewatch' => 'Αφαίρεση από τη λίστα παρακολούθησης',
 'removedwatchtext' => 'Η σελίδα "[[:$1]]" έχει αφαιρεθεί από [[Special:Watchlist|τη λίστα παρακολούθησής σας]].',
 'watch' => 'Παρακολούθηση',
@@ -2334,39 +2352,48 @@ $1',
 'enotif_mailer' => 'Σύστημα ειδοποίησης μέσω αλληλογραφίας του {{SITENAME}}',
 'enotif_reset' => 'Σημειώστε όλες τις σελίδες ως αναγνωσμένες.',
 'enotif_impersonal_salutation' => 'Χρήστης του ιστοτόπου "{{SITENAME}}"',
+'enotif_subject_deleted' => 'Η σελίδα $1 του ιστοχώρου {{SITENAME}} έχει διαγραφεί από {{gender:$2|τον|την}} $2',
+'enotif_subject_created' => 'Η σελίδα $1 του ιστοχώρου {{SITENAME}} έχει δημιουργηθεί από {{gender:$2|τον|την}} $2',
+'enotif_subject_moved' => 'Η σελίδα $1 του ιστοχώρου {{SITENAME}} έχει μετακινηθεί από {{gender:$2|τον|την}} $2',
+'enotif_subject_restored' => 'Η σελίδα $1 του ιστοχώρου {{SITENAME}} έχει αποκατασταθεί από {{gender:$2|τον|την}} $2',
+'enotif_subject_changed' => 'Η σελίδα $1 του ιστοχώρου {{SITENAME}} έχει αλλάξει από {{gender:$2|τον|την}} $2',
+'enotif_body_intro_deleted' => 'Η σελίδα $1 του ιστοχώρου {{SITENAME}} έχει διαγραφεί στις $PAGEEDITDATE από {{gender:$2|τον|την}} $2, βλ. $3.',
+'enotif_body_intro_created' => 'Η σελίδα $1 του ιστοχώρου {{SITENAME}} έχει δημιουργηθεί στις $PAGEEDITDATE από {{gender:$2|τον|την}} $2, βλ. $3 για την τρέχουσα αναθεώρηση.',
+'enotif_body_intro_moved' => 'Η σελίδα $1 του ιστοχώρου {{SITENAME}} έχει μετακινηθεί στις $PAGEEDITDATE από {{gender:$2|τον|την}} $2, βλ. $3 για την τρέχουσα αναθεώρηση.',
+'enotif_body_intro_restored' => 'Η σελίδα $1 του ιστοχώρου {{SITENAME}} έχει αποκατασταθεί στις $PAGEEDITDATE από {{gender:$2|τον|την}} $2, βλ. $3 για την τρέχουσα αναθεώρηση.',
+'enotif_body_intro_changed' => 'Η σελίδα $1 του ιστοχώρου {{SITENAME}} έχει αλλάξει στις $PAGEEDITDATE από {{gender:$2|τον|την}} $2, βλ. $3 για την τρέχουσα αναθεώρηση.',
 'enotif_lastvisited' => 'Δείτε το $1 για όλες τις αλλαγές που έγιναν από την τελευταία σας επίσκεψη.',
 'enotif_lastdiff' => 'Δείτε το $1 για να εμφανίσετε αυτή την αλλαγή.',
 'enotif_anon_editor' => 'ανώνυμος χρήστης $1',
 'enotif_body' => '{{GENDER:$WATCHINGUSERNAME|Αγαπητέ|Αγαπητή}} $WATCHINGUSERNAME,
 
-Η σελίδα $PAGETITLE του εγχειρήματος {{SITENAME}} $CHANGEDORCREATED στις $PAGEEDITDATE από {{GENDER:$PAGEEDITOR|τον χρήστη|την χρήστη}} $PAGEEDITOR - ακολουθήστε το σύνδεσμο $PAGETITLE_URL για να δείτε την τρέχουσα αναθεώρηση.
-
-$NEWPAGE
+$PAGEINTRO $NEWPAGE
 
 Περιγραφή επεξεργασίας: $PAGESUMMARY $PAGEMINOREDIT
 
\95Ï\80ικοινÏ\89νήÏ\83Ï\84ε Î¼Îµ {{GENDER:$PAGEEDITOR|Ï\84ο Ï\83Ï\85γκεκÏ\81ιμένο Ï\87Ï\81ήÏ\83Ï\84η|Ï\84η Ï\83Ï\85γκεκÏ\81ιμένη Ï\87Ï\81ήÏ\83Ï\84η}} :
-mail: $PAGEEDITOR_EMAIL
\95Ï\80ικοινÏ\89νία Î¼Îµ Ï\84ο Ï\87Ï\81ήÏ\83Ï\84η Ï\80οÏ\85 Î­ÎºÎ±Î½Îµ Ï\84ην ÎµÏ\80εξεÏ\81γαÏ\83ία:
+ηλεκτρονική διεύθυνση: $PAGEEDITOR_EMAIL
 wiki: $PAGEEDITOR_WIKI
 
-Δεν θα υπάρξουν άλλες ειδοποιήσεις για περαιτέρω αλλαγές αν δεν επισκεφθείτε τη σελίδα.
-Μπορείτε επίσης να επαναφέρετε την επιλογή ειδοποίησης για όλες τις παρακολουθούμενες σελίδες στη λίστα παρακολούθησής σας.
+Δεν θα υπάρξουν άλλες ειδοποιήσεις σε περίπτωση περαιτέρω δραστηριότητας αν δεν επισκεφθείτε τη σελίδα. Μπορείτε επίσης να επαναφέρετε την επιλογή ειδοποίησης για όλες τις παρακολουθούμενες σελίδες στη λίστα παρακολούθησής σας.
 
                          Φιλικά,
-                         Tο Ï\83Ï\8dÏ\83Ï\84ημα ÎµÎ¹Î´Î¿Ï\80οίηÏ\83ηÏ\82 Ï\84οÏ\85 ÎµÎ³Ï\87ειÏ\81ήμαÏ\84οÏ\82 {{SITENAME}}
+                         Tο Ï\83Ï\8dÏ\83Ï\84ημα ÎµÎ¹Î´Î¿Ï\80οίηÏ\83ηÏ\82 Ï\84οÏ\85 Î¹Ï\83Ï\84οÏ\87Ï\8eÏ\81οÏ\85 {{SITENAME}}
 
 --
-Για να αλλάξετε τις προτιμήσεις της ειδοποιήσεων email, ακολουθήστε το σύνδεσμο:
+Για να αλλάξετε τις προτιμήσεις των ειδοποιήσεων ηλεκτρονικού ταχυδρομείου, επισκεφτείτε το
 {{canonicalurl:{{#special:Preferences}}}}
 
\93ια Î½Î± Î±Î»Î»Î¬Î¾ÎµÏ\84ε Ï\84ιÏ\82 Ï\80Ï\81οÏ\84ιμήÏ\83ειÏ\82 Ï\84ηÏ\82 Î»Î¯Ï\83Ï\84αÏ\82 Ï\80αÏ\81ακολοÏ\8dθηÏ\83ήÏ\82 Ï\83αÏ\82, Î±ÎºÎ¿Î»Î¿Ï\85θήÏ\83Ï\84ε Ï\84ο Ï\83Ï\8dνδεÏ\83μο:
\93ια Î½Î± Î±Î»Î»Î¬Î¾ÎµÏ\84ε Ï\84ιÏ\82 Ï\80Ï\81οÏ\84ιμήÏ\83ειÏ\82 Ï\84ηÏ\82 Î»Î¯Ï\83Ï\84αÏ\82 Ï\80αÏ\81ακολοÏ\8dθηÏ\83ήÏ\82 Ï\83αÏ\82, ÎµÏ\80ιÏ\83κεÏ\86Ï\84είÏ\84ε Ï\84ο
 {{canonicalurl:{{#special:EditWatchlist}}}}
 
-Για να διαγράψετε την σελίδα από την λίστα παρακολούθησής σας:
+Για να διαγράψετε την σελίδα από την λίστα παρακολούθησής σας, επισκεφτείτε το
 $UNWATCHURL
 
\95Ï\81Ï\89Ï\84ήÏ\83ειÏ\82 ÎºÎ±Î¹ Ï\80εÏ\81ιÏ\83Ï\83Ï\8cÏ\84εÏ\81εÏ\82 Ï\80ληÏ\81οÏ\86οÏ\81ίεÏ\82:
 Î±Ï\81αÏ\84ηÏ\81ήÏ\83ειÏ\82 ÎºÎ±Î¹ Ï\80εÏ\81ιÏ\83Ï\83Ï\8cÏ\84εÏ\81η Î²Î¿Î®Î¸ÎµÎ¹Î±:
 {{canonicalurl:{{MediaWiki:Helppage}}}}',
+'created' => 'δημιουργήθηκε',
+'changed' => 'έχει αλλάξει',
 
 # Delete
 'deletepage' => 'Διαγραφή σελίδας',
@@ -2448,9 +2475,9 @@ $UNWATCHURL
 Εδώ είναι οι τρέχουσες ρυθμίσεις για τη σελίδα '''$1''':",
 'protect-cascadeon' => 'Αυτή η σελίδα είναι προς το παρόν προστατευμένη επειδή περιλαμβάνεται {{PLURAL:$1|στην ακόλουθη σελίδα, η οποία έχει|στις ακόλουθες σελίδες, οι οποίες έχουν}} τη διαδοχική προστασία ενεργοποιημένη. Μπορείτε να αλλάξετε το επίπεδο προστασίας αυτής της σελίδας, αλλά δεν θα επηρεάσει τη διαδοχική προστασία.',
 'protect-default' => 'Να επιτρέπονται όλοι οι χρήστες',
-'protect-fallback' => 'Î\91ίÏ\84ηÏ\83η Î´Î¹ÎºÎ±Î¹Ï\89μάÏ\84Ï\89ν "$1"',
-'protect-level-autoconfirmed' => 'ΦÏ\81αγή Î½Î­Ï\89ν ÎºÎ±Î¸Ï\8eÏ\82 ÎºÎ±Î¹ Î¼Î· ÎµÎ³Î³ÎµÎ³Ï\81αμμένÏ\89ν Ï\87Ï\81ηÏ\83Ï\84Ï\8eν',
-'protect-level-sysop' => 'Î\9cÏ\8cνο διαχειριστές',
+'protect-fallback' => 'Î\9dα ÎµÏ\80ιÏ\84Ï\81έÏ\80εÏ\84αι Î¼Ï\8cνο Ï\83ε Ï\87Ï\81ήÏ\83Ï\84εÏ\82 Î¼Îµ Î´Î¹ÎºÎ±Î¹Ï\8eμαÏ\84α Â«$1»',
+'protect-level-autoconfirmed' => 'Î\9dα ÎµÏ\80ιÏ\84Ï\81έÏ\80ονÏ\84αι Î¼Ï\8cνο Î±Ï\85Ï\84οεÏ\80ιβεβαιÏ\89μένοι Ï\87Ï\81ήÏ\83Ï\84εÏ\82',
+'protect-level-sysop' => 'Î\9dα ÎµÏ\80ιÏ\84Ï\81έÏ\80εÏ\84αι Î¼Ï\8cνο Ï\83Ï\84οÏ\85Ï\82 διαχειριστές',
 'protect-summary-cascade' => 'διαδοχική',
 'protect-expiring' => 'λήγει στις $1 (UTC)',
 'protect-expiring-local' => 'λήγει στις $1',
@@ -2673,7 +2700,7 @@ $1',
 'blocklink' => 'φραγή',
 'unblocklink' => 'Άρση φραγής',
 'change-blocklink' => 'αλλαγή φραγής',
-'contribslink' => 'Συνεισφορές/Προσθήκες',
+'contribslink' => 'συνεισφορές',
 'emaillink' => 'αποστολή μηνύματος ηλεκτρονικού ταχυδρομείου',
 'autoblocker' => 'Έχετε υποστεί αυτόματα φραγή από το σύστημα επειδή χρησιμοποιείτε την ίδια διεύθυνση IP με το χρήστη "[[User:$1|$1]]". Η αιτιολογία για την φραγή του $1 είναι "$2".',
 'blocklogpage' => 'Αρχείο καταγραφής φραγών',
@@ -2741,18 +2768,18 @@ $1',
 # Move page
 'move-page' => 'Μετακίνηση $1',
 'move-page-legend' => 'Μετακίνηση σελίδας',
-'movepagetext' => "ΧÏ\81ηÏ\83ιμοÏ\80οιÏ\8eνÏ\84αÏ\82 Ï\84η Ï\86Ï\8cÏ\81μα Ï\80οÏ\85 Î±ÎºÎ¿Î»Î¿Ï\85θεί Î¼Ï\80οÏ\81είÏ\84ε Î½Î± Î¼ÎµÏ\84ονομάÏ\83εÏ\84ε Ï\83ελίδεÏ\82 ÎºÎ±Î¹ Î½Î± Î¼ÎµÏ\84αÏ\86έÏ\81εÏ\84ε Ï\8cλο Ï\84ο Î¹Ï\83Ï\84οÏ\81ικÏ\8c Ï\84οÏ\85ς στο νέο όνομα.
-Ο παλιός τίτλος της σελίδας θα γίνει μια σελίδα ανακατεύθυνσης στο νέο τίτλο.
-Μπορείτε να ενημερώσετε τις ανακατευθύνσεις που οδηγούν στον αρχικό τίτλο αυτόματα.
\91ν ÎµÏ\80ιλέξεÏ\84ε Î½Î± Î¼Î·Î½ Î³Î¯Î½ÎµÎ¹, Î¸Î± Ï\80Ï\81έÏ\80ει Î½Î± ÎµÎ»Î­Î³Î¾ÎµÏ\84ε Ï\84ιÏ\82 [[Special:DoubleRedirects|διÏ\80λέÏ\82]] ÎºÎ±Î¹ Ï\84ιÏ\82 [[Special:BrokenRedirects|κατεστραμμένες ανακατευθύνσεις]].
-Είστε υπεύθυνος να επιβεβαιώσετε ότι οι σύνδεσμοι εξακολουθούν να οδηγούν προς τις κατευθύνσεις που πρέπει.
+'movepagetext' => "ΧÏ\81ηÏ\83ιμοÏ\80οιÏ\8eνÏ\84αÏ\82 Ï\84η Ï\86Ï\8cÏ\81μα Ï\80οÏ\85 Î±ÎºÎ¿Î»Î¿Ï\85θεί Î¸Î± Î³Î¯Î½ÎµÎ¹ Î¼ÎµÏ\84ονομαÏ\83ία Ï\83ελίδαÏ\82, Î¼ÎµÏ\84αÏ\86έÏ\81ονÏ\84αÏ\82 Ï\8cλο Ï\84ο Î¹Ï\83Ï\84οÏ\81ικÏ\8c Ï\84ης στο νέο όνομα.
+Ο παλιός τίτλος της σελίδας θα γίνει σελίδα ανακατεύθυνσης προς τον νέο τίτλο.
+Μπορείτε να ενημερώσετε αυτόματα τις ανακατευθύνσεις που οδηγούν στον αρχικό τίτλο.
\91ν ÎµÏ\80ιλέξεÏ\84ε Î½Î± Î¼Î·Î½ ÎµÎ½Î·Î¼ÎµÏ\81Ï\89θοÏ\8dν Î±Ï\85Ï\84Ï\8cμαÏ\84α, Î¼Î·Î½ Î¾ÎµÏ\87άÏ\83εÏ\84ε Î½Î± ÎµÎ»Î­Î³Î¾ÎµÏ\84ε Î³Î¹Î± [[Special:DoubleRedirects|διÏ\80λέÏ\82]] Î® [[Special:BrokenRedirects|κατεστραμμένες ανακατευθύνσεις]].
+Είναι δική σας ευθύνη να επιβεβαιώσετε ότι οι σύνδεσμοι εξακολουθούν να δείχνουν προς τη σωστή κατεύθυνση.
 
\9bάβεÏ\84ε Ï\85Ï\80Ï\8cÏ\88η Ï\83αÏ\82 Ï\8cÏ\84ι Î· Ï\83ελίδα '''δεν''' Î¸Î± Î¼ÎµÏ\84ακινηθεί Î±Î½ Ï\85Ï\80άÏ\81Ï\87ει Î®Î´Î· Î¼Î¹Î± Î¬Î»Î»Î· Ï\83ελίδα ÎºÎ¬Ï\84Ï\89 Î±Ï\80Ï\8c Ï\84ο Î½Î­Î¿ Ï\84ίÏ\84λο, ÎµÎºÏ\84Ï\8cÏ\82 Î±Î½ Î· Ï\83ελίδα Î±Ï\85Ï\84ή ÎµÎ¯Î½Î±Î¹ ÎºÎµÎ½Î® Î® ÎµÎ¯Î½Î±Î¹ Î±Î½Î±ÎºÎ±Ï\84εÏ\8dθÏ\85νÏ\83η Ï\87Ï\89Ï\81ίÏ\82 ιστορικό επεξεργασίας.
-Αυτό σημαίνει ότι, στην περίπτωση που έχετε κάνει λάθος, μπορείτε να μετονομάσετε μια σελίδα ξαναδίνοντας της την αρχική της ονομασία αλλά δεν μπορείτε να αντικαταστήσετε μια υπάρχουσα σελίδα.
\9bάβεÏ\84ε Ï\85Ï\80Ï\8cÏ\88ιν Ï\83αÏ\82 Ï\8cÏ\84ι Î· Ï\83ελίδα '''δεν''' Î¸Î± Î¼ÎµÏ\84ακινηθεί Î±Î½ Ï\85Ï\80άÏ\81Ï\87ει Î®Î´Î· Î¼Î¹Î± Î¬Î»Î»Î· Ï\83ελίδα Ï\85Ï\80Ï\8c Ï\84ο Î½Î­Î¿ Ï\84ίÏ\84λο, ÎµÎºÏ\84Ï\8cÏ\82 Î±Î½ Î· Ï\83ελίδα Î±Ï\85Ï\84ή ÎµÎ¯Î½Î±Î¹ ÎºÎµÎ½Î® Î® Î±Î½Î±ÎºÎ±Ï\84εÏ\8dθÏ\85νÏ\83η ÎºÎ±Î¹ Î´ÎµÎ½ Î­Ï\87ει ιστορικό επεξεργασίας.
+Αυτό σημαίνει ότι σε περίπτωση λάθους μπορείτε να μετονομάσετε ξανά μια σελίδα δίνοντας της την αρχική της ονομασία αλλά δεν μπορείτε να αντικαταστήσετε μια υπάρχουσα σελίδα.
 
 '''ΠΡΟΣΟΧΗ!'''
\97 Î¼ÎµÏ\84ονομαÏ\83ία Ï\83ελίδαÏ\82 ÎµÎ¯Î½Î±Î¹ Î¼Î¹Î± Î±Î¹Ï\86νίδια ÎºÎ±Î¹ Î´Ï\81αÏ\83Ï\84ική Î±Î»Î»Î±Î³Î® όταν πρόκειται για δημοφιλείς σελίδες.
-Παρακαλούμε, πριν το αποφασίσετε, να εξετάσετε προσεκτικά τις πιθανές επιπτώσεις αυτής της ενέργειας.",
\91Ï\85Ï\84ή Î· Î±Î»Î»Î±Î³Î® Î¼Ï\80οÏ\81εί Î½Î± Î±Ï\80οβεί Î´Ï\81αÏ\83Ï\84ική ÎºÎ±Î¹ Î±Î½Î±Ï\80άνÏ\84εÏ\87η όταν πρόκειται για δημοφιλείς σελίδες.
+Παρακαλούμε βεβαιωθείτε ότι αντιλαμβάνεστε τις επιπτώσεις αυτής της ενέργειας πριν προχωρήσετε.",
 'movepagetext-noredirectfixer' => "Χρησιμοποιώντας τη φόρμα που ακολουθεί μπορείτε να μετονομάσετε σελίδες και να μεταφέρετε όλο το ιστορικό τους στο νέο όνομα.
 Ο παλιός τίτλος της σελίδας θα γίνει μια σελίδα ανακατεύθυνσης στο νέο τίτλο.
 Μπορείτε να ενημερώσετε τις ανακατευθύνσεις που οδηγούν στον αρχικό τίτλο αυτόματα.
@@ -2925,6 +2952,7 @@ $1',
 'import-error-interwiki' => 'Η σελίδα " $1 " δεν έχει εισαχθεί, επειδή το όνομα της δεσμευμένο για εξωτερική σύνδεση (interwiki).',
 'import-error-special' => 'Η σελίδα "$1" δεν εισήχθη επειδή ανήκει σε έναν ειδικό χώρο ονομάτων που δεν επιτρέπει σελίδες.',
 'import-error-invalid' => 'Η σελίδα "$1" δεν εισήχθη επειδή το όνομά της δεν είναι έγκυρο.',
+'import-options-wrong' => 'Λάθος {{PLURAL:$2|επιλογή|επιλογές}}: <nowiki>$1</nowiki>',
 
 # Import log
 'importlogpage' => 'Αρχείο καταγραφής εισαγωγών',
@@ -2955,8 +2983,8 @@ $1',
 'tooltip-pt-login' => 'Σας προτείνουμε να συνδεθείτε παρόλο που δεν είναι αναγκαίο.',
 'tooltip-pt-anonlogin' => 'Σας προτείνουμε να συνδεθείτε παρόλο που δεν είναι αναγκαίο.',
 'tooltip-pt-logout' => 'Έξοδος',
-'tooltip-ca-talk' => 'ΣÏ\85ζήÏ\84ηÏ\83η Î³Î¹Î± Ï\84ο Ï\80αÏ\81Ï\8cν Î¬Ï\81θÏ\81ο',
-'tooltip-ca-edit' => 'Μπορείτε να επεξεργαστείτε αυτό το άρθρο. Παρακαλούμε χρησιμοποιήστε την "Προεπισκόπηση" πριν το αποθηκεύσετε.',
+'tooltip-ca-talk' => 'ΣÏ\85ζήÏ\84ηÏ\83η Î³Î¹Î± Ï\84η Ï\83ελίδα Ï\80εÏ\81ιεÏ\87ομένοÏ\85',
+'tooltip-ca-edit' => 'Μπορείτε να επεξεργαστείτε αυτή τη σελίδα. Παρακαλούμε χρησιμοποιήστε το κουμπί προεπισκόπησης πριν την αποθήκευση.',
 'tooltip-ca-addsection' => 'Προσθέστε ένα νέο τμήμα',
 'tooltip-ca-viewsource' => 'Αυτό το άρθρο είναι κλειδωμένο. Μπορείτε να δείτε τον πηγαίο κώδικά του.',
 'tooltip-ca-history' => 'Παλιές αναθεωρήσεις του άρθρου.',
@@ -2967,25 +2995,25 @@ $1',
 'tooltip-ca-move' => 'Μετακινήστε αυτή τη σελίδα',
 'tooltip-ca-watch' => 'Προσθήκη της σελίδας στη λίστα παρακολούθησης',
 'tooltip-ca-unwatch' => 'Αφαίρεση της σελίδας από τη λίστα παρακολούθησης',
-'tooltip-search' => 'Αναζήτηση στο WiKi',
+'tooltip-search' => 'Αναζήτηση σε {{SITENAME}}',
 'tooltip-search-go' => 'Πήγαινε σε μια σελίδα με το ακριβές όνομα εάν υπάρχει',
 'tooltip-search-fulltext' => 'Αναζήτηση για αυτό το κείμενο',
 'tooltip-p-logo' => 'Αρχική σελίδα',
-'tooltip-n-mainpage' => 'Î\94είτε την αρχική σελίδα',
+'tooltip-n-mainpage' => 'Î\95Ï\80ιÏ\83κεÏ\85Ï\84είτε την αρχική σελίδα',
 'tooltip-n-mainpage-description' => 'Επισκεφθείτε την κύρια σελίδα',
-'tooltip-n-portal' => 'Σχετικά με το Wiκi - πώς μπορείτε να βοηθήσετε, πού μπορείτε να απευθυνθείτε',
+'tooltip-n-portal' => 'Σχετικά με το εγχείρημα, τι μπορείτε να κάνετε, πού μπορείτε να βρείτε τι',
 'tooltip-n-currentevents' => 'Πληροφορίες για πρόσφατα γεγονότα',
-'tooltip-n-recentchanges' => 'Î\97 Î»Î¯Ï\83Ï\84α Î¼Îµ Ï\84ιÏ\82 Ï\80Ï\81Ï\8cÏ\83Ï\86αÏ\84εÏ\82 Î±Î»Î»Î±Î³Î­Ï\82 Ï\83Ï\84ο WiKi',
-'tooltip-n-randompage' => 'Î\95Ï\80ιÏ\83κεÏ\86θείÏ\84ε Î¼Î¹Î± Ï\84Ï\85Ï\87αία Ï\83ελίδα Ï\84οÏ\85 Wiκi',
+'tooltip-n-recentchanges' => 'Î\9bίÏ\83Ï\84α Ï\80Ï\81Ï\8cÏ\83Ï\86αÏ\84Ï\89ν Î±Î»Î»Î±Î³Ï\8eν Ï\83Ï\84ο wiki',
+'tooltip-n-randompage' => 'ΦÏ\8cÏ\81Ï\84Ï\89Ï\83η Î¼Î¹Î±Ï\82 Ï\84Ï\85Ï\87αίαÏ\82 Ï\83ελίδαÏ\82',
 'tooltip-n-help' => 'Το μέρος για να βρείτε τις απαντήσεις που ψάχνετε.',
-'tooltip-t-whatlinkshere' => 'Λίστα από άρθρα που αναφέρουν το παρόν άρθρο',
-'tooltip-t-recentchangeslinked' => 'Πρόσφατες αλλαγές σε άρθρα που συνδέονται με το παρόν',
+'tooltip-t-whatlinkshere' => 'Λίστα όλων των σελίδων που έχουν συνδέσμους προς τα εδώ',
+'tooltip-t-recentchangeslinked' => 'Πρόσφατες αλλαγές σε σελίδες στις οποίες οδηγούν σύνδεσμοι από αυτήν τη σελίδα',
 'tooltip-feed-rss' => 'RSS feed για αυτή τη σελίδα',
 'tooltip-feed-atom' => 'Atom feed για αυτή τη σελίδα',
 'tooltip-t-contributions' => 'Δείτε τη λίστα με τις συνεισφορές αυτού του χρήστη',
 'tooltip-t-emailuser' => 'Αποστολή μηνύματος σε αυτό το χρήστη',
-'tooltip-t-upload' => 'ΦÏ\8cÏ\81Ï\84Ï\89Ï\83η αρχείων',
-'tooltip-t-specialpages' => 'Η λίστα με όλες τις σελίδες λειτουργιών',
+'tooltip-t-upload' => 'Î\91νέβαÏ\83μα αρχείων',
+'tooltip-t-specialpages' => 'Η λίστα με όλες τις ειδικές σελίδες',
 'tooltip-t-print' => 'Εκτυπώσιμη έκδοση αυτής της σελίδας',
 'tooltip-t-permalink' => 'Μόνιμος σύνδεσμος σε αυτή την έκδοση της σελίδας',
 'tooltip-ca-nstab-main' => 'Άρθρο',
@@ -3062,6 +3090,7 @@ $1',
 'spambot_username' => 'Καθαρισμός spam από το MediaWiki',
 'spam_reverting' => 'Επαναφορά στην τελευταία έκδοση που δεν περιέχει συνδέσμους στο $1',
 'spam_blanking' => 'Όλες οι αναθεωρήσεις περιείχαν συνδέσμους προς το $1, εξάλειψη',
+'spam_deleting' => 'Διαγραφή όλων των αναθεωρήσεων που περιείχαν συνδέσμους προς το $1',
 
 # Info page
 'pageinfo-title' => 'Πληροφορίες για "$1"',
@@ -3083,6 +3112,7 @@ $1',
 'pageinfo-redirects-name' => 'Ανακατευθύνσεις σε αυτή τη σελίδα',
 'pageinfo-redirects-value' => '$1',
 'pageinfo-subpages-name' => 'Υποσελίδες αυτής της σελίδας',
+'pageinfo-subpages-value' => '$1 ($2 {{PLURAL:$2|ανακατεύθυνση|ανακατευθύνσεις}}, $3 {{PLURAL:$3|μη-ανακατεύθυνση|μη-ανακατευθύνσεις}})',
 'pageinfo-firstuser' => 'Δημιουργός της σελίδας',
 'pageinfo-firsttime' => 'Ημερομηνία δημιουργίας της σελίδας',
 'pageinfo-lastuser' => 'Τελευταίος συντάκτης',
@@ -3099,7 +3129,12 @@ $1',
 'pageinfo-redirectsto-info' => 'πληροφορίες',
 'pageinfo-contentpage' => 'Υπολογίζονται ως σελίδες περιεχομένου',
 'pageinfo-contentpage-yes' => 'Ναι',
+'pageinfo-protect-cascading' => 'Οι προστασίες ξεκινούν τη διαδοχή τους από εδώ',
 'pageinfo-protect-cascading-yes' => 'Ναι',
+'pageinfo-protect-cascading-from' => 'Οι προστασίες ξεκινούν τη διαδοχή τους από',
+'pageinfo-category-pages' => 'Αριθμός σελίδων',
+'pageinfo-category-subcats' => 'Αριθμός υποκατηγοριών',
+'pageinfo-category-files' => 'Αριθμός αρχείων',
 
 # Skin names
 'skinname-standard' => 'Κλασσικό',
@@ -3151,6 +3186,7 @@ $1',
 'file-nohires' => 'Δεν διατίθεται υψηλότερη ανάλυση.',
 'svg-long-desc' => "Αρχείο SVG, κατ' όνομα $1 × $2 εικονοστοιχεία, μέγεθος αρχείου: $3",
 'svg-long-desc-animated' => 'Κινούμενο αρχείο SVG, ονομαστικό μέγεθος σε pixels: $1 × $2, μέγεθος αρχείου: $3',
+'svg-long-error' => 'Μη έγκυρο αρχείο SVG: $1',
 'show-big-image' => 'Πλήρης ανάλυση',
 'show-big-image-preview' => 'Μέγεθος αυτής της προεπισκόπησης: $1 .',
 'show-big-image-other' => 'Άλλες {{PLURAL:$2|ανάλυση|αναλύσεις}}: $1.',
@@ -3160,7 +3196,8 @@ $1',
 'file-info-png-looped' => 'Σε άπειρο βρόγχο',
 'file-info-png-repeat' => 'έπαιξε $1 {{PLURAL:$1|φορά|φορές}}',
 'file-info-png-frames' => '$1 {{PLURAL:$1|πλαίσιο|πλαίσια}}',
-'file-no-thumb-animation' => "'''Σημείωση: λόγω τεχνικών περιορισμών, οι μικρογραφίες αυτού του αρχείου δεν θα είναι κινούμενες.'''",
+'file-no-thumb-animation' => "'''Σημείωση: λόγω τεχνικών περιορισμών, μικρογραφίες αυτού του τύπου αρχείου δεν θα είναι κινούμενες.'''",
+'file-no-thumb-animation-gif' => "'''Σημείωση: λόγω τεχνικών περιορισμών, μικρογραφίες εικόνων GIF υψηλής ανάλυσης όπως αυτή εδώ δεν θα είναι κινούμενες.'''",
 
 # Special:NewFiles
 'newimages' => 'Πινακοθήκη νέων εικόνων',
@@ -3180,6 +3217,7 @@ $1',
 'hours' => '{{PLURAL:$1|$1 ώρα|$1 ώρες}}',
 'days' => '{{PLURAL:$1|$1 μέρα|$1 μέρες}}',
 'ago' => '$1 πριν',
+'just-now' => 'μόλις τώρα',
 
 # Bad image list
 'bad_image_list' => 'Η σύνταξη είναι ως εξής:
@@ -3628,48 +3666,58 @@ $1',
 'confirmemail_loggedin' => 'Η ηλεκτρονική σας διεύθυνση επαληθεύτηκε.',
 'confirmemail_error' => 'Παρουσιάστηκε λάθος κατά την αποθήκευση των ρυθμίσεών σας.',
 'confirmemail_subject' => 'Επαλήθευση ηλεκτρονικής διεύθυνσης του {{SITENAME}}',
-'confirmemail_body' => 'Κάποιος -πιθανόν εσείς- από τη διεύθυνση IP $1, δημιούργησε στον ιστότοπο {{SITENAME}} το λογαριασμό χρήστη "$2" με αυτή την ηλεκτρονική διεύθυνση.
+'confirmemail_body' => 'Κάποιος, πιθανότατα εσείς, από τη διεύθυνση IP $1,
+δημιούργησε λογαριασμό χρήστη «$2»
+με αυτήν τη διεύθυνση ηλεκτρονικού ταχυδρομείου στον ιστότοπο {{SITENAME}}.
 
-Για να επιβεβαιώσετε ότι αυτός ο λογαριασμός χρήστη ανήκει πραγματικά σε εσάς και για να ενεργοποιηθούν οι δυνατότητες e-mail του {{SITENAME}}, ακολουθήστε αυτό το σύνδεσμο:
+Για να επιβεβαιώσετε ότι αυτός ο λογαριασμός χρήστη ανήκει πραγματικά σε σας και να ενεργοποιήσετε
+τις δυνατότητες ηλεκτρονικού ταχυδρομείου στον ιστότοπο {{SITENAME}}, ανοίξτε στον περιηγητή σας αυτόν το σύνδεσμο:
 
 $3
 
-Αν *δεν* δημιουργήσατε εσείς το συγκεκριμένο λογαριασμό, ακολουθήστε τον παρακάτω σύνδεσμο για να ακυρώσετε την επιβεβαίωση της διεύθυνσης e-mail:
+Εάν *δεν* δημιουργήσατε εσείς το λογαριασμό χρήστη, ακολουθήστε αυτόν τον σύνδεσμο
+για να ακυρώσετε την επιβεβαίωση της διεύθυνσης ηλεκτρονικού ταχυδρομείου:
 
 $5
 
-Ο κωδικός επιβεβαίωσης θα λήξει στις $4.',
-'confirmemail_body_changed' => 'Κάποιος - πιθανόν εσείς - από τη διεύθυνση IP $1, άλλαξε στον ιστότοπο {{SITENAME}} την ηλεκτρονική διεύθυνση του λογαριασμού χρήστη "$2".
+Αυτός ο κωδικός επιβεβαίωσης θα λήξει στις $6, στις $7.',
+'confirmemail_body_changed' => 'Κάποιος, πιθανότατα εσείς, από τη διεύθυνση IP $1,
+άλλαξε τη διεύθυνση ηλεκτρονικού ταχυδρομείου του λογαριασμού χρήστη «$2»
+σε αυτήν τη διεύθυνση ηλεκτρονικού ταχυδρομείου στον ιστότοπο {{SITENAME}}.
 
-Για να επιβεβαιώσετε ότι αυτός ο λογαριασμός χρήστη ανήκει πραγματικά σε εσάς και για να ενεργοποιηθούν οι δυνατότητες e-mail του {{SITENAME}}, ακολουθήστε αυτό το σύνδεσμο:
+Για να επιβεβαιώσετε ότι αυτός ο λογαριασμός χρήστη ανήκει πραγματικά σε σας και να ενεργοποιήσετε πάλι
+τις δυνατότητες ηλεκτρονικού ταχυδρομείου στον ιστότοπο {{SITENAME}}, ανοίξτε στον περιηγητή σας αυτόν το σύνδεσμο:
 
 $3
 
-Αν ο λογαριασμός *δεν* ανήκει σε σας, ακολουθήστε τον παρακάτω σύνδεσμο για να ακυρώσετε την επιβεβαίωση της διεύθυνσης e-mail:
+Εάν ο λογαριασμός *δεν* ανήκει σε σας, ακολουθήστε αυτόν τον σύνδεσμο
+για να ακυρώσετε την επιβεβαίωση της διεύθυνσης ηλεκτρονικού ταχυδρομείου:
 
 $5
 
-Αυτός ο κωδικός επιβεβαίωσης θα λήξει στις $4.',
-'confirmemail_body_set' => 'Κάποιος, πιθανόν εσείς, από τη διεύθυνση IP $1, έχει θέσει τη διεύθυνση 
-ηλεκτρονικού ταχυδρομείου (e-mail) του λογαριασμού " $2 "σε αυτή τη διεύθυνση στο {{SITENAME}}.
+Αυτός ο κωδικός επιβεβαίωσης θα λήξει στις $6, στις $7.',
+'confirmemail_body_set' => 'Κάποιος, πιθανότατα εσείς, από τη διεύθυνση IP $1,
+όρισε αυτήν τη διεύθυνση ηλεκτρονικού ταχυδρομείου ως διεύθυνση ηλεκτρονικού ταχυδρομείου
+του λογαριασμού χρήστη «$2» στον ιστότοπο {{SITENAME}}.
 
-Για να επιβεβαιώσετε ότι αυτός ο λογαριασμός χρήστη ανήκει πραγματικά σε σας και να επανενεργοποιήσετε
-τις δυνατότητες ηλεκτρονικού ταχυδρομείου στον/στην/στα {{SITENAME}}, ανοίξτε αυτό το σύνδεσμο στον φυλλομετρητή (browser) σας:
+Για να επιβεβαιώσετε ότι αυτός ο λογαριασμός χρήστη ανήκει πραγματικά σε σας και να ενεργοποιήσετε πάλι
+τις δυνατότητες ηλεκτρονικού ταχυδρομείου στον ιστότοπο {{SITENAME}}, ανοίξτε στον περιηγητή σας αυτόν το σύνδεσμο:
 
 $3
 
-Εάν ο λογαριασμός * δεν * ανήκει σε σας, ακολουθήστε αυτόν τον σύνδεσμο
-για Î½Î± Î±ÎºÏ\85Ï\81Ï\8eÏ\83εÏ\84ε Ï\84ο e-mail ÎµÏ\80ιβεβαίÏ\89Ï\83ηÏ\82 Ï\84ηÏ\82 Î´Î¹ÎµÏ\8dθÏ\85νÏ\83ηÏ\82
+Εάν ο λογαριασμός *δεν* ανήκει σε σας, ακολουθήστε αυτόν τον σύνδεσμο
+για Î½Î± Î±ÎºÏ\85Ï\81Ï\8eÏ\83εÏ\84ε Ï\84ην ÎµÏ\80ιβεβαίÏ\89Ï\83η Ï\84ηÏ\82 Î´Î¹ÎµÏ\8dθÏ\85νÏ\83ηÏ\82 Î·Î»ÎµÎºÏ\84Ï\81ονικοÏ\8d Ï\84αÏ\87Ï\85δÏ\81ομείοÏ\85:
 
 $5
 
-Αυτός ο κωδικός επιβεβαίωσης θα λήξει στις $4.',
+Αυτός ο κωδικός επιβεβαίωσης θα λήξει στις $6, στις $7.',
 'confirmemail_invalidated' => 'Η επιβεβαίωσης της διεύθυνσης e-mail ακυρώθηκε',
 'invalidateemail' => 'Ακύρωση επιβεβαίωσης της διεύθυνσης e-mail',
 
 # Scary transclusion
 'scarytranscludedisabled' => '[Η ενσωμάτωση εξωτερικών ιστοσελίδων σε αυτό το Wiki είναι απενεργοποιημένη.]',
-'scarytranscludefailed' => '[Η προσκόμιση προτύπου για το $1 απέτυχε.]',
+'scarytranscludefailed' => '[Η λήψη προτύπου για το $1 απέτυχε.]',
+'scarytranscludefailed-httpstatus' => '[Η λήψη προτύπου απέτυχε για  το $1: HTTP  $2]',
 'scarytranscludetoolong' => '[Η διεύθυνση URL είναι πολύ μεγάλη.]',
 
 # Delete conflict
@@ -3777,7 +3825,7 @@ $5
 'version-hook-subscribedby' => 'Υπογεγραμμένο από',
 'version-version' => '(Έκδοση $1)',
 'version-license' => 'Άδεια χρήσης',
-'version-poweredby-credits' => "Î\91Ï\85Ï\84Ï\8c Ï\84ο wiki Î»ÎµÎ¹Ï\84οÏ\85Ï\81γεί Î¼Îµ Ï\83Ï\84ο '''[//www.mediawiki.org/ MediaWiki]''', πνευματική ιδιοκτησία © 2001-$1 $2.",
+'version-poweredby-credits' => "Î\91Ï\85Ï\84Ï\8c Ï\84ο wiki Î»ÎµÎ¹Ï\84οÏ\85Ï\81γεί Î¼Îµ Ï\84ο Î»Î¿Î³Î¹Ï\83μικÏ\8c '''[//www.mediawiki.org/ MediaWiki]''', πνευματική ιδιοκτησία © 2001-$1 $2.",
 'version-poweredby-others' => 'άλλοι',
 'version-credits-summary' => 'Θα θέλαμε να αναγνωρίσουμε τη συμβολή των παρακάτω προσώπων στο [[Special:Version|MediaWiki]].',
 'version-license-info' => "Το MediaWiki είναι ελεύθερο λογισμικό. Μπορείτε να το αναδιανείμετε ή/και να το τροποποιήσετε υπό τους όρους της άδειας GNU General Public License όπως αυτή εκδόθηκε από το Free Software Foundation· είτε της δεύτερης έκδοσης της άδειας, είτε (κατ' επιλογή σας) οποιασδήποτε επόμενης έκδοσης.
@@ -3788,6 +3836,8 @@ $5
 'version-software' => 'Εγκατεστημένο λογισμικό',
 'version-software-product' => 'Προϊόν',
 'version-software-version' => 'Έκδοση',
+'version-entrypoints' => 'Διευθύνσεις URL σημείων εισόδου',
+'version-entrypoints-header-entrypoint' => 'Σημείο εισόδου',
 'version-entrypoints-header-url' => 'URL',
 
 # Special:FilePath
@@ -3822,7 +3872,7 @@ $5
 'specialpages-group-highuse' => 'Πολυσύχναστες σελίδες',
 'specialpages-group-pages' => 'Κατάλογοι σελίδων',
 'specialpages-group-pagetools' => 'Εργαλεία σελίδων',
-'specialpages-group-wiki' => 'Î\92ικι Î´εδομένα και εργαλεία',
+'specialpages-group-wiki' => 'Î\94εδομένα και εργαλεία',
 'specialpages-group-redirects' => 'Ανακατεύθυνση ειδικών σελίδων',
 'specialpages-group-spam' => 'Εργαλεία κατά των ανεπιθύμητων διαφημιστικών',
 
@@ -3854,19 +3904,19 @@ $5
 'tags-hitcount' => '$1 {{PLURAL:$1|αλλαγή|αλλαγές}}',
 
 # Special:ComparePages
-'comparepages' => 'ΣÏ\85γκÏ\81ίνεÏ\84ε Ï\84ιÏ\82 Ï\83ελίδεÏ\82',
+'comparepages' => 'ΣÏ\8dγκÏ\81ιÏ\83η Ï\83ελίδÏ\89ν',
 'compare-selector' => 'Συγκρίνετε τις αναθεωρήσεις των σελίδων',
 'compare-page1' => 'Σελίδα 1',
 'compare-page2' => 'Σελίδα 2',
 'compare-rev1' => 'Αναθεώρηση 1',
 'compare-rev2' => 'Αναθεώρηση 2',
-'compare-submit' => 'ΣÏ\85γκÏ\81ίνεÏ\84ε',
+'compare-submit' => 'ΣÏ\8dγκÏ\81ιÏ\83η',
 'compare-invalid-title' => 'Ο τίτλος που καθορίσατε δεν είναι έγκυρος.',
 'compare-title-not-exists' => 'Ο τίτλος που καθορίσατε δεν υπάρχει.',
 'compare-revision-not-exists' => 'Η αναθεώρηση που καθορίσατε δεν υπάρχει.',
 
 # Database error messages
-'dberr-header' => 'Αυτό το wiki έχει ένα πρόβλημα',
+'dberr-header' => 'Αυτό το wiki έχει πρόβλημα',
 'dberr-problems' => 'Λυπούμαστε! Αυτός ο ιστότοπος αντιμετωπίζει τεχνικές δυσκολίες.',
 'dberr-again' => 'Δοκιμάστε να περιμενένετε λίγα λεπτά και να ανανεώσετε.',
 'dberr-info' => '(Δεν μπορεί να επικοινωνήσει με τον εξυπηρετητή της βάσης δεδομένων: $1)',
@@ -3891,12 +3941,16 @@ $5
 'sqlite-no-fts' => '$1 χωρίς την υποστήριξη αναζήτησης πλήρους κειμένου',
 
 # New logging system
-'logentry-delete-delete' => 'Ο/η $1 διέγραψε τη σελίδα $3',
+'logentry-delete-delete' => '{{GENDER:$1|Ο|Η}} $1 διέγραψε τη σελίδα $3',
 'logentry-delete-restore' => 'Ο/η $1 αποκατέστησε τη σελίδα $3',
-'logentry-delete-event' => '$1 άλλαξε την ορατότητα σε  {{PLURAL:$5|ένα γεγονός καταγραφής|$5 log events}} στο  $3: $4',
-'logentry-delete-revision' => '$1 άλλαξε την ορατότητα {{PLURAL:$5|μιας έκδοσης|$5 εκδόσεων}} στη σελίδα $3: $4',
-'logentry-delete-revision-legacy' => '$1 άλλαξε την  ορατότητα των αναθεωρήσεων στη σελίδα $3',
-'logentry-suppress-delete' => 'Ο $1 διέγραψε τη σελίδα $3',
+'logentry-delete-event' => '{{GENDER:$1|Ο|Η}} $1 άλλαξε την ορατότητα σε {{PLURAL:$5|ένα γεγονός καταγραφής|$5 log events}} στο $3: $4',
+'logentry-delete-revision' => '{{GENDER:$1|Ο|Η}} $1 άλλαξε την ορατότητα {{PLURAL:$5|μιας έκδοσης|$5 εκδόσεων}} στη σελίδα $3: $4',
+'logentry-delete-event-legacy' => '{{GENDER:$2|Ο|Η}} $1 άλλαξε την ορατότητα των καταγραφόμενων συμβάντων στη σελίδα $3',
+'logentry-delete-revision-legacy' => '{{GENDER:$1|Ο|Η}} $1 άλλαξε την  ορατότητα των αναθεωρήσεων στη σελίδα $3',
+'logentry-suppress-delete' => '{{GENDER:$1|Ο|Η}} $1 διέγραψε τη σελίδα $3',
+'logentry-suppress-event' => '{{Gender:$2|Ο|Η}} $1 άλλαξε μυστικά την ορατότητα {{PLURAL:$5|ενός καταγραφόμενου συμβάντος|$5 καταγραφόμενων συμβάντων}} στη σελίδα $3: $4',
+'logentry-suppress-revision' => '{{Gender:$2|Ο|Η}} $1 άλλαξε μυστικά την ορατότητα {{PLURAL:$5|μίας αναθεώρησης|$5 αναθεωρήσεων}} στη σελίδα $3: $4',
+'logentry-suppress-event-legacy' => '{{Gender:$2|Ο|Η}} $1 άλλαξε μυστικά την ορατότητα των καταγραφόμενων συμβάντων στη σελίδα $3',
 'logentry-suppress-revision-legacy' => '$1 κρυφά άλλαξαν την  ορατότητα των αναθεωρήσεων στη σελίδα $3',
 'revdelete-content-hid' => 'το περιεχόμενο αποκρύφθηκε',
 'revdelete-summary-hid' => 'Η σύνοψη επεξεργασίας αποκρύφθηκε',
@@ -3916,7 +3970,9 @@ $5
 'logentry-newusers-create' => 'Ο λογαριασμός χρήστη $1 δημιουργήθηκε',
 'logentry-newusers-create2' => 'Ο λογαριασμός χρήστη $3 δημιουργήθηκε από {{GENDER:$1|τον|την}} $1',
 'logentry-newusers-autocreate' => 'Ο λογαριασμός $1 δημιουργήθηκε αυτόματα',
-'newuserlog-byemail' => 'ο κωδικός έχει σταλεί μέσω ηλεκτρονικού μηνύματος',
+'logentry-rights-rights-legacy' => '{{GENDER:$1|Ο|Η}} $1 άλλαξε την ιδιότητα μέλους ομάδας {{GENDER:$1|του|της}} $3',
+'logentry-rights-autopromote' => '$1 προωθήθηκε αυτόματα από το $4 στο $5',
+'rightsnone' => '(κανένα)',
 
 # Feedback
 'feedback-bugornote' => 'Εάν είστε έτοιμοι να περιγράψετε ένα τεχνικό πρόβλημα λεπτομερώς παρακαλώ [ $1  κάντε μια αναφορά σφάλματος].
@@ -3974,9 +4030,9 @@ $5
 'api-error-unclassified' => 'Προέκυψε ένα άγνωστο σφάλμα.',
 'api-error-unknown-code' => 'Άγνωστο σφάλμα: "$1"',
 'api-error-unknown-error' => 'Εσωτερικό σφάλμα: κάτι πήγε στραβά, όταν προσπαθείσατε να φορτώσετε το αρχείο σας.',
-'api-error-unknown-warning' => 'Άγνωστη προειδοποίηση:$1',
-'api-error-unknownerror' => 'Άγνωστο σφάλμα:"$1".',
-'api-error-uploaddisabled' => 'Î\97 ÎµÏ\80ιÏ\86Ï\8cÏ\81Ï\84Ï\89Ï\83η ÎµÎ¯Î½Î±Î¹ Î±Ï\80ενεÏ\81γοÏ\80οιημένη σε αυτό το wiki.',
+'api-error-unknown-warning' => 'Άγνωστη προειδοποίηση: «$1».',
+'api-error-unknownerror' => 'Άγνωστο σφάλμα: «$1».',
+'api-error-uploaddisabled' => 'Το Î±Î½Î­Î²Î±Ï\83μα Î±Ï\81Ï\87είÏ\89ν ÎµÎ¯Î½Î±Î¹ Î±Ï\80ενεÏ\81γοÏ\80οιημένο σε αυτό το wiki.',
 'api-error-verification-error' => 'Αυτό το αρχείο μπορεί να είναι κατεστραμμένο, ή να έχει λανθασμένη επέκταση.',
 
 # Durations
@@ -3987,9 +4043,7 @@ $5
 'duration-weeks' => '$1 {{PLURAL:$1|εβδομάδα|εβδομάδες}}',
 'duration-years' => '$1 {{PLURAL:$1|χρόνο|χρόνια}}',
 'duration-decades' => '$1 {{PLURAL:$1|δεκαετία|δεκαετίες}}',
-'duration-centuries' => '$1 {{PLURAL:$1|Î\91ιώνα|αιώνες}}',
-'duration-millennia' => '$1 {{PLURAL:$1|Χιλιετία|Χιλιετίες}}',
+'duration-centuries' => '$1 {{PLURAL:$1|αιώνα|αιώνες}}',
+'duration-millennia' => '$1 {{PLURAL:$1|χιλιετία|χιλιετίες}}',
 
-# Unknown messages
-'svg-long-error' => 'Μη έγκυρο αρχείο SVG: $1',
 );
index ee9f7e6..c7ceb47 100644 (file)
@@ -43,7 +43,7 @@ $digitTransformTable = null;
 $separatorTransformTable = null;
 
 /**
- * Extra user preferences which will be shown in Special:Preferences as
+ * Extra user preferences, which will be shown in Special:Preferences as
  * checkboxes. Extra settings in derived languages will automatically be
  * appended to the array of the fallback languages.
  */
@@ -115,7 +115,7 @@ $namespaceGenderAliases = array(
 $namespaceGenderAliases = array();
 
 /**
- * A list of date format preference keys which can be selected in user
+ * A list of date format preference keys, which can be selected in user
  * preferences. New preference keys can be added, provided they are supported
  * by the language class's timeanddate(). Only the 5 keys listed below are
  * supported by the wikitext converter (parser/DateFormatter.php).
@@ -498,7 +498,7 @@ $imageFiles = array(
 
 /**
  * A list of messages to preload for each request.
- * We add messages here which are needed for a typical anonymous parser cache hit.
+ * Here we add messages that are needed for a typical anonymous parser cache hit.
  */
 $preloadedMessages = array(
        'aboutpage',
@@ -775,6 +775,7 @@ XHTML id names.
 'moredotdotdot' => 'More...',
 'mypage'        => 'Page',
 'mytalk'        => 'Talk',
+'morenotlisted' => 'More not listed...',
 'anontalk'      => 'Talk for this IP address',
 'navigation'    => 'Navigation',
 'and'           => '&#32;and',
@@ -1020,7 +1021,7 @@ It may have already been deleted by someone else.',
 It gave no explanation.',
 'badtitle'                      => 'Bad title',
 'badtitletext'                  => 'The requested page title was invalid, empty, or an incorrectly linked inter-language or inter-wiki title.
-It may contain one or more characters which cannot be used in titles.',
+It may contain one or more characters that cannot be used in titles.',
 'perfcached'                    => 'The following data is cached and may not be up to date. A maximum of {{PLURAL:$1|one result is|$1 results are}} available in the cache.',
 'perfcachedts'                  => 'The following data is cached, and was last updated $1. A maximum of {{PLURAL:$4|one result is|$4 results are}} available in the cache.',
 'querypage-no-updates'          => 'Updates for this page are currently disabled.
@@ -1038,7 +1039,7 @@ Please try again in a few minutes.',
 'viewyourtext'                  => "You can view and copy the source of '''your edits''' to this page:",
 'protectedinterface'            => 'This page provides interface text for the software on this wiki, and is protected to prevent abuse.
 To add or change translations for all wikis, please use [//translatewiki.net/ translatewiki.net], the MediaWiki localisation project.',
-'editinginterface'              => "'''Warning:''' You are editing a page which is used to provide interface text for the software.
+'editinginterface'              => "'''Warning:''' You are editing a page that is used to provide interface text for the software.
 Changes to this page will affect the appearance of the user interface for other users on this wiki.
 To add or change translations for all wikis, please use [//translatewiki.net/ translatewiki.net], the MediaWiki localisation project.",
 'sqlhidden'                     => '(SQL query hidden)',
@@ -1094,7 +1095,7 @@ Do not forget to change your [[Special:Preferences|{{SITENAME}} preferences]].',
 'gotaccount'                 => 'Already have an account? $1.',
 'gotaccountlink'             => 'Log in',
 'userlogin-resetlink'        => 'Forgotten your login details?',
-'createaccountmail'          => 'By e-mail',
+'createaccountmail'          => 'Use a temporary random password and send it to the e-mail address specified below',
 'createaccountreason'        => 'Reason:',
 'badretype'                  => 'The passwords you entered do not match.',
 'userexists'                 => 'Username entered already in use.
@@ -1178,13 +1179,13 @@ You may ignore this message, if this account was created in error.',
 Please wait before trying again.',
 'login-abort-generic'        => 'Your login was unsuccessful - Aborted',
 'loginlanguagelabel'         => 'Language: $1',
-'loginlanguagelinks'         => '* Deutsch|de
-* English|en
-* Esperanto|eo
-* Français|fr
-* Español|es
-* Italiano|it
-* Nederlands|nl', # do not translate or duplicate this message to other languages
+'loginlanguagelinks'         => '* {{#language:de}}|de
+* {{#language:en}}|en
+* {{#language:eo}}|eo
+* {{#language:fr}}|fr
+* {{#language:es}}|es
+* {{#language:it}}|it
+* {{#language:nl}}|nl', # do not translate or duplicate this message to other languages
 'suspicious-userlogout'      => 'Your request to log out was denied because it looks like it was sent by a broken browser or caching proxy.',
 
 # E-mail sending
@@ -1192,6 +1193,7 @@ Please wait before trying again.',
 'php-mail-error'         => '$1', # do not translate or duplicate this message to other languages
 'php-mail-error-unknown' => "Unknown error in PHP's mail() function.",
 'user-mail-no-addy'      => 'Tried to send e-mail without an e-mail address.',
+'user-mail-no-body'      => 'Tried to send e-mail with an empty or unreasonably short body.',
 
 # Change password dialog
 'resetpass'                 => 'Change password',
@@ -1441,7 +1443,7 @@ You are also promising us that you wrote this yourself, or copied it from a publ
 'longpageerror'                    => "'''Error: The text you have submitted is {{PLURAL:$1|one kilobyte|$1 kilobytes}} long, which is longer than the maximum of {{PLURAL:$2|one kilobyte|$2 kilobytes}}.'''
 It cannot be saved.",
 'readonlywarning'                  => "'''Warning: The database has been locked for maintenance, so you will not be able to save your edits right now.'''
-You may wish to cut-n-paste the text into a text file and save it for later.
+You may wish to copy and paste your text into a text file and save it for later.
 
 The administrator who locked it offered this explanation: $1",
 'protectedpagewarning'             => "'''Warning: This page has been protected so that only users with administrator privileges can edit it.'''
@@ -1459,7 +1461,6 @@ The latest log entry is provided below for reference:",
 'hiddencategories'                 => 'This page is a member of {{PLURAL:$1|1 hidden category|$1 hidden categories}}:',
 'edittools'                        => '<!-- Text here will be shown below edit and upload forms. -->', # only translate this message to other languages if you have to change it
 'edittools-upload'                 => '-', # only translate this message to other languages if you have to change it
-'nocreatetitle'                    => 'Page creation limited',
 'nocreatetext'                     => '{{SITENAME}} has restricted the ability to create new pages.
 You can go back and edit an existing page, or [[Special:UserLogin|log in or create an account]].',
 'nocreate-loggedin'                => 'You do not have permission to create new pages.',
@@ -1504,7 +1505,7 @@ It should have less than $2 {{PLURAL:$2|call|calls}}, there {{PLURAL:$1|is now $
 'post-expand-template-inclusion-warning'  => "'''Warning:''' Template include size is too large.
 Some templates will not be included.",
 'post-expand-template-inclusion-category' => 'Pages where template include size is exceeded',
-'post-expand-template-argument-warning'   => "'''Warning:''' This page contains at least one template argument which has a too large expansion size.
+'post-expand-template-argument-warning'   => "'''Warning:''' This page contains at least one template argument that has a too large expansion size.
 These arguments have been omitted.",
 'post-expand-template-argument-category'  => 'Pages containing omitted template arguments',
 'parser-template-loop-warning'            => 'Template loop detected: [[$1]]',
@@ -1902,7 +1903,7 @@ This cannot be undone.',
 'yourvariant'                   => 'Content language variant:',
 'prefs-help-variant'            => 'Your preferred variant or orthography to display the content pages of this wiki in.',
 'yournick'                      => 'New signature:',
-'prefs-help-signature'          => 'Comments on talk pages should be signed with "<nowiki>~~~~</nowiki>" which will be converted into your signature and a timestamp.',
+'prefs-help-signature'          => 'Comments on talk pages should be signed with "<nowiki>~~~~</nowiki>", which will be converted into your signature and a timestamp.',
 'badsig'                        => 'Invalid raw signature.
 Check HTML tags.',
 'badsiglength'                  => 'Your signature is too long.
@@ -2050,15 +2051,13 @@ Your e-mail address is not revealed when other users contact you.',
 'right-sendemail'             => 'Send e-mail to other users',
 'right-passwordreset'         => 'View password reset e-mails',
 
+# Special:Log/newusers
+'newuserlogpage'     => 'User creation log',
+'newuserlogpagetext' => 'This is a log of user creations.',
+
 # User rights log
-'rightslog'                     => 'User rights log',
-'rightslogtext'                 => 'This is a log of changes to user rights.',
-'rightslogentry'                => 'changed group membership for $1 from $2 to $3',
-'rightslogentry-autopromote'    => 'was automatically promoted from $2 to $3',
-'logentry-rights-rights'        => '$1 changed group membership for $3 from $4 to $5',
-'logentry-rights-rights-legacy' => '$1 changed group membership for $3',
-'logentry-rights-autopromote'   => '$1 was automatically promoted from $4 to $5',
-'rightsnone'                    => '(none)',
+'rightslog'     => 'User rights log',
+'rightslogtext' => 'This is a log of changes to user rights.',
 
 # Associated actions - in the sentence "You do not have permission to X"
 'action-read'                 => 'read this page',
@@ -2258,7 +2257,7 @@ Please check the file_uploads setting.',
 'uploadscripted'              => 'This file contains HTML or script code that may be erroneously interpreted by a web browser.',
 'uploadvirus'                 => 'The file contains a virus!
 Details: $1',
-'uploadjava'                  => 'The file is a ZIP file which contains a Java .class file.
+'uploadjava'                  => 'The file is a ZIP file that contains a Java .class file.
 Uploading Java files is not allowed because they can cause security restrictions to be bypassed.',
 'upload-source'               => 'Source file',
 'sourcefilename'              => 'Source filename:',
@@ -2357,12 +2356,12 @@ If the problem persists, contact an [[Special:ListUsers/sysop|administrator]].',
 'zip-wrong-format'    => 'The specified file was not a ZIP file.',
 'zip-bad'             => 'The file is a corrupt or otherwise unreadable ZIP file.
 It cannot be properly checked for security.',
-'zip-unsupported'     => 'The file is a ZIP file which uses ZIP features not supported by MediaWiki.
+'zip-unsupported'     => 'The file is a ZIP file that uses ZIP features not supported by MediaWiki.
 It cannot be properly checked for security.',
 
 # Special:UploadStash
 'uploadstash'          => 'Upload stash',
-'uploadstash-summary'  => 'This page provides access to files which are uploaded (or in the process of uploading) but are not yet published to the wiki. These files are not visible to anyone but the user who uploaded them.',
+'uploadstash-summary'  => 'This page provides access to files that are uploaded or in the process of uploading, but are not yet published to the wiki. These files are not visible to anyone but the user who uploaded them.',
 'uploadstash-clear'    => 'Clear stashed files',
 'uploadstash-nofiles'  => 'You have no stashed files.',
 'uploadstash-badtoken' => 'Performing of that action was unsuccessful, perhaps because your editing credentials expired. Try again.',
@@ -2523,7 +2522,7 @@ Input: contenttype/subtype, e.g. <code>image/jpeg</code>.',
 # Unused templates
 'unusedtemplates'         => 'Unused templates',
 'unusedtemplates-summary' => '', # do not translate or duplicate this message to other languages
-'unusedtemplatestext'     => 'This page lists all pages in the {{ns:template}} namespace which are not included in another page.
+'unusedtemplatestext'     => 'This page lists all pages in the {{ns:template}} namespace that are not included in another page.
 Remember to check for other links to the templates before deleting them.',
 'unusedtemplateswlh'      => 'other links',
 
@@ -2564,12 +2563,12 @@ Remember to check for other links to the templates before deleting them.',
 'disambiguationspage'     => 'Template:disambig',
 'disambiguations-text'    => "The following pages contain at least one link to a '''disambiguation page'''.
 They may have to link to a more appropriate page instead.<br />
-A page is treated as disambiguation page if it uses a template which is linked from [[MediaWiki:Disambiguationspage]].",
+A page is treated as a disambiguation page if it uses a template that is linked from [[MediaWiki:Disambiguationspage]].",
 
 'doubleredirects'                   => 'Double redirects',
 'doubleredirects-summary'           => '', # do not translate or duplicate this message to other languages
-'doubleredirectstext'               => 'This page lists pages which redirect to other redirect pages.
-Each row contains links to the first and second redirect, as well as the target of the second redirect, which is usually the "real" target page, which the first redirect should point to.
+'doubleredirectstext'               => 'This page lists pages that redirect to other redirect pages.
+Each row contains links to the first and second redirect, as well as the target of the second redirect, which is usually the "real" target page to which the first redirect should point.
 <del>Crossed out</del> entries have been solved.',
 'double-redirect-fixed-move'        => '[[$1]] has been moved.
 It now redirects to [[$2]].',
@@ -2728,7 +2727,7 @@ You can narrow down the view by selecting a log type, the username (case-sensiti
 'allpagessubmit'          => 'Go',
 'allpagesprefix'          => 'Display pages with prefix:',
 'allpagesbadtitle'        => 'The given page title was invalid or had an inter-language or inter-wiki prefix.
-It may contain one or more characters which cannot be used in titles.',
+It may contain one or more characters that cannot be used in titles.',
 'allpages-bad-ns'         => '{{SITENAME}} does not have namespace "$1".',
 'allpages-hide-redirects' => 'Hide redirects',
 
@@ -2761,7 +2760,7 @@ Also see [[Special:WantedCategories|wanted categories]].',
 'linksearch-ok'      => 'Search',
 'linksearch-text'    => 'Wildcards such as "*.wikipedia.org" may be used.
 Needs at least a top-level domain, for example "*.org".<br />
-Supported protocols: <code>$1</code> (defaults to http:// if no protocol is specified).',
+Supported {{PLURAL:$2|protocol|protocols}}: <code>$1</code> (defaults to http:// if no protocol is specified).',
 'linksearch-line'    => '$1 is linked from $2',
 'linksearch-error'   => 'Wildcards may appear only at the start of the hostname.',
 
@@ -2775,16 +2774,12 @@ Supported protocols: <code>$1</code> (defaults to http:// if no protocol is spec
 'activeusers'            => 'Active users list',
 'activeusers-summary'    => '', # do not translate or duplicate this message to other languages
 'activeusers-intro'      => 'This is a list of users who had some kind of activity within the last $1 {{PLURAL:$1|day|days}}.',
-'activeusers-count'      => '$1 {{PLURAL:$1|edit|edits}} in the last {{PLURAL:$3|day|$3 days}}',
+'activeusers-count'      => '$1 {{PLURAL:$1|action|actions}} in the last {{PLURAL:$3|day|$3 days}}',
 'activeusers-from'       => 'Display users starting at:',
 'activeusers-hidebots'   => 'Hide bots',
 'activeusers-hidesysops' => 'Hide administrators',
 'activeusers-noresult'   => 'No users found.',
 
-# Special:Log/newusers
-'newuserlogpage'     => 'User creation log',
-'newuserlogpagetext' => 'This is a log of user creations.',
-
 # Special:ListGroupRights
 'listgrouprights'                      => 'User group rights',
 'listgrouprights-summary'              => 'The following is a list of user groups defined on this wiki, with their associated access rights.
@@ -2846,7 +2841,7 @@ The e-mail address you entered in [[Special:Preferences|your user preferences]]
 'usermessage-template' => 'MediaWiki:UserMessage', # only translate this message to other languages if you have to change it
 
 # Watchlist
-'watchlist'            => 'My watchlist',
+'watchlist'            => 'Watchlist',
 'watchlist-summary'    => '', # do not translate or duplicate this message to other languages
 'mywatchlist'          => 'Watchlist',
 'watchlistfor2'        => 'For $1 $2',
@@ -2855,8 +2850,8 @@ The e-mail address you entered in [[Special:Preferences|your user preferences]]
 'watchnologin'         => 'Not logged in',
 'watchnologintext'     => 'You must be [[Special:UserLogin|logged in]] to modify your watchlist.',
 'addwatch'             => 'Add to watchlist',
-'addedwatchtext'       => "The page \"[[:\$1]]\" has been added to your [[Special:Watchlist|watchlist]].
-Future changes to this page and its associated talk page will be listed there.",
+'addedwatchtext'       => 'The page "[[:$1]]" has been added to your [[Special:Watchlist|watchlist]].
+Future changes to this page and its associated talk page will be listed there.',
 'removewatch'          => 'Remove from watchlist',
 'removedwatchtext'     => 'The page "[[:$1]]" has been removed from [[Special:Watchlist|your watchlist]].',
 'watch'                => 'Watch',
@@ -2868,7 +2863,7 @@ Future changes to this page and its associated talk page will be listed there.",
 'watchnochange'        => 'None of your watched items were edited in the time period displayed.',
 'watchlist-details'    => '{{PLURAL:$1|$1 page|$1 pages}} on your watchlist, not counting talk pages.',
 'wlheader-enotif'      => '* E-mail notification is enabled.',
-'wlheader-showupdated' => "* Pages which have been changed since you last visited them are shown in '''bold'''",
+'wlheader-showupdated' => "* Pages that have been changed since you last visited them are shown in '''bold'''",
 'watchmethod-recent'   => 'checking recent edits for watched pages',
 'watchmethod-list'     => 'checking watched pages for recent edits',
 'watchlistcontains'    => 'Your watchlist contains $1 {{PLURAL:$1|page|pages}}.',
@@ -2885,16 +2880,16 @@ Future changes to this page and its associated talk page will be listed there.",
 'enotif_mailer'                => '{{SITENAME}} notification mailer',
 'enotif_reset'                 => 'Mark all pages visited',
 'enotif_impersonal_salutation' => '{{SITENAME}} user',
-'enotif_subject_deleted'       => '{{SITENAME}} page $1 has been deleted by {{gender:$2|$2}}',
-'enotif_subject_created'       => '{{SITENAME}} page $1 has been created by {{gender:$2|$2}}',
-'enotif_subject_moved'         => '{{SITENAME}} page $1 has been moved by {{gender:$2|$2}}',
-'enotif_subject_restored'      => '{{SITENAME}} page $1 has been restored by {{gender:$2|$2}}',
-'enotif_subject_changed'       => '{{SITENAME}} page $1 has been changed by {{gender:$2|$2}}',
-'enotif_body_intro_deleted'    => 'The {{SITENAME}} page $1 has been deleted on $PAGEEDITDATE by {{gender:$2|$2}}, see $3 for the current revision.',
-'enotif_body_intro_created'    => 'The {{SITENAME}} page $1 has been created on $PAGEEDITDATE by {{gender:$2|$2}}, see $3 for the current revision.',
-'enotif_body_intro_moved'      => 'The {{SITENAME}} page $1 has been moved on $PAGEEDITDATE by {{gender:$2|$2}}, see $3 for the current revision.',
-'enotif_body_intro_restored'   => 'The {{SITENAME}} page $1 has been restored on $PAGEEDITDATE by {{gender:$2|$2}}, see $3 for the current revision.',
-'enotif_body_intro_changed'    => 'The {{SITENAME}} page $1 has been changed on $PAGEEDITDATE by {{gender:$2|$2}}, see $3 for the current revision.',
+'enotif_subject_deleted'       => '{{SITENAME}} page $1 has been {{GENDER:$2|deleted}} by $2',
+'enotif_subject_created'       => '{{SITENAME}} page $1 has been {{GENDER:$2|created}} by $2',
+'enotif_subject_moved'         => '{{SITENAME}} page $1 has been {{GENDER:$2|moved}} by $2',
+'enotif_subject_restored'      => '{{SITENAME}} page $1 has been {{GENDER:$2|restored}} by $2',
+'enotif_subject_changed'       => '{{SITENAME}} page $1 has been {{GENDER:$2|changed}} by $2',
+'enotif_body_intro_deleted'    => 'The {{SITENAME}} page $1 has been {{GENDER:$2|deleted}} on $PAGEEDITDATE by $2, see $3.',
+'enotif_body_intro_created'    => 'The {{SITENAME}} page $1 has been {{GENDER:$2|created}} on $PAGEEDITDATE by $2, see $3 for the current revision.',
+'enotif_body_intro_moved'      => 'The {{SITENAME}} page $1 has been {{GENDER:$2|moved}} on $PAGEEDITDATE by $2, see $3 for the current revision.',
+'enotif_body_intro_restored'   => 'The {{SITENAME}} page $1 has been {{GENDER:$2|restored}} on $PAGEEDITDATE by $2, see $3 for the current revision.',
+'enotif_body_intro_changed'    => 'The {{SITENAME}} page $1 has been {{GENDER:$2|changed}} on $PAGEEDITDATE by $2, see $3 for the current revision.',
 'enotif_lastvisited'           => 'See $1 for all changes since your last visit.',
 'enotif_lastdiff'              => 'See $1 to view this change.',
 'enotif_anon_editor'           => 'anonymous user $1',
@@ -2908,7 +2903,7 @@ Contact the editor:
 mail: $PAGEEDITOR_EMAIL
 wiki: $PAGEEDITOR_WIKI
 
-There will be no other notifications in case of further changes 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. You could also reset the notification flags for all your watched pages on your watchlist.
 
                         Your friendly {{SITENAME}} notification system
 
@@ -2924,6 +2919,8 @@ $UNWATCHURL
 
 Feedback and further assistance:
 {{canonicalurl:{{MediaWiki:Helppage}}}}',
+'created'                      => 'created', # only translate this message to other languages if you have to change it
+'changed'                      => 'changed', # only translate this message to other languages if you have to change it
 
 # Delete
 'deletepage'             => 'Delete page',
@@ -2985,60 +2982,63 @@ this action has been canceled as a precaution against session hijacking.
 Go back to the previous page, reload that page and then try again.',
 
 # Protect
-'protectlogpage'              => 'Protection log',
-'protectlogtext'              => 'Below is a list of changes to page protections.
+'protectlogpage'                   => 'Protection log',
+'protectlogtext'                   => 'Below is a list of changes to page protections.
 See the [[Special:ProtectedPages|protected pages list]] for the list of currently operational page protections.',
-'protectedarticle'            => 'protected "[[$1]]"',
-'modifiedarticleprotection'   => 'changed protection level for "[[$1]]"',
-'unprotectedarticle'          => 'removed protection from "[[$1]]"',
-'movedarticleprotection'      => 'moved protection settings from "[[$2]]" to "[[$1]]"',
-'protect-title'               => 'Change protection level for "$1"',
-'protect-title-notallowed'    => 'View protection level of "$1"',
-'prot_1movedto2'              => '[[$1]] moved to [[$2]]',
-'protect-badnamespace-title'  => 'Non-protectable namespace',
-'protect-badnamespace-text'   => 'Pages in this namespace cannot be protected.',
-'protect-legend'              => 'Confirm protection',
-'protectcomment'              => 'Reason:',
-'protectexpiry'               => 'Expires:',
-'protect_expiry_invalid'      => 'Expiry time is invalid.',
-'protect_expiry_old'          => 'Expiry time is in the past.',
-'protect-unchain-permissions' => 'Unlock further protect options',
-'protect-text'                => "Here you may view and change the protection level for the page '''$1'''.",
-'protect-locked-blocked'      => "You cannot change protection levels while blocked.
+'protectedarticle'                 => 'protected "[[$1]]"',
+'modifiedarticleprotection'        => 'changed protection level for "[[$1]]"',
+'unprotectedarticle'               => 'removed protection from "[[$1]]"',
+'movedarticleprotection'           => 'moved protection settings from "[[$2]]" to "[[$1]]"',
+'protect-title'                    => 'Change protection level for "$1"',
+'protect-title-notallowed'         => 'View protection level of "$1"',
+'prot_1movedto2'                   => '[[$1]] moved to [[$2]]',
+'protect-badnamespace-title'       => 'Non-protectable namespace',
+'protect-badnamespace-text'        => 'Pages in this namespace cannot be protected.',
+'protect-norestrictiontypes-text'  => 'This page cannot be protected as there are no restriction types available.',
+'protect-norestrictiontypes-title' => 'Non-protectable page',
+'protect-legend'                   => 'Confirm protection',
+'protectcomment'                   => 'Reason:',
+'protectexpiry'                    => 'Expires:',
+'protect_expiry_invalid'           => 'Expiry time is invalid.',
+'protect_expiry_old'               => 'Expiry time is in the past.',
+'protect-unchain-permissions'      => 'Unlock further protect options',
+'protect-text'                     => "Here you may view and change the protection level for the page '''$1'''.",
+'protect-locked-blocked'           => "You cannot change protection levels while blocked.
 Here are the current settings for the page '''$1''':",
-'protect-locked-dblock'       => "Protection levels cannot be changed due to an active database lock.
+'protect-locked-dblock'            => "Protection levels cannot be changed due to an active database lock.
 Here are the current settings for the page '''$1''':",
-'protect-locked-access'       => "Your account does not have permission to change page protection levels.
+'protect-locked-access'            => "Your account does not have permission to change page protection levels.
 Here are the current settings for the page '''$1''':",
-'protect-cascadeon'           => "This page is currently protected because it is included in the following {{PLURAL:$1|page, which has|pages, which have}} cascading protection turned on.
+'protect-cascadeon'                => "This page is currently protected because it is included in the following {{PLURAL:$1|page, which has|pages, which have}} cascading protection turned on.
 You can change this page's protection level, but it will not affect the cascading protection.",
-'protect-default'             => 'Allow all users',
-'protect-fallback'            => 'Require "$1" permission',
-'protect-level-autoconfirmed' => 'Block new and unregistered users',
-'protect-level-sysop'         => 'Administrators only',
-'protect-summary-cascade'     => 'cascading',
-'protect-expiring'            => 'expires $1 (UTC)',
-'protect-expiring-local'      => 'expires $1',
-'protect-expiry-indefinite'   => 'indefinite',
-'protect-cascade'             => 'Protect pages included in this page (cascading protection)',
-'protect-cantedit'            => 'You cannot change the protection levels of this page because you do not have permission to edit it.',
-'protect-othertime'           => 'Other time:',
-'protect-othertime-op'        => 'other time',
-'protect-existing-expiry'     => 'Existing expiry time: $3, $2',
-'protect-otherreason'         => 'Other/additional reason:',
-'protect-otherreason-op'      => 'Other reason',
-'protect-dropdown'            => '*Common protection reasons
+'protect-default'                  => 'Allow all users',
+'protect-fallback'                 => 'Allow only users with "$1" permission',
+'protect-level-autoconfirmed'      => 'Allow only autoconfirmed users',
+'protect-level-sysop'              => 'Allow only administrators',
+'protect-summary-desc'             => '[$1=$2] ($3)', # only translate this message to other languages if you have to change it
+'protect-summary-cascade'          => 'cascading',
+'protect-expiring'                 => 'expires $1 (UTC)',
+'protect-expiring-local'           => 'expires $1',
+'protect-expiry-indefinite'        => 'indefinite',
+'protect-cascade'                  => 'Protect pages included in this page (cascading protection)',
+'protect-cantedit'                 => 'You cannot change the protection levels of this page because you do not have permission to edit it.',
+'protect-othertime'                => 'Other time:',
+'protect-othertime-op'             => 'other time',
+'protect-existing-expiry'          => 'Existing expiry time: $3, $2',
+'protect-otherreason'              => 'Other/additional reason:',
+'protect-otherreason-op'           => 'Other reason',
+'protect-dropdown'                 => '*Common protection reasons
 ** Excessive vandalism
 ** Excessive spamming
 ** Counter-productive edit warring
 ** High traffic page',
-'protect-edit-reasonlist'     => 'Edit protection reasons',
-'protect-expiry-options'      => '1 hour:1 hour,1 day:1 day,1 week:1 week,2 weeks:2 weeks,1 month:1 month,3 months:3 months,6 months:6 months,1 year:1 year,infinite:infinite',
-'restriction-type'            => 'Permission:',
-'restriction-level'           => 'Restriction level:',
-'minimum-size'                => 'Min size',
-'maximum-size'                => 'Max size:',
-'pagesize'                    => '(bytes)',
+'protect-edit-reasonlist'          => 'Edit protection reasons',
+'protect-expiry-options'           => '1 hour:1 hour,1 day:1 day,1 week:1 week,2 weeks:2 weeks,1 month:1 month,3 months:3 months,6 months:6 months,1 year:1 year,infinite:infinite',
+'restriction-type'                 => 'Permission:',
+'restriction-level'                => 'Restriction level:',
+'minimum-size'                     => 'Min size',
+'maximum-size'                     => 'Max size:',
+'pagesize'                         => '(bytes)',
 
 # Restrictions (nouns)
 'restriction-edit'   => 'Edit',
@@ -3336,7 +3336,7 @@ You can update redirects that point to the original title automatically.
 If you choose not to, be sure to check for [[Special:DoubleRedirects|double]] or [[Special:BrokenRedirects|broken redirects]].
 You are responsible for making sure that links continue to point where they are supposed to go.
 
-Note that the page will '''not''' be moved if there is already a page at the new title, unless it is empty or a redirect and has no past edit history.
+Note that the page will '''not''' be moved if there is already a page at the new title, unless the latter is a redirect and has no past edit history.
 This means that you can rename a page back to where it was renamed from if you make a mistake, and you cannot overwrite an existing page.
 
 '''Warning!'''
@@ -3347,7 +3347,7 @@ The old title will become a redirect page to the new title.
 Be sure to check for [[Special:DoubleRedirects|double]] or [[Special:BrokenRedirects|broken redirects]].
 You are responsible for making sure that links continue to point where they are supposed to go.
 
-Note that the page will '''not''' be moved if there is already a page at the new title, unless it is empty or a redirect and has no past edit history.
+Note that the page will '''not''' be moved if there is already a page at the new title, unless it is a redirect and has no past edit history.
 This means that you can rename a page back to where it was renamed from if you make a mistake, and you cannot overwrite an existing page.
 
 '''Warning!'''
@@ -3784,6 +3784,7 @@ This is probably caused by a link to a blacklisted external site.',
 'pageinfo-hidden-categories'      => 'Hidden {{PLURAL:$1|category|categories}} ($1)',
 'pageinfo-templates'              => 'Transcluded {{PLURAL:$1|template|templates}} ($1)',
 'pageinfo-footer'                 => '-', # do not translate or duplicate this message to other languages
+'pageinfo-transclusions'          => '{{PLURAL:$1|Page|Pages}} transcluded on ($1)',
 'pageinfo-toolboxlink'            => 'Page information',
 'pageinfo-redirectsto'            => 'Redirects to',
 'pageinfo-redirectsto-info'       => 'info',
@@ -3792,6 +3793,10 @@ This is probably caused by a link to a blacklisted external site.',
 'pageinfo-protect-cascading'      => 'Protections are cascading from here',
 'pageinfo-protect-cascading-yes'  => 'Yes',
 'pageinfo-protect-cascading-from' => 'Protections are cascading from',
+'pageinfo-category-info'          => 'Category information',
+'pageinfo-category-pages'         => 'Number of pages',
+'pageinfo-category-subcats'       => 'Number of subcategories',
+'pageinfo-category-files'         => 'Number of files',
 
 # Skin names
 'skinname-standard'    => 'Classic', # only translate this message to other languages if you have to change it
@@ -3886,6 +3891,8 @@ By executing it, your system may be compromised.",
 'minutes'        => '{{PLURAL:$1|$1 minute|$1 minutes}}',
 'hours'          => '{{PLURAL:$1|$1 hour|$1 hours}}',
 'days'           => '{{PLURAL:$1|$1 day|$1 days}}',
+'months'         => '{{PLURAL:$1|$1 month|$1 months}}',
+'years'          => '{{PLURAL:$1|$1 year|$1 years}}',
 'ago'            => '$1 ago',
 'just-now'       => 'just now',
 
@@ -4779,7 +4786,7 @@ Images are shown in full resolution, other file types are started with their ass
 'specialpages-group-highuse'     => 'High use pages',
 'specialpages-group-pages'       => 'Lists of pages',
 'specialpages-group-pagetools'   => 'Page tools',
-'specialpages-group-wiki'        => 'Wiki data and tools',
+'specialpages-group-wiki'        => 'Data and tools',
 'specialpages-group-redirects'   => 'Redirecting special pages',
 'specialpages-group-spam'        => 'Spam tools',
 
@@ -4879,8 +4886,12 @@ This site is experiencing technical difficulties.',
 'logentry-newusers-newusers'          => 'User account $1 was created',
 'logentry-newusers-create'            => 'User account $1 was created',
 'logentry-newusers-create2'           => 'User account $3 was created by $1',
+'logentry-newusers-byemail'           => 'User account $3 was created by $1 and password was sent by e-mail',
 'logentry-newusers-autocreate'        => 'User account $1 was created automatically',
-'newuserlog-byemail'                  => 'password sent by e-mail',
+'logentry-rights-rights'              => '$1 changed group membership for $3 from $4 to $5',
+'logentry-rights-rights-legacy'       => '$1 changed group membership for $3',
+'logentry-rights-autopromote'         => '$1 was automatically promoted from $4 to $5',
+'rightsnone'                          => '(none)',
 
 # For IRC, see bug 34508. Do not change
 'revdelete-logentry'          => 'changed revision visibility of "[[$1]]"', # do not translate or duplicate this message to other languages
@@ -4904,6 +4915,8 @@ This site is experiencing technical difficulties.',
 'newuserlog-create-entry'     => 'New user account', # do not translate or duplicate this message to other languages
 'newuserlog-create2-entry'    => 'created new account $1', # do not translate or duplicate this message to other languages
 'newuserlog-autocreate-entry' => 'Account created automatically', # do not translate or duplicate this message to other languages
+'rightslogentry'              => 'changed group membership for $1 from $2 to $3', # do not translate or duplicate this message to other languages
+'rightslogentry-autopromote'  => 'was automatically promoted from $2 to $3', # do not translate or duplicate this message to other languages
 
 # Feedback
 'feedback-bugornote' => 'If you are ready to describe a technical problem in detail please [$1 report a bug].
@@ -4957,6 +4970,7 @@ Otherwise, you can use the easy form below. Your comment will be added to the pa
 'api-error-ok-but-empty'                  => 'Internal error: No response from server.',
 'api-error-overwrite'                     => 'Overwriting an existing file is not allowed.',
 'api-error-stashfailed'                   => 'Internal error: Server failed to store temporary file.',
+'api-error-publishfailed'                 => 'Internal error: Server failed to publish temporary file.',
 'api-error-timeout'                       => 'The server did not respond within the expected time.',
 'api-error-unclassified'                  => 'An unknown error occurred.',
 'api-error-unknown-code'                  => 'Unknown error: "$1".',
index 67bb7f9..a0f8627 100644 (file)
@@ -11,6 +11,7 @@
  * @author Airon90
  * @author Amikeco
  * @author Amire80
+ * @author Anakmalaysia
  * @author ArnoLagrange
  * @author Blahma
  * @author Castelobranco
@@ -18,6 +19,7 @@
  * @author Jens Liebenau
  * @author Kaganer
  * @author Karika
+ * @author KuboF
  * @author Lucas
  * @author LyzTyphone
  * @author Malafaya
@@ -29,6 +31,7 @@
  * @author Omnipaedista
  * @author Pedroca cerebral
  * @author Petrus Adamus
+ * @author Renardo
  * @author Smeira
  * @author ThomasPusch
  * @author Tlustulimu
@@ -719,12 +722,12 @@ La administranto kiu ŝlosis ĝin proponis tiun klarigon: "$3".',
 'virus-unknownscanner' => 'nekonata kontraŭviruso:',
 
 # Login and logout pages
-'logouttext' => "'''Vi nun estas elsalutita.'''
+'logouttext' => "'''Vi nun estas elsalutinta.'''
 
 Vi rajtas daŭre vikiumi sennome, aŭ vi povas <span class='plainlinks'>[$1 reensaluti]</span> kiel la sama aŭ kiel alia uzanto.
-Notu ke iuj paĝoj daŭre ŝajnos kvazaŭ vi ankoraŭ estas ensalutita, ĝis vi refreŝigu vian retumilan kaŝmemoron.",
+Notu ke iuj paĝoj daŭre ŝajnos kvazaŭ vi ankoraŭ estus ensalutinta, ĝis vi refreŝigos kaŝmemoron de via retumilo.",
 'welcomeuser' => 'Bonvenon, $1!',
-'welcomecreation-msg' => 'Vian konton kreis.
+'welcomecreation-msg' => 'Via konto estas kreita.
 Ne forgesu ŝanĝi viajn [[Special:Preferences|{{SITENAME}}-preferojn]]',
 'yourname' => 'Salutnomo:',
 'yourpassword' => 'Pasvorto:',
@@ -748,7 +751,7 @@ Ne forgesu ŝanĝi viajn [[Special:Preferences|{{SITENAME}}-preferojn]]',
 'gotaccount' => "Ĉu vi jam havas konton? '''$1'''.",
 'gotaccountlink' => 'Ensaluti',
 'userlogin-resetlink' => 'Ĉu vi forgesis ensalutajn detalojn?',
-'createaccountmail' => 'retpoŝte',
+'createaccountmail' => 'Uzi provizoran hazardsignan pasvorton kaj sendi ĝin al la retpoŝto suben',
 'createaccountreason' => 'Kialo:',
 'badretype' => 'La pasvortojn kiujn vi tajpis ne egalas.',
 'userexists' => 'Salutnomo enigita jam estas uzata.
@@ -884,6 +887,7 @@ Provizora pasvorto: $2',
 'changeemail-oldemail' => 'Aktuala retpoŝtadreso:',
 'changeemail-newemail' => 'Nova retpoŝtadreso:',
 'changeemail-none' => '(nenio)',
+'changeemail-password' => 'Via {{SITENAME}}-ensalutado:',
 'changeemail-submit' => 'Ŝanĝi retpoŝtadreson',
 'changeemail-cancel' => 'Nuligi',
 
@@ -1065,7 +1069,6 @@ Jen la lasta protokolero por via referenco:",
 'template-semiprotected' => '(duone protektita)',
 'hiddencategories' => 'Ĉi tiu paĝo estas membro de {{PLURAL:$1|1 kaŝita kategorio|$1 kaŝitaj kategorioj}}:',
 'edittools' => '<!-- Teksto ĉi tie estas montrata sub redaktaj kaj alŝutaj formularoj. -->',
-'nocreatetitle' => 'Paĝa kreado estas limigita',
 'nocreatetext' => '{{SITENAME}} restriktas la eblecon krei novajn paĝojn. Vi povas reiri kaj redakti faritan paĝon, aŭ [[Special:UserLogin|ensaluti aŭ krei konton]].',
 'nocreate-loggedin' => 'Vi ne rajtas krei novajn paĝojn.',
 'sectioneditnotsupported-title' => 'Redaktado de ĉi tiu sekcio ne estas subtenata',
@@ -1450,7 +1453,7 @@ Jen hazarde generita valoro por via uzo: $1',
 'timezoneregion-indian' => 'Hinda Oceano',
 'timezoneregion-pacific' => 'Pacifiko',
 'allowemail' => 'Rajtigi retmesaĝojn de aliaj uzantoj',
-'prefs-searchoptions' => 'Serĉu',
+'prefs-searchoptions' => 'Serĉi',
 'prefs-namespaces' => 'Nomspacoj',
 'defaultns' => 'Alimaniere, traserĉi la jenajn nomspacojn:',
 'default' => 'defaŭlte',
@@ -1463,9 +1466,9 @@ Jen hazarde generita valoro por via uzo: $1',
 'prefs-emailconfirm-label' => 'Retpoŝta konfirmado:',
 'prefs-textboxsize' => 'Grandeco de redakta fenestro',
 'youremail' => 'Retadreso:',
-'username' => 'Salutnomo:',
-'uid' => 'Uzant-ID:',
-'prefs-memberingroups' => 'Ano de {{PLURAL:$1|grupo|grupoj}}:',
+'username' => '{{GENDER:$1|Salutnomo}}:',
+'uid' => '{{GENDER:$1|Uzanto}}-identaĵo:',
+'prefs-memberingroups' => '{{GENDER:$2|Ano}} de {{PLURAL:$1|grupo|grupoj}}:',
 'prefs-registration' => 'Tempo de registrado:',
 'yourrealname' => 'Vera nomo:',
 'yourlanguage' => 'Lingvo',
@@ -1613,15 +1616,13 @@ Jen hazarde generita valoro por via uzo: $1',
 'right-sendemail' => 'Sendi retpoŝton al aliaj uzantoj',
 'right-passwordreset' => 'Vidi retpoŝtojn de pasvorta restarado.',
 
+# Special:Log/newusers
+'newuserlogpage' => 'Protokolo de uzanto-kreado',
+'newuserlogpagetext' => 'Jen protokolo de lastaj kreadoj de uzantoj.',
+
 # User rights log
 'rightslog' => 'Protokolo de uzanto-rajtoj',
 'rightslogtext' => 'Ĉi tio estas protokolo pri la ŝanĝoj de uzantorajtoj.',
-'rightslogentry' => 'ŝanĝis grupan membrecon por $1 de $2 al $3',
-'rightslogentry-autopromote' => 'estis aŭtomate altrangigita de $2 al $3',
-'logentry-rights-rights' => '$1 ŝanĝis grupan membrecon por $3 de $4 al $5',
-'logentry-rights-rights-legacy' => '$1 ŝanĝis grupan membrecon por $3',
-'logentry-rights-autopromote' => '$1 estis aŭtomate altrangigita de $4 al $5',
-'rightsnone' => '(nenia)',
 
 # Associated actions - in the sentence "You do not have permission to X"
 'action-read' => 'legi ĉi tiun paĝon',
@@ -2236,7 +2237,7 @@ Vidu ankaŭ [[Special:WantedCategories|Dezirataj kategorioj]].',
 'linksearch-ns' => 'Nomspaco:',
 'linksearch-ok' => 'Serĉi',
 'linksearch-text' => 'Regulesprimoj kiel "*.wikipedia.org" povas esti uzataj. Nepre havi almenaŭ plej altan domajnon, ekz-e "*.org".<br />
-Subtenataj protokoloj: <code>$1</code> (ne aldonu ĉi tiujn ajn en via serĉo-mendo).',
+Subtenataj {{PLURAL:$2|protokolo|protokoloj}}:: <code>$1</code> (ne aldonu ĉi tiujn ajn en via serĉo-mendo).',
 'linksearch-line' => '$1 ligita de $2',
 'linksearch-error' => 'Regulesprimoj povas aperi nur ĉe la komenco de la retnoda nomo.',
 
@@ -2255,10 +2256,6 @@ Subtenataj protokoloj: <code>$1</code> (ne aldonu ĉi tiujn ajn en via serĉo-me
 'activeusers-hidesysops' => 'Kaŝi administrantojn',
 'activeusers-noresult' => 'Neniuj uzantoj trovitaj.',
 
-# Special:Log/newusers
-'newuserlogpage' => 'Protokolo de uzanto-kreado',
-'newuserlogpagetext' => 'Jen protokolo de lastaj kreadoj de uzantoj.',
-
 # Special:ListGroupRights
 'listgrouprights' => 'Gruprajtoj de uzantoj',
 'listgrouprights-summary' => 'Jen listo de uzanto-grupoj difinitaj en ĉi tiu vikio, kun ties asociaj atingrajtoj.
@@ -2316,7 +2313,7 @@ La retadreso kiun vi enigis en [[Special:Preferences|viaj preferoj]] aperos kiel
 'usermessage-editor' => 'Mesaĝanto de sistemo',
 
 # Watchlist
-'watchlist' => 'Atentaro',
+'watchlist' => 'Mia atentaro',
 'mywatchlist' => 'Atentaro',
 'watchlistfor2' => 'Por $1 $2',
 'nowatchlist' => 'Vi ne jam elektis priatenti iun ajn paĝon.',
@@ -2324,7 +2321,7 @@ La retadreso kiun vi enigis en [[Special:Preferences|viaj preferoj]] aperos kiel
 'watchnologin' => 'Ne ensalutinta',
 'watchnologintext' => 'Nepras [[Special:UserLogin|ensaluti]] por ŝanĝi vian atentaron.',
 'addwatch' => 'Aldoniĝi al atentaro',
-'addedwatchtext' => "La paĝo \"[[:\$1]]\" estis aldonita al via [[Special:Watchlist|atentaro]]. Estontaj ŝanĝoj de tiu ĉi paĝo aperos en '''grasa tiparo''' en la [[Special:RecentChanges|listo de Lastaj Ŝanĝoj]], kaj estos listigitaj en via atentaro. Se vi poste volos forigi la paĝon el via atentaro, alklaku \"Malatentu paĝon\" en la ilobreto.",
+'addedwatchtext' => 'La paĝo "[[:$1]]" aldoniĝis al via [[Special:Watchlist|atentaro]]. Estontaj ŝanĝoj de tiu paĝo kaj de ĝia rilata diskutpaĝo aperos tie.',
 'removewatch' => 'Forigi el atentaro',
 'removedwatchtext' => 'La paĝo "[[:$1]]" estas forigita el via [[Special:Watchlist|atentaro]].',
 'watch' => 'Atenti',
@@ -2358,7 +2355,7 @@ La retadreso kiun vi enigis en [[Special:Preferences|viaj preferoj]] aperos kiel
 'enotif_subject_moved' => 'La paĝon $1 de {{SITENAME}} movis {{gender:$2|$2}}',
 'enotif_subject_restored' => 'La paĝon $1 de {{SITENAME}} remetis {{gender:$2|$2}}',
 'enotif_subject_changed' => 'La paĝon $1 de {{SITENAME}} ŝanĝis {{gender:$2|$2}}',
-'enotif_body_intro_deleted' => 'La paĝon $1 de {{SITENAME}} forigis {{gender:$2|$2}} je $PAGEEDITDATE; bonvole vidu $3 pri la nuna revizio.',
+'enotif_body_intro_deleted' => 'La paĝon $1 de {{SITENAME}} forigis {{gender:$2|$2}} je $PAGEEDITDATE; bonvole vidu $3.',
 'enotif_body_intro_created' => 'La paĝon $1 de {{SITENAME}} kreis {{gender:$2|$2}} je $PAGEEDITDATE; bonvole vidu $3 pri la nuna revizio.',
 'enotif_body_intro_moved' => 'La paĝon $1 de {{SITENAME}} movis {{gender:$2|$2}} je $PAGEEDITDATE; bonvole vidu $3 pri la nuna revizio.',
 'enotif_body_intro_restored' => 'La paĝon $1 de {{SITENAME}} remetis {{gender:$2|$2}} je $PAGEEDITDATE; bonvole vidu $3 pri la nuna revizio.',
@@ -2395,6 +2392,8 @@ $UNWATCHURL
 
 Komentoj kaj plia helpo:
 {{canonicalurl:{{MediaWiki:Helppage}}}}',
+'created' => 'kreita',
+'changed' => 'ŝanĝita',
 
 # Delete
 'deletepage' => 'Forigi paĝon',
@@ -2962,6 +2961,7 @@ Datoj de versioj kaj nomoj de redaktantoj estos preservitaj.
 'import-error-interwiki' => 'Paĝo "$1" ne estis importita pro sia nomo estas deklarita por ekstera ligado (intervikia).',
 'import-error-special' => 'Paĝo "$1" ne estas importata, ĉar ĝi apartenas al speciala nomspaco, kiu ne permesas paĝojn.',
 'import-error-invalid' => 'Paĝo "$1" ne estas importata, ĉar ĝia nomo estas malvalida.',
+'import-error-unserialize' => 'La revizio n-ro $2 de la paĝo nomata "$1" ne povis senseriiĝi. La revizio raportiĝis uzi enhavmodelon n-ro $3, kiu seriiĝis kiel n-ro $4.',
 'import-options-wrong' => '{{PLURAL:$2|Erara elekto|Eraraj elektoj}}: <nowiki>$1</nowiki>',
 'import-rootpage-invalid' => 'La provizita paĝo havas nevalidan titolon.',
 'import-rootpage-nosubpage' => 'La nomspaco "$1" de la radikopaĝo ne permesas subpaĝoj.',
@@ -3152,6 +3152,10 @@ Datoj de versioj kaj nomoj de redaktantoj estos preservitaj.
 'pageinfo-protect-cascading' => 'Protektado kaskade fontas el ĉi tie',
 'pageinfo-protect-cascading-yes' => 'Jes',
 'pageinfo-protect-cascading-from' => 'Protektado kaskade fontas el',
+'pageinfo-category-info' => 'Informo pri kategorio',
+'pageinfo-category-pages' => 'Nombro de paĝoj',
+'pageinfo-category-subcats' => 'Nombro de subkategorioj',
+'pageinfo-category-files' => 'Nombro de dosieroj',
 
 # Skin names
 'skinname-standard' => 'Klasiko',
@@ -3208,6 +3212,7 @@ $1',
 'file-nohires' => 'Nenia pli granda distingivo havebla.',
 'svg-long-desc' => 'SVG-dosiero, $1 × $2 rastrumeroj, grandeco de dosiero: $3',
 'svg-long-desc-animated' => 'Animata SVG-dosiero, $1 × $2 rastrumeroj, grandeco de dosiero: $3',
+'svg-long-error' => 'Malvalida SVG-dosiero: $1',
 'show-big-image' => 'Plena distingivo',
 'show-big-image-preview' => 'Grandeco de ĉi antaŭvido: $1.',
 'show-big-image-other' => '{{PLURAL:$2|Alia distingivo|Aliaj distingivoj}}: $1.',
@@ -3237,6 +3242,8 @@ $1',
 'minutes' => '{{PLURAL:$1|$1 minuto|$1 minutoj}}',
 'hours' => '{{PLURAL:$1|$1 horo|$1 horoj}}',
 'days' => '{{PLURAL:$1|$1 tago|$1 tagoj}}',
+'months' => '{{PLURAL:$1|$1 monato|$1 monatoj}}',
+'years' => '{{PLURAL:$1|$1 jaro|$1 jaroj}}',
 'ago' => 'antaŭ $1',
 'just-now' => 'ĵus nune',
 
@@ -3948,7 +3955,7 @@ Bildoj montriĝas en plena distingivo, aliaj dosiertipoj estas malfermataj rekte
 'specialpages-group-highuse' => 'Plej uzitaj paĝoj',
 'specialpages-group-pages' => 'Listoj de paĝoj',
 'specialpages-group-pagetools' => 'Paĝaj iloj',
-'specialpages-group-wiki' => 'Vikidatenoj kaj iloj',
+'specialpages-group-wiki' => 'Datenoj kaj iloj',
 'specialpages-group-redirects' => 'Alidirektantaj specialaj paĝoj',
 'specialpages-group-spam' => 'Kontraŭspamiloj',
 
@@ -4046,7 +4053,10 @@ Bildoj montriĝas en plena distingivo, aliaj dosiertipoj estas malfermataj rekte
 'logentry-newusers-create' => '$1 kreis konton',
 'logentry-newusers-create2' => '$1 kreis uzanton $3',
 'logentry-newusers-autocreate' => 'Konto $1 estis kreita aŭtomate',
-'newuserlog-byemail' => 'pasvorto sendita retpoŝte',
+'logentry-rights-rights' => '$1 ŝanĝis grupan membrecon por $3 de $4 al $5',
+'logentry-rights-rights-legacy' => '$1 ŝanĝis grupan membrecon por $3',
+'logentry-rights-autopromote' => '$1 estis aŭtomate altrangigita de $4 al $5',
+'rightsnone' => '(nenia)',
 
 # Feedback
 'feedback-bugornote' => 'Se vi pretas priskribi teknikan problemon detale, bonvolu [$1 raporti cimon].
@@ -4099,7 +4109,8 @@ Aŭ vi povas uzi la facilan formularon sube. Via komento estos aldonita al la pa
 'api-error-nomodule' => 'Interna eraro: ne troveblas alŝuta helpilaro.',
 'api-error-ok-but-empty' => 'Interna eraro: nenia respondo de la servilo.',
 'api-error-overwrite' => 'Anstataŭigo de ekzistanta dosiero ne permesatas.',
-'api-error-stashfailed' => 'Interna eraro: la servilo malsukcesis stoki dumtempan dosieron.',
+'api-error-stashfailed' => 'Interna eraro: la servilo malsukcesis stoki provizoran dosieron.',
+'api-error-publishfailed' => 'Interna eraro: Servilo malsukcesis eldoni provizoran dosieron.',
 'api-error-timeout' => 'La servilo ne respondis ene de la antaŭvidita tempo.',
 'api-error-unclassified' => 'Okazis nekonata eraro',
 'api-error-unknown-code' => 'Nekonata eraro: "$1"',
@@ -4120,6 +4131,4 @@ Aŭ vi povas uzi la facilan formularon sube. Via komento estos aldonita al la pa
 'duration-centuries' => '$1 {{PLURAL:$1|jarcento|jarcentoj}}',
 'duration-millennia' => '$1 {{PLURAL:$1|jarmilo|jarmiloj}}',
 
-# Unknown messages
-'svg-long-error' => 'Malvalida SVG-dosiero: $1',
 );
index 867beae..0fb1a80 100644 (file)
@@ -43,6 +43,7 @@
  * @author Fluence
  * @author Gustronico
  * @author Gwickwire
+ * @author Hazard-SJ
  * @author Hercule
  * @author Icvav
  * @author Imre
@@ -78,6 +79,7 @@
  * @author Spacebirdy
  * @author Technorum
  * @author The Evil IP address
+ * @author TheBITLINK
  * @author Titoxd
  * @author Toniher
  * @author Translationista
@@ -493,6 +495,7 @@ $messages = array(
 'newwindow' => '(se abre en una ventana nueva)',
 'cancel' => 'Cancelar',
 'moredotdotdot' => 'Más...',
+'morenotlisted' => 'Más no en la lista...',
 'mypage' => 'Mi página',
 'mytalk' => 'Discusión',
 'anontalk' => 'Discusión para esta IP',
@@ -575,7 +578,7 @@ $messages = array(
 'viewtalkpage' => 'Ver discusión',
 'otherlanguages' => 'Otros idiomas',
 'redirectedfrom' => '(Redirigido desde «$1»)',
-'redirectpagesub' => 'Página redirigida',
+'redirectpagesub' => 'Página de redirección',
 'lastmodifiedat' => 'Esta página fue modificada por última vez el $1, a las $2.',
 'viewcount' => 'Esta página ha sido visitada {{PLURAL:$1|una vez|$1 veces}}.',
 'protectedpage' => 'Página protegida',
@@ -615,7 +618,7 @@ $1',
 'badaccess-group0' => 'No estás autorizado a ejecutar la acción solicitada.',
 'badaccess-groups' => 'La acción que has solicitado está restringida a los usuarios {{PLURAL:$2|del grupo|de uno de estos $2 grupos}}: $1.',
 
-'versionrequired' => 'La versión $1 de MediaWiki es necesaria para utilizar esta página',
+'versionrequired' => 'Se requiere la versión $1 de MediaWiki.',
 'versionrequiredtext' => 'Se necesita la versión $1 de MediaWiki para utilizar esta página. Para más información, consultar [[Special:Version|la página de versión]]',
 
 'ok' => 'Aceptar',
@@ -867,6 +870,7 @@ Puedes ignorar este mensaje si esta cuenta fue creada por error.',
 # E-mail sending
 'php-mail-error-unknown' => 'Error desconocido en la función mail() de PHP.',
 'user-mail-no-addy' => 'Se ha intentado enviar correo electrónico sin una dirección de correo electrónico.',
+'user-mail-no-body' => 'Trató de enviar un correo electrónico con un cuerpo vacío o excesivamente corto.',
 
 # Change password dialog
 'resetpass' => 'Cambiar la contraseña',
@@ -926,14 +930,15 @@ Contraseña temporal: $2',
 'passwordreset-emailerror-capture' => 'Un recordatorio por correo electrónico fue generado, que se muestra a continuación, pero el envío al usuario falló: $1',
 
 # Special:ChangeEmail
-'changeemail' => 'Cambiar la dirección de correo-e',
-'changeemail-header' => 'Cambiar la dirección de correo-e de la cuenta',
+'changeemail' => 'Cambiar la dirección de correo electrónico',
+'changeemail-header' => 'Cambiar la dirección de correo electrónico de la cuenta',
 'changeemail-text' => 'Rellena este formulario para cambiar tu dirección de correo electrónico. Debes introducir la contraseña para confirmar este cambio.',
 'changeemail-no-info' => 'Debes iniciar sesión para acceder directamente a esta página.',
-'changeemail-oldemail' => 'Dirección de correo-e actual:',
-'changeemail-newemail' => 'Nueva dirección de correo-e:',
+'changeemail-oldemail' => 'Dirección de correo electrónico actual:',
+'changeemail-newemail' => 'Nueva dirección de correo electrónico:',
 'changeemail-none' => '(ninguna)',
-'changeemail-submit' => 'Cambiar correo-e',
+'changeemail-password' => 'Tu contraseña en {{SITENAME}}:',
+'changeemail-submit' => 'Cambiar correo electrónico',
 'changeemail-cancel' => 'Cancelar',
 
 # Edit page toolbar
@@ -1092,10 +1097,10 @@ Si la guardas, se perderán los cambios realizados desde esta revisión.",
 '''¡No uses escritos con copyright sin permiso!'''",
 'longpageerror' => "'''Error: El texto que has enviado ocupa {{PLURAL:$1|un kilobyte|$1 kilobytes}}, que excede el máximo de {{PLURAL:$2|un kilobyte|$2 kilobytes}}.''' 
 No se lo puede guardar.",
-'readonlywarning' => "'''Aviso: La base de datos ha sido bloqueada por cuestiones de mantenimiento, así que no podrás guardar tus modificaciones en este momento.
-Puedes copiar y pegar el texto en un archivo y guardarlo para más tarde.'''
+'readonlywarning' => "'''Advertencia: La base de datos ha sido bloqueada para mantenimiento, así que no podrás guardar tus ediciones en este momento.'''
+Quizás quieras copiar y pegar tu texto en un archivo de texto y guardarlo para después.
 
-El administrador que la bloqueó dio esta explicación: $1",
+El administrador que lo bloqueó ofreció esta explicación: $1",
 'protectedpagewarning' => "'''Aviso: Esta página ha sido protegida de manera que solo usuarios con permisos de administrador puedan editarla.'''
 A continuación se muestra la última entrada de registro para referencia:",
 'semiprotectedpagewarning' => "'''Nota:''' Esta página ha sido protegida para que solo usuarios registrados puedan editarla.
@@ -1110,7 +1115,6 @@ A continuación se muestra la última entrada de registro para referencia:",
 'template-semiprotected' => '(semiprotegida)',
 'hiddencategories' => 'Esta página es un miembro de {{PLURAL:$1|1 categoría oculta|$1 categorías ocultas}}:',
 'edittools' => '<!-- Este texto aparecerá bajo los formularios de edición y subida. -->',
-'nocreatetitle' => 'Creación de páginas limitada',
 'nocreatetext' => '{{SITENAME}} ha restringido la posibilidad de crear nuevas páginas.
 Puede volver atrás y editar una página existente, [[Special:UserLogin|identificarte o crear una cuenta]].',
 'nocreate-loggedin' => 'No tienes permiso para crear páginas nuevas.',
@@ -1457,8 +1461,8 @@ Mientras tanto puedes buscar mediante Google, pero ten en cuenta que sus índice
 'prefs-watchlist-token' => 'Ficha de lista de seguimiento:',
 'prefs-misc' => 'Miscelánea',
 'prefs-resetpass' => 'Cambiar contraseña',
-'prefs-changeemail' => 'Cambiar correo-e',
-'prefs-setemail' => 'Establecer una dirección de correo-e',
+'prefs-changeemail' => 'Cambiar correo electrónico',
+'prefs-setemail' => 'Establecer una dirección de correo electrónico',
 'prefs-email' => 'Opciones de correo electrónico',
 'prefs-rendering' => 'Apariencia',
 'saveprefs' => 'Guardar',
@@ -1511,9 +1515,9 @@ Esto no se puede deshacer.',
 'prefs-textboxsize' => 'Tamaño de la página de edición',
 'youremail' => 'Correo electrónico:',
 'username' => '{{GENDER:$1|Nombre de usuario|Nombre de usuaria}}:',
-'uid' => ' ID de {{GENDER:$1|usuario|usuaria}}:',
+'uid' => 'ID de {{GENDER:$1|usuario|usuaria}}:',
 'prefs-memberingroups' => '{{GENDER:$2|Miembro}} {{PLURAL:$1|del grupo|de los grupos}}:',
-'prefs-registration' => 'Hora de registro:',
+'prefs-registration' => 'Fecha y hora de registro:',
 'yourrealname' => 'Nombre real:',
 'yourlanguage' => 'Idioma:',
 'yourvariant' => 'Variante lingüística del contenido:',
@@ -1660,15 +1664,13 @@ Tu dirección de correo no se revela cuando otros usuarios te contactan.',
 'right-sendemail' => 'Enviar un correo electrónico a otros usuarios',
 'right-passwordreset' => 'Ver os correos electrónicos de restablecimiento de contraseñas',
 
+# Special:Log/newusers
+'newuserlogpage' => 'Registro de creación de usuarios',
+'newuserlogpagetext' => 'Este es un registro de creación de usuarios.',
+
 # User rights log
 'rightslog' => 'Cambios de perfil de usuario',
 'rightslogtext' => 'Este es un registro de cambios en los permisos de usuarios.',
-'rightslogentry' => 'modificó los grupos a los que pertenece $1: de $2 a $3',
-'rightslogentry-autopromote' => 'fue promovido automáticamente desde $2 a $3',
-'logentry-rights-rights' => '$1 modificó los grupos a los que pertenece $3: de $4 a $5',
-'logentry-rights-rights-legacy' => '$1 ha cambiado la pertenencia a grupos de $3',
-'logentry-rights-autopromote' => '$1 fue promocionado automáticamente de $4 a $5',
-'rightsnone' => '(ninguno)',
 
 # Associated actions - in the sentence "You do not have permission to X"
 'action-read' => 'leer esta página',
@@ -2295,7 +2297,7 @@ Véase también las [[Special:WantedCategories|categorías requeridas]].',
 'linksearch-ok' => 'Buscar',
 'linksearch-text' => 'Se pueden usar caracteres comodín como "*.wikipedia.org".
 Es necesario, por lo menos, un dominio de alto nivel, por ejemplo "*.org".<br />
-Protocolos soportados: <code>$1</code> (si no se especifica ninguno, el protocolo por defecto es http://).',
+{{PLURAL:$2|Protocolo|Protocolos}} soportados: <code>$1</code> (si no se especifica ninguno, el protocolo por defecto es http://).',
 'linksearch-line' => '$1 enlazado desde $2',
 'linksearch-error' => 'Los comodines sólo pueden aparecer al principio del nombre de sitio.',
 
@@ -2308,16 +2310,12 @@ Protocolos soportados: <code>$1</code> (si no se especifica ninguno, el protocol
 # Special:ActiveUsers
 'activeusers' => 'Lista de usuarios activos',
 'activeusers-intro' => 'Esta es una lista de usuarios que han tenido alguna actividad en los últimos $1 {{PLURAL:$1|día|días}}.',
-'activeusers-count' => '$1 {{PLURAL:$1|edición|ediciones}} en los últimos {{PLURAL:$3|día|$3 días}}',
+'activeusers-count' => '$1 {{PLURAL:$1|acción|acciones}} en los últimos {{PLURAL:$3|día|$3 días}}',
 'activeusers-from' => 'Mostrando a los usuarios empezando por:',
 'activeusers-hidebots' => 'Ocultar robots',
 'activeusers-hidesysops' => 'Ocultar administradores',
 'activeusers-noresult' => 'No se encontraron usuarios.',
 
-# Special:Log/newusers
-'newuserlogpage' => 'Registro de creación de usuarios',
-'newuserlogpagetext' => 'Este es un registro de creación de usuarios.',
-
 # Special:ListGroupRights
 'listgrouprights' => 'Permisos del grupo de usuarios',
 'listgrouprights-summary' => 'La siguiente es una lista de los grupos de usuario definidos en esta wiki y de sus privilegios de acceso asociados.
@@ -2383,7 +2381,7 @@ La dirección de correo electrónico que indicaste en [[Special:Preferences|tus
 'watchnologin' => 'No has iniciado sesión',
 'watchnologintext' => 'Debes [[Special:UserLogin|iniciar sesión]] para modificar tu lista de seguimiento.',
 'addwatch' => 'Añadir a la lista de seguimiento',
-'addedwatchtext' => "La página «[[:$1]]» ha sido añadida a tu [[Special:Watchlist|lista de seguimiento]]. Los cambios futuros en esta página y en su página de discusión asociada se indicarán ahí, y la página aparecerá '''en negritas''' en la [[Special:RecentChanges|lista de cambios recientes]] para hacerla más fácil de detectar.",
+'addedwatchtext' => 'La página «[[:$1]]» ha sido añadida a tu [[Special:Watchlist|lista de seguimiento]]. Los cambios futuros en esta página y en su página de discusión asociada se indicarán ahí.',
 'removewatch' => 'Quitar de la lista de seguimiento',
 'removedwatchtext' => 'La página «[[:$1]]» ha sido eliminada de tu [[Special:Watchlist|lista de seguimiento]].',
 'watch' => 'Vigilar',
@@ -2417,7 +2415,7 @@ La dirección de correo electrónico que indicaste en [[Special:Preferences|tus
 'enotif_subject_moved' => 'La página $1 de {{SITENAME}} ha sido trasladada por {{GENDER:$2|$2}}',
 'enotif_subject_restored' => 'La página $1 de {{SITENAME}} ha sido restaurada por {{GENDER:$2|$2}}',
 'enotif_subject_changed' => 'La página $1 de {{SITENAME}} ha sido cambiada por {{GENDER:$2|$2}}',
-'enotif_body_intro_deleted' => 'La página $1 de {{SITENAME}} ha sido borrada el $PAGEEDITDATE por {{GENDER:$2|$2}}, véase $3 para la revisión actual.',
+'enotif_body_intro_deleted' => 'La página $1 de {{SITENAME}} ha sido borrada el $PAGEEDITDATE por {{GENDER:$2|$2}}, véase $3.',
 'enotif_body_intro_created' => 'La página $1 de {{SITENAME}} ha sido creada el $PAGEEDITDATE por {{GENDER:$2|$2}}, véase $3 para la revisión actual.',
 'enotif_body_intro_moved' => 'La página $1 de {{SITENAME}} ha sido trasladada el $PAGEEDITDATE por {{GENDER:$2|$2}}, véase $3 para la revisión actual.',
 'enotif_body_intro_restored' => 'La página $1 de {{SITENAME}} ha sido restaurada el $PAGEEDITDATE por {{GENDER:$2|$2}}, véase $3 para la revisión actual.',
@@ -2448,6 +2446,8 @@ $UNWATCHURL
 
 Comentarios y asistencia adicional:
 {{canonicalurl:{{MediaWiki:Helppage}}}}',
+'created' => 'creada',
+'changed' => 'modificada',
 
 # Delete
 'deletepage' => 'Borrar esta página',
@@ -2518,6 +2518,8 @@ Véase [[Special:ProtectedPages|la lista de páginas protegidas]] para ver las p
 'prot_1movedto2' => 'heredando la protección al trasladar [[$1]] a [[$2]]',
 'protect-badnamespace-title' => 'Espacio de nombres no protegible',
 'protect-badnamespace-text' => 'Las páginas de este espacio de nombres no pueden ser protegidas',
+'protect-norestrictiontypes-text' => 'Esta página no se puede proteger ya que no hay ningún tipo de restricción disponible.',
+'protect-norestrictiontypes-title' => 'Página no protegible',
 'protect-legend' => 'Confirmar protección',
 'protectcomment' => 'Motivo:',
 'protectexpiry' => 'Caducidad:',
@@ -2532,9 +2534,9 @@ A continuación se muestran las opciones actuales de la página '''$1''':",
 A continuación se muestran las opciones actuales de la página '''$1''':",
 'protect-cascadeon' => 'Actualmente esta página está protegida porque está incluida en {{PLURAL:$1|la siguiente página|las siguientes páginas}}, que tienen activada la opción de protección en cascada. Puedes cambiar el nivel de protección de esta página, pero no afectará a la protección en cascada.',
 'protect-default' => 'Permitir todos los usuarios',
-'protect-fallback' => 'Necesita el permiso «$1»',
-'protect-level-autoconfirmed' => 'Bloquear usuarios nuevos y no registrados',
-'protect-level-sysop' => 'Solo administradores',
+'protect-fallback' => 'Permite sólo a usuarios con el permiso «$1»',
+'protect-level-autoconfirmed' => 'Permitir solo usuarios autoconfirmados',
+'protect-level-sysop' => 'Permitir solo administradores',
 'protect-summary-cascade' => 'en cascada',
 'protect-expiring' => 'caduca el $1 (UTC)',
 'protect-expiring-local' => 'caduca el $1',
@@ -3012,6 +3014,7 @@ No hay un directorio temporal.',
 'import-error-interwiki' => 'La página "$1" no se ha importado porque su nombre está reservado para la vinculación externa (interwikis).',
 'import-error-special' => 'La página "$1" no se ha importado porque pertenece a un espacio de nombres especial que no admite páginas.',
 'import-error-invalid' => 'La página "$1" no se ha importado porque su nombre no es válido.',
+'import-error-unserialize' => 'La revisión $2 de la página "$1" no pudo dejar de hacerse en serie. Se informó de la revisión para utilizar el modelo de contenidos $3 ejecutado en serie como $4.',
 'import-options-wrong' => '{{PLURAL:$2|Opción errónea|Opciones erróneas}}: <nowiki>$1</nowiki>',
 'import-rootpage-invalid' => 'La página raíz dada es un título inválido.',
 'import-rootpage-nosubpage' => 'El espacio de nombres "$1" de la página raíz no permite subpáginas.',
@@ -3106,16 +3109,16 @@ Permite añadir una razón al resumen de edición.',
 'tooltip-summary' => 'Introduce un breve resumen',
 
 # Stylesheets
-'common.css' => '/* Los estilos CSS definidos aquí aplicarán a todas las pieles (skins) */',
-'standard.css' => '/* Los estilos CSS colocados aquí se aplicarán para todos los usuarios que usen la piel Standard */',
-'nostalgia.css' => '/* Los estilos CSS colocados aquí se aplicarán para todos los usuarios que usen la piel Nostalgia */',
-'cologneblue.css' => '/* Los estilos CSS colocados aquí se aplicarán para todos los usuarios que usen la piel Cologne Blue */',
-'monobook.css' => '/* Los estilos CSS colocados aquí se aplicarán para todos los usuarios que usen la piel MonoBook */',
-'myskin.css' => '/* Los estilos CSS colocados aquí se aplicarán para todos los usuarios que usen la piel MySkin */',
-'chick.css' => '/* Los estilos CSS colocados aquí se aplicarán para todos los usuarios que usen la piel Chick */',
-'simple.css' => '/* Los estilos CSS colocados aquí se aplicarán para todos los usuarios que usen la piel Simple */',
-'modern.css' => '/* Los estilos CSS colocados aquí se aplicarán para todos los usuarios que usen la piel Modern */',
-'vector.css' => '/* Los estilos CSS colocados aquí se aplicarán para todos los usuarios que usen la piel Vector */',
+'common.css' => '/* El CSS colocado en esta página sera aplicado a todas las pieles (skins) */',
+'standard.css' => '/* El CSS colocado en esta página afectará a los usuarios que usen la piel "Standard" */',
+'nostalgia.css' => '/* El CSS colocado en esta página afectará a los usuarios que usen la piel "Nostalgia" */',
+'cologneblue.css' => '/* El CSS colocado en esta página afectará a los usuarios que usen la piel "Cologne Blue" */',
+'monobook.css' => '/* El CSS colocado en esta página afectará a los usuarios que usen la piel "MonoBook" */',
+'myskin.css' => '/* El CSS colocado en esta página afectará a los usuarios que usen la piel "MySkin" */',
+'chick.css' => '/* El CSS colocado en esta página afectará a los usuarios que usen la piel ""Chick" */',
+'simple.css' => '/* El CSS colocado en esta página afectará a los usuarios que usen la piel "Simple" */',
+'modern.css' => '/* El CSS colocado en esta página afectará a los usuarios que usen la piel "Modern" */',
+'vector.css' => '/* El CSS colocado en esta página afectará a los usuarios que usen la piel "Vector" */',
 'print.css' => '/* Los estilos CSS colocados aquí afectarán la impresión */',
 'handheld.css' => '/* Los estilos CSS colocados aquí afectarán a los dispositivos móviles basados en las pieles configuradas en $wgHandheldStyle */',
 'noscript.css' => '/* Los estilos CSS colocados aquí se aplicarán a los usuarios que hayan desactivado el JavaScript en su navegador */',
@@ -3197,6 +3200,7 @@ Esto podría estar causado por un enlace a un sitio externo incluido en la lista
 'pageinfo-magic-words' => '{{PLURAL:$1|Palabra mágica|Palabras mágicas}} ($1)',
 'pageinfo-hidden-categories' => '{{PLURAL:$1|Categoría oculta|Categorías ocultas}} ($1)',
 'pageinfo-templates' => '{{PLURAL:$1|Plantilla incluida|Plantillas incluidas}} ($1)',
+'pageinfo-transclusions' => '{{PLURAL:$1|Página incluida|Páginas incluidas}} ($1)',
 'pageinfo-toolboxlink' => 'Información de la página',
 'pageinfo-redirectsto' => 'Redirige a',
 'pageinfo-redirectsto-info' => 'Información',
@@ -3205,6 +3209,10 @@ Esto podría estar causado por un enlace a un sitio externo incluido en la lista
 'pageinfo-protect-cascading' => 'Protecciones en serie activadas',
 'pageinfo-protect-cascading-yes' => 'Sí',
 'pageinfo-protect-cascading-from' => 'Protecciones en serie activadas',
+'pageinfo-category-info' => 'Información de la categoría',
+'pageinfo-category-pages' => 'Número de páginas',
+'pageinfo-category-subcats' => 'Número de subcategorías',
+'pageinfo-category-files' => 'Número de archivos',
 
 # Skin names
 'skinname-standard' => 'Estándar',
@@ -3263,6 +3271,7 @@ Ejecutarlo podría comprometer la seguridad de su equipo.",
 'file-nohires' => 'No disponible a mayor resolución.',
 '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-preview' => 'Tamaño de esta previsualización: $1.',
 'show-big-image-other' => '{{PLURAL:$2|Otra resolución|Otras resoluciones}}: $1.',
@@ -3296,6 +3305,8 @@ Ejecutarlo podría comprometer la seguridad de su equipo.",
 'minutes' => '{{PLURAL:$1|un minuto|$1 minutos}}',
 'hours' => '{{PLURAL:$1|una hora|$1 horas}}',
 'days' => '{{PLURAL:$1|un día|$1 días}}',
+'months' => '{{PLURAL:$1|$1 mes|$1 meses}}',
+'years' => '{{PLURAL:$1|$1 año|$1 años}}',
 'ago' => 'hace $1',
 'just-now' => 'Ahora mismo',
 
@@ -3950,7 +3961,7 @@ Las imágenes se muestran en resolución máxima, otros tipos de archivo se inic
 'specialpages-group-highuse' => 'Páginas sobre usos',
 'specialpages-group-pages' => 'Listas de páginas',
 'specialpages-group-pagetools' => 'Herramientas de páginas',
-'specialpages-group-wiki' => 'Herramientas y datos del wiki',
+'specialpages-group-wiki' => 'Herramientas y datos',
 'specialpages-group-redirects' => 'Búsquedas y redirecciones',
 'specialpages-group-spam' => 'Herramientas anti-SPAM',
 
@@ -4048,8 +4059,12 @@ Este sitio está experimentando dificultades técnicas.',
 'logentry-newusers-newusers' => 'Se ha creado la cuenta de usuario $1',
 'logentry-newusers-create' => 'Se ha creado la cuenta de usuario $1',
 'logentry-newusers-create2' => '$1 ha creado la cuenta de usuario $3',
+'logentry-newusers-byemail' => '$1 creó la cuenta de usuario $3 y la contraseña se envió por correo electrónico',
 'logentry-newusers-autocreate' => 'La cuenta $1 fue creada automáticamente',
-'newuserlog-byemail' => 'contraseña enviada por correo electrónico',
+'logentry-rights-rights' => '$1 modificó los grupos a los que pertenece $3: de $4 a $5',
+'logentry-rights-rights-legacy' => '$1 ha cambiado la pertenencia a grupos de $3',
+'logentry-rights-autopromote' => '$1 fue promocionado automáticamente de $4 a $5',
+'rightsnone' => '(ninguno)',
 
 # Feedback
 'feedback-bugornote' => 'Si estás preparado para describir en detalle un problema técnico, [$1 informa de un bug] por favor.
@@ -4104,6 +4119,7 @@ En otro caso, puedes usar el siguiente formulario. Tu comentario será añadido
 'api-error-ok-but-empty' => 'Error interno: No hay respuesta del servidor.',
 'api-error-overwrite' => 'No se permite sobrescribir un archivo existente.',
 'api-error-stashfailed' => 'Error interno: El servidor no pudo almacenar el archivo temporal.',
+'api-error-publishfailed' => 'Error interno: el servidor no pudo publicar el archivo temporal.',
 'api-error-timeout' => 'El servidor no respondió en el plazo previsto.',
 'api-error-unclassified' => 'Ocurrió un error desconocido.',
 'api-error-unknown-code' => 'Error desconocido: «$1»',
@@ -4124,6 +4140,4 @@ En otro caso, puedes usar el siguiente formulario. Tu comentario será añadido
 'duration-centuries' => '$1 {{PLURAL:$1|siglo|siglos}}',
 'duration-millennia' => '$1 {{PLURAL:$1|milenio|milenios}}',
 
-# Unknown messages
-'svg-long-error' => 'Archivo SVG no válido: $1',
 );
index 3c488e0..168c3e8 100644 (file)
@@ -338,7 +338,7 @@ $messages = array(
 
 'underline-always' => 'Alati',
 'underline-never' => 'Mitte kunagi',
-'underline-default' => 'Brauseri vaikeväärtus',
+'underline-default' => 'Kujunduse või võrgulehitseja vaikeväärtus',
 
 # Font style option in Special:Preferences
 'editfont-style' => 'Redigeerimisala kirjatüüp:',
@@ -456,6 +456,7 @@ $messages = array(
 'namespaces' => 'Nimeruumid',
 'variants' => 'Variandid',
 
+'navigation-heading' => 'Navigatsioonimenüü',
 'errorpagetitle' => 'Viga',
 'returnto' => 'Naase lehele $1',
 'tagline' => 'Allikas: {{SITENAME}}',
@@ -664,7 +665,7 @@ Päring: $2',
 'actionthrottled' => 'Toiming nurjus',
 'actionthrottledtext' => 'Rämpsmuudatuste vastase meetmena pole sul lühikse aja jooksul seda toimingut liiga palju kordi lubatud sooritada. Sa oled lühikse aja jooskul seda toimingut liiga palju kordi sooritanud.
 Palun proovi mõne minuti pärast uuesti.',
-'protectedpagetext' => 'See lehekülg on lukustatud, et muudatusi ei tehtaks.',
+'protectedpagetext' => 'See lehekülg on lukustatud, et ei tehtaks muudatusi ega sooritataks muid toiminguid.',
 'viewsourcetext' => 'Saad vaadata ja kopeerida lehekülje lähteteksti:',
 'viewyourtext' => "Saad vaadata ja kopeerida sellel leheküljel tehtud '''enda muudatuste '''lähteteksti:",
 'protectedinterface' => 'Sellel leheküljel on selle viki tarkvara kasutajaliidese tekst. Väärtarvituse vältimiseks on lehekülg kaitstud.
@@ -847,6 +848,7 @@ Ajutine parool: $2',
 'changeemail-oldemail' => 'Praegune e-posti aadress:',
 'changeemail-newemail' => 'Uus e-posti aadress:',
 'changeemail-none' => '(puudub)',
+'changeemail-password' => 'Sinu parool {{GRAMMAR:inessive|{{SITENAME}}}}:',
 'changeemail-submit' => 'Muuda e-posti aadress',
 'changeemail-cancel' => 'Loobu',
 
@@ -971,7 +973,7 @@ Allpool on toodud viimane blokeerimislogi sissekanne:',
 'note' => "'''Meeldetuletus:'''",
 'previewnote' => "'''Ära unusta, et see on kõigest eelvaade!'''
 Sinu muudatused pole veel salvestatud!",
-'continue-editing' => 'Jätka redigeerimist',
+'continue-editing' => 'Mine redigeerimiskasti juurde',
 'previewconflict' => 'See eelvaade näitab, kuidas ülemises toimetuskastis olev tekst hakkab välja nägema, kui otsustate salvestada.',
 'session_fail_preview' => "'''Vabandust! Meil ei õnnestunud seansiandmete kaotuse tõttu sinu muudatust töödelda.'''
 Palun proovi uuesti.
@@ -1027,7 +1029,6 @@ Allpool on toodud uusim logisissekanne:",
 'template-protected' => '(kaitstud)',
 'template-semiprotected' => '(osaliselt kaitstud)',
 'hiddencategories' => 'See lehekülg kuulub {{PLURAL:$1|1 peidetud kategooriasse|$1 peidetud kategooriasse}}:',
-'nocreatetitle' => 'Lehekülje loomine piiratud',
 'nocreatetext' => 'Lehekülje loomise õigus on {{GRAMMAR:inessive|{{SITENAME}}}} piiratud.
 Võid pöörduda tagasi ja toimetada olemasolevat lehekülge või [[Special:UserLogin|sisse logida või uue konto luua]].',
 'nocreate-loggedin' => 'Sul ei ole luba luua uusi lehekülgi.',
@@ -1051,6 +1052,14 @@ Tundub, et see on kustutatud.',
 'edit-already-exists' => 'Ei saanud alustada uut lehekülge.
 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 models
+'content-model-wikitext' => 'vikiteksti',
+'content-model-text' => 'lihtteksti',
+'content-model-javascript' => 'JavaScripti',
+'content-model-css' => 'CSSi',
 
 # 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.",
@@ -1410,9 +1419,9 @@ Toimingut ei saa hiljem tühistada.',
 'prefs-emailconfirm-label' => 'E-posti kinnitus:',
 'prefs-textboxsize' => 'Toimetamisakna suurus',
 'youremail' => 'E-posti aadress:',
-'username' => 'Kasutajanimi:',
-'uid' => 'Kasutaja ID:',
-'prefs-memberingroups' => 'Kuulub {{PLURAL:$1|rühma|rühmadesse}}:',
+'username' => '{{GENDER:$1|Kasutajanimi}}:',
+'uid' => '{{GENDER:$1|Kasutaja}} ID:',
+'prefs-memberingroups' => '{{PLURAL:$1|Järgmise rühma|Järgmiste rühmade}} {{GENDER:$2|liige}}:',
 'prefs-registration' => 'Registreerumise aeg:',
 'yourrealname' => 'Tegelik nimi:',
 'yourlanguage' => 'Keel:',
@@ -1561,12 +1570,13 @@ See ei tohi olla pikem kui {{PLURAL:$1|üks märk|$1 märki}}.',
 'right-sendemail' => 'Saata teistele kasutajatele e-kirju',
 'right-passwordreset' => 'Vaadata parooli lähtestamise e-kirju',
 
+# Special:Log/newusers
+'newuserlogpage' => 'Kasutaja loomise logi',
+'newuserlogpagetext' => 'See logi sisaldab infot äsja loodud uute kasutajate kohta.',
+
 # User rights log
 'rightslog' => 'Kasutaja õiguste logi',
 'rightslogtext' => 'See on logi kasutajate õiguste muutuste kohta.',
-'rightslogentry' => 'andis kasutajale $1 järgmised õigused: $3; seni oli ta $2',
-'rightslogentry-autopromote' => 'sai automaatselt järgmised õigused: $3; seni oli ta $2',
-'rightsnone' => '(puudub)',
 
 # Associated actions - in the sentence "You do not have permission to X"
 'action-read' => 'seda lehekülge lugeda',
@@ -1798,6 +1808,7 @@ Kui probleem ei kao, võta ühendust [[Special:ListUsers/sysop|administraatoriga
 'backend-fail-notsame' => 'Asukohas $1 on juba olemas mitteidentne fail.',
 'backend-fail-invalidpath' => '$1 pole sobiv talletustee.',
 'backend-fail-delete' => 'Faili $1 ei saa kustutada.',
+'backend-fail-describe' => 'Faili "$1" metaandmeid ei saa muuta.',
 'backend-fail-alreadyexists' => 'Fail $1 on juba olemas.',
 'backend-fail-store' => 'Faili $1 ei saa talletada asukohas $2.',
 'backend-fail-copy' => 'Faili $1 ei saa kopeerida asukohta $2.',
@@ -1931,7 +1942,7 @@ Võib-olla tahad redigeerida selle faili [$2 sealset kirjelduslehekülge].',
 'uploadnewversion-linktext' => 'Laadi üles selle faili uus versioon',
 'shared-repo-from' => 'varamust $1',
 'shared-repo' => 'jagatud varamu',
-'upload-disallowed-here' => 'Paraku ei saa sa seda pilti üle kirjutada.',
+'upload-disallowed-here' => 'Sa ei saa seda faili üle kirjutada.',
 
 # File reversion
 'filerevert' => 'Taasta $1',
@@ -2169,7 +2180,7 @@ Vaata ka [[Special:WantedCategories|puuduvaid kategooriaid]].',
 'linksearch-ok' => 'Otsi',
 'linksearch-text' => 'Metamärgina võib kasutada tärni, näiteks "*.wikipedia.org".
 Otsingus peab olema vähemalt tipptaseme domeen, näiteks "*.org".<br />
-Toetatud protokollid: <code>$1</code> (otsingus ära neid kasuta).',
+Toetatud protokollid: <code>$1</code> (määramata protokolli korral vaikimisi http://).',
 'linksearch-line' => '$1 on lingitud leheküljelt $2',
 'linksearch-error' => 'Metamärk võib olla ainult internetiaadressi alguses.',
 
@@ -2188,10 +2199,6 @@ Toetatud protokollid: <code>$1</code> (otsingus ära neid kasuta).',
 'activeusers-hidesysops' => 'Peida administraatorid',
 'activeusers-noresult' => 'Kasutajaid ei leidunud.',
 
-# Special:Log/newusers
-'newuserlogpage' => 'Kasutaja loomise logi',
-'newuserlogpagetext' => 'See logi sisaldab infot äsja loodud uute kasutajate kohta.',
-
 # Special:ListGroupRights
 'listgrouprights' => 'Kasutajarühma õigused',
 'listgrouprights-summary' => 'Siin on loetletud selle viki kasutajarühmad ja rühmaga seotud õigused.
@@ -2218,7 +2225,7 @@ Toetatud protokollid: <code>$1</code> (otsingus ära neid kasuta).',
 'emailuser-title-target' => 'Sellele {{GENDER:$1|kasutajale}} e-kirja saatmine',
 'emailuser-title-notarget' => 'Kasutajale e-kirja saatmine',
 'emailpage' => 'Saada kasutajale e-kiri',
-'emailpagetext' => 'Kui see kasutaja on oma eelistuste lehel sisestanud e-posti aadressi, saad alloleva vormi kaudu talle kirja saata. Et kasutaja saaks vastata, täidetakse kirja saatja väli "Kellelt" e-posti aadressiga, mille oled sisestanud [[Special:Preferences|oma eelistuste lehel]].',
+'emailpagetext' => 'Alloleva vormi kaudu saad sellele {{GENDER:$1|kasutajale}} e-kirja saata. Et kasutaja saaks vastata, täidetakse kirja saatja väli e-posti aadressiga, mille oled sisestanud [[Special:Preferences|oma eelistuste leheküljel]].',
 'usermailererror' => 'Saatmise viga:',
 'defemailsubject' => 'E-kiri {{GRAMMAR:genitive|{{SITENAME}}}} kasutajalt $1',
 'usermaildisabled' => 'Kasutajatele e-kirjade saatmine keelatud',
@@ -2256,11 +2263,8 @@ Toetatud protokollid: <code>$1</code> (otsingus ära neid kasuta).',
 'watchnologin' => 'Ei ole sisse logitud',
 'watchnologintext' => 'Jälgimisloendi muutmiseks pead [[Special:UserLogin|sisse logima]].',
 'addwatch' => 'Lisa jälgimisloendisse',
-'addedwatchtext' => "Lehekülg \"[[:\$1]]\" on sinu [[Special:Watchlist|jälgimisloendisse]] lisatud.
-
-Edasised muudatused käesoleval lehel ja sellega seotud aruteluleheküljel ilmuvad jälgimisloendisse ning [[Special:RecentChanges|viimaste muudatuste lehel]] tuuakse jälgitava lehe pealkiri esile '''rasvase''' kirja abil.
-
-Kui tahad seda lehte hiljem jälgimisloendist eemaldada, klõpsa päisenupule \"Lõpeta jälgimine\".",
+'addedwatchtext' => 'Lehekülg "[[:$1]]" on lisatud sinu [[Special:Watchlist|jälgimisloendisse]].
+Edasised muudatused sellel leheküljel ja seotud aruteluleheküljel tuuakse ära jälgimisloendis.',
 'removewatch' => 'Eemalda jälgimisloendist',
 'removedwatchtext' => 'Lehekülg "[[:$1]]" on [[Special:Watchlist|jälgimisloendist]] eemaldatud.',
 'watch' => 'Jälgi',
@@ -2289,14 +2293,22 @@ Kui tahad seda lehte hiljem jälgimisloendist eemaldada, klõpsa päisenupule \"
 'enotif_mailer' => '{{GRAMMAR:genitive|{{SITENAME}}}} lehekülje muutmise teavitaja',
 'enotif_reset' => 'Märgi kõik lehed loetuks',
 'enotif_impersonal_salutation' => '{{GRAMMAR:genitive|{{SITENAME}}}} kasutaja',
+'enotif_subject_deleted' => '{{GENDER:$2|$2}} kustutas {{GRAMMAR:genitive|{{SITENAME}}}} lehekülje $1',
+'enotif_subject_created' => '{{GENDER:$2|$2}} alustas {{GRAMMAR:genitive|{{SITENAME}}}} lehekülge $1',
+'enotif_subject_moved' => '{{GENDER:$2|$2}} teisaldas {{GRAMMAR:genitive|{{SITENAME}}}} lehekülje $1',
+'enotif_subject_restored' => '{{GENDER:$2|$2}} taastas {{GRAMMAR:genitive|{{SITENAME}}}} lehekülje $1',
+'enotif_subject_changed' => '{{GENDER:$2|$2}} muutis {{GRAMMAR:genitive|{{SITENAME}}}} lehekülge $1',
+'enotif_body_intro_deleted' => '$2 kustutas {{GRAMMAR:genitive|{{SITENAME}}}} lehekülje $1 kuupäeval $PAGEEDITDATE. Vaata lehekülge aadressil $3.',
+'enotif_body_intro_created' => '$2 alustas {{GRAMMAR:genitive|{{SITENAME}}}} lehekülge $1 kuupäeval $PAGEEDITDATE. Vaata lehekülje praegust redaktsiooni aadressil $3.',
+'enotif_body_intro_moved' => '$2 teisaldas {{GRAMMAR:genitive|{{SITENAME}}}} lehekülje $1 kuupäeval $PAGEEDITDATE. Vaata lehekülje praegust redaktsiooni aadressil $3.',
+'enotif_body_intro_restored' => '$2 taastas {{GRAMMAR:genitive|{{SITENAME}}}} lehekülje $1 kuupäeval $PAGEEDITDATE. Vaata lehekülje praegust redaktsiooni aadressil $3.',
+'enotif_body_intro_changed' => '$2 muutis {{GRAMMAR:genitive|{{SITENAME}}}} lehekülge $1 kuupäeval $PAGEEDITDATE. Vaata lehekülje praegust redaktsiooni aadressil $3.',
 'enotif_lastvisited' => 'Kõigi sinu viimase külastuse järel tehtud muudatuste nägemiseks vaata: $1.',
 'enotif_lastdiff' => 'Muudatus on leheküljel $1.',
 'enotif_anon_editor' => 'anonüümne kasutaja $1',
 'enotif_body' => 'Lugupeetud $WATCHINGUSERNAME
 
-{{GRAMMAR:genitive|{{SITENAME}}}} kasutaja $PAGEEDITOR on kuupäeval $PAGEEDITDATE $CHANGEDORCREATED $PAGETITLE. Lehe praegune redaktsioon on asukohas $PAGETITLE_URL.
-
-$NEWPAGE
+$PAGEINTRO $NEWPAGE
 
 Redigeerija resümee: $PAGESUMMARY $PAGEMINOREDIT
 
@@ -2304,7 +2316,7 @@ Redigeerijaga ühenduse võtmine:
 e-post: $PAGEEDITOR_EMAIL
 viki: $PAGEEDITOR_WIKI
 
-Seni kuni sa seda lehte ei külasta, selle lehe uute muudatuste kohta sulle uusi teavitus-e-kirju ei saadeta.
+Seni kuni sa seda lehte ei külasta, selle lehega seotud toimingute kohta sulle uusi teavitus-e-kirju ei saadeta. Jälgimisloendis saaksid kõigi jälgitavate lehekülgedega seotud teavitussätted ka lähtestada.
 
 Abivalmilt
 {{GRAMMAR:genitive|{{SITENAME}}}} teavitussüsteem
@@ -2320,6 +2332,8 @@ Lehekülje kustutamiseks jälgimisloendist mine leheküljele $UNWATCHURL.
 
 Tagasiside ja abi:
 {{canonicalurl:{{MediaWiki:Helppage}}}}',
+'created' => 'loonud lehekülje',
+'changed' => 'muutnud lehekülge',
 
 # Delete
 'deletepage' => 'Kustuta lehekülg',
@@ -2473,7 +2487,8 @@ Link võib olla kõlbmatu või redaktsioon võib olla taastatud või arhiivist e
 'undeletedrevisions' => '$1 {{PLURAL:$1|redaktsioon|redaktsiooni}} taastatud',
 'undeletedrevisions-files' => '{{PLURAL:$1|1 redaktsioon|$1 redaktsiooni}} ja {{PLURAL:$2|1 fail|$2 faili}} taastatud',
 'undeletedfiles' => '{{PLURAL:$1|1 fail|$1 faili}} taastatud',
-'cannotundelete' => 'Taastamine ebaõnnestus; keegi teine võis lehe juba taastada.',
+'cannotundelete' => 'Taastamine ebaõnnestus:
+$1',
 'undeletedpage' => "'''$1 on taastatud'''
 
 [[Special:Log/delete|Kustutamise logist]] võib leida loendi viimastest kustutamistest ja taastamistest.",
@@ -2505,7 +2520,7 @@ $1',
 'blanknamespace' => '(Artiklid)',
 
 # Contributions
-'contributions' => 'Kasutaja kaastöö',
+'contributions' => '{{GENDER:$1|Kasutaja}} kaastöö',
 'contributions-title' => 'Kasutaja $1 kaastöö',
 'mycontris' => 'Kaastöö',
 'contribsub2' => 'Kasutaja $1 ($2) jaoks',
@@ -2547,7 +2562,7 @@ Allpool on toodud viimane blokeerimislogi sissekanne:',
 'whatlinkshere-hideredirs' => '$1 ümbersuunamised',
 'whatlinkshere-hidetrans' => '$1 mallina kasutamised',
 'whatlinkshere-hidelinks' => '$1 lingid',
-'whatlinkshere-hideimages' => '$1 pildilingid',
+'whatlinkshere-hideimages' => '$1 faililingid',
 'whatlinkshere-filters' => 'Filtrid',
 
 # Block/unblock
@@ -3019,6 +3034,7 @@ See on ilmselt põhjustatud linkimisest mustas nimekirjas olevasse välisvõrguk
 
 # Info page
 'pageinfo-title' => 'Teave lehekülje "$1" kohta',
+'pageinfo-not-current' => 'Kahjuks pole vanade redaktsioonide kohta võimalik seda teavet ära tuua.',
 'pageinfo-header-basic' => 'Põhiteave',
 'pageinfo-header-edits' => 'Redigeerimislugu',
 'pageinfo-header-restrictions' => 'Lehekülje kaitse',
@@ -3027,6 +3043,7 @@ See on ilmselt põhjustatud linkimisest mustas nimekirjas olevasse välisvõrguk
 'pageinfo-default-sort' => 'Vaikejärjestusvõti',
 'pageinfo-length' => 'Lehekülje pikkus (baitides)',
 'pageinfo-article-id' => 'Lehekülje identifikaator',
+'pageinfo-language' => 'Lehekülje sisu keel',
 'pageinfo-robot-policy' => 'Otsimootori olek',
 'pageinfo-robot-index' => 'Indekseeritav',
 'pageinfo-robot-noindex' => 'Indekseerimatu',
@@ -3046,6 +3063,14 @@ See on ilmselt põhjustatud linkimisest mustas nimekirjas olevasse välisvõrguk
 'pageinfo-magic-words' => '{{PLURAL:$1|Võlusõna|Võlusõnad}} ($1)',
 'pageinfo-hidden-categories' => 'Peidetud {{PLURAL:$1|kategooria|kategooriad}} ($1)',
 'pageinfo-templates' => 'Kasutatud {{PLURAL:$1|mall|mallid}} ($1)',
+'pageinfo-toolboxlink' => 'Lehekülje andmed',
+'pageinfo-redirectsto' => 'Ümber suunatud leheküljele',
+'pageinfo-redirectsto-info' => 'teave',
+'pageinfo-contentpage' => 'Arvestatakse sisuleheküljena',
+'pageinfo-contentpage-yes' => 'Jah',
+'pageinfo-protect-cascading' => 'Siit lähtub kaskaadkaitse',
+'pageinfo-protect-cascading-yes' => 'Jah',
+'pageinfo-protect-cascading-from' => 'Kaskaadkaitse lähtub lehekülgedelt',
 
 # Skin names
 'skinname-standard' => 'Algeline',
@@ -3068,6 +3093,8 @@ See on ilmselt põhjustatud linkimisest mustas nimekirjas olevasse välisvõrguk
 'markedaspatrollederror' => 'Ei saa kontrollituks märkida',
 'markedaspatrollederrortext' => 'Vajalik on määrata, milline versioon märkida kontrollituks.',
 'markedaspatrollederror-noautopatrol' => 'Enda muudatusi ei saa kontrollituks märkida.',
+'markedaspatrollednotify' => 'See muudatus leheküljel $1 on märgitud kontrollituks.',
+'markedaspatrollederrornotify' => 'Kontrollituks märkimine ebaõnnestus.',
 
 # Patrol log
 'patrol-log-page' => 'Kontrollimislogi',
@@ -3101,6 +3128,7 @@ Selle avamine võib su arvutit kahjustada.",
 'file-nohires' => 'Sellest suuremat pilti pole.',
 '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-preview' => 'Selle eelvaate suurus: $1.',
 'show-big-image-other' => '{{PLURAL:$2|Teine eraldusvõime|Teised eraldusvõimed}}: $1.',
@@ -3132,6 +3160,7 @@ Järgnevas loendis, mis on sorteeritud $2, on '''$1''' {{PLURAL:$1|fail|faili}}.
 'hours' => '{{PLURAL:$1|üks tund|$1 tundi}}',
 'days' => '{{PLURAL:$1|üks päev|$1 päeva}}',
 'ago' => '$1 tagasi',
+'just-now' => 'just nüüd',
 
 # Bad image list
 'bad_image_list' => 'Arvesse võetakse ainult nimekirja ühikud (read, mis algavad sümboliga *).
@@ -3703,6 +3732,7 @@ Sa võid [[Special:EditWatchlist|kasutada ka harilikku tekstiredaktorit]].',
 'version-license' => 'Litsents',
 'version-poweredby-credits' => "See viki kasutab '''[//www.mediawiki.org/ MediaWiki]''' tarkvara. Autoriõigus © 2001–$1 $2.",
 'version-poweredby-others' => 'teised',
+'version-credits-summary' => 'Tahame tunnustada järgmisi inimesi [[Special:Version|MediaWikile]] tehtud kaastöö eest.',
 'version-license-info' => "MediaWiki on vaba tarkvara; tohid seda taaslevitada ja/või selle põhjal teisendeid luua vastavalt Vaba Tarkvara Fondi avaldatud GNU Üldise Avaliku Litsentsi versioonis 2 või hilisemas seatud tingimustele.
 
 MediaWiki tarkvara levitatakse lootuses, et see on kasulik, aga '''igasuguse tagatiseta''', ka kaudse tagatiseta teose '''turustatavuse''' või '''müügikõlblikkuse''' kohta. Üksikasjad leiad GNU Üldisest Avalikust Litsentsist.
@@ -3842,11 +3872,11 @@ Pilt kuvatakse algupärases suuruses, muu fail avatakse koheselt seostuva progra
 'logentry-move-move_redir-noredirect' => '$1 teisaldas lehekülje $3 ümbersuunamise $4 asemele ümbersuunamist maha jätmata',
 'logentry-patrol-patrol' => '$1 märkis lehekülje $3 redaktsiooni $4 kontrollituks',
 'logentry-patrol-patrol-auto' => '$1 märkis automaatselt lehekülje $3 redaktsiooni $4 kontrollituks',
-'logentry-newusers-newusers' => '$1 tegi kasutajakonto',
-'logentry-newusers-create' => '$1 tegi kasutajakonto',
-'logentry-newusers-create2' => '$1 tegi kasutajakonto $3',
+'logentry-newusers-newusers' => 'Loodud kasutajakonto $1',
+'logentry-newusers-create' => 'Loodud kasutajakonto $1',
+'logentry-newusers-create2' => '$1 i kasutajakonto $3',
 'logentry-newusers-autocreate' => 'Konto $1 loodi automaatselt',
-'newuserlog-byemail' => 'parool saadetud e-postiga',
+'rightsnone' => '(puudub)',
 
 # Feedback
 'feedback-bugornote' => 'Kui arvad, et oskad tehnilist probleemi üksikasjalikult kirjeldada, [$1 teata veast].
index f5ea8bf..bce01b4 100644 (file)
@@ -244,10 +244,10 @@ $messages = array(
 'hidden-category-category' => 'Kategoria ezkutuak',
 'category-subcat-count' => '{{PLURAL:$2|Kategoria honek beste honako azpikategoria baino ez du.|Kategoria honek honako {{PLURAL:$1|azpikategoria du|$1 azpikategoriak ditu}}, guztira dauden $2tik.}}',
 'category-subcat-count-limited' => 'Kategoria honek {{PLURAL:$1|azpikategoria hau du|$1 azpikategoria hauek ditu}}.',
-'category-article-count' => '{{PLURAL:$2|Kategoria honek honako orrialdea baino ez du.|Honako {{PLURAL:$1|orrialdea kategoria honetan dago|$1 orrialdeak kategoria hauetan daude}}, guztira dauden $2tik.}}',
-'category-article-count-limited' => 'Honako orrialde {{PLURAL:$1|hau kategoria honetan dago|$1 hauek kategoria hauetan daude}}:',
-'category-file-count' => '{{PLURAL:$2|Kategoria honek fitxategi hau baino ez du.|Honako {{PLURAL:$1|fitxategia kategoria honetan dago|$1 fitxategiak kategoria honetan daude}} guztira dauden $2tik.}}',
-'category-file-count-limited' => 'Ondorengo {{PLURAL:$1|artxiboa kategoria honetan dago.|$1 artxiboak kategoria honetan daude.}}',
+'category-article-count' => '{{PLURAL:$2|Kategoria honek ondorengo orri hau baino ez du.|Ondorengo {{PLURAL:$1|orria kategoria honetan dago|$1 orriak kategoria honetan daude}}; eta kategoria honetan, guztira, $2 orri daude.}}',
+'category-article-count-limited' => 'Ondorengo {{PLURAL:$1|orri hau kategoria honetan dago.|$1 orri hauek kategoria honetan daude.}}',
+'category-file-count' => '{{PLURAL:$2|Kategoria honek fitxategi hau baino ez du.|Ondorengo {{PLURAL:$1|fitxategia kategoria honetan dago|$1 fitxategiak kategoria honetan daude}}. Eta kategoria honetan, guztira, $2 fitxategi daude.}}',
+'category-file-count-limited' => 'Ondorengo {{PLURAL:$1|fitxategia kategoria honetan dago.|$1 fitxategiak kategoria honetan daude.}}',
 'listingcontinuesabbrev' => 'jarr.',
 'index-category' => 'Indexatutako orrialdeak',
 'noindex-category' => 'Indexatugabeko orrialdeak',
@@ -800,9 +800,10 @@ Era berean, bidaltzen ari zaren edukia zuk zeuk idatzitakoa dela edo jabetza pub
 '''EZ BIDALI BAIMENIK GABEKO COPYRIGHTDUN EDUKIRIK!'''",
 'longpageerror' => "'''Errorea: Bidali duzun testuak {{PLURAL:$1|kilobyte 1eko|$1 kilobyteko}} luzera du, eta {{PLURAL:$2|kilobyte 1eko|$2 kilobyteko}} maximoa baino luzeagoa da.'''
 Ezin da gorde.",
-'readonlywarning' => "'''OHARRA: Datu-basea blokeatu egin da mantenu lanak burutzeko, beraz ezingo dituzu orain zure aldaketak gorde. Testua fitxategi baten kopiatu dezakezu, eta beranduago erabiltzeko gorde.
+'readonlywarning' => "'''Oharra: Datu-basea blokeatu egin da mantenu lanak burutzeko, beraz ezingo dituzu orain zure aldaketak gorde.'''
+Testua fitxategi baten kopiatu dezakezu, eta beranduago erabiltzeko gorde.
 
-Blokeatu zuen administratzaileak honako azalpena eman zuen: $1'''",
+Blokeatu zuen administratzaileak honako azalpena eman zuen: $1",
 'protectedpagewarning' => "'''Oharra:  Orri hau blokeatua dago administratzaileek soilik eraldatu ahal dezaten.'''
 Azken erregistroa ondoren ikusgai dago erreferentzia gisa:",
 'semiprotectedpagewarning' => "'''Oharra''': Orrialde hau erregistratutako erabiltzaileek bakarrik aldatzeko babestuta dago.
@@ -817,7 +818,6 @@ Azken erregistroko sarrera ematen da azpian erreferentzia gisa:",
 'template-semiprotected' => '(erdi-babestua)',
 'hiddencategories' => 'Orrialde hau {{PLURAL:$1|kategoria izkutu bateko|$1 kategoria izkutuko}} kide da:',
 'edittools' => '<!-- Hemen jarritako testua aldaketa eta igoera formularioen azpian agertuko da. -->',
-'nocreatetitle' => 'Orrialdeak sortzea mugatuta',
 'nocreatetext' => 'Gune honek orrialde berriak sortzeko gaitasuna mugatu du. Atzera egin dezakezu existitzen den orrialde bat aldatzeko, edo [[Special:UserLogin|saio hasi edo kontua sortu]].',
 'nocreate-loggedin' => 'Ez duzu orri berriak sortzeko baimenik.',
 'sectioneditnotsupported-title' => 'Ezin dira atalak aldatu',
@@ -1337,11 +1337,13 @@ $1 {{PLURAL:$1|karakteretik|karakteretik}} behera izan behar ditu.',
 'right-override-export-depth' => '5eko sakonerararteko loturiko orrialdeak barne esportatu',
 'right-sendemail' => 'Beste erabiltzaileei e-posta bidali',
 
+# Special:Log/newusers
+'newuserlogpage' => 'Erabiltzaile erregistroa',
+'newuserlogpagetext' => 'Hau azken erabiltzaileen sorreren erregistroa da.',
+
 # User rights log
 'rightslog' => 'Erabiltzaile eskubideen erregistroa',
 'rightslogtext' => 'Erabiltzaile eskubideetan izandako aldaketen erregistroa da hau.',
-'rightslogentry' => '$1(r)en partaidetza aldatu da $2(e)tik $3(e)ra',
-'rightsnone' => '(bat ere ez)',
 
 # Associated actions - in the sentence "You do not have permission to X"
 'action-read' => 'orrialde hau irakurri',
@@ -1862,16 +1864,12 @@ Baimendutako protokoloak: <code>$1</code> (protokoloa zehazten ez bada http:// h
 
 # Special:ActiveUsers
 'activeusers' => 'Lankide aktiboen zerrenda',
-'activeusers-count' => '{{PLURAL:$1|Aldaketa berri bat|$1 aldaketa berri}} azken {{PLURAL:$3|egunean|$3 egunetan}}',
+'activeusers-count' => '{{PLURAL:$1|Ekintza berri bat|$1 ekintza berri}} azken {{PLURAL:$3|egunean|$3 egunetan}}',
 'activeusers-from' => 'Bilatu honela hasten diren lankideak:',
 'activeusers-hidebots' => 'Ezkutatu bot-ak',
 'activeusers-hidesysops' => 'Ezkutatu administratzaileak',
 'activeusers-noresult' => 'Ez da lankiderik aurkitu.',
 
-# Special:Log/newusers
-'newuserlogpage' => 'Erabiltzaile erregistroa',
-'newuserlogpagetext' => 'Hau azken erabiltzaileen sorreren erregistroa da.',
-
 # Special:ListGroupRights
 'listgrouprights' => 'Erabiltzaile talde eskumenak',
 'listgrouprights-summary' => 'Ondorengo zerrendak wikian dauden lankide taldeak agertzen dira, beraien eskubideekin.
@@ -1923,7 +1921,7 @@ Badago [[{{MediaWiki:Listgrouprights-helppage}}|informazio osagarria]] banakako
 'usermessage-editor' => 'Sistemako mezularia',
 
 # Watchlist
-'watchlist' => 'Nire jarraipen zerrenda',
+'watchlist' => 'Jarraipen zerrenda',
 'mywatchlist' => 'Jarraipen zerrenda',
 'watchlistfor2' => '$1 ($2)',
 'nowatchlist' => 'Zure jarraipen zerrenda hutsik dago.',
@@ -1991,6 +1989,8 @@ $UNWATCHURL
 
 Laguntza:
 {{canonicalurl:{{MediaWiki:Helppage}}}}',
+'created' => 'sortu',
+'changed' => 'aldatu',
 
 # Delete
 'deletepage' => 'Orrialdea ezabatu',
@@ -2350,7 +2350,6 @@ Konturatu zaitez orrialdea '''ez''' dela mugituko izenburu berria duen orrialde
 Horrek esan nahi du hanka sartzekotan orrialde baten jatorrizko izenburua berreskuratu daitekeela, baina ezin dela jada existitzen den orrialde baten gainean idatzi.
 
 '''Oharra!'''
-
 Aldaketa hau drastikoa eta ustekabekoa izan daiteke orrialde oso ezagunetan;
 mesedez, egiazta ezazu honen ondorioak ulertzen dituzula, jarraitu baino lehen.",
 'movepagetalktext' => "Dagokion eztabaida orrialdea berarekin batera mugitu da, honako kasu hauetan '''ezik:'''
@@ -3262,7 +3261,7 @@ Irudiak bereizmen handienean daude, bestelako fitxategi motak beraiei esleitutak
 'specialpages-group-highuse' => 'Erabilera handiko orrialdeak',
 'specialpages-group-pages' => 'Orrialdeen zerrendak',
 'specialpages-group-pagetools' => 'Orrialde tresnak',
-'specialpages-group-wiki' => 'Wiki datuak eta tresnak',
+'specialpages-group-wiki' => 'Datuak eta tresnak',
 'specialpages-group-redirects' => 'Berbideraketa-orri bereziak',
 'specialpages-group-spam' => 'Spam tresnak',
 
@@ -3334,7 +3333,7 @@ Irudiak bereizmen handienean daude, bestelako fitxategi motak beraiei esleitutak
 'logentry-newusers-newusers' => '$1 wikilariak erabiltzaile kontu bat sortu du',
 'logentry-newusers-create' => '$1 wikilariak erabiltzaile kontu bat sortu du',
 'logentry-newusers-create2' => '$1 wikilariak $3 erabiltzaile kontu bat sortu du',
-'newuserlog-byemail' => 'pasahitza e-postaz bidali da',
+'rightsnone' => '(bat ere ez)',
 
 # Feedback
 'feedback-subject' => 'Gaia:',
index 10cb2b8..bc0f2ea 100644 (file)
@@ -611,7 +611,6 @@ Embaju se muestra el rustriju d'acessu cumu referéncia:",
 'template-semiprotected' => '(abati-protehiu)',
 'hiddencategories' => 'Esta páhina preteneci a {{PLURAL:$1|1 categoria açonchá|$1 categorias açonchás}}:',
 'edittools' => '<!-- Esti testu apaicirá embahu los hormulárius d´eición i empuntu. -->',
-'nocreatetitle' => 'Criaeru e páhinas enlimitau',
 'nocreatetext' => 'Nu se premiti crial páhinas nuevas a usuárius anónimus.
 Pueis gorvel i eital anguna páhina ya desistenti, u [[Special:UserLogin|rustrilti]].',
 'nocreate-loggedin' => 'Nu tiés premissu pa crial nuevas páginas.',
@@ -949,11 +948,12 @@ Amás premiti qu'otrus ussuárius contatin contigu pol mé la tu página d'ussu
 'right-userrights' => 'Eital los derechus de tolos usuárius',
 'right-siteadmin' => 'Atarugal i desatarugal la basi e datus',
 
+# Special:Log/newusers
+'newuserlogpage' => 'Rustrihu de nuevus usuárius',
+
 # User rights log
 'rightslog' => 'Rustrihu e derechus de los usuárius',
 'rightslogtext' => 'Esti es un rustrihu e chambus enus derechus los usuárius.',
-'rightslogentry' => 'chambó el grupu al que preteneci $1: de $2 a $3',
-'rightsnone' => '(dengunu)',
 
 # Associated actions - in the sentence "You do not have permission to X"
 'action-read' => 'leyel esta página',
@@ -1340,9 +1340,6 @@ Also see [[Special:WantedCategories|wanted categories]].',
 'listusers-submit' => 'Muestral',
 'listusers-noresult' => 'Nu s´alcuentró dengún usuáriu.',
 
-# Special:Log/newusers
-'newuserlogpage' => 'Rustrihu de nuevus usuárius',
-
 # Special:ListGroupRights
 'listgrouprights' => "Derechus del grupu d'usuárius",
 'listgrouprights-group' => 'Grupu',
@@ -1444,6 +1441,8 @@ Pa hazel chambus ena tu lista e seguimientu, vesita
 
 Ayua la Güiquipeya:
 {{canonicalurl:{{MediaWiki:Helppage}}}}',
+'created' => 'criá',
+'changed' => 'chambau',
 
 # Delete
 'deletepage' => 'Esborral páhina',
@@ -2405,6 +2404,6 @@ Las imahin se muestran a resolución compreta; las demas crasis d'archivu s'ehec
 # New logging system
 'revdelete-restricted' => 'las restricionis a los çahorilis án siu apricás',
 'revdelete-unrestricted' => 'las restricionis a los çahorilis án siu esborrás',
-'newuserlog-byemail' => 'consínia enviá pol e-mail',
+'rightsnone' => '(dengunu)',
 
 );
index 1fbbfa0..d3e5855 100644 (file)
  * @author Asoxor
  * @author Baqeri
  * @author Behdarvandyani
+ * @author Dalba
+ * @author E THP
  * @author Ebraminio
+ * @author Goudarz
  * @author Huji
  * @author Ibrahim
  * @author Ladsgroup
@@ -559,6 +562,7 @@ $messages = array(
 'newwindow' => '(در پنجرهٔ جدید باز می‌شود)',
 'cancel' => 'لغو',
 'moredotdotdot' => 'بیشتر...',
+'morenotlisted' => 'ادامه لیست...',
 'mypage' => 'صفحه',
 'mytalk' => 'بحث',
 'anontalk' => 'بحث برای این آی‌پی',
@@ -948,6 +952,7 @@ $2',
 # E-mail sending
 'php-mail-error-unknown' => 'خطای ناشناخته در تابع  mail()‎ پی‌اچ‌پی',
 'user-mail-no-addy' => 'تلاش برای ارسال نامه بدون یک آدرس رایانامه.',
+'user-mail-no-body' => 'تلاش برای فرستادن پست‌الکترونیک بی‌دلیل کوتاه یا خالی',
 
 # Change password dialog
 'resetpass' => 'تغییر گذرواژه',
@@ -1008,6 +1013,7 @@ $2
 'changeemail-oldemail' => 'نشانی رایانامهٔ کنونی:',
 'changeemail-newemail' => 'نشانی رایانامهٔ جدید:',
 'changeemail-none' => '(هیچ)',
+'changeemail-password' => ' {{SITENAME}} رمز عبور شما:',
 'changeemail-submit' => 'تغییر رایانامه',
 'changeemail-cancel' => 'انصراف',
 
@@ -1196,7 +1202,6 @@ $2
 'template-semiprotected' => '(نیمه‌حفاظت‌شده)',
 'hiddencategories' => 'این صفحه در {{PLURAL:$1|یک ردهٔ پنهان|$1 ردهٔ پنهان}} قرار دارد:',
 'edittools' => '<!-- متن این قسمت زیر صفحه‌های ویرایش و بارگذاری نشان داده می‌شود -->',
-'nocreatetitle' => 'ایجاد صفحه محدود شده‌است',
 'nocreatetext' => '{{SITENAME}} قابلیت ایجاد صفحه‌های جدید را محدود کرده‌است.
 می‌توانید بازگردید و صفحه‌ای موجود را ویرایش کنید یا اینکه  [[Special:UserLogin|به سامانه وارد شوید یا حساب کاربری ایجاد کنید]].',
 'nocreate-loggedin' => 'شما اجازهٔ ایجاد صفحه‌های جدید را ندارید.',
@@ -1750,15 +1755,13 @@ $1",
 'right-sendemail' => 'ارسال رایانامه به دیگر کاربران',
 'right-passwordreset' => 'مشاهدهٔ نامه‌های تنظیم مجدد گذرواژه',
 
+# Special:Log/newusers
+'newuserlogpage' => 'سیاههٔ ایجاد کاربر',
+'newuserlogpagetext' => 'این سیاهه‌ای از نام‌های کاربری تازه‌ساخته‌شده است.',
+
 # User rights log
 'rightslog' => 'سیاههٔ اختیارات کاربر',
 'rightslogtext' => 'این سیاههٔ تغییرات اختیارات کاربر است.',
-'rightslogentry' => 'عضویت $1 را از گروه $2 به $3 تغییر داد',
-'rightslogentry-autopromote' => 'به طور خودکار از $2 به $3 ارتقا یافت',
-'logentry-rights-rights' => '$1 عضویت $3 را از گروه $4 به $5 تغییر داد',
-'logentry-rights-rights-legacy' => '$1 گروه عضویت $3 را تغییر داد',
-'logentry-rights-autopromote' => '$1 به طور خودکار از $4 به $5 ارتقا یافت',
-'rightsnone' => '(هیچ)',
 
 # Associated actions - in the sentence "You do not have permission to X"
 'action-read' => 'خواندن این صفحه',
@@ -2388,7 +2391,7 @@ https://www.mediawiki.org/wiki/Manual:Image_Authorization را ببینید.',
 'linksearch-ok' => 'جستجو',
 'linksearch-text' => 'نشانه‌هایی مانند «‎*.wikipedia.org» را می‌توان استفاده کرد.
 حداقل یک دامنه سطح بالا ، به عنوان مثال "*.org" نیاز دارد.<br />
-پروتکل‌های پشتیبانی‌شده: <code>$1</code> (پیش‌فرض برای http:// در صورت مشخص نشدن پروتکل تنظیم شده‌است)',
+{{PLURAL:$2|پروتکل|پروتکل‌های}} پشتیبانی‌شده: <code>$1</code> (پیش‌فرض برای http:// در صورت مشخص نشدن پروتکل تنظیم شده‌است).',
 'linksearch-line' => '$1 از $2 پیوند دارد',
 'linksearch-error' => 'نشانه‌ها فقط در ابتدای نام میزبان اینترنتی می‌توانند استفاده شوند.',
 
@@ -2407,10 +2410,6 @@ https://www.mediawiki.org/wiki/Manual:Image_Authorization را ببینید.',
 'activeusers-hidesysops' => 'نهفتن مدیران',
 'activeusers-noresult' => 'کاربری پیدا نشد.',
 
-# Special:Log/newusers
-'newuserlogpage' => 'سیاههٔ ایجاد کاربر',
-'newuserlogpagetext' => 'این سیاهه‌ای از نام‌های کاربری تازه‌ساخته‌شده است.',
-
 # Special:ListGroupRights
 'listgrouprights' => 'اختیارات گروه‌های کاربری',
 'listgrouprights-summary' => 'فهرست زیر شامل گروه‌های کاربری تعریف شده در این ویکی و اختیارات داده شده به آن‌ها است.
@@ -2476,8 +2475,8 @@ https://www.mediawiki.org/wiki/Manual:Image_Authorization را ببینید.',
 'watchnologin' => 'به سامانه وارد نشده‌اید',
 'watchnologintext' => 'برای تغییر فهرست پی‌گیری‌هایتان باید [[Special:UserLogin|به سامانه وارد شوید]].',
 'addwatch' => 'افزودن به فهرست پی‌گیری',
-'addedwatchtext' => "صفحهٔ «[[:$1]]» به [[Special:Watchlist|فهرست پی‌گیری‌های]] شما اضافه شد.
-تغییرات این صفحه و صفحهٔ بحث متناظرش در آینده در اینجا فهرست خواهد شد؛ به‌علاوه، این صفحه، برای واضح‌تر دیده شدن در [[Special:RecentChanges|فهرست تغییرات اخیر]] به شکل '''پررنگ''' نمایش خواهد یافت.",
+'addedwatchtext' => 'صفحهٔ «[[:$1]]» به [[Special:Watchlist|فهرست پی‌گیری‌های]] شما اضافه شد.
+تغییرات این صفحه و صفحهٔ بحث متناظرش در آینده در اینجا فهرست خواهد شد.',
 'removewatch' => 'حذف از فهرست پی‌گیری',
 'removedwatchtext' => 'صفحهٔ «[[:$1]]» از [[Special:Watchlist|فهرست پی‌گیری‌های شما]] برداشته شد.',
 'watch' => 'پی‌گیری',
@@ -2511,7 +2510,7 @@ https://www.mediawiki.org/wiki/Manual:Image_Authorization را ببینید.',
 'enotif_subject_moved' => '{{SITENAME}} صفحهٔ $1 توسط {{gender:$2|$2}} انتقال یافت.',
 'enotif_subject_restored' => '{{SITENAME}} صفحهٔ $1 توسط {{gender:$2|$2}} احیا شد.',
 'enotif_subject_changed' => '{{SITENAME}} صفحهٔ $1 توسط {{gender:$2|$2}} تغییر کرد.',
-'enotif_body_intro_deleted' => '{{SITENAME}} صفحهٔ $1 در تاریخ $PAGEEDITDATE توسط {{gender:$2|$2}} حذف شد. $3 را برای نسخهٔ کنونی شاهده کنید.',
+'enotif_body_intro_deleted' => 'صفحهٔ $1 {{SITENAME}} در تاریخ $PAGEEDITDATE توسط {{gender:$2|$2}} حذف شد، $3 را ببینید.',
 'enotif_body_intro_created' => '{{SITENAME}} صفحهٔ $1 در تاریخ $PAGEEDITDATE توسط {{gender:$2|$2}} ایجاد شد. $3 را برای نسخهٔ کنونی شاهده کنید.',
 'enotif_body_intro_moved' => '{{SITENAME}} صفحهٔ $1 در تاریخ $PAGEEDITDATE توسط {{gender:$2|$2}} انتقال یافت، $3 را برای نسخهٔ کنونی شاهده کنید.',
 'enotif_body_intro_restored' => '{{SITENAME}} صفحهٔ $1 در تاریخ $PAGEEDITDATE توسط {{gender:$2|$2}} احیا شد، $3 را برای نسخهٔ کنونی شاهده کنید.',
@@ -2544,6 +2543,8 @@ $PAGEINTRO $NEWPAGE
 
 بازخورد و کمک بیشتر:
 {{canonicalurl:{{MediaWiki:Helppage}}}}',
+'created' => 'ایجاد شده',
+'changed' => 'تغییر یافته',
 
 # Delete
 'deletepage' => 'حذف صفحه',
@@ -2618,6 +2619,8 @@ $PAGEINTRO $NEWPAGE
 'prot_1movedto2' => '[[$1]] به [[$2]] منتقل شد',
 'protect-badnamespace-title' => 'فضای نام بدون محافظت',
 'protect-badnamespace-text' => 'صفحه‌های موجود در این فضای نام، نمی‌توانند محافظت شوند.',
+'protect-norestrictiontypes-text' => 'امکان محافظت این صفحه به علت نبودن نوع محدودیت، مقدور نیست.',
+'protect-norestrictiontypes-title' => 'صفحهٔ غیرقابل محافظت',
 'protect-legend' => 'تأیید محافظت',
 'protectcomment' => 'دلیل:',
 'protectexpiry' => 'زمان سرآمدن:',
@@ -2634,8 +2637,8 @@ $PAGEINTRO $NEWPAGE
 'protect-cascadeon' => 'این صفحه  در حال حاضر محافظت شده‌است زیرا در {{PLURAL:$1|صفحهٔ|صفحه‌های}} زیر که گزینهٔ محافظت آبشاری {{PLURAL:$1|آن|آن‌ها}} فعال است، گنجانده شده است.
 شما می‌توانید سطح محافظت این صفحه را تغییر بدهید اما این کار تاثیری بر محافظت آبشاری صفحه نخواهد گذاشت.',
 'protect-default' => 'همهٔ کاربرها',
-'protect-fallback' => 'سطح دسترسی «$1» لازم است',
-'protect-level-autoconfirmed' => 'بستن کاربران جدید و ثبت‌نام‌نکرده',
+'protect-fallback' => 'فقط به کاربرهایی که دسترسی «$1» دارند، اجازه داده می‌شود',
+'protect-level-autoconfirmed' => 'فقط به کاربرهای تائیدشده اجازه بده',
 'protect-level-sysop' => 'فقط مدیران',
 'protect-summary-cascade' => 'آبشاری',
 'protect-expiring' => 'زمان سرآمدن $1 (UTC)',
@@ -3129,6 +3132,7 @@ $1',
 'import-error-interwiki' => 'صفحه «$1» وارد نشد. چون نام آن برای پیوند خارجی (interwiki) رزرو شده‌است.',
 'import-error-special' => 'صفحه «$1» درون‌ریزی نشد، چرا که متعلق به فضای نام غیرمجاز است.',
 'import-error-invalid' => 'صفحه "$1" به دلیل نامعتبر بودن نامش وارد نمی‌شود.',
+'import-error-unserialize' => 'امکان خارج کردن نسخهٔ $2 از صفحهٔ «$1» از حالت سریال‌شده وجود نداشت. گزارش شد که نسخه از مدل محتوای $3 استفاده می‌کند که به صورت $4 سریال شده‌است.',
 'import-options-wrong' => '{{PLURAL:$2|جزئیات|جزئیات}} اشتباه: <nowiki>$1</nowiki>',
 'import-rootpage-invalid' => 'با توجه به ریشه صفحه عنوان نامعتبر است.',
 'import-rootpage-nosubpage' => 'فضای نام  "$1" صفحهٔ مبنا اجازهٔ زیرصفحه نمی‌دهد.',
@@ -3281,6 +3285,7 @@ $1',
 'pageinfo-magic-words' => '{{PLURAL:$1|حرف|حروف}} جادویی ($1)',
 'pageinfo-hidden-categories' => '{{PLURAL:$1| ردهٔ|ردهٔ}} پنهان ( $1 )',
 'pageinfo-templates' => '{{PLURAL:$1|الگو|الگو}} استفاده‌شده ($1)',
+'pageinfo-transclusions' => '{{PLURAL:$1|صفحهٔ|صفحه‌های}} تراگنجایش‌شده در ($1)',
 'pageinfo-toolboxlink' => 'اطلاعات صفحه',
 'pageinfo-redirectsto' => 'تغییرمسیر به',
 'pageinfo-redirectsto-info' => 'اطلاعات',
@@ -3289,6 +3294,10 @@ $1',
 'pageinfo-protect-cascading' => 'محافظت آبشاری از اینجا',
 'pageinfo-protect-cascading-yes' => 'بله',
 'pageinfo-protect-cascading-from' => 'محافظت آبشاری از',
+'pageinfo-category-info' => 'اطلاعات رده',
+'pageinfo-category-pages' => 'تعداد صفحه‌ها',
+'pageinfo-category-subcats' => 'تعداد زیررده‌ها',
+'pageinfo-category-files' => 'تعداد پرونده‌ها',
 
 # Skin names
 'skinname-standard' => 'کلاسیک',
@@ -3347,6 +3356,7 @@ $1',
 'file-nohires' => 'تفکیک‌پذیری بالاتری در دسترس نیست.',
 'svg-long-desc' => 'پروندهٔ اس‌وی‌جی، با ابعاد <span dir="ltr">$1 × $2</span> پیکسل، اندازهٔ پرونده: $3',
 'svg-long-desc-animated' => 'پروندهٔ اس‌وی‌جی متحرک، با ابعاد <span dir="ltr">$1 × $2</span> پیکسل، اندازهٔ پرونده: $3',
+'svg-long-error' => 'پرونده SVG غیرمجاز: $1',
 'show-big-image' => 'تصویر با تفکیک‌پذیری بالاتر',
 'show-big-image-preview' => 'اندازهٔ این پیش‌نمایش: $1.',
 'show-big-image-other' => '{{PLURAL:$2|کیفیت|کیفیت‌های}} دیگر: $1.',
@@ -3376,6 +3386,8 @@ $1',
 'minutes' => '{{PLURAL: $1|دقیقه|دقیقه}}',
 'hours' => '{{PLURAL: $1|ساعت|ساعت}}',
 'days' => '{{PLURAL: $1|روز|روز}}',
+'months' => '{{PLURAL:$1|$1 ماه|}}',
+'years' => '{{PLURAL:$1|$1 سال|}}',
 'ago' => '$1 پیش',
 'just-now' => 'هم‌اکنون',
 
@@ -4179,9 +4191,9 @@ $5
 'revdelete-content-hid' => 'محتوا را پنهان کرد',
 'revdelete-summary-hid' => 'خلاصه ویرایش را پنهان کرد',
 'revdelete-uname-hid' => 'نام کاربری را پنهان کرد',
-'revdelete-content-unhid' => 'محتوا را پنهان کرد',
-'revdelete-summary-unhid' => 'خلاصه ویرایش را پنهان کرد',
-'revdelete-uname-unhid' => 'نام کاربری را پنهان کرد',
+'revdelete-content-unhid' => 'محتوا را آشکار کرد',
+'revdelete-summary-unhid' => 'خلاصه ویرایش را آشکار کرد',
+'revdelete-uname-unhid' => 'نام کاربری را آشکار کرد',
 'revdelete-restricted' => 'مدیران را محدود کرد',
 'revdelete-unrestricted' => 'محدودیت مدیران را لغو کرد',
 'logentry-move-move' => '$1 صفحهٔ $3 را به $4 منتقل کرد',
@@ -4194,7 +4206,10 @@ $5
 'logentry-newusers-create' => 'حساب کاربری $1 ایجاد شد',
 'logentry-newusers-create2' => 'حساب کاربری $3 توسط $1 ایجاد شد',
 'logentry-newusers-autocreate' => 'حساب $1  به شکل خودکار ساخته شد',
-'newuserlog-byemail' => 'گذرواژه بوسیله رایانامه ارسال شد',
+'logentry-rights-rights' => '$1 عضویت $3 را از گروه $4 به $5 تغییر داد',
+'logentry-rights-rights-legacy' => '$1 گروه عضویت $3 را تغییر داد',
+'logentry-rights-autopromote' => '$1 به طور خودکار از $4 به $5 ارتقا یافت',
+'rightsnone' => '(هیچ)',
 
 # Feedback
 'feedback-bugornote' => 'اگر آماده‌اید تا مشکلی فنی را با جزئیاتش شرح دهید لطفاً [$1 یک ایراد گزارش دهید]. در غیر این صورت می‌توانید از فرم سادهٔ زیر استفاده کنید. نظر شما به همراه نام کاربری و مرورگرتان به صفحهٔ «[$2 $3]» افزوده خواهد شد.',
@@ -4267,6 +4282,4 @@ $5
 'duration-centuries' => '$1 قرن',
 'duration-millennia' => '{{PLURAL:$1|هزار سال |$1 هزار سال}}',
 
-# Unknown messages
-'svg-long-error' => 'پرونده SVG غیرمجاز: $1',
 );
index 93cbb2b..09a5ee6 100644 (file)
@@ -32,6 +32,7 @@
  * @author Tarmo
  * @author Tofu II
  * @author Veikk0.ma
+ * @author VezonThunder
  * @author Wix
  * @author Yaamboo
  * @author ZeiP
@@ -108,6 +109,7 @@ $specialPageAliases = array(
        'MIMEsearch'                => array( 'MIME-haku' ),
        'Mostcategories'            => array( 'Luokitelluimmat_sivut' ),
        'Mostimages'                => array( 'Viitatuimmat_tiedostot' ),
+       'Mostinterwikis'            => array( 'Eniten_kielilinkkejä' ),
        'Mostlinked'                => array( 'Viitatuimmat_sivut' ),
        'Mostlinkedcategories'      => array( 'Viitatuimmat_luokat' ),
        'Mostlinkedtemplates'       => array( 'Viitatuimmat_mallineet' ),
@@ -317,15 +319,15 @@ $messages = array(
 'tog-hidepatrolled' => 'Piilota tarkastetut muutokset tuoreet muutokset -listasta',
 'tog-newpageshidepatrolled' => 'Piilota tarkastetut sivut uusien sivujen listalta',
 'tog-extendwatchlist' => 'Laajenna tarkkailulista näyttämään kaikki tehdyt muutokset eikä vain viimeisimmät',
-'tog-usenewrc' => 'Käytä kehittynyttä tuoreet muutokset -listausta (JavaScript)',
+'tog-usenewrc' => 'Ryhmittele muutokset sivukohtaisesti muutoslistauksissa (JavaScript)',
 'tog-numberheadings' => 'Numeroi otsikot',
 'tog-showtoolbar' => 'Näytä työkalupalkki (JavaScript)',
 'tog-editondblclick' => 'Muokkaa sivuja kaksoisnapsautuksella (JavaScript)',
 'tog-editsection' => 'Näytä muokkauslinkit jokaisen osion yläpuolella',
 'tog-editsectiononrightclick' => 'Muokkaa osioita napsauttamalla otsikkoa hiiren oikealla painikkeella (JavaScript)',
-'tog-showtoc' => 'Näytä sisällysluettelo sivuille, joilla yli 3 otsikkoa',
-'tog-rememberpassword' => 'Muista kirjautumiseni tässä selaimessa (enintään $1 {{PLURAL:$1|päivä|päivää}})',
-'tog-watchcreations' => 'Lisää luomani sivut tarkkailulistalleni',
+'tog-showtoc' => 'Näytä sisällysluettelo sivuille, joilla on yli 3 otsikkoa',
+'tog-rememberpassword' => 'Muista kirjautuminen tässä selaimessa (enintään $1 {{PLURAL:$1|päivä|päivää}})',
+'tog-watchcreations' => 'Lisää luomani sivut ja tallentamani tiedostot tarkkailulistalleni',
 'tog-watchdefault' => 'Lisää muokkaamani sivut tarkkailulistalleni',
 'tog-watchmoves' => 'Lisää siirtämäni sivut tarkkailulistalleni',
 'tog-watchdeletion' => 'Lisää poistamani sivut tarkkailulistalleni',
@@ -333,8 +335,8 @@ $messages = array(
 'tog-previewontop' => 'Näytä esikatselu muokkauskentän yläpuolella',
 'tog-previewonfirst' => 'Näytä esikatselu heti, kun muokkaus aloitetaan',
 'tog-nocache' => 'Älä tallenna sivuja selaimen välimuistiin',
-'tog-enotifwatchlistpages' => 'Lähetä sähköpostiviesti tarkkailulistallani olevien sivujen muutoksista',
-'tog-enotifusertalkpages' => 'Lähetä sähköpostiviesti, kun käyttäjäsivun keskustelusivu muuttuu',
+'tog-enotifwatchlistpages' => 'Lähetä sähköpostiviesti tarkkailulistallani olevien sivujen muokkauksista',
+'tog-enotifusertalkpages' => 'Lähetä sähköpostiviesti oman keskustelusivun muokkauksista',
 'tog-enotifminoredits' => 'Lähetä sähköpostiviesti myös pienistä muokkauksista',
 'tog-enotifrevealaddr' => 'Näytä sähköpostiosoitteeni muille lähetetyissä ilmoituksissa',
 'tog-shownumberswatching' => 'Näytä sivua tarkkailevien käyttäjien määrä',
@@ -594,7 +596,7 @@ $1',
 'thisisdeleted' => 'Näytä tai palauta $1.',
 'viewdeleted' => 'Näytä $1?',
 'restorelink' => '{{PLURAL:$1|yksi poistettu muokkaus|$1 poistettua muokkausta}}',
-'feedlinks' => 'Uutissyötteet:',
+'feedlinks' => 'Syötteet:',
 'feed-invalid' => 'Virheellinen syötetyyppi.',
 'feed-unavailable' => 'Verkkosyötteet eivät ole saatavilla.',
 'site-rss-feed' => '$1-RSS-syöte',
@@ -701,7 +703,7 @@ Syynä on: ''$2''.",
 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 kirjautuneena',
+'exception-nologin' => 'Et ole kirjautunut sisään',
 'exception-nologin-text' => 'Tämä sivu tai toiminto edellyttää sisäänkirjautumista tähän wikiin.',
 
 # Virus scanner
@@ -739,7 +741,7 @@ Huomaa, että jotkut sivut saattavat näkyä edelleen kuin olisit kirjautunut si
 'gotaccount' => "Jos sinulla on jo tunnus, voit '''$1'''.",
 'gotaccountlink' => 'kirjautua sisään',
 'userlogin-resetlink' => 'Unohditko salasanasi?',
-'createaccountmail' => 'sähköpostitse',
+'createaccountmail' => 'Käytä satunnaista väliaikaissalasanaa ja lähetä se alla määritettyyn sähköpostiosoitteeseen',
 'createaccountreason' => 'Syy',
 'badretype' => 'Syöttämäsi salasanat ovat erilaiset.',
 'userexists' => 'Pyytämäsi käyttäjänimi on jo käytössä. Valitse toinen käyttäjänimi.',
@@ -861,6 +863,7 @@ Väliaikainen salasana: $2',
 'changeemail-oldemail' => 'Nykyinen sähköpostiosoite',
 'changeemail-newemail' => 'Uusi sähköpostiosoite',
 'changeemail-none' => '(ei asetettu)',
+'changeemail-password' => 'Salasanasi sivustolla {{SITENAME}}',
 'changeemail-submit' => 'Muuta sähköpostiosoite',
 'changeemail-cancel' => 'Peruuta',
 
@@ -1027,7 +1030,6 @@ Alla on viimeisin lokitapahtuma:",
 'template-semiprotected' => '(suojattu kirjautumattomilta ja uusilta käyttäjiltä)',
 'hiddencategories' => 'Tämä sivu kuuluu {{PLURAL:$1|seuraavaan piilotettuun luokkaan|seuraaviin piilotettuihin luokkiin}}:',
 'edittools' => '<!-- Tässä oleva teksti näytetään muokkauskentän alla. -->',
-'nocreatetitle' => 'Sivujen luominen on rajoitettu',
 'nocreatetext' => 'Et voi luoda uusia sivuja. Voit muokata olemassa olevia sivuja tai [[Special:UserLogin|luoda käyttäjätunnuksen]].',
 'nocreate-loggedin' => 'Sinulla ei ole oikeuksia luoda uusia sivuja.',
 'sectioneditnotsupported-title' => 'Osiomuokkaaminen ei ole tuettu.',
@@ -1564,13 +1566,13 @@ Tässä satunnaisesti tuotettu arvo, jota voit käyttää: $1',
 'right-sendemail' => 'Lähettää sähköpostia muille käyttäjille',
 'right-passwordreset' => 'Tarkastella salasanan alustusviestejä',
 
+# Special:Log/newusers
+'newuserlogpage' => 'Uudet käyttäjät',
+'newuserlogpagetext' => 'Tämä on loki luoduista käyttäjätunnuksista.',
+
 # User rights log
 'rightslog' => 'Käyttöoikeusloki',
 'rightslogtext' => 'Tämä on loki käyttäjien käyttöoikeuksien muutoksista.',
-'rightslogentry' => 'muutti käyttäjän $1 oikeudet ryhmistä $2 ryhmiin $3',
-'rightslogentry-autopromote' => 'muutettiin automaattisesti ryhmistä $2 ryhmiin $3',
-'logentry-rights-rights' => '$1 muutti käyttäjän $3 oikeudet ryhmistä $4 ryhmiin $5',
-'rightsnone' => '(ei oikeuksia)',
 
 # Associated actions - in the sentence "You do not have permission to X"
 'action-read' => 'lukea tätä sivua',
@@ -1908,7 +1910,7 @@ Jos suodatusperusteena käytetään käyttäjää, tuloksissa näytetään vain
 # File description page
 'file-anchor-link' => 'Tiedosto',
 'filehist' => 'Tiedoston historia',
-'filehist-help' => 'Päiväystä napsauttamalla näet millainen tiedosto oli kyseisellä hetkellä.',
+'filehist-help' => 'Päiväystä napsauttamalla näet, millainen tiedosto oli kyseisellä hetkellä.',
 'filehist-deleteall' => 'poista kaikki',
 'filehist-deleteone' => 'poista tämä',
 'filehist-revert' => 'palauta',
@@ -2181,9 +2183,9 @@ Katso myös [[Special:WantedCategories|halutut luokat]].',
 'linksearch-pat' => 'Osoite',
 'linksearch-ns' => 'Nimiavaruus',
 'linksearch-ok' => 'Etsi',
-'linksearch-text' => 'Tähteä (*) voi käyttää jokerimerkkinä, esimerkiksi ”*.wikipedia.org”.
-Vähintään ylätason verkkotunnus, esimerkiksi "*.org", tarvitaan.<br />
-Tuetut protokollat: <code>$1</code> (oletuksena on <code>http://</code>, jos protokollaa ei määritetä).',
+'linksearch-text' => 'Jokerimerkkejä, kuten "*.wikipedia.org", voidaan käyttää.
+Vaaditaan vähintään ylätason verkkotunnus, esimerkiksi "*.org".<br />
+{{PLURAL:$2|Tuettu protokolla|Tuetut protokollat}}: <code>$1</code> (oletuksena on <code>http://</code>, jos protokollaa ei määritetä).',
 'linksearch-line' => '$1 on linkitetty sivulta $2',
 'linksearch-error' => 'Jokerimerkkiä voi käyttää ainoastaan osoitteen alussa.',
 
@@ -2196,16 +2198,12 @@ Tuetut protokollat: <code>$1</code> (oletuksena on <code>http://</code>, jos pro
 # Special:ActiveUsers
 'activeusers' => 'Aktiivisten käyttäjien lista',
 'activeusers-intro' => 'Tämä on luettelo käyttäjistä, jotka ovat tehneet jotain viimeisen $1 {{PLURAL:$1|päivän}} sisällä.',
-'activeusers-count' => '$1 {{PLURAL:$1|muokkaus|muokkausta}} viimeisen {{PLURAL:$3|päivän|$3 päivän}} aikana',
+'activeusers-count' => '$1 {{PLURAL:$1|toiminto|toimintoa}} viimeisen {{PLURAL:$3|päivän|$3 päivän}} aikana',
 'activeusers-from' => 'Näytä käyttäjät alkaen',
 'activeusers-hidebots' => 'Piilota botit',
 'activeusers-hidesysops' => 'Piilota ylläpitäjät',
 'activeusers-noresult' => 'Käyttäjiä ei löytynyt.',
 
-# Special:Log/newusers
-'newuserlogpage' => 'Uudet käyttäjät',
-'newuserlogpagetext' => 'Tämä on loki luoduista käyttäjätunnuksista.',
-
 # Special:ListGroupRights
 'listgrouprights' => 'Käyttäjäryhmien oikeudet',
 'listgrouprights-summary' => 'Tämä lista sisältää tämän wikin käyttäjäryhmät sekä ryhmiin liitetyt käyttöoikeudet.
@@ -2270,7 +2268,8 @@ Lisätietoa yksittäisistä käyttäjäoikeuksista saattaa löytyä [[{{MediaWik
 'watchnologin' => 'Et ole kirjautunut sisään',
 'watchnologintext' => 'Sinun pitää [[Special:UserLogin|kirjautua sisään]], jotta voisit käyttää tarkkailulistaasi.',
 'addwatch' => 'Lisää tarkkailulistalle',
-'addedwatchtext' => "Sivu '''[[:$1]]''' on lisätty [[Special:Watchlist|tarkkailulistallesi]]. Tulevaisuudessa sivuun ja sen keskustelusivuun tehtävät muutokset listataan täällä. Sivu on '''lihavoitu''' [[Special:RecentChanges|tuoreiden muutosten listassa]], jotta huomaisit sen helpommin. Jos haluat myöhemmin poistaa sivun tarkkailulistaltasi, napsauta linkkiä ''lopeta tarkkailu'' sivun reunassa.",
+'addedwatchtext' => "Sivu '''[[:$1]]''' on lisätty [[Special:Watchlist|tarkkailulistallesi]].
+Tulevaisuudessa sivuun ja sen keskustelusivuun tehtävät muutokset listataan täällä.",
 'removewatch' => 'Poista tarkkailulistalta',
 'removedwatchtext' => "Sivu '''[[:$1]]''' on poistettu [[Special:Watchlist|tarkkailulistaltasi]].",
 'watch' => 'Tarkkaile',
@@ -2286,7 +2285,7 @@ Lisätietoa yksittäisistä käyttäjäoikeuksista saattaa löytyä [[{{MediaWik
 'watchmethod-recent' => 'tarkistetaan tuoreimpia muutoksia tarkkailluille sivuille',
 'watchmethod-list' => 'tarkistetaan tarkkailtujen sivujen tuoreimmat muutokset',
 'watchlistcontains' => 'Tarkkailulistallasi on {{PLURAL:$1|yksi sivu|$1 sivua}}.',
-'iteminvalidname' => 'Sivun $1 kanssa oli ongelmia! Sivun nimessä on vikaa.',
+'iteminvalidname' => 'Sivun $1 kanssa oli ongelmia. Sivun nimessä on vikaa.',
 'wlnote' => "Alla on {{PLURAL:$1|yksi muutos|'''$1''' muutosta}} viimeisen {{PLURAL:$2|tunnin|'''$2''' tunnin}} ajalta $3 kello $4 asti.",
 'wlshowlast' => 'Näytä viimeiset $1 tuntia tai $2 päivää, $3',
 'watchlist-options' => 'Tarkkailulistan asetukset',
@@ -2298,17 +2297,17 @@ Lisätietoa yksittäisistä käyttäjäoikeuksista saattaa löytyä [[{{MediaWik
 
 'enotif_mailer' => '{{GRAMMAR:genitive|{{SITENAME}}}} sivu on muuttunut -ilmoitus',
 'enotif_reset' => 'Merkitse kaikki sivut kerralla nähdyiksi',
-'enotif_impersonal_salutation' => '{{SITENAME}}-käyttäjä',
-'enotif_subject_deleted' => '{{gender:$2|$2}} poisti {{SITENAME}}-sivun $1',
-'enotif_subject_created' => '{{gender:$2|$2}} loi {{SITENAME}}-sivun $1',
-'enotif_subject_moved' => '{{gender:$2|$2}} siirsi {{SITENAME}}-sivun $1',
-'enotif_subject_restored' => '{{gender:$2|$2}} palautti {{SITENAME}}-sivun $1',
-'enotif_subject_changed' => '{{gender:$2|$2}} muutti {{SITENAME}}-sivua $1',
-'enotif_body_intro_deleted' => '{{gender:$2|$2}} poisti {{SITENAME}}-sivun $1 $PAGEEDITDATE, sivun nykyinen versio on osoitteessa $3.',
-'enotif_body_intro_created' => '{{gender:$2|$2}} loi {{SITENAME}}-sivun $1 $PAGEEDITDATE, sivun nykyinen versio on osoitteessa $3.',
-'enotif_body_intro_moved' => '{{gender:$2|$2}} siirsi {{SITENAME}}-sivun $1 $PAGEEDITDATE, sivun nykyinen versio on osoitteessa $3.',
-'enotif_body_intro_restored' => '{{gender:$2|$2}} palautti {{SITENAME}}-sivun $1 $PAGEEDITDATE, sivun nykyinen versio on osoitteessa $3.',
-'enotif_body_intro_changed' => '{{gender:$2|$2}} muutti {{SITENAME}}-sivua $1 $PAGEEDITDATE, sivun nykyinen versio on osoitteessa $3.',
+'enotif_impersonal_salutation' => '{{GRAMMAR:genitive|{{SITENAME}}}} käyttäjä',
+'enotif_subject_deleted' => '{{GENDER:$2|$2}} poisti {{GRAMMAR:elative|{{SITENAME}}}} sivun $1',
+'enotif_subject_created' => '{{GENDER:$2|$2}} loi {{GRAMMAR:illative|{{SITENAME}}}} sivun $1',
+'enotif_subject_moved' => '{{GENDER:$2|$2}} siirsi {{GRAMMAR:inessive|{{SITENAME}}}} sivun $1',
+'enotif_subject_restored' => '{{GENDER:$2|$2}} palautti {{GRAMMAR:inessive|{{SITENAME}}}} sivun $1',
+'enotif_subject_changed' => '{{GENDER:$2|$2}} muutti {{GRAMMAR:inessive|{{SITENAME}}}} sivua $1',
+'enotif_body_intro_deleted' => '{{GENDER:$2|$2}} poisti {{GRAMMAR:elative|{{SITENAME}}}} sivun $1 $PAGEEDITDATE ($3).',
+'enotif_body_intro_created' => '{{GENDER:$2|$2}} loi {{GRAMMAR:inessive|{{SITENAME}}}} sivun $1 $PAGEEDITDATE. Sivun nykyinen versio on osoitteessa $3.',
+'enotif_body_intro_moved' => '{{GENDER:$2|$2}} siirsi {{GRAMMAR:inessive|{{SITENAME}}}} sivun $1 $PAGEEDITDATE. Sivun nykyinen versio on osoitteessa $3.',
+'enotif_body_intro_restored' => '{{GENDER:$2|$2}} palautti {{GRAMMAR:inessive|{{SITENAME}}}} sivun $1 $PAGEEDITDATE. Sivun nykyinen versio on osoitteessa $3.',
+'enotif_body_intro_changed' => '{{GENDER:$2|$2}} muutti {{GRAMMAR:inessive|{{SITENAME}}}} sivua $1 $PAGEEDITDATE. Sivun nykyinen versio on osoitteessa $3.',
 'enotif_lastvisited' => 'Osoitteessa $1 on kaikki muutokset viimeisen käyntisi jälkeen.',
 'enotif_lastdiff' => 'Muutos on osoitteessa $1.',
 'enotif_anon_editor' => 'kirjautumaton käyttäjä $1',
@@ -2338,6 +2337,8 @@ $UNWATCHURL
 
 Palaute ja lisäapu osoitteessa:
 {{canonicalurl:{{MediaWiki:Helppage}}}}',
+'created' => 'luonut sivun',
+'changed' => 'muuttanut sivua',
 
 # Delete
 'deletepage' => 'Poista sivu',
@@ -2401,6 +2402,8 @@ Viimeisimmän muokkauksen on tehnyt käyttäjä [[User:$3|$3]] ([[User talk:$3|k
 'prot_1movedto2' => 'siirsi sivun [[$1]] uudelle nimelle [[$2]]',
 'protect-badnamespace-title' => 'Nimiavaruus ei suojattavissa',
 'protect-badnamespace-text' => 'Tämän nimiavaruuden sivuja ei voi suojata.',
+'protect-norestrictiontypes-text' => 'Tätä sivua ei voi suojata, koska mitään rajoitusvaihtoehtoja ei ole käytettävissä.',
+'protect-norestrictiontypes-title' => 'Ei suojattavissa oleva sivu',
 'protect-legend' => 'Suojaukset',
 'protectcomment' => 'Syy',
 'protectexpiry' => 'Vanhentuu',
@@ -2413,9 +2416,9 @@ Viimeisimmän muokkauksen on tehnyt käyttäjä [[User:$3|$3]] ([[User talk:$3|k
 'protect-locked-access' => "Sinulla ei ole tarvittavia oikeuksia sivujen suojauksen muuttamiseen. Alla on sivun ”'''$1'''” nykyiset suojaukset:",
 'protect-cascadeon' => 'Tämä sivu on suojauksen kohteena, koska se on sisällytetty alla {{PLURAL:$1|olevaan laajennetusti suojattuun sivuun|oleviin laajennetusti suojattuihin sivuihin}}. Voit muuttaa tämän sivun suojaustasoa, mutta se ei vaikuta laajennettuun suojaukseen.',
 'protect-default' => 'Salli kaikki käyttäjät',
-'protect-fallback' => 'Vaadi $1-oikeus',
-'protect-level-autoconfirmed' => 'Estä uudet ja kirjautumattomat käyttäjät',
-'protect-level-sysop' => 'Vain ylläpitäjät',
+'protect-fallback' => 'Salli vain käyttäjät, joilla on oikeus $1',
+'protect-level-autoconfirmed' => 'Vain hyväksytyt käyttäjät',
+'protect-level-sysop' => 'Salli vain ylläpitäjät',
 'protect-summary-cascade' => 'laajennettu',
 'protect-expiring' => 'vanhentuu $1 (UTC)',
 'protect-expiring-local' => 'vanhentuu $1',
@@ -2705,7 +2708,7 @@ Voit päivittää sivuun viittaavat ohjaukset automaattisesti ohjaamaan uudelle
 Jos et halua tätä tehtävän automaattisesti, muista tehdä tarkistukset [[Special:DoubleRedirects|kaksinkertaisten]] tai [[Special:BrokenRedirects|rikkinäisten]] ohjausten varalta.
 Olet vastuussa siitä, että linkit osoittavat sinne, mihin niiden on tarkoituskin osoittaa.
 
-Huomaa, että sivua '''ei''' siirretä mikäli uusi otsikko on olemassa olevan sivun käytössä, paitsi milloin kyseessä on tyhjä sivu tai ohjaus, jolla ei ole muokkaushistoriaa.
+Huomaa, että sivua '''ei''' siirretä mikäli uusi otsikko on olemassa olevan sivun käytössä, paitsi milloin kyseessä on ohjaus, jolla ei ole muokkaushistoriaa.
 Tämä tarkoittaa sitä, että voit siirtää sivun takaisin vanhalle nimelleen mikäli teit virheen, mutta et voi kirjoittaa olemassa olevan sivun päälle.
 
 Tämä saattaa olla suuri ja odottamaton muutos suositulle sivulle. Varmista, että tiedät seuraukset ennen kuin siirrät sivun.",
@@ -3058,12 +3061,17 @@ Tallenna tiedot koneellesi ja tuo ne tällä sivulla.',
 'pageinfo-magic-words' => '{{PLURAL:$1|Taikasana|Taikasanat}} ($1)',
 'pageinfo-hidden-categories' => '{{PLURAL:$1|Piilotettu luokka|Piilotetut luokat}} ($1)',
 'pageinfo-templates' => '{{PLURAL:$1|Sisällytetty malline|Sisällytetyt mallineet}} ($1)',
+'pageinfo-transclusions' => 'Sisällytetty {{PLURAL:$1|sivulle|sivuille}} ($1)',
 'pageinfo-toolboxlink' => 'Sivun tiedot',
 'pageinfo-redirectsto' => 'Ohjaus sivulle',
 'pageinfo-redirectsto-info' => 'tiedot',
 'pageinfo-contentpage' => 'Lasketaan sisältösivuksi',
 'pageinfo-contentpage-yes' => 'Kyllä',
 'pageinfo-protect-cascading-yes' => 'Kyllä',
+'pageinfo-category-info' => 'Luokkatiedot',
+'pageinfo-category-pages' => 'Sivujen määrä',
+'pageinfo-category-subcats' => 'Alaluokkien määrä',
+'pageinfo-category-files' => 'Tiedostojen määrä',
 
 # Skin names
 'skinname-standard' => 'Perus',
@@ -3120,6 +3128,7 @@ Suorittamalla sen järjestelmäsi voi muuttua epäluotettavaksi.",
 'file-nohires' => 'Tarkempaa kuvaa ei ole saatavilla.',
 '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-preview' => 'Tämän esikatselun koko: $1.',
 'show-big-image-other' => '{{PLURAL:$2|Muu resoluutio|Muut resoluutiot}}: $1.',
@@ -3149,6 +3158,8 @@ Suorittamalla sen järjestelmäsi voi muuttua epäluotettavaksi.",
 'minutes' => '{{PLURAL:$1|$1 minuutti|$1 minuuttia}}',
 'hours' => '{{PLURAL:$1|$1 tunti|$1 tuntia}}',
 'days' => '{{PLURAL:$1|$1 päivä|$1 päivää}}',
+'months' => '{{PLURAL:$1|$1 kuukausi|$1 kuukautta}}',
+'years' => '{{PLURAL:$1|$1 vuosi|$1 vuotta}}',
 'ago' => '$1 sitten',
 'just-now' => 'juuri nyt',
 
@@ -3756,6 +3767,7 @@ Voit myös muokata listaa [[Special:EditWatchlist|tavalliseen tapaan]].',
 'version-license' => 'Lisenssi',
 'version-poweredby-credits' => "Tämä wiki käyttää '''[//www.mediawiki.org/ MediaWikiä]'''. Copyright © 2001–$1 $2.",
 'version-poweredby-others' => 'muut',
+'version-credits-summary' => 'Haluaisimme kiittää seuraavia henkilöitä heidän panoksestaan [[Special:Version|MediaWiki-ohjelmistoon]].',
 'version-license-info' => 'MediaWiki on vapaa ohjelmisto – voit levittää sitä ja/tai muokata sitä Free Software Foundationin GNU General Public Licensen ehdoilla, joko version 2 tai halutessasi minkä tahansa myöhemmän version mukaisesti.
 
 MediaWikiä levitetään siinä toivossa, että se olisi hyödyllinen, mutta ilman mitään takuuta; ilman edes hiljaista takuuta kaupallisesti hyväksyttävästä laadusta tai soveltuvuudesta tiettyyn tarkoitukseen. Katso GPL-lisenssistä lisää yksityiskohtia.
@@ -3800,7 +3812,7 @@ Kuvat näytetään täysikokoisina. Muut tiedostot avataan niille määritetyss
 'specialpages-group-highuse' => 'Sivujen käyttöaste',
 'specialpages-group-pages' => 'Sivulistaukset',
 'specialpages-group-pagetools' => 'Sivutyökalut',
-'specialpages-group-wiki' => 'Wikitiedot ja työkalut',
+'specialpages-group-wiki' => 'Tiedot ja työkalut',
 'specialpages-group-redirects' => 'Ohjaavat toimintosivut',
 'specialpages-group-spam' => 'Mainostenpoistotyökalut',
 
@@ -3898,7 +3910,10 @@ Kuvat näytetään täysikokoisina. Muut tiedostot avataan niille määritetyss
 'logentry-newusers-create' => 'Käyttäjätunnus $1 luotiin',
 'logentry-newusers-create2' => '$1 loi käyttäjätunnuksen $3',
 'logentry-newusers-autocreate' => 'Käyttäjätunnus $1 luotiin automaattisesti',
-'newuserlog-byemail' => 'salasana lähetetty sähköpostitse',
+'logentry-rights-rights' => '$1 muutti käyttäjän $3 oikeudet ryhmistä $4 ryhmiin $5',
+'logentry-rights-rights-legacy' => '$1 muutti käyttäjän $3 jäsenyyttä ryhmässä',
+'logentry-rights-autopromote' => '$1 ylennettiin automaattisesti ryhmistä $4 ryhmiin $5',
+'rightsnone' => '(ei oikeuksia)',
 
 # Feedback
 'feedback-bugornote' => 'Jos voit kuvailla teknisen ongelman tarkasti – [$1 ilmoita ohjelmointivirheestä].
@@ -3951,7 +3966,8 @@ Muussa tapauksessa voit käyttää alla olevaa helpompaa lomaketta. Kommenttisi
 'api-error-nomodule' => 'Sisäinen virhe: tallennusmoduulia ei ole asetettu.',
 'api-error-ok-but-empty' => 'Sisäinen virhe: palvelimelta ei saatu vastausta.',
 'api-error-overwrite' => 'Olemassa olevan tiedoston korvaaminen ei ole sallittua.',
-'api-error-stashfailed' => 'Sisäinen virhe: välikaikaisen tiedoston tallentaminen epäonnistui.',
+'api-error-stashfailed' => 'Sisäinen virhe: Väliaikaisen tiedoston tallentaminen epäonnistui.',
+'api-error-publishfailed' => 'Sisäinen virhe: Väliaikaisen tiedoston julkaiseminen epäonnistui.',
 'api-error-timeout' => 'Palvelin ei vastannut odotetun ajan kuluessa.',
 'api-error-unclassified' => 'Tapahtui tuntematon virhe.',
 'api-error-unknown-code' => 'Tuntematon virhe: $1',
@@ -3972,6 +3988,4 @@ Muussa tapauksessa voit käyttää alla olevaa helpompaa lomaketta. Kommenttisi
 'duration-centuries' => '$1 {{PLURAL:$1|vuosisata|vuosisataa}}',
 'duration-millennia' => '$1 {{PLURAL:$1|vuosituhat|vuosituhatta}}',
 
-# Unknown messages
-'svg-long-error' => 'Kelvoton SVG-tiedosto: $1',
 );
diff --git a/languages/messages/MessagesFiu_vro.php b/languages/messages/MessagesFiu_vro.php
deleted file mode 100644 (file)
index 9407647..0000000
+++ /dev/null
@@ -1,12 +0,0 @@
-<?php
-/** Võro
- *
- * See MessagesQqq.php for message documentation incl. usage of parameters
- * To improve a translation please visit http://translatewiki.net
- *
- * @ingroup Language
- * @file
- * @comment Deprecated language code. Falls back to 'vro'.
- */
-
-$fallback = 'vro, et';
index fd19ce3..c449f1e 100644 (file)
@@ -859,7 +859,6 @@ Tann seinasti posturin í loggfíluni er vístur niðanfyri fyri kelduávísing:
 'template-protected' => '(friðað)',
 'template-semiprotected' => '(lutvíst vardar)',
 'hiddencategories' => 'Henda síðan er í {{PLURAL:$1|1 fjaldum bólki|$1 fjaldum bólkum}}:',
-'nocreatetitle' => 'Upprættan av síðu er avmarkað',
 'nocreatetext' => '{{SITENAME}} hevur noktað fyri møguleikanum at upprætta nýggjar síður.
 Tú kanst fara aftur og rætta eina síðu sum longu er til, ella [[Special:UserLogin|rita teg inn ella få tær eina konto]].',
 'nocreate-loggedin' => 'Tú hevur ikki loyvi til at upprætta nýggjar síður.',
@@ -1286,12 +1285,13 @@ Tín t-post adressa verður ikki avdúkað, tá aðrir brúkarir seta seg í sam
 'right-sendemail' => 'Send t-post til aðrir brúkarar',
 'right-passwordreset' => 'Sí teldupostar til nullstilling av loyniorði',
 
+# Special:Log/newusers
+'newuserlogpage' => 'Brúkara logg',
+'newuserlogpagetext' => 'Hetta er ein listi yvir seinast stovnaðu brúkarar.',
+
 # User rights log
 'rightslog' => 'Rættindaloggur',
 'rightslogtext' => 'Hetta er ein loggur sum vísir broytingar í brúkararættindum.',
-'rightslogentry' => 'broyttar bólka limaskap fyri $1 frá $2 til $3',
-'rightslogentry-autopromote' => 'varð sjálvvirkandi fluttur upp frá $2 til $3',
-'rightsnone' => '(ongin)',
 
 # Associated actions - in the sentence "You do not have permission to X"
 'action-read' => 'les hesa síðu',
@@ -1686,10 +1686,6 @@ Sí eisini [[Special:WantedCategories|ynsktir bólkar]].',
 'activeusers-hidesysops' => 'Fjal umboðsstjórar (administratorar)',
 'activeusers-noresult' => 'Ongir brúkarar funnir.',
 
-# Special:Log/newusers
-'newuserlogpage' => 'Brúkara logg',
-'newuserlogpagetext' => 'Hetta er ein listi yvir seinast stovnaðu brúkarar.',
-
 # Special:ListGroupRights
 'listgrouprights' => 'Brúkara bólka rættindi',
 'listgrouprights-summary' => 'Henda síða vísir ein lista av brúkarabólkum, sum eru útgreinaðir á hesi wiki og rættindini hjá teimum einstøku bólkunum.
@@ -1763,6 +1759,7 @@ Vilt tú flyta síðuna undan tínum eftirliti, kanst tú trýsta á \"Strika ef
 'unwatching' => 'Strikar eftirlit...',
 
 'enotif_impersonal_salutation' => '{{SITENAME}}brúkari',
+'created' => 'stovnað',
 
 # Delete
 'deletepage' => 'Strika síðu',
@@ -2253,6 +2250,9 @@ Hendan váttanarkoda fer úr gildi tann $4.',
 'compare-page1' => 'Síða 1',
 'compare-page2' => 'Síða 2',
 
+# New logging system
+'rightsnone' => '(ongin)',
+
 # Search suggestions
 'searchsuggest-search' => 'Leita',
 
index ea0336a..bba2eef 100644 (file)
  * @author Dereckson
  * @author Diti
  * @author Dodoïste
+ * @author Drongou
  * @author Elfix
  * @author Enzoreg
  * @author Erkethan
  * @author Esbardu
+ * @author Fabrice Ferrer
  * @author Fryed-peach
  * @author Geoleplubo
  * @author Giro720
@@ -40,6 +42,7 @@
  * @author Houcinee1
  * @author Hégésippe Cormier
  * @author IAlex
+ * @author Isildur
  * @author Jagwar
  * @author Jean-Frédéric
  * @author JeanVoisin
@@ -130,6 +133,7 @@ $specialPageAliases = array(
        'Booksources'               => array( 'Ouvrages_de_référence', 'Ouvrages_de_reference', 'Ouvragesderéférence', 'Ouvragesdereference', 'Recherche_ISBN', 'Recherche_isbn', 'RechercheISBN', 'Rechercheisbn' ),
        'BrokenRedirects'           => array( 'Redirections_cassées', 'RedirectionCassées', 'Redirections_cassees', 'RedirectionsCassees' ),
        'Categories'                => array( 'Catégories' ),
+       'ChangeEmail'               => array( 'ChangerCouriel', 'Changer_courrielw' ),
        'ChangePassword'            => array( 'Changement_du_mot_de_passe', 'ChangementDuMotDePasse' ),
        'Confirmemail'              => array( 'Confirmer_l\'adresse_de_contact', 'Confirmer_le_courriel', 'ConfirmerLeCourriel' ),
        'CreateAccount'             => array( 'Créer_un_compte', 'CréerUnCompte', 'CréerCompte' ),
@@ -137,6 +141,7 @@ $specialPageAliases = array(
        'DeletedContributions'      => array( 'Contributions_supprimées', 'ContributionsSupprimées', 'ContributionSupprimees' ),
        'Disambiguations'           => array( 'Homonymies', 'Homonymie', 'Pages_d\'homonymie' ),
        'DoubleRedirects'           => array( 'Doubles_redirections', 'DoublesRedirections', 'Redirections_doubles', 'RedirectionsDoubles' ),
+       'EditWatchlist'             => array( 'Éditer_Liste_de_suivi', 'ÉditerListeDeSuivi' ),
        'Emailuser'                 => array( 'Envoyer_un_courriel', 'EnvoyerUnCourriel', 'Courriel', 'Envoyer_un_e-mail', 'EnvoyerUnEMail', 'E-mail', 'EMail' ),
        'Export'                    => array( 'Exporter', 'Exportation' ),
        'Fewestrevisions'           => array( 'Pages_les_moins_modifiées', 'PagesLesMoinsModifiées', 'Pages_les_moins_modifiees', 'PagesLesMoinsModifiees', 'Les_moins_modifiés', 'LesMoinsModifiés', 'Les_moins_modifies', 'LesMoinsModifies' ),
@@ -251,6 +256,7 @@ $magicWords = array(
        'pagenamee'                 => array( '1', 'NOMPAGEX', 'PAGENAMEE' ),
        'namespace'                 => array( '1', 'ESPACENOMMAGE', 'NAMESPACE' ),
        'namespacee'                => array( '1', 'ESPACENOMMAGEX', 'NAMESPACEE' ),
+       'namespacenumber'           => array( '1', 'NOMBREESPACENOMMAGE', 'NAMESPACENUMBER' ),
        'talkspace'                 => array( '1', 'ESPACEDISCUSSION', 'TALKSPACE' ),
        'talkspacee'                => array( '1', 'ESPACEDISCUSSIONX', 'TALKSPACEE' ),
        'subjectspace'              => array( '1', 'ESPACESUJET', 'ESPACEARTICLE', 'SUBJECTSPACE', 'ARTICLESPACE' ),
@@ -348,6 +354,8 @@ $magicWords = array(
        'protectionlevel'           => array( '1', 'NIVEAUDEPROTECTION', 'PROTECTIONLEVEL' ),
        'url_path'                  => array( '0', 'CHEMIN', 'PATH' ),
        'url_query'                 => array( '0', 'QUESTION', 'QUERY' ),
+       'pagesincategory_all'       => array( '0', 'tous', 'all' ),
+       'pagesincategory_files'     => array( '0', 'fichier', 'files' ),
 );
 
 $bookstoreList = array(
@@ -510,6 +518,7 @@ $messages = array(
 'newwindow' => '(ouvre une nouvelle fenêtre)',
 'cancel' => 'Annuler',
 'moredotdotdot' => 'Plus...',
+'morenotlisted' => 'Davantage non listé…',
 'mypage' => 'Page',
 'mytalk' => 'Discussion',
 'anontalk' => 'Discussion avec cette adresse IP',
@@ -695,12 +704,12 @@ Une liste des pages spéciales valides se trouve sur [[Special:SpecialPages|{{in
 # General errors
 'error' => 'Erreur',
 'databaseerror' => 'Erreur de la base de données',
-'dberrortext' => 'Une erreur de syntaxe de la requête dans la base de données est survenue.
+'dberrortext' => "Une erreur de syntaxe de la requête dans la base de données est survenue.
 Ceci peut indiquer un bogue dans le logiciel.
 La dernière requête traitée par la base de données était :
 <blockquote><code>$1</code></blockquote>
 depuis la fonction « <code>$2</code> ».
-La base de données a renvoyé l’erreur « <samp>$3 : $4</samp> ».',
+La base de données a renvoyé l'erreur « <samp>$3 : $4</samp> ».",
 'dberrortextcl' => "Une requête dans la base de données comporte une erreur de syntaxe.
 La dernière requête émise était :
 « $1 »
@@ -788,7 +797,7 @@ Vous pouvez continuer à utiliser {{SITENAME}} de façon anonyme, <span class='p
 Notez que certaines pages peuvent être encore affichées comme si vous étiez toujours connecté(e), jusqu'à ce que vous effaciez le cache de votre navigateur.",
 'welcomeuser' => 'Bienvenue, $1&nbsp;!',
 'welcomecreation-msg' => "Votre compte a été créé.
-N'oubliez pas de modifier vos [[Special:Preferences|{{SITENAME}} préférences]].",
+N'oubliez pas de modifier [[Special:Preferences|vos préférences pour {{SITENAME}}]].",
 'yourname' => "Nom d'utilisateur :",
 'yourpassword' => 'Mot de passe&nbsp;:',
 'yourpasswordagain' => 'Confirmez le mot de passe :',
@@ -811,7 +820,7 @@ N'oubliez pas de modifier vos [[Special:Preferences|{{SITENAME}} préférences]]
 'gotaccount' => "Vous avez déjà un compte ? '''$1'''.",
 'gotaccountlink' => 'Connectez-vous',
 'userlogin-resetlink' => 'Vous avez oublié vos détails de connexion ?',
-'createaccountmail' => 'par courriel',
+'createaccountmail' => 'Utiliser un mot de passe aléatoire temporaire et l’envoyer à l’adresse de courriel spécifiée ci-dessous',
 'createaccountreason' => 'Motif :',
 'badretype' => 'Les mots de passe que vous avez saisis ne correspondent pas.',
 'userexists' => "Nom d'utilisateur entré déjà utilisé.
@@ -882,6 +891,7 @@ Veuillez attendre avant d'essayer à nouveau.",
 # E-mail sending
 'php-mail-error-unknown' => 'Erreur inconnue dans la fonction mail() de PHP.',
 'user-mail-no-addy' => "Tenté d'envoyer un courriel sans adresse de courriel",
+'user-mail-no-body' => "Essai d'envoi d'un courriel avec un corps vide ou déraisonnablement court.",
 
 # Change password dialog
 'resetpass' => 'Changer de mot de passe',
@@ -937,6 +947,7 @@ Mot de passe temporaire : $2",
 'changeemail-oldemail' => 'Adresse de courriel actuelle :',
 'changeemail-newemail' => 'Nouvelle adresse de courriel :',
 'changeemail-none' => '(aucune)',
+'changeemail-password' => 'Votre mot de passe sur {{SITENAME}}:',
 'changeemail-submit' => "Changer l'adresse de courriel",
 'changeemail-cancel' => 'Annuler',
 
@@ -1040,7 +1051,7 @@ Vous pouvez trouver plus de détails dans le [{{fullurl:{{#Special:Log}}/delete|
 'userpage-userdoesnotexist' => "Le compte utilisateur « <nowiki>$1</nowiki> » n'est pas enregistré. Veuillez vérifier que vous voulez créer cette page.",
 'userpage-userdoesnotexist-view' => "Le compte utilisateur « $1 » n'est pas enregistré.",
 'blocked-notice-logextract' => "Cet utilisateur est actuellement bloqué.
-La dernière entrée du registre des blocages est indiquée ci-dessous à titre d'information :",
+La dernière entrée du journal des blocages est indiquée ci-dessous à titre d'information :",
 'clearyourcache' => "'''Note :''' après avoir enregistré vos préférences, vous devrez forcer le rechargement complet du cache de votre navigateur pour voir les changements.
 * '''Firefox / Safari :''' Maintenez la touche ''Maj'' (''Shift'') en cliquant sur le bouton ''Actualiser'' ou pressez ''Ctrl-F5'' ou ''Ctrl-R'' (''⌘-R'' sur un Mac) ;
 * '''Google Chrome :''' Appuyez sur ''Ctrl-Maj-R'' (''⌘-Shift-R'' sur un Mac) ;
@@ -1100,9 +1111,9 @@ Vous nous promettez aussi que vous avez écrit ceci vous-même, ou que vous l'av
 'longpageerror' => "'''Erreur: Le texte que vous avez soumis fait {{PLURAL:$1|un Kio|$1 Kio}}, ce qui dépasse la limite fixée à {{PLURAL:$2|un Kio|$2 Kio}}.'''
 Il ne peut pas être sauvegardé.",
 'readonlywarning' => "'''AVERTISSEMENT : la base de données a été verrouillée pour des opérations de maintenance. Vous ne pouvez donc pas publier vos modifications pour l'instant.'''
-Vous pouvez copier le texte dans un fichier texte et le conserver pour plus tard.
+Vous pouvez copier et coller votre texte dans un fichier texte et l’enregistrer pour plus tard.
 
-L'administrateur ayant verrouillé la base de données a donné l'explication suivante : $1",
+L'administrateur ayant verrouillé la base de données a donné l'explication suivante: $1",
 'protectedpagewarning' => "'''AVERTISSEMENT : cette page est protégée. Seuls les utilisateurs ayant le statut d'administrateur peuvent la modifier.'''<br />
 La dernière entrée du journal est affichée ci-dessous pour référence :",
 'semiprotectedpagewarning' => "'''Note :''' Cette page a été protégée de telle façon que seuls les contributeurs enregistrés puissent la modifier. La dernière entrée du journal est affichée ci-dessous pour référence :",
@@ -1115,7 +1126,6 @@ La dernière entrée du journal est affichée ci-dessous pour référence :",
 'template-semiprotected' => '(semi-protégé)',
 'hiddencategories' => '{{PLURAL:$1|Catégorie cachée|Catégories cachées}} dont cette page fait partie :',
 'edittools' => '<!-- Tout texte entré ici sera affiché sous les boîtes de modification ou les formulaires de téléversement de fichier. -->',
-'nocreatetitle' => 'Création de page limitée',
 'nocreatetext' => '{{SITENAME}} a restreint la possibilité de créer de nouvelles pages.
 Vous pouvez revenir en arrière et modifier une page existante, ou bien [[Special:UserLogin|vous connecter ou créer un compte]].',
 'nocreate-loggedin' => "Vous n'avez pas la permission de créer de nouvelles pages.",
@@ -1212,10 +1222,10 @@ Elle a peut-être été effacée ou renommée.
 Essayez de [[Special:Search|rechercher sur le wiki]] pour trouver des pages en rapport.",
 
 # Revision deletion
-'rev-deleted-comment' => "(résumé d'édition enlevé)",
-'rev-deleted-user' => "(nom d'utilisateur supprimé)",
-'rev-deleted-event' => '(entrée supprimée)',
-'rev-deleted-user-contribs' => "[nom d'utilisateur ou adresse IP supprimée - modification cachée sur les contributions]",
+'rev-deleted-comment' => '(résumé de modification retiré)',
+'rev-deleted-user' => '(nom d’utilisateur retiré)',
+'rev-deleted-event' => '(entrée retirée)',
+'rev-deleted-user-contribs' => '[nom d’utilisateur ou adresse IP retiré - modification masquée sur les contributions]',
 'rev-deleted-text-permission' => "Cette version de la page a été '''effacée'''.
 Des détails sont disponibles dans le [{{fullurl:{{#Special:Log}}/delete|page={{FULLPAGENAMEE}}}} journal des effacements].",
 'rev-deleted-text-unhide' => "Cette version de la page a été '''effacée'''.
@@ -1271,7 +1281,7 @@ Les autres administrateurs de {{SITENAME}} pourront toujours accéder au contenu
 'revdelete-radio-same' => '(ne pas changer)',
 'revdelete-radio-set' => 'Oui',
 'revdelete-radio-unset' => 'Non',
-'revdelete-suppress' => 'Cacher les données également pour les administrateurs',
+'revdelete-suppress' => 'Masquer également les données pour les administrateurs',
 'revdelete-unsuppress' => 'Enlever les restrictions sur les versions restaurées',
 'revdelete-log' => 'Motif :',
 'revdelete-submit' => 'Appliquer {{PLURAL:$1|à la révision sélectionnée|aux révisions sélectionnées}}',
@@ -1656,15 +1666,13 @@ Elle ne doit pas dépasser $1 caractère{{PLURAL:$1||s}}.',
 'right-sendemail' => 'Envoyer un courriel aux autres utilisateurs',
 'right-passwordreset' => 'Voir les courriels de réinitialisation des mots de passe',
 
+# Special:Log/newusers
+'newuserlogpage' => 'Journal des créations de comptes utilisateur',
+'newuserlogpagetext' => "Cette page affiche l'historique des créations de comptes utilisateur.",
+
 # User rights log
 'rightslog' => "Journal des modifications de droits d'utilisateurs",
 'rightslogtext' => "Voici l'historique des modifications des droits des utilisateurs.",
-'rightslogentry' => "a modifié les droits de l'utilisateur « $1 » de $2 à $3",
-'rightslogentry-autopromote' => 'a été automatiquement promu de $2 à $3',
-'logentry-rights-rights' => "$1 a modifié l'appartenance au groupe pour $3 de $4 à $5",
-'logentry-rights-rights-legacy' => "$1 a modifié l'appartenance au groupe pour $3",
-'logentry-rights-autopromote' => '$1 a été promu automatiquement de $4 à $5',
-'rightsnone' => '(aucun)',
 
 # Associated actions - in the sentence "You do not have permission to X"
 'action-read' => 'lire cette page',
@@ -1830,8 +1838,8 @@ Si le fichier vérifié est la même image avec la taille initiale, il n'y a pas
 'file-thumbnail-no' => "Le nom du fichier commence par <strong>$1</strong>.
 Il est possible qu'il s'agisse d'une version réduite ''(vignette)''.
 Si vous disposez du fichier en haute résolution, importez-le, sinon veuillez modifier son nom.",
-'fileexists-forbidden' => "Un fichier avec ce nom existe déjà et ne peut pas être écrasé.
-Si vous voulez toujours importer votre fichier, merci de retourner en arrière et d'utiliser un nouveau nom. [[File:$1|thumb|center|$1]]",
+'fileexists-forbidden' => 'Un fichier avec ce nom existe déjà et ne peut pas être écrasé.
+Si vous voulez toujours importer votre fichier, veuillez revenir en arrière et utiliser un autre nom. [[File:$1|thumb|center|$1]]',
 'fileexists-shared-forbidden' => 'Un fichier portant ce nom existe déjà dans le dépôt de fichiers partagé.
 Si vous voulez toujours importer votre fichier, veuillez revenir en arrière et utiliser un autre nom. [[File:$1|thumb|center|$1]]',
 'file-exists-duplicate' => 'Ce fichier est un doublon {{PLURAL:$1|du fichier suivant|des fichiers suivants}} :',
@@ -1859,7 +1867,7 @@ Le téléchargement de fichiers Java n'est pas autorisé, car ils peuvent contou
 'upload-options' => "Options d'import de fichiers",
 'watchthisupload' => 'Suivre ce fichier',
 'filewasdeleted' => "Un fichier avec ce nom a déjà été importé, puis supprimé.
-Vous devriez vérifier $1 avant de l'importer à nouveau.",
+Vous devriez vérifier le $1 avant de l'importer à nouveau.",
 'filename-bad-prefix' => "Le nom du fichier commence par '''« $1 »''' qui est typiquement un nom attribué automatiquement par les appareils photo numériques.
 Veuillez choisir un nom de fichier descriptif.",
 'filename-prefix-blacklist' => ' #<!-- laisser cette ligne telle quelle --><pre>
@@ -2126,7 +2134,7 @@ N'oubliez pas de vérifier s'il n'y a pas d'autres liens vers les modèles avant
 'statistics-articles' => 'Pages de contenu',
 'statistics-pages' => 'Pages',
 'statistics-pages-desc' => 'Toutes les pages du wiki, y compris les pages de discussion, les redirections, etc.',
-'statistics-files' => 'Fichers importés',
+'statistics-files' => 'Fichiers importés',
 'statistics-edits' => "Modifications de pages depuis l'installation de {{SITENAME}}",
 'statistics-edits-average' => 'Nombre moyen de modifications par page',
 'statistics-views-total' => 'Visites',
@@ -2296,7 +2304,7 @@ Voyez aussi [[Special:WantedCategories|les catégories demandées]].',
 'linksearch-ok' => 'Rechercher',
 'linksearch-text' => "Des caractères jokers comme « *.wikipedia.org » peuvent être utilisés.
 Ils nécessitent au moins un domaine de niveau supérieur, par exemple « *.org ».<br />
-Protocoles reconnus : <code>$1</code> (http:// par défaut si aucun protocole n'est indiqué).",
+{{PLURAL:$2|Protocole reconnu|Protocoles reconnus}}: <code>$1</code> (http:// par défaut si aucun protocole n'est indiqué).",
 'linksearch-line' => '$1 est lié depuis $2',
 'linksearch-error' => "Les caractères jokers ne peuvent être utilisés qu'au début du nom de domaine de l'hôte.",
 
@@ -2309,16 +2317,12 @@ Protocoles reconnus : <code>$1</code> (http:// par défaut si aucun protocole n'
 # Special:ActiveUsers
 'activeusers' => 'Liste des utilisateurs actifs',
 'activeusers-intro' => 'Ceci est une liste des utilisateurs qui ont exercé une quelconque activité au cours {{PLURAL:$1|de la dernière journée|des $1 derniers jours}}.',
-'activeusers-count' => '$1 {{PLURAL:$1|modification récente|modifications récentes}} dans {{PLURAL:$3|le dernier jour|les $3 derniers jours}}',
+'activeusers-count' => '$1 {{PLURAL:$1|action|actions}} lors {{PLURAL:$3|du dernier jour|des $3 derniers jours}}',
 'activeusers-from' => 'Afficher les utilisateurs depuis :',
 'activeusers-hidebots' => 'Masquer les robots',
 'activeusers-hidesysops' => 'Masquer les administrateurs',
 'activeusers-noresult' => 'Aucun utilisateur trouvé.',
 
-# Special:Log/newusers
-'newuserlogpage' => 'Journal des créations de comptes utilisateur',
-'newuserlogpagetext' => "Cette page affiche l'historique des créations de comptes utilisateur.",
-
 # Special:ListGroupRights
 'listgrouprights' => "Droits des groupes d'utilisateurs",
 'listgrouprights-summary' => "Cette page contient une liste des groupes définis sur ce wiki ainsi que les droits d'accès qui leur sont associés.
@@ -2384,7 +2388,8 @@ L'adresse électronique que vous avez indiquée dans [[Special:Preferences|vos p
 'watchnologin' => 'Non connecté',
 'watchnologintext' => 'Vous devez être [[Special:UserLogin|identifié]] 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. La page apparaîtra '''en gras''' dans la [[Special:RecentChanges|liste des modifications récentes]] pour en faciliter le repérage.",
+'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.',
 'removewatch' => 'Supprimer de la liste de suivi',
 'removedwatchtext' => 'La page « [[:$1]] » a été retirée de votre [[Special:Watchlist|liste de suivi]].',
 'watch' => 'Suivre',
@@ -2418,7 +2423,7 @@ L'adresse électronique que vous avez indiquée dans [[Special:Preferences|vos p
 'enotif_subject_moved' => 'La page $1 sur {{SITENAME}} a été renommée par {{GENDER:$2|$2}}',
 'enotif_subject_restored' => 'La page $1 sur {{SITENAME}} a été restaurée par {{GENDER:$2|$2}}',
 'enotif_subject_changed' => 'La page $1 sur {{SITENAME}} a été modifiée par {{GENDER:$2|$2}}',
-'enotif_body_intro_deleted' => 'La page $1 sur {{SITENAME}} a été effacée le $PAGEEDITDATE par {{GENDER:$2|$2}}, voir $3 pour la révision actuelle.',
+'enotif_body_intro_deleted' => 'La page $1 sur {{SITENAME}} a été effacée le $PAGEEDITDATE par {{gender:$2|$2}}, voir $3 pour la révision actuelle.',
 'enotif_body_intro_created' => 'La page $1 sur {{SITENAME}} a été créée le $PAGEEDITDATE par {{GENDER:$2|$2}}, voir $3 pour la révision actuelle.',
 'enotif_body_intro_moved' => 'La page $1 sur {{SITENAME}} a été renommée le $PAGEEDITDATE par {{GENDER:$2|$2}}, voir $3 pour la révision actuelle.',
 'enotif_body_intro_restored' => 'La page $1 sur {{SITENAME}} a été restaurée le $PAGEEDITDATE par {{GENDER:$2|$2}}, voir $3 pour la révision actuelle.',
@@ -2452,6 +2457,8 @@ $UNWATCHURL
 
 Retour et assistance :
 {{canonicalurl:{{MediaWiki:Helppage}}}}',
+'created' => 'créée',
+'changed' => 'modifiée',
 
 # Delete
 'deletepage' => 'Supprimer la page',
@@ -2524,6 +2531,8 @@ Consultez la [[Special:ProtectedPages|liste des pages protégées]] pour la list
 'prot_1movedto2' => '[[$1]] renommé en [[$2]]',
 'protect-badnamespace-title' => 'Espace de noms non protégeable',
 'protect-badnamespace-text' => 'Les pages dans cet espace de noms ne peuvent pas être protégées.',
+'protect-norestrictiontypes-text' => "Cette page ne peut pas être protégée car il n'y a pas de type de restriction disponible.",
+'protect-norestrictiontypes-title' => 'Page non protégeable',
 'protect-legend' => 'Confirmer la protection',
 'protectcomment' => 'Motif :',
 'protectexpiry' => "Date d'expiration :",
@@ -2539,9 +2548,9 @@ Voici les réglages actuels de la page '''$1''' :",
 Voici les réglages actuels de la page '''$1''' :",
 'protect-cascadeon' => "Cette page est protégée car incluse dans {{PLURAL:$1|la page suivante, qui a été protégée|les pages suivantes, qui ont été protégées}} avec l'option « protection en cascade » activée. Vous pouvez changer le niveau de protection de cette page sans que cela n'affecte la protection en cascade.",
 'protect-default' => 'Autoriser tous les utilisateurs',
-'protect-fallback' => 'Nécessite la permission « $1 »',
-'protect-level-autoconfirmed' => 'Bloquer les nouveaux utilisateurs et les utilisateurs anonymes',
-'protect-level-sysop' => 'Administrateurs uniquement',
+'protect-fallback' => 'Autoriser uniquement les utilisateurs avec le droit « $1 »',
+'protect-level-autoconfirmed' => 'Autoriser uniquement les utilisateurs auto-confirmés',
+'protect-level-sysop' => 'Autoriser uniquement les administrateurs',
 'protect-summary-cascade' => 'protection en cascade',
 'protect-expiring' => 'expire le $1 (UTC)',
 'protect-expiring-local' => 'expire le $1',
@@ -2652,18 +2661,18 @@ $1',
 
 'sp-contributions-newbies' => 'Ne montrer que les contributions des nouveaux utilisateurs',
 'sp-contributions-newbies-sub' => 'Parmi les nouveaux comptes',
-'sp-contributions-newbies-title' => 'Contributions d’utilisateurs parmi les nouveaux comptes',
+'sp-contributions-newbies-title' => "Contributions d'utilisateurs parmi les nouveaux comptes",
 'sp-contributions-blocklog' => 'journal des blocages',
 'sp-contributions-deleted' => 'contributions supprimées',
 'sp-contributions-uploads' => 'imports',
 'sp-contributions-logs' => 'journaux',
 'sp-contributions-talk' => 'discuter',
 'sp-contributions-userrights' => 'gérer les droits',
-'sp-contributions-blocked-notice' => 'Cet utilisateur est actuellement bloqué. La dernière entrée du journal des blocages est indiquée ci-dessous à titre d’information :',
-'sp-contributions-blocked-notice-anon' => 'Cette adresse IP est actuellement bloquée.
-La dernière entrée du journal des blocages est indiquée ci-dessous à titre d’information :',
+'sp-contributions-blocked-notice' => "Cet utilisateur est actuellement bloqué. La dernière entrée du journal des blocages est indiquée ci-dessous à titre d'information :",
+'sp-contributions-blocked-notice-anon' => "Cette adresse IP est actuellement bloquée.
+La dernière entrée du journal des blocages est indiquée ci-dessous à titre d'information :",
 'sp-contributions-search' => 'Rechercher les contributions',
-'sp-contributions-username' => 'Adresse IP ou nom d’utilisateur :',
+'sp-contributions-username' => "Adresse IP ou nom d'utilisateur :",
 'sp-contributions-toponly' => 'Ne montrer que les contributions qui sont les dernières des articles',
 'sp-contributions-submit' => 'Rechercher',
 
@@ -2673,7 +2682,7 @@ La dernière entrée du journal des blocages est indiquée ci-dessous à titre d
 'whatlinkshere-page' => 'Page :',
 'linkshere' => "Les pages ci-dessous contiennent un lien vers '''[[:$1]]''' :",
 'nolinkshere' => "Aucune page ne contient de lien vers '''[[:$1]]'''.",
-'nolinkshere-ns' => "Aucune page ne contient de lien vers '''[[:$1]]''' dans lespace de noms choisi.",
+'nolinkshere-ns' => "Aucune page ne contient de lien vers '''[[:$1]]''' dans l'espace de noms choisi.",
 'isredirect' => 'page de redirection',
 'istemplate' => 'inclusion',
 'isimage' => 'lien vers le fichier',
@@ -2688,38 +2697,38 @@ La dernière entrée du journal des blocages est indiquée ci-dessous à titre d
 
 # Block/unblock
 'autoblockid' => 'Blocage automatique #$1',
-'block' => 'Bloquer l’utilisateur',
+'block' => "Bloquer l'utilisateur",
 'unblock' => "Débloquer l'utilisateur",
-'blockip' => 'Bloquer l’utilisateur',
-'blockip-title' => 'Bloquer l’utilisateur',
-'blockip-legend' => 'Bloquer l’utilisateur',
-'blockiptext' => 'Utilisez le formulaire ci-dessous pour bloquer l’accès aux modifications faites à partir d’une adresse IP spécifique ou d’un nom d’utilisateur.
+'blockip' => "Bloquer l'utilisateur",
+'blockip-title' => "Bloquer l'utilisateur",
+'blockip-legend' => "Bloquer l'utilisateur",
+'blockiptext' => "Utilisez le formulaire ci-dessous pour bloquer l'accès aux modifications faites à partir d'une adresse IP spécifique ou d'un nom d'utilisateur.
 Une telle mesure ne devrait être prise que pour prévenir le vandalisme et en accord avec les [[{{MediaWiki:Policy-url}}|règles internes]].
-Donnez ci-dessous un motif précis (par exemple en citant les pages qui ont été vandalisées).',
+Donnez ci-dessous un motif précis (par exemple en citant les pages qui ont été vandalisées).",
 'ipadressorusername' => "Adresse IP ou nom d'utilisateur :",
 'ipbexpiry' => 'Durée avant expiration :',
 'ipbreason' => 'Motif :',
 'ipbreasonotherlist' => 'Autre motif',
-'ipbreason-dropdown' => '* Motifs de blocage les plus fréquents
+'ipbreason-dropdown' => "* Motifs de blocage les plus fréquents
 ** Insertion de fausses informations
 ** Suppression injustifiée de contenu des pages
 ** Insertion répétée de liens externes publicitaires (pollupostage)
 ** Insertion de contenu sans aucun sens et de déchets dans les pages
-** Tentative dintimidation ou harcèlement
-** Abus dutilisation de comptes multiples
-** Nom d’utilisateur inacceptable, injurieux ou diffamant',
+** Tentative d'intimidation ou harcèlement
+** Abus d'utilisation de comptes multiples
+** Nom d'utilisateur inacceptable, injurieux ou diffamant",
 'ipb-hardblock' => 'Empêcher les utilisateurs connectés de modifier en utilisant cette adresse IP',
 'ipbcreateaccount' => 'Empêcher la création de compte',
-'ipbemailban' => 'Empêcher l’utilisateur d’envoyer des courriels',
-'ipbenableautoblock' => 'Bloquer automatiquement la dernière adresse IP utilisée par l’utilisateur et toutes ses IPs ultérieures qu’il pourrait essayer',
+'ipbemailban' => "Empêcher l'utilisateur d'envoyer des courriels",
+'ipbenableautoblock' => "Bloquer automatiquement la dernière adresse IP utilisée par l'utilisateur et toutes ses IPs ultérieures qu'il pourrait essayer",
 'ipbsubmit' => 'Bloquer cet utilisateur',
 'ipbother' => 'Autre durée :',
 'ipboptions' => '2 heures:2 hours,1 jour:1 day,3 jours:3 days,1 semaine:1 week,2 semaines:2 weeks,1 mois:1 month,3 mois:3 months,6 mois:6 months,1 an:1 year,indéfiniment:infinite',
 'ipbotheroption' => 'autre',
 'ipbotherreason' => 'Motif différent ou supplémentaire :',
-'ipbhidename' => 'Masquer le nom d’utilisateur des modifications et des listes',
+'ipbhidename' => "Masquer le nom d'utilisateur des modifications et des listes",
 'ipbwatchuser' => 'Suivre les pages utilisateur et de discussion de cet utilisateur',
-'ipb-disableusertalk' => 'Empêcher cet utilisateur de modifier sa propre page de discussion pendant la durée de son blocage',
+'ipb-disableusertalk' => 'Empêcher l’utilisateur de modifier sa page de discussion pendant le blocage',
 'ipb-change-block' => 'Bloquer à nouveau cet utilisateur avec ces paramètres',
 'ipb-confirm' => 'Confirmer le blocage',
 'badipaddress' => 'Adresse IP incorrecte',
@@ -2727,7 +2736,7 @@ Donnez ci-dessous un motif précis (par exemple en citant les pages qui ont ét
 '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-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-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',
 'ipb-unblock' => 'Débloquer un compte utilisateur ou une adresse IP',
@@ -2842,7 +2851,7 @@ Pour bloquer ou débloquer la base de données, il doit être accessible par le
 'move-page-legend' => 'Renommer une page',
 'movepagetext' => "Utilisez le formulaire ci-dessous pour renommer une page, en déplaçant tout son historique vers le nouveau nom. L'ancien titre deviendra une page de redirection vers le nouveau titre. Vous pouvez mettre à jour automatiquement les redirections actuelles qui pointent vers le titre original. Si vous choisissez de ne pas le faire, assurez-vous de vérifier toute [[Special:DoubleRedirects|double redirection]] ou [[Special:BrokenRedirects|redirection cassée]]. Vous avez la responsabilité de vous assurer que les liens continuent de pointer vers leur destination supposée.
 
-Notez que la page ne sera '''pas''' renommée s'il existe déjà une page avec le nouveau titre, sauf si cette dernière a un historique de modifications vierge et est soit vide, soit une simple redirection. Ceci permet de renommer une page vers sa position d'origine si le déplacement s'avère erroné.
+Notez que la page ne sera '''pas''' renommée s'il existe déjà une page avec le nouveau titre, sauf si cette dernière a un historique de modifications vierge et est une simple redirection. Ceci permet de renommer une page vers sa position d'origine si le déplacement s'avère erroné.
 
 '''Attention !'''
 Ceci peut provoquer un changement radical et imprévu pour une page souvent consultée ; assurez-vous d'en avoir compris les conséquences avant de continuer.",
@@ -2873,7 +2882,7 @@ Dans ces cas-là, vous devrez renommer ou fusionner cette page de discussion man
 'move-watch' => 'Suivre les pages originale et nouvelle',
 'movepagebtn' => 'Renommer la page',
 'pagemovedsub' => 'Renommage réussi',
-'movepage-moved' => "'''« $1 »''' a été renommé '''« $2 »'''",
+'movepage-moved' => "'''« $1 » a été renommée en « $2 »'''",
 'movepage-moved-redirect' => "Une redirection depuis l'ancien nom a été créée.",
 'movepage-moved-noredirect' => "La création d'une redirection depuis l'ancien nom a été annulée.",
 'articleexists' => "Il existe déjà une page portant ce titre, ou le titre que vous avez choisi n'est pas correct.
@@ -2900,7 +2909,7 @@ Veuillez en choisir un autre.",
 La page de destination « [[:$1]] » existe déjà.
 Êtes-vous certain{{GENDER:||e|}} de vouloir la supprimer pour permettre ce renommage ?',
 'delete_and_move_confirm' => 'Oui, supprimer la page de destination',
-'delete_and_move_reason' => 'Page supprimée pour permettre le renommage depuis "[[$1]]"',
+'delete_and_move_reason' => 'Page supprimée pour permettre le renommage depuis « [[$1]] »',
 'selfmove' => "Les titres d'origine et de destination sont les mêmes ;
 impossible de renommer une page sur elle-même.",
 'immobile-source-namespace' => "Vous ne pouvez pas renommer les pages dans l'espace de noms « $1 »",
@@ -3022,6 +3031,7 @@ Un dossier temporaire est manquant.",
 'import-error-interwiki' => "La page « $1 » n'est pas importée parce que son nom est réservé pour un lien externe (interwiki).",
 'import-error-special' => 'La page " $1 " n\'est pas importée parce qu\'elle appartient à un espace de noms special qui n\'en autorise aucune.',
 'import-error-invalid' => "Page « $1 » n'est pas importée parce que son nom n'est pas valide.",
+'import-error-unserialize' => 'La révision $2 de la page "$1" ne peut pas être désérialisée. La révision est indiquée comme utilisant le modèle de contenu $3 sérialisé en $4.',
 'import-options-wrong' => '{{PLURAL:$2|Mauvaise option|Mauvaises options}}: <nowiki>$1</nowiki>',
 'import-rootpage-invalid' => 'La page racine fournie est un titre non valide.',
 'import-rootpage-nosubpage' => 'L\'espace de noms "$1" de la page racine n\'autorise pas les sous-pages.',
@@ -3206,6 +3216,7 @@ Permet de rétablir la version précédente et d'ajouter un motif dans la boîte
 'pageinfo-magic-words' => '{{PLURAL:$1|Mot magique|Mots magiques}} ($1)',
 'pageinfo-hidden-categories' => '{{PLURAL:$1|Catégorie cachée|Catégories cachées}} ($1)',
 'pageinfo-templates' => '{{PLURAL:$1|Modèle inclu|Modèles inclus}} ($1)',
+'pageinfo-transclusions' => '{{PLURAL:$1|Page traduite|Pages traduites}} sur ($1)',
 'pageinfo-toolboxlink' => 'Information sur la page',
 'pageinfo-redirectsto' => 'Rediriger vers',
 'pageinfo-redirectsto-info' => 'info',
@@ -3214,6 +3225,10 @@ Permet de rétablir la version précédente et d'ajouter un motif dans la boîte
 'pageinfo-protect-cascading' => "Les protections sont déduites d'ici",
 'pageinfo-protect-cascading-yes' => 'Oui',
 'pageinfo-protect-cascading-from' => 'Les protections sont déduites depuis',
+'pageinfo-category-info' => 'Informations sur la catégorie',
+'pageinfo-category-pages' => 'Nombre de pages',
+'pageinfo-category-subcats' => 'Nombre de sous-catégories',
+'pageinfo-category-files' => 'Nombre de fichiers',
 
 # Skin names
 'skinname-standard' => 'Standard',
@@ -3271,6 +3286,7 @@ Si vous l'exécutez, votre système peut être compromis.",
 'file-nohires' => 'Pas de plus haute résolution disponible.',
 '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-preview' => 'Taille de cet aperçu : $1.',
 'show-big-image-other' => '{{PLURAL:$2|Autre résolution|Autres résolutions}} : $1.',
@@ -3301,6 +3317,8 @@ Si vous l'exécutez, votre système peut être compromis.",
 'minutes' => '{{PLURAL:$1|$1 minute|$1 minutes}}',
 'hours' => '{{PLURAL:$1|$1 heure|$1 heures}}',
 'days' => '{{PLURAL:$1|$1 jour|$1 jours}}',
+'months' => '{{PLURAL:$1|$1 mois}}',
+'years' => '{{PLURAL:$1|$1 an|$1 ans}}',
 'ago' => 'Il y a $1',
 'just-now' => "à l'instant",
 
@@ -3329,6 +3347,7 @@ Les autres liens sur la même ligne sont considérés comme des exceptions, par
 * gpslatitude
 * gpslongitude
 * gpsaltitude",
+'metadata-langitem' => "'''$2&nbsp;:''' $1",
 
 # EXIF tags
 'exif-imagewidth' => 'Largeur',
@@ -3801,27 +3820,27 @@ Ce code de confirmation expirera le $4.
 Si le compte ne vous appartient PAS, suivez plutôt ce lien pour annuler la confirmation de l'adresse de courriel :
 
 $5",
-'confirmemail_invalidated' => 'Confirmation de l’adresse courriel annulée',
-'invalidateemail' => 'Annuler la confirmation de l’adresse de courriel',
+'confirmemail_invalidated' => "Confirmation de l'adresse courriel annulée",
+'invalidateemail' => "Annuler la confirmation de l'adresse de courriel",
 
 # Scary transclusion
 'scarytranscludedisabled' => '[La transclusion interwiki est désactivée]',
 'scarytranscludefailed' => '[La récupération de modèle a échoué pour $1]',
 'scarytranscludefailed-httpstatus' => '[Échec de la récupération du modèle pour  $1 : HTTP  $2 ]',
-'scarytranscludetoolong' => '[L’URL est trop longue]',
+'scarytranscludetoolong' => "[L'URL est trop longue]",
 
 # Delete conflict
 'deletedwhileediting' => "'''Attention''' : cette page a été supprimée après que vous avez commencé à la modifier !",
-'confirmrecreate' => "L’utilisateur [[User:$1|$1]] ([[User talk:$1|Discussion]]) a supprimé cette page, alors que vous aviez commencé à l’éditer, pour le motif suivant :
+'confirmrecreate' => "L'utilisateur [[User:$1|$1]] ([[User talk:$1|Discussion]]) a supprimé cette page, alors que vous aviez commencé à l'éditer, pour le motif suivant :
 : ''$2''
 Veuillez confirmer que vous désirez réellement recréer cette page.",
-'confirmrecreate-noreason' => 'L’utilisateur [[User:$1|$1]] ([[User talk:$1|Discussion]]) a supprimé cette page, alors que vous aviez commencé à l’éditer. Veuillez confirmer que vous désirez réellement recréer cette page.',
+'confirmrecreate-noreason' => "L'utilisateur [[User:$1|$1]] ([[User talk:$1|Discussion]]) a supprimé cette page, alors que vous aviez commencé à l'éditer. Veuillez confirmer que vous désirez réellement recréer cette page.",
 'recreate' => 'Recréer',
 
 # action=purge
 'confirm_purge_button' => 'Confirmer',
 'confirm-purge-top' => 'Voulez-vous rafraîchir cette page (purger le cache) ?',
-'confirm-purge-bottom' => 'Purger une page l’efface du cache de rendu et force sa dernière version à être régénérée et affichée.',
+'confirm-purge-bottom' => "Purger une page l'efface du cache de rendu et force sa dernière version à être régénérée et affichée.",
 
 # action=watch/unwatch
 'confirm-watch-button' => 'Valider',
@@ -3864,18 +3883,23 @@ Veuillez confirmer que vous désirez réellement recréer cette page.",
 'size-kilobytes' => '$1 Kio',
 'size-megabytes' => '$1 Mio',
 'size-gigabytes' => '$1 Gio',
+'size-terabytes' => '$1 Tio',
+'size-petabytes' => '$1 Pio',
+'size-exabytes' => '$1 Eio',
+'size-zetabytes' => '$1 Zio',
+'size-yottabytes' => '$1 Yio',
 
 # Live preview
 'livepreview-loading' => 'Chargement...',
 'livepreview-ready' => 'Chargement … terminé !',
-'livepreview-failed' => 'L’aperçu rapide a échoué !
-Essayez la prévisualisation normale.',
+'livepreview-failed' => "L'aperçu rapide a échoué !
+Essayez la prévisualisation normale.",
 'livepreview-error' => 'Impossible de se connecter : $1 « $2 ».
 Essayez la prévisualisation normale.',
 
 # Friendlier slave lag warnings
 'lag-warn-normal' => 'Les modifications datant de moins de $1 seconde{{PLURAL:$1||s}} peuvent ne pas apparaître dans cette liste.',
-'lag-warn-high' => 'En raison d’un retard important du serveur de base de données, les modifications datant de moins de $1 seconde{{PLURAL:$1||s}} peuvent ne pas apparaître dans cette liste.',
+'lag-warn-high' => "En raison d'un retard important du serveur de base de données, les modifications datant de moins de $1 seconde{{PLURAL:$1||s}} peuvent ne pas apparaître dans cette liste.",
 
 # Watchlist editor
 'watchlistedit-numitems' => 'Votre liste de suivi contient {{PLURAL:$1|un titre|$1 titres}}, sans compter les pages de discussion.',
@@ -3889,9 +3913,9 @@ Vous pouvez aussi [[Special:EditWatchlist/raw|modifier la liste en mode brut]].'
 'watchlistedit-normal-done' => '{{PLURAL:$1|Un titre a été enlevé|$1 titres ont été enlevés}} de votre liste de suivi :',
 'watchlistedit-raw-title' => 'Modifier la liste de suivi en mode brut',
 'watchlistedit-raw-legend' => 'Modification de la liste de suivi en mode brut',
-'watchlistedit-raw-explain' => 'Les titres de votre liste de suivi sont affichés ci-dessous et peuvent être modifiés en les ajoutant ou les retirant de la liste (un titre par ligne).
+'watchlistedit-raw-explain' => "Les titres de votre liste de suivi sont affichés ci-dessous et peuvent être modifiés en les ajoutant ou les retirant de la liste (un titre par ligne).
 Lorsque vous avez fini, cliquez sur le bouton « {{int:Watchlistedit-raw-submit}} » en bas.
-Vous pouvez aussi [[Special:EditWatchlist|utiliser l’éditeur normal]].',
+Vous pouvez aussi [[Special:EditWatchlist|utiliser l'éditeur normal]].",
 'watchlistedit-raw-titles' => 'Titres :',
 'watchlistedit-raw-submit' => 'Mettre à jour la liste de suivi',
 'watchlistedit-raw-done' => 'Votre liste de suivi a été mise à jour.',
@@ -3961,61 +3985,61 @@ Vous pouvez aussi [[Special:EditWatchlist|utiliser l’éditeur normal]].',
 'signature' => '[[{{ns:user}}:$1|$2]] ([[{{ns:user_talk}}:$1|discussion]])',
 
 # Core parser functions
-'unknown_extension_tag' => 'Balise d’extension « $1 » inconnue',
+'unknown_extension_tag' => "Balise d'extension « $1 » inconnue",
 'duplicate-defaultsort' => 'Attention : la clé de tri par défaut « $2 » écrase la précédente « $1 ».',
 
 # Special:Version
 'version' => 'Version',
 'version-extensions' => 'Extensions installées',
 'version-specialpages' => 'Pages spéciales',
-'version-parserhooks' => 'Greffons de l’analyseur syntaxique',
+'version-parserhooks' => "Greffons de l'analyseur syntaxique",
 'version-variables' => 'Variables',
 'version-antispam' => 'Prévention du spam',
 'version-skins' => 'Habillages',
 'version-other' => 'Divers',
 'version-mediahandlers' => 'Manipulateurs de médias',
 'version-hooks' => 'Greffons',
-'version-extension-functions' => 'Fonctions d’extension internes',
-'version-parser-extensiontags' => 'Balises étendues de l’analyseur syntaxique',
-'version-parser-function-hooks' => 'Fonctions étendues de l’analyseur syntaxique',
+'version-extension-functions' => "Fonctions d'extension internes",
+'version-parser-extensiontags' => "Balises étendues de l'analyseur syntaxique",
+'version-parser-function-hooks' => "Fonctions étendues de l'analyseur syntaxique",
 'version-hook-name' => 'Nom du greffon',
 'version-hook-subscribedby' => 'Abonnés :',
-'version-version' => '(Version $1)',
+'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-others' => 'autres',
 'version-credits-summary' => 'Nous tenons à remercier les personnes suivantes pour leur contribution à  [[Special:Version|MediaWiki]].',
-'version-license-info' => 'MediaWiki est un logiciel libre, vous pouvez le redistribuer ou le modifier selon les termes de la Licence Publique Générale GNU telle que publiée par la Free Software Foundation ; soit la version 2 de la Licence, ou (à votre choix) toute version ultérieure.
+'version-license-info' => "MediaWiki est un logiciel libre, vous pouvez le redistribuer ou le modifier selon les termes de la Licence Publique Générale GNU telle que publiée par la Free Software Foundation ; soit la version 2 de la Licence, ou (à votre choix) toute version ultérieure.
 
-MediaWiki est distribué dans l’espoir qu’il sera utile, mais SANS AUCUNE GARANTIE, sans même la garantie implicite de COMMERCIALISATION ou D’ADAPTATION À UN USAGE PARTICULIER. Voir la Licence Publique Générale GNU pour plus de détails.
+MediaWiki est distribué dans l'espoir qu'il sera utile, mais SANS AUCUNE GARANTIE, sans même la garantie implicite de COMMERCIALISATION ou D'ADAPTATION À UN USAGE PARTICULIER. Voir la Licence Publique Générale GNU pour plus de détails.
 
-Vous devriez avoir reçu [{{SERVER}}{{SCRIPTPATH}}/COPYING une copie de la Licence Publique Générale GNU] avec ce programme, sinon, écrivez à la Free Software Foundation, Inc., 51, rue Franklin, cinquième étage, Boston, MA 02110-1301, États-Unis ou [//www.gnu.org/licenses/old-licenses/gpl-2.0.html lisez-la en ligne].',
+Vous devriez avoir reçu [{{SERVER}}{{SCRIPTPATH}}/COPYING une copie de la Licence Publique Générale GNU] avec ce programme, sinon, écrivez à la Free Software Foundation, Inc., 51, rue Franklin, cinquième étage, Boston, MA 02110-1301, États-Unis ou [//www.gnu.org/licenses/old-licenses/gpl-2.0.html lisez-la en ligne].",
 'version-software' => 'Logiciels installés',
 'version-software-product' => 'Produit',
 'version-software-version' => 'Version',
-'version-entrypoints' => 'URL des points d’entrée',
-'version-entrypoints-header-entrypoint' => 'Point d’entrée',
+'version-entrypoints' => "URL des points d'entrée",
+'version-entrypoints-header-entrypoint' => "Point d'entrée",
 'version-entrypoints-header-url' => 'URL',
 'version-entrypoints-articlepath' => '[https://www.mediawiki.org/wiki/Manual:$wgArticlePath Chemin d’article]',
 'version-entrypoints-scriptpath' => '[https://www.mediawiki.org/wiki/Manual:$wgScriptPath Chemin de script]',
 
 # Special:FilePath
-'filepath' => 'Chemin d’accès du fichier',
+'filepath' => "Chemin d'accès du fichier",
 'filepath-page' => 'Fichier :',
 'filepath-submit' => 'Aller',
-'filepath-summary' => 'Cette page spéciale retourne le chemin d’accès complet d’un fichier.
-Les images sont montrées dans leur pleine résolution, les autres fichiers sont chargés et démarrés directement avec leur programme associé.',
+'filepath-summary' => "Cette page spéciale retourne le chemin d'accès complet d'un fichier.
+Les images sont montrées dans leur pleine résolution, les autres fichiers sont chargés et démarrés directement avec leur programme associé.",
 
 # Special:FileDuplicateSearch
 'fileduplicatesearch' => 'Recherche de doublons',
-'fileduplicatesearch-summary' => 'Recherche des copies de fichiers identiques d’après leur empreinte de hachage.',
+'fileduplicatesearch-summary' => "Recherche des copies de fichiers identiques d'après leur empreinte de hachage.",
 'fileduplicatesearch-legend' => 'Rechercher un doublon',
 'fileduplicatesearch-filename' => 'Nom du fichier :',
 'fileduplicatesearch-submit' => 'Rechercher',
 'fileduplicatesearch-info' => '$1 × $2 pixels<br />Taille du fichier : $3<br />Type MIME : $4',
-'fileduplicatesearch-result-1' => 'Le fichier « $1 » n’a aucun doublon.',
+'fileduplicatesearch-result-1' => "Le fichier « $1 » n'a aucun doublon.",
 'fileduplicatesearch-result-n' => 'Le fichier « $1 » a {{PLURAL:$2|1 doublon|$2 doublons}}.',
-'fileduplicatesearch-noresults' => 'Aucun fichier nommé « $1 » n’a été trouvé.',
+'fileduplicatesearch-noresults' => "Aucun fichier nommé « $1 » n'a été trouvé.",
 
 # Special:SpecialPages
 'specialpages' => 'Pages spéciales',
@@ -4029,10 +4053,10 @@ Les images sont montrées dans leur pleine résolution, les autres fichiers sont
 'specialpages-group-changes' => 'Modifications récentes et journaux',
 'specialpages-group-media' => 'Rapports et import de fichiers médias',
 'specialpages-group-users' => 'Utilisateurs et droits rattachés',
-'specialpages-group-highuse' => 'Pages d’utilisation intensive',
+'specialpages-group-highuse' => "Pages d'utilisation intensive",
 'specialpages-group-pages' => 'Listes de pages',
 'specialpages-group-pagetools' => 'Outils pour les pages',
-'specialpages-group-wiki' => 'Données du wiki et outils',
+'specialpages-group-wiki' => 'Données et outils',
 'specialpages-group-redirects' => 'Pages spéciales redirigées',
 'specialpages-group-spam' => 'Outils anti-pourriel',
 
@@ -4041,14 +4065,14 @@ Les images sont montrées dans leur pleine résolution, les autres fichiers sont
 'intentionallyblankpage' => 'Cette page est laissée intentionellement vide.',
 
 # External image whitelist
-'external_image_whitelist' => ' #Laisser cette ligne exactement telle quelle.<pre>
-#Indiquer les fragments dexpressions rationnelles (juste la partie indiquée entre les //) ci-dessous.
+'external_image_whitelist' => " #Laisser cette ligne exactement telle quelle.<pre>
+#Indiquer les fragments d'expressions rationnelles (juste la partie indiquée entre les //) ci-dessous.
 #Ils correspondront avec les URL des images externes.
-#Celles qui correspondent s’afficheront comme des images, sinon seul un lien vers l’image sera affiché.
+#Celles qui correspondent s'afficheront comme des images, sinon seul un lien vers l'image sera affiché.
 #Les lignes commençant par un # seront considérées comme des commentaires.
-#Cette liste nest pas sensible à la casse.
+#Cette liste n'est pas sensible à la casse.
 
-#Mettez tous les fragments d’expressions rationnelles au-dessus de cette ligne. Laissez cette dernière ligne telle quelle.</pre>',
+#Mettez tous les fragments d'expressions rationnelles au-dessus de cette ligne. Laissez cette dernière ligne telle quelle.</pre>",
 
 # Special:Tags
 'tags' => 'Balises des modifications valides',
@@ -4078,7 +4102,7 @@ Les images sont montrées dans leur pleine résolution, les autres fichiers sont
 # Database error messages
 'dberr-header' => 'Ce wiki a un problème',
 'dberr-problems' => 'Désolé ! Ce site rencontre des difficultés techniques.',
-'dberr-again' => 'Essayez d’attendre quelques minutes et rechargez.',
+'dberr-again' => "Essayez d'attendre quelques minutes et rechargez.",
 'dberr-info' => '(Connexion au serveur de base de données impossible : $1)',
 'dberr-usegoogle' => 'Vous pouvez essayer de chercher avec Google pendant ce temps.',
 'dberr-outofdate' => 'Notez que leurs index de notre contenu peuvent être dépassés.',
@@ -4086,9 +4110,9 @@ Les images sont montrées dans leur pleine résolution, les autres fichiers sont
 
 # HTML forms
 'htmlform-invalid-input' => 'Des problèmes sont survenus avec certaines valeurs',
-'htmlform-select-badoption' => 'La valeur que vous avez spécifiée n’est pas une option valide.',
-'htmlform-int-invalid' => 'La valeur que vous avec spécifiée n’est pas un entier.',
-'htmlform-float-invalid' => 'La valeur que vous avez spécifiée n’est pas un nombre.',
+'htmlform-select-badoption' => "La valeur que vous avez spécifiée n'est pas une option valide.",
+'htmlform-int-invalid' => "La valeur que vous avec spécifiée n'est pas un entier.",
+'htmlform-float-invalid' => "La valeur que vous avez spécifiée n'est pas un nombre.",
 'htmlform-int-toolow' => 'La valeur que vous avez spécifiée est plus petite que le minimum de $1',
 'htmlform-int-toohigh' => 'La valeur que vous avez spécifiée est plus grande que le maximum de $1',
 'htmlform-required' => 'Cette valeur est requise',
@@ -4104,7 +4128,7 @@ Les images sont montrées dans leur pleine résolution, les autres fichiers sont
 'logentry-delete-delete' => '$1 a supprimé la page $3',
 'logentry-delete-restore' => '$1 a restauré la page $3',
 'logentry-delete-event' => "$1 a modifié la visibilité {{PLURAL:$5|d'un événement du journal|de $5 événements du journal}} sur $3: $4",
-'logentry-delete-revision' => "$1 a modifié la visibilité {{PLURAL:$5|d'une révision|de $5 révisions}} sur la page $3: $4",
+'logentry-delete-revision' => '$1 a modifié la visibilité {{PLURAL:$5|d’une révision|de $5 révisions}} sur la page $3&nbsp;: $4',
 'logentry-delete-event-legacy' => '$1 a modifié la visibilité des événements du journal sur $3',
 'logentry-delete-revision-legacy' => '$1 a modifié la visibilité des révisions sur la page $3',
 'logentry-suppress-delete' => '$1 a supprimé la page $3',
@@ -4113,11 +4137,11 @@ Les images sont montrées dans leur pleine résolution, les autres fichiers sont
 'logentry-suppress-event-legacy' => '$1 a secrètement modifié la visibilité des événements du journal sur $3',
 'logentry-suppress-revision-legacy' => '$1 a secrètement modifié la visibilité des révisions sur la page $3',
 'revdelete-content-hid' => 'contenu masqué',
-'revdelete-summary-hid' => 'résumé de modification caché',
-'revdelete-uname-hid' => "nom d'utilisateur caché",
-'revdelete-content-unhid' => 'contenu révélé',
-'revdelete-summary-unhid' => 'résumé de modification démasqué',
-'revdelete-uname-unhid' => "nom d'utilisateur démasqué",
+'revdelete-summary-hid' => 'résumé de modification masqué',
+'revdelete-uname-hid' => 'nom d’utilisateur masqué',
+'revdelete-content-unhid' => 'contenu affiché',
+'revdelete-summary-unhid' => 'résumé de modification affiché',
+'revdelete-uname-unhid' => 'nom d’utilisateur affiché',
 'revdelete-restricted' => 'restrictions appliquées aux administrateurs',
 'revdelete-unrestricted' => 'restrictions retirées pour les administrateurs',
 'logentry-move-move' => '$1 a déplacé la page $3 vers $4',
@@ -4129,12 +4153,16 @@ Les images sont montrées dans leur pleine résolution, les autres fichiers sont
 'logentry-newusers-newusers' => 'Le compte utilisateur $1 a été créé',
 'logentry-newusers-create' => 'Le compte utilisateur $1 a été créé',
 'logentry-newusers-create2' => 'Le compte utilisateur $3 a été créé par $1',
+'logentry-newusers-byemail' => 'Le compte utilisateur $3 a été créé par $1 et le mot de passe a été envoyé par courriel',
 'logentry-newusers-autocreate' => 'Le compte $1 a été créé automatiquement',
-'newuserlog-byemail' => 'mot de passe envoyé par courriel',
+'logentry-rights-rights' => "$1 a modifié l'appartenance au groupe pour $3 de $4 à $5",
+'logentry-rights-rights-legacy' => "$1 a modifié l'appartenance au groupe pour $3",
+'logentry-rights-autopromote' => '$1 a été promu automatiquement de $4 à $5',
+'rightsnone' => '(aucun)',
 
 # Feedback
-'feedback-bugornote' => 'Si vous êtes prêt à décrire un problème technique en détail, veuillez [$1 signaler un bogue].
-Sinon, vous pouvez utiliser le formulaire simplifié ci-dessous. Votre commentaire sera ajouté à la page « [$3 $2] », avec votre nom d’utilisateur et le navigateur que vous utilisez.',
+'feedback-bugornote' => "Si vous êtes prêt à décrire un problème technique en détail, veuillez [$1 signaler un bogue].
+Sinon, vous pouvez utiliser le formulaire simplifié ci-dessous. Votre commentaire sera ajouté à la page « [$3 $2] », avec votre nom d'utilisateur et le navigateur que vous utilisez.",
 'feedback-subject' => 'Objet :',
 'feedback-message' => 'Message :',
 'feedback-cancel' => 'Annuler',
@@ -4145,7 +4173,7 @@ Sinon, vous pouvez utiliser le formulaire simplifié ci-dessous. Votre commentai
 'feedback-error3' => "Erreur : aucune réponse de l'API",
 'feedback-thanks' => 'Merci ! Votre commentaire a été publié sur la page "[$2 $1]".',
 'feedback-close' => 'Fait',
-'feedback-bugcheck' => 'Formidable ! Vérifiez simplement que ce n’est pas un des [$1 bogues déjà connus].',
+'feedback-bugcheck' => "Formidable ! Vérifiez simplement que ce n'est pas un des [$1 bogues déjà connus].",
 'feedback-bugnew' => "J'ai vérifié. Signaler un nouveau bogue",
 
 # Search suggestions
@@ -4153,39 +4181,40 @@ Sinon, vous pouvez utiliser le formulaire simplifié ci-dessous. Votre commentai
 'searchsuggest-containing' => 'contenant...',
 
 # API errors
-'api-error-badaccess-groups' => 'Vous n’êtes pas autorisé à verser des fichiers sur ce wiki.',
+'api-error-badaccess-groups' => "Vous n'êtes pas autorisé à verser des fichiers sur ce wiki.",
 'api-error-badtoken' => 'Erreur interne : mauvais « jeton ».',
 'api-error-copyuploaddisabled' => 'Les versements via URL sont désactivés sur ce serveur.',
-'api-error-duplicate' => 'Il y a déjà {{PLURAL:$1|[$2 un autre fichier présent]|[$2 d’autres fichiers présents]}} sur le site avec le même contenu.',
-'api-error-duplicate-archive' => 'Il y avait déjà {{PLURAL:$1|[$2 un autre fichier présent]|[$2 d’autres fichiers présents]}} sur le site avec le même contenu, mais {{PLURAL:$1|il a été supprimé|ils ont été supprimés}}.',
+'api-error-duplicate' => "Il y a déjà {{PLURAL:$1|[$2 un autre fichier présent]|[$2 d'autres fichiers présents]}} sur le site avec le même contenu.",
+'api-error-duplicate-archive' => "Il y avait déjà {{PLURAL:$1|[$2 un autre fichier présent]|[$2 d'autres fichiers présents]}} sur le site avec le même contenu, mais {{PLURAL:$1|il a été supprimé|ils ont été supprimés}}.",
 'api-error-duplicate-archive-popup-title' => 'Dupliquer {{PLURAL:$1|le fichier|les fichiers}} qui {{PLURAL:$1|a déjà été supprimé|ont déjà été supprimés}}',
 'api-error-duplicate-popup-title' => '{{PLURAL:$1|fichier|fichiers}} en double',
 'api-error-empty-file' => 'Le fichier que vous avez soumis était vide.',
 'api-error-emptypage' => "Création de pages vide n'est pas autorisée.",
-'api-error-fetchfileerror' => 'Erreur interne : Quelque chose s’est mal passé lors de la récupération du fichier.',
+'api-error-fetchfileerror' => "Erreur interne : Quelque chose s'est mal passé lors de la récupération du fichier.",
 'api-error-fileexists-forbidden' => 'Un fichier nommé "$1" existe déjà, et ne peut pas être écrasé.',
 'api-error-fileexists-shared-forbidden' => 'Un fichier nommé "$1" existe déjà dans le répertoire des fichiers partagés, et ne peut pas être écrasé.',
 'api-error-file-too-large' => 'Le fichier que vous avez soumis était trop grand.',
 'api-error-filename-tooshort' => 'Le nom du fichier est trop court.',
 'api-error-filetype-banned' => 'Ce type de fichier est interdit.',
-'api-error-filetype-banned-type' => '$1 {{PLURAL:$4|n’est pas un type de fichier autorisé|ne sont pas des types de fichiers autorisés}}. {{PLURAL:$3|Le type de fichier autorisé est |Les types de fichiers autorisés sont}} $2.',
-'api-error-filetype-missing' => 'L’extension du fichier est manquante.',
+'api-error-filetype-banned-type' => "$1 {{PLURAL:$4|n'est pas un type de fichier autorisé|ne sont pas des types de fichiers autorisés}}. {{PLURAL:$3|Le type de fichier autorisé est |Les types de fichiers autorisés sont}} $2.",
+'api-error-filetype-missing' => "L'extension du fichier est manquante.",
 'api-error-hookaborted' => 'La modification que vous avez essayé de faire a été annulée par une extension.',
 'api-error-http' => 'Erreur interne : ne peut se connecter au serveur.',
-'api-error-illegal-filename' => 'Le nom du fichier n’est pas autorisé.',
-'api-error-internal-error' => 'Erreur interne : Quelque chose s’est mal passé lors du traitement de votre import sur le wiki.',
+'api-error-illegal-filename' => "Le nom du fichier n'est pas autorisé.",
+'api-error-internal-error' => "Erreur interne : Quelque chose s'est mal passé lors du traitement de votre import sur le wiki.",
 'api-error-invalid-file-key' => 'Erreur interne : aucun fichier trouvé dans le stockage temporaire.',
 'api-error-missingparam' => 'Erreur interne : Il manque des paramètres dans la requête.',
-'api-error-missingresult' => 'Erreur interne : Nous n’avons pas pu déterminer si la copie avait réussi.',
+'api-error-missingresult' => "Erreur interne : Nous n'avons pas pu déterminer si la copie avait réussi.",
 'api-error-mustbeloggedin' => 'Vous devez être connecté pour télécharger des fichiers.',
 'api-error-mustbeposted' => 'Erreur interne : cette requête nécessite la méthode HTTP POST.',
-'api-error-noimageinfo' => 'Le téléversement a réussi, mais le serveur n’a pas donné d’informations sur le fichier.',
+'api-error-noimageinfo' => "Le téléversement a réussi, mais le serveur n'a pas donné d'informations sur le fichier.",
 'api-error-nomodule' => 'Erreur interne : aucun module de versement défini.',
-'api-error-ok-but-empty' => 'Erreur interne : Le serveur n’a pas répondu.',
-'api-error-overwrite' => 'Écraser un fichier existant n’est pas autorisé.',
-'api-error-stashfailed' => 'Erreur interne : le serveur n’a pas pu enregistrer le fichier temporaire.',
-'api-error-timeout' => 'Le serveur n’a pas répondu dans le délai imparti.',
-'api-error-unclassified' => 'Une erreur inconnue s’est produite',
+'api-error-ok-but-empty' => "Erreur interne : Le serveur n'a pas répondu.",
+'api-error-overwrite' => "Écraser un fichier existant n'est pas autorisé.",
+'api-error-stashfailed' => "Erreur interne : le serveur n'a pas pu enregistrer le fichier temporaire.",
+'api-error-publishfailed' => 'Erreur interne: Le serveur n’a pas pu publier le fichier temporaire.',
+'api-error-timeout' => "Le serveur n'a pas répondu dans le délai imparti.",
+'api-error-unclassified' => "Une erreur inconnue s'est produite",
 'api-error-unknown-code' => 'Erreur inconnue : « $1 »',
 'api-error-unknown-error' => 'Erreur interne : Quelque chose a mal tourné lors du versement de votre fichier.',
 'api-error-unknown-warning' => 'Avertissement inconnu : $1',
@@ -4204,6 +4233,4 @@ Sinon, vous pouvez utiliser le formulaire simplifié ci-dessous. Votre commentai
 'duration-centuries' => '$1 siècle{{PLURAL:$1||s}}',
 'duration-millennia' => '$1 millénaire{{PLURAL:$1||s}}',
 
-# Unknown messages
-'svg-long-error' => 'Fichier SVG non valide: $1',
 );
index 5e4e8f3..50b0f59 100644 (file)
@@ -312,52 +312,52 @@ $messages = array(
 'tog-underline' => 'Solegnér los lims :',
 'tog-justify' => 'Justifiar los paragrafos',
 'tog-hideminor' => 'Cachiér los petiôts changements dedens los dèrriérs changements',
-'tog-hidepatrolled' => 'Cachiér los changements survelyês dedens los dèrriérs changements',
-'tog-newpageshidepatrolled' => 'Cachiér les pâges survelyêyes entre-mié la lista de les pâges novèles',
-'tog-extendwatchlist' => 'Ètendre la lista de survelyence por fâre vêre tôs los changements et pas solament los ples novéls',
-'tog-usenewrc' => 'Rassemblar los changements per pâge dedens los dèrriérs changements et la lista de survelyence (at fôta de JavaScript)',
+'tog-hidepatrolled' => 'Cachiér los changements gouardâs dedens los dèrriérs changements',
+'tog-newpageshidepatrolled' => 'Cachiér les pâges gouardâyes entre-mié la lista de les pâges novèles',
+'tog-extendwatchlist' => 'Ètendre la lista de siuvu por montrar tôs los changements et pas ren que los ples novéls',
+'tog-usenewrc' => 'Rassemblar los changements per pâge dedens los dèrriérs changements et la lista de siuvu (il at fôta de JavaScript)',
 'tog-numberheadings' => 'Numerotar ôtomaticament los titros de sèccion',
-'tog-showtoolbar' => 'Fâre vêre la bârra d’outils de changement (at fôta de JavaScript)',
-'tog-editondblclick' => 'Changiér des pâges sur doblo-clic (at fôta de JavaScript)',
+'tog-showtoolbar' => 'Montrar la bârra d’outils de changement (il at fôta de JavaScript)',
+'tog-editondblclick' => 'Changiér des pâges sur doblo-clic (il at fôta de JavaScript)',
 'tog-editsection' => 'Activar lo changement de sèccions avouéc los lims « [changiér] »',
-'tog-editsectiononrightclick' => 'Activar lo changement de sèccions per clic drêt sur lors titros (at fôta de JavaScript)',
-'tog-showtoc' => 'Fâre vêre la trâbla de les matiéres (por les pâges qu’ont més de 3 sèccions)',
+'tog-editsectiononrightclick' => 'Activar lo changement de sèccions per clic drêt sur lors titros (il at fôta de JavaScript)',
+'tog-showtoc' => 'Montrar la trâbla de les matiéres (por les pâges qu’ont més de 3 sèccions)',
 'tog-rememberpassword' => 'Sè rapelar de mon contresegno sur ceti navigator (por lo més $1 jorn{{PLURAL:$1||s}})',
-'tog-watchcreations' => 'Apondre les pâges que fé et pués los fichiérs que tèlècharjo a ma lista de survelyence',
-'tog-watchdefault' => 'Apondre les pâges et los fichiérs que chanjo a ma lista de survelyence',
-'tog-watchmoves' => 'Apondre les pâges et los fichiérs que renomo a ma lista de survelyence',
-'tog-watchdeletion' => 'Apondre les pâges et los fichiérs que suprimo a ma lista de survelyence',
+'tog-watchcreations' => 'Apondre les pâges que fé et pués los fichiérs que tèlècharjo a ma lista de siuvu',
+'tog-watchdefault' => 'Apondre les pâges et los fichiérs que chanjo a ma lista de siuvu',
+'tog-watchmoves' => 'Apondre les pâges et los fichiérs que dèplaço a ma lista de siuvu',
+'tog-watchdeletion' => 'Apondre les pâges et los fichiérs que suprimo a ma lista de siuvu',
 'tog-minordefault' => 'Marcar per dèfôt tôs los changements coment petiôts',
-'tog-previewontop' => 'Fâre vêre la prèvisualisacion d’amont la zona de changement',
-'tog-previewonfirst' => 'Fâre vêre la prèvisualisacion pendent lo premiér changement',
+'tog-previewontop' => 'Montrar l’apèrçu d’amont la zona de changement',
+'tog-previewonfirst' => 'Montrar l’apèrçu pendent lo premiér changement',
 'tog-nocache' => 'Dèsactivar lo cacho de les pâges per lo navigator',
-'tog-enotifwatchlistpages' => 'Mè mandar un mèssâjo quand na pâge ou ben un fichiér de ma lista de survelyence est changiê(ye)',
-'tog-enotifusertalkpages' => 'Mè mandar un mèssâjo quand ma pâge de discussion est changiêye',
+'tog-enotifwatchlistpages' => 'Mè mandar un mèssâjo quand na pâge un fichiér de ma lista de siuvu est changiê(e)',
+'tog-enotifusertalkpages' => 'Mè mandar un mèssâjo quand ma pâge de discussion est changiêe',
 'tog-enotifminoredits' => 'Mè mandar un mèssâjo mémo en câs de petiôts changements de les pâges et des fichiérs',
-'tog-enotifrevealaddr' => 'Fâre vêre mon adrèce èlèctronica dens los mèssâjos de notificacion',
-'tog-shownumberswatching' => 'Fâre vêre lo nombro d’utilisators que siuvont na pâge',
+'tog-enotifrevealaddr' => 'Rèvèlar mon adrèce èlèctronica dedens los mèssâjos de notificacion',
+'tog-shownumberswatching' => 'Montrar lo nombro d’utilisators que siuvont na pâge',
 'tog-oldsig' => 'Signatura ègzistenta :',
 'tog-fancysig' => 'Trètar la signatura coment de vouiquitèxto (sen lim ôtomatico)',
-'tog-externaleditor' => 'Empleyér per dèfôt un changior de tèxto de defôr (solament por los utilisators avanciês, at fôta d’una configuracion spèciâla sur voutron ordenator. [//www.mediawiki.org/wiki/Manual:External_editors Més d’enformacions.])',
-'tog-externaldiff' => 'Empleyér per dèfôt un comparator de defôr (solament por los utilisators avanciês, at fôta d’una configuracion spèciâla sur voutron ordenator. [//www.mediawiki.org/wiki/Manual:External_editors Més d’enformacions.])',
+'tog-externaleditor' => 'Empleyér per dèfôt un changior de tèxto de defôr (solament por los utilisators avanciês, il at fôta d’una configuracion spèciâla sur voutron ordenator. [//www.mediawiki.org/wiki/Manual:External_editors Més d’enformacions.])',
+'tog-externaldiff' => 'Empleyér per dèfôt un comparator de defôr (solament por los utilisators avanciês, il at fôta d’una configuracion spèciâla sur voutron ordenator. [//www.mediawiki.org/wiki/Manual:External_editors Més d’enformacions.])',
 'tog-showjumplinks' => 'Activar los lims d’accèssibilitât « {{int:jumpto}} »',
-'tog-uselivepreview' => 'Empleyér l’apèrçu rapido (at fôta de JavaScript) (èxpèrimentâl)',
-'tog-forceeditsummary' => 'M’avèrtir quand j’é pas spècifiâ de rèsumâ de changement',
-'tog-watchlisthideown' => 'Cachiér mos prôpros changements dedens la lista de survelyence',
-'tog-watchlisthidebots' => 'Cachiér los changements fêts per des robots dedens la lista de survelyence',
-'tog-watchlisthideminor' => 'Cachiér los petiôts changements dedens la lista de survelyence',
-'tog-watchlisthideliu' => 'Cachiér los changements fêts per des utilisators branchiês dedens la lista de survelyence',
-'tog-watchlisthideanons' => 'Cachiér los changements fêts per des utilisators anonimos dedens la lista de survelyence',
-'tog-watchlisthidepatrolled' => 'Cachiér los changements survelyês dedens la lista de survelyence',
+'tog-uselivepreview' => 'Empleyér l’apèrçu rapido (il at fôta de JavaScript) (èxpèrimentâl)',
+'tog-forceeditsummary' => 'Mè balyér na semonce quand j’é pas buchiê de rèsumâ de changement',
+'tog-watchlisthideown' => 'Cachiér los mins changements dedens la lista de siuvu',
+'tog-watchlisthidebots' => 'Cachiér los changements fêts per des robots dedens la lista de siuvu',
+'tog-watchlisthideminor' => 'Cachiér los petiôts changements dedens la lista de siuvu',
+'tog-watchlisthideliu' => 'Cachiér los changements fêts per des utilisators branchiês dedens la lista de siuvu',
+'tog-watchlisthideanons' => 'Cachiér los changements fêts per des utilisators anonimos dedens la lista de siuvu',
+'tog-watchlisthidepatrolled' => 'Cachiér los changements gouardâs dedens la lista de siuvu',
 'tog-ccmeonemails' => 'Mè mandar na copia des mèssâjos que mando ux ôtros utilisators',
-'tog-diffonly' => 'Pas fâre vêre lo contegnu de les pâges desot los difs',
-'tog-showhiddencats' => 'Fâre vêre les catègories cachiêyes',
+'tog-diffonly' => 'Pas montrar lo contegnu de les pâges desot les difs',
+'tog-showhiddencats' => 'Montrar les catègories cachiêes',
 'tog-noconvertlink' => 'Dèsactivar la convèrsion des titros des lims',
-'tog-norollbackdiff' => 'Pas fâre vêre lo dif pendent na rèvocacion',
+'tog-norollbackdiff' => 'Pas fâre vêre la dif pendent na rèvocacion',
 
 'underline-always' => 'Tojorn',
 'underline-never' => 'Jamés',
-'underline-default' => 'Valor du navigator per dèfôt',
+'underline-default' => 'Valor de l’habelyâjo du navigator per dèfôt',
 
 # Font style option in Special:Preferences
 'editfont-style' => 'Stilo de police de la zona de changement :',
@@ -423,14 +423,14 @@ $messages = array(
 'category_header' => 'Pâges dedens la catègorie « $1 »',
 'subcategories' => 'Sot-catègories',
 'category-media-header' => 'Fichiérs mèdia dedens la catègorie « $1 »',
-'category-empty' => "''Ora cela catègorie contint gins de pâge ou de fichiér mèdia.''",
-'hidden-categories' => '{{PLURAL:$1|Catègorie cachiêye|Catègories cachiêyes}}',
-'hidden-category-category' => 'Catègories cachiêyes',
-'category-subcat-count' => 'Cela catègorie-que at {{PLURAL:$2|solament ceta sot-catègorie.|{{PLURAL:$1|ceta sot-catègorie|cetes $1 sot-catègories}}, sur na soma de $2.}}',
+'category-empty' => "''Ora ceta catègorie contint gins de pâge de fichiér mèdia.''",
+'hidden-categories' => '{{PLURAL:$1|Catègorie cachiêe|Catègories cachiêes}}',
+'hidden-category-category' => 'Catègories cachiêes',
+'category-subcat-count' => 'Cela catègorie-que at {{PLURAL:$2|ren que ceta sot-catègorie.|{{PLURAL:$1|ceta sot-catègorie|cetes $1 sot-catègories}}, sur na soma de $2.}}',
 'category-subcat-count-limited' => 'Cela catègorie-que at {{PLURAL:$1|ceta sot-catègorie|cetes $1 sot-catègories}}.',
-'category-article-count' => '{{PLURAL:$2|Cela catègorie-que contint solament ceta pâge.|{{PLURAL:$1|Ceta pâge figure|Cetes $1 pâges figuront}} dedens cela catègorie-que, sur na soma de $2.}}',
+'category-article-count' => '{{PLURAL:$2|Cela catègorie-que contint ren que ceta pâge.|{{PLURAL:$1|Ceta pâge figure|Cetes $1 pâges figuront}} dedens cela catègorie-que, sur na soma de $2.}}',
 'category-article-count-limited' => '{{PLURAL:$1|Ceta pâge figure|Cetes $1 pâges figuront}} dedens la presenta catègorie.',
-'category-file-count' => '{{PLURAL:$2|Cela catègorie-que contint solament ceti fichiér.|{{PLURAL:$1|Ceti fichiér figure|Cetos $1 fichiérs figuront}} dedens cela catègorie-que, sur na soma de $2.}}',
+'category-file-count' => '{{PLURAL:$2|Cela catègorie-que contint ren que ceti fichiér.|{{PLURAL:$1|Ceti fichiér figure|Cetos $1 fichiérs figuront}} dedens cela catègorie-que, sur na soma de $2.}}',
 'category-file-count-limited' => '{{PLURAL:$1|Ceti fichiér figure|Cetos $1 fichiérs figuront}} dedens la presenta catègorie.',
 'listingcontinuesabbrev' => '(suita)',
 'index-category' => 'Pâges endèxâyes',
@@ -442,8 +442,9 @@ $messages = array(
 'newwindow' => '(ôvre na fenétra novèla)',
 'cancel' => 'Anular',
 'moredotdotdot' => 'Més...',
-'mypage' => 'Ma pâge',
-'mytalk' => 'Ma pâge de discussion',
+'morenotlisted' => 'Més pas listâ...',
+'mypage' => 'Pâge',
+'mytalk' => 'Discussion',
 'anontalk' => 'Discussion avouéc cet’adrèce IP',
 'navigation' => 'Navigacion',
 'and' => '&#32;et',
@@ -461,20 +462,21 @@ $messages = array(
 # Vector skin
 'vector-action-addsection' => 'Apondre na chousa',
 'vector-action-delete' => 'Suprimar',
-'vector-action-move' => 'Renomar',
+'vector-action-move' => 'Dèplaciér',
 'vector-action-protect' => 'Protègiér',
 'vector-action-undelete' => 'Refâre',
 'vector-action-unprotect' => 'Changiér la protèccion',
 'vector-simplesearch-preference' => 'Activar la bârra de rechèrche simplifiâye (solament por l’habelyâjo « Vèctor »)',
 'vector-view-create' => 'Fâre',
 'vector-view-edit' => 'Changiér',
-'vector-view-history' => 'Fâre vêre l’historico',
+'vector-view-history' => 'Vêre l’historico',
 'vector-view-view' => 'Liére',
-'vector-view-viewsource' => 'Fâre vêre lo tèxto sôrsa',
+'vector-view-viewsource' => 'Vêre lo tèxto sôrsa',
 'actions' => 'Accions',
 'namespaces' => 'Èspâços de noms',
 'variants' => 'Variantes',
 
+'navigation-heading' => 'Menu de navigacion',
 'errorpagetitle' => 'Fôta',
 'returnto' => 'Tornar a la pâge $1.',
 'tagline' => 'De {{SITENAME}}',
@@ -496,8 +498,8 @@ $messages = array(
 'create-this-page' => 'Fâre cela pâge',
 'delete' => 'Suprimar',
 'deletethispage' => 'Suprimar ceta pâge',
-'undelete_short' => 'Refâre {{PLURAL:$1|yon changement|$1 changements}}',
-'viewdeleted_short' => 'Fâre vêre {{PLURAL:$1|yon changement suprimâ|$1 changements suprimâs}}',
+'undelete_short' => 'Refâre {{PLURAL:$1|un changement|$1 changements}}',
+'viewdeleted_short' => 'Vêre {{PLURAL:$1|un changement suprimâ|$1 changements suprimâs}}',
 'protect' => 'Protègiér',
 'protect_change' => 'changiér',
 'protectthispage' => 'Protègiér ceta pâge',
@@ -511,7 +513,7 @@ $messages = array(
 'postcomment' => 'Novèla sèccion',
 'articlepage' => 'Vêde la pâge de contegnu',
 'talk' => 'Discussion',
-'views' => 'Visualisacions',
+'views' => 'Vues',
 'toolbox' => 'Bouèta d’outils',
 'userpage' => 'Vêde la pâge utilisator',
 'projectpage' => 'Vêde la pâge projèt',
@@ -522,17 +524,17 @@ $messages = array(
 'categorypage' => 'Vêde la pâge de catègorie',
 'viewtalkpage' => 'Vêde la pâge de discussion',
 'otherlanguages' => 'Ôtres lengoues',
-'redirectedfrom' => '(Redirigiêye dês $1)',
+'redirectedfrom' => '(Redirigiêe dês $1)',
 'redirectpagesub' => 'Pâge de redirèccion',
 'lastmodifiedat' => 'Dèrriér changement de ceta pâge lo $1 a $2.',
-'viewcount' => 'Ceta pâge est étâye vua {{PLURAL:$1|yon côp|$1 côps}}.',
-'protectedpage' => 'Pâge protègiêye',
-'jumpto' => 'Alar a :',
+'viewcount' => 'Ceta pâge est étâye vua {{PLURAL:$1|un côp|$1 côps}}.',
+'protectedpage' => 'Pâge protègiêe',
+'jumpto' => 'Alar vers :',
 'jumptonavigation' => 'navigacion',
 'jumptosearch' => 'rechèrche',
 'view-pool-error' => 'Dèconsolâ, los sèrviors sont lapidâs d’ôvra cetos temps.
 Trop d’utilisators tâchont de vêre ceta pâge.
-Volyéd atendre un moment devant que tornar tâchiér d’arrevar a ceta pâge.
+Se vos plét, atende un moment devant que tornar tâchiér d’arrevar a ceta pâge.
 
 $1',
 'pool-timeout' => 'Dèlê dèpassâ pendent l’atenta du vèrroly',
@@ -546,8 +548,8 @@ $1',
 'copyrightpage' => '{{ns:project}}:Drêts d’ôtor',
 'currentevents' => 'Novèles',
 'currentevents-url' => 'Project:Novèles',
-'disclaimers' => 'Avèrtissements',
-'disclaimerpage' => 'Project:Avèrtissements g·ènèrals',
+'disclaimers' => 'Semonces',
+'disclaimerpage' => 'Project:Semonces g·ènèrales',
 'edithelp' => 'Éde',
 'edithelppage' => 'Help:Coment changiér na pâge',
 'helppage' => 'Help:Somèro',
@@ -560,8 +562,8 @@ $1',
 'privacypage' => 'Project:Politica de confidencialitât',
 
 'badaccess' => 'Fôta de pèrmission',
-'badaccess-group0' => 'Vos avéd pas los drêts sufisents por rèalisar l’accion demandâye.',
-'badaccess-groups' => 'L’accion que vos tâchiéd de rèalisar est accèssibla ren qu’ux utilisators de {{PLURAL:$2|la tropa|les tropes}} : $1.',
+'badaccess-group0' => 'Vos éte pas ôtorisâ a fâre l’accion demandâye.',
+'badaccess-groups' => 'L’accion demandâye est limitâye ux utilisators de {{PLURAL:$2|la tropa|yona de les tropes}} : $1.',
 
 'versionrequired' => 'Vèrsion $1 de MediaWiki nècèssèra',
 'versionrequiredtext' => 'La vèrsion $1 de MediaWiki est nècèssèra por empleyér ceta pâge.
@@ -569,30 +571,30 @@ Vêde la [[Special:Version|pâge de les vèrsions]].',
 
 'ok' => 'D’acôrd',
 'retrievedfrom' => 'Rècupèrâye de « $1 »',
-'youhavenewmessages' => 'Vos avéd de $1 ($2).',
+'youhavenewmessages' => 'Vos éd de $1 ($2).',
 'newmessageslink' => 'mèssâjos novéls',
 'newmessagesdifflink' => 'dèrriér changement',
-'youhavenewmessagesfromusers' => 'Vos avéd $1 {{PLURAL:$3|d’un ôtr’utilisator|de $3 ôtros utilisators}} ($2).',
-'youhavenewmessagesmanyusers' => 'Vos avéd $1 d’un mouél d’utilisators ($2).',
+'youhavenewmessagesfromusers' => 'Vos éd $1 {{PLURAL:$3|d’un ôtr’utilisator|de $3 ôtros utilisators}} ($2).',
+'youhavenewmessagesmanyusers' => 'Vos éd $1 d’un mouél d’utilisators ($2).',
 'newmessageslinkplural' => '{{PLURAL:$1|un mèssâjo novél|de mèssâjos novéls}}',
 'newmessagesdifflinkplural' => '{{PLURAL:$1|dèrriér changement|dèrriérs changements}}',
-'youhavenewmessagesmulti' => 'Vos avéd de mèssâjos novéls sur $1',
+'youhavenewmessagesmulti' => 'Vos éd de mèssâjos novéls sur $1',
 'editsection' => 'changiér',
 'editold' => 'changiér',
-'viewsourceold' => 'fâre vêre lo tèxto sôrsa',
+'viewsourceold' => 'vêre lo tèxto sôrsa',
 'editlink' => 'changiér',
-'viewsourcelink' => 'fâre vêre lo tèxto sôrsa',
+'viewsourcelink' => 'vêre lo tèxto sôrsa',
 'editsectionhint' => 'Changiér la sèccion : $1',
 'toc' => 'Somèro',
-'showtoc' => 'fâre vêre',
+'showtoc' => 'montrar',
 'hidetoc' => 'cachiér',
 'collapsible-collapse' => 'repleyér',
 'collapsible-expand' => 'dèpleyér',
-'thisisdeleted' => 'Voléd-vos fâre vêre ou ben refâre $1 ?',
-'viewdeleted' => 'Fâre vêre $1 ?',
-'restorelink' => '{{PLURAL:$1|yon changement suprimâ|$1 changements suprimâs}}',
+'thisisdeleted' => 'Est-o que vos voléd vêre ou ben refâre $1 ?',
+'viewdeleted' => 'Est-o que vos voléd vêre $1 ?',
+'restorelink' => '{{PLURAL:$1|un changement suprimâ|$1 changements suprimâs}}',
 'feedlinks' => 'Flux :',
-'feed-invalid' => 'Tipo d’abonement du flux envalido.',
+'feed-invalid' => 'Tipo d’abonement du flux pas justo.',
 'feed-unavailable' => 'Los flux de sindicacion sont pas disponiblos',
 'site-rss-feed' => 'Flux RSS de $1',
 'site-atom-feed' => 'Flux Atom de $1',
@@ -616,13 +618,13 @@ Vêde la [[Special:Version|pâge de les vèrsions]].',
 
 # Main script and global functions
 'nosuchaction' => 'Accion encognua',
-'nosuchactiontext' => 'L’accion spècifiâye dens l’URL est envalida.
+'nosuchactiontext' => 'L’accion spècifiâye dens l’URL est pas justa.
 Pôt-étre vos éd mâl-buchiê l’URL ou ben siuvu un lim fôx.
-Pôt asse-ben étre quèstion d’una cofierie dedens la programeria empleyêye per {{SITENAME}}.',
+Pôt asse-ben étre quèstion d’una cofierie dedens la programeria empleyêe per {{SITENAME}}.',
 'nosuchspecialpage' => 'Pâge spèciâla pas ègzistenta',
 'nospecialpagetext' => '<strong>Vos éd demandâ na pâge spèciâla qu’ègziste pas.</strong>
 
-Na lista de les pâges spèciâles valides sè trove dessus [[Special:SpecialPages|{{int:specialpages}}]].',
+Na lista de les pâges spèciâles justes sè trôve dessus [[Special:SpecialPages|{{int:specialpages}}]].',
 
 # General errors
 'error' => 'Fôta',
@@ -639,20 +641,20 @@ La dèrriére demanda trètâye per la bâsa de donâs ére :
 dês la fonccion « $2 ».
 La bâsa de donâs at retornâ la fôta « $3 : $4 ».',
 'laggedslavemode' => "'''Atencion :''' cela pâge pôt pas contegnir tôs los dèrriérs changements fêts.",
-'readonly' => 'Bâsa de donâs vèrrolyêye',
-'enterlockreason' => 'Balyéd la rêson du vèrroly et pués n’èstimacion de la sina durâ',
-'readonlytext' => 'Ora la bâsa de donâs est vèrrolyêye por les entrâs novèles et los ôtros changements, de sûr por pèrmetre la sina mantegnence, dês cen tot tornerat en ôrdre.
+'readonly' => 'Bâsa de donâs vèrrolyêe',
+'enterlockreason' => 'Buchiéd na rêson du vèrroly et pués n’èstimacion de la sina durâ',
+'readonlytext' => 'Ora la bâsa de donâs est vèrrolyêe por les entrâs novèles et los ôtros changements, de sûr por pèrmetre la sina mantegnence, dês cen tot tornerat en ôrdre.
 
 L’administrator que l’at vèrrolyê at balyê cet’èxplicacion : $1',
-'missing-article' => 'La bâsa de donâs at pas trovâ lo tèxto d’una pâge qu’el arêt diu trovar, avouéc lo titro « $1 » $2.
+'missing-article' => 'La bâsa de donâs at pas trovâ lo tèxto d’una pâge qu’el arêt diu trovar, apelâye « $1 » $2.
 
-En g·ènèral cen arreve en siuvent un lim de vers un dif dèpassâ ou ben de vers l’historico d’una pâge suprimâye.
+En g·ènèral cen arreve en siuvent un lim d’una dif d’un historico dèpassâ(ye) de vers na pâge qu’est étâye suprimâye.
 
 S’o est pas lo câs, pôt étre quèstion d’una cofierie dedens la programeria.
-La volyéd signalar a un [[Special:ListUsers/sysop|administrator]] sen oubliar de lui endicar l’URL du lim.',
+Se vos plét, signalâd-la a un [[Special:ListUsers/sysop|administrator]] sen oubliar de lui endicar l’URL du lim.',
 'missingarticle-rev' => '(numerô de vèrsion : $1)',
 'missingarticle-diff' => '(dif : $1, $2)',
-'readonly_lag' => 'La bâsa de donâs est étâye vèrrolyêye ôtomaticament pendent que los sèrviors secondèros ratrapont lor retârd sur lo sèrvior principâl.',
+'readonly_lag' => 'La bâsa de donâs est étâye vèrrolyêe ôtomaticament pendent que los sèrviors secondèros ratrapont lor retârd sur lo sèrvior principâl.',
 'internalerror' => 'Fôta de dedens',
 'internalerror_info' => 'Fôta de dedens : $1',
 'fileappenderrorread' => 'Empossiblo de liére « $1 » pendent l’aponsa.',
@@ -664,44 +666,52 @@ La volyéd signalar a un [[Special:ListUsers/sysop|administrator]] sen oubliar d
 'filenotfound' => 'Empossiblo de trovar lo fichiér « $1 ».',
 'fileexistserror' => 'Empossiblo d’ècrire lo fichiér « $1 » : lo fichiér ègziste.',
 'unexpected' => 'Valor emprèvua : « $1 » = « $2 ».',
-'formerror' => 'Fôta : empossiblo de sometre lo formulèro.',
+'formerror' => 'Fôta : empossiblo de mandar lo formulèro.',
 'badarticleerror' => 'Cel’accion pôt pas étre fêta sur ceta pâge.',
-'cannotdelete' => 'Empossiblo de suprimar la pâge ou ben lo fichiér « $1 ».
-Pôt-étre la suprèssion est ja étâye fêta per quârqu’un d’ôtro.',
+'cannotdelete' => 'Empossiblo de suprimar la pâge lo fichiér « $1 ».
+Pôt-étre la suprèssion est ja étâye fêta per un ôtro.',
 'cannotdelete-title' => 'Empossiblo de suprimar la pâge « $1 »',
+'delete-hook-aborted' => 'Suprèssion anulâye per un grèfon.
+Nion’èxplicacion est étâye balyêe.',
 'badtitle' => 'Crouyo titro',
-'badtitletext' => 'Lo titro de la pâge demandâye est envalido, vouedo ou ben o est un titro entèrlengoua ou entèrvouiqui mâl-liyê.
+'badtitletext' => 'Lo titro de la pâge demandâye est pas justo, vouedo ou ben o est un titro entèrlengoua ou entèrvouiqui mâl-liyê.
 Contint sûrament yon ou ben un mouél de caractèros que pôvont pas étre empleyês dedens los titros.',
-'perfcached' => 'Cetes donâs sont en cacho et pôvont pas étre a jorn. Por lo més {{PLURAL:$1|yon rèsultat est disponiblo|$1 rèsultats sont disponiblos}} dedens lo cacho.',
-'perfcachedts' => 'Cetes donâs sont en cacho et sont étâyes betâyes a jorn por lo dèrriér côp a $1. Por lo més {{PLURAL:$1|yon rèsultat est disponiblo|$1 rèsultats sont disponiblos}} dedens lo cacho.',
+'perfcached' => 'Cetes donâs sont en cacho et pôvont pas étre a jorn. Por lo més {{PLURAL:$1|un rèsultat est disponiblo|$1 rèsultats sont disponiblos}} dedens lo cacho.',
+'perfcachedts' => 'Cetes donâs sont en cacho et sont étâyes betâyes a jorn por lo dèrriér côp a $1. Por lo més {{PLURAL:$1|un rèsultat est disponiblo|$1 rèsultats sont disponiblos}} dedens lo cacho.',
 'querypage-no-updates' => 'Ora les mises a jorn por ceta pâge sont dèsactivâyes.
 Les donâs ique seront pas betâyes a jorn.',
 'wrong_wfQuery_params' => 'Paramètros fôx dessus wfQuery()<br />
 Fonccion : $1<br />
 Demanda : $2',
-'viewsource' => 'Fâre vêre lo tèxto sôrsa',
+'viewsource' => 'Vêre lo tèxto sôrsa',
 'viewsource-title' => 'Vêre lo tèxto sôrsa de $1',
 'actionthrottled' => 'Accion limitâye',
 'actionthrottledtext' => 'Por combatre lo spame, l’usâjo de cel’accion est limitâ a doux-três côps dens un moment prod côrt. S’acomplét que vos éd dèpassâ ceta limita.
-Volyéd tornar èprovar dens un tôrn.',
-'protectedpagetext' => 'Ceta pâge est étâye protègiêye por empachiér son changement.',
+Se vos plét, tornâd èprovar dens un tôrn.',
+'protectedpagetext' => 'Ceta pâge est étâye protègiêe por empachiér son changement ou ben d’ôtres accions.',
 'viewsourcetext' => 'Vos pouede vêre et pués copiyér lo tèxto sôrsa de ceta pâge :',
 'viewyourtext' => "Vos pouede vêre et pués copiyér lo tèxto sôrsa de '''voutros changements''' a ceta pâge :",
-'protectedinterface' => 'Cela pâge-que balye de tèxto d’entèrface por la programeria sur ceti vouiqui, et est vêr protègiêye por èvitar los abus.
-Por apondre ou ben changiér des traduccions sur tôs los vouiquis, volyéd empleyér [//translatewiki.net/ translatewiki.net], lo projèt de localisacion de MediaWiki.',
-'editinginterface' => "'''Atencion :''' vos éte aprés changiér na pâge empleyêye por fâre lo tèxto d’entèrface de la programeria.
+'protectedinterface' => 'Cela pâge-que balye de tèxto d’entèrface por la programeria sur ceti vouiqui, et el est vêr protègiêe por èvitar los abus.
+Por apondre ou ben changiér des traduccions sur tôs los vouiquis, se vos plét empleyéd [//translatewiki.net/ translatewiki.net], lo projèt de localisacion de MediaWiki.',
+'editinginterface' => "'''Atencion :''' vos éte aprés changiér na pâge empleyêe por fâre lo tèxto d’entèrface de la programeria.
 Los changements sè cognetront sur l’aparence de l’entèrface utilisator por los ôtros utilisators de ceti vouiqui.
-Por apondre ou ben changiér des traduccions sur tôs los vouiquis, volyéd empleyér [//translatewiki.net/ translatewiki.net], lo projèt de localisacion de MediaWiki.",
-'sqlhidden' => '(Demanda SQL cachiêye)',
-'cascadeprotected' => 'Cela pâge-que est protègiêye perce qu’el est encllua dedens {{PLURAL:$1|ceta pâge, qu’est étâye protègiêye|cetes pâges, que sont étâyes protègiêyes}} avouéc lo chouèx « protèccion en cascâda » activâ :
+Por apondre ou ben changiér des traduccions sur tôs los vouiquis, se vos plét empleyéd [//translatewiki.net/ translatewiki.net], lo projèt de localisacion de MediaWiki.",
+'sqlhidden' => '(Demanda SQL cachiêe)',
+'cascadeprotected' => 'Cela pâge-que est protègiêe, el est entrebetâye dedens {{PLURAL:$1|ceta pâge qu’est étâye protègiêe|cetes pâges que sont étâyes protègiêes}} avouéc lo chouèx « protèccion en cascâda » activâ :
 $2',
-'namespaceprotected' => "Vos avéd pas la pèrmission de changiér les pâges de l’èspâço de noms « '''$1''' ».",
-'customcssprotected' => 'Vos avéd pas la pèrmission de changiér cela pâge CSS, perce que contint la configuracion a sè d’un ôtr’utilisator.',
-'customjsprotected' => 'Vos avéd pas la pèrmission de changiér cela pâge JavaScript, perce que contint la configuracion a sè d’un ôtr’utilisator.',
-'ns-specialprotected' => 'Les pâges spèciâles pôvont pas étre changiêyes.',
+'namespaceprotected' => "Vos éd pas la pèrmission de changiér les pâges de l’èspâço de noms « '''$1''' ».",
+'customcssprotected' => 'Vos éd pas la pèrmission de changiér cela pâge CSS, contint la configuracion a sè d’un ôtr’utilisator.',
+'customjsprotected' => 'Vos éd pas la pèrmission de changiér cela pâge JavaScript, contint la configuracion a sè d’un ôtr’utilisator.',
+'ns-specialprotected' => 'Les pâges spèciâles pôvont pas étre changiêes.',
 'titleprotected' => "Cél titro est étâ protègiê a la crèacion per [[User:$1|$1]].
-La rêson balyêye est « ''$2'' ».",
+La rêson balyêe est « ''$2'' ».",
+'filereadonlyerror' => 'Empossiblo de changiér lo fichiér « $1 » perce que lo dèpôt de fichiérs « $2 » est justo en lèctura.
+
+L’administrator que l’at vèrrolyê at balyê cet’èxplicacion : « $3 ».',
+'invalidtitle-knownnamespace' => 'Titro pas justo avouéc l’èspâço de noms « $2 » et lo tèxto « $3 »',
+'invalidtitle-unknownnamespace' => 'Titro pas justo avouéc lo numerô d’èspâço de noms encognu $1 et lo tèxto « $2 »',
 'exception-nologin' => 'Pas branchiê',
+'exception-nologin-text' => 'Cela pâge cel’accion at fôta d’étre branchiê sur ceti vouiqui.',
 
 # Virus scanner
 'virus-badscanner' => "Crouye configuracion : scanor de virus encognu : ''$1''",
@@ -709,10 +719,13 @@ La rêson balyêye est « ''$2'' ».",
 'virus-unknownscanner' => 'antivirus encognu :',
 
 # Login and logout pages
-'logouttext' => "'''Ora vos éte dèbranchiê{{GENDER:||ye|(ye)}}.'''
+'logouttext' => "'''Ora vos éte dèbranchiê{{GENDER:||e|(e)}}.'''
 
 Vos pouede continuar a empleyér {{SITENAME}} de façon anonima ou ben <span class='plainlinks'>[$1 vos tornar branchiér]</span> desot lo mémo nom ou un ôtro.
-Notâd qu’y at des pâges que pôvont étre oncor fêtes vêre coment se vos érâd adés branchiê{{GENDER:||ye|(ye)}}, tant que vos èfaciéd lo cacho de voutron navigator.",
+Notâd qu’y at des pâges que pôvont étre oncor fêtes vêre coment se vos érâd adés branchiê{{GENDER:||e|(e)}}, tant que vos èfaciéd lo cacho de voutron navigator.",
+'welcomeuser' => 'Benvegnua, $1 !',
+'welcomecreation-msg' => 'Voutron compto est étâ fêt.
+Oubliâd pas de changiér voutres [[Special:Preferences|prèferences dessus {{SITENAME}}]].',
 'yourname' => 'Nom d’utilisator :',
 'yourpassword' => 'Contresegno :',
 'yourpasswordagain' => 'Confirmâd lo contresegno :',
@@ -729,132 +742,133 @@ Notâd qu’y at des pâges que pôvont étre oncor fêtes vêre coment se vos 
 'logout' => 'Sè dèbranchiér',
 'userlogout' => 'Dèbranchement',
 'notloggedin' => 'Pas branchiê',
-'nologin' => "Vos avéd p’oncor un compto ? '''$1.'''",
+'nologin' => "Vos éd p’oncor un compto ? '''$1.'''",
 'nologinlink' => 'Féte un compto',
 'createaccount' => 'Fâre un compto',
-'gotaccount' => "Vos avéd ja un compto ? '''$1.'''",
+'gotaccount' => "Vos éd ja un compto ? '''$1.'''",
 'gotaccountlink' => 'Branchiéd-vos',
 'userlogin-resetlink' => 'Vos éd oubliâ voutros dètalys de branchement ?',
-'createaccountmail' => 'per mèssageria èlèctronica',
+'createaccountmail' => 'Empleyér un contresegno temporèro fêt per hasârd et pués lo mandar a l’adrèce èlèctronica spècifiâye ce-desot',
 'createaccountreason' => 'Rêson :',
 'badretype' => 'Los contresegnos que vos éd buchiês sont pas pariérs.',
 'userexists' => 'Lo nom d’utilisator buchiê est ja empleyê.
-Nen volyéd chouèsir un ôtro.',
+Se vos plét, chouèsésséd-nen un ôtro.',
 'loginerror' => 'Fôta de branchement',
 'createaccounterror' => 'Empossiblo de fâre lo compto : $1',
-'nocookiesnew' => "Lo compto utilisator est étâ fêt, mas vos éte pas branchiê{{GENDER:||ye|(ye)}}.
-{{SITENAME}} empleye des tèmouens (''cookies'') por lo branchement mas vos los éd dèsactivâs.
-Los volyéd activar et pués vos tornar branchiér avouéc lo mémo nom et lo mémo contresegno.",
-'nocookieslogin' => "{{SITENAME}} empleye des tèmouens (''cookies'') por lo branchement mas vos los éd dèsactivâs.
-Los volyéd activar et pués tornar èprovar.",
-'nocookiesfornew' => "Lo compto utilisator est pas étâ fêt, perce que nos ens pas possu confirmar la sina sôrsa.
+'nocookiesnew' => "Lo compto utilisator est étâ fêt, mas vos éte pas branchiê{{GENDER:||e|(e)}}.
+{{SITENAME}} emplèye des tèmouens (''cookies'') por lo branchement mas vos los éd dèsactivâs.
+Se vos plét, activâd-los et pués tornâd-vos branchiér avouéc lo mémo nom et lo mémo contresegno.",
+'nocookieslogin' => "{{SITENAME}} emplèye des tèmouens (''cookies'') por lo branchement mas vos los éd dèsactivâs.
+Se vos plét, activâd-los et pués tornâd èprovar.",
+'nocookiesfornew' => "Lo compto utilisator est pas étâ fêt, nos ens pas possu confirmar la sina sôrsa.
 Controlâd que vos éd activâ los tèmouens (''cookies''), rechargiéd la pâge et pués tornâd èprovar.",
-'noname' => 'Vos éd pas buchiê un nom d’utilisator valido.',
+'noname' => 'Vos éd pas spècifiâ un nom d’utilisator justo.',
 'loginsuccesstitle' => 'Branchement reussi',
-'loginsuccess' => "'''Ora vos éte branchiê{{GENDER:||ye|(ye)}} a {{SITENAME}} coment « $1 ».'''",
+'loginsuccess' => "'''Ora vos éte branchiê{{GENDER:||e|(e)}} a {{SITENAME}} por « $1 ».'''",
 'nosuchuser' => 'L’utilisator « $1 » ègziste pas.
 Los noms d’utilisator sont sensiblos a la câssa.
 Controlâd l’ortografia ou ben [[Special:UserLogin/signup|féte un compto novél]].',
-'nosuchusershort' => 'Y at gins d’utilisator avouéc lo nom « $1 ».
-Volyéd controlar l’ortografia.',
-'nouserspecified' => 'Vos dête buchiér un nom d’utilisator.',
+'nosuchusershort' => 'Y at pas un utilisator avouéc lo nom « $1 ».
+Se vos plét, controlâd l’ortografia.',
+'nouserspecified' => 'Vos dête spècifiar un nom d’utilisator.',
 'login-userblocked' => 'Cet’utilisator est blocâ. Branchement pas ôtorisâ.',
-'wrongpassword' => 'Lo contresegno est fôx.
-Volyéd tornar èprovar.',
+'wrongpassword' => 'Lo contresegno buchiê est fôx.
+Se vos plét, tornâd èprovar.',
 'wrongpasswordempty' => 'Vos éd pas buchiê de contresegno.
-Volyéd tornar èprovar.',
-'passwordtooshort' => 'Voutron contresegno dêt contegnir u muens $1 caractèro{{PLURAL:$1||s}}.',
+Se vos plét, tornâd èprovar.',
+'passwordtooshort' => 'Voutron contresegno dêt contegnir por lo muens $1 caractèro{{PLURAL:$1||s}}.',
 'password-name-match' => 'Voutron contresegno dêt étre difèrent de voutron nom d’utilisator.',
 'password-login-forbidden' => 'L’usâjo de cél nom d’utilisator et de cél contresegno est étâ dèfendu.',
 'mailmypassword' => 'Recêvre un contresegno novél per mèssageria èlèctronica',
 'passwordremindertitle' => 'Contresegno temporèro novél por {{SITENAME}}',
-'passwordremindertext' => 'Quârqu’un (probâblament vos, dês l’adrèce IP $1) at demandâ un contresegno
+'passwordremindertext' => 'Yon (probâblament vos, dês l’adrèce IP $1) at demandâ un contresegno
 novél por {{SITENAME}} ($4). Un contresegno temporèro est étâ fêt por
-l’utilisator « $2 » et est « $3 ». S’o ére voutra entencion, vos vos devréd
+l’utilisator « $2 » et il est « $3 ». S’o ére voutra entencion, vos vos devréd
 branchiér et pués chouèsir un contresegno novél.
-Voutron contresegno temporèro èxpirerat dens {{PLURAL:$5|yon jorn|$5 jorns}}.
+Voutron contresegno temporèro èxpirerat dens {{PLURAL:$5|un jorn|$5 jorns}}.
 
 Se cela demanda vint pas de vos ou ben que vos vos éte rapelâ
 de voutron contresegno et que vos souhètâd pas més lo changiér, vos
 pouede ignorar ceti mèssâjo et continuar a empleyér voutron viely contresegno.',
-'noemail' => 'Nionadrèce èlèctronica est étâye encartâye por l’utilisator « $1 ».',
-'noemailcreate' => 'Vos dête balyér n’adrèce èlèctronica valida',
+'noemail' => 'Nionadrèce èlèctronica est étâye encartâye por l’utilisator « $1 ».',
+'noemailcreate' => 'Vos dête balyér n’adrèce èlèctronica justa',
 'passwordsent' => 'Un contresegno novél est étâ mandâ a l’adrèce èlèctronica de l’utilisator « $1 ».
-Vos volyéd tornar branchiér aprés l’avêr reçu.',
+Se vos plét, tornâd-vos branchiér aprés l’avêr reçu.',
 'blocked-mailpassword' => 'Voutron adrèce IP est blocâye en ècritura, la fonccion de sovegnence du contresegno est vêr dèsactivâye por èvitar los abus.',
 'eauthentsent' => 'Un mèssâjo de confirmacion est étâ mandâ a l’adrèce èlèctronica endicâye.
 Devant qu’un ôtro mèssâjo seye mandâ a ceti compto, vos devréd siuvre les enstruccions du mèssâjo et pués confirmar que lo compto est franc lo voutro.',
 'throttled-mailpassword' => 'Un mèssâjo de sovegnence de voutron contresegno est ja étâ mandâ pendent {{PLURAL:$1|l’hora passâye|les $1 hores passâyes}}.
-Por èvitar los abus, solament yon mèssâjo de sovegnence serat mandâ per {{PLURAL:$1|hora|entèrvalo de $1 hores}}.',
+Por èvitar los abus, ren que yon serat mandâ per {{PLURAL:$1|hora|entèrvalo de $1 hores}}.',
 'mailerror' => 'Fôta pendent l’èxpèdicion du mèssâjo : $1',
-'acct_creation_throttle_hit' => 'Quârqu’un qu’empleye voutron adrèce IP at fêt {{PLURAL:$1|yon compto|$1 comptos}} pendent les 24 hores passâyes, cen qu’est la limita ôtorisâye dens ceti temps.
+'acct_creation_throttle_hit' => 'Yon qu’emplèye voutron adrèce IP at fêt {{PLURAL:$1|un compto|$1 comptos}} pendent les 24 hores passâyes, cen qu’est la limita ôtorisâye dens ceti temps.
 Du côp la crèacion de compto est étâye dèsactivâye temporèrament por cel’adrèce IP.',
 'emailauthenticated' => 'Voutron adrèce èlèctronica est étâye ôtentifiâye lo $2 a $3.',
 'emailnotauthenticated' => 'Voutron adrèce èlèctronica est p’oncor ôtentifiâye.
 Nion mèssâjo serat mandâ por châcuna de cetes fonccionalitâts.',
 'noemailprefs' => 'Spècifiâd n’adrèce èlèctronica dens voutres prèferences por empleyér cetes fonccionalitâts.',
 'emailconfirmlink' => 'Confirmâd voutron adrèce èlèctronica',
-'invalidemailaddress' => 'Cet’adrèce èlèctronica pôt pas étre accèptâye perce que semble avêr un format fôx.
-Volyéd buchiér n’adrèce bien formatâye ou ben lèssiér cél champ vouedo.',
-'cannotchangeemail' => 'Les adrèces èlèctroniques des comptos pôvont pas étre changiêyes sur ceti vouiqui.',
+'invalidemailaddress' => 'Cet’adrèce èlèctronica pôt pas étre accèptâye, semble avêr un format pas justo.
+Se vos plét, buchiéd n’adrèce bien formatâye ou ben lèssiéd cél champ vouedo.',
+'cannotchangeemail' => 'Les adrèces èlèctroniques des comptos pôvont pas étre changiêes sur ceti vouiqui.',
 'emaildisabled' => 'Ceti seto pôt pas mandar des mèssâjos.',
 'accountcreated' => 'Compto fêt',
 'accountcreatedtext' => 'Lo compto utilisator por $1 est étâ fêt.',
 'createaccount-title' => 'Crèacion d’un compto por {{SITENAME}}',
-'createaccount-text' => 'Quârqu’un at fêt un compto por voutron adrèce èlèctronica dessus {{SITENAME}} ($4) avouéc lo titro « $2 » et lo contresegno « $3 ».
+'createaccount-text' => 'Yon at fêt un compto por voutron adrèce èlèctronica dessus {{SITENAME}} ($4) apelâ « $2 », avouéc lo contresegno « $3 ».
 Vos vos devriâd branchiér et pués changiér dês ora voutron contresegno.
 
 Ignorâd ceti mèssâjo se cél compto est étâ fêt per fôta.',
 'usernamehasherror' => 'Lo nom d’utilisator pôt pas contegnir des caractèros de chaplâjo',
-'login-throttled' => 'Vos éd tentâ dèrriérement un trop grant nombro de branchements.
-Volyéd atendre devant que tornar èprovar.',
+'login-throttled' => 'Dês pou vos éd èprovâ un mouél de branchements.
+Se vos plét, atende devant que tornar èprovar.',
 'login-abort-generic' => 'Voutra tentativa de branchement at pas reussi - Anulâye',
 'loginlanguagelabel' => 'Lengoua : $1',
-'suspicious-userlogout' => 'Voutra demanda de dèbranchement est étâye refusâye perce que semble qu’el est étâye mandâye per un navigator câsso ou ben la misa en cacho d’un proxy.',
+'suspicious-userlogout' => 'Voutra demanda de dèbranchement est étâye refusâye, semble qu’el est étâye mandâye per un navigator câsso ou ben la misa en cacho d’un proxi.',
 
 # E-mail sending
 'php-mail-error-unknown' => 'Fôta encognua dens la fonccion mail() de PHP.',
-'user-mail-no-addy' => 'Tâchiê de mandar un mèssâjo sen adrèce èlèctronica.',
+'user-mail-no-addy' => 'Il at tâchiê de mandar un mèssâjo sen adrèce èlèctronica.',
+'user-mail-no-body' => 'Il at tâchiê de mandar un mèssâjo avouéc un côrp vouedo ou ben dèrêsonâblament côrt.',
 
 # Change password dialog
 'resetpass' => 'Changiér lo contresegno',
-'resetpass_announce' => 'Vos vos éte branchiê{{GENDER:||ye|(ye)}} avouéc un contresegno temporèro mandâ per mèssageria èlèctronica.
+'resetpass_announce' => 'Vos vos éte branchiê{{GENDER:||e|(e)}} avouéc un contresegno temporèro mandâ per mèssageria èlèctronica.
 Por chavonar lo branchement, vos dête buchiér un contresegno novél ique :',
 'resetpass_text' => '<!-- Apondéd lo tèxto ique -->',
 'resetpass_header' => 'Changiér lo contresegno du compto',
 'oldpassword' => 'Viely contresegno :',
 'newpassword' => 'Contresegno novél :',
 'retypenew' => 'Confirmar lo contresegno novél :',
-'resetpass_submit' => 'Changiér lo contresegno et sè branchiér',
+'resetpass_submit' => 'Changiér lo contresegno et pués sè branchiér',
 'resetpass_success' => 'Voutron contresegno est étâ changiê avouéc reusséta !
 Branchement en cors...',
 'resetpass_forbidden' => 'Los contresegnos pôvont pas étre changiês',
-'resetpass-no-info' => 'Vos dête étre branchiê por avêr accès a cela pâge.',
+'resetpass-no-info' => 'Vos dête étre branchiê por arrevar tot drêt a cela pâge.',
 'resetpass-submit-loggedin' => 'Changiér lo contresegno',
 'resetpass-submit-cancel' => 'Anular',
-'resetpass-wrong-oldpass' => 'Contresegno temporèro ou ben d’ora envalido.
+'resetpass-wrong-oldpass' => 'Contresegno temporèro ou ben d’ora pas justo.
 Pôt-étre vos éd ja changiê voutron contresegno avouéc reusséta ou ben demandâ un contresegno temporèro novél.',
 'resetpass-temp-password' => 'Contresegno temporèro :',
 
 # Special:PasswordReset
 'passwordreset' => 'Remisa a zérô du contresegno',
 'passwordreset-text' => 'Rempléd ceti formulèro por recêvre un mèssâjo de sovegnence des dètalys de voutron compto.',
-'passwordreset-legend' => 'Tornar inicialisar lo contresegno',
+'passwordreset-legend' => 'Remetre a zérô lo contresegno',
 'passwordreset-disabled' => 'La remisa a zérô des contresegnos est étâye dèsactivâye sur ceti vouiqui.',
 'passwordreset-pretext' => '{{PLURAL:$1||Buchiéd yona de les piéces de donâs ce-desot}}',
 'passwordreset-username' => 'Nom d’utilisator :',
 'passwordreset-domain' => 'Domêno :',
-'passwordreset-capture' => 'Vêre lo mèssâjo que rèsulte ?',
-'passwordreset-capture-help' => 'Se vos pouentâd cela câsa, lo mèssâjo (avouéc lo contresegno temporèro) vos serat fêt vêre quand serat mandâ a l’utilisator.',
+'passwordreset-capture' => 'Est-o que vos voléd vêre lo mèssâjo que rèsulte ?',
+'passwordreset-capture-help' => 'Se vos pouentâd cela câsa, lo mèssâjo (avouéc lo contresegno temporèro) vos serat montrâ quand serat mandâ a l’utilisator.',
 'passwordreset-email' => 'Adrèce èlèctronica :',
 'passwordreset-emailtitle' => 'Dètalys du compto dessus {{SITENAME}}',
-'passwordreset-emailtext-ip' => 'Quârqu’un (probâblament vos, dês l’adrèce IP $1) at demandâ na sovegnence des dètalys
+'passwordreset-emailtext-ip' => 'Yon (probâblament vos, dês l’adrèce IP $1) at demandâ na sovegnence des dètalys
 de voutron compto por {{SITENAME}} ($4). {{PLURAL:$3|Ceti compto utilisator est associyê|Cetos comptos utilisators sont associyês}}
 a cel’adrèce èlèctronica :
 
 $2
 
-{{PLURAL:$3|Cél contresegno temporèro èxpirerat|Celos contresegnos temporèros èxpireront}} dens {{PLURAL:$5|yon jorn|$5 jorns}}.
+{{PLURAL:$3|Cél contresegno temporèro èxpirerat|Celos contresegnos temporèros èxpireront}} dens {{PLURAL:$5|un jorn|$5 jorns}}.
 Ora vos vos dête branchiér et pués chouèsir un contresegno novél. Se cela demanda vint pas de vos
 ou ben que vos vos éte rapelâ de voutron contresegno originâl et que vos souhètâd pas més lo changiér,
 vos pouede ignorar ceti mèssâjo et continuar a empleyér voutron viely contresegno.',
@@ -864,15 +878,15 @@ a cel’adrèce èlèctronica :
 
 $2
 
-{{PLURAL:$3|Cél contresegno temporèro èxpirerat|Celos contresegnos temporèros èxpireront}} dens {{PLURAL:$5|yon jorn|$5 jorns}}.
+{{PLURAL:$3|Cél contresegno temporèro èxpirerat|Celos contresegnos temporèros èxpireront}} dens {{PLURAL:$5|un jorn|$5 jorns}}.
 Ora vos vos dête branchiér et pués chouèsir un contresegno novél. Se cela demanda vint pas de vos
 ou ben que vos vos éte rapelâ de voutron contresegno originâl et que vos souhètâd pas més lo changiér,
 vos pouede ignorar ceti mèssâjo et continuar a empleyér voutron viely contresegno.',
 'passwordreset-emailelement' => 'Nom d’utilisator : $1
 Contresegno temporèro : $2',
 'passwordreset-emailsent' => 'Un mèssâjo de sovegnence est étâ mandâ.',
-'passwordreset-emailsent-capture' => 'Un mèssâjo de sovegnence est étâ mandâ, qu’est fêt vêre ce-desot.',
-'passwordreset-emailerror-capture' => 'Un mèssâjo de sovegnence est étâ fêt, qu’est fêt vêre ce-desot, mas l’èxpèdicion a l’utilisator at pas reussi : $1',
+'passwordreset-emailsent-capture' => 'Un mèssâjo de sovegnence est étâ mandâ, qu’est montrâ ce-desot.',
+'passwordreset-emailerror-capture' => 'Un mèssâjo de sovegnence est étâ fêt, qu’est montrâ ce-desot, mas l’èxpèdicion a l’utilisator at pas reussi : $1',
 
 # Special:ChangeEmail
 'changeemail' => 'Changiér l’adrèce èlèctronica',
@@ -880,8 +894,9 @@ Contresegno temporèro : $2',
 'changeemail-text' => 'Rempléd ceti formulèro por changiér voutron adrèce èlèctronica. Vos devréd buchiér voutron contresegno por confirmar cél changement.',
 'changeemail-no-info' => 'Vos dête étre branchiê por arrevar tot drêt a cela pâge.',
 'changeemail-oldemail' => 'Adrèce èlèctronica d’ora :',
-'changeemail-newemail' => 'Novèla adrèce èlèctronica :',
-'changeemail-none' => '(niona)',
+'changeemail-newemail' => 'Novèl’adrèce èlèctronica :',
+'changeemail-none' => '(pas yona)',
+'changeemail-password' => 'Voutron contresegno dessus {{SITENAME}} :',
 'changeemail-submit' => 'Changiér l’adrèce èlèctronica',
 'changeemail-cancel' => 'Anular',
 
@@ -910,37 +925,37 @@ Contresegno temporèro : $2',
 'subject' => 'Chousa / titro :',
 'minoredit' => 'O est un petiôt changement',
 'watchthis' => 'Siuvre ceta pâge',
-'savearticle' => 'Sôvar la pâge',
-'preview' => 'Prèvisualisacion',
-'showpreview' => 'Fâre vêre na prèvisualisacion',
-'showlivepreview' => 'Apèrçu rapido',
-'showdiff' => 'Fâre vêre los changements',
-'anoneditwarning' => "'''Atencion :''' vos éte pas branchiê(ye).
+'savearticle' => 'Encartar la pâge',
+'preview' => 'Apèrçu',
+'showpreview' => 'Montrar un apèrçu',
+'showlivepreview' => 'Apèrçu drêt',
+'showdiff' => 'Montrar los changements',
+'anoneditwarning' => "'''Atencion :''' vos éte pas branchiê(e).
 Voutron adrèce IP serat encartâye dedens l’historico des changements de ceta pâge.",
-'anonpreviewwarning' => "''Vos éte pas branchiê(ye). Sôvar encarterat voutron adrèce IP dedens l’historico des changements de ceta pâge.''",
+'anonpreviewwarning' => "''Vos éte pas branchiê(e). Sôvar encarterat voutron adrèce IP dedens l’historico des changements de ceta pâge.''",
 'missingsummary' => "'''Sovegnence :''' vos éd balyê gins de rèsumâ de changement.
-Se vos tornâd clicar sur lo boton « {{int:savearticle}} », voutron changement serat sôvâ sen rèsumâ.",
-'missingcommenttext' => 'Volyéd buchiér un comentèro ce-desot.',
+Se vos tornâd clicar sur lo boton « {{int:savearticle}} », voutron changement serat encartâ sen rèsumâ.",
+'missingcommenttext' => 'Se vos plét, buchiéd un comentèro ce-desot.',
 'missingcommentheader' => "'''Sovegnence :''' vos éd balyê gins de chousa / titro a ceti comentèro.
-Se vos tornâd clicar sur lo boton « {{int:savearticle}} », voutron changement serat sôvâ sen chousa / titro.",
+Se vos tornâd clicar sur lo boton « {{int:savearticle}} », voutron changement serat encartâ sen chousa / titro.",
 'summary-preview' => 'Apèrçu du rèsumâ :',
 'subject-preview' => 'Apèrçu de la chousa / du titro :',
 'blockedtitle' => 'L’utilisator est blocâ',
-'blockedtext' => "'''Voutron nom d’utilisator ou ben voutron adrèce IP est étâ(ye) blocâ(ye).'''
+'blockedtext' => "'''Voutron nom d’utilisator voutron adrèce IP est étâ(ye) blocâ(ye).'''
 
 Lo blocâjo est étâ fêt per $1.
-La rêson balyêye est ''$2''.
+La rêson balyêe est ''$2''.
 
 * Comencement du blocâjo : $8
 * Èxpiracion du blocâjo : $6
 * Compto blocâ : $7
 
 Vos vos pouede veriér vers $1 ou ben un ôtr’[[{{MediaWiki:Grouppage-sysop}}|administrator]] por nen discutar.
-Vos pouede pas empleyér la fonccionalitât « Lui mandar un mèssâjo » a muens qu’un’adrèce èlèctronica valida est spècifiâye dens voutres [[Special:Preferences|prèferences]] et que vos éte pas étâ blocâ de l’empleyér.
-Voutron adrèce IP d’ora est $3, et lo numerô de blocâjo est $5.
-Volyéd encllure tôs los dètalys ce-dessus dedens quinta que seye demanda que vos faréd.",
-'autoblockedtext' => "Voutron adrèce IP est étâye blocâye ôtomaticament perce qu’el est étâye empleyêye per un ôtr’utilisator, lui-mémo blocâ per $1.
-La rêson balyêye est :
+Vos pouede pas empleyér la fonccionalitât « Lui mandar un mèssâjo » a muens qu’un’adrèce èlèctronica justa est spècifiâye dens voutres [[Special:Preferences|prèferences]] et que vos éte pas étâ blocâ de l’empleyér.
+Voutron adrèce IP d’ora est $3, et l’identifient de blocâjo est $5.
+Se vos plét, entrebetâd tôs los dètalys ce-dessus dedens na sé-quinta demanda que vos faréd.",
+'autoblockedtext' => "Voutron adrèce IP est étâye blocâye ôtomaticament, el est étâye empleyêe per un ôtr’utilisator, lui-mémo blocâ per $1.
+La rêson balyêe est :
 
 :''$2''
 
@@ -950,303 +965,322 @@ La rêson balyêye est :
 
 Vos vos pouede veriér vers $1 ou ben yon des ôtros [[{{MediaWiki:Grouppage-sysop}}|administrators]] por nen discutar.
 
-Notâd que vos porréd pas empleyér la fonccionalitât « Lui mandar un mèssâjo » a muens que vos avéd n’adrèce èlèctronica valida encartâye dens voutres [[Special:Preferences|prèferences]] et que vos éte pas étâ blocâ de l’empleyér.
+Notâd que vos porréd pas empleyér la fonccionalitât « Lui mandar un mèssâjo » a muens que vos éd n’adrèce èlèctronica justa encartâye dens voutres [[Special:Preferences|prèferences]] et que vos éte pas étâ blocâ de l’empleyér.
 
-Voutron adrèce IP d’ora est $3, et lo numerô de blocâjo est $5.
-Volyéd encllure tôs los dètalys ce-dessus dedens quinta que seye demanda que vos faréd.",
-'blockednoreason' => 'gins de rêson balyêye',
+Voutron adrèce IP d’ora est $3, et l’identifient de blocâjo est $5.
+Se vos plét, entrebetâd tôs los dètalys ce-dessus dedens na sé-quinta demanda que vos faréd.",
+'blockednoreason' => 'niona rêson balyêe',
 'whitelistedittext' => 'Vos vos dête $1 por povêr changiér les pâges.',
-'confirmedittext' => 'Vos dête confirmar voutra adrèce èlèctronica devant que changiér les pâges.
-Volyéd buchiér et pués validar voutra adrèce èlèctronica dens voutres [[Special:Preferences|prèferences]].',
+'confirmedittext' => 'Vos dête confirmar voutron adrèce èlèctronica devant que changiér les pâges.
+Se vos plét, buchiéd et pués validâd voutron adrèce èlèctronica dens voutres [[Special:Preferences|prèferences]].',
 'nosuchsectiontitle' => 'Empossiblo de trovar la sèccion',
-'nosuchsectiontext' => 'Vos éd tâchiê de changiér una sèccion qu’ègziste pas.
-El at pôt-étre étâ dèplaciê ou ben suprimâ dês que vos éd liesu cela pâge.',
+'nosuchsectiontext' => 'Vos éd tâchiê de changiér na sèccion qu’ègziste pas.
+Pôt-étre el est étâye dèplaciêe ou ben ôtâye dês que vos éd liesu cela pâge.',
 'loginreqtitle' => 'Branchement nècèssèro',
 'loginreqlink' => 'branchiér',
-'loginreqpagetext' => 'Vos vos dête $1 por vêre les ôtres pâges.',
+'loginreqpagetext' => 'Vos vos dête $1 por povêr vêre les ôtres pâges.',
 'accmailtitle' => 'Contresegno mandâ.',
-'accmailtext' => "Un contresegno fêt per hasârd por [[User talk:$1|$1]] at étâ mandâ a $2.
+'accmailtext' => "Un contresegno fêt per hasârd por [[User talk:$1|$1]] est étâ mandâ a $2.
 
 Lo contresegno por cél compto novél pôt étre changiê sur la pâge de ''[[Special:ChangePassword|changement de contresegno]]'' aprés s’étre branchiê.",
 'newarticle' => '(Novél)',
-'newarticletext' => "Vos éd siuvu un lim de vers una pâge qu’ègziste p’oncor.
-Por fâre cela pâge, buchiéd voutron tèxto dens la bouèta ce-desot (vêde la [[{{MediaWiki:Helppage}}|pâge d’éde]] por més d’enformacions).
-Se vos éte arrevâ ice per èrror, clicâd sur lo boton '''Devant''' de voutron navigator.",
-'anontalkpagetext' => "---- ''O est la pâge de discussion a un usanciér pas encartâ qu’at p’oncor fêt un compto ou ben que nen utilise pas.
-Por celes rêsons, nos devens utilisar son adrèce IP numerica por l’identifiar.
-Una adrèce IP pôt étre partagiê per un mouél d’usanciérs.
-Se vos éte un usanciér pas encartâ et pués se vos constatâd que des comentèros que vos regârdont pas vos ont étâ adrèciês, vos pouede [[Special:UserLogin/signup|fâre un compto]] ou ben [[Special:UserLogin|vos branchiér]] por èvitar tota confusion a vegnir avouéc d’ôtros contributors pas encartâs.''",
-'noarticletext' => 'Ora, y at gins de tèxto dens ceta pâge.
-Vos pouede [[Special:Search/{{PAGENAME}}|fâre una rechèrche sur lo titro de la pâge]] dens les ôtres pâges,
-<span class="plainlinks">[{{fullurl:{{#Special:Log}}|page={{FULLPAGENAMEE}}}} rechèrchiér dens los jornals liyês]
+'newarticletext' => "Vos éd siuvu un lim de vers na pâge qu’ègziste p’oncor.
+Por fâre cela pâge, buchiéd voutron tèxto dedens la bouèta ce-desot (vêde la [[{{MediaWiki:Helppage}}|pâge d’éde]] por més d’enformacions).
+Se vos éte arrevâ{{GENDER:||ye|(ye)}} ice per fôta, clicâd sur lo boton '''Devant''' de voutron navigator.",
+'anontalkpagetext' => "----''O est la pâge de discussion d’un utilisator anonimo qu’at p’oncor fêt un compto ou ben que nen emplèye pas.
+Por cen nos devens empleyér la sin’adrèce IP numerica por l’identifiar.
+N’adrèce IP pôt étre partagiêe per un mouél d’utilisators.
+Se vos éte {{GENDER:|un utilisator|n’utilisatrice|un utilisator}} anonim{{GENDER:|o|a|o}} et pués se vos constatâd que des comentèros que vos regârdont pas vos sont étâs adrèciês, se vos plét [[Special:UserLogin/signup|féte un compto]] ou ben [[Special:UserLogin|branchiéd-vos]] por èvitar tota confusion a vegnir avouéc d’ôtros utilisators anonimos.''",
+'noarticletext' => 'Ora y at gins de tèxto dedens cela pâge.
+Vos pouede [[Special:Search/{{PAGENAME}}|fâre na rechèrche sur cél titro]] dedens les ôtres pâges,
+<span class="plainlinks">[{{fullurl:{{#Special:Log}}|page={{FULLPAGENAMEE}}}} rechèrchiér dedens los jornals liyês]
 ou ben [{{fullurl:{{FULLPAGENAME}}|action=edit}} fâre cela pâge]</span>.',
-'noarticletext-nopermission' => 'Ora, y at gins de tèxto dens ceta pâge.
-Vos pouede [[Special:Search/{{PAGENAME}}|fâre una rechèrche sur lo titro de la pâge]] dens les ôtres pâges,
-ou ben <span class="plainlinks">[{{fullurl:{{#Special:Log}}|page={{FULLPAGENAMEE}}}} rechèrchiér dens los jornals liyês]</span>.',
-'userpage-userdoesnotexist' => 'Lo compto usanciér « $1 » est pas encartâ.
-Volyéd controlar que vos voléd fâre ou ben changiér cela pâge.',
-'userpage-userdoesnotexist-view' => 'Lo compto usanciér « $1 » est pas encartâ.',
-'blocked-notice-logextract' => 'Ceti usanciér est ora blocâ.
+'noarticletext-nopermission' => 'Ora y at gins de tèxto dedens cela pâge.
+Vos pouede [[Special:Search/{{PAGENAME}}|fâre na rechèrche sur cél titro]] dedens les ôtres pâges ou ben <span class="plainlinks">[{{fullurl:{{#Special:Log}}|page={{FULLPAGENAMEE}}}} rechèrchiér dedens los jornals liyês]</span>, mas vos éd pas la pèrmission de fâre cela pâge.',
+'missing-revision' => 'La vèrsion numerô $1 de la pâge apelâye « {{PAGENAME}} » ègziste pas.
+
+En g·ènèral cen arreve en siuvent un lim d’un historico dèpassâ de vers na pâge qu’est étâye suprimâye.
+Vos pouede trovar més de dètalys dedens lo [{{fullurl:{{#Special:Log}}/delete|page={{FULLPAGENAMEE}}}} jornal de les suprèssions].',
+'userpage-userdoesnotexist' => 'Lo compto utilisator « $1 » est pas encartâ.
+Se vos plét, controlâd que vos voléd fâre / changiér cela pâge.',
+'userpage-userdoesnotexist-view' => 'Lo compto utilisator « $1 » est pas encartâ.',
+'blocked-notice-logextract' => '{{GENDER:$1|Cél utilisator|Cel’utilisatrice|Cél utilisator}} est ora blocâ{{GENDER:$1||ye|}}.
 La dèrriére entrâ du jornal des blocâjos est disponibla ce-desot :',
 'clearyourcache' => "'''Nota :''' aprés avêr encartâ, vos devréd forciér lo rechargement complèt du cacho de voutron navigator por vêre los changements.
 * '''Firefox / Safari :''' mantegnéd la toche ''Granta Lètra'' (''Shift'') en cliquent sur lo boton ''Rechargiér'' (''Reload'') ou ben prèssâd ''Ctrl-F5'' ou ''Ctrl-R'' (''⌘-R'' sur un Mac)
 * '''Google Chrome :''' prèssâd ''Ctrl-Shift-R'' (''⌘-Shift-R'' sur un Mac)
 * '''Internet Explorer :''' mantegnéd la toche ''Ctrl'' en cliquent sur lo boton ''Rafrèchir'' (''Refresh'') ou ben prèssâd ''Ctrl-F5''
 * '''Opera :''' èfaciéd lo cacho dedens ''Outils → Prèferences''",
-'usercssyoucanpreview' => "'''Combina :''' utilisâd lo boton « {{int:showpreview}} » por èprovar voutra fôlye CSS novèla devant que la sôvar.",
-'userjsyoucanpreview' => "'''Combina :''' utilisâd lo boton « {{int:showpreview}} » por èprovar voutra fôlye JS novèla devant que la sôvar.",
-'usercsspreview' => "'''Rapelâd-vos que vos éte solament aprés prèvisualisar voutra prôpra fôlye CSS.'''
-'''El at p’oncor étâ sôvâ !'''",
-'userjspreview' => "'''Rapelâd-vos que vos éte solament aprés èprovar ou ben prèvisualisar voutron code JavaScript.'''
-'''Il at p’oncor étâ sôvâ !'''",
-'sitecsspreview' => "'''Rapelâd-vos que vos éte solament aprés prèvisualisar cela fôlye CSS.'''
-'''El at p’oncor étâ sôvâ !'''",
-'sitejspreview' => "'''Rapelâd-vos que vos éte solament aprés èprovar ou ben prèvisualisar cél code JavaScript.'''
-'''Il at p’oncor étâ sôvâ !'''",
+'usercssyoucanpreview' => "'''Combina :''' empleyéd lo boton « {{int:showpreview}} » por èprovar voutra fôlye CSS novèla devant que l’encartar.",
+'userjsyoucanpreview' => "'''Combina :''' empleyéd lo boton « {{int:showpreview}} » por èprovar voutra fôlye JS novèla devant que l’encartar.",
+'usercsspreview' => "'''Rapelâd-vos que vos éte ren qu’aprés prèvêre voutra prôpra fôlye CSS.'''
+'''El est p’oncor étâye encartâye !'''",
+'userjspreview' => "'''Rapelâd-vos que vos éte ren qu’aprés èprovar / prèvêre voutron code JavaScript.'''
+'''Il est p’oncor étâ encartâ !'''",
+'sitecsspreview' => "'''Rapelâd-vos que vos éte ren qu’aprés prèvêre cela fôlye CSS.'''
+'''El est p’oncor étâye encartâye !'''",
+'sitejspreview' => "'''Rapelâd-vos que vos éte ren qu’aprés prèvêre cél code JavaScript.'''
+'''Il est p’oncor étâ encartâ !'''",
 'userinvalidcssjstitle' => "'''Atencion :''' ègziste gins d’habelyâjo « $1 ».
-Rapelâd-vos que les pâges a sè avouéc èxtensions .css et .js utilisont des titros en petiôtes lètres, per ègzemplo {{ns:user}}:Foo/vector.css et pas {{ns:user}}:Foo/Vector.css.",
+Rapelâd-vos que les pâges a sè avouéc èxtensions .css et .js emplèyont des titros en petiôtes lètres, per ègzemplo {{ns:user}}:Foo/vector.css et pas {{ns:user}}:Foo/Vector.css.",
 'updated' => '(Betâ a jorn)',
 'note' => "'''Nota :'''",
-'previewnote' => "'''Rapelâd-vos qu’o est ren qu’una prèvisualisacion.'''
-Voutros changements ont p’oncor étâ sôvâ !",
-'continue-editing' => 'Continuar lo changement',
-'previewconflict' => 'Ceta prèvisualisacion montre lo tèxto de la bouèta d’èdicion de d’amont coment aparètrat se vos chouèsésséd de lo sôvar.',
-'session_fail_preview' => "'''Dèsolâ ! Nos povens pas encartar voutron changement a côsa d’una pèrta d’enformacions en rapôrt avouéc voutra sèance.'''
-Volyéd tornar èprovar.
-Se cen tôrne pas reussir, vos volyéd [[Special:UserLogout|dèbranchiér]], et pués vos tornar branchiér.",
-'session_fail_preview_html' => "'''Dèsolâ ! Nos povens pas encartar voutron changement a côsa d’una pèrta d’enformacions en rapôrt avouéc voutra sèance.'''
-
-''Perce que {{SITENAME}} at activâ l’HTML bruto, la prèvisualisacion at étâ cachiê por prèvegnir les ataques per JavaScript.''
-
-'''Se la tentativa de changement ére lèg·itima, volyéd tornar èprovar.'''
-Se cen tôrne pas reussir, vos volyéd [[Special:UserLogout|dèbranchiér]], et pués vos tornar branchiér.",
-'token_suffix_mismatch' => "'''Voutron changement at pas étâ accèptâ perce que voutron navigator at mècllâ los caractèros de ponctuacion dens lo numerô de changement.'''
-Lo changement at étâ refusâ por empachiér la corrupcion du tèxto de la pâge.
-Ceti problèmo arreve quand vos utilisâd un sèrvor mandatèro (''proxy'') anonimo qu’est pas de sûr.",
-'edit_form_incomplete' => "'''Quârques parties du formulèro de changement ont pas avengiês lo sèrvor ; controlâd que voutros changements sont entiérs et pués tornâd èprovar.'''",
+'previewnote' => "'''Rapelâd-vos qu’o est ren qu’un apèrçu.'''
+Voutros changements sont p’oncor étâs encartâs !",
+'continue-editing' => 'Alar vers la zona de changement',
+'previewconflict' => 'Cet’apèrçu fât vêre lo tèxto de la zona de changement de d’amont coment aparêtrat se vos chouèsésséd de l’encartar.',
+'session_fail_preview' => "'''Dèconsolâ ! Nos povens pas encartar voutron changement a côsa d’una pèrta d’enformacions sur voutra sèance.'''
+Se vos plét, tornâd èprovar.
+Se cen tôrne pas reussir, [[Special:UserLogout|dèbranchiéd-vos]] et pués tornâd-vos branchiér.",
+'session_fail_preview_html' => "'''Dèconsolâ ! Nos povens pas encartar voutron changement a côsa d’una pèrta d’enformacions sur voutra sèance.'''
+
+''Perce que {{SITENAME}} at activâ l’HTML bruto, l’apèrçu est étâ cachiê por prèvegnir les ataques per JavaScript.''
+
+'''Se la tentativa de changement ére lèg·itima, se vos plét tornâd èprovar.'''
+Se cen tôrne pas reussir, [[Special:UserLogout|dèbranchiéd-vos]] et pués tornâd-vos branchiér.",
+'token_suffix_mismatch' => "'''Voutron changement est pas étâ accèptâ, voutron cliant at mècllâ los caractèros de ponctuacion dedens lo jeton de changement.'''
+Lo changement est étâ refusâ por empachiér la corrupcion du tèxto de la pâge.
+Des côps ceti problèmo arreve quand vos empleyéd un sèrviço de proxi Vouèbe anonimo qu’est pas de sûr.",
+'edit_form_incomplete' => "'''Quârques parties du formulèro de changement ont pas avengiê lo sèrvior ; controlâd que voutros changements sont entiérs et pués tornâd èprovar.'''",
 'editing' => 'Changement de $1',
 'creating' => 'Crèacion de $1',
 'editingsection' => 'Changement de $1 (sèccion)',
 'editingcomment' => 'Changement de $1 (novèla sèccion)',
 'editconflict' => 'Conflit de changement : $1',
-'explainconflict' => "Ceta pâge at étâ sôvâ aprés que vos vos éte betâ a la changiér.
-La bouèta d’èdicion de d’amont contint lo tèxto coment il est encartâ ora dens la bâsa de balyês.
-Voutros changements aparèssont dens la bouèta d’èdicion de desot.
-Vos voléd devêr fusionar voutros changements dens lo tèxto ègzistent.
-'''Solament''' lo tèxto de la bouèta de d’amont serat sôvâ quand vos cliqueréd dessus « {{int:savearticle}} ».",
+'explainconflict' => "Un ôtro at changiê ceta pâge aprés que vos vos seyâd betâ a la changiér.
+La zona de changement de d’amont contint lo tèxto de la pâge coment ègziste orendrêt.
+Voutros changements aparèssont dedens la zona de changement de desot.
+Vos voléd devêr fusionar voutros changements dedens lo tèxto ègzistent.
+'''Solament''' lo tèxto de la zona de changement de d’amont serat encartâ se vos clicâd dessus « {{int:savearticle}} ».",
 'yourtext' => 'Voutron tèxto',
-'storedversion' => 'Vèrsion encartâ',
-'nonunicodebrowser' => "'''ATENCION : voutron navigator recognêt pas l’Unicode.'''
-Una solucion de rechanjo at étâ trovâ por vos pèrmetre de changiér en tota suretât una pâge : los caractèros nan-ASCII aparètront dens voutra bouèta d’èdicion coment codes hèxadècimâls.
-Vos devriâd utilisar un navigator ples novél.",
-'editingold' => "'''ATENCION : vos éte aprés changiér una vielye vèrsion de cela pâge.'''
-Se vos la sôvâd, tôs los changements fêts dês ceta vèrsion seront pèrdues.",
+'storedversion' => 'Vèrsion encartâye',
+'nonunicodebrowser' => "'''Atencion : voutron navigator recognêt pas l’Unicode.'''
+Na solucion de rechanjo est étâye trovâye por vos pèrmetre de changiér en tota suretât na pâge : los caractèros nan-ASCII aparêtront dedens la zona de changement por codes hègzadècimâls.",
+'editingold' => "'''Atencion : vos éte aprés changiér na vèrsion dèpassâye de cela pâge.'''
+Se vos l’encartâd, tôs los changements fêts dês ceta vèrsion seront pèrdus.",
 'yourdiff' => 'Difèrences',
-'copyrightwarning' => "Volyéd notar que totes les contribucions a {{SITENAME}} sont considèrâs coment publeyês desot los tèrmos de la $2 (vêde $1 por més de dètalys).
-Se vos voléd pas que voutros ècrits seyont changiês sen gins de rèstriccion et pués rebalyês a volontât, adonc los volyéd pas sometre ique.<br />
-Vos nos assurâd asse-ben que vos éd cen ècrit vos-mémo, ou ben que vos l’éd copiyê d’una sôrsa que vint du domêno publico, ou ben d’una ressôrsa libra.
-'''Utilisâd gins d’ôvra desot drêt d’ôtor sen pèrmission èxprèssa !'''",
-'copyrightwarning2' => "Volyéd notar que totes les contribucions a {{SITENAME}} pôvont étre changiês ou ben enlevâs per d’ôtros usanciérs.
-Se vos voléd pas que voutros ècrits seyont changiês sen gins de rèstriccion, adonc los volyéd pas sometre ique.<br />
-Vos nos assurâd asse-ben que vos éd cen ècrit vos-mémo, ou ben que vos l’éd copiyê d’una sôrsa que vint du domêno publico, ou ben d’una ressôrsa libra (vêde $1 por més de dètalys).
-'''Utilisâd gins d’ôvra desot drêt d’ôtor sen pèrmission èxprèssa !'''",
-'longpageerror' => "'''ÈRROR : lo tèxto que vos éd somês fât {{PLURAL:$1|yon Kio|$1 Kio}}, cen que dèpâsse la limita fixâ a {{PLURAL:$2|yon Kio|$2 Kio}}.'''
-Lo tèxto pôt pas étre sôvâ.",
-'readonlywarning' => "'''Atencion : la bâsa de balyês at étâ vèrrolyê por mantegnence, vos porréd vêr pas sôvar voutros changements d’abôrd.'''
-Vos pouede copiyér lo tèxto dens un fichiér tèxto et pués lo sôvar por ples târd.
-
-L’administrator qu’at vèrrolyê la bâsa de balyês at balyê ceta èxplicacion : $1",
-'protectedpagewarning' => "'''ATENCION : ceta pâge at étâ protègiê de façon que solament los usanciérs qu’ont lo statut d’administrator la pouessont changiér.'''
-La dèrriére entrâ du jornal est montrâ ce-desot coment refèrence :",
-'semiprotectedpagewarning' => "'''Nota :''' ceta pâge at étâ protègiê de façon que solament los usanciérs encartâs la pouessont changiér.
-La dèrriére entrâ du jornal est montrâ ce-desot coment refèrence :",
-'cascadeprotectedwarning' => "'''ATENCION :''' ceta pâge at étâ protègiê de façon que solament los usanciérs qu’ont lo statut d’administrator la pouessont changiér.
-Cela protèccion at étâ fêta perce que ceta pâge est encllua dens {{PLURAL:$1|ceta pâge protègiê|cetes pâges protègiês}} avouéc la « protèccion en cascâda » activâ :",
-'titleprotectedwarning' => "'''ATENCION : ceta pâge at étâ protègiê de façon que des [[Special:ListGroupRights|drêts spèceficos]] sont nècèssèros por la povêr fâre.'''
-La dèrriére entrâ du jornal est montrâ ce-desot coment refèrence :",
-'templatesused' => '{{PLURAL:$1|Modèlo utilisâ|Modèlos utilisâs}} per ceta pâge :',
-'templatesusedpreview' => '{{PLURAL:$1|Modèlo utilisâ|Modèlos utilisâs}} dens ceta prèvisualisacion :',
-'templatesusedsection' => '{{PLURAL:$1|Modèlo utilisâ|Modèlos utilisâs}} dens ceta sèccion :',
+'copyrightwarning' => "Se vos plét, notâd que totes les contribucions a {{SITENAME}} sont considèrâyes coment publeyêes desot los tèrmos de la $2 (vêde $1 por més de dètalys).
+Se vos voléd pas que voutros ècrits seyont changiês sen pouent de rèstriccion et pués rebalyês a volontât, adonc mandâd-los pas ique.<br />
+Vos nos assurâd asse-ben que vos éd cen ècrit vos-mémo ou ben que vos l’éd copiyê d’una sôrsa que vint du domêno publico ou d’un’ôtra ressôrsa libra.
+'''Empleyéd gins d’ôvra desot drêt d’ôtor sen pèrmission èxprèssa !'''",
+'copyrightwarning2' => "Se vos plét, notâd que totes les contribucions a {{SITENAME}} pôvont étre changiêes ou ben enlevâyes per d’ôtros contributors.
+Se vos voléd pas que voutros ècrits seyont changiês sen pouent de rèstriccion, adonc mandâd-los pas ique.<br />
+Vos nos assurâd asse-ben que vos éd cen ècrit vos-mémo ou ben que vos l’éd copiyê d’una sôrsa que vint du domêno publico ou d’un’ôtra ressôrsa libra (vêde $1 por més de dètalys).
+'''Empleyéd gins d’ôvra desot drêt d’ôtor sen pèrmission èxprèssa !'''",
+'longpageerror' => "'''Fôta : lo tèxto que vos éd mandâ fât {{PLURAL:$1|un Kio|$1 Kio}}, cen que dèpâsse la limita fixâye a {{PLURAL:$2|un Kio|$2 Kio}}.'''
+Pôt pas étre encartâ.",
+'readonlywarning' => "'''Atencion : la bâsa de donâs est étâye vèrrolyêe por mantegnence, vos porréd vêr pas encartar voutros changements d’abôrd.'''
+Vos pouede copiyér et côlar voutron tèxto dedens un fichiér tèxto et pués l’encartar por ples târd.
+
+L’administrator qu’at vèrrolyê la bâsa de donâs at balyê cet’èxplicacion : $1",
+'protectedpagewarning' => "'''Atencion : ceta pâge est étâye protègiêe de façon que solament los utilisators qu’ont lo statut d’administrator la pouessont changiér.'''
+Por refèrence, la dèrriére entrâ du jornal est balyêe ce-desot :",
+'semiprotectedpagewarning' => "'''Nota :''' ceta pâge est étâye protègiêe de façon que solament los utilisators encartâs la pouessont changiér.
+Por refèrence, la dèrriére entrâ du jornal est balyêe ce-desot :",
+'cascadeprotectedwarning' => "'''Atencion :''' cela pâge-que est étâye protègiêe de façon que solament los utilisators qu’ont lo statut d’administrator la pouessont changiér, perce qu’el est entrebetâye dedens {{PLURAL:$1|ceta pâge protègiêe|cetes pâges protègiêes}} avouéc la « protèccion en cascâda » activâye :",
+'titleprotectedwarning' => "'''Atencion : ceta pâge est étâye protègiêe de façon que des [[Special:ListGroupRights|drêts spècificos]] sont nècèssèros por la povêr fâre.'''
+Por refèrence, la dèrriére entrâ du jornal est balyêe ce-desot :",
+'templatesused' => '{{PLURAL:$1|Modèlo empleyê|Modèlos empleyês}} per ceta pâge :',
+'templatesusedpreview' => '{{PLURAL:$1|Modèlo empleyê|Modèlos empleyês}} dedens cet’apèrçu :',
+'templatesusedsection' => '{{PLURAL:$1|Modèlo empleyê|Modèlos empleyês}} dedens ceta sèccion :',
 'template-protected' => '(protègiê)',
 'template-semiprotected' => '(mié-protègiê)',
-'hiddencategories' => '{{PLURAL:$1|Catègorie cachiê|Catègories cachiês}} que ceta pâge est avouéc :',
+'hiddencategories' => '{{PLURAL:$1|Catègorie cachiêe|Catègories cachiêes}} que ceta pâge est avouéc :',
 'edittools' => '<!-- Tot tèxto buchiê ique serat montrâ desot les bouètes d’èdicion ou ben los formulèros de tèlèchargement de fichiér. -->',
-'nocreatetitle' => 'Crèacion de pâge limitâ',
 'nocreatetext' => '{{SITENAME}} at rètrent la possibilitât de fâre de pâges novèles.
-Vos pouede tornar arriér et pués changiér una pâge ègzistenta, ou ben vos [[Special:UserLogin|branchiér ou fâre un compto]].',
-'nocreate-loggedin' => 'Vos avéd pas la pèrmission de fâre de pâges novèles.',
+Vos pouede tornar arriér et pués changiér na pâge ègzistenta ou ben [[Special:UserLogin|vos branchiér ou fâre un compto]].',
+'nocreate-loggedin' => 'Vos éd pas la pèrmission de fâre de pâges novèles.',
 'sectioneditnotsupported-title' => 'Changement de sèccion pas recognu',
 'sectioneditnotsupported-text' => 'Lo changement d’una sèccion est pas recognu dens cela pâge.',
-'permissionserrors' => 'Èrror de pèrmissions',
-'permissionserrorstext' => 'Vos avéd pas la pèrmission de fâre l’opèracion demandâ por {{PLURAL:$1|ceta rêson|cetes rêsons}} :',
-'permissionserrorstext-withaction' => 'Vos éte pas ôtorisâ a $2, por {{PLURAL:$1|ceta rêson|cetes rêsons}} :',
-'recreate-moveddeleted-warn' => "'''Atencion : vos éte aprés refâre una pâge qu’at étâ suprimâ dês devant.'''
+'permissionserrors' => 'Fôta de pèrmissions',
+'permissionserrorstext' => 'Vos éd pas la pèrmission de fâre l’accion demandâye por {{PLURAL:$1|ceta rêson|cetes rêsons}} :',
+'permissionserrorstext-withaction' => 'Vos éd pas la pèrmission de $2 por {{PLURAL:$1|ceta rêson|cetes rêsons}} :',
+'recreate-moveddeleted-warn' => "'''Atencion : vos éte aprés refâre na pâge qu’est étâye suprimâye dês devant.'''
 
 Demandâd-vos se fôt franc continuar son changement.
-Los jornals de les suprèssions et des changements de nom de cela pâge sont montrâs ce-desot :",
-'moveddeleted-notice' => 'Ceta pâge at étâ suprimâ.
-Los jornals de les suprèssions et des changements de nom sont montrâs ce-desot coment refèrence.',
+Por comoditât, lo jornal de les suprèssions et des dèplacements de cela pâge est balyê ce-desot :",
+'moveddeleted-notice' => 'Ceta pâge est étâye suprimâye.
+Por refèrence, lo jornal de les suprèssions et des dèplacements de cela pâge est balyê ce-desot.',
 'log-fulllog' => 'Vêre lo jornal complèt',
-'edit-hook-aborted' => 'Falyita du changement per una èxtension.
-Gins de rêson balyê.',
-'edit-gone-missing' => 'La pâge at pas possu étre betâ a jorn.
-Semble qu’el èye étâ suprimâ.',
+'edit-hook-aborted' => 'Changement anulâ per un grèfon.
+Nion’èxplicacion est étâye balyêe.',
+'edit-gone-missing' => 'Empossiblo de betar a jorn la pâge.
+Semble que seye étâye suprimâye.',
 'edit-conflict' => 'Conflit de changement.',
-'edit-no-change' => 'Voutron changement at étâ ignorâ perce que nion changement at étâ fêt u tèxto.',
-'edit-already-exists' => 'La pâge novèla at pas possu étre fêta.
+'edit-no-change' => 'Voutron changement est étâ ignorâ, nion changement est étâ fêt u tèxto.',
+'edit-already-exists' => 'Empossiblo de fâre na pâge novèla.
 Ègziste ja.',
 'defaultmessagetext' => 'Mèssâjo per dèfôt',
+'content-failed-to-parse' => 'Falyita de l’analisa du contegnu de $2 por lo modèlo $1 : $3',
+'invalid-content-data' => 'Donâs du contegnu pas justes',
+'content-not-allowed-here' => 'Lo contegnu « $1 » est pas ôtorisâ sur la pâge [[$2]]',
+
+# Content models
+'content-model-wikitext' => 'vouiquitèxto',
+'content-model-text' => 'tèxto bruto',
+'content-model-javascript' => 'JavaScript',
+'content-model-css' => 'CSS',
 
 # Parser/template warnings
-'expensive-parserfunction-warning' => 'Atencion : ceta pâge contint trop d’apèls que revegnont chiers de fonccions du parsor.
-
-Y devrêt avêr muens de $2 apèl{{PLURAL:$2||s}}, pendent qu’y en at ora $1.',
-'expensive-parserfunction-category' => 'Pâges avouéc trop d’apèls que revegnont chiers de fonccions du parsor',
-'post-expand-template-inclusion-warning' => 'Atencion : ceta pâge contint trop d’encllusions de modèlos.
-Quârques encllusions seront pas fêtes.',
-'post-expand-template-inclusion-category' => 'Pâges que contegnont trop d’encllusions de modèlos',
-'post-expand-template-argument-warning' => 'Atencion : ceta pâge contint u muens yon paramètre de modèlo que l’encllusion est rendua empossibla.
-Aprés èxtension, ceti arêt balyê un rèsultat trop long, il at vêr pas étâ encllu.',
-'post-expand-template-argument-category' => 'Pâges que contegnont u muens yon paramètre de modèlo pas encllu',
+'expensive-parserfunction-warning' => "'''Atencion :''' cela pâge contint trop d’apèls a des fonccions du parsor que revegnont chieres.
+
+Y devrêt avêr muens de $2 apèl{{PLURAL:$2||s}}, pendent qu’y en at ora $1.",
+'expensive-parserfunction-category' => 'Pâges avouéc trop d’apèls a des fonccions du parsor que revegnont chieres',
+'post-expand-template-inclusion-warning' => "'''Atencion :''' la talye des modèlos entrebetâs est trop grôssa.
+Quârques modèlos seront pas entrebetâs.",
+'post-expand-template-inclusion-category' => 'Pâges yô que la talye des modèlos entrebetâs est dèpassâye',
+'post-expand-template-argument-warning' => "'''Atencion :''' cela pâge contint por lo muens un argument de modèlo qu’at na talye d’èxpension trop grôssa.
+Celos arguments sont pas étâs betâs.",
+'post-expand-template-argument-category' => 'Pâges que contegnont des arguments de modèlo pas betâs',
 'parser-template-loop-warning' => 'Modèlo en boclla dècelâ : [[$1]]',
-'parser-template-recursion-depth-warning' => 'Limita de provondior des apèls de modèlos dèpassâ ($1)',
-'language-converter-depth-warning' => 'Limita de provondior du convèrtissor de lengoua dèpassâ ($1)',
+'parser-template-recursion-depth-warning' => 'Limita de provondior des apèls de modèlos dèpassâye ($1)',
+'language-converter-depth-warning' => 'Limita de provondior du convèrtissor de lengoua dèpassâye ($1)',
+'node-count-exceeded-category' => 'Pâges yô que lo nombro de nuods est dèpassâ',
+'node-count-exceeded-warning' => 'Pâge que dèpâsse lo nombro de nuods',
+'expansion-depth-exceeded-category' => 'Pâges yô que la provondior d’èxpension est dèpassâye',
+'expansion-depth-exceeded-warning' => 'Pâge que dèpâsse la provondior d’èxpension',
+'parser-unstrip-loop-warning' => 'Boclla pas dèmontâbla dècelâye',
+'parser-unstrip-recursion-limit' => 'Limita de rècursion pas dèmontâbla dèpassâye ($1)',
+'converter-manual-rule-error' => 'Fôta dècelâye dens la règlla de convèrsion de lengoua manuèla',
 
 # "Undo" feature
-'undo-success' => 'Ceti changement vôt étre dèfêt.
-Volyéd controlar los changements ce-desot, et pués sôvar s’o est franc cen que vos voléd fâre.',
-'undo-failure' => 'Cél changement pôt pas étre dèfêt : cen rentrerêt en conflit avouéc los changements entèrmèdièros.',
-'undo-norev' => 'Lo changement at pas possu étre dèfêt perce qu’il est pas ègzistent ou ben qu’il at étâ suprimâ.',
-'undo-summary' => 'Anulacion des changements $1 a [[Special:Contributions/$2|$2]] ([[User talk:$2|Discutar]])',
+'undo-success' => 'Lo changement pôt étre dèfêt.
+Se vos plét, controlâd la comparèson ce-desot por vos assurar qu’o est franc cen que vos voléd fâre et pués encartâd los changements ce-desot por chavonar la sina dèfêta.',
+'undo-failure' => 'Lo changement at pas possu étre dèfêt a côsa d’un conflit avouéc des changements entèrmèdièros.',
+'undo-norev' => 'Lo changement at pas possu étre dèfêt perce qu’il est pas ègzistent ou ben qu’il est étâ suprimâ.',
+'undo-summary' => 'Dèfêta du changement $1 de [[Special:Contributions/$2|$2]] ([[User talk:$2|discutar]])',
 
 # Account creation failure
-'cantcreateaccounttitle' => 'Vos pouede pas fâre un compto.',
-'cantcreateaccount-text' => "La crèacion de compto dês ceta adrèce IP ('''$1''') at étâ dèfendua per [[User:$3|$3]].
+'cantcreateaccounttitle' => 'Empossiblo de fâre lo compto',
+'cantcreateaccount-text' => "La crèacion de compto dês cet’adrèce IP ('''$1''') est étâye blocâye per [[User:$3|$3]].
 
-La rêson balyê per $3 ére ''$2''.",
+La rêson balyêe per $3 ére ''$2''.",
 
 # History pages
 'viewpagelogs' => 'Vêde los jornals de ceta pâge',
 'nohistory' => 'Ègziste gins d’historico por ceta pâge.',
 'currentrev' => 'Vèrsion d’ora',
-'currentrev-asof' => 'Vèrsion d’ora en dâta du $1',
-'revisionasof' => 'Vèrsion du $1',
-'revision-info' => 'Vèrsion du $1 per $2',
-'previousrevision' => '← Vèrsion devant',
-'nextrevision' => 'Vèrsion aprés →',
-'currentrevisionlink' => 'vêde la vèrsion d’ora',
-'cur' => 'ora',
+'currentrev-asof' => 'Vèrsion d’ora du $2 a $3',
+'revisionasof' => 'Vèrsion du $2 a $3',
+'revision-info' => 'Vèrsion du $4 a $5 per $2',
+'previousrevision' => '← Vèrsion ples vielye',
+'nextrevision' => 'Vèrsion ples novèla →',
+'currentrevisionlink' => 'Vèrsion d’ora',
+'cur' => 'd’ora',
 'next' => 'aprés',
-'last' => 'dif',
-'page_first' => 'premiére',
+'last' => 'devant',
+'page_first' => 'Premiére',
 'page_last' => 'dèrriére',
-'histlegend' => "Lègenda : '''({{int:cur}})''' = difèrence avouéc la vèrsion d’ora,
-'''({{int:last}})''' = difèrence avouéc la vèrsion devant, '''{{int:minoreditletter}}''' = petiôt changement.",
-'history-fieldset-title' => 'Navegar dens l’historico',
-'history-show-deleted' => 'Solament los suprimâs',
-'histfirst' => 'Tota premiére',
-'histlast' => 'Tota dèrriére',
+'histlegend' => "Chouèx de difs : pouentâd les câses de les vèrsions a comparar et pués apoyéd dessus « Entrâ » ou ben lo boton d’avâl.<br />
+Lègenda : '''({{int:cur}})''' = difèrence avouéc la vèrsion d’ora, '''({{int:last}})''' = difèrence avouéc la vèrsion devant, '''{{int:minoreditletter}}''' = petiôt changement.",
+'history-fieldset-title' => 'Fâre dèfelar l’historico',
+'history-show-deleted' => 'Ren que les suprimâyes',
+'histfirst' => 'premiére',
+'histlast' => 'Dèrriére',
 'historysize' => '($1 octèt{{PLURAL:$1||s}})',
-'historyempty' => '(vouedo)',
+'historyempty' => '(voueda)',
 
 # Revision feed
 'history-feed-title' => 'Historico de les vèrsions',
 'history-feed-description' => 'Historico por ceta pâge sur lo vouiqui',
-'history-feed-item-nocomment' => '$1 lo $2',
-'history-feed-empty' => 'La pâge demandâ ègziste pas.
-El at pôt-étre étâ suprimâ ou ben renomâ.
+'history-feed-item-nocomment' => '$1 lo $3 a $4',
+'history-feed-empty' => 'La pâge demandâye ègziste pas.
+Pôt-étre el est étâye suprimâye du vouiqui ou ben renomâye.
 Tâchiéd de [[Special:Search|rechèrchiér sur lo vouiqui]] por trovar des pâges novèles que vont avouéc.',
 
 # Revision deletion
 'rev-deleted-comment' => '(rèsumâ de changement enlevâ)',
-'rev-deleted-user' => '(nom d’usanciér suprimâ)',
-'rev-deleted-event' => '(entrâ suprimâ)',
-'rev-deleted-user-contribs' => '[nom d’usanciér ou ben adrèce IP suprimâ - changement cachiê sur les contribucions]',
-'rev-deleted-text-permission' => "Ceta vèrsion de la pâge at étâ '''suprimâ'''.
-Y pôt avêr més de dètalys dens lo [{{fullurl:{{#Special:Log}}/delete|page={{FULLPAGENAMEE}}}} jornal de les suprèssions].",
-'rev-deleted-text-unhide' => "Ceta vèrsion de la pâge at étâ '''suprimâ'''.
-Y pôt avêr més de dètalys dens lo [{{fullurl:{{#Special:Log}}/delete|page={{FULLPAGENAMEE}}}} jornal de les suprèssions].
-Vos pouede adés [$1 vêre cela vèrsion] se vos lo voléd.",
-'rev-suppressed-text-unhide' => "Ceta vèrsion de la pâge at étâ '''suprimâ'''.
-Y pôt avêr més de dètalys dens lo [{{fullurl:{{#Special:Log}}/suppress|page={{FULLPAGENAMEE}}}} jornal de les suprèssions].
-Vos pouede adés [$1 vêre cela vèrsion] se vos lo voléd.",
-'rev-deleted-text-view' => "Ceta vèrsion de la pâge at étâ '''suprimâ'''.
-Vos la pouede vêre ; y pôt avêr més de dètalys dens lo [{{fullurl:{{#Special:Log}}/delete|page={{FULLPAGENAMEE}}}} jornal de les suprèssions].",
-'rev-suppressed-text-view' => "Ceta vèrsion de la pâge at étâ '''suprimâ'''.
-Vos la pouede vêre ; y pôt avêr més de dètalys dens lo [{{fullurl:{{#Special:Log}}/suppress|page={{FULLPAGENAMEE}}}} jornal de les suprèssions].",
-'rev-deleted-no-diff' => "Vos pouede pas vêre ceti dif perce que yona de les vèrsions at étâ '''suprimâ'''.
-Y pôt avêr més de dètalys dens lo [{{fullurl:{{#Special:Log}}/delete|page={{FULLPAGENAMEE}}}} jornal de les suprèssions].",
-'rev-suppressed-no-diff' => "Vos pouede pas vêre ceta difèrence perce que yona de les vèrsions at étâ '''suprimâ'''.",
-'rev-deleted-unhide-diff' => "Yona de les vèrsions de ceti dif at étâ '''suprimâ'''.
-Y pôt avêr més de dètalys dens lo [{{fullurl:{{#Special:Log}}/delete|page={{FULLPAGENAMEE}}}} jornal de les suprèssions].
-Vos pouede adés [$1 vêre cél dif] se vos lo voléd.",
-'rev-suppressed-unhide-diff' => "Yona de les vèrsions de ceti dif at étâ '''suprimâ'''.
-Y pôt avêr més de dètalys dens lo [{{fullurl:{{#Special:Log}}/suppress|page={{FULLPAGENAMEE}}}} jornal de les suprèssions].
-Vos pouede adés [$1 vêre cél dif] se vos lo voléd.",
-'rev-deleted-diff-view' => "Yona de les vèrsions de ceti dif at étâ '''suprimâ'''.
-Vos pouede vêre ceti dif ; y pôt avêr més de dètalys dens lo [{{fullurl:{{#Special:Log}}/delete|page={{FULLPAGENAMEE}}}} jornal de les suprèssions].",
-'rev-suppressed-diff-view' => "Yona de les vèrsions de ceti dif at étâ '''suprimâ'''.
-Vos pouede vêre ceti dif ; y pôt avêr més de dètalys dens lo [{{fullurl:{{#Special:Log}}/suppress|page={{FULLPAGENAMEE}}}} jornal de les suprèssions].",
-'rev-delundel' => 'fâre vêre / cachiér',
-'rev-showdeleted' => 'fâre vêre',
+'rev-deleted-user' => '(nom d’utilisator enlevâ)',
+'rev-deleted-event' => '(accion du jornal enlevâye)',
+'rev-deleted-user-contribs' => '[nom d’utilisator ou ben adrèce IP enlevâ(ye) - changement cachiê sur les contribucions]',
+'rev-deleted-text-permission' => "Ceta vèrsion de la pâge est étâye '''suprimâye'''.
+Y pôt avêr més de dètalys dedens lo [{{fullurl:{{#Special:Log}}/delete|page={{FULLPAGENAMEE}}}} jornal de les suprèssions].",
+'rev-deleted-text-unhide' => "Ceta vèrsion de la pâge est étâye '''suprimâye'''.
+Y pôt avêr més de dètalys dedens lo [{{fullurl:{{#Special:Log}}/delete|page={{FULLPAGENAMEE}}}} jornal de les suprèssions].
+Vos pouede adés [$1 vêre cela vèrsion] se vos o voléd.",
+'rev-suppressed-text-unhide' => "Ceta vèrsion de la pâge est étâye '''rèprimâye'''.
+Y pôt avêr més de dètalys dedens lo [{{fullurl:{{#Special:Log}}/delete|page={{FULLPAGENAMEE}}}} jornal de les rèprèssions].
+Vos pouede adés [$1 vêre cela vèrsion] se vos o voléd.",
+'rev-deleted-text-view' => "Ceta vèrsion de la pâge est étâye '''suprimâye'''.
+Vos la pouede vêre ; y pôt avêr més de dètalys dedens lo [{{fullurl:{{#Special:Log}}/delete|page={{FULLPAGENAMEE}}}} jornal de les suprèssions].",
+'rev-suppressed-text-view' => "Ceta vèrsion de la pâge est étâye '''rèprimâye'''.
+Vos la pouede vêre ; y pôt avêr més de dètalys dedens lo [{{fullurl:{{#Special:Log}}/suppress|page={{FULLPAGENAMEE}}}} jornal de les rèprèssions].",
+'rev-deleted-no-diff' => "Vos pouede pas vêre ceta dif perce que yona de les vèrsions est étâye '''suprimâye'''.
+Y pôt avêr més de dètalys dedens lo [{{fullurl:{{#Special:Log}}/delete|page={{FULLPAGENAMEE}}}} jornal de les suprèssions].",
+'rev-suppressed-no-diff' => "Vos pouede pas vêre ceta dif, yona de les vèrsions est étâye '''suprimâye'''.",
+'rev-deleted-unhide-diff' => "Yona de les vèrsions de ceta dif est étâye '''suprimâye'''.
+Y pôt avêr més de dètalys dedens lo [{{fullurl:{{#Special:Log}}/delete|page={{FULLPAGENAMEE}}}} jornal de les suprèssions].
+Vos pouede adés [$1 vêre cela dif] se vos o voléd.",
+'rev-suppressed-unhide-diff' => "Yona de les vèrsions de ceta dif est étâye '''rèprimâye'''.
+Y pôt avêr més de dètalys dedens lo [{{fullurl:{{#Special:Log}}/delete|page={{FULLPAGENAMEE}}}} jornal de les rèprèssions].
+Vos pouede adés [$1 vêre cela dif] se vos o voléd.",
+'rev-deleted-diff-view' => "Yona de les vèrsions de ceta dif est étâye '''suprimâye'''.
+Vos pouede vêre ceta dif ; y pôt avêr més de dètalys dedens lo [{{fullurl:{{#Special:Log}}/delete|page={{FULLPAGENAMEE}}}} jornal de les suprèssions].",
+'rev-suppressed-diff-view' => "Yona de les vèrsions de ceta dif est étâye '''rèprimâye'''.
+Vos pouede vêre ceta dif ; y pôt avêr més de dètalys dedens lo [{{fullurl:{{#Special:Log}}/suppress|page={{FULLPAGENAMEE}}}} jornal de les rèprèssions].",
+'rev-delundel' => 'montrar / cachiér',
+'rev-showdeleted' => 'montrar',
 'revisiondelete' => 'Suprimar / refâre des vèrsions',
-'revdelete-nooldid-title' => 'Vèrsion ciba envalida',
-'revdelete-nooldid-text' => 'Vos éd pas spècefiâ la vèrsion ciba ou ben les vèrsions cibes de cela fonccion,
-la vèrsion ciba ègziste pas, ou ben o est la vèrsion d’ora.',
-'revdelete-nologtype-title' => 'Gins de tipo de jornal spècefiâ',
-'revdelete-nologtype-text' => 'Vos éd pas spècefiâ un tipo de jornal sur loquint cela accion dêt étre rèalisâ.',
-'revdelete-nologid-title' => 'Entrâ du jornal envalida',
-'revdelete-nologid-text' => 'Ou ben vos éd pas spècefiâ una entrâ du jornal sur laquinta cela accion dêt étre rèalisâ, ou ben l’entrâ ègziste pas.',
-'revdelete-no-file' => 'Lo fichiér spècefiâ ègziste pas.',
-'revdelete-show-file-confirm' => 'Éte-vos de sûr de volêr vêre una vèrsion suprimâ du fichiér « <nowiki>$1</nowiki> » que dâte du $2 a $3 ?',
+'revdelete-nooldid-title' => 'Vèrsion ciba pas justa',
+'revdelete-nooldid-text' => 'Vos éd pas spècifiâ na vèrsion ciba (des vèrsions cibes) por fâre cela
+fonccion, la vèrsion spècifiâye ègziste pas ou ben vos tâchiéd de cachiér la vèrsion d’ora.',
+'revdelete-nologtype-title' => 'Nion tipo de jornal balyê',
+'revdelete-nologtype-text' => 'Vos éd pas spècifiâ un tipo de jornal por fâre cel’accion.',
+'revdelete-nologid-title' => 'Entrâ du jornal pas justa',
+'revdelete-nologid-text' => 'Ou ben vos éd pas spècifiâ un èvènement du jornal ciba por fâre cela fonccion ou ben l’entrâ spècifiâye ègziste pas.',
+'revdelete-no-file' => 'Lo fichiér spècifiâ ègziste pas.',
+'revdelete-show-file-confirm' => 'Est-o que vos éte de sûr de volêr vêre na vèrsion suprimâye du fichiér « <nowiki>$1</nowiki> » du $2 a $3 ?',
 'revdelete-show-file-submit' => 'Ouè',
 'revdelete-selected' => "'''{{PLURAL:$2|Vèrsion chouèsia|Vèrsions chouèsies}} de [[:$1]] :'''",
-'logdelete-selected' => "'''{{PLURAL:$1|Entrâ du jornal chouèsia|Entrâs du jornal chouèsies}} :'''",
-'revdelete-text' => "'''Les vèrsions et les entrâs suprimâs aparètront adés dens l’historico de la pâge et dens los jornals, mas lor contegnu tèxtuèl serat pas accèssiblo u publico.'''
-Los ôtros administrators de {{SITENAME}} porront tojorn arrevar u contegnu cachiê et lo refâre per cela méma entèrface, a muens que des rèstriccions de ples seyont betâs en place.",
-'revdelete-confirm' => 'Volyéd confirmar qu’o est franc cen que vos voléd fâre, que vos en compregnéd les consèquences et pués que vos féte cen en acôrd avouéc les [[{{MediaWiki:Policy-url}}|règlles de dedens]].',
-'revdelete-suppress-text' => "La suprèssion dêt étre utilisâ '''ren que''' dens cetos câs :
-* Enformacions a sè que vont pas avouéc :
-*: ''adrèce et numerô de tèlèfono, numerô de sècuritât sociâla, ...''",
-'revdelete-legend' => 'Betar en place des rèstriccions de visibilitât :',
+'logdelete-selected' => "'''{{PLURAL:$1|Èvènement du jornal chouèsi|Èvènements du jornal chouèsis}} :'''",
+'revdelete-text' => "'''Les vèrsions et los èvènements suprimâ(ye)s aparètront adés dedens l’historico de la pâge et pués dedens los jornals, mas quârques parties de lor contegnu seront inaccèssibles u publico.'''
+Los ôtros administrators de {{SITENAME}} porront tojorn arrevar u contegnu cachiê et lo refâre per cela mém’entèrface, a muens que des rèstriccions de ples seyont pas dèfenies.",
+'revdelete-confirm' => 'Se vos plét, confirmâd qu’o est franc cen que vos voléd fâre, que vos en compregnéd les consèquences et pués que vos o féte en acôrd avouéc les [[{{MediaWiki:Policy-url}}|règlles de dedens]].',
+'revdelete-suppress-text' => "La rèprèssion dêt étre empleyêe '''ren que''' dens cetos câs :
+* Enformacions que pôvont étre difamatouères
+* Enformacions a sè que vont pas avouéc
+*: ''adrèces et numerôs de tèlèfono, numerôs de sècuritât sociâla, ...''",
+'revdelete-legend' => 'Dèfenir des rèstriccions de visibilitât',
 'revdelete-hide-text' => 'Cachiér lo tèxto de la vèrsion',
 'revdelete-hide-image' => 'Cachiér lo contegnu du fichiér',
 'revdelete-hide-name' => 'Cachiér l’accion et la ciba',
-'revdelete-hide-comment' => 'Cachiér lo comentèro de changement',
-'revdelete-hide-user' => 'Cachiér lo nom ou l’adrèce IP u contributor.',
-'revdelete-hide-restricted' => 'Cachiér les balyês ux administrators et pués ux ôtros',
+'revdelete-hide-comment' => 'Cachiér lo rèsumâ de changement',
+'revdelete-hide-user' => 'Cachiér lo nom d’utilisator / l’adrèce IP du contributor',
+'revdelete-hide-restricted' => 'Rèprimar celes donâs ux administrators et pués ux ôtros',
 'revdelete-radio-same' => '(pas changiér)',
 'revdelete-radio-set' => 'Ouè',
 'revdelete-radio-unset' => 'Nan',
-'revdelete-suppress' => 'Suprimar les balyês ux administrators et pués ux ôtros',
+'revdelete-suppress' => 'Rèprimar celes donâs ux administrators et pués ux ôtros',
 'revdelete-unsuppress' => 'Enlevar les rèstriccions sur les vèrsions refêtes',
 'revdelete-log' => 'Rêson :',
 'revdelete-submit' => 'Aplicar a {{PLURAL:$1|la vèrsion chouèsia|les vèrsions chouèsies}}',
-'revdelete-success' => "'''Visibilitât de la vèrsion betâ a jorn avouéc reusséta.'''",
-'revdelete-failure' => "'''La visibilitât de la vèrsion at pas possu étre betâ a jorn :'''
+'revdelete-success' => "'''Visibilitât de la vèrsion betâye a jorn avouéc reusséta.'''",
+'revdelete-failure' => "'''La visibilitât de la vèrsion at pas possu étre betâye a jorn :'''
 $1",
 'logdelete-success' => "'''Visibilitât du jornal dèfenia avouéc reusséta.'''",
 'logdelete-failure' => "'''La visibilitât du jornal at pas possu étre dèfenia :'''
 $1",
-'revdel-restore' => 'Changiér la visibilitât',
-'revdel-restore-deleted' => 'vèrsions suprimâs',
+'revdel-restore' => 'changiér la visibilitât',
+'revdel-restore-deleted' => 'vèrsions suprimâyes',
 'revdel-restore-visible' => 'vèrsions visibles',
 'pagehist' => 'Historico de la pâge',
 'deletedhist' => 'Historico suprimâ',
-'revdelete-hide-current' => 'Èrror pendent la suprèssion de l’èlèment datâ du $1 a $2 : o est la vèrsion d’ora.
-Pôt pas étre suprimâ.',
-'revdelete-show-no-access' => 'Èrror pendent la visualisacion de l’èlèment datâ du $1 a $2 : il est marcâ coment « rètrent ».
-Vos y avéd pas accès.',
-'revdelete-modify-no-access' => 'Èrror pendent lo changement de l’èlèment datâ du $1 a $2 : il est marcâ coment « rètrent ».
-Vos y avéd pas accès.',
-'revdelete-modify-missing' => 'Èrror pendent lo changement de l’èlèment avouéc lo numerô $1 : il est manquent dens la bâsa de balyês !',
-'revdelete-no-change' => "'''Atencion :''' l’èlèment datâ du $1 a $2 at ja los paramètres de visibilitât demandâs.",
-'revdelete-concurrent-change' => 'Èrror pendent lo changement de l’èlèment datâ du $1 a $2 : son statut at étâ changiê per quârqu’un d’ôtro pendent que vos lo changiéd.
-Volyéd controlar los jornals.',
-'revdelete-only-restricted' => 'Èrror pendent la suprèssion de l’entrâ datâ du $1 a $2 : vos pouede pas suprimar celos èlèments ux administrators sen chouèsir avouéc des ôtros chouèx de suprèssion.',
-'revdelete-reason-dropdown' => '* Rêsons de suprèssion les ples corentes
+'revdelete-hide-current' => 'Fôta en cachient la piéce datâye du $1 a $2 : o est la vèrsion d’ora.
+Pôt pas étre cachiêe.',
+'revdelete-show-no-access' => 'Fôta en montrent la piéce datâye du $1 a $2 : el est marcâye coment « rètrenta ».
+Vos y éd pas accès.',
+'revdelete-modify-no-access' => 'Fôta en changient la piéce datâye du $1 a $2 : el est marcâye coment « rètrenta ».
+Vos y éd pas accès.',
+'revdelete-modify-missing' => 'Fôta en changient la piéce avouéc l’identifient $1 : el est manquenta dedens la bâsa de donâs !',
+'revdelete-no-change' => "'''Atencion :''' la piéce datâye du $1 a $2 at ja la configuracion de visibilitât demandâye.",
+'revdelete-concurrent-change' => 'Fôta en changient la piéce datâye du $1 a $2 : lo sin statut semble étre étâ changiê per un ôtro justo que vos tâchiêvâd d’o changiér.
+Se vos plét, controlâd los jornals.',
+'revdelete-only-restricted' => 'Fôta en cachient la piéce datâye du $1 a $2 : vos pouede pas rèprimar celes piéces de la vua ux administrators sen chouèsir avouéc des ôtros chouèx de visibilitât.',
+'revdelete-reason-dropdown' => '*Rêsons corentes de suprèssion
 ** Violacion du drêt d’ôtor
-** Enformacions a sè que vont pas avouéc',
+** Comentèros ou ben enformacions a sè que vont pas avouéc
+** Nom d’utilisator que vat pas avouéc
+** Enformacions que pôvont étre difamatouères',
 'revdelete-otherreason' => 'Ôtra rêson / rêson de ples :',
 'revdelete-reasonotherlist' => 'Ôtra rêson',
 'revdelete-edit-reasonlist' => 'Changiér les rêsons de suprèssion',
@@ -1254,39 +1288,39 @@ Volyéd controlar los jornals.',
 
 # Suppression log
 'suppressionlog' => 'Jornal de les suprèssions',
-'suppressionlogtext' => 'Vê-que la lista de les suprèssions et des blocâjos qu’ont de contegnu cachiê ux administrators.
-Vêde la [[Special:BlockList|lista des blocâjos]] por vêre los banissements et los blocâjos que sont ora opèracionèls.',
+'suppressionlogtext' => 'Vê-que na lista de les suprèssions et des blocâjos qu’ont de contegnu cachiê ux administrators.
+Vêde la [[Special:BlockList|lista des blocâjos]] por la lista des banissements et des blocâjos que sont ora actifs.',
 
 # History merging
 'mergehistory' => 'Fusionar los historicos de les pâges',
-'mergehistory-header' => 'Ceta pâge vos pèrmèt de fusionar des vèrsions de l’historico d’una pâge d’origina vers una pâge novèla.
-Assurâd-vos que cela opèracion consèrverat la continuitât de l’historico de la pâge.',
+'mergehistory-header' => 'Ceta pâge vos pèrmèt de fusionar des vèrsions de l’historico d’una pâge d’origina vers na pâge novèla.
+Assurâd-vos que cél changement consèrverat la continuitât de l’historico de la pâge.',
 'mergehistory-box' => 'Fusionar les vèrsions de doves pâges :',
 'mergehistory-from' => 'Pâge d’origina :',
 'mergehistory-into' => 'Pâge de dèstinacion :',
 'mergehistory-list' => 'Historico des changements que pôvont étre fusionâs',
-'mergehistory-merge' => 'Cetes vèrsions de [[:$1]] pôvont étre fusionâs dedens [[:$2]].
-Utilisâd la colona de botons de chouèx por fusionar ren que les vèrsions fêtes du comencement tant qu’a la dâta spècefiâ.
-Notâd bien que l’usâjo des lims de navigacion tornerat inicialisar cela colona.',
-'mergehistory-go' => 'Fâre vêre los changements que pôvont étre fusionâs',
+'mergehistory-merge' => 'Cetes vèrsions de [[:$1]] pôvont étre fusionâyes dedens [[:$2]].
+Empleyéd la colona de botons de chouèx por fusionar ren que les vèrsions fêtes du comencement tant qu’a la dâta spècifiâye.
+Notâd que l’usâjo des lims de navigacion remetrat a zérô cela colona.',
+'mergehistory-go' => 'Montrar los changements que pôvont étre fusionâs',
 'mergehistory-submit' => 'Fusionar les vèrsions',
-'mergehistory-empty' => 'Niona vèrsion pôt étre fusionâ.',
-'mergehistory-success' => '$3 vèrsion{{PLURAL:$3||s}} de [[:$1]] fusionâ{{PLURAL:$3||s}} avouéc reusséta dedens [[:$2]].',
-'mergehistory-fail' => 'Empossiblo de fâre la fusion des historicos. Volyéd tornar chouèsir la pâge et pués los paramètres de dâta.',
+'mergehistory-empty' => 'Niona vèrsion pôt étre fusionâye.',
+'mergehistory-success' => '$3 vèrsion{{PLURAL:$3||s}} de [[:$1]] fusionâye{{PLURAL:$3||s}} avouéc reusséta dedens [[:$2]].',
+'mergehistory-fail' => 'Empossiblo de fâre la fusion des historicos, se vos plét tornâd chouèsir la pâge et pués los paramètros de dâta.',
 'mergehistory-no-source' => 'La pâge d’origina $1 ègziste pas.',
 'mergehistory-no-destination' => 'La pâge de dèstinacion $1 ègziste pas.',
-'mergehistory-invalid-source' => 'La pâge d’origina dêt avêr un titro valido.',
-'mergehistory-invalid-destination' => 'La pâge de dèstinacion dêt avêr un titro valido.',
-'mergehistory-autocomment' => '[[:$1]] fusionâ dedens [[:$2]]',
-'mergehistory-comment' => '[[:$1]] fusionâ dedens [[:$2]] : $3',
+'mergehistory-invalid-source' => 'La pâge d’origina dêt avêr un titro justo.',
+'mergehistory-invalid-destination' => 'La pâge de dèstinacion dêt avêr un titro justo.',
+'mergehistory-autocomment' => '[[:$1]] fusionâye dedens [[:$2]]',
+'mergehistory-comment' => '[[:$1]] fusionâye dedens [[:$2]] : $3',
 'mergehistory-same-destination' => 'Les pâges d’origina et de dèstinacion pôvont pas étre la méma',
 'mergehistory-reason' => 'Rêson :',
 
 # Merge log
 'mergelog' => 'Jornal de les fusions',
-'pagemerge-logentry' => '[[$1]] fusionâ dedens [[$2]] (vèrsions tant qu’u $3)',
+'pagemerge-logentry' => '[[$1]] fusionâye dedens [[$2]] (vèrsions tant qu’u $3)',
 'revertmerge' => 'Sèparar',
-'mergelogpagetext' => 'Vê-que la lista de les fusions les ples novèles de l’historico d’una pâge dedens celi d’una ôtra.',
+'mergelogpagetext' => 'Vê-que na lista de les fusions les ples novèles de l’historico d’una pâge dedens celi d’un’ôtra.',
 
 # Diffs
 'history-title' => 'Historico de les vèrsions de « $1 »',
@@ -1295,81 +1329,85 @@ Notâd bien que l’usâjo des lims de navigacion tornerat inicialisar cela colo
 'difference-multipage' => '(Difèrences entre les pâges)',
 'lineno' => 'Legne $1 :',
 'compareselectedversions' => 'Comparar les vèrsions chouèsies',
-'showhideselectedversions' => 'Fâre vêre / cachiér les vèrsions chouèsies',
+'showhideselectedversions' => 'Montrar / cachiér les vèrsions chouèsies',
 'editundo' => 'dèfâre',
-'diff-multi' => '({{PLURAL:$1|Yona vèrsion entèrmèdièra|$1 vèrsions entèrmèdières}} per {{PLURAL:$2|yon usanciér|$2 usanciérs}} {{PLURAL:$1|est pas montrâ|sont pas montrâs}})',
-'diff-multi-manyusers' => '({{PLURAL:$1|Yona vèrsion entèrmèdièra|$1 vèrsions entèrmèdières}} per més de $2 usanciér{{PLURAL:$2||s}} {{PLURAL:$1|est pas montrâ|sont pas montrâs}})',
+'diff-multi' => '({{PLURAL:$1|Na vèrsion entèrmèdièra|$1 vèrsions entèrmèdières}} per {{PLURAL:$2|un utilisator|$2 utilisators}} {{PLURAL:$1|est pas montrâye|sont pas montrâyes}})',
+'diff-multi-manyusers' => '({{PLURAL:$1|Na vèrsion entèrmèdièra|$1 vèrsions entèrmèdières}} per més de $2 utilisator{{PLURAL:$2||s}} {{PLURAL:$1|est pas montrâye|sont pas montrâyes}})',
+'difference-missing-revision' => '{{PLURAL:$2|Na vèrsion|$2 vèrsions}} de cela difèrence ($1) {{PLURAL:$2|est pas étâye trovâye|sont pas étâyes trovâyes}}.
+
+En g·ènèral cen arreve en siuvent un lim d’una dif dèpassâye de vers na pâge qu’est étâye suprimâye.
+Vos pouede trovar més de dètalys dedens lo [{{fullurl:{{#Special:Log}}/delete|page={{FULLPAGENAMEE}}}} jornal de les suprèssions].',
 
 # Search results
 'searchresults' => 'Rèsultats de la rechèrche',
 'searchresults-title' => 'Rèsultats de la rechèrche por « $1 »',
-'searchresulttext' => 'Por més d’enformacions sur la rechèrche dens {{SITENAME}}, vêde [[{{MediaWiki:Helppage}}|{{int:help}}]].',
+'searchresulttext' => 'Por més d’enformacions sur la rechèrche dedens {{SITENAME}}, vêde [[{{MediaWiki:Helppage}}|{{int:help}}]].',
 'searchsubtitle' => "Vos éd rechèrchiê « '''[[:$1]]''' » ([[Special:Prefixindex/$1|totes les pâges que començont per « $1 »]]{{int:pipe-separator}}[[Special:WhatLinksHere/$1|totes les pâges qu’ont un lim de vers « $1 »]])",
 'searchsubtitleinvalid' => "Vos éd rechèrchiê « '''$1''' »",
-'toomanymatches' => 'Un trop grant nombro d’ocasions at étâ retornâ, volyéd sometre una requéta difèrenta.',
-'titlematches' => 'Corrèspondances dens los titros de pâges',
-'notitlematches' => 'Nion titro de pâge corrèspond a la rechèrche.',
-'textmatches' => 'Corrèspondances dens lo tèxto de les pâges',
-'notextmatches' => 'Nion tèxto de pâge corrèspond a la rechèrche.',
+'toomanymatches' => 'Un mouél de corrèspondances est étâ retornâ, se vos plét èprovâd na rechèrche difèrenta',
+'titlematches' => 'Corrèspondances dedens los titros de les pâges',
+'notitlematches' => 'Niona corrèspondance dedens los titros de les pâges',
+'textmatches' => 'Corrèspondances dedens lo tèxto de les pâges',
+'notextmatches' => 'Niona corrèspondance dedens lo tèxto de les pâges',
 'prevn' => '{{PLURAL:$1|$1}} devant',
 'nextn' => '{{PLURAL:$1|$1}} aprés',
 'prevn-title' => '$1 rèsultat{{PLURAL:$1||s}} devant',
 'nextn-title' => '$1 rèsultat{{PLURAL:$1||s}} aprés',
-'shown-title' => 'Fâre vêre $1 rèsultat{{PLURAL:$1||s}} per pâge',
-'viewprevnext' => 'Vêre ($1 {{int:pipe-separator}} $2) ($3).',
+'shown-title' => 'Montrar $1 rèsultat{{PLURAL:$1||s}} per pâge',
+'viewprevnext' => 'Vêre ($1 {{int:pipe-separator}} $2) ($3)',
 'searchmenu-legend' => 'Chouèx de rechèrche',
-'searchmenu-exists' => "'''Y at una pâge avouéc lo titro « [[:$1]] » sur ceti vouiqui.'''",
+'searchmenu-exists' => "'''Y at na pâge apelâye « [[:$1]] » sur ceti vouiqui.'''",
 'searchmenu-new' => "'''Fâre la pâge « [[:$1|$1]] » sur ceti vouiqui !'''",
 'searchhelp-url' => 'Help:Somèro',
-'searchmenu-prefix' => '[[Special:PrefixIndex/$1|Rechèrchiér les pâges que començont per ceti prèfixo]]',
+'searchmenu-prefix' => '[[Special:PrefixIndex/$1|Fâre dèfelar les pâges que començont per ceti prèfixo]]',
 'searchprofile-articles' => 'Pâges de contegnu',
-'searchprofile-project' => 'Pâges d’éde et du projèt',
+'searchprofile-project' => 'Pâges d’éde et pâges projèt',
 'searchprofile-images' => 'Multimèdia',
 'searchprofile-everything' => 'Tot',
-'searchprofile-advanced' => 'Rechèrche avanciê',
-'searchprofile-articles-tooltip' => 'Rechèrchiér dens $1',
-'searchprofile-project-tooltip' => 'Rechèrchiér dens $1',
-'searchprofile-images-tooltip' => 'Rechèrchiér des fichiérs mèdia',
-'searchprofile-everything-tooltip' => 'Rechèrchiér dens tot lo seto (les pâges de discussion avouéc)',
+'searchprofile-advanced' => 'Rechèrche avanciêe',
+'searchprofile-articles-tooltip' => 'Rechèrchiér dedens $1',
+'searchprofile-project-tooltip' => 'Rechèrchiér dedens $1',
+'searchprofile-images-tooltip' => 'Rechèrchiér des fichiérs',
+'searchprofile-everything-tooltip' => 'Rechèrchiér dedens tot lo contegnu (les pâges de discussion avouéc)',
 'searchprofile-advanced-tooltip' => 'Chouèsir los èspâços de noms por la rechèrche',
 'search-result-size' => '$1 ($2 mot{{PLURAL:$2||s}})',
 'search-result-category-size' => '$1 membro{{PLURAL:$1||s}} ($2 sot-catègorie{{PLURAL:$2||s}}, $3 fichiér{{PLURAL:$3||s}})',
-'search-result-score' => 'Rapôrt : $1 %',
+'search-result-score' => 'Rapôrt : $1%',
 'search-redirect' => '(redirèccion dês $1)',
 'search-section' => '(sèccion $1)',
-'search-suggest' => 'Vos éd volu dére : $1',
+'search-suggest' => 'Voléd-vos dére : $1',
 'search-interwiki-caption' => 'Projèts frâres',
 'search-interwiki-default' => 'Rèsultats dessus $1 :',
 'search-interwiki-more' => '(més)',
-'search-relatedarticle' => 'Raportâ',
-'mwsuggest-disable' => 'Dèsactivar los consèlys AJAX',
-'searcheverything-enable' => 'Rechèrchiér dens tôs los èspâços de noms',
-'searchrelated' => 'raportâ',
+'search-relatedarticle' => 'Aparentâ',
+'mwsuggest-disable' => 'Dèsactivar les idês AJAX',
+'searcheverything-enable' => 'Rechèrchiér dedens tôs los èspâços de noms',
+'searchrelated' => 'aparentâ',
 'searchall' => 'tot',
-'showingresults' => "Visualisacion de '''$1''' rèsultat{{PLURAL:$1||s}} dês lo numerô '''$2'''.",
-'showingresultsnum' => "Visualisacion de '''$3''' rèsultat{{PLURAL:$3||s}} dês lo numerô '''$2'''.",
+'showingresults' => "Vua de '''$1''' rèsultat{{PLURAL:$1||s}} dês lo numerô '''$2'''.",
+'showingresultsnum' => "Vua de '''$3''' rèsultat{{PLURAL:$3||s}} dês lo numerô '''$2'''.",
 'showingresultsheader' => "{{PLURAL:$5|Rèsultat '''$1'''|Rèsultats '''$1 - $2'''}} de '''$3''' por '''$4'''",
 'nonefound' => "'''Nota :''' solament quârques èspâços de noms sont rechèrchiês per dèfôt.
-Èprovâd en utilisent lo prèfixo ''all:'' por rechèrchiér dens tot lo contegnu (les pâges de discussion, los modèlos, ... avouéc) ou ben utilisâd l’èspâço de noms souhètâ coment prèfixo.",
-'search-nonefound' => 'Y at gins de rèsultat que corrèspond a la requéta.',
-'powersearch' => 'Rechèrche avanciê',
-'powersearch-legend' => 'Rechèrche avanciê',
-'powersearch-ns' => 'Rechèrchiér dens los èspâços de noms :',
-'powersearch-redir' => 'Fâre vêre les redirèccions',
+Èprovâd en empleyent lo prèfixo ''all:'' por rechèrchiér dedens tot lo contegnu (les pâges de discussion, los modèlos, ... avouéc) ou ben empleyéd l’èspâço de noms volu coment prèfixo.",
+'search-nonefound' => 'Y at gins de rèsultat que corrèspond a la rechèrche.',
+'powersearch' => 'Rechèrche avanciêe',
+'powersearch-legend' => 'Rechèrche avanciêe',
+'powersearch-ns' => 'Rechèrchiér dedens los èspâços de noms :',
+'powersearch-redir' => 'Listar les redirèccions',
 'powersearch-field' => 'Rechèrchiér',
-'powersearch-togglelabel' => 'Pouentar :',
+'powersearch-togglelabel' => 'Chouèsir :',
 'powersearch-toggleall' => 'Tot',
-'powersearch-togglenone' => 'Niona',
+'powersearch-togglenone' => 'Nion',
 'search-external' => 'Rechèrche de defôr',
-'searchdisabled' => 'La rechèrche dessus {{SITENAME}} est dèsactivâ.
-En atendent la rèactivacion, vos pouede fâre una rechèrche per Google.
-Atencion, lor endèxacion du contegnu de {{SITENAME}} pôt pas étre a jorn.',
+'searchdisabled' => 'La rechèrche dessus {{SITENAME}} est dèsactivâye.
+Pendent cél temps, vos pouede fâre na rechèrche avouéc Google.
+Notâd que lor endèxacion du contegnu de {{SITENAME}} pôt pas étre a jorn.',
 
 # Quickbar
-'qbsettings' => 'Bârra d’outils',
-'qbsettings-none' => 'Niona',
-'qbsettings-fixedleft' => 'Gôche',
-'qbsettings-fixedright' => 'Drêta',
+'qbsettings' => 'Bârra rapida',
+'qbsettings-none' => 'Pas yona',
+'qbsettings-fixedleft' => 'Fixa a gôche',
+'qbsettings-fixedright' => 'Fixa a drêta',
 'qbsettings-floatingleft' => 'Fllotenta a gôche',
 'qbsettings-floatingright' => 'Fllotenta a drêta',
 'qbsettings-directionality' => 'Fixa, d’aprés la dirèccionalitât d’ècritura de voutra lengoua',
@@ -1379,55 +1417,55 @@ Atencion, 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 changiér voutres prèferences usanciér.',
+'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èvisualisar',
-'datedefault' => 'Gins de prèference',
+'skin-preview' => 'Prèvêre',
+'datedefault' => 'Niona prèference',
 'prefs-beta' => 'Fonccionalitâts « Bèta »',
 'prefs-datetime' => 'Dâta et hora',
 'prefs-labs' => 'Fonccionalitâts « Laboratiors »',
 'prefs-user-pages' => 'Pâges utilisator',
 'prefs-personal' => 'Enformacions a sè',
 'prefs-rc' => 'Dèrriérs changements',
-'prefs-watchlist' => 'Lista de survelyence',
-'prefs-watchlist-days' => 'Nombro de jorns a fâre vêre dens la lista de survelyence :',
-'prefs-watchlist-days-max' => '$1 jorn{{PLURAL:$1||s}} u més',
-'prefs-watchlist-edits' => 'Nombro de changements a fâre vêre dens la lista de survelyence ètendua :',
-'prefs-watchlist-edits-max' => 'Nombro lo ples grant : 1000',
-'prefs-watchlist-token' => 'Jeton por la lista de survelyence :',
-'prefs-misc' => 'Prèferences de totes sôrtes',
+'prefs-watchlist' => 'Lista de siuvu',
+'prefs-watchlist-days' => 'Nombro de jorns a montrar dedens la lista de siuvu :',
+'prefs-watchlist-days-max' => 'Por lo més $1 jorn{{PLURAL:$1||s}}',
+'prefs-watchlist-edits' => 'Nombro maximon de changements a montrar dedens la lista de siuvu ètendua :',
+'prefs-watchlist-edits-max' => 'Nombro maximon : 1000',
+'prefs-watchlist-token' => 'Jeton por la lista de siuvu :',
+'prefs-misc' => 'De totes sôrtes',
 'prefs-resetpass' => 'Changiér lo contresegno',
 'prefs-changeemail' => 'Changiér l’adrèce èlèctronica',
-'prefs-setemail' => 'Configurar l’adrèce èlèctronica',
+'prefs-setemail' => 'Dèfenir n’adrèce èlèctronica',
 'prefs-email' => 'Chouèx de mèssageria èlèctronica',
 'prefs-rendering' => 'Aparence',
-'saveprefs' => 'Encartar les prèferences',
-'resetprefs' => 'Rètablir les prèferences',
-'restoreprefs' => 'Rètablir totes les valors per dèfôt',
-'prefs-editing' => 'Fenétra d’èdicion',
-'prefs-edit-boxsize' => 'Talye de la fenétra d’èdicion.',
-'rows' => 'Rengiês :',
+'saveprefs' => 'Encartar',
+'resetprefs' => 'Èfaciér los changements pas encartâs',
+'restoreprefs' => 'Rètablir tota la configuracion per dèfôt',
+'prefs-editing' => 'Changement',
+'prefs-edit-boxsize' => 'Talye de la fenétra de changement.',
+'rows' => 'Renches :',
 'columns' => 'Colones :',
 'searchresultshead' => 'Rechèrche',
 'resultsperpage' => 'Nombro de rèponses per pâge :',
 'stub-threshold' => 'Limita d’amont por los <a href="#" class="stub">lims de vers los començons</a> (octèts) :',
 'stub-threshold-disabled' => 'Dèsactivâ',
-'recentchangesdays' => 'Nombro de jorns a fâre vêre dens los dèrriérs changements :',
-'recentchangesdays-max' => '$1 jorn{{PLURAL:$1||s}} u més',
-'recentchangescount' => 'Nombro de changements a fâre vêre per dèfôt :',
-'prefs-help-recentchangescount' => 'Cen encllut los dèrriérs changements, los historicos de les pâges et los jornals.',
-'prefs-help-watchlist-token' => 'En remplent cen avouéc una valor secrèta farat un flux RSS por voutra lista de survelyence.
-Tota pèrsona que cognêt cél jeton porrat liére voutra lista de survelyence, chouèsésséd vêr una valor sècurisâ.
-Vê-que una valor fêta per hasârd que vos pouede utilisar : $1',
-'savedprefs' => 'Les prèferences ont étâ encartâs.',
+'recentchangesdays' => 'Nombro de jorns a montrar dedens los dèrriérs changements :',
+'recentchangesdays-max' => 'Por lo més $1 jorn{{PLURAL:$1||s}}',
+'recentchangescount' => 'Nombro de changements a montrar per dèfôt :',
+'prefs-help-recentchangescount' => 'Los dèrriérs changements, los historicos de pâges et pués los jornals avouéc.',
+'prefs-help-watchlist-token' => 'Rempléd ceti champ avouéc na cllâf secrèta et pués un flux RSS serat fêt por voutra lista de siuvu.
+Tôs celos que cognessont cela cllâf porront liére voutra lista de siuvu, chouèsésséd vêr na valor sècurisâye.
+Vê-que na valor fêta per hasârd que vos pouede empleyér : $1',
+'savedprefs' => 'Voutres prèferences sont étâyes encartâyes.',
 'timezonelegend' => 'Fus horèro :',
 'localtime' => 'Hora locala :',
-'timezoneuseserverdefault' => 'Utilisar la valor per dèfôt du vouiqui ($1)',
-'timezoneuseoffset' => 'Ôtro (spècefiar lo dècalâjo)',
+'timezoneuseserverdefault' => 'Empleyér la valor du vouiqui per dèfôt ($1)',
+'timezoneuseoffset' => 'Ôtro (spècifiar lo dècalâjo)',
 'timezoneoffset' => 'Dècalâjo horèro¹ :',
-'servertime' => 'Hora du sèrvor :',
-'guesstimezone' => 'Utilisar la valor du navigator',
+'servertime' => 'Hora du sèrvior :',
+'guesstimezone' => 'Empleyér la valor du navigator',
 'timezoneregion-africa' => 'Africa',
 'timezoneregion-america' => 'Amèriques',
 'timezoneregion-antarctica' => 'Antartica',
@@ -1437,107 +1475,107 @@ Vê-que una valor fêta per hasârd que vos pouede utilisar : $1',
 'timezoneregion-australia' => 'Ôstralie',
 'timezoneregion-europe' => 'Eropa',
 'timezoneregion-indian' => 'Ocèan endien',
-'timezoneregion-pacific' => 'Ocèan pacefico',
-'allowemail' => 'Ôtorisar l’èxpèdicion de mèssâjos que vegnont d’ôtros usanciérs',
+'timezoneregion-pacific' => 'Ocèan pacifico',
+'allowemail' => 'Activar l’èxpèdicion de mèssâjos que vegnont d’ôtros utilisators',
 'prefs-searchoptions' => 'Rechèrche',
 'prefs-namespaces' => 'Èspâços de noms',
-'defaultns' => 'Ôtrament rechèrchiér dens cetos èspâços de noms :',
-'default' => 'per dèfôt',
+'defaultns' => 'Ôtrament rechèrchiér dedens cetos èspâços de noms :',
+'default' => 'dèfôt',
 'prefs-files' => 'Fichiérs',
 'prefs-custom-css' => 'CSS pèrsonalisâ',
 'prefs-custom-js' => 'JavaScript pèrsonalisâ',
 'prefs-common-css-js' => 'CSS / JS partagiê por tôs los habelyâjos :',
-'prefs-reset-intro' => 'Vos pouede utilisar ceta pâge por rètablir voutres prèferences a les valors du seto per dèfôt.
+'prefs-reset-intro' => 'Vos pouede empleyér ceta pâge por rètablir voutres prèferences a les valors du seto per dèfôt.
 Cen pôt pas étre dèfêt.',
-'prefs-emailconfirm-label' => 'Confirmacion de la mèssageria èlèctronica :',
-'prefs-textboxsize' => 'Talye de la fenétra d’èdicion',
+'prefs-emailconfirm-label' => 'Confirmacion de l’adrèce èlèctronica :',
+'prefs-textboxsize' => 'Talye de la fenétra de changement',
 'youremail' => 'Adrèce èlèctronica :',
-'username' => 'Nom d’usanciér :',
-'uid' => 'Numerô d’usanciér :',
-'prefs-memberingroups' => 'Membro a {{PLURAL:$1|la tropa|les tropes}} :',
+'username' => 'Nom d’utilisat{{GENDER:$1|or|rice}} :',
+'uid' => 'Identifient d’utilisat{{GENDER:$1|or|rice}} :',
+'prefs-memberingroups' => '{{GENDER:$2|Membro}} de l{{PLURAL:$1|a tropa|es tropes}} :',
 'prefs-registration' => 'Dâta d’encartâjo :',
 'yourrealname' => 'Veré nom :',
-'yourlanguage' => 'Lengoua de l’entèrface :',
+'yourlanguage' => 'Lengoua :',
 'yourvariant' => 'Varianta de la lengoua du contegnu :',
-'prefs-help-variant' => 'Voutra varianta ou ben ortografia prèferâ por nen fâre vêre les pâges de contegnu de ceti vouiqui.',
-'yournick' => 'Signatura por les discussions :',
-'prefs-help-signature' => 'Los comentèros sur les pâges de discussion dêvont étre signês avouéc « <nowiki>~~~~</nowiki> », que serat convèrti per voutra signatura avouéc la dâta.',
-'badsig' => 'Signatura bruta fôssa.
-Controlâd voutres balises HTML.',
+'prefs-help-variant' => 'Voutra varianta voutron ortografia prèferâye por fâre vêre les pâges de contegnu de ceti vouiqui.',
+'yournick' => 'Signatura novèla :',
+'prefs-help-signature' => 'Los comentèros sur les pâges de discussion dêvont étre signês avouéc « <nowiki>~~~~</nowiki> » que serat convèrti per voutra signatura avouéc la dâta et hora.',
+'badsig' => 'Signatura bruta pas justa.
+Controlâd les balises HTML.',
 'badsiglength' => 'Voutra signatura est trop longe.
 Dêt pas dèpassar $1 caractèro{{PLURAL:$1||s}}.',
 'yourgender' => 'Sèxo :',
 'gender-unknown' => 'Pas rensègnê',
 'gender-male' => 'Masculin',
 'gender-female' => 'Femenin',
-'prefs-help-gender' => 'U chouèx : utilisâ por acordar en genro los mèssâjos de l’entèrface.
-Ceta enformacion serat publica.',
+'prefs-help-gender' => 'U chouèx : empleyê por acordar en sèxo los mèssâjos de la programeria.
+Cel’enformacion serat publica.',
 'email' => 'Mèssageria èlèctronica',
-'prefs-help-realname' => 'U chouèx : se vos lo spècefiâd, serat utilisâ por vos atribuar voutres contribucions.',
-'prefs-help-email' => 'L’adrèce èlèctronica est u chouèx, mas el est nècèssèra por tornar inicialisar voutron contresegno, se vos vegnéd a l’oubliar.',
-'prefs-help-email-others' => 'Vos porriâd asse-ben chouèsir de lèssiér los ôtros sè veriér vers vos sur voutra pâge usanciér ou ben de discussion sen que seye nècèssèro de dèvouèlar voutra identitât.',
-'prefs-help-email-required' => 'Una adrèce èlèctronica est nècèssèra.',
+'prefs-help-realname' => 'U chouèx : se vos lo balyéd, serat empleyê por vos atribuar voutres ôvres.',
+'prefs-help-email' => 'U chouèx : mas el est nècèssèra por remetre a zérô voutron contresegno, se vos vegnévâd a l’oubliar.',
+'prefs-help-email-others' => 'Vos porriâd asse-ben chouèsir de lèssiér los ôtros sè veriér vers vos per mèssageria èlèctronica avouéc un lim sur voutra pâge utilisator ou ben de discussion sen que seye nècèssèro de rèvèlar voutron identitât.',
+'prefs-help-email-required' => 'N’adrèce èlèctronica est nècèssèra.',
 'prefs-info' => 'Enformacions de bâsa',
 'prefs-i18n' => 'Entèrnacionalisacion',
 'prefs-signature' => 'Signatura',
-'prefs-dateformat' => 'Format de les dâtes',
+'prefs-dateformat' => 'Format de la dâta',
 'prefs-timeoffset' => 'Dècalâjo horèro',
 'prefs-advancedediting' => 'Chouèx avanciês',
 'prefs-advancedrc' => 'Chouèx avanciês',
 'prefs-advancedrendering' => 'Chouèx avanciês',
 'prefs-advancedsearchoptions' => 'Chouèx avanciês',
 'prefs-advancedwatchlist' => 'Chouèx avanciês',
-'prefs-displayrc' => 'Chouèx de visualisacion',
-'prefs-displaysearchoptions' => 'Chouèx de visualisacion',
-'prefs-displaywatchlist' => 'Chouèx de visualisacion',
+'prefs-displayrc' => 'Chouèx de vua',
+'prefs-displaysearchoptions' => 'Chouèx de vua',
+'prefs-displaywatchlist' => 'Chouèx de vua',
 'prefs-diffs' => 'Difèrences',
 
 # User preference: e-mail validation using jQuery
-'email-address-validity-valid' => 'L’adrèce èlèctronica semble valida',
-'email-address-validity-invalid' => 'Buchiéd una adrèce èlèctronica valida',
+'email-address-validity-valid' => 'L’adrèce èlèctronica semble justa',
+'email-address-validity-invalid' => 'Buchiéd n’adrèce èlèctronica justa',
 
 # User rights
-'userrights' => 'Administracion des drêts d’usanciér',
-'userrights-lookup-user' => 'Administracion a les tropes d’usanciérs',
-'userrights-user-editname' => 'Buchiéd un nom d’usanciér :',
-'editusergroup' => 'Changiér les tropes a l’usanciér',
-'editinguser' => "Changement des drêts d’usanciér a l’usanciér '''[[User:$1|$1]]''' $2",
-'userrights-editusergroup' => 'Changiér les tropes a l’usanciér',
-'saveusergroups' => 'Encartar les tropes a l’usanciér',
-'userrights-groupsmember' => 'Membro de :',
-'userrights-groupsmember-auto' => 'Membro emplicito de :',
-'userrights-groups-help' => 'Vos pouede changiér les tropes a lesquintes est ceti usanciér.
-* Una câsa pouentâ vôt dére que l’usanciér sè trove dens cela tropa.
-* Una câsa pas pouentâ vôt dére qu’y sè trove pas.
-* Una petiôta ètêla (*) endique que vos porréd pas enlevar cela tropa setout que vos l’aréd apondua et l’un l’ôtro.',
+'userrights' => 'Administracion des drêts d’utilisator',
+'userrights-lookup-user' => 'Administracion de les tropes d’utilisators',
+'userrights-user-editname' => 'Buchiéd un nom d’utilisator :',
+'editusergroup' => 'Changiér les tropes d’utilisators',
+'editinguser' => "Changement des drêts d’utilisator de l’utilisat{{GENDER:$1|or|rice}} '''[[User:$1|$1]]''' $2",
+'userrights-editusergroup' => 'Changiér les tropes d’utilisators',
+'saveusergroups' => 'Encartar les tropes d’utilisators',
+'userrights-groupsmember' => 'Membr{{GENDER:$2|o|a}} de :',
+'userrights-groupsmember-auto' => '{{GENDER:$2|Membro tacito|Membra tacita}} de :',
+'userrights-groups-help' => 'Vos pouede changiér les tropes a lesquintes est cet’utilisat{{GENDER:$1|or|rice}} :
+* Na câsa pouentâye vôt dére que l’utilisat{{GENDER:$1|or|rice}} sè trôve dedens cela tropa.
+* Na câsa pas pouentâye vôt dére que s’y trôve pas.
+* Na petiôt’ètêla (*) endique que vos pouede pas enlevar cela tropa setout que vos l’éd apondua ou ben l’una l’ôtra.',
 'userrights-reason' => 'Rêson :',
-'userrights-no-interwiki' => 'Vos avéd pas la pèrmission de changiér des drêts d’usanciér dessus d’ôtros vouiquis.',
-'userrights-nodatabase' => 'La bâsa de balyês « $1 » ègziste pas ou ben el est pas locala.',
-'userrights-nologin' => 'Vos vos dête [[Special:UserLogin|branchiér]] avouéc un compto d’administrator por balyér des drêts d’usanciér.',
-'userrights-notallowed' => 'Voutron compto at pas la pèrmission de balyér ou enlevar des drêts d’usanciér.',
+'userrights-no-interwiki' => 'Vos éd pas la pèrmission de changiér des drêts d’utilisator dessus d’ôtros vouiquis.',
+'userrights-nodatabase' => 'La bâsa de donâs « $1 » ègziste pas ou ben el est pas locala.',
+'userrights-nologin' => 'Vos vos dête [[Special:UserLogin|branchiér]] avouéc un compto d’administrator por balyér des drêts d’utilisator.',
+'userrights-notallowed' => 'Voutron compto at pas la pèrmission de balyér ou ben enlevar des drêts d’utilisator.',
 'userrights-changeable-col' => 'Les tropes que vos pouede changiér',
 'userrights-unchangeable-col' => 'Les tropes que vos pouede pas changiér',
 
 # Groups
 'group' => 'Tropa :',
-'group-user' => 'Usanciérs',
-'group-autoconfirmed' => 'Usanciérs encartâs',
-'group-bot' => 'Bots',
+'group-user' => 'Utilisators',
+'group-autoconfirmed' => 'Utilisators ôtoconfirmâs',
+'group-bot' => 'Robots',
 'group-sysop' => 'Administrators',
 'group-bureaucrat' => 'Grata-papiérs',
 'group-suppress' => 'Supèrvisors',
 'group-all' => '(tôs)',
 
-'group-user-member' => 'usanciér{{GENDER:$1||e}}',
-'group-autoconfirmed-member' => 'usanciér{{GENDER:$1||e}} encartâ',
-'group-bot-member' => '{{GENDER:$1|bot}}',
+'group-user-member' => 'utilisat{{GENDER:$1|or|rice}}',
+'group-autoconfirmed-member' => 'utilisat{{GENDER:$1|or ôtoconfirmâ|rice ôtoconfirmâye}}',
+'group-bot-member' => '{{GENDER:$1|robot}}',
 'group-sysop-member' => 'administrat{{GENDER:$1|or|rice}}',
 'group-bureaucrat-member' => '{{GENDER:$1|grata-papiér}}',
 'group-suppress-member' => 'supèrviso{{GENDER:$1|r|sa}}',
 
-'grouppage-user' => '{{ns:project}}:Usanciérs',
-'grouppage-autoconfirmed' => '{{ns:project}}:Usanciérs encartâs',
-'grouppage-bot' => '{{ns:project}}:Bots',
+'grouppage-user' => '{{ns:project}}:Utilisators',
+'grouppage-autoconfirmed' => '{{ns:project}}:Utilisators ôtoconfirmâs',
+'grouppage-bot' => '{{ns:project}}:Robots',
 'grouppage-sysop' => '{{ns:project}}:Administrators',
 'grouppage-bureaucrat' => '{{ns:project}}:Grata-papiérs',
 'grouppage-suppress' => '{{ns:project}}:Supèrvisors',
@@ -1547,105 +1585,106 @@ Ceta enformacion serat publica.',
 'right-edit' => 'Changiér les pâges',
 'right-createpage' => 'Fâre des pâges (que sont pas des pâges de discussion)',
 'right-createtalk' => 'Fâre des pâges de discussion',
-'right-createaccount' => 'Fâre des comptos usanciér novéls',
-'right-minoredit' => 'Marcar sos changements coment petiôts',
-'right-move' => 'Renomar des pâges',
-'right-move-subpages' => 'Renomar des pâges avouéc lors sot-pâges',
-'right-move-rootuserpages' => 'Renomar la pâge principâla a un usanciér',
-'right-movefile' => 'Renomar des fichiérs',
-'right-suppressredirect' => 'Pas fâre de redirèccion dês lo titro d’origina en renoment una pâge',
+'right-createaccount' => 'Fâre des comptos utilisator novéls',
+'right-minoredit' => 'Marcar los changements coment petiôts',
+'right-move' => 'Dèplaciér des pâges',
+'right-move-subpages' => 'Dèplaciér des pâges avouéc lors sot-pâges',
+'right-move-rootuserpages' => 'Dèplaciér des pâges utilisator principâles',
+'right-movefile' => 'Dèplaciér des fichiérs',
+'right-suppressredirect' => 'Pas fâre de redirèccion dês la pâge d’origina en dèplacient na pâge',
 'right-upload' => 'Tèlèchargiér des fichiérs',
 'right-reupload' => 'Ècllafar un fichiér ègzistent',
-'right-reupload-own' => 'Ècllafar un fichiér qu’on at sè-mémo tèlèchargiê',
-'right-reupload-shared' => 'Ècllafar localament un fichiér present sur un dèpôt de fichiérs partagiê',
-'right-upload_by_url' => 'Tèlèchargiér un fichiér dês una URL',
-'right-purge' => 'Purgiér lo cache de les pâges sen demanda de confirmacion',
-'right-autoconfirmed' => 'Changiér les pâges mié-protègiês',
-'right-bot' => 'Étre trètâ coment una pratica ôtomatisâ',
-'right-nominornewtalk' => 'Pas dècllenchiér la notificacion de mèssâjo novél quand on fât un petiôt changement sur la pâge de discussion a un usanciér',
-'right-apihighlimits' => 'Utilisar des limites ples hôtes dens les requétes API',
-'right-writeapi' => 'Utilisar l’API d’ècritura',
+'right-reupload-own' => 'Ècllafar un fichiér ègzistent tèlèchargiê per sè-mémo',
+'right-reupload-shared' => 'Ècllafar localament un fichiér present sur un dèpôt de fichiérs mèdia partagiê',
+'right-upload_by_url' => 'Tèlèchargiér un fichiér dês n’URL',
+'right-purge' => 'Purgiér lo cacho du seto d’una pâge sen confirmacion',
+'right-autoconfirmed' => 'Changiér les pâges mié-protègiêes',
+'right-bot' => 'Étre trètâ coment na mètoda ôtomatisâye',
+'right-nominornewtalk' => 'Pas dècllenchiér la notificacion de mèssâjo novél quand font un petiôt changement sur la pâge de discussion d’un utilisator',
+'right-apihighlimits' => 'Empleyér des limites ples hôtes dedens les demandes API',
+'right-writeapi' => 'Empleyér l’API d’ècritura',
 'right-delete' => 'Suprimar des pâges',
-'right-bigdelete' => 'Suprimar des pâges qu’ont un grant historico',
+'right-bigdelete' => 'Suprimar des pâges qu’ont un grôs historico',
 'right-deletelogentry' => 'Suprimar et refâre n’entrâ spècifica du jornal',
-'right-deleterevision' => 'Suprimar ou refâre una vèrsion spècefica d’una pâge',
-'right-deletedhistory' => 'Vêre les entrâs des historicos suprimâs mas sen lor tèxto',
-'right-deletedtext' => 'Vêre lo tèxto suprimâ et les difèrences entre les vèrsions suprimâs',
-'right-browsearchive' => 'Rechèrchiér des pâges suprimâs',
-'right-undelete' => 'Refâre una pâge suprimâ',
-'right-suppressrevision' => 'Revêre et refâre les vèrsions cachiês ux administrators',
+'right-deleterevision' => 'Suprimar et refâre na vèrsion spècifica d’una pâge',
+'right-deletedhistory' => 'Vêre les entrâs suprimâyes de l’historico sen lor tèxto',
+'right-deletedtext' => 'Vêre lo tèxto suprimâ et pués los changements entre les vèrsions suprimâyes',
+'right-browsearchive' => 'Rechèrchiér des pâges suprimâyes',
+'right-undelete' => 'Refâre na pâge',
+'right-suppressrevision' => 'Revêre et refâre les vèrsions cachiêes ux administrators',
 'right-suppressionlog' => 'Vêre los jornals privâs',
-'right-block' => 'Blocar en ècritura d’ôtros usanciérs',
-'right-blockemail' => 'Empachiér un usanciér de mandar des mèssâjos',
-'right-hideuser' => 'Blocar un usanciér en cachient son nom u publico',
-'right-ipblock-exempt' => 'Pas étre afèctâ per les adrèces IP blocâs, los blocâjos ôtomaticos et los blocâjos de plages d’adrèces IP',
-'right-proxyunbannable' => "Pas étre afèctâ per los blocâjos ôtomaticos de sèrvors mandatèros (''proxies'')",
+'right-block' => 'Blocar en ècritura d’ôtros utilisators',
+'right-blockemail' => 'Empachiér un utilisator de mandar des mèssâjos',
+'right-hideuser' => 'Blocar un utilisator en cachient son nom u publico',
+'right-ipblock-exempt' => 'Èvitar los blocâjos d’adrèces IP, los blocâjos ôtomaticos et pués los blocâjos de plages d’adrèces IP',
+'right-proxyunbannable' => 'Èvitar los blocâjos ôtomaticos de proxis',
 'right-unblockself' => 'Sè dèblocar lor-mémos',
-'right-protect' => 'Changiér lo nivél de protèccion de les pâges et changiér les pâges protègiês',
-'right-editprotected' => 'Changiér les pâges protègiês (sen protèccion en cascâda)',
-'right-editinterface' => 'Changiér l’entèrface de la programeria',
-'right-editusercssjs' => 'Changiér los fichiérs CSS et JS d’ôtros usanciérs',
-'right-editusercss' => 'Changiér los fichiérs CSS d’ôtros usanciérs',
-'right-edituserjs' => 'Changiér los fichiérs JS d’ôtros usanciérs',
-'right-rollback' => 'Rèvocar rêdo los changements u dèrriér usanciér qu’at changiê una pâge spècefica',
-'right-markbotedits' => 'Marcar des changements rèvocâs coment Ã¨yent Ã©tâ fêts per un bot',
+'right-protect' => 'Changiér lo nivél de protèccion et pués changiér les pâges protègiêes',
+'right-editprotected' => 'Changiér les pâges protègiêes (sen protèccion en cascâda)',
+'right-editinterface' => 'Changiér l’entèrface utilisator',
+'right-editusercssjs' => 'Changiér los fichiérs CSS et JavaScript d’ôtros utilisators',
+'right-editusercss' => 'Changiér los fichiérs CSS d’ôtros utilisators',
+'right-edituserjs' => 'Changiér los fichiérs JavaScript d’ôtros utilisators',
+'right-rollback' => 'Rèvocar rêdo los changements du dèrriér utilisator qu’at changiê na pâge particuliére',
+'right-markbotedits' => 'Marcar des changements rèvocâs coment Ã©tent Ã©tâs fêts per un robot',
 'right-noratelimit' => 'Pas étre afèctâ per les limites de quota',
 'right-import' => 'Importar des pâges dês d’ôtros vouiquis',
 'right-importupload' => 'Importar des pâges dês un fichiér tèlèchargiê',
-'right-patrol' => 'Marcar des changements ux ôtros coment survelyês',
-'right-autopatrol' => 'Avêr sos changements marcâs ôtomaticament coment survelyês',
-'right-patrolmarks' => 'Vêre los marcâjos de survelyence dens los dèrriérs changements',
-'right-unwatchedpages' => 'Vêre la lista de les pâges pas siuvues',
+'right-patrol' => 'Marcar los changements des ôtros coment gouardâs',
+'right-autopatrol' => 'Avêr los sins changements marcâs ôtomaticament coment gouardâs',
+'right-patrolmarks' => 'Vêre les mârques de gouârda dedens los dèrriérs changements',
+'right-unwatchedpages' => 'Vêre na lista de les pâges pas siuvues',
 'right-mergehistory' => 'Fusionar los historicos de les pâges',
-'right-userrights' => 'Changiér tôs los drêts a un usanciér',
-'right-userrights-interwiki' => 'Changiér los drêts ux usanciérs sur d’ôtros vouiquis',
-'right-siteadmin' => 'Vèrrolyér ou dèvèrrolyér la bâsa de balyês',
-'right-override-export-depth' => 'Èxportar les pâges en encllusent les pâges liyês tant qu’a una provondior de 5 nivéls',
-'right-sendemail' => 'Mandar un mèssâjo ux ôtros usanciérs',
+'right-userrights' => 'Changiér tôs los drêts d’un utilisator',
+'right-userrights-interwiki' => 'Changiér los drêts d’utilisator des utilisators que sont sur un ôtro vouiqui',
+'right-siteadmin' => 'Vèrrolyér et dèvèrrolyér la bâsa de donâs',
+'right-override-export-depth' => 'Èxportar les pâges avouéc les pâges liyêes tant qu’a na provondior de 5 nivéls',
+'right-sendemail' => 'Mandar un mèssâjo ux ôtros utilisators',
 'right-passwordreset' => 'Vêre los mèssâjos de remisa a zérô des contresegnos',
 
+# Special:Log/newusers
+'newuserlogpage' => 'Jornal de les crèacions d’utilisators',
+'newuserlogpagetext' => 'O est un jornal de les crèacions d’utilisators.',
+
 # User rights log
-'rightslog' => 'Jornal des changements de statut d’usanciér',
-'rightslogtext' => 'Vê-que lo jornal des changements de statut d’usanciér.',
-'rightslogentry' => 'at changiê los drêts a l’usanciér « $1 » de $2 a $3',
-'rightslogentry-autopromote' => 'at étâ nomâ ôtomaticament de $2 a $3',
-'rightsnone' => '(nion)',
+'rightslog' => 'Jornal des drêts d’utilisator',
+'rightslogtext' => 'O est un jornal des changements des drêts d’utilisator.',
 
 # Associated actions - in the sentence "You do not have permission to X"
 'action-read' => 'liére cela pâge',
 'action-edit' => 'changiér cela pâge',
 'action-createpage' => 'fâre des pâges',
 'action-createtalk' => 'fâre des pâges de discussion',
-'action-createaccount' => 'fâre cél compto usanciér',
+'action-createaccount' => 'fâre cél compto utilisator',
 'action-minoredit' => 'marcar cél changement coment petiôt',
-'action-move' => 'renomar cela pâge',
-'action-move-subpages' => 'renomar cela pâge et ses sot-pâges',
-'action-move-rootuserpages' => 'renomar la pâge principâla a un usanciér',
-'action-movefile' => 'renomar cél fichiér',
+'action-move' => 'dèplaciér cela pâge',
+'action-move-subpages' => 'dèplaciér cela pâge et les sines sot-pâges',
+'action-move-rootuserpages' => 'dèplaciér les pâges utilisator principâles',
+'action-movefile' => 'dèplaciér cél fichiér',
 'action-upload' => 'tèlèchargiér cél fichiér',
 'action-reupload' => 'ècllafar cél fichiér ègzistent',
 'action-reupload-shared' => 'ècllafar localament cél fichiér present sur un dèpôt partagiê',
-'action-upload_by_url' => 'tèlèchargiér cél fichiér dês una URL',
-'action-writeapi' => 'utilisar l’API d’ècritura',
+'action-upload_by_url' => 'tèlèchargiér cél fichiér dês n’URL',
+'action-writeapi' => 'empleyér l’API d’ècritura',
 'action-delete' => 'suprimar cela pâge',
 'action-deleterevision' => 'suprimar cela vèrsion',
 'action-deletedhistory' => 'vêre l’historico suprimâ de cela pâge',
-'action-browsearchive' => 'rechèrchiér des pâges suprimâs',
+'action-browsearchive' => 'rechèrchiér des pâges suprimâyes',
 'action-undelete' => 'refâre cela pâge',
-'action-suppressrevision' => 'revêre et refâre cela vèrsion cachiê',
+'action-suppressrevision' => 'revêre et refâre cela vèrsion cachiêe',
 'action-suppressionlog' => 'vêre cél jornal privâ',
-'action-block' => 'blocar en ècritura cél usanciér',
+'action-block' => 'blocar en ècritura cél utilisator',
 'action-protect' => 'changiér los nivéls de protèccion por cela pâge',
-'action-rollback' => 'rèvocar rêdo los changements u dèrriér usanciér qu’at changiê una pâge spècefica',
+'action-rollback' => 'rèvocar rêdo los changements du dèrriér utilisator qu’at changiê na pâge particuliére',
 'action-import' => 'importar cela pâge dês un ôtro vouiqui',
 'action-importupload' => 'importar cela pâge dês un fichiér tèlèchargiê',
-'action-patrol' => 'marcar lo changement ux ôtros coment survelyê',
-'action-autopatrol' => 'avêr voutron changement marcâ coment survelyê',
+'action-patrol' => 'marcar lo changement des ôtros coment gouardâ',
+'action-autopatrol' => 'avêr voutron changement marcâ coment gouardâ',
 'action-unwatchedpages' => 'vêre la lista de les pâges pas siuvues',
 'action-mergehistory' => 'fusionar l’historico de cela pâge',
-'action-userrights' => 'changiér tôs los drêts d’usanciér',
-'action-userrights-interwiki' => 'changiér los drêts ux usanciérs sur d’ôtros vouiquis',
-'action-siteadmin' => 'vèrrolyér ou ben dèvèrrolyér la bâsa de balyês',
+'action-userrights' => 'changiér tôs los drêts d’utilisator',
+'action-userrights-interwiki' => 'changiér los drêts d’utilisator des utilisators que sont sur un ôtro vouiqui',
+'action-siteadmin' => 'vèrrolyér ou ben dèvèrrolyér la bâsa de donâs',
 'action-sendemail' => 'mandar des mèssâjos',
 
 # Recent changes
@@ -1653,170 +1692,169 @@ Ceta enformacion serat publica.',
 'recentchanges' => 'Dèrriérs changements',
 'recentchanges-legend' => 'Chouèx des dèrriérs changements',
 'recentchanges-summary' => 'Siude los dèrriérs changements du vouiqui sur ceta pâge.',
-'recentchanges-feed-description' => 'Siude los dèrriérs changements du vouiqui dens ceti flux.',
-'recentchanges-label-newpage' => 'Ceti changement at fêt una pâge novèla.',
-'recentchanges-label-minor' => 'Ceti changement est petiôt.',
-'recentchanges-label-bot' => 'Ceti changement at étâ fêt per un bot.',
-'recentchanges-label-unpatrolled' => 'Ceti changement at p’oncor étâ survelyê.',
+'recentchanges-feed-description' => 'Siude los dèrriérs changements du vouiqui dedens ceti flux.',
+'recentchanges-label-newpage' => 'Ceti changement at fêt na pâge novèla',
+'recentchanges-label-minor' => 'O est un petiôt changement',
+'recentchanges-label-bot' => 'Ceti changement est étâ fêt per un robot',
+'recentchanges-label-unpatrolled' => 'Ceti changement est p’oncor étâ gouardâ',
 'rcnote' => "Vê-que {{PLURAL:$1|lo dèrriér changement fêt|los '''$1''' dèrriérs changements fêts}} pendent {{PLURAL:$2|lo jorn passâ|los '''$2''' jorns passâs}} tant qu’a $5 lo $4.",
-'rcnotefrom' => "Vê-que los changements fêts dês lo '''$2''' ('''$1''' u més).",
-'rclistfrom' => 'Fâre vêre los novéls changements dês lo $1.',
+'rcnotefrom' => "Vê-que los changements fêts dês lo '''$2''' (tant qu’a '''$1''' montrâs).",
+'rclistfrom' => 'Montrar los novéls changements dês lo $1',
 'rcshowhideminor' => '$1 los petiôts changements',
-'rcshowhidebots' => '$1 los bots',
-'rcshowhideliu' => '$1 los usanciérs encartâs',
-'rcshowhideanons' => '$1 los usanciérs pas encartâs',
-'rcshowhidepatr' => '$1 los changements survelyês',
-'rcshowhidemine' => '$1 mos changements',
-'rclinks' => 'Fâre vêre los $1 dèrriérs changements fêts pendent los $2 jorns passâs ;<br />$3.',
+'rcshowhidebots' => '$1 los robots',
+'rcshowhideliu' => '$1 los utilisators branchiês',
+'rcshowhideanons' => '$1 los utilisators anonimos',
+'rcshowhidepatr' => '$1 los changements gouardâs',
+'rcshowhidemine' => '$1 los mins changements',
+'rclinks' => 'Montrar los $1 dèrriérs changements fêts pendent los $2 jorns passâs<br />$3',
 'diff' => 'dif',
 'hist' => 'hist',
-'hide' => 'cachiér',
-'show' => 'fâre vêre',
+'hide' => 'Cachiér',
+'show' => 'Montrar',
 'minoreditletter' => 'p',
 'newpageletter' => 'N',
-'boteditletter' => 'b',
-'number_of_watching_users_pageview' => '[$1 {{PLURAL:$1|usanciér qu’est|usanciérs que sont}} aprés siuvre]',
+'boteditletter' => 'r',
+'number_of_watching_users_pageview' => '[$1 {{PLURAL:$1|utilisator qu’est|utilisators que sont}} aprés siuvre]',
 'rc_categories' => 'Limita de les catègories (sèparacion avouéc « | »)',
 'rc_categories_any' => 'Totes',
 'rc-change-size-new' => '$1 octèt{{PLURAL:$1||s}} aprés changement',
 'newsectionsummary' => '/* $1 */ novèla sèccion',
-'rc-enhanced-expand' => 'Vêde los dètalys (at fôta de JavaScript)',
+'rc-enhanced-expand' => 'Montrar los dètalys (il at fôta de JavaScript)',
 'rc-enhanced-hide' => 'Cachiér los dètalys',
-'rc-old-title' => 'fêt avouéc lo titro « $1 »',
+'rc-old-title' => 'fêta avouéc lo titro originâl « $1 »',
 
 # Recent changes linked
-'recentchangeslinked' => 'Changements de les pâges liyês',
-'recentchangeslinked-feed' => 'Changements de les pâges liyês',
-'recentchangeslinked-toolbox' => 'Changements de les pâges liyês',
-'recentchangeslinked-title' => 'Changements de les pâges liyês a « $1 »',
-'recentchangeslinked-noresult' => 'Y at gins de changement sur les pâges liyês pendent lo temps chouèsi.',
-'recentchangeslinked-summary' => "Ceta pâge spèciâla montre los dèrriérs changements sur les pâges que sont liyês.
-Les pâges de voutra [[Special:Watchlist|lista de survelyence]] sont '''en grâs'''.",
+'recentchangeslinked' => 'Changements liyês',
+'recentchangeslinked-feed' => 'Changements liyês',
+'recentchangeslinked-toolbox' => 'Changements liyês',
+'recentchangeslinked-title' => 'Changements liyês a « $1 »',
+'recentchangeslinked-noresult' => 'Y at gins de changement sur les pâges liyêes pendent lo temps chouèsi.',
+'recentchangeslinked-summary' => "O est na lista des dèrriérs changements sur les pâges liyêes a na pâge spècifiâye (sur los membros d’una catègorie spècifiâye).
+Les pâges de voutra [[Special:Watchlist|lista de siuvu]] sont en '''grâs'''.",
 'recentchangeslinked-page' => 'Nom de la pâge :',
-'recentchangeslinked-to' => 'Fâre vêre los changements de les pâges qu’ont un lim de vers la pâge balyê pletout que l’envèrsa',
+'recentchangeslinked-to' => 'Montrar pletout los changements sur les pâges liyêes a la pâge balyêe',
 
 # Upload
 'upload' => 'Tèlèchargiér un fichiér',
 'uploadbtn' => 'Tèlèchargiér lo fichiér',
-'reuploaddesc' => 'Anular lo tèlèchargement et tornar u formulèro de tèlèchargement.',
+'reuploaddesc' => 'Anular lo tèlèchargement et pués tornar u formulèro de tèlèchargement',
 'upload-tryagain' => 'Mandar la dèscripcion du fichiér changiê',
-'uploadnologin' => 'Pas branchiê',
-'uploadnologintext' => 'Vos dête étre [[Special:UserLogin|branchiê]] por tèlèchargiér des fichiérs sur lo sèrvor.',
-'upload_directory_missing' => 'Lo rèpèrtouèro de tèlèchargement ($1) est entrovâblo et pués at pas possu étre fêt per lo sèrvor vouèbe.',
-'upload_directory_read_only' => 'Lo rèpèrtouèro de tèlèchargement ($1) est pas accèssiblo en ècritura dês lo sèrvor vouèbe.',
-'uploaderror' => 'Èrror pendent lo tèlèchargement',
-'upload-recreate-warning' => "'''Atencion : un fichiér avouéc cél nom at étâ suprimâ ou ben dèplaciê.'''
-
-Los jornals de les suprèssions et des changements de nom de cela pâge sont montrâs ce-desot :",
-'uploadtext' => "Utilisâd ceti formulèro por tèlèchargiér des fichiérs sur lo sèrvor.
-Por vêre ou rechèrchiér des émâges mandâs dês devant, vêde la [[Special:FileList|lista de les émâges]].
-Los tèlèchargements sont asse-ben encartâs dens lo [[Special:Log/upload|jornal des tèlèchargements]], et les suprèssions dens lo [[Special:Log/delete|jornal de les suprèssions]].
-
-Por encllure un fichiér dens una pâge, utilisâd un lim de la fôrma :
-* '''<code><nowiki>[[</nowiki>{{ns:file}}<nowiki>:Fichiér.jpg]]</nowiki></code>''' por fâre vêre lo fichiér en plêna rèsolucion (dens lo câs d’una émâge) ;
-* '''<code><nowiki>[[</nowiki>{{ns:file}}<nowiki>:Fichiér.png|200px|thumb|left|tèxto dèscriptif]]</nowiki></code>''' por utilisar una figura de 200 pixèls de lârjo dens una bouèta a gôche avouéc « tèxto dèscriptif » coment dèscripcion ;
-* '''<code><nowiki>[[</nowiki>{{ns:media}}<nowiki>:Fichiér.ogg]]</nowiki></code>''' por liyér tot drêt vers lo fichiér sen lo fâre vêre.",
-'upload-permitted' => 'Formats de fichiérs ôtorisâs : $1.',
-'upload-preferred' => 'Formats de fichiérs prèferâs : $1.',
-'upload-prohibited' => 'Formats de fichiérs dèfendus : $1.',
-'uploadlog' => 'Jornal des tèlèchargements',
+'uploadnologin' => 'Pas branchiê(ye)',
+'uploadnologintext' => 'Vos dête étre [[Special:UserLogin|branchiê(ye)]] por tèlèchargiér des fichiérs.',
+'upload_directory_missing' => 'Lo rèpèrtouèro de tèlèchargement ($1) est manquent et pués il at pas possu étre fêt per lo sèrvior Vouèbe.',
+'upload_directory_read_only' => 'Lo rèpèrtouèro de tèlèchargement ($1) est pas accèssiblo en ècritura dês lo sèrvior Vouèbe.',
+'uploaderror' => 'Fôta pendent lo tèlèchargement',
+'upload-recreate-warning' => "'''Atencion : un fichiér avouéc cél nom est étâ suprimâ ou ben dèplaciê.'''
+
+Por comoditât, lo jornal de les suprèssions et des dèplacements de cela pâge est balyê ce-desot :",
+'uploadtext' => "Empleyéd lo formulèro ce-desot por tèlèchargiér des fichiérs.
+Por vêre ou ben rechèrchiér des fichiérs tèlèchargiês dês devant, vêde la [[Special:FileList|lista des fichiérs tèlèchargiês]]. Los (re-)tèlèchargements sont asse-ben encartâs dedens lo [[Special:Log/upload|jornal des tèlèchargements]], et pués les suprèssions dedens lo [[Special:Log/delete|jornal de les suprèssions]].
+
+Por entrebetar un fichiér dedens na pâge, empleyéd un lim de yona de cetes fôrmes :
+* '''<code><nowiki>[[</nowiki>{{ns:file}}<nowiki>:Fichiér.jpg]]</nowiki></code>''' por empleyér la vèrsion en plêna largior du fichiér
+* '''<code><nowiki>[[</nowiki>{{ns:file}}<nowiki>:Fichiér.png|200px|thumb|left|tèxto dèscriptif]]</nowiki></code>''' por empleyér na figura de 200 pixèls de lârjo dedens na bouèta a gôche avouéc « tèxto dèscriptif » coment dèscripcion
+* '''<code><nowiki>[[</nowiki>{{ns:media}}<nowiki>:Fichiér.ogg]]</nowiki></code>''' por liyér tot drêt vers lo fichiér sen lo fâre vêre",
+'upload-permitted' => 'Tipos de fichiérs ôtorisâs : $1.',
+'upload-preferred' => 'Tipos de fichiérs prèferâs : $1.',
+'upload-prohibited' => 'Tipos de fichiérs dèfendus : $1.',
+'uploadlog' => 'jornal des tèlèchargements',
 'uploadlogpage' => 'Jornal des tèlèchargements',
-'uploadlogpagetext' => 'Vê-que la lista des dèrriérs fichiérs tèlèchargiês sur lo sèrvor.
-Vêde la [[Special:NewFiles|galerie des novéls fichiérs]] por una presentacion ples visuâla.',
+'uploadlogpagetext' => 'Vê-que na lista des dèrriérs fichiérs tèlèchargiês.
+Vêde la [[Special:NewFiles|galerie des novéls fichiérs]] por un apèrçu ples visuâl.',
 'filename' => 'Nom du fichiér',
 'filedesc' => 'Dèscripcion',
 'fileuploadsummary' => 'Dèscripcion :',
 'filereuploadsummary' => 'Changements du fichiér :',
-'filestatus' => 'Statut des drêts d’ôtor :',
+'filestatus' => 'Statut du drêt d’ôtor :',
 'filesource' => 'Sôrsa :',
 'uploadedfiles' => 'Fichiérs tèlèchargiês',
-'ignorewarning' => 'Ignorar l’avèrtissement et pués sôvar quand mémo lo fichiér',
-'ignorewarnings' => 'Ignorar tôs los avèrtissements',
-'minlength1' => 'Los noms de fichiér dêvont comprendre u muens yona lètra.',
-'illegalfilename' => 'Lo nom de fichiér « $1 » contint des caractèros dèfendus dens los titros de pâges.
-Lo volyéd renomar et pués lo tornar tèlèchargiér.',
-'filename-toolong' => 'Lo nom du fichiér pôt pas dèpassar 240 octèts.',
-'badfilename' => 'Lo fichiér at étâ renomâ en « $1 ».',
+'ignorewarning' => 'Ignorar la semonce et pués encartar lo fichiér dens tôs los câs',
+'ignorewarnings' => 'Ignorar totes les semonces',
+'minlength1' => 'Los noms de fichiérs dêvont contegnir por lo muens na lètra.',
+'illegalfilename' => 'Lo nom de fichiér « $1 » contint des caractèros dèfendus dedens los titros de pâges.
+Se vos plét, renomâd-lo et pués tornâd-lo tèlèchargiér.',
+'filename-toolong' => 'Los noms de fichiérs pôvont pas dèpassar 240 octèts.',
+'badfilename' => 'Lo nom du fichiér est étâ changiê en « $1 ».',
 'filetype-mime-mismatch' => 'L’èxtension du fichiér « .$1 » corrèspond pas u tipo MIME dècelâ du fichiér ($2).',
 'filetype-badmime' => 'Los fichiérs du tipo MIME « $1 » pôvont pas étre tèlèchargiês.',
-'filetype-bad-ie-mime' => 'Lo fichiér pôt pas étre tèlèchargiê perce que serêt dècelâ coment « $1 » per Internet Explorer, cen que corrèspond a un tipo de fichiér dèfendu perce que pôt-étre dangerox.',
-'filetype-unwanted-type' => "'''« .$1 »''' est un format de fichiér pas dèsirâ.
-{{PLURAL:$3|Lo tipo de fichiérs recomandâ est|Los tipos de fichiérs recomandâs sont}} $2.",
-'filetype-banned-type' => "'''« .$1 »''' {{PLURAL:$4|est pas un tipo de fichiérs ôtorisâ|sont pas des tipos de fichiérs ôtorisâs}}.
-{{PLURAL:$3|Lo tipo de fichiérs accèptâ est|Los tipos de fichiérs accèptâs sont}} $2.",
+'filetype-bad-ie-mime' => 'Lo fichiér pôt pas étre tèlèchargiê perce que serêt dècelâ coment « $1 » per Internet Explorer, cen que corrèspond a un tipo de fichiér dèfendu et pués pôt-étre dangerox.',
+'filetype-unwanted-type' => "'''« .$1 »''' est un tipo de fichiér pas volu.
+{{PLURAL:$3|Lo tipo de fichiér prèferâ est|Los tipos de fichiérs prèferâs sont}} $2.",
+'filetype-banned-type' => "'''« .$1 »''' {{PLURAL:$4|est pas un tipo de fichiér ôtorisâ|sont pas des tipos de fichiérs ôtorisâs}}.
+{{PLURAL:$3|Lo tipo de fichiér ôtorisâ est|Los tipos de fichiérs ôtorisâs sont}} $2.",
 'filetype-missing' => 'Lo fichiér at gins d’èxtension (coment « .jpg » per ègzemplo).',
-'empty-file' => 'Lo fichiér que vos éd somês ére vouedo.',
-'file-too-large' => 'Lo fichiér que vos éd somês ére trop grant.',
+'empty-file' => 'Lo fichiér que vos éd mandâ ére vouedo.',
+'file-too-large' => 'Lo fichiér que vos éd mandâ ére trop grôs.',
 'filename-tooshort' => 'Lo nom du fichiér est trop côrt.',
 'filetype-banned' => 'Cél tipo de fichiér est dèfendu.',
 'verification-error' => 'Cél fichiér pâsse pas lo contrôlo des fichiérs.',
-'hookaborted' => 'Lo changement que vos éd tâchiê de fâre at étâ arrètâ per un grèfon d’una èxtension.',
+'hookaborted' => 'Lo changement que vos éd tâchiê de fâre est étâ anulâ per n’èxtension.',
 'illegal-filename' => 'Lo nom du fichiér est pas ôtorisâ.',
 'overwrite' => 'Ècllafar un fichiér ègzistent est pas ôtorisâ.',
-'unknown-error' => 'Una èrror encognua est arrevâ.',
+'unknown-error' => 'Na fôta encognua est arrevâ.',
 'tmp-create-error' => 'Empossiblo de fâre lo fichiér temporèro.',
-'tmp-write-error' => 'Èrror d’ècritura du fichiér temporèro.',
-'large-file' => 'Los fichiérs tèlèchargiês devriant pas étre ples grant que $1 ;
+'tmp-write-error' => 'Fôta d’ècritura du fichiér temporèro.',
+'large-file' => 'O est recomandâ que los fichiérs seyont pas ples grôs que $1 ;
 cél fichiér fât $2.',
-'largefileserver' => 'La talye de cél fichiér est d’amont lo nivél lo ples hôt ôtorisâ.',
-'emptyfile' => 'Lo fichiér que vos voléd tèlèchargiér semble vouedo.
-Cen pôt étre diu a una èrror dedens lo nom du fichiér.
-Volyéd controlar que vos voléd franc tèlèchargiér cél fichiér.',
+'largefileserver' => 'Cél fichiér est ples grôs que lo sèrvior est configurâ por l’ôtorisar.',
+'emptyfile' => 'Lo fichiér que vos éd tèlèchargiê semble étre vouedo.
+Cen pôt étre diu a na fôta dedens lo nom du fichiér.
+Se vos plét, controlâd que vos voléd franc tèlèchargiér cél fichiér.',
 'windows-nonascii-filename' => 'Ceti vouiqui recognêt pas los noms de fichiérs avouéc des caractèros spèciâls.',
-'fileexists' => 'Un fichiér avouéc cél nom ègziste ja.
-Volyéd controlar <strong>[[:$1]]</strong>.
-Éte-vos de sûr de lo volêr changiér ? [[$1|thumb]]',
-'filepageexists' => 'La pâge de dèscripcion por cél fichiér at ja étâ fêta ique <strong>[[:$1]]</strong>, mas nion fichiér de cél nom ègziste ora.
+'fileexists' => 'Un fichiér avouéc cél nom ègziste ja, se vos plét controlâd <strong>[[:$1]]</strong> se vos éte pas de sûr de lo volêr changiér.
+[[$1|thumb]]',
+'filepageexists' => 'La pâge de dèscripcion por cél fichiér est ja étâye fêta ique <strong>[[:$1]]</strong>, mas nion fichiér avouéc cél nom ègziste ora.
 Lo rèsumâ que vos voléd buchiér aparêtrat pas sur la pâge de dèscripcion.
-Por cen fâre vos devréd changiér la pâge a la man.
+Por o fâre, vos la devréd changiér a la man.
 [[$1|thumb]]',
 'fileexists-extension' => 'Un fichiér avouéc un nom d’ense ègziste ja : [[$2|thumb]]
 * Nom du fichiér a tèlèchargiér : <strong>[[:$1]]</strong>
 * Nom du fichiér ègzistent : <strong>[[:$2]]</strong>
-Volyéd chouèsir un ôtro nom.',
-'fileexists-thumbnail-yes' => "Lo fichiér semble étre una émâge en talye rèduita ''(figura)''.
+Se vos plét, chouèsésséd-nen un ôtro.',
+'fileexists-thumbnail-yes' => "Lo fichiér semble étre n’émâge en talye rèduita ''(figura)''.
 [[$1|thumb]]
-Volyéd controlar lo fichiér <strong>[[:$1]]</strong>.
-Se lo fichiér controlâ est la méma émâge avouéc la talye originèla, y at pas fôta de tèlèchargiér una vèrsion rèduita.",
+Se vos plét, controlâd lo fichiér <strong>[[:$1]]</strong>.
+Se lo fichiér controlâ est la mém’émâge avouéc la talye originâla, y at pas fôta de tèlèchargiér na figura.",
 'file-thumbnail-no' => "Lo nom du fichiér comence per <strong>$1</strong>.
-O est possiblo que seye una vèrsion rèduita ''(figura)''.
-Se vos avéd lo fichiér en rèsolucion ples hôta, tèlèchargiéd-lo, ôtrament volyéd changiér son nom.",
+Semble étre n’émâge en talye rèduita ''(figura)''.
+Se vos éd cel’émâge en plêna rèsolucion, tèlèchargiéd-la, ôtrament changiéd lo sin nom, se vos plét.",
 'fileexists-forbidden' => 'Un fichiér avouéc cél nom ègziste ja et pôt pas étre ècllafâ.
-Se vos voléd adés tèlèchargiér voutron fichiér, volyéd tornar arriér et pués utilisar un novél nom.
+Se vos voléd adés tèlèchargiér voutron fichiér, se vos plét tornâd arriér et pués empleyéd un novél nom.
 [[File:$1|thumb|center|$1]]',
-'fileexists-shared-forbidden' => 'Un fichiér avouéc cél nom ègziste ja dens lo dèpôt de fichiérs partagiê.
-Se vos voléd adés tèlèchargiér voutron fichiér, volyéd tornar arriér et pués utilisar un novél nom.
+'fileexists-shared-forbidden' => 'Un fichiér avouéc cél nom ègziste ja dedens lo dèpôt de fichiérs partagiê.
+Se vos voléd adés tèlèchargiér voutron fichiér, se vos plét tornâd arriér et pués empleyéd un novél nom.
 [[File:$1|thumb|center|$1]]',
 'file-exists-duplicate' => 'Cél fichiér est un doblo {{PLURAL:$1|de ceti fichiér|de cetos fichiérs}} :',
-'file-deleted-duplicate' => 'Un fichiér pariér a ceti ([[:$1]]) at ja étâ suprimâ.
+'file-deleted-duplicate' => 'Un fichiér pariér a ceti ([[:$1]]) est ja étâ suprimâ.
 Vos devriâd controlar lo jornal de les suprèssions de cél fichiér devant que lo tornar tèlèchargiér.',
-'uploadwarning' => 'Atencion !',
-'uploadwarning-text' => 'Changiéd la dèscripcion du fichiér et pués tornâd èprovar.',
-'savefile' => 'Sôvar lo fichiér',
+'uploadwarning' => 'Semonce pendent lo tèlèchargement',
+'uploadwarning-text' => 'Se vos plét, changiéd la dèscripcion du fichiér ce-desot et pués tornâd èprovar.',
+'savefile' => 'Encartar lo fichiér',
 'uploadedimage' => 'at tèlèchargiê « [[$1]] »',
-'overwroteimage' => 'at tèlèchargiê una novèla vèrsion de « [[$1]] »',
-'uploaddisabled' => 'Tèlèchargements dèsactivâs',
-'copyuploaddisabled' => 'Tèlèchargement de fichiér per URL dèsactivâ.',
-'uploadfromurl-queued' => 'Voutron tèlèchargement at étâ betâ dens la fela d’atenta.',
-'uploaddisabledtext' => 'Lo tèlèchargement de fichiérs est dèsactivâ.',
-'php-uploaddisabledtext' => 'Lo tèlèchargement de fichiérs at étâ dèsactivâ dens PHP.
-Volyéd controlar lo chouèx de configuracion « file_uploads ».',
-'uploadscripted' => 'Cél fichiér contint de code HTML ou ben un scripte que porrêt étre entèrprètâ de façon fôssa per un navigator vouèbe.',
-'uploadvirus' => 'Cél fichiér contint un virus ! Por més de dètalys, vêde : $1',
-'uploadjava' => 'O est un fichiér ZIP que contint un fichiér Java .class.
-Lo tèlèchargement de fichiérs Java est pas ôtorisâ, perce que pôvont entrênar des rèstriccions de sècuritât.',
+'overwroteimage' => 'at tèlèchargiê na novèla vèrsion de « [[$1]] »',
+'uploaddisabled' => 'Tèlèchargements dèsactivâs.',
+'copyuploaddisabled' => 'Tèlèchargement per URL dèsactivâ.',
+'uploadfromurl-queued' => 'Voutron tèlèchargement est étâ betâ dedens la renche d’atenta.',
+'uploaddisabledtext' => 'Los tèlèchargements de fichiérs sont dèsactivâs.',
+'php-uploaddisabledtext' => 'Los tèlèchargements de fichiérs sont dèsactivâs dedens PHP.
+Se vos plét, controlâd la configuracion de « file_uploads ».',
+'uploadscripted' => 'Cél fichiér contint de code HTML ou ben un scripte que porrêt étre entèrprètâ a tôrt per un navigator Vouèbe.',
+'uploadvirus' => 'Cél fichiér contint un virus !
+Dètalys : $1',
+'uploadjava' => 'O est un fichiér ZIP que contint un fichiér Java « .class ».
+Lo tèlèchargement de fichiérs Java est pas ôtorisâ, pôvont èvitar des rèstriccions de sècuritât.',
 'upload-source' => 'Fichiér sôrsa',
 'sourcefilename' => 'Nom du fichiér sôrsa :',
 'sourceurl' => 'URL sôrsa :',
 'destfilename' => 'Nom du fichiér de dèstinacion :',
-'upload-maxfilesize' => 'Talye la ples granta du fichiér : $1',
+'upload-maxfilesize' => 'Talye maximon du fichiér : $1',
 'upload-description' => 'Dèscripcion du fichiér',
 'upload-options' => 'Chouèx de tèlèchargement',
 'watchthisupload' => 'Siuvre ceti fichiér',
-'filewasdeleted' => 'Un fichiér avouéc cél nom at ja étâ tèlèchargiê, et pués suprimâ.
+'filewasdeleted' => 'Un fichiér avouéc cél nom est ja étâ tèlèchargiê et pués suprimâ.
 Vos devriâd controlar lo $1 devant que lo tornar tèlèchargiér.',
-'filename-bad-prefix' => "Lo nom du fichiér que vos tèlèchargiéd comence per '''« $1 »''' qu’est tipicament un nom balyê ôtomaticament per los aparèlys-fotô numericos.
-Volyéd chouèsir un nom de fichiér dèscriptif.",
+'filename-bad-prefix' => "Lo nom du fichiér que vos tèlèchargiéd comence per '''« $1 »''' qu’est en g·ènèral un nom pas dèscriptif balyê ôtomaticament per los aparèlys-fotô numericos.
+Se vos plét, chouèsésséd un nom ples dèscriptif por voutron fichiér.",
 'filename-prefix-blacklist' => ' #<!-- lèssiéd ceta legne justo d’ense --> <pre>
 # La sintaxa est ceta :
 #  * Tot tèxto que siut un « # » tant qu’a la fin de la legne est un comentèro.
@@ -1833,68 +1871,83 @@ PICT # de totes sôrtes
  #</pre> <!-- lèssiéd ceta legne justo d’ense -->',
 'upload-success-subj' => 'Tèlèchargement fêt avouéc reusséta',
 'upload-success-msg' => 'Voutron tèlèchargement dês [$2] at reussi. Il est disponiblo ique : [[:{{ns:file}}:$1]]',
-'upload-failure-subj' => 'Problèmo de tèlèchargement',
+'upload-failure-subj' => 'Problèmo pendent lo tèlèchargement',
 'upload-failure-msg' => 'Y at avu un problèmo avouéc voutron tèlèchargement dês [$2] :
 
 $1',
-'upload-warning-subj' => 'Avèrtissement pendent lo tèlèchargement',
-'upload-warning-msg' => 'Un problèmo est arrevâ pendent voutron tèlèchargement dês [$2]. Vos pouede tornar u [[Special:Upload/stash/$1|formulèro de tèlèchargement]] por trovar la solucion.',
+'upload-warning-subj' => 'Semonce pendent lo tèlèchargement',
+'upload-warning-msg' => 'Y at avu un problèmo avouéc voutron tèlèchargement dês [$2]. Vos pouede tornar u [[Special:Upload/stash/$1|formulèro de tèlèchargement]] por trovar la sina solucion.',
 
 'upload-proto-error' => 'Protocolo fôx',
-'upload-proto-error-text' => 'Lo tèlèchargement a distance at fôta des URLs que començont per <code>http://</code> ou ben <code>ftp://</code>.',
-'upload-file-error' => 'Èrror de dedens',
-'upload-file-error-text' => 'Una èrror de dedens est arrevâ en volent fâre un fichiér temporèro sur lo sèrvor.
-Vos volyéd veriér vers un [[Special:ListUsers/sysop|administrator]].',
-'upload-misc-error' => 'Èrror encognua pendent lo tèlèchargement',
-'upload-misc-error-text' => 'Una èrror encognua est arrevâ pendent lo tèlèchargement.
-Volyéd controlar que l’URL est valida et accèssibla, et pués tornâd èprovar.
+'upload-proto-error-text' => 'Lo tèlèchargement a distance at fôta dURLs que començont per <code>http://</code> ou ben <code>ftp://</code>.',
+'upload-file-error' => 'Fôta de dedens',
+'upload-file-error-text' => 'Na fôta de dedens est arrevâye en volent fâre un fichiér temporèro sur lo sèrvior.
+Se vos plét, veriéd-vos vers un [[Special:ListUsers/sysop|administrator]].',
+'upload-misc-error' => 'Fôta encognua pendent lo tèlèchargement',
+'upload-misc-error-text' => 'Na fôta encognua est arrevâye pendent lo tèlèchargement.
+Se vos plét, controlâd que l’URL est justa et accèssibla, et pués tornâd èprovar.
 Se lo problèmo continue, veriéd-vos vers un [[Special:ListUsers/sysop|administrator]].',
 'upload-too-many-redirects' => 'L’URL contint trop de redirèccions',
 'upload-unknown-size' => 'Talye encognua',
-'upload-http-error' => 'Una èrror HTTP est arrevâ : $1',
+'upload-http-error' => 'Na fôta HTTP est arrevâye : $1',
+'upload-copy-upload-invalid-domain' => 'Los tèlèchargements de copies sont pas disponiblos dês ceti domêno.',
 
 # File backend
-'backend-fail-stream' => 'Empossiblo de liére lo fichiér $1.',
-'backend-fail-backup' => 'Empossiblo de sôvar lo fichiér $1.',
+'backend-fail-stream' => 'Empossiblo de tramandar lo fichiér « $1 ».',
+'backend-fail-backup' => 'Empossiblo d’encartar lo fichiér « $1 ».',
 'backend-fail-notexists' => 'Lo fichiér $1 ègziste pas.',
 'backend-fail-hashes' => 'Empossiblo d’avêr los chaplâjos du fichiér por comparèson.',
-'backend-fail-notsame' => 'Un fichiér difèrent ègziste ja por $1 .',
-'backend-fail-invalidpath' => '$1 est pas un chemin de stocâjo valido.',
-'backend-fail-delete' => 'Empossiblo de suprimar lo fichiér $1.',
-'backend-fail-alreadyexists' => 'Lo fichiér $1 ègziste ja.',
-'backend-fail-store' => 'Empossiblo de stocar lo fichiér $1 en $2.',
-'backend-fail-copy' => 'Empossiblo de copiyér lo fichiér $1 vers $2.',
-'backend-fail-move' => 'Empossiblo de dèplaciér lo fichiér $1 vers $2.',
+'backend-fail-notsame' => 'Un fichiér pas pariér ègziste ja a « $1 ».',
+'backend-fail-invalidpath' => '« $1 » est pas un chemin de stocâjo justo.',
+'backend-fail-delete' => 'Empossiblo de suprimar lo fichiér « $1 ».',
+'backend-fail-describe' => 'Empossiblo de changiér les mètadonâs du fichiér « $1 ».',
+'backend-fail-alreadyexists' => 'Lo fichiér « $1 » ègziste ja.',
+'backend-fail-store' => 'Empossiblo de stocar lo fichiér « $1 » dedens « $2 ».',
+'backend-fail-copy' => 'Empossiblo de copiyér lo fichiér « $1 » vers « $2 ».',
+'backend-fail-move' => 'Empossiblo de dèplaciér lo fichiér « $1 » vers « $2 ».',
 'backend-fail-opentemp' => 'Empossiblo d’uvrir lo fichiér temporèro.',
 'backend-fail-writetemp' => 'Empossiblo d’ècrire dedens lo fichiér temporèro.',
 'backend-fail-closetemp' => 'Empossiblo de cllôre lo fichiér temporèro.',
-'backend-fail-read' => 'Empossiblo de liére lo fichiér $1.',
-'backend-fail-create' => 'Empossiblo d’ècrire lo fichiér $1.',
+'backend-fail-read' => 'Empossiblo de liére lo fichiér « $1 ».',
+'backend-fail-create' => 'Empossiblo d’ècrire lo fichiér « $1 ».',
+'backend-fail-maxsize' => 'Empossiblo d’ècrire lo fichiér « $1 » perce qu’il est ples grôs {{PLURAL:$2|qu’un octèt|que $2 octèts}}.',
+'backend-fail-readonly' => "Ora lo sistèmo de stocâjo « $1 » est justo en lèctura. La rêson balyêe est : « ''$2'' »",
+'backend-fail-synced' => 'Lo fichiér « $1 » est dens un ètat dèsordonâ dedens los sistèmos de stocâjo de dedens',
+'backend-fail-connect' => 'Empossiblo de sè branchiér u sistèmo de stocâjo « $1 ».',
+'backend-fail-internal' => 'Na fôta encognua est arrevâye dedens lo sistèmo de stocâjo « $1 ».',
+'backend-fail-contenttype' => 'Empossiblo de dètèrmenar lo tipo de contegnu du fichiér a stocar dedens « $1 ».',
+'backend-fail-batchsize' => 'Lo sistèmo de stocâjo at balyê na pârt de $1 {{PLURAL:$1|opèracion|opèracions}} de fichiér ; la limita est $2 {{PLURAL:$2|opèracion|opèracions}}.',
+'backend-fail-usable' => 'Empossiblo de liére d’ècrire lo fichiér « $1 » a côsa de pèrmissions ensufisentes ou ben de rèpèrtouèros / conteniors manquents.',
+
+# File journal errors
+'filejournal-fail-dbconnect' => 'Empossiblo de sè branchiér a la bâsa de donâs du jornal por lo sistèmo de stocâjo « $1 ».',
+'filejournal-fail-dbquery' => 'Empossiblo de betar a jorn la bâsa de donâs du jornal por lo sistèmo de stocâjo « $1 ».',
 
 # Lock manager
-'lockmanager-notlocked' => 'Empossiblo de dèvèrrolyér « $1 » ; el est pas vèrrolyê.',
+'lockmanager-notlocked' => 'Empossiblo de dèvèrrolyér « $1 » ; il est pas vèrrolyê.',
 'lockmanager-fail-closelock' => 'Empossiblo de cllôre lo fichiér de vèrroly por « $1 ».',
 'lockmanager-fail-deletelock' => 'Empossiblo de suprimar lo fichiér de vèrroly por « $1 ».',
 'lockmanager-fail-acquirelock' => 'Empossiblo d’avêr lo vèrroly por « $1 ».',
 'lockmanager-fail-openlock' => 'Empossiblo d’uvrir lo fichiér de vèrroly por « $1 ».',
 'lockmanager-fail-releaselock' => 'Empossiblo de relâchiér lo vèrroly por « $1 ».',
-'lockmanager-fail-db-bucket' => 'Empossiblo de sè veriér vers prod de bâses de balyês de vèrrolyâjo dedens lo godèt $1.',
-'lockmanager-fail-db-release' => 'Empossiblo de relâchiér los vèrrolys sur la bâsa de balyês $1.',
-'lockmanager-fail-svr-release' => 'Empossiblo de relâchiér los vèrrolys sur lo sèrvor $1.',
+'lockmanager-fail-db-bucket' => 'Empossiblo de sè veriér vers prod de bâses de donâs de vèrroly dedens la sèlye $1.',
+'lockmanager-fail-db-release' => 'Empossiblo de relâchiér los vèrrolys sur la bâsa de donâs $1.',
+'lockmanager-fail-svr-acquire' => 'Empossiblo d’avêr des vèrrolys sur lo sèrvior $1.',
+'lockmanager-fail-svr-release' => 'Empossiblo de relâchiér los vèrrolys sur lo sèrvior $1.',
 
 # ZipDirectoryReader
-'zip-file-open-error' => 'Una èrror est arrevâ pendent l’uvèrtura du fichiér ZIP por contrôlo.',
-'zip-wrong-format' => 'Lo fichiér spècefiâ est pas un fichiér ZIP.',
-'zip-bad' => 'Lo fichiér est un fichiér ZIP corrompu ou ben iliésiblo.
-Pôt pas étre controlâ tot drêt por la sècuritât.',
-'zip-unsupported' => 'Lo fichiér est un fichiér ZIP qu’utilise ZIP pas recognues per MediaWiki.
-Pôt pas étre controlâ tot drêt por la sècuritât.',
+'zip-file-open-error' => 'Na fôta est arrevâye pendent l’uvèrtura du fichiér por los contrôlos ZIP.',
+'zip-wrong-format' => 'Lo fichiér spècifiâ est pas un fichiér ZIP.',
+'zip-bad' => 'Lo fichiér est un fichiér ZIP corrompu ou ben ôtrament iliésiblo.
+Pôt pas étre controlâ coment fôt por la sècuritât.',
+'zip-unsupported' => 'Lo fichiér est un fichiér ZIP qu’emplèye des fonccionalitâts ZIP pas recognues per MediaWiki.
+Pôt pas étre controlâ coment fôt por la sècuritât.',
 
 # Special:UploadStash
-'uploadstash' => 'Cache d’importacion',
-'uploadstash-summary' => 'Ceta pâge balye accès ux fichiérs que sont importâs (ou ben en cors d’importacion), mas sont p’oncor publeyês dens lo vouiqui. Celos fichiérs sont p’oncor visiblos, solament por l’usanciér que los at importâs.',
-'uploadstash-clear' => 'Èfaciér los fichiérs en cache d’importacion',
-'uploadstash-nofiles' => 'Vos avéd gins de fichiér en cache d’importacion.',
+'uploadstash' => 'Cacho de tèlèchargement',
+'uploadstash-summary' => 'Ceta pâge balye accès ux fichiérs que sont tèlèchargiês ou ben en cors de tèlèchargement, mas sont p’oncor publeyês dedens lo vouiqui. Celos fichiérs sont p’oncor visiblos, solament por l’utilisator que los at tèlèchargiês.',
+'uploadstash-clear' => 'Èfaciér los fichiérs en cacho',
+'uploadstash-nofiles' => 'Vos éd gins de fichiér en cacho.',
 'uploadstash-badtoken' => 'L’ègzécucion de cela accion at pas reussia, pôt-étre perce que voutres enformacions de branchement ont èxpirâs. Tornâd èprovar.',
 'uploadstash-errclear' => 'L’èfacement des fichiérs at pas reussi.',
 'uploadstash-refresh' => 'Rafrèchir la lista des fichiérs',
@@ -1962,7 +2015,7 @@ Quand el est filtrâ per usanciér, solament los fichiérs que la vèrsion la pl
 # File description page
 'file-anchor-link' => 'Fichiér',
 'filehist' => 'Historico du fichiér',
-'filehist-help' => 'Clicar sur una dâta et hora por vêre lo fichiér coment il ére a cél moment.',
+'filehist-help' => 'Clicar sur na dâta et hora por vêre lo fichiér coment il ére a cél moment.',
 'filehist-deleteall' => 'suprimar tot',
 'filehist-deleteone' => 'suprimar',
 'filehist-revert' => 'rètablir',
@@ -2020,7 +2073,7 @@ La dèscripcion de sa [$2 pâge de dèscripcion] est montrâ ce-desot.',
 'filedelete-nofile-old' => "Ègziste gins de vèrsion arch·ivâ de '''$1''' avouéc los atributs spècefiâs.",
 'filedelete-otherreason' => 'Ôtra rêson / rêson de ples :',
 'filedelete-reason-otherlist' => 'Ôtra rêson',
-'filedelete-reason-dropdown' => '* Rêsons de suprèssion les ples corentes
+'filedelete-reason-dropdown' => '*Rêsons corentes de suprèssion
 ** Violacion du drêt d’ôtor
 ** Fichiér en doblo',
 'filedelete-edit-reasonlist' => 'Changiér les rêsons de suprèssion',
@@ -2042,8 +2095,8 @@ Entrâ : ''tipo de contegnu''/''sot-tipo'', per ègzemplo <code>image/jpeg</code
 
 # Unused templates
 'unusedtemplates' => 'Modèlos inutilisâs',
-'unusedtemplatestext' => 'Ceta pâge liste totes les pâges de l’èspâço de noms « {{ns:template}} » que sont pas encllues dens gins d’ôtra pâge.
-Oubliâd pas de controlar s’y at pas d’ôtros lims de vers los modèlos devant que los suprimar.',
+'unusedtemplatestext' => 'Ceta pâge liste totes les pâges de l’èspâço de noms « {{ns:template}} » que sont pas entrebetâyes dedens niona ôtra pâge.
+Oubliâd pas de controlar s’y at gins d’ôtro lim de vers los modèlos devant que los suprimar.',
 'unusedtemplateswlh' => 'ôtros lims',
 
 # Random page
@@ -2097,13 +2150,14 @@ Les entrâs <del>barrâs</del> ont étâ solucionâs.',
 'withoutinterwiki' => 'Pâges sen lims entèrlengoues',
 'withoutinterwiki-summary' => 'Cetes pâges ont gins de lim de vers d’ôtres lengoues :',
 'withoutinterwiki-legend' => 'Prèfixo',
-'withoutinterwiki-submit' => 'Fâre vêre',
+'withoutinterwiki-submit' => 'Montrar',
 
 'fewestrevisions' => 'Pâges les muens changiês',
 
 # Miscellaneous special pages
 'nbytes' => '$1 octèt{{PLURAL:$1||s}}',
 'ncategories' => '$1 catègorie{{PLURAL:$1||s}}',
+'ninterwikis' => '$1 {{PLURAL:$1|lim entèrvouiqui|lims entèrvouiquis}}',
 'nlinks' => '$1 lim{{PLURAL:$1||s}}',
 'nmembers' => '$1 membro{{PLURAL:$1||s}}',
 'nrevisions' => '$1 vèrsion{{PLURAL:$1||s}}',
@@ -2121,9 +2175,9 @@ Les entrâs <del>barrâs</del> ont étâ solucionâs.',
 'unusedimages' => 'Fichiérs inutilisâs',
 'popularpages' => 'Pâges les ples vues',
 'wantedcategories' => 'Catègories les ples demandâs',
-'wantedpages' => 'Pâges les ples demandâs',
+'wantedpages' => 'Pâges demandâyes',
 'wantedpages-badtitle' => 'Titro envalido dens los rèsultats : $1',
-'wantedfiles' => 'Fichiérs los ples demandâs',
+'wantedfiles' => 'Fichiérs demandâs',
 'wantedfiletext-cat' => 'Cetos fichiérs sont utilisâs, mas ègzistont pas. Los fichiérs de dèpôts a distance pôvont étre listâs mâlgrât qu’ègzistont. Tot celos fôx positifs seront <del>traciês</del>. Pués, les pâges qu’apondont des fichiérs qu’ègzistont pas sont rèpèrtoriyês dedens [[:$1]].',
 'wantedfiletext-nocat' => 'Cetos fichiérs sont utilisâs, mas ègzistont pas. Los fichiérs de dèpôts a distance pôvont étre listâs mâlgrât qu’ègzistont. Tot celos fôx positifs seront <del>traciês</del>.',
 'wantedtemplates' => 'Modèlos los ples demandâs',
@@ -2132,6 +2186,7 @@ Les entrâs <del>barrâs</del> ont étâ solucionâs.',
 'mostlinkedtemplates' => 'Modèlos los ples utilisâs',
 'mostcategories' => 'Pâges qu’utilisont lo més de catègories',
 'mostimages' => 'Fichiérs los ples utilisâs',
+'mostinterwikis' => 'Pâges avouéc lo més de lims entèrvouiquis',
 'mostrevisions' => 'Pâges les ples changiês',
 'prefixindex' => 'Totes les pâges que començont per...',
 'prefixindex-namespace' => 'Totes les pâges avouéc prèfixo (èspâço de noms $1)',
@@ -2153,7 +2208,7 @@ Les entrâs <del>barrâs</del> ont étâ solucionâs.',
 'usereditcount' => '$1 changement{{PLURAL:$1||s}}',
 'usercreated' => 'Fêt{{GENDER:$3||a}} lo $1 a $2',
 'newpages' => 'Pâges novèles',
-'newpages-username' => 'Nom d’usanciér :',
+'newpages-username' => 'Nom d’utilisator :',
 'ancientpages' => 'Pâges les muens dèrriérement changiês',
 'move' => 'Renomar',
 'movethispage' => 'Renomar ceta pâge',
@@ -2166,7 +2221,7 @@ Volyéd notar que d’ôtros setos pôvont avêr un lim drêt de vers un fichié
 'nopagetext' => 'La pâge ciba que vos éd spècefiâ ègziste pas.',
 'pager-newer-n' => '{{PLURAL:$1|ples novèla|$1 ples novèles}}',
 'pager-older-n' => '{{PLURAL:$1|ples vielye|$1 ples vielyes}}',
-'suppress' => 'Supèrvisar',
+'suppress' => 'Ôtar',
 'querypage-disabled' => 'Ceta pâge spèciâla est dèsactivâ por des rêsons de capacitât.',
 
 # Book sources
@@ -2236,8 +2291,8 @@ Protocolos recognus : <code>$1</code> (apondéd gins de cetos dedens voutra rech
 'linksearch-error' => 'Los caractèros j·oquères pôvont étre utilisâs ren qu’u comencement du nom de domêno de l’hôto.',
 
 # Special:ListUsers
-'listusersfrom' => 'Fâre vêre los usanciérs dês :',
-'listusers-submit' => 'Listar',
+'listusersfrom' => 'Fâre vêre los utilisators dês :',
+'listusers-submit' => 'Montrar',
 'listusers-noresult' => 'Gins d’usanciér trovâ.',
 'listusers-blocked' => '(blocâ)',
 
@@ -2245,15 +2300,11 @@ Protocolos recognus : <code>$1</code> (apondéd gins de cetos dedens voutra rech
 'activeusers' => 'Lista ux usanciérs actifs',
 'activeusers-intro' => 'O est una lista ux usanciérs qu’ont ègzèrciê una activitât quinta que seye pendent {{PLURAL:$1|lo jorn passâ|los $1 jorns passâs}}.',
 'activeusers-count' => '$1 {{PLURAL:$1|novél changement|novéls changements}} dens {{PLURAL:$3|lo jorn passâ|los $3 jorns passâs}}',
-'activeusers-from' => 'Fâre vêre los usanciérs dês :',
+'activeusers-from' => 'Fâre vêre los utilisators dês :',
 'activeusers-hidebots' => 'Cachiér los bots',
 'activeusers-hidesysops' => 'Cachiér los administrators',
 'activeusers-noresult' => 'Gins d’usanciér trovâ.',
 
-# Special:Log/newusers
-'newuserlogpage' => 'Jornal de les crèacions de comptos usanciér',
-'newuserlogpagetext' => 'O est un jornal de les crèacions de comptos usanciér.',
-
 # Special:ListGroupRights
 'listgrouprights' => 'Drêts a les tropes d’usanciérs',
 'listgrouprights-summary' => 'Ceta pâge contint una lista a les tropes dèfenies sur ceti vouiqui et pués los drêts d’accès que lor sont associyês.
@@ -2277,9 +2328,11 @@ Y pôt avêr [[{{MediaWiki:Listgrouprights-helppage}}|més d’enformacions]] su
 'mailnologin' => 'Gins d’adrèce d’èxpèdior',
 'mailnologintext' => 'Vos dête étre [[Special:UserLogin|branchiê]] et avêr endicâ una adrèce èlèctronica valida dens voutres [[Special:Preferences|prèferences]] por povêr mandar des mèssâjos a d’ôtros usanciérs.',
 'emailuser' => 'Lui mandar un mèssâjo',
-'emailpage' => 'Mandar un mèssâjo a l’usanciér',
-'emailpagetext' => 'Vos pouede utilisar lo formulèro ce-desot por mandar un mèssâjo a ceti usanciér.
-L’adrèce èlèctronica que vos éd buchiê dens voutres [[Special:Preferences|prèferences]] aparètrat dedens lo champ « Èxpèdior » de voutron mèssâjo ; d’ense, lo dèstinatèro vos porrat rèpondre tot drêt.',
+'emailuser-title-target' => 'Mandar un mèssâjo a cet’utilisat{{GENDER:$1|or|rice}}',
+'emailuser-title-notarget' => 'Mandar un mèssâjo a l’utilisator',
+'emailpage' => 'Mandar un mèssâjo a l’utilisator',
+'emailpagetext' => 'Vos pouede empleyér lo formulèro ce-desot por mandar un mèssâjo a cet’utilisat{{GENDER:$1|or|rice}}.
+L’adrèce èlèctronica que vos éd buchiêye dens voutres [[Special:Preferences|prèferences]] aparètrat dedens lo champ « Èxpèdior » de voutron mèssâjo ; d’ense, lo dèstinatèro vos porrat rèpondre tot drêt.',
 'usermailererror' => 'Èrror dens lo sujèt du mèssâjo :',
 'defemailsubject' => 'Mèssâjo de {{SITENAME}} de l’usanciér « $1 »',
 'usermaildisabled' => 'L’èxpèdicion de mèssâjos entre-mié usanciérs est dèsactivâ',
@@ -2290,7 +2343,7 @@ L’adrèce èlèctronica que vos éd buchiê dens voutres [[Special:Preferences
 'nowikiemailtext' => 'Ceti usanciér at chouèsi de pas recêvre de mèssâjo de la pârt d’ôtros usanciérs.',
 'emailnotarget' => 'Nom d’usanciér u dèstinatèro pas ègzistent ou ben envalido.',
 'emailtarget' => 'Buchiéd lo nom d’usanciér u dèstinatèro',
-'emailusername' => 'Nom d’usanciér :',
+'emailusername' => 'Nom d’utilisator :',
 'emailusernamesubmit' => 'Sometre',
 'email-legend' => 'Mandar un mèssâjo a un ôtro usanciér de {{SITENAME}}',
 'emailfrom' => 'De :',
@@ -2314,12 +2367,12 @@ L’adrèce èlèctronica que vos éd buchiê dens voutres [[Special:Preferences
 'mywatchlist' => 'Lista de survelyence',
 'watchlistfor2' => 'Por $1 $2',
 'nowatchlist' => 'Voutra lista de survelyence contint gins d’èlèment.',
-'watchlistanontext' => 'Vos volyéd $1 por fâre vêre ou changiér los èlèments de voutra lista de survelyence.',
+'watchlistanontext' => 'Vos volyéd $1 por vêre ou ben changiér les piéces de voutra lista de survelyence.',
 'watchnologin' => 'Pas branchiê',
 'watchnologintext' => 'Vos dête étre [[Special:UserLogin|branchiê]] por changiér voutra lista de survelyence.',
 'addwatch' => 'Apondre a la lista de survelyence',
-'addedwatchtext' => "La pâge « [[:$1]] » at étâ apondua a voutra [[Special:Watchlist|lista de survelyence]].
-Los changements a vegnir de ceta pâge et de sa pâge de discussion y seront listâs et la pâge aparètrat '''en grâs''' dedens la [[Special:RecentChanges|lista des dèrriérs changements]] por étre repèrâ ples facilament.",
+'addedwatchtext' => 'La pâge « [[:$1]] » est étâye apondua a voutra [[Special:Watchlist|lista de survelyence]].
+Los changements que vegnont de ceta pâge et de la sina pâge de discussion y seront listâs.',
 'removewatch' => 'Enlevar de la lista de survelyence',
 'removedwatchtext' => 'La pâge « [[:$1]] » at étâ enlevâ de voutra [[Special:Watchlist|lista de survelyence]].',
 'watch' => 'Siuvre',
@@ -2337,7 +2390,7 @@ Los changements a vegnir de ceta pâge et de sa pâge de discussion y seront lis
 'watchlistcontains' => 'Voutra lista de survelyence contint $1 pâge{{PLURAL:$1||s}}.',
 'iteminvalidname' => 'Problèmo avouéc l’èlèment « $1 » : lo nom est envalido.',
 'wlnote' => "Vê-que {{PLURAL:$1|lo dèrriér changement fêt|los '''$1''' dèrriérs changements fêts}} pendent {{PLURAL:$2|l’hora passâ|les '''$2''' hores passâs}}, dês $3, $4.",
-'wlshowlast' => 'Fâre vêre les $1 hores passâs, los $2 jorns passâs ou ben $3 ;',
+'wlshowlast' => 'Montrar les $1 hores passâyes, los $2 jorns passâs ou ben $3',
 'watchlist-options' => 'Chouèx de la lista de survelyence',
 
 # Displayed when you click the "watch" button and it is in the process of watching
@@ -2348,39 +2401,47 @@ Los changements a vegnir de ceta pâge et de sa pâge de discussion y seront lis
 'enotif_mailer' => 'Sistèmo de notificacion per mèssageria èlèctronica de {{SITENAME}}',
 'enotif_reset' => 'Marcar totes les pâges coment visitâs',
 'enotif_impersonal_salutation' => 'Usanciér de {{SITENAME}}',
+'enotif_subject_deleted' => 'La pâge $1 dessus {{SITENAME}} est étâye suprimâye per {{GENDER:$2|$2}}',
+'enotif_subject_created' => 'La pâge $1 dessus {{SITENAME}} est étâye fêta per {{GENDER:$2|$2}}',
+'enotif_subject_moved' => 'La pâge $1 dessus {{SITENAME}} est étâye renomâye per {{GENDER:$2|$2}}',
+'enotif_subject_restored' => 'La pâge $1 dessus {{SITENAME}} est étâye refêta per {{GENDER:$2|$2}}',
+'enotif_subject_changed' => 'La pâge $1 dessus {{SITENAME}} est étâye changiêye per {{GENDER:$2|$2}}',
+'enotif_body_intro_deleted' => 'La pâge $1 dessus {{SITENAME}} est étâye suprimâye lo $PAGEEDITDATE per {{GENDER:$2|$2}}, vêde $3.',
+'enotif_body_intro_created' => 'La pâge $1 dessus {{SITENAME}} est étâye fêta lo $PAGEEDITDATE per {{GENDER:$2|$2}}, vêde $3 por la vèrsion d’ora.',
+'enotif_body_intro_moved' => 'La pâge $1 dessus {{SITENAME}} est étâye renomâye lo $PAGEEDITDATE per {{GENDER:$2|$2}}, vêde $3 por la vèrsion d’ora.',
+'enotif_body_intro_restored' => 'La pâge $1 dessus {{SITENAME}} est étâye refêta lo $PAGEEDITDATE per {{GENDER:$2|$2}}, vêde $3 por la vèrsion d’ora.',
+'enotif_body_intro_changed' => 'La pâge $1 dessus {{SITENAME}} est étâye changiêye lo $PAGEEDITDATE per {{GENDER:$2|$2}}, vêde $3 por la vèrsion d’ora.',
 'enotif_lastvisited' => 'Vêde $1 por tôs los changements dês voutra dèrriére visita.',
 'enotif_lastdiff' => 'Vêde $1 por vêre cél changement.',
-'enotif_anon_editor' => 'usanciér pas encartâ $1',
+'enotif_anon_editor' => 'utilisator anonimo $1',
 'enotif_body' => 'Chier(a) $WATCHINGUSERNAME,
 
+$PAGEINTRO $NEWPAGE
 
-la pâge « $PAGETITLE » de {{SITENAME}} at étâ $CHANGEDORCREATED lo $PAGEEDITDATE per « $PAGEEDITOR », vêde $PAGETITLE_URL por vêre la vèrsion d’ora.
+Rèsumâ du contributor : $PAGESUMMARY $PAGEMINOREDIT
 
-$NEWPAGE
-
-Rèsumâ u contributor : $PAGESUMMARY $PAGEMINOREDIT
-
-Veriéd-vos vers cél contributor :
+Veriéd-vos vers lo contributor :
 mèl. : $PAGEEDITOR_EMAIL
 vouiqui : $PAGEEDITOR_WIKI
 
-Y arat pas d’ôtres notificacions en câs de changements a vegnir, a muens que vos visitâd cela pâge.
-Vos pouede asse-ben tornar inicialisar los drapéls de notificacion por totes les pâges de voutra lista de survelyence.
+Y arat gins d’ôtra notificacion en câs de changements a vegnir, a muens que vos visitâd cela pâge. Vos pouede asse-ben tornar inicialisar los segnalements de notificacion por totes les pâges de voutra lista de survelyence.
 
-             Voutron sistèmo de notificacion de {{SITENAME}}
+Voutron sistèmo de notificacion de {{SITENAME}}
 
 --
-Por changiér los paramètres de notificacion per mèssageria èlèctronica, visitâd
+Por changiér la configuracion de notificacion per mèssageria èlèctronica, visitâd
 {{canonicalurl:{{#special:Preferences}}}}
 
-Por changiér los paramètres de voutra lista de survelyence, visitâd
+Por changiér la configuracion de voutra lista de survelyence, visitâd
 {{canonicalurl:{{#special:EditWatchlist}}}}
 
 Por suprimar la pâge de voutra lista de survelyence, visitâd
 $UNWATCHURL
 
-Retôrn et assistance :
+Avis et assistance de ples :
 {{canonicalurl:{{MediaWiki:Helppage}}}}',
+'created' => 'fêta',
+'changed' => 'changiê',
 
 # Delete
 'deletepage' => 'Suprimar la pâge',
@@ -2405,8 +2466,8 @@ Vêde lo $2 por una lista de les novèles suprèssions.',
 'deletecomment' => 'Rêson :',
 'deleteotherreason' => 'Ôtra rêson / rêson de ples :',
 'deletereasonotherlist' => 'Ôtra rêson',
-'deletereason-dropdown' => '* Rêsons de suprèssion les ples corentes
-** Demanda a l’ôtor
+'deletereason-dropdown' => '*Rêsons corentes de suprèssion
+** Demanda de l’ôtor
 ** Violacion du drêt d’ôtor
 ** Vandalismo',
 'delete-edit-reasonlist' => 'Changiér les rêsons de suprèssion',
@@ -2443,8 +2504,8 @@ Volyéd clicar dessus « Devant », rechargiér la pâge de yô que vos vegnéd,
 
 # Protect
 'protectlogpage' => 'Jornal de les protèccions',
-'protectlogtext' => 'Vê-que una lista des changements de protèccion de les pâges.
-Vêde la [[Special:ProtectedPages|lista de les pâges protègiês]] por la lista de les protèccions que sont ora opèracionèles.',
+'protectlogtext' => 'Vê-que na lista des changements de protèccion de les pâges.
+Vêde la [[Special:ProtectedPages|lista de les pâges protègiêyes]] por la lista de les protèccions que sont ora actives.',
 'protectedarticle' => 'at protègiê « [[$1]] »',
 'modifiedarticleprotection' => 'at changiê lo nivél de protèccion de « [[$1]] »',
 'unprotectedarticle' => 'at enlevâ la protèccion de « [[$1]] »',
@@ -2484,10 +2545,10 @@ Vos pouede changiér lo nivél de protèccion de ceta pâge sen que cen afècte
 'protect-existing-expiry' => 'Dâta d’èxpiracion ègzistenta : $2 a $3',
 'protect-otherreason' => 'Ôtra rêson / rêson de ples :',
 'protect-otherreason-op' => 'Ôtra rêson',
-'protect-dropdown' => '* Rêsons de protèccion les ples corentes
+'protect-dropdown' => '*Rêsons corentes de protèccion
 ** Vandalismo èxcèssif
 ** Spame èxcèssif
-** Conflits de changements contre-productifs
+** Guèrres de changements contre-productives
 ** Pâge a trafic fôrt',
 'protect-edit-reasonlist' => 'Changiér les rêsons de protèccion',
 'protect-expiry-options' => '1 hora:1 hour,1 jorn:1 day,1 semana:1 week,2 semanes:2 weeks,1 mês:1 month,3 mês:3 months,6 mês:6 months,1 an:1 year,sen fin:infinite',
@@ -2509,10 +2570,10 @@ Vos pouede changiér lo nivél de protèccion de ceta pâge sen que cen afècte
 'restriction-level-all' => 'Tôs los nivéls',
 
 # Undelete
-'undelete' => 'Vêre les pâges suprimâs',
-'undeletepage' => 'Vêre et refâre des pâges suprimâs',
+'undelete' => 'Vêre les pâges suprimâyes',
+'undeletepage' => 'Vêre et refâre des pâges suprimâyes',
 'undeletepagetitle' => "'''Ceta lista contint des vèrsions suprimâs de [[:$1|$1]].'''",
-'viewdeletedpage' => 'Vêre les pâges suprimâs',
+'viewdeletedpage' => 'Vêre les pâges suprimâyes',
 'undeletepagetext' => '{{PLURAL:$1|Ceta pâge at étâ suprimâ et sè trove|Cetes pâges ont étâ suprimâs et sè trovont}} dens les arch·ives, de yô que pô{{PLURAL:$1||von}}t adés étre refêt{{PLURAL:$1|a|es}}.
 Les arch·ives pôvont étre èfaciês règuliérement.',
 'undelete-fieldset-title' => 'Refâre les vèrsions',
@@ -2539,12 +2600,12 @@ Vos avéd pôt-étre un crouyo lim, ou ben la vèrsion at possu étre refêta ou
 'undeletedrevisions' => '$1 {{PLURAL:$1|vèrsion refêta|vèrsions refêtes}}',
 'undeletedrevisions-files' => '$1 vèrsion{{PLURAL:$1||s}} et $2 fichiér{{PLURAL:$2||s}} refêts',
 'undeletedfiles' => '$1 {{PLURAL:$1|fichiér refêt|fichiérs refêts}}',
-'cannotundelete' => 'La rèstoracion at pas reussia ;
-un ôtro usanciér at probâblament ja refêt la pâge.',
-'undeletedpage' => "'''La pâge $1 at étâ refêta.'''
+'cannotundelete' => 'Falyita de la rèstoracion :
+$1',
+'undeletedpage' => "'''La pâge $1 est étâye refêta.'''
 
-Vêde lo [[Special:Log/delete|jornal de les suprèssions]] por vêre la lista de les novèles suprèssions et de les novèles rèstoracions.",
-'undelete-header' => 'Vêde lo [[Special:Log/delete|jornal de les suprèssions]] por vêre la lista de les pâges suprimâs dèrriérement.',
+Vêde lo [[Special:Log/delete|jornal de les suprèssions]] por avêr la lista de les novèles suprèssions et rèstoracions.",
+'undelete-header' => 'Vêde lo [[Special:Log/delete|jornal de les suprèssions]] por avêr la lista de les pâges suprimâyes dèrriérement.',
 'undelete-search-title' => 'Rechèrchiér des pâges suprimâs',
 'undelete-search-box' => 'Rechèrchiér des pâges suprimâs',
 'undelete-search-prefix' => 'Montrar les pâges que començont per :',
@@ -2572,7 +2633,7 @@ $1',
 'blanknamespace' => '(Principâl)',
 
 # Contributions
-'contributions' => 'Contribucions a l’usanciér',
+'contributions' => 'Contribucions de l’utilisat{{GENDER:$1|or|rice}}',
 'contributions-title' => 'Lista de les contribucions a l’usanciér $1',
 'mycontris' => 'Contribucions',
 'contribsub2' => 'Por $1 ($2)',
@@ -2581,7 +2642,7 @@ $1',
 'month' => 'Dês lo mês (et devant) :',
 'year' => 'Dês l’an (et devant) :',
 
-'sp-contributions-newbies' => 'Fâre vêre ren que les contribucions ux novéls usanciérs',
+'sp-contributions-newbies' => 'Montrar ren que les contribucions des novéls utilisators',
 'sp-contributions-newbies-sub' => 'Permié los comptos novéls',
 'sp-contributions-newbies-title' => 'Contribucions d’usanciérs permié los comptos novéls',
 'sp-contributions-blocklog' => 'jornal des blocâjos',
@@ -2632,14 +2693,14 @@ Balyéd ce-desot una rêson justa (per ègzemplo en citent les pâges qu’ont 
 'ipbexpiry' => 'Temps devant èxpiracion :',
 'ipbreason' => 'Rêson :',
 'ipbreasonotherlist' => 'Ôtra rêson',
-'ipbreason-dropdown' => '* Rêsons de blocâjo les ples corentes
+'ipbreason-dropdown' => '*Rêsons corentes de blocâjo
 ** Entrebetâ d’enformacions fôsses
-** Suprèssion pas èxplicâ de contegnu de les pâges
-** Entrebetâ rèpètâ de lims de defôr publicitèros (spame)
-** Entrebetâ de contegnu sen gins de significacion et d’ècovelyes dens les pâges
+** Suprèssion de contegnu de les pâges
+** Entrebetâ de lims de defôr publicitèros (spame)
+** Entrebetâ de contegnu sen gins de significacion et d’ècovelyes dedens les pâges
 ** Tentativa d’entimidacion ou ben de torment
 ** Abus d’usâjo d’un mouél de comptos
-** Nom d’usanciér pas accèptâblo, ofensent ou ben difament',
+** Nom d’utilisator pas accèptâblo',
 'ipb-hardblock' => 'Empache los changements des usanciérs encartâs qu’utilisont cela adrèce IP',
 'ipbcreateaccount' => 'Empachiér la crèacion de compto',
 'ipbemailban' => 'Empachiér l’usanciér de mandar des mèssâjos',
@@ -2710,9 +2771,9 @@ Lo jornal des blocâjos est disponiblo ce-desot :',
 Lo jornal de les suprèssions est disponiblo ce-desot :',
 'blocklogentry' => 'at blocâ [[$1]] ; èxpiracion : $2 $3',
 'reblock-logentry' => 'at changiê los paramètres du blocâjo a [[$1]] avouéc una èxpiracion u $2 $3',
-'blocklogtext' => 'O est lo jornal des blocâjos et des dèblocâjos ux usanciérs.
-Les adrèces IP blocâs ôtomaticament sont pas listâs.
-Vêde la [[Special:BlockList|lista des blocâjos]] por vêre los banissements et los blocâjos que sont ora opèracionèls.',
+'blocklogtext' => 'O est lo jornal de les accions de blocâjo et dèblocâjo d’utilisators.
+Les adrèces IP blocâyes ôtomaticament sont pas listâyes.
+Vêde la [[Special:BlockList|lista des blocâjos]] por la lista des banissements et des blocâjos que sont ora actifs.',
 'unblocklogentry' => 'at dèblocâ $1',
 'block-log-flags-anononly' => 'solament los usanciérs pas encartâs',
 'block-log-flags-nocreate' => 'crèacion de compto dèfendua',
@@ -2765,7 +2826,7 @@ Volyéd confirmar qu’o est franc cen que vos voléd fâre.',
 'locknoconfirm' => 'Vos éd pas pouentâ la câsa de confirmacion.',
 'lockdbsuccesssub' => 'Vèrrolyâjo de la bâsa de balyês reussi',
 'unlockdbsuccesssub' => 'Vèrrolyâjo de la bâsa de balyês enlevâ',
-'lockdbsuccesstext' => 'La bâsa de balyês at étâ vèrrolyê.<br />
+'lockdbsuccesstext' => 'La bâsa de donâs est étâye vèrrolyêye.<br />
 Oubliâd pas de [[Special:UnlockDB|la dèvèrrolyér]] quand vos aréd chavonâ voutra opèracion de mantegnence.',
 'unlockdbsuccesstext' => 'La bâsa de balyês at étâ dèvèrrolyê.',
 'lockfilenotwritable' => 'Lo fichiér de vèrrolyâjo de la bâsa de balyês est pas enscriptiblo.
@@ -2931,6 +2992,7 @@ Totes les accions d’importacion entèrvouiqui sont consignês dens lo [[Specia
 'import-interwiki-templates' => 'Encllure tôs los modèlos',
 'import-interwiki-submit' => 'Importar',
 'import-interwiki-namespace' => 'Èspâço de noms de dèstinacion :',
+'import-interwiki-rootpage' => 'Pâge racena de dèstinacion (u chouèx) :',
 'import-upload-filename' => 'Nom du fichiér :',
 'import-comment' => 'Comentèro :',
 'importtext' => 'Volyéd èxportar lo fichiér dês lo vouiqui d’origina en utilisent son [[Special:Export|outil d’èxportacion]].
@@ -2964,6 +3026,7 @@ Volyéd tornar èprovar.',
 'import-invalid-interwiki' => 'Empossiblo d’importar dês lo vouiqui spècefiâ.',
 'import-error-edit' => 'La pâge « $1 » est pas importâ perce que vos éte pas ôtorisâ a la changiér.',
 'import-error-create' => 'La pâge « $1 » est pas importâ perce que vos éte pas ôtorisâ a la fâre.',
+'import-options-wrong' => '{{PLURAL:$2|Crouyo chouèx|Crouyos chouèx}} : <nowiki>$1</nowiki>',
 
 # Import log
 'importlogpage' => 'Jornal de les importacions',
@@ -2994,8 +3057,8 @@ Volyéd tornar èprovar.',
 'tooltip-ca-edit' => 'Vos pouede changiér ceta pâge.
 Volyéd utilisar lo boton de prèvisualisacion devant que sôvar.',
 'tooltip-ca-addsection' => 'Comenciér una novèla sèccion',
-'tooltip-ca-viewsource' => 'Ceta pâge est protègiê.
-Portant, vos en pouede vêre lo tèxto sôrsa.',
+'tooltip-ca-viewsource' => 'Ceta pâge est protègiêye.
+Portant vos en pouede vêre lo sin tèxto sôrsa',
 'tooltip-ca-history' => 'Les vèrsions passâs de ceta pâge (avouéc lors contributors)',
 'tooltip-ca-protect' => 'Protègiér ceta pâge',
 'tooltip-ca-unprotect' => 'Changiér la protèccion de ceta pâge',
@@ -3013,23 +3076,23 @@ Portant, vos en pouede vêre lo tèxto sôrsa.',
 'tooltip-n-portal' => 'Sur lo projèt, cen que vos pouede fâre, yô que trovar les chouses',
 'tooltip-n-currentevents' => 'Trovar les enformacions de fond sur les dèrriéres novèles',
 'tooltip-n-recentchanges' => 'Lista des dèrriérs changements sur lo vouiqui',
-'tooltip-n-randompage' => 'Fâre vêre una pâge a l’hasârd',
+'tooltip-n-randompage' => 'Fâre vêre na pâge a l’hasârd',
 'tooltip-n-help' => 'Éde',
 'tooltip-t-whatlinkshere' => 'Lista de les pâges liyês a ceta',
 'tooltip-t-recentchangeslinked' => 'Lista des dèrriérs changements de les pâges liyês a ceta',
 'tooltip-feed-rss' => 'Flux RSS por ceta pâge',
 'tooltip-feed-atom' => 'Flux Atom por ceta pâge',
-'tooltip-t-contributions' => 'Vêre la lista de les contribucions a ceti usanciér',
+'tooltip-t-contributions' => 'Vêre la lista de les contribucions de cet’utilisator',
 'tooltip-t-emailuser' => 'Mandar un mèssâjo a ceti usanciér',
 'tooltip-t-upload' => 'Tèlèchargiér des fichiérs',
 'tooltip-t-specialpages' => 'Lista de totes les pâges spèciâles',
 'tooltip-t-print' => 'Vèrsion emprimâbla de ceta pâge',
 'tooltip-t-permalink' => 'Lim fixo de vers ceta vèrsion de la pâge',
 'tooltip-ca-nstab-main' => 'Vêre la pâge de contegnu',
-'tooltip-ca-nstab-user' => 'Vêre la pâge usanciér',
-'tooltip-ca-nstab-media' => 'Vêre la pâge de mèdia',
+'tooltip-ca-nstab-user' => 'Vêre la pâge utilisator',
+'tooltip-ca-nstab-media' => 'Vêre la pâge du fichiér mèdia',
 'tooltip-ca-nstab-special' => 'O est una pâge spèciâla, vos la pouede pas changiér.',
-'tooltip-ca-nstab-project' => 'Vêre la pâge du projèt',
+'tooltip-ca-nstab-project' => 'Vêre la pâge projèt',
 'tooltip-ca-nstab-image' => 'Vêre la pâge du fichiér',
 'tooltip-ca-nstab-mediawiki' => 'Vêre lo mèssâjo sistèmo',
 'tooltip-ca-nstab-template' => 'Vêre lo modèlo',
@@ -3038,7 +3101,7 @@ Portant, vos en pouede vêre lo tèxto sôrsa.',
 'tooltip-minoredit' => 'Marcar mos changements coment petiôts',
 'tooltip-save' => 'Sôvar voutros changements',
 'tooltip-preview' => 'Volyéd prèvisualisar voutros changements devant que los sôvar !',
-'tooltip-diff' => 'Pèrmèt de fâre vêre los changements que vos éd fêts.',
+'tooltip-diff' => 'Pèrmèt de montrar los changements que vos éd fêts',
 'tooltip-compareselectedversions' => 'Fâre ressortir les difèrences entre doves vèrsions de ceta pâge',
 'tooltip-watch' => 'Apondre ceta pâge a voutra lista de survelyence',
 'tooltip-watchlistedit-normal-submit' => 'Enlevar los titros',
@@ -3113,11 +3176,40 @@ O est probâblament diu a un lim de vers un seto de defôr qu’aparêt sur la l
 
 # Info page
 'pageinfo-title' => 'Enformacions por « $1 »',
+'pageinfo-header-basic' => 'Enformacions de bâsa',
 'pageinfo-header-edits' => 'Historico des changements',
+'pageinfo-header-restrictions' => 'Protèccion de la pâge',
+'pageinfo-header-properties' => 'Propriètâts de la pâge',
+'pageinfo-display-title' => 'Titro montrâ',
+'pageinfo-default-sort' => 'Cllâf de tri per dèfôt',
+'pageinfo-length' => 'Talye de la pâge (en octèts)',
+'pageinfo-article-id' => 'Numerô de la pâge',
+'pageinfo-language' => 'Lengoua du contegnu de la pâge',
+'pageinfo-robot-policy' => 'Statut de motor de rechèrche',
+'pageinfo-robot-index' => 'Endèxâblo',
+'pageinfo-robot-noindex' => 'Pas endèxâblo',
 'pageinfo-views' => 'Nombro de visualisacions',
 'pageinfo-watchers' => 'Nombro de contributors qu’ont la pâge dedens lor lista de survelyence',
+'pageinfo-redirects-name' => 'Redirèccions de vers ceta pâge',
+'pageinfo-subpages-name' => 'Sot-pâges de ceta pâge',
+'pageinfo-subpages-value' => '$1 ($2 redirèccion{{PLURAL:$2||s}} ; $3 nan-redirèccion{{PLURAL:$3||s}})',
+'pageinfo-firstuser' => 'Crèator de la pâge',
+'pageinfo-firsttime' => 'Dâta de crèacion de la pâge',
+'pageinfo-lastuser' => 'Dèrriér contributor',
+'pageinfo-lasttime' => 'Dâta du dèrriér changement',
 'pageinfo-edits' => 'Soma totâla de changements',
 'pageinfo-authors' => 'Soma totâla d’ôtors difèrents',
+'pageinfo-recent-edits' => 'Nombro de novéls changements (dedens los $1 passâs)',
+'pageinfo-recent-authors' => 'Nombro de novéls ôtors difèrents',
+'pageinfo-magic-words' => '{{PLURAL:$1|Mot magico|Mots magicos}} ($1)',
+'pageinfo-hidden-categories' => '{{PLURAL:$1|Catègorie cachiêye|Catègories cachiêyes}} ($1)',
+'pageinfo-templates' => '{{PLURAL:$1|Modèlo encllu|Modèlos encllus}} ($1)',
+'pageinfo-toolboxlink' => 'Enformacions sur la pâge',
+'pageinfo-redirectsto' => 'Redirige vers',
+'pageinfo-redirectsto-info' => 'enfô',
+'pageinfo-contentpage' => 'Comptâ coment pâge de contegnu',
+'pageinfo-contentpage-yes' => 'Ouè',
+'pageinfo-protect-cascading-yes' => 'Ouè',
 
 # Skin names
 'skinname-standard' => 'Estandârd',
@@ -3133,11 +3225,11 @@ O est probâblament diu a un lim de vers un seto de defôr qu’aparêt sur la l
 # Patrolling
 'markaspatrolleddiff' => 'Marcar coment survelyê',
 'markaspatrolledtext' => 'Marcar ceta pâge coment survelyê',
-'markedaspatrolled' => 'Marcâ coment survelyê',
-'markedaspatrolledtext' => 'La vèrsion chouèsia de [[:$1]] at étâ marcâ coment survelyê.',
+'markedaspatrolled' => 'Marcâye coment survelyêye',
+'markedaspatrolledtext' => 'La vèrsion chouèsia de [[:$1]] est étâye marcâye coment survelyêye.',
 'rcpatroldisabled' => 'La fonccion de survelyence des dèrriérs changements est pas activâ.',
 'rcpatroldisabledtext' => 'La fonccionalitât de survelyence des dèrriérs changements est pas activâ.',
-'markedaspatrollederror' => 'Pôt pas étre marcâ coment survelyê.',
+'markedaspatrollederror' => 'Pôt pas étre marcâye coment survelyêye',
 'markedaspatrollederrortext' => 'Vos dête chouèsir una vèrsion por la povêr marcar coment survelyê.',
 'markedaspatrollederror-noautopatrol' => 'Vos avéd pas lo drêt de marcar voutros prôpros changements coment survelyês.',
 
@@ -3172,6 +3264,7 @@ Se vos l’ègzécutâd, voutron sistèmo pôt étre compromês.",
 'file-info-size-pages' => '$1 × $2 pixèls, talye du fichiér : $3, tipo MIME : $4, $5 pâge{{PLURAL:$5||s}}',
 'file-nohires' => 'Gins de rèsolucion ples hôta disponibla.',
 'svg-long-desc' => 'Fichiér SVG, rèsolucion de $1 × $2 pixèls, talye : $3',
+'svg-long-error' => 'Fichiér SVG envalido : $1',
 'show-big-image' => 'Émâge en rèsolucion ples hôta',
 'show-big-image-preview' => 'Talye de ceti apèrçu : $1.',
 'show-big-image-other' => '{{PLURAL:$2|Ôtra rèsolucion|Ôtres rèsolucions}} : $1.',
@@ -3189,10 +3282,10 @@ Se vos l’ègzécutâd, voutron sistèmo pôt étre compromês.",
 'newimages-legend' => 'Nom du fichiér',
 'newimages-label' => 'Nom du fichiér (ou ben una partia de ceti) :',
 'showhidebots' => '($1 los bots)',
-'noimages' => 'Gins d’émâge a fâre vêre.',
+'noimages' => 'Gins de fichiér a fâre vêre.',
 'ilsubmit' => 'Rechèrchiér',
 'bydate' => 'per dâta',
-'sp-newimages-showfrom' => 'Fâre vêre los novéls fichiérs dês lo $1 a $2',
+'sp-newimages-showfrom' => 'Montrar los novéls fichiérs dês lo $1 a $2',
 
 # Video information, used by Language::formatTimePeriod() to format lengths in the above messages
 'days-abbrev' => '$1j',
@@ -3201,6 +3294,7 @@ Se vos l’ègzécutâd, voutron sistèmo pôt étre compromês.",
 'hours' => '$1 hor{{PLURAL:$1|a|es}}',
 'days' => '$1 jorn{{PLURAL:$1||s}}',
 'ago' => 'cen fât $1',
+'just-now' => 'drêt-ora',
 
 # Bad image list
 'bad_image_list' => 'Lo format est ceti :
@@ -3213,8 +3307,8 @@ Los ôtros lims sur la méma legne sont considèrâs coment des èxcèpcions, pe
 'metadata' => 'Mètabalyês',
 'metadata-help' => 'Ceti fichiér contint des enformacions de ples, probâblament apondues per l’aparèly-fotô numerico ou ben lo scanor utilisâ por lo fâre.
 Se lo fichiér at étâ changiê dês son ètat originâl, quârques dètalys pôvont pas reflètar a chavon l’émâge changiê.',
-'metadata-expand' => 'Fâre vêre les enformacions dètalyês',
-'metadata-collapse' => 'Cachiér les enformacions dètalyês',
+'metadata-expand' => 'Montrar los dètalys ètendus',
+'metadata-collapse' => 'Cachiér los dètalys ètendus',
 'metadata-fields' => 'Los champs de mètabalyês d’émâge listâs dens ceti mèssâjo seront encllus dens la pâge de dèscripcion de l’émâge quand la trâbla de mètabalyês serat rèduita.
 Los ôtros champs seront cachiês per dèfôt.
 * make
@@ -3975,7 +4069,7 @@ Les émâges sont montrâs dens lor plêna rèsolucion, los ôtros fichiérs son
 'compare-rev1' => 'Vèrsion 1',
 'compare-rev2' => 'Vèrsion 2',
 'compare-submit' => 'Comparar',
-'compare-invalid-title' => 'Lo titro que vos éd spècefiâ est fôx.',
+'compare-invalid-title' => 'Lo titro que vos éd spècifiâ est envalido.',
 'compare-title-not-exists' => 'Lo titro que vos éd spècefiâ ègziste pas.',
 'compare-revision-not-exists' => 'La vèrsion que vos éd spècefiâ ègziste pas.',
 
@@ -4028,13 +4122,16 @@ Les émâges sont montrâs dens lor plêna rèsolucion, los ôtros fichiérs son
 'logentry-move-move-noredirect' => '$1 at dèplaciê la pâge $3 vers $4 sen lèssiér una redirèccion',
 'logentry-move-move_redir' => '$1 at dèplaciê la pâge $3 vers $4 en ècrasent sa redirèccion',
 'logentry-move-move_redir-noredirect' => '$1 at dèplaciê la pâge $3 vers $4 en ècrasent sa redirèccion sen lèssiér una redirèccion',
-'logentry-patrol-patrol' => '$1 at marcâ la vèrsion $4 de la pâge $3 coment survelyê',
-'logentry-patrol-patrol-auto' => '$1 at marcâ ôtomaticament la vèrsion $4 de la pâge $3 coment survelyê',
-'logentry-newusers-newusers' => '$1 at fêt un compto usanciér',
-'logentry-newusers-create' => '$1 at fêt un compto usanciér',
-'logentry-newusers-create2' => '$1 at fêt un compto usanciér $3',
+'logentry-patrol-patrol' => '$1 at marcâ la vèrsion $4 de la pâge $3 coment controlâye',
+'logentry-patrol-patrol-auto' => '$1 at marcâ ôtomaticament la vèrsion $4 de la pâge $3 coment controlâye',
+'logentry-newusers-newusers' => 'Lo compto utilisator $1 est étâ fêt',
+'logentry-newusers-create' => 'Lo compto utilisator $1 est étâ fêt',
+'logentry-newusers-create2' => 'Lo compto utilisator $3 est étâ fêt per $1',
 'logentry-newusers-autocreate' => 'Lo compto $1 at étâ fêt ôtomaticament',
-'newuserlog-byemail' => 'contresegno mandâ per mèssageria èlèctronica',
+'logentry-rights-rights' => '$1 at changiê l’apartegnence a la tropa por « $3 » de $4 a $5',
+'logentry-rights-rights-legacy' => '$1 at changiê l’apartegnence a la tropa por « $3 »',
+'logentry-rights-autopromote' => '$1 est étâ nomâ ôtomaticament de $4 a $5',
+'rightsnone' => '(nion)',
 
 # Feedback
 'feedback-bugornote' => 'Se vos éte prèst a dècrire un problèmo tècnico en dètaly, volyéd [$1 signalar una cofierie].
@@ -4072,7 +4169,7 @@ Les émâges sont montrâs dens lor plêna rèsolucion, los ôtros fichiérs son
 'api-error-filetype-banned' => 'Cél tipo de fichiér est dèfendu.',
 'api-error-filetype-banned-type' => '$1 {{PLURAL:$4|est pas un tipo de fichiér ôtorisâ|sont pas des tipos de fichiérs ôtorisâs}}. {{PLURAL:$3|Lo tipo de fichiér ôtorisâ est|Los tipos de fichiérs ôtorisâs sont}} $2.',
 'api-error-filetype-missing' => 'L’èxtension du fichiér est manquenta.',
-'api-error-hookaborted' => 'Lo changement que vos éd tâchiê de fâre at étâ arrètâ per un grèfon d’una èxtension.',
+'api-error-hookaborted' => 'Lo changement que vos éd tâchiê de fâre est étâ anulâ per n’èxtension.',
 'api-error-http' => 'Èrror de dedens : sè pôt pas branchiér u sèrvor.',
 'api-error-illegal-filename' => 'Lo nom du fichiér est pas ôtorisâ.',
 'api-error-internal-error' => 'Èrror de dedens : quârque-ren s’est mâl passâ pendent lo trètament de voutron tèlèchargement sur lo vouiqui.',
index 9cb1bd0..4d0846f 100644 (file)
@@ -67,7 +67,7 @@ $messages = array(
 
 'underline-always' => 'Åltens',
 'underline-never' => 'uler',
-'underline-default' => 'oufhingi foon browser-önjstaling',
+'underline-default' => 'Komt üüb dan browser uun',
 
 # Font style option in Special:Preferences
 'editfont-style' => 'Schraftfamiili for di takst onj dåt beårbingswaning:',
@@ -152,8 +152,9 @@ $messages = array(
 'newwindow' => '(wårt önj en nai waning ääm mååged)',
 'cancel' => 'Oufbreege',
 'moredotdotdot' => 'Mör ...',
-'mypage' => 'Äine sid',
-'mytalk' => 'Äine diskusjoon',
+'morenotlisted' => 'Öödern, ei apfeerd ...',
+'mypage' => 'Sidj',
+'mytalk' => 'Diskusjuun',
 'anontalk' => 'Diskusjoonssid foon jüdeer IP',
 'navigation' => 'Navigasjoon',
 'and' => '&#32;än',
@@ -175,7 +176,7 @@ $messages = array(
 'vector-action-protect' => 'Sääkere',
 'vector-action-undelete' => 'Wi mååge',
 'vector-action-unprotect' => 'Frijeewe unti späre',
-'vector-simplesearch-preference' => 'Ütwidede säkforsliike aktiwiire (bloot vector)',
+'vector-simplesearch-preference' => 'Ianfacher sjüklist iinstel (bluas bi Vector)',
 'vector-view-create' => 'Mååge',
 'vector-view-edit' => 'Beårbe',
 'vector-view-history' => 'Dootäifärsjoone',
@@ -185,6 +186,7 @@ $messages = array(
 'namespaces' => 'Noomerüme',
 'variants' => 'Fariante',
 
+'navigation-heading' => 'Nawigatsjuun',
 'errorpagetitle' => 'Fäägel',
 'returnto' => 'Tubääg tu jü side $1.',
 'tagline' => 'Üt {{SITENAME}}',
@@ -285,6 +287,10 @@ Sii jü [[Special:Version|Färsjoonssid]]',
 'youhavenewmessages' => 'Dü hääst $1 aw din diskusjoonssid ($2).',
 'newmessageslink' => 'naie tisinge',
 'newmessagesdifflink' => 'Leest änring',
+'youhavenewmessagesfromusers' => 'Dü heest $1 faan {{PLURAL:$3|en öödern brüker|$3 ööder brükern}} ($2).',
+'youhavenewmessagesmanyusers' => 'Dü heest $1 faan flook ööder brükern ($2).',
+'newmessageslinkplural' => '{{PLURAL:$1|ian nei nooracht|nei noorachten}}',
+'newmessagesdifflinkplural' => 'leetst {{PLURAL:$1|feranrang|feranrangen}}',
 'youhavenewmessagesmulti' => 'Dü hääst nai tisinge aw $1',
 'editsection' => 'Beårbe',
 'editsection-brackets' => '[$1]',
@@ -339,12 +345,12 @@ Dåt koon uk en fäägel önjjeewe önj e software, jü {{SITENAME}} brúkt.',
 # General errors
 'error' => 'Fäägel',
 'databaseerror' => 'Dootebånkfäägel',
-'dberrortext' => 'Deer as en dootebånk-fäägel aptrin.
-Di grün koon en programiirfäägel weese.
-Jü leest dootebånk ouffrååg wus:
-<blockquote><tt>$1</tt></blockquote>
-üt jü funksjoon „<tt>$2</tt>“.
-Jü dootebank mäldede di fäägel „<tt>$3: $4</tt>“.',
+'dberrortext' => 'Diar as wat skiaf gingen mä det dootenbeenk.
+Ferlicht as det software ei bi a rä.
+Det leetst uunfraag tu\'t dootenbeenk wiar:
+<blockquote><code>$1</code></blockquote>
+faan det funktsjuun "<code>$2</code>".
+Det dootenbeenk swaaret mä "<samp>$3: $4</samp>".',
 'dberrortextcl' => 'Dåt jäif en süntaksfäägel önj e dootebånk-ouffrååch.
 Jü leest dootebånkouffrååch wus  „$1“ üt e funksjoon „<tt>$2</tt>“.
 Jü dootebånk mälded jü fäägel: „<tt>$3: $4</tt>“.',
@@ -391,12 +397,13 @@ Ouffrååch: $2',
 'viewsource-title' => 'Code faan sidj $1 uunluke',
 'actionthrottled' => 'Aksjoonstål limitiird',
 'actionthrottledtext' => 'Dü hääst jüdeer aksjoon tu oofding bane en kort tidrüm ütfjard. Wees sü gödj än täiw en påår minuute än fersäk dåt et dan foon naien.',
-'protectedpagetext' => 'Jüdeer sid as for dåt beårben späred.',
+'protectedpagetext' => 'Detdiar sidj as seekert wurden, am dat diar näämen wat feranert.',
 'viewsourcetext' => 'Dü koost jü kwäle foon jüdeer sid bekiike än kopiire.',
 'viewyourtext' => "Dü könst di code faan '''din feranrang''' faan detdiar sidj uunluke an kopiare:",
-'protectedinterface' => 'Jüdeer sid önjthålt takst for ju brükerouerfläche foon e software än as späred, am masbrük tu ferhanern.',
+'protectedinterface' => 'Üüb detdiar sidj stäänt tekst för det software faan detheer wiki an as seekert wurden, am dat näämen diar wat feranert.
+Dü könst [//translatewiki.net/ translatewiki.net] faan MediaWiki brük, am auersaatangen för ale wiki projekten tu maagin.',
 'editinginterface' => "'''Paase üüb:''' Üüb detdiar sidj stäänt tekst, diar faan't MediaWiki software brükt woort. Wan dü diar wat feranerst, feranerst dü di skak faan't Nuurdfresk Wikipedia.
-Wan dü wat auersaat wel, maage det mä [//translatewiki.net/wiki/Main_Page?setlang=frr Translatewiki], det as det MediaWiki lokalisiarangsprojekt.",
+Wan dü wat auersaat wel, maage det mä [//translatewiki.net/ translatewiki.net], det as det MediaWiki lokalisiarangsprojekt.",
 'sqlhidden' => 'SCL-ouffrååg ferstäägen',
 'cascadeprotected' => 'Jüdeer sid as for beårbing spärd. Jü as önj {{PLURAL:$1|e füliende sid|da füliende side}}
 önjbünen, {{PLURAL:$1|jü|da}} madels e kaskaadespäropsjoon önj febading hüüljen {{PLURAL:$1|as|san}}:
@@ -412,6 +419,7 @@ Di grünj faan di administraator as: „$3“.',
 'invalidtitle-knownnamespace' => 'Ferkiard auerskraft uun di nöömrüm „$2“ an tekst „$3“',
 'invalidtitle-unknownnamespace' => 'Ferkiard auerskraft uun di ünbekäänd nöömrüm „$1“ an tekst „$2“',
 'exception-nologin' => 'Ei uunmeldet',
+'exception-nologin-text' => 'Det könst dü bluas bewerke, wan dü uunmeldet beest.',
 
 # Virus scanner
 'virus-badscanner' => "Hiinje konfigurasjoon: ünbekånde fiirusscanner: ''$1''",
@@ -423,12 +431,16 @@ Di grünj faan di administraator as: „$3“.',
 
 Dü koost {{SITENAME}} nü anonüüm widerbrüke, unti de wider uner diseelew unti en oudern brükernoome <span class='plainlinks'>[$1 önjmälde]</span>.
 Påås aw, dåt hu side nuch wise koone, dåt dü önjmälded bast, sülung dü ai dan browsercache lääsimååged heest.",
+'welcomeuser' => 'Welkimen, $1!',
+'welcomecreation-msg' => 'Din brükerkonto as iinracht wurden.
+Ferjid det ei, an aachte üüb din [[Special:Preferences|{{SITENAME}} iinstelangen]].',
 'yourname' => 'Brükernoome:',
 'yourpassword' => 'Pååsuurd:',
 'yourpasswordagain' => 'Schriw pååsuurd nuch iinjsen:',
-'remembermypassword' => 'Aw diheere komputer foon duur önjmälde (maksimool for {{PLURAL:$1|däi|deege}})',
+'remembermypassword' => 'Aw diheere komputer foon duur önjmälde (maksimool for $1 {{PLURAL:$1|däi|deege}})',
 'securelogin-stick-https' => 'Eefter önjmälding ma HTTPS ferbünen bliwe',
 'yourdomainname' => 'Din domain:',
+'password-change-forbidden' => 'Üüb detheer wiki könst dü nian paaswurden feranre.',
 'externaldberror' => 'Deer läit en fäägel bai jü äkstärn autentifisiiring for, unti dü möist din äkstärn brükerkonto äi aktualisiire.',
 'login' => 'Önjmälde',
 'nav-login-createaccount' => 'Önjmälde',
@@ -444,7 +456,7 @@ Påås aw, dåt hu side nuch wise koone, dåt dü önjmälded bast, sülung dü
 'gotaccount' => "Dü hääst ål en brükerkonto? '''$1'''.",
 'gotaccountlink' => 'Önjmälde',
 'userlogin-resetlink' => 'Heest dü din login dooten ferjiden?',
-'createaccountmail' => 'ouer E-mail',
+'createaccountmail' => 'E-mail tu det adres oner fersjüür mä en tufelag paaswurd',
 'createaccountreason' => 'Grün:',
 'badretype' => 'Da biise pååsuurde stime ai oueriinj.',
 'userexists' => 'Dideer brükernoome as ål ferjääwen.
@@ -490,9 +502,9 @@ Mälde wi önj eefter dü jü füngen heest.',
 Iir en E-mail foon oudere brükere ouer jü E-mail-funksjoon emfångd wårde koon, mötj jü adräs än har wörklike tuhiirihäid tu dåtheer brükerkonto jarst bestääsied wårde. Wees sü gödj än befülie da haanewisinge önj di bestääsiings-E-mail.',
 'throttled-mailpassword' => 'Deer wörd önj da leeste {{PLURAL:$1|stün|$1 stüne}} ål en nai pååsuurd önjfrååged. Am en misbrük foon jüdeer funksjoon tu ferhanren, koon bloot {{PLURAL:$1|iinjsen pro stün|åle $1 stüne}} en nai pååsuurd önjfrååged wårde.',
 'mailerror' => 'Fäägel bai dåt siinjen foon e E-mail: $1',
-'acct_creation_throttle_hit' => 'Besäkere foon j"heer Wiki, da din IP-adräse brüke, heewe önj e leeste däi {{PLURAL:$1|1 benutserkonto|$1 benutzerkonte}} mååged, wat jü maksimool tuleet tål önj jüdeer tidperioode as.
+'acct_creation_throttle_hit' => 'Besäkere foon jüheer Wiki, da din IP-adräse brüke, heewe önj e leeste däi {{PLURAL:$1|1 brükerkonto|$1 brükerkontos}} mååged, wat jü maksimool tuleet tål önj jüdeer tidperioode as.
 
-Besäkere, da iüheer IP-adräse brüke, koone tu jü tutids niinj benutserkonte mör mrstellen.',
+Besäkere, da jüheer IP-adräse brüke, koone tutids niinj brükerkonto mör inruchte.',
 'emailauthenticated' => 'Din E-mail-adräs word di $2 am e klook $3 bestääsied.',
 'emailnotauthenticated' => 'Din E-mail-adräs as nuch ai bestääsied. Da füliende E-mail-funksjoone stönje jarst eefter erfolchrike bestääsiing tu ferfäiging.',
 'noemailprefs' => 'Jeew en E-mail-adräs önj da önjstalinge önj, deerma da füliende funksjoone tu ferfäiging stönje.',
@@ -518,6 +530,7 @@ Wees sü gödj än täif, bit dü wider ferseechst.',
 # E-mail sending
 'php-mail-error-unknown' => 'Ünbekäänd feeler mä det funktsjuun mail() faan PHP.',
 'user-mail-no-addy' => 'Köö niinj e-mail schake suner e-mail-adres.',
+'user-mail-no-body' => 'Dü wulst en e-mail saner tekst wechsjüür.',
 
 # Change password dialog
 'resetpass' => 'Pååsuurd änre',
@@ -574,6 +587,7 @@ Tidwis paasuurd: $2',
 'changeemail-oldemail' => 'Aktuel e-mail adres',
 'changeemail-newemail' => 'Nei e-mail adres',
 'changeemail-none' => '(niin)',
+'changeemail-password' => 'Din {{SITENAME}} paaswurd:',
 'changeemail-submit' => 'E-mail adres feranre',
 'changeemail-cancel' => 'Ufbreeg',
 
@@ -667,9 +681,12 @@ Bast üt fersiien heer, klik di '''tubääg'''-klänkfläche foon dan browser.",
 'noarticletext' => 'Jüdeer sid önjhålt uugenblaklik nuch nån täkst.
 Dü koost dideere tiitel aw da ouder side [[Special:Search/{{PAGENAME}}|säke]],
 <span class="plainlinks">önj da deertuhiirende [{{fullurl:{{#special:Log}}|page={{FULLPAGENAMEE}}}} logböke säke] unti jüdeer sid [{{fullurl:{{FULLPAGENAME}}|action=edit}} beårbe]</span>.',
-'noarticletext-nopermission' => 'Jüdeer sid önjhålt uugenblaklik nuch nån täkst.
-Dü koost dideere tiitel aw da oudre side [[Special:Search/{{PAGENAME}}|säke]],
-unti<span class="plainlinks">önj da deertuhiirende [{{fullurl:{{#special:Log}}|page={{FULLPAGENAMEE}}}} logböke säke] </span>.',
+'noarticletext-nopermission' => 'Üüb detdiar sidj stäänt noch niks, oober dü mutst diar uk niks iinskriiw.
+Dü könst diar üüb ööder sidjen efter [[Special:Search/{{PAGENAME}}|sjük]] of a <span class="plainlinks">[{{fullurl:{{#special:Log}}|page={{FULLPAGENAME}}}} logbuken uunluke].</span>',
+'missing-revision' => 'Det werjuun #$1 faan det sidj "{{PAGENAME}}" jaft at ei.
+
+Det komt diar miast faan, dat en ual ferwisang stregen wurden as.
+Dü könst det uun\'t [{{fullurl:{{#Special:Log}}/delete|page={{FULLPAGENAMEE}}}} logbuk faan stregen sidjen] efterlees.',
 'userpage-userdoesnotexist' => "Det brükerkonto ''$1'' as ei diar.
 Wel dü detdiar sidj würelk maage/bewerke?",
 'userpage-userdoesnotexist-view' => 'Benjüterkonto "$1" bestoont ai.',
@@ -679,7 +696,6 @@ For informasjoon füliet di leeste üttooch üt dåt benjüterspär-logbök:',
 * '''Firefox / Safari:''' Hual ''Shift'' bi't aktualisiarin, of trak ''Strg an F5'' of ''Strg an R'' (''⌘an R'' üüb en Mac)
 * '''Google Chrome:''' Trak ''Strg an Shift an R'' (''⌘an Shift an R'' üüb en Mac)
 * '''Internet Explorer:''' Hual ''Strg'' bi't aktualisiarin, of trak ''Strg an F5''
-* '''Konqueror:''' Trak ''Aktualisiarin'' of trak ''F5''
 * '''Opera:''' ''Extras - Internetspuren löschen - Individuelle Auswahl - Den kompletten Cache löschen''",
 'usercssyoucanpreview' => "'''Tip:''' Brük di „{{int:showpreview}}“-knoop, am din nai CSS for dåt spiikern tu tästen.",
 'userjsyoucanpreview' => "'''Tip:''' Brük di „{{int:showpreview}}“-knoop, am din nai JavaScript for dåt spiikern tu tästen.",
@@ -696,7 +712,7 @@ For informasjoon füliet di leeste üttooch üt dåt benjüterspär-logbök:',
 'note' => "'''Påås aw:'''",
 'previewnote' => "'''Heer könst dü sä, hü det sidj wurd skal.'''
 Det sidj as oober noch ei seekert!",
-'continue-editing' => 'Widjer bewerke',
+'continue-editing' => "Gung tu't fial för't bewerkin",
 'previewconflict' => 'Dideer forbekiik jeeft di inhålt foon dåt boowerst takstfälj wider. Sü wårt jü sid ütsiinj, wan dü nü spiikerst.',
 'session_fail_preview' => "'''Din werk küd ei ufseekert wurd, diar as wat skiaf gingen.'''
 Fersjük det man noch ans an trak do üüb ''Sid spiikre''.
@@ -736,7 +752,7 @@ Wan dü heer wat iinskrafst, do beest dü diarmä iinferstenen an seekerst tu, d
 '''Auerdreeg nään frääm teksten an bilen saner ferloof!'''",
 'longpageerror' => "'''Error: Dan tekst as {{PLURAL:$1|ian kilobyte|$1 kilobytes}} lung, hi mut oober ei linger wees üs {{PLURAL:$2|ian kilobyte|$2 kilobytes}}.'''Hi koon ei ufspiikerd wurd.",
 'readonlywarning' => "'''PÅÅS AW: Jü dootenbånk wörd for unerhult spärd, sü dåt din änringe tutids ai spiikerd wårde koone.
-Wees sü gödj än sääkre di täkst lokool aw din kompjuuter än fersäk tu n lääsern tidpunkt, da änringe tu ouerdreegen.'''.
+Wees sü gödj än sääkre di täkst lokool aw din kompjuuter än fersäk tun lääsern tidpunkt, da änringe tu ouerdreegen.'''.
 
 Grün for jü späre: $1",
 'protectedpagewarning' => "'''Paase üüb: Detdiar sidj as speret wurden. Bluas administratooren kön det bewerke.'''
@@ -752,7 +768,6 @@ Uun't logbuk stäänt muar diartu:",
 'template-protected' => '(seekert)',
 'template-semiprotected' => '(hualew-seekert)',
 'hiddencategories' => 'Jüdeer sid as lasmoot foon {{PLURAL:$1|1 ferstäägen kategorii|$1 ferstäägene kategoriie}}:',
-'nocreatetitle' => 'Det maagin faan nei sidjen as ei saner aanj mögelk.',
 'nocreatetext' => 'Aw {{SITENAME}} wörd dåt måågen foon naie side begränsed.
 Dü koost bestönjene side änre unti de [[Special:UserLogin|önjmälde unti mååg en account]].',
 'nocreate-loggedin' => 'Dü heest niinj beruchtiging, naie side tu måågen.',
@@ -775,6 +790,15 @@ Jü wörd önjscheened sleeked.',
 'edit-already-exists' => 'Köö niinj nai sid mååge.
 Dåt bestöö ål.',
 'defaultmessagetext' => 'Standard tekst',
+'content-failed-to-parse' => "Parsing faan $2 för't model $1 ging skiaf: $3",
+'invalid-content-data' => 'Diar stäänt wat uun, wat diar ei hen hiart',
+'content-not-allowed-here' => '„$1“ mut ei skrewen wurd üüb sidj [[$2]]',
+
+# Content models
+'content-model-wikitext' => 'wikitekst',
+'content-model-text' => 'normool tekst',
+'content-model-javascript' => 'JavaScript',
+'content-model-css' => 'CSS',
 
 # Parser/template warnings
 'expensive-parserfunction-warning' => 'Woorschauing: Jüdeer sid önjthålt tu fool apteele foon widluftie parserfunksjoone.
@@ -794,6 +818,7 @@ Deer {{PLURAL:$2|mötj ai mör ås 1 apteel|mönje ai mör ås $1 apteele}} wees
 'expansion-depth-exceeded-warning' => 'Detdiar sidj hää tuföl ütjwidjangen (expansion)',
 'parser-unstrip-loop-warning' => 'Diar as en jinsidjag ferwisang',
 'parser-unstrip-recursion-limit' => 'Tuföl jinsidjag ferwisangen bi $1',
+'converter-manual-rule-error' => "Bi't manuel reegel för't spriakferanrang lääpt wat skiaf.",
 
 # "Undo" feature
 'undo-success' => 'Detdiar feranrang koon turag nimen wurd. 
@@ -926,7 +951,9 @@ Dü heest deeraw nåån tugraawe.',
 'revdelete-only-restricted' => "Bi't fersteegen faan di iindrach di $1, am a klook $2 as wat skiaf gingen: Dü könst di iindrach ei föör administratooren fersteeg, saner ööder iinstelangen tu feranrin.",
 'revdelete-reason-dropdown' => "*Grünjer för't striken san miast
 ** Copyright woort ei iinhäälen
-** Persöönelk informatsjuunen, diar näämen wat uungung",
+** Persöönelk informatsjuunen, diar näämen wat uungung
+** Brükernööm as ei tuläät
+** Fülk informatsjuunen",
 'revdelete-otherreason' => 'Ouderen/tubaikaamenden grün:',
 'revdelete-reasonotherlist' => 'Ouderen grün',
 'revdelete-edit-reasonlist' => 'Strikgrüne beårbe',
@@ -979,6 +1006,10 @@ A nawigatsjuun links saat ales weder turag üüb di ual stant.',
 'editundo' => 'tunintemååge',
 'diff-multi' => '({{PLURAL:$1|Ian wersjuun diartesken|$1 wersjuunen diartesken}} faan {{PLURAL:$2|ään brüker|$2 brükern}} {{PLURAL:$1|woort|wurd}} ei uunwiset)',
 'diff-multi-manyusers' => '({{PLURAL:$1|Ian wersjuun diartesken|$1 wersjuunen diartesken}} faan muar üs $2 {{PLURAL:$2|brüker|brükern}} wurd ei uunwiset)',
+'difference-missing-revision' => "{{PLURAL:$2|Ian werjuun|$2 werjuunen}} faan di ferskeel ($1) {{PLURAL:$2|as|san}} ei fünjen wurden.
+
+Det komt diar miast faan, dat en ual ferwisang stregen wurden as.
+Dü könst det uun't [{{fullurl:{{#Special:Log}}/delete|page={{FULLPAGENAMEE}}}} logbuk faan stregen sidjen] efterlees.",
 
 # Search results
 'searchresults' => 'Säkjresultoote',
@@ -1053,7 +1084,7 @@ A nawigatsjuun links saat ales weder turag üüb di ual stant.',
 
 # Preferences page
 'preferences' => 'Önjstalinge',
-'mypreferences' => 'Önjstalinge',
+'mypreferences' => 'Iinstelangen',
 'prefs-edits' => 'Taal faan feranrangen:',
 'prefsnologin' => 'Ai önjmälded',
 'prefsnologintext' => 'Dü skel <span class="plainlinks">[{{fullurl:{{#special:UserLogin}}|returnto=$1}} uunmeldet]</span> wees, am din iinstelangen tu feranrin.',
@@ -1114,7 +1145,7 @@ A nawigatsjuun links saat ales weder turag üüb di ual stant.',
 'timezoneregion-indian' => 'Indik',
 'timezoneregion-pacific' => 'Pasiifik',
 'allowemail' => 'E-Mail foon oudere brükere tulätje',
-'prefs-searchoptions' => 'Säkmöölikhäide',
+'prefs-searchoptions' => 'Sjük',
 'prefs-namespaces' => 'Noomerüme',
 'defaultns' => 'Ouers säk önj jüheer noomerüme:',
 'default' => 'Forinstaling',
@@ -1127,9 +1158,9 @@ Do san jo ual iinstelangen wech.',
 'prefs-emailconfirm-label' => 'E-Mail gudkäänd:',
 'prefs-textboxsize' => "Grate faan't wönang tu bewerkin",
 'youremail' => 'E-mail:',
-'username' => 'Brükernoome:',
-'uid' => 'Brüker ID:',
-'prefs-memberingroups' => 'Lasmoot faan {{PLURAL:$1|brükerskööl|brükersköölen}}:',
+'username' => '{{GENDER:$1|Brükernööm}}:',
+'uid' => '{{GENDER:$1|Brükerkäänang}}:',
+'prefs-memberingroups' => '{{GENDER:$2|Lasmoot}} faan {{PLURAL:$1|brükerskööl|brükersköölen}}:',
 'prefs-registration' => 'Uunmelde-tidj',
 'yourrealname' => 'Rocht nööm:',
 'yourlanguage' => 'Spräke:',
@@ -1198,14 +1229,14 @@ Do san jo ual iinstelangen wech.',
 'group-sysop' => 'Administratooren',
 'group-bureaucrat' => 'Bürokraaten',
 'group-suppress' => 'Oversighter',
-'group-all' => '(aaltumaal)',
+'group-all' => '(Aaltumaal)',
 
-'group-user-member' => '{{GENDER:$1|brüker}}',
-'group-autoconfirmed-member' => '{{GENDER:$1|registriaret brüker}}',
-'group-bot-member' => '{{GENDER:$1|bot}}',
-'group-sysop-member' => '{{GENDER:$1|administraator}}',
-'group-bureaucrat-member' => '{{GENDER:$1|bürokraat}}',
-'group-suppress-member' => '{{GENDER:$1|oversighter}}',
+'group-user-member' => '{{GENDER:$1|Brüker}}',
+'group-autoconfirmed-member' => '{{GENDER:$1|Registriaret brüker}}',
+'group-bot-member' => '{{GENDER:$1|Bot}}',
+'group-sysop-member' => '{{GENDER:$1|Administraator}}',
+'group-bureaucrat-member' => '{{GENDER:$1|Bürokraat}}',
+'group-suppress-member' => '{{GENDER:$1|Oversighter}}',
 
 'grouppage-user' => '{{ns:project}}:Brükern',
 'grouppage-autoconfirmed' => '{{ns:project}}:Registriaret brükern',
@@ -1243,9 +1274,11 @@ Do san jo ual iinstelangen wech.',
 'right-browsearchive' => 'Sjük stregen sidjen',
 'right-sendemail' => 'E-mails tu oudere brükere schake',
 
+# Special:Log/newusers
+'newuserlogpage' => 'Nai-önjmäldings-logbök',
+
 # User rights log
 'rightslog' => 'Ruchte-logbök',
-'rightsnone' => '(-)',
 
 # Associated actions - in the sentence "You do not have permission to X"
 'action-read' => 'jüdeer sid leese',
@@ -1412,9 +1445,6 @@ Det beskriiwang faan't [$2 beskriiwangssidj] woort oner uunwiset.",
 'linksearch-ok' => 'Säk',
 'linksearch-line' => '$2 ferwiset üüb $1',
 
-# Special:Log/newusers
-'newuserlogpage' => 'Nai-önjmäldings-logbök',
-
 # Special:ListGroupRights
 'listgrouprights-members' => '(lasmoote-list)',
 
@@ -1422,15 +1452,11 @@ Det beskriiwang faan't [$2 beskriiwangssidj] woort oner uunwiset.",
 'emailuser' => 'E-mail tu dideere brüker',
 
 # Watchlist
-'watchlist' => 'Eefterkiikliste',
-'mywatchlist' => 'Eefterkiikliste',
+'watchlist' => "Uun't uug behual",
+'mywatchlist' => "Uun't uug behual",
 'watchlistfor2' => 'Foon $1 $2',
-'addedwatchtext' => 'Jü sid „[[:$1]]“ wörd tu din [[Special:Watchlist|eefterkiiklist]] tubaifäiged.
-
-Lääsere änringe bai jüdeer sid än jü deertuhiirende diskusjoonssid wårde deer listed än
-önj e ouersicht foon da [[Special:RecentChanges|leeste änringe]] önj fåtschraft deerstald.
-
-Wan dü jü sid wider foon din eefterkiikliste wächhååle mååst, klik aw jüdeer sid aw „{{int:Unwatch}}“.',
+'addedwatchtext' => "Det sidj „[[:$1]]“ wel dü [[Special:Watchlist|uun't uug behual]].
+Feranerangen faan detdiar sidj wurd üüb detdiar list fäästhäälen.",
 'removedwatchtext' => 'Jü sid „[[:$1]]“ wörd foon din [[Special:Watchlist|eefterkiiklist]] wächhååld.',
 'watch' => 'Kiike eefter',
 'watchthispage' => 'Side eefterkiike',
@@ -1537,7 +1563,8 @@ Di tekst faan det stregen sidj fu bluas administratooren uunwiset.',
 'undeletedrevisions' => '{{PLURAL:$1|1 wersjuun|$1 wersjuunen}} weder iinsteld',
 'undeletedrevisions-files' => '{{PLURAL:$1|1 wersjuun|$1 wersjuunen}} an {{PLURAL:$2|1 datei|$2 datein}} weder iinsteld',
 'undeletedfiles' => '{{PLURAL:$1|1 datei|$1 datein }} weder iinsteld',
-'cannotundelete' => 'Weder iinstelen hää ei loket; ferlicht hää hoker ööders det al weder iinsteld.',
+'cannotundelete' => 'Weder iinstelen hää ei loket:
+$1',
 'undeletedpage' => "'''„$1“''' as weder iinsteld wurden.
 Uun't [[Special:Log/delete|logbuk faan stregen sidjen]] stun a stregen an weder iinsteld sidjen.",
 'undelete-header' => "Luke uun't [[Special:Log/delete|logbuk för stregen sidjen]] efter stregen sidjen faan a leetst tidj.",
@@ -1562,9 +1589,9 @@ $1",
 'blanknamespace' => '(Side)',
 
 # Contributions
-'contributions' => 'Brükertujeefte',
+'contributions' => '{{GENDER:$1|Brüker}} bidracher',
 'contributions-title' => 'Brükertujeefte foon "$1"',
-'mycontris' => 'Äine tujeefte',
+'mycontris' => 'Bidracher',
 'contribsub2' => 'For $1 ($2)',
 'uctop' => '(aktuäl)',
 'month' => 'än moune:',
@@ -1595,7 +1622,7 @@ $1",
 'whatlinkshere-hideredirs' => 'Widerliidjinge $1',
 'whatlinkshere-hidetrans' => 'Forlåågenönjbininge $1',
 'whatlinkshere-hidelinks' => 'Links $1',
-'whatlinkshere-hideimages' => '$1 dåtäilinks',
+'whatlinkshere-hideimages' => 'Ferwisangen tu dateien $1',
 'whatlinkshere-filters' => 'Filtere',
 
 # Block/unblock
@@ -1855,6 +1882,7 @@ Deeraw föliende sidelinke önj dåtseelwi ra definiire ütnååme, önj di kont
 'logentry-move-move-noredirect' => '$1 hää det sidj $3 efter $4 saner widjerfeerang fersköwen.',
 'logentry-move-move_redir' => '$1 hää det sidj $3 efter $4 fersköwen an diarbi en widjerfeerang auerskrewen.',
 'logentry-move-move_redir-noredirect' => '$1 hää det sidj $3 efter $4 fersköwen an diarbi en widjerfeerang auerskrewen saner salew en widjerfeerang uuntuleien.',
+'rightsnone' => '(-)',
 
 # Durations
 'duration-seconds' => '$1 {{PLURAL:$1|sekund|sekunden}}',
index abfd631..15a1cfd 100644 (file)
@@ -574,7 +574,6 @@ L'aministradôr che al à blocât la base di dâts al à ufiert chest spiegazion
 'template-protected' => '(protezût)',
 'template-semiprotected' => '(semi-protezût)',
 'hiddencategories' => 'Cheste pagjine e je {{PLURAL:$1|intune categorie platade|in $1 categoriis platadis}}:',
-'nocreatetitle' => 'Creazion des pagjinis limitade',
 'nocreatetext' => '{{SITENAME}} al à limitât la pussibilitât di creâ gnovis pagjinis ai utents regjistrâts. Tu puedis tornâ indaûr e cambiâ une pagjine che e esist o se no [[Special:UserLogin|jentrâ o creâ une gnove identitât]].',
 'nocreate-loggedin' => 'No tu âs i permès che a coventin par creâ gnovis pagjinis.',
 'permissionserrors' => 'Erôr tai permès',
@@ -815,6 +814,10 @@ La tô direzion di pueste no ven mostrade cuant che i utents ti contatin.',
 
 'grouppage-sysop' => '{{ns:project}}:Aministradôrs',
 
+# Special:Log/newusers
+'newuserlogpage' => 'Regjistri dai gnûfs utents',
+'newuserlogpagetext' => 'Ca sot tu cjatis un regjistri dai gnûfs utents creâts.',
+
 # User rights log
 'rightslog' => 'Regjistri dai dirits dai utents',
 
@@ -1113,10 +1116,6 @@ Cjale ancje lis [[Special:WantedCategories|categoriis desideradis]].',
 'activeusers-hidesysops' => 'Plate i aministradôrs',
 'activeusers-noresult' => 'Nissun utent cjatât.',
 
-# Special:Log/newusers
-'newuserlogpage' => 'Regjistri dai gnûfs utents',
-'newuserlogpagetext' => 'Ca sot tu cjatis un regjistri dai gnûfs utents creâts.',
-
 # Special:ListGroupRights
 'listgrouprights' => 'Dirits dai grups di utents',
 'listgrouprights-group' => 'Grup',
@@ -1174,6 +1173,8 @@ e la pagjine e sarà '''gruessute''' te [[Special:RecentChanges|liste dai ultins
 'enotif_reset' => 'Segne dutis lis pagjinis come visitadis',
 'enotif_impersonal_salutation' => 'Utent di {{SITENAME}}',
 'enotif_anon_editor' => 'utent anonim $1',
+'created' => 'creade',
+'changed' => 'cambiade',
 
 # Delete
 'deletepage' => 'Elimine pagjine',
@@ -1690,9 +1691,6 @@ Se il file al è stât cambiât rispiet al so stât origjinâl, cualchi informaz
 'htmlform-submit' => 'Invie',
 'htmlform-selectorother-other' => 'Altris',
 
-# New logging system
-'newuserlog-byemail' => 'peraule clâf mandade par pueste eletroniche',
-
 # Search suggestions
 'searchsuggest-search' => 'Ricercje',
 'searchsuggest-containing' => 'che al à dentri...',
index 9dbcb72..c974809 100644 (file)
@@ -737,7 +737,6 @@ In  behearder hat de database blokkearre om de folgjende reden: $1",
 'hiddencategories' => 'Dizze side falt yn de folgjende ferburgen
 {{PLURAL:$1|kategory|kategoryen}}:',
 'edittools' => '<!-- Tekst hjir stiet ûnder bewurkingsfjilden en oanbringfjilden.  -->',
-'nocreatetitle' => 'It oanmeitsjen fan siden is beheind',
 'nocreatetext' => '{{SITENAME}} hat de mûglikheid beheind om nije siden te meitsjen.
 Jo kinne al besteande siden feroarje of jo kinne [[Special:UserLogin|jo oanmelde of in brûker oanmeitsje]].',
 'nocreate-loggedin' => 'Jo meie gjin nije siden meitsje',
@@ -1155,11 +1154,13 @@ Jo kinne ek oaren de mûglikheid jaan kontakt mei jo op te nimmen troch in ferwi
 'right-siteadmin' => 'De database blokkearje en wer frij jaan',
 'right-override-export-depth' => 'Alle siden oant en mei in keppelingsdjipte fan fiif fuortskriuwe',
 
+# Special:Log/newusers
+'newuserlogpage' => 'Ynskriuwingsloch',
+'newuserlogpagetext' => "Dit is in loch fan meidoggers dy't de lêste tiid ynskreaun binne.",
+
 # User rights log
 'rightslog' => 'Rjochten-loch',
 'rightslogtext' => 'Dit is in loch fan feroarings fan meidoggerrjochten.',
-'rightslogentry' => 'groep foar $1 feroare fan $2 yn $3',
-'rightsnone' => '(gjin)',
 
 # Associated actions - in the sentence "You do not have permission to X"
 'action-read' => 'dizze side besjen',
@@ -1644,10 +1645,6 @@ Stipe protokollen: <code>$1</code>',
 'activeusers' => 'Aktive meidoggers',
 'activeusers-noresult' => 'Gjin meidoggers fûn.',
 
-# Special:Log/newusers
-'newuserlogpage' => 'Ynskriuwingsloch',
-'newuserlogpagetext' => "Dit is in loch fan meidoggers dy't de lêste tiid ynskreaun binne.",
-
 # Special:ListGroupRights
 'listgrouprights' => 'Rjochten fan brûkersgroepen',
 'listgrouprights-summary' => 'Op dizze side steane de brûkersgroepen yn dizze wiki beskreaun, mei har derby hearrende rjochten.
@@ -1736,6 +1733,8 @@ om jo folchlistynstellings te feroarjen.
 
 Reaksjes en fierdere help:
 {{canonicalurl:{{MediaWiki:Helppage}}}}',
+'created' => 'oanmakke',
+'changed' => 'feroare',
 
 # Delete
 'deletepage' => 'Wisk side',
@@ -2356,6 +2355,6 @@ Wolle jo de side wier op 'e nij skriuwe?",
 # New logging system
 'revdelete-restricted' => 'hat beheinings oplein oan behearders',
 'revdelete-unrestricted' => 'hat beheinings foar behearders goedmakke',
-'newuserlog-byemail' => 'wachtwurd is ferstjoerd oer e-mail',
+'rightsnone' => '(gjin)',
 
 );
index 5a58386..d0f4166 100644 (file)
@@ -496,6 +496,7 @@ Tabhair faoi deara go taispeáinfear roinnt leathanaigh mar atá tú logáilte i
 'createaccount' => 'Cruthaigh cuntas nua',
 'gotaccount' => "An bhfuil cuntas agat cheana féin? '''$1'''.",
 'gotaccountlink' => 'Logáil isteach',
+'userlogin-resetlink' => 'Sonraí logála isteach dearmadta agat?',
 'createaccountmail' => 'le ríomhphost',
 'createaccountreason' => 'Fáth:',
 'badretype' => "D'iontráil tú dhá fhocal faire difriúla.",
@@ -782,17 +783,22 @@ Treoir: (rth) = difríocht ón leagan reatha, (rmh) = difríocht ón leagan roim
 'notextmatches' => 'Ní bhfuarthas an téacs ar leathanach ar bith',
 'prevn' => 'na {{PLURAL:$1|$1}} cinn roimhe seo',
 'nextn' => 'an {{PLURAL:$1|$1}} i ndiadh',
+'shown-title' => 'Taispeáin $1 {{PLURAL:$1|thoradh|torthaí}} an leathanach',
 'viewprevnext' => 'Taispeáin ($1 {{int:pipe-separator}} $2) ($3).',
 'searchmenu-legend' => 'Sainroghanna cuardaithe',
 'searchmenu-new' => "'''Cruthaigh an leathanach \"[[:\$1]]\" ar an vicí seo!'''",
 'searchhelp-url' => 'Help:Clár_ábhair',
+'searchprofile-articles' => 'Leathanaigh ábhair',
 'searchprofile-project' => 'Leathanaigh thionscadail agus cabhair',
 'searchprofile-images' => 'Ilmheáin',
 'searchprofile-everything' => 'Gach rud',
+'searchprofile-advanced' => 'Casta',
 'searchprofile-articles-tooltip' => 'Cuardaigh i $1',
 'searchprofile-project-tooltip' => 'Cuardaigh i $1',
 'searchprofile-images-tooltip' => 'Cuardaigh le comhaid',
-'search-result-size' => '$1 ({{PLURAL:$2|focal amháin|$2 focail}})',
+'searchprofile-everything-tooltip' => 'Cuardaigh an t-ábhar ar fad (leathanaigh plé san áireamh)',
+'searchprofile-advanced-tooltip' => 'Cuardaigh in ainmspásanna saincheaptha',
+'search-result-size' => '$1 ({{PLURAL:$2|fhocal amháin|$2 focail}})',
 'search-redirect' => '(athsheoladh $1)',
 'search-section' => '(gearradh $1)',
 'search-suggest' => 'An raibh $1 á lorg agat?',
@@ -899,7 +905,7 @@ Beidh an t-eolas seo poiblí.',
 'email' => 'Ríomhphost',
 'prefs-help-realname' => '* <strong>Fíorainm</strong> (roghnach): má toghaíonn tú é sin a chur ar fáil, úsáidfear é chun
 do chuid dreachtaí a chur i leith tusa.',
-'prefs-help-email' => '<strong>Ríomhphost</strong> (roghnach): Leis an tréith seo is féidir teagmháil a dhéanamh leat tríd do leathanach úsáideora nó leathanach phlé gan do sheoladh ríomhphost a thaispeáint.',
+'prefs-help-email' => 'Is roghnach seoladh ríomhphoist a thabhairt, ach is riachtanach é chun focal faire a athshocrú, má dhéanann tú dearmad air.',
 'prefs-help-email-required' => 'Ní foláir seoladh ríomhpoist a thabhairt.',
 'prefs-info' => 'Buneolas',
 'prefs-i18n' => 'Logánú',
@@ -946,6 +952,9 @@ do chuid dreachtaí a chur i leith tusa.',
 'right-undelete' => 'Díscrios leathanach',
 'right-userrights' => 'Cur gach cearta usáideoira in eagar',
 
+# Special:Log/newusers
+'newuserlogpage' => 'Log cruthú úsáideoira',
+
 # User rights log
 'rightslog' => 'Log cearta úsáideoira',
 
@@ -962,6 +971,7 @@ do chuid dreachtaí a chur i leith tusa.',
 'recentchanges-legend' => 'Roghanna do na hathruithe is déanaí',
 'recentchanges-summary' => 'Déan faire ar na hathruithe is déanaí sa vicí ar an leathanach seo.',
 'recentchanges-feed-description' => 'Rianaigh na n-athruite vicí is déanaí sa fotha seo.',
+'recentchanges-label-minor' => 'Mionathrú é seo',
 'recentchanges-label-bot' => 'Chomhlíon róbó an t-athrú seo',
 'rcnote' => "Is {{PLURAL:$1|é seo a leanas <strong>an t-athrú amháin</strong>|iad seo a leanas na <strong>$1</strong> athruithe is déanaí}} {{PLURAL:$2|ar feadh an lae dheireanaigh|ar feadh na '''$2''' lá deireanacha}}, as $5, $4.",
 'rcnotefrom' => 'Is iad seo a leanas na hathruithe ó <b>$2</b> (go dti <b>$1</b> taispeánaithe).',
@@ -1199,7 +1209,7 @@ chun an gníomh seo a dhéanamh ar.',
 # Special:Log
 'specialloguserlabel' => 'Úsáideoir:',
 'speciallogtitlelabel' => 'Teideal:',
-'log' => 'Loganna',
+'log' => 'Logaí',
 'all-logs-page' => 'Gach loga poiblí',
 'alllogstext' => 'Bailiúchán cuimsitheach de gach loga {{SITENAME}}.
 Is féidir leat an méid ar taispeáint a chúngú trí roghnú an saghas loga, an t-ainm úsáideora (cásíogair), nó an leathanach (cásíogair freisin) atá i gceist agat.',
@@ -1239,9 +1249,6 @@ Féach freisin ar [[Special:WantedCategories|catagóirí faoi iarraidh]].',
 # Special:ListUsers
 'listusers-submit' => 'Taispeáin',
 
-# Special:Log/newusers
-'newuserlogpage' => 'Log cruthú úsáideoira',
-
 # Special:ListGroupRights
 'listgrouprights-group' => 'Ghrúpa',
 'listgrouprights-rights' => 'Cearta',
@@ -1270,7 +1277,7 @@ Beidh do seoladh ríomhphoist a d\'iontráil tú i [[Special:Preferences|do chui
 'emailsenttext' => 'Seoladh do theachtaireacht ríomhphoist go ráthúil.',
 
 # Watchlist
-'watchlist' => 'Mo liosta faire',
+'watchlist' => 'Liosta faire',
 'mywatchlist' => 'Liosta faire',
 'watchlistfor2' => 'Do $1 ($2)',
 'nowatchlist' => 'Níl aon rud ar do liosta faire.',
@@ -1336,6 +1343,8 @@ $UNWATCHURL
 
 Aiseolas agus a thuilleadh cabhrach:
 {{canonicalurl:{{MediaWiki:Helppage}}}}',
+'created' => 'Chruthaigh',
+'changed' => "D'athraigh",
 
 # Delete
 'deletepage' => 'Scrios an leathanach',
@@ -1368,6 +1377,7 @@ Féach ar $2 chun cuntas na scriosiadh deireanacha a fháil.',
 'rollback' => 'Athruithe a rolladh siar',
 'rollback_short' => 'Roll siar',
 'rollbacklink' => 'roll siar',
+'rollbacklinkcount' => 'Roll siar $1 {{PLURAL:$1|athrú|athruithe}}',
 'rollbackfailed' => 'Theip an rolladh siar',
 'cantrollback' => 'Ní féidir an athrú a athúsáid; ba é údar an ailt an t-aon duine a rinne athrú dó.',
 'alreadyrolled' => "Ní féidir eagrán níos luaí an leathanaigh [[:$1]] le [[User:$2|$2]] ([[User talk:$2|Plé]]{{int:pipe-separator}}[[Special:Contributions/$2|{{int:contribslink}}]]) a athúsáid; d'athraigh duine eile é cheana fein, nó d'athúsáid duine eile eagrán níos luaí cheana féin.
@@ -1451,7 +1461,7 @@ Is an téacs as na leagan scriosta seo ar fáil do riarthóirí amháin.',
 'blanknamespace' => '(Gnáth)',
 
 # Contributions
-'contributions' => 'Dréachtaí úsáideora',
+'contributions' => 'Dréachtaí {{GENDER:$1|úsáideora}}',
 'contributions-title' => 'Dréachtaí úsáideora do $1',
 'mycontris' => 'Dréachtaí',
 'contribsub2' => 'Do $1 ($2)',
@@ -1465,6 +1475,8 @@ Is an téacs as na leagan scriosta seo ar fáil do riarthóirí amháin.',
 'sp-contributions-newbies-title' => 'Dréachtaí úsáideora do chuntasaí nua',
 'sp-contributions-blocklog' => 'Log coisc',
 'sp-contributions-deleted' => 'dréachtaí úsáideora scriosta',
+'sp-contributions-uploads' => 'uaslódálacha',
+'sp-contributions-logs' => 'logaí',
 'sp-contributions-talk' => 'plé',
 'sp-contributions-userrights' => 'bainistíocht cearta úsáideora',
 'sp-contributions-search' => 'Cuardaigh dréachtaí',
@@ -1711,7 +1723,7 @@ ní féidir uaslódála staire díreacha a dhéanamh faoi láthair.",
 'tooltip-n-mainpage-description' => 'Tabhair cuairt ar an bpríomhleathanach',
 'tooltip-n-portal' => 'Maidir leis an tionscadal, cad is féidir leat a dhéanamh, conas achmhainní a fháil',
 'tooltip-n-currentevents' => 'Faigh eolas cúlrach maidir le chursaí reatha',
-'tooltip-n-recentchanges' => 'Liosta de na hathruithe is déanaí sa vicí.',
+'tooltip-n-recentchanges' => 'Liosta de na hathruithe is déanaí sa vicí',
 'tooltip-n-randompage' => 'Lódáil leathanach fánach',
 'tooltip-n-help' => 'An áit chun cabhair a fháil.',
 'tooltip-t-whatlinkshere' => 'Liosta de gach leathanach sa vicí ina bhfuil nasc chuig an leathanach seo',
@@ -1740,7 +1752,9 @@ ní féidir uaslódála staire díreacha a dhéanamh faoi láthair.",
 'tooltip-diff' => 'Taispeáin na difríochtaí áirithe a rinne tú don téacs',
 'tooltip-compareselectedversions' => 'Féach na difríochtaí idir an dhá leagain roghnaithe den leathanach seo.',
 'tooltip-watch' => 'Cuir an leathanach seo le do liosta faire',
+'tooltip-rollback' => 'Fill ar leagan an leathanaigh seo roimh athruithe an eagarthóra dheireanaigh in aon chlic amháin',
 'tooltip-undo' => 'Cuirtear "Cealaigh" an t-athrú seo ar cheal agus osclaítear an fhoirm eagair i mód réamhamhairc. Is féidir cúis na hathruithe a chur san achoimre.',
+'tooltip-summary' => 'Cuir isteach achoimre ghearr',
 
 # Stylesheets
 'monobook.css' => '/* athraigh an comhad seo chun an craiceann MonoBook a athrú don suíomh ar fad */',
@@ -1818,11 +1832,11 @@ B'fheidir go gcuirfear do chóras i gcontúirt dá rithfeá é.",
 'sp-newimages-showfrom' => 'Taispeáin íomhánna nua as $2, $1',
 
 # Bad image list
-'bad_image_list' => 'An formáid ná a leanas:
+'bad_image_list' => 'Is é seo a leanas an formáid:
 
-Míreanna liosta amháin (líonta a tosú le *) atá eisithe.
-Tá ar an chead nasc ar líne, naiscthe le drochchomhad.
-Aon naisc a leanas ar an líne céanna atá eisithe mar eisceachtaí; leathanaigh ina tarlaigh an comhad inlíne.',
+Níl ach míreanna liosta amháin (línte ag tosú le *) san áireamh.
+Is riachtanach gur nasc do dhrochchomhad é an chéad nasc ar líne.
+Is eisceachtaí iad na naisc eile ar an líne céanna, .i. leathanaigh gur féidir an comhad a bheith orthu go hinlíne.',
 
 # Metadata
 'metadata' => 'Meiteasonraí',
@@ -1830,7 +1844,7 @@ Aon naisc a leanas ar an líne céanna atá eisithe mar eisceachtaí; leathanaig
 Má tá an comhad mionathraithe as an bunleagan, b'fhéidir nach mbeidh ceann de na sonraí fágtha sa comhad atá athruithe.",
 'metadata-expand' => 'Taispeáin sonraí síneadh',
 'metadata-collapse' => 'Folaigh sonraí síneadh',
-'metadata-fields' => 'Beidh meiteasonraí EXIF atá liosta sa teachtaireacht seo san áireamh ar an leathanach íomhá nuair ata an clár meiteasonraí ceilte.
+'metadata-fields' => 'Beidh na meiteasonraí EXIF seo a leanas dá dtaispeáint ar an leathanach íomhá nuair atá an clár meiteasonraí ceilte.
 Beidh na cinn eile ceilte de réir réamhshocraithe.
 * make
 * model
index 66bfeb9..2a20940 100644 (file)
@@ -616,6 +616,9 @@ Aaramaanızın önünä ''all:'' prefiksini koyun da deneyin hepsi içlii aarama
 
 'grouppage-sysop' => '{{ns:project}}:Önderciler',
 
+# Special:Log/newusers
+'newuserlogpage' => 'Eni kullanıcı bennemäkleri',
+
 # User rights log
 'rightslog' => 'Kullanıcı hakları jurnalı',
 
@@ -791,9 +794,6 @@ Sizin bakmaa [[Special:Watchlist|listasındaki]] sayfalar verildi '''kalın''' b
 # Special:LinkSearch
 'linksearch' => 'İç baalantlar',
 
-# Special:Log/newusers
-'newuserlogpage' => 'Eni kullanıcı bennemäkleri',
-
 # Special:ListGroupRights
 'listgrouprights-members' => '(azaların listası)',
 
index 64c800e..778b3f6 100644 (file)
@@ -20,7 +20,7 @@ $namespaceNames = array(
        NS_TALK             => '談詑',
        NS_USER             => '用戶',
        NS_USER_TALK        => '用戶・談詑',
-       NS_PROJECT_TALK     => '$1_談詑',
+       NS_PROJECT_TALK     => '$1談詑',
        NS_FILE             => '文檔',
        NS_FILE_TALK        => '文檔・談詑',
        NS_MEDIAWIKI_TALK   => 'MediaWiki・談詑',
@@ -32,6 +32,10 @@ $namespaceNames = array(
        NS_CATEGORY_TALK    => '分類・談詑',
 );
 
+$namespaceAliases = array(
+       '$1_談詑' => NS_PROJECT_TALK,
+);
+
 $messages = array(
 # Variants for Gan language
 'variantname-gan-hans' => '简体',
index 6095d74..1479ce5 100644 (file)
@@ -604,7 +604,6 @@ $2',
 'template-semiprotected' => '(半保护)',
 'hiddencategories' => '个只版面系属于$1只隐藏类𠮶成员:',
 'edittools' => '<!--个首𠮶文本会到下底𠮶编辑同上传列表里坨显示。 -->',
-'nocreatetitle' => '新建页面拖限制',
 'nocreatetext' => '个只网站限制新建页面𠮶功能。倷可以回头去编辑有嘞𠮶页面,或者[[Special:UserLogin|登入或新开帐户]]。',
 'nocreate-loggedin' => '倷到 {{SITENAME}} 冇权新开页面。',
 'permissionserrors' => '权限错误',
@@ -868,11 +867,12 @@ $2',
 'grouppage-sysop' => '{{ns:project}}:操作员',
 'grouppage-bureaucrat' => '{{ns:project}}:行政员',
 
+# Special:Log/newusers
+'newuserlogpage' => '新开户𠮶人名单',
+
 # User rights log
 'rightslog' => '用户权限日志',
 'rightslogtext' => '底下记到用户权限𠮶更改记录。',
-'rightslogentry' => '拿 $1 𠮶权限从 $2 改到 $3',
-'rightsnone' => '(冇)',
 
 # Associated actions - in the sentence "You do not have permission to X"
 'action-edit' => '编辑个页',
@@ -1230,9 +1230,6 @@ Also see [[Special:WantedCategories|wanted categories]].',
 'listusers-submit' => '显示',
 'listusers-noresult' => '寻伓到用户。',
 
-# Special:Log/newusers
-'newuserlogpage' => '新开户𠮶人名单',
-
 # Special:ListGroupRights
 'listgrouprights-members' => '(成员名单)',
 
@@ -1307,6 +1304,8 @@ $NEWPAGE
 {{SITENAME}}通知系统 – 会改卟倷𠮶监视列表设置,请去 {{canonicalurl:{{#special:EditWatchlist}}}}
 
 回馈同到别𠮶说明: {{canonicalurl:{{MediaWiki:Helppage}}}}',
+'created' => '建正嘞',
+'changed' => '改卟嘞',
 
 # Delete
 'deletepage' => '删卟页面',
@@ -2261,6 +2260,9 @@ $3
 # Special:Tags
 'tag-filter' => '[[Special:Tags|标签]]过滤器:',
 
+# New logging system
+'rightsnone' => '(冇)',
+
 # Search suggestions
 'searchsuggest-search' => '寻吖',
 
index d3e42c0..7a50d26 100644 (file)
@@ -626,7 +626,6 @@ $2',
 'template-semiprotected' => '(半保護)',
 'hiddencategories' => '箇隻版面係屬於$1隻隱藏類嗰成員:',
 'edittools' => '<!--箇首嗰文本會到下底嗰編輯同上傳列表裡坨顯示。 -->',
-'nocreatetitle' => '新建頁面拕限制',
 'nocreatetext' => '箇隻網站限制新建頁面嗰功能。倷可以回頭去編輯有嘞嗰頁面,或者[[Special:UserLogin|登入或新開帳戶]]。',
 'nocreate-loggedin' => '倷到 {{SITENAME}} 冇權新開頁面。',
 'permissionserrors' => '許可權錯誤',
@@ -890,11 +889,12 @@ $2',
 'grouppage-sysop' => '{{ns:project}}:操作員',
 'grouppage-bureaucrat' => '{{ns:project}}:行政員',
 
+# Special:Log/newusers
+'newuserlogpage' => '新開戶嗰人名單',
+
 # User rights log
 'rightslog' => '用戶許可權日誌',
 'rightslogtext' => '底下記到用戶許可權嗰更改記錄。',
-'rightslogentry' => '拿 $1 嗰許可權從 $2 改到 $3',
-'rightsnone' => '(冇)',
 
 # Associated actions - in the sentence "You do not have permission to X"
 'action-edit' => '編輯箇頁',
@@ -1252,9 +1252,6 @@ Also see [[Special:WantedCategories|wanted categories]].',
 'listusers-submit' => '顯示',
 'listusers-noresult' => '尋伓到用戶。',
 
-# Special:Log/newusers
-'newuserlogpage' => '新開戶嗰人名單',
-
 # Special:ListGroupRights
 'listgrouprights-members' => '(成員名單)',
 
@@ -1329,6 +1326,8 @@ $NEWPAGE
 {{SITENAME}}通知系統 – 會改卟倷嗰監視列表設置,請去 {{canonicalurl:{{#special:EditWatchlist}}}}
 
 回饋同到別嗰説明: {{canonicalurl:{{MediaWiki:Helppage}}}}',
+'created' => '建正嘞',
+'changed' => '改卟嘞',
 
 # Delete
 'deletepage' => '刪卟頁面',
@@ -2283,6 +2282,9 @@ $3
 # Special:Tags
 'tag-filter' => '[[Special:Tags|標籤]]過濾器:',
 
+# New logging system
+'rightsnone' => '(冇)',
+
 # Search suggestions
 'searchsuggest-search' => '尋吖',
 
index 288066f..ce0e3da 100644 (file)
@@ -168,6 +168,7 @@ $messages = array(
 'newwindow' => "(a' fosgladh ann an uinneag ùr)",
 'cancel' => 'Sguir dheth',
 'moredotdotdot' => 'Barrachd...',
+'morenotlisted' => 'Barrachd nach eil air an liosta...',
 'mypage' => 'Duilleag',
 'mytalk' => 'Deasbaireachd',
 'anontalk' => 'Conaltradh airson an IP seo',
@@ -201,6 +202,7 @@ $messages = array(
 'namespaces' => 'Namespaces',
 'variants' => 'Tionndaidhean',
 
+'navigation-heading' => 'Clàr-taice na seòladaireachd',
 'errorpagetitle' => 'Mearachd',
 'returnto' => 'Till dhan duilleag a leanas: $1',
 'tagline' => 'O {{SITENAME}}',
@@ -444,6 +446,9 @@ Thug an rianaire a ghlais e seachad an t-adhbhar a leanas: "$3".',
 'logouttext' => "'''Chaidh do logadh a-mach.'''
 'S urrainn dhut leantainn air adhart a' cleachdadh {{SITENAME}} a chleachdadh gun urra no 's urrainn dhut <span class='plainlinks'>[$1 logadh a-steach a-rithist]</span> mar an dearbh-chleachdaiche no mar chleachdaiche eile.
 Thoir an aire gum bi coltas air cuide dhe na duilleagan mar gum biodh tu air logadh a-steach gus am falamhaich thu tasgadan a' bhrabhsair agad.",
+'welcomeuser' => 'Fàilte ort, $1',
+'welcomecreation-msg' => 'Chaidh an cunntas agad a chruthachadh.
+Na dìochuimhnich na [[Special:Preferences|roghainnean agad air {{SITENAME}}]] a ghleusadh dhut fhèin.',
 'yourname' => 'Ainm-cleachdaiche:',
 'yourpassword' => 'Am facal-faire agad',
 'yourpasswordagain' => 'Ath-sgrìobh facal-faire',
@@ -466,7 +471,7 @@ Thoir an aire gum bi coltas air cuide dhe na duilleagan mar gum biodh tu air log
 'gotaccount' => 'A bheil cunntas agad mu thràth? $1.',
 'gotaccountlink' => 'Log a-steach',
 'userlogin-resetlink' => "Na dhìochuimhnich thu d' ainm is facal-faire?",
-'createaccountmail' => 'Le post-d',
+'createaccountmail' => "Cleachd facal-faire sealach air thuaiream agus cuir e dhan phost-d a tha 'ga shònrachadh gu h-ìosal",
 'createaccountreason' => 'Adhbhar:',
 'badretype' => "Chan eil an dà fhacal-faire a chuir thu a-steach a' freagairt ri chèile.",
 'userexists' => "Tha an t-ainm-cleachdaiche a chuir thu a-steach 'ga chleachdadh mu thràth.
@@ -546,6 +551,7 @@ Fuirich ort mus feuch thu ris a-rithist.",
 # E-mail sending
 'php-mail-error-unknown' => 'Mearachd neo-aithichte san fheart mail() aig PHP.',
 'user-mail-no-addy' => 'Cha do ghabh am post-d a chur leis nach robh seòladh puist-d ann.',
+'user-mail-no-body' => 'Bha bodhaig na teachdaireachd bàn no air leth goirid.',
 
 # Change password dialog
 'resetpass' => 'Atharraich am facal-faire',
@@ -604,6 +610,7 @@ Facal-faire sealach: $2',
 'changeemail-oldemail' => 'An seòladh puist-d làithreach:',
 'changeemail-newemail' => 'An seòladh puist-d ùr:',
 'changeemail-none' => '(chan eil gin)',
+'changeemail-password' => 'Am facal-faire agad air {{SITENAME}}:',
 'changeemail-submit' => 'Atharraich am post-d',
 'changeemail-cancel' => 'Sguir dheth',
 
@@ -776,7 +783,7 @@ Ma dh'fhoilleachas tu rudeigin an seo, bidh tu a' dearbhadh gun do sgrìobh thu
 '''NA CLEACHDAIBH SAOTHAIR FO DHLIGHE-SGRÌOBHAIDH GUN CHEAD!'''",
 'longpageerror' => "'''Mearachd: Tha an teacsa a chur thu thugainn {{PLURAL:$1 kilobyte|$1 kilobyte|$1 kilobyte|$1 kilobyte|$1 kilobyte|$1 kilobyte|}} a dh'fhaid is tha sin nas fhaide na tha ceadaichte ({{PLURAL:$1 kilobyte|$2 kilobyte|$2 kilobyte|$2 kilobyte|$2 kilobyte|$2 kilobyte|}}).'''
 Cha ghabh a shàbhaladh.",
-'readonlywarning' => "'''Rabhadh: Chaidh an stòr-dàta a ghlasadh a chum obair-ghlèidhidh agus chan urrainn dhut na còraichean-deasachaidh agad a chur gu feum an-dràsta fhèin.'''
+'readonlywarning' => "'''Rabhadh: Chaidh an stòr-dàta a ghlasadh a chum obair-ghlèidhidh agus chan urrainn dhut na dheasaich thu a shàbhaladh an-dràsta fhèin.'''
 'S mathaid gum b' fheairrde dhut lethbhreac a dhèanamh dhen teacsa agus a shàbhaladh ann am faidhle ach an urrainn dhut a chleachdadh as a dhèidh seo.
 
 Seo am mìneachadh a thug an rianaire a ghlais e: $1",
@@ -793,7 +800,6 @@ Seo an rud mu dheireadh san loga mar fhiosrachadh dhut:",
 'template-protected' => '(air a dhìon)',
 'template-semiprotected' => '(air a leth-dhìon)',
 'hiddencategories' => "Tha an duilleag seo 'na ball de {{PLURAL:$1|1 roinn-seòrsa fhalaichte|$1 roinn-seòrsa fhalaichte|1 roinn-seòrsa fhalaichte|$1 roinn-seòrsa fhalaichte|$1 roinnean-seòrsa falaichte|$1 roinn-seòrsa fhalaichte}}:",
-'nocreatetitle' => 'Tha cruthachadh dhuilleagan cuingichte',
 'nocreatetext' => "Chuir {{SITENAME}} bacadh air cruthachadh de dhuilleagan ùra.
 'S urrainn dhut tilleadh is duilleag a tha ann mu thràth a dheasachadh no [[Special:UserLogin|clàradh a-steach no cunntas a chruthachadh]].",
 'nocreate-loggedin' => 'Chan eil cead agad duilleagan ùra a chruthachadh.',
@@ -818,6 +824,15 @@ Tha coltas gun deach a sguabadh às.",
 'edit-already-exists' => "Cha b' urrainn dhuinn an duilleag ùr a chruthachadh.
 Tha e ann mu thràth.",
 'defaultmessagetext' => 'Teacsa bunaiteach na teachdaireachd',
+'content-failed-to-parse' => "Dh'fhàillig parsadh susbaint $2 airson modail $1: $3",
+'invalid-content-data' => 'Dàta susbaint a tha mì-dhligheach',
+'content-not-allowed-here' => 'Chan eil susbaint "$1" ceadaichte air an duilleag [[$2]]',
+
+# Content models
+'content-model-wikitext' => 'wikitext',
+'content-model-text' => 'teacsa lom',
+'content-model-javascript' => 'JavaScript',
+'content-model-css' => 'CSS',
 
 # Parser/template warnings
 'expensive-parserfunction-warning' => "'''Rabhadh:''' Tha cus expensive parser function calls san duilleag seo.
@@ -857,7 +872,7 @@ Mìneachadh: '''({{int:cur}})''' = an diofar eadar e 's am mùthadh as ùire, ''
 'history-show-deleted' => 'Na chaidh sguabadh às a-mhàin',
 'histfirst' => 'As sine',
 'histlast' => 'As ùire',
-'historysize' => '({{PLURAL:$1|1 bhaidt|$1 bhaidht|$1 bhaidht|$1 bhaidht|$1 baidht|$1 baidht}})',
+'historysize' => '({{PLURAL:$1|1 bhaidt|$1 bhaidht|$1 bhaidht|$1 bhaidht|$1 baidhtichean|$1 baidht}})',
 'historyempty' => '(falamh)',
 
 # Revision feed
@@ -875,9 +890,11 @@ Feuch is [[Special:Search|lorg duilleagan ùra iomachaidh air an uici]]",
 'rev-delundel' => 'seall/falaich',
 'rev-showdeleted' => 'seall',
 'revdelete-hide-user' => 'Falaich ainm-cleachdaiche/seòladh IP an deasaiche',
+'revdelete-log' => 'Adhbhar:',
 'revdel-restore' => 'mùth follaiseachd',
 'revdel-restore-deleted' => 'mùthaidhean a chaidh a sguabadh às',
 'revdel-restore-visible' => 'mùthaidhean faicsinneach',
+'pagehist' => 'Eachdraidh na duilleige',
 'revdelete-otherreason' => 'Adhbhar eile/a bharrachd:',
 'revdelete-reasonotherlist' => 'Adhbhar eile',
 'revdelete-edit-reasonlist' => 'Deasaich adhbharan an sguabaidh às',
@@ -903,6 +920,8 @@ Feuch is [[Special:Search|lorg duilleagan ùra iomachaidh air an uici]]",
 'searchresulttext' => 'Airson barrachd fiosrachaidh mu rannsachadh {{SITENAME}}, cuir sùil air [[{{MediaWiki:Helppage}}|{{int:help}}]].',
 'searchsubtitle' => 'Lorg thu \'\'\'[[:$1]]\'\'\' ([[Special:Prefixindex/$1|gach duilleag a tha a\' tòiseachadh le "$1"]]{{int:pipe-separator}}[[Special:WhatLinksHere/$1|gach duilleag a tha a\' ceangal ri "$1"]])',
 'searchsubtitleinvalid' => "Lorg thu airson '''$1'''",
+'toomanymatches' => 'Fhuaras cus thoraidhean, feuch ceist eile',
+'titlematches' => "Tiotalan dhuilleagan a tha a' maidseadh",
 'notitlematches' => "Chan eil tiotal de dhuilleag sam bith a' freagairt ris",
 'notextmatches' => "Chan eil tiotal de dhuilleag sam bith a' freagairt ris",
 'prevn' => 'an {{PLURAL:$1|$1}} mu dheireadh',
@@ -926,6 +945,7 @@ Feuch is [[Special:Search|lorg duilleagan ùra iomachaidh air an uici]]",
 'searchprofile-advanced-tooltip' => 'Lorg am broinn ainm-spàsan gnàthaichte',
 'search-result-size' => '$1 ({{PLURAL:$2|1 fhacal|$2 fhacal|1 fhacal|$2 fhacal|$2 faclan|$2 facal}})',
 'search-result-category-size' => '{{PLURAL:$1|1 bhall|$1 bhall|$1 bhall|$1 bhall|$1 bhuill|$1 ball}} ({{PLURAL:$2|1 fho-roinn|$2 fho-roinn|$2 fho-roinn|$2 fho-roinn|$2 fo-roinnean|$2 fo-roinn}}, {{PLURAL:$3|1 fhaidhle|$3 fhaidhle|$3 fhaidhle|$3 fhaidhle|$3 faidhlichean|$3 faidhle}})',
+'search-result-score' => 'Buntainneas: $1%',
 'search-redirect' => '(ag ath-sheòladh $1)',
 'search-section' => '(earrann $1)',
 'search-suggest' => 'An e na leanas a bha fa-near dhut: $1',
@@ -1025,9 +1045,11 @@ Chan fhaicear an seòladh fhèin nuair a chuireas cuideigin post-dealain thugad.
 'grouppage-user' => '{{ns:project}}:Cleachdaichean',
 'grouppage-sysop' => '{{ns:project}}:Rianadairean',
 
+# Special:Log/newusers
+'newuserlogpage' => 'Loga cruthachaidh de chleachdaichean',
+
 # User rights log
 'rightslog' => "Loga còraichean a' chleachdaiche",
-'rightsnone' => '(chan eil gin)',
 
 # Associated actions - in the sentence "You do not have permission to X"
 'action-edit' => 'deasaich an duilleag seo',
@@ -1180,9 +1202,6 @@ Thoir sùil air na [[Special:WantedCategories|roinntean-seòrsa a thathar 'gan i
 'linksearch' => 'Ceanglaichean dhan taobh a-muigh',
 'linksearch-line' => "Tha $1 a' ceangal an-seo o $2",
 
-# Special:Log/newusers
-'newuserlogpage' => 'Loga cruthachaidh de chleachdaichean',
-
 # Special:ListGroupRights
 'listgrouprights-members' => '(liosta de bhuill)',
 
@@ -1195,7 +1214,7 @@ Thoir sùil air na [[Special:WantedCategories|roinntean-seòrsa a thathar 'gan i
 'emailsend' => 'Cuir',
 
 # Watchlist
-'watchlist' => 'Mo chlàr-faire',
+'watchlist' => 'An clàr-faire',
 'mywatchlist' => 'An clàr-faire',
 'watchlistfor2' => 'Do $1 $2',
 'nowatchlist' => "Chan eil rud sam bith air a' chlàr-fhaire agad.",
@@ -1284,7 +1303,7 @@ Seo roghainnean làithreach na duilleige '''$1''':",
 
 # Namespace form on various pages
 'namespace' => 'Namespace:',
-'invert' => 'Cuir na tagh mi bun os cionn',
+'invert' => 'Cuir na thagh mi bun os cionn',
 'blanknamespace' => '(Prìomh)',
 
 # Contributions
@@ -1556,6 +1575,9 @@ Bidh an fheadhainn eile falaichte a ghnàth.
 # Special:Tags
 'tag-filter' => 'Criathrag [[Special:Tags|Tag]]:',
 
+# New logging system
+'rightsnone' => '(chan eil gin)',
+
 # Search suggestions
 'searchsuggest-containing' => 'anns a bheil...',
 
index ce6ac9c..59adbfd 100644 (file)
@@ -178,6 +178,7 @@ $magicWords = array(
        'currentday2'               => array( '1', 'DÍAACTUAL2', 'DIAATUAL2', 'CURRENTDAY2' ),
        'currentdayname'            => array( '1', 'NOMEDODÍAACTUAL', 'NOMEDODIAATUAL', 'CURRENTDAYNAME' ),
        'currentyear'               => array( '1', 'ANOACTUAL', 'ANOATUAL', 'CURRENTYEAR' ),
+       'currenttime'               => array( '1', 'DATAEHORAACTUAIS', 'HORARIOATUAL', 'CURRENTTIME' ),
        'currenthour'               => array( '1', 'HORAACTUAL', 'HORAATUAL', 'CURRENTHOUR' ),
        'localmonth'                => array( '1', 'MESLOCAL', 'LOCALMONTH', 'LOCALMONTH2' ),
        'localmonth1'               => array( '1', 'MESLOCAL1', 'LOCALMONTH1' ),
@@ -187,26 +188,46 @@ $magicWords = array(
        'localday2'                 => array( '1', 'DÍALOCAL2', 'DIALOCAL2', 'LOCALDAY2' ),
        'localdayname'              => array( '1', 'NOMEDODÍALOCAL', 'NOMEDODIALOCAL', 'LOCALDAYNAME' ),
        'localyear'                 => array( '1', 'ANOLOCAL', 'LOCALYEAR' ),
+       'localtime'                 => array( '1', 'DATAEHORALOCAIS', 'HORARIOLOCAL', 'LOCALTIME' ),
        'localhour'                 => array( '1', 'HORALOCAL', 'LOCALHOUR' ),
        'numberofpages'             => array( '1', 'NÚMERODEPÁXINAS', 'NUMERODEPAGINAS', 'NÚMERODEPÁGINAS', 'NUMBEROFPAGES' ),
        'numberofarticles'          => array( '1', 'NÚMERODEARTIGOS', 'NUMERODEARTIGOS', 'NUMBEROFARTICLES' ),
        'numberoffiles'             => array( '1', 'NÚMERODEFICHEIROS', 'NUMERODEARQUIVOS', 'NÚMERODEARQUIVOS', 'NUMBEROFFILES' ),
        'numberofusers'             => array( '1', 'NÚMERODEUSUARIOS', 'NUMERODEUSUARIOS', 'NÚMERODEUSUÁRIOS', 'NUMBEROFUSERS' ),
+       'numberofactiveusers'       => array( '1', 'NÚMERODEUSUARIOSACTIVOS', 'NUMERODEUSUARIOSATIVOS', 'NÚMERODEUSUÁRIOSATIVOS', 'NUMBEROFACTIVEUSERS' ),
        'numberofedits'             => array( '1', 'NÚMERODEEDICIÓNS', 'NUMERODEEDICOES', 'NÚMERODEEDIÇÕES', 'NUMBEROFEDITS' ),
+       'numberofviews'             => array( '1', 'NÚMERODEVISITAS', 'NUMERODEEXIBICOES', 'NÚMERODEEXIBIÇÕES', 'NUMBEROFVIEWS' ),
        'pagename'                  => array( '1', 'NOMEDAPÁXINA', 'NOMEDAPAGINA', 'NOMEDAPÁGINA', 'PAGENAME' ),
        'namespace'                 => array( '1', 'ESPAZODENOMES', 'DOMINIO', 'DOMÍNIO', 'ESPACONOMINAL', 'ESPAÇONOMINAL', 'NAMESPACE' ),
        'fullpagename'              => array( '1', 'NOMECOMPLETODAPÁXINA', 'NOMECOMPLETODAPAGINA', 'NOMECOMPLETODAPÁGINA', 'FULLPAGENAME' ),
        'subpagename'               => array( '1', 'NOMEDASUBPÁXINA', 'NOMEDASUBPAGINA', 'NOMEDASUBPÁGINA', 'SUBPAGENAME' ),
        'basepagename'              => array( '1', 'NOMEDAPÁXINABASE', 'NOMEDAPAGINABASE', 'NOMEDAPÁGINABASE', 'BASEPAGENAME' ),
        'talkpagename'              => array( '1', 'NOMEDAPÁXINADECONVERSA', 'NOMEDAPAGINADEDISCUSSAO', 'NOMEDAPÁGINADEDISCUSSÃO', 'TALKPAGENAME' ),
-       'img_manualthumb'           => array( '1', 'miniatura=$1', 'miniaturadaimagem=$1', 'thumbnail=$1', 'thumb=$1' ),
+       'img_thumbnail'             => array( '1', 'miniatura', 'miniaturadaimaxe', 'miniaturadaimagem', 'thumbnail', 'thumb' ),
+       'img_manualthumb'           => array( '1', 'miniatura=$1', 'miniaturadaimaxe=$1', 'miniaturadaimagem=$1', 'thumbnail=$1', 'thumb=$1' ),
        'img_right'                 => array( '1', 'dereita', 'direita', 'right' ),
        'img_left'                  => array( '1', 'esquerda', 'left' ),
        'img_none'                  => array( '1', 'ningún', 'nenhum', 'none' ),
        'img_center'                => array( '1', 'centro', 'center', 'centre' ),
+       'img_framed'                => array( '1', 'conmarco', 'conbordo', 'marco', 'commoldura', 'comborda', 'framed', 'enframed', 'frame' ),
+       'img_frameless'             => array( '1', 'senmarco', 'senbordo', 'semmoldura', 'semborda', 'frameless' ),
        'img_page'                  => array( '1', 'páxina=$1', 'páxina $1', 'página=$1', 'página $1', 'page=$1', 'page $1' ),
        'img_border'                => array( '1', 'bordo', 'borda', 'border' ),
+       'img_top'                   => array( '1', 'arriba', 'acima', 'top' ),
+       'img_text_top'              => array( '1', 'texto-arriba', 'text-top' ),
+       'img_middle'                => array( '1', 'medio', 'meio', 'middle' ),
+       'img_bottom'                => array( '1', 'abaixo', 'bottom' ),
+       'img_text_bottom'           => array( '1', 'texto-abaixo', 'text-bottom' ),
+       'img_link'                  => array( '1', 'ligazón=$1', 'ligação=$1', 'link=$1' ),
+       'img_class'                 => array( '1', 'clase=$1', 'class=$1' ),
+       'sitename'                  => array( '1', 'NOMEDOSITIO', 'NOMEDOSITE', 'NOMEDOSÍTIO', 'SITENAME' ),
+       'localurl'                  => array( '0', 'URLLOCAL', 'LOCALURL:' ),
+       'articlepath'               => array( '0', 'RUTADOARTIGO', 'ARTICLEPATH' ),
+       'pageid'                    => array( '0', 'IDDAPÁXINA', 'PAGEID' ),
+       'server'                    => array( '0', 'SERVIDOR', 'SERVER' ),
+       'servername'                => array( '0', 'NOMEDOSERVIDOR', 'SERVERNAME' ),
        'grammar'                   => array( '0', 'GRAMÁTICA:', 'GRAMMAR:' ),
+       'gender'                    => array( '0', 'SEXO:', 'GENERO', 'GÊNERO', 'GENDER:' ),
        'displaytitle'              => array( '1', 'AMOSAROTÍTULO', 'EXIBETITULO', 'EXIBETÍTULO', 'DISPLAYTITLE' ),
        'newsectionlink'            => array( '1', '__LIGAZÓNDANOVASECCIÓN__', '__LINKDENOVASECAO__', '__LINKDENOVASEÇÃO__', '__LIGACAODENOVASECAO__', '__LIGAÇÃODENOVASEÇÃO__', '__NEWSECTIONLINK__' ),
        'language'                  => array( '0', '#LINGUA:', '#IDIOMA:', '#LANGUAGE:' ),
@@ -217,6 +238,11 @@ $magicWords = array(
        'hiddencat'                 => array( '1', '__CATEGORÍAOCULTA__', '__CATEGORIAOCULTA__', '__CATOCULTA__', '__HIDDENCAT__' ),
        'pagesincategory'           => array( '1', 'PÁXINASNACATEGORÍA', 'PAGINASNACATEGORIA', 'PÁGINASNACATEGORIA', 'PAGINASNACAT', 'PÁGINASNACAT', 'PAGESINCATEGORY', 'PAGESINCAT' ),
        'pagesize'                  => array( '1', 'TAMAÑODAPÁXINA', 'TAMANHODAPAGINA', 'TAMANHODAPÁGINA', 'PAGESIZE' ),
+       'url_path'                  => array( '0', 'RUTA', 'PATH' ),
+       'pagesincategory_all'       => array( '0', 'todos', 'all' ),
+       'pagesincategory_pages'     => array( '0', 'páxinas', 'pages' ),
+       'pagesincategory_subcats'   => array( '0', 'subcategorías', 'subcats' ),
+       'pagesincategory_files'     => array( '0', 'ficheiros', 'files' ),
 );
 
 $separatorTransformTable = array( ',' => '.', '.' => ',' );
@@ -356,6 +382,7 @@ $messages = array(
 'newwindow' => '(abre unha ventá nova)',
 'cancel' => 'Cancelar',
 'moredotdotdot' => 'Máis...',
+'morenotlisted' => 'Máis que non están na lista...',
 'mypage' => 'Páxina',
 'mytalk' => 'Conversa',
 'anontalk' => 'Conversa con este enderezo IP',
@@ -659,7 +686,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?',
-'createaccountmail' => 'Por correo electrónico',
+'createaccountmail' => 'Utilizar un contrasinal aleatorio temporal e envialo ao enderezo de correo electrónico especificado embaixo',
 'createaccountreason' => 'Motivo:',
 'badretype' => 'Os contrasinais que inseriu non coinciden.',
 'userexists' => 'O nome de usuario que inseriu xa está en uso.
@@ -738,8 +765,9 @@ Por favor, agarde antes de probar outra vez.',
 'suspicious-userlogout' => 'Rexeitouse a súa petición de saír do sistema porque semella que a enviou un navegador roto ou a caché dun proxy.',
 
 # E-mail sending
-'php-mail-error-unknown' => 'Erro descoñecido na función mail() do PHP',
+'php-mail-error-unknown' => 'Erro descoñecido na función mail() do PHP.',
 'user-mail-no-addy' => 'Intentou enviar un correo sen enderezo de correo electrónico.',
+'user-mail-no-body' => 'Intentou enviar un correo baleiro ou cun corpo curto de máis.',
 
 # Change password dialog
 'resetpass' => 'Cambiar o contrasinal',
@@ -805,6 +833,7 @@ Contrasinal temporal: $2',
 'changeemail-oldemail' => 'Enderezo de correo electrónico actual:',
 'changeemail-newemail' => 'Novo enderezo de correo electrónico:',
 'changeemail-none' => '(ningún)',
+'changeemail-password' => 'O seu contrasinal en {{SITENAME}}:',
 'changeemail-submit' => 'Cambiar o correo electrónico',
 'changeemail-cancel' => 'Cancelar',
 
@@ -987,7 +1016,6 @@ Velaquí está a última entrada no rexistro, por se quere consultala:",
 'template-semiprotected' => '(semiprotexido)',
 'hiddencategories' => 'Esta páxina forma parte {{PLURAL:$1|dunha categoría oculta|de $1 categorías ocultas}}:',
 'edittools' => '<!-- O texto que apareza aquí mostrarase por debaixo dos formularios de edición e envío. -->',
-'nocreatetitle' => 'Limitada a creación de páxinas',
 'nocreatetext' => '{{SITENAME}} ten restrinxida a posibilidade de crear páxinas novas.
 Pode volver e editar unha páxina que xa existe ou, se non, [[Special:UserLogin|rexistrarse ou crear unha conta]].',
 'nocreate-loggedin' => 'Non dispón dos permisos necesarios para crear páxinas novas.',
@@ -1538,15 +1566,13 @@ Ha de ter menos {{PLURAL:$1|dun carácter|de $1 caracteres}}.',
 'right-sendemail' => 'Enviar correos electrónicos a outros usuarios',
 'right-passwordreset' => 'Ver os correos electrónicos de restablecemento de contrasinais',
 
+# Special:Log/newusers
+'newuserlogpage' => 'Rexistro de creación de usuarios',
+'newuserlogpagetext' => 'Este é un rexistro de creación de contas de usuario.',
+
 # User rights log
 'rightslog' => 'Rexistro de dereitos de usuario',
 'rightslogtext' => 'Este é un rexistro dos cambios nos permisos de usuario.',
-'rightslogentry' => 'cambiou o grupo ao que pertence $1 de $2 a $3',
-'rightslogentry-autopromote' => 'foi promovido automaticamente de $2 a $3',
-'logentry-rights-rights' => '$1 cambiou o grupo ao que pertence $3 de $4 a $5',
-'logentry-rights-rights-legacy' => '$1 cambiou o grupo ao que pertence $3',
-'logentry-rights-autopromote' => '$1 foi promovido automaticamente de $4 a $5',
-'rightsnone' => '(ningún)',
 
 # Associated actions - in the sentence "You do not have permission to X"
 'action-read' => 'ler esta páxina',
@@ -2183,8 +2209,8 @@ Olle tamén as [[Special:WantedCategories|categorías requiridas]].',
 'linksearch-ns' => 'Espazo de nomes:',
 'linksearch-ok' => 'Procurar',
 'linksearch-text' => 'Pódense usar caracteres comodín como "*.wikipedia.org".
-Cómpre, polo menos, un dominio de nivel superior, por exemplo "*.org".<br />
-Protocolos soportados: <code>$1</code> (úsase http:// como predeterminado se non se especifica ningún protocolo).',
+Cómpre, polo menos, un dominio de nivel superior; por exemplo, "*.org".<br />
+{{PLURAL:$2|Protocolo soportado|Protocolos soportados}}: <code>$1</code> (úsase http:// como predeterminado se non se especifica ningún protocolo).',
 'linksearch-line' => '$1 está ligado desde a páxina "$2"',
 'linksearch-error' => 'Os caracteres comodín só poden aparecer ao principio do nome do servidor.',
 
@@ -2197,16 +2223,12 @@ Protocolos soportados: <code>$1</code> (úsase http:// como predeterminado se no
 # Special:ActiveUsers
 'activeusers' => 'Lista de usuarios activos',
 'activeusers-intro' => 'Esta é unha lista cos usuarios que tiveron algún tipo de actividade {{PLURAL:$1|no último día|nos últimos $1 días}}.',
-'activeusers-count' => '$1 {{PLURAL:$1|edición|edicións}} {{PLURAL:$3|no último día|nos últimos $3 días}}',
+'activeusers-count' => '$1 {{PLURAL:$1|acción|accións}} {{PLURAL:$3|no último día|nos últimos $3 días}}',
 'activeusers-from' => 'Mostrar os usuarios que comecen por:',
 'activeusers-hidebots' => 'Agochar os bots',
 'activeusers-hidesysops' => 'Agochar os administradores',
 'activeusers-noresult' => 'Non se atopou ningún usuario.',
 
-# Special:Log/newusers
-'newuserlogpage' => 'Rexistro de creación de usuarios',
-'newuserlogpagetext' => 'Este é un rexistro de creación de contas de usuario.',
-
 # Special:ListGroupRights
 'listgrouprights' => 'Dereitos dun usuario segundo o seu grupo',
 'listgrouprights-summary' => 'A seguinte lista mostra os grupos de usuario definidos neste wiki, cos seus dereitos de acceso asociados.
@@ -2264,7 +2286,7 @@ O enderezo de correo electrónico que inseriu [[Special:Preferences|nas súas pr
 'usermessage-editor' => 'Editor das mensaxes do sistema',
 
 # Watchlist
-'watchlist' => 'A miña lista de vixilancia',
+'watchlist' => 'Lista de vixilancia',
 'mywatchlist' => 'Lista de vixilancia',
 'watchlistfor2' => 'De $1 $2',
 'nowatchlist' => 'Non ten elementos na súa lista de vixilancia.',
@@ -2272,8 +2294,8 @@ O enderezo de correo electrónico que inseriu [[Special:Preferences|nas súas pr
 'watchnologin' => 'Non accedeu ao sistema',
 'watchnologintext' => 'Debe [[Special:UserLogin|acceder ao sistema]] para modificar a súa lista de vixilancia.',
 'addwatch' => 'Engadir á lista vixilancia',
-'addedwatchtext' => "A páxina \"[[:\$1]]\" foi engadida á súa [[Special:Watchlist|lista de vixilancia]].
-Os cambios futuros nesta páxina e na súa páxina de conversa asociada serán listados alí, e a páxina aparecerá en '''negra''' na [[Special:RecentChanges|lista de cambios recentes]] para facer máis sinxela a súa sinalización.",
+'addedwatchtext' => 'A páxina "[[:$1]]" foi engadida á súa [[Special:Watchlist|lista de vixilancia]].
+Os cambios futuros nesta páxina e na súa páxina de conversa asociada serán listados alí.',
 'removewatch' => 'Eliminar da lista de vixilancia',
 'removedwatchtext' => 'A páxina "[[:$1]]" foi eliminada [[Special:Watchlist|da súa lista de vixilancia]].',
 'watch' => 'Vixiar',
@@ -2307,7 +2329,7 @@ Os cambios futuros nesta páxina e na súa páxina de conversa asociada serán l
 'enotif_subject_moved' => '{{GENDER:$2|$2}} trasladou a páxina chamada "$1" en {{SITENAME}}',
 'enotif_subject_restored' => '{{GENDER:$2|$2}} restaurou a páxina chamada "$1" en {{SITENAME}}',
 'enotif_subject_changed' => '{{GENDER:$2|$2}} modificou a páxina chamada "$1" en {{SITENAME}}',
-'enotif_body_intro_deleted' => '{{GENDER:$2|$2}} borrou a páxina chamada "$1" en {{SITENAME}} o $PAGEEDITDATE. Consulte $3 para ver a revisión actual.',
+'enotif_body_intro_deleted' => '{{GENDER:$2|$2}} borrou a páxina chamada "$1" en {{SITENAME}} o $PAGEEDITDATE. Consulte $3.',
 'enotif_body_intro_created' => '{{GENDER:$2|$2}} creou a páxina chamada "$1" en {{SITENAME}} o $PAGEEDITDATE. Consulte $3 para ver a revisión actual.',
 'enotif_body_intro_moved' => '{{GENDER:$2|$2}} trasladou a páxina chamada "$1" en {{SITENAME}} o $PAGEEDITDATE. Consulte $3 para ver a revisión actual.',
 'enotif_body_intro_restored' => '{{GENDER:$2|$2}} restaurou a páxina chamada "$1" en {{SITENAME}} o $PAGEEDITDATE. Consulte $3 para ver a revisión actual.',
@@ -2342,6 +2364,8 @@ $UNWATCHURL
 
 Axuda:
 {{canonicalurl:{{MediaWiki:Helppage}}}}',
+'created' => 'creada',
+'changed' => 'modificada',
 
 # Delete
 'deletepage' => 'Borrar a páxina',
@@ -2413,10 +2437,12 @@ Vexa a [[Special:ProtectedPages|lista de páxinas protexidas]] se quere obter a
 'prot_1movedto2' => 'moveu "[[$1]]" a "[[$2]]"',
 'protect-badnamespace-title' => 'Espazo de nomes que non se pode protexer',
 'protect-badnamespace-text' => 'As páxinas presentes neste espazo de nomes non se poden protexer.',
+'protect-norestrictiontypes-text' => 'Esta páxina non se pode protexer porque non hai dispoñible ningún tipo de restrición.',
+'protect-norestrictiontypes-title' => 'Páxina non protexible',
 'protect-legend' => 'Confirmar a protección',
 'protectcomment' => 'Motivo:',
 'protectexpiry' => 'Caducidade:',
-'protect_expiry_invalid' => 'O tempo de duración da protección non e válido.',
+'protect_expiry_invalid' => 'O tempo de duración da protección non é válido.',
 'protect_expiry_old' => 'O momento de remate da protección corresponde ao pasado.',
 'protect-unchain-permissions' => 'Desbloquear as opcións de protección adicionais',
 'protect-text' => "Aquí é onde pode ver e cambiar os niveis de protección da páxina chamada \"'''\$1'''\".",
@@ -2428,9 +2454,9 @@ Velaquí a configuración actual da páxina '''$1''':",
 'protect-cascadeon' => 'Esta páxina está protexida neste momento porque está incluída {{PLURAL:$1|na seguinte páxina, que foi protexida|nas seguintes páxinas, que foron protexidas}} coa opción protección en serie activada.
 Pode mudar o nivel de protección da páxina pero iso non afectará á protección en serie.',
 'protect-default' => 'Permitir a todos os usuarios',
-'protect-fallback' => 'Cómpre ter permisos de "$1"',
-'protect-level-autoconfirmed' => 'Bloquear os usuarios novos e anónimos',
-'protect-level-sysop' => 'Só os administradores',
+'protect-fallback' => 'Permitir só aos usuarios con permisos de "$1"',
+'protect-level-autoconfirmed' => 'Permitir só aos usuarios autoconfirmados',
+'protect-level-sysop' => 'Permitir só aos administradores',
 'protect-summary-cascade' => 'protección en serie',
 'protect-expiring' => 'remata o $2 ás $3 (UTC)',
 'protect-expiring-local' => 'caduca o $1',
@@ -2617,13 +2643,13 @@ Olle a [[Special:BlockList|lista de bloqueos]] para revisalo.',
 'ipb-blockingself' => 'Está a piques de se bloquear! Está seguro de querer facelo?',
 'ipb-confirmhideuser' => 'Está a piques de bloquear un usuario coa opción "agochar o usuario" activada. Isto suprime o nome de usuario de todas as listas e entradas de rexistro. Está seguro de querer facelo?',
 'ipb-edit-dropdown' => 'Editar os motivos de bloqueo',
-'ipb-unblock-addr' => 'Desbloquear a "$1"',
+'ipb-unblock-addr' => 'Desbloquear a $1',
 'ipb-unblock' => 'Desbloquear un usuario ou enderezo IP',
 'ipb-blocklist' => 'Ver os bloqueos vixentes',
-'ipb-blocklist-contribs' => 'Contribucións de "$1"',
-'unblockip' => 'Desbloquear o usuario',
+'ipb-blocklist-contribs' => 'Contribucións de $1',
+'unblockip' => 'Desbloquear un usuario',
 'unblockiptext' => 'Use o seguinte formulario para dar de novo acceso de escritura a un enderezo IP ou usuario que estea bloqueado.',
-'ipusubmit' => 'Retirar este bloqueo',
+'ipusubmit' => 'Retirar o bloqueo',
 'unblocked' => '[[User:$1|$1]] foi {{GENDER:$1|desbloqueado|desbloqueada}}',
 'unblocked-range' => '$1 foi desbloqueado',
 'unblocked-id' => 'O bloqueo $1 foi eliminado',
@@ -2667,7 +2693,7 @@ O motivo do bloqueo de $1 é: "$2"',
 'blocklogtext' => 'Este é o rexistro das accións de bloqueo e desbloqueo de usuarios.
 Non se listan os enderezos IP bloqueados automaticamente.
 Olle a [[Special:BlockList|lista de bloqueos]] para comprobar os bloqueos vixentes.',
-'unblocklogentry' => 'desbloqueou a "$1"',
+'unblocklogentry' => 'desbloqueou a $1',
 'block-log-flags-anononly' => 'só os usuarios anónimos',
 'block-log-flags-nocreate' => 'desactivada a creación de contas',
 'block-log-flags-noautoblock' => 'bloqueo automático deshabilitado',
@@ -2676,11 +2702,11 @@ Olle a [[Special:BlockList|lista de bloqueos]] para comprobar os bloqueos vixent
 'block-log-flags-angry-autoblock' => 'realzou o autobloqueo permitido',
 'block-log-flags-hiddenname' => 'nome de usuario agochado',
 'range_block_disabled' => 'A funcionalidade de administrador de crear rangos de bloqueos está deshabilitada.',
-'ipb_expiry_invalid' => 'Tempo de duración non válido.',
+'ipb_expiry_invalid' => 'O tempo de duración non é válido.',
 'ipb_expiry_temp' => 'Os bloqueos a nomes de usuario agochados deberían ser permanentes.',
-'ipb_hide_invalid' => 'Incapaz de suprimir esta conta; pode que teña moitas edicións.',
+'ipb_hide_invalid' => 'Non se pode suprimir esta conta; se cadra, ten moitas edicións.',
 'ipb_already_blocked' => '"$1" xa está bloqueado',
-'ipb-needreblock' => '"$1" xa está bloqueado. Quere cambiar as configuracións?',
+'ipb-needreblock' => '$1 xa está bloqueado. Quere cambiar as configuracións?',
 'ipb-otherblocks-header' => '{{PLURAL:$1|Outro bloqueo|Outros bloqueos}}',
 'unblock-hideuser' => 'Non pode desbloquear o usuario porque o seu nome foi agochado.',
 'ipb_cant_unblock' => 'Erro: Non se atopa o identificador do bloqueo $1. Posiblemente xa foi desbloqueado.',
@@ -2731,10 +2757,10 @@ Pode actualizar automaticamente as redireccións que van dar ao título orixinal
 Se escolle non facelo, asegúrese de verificar que non hai redireccións [[Special:DoubleRedirects|dobres]] ou [[Special:BrokenRedirects|crebadas]].
 Vostede é responsábel de asegurarse de que as ligazóns continúan a apuntar cara a onde se supón que deberían.
 
-Teña en conta que a páxina '''non''' será movida se xa existe unha páxina co novo título, a menos que estea baleira ou sexa unha redirección e que non teña historial de edicións.
+Teña en conta que a páxina '''non''' será movida se xa existe unha páxina co novo título, a menos que sexa unha redirección e non teña historial de edicións.
 Isto significa que pode volver renomear unha páxina ao seu nome antigo se comete un erro, e que non pode sobrescribir unha páxina que xa existe.
 
-'''ATENCIÓN!'''
+'''Atención!'''
 Este cambio nunha páxina popular pode ser drástico e inesperado;
 por favor, asegúrese de que entende as consecuencias disto antes de proseguir.",
 'movepagetext-noredirectfixer' => "Ao usar o formulario de embaixo vai cambiar o nome da páxina, movendo todo o seu historial ao novo nome.
@@ -2742,10 +2768,10 @@ O título vello vaise converter nunha páxina de redirección ao novo título.
 Asegúrese de verificar que non hai redireccións [[Special:DoubleRedirects|dobres]] ou [[Special:BrokenRedirects|crebadas]].
 Vostede é responsábel de asegurarse de que as ligazóns continúan a apuntar cara a onde se supón que deberían.
 
-Teña en conta que a páxina '''non''' será movida se xa existe unha páxina co novo título, a menos que estea baleira ou sexa unha redirección e que non teña historial de edicións.
+Teña en conta que a páxina '''non''' será movida se xa existe unha páxina co novo título, a menos que sexa unha redirección e non teña historial de edicións.
 Isto significa que pode volver renomear unha páxina ao seu nome antigo se comete un erro, e que non pode sobrescribir unha páxina que xa existe.
 
-'''ATENCIÓN!'''
+'''Atención!'''
 Este cambio nunha páxina popular pode ser drástico e inesperado;
 por favor, asegúrese de que entende as consecuencias disto antes de proseguir.",
 'movepagetalktext' => "A páxina de conversa asociada, se existe, será automaticamente movida con esta '''agás que''':
@@ -2912,6 +2938,7 @@ Gárdeo no seu disco duro e cárgueo aquí.',
 'import-error-interwiki' => 'Non se pode importar a páxina "$1" porque o seu nome está reservado para unha ligazón externa (interwiki).',
 'import-error-special' => 'Non se pode importar a páxina "$1" porque pertence a un espazo de nomes especial que non o permite.',
 'import-error-invalid' => 'Non se pode importar a páxina "$1" porque o seu nome non é válido.',
+'import-error-unserialize' => 'Non se puido deserializar a revisión $2 da páxina "$1". Informouse de que a revisión usa o modelo de contido $3 serializado como $4.',
 'import-options-wrong' => '{{PLURAL:$2|Opción incorrecta|Opcións incorrectas}}: <nowiki>$1</nowiki>',
 'import-rootpage-invalid' => 'A páxina raíz dada é un título non válido.',
 'import-rootpage-nosubpage' => 'O espazo de nomes "$1" da páxina raíz non permite as subpáxinas.',
@@ -3095,14 +3122,19 @@ Isto, probabelmente, se debe a unha ligazón cara a un sitio externo que está n
 'pageinfo-magic-words' => '{{PLURAL:$1|Palabra máxica|Palabras máxicas}} ($1)',
 'pageinfo-hidden-categories' => '{{PLURAL:$1|Categoría agochada|Categorías agochadas}} ($1)',
 'pageinfo-templates' => '{{PLURAL:$1|Modelo incluído|Modelos incluídos}} ($1)',
+'pageinfo-transclusions' => '{{PLURAL:$1|Páxina incluída|Páxinas incluídas}} ($1)',
 'pageinfo-toolboxlink' => 'Información da páxina',
 'pageinfo-redirectsto' => 'Redirixe cara a',
 'pageinfo-redirectsto-info' => 'información',
-'pageinfo-contentpage' => 'Cóntase como páxina de contido',
+'pageinfo-contentpage' => 'Cóntase como páxina de contido?',
 'pageinfo-contentpage-yes' => 'Si',
 'pageinfo-protect-cascading' => 'Protección en serie activada',
 'pageinfo-protect-cascading-yes' => 'Si',
 'pageinfo-protect-cascading-from' => 'Protección en serie activada',
+'pageinfo-category-info' => 'Información da categoría',
+'pageinfo-category-pages' => 'Número de páxinas',
+'pageinfo-category-subcats' => 'Número de subcategorías',
+'pageinfo-category-files' => 'Número de ficheiros',
 
 # Skin names
 'skinname-standard' => 'Clásica',
@@ -3159,6 +3191,7 @@ O seu sistema pode quedar comprometido se o executa.",
 'file-nohires' => 'Non se dispón dunha resolución máis grande.',
 '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-preview' => 'Tamaño desta vista previa: $1.',
 'show-big-image-other' => '{{PLURAL:$2|Outra resolución|Outras resolucións}}: $1.',
@@ -3189,6 +3222,8 @@ O seu sistema pode quedar comprometido se o executa.",
 'minutes' => '{{PLURAL:$1|$1 minuto|$1 minutos}}',
 'hours' => '{{PLURAL:$1|$1 hora|$1 horas}}',
 'days' => '{{PLURAL:$1|$1 día|$1 días}}',
+'months' => '{{PLURAL:$1|$1 mes|$1 meses}}',
+'years' => '{{PLURAL:$1|$1 ano|$1 anos}}',
 'ago' => 'hai $1',
 'just-now' => 'agora mesmo',
 
@@ -3854,7 +3889,7 @@ As imaxes móstranse na súa resolución completa; outros tipos de ficheiros in
 'specialpages-group-highuse' => 'Páxinas con máis uso',
 'specialpages-group-pages' => 'Listas de páxinas',
 'specialpages-group-pagetools' => 'Ferramentas das páxinas',
-'specialpages-group-wiki' => 'Datos do wiki e ferramentas',
+'specialpages-group-wiki' => 'Datos e ferramentas',
 'specialpages-group-redirects' => 'Páxinas de redirección especiais',
 'specialpages-group-spam' => 'Ferramentas contra o spam',
 
@@ -3951,8 +3986,12 @@ As imaxes móstranse na súa resolución completa; outros tipos de ficheiros in
 'logentry-newusers-newusers' => 'Creouse a conta de usuario $1',
 'logentry-newusers-create' => 'Creouse a conta de usuario $1',
 'logentry-newusers-create2' => '$1 creou a conta de usuario $3',
+'logentry-newusers-byemail' => '$1 creou a conta de usuario $3; o contrasinal enviouse por correo electrónico',
 'logentry-newusers-autocreate' => 'A conta de usuario $1 creouse automaticamente',
-'newuserlog-byemail' => 'contrasinal enviado por correo electrónico',
+'logentry-rights-rights' => '$1 cambiou o grupo ao que pertence $3 de $4 a $5',
+'logentry-rights-rights-legacy' => '$1 cambiou o grupo ao que pertence $3',
+'logentry-rights-autopromote' => '$1 foi promovido automaticamente de $4 a $5',
+'rightsnone' => '(ningún)',
 
 # Feedback
 'feedback-bugornote' => 'Se está listo para describir un problema técnico en detalle, [$1 informe do erro].
@@ -4005,9 +4044,10 @@ En caso contrario, pode empregar o formulario sinxelo inferior. O seu comentario
 'api-error-nomodule' => 'Erro interno: Non hai ningún módulo de cargas.',
 'api-error-ok-but-empty' => 'Erro interno: Non hai resposta do servidor.',
 'api-error-overwrite' => 'Non está permitido sobrescribir un ficheiro existente.',
-'api-error-stashfailed' => 'Erro interno: O servidor non puido almacenar os ficheiros temporais.',
+'api-error-stashfailed' => 'Erro interno: O servidor non puido almacenar o ficheiro temporal.',
+'api-error-publishfailed' => 'Erro interno: O servidor non puido publicar o ficheiro temporal.',
 'api-error-timeout' => 'O servidor non respondeu no tempo esperado.',
-'api-error-unclassified' => 'Houbo un erro descoñecido',
+'api-error-unclassified' => 'Houbo un erro descoñecido.',
 'api-error-unknown-code' => 'Erro descoñecido: "$1"',
 'api-error-unknown-error' => 'Erro interno: Houbo un problema ao intentar cargar o ficheiro.',
 'api-error-unknown-warning' => 'Advertencia descoñecida: $1',
@@ -4026,6 +4066,4 @@ En caso contrario, pode empregar o formulario sinxelo inferior. O seu comentario
 'duration-centuries' => '$1 {{PLURAL:$1|século|séculos}}',
 'duration-millennia' => '$1 {{PLURAL:$1|milenio|milenios}}',
 
-# Unknown messages
-'svg-long-error' => 'Ficheiro SVG non válido: $1',
 );
index e1f807f..6a4316f 100644 (file)
@@ -620,7 +620,6 @@ $2',
 'template-protected' => '(φυλλάττεται)',
 'template-semiprotected' => '(ἡμιπεφυλαγμένη)',
 'hiddencategories' => 'Ἥδε ἡ δέλτος μέλος ἐστὶ {{PLURAL:$1|1 τῆς κεκρυμμένης κατηγορίας|$1 τῶν κεκρυμμένων κατηγοριῶν}}:',
-'nocreatetitle' => 'Ποίησις δέλτων περιωρισμένη',
 'nocreatetext' => "{{SITENAME}} οὐ σ'ἐᾷ νέας δέλτους ποιεῖν.
 Ἐᾷ σε δέλτον ἢδη οὖσαν μεταβάλλειν ἢ [[Special:UserLogin|συνδεῖσθαι ἢ λογισμὸν ποιεῖν]].",
 'nocreate-loggedin' => 'Οὐκ ἔξεστι σοι νέας δέλτους ποιεῖν.',
@@ -1046,11 +1045,13 @@ $1",
 'right-siteadmin' => 'Φράττειν καὶ ἀποφράττειν τὴν βάσιν δεδομένων',
 'right-override-export-depth' => 'Ἐξάγειν δέλτους περιλαμβανομένων συνδεδεμένων δέλτων ἕως βάθος τι 5 ἐπιπέδων',
 
+# Special:Log/newusers
+'newuserlogpage' => 'Κατάλογος ποιήσεων λογισμῶν.',
+'newuserlogpagetext' => 'Ὅδε ἐστὶν κατάλογος τις τῶν ποιήσεων λογισμῶν.',
+
 # User rights log
 'rightslog' => 'Κατάλογος δικαιωμάτων χρωμένων',
 'rightslogtext' => 'Κατάλογος ἀλλαγῶν τῶν δικαιωμάτων χρωμένων.',
-'rightslogentry' => 'Μετεβλήθη ἡ μελότης (δικαιώματα μέλους) διὰ τὸν $1 ἐκ τῆς $2 εἰς τὴν $3',
-'rightsnone' => '(Οὐδέν)',
 
 # Associated actions - in the sentence "You do not have permission to X"
 'action-read' => 'ἀναγιγνώσκειν τήνδε τὴν δέλτον',
@@ -1484,10 +1485,6 @@ $1",
 'activeusers-hidesysops' => 'Κρύπτειν ἐπιτρόπους',
 'activeusers-noresult' => 'Οὐδεὶς χρώμενος εὑρέθη.',
 
-# Special:Log/newusers
-'newuserlogpage' => 'Κατάλογος ποιήσεων λογισμῶν.',
-'newuserlogpagetext' => 'Ὅδε ἐστὶν κατάλογος τις τῶν ποιήσεων λογισμῶν.',
-
 # Special:ListGroupRights
 'listgrouprights' => 'Δικαιώματα ὁμάδος χρωμένου',
 'listgrouprights-group' => 'Ὁμάς',
@@ -1589,6 +1586,8 @@ $NEWPAGE
 
 Ἀνάδρασις καὶ περαιτέρω βοήθεια:
 {{canonicalurl:{{MediaWiki:Helppage}}}}',
+'created' => 'ποιηθέν',
+'changed' => 'ἠλλαγμένη',
 
 # Delete
 'deletepage' => 'Διαγράφειν τὴν δέλτον',
@@ -2702,7 +2701,7 @@ $5
 # New logging system
 'revdelete-restricted' => 'ἐφηρμοσμένοι περιορισμοὶ διὰ τοὺς ἐπιτρόπους',
 'revdelete-unrestricted' => 'αἱρεθέντες περιορισμοὶ διὰ τοὺς ἐπιτρόπους',
-'newuserlog-byemail' => 'σύνθημα ἀπεσταλμένον μέσῳ ἠλ-ταχυδρομείου',
+'rightsnone' => '(Οὐδέν)',
 
 # Feedback
 'feedback-cancel' => 'Ἀκυροῦν',
index a9d2ac9..904d1d5 100644 (file)
@@ -868,7 +868,6 @@ As Referänz wird do dr letscht Logbuechyytrag aagee:",
 'template-semiprotected' => '(schrybgschitzt fir Benutzer, wo nit aagmäldet oder nei sin)',
 'hiddencategories' => 'Die Syte ghert zue {{PLURAL:$1|einere versteckte Kategori|$1 versteckte Kategorie}}:',
 'edittools' => '<!-- Dää Text wird unter em "Ändere"-Formular un bim "Uffelade"-Formular aagzeigt. -->',
-'nocreatetitle' => 'S Aalege vu neje Syte isch yygschränkt.',
 'nocreatetext' => "Uf {{SITENAME}} isch d Erstellig vo nöue Syten ygschränkt.
 Du chasch nur Syten ändere, wo's scho git, oder muesch di [[Special:UserLogin|amälde]].",
 'nocreate-loggedin' => 'Du bisch nid berächtigt, neji Syte aazlege.',
@@ -1406,15 +1405,13 @@ Des cha nimmi ruckgängig gmacht wäre.',
 'right-sendemail' => 'E-Mail an anderi Benutzer schicke',
 'right-passwordreset' => 'Passwort vun eme Benutzer zruggsetze',
 
+# Special:Log/newusers
+'newuserlogpage' => 'Nejaamäldigs-Logbuech',
+'newuserlogpagetext' => 'Des isch e Logbuech fir nej aagleiti Benutzerchonte.',
+
 # User rights log
 'rightslog' => 'Benutzerrächt-Logbuech',
 'rightslogtext' => 'Des ischs Logbuech vun de Änderunge on Bnutzerrechte.',
-'rightslogentry' => 'het d Benutzerrächt fir „$1“ vu „$2“ uf „$3“ gänderet',
-'rightslogentry-autopromote' => 'd Zueornig zue dr Benutzergruppe isch automatisch vu $2 in $3 gänderet wore',
-'logentry-rights-rights' => '$1 het d Gruppezuegherigkeit fir $3 vu $4 uf $5 gänderet',
-'logentry-rights-rights-legacy' => '$1 het d Gruppezuegherigkeit fir $3 gänderet',
-'logentry-rights-autopromote' => '$1 isch automatisch vu $4 zue $5 zuegordnet wore',
-'rightsnone' => '(keini)',
 
 # Associated actions - in the sentence "You do not have permission to X"
 'action-read' => 'die Syte z läse',
@@ -2041,10 +2038,6 @@ Lueg au d Lischt vu dr [[Special:WantedCategories|gwinschte Kategorie]].',
 'activeusers-hidesysops' => 'Ammanne (Administratore) uusblände',
 'activeusers-noresult' => 'Kei Benutzer gfunde.',
 
-# Special:Log/newusers
-'newuserlogpage' => 'Nejaamäldigs-Logbuech',
-'newuserlogpagetext' => 'Des isch e Logbuech fir nej aagleiti Benutzerchonte.',
-
 # Special:ListGroupRights
 'listgrouprights' => 'Benutzergruppe-Rächt',
 'listgrouprights-summary' => 'Des isch e Liste vu dr Benutzergruppe, wu in däm Wiki definiert sin, un dr Rächt, wu dermit verbunde sin.
@@ -2171,6 +2164,8 @@ Go d Yystellige vu Dyyre Beobachtigslischte ändere, gang uf {{canonicalurl:{{#s
 Go d Syte us Dyyre Beobachtigslischte uuseneh, gang uf $UNWATCHURL
 
 Ruckmäldig un wyteri Hilf: {{canonicalurl:{{MediaWiki:Helppage}}}}',
+'created' => 'aagleit',
+'changed' => 'gänderet',
 
 # Delete
 'deletepage' => 'Syte lösche',
@@ -2839,8 +2834,8 @@ Die uf em lokale Rächner spychere un derno do uffelade.',
 'pageinfo-article-id' => 'Syten-ID',
 'pageinfo-language' => 'Syteninhaltssproch',
 'pageinfo-robot-policy' => 'Suechmaschinestatus',
-'pageinfo-robot-index' => 'Indizierbar',
-'pageinfo-robot-noindex' => 'Nit indizierbar',
+'pageinfo-robot-index' => 'Indexierbar',
+'pageinfo-robot-noindex' => 'Nit indexierbar',
 'pageinfo-views' => 'Aazahl Sytenufruef',
 'pageinfo-watchers' => 'Aazahl vu Beobachter',
 'pageinfo-redirects-name' => 'Wyterleitige zue däre Syte',
@@ -3686,7 +3681,10 @@ Di aagfrogt Datei wird diräkt dargstellt bzw. mit dr verchnipfte Aawändig gsta
 'logentry-newusers-create' => 'Benutzerkonto $1 isch aagleit wore.',
 'logentry-newusers-create2' => 'Benutzerkonto $3 isch aalgeit wore vu $1',
 'logentry-newusers-autocreate' => 'S Benutzerchonto $1 isch automatisch erstellt worde',
-'newuserlog-byemail' => 's Passwort isch per E-Mail gschickt wore',
+'logentry-rights-rights' => '$1 het d Gruppezuegherigkeit fir $3 vu $4 uf $5 gänderet',
+'logentry-rights-rights-legacy' => '$1 het d Gruppezuegherigkeit fir $3 gänderet',
+'logentry-rights-autopromote' => '$1 isch automatisch vu $4 zue $5 zuegordnet wore',
+'rightsnone' => '(keini)',
 
 # Feedback
 'feedback-bugornote' => 'Wän Du detailliert e tächnisch Probläm witt bschryybe, no mäld bitte [$1 ne Fähler].
index bef0379..bc14e93 100644 (file)
@@ -198,13 +198,13 @@ $messages = array(
 
 'underline-always' => 'હંમેશાં',
 'underline-never' => 'કદી નહિ',
-'underline-default' => 'બà«\8dરાàª\89àª\9dરના àª¸à«\87àª\9fà«\80àª\82àª\97à«\8dસ àªªà«\8dરમાણà«\87',
+'underline-default' => 'પà«\82રà«\8dવ àª¨àª¿àª°à«\8dધારિત àª¸à«\8dàª\95િન àª\95à«\87 àª¬à«\8dરાàª\89àª\9dર',
 
 # Font style option in Special:Preferences
 'editfont-style' => 'ક્ષેત્ર લિપિ શૈલીનું સંપાદન:',
 'editfont-default' => 'બ્રાઉઝરના સેટીંગ્સ પ્રમાણે',
-'editfont-monospace' => 'Monospaced font',
-'editfont-sansserif' => 'Sans-serif font',
+'editfont-monospace' => 'મોનોસ્પેસ્ડ ફોન્ટ',
+'editfont-sansserif' => 'સાન્સ-સેરિફ ફોન્ટ',
 'editfont-serif' => 'Serif font',
 
 # Dates
@@ -285,8 +285,8 @@ $messages = array(
 'newwindow' => '(નવા પાનામાં ખુલશે)',
 'cancel' => 'રદ કરો',
 'moredotdotdot' => 'વધારે...',
-'mypage' => 'મારà«\81àª\82 àªªàª¾àª¨à«\81àª\82',
-'mytalk' => 'મારà«\80 àª\9aરà«\8dàª\9aા',
+'mypage' => 'પાનું',
+'mytalk' => 'ચર્ચા',
 'anontalk' => 'આ IP માટેનું ચર્ચા પાનું',
 'navigation' => 'ભ્રમણ',
 'and' => '&#32;અને',
@@ -309,7 +309,7 @@ $messages = array(
 'vector-action-protect' => 'સુરક્ષિત કરો',
 'vector-action-undelete' => 'રદ કરેલું પાછું વાળો',
 'vector-action-unprotect' => 'સુરક્ષા બદલો',
-'vector-simplesearch-preference' => 'શà«\8bધ àª¸àª\82બàª\82ધà«\80 àªµàª¿àª¶àª¿àª·à«\8dઠ àª¸à«\81àª\9dાવના àªªàª°à«\8dયાયનà«\87 àª¸àª\95à«\8dરà«\80ય  àª\95રà«\8b (Vector skin only)',
+'vector-simplesearch-preference' => 'સરળ àª¶à«\8bધ àªªàª\9fà«\8dàª\9fà«\80 àª¸àª\95à«\8dરà«\80ય àª\95રà«\8b (માતà«\8dર àªµà«\87àª\95à«\8dàª\9fર àª¸à«\8dàª\95િન)',
 'vector-view-create' => 'બનાવો',
 'vector-view-edit' => 'ફેરફાર કરો',
 'vector-view-history' => 'ઇતિહાસ જુઓ',
@@ -319,6 +319,7 @@ $messages = array(
 'namespaces' => 'નામાવકાશો',
 'variants' => 'ભિન્ન રૂપો',
 
+'navigation-heading' => 'દિશાશોધન મેનુ',
 'errorpagetitle' => 'ત્રુટિ',
 'returnto' => '$1 પર પાછા જાઓ.',
 'tagline' => '{{SITENAME}}થી',
@@ -505,8 +506,8 @@ $1',
 'internalerror_info' => 'આંતરિક ત્રુટિ: $1',
 'fileappenderrorread' => 'ઉમેરો કરતાં "$1" વાંચી શકાયું નથી',
 'fileappenderror' => '"$1" ને "$2" શાથે જોડી શકાશે નહીં.',
-'filecopyerror' => '"$1" àª¥à«\80 "$2"માàª\82 àª¨àª\95લ àª¨àª¾àª\95ામયાબ.',
-'filerenameerror' => '"$1" àª¨à«\81àª\82 àª¨àª¾àª® àª¬àª¦àª²à«\80નà«\87 "$2" àª\95રવામાàª\82 àª¨àª¾àª\95ામયાબ.',
+'filecopyerror' => '"$1" àª¥à«\80 "$2"માàª\82 àª¨àª\95લ àª¨àª¿àª·à«\8dફળ.',
+'filerenameerror' => '"$1" àª¨à«\81àª\82 àª¨àª¾àª® àª¬àª¦àª²à«\80નà«\87 "$2" àª\95રવામાàª\82 àª¨àª¿àª·à«\8dફળ.',
 'filedeleteerror' => '"$1" ફાઇલ હટાવી ન શકાઇ.',
 'directorycreateerror' => 'ડીરેક્ટરી "$1" ન બનાવી શકાઇ.',
 'filenotfound' => 'ફાઇલ "$1" ન મળી.',
@@ -531,7 +532,7 @@ Query: $2',
 'viewsource-title' => '$1 માટે સ્રોત જુઓ',
 'actionthrottled' => 'અકાળે અટાકાવી દીધેલી ક્રિયા',
 'actionthrottledtext' => 'સ્પામ નિયંત્રણ તકેદારી રૂપે આ ક્રિયા અમુક મર્યાદામાં જ કરી શકો છો, અને તમે તે મર્યાદા વટાવી દીધી છે. કૃપા કરી થોડાક સમય પછી ફરી પ્રયત્ન કરો.',
-'protectedpagetext' => 'ફà«\87રફારà«\8b àª¥àª¤àª¾ં રોકવા માટે આ પાનું સુરક્ષિત કરવામાં આવ્યું છે.',
+'protectedpagetext' => 'ફà«\87રફારà«\8b àª\95à«\87 àª\8fવà«\81àª\82 àª\95àª\82àª\88 àªªàª£ àª¥àª¤à«\81ં રોકવા માટે આ પાનું સુરક્ષિત કરવામાં આવ્યું છે.',
 'viewsourcetext' => 'આપ આ પાનાનો મૂળ સ્રોત નિહાળી શકો છો અને તેની નકલ (copy) પણ કરી શકો છો:',
 'viewyourtext' => "આપ આ પાનાનાં '''આપનાં સંપાદનો'''નો મૂળ સ્રોત નિહાળી શકો છો અને તેની નકલ (copy) પણ કરી શકો છો:",
 'protectedinterface' => 'આ પાનું સોફ્ટવેર માટે ઇન્ટરફેઇસ ટેક્સટ આપે છે, અને તેને દુરુપયોગ રોકવા માટે સ્થગિત કર્યું છે.
@@ -631,9 +632,7 @@ $2',
 જો બીજા કોઇએ આ વિનંતી કરી હોય અથવા તમને તમારી જુની ગુપ્ત સંજ્ઞા યાદ આવી ગઇ હોય અને તમે તે બદલવા ન માંગતા હો તો આ સંદેશ અવગણીને તમારી જુની ગુપ્ત સંજ્ઞા વાપરવાનું ચાલુ રાખો.',
 'noemail' => 'સભ્ય "$1"નું કોઇ ઇ-મેલ સરનામું નોંધાયેલું નથી.',
 'noemailcreate' => 'વૈધ ઇ-મેલ આપશો',
-'passwordsent' => 'A new password has been sent to the e-mail address registered for "$1".
-Please log in again after you receive it.
-"$1" ની નવી ગુપ્તસંજ્ઞા (પાસવર્ડ) આપના ઇમેઇલ પર મોકલવામાં આવ્યો છે.
+'passwordsent' => '"$1" ની નવી ગુપ્તસંજ્ઞા (પાસવર્ડ) આપના ઇમેઇલ પર મોકલવામાં આવ્યો છે.
 કૃપા કરી તે મળ્યા બાદ ફરી લોગ ઇન કરો.',
 'blocked-mailpassword' => 'Your IP address is blocked from editing, and so is not allowed to use the password recovery function to prevent abuse.
 ફેરફાર કરવા માટે તમારું IP એડ્રેસ  સ્થગિત કરી દેવાયું છે તેથી દૂરુપયોગ ટાળવા માટે તમને ગુપ્તસંજ્ઞા રીકવરી કરવાની છૂટ નથી.',
@@ -729,6 +728,7 @@ $2
 'changeemail-oldemail' => 'હાલ નું ઈ મેલ ખાતુ:',
 'changeemail-newemail' => 'નવું ઈ-મેલ સરનામું',
 'changeemail-none' => '(કંઈ નહી)',
+'changeemail-password' => 'તમારો {{SITENAME}} પાસવર્ડ:',
 'changeemail-submit' => 'ઈ મેલ બદલો',
 'changeemail-cancel' => 'રદ કરો',
 
@@ -866,7 +866,7 @@ $2
 આ પાનાને ખરાબ થતો અટકાવવા આ ફેરફાર રદ્દ કરાયો છે. 
 જ્યારે તમે વેબ આધારિત  અજ્ઞાત પ્રોક્સી વાપરતા હોવ ત્યારે આવું બની શકે છે.",
 'edit_form_incomplete' => "'''ફેરફાર પત્રનો અમુક ભાગ સર્વર સુધી ન પહોંચ્યો; ખાત્રી કરો કે તમે કરેલા ફેરફાર બરાબર છે અને ફરી પ્રયત્ન કરો.'''",
-'editing' => '$1નà«\8b àª«à«\87રફાર àª\95રà«\80 àª°àª¹à«\8dયા àª\9bà«\87',
+'editing' => '$1નà«\8b àª«à«\87રફાર àª\95રà«\80 àª°àª¹à«\8dયા àª\9bà«\8b.',
 'creating' => '$1 બનાવી રહ્યા છો',
 'editingsection' => '$1 (પરિચ્છેદ)નો ફેરફાર કરી રહ્યા છો',
 'editingcomment' => '$1 (પરિચ્છેદ)નો ફેરફાર કરી રહ્યા છો',
@@ -880,8 +880,8 @@ $2
 'storedversion' => 'રક્ષિત પુનરાવર્તન',
 'nonunicodebrowser' => "'''ચેતવણી: તમારું બ્રાઉઝર યુનિકોડ ઉકેલવા સક્ષમ નથી.'''
 અહીં તમે સુરક્ષિત રીતે ફેરફારો નહીં કરી શકો: ASCII સિવાયના અક્ષરો સંપાદન ચોકઠામાં હેક્સાડેસિમલ સ્વરૂપે દેખાશે.",
-'editingold' => "'''àª\9aà«\87તવણà«\80: àª¤àª®à«\87 àª\95ાલાતિત àª«à«\87રફારà«\8b àª¨à«\87 àª¬àª¦àª²ી રહ્યાં છો.'''
-જો તમે તેને સાચવશો , વચમાં થયેલ ફેરફારો સાચવી ન શકાય.",
+'editingold' => "'''àª\9aà«\87તવણà«\80: àª¤àª®à«\87 àª\86 àªªàª¾àª¨àª¾àª¨à«\80 àª\96à«\82બ àª\9cà«\82નà«\80 àª\86વà«\83તà«\8dતિમાàª\82 àª«à«\87રફાર àª\95રી રહ્યાં છો.'''
+જો તમે તેને સાચવશો તો, તે આવૃત્તિ પછી થયેલા બધા ફેરફારો નાબુદ થઈ જશે.",
 'yourdiff' => 'ભેદ',
 'copyrightwarning' => "મહેરબાની કરીને એ વાતની નોંધ લેશો કે {{SITENAME}}માં કરેલું બધુંજ યોગદાન $2 હેઠળ પ્રકાશિત કરેલું માનવામાં આવે છે (વધુ માહિતિ માટે $1 જુઓ).
 જો આપ ના ચાહતા હોવ કે તમારા યોગદાનમાં અન્ય કોઇ વ્યક્તિ બેધડક પણે ફેરફાર કરે અને તેને પુનઃપ્રકાશિત કરે, તો અહીં યોગદાન કરશો નહી.<br />
@@ -910,7 +910,6 @@ $2
 'template-protected' => '(સુરક્ષિત)',
 'template-semiprotected' => '(અર્ધ સુરક્ષિત)',
 'hiddencategories' => 'આ પાનું {{PLURAL:$1|૧ છુપી શ્રેણી|$1 છુપી શ્રેણીઓ}}નું સભ્ય છે:',
-'nocreatetitle' => 'પાનું બનાવવૌં મર્યાદિત છે',
 'nocreatetext' => '{{SITENAME}}માં નવું પાનુ બનાવવા ઉપર નિયંત્રણ આવી ગયું છે.
 <br />આપ પાછા જઇને હયાત પાનામાં ફેરફાર કરી શકો છો, નહિતર [[Special:UserLogin|પ્રવેશ કરો કે નવું ખાતું ખોલો]].',
 'nocreate-loggedin' => 'તમને નવાં પાનાં બનાવવાની પરવાનગી નથી.',
@@ -935,11 +934,13 @@ $2
 'edit-already-exists' => 'નવું પાનું બનાવી ન શકાયું
 તે પહેલેથી હાજર છે.',
 'defaultmessagetext' => 'મૂળભૂત સંદેશ લખાણ',
+'invalid-content-data' => 'અયોગ્ય વિગત માહિતી',
 
 # Content models
 'content-model-wikitext' => 'વિકિલખાણ',
 'content-model-text' => 'સાદું લખાણ',
 'content-model-javascript' => 'જાવાસ્ક્રિપ્ટ',
+'content-model-css' => 'CSS',
 
 # Parser/template warnings
 'expensive-parserfunction-warning' => "'''ચેતવણી:''' આ પાનું ખૂબ ખર્ચાળ પદચ્છેદ સૂત્ર ધરાવે છે.
@@ -960,7 +961,7 @@ $2
 'undo-success' => 'આ ફેરફારોને ઉલટાવી શકાશે .
 નીચે આપેલ સરકામણી સરખાવો અને ચકાસો શું તમે રાખવા માંગો છો અને ફેરફારો સાચવો.',
 'undo-failure' => 'વચ્ચે થયેલા અન્ય ફેરફાર થવાને કારણે આ ફેરફારો ઉલટાવી ન શકાયા',
-'undo-norev' => 'ફà«\87રફાર àª¸àª¾àª\9aવà«\87 àª¨ àª¶àª\95ાયà«\8b àª\95à«\87મàª\95à«\87 àª¯àª¾ àª¤à«\8b àª¤à«\87 àª\85સà«\8dતિતà«\8dવમાàª\82 àª¨àª¥à«\80 àª\85હà«\8dતવાતà«\8b àª­à«\82àª\82સà«\80 àª¨àª\96ાયા છે.',
+'undo-norev' => 'ફà«\87રફાર àª¸àª¾àª\9aવà«\80 àª¨ àª¶àª\95ાયà«\8b àª\95à«\87મàª\95à«\87 àª¤à«\87 àª\85સà«\8dતિતà«\8dવમાàª\82 àª¨àª¥à«\80 àª\85થવા àª¤à«\8b àª­à«\82àª\82સà«\80 àª¨àª\96ાયà«\8b છે.',
 'undo-summary' => '[[Special:Contributions/$2|$2]] ([[User talk:$2|talk]])એ કરેલો ફેરફાર $1 પાછો વાળ્યો',
 
 # Account creation failure
@@ -1064,7 +1065,7 @@ $3 દ્વારા અપાયેલ કારણ છે ''$2''",
 'revdelete-radio-set' => 'હા',
 'revdelete-radio-unset' => 'ના',
 'revdelete-suppress' => 'પ્રબંધક કે અન્યો સૌની માહિતી છુપાવો',
-'revdelete-unsuppress' => 'સમા કરાયેલા પુનરાવર્તન પરનાપ્રતિબંધ હટાવો',
+'revdelete-unsuppress' => 'સમા કરાયેલા પુનરાવર્તનો પરના પ્રતિબંધ હટાવો',
 'revdelete-log' => 'કારણ:',
 'revdelete-submit' => 'પસંદ કરેલા {{PLURAL:$1|ફેરફાર|ફેરફારો}} પર લગાડો',
 'revdelete-success' => 'પુનરવર્તન દ્રશ્યતાસફળતા પૂર્વક અદ્યતન બનાવાઈ',
@@ -1204,7 +1205,7 @@ $1",
 'powersearch-ns' => 'નામસ્થળોમાં શોધો:',
 'powersearch-redir' => 'અન્યત્ર વાળેલાં પાનાંની યાદી',
 'powersearch-field' => 'નાં માટે શોધો',
-'powersearch-togglelabel' => ' ચકાસો:',
+'powersearch-togglelabel' => 'ચકાસો:',
 'powersearch-toggleall' => 'બધા',
 'powersearch-togglenone' => 'એકે નહિ',
 'search-external' => 'બાહ્ય શોધ',
@@ -1223,7 +1224,7 @@ $1",
 
 # Preferences page
 'preferences' => 'પસંદ',
-'mypreferences' => 'મારà«\80 àªªàª¸àª\82દ',
+'mypreferences' => 'પસંદ',
 'prefs-edits' => 'સંપાદનોની સંખ્યા',
 'prefsnologin' => 'પ્રવેશ કરેલ નથી',
 'prefsnologintext' => 'સભ્યના અધિકારો બદલવા તમે <span class="plainlinks">[{{fullurl:{{#Special:UserLogin}}|returnto=$1}} logged in]</span> પ્રવેશ કરેલો હોવો જોઈએ',
@@ -1238,15 +1239,15 @@ $1",
 'prefs-personal' => 'સભ્ય ઓળખ',
 'prefs-rc' => 'તાજા ફેરફારો',
 'prefs-watchlist' => 'ધ્યાનસૂચિ',
-'prefs-watchlist-days' => 'ધà«\8dયાનસà«\82àª\9aિમાàª\81 àª¦àª°à«\8dશાવવના àª¦àª¿àªµàª¸à«\8b',
+'prefs-watchlist-days' => 'ધà«\8dયાનસà«\82àª\9aિમાàª\82 àª¦àª°à«\8dશાવવાના àª¦àª¿àªµàª¸à«\8b:',
 'prefs-watchlist-days-max' => 'મહત્તમ $1 {{PLURAL:$1|દિવસ|દિવસો}}',
 'prefs-watchlist-edits' => 'વિસ્તરીત ધ્યાનસૂચિ માં બતાવનારા ફેરફારોની સંખ્યા',
 'prefs-watchlist-edits-max' => 'મહત્તમ સંખ્યા : ૧૦૦૦',
 'prefs-watchlist-token' => 'ધ્યાનસૂચિ ચિઠ્ઠી',
 'prefs-misc' => 'પરચૂરણ',
 'prefs-resetpass' => 'ગુપ્તસંજ્ઞા બદલો',
-'prefs-changeemail' => 'ઈ મેલ સરનામું બદલવા માટે',
-'prefs-setemail' => 'ઈ મેલ સરનામું સેટ કરો',
+'prefs-changeemail' => 'ઈ-મેલ સરનામું બદલવા માટે',
+'prefs-setemail' => 'ઈ-મેલ સરનામું ગોઠવો',
 'prefs-email' => 'ઈ-મેલ સંબંધી વિકલ્પો',
 'prefs-rendering' => 'દેખાવ',
 'saveprefs' => 'સાચવો',
@@ -1299,9 +1300,9 @@ $1",
 'prefs-emailconfirm-label' => 'ઇ-મેલ પુષ્ટી',
 'prefs-textboxsize' => 'ફેરફાર ફલકનું માપ',
 'youremail' => 'ઇ-મેઇલ:',
-'username' => 'સભ્ય નામ:',
-'uid' => 'સભ્ય નામ',
-'prefs-memberingroups' => '{{PLURAL:$1|સમુહ|સમુહો}}ના સભ્ય:',
+'username' => '{{GENDER:$1|સભ્ય નામ}}:',
+'uid' => '{{GENDER:$1|સભ્ય}} ઓળખ:',
+'prefs-memberingroups' => '{{PLURAL:$1|સમુહ|સમુહો}}ના {{GENDER:$2|સભ્ય}}:',
 'prefs-registration' => 'નોંધણી સમય',
 'yourrealname' => 'સાચું નામ:',
 'yourlanguage' => 'ભાષા',
@@ -1335,9 +1336,9 @@ HTML નાકું ચકાસો',
 'prefs-advancedrendering' => 'અદ્યતન વિકલ્પો',
 'prefs-advancedsearchoptions' => 'અદ્યતન વિકલ્પો',
 'prefs-advancedwatchlist' => 'અદ્યતન વિકલ્પો',
-'prefs-displayrc' => ' પ્રદર્શન વિકલ્પો',
-'prefs-displaysearchoptions' => ' પ્રદર્શન વિકલ્પો',
-'prefs-displaywatchlist' => ' પ્રદર્શન વિકલ્પો',
+'prefs-displayrc' => 'પ્રદર્શન વિકલ્પો',
+'prefs-displaysearchoptions' => 'પ્રદર્શન વિકલ્પો',
+'prefs-displaywatchlist' => 'પ્રદર્શન વિકલ્પો',
 'prefs-diffs' => 'ફરક',
 
 # User preference: e-mail validation using jQuery
@@ -1451,26 +1452,27 @@ HTML નાકું ચકાસો',
 'right-sendemail' => ' અન્ય સભ્યોને ઈ-મેલ મોકલો',
 'right-passwordreset' => 'પાસવર્ડ રીસેટ ઇ-મેઇલ્સ જુઓ',
 
+# Special:Log/newusers
+'newuserlogpage' => 'નવા બનેલા સભ્યોનો લૉગ',
+'newuserlogpagetext' => 'આ સભ્યોની રચનાનો લોગ છે.',
+
 # User rights log
 'rightslog' => 'સભ્ય હક્ક માહિતિ પત્રક',
 'rightslogtext' => 'સભ્યના બદલાયેલ હક્કોની આ સંપાદન યાદિ છે .',
-'rightslogentry' => '$2 થી $3 સુધી $1 માટે બદલાયેલું સમૂહ સભ્યપદ',
-'rightslogentry-autopromote' => 'આપોઆપ $2 માં થી $3 માં બઢતી થઇ',
-'rightsnone' => '(કંઈ નહી)',
 
 # Associated actions - in the sentence "You do not have permission to X"
 'action-read' => 'આ પાનું વાંચો.',
 'action-edit' => 'આ પાનામાં ફેરફાર કરો',
 'action-createpage' => 'નવો લેખ શરૂ કરો',
 'action-createtalk' => 'ચર્ચાનું પાનું બનાવો',
-'action-createaccount' => ' ખાતું ખોલો',
+'action-createaccount' => 'આ સભ્ય ખાતું બનાવો',
 'action-minoredit' => ' આ ફેરફારને એક નાના સુધારા તરીકે નોંધો',
 'action-move' => 'આ પાનું ખસેડો',
-'action-move-subpages' => 'આ પાનું અને તેના ઉપપાના ખસેડો',
+'action-move-subpages' => 'આ પાનું અને તેના ઉપપાના ખસેડો',
 'action-move-rootuserpages' => 'મૂળ સભ્ય પાના હટાવો',
-'action-movefile' => 'આ ફાઈલ ખસેડો',
+'action-movefile' => 'આ ફાઈલ ખસેડો',
 'action-upload' => 'આ ફાઈલ ચઢવો',
-'action-reupload' => 'વિહરમાન ફાઇલ પર પુનર્લેખન કરો',
+'action-reupload' => 'હાàª\9cર ફાઇલ પર પુનર્લેખન કરો',
 'action-reupload-shared' => 'સર્વ સામાન્ય ફાઈલ સંગ્રહ પર આ ફાઇલ અવગણી આગળ વધો',
 'action-upload_by_url' => 'URL પરથી આ ફાઇલ ચઢાવો',
 'action-writeapi' => 'લેખન API વાપરો',
@@ -1512,7 +1514,7 @@ HTML નાકું ચકાસો',
 'rcshowhidebots' => 'બૉટો $1',
 'rcshowhideliu' => 'લૉગ ઇન થયેલાં સભ્યો $1',
 'rcshowhideanons' => 'અનામી સભ્યો $1',
-'rcshowhidepatr' => ' $1 ચોકીયાત ફેરફારો',
+'rcshowhidepatr' => '$1 ચોકીયાત ફેરફારો',
 'rcshowhidemine' => 'મારા ફેરફારો $1',
 'rclinks' => 'છેલ્લાં $2 દિવસમાં થયેલા છેલ્લાં $1 ફેરફારો દર્શાવો<br />$3',
 'diff' => 'ભેદ',
@@ -2065,9 +2067,9 @@ https://www.mediawiki.org/wiki/Manual:Image_Authorization. જુઓ',
 'linksearch-pat' => 'શોધ આલેખ',
 'linksearch-ns' => 'નામાવકાશ:',
 'linksearch-ok' => 'શોધ',
-'linksearch-text' => '"*.wikipedia.org" જેવા વાઈલ્ડાકાર્ડ અહીં વાપર્યા હોઈ શકે છે.
+'linksearch-text' => 'વાઇલ્ડ કાર્ડ જેવા કે "*.wikipedia.org" અહીં વપરાયા હોઈ શકે છે.
 ઓછામાં ઓછું ઉચ્ચસ્તરનું ડોમેઇન જરૂરી છે, દા.ત. \'\'*.org".<br />
-માન્ય પ્રોટોકોલ : <code>$1</code> (આમાનું એકેય તમારી શોધમાં ના ઉમેરશો).',
+માન્ય પ્રોટોકોલ્સ: <code>$1</code> (જો કોઇ પ્રોટોકોલ આપેલ નહી હોય તો http:// એ મૂળભૂત ગણાશે).',
 'linksearch-line' => '$1 એ $2થી જોડાયેલ છે',
 'linksearch-error' => 'યજમાન નામની શરૂઆતમાં જ વાઈલ્ડકાર્ડ પ્રકટ થશે',
 
@@ -2086,10 +2088,6 @@ https://www.mediawiki.org/wiki/Manual:Image_Authorization. જુઓ',
 'activeusers-hidesysops' => 'પ્રબંધકો છુપાવો',
 'activeusers-noresult' => 'કોઇ સક્રીય સભ્ય ન મળ્યો',
 
-# Special:Log/newusers
-'newuserlogpage' => 'નવા બનેલા સભ્યોનો લૉગ',
-'newuserlogpagetext' => 'આ સભ્યોની રચનાનો લોગ છે.',
-
 # Special:ListGroupRights
 'listgrouprights' => 'સભ્ય જૂથ ના હક્કો',
 'listgrouprights-summary' => 'નીચે આ વિકિ પર વ્યાખ્યાયિત સભ્ય જૂથોની યાદી, તેમની સાથે સંકળાયેલા હક્કો સાથે આપી છે.
@@ -2113,10 +2111,11 @@ https://www.mediawiki.org/wiki/Manual:Image_Authorization. જુઓ',
 'mailnologin' => 'મેળવનારનું સરનામું નથી',
 'mailnologintext' => 'અન્ય સભ્યને ઇ-મેલ મોકલવા માટે તમે [[Special:UserLogin|logged in]] પ્રવેશ કરેલ હોવો જોઈએ અને તમારા[[Special:Preferences|preferences]] વિકલ્પોમાં તમારા ઈ-મેલ સરનામાની પુષ્ટિ થયેલી હોવી જોઈએ',
 'emailuser' => 'સભ્યને ઇ-મેલ કરો',
+'emailuser-title-target' => 'આ {{GENDER:$1|સભ્ય}}ને ઇમેલ કરો',
 'emailuser-title-notarget' => 'ઇ-મેલ વપરાશકર્તા',
 'emailpage' => 'ઈ-મેલ સભ્ય',
-'emailpagetext' => 'તમે નીચે દર્શાવેલ ફોર્મ વાપરી ઇ-મેલ મોકલી શકો છો.
-તમે તમારી માહિતીમાં [[Special:Preferences|your user preferences]] જે ઇ-મેલ લખ્યો હશે  તે દ્વારા ના નામ હેઠળ દેખાશે, જેથી ઇ-મેલ મેળવનાર તમને સંદેશાનો જવાબ આપી શકશે.',
+'emailpagetext' => 'તમà«\87 àª¨à«\80àª\9aà«\87 àª¦àª°à«\8dશાવà«\87લ àª«à«\8bરà«\8dમ àªµàª¾àªªàª°à«\80 àª\86 {{GENDER:$1|સભà«\8dય}}નà«\87 àª\87-મà«\87લ àª®à«\8bàª\95લà«\80 àª¶àª\95à«\8b àª\9bà«\8b.
+તમે [[Special:Preferences|તમારી પસંદમાં]] જે ઇ-મેલ લખ્યો હશે તે "દ્વારા"ના નામ હેઠળ દેખાશે, જેથી ઇ-મેલ મેળવનાર તમને સંદેશાનો જવાબ આપી શકશે.',
 'usermailererror' => 'મેલ વસ્તુ પાઠવવામાં ત્રુટિ',
 'defemailsubject' => '{{SITENAME}} સભ્ય $1 તરફથી ઈ-મેલ',
 'usermaildisabled' => 'સભ્યનો ઈ-મેલ નિષ્ક્રિય કરાયો',
@@ -2147,7 +2146,7 @@ https://www.mediawiki.org/wiki/Manual:Image_Authorization. જુઓ',
 
 # Watchlist
 'watchlist' => 'મારી ધ્યાનસૂચી',
-'mywatchlist' => 'મારà«\80 àª§à«\8dયાનસà«\82àª\9aિ',
+'mywatchlist' => 'ધ્યાનસૂચિ',
 'watchlistfor2' => 'ધ્યાન સૂચિ $1 $2',
 'nowatchlist' => 'તમારી ધ્યાન સૂચિ ખાલી છે',
 'watchlistanontext' => 'તમારી ધ્યાનસૂચિની વસ્તુઓ જોવા અને ફેરફાર કરવા $1 કરો',
@@ -2155,7 +2154,7 @@ https://www.mediawiki.org/wiki/Manual:Image_Authorization. જુઓ',
 'watchnologintext' => 'ધ્યાનસૂચિમાં ફેરફારાકરવા તમે પ્રવેશ [[Special:UserLogin|logged in]] કરેલો હોવો જરૂરી છે.',
 'addwatch' => 'ધ્યાનસૂચિ માં ઉમેરો',
 'addedwatchtext' => 'પાનું "[[:$1]]" તમારી [[Special:Watchlist|ધ્યાનસૂચિ]]માં ઉમેરાઈ ગયું છે.
-ભવિષ્યમાં આ પાના અને તેનાં સંલગ્ન ચર્ચાનાં પાનામાં થનારા ફેરફારોની યાદી ત્યાં આપવામાં આવશે અને આ પાનું [[Special:RecentChanges|તાજેતરમાં થયેલા ફેરફારોની યાદી]]માં ઘાટા અક્ષરે જોવા મળશે, જેથી આપ સહેલાઇથી તેને અલગ તારવી શકો.',
+ભવિષ્યમાં આ પાના અને તેનાં સંલગ્ન ચર્ચાનાં પાનામાં થનારા ફેરફારોની યાદી ત્યાં આપવામાં આવશે.',
 'removewatch' => 'ધ્યાનસૂચિમાંથી કાઢી નાખો',
 'removedwatchtext' => '"[[:$1]]" શીર્ષક હેઠળનું પાનું [[Special:Watchlist|તમારી ધ્યાનસૂચિમાંથી]] કાઢી નાંખવામાં આવ્યું છે.',
 'watch' => 'ધ્યાનમાં રાખો',
@@ -2181,24 +2180,30 @@ https://www.mediawiki.org/wiki/Manual:Image_Authorization. જુઓ',
 'unwatching' => 'નજર રાખવાની બંધ કરી છે...',
 'watcherrortext' => 'તમારી ધ્યાનસૂચિ નાં સેટિંગ્સ માં "$1" માં ફેરફાર કરતી વખતે ભૂલ આવી.',
 
-'enotif_mailer' => '{{SITENAME}} àª¸à«\82àª\9aના àª\88-મà«\87લ àªªàª¾àª ક',
+'enotif_mailer' => '{{SITENAME}} àª¸à«\82àª\9aના àª\88-મà«\87લ àªªà«\8dરà«\87ષક',
 'enotif_reset' => 'બધા પાનાને મુલાકાત લેવાયેલા અંકિત કરો',
 'enotif_impersonal_salutation' => '{{SITENAME}} સભ્ય',
+'enotif_subject_deleted' => '{{SITENAME}} પૃષ્ઠ $1 {{gender:$2|$2}}એ દૂર કર્યું છે',
+'enotif_subject_created' => '{{SITENAME}}માં {{gender:$2|$2}}એ પૃષ્ઠ $1 બનાવ્યું છે',
+'enotif_subject_moved' => '{{SITENAME}} પૃષ્ઠ $1ને {{gender:$2|$2}}એ ખસેડ્યું છે',
+'enotif_subject_restored' => '{{SITENAME}} પૃષ્ઠ $1 {{gender:$2|$2}}એ પુન:સ્થાપિત કર્યું છે',
+'enotif_subject_changed' => '{{SITENAME}} પૃષ્ઠ $1માં {{gender:$2|$2}}એ ફેરફાર કર્યો છે',
+'enotif_body_intro_deleted' => '{{SITENAME}} પાનું $1 $PAGEEDITDATEના રોજ {{gender:$2|$2}}એ દૂર કર્યું છે, જુઓ $3.',
+'enotif_body_intro_created' => '{{SITENAME}}નું પાનું $1 $PAGEEDITDATEના રોજ {{gender:$2|$2}} દ્વારા બનાવવામાં આવ્યું છે, હાલની આવૃત્તિ માટે $3 જુઓ.',
+'enotif_body_intro_moved' => '{{SITENAME}} પૃષ્ઠ $1ને {{gender:$2|$2}}એ $PAGEEDITDATEના રોજ દિશાનિર્દેશન આપ્યું છે, હાલની આવૃત્તિ માટે જુઓ: $3.',
+'enotif_body_intro_changed' => '{{SITENAME}} પૃષ્ઠ $1ને {{gender:$2|$2}}એ $PAGEEDITDATEના રોજ બદલ્યું છે, હાલની આવૃત્તિ માટે જુઓ: $3.',
 'enotif_lastvisited' => 'તમારી પાછલી મુલાકાત પછી થયેલા બધા ફેરફારો માટે $1 જુઓ',
 'enotif_lastdiff' => 'આ ફેરફાર જોવા $1 જુઓ',
 'enotif_anon_editor' => 'અનામિ સભ્ય $1',
 'enotif_body' => 'પ્રિય $WATCHINGUSERNAME,
 
-
-{{SITENAME}}નું પાનું $PAGETITLE સભ્ય $PAGEEDITORએ $PAGEEDITDATEના રોજ $CHANGEDORCREATED છે, હાલની આવૃત્તિ માટે $PAGETITLE_URL જુઓ.
-
-$NEWPAGE
+$PAGEINTRO $NEWPAGE
 
 ફેરફારોનો સારાંશ: $PAGESUMMARY $PAGEMINOREDIT
 
 સંપાદકનો સંપર્ક :
-mail: $PAGEEDITOR_EMAIL
-wiki: $PAGEEDITOR_WIKI
+ઇ-મેલ: $PAGEEDITOR_EMAIL
+વિકિ: $PAGEEDITOR_WIKI
 
 જ્યાં સુધી તમે આ પાનાની મુલાકાત નહી લો ત્યાં સુધી તેમાં ભવિષ્યમાં થનાર કોઇ પણ ફેરફારની સૂચના તમને મળશે નહિ.
 તમે તમારી ધ્યાન સૂચિમાં તમે જોયેલા પાના સંબંધી સૂચનાને લાગતા વિલપોમાં ફેરફાર કરી શકો છો.
@@ -2217,6 +2222,8 @@ $UNWATCHURL
 
 મંતવ્યો અને વધુ મદદ માટે 
 {{canonicalurl:{{MediaWiki:Helppage}}}}',
+'created' => 'બનાવ્યું',
+'changed' => 'બદલ્યું',
 
 # Delete
 'deletepage' => 'પાનું હટાવો',
@@ -2410,9 +2417,9 @@ $1',
 'blanknamespace' => '(મુખ્ય)',
 
 # Contributions
-'contributions' => 'સભ્યનું યોગદાન',
+'contributions' => '{{GENDER:$1|સભ્ય}}નું યોગદાન',
 'contributions-title' => 'સભ્ય $1નું યોગદાન',
-'mycontris' => 'મારà«\82àª\82 àª¯à«\8bàª\97દાન',
+'mycontris' => 'યોગદાન',
 'contribsub2' => '$1 માટે ($2)',
 'nocontribs' => 'આ પરિમાણને મળતી પરિણામ નથી મળ્યાં',
 'uctop' => '(છેક ઉપર)',
@@ -2438,7 +2445,7 @@ $1',
 'sp-contributions-submit' => 'શોધો',
 
 # What links here
-'whatlinkshere' => 'àª\85હિàª\82 શું જોડાય છે',
+'whatlinkshere' => 'àª\85હà«\80 શું જોડાય છે',
 'whatlinkshere-title' => '"$1" સાથે જોડાયેલાં પાનાં',
 'whatlinkshere-page' => 'પાનું:',
 'linkshere' => "નીચેના પાનાઓ '''[[:$1]]''' સાથે જોડાય છે:",
@@ -2453,7 +2460,7 @@ $1',
 'whatlinkshere-hideredirs' => 'અન્યત્ર વાળેલાં પાનાં $1',
 'whatlinkshere-hidetrans' => '$1 આરપાર સમાવેશનો',
 'whatlinkshere-hidelinks' => 'કડીઓ $1',
-'whatlinkshere-hideimages' => '$1 àª\9aિતà«\8dર કડીઓ',
+'whatlinkshere-hideimages' => '$1 àª«àª¾àª\87લનà«\80 કડીઓ',
 'whatlinkshere-filters' => 'ચાળણી',
 
 # Block/unblock
@@ -2484,7 +2491,7 @@ $1',
 'ipbemailban' => 'સભ્યના ઇ-મેલ મોકલવા પર પ્રતિબંધ મૂકો',
 'ipbenableautoblock' => 'આ સભ્ય દ્વારા વપરાયેલ  IP સરનામા પર અને તત-પશ્ચ્યાત વપરાયેલ IP સરનામા ને સ્વયંચાલિત રીતે રોક લગાવો',
 'ipbsubmit' => 'આ સભ્ય પર પ્રતિબંધ મૂકો',
-'ipbother' => 'અન્ય સમય',
+'ipbother' => 'અન્ય સમય:',
 'ipboptions' => '૨ કલાક:2 hours,૧ દિવસ:1 day,૩ દિવસ:3 days,૧ સપ્તાહ:1 week,૨ સપ્તાહ:2 weeks,૧ માસ:1 month,૩ માસ:3 months,૬ માસ:6 months,૧ વર્ષ:1 year,અમર્યાદ:infinite',
 'ipbotheroption' => 'અન્ય',
 'ipbotherreason' => 'અન્ય/વધારાનું કારણ:',
@@ -2614,7 +2621,7 @@ $1',
 # Move page
 'move-page' => '$1 ખસેડો',
 'move-page-legend' => 'પાનું ખસેડો',
-'movepagetext' => "નà«\80àª\9aà«\87નà«\81àª\82 àª«à«\8bરà«\8dમ àªµàª¾àªªàª°àªµàª¾àª¥à«\80 àª\86 àªªàª¾àª¨àª¾àª¨à«\81àª\82 àª¨àª¾àª® àª¬àª¦àª²àª¾àª\87 àª\9cશà«\87 àª\85નà«\87 àª¤à«\87માàª\82 àª°àª¹à«\87લà«\80 àª¬àª§à«\80 àª®àª¹àª¿àª¤àª¿ નવા નામે બનેલાં પાનામાં ખસેડાઇ જશે.
+'movepagetext' => "નà«\80àª\9aà«\87નà«\81àª\82 àª«à«\8bરà«\8dમ àªµàª¾àªªàª°àªµàª¾àª¥à«\80 àª\86 àªªàª¾àª¨àª¾àª¨à«\81àª\82 àª¨àª¾àª® àª¬àª¦àª²àª¾àª\87 àª\9cશà«\87 àª\85નà«\87 àª¤à«\87માàª\82 àª°àª¹à«\87લà«\80 àª¬àª§à«\80 àª®àª¾àª¹àª¿àª¤à«\80 નવા નામે બનેલાં પાનામાં ખસેડાઇ જશે.
 જુનું પાનું, નવા બનેલા પાના તરફ વાળતું થશે.
 તમે આવા અન્યત્ર વાળેલાં પનાઓને આપોઆપ જ તેના મુળ શીર્ષક સાથે જોડી શકશો.
 જો તમે તેમ કરવા ના ઇચ્છતા હોવ તો, [[Special:DoubleRedirects|બેવડા]] અથવા [[Special:BrokenRedirects|ત્રુટક કડી વાળા]] અન્યત્ર વાળેલા પાનાઓની યાદી ચકાસીને ખાતરી કરી લેશો.
@@ -2921,12 +2928,21 @@ $1',
 
 # Info page
 'pageinfo-title' => ' $1 પાના ની માહિતી નૂ મથાડૂ',
+'pageinfo-header-basic' => 'સામાન્ય માહિતી',
 'pageinfo-header-edits' => 'ઇતિહાસ સંપાદન',
+'pageinfo-header-properties' => 'પાનાંના ગુણધર્મો',
+'pageinfo-display-title' => 'દેખાવ શિર્ષક',
 'pageinfo-length' => 'પૃષ્ઠની લંબાઇ (બાઇટમાં)',
+'pageinfo-robot-policy' => 'શોધ એન્જિન સ્થિતિ',
 'pageinfo-views' => 'જોનારાની સંખ્યા',
 'pageinfo-watchers' => 'પાના નીરીક્ષકોની સંખ્યા',
+'pageinfo-firstuser' => 'પૃષ્ઠ સર્જક',
+'pageinfo-firsttime' => 'પૃષ્ઠ સર્જનની તારીખ',
+'pageinfo-lastuser' => 'છેલ્લો ફેરફાર કરનાર',
+'pageinfo-lasttime' => 'છેલ્લા ફેરફારની તારીખ',
 'pageinfo-edits' => 'કુલ સંપાદનોની સંખ્યા',
 'pageinfo-authors' => 'ક્ષેત્રના લેખકોની કુલ સંખ્યા',
+'pageinfo-recent-edits' => 'તાજા ફેરફારોની સંખ્યા (છેલ્લા $1 દરમ્યાન)',
 'pageinfo-toolboxlink' => 'પૃષ્ઠમાહિતી',
 'pageinfo-redirectsto-info' => 'માહિતી',
 'pageinfo-contentpage-yes' => 'હા',
@@ -2972,6 +2988,7 @@ $1',
 'file-info-size-pages' => '$1 × $2 પીક્સલ, ફાઈલ કદ: $3, MIME પ્રકાર: $4, $5 {{PLURAL:$5|પાનું|પાના}}',
 'file-nohires' => 'આથી વધુ આવર્તન ઉપલબ્ધ નથી.',
 'svg-long-desc' => 'SVG ફાઇલ, માત્ર $1 × $2 પીક્સલ, ફાઇલનું કદ: $3',
+'svg-long-error' => 'અયોગ્ય SVG ફાઇલ: $1',
 'show-big-image' => 'મહત્તમ આવર્તન',
 'show-big-image-preview' => 'આ મહાવરા દ્રશ્યનું માપ: $1.',
 'show-big-image-other' => 'અન્ય {{PLURAL:$2|આવર્તન|આવર્તનો}}: $1.',
@@ -3000,6 +3017,7 @@ $1',
 'hours' => '{{PLURAL:$1|$1 કલાક|$1 કલાકો}}',
 'days' => '{{PLURAL:$1|$1 દિવસ|$1 દિવસો}}',
 'ago' => '$1 પહેલાં',
+'just-now' => 'હમણાં',
 
 # Bad image list
 'bad_image_list' => 'ફોર્મેટ નીચે મુજબ છે:
@@ -3597,7 +3615,7 @@ $5
 'version-mediahandlers' => 'દ્રશ્યશ્રાવ્ય માધ્યમના ધારક',
 'version-hooks' => 'ખૂંટા',
 'version-extension-functions' => 'વિસ્તારક કાર્ય',
-'version-parser-extensiontags' => 'પદàª\9aà«\8dàª\9aà«\87દ àªµàª¿àª¸à«\8dતારàª\95 àª¨àª¾àª\95ા',
+'version-parser-extensiontags' => 'પà«\83થàª\95à«\8dàª\95રણ àªµàª¿àª¸à«\8dતારàª\95 àª\9fà«\85àª\97à«\8dસ',
 'version-parser-function-hooks' => 'પદચ્છેદ કાર્ય ખૂંટા',
 'version-hook-name' => 'ખૂંટાનું નામ્',
 'version-hook-subscribedby' => 'દ્વ્રારા લાભાન્વીત',
@@ -3668,14 +3686,14 @@ $5
 
 # Special:Tags
 'tags' => 'વૈધ ફેરફાર પાના',
-'tag-filter' => '[[Special:Tags|Tag]] ચાળણી',
+'tag-filter' => '[[Special:Tags|ટૅગ]] ચાળણી',
 'tag-filter-submit' => 'ચાળણી',
-'tags-title' => 'નાàª\95ા',
-'tags-intro' => 'àª\86 àªªàª¾àª¨àª¾ àªªàª° àª¸à«\8bફà«\8dàª\9fવà«\87ર àª¦à«\8dવારા àª\85àª\82àª\95િત àª«à«\87રફારના àª\9aિનà«\8dહà«\8b àª\85નà«\87 àª¤à«\87મનà«\8b àª\85રà«\8dથ àª¬àª¤àª¾àªµà«\87 છે.',
-'tags-tag' => 'નાàª\95ાનું નામ',
-'tags-display-header' => 'ફà«\87રફારનà«\80 àª¯àª¾àª¦àª¿àª®àª¾àª\82 àª\85વતરણ',
+'tags-title' => 'àª\9fà«\85àª\97à«\8dસ',
+'tags-intro' => 'àª\86 àªªàª¾àª¨àª¾ àªªàª° àª¸à«\89ફà«\8dàª\9fવà«\85ર àª¦à«\8dવારા, àª¸àª\82પાદનનà«\87 àª\9aિહà«\8dનિત àª\95રાયà«\87લાàª\82 àª\9fà«\85àª\97à«\8dસનà«\80 àª¯àª¾àª¦à«\80 àª\85નà«\87 àª¤à«\87નાàª\82 àª\85રà«\8dથ છે.',
+'tags-tag' => 'àª\9fà«\85àª\97નું નામ',
+'tags-display-header' => 'ફà«\87રફારનà«\80 àª¯àª¾àª¦àª¿àª\93માàª\82 àª¦à«\87àª\96ાવ',
 'tags-description-header' => 'અર્થનું પૂર્ણ વિવરણ',
-'tags-hitcount-header' => 'અંકિત ફેરફાર',
+'tags-hitcount-header' => 'અંકિત ફેરફાર',
 'tags-edit' => 'ફેરફાર કરો',
 'tags-hitcount' => '$1 {{PLURAL:$1|ફેરફાર|ફેરફારો}}',
 
@@ -3743,11 +3761,11 @@ $5
 'logentry-move-move_redir-noredirect' => '$1એ દિશાનિર્દેશન કરીને પાના $3ને $4 પર વાળ્યું પણ પાછળ દિશાનિર્દેશન છોડ્યું નહી',
 'logentry-patrol-patrol' => '$1 આવૃત્તિ ચિહ્નિત થયેલ પાનાં $4 $3 ચોકી કરવા ફરવા નીકળવું',
 'logentry-patrol-patrol-auto' => '$1 આપોઆપ ચિહ્નિત ચોકી પહેરો કરવા લાગ્યા આવૃત્તિ પાનું $4 $3',
-'logentry-newusers-newusers' => '$1એ સભ્ય ખાતું બનાવ્યું',
-'logentry-newusers-create' => '$1એ સભ્ય ખાતું બનાવ્યું',
-'logentry-newusers-create2' => '$1એ $3 નામે સભ્ય ખાતું બનાવ્યું',
+'logentry-newusers-newusers' => 'સભ્ય ખાતું $1 બનાવવામાં આવ્યું',
+'logentry-newusers-create' => 'સભ્ય ખાતું $1 બનાવવામાં આવ્યું',
+'logentry-newusers-create2' => 'સભ્ય ખાતું $3 $1 વડે બનાવવામાં આવ્યું',
 'logentry-newusers-autocreate' => 'એકાઉન્ટ $1 બનાવનાર આપોઆપ',
-'newuserlog-byemail' => 'ગુપ્ત સંજ્ઞા ઇ-મેલ દ્વારા મોકલાઇ છે.',
+'rightsnone' => '(કંઈ નહી)',
 
 # Feedback
 'feedback-bugornote' => 'જો તમે તકનીકી સમસ્યા વર્ણવવા માંગતા હોય તો  કૃપયા [$1 report a bug] એ બગ અહીં નોંધાવો.
index ac155d2..6f0b4c5 100644 (file)
@@ -492,7 +492,6 @@ Chammah as shen, t’ou gialdyn dooin dy screeu oo hene eh, ny ren oo coip jeh n
 'template-protected' => '(glast)',
 'template-semiprotected' => '(lieh-ghlast)',
 'hiddencategories' => "Ta'n duillag shoh ayns {{PLURAL:$1|ronney follit|ronney follit|ronney follit|ronnaghyn follit}}",
-'nocreatetitle' => 'Crooaght duillag jeorit',
 'nocreatetext' => "Ta ablid duillagyn noa y chroo lhiettalit ec {{SITENAME}}.<br />
 Foddee shiu goll er ash as reaghey duillag t'ayn nish, ny [[Special:UserLogin|loggal stiagh ny croo coontys]].",
 'nocreate-loggedin' => 'Cha nel kied ayd duillagyn noa y chroo er {{SITENAME}}.',
@@ -708,9 +707,11 @@ My bailliu eh y chiarail, bee eh ymmydit son cur gys lieh y chur dhyt er son yn
 'right-upload' => 'Laadey neese coadanyn',
 'right-delete' => 'Duillag y scryssey',
 
+# Special:Log/newusers
+'newuserlogpage' => 'Lioar chooishyn ny h-ymmydeyryn noa',
+
 # User rights log
 'rightslog' => 'Lioar chooishyn kiartyn ymmydeyr',
-'rightsnone' => '(veg)',
 
 # Associated actions - in the sentence "You do not have permission to X"
 'action-read' => 'y duillag shoh y lhaih',
@@ -954,9 +955,6 @@ Ta duillagyn er [[Special:Watchlist|dty rolley arrey]] ayns '''clou trome'''.",
 # Special:ListUsers
 'listusers-submit' => 'Taishbyn',
 
-# Special:Log/newusers
-'newuserlogpage' => 'Lioar chooishyn ny h-ymmydeyryn noa',
-
 # Special:ListGroupRights
 'listgrouprights-group' => 'Possan',
 'listgrouprights-rights' => 'Kiartyn',
@@ -1029,6 +1027,8 @@ $UNWATCHURL
 
 Aaveaghey as cooney s\'odjey:
 {{canonicalurl:{{MediaWiki:Helppage}}}}',
+'created' => 'crooit',
+'changed' => 'ceaghlit',
 
 # Delete
 'deletepage' => 'Scryss y duillag',
@@ -1468,6 +1468,9 @@ Bee adsyn elley follit dy seyr-obbragh.<br />
 # Special:Tags
 'tags-edit' => 'reaghey',
 
+# New logging system
+'rightsnone' => '(veg)',
+
 # Search suggestions
 'searchsuggest-search' => 'Ronsaghey',
 'searchsuggest-containing' => 'goaill stiagh...',
index 02ae94e..0eaceca 100644 (file)
@@ -374,6 +374,9 @@ Ku gwada tare da amfani da \"all:\" don bincikar duka shafunan (har da shafunan
 
 'grouppage-sysop' => '{{ns:project}}:Masu hukunci',
 
+# Special:Log/newusers
+'newuserlogpage' => 'Rajistan sabbin akwantoci',
+
 # User rights log
 'rightslog' => "Rajistan bayar da izini ga ma'aikata",
 
@@ -483,9 +486,6 @@ Ku gwada tare da amfani da \"all:\" don bincikar duka shafunan (har da shafunan
 # Special:ListUsers
 'listusers-submit' => 'Nuna',
 
-# Special:Log/newusers
-'newuserlogpage' => 'Rajistan sabbin akwantoci',
-
 # Special:ListGroupRights
 'listgrouprights-members' => '(jerin mambobi)',
 
index 05863ff..d66885c 100644 (file)
@@ -501,7 +501,6 @@ Ngì thùng-sṳ̀ ya-yeu hiong Wikimedia pó-chṳn ngì só thì-kâu ke nui-y
 'template-semiprotected' => '(pan-pó-fu)',
 'hiddencategories' => 'Liá-ya̍p he su̍k-yî $1-ke yún-chhòng fûn-lui ke sṳ̀n-yèn:',
 'edittools' => '<!-- Chhṳ́-chhu ke vùn-sṳ chiông-voi pûn hién-sṳ chhai yî-ha phiên-cho lâu song-chhòn péu-tân chûng. -->',
-'nocreatetitle' => 'Chhóng-kien vùn-chông su han-chṳ',
 'nocreatetext' => 'Chhṳ́ mióng-chham han-chṳ chhóng-chho sîn hong-mien ke kûng-yung. ngì khó-yî fán-fì pin phiên-cho yí-kîn yû ke hong-mien, fe̍t-chá [[Special:UserLogin|tên-liu̍k fe̍t-he chhóng-kien sîn chong-fu]].',
 'nocreate-loggedin' => 'Ngì chhai liá-ke wiki-tsûng hàn-mò hí-khó-khièn kien-li̍p sîn vùn-tsông.',
 'permissionserrors' => 'Khièn-han Tsho-ngu',
@@ -716,11 +715,13 @@ Tshòng-tón pit-sî chhai $1-ke sṳ-ngièn yî-ha.',
 'grouppage-bot' => '{{ns:project}}:Kî-hi-ngìn',
 'grouppage-sysop' => '{{ns:project}}:Kón-lî-yèn',
 
+# Special:Log/newusers
+'newuserlogpage' => 'Sîn-chin yung-fu miàng-chhak',
+'newuserlogpagetext' => 'Liá-he yit-ke chui-khiun pûn chhóng-kien yung-fu ke ngit-ki.',
+
 # User rights log
 'rightslog' => 'Yung-fu khièn-han ngit-ki',
 'rightslogtext' => 'Yî-ha ki-liu̍k yung-fu khièn-han ke kiên-kói ki-liu̍k.',
-'rightslogentry' => 'Chiong $1 ke khièn-han chhiùng $2 kói-vi $3',
-'rightsnone' => '(mò)',
 
 # Associated actions - in the sentence "You do not have permission to X"
 'action-edit' => 'phiên-siá pún-chông',
@@ -1004,10 +1005,6 @@ Also see [[Special:WantedCategories|wanted categories]].',
 'listusers-submit' => 'Hién-sṳ',
 'listusers-noresult' => 'Cháu put-to yung-fu.',
 
-# Special:Log/newusers
-'newuserlogpage' => 'Sîn-chin yung-fu miàng-chhak',
-'newuserlogpagetext' => 'Liá-he yit-ke chui-khiun pûn chhóng-kien yung-fu ke ngit-ki.',
-
 # Special:ListGroupRights
 'listgrouprights-members' => '(sṳ̀n-yèn chhîn-tân)',
 
@@ -1068,6 +1065,8 @@ Also see [[Special:WantedCategories|wanted categories]].',
 'enotif_lastdiff' => 'Kiám-chhà kiên-kói chhiáng chhâm-siòng $1.',
 'enotif_anon_editor' => 'ngia̍k-miàng yung-fu $1',
 'enotif_body' => 'Chhîn-oi ke $WATCHINGUSERNAME, $PAGEEDITOR yí-kîn chhai $PAGEEDITDATE $CHANGEDORCREATED{{SITENAME}} ke $PAGETITLE vùn-chông, chhiáng-to $PAGETITLE_URL kiám-sṳ siên-chhièn pán-pún.  $NEWPAGE phiên-si̍p chak-yeu: $PAGESUMMARY $PAGEMINOREDIT lièn-kiê chhṳ́ phiên-si̍p-chá: email: $PAGEEDITOR_EMAIL pún-chham: $PAGEEDITOR_WIKI chhai ngì fóng-mun chhṳ́-chông chṳ̂-chhièn, chiông-lòi ke kiên-kói vù-nèn hiong ngì thûng-tî. Ngì khó-yî chhûng-sat ngì só-yû kam-sṳ vùn-chông ke thûng-tî phêu-ki. {{SITENAME}} thûng-tî ne-thúng -- yeu kói-pien ngì-ke kam-sṳ lie̍t-péu sat-thin, chhiáng chhâm-siòng {{canonicalurl:{{#special:EditWatchlist}}}} chin-yit-phu ke pông-chhu: {{canonicalurl:{{MediaWiki:Helppage}}}}',
+'created' => 'Yí-kîn kien-li̍p',
+'changed' => 'siû-kói liáu',
 
 # Delete
 'deletepage' => 'Chhù-thet hong-mien',
@@ -1669,5 +1668,6 @@ Sòn-chhṳ phêu-chún yi-liau.',
 # New logging system
 'revdelete-restricted' => 'yí-kîn yin-yung han-tsṳ tsṳ tshâu-tsok-yèn',
 'revdelete-unrestricted' => 'yí-kîn yì-tshù yû-kûan tshâu-tsok-yè ke han-tsṳ',
+'rightsnone' => '(mò)',
 
 );
index 4501a66..a6e9b8e 100644 (file)
@@ -659,6 +659,8 @@ E ʻoluʻolu, e hōʻoia i ka hoʻokūkū ʻana i lalo, a laila, e mālama i nā
 'watching' => 'Ke kia‘i nei...',
 'unwatching' => 'Ke wehe nei i ke kiaʻi...',
 
+'changed' => 'ua loli ‘ia',
+
 # Delete
 'deletepage' => 'Kāpae ʻaoʻao',
 'actioncomplete' => 'Ua pau',
index 58491b2..2f1ab98 100644 (file)
@@ -12,6 +12,7 @@
  * @author Drorsnir
  * @author Hoo
  * @author Ijon
+ * @author Inkbug
  * @author Ofekalef
  * @author Ofrahod
  * @author Rotem Dan (July 2003)
@@ -373,7 +374,7 @@ $messages = array(
 'tog-previewontop' => 'הצגת תצוגה מקדימה לפני תיבת העריכה (או: אחריה)',
 'tog-previewonfirst' => 'הצגת תצוגה מקדימה בעריכה ראשונה',
 'tog-nocache' => 'מניעת אחסון הדפים בזיכרון המטמון בדפדפן',
-'tog-enotifwatchlistpages' => '×\9cש×\9c×\95×\97 ×\90×\9c×\99×\99 ×\93×\95×\90ר ×\90×\9cק×\98ר×\95× ×\99 ×\9b×\90שר × ×¢×©×\94 ×©×\99× ×\95×\99 ×\91×\93×£ ×\90×\95 ×\91קובץ ברשימת המעקב שלי',
+'tog-enotifwatchlistpages' => '×\9cש×\9c×\95×\97 ×\90×\9c×\99×\99 ×\93×\95×\90ר ×\90×\9cק×\98ר×\95× ×\99 ×\9b×\90שר ×\9eשתנ×\94 ×\93×£ ×\90×\95 קובץ ברשימת המעקב שלי',
 'tog-enotifusertalkpages' => 'לשלוח אליי דואר אלקטרוני כאשר נעשה שינוי בדף שיחת המשתמש שלי',
 'tog-enotifminoredits' => 'לשלוח אליי דואר אלקטרוני גם על עריכות משניות של דפים וקבצים',
 'tog-enotifrevealaddr' => 'חשיפת כתובת הדוא"ל שלך בהודעות דוא"ל',
@@ -484,6 +485,7 @@ $messages = array(
 'newwindow' => '(נפתח בחלון חדש)',
 'cancel' => 'ביטול / יציאה',
 'moredotdotdot' => 'עוד…',
+'morenotlisted' => 'עוד פריטים שאינם ברשימה…',
 'mypage' => 'דף משתמש',
 'mytalk' => 'שיחה',
 'anontalk' => 'השיחה עבור IP זה',
@@ -788,7 +790,7 @@ $2',
 'gotaccount' => 'כבר נרשמתם? $1.',
 'gotaccountlink' => 'כניסה לחשבון',
 'userlogin-resetlink' => 'שכחת את פרטי הכניסה?',
-'createaccountmail' => '×\91×\90×\9eצע×\95ת ×\93×\95×\90\9c',
+'createaccountmail' => 'ש×\99×\9e×\95ש ×\91ס×\99ס×\9e×\94 ×\96×\9e× ×\99ת ×\90קר×\90×\99ת ×\95ש×\9c×\99×\97ת×\94 ×\9c×\9bת×\95×\91ת ×\94×\93×\95×\90\9c ×\94×\9eצ×\95×\99נת ×\9c×\94×\9c×\9f',
 'createaccountreason' => 'סיבה:',
 'badretype' => 'הסיסמאות שהזנתם אינן מתאימות.',
 'userexists' => 'שם המשתמש שבחרתם כבר נמצא בשימוש.
@@ -865,7 +867,8 @@ $2',
 
 # E-mail sending
 'php-mail-error-unknown' => 'שגיאה לא ידועה בפונקציה mail()‎ של PHP',
-'user-mail-no-addy' => 'ניסיון לשלוח דוא"ל ללא כתובת דוא"ל',
+'user-mail-no-addy' => 'ניסיון לשלוח דוא"ל ללא כתובת דוא"ל.',
+'user-mail-no-body' => 'ניסיון לשלוח דוא"ל עם תוכן ריק או קצר מאוד.',
 
 # Change password dialog
 'resetpass' => 'שינוי סיסמה',
@@ -932,6 +935,7 @@ $2
 'changeemail-oldemail' => 'כתובת דוא"ל נוכחית:',
 'changeemail-newemail' => 'כתובת דוא"ל חדשה:',
 'changeemail-none' => '(אין)',
+'changeemail-password' => 'סיסמה ב{{grammar:תחילית|{{SITENAME}}}}:',
 'changeemail-submit' => 'שינוי כתובת הדוא"ל',
 'changeemail-cancel' => 'ביטול',
 
@@ -1108,8 +1112,7 @@ $2
 'template-protected' => '(מוגנת)',
 'template-semiprotected' => '(מוגנת חלקית)',
 'hiddencategories' => 'דף זה כלול ב{{PLURAL:$1|קטגוריה מוסתרת אחת|־$1 קטגוריות מוסתרות}}:',
-'edittools' => '<!-- הטקסט הנכתב כאן יוצג מתחת לטפסי עריכת דפים והעלאת קבצים, ולפיכך ניתן לכתוב להציג בו תווים קשים לכתיבה, קטעים מוכנים של טקסט ועוד. -->',
-'nocreatetitle' => 'יצירת הדפים הוגבלה',
+'edittools' => '<!-- הטקסט הנכתב כאן יוצג מתחת לטופסי עריכת דפים והעלאת קבצים, ולפיכך ניתן לכתוב להציג בו תווים קשים לכתיבה, קטעים מוכנים של טקסט ועוד. -->',
 'nocreatetext' => 'אתר זה מגביל את האפשרות ליצור דפים חדשים. באפשרותכם לחזור אחורה ולערוך דף קיים, או [[Special:UserLogin|להיכנס לחשבון]].',
 'nocreate-loggedin' => 'אינכם מורשים ליצור דפים חדשים.',
 'sectioneditnotsupported-title' => 'עריכת פסקאות אינה נתמכת',
@@ -1660,15 +1663,13 @@ $1",
 'right-sendemail' => 'שליחת דואר אלקטרוני למשתמשים אחרים',
 'right-passwordreset' => 'צפייה בדואר אלקטרוני של איפוס סיסמה',
 
+# Special:Log/newusers
+'newuserlogpage' => 'יומן רישום משתמשים',
+'newuserlogpagetext' => 'זהו יומן המכיל הרשמות של משתמשים.',
+
 # User rights log
 'rightslog' => 'יומן תפקידים',
 'rightslogtext' => 'זהו יומן השינויים בתפקידי המשתמשים.',
-'rightslogentry' => 'שינה את ההרשאות של $1 מ$2 ל$3',
-'rightslogentry-autopromote' => 'קודם אוטומטית מ$2 ל$3',
-'logentry-rights-rights' => '$1 שינה את ההרשאות של $3 מ$4 ל$5',
-'logentry-rights-rights-legacy' => '$1 שינה את ההרשאות של $3',
-'logentry-rights-autopromote' => '$1 קודם אוטומטית מ$4 ל$5',
-'rightsnone' => '(כלום)',
 
 # Associated actions - in the sentence "You do not have permission to X"
 'action-read' => 'לקרוא דף זה',
@@ -2302,7 +2303,7 @@ $1',
 'linksearch-ok' => 'חיפוש',
 'linksearch-text' => 'ניתן להשתמש בתווים כלליים, לדוגמה <span dir="ltr">"*.wikipedia.org"</span>.
 נדרשת לפחות סיומת אינטרנט (TLD), למשל <span dir="ltr">"*.org"</span>.<br />
-פרוטוקולים נתמכים: <code dir="ltr">$1</code> (ברירת המחדל היא <span dir="ltr">http://</span> אם לא צוין פרוטוקול).',
+{{PLURAL:$2|פרוטוקול נתמך|פרוטוקולים נתמכים}}: <code dir="ltr">$1</code> (ברירת המחדל היא <span dir="ltr">http://</span> אם לא צוין פרוטוקול).',
 'linksearch-line' => '$1 מקושר מהדף $2',
 'linksearch-error' => 'תווים כלליים יכולים להופיע רק בתחילת שם השרת.',
 
@@ -2315,16 +2316,12 @@ $1',
 # Special:ActiveUsers
 'activeusers' => 'רשימת משתמשים פעילים',
 'activeusers-intro' => 'זוהי רשימת המשתמשים שביצעו פעולה כלשהי {{PLURAL:$1|ביום האחרון|ביומיים האחרונים|ב־$1 הימים האחרונים}}.',
-'activeusers-count' => '{{PLURAL:$1|ער×\99×\9b×\94 ×\90×\97ת|$1 ×¢×¨×\99×\9bות}} ב{{PLURAL:$3|יום האחרון|יומיים האחרונים|־$3 הימים האחרונים}}',
+'activeusers-count' => '{{PLURAL:$1|פע×\95×\9c×\94 ×\90×\97ת|$1 ×¤×¢×\95×\9cות}} ב{{PLURAL:$3|יום האחרון|יומיים האחרונים|־$3 הימים האחרונים}}',
 'activeusers-from' => 'הצגת משתמשים החל מ:',
 'activeusers-hidebots' => 'הסתרת בוטים',
 'activeusers-hidesysops' => 'הסתרת מפעילי מערכת',
 'activeusers-noresult' => 'לא נמצאו משתמשים.',
 
-# Special:Log/newusers
-'newuserlogpage' => 'יומן רישום משתמשים',
-'newuserlogpagetext' => 'זהו יומן המכיל הרשמות של משתמשים.',
-
 # Special:ListGroupRights
 'listgrouprights' => 'רשימת הרשאות לקבוצה',
 'listgrouprights-summary' => 'זוהי רשימה של קבוצות המשתמש המוגדרות באתר זה, עם ההרשאות של כל אחת.
@@ -2382,7 +2379,7 @@ $1',
 'usermessage-editor' => 'שולח הודעות המערכת',
 
 # Watchlist
-'watchlist' => 'רשימת המעקב שלי',
+'watchlist' => 'רשימת המעקב',
 'mywatchlist' => 'רשימת מעקב',
 'watchlistfor2' => 'עבור $1 $2',
 'nowatchlist' => 'אין דפים ברשימת המעקב.',
@@ -2390,9 +2387,8 @@ $1',
 'watchnologin' => 'לא נכנסתם לחשבון',
 'watchnologintext' => 'עליכם [[Special:UserLogin|להיכנס לחשבון]] כדי לערוך את רשימת המעקב.',
 'addwatch' => 'הוספה לרשימת המעקב',
-'addedwatchtext' => 'הדף [[:$1]] נוסף ל[[Special:Watchlist|רשימת המעקב]]. שינויים שייערכו בעתיד, בדף זה ובדף השיחה שלו, יוצגו ברשימת המעקב.
-
-בנוסף, הדף יופיע בכתב מודגש ב[[Special:RecentChanges|רשימת השינויים האחרונים]], כדי להקל עליכם את המעקב אחריו.',
+'addedwatchtext' => 'הדף [[:$1]] נוסף ל[[Special:Watchlist|רשימת המעקב]].
+שינויים שייערכו בעתיד בדף זה ובדף השיחה שלו, יוצגו ברשימת המעקב.',
 'removewatch' => 'הסרה מרשימת המעקב',
 'removedwatchtext' => 'הדף [[:$1]] הוסר מ[[Special:Watchlist|רשימת המעקב]].',
 'watch' => 'מעקב',
@@ -2421,16 +2417,16 @@ $1',
 'enotif_mailer' => 'הודעות {{SITENAME}}',
 'enotif_reset' => 'סימון כל הדפים כאילו נצפו',
 'enotif_impersonal_salutation' => 'משתמש של {{SITENAME}}',
-'enotif_subject_deleted' => 'הדף $1 ב{{grammar:תחילית|{{SITENAME}}}} נמחק על ידי {{gender:$2|$2}}',
-'enotif_subject_created' => 'הדף $1 ב{{grammar:תחילית|{{SITENAME}}}} נוצר על ידי {{gender:$2|$2}}',
-'enotif_subject_moved' => 'הדף $1 ב{{grammar:תחילית|{{SITENAME}}}} הועבר על ידי {{gender:$2|$2}}',
-'enotif_subject_restored' => 'הדף $1 ב{{grammar:תחילית|{{SITENAME}}}} שוחזר על ידי {{gender:$2|$2}}',
-'enotif_subject_changed' => 'הדף $1 ב{{grammar:תחילית|{{SITENAME}}}} שונה על ידי {{gender:$2|$2}}',
-'enotif_body_intro_deleted' => 'הדף $1 ב{{grammar:תחילית|{{SITENAME}}}} נמחק ב־$PAGEEDITDATE על ידי {{gender:$2|$2}}, ראו $3 לגרסה הנוכחית.',
-'enotif_body_intro_created' => 'הדף $1 ב{{grammar:תחילית|{{SITENAME}}}} נוצר ב־$PAGEEDITDATE על ידי {{gender:$2|$2}}, ראו $3 לגרסה הנוכחית.',
-'enotif_body_intro_moved' => 'הדף $1 ב{{grammar:תחילית|{{SITENAME}}}} הועבר ב־$PAGEEDITDATE על ידי {{gender:$2|$2}}, ראו $3 לגרסה הנוכחית.',
-'enotif_body_intro_restored' => 'הדף $1 ב{{grammar:תחילית|{{SITENAME}}}} שוחזר ב־$PAGEEDITDATE על ידי {{gender:$2|$2}}, ראו $3 לגרסה הנוכחית.',
-'enotif_body_intro_changed' => 'הדף $1 ב{{grammar:תחילית|{{SITENAME}}}} שונה ב־$PAGEEDITDATE על ידי {{gender:$2|$2}}, ראו $3 לגרסה הנוכחית.',
+'enotif_subject_deleted' => 'הדף $1 ב{{grammar:תחילית|{{SITENAME}}}} נמחק על ידי $2',
+'enotif_subject_created' => 'הדף $1 ב{{grammar:תחילית|{{SITENAME}}}} נוצר על ידי $2',
+'enotif_subject_moved' => 'הדף $1 ב{{grammar:תחילית|{{SITENAME}}}} הועבר על ידי $2',
+'enotif_subject_restored' => 'הדף $1 ב{{grammar:תחילית|{{SITENAME}}}} שוחזר על ידי $2',
+'enotif_subject_changed' => 'הדף $1 ב{{grammar:תחילית|{{SITENAME}}}} שונה על ידי $2',
+'enotif_body_intro_deleted' => 'הדף $1 ב{{grammar:תחילית|{{SITENAME}}}} נמחק ב־$PAGEEDITDATE על ידי $2, ראו $3.',
+'enotif_body_intro_created' => 'הדף $1 ב{{grammar:תחילית|{{SITENAME}}}} נוצר ב־$PAGEEDITDATE על ידי $2, ראו $3 לגרסה הנוכחית.',
+'enotif_body_intro_moved' => 'הדף $1 ב{{grammar:תחילית|{{SITENAME}}}} הועבר ב־$PAGEEDITDATE על ידי $2, ראו $3 לגרסה הנוכחית.',
+'enotif_body_intro_restored' => 'הדף $1 ב{{grammar:תחילית|{{SITENAME}}}} שוחזר ב־$PAGEEDITDATE על ידי $2, ראו $3 לגרסה הנוכחית.',
+'enotif_body_intro_changed' => 'הדף $1 ב{{grammar:תחילית|{{SITENAME}}}} שונה ב־$PAGEEDITDATE על ידי $2, ראו $3 לגרסה הנוכחית.',
 'enotif_lastvisited' => 'ראו $1 לכל השינויים מאז ביקורכם האחרון.',
 'enotif_lastdiff' => 'ראו $1 לשינוי זה.',
 'enotif_anon_editor' => 'משתמש אנונימי $1',
@@ -2444,7 +2440,7 @@ $PAGEINTRO $NEWPAGE
 בדואר האלקטרוני: $PAGEEDITOR_EMAIL
 באתר: $PAGEEDITOR_WIKI
 
\9c×\90 ×ª×\94×\99×\99× ×\94 ×\94×\95×\93×¢×\95ת ×¢×\9c ×©×\99× ×\95×\99×\99×\9d × ×\95ספ×\99×\9d ×¢×\93 ×©×ª×\91קר×\95 ×\90ת ×\94דף. באפשרותכם גם לאפס את דגלי ההודעות בכל הדפים שברשימת המעקב.
\9c×\90 ×ª×\94×\99×\99× ×\94 ×\94×\95×\93×¢×\95ת ×¢×\9c ×¤×¢×\95×\9c×\95ת × ×\95ספ×\95ת ×¢×\93 ×©×ª×\91קר×\95 ×\91דף. באפשרותכם גם לאפס את דגלי ההודעות בכל הדפים שברשימת המעקב.
 
              מערכת ההודעות של {{SITENAME}}
 
@@ -2460,6 +2456,8 @@ $UNWATCHURL
 
 למשוב ולעזרה נוספת:
 {{canonicalurl::{{MediaWiki:Helppage}}}}',
+'created' => 'נוצר',
+'changed' => 'שונה',
 
 # Delete
 'deletepage' => 'מחיקה',
@@ -2529,6 +2527,8 @@ $UNWATCHURL
 'prot_1movedto2' => '[[$1]] הועבר לשם [[$2]]',
 'protect-badnamespace-title' => 'מרחב שם שבו לא ניתן להגן על דפים',
 'protect-badnamespace-text' => 'לא ניתן להגן על דפים במרחב שם זה.',
+'protect-norestrictiontypes-text' => 'לא ניתן להגן על דף זה כי אין סוגי הגנה זמינים.',
+'protect-norestrictiontypes-title' => 'דף שלא ניתן להגן עליו',
 'protect-legend' => 'אישור הפעלת ההגנה',
 'protectcomment' => 'סיבה:',
 'protectexpiry' => 'פקיעת ההגנה:',
@@ -2544,9 +2544,9 @@ $UNWATCHURL
 להלן ההגדרות הנוכחיות עבור הדף '''$1''':",
 'protect-cascadeon' => 'דף זה מוגן כרגע כיוון שהוא מוכלל {{PLURAL:$1|בדף הבא, שמופעלת עליו|בדפים הבאים, שמופעלת עליהם}} הגנה מדורגת. באפשרותכם לשנות את רמת ההגנה על הדף, אך זה לא ישפיע על ההגנה המדורגת.',
 'protect-default' => 'כל המשתמשים מורשים',
-'protect-fallback' => '×\9eשת×\9eש×\99×\9d ×\91×¢×\9c×\99 ×\94רש×\90ת "$1" ×\91×\9c×\91×\93',
-'protect-level-autoconfirmed' => '×\9e× ×\99עת ×\9eשת×\9eש×\99×\9d ×\97×\93ש×\99×\9d ×\95×\9c×\90 ×¨×©×\95×\9eים',
-'protect-level-sysop' => '×\9eפע×\99×\9c×\99 ×\9eער×\9bת ×\91×\9c×\91×\93',
+'protect-fallback' => 'רק ×\9eשת×\9eש×\99×\9d ×\91×¢×\9c×\99 ×\94רש×\90ת "$1" ×\9e×\95רש×\99×\9d',
+'protect-level-autoconfirmed' => 'רק ×\9eשת×\9eש×\99×\9d ×\95ת×\99ק×\99×\9d ×\9e×\95רשים',
+'protect-level-sysop' => 'רק ×\9eפע×\99×\9c×\99 ×\9eער×\9bת ×\9e×\95רש×\99×\9d',
 'protect-summary-cascade' => 'מדורג',
 'protect-expiring' => 'פוקעת $1 (UTC)',
 'protect-expiring-local' => 'פוקעת $1',
@@ -2846,7 +2846,7 @@ $1',
 אם תבחרו לא לעשות זאת, אנא ודאו שאין [[Special:DoubleRedirects|הפניות כפולות]] או [[Special:BrokenRedirects|שבורות]].
 אתם אחראים לוודא שכל הקישורים ימשיכו להצביע למקום שאליו הם אמורים להצביע.
 
-ש×\99×\9e×\95 ×\9c×\91: ×\94×\93×£ '''×\9c×\90''' ×\99×\95×¢×\91ר ×\90×\9d ×\9b×\91ר ×\99ש ×\93×£ ×ª×\97ת ×\94ש×\9d ×\94×\97×\93ש, ×\90×\9c×\90 ×\90×\9d ×\94×\93×£ ×\94×\96×\94 ×¨×\99ק, ×\90×\95 ×©×\94×\95×\90 ×\94פנ×\99×\94, ואין לו היסטוריית עריכות קודמות.
+ש×\99×\9e×\95 ×\9c×\91: ×\94×\93×£ '''×\9c×\90''' ×\99×\95×¢×\91ר ×\90×\9d ×\9b×\91ר ×\99ש ×\93×£ ×ª×\97ת ×\94ש×\9d ×\94×\97×\93ש, ×\90×\9c×\90 ×\90×\9d ×\94×\93×£ ×\94×\96×\94 ×\94×\95×\90 ×\94פנ×\99×\94 ואין לו היסטוריית עריכות קודמות.
 פירוש הדבר שאפשר לשנות חזרה את שמו של דף לשם המקורי אם נעשתה טעות, ושלא ניתן לדרוס דף קיים.
 
 '''אזהרה!'''
@@ -2857,7 +2857,7 @@ $1',
 אנא ודאו שאין [[Special:DoubleRedirects|הפניות כפולות]] או [[Special:BrokenRedirects|שבורות]].
 אתם אחראים לוודא שכל הקישורים ימשיכו להצביע למקום שאליו הם אמורים להצביע.
 
-ש×\99×\9e×\95 ×\9c×\91: ×\94×\93×£ '''×\9c×\90''' ×\99×\95×¢×\91ר ×\90×\9d ×\9b×\91ר ×\99ש ×\93×£ ×ª×\97ת ×\94ש×\9d ×\94×\97×\93ש, ×\90×\9c×\90 ×\90×\9d ×\94×\93×£ ×\94×\96×\94 ×¨×\99ק, ×\90×\95 ×©×\94×\95×\90 ×\94פנ×\99×\94, ואין לו היסטוריית עריכות קודמות.
+ש×\99×\9e×\95 ×\9c×\91: ×\94×\93×£ '''×\9c×\90''' ×\99×\95×¢×\91ר ×\90×\9d ×\9b×\91ר ×\99ש ×\93×£ ×ª×\97ת ×\94ש×\9d ×\94×\97×\93ש, ×\90×\9c×\90 ×\90×\9d ×\94×\93×£ ×\94×\96×\94 ×\94×\95×\90 ×\94פנ×\99×\94 ואין לו היסטוריית עריכות קודמות.
 פירוש הדבר שאפשר לשנות חזרה את שמו של דף לשם המקורי אם נעשתה טעות, ושלא ניתן לדרוס דף קיים.
 
 '''אזהרה!'''
@@ -3028,6 +3028,7 @@ $1',
 'import-error-interwiki' => 'לא ניתן לייבא את הדף "$1" כיוון ששמו שמור לקישור חיצוני (בין־ויקי).',
 'import-error-special' => 'לא ניתן לייבא את הדף "$1" כיוון שהוא שייך למרחב שם מיוחד שלא יכול להכיל דפים.',
 'import-error-invalid' => 'לא ניתן לייבא את הדף "$1" כיוון ששמו אינו תקין.',
+'import-error-unserialize' => 'לא ניתן היה לפענח את הגרסה $2 של הדף "$1". הגרסה מסומנת כאילו היא משתמשת במודל התוכן $3, אך קודדה כ{{GRAMMAR:תחילית|$4}}.',
 'import-options-wrong' => '{{PLURAL:$2|אפשרות שגויה|אפשרויות שגויות}}: <nowiki>$1</nowiki>',
 'import-rootpage-invalid' => 'לדף הבסיס שניתן יש כותרת לא תקינה.',
 'import-rootpage-nosubpage' => 'מרחב השם "$1" של דף הבסיס אינו מאפשר דפי־משנה.',
@@ -3211,6 +3212,7 @@ $1',
 'pageinfo-magic-words' => '{{PLURAL:$1|מילת קסם|מילות קסם}} ($1)',
 'pageinfo-hidden-categories' => '{{PLURAL:$1|קטגוריה מוסתרת|קטגוריות מוסתרות}} ($1)',
 'pageinfo-templates' => '{{PLURAL:$1|תבנית מוכללת|תבניות מוכללות}} ($1)',
+'pageinfo-transclusions' => '{{PLURAL:$1|דף|דפים}} שמוכלל בהם ($1)',
 'pageinfo-toolboxlink' => 'מידע על הדף',
 'pageinfo-redirectsto' => 'מפנה אל',
 'pageinfo-redirectsto-info' => 'מידע',
@@ -3219,6 +3221,10 @@ $1',
 'pageinfo-protect-cascading' => 'מופעלת הגנה מדורגת מכאן',
 'pageinfo-protect-cascading-yes' => 'כן',
 'pageinfo-protect-cascading-from' => 'דף זה מוגן בגלל הגנה מדורגת על',
+'pageinfo-category-info' => 'מידע על הקטגוריה',
+'pageinfo-category-pages' => 'מספר הדפים',
+'pageinfo-category-subcats' => 'מספר קטגוריות המשנה',
+'pageinfo-category-files' => 'מספר הקבצים',
 
 # Skin names
 'skinname-standard' => 'קלאסי',
@@ -3276,6 +3282,7 @@ $1',
 'file-nohires' => 'אין גרסה ברזולוציה גבוהה יותר.',
 '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' => 'תמונה ברזולוציה גבוהה יותר',
 'show-big-image-preview' => 'גודל תצוגה זו: $1.',
 'show-big-image-other' => '{{PLURAL:$2|רזולוציה אחרת|רזולוציות אחרות}}: $1.',
@@ -3301,10 +3308,16 @@ $1',
 'sp-newimages-showfrom' => 'הצגת קבצים חדשים החל מ־$2, $1',
 
 # Video information, used by Language::formatTimePeriod() to format lengths in the above messages
+'seconds-abbrev' => '{{PLURAL:$1|שנייה|$1 שניות}}',
+'minutes-abbrev' => "{{PLURAL:$1|דקה|$1 דק'}}",
+'hours-abbrev' => '{{PLURAL:$1|שעה|שעתיים|$1 שעות}}',
+'days-abbrev' => '{{PLURAL:$1|יום|יומיים|$1 ימים}}',
 'seconds' => '{{PLURAL:$1|שנייה|$1 שניות}}',
 'minutes' => '{{PLURAL:$1|דקה|$1 דקות}}',
 'hours' => '{{PLURAL:$1|שעה|שעתיים|$1 שעות}}',
 'days' => '{{PLURAL:$1|יום|יומיים|$1 ימים}}',
+'months' => '{{PLURAL:$1|חודש|חודשיים|$1 חודשים}}',
+'years' => '{{PLURAL:$1|שנה|שנתיים|$1 שנים}}',
 'ago' => 'לפני $1',
 'just-now' => 'לפני זמן קצר',
 
@@ -4023,7 +4036,7 @@ $5
 'specialpages-group-highuse' => 'דפים בשימוש רב',
 'specialpages-group-pages' => 'רשימות דפים',
 'specialpages-group-pagetools' => 'כלים לדפים',
-'specialpages-group-wiki' => 'מידע וכלים על האתר',
+'specialpages-group-wiki' => 'מידע וכלים',
 'specialpages-group-redirects' => 'הפניות מדפים מיוחדים',
 'specialpages-group-spam' => 'כלי ספאם',
 
@@ -4120,8 +4133,12 @@ $5
 'logentry-newusers-newusers' => 'חשבון המשתמש $1 נוצר',
 'logentry-newusers-create' => 'חשבון המשתמש $1 נוצר',
 'logentry-newusers-create2' => 'חשבון המשתמש $3 נוצר על ידי $1',
+'logentry-newusers-byemail' => 'חשבון המשתמש $3 נוצר על ידי $1 והסיסמה נשלחה בדוא"ל',
 'logentry-newusers-autocreate' => 'חשבון המשתמש $1 נוצר אוטומטית',
-'newuserlog-byemail' => 'הסיסמה נשלחה בדוא"ל',
+'logentry-rights-rights' => '$1 שינה את ההרשאות של $3 מ$4 ל$5',
+'logentry-rights-rights-legacy' => '$1 שינה את ההרשאות של $3',
+'logentry-rights-autopromote' => '$1 קודם אוטומטית מ$4 ל$5',
+'rightsnone' => '(כלום)',
 
 # Feedback
 'feedback-bugornote' => 'אם אתם מוכנים לתאר בעיה טכנית בפרטים, אנא [$1 דווחו על באג].
@@ -4175,6 +4192,7 @@ $5
 'api-error-ok-but-empty' => 'שגיאה פנימית: אין תשובה מהשרת.',
 'api-error-overwrite' => 'לא מותרת החלפת קובץ קיים.',
 'api-error-stashfailed' => 'שגיאה פנימית: השרת נכשל באחסון הקובץ הזמני.',
+'api-error-publishfailed' => 'שגיאה פנימית: השרת נכשל בפרסום הקובץ הזמני.',
 'api-error-timeout' => 'השרת לא השיב בזמן המצופה.',
 'api-error-unclassified' => 'אירעה שגיאה בלתי ידועה.',
 'api-error-unknown-code' => 'שגיאה בלתי ידועה: "$1".',
@@ -4195,6 +4213,4 @@ $5
 'duration-centuries' => '{{PLURAL:$1|מאה שנה|מאתיים שנה|$1 מאות שנים}}',
 'duration-millennia' => '{{PLURAL:$1|אלף שנה|אלפיים שנה|$1 אלפי שנים}}',
 
-# Unknown messages
-'svg-long-error' => 'קובץ SVG לא תקין: $1',
 );
index ec45ad3..d93e6e0 100644 (file)
@@ -7,6 +7,7 @@
  * @ingroup Language
  * @file
  *
+ * @author Aapkamanoj
  * @author Abhishrut
  * @author Akansha
  * @author Aksi great
@@ -76,7 +77,7 @@ $specialPageAliases = array(
        'Allmessages'               => array( 'सभी_सन्देश', 'सभी_संदेश' ),
        'Allpages'                  => array( 'सभी_पृष्ठ', 'सभी_पन्ने' ),
        'Ancientpages'              => array( 'पुराने_पृष्ठ', 'पुराने_पन्ने' ),
-       'Badtitle'                  => array( 'खराब_शीर्षक' ),
+       'Badtitle'                  => array( 'à¤\96़राब_शà¥\80रà¥\8dषà¤\95' ),
        'Blankpage'                 => array( 'रिक्त_पृष्ठ', 'खाली_पृष्ठ' ),
        'Block'                     => array( 'अवरोधन', 'आइ_पी_अवरोधन', 'सदस्य_अवरोधन' ),
        'Blockme'                   => array( 'स्वावरोधन', 'स्व_अवरोधन', 'मुझे_रोकिये' ),
@@ -101,6 +102,7 @@ $specialPageAliases = array(
        'Filepath'                  => array( 'फ़ाइल_पथ', 'फाइल_पथ', 'संचिका_पथ' ),
        'Import'                    => array( 'आयात' ),
        'Invalidateemail'           => array( 'अप्रमाणित_ईमेल', 'अमान्य_ईमेल', 'ईमेल_अमान्य_करें' ),
+       'JavaScriptTest'            => array( 'जावा_स्क्रिप्ट_परीक्षा' ),
        'BlockList'                 => array( 'अवरोध_सूची', 'अवरोधित_सदस्य_सूची', 'अवरोधित_आइ_पी_सूची' ),
        'LinkSearch'                => array( 'बाहरी_कड़ी_खोज' ),
        'Listadmins'                => array( 'प्रबन्धक_सूची', 'प्रबंधक_सूची' ),
@@ -117,6 +119,7 @@ $specialPageAliases = array(
        'MIMEsearch'                => array( 'माइम_खोज' ),
        'Mostcategories'            => array( 'सर्वाधिक_श्रेणीकृत', 'सर्वाधिक_श्रेणियाँ' ),
        'Mostimages'                => array( 'सर्वाधिक_प्रयुक्त_फ़ाइलें', 'सर्वाधिक_प्रयुक्त_फाइलें' ),
+       'Mostinterwikis'            => array( 'ज़्यादा_इंटेर्विकियाँ' ),
        'Mostlinked'                => array( 'सर्वाधिक_जुड़े_पृष्ठ' ),
        'Mostlinkedcategories'      => array( 'सर्वाधिक_प्रयुक्त_श्रेणियाँ' ),
        'Mostlinkedtemplates'       => array( 'सर्वाधिक_प्रयुक्त_साँचे' ),
@@ -162,6 +165,10 @@ $specialPageAliases = array(
        'Withoutinterwiki'          => array( 'अन्तरविकि_रहित', 'अंतरविकि_रहित' ),
 );
 
+$magicWords = array(
+       'redirect'                  => array( '0', '#अनुप्रेषित', '#REDIRECT' ),
+);
+
 $digitTransformTable = array(
        '0' => '०', # &#x0966;
        '1' => '१', # &#x0967;
@@ -312,7 +319,7 @@ $messages = array(
 'newwindow' => '(नई विंडो में खुलता है)',
 'cancel' => 'रद्द करें',
 'moredotdotdot' => 'और...',
-'mypage' => 'मà¥\87रा à¤ªà¥\83षà¥\8dठ',
+'mypage' => 'पृष्ठ',
 'mytalk' => 'वार्ता',
 'anontalk' => 'इस आइ॰पी के लिये वार्ता',
 'navigation' => 'भ्रमण',
@@ -334,7 +341,7 @@ $messages = array(
 'vector-action-move' => 'स्थानांतरण करें',
 'vector-action-protect' => 'सुरक्षित करें',
 'vector-action-undelete' => 'हटाना वापस लें',
-'vector-action-unprotect' => 'सà¥\81रà¤\95à¥\8dषा à¤¹à¤\9fाà¤\8fà¤\81',
+'vector-action-unprotect' => 'सà¥\81रà¤\95à¥\8dषा à¤¬à¤¦à¤²à¥\87à¤\82',
 'vector-simplesearch-preference' => 'संवर्धित खोज सुझाव सक्षम करें। (केवल वॅक्टर स्किन हेतु)',
 'vector-view-create' => 'बनाएँ',
 'vector-view-edit' => 'सम्पादन',
@@ -345,10 +352,11 @@ $messages = array(
 'namespaces' => 'नामस्थान',
 'variants' => 'संस्करण',
 
+'navigation-heading' => 'दिक्चालन सूची',
 'errorpagetitle' => 'त्रुटि',
 'returnto' => '$1 को लौटें।',
 'tagline' => '{{SITENAME}} से',
-'help' => 'सहायता',
+'help' => 'मदद',
 'search' => 'खोज',
 'searchbutton' => 'खोजें',
 'go' => 'जाएँ',
@@ -499,11 +507,11 @@ $1',
 'error' => 'त्रुटि',
 'databaseerror' => 'डाटाबेस त्रुटि',
 'dberrortext' => 'डाटाबेस प्रश्न वाक्यरचना में त्रुटि मिली है।
-सà¤\82भव à¤¹à¥\88 à¤\95ि à¤¯à¤¹ à¤¸à¥\89à¥\9e्टवेयर में त्रुटि की वजह से हो।
+सà¤\82भव à¤¹à¥\88 à¤\95ि à¤¯à¤¹ à¤¸à¥\89फ़्टवेयर में त्रुटि की वजह से हो।
 पिछला डाटाबेस प्रश्न था:
-<blockquote><tt>$1</tt></blockquote>
- "<tt>$2</tt>" कार्य समूह से।
-डाटाबेस की त्रुटि थी "<tt>$3: $4</tt>"।',
+<blockquote><code>$1</code></blockquote>
+ "<code>$2</code>" कार्य समूह से।
+डाटाबेस की त्रुटि थी "<samp>$3: $4</samp>"।',
 'dberrortextcl' => 'डाटाबेस प्रश्न की वाक्यरचना में त्रुटि मिली।
 डाटाबेस में पिछला प्रश्न था:
 "$1"
@@ -540,6 +548,8 @@ $1',
 'cannotdelete' => '"$1" पृष्ठ या फ़ाइल को हटाया नहीं जा सकता।
 शायद किसी और ने इसे पहले ही हटा दिया हो।',
 'cannotdelete-title' => '"$1" पृष्ठ को हटाया नहीं जा सकता',
+'delete-hook-aborted' => 'हुक द्वारा हटाना बीच में ही छोड़ा गया।
+इसने कोई कारण नहीं बताया।',
 'badtitle' => 'खराब शीर्षक',
 'badtitletext' => 'आपके द्वारा अनुरोधित शीर्षक अयोग्य, ख़ाली या गलत जुड़ा हुआ अंतर-भाषीय या अंतर-विकि शीर्षक है।
 इसमें एक या एक से अधिक ऐसे कॅरेक्टर हो सकते हैं जो शीर्षक में प्रयोग नहीं किये जा सकते।',
@@ -554,10 +564,11 @@ $1',
 'actionthrottled' => 'कार्य समाप्त कर दिया गया है',
 'actionthrottledtext' => 'स्पैम की रोकथाम के लिये, यह क्रिया इतने कम समय में एक सीमा से अधिक बार करने से मनाई है, और आप इस सीमा को पार कर चुके हैं।
 कृपया कुछ समय बाद पुन: यत्न करें।',
-'protectedpagetext' => 'यह पृष्ठ संपादनों से सुरक्षित किया हुआ है।',
+'protectedpagetext' => 'यह à¤ªà¥\83षà¥\8dठ à¤¸à¤\82पादनà¥\8bà¤\82 à¤\8fवà¤\82 à¤\85नà¥\8dय à¤\95ारà¥\8dयà¥\8bà¤\82 à¤¸à¥\87 à¤¸à¥\81रà¤\95à¥\8dषित à¤\95िया à¤¹à¥\81à¤\86 à¤¹à¥\88।',
 'viewsourcetext' => 'आप इस पृष्ठ का स्रोत देख सकते हैं और उसकी नकल उतार सकते हैं:',
 'viewyourtext' => "आप इस पृष्ठ में ''अपने सम्पादन'' का स्रोत देख सकते हैं और उसकी नकल उतार सकते हैं:",
-'protectedinterface' => 'यह पृष्ठ सॉफ्टवेयर का इंटरफ़ेस पाठ देता है, और इसे गलत प्रयोग से बचाने के लिये सुरक्षित कर दिया गया है।',
+'protectedinterface' => 'यह पृष्ठ इस विकी के सॉफ़्टवेयर का इंटरफ़ेस पाठ देता है, और इसे गलत प्रयोग से बचाने के लिये सुरक्षित कर दिया गया है।
+सभी विकियों के लिए अनुवाद जोड़ने या बदलने के लिए कृपया मीडियाविकि के क्षेत्रीयकरण प्रकल्प [//translatewiki.net/ translatewiki.net] का प्रयोग करें।',
 'editinginterface' => "'''चेतावनी:''' आप एक ऐसे पृष्ठ को बदल रहे हैं जो सॉफ़्टवेयर का इंटरफ़ेस पाठ प्रदान करता है।
 इस पृष्ठ को बदलने से अन्य सदस्यों को प्रदर्शित इंटरफ़ेस की शक्लोसूरत में बदलाव आएगा। अनुवादों के लिए कृपया [//translatewiki.net/wiki/Main_Page?setlang=hi translatewiki.net] का प्रयोग करें, यह मीडियाविकि की क्षेत्रीयकरण परियोजना है।",
 'sqlhidden' => '(छुपाई हुई SQL पृच्छा)',
@@ -583,6 +594,9 @@ $2',
 
 आप बेनामी हो के {{SITENAME}} का प्रयोग जारी रख सकते हैं, या उसी या किसी और सदस्य के तौर पर <span class='plainlinks'>[$1 फिर से सत्रारंभ]</span> कर सकते हैं।
 ध्यान दें कि जब तक आप अपनी ब्राउज़र कैशे खाली नहीं करते हैं, कुछ पृष्ठ अब भी ऐसे दिख सकते हैं जैसे कि आपका सत्र अभी भी चल रहा हो।",
+'welcomeuser' => 'आपका स्वागत है, $1!',
+'welcomecreation-msg' => 'आपका खाता बना दिया गया है।
+अपनी [[Special:Preferences|{{SITENAME}} वरीयताएँ]] बदलना ना भूलियेगा।',
 'yourname' => 'सदस्यनाम:',
 'yourpassword' => 'कूटशब्द:',
 'yourpasswordagain' => 'कूटशब्द दुबारा लिखें:',
@@ -738,6 +752,7 @@ $2
 'changeemail-oldemail' => 'वर्तमान ई-मेल पता:',
 'changeemail-newemail' => 'नया ई-मेल पता:',
 'changeemail-none' => '(कोई नहीं)',
+'changeemail-password' => 'आपका {{SITENAME}} पासवर्ड:',
 'changeemail-submit' => 'ई-मेल बदलें',
 'changeemail-cancel' => 'रद्द करें',
 
@@ -837,7 +852,7 @@ $2
 या इस पृष्ठ को [{{fullurl:{{FULLPAGENAME}}|action=edit}} सम्पादित] कर सकते हैं</span>।',
 'noarticletext-nopermission' => 'फ़िलहाल इस पृष्ठ पर कोई सामग्री नहीं है।
 आप अन्य पृष्ठों में [[Special:Search/{{PAGENAME}}|इस शीर्षक की खोज]] कर सकते हैं,
-या <span class="plainlinks">[{{fullurl:{{#Special:Log}}|page={{FULLPAGENAMEE}}}} संबंधित लॉग खोज सकते हैं]</span>।',
+या <span class="plainlinks">[{{fullurl:{{#Special:Log}}|page={{FULLPAGENAMEE}}}} संबंधित लॉग खोज सकते हैं]</span>, परन्तु आपको यह पृष्ठ बनाने की अनुमति नहीं है।',
 'userpage-userdoesnotexist' => 'सदस्य खाता "$1" पंजीकृत नहीं है।
 कृपया जाँच लें कि आप यह पृष्ठ संपादित अथवा निर्मित करना चाहते हैं या नहीं।',
 'userpage-userdoesnotexist-view' => 'सदस्य "$1" पंजीकृत नहीं है।',
@@ -847,7 +862,6 @@ $2
 * '''फ़ायरफ़ॉक्स / सफ़ारी:''' ''Reload'' (रीलोड) दबाते समय ''Shift'' (शिफ़्ट) दबा के रखें, या फिर ''Ctrl-F5'' (कंट्रोल-F5) या ''Ctrl-R'' (कंट्रोल-R) दबाएँ (मैक पर ''⌘-R'')
 * '''गूगल क्रोम:''' ''Ctrl-Shift-R'' (कंट्रोल-शिफ़्ट-R) दबाएँ (मैक पर ''⌘-Shift-R'')
 * '''इन्टर्नेट एक्सप्लोरर:''' ''Ctrl'' (कंट्रोल) दबाकर ''Refresh'' (रिफ़्रेश) करें या ''Ctrl-F5'' (कंट्रोल-F5) दबाएँ
-* '''कांक्वरर:''' ''Reload'' (रीलोड) या \"F5\" दबाएँ
 * '''ऑपेरा:''' ''Tools → Preferences'' (उपकरण → वरीयताएँ) में कैश साफ़ करें",
 'usercssyoucanpreview' => "'''टिप''': संजोने से पहले अपनी नई सी॰एस॰एस को जाँचने के लिये \"{{int:showpreview}}\" बटन का प्रयोग करें।",
 'userjsyoucanpreview' => "'''टिप''': संजोने से पहले अपनी नई जावास्क्रिप्ट को जाँचने के लिये \"{{int:showpreview}}\" बटन का प्रयोग करें।",
@@ -865,7 +879,7 @@ $2
 'note' => "'''सूचना:'''",
 'previewnote' => "'''याद रखें, यह केवल एक झलक है।'''
 आपके बदलाव अभी तक संजोये नहीं गए हैं!",
-'continue-editing' => 'सà¤\82पादन à¤\9cारà¥\80 à¤°à¤\96à¥\87à¤\82',
+'continue-editing' => 'सà¤\82पादन à¤\95à¥\8dषà¥\87तà¥\8dर à¤\95à¥\8b à¤\9cाà¤\8fà¤\81',
 'previewconflict' => 'यह झलक ऊपरी पाठ सम्पादन क्षेत्र में हुए बदलाव दिखाती है, और यदि आप अभी संजोते हैं तो यही पाठ संजोया जाएगा।',
 'session_fail_preview' => "'''क्षमा करें! सेशन डाटा के नष्ट होने के कारण आपके बदलाव संजोये नहीं जा सके।'''
 कृपया पुन: यत्न करें।
@@ -925,7 +939,6 @@ $2
 'template-semiprotected' => '(अर्ध-सुरक्षित)',
 'hiddencategories' => 'यह पृष्ठ निम्नलिखित $1 छुपाई हुई {{PLURAL:$1|श्रेणी|श्रेणियों}} में श्रेणीबद्ध है:',
 'edittools' => '<!-- यहाँ दिया हुआ पाठ संपादन और अपलोड फ़ॉर्म के नीचे दर्शाया जायेगा। -->',
-'nocreatetitle' => 'लेख निर्माण में प्रतिबंध',
 'nocreatetext' => '{{SITENAME}} पर नये पृष्ठ बनाने के लिये मनाई की गई है।
 आप पीछे जाकर किसी वर्तमान पृष्ठ को संपादित कर सकते हैं, अथवा [[Special:UserLogin|नया ख़ाता खोलें / प्रवेश करें]] ।',
 'nocreate-loggedin' => 'नये पृष्ठ बनाने का आपको अधिकार नहीं है।',
@@ -952,6 +965,7 @@ $2
 'defaultmessagetext' => 'संदेश का डिफ़ॉल्ट पाठ',
 
 # Content models
+'content-model-wikitext' => 'विकिटेक्स्ट',
 'content-model-javascript' => 'जावास्क्रिप्ट',
 
 # Parser/template warnings
@@ -1101,9 +1115,10 @@ $1",
 'revdelete-concurrent-change' => '$2, $1 वाले मद को बदलते समय त्रुटि आई: प्रतीत होता है कि आपके द्वारा बदलने के दौरान किसी और ने इसमें बदलाव कर दिए हैं।
 कृपया लॉग देख लें।',
 'revdelete-only-restricted' => '$2, $1 की तिथि के आइटम को छुपाने में त्रुटि: आप अन्य दृश्यता विकल्पों को चुने बिना प्रबंधकों की दृष्टि से आइटमों को छुपा नहीं सकते।',
-'revdelete-reason-dropdown' => '*मिटाने के आम कारण
+'revdelete-reason-dropdown' => '*हटाने के आम कारण
 ** सर्वाधिकार (कॉपीराइट) उल्लंघन
-** अनुपयुक्त निजी जानकारी
+** अनुपयुक्त टिप्पणी या निजी जानकारी
+** अनुपयुक्त सदस्यनाम
 ** मानहानिकारक जानकारी',
 'revdelete-otherreason' => 'अन्य/अतिरिक्त कारण:',
 'revdelete-reasonotherlist' => 'अन्य कारण',
@@ -1460,12 +1475,13 @@ HTML टैग की जाँच करें।',
 'right-sendemail' => 'अन्य सदस्यों को ई-मेल भेजें',
 'right-passwordreset' => 'कूटशब्द रीसेट ई-मेल देखें',
 
+# Special:Log/newusers
+'newuserlogpage' => 'सदस्य खाता निर्माण लॉग',
+'newuserlogpagetext' => 'यह सदस्य खातों के निर्माण का लॉग है।',
+
 # User rights log
 'rightslog' => 'सदस्य अधिकार सूची',
 'rightslogtext' => 'यह सदस्य अधिकारों में हुए बदलावों की सूची है।',
-'rightslogentry' => '$1 की समूह सदस्यता $2 से $3 को बदली',
-'rightslogentry-autopromote' => 'स्वचालित रूप से $2 से $3 को पदोन्नत हुआ था',
-'rightsnone' => '(कोई नहीं)',
 
 # Associated actions - in the sentence "You do not have permission to X"
 'action-read' => 'इस पृष्ठ को पढ़ने',
@@ -1524,7 +1540,7 @@ HTML टैग की जाँच करें।',
 'rcshowhidepatr' => 'जाँचे हुए सम्पादन $1',
 'rcshowhidemine' => 'मेरे बदलाव $1',
 'rclinks' => 'पिछले $2 दिनों में हुए $1 बदलाव दिखाएँ<br />$3',
-'diff' => 'फ़रà¥\8dà¤\95',
+'diff' => 'à¤\85à¤\82तर',
 'hist' => 'इतिहास',
 'hide' => 'छिपाएँ',
 'show' => 'दिखाएँ',
@@ -1939,8 +1955,8 @@ https://www.mediawiki.org/wiki/Manual:Image_Authorization देखें।',
 
 'disambiguations' => 'बहुविकल्पी पृष्ठों से जुड़ते पृष्ठ',
 'disambiguationspage' => 'Template:बहुविकल्पी',
-'disambiguations-text' => "निम्नांकित पृष्ठ '''बहुविकल्पी पृष्ठों''' से जुड़ते हैं।
-à¤\87नà¥\8dहà¥\87à¤\82 à¤\89पयà¥\81à¤\95à¥\8dत à¤µà¤¿à¤·à¤¯ à¤¸à¥\87 à¤\9cà¥\81à¥\9cा होना चाहिए।<br />
+'disambiguations-text' => "निम्नांकित पृष्ठ कम-से-कम एक '''बहुविकल्पी पृष्ठ''' से जुड़ते हैं।
+सà¤\82भवतà¤\83 à¤\87नà¥\8dहà¥\87à¤\82 à¤\89पयà¥\81à¤\95à¥\8dत à¤ªà¥\83षà¥\8dठ à¤¸à¥\87 à¤\9cà¥\81ड़ा होना चाहिए।<br />
 यदि कोई पृष्ठ ऐसे साँचे का प्रयोग करता है जो [[MediaWiki:Disambiguationspage]] से जुड़ा हुआ है, तो उसे बहुविकल्पी पृष्ठ माना जाता है।",
 
 'doubleredirects' => 'दुगुने पुनर्निर्देश',
@@ -1996,6 +2012,7 @@ https://www.mediawiki.org/wiki/Manual:Image_Authorization देखें।',
 'mostlinkedtemplates' => 'सर्वाधिक से जुड़े हुए साँचे',
 'mostcategories' => 'सर्वाधिक श्रेणियों वाले पृष्ठ',
 'mostimages' => 'सर्वाधिक से जुड़ी हुई फ़ाइलें',
+'mostinterwikis' => 'सर्वाधिक अंतरविकी कड़ियों वाले पृष्ठ',
 'mostrevisions' => 'सर्वाधिक अवतरणित पृष्ठ',
 'prefixindex' => 'उपसर्ग अनुसार पृष्ठ',
 'prefixindex-namespace' => 'उपसर्ग वाले सभी पृष्ठ ($1 नामस्थान)',
@@ -2071,6 +2088,11 @@ https://www.mediawiki.org/wiki/Manual:Image_Authorization देखें।',
 'allpages-bad-ns' => '{{SITENAME}} में "$1" नामस्थान नहीं है।',
 'allpages-hide-redirects' => 'पुनर्निर्देश छुपाएँ',
 
+# SpecialCachedPage
+'cachedspecial-viewing-cached-ttl' => 'आप इस पृष्ठ का कैश किया हुआ अवतरण देख रहे हैं, जो $1 पुराना हो सकता है।',
+'cachedspecial-viewing-cached-ts' => 'आप इस पृष्ठ का कैश किया हुआ अवतरण देख रहे हैं, जो कि संभवतः वर्तमान अवस्था से भिन्न हो।',
+'cachedspecial-refresh-now' => 'नवीनतम देखें।',
+
 # Special:Categories
 'categories' => 'श्रेणियाँ',
 'categoriespagetext' => 'निम्नोक्त {{PLURAL:$1|श्रेणी|श्रेणियों}} में पृष्ठ या मीडिया है।
@@ -2092,7 +2114,7 @@ https://www.mediawiki.org/wiki/Manual:Image_Authorization देखें।',
 'linksearch-ok' => 'खोजें',
 'linksearch-text' => '"*.wikipedia.org" जैसे वाईल्ड-कार्ड्स प्रयोग किये जा सकते हैं।
 कम-से-कम ".org" जैसे किसी top-level डोमेन की आवश्यकता है।<br />
-स्वीकार्य प्रोटोकॉल: <code>$1</code> (इनमें से कोई भी अपनी खोज में न जोड़ें)',
+स्वीकार्य {{PLURAL:$2|प्रोटोकॉल}}: <code>$1</code> (यदि कोई प्रोटोकॉल ना दिया जाए तो http:// का प्रयोग किया जाता है)',
 'linksearch-line' => '$2 में से $1 जुडा हुआ हैं',
 'linksearch-error' => 'वाईल्डकार्ड्स होस्टनाम के सिर्फ शुरू में आ सकते हैं।',
 
@@ -2111,10 +2133,6 @@ https://www.mediawiki.org/wiki/Manual:Image_Authorization देखें।',
 'activeusers-hidesysops' => 'प्रबंधक छुपाएँ',
 'activeusers-noresult' => 'कोई सदस्य नहीं मिले।',
 
-# Special:Log/newusers
-'newuserlogpage' => 'सदस्य खाता निर्माण लॉग',
-'newuserlogpagetext' => 'यह सदस्य खातों के निर्माण का लॉग है।',
-
 # Special:ListGroupRights
 'listgrouprights' => 'सदस्य समूह अधिकार',
 'listgrouprights-summary' => 'नीचे इसे विकि के लिए परिभाषित सदस्य समूहों की सूची है, साथ में हर समूह से जुड़े अधिकार भी वर्णित हैं।
@@ -2141,8 +2159,8 @@ https://www.mediawiki.org/wiki/Manual:Image_Authorization देखें।',
 'emailuser-title-target' => 'इस {{GENDER:$1|सदस्य|सदस्या}} को ई-मेल करें।',
 'emailuser-title-notarget' => 'सदस्य को ई-मेल करें',
 'emailpage' => 'सदस्य को ई-मेल करें',
-'emailpagetext' => 'नीचे दिए पर्चे को जरिए आप इस सदस्य को ई-मेल भेज सकते हैं।
-à¤\86पनà¥\87 à¤\9cà¥\8b à¤ªà¤¤à¤¾ [[Special:Preferences|à¤\85पनà¥\80 à¤¸à¤¦à¤¸à¥\8dय à¤µà¤°à¥\80यताà¤\93à¤\82]] में दिया था वह इस ई-मेल के "भेजने वाले" के तौर पर आएगा, अतः प्राप्तकर्ता आपको सीधे जवाब दे सकेंगे।',
+'emailpagetext' => 'नीचे दिए पर्चे को जरिए आप इस {{GENDER:$1|सदस्य}} को ई-मेल भेज सकते हैं।
+à¤\86पनà¥\87 à¤\9cà¥\8b à¤ªà¤¤à¤¾ [[Special:Preferences|à¤\85पनà¥\80 à¤ªà¤¸à¤\82द]] में दिया था वह इस ई-मेल के "भेजने वाले" के तौर पर आएगा, अतः प्राप्तकर्ता आपको सीधे जवाब दे सकेंगे।',
 'usermailererror' => 'मेल ऑब्जेक्ट ने त्रुटि दी:',
 'defemailsubject' => '{{SITENAME}} ई-मेल "$1" सदस्य से',
 'usermaildisabled' => 'सदस्य ई-मेल अक्षम किया गया',
@@ -2180,10 +2198,8 @@ https://www.mediawiki.org/wiki/Manual:Image_Authorization देखें।',
 'watchnologin' => 'लॉग इन नहीं किया है',
 'watchnologintext' => 'ध्यानसूची में बदलाव के लिये [[Special:UserLogin|लॉग इन]] करना आवश्यक है।',
 'addwatch' => 'ध्यानसूची में जोड़ें',
-'addedwatchtext' => 'आपकी [[Special:Watchlist|ध्यानसूची]] में "[[:$1]]" पृष्ठ का समावेश कर दिया गया है।
-भविष्य में इस पृष्ठ तथा इसके वार्ता पृष्ठ में होने वाले बदलाव आपकी ध्यानसूची में दिखेंगे तथा [[Special:RecentChanges|हाल में हुए बदलावों की सूची]] में यह पृष्ठ बोल्ड दिखेगा ताकि आप आसानी से इसका ध्यान रख सकें।
-
-अगर आपको इस पृष्ठ को अपनी ध्यानसूची से निकालना हो तो "ध्यान हटायें" पर क्लिक करें।',
+'addedwatchtext' => 'आपकी [[Special:Watchlist|ध्यानसूची]] में "[[:$1]]" पृष्ठ जोड़ दिया गया है।
+भविष्य में इस पृष्ठ तथा इसके वार्ता पृष्ठ में होने वाले बदलाव आपकी ध्यानसूची में दिखेंगे।',
 'removewatch' => 'ध्यानसूची से हटाएँ',
 'removedwatchtext' => '"[[:$1]]" नामक पृष्ठ को आपकी [[Special:Watchlist|ध्यानसूची]] से हटा दिया गया है।',
 'watch' => 'ध्यान रखें',
@@ -2212,15 +2228,22 @@ https://www.mediawiki.org/wiki/Manual:Image_Authorization देखें।',
 'enotif_mailer' => '{{SITENAME}} सूचना इ-मेल कर्ता',
 'enotif_reset' => 'सभी पृष्ठ देखे हुए दर्शाएँ',
 'enotif_impersonal_salutation' => '{{SITENAME}} सदस्य',
+'enotif_subject_deleted' => '{{SITENAME}} पृष्ठ $1 को {{gender:$2|$2}} ने हटा दिया है',
+'enotif_subject_created' => '{{SITENAME}} पृष्ठ $1 को {{gender:$2|$2}} ने बना दिया है',
+'enotif_subject_moved' => '{{SITENAME}} पृष्ठ $1 को {{gender:$2|$2}} ने स्थानांतरित कर दिया है',
+'enotif_subject_restored' => '{{SITENAME}} पृष्ठ $1 को {{gender:$2|$2}} ने पुनर्स्थापित कर दिया है',
+'enotif_subject_changed' => '{{SITENAME}} पृष्ठ $1 को {{gender:$2|$2}} ने परिवर्तित किया है',
+'enotif_body_intro_deleted' => '{{SITENAME}} पृष्ठ $1 को {{gender:$2|$2}} ने $PAGEEDITDATE को हटा दिया है, देखें $3।',
+'enotif_body_intro_created' => '{{SITENAME}} पृष्ठ $1 को {{gender:$2|$2}} ने $PAGEEDITDATE को बनाया है, वर्तमान अवतरण के लिए $3 देखें।',
+'enotif_body_intro_moved' => '{{SITENAME}} पृष्ठ $1 को {{gender:$2|$2}} ने $PAGEEDITDATE को स्थानांतरित किया है, वर्तमान अवतरण के लिए $3 देखें।',
+'enotif_body_intro_restored' => '{{SITENAME}} पृष्ठ $1 को {{gender:$2|$2}} ने $PAGEEDITDATE को पुनर्स्थापित किया है, वर्तमान अवतरण के लिए $3 देखें।',
+'enotif_body_intro_changed' => '{{SITENAME}} पृष्ठ $1 को {{gender:$2|$2}} ने $PAGEEDITDATE को परिवर्तित किया है, वर्तमान अवतरण के लिए $3 देखें।',
 'enotif_lastvisited' => 'आपकी आखिरी भेंट के बाद हुए बदलाव देखने के लिये $1 देखें।',
 'enotif_lastdiff' => 'इस बदलाव को देखने के लिये $1 देखें।',
 'enotif_anon_editor' => 'अनामक सदस्य $1',
 'enotif_body' => 'प्रिय $WATCHINGUSERNAME जी,
 
-
-{{SITENAME}} का $PAGETITLE पृष्ठ $PAGEEDITDATE को $PAGEEDITOR द्वारा $CHANGEDORCREATED गया, कृपया ताज़े अवतरण के लिए $PAGETITLE_URL देखें।
-
-$NEWPAGE
+$PAGEINTRO $NEWPAGE
 
 सम्पादन सारांश: $PAGESUMMARY $PAGEMINOREDIT
 
@@ -2245,6 +2268,8 @@ $UNWATCHURL
 
 राय देने या अधिक सहायता पाने के लिए:
 {{canonicalurl:{{MediaWiki:Helppage}}}}',
+'created' => 'बनाया',
+'changed' => 'परिवर्तित किया',
 
 # Delete
 'deletepage' => 'पृष्ठ हटाएँ',
@@ -2284,6 +2309,8 @@ $UNWATCHURL
 'rollback' => 'संपादन वापिस लें',
 'rollback_short' => 'वापिस लें',
 'rollbacklink' => 'वापिस लें',
+'rollbacklinkcount' => '$1 {{PLURAL:$1|सम्पादन}} वापिस लें',
+'rollbacklinkcount-morethan' => '$1 से अधिक {{PLURAL:$1|सम्पादन}} वापिस लें',
 'rollbackfailed' => 'वापिस लेना असफल रहा',
 'cantrollback' => 'पुराने अवतरण को पूर्ववत नहीं कर सकते हैं;
 इस पृष्ठ का अन्तिम योगदानकर्ता इस लेख का एकमात्र लेखक है।',
@@ -2378,8 +2405,7 @@ $2 द्वारा संपादित अन्तिम अवतरण 
 लेखागार समय-समय पर साफ किये जाते हैं।',
 'undelete-fieldset-title' => 'अवतरण पुरानी स्थिति पर लाएँ',
 'undeleteextrahelp' => "पृष्ठ का संपूर्ण इतिहास वापस लाने के लिए सभी बक्सों से सही का निशान हटा दें और '''''{{int:undeletebtn}}''''' पर क्लिक करें।
-चुनिंदा इतिहास को वापस लाने के लिए, उन अवतरणों के बगल के बक्सों पर सही का निशान लगाएँ, और '''''{{int:undeletebtn}}''''' पर क्लिक करें।
-'''''पूर्ववत करें''''' पर चटका लगाने से टिप्पणी कोष्ठक और सभी बक्से खाली कर दिए जाएँगे।",
+चुनिंदा इतिहास को वापस लाने के लिए उन अवतरणों के बगल के बक्सों पर सही का निशान लगाएँ और '''''{{int:undeletebtn}}''''' पर क्लिक करें।",
 'undeleterevisions' => '$1 {{PLURAL:$1|अवतरण}} लेखागार में हैं',
 'undeletehistory' => 'यदि आप पृष्ठ को पुनर्स्थापित करते हैं तो सभी अवतरण इतिहास में पुनर्स्थापित हो जायेंगे।
 हटाने के बाद यदि एक नया पृष्ठ उसी नाम से बनाया गया है तो पुनर्स्थापित अवतरण पिछले इतिहास में दर्शित होंगे।',
@@ -2401,8 +2427,8 @@ $2 द्वारा संपादित अन्तिम अवतरण 
 'undeletedrevisions' => '{{PLURAL:$1|एक रूपान्तर वापस लाया गया|$1 रूपान्तर वापस लाये गये}} है',
 'undeletedrevisions-files' => '{{PLURAL:$1|1 अवतरण|$1 अवतरण}} और {{PLURAL:$2|1 फ़ाईल|$2 फ़ाइलें}} पुनर्स्थापित कर दियें',
 'undeletedfiles' => '{{PLURAL:$1|1 फ़ाईल|$1 फ़ाईलें}} पुनर्स्थापित',
-'cannotundelete' => 'पुनर्स्थापित नहीं कर सकें;
-किसी और ने पहले ही पुनर्स्थापित कर दिया हों।',
+'cannotundelete' => 'पुनर्स्थापित नहीं कर सके:
+$1',
 'undeletedpage' => "'''$1 को पुनर्स्थापित कर दिया गया है'''
 
 हाल में हटाये गये तथा पुनर्स्थापित किये गए पन्नों की जानकारी के लिये [[Special:Log/delete|हटाने की लॉग]] देखें।",
@@ -2443,7 +2469,7 @@ $1',
 'month' => 'इस महिनेसे (और पुरानें):',
 'year' => 'इस सालसे (और पुराने):',
 
-'sp-contributions-newbies' => 'सिर्फ़ नये सदस्योंका योगदान दर्शायें',
+'sp-contributions-newbies' => 'सिर्फ़ नये सदस्यों के योगदान दर्शायें',
 'sp-contributions-newbies-sub' => 'नये सदस्योंके लिये',
 'sp-contributions-newbies-title' => 'नए सदस्यों द्वारा योगदान',
 'sp-contributions-blocklog' => 'ब्लॉक सूची',
@@ -2517,8 +2543,8 @@ $1',
 'ipb-confirm' => 'अवरोधण की पुष्टि करें',
 'badipaddress' => 'अमान्य आईपी पता।',
 'blockipsuccesssub' => 'अवरोधन सफल ।(संपादन करने से रोक दिया गया है)',
-'blockipsuccesstext' => '[[Special:Contributions/$1|$1]] à¤\95à¥\8b à¤¬à¤¾à¤§à¥\8dय किया जा चुका है।<br />
-बाधà¥\8dयà¥\8bà¤\82 à¤\95à¥\80 à¤¸à¤®à¥\80à¤\95à¥\8dषा à¤\95à¥\87 à¤²à¤¿à¤\8f [[Special:BlockList|IP à¤¬à¤¾à¤§à¥\8dय à¤¸à¥\82à¤\9aà¥\80]] देखें।',
+'blockipsuccesstext' => '[[Special:Contributions/$1|$1]] à¤\95à¥\8b à¤¬à¥\8dलà¥\89à¤\95 किया जा चुका है।<br />
+बà¥\8dलà¥\89à¤\95à¥\8bà¤\82 à¤\95à¥\80 à¤¸à¤®à¥\80à¤\95à¥\8dषा à¤\95à¥\87 à¤²à¤¿à¤\8f [[Special:BlockList|बà¥\8dलà¥\89à¤\95 à¤²à¥\89à¤\97]] देखें।',
 'ipb-blockingself' => 'आप खुद को अवरोधित कर रहे हैं! क्या आप वाकई ऐसा करना चाहते हैं?',
 'ipb-edit-dropdown' => 'ब्लॉक कारण संपादित करें',
 'ipb-unblock-addr' => '$1 को अनब्लॉक करें',
@@ -2570,9 +2596,9 @@ $1 को बाध्य करने का कारण है: "$2"',
 यह दबाया गया लॉग सन्दर्भ के लिए उपलब्ध कया गया है:',
 'blocklogentry' => '"[[$1]]" को $2 $3 तक बदलाव करने से रोक दिया गया है।',
 'reblock-logentry' => '[[$1]] का अवरोध जमाव बदला गया, मियाद अब $2 $3 पर खत्म होगी',
-'blocklogtext' => 'यह à¤¸à¤¦à¤¸à¥\8dयà¥\8bà¤\82 à¤\95à¥\8b à¤¬à¤¾à¤§à¥\8dय à¤\8fवà¤\82 à¤\85बाधà¥\8dय à¤\95रनà¥\87 à¤\95à¥\87 à¤\95à¥\8dरियाà¤\95लापà¥\8bà¤\82 à¤\95ा à¤\85भिलà¥\87à¤\96 है।
-स्वत: बाधित होने वाले IP पते इस सूची में उपलब्ध नहीं है।
-वरà¥\8dतà¥\8dतमान à¤®à¥\87à¤\82 à¤\95à¥\8dरियाशà¥\80ल à¤ªà¥\8dरतिबà¤\82धà¥\8bà¤\82 à¤\94र à¤¬à¤¾à¤§à¥\8dयà¥\8bà¤\82 à¤\95à¥\80 à¤¸à¥\82à¤\9aà¥\80 à¤\95à¥\87 à¤²à¤¿à¤\8f [[Special:BlockList|IP à¤¬à¤¾à¤§à¤¿à¤¤ à¤¸à¥\82à¤\9aà¥\80]] देखें।',
+'blocklogtext' => 'यह à¤¸à¤¦à¤¸à¥\8dयà¥\8bà¤\82 à¤\95à¥\8b à¤¬à¥\8dलà¥\89à¤\95 à¤\8fवà¤\82 à¤\85नबà¥\8dलà¥\89à¤\95 à¤\95रनà¥\87 à¤\95à¥\87 à¤\95ारà¥\8dयà¥\8bà¤\82 à¤\95ा à¤²à¥\89à¤\97 है।
+स्वत बाधित होने वाले IP पते इस सूची में उपलब्ध नहीं है।
+वरà¥\8dतमान à¤®à¥\87à¤\82 à¤\95à¥\8dरियाशà¥\80ल à¤ªà¥\8dरतिबà¤\82धà¥\8bà¤\82 à¤\94र à¤¬à¥\8dलà¥\89à¤\95à¥\8bà¤\82 à¤\95à¥\80 à¤¸à¥\82à¤\9aà¥\80 à¤\95à¥\87 à¤²à¤¿à¤\8f [[Special:BlockList|बà¥\8dलà¥\89à¤\95 à¤²à¥\89à¤\97]] देखें।',
 'unblocklogentry' => '$1 अनवरोधित',
 'block-log-flags-anononly' => 'केवल अनाम सदस्य',
 'block-log-flags-nocreate' => 'खाता निर्माण पर रोक',
@@ -2726,7 +2752,8 @@ $1 को बाध्य करने का कारण है: "$2"',
 'move-leave-redirect' => 'एक पुनर्निर्देशन पीछे छोड़ते जाएँ',
 'protectedpagemovewarning' => "'''चेतावनी:''' यह पृष्ठ तालाबंद है अतः केवल वही सदस्य इनका स्थानांतरण कर सकते हैं जो प्रबंधक हों।
 निम्न् तलिका मे ताजा सदस्यो कि जानकारी दि गयि है:",
-'semiprotectedpagemovewarning' => "'''ध्यान दें:''' इस पृष्ठ को सुरक्षित कर दिया गया है ताकि केवल पंजीकृत सदस्य ही इसे स्थानांतरित कर पाएँ।",
+'semiprotectedpagemovewarning' => "'''सूचना:''' यह पृष्ठ सुरक्षित कर दिया गया है और इसे केवल पंजीकृत सदस्य ही स्थानांतरित कर सकते हैं।
+नवीनतम लॉग प्रविष्टि संदर्भ के लिये नीचे दी है:",
 'move-over-sharedrepo' => '== फ़ाइल मौजूद है ==
 [[:$1]] एक साझे भंडार पर मौजूद है। इस नाम पर स्थानांतरण से नई फ़ाइल साझा फ़ाइल को ओवरराइड करेगी।',
 'file-exists-sharedrepo' => 'फ़ाइल रेपो साझा मौजूद',
@@ -2823,6 +2850,9 @@ $1 को बाध्य करने का कारण है: "$2"',
 'import-invalid-interwiki' => 'इस विकि से आयात नहीं हो सकता है।',
 'import-error-edit' => 'पृष्ठ " $1 " आयातित नहीं किया जासकता है क्योंकि आपको उसे संपादित करने की अनुमति नहीं हैं।',
 'import-error-create' => 'पृष्ठ " $1 " आयातित नहीं है क्योंकि आपको उसे बनाने की अनुमति नहीं हैं।',
+'import-error-interwiki' => 'पृष्ठ "$1" आयात नहीं किया गया है क्योंकि इसका नाम अंतरविकी कड़ियाँ बनाने के लिए आरक्षित है।',
+'import-error-special' => 'पृष्ठ "$1" आयात नहीं किया गया है क्योंकि यह एक ऐसे विशेष नामस्थान के अंतर्गत आता है जिसमें पृष्ठ नहीं बनाए जा सकते हैं।',
+'import-error-invalid' => 'पृष्ठ "$1" आयात नहीं किया गया है क्योंकि इसका नाम अमान्य है।',
 
 # Import log
 'importlogpage' => 'आयात सूची',
@@ -2868,13 +2898,13 @@ $1 को बाध्य करने का कारण है: "$2"',
 'tooltip-n-randompage' => 'किसी एक लेख पर जाएँ',
 'tooltip-n-help' => 'पता लगाने का स्थान',
 'tooltip-t-whatlinkshere' => 'यहाँ का हवाला देने वाले सभी विकि पन्नों की सूची',
-'tooltip-t-recentchangeslinked' => 'यहाà¤\81 à¤\9cà¥\81डà¥\87 à¤¹à¥\81à¤\8f à¤¸à¤­à¥\80 à¤ªà¤¨à¥\8dनà¥\8bà¤\82में हुए हाल के बदलाव',
+'tooltip-t-recentchangeslinked' => 'यहाà¤\81 à¤\9cà¥\81ड़à¥\87 à¤¹à¥\81à¤\8f à¤¸à¤­à¥\80 à¤ªà¤¨à¥\8dनà¥\8bà¤\82 में हुए हाल के बदलाव',
 'tooltip-feed-rss' => 'इस पृष्ठ की आरएसएस फ़ीड',
 'tooltip-feed-atom' => 'इस पृष्ठ की अणु फ़ीड',
 'tooltip-t-contributions' => 'इस सदस्यके योगदानकी सूची देखियें',
 'tooltip-t-emailuser' => 'इस सदस्य को इमेल भेजें',
 'tooltip-t-upload' => 'संचिका चढ़ाएँ',
-'tooltip-t-specialpages' => 'सभà¥\80 à¤\96ास à¤ªà¤¨à¥\8dनों की सूची',
+'tooltip-t-specialpages' => 'सभà¥\80 à¤µà¤¿à¤¶à¥\87ष à¤ªà¥\83षà¥\8dठों की सूची',
 'tooltip-t-print' => 'इस पृष्ठका छपानेलायक अवतरण',
 'tooltip-t-permalink' => 'पृष्ठ के इस संस्करण की स्थायी कड़ी',
 'tooltip-ca-nstab-main' => 'सामग्री वाला पृष्ठ देखें',
@@ -2937,11 +2967,40 @@ $1 को बाध्य करने का कारण है: "$2"',
 
 # Info page
 'pageinfo-title' => '"$1" के लिये जानकारी',
-'pageinfo-header-edits' => 'बदलने के लिये',
+'pageinfo-not-current' => 'क्षमा करें, पुराने अवतरणों के लिए यह जानकारी प्रदान करना संभव नहीं है।',
+'pageinfo-header-basic' => 'मूल जानकारी',
+'pageinfo-header-edits' => 'सम्पादन इतिहास',
+'pageinfo-header-restrictions' => 'पृष्ठ सुरक्षा',
+'pageinfo-header-properties' => 'पृष्ठ जानकारी',
+'pageinfo-display-title' => 'प्रदर्शित शीर्षक',
+'pageinfo-default-sort' => 'डिफ़ॉल्ट सॉर्ट की',
+'pageinfo-length' => 'पृष्ठ आकार (बाइट्स में)',
+'pageinfo-article-id' => 'पृष्ठ आइ॰डी',
+'pageinfo-language' => 'पृष्ठ सामग्री भाषा',
 'pageinfo-views' => 'दर्शाव की संख्या',
-'pageinfo-watchers' => 'पर नजर रखने वालों की संख्या',
-'pageinfo-edits' => 'संपादन की संख्या',
-'pageinfo-authors' => 'अलग लेखकों की संख्या',
+'pageinfo-watchers' => 'पृष्ठ पर नज़र रखने वालों की संख्या',
+'pageinfo-redirects-name' => 'इस पृष्ठ को पुनर्निर्देश',
+'pageinfo-subpages-name' => 'इस पृष्ठ के उप-पृष्ठ',
+'pageinfo-firstuser' => 'पृष्ठ निर्माता',
+'pageinfo-firsttime' => 'पृष्ठ निर्माण तिथि',
+'pageinfo-lastuser' => 'नवीनतम सम्पादक',
+'pageinfo-lasttime' => 'नवीनतम सम्पादन तिथि',
+'pageinfo-edits' => 'संपादन की कुल संख्या',
+'pageinfo-authors' => 'लेखकों की संख्या',
+'pageinfo-recent-edits' => 'हाल में हुए सम्पादनों की संख्या (पिछ्ले $1 में)',
+'pageinfo-magic-words' => 'जादुई {{PLURAL:$1|शब्द}} ($1)',
+'pageinfo-hidden-categories' => 'छुपी {{PLURAL:$1|श्रेणी|श्रेणियाँ}} ($1)',
+'pageinfo-templates' => 'प्रयुक्त {{PLURAL:$1|साँचा|साँचे}} ($1)',
+'pageinfo-toolboxlink' => 'इस पृष्ठ पर जानकारी',
+'pageinfo-redirectsto' => 'पुनर्निर्देशन लक्ष्य',
+'pageinfo-redirectsto-info' => 'जानकारी',
+'pageinfo-contentpage' => 'सामग्री पृष्ठों में गिना जाता है',
+'pageinfo-contentpage-yes' => 'हाँ',
+'pageinfo-protect-cascading-yes' => 'हाँ',
+'pageinfo-category-info' => 'श्रेणी जानकारी',
+'pageinfo-category-pages' => 'पृष्ठ संख्या',
+'pageinfo-category-subcats' => 'उपश्रेणियों की संख्या',
+'pageinfo-category-files' => 'फ़ाइलों की संख्या',
 
 # Patrolling
 'markaspatrolleddiff' => 'देख लिया ऐसा मार्क करें',
@@ -2953,6 +3012,8 @@ $1 को बाध्य करने का कारण है: "$2"',
 'markedaspatrollederror' => 'देख लिया ऐसा मार्क नहीं कर पायें',
 'markedaspatrollederrortext' => 'नजर रखने के लिये आपको एक अवतरणको चुनना होगा।',
 'markedaspatrollederror-noautopatrol' => 'आप खुद अपने बदलावोंपर नजर नहीं रख सकतें हैं।',
+'markedaspatrollednotify' => '$1 पृष्ठ में किया गया ये बदलाव जाँचा हुआ चिन्हित कर दिया गया है।',
+'markedaspatrollederrornotify' => 'जाँचा हुआ चिन्हित करना असफल रहा।',
 
 # Patrol log
 'patrol-log-page' => 'नजर रखनेकी सूची',
@@ -3011,7 +3072,9 @@ $1',
 'minutes' => '{{PLURAL:$1|$1 minute|$1 minutes}}',
 'hours' => '{{PLURAL:$1|$1 hour|$1 hours}}',
 'days' => '{{PLURAL:$1|$1 day|$1 days}}',
+'months' => '{{PLURAL:$1|महीना|महीने}}',
 'ago' => '$1 पहले',
+'just-now' => 'अभी-अभी',
 
 # Bad image list
 'bad_image_list' => 'प्रारूप इस प्रकार है:
@@ -3022,7 +3085,7 @@ $1',
 
 # Metadata
 'metadata' => 'मेटाडाटा',
-'metadata-help' => 'इस फ़ाइल में बढ़ाई हुई जानकारी हैं, हो सकता है कि यह फ़ाइल बनाने में इस्तेमाल किये गए स्कैनर अथवा कैमेरा से यह प्राप्त हुई हैं। अगर यह फ़ाइल बदलदी गई हैं तो यह जानकारी नई फ़ाईलसे मेल नहीं खाने की आशंका हैं ।',
+'metadata-help' => 'इस फ़ाइल में बढ़ाई हुई जानकारी हैं, हो सकता है कि यह फ़ाइल बनाने में इस्तेमाल किये गए स्कैनर अथवा कैमेरा से यह प्राप्त हुई हैं। अगर यह फ़ाइल बदलदी गई है तो यह जानकारी नई फ़ाइल से मेल नहीं खाने की आशंका है।',
 'metadata-expand' => 'विस्तृत जानकारियां दिखाएं',
 'metadata-collapse' => 'विस्तृत जानकारियां छिपाएं',
 'metadata-fields' => 'जब मेटाडाटा तालिका को लघुरूप किया जाएगा तो इस सन्देश में सूचीबद्ध इएक्सआयएफ मेटाडाटा जानकारियां छवि प्रदर्शित होते समय सम्मिलित की जाएंगी।
@@ -3685,7 +3748,7 @@ $5
 * <span class="mw-specialpagerestricted">प्रतिबंधित विशेष पृष्ठ।</span>',
 'specialpages-group-maintenance' => 'अनुरक्षण रिपोर्ट',
 'specialpages-group-other' => 'अन्य विशेष पृष्ठ',
-'specialpages-group-login' => 'सतà¥\8dर à¤ªà¥\8dरारमà¥\8dभ / à¤¹à¤¸à¥\8dताà¤\95à¥\8dषर à¤\95रें',
+'specialpages-group-login' => 'सतà¥\8dर à¤\86रमà¥\8dभ / à¤\96ाता à¤\96à¥\8bलें',
 'specialpages-group-changes' => 'हाल ही में हुए परिवर्तन एवं अभिलेख',
 'specialpages-group-media' => 'मीडिया रिपोर्ट एवं अपलोड',
 'specialpages-group-users' => 'सदस्य एवं अधिकार',
@@ -3701,14 +3764,14 @@ $5
 'intentionallyblankpage' => 'यह पृष्ठ जानबूझ कर खाली छोड़ा गया है।',
 
 # External image whitelist
-'external_image_whitelist' => 'इस लाइन बिल्कुल के रूप में यह #Leave है<pre>
- #Put नियमित अभिव्यक्ति टुकड़े (बस हिस्सा है कि के बीच चला जाता है / /) के नीचे
- # à¤¯à¥\87 à¤¬à¤¾à¤¹à¤°à¥\80 (hotlinked) à¤\9bवियà¥\8bà¤\82 à¤\95à¥\87 à¤¯à¥\82à¤\86रà¤\8fल à¤\95à¥\87 à¤¸à¤¾à¤¥ à¤®à¤¿à¤²à¤¾à¤¨ à¤\95िया à¤\9cाà¤\8fà¤\97ा
- # कि मैच उन छवियों के रूप में प्रदर्शित किया जाएगा, अन्यथा केवल छवि के लिए एक कड़ी दिखाया जाएगा
- #Lines # साथ शुरुआत टिप्पणी के रूप में इलाज कर रहे हैं
+'external_image_whitelist' => ' #यह लाइन जैसी है वैसी ही छोड़ दें<pre>
+ #नीचे रेगुलर एक्सप्रेशन के टुकड़े लिखें(बस वही हिस्सा जो // के बीच में आता है)
+ #à¤\87न à¤\8fà¤\95à¥\8dसपà¥\8dरà¥\87शन à¤\95ा à¤¬à¤¾à¤¹à¤°à¥\80 (hotlinked) à¤\9bवियà¥\8bà¤\82 à¤\95à¥\87 à¤¯à¥\82॰à¤\86र॰à¤\8fल à¤\95à¥\87 à¤¸à¤¾à¤¥ à¤®à¤¿à¤²à¤¾à¤¨ à¤\95िया à¤\9cाà¤\8fà¤\97ा
+ #जो छवियाँ मिलान करेंगी, उन्हें प्रदर्शित किया जाएगा, अन्यथा केवल छवि की कड़ी दिखायी जाएगी
+ # # से शुरू होने वाली लाइनें टिप्पणी मानी जाती हैं
  # इस केस-असंवेदी है
 
- #Put सब regex टुकड़े इस रेखा से ऊपर। वास्तव में यह है के रूप में इस लाइन छोड़ दो</pre>',
+ #सब रेगुलर एक्सप्रेशन टुकड़े इस लाइन से ऊपर रखें। यह लाइन जैसी है वैसी ही छोड़ दें</pre>',
 
 # Special:Tags
 'tags' => 'वैध बदलाव चिप्पियाँ',
@@ -3786,11 +3849,14 @@ $5
 'logentry-move-move_redir-noredirect' => '$1 ने $4 से पुनार्निर्देश हटाकर $3 पर पुनर्निर्देश छोड़े बिना $3 को $4 पर स्थानांतरित किया',
 'logentry-patrol-patrol' => '$1 ने $3 पृष्ठ के $4 अवतरण को देखा हुआ चिन्हित किया',
 'logentry-patrol-patrol-auto' => '$1 ने $3 पृष्ठ के $4 अवतरण को स्वचालित रूप से देखा हुआ चिन्हित किया',
-'logentry-newusers-newusers' => '$1 created उपयोगकर्ता के खाता',
-'logentry-newusers-create' => '$1 created उपयोगकर्ता के खाता',
-'logentry-newusers-create2' => '$1 created a user account $3',
+'logentry-newusers-newusers' => 'सदस्य खाता $1 बनाया गया',
+'logentry-newusers-create' => 'सदस्य खाता $1 बनाया गया',
+'logentry-newusers-create2' => 'सदस्य खाता $3 $1 द्वारा बनाया गया था',
 'logentry-newusers-autocreate' => 'खाते $1 स्वचालित रूप से बनाया गया',
-'newuserlog-byemail' => 'कूटशब्द इ-मेल द्वारा भेजा गया हैं',
+'logentry-rights-rights' => '$1 ने $3 के सदस्य समूह $4 से बदलकर $5 किये',
+'logentry-rights-rights-legacy' => '$1 ने $3 के सदस्य समूह बदले',
+'logentry-rights-autopromote' => '$1 के सदस्य समूह स्वतः $4 से बदलकर $5 किये गए',
+'rightsnone' => '(कोई नहीं)',
 
 # Feedback
 'feedback-bugornote' => 'यदि आप किसी तकनीकी परेशानी को विस्तार से समझाने के लिये तैयार हैं तो कृपया [$1 बग फ़ाइल करें]।
@@ -3810,6 +3876,7 @@ $5
 
 # Search suggestions
 'searchsuggest-search' => 'खोज',
+'searchsuggest-containing' => '...से युक्त',
 
 # API errors
 'api-error-badaccess-groups' => 'आपको इस विकि के लिए फ़ाइलें अपलोड करने की अनुमति नहीं है.',
@@ -3827,7 +3894,7 @@ $5
 'api-error-file-too-large' => 'प्रस्तुत फ़ाइल बहुत बड़ी थी।',
 'api-error-filename-tooshort' => 'फ़ाइल का नाम बहुत छोटा है।',
 'api-error-filetype-banned' => 'इस प्रकार की फ़ाइल पर प्रतिबंध लगा दिया है।',
-'api-error-filetype-banned-type' => '$1 à¥\9eाà¤\87ल {{PLURAL:$4|पà¥\8dरà¤\95ार|पà¥\8dरà¤\95ारà¥\8bà¤\82}} à¤\95à¥\80 à¤\85नà¥\81मति à¤¨à¤¹à¥\80à¤\82 à¤¹à¥\88। à¥\9eाइल प्रकार {{PLURAL:$3|जिसकी|जिनकी}} अनुमति है: $2।',
+'api-error-filetype-banned-type' => '$1 à¤«à¤¼à¤¾à¤\87ल {{PLURAL:$4|पà¥\8dरà¤\95ार|पà¥\8dरà¤\95ारà¥\8bà¤\82}} à¤\95à¥\80 à¤\85नà¥\81मति à¤¨à¤¹à¥\80à¤\82 à¤¹à¥\88। à¤«à¤¼ाइल प्रकार {{PLURAL:$3|जिसकी|जिनकी}} अनुमति है: $2।',
 'api-error-filetype-missing' => 'फाईल की एक्सटेंशन लापता है.',
 'api-error-hookaborted' => 'आपके द्वारा प्रयासरत संशोधन विस्तार हूक द्वारा निरस्त किया गया।',
 'api-error-http' => 'आंतरिक त्रुटि: सर्वर से कनेक्ट करने में असमर्थ।',
index 8e5f5bd..c9176a6 100644 (file)
@@ -83,7 +83,7 @@ $messages = array(
 
 'underline-always' => 'Sab time',
 'underline-never' => 'Kabhi nai',
-'underline-default' => 'Browser ke default',
+'underline-default' => 'Skin nai to browser ke default',
 
 # Font style option in Special:Preferences
 'editfont-style' => 'Badlao waala jagah ke font:',
@@ -168,8 +168,8 @@ $messages = array(
 'newwindow' => '(Nawaa window me khule hai)',
 'cancel' => 'Nai karo',
 'moredotdotdot' => 'Aur...',
-'mypage' => 'Hamaar panna',
-'mytalk' => 'Hamaar bichar',
+'mypage' => 'Panna',
+'mytalk' => 'Baat',
 'anontalk' => 'Ii IP khatir bichar',
 'navigation' => 'Navigation',
 'and' => '&#32;aur',
@@ -201,6 +201,7 @@ $messages = array(
 'namespaces' => 'Naam',
 'variants' => 'Antar',
 
+'navigation-heading' => 'Navigate kare waala menu',
 'errorpagetitle' => 'Galti',
 'returnto' => '$1 pe lauto.',
 'tagline' => '{{SITENAME}} se',
@@ -408,7 +409,7 @@ Query: $2',
 'actionthrottled' => 'Kaam ke band kar dewa gais hai',
 'actionthrottledtext' => 'Spam ke virod me, aap ke ii kaam thora deri me bahut time kare ke rukawat hai, aur aap time limit ke exceed kar diya hai.
 Kuch deri be baad fir se kosis karna.',
-'protectedpagetext' => 'Ii panna ke badlao ke roke ke khatir band kar dewa gais hai.',
+'protectedpagetext' => 'Ii panna ke badlao ke rok dewa gais hae, jisse ki ispe koi badlao aur koi action nai kare sake.',
 'viewsourcetext' => 'Aap ii panna ke source ke dekhe aur nakal utare kare sakta hai:',
 'viewyourtext' => "Aap '''aapan badlao''' ke source ke dekhe aur copy kare saktaa hae",
 'protectedinterface' => 'Ii panna, ii wiki ke khatir, software ke interface text dewe hai, aur iske barbaadi se roke ke khatir band kar dewa gais hai.
@@ -442,6 +443,9 @@ Jon administrator iske lock karis hae, koi kaaran nai diis hae: "$3"',
 
 Aap bina naam ke {{SITENAME}} ke kaam me lae sakta hai, nai to aap wahi sadasya ke naam se nai to duusra sadasya ke naam se <span class='plainlinks'>[$1 log in kare sakta hai]</span>.
 Yaad rakhna ki kuch panna wahi rakam se dekhai jaise ki aap log in bhaya hai, jab tak ki browser ke cache safaa nai hoe jaae.",
+'welcomeuser' => 'Swagat, $1!',
+'welcomecreation-msg' => 'Aap ke account banae dewa gais hai.
+Aapan [[Special:Preferences|{{SITENAME}} pasand]]  ke badle nai bhulna.',
 'yourname' => 'Username:',
 'yourpassword' => 'Password:',
 'yourpasswordagain' => 'Password fir se type karo:',
@@ -597,6 +601,7 @@ Kuchh din ke khatir password: $2',
 'changeemail-oldemail' => 'Abhi ke E-mail address:',
 'changeemail-newemail' => 'Nawaa E-mail address:',
 'changeemail-none' => '(kuchh nai)',
+'changeemail-password' => 'Aap ke {{SITENAME}} password:',
 'changeemail-submit' => 'E-mail badlo',
 'changeemail-cancel' => 'Kaat do',
 
@@ -724,7 +729,7 @@ Yaad rakhna ki custom .css aur .js panna owercase title use kare hai, jaise ki {
 'note' => "'''Dhyan rakkho:'''",
 'previewnote' => "'''Ii khaali ek jhalak dekhae hai'''
 Tumar badlao abhi bachawa nai gais hai!",
-'continue-editing' => 'Badalte raho',
+'continue-editing' => 'Badle waala jagha jaao',
 'previewconflict' => 'Ii preview uu text dekhae hai jon ki uppar ke text editing area me dekhai agar aap iske save karaa.',
 'session_fail_preview' => "''' Maaf karna! Ham log aap ke badlao ke process nai kare paya hai due to a loss of session data.
 Fir se kosis karna.
@@ -783,7 +788,6 @@ Aap ke jaankari ke khatir sab se nawaa suchi niche dewa gais hae:",
 'template-semiprotected' => '(aadha-surakchhit)',
 'hiddencategories' => 'Ii panna {{PLURAL:$1|1 hidden category|$1 hidden categories}} ke member hai:',
 'edittools' => '<!-- Hian ke text edit aur upload forms ke niche dekhai. -->',
-'nocreatetitle' => 'Panna ke banae pe rukawat hai',
 'nocreatetext' => '{{SITENAME}} me nawaa panna banae ke rukawat hai.
 Aap pichhe jaae ke, ek panna jon hai, ke sampadan kare sakta hai, nai to [[Special:UserLogin|log in or create an account]].',
 'nocreate-loggedin' => 'Aap ke nawaa panna banaae ke ijaajat nai hai.',
@@ -812,6 +816,12 @@ Ii naam ke panna abhi hai.',
 'invalid-content-data' => 'Panna me likha gais chij right nai hae',
 'content-not-allowed-here' => 'Panna [[$2]] me "$1" likhe ke ijaajat nai hae',
 
+# Content models
+'content-model-wikitext' => 'wikitext',
+'content-model-text' => 'plain text',
+'content-model-javascript' => 'JavaScript',
+'content-model-css' => 'CSS',
+
 # Parser/template warnings
 'expensive-parserfunction-warning' => "'''Chetauni''': Ii panna me bahut jaada expensive parser function calls hai.
 
@@ -1022,6 +1032,9 @@ Ii baat ke dhyan me rakhna ki navigation jorr ke kaam me laae se ii column reset
 'editundo' => 'Pahile jaise kar do',
 'diff-multi' => '({{PLURAL:$1|Ek biich waala badlao|$1 biich waala badlao}} jiske {{PLURAL:$2|sadasya|$2 sadasya}} karis hae, ke  nai dekhawa jae hai.)',
 'diff-multi-manyusers' => '({{PLURAL:$1|Ek biich waala badlao|$1 biich waala badlao}} jiske {{PLURAL:$2|sadasya|$2 sadasya}} se jaada log karin hae, ke  nai dekhawa jae hai.)',
+'difference-missing-revision' => 'Ii badlao ($1) {{PLURAL:$2|was|were}} pe {{PLURAL:$2|One revision|$2 revisions}} nai pawa gais hae
+Iske kaaran ii hoe sake hae ki ek mitawa gais panna se link karaa jaawe hae.
+Iske baare me aur jaankari [{{fullurl:{{#Special:Log}}/delete|page={{FULLPAGENAMEE}}}} deletion log] me paawa jaae sake hae.',
 
 # Search results
 'searchresults' => 'Khoj ke natija',
@@ -1099,7 +1112,7 @@ Yaad rakhna ki uu log ke {{SITENAME}} ke index saait purana hoi.',
 
 # Preferences page
 'preferences' => 'Pasand',
-'mypreferences' => 'Hamaar pasand',
+'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.',
@@ -1175,9 +1188,9 @@ Iske pahile jaise nai karaa jaawe sake hai.',
 'prefs-emailconfirm-label' => 'E-mail ke confirm karaa jaawe hai:',
 'prefs-textboxsize' => 'editing window ke size',
 'youremail' => 'E-mail:',
-'username' => 'Sadasya ke naam:',
-'uid' => 'Sadasya ke pahchaan:',
-'prefs-memberingroups' => '{{PLURAL:$1|group|groups}} ke member:',
+'username' => '{{GENDER:$1|Sadasya ke naam}}:',
+'uid' => '{{GENDER:$1|Sadasya}} ID:',
+'prefs-memberingroups' => '{{PLURAL:$1|group|groups}} ke {{GENDER:$2|Member}}:',
 'prefs-registration' => 'Registration kare ke time:',
 'yourrealname' => 'Asli naam:',
 'yourlanguage' => 'Bhasa:',
@@ -1325,12 +1338,13 @@ Iske $1 {{PLURAL:$1|character|characters}} se kamti rahe ke chaahi.',
 'right-sendemail' => 'Duusra sadasya ke lage e-mail bhejo',
 'right-passwordreset' => 'Password ke badle waala e-mail ke dekho',
 
+# Special:Log/newusers
+'newuserlogpage' => 'Sadasya ke banae waala log',
+'newuserlogpagetext' => 'Ii sadasya ke banae waala log hai.',
+
 # User rights log
 'rightslog' => 'Sadasya adhikar suchi',
 'rightslogtext' => 'Ii sadasya ke adhikar ke badlao ke suchi hai.',
-'rightslogentry' => '$1 ke group ke membership ke $2 se $3 badal dia hai',
-'rightslogentry-autopromote' => 'ke apne se $2 se $3 ke promotion dewa gais',
-'rightsnone' => '(koi nai hai)',
 
 # Associated actions - in the sentence "You do not have permission to X"
 'action-read' => 'ii panna ke parrho',
@@ -1561,6 +1575,7 @@ Agar jo problem fir nai khatam hoe tab [[Special:ListUsers/sysop|administrator]]
 'backend-fail-notsame' => 'Ek duusra file $1 pe hae.',
 'backend-fail-invalidpath' => '$1, valid storage path nai hae.',
 'backend-fail-delete' => 'File $1 ke nai mitae sakaa hae.',
+'backend-fail-describe' => '"$1" ke metadata ke badle nai sakaa hae.',
 'backend-fail-alreadyexists' => '$1 naam ke ek file abhi hae.',
 'backend-fail-store' => '$2 pe file $1 ke nai bachae sakaa hae.',
 'backend-fail-copy' => 'File $1 ke $2 me nai copy kare sakaa hae',
@@ -1587,7 +1602,21 @@ Agar jo problem fir nai khatam hoe tab [[Special:ListUsers/sysop|administrator]]
 'lockmanager-notlocked' => '"$1" ke  nai khole sakaa hae; ii lock nai hae.',
 'lockmanager-fail-closelock' => '"$1" ke khatir lock file ke nai band kare sakaa hae.',
 'lockmanager-fail-deletelock' => '"$1" ke khatir lock file ke nai mitae sakaa hae.',
+'lockmanager-fail-acquirelock' => '"$1" ke khatir lock nai pawa gais hae.',
 'lockmanager-fail-openlock' => '"$1" ke khatir lock file ke nai khola jaae sake hae',
+'lockmanager-fail-releaselock' => '"$1" ke khatir lock file ke nai khole sakaa hae.',
+'lockmanager-fail-db-bucket' => 'Bucket $1 me enough lock database ke contact nai kare sakaa hae',
+'lockmanager-fail-db-release' => 'Database $1 me lock ke khole nai sakaa hae.',
+'lockmanager-fail-svr-acquire' => 'Server $1 me lock ke nai paae sakaa hae.',
+'lockmanager-fail-svr-release' => 'Server $1 me lock ke khole nai sakaa hae.',
+
+# ZipDirectoryReader
+'zip-file-open-error' => 'File ke ZIP check ke khatir khole ke time kuchh karrgarri hoe gais hae.',
+'zip-wrong-format' => 'Dewa gais file ek ZIP file nai hae.',
+'zip-bad' => 'Ii file kharaab hoe gais hae, nai to, parrhe laek ke ZIP file nai hae.
+Iske security ke khatir nai check karaa jaae sake hae.',
+'zip-unsupported' => 'Ii file ek ZIP file hae jon ki aisan ZIP features ke kaam me laae hae jiske MediaWiki support nai kare hae.
+Iske security ke khatir nai check karaa jaae sake hae.',
 
 # Special:UploadStash
 'uploadstash' => 'Gupt file ke upload karo',
@@ -1598,6 +1627,7 @@ Ii sab panna khaali uu sadasya ke dekhae hae jon ki iske uplaod karis hae.',
 'uploadstash-badtoken' => 'Aap uu chij nai kare saktaa hae, saait ii kaaran se ki aap ke ijaajat khalaas hoe gais hae. Fir se kosis karo.',
 'uploadstash-errclear' => 'File ke hatawa nai jaae sakaa hae.',
 'uploadstash-refresh' => 'File ke suchi ke fir se dekhao',
+'invalid-chunk-offset' => 'Kharaab chunk offset',
 
 # img_auth script messages
 'img-auth-accessdenied' => 'ijajat nai hae',
@@ -1681,17 +1711,23 @@ Niche ke suchi dekhae hai {{PLURAL:$1|pahila panna ke jorr|pahila $1 panna ke jo
 Ek [[Special:WhatLinksHere/$2|Puura suchi]] available hai.',
 'nolinkstoimage' => 'Ii file se koi panna nai jurre hai.',
 'morelinkstoimage' => 'Dekho [[Special:WhatLinksHere/$1|more links]] ii file se.',
+'linkstoimage-redirect' => '$1 (file redirect) $2',
 'duplicatesoffile' => 'Niche ke suchi waala {{PLURAL:$1|file ke dui copy hai|$1 files ke dui copy hai}} ii file ke ([[Special:FileDuplicateSearch/$2|more details]]):',
 'sharedupload' => 'Ii file $1 se aais hai aur duusra project me bhi kaam lawa jaae sake hai.',
 'sharedupload-desc-there' => 'Ii file $1 se aais hai aur duusra projects me bhi kaam me lawa jaae sake hai.
 Meharbaani kar ke  aur jaankari kr khatir [$2 file description page] ke dekho.',
 'sharedupload-desc-here' => 'Ii file $1 se aais hai aur duusra projects me bhi kaam me lawa jaae sake hai.
 Iske baare me aur jaankari [$2 file description page] ke niche dekhawa jaae hai.',
+'sharedupload-desc-edit' => 'Ii file $1 se hae aur iske duusra project me kaam me lawa jaae sake hae.
+Saait aap iske discription ke iske [$2 file description page] me badle maagega.',
+'sharedupload-desc-create' => 'Ii file $1 se hae aur saait iske duusra project me kaam me lawa jaae hae.
+Saait aap iske [$2 file description page] me padle maangega.',
 'filepage-nofile' => 'Ii naam ke koi file nai hai.',
 'filepage-nofile-link' => 'Ii naam ke koi file nai hai, lekin aap [$1 upload kare sakta hai].',
 'uploadnewversion-linktext' => 'Ii file ke nawaa version ke upload karo',
 'shared-repo-from' => '$1 se',
 'shared-repo' => 'ek shared repository',
+'upload-disallowed-here' => 'Aap ii panna ke uppar se nai likhe saktaa hae.',
 
 # File reversion
 'filerevert' => '$1 ke pahile jaise karo',
@@ -1721,6 +1757,7 @@ Iske baare me aur jaankari [$2 file description page] ke niche dekhawa jaae hai.
 ** Dugnaa file',
 'filedelete-edit-reasonlist' => 'Delete kare ke kaaran ke badlo',
 'filedelete-maintenance' => 'Files jiske ke thora din khatir, maintenance ke time, band kar dewa gais rahaa ke mitawa aur fir se pahile jaise karaa jaawe hae.',
+'filedelete-maintenance-title' => 'File ke mitae nai saktaa hae',
 
 # MIME search
 'mimesearch' => 'MIME khojo',
@@ -1781,6 +1818,7 @@ Ek panna ke disambiguation panna maana jaae hae jab ki ii ek template ke kaam me
 Sab row me pahila aur duusra redirect ke jorr hae, aur isme duusra redirect ke nisana bhi hae, jon ki jaada kar ke "aslii" nisana waala panna, jon ki pahila redirect ke dekhae hae.
 <del>Mitawa gais</del> entires ke solve kar dewa gais hae.',
 'double-redirect-fixed-move' => '[[$1]] ke naam badal dewa gais hai, ab ii [[$2]] pe redirect kare hai',
+'double-redirect-fixed-maintenance' => '[[$1]] se [[$2]] ke double redirect ke sudhartaa hae.',
 'double-redirect-fixer' => 'Redirect ke banae waala',
 
 'brokenredirects' => 'Tuuta redirects',
@@ -1798,6 +1836,7 @@ Sab row me pahila aur duusra redirect ke jorr hae, aur isme duusra redirect ke n
 # Miscellaneous special pages
 'nbytes' => '$1 {{PLURAL:$1|byte|bytes}}',
 'ncategories' => '$1 {{PLURAL:$1|vibhag|vibhag}}',
+'ninterwikis' => '$1 {{PLURAL:$1|interwiki|interwikis}}',
 'nlinks' => '$1 {{PLURAL:$1|jorr|jorr}}',
 'nmembers' => '$1 {{PLURAL:$1|sadasya|sadasya}}',
 'nrevisions' => '$1 {{PLURAL:$1|badlao|badlao}}',
@@ -1818,14 +1857,18 @@ Sab row me pahila aur duusra redirect ke jorr hae, aur isme duusra redirect ke n
 'wantedpages' => 'Jaruri panna',
 'wantedpages-badtitle' => 'Result set me kharaa title hai: $1',
 'wantedfiles' => 'Maange waala files',
+'wantedfiletext-cat' => 'Niche likha gais file ke kaam me lawa gais hae lekin ii Wikipedia me nai hae. Ii Wikipedia me file rahe par bhi foreign repositories ke file ke list karaa jaae sake hae. Aisan koi galat positives ke <del>mitae dewa jaai</del>. Aur, uu panna jon ki non-existent files ke embed kare hae ke [[:$1]] me list karaa gais hae.',
+'wantedfiletext-nocat' => 'Niche likha gais file ke kaam me lawa gais hae lekin ii Wikipedia me nai hae. Ii Wikipedia me file rahe par bhi foreign repositories ke file ke list karaa jaae sake hae. Aisan koi galat positives ke <del>mitae dewa jaai</del>.',
 'wantedtemplates' => 'Maange waala templates',
 'mostlinked' => 'Jon panna me sab se jaada chij jorra hai',
 'mostlinkedcategories' => 'Jon vibhag me sab se jaada chij jorra hai',
 'mostlinkedtemplates' => 'Jon template me sab se jaada fike jorra hai',
 'mostcategories' => 'Sab se jaada vibhag waala panna',
 'mostimages' => 'Jon file me sab se jaada file jorra hai',
+'mostinterwikis' => 'Panna jisme sab se dher interwikis hae',
 'mostrevisions' => 'Sab se jaada badlao waala panna',
 'prefixindex' => 'Sab panna jisme prefix index hai',
+'prefixindex-namespace' => 'Sab panna jisme prefix ($1 namespace)hae',
 'shortpages' => 'Chhota panna',
 'longpages' => 'Lamba panna',
 'deadendpages' => 'Jon panna se koi jurre nai hai',
@@ -1858,6 +1901,7 @@ Yaad rakhna ki duusra web site bhi direct URL se ek file se link hoe sake hae, a
 'pager-newer-n' => '{{PLURAL:$1|nawaa 1|nawaa $1}}',
 'pager-older-n' => '{{PLURAL:$1|purana 1|purana $1}}',
 'suppress' => 'Oversight',
+'querypage-disabled' => 'Ii khaas panna ke performance kaaran se disable kar drwa gais hae.',
 
 # Book sources
 'booksources' => 'Pustak sources',
@@ -1876,6 +1920,7 @@ You can narrow down the view by selecting a log type, the user name (case-sensit
 Ketna chij dekhae hae ke aap kamti kare saktaa hae sadasya ke naam (case-sensitive), nai the affected panna (ii bhi case-sensitive) ke log type ke select kare se.',
 'logempty' => 'Log me koi matching item nai hai.',
 'log-title-wildcard' => 'Ii text se suruu hoe waala titles ke khojo',
+'showhideselectedlogentries' => 'Dekhao/lukao chuna gais log entries',
 
 # Special:AllPages
 'allpages' => 'Sab panna',
@@ -1896,6 +1941,11 @@ Is me ek nai to jaada akchhar hai jiske title me nai kaam me lawa jaae sake hai.
 'allpages-bad-ns' => '{{SITENAME}} me namespace "$1" nai hai.',
 'allpages-hide-redirects' => 'Redirects lukao',
 
+# SpecialCachedPage
+'cachedspecial-viewing-cached-ttl' => 'Aap ii panna ke ek cached version ke dekhtaa hae, jon ki $1 talak purana rahe sake hae.',
+'cachedspecial-viewing-cached-ts' => 'Aap ii panna ke ek cached version ke dekhtaa hae, jon ki saait puura aslii nai hae.',
+'cachedspecial-refresh-now' => 'Sab se nawaa ke dekho.',
+
 # Special:Categories
 'categories' => 'Vibhag',
 'categoriespagetext' => 'Niche ke {{PLURAL:$1|vibhag me|vibhag me}}  panna aur media hae.
@@ -1915,8 +1965,9 @@ Is me ek nai to jaada akchhar hai jiske title me nai kaam me lawa jaae sake hai.
 'linksearch-pat' => 'Khoje ke pattern:',
 'linksearch-ns' => 'Namespace:',
 'linksearch-ok' => 'Khojo',
-'linksearch-text' => 'Wildcard jaise ki "*.wikipedia.org" ke kaam me lawa jaae sake hai.<br />
-Support karaa gais protocol: <code>$1</code>',
+'linksearch-text' => 'Wildcard jaise ki "*.wikipedia.org" ke kaam me lawa jaae sake hai.
+Iske khatir ek top-level domain, jaise ki "*.org" ke jaruri hae.<br /> 
+Support karaa gais protocol: <code>$1</code> (defaults to http:// if no protocol is specified).',
 'linksearch-line' => '$1, $2 se jurraa hai',
 'linksearch-error' => 'Wildcards khaali hostname ke suruu me hoe ke chaahi.',
 
@@ -1935,10 +1986,6 @@ Support karaa gais protocol: <code>$1</code>',
 'activeusers-hidesysops' => 'Administrator log ke lukao',
 'activeusers-noresult' => 'koi sadasya ke pawa nai gais hai.',
 
-# Special:Log/newusers
-'newuserlogpage' => 'Sadasya ke banae waala log',
-'newuserlogpagetext' => 'Ii sadasya ke banae waala log hai.',
-
 # Special:ListGroupRights
 'listgrouprights' => 'Sadasya  ke group adhikar',
 'listgrouprights-summary' => 'Niche likha hai ek suchi hai groups ke jon ki ii wiki me defined hai, aapan  associated access rights ke saathe
@@ -1962,9 +2009,11 @@ Support karaa gais protocol: <code>$1</code>',
 'mailnologin' => 'Koi bheje waala address nai hai',
 'mailnologintext' => 'Duusra logan ke lage e-mail bheje ke khatir aap ke [[Special:UserLogin|logged in]] aur [[Special:Preferences|preferences]]  me thik e-mail hoew ke chaahi.',
 'emailuser' => 'Ii user ke E-mail karo',
+'emailuser-title-target' => 'Ii {{GENDER:$1|sadasya}} ke E-mail karo',
+'emailuser-title-notarget' => 'Sadasya ke E-mail karo',
 'emailpage' => 'User ke e-mail karo',
-'emailpagetext' => 'Aap niche ke form ke use kar ke ii sadasya ke e-mail bheje sakta hae.
-Jon e-mail address aap [[Special:Preferences|your user preferences]] me enter karaa rahaa, "From" ke e-mail rahii, jisse ki e-mail receive kare waala aap ke sidha reply kare sake hae.',
+'emailpagetext' => 'Aap niche ke form ke kaam me laae ke ii {{GENDER:$1|sadasya}} ke e-mail bheje saktaa hae.
+Jon e-mail address aap [[Special:Preferences|your user preferences]] me enter karaa rahaa, "From" ke e-mail rahii, jisse ki e-mail ke mile waala jan aap ke sidha jawaab de sake hae.',
 'usermailererror' => 'Mail object error return karis hai:',
 'defemailsubject' => '{{SITENAME}} e-mail sadasya "$1" se',
 'usermaildisabled' => 'Sadasya ke e-mail ke rok dewa gais hae',
@@ -1973,6 +2022,7 @@ Jon e-mail address aap [[Special:Preferences|your user preferences]] me enter ka
 'noemailtext' => 'Ii sadasya thiik e-mail address nai diis hai.',
 'nowikiemailtitle' => 'Koi e-mail ke ijajat nai hai',
 'nowikiemailtext' => 'Ii sadasya e-mail nai le ke decide karis hai.',
+'emailnotarget' => 'Sadasya ke naam, nai to recipient ke naam invalid nai to non-existent hae.',
 'emailtarget' => 'Mie waala jan ke username ke enter karo',
 'emailusername' => 'Sadasya ke naam:',
 'emailusernamesubmit' => 'Bhejo',
@@ -1994,15 +2044,15 @@ Jon e-mail address aap [[Special:Preferences|your user preferences]] me enter ka
 
 # Watchlist
 'watchlist' => 'Hamaar dhyan suchi',
-'mywatchlist' => 'Hamaar dhyaan suchi',
+'mywatchlist' => 'Dhyaan suchi',
 'watchlistfor2' => '$1 $2 ke khatir',
 'nowatchlist' => 'Aap ke dhyan suchi me koi chij nai hai.',
 'watchlistanontext' => 'Aapan dhyan suchi me ke dekhe nai to badle ke khatir meharbani kar ke $1 karo.',
 'watchnologin' => 'Logged in nai hai',
 'watchnologintext' => 'Aapan dhyan suchi ke badle ke khatir aap ke [[Special:UserLogin|logged in]] rahe ke chaahi.',
 'addwatch' => 'Dhyan suchi me jorro',
-'addedwatchtext' => "Panna \"[[:\$1]]\" ke aap ke [[Special:Watchlist|watchlist]] me jorr dewa gais hae.
-Ii panna ke aage ke badlao aur usse jurra baat waala panna ki suchi hian pe hae, aur ii panna ke '''mota akchhar''' me dekhawa jaai [[Special:RecentChanges|abhi haali ke badlao ke suchi]] me jisse ki aap iske sahaj se dekhe sakta hae.",
+'addedwatchtext' => 'Panna "[[:$1]]" ke aap ke [[Special:Watchlist|watchlist]] me jorr dewa gais hae.
+Ii panna ke aage ke badlao aur usse jurra baat waala panna ki suchi hian pe hae.',
 'removewatch' => 'Dhyan suchi me se hatao',
 'removedwatchtext' => 'Panna "[[:$1]]" ke aap ke [[Special:Watchlist|aap ke dhyan suchi]] se hatae dewa gais hai.',
 'watch' => 'Dekho',
@@ -2019,33 +2069,43 @@ Ii panna ke aage ke badlao aur usse jurra baat waala panna ki suchi hian pe hae,
 'watchmethod-list' => 'dhyan me rakkha gais panna ke nawaa badlao ke khatir check karaa jaawe hai',
 'watchlistcontains' => 'Aap ke dhyan suchi me  $1 {{PLURAL:$1|panna|panna}} hai.',
 'iteminvalidname' => "'$1' chij se kuchh garrbarr hai, galat naam...",
-'wlnote' => "Niche {{PLURAL:$1|pahile waala badlao hai| pahile'''$1''' badlao hai}} pichhle {{PLURAL:$2|ghanta|'''$2''' ghanta}} me.",
+'wlnote' => "Niche ke {{PLURAL:$1|pahile waala badlao hai| pahile '''$1''' badlao hai}} pichhle {{PLURAL:$2|ghanta|'''$2''' ghanta}} me as of $3, $4..",
 'wlshowlast' => 'Pichhla $1 ghanta $2 din $3 ke dekhao',
 'watchlist-options' => 'Dhyan suchi ke options',
 
 # Displayed when you click the "watch" button and it is in the process of watching
 'watching' => 'Dekhtaa...',
 'unwatching' => 'Nai dekhtaa...',
+'watcherrortext' => '"$1" kr khatir, aap ke watchlist ke setting ke badle ke time kuchh garrbarr hoe gais hae.',
 
 'enotif_mailer' => '{{SITENAME}} Suchna de waala Mailer',
 'enotif_reset' => 'Sab panna ke visited mark karo',
 'enotif_impersonal_salutation' => '{{SITENAME}} sadasya',
+'enotif_subject_deleted' => '{{gender:$2|$2}} {{SITENAME}} panna $1 ke mitais hae',
+'enotif_subject_created' => '{{gender:$2|$2}}, {{SITENAME}} panna $1 ke banais hae',
+'enotif_subject_moved' => '{{gender:$2|$2}}, {{SITENAME}} panna $1 ke hatais hae',
+'enotif_subject_restored' => '{{gender:$2|$2}}, {{SITENAME}} panna $1 ke restore karis hae',
+'enotif_subject_changed' => '{{gender:$2|$2}}, {{SITENAME}} panna $1 ke badlis hae',
+'enotif_body_intro_deleted' => '{{gender:$2|$2}}, {{SITENAME}} panna $1 ke $PAGEEDITDATE ke roj mitais hae, $3 dekho.',
+'enotif_body_intro_created' => '{{gender:$2|$2}}, {{SITENAME}} panna $1 ke $PAGEEDITDATE ke roj banais hae, abhi ke revision ke khatir $3 ke dekho.',
+'enotif_body_intro_moved' => '{{gender:$2|$2}}, {{SITENAME}} panna $1 ke $PAGEEDITDATE ke roj hatais hae, abhi ke revision ke khatir $3 ke dekho.',
+'enotif_body_intro_restored' => '{{gender:$2|$2}}, {{SITENAME}} panna $1 ke $PAGEEDITDATE ke roj restore karis hae, abhi ke revision ke khatir $3 ke dekho.',
+'enotif_body_intro_changed' => '{{gender:$2|$2}}, {{SITENAME}} panna $1 ke $PAGEEDITDATE ke roj badlis hae, abhi ke revision ke khatir $3 ke dekho.',
 'enotif_lastvisited' => 'Aap ke pichhla visit ke baad ke badlao ke khatir $1 ke dekho.',
 'enotif_lastdiff' => 'Ii badlao ke dekhe ke khatir $1 ke dekho.',
 'enotif_anon_editor' => 'bina naam ke sadasya $1',
 'enotif_body' => 'Priye $WATCHINGUSERNAME,
 
+$PAGEINTRO $NEWPAGE
 
-{{SITENAME}} panna $PAGETITLE ke $CHANGEDORCREATED kar dewa gais hai $PAGEEDITDATE ke din, $PAGEEDITOR ke dwara, abhi ke version ke khatir $PAGETITLE_URL ke dekho.
-
-$NEWPAGE
+Editor\'s summary: $PAGESUMMARY $PAGEMINOREDIT
 
-Sampadak ke summary: $PAGESUMMARY $PAGEMINOREDIT
-
-Editor ke contact karo:
+Contact the editor:
 mail: $PAGEEDITOR_EMAIL
 wiki: $PAGEEDITOR_WIKI
 
+
+
 Aur koi notifications nai rahii, kahe ki koi aur badlao hoe sake hai, jab talak aap ii panna ke visit nai karta hai.
 Aap aapan dhyan suchi me sab dhyan me rakha gais panna pe notification flags ke reset kare sakta hai.
 
@@ -2065,6 +2125,8 @@ $UNWATCHURL
 
 Aapan bichar de ke khatir aur aage ke sahaeta:
 {{canonicalurl:{{MediaWiki:Helppage}}}}',
+'created' => 'banae dewa gais hai',
+'changed' => 'badal dewa gais hai',
 
 # Delete
 'deletepage' => 'Pana ke delete karo',
@@ -2103,6 +2165,8 @@ sawadhani se aage barrho.',
 'rollback' => 'Pahile jaise kare waala badlao',
 'rollback_short' => 'Pahile jaise karo',
 'rollbacklink' => 'pahile jaise karo',
+'rollbacklinkcount' => '$1 {{PLURAL:$1|edit|edits}} ke rollback karo',
+'rollbacklinkcount-morethan' => '$1 {{PLURAL:$1|edit|edits}} se jaada badlao ke rollback karo',
 'rollbackfailed' => 'Pahile jaise kare ke kosis safal nai bhais',
 'cantrollback' => 'Badlao ke pahile jaise nai kare sakta hai;
 isse pahile waala sadasya ii panna ke khaali yogdaan de waala hai.',
@@ -2131,7 +2195,10 @@ Abhi ke laabu panna surakchha ke dekho [[Special:ProtectedPages|protected pages
 'unprotectedarticle' => 'surakchha suchi "[[$1]]" me se hatawa gais',
 'movedarticleprotection' => 'protection settings ke "[[$2]]" se "[[$1]]" kae dia hai',
 'protect-title' => '"$1" ke protection level ke badlo',
+'protect-title-notallowed' => '"$1" ke protection level ke dekho',
 'prot_1movedto2' => '[[$1]] ke naam badal ke [[$2]] kar dewa gae hai',
+'protect-badnamespace-title' => 'Bachae nai jaae sake waala namespace',
+'protect-badnamespace-text' => 'Ii namespace me panna ke bachawa nai jaae sake hae.',
 'protect-legend' => 'Protection ke confirm karo',
 'protectcomment' => 'Kaaran:',
 'protectexpiry' => 'Khalas hoe hai:',
@@ -2220,8 +2287,8 @@ Sait aap ke kharaab link hoi, nai to badlao ke sait pahile jaise kar dewa gais h
 'undeletedrevisions' => '{{PLURAL:$1|1 badlao|$1 badlao}} ke pahile jaise kar dewa gais hai',
 'undeletedrevisions-files' => '{{PLURAL:$1|1 badlao|$1 badlao}} aur {{PLURAL:$2|1 file|$2 files}} ke pahile jaise kar dewa gais hai',
 'undeletedfiles' => '{{PLURAL:$1|1 file|$1 files}} ke pahile jaise kar dewa gais hai',
-'cannotundelete' => 'Pahile jaise nai kare sakaa;
-saait aur koi panna ke pahile jaise kar diis hai.',
+'cannotundelete' => 'Undelete failed:
+$1',
 'undeletedpage' => "'''$1 ke pahile jaise kar dewa gais hai'''
 
 Nawaa mitawa gais aur badlao ke ulta karaa gais panna ke dekhe ke khatir [[Special:Log/delete|deletion log]] ke dekho.",
@@ -2236,6 +2303,7 @@ Nawaa mitawa gais aur badlao ke ulta karaa gais panna ke dekhe ke khatir [[Speci
 'undelete-cleanup-error' => 'Bina use karaa gais archive file "$1" ke delete kare me mistake hoe gais.',
 'undelete-missing-filearchive' => 'File archive ID $1 ke pahile jaise nai kare sakaa hai kahe ki ii database me nai hai.
 Saait iske aur koi pahile jaise kar diis hai.',
+'undelete-error' => 'Error undeleting page',
 'undelete-error-short' => 'File ke pahile jaise kare me eror: $1',
 'undelete-error-long' => 'Ii file ke pahile jaise kare me error hoe gais:
 
@@ -2246,12 +2314,15 @@ $1',
 # Namespace form on various pages
 'namespace' => 'Namespace:',
 'invert' => 'Selection ke ulto',
+'tooltip-invert' => 'Cuna gais namespace (and the associated namespace if checked) ke badlao ke lukae ke khatir ii box ke tick karo',
+'namespace_association' => 'Associated namespace',
+'tooltip-namespace_association' => 'Chuna gais panna ke baat waala panna, nai to, subject namespace ke include kare ke khatir, ii box ke tick karo',
 'blanknamespace' => '(Pahila)',
 
 # Contributions
-'contributions' => 'Sadasya ke yogdaan',
+'contributions' => '{{GENDER:$1|Sadasya}} ke yogdaan',
 'contributions-title' => '$1 ke yogdaan',
-'mycontris' => 'Hamaar yogdaan',
+'mycontris' => 'Yogdaan',
 'contribsub2' => '$1 ($2) ke khatir',
 'nocontribs' => 'Ii critera ke rakam ke koi badlao nai pawa gais hai.',
 'uctop' => '(uppar)',
@@ -2292,10 +2363,11 @@ Sab se nawaa roke ke suchi ke, aap ke khatir, niche dewa gais hae.',
 'whatlinkshere-hideredirs' => '$1 redirects',
 'whatlinkshere-hidetrans' => '$1 transclusions',
 'whatlinkshere-hidelinks' => '$1 jorr',
-'whatlinkshere-hideimages' => '$1 chapa ke jorr',
+'whatlinkshere-hideimages' => '$1 file ke jorr',
 'whatlinkshere-filters' => 'Filters',
 
 # Block/unblock
+'autoblockid' => '#$1 ke apne se block karo',
 'block' => 'Sadasya ke roko',
 'unblock' => 'Sadasya ke rukawat k khalaas karo',
 'blockip' => 'Sadasya ke roko',
@@ -2316,6 +2388,7 @@ Niche ek khaas kaaran likho (jaise ki, citing particular pages that were vandali
 ** Duusre ke dhamki do
 ** Ek se jaada account ke khraab kaam me laao
 ** Sadasya ke naam thiik nai hae',
+'ipb-hardblock' => 'Logged-in sadasya ke ii IP address se badle ke roko',
 'ipbcreateaccount' => 'account banae se roko',
 'ipbemailban' => 'Sadasya ke e-mail bheje se roko',
 'ipbenableautoblock' => 'Apne se sadasya ke kaam me lawa gais last IP address ke roko, aur iske saathe aur koi IPs jisme se baad me badlao kare ke kosis karaa jaae ke bhi roko.',
@@ -2326,11 +2399,15 @@ Niche ek khaas kaaran likho (jaise ki, citing particular pages that were vandali
 'ipbotherreason' => 'Duusra/aur kaaran:',
 'ipbhidename' => 'Badlao aur suchi se username ke hatao',
 'ipbwatchuser' => 'Ii sadasya ke user aur talk panna pe dhyan rakho',
+'ipb-disableusertalk' => 'Ii sadasya ke aapan baat waala panna ke badle pe rukawat lagao, jab ii panna pe rok lagawa gais hae',
 'ipb-change-block' => 'Ii sadasya ke jiske ii settings hai ke fir se roko',
+'ipb-confirm' => 'Block ke confirm karo',
 'badipaddress' => 'IP address kharaab hai',
 'blockipsuccesssub' => 'Rukawat safal rahaa',
 'blockipsuccesstext' => '[[Special:Contributions/$1|$1]] ke rok dewa gais hai.<br />
-Ii rukawat pe fir se bichar kare ke khatir [[Special:BlockList|IP block list]] ke dekho.',
+Ii rukawat pe fir se bichar kare ke khatir [[Special:BlockList|block list]] ke dekho.',
+'ipb-blockingself' => 'Aap abhi apne ke block kare waala hae! Aap sure hai koi aap ii kare mangtaa hae?',
+'ipb-confirmhideuser' => 'Aap abhi ek sadasya ke "hide user" enabled se block kare waala hae. Isse sadasya ke naam ke sab lists aur log entries se hatae dewa jaai.  Aap sure hae ki aap ii kare mangtaa hae?',
 'ipb-edit-dropdown' => 'Badlao ke roke ke kaaran',
 'ipb-unblock-addr' => '$1 ke rukawat ke khalaas karo',
 'ipb-unblock' => 'Ek username nai to IP address ke rukawat ke khalaas karo',
@@ -2340,12 +2417,20 @@ Ii rukawat pe fir se bichar kare ke khatir [[Special:BlockList|IP block list]] k
 'unblockiptext' => 'Niche ke form ke use kar ke pahile roka gais IP address nai to username ke likhe ke adhikar do.',
 'ipusubmit' => 'Ii rukawat ke hatao',
 'unblocked' => '[[User:$1|$1]] ke rukawat ke khalaas kar dewa gais hai',
+'unblocked-range' => '$1 ke unblock kar dewa gais hae',
 'unblocked-id' => 'Roko $1 ke khalaas kar dewa gais hai',
 'blocklist' => 'Roka gais sadasya',
 'ipblocklist' => 'Roka gais sadasya',
 'ipblocklist-legend' => 'Ek roka gais sadasya ke khojo',
 'blocklist-userblocks' => 'Roka gais account ke lukao',
+'blocklist-tempblocks' => 'Temporary block ke lukao',
+'blocklist-addressblocks' => 'Single IP block ke lukao',
+'blocklist-rangeblocks' => 'Range block ke lukao',
+'blocklist-timestamp' => 'Timestamp',
+'blocklist-target' => 'Target',
 'blocklist-expiry' => 'Khalaas hoe hae',
+'blocklist-by' => 'Block kare waala admin',
+'blocklist-params' => 'Block kare waala parameters',
 'blocklist-reason' => 'Kaaran',
 'ipblocklist-submit' => 'Khojo',
 'ipblocklist-localblock' => 'Sthaniye rukawat',
@@ -2375,7 +2460,7 @@ Iske suchi ke niche dekhawa jaawe hae aap ke jankari ke khatir.',
 'reblock-logentry' => '[[$1]] ke block settings with an expiry time of $2 $3 ke badal dewa gais hai.',
 'blocklogtext' => 'Ii suchi sadasya ke rukawat aur rukawat ke reverse kare ke baare me hai.
 Apne se rokaa gais IP adress ii suchi me nai hai.
-Abhi ke rukawat ke dekhe ke khatir meharbani kar ke [[Special:BlockList|IP block list]] ke dekho.',
+Abhi ke rukawat ke dekhe ke khatir meharbani kar ke [[Special:BlockList|block list]] ke dekho.',
 'unblocklogentry' => '$1 ke rukawat ke reverse kar dewa gais hai',
 'block-log-flags-anononly' => 'khaali bina naam ke sadasya',
 'block-log-flags-nocreate' => 'nawaa account banae ke nai hai',
@@ -2392,6 +2477,7 @@ Abhi ke rukawat ke dekhe ke khatir meharbani kar ke [[Special:BlockList|IP block
 'ipb-needreblock' => '$1 ke rok dewa gais hai.
 Ka aapp ii settings ke badle mangtaa hai?',
 'ipb-otherblocks-header' => 'Duusra {{PLURAL:$1|block|blocks}}',
+'unblock-hideuser' => 'Aap ii sadasya ke unblock nai kare saktaa hae, kaaheki iske naam ke lukae dewa gais gae.',
 'ipb_cant_unblock' => 'Error: Roke waala ID $1 nai milaa.
 Saait iske pahile khol dewa gais hoi.',
 'ipb_blocked_as_range' => 'Error: Ii IP $1 ke directly nai block karaa gais hai aur ii kaaran se iske unblock nai karaa jaawe sake hai.
@@ -2433,6 +2519,7 @@ Yaad kar ke [[Special:UnlockDB|lock ke hatae dena]] maintenance khalaas kare ke
 'lockfilenotwritable' => 'Database lock file me likha nai jaawe sake hai.
 Database ke khole nai to band kare ke khatir, iske web server se likhe ke laayek hoe ke chaahi',
 'databasenotlocked' => 'Database band nai hai.',
+'lockedbyandtime' => '(se {{GENDER:$1|$1}} pe $2 hian $3)',
 
 # Move page
 'move-page' => '$1 ke naam badlo',
@@ -2503,7 +2590,7 @@ Meharbani kar ke duusra naam choose karo.',
 Destination panna "[[:$1]]" abhi hai.
 Ka aap mangta hai ki iske mitae dewa jaae, jisse ki ii naam se duusra paana ke save karaa jaae sake?',
 'delete_and_move_confirm' => 'Haan, panna ke mitao',
-'delete_and_move_reason' => 'Naam badle ke khatir mitao',
+'delete_and_move_reason' => '"[[$1]]" se move kare ke khatir isk mitaya',
 'selfmove' => 'Source aur destination title ke naam ekke hai;
 panna ke wahi ke uppar nai save karaa jaae sake hai.',
 'immobile-source-namespace' => 'Namespace "$1" me panna ke naam nai badle sakta hai',
@@ -2511,6 +2598,7 @@ panna ke wahi ke uppar nai save karaa jaae sake hai.',
 'immobile-target-namespace-iw' => 'Interwiki link panna ke hatae ke valid target nai hai.',
 'immobile-source-page' => 'Ii panna ke naam nai badla jaawe sake hai.',
 'immobile-target-page' => 'Uu jagah pe nai move kare sakta hai.',
+'bad-target-model' => 'Maange waala destination, different content model ke use kare hae. $1 se $2 convert nai kare saktaa hae',
 'imagenocrossnamespace' => 'File ke non-file namespace me hatae ke nai kare sakta hai',
 'nonfile-cannot-move-to-file' => 'Ek chij jon ki file nai hae ke file waala jagha pe nai kare sakta hae',
 'imagetypemismatch' => 'Nawaa file extension uske type se nai match kare hai.',
@@ -2534,9 +2622,11 @@ Iske duusra wiki me MediaWiki [[Special:Import|import panna]] se import karaa ja
 Panna ke export kare ke khatir titles ke niche ke text box me likho, ek line pe ek title, aur ii select karo ki aap abhi ke version ke saathe purana version mangtaa hai, panna ke itihaas ke saathe, nai to abhi ke version jisme last badlao ke jankari hai.
 
 Duusra case me aap ek link ke bhi use kare saktaa hai, jaise ki [[{{#Special:Export}}/{{MediaWiki:Mainpage}}]] panna ke khatir "[[{{MediaWiki:Mainpage}}]]".',
+'exportall' => 'Sab panna ke export karo',
 'exportcuronly' => 'Khaali abhi ke badlao ke export karo, puura itihass nai',
 'exportnohistory' => "----
 '''Dhyan rakhna:''' Ii form se panna ke puura itihass ke export kare pe rok lagae dewa gais hai due to performance ke kaaran.",
+'exportlistauthors' => 'Har ek panna me yogdaan de waala ke naam ke bhi include karo',
 'export-submit' => 'Export karo',
 'export-addcattext' => 'Ii vibhag me se panna jorro:',
 'export-addcat' => 'Jorro',
@@ -2569,6 +2659,8 @@ Agar aap generic MediaWiki localisation ke yogdaan de mangtaa hai tab meharbani
 'thumbnail_error' => 'Thumbnail banae me galti hoe gais: $1',
 'djvu_page_error' => 'DjVu panna range me nai hae',
 'djvu_no_xml' => ' DjVu file ke XML ke nai paawe sakaa hae',
+'thumbnail-temp-create' => 'Temporary thumbnail file ke nai banae sakaa hae',
+'thumbnail-dest-create' => 'Destination ke thumbnail ke bajae nai sakaa hae',
 'thumbnail_invalid_params' => 'Thumbnail ke parameter valid nai hae',
 'thumbnail_dest_directory' => 'Destination directory ke nai banaawe sakaa hae',
 'thumbnail_image-type' => 'Ii rakam ke chapa ke support nai karaa jaawe hai',
@@ -2586,6 +2678,7 @@ Sab transwiki import actions ke [[Special:Log/import|import log]] pe log karaa j
 'import-interwiki-templates' => 'Sab template ke include karo',
 'import-interwiki-submit' => 'Import karo',
 'import-interwiki-namespace' => 'Manzil waala namespace:',
+'import-interwiki-rootpage' => 'Destination root panna (optional):',
 'import-upload-filename' => 'File ke naam:',
 'import-comment' => 'Aapan bichar do:',
 'importtext' => 'Meharbani kar ke file ke [[Special:Export|export utility]] use kar ke source wiki me se export karo.
@@ -2617,6 +2710,15 @@ Ek temporary file nai hai.',
 'import-token-mismatch' => 'Loss of session data.
 Meharbani kar ke, fir se kosis karo.',
 'import-invalid-interwiki' => 'Naam dewa gais wiki se import nai kare saktaa hai.',
+'import-error-edit' => 'Panna "$1" ke import nai kara gais kaahe ki aap ke badle ke adhikar nai hae.',
+'import-error-create' => 'Panna "$1" ke import nai kara gais kaahe ki aap ke panna banae ke adhikar nai hae.',
+'import-error-interwiki' => 'Panna "$1" ke import nai kara gais kaahe ki ii panna ke external linking (interwiki) ke khatir reserve karaa gais hae.',
+'import-error-special' => 'Panna "$1" ke import nai karaa gais hae kaaheki ii ek khaas namespace hae jisme panna nai banawa jaae sake hae.',
+'import-error-invalid' => 'Panna "$1" ke import nai karaa gais hae kaaheki iske naam kharaab hae.',
+'import-error-unserialize' => 'Panna "$1" ke $2 badlao ke unserialize kare nai sakaa hae. Ii badlao me content model $3 serialized as $4 ke kaam me lawa gais hae.',
+'import-options-wrong' => 'Galat {{PLURAL:$2|option|options}}: <nowiki>$1</nowiki>',
+'import-rootpage-invalid' => 'Derwa gais root panna ek kharaab title hae',
+'import-rootpage-nosubpage' => 'Root panna ke namespace "$1" sub panna ke nai allow kare hae.',
 
 # Import log
 'importlogpage' => 'Suchi ke import karo',
@@ -2626,6 +2728,16 @@ Meharbani kar ke, fir se kosis karo.',
 'import-logentry-interwiki' => 'transwikied $1',
 'import-logentry-interwiki-detail' => '$1 {{PLURAL:$1|badlao|badlao}} $2 se',
 
+# JavaScriptTest
+'javascripttest' => 'JavaScript ke testing',
+'javascripttest-title' => '$1 tests ke chaalu karaa jaae hae',
+'javascripttest-pagetext-noframework' => 'Ii panna ke JavaScript test ke kare ke khatir reserve karaa gais hae.',
+'javascripttest-pagetext-unknownframework' => 'Anjaan testing framework "$1".',
+'javascripttest-pagetext-frameworks' => 'Meharbaani kar ke ek testing framework ke chuno: $1',
+'javascripttest-pagetext-skins' => 'Test kare ke khatir ek chamrraa ke chuno:',
+'javascripttest-qunit-intro' => 'mediawiki.org me [$1 testing documentation] ke dekho.',
+'javascripttest-qunit-heading' => 'MediaWiki JavaScript QUnit test suite',
+
 # Tooltip help for the actions
 'tooltip-pt-userpage' => 'Aap ke sadasya panna',
 'tooltip-pt-anonuserpage' => 'IP jisme se aap edit karta hai ke sadasya panna',
@@ -2686,6 +2798,8 @@ Meharbani kar ke, fir se kosis karo.',
 'tooltip-diff' => 'Dekhao ki aap kon chij badlaa hae',
 'tooltip-compareselectedversions' => 'Ii panna ke dui chuna gais version ke antar dekho.',
 'tooltip-watch' => 'Ii panna ke aapan dhyan suchi me jorro',
+'tooltip-watchlistedit-normal-submit' => 'Title ke hatao',
+'tooltip-watchlistedit-raw-submit' => 'Dhyan suchi ke update karo',
 'tooltip-recreate' => 'Ii panna ke pahile mitaae pe bhi iske fir se banao',
 'tooltip-upload' => 'Upload suruu karo',
 'tooltip-rollback' => '"Rollback" ii panna ke badlao ke isse pahile waala badlao pe, ek click me, kar dewe hai',
@@ -2717,9 +2831,47 @@ Ii saait ii kaaran se hoi ki panna ke ek jorr koi blacklisted external site se h
 'spambot_username' => 'MediaWiki spam ke safai',
 'spam_reverting' => 'Pahile waala badalo, jisme $1 se link nai hai, pe karaa jaawe hai',
 'spam_blanking' => 'Sab badlao jisme $1 se jorr hai, ke mitawa jaawe hai',
+'spam_deleting' => 'Sab badlao jisme $1 se jorr hai, ke mitawa jaawe hai',
 
 # Info page
-'pageinfo-edits' => 'Etna badlao rahaa',
+'pageinfo-title' => '"$1" ke khatir jaankari',
+'pageinfo-not-current' => 'Maaf karna, lekin purana badlao ke baare me ii jaankari nai de saktaa hae.',
+'pageinfo-header-basic' => 'Basic jaankari',
+'pageinfo-header-edits' => 'Itihaas ke badlo',
+'pageinfo-header-restrictions' => 'Panna ke protection',
+'pageinfo-header-properties' => 'Panna ke property',
+'pageinfo-display-title' => 'Title ke dekhao',
+'pageinfo-default-sort' => 'Default sort key',
+'pageinfo-length' => 'Panna ke lambai (bytes me)',
+'pageinfo-article-id' => 'Panna ke ID',
+'pageinfo-language' => 'Panna ke bhasa',
+'pageinfo-robot-policy' => 'Search engine ke status',
+'pageinfo-robot-index' => 'Indexable',
+'pageinfo-robot-noindex' => 'Indexable nai hae',
+'pageinfo-views' => 'Ketna dafe dekha gais hae',
+'pageinfo-watchers' => 'Ketnaa jane panna ke dekhe hae',
+'pageinfo-redirects-name' => 'Ii panna pe redirect karo',
+'pageinfo-subpages-name' => 'Ii panna ke subpage',
+'pageinfo-subpages-value' => '$1 ($2 {{PLURAL:$2|redirect|redirects}}; $3 {{PLURAL:$3|non-redirect|non-redirects}})',
+'pageinfo-firstuser' => 'Panna ke suruu kare waala',
+'pageinfo-firsttime' => 'Panna kon tarik ke banawa gais',
+'pageinfo-lastuser' => 'Pichhla badle waala',
+'pageinfo-lasttime' => 'Pichhla tarik jab ki isme badlao karaa gais ghae',
+'pageinfo-edits' => 'Badlao ke kul jorr',
+'pageinfo-authors' => 'Badlao kare waala ke kul jorr',
+'pageinfo-recent-edits' => 'Haali ke badlao ke jorr (pichhle $1 me)',
+'pageinfo-recent-authors' => 'Abhi haali badle waala ne number',
+'pageinfo-magic-words' => 'Magic {{PLURAL:$1|sabd}} ($1)',
+'pageinfo-hidden-categories' => 'Lukawa gais {{PLURAL:$1|category|categories}} ($1)',
+'pageinfo-templates' => 'Transcluded {{PLURAL:$1|template|templates}} ($1)',
+'pageinfo-toolboxlink' => 'Panna ke jaankari',
+'pageinfo-redirectsto' => 'Redirects to',
+'pageinfo-redirectsto-info' => 'jaankari',
+'pageinfo-contentpage' => 'Iske content panna jaise gina gais hae',
+'pageinfo-contentpage-yes' => 'Haan',
+'pageinfo-protect-cascading' => 'Protections hian se cascade hoe hae',
+'pageinfo-protect-cascading-yes' => 'Haan',
+'pageinfo-protect-cascading-from' => 'Protections isse cascade hoe hae',
 
 # Patrolling
 'markaspatrolleddiff' => 'Mark karo ke pahraa dewa jaawe hai',
@@ -2731,6 +2883,8 @@ Ii saait ii kaaran se hoi ki panna ke ek jorr koi blacklisted external site se h
 'markedaspatrollederror' => 'Ispe pahraa nai dewa jaawe sake hai',
 'markedaspatrollederrortext' => 'Aap ke ek badlao ke mark kare ke chaahi jispe pahraa dewa jaawe sake hai',
 'markedaspatrollederror-noautopatrol' => 'Aap ke aapan badlao pe pahraa dewe ke ijajat nai hai.',
+'markedaspatrollednotify' => '$1 ke ii badalo ke patrolled mark karaa gais hae',
+'markedaspatrollederrornotify' => 'Patrolled mark kare ke kosis fail hoe gais hae.',
 
 # Patrol log
 'patrol-log-page' => 'Pahraa de waala suchi',
@@ -2760,14 +2914,22 @@ Iske execute kare se aap ke system me garrbarr hoe sake hae.",
 'widthheightpage' => '$1 × $2, $3 {{PLURAL:$3|panna|panna}}',
 'file-info' => 'file etnaa barraa: $1, MIME rakam: $2',
 'file-info-size' => '$1 × $2 pixel, file ke size: $3, MIME type: $4',
+'file-info-size-pages' => '$1 × $2 pixels, file size: $3, MIME type: $4, $5 {{PLURAL:$5|panna}}',
 'file-nohires' => 'Aur achchha resolution nai hai.',
 'svg-long-desc' => 'SVG file, naam kare ke khatir  $1 × $2 pixels, file size: $3',
+'svg-long-desc-animated' => 'Animated SVG file, naam kare ke khatir  $1 × $2 pixels, file size: $3',
+'svg-long-error' => 'SCG file valid nai hae: $1',
 'show-big-image' => 'Puura resolution',
+'show-big-image-preview' => 'Ii preview ke size: $1',
+'show-big-image-other' => 'Duusra {{PLURAL:$2|resolution|resolutions}}: $1',
+'show-big-image-size' => '$1 × $2 pixels',
 'file-info-gif-looped' => 'Ghuum ghumae ke wahii jagha pe aawe hae',
 'file-info-gif-frames' => '$1 {{PLURAL:$1|frame|frames}}',
 'file-info-png-looped' => 'ghum ghumae ke wahii jagha pe aae hae',
 'file-info-png-repeat' => '$1 {{PLURAL:$1|dafe|dafe}} bajawa gais hae',
 'file-info-png-frames' => '$1 {{PLURAL:$1|frame|frames}}',
+'file-no-thumb-animation' => "'''Note: Technical limitations ke kaaran, II file ke thumbnail animated nai rahii.'''",
+'file-no-thumb-animation-gif' => "'''Note: Technical limitations ke kaaran, high resolution GIF images ke thumbnail, jaise ki ii waala, animate nai hoi.'''",
 
 # Special:NewFiles
 'newimages' => 'Nawaa files ke gallery',
@@ -2781,6 +2943,14 @@ Iske execute kare se aap ke system me garrbarr hoe sake hae.",
 'bydate' => 'tarik se',
 'sp-newimages-showfrom' => ' $2, $1 se suruu kar ke nawaa file ke dekhao',
 
+# Video information, used by Language::formatTimePeriod() to format lengths in the above messages
+'seconds' => '{{PLURAL:$1|$1 second|$1 seconds}}',
+'minutes' => '{{PLURAL:$1|$1 second|$1 seconds}}',
+'hours' => '{{PLURAL:$1|$1 ghanta}}',
+'days' => '{{PLURAL:$1|$1 din}}',
+'ago' => '$1 pahile',
+'just-now' => 'ekdam abhi',
+
 # Bad image list
 'bad_image_list' => 'Format ii rakam hai:
 
@@ -2870,14 +3040,55 @@ Wahii line pe aur koi jorr exception consider karaa jai i.e. jahaan pe panna sak
 'exif-flashenergy' => 'Chamak ke taagat',
 'exif-focalplanexresolution' => 'Focal plane X resolution',
 'exif-focalplaneyresolution' => 'Focal plane Y ke resolution',
+'exif-focalplaneresolutionunit' => 'Focal plane resolution unit',
 'exif-subjectlocation' => 'Subject ke location',
+'exif-exposureindex' => 'Exposure ke index',
+'exif-sensingmethod' => 'Sense kare waala method',
 'exif-filesource' => 'File ke source',
 'exif-scenetype' => 'Kon rakam ke scene hae',
+'exif-exposuremode' => 'Custom image processing',
+'exif-whitebalance' => 'White balance',
+'exif-digitalzoomratio' => 'Digital zoom ratio',
+'exif-focallengthin35mmfilm' => '35 mm film me focal length',
+'exif-scenecapturetype' => 'Scene capture type',
+'exif-gaincontrol' => 'Scene ke control kare waala',
+'exif-contrast' => 'Contrast',
+'exif-saturation' => 'Saturation',
+'exif-sharpness' => 'Sharpness',
+'exif-devicesettingdescription' => 'Device settings ke description',
+'exif-subjectdistancerange' => 'Custom image processing',
+'exif-imageuniqueid' => 'Unique image ID',
+'exif-gpslatituderef' => 'Uttar aur dakchhin latitude',
+'exif-gpslongituderef' => 'Purab aur pachchhim longitude',
 'exif-gpsaltitude' => 'Uunchai',
 'exif-gpsspeedref' => 'Raftar ke unit',
 'exif-gpsdestdistance' => 'Manjil se duuri',
 'exif-gpsareainformation' => 'GPS ilaka ke naam',
 'exif-gpsdatestamp' => 'GPS ke taarik',
+'exif-worldregioncreated' => 'Duniya ke hissa jahan pe ii chhapa lewa gais hae',
+'exif-countrycreated' => 'Des jahan pe ii chhapa lewa gais hae',
+'exif-countrycodecreated' => 'Des ke code jahan pe ii chhapa lewa gais hae',
+'exif-provinceorstatecreated' => 'Province nai to state jahan pe ii chhapa lewa gais hae',
+'exif-citycreated' => 'City jahan pe ii chhapa lewa gais hae',
+'exif-sublocationcreated' => 'City ke hissa jahan pe ii chhapa lewa gais hae',
+'exif-countrydest' => 'Des dekhawa gais',
+'exif-countrycodedest' => 'Des ke code dekhawa gais',
+'exif-provinceorstatedest' => 'Province, nai to state dekhawa gais',
+'exif-citydest' => 'City dekhawa gais',
+'exif-sublocationdest' => 'City ke hissa dekhawa gais',
+'exif-objectname' => 'Chhota title',
+'exif-specialinstructions' => 'Khaas instruction',
+'exif-headline' => 'Headline',
+'exif-credit' => 'Credit/Provider',
+'exif-source' => 'Source',
+'exif-editstatus' => 'Chhapa ke editorial status',
+'exif-urgency' => 'Urgency',
+'exif-fixtureidentifier' => 'Fixture ke naam',
+'exif-languagecode' => 'Bhasa',
+'exif-iimcategory' => 'Vibhag',
+'exif-copyrighted' => 'Copyright ke haalat:',
+'exif-copyrightowner' => 'Copyright ke adhikar rakkhe waala',
+'exif-usageterms' => 'Use kare ke shart',
 
 'exif-orientation-2' => 'Baraabar ultawa gais hae',
 'exif-orientation-3' => '180° ghumawa gais hae',
@@ -3028,7 +3239,10 @@ Wahii line pe aur koi jorr exception consider karaa jai i.e. jahaan pe panna sak
 # New logging system
 'revdelete-restricted' => 'sysops pe llabu restrictions',
 'revdelete-unrestricted' => 'sysops se hatawa gae rukawat',
-'newuserlog-byemail' => 'password ke e-mail se bheja gais hai',
+'logentry-rights-rights' => '$1 $3 ke group ke membership ke $4 se badal ke $5 kar dia hae',
+'logentry-rights-rights-legacy' => '$1 $3 ke group membership ke badal dia hae',
+'logentry-rights-autopromote' => '$1 ke apne se $2 se $3 ke promotion dewa gais',
+'rightsnone' => '(koi nai hai)',
 
 # Search suggestions
 'searchsuggest-search' => 'Khojo',
index a0bfaac..63c8abb 100644 (file)
@@ -785,7 +785,6 @@ Ang pinaka-ulihi nga log ginbutang sa idalom agod nga imo mahibaluan:",
 'template-protected' => '(protektado)',
 'template-semiprotected' => '(medyo-protektado)',
 'hiddencategories' => 'Ini nga pahina ay membro sang {{PLURAL:$1|1 tago nga kategorya|$1 mga tago nga kategorya}}:',
-'nocreatetitle' => 'Ginalimitahan ang pagbuhat sang panid',
 'nocreatetext' => 'Ang {{SITENAME}} nagapuggong sang abilidad nga magtuga sang mga bag-o nga panid.
 Mahimo ka nga magbalik kag mag-ilis sang naga-eksister nga panid, ukon[[Special:UserLogin|magsulod ukon maghimo sang akawnt]].',
 'nocreate-loggedin' => 'Wala ka sang lisensya sa pagbuhat sang bag-o nga mga panid.',
@@ -1219,9 +1218,11 @@ Ang imo adres sang e-mail wala ginapakita kon kontakon ka sang iban.',
 'right-read' => 'Basahan ang panid',
 'right-edit' => 'Ilisan ang panid',
 
+# Special:Log/newusers
+'newuserlogpage' => 'Naga-usar nga ginhimo log',
+
 # User rights log
 'rightslog' => 'Karapatan sang naga-usar log',
-'rightsnone' => '(wala)',
 
 # Associated actions - in the sentence "You do not have permission to X"
 'action-edit' => 'islan ini nga pahina',
@@ -1338,9 +1339,6 @@ Mga Pahina sa [[Special:Watchlist|imo lista-lantaw]] ay '''dukot'''.",
 'linksearch' => 'Eksternal na mga tabid',
 'linksearch-ok' => 'Pangita-a',
 
-# Special:Log/newusers
-'newuserlogpage' => 'Naga-usar nga ginhimo log',
-
 # Special:ListGroupRights
 'listgrouprights-group' => 'Grupo',
 'listgrouprights-members' => '(lista sang mga membro)',
@@ -1645,5 +1643,6 @@ Ang iban ay pagataguon sang default.
 # New logging system
 'revdelete-restricted' => 'ginapatuman nga pagbawal sa mga administrador',
 'revdelete-unrestricted' => 'ginkakas nga pagbawal sa mga administrador',
+'rightsnone' => '(wala)',
 
 );
index 44f726a..56dfd2c 100644 (file)
@@ -434,7 +434,7 @@ $messages = array(
 'category-subcat-count-limited' => 'Ova kategorija ima {{PLURAL:$1|podkategoriju|$1 podkategorije|$1 podkategorija}}.',
 'category-article-count' => '{{PLURAL:$2|Ova kategorija sadrži $2 članak.|{{PLURAL:$1|Prikazano je $1 članak|Prikazana su $1 članka|Prikazano je $1 članaka}} od njih $2 ukupno.}}',
 'category-article-count-limited' => '{{PLURAL:$1|stranica je|$1 stranice su|$1 stranica je}} u ovoj kategoriji.',
-'category-file-count' => '{{PLURAL:$2|Ova kategorija sadrži samo sljedeću datoteku.|{{PLURAL:$1|datoteka je|$1 datoteke su|$1 datoteka je}} u ovoj kategoriji, od njih $2 ukupno.}}',
+'category-file-count' => 'Ova kategorija sadrži $2 {{PLURAL:$2|datoteku|datoteke|datoteka}}. {{PLURAL:$1|Slijedi $1 datoteka|Slijede $1 datoteke|Slijedi $1 datoteka}}.',
 'category-file-count-limited' => '{{PLURAL:$1|datoteka je|$1 datoteke su|$1 datoteka su}} u ovoj kategoriji.',
 'listingcontinuesabbrev' => 'nast.',
 'index-category' => 'Indeksirane stranice',
@@ -479,6 +479,7 @@ $messages = array(
 'namespaces' => 'Imenski prostori',
 'variants' => 'Inačice',
 
+'navigation-heading' => 'Navigacijski izbornik',
 'errorpagetitle' => 'Pogrješka',
 'returnto' => 'Vrati se na $1.',
 'tagline' => 'Izvor: {{SITENAME}}',
@@ -494,7 +495,7 @@ $messages = array(
 'permalink' => 'Trajna poveznica',
 'print' => 'Ispiši',
 'view' => 'Vidi',
-'edit' => 'Uredi',
+'edit' => 'uredi',
 'create' => 'Započni',
 'editthispage' => 'Uredi ovu stranicu',
 'create-this-page' => 'Započni ovu stranicu',
@@ -699,6 +700,11 @@ $2',
 'customjsprotected' => 'Ne možete uređivati ovu JavaScript stranicu zato što ona sadrži osobne postavke drugog suradnika.',
 'ns-specialprotected' => "Stranice u imenskom prostoru ''{{ns:special}}'' ne mogu se uređivati.",
 'titleprotected' => "Ovaj naslov je od kreiranja zaštitio suradnik [[User:$1|$1]], uz razlog: ''$2''.",
+'filereadonlyerror' => 'Ne mogu izmijeniti datoteku "$1" jer je spremište "$2" dostupno samo za čitanje.
+
+Administrator koji je zaključao spremište naveo je sljedeći razlog: "$3".',
+'invalidtitle-knownnamespace' => 'Neispravan naziv imenskog prostora "$2" i teksta "$3"',
+'invalidtitle-unknownnamespace' => 'Neispravan naziv imenskog prostora broj $1 i teksta "$2"',
 'exception-nologin' => 'Niste prijavljeni',
 'exception-nologin-text' => 'Ova stranica ili aktivnost zahtijeva da budete prijavljeni na ovom wikiju.',
 
@@ -712,12 +718,16 @@ $2',
 
 Možete nastaviti s korištenjem {{SITENAME}} neprijavljeni, ili se možete ponovo <span class='plainlinks'>[$1 prijaviti]</span> pod istim ili drugim imenom.
 Neke se stranice mogu prikazivati kao da ste još uvijek prijavljeni, sve dok ne očistite međuspremnik svog preglednika.",
+'welcomeuser' => 'Dobrodošli, $1!',
+'welcomecreation-msg' => 'Vaš je suradnički račun otvoren.
+Ne zaboravite prilagoditi Vaše [[Special:Preferences|{{SITENAME}} postavke]].',
 'yourname' => 'Suradničko ime',
 'yourpassword' => 'Lozinka:',
 'yourpasswordagain' => 'Ponovno upišite lozinku',
 'remembermypassword' => 'Zapamti moju lozinku na ovom računalu (najduže $1 {{PLURAL:$1|dan|dana}})',
 'securelogin-stick-https' => 'Ostani spojen na HTTPS nakon prijave',
 'yourdomainname' => 'Vaša domena',
+'password-change-forbidden' => 'Ne možete promjeniti zaporku na ovom projektu.',
 'externaldberror' => 'Došlo je do pogreške s vanjskom autorizacijom ili Vam nije dopušteno osvježavanje vanjskog suradničkog računa.',
 'login' => 'Prijavi se',
 'nav-login-createaccount' => 'Prijavi se',
@@ -867,6 +877,7 @@ Privremena lozinka: $2',
 'changeemail-oldemail' => 'Trenutna E-mail adresa:',
 'changeemail-newemail' => 'Nova E-mail adresa:',
 'changeemail-none' => '(ništa)',
+'changeemail-password' => 'Zaporka za {{SITENAME}}:',
 'changeemail-submit' => 'Promijeni E-mail',
 'changeemail-cancel' => 'Odustani',
 
@@ -960,6 +971,10 @@ Možete [[Special:Search/{{PAGENAME}}|potražiti ovaj naslov]] na drugim stranic
 ili [{{fullurl:{{FULLPAGENAME}}|action=edit}} urediti ovu stranicu]</span>.',
 'noarticletext-nopermission' => 'Ova stranica nema sadržaja.
 Možete [[Special:Search/{{PAGENAME}}|tražiti naslov ove stranice]] na drugim stranicama ili <span class="plainlinks">[{{fullurl:{{#Special:Log}}|page={{FULLPAGENAMEE}}}} pretražiti povezane evidencije]</span>, ali ne možete stvoriti ovu stranicu.',
+'missing-revision' => 'Uređivanje broj $1 na stranici "{{PAGENAME}}" ne postoji.
+
+Ovo je obično uzrokovano kada kliknete na zastarjelu poveznicu na stranice koja je obrisana.
+Više informacija možete pronaći u [{{fullurl:{{#Special:Log}}/delete|page={{FULLPAGENAMEE}}}} evidenciji brisanja].',
 'userpage-userdoesnotexist' => 'Suradničko ime "<nowiki>$1</nowiki>" nije prijavljeno. Jeste li sigurni da želite stvoriti/uređivati ovu stranicu?',
 'userpage-userdoesnotexist-view' => 'Suradnički račun "$1" nije registriran.',
 'blocked-notice-logextract' => 'Ovaj suradnik je trenutačno blokiran.
@@ -1034,7 +1049,6 @@ Posljednja stavka u evidenciji navedena je niže kao napomena:",
 'template-protected' => '(zaštićen)',
 'template-semiprotected' => '(djelomično zaštićen)',
 'hiddencategories' => 'Ova stranica je član {{PLURAL:$1|1 skrivene kategorija|$1 skrivene kategorije|$1 skrivenih kategorija}}:',
-'nocreatetitle' => 'Otvaranje novih stranica ograničeno',
 'nocreatetext' => 'Na ovom je projektu ograničeno otvaranje novih stranica.
 Možete se vratiti i uređivati već postojeće stranice ili se [[Special:UserLogin|prijaviti ili otvoriti suradnički račun]].',
 'nocreate-loggedin' => 'Nemate ovlasti za stvaranje novih stranica.',
@@ -1059,6 +1073,15 @@ Razlog nije ponuđen.',
 'edit-already-exists' => 'Neuspješno stvaranje nove stranice.
 Stranica već postoji.',
 'defaultmessagetext' => 'Prvotni tekst poruke',
+'content-failed-to-parse' => "Obrada (''parsiranje'') formata $2 za model $1 nije uspjela: $3",
+'invalid-content-data' => 'Nevaljani sadržaj',
+'content-not-allowed-here' => 'Sadržaj napisan u obliku "$1"-a nije dozvoljen na stranici [[$2]]',
+
+# Content models
+'content-model-wikitext' => 'wikitekst',
+'content-model-text' => 'obični tekst',
+'content-model-javascript' => 'JavaScript',
+'content-model-css' => 'CSS',
 
 # Parser/template warnings
 'expensive-parserfunction-warning' => 'Upozorenje: Ova stranica sadrži previše opterećujućih poziva parserskih funkcija
@@ -1258,6 +1281,7 @@ Primijetite da uporaba navigacijskih poveznica resetira Vaše izbore u stupcu.',
 # Diffs
 'history-title' => 'Povijest izmjena stranice "$1"',
 'difference-title' => 'Razlika između inačica stranice $1',
+'difference-title-multipage' => 'Razlika između stranica "$1" i "$2"',
 'difference-multipage' => '(Razlika između stranica)',
 'lineno' => 'Redak $1:',
 'compareselectedversions' => 'Usporedi odabrane inačice',
@@ -1265,6 +1289,10 @@ Primijetite da uporaba navigacijskih poveznica resetira Vaše izbore u stupcu.',
 'editundo' => 'ukloni ovu izmjenu',
 'diff-multi' => '({{PLURAL:$1|Nije prikazana jedna međuinačica|Nisu prikazane $1 međuinačice|Nije prikazano $1 međuinačica}} {{PLURAL:$2|jednog|$2|$2}} suradnika)',
 'diff-multi-manyusers' => '({{PLURAL:$1|Nije prikazana jedna međuinačica|Nisu prikazane $1 međuinačice|Nije prikazano $1 međuinačica}} više od {{PLURAL:$2|jednog|$2|$2}} suradnika)',
+'difference-missing-revision' => '{{PLURAL:$2|Uređivanje|$2 uređivanja}} sljedeće šifre ($1) ne {{PLURAL:$2|postoji|postoje}}.
+
+Ovo je obično uzrokovano kada kliknete na zastarjelu poveznicu na stranice koja je obrisana.
+Više informacija možete pronaći u [{{fullurl:{{#Special:Log}}/delete|page={{FULLPAGENAMEE}}}} evidenciji brisanja].',
 
 # Search results
 'searchresults' => 'Rezultati pretrage',
@@ -1350,6 +1378,7 @@ Primijetite da uporaba navigacijskih poveznica resetira Vaše izbore u stupcu.',
 'prefs-beta' => 'Beta mogućnosti',
 'prefs-datetime' => 'Datum i vrijeme',
 'prefs-labs' => 'Labs mogućnosti',
+'prefs-user-pages' => 'Suradničke stranice',
 'prefs-personal' => 'Podaci o suradniku',
 'prefs-rc' => 'Nedavne promjene i kratki članci',
 'prefs-watchlist' => 'Praćene stranice',
@@ -1411,9 +1440,9 @@ Primijetite da uporaba navigacijskih poveznica resetira Vaše izbore u stupcu.',
 'prefs-emailconfirm-label' => 'Potvrda e-mail adrese:',
 'prefs-textboxsize' => 'Veličina prozora za uređivanje',
 'youremail' => 'Vaša elektronska pošta *',
-'username' => 'Suradničko ime:',
-'uid' => 'Suradnički ID-broj:',
-'prefs-memberingroups' => 'Član {{PLURAL:$1|skupine|skupina}}:',
+'username' => 'Ime {{GENDER:$1|suradnika|suradnice}}:',
+'uid' => 'ID-broj {{GENDER:$1|suradnika|suradnice}}:',
+'prefs-memberingroups' => '{{GENDER:$2|Suradnik|Suradnica}} je član {{PLURAL:$1|sljedeće skupine|sljedećih skupina}}:',
 'prefs-registration' => 'Vrijeme prijave:',
 'yourrealname' => 'Pravo ime (nije obvezno)*',
 'yourlanguage' => 'Jezik:',
@@ -1524,6 +1553,7 @@ Ne smije biti duži od $1 {{PLURAL:$1|znaka|znaka|znakova}}.',
 'right-writeapi' => 'Mogućnost pisanja API',
 'right-delete' => 'Brisanje stranica',
 'right-bigdelete' => 'Brisanje stranica koje imaju veliku povijest',
+'right-deletelogentry' => 'Brisanje i vraćanje određenih zapisa u evidenciji',
 'right-deleterevision' => 'Brisanje i vraćanje određene izmjene na stranici',
 'right-deletedhistory' => 'Gledanje povijesti izmjena izbrisane stranice',
 'right-deletedtext' => 'Pregled izbrisanog teksta i izmjena između izbrisanih izmjena',
@@ -1560,12 +1590,13 @@ Ne smije biti duži od $1 {{PLURAL:$1|znaka|znaka|znakova}}.',
 'right-sendemail' => 'Slanje e-maila drugim korisnicima',
 'right-passwordreset' => 'Vidi poruku e-pošte o ponovnom postavljanju lozinke',
 
+# Special:Log/newusers
+'newuserlogpage' => 'Evidencija novih suradnika',
+'newuserlogpagetext' => 'Ispod je popis nedavno otvorenih suradničkih imena.',
+
 # User rights log
 'rightslog' => 'Evidencija suradničkih prava',
 'rightslogtext' => 'Ovo je evidencija promjena suradničkih prava.',
-'rightslogentry' => 'promijenjena suradnička prava za $1 iz $2 u $3',
-'rightslogentry-autopromote' => 'je automatski unaprijeđen s $2 na $3',
-'rightsnone' => '(suradnik)',
 
 # Associated actions - in the sentence "You do not have permission to X"
 'action-read' => 'čitanje ove stranice',
@@ -1787,6 +1818,7 @@ Ako se problem ponovi, javite to [[Special:ListUsers/sysop|administratoru]].',
 'backend-fail-notsame' => 'Na lokaciji $1 već postoji datoteka koja se razlikuje.',
 'backend-fail-invalidpath' => "$1 nije valjana pričuvna putanja (''path'').",
 'backend-fail-delete' => 'Ne mogu obrisati datoteku $1.',
+'backend-fail-describe' => 'Ne mogu promijeniti metapodatke datoteke "$1".',
 'backend-fail-alreadyexists' => 'Datoteka $1 već postoji.',
 'backend-fail-store' => 'Nije uspjelo spremanje datoteke $1 na $2.',
 'backend-fail-copy' => 'Nije uspjelo kopiranje datoteke "$1" u "$2".',
@@ -1796,8 +1828,30 @@ Ako se problem ponovi, javite to [[Special:ListUsers/sysop|administratoru]].',
 'backend-fail-closetemp' => 'Ne mogu zatvoriti privremenu datoteku.',
 'backend-fail-read' => 'Datoteka "$1" je nečitljiva.',
 'backend-fail-create' => 'Ne mogu stvoriti ili pisati u datoteku $1.',
+'backend-fail-maxsize' => 'Ne mogu zapisati datoteku "$1" jer je veća od {{PLURAL:$2|$2 bajta|$2 bajta|$2 bajtova}}.',
 'backend-fail-readonly' => 'Baza ili datotečni sustav "$1" trenutačno nije dostupan za pisanje. Razlog je: "\'\'$2\'\'"',
 'backend-fail-synced' => 'Datoteka "$1" nije identična inačici u internom skladištu',
+'backend-fail-connect' => 'Ne mogu se spojiti na spremište poslužitelja "$1“.',
+'backend-fail-internal' => 'Došlo je do nepoznate pogrješke u spremištu poslužitelja "$1".',
+'backend-fail-contenttype' => 'Nije moguće utvrditi tip datoteke koju treba spremiti u "$1".',
+'backend-fail-batchsize' => 'Spremištu poslužitelja upućen je zahtjev od $1 {{PLURAL:$1|datotečne operacije|datotečne operacije|datotečnih operacija}}; ograničenje je $2 {{PLURAL:$2|datotečne operacija|datotečne operacije|datotečnih operacija}}.',
+'backend-fail-usable' => 'Ne mogu pročitati ili zapisati datoteku "$1" jer nemate odgovarajuća prava ili direktoriji ne postoje.',
+
+# File journal errors
+'filejournal-fail-dbconnect' => 'Ne mogu se spojiti na bazu spremišta "$1".',
+'filejournal-fail-dbquery' => 'Osvježavanje baze spremišta "$1" nije uspjelo.',
+
+# Lock manager
+'lockmanager-notlocked' => 'Ne mogu otključati "$1"; nije zaključan.',
+'lockmanager-fail-closelock' => "Ne mogu zatvoriti ''lock'' datoteku za \"\$1\".",
+'lockmanager-fail-deletelock' => "Ne mogu obrisati ''lock'' datoteku  za \"\$1\".",
+'lockmanager-fail-acquirelock' => "Ne mogu stvoriti ''lock'' datoteku za \"\$1\".",
+'lockmanager-fail-openlock' => "Ne mogu otvoriti ''lock'' datoteku  za \"\$1\".",
+'lockmanager-fail-releaselock' => "Ne mogu obrisati ''lock'' datoteku  za \"\$1\".",
+'lockmanager-fail-db-bucket' => 'Ne mogu uspostaviti vezu s poslužiteljem zaključavanja za $1',
+'lockmanager-fail-db-release' => 'Ne mogu otključati bazu podataka $1.',
+'lockmanager-fail-svr-acquire' => 'Ne mogu ostvariti zaključavanje poslužitelja $1.',
+'lockmanager-fail-svr-release' => 'Ne mogu otključati poslužitelj $1.',
 
 # ZipDirectoryReader
 'zip-file-open-error' => 'Došlo je do pogreške pri otvaranju datoteke za ZIP provjeru.',
@@ -1902,11 +1956,16 @@ Sljedeći popis prikazuje {{PLURAL:$1|stranice koje|prvih $1 stranica koje}} vod
 'sharedupload' => 'Ova je datoteka postavljena na $1 i mogu je koristiti ostali projekti.',
 'sharedupload-desc-there' => 'Ova datoteka je s $1 i mogu je koristiti drugi projekti. Pogledajte [$2 stranicu s opisom datoteke] za dodatne informacije.',
 'sharedupload-desc-here' => 'Ova datoteka je sa $1 i mogu je koristiti drugi projekti. Opis s njezine [$2 stranice s opisom datoteke] prikazan je ispod.',
+'sharedupload-desc-edit' => 'Ova datoteka nalazi se na $1 i može se rabiti na drugim projektima.
+Njen opis možete urediti na [$2 stranici opisa datoteke].',
+'sharedupload-desc-create' => 'Ova datoteka nalazi se na $1 i može se rabiti na drugim projektima.
+Možda želite urediti njen opis na [$2 stranici opisa datoteke].',
 'filepage-nofile' => 'Ne postoji datoteka s ovim imenom.',
 'filepage-nofile-link' => 'Ne postoji datoteka s ovim imenom, ali možete je [$1 postaviti].',
 'uploadnewversion-linktext' => 'Postavi novu inačicu datoteke',
 'shared-repo-from' => 's projekta $1',
 'shared-repo' => 'zajednički poslužitelj',
+'upload-disallowed-here' => 'Ne možete prepisati ovu datoteku.',
 
 # File reversion
 'filerevert' => 'Ukloni ← $1',
@@ -2036,6 +2095,8 @@ koja obično ukazuje na "pravu" odredišnu stranicu, na koju bi trebalo pokaziva
 'wantedpages' => 'Tražene stranice',
 'wantedpages-badtitle' => 'Nevaljani naslov kao rezultat: $1',
 'wantedfiles' => 'Tražene datoteke',
+'wantedfiletext-cat' => 'Sljedeće datoteke se rabe ali ne postoje. Datoteke iz drugih izvora mogu biti navedene iako ne postoje. Takve datoteke će biti <del>izbrisane</del> s popisa. Osim toga, stranice koje sadrže nepostojeće datoteke popisane su [[:$1|ovdje]].',
+'wantedfiletext-nocat' => 'Sljedeće datoteke se rabe ali ne postoje. Datoteke iz drugih izvora mogu biti navedene iako ne postoje. Takve datoteke će biti <del>izbrisane</del> s popisa.',
 'wantedtemplates' => 'Traženi predlošci',
 'mostlinked' => 'Stranice na koje vodi najviše poveznica',
 'mostlinkedcategories' => 'Kategorije na koje vodi najviše poveznica',
@@ -2045,6 +2106,7 @@ koja obično ukazuje na "pravu" odredišnu stranicu, na koju bi trebalo pokaziva
 'mostinterwikis' => 'Stranice s najviše međuwiki poveznica',
 'mostrevisions' => 'Popis članaka po broju uređivanja',
 'prefixindex' => 'Sve stranice prema početku naslova',
+'prefixindex-namespace' => 'Sve stranice s predmetkom (imenski prostor $1)',
 'shortpages' => 'Kratke stranice',
 'longpages' => 'Duge stranice',
 'deadendpages' => 'Slijepe ulice',
@@ -2141,7 +2203,7 @@ Također pogledajte [[Special:WantedCategories|tražene kategorije]].',
 'linksearch-ok' => 'Traži',
 'linksearch-text' => 'Možete koristiti džoker znakove poput "*.wikipedia.org".
 Potrebno je navesti osnovnu domenu (TLD), npr. "*.org".<br />
-Podržani su protokoli: <code>$1</code> (ne stavljajte ih u vaše pretraživanje).',
+Podržani {{PLURAL:$2|protokol|protokoli}}: <code>$1</code> (default je http:// ako nijedan protokol nije naveden).',
 'linksearch-line' => '$1 poveznica s članka $2',
 'linksearch-error' => 'Džoker znakovi se mogu rabiti samo na početku imena poslužitelja.',
 
@@ -2160,10 +2222,6 @@ Podržani su protokoli: <code>$1</code> (ne stavljajte ih u vaše pretraživanje
 'activeusers-hidesysops' => 'Sakrij administratore',
 'activeusers-noresult' => 'Niti jedan suradnik nije nađen.',
 
-# Special:Log/newusers
-'newuserlogpage' => 'Evidencija novih suradnika',
-'newuserlogpagetext' => 'Ispod je popis nedavno otvorenih suradničkih imena.',
-
 # Special:ListGroupRights
 'listgrouprights' => 'Prava suradničkih skupina',
 'listgrouprights-summary' => 'Ovo je popis suradničkih skupina određenih na ovoj wiki, s njihovim pripadajućim pravima.
@@ -2192,7 +2250,7 @@ da bi mogli slati poštu drugim suradnicima.',
 'emailuser-title-target' => 'Pošalji poruku {{GENDER:$1|suradniku|suradnici|suradniku}}',
 'emailuser-title-notarget' => 'Pošalji e-poštu suradniku',
 'emailpage' => 'Pošalji e-poštu suradniku',
-'emailpagetext' => 'Možete koristiti ovaj obrazac za slanje elektroničke pošte ovom suradniku.
+'emailpagetext' => 'Možete koristiti ovaj obrazac za slanje elektroničke pošte {{GENDER:$1|suradniku|suradnici}}.
 E-mail adresa iz Vaših [[Special:Preferences|postavki]] nalazit će se u "From" polju poruke i primatelj će Vam moći izravno odgovoriti.',
 'usermailererror' => 'Sustav pošte javio je pogrešku:',
 'defemailsubject' => '{{SITENAME}} e-mail od suradnika "$1"',
@@ -2232,8 +2290,8 @@ E-mail adresa iz Vaših [[Special:Preferences|postavki]] nalazit će se u "From"
 'watchnologintext' => 'Morate biti [[Special:UserLogin|prijavljeni]]
 za promjene u popisu praćenja.',
 'addwatch' => 'Dodaj u popis praćenja',
-'addedwatchtext' => "Stranica \"[[:\$1]]\" je dodana na Vaš [[Special:Watchlist|popis praćenja]].
-Promjene na toj stranici i njenoj stranici za razgovor bit će prikazane na popisu praćenja, a stranica će biti ispisana '''podebljano''' u [[Special:RecentChanges|popisu nedavnih promjena]] kako biste je lakše primijetili. Ako poželite ukloniti stranicu s popisa praćenja, pritisnite \"Prekini praćenje\" u traci s naredbama.",
+'addedwatchtext' => 'Stranica "[[:$1]]" je dodana na Vaš [[Special:Watchlist|popis praćenja]].
+Promjene na toj stranici i njenoj stranici za razgovor bit će prikazane na popisu praćenja.',
 'removewatch' => 'Ukloni s popisa praćenja',
 'removedwatchtext' => 'Stranica "[[:$1]]" je uklonjena s [[Special:Watchlist|Vašeg popisa praćenja]].',
 'watch' => 'Prati',
@@ -2267,6 +2325,11 @@ Promjene na toj stranici i njenoj stranici za razgovor bit će prikazane na popi
 'enotif_subject_moved' => '{{gender:$2|Suradnik|Suradnica}} $2 {{gender:$2|je premjestio|je premjestila}} stranicu $1 projekta {{SITENAME}}',
 'enotif_subject_restored' => '{{gender:$2|Suradnik|Suradnica}} $2 {{gender:$2|je vratio|je vratila}} stranicu $1 projekta {{SITENAME}}',
 'enotif_subject_changed' => '{{gender:$2|Suradnik|Suradnica}} $2 {{gender:$2|je uredio|je uredila}} stranicu $1 projekta {{SITENAME}}',
+'enotif_body_intro_deleted' => 'Stranicu $1 projekta {{SITENAME}} {{GENDER:$2|obrisao|obrisala}} je dana $PAGEEDITDATE {{GENDER:$2|suradnik|suradnica}} $2, vidi $3.',
+'enotif_body_intro_created' => 'Stranicu $1 projekta {{SITENAME}} {{GENDER:$2|stvorio|stvorila}} je dana $PAGEEDITDATE {{GENDER:$2|suradnik|suradnica}} $2, vidi $3 za trenutačnu inačicu stranice.',
+'enotif_body_intro_moved' => 'Stranicu $1 projekta {{SITENAME}} {{GENDER:$2|premjestio|premjestila}} je dana $PAGEEDITDATE {{GENDER:$2|suradnik|suradnica}} $2, vidi $3 za trenutačnu inačicu stranice.',
+'enotif_body_intro_restored' => 'Stranica $1 projekta {{SITENAME}} {{GENDER:$2|vratio|vratila}} je dana $PAGEEDITDATE {{GENDER:$2|suradnik|suradnica}} $2, vidi $3 za trenutačnu inačicu stranice.',
+'enotif_body_intro_changed' => 'Stranica $1 projekta {{SITENAME}} {{GENDER:$2|promijenio|promijenila}} je dana $PAGEEDITDATE {{GENDER:$2|suradnik|suradnica}} $2, vidi $3 za trenutačnu inačicu stranice.',
 'enotif_lastvisited' => 'Pogledaj $1 za promjene od zadnjeg posjeta.',
 'enotif_lastdiff' => 'Pogledajte $1 kako biste mogli vidjeti tu izmjenu.',
 'enotif_anon_editor' => 'neprijavljeni suradnik $1',
@@ -2296,6 +2359,8 @@ $UNWATCHURL
 
 Za povratne informacije i pomoć posjetite:
 {{canonicalurl:{{MediaWiki:Helppage}}}}',
+'created' => 'stvorio',
+'changed' => 'promijenio',
 
 # Delete
 'deletepage' => 'Izbriši stranicu',
@@ -2445,7 +2510,8 @@ ili je promjena vraćena ili uklonjena iz arhive.',
 'undeletedrevisions' => '{{PLURAL:$1|$1 inačica vraćena|$1 inačice vraćene|$1 inačica vraćeno}}',
 'undeletedrevisions-files' => '{{PLURAL:$1|$1 promjena|$1 promjene|$1 promjena}} i {{PLURAL:$2|$2 datoteka vraćena|$2 datototeke vraćene|$2 datoteka vraćeno}}',
 'undeletedfiles' => '{{PLURAL:$1|$1 datoteka vraćena|$1 datoteke vraćene|$1 datoteka vraćeno}}',
-'cannotundelete' => 'Vraćanje obrisane inačice nije uspjelo; netko drugi je stranicu već vratio.',
+'cannotundelete' => 'Vraćanje obrisane inačice nije uspjelo:
+$1',
 'undeletedpage' => "'''$1 je vraćena'''
 
 Pogledajte [[Special:Log/delete|evidenciju brisanja]] za zapise nedavnih brisanja i vraćanja.",
@@ -2748,6 +2814,7 @@ Odredišni članak "[[:$1]]" već postoji. Želite li ga obrisati da biste napra
 'immobile-target-namespace-iw' => 'Međuwiki poveznica nije valjano odredište za premještanje stranice.',
 'immobile-source-page' => 'Ova stranica je se ne može premjestiti.',
 'immobile-target-page' => 'Ne mogu premjestiti na željeni naslov.',
+'bad-target-model' => 'Željeno odredište rabi drugačiji tip sadržaja. Ne mogu pretvoriti $1 u $2.',
 'imagenocrossnamespace' => 'Datoteka ne može biti premještena u imenski prostor koji nije za datoteke',
 'nonfile-cannot-move-to-file' => 'Ne mogu premjestiti nešto što nije datoteka u imenski prostor za datoteke',
 'imagetypemismatch' => 'Ekstenzija nove datoteke se ne poklapa sa svojim tipom.',
@@ -2855,6 +2922,13 @@ Snimite je na svoje računalo i postavite je ovdje.',
 'import-invalid-interwiki' => 'Ne mogu uvesti iz navedene wiki.',
 'import-error-edit' => 'Stranica "$1" nije uvezena jer vam nije dopušteno da je uređujete.',
 'import-error-create' => 'Stranica "$1" nije uvezena jer vam nije dopušteno da ju stvorite.',
+'import-error-interwiki' => 'Stranica "$1" nije uvezena jer je njen naziv rezerviran za vanjsko povezivanje (međuwiki poveznice).',
+'import-error-special' => 'Stranica "$1" nije uvezena jer pripada posebnom imenskom prostoru u koji se stranice ne uvoze.',
+'import-error-invalid' => 'Stranica "$1" nije uvezena jer je njen naziv nevaljan.',
+'import-error-unserialize' => 'Inačica $2 stranice "$1" ne može biti pročitana/uvezena. Zapisano je da inačica rabi $3 tip sadržaja u $4 formatu.',
+'import-options-wrong' => '{{PLURAL:$2|Pogrješna opcija|Pogrješne opcije}}: <nowiki>$1</nowiki>',
+'import-rootpage-invalid' => 'Zadana početna stranica ima nevaljan naslov.',
+'import-rootpage-nosubpage' => 'Imenski prostor "$1" početne stranice ne dopušta podstranice.',
 
 # Import log
 'importlogpage' => 'Evidencija uvoza članaka',
@@ -2866,6 +2940,13 @@ Snimite je na svoje računalo i postavite je ovdje.',
 
 # JavaScriptTest
 'javascripttest' => 'Testiranje JavaScripta',
+'javascripttest-title' => 'Izvršavaju se $1 testovi',
+'javascripttest-pagetext-noframework' => 'Ova je stranica rezervirana za izvršavanje JavaScript testova.',
+'javascripttest-pagetext-unknownframework' => 'Nepoznata testna okolina "$1".',
+'javascripttest-pagetext-frameworks' => 'Molimo izaberite jednu od sljedećih testnih okolina: $1',
+'javascripttest-pagetext-skins' => "Izaberite temu (''skin'') za testiranje:",
+'javascripttest-qunit-intro' => 'Pogledajte [$1 testnu dokumentaciju] na mediawiki.org.',
+'javascripttest-qunit-heading' => 'MediaWiki JavaScript QUnit testni alati',
 
 # Tooltip help for the actions
 'tooltip-pt-userpage' => 'Moja suradnička stranica',
@@ -3001,9 +3082,13 @@ Razlog je vjerojatno vanjska poveznica koja se nalazi na crnom popisu.',
 'pageinfo-hidden-categories' => '{{PLURAL:$1|Postoji|Postoje|Postoji}} $1 {{PLURAL:$1|skrivena kategorija|skrivene kategorije|skrivenih kategorija}}',
 'pageinfo-templates' => '{{PLURAL:$1|Rabi|Rabe|Rabi}} se $1 {{PLURAL:$1|predložak|predloška|predložaka}}',
 'pageinfo-toolboxlink' => 'Podatci o stranici',
+'pageinfo-redirectsto' => 'Preusmjerava na',
+'pageinfo-redirectsto-info' => 'podatci',
 'pageinfo-contentpage' => 'Broji se kao stranica sa sadržajem',
 'pageinfo-contentpage-yes' => 'Da',
+'pageinfo-protect-cascading' => 'Prenosiva zaštita počinje od ove stranice',
 'pageinfo-protect-cascading-yes' => 'Da',
+'pageinfo-protect-cascading-from' => 'Prenosiva zaštita počinje od',
 
 # Skin names
 'skinname-standard' => 'Standardna',
@@ -3024,6 +3109,7 @@ Razlog je vjerojatno vanjska poveznica koja se nalazi na crnom popisu.',
 'markedaspatrollederrortext' => 'Morate odabrati inačicu koju treba označiti za pregledanu.',
 'markedaspatrollederror-noautopatrol' => 'Ne možete vlastite promjene označiti patroliranima.',
 'markedaspatrollednotify' => 'Uređivanje stranice $1 označeno je pregledanim.',
+'markedaspatrollederrornotify' => 'Označavanje stranice pregledanom nije uspjelo.',
 
 # Patrol log
 'patrol-log-page' => 'Evidencija pregledavanja promjena',
@@ -3056,6 +3142,8 @@ Njegovim izvršavanjem mogli biste oštetiti svoj sustav.",
 'file-info-size-pages' => '$1 × $2 piksela, veličina datoteke: $3, MIME vrsta: $4, $5 {{PLURAL:$5|stranica|stranice|stranica}}',
 'file-nohires' => 'Viša rezolucija nije dostupna.',
 'svg-long-desc' => 'SVG datoteka, nominalno $1 × $2 piksela, veličina datoteke: $3',
+'svg-long-desc-animated' => 'Animirana SVG datoteka, veličine $1 × $2 piksela, veličina datoteke: $3',
+'svg-long-error' => 'Nevaljana SVG datoteka: $1',
 'show-big-image' => 'Vidi sliku u punoj veličini (rezoluciji)',
 'show-big-image-preview' => 'Veličina ovog prikaza: $1.',
 'show-big-image-other' => '{{PLURAL:$2|Druga rezolucija|Ostale rezolucije}}: $1.',
@@ -3065,6 +3153,8 @@ Njegovim izvršavanjem mogli biste oštetiti svoj sustav.",
 'file-info-png-looped' => 'animacija se ponavlja',
 'file-info-png-repeat' => 'prikazano $1 {{PLURAL:$1|puta|puta|puta}}',
 'file-info-png-frames' => '$1 {{PLURAL:$1|okvir|okvira}}',
+'file-no-thumb-animation' => "'''Napomena: Zbog tehničkih ograničenja minijature ove datoteke neće biti animirane.'''",
+'file-no-thumb-animation-gif' => "'''Napomena: Zbog tehničkih ograničenja minijature GIF slika visoke rezolucije poput ove neće biti animirane.'''",
 
 # Special:NewFiles
 'newimages' => 'Galerija novih datoteka',
@@ -3084,6 +3174,7 @@ Njegovim izvršavanjem mogli biste oštetiti svoj sustav.",
 'hours' => '{{PLURAL:$1|$1 sat|$1 sata|$1 sati}}',
 'days' => '{{PLURAL:$1|$1 dan|$1 dana|$1 dana}}',
 'ago' => 'prije $1',
+'just-now' => 'upravo',
 
 # Bad image list
 'bad_image_list' => "Rabi se sljedeći format:
@@ -3582,6 +3673,7 @@ Valjanost ovog potvrdnog koda istječe u $4',
 # Scary transclusion
 'scarytranscludedisabled' => '[Interwiki transkluzija isključena]',
 'scarytranscludefailed' => '[Dobava predloška nije uspjela za $1]',
+'scarytranscludefailed-httpstatus' => '[Preuzimanje predloška nije uspjelo za $1: HTTP $2]',
 'scarytranscludetoolong' => '[URL je predug]',
 
 # Delete conflict
@@ -3748,6 +3840,7 @@ Također možete koristiti [[Special:EditWatchlist|standardni editor]].',
 'version-license' => 'Licencija',
 'version-poweredby-credits' => "Ovaj wiki pogoni '''[//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-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.
@@ -3886,11 +3979,14 @@ Slike se na taj način prikazuju u punoj rezoluciji, a drugi tipovi datoteka se
 'logentry-move-move_redir-noredirect' => '$1 je premjestio stranicu $3 na $4 preko preusmjeravanja bez ostavljanja preusmjeravanja',
 'logentry-patrol-patrol' => '$1 je označio uređivanje $4 stranice $3 pregledanim',
 'logentry-patrol-patrol-auto' => '$1 je automatski označio uređivanje $4 stranice $3 pregledanim',
-'logentry-newusers-newusers' => '$1 je otvorio suradnički račun',
-'logentry-newusers-create' => '$1 je otvorio suradnički račun',
-'logentry-newusers-create2' => '$1 je otvorio suradnički račun $3',
+'logentry-newusers-newusers' => 'Suradnički račun $1 je otvoren',
+'logentry-newusers-create' => 'Suradnički račun $1 je otvoren.',
+'logentry-newusers-create2' => '$1 je  {{GENDER:$2|otvorio|otvorila}} suradnički račun $3',
 'logentry-newusers-autocreate' => 'Suradnički račun $1 je automatski stvoren',
-'newuserlog-byemail' => 'lozinka poslana e-poštom',
+'logentry-rights-rights' => '$1 {{GENDER:$2|je promijenio|je promijenila}} suradnička prava računa $3 iz $4 u $5',
+'logentry-rights-rights-legacy' => '$1 {{GENDER:$2|je promijenio|je promijenila|je promijenio}} članstvo grupe suradničkog računa $3',
+'logentry-rights-autopromote' => 'Suradničkom računu $1 {{GENDER:$1|je automatski promijenjeno članstvo|su automatski promijenjena članstva}} iz $4 u $5',
+'rightsnone' => '(suradnik)',
 
 # Feedback
 'feedback-bugornote' => 'Ako ste spremni detaljno opisati tehnički problem molimo [$1 prijavite "bug"].
@@ -3917,29 +4013,37 @@ Inače, možete ispuniti jednostavan obrazac u nastavku. Vaš komentar biti će
 'api-error-badtoken' => 'Interna pogrješka: Token nije ispravan.',
 'api-error-copyuploaddisabled' => 'Postavljanje datoteka putem URL-a nije omogućeno na ovom projektu.',
 'api-error-duplicate' => '{{PLURAL:$1|Postoji [$2 druga datoteka]|Postoje $1 [$2 druge datoteke]|Postoji $1 [$2 drugih datoteka]}} istog sadržaja.',
+'api-error-duplicate-archive' => '{{PLURAL:$1|Postojala je [$2 druga datoteka]|Postojale su [$2 neke druge datoteke]|Postojalo je [$2 nekih drugih datoteka]}} na projektu s istim sadržajem, ali {{PLURAL:$1|je obrisana|su obrisane}}.',
+'api-error-duplicate-archive-popup-title' => '{{PLURAL:$1|Dupla datoteka|Duple datoteke}} koje su ranije obrisane.',
+'api-error-duplicate-popup-title' => '{{PLURAL:$1|$1 dupla datoteka|$1 duple datoteke|$1 duplih datoteka}}.',
 'api-error-empty-file' => 'Datoteka koju ste poslali je prazna.',
-'api-error-fetchfileerror' => 'Pojavio se neki problem pri dobivanju podataka o datoteci.',
+'api-error-emptypage' => 'Stvaranje praznih novih stranica nije dopušteno.',
+'api-error-fetchfileerror' => 'Interna pogrješka: Pojavio se neki problem pri dobivanju podataka o datoteci.',
+'api-error-fileexists-forbidden' => 'Datoteka s imenom "$1" već postoji i ne može biti prepisana.',
+'api-error-fileexists-shared-forbidden' => 'Datoteka s imenom "$1" već postoji u zajedničkom spremištu i ne može biti prepisana.',
 'api-error-file-too-large' => 'Datoteka koju ste poslali bila je prevelika.',
 'api-error-filename-tooshort' => 'Ime datoteke je prekratko.',
 'api-error-filetype-banned' => 'Ova vrsta datoteke je zabranjena.',
-'api-error-filetype-banned-type' => '$1 {{PLURAL:$4|je nedopušteni tip datoteke|su nedopušteni tipovi datoteke}}. Dopušteni {{PLURAL:$3|tip datoteke je|tipovi datoteke su}} $2.',
+'api-error-filetype-banned-type' => '$1 {{PLURAL:$4|nije dopušteni tip datoteke|su nedopušteni tipovi datoteke|su nedopušteni tipovi datoteka}}. Dopušteni {{PLURAL:$3|tip datoteke je|tipovi datoteke su|tipovi datoteka su}} $2.',
 'api-error-filetype-missing' => 'Datoteci nedostaje nastavak.',
 'api-error-hookaborted' => 'Izmjena koji ste pokušali načiniti je otkazana preko "kuke" proširenja mediawiki softvera.',
 'api-error-http' => 'Interna pogreška: Ne može se povezati na poslužitelj.',
 'api-error-illegal-filename' => 'Ime datoteke nije dopušteno.',
-'api-error-internal-error' => 'Pojavio se neki problem s obradom postavljanja datoteke na wiki.',
+'api-error-internal-error' => 'Interna pogrješka: Pojavio se neki problem s obradom postavljanja datoteke na wiki.',
 'api-error-invalid-file-key' => 'Poslužitelj nije mogao naći tu datoteku u vašim postavljenim datotekama.',
-'api-error-missingparam' => 'Postavljanje nije imalo sve nužne podatke (možda je pogrješka u ovom postavljaču.)',
-'api-error-missingresult' => 'Nismo mogli utvrditi je li kopiranje uspjelo.',
-'api-error-mustbeloggedin' => 'Niste pravilno prijavljeni.',
+'api-error-missingparam' => 'Interna pogrješka: Nedostaju parametri HTTP(S) zahtjeva.',
+'api-error-missingresult' => 'Interna pogrješka: Nismo mogli utvrditi je li kopiranje uspjelo.',
+'api-error-mustbeloggedin' => 'Morate biti prijavljeni da bi mogli postavljati datoteke.',
 'api-error-mustbeposted' => 'Postoji pogreška u ovom softveru; ne rabi ispravnu HTTP metodu.',
+'api-error-noimageinfo' => 'Postavljanje je uspjelo, ali poslužitelj nije vratio nikakvu informaciju o datoteci.',
 'api-error-nomodule' => 'Interna pogreška: Nije postavljen modul za postavljanje.',
 'api-error-ok-but-empty' => 'Interna pogreška: Nema odgovora od poslužitelja.',
 'api-error-overwrite' => 'Postavljanje preko postojeće datoteke nije dopušteno.',
-'api-error-stashfailed' => 'Wikiprojekt nije mogao spremiti datoteku.',
+'api-error-stashfailed' => 'Interna pogrješka: Poslužitelj nije uspio spremiti privremenu datoteku.',
+'api-error-timeout' => 'Poslužitelj nije odgovorio unutar očekivanog vrjemena.',
 'api-error-unclassified' => 'Dogodila se nepoznata pogreška.',
 'api-error-unknown-code' => 'Nepoznata pogreška: "$1"',
-'api-error-unknown-error' => 'Dogodila se pogrješka pri pokušaju postavljanja vaše datoteke.',
+'api-error-unknown-error' => 'Interna pogrješka: Dogodila se pogrješka pri pokušaju postavljanja vaše datoteke.',
 'api-error-unknown-warning' => 'Nepoznato upozorenje: $1',
 'api-error-unknownerror' => 'Nepoznata pogrješka: "$1"',
 'api-error-uploaddisabled' => 'Postavljanje datoteka je onemogućeno na ovom wikiprojektu.',
@@ -3952,5 +4056,8 @@ Inače, možete ispuniti jednostavan obrazac u nastavku. Vaš komentar biti će
 'duration-days' => '$1 {{PLURAL:$1|dan|dana}}',
 'duration-weeks' => '$1 {{PLURAL:$1|tjedan|tjedna|tjedana}}',
 'duration-years' => '$1 {{PLURAL:$1|godina|godine|godina}}',
+'duration-decades' => '$1 {{PLURAL:$1|desetljeće|desetljeća}}',
+'duration-centuries' => '$1 {{PLURAL:$1|stoljeće|stoljeća}}',
+'duration-millennia' => '$1 {{PLURAL:$1|milenij|milenija}}',
 
 );
index 4f04300..1cc7e16 100644 (file)
@@ -286,6 +286,7 @@ $messages = array(
 'newwindow' => '(wočinja so w nowym woknje)',
 'cancel' => 'Přetorhnyć',
 'moredotdotdot' => 'Wjace…',
+'morenotlisted' => 'Dalše njepodate...',
 'mypage' => 'Strona',
 'mytalk' => 'Diskusija',
 'anontalk' => 'Diskusijna strona tuteje IP.adresy',
@@ -584,7 +585,7 @@ 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ł?',
-'createaccountmail' => 'z mejlku',
+'createaccountmail' => 'Nachwilne přidatne hesło wužiwać a jo na slědowacu e-mejlowu adresu pósłać',
 'createaccountreason' => 'Přičina:',
 'badretype' => 'Hesle, kotrejž sy zapodał, so njekryjetej.',
 'userexists' => 'Wužiwarske mjeno, kotrež sy zapodał, so hižo wužiwa.
@@ -648,6 +649,7 @@ Móžeš tutu zdźělenku ignorować, jeli so wužiwarske konto zmylnje wutwori
 # E-mail sending
 'php-mail-error-unknown' => 'Njeznaty zmylk w PHP-funkciji mail()',
 'user-mail-no-addy' => 'Je so spytało e-mejl bjez e-mejloweje adresy słać.',
+'user-mail-no-body' => 'Je so spytało, e-mejl bjez teksta abo z překrótkim tekstom pósłać',
 
 # Change password dialog
 'resetpass' => 'Hesło změnić',
@@ -705,6 +707,7 @@ Nachwilne hesło: $2',
 'changeemail-oldemail' => 'Aktualna e-mejlowa adresa:',
 'changeemail-newemail' => 'Nowa e-mejlowa adresa:',
 'changeemail-none' => '(žana)',
+'changeemail-password' => 'Twoje hesło za {{GRAMMAR:akuzatiw|{{SITENAME}}}}',
 'changeemail-submit' => 'E-mejlowu adresu změnić',
 'changeemail-cancel' => 'Přetorhnyć',
 
@@ -857,7 +860,8 @@ Lubiš nam tež, zo sy jón sam napisał abo ze zjawneje domejny abo z podobneho
 
 '''NJESKŁADUJ PŘINOŠKI Z COPYRIGHTOM BJEZ DOWOLNOSĆE!'''",
 'longpageerror' => "'''ZMYLK: Tekst, kotryž pospytuješ składować, je {{PLURAL:$1| jedyn kilobajt|$1 kilobajtaj|$1 kilobajty|$1 kilobajtow}} dołho, maksimalna wulkosć pak je {{PLURAL:$2|jedyn kilobajt|$1 kilobajtaj|$1 kilobajty|$1 kilobajtow}}.''' Njehodźi so składować.",
-'readonlywarning' => "'''KEDŹBU: Datowa banka bu wothladanja dla zawrjena, tohodla njemóžeš swoje změny nětko składować. Móžeš tekst do tekstoweje dataje přesunyć a jón za pozdźišo składować.'''
+'readonlywarning' => "'''KEDŹBU: Datowa banka bu wothladowanja dla zawrjena, tohodla njemóžeš swoje změny nětko składować.'''
+Móžeš tekst do tekstoweje dataje kopěrować a jón za pozdźišo składować.
 
 Administrator, kiž je ju zawrjena, je tutu přičinu podał: $1",
 'protectedpagewarning' => "'''KEDŹBU: Tuta strona bu zawrjena, tak zo jenož wužiwarjo z prawami administratora móža ju wobdźěłać.'''
@@ -874,7 +878,6 @@ Najnowši protokolowy zapisk je deleka jako referenca podaty:",
 'template-semiprotected' => '(škitana za njepřizjewjenych wužiwarjow a nowačkow)',
 'hiddencategories' => 'Tuta strona je čłon w {{PLURAL:$1|1 schowanej kategoriji|$1 schowanymaj kategorijomaj|$1 schowanych kategorijach|$1 schowanych kategorijach}}:',
 'edittools' => '<!-- Tutón tekst so spody wobdźěłowanskich a nahrawanskich formularow pokazuje. -->',
-'nocreatetitle' => 'Wutworjenje stron je wobmjezowane.',
 'nocreatetext' => 'Na {{GRAMMAR:lokatiw|{{SITENAME}}}} bu wutworjenje nowych stronow wobmjezowane. Móžeš wobstejace strony wobdźěłać abo [[Special:UserLogin|so přizjewić abo wužiwarske konto wutworić]].',
 'nocreate-loggedin' => 'Nimaš prawo, zo by nowe strony wutworił.',
 'sectioneditnotsupported-title' => 'Wobdźěłowanje wotrězka so njepodpěruje',
@@ -1416,15 +1419,13 @@ Smě mjenje hač $1 {{PLURAL:$1|znamješko|znamješce|znamješka|znamješkow}} d
 'right-sendemail' => 'Druhim wužiwarjam e-mejl pósłać',
 'right-passwordreset' => 'E-mejlki za wróćostajenje hesłow sej wobhladać',
 
+# Special:Log/newusers
+'newuserlogpage' => 'Protokol nowych wužiwarjow',
+'newuserlogpagetext' => 'To je protokol wutworjenja nowych wužiwarskich kontow.',
+
 # User rights log
 'rightslog' => 'Protokol zrjadowanja wužiwarskich prawow',
 'rightslogtext' => 'To je protokol změnow wužiwarskich prawow.',
-'rightslogentry' => 'změni skupinske čłonstwo za $1 z $2 do $3',
-'rightslogentry-autopromote' => 'je so awtomatisce wot $2 do $3 změnił',
-'logentry-rights-rights' => '$1 změni skupinske čłonstwo za $3 z $4 do $5',
-'logentry-rights-rights-legacy' => '$1 změni skupinske čłonstwo za $3',
-'logentry-rights-autopromote' => '$1 powyši so awtomatisce wot $4 do $5',
-'rightsnone' => '(ničo)',
 
 # Associated actions - in the sentence "You do not have permission to X"
 'action-read' => 'tutu stronu čitać',
@@ -2042,7 +2043,7 @@ Hlej tež [[Special:WantedCategories|požadane kategorije]].',
 'linksearch-ok' => 'Pytać',
 'linksearch-text' => 'Zastupniske znamješka kaž "*.wikipedia.org" móža so wužiwać.
 Znajmjeńša hłowna domena je trěbna, na přikład "*.org".<br />
-Podpěrowane protokole: <code>$1</code> (standard je http://, jeli žadyn protokol njeje podaty).',
+{{PLURAL:$2|Podpěrowany protokol|Podpěrowanej protokolej|Podpěrowane protokole}}: <code>$1</code> (standard je http://, jeli žadyn protokol njeje podaty).',
 'linksearch-line' => '$1 je z $2 wotkazany.',
 'linksearch-error' => 'Zastupniske znamjenja dadźa so jenož na spočatku URL wužiwać.',
 
@@ -2055,16 +2056,12 @@ Podpěrowane protokole: <code>$1</code> (standard je http://, jeli žadyn protok
 # Special:ActiveUsers
 'activeusers' => 'Lisćina aktiwnych wužiwarjow',
 'activeusers-intro' => 'To je lisćina wužiwarjow, kotřiž běchu aktiwni za {{PLURAL:$1|posledni dźeń|poslednjej $1 dnjej|poslednje $1 dny|poslednich $1 dnjow}}:',
-'activeusers-count' => '$1 {{PLURAL:$1|změna|změnje|změny|změnow}} w {{PLURAL:$3|zańdźenej dnju|zańdźenymaj $3 dnjomaj|zańdźenych $3 dnjach|zańdźenych $3 dnjach}}',
+'activeusers-count' => '$1 {{PLURAL:$1|akcija|akciji|akcije|akcijow}} w {{PLURAL:$3|zańdźenej dnju|zańdźenymaj $3 dnjomaj|zańdźenych $3 dnjach}}',
 'activeusers-from' => 'Wužiwarjow zwobraznić, započinajo z:',
 'activeusers-hidebots' => 'Boćiki schować',
 'activeusers-hidesysops' => 'Administratorow schować',
 'activeusers-noresult' => 'Žani wužiwarjo namakani.',
 
-# Special:Log/newusers
-'newuserlogpage' => 'Protokol nowych wužiwarjow',
-'newuserlogpagetext' => 'To je protokol wutworjenja nowych wužiwarskich kontow.',
-
 # 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ć.',
@@ -2121,7 +2118,7 @@ E-mejlowa adresa, kotruž sy w [[Special:Preferences|swojich wužiwarskich nasta
 'usermessage-editor' => 'Systemowy powěstnik',
 
 # Watchlist
-'watchlist' => 'wobkedźbowanki',
+'watchlist' => 'Wobkedźbowanki',
 'mywatchlist' => 'Wobkedźbowanki',
 'watchlistfor2' => 'Za wužiwarja $1 $2',
 'nowatchlist' => 'Nimaš žane strony w swojich wobkedźbowankach.',
@@ -2129,10 +2126,8 @@ E-mejlowa adresa, kotruž sy w [[Special:Preferences|swojich wužiwarskich nasta
 'watchnologin' => 'Njejsy přizjewjeny.',
 'watchnologintext' => 'Dyrbiš [[Special:UserLogin|přizjewjeny]] być, zo by swoje wobkedźbowanki změnić móhł.',
 'addwatch' => 'K wobkedźbowankam přidać',
-'addedwatchtext' => "Strona [[:$1]] bu k twojim [[Special:Watchlist|wobkedźbowankam]] přidata.
-Přichodne změny tuteje strony a přisłušneje diskusijneje strony budu so tam nalistować a strona so '''w tučnym pismje''' w [[Special:RecentChanges|lisćinje aktualnych změnach]] zjewi, zo by so wosnadniło ju wubrać.
-
-Jeli chceš stronu pozdźišo ze swojich wobkedźbowankow wotstronić, klikń na rajtark „njewobkedźbować” horjeka na tutej stronje.",
+'addedwatchtext' => 'Strona [[:$1]] bu k twojim [[Special:Watchlist|wobkedźbowankam]] přidata.
+Přichodne změny tuteje strony a přisłušneje diskusijneje strony budu so tam nalistować.',
 'removewatch' => 'Z wobkedźbowankow wotstronić',
 'removedwatchtext' => 'Strona "[[:$1]]" bu z [[Special:Watchlist|twojich wobkedźbowankow]] wotstronjena.',
 'watch' => 'wobkedźbować',
@@ -2166,7 +2161,7 @@ Jeli chceš stronu pozdźišo ze swojich wobkedźbowankow wotstronić, klikń na
 'enotif_subject_moved' => 'Strona {{GRAMMAR:genitiw|{{SITENAME}}}} $1 je so wot {{GENDER:$2|$2}} přesunyła',
 'enotif_subject_restored' => 'Strona {{GRAMMAR:genitiw|{{SITENAME}}}} $1 je so wot {{GENDER:$2|$2}} wobnowiła',
 'enotif_subject_changed' => 'Strona {{GRAMMAR:genitiw|{{SITENAME}}}} $1 je so wot {{GENDER:$2|$2}} změniła',
-'enotif_body_intro_deleted' => 'Strona {{GRAMMAR:genitiw|{{SITENAME}}}} $1 je so na $PAGEEDITDATE wot {{GENDER:$1|$2}} zhašała, hlej $3 za aktualnu wersiju',
+'enotif_body_intro_deleted' => 'Strona {{GRAMMAR:genitiw|{{SITENAME}}}} $1 je so na $PAGEEDITDATE wot {{GENDER:$1|$2}} zhašała, hlej $3.',
 'enotif_body_intro_created' => 'Strona {{GRAMMAR:genitiw|{{SITENAME}}}} $1 je so na $PAGEEDITDATE wot {{GENDER:$2|$2}} wutworiła, hlej $3 za aktualnu wersiju',
 'enotif_body_intro_moved' => 'Strona {{GRAMMAR:genitiw|{{SITENAME}}}} $1 je so na $PAGEEDITDATE wot {{GENDER:$2|$2}} přesunyła, hlej $3 za aktualnu wersiju',
 'enotif_body_intro_restored' => 'Strona {{GRAMMAR:genitiw|{{SITENAME}}}} $1 je so na $PAGEEDITDATE wot {{GENDER:$2|$2}} wobnowiła, hlej $3 za aktualnu wersiju',
@@ -2203,6 +2198,8 @@ $UNWATCHURL
 
 Wotmołwy a dalša pomoc:
 {{canonicalurl:{{MediaWiki:Helppage}}}}',
+'created' => 'wutworjena',
+'changed' => 'změnjena',
 
 # Delete
 'deletepage' => 'Stronu zhašeć',
@@ -2267,6 +2264,8 @@ Hlej [[Special:ProtectedPages|lisćinu škitanych stronow]] za lisćinu tuchwilu
 'prot_1movedto2' => 'je [[$1]] pod hesło [[$2]] přesunył',
 'protect-badnamespace-title' => 'Nješkitajomny mjenowy rum',
 'protect-badnamespace-text' => 'Strony w tutym mjenowym rumje njehodźa so škitać.',
+'protect-norestrictiontypes-text' => 'Tuta strona njeda so škitać, dokelž žane wobmjezowanja k dispoziciji njesteja.',
+'protect-norestrictiontypes-title' => 'Nješkitajomna strona',
 'protect-legend' => 'Škit wobkrućić',
 'protectcomment' => 'Přičina:',
 'protectexpiry' => 'Čas škita:',
@@ -2279,9 +2278,9 @@ Hlej [[Special:ProtectedPages|lisćinu škitanych stronow]] za lisćinu tuchwilu
 'protect-locked-access' => "Nimaš trěbne prawa, zo by škit strony změnił. Tu widźiš aktualne škitne nastajenja za stronu'''„$1“:'''",
 'protect-cascadeon' => 'Tuta strona je tuchwilu škitana, dokelž je w {{PLURAL:$1|slědowacej stronje|slědowacych stronach}} zapřijata, {{PLURAL:$1|kotraž je|kotrež su}} přez kaskadowu opciju {{PLURAL:$1|škitana|škitane}}. Móžeš škitowy status strony změnić, to wšak wliw na kaskadowy škit nima.',
 'protect-default' => 'Wšěch wužiwarjow dowolić',
-'protect-fallback' => 'Prawo "$1" trěbne.',
-'protect-level-autoconfirmed' => 'Nowych a njeregistrowanych wužiwarjow blokować',
-'protect-level-sysop' => 'jenož administratorojo',
+'protect-fallback' => 'Jenož wužiwarjow z prawom "$1" dowolić',
+'protect-level-autoconfirmed' => 'Jenož awtomatisce wobkrućenych wužiwarjow dowolić',
+'protect-level-sysop' => 'Jenož administratorow dowolić',
 'protect-summary-cascade' => 'kaskadowacy',
 'protect-expiring' => 'spadnje $1 (UTC)',
 'protect-expiring-local' => 'płaćiwy hač do $1',
@@ -2565,11 +2564,11 @@ Hlej [[Special:BlockList|lisćinu blokowanjow]], zo by zablokowanjow pruwował.'
 # Move page
 'move-page' => '$1 přesunyć',
 'move-page-legend' => 'Stronu přesunyć',
-'movepagetext' => 'Wužiwanje formulara deleka budźe stronu přemjenować, suwajo jeje cyłe stawizny pod nowe mjeno. Stary titl budźe daleposrědkowanje na nowy titl. Wotkazy na stary titl so njezměnja. Pruwuj za dwójnymi abo skóncowanymi daleposrědkowanjemi. Dyrbiš zaručić, zo wotkazy na stronu pokazuja, na kotruž dyrbja dowjesć.
+'movepagetext' => "Wužiwanje formulara deleka budźe stronu přemjenować, suwajo jeje cyłe stawizny pod nowe mjeno. Stary titl budźe daleposrědkowanje na nowy titl.  Móžeš dalesposrědkowanja, kotrež na prěnjotny titl pokazać, awtomatisce aktualizować. Pruwuj za [[Special:DoubleRedirects|dwójnymi]] abo [[Special:BrokenRedirects|skóncowanymi daleposrědkowanjemi]]. Dyrbiš zaručić, zo wotkazy na stronu pokazuja, na kotruž dyrbja dowjesć.
 
-Wobkedźbuj, zo strona so <b>nje</b> přesunje, jeli strona z nowym titlom hizo eksistuje, chibazo wona je prózdna abo dalesposrědkowanje a nima zašłe stawizny. To woznamjenja, zo móžeš stronu tam wróćo přemjenować, hdźež bu runje přemjenowana, jeli zmylk činiš a njemóžeš wobstejacu stronu přepisować.
+Wobkedźbuj, zo strona so '''nje''' přesunje, jeli strona z nowym titlom hizo eksistuje, chibazo wona je prózdna abo dalesposrědkowanje a nima zašłe stawizny. To woznamjenja, zo móžeš stronu tam wróćo přemjenować, hdźež bu runje přemjenowana, jeli zmylk činiš a njemóžeš wobstejacu stronu přepisować.
 
-<b>KEDŹBU!</b> Móže to drastiska a njewočakowana změna za woblubowanu stronu być; prošu budź sej wěsty, zo sćěwki rozumiš, prjedy hač pokročuješ.',
+'''Kedźbu!''' Móže to drastiska a njewočakowana změna za woblubowanu stronu być; prošu budź sej wěsty, zo sćěwki rozumiš, prjedy hač pokročuješ.",
 'movepagetext-noredirectfixer' => "Wužiwajo slědowacy formular, móžeš stronu přemjenować a wšě jich daty do stawiznow noweho titula přesunyć.
 Stary titul budźe dalesposrědkowanska strona k nowemu titulej.
 Skontroluj za [[Special:DoubleRedirects|dwójnymi]] abo [[Special:BrokenRedirects|wobškodźenymi dalesposrědkowanjemi]].
@@ -2739,6 +2738,7 @@ W poslednim padźe móžeš tež wotkaz wužiwać, na př. „[[{{#Special:Expor
 'import-error-interwiki' => 'Strona "$1" so njeimportuje, dokelž jeje mjeno je za eksterne wotkazowanje (interwiki) wuměnjene.',
 'import-error-special' => 'Strona "$1" so njeimportuje, dokelž k wosebitemu mjenowemu rumej słuša, kotryž strony njedowola.',
 'import-error-invalid' => 'Strona "$1" so njeimportuje, dokelž jeje mjeno je njepłaćiwe.',
+'import-error-unserialize' => 'Wersija $2 strony "$1" njeda so wotserializować. Wersija je so zdźěliła za wužiwanje wobsahoweho modela $3, kotryž je jako $4 serializowany.',
 'import-options-wrong' => '{{PLURAL:$2|Wopačna opcija|Wopačnej opciji|Wopačne opcije|Wopačne opcije}}: <nowiki>$1</nowiki>',
 'import-rootpage-invalid' => 'Podata korjenjowa strona je njepłaćiwa.',
 'import-rootpage-nosubpage' => 'Mjenowy rum "$1" korjenjoweje strony njedowola podstrony.',
@@ -2894,6 +2894,7 @@ W poslednim padźe móžeš tež wotkaz wužiwać, na př. „[[{{#Special:Expor
 'pageinfo-magic-words' => '{{PLURAL:$1|Magiske słowo|Magiskej słowje|Magiske słowa|Magiske słowa}} ($1)',
 'pageinfo-hidden-categories' => '{{PLURAL:$1|Schowana kategorija|Schowanej kategoriji|Schowane kategorije|Schowane kategorije}} ($1)',
 'pageinfo-templates' => '{{PLURAL:$1|Zapřijata předłoha|Zapřijatej předłoze|Zapřijate předłohi|Zapřijate předłohi}} ($1)',
+'pageinfo-transclusions' => '{{PLURAL:$1|Strona zapřijata|Stronje zapřijatej|Strony zapřijate}}  do ($1)',
 'pageinfo-toolboxlink' => 'Informacije wo stronje',
 'pageinfo-redirectsto' => 'Sposrědkuje k',
 'pageinfo-redirectsto-info' => 'Info',
@@ -2902,6 +2903,10 @@ W poslednim padźe móžeš tež wotkaz wužiwać, na př. „[[{{#Special:Expor
 'pageinfo-protect-cascading' => 'Kaskadowy škit wottud',
 'pageinfo-protect-cascading-yes' => 'Haj',
 'pageinfo-protect-cascading-from' => 'Kaskadowy škit wot',
+'pageinfo-category-info' => 'Kategorijowe informacije',
+'pageinfo-category-pages' => 'Ličba rěkow',
+'pageinfo-category-subcats' => 'Ličba podkategorijow',
+'pageinfo-category-files' => 'Ličba datajow',
 
 # Skin names
 'skinname-standard' => 'Klasiski',
@@ -2958,6 +2963,7 @@ $1',
 'file-nohires' => 'Za tutu dataju žane wyše rozeznaće njeje.',
 '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-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.',
@@ -2987,6 +2993,8 @@ $1',
 'minutes' => '{{PLURAL:$1|$1 mjeńšinu|$1 mjeńšinomaj|$1 mjeńšinami|$1 mjeńšinami}}',
 'hours' => '{{PLURAL:$1|$1 hodźinu|$1 hodźinomaj|$1 hodźinami|$1 hodźinami}}',
 'days' => '{{PLURAL:$1|$1 dnjom|$1 dnjomaj|$1 dnjemi|$1 dnjemi}}',
+'months' => '{{PLURAL:$1|$1 měsacom|$1 měsacomaj|$1 měsacami}}',
+'years' => '{{PLURAL:$1|$1 lětom|$1 lětomaj|$1 lětami}}',
 'ago' => 'před $1',
 'just-now' => 'runje',
 
@@ -3635,7 +3643,7 @@ Wobrazy so połnym rozeznaću pokazuja, druhe datajowe typy so ze zwjazanym prog
 'specialpages-group-highuse' => 'Často wužiwane strony',
 'specialpages-group-pages' => 'Lisćiny stronow',
 'specialpages-group-pagetools' => 'Nastroje stronow',
-'specialpages-group-wiki' => 'Wikijowe daty a nastroje',
+'specialpages-group-wiki' => 'Daty a nastroje',
 'specialpages-group-redirects' => 'Daleposrědkowace specialne strony',
 'specialpages-group-spam' => 'Spamowe nastroje',
 
@@ -3732,8 +3740,12 @@ Wobrazy so połnym rozeznaću pokazuja, druhe datajowe typy so ze zwjazanym prog
 'logentry-newusers-newusers' => 'Wužiwarske konto $1 je so załožiło',
 'logentry-newusers-create' => 'Wužiwarske konto $1 je so załožiło',
 'logentry-newusers-create2' => '$1 załoži wužiwarske konto $3',
+'logentry-newusers-byemail' => 'Wužiwarske konto $3 je so wot $1 załožiło a hesło je so přez e-mejl pósłało.',
 'logentry-newusers-autocreate' => 'Konto $1 je so awtomatisce załožiło',
-'newuserlog-byemail' => 'Hesło z e-mejlku pósłane',
+'logentry-rights-rights' => '$1 změni skupinske čłonstwo za $3 z $4 do $5',
+'logentry-rights-rights-legacy' => '$1 změni skupinske čłonstwo za $3',
+'logentry-rights-autopromote' => '$1 powyši so awtomatisce wot $4 do $5',
+'rightsnone' => '(ničo)',
 
 # Feedback
 'feedback-bugornote' => 'Jeli sy zwólniwy, techniski problem nadrobnje wopisać, [$1 zdźěl prošu zmylk].
@@ -3787,6 +3799,7 @@ Hewak móžeš slědowacy jednory formular wužiwać. Twój komentar přida so s
 'api-error-ok-but-empty' => 'Nutřkowny zmylk: žana wotmołwa wot serwera.',
 'api-error-overwrite' => 'Přepisowanje eksistowaceje dataje njeje dowolene.',
 'api-error-stashfailed' => 'Nutřkowny zmylk: Serwer njemóžeše nachwilnu dataju składować.',
+'api-error-publishfailed' => 'Nutřkowny zmylk: Serwer njemóžeše nachwilnu dataju wozjewić.',
 'api-error-timeout' => 'Serwer njeje znutřka wočakowaneho časa wotmołwił.',
 'api-error-unclassified' => 'Njeznaty zmylk je wustupił.',
 'api-error-unknown-code' => 'Njeznaty zmylk: "$1"',
@@ -3807,6 +3820,4 @@ Hewak móžeš slědowacy jednory formular wužiwać. Twój komentar přida so s
 'duration-centuries' => '$1 {{PLURAL:$1|lětstotk|lětstotkaj|lětstotki|lětstotkow}}',
 'duration-millennia' => '$1 {{PLURAL:$1|lěttysac|lěttysacaj|lěttysacy|lěttysacow}}',
 
-# Unknown messages
-'svg-long-error' => 'Njepłaćiwa SVG-dataja: $1',
 );
index 011dcfa..33548dd 100644 (file)
@@ -771,7 +771,6 @@ Dènye ekriti nan jounal la parèt pi bas kòm referans:",
 'template-protected' => '(pwoteje)',
 'template-semiprotected' => '(semi-pwoteje)',
 'hiddencategories' => 'Paj sa ap fè pati {{PLURAL:$1|Kategori kache|Kategori yo ki kache}} :',
-'nocreatetitle' => 'Kreyasyon paj yo limite',
 'nocreatetext' => '{{SITENAME}} anpeche kreyasyon nouvo paj sou li. Ou mèt ritounen nan navigatè ou epi modifye yon paj ki deja egziste oubyen [[Special:UserLogin|konekte ou oubyen kreye yon kont]].',
 'nocreate-loggedin' => 'Ou pa gen pèmisyon pou ou kapab kreye nouvo paj nan wiki sa.',
 'sectioneditnotsupported-title' => 'Modifikasyon seksyon pa kapab fèt',
@@ -933,6 +932,10 @@ Si ou mete li, n ap itilize li pou nou ka nonmen ou pou kontribisyon ou yo.',
 
 'grouppage-sysop' => '{{ns:project}}:Administratè',
 
+# Special:Log/newusers
+'newuserlogpage' => 'Jounal pou kreyasyon kont itilizatè yo',
+'newuserlogpagetext' => 'Men jounal, istorik kreyasyon kont itilizatè yo.',
+
 # User rights log
 'rightslog' => 'Jounal modifikasyon estati itilizatè yo',
 
@@ -1094,10 +1097,6 @@ Gade tou [[Special:WantedCategories|kategori moun mande]].',
 # Special:LinkSearch
 'linksearch' => 'Lyen andeyò',
 
-# Special:Log/newusers
-'newuserlogpage' => 'Jounal pou kreyasyon kont itilizatè yo',
-'newuserlogpagetext' => 'Men jounal, istorik kreyasyon kont itilizatè yo.',
-
 # Special:ListGroupRights
 'listgrouprights-members' => '(lis manm yo)',
 
@@ -1385,6 +1384,5 @@ Nenpòt lòt lyen nan menm liy nan konsidere kòm yon eksèpsyon, i.e. paj kote
 
 # New logging system
 'revdelete-restricted' => 'aplike restriksyon sa yo pou administratè yo',
-'newuserlog-byemail' => 'mopas an voye pa imèl',
 
 );
index 0612036..1ad51bf 100644 (file)
@@ -16,6 +16,7 @@
  * @author BáthoryPéter
  * @author CERminator
  * @author Cerasus
+ * @author Csigabi
  * @author Dani
  * @author Dj
  * @author Dorgan
@@ -30,6 +31,7 @@
  * @author Samat
  * @author Sucy
  * @author TK-999
+ * @author Tacsipacsi
  * @author Terik
  * @author Tgr
  * @author Xbspiro
@@ -318,7 +320,7 @@ $messages = array(
 'tog-hidepatrolled' => 'Az ellenőrzött szerkesztések elrejtése a friss változtatások lapon',
 'tog-newpageshidepatrolled' => 'Ellenőrzött lapok elrejtése az új lapok listájáról',
 'tog-extendwatchlist' => 'A figyelőlistán az összes változtatás látszódjon, ne csak az utolsó',
-'tog-usenewrc' => 'Fejlettebb friss változások használata (JavaScript-alapú)',
+'tog-usenewrc' => 'Szerkesztések csoportosítása oldal szerint a friss változtatásokban és a figyelőlistán (JavaScript-alapú)',
 'tog-numberheadings' => 'Fejezetcímek automatikus számozása',
 'tog-showtoolbar' => 'Szerkesztőeszközsor megjelenítése (JavaScript-alapú)',
 'tog-editondblclick' => 'A lapok szerkesztése dupla kattintásra (JavaScript-alapú)',
@@ -685,7 +687,7 @@ Lekérdezés: $2',
 'viewsource-title' => '$1 forrásának megtekintése',
 'actionthrottled' => 'Művelet megszakítva',
 'actionthrottledtext' => 'A spamek elleni védekezés miatt nem végezheted el a műveletet túl sokszor egy adott időn belül, és te átlépted a megengedett határt. Próbálkozz újra néhány perc múlva.',
-'protectedpagetext' => 'Ez egy védett lap, nem szerkeszthető.',
+'protectedpagetext' => 'Ez egy védett lap, így nem végezhető rajta szerkesztés és más tevékenység',
 'viewsourcetext' => 'Megtekintheted és másolhatod a lap forrását:',
 'viewyourtext' => "Megtekintheted és kimásolhatod a '''saját szerkesztéseidet''' az alábbi lapra:",
 'protectedinterface' => 'Ez a lap a szoftver felületéhez szolgáltat szöveget, és a visszaélések elkerülése miatt le van zárva.',
@@ -718,6 +720,8 @@ A lezárást végrehajtó rendszergazda az alábbi indoklást adta meg: "$3".',
 Folytathatod névtelenül  a(z) {{SITENAME}} használatát, vagy <span class='plainlinks'>[$1 ismét bejelentkezhetsz]</span> ugyanezzel, vagy egy másik névvel.
 Lehetséges, hogy néhány oldalon továbbra is azt látod, be vagy jelentkezve, mindaddig, amíg nem üríted a böngésződ gyorsítótárát.",
 'welcomeuser' => 'Üdvözlünk, $1!',
+'welcomecreation-msg' => 'A felhasználói fiókod elkészült.
+Ne felejtsd el módosítani a [[Special:Preferences|{{SITENAME}} beállításaidat]].',
 'yourname' => 'Szerkesztőneved:',
 'yourpassword' => 'Jelszavad:',
 'yourpasswordagain' => 'Jelszavad ismét:',
@@ -844,7 +848,7 @@ Lehet, hogy már sikeresen megváltoztattad a jelszavad, vagy pedig időközben
 'passwordreset-capture-help' => 'Ha kipipálod a dobozt, amellett, hogy kiküldődik az üzenet a felhasználónak, megjelenik számodra (az ideiglenes jelszavakkal együtt)',
 'passwordreset-email' => 'E-mail cím:',
 'passwordreset-emailtitle' => 'A(z) {{SITENAME}}-fiók adatai',
-'passwordreset-emailtext-ip' => 'Valaki (vélhetően Te, a $1 IP-címrő)l emlékeztetők kért a {{SITENAME}} ($4) oldalon felvett fiókokról. A következő felhasználói {{PLURAL:$3|fiók van|fiókok vannak}} hozzárendelve ehhez az e-mail címhez:
+'passwordreset-emailtext-ip' => 'Valaki (vélhetően Te, a $1 IP-címről) emlékeztetőt kért a {{SITENAME}} ($4) oldalon felvett fiókokról. A következő felhasználói {{PLURAL:$3|fiók van|fiókok vannak}} hozzárendelve ehhez az e-mail címhez:
 
 $2
 
@@ -854,7 +858,7 @@ $2
 $2
 
 {{PLURAL:$3|Ez az ideiglenes jelszó|Ezek az ideiglenes jelszavak}} $5 nap múlva {{PLURAL:$3|jár|járnak}} le. Jelentkezz be, és cseréld le a jelszavadat. Ha valaki más kérte az emlékeztetőt, vagy eszedbe jutott a régi jelszó, és nem akarod lecserélni a jelszavadat, hagyd figyelmen kívül ezt az üzenetet, és használd a régi jelszavadat.',
-'passwordreset-emailelement' => 'Felhaználónév: $1
+'passwordreset-emailelement' => 'Felhasználónév: $1
 Ideiglenes jelszó: $2',
 'passwordreset-emailsent' => 'Emlékeztető e-mail elküldve.',
 'passwordreset-emailsent-capture' => 'Az alább látható emlékeztető e-mail elküldve.',
@@ -868,6 +872,7 @@ Ideiglenes jelszó: $2',
 'changeemail-oldemail' => 'Jelenlegi e-mail cím:',
 'changeemail-newemail' => 'Új e-mail cím:',
 'changeemail-none' => '(nincs)',
+'changeemail-password' => 'A {{SITENAME}} jelszavad:',
 'changeemail-submit' => 'E-mail cím megváltoztatása',
 'changeemail-cancel' => 'Mégse',
 
@@ -1047,7 +1052,6 @@ A legutolsó ide vonatkozó naplóbejegyzés alább látható:",
 'template-semiprotected' => '(félig védett)',
 'hiddencategories' => 'Ez a lap {{PLURAL:$1|egy|$1}} rejtett kategóriába tartozik:',
 'edittools' => '<!-- Ez a szöveg a szerkesztés és a feltöltés űrlap alatt lesz látható. -->',
-'nocreatetitle' => 'Az oldallétrehozás korlátozva van',
 'nocreatetext' => 'A(z) {{SITENAME}} wikin korlátozták az új oldalak létrehozásának lehetőségét.
 Visszamehetsz és szerkeszthetsz egy létező lapot, valamint [[Special:UserLogin|bejelentkezhetsz vagy készíthetsz egy felhasználói fiókot]].',
 'nocreate-loggedin' => 'Nincs jogosultságod új lapokat létrehozni.',
@@ -1071,6 +1075,9 @@ Nem lett magyarázat csatolva.',
 'edit-already-exists' => 'Az új lap nem készíthető el.
 Már létezik.',
 'defaultmessagetext' => 'Alapértelmezett szöveg',
+'content-failed-to-parse' => 'Hiba történt a $2 tartalom $1 modellre történő konvertálása során: $3',
+'invalid-content-data' => 'Érvénytelen tartalom adat',
+'content-not-allowed-here' => '"$1" tartalom nem engedélyezett a [[$2]] oldalon',
 
 # Content models
 'content-model-wikitext' => 'wikiszöveg',
@@ -1091,7 +1098,13 @@ Néhány sablon nem fog megjelenni.',
 'parser-template-loop-warning' => 'Végtelen ciklus a következő sablonban: [[$1]]',
 'parser-template-recursion-depth-warning' => 'A sablon rekurzív beillesztésének mélysége átlépte a határérékét ($1)',
 'language-converter-depth-warning' => 'A nyelvátalakító rekurzióinak száma túllépve ($1)',
+'node-count-exceeded-category' => 'Lapok, ahogy a csomópont szám túl nagy',
+'node-count-exceeded-warning' => 'Az oldal meghaladta a csomópont számot',
 'expansion-depth-exceeded-category' => 'Lapok, melyeken a sablonok kibontása meghaladja a megengedett szintet',
+'expansion-depth-exceeded-warning' => 'A lap meghaladta az engedélyezett kiterjesztési mélységet',
+'parser-unstrip-loop-warning' => 'Unstrip hurok észlelve',
+'parser-unstrip-recursion-limit' => 'Túl mély unstrip rekurzió: $1',
+'converter-manual-rule-error' => 'Hiba van a kézi nyelvi konverziós szabályban',
 
 # "Undo" feature
 'undo-success' => 'A szerkesztés visszavonható. Kérlek ellenőrizd alább a változásokat, hogy valóban ezt szeretnéd-e tenni, majd kattints a lap mentése gombra a visszavonás véglegesítéséhez.',
@@ -1275,6 +1288,9 @@ Győződj meg róla, hogy a laptörténet folytonossága megmarad.',
 'editundo' => 'visszavonás',
 'diff-multi' => '({{PLURAL:$2|egy|$2}} szerkesztő {{PLURAL:$1|egy|$1}} közbeeső változata nincs mutatva)',
 'diff-multi-manyusers' => '({{PLURAL:$1|Egy közbeeső változat|$1 közbeeső változat}} nincs mutatva, amit $2 szerkesztő módosított)',
+'difference-missing-revision' => 'A(z) "{{PAGENAME}}" nevű oldal #$1 $2 változata nem létezik.
+
+Ezt általában egy elavult, törölt oldalra mutató laptörténeti hivatkozás használata okozza. Részletek a [{{fullurl:{{#Special:Log}}/delete|page={{FULLPAGENAMEE}}}} törlési naplóban] találhatóak.',
 
 # Search results
 'searchresults' => 'A keresés eredménye',
@@ -1574,12 +1590,13 @@ A műveletet nem lehet visszavonni.',
 'right-sendemail' => 'e-mail küldése más felhasználóknak',
 'right-passwordreset' => 'Jelszó visszaállítási emailek megtekintése',
 
+# Special:Log/newusers
+'newuserlogpage' => 'Új szerkesztők naplója',
+'newuserlogpagetext' => 'Ez a napló az újonnan regisztrált szerkesztők listáját tartalmazza.',
+
 # User rights log
 'rightslog' => 'Szerkesztői jogosultságok naplója',
 'rightslogtext' => 'Ez a rendszernapló a felhasználó jogosultságok változásait mutatja.',
-'rightslogentry' => 'megváltoztatta $1 szerkesztő felhasználó jogait (régi: $2; új: $3)',
-'rightslogentry-autopromote' => 'automatikusan $2 helyett $3 jogokat kapott',
-'rightsnone' => '(semmi)',
 
 # Associated actions - in the sentence "You do not have permission to X"
 'action-read' => 'lap olvasása',
@@ -1808,6 +1825,7 @@ Kérjük, hogy lépj kapcsolatba egy  [[Special:ListUsers/sysop|adminisztrátorr
 'upload-too-many-redirects' => 'Az URL túl sokszor volt átirányítva',
 'upload-unknown-size' => 'Ismeretlen méretű',
 'upload-http-error' => 'HTTP-hiba történt: $1',
+'upload-copy-upload-invalid-domain' => 'Másolás nem engedélyezett ebből a tartományból.',
 
 # File backend
 'backend-fail-stream' => 'Nem sikerült sugározni ezt a fájlt: $1.',
@@ -1817,6 +1835,7 @@ Kérjük, hogy lépj kapcsolatba egy  [[Special:ListUsers/sysop|adminisztrátorr
 'backend-fail-notsame' => 'Egy nem azonos fájl már létezik $1 néven.',
 'backend-fail-invalidpath' => '$1 nem érvényes tárolási útvonal.',
 'backend-fail-delete' => 'Nem sikerült törölni ezt a fájlt: $1 .',
+'backend-fail-describe' => 'Nem lehet megváltoztatna a "$1" fájl metaadatát.',
 'backend-fail-alreadyexists' => 'Ez a fájl már létezik: $1 .',
 'backend-fail-store' => 'Nem sikerült a(z) $1 fájl tárolása $2 helyen.',
 'backend-fail-copy' => 'Nem sikerült a(z) $1 fájl másolása $2 helyre.',
@@ -1833,6 +1852,10 @@ Kérjük, hogy lépj kapcsolatba egy  [[Special:ListUsers/sysop|adminisztrátorr
 'backend-fail-internal' => 'Ismeretlen hiba keletkezett a(z) „$1” tárolórendszerben.',
 'backend-fail-contenttype' => 'Nem lehetett a fájl típusát meghatározni a „$1” helyen történő tároláshoz.',
 'backend-fail-batchsize' => 'A tárolórendszer {{PLURAL:$1|1|$1}} fájlműveletet tartalmazó parancsfájlt kapott; legfeljebb {{PLURAL:$2|1|$2}} műveletből állót kaphat.',
+'backend-fail-usable' => 'Nem lehet olvasni vagy írni a "$1" fájlt, jogosultság hiánya, vagy hiányzó könyvtár/konténer miatt.',
+
+# File journal errors
+'filejournal-fail-dbconnect' => 'Nem sikerült csatlakozni a napló adatbázis "$1 " háttér tárolójához.',
 
 # Lock manager
 'lockmanager-notlocked' => 'Nem lehet a zárolást feloldani: „$1”; nincs zárolva.',
@@ -1843,6 +1866,7 @@ Kérjük, hogy lépj kapcsolatba egy  [[Special:ListUsers/sysop|adminisztrátorr
 'lockmanager-fail-releaselock' => 'Nem sikerült a(z) „$1” fájl zárolásának feloldása.',
 'lockmanager-fail-db-bucket' => 'Nem sikerült kapcsolatot létesíteni elég adatbázis zároláshoz a $1 vödörben.',
 'lockmanager-fail-db-release' => 'Nem lehet a $1 adatbázis zárolását feloldani.',
+'lockmanager-fail-svr-acquire' => 'Nem sikerült zárolást igényelni a $1 szerveren.',
 'lockmanager-fail-svr-release' => 'Nem lehet a(z) $1 szerver zárolását feloldani.',
 
 # ZipDirectoryReader
@@ -2191,8 +2215,9 @@ Lásd még a [[Special:WantedCategories|keresett kategóriák]] listáját.',
 'linksearch-pat' => 'Keresett minta:',
 'linksearch-ns' => 'Névtér:',
 'linksearch-ok' => 'keresés',
-'linksearch-text' => 'Helyettesítő karaktereket is lehet használni, például "*.wikipedia.org". Legalább egy felső szintű tartománynak lennie kell, például "*.org"<br />
-Támogatott protokollok: <code>$1</code> (http:// az alapértelmezett, ha nincs protokoll megadva).',
+'linksearch-text' => 'Helyettesítő karaktereket is lehet használni, például "*.wikipedia.org".
+Legalább egy felső szintű tartománynak lennie kell, például "*.org"<br />
+Támogatott {{PLURAL:$2|protokoll|protokollok}}: <code>$1</code> (http:// az alapértelmezett, ha nincs protokoll megadva).',
 'linksearch-line' => '$1 hivatkozva innen: $2',
 'linksearch-error' => 'Helyettesítő karakterek csak a cím elején szerepelhetnek.',
 
@@ -2211,10 +2236,6 @@ Támogatott protokollok: <code>$1</code> (http:// az alapértelmezett, ha nincs
 'activeusers-hidesysops' => 'Adminisztrátorok elrejtése',
 'activeusers-noresult' => 'Nem található ilyen szerkesztő.',
 
-# Special:Log/newusers
-'newuserlogpage' => 'Új szerkesztők naplója',
-'newuserlogpagetext' => 'Ez a napló az újonnan regisztrált szerkesztők listáját tartalmazza.',
-
 # Special:ListGroupRights
 'listgrouprights' => 'Szerkesztői csoportok jogai',
 'listgrouprights-summary' => 'Lenn láthatóak a wikiben létező szerkesztői csoportok, valamint az azokhoz tartozó jogok.
@@ -2241,7 +2262,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' => 'A szerkesztő e-mail-címére ezen űrlap kitöltésével üzenetet tudsz küldeni.
+'emailpagetext' => '{{GENDER:$1|user}} 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”',
@@ -2310,15 +2331,21 @@ Ezután minden, a lapon vagy annak vitalapján történő változást ott fogsz
 'enotif_mailer' => '{{SITENAME}} Értesítéspostázó',
 'enotif_reset' => 'Az összes lap megjelölése felkeresettként',
 'enotif_impersonal_salutation' => '{{SITENAME}} felhasználó',
+'enotif_subject_deleted' => '$2 törölte a $1 {{SITENAME}} oldalt.',
+'enotif_subject_moved' => '$2 átmozgatta a $1 {{SITENAME}} oldalt.',
+'enotif_subject_restored' => '$2 visszaállította a $1 {{SITENAME}} oldalt.',
+'enotif_subject_changed' => '$2 megváltoztatta a $1 {{SITENAME}} oldalt.',
+'enotif_body_intro_deleted' => '$2 törölte a $1 {{SITENAME}} oldalt $PAGEEDITDATE-kor, lásd $3.',
+'enotif_body_intro_created' => '$2 létrehozta a $1 {{SITENAME}} oldalt $PAGEEDITDATE-kor, lásd az aktuális verziót itt: $3.',
+'enotif_body_intro_moved' => '$2 átmozgatta a $1 {{SITENAME}} oldalt $PAGEEDITDATE-kor, lásd az aktuális verziót itt: $3.',
+'enotif_body_intro_restored' => '$2 visszaállította a $1 {{SITENAME}} oldalt $PAGEEDITDATE-kor, lásd az aktuális verziót itt: $3.',
+'enotif_body_intro_changed' => '$2 megváltoztatta a $1 {{SITENAME}} oldalt $PAGEEDITDATE-kor, lásd az aktuális verziót itt: $3.',
 'enotif_lastvisited' => 'Lásd a $1 lapot az utolsó látogatásod óta történt változtatásokért.',
 'enotif_lastdiff' => 'Lásd a $1 lapot ezen változtatás megtekintéséhez.',
 'enotif_anon_editor' => '$1 névtelen felhasználó',
 'enotif_body' => 'Kedves $WATCHINGUSERNAME!
 
-
-$PAGEEDITOR $PAGEEDITDATE-kor $CHANGEDORCREATED a(z) $PAGETITLE című lapot a(z) {{SITENAME}} wikin; a jelenlegi verziót a $PAGETITLE_URL webcímen találod.
-
-$NEWPAGE
+$PAGEINTRO $NEWPAGE
 
 A szerkesztési összefoglaló a következő volt: $PAGESUMMARY $PAGEMINOREDIT
 
@@ -2342,6 +2369,8 @@ $UNWATCHURL címet
 
 Visszajelzés és további segítség:
 {{canonicalurl:{{MediaWiki:Helppage}}}}',
+'created' => 'létrehozta',
+'changed' => 'megváltoztatta',
 
 # Delete
 'deletepage' => 'Lap törlése',
@@ -2428,8 +2457,8 @@ be van kapcsolva a kaszkád védelem.
 Megváltoztathatod ezen lap védelmi szintjét, de az nem lesz hatással a kaszkád védelemre.',
 'protect-default' => 'Minden szerkesztő számára engedélyezett',
 'protect-fallback' => '"$1" engedély szükséges hozzá',
-'protect-level-autoconfirmed' => 'Nem és frissen regisztrált szerkesztők blokkolása',
-'protect-level-sysop' => 'Csak adminisztrátorok',
+'protect-level-autoconfirmed' => 'Csak automatikusan ellenőrzött szerkesztőknek engedélyezett (nem vagy frissen regisztráltaknak nem)',
+'protect-level-sysop' => 'Csak adminisztrátoroknak engedélyezett',
 'protect-summary-cascade' => 'kaszkád védelem',
 'protect-expiring' => 'lejár: $1 (UTC)',
 'protect-expiring-local' => 'lejárat: $1',
@@ -2797,6 +2826,7 @@ Az átnevezés céljaként megadott „[[:$1]]” szócikk már létezik.  Ha az
 'immobile-target-namespace-iw' => 'Wikiközi hivatkozás nem lehet a lap új neve.',
 'immobile-source-page' => 'Ez a lap nem nevezhető át.',
 'immobile-target-page' => 'A lap nem helyezhető át a megadott címre.',
+'bad-target-model' => 'A kívánt célhely eltérő tartalom modellt használ. Nem lehet $1 modellről $2 modellre konvertálni.',
 'imagenocrossnamespace' => 'A fájlok nem helyezhetőek át más névtérbe',
 'nonfile-cannot-move-to-file' => 'Nem fájlok nem nevezhetők át fájlnévtérbe',
 'imagetypemismatch' => 'Az új kiterjesztés nem egyezik meg a fájl típusával',
@@ -3065,6 +3095,7 @@ Ez valószínűleg egy olyan link miatt van, ami egy feketelistán lévő oldalr
 
 # Info page
 'pageinfo-title' => 'Információk a(z) „$1” lapról',
+'pageinfo-not-current' => 'Sajnáljuk, de lehetetlen információt nyújtani a régi verziókhoz.',
 'pageinfo-header-basic' => 'Alapinformációk',
 'pageinfo-header-edits' => 'Szerkesztések története',
 'pageinfo-header-restrictions' => 'Lapvédelem',
@@ -3099,6 +3130,9 @@ Ez valószínűleg egy olyan link miatt van, ami egy feketelistán lévő oldalr
 'pageinfo-contentpage' => 'Tartalmi lapnak számít',
 'pageinfo-contentpage-yes' => 'Igen',
 'pageinfo-protect-cascading-yes' => 'Igen',
+'pageinfo-category-pages' => 'Lapok száma',
+'pageinfo-category-subcats' => 'Alkategóriák száma',
+'pageinfo-category-files' => 'Fájlok száma',
 
 # Skin names
 'skinname-standard' => 'Klasszikus',
@@ -3155,6 +3189,7 @@ A futtatása során kárt tehet a számítógépedben.",
 'file-nohires' => 'Nem érhető el nagyobb felbontású változat.',
 'svg-long-desc' => 'SVG fájl, névlegesen $1 × $2 képpont, fájlméret: $3',
 'svg-long-desc-animated' => 'Animált SVG fájl, névlegesen $1 × $2 képpont, fájlméret: $3',
+'svg-long-error' => 'Érvénytelen SVG-fájl: $1',
 'show-big-image' => 'A kép nagyfelbontású változata',
 'show-big-image-preview' => 'Az előnézet mérete: $1',
 'show-big-image-other' => 'További {{PLURAL:$2|felbontás|felbontások}}: $1.',
@@ -3184,6 +3219,8 @@ A futtatása során kárt tehet a számítógépedben.",
 'minutes' => '{{PLURAL:$1|egy|$1}} perccel',
 'hours' => '{{PLURAL:$1|egy|$1}} órával',
 'days' => '{{PLURAL:$1|egy|$1}} nappal',
+'months' => '{{PLURAL:$1|$1 hónap|$1 hónap}}',
+'years' => '{{PLURAL:$1|$1 év|$1 év}}',
 'ago' => '$1 ezelőtt',
 'just-now' => 'épp most',
 
@@ -3792,6 +3829,7 @@ minden egyes sor egy figyelt lap címe. Ha kész vagy, kattints a lista alatt ta
 'version-license' => 'Licenc',
 'version-poweredby-credits' => "Ez a wiki '''[//www.mediawiki.org/ MediaWiki]''' szoftverrel működik, copyright © 2001-$1 $2.",
 'version-poweredby-others' => 'mások',
+'version-credits-summary' => 'Szeretnénk elismerni a következő személyek hozzájárulását a [[Special:Version|MediaWiki]] szoftverhez.',
 'version-license-info' => 'A MediaWiki szabad szoftver, terjeszthető és / vagy módosítható a GNU General Public License alatt, amit a Free Software Foundation közzétett; vagy a 2-es verziójú licenc, vagy (az Ön választása alapján) bármely későbbi verzió szerint. 
 
 A MediaWikit abban a reményben terjesztjük, hogy hasznos lesz, de GARANCIA NÉLKÜL, anélkül, hogy PIACKÉPES vagy HASZNÁLHATÓ LENNE EGY ADOTT CÉLRA. Lásd a GNU General Public License-t a további részletekért. 
@@ -3934,7 +3972,10 @@ A képek teljes méretben jelennek meg, más fájltípusok közvetlenül a hozz
 'logentry-newusers-create' => '$1 felhasználói fiók létrehozva',
 'logentry-newusers-create2' => '$1 létrehozta $3 felhasználói fiókját',
 'logentry-newusers-autocreate' => '$1 fiók automatikusan létrehozva',
-'newuserlog-byemail' => 'a jelszót kiküldtük a megadott e-mail címre',
+'logentry-rights-rights' => '$1 megváltoztatta $3 csoport tagságát erről: $4 erre: $5',
+'logentry-rights-rights-legacy' => '$1 megváltoztatta $3 csoport tagságát',
+'logentry-rights-autopromote' => '$1 automatikusan előléptetve erről: $4 erre: $5',
+'rightsnone' => '(semmi)',
 
 # Feedback
 'feedback-bugornote' => 'Ha kész technikai problémát részletesen leírni, akkor kérjük [$1 jelents egy hibát]. Egyébként használd az alábbi űrlapot. A hozzászólásod a „[$3 $2]” laphoz kerül felvételre, a szerkesztő neveddel és böngésződ típusával együtt.',
index 0f5a65f..24227c1 100644 (file)
@@ -202,7 +202,7 @@ $specialPageAliases = array(
        'Allmessages'               => array( 'Բոլորուղերձները' ),
        'Allpages'                  => array( 'Բոլորէջերը' ),
        'Ancientpages'              => array( 'Ամենահինէջերը' ),
-       'Block'                     => array( 'Արգելափակելip' ),
+       'Block'                     => array( 'Արգելափակել այփին' ),
        'Blockme'                   => array( 'Արգելափակել' ),
        'Booksources'               => array( 'Գրքայինաղբյուրները' ),
        'BrokenRedirects'           => array( 'Կոտրվածվերահղումները' ),
@@ -216,7 +216,7 @@ $specialPageAliases = array(
        'Export'                    => array( 'Արտահանելէջերը' ),
        'FileDuplicateSearch'       => array( 'Կրկնօրինակֆայլերիորոնում' ),
        'Import'                    => array( 'Ներմուծել' ),
-       'BlockList'                 => array( 'ԱրգելափակվածIPները' ),
+       'BlockList'                 => array( 'Արգելափակված այփի ները' ),
        'Listadmins'                => array( 'Ադմիններիցանկը' ),
        'Listfiles'                 => array( 'Պատկերներիցանկը' ),
        'Listredirects'             => array( 'Ցույցտալվերահղումները' ),
@@ -955,8 +955,39 @@ $2',
 'template-protected' => '(պաշտպանված)',
 'template-semiprotected' => '(կիսապաշտպանված)',
 'hiddencategories' => 'Այս էջը պատկանում է հետևյալ {{PLURAL:$1|1 թաքնված կատեգորիային|$1 թաքնված կատեգորիաներին}}.',
-'edittools' => '<!-- Այստեղ տեղադրված տեքստը կցուցադրվի խմբագրման և բեռնման ձևերի տակ։ -->',
-'nocreatetitle' => 'Էջերի ստեղծումը սահմանափակված է',
+'edittools' => '<!-- Այստեղ տեղադրված տեքստը կցուցադրվի խմբագրման և բեռնման ձևերի տակ։ -->
+<div id="Հատուկ նիշ:" class="toccolours specialchars" style="margin-top:.5em; padding: .3em .5em; font-size: 100%; color:#aaa; text-align:left;" title="{{int:bw-edittools-tooltip}}">
+<p class="specialbasic" id="Standard">
+\'\'\'{{int:bw-edittools-lead-in}}\'\'\' 
+<charinsert>Á á É é Í í Ó ó Ú ú Ý ý</charinsert> –
+<charinsert>À à È è Ì ì Ò ò Ù ù </charinsert> –
+<charinsert> â Ê ê Î î Ô ô Û û </charinsert> –
+<charinsert>Ä ä Ë ë Ï ï Ö ö Ü ü Ÿ ÿ</charinsert> –
+<charinsert>Æ æ Ø ø Œ œ ẞ ß </charinsert> –
+<charinsert>Å å Ů ů </charinsert> –
+<charinsert>àã Ẽ ẽ ɛ̃ Ĩ ĩ Ñ ñ Õ õ ɔ̃ Ũ ũ </charinsert> –
+<charinsert>Рð Þ þ </charinsert> –
+<charinsert>Ç ç Ģ ģ Ķ ķ Ļ ļ Ņ ņ Ŗ ŗ Ş ş Ţ ţ </charinsert> –
+<charinsert>Ć ć Ĺ ĺ Ń ń Ŕ ŕ Ś ś Ý ý Ź ź </charinsert> –
+<charinsert>Č č Ď ď Ľ ľ Ň ň Ř ř Š š Ť ť Ž ž </charinsert> –
+<charinsert>Ǎ ǎ Ě ě Ǐ ǐ Ǒ ǒ Ǔ ǔ </charinsert> –
+<charinsert>Ā ā Ē ē Ī ī Ō ō Ū ū </charinsert> –
+<charinsert>ǖ ǘ ǚ ǜ </charinsert> –
+<charinsert>Ĉ ĉ Ĝ ĝ Ĥ ĥ Ĵ ĵ Ŝ ŝ Ŵ ŵ Ŷ ŷ </charinsert> –
+<charinsert>Ă ă Ğ ğ Ŭ ŭ </charinsert> –
+<charinsert>Ċ ċ Ė ė Ġ ġ Għ għ İ ı Ż ż </charinsert> –
+<charinsert>Ą ą Ę ę Į į Ų ų </charinsert> –
+<charinsert>Ő ő Ű ű </charinsert> –
+<charinsert>Đ đ Ħ ħ Ł ł Ŀ ŀ </charinsert> –
+<charinsert>Ɖ ɖ Ɛ ɛ Ƒ ƒ Ɣ ɣ Ŋ ŋ Ɔ ɔ Ʋ ʋ </charinsert> -
+<charinsert>Ə ə </charinsert> –
+<charinsert>– — ’</charinsert> –
+<charinsert>~ | ° ¹ ² ³ ¼ ½ ¾ € $ ¥ £ † × ← → ↔ ↑ ± ≠ © ® ™ ‰ «+» ‹+› „+“ „+” ‚+‘ ¡ ¿ …</charinsert> –
+<charinsert>&amp;nbsp; &nbsp; [[Category:+]] #REDIRECT[[+]] {{msg-mw|+|notext=1}}  ~~~~</charinsert>
+<charinsert>ڈ ڑ ٹ </charinsert>
+<charinsert>ټ څ ځ ډ ړ ږ ښ ګ ڼ ؤ ي ې ۍ ئ </charinsert>
+<charinsert>{{{+}}} {{+}} {{subst:+}} <noinclude>+</noinclude></charinsert>
+</p></div>',
 'nocreatetext' => '{{SITENAME}} կայքում էջերի ստեղծման հնարավորությունը սահմանափակված է։
 Դուք կարող եք վերադառնալ և խմբագրել գոյություն ունեցող էջ կամ էլ [[Special:UserLogin|գրանցվել կամ մտնել համակարգ]]։',
 'nocreate-loggedin' => 'Դուք չունեք նոր էջեր ստեղծելու թույլտվություն։',
@@ -1317,11 +1348,13 @@ $3 մասնակիցը տվել է հետևյալ պատճառը. ''$2''",
 'right-upload_by_url' => 'Բեռնել նիշքեր ինտերնետային հասցեից',
 'right-delete' => 'Էջերի ջնջում',
 
+# Special:Log/newusers
+'newuserlogpage' => 'Մասնակիցների գրանցման տեղեկամատյան',
+'newuserlogpagetext' => 'Սա նոր մասնակիցների գրանցման տեղեկամատյանն է.',
+
 # User rights log
 'rightslog' => 'Մասնակցի իրավունքների տեղեկամատյան',
 'rightslogtext' => 'Սա մասնակիցների իրավունքների փոփոխությունների տեղեկամատյանն է։',
-'rightslogentry' => '$1 մասնակցի անդամակցությունը փոխվել է $2-ից $3',
-'rightsnone' => '(ոչ մի)',
 
 # Associated actions - in the sentence "You do not have permission to X"
 'action-edit' => 'խմբագրել այս էջը',
@@ -1569,7 +1602,7 @@ $3 մասնակիցը տվել է հետևյալ պատճառը. ''$2''",
 'statistics-views-peredit' => 'Դիտումներ ամեն մի խմբագրման համար',
 'statistics-users' => 'Գրանցված [[Special:ListUsers|մասնակիցներ]]',
 'statistics-users-active' => 'Ակտիվ մասնակիցներ',
-'statistics-users-active-desc' => 'Õ\84Õ¡Õ½Õ¶Õ¡Õ¯Õ«Ö\81Õ¶Õ¥Ö\80, Õ¸Ö\80Õ¸Õ¶Ö\84 Õ¸Ö\80Ö\87Õ§ Õ£Õ¸Ö\80Õ®Õ¸Õ²Õ¸Ö\82Õ©ÕµÕ¸Ö\82Õ¶ Õ¥Õ¶ Õ¯Õ¡Õ¿Õ¡Ö\80Õ¥Õ¬ Õ¾Õ¥Ö\80Õ»Õ«Õ¶ {{PLURAL:$1|Ö\85Ö\80Õ¾Õ¡|$1 Ö\85Ö\80Õ¾Õ¡}} Õ¨Õ¶Õ©Õ¡Ö\81Ö\84Õ¸Ö\82Õ´',
+'statistics-users-active-desc' => 'Õ\8eÕ¥Ö\80Õ»Õ«Õ¶ {{PLURAL:$1|Ö\85Ö\80|$1 Ö\85Ö\80}}Õ¸Ö\82Õ´ Õ¸Ö\80Ö\87Õ§ Õ£Õ¸Ö\80Õ®Õ¸Õ²Õ¸Ö\82Õ©ÕµÕ¸Ö\82Õ¶ Õ¥Õ¶ Õ¯Õ¡Õ¿Õ¡Ö\80Õ¡Õ® Õ´Õ¡Õ½Õ¶Õ¡Õ¯Õ«Ö\81Õ¶Õ¥Ö\80',
 'statistics-mostpopular' => 'Ամենահաճախ դիտվող էջեր',
 
 'disambiguations' => 'Երկիմաստության փարատման էջեր',
@@ -1706,10 +1739,6 @@ Also see [[Special:WantedCategories|wanted categories]].',
 # Special:ActiveUsers
 'activeusers' => 'Ակտիվ մասնակիցների ցանկ',
 
-# Special:Log/newusers
-'newuserlogpage' => 'Մասնակիցների գրանցման տեղեկամատյան',
-'newuserlogpagetext' => 'Սա նոր մասնակիցների գրանցման տեղեկամատյանն է.',
-
 # Special:ListGroupRights
 'listgrouprights-members' => '(անդամների ցանկ)',
 
@@ -1803,6 +1832,8 @@ $NEWPAGE
 
 Հետադարձ կապ և օգնություն՝
 {{canonicalurl:{{MediaWiki:Helppage}}}}',
+'created' => 'ստեղծված է',
+'changed' => 'փոփոխված է',
 
 # Delete
 'deletepage' => 'Ջնջել էջը',
@@ -2696,7 +2727,7 @@ $3
 'logentry-newusers-newusers' => '$1 մասնակիցը ստեղծեց նոր հաշիվ',
 'logentry-newusers-create' => '$1 մասնակիցը ստեղծեց նոր հաշիվ',
 'logentry-newusers-create2' => '$1 Ստեղծեց նոր հաշիվ $3',
-'newuserlog-byemail' => 'Գաղտնաբառն ուղարկված է էլ․ փոստով',
+'rightsnone' => '(ոչ մի)',
 
 # Feedback
 'feedback-subject' => 'Թեմա.',
index 05408b5..e2284cc 100644 (file)
@@ -520,7 +520,7 @@ Consulta: $2',
 'actionthrottled' => 'Action limitate',
 'actionthrottledtext' => 'Como mesura anti-spam, tu es limitate de executar iste action troppo de vices durante un curte periodo de tempore, e tu ha excedite iste limite.
 Per favor reprova post alcun minutas.',
-'protectedpagetext' => 'Iste pagina ha essite protegite contra modificationes.',
+'protectedpagetext' => 'Iste pagina ha essite protegite pro impedir le modification o altere actiones.',
 'viewsourcetext' => 'Tu pote vider e copiar le codice-fonte de iste pagina:',
 'viewyourtext' => "Tu pote vider e copiar le fonte de '''tu modificationes''' de iste pagina:",
 'protectedinterface' => 'Iste pagina contine texto pro le interfacie del software de iste wiki, e es protegite pro impedir le abuso. Pro adder o modificar traductiones pro tote le wikis, per favor usa [//translatewiki.net/ translatewiki.net], le projecto de traduction de MediaWiki.',
@@ -901,10 +901,10 @@ In addition, tu nos garanti que tu es le autor de isto, o que tu lo ha copiate d
 '''Non submitte material subjecte a copyright sin autorisation expresse!'''",
 'longpageerror' => "'''Error: Le texto que tu submitteva occupa {{PLURAL:$1|un kilobyte|$1 kilobytes}}, excedente le maximo de {{PLURAL:$2|un kilobyte|$2 kilobytes}}.'''
 Illo non pote esser salveguardate.",
-'readonlywarning' => "'''Attention: Le base de datos ha essite blocate pro mantenentia, ergo tu non pote salveguardar tu modificationes in iste momento.'''
-Nos recommenda copiar-e-collar le texto in un file de texto e salveguardar lo pro plus tarde.
+'readonlywarning' => "'''Attention: Le base de datos ha essite blocate pro mantenentia. Tu non pote salveguardar tu modificationes in iste momento.'''
+Nos recommenda copiar-e-collar le texto in un file e salveguardar lo pro plus tarde.
 
-Le administrator qui lo blocava dava iste explication: $1",
+Le administrator qui ha blocate le base de datos ha fornite iste explication: $1",
 'protectedpagewarning' => "'''Attention:  Iste pagina ha essite protegite de sorta que solmente usatores con privilegios de administrator pote modificar lo.''' Le ultime entrata del registro es fornite hic infra pro referentia:",
 'semiprotectedpagewarning' => "'''Nota:''' Iste pagina ha essite protegite de maniera que solmente usatores registrate pote modificar lo. Le ultime entrata del registro es fornite hic infra pro referentia:",
 'cascadeprotectedwarning' => "'''Attention:''' Iste pagina ha essite protegite de maniera que solmente administratores pote modificar lo, proque illo es includite in le protection in cascada del sequente {{PLURAL:$1|pagina|paginas}}:",
@@ -916,7 +916,6 @@ Le administrator qui lo blocava dava iste explication: $1",
 'template-semiprotected' => '(semi-protegite)',
 'hiddencategories' => 'Iste pagina es membro de {{PLURAL:$1|1 categoria|$1 categorias}} celate:',
 'edittools' => '<!-- Iste texto se monstrara sub le formularios de modificar articulos e de incargar files. -->',
-'nocreatetitle' => 'Creation de paginas limitate',
 'nocreatetext' => '{{SITENAME}} ha restringite le possibilitate de crear nove paginas.
 Tu pote retornar e modificar un pagina existente, o [[Special:UserLogin|aperir un session, o crear un conto]].',
 'nocreate-loggedin' => 'Tu non ha le permission de crear nove paginas.',
@@ -1472,15 +1471,13 @@ Si tu opta pro dar lo, isto essera usate pro dar te attribution pro tu contribut
 'right-sendemail' => 'Inviar e-mail a altere usatores',
 'right-passwordreset' => 'Vider le e-mails pro reinitialisar le contrasigno',
 
+# Special:Log/newusers
+'newuserlogpage' => 'Registro de creation de usatores',
+'newuserlogpagetext' => 'Isto es un registro de creation de usatores.',
+
 # User rights log
 'rightslog' => 'Registro de derectos de usator',
 'rightslogtext' => 'Isto es un registro de cambios in derectos de usator.',
-'rightslogentry' => 'cambiava le gruppos del quales $1 es membro de $2 a $3',
-'rightslogentry-autopromote' => 'ha essite automaticamente promovite de $2 a $3',
-'logentry-rights-rights' => '$1 cambiava le appertinentia a gruppos pro $3 de $4 a $5',
-'logentry-rights-rights-legacy' => '$1 cambiava le appertinentia a gruppos pro $3',
-'logentry-rights-autopromote' => '$1 ha essite automaticamente promovite de $4 a $5',
-'rightsnone' => '(nulle)',
 
 # Associated actions - in the sentence "You do not have permission to X"
 'action-read' => 'leger iste pagina',
@@ -2133,16 +2130,12 @@ Protocollos supportate: <code>$1</code> (http:// es assumite si nulle protocollo
 # Special:ActiveUsers
 'activeusers' => 'Lista de usatores active',
 'activeusers-intro' => 'Isto es un lista de usatores que habeva alcun typo de activitate intra le ultime $1 {{PLURAL:$1|die|dies}}.',
-'activeusers-count' => '$1 {{PLURAL:$1|modification|modificationes}} in le ultime {{PLURAL:$3|die|$3 dies}}',
+'activeusers-count' => '$1 {{PLURAL:$1|action|actiones}} in le ultime {{PLURAL:$3|die|$3 dies}}',
 'activeusers-from' => 'Presentar usatores a partir de:',
 'activeusers-hidebots' => 'Celar bots',
 'activeusers-hidesysops' => 'Celar administratores',
 'activeusers-noresult' => 'Nulle usator trovate.',
 
-# Special:Log/newusers
-'newuserlogpage' => 'Registro de creation de usatores',
-'newuserlogpagetext' => 'Isto es un registro de creation de usatores.',
-
 # Special:ListGroupRights
 'listgrouprights' => 'Derectos del gruppos de usatores',
 'listgrouprights-summary' => 'Lo sequente es un lista de gruppos de usatores definite in iste wiki, con lor derectos de accesso associate.
@@ -2203,7 +2196,7 @@ como le adresse del expeditor, de sorta que le destinatario potera responder te
 'usermessage-editor' => 'Messagero del systema',
 
 # Watchlist
-'watchlist' => 'Mi observatorio',
+'watchlist' => 'Observatorio',
 'mywatchlist' => 'Observatorio',
 'watchlistfor2' => 'De $1 $2',
 'nowatchlist' => 'Tu non ha paginas sub observation.',
@@ -2211,10 +2204,8 @@ como le adresse del expeditor, de sorta que le destinatario potera responder te
 'watchnologin' => 'Tu non ha aperite un session',
 'watchnologintext' => 'Tu debe [[Special:UserLogin|aperir un session]] pro modificar tu observatorio.',
 'addwatch' => 'Adder al observatorio',
-'addedwatchtext' => "Le pagina \"[[:\$1]]\" ha essite addite a tu [[Special:Watchlist|observatorio]].
-Le modificationes futur in iste pagina e in su pagina de discussion essera listate ibi,
-e le pagina apparera '''in litteras grasse''' in le [[Special:RecentChanges|lista de modificationes recente]] pro
-render lo plus facile de deteger.",
+'addedwatchtext' => 'Le pagina "[[:$1]]" ha essite addite a tu [[Special:Watchlist|observatorio]].
+Le modificationes futur in iste pagina e in le pagina de discussion associate essera listate in illo.',
 'removewatch' => 'Remover del observatorio',
 'removedwatchtext' => 'Le pagina "[[:$1]]" ha essite removite de [[Special:Watchlist|tu observatorio]].',
 'watch' => 'Observar',
@@ -2276,6 +2267,8 @@ $UNWATCHURL
 
 Feedback e ulterior assistentia:
 {{canonicalurl:{{MediaWiki:Helppage}}}}',
+'created' => 'create',
+'changed' => 'modificate',
 
 # Delete
 'deletepage' => 'Deler pagina',
@@ -2366,9 +2359,9 @@ Ecce le configurationes actual del pagina '''$1''':",
 'protect-cascadeon' => 'Iste pagina es actualmente protegite proque illo es includite in le sequente {{PLURAL:$1|pagina, le qual|paginas, le quales}} ha activate le protection in cascada.
 Tu pote cambiar le nivello de protection de iste pagina, ma isto non cambiara le effecto del protection in cascada.',
 'protect-default' => 'Permitter tote le usatores',
-'protect-fallback' => 'Requirer permission de "$1"',
-'protect-level-autoconfirmed' => 'Blocar usatores nove e non registrate',
-'protect-level-sysop' => 'Administratores solmente',
+'protect-fallback' => 'Permitter solmente usatores con le permission de "$1"',
+'protect-level-autoconfirmed' => 'Permitter solmente usatores autoconfirmate',
+'protect-level-sysop' => 'Permitter solmente administratores',
 'protect-summary-cascade' => 'in cascada',
 'protect-expiring' => 'expira le $1 (UTC)',
 'protect-expiring-local' => 'expira le $1',
@@ -2469,7 +2462,7 @@ $1',
 'blanknamespace' => '(Principal)',
 
 # Contributions
-'contributions' => 'Contributiones del usator',
+'contributions' => 'Contributiones del {{GENDER:$1|usator}}',
 'contributions-title' => 'Contributiones del usator $1',
 'mycontris' => 'Contributiones',
 'contribsub2' => 'Pro $1 ($2)',
@@ -2676,16 +2669,16 @@ Pro blocar o disblocar le base de datos, le servitor web debe poter scriber a is
 # Move page
 'move-page' => 'Renominar $1',
 'move-page-legend' => 'Renominar pagina',
-'movepagetext' => "Per medio del formulario infra tu pote renominar un pagina, transferente tote su historia al nove nomine.
+'movepagetext' => "Per medio del formulario hic infra tu pote renominar un pagina, transferente tote su historia al nove nomine.
 Le titulo anterior devenira un pagina de redirection verso le nove titulo.
 Tu pote actualisar automaticamente le redirectiones que puncta verso le titulo original.
-Si tu prefere non facer isto, assecura te de reparar omne redirectiones [[Special:DoubleRedirects|duple]] o [[Special:BrokenRedirects|rupte]].
+Si tu prefere non facer isto, non oblida de reparar omne redirectiones [[Special:DoubleRedirects|duple]] o [[Special:BrokenRedirects|rupte]].
 Tu ha le responsabilitate de assecurar que le ligamines continua a punctar verso le paginas correcte.
 
-Nota que le pagina '''non''' essera renominate si existe ja un pagina sub le nove titulo, salvo si illo es vacue o un redirection e non ha un historia de modificationes passate.
-Isto vole dicer que tu pote renominar un pagina retro a su titulo original si tu ha committite un error, ben que tu non pote superscriber un pagina existente.
+Nota que le pagina '''non''' essera renominate si existe jam un pagina sub le nove titulo, excepte si iste es un redirection sin historia de modificationes passate.
+Isto te lassa le possibilitate de restaurar le titulo original de un pagina si tu ha committite un error, sin permitter te de supplantar un pagina existente.
 
-'''ATTENTION!'''
+'''Attention!'''
 Isto pote esser un cambio drastic e inexpectate pro un pagina popular;
 per favor assecura te de haber comprendite le consequentias de isto ante de continuar.",
 'movepagetext-noredirectfixer' => "Per medio del formulario infra tu pote renominar un pagina, transferente tote su historia al nove nomine.
@@ -3891,7 +3884,10 @@ Le imagines se monstra in plen resolution, le altere typos de file se executa di
 'logentry-newusers-create' => 'Le conto de usator $1 ha essite create',
 'logentry-newusers-create2' => 'Le conto de usator $3 ha essite create per $1',
 'logentry-newusers-autocreate' => 'Le conto $1 ha essite create automaticamente',
-'newuserlog-byemail' => 'contrasigno inviate per e-mail',
+'logentry-rights-rights' => '$1 cambiava le appertinentia a gruppos pro $3 de $4 a $5',
+'logentry-rights-rights-legacy' => '$1 cambiava le appertinentia a gruppos pro $3',
+'logentry-rights-autopromote' => '$1 ha essite automaticamente promovite de $4 a $5',
+'rightsnone' => '(nulle)',
 
 # Feedback
 'feedback-bugornote' => 'Si tu es preste a describer un problema technic in detalio, per favor [$1 reporta un falta].
index 1241f51..f2157b1 100644 (file)
@@ -26,6 +26,7 @@
  * @author Mahali syarifuddin
  * @author McDutchie
  * @author Meursault2004
+ * @author Naval Scene
  * @author Remember the dot
  * @author Rex
  * @author Urhixidur
@@ -439,19 +440,19 @@ $messages = array(
 'may' => 'Mei',
 'jun' => 'Jun',
 'jul' => 'Jul',
-'aug' => 'Agu',
+'aug' => 'Ags',
 'sep' => 'Sep',
 'oct' => 'Okt',
 'nov' => 'Nov',
 'dec' => 'Des',
 
 # Categories related messages
-'pagecategories' => '{{PLURAL:$1|Kategori|Kategori}}',
+'pagecategories' => '{{PLURAL:$1|Kategori}}',
 'category_header' => 'Halaman dalam kategori "$1"',
 'subcategories' => 'Subkategori',
 'category-media-header' => 'Media dalam kategori "$1"',
 'category-empty' => "''Saat ini, tidak terdapat halaman ataupun media dalam kategori ini.''",
-'hidden-categories' => '{{PLURAL:$1|Kategori tersembunyi|Kategori tersembunyi}}',
+'hidden-categories' => '{{PLURAL:$1|Kategori tersembunyi}}',
 'hidden-category-category' => 'Kategori tersembunyi',
 'category-subcat-count' => '{{PLURAL:$2|Kategori ini hanya memiliki satu subkategori berikut.|Kategori ini memiliki {{PLURAL:$1|subkategori|$1 subkategori}} berikut, dari total $2.}}',
 'category-subcat-count-limited' => 'Kategori ini memiliki {{PLURAL:$1|subkategori|$1 subkategori}} berikut.',
@@ -463,12 +464,16 @@ $messages = array(
 'index-category' => 'Halaman yang diindeks',
 'noindex-category' => 'Halaman yang tidak diindeks',
 'broken-file-category' => 'Halaman dengan gambar rusak',
+'categoryviewer-pagedlinks' => '($1) ($2)',
+
+'linkprefix' => '/^(.*?)([a-zA-Z\\x80-\\xff]+)$/sD',
 
 'about' => 'Tentang',
 'article' => 'Halaman isi',
 'newwindow' => '(buka di jendela baru)',
 'cancel' => 'Batalkan',
 'moredotdotdot' => 'Lainnya...',
+'morenotlisted' => 'Selanjutnya...',
 'mypage' => 'Halaman',
 'mytalk' => 'Pembicaraan',
 'anontalk' => 'Pembicaraan IP ini',
@@ -502,6 +507,7 @@ $messages = array(
 'namespaces' => 'Ruang nama',
 'variants' => 'Varian',
 
+'navigation-heading' => 'Menu navigasi',
 'errorpagetitle' => 'Kesalahan',
 'returnto' => 'Kembali ke $1.',
 'tagline' => 'Dari {{SITENAME}}',
@@ -594,6 +600,9 @@ $1',
 'versionrequiredtext' => 'MediaWiki versi $1 dibutuhkan untuk menggunakan halaman ini. Lihat [[Special:Version|halaman versi]]',
 
 'ok' => 'OK',
+'pagetitle' => '$1 - {{SITENAME}}',
+'pagetitle-view-mainpage' => '{{SITENAME}}',
+'backlinksubtitle' => '← $1',
 'retrievedfrom' => 'Diperoleh dari "$1"',
 'youhavenewmessages' => 'Anda mempunyai $1 ($2).',
 'newmessageslink' => 'pesan baru',
@@ -604,6 +613,7 @@ $1',
 'newmessagesdifflinkplural' => '{{PLURAL:$1||}}perubahan terakhir',
 'youhavenewmessagesmulti' => 'Anda mendapat beberapa pesan baru pada $1',
 'editsection' => 'sunting',
+'editsection-brackets' => '[$1]',
 'editold' => 'sunting',
 'viewsourceold' => 'lihat sumber',
 'editlink' => 'sunting',
@@ -625,6 +635,7 @@ $1',
 'page-rss-feed' => 'Umpan RSS "$1"',
 'page-atom-feed' => 'Umpan Atom "$1"',
 'feed-atom' => 'Atom',
+'feed-rss' => 'RSS',
 'red-link-title' => '$1 (halaman belum tersedia)',
 'sort-descending' => 'Urutkan menurun',
 'sort-ascending' => 'Urutkan menaik',
@@ -692,6 +703,8 @@ Silakan laporkan hal ini kepada salah seorang [[Special:ListUsers/sysop|Pengurus
 'cannotdelete' => 'Halaman atau berkas "$1" tidak dapat dihapus.
 Mungkin telah dihapus oleh orang lain.',
 'cannotdelete-title' => 'Tidak dapat menghapus halaman "$1"',
+'delete-hook-aborted' => 'Penghapusan dibatalkan oleh kait parser.
+Tidak ada keterangan.',
 'badtitle' => 'Judul tidak sah',
 'badtitletext' => 'Judul halaman yang diminta tidak sah, kosong, atau judul antarbahasa atau antarwiki yang salah sambung.',
 'perfcached' => 'Data berikut ini diambil dari singgahan dan mungkin bukan data mutakhir. {{PLURAL:$1||}}$1 hasil maksimal tersedia di tembolok.',
@@ -702,7 +715,7 @@ Mungkin telah dihapus oleh orang lain.',
 'viewsource-title' => 'Lihat sumber untuk $1',
 'actionthrottled' => 'Tindakan dibatasi',
 'actionthrottledtext' => 'Anda dibatasi untuk melakukan tindakan ini terlalu banyak dalam waktu pendek. Silakan mencoba lagi setelah beberapa menit.',
-'protectedpagetext' => 'Halaman ini telah dikunci untuk menghindari penyuntingan.',
+'protectedpagetext' => 'Halaman ini telah dikunci untuk menghindari penyuntingan atau tindakan lain.',
 'viewsourcetext' => 'Anda dapat melihat atau menyalin sumber halaman ini:',
 'viewyourtext' => "Anda dapat melihat atau menyalin sumber dari '''suntingan Anda''' ke halaman ini:",
 'protectedinterface' => 'Halaman ini memuat teks antarmuka untuk perangkat lunak pada wiki ini, dan dilindungi terhadap penyalahgunaan. Untuk menambah atau mengubah terjemahan pada semua wiki, harap gunakan [//translatewiki.net/ translatewiki.net], proyek pelokalan MediaWiki.',
@@ -759,7 +772,7 @@ Perhatikan bahwa beberapa halaman mungkin masih terus menunjukkan bahwa Anda mas
 'gotaccount' => "Sudah terdaftar sebagai pengguna? '''$1'''.",
 'gotaccountlink' => 'Masuk log',
 'userlogin-resetlink' => 'Lupa detail info masuk Anda?',
-'createaccountmail' => 'melalui surel',
+'createaccountmail' => 'Gunakan kata sandi acak sementara dan kirimkan ke surel yang tercantum di bawah',
 'createaccountreason' => 'Alasan:',
 'badretype' => 'Kata sandi yang Anda masukkan salah.',
 'userexists' => 'Nama pengguna yang dimasukkan telah digunakan.
@@ -770,6 +783,7 @@ Silakan tentukan nama yang lain.',
 'nocookieslogin' => "{{SITENAME}} menggunakan ''cookies'' untuk log penggunanya. ''Cookies'' pada penjelajah web Anda dimatikan. Silakan aktifkan dan coba lagi.",
 'nocookiesfornew' => 'Akun pengguna tidak dibuat karena kami tidak dapat memastikan sumbernya.
 Pastikan Anda telah mengaktifkan kuki, lalu muat ulang halaman ini dan coba lagi.',
+'nocookiesforlogin' => '{{int:nocookieslogin}}',
 'noname' => 'Nama pengguna yang Anda masukkan tidak sah.',
 'loginsuccesstitle' => 'Berhasil masuk log',
 'loginsuccess' => "'''Anda sekarang masuk log di {{SITENAME}} sebagai \"\$1\".'''",
@@ -826,6 +840,7 @@ Silakan menunggu sebelum mencoba lagi.',
 # E-mail sending
 'php-mail-error-unknown' => 'Kesalahan yang tidak dikenal dalam fungsi mail() PHP',
 'user-mail-no-addy' => 'Mencoba mengirimkan surel tanpa alamat surel.',
+'user-mail-no-body' => 'Mencoba untuk mengirim surel kosong atau terlalu pendek.',
 
 # Change password dialog
 'resetpass' => 'Ganti kata sandi',
@@ -890,6 +905,7 @@ Sandi sementara: $2',
 'changeemail-oldemail' => 'Alamat surel saat ini:',
 'changeemail-newemail' => 'Alamat surel baru:',
 'changeemail-none' => '(tidak ada)',
+'changeemail-password' => 'Sandi {{SITENAME}} Anda:',
 'changeemail-submit' => 'Ubah surel',
 'changeemail-cancel' => 'Batalkan',
 
@@ -1048,8 +1064,8 @@ Jika Anda menyimpannya, perubahan-perubahan yang dibuat sejak revisi ini akan hi
 'copyrightwarning' => "Perhatikan bahwa semua kontribusi terhadap {{SITENAME}} dianggap dilisensikan sesuai dengan $2 (lihat $1 untuk informasi lebih lanjut). Jika Anda tidak ingin tulisan Anda disunting dan disebarkan ke halaman web yang lain, jangan kirimkan ke sini.<br />Anda juga berjanji bahwa ini adalah hasil karya Anda sendiri, atau disalin dari sumber milik umum atau sumber bebas yang lain. '''JANGAN KIRIMKAN KARYA YANG DILINDUNGI HAK CIPTA TANPA IZIN!'''",
 'copyrightwarning2' => "Perhatikan bahwa semua kontribusi terhadap {{SITENAME}} dapat disunting, diubah, atau dihapus oleh penyumbang lainnya. Jika Anda tidak ingin tulisan Anda disunting orang lain, jangan kirimkan ke sini.<br />Anda juga berjanji bahwa ini adalah hasil karya Anda sendiri, atau disalin dari sumber milik umum atau sumber bebas yang lain (lihat $1 untuk informasi lebih lanjut). '''JANGAN KIRIMKAN KARYA YANG DILINDUNGI HAK CIPTA TANPA IZIN!'''",
 'longpageerror' => "'''KESALAHAN: Teks yang Anda kirimkan sebesar $1 kilobita, yang berarti lebih besar daripada jumlah maksimum $2 kilobita. Teks tidak dapat disimpan.'''",
-'readonlywarning' => "'''PERINGATAN: Basis data sedang dikunci karena pemeliharaan, sehingga saat ini Anda tidak dapat menyimpan hasil suntingan Anda.
-Anda mungkin perlu menyalin teks suntingan Anda ini dan menyimpannya ke sebuah berkas teks dan memuatkannya lagi setelah pemeliharaan selesai.'''
+'readonlywarning' => "'''PERINGATAN: Basis data sedang dikunci karena pemeliharaan, sehingga saat ini Anda tidak dapat menyimpan hasil suntingan Anda.'''
+Anda mungkin perlu menyalin teks suntingan Anda ini dan menyimpannya ke sebuah berkas teks dan memuatkannya lagi kemudian.
 
 Pengurus yang mengunci basis data memberikan penjelasan berikut: $1",
 'protectedpagewarning' => "'''Peringatan: Halaman ini sedang dilindungi sehingga hanya pengguna dengan hak akses pengurus yang dapat menyuntingnya.'''
@@ -1066,7 +1082,7 @@ Entri catatan terakhir disediakan di bawah untuk referensi:",
 'template-semiprotected' => '(pelindungan semi)',
 'hiddencategories' => 'Halaman ini adalah anggota dari {{PLURAL:$1|1 kategori tersembunyi|$1 kategori tersembunyi}}:',
 'edittools' => '<!-- Teks di sini akan dimunculkan di bawah isian suntingan dan pemuatan.-->',
-'nocreatetitle' => 'Pembuatan halaman baru dibatasi',
+'edittools-upload' => '-',
 'nocreatetext' => '{{SITENAME}} telah membatasi pembuatan halaman-halaman baru.
 Anda dapat kembali dan menyunting halaman yang telah ada, atau silakan [[Special:UserLogin|masuk log atau membuat akun]].',
 'nocreate-loggedin' => 'Anda tak memiliki hak akses untuk membuat halaman baru.',
@@ -1091,6 +1107,7 @@ Halaman kemungkinan telah dihapus.',
 'edit-already-exists' => 'Tidak dapat membuat halaman baru
 karena telah ada.',
 'defaultmessagetext' => 'Teks baku',
+'content-failed-to-parse' => 'Gagal menjabarkan konten $2 untuk model $1: $3',
 'invalid-content-data' => 'Data konten tidak sah',
 'content-not-allowed-here' => 'Konten "$1" tidak diizinkan di halaman [[$2]]',
 
@@ -1113,19 +1130,19 @@ Beberapa templat akan diabaikan.',
 'parser-template-loop-warning' => 'Hubungan berulang templat terdeteksi: [[$1]]',
 'parser-template-recursion-depth-warning' => 'Limit kedalaman hubungan berulang templat terlampaui ($1)',
 'language-converter-depth-warning' => 'Batas kedalaman pengonversi bahasa terlampaui ($1)',
-'node-count-exceeded-category' => 'Pages where node-count is exceeded',
+'node-count-exceeded-category' => 'Halaman dimana hitungan-node terlampaui',
 'node-count-exceeded-warning' => 'Page exceeded the node-count',
 'expansion-depth-exceeded-category' => 'Pages where expansion depth is exceeded',
 'expansion-depth-exceeded-warning' => 'Page exceeded the expansion depth',
 'parser-unstrip-loop-warning' => 'Unstrip loop detected',
 'parser-unstrip-recursion-limit' => 'Unstrip recursion limit exceeded ($1)',
-'converter-manual-rule-error' => 'Kesalahan terdeteksi di aturan konversi bahasa manual',
+'converter-manual-rule-error' => 'Kesalahan terdeteksi di aturan manual konversi bahasa',
 
 # "Undo" feature
 'undo-success' => 'Suntingan ini dapat dibatalkan. Tolong cek perbandingan di bawah untuk meyakinkan bahwa benar itu yang Anda ingin lakukan, lalu simpan perubahan tersebut untuk menyelesaikan pembatalan suntingan.',
 'undo-failure' => 'Suntingan ini tidak dapat dibatalkan karena konflik penyuntingan antara.',
 'undo-norev' => 'Suntingan ini tidak dapat dibatalkan karena halaman tidak ditemukan atau telah dihapuskan.',
-'undo-summary' => '←Membatalkan revisi $1 oleh [[Special:Contributions/$2|$2]] ([[User talk:$2|Bicara]])',
+'undo-summary' => 'Membatalkan revisi $1 oleh [[Special:Contributions/$2|$2]] ([[User talk:$2|talk]])',
 
 # Account creation failure
 'cantcreateaccounttitle' => 'Akun tak dapat dibuat',
@@ -1287,6 +1304,7 @@ Pastikan bahwa perubahan ini tetap mempertahankan kontinuitas versi terdahulu ha
 'mergehistory-comment' => '[[:$1]] telah digabungkan ke [[:$2]]: $3',
 'mergehistory-same-destination' => 'Nama halaman sumber dan tujuan tidak boleh sama',
 'mergehistory-reason' => 'Alasan:',
+'mergehistory-revisionrow' => '$1 ($2) $3 . . $4 $5 $6',
 
 # Merge log
 'mergelog' => 'Log penggabungan',
@@ -1305,6 +1323,10 @@ Pastikan bahwa perubahan ini tetap mempertahankan kontinuitas versi terdahulu ha
 'editundo' => 'batalkan',
 'diff-multi' => '({{PLURAL:$1|Satu|$1}} revisi antara oleh {{PLURAL:$2|satu|$2}} pengguna tak ditampilkan)',
 'diff-multi-manyusers' => '({{PLURAL:$1|Satu|$1}} revisi antara oleh lebih dari $2 {{PLURAL:$2|satu|$2}} pengguna tak ditampilkan)',
+'difference-missing-revision' => '{{PLURAL:$2|Satu revisi|$2 revisi}} dari perbedaan ini ($1) {{PLURAL:$2|tidak|tidak}} ditemukan.
+
+Hal ini biasanya disebabkan oleh tautan diff yang kedaluwarsa ke halaman yang sudah dihapus.
+Rinciannya dapat ditemukan di [{{fullurl:{{#Special:Log}}/delete|page={{FULLPAGENAMEE}}}} log penghapusan].',
 
 # Search results
 'searchresults' => 'Hasil pencarian',
@@ -1319,8 +1341,8 @@ Pastikan bahwa perubahan ini tetap mempertahankan kontinuitas versi terdahulu ha
 'notextmatches' => 'Tidak ada teks halaman yang cocok',
 'prevn' => '{{PLURAL:$1|$1}} sebelumnya',
 'nextn' => '{{PLURAL:$1|$1}} selanjutnya',
-'prevn-title' => '$1 {{PLURAL:$1|hasil|hasil}} sebelumnya',
-'nextn-title' => '$1 {{PLURAL:$1|hasil|hasil}} selanjutnya',
+'prevn-title' => '$1 {{PLURAL:$1|hasil}} sebelumnya',
+'nextn-title' => '$1 {{PLURAL:$1|hasil}} selanjutnya',
 'shown-title' => 'Tampilkan $1 {{PLURAL:$1|hasil|hasil}} per halaman',
 'viewprevnext' => 'Lihat ($1 {{int:pipe-separator}} $2) ($3)',
 'searchmenu-legend' => 'Opsi pencarian',
@@ -1338,7 +1360,7 @@ Pastikan bahwa perubahan ini tetap mempertahankan kontinuitas versi terdahulu ha
 'searchprofile-images-tooltip' => 'Pencarian berkas',
 'searchprofile-everything-tooltip' => 'Pencarian di seluruh situs (termasuk halaman pembicaraan)',
 'searchprofile-advanced-tooltip' => 'Pencarian di ruang nama tertentu',
-'search-result-size' => '$1 ({{PLURAL:$2|1 kata|$2 kata}})',
+'search-result-size' => '$1 ({{PLURAL:$2|$2 kata}})',
 'search-result-category-size' => '{{PLURAL:$1|1 anggota|$1 anggota}} ({{PLURAL:$2|1 subkategori|$2 subkategori}}, {{PLURAL:$3|1 berkas|$3 berkas}})',
 'search-result-score' => 'Relevansi: $1%',
 'search-redirect' => '(pengalihan $1)',
@@ -1381,7 +1403,7 @@ Perlu diingat bahwa indeks Google untuk konten {{SITENAME}} mungkin belum mencak
 
 # Preferences page
 'preferences' => 'Preferensi',
-'mypreferences' => 'Preferensi',
+'mypreferences' => 'Pengaturan',
 '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.',
@@ -1456,10 +1478,12 @@ Pengembalian preferensi tidak dapat dibatalkan.',
 'prefs-emailconfirm-label' => 'Konfirmasi surel:',
 'prefs-textboxsize' => 'Ukuran kotak suntingan',
 'youremail' => 'Surel:',
-'username' => 'Nama pengguna:',
-'uid' => 'ID pengguna:',
-'prefs-memberingroups' => 'Anggota {{PLURAL:$1|kelompok|kelompok}}:',
+'username' => '{{GENDER:$1|Nama pengguna}}:',
+'uid' => 'ID {{GENDER:$1|pengguna}}:',
+'prefs-memberingroups' => '{{GENDER:$2|Anggota}} {{PLURAL:$1|kelompok|kelompok}}:',
+'prefs-memberingroups-type' => '$1',
 'prefs-registration' => 'Waktu pendaftaran:',
+'prefs-registration-date-time' => '$1',
 'yourrealname' => 'Nama asli:',
 'yourlanguage' => 'Bahasa:',
 'yourvariant' => 'Varian bahasa isi:',
@@ -1509,6 +1533,7 @@ Jika Anda memberikannya, nama asli Anda akan digunakan untuk memberi pengenalan
 'saveusergroups' => 'Simpan kelompok pengguna',
 'userrights-groupsmember' => 'Anggota dari:',
 'userrights-groupsmember-auto' => 'Anggota implisit dari:',
+'userrights-groupsmember-type' => '$1',
 'userrights-groups-help' => 'Anda dapat mengubah kelompok pengguna ini:
 * Kotak dengan tanda cek merupakan kelompok pengguna yang bersangkutan
 * Kotak tanpa tanda cek berarti pengguna ini bukan anggota kelompok tersebut
@@ -1520,6 +1545,7 @@ Jika Anda memberikannya, nama asli Anda akan digunakan untuk memberi pengenalan
 'userrights-notallowed' => 'Akun Anda tidak berhak untuk menambahkan atau membuang hak pengguna.',
 'userrights-changeable-col' => 'Kelompok yang dapat Anda ubah',
 'userrights-unchangeable-col' => 'Kelompok yang tidak dapat Anda ubah',
+'userrights-irreversible-marker' => '$1*',
 
 # Groups
 'group' => 'Kelompok:',
@@ -1570,6 +1596,7 @@ Jika Anda memberikannya, nama asli Anda akan digunakan untuk memberi pengenalan
 'right-writeapi' => 'Menggunakan API penulisan',
 'right-delete' => 'Menghapus halaman',
 'right-bigdelete' => 'Menghapus halaman dengan banyak versi terdahulu',
+'right-deletelogentry' => 'Hapus dan batalkan penghapusan entri log tertentu',
 'right-deleterevision' => 'Menghapus dan membatalkan penghapusan revisi tertentu suatu halaman',
 'right-deletedhistory' => 'Melihat entri-entri revisi yang dihapus, tanpa teks yang berhubungan',
 'right-deletedtext' => 'Melihat teks yang dihapus dan perubahan antara revisi yang dihapus',
@@ -1606,12 +1633,13 @@ Jika Anda memberikannya, nama asli Anda akan digunakan untuk memberi pengenalan
 'right-sendemail' => 'Mengirim surel ke pengguna lain',
 'right-passwordreset' => 'Lihat surel pengaturulangan kata sandi',
 
+# Special:Log/newusers
+'newuserlogpage' => 'Log pengguna baru',
+'newuserlogpagetext' => 'Di bawah ini adalah log pendaftaran pengguna baru',
+
 # User rights log
 'rightslog' => 'Log perubahan hak akses',
 'rightslogtext' => 'Di bawah ini adalah log perubahan terhadap hak-hak pengguna.',
-'rightslogentry' => 'mengganti keanggotaan kelompok untuk $1 dari $2 menjadi $3',
-'rightslogentry-autopromote' => 'secara otomatis dipromosikan dari $2 ke $3',
-'rightsnone' => '(tidak ada)',
 
 # Associated actions - in the sentence "You do not have permission to X"
 'action-read' => 'membaca halaman ini',
@@ -1678,9 +1706,11 @@ Jika Anda memberikannya, nama asli Anda akan digunakan untuk memberi pengenalan
 'minoreditletter' => 'k',
 'newpageletter' => 'B',
 'boteditletter' => 'b',
+'unpatrolledletter' => '!',
 'number_of_watching_users_pageview' => '[$1 {{PLURAL:$1|pemantau|pemantau}}]',
 'rc_categories' => 'Batasi sampai kategori (dipisah dengan "|")',
 'rc_categories_any' => 'Apa pun',
+'rc-change-size' => '$1',
 'rc-change-size-new' => '$1 {{PLURAL:$1|bita|bita}} setelah perubahan',
 'newsectionsummary' => '/* $1 */ bagian baru',
 'rc-enhanced-expand' => 'Tampilkan rincian (memerlukan JavaScript)',
@@ -1804,6 +1834,20 @@ Penggunggahan berkas Java tidak diperbolehkan karena dapat menyebabkan pengabaia
 'watchthisupload' => 'Pantau berkas ini',
 'filewasdeleted' => 'Suatu berkas dengan nama ini pernah dimuat dan selanjutnya dihapus. Harap cek $1 sebelum memuat lagi berkas tersebut.',
 'filename-bad-prefix' => "Nama berkas yang Anda muat diawali dengan '''\"\$1\"''', yang merupakan nama non-deskriptif yang biasanya diberikan secara otomatis oleh kamera digital. Harap pilih nama lain yang lebih deskriptif untuk berkas Anda.",
+'filename-prefix-blacklist' => ' #<!-- biarkan baris ini seperti adanya --> <pre>
+# Contohnya sebagai berikut:
+#   * Semuanya dari karekter "#" sampai akhir baris ini adalah komentar
+#   * Setiap garis "_" adalah awalan untuk nama file khas yang diberikan secara otomatis oleh kamera digital
+CIMG # Casio
+DSC_ # Nikon
+DSCF # Fuji
+DSCN # Nikon
+DUW # beberapa model telpon seluler
+IMG # generik
+JD # Jenoptik
+MGP # Pentax
+PICT # lainnya.
+ #</pre> <!-- biarkan baris ini seperti adanya -->',
 'upload-success-subj' => 'Berhasil dimuat',
 'upload-success-msg' => 'Pengunggahan Anda dari [$2] berhasil. Hasilnya tersedia di sini: [[:{{ns:file}}:$1]]',
 'upload-failure-subj' => 'Masalah pengunggahan',
@@ -1833,6 +1877,7 @@ Silakan hubungi salah seorang [[Special:ListUsers/sysop|pengurus]].',
 'backend-fail-notsame' => 'Berkas nonidentik telah ada di $1.',
 'backend-fail-invalidpath' => '$1 bukanlah lintasan penyimpanan yang valid.',
 'backend-fail-delete' => 'Tidak dapat menghapus berkas $1.',
+'backend-fail-describe' => 'Gagal mengubah metadata untuk berkas "$1".',
 'backend-fail-alreadyexists' => 'Berkas $1 sudah ada.',
 'backend-fail-store' => 'Tidak dapat menyimpan berkas $1 di $2.',
 'backend-fail-copy' => 'Tidak dapat menyalin berkas $1 ke $2.',
@@ -1864,6 +1909,7 @@ Silakan hubungi salah seorang [[Special:ListUsers/sysop|pengurus]].',
 'lockmanager-fail-releaselock' => 'Tidak dapat melepaskan penguncian untuk "$1"',
 'lockmanager-fail-db-bucket' => 'Tidak bisa menghubungi database kunci yang mencukupi dalam ember $1.',
 'lockmanager-fail-db-release' => 'Tidak dapat melepaskan penguncian pada basis data $1.',
+'lockmanager-fail-svr-acquire' => 'Gagal memperoleh kunci di server $1.',
 'lockmanager-fail-svr-release' => 'Tidak dapat melepaskan penguncian pada server $1.',
 
 # ZipDirectoryReader
@@ -1980,7 +2026,9 @@ Mungkin Anda ingin menyunting keterangan pada [$2 halaman deskripsi berkas] di s
 'uploadnewversion-linktext' => 'Muatkan versi yang lebih baru dari berkas ini',
 'shared-repo-from' => 'dari $1',
 'shared-repo' => 'suatu repositori bersama',
-'filepage.css' => '/* CSS yang ditempatkan di sini disertakan pada halaman deskripsi berkas, juga disertakan pada klien wiki asing */',
+'shared-repo-name-wikimediacommons' => 'Wikimedia Commons',
+'filepage.css' => '/* CSS yang ditempatkan di sini disertakan pada halaman deskripsi berkas, juga disertakan pada klien wiki lain */',
+'upload-disallowed-here' => 'Anda tidak bisa menimpa berkas ini.',
 
 # File reversion
 'filerevert' => 'Kembalikan $1',
@@ -2086,8 +2134,9 @@ Nama yang telah <del>dicoret</del> berarti telah dibetulkan.',
 'fewestrevisions' => 'Halaman dengan perubahan tersedikit',
 
 # Miscellaneous special pages
-'nbytes' => '$1 {{PLURAL:$1|bita|bita}}',
+'nbytes' => '$1 {{PLURAL:$1|bita}}',
 'ncategories' => '$1 {{PLURAL:$1|kategori|kategori}}',
+'ninterwikis' => '$1 {{PLURAL:$1|interwiki|interwiki}}',
 'nlinks' => '$1 {{PLURAL:$1|pranala|pranala}}',
 'nmembers' => '$1 {{PLURAL:$1|isi|isi}}',
 'nrevisions' => '$1 {{PLURAL:$1|revisi|revisi}}',
@@ -2116,6 +2165,7 @@ Nama yang telah <del>dicoret</del> berarti telah dibetulkan.',
 'mostlinkedtemplates' => 'Templat yang tersering digunakan',
 'mostcategories' => 'Halaman dengan kategori terbanyak',
 'mostimages' => 'Berkas yang tersering digunakan',
+'mostinterwikis' => 'Halaman dengan interwiki terbanyak',
 'mostrevisions' => 'Halaman dengan perubahan terbanyak',
 'prefixindex' => 'Semua halaman dengan awalan',
 'prefixindex-namespace' => 'Semua halaman dengan awalan (ruang nama $1)',
@@ -2149,13 +2199,14 @@ Harap perhatikan bahwa situs web lain mungkin memiliki pranala ke suatu berkas d
 'nopagetitle' => 'Halaman tujuan tidak ditemukan',
 'nopagetext' => 'Halaman yang Anda tuju tidak ditemukan.',
 'pager-newer-n' => '{{PLURAL:$1|1 lebih baru|$1 lebih baru}}',
-'pager-older-n' => '{{PLURAL:$1|1 lebih lama|$1 lebih lama}}',
+'pager-older-n' => '{{PLURAL:$1|$1 lebih lama}}',
 'suppress' => 'Pengawas',
 'querypage-disabled' => 'Halaman istimewa ini dinonaktifkan demi alasan kinerja.',
 
 # Book sources
 'booksources' => 'Sumber buku',
 'booksources-search-legend' => 'Cari di sumber buku',
+'booksources-isbn' => 'ISBN:',
 'booksources-go' => 'Tuju ke',
 'booksources-text' => 'Di bawah ini adalah daftar pranala ke situs lain yang menjual buku baru dan bekas, dan mungkin juga mempunyai informasi lebih lanjut mengenai buku yang sedang Anda cari:',
 'booksources-invalid-isbn' => 'ISBN yang diberikan tampaknya tidak valid; periksa kesalahan penyalinan dari sumber asli.',
@@ -2213,9 +2264,9 @@ Lihat pula [[Special:WantedCategories|kategori yang diinginkan]].',
 'linksearch-pat' => 'Pola pencarian:',
 'linksearch-ns' => 'Ruang nama:',
 'linksearch-ok' => 'Cari',
-'linksearch-text' => 'Kartu liar seperti "*.wikipedia.org" dapat digunakan.
+'linksearch-text' => 'Tanda bintang seperti "*.wikipedia.org" dapat digunakan.
 Perlu sedikitnya satu domain tingkat atas, misalnya "*.org".<br />
-Protokol yang didukung: <code>$1</code> (menggunakan http:// bila protokol tidak ditentukan)',
+{{PLURAL:$2|Protokol|Protokol}} yang didukung: <code>$1</code> (menggunakan http:// bila protokol tidak ditentukan)',
 'linksearch-line' => '$1 memiliki pranala dari $2',
 'linksearch-error' => "''Wildcards'' hanya dapat digunakan di bagian awal dari nama host.",
 
@@ -2228,16 +2279,12 @@ Protokol yang didukung: <code>$1</code> (menggunakan http:// bila protokol tidak
 # Special:ActiveUsers
 'activeusers' => 'Daftar pengguna aktif',
 'activeusers-intro' => 'Berikut adalah daftar pengguna yang memiliki suatu bentuk aktivitas selama paling tidak $1 {{PLURAL:$1|hari|hari}} terakhir.',
-'activeusers-count' => '$1 {{PLURAL:$1||}}suntingan selama {{PLURAL:$3||}}$3 hari terakhir',
+'activeusers-count' => '$1 {{PLURAL:$1|aktivitas|aktivitas}} dalam {{PLURAL:$3|hari|$3 hari}} terakhir',
 'activeusers-from' => 'Tampilkan pengguna mulai dari:',
 'activeusers-hidebots' => 'Sembunyikan bot',
 'activeusers-hidesysops' => 'Sembunyikan pengurus',
 'activeusers-noresult' => 'Pengguna tidak ditemukan.',
 
-# Special:Log/newusers
-'newuserlogpage' => 'Log pengguna baru',
-'newuserlogpagetext' => 'Di bawah ini adalah log pendaftaran pengguna baru',
-
 # Special:ListGroupRights
 'listgrouprights' => 'Daftar kelompok pengguna',
 'listgrouprights-summary' => 'Berikut adalah daftar kelompok pengguna yang terdapat di wiki ini, dengan daftar hak akses mereka masing-masing. Informasi lebih lanjut mengenai hak masing-masing dapat ditemukan di [[{{MediaWiki:Listgrouprights-helppage}}|halaman bantuan hak pengguna]].',
@@ -2247,6 +2294,8 @@ Protokol yang didukung: <code>$1</code> (menggunakan http:// bila protokol tidak
 'listgrouprights-rights' => 'Hak',
 'listgrouprights-helppage' => 'Help:Hak akses',
 'listgrouprights-members' => '(daftar anggota)',
+'listgrouprights-right-display' => '<span class="listgrouprights-granted">$1 <code>($2)</code></span>',
+'listgrouprights-right-revoked' => '<span class="listgrouprights-revoked">$1 <code>($2)</code></span>',
 'listgrouprights-addgroup' => 'Menambahkan {{PLURAL:$2|kelompok|kelompok}}: $1',
 'listgrouprights-removegroup' => 'Menghapus {{PLURAL:$2|kelompok|kelompok}}: $1',
 'listgrouprights-addgroup-all' => 'Menambahkan semua kelompok',
@@ -2263,7 +2312,7 @@ Protokol yang didukung: <code>$1</code> (menggunakan http:// bila protokol tidak
 'emailuser-title-target' => 'Kirim surel ke {{GENDER:$1|pengguna}} ini',
 'emailuser-title-notarget' => 'Kirim surel',
 'emailpage' => 'Kirim surel ke pengguna ini',
-'emailpagetext' => 'Anda dapat menggunakan formulir di bawah ini untuk mengirimkan surel ke pengguna ini.
+'emailpagetext' => 'Anda dapat menggunakan formulir di bawah ini untuk mengirimkan surel ke {{GENDER:$1|pengguna}} ini.
 Alamat surel yang Anda masukkan di [[Special:Preferences|preferensi akun Anda]] akan muncul sebagai alamat "Dari" dalam surel tersebut, sehingga penerima dapat langsung membalas kepada Anda.',
 'usermailererror' => 'Kesalahan objek surat:',
 'defemailsubject' => 'Surel {{SITENAME}} dari pengguna "$1"',
@@ -2292,6 +2341,7 @@ Alamat surel yang Anda masukkan di [[Special:Preferences|preferensi akun Anda]]
 # User Messenger
 'usermessage-summary' => 'Tinggalkan pesan sistem.',
 'usermessage-editor' => 'Penyampai pesan sistem',
+'usermessage-template' => 'MediaWiki:UserMessage',
 
 # Watchlist
 'watchlist' => 'Daftar pantauan',
@@ -2302,8 +2352,8 @@ Alamat surel yang Anda masukkan di [[Special:Preferences|preferensi akun Anda]]
 'watchnologin' => 'Belum masuk log',
 'watchnologintext' => 'Anda harus [[Special:UserLogin|masuk log]] untuk mengubah daftar pantauan Anda.',
 'addwatch' => 'Tambahkan ke daftar pantauan',
-'addedwatchtext' => "Halaman \"[[:\$1]]\" telah ditambahkan ke [[Special:Watchlist|daftar pantauan]] Anda.
-Perubahan-perubahan berikutnya pada halaman tersebut dan halaman pembicaraan terkaitnya akan tercantum di sini, dan halaman itu akan ditampilkan '''tebal''' pada [[Special:RecentChanges|daftar perubahan terbaru]] agar lebih mudah terlihat.",
+'addedwatchtext' => 'Halaman "[[:$1]]" telah ditambahkan ke [[Special:Watchlist|daftar pantauan]] Anda.
+Perubahan-perubahan berikutnya pada halaman tersebut dan halaman pembicaraan terkaitnya akan tercantum di sini.',
 'removewatch' => 'Hapus dari daftar pantauan',
 'removedwatchtext' => 'Halaman "[[:$1]]" telah dihapus dari [[Special:Watchlist|daftar pantauan]] Anda.',
 'watch' => 'Pantau',
@@ -2332,15 +2382,22 @@ Perubahan-perubahan berikutnya pada halaman tersebut dan halaman pembicaraan ter
 'enotif_mailer' => 'Pengirim Notifikasi {{SITENAME}}',
 'enotif_reset' => 'Tandai semua halaman sebagai telah dikunjungi',
 'enotif_impersonal_salutation' => 'Pengguna {{SITENAME}}',
+'enotif_subject_deleted' => 'Halaman $1 di {{SITENAME}} telah dihapus oleh {{gender:$2|$2}}',
+'enotif_subject_created' => 'Halaman $1 di {{SITENAME}} telah dibuat oleh {{gender:$2|$2}}',
+'enotif_subject_moved' => 'Halaman $1 di {{SITENAME}} telah dipindahkan oleh {{gender:$2|$2}}',
+'enotif_subject_restored' => 'Halaman $1 di {{SITENAME}} telah dikembalikan oleh {{gender:$2|$2}}',
+'enotif_subject_changed' => 'Halaman $1 di {{SITENAME}} telah diubah oleh {{gender:$2|$2}}',
+'enotif_body_intro_deleted' => 'Halaman $1 di {{SITENAME}} telah dihapus pada $PAGEEDITDATE oleh {{gender:$2|$2}}, lihat $3.',
+'enotif_body_intro_created' => 'Halaman $1 di {{SITENAME}} telah dibuat pada $PAGEEDITDATE oleh {{gender:$2|$2}}, lihat $3 untuk revisi terkini.',
+'enotif_body_intro_moved' => 'Halaman $1 di {{SITENAME}} telah dipindahkan pada $PAGEEDITDATE oleh {{gender:$2|$2}}, lihat $3 untuk revisi terkini.',
+'enotif_body_intro_restored' => 'Halaman $1 di {{SITENAME}} telah dikembalikan pada $PAGEEDITDATE oleh {{gender:$2|$2}}, lihat $3 untuk revisi terkini.',
+'enotif_body_intro_changed' => 'Halaman $1 di {{SITENAME}} telah diubah pada $PAGEEDITDATE oleh {{gender:$2|$2}}, lihat $3 untuk revisi terkini.',
 'enotif_lastvisited' => 'Lihat $1 untuk semua perubahan sejak kunjungan terakhir Anda.',
 'enotif_lastdiff' => 'Kunjungi $1 untuk melihat perubahan ini.',
 'enotif_anon_editor' => 'pengguna anonim $1',
 'enotif_body' => 'Halo $WATCHINGUSERNAME,
 
-
-Halaman $PAGETITLE di {{SITENAME}} telah $CHANGEDORCREATED pada $PAGEEDITDATE oleh $PAGEEDITOR, lihat $PAGETITLE_URL untuk revisi terakhir.
-
-$NEWPAGE
+$PAGEINTRO $NEWPAGE
 
 Ringkasan suntingan: $PAGESUMMARY $PAGEMINOREDIT
 
@@ -2351,7 +2408,7 @@ wiki: $PAGEEDITOR_WIKI
 Kami tidak akan mengirim pemberitahuan lain bila ada perubahan lebih lanjut sampai Anda mengunjungi halaman ini.
 Anda juga dapat menyetel ulang tanda pemberitahuan untuk semua halaman pantauan pada daftar pantauan Anda.
 
-             Sistem pemberitahuan situs {{SITENAME}}
+Sistem pemberitahuan situs {{SITENAME}}
 
 --
 Untuk mengubah setelan pemberitahuan surel, kunjungi
@@ -2365,6 +2422,8 @@ $UNWATCHURL
 
 Umpan balik dan bantuan lebih lanjut:
 {{canonicalurl:{{MediaWiki:Helppage}}}}',
+'created' => 'dibuat',
+'changed' => 'diubah',
 
 # Delete
 'deletepage' => 'Hapus halaman',
@@ -2432,6 +2491,8 @@ Lihat [[Special:ProtectedPages|daftar halaman terlindungi]] untuk daftar perlind
 'prot_1movedto2' => '[[$1]] dipindahkan ke [[$2]]',
 'protect-badnamespace-title' => 'Ruang nama yang tidak dapat dilindungi',
 'protect-badnamespace-text' => 'Halaman dalam ruang nama ini tidak dapat dilindungi.',
+'protect-norestrictiontypes-text' => 'Halaman ini tidak dapat dilindungi karena tidak ada tipe pembatasan yang tersedia.',
+'protect-norestrictiontypes-title' => 'Halaman tak-dilindungi',
 'protect-legend' => 'Konfirmasi pelindungan',
 'protectcomment' => 'Alasan:',
 'protectexpiry' => 'Kedaluwarsa:',
@@ -2444,9 +2505,10 @@ Lihat [[Special:ProtectedPages|daftar halaman terlindungi]] untuk daftar perlind
 'protect-locked-access' => "Akun Anda tidak dapat memiliki hak untuk mengganti tingkat pelindungan halaman. Berikut adalah konfigurasi saat ini untuk halaman '''$1''':",
 'protect-cascadeon' => 'Halaman ini sedang dilindungi karena disertakan dalam {{PLURAL:$1|halaman|halaman-halaman}} berikut yang telah dilindungi dengan pilihan pelindungan runtun diaktifkan. Anda dapat mengganti tingkat pelindungan untuk halaman ini, tapi hal tersebut tidak akan mempengaruhi pelindungan runtun.',
 'protect-default' => 'Izinkan semua pengguna',
-'protect-fallback' => 'Memerlukan hak akses "$1"',
-'protect-level-autoconfirmed' => 'Blokir pengguna baru dan tak terdaftar',
-'protect-level-sysop' => 'Hanya pengurus',
+'protect-fallback' => 'Hanya untuk pengguna dengan izin  "$1"',
+'protect-level-autoconfirmed' => 'Hanya untuk pengguna terdaftar otomatis',
+'protect-level-sysop' => 'Hanya untuk pengurus',
+'protect-summary-desc' => '[$1=$2] ($3)',
 'protect-summary-cascade' => 'runtun',
 'protect-expiring' => 'kedaluwarsa $1 (UTC)',
 'protect-expiring-local' => 'kedaluwarsa $1',
@@ -2509,7 +2571,8 @@ Alasan penghapusan diberikan pada ringkasan di bawah ini, berikut rincian penggu
 'undeletedrevisions' => '$1 {{PLURAL:$1|revisi|revisi}} telah dikembalikan',
 'undeletedrevisions-files' => '$1 {{PLURAL:$1|revisi|revisi}} and $2 berkas dikembalikan',
 'undeletedfiles' => '$1 {{PLURAL:$1|berkas|berkas}} dikembalikan',
-'cannotundelete' => 'Pembatalan penghapusan gagal; mungkin ada orang lain yang telah terlebih dahulu melakukan pembatalan.',
+'cannotundelete' => 'Pembatalan penghapusan gagal:
+$1',
 'undeletedpage' => "'''$1 berhasil dikembalikan'''
 
 Lihat [[Special:Log/delete|log penghapusan]] untuk data penghapusan dan pengembalian.",
@@ -2530,17 +2593,18 @@ Lihat [[Special:Log/delete|log penghapusan]] untuk data penghapusan dan pengemba
 $1',
 'undelete-show-file-confirm' => 'Apakah Anda yakin ingin melihat revisi yang telah dihapus dari berkas "<nowiki>$1</nowiki>" per $3, $2?',
 'undelete-show-file-submit' => 'Ya',
+'undelete-revisionrow' => '$1 $2 ($3) $4 . . $5 $6 $7',
 
 # Namespace form on various pages
 'namespace' => 'Ruang nama:',
 'invert' => 'Balikkan pilihan',
 'tooltip-invert' => 'Centang kotak ini untuk menyembunyikan perubahan halaman dalam ruang nama yang dipilih (dan ruang nama terkait jika dicentang)',
-'namespace_association' => 'Ruang nama terkait',
+'namespace_association' => 'Ruangnama terkait',
 'tooltip-namespace_association' => 'Centang halaman ini untuk menyertakan ruang nama pembicaraan atau subjek yang terkait dengan ruang nama terpilih',
 'blanknamespace' => '(Utama)',
 
 # Contributions
-'contributions' => 'Kontribusi pengguna',
+'contributions' => 'Kontribusi {{GENDER:$1|pengguna}}',
 'contributions-title' => 'Kontribusi pengguna untuk $1',
 'mycontris' => 'Kontribusi',
 'contribsub2' => 'Untuk $1 ($2)',
@@ -2704,6 +2768,7 @@ Lihat [[Special:BlockList|daftar pemblokiran]] untuk semua pengguna yang saat in
 'proxyblocker-disabled' => 'Fitur ini sedang tidak diakfifkan.',
 'proxyblockreason' => 'Alamat IP Anda telah diblokir karena alamat IP Anda adalah proxy terbuka. Silakan hubungi penyedia jasa internet Anda atau dukungan teknis dan beritahukan mereka masalah keamanan serius ini.',
 'proxyblocksuccess' => 'Selesai.',
+'sorbs' => 'DNSBL',
 'sorbsreason' => 'Alamat IP anda terdaftar sebagai proxy terbuka di DNSBL.',
 'sorbs_create_account_reason' => 'Alamat IP anda terdaftar sebagai proxy terbuka di DNSBL. Anda tidak dapat membuat akun.',
 'cant-block-while-blocked' => 'Anda tidak dapat memblokir pengguna lain ketika Anda sendiri sedang diblokir.',
@@ -2733,11 +2798,18 @@ Pastikan Anda [[Special:UnlockDB|membuka kuncinya]] setelah pemeliharaan selesai
 # Move page
 'move-page' => 'Pindahkan $1',
 'move-page-legend' => 'Pindahkan halaman',
-'movepagetext' => "Formulir di bawah ini digunakan untuk mengubah nama suatu halaman dan memindahkan semua data sejarah ke nama baru. Judul yang lama akan menjadi halaman peralihan menuju judul yang baru. Pranala kepada judul lama tidak akan berubah. Pastikan untuk memeriksa terhadap peralihan halaman yang rusak atau berganda setelah pemindahan. Anda bertanggung jawab untuk memastikan bahwa pranala terus menyambung ke halaman yang seharusnya.
+'movepagetext' => "Menggunakan formulir di bawah ini akan mengubah nama suatu halaman dan memindahkan semua data sejarah ke nama baru.
+Judul lama akan menjadi halaman pengalihan ke judul baru.
+Anda dapat memperbarui pengalihan yang menuju ke judul asli secara otomatis.
+Jika Anda memilih tidak, pastikan untuk memeriksa
+[[Special:DoubleRedirects|double]] atau [[Special:BrokenRedirects|broken redirects]].
+Anda bertanggung jawab untuk memastikan bahwa pranala terhubung ke tempat seharusnya.
 
-Perhatikan bahwa halaman '''tidak''' akan dipindah apabila telah ada halaman yang menggunakan judul yang baru, kecuali bila halaman tersebut kosong atau merupakan halaman peralihan dan tidak mempunyai sejarah penyuntingan. Ini berarti Anda dapat mengubah nama halaman kembali seperti semula apabila Anda membuat kesalahan, dan Anda tidak dapat menimpa halaman yang telah ada.
+Perhatikan bahwa halaman '''tidak''' akan dipindah apabila telah ada halaman pada judul yang baru, kecuali bila halaman peralihan dan tidak mempunyai sejarah penyuntingan. 
+Ini berarti Anda dapat mengubah kembali nama halaman seperti semula apabila Anda membuat kesalahan, dan Anda tidak dapat menimpa halaman yang telah ada.
 
-'''Peringatan:''' Ini dapat mengakibatkan perubahan yang tak terduga dan drastis  bagi halaman yang populer. Pastikan Anda mengerti konsekuensi dari perbuatan ini sebelum melanjutkan.",
+'''Peringatan:'''
+Ini dapat mengakibatkan perubahan drastis dan tak terduga bagi halaman yang populer; pastikan Anda mengerti konsekuensinya sebelum melanjutkan.",
 'movepagetext-noredirectfixer' => "Formulir di bawah ini digunakan untuk mengubah nama suatu halaman dan memindahkan semua data sejarah ke nama baru.
 Judul yang lama akan menjadi halaman peralihan menuju judul yang baru.
 Pastikan untuk memeriksa pengalihan [[Special:DoubleRedirects|ganda]] atau [[Special:BrokenRedirects|rusak]].
@@ -2799,6 +2871,7 @@ Halaman yang dituju, "[[:$1]]", telah mempunyai isi. Apakah Anda hendak menghapu
 'immobile-target-namespace-iw' => 'Pranala interwiki bukanlah target yang valid untuk pemindahan halaman.',
 'immobile-source-page' => 'Halaman ini tidak dapat dipindahkan.',
 'immobile-target-page' => 'Tidak dapat memindahkan ke judul tujuan tersebut.',
+'bad-target-model' => 'Tujuan yang diinginkan menggunakan model konten yang berbeda. Tidak dapat mengkonversi dari  $1  untuk  $2 .',
 'imagenocrossnamespace' => 'Tidak dapat memindahkan berkas ke ruang nama non-berkas',
 'nonfile-cannot-move-to-file' => 'Tidak dapat memindahkan non-berkas ke ruang nama berkas',
 'imagetypemismatch' => 'Ekstensi yang diberikan tidak cocok dengan tipe berkas',
@@ -2879,6 +2952,7 @@ Semua aktivitas impor transwiki akan dicatat di [[Special:Log/import|log impor]]
 'import-interwiki-templates' => 'Sertakan semua templat',
 'import-interwiki-submit' => 'Impor',
 'import-interwiki-namespace' => 'Ruang nama tujuan:',
+'import-interwiki-rootpage' => 'Halaman turunan tujuan (opsional):',
 'import-upload-filename' => 'Nama berkas:',
 'import-comment' => 'Komentar:',
 'importtext' => 'Silakan ekspor berkas dari wiki sumber dengan menggunakan [[Special:Export|fasilitas ekspor]].
@@ -2911,6 +2985,10 @@ Simpan ke komputer Anda dan unggah ke sini.',
 'import-error-interwiki' => 'Halaman " $1 " tidak diimpor karena namanya dicadangkan untuk pranala eksternal (interwiki).',
 'import-error-special' => 'Halaman " $1 " tidak diimpor karena milik ruang nama khusus yang tidak mengizinkan adanya halaman.',
 'import-error-invalid' => 'Halaman "$1" tidak diimpor karena namanya tidak valid.',
+'import-error-unserialize' => 'Revisi  $2  halaman " $1 " tidak bisa diurutkan. Revisi dilaporkan untuk menggunakan konten model $3 urutan sebagai $4 .',
+'import-options-wrong' => '{{PLURAL:$2|Opsi|Opsi}} salah: <nowiki>$1</nowiki>',
+'import-rootpage-invalid' => 'Halaman turunan yang diberikan adalah judul yang salah.',
+'import-rootpage-nosubpage' => 'Ruang nama "$1" di halaman turunan tidak mengizinkan subhalaman.',
 
 # Import log
 'importlogpage' => 'Log impor',
@@ -3000,18 +3078,23 @@ Simpan ke komputer Anda dan unggah ke sini.',
 'tooltip-summary' => 'Masukkan sebuah ringkasan pendek',
 
 # Stylesheets
-'common.css' => '/* CSS yang ada di sini akan diterapkan untuk semua kulit. */',
-'standard.css' => '/* CSS yang ada di sini akan diterapkan untuk kulit Standard. */',
-'nostalgia.css' => '/* CSS yang ada di sini akan diterapkan untuk kulit Nostalgia. */',
-'cologneblue.css' => '/* CSS yang ada di sini akan diterapkan untuk kulit Cologne Blue. */',
-'monobook.css' => '/* CSS yang ada di sini akan diterapkan untuk kulit Monobook. */',
-'myskin.css' => '/* CSS yang ada di sini akan diterapkan untuk kulit MySkin. */',
-'chick.css' => '/* CSS yang ada di sini akan diterapkan untuk kulit Chick. */',
-'simple.css' => '/* CSS yang ada di sini akan diterapkan untuk kulit Simple. */',
-'modern.css' => '/* CSS yang ada di sini akan diterapkan untuk kulit Modern. */',
-'vector.css' => '/* CSS yang ada di sini akan diterapkan untuk kulit Vector. */',
-'print.css' => '/* CSS yang ada di sini akan diterapkan untuk tampilan cetak. */',
+'common.css' => '/* CSS yang ada di sini akan diterapkan pada semua kulit. */',
+'standard.css' => '/* CSS yang ada di sini akan diterapkan pada kulit Standar. */',
+'nostalgia.css' => '/* CSS yang ada di sini akan diterapkan pada kulit Nostalgia. */',
+'cologneblue.css' => '/* CSS yang ada di sini akan diterapkan pada kulit Cologne Blue. */',
+'monobook.css' => '/* CSS yang ada di sini akan diterapkan pada kulit Monobook. */',
+'myskin.css' => '/* CSS yang ada di sini akan diterapkan pada kulit MySkin. */',
+'chick.css' => '/* CSS yang ada di sini akan diterapkan pada kulit Chick. */',
+'simple.css' => '/* CSS yang ada di sini akan diterapkan pada kulit Sederhana. */',
+'modern.css' => '/* CSS yang ada di sini akan diterapkan pada kulit Modern. */',
+'vector.css' => '/* CSS yang ada di sini akan diterapkan pada kulit Vektor. */',
+'print.css' => '/* CSS yang ada di sini akan diterapkan pada tampilan cetak. */',
 'handheld.css' => '/* CSS yang ada di sini akan diterapkan untuk tampilan piranti genggam yang dikonfigurasi di $wgHandheldStyle. */',
+'noscript.css' => '/* CSS di sini akan mempengaruhi pengguna dengan skrip Java non-aktif */',
+'group-autoconfirmed.css' => '/* CSS di sini hanya mempengaruhi pengguna terkonfirmasi otomatis */',
+'group-bot.css' => '/* CSS di sini hanya mempengaruhi bot */',
+'group-sysop.css' => '/* CSS di sini hanya mempengaruhi pengurus */',
+'group-bureaucrat.css' => '/* CSS di sini hanya mempengaruhi birokrat */',
 
 # Scripts
 'common.js' => '/* JavaScript yang ada di sini akan diterapkan untuk semua kulit. */',
@@ -3024,6 +3107,10 @@ Simpan ke komputer Anda dan unggah ke sini.',
 'simple.js' => '/* Semua JavaScript di sini akan dimuatkan untuk para pengguna yang menggunakan kulit Simple */',
 'modern.js' => '/* Semua JavaScript di sini akan dimuatkan untuk para pengguna yang menggunakan kulit Modern */',
 'vector.js' => '/* Semua JavaScript di sini akan dimuatkan untuk para pengguna yang menggunakan kulit Vector */',
+'group-autoconfirmed.js' => '/* Semua JavaScript di sini hanya dimuatkan untuk pengguna terkonfirmasi otomatis */',
+'group-bot.js' => '/* Semua JavaScript di sini hanya dimuatkan untuk bot */',
+'group-sysop.js' => '/* Semua JavaScript di sini hanya dimuatkan untuk pengurus */',
+'group-bureaucrat.js' => '/* Semua JavaScript di sini hanya dimuatkan untuk birokrat */',
 
 # Metadata
 'notacceptable' => 'Server wiki tidak dapat menyediakan data dalam format yang dapat dibaca oleh client Anda.',
@@ -3052,6 +3139,7 @@ Ini mungkin disebabkan oleh pranala ke situs luar yang termasuk dalam daftar hit
 
 # Info page
 'pageinfo-title' => 'Informasi untuk "$1"',
+'pageinfo-not-current' => 'Maaf, tidak mungkin memberikan informasi ini ke revisi lama.',
 'pageinfo-header-basic' => 'Informasi dasar',
 'pageinfo-header-edits' => 'Sejarah suntingan',
 'pageinfo-header-restrictions' => 'Perlindungan halaman',
@@ -3067,22 +3155,44 @@ Ini mungkin disebabkan oleh pranala ke situs luar yang termasuk dalam daftar hit
 'pageinfo-views' => 'Jumlah penampilan',
 'pageinfo-watchers' => 'Jumlah pemantau halaman',
 'pageinfo-redirects-name' => 'Pengalihan ke halaman ini',
+'pageinfo-redirects-value' => '$1',
 'pageinfo-subpages-name' => 'Subhalaman halaman ini',
+'pageinfo-subpages-value' => '$1 ($2 {{PLURAL:$2|pengalihan|pengalihan}}; $3 {{PLURAL:$3|non-pengalihan|non-pengalihan}})',
 'pageinfo-firstuser' => 'Pembuat halaman',
 'pageinfo-firsttime' => 'Tanggal pembuatan halaman',
 'pageinfo-lastuser' => 'Penyunting terakhir',
 'pageinfo-lasttime' => 'Tanggal suntingan terakhir',
 'pageinfo-edits' => 'Jumlah total suntingan',
 'pageinfo-authors' => 'Jumlah total penulis yang berbeda',
+'pageinfo-recent-edits' => 'Jumlah suntingan terkini (dalam $1 terakhir)',
+'pageinfo-recent-authors' => 'Jumlah penulis berbeda terkini',
+'pageinfo-magic-words' => '{{PLURAL:$1|Kata|Kata}} ajaib ($1)',
+'pageinfo-hidden-categories' => '{{PLURAL:$1|Kategori|Kategori}} tersembunyi ($1)',
+'pageinfo-templates' => '{{PLURAL:$1|Templat|Templat}} yang ditransklusi ($1)',
+'pageinfo-transclusions' => '{{PLURAL:$1|Halaman|Halaman}} ditransklusikan pada ( $1 )',
 'pageinfo-toolboxlink' => 'Informasi halaman',
 'pageinfo-redirectsto' => 'Beralih ke',
 'pageinfo-redirectsto-info' => 'Info',
+'pageinfo-contentpage' => 'Dihitung sebagai halaman konten',
 'pageinfo-contentpage-yes' => 'Ya',
+'pageinfo-protect-cascading' => 'Perlindungan berurutan dari sini',
 'pageinfo-protect-cascading-yes' => 'Ya',
+'pageinfo-protect-cascading-from' => 'Perlindungan mulai dari',
+'pageinfo-category-info' => 'Kategori informasi',
+'pageinfo-category-pages' => 'Jumlah halaman',
+'pageinfo-category-subcats' => 'Jumlah subkategori',
+'pageinfo-category-files' => 'Jumlah berkas',
 
 # Skin names
 'skinname-standard' => 'Klasik',
+'skinname-nostalgia' => 'Nostalgia',
+'skinname-cologneblue' => 'Biru Köln',
+'skinname-monobook' => 'MonoBook',
+'skinname-myskin' => 'MySkin',
+'skinname-chick' => 'Chick',
 'skinname-simple' => 'Sederhana',
+'skinname-modern' => 'Modern',
+'skinname-vector' => 'Vektor',
 
 # Patrolling
 'markaspatrolleddiff' => 'Tandai telah dipatroli',
@@ -3094,6 +3204,8 @@ Ini mungkin disebabkan oleh pranala ke situs luar yang termasuk dalam daftar hit
 'markedaspatrollederror' => 'Tidak dapat menandai telah dipatroli',
 'markedaspatrollederrortext' => 'Anda harus menentukan satu revisi untuk ditandai sebagai yang dipatroli.',
 'markedaspatrollederror-noautopatrol' => 'Anda tidak diizinkan menandai suntingan Anda sendiri dipatroli.',
+'markedaspatrollednotify' => 'Perubahan ini untuk $1 telah ditandai terpatroli.',
+'markedaspatrollederrornotify' => 'Menandai sebagai terpatroli gagal.',
 
 # Patrol log
 'patrol-log-page' => 'Log patroli',
@@ -3120,12 +3232,15 @@ $1',
 Jika dijalankan, sistem Anda akan berisiko terserang.",
 'imagemaxsize' => "Batas ukuran gambar:<br />''(untuk halaman deskripsi berkas)''",
 'thumbsize' => 'Ukuran miniatur:',
+'widthheight' => '$1 × $2',
 'widthheightpage' => '$1 × $2, $3 {{PLURAL:$3|halaman|halaman}}',
 'file-info' => 'ukuran berkas: $1, tipe MIME: $2',
 'file-info-size' => '$1 × $2 piksel, ukuran berkas: $3, tipe MIME: $4',
 'file-info-size-pages' => '$1 × $2 piksel, ukuran berkas: $3, jenis MIME: $4, $5 {{PLURAL:$5|halaman|halaman}}',
 'file-nohires' => 'Tak tersedia resolusi yang lebih tinggi.',
 'svg-long-desc' => 'Berkas SVG, nominal $1 × $2 piksel, besar berkas: $3',
+'svg-long-desc-animated' => 'Berkas SVG animasi, biasanya $1 x $2 piksel, ukuran gambar: $3',
+'svg-long-error' => 'Berkas SVG tidak sah: $1',
 'show-big-image' => 'Resolusi penuh',
 'show-big-image-preview' => 'Ukuran pratayang ini: $1.',
 'show-big-image-other' => '{{PLURAL:$2|Resolusi|Resolusi}} lain: $1.',
@@ -3135,6 +3250,8 @@ Jika dijalankan, sistem Anda akan berisiko terserang.",
 'file-info-png-looped' => 'ulang',
 'file-info-png-repeat' => 'dimainkan $1 {{PLURAL:$1|kali|kali}}',
 'file-info-png-frames' => '$1 {{PLURAL:$1|bingkai|bingkai}}',
+'file-no-thumb-animation' => "'''Catatan: Karena keterbatasan teknis, cuplikan berkas ini tidak akan teranimasikan.'''",
+'file-no-thumb-animation-gif' => "'''Catatan: Karena keterbatasan teknis, cuplikan gambar GIF beresolusi tinggi seperti yang satu ini tidak akan teranimasikan.'''",
 
 # Special:NewFiles
 'newimages' => 'Berkas baru',
@@ -3149,14 +3266,19 @@ Jika dijalankan, sistem Anda akan berisiko terserang.",
 'sp-newimages-showfrom' => 'Tampilkan berkas baru dimulai dari $2, $1',
 
 # Video information, used by Language::formatTimePeriod() to format lengths in the above messages
-'seconds-abbrev' => '$1d',
-'minutes-abbrev' => '$1m',
-'hours-abbrev' => '$1j',
+'video-dims' => '$1, $2 × $3',
+'seconds-abbrev' => '$1 d',
+'minutes-abbrev' => '$1 m',
+'hours-abbrev' => '$1 j',
+'days-abbrev' => '$1 h',
 'seconds' => '{{PLURAL:$1|$1 detik|$1 detik}}',
 'minutes' => '{{PLURAL:$1|$1 menit|$1 menit}}',
 'hours' => '{{PLURAL:$1|$1 jam|$1 jam}}',
 'days' => '{{PLURAL:$1|$1 hari|$1 hari}}',
+'months' => '{{PLURAL:$1|$1 bulan|$1 bulan}}',
+'years' => '{{PLURAL:$1|$1 tahun|$1 tahun}}',
 'ago' => '$1 yang lalu',
+'just-now' => 'baru saja',
 
 # Bad image list
 'bad_image_list' => 'Formatnya sebagai berikut:
@@ -3165,6 +3287,37 @@ Hanya butir daftar (baris yang diawali dengan tanda *) yang diperhitungkan.
 Pranala pertama pada suatu baris haruslah pranala ke berkas yang buruk.
 Pranala-pranala selanjutnya pada baris yang sama dianggap sebagai pengecualian, yaitu halaman yang dapat menampilkan berkas tersebut.',
 
+/*
+Short names for language variants used for language conversion links.
+To disable showing a particular link, set it to 'disable', e.g.
+'variantname-zh-sg' => 'disable',
+Variants for Chinese language
+*/
+'variantname-zh-hans' => 'hans',
+'variantname-zh-hant' => 'hant',
+'variantname-zh-cn' => 'cn',
+'variantname-zh-tw' => 'tw',
+'variantname-zh-hk' => 'hk',
+'variantname-zh-mo' => 'mo',
+'variantname-zh-sg' => 'sg',
+'variantname-zh-my' => 'my',
+'variantname-zh' => 'zh',
+
+# Variants for Gan language
+'variantname-gan-hans' => 'hans',
+'variantname-gan-hant' => 'hant',
+'variantname-gan' => 'gan',
+
+# Variants for Serbian language
+'variantname-sr-ec' => 'sr-ec',
+'variantname-sr-el' => 'sr-el',
+'variantname-sr' => 'sr',
+
+# Variants for Kazakh language
+'variantname-kk-kz' => 'kk-kz',
+'variantname-kk-tr' => 'kk-tr',
+'variantname-kk-cn' => 'kk-cn',
+
 # Metadata
 'metadata' => 'Metadata',
 'metadata-help' => 'Berkas ini mengandung informasi tambahan yang mungkin ditambahkan oleh kamera digital atau pemindai yang digunakan untuk membuat atau mendigitalisasi berkas. Jika berkas ini telah mengalami modifikasi, rincian yang ada mungkin tidak secara penuh merefleksikan informasi dari gambar yang sudah dimodifikasi ini.',
@@ -3185,6 +3338,8 @@ Data lain akan disembunyikan secara bawaan.
 * gpslatitude
 * gpslongitude
 * gpsaltitude',
+'metadata-langitem' => "'''$2:''' $1",
+'metadata-langitem-default' => '$1',
 
 # EXIF tags
 'exif-imagewidth' => 'Lebar',
@@ -3232,6 +3387,7 @@ Data lain akan disembunyikan secara bawaan.
 'exif-exposuretime' => 'Waktu pajanan',
 'exif-exposuretime-format' => '$1 detik ($2)',
 'exif-fnumber' => 'Nilai F',
+'exif-fnumber-format' => 'f/$1',
 'exif-exposureprogram' => 'Program pajanan',
 'exif-spectralsensitivity' => 'Sensitivitas spektral',
 'exif-isospeedratings' => 'Rating kecepatan ISO',
@@ -3245,6 +3401,7 @@ Data lain akan disembunyikan secara bawaan.
 'exif-lightsource' => 'Sumber cahaya',
 'exif-flash' => 'Kilas',
 'exif-focallength' => 'Jarak fokus lensa',
+'exif-focallength-format' => '$1 mm',
 'exif-subjectarea' => 'Wilayah subjek',
 'exif-flashenergy' => 'Energi kilas',
 'exif-focalplanexresolution' => 'Resolusi bidang fokus X',
@@ -3299,6 +3456,7 @@ Data lain akan disembunyikan secara bawaan.
 'exif-gpsareainformation' => 'Nama wilayah GPS',
 'exif-gpsdatestamp' => 'Tanggal GPS',
 'exif-gpsdifferential' => 'Koreksi diferensial GPS',
+'exif-coordinate-format' => '$1° $2′ $3″ $4',
 'exif-jpegfilecomment' => 'Komentar berkas JPEG',
 'exif-keywords' => 'Kata kunci',
 'exif-worldregioncreated' => 'Wilayah dunia tempat pengambilan gambar',
@@ -3364,15 +3522,37 @@ Data lain akan disembunyikan secara bawaan.
 'exif-originalimageheight' => 'Tinggi gambar sebelum dipotong',
 'exif-originalimagewidth' => 'Lebar gambar sebelum dipotong',
 
+# Make & model, can be wikified in order to link to the camera and model name
+'exif-contact-value' => '$1
+
+$2
+<div class="adr">
+$3
+
+$4, $5 - $6, $7
+</div>
+$8',
+'exif-subjectnewscode-value' => '$2 ($1)',
+
 # EXIF attributes
 'exif-compression-1' => 'Tak terkompresi',
 'exif-compression-2' => 'CCITT Group 3 1-Dimensional Modified Huffman RLE',
 'exif-compression-3' => 'CCITT Group 3 fax encoding',
 'exif-compression-4' => 'CCITT Group 4 fax encoding',
+'exif-compression-5' => 'LZW',
+'exif-compression-6' => 'JPEG (lama)',
+'exif-compression-7' => 'JPEG',
+'exif-compression-8' => 'Turunan (Adobe)',
+'exif-compression-32773' => 'PackBits (Macintosh RLE)',
+'exif-compression-32946' => 'Turunan (PKZIP)',
+'exif-compression-34712' => 'JPEG2000',
 
 'exif-copyrighted-true' => 'Berhak cipta',
 'exif-copyrighted-false' => 'Domain publik',
 
+'exif-photometricinterpretation-2' => 'RGB',
+'exif-photometricinterpretation-6' => 'YCbCr',
+
 'exif-unknowndate' => 'Tanggal tak diketahui',
 
 'exif-orientation-1' => 'Normal',
@@ -3387,9 +3567,19 @@ Data lain akan disembunyikan secara bawaan.
 'exif-planarconfiguration-1' => 'format chunky',
 'exif-planarconfiguration-2' => 'format planar',
 
+'exif-xyresolution-i' => '$1 dpi',
+'exif-xyresolution-c' => '$1 dpc',
+
+'exif-colorspace-1' => 'sRGB',
 'exif-colorspace-65535' => 'Tidak dikalibrasi',
 
 'exif-componentsconfiguration-0' => 'tak tersedia',
+'exif-componentsconfiguration-1' => 'Y',
+'exif-componentsconfiguration-2' => 'Cb',
+'exif-componentsconfiguration-3' => 'Cr',
+'exif-componentsconfiguration-4' => 'R',
+'exif-componentsconfiguration-5' => 'G',
+'exif-componentsconfiguration-6' => 'B',
 
 'exif-exposureprogram-0' => 'Tak terdefinisi',
 'exif-exposureprogram-1' => 'Manual',
@@ -3427,6 +3617,10 @@ Data lain akan disembunyikan secara bawaan.
 'exif-lightsource-17' => 'Cahaya standar A',
 'exif-lightsource-18' => 'Cahaya standar B',
 'exif-lightsource-19' => 'Cahaya standar C',
+'exif-lightsource-20' => 'D55',
+'exif-lightsource-21' => 'D65',
+'exif-lightsource-22' => 'D75',
+'exif-lightsource-23' => 'D50',
 'exif-lightsource-24' => 'studio ISO tungsten',
 'exif-lightsource-255' => 'Sumber cahaya lain',
 
@@ -3552,6 +3746,8 @@ Data lain akan disembunyikan secara bawaan.
 
 'exif-isospeedratings-overflow' => 'Lebih dari 65535',
 
+'exif-maxaperturevalue-value' => '$1 APEX (f/$2)',
+
 'exif-iimcategory-ace' => 'Seni, budaya, dan hiburan',
 'exif-iimcategory-clj' => 'Kejahatan dan hukum',
 'exif-iimcategory-dis' => 'Bencana dan kecelakaan',
@@ -3652,6 +3848,7 @@ Kode konfirmasi ini akan kedaluwarsa pada $4.',
 # Scary transclusion
 'scarytranscludedisabled' => '[Transklusi interwiki dimatikan]',
 'scarytranscludefailed' => '[Pengambilan templat $1 gagal]',
+'scarytranscludefailed-httpstatus' => '[Pengambilan templat $1 gagal: HTTP $2]',
 'scarytranscludetoolong' => '[URL terlalu panjang]',
 
 # Delete conflict
@@ -3662,6 +3859,8 @@ Silakan konfirmasi jika Anda ingin membuat ulang halaman ini.",
 'confirmrecreate-noreason' => 'Pengguna [[User:$1|$1]] ([[User talk:$1|bicara]]) telah menghapus halaman ini setelah Anda mulai menyunting. Harap konfirmasikan bahwa Anda ingin membuat ulang halaman ini.',
 'recreate' => 'Buat ulang',
 
+'unit-pixel' => 'px',
+
 # action=purge
 'confirm_purge_button' => 'OK',
 'confirm-purge-top' => 'Hapus singgahan halaman ini?',
@@ -3673,6 +3872,15 @@ Silakan konfirmasi jika Anda ingin membuat ulang halaman ini.",
 'confirm-unwatch-button' => 'OK',
 'confirm-unwatch-top' => 'Hapus halaman ini dari daftar pantauan Anda?',
 
+# Separators for various lists, etc.
+'semicolon-separator' => ';&#32;',
+'comma-separator' => ',&#32;',
+'colon-separator' => ':&#32;',
+'autocomment-prefix' => '-&#32;',
+'pipe-separator' => '&#32;|&#32;',
+'word-separator' => '&#32;',
+'ellipsis' => '...',
+
 # Multipage image navigation
 'imgmultipageprev' => '&larr; halaman sebelumnya',
 'imgmultipagenext' => 'halaman selanjutnya &rarr;',
@@ -3778,6 +3986,7 @@ Anda juga dapat [[Special:EditWatchlist|menggunakan penyunting standar Anda]].',
 
 # Signatures
 'signature' => '[[{{ns:user}}:$1|$2]] ([[{{ns:user_talk}}:$1|bicara]])',
+'timezone-utc' => 'UTC',
 
 # Core parser functions
 'unknown_extension_tag' => 'Tag ekstensi tidak dikenal "$1"',
@@ -3791,6 +4000,7 @@ Anda juga dapat [[Special:EditWatchlist|menggunakan penyunting standar Anda]].',
 'version-variables' => 'Variabel',
 'version-antispam' => 'Pencegahan spam',
 'version-skins' => 'Kulit',
+'version-api' => 'API',
 'version-other' => 'Lain-lain',
 'version-mediahandlers' => 'Penanganan media',
 'version-hooks' => 'Kait',
@@ -3800,9 +4010,11 @@ Anda juga dapat [[Special:EditWatchlist|menggunakan penyunting standar Anda]].',
 'version-hook-name' => 'Nama kait',
 'version-hook-subscribedby' => 'Dilanggani oleh',
 '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-others' => 'lainnya',
+'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.
 
 MediaWiki didistribusikan dengan harapan dapat digunakan, tetapi TANPA JAMINAN APA PUN; tanpa jaminan PERDAGANGAN atau KECOCOKAN UNTUK TUJUAN TERTENTU. Lihat Lisensi Publik Umum GNU untuk informasi lebih lanjut.
@@ -3814,6 +4026,8 @@ Anda seharusnya telah menerima [{{SERVER}}{{SCRIPTPATH}}/COPYING salinan Lisensi
 'version-entrypoints' => 'URL titik entri',
 'version-entrypoints-header-entrypoint' => 'Titik entri',
 'version-entrypoints-header-url' => 'URL',
+'version-entrypoints-articlepath' => '[https://www.mediawiki.org/wiki/Manual:$wgArticlePath Artikel path]',
+'version-entrypoints-scriptpath' => '[https://www.mediawiki.org/wiki/Manual:$wgScriptPath Skrip path]',
 
 # Special:FilePath
 'filepath' => 'Lokasi berkas',
@@ -3848,7 +4062,7 @@ Gambar ditampilkan dalam resolusi penuh dan tipe lain berkas akan dibuka langsun
 'specialpages-group-highuse' => 'Frekuensi tinggi',
 'specialpages-group-pages' => 'Daftar halaman',
 'specialpages-group-pagetools' => 'Peralatan halaman',
-'specialpages-group-wiki' => 'Data dan peralatan wiki',
+'specialpages-group-wiki' => 'Data dan peralatan',
 'specialpages-group-redirects' => 'Pencarian dan pengalihan',
 'specialpages-group-spam' => 'Peralatan spam',
 
@@ -3937,15 +4151,19 @@ Gambar ditampilkan dalam resolusi penuh dan tipe lain berkas akan dibuka langsun
 'revdelete-unrestricted' => 'pembatasan akses opsis dihapuskan',
 'logentry-move-move' => '$1 memindahkan halaman $3 ke $4',
 'logentry-move-move-noredirect' => '$1 memindahkan halaman $3 ke $4 tanpa membuat pengalihan',
-'logentry-move-move_redir' => '$1 memindahkan halaman $3 ke $4 melalui pengalihan',
-'logentry-move-move_redir-noredirect' => '$1 memindahkan halaman $3 ke $4 melalui pengalihan tanpa membuat pengalihan',
+'logentry-move-move_redir' => '$1 memindahkan halaman $3 ke $4 menimpa pengalihan lama',
+'logentry-move-move_redir-noredirect' => '$1 memindahkan halaman $3 ke $4 menimpa pengalihan lama tanpa membuat pengalihan',
 'logentry-patrol-patrol' => '$1 menandai revisi $4 dari halaman $3 terpatroli',
 'logentry-patrol-patrol-auto' => '$1 secara otomatis menandai revisi $4 dari halaman $3 terpatroli',
 'logentry-newusers-newusers' => 'Akun pengguna $1 telah dibuat',
 'logentry-newusers-create' => '$1 membuat akun pengguna',
 'logentry-newusers-create2' => '$1 membuat akun pengguna $3',
+'logentry-newusers-byemail' => 'Akun pengguna  $3  diciptakan oleh  $1  dan password dikirim melalui surel',
 'logentry-newusers-autocreate' => 'Akun $1 dibuat secara otomatis',
-'newuserlog-byemail' => 'kata sandi dikirim melalui surel',
+'logentry-rights-rights' => '$1 mengubah keanggotaan grup $3 dari $4 menjadi $5',
+'logentry-rights-rights-legacy' => '$1 mengubah keanggotaan grup $3',
+'logentry-rights-autopromote' => '$1 secara otomatis dipromosikan dari $4 menjadi $5',
+'rightsnone' => '(tidak ada)',
 
 # Feedback
 'feedback-bugornote' => 'Jika Anda sudah siap untuk mendeskripsikan masalah teknis secara rinci silakan [$1 melaporkan bug].
@@ -3978,6 +4196,8 @@ Jika tidak, Anda dapat menggunakan formulir mudah di bawah ini. Komentar Anda ak
 'api-error-empty-file' => 'Berkas yang Anda kirim kosong.',
 'api-error-emptypage' => 'Pembuatan halaman baru yang kosong tidak diizinkan.',
 'api-error-fetchfileerror' => 'Kesalahan internal: terjadi kesalahan saat memperoleh berkas ini.',
+'api-error-fileexists-forbidden' => 'Berkas dengan nama "$1" sudah ada dan tidak bisa ditimpa.',
+'api-error-fileexists-shared-forbidden' => 'Berkas dengan nama "$1" sudah ada di penyimpanan file berbagi dan tidak bisa ditimpa.',
 'api-error-file-too-large' => 'Berkas yang Anda kirim terlalu besar.',
 'api-error-filename-tooshort' => 'Nama berkas terlalu pendek.',
 'api-error-filetype-banned' => 'Jenis berkas ini dilarang.',
@@ -3997,6 +4217,7 @@ Jika tidak, Anda dapat menggunakan formulir mudah di bawah ini. Komentar Anda ak
 'api-error-ok-but-empty' => 'Kesalahan internal: tidak ada tanggapan dari peladen.',
 'api-error-overwrite' => 'Tidak diizinkan untuk menimpa berkas yang sudah ada.',
 'api-error-stashfailed' => 'Kesalahan internal: server gagal menyimpan berkas sementara.',
+'api-error-publishfailed' => 'Kesalahan internal: server gagal menyimpan berkas sementara.',
 'api-error-timeout' => 'Peladen tidak merespons dalam waktu yang diharapkan.',
 'api-error-unclassified' => 'Terjadi galat yang tidak diketahui',
 'api-error-unknown-code' => 'Kesalahan tidak dikenal: "$1"',
index e0235b8..12b6a35 100644 (file)
@@ -715,9 +715,11 @@ Tui adresse de e-mail ne es revelat quande altri usatores contacter vu.',
 'grouppage-bureaucrat' => '{{ns:project}}:Burócrates',
 'grouppage-suppress' => '{{ns:project}}:Vigilatores',
 
+# Special:Log/newusers
+'newuserlogpage' => 'Diarium de creation de usator',
+
 # User rights log
 'rightslog' => 'Diarium de jures de usator',
-'rightsnone' => '(null)',
 
 # Associated actions - in the sentence "You do not have permission to X"
 'action-edit' => 'redacter ti págine',
@@ -967,9 +969,6 @@ Li descrition es in li [$2 págine de descrition del file] ta e es monstrat in i
 'linksearch-ns' => 'Spacie de nómine:',
 'linksearch-line' => '$1 es ligat de $2',
 
-# Special:Log/newusers
-'newuserlogpage' => 'Diarium de creation de usator',
-
 # Special:ListGroupRights
 'listgrouprights-members' => '(liste de membres)',
 
@@ -1010,6 +1009,8 @@ Li descrition es in li [$2 págine de descrition del file] ta e es monstrat in i
 'watching' => 'Vigilant...',
 'unwatching' => 'Desvigilant...',
 
+'created' => 'creat',
+
 # Delete
 'deletepage' => 'Deleter págine',
 'delete-legend' => 'Deleter',
@@ -1412,4 +1413,7 @@ Vu posse anc [[Special:EditWatchlist|usar li redactor uniform]].',
 'tags-edit' => 'redacter',
 'tags-hitcount' => '$1 {{PLURAL:$1|change|changes}}',
 
+# New logging system
+'rightsnone' => '(null)',
+
 );
index d0349b0..05ea9a4 100644 (file)
@@ -156,7 +156,7 @@ $messages = array(
 'august' => 'Önwa Asáto',
 'september' => 'Önwa Itolu',
 'october' => 'Önwa Iri',
-'november' => 'Önwa Iri na ot',
+'november' => 'Önwa Iri na otu',
 'december' => 'Önwa Iri na abụọ',
 'january-gen' => 'Önwa Mbú',
 'february-gen' => 'Önwa Abụọ',
@@ -168,7 +168,7 @@ $messages = array(
 'august-gen' => 'Önwa Asatọ',
 'september-gen' => 'Önwa Itolu',
 'october-gen' => 'Önwa Iri',
-'november-gen' => 'Önwa Iri na ot',
+'november-gen' => 'Önwa Iri na otu',
 'december-gen' => 'Önwa Iri na abụọ',
 'jan' => 'ÖMbú',
 'feb' => 'ÖAbụ',
@@ -202,13 +202,13 @@ $messages = array(
 'noindex-category' => 'Ihü ẹdẹlebu',
 'broken-file-category' => 'Ihü nwere jkọdọ na ga fail gbajírí',
 
-'about' => 'Abwátà',
+'about' => 'Màkà',
 'article' => 'Ihü ihe dị',
 'newwindow' => '(o na mepo na onyonyo ohúrù)',
 'cancel' => 'Kàchá',
 'moredotdotdot' => 'Ozókwá...',
-'mypage' => 'Ihüm',
-'mytalk' => 'Okwum',
+'mypage' => 'Ihü',
+'mytalk' => 'Okwu',
 'anontalk' => 'Owu màkà IP nká',
 'navigation' => 'Otú Uzọr',
 'and' => '&#32;ná',
@@ -233,8 +233,8 @@ $messages = array(
 'vector-simplesearch-preference' => 'Kwe okwu ụmá nchöwa di (akpụkpọ Vector náni)',
 'vector-view-create' => 'Ké',
 'vector-view-edit' => 'Mèzi',
-'vector-view-history' => 'Le akíkó mbu',
-'vector-view-view' => 'Guwá',
+'vector-view-history' => 'Zí ịta',
+'vector-view-view' => 'Gụ́',
 'vector-view-viewsource' => 'Zi mkpurụ',
 'actions' => 'Mmèmé',
 'namespaces' => 'Ámááhà',
@@ -248,13 +248,13 @@ $messages = array(
 'searchbutton' => 'Chọwa',
 'go' => 'Gá',
 'searcharticle' => 'Gá',
-'history' => 'Akíkó mbu nke ihü',
-'history_short' => 'Akiko mbú',
+'history' => 'Ịta ihüá',
+'history_short' => 'Ịta',
 'updatedmarker' => 'ihe gáráníru ké mgbe m byàrà nga mbu',
 'printableversion' => 'Nkè I nweríkí dotié',
 'permalink' => 'Jikodo ekechịrị',
 'print' => 'Dotié',
-'view' => 'Zi',
+'view' => 'Lèzí',
 'edit' => 'Mèzi',
 'create' => 'Ké',
 'editthispage' => 'Rüwa na ihü nka',
@@ -505,6 +505,10 @@ I na á banye...',
 'passwordreset-emailelement' => "Áhà Ọ'banife: $1
 Passwod nke gi gbanwe: $2",
 
+# Special:ChangeEmail
+'changeemail-none' => '(efù)',
+'changeemail-cancel' => 'Kàchá',
+
 # Edit page toolbar
 'bold_sample' => 'Mkpúrù èdè íke',
 'bold_tip' => 'Mkpúrù èdè íke',
@@ -597,7 +601,6 @@ Ndetu banyéré nkè ogẹ nso di na okpúrụ màkà ádịamámá:",
 'template-protected' => '(cẹdoluecẹdo)',
 'template-semiprotected' => '(cẹdolu-ntakiri)',
 'hiddencategories' => 'Ihü a dị nà nke ótù {{PLURAL:$1|ébéonọr zọnàrì nke 1|ébéonọr zọnàrì nke $1}}:',
-'nocreatetitle' => 'Í ké ihü nwèrè ùbe',
 'nocreate-loggedin' => 'Í nwéghi ọdà Í ké ihü ohụrụ.',
 'permissionserrors' => 'Nsobgu na ỏdà',
 'permissionserrorstext-withaction' => 'Í nwéghi ọdà Í $2, {{PLURAL:$1|màkà|màkà}} ihe ha detùrù na àlà nga:',
@@ -607,6 +610,9 @@ Ndetu banyéré nkè ogẹ nso di na okpúrụ màkà ádịamámá:",
 'edit-already-exists' => 'Ènwéghịkị ké ihü nke ọhúrù.
 Ọ di kwa.',
 
+# Content models
+'content-model-wikitext' => 'wikitext',
+
 # Parser/template warnings
 'parser-template-loop-warning' => 'Etemete àtụ dị: [[$1]]',
 
@@ -662,7 +668,7 @@ Okwu ụmà: '''({{int:cur}})''' = gbánwe na nké orü mbu, '''({{int:last}})''
 'revdelete-log' => 'Mgbághapụtà:',
 'revdel-restore' => 'gbanwe ọtù ọ gị zí',
 'revdel-restore-deleted' => 'orürü gbakashịrị',
-'pagehist' => 'Ákíkó mbu maka ihüá',
+'pagehist' => 'Ịta ihüá',
 'deletedhist' => 'Ákíkó mbu bakashịrị',
 'revdelete-reasonotherlist' => 'Mgbághàpụtá ozor',
 'revdelete-edit-reasonlist' => 'Rüwa mgbághapụtà nkàchafu',
@@ -689,7 +695,7 @@ Okwu ụmà: '''({{int:cur}})''' = gbánwe na nké orü mbu, '''({{int:last}})''
 'history-title' => 'Ákíkó mbu màkà orü nọr na élú "$1"',
 'lineno' => 'Ahiri $1:',
 'compareselectedversions' => 'Sikwụ orü áká dị',
-'editundo' => 'emekwàlà',
+'editundo' => 'mẹ̀rí àzụ́',
 
 # Search results
 'searchresults' => 'Ndọfùtà nchọwa',
@@ -724,7 +730,7 @@ Okwu ụmà: '''({{int:cur}})''' = gbánwe na nké orü mbu, '''({{int:last}})''
 'search-result-score' => 'Otu o di nkpà: $1%',
 'search-redirect' => '(kúfù $1)',
 'search-section' => '(nkeji $1)',
-'search-suggest' => 'I kweshirí de: $1',
+'search-suggest' => 'Ị̀ kwèshirí dé: $1',
 'search-interwiki-caption' => 'Orürü nwanne nwanyị',
 'search-interwiki-default' => '$1 nke ziri:',
 'search-interwiki-more' => '(dikarírí)',
@@ -760,8 +766,9 @@ Nwàné ótù okwu íshí na ihe Í nè tú jí ''háníle:'' Í tuó ihe nílé
 'skin-preview' => 'Lètú',
 'datedefault' => 'Otú é shị na dose ihe efù',
 'prefs-datetime' => 'Ubochi na ogẹ',
+'prefs-user-pages' => "Ihü ọ'bànifé",
 'prefs-personal' => "Nkówá ọ'bànifé",
-'prefs-rc' => 'Gbanwere mere ogẹ di nso',
+'prefs-rc' => 'Mgbánwè ógè nso',
 'prefs-watchlist' => 'Ndétụnlé',
 'prefs-watchlist-days-max' => 'Maximum $1 {{PLURAL:$1|day|days}}',
 'prefs-misc' => 'Mcheta-ma-mchetaghim',
@@ -799,12 +806,12 @@ Nwàné ótù okwu íshí na ihe Í nè tú jí ''háníle:'' Í tuó ihe nílé
 'uid' => "ID ọ'bànifé:",
 'prefs-memberingroups' => 'Onyé otu nke {{PLURAL:$1|ọtú|ọtú}}:',
 'yourrealname' => 'Ézíbóté áhà:',
-'yourlanguage' => 'Asụsụ:',
+'yourlanguage' => 'Ásụ̀sụ̀:',
 'yournick' => 'Ndè áhà gi òhúrù:',
 'yourgender' => 'Nwayi/okpoho ma o nwoke:',
 'gender-unknown' => 'Ámákwàghị',
-'gender-male' => 'Nwoke',
-'gender-female' => 'Nwanyi/Okpoho',
+'gender-male' => 'Òkò',
+'gender-female' => 'Ányị̀',
 'email' => 'ozi e-mail',
 'prefs-help-email-required' => 'Áhàebeíbị e-mail gí di.',
 'prefs-signature' => 'Áhà gi',
@@ -813,7 +820,8 @@ Nwàné ótù okwu íshí na ihe Í nè tú jí ''háníle:'' Í tuó ihe nílé
 
 # User rights
 'userrights-user-editname' => "Tìnyé áhà ọ'bànifé:",
-'editusergroup' => "Rüwá ọtú nke ọ'bànifé",
+'editusergroup' => "Mèzí ọtú nke ọ'bànifé",
+'userrights-editusergroup' => "Mèzí ọtú nke ọ'bànifé",
 'saveusergroups' => "Domá ọtú nke ọ'bànifé",
 'userrights-groupsmember' => 'Onye ọtú nke:',
 'userrights-reason' => 'Mgbághapụtà:',
@@ -849,9 +857,11 @@ Nwàné ótù okwu íshí na ihe Í nè tú jí ''háníle:'' Í tuó ihe nílé
 'right-bigdelete' => 'Kàcha ihü nwéré ákíkó mbu dí ógólógó',
 'right-undelete' => 'Ágbakashia ótù ihü',
 
+# Special:Log/newusers
+'newuserlogpage' => "Ndétu nchétá ihe ọ'bànifé kèrè",
+
 # User rights log
 'rightslog' => "Ndetu échìchè íwú ọ'bànifé",
-'rightsnone' => '(efù)',
 
 # Associated actions - in the sentence "You do not have permission to X"
 'action-read' => 'guwa ihüá',
@@ -865,7 +875,7 @@ Nwàné ótù okwu íshí na ihe Í nè tú jí ''háníle:'' Í tuó ihe nílé
 
 # Recent changes
 'nchanges' => '$1 {{PLURAL:$1|gbanwere|gbanwere}}',
-'recentchanges' => 'Gbanwere mere ogẹ di nso',
+'recentchanges' => 'Mgbánwè ógè nso',
 'recentchanges-legend' => 'Nràlụ màkà Ihe gbanwere ubwá',
 'recentchanges-feed-description' => 'Chóputà ihe ógẹ ǹsò na wiki ímé órírí nke á.',
 'recentchanges-label-minor' => 'Ihe bu orü ntakírí',
@@ -913,7 +923,7 @@ Ihü nọr na [[Special:Watchlist|ndétu ihe Í ne lé]] di na mkpụrụ edemed
 'filedesc' => 'Mmẹkụwátá',
 'fileuploadsummary' => 'Mmẹkụwátá:',
 'filereuploadsummary' => 'Gbanwere maka usòrò:',
-'filesource' => 'Mkpọlógwù:',
+'filesource' => 'Mkpọlọ́gwụ̀:',
 'savefile' => 'Domá usòrò',
 'uploadedimage' => '"[[$1]]" dị na élú',
 'upload-source' => 'Usòrò mkpọlógwù',
@@ -936,7 +946,8 @@ Ihü nọr na [[Special:Watchlist|ndétu ihe Í ne lé]] di na mkpụrụ edemed
 # Special:ListFiles
 'imgfile' => 'usòrò',
 'listfiles' => 'Ndétu usòrò',
-'listfiles_date' => 'Aka',
+'listfiles_thumb' => 'Nvọáká',
+'listfiles_date' => 'Ǹgụ́ụ̀bọ̀chị̀',
 'listfiles_name' => 'Áhà',
 'listfiles_user' => "Ọ'bànifé",
 'listfiles_size' => 'Ívụ',
@@ -945,15 +956,16 @@ Ihü nọr na [[Special:Watchlist|ndétu ihe Í ne lé]] di na mkpụrụ edemed
 
 # File description page
 'file-anchor-link' => 'Usòrò',
-'filehist' => 'Akikó mbu nke akwukwu orúnotu',
+'filehist' => 'Ịta nke usòrò',
 'filehist-help' => 'Kpàtá na úbochi/ógè Í zí usòrò ọtụ ȯ dị mgbe áhù.',
 'filehist-deleteall' => 'kàcha hanílé',
 'filehist-deleteone' => 'kàcha',
 'filehist-revert' => 'gbanwe lá àzú',
 'filehist-current' => 'nka',
 'filehist-datetime' => 'Afọ/Ogẹ',
-'filehist-thumb' => 'Nvóáká',
+'filehist-thumb' => 'Nváká',
 'filehist-thumbtext' => 'NvóÁká màkà otù ȯ dị nà $1',
+'filehist-nothumb' => 'Nvọáká adịghị',
 'filehist-user' => "Ọ'bànifé",
 'filehist-dimensions' => 'Ógólógó na asaá',
 'filehist-filesize' => 'Ívù usòrò',
@@ -1071,7 +1083,7 @@ Ubwa, o na ga [[$2]].',
 'allinnamespace' => 'Ihü níle (ámááhạ $1)',
 'allnotinnamespace' => 'Ihü níle (a noghị ime ámááhạ $1)',
 'allpagesprev' => 'Nke gafèrè',
-'allpagesnext' => 'Na nke ozor',
+'allpagesnext' => 'Nàíhú',
 'allpagessubmit' => 'Gá',
 
 # Special:Categories
@@ -1081,7 +1093,7 @@ Ubwa, o na ga [[$2]].',
 'sp-deletedcontributions-contribs' => 'ihe rürü di mkpa',
 
 # Special:LinkSearch
-'linksearch' => 'Jikodo di èzí',
+'linksearch' => 'Òtú jikodo di èzí',
 'linksearch-ns' => 'Áhàámá:',
 'linksearch-ok' => 'Chọwa',
 'linksearch-line' => '$1 jikọdọ shí $2',
@@ -1096,9 +1108,6 @@ Ubwa, o na ga [[$2]].',
 'activeusers-hidesysops' => 'Zonari ndi íshí',
 'activeusers-noresult' => "Ọ hügị ọ'bànifé.",
 
-# Special:Log/newusers
-'newuserlogpage' => "Ndétu nchétá ihe ọ'bànifé kèrè",
-
 # Special:ListGroupRights
 'listgrouprights-group' => 'Ọtú',
 'listgrouprights-rights' => 'Nkwènyé',
@@ -1138,10 +1147,12 @@ Ihe gi gbanwe na ógè gi bya nà ihüá na ihü okwu ya gi di ndétu ngáhù, n
 
 'enotif_impersonal_salutation' => "ọ'bànifé {{SITENAME}}",
 'enotif_anon_editor' => "ọ'bànifé ézíghị ihu $1",
+'created' => 'kèrè',
+'changed' => 'gbanwere',
 
 # Delete
 'deletepage' => 'Kàchafu ihü',
-'confirm' => 'Sị Í kwèrè',
+'confirm' => 'Kwèré',
 'excontent' => 'ihe nọr na ímé ya mbu bụ: "$1"',
 'exblank' => 'ihü gbàrà nkonko',
 'delete-confirm' => 'Kàcha "$1"',
@@ -1149,6 +1160,7 @@ Ihe gi gbanwe na ógè gi bya nà ihüá na ihü okwu ya gi di ndétu ngáhù, n
 'confirmdeletetext' => 'Í gálá Í gbákashiá ihü na ákíkó mbu ya.
 Biko sí nà ọ bụ ihe Í chọrọ, na Í mà ihe gi mè, na Í nè me ya kà yá na [[{{MediaWiki:Policy-url}}|òtù há nè mé ihe]] di óma.',
 'actioncomplete' => 'Ọ méchá',
+'actionfailed' => 'Òmùmẹ́ à daala',
 'deletedtext' => '"$1" à gbákáshíálá.
 Lé $2 màkà okwu gbásárá ihe ọ gbakashiri màkà.',
 'dellogpage' => 'Ntínyé ngbákashị',
@@ -1166,7 +1178,7 @@ Lé $2 màkà okwu gbásárá ihe ọ gbakashiri màkà.',
 'protectedarticle' => 'chédòlù "[[$1]]"',
 'modifiedarticleprotection' => 'gbánwèrè íshí ncẹdolu màkà "[[$1]]"',
 'protectcomment' => 'Mgbághapụtà:',
-'protectexpiry' => 'Gbá okà:',
+'protectexpiry' => 'Gbá ọ́kà:',
 'protect_expiry_invalid' => 'Ógẹ mgbe ó gị gbá ùkà adíghị ómá.',
 'protect_expiry_old' => 'Ógẹ mgbe ȯ gbàrà úkà à gafele.',
 'protect-text' => "Í nwèríkí lá mà Í gbanwe ncẹdolu ihü '''$1''' nke.",
@@ -1180,6 +1192,8 @@ Ngá bu ihe hé mèkwàrà nà ihü '''$1''':",
 'protect-level-sysop' => 'Ndi íshí nani',
 'protect-summary-cascade' => 'mgbàwéré',
 'protect-expiring' => 'nà gbá ókà na $1 (UTC)',
+'protect-expiring-local' => 'gbáọ́kà na $1',
+'protect-expiry-indefinite' => 'àghọ́ta',
 'protect-cascade' => 'Ihü ha cẹdolu di na ime ihüá (ncẹdolu mgbàwéré)',
 'protect-cantedit' => 'Ì nwéghịkí gbanwe ncẹdolu ihü á, màkà Ì nwéghị ọdà Í rü ya.',
 'protect-othertime' => 'Ógẹ ozor',
@@ -1202,10 +1216,10 @@ Ngá bu ihe hé mèkwàrà nà ihü '''$1''':",
 'restriction-level-all' => 'ọtú nke ȯbulà',
 
 # Undelete
-'undeletebtn' => 'Dokwa',
+'undeletebtn' => 'Dòmárí àzụ́',
 'undeletelink' => 'lé/dosimá',
 'undeleteviewlink' => 'lé',
-'undeletereset' => 'Hafù ya otụ o di',
+'undeletereset' => "Mẹ̀wárí n'ísí",
 'undeletecomment' => 'Mgbághapụtà:',
 'undelete-search-submit' => 'Chọwa',
 'undelete-show-file-submit' => 'Eeh',
@@ -1213,7 +1227,7 @@ Ngá bu ihe hé mèkwàrà nà ihü '''$1''':",
 # Namespace form on various pages
 'namespace' => 'Áhàámá:',
 'invert' => 'kwùtúárí ihe áká nọr',
-'blanknamespace' => 'Gawa ihü nwere ahạ otuá ma o di',
+'blanknamespace' => '(Ḿkpà)',
 
 # Contributions
 'contributions' => "Ihe ọ'bànifé rürü",
@@ -1254,9 +1268,10 @@ Ngá bu ihe hé mèkwàrà nà ihü '''$1''':",
 'whatlinkshere-filters' => 'Nzàtà',
 
 # Block/unblock
-'blockip' => "Kwàchí ọ'bànifé",
-'blockip-title' => "Kwàchí ọ'bànifé",
-'blockip-legend' => "Kwàchí ọ'bànifé",
+'block' => "Gbàchí ọ'bànifé",
+'blockip' => "Gbàchí ọ'bànifé",
+'blockip-title' => "Gbàchí ọ'bànifé",
+'blockip-legend' => "Gbàchí ọ'bànifé",
 'ipadressorusername' => "IP mà ọ bu áhà ọ'bànifé:",
 'ipbexpiry' => 'Gbá okà:',
 'ipbreason' => 'Mgbághapụtà:',
@@ -1265,13 +1280,16 @@ Ngá bu ihe hé mèkwàrà nà ihü '''$1''':",
 'ipbother' => 'Ógẹ ozor',
 'ipboptions' => 'àmànì 2:2 hours,chi 1:1 day,chi 3:3 days,izù 1:1 week,izù 2:2 weeks,önwa1:1 month,önwa 3:3 months,önwa 6:6 months,afọr 1:1 year,ógè énwéghị ùbe:infinite',
 'ipbotheroption' => 'nke ozor',
+'ipb-confirm' => 'Kwé mgbáchí',
 'ipb-unblock-addr' => 'Ákwàchịrị $1',
 'ipb-unblock' => "Ákwàchịrị áhà ọ'bànifé ma IP",
 'unblockip' => "Ákwàchịrị ọ'bànifé",
 'unblocked' => 'há kwàchịrị [[User:$1|$1]]',
 'ipblocklist' => "Ọ'bànifé kwáchírí",
+'blocklist-target' => 'Ẹ́té',
+'blocklist-expiry' => 'Gbá ọ́kà',
 'ipblocklist-submit' => 'Chọwa',
-'infiniteblock' => 'etemete',
+'infiniteblock' => 'ébìébì ùdìdì',
 'anononlyblock' => 'anon. náni',
 'emailblock' => 'ha kwàchịrị e-mail',
 'blocklink' => 'mèché',
@@ -1353,8 +1371,8 @@ I chorí kàchafu ya ka uzor mepo maka mpuzie ne me?',
 'allmessages-filter-legend' => 'Nzàtà',
 'allmessages-filter-unmodified' => 'Rübàlà',
 'allmessages-filter-all' => 'Haníle',
-'allmessages-filter-modified' => 'Rübélu',
-'allmessages-language' => 'Asụsụ:',
+'allmessages-filter-modified' => 'Mèrìrì',
+'allmessages-language' => 'Ásụ̀sụ̀:',
 'allmessages-filter-submit' => 'Gá',
 
 # Thumbnails
@@ -1365,6 +1383,7 @@ I chorí kàchafu ya ka uzor mepo maka mpuzie ne me?',
 'import' => 'Gọbàtá ihü',
 'importinterwiki' => 'Ngọbàtá Transwiki',
 'import-interwiki-source' => 'Mkpòlógwù wiki/ihü:',
+'import-interwiki-templates' => 'Bàtụcha átụ́ nile',
 'import-interwiki-submit' => 'Dọwá bànyé',
 'import-upload-filename' => 'Áhà usòrò:',
 'import-comment' => 'Okwu-nokwu:',
@@ -1393,7 +1412,7 @@ Biko meríáríá ozor.',
 Í nwèríkí lé mkpụrụ ya',
 'tooltip-ca-history' => 'Orü ichié na ihüá',
 'tooltip-ca-protect' => 'Cẹdolu ihüá',
-'tooltip-ca-unprotect' => 'Acẹdolu ihüá',
+'tooltip-ca-unprotect' => 'Gbánwe ncẹdo ihüá',
 'tooltip-ca-delete' => 'Bakashia ihüá',
 'tooltip-ca-move' => 'Puzie ihüá',
 'tooltip-ca-watch' => 'Tìnyé ihü á na ndétu ihe Í ne lé',
@@ -1444,6 +1463,14 @@ Biko meríáríá ozor.',
 # Spam protection
 'spamprotectiontitle' => 'Ihe na zata maka cẹdolu ụrú',
 
+# Info page
+'pageinfo-header-edits' => 'Mèzí ịta',
+'pageinfo-length' => 'Ogologo ihü (na baitusu)',
+'pageinfo-article-id' => 'ID Ihü',
+'pageinfo-redirectsto-info' => 'ọ́márí',
+'pageinfo-contentpage-yes' => 'Eeh',
+'pageinfo-protect-cascading-yes' => 'Eeh',
+
 # Image deletion
 'filedeleteerror-short' => 'Nsògbú í kàcha usòrò: $1',
 
@@ -1465,6 +1492,9 @@ Biko meríáríá ozor.',
 'ilsubmit' => 'Chọwa',
 'bydate' => 'shi afọ',
 
+# Video information, used by Language::formatTimePeriod() to format lengths in the above messages
+'just-now' => 'ùgbú ùgbúa',
+
 # Bad image list
 'bad_image_list' => 'Ọtụ ȯ dị détùrù ngá:
 
@@ -1499,24 +1529,32 @@ Nke ozor gí zonari na áká onwe ha.
 'exif-imagelength' => 'Ógólógó',
 'exif-orientation' => 'Ívú nà àsáa',
 'exif-imagedescription' => 'Íshí nhuunuche',
-'exif-artist' => 'Ọdè ákwúkwó',
+'exif-artist' => 'Odé ákwụ́kwọ́',
 'exif-exifversion' => 'Ùdị Exif',
 'exif-colorspace' => 'Ámá àgwà',
 'exif-exposuretime-format' => 'sec $1 ($2)',
 'exif-fnumber' => 'Ónúọgụgụ F',
-'exif-brightnessvalue' => 'Óchá',
+'exif-brightnessvalue' => 'Ọ̀chạ́ APEX',
 'exif-lightsource' => 'Mkpọlógwù ìfè',
 'exif-flash' => 'Gbu fịàfịà',
+'exif-filesource' => 'Mkpọ̀lọ́gwụ̀ usòrò',
+'exif-citydest' => 'Ámá ukwu ziri',
+'exif-writer' => 'Òdìdè',
+'exif-languagecode' => 'Ásụ̀sụ̀',
+'exif-iimcategory' => 'Ébéonọr',
+'exif-label' => 'Ọdụ',
 
-'exif-orientation-1' => 'Ñkịtị',
+'exif-orientation-1' => 'Nkịtị',
 
-'exif-exposureprogram-1' => 'Nà áká',
+'exif-exposureprogram-1' => 'Ònyèmáká',
 
 'exif-subjectdistance-value' => 'meter $1',
 
+'exif-meteringmode-0' => 'Nke námaghị',
 'exif-meteringmode-1' => 'Nà nke ñkịtị',
 'exif-meteringmode-3' => 'Ntụpọ',
 'exif-meteringmode-5' => 'Nnòmi',
+'exif-meteringmode-6' => 'Mmẹtụ',
 'exif-meteringmode-255' => 'Nke ozor',
 
 'exif-lightsource-0' => 'Nke námaghị',
@@ -1532,17 +1570,18 @@ Nke ozor gí zonari na áká onwe ha.
 
 'exif-gaincontrol-0' => 'Efù',
 
-'exif-contrast-0' => 'Ñkịtị',
+'exif-contrast-0' => 'Nkịtị',
 'exif-contrast-1' => 'Bịàlịị',
 'exif-contrast-2' => 'Kàràká',
 
-'exif-saturation-0' => 'Ñkịtị',
+'exif-saturation-0' => 'Nkịtị',
 
-'exif-sharpness-0' => 'Ñkịtị',
+'exif-sharpness-0' => 'Nkịtị',
 'exif-sharpness-1' => 'Bịàlịị',
 'exif-sharpness-2' => 'Kàràká',
 
 'exif-subjectdistancerange-0' => 'Nke námaghị',
+'exif-subjectdistancerange-2' => 'Mèchí ǹyò',
 
 # Pseudotags used for GPSLatitudeRef and GPSDestLatitudeRef
 'exif-gpslatitude-n' => 'Asá olile anyanwu',
@@ -1555,6 +1594,35 @@ Nke ozor gí zonari na áká onwe ha.
 # Pseudotags used for GPSSpeedRef
 'exif-gpsspeed-n' => 'Knot',
 
+# Pseudotags used for GPSDestDistanceRef
+'exif-gpsdestdistance-k' => 'Kilomitas',
+'exif-gpsdestdistance-m' => 'Maisu',
+
+'exif-gpsdop-good' => 'Ọma ($1)',
+'exif-gpsdop-moderate' => 'Dịtụnma ($1)',
+'exif-gpsdop-fair' => 'Òzú ($1)',
+
+'exif-dc-date' => 'Ngụụ̀bọ̀chì',
+'exif-dc-publisher' => 'Ọ̀má ákwụ́kwọ́',
+'exif-dc-rights' => 'Nkwènyé',
+
+'exif-rating-rejected' => 'Gbụ́fụ̀rụ̀',
+
+'exif-iimcategory-clj' => 'Nsọ na iwú',
+'exif-iimcategory-edu' => 'Ńkúzí',
+'exif-iimcategory-evn' => 'Èzí',
+'exif-iimcategory-hth' => 'Wíké',
+'exif-iimcategory-hum' => 'Mmasịrị madu',
+'exif-iimcategory-lab' => 'Íké aka',
+'exif-iimcategory-pol' => 'Ọ́chị́',
+'exif-iimcategory-spo' => 'Ụ̀gbàmà',
+'exif-iimcategory-war' => 'Ághá, ọ̀gụ̀ na ághàrà',
+'exif-iimcategory-wea' => 'Ihü ígwe',
+
+'exif-urgency-normal' => 'Nkịtị ($1)',
+'exif-urgency-low' => 'Nàlà ($1)',
+'exif-urgency-high' => 'Nélú ($1)',
+
 # 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)',
@@ -1571,6 +1639,10 @@ Nke ozor gí zonari na áká onwe ha.
 # action=purge
 'confirm_purge_button' => 'Ngwanu',
 
+# action=watch/unwatch
+'confirm-watch-button' => 'Ngwanu',
+'confirm-unwatch-button' => 'Ngwanu',
+
 # Multipage image navigation
 'imgmultipageprev' => 'ihü na àzú',
 'imgmultipagenext' => 'ihü nke di nso →',
@@ -1610,14 +1682,18 @@ Nke ozor gí zonari na áká onwe ha.
 # Special:Version
 'version' => 'Ùdị',
 'version-specialpages' => 'Ihü mkpà',
+'version-skins' => 'Akpụkpọ',
 'version-other' => 'Nke ozor',
 'version-hooks' => 'Nyazo',
 'version-hook-name' => 'Áhà nyazo',
 'version-hook-subscribedby' => 'Dọkpụrụ shì',
 'version-version' => '(Ùdị $1)',
-'version-license' => 'Ákwúkwó íwú nke nkwé',
+'version-license' => 'Íwú Ǹkwé',
+'version-poweredby-others' => 'nke ndi ozor',
 'version-software-product' => 'Nfófụtá',
 'version-software-version' => 'Ùdị',
+'version-entrypoints-header-entrypoint' => 'Ébé ọ̀bụ̀bà',
+'version-entrypoints-header-url' => 'URL',
 
 # Special:FilePath
 'filepath' => 'Uzọ usòrò',
@@ -1675,6 +1751,14 @@ Nke ozor gí zonari na áká onwe ha.
 'htmlform-reset' => 'Emekwàlà gbanwere',
 'htmlform-selectorother-other' => 'Nke ozor',
 
+# New logging system
+'revdelete-content-hid' => 'ihe zọ̀nàri',
+'rightsnone' => '(efù)',
+
+# Feedback
+'feedback-message' => 'Ozi:',
+'feedback-close' => 'Ọméchá.',
+
 # Search suggestions
 'searchsuggest-search' => 'Chọwa',
 
index 8af63d5..6fff6a9 100644 (file)
@@ -793,10 +793,10 @@ Kasta met nga ikarim kadakami a bukodmo a sinurat wenno gapuanan daytoy, wenno t
 '''Saan a mangipan iti adda ti karbenganna a panagpablaak nga obra no awan ti  pammalubos!'''",
 'longpageerror' => "'''Biddut: Ti testo nga intedmo ket {{PLURAL:$1|maysa a kilobyte|$1 kil-kilobyte}} a katiddog, nga at-atiddog ngem ti kangatuan iti  {{PLURAL:$2|maysa a kilobyte|$2 kil-kilobyte}}.'''
 Isu ti gapuna a saan a maidulin.",
-'readonlywarning' => "'''Ballaag: Narikepan ti database para iti panagtaripatu, saanmo a mabalin nga idulin dagita inurnosmo tattan.'''
-No kayatmo i \"cut-n-paste\" mo dagiti testo iti testo a papeles ken idulinmo no madamdama.
+'readonlywarning' => "'''Ballaag: Narikepan ti database tapno mataripatu, isu a saanmo a mabalin nga idulin dagita inurnosmo tattan.'''
+Mabalinmo ti agkopia ken agikabil ti testom iti maysa a testo a papeles ken idulinmo para iti panagusar no madamdama.
 
-Ti administrador a nangrikep ket saan a nangted ti palawag: \$1",
+Ti administrador a nangrikep ket nangited iti daytoy a palawag: $1",
 'protectedpagewarning' => "'''Ballaag:  Daytoy a panid ket nasalakniban tapno dagiti laeng agar-aramat nga adda ti gundaway nga administrador ti makaurnos ditoy.'''
 Ti nakaudi a naikabil a listaan ket adda dita baba tapno usaren a  reperensia:",
 'semiprotectedpagewarning' => "'''Pakaammo:'''Nasalakniban daytoy a panid tapno dagiti laeng nakarehistro nga agar-aramat ti makaurnos ditoy.
@@ -811,7 +811,6 @@ Ti kinaudi a naikabil iti listaan ket naikabil dita baba tapno usaren a reperens
 'template-protected' => '(nasalakniban)',
 'template-semiprotected' => '(nasalakniban-bassit)',
 'hiddencategories' => 'Daytoy a panid ket kameng  {{PLURAL:$1|ti 1 a nailemmeng a kategoria|dagiti $1 a nailemmeng a kategoria}}:',
-'nocreatetitle' => 'Napatinggaan ti panagaramid iti panid',
 'nocreatetext' => 'Pinaritan ti {{SITENAME}} ti kabaelan a panagaramid iti kabarbaro a pampanid.
 Mabalinmo ti agsubli ken urnosen ti adda a panid, wenno [[Special:UserLogin|sumrek wenno agaramid ti pakabilangan]].',
 'nocreate-loggedin' => 'Awan ti pammalubosmo nga agpartuat kadagiti baro a panid.',
@@ -1217,7 +1216,7 @@ Ngem saanto a mabalinen nga ipasubli.',
 'youremail' => 'E-surat:',
 'username' => 'Nagan ti agar-aramat:',
 'uid' => 'ID ti agar-aramat:',
-'prefs-memberingroups' => 'Kameng iti {{PLURAL:$1|a bunggoy| a bungbunggoy}}:',
+'prefs-memberingroups' => 'Kameng {{PLURAL:$1|ti grupo|dagiti grupo}}:',
 'prefs-registration' => 'Oras a nagrehistro:',
 'yourrealname' => 'Pudno a nagan:',
 'yourlanguage' => 'Pagsasao:',
@@ -1369,15 +1368,13 @@ Ti e-surat a pagtaengam ket saan nga maipakita kadagiti agar-aramat nga agkontak
 'right-sendemail' => 'Agpatulod ti e-surat kadagiti sabali nga agar-aramat',
 'right-passwordreset' => 'Kitaen dagiti e-surat ti naipasubli a kontrasenias',
 
+# Special:Log/newusers
+'newuserlogpage' => 'Listaan dagiti naaramid nga agar-aramat',
+'newuserlogpagetext' => 'Listaan dagiti panakaramid ti agar-aramat.',
+
 # User rights log
 'rightslog' => 'Listaan dagiti karbengan ti agar-aramat',
 'rightslogtext' => 'Listaan daytoy kadagiti sinukatan a karbengan ti agar-aramat.',
-'rightslogentry' => 'sinukatan ti panagkameng iti bunggoy ti $1 manipud $2 iti $3',
-'rightslogentry-autopromote' => 'naautomatiko a naipangato a naggapo iti $2 idiay $3',
-'logentry-rights-rights' => 'Ni $1 ket nangbaliw ti grupo a panakaikameng para kenni $3 manipud ti $4 iti $5',
-'logentry-rights-rights-legacy' => 'Ni $1 ket nangbaliw ti grupo a panakaikameng para kenni $3',
-'logentry-rights-autopromote' => 'Ni $1 ket automatiko idi a naipangato manipud ti $4 iti $5',
-'rightsnone' => '(awan)',
 
 # Associated actions - in the sentence "You do not have permission to X"
 'action-read' => 'basaen datoy a panid',
@@ -2002,9 +1999,9 @@ Kitaen met [[Special:WantedCategories|dagiti makidkiddaw a kategoria]].',
 'linksearch-pat' => 'Alagad ti panagbiruk:',
 'linksearch-ns' => 'Nagan ti lugar:',
 'linksearch-ok' => 'Biruken',
-'linksearch-text' => 'Ti naataap a tarheta a kas "*.wikipedia.org" ket mabalin nga usaren.
+'linksearch-text' => 'Ti naataap a tarheta a kas ti "*.wikipedia.org" ket mabalin nga usaren.
 Masapul ti kangatuan a pagturayan, a kaspagarigan "*.org".<br />
-Dagiti nasuportaran a protokol: <code>$1</code> (naipakasigud ti http:// no awan ti protokol a nainaganan).',
+{PLURAL:$2|Ti protokol|Dagiti protokol}} a nasuportaran: <code>$1</code> (naipakasigud ti http:// no awan ti protokol a nainaganan).',
 'linksearch-line' => 'Ti $1 ket nakasilpo idiay $2',
 'linksearch-error' => 'Ti naatap a tarheta ket agparang laeng iti pinagrugi ti nagan ti agsangaili.',
 
@@ -2017,16 +2014,12 @@ Dagiti nasuportaran a protokol: <code>$1</code> (naipakasigud ti http:// no awan
 # Special:ActiveUsers
 'activeusers' => 'Listaan dagiti nasiglat nga agar-aramat',
 'activeusers-intro' => 'Daytoy ti listaan dagiti agar-aramat nga adda inararamidda kadagiti napalabas a $1 {{PLURAL:$1|nga aldaw|nga alaldaw}}.',
-'activeusers-count' => '$1 {{PLURAL:$1|nga inurnos|kadagiti inurnos}} idi kalpasan ti  {{PLURAL:$3|nga aldaw|$3 nga alaldaw}}',
+'activeusers-count' => '$1 {{PLURAL:$1|a tignay|tigtignay}} idi kalpasan ti {{PLURAL:$3|nga aldaw|$3 nga alaldaw}}',
 'activeusers-from' => 'Iparang dagiti agar-aramat a mangrugi iti:',
 'activeusers-hidebots' => 'Ilemmeng dagiti bot',
 'activeusers-hidesysops' => 'Ilemmeng dagiti administrador',
 'activeusers-noresult' => 'Awan ti nasarakan nga agar-aramat.',
 
-# Special:Log/newusers
-'newuserlogpage' => 'Listaan dagiti naaramid nga agar-aramat',
-'newuserlogpagetext' => 'Listaan dagiti panakaramid ti agar-aramat.',
-
 # Special:ListGroupRights
 'listgrouprights' => 'Dagiti karbengan ti bunggoy ti agar-aramat',
 'listgrouprights-summary' => 'Dagiti sumaganad a listaan ti bunggoy ti agar-aramat a naipalawag iti daytoy a wiki, a nairaman dagiti karbengan ti panagserrekda.
@@ -2084,7 +2077,7 @@ Ti e-surat nga inkabilmo idiay  [[Special:Preferences|kakaykayatam]] ket agparan
 'usermessage-editor' => 'Mensahero iti sistema',
 
 # Watchlist
-'watchlist' => 'Bambantayak',
+'watchlist' => 'Bambantayan',
 'mywatchlist' => 'Bambantayan',
 'watchlistfor2' => 'Para iti $1 $2',
 'nowatchlist' => 'Awan ti banag iti listaan dagiti bambantayam.',
@@ -2092,8 +2085,8 @@ Ti e-surat nga inkabilmo idiay  [[Special:Preferences|kakaykayatam]] ket agparan
 'watchnologin' => 'Saan a nakastrek',
 'watchnologintext' => 'Masapul a [[Special:UserLogin|nakastrekka]] tapno mabaliwam dagiti bambantayam a panid.',
 'addwatch' => 'Inayon iti bambantayan',
-'addedwatchtext' => "Nainayonen ti panid iti \"[[:\$1]]\" iti [[Special:Watchlist|listaan ti bambantayam]].
-Mailistanto ditoy dagiti pinagsukat daytoy a panid iti masakbayan agraman ti kanaigna a panid-tungtongan, ket agparang ti panid a kas '''napuskol''' iti [[Special:RecentChanges|listaan ti naudi a balbaliw]] tapno nalaklaka a malasin.",
+'addedwatchtext' => 'Ti panid iti "[[:$1]]" ket nainayonen idiay [[Special:Watchlist|listaan ti bambantayam]].
+Dagiti masakbayan a panagsukat iti daytoy a panid ken dagiti mainaig a tungtunganna a panid ket mailistanto idiay.',
 'removewatch' => 'Ikkaten dita bambantayan',
 'removedwatchtext' => 'Daytoy a panid  "[[:$1]]" ket naikkat idiay [[Special:Watchlist|bambantayam]].',
 'watch' => 'bantayan',
@@ -2161,6 +2154,8 @@ $UNWATCHURL
 
 Ti makunkunam ken no masapulmo pay ti tulong:
 {{canonicalurl:{{MediaWiki:Helppage}}}}',
+'created' => 'naaramid',
+'changed' => 'nasukatan',
 
 # Delete
 'deletepage' => 'Ikkaten ti panid',
@@ -2250,9 +2245,9 @@ Dagitoy dagiti agdama a kasasaad ti panid a '''$1''':",
 'protect-cascadeon' => 'Daytoy a panid ket agdama a  nasalakniban gapu ta nairaman kadagiti sumaganad a {{PLURAL:$1|panid, nga addaan|pampanid, nga addaan}} ti sipapakat a salaknib ti amin-amin.
 Mabalinmo a sukatan ti lessaad ti salaknib daytoy a panid, ngem saanna a tignayen ti salaknib nga amin-amin.',
 'protect-default' => 'Palubosan amin nga agar-aramat',
-'protect-fallback' => 'Masapul ti "$1" a pammalubos',
-'protect-level-autoconfirmed' => 'Serraan dagiti baro ken saan a nakarehistro nga agar-aramat',
-'protect-level-sysop' => 'Dagiti administrador laeng',
+'protect-fallback' => 'Palubosan laeng dagiti agar-aramat nga adda iti "$1" a pammalubos',
+'protect-level-autoconfirmed' => 'Palubosan laeng dagiti automatiko a napasingkedan nga agar-aramat',
+'protect-level-sysop' => 'Palubosan laeng dagiti administrador',
 'protect-summary-cascade' => 'agsariap',
 'protect-expiring' => 'agpaso inton $1 (UTC)',
 'protect-expiring-local' => 'agpaso $1',
@@ -2554,18 +2549,18 @@ Ti agserra ken aglukat iti database, masapul a masuratan ti web server.',
 # Move page
 'move-page' => 'Iyalis ti $1',
 'move-page-legend' => 'Iyalis ti panid',
-'movepagetext' => "Ti panagusar ti kinabuklan dita baba, ket panaganan ti panid, iyalis na amin ti pakasaritaan na idiay baro a nagan.
-Ti daan a titulo ket agbalin baw-ing a panid idiay baro a titulo.
-Mapabarom a kas automatiko dagiti baw-ing a nakatudo dita kasigud a titulo.
-No agpili ka a saan mo a kayat, pasaraduam nga kitaen ti [[Special:DoubleRedirects|doble]] wenno [[Special:BrokenRedirects|nadadael a baw-ing]].
-Rebbengem ti mangpatalged nga amin a panilpo ket agtultuloy a nakatudo iti nasken a papananda.
+'movepagetext' => "Ti panagusar ti kinabuklan dita baba, ket mangnagan manen ti panid, a mangiyalis amin ti pakasaritaanna idiay baro a nagan.
+Ti daan a titulo ket agbalin baw-ing a panid idiay baro a titulo.
+Mapabarom a kas automatiko dagiti baw-ing a nakatudo dita kasisigud a titulo.
+No agpilika a saanmo a kayat, pasaraduam a kitaen ti [[Special:DoubleRedirects|doble]] wenno [[Special:BrokenRedirects|nadadael a baw-ing]].
+Renbbengmo ti mangpatalged nga amin a silpo ket agtultuloy a nakatudo iti nasken a papananda.
 
-Laglagipen a ti panid ket '''saan''' a maiyalis no addan sigud a panid iti baro a titulo, malaksid no awan linaonna wenno no maysa a baw-ing a panid ken awan ti panagbaliw iti pakasaritaan ti napalabas. 
+Laglagipen a ti panid ket '''saan''' a maiyalis no addan sigud a panid iti baro a titulo, malaksid no daytoy ket maysa a baw-ing ken awan ti napalabas a pakasaritaan ti panag-urnos. 
 Kayat a sawen daytoy a mabalinmo a suktan ti nagan ti maysa a panid manipud iti punto ti pannakasukat ti nagan no nagbiddutka, ken saan mo a mabalin a suratan manen ti addaan a panid.
 
 '''Ballaag!'''
 Mabalin a maysa daytoy a nakaro ken saan a bigla a panagbaliw iti maysa a nasikat a panid;
-pangngaasim ta pasingkedam a maawatam ti ibunga dayoty sakbay nga agtuloyka a mangbaliw.",
+pangngaasim a pasingkedam a maawatam ti ibunga daytoy sakbay nga agtuloyka a mangbaliw.",
 'movepagetext-noredirectfixer' => "Ti panagusar ti kinabuklan dita baba, ket panaganan ti panid, iyalis na amin ti pakasaritaan na idiay baro a nagan.
 Ti daan a titulo ket agbalin baw-ing a panid idiay baro a titulo.
 Pasaruduam a kitaen ti [[Special:DoubleRedirects|doble]] wenno [[Special:BrokenRedirects|nadadael a baw-ing]].
@@ -2948,6 +2943,7 @@ No usarem daytoy, baka makompromiso ti sistema.",
 'file-nohires' => 'Awan ti mabalin a nangatngato a resolusion.',
 'svg-long-desc' => 'SVG a papeles, babassit ngem $1 × $2 pixels, kadakkel ti papeles: $3',
 'svg-long-desc-animated' => 'Naanimado nga SVG a papeles, babassit ngem  $1 × $2 pixels, kadakkel ti papeles: $3',
+'svg-long-error' => 'Saan nga umisu a papeles ti SVG: $1',
 'show-big-image' => 'Sibubukel a resolusion',
 'show-big-image-preview' => 'Kadakkel na daytoy a pagpadas: $1.',
 'show-big-image-other' => 'Sabali  {{PLURAL:$2|a resolusion|kadagiti resolusion}}: $1.',
@@ -3631,7 +3627,7 @@ Dagiti imahen ket agparang iti kadakkelan a resolusion, dagiti sabali a kita ti
 'specialpages-group-highuse' => 'Adu ti panaka-usar a pampanid',
 'specialpages-group-pages' => 'Listaan dagiti panid',
 'specialpages-group-pagetools' => 'Ramramit ti panid',
-'specialpages-group-wiki' => 'Linaon ti wiki ken ramramit',
+'specialpages-group-wiki' => 'Datos ken ramramit',
 'specialpages-group-redirects' => 'Maibawbaw-ing dagiti espesial a pampanid',
 'specialpages-group-spam' => 'Ramramit kontra spam',
 
@@ -3730,7 +3726,10 @@ Daytoy a pagsaadan ket agdadama ti teknikal a pagrigrigatan.',
 'logentry-newusers-create' => 'Nagpartuat idi ti $1 a pakabilangan ti agar-aramat',
 'logentry-newusers-create2' => 'Nagpartuat ni ti $3 a pakabilangan ti agar-aramat babaen ni $1',
 'logentry-newusers-autocreate' => 'Ti pakabilangan ni $1 ket automatiko a napartuat',
-'newuserlog-byemail' => 'naipatulod ti kontrasenias ti e-surat',
+'logentry-rights-rights' => 'Ni $1 ket nangbaliw ti grupo a panakaikameng para kenni $3 manipud ti $4 iti $5',
+'logentry-rights-rights-legacy' => 'Ni $1 ket nangbaliw ti grupo a panakaikameng para kenni $3',
+'logentry-rights-autopromote' => 'Ni $1 ket automatiko idi a naipangato manipud ti $4 iti $5',
+'rightsnone' => '(awan)',
 
 # Feedback
 'feedback-bugornote' => 'No agsagana kan nga agibaga ti teknikal a pakirut a naisalaysay pangngaasi nga [$1 ireporta ti kiteb].
@@ -3804,6 +3803,4 @@ Nupay kasta, mau-sarmo ti nakabuklan dita baba. Ti komentario nga itedmo ket mai
 'duration-centuries' => '$1 {{PLURAL:$1|siglo|sig-siglo}}',
 'duration-millennia' => '$1 {{PLURAL:$1|milenio|mil-milenio}}',
 
-# Unknown messages
-'svg-long-error' => 'Saan nga umisu a papeles ti SVG: $1',
 );
index f7ce2a7..fad44dd 100644 (file)
@@ -8,6 +8,7 @@
  * @file
  *
  * @author Amire80
+ * @author Andrijko Z.
  * @author Reedy
  * @author Sapral Mikail
  * @author Tagir
@@ -631,9 +632,11 @@ $messages = array(
 'right-move' => 'ОагIувний цIи хувца',
 'right-movefile' => 'Паьлий цIи хувца',
 
+# Special:Log/newusers
+'newuserlogpage' => 'Дакъалаьцархоший дIаязбeнна таптар',
+
 # User rights log
 'rightslog' => 'Дакъалаьцархочунна бокъона тептар',
-'rightsnone' => '(а)',
 
 # Associated actions - in the sentence "You do not have permission to X"
 'action-read' => 'Укх оагIуви дешам',
@@ -790,9 +793,6 @@ $messages = array(
 'linksearch-ok' => 'Лаха',
 'linksearch-line' => '$1 тIа Iинк $2 юкъера',
 
-# Special:Log/newusers
-'newuserlogpage' => 'Дакъалаьцархоший дIаязбeнна таптар',
-
 # Special:ListGroupRights
 'listgrouprights-members' => '(тоабий дагарче)',
 
@@ -871,7 +871,7 @@ $messages = array(
 'blanknamespace' => '(Корта)',
 
 # Contributions
-'contributions' => 'Дакъалаьцархочунна къахьегам',
+'contributions' => '{{GENDER:$1|Дакъалаьцархочунна}} къахьегам',
 'contributions-title' => '$1 дакъалаьцархочунна къахьегам',
 'mycontris' => 'Са къахьегам',
 'contribsub2' => '$1 ($2) баь болх',
@@ -1180,4 +1180,7 @@ $messages = array(
 'htmlform-reset' => 'Хувцамаш юхадаккха',
 'htmlform-selectorother-other' => 'Кхыдола',
 
+# New logging system
+'rightsnone' => '(а)',
+
 );
index de5f384..505fa76 100644 (file)
@@ -573,7 +573,6 @@ Publikigante vua skribajo hike, vu asertas ke olu skribesis da vu ipsa o kopiesi
 'template-protected' => '(protektita)',
 'template-semiprotected' => '(mi-protektita)',
 'hiddencategories' => 'Ca pagino esas membro di {{PLURAL:$1|1 celita kategorio|$1 celita kategorii}}:',
-'nocreatetitle' => 'Kreado di pagini limitita',
 'permissionserrorstext-withaction' => 'Vu ne darfas $2, pro la {{PLURAL:$1|kauzo|kauzi}} sequanta:',
 'moveddeleted-notice' => 'Ca pagino efacesabas.
 La efaco-registraro e movo-registraro dil pagino provizesar sequante por refero.',
@@ -788,9 +787,11 @@ Ol mustas ne havar plu kam $1 {{PLURAL:$1|litero|literi}}.',
 'right-browsearchive' => 'Serchar pagini efacita',
 'right-rollback' => 'Rapide retrorular la redakti da la lasta uzanto qua redaktis specigita pagino',
 
+# Special:Log/newusers
+'newuserlogpage' => 'Uzanto-kreo-registro',
+
 # User rights log
 'rightslog' => 'Uzanto-yuri-registraro',
-'rightsnone' => '(nula)',
 
 # Associated actions - in the sentence "You do not have permission to X"
 'action-read' => 'lektar ca pagino',
@@ -1030,9 +1031,6 @@ Volutez kontrolar <strong>[[:$1]]</strong> se vu ne esas certa pri chanjar olu.
 # Special:ActiveUsers
 'activeusers-noresult' => 'Nula uzanto trovesis.',
 
-# Special:Log/newusers
-'newuserlogpage' => 'Uzanto-kreo-registro',
-
 # Special:ListGroupRights
 'listgrouprights-group' => 'Grupo',
 'listgrouprights-members' => '(listo di membri)',
@@ -1549,6 +1547,9 @@ Vu darfos adjuntar kauso en la rezumo.',
 'htmlform-reset' => 'Desfacar chanji',
 'htmlform-selectorother-other' => 'Altra',
 
+# New logging system
+'rightsnone' => '(nula)',
+
 # Search suggestions
 'searchsuggest-search' => 'Serchez',
 'searchsuggest-containing' => 'quan kontenas...',
index 4da56a3..732549b 100644 (file)
@@ -461,12 +461,13 @@ Of margir notendur eru að reyna að skoða þessa síðu.
 Vinsamlegast bíddu í smástund áður en þú reynir að sækja þessa síðu aftur.
 
 $1',
+'pool-timeout' => 'Of löng bið efttir lás',
 'pool-queuefull' => 'Vefþjónninn er yfirhlaðinn í augnablikinu.',
 'pool-errorunknown' => 'Óþekkt villa',
 
 # 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) and the disambiguation template definition (see disambiguations).
 'aboutsite' => 'Um {{SITENAME}}',
-'aboutpage' => 'Project:Um',
+'aboutpage' => 'Project:Um verkefnið',
 'copyright' => 'Efni má nota samkvæmt $1.',
 'copyrightpage' => '{{ns:project}}:Höfundarréttur',
 'currentevents' => 'Potturinn',
@@ -482,7 +483,7 @@ $1',
 'portal' => 'Samfélagsgátt',
 'portal-url' => 'Project:Samfélagsgátt',
 'privacy' => 'Meðferð persónuupplýsinga',
-'privacypage' => 'Project:Stefnumál um friðhelgi',
+'privacypage' => 'Project:Meðferð persónuupplýsinga',
 
 'badaccess' => 'Aðgangsvilla',
 'badaccess-group0' => 'Þú hefur ekki leyfi til að framkvæma þá aðgerð sem þú baðst um.',
@@ -593,6 +594,8 @@ Gjörðu svo vel og tilkynntu atvikið til [[Special:ListUsers/sysop|stjórnanda
 'cannotdelete' => 'Ekki var hægt að eyða síðunni "$1".
 Líklegt er að einhver annar hafi gert það.',
 'cannotdelete-title' => 'Gat ekki eytt síðunni $1',
+'delete-hook-aborted' => 'Eyðing síðu stöðvuð af viðbótarkrók (extension hook).
+Engin skýring gefin.',
 'badtitle' => 'Slæmur titill',
 'badtitletext' => 'Umbeðin síðutitill er ógildur.',
 'perfcached' => 'Eftirfarandi er afrit af umbeðinni síðu og gæti því ekki verið nýjasta útgáfa hennar. Allt að {{PLURAL:$1|ein niðurstaða er aðgengileg|$1 niðurstöður eru aðgengilegar}} í skyndiminninu.',
@@ -605,7 +608,7 @@ Spurn: $2',
 'viewsource-title' => 'Skoða efni $1',
 'actionthrottled' => 'Aðgerðin kafnaði',
 'actionthrottledtext' => 'Til þess að verjast ruslpósti, er ekki hægt að framkvæma þessa aðgerð of oft, og þú hefur farið fram yfir þau takmörk. Gjörðu svo vel og reyndu aftur eftir nokkrar mínútur.',
-'protectedpagetext' => 'Þessari síðu hefur verið læst til að koma í veg fyrir breytingar.',
+'protectedpagetext' => 'Þessari síðu hefur verið læst til að koma í veg fyrir breytingar eða aðrar aðgerðir.',
 'viewsourcetext' => 'Þú getur skoðað og afritað kóða þessarar síðu:',
 'viewyourtext' => "Þú getur skoðað og afritað kóða '''breytinganna þinna''' yfir á þessa síðu:",
 'protectedinterface' => 'Þessi síða útvegar textann sem birtist í viðmóti hugbúnaðarins sem keyrir þessa síðu, og er læst til að koma í veg fyrir misnotkun.
@@ -799,6 +802,7 @@ Tímabundið lykilorð: $2',
 'changeemail-oldemail' => 'Núverandi netfang:',
 'changeemail-newemail' => 'Nýtt netfang:',
 'changeemail-none' => '(ekkert)',
+'changeemail-password' => '{{SITENAME}} lykilorðið þitt:',
 'changeemail-submit' => 'Breyta netfangi',
 'changeemail-cancel' => 'Hætta við',
 
@@ -976,7 +980,6 @@ Verndunarskrá síðunnar er gefin fyrir neðan til tilvísunar.",
 'template-protected' => '(vernduð)',
 'template-semiprotected' => '(hálfvernduð)',
 'hiddencategories' => 'Þessi síða er meðlimur í {{PLURAL:$1|1 földum flokki|$1 földum flokkum}}:',
-'nocreatetitle' => 'Síðugerð takmörkuð',
 'nocreatetext' => '{{SITENAME}} hefur takmarkað eiginleikann að gera nýjar síður.
 Þú getur farið til baka og breytt núverandi síðum, eða [[Special:UserLogin|skráð þið inn eða búið til aðgang]].',
 'nocreate-loggedin' => 'Þú hefur ekki leyfi til að skapa nýjar síður.',
@@ -992,6 +995,8 @@ Eyðingarskrá og flutningaskrá fyrir þessa síðu eru útvegaðar hér til þ
 'moveddeleted-notice' => 'Þessari síðu hefur verið eytt.
 Eyðingaskrá og flutningaskrá síðunnar eru gefnar fyrir neðan til tilvísunar.',
 'log-fulllog' => 'Skoða alla aðgerðarskránna',
+'edit-hook-aborted' => 'Breyting síðu stöðvuð af viðbótarkrók (extension hook).
+Engin skýring gefin.',
 'edit-gone-missing' => 'Gat ekki uppfært síðu.
 Svo virðist sem henni hafi verið eytt.',
 'edit-conflict' => 'Breytingaárekstur.',
@@ -999,6 +1004,9 @@ Svo virðist sem henni hafi verið eytt.',
 'edit-already-exists' => 'Gat ekki skapað nýja síðu.
 Hún er nú þegar til.',
 'defaultmessagetext' => 'Sjálfgefinn skilaboða texti',
+'content-failed-to-parse' => 'Gat ekki þáttað $2 efni samkvæmt $1 líkani: $3',
+'invalid-content-data' => 'Ógild efnisgögn.',
+'content-not-allowed-here' => '„$1“ efni er ekki leyfilegt á síðunni [[$2]]',
 
 # Content models
 'content-model-wikitext' => 'wiki-texti',
@@ -1326,9 +1334,9 @@ Ekki er hægt að taka þessa breytingu til baka.',
 'prefs-emailconfirm-label' => 'Staðfesting netfangs:',
 'prefs-textboxsize' => 'Stærð breytingarglugga',
 'youremail' => 'Netfang:',
-'username' => 'Notandanafn:',
-'uid' => 'Raðnúmer:',
-'prefs-memberingroups' => 'Meðlimur {{PLURAL:$1|hóps|hópa}}:',
+'username' => '{{Gender:$1|Notandanafn}}:',
+'uid' => 'Raðnúmer {{GENDER:$1|notanda}}:',
+'prefs-memberingroups' => '{{GENDER:$2|Meðlimur}} {{PLURAL:$1|hóps|hópa}}:',
 'prefs-registration' => 'Nýskráningartími:',
 'yourrealname' => 'Fullt nafn:',
 'yourlanguage' => 'Viðmótstungumál:',
@@ -1478,12 +1486,13 @@ Tölvupóstfang þitt er ekki gefið upp þegar aðrir notendur hafa samband vi
 'right-sendemail' => 'Senda tölvupóst til annara notenda',
 'right-passwordreset' => 'Skoða tölvupósta um endurstillingu lykilorðs',
 
+# Special:Log/newusers
+'newuserlogpage' => 'Skrá yfir nýja notendur',
+'newuserlogpagetext' => 'Þetta er skrá yfir nýskráða notendur.',
+
 # User rights log
 'rightslog' => 'Réttindaskrá notenda',
 'rightslogtext' => 'Þetta er skrá yfir breytingar á réttindum notenda.',
-'rightslogentry' => 'breytti réttindum $1 frá $2 í $3',
-'rightslogentry-autopromote' => 'fékk sjálfvirkt aukin réttindi frá $2 til $3',
-'rightsnone' => '(engin)',
 
 # Associated actions - in the sentence "You do not have permission to X"
 'action-read' => 'lesa þessa síðu',
@@ -1946,6 +1955,7 @@ Hún er tilvísun á [[$2]].',
 # Miscellaneous special pages
 'nbytes' => '$1 {{PLURAL:$1|bæt|bæti}}',
 'ncategories' => '$1 {{PLURAL:$1|flokkur|flokkar}}',
+'ninterwikis' => '$1 {{PLURAL:$1|tungumálatengill|tungumálatenglar}}',
 'nlinks' => '$1 {{PLURAL:$1|tengill|tenglar}}',
 'nmembers' => '$1 {{PLURAL:$1|meðlimur|meðlimir}}',
 'nrevisions' => '$1 {{PLURAL:$1|breyting|breytingar}}',
@@ -1974,6 +1984,7 @@ Hún er tilvísun á [[$2]].',
 'mostlinkedtemplates' => 'Mest ítengdu snið',
 'mostcategories' => 'Mest flokkaðar greinar',
 'mostimages' => 'Mest ítengdu skrárnar',
+'mostinterwikis' => 'Síður með flestm tungumálatenglum',
 'mostrevisions' => 'Síður eftir fjölda breytinga',
 'prefixindex' => 'Allar síður með forskeyti',
 'prefixindex-namespace' => 'Allar síður með forskeyti ($1 nafnrými)',
@@ -2049,6 +2060,7 @@ Vinsamlegast athugið að aðrar vefsíður gætu tengt beint í skrár héðan,
 
 # SpecialCachedPage
 'cachedspecial-viewing-cached-ttl' => 'Þú ert að skoða útgáfu síðunnar úr skyndiminni, sem getur verið allt að $1 gömul.',
+'cachedspecial-viewing-cached-ts' => 'Þetta er útgáfa þessarar síðu úr skyndiminni og sem endurspeglar ekki endilega núverandi ástand.',
 'cachedspecial-refresh-now' => 'Skoða síðustu',
 
 # Special:Categories
@@ -2070,9 +2082,9 @@ Sjá einnig [[Special:WantedCategories|eftirsótta flokka]].',
 'linksearch-pat' => 'Leitarmynstur:',
 'linksearch-ns' => 'Nafnrými:',
 'linksearch-ok' => 'Leita',
-'linksearch-text' => 'Algildistafir eins og "*.wikipedia.org" eru leyfðir.<br />
-Stafurinn þarf í minnsta kosti að innihalda rótarlén, eins og "*.org"
-Studdar samskiptareglur: <code>$1</code> (ekki bæta neinum af þessum í leitina)',
+'linksearch-text' => 'Algildisleit eins og "*.wikipedia.org" er leyfð.<br />
+Leitin þarf að minnsta kosti að innihalda rótarlén, eins og "*.org"
+{{PLURAL:$2|Studd samskiptaregla|Studdar samskiptareglur}}: <code>$1</code> (http:// sjálfgefið ef engin regla er valin).',
 'linksearch-line' => 'Tengt er í $1 á síðunni $2',
 'linksearch-error' => 'Algildistafir mega engöngu birtast í upphafi vefslóðarinnar.',
 
@@ -2091,10 +2103,6 @@ Studdar samskiptareglur: <code>$1</code> (ekki bæta neinum af þessum í leitin
 'activeusers-hidesysops' => 'Fela möppudýr',
 'activeusers-noresult' => 'Enginn notandi fannst.',
 
-# Special:Log/newusers
-'newuserlogpage' => 'Skrá yfir nýja notendur',
-'newuserlogpagetext' => 'Þetta er skrá yfir nýskráða notendur.',
-
 # Special:ListGroupRights
 'listgrouprights' => 'Notandahópréttindi',
 'listgrouprights-summary' => 'Hér er listi yfir notendahópa á þessum wiki, með þeirra réttindum. 
@@ -2118,9 +2126,11 @@ Studdar samskiptareglur: <code>$1</code> (ekki bæta neinum af þessum í leitin
 'mailnologin' => 'Ekkert netfang til að senda á',
 'mailnologintext' => 'Þú verður að vera [[Special:UserLogin|innskráð(ur)]] auk þess að hafa gilt netfang í [[Special:Preferences|stillingunum]] þínum til að senda tölvupóst til annara notenda.',
 'emailuser' => 'Senda þessum notanda tölvupóst',
+'emailuser-title-target' => 'Sendu þessum {{GENDER:$1|notanda}} tölvupóst',
+'emailuser-title-notarget' => 'Senda tölvupóst',
 'emailpage' => 'Senda tölvupóst',
-'emailpagetext' => 'Hafi notandi tilgreint netfang í stillingunum sínum er hægt að senda póst til hans hér.
-Póstfangið sem þú tilgreindir í [[Special:Preferences|stillingunum þínum]] birtist í "Frá:" hluta tölvupóstsins, svo að viðtakandi þess geti svarað beint til þín.',
+'emailpagetext' => 'Hafi notandinn tilgreint netfang í stillingunum sínum er hægt að senda póst til {{GENDER:$1|hans|hennar|hans}} hér.
+Póstfangið sem þú tilgreindir í [[Special:Preferences|stillingunum þínum]] birtist í "Frá:" hluta tölvupóstsins, svo að viðtakandi hans geti svarað beint til þín.',
 'usermailererror' => 'Póst hlutur skilaði villu:',
 'defemailsubject' => '{{SITENAME}} skilaboð frá notandanum "$1"',
 'usermaildisabled' => 'Netfang notenda er óvirkt',
@@ -2158,8 +2168,8 @@ Póstfangið sem þú tilgreindir í [[Special:Preferences|stillingunum þínum]
 'watchnologin' => 'Óinnskráð(ur)',
 'watchnologintext' => 'Þú verður að vera [[Special:UserLogin|innskáð(ur)]] til að geta breytt vaktlistanum.',
 'addwatch' => 'Bæta á vaktlistann',
-'addedwatchtext' => "Síðunni „[[:$1]]“ hefur verið bætt á [[Special:Watchlist|Vaktlistann]] þinn.
-Frekari breytingar á henni eða spallsíðu hennar munu verða sýndar þar, og síðan mun vera '''feitletruð''' í [[Special:RecentChanges|Nýlegum breytingum]] svo auðveldara sé að finna hana.",
+'addedwatchtext' => 'Síðunni „[[:$1]]“ hefur verið bætt á [[Special:Watchlist|vaktlistann]] þinn.
+Frekari breytingar á henni eða spallsíðu hennar munu verða sýndar þar.',
 'removewatch' => 'Fjarlægja af vaktlistanum',
 'removedwatchtext' => 'Síðan „[[:$1]]“ hefur verið fjarlægð af [[Special:Watchlist|vaktlistanum þínum]].',
 'watch' => 'Vakta',
@@ -2185,8 +2195,19 @@ Frekari breytingar á henni eða spallsíðu hennar munu verða sýndar þar, og
 'unwatching' => 'Afvakta...',
 'watcherrortext' => 'Villa kom upp við breytingu á stillingum vaktlistans fyrir "$1".',
 
+'enotif_mailer' => '{{SITENAME}} tilkynningasendill',
 'enotif_reset' => 'Merkja allar síður sem skoðaðar',
 'enotif_impersonal_salutation' => '{{SITENAME}}notandi',
+'enotif_subject_deleted' => '$1 á {{SITENAME}} hefur verið eytt af {{gender:$2|$2}}',
+'enotif_subject_created' => '$1 á {{SITENAME}} hefur verið búin til af {{gender:$2|$2}}',
+'enotif_subject_moved' => '$1 á {{SITENAME}} hefur verið færð af {{gender:$2|$2}}',
+'enotif_subject_restored' => '$1 á {{SITENAME}} hefur verið endurvakin af {{gender:$2|$2}}',
+'enotif_subject_changed' => '$1 á {{SITENAME}} hefur verið breytt af {{gender:$2|$2}}',
+'enotif_body_intro_deleted' => 'Síðan „$1” sem þú hefur beðið um að fylgjast með á {{SITENAME}} hefur verið eytt $PAGEEDITDATE af {{gender:$2|$2}}. Þetta er tengill á síðuna: $3.',
+'enotif_body_intro_created' => 'Síðan „$1” sem þú hefur beðið um að fylgjast með á {{SITENAME}} hefur verið búin til $PAGEEDITDATE af {{gender:$2|$2}}. Þetta er tengill á síðuna: $3.',
+'enotif_body_intro_moved' => 'Síðan „$1” sem þú hefur beðið um að fylgjast með á {{SITENAME}} hefur verið færð $PAGEEDITDATE af {{gender:$2|$2}}. Þetta er tengill á síðuna: $3.',
+'enotif_body_intro_restored' => 'Síðan „$1” sem þú hefur beðið um að fylgjast með á {{SITENAME}} hefur verið endurvakin $PAGEEDITDATE af {{gender:$2|$2}}. Þetta er tengill á síðuna: $3.',
+'enotif_body_intro_changed' => 'Síðan „$1” sem þú hefur beðið um að fylgjast með á {{SITENAME}} hefur verið breytt $PAGEEDITDATE af {{gender:$2|$2}}. Þetta er tengill á síðuna: $3.',
 'enotif_lastvisited' => 'Heimsóttu eftirfarandi tengil til að sjá allar breytingar síðan 
 þú heimsóttir síðuna síðast:
   $1',
@@ -2195,15 +2216,7 @@ Frekari breytingar á henni eða spallsíðu hennar munu verða sýndar þar, og
 'enotif_anon_editor' => 'ónefndum notanda $1',
 'enotif_body' => 'Kæri $WATCHINGUSERNAME,
 
-Síðan „$PAGETITLE” sem þú hefur beðið um að fylgjast með á {{SITENAME}} hefur verið $CHANGEDORCREATED $PAGEEDITDATE af 
-$PAGEEDITOR. Breytingarágripið var:
-
-   $PAGESUMMARY
-
-Þetta er tengill á síðuna:
-
-   $PAGETITLE_URL
-
+$PAGEINTRO
 $NEWPAGE
 
 Til þess að hafa samband við $PAGEEDITOR, smelltu á:
@@ -2226,6 +2239,8 @@ Til þess að breyta stillingum um hvenær þú færð sendar tilkynningar, smel
 Til þess að hætta að fylgjast með „$PAGETITLE”, smelltu á:
 
 $UNWATCHURL',
+'created' => 'búin til',
+'changed' => 'breytt',
 
 # Delete
 'deletepage' => 'Eyða',
@@ -2296,6 +2311,8 @@ Sjáðu [[Special:ProtectedPages|Verndunarskrá]] fyrir núverandi lista yfir ve
 'prot_1movedto2' => '[[$1]] færð á [[$2]]',
 'protect-badnamespace-title' => 'Óverndanlegt nafnrými',
 'protect-badnamespace-text' => 'Síður í þessu nafnrými geta ekki verið verndaðar.',
+'protect-norestrictiontypes-text' => 'Ekki er hægt að vernda síðuna þar sem skilgreind verndunarstig eru ekki til staðar.',
+'protect-norestrictiontypes-title' => 'Óverndanleg síða',
 'protect-legend' => 'Verndunarstaðfesting',
 'protectcomment' => 'Ástæða:',
 'protectexpiry' => 'Rennur út:',
@@ -2380,7 +2397,8 @@ Innihald greinarinnar er einungis aðgengilegt möppudýrum.',
 'undeletedrevisions' => '$1 {{PLURAL:$1|breyting endurvakin|breytingar endurvaktar}}',
 'undeletedrevisions-files' => '$1 {{PLURAL:$1|breyting|breytingar}} og $2 {{PLURAL:$2|skrá|skrár}} endurvaktar',
 'undeletedfiles' => '{{PLURAL:$1|Ein skrá endurvakin|$1 skrár endurvaktar}}',
-'cannotundelete' => 'Ekki var hægt að afturkalla síðuna. (Líklega hefur einhver gert það á undan þér.)',
+'cannotundelete' => 'Ekki var hægt að afturkalla eyðingu.
+$1',
 'undeletedpage' => "'''$1 var endurvakin'''
 
 Skoðaðu [[Special:Log/delete|eyðingaskrána]] til að skoða eyðingar og endurvakningar.",
@@ -2412,7 +2430,7 @@ $1',
 'blanknamespace' => '(Aðalnafnrýmið)',
 
 # Contributions
-'contributions' => 'Framlög notanda',
+'contributions' => 'Framlög {{GENDER:$1|notanda}}',
 'contributions-title' => 'Framlög notanda $1',
 'mycontris' => 'Framlög',
 'contribsub2' => 'Eftir $1 ($2)',
@@ -2603,6 +2621,7 @@ Vinsamlegast hafðu samband við internetþjónustuaðilann þinn eða netstjór
 Mundu að [[Special:UnlockDB|opna hann aftur]] þegar þú hefur lokið viðgerðum.',
 'unlockdbsuccesstext' => 'Gagnagrunnurinn hefur verið opnaður.',
 'databasenotlocked' => 'Gagnagrunnurinn er ekki læstur.',
+'lockedbyandtime' => '(af {{GENDER:$1|$1}} kl. $3, $2)',
 
 # Move page
 'move-page' => 'Færa $1',
@@ -3680,11 +3699,11 @@ Tæknilegir örðugleikar eru á þessari síðu.',
 'logentry-move-move_redir-noredirect' => '$1 færði $3 á $4 yfir tilvísun, án þess að skilja eftir tilvísun',
 'logentry-patrol-patrol' => '$1 merkti útgáfu $3 frá $4 sem yfirfarna',
 'logentry-patrol-patrol-auto' => '$1 merkti sjálfvirkt útgáfu $3 frá $4 sem yfirfarna',
-'logentry-newusers-newusers' => '$1 stofnaði notanda aðgang',
-'logentry-newusers-create' => '$1 stofnaði notanda aðgang',
-'logentry-newusers-create2' => '$1 stofnaði aðganginn $3',
+'logentry-newusers-newusers' => 'Notandaaðgangurinn $1 var stofnaður',
+'logentry-newusers-create' => 'Notandaaðgangurinn $1 var stofnaður',
+'logentry-newusers-create2' => '$1 stofnaði notandaaðganginn $3',
 'logentry-newusers-autocreate' => 'Aðgangurinn $1 var stofnaður sjálfvirkt',
-'newuserlog-byemail' => 'lykilorð sent með tölvupósti',
+'rightsnone' => '(engin)',
 
 # Feedback
 'feedback-bugornote' => 'Ef þú ert reiðubúinn að lýsa tæknilegri villu í smáatriðum, vinsamlegast [$1 tilkynntu villu].
index 80a2d33..53e7ba3 100644 (file)
@@ -39,6 +39,7 @@
  * @author McDutchie
  * @author Melos
  * @author Minerva Titani
+ * @author Muxator
  * @author Nemo bis
  * @author Nick1915
  * @author Ninniuz
  * @author Rippitippi
  * @author S.Örvarr.S
  * @author SabineCretella
+ * @author Sannita
  * @author Stefano-c
  * @author Tonyfroio
  * @author Trixt
  * @author Una giornata uggiosa '94
  * @author Vajotwo
  * @author Valepert
+ * @author Vituzzu
  * @author Ximo17
  * @author Xpensive
  * @author ZioNicco
@@ -136,6 +139,7 @@ $specialPageAliases = array(
        'Filepath'                  => array( 'Percorso' ),
        'Import'                    => array( 'Importa' ),
        'Invalidateemail'           => array( 'InvalidaEMail' ),
+       'JavaScriptTest'            => array( 'TestJavaScript' ),
        'BlockList'                 => array( 'IPBloccati', 'ElencoBlocchi', 'Blocchi' ),
        'LinkSearch'                => array( 'CercaCollegamenti', 'CercaLink' ),
        'Listadmins'                => array( 'Amministratori', 'ElencoAmministratori', 'Admin', 'Sysop', 'Cricca' ),
@@ -152,6 +156,7 @@ $specialPageAliases = array(
        'MIMEsearch'                => array( 'RicercaMIME' ),
        'Mostcategories'            => array( 'PagineConPiùCategorie' ),
        'Mostimages'                => array( 'ImmaginiPiùRichiamate' ),
+       'Mostinterwikis'            => array( 'InterwikiPiùRichiamati' ),
        'Mostlinked'                => array( 'PaginePiùRichiamate' ),
        'Mostlinkedcategories'      => array( 'CategoriePiùRichiamate' ),
        'Mostlinkedtemplates'       => array( 'TemplatePiùRichiamati' ),
@@ -246,14 +251,24 @@ $magicWords = array(
        'img_left'                  => array( '1', 'sinistra', 'left' ),
        'img_none'                  => array( '1', 'nessuno', 'none' ),
        'img_center'                => array( '1', 'centro', 'center', 'centre' ),
+       'img_framed'                => array( '1', 'riquadrato', 'incorniciato', 'originale', 'framed', 'enframed', 'frame' ),
+       'img_frameless'             => array( '1', 'senza_cornice', 'frameless' ),
        'img_page'                  => array( '1', 'pagina=$1', 'pagina_$1', 'page=$1', 'page $1' ),
+       'img_upright'               => array( '1', 'verticale', 'verticale=$1', 'verticale_$1', 'upright', 'upright=$1', 'upright $1' ),
        'img_border'                => array( '1', 'bordo', 'border' ),
+       'img_sub'                   => array( '1', 'pedice', 'sub' ),
+       'img_top'                   => array( '1', 'sopra', 'top' ),
+       'img_text_top'              => array( '1', 'testo-sopra', 'text-top' ),
+       'img_middle'                => array( '1', 'metà', 'middle' ),
+       'img_bottom'                => array( '1', 'sotto', 'bottom' ),
+       'img_text_bottom'           => array( '1', 'testo-sotto', 'text-bottom' ),
        'sitename'                  => array( '1', 'NOMESITO', 'SITENAME' ),
        'servername'                => array( '0', 'NOMESERVER', 'SERVERNAME' ),
        'gender'                    => array( '0', 'GENERE:', 'GENDER:' ),
        'currentweek'               => array( '1', 'SETTIMANACORRENTE', 'CURRENTWEEK' ),
        'localweek'                 => array( '1', 'SETTIMANALOCALE', 'LOCALWEEK' ),
        'plural'                    => array( '0', 'PLURALE:', 'PLURAL:' ),
+       'displaytitle'              => array( '1', 'MOSTRATITOLO', 'DISPLAYTITLE' ),
        'language'                  => array( '0', '#LINGUA', '#LANGUAGE:' ),
        'numberofadmins'            => array( '1', 'NUMEROADMIN', 'NUMBEROFADMINS' ),
        'special'                   => array( '0', 'speciale', 'special' ),
@@ -263,6 +278,9 @@ $magicWords = array(
        'index'                     => array( '1', '__INDICE__', '__INDEX__' ),
        'noindex'                   => array( '1', '__NOINDICE__', '__NOINDEX__' ),
        'protectionlevel'           => array( '1', 'LIVELLOPROTEZIONE', 'PROTECTIONLEVEL' ),
+       'formatdate'                => array( '0', 'formatodata', 'formatdate', 'dateformat' ),
+       'pagesincategory_pages'     => array( '0', 'pagine', 'pages' ),
+       'pagesincategory_files'     => array( '0', 'file', 'files' ),
 );
 
 $linkTrail = '/^([a-zàéèíîìóòúù]+)(.*)$/sDu';
@@ -322,9 +340,9 @@ $messages = array(
 # Font style option in Special:Preferences
 'editfont-style' => 'Stile del carattere nella casella di modifica:',
 'editfont-default' => 'Predefinito del browser',
-'editfont-monospace' => 'Font monospazio',
-'editfont-sansserif' => 'Font sans-serif',
-'editfont-serif' => 'Font serif',
+'editfont-monospace' => 'Carattere a larghezza fissa',
+'editfont-sansserif' => 'Carattere sans-serif',
+'editfont-serif' => 'Carattere serif',
 
 # Dates
 'sunday' => 'domenica',
@@ -402,6 +420,7 @@ $messages = array(
 'newwindow' => '(si apre in una nuova finestra)',
 'cancel' => 'Annulla',
 'moredotdotdot' => 'Altro...',
+'morenotlisted' => 'Altro...',
 'mypage' => 'Pagina',
 'mytalk' => 'discussioni',
 'anontalk' => 'Discussioni per questo IP',
@@ -482,7 +501,7 @@ $messages = array(
 'viewhelppage' => 'Visualizza la pagina di aiuto',
 'categorypage' => 'Visualizza la categoria',
 'viewtalkpage' => 'Visualizza la pagina di discussione',
-'otherlanguages' => 'Altre lingue',
+'otherlanguages' => 'In altre lingue',
 'redirectedfrom' => '(Reindirizzamento da <b>$1</b>)',
 'redirectpagesub' => 'Pagina di reindirizzamento',
 'lastmodifiedat' => "Questa pagina è stata modificata per l'ultima volta il $1 alle $2.",
@@ -647,7 +666,7 @@ Query: $2',
 'viewsourcetext' => 'È possibile visualizzare e copiare il codice sorgente di questa pagina:',
 'viewyourtext' => "È possibile visualizzare e copiare il codice sorgente delle '''tue modifiche''' a questa pagina:",
 'protectedinterface' => "Questa pagina contiene un elemento che fa parte dell'interfaccia utente del software di questo sito ed è protetta per evitare possibili abusi.
-Per aggiungere o modificare traduzioni per tutti i wiki usare [//translatewiki.net/ translatewiki.net], il progetto di localizzazione di MediaWiki,",
+Per aggiungere o modificare traduzioni per tutti i wiki usare [//translatewiki.net/ translatewiki.net], il progetto di localizzazione di MediaWiki.",
 'editinginterface' => "'''Attenzione:''' Il testo di questa pagina fa parte dell'interfaccia utente del sito. Tutte le modifiche apportate a questa pagina si riflettono sui messaggi visualizzati per tutti gli utenti su questo wiki.
 Per aggiungere o modificare le traduzioni valide su tutti i wiki, considera la possibilità di usare [//translatewiki.net/wiki/Main_Page?setlang=it translatewiki.net], il progetto MediaWiki per la localizzazione.",
 'sqlhidden' => '(la query SQL è stata nascosta)',
@@ -702,7 +721,7 @@ Non dimenticare di personalizzare le [[Special:Preferences|preferenze di {{SITEN
 'gotaccount' => "Hai già un accesso? '''$1'''.",
 'gotaccountlink' => 'Entra',
 'userlogin-resetlink' => 'Hai dimenticato i tuoi dati di accesso?',
-'createaccountmail' => 'Tramite email',
+'createaccountmail' => "Usa una password casuale temporanea e inviala all'indirizzo e-mail specificato sotto",
 'createaccountreason' => 'Motivo:',
 'badretype' => 'Le password inserite non coincidono tra loro.',
 'userexists' => 'Il nome utente inserito è già utilizzato.
@@ -768,6 +787,7 @@ Riprovare più tardi.',
 # E-mail sending
 'php-mail-error-unknown' => 'Errore sconosciuto nella funzione PHP mail()',
 'user-mail-no-addy' => 'Hai cercato di inviare una e-mail senza un indirizzo.',
+'user-mail-no-body' => 'Tentato di inviare una e-mail con un testo vuoto o estremamente breve.',
 
 # Change password dialog
 'resetpass' => 'Cambia la password',
@@ -789,10 +809,10 @@ La password potrebbe essere stata già cambiata, oppure potrebbe essere stata ri
 
 # Special:PasswordReset
 'passwordreset' => 'Reimposta password',
-'passwordreset-text' => 'Completa questo modulo per ricevere i dettagli del tuo account via e-mail.',
+'passwordreset-text' => 'Compila questo modulo per ricevere i dettagli del tuo account via e-mail.',
 'passwordreset-legend' => 'Reimposta password',
 'passwordreset-disabled' => 'La reimpostazione delle password è stata disabilitata su questa wiki',
-'passwordreset-pretext' => '{{PLURAL:$1||Immetti una delle porzioni di dati qui sotto}}',
+'passwordreset-pretext' => '{{PLURAL:$1||Immetti uno dei dati richiesti qui sotto}}',
 'passwordreset-username' => 'Nome utente:',
 'passwordreset-domain' => 'Dominio:',
 'passwordreset-capture' => 'Visualizzare il contenuto del messaggio e-mail?',
@@ -829,6 +849,7 @@ Password temporanea: $2',
 'changeemail-oldemail' => 'Indirizzo e-mail attuale:',
 'changeemail-newemail' => 'Nuovo indirizzo e-mail:',
 'changeemail-none' => '(nessuno)',
+'changeemail-password' => 'La password su {{SITENAME}}:',
 'changeemail-submit' => 'Modifica e-mail',
 'changeemail-cancel' => 'Annulla',
 
@@ -862,7 +883,7 @@ Password temporanea: $2',
 'showpreview' => 'Visualizza anteprima',
 'showlivepreview' => "Funzione ''Live preview''",
 'showdiff' => 'Mostra cambiamenti',
-'anoneditwarning' => "'''Attenzione:''' Accesso non effettuato. Nella cronologia della pagina verrà registrato l'indirizzo IP.",
+'anoneditwarning' => "'''Attenzione:''' Accesso non effettuato. Nella cronologia della pagina verrà registrato il tuo indirizzo IP.",
 'anonpreviewwarning' => "''Non è stato eseguito il login. Salvando la pagina, il proprio indirizzo IP sarà registrato nella cronologia.''",
 'missingsummary' => "'''Attenzione:''' non è stato specificato l'oggetto di questa modifica. Premendo di nuovo \"{{int:savearticle}}\" la modifica verrà salvata con l'oggetto vuoto.",
 'missingcommenttext' => 'Inserire un commento qui sotto.',
@@ -999,7 +1020,6 @@ L'ultimo elemento del registro è riportato di seguito per informazione:",
 'template-semiprotected' => '(semiprotetto)',
 'hiddencategories' => 'Questa pagina appartiene a {{PLURAL:$1|una categoria nascosta|$1 categorie nascoste}}:',
 'edittools' => '<!-- Testo che appare al di sotto del modulo di modifica e di upload. -->',
-'nocreatetitle' => 'Creazione delle pagine limitata',
 'nocreatetext' => 'La possibilità di creare nuove pagine su {{SITENAME}} è stata limitata ai soli utenti registrati. È possibile tornare indietro e modificare una pagina esistente, oppure [[Special:UserLogin|entrare o registrarsi]].',
 'nocreate-loggedin' => 'Non si dispone dei permessi necessari a creare nuove pagine.',
 'sectioneditnotsupported-title' => 'Modifica delle sezioni non supportata',
@@ -1440,7 +1460,7 @@ Il tuo indirizzo non viene rivelato quando gli altri utenti ti contattano.',
 'userrights-groups-help' => "È possibile modificare i gruppi cui è assegnato l'utente.
 * Una casella di spunta selezionata indica l'appartenenza dell'utente al gruppo
 * Una casella di spunta deselezionata indica la sua mancata appartenenza al gruppo.
-* Il simbolo * indica che non è possibile eliminare l'appartenenza al gruppo dopo averla aggiunta (o vice versa).",
+* Il simbolo * indica che non è possibile eliminare l'appartenenza al gruppo dopo averla aggiunta (o viceversa).",
 'userrights-reason' => 'Motivo:',
 'userrights-no-interwiki' => 'Non si dispone dei permessi necessari per modificare i diritti degli utenti su altri siti.',
 'userrights-nodatabase' => 'Il database $1 non esiste o non è un database locale.',
@@ -1535,15 +1555,13 @@ Il tuo indirizzo non viene rivelato quando gli altri utenti ti contattano.',
 'right-sendemail' => 'Invia e-mail ad altri utenti',
 'right-passwordreset' => 'Vede i messaggi di reimpostazione della password',
 
+# Special:Log/newusers
+'newuserlogpage' => 'Nuovi utenti',
+'newuserlogpagetext' => 'Di seguito sono elencate le utenze di nuova creazione.',
+
 # User rights log
 'rightslog' => 'Diritti degli utenti',
 'rightslogtext' => 'Di seguito sono elencate le modifiche ai diritti assegnati agli utenti.',
-'rightslogentry' => "ha modificato l'appartenenza di $1 dal gruppo $2 al gruppo $3",
-'rightslogentry-autopromote' => 'è stato/a automaticamente promosso/a da $2 a $3',
-'logentry-rights-rights' => "$1 ha modificato l'appartenenza di $3 dal gruppo $4 al gruppo $5",
-'logentry-rights-rights-legacy' => "$1 ha modificato l'appartenenza a gruppi di $3",
-'logentry-rights-autopromote' => '$1 è stato/a automaticamente promosso/a da $4 a $5',
-'rightsnone' => '(nessuno)',
 
 # Associated actions - in the sentence "You do not have permission to X"
 'action-read' => 'leggere questa pagina',
@@ -2157,9 +2175,9 @@ Vedi anche le [[Special:WantedCategories|categorie richieste]].',
 'linksearch-pat' => 'Pattern di ricerca:',
 'linksearch-ns' => 'Namespace:',
 'linksearch-ok' => 'Cerca',
-'linksearch-text' => 'È possibile fare uso di metacaratteri, ad esempio "*.wikipedia.org".<br />
+'linksearch-text' => 'È possibile fare uso di metacaratteri, ad esempio "*.wikipedia.org".
 È necessario almeno un dominio di primo livello, ad esempio "*.org".<br />
-Protocolli supportati: <code>$1</code> (predefinito http:// se nessun protocollo è specificato).',
+{{PLURAL:$2|Protocollo supportato|Protocolli supportati}}: <code>$1</code> (predefinito http:// se nessun protocollo è specificato).',
 'linksearch-line' => '$1 presente nella pagina $2',
 'linksearch-error' => "I metacaratteri possono essere usati solo all'inizio dell'indirizzo.",
 
@@ -2172,16 +2190,12 @@ Protocolli supportati: <code>$1</code> (predefinito http:// se nessun protocollo
 # Special:ActiveUsers
 'activeusers' => 'Elenco degli utenti attivi',
 'activeusers-intro' => 'Questo è un elenco di utenti che hanno avuto qualche tipo di attività da $1 {{PLURAL:$1|giorno|giorni}} a questa parte.',
-'activeusers-count' => "$1 {{PLURAL:$1|modifica|modifiche}} {{PLURAL:$3|nell'ultimo giorno|negli ultimi $3 giorni}}",
+'activeusers-count' => "$1 {{PLURAL:$1|azione|azioni}} {{PLURAL:$3|nell'ultimo giorno|negli ultimi $3 giorni}}",
 'activeusers-from' => 'Mostra gli utenti a partire da:',
 'activeusers-hidebots' => 'Nascondi i bot',
 'activeusers-hidesysops' => 'Nascondi gli amministratori',
 'activeusers-noresult' => 'Nessun utente risponde ai criteri impostati.',
 
-# Special:Log/newusers
-'newuserlogpage' => 'Nuovi utenti',
-'newuserlogpagetext' => 'Di seguito sono elencate le utenze di nuova creazione.',
-
 # Special:ListGroupRights
 'listgrouprights' => 'Diritti del gruppo utente',
 'listgrouprights-summary' => "Di seguito sono elencati i gruppi utente definiti per questo sito, con i diritti d'accesso loro associati.
@@ -2247,9 +2261,8 @@ Potrebbero esserci [[{{MediaWiki:Listgrouprights-helppage}}|ulteriori informazio
 'watchnologin' => 'Accesso non effettuato',
 'watchnologintext' => "Per modificare la lista degli osservati speciali è necessario prima eseguire l'[[Special:UserLogin|accesso al sito]].",
 'addwatch' => 'Aggiungi agli osservati speciali',
-'addedwatchtext' => "La pagina \"[[:\$1]]\" è stata aggiunta alla propria [[Special:Watchlist|lista degli osservati speciali]].
-D'ora in poi, le modifiche apportate alla pagina e alla sua discussione verranno elencate in quella sede;
-il titolo della pagina apparirà in '''grassetto''' nella pagina delle [[Special:RecentChanges|ultime modifiche]] per renderlo più visibile.",
+'addedwatchtext' => 'La pagina "[[:$1]]" è stata aggiunta alla propria [[Special:Watchlist|lista degli osservati speciali]].
+D\'ora in poi, le modifiche apportate alla pagina e alla sua discussione verranno elencate in quella sede.',
 'removewatch' => 'Rimuovi dagli osservati speciali',
 'removedwatchtext' => 'La pagina "[[:$1]]" è stata eliminata dalla [[Special:Watchlist|lista degli osservati speciali]].',
 'watch' => 'Segui',
@@ -2283,7 +2296,7 @@ il titolo della pagina apparirà in '''grassetto''' nella pagina delle [[Special
 'enotif_subject_moved' => 'La pagina $1 di {{SITENAME}} è stata spostata da {{gender:$2|$2}}',
 'enotif_subject_restored' => 'La pagina $1 di {{SITENAME}} è stata ripristinata da {{gender:$2|$2}}',
 'enotif_subject_changed' => 'La pagina $1 di {{SITENAME}} è stata modificata da {{gender:$2|$2}}',
-'enotif_body_intro_deleted' => 'La pagina $1 di {{SITENAME}} è stata cancellata da {{gender:$2|$2}} il $PAGEEDITDATE, vedi $3 per la versione attuale.',
+'enotif_body_intro_deleted' => 'La pagina $1 di {{SITENAME}} è stata cancellata da {{gender:$2|$2}} il $PAGEEDITDATE (vedi $3 per la versione attuale).',
 'enotif_body_intro_created' => 'La pagina $1 di {{SITENAME}} è stata creata da {{gender:$2|$2}} il $PAGEEDITDATE, vedi $3 per la versione attuale.',
 'enotif_body_intro_moved' => 'La pagina $1 di {{SITENAME}} è stata spostata da {{gender:$2|$2}} il $PAGEEDITDATE, vedi $3 per la versione attuale.',
 'enotif_body_intro_restored' => 'La pagina $1 di {{SITENAME}} è stata ripristinata da {{gender:$2|$2}} il $PAGEEDITDATE, vedi $3 per la versione attuale.',
@@ -2317,6 +2330,8 @@ $UNWATCHURL
 
 Per commentare e ricevere aiuto:
 {{canonicalurl:{{MediaWiki:Helppage}}}}',
+'created' => 'creata',
+'changed' => 'modificata',
 
 # Delete
 'deletepage' => 'Cancella pagina',
@@ -2381,6 +2396,8 @@ Vedi la [[Special:ProtectedPages|lista delle pagine protette]] per l'elenco dell
 'prot_1movedto2' => 'ha spostato [[$1]] a [[$2]]',
 'protect-badnamespace-title' => 'Namespace non suscettibile di protezione',
 'protect-badnamespace-text' => 'Le pagine di questo namespace non possono essere protette.',
+'protect-norestrictiontypes-text' => 'Questa pagina non può essere protetta poiché non vi è alcun tipo di restrizione disponibile.',
+'protect-norestrictiontypes-title' => 'Pagina non proteggibile',
 'protect-legend' => 'Conferma la protezione',
 'protectcomment' => 'Motivo:',
 'protectexpiry' => 'Scadenza:',
@@ -2395,9 +2412,9 @@ Le impostazioni correnti per la pagina sono '''$1''':",
 Le impostazioni correnti per la pagina sono '''$1''':",
 'protect-cascadeon' => 'Al momento questa pagina è bloccata perché viene inclusa {{PLURAL:$1|nella pagina indicata di seguito, per la quale|nelle pagine indicate di seguito, per le quali}} è attiva la protezione ricorsiva. È possibile modificare il livello di protezione individuale della pagina, ma le impostazioni derivanti dalla protezione ricorsiva non saranno modificate.',
 'protect-default' => 'Autorizza tutti gli utenti',
-'protect-fallback' => 'È richiesto il permesso "$1"',
-'protect-level-autoconfirmed' => 'Blocca gli utenti nuovi e i non registrati',
-'protect-level-sysop' => 'Solo amministratori',
+'protect-fallback' => 'Consentito solo agli utenti con permesso "$1"',
+'protect-level-autoconfirmed' => 'Consentito solo agli utenti "autoconfermati"',
+'protect-level-sysop' => 'Consentito solo agli amministratori',
 'protect-summary-cascade' => 'ricorsiva',
 'protect-expiring' => 'scadenza: $1 (UTC)',
 'protect-expiring-local' => 'scade il $1',
@@ -2687,7 +2704,7 @@ Ricordare di [[Special:UnlockDB|rimuovere il blocco]] dopo aver terminato le ope
 'move-page-legend' => 'Spostamento di pagina',
 'movepagetext' => "Questo modulo consente di rinominare una pagina, spostando tutta la sua cronologia al nuovo nome. La pagina attuale diverrà automaticamente un redirect al nuovo titolo. Puoi aggiornare automaticamente i redirect che puntano al titolo originale. Puoi decidere di non farlo, ma ricordati di verificare che lo spostamento non abbia creato [[Special:DoubleRedirects|doppi redirect]] o [[Special:BrokenRedirects|redirect errati]]. L'onere di garantire che i collegamenti alla pagina restino corretti spetta a chi la sposta.
 
-Si noti che la pagina '''non''' sarà spostata se ne esiste già una con il nuovo nome, a meno che non sia vuota o costituita solo da un redirect alla vecchia e sia priva di versioni precedenti. In caso di spostamento errato si può quindi tornare subito al vecchio titolo, e non è possibile sovrascrivere per errore una pagina già esistente.
+Si noti che la pagina '''non''' sarà spostata se ne esiste già una con il nuovo nome, a meno che non sia costituita solo da un redirect alla vecchia e sia priva di versioni precedenti. In caso di spostamento errato si può quindi tornare subito al vecchio titolo, e non è possibile sovrascrivere per errore una pagina già esistente.
 
 '''ATTENZIONE:'''
 Un cambiamento così drastico può creare contrattempi e problemi, soprattutto per le pagine più visitate. Accertarsi di aver valutato le conseguenze dello spostamento prima di procedere.",
@@ -2860,6 +2877,7 @@ Tutte le operazioni di importazione trans-wiki sono registrate nel [[Special:Log
 'import-error-interwiki' => 'La pagina "$1" non viene importata perché il suo nome è riservato per il collegamento esterno (interwiki).',
 'import-error-special' => 'La pagina "$1" non viene importata perché appartiene a un namespace speciale che non permette pagine.',
 'import-error-invalid' => 'La pagina "$1" non viene importata perché il suo nome non è valido.',
+'import-error-unserialize' => 'La versione $2 della pagina "$1" non può essere de-serializzata. La versione è stata segnalata per utilizzare il modello di contenuto $3 serializzato come $4.',
 'import-options-wrong' => '{{PLURAL:$2|Opzione sbagliata|Opzioni sbagliate}}: <nowiki>$1</nowiki>',
 'import-rootpage-invalid' => 'La pagina principale fornita non è un titolo valido.',
 'import-rootpage-nosubpage' => 'Il namespace "$1" della pagina principale non permette di avere sottopagine.',
@@ -3040,7 +3058,8 @@ Tutte le operazioni di importazione trans-wiki sono registrate nel [[Special:Log
 'pageinfo-recent-authors' => 'Numero di autori diversi recenti',
 'pageinfo-magic-words' => '{{PLURAL:$1|Parola magica|Parole magiche}} ($1)',
 'pageinfo-hidden-categories' => '{{PLURAL:$1|Categoria nascosta|Categorie nascoste}} ($1)',
-'pageinfo-templates' => 'Template {{PLURAL:$1|incluso|inclusi}}  ($1)',
+'pageinfo-templates' => '{{PLURAL:$1|Template incluso}} in ($1)',
+'pageinfo-transclusions' => '{{PLURAL:$1|Pagina inclusa}} in ($1)',
 'pageinfo-toolboxlink' => 'Informazioni sulla pagina',
 'pageinfo-redirectsto' => 'Reindirizza a',
 'pageinfo-redirectsto-info' => 'info',
@@ -3049,6 +3068,10 @@ Tutte le operazioni di importazione trans-wiki sono registrate nel [[Special:Log
 'pageinfo-protect-cascading' => 'Protezione ricorsiva da qui',
 'pageinfo-protect-cascading-yes' => 'Sì',
 'pageinfo-protect-cascading-from' => 'Protezione ricorsiva ereditata da',
+'pageinfo-category-info' => 'Informazioni sulla categoria',
+'pageinfo-category-pages' => 'Numero di pagine',
+'pageinfo-category-subcats' => 'Numero di sottocategorie',
+'pageinfo-category-files' => 'Numero di file',
 
 # Patrolling
 'markaspatrolleddiff' => 'Segna la modifica come verificata',
@@ -3094,6 +3117,7 @@ $1',
 'file-nohires' => 'Non sono disponibili versioni a risoluzione più elevata.',
 '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-preview' => 'Dimensioni di questa anteprima: $1.',
 'show-big-image-other' => '{{PLURAL:$2|Altra risoluzione|Altre risoluzioni}}: $1.',
@@ -3127,6 +3151,8 @@ $1',
 'minutes' => '{{PLURAL:$1|un minuto|$1 minuti}}',
 'hours' => "{{PLURAL:$1|un'ora|$1 ore}}",
 'days' => '{{PLURAL:$1|un giorno|$1 giorni}}',
+'months' => '{{PLURAL:$1|$1 mese|$1 mesi}}',
+'years' => '{{PLURAL:$1|$1 anno|$1 anni}}',
 'ago' => '$1 fa',
 'just-now' => 'proprio ora',
 
@@ -3796,7 +3822,7 @@ Le immagini vengono mostrate alla massima risoluzione disponibile, per gli altri
 'specialpages-group-highuse' => 'Pagine molto usate',
 'specialpages-group-pages' => 'Elenchi di pagine',
 'specialpages-group-pagetools' => 'Strumenti utili per le pagine',
-'specialpages-group-wiki' => 'Strumenti e informazioni sul progetto',
+'specialpages-group-wiki' => 'Dati e strumenti',
 'specialpages-group-redirects' => 'Pagine speciali di redirect',
 'specialpages-group-spam' => 'Strumenti contro lo spam',
 
@@ -3893,8 +3919,12 @@ Le immagini vengono mostrate alla massima risoluzione disponibile, per gli altri
 'logentry-newusers-newusers' => "L'utenza $1 è stata creata",
 'logentry-newusers-create' => "L'utenza $1 è stata creata",
 'logentry-newusers-create2' => "L'utenza $3 è stata creata da $1",
+'logentry-newusers-byemail' => "L'utente $3 è stato creato da $1 e la password è stata inviata via e-mail",
 'logentry-newusers-autocreate' => "L'utenza $1 è stata creata automaticamente",
-'newuserlog-byemail' => 'password inviata via mail',
+'logentry-rights-rights' => "$1 ha modificato l'appartenenza di $3 dal gruppo $4 al gruppo $5",
+'logentry-rights-rights-legacy' => "$1 ha modificato l'appartenenza a gruppi di $3",
+'logentry-rights-autopromote' => '$1 è stato/a automaticamente promosso/a da $4 a $5',
+'rightsnone' => '(nessuno)',
 
 # Feedback
 'feedback-bugornote' => 'Se si è in grado di descrivere il problema tecnico riscontrato in maniera precisa, [$1 segnalate il bug]. In alternativa, si può usare il modulo semplificato sottostante. Il commento inserito sarà aggiunto alla pagina "[$3 $2]", insieme al proprio nome utente e al browser in uso.',
@@ -3947,6 +3977,7 @@ Le immagini vengono mostrate alla massima risoluzione disponibile, per gli altri
 'api-error-ok-but-empty' => 'Errore interno: nessuna risposta dal server.',
 'api-error-overwrite' => 'Sovrascrivere un file esistente non è consentito.',
 'api-error-stashfailed' => 'Errore interno: il server non è riuscito a memorizzare il documento temporaneo.',
+'api-error-publishfailed' => 'Errore interno: il server non è riuscito a pubblicare il documento temporaneo.',
 'api-error-timeout' => 'Il server non ha risposto entro il tempo previsto.',
 'api-error-unclassified' => 'Si è verificato un errore sconosciuto.',
 'api-error-unknown-code' => 'Errore sconosciuto: "$1"',
@@ -3967,6 +3998,4 @@ Le immagini vengono mostrate alla massima risoluzione disponibile, per gli altri
 'duration-centuries' => '$1 {{PLURAL:$1|secolo|secoli}}',
 'duration-millennia' => '$1 {{PLURAL:$1|millennio|millenni}}',
 
-# Unknown messages
-'svg-long-error' => 'File SVG non valido: $1',
 );
index 879e2e5..cafb07c 100644 (file)
@@ -371,11 +371,11 @@ $messages = array(
 'tog-extendwatchlist' => 'ウォッチリストを拡張し、最新のものだけではなくすべての変更を表示',
 'tog-usenewrc' => '最近の更新とウォッチリストで複数の変更をページごとにまとめる (JavaScript が必要)',
 'tog-numberheadings' => '見出しに番号を自動的に振る',
-'tog-showtoolbar' => '編集用のツールバーを表示(JavaScriptが必要)',
-'tog-editondblclick' => 'ダブルクリックで編集(JavaScriptが必要)',
+'tog-showtoolbar' => '編集用のツールバーを表示 (JavaScriptが必要)',
+'tog-editondblclick' => 'ダブルクリックで編集 (JavaScriptが必要)',
 'tog-editsection' => '[編集]リンクから節を編集できるようにする',
-'tog-editsectiononrightclick' => '節見出しの右クリックで節を編集できるようにする(JavaScriptが必要)',
-'tog-showtoc' => '目次を表示(ページに見出しが4つ以上ある場合)',
+'tog-editsectiononrightclick' => '節見出しの右クリックで節を編集できるようにする (JavaScriptが必要)',
+'tog-showtoc' => '目次を表示 (ページに見出しが4つ以上ある場合)',
 'tog-rememberpassword' => 'このブラウザーにログイン情報を保存 (最長 $1 {{PLURAL:$1|日|日間}})',
 'tog-watchcreations' => '自分が作成したページやアップロードしたファイルをウォッチリストに追加',
 'tog-watchdefault' => '自分が編集したページやファイルをウォッチリストに追加',
@@ -496,6 +496,7 @@ $messages = array(
 'newwindow' => '(新しいウィンドウで開きます)',
 'cancel' => '中止',
 'moredotdotdot' => '続き...',
+'morenotlisted' => 'その他...',
 'mypage' => 'ページ',
 'mytalk' => 'トーク',
 'anontalk' => 'このIPアドレスのトーク',
@@ -532,7 +533,7 @@ $messages = array(
 'navigation-heading' => '案内メニュー',
 'errorpagetitle' => 'エラー',
 'returnto' => '$1 に戻る。',
-'tagline' => '提供{{SITENAME}}',
+'tagline' => '提供{{SITENAME}}',
 'help' => 'ヘルプ',
 'search' => '検索',
 'searchbutton' => '検索',
@@ -626,11 +627,11 @@ $1',
 'retrievedfrom' => '「$1」から取得',
 'youhavenewmessages' => '$1があります ($2)。',
 'newmessageslink' => '新着メッセージ',
-'newmessagesdifflink' => '最終更新の差分',
+'newmessagesdifflink' => '最新の差分',
 'youhavenewmessagesfromusers' => '{{PLURAL:$3|他の利用者|$3 人の利用者}}からの$1があります ($2)。',
 'youhavenewmessagesmanyusers' => '多数の利用者からの$1があります ($2)。',
 'newmessageslinkplural' => '{{PLURAL:$1|新着メッセージ}}',
-'newmessagesdifflinkplural' => '最終更新の{{PLURAL:$1|差分}}',
+'newmessagesdifflinkplural' => '{{PLURAL:$1|最新の差分|最新版までの差分}}',
 'youhavenewmessagesmulti' => '$1に新着メッセージがあります',
 'editsection' => '編集',
 'editold' => '編集',
@@ -646,7 +647,7 @@ $1',
 'thisisdeleted' => '$1を閲覧または復元しますか?',
 'viewdeleted' => '$1を閲覧しますか?',
 'restorelink' => '{{PLURAL:$1|削除された$1編集}}',
-'feedlinks' => 'フィード',
+'feedlinks' => 'フィード:',
 'feed-invalid' => 'フィード形式の指定が正しくありません。',
 'feed-unavailable' => 'フィードの配信は利用できません',
 'site-rss-feed' => '$1のRSSフィード',
@@ -688,14 +689,14 @@ URL を間違って入力したか、正しくないリンクをたどった可
 ソフトウェアにバグがある可能性があります。
 最後に実行を試みたクエリ:
 <blockquote><code>$1</code></blockquote>
-(関数「<code>$2</code>」内)
-データベースはエラー「<samp>$3$4</samp>」を返しました。',
+(関数「<code>$2</code>」内)
+データベースはエラー「<samp>$3$4</samp>」を返しました。',
 'dberrortextcl' => 'データベース クエリの構文エラーが発生しました。
 最後に実行を試みたクエリ:
 「$1」
-(関数「$2」内)
-データベースはエラー「$3$4」を返しました',
-'laggedslavemode' => "'''警告:'''ページに最新の編集が反映されていない可能性があります。",
+(関数「$2」内)
+データベースはエラー「$3$4」を返しました',
+'laggedslavemode' => "'''警告:''' ページに最新の編集が反映されていない可能性があります。",
 'readonly' => 'データベースがロックされています',
 'enterlockreason' => 'ロックの理由とロック解除の予定を入力してください',
 'readonlytext' => 'データベースは現在、新しいページの追加や編集を受け付けない「ロック状態」になっています。これはおそらくデータベースの定期メンテナンスのためで、メンテナンス終了後は正常な状態に復帰します。
@@ -711,7 +712,7 @@ URL を間違って入力したか、正しくないリンクをたどった可
 'missingarticle-diff' => '(差分: $1, $2)',
 'readonly_lag' => 'データベースはスレーブのデータベースサーバーがマスターに同期するまで自動的にロックされています',
 'internalerror' => '内部エラー',
-'internalerror_info' => '内部エラー$1',
+'internalerror_info' => '内部エラー$1',
 'fileappenderrorread' => '追加中に、「$1」を読み取れませんでした。',
 'fileappenderror' => '「$1」を「$2」に追加できませんでした。',
 'filecopyerror' => 'ファイル「$1」を「$2」に複製できませんでした。',
@@ -719,9 +720,9 @@ URL を間違って入力したか、正しくないリンクをたどった可
 'filedeleteerror' => 'ファイル「$1」を削除できませんでした。',
 'directorycreateerror' => 'ディレクトリ「$1」を作成できませんでした。',
 'filenotfound' => 'ファイル「$1」が見つかりませんでした。',
-'fileexistserror' => 'ã\83\95ã\82¡ã\82¤ã\83«ã\80\8c$1ã\80\8dã\81¸ã\81®æ\9b¸ã\81\8dè¾¼ã\81¿ã\81«å¤±æ\95\97ï¼\9aファイルが存在します。',
+'fileexistserror' => 'ã\83\95ã\82¡ã\82¤ã\83«ã\80\8c$1ã\80\8dã\81«æ\9b¸ã\81\8dè¾¼ã\82\81ã\81¾ã\81\9bã\82\93ã\81§ã\81\97ã\81\9fファイルが存在します。',
 'unexpected' => '予期しない値「$1」=「$2」です。',
-'formerror' => 'エラーフォームを送信できませんでした。',
+'formerror' => 'エラーフォームを送信できませんでした。',
 'badarticleerror' => 'このページでは要求された操作を行えません。',
 'cannotdelete' => 'ページまたはファイル「$1」を削除できませんでした。
 他の人が既に削除した可能性があります。',
@@ -744,8 +745,8 @@ URL を間違って入力したか、正しくないリンクをたどった可
 'actionthrottledtext' => '短時間にこの操作を大量に行ったため、スパム対策として設定されている制限を超えました。
 少し時間をおいてからもう一度操作してください。',
 'protectedpagetext' => 'このページは編集や他の操作ができないように保護されています。',
-'viewsourcetext' => 'このページのソースの閲覧やコピーができます',
-'viewyourtext' => "このページへの'''あなたの編集'''のソースの閲覧やコピーができます",
+'viewsourcetext' => 'このページのソースの閲覧やコピーができます:',
+'viewyourtext' => "このページへの'''あなたの編集'''のソースの閲覧やコピーができます:",
 'protectedinterface' => 'このページにはこのウィキのソフトウェアのインターフェイスに使用されるテキストが保存されており、いたずらなどの防止のために保護されています。
 すべてのウィキに対して翻訳を追加/変更する場合は、MediaWiki の地域化プロジェクト [//translatewiki.net/ translatewiki.net] を使用してください。',
 'editinginterface' => "'''警告:''' ソフトウェアのインターフェイスに使用されるテキストのページを編集しています。
@@ -755,23 +756,23 @@ URL を間違って入力したか、正しくないリンクをたどった可
 'cascadeprotected' => 'このページは、「カスケード保護」が指定された状態で保護されている以下の{{PLURAL:$1|ページ|ページ群}}で読み込まれているため、編集できないように保護されています:
 $2',
 'namespaceprotected' => "'''$1'''名前空間にあるページを編集する権限がありません。",
-'customcssprotected' => 'このCSSページは他の利用者の個人設定を含むため、あなたには編集する権限がありません。',
-'customjsprotected' => 'このJavaScriptページは他の利用者の個人設定を含むため、あなたには編集する権限がありません。',
+'customcssprotected' => 'この CSS ページは他の利用者の個人設定を含んでいるため、あなたには編集する権限がありません。',
+'customjsprotected' => 'この JavaScript ページは他の利用者の個人設定を含んでいるため、あなたには編集する権限がありません。',
 'ns-specialprotected' => '特別ページは編集できません。',
 'titleprotected' => "[[User:$1|$1]]によりこのページ名を持つページの作成は保護されています。
 理由は「''$2''」です。",
 'filereadonlyerror' => 'ファイルリポジトリ「$2」が読み取り専用の状態にあるため、ファイル「$1」を変更できません。
 
-読み取り専用に設定した管理者からの説明「$3」',
+読み取り専用に設定した管理者からの説明:「$3」',
 'invalidtitle-knownnamespace' => '名前空間名「$2」と名前「$3」の組み合わせはページ名として無効です',
 'invalidtitle-unknownnamespace' => '不明な名前空間番号 $1 と名前「$2」の組み合わせはページ名として無効です',
 'exception-nologin' => 'ログインしていません',
 'exception-nologin-text' => 'このページまたは操作には、このウィキへのログインが必要です。',
 
 # Virus scanner
-'virus-badscanner' => "環境設定が不適合です:不明なウイルス検知ソフトウェア:''$1''",
+'virus-badscanner' => "環境設定が不適合です: 不明なウイルス対策ソフトウェア: ''$1''",
 'virus-scanfailed' => 'スキャンに失敗しました(コード $1)',
-'virus-unknownscanner' => '不明なウイルス対策',
+'virus-unknownscanner' => '不明なウイルス対策ソフトウェア:',
 
 # Login and logout pages
 'logouttext' => "'''ログアウトしました。'''
@@ -803,13 +804,13 @@ $2',
 'gotaccount' => 'アカウントを既に持っている場合、$1。',
 'gotaccountlink' => 'ログインしてください',
 'userlogin-resetlink' => 'ログイン情報をお忘れですか?',
-'createaccountmail' => 'メールで送信',
-'createaccountreason' => '理由',
+'createaccountmail' => '一時的でランダムなパスワードを生成して、以下に指定したメールアドレスに送信する',
+'createaccountreason' => '理由:',
 'badretype' => '入力したパスワードが一致しません。',
 'userexists' => '入力された利用者名は既に使用されています。
 他の名前を選んでください。',
 'loginerror' => 'ログインのエラー',
-'createaccounterror' => 'アカウントを作成できませんでした $1',
+'createaccounterror' => 'アカウントを作成できませんでした: $1',
 'nocookiesnew' => '利用者アカウントは作成されましたが、ログインしていません。
 {{SITENAME}}では利用者のログインに Cookie を使用します。
 ご使用のブラウザーでは Cookie が無効になっています。
@@ -839,10 +840,10 @@ Cookieを有効にしていることを確認して、このページを再読
 'password-login-forbidden' => 'この利用者名とパスワードの使用は禁止されています。',
 'mailmypassword' => '新しいパスワードをメールで送信',
 'passwordremindertitle' => '{{SITENAME}}の仮パスワード通知',
-'passwordremindertext' => '誰か(おそらくあなた)がIPアドレス$1から{{SITENAME}} ($4) のログイン用パスワードの再発行を申請しました。
+'passwordremindertext' => '誰か (おそらくあなた) が IP アドレス $1 から{{SITENAME}} ($4) のログイン用パスワードの再発行を申請しました。
 利用者「$2」の仮パスワードが作成され「$3」に設定されました。
 もしあなたがこの申請をしたのであれば、ログインして新しいパスワードを決めてください。
-この仮パスワードは {{PLURAL:$5|$5 日間}}で有効期限が切れます。
+この仮パスワードは {{PLURAL:$5|$5 日|$5 日間}}で有効期限が切れます。
 
 この申請をしたのが他人の場合、あるいはパスワードを思い出してパスワード変更が不要になった場合は、
 このメッセージを無視して、引き続き以前のパスワードを使用し続けることができます。',
@@ -851,17 +852,17 @@ Cookieを有効にしていることを確認して、このページを再読
 'passwordsent' => '新しいパスワードを「$1」に登録されたメールアドレスに送信しました。
 メールを受け取ったら、再度ログインしてください。',
 'blocked-mailpassword' => 'ご使用中のIPアドレスからの編集はブロックされており、不正利用防止のため、パスワードの再発行機能は使用できません。',
-'eauthentsent' => 'æ\8c\87å®\9aã\81\95ã\82\8cã\81\9fã\83¡ã\83¼ã\83«ã\82¢ã\83\89ã\83¬ã\82¹ã\81«ã\82¢ã\83\89ã\83¬ã\82¹ç¢ºèª\8dã\81®ã\81\9fã\82\81ã\81®ã\83¡ã\83¼ã\83«ã\82\92é\80\81ä¿¡しました。
\81\9dã\81®ä»\96ã\81®ã\83¡ã\83¼ã\83«ã\81\8cã\81\93ã\81®ã\82¢ã\82«ã\82¦ã\83³ã\83\88å®\9bã\81«é\80\81ä¿¡ã\81\95ã\82\8cã\82\8bå\89\8dã\81«ã\80\81ã\83¡ã\83¼ã\83«ã\81®æ\8c\87示ã\81«å¾\93ã\81£ã\81¦ã\80\81ã\81\93ã\81®ã\82¢ã\82«ã\82¦ã\83³ã\83\88ã\81\8cæ\9c¬å½\93ã\81«ã\81\82ã\81ªã\81\9fã\81®ã\82\82ã\81®ã\81\8bã\81\94確èª\8dã\81\8fã\81 ã\81\95ã\81\84。',
+'eauthentsent' => 'æ\8c\87å®\9aã\81\97ã\81\9fã\83¡ã\83¼ã\83«ã\82¢ã\83\89ã\83¬ã\82¹ã\81«ã\80\81ã\82¢ã\83\89ã\83¬ã\82¹ç¢ºèª\8dã\81®ã\81\9fã\82\81ã\81®ã\83¡ã\83¼ã\83«ã\82\92ã\81\8aé\80\81ã\82\8aしました。
\83¡ã\83¼ã\83«ã\81«è¨\98è¼\89ã\81\95ã\82\8cã\81\9fæ\89\8bé \86ã\81«å¾\93ã\81£ã\81¦ã\80\81ã\81\93ã\81®ã\82¢ã\82«ã\82¦ã\83³ã\83\88ã\81®æ\89\80æ\9c\89è\80\85ã\81§ã\81\82ã\82\8bã\81\93ã\81¨ã\81®ç¢ºèª\8dã\81\8cå\8f\96ã\82\8cã\82\8bã\81¨ã\80\81ã\81\93ã\81®ã\82¢ã\82«ã\82¦ã\83³ã\83\88å®\9bã\81®ã\83¡ã\83¼ã\83«ã\82\92å\8f\97ã\81\91å\8f\96ã\82\8cã\82\8bã\82\88ã\81\86ã\81«ã\81ªã\82\8aã\81¾ã\81\99。',
 'throttled-mailpassword' => '新しいパスワードは過去 {{PLURAL:$1|$1 時間}}に送信済みです。
 悪用防止のため、パスワードの再発行は {{PLURAL:$1|$1 時間}}に 1 回のみです。',
-'mailerror' => 'ã\83¡ã\83¼ã\83«ã\81®é\80\81信中ã\81«ã\82¨ã\83©ã\83¼ã\81\8cç\99ºç\94\9fã\81\97ã\81¾ã\81\97ã\81\9fï¼\9a$1',
+'mailerror' => 'ã\83¡ã\83¼ã\83«ã\82\92é\80\81ä¿¡ã\81\99ã\82\8bé\9a\9bã\81«ã\82¨ã\83©ã\83¼ã\81\8cç\99ºç\94\9fã\81\97ã\81¾ã\81\97ã\81\9f$1',
 'acct_creation_throttle_hit' => 'あなたと同じ IP アドレスでこのウィキに訪れた人が、最近 24 時間で {{PLURAL:$1|$1 アカウント}}を作成しており、これはこの期間で作成が許可されている最大数です。
 そのため、現在この IP アドレスではアカウントをこれ以上作成できません。',
 'emailauthenticated' => 'メールアドレスは$2 $3に認証済みです。',
 'emailnotauthenticated' => 'メールアドレスが認証されていません。
 認証されるまで、以下のいかなる機能でもメールは送信されません。',
-'noemailprefs' => 'ã\81\93ã\82\8cã\82\89ã\81®æ©\9fè\83½ã\82\92æ\9c\89å\8a¹ã\81«ã\81\99ã\82\8bã\81\9fã\82\81ã\81«ã\81¯å\80\8b人設å®\9aã\81§ã\83¡ã\83¼ã\83«ã\82¢ã\83\89ã\83¬ã\82¹ã\82\92ç\99»é\8c²ã\81\99ã\82\8bå¿\85è¦\81ã\81\8cã\81\82ã\82\8aã\81¾ã\81\99。',
+'noemailprefs' => 'ã\81\93ã\82\8cã\82\89ã\81®æ©\9fè\83½ã\82\92æ\9c\89å\8a¹ã\81«ã\81\99ã\82\8bã\81«ã\81¯ã\80\81å\80\8b人設å®\9aã\81§ã\83¡ã\83¼ã\83«ã\82¢ã\83\89ã\83¬ã\82¹ã\82\92ç\99»é\8c²ã\81\97ã\81¦ã\81\8fã\81 ã\81\95ã\81\84。',
 'emailconfirmlink' => 'あなたのメールアドレスを確認',
 'invalidemailaddress' => '入力されたメールアドレスが正しい形式に従っていないため、受け付けられません。
 正しい形式で入力し直すか、メールアドレス欄を空にしておいてください。',
@@ -885,6 +886,7 @@ Cookieを有効にしていることを確認して、このページを再読
 # E-mail sending
 'php-mail-error-unknown' => 'PHPのmail()関数での不明なエラーです。',
 'user-mail-no-addy' => 'メールアドレスなしでメールを送信しようとしました。',
+'user-mail-no-body' => '本文が空、またはあまりにも短いメールは送信できません。',
 
 # Change password dialog
 'resetpass' => 'パスワードの変更',
@@ -896,7 +898,7 @@ Cookieを有効にしていることを確認して、このページを再読
 'newpassword' => '新しいパスワード:',
 'retypenew' => '新しいパスワードを再入力:',
 'resetpass_submit' => '再設定してログイン',
-'resetpass_success' => 'ã\83\91ã\82¹ã\83¯ã\83¼ã\83\89ã\81®å¤\89æ\9b´ã\81«æ\88\90å\8a\9fしました!
+'resetpass_success' => 'ã\83\91ã\82¹ã\83¯ã\83¼ã\83\89ã\82\92å¤\89æ\9b´しました!
 ログインしています...',
 'resetpass_forbidden' => 'パスワードは変更できません',
 'resetpass-no-info' => 'このページに直接アクセスするためにはログインしている必要があります。',
@@ -914,17 +916,17 @@ Cookieを有効にしていることを確認して、このページを再読
 'passwordreset-pretext' => '{{PLURAL:$1||下記のデータのいずれか 1 つを入力してください}}',
 'passwordreset-username' => '利用者名:',
 'passwordreset-domain' => 'ドメイン:',
-'passwordreset-capture' => '送信されるメールの内容を表示しますか?',
+'passwordreset-capture' => 'お送りするメールの内容を表示しますか?',
 'passwordreset-capture-help' => 'このボックスにチェックを入れると、利用者に送信されるメールの内容(仮パスワードを含む)をあなたも閲覧できます。',
 'passwordreset-email' => 'メールアドレス:',
 'passwordreset-emailtitle' => '{{SITENAME}}上のアカウントの詳細',
-'passwordreset-emailtext-ip' => 'どなたか(おそらくあなた、IP アドレス $1)が {{SITENAME}} ($4) での
+'passwordreset-emailtext-ip' => '誰か (おそらくあなた、IP アドレス $1) が {{SITENAME}} ($4) での
 あなたのアカウントの詳細情報を送信するよう申請しました。
 以下の利用者{{PLURAL:$3|アカウント|アカウント群}}がこのメールアドレスと紐付けられています。
 
 $2
 
-{{PLURAL:$3|この仮パスワード|これらの仮パスワード}}は {{PLURAL:$5|$5 日間}}で有効期限が切れます。
+{{PLURAL:$3|この仮パスワード|これらの仮パスワード}}は {{PLURAL:$5|$5 日|$5 日間}}で有効期限が切れます。
 あなたはすぐにログインして新しいパスワードを設定する必要があります。
 これが他の誰かによる申請である場合、あるいはあなたが自分の元のパスワードを
 覚えていてそれを変更したくない場合には、このメッセージを無視して以前のパスワードを
@@ -940,20 +942,21 @@ $2
 この申請が他の誰かによるものの場合、あるいはあなたが自分の元のパスワードを
 覚えていて、変更したくない場合は、このメッセージを無視して
 以前のパスワードを使い続けることができます。',
-'passwordreset-emailelement' => '利用者名$1
-仮パスワード$2',
+'passwordreset-emailelement' => '利用者名$1
+仮パスワード$2',
 'passwordreset-emailsent' => '確認メールをお送りしました。',
 'passwordreset-emailsent-capture' => '下記の内容の、確認メールをお送りしました。',
-'passwordreset-emailerror-capture' => 'ä¸\8bè¨\98ã\81®å\86\85容ã\81®ç¢ºèª\8dã\83¡ã\83¼ã\83«ã\82\92ç\94\9fæ\88\90ã\81\97ã\81¾ã\81\97ã\81\9fã\81\8cã\80\81å\88©ç\94¨è\80\85ã\81¸ã\81®é\80\81ä¿¡ã\81«å¤±æ\95\97ã\81\97ã\81¾ã\81\97ã\81\9fï¼\9a$1',
+'passwordreset-emailerror-capture' => '以ä¸\8bã\81®å\86\85容ã\81®ç¢ºèª\8dã\83¡ã\83¼ã\83«ã\82\92ç\94\9fæ\88\90ã\81\97ã\81¾ã\81\97ã\81\9fã\81\8cã\80\81å\88©ç\94¨è\80\85ã\81¸ã\81®é\80\81ä¿¡ã\81«å¤±æ\95\97ã\81\97ã\81¾ã\81\97ã\81\9f$1',
 
 # Special:ChangeEmail
 'changeemail' => 'メールアドレスの変更',
 'changeemail-header' => 'アカウントのメールアドレスを変更',
 'changeemail-text' => 'このフォームではメールアドレスを変更できます。この変更を確認するためにパスワードを入力する必要があります。',
 'changeemail-no-info' => 'このページに直接アクセスするためにはログインしている必要があります。',
-'changeemail-oldemail' => '現在のメールアドレス',
-'changeemail-newemail' => '新しいメールアドレス',
+'changeemail-oldemail' => '現在のメールアドレス:',
+'changeemail-newemail' => '新しいメールアドレス:',
 'changeemail-none' => '(なし)',
+'changeemail-password' => '{{SITENAME}}のパスワード:',
 'changeemail-submit' => 'メールアドレスを変更',
 'changeemail-cancel' => '中止',
 
@@ -965,7 +968,7 @@ $2
 'link_sample' => 'リンクの名前',
 'link_tip' => '内部リンク',
 'extlink_sample' => 'http://www.example.com リンクの名前',
-'extlink_tip' => '外部リンク(http:// を忘れずに付けてください)',
+'extlink_tip' => '外部リンク (http:// を忘れずに付けてください)',
 'headline_sample' => '見出し文',
 'headline_tip' => '2段目の見出し',
 'nowiki_sample' => 'ここにマークアップを無効にするテキストを入力します',
@@ -978,8 +981,8 @@ $2
 'hr_tip' => '水平線を挿入(利用は控えめに)',
 
 # Edit pages
-'summary' => '編集内容の要約',
-'subject' => '題名/見出し',
+'summary' => '編集内容の要約:',
+'subject' => '題名/見出し:',
 'minoredit' => 'これは細部の編集です',
 'watchthis' => 'このページをウォッチ',
 'savearticle' => 'ページを保存',
@@ -987,16 +990,16 @@ $2
 'showpreview' => 'プレビューを表示',
 'showlivepreview' => 'ライブプレビュー',
 'showdiff' => '差分を表示',
-'anoneditwarning' => "'''警告:'''ログインしていません。
+'anoneditwarning' => "'''警告:''' ログインしていません。
 編集すると、IPアドレスがこのページの編集履歴に記録されます。",
 'anonpreviewwarning' => "''ログインしていません。投稿を保存すると、ご使用中のIPアドレスがこのページの履歴に記録されます。''",
-'missingsummary' => "'''注意ï¼\9a'''è¦\81ç´\84æ¬\84ã\81\8c空æ¬\84ã\81§ã\81\99ã\80\82
-「{{int:savearticle}}」をもう一度クリックすると、編集は要約なしで保存されます。",
+'missingsummary' => "'''注意:''' ç·¨é\9b\86å\86\85容ã\81®è¦\81ç´\84ã\81\8c空æ¬\84ã\81§ã\81\99ã\80\82
+「{{int:savearticle}}」をもう一度クリックすると、編集内容は要約なしで保存されます。",
 'missingcommenttext' => '以下にコメントを入力してください。',
-'missingcommentheader' => "'''注意:'''このコメントに対する題名/見出しが空欄です。
+'missingcommentheader' => "'''注意:''' このコメントに対する題名/見出しが空欄です。
 「{{int:savearticle}}」ボタンをもう一度押すと、空のまま編集が保存されます。",
-'summary-preview' => '要約のプレビュー',
-'subject-preview' => '題名/見出しのプレビュー',
+'summary-preview' => '要約のプレビュー:',
+'subject-preview' => '題名/見出しのプレビュー:',
 'blockedtitle' => '利用者はブロックされています',
 'blockedtext' => "'''この利用者名またはIPアドレスはブロックされています。'''
 
@@ -1040,7 +1043,7 @@ $1または他の[[{{MediaWiki:Grouppage-sysop}}|管理者]]にこのブロッ
 'accmailtext' => "[[User talk:$1|$1]]のために無作為に生成したパスワードを、$2に送信しました。
 
 この新アカウントのパスワードは、ログインした際に''[[Special:ChangePassword|パスワード変更]]''ページで変更できます。",
-'newarticle' => '(新)',
+'newarticle' => '(新)',
 'newarticletext' => "まだ存在しないページへのリンクをたどりました。
 このページを新規作成するには、ページの内容を以下のボックスに記入してください (詳しくは[[{{MediaWiki:Helppage}}|ヘルプページ]]を参照してください)。
 誤ってこのページにたどり着いた場合には、ブラウザーの'''戻る'''ボタンで前のページに戻ってください。",
@@ -1062,7 +1065,7 @@ IP アドレスは複数の利用者で共有されている場合がありま
 このページの作成/編集が適切かご確認ください。',
 'userpage-userdoesnotexist-view' => '利用者アカウント「$1」は登録されていません。',
 'blocked-notice-logextract' => 'この利用者は現在ブロックされています。
-参考のために最新のブロック記録を以下に表示します:',
+参考のために最新のブロック記録項目を以下に表示します:',
 'clearyourcache' => "'''注意:''' 保存後、変更を確認するにはブラウザーのキャッシュを消去する必要がある場合があります。
 * '''Firefox / Safari:''' ''Shift'' を押しながら ''再読み込み'' をクリックするか、''Ctrl-F5'' または ''Ctrl-R'' を押してください (Mac では ''&#x2318;-R'')
 * '''Google Chrome:''' ''Ctrl-Shift-R'' を押してください (Mac では ''&#x2318;-Shift-R'')
@@ -1070,17 +1073,17 @@ IP アドレスは複数の利用者で共有されている場合がありま
 * '''Opera:''' ''ツール → 設定'' からキャッシュをクリアしてください。",
 'usercssyoucanpreview' => "'''ヒント:'''「{{int:showpreview}}」ボタンを使うと、保存前に新しいCSSを試験できます。",
 'userjsyoucanpreview' => "'''ヒント:'''「{{int:showpreview}}」ボタンを使うと、保存前に新しいJavaScriptを試験できます。",
-'usercsspreview' => "'''å\88©ç\94¨è\80\85CSSã\82\92ã\83\97ã\83¬ã\83\93ã\83¥ã\83¼ã\81\97ã\81¦ã\81\84ã\81¾ã\81\99。'''
-'''まだ保存されていません'''",
-'userjspreview' => "'''å\88©ç\94¨è\80\85JavaScriptã\82\92試é¨\93\83\97ã\83¬ã\83\93ã\83¥ã\83¼ã\81\97ã\81¦ã\81\84ã\81¾ã\81\99。'''
-'''まだ保存されていません'''",
+'usercsspreview' => "'''å\88©ç\94¨è\80\85CSSã\82\92ã\83\97ã\83¬ã\83\93ã\83¥ã\83¼ã\81\97ã\81¦ã\81\84ã\82\8bã\81 ã\81\91ã\81«é\81\8eã\81\8eã\81¾ã\81\9bã\82\93。'''
+'''まだ保存されていません!'''",
+'userjspreview' => "'''å\88©ç\94¨è\80\85JavaScriptã\82\92試é¨\93\83\97ã\83¬ã\83\93ã\83¥ã\83¼ã\81\97ã\81¦ã\81\84ã\82\8bã\81 ã\81\91ã\81«é\81\8eã\81\8eã\81¾ã\81\9bã\82\93。'''
+'''まだ保存されていません!'''",
 'sitecsspreview' => "'''ここでは、CSSをプレビューしているだけに過ぎません。'''
-'''まだ保存されていません'''",
+'''まだ保存されていません!'''",
 'sitejspreview' => "'''ここでは、JavaScriptをプレビューしているだけに過ぎません。'''
-'''まだ保存されていません'''",
+'''まだ保存されていません!'''",
 'userinvalidcssjstitle' => "'''警告:'''「$1」という外装はありません。
 カスタム .css/.js ページではページ名を小文字にしてください。例: {{ns:user}}:Hoge/Vector.css ではなく {{ns:user}}:Hoge/vector.css",
-'updated' => '(更新)',
+'updated' => '(更新)',
 'note' => "'''お知らせ:'''",
 'previewnote' => "'''これはプレビューです。'''
 変更内容はまだ保存されていません!",
@@ -1103,7 +1106,7 @@ IP アドレスは複数の利用者で共有されている場合がありま
 'creating' => '「$1」を作成中',
 'editingsection' => '「$1」を編集中 (節単位)',
 'editingcomment' => '「$1」を編集中 (新しい節)',
-'editconflict' => '編集競合$1',
+'editconflict' => '編集競合$1',
 'explainconflict' => "このページを編集し始めた後に、他の誰かがこのページを変更しました。
 上側のテキスト領域は現在の最新の状態です。
 編集していた文章は下側のテキスト領域に示されています。
@@ -1111,52 +1114,51 @@ IP アドレスは複数の利用者で共有されている場合がありま
 上側のテキスト領域の内容'''だけ'''が、「{{int:savearticle}}」をクリックした時に実際に保存されます。",
 'yourtext' => '編集中の文章',
 'storedversion' => '保存された版',
-'nonunicodebrowser' => "'''警告:ご使用中のブラウザーはUnicodeに未対応です。'''
-安全にページを編集する回避策を表示しています:編集ボックス内の非ASCII文字を16進数コードで表現しています。",
-'editingold' => "'''警告このページの古い版を編集しています。'''
-保存すると、この版以降に追加されていた変更がすべて失われます。",
+'nonunicodebrowser' => "'''警告: ご使用中のブラウザーは Unicode に未対応です。'''
+安全にページを編集する回避策を表示しています: 編集ボックス内の非 ASCII 文字を 16 進数コードで表現しています。",
+'editingold' => "'''警告このページの古い版を編集しています。'''
+保存すると、この版以降になされた変更がすべて失われます。",
 'yourdiff' => '差分',
 'copyrightwarning' => "{{SITENAME}}への投稿は、すべて$2 (詳細は$1を参照) のもとで公開したと見なされることにご注意ください。
 あなたが投稿したものを、他人がよって遠慮なく編集し、それを自由に配布するのを望まない場合は、ここには投稿しないでください。<br />
 また、投稿するのは、あなたが書いたものか、パブリック ドメインまたはそれに類するフリーな資料からの複製であることを約束してください。
 '''著作権保護されている作品を、許諾なしに投稿しないでください!'''",
-'copyrightwarning2' => "{{SITENAME}}ã\81¸ã\81®ã\81\99ã\81¹ã\81¦ã\81®æ\8a\95稿ã\81¯ã\80\81ä»\96ã\81®å\88©ç\94¨è\80\85ã\81\8cç·¨é\9b\86ã\80\81å¤\89æ\9b´ã\80\81é\99¤å\8e»ã\81\99ã\82\8bå\8f¯è\83½æ\80§があります。
+'copyrightwarning2' => "{{SITENAME}}ã\81¸ã\81®ã\81\99ã\81¹ã\81¦ã\81®æ\8a\95稿ã\81¯ã\80\81ä»\96ã\81®å\88©ç\94¨è\80\85ã\81«ã\82\88ã\81£ã\81¦ç·¨é\9b\86ã\80\81å¤\89æ\9b´ã\80\81é\99¤å\8e»ã\81\95ã\82\8cã\82\8bå ´å\90\88があります。
 あなたの投稿を、他人が遠慮なく編集するのを望まない場合は、ここには投稿しないでください。<br />
-また、投稿するのは、あなたが書いたものか、パブリック ドメインまたはそれに類するフリーな資料からの複製であることを約束してください(詳細は$1を参照)
+また、投稿するのは、あなたが書いたものか、パブリック ドメインまたはそれに類するフリーな資料からの複製であることを約束してください (詳細は$1を参照)
 '''著作権保護されている作品を、許諾なしに投稿してはいけません!'''",
-'longpageerror' => "'''エラー投稿された文章は {{PLURAL:$1|$1 KB}} の長さがあります。これは投稿できる最大の長さ {{PLURAL:$2|$2 KB}} を超えています。'''
-この編集は保存できません。",
-'readonlywarning' => "'''警告:データベースがメンテナンスのためロックされており、現在は編集を保存できません。'''
-å¿\85è¦\81ã\81§ã\81\82ã\82\8cã\81°æ\96\87ç« ã\82\92ã\82«ã\83\83ã\83\88&amp;ペーストしてテキストファイルとして保存し、後ほど保存をやり直してください。
-
-データベースをロックした管理者による説明は以下の通りです$1",
-'protectedpagewarning' => "'''警告このページは保護されているため、管理者権限を持つ利用者のみが編集できます。'''
-参考として以下に最後の記録を表示します",
-'semiprotectedpagewarning' => "'''注意:'''このページは保護されているため、登録利用者のみが編集できます。
-参考として以下に最後の記録を表示します",
-'cascadeprotectedwarning' => "'''警告:'''このページはカスケード保護されている以下の{{PLURAL:$1|ページ|ページ群}}から読み込まれているため、管理者権限を持つ利用者のみが編集できるように保護されています:",
-'titleprotectedwarning' => "'''警告このページは保護されているため、作成には[[Special:ListGroupRights|特定の権限]]が必要です。'''
-参考として以下に最後の記録を表示します",
-'templatesused' => 'このページで使用されている{{PLURAL:$1|テンプレート}}',
-'templatesusedpreview' => 'このプレビューで使用されている{{PLURAL:$1|テンプレート}}',
-'templatesusedsection' => 'この節で使用されている{{PLURAL:$1|テンプレート}}',
-'template-protected' => '(保護)',
-'template-semiprotected' => '(半保護)',
-'hiddencategories' => 'このページは {{PLURAL:$1|$1 個の隠しカテゴリ}}に属しています',
+'longpageerror' => "'''エラー投稿された文章は {{PLURAL:$1|$1 KB}} の長さがあります。これは投稿できる最大の長さ {{PLURAL:$2|$2 KB}} を超えています。'''
+この編集内容は保存できません。",
+'readonlywarning' => "'''警告: データベースがメンテナンスのためロックされており、現在は編集内容を保存できません。'''
+å¿\85è¦\81ã\81§ã\81\82ã\82\8cã\81°æ\96\87ç« ã\82\92ã\82³ã\83\94ã\83¼&amp;ペーストしてテキストファイルとして保存し、後ほど保存をやり直してください。
+
+データベースをロックした管理者による説明は以下の通りです$1",
+'protectedpagewarning' => "'''警告このページは保護されているため、管理者権限を持つ利用者のみが編集できます。'''
+参考として以下に最後の記録を表示します:",
+'semiprotectedpagewarning' => "'''注意:''' このページは保護されているため、登録利用者のみが編集できます。
+参考として以下に最後の記録を表示します:",
+'cascadeprotectedwarning' => "'''警告:''' このページはカスケード保護されている以下の{{PLURAL:$1|ページ|ページ群}}から読み込まれているため、管理者権限を持つ利用者のみが編集できるように保護されています:",
+'titleprotectedwarning' => "'''警告このページは保護されているため、作成には[[Special:ListGroupRights|特定の権限]]が必要です。'''
+参考として以下に最後の記録を表示します:",
+'templatesused' => 'このページで使用されている{{PLURAL:$1|テンプレート}}:',
+'templatesusedpreview' => 'このプレビューで使用されている{{PLURAL:$1|テンプレート}}:',
+'templatesusedsection' => 'この節で使用されている{{PLURAL:$1|テンプレート}}:',
+'template-protected' => '(保護)',
+'template-semiprotected' => '(半保護)',
+'hiddencategories' => 'このページは {{PLURAL:$1|$1 個の隠しカテゴリ}}に属しています:',
 'edittools' => '<!-- ここに書いたテキストは編集及びアップロードのフォームの下に表示されます。 -->',
-'nocreatetitle' => 'ページの作成が制限されています',
 'nocreatetext' => '{{SITENAME}}ではページの新規作成を制限しています。
 元のページに戻って既存のページを編集するか、[[Special:UserLogin|ログインまたはアカウント作成]]をしてください。',
 'nocreate-loggedin' => '新しいページを作成する権限がありません。',
 'sectioneditnotsupported-title' => '節単位編集はサポートされていません',
 'sectioneditnotsupported-text' => 'このページでは節単位編集はサポートされません。',
 'permissionserrors' => '認証エラー',
-'permissionserrorstext' => 'あなたにはこの操作を行う権限はありません。{{PLURAL:$1|理由}}は以下の通りです',
+'permissionserrorstext' => 'あなたにはこの操作を行う権限はありません。{{PLURAL:$1|理由}}は以下の通りです:',
 'permissionserrorstext-withaction' => 'あなたには「$2」を行う権限はありません。{{PLURAL:$1|理由}}は以下の通りです:',
-'recreate-moveddeleted-warn' => "'''警告以前削除されたページを再作成しようとしています。'''
+'recreate-moveddeleted-warn' => "'''警告以前削除されたページを再作成しようとしています。'''
 
 このページの編集を続行するのが適切かどうかご確認ください。
-参考までに、このページの削除と移動の記録を以下に示します",
+参考までに、このページの削除と移動の記録を以下に示します:",
 'moveddeleted-notice' => 'このページは削除されています。
 参考のため、このページの削除と移動の記録を以下に表示します。',
 'log-fulllog' => '完全な記録を閲覧',
@@ -1167,9 +1169,9 @@ IP アドレスは複数の利用者で共有されている場合がありま
 'edit-conflict' => '編集が競合。',
 'edit-no-change' => '文章が変更されていないため、編集は無視されました。',
 'edit-already-exists' => '新しいページを作成できませんでした。
\81\9dã\81®ã\83\9aã\83¼ã\82¸ã\81¯æ\97¢ã\81«å­\98å\9c¨ã\81\97ã\81¦ã\81\84ã\81¾ã\81\99ã\80\82',
+そのページは既に存在します。',
 'defaultmessagetext' => '既定のメッセージ文',
-'content-failed-to-parse' => '$2 の本文を$1モデルとして構文解析できませんでした: $3',
+'content-failed-to-parse' => '$2のコンテンツを$1モデルとして構文解析できませんでした: $3',
 'invalid-content-data' => '本文データが無効です',
 'content-not-allowed-here' => 'ページ [[$2]] では、「$1」コンテンツは許可されていません',
 
@@ -1180,17 +1182,17 @@ IP アドレスは複数の利用者で共有されている場合がありま
 'content-model-css' => 'CSS',
 
 # Parser/template warnings
-'expensive-parserfunction-warning' => "'''警告:'''このページでの高負荷なパーサー関数の呼び出し回数が多過ぎます。
+'expensive-parserfunction-warning' => "'''警告:''' このページでは、高負荷なパーサー関数の呼び出し回数が多過ぎます。
 
-{{PLURAL:$2|呼び出しを $2 回}}未満にしてください({{PLURAL:$1|現在は $1 回}})。",
+{{PLURAL:$2|呼び出しを $2 回}}未満にしてください ({{PLURAL:$1|現在は $1 回}})。",
 'expensive-parserfunction-category' => '高負荷な構文解析関数の呼び出しが多過ぎるページ',
-'post-expand-template-inclusion-warning' => "'''警告:'''テンプレートの読み込みサイズが大き過ぎます。
+'post-expand-template-inclusion-warning' => "'''警告:''' テンプレートの読み込みサイズが大き過ぎます。
 いくつかのテンプレートは読み込まれません。",
 'post-expand-template-inclusion-category' => 'テンプレート読み込みサイズが制限値を越えているページ',
-'post-expand-template-argument-warning' => "'''警告:'''このページは、展開後のサイズが大きすぎる引数を渡したテンプレートを少なくとも1つ含んでいます。
+'post-expand-template-argument-warning' => "'''警告:''' このページは、展開後のサイズが大きすぎるテンプレート引数を少なくとも 1 つ含んでいます。
 これらの引数を省略しました。",
 'post-expand-template-argument-category' => '省略されたテンプレート引数を含むページ',
-'parser-template-loop-warning' => 'ã\83\86ã\83³ã\83\97ã\83¬ã\83¼ã\83\88ã\81®ã\83«ã\83¼ã\83\97ã\81\8cæ¤\9cå\87ºã\81\95ã\82\8cã\81¾ã\81\97ã\81\9fï¼\9a[[$1]]',
+'parser-template-loop-warning' => 'ã\83\86ã\83³ã\83\97ã\83¬ã\83¼ã\83\88ã\81®ã\83«ã\83¼ã\83\97ã\82\92æ¤\9cå\87ºã\81\97ã\81¾ã\81\97ã\81\9f[[$1]]',
 'parser-template-recursion-depth-warning' => 'テンプレートの再帰の深さ($1)が上限を超えました',
 'language-converter-depth-warning' => '言語変換機能の深さ($1)が制限を超えました',
 'node-count-exceeded-category' => 'ノード数が制限を超えたページ',
@@ -1212,7 +1214,7 @@ IP アドレスは複数の利用者で共有されている場合がありま
 'cantcreateaccounttitle' => 'アカウントを作成できません',
 'cantcreateaccount-text' => "このIPアドレス('''$1''')からのアカウント作成は[[User:$3|$3]]によってブロックされています。
 
-$3が示した理由''$2''",
+$3が示した理由''$2''",
 
 # History pages
 'viewpagelogs' => 'このページの記録を閲覧',
@@ -1229,8 +1231,8 @@ $3が示した理由:''$2''",
 'last' => '前',
 'page_first' => '先頭',
 'page_last' => '末尾',
-'histlegend' => "差分の選択比較したい版のラジオボタンを選択し、Enterキーを押すか、下部のボタンを押します。<br />
-凡例'''({{int:cur}})'''=最新版との比較、'''({{int:last}})'''=直前の版との比較、'''{{int:minoreditletter}}'''=細部の編集",
+'histlegend' => "差分の選択比較したい版のラジオボタンを選択し、Enterキーを押すか、下部のボタンを押します。<br />
+凡例'''({{int:cur}})'''=最新版との比較、'''({{int:last}})'''=直前の版との比較、'''{{int:minoreditletter}}'''=細部の編集",
 'history-fieldset-title' => '履歴の閲覧',
 'history-show-deleted' => '削除済みのみ',
 'histfirst' => '最古',
@@ -1265,7 +1267,7 @@ $3が示した理由:''$2''",
 内容を閲覧できます。[{{fullurl:{{#Special:Log}}/suppress|page={{FULLPAGENAMEE}}}} 秘匿記録]に詳細情報があるかもしれません。",
 'rev-deleted-no-diff' => "どちらかの版が'''削除されているため'''、差分表示できません。
 [{{fullurl:{{#Special:Log}}/delete|page={{FULLPAGENAMEE}}}} 削除記録]に詳細情報があるかもしれません。",
-'rev-suppressed-no-diff' => "指定された差分は'''削除された'''版を含んでいるため、閲覧できません。",
+'rev-suppressed-no-diff' => "どちらかの版が'''削除されているため'''、差分表示できません。",
 'rev-deleted-unhide-diff' => "この差分の一方の版は'''削除されています'''。
 [{{fullurl:{{#Special:Log}}/delete|page={{FULLPAGENAMEE}}}} 削除記録]に詳細情報があるかもしれません。
 このまま[$1 この差分を閲覧]できます。",
@@ -1280,20 +1282,20 @@ $3が示した理由:''$2''",
 'rev-showdeleted' => '表示',
 'revisiondelete' => '版の削除と復元',
 'revdelete-nooldid-title' => '無効な対象版',
-'revdelete-nooldid-text' => 'ã\81\93ã\81®æ\93\8dä½\9cã\81®å¯¾è±¡ã\81¨ã\81ªã\82\8bç\89\88ã\82\92æ\8c\87å®\9aã\81\97ã\81¦ã\81\84ã\81ªã\81\84ã\81\8bã\80\81æ\8c\87å®\9aã\81\97ã\81\9fç\89\88ã\81\8cå­\98å\9c¨ã\81\97ã\81¦ã\81\84ã\81ªã\81\84ã\81\8bã\80\81ã\81\82ã\82\8bã\81\84ã\81¯æ\9c\80æ\96°ç\89\88ã\82\92é\9d\9e表示しようとしています。',
+'revdelete-nooldid-text' => 'ã\81\93ã\81®æ\93\8dä½\9cã\81®å¯¾è±¡ã\81¨ã\81ªã\82\8bç\89\88ã\82\92æ\8c\87å®\9aã\81\97ã\81¦ã\81\84ã\81ªã\81\84ã\81\8bã\80\81æ\8c\87å®\9aã\81\97ã\81\9fç\89\88ã\81\8cå­\98å\9c¨ã\81\97ã\81ªã\81\84ã\81\8bã\80\81ã\81¾ã\81\9fã\81¯æ\9c\80æ\96°ç\89\88ã\82\92é\9d\9e表示ã\81«しようとしています。',
 'revdelete-nologtype-title' => '記録の種類を指定していません',
 'revdelete-nologtype-text' => 'この操作を実行する記録の種類を指定していません。',
 'revdelete-nologid-title' => '無効な記録項目',
-'revdelete-nologid-text' => 'ã\81\93ã\81®æ\93\8dä½\9cã\81®å¯¾è±¡ã\81¨ã\81ªã\82\8bè¨\98é\8c²é \85ç\9b®ã\82\92æ\8c\87å®\9aã\81\97ã\81¦ã\81\84ã\81ªã\81\84ã\81\8bã\80\81ã\81\82ã\82\8bã\81\84は指定した項目が存在しません。',
+'revdelete-nologid-text' => 'ã\81\93ã\81®æ\93\8dä½\9cã\81®å¯¾è±¡ã\81¨ã\81ªã\82\8bè¨\98é\8c²é \85ç\9b®ã\82\92æ\8c\87å®\9aã\81\97ã\81¦ã\81\84ã\81ªã\81\84ã\81\8bã\80\81ã\81¾ã\81\9fは指定した項目が存在しません。',
 'revdelete-no-file' => '指定されたファイルは存在しません。',
-'revdelete-show-file-confirm' => '本当にファイル「<nowiki>$1</nowiki>」の削除された$2$3の版を閲覧しますか?',
+'revdelete-show-file-confirm' => 'ファイル「<nowiki>$1</nowiki>」の削除された$2$3の版を本当に閲覧しますか?',
 'revdelete-show-file-submit' => 'はい',
-'revdelete-selected' => "'''[[:$1]] の{{PLURAL:$2|選択された版}}'''",
-'logdelete-selected' => "'''{{PLURAL:$1|選択された記録項目}}'''",
+'revdelete-selected' => "'''[[:$1]] の{{PLURAL:$2|選択された版}}:'''",
+'logdelete-selected' => "'''{{PLURAL:$1|選択された記録項目}}:'''",
 'revdelete-text' => "'''削除された版や記録項目は引き続きページの履歴や記録に表示されますが、一般利用者はその内容の一部を取得できなくなります。'''
 追加の制限がかけられない限り、{{SITENAME}}の他の管理者は同じインターフェイスを使って非表示の内容の取得や復元ができます。",
 'revdelete-confirm' => 'この操作を行おうとしていること、その結果を理解していること、[[{{MediaWiki:Policy-url}}|方針]]に従っていること、を確認してください。',
-'revdelete-suppress-text' => "秘匿は、'''以下の場合に限って'''使用すべきです
+'revdelete-suppress-text' => "秘匿は、'''以下の場合に限って'''使用すべきです:
 * 名誉毀損の恐れのある記述
 * 非公開個人情報
 *: ''自宅の住所、電話番号、社会保障番号など''",
@@ -1309,10 +1311,10 @@ $3が示した理由:''$2''",
 'revdelete-radio-unset' => 'いいえ',
 'revdelete-suppress' => '他の利用者と同様に管理者からもデータを隠す',
 'revdelete-unsuppress' => '復元版に対する制限を除去',
-'revdelete-log' => '理由',
+'revdelete-log' => '理由:',
 'revdelete-submit' => '選択された{{PLURAL:$1|版}}に適用',
 'revdelete-success' => "'''版の閲覧レベルを更新しました。'''",
-'revdelete-failure' => "'''版の閲覧レベルを更新できませんでした'''
+'revdelete-failure' => "'''版の閲覧レベルを更新できませんでした:'''
 $1",
 'logdelete-success' => "'''記録の閲覧レベルを変更しました。'''",
 'logdelete-failure' => "'''記録の閲覧レベルを設定できませんでした。'''
@@ -1322,26 +1324,26 @@ $1",
 'revdel-restore-visible' => '閲覧できる版',
 'pagehist' => 'ページの履歴',
 'deletedhist' => '削除された履歴',
-'revdelete-hide-current' => '$1$2の項目の非表示に失敗しましたこれは最新版であるため。
+'revdelete-hide-current' => '$1$2の項目の非表示に失敗しましたこれは最新版であるため。
 非表示にはできません。',
-'revdelete-show-no-access' => '$1$2の項目の表示に失敗しましたこの項目には「制限付き」の印が付いています。
+'revdelete-show-no-access' => '$1$2の項目の表示に失敗しましたこの項目には「制限付き」の印が付いています。
 アクセス権限がありません。',
-'revdelete-modify-no-access' => '$1$2の項目の修正に失敗しましたこの項目には「制限付き」の印が付いています。
+'revdelete-modify-no-access' => '$1$2の項目の修正に失敗しましたこの項目には「制限付き」の印が付いています。
 アクセス権限がありません。',
 'revdelete-modify-missing' => '版 ID $1 の項目の変更に失敗しました: データベース内にありません!',
-'revdelete-no-change' => "'''警告''' $1$2の項目には要求された閲覧レベルが既に設定されています。",
-'revdelete-concurrent-change' => '$1$2の項目の変更に失敗しましたあなたが変更しようとしている間に、他の誰かが変更したようです。
+'revdelete-no-change' => "'''警告:''' $1$2の項目には要求された閲覧レベルが既に設定されています。",
+'revdelete-concurrent-change' => '$1$2の項目の変更に失敗しましたあなたが変更しようとしている間に、他の誰かが変更したようです。
 記録を確認してください。',
-'revdelete-only-restricted' => '$1$2の項目の版指定削除に失敗しました他の閲覧レベルの選択肢のうちどれかをさらに選択しなければ、管理者から項目を秘匿できません。',
+'revdelete-only-restricted' => '$1$2の項目の版指定削除に失敗しました他の閲覧レベルの選択肢のうちどれかをさらに選択しなければ、管理者から項目を秘匿できません。',
 'revdelete-reason-dropdown' => '*よくある削除理由
 ** 著作権侵害
 ** 不適切なコメントや個人情報の開示
 ** 不適切な利用者名
 ** 名誉毀損のおそれ',
-'revdelete-otherreason' => '他の、または追加の理由',
+'revdelete-otherreason' => '他の、または追加の理由:',
 'revdelete-reasonotherlist' => 'その他の理由',
 'revdelete-edit-reasonlist' => '削除理由を編集',
-'revdelete-offender' => '指定版の投稿者',
+'revdelete-offender' => '指定版の投稿者:',
 
 # Suppression log
 'suppressionlog' => '秘匿記録',
@@ -1383,13 +1385,13 @@ $1",
 'history-title' => '「$1」の変更履歴',
 'difference-title' => '$1:版間の差分',
 'difference-title-multipage' => '$1 と $2:ページ間の差分',
-'difference-multipage' => '(ページ間の差分)',
+'difference-multipage' => '(ページ間の差分)',
 'lineno' => '$1行:',
 'compareselectedversions' => '選択した版同士を比較',
 'showhideselectedversions' => '選択した版を表示/非表示',
 'editundo' => '取り消し',
-'diff-multi' => '({{PLURAL:$2|$2人の利用者}}による、{{PLURAL:$1|間の$1版}}が非表示)',
-'diff-multi-manyusers' => '({{PLURAL:$2|$2人を超える利用者}}による、{{PLURAL:$1|間の$1版}}が非表示)',
+'diff-multi' => '({{PLURAL:$2|$2人の利用者}}による、{{PLURAL:$1|間の$1版}}が非表示)',
+'diff-multi-manyusers' => '({{PLURAL:$2|$2人を超える利用者}}による、{{PLURAL:$1|間の$1版}}が非表示)',
 'difference-missing-revision' => '指定された{{PLURAL:$2|$2版}}の差分 ($1) が見つかりませんでした。
 
 通常、削除されたページの版への古い差分表示や固定リンクをたどった際に、このようなことが起きます。 
@@ -1408,8 +1410,8 @@ $1",
 'notextmatches' => 'どのページ本文とも一致しませんでした',
 'prevn' => '前の$1件',
 'nextn' => '次の$1件',
-'prevn-title' => '前の{{PLURAL:$1|$1結果}}',
-'nextn-title' => '次の{{PLURAL:$1|$1結果}}',
+'prevn-title' => '前の{{PLURAL:$1|$1}}',
+'nextn-title' => '次の{{PLURAL:$1|$1}}',
 'shown-title' => 'ページあたり{{PLURAL:$1|$1件の結果}}を表示',
 'viewprevnext' => '($1{{int:pipe-separator}}$2) ($3 件) を表示',
 'searchmenu-legend' => '検索オプション',
@@ -1579,7 +1581,7 @@ $1 {{PLURAL:$1|文字}}以下である必要があります。',
 'prefs-info' => '基本情報',
 'prefs-i18n' => '国際化',
 'prefs-signature' => '署名',
-'prefs-dateformat' => '日付の形式',
+'prefs-dateformat' => 'æ\97¥ä»\98ã\81¨æ\99\82å\88»ã\81®å½¢å¼\8f',
 'prefs-timeoffset' => '時差',
 'prefs-advancedediting' => '詳細設定',
 'prefs-advancedrc' => '詳細設定',
@@ -1593,7 +1595,7 @@ $1 {{PLURAL:$1|文字}}以下である必要があります。',
 
 # User preference: e-mail validation using jQuery
 'email-address-validity-valid' => 'メールアドレスは有効のようです',
-'email-address-validity-invalid' => '有効なメールアドレスを入力',
+'email-address-validity-invalid' => '有効なメールアドレスを入力してください',
 
 # User rights
 'userrights' => '利用者権限を管理',
@@ -1705,15 +1707,13 @@ $1 {{PLURAL:$1|文字}}以下である必要があります。',
 'right-sendemail' => '他の利用者にメールを送信',
 'right-passwordreset' => 'パスワード再設定メールを閲覧',
 
+# Special:Log/newusers
+'newuserlogpage' => 'アカウント作成記録',
+'newuserlogpagetext' => '以下はアカウント作成の記録です。',
+
 # User rights log
 'rightslog' => '利用者権限変更記録',
 'rightslogtext' => '以下は利用者権限の変更記録です。',
-'rightslogentry' => '$1 の所属グループを $2 から $3 に変更しました',
-'rightslogentry-autopromote' => '$2 から $3 に自動的に昇格しました',
-'logentry-rights-rights' => '$1 が $3 の所属グループを $4 から $5 に変更しました',
-'logentry-rights-rights-legacy' => '$1 が $3 の所属グループを変更しました',
-'logentry-rights-autopromote' => '$1 が $4 から $5 に自動的に昇格しました',
-'rightsnone' => '(なし)',
 
 # Associated actions - in the sentence "You do not have permission to X"
 'action-read' => 'このページの閲覧',
@@ -1809,18 +1809,19 @@ $1 {{PLURAL:$1|文字}}以下である必要があります。',
 'uploadnologin' => 'ログインしていません',
 'uploadnologintext' => 'ファイルをアップロードするには[[Special:UserLogin|ログイン]]する必要があります。',
 'upload_directory_missing' => 'アップロード先ディレクトリ ($1) が見つかりませんでした。ウェブ サーバーによる作成もできませんでした。',
-'upload_directory_read_only' => 'アップロード先ディレクトリ($1)には、ウェブサーバーが書き込めません。',
+'upload_directory_read_only' => 'アップロード先ディレクトリ ($1) には、ウェブサーバーが書き込めません。',
 'uploaderror' => 'アップロードのエラー',
 'upload-recreate-warning' => "'''警告: その名前のファイルは、以前に削除または移動されています。'''
 
 参考のため、このページの削除と移動の記録を以下に示します:",
 'uploadtext' => "ファイルをアップロードするには、以下のフォームを使用してください。
+
 以前にアップロードされたファイルの表示と検索には[[Special:FileList|{{int:listfiles}}]]を使用してください。(再) アップロードは[[Special:Log/upload|アップロード記録]]に、削除は[[Special:Log/delete|削除記録]]にも記録されます。
 
 ページにファイルを入れるには、以下の書式のリンクを使用してください:
-* '''<code><nowiki>[[</nowiki>{{ns:file}}:<nowiki>File.jpg]]</nowiki></code>''' とすると、ファイルが完全なままで使用されます
+* '''<code><nowiki>[[</nowiki>{{ns:file}}:<nowiki>File.jpg]]</nowiki></code>''' とすると、ファイルが完全なままで使用されます
 * '''<code><nowiki>[[</nowiki>{{ns:file}}:<nowiki>File.png|200px|thumb|left|代替文]]</nowiki></code>''' とすると、200ピクセルの幅に修正された状態で、左寄せの枠内に、「代替文」が説明として使用されます。
-* '''<code><nowiki>[[</nowiki>{{ns:media}}:<nowiki>File.ogg]]</nowiki></code>''' とすると、ファイルを表示せずにそのファイルに直接リンクします",
+* '''<code><nowiki>[[</nowiki>{{ns:media}}:<nowiki>File.ogg]]</nowiki></code>''' とすると、ファイルを表示せずにそのファイルに直接リンクします",
 'upload-permitted' => '許可されているファイル形式: $1。',
 'upload-preferred' => '推奨されているファイル形式: $1。',
 'upload-prohibited' => '禁止されているファイル形式: $1。',
@@ -1849,7 +1850,7 @@ $1 {{PLURAL:$1|文字}}以下である必要があります。',
 推奨される{{PLURAL:$3|ファイル形式}}は $2 です。",
 'filetype-banned-type' => "'''「.$1」''' は許可されていないファイル形式です{{PLURAL:$4|}}。
 許可されているファイル形式{{PLURAL:$3|}}は$2です。",
-'filetype-missing' => 'ファイルに、「.jpg」のような拡張子がありません。',
+'filetype-missing' => 'ファイル名に「.jpg」のような拡張子がありません。',
 'empty-file' => '送信されたファイルは空でした。',
 'file-too-large' => '送信されたファイルは大きすぎます。',
 'filename-tooshort' => 'ファイル名が短すぎます。',
@@ -1867,16 +1868,16 @@ $1 {{PLURAL:$1|文字}}以下である必要があります。',
 'emptyfile' => 'アップロードしたファイルは内容が空のようです。
 ファイル名の指定が間違っている可能性があります。
 本当にこのファイルをアップロードしたいのか、確認してください。',
-'windows-nonascii-filename' => 'このwikiではファイル名に特殊文字を使用できません。',
+'windows-nonascii-filename' => 'このウィキではファイル名に特殊文字を使用できません。',
 'fileexists' => 'この名前のファイルは既に存在します。置き換えていいかどうか確信が持てない場合は、<strong>[[:$1]]</strong>を確認してください。
 [[$1|thumb]]',
-'filepageexists' => 'ã\81\93ã\81®ã\83\95ã\82¡ã\82¤ã\83«ã\81®ã\81\9fã\82\81ã\81®èª¬æ\98\8eã\83\9aã\83¼ã\82¸ã\81¯æ\97¢ã\81«<strong>[[:$1]]</strong>ã\81«ä½\9cæ\88\90ã\81\95ã\82\8cã\81¦ã\81\84ã\81¾ã\81\99ã\81\8cã\80\81ç\8f¾å\9c¨ã\80\81ã\83\95ã\82¡ã\82¤ã\83«ã\81\8cå­\98å\9c¨ã\81\97ã\81¦ã\81\84ã\81¾ã\81\9bã\82\93ã\80\82
+'filepageexists' => 'このファイルのための説明ページは既に<strong>[[:$1]]</strong>に作成されていますが、現在、ファイルが存在しません。
 入力した概要は説明ページに反映されません。
 新しい概要を表示させるには、説明ページを手動で編集する必要があります。
 [[$1|thumb]]',
-'fileexists-extension' => 'é¡\9eä¼¼ã\81\97ã\81\9få\90\8då\89\8dã\81®ã\83\95ã\82¡ã\82¤ã\83«ã\81\8cæ\97¢ã\81«å­\98å\9c¨ã\81\97ã\81¦ã\81\84ã\81¾ã\81\99ï¼\9a[[$2|thumb]]
+'fileexists-extension' => 'é¡\9eä¼¼ã\81\97ã\81\9få\90\8då\89\8dã\81®ã\83\95ã\82¡ã\82¤ã\83«ã\81\8cæ\97¢ã\81«å­\98å\9c¨ã\81\97ã\81¾ã\81\99[[$2|thumb]]
 * アップロード中のファイルの名前:<strong>[[:$1]]</strong>
-* 既存ファイルの名前<strong>[[:$2]]</strong>
+* 既存ファイルの名前<strong>[[:$2]]</strong>
 違う名前を選択してください。',
 'fileexists-thumbnail-yes' => "このファイルは元の画像から縮小されたもの''(サムネイル)''のようです。
 [[$1|thumb]]
@@ -1900,22 +1901,22 @@ $1 {{PLURAL:$1|文字}}以下である必要があります。',
 'uploadedimage' => '「[[$1]]」をアップロードしました',
 'overwroteimage' => '「[[$1]]」の新しい版をアップロードしました',
 'uploaddisabled' => 'アップロード機能は無効になっています。',
-'copyuploaddisabled' => 'URLからのアップロードは無効になっています。',
-'uploadfromurl-queued' => 'ã\82¢ã\83\83ã\83\97ã\83­ã\83¼ã\83\89ã\81\8cã\80\81ã\82­ã\83¥ã\83¼ã\81«è¿½å\8a ã\81\95ã\82\8cã\81¾ã\81\97ã\81\9fã\80\82',
+'copyuploaddisabled' => 'URL からのアップロードは無効になっています。',
+'uploadfromurl-queued' => 'アップロードがキューに追加されました。',
 'uploaddisabledtext' => 'ファイルのアップロードは、無効になっています。',
 'php-uploaddisabledtext' => 'ファイルのアップロードがPHPで無効化されています。
 file_uploadsの設定を確認してください。',
 'uploadscripted' => 'このファイルは、ウェブブラウザーが誤って解釈してしまうおそれがあるHTMLまたはスクリプトコードを含んでいます。',
-'uploadvirus' => 'ã\81\93ã\81®ã\83\95ã\82¡ã\82¤ã\83«ã\81«ã\81¯ã\82¦ã\82¤ã\83«ã\82¹ã\81\8cå\90«ã\81¾ã\82\8cã\81¦ã\81\84ã\81¾ã\81\99ï¼\81
-詳細$1',
+'uploadvirus' => 'ã\81\93ã\81®ã\83\95ã\82¡ã\82¤ã\83«ã\81¯ã\82¦ã\82¤ã\83«ã\82¹ã\82\92å\90«ã\82\93ã\81§ã\81\84ã\81¾ã\81\99!
+詳細$1',
 'uploadjava' => 'このファイルは、Javaの.classファイルを含むZIPファイルです。
-セキュリティの制限を回避されるおそれがあるため、Javaファイルのアップロードは許可されていません。',
+セキュリティの制限を回避されるおそれがあるため、Javaファイルのアップロードは許可されていません。',
 'upload-source' => 'アップロード元ファイル',
 'sourcefilename' => 'アップロード元のファイル名:',
 'sourceurl' => 'アップロード元の URL:',
 'destfilename' => '登録するファイル名:',
 'upload-maxfilesize' => 'ファイルの最大サイズ: $1',
-'upload-description' => 'ã\83\95ã\82¡ã\82¤ã\83«ã\81®èª¬æ\98\8e',
+'upload-description' => 'ã\83\95ã\82¡ã\82¤ã\83«ã\81®è§£èª¬',
 'upload-options' => 'アップロードのオプション',
 'watchthisupload' => 'このファイルをウォッチ',
 'filewasdeleted' => 'この名前のファイルは一度アップロードされ、その後削除されています。
@@ -1937,16 +1938,16 @@ MGP # ペンタックス
 PICT # その他
  #</pre> <!-- この行はそのままにしておいてください -->',
 'upload-success-subj' => 'アップロード成功',
-'upload-success-msg' => '[$2] からアップロードしました。こちらで利用できます[[:{{ns:file}}:$1]]',
-'upload-failure-subj' => 'アップロードで発生した問題',
-'upload-failure-msg' => '[$2]からのアップロード中に問題が発生しました:
+'upload-success-msg' => '[$2] からアップロードしました。こちらで利用できます[[:{{ns:file}}:$1]]',
+'upload-failure-subj' => 'アップロード失敗',
+'upload-failure-msg' => '[$2] からアップロードする際に問題が発生しました:
 
 $1',
 'upload-warning-subj' => 'アップロードの警告',
 'upload-warning-msg' => '[$2] からアップロードしようとしたデータに問題があります。 [[Special:Upload/stash/$1|アップロードのフォーム]]に戻って問題を修正してください。',
 
 'upload-proto-error' => '無効なプロトコル',
-'upload-proto-error-text' => 'é\81 é\9a\94ã\82¢ã\83\83ã\83\97ã\83­ã\83¼ã\83\89æ©\9fè\83½ã\81§ã\81¯ã\80\81URLã\81\8c<code>http://</code>ã\81\8b<code>ftp://</code>で始まっている必要があります。',
+'upload-proto-error-text' => 'é\81 é\9a\94ã\82¢ã\83\83ã\83\97ã\83­ã\83¼ã\83\89æ©\9fè\83½ã\81§ã\81¯ã\80\81URLã\81\8c<code>http://</code>ã\81¾ã\81\9fã\81¯<code>ftp://</code>で始まっている必要があります。',
 'upload-file-error' => '内部エラー',
 'upload-file-error-text' => '内部エラーのため、サーバー上の一時ファイル作成に失敗しました。
 [[Special:ListUsers/sysop|管理者]]に連絡してください。',
@@ -1997,7 +1998,7 @@ $1',
 'lockmanager-fail-acquirelock' => '「$1」用のロックを取得できませんでした。',
 'lockmanager-fail-openlock' => '「$1」用のロックファイルを開くことができませんでした。',
 'lockmanager-fail-releaselock' => '「$1」用のロックを解放できませんでした。',
-'lockmanager-fail-db-bucket' => 'ã\83\90ã\82±ã\83\83ã\83\88 $1 で十分な数のロックデータベースに接触できませんでした。',
+'lockmanager-fail-db-bucket' => 'ã\83\90ã\82±ã\83\84 $1 で十分な数のロックデータベースに接触できませんでした。',
 'lockmanager-fail-db-release' => 'データベース $1 上のロックを解放できませんでした。',
 'lockmanager-fail-svr-acquire' => 'サーバー $1 上でロックを取得できませんでした。',
 'lockmanager-fail-svr-release' => 'サーバー $1 上のロックを解放できませんでした。',
@@ -2012,7 +2013,7 @@ $1',
 
 # Special:UploadStash
 'uploadstash' => '未公開アップロード',
-'uploadstash-summary' => 'このページでは、アップロードされた、もしくはアップロード中の、ウィキ上でまだ公開されていないファイルを表示します。これらのファイルは、アップロードした利用者以外閲覧できません。',
+'uploadstash-summary' => 'このページでは、アップロード済みまたはアップロード中の、ウィキ上でまだ公開されていないファイルを表示します。これらのファイルは、アップロードした利用者以外閲覧できません。',
 'uploadstash-clear' => '未公開ファイルを消去',
 'uploadstash-nofiles' => '未公開ファイルはありません。',
 'uploadstash-badtoken' => '操作を実行できませんでした。編集するための認証の期限切れが原因である可能性があります。再度試してください。',
@@ -2037,15 +2038,15 @@ https://www.mediawiki.org/wiki/Manual:Image_Authorization をご覧ください
 このウィキは公開ウィキとして構成されています。
 最適なセキュリティのため、img_auth.phpを無効にしています。',
 'img-auth-noread' => '利用者は「$1」の読み取り権限を持っていません。',
-'img-auth-bad-query-string' => 'URLの中に無効なクエリ文字列があります。',
+'img-auth-bad-query-string' => 'URLの中に無効なクエリ文字列があります。',
 
 # HTTP errors
 'http-invalid-url' => '無効なURL:$1',
 'http-invalid-scheme' => 'スキーム「$1」の URL には未対応です。',
 'http-request-error' => '不明なエラーによりHTTPリクエストに失敗しました。',
-'http-read-error' => 'HTTP読み込みエラー。',
+'http-read-error' => 'HTTP読ã\81¿è¾¼ã\81¿ã\82¨ã\83©ã\83¼ã\81§ã\81\99ã\80\82',
 'http-timed-out' => 'HTTP要求がタイムアウトしました。',
-'http-curl-error' => '取得に失敗したURL:$1',
+'http-curl-error' => 'URLからの取得に失敗しました: $1',
 'http-host-unreachable' => 'URLに到達できません。',
 'http-bad-status' => 'HTTP要求中に問題が発生しました:$1$2',
 
@@ -2062,13 +2063,13 @@ URLが正しいものであり、ウェブサイトが稼働していること
 'license-header' => 'ライセンス',
 'nolicense' => '選択なし',
 'license-nopreview' => '(プレビューはありません)',
-'upload_source_url' => '(有効かつ一般に公開されているURL)',
-'upload_source_file' => '(あなたのコンピューター上のファイル)',
+'upload_source_url' => '(有効かつ一般に公開されているURL)',
+'upload_source_file' => '(あなたのコンピューター上のファイル)',
 
 # Special:ListFiles
-'listfiles-summary' => 'ã\81\93ã\81®ç\89¹å\88¥ã\83\9aã\83¼ã\82¸ã\81§ã\81¯ã\80\81ã\82¢ã\83\83ã\83\97ã\83­ã\83¼ã\83\89ã\81\95ã\82\8cã\81\9fã\81\99ã\81¹ã\81¦ã\81®ã\83\95ã\82¡ã\82¤ã\83«ã\82\92表示します。
\88©ç\94¨è\80\85ã\81«ã\82\88ã\82\8aã\83\95ã\82£ã\83«ã\82¿å\87¦ç\90\86ã\81\95ã\82\8cã\81\9få ´å\90\88ã\80\81ã\81\9dã\81®å\88©ç\94¨è\80\85ã\81\8cã\82¢ã\83\83ã\83\97ã\83­ã\83¼ã\83\89ã\81\97ã\81\9fæ\9c\80æ\96°ã\83\90ã\83¼ã\82¸ã\83§ã\83³のファイルのみが表示されます。',
-'listfiles_search_for' => 'メディア名で検索:',
+'listfiles-summary' => 'ã\81\93ã\81®ç\89¹å\88¥ã\83\9aã\83¼ã\82¸ã\81§ã\81¯ã\80\81ã\82¢ã\83\83ã\83\97ã\83­ã\83¼ã\83\89ã\81\95ã\82\8cã\81\9fã\83\95ã\82¡ã\82¤ã\83«ã\82\92ã\81\99ã\81¹ã\81¦表示します。
\88©ç\94¨è\80\85ã\81§çµ\9eã\82\8aè¾¼ã\82\93ã\81 å ´å\90\88ã\81¯ã\80\81ã\81\9dã\81®å\88©ç\94¨è\80\85ã\81\8cã\82¢ã\83\83ã\83\97ã\83­ã\83¼ã\83\89ã\81\97ã\81\9fæ\9c\80æ\96°ç\89\88のファイルのみが表示されます。',
+'listfiles_search_for' => '検索するメディア名:',
 'imgfile' => 'ファイル',
 'listfiles' => 'ファイル一覧',
 'listfiles_thumb' => 'サムネイル',
@@ -2104,16 +2105,16 @@ URLが正しいものであり、ウェブサイトが稼働していること
 'nolinkstoimage' => 'このファイルへリンクしているページはありません。',
 'morelinkstoimage' => 'このファイルへの[[Special:WhatLinksHere/$1|リンク元を更に]]を表示する。',
 'linkstoimage-redirect' => '$1 (リダイレクト) $2',
-'duplicatesoffile' => '以下の $1 {{PLURAL:$1|ファイル}}が、このファイルと重複しています([[Special:FileDuplicateSearch/$2|詳細]]):',
+'duplicatesoffile' => '以下の $1 {{PLURAL:$1|ファイル}}が、このファイルと重複しています ([[Special:FileDuplicateSearch/$2|詳細]]):',
 'sharedupload' => 'このファイルは$1のものであり、他のプロジェクトで使用されている可能性があります。',
 'sharedupload-desc-there' => 'このファイルは$1のものであり、他のプロジェクトで使用されている可能性があります。
 詳細は[$2 ファイル解説ページ]を参照してください。',
 'sharedupload-desc-here' => 'このファイルは$1から来ており、他のプロジェクトで使用されている可能性があります。
 $1での[$2 ファイル解説ページ]にある説明を以下に示します。',
 'sharedupload-desc-edit' => 'このファイルは$1から来ており、他のプロジェクトで使用されている可能性があります。
-$1での[$2 ファイル解説ページ]にある説明を編集したほうがいいかもしれません。',
+$1での[$2 ファイル解説ページ]にある説明を編集したがいいかもしれません。',
 'sharedupload-desc-create' => 'このファイルは$1から来ており、他のプロジェクトで使用されている可能性があります。
-$1での[$2 ファイル解説ページ]にある説明を編集したほうがいいかもしれません。',
+$1での[$2 ファイル解説ページ]にある説明を編集したがいいかもしれません。',
 'filepage-nofile' => 'この名前のファイルは存在しません。',
 'filepage-nofile-link' => 'この名前のファイルは存在しませんが、[$1 アップロード]できます。',
 'uploadnewversion-linktext' => 'このファイルの新しい版をアップロードする',
@@ -2127,7 +2128,7 @@ $1での[$2 ファイル解説ページ]にある説明を編集したほうが
 'filerevert' => '$1を差し戻す',
 'filerevert-legend' => 'ファイルを差し戻す',
 'filerevert-intro' => "ファイル'''[[Media:$1|$1]]'''を[$4 $2$3版]に差し戻そうとしています。",
-'filerevert-comment' => '理由',
+'filerevert-comment' => '理由:',
 'filerevert-defaultcomment' => '$1$2の版へ差し戻し',
 'filerevert-submit' => '差し戻す',
 'filerevert-success' => "'''[[Media:$1|$1]]'''は[$4 $2$3の版]に差し戻されました。",
@@ -2138,13 +2139,13 @@ $1での[$2 ファイル解説ページ]にある説明を編集したほうが
 'filedelete-legend' => 'ファイルの削除',
 'filedelete-intro' => "'''[[Media:$1|$1]]'''をすべての履歴とともに削除しようとしています。",
 'filedelete-intro-old' => "'''[[Media:$1|$1]]'''の[$4 $2$3の版]を削除しようとしています。",
-'filedelete-comment' => '理由',
+'filedelete-comment' => '理由:',
 'filedelete-submit' => '削除',
 'filedelete-success' => "'''$1''' は削除されました。",
 'filedelete-success-old' => "'''[[Media:$1|$1]]'''の$2$3の版は削除されています。",
 'filedelete-nofile' => "'''$1'''は存在しません。",
 'filedelete-nofile-old' => "指定された属性を持つ'''$1'''の古い版は存在しません。",
-'filedelete-otherreason' => '他の、または追加の理由',
+'filedelete-otherreason' => '他の、または追加の理由:',
 'filedelete-reason-otherlist' => 'その他の理由',
 'filedelete-reason-dropdown' => '*よくある削除理由
 ** 著作権侵害
@@ -2263,7 +2264,7 @@ contenttype/subtypeの形式で入力してください (例: <code>image/jpeg</
 'mostinterwikis' => 'ウィキ間リンクの多いページ',
 'mostrevisions' => '版の多いページ',
 'prefixindex' => '先頭が同じ全ページ',
-'prefixindex-namespace' => '先頭が同じ全ページ($1名前空間)',
+'prefixindex-namespace' => '先頭が同じ全ページ ($1名前空間)',
 'shortpages' => '短いページ',
 'longpages' => '長いページ',
 'deadendpages' => '行き止まりページ',
@@ -2282,7 +2283,7 @@ contenttype/subtypeの形式で入力してください (例: <code>image/jpeg</
 'usereditcount' => '$1 {{PLURAL:$1|回編集}}',
 'usercreated' => '$1 $2 に{{GENDER:$3|作成}}',
 'newpages' => '新しいページ',
-'newpages-username' => '利用者名',
+'newpages-username' => '利用者名:',
 'ancientpages' => '最古のページ',
 'move' => '移動',
 'movethispage' => 'このページを移動',
@@ -2312,7 +2313,7 @@ contenttype/subtypeの形式で入力してください (例: <code>image/jpeg</
 'log' => '記録',
 'all-logs-page' => 'すべての公開記録',
 'alllogstext' => '{{SITENAME}}の取得できる記録をまとめて表示しています。
-記録の種類、実行した利用者(大文字小文字は区別)、影響を受けたページ(大文字小文字は区別)による絞り込みができます。',
+記録の種類、実行した利用者 (大文字小文字は区別)、影響を受けたページ (大文字小文字は区別) による絞り込みができます。',
 'logempty' => '該当する記録はありません。',
 'log-title-wildcard' => 'この文字列で始まるページ名を検索',
 'showhideselectedlogentries' => '選択した記録項目を表示/非表示',
@@ -2331,7 +2332,7 @@ contenttype/subtypeの形式で入力してください (例: <code>image/jpeg</
 'allpagesnext' => '次へ',
 'allpagessubmit' => '表示',
 'allpagesprefix' => '次の文字列から始まるページを表示:',
-'allpagesbadtitle' => 'æ\8c\87å®\9aã\81\97ã\81\9fã\83\9aã\83¼ã\82¸å\90\8dã\81¯ç\84¡å\8a¹ã\81\8bã\80\81è¨\80èª\9eé\96\93ã\81¾ã\81\9fã\81¯ã\82¦ã\82£ã\82­é\96\93接頭辞を含んでいます。
+'allpagesbadtitle' => 'æ\8c\87å®\9aã\81\97ã\81\9fã\83\9aã\83¼ã\82¸å\90\8dã\81¯ç\84¡å\8a¹ã\81\8bã\80\81è¨\80èª\9eé\96\93ã\81¾ã\81\9fã\81¯ã\82¤ã\83³ã\82¿ã\83¼ã\82¦ã\82£ã\82­接頭辞を含んでいます。
 ページ名に使用できない文字が1つ以上含まれている可能性があります。',
 'allpages-bad-ns' => '{{SITENAME}}に「$1」という名前空間はありません。',
 'allpages-hide-redirects' => 'リダイレクトを隠す',
@@ -2362,7 +2363,7 @@ contenttype/subtypeの形式で入力してください (例: <code>image/jpeg</
 'linksearch-ok' => '検索',
 'linksearch-text' => '「*.wikipedia.org」のようにワイルドカードを使用できます。
 少なくとも「*.org」のようなトップレベルドメインが必要です。<br />
-対応プロトコル: <code>$1</code> (プロトコルを省略した場合の既定値は http:// )。',
+対応{{PLURAL:$2|プロトコル}}: <code>$1</code> (プロトコルを省略した場合の既定値は http:// )。',
 'linksearch-line' => '$1 が $2 からリンクされています',
 'linksearch-error' => 'ワイルドカードはホスト名の先頭でのみ使用できます。',
 
@@ -2375,16 +2376,12 @@ contenttype/subtypeの形式で入力してください (例: <code>image/jpeg</
 # Special:ActiveUsers
 'activeusers' => '活動中の利用者一覧',
 'activeusers-intro' => 'これは過去 $1 {{PLURAL:$1|日|日間}}に何らかの活動をした利用者の一覧です。',
-'activeusers-count' => '過去 {{PLURAL:$3|1 日|$3 日間}}に $1 {{PLURAL:$1|回の編集}}',
+'activeusers-count' => '過去 {{PLURAL:$3|1 日|$3 日間}}に $1 {{PLURAL:$1|回の操作}}',
 'activeusers-from' => '最初に表示する利用者:',
 'activeusers-hidebots' => 'ボットを隠す',
 'activeusers-hidesysops' => '管理者を隠す',
 'activeusers-noresult' => '利用者が見つかりませんでした。',
 
-# Special:Log/newusers
-'newuserlogpage' => 'アカウント作成記録',
-'newuserlogpagetext' => '以下はアカウント作成の記録です。',
-
 # Special:ListGroupRights
 'listgrouprights' => '利用者グループの権限',
 'listgrouprights-summary' => '以下は、このウィキに登録されている利用者グループと、それぞれに割り当てられている権限の一覧です。
@@ -2394,7 +2391,7 @@ contenttype/subtypeの形式で入力してください (例: <code>image/jpeg</
 'listgrouprights-group' => 'グループ',
 'listgrouprights-rights' => '権限',
 'listgrouprights-helppage' => 'Help:グループ権限',
-'listgrouprights-members' => '(該当者一覧)',
+'listgrouprights-members' => '(該当者一覧)',
 'listgrouprights-right-display' => '<span class="listgrouprights-granted">$1 (<code>$2</code>)</span>',
 'listgrouprights-right-revoked' => '<span class="listgrouprights-revoked">$1 (<code>$2</code>)</span>',
 'listgrouprights-addgroup' => '{{PLURAL:$2|グループ}}を追加:$1',
@@ -2417,7 +2414,7 @@ contenttype/subtypeの形式で入力してください (例: <code>image/jpeg</
 「差出人」として、[[Special:Preferences|利用者の個人設定]]で入力したメールアドレスが設定されます。これにより、受信者があなたに直接返信できるようになります。',
 'usermailererror' => 'メールが以下のエラーを返しました:',
 'defemailsubject' => '{{SITENAME}} 利用者「$1」からのメール',
-'usermaildisabled' => 'å\88©ç\94¨è\80\85ã\83¡ã\83¼ã\83«æ©\9fè\83½ã\81¯ç\84¡å\8a¹ã\81«ã\81ªã\81£ã\81¦ã\81\84ã\81¾す',
+'usermaildisabled' => 'å\88©ç\94¨è\80\85ã\83¡ã\83¼ã\83«æ©\9fè\83½ã\81¯ç\84¡å\8a¹ã\81§す',
 'usermaildisabledtext' => 'このウィキでは他の利用者にメールを送信できません',
 'noemailtitle' => 'メールアドレスがありません',
 'noemailtext' => 'この利用者は有効なメールアドレスを登録していません。',
@@ -2452,8 +2449,8 @@ contenttype/subtypeの形式で入力してください (例: <code>image/jpeg</
 'watchnologin' => 'ログインしていません',
 'watchnologintext' => 'ウォッチリストを変更するためには、[[Special:UserLogin|ログイン]]している必要があります。',
 'addwatch' => 'ウォッチリストに追加',
-'addedwatchtext' => "ページ「[[:$1]]」を[[Special:Watchlist|ウォッチリスト]]に追加しました。
-このページまたはそのトークページが変更されると、ウォッチリストに表示されます。また、[[Special:RecentChanges|最近の更新の一覧]]では'''太字'''で表示されます。",
+'addedwatchtext' => 'ページ「[[:$1]]」を[[Special:Watchlist|ウォッチリスト]]に追加しました。
+このページまたはそのトークページが変更されると、ウォッチリストに表示されます。',
 'removewatch' => 'ウォッチリストから除去',
 'removedwatchtext' => 'ページ「[[:$1]]」を[[Special:Watchlist|ウォッチリスト]]から除去しました。',
 'watch' => 'ウォッチ',
@@ -2463,7 +2460,7 @@ contenttype/subtypeの形式で入力してください (例: <code>image/jpeg</
 'notanarticle' => '記事ではありません',
 'notvisiblerev' => '別の利用者による最終版は削除されました',
 'watchnochange' => 'ウォッチリストに登録しているページで、指定期間内に編集されたものはありません。',
-'watchlist-details' => 'ウォッチリストには {{PLURAL:$1|$1 ページ}}が登録されています(トークページを除く)。',
+'watchlist-details' => 'ウォッチリストには {{PLURAL:$1|$1 ページ}}が登録されています (トークページを除く)。',
 'wlheader-enotif' => '* メール通知が有効になっています',
 'wlheader-showupdated' => "* 最終訪問以降に変更されたページは、'''太字'''で表示されます",
 'watchmethod-recent' => '最近の更新内のウォッチされているページを確認中',
@@ -2471,7 +2468,7 @@ contenttype/subtypeの形式で入力してください (例: <code>image/jpeg</
 'watchlistcontains' => 'ウォッチリストには {{PLURAL:$1|$1 ページ}}が登録されています。',
 'iteminvalidname' => '項目「$1」には問題があります。名前が正しくありません...',
 'wlnote' => "$3 $4 までの{{PLURAL:$2|'''$2'''時間}}になされた{{PLURAL:$1|'''$1'''件の変更}}は以下の通りです。",
-'wlshowlast' => '次の期間で表示$1時間、$2日間、$3',
+'wlshowlast' => '次の期間で表示$1時間、$2日間、$3',
 'watchlist-options' => 'ウォッチリストのオプション',
 
 # Displayed when you click the "watch" button and it is in the process of watching
@@ -2482,24 +2479,22 @@ contenttype/subtypeの形式で入力してください (例: <code>image/jpeg</
 'enotif_mailer' => '{{SITENAME}} 通知メール',
 'enotif_reset' => 'すべてのページを訪問済みにする',
 'enotif_impersonal_salutation' => '{{SITENAME}}の利用者',
-'enotif_subject_deleted' => '{{SITENAME}} ページ $1 を {{gender:$2|$2}} が削除しました',
-'enotif_subject_created' => '{{SITENAME}} ページ $1 を {{gender:$2|$2}} が作成しました',
-'enotif_subject_moved' => '{{SITENAME}} ページ $1 を {{gender:$2|$2}} が移動しました',
-'enotif_subject_restored' => '{{SITENAME}} ページ $1 を {{gender:$2|$2}} が復元しました',
-'enotif_subject_changed' => '{{SITENAME}} ページ $1 を {{gender:$2|$2}} が変更しました',
-'enotif_body_intro_deleted' => '{{SITENAME}}のページ「$1」が$PAGEEDITDATEに、{{gender:$2 |$2}}によって削除されました。現在の版は$3で閲覧できます。',
-'enotif_body_intro_created' => '{{SITENAME}}のページ「$1」が$PAGEEDITDATEに、{{gender:$2 |$2}}によって作成されました。現在の版は$3で閲覧できます。',
-'enotif_body_intro_moved' => '{{SITENAME}}のページ「$1」が$PAGEEDITDATEに、{{gender:$2 |$2}}によって移動されました。現在の版は$3で閲覧できます。',
-'enotif_body_intro_restored' => '{{SITENAME}}のページ「$1」が$PAGEEDITDATEに、{{gender:$2 |$2}}によって復元されました。現在の版は$3で閲覧できます。',
-'enotif_body_intro_changed' => '{{SITENAME}}のページ「$1」が$PAGEEDITDATEに、{{gender:$2 |$2}}によって変更されました。現在の版は$3で閲覧できます。',
+'enotif_subject_deleted' => '{{SITENAME}} ページ $1 を $2 が{{GENDER:$2|削除しました}}',
+'enotif_subject_created' => '{{SITENAME}} ページ $1 を $2 が{{GENDER:$2|作成しました}}',
+'enotif_subject_moved' => '{{SITENAME}} ページ $1 を $2 が{{GENDER:$2|移動しました}}',
+'enotif_subject_restored' => '{{SITENAME}} ページ $1 を $2 が{{GENDER:$2|復元しました}}',
+'enotif_subject_changed' => '{{SITENAME}} ページ $1 を $2 が{{GENDER:$2|変更しました}}',
+'enotif_body_intro_deleted' => '{{SITENAME}}のページ「$1」が$PAGEEDITDATEに、$2 によって{{GENDER:$2|削除}}されました。$3 をご覧ください。',
+'enotif_body_intro_created' => '{{SITENAME}}のページ「$1」が$PAGEEDITDATEに、$2 によって{{GENDER:$2|作成}}されました。現在の版は $3 で閲覧できます。',
+'enotif_body_intro_moved' => '{{SITENAME}}のページ「$1」が$PAGEEDITDATEに、$2 によって{{GENDER:$2|移動}}されました。現在の版は $3 で閲覧できます。',
+'enotif_body_intro_restored' => '{{SITENAME}}のページ「$1」が$PAGEEDITDATEに、$2 によって{{GENDER:$2|復元}}されました。現在の版は $3 で閲覧できます。',
+'enotif_body_intro_changed' => '{{SITENAME}}のページ「$1」が$PAGEEDITDATEに、$2 によって{{GENDER:$2|変更}}されました。現在の版は $3 で閲覧できます。',
 'enotif_lastvisited' => '最終訪問以降のすべての変更は $1 をご覧ください。',
 'enotif_lastdiff' => 'この変更内容を表示するには $1 をご覧ください。',
 'enotif_anon_editor' => '匿名利用者「$1」',
 'enotif_body' => '$WATCHINGUSERNAMEさん
 
-{{SITENAME}}のページ「$PAGETITLE」が$PAGEEDITDATEに、$PAGEEDITORによって$CHANGEDORCREATEDされました。現在の版を見るには $PAGETITLE_URL をご覧ください。
-
-$NEWPAGE
+$PAGEINTRO $NEWPAGE
 
 編集内容の要約:$PAGESUMMARY($PAGEMINOREDIT)
 
@@ -2507,8 +2502,7 @@ $NEWPAGE
 メール:$PAGEEDITOR_EMAIL
 ウィキ:$PAGEEDITOR_WIKI
 
-このページを訪れない限り、これ以上の変更に対する通知は送信されません。
-ウォッチリスト内のすべてのページについて、通知を再設定することもできます。
+このページを訪れない限り、これ以上の活動に対する通知は送信されません。ウォッチリスト内のすべてのページについて、通知を再設定することもできます。
 
                          {{SITENAME}}通知システム
 
@@ -2524,17 +2518,19 @@ $UNWATCHURL
 
 ご意見、お問い合わせ:
 {{canonicalurl:{{MediaWiki:Helppage}}}}',
+'created' => '作成',
+'changed' => '変更',
 
 # Delete
 'deletepage' => 'ページを削除',
 'confirm' => '確認',
-'excontent' => '内容「$1」',
-'excontentauthor' => '内容:「$1」(投稿者は「[[Special:Contributions/$2|$2]]」のみ)',
-'exbeforeblank' => '白紙化前の内容「$1」',
+'excontent' => '内容:「$1」',
+'excontentauthor' => '内容:「$1」(投稿者は「[[Special:Contributions/$2|$2]]」のみ)',
+'exbeforeblank' => '白紙化前の内容:「$1」',
 'exblank' => '白紙ページ',
 'delete-confirm' => '「$1」を削除',
 'delete-legend' => '削除',
-'historywarning' => "'''警告:'''削除しようとしているページには、約$1版の履歴があります:",
+'historywarning' => "'''警告:''' 削除しようとしているページには、約$1版の履歴があります:",
 'confirmdeletetext' => 'ページをすべての履歴とともに削除しようとしています。
 本当にこの操作を行いたいか、操作の結果を理解しているか、およびこの操作が[[{{MediaWiki:Policy-url}}|方針]]に従っているかどうか、確認をしてください。',
 'actioncomplete' => '操作を完了しました',
@@ -2545,8 +2541,8 @@ $UNWATCHURL
 'dellogpagetext' => '以下は最近の削除と復元の一覧です。',
 'deletionlog' => '削除記録',
 'reverted' => '以前の版への差し戻し',
-'deletecomment' => '理由',
-'deleteotherreason' => '他の、または追加の理由',
+'deletecomment' => '理由:',
+'deleteotherreason' => '他の、または追加の理由:',
 'deletereasonotherlist' => 'その他の理由',
 'deletereason-dropdown' => '*よくある削除理由
 ** 投稿者依頼
@@ -2572,7 +2568,7 @@ $UNWATCHURL
 他の利用者が既に編集または巻き戻しを行ったためです。
 
 このページの最後の編集は[[User:$3|$3]]([[User talk:$3|トーク]]{{int:pipe-separator}}[[Special:Contributions/$3|{{int:contribslink}}]])によるものです。',
-'editcomment' => "編集内容の要約「''$1''」",
+'editcomment' => "編集内容の要約:「''$1''」",
 'revertpage' => '[[Special:Contributions/$2|$2]]([[User talk:$2|トーク]])による編集を[[User:$1|$1]]による直前の版へ差し戻しました',
 'revertpage-nouser' => '(利用者名削除)による編集を[[User:$1|$1]]による直前の版へ差し戻しました',
 'rollback-success' => '$1による編集を差し戻しました。
@@ -2597,35 +2593,37 @@ $2による直前の版へ変更されました。',
 'prot_1movedto2' => '[[$1]] を [[$2]] へ移動',
 'protect-badnamespace-title' => '保護不可能な名前空間',
 'protect-badnamespace-text' => 'この名前空間のページは保護できません。',
+'protect-norestrictiontypes-title' => '保護できないページ',
 'protect-legend' => '保護の確認',
-'protectcomment' => '理由',
-'protectexpiry' => '有効期限',
+'protectcomment' => '理由:',
+'protectexpiry' => '有効期限:',
 'protect_expiry_invalid' => '有効期間が正しくありません。',
 'protect_expiry_old' => '有効期限が過去の時刻です。',
 'protect-unchain-permissions' => '追加保護オプションをロック解除',
 'protect-text' => "ページ「'''$1'''」に対する保護レベルの表示と操作ができます。",
 'protect-locked-blocked' => "ブロックされている間は、保護レベルを変更できません。
-ページ「'''$1'''」の現在の状態は以下の通りです",
+ページ「'''$1'''」の現在の状態は以下の通りです:",
 'protect-locked-dblock' => "データベースのロックが有効なため、保護レベルを変更できません。
-ページ「'''$1'''」の現在の状態は以下の通りです",
+ページ「'''$1'''」の現在の状態は以下の通りです:",
 'protect-locked-access' => "アカウントに、ページの保護レベルを変更する権限がありません。
-ページ「'''$1'''」の現在の状態は以下の通りです",
+ページ「'''$1'''」の現在の状態は以下の通りです:",
 'protect-cascadeon' => 'このページは現在、カスケード保護が有効になっている以下の{{PLURAL:$1|ページ|ページ群}}から読み込まれているため、保護されています。
 このページの保護レベルを変更できますが、カスケード保護には影響しません。',
 'protect-default' => 'すべての利用者を許可',
-'protect-fallback' => '「$1」権限が必要',
-'protect-level-autoconfirmed' => '新規利用者と匿名利用者を禁止',
-'protect-level-sysop' => '管理者のみ',
+'protect-fallback' => '「$1」権限を持つ利用者のみに許可',
+'protect-level-autoconfirmed' => '自動承認された利用者のみに許可',
+'protect-level-sysop' => '管理者のみに許可',
+'protect-summary-desc' => '[$1=$2] ($3)',
 'protect-summary-cascade' => 'カスケード',
 'protect-expiring' => '$1(UTC)で自動的に解除',
 'protect-expiring-local' => '期限 $1',
 'protect-expiry-indefinite' => '無期限',
-'protect-cascade' => 'このページに読み込まれているページを保護する(カスケード保護)',
+'protect-cascade' => 'このページに読み込まれているページを保護する (カスケード保護)',
 'protect-cantedit' => 'このページの編集権限がないため、保護レベルを変更できません。',
-'protect-othertime' => 'その他の期間',
+'protect-othertime' => 'その他の期間:',
 'protect-othertime-op' => 'その他の期間',
 'protect-existing-expiry' => '現在の保護期限: $2 $3',
-'protect-otherreason' => '他の、または追加の理由',
+'protect-otherreason' => '他の、または追加の理由:',
 'protect-otherreason-op' => 'その他の理由',
 'protect-dropdown' => '*よくある保護理由
 ** 度重なる荒らし
@@ -2669,7 +2667,7 @@ $2による直前の版へ変更されました。',
 'undeletehistorynoadmin' => 'このページは削除されています。
 削除の理由は、削除前にこのページを編集していた利用者の詳細情報と共に、以下に表示されています。
 管理者以外の利用者には、削除された各版の本文への制限がかけられています。',
-'undelete-revision' => '削除されたページ「$1」の $4 $5 時点での $3 による版',
+'undelete-revision' => '削除されたページ「$1」の $4 $5 時点での $3 による版:',
 'undeleterevision-missing' => '無効または存在しない版です。
 間違ったリンクをたどったか、この版は既に復元されたか、もしくは保存版から除去された可能性があります。',
 'undelete-nodiff' => 'これより前の版はありません。',
@@ -2689,7 +2687,7 @@ $1',
 最近の削除と復元の記録については[[Special:Log/delete|削除記録]]を参照してください。",
 'undelete-header' => '最近削除されたページは[[Special:Log/delete|削除記録]]で確認できます。',
 'undelete-search-title' => '削除されたページの検索',
-'undelete-search-box' => 'å\89\8aé\99¤ã\81\95ã\82\8cã\81\9fã\83\9aã\83¼ã\82¸ã\82\92検索',
+'undelete-search-box' => 'å\89\8aé\99¤ã\81\95ã\82\8cã\81\9fã\83\9aã\83¼ã\82¸ã\81®検索',
 'undelete-search-prefix' => '表示を開始するページ名:',
 'undelete-search-submit' => '検索',
 'undelete-no-results' => '削除の保存版に、一致するページが見つかりませんでした。',
@@ -2703,7 +2701,7 @@ $1',
 'undelete-error-long' => 'ファイルの復元中にエラーが発生しました:
 
 $1',
-'undelete-show-file-confirm' => '$2$3の版からファイル「<nowiki>$1</nowiki>」の削除版を本当に表示しますか?',
+'undelete-show-file-confirm' => 'ファイル「<nowiki>$1</nowiki>」の削除された$2$3の版を本当に閲覧しますか?',
 'undelete-show-file-submit' => 'はい',
 
 # Namespace form on various pages
@@ -2734,9 +2732,9 @@ $1',
 'sp-contributions-talk' => 'トーク',
 'sp-contributions-userrights' => '利用者権限の管理',
 'sp-contributions-blocked-notice' => 'この利用者は現在ブロックされています。
-参考のために最新のブロック記録項目を以下に表示します',
+参考のために最新のブロック記録項目を以下に表示します:',
 'sp-contributions-blocked-notice-anon' => 'このIPアドレスは現在ブロックされています。
-参考のために最近のブロック記録項目を以下に表示します',
+参考のために最近のブロック記録項目を以下に表示します:',
 'sp-contributions-search' => '投稿の検索',
 'sp-contributions-username' => 'IPアドレスまたは利用者名:',
 'sp-contributions-toponly' => '最新版の編集のみを表示',
@@ -2745,10 +2743,10 @@ $1',
 # What links here
 'whatlinkshere' => 'リンク元',
 'whatlinkshere-title' => '「$1」へリンクしているページ',
-'whatlinkshere-page' => 'ページ',
-'linkshere' => "以下のページが、'''[[:$1]]'''にリンクしています",
+'whatlinkshere-page' => 'ページ:',
+'linkshere' => "以下のページが、'''[[:$1]]'''にリンクしています:",
 'nolinkshere' => "'''[[:$1]]'''にリンクしているページはありません。",
-'nolinkshere-ns' => "選択された名前空間中で、'''[[:$1]]'''にリンクしているページはありません。",
+'nolinkshere-ns' => "指定した名前空間内に、'''[[:$1]]'''にリンクしているページはありません。",
 'isredirect' => '転送ページ',
 'istemplate' => '参照読み込み',
 'isimage' => 'ファイルへのリンク',
@@ -2772,8 +2770,8 @@ $1',
 このような措置は、荒らしからの防御の目的のみに行われるべきで、また[[{{MediaWiki:Policy-url}}|方針]]に沿ったものであるべきです。
 以下にブロックの理由を具体的に書いてください (例えば、荒らされたページへの言及など)。',
 'ipadressorusername' => 'IPアドレスまたは利用者名:',
-'ipbexpiry' => '有効期限',
-'ipbreason' => '理由',
+'ipbexpiry' => '有効期限:',
+'ipbreason' => '理由:',
 'ipbreasonotherlist' => 'その他の理由',
 'ipbreason-dropdown' => '*よくあるブロック理由
 ** 虚偽情報の挿入
@@ -2788,13 +2786,13 @@ $1',
 'ipbemailban' => 'メール送信を禁止',
 'ipbenableautoblock' => 'この利用者が最後に使用したIPアドレスと、ブロック後に編集を試みた際のIPアドレスを自動的にブロック',
 'ipbsubmit' => 'この利用者をブロック',
-'ipbother' => 'その他の期間',
+'ipbother' => 'その他の期間:',
 'ipboptions' => '2時間:2 hours,1日:1 day,3日:3 days,1週間:1 week,2週間:2 weeks,1か月:1 month,3か月:3 months,6か月:6 months,1年:1 year,無期限:infinite',
 'ipbotheroption' => 'その他',
-'ipbotherreason' => '他の、または追加の理由',
+'ipbotherreason' => '他の、または追加の理由:',
 'ipbhidename' => '利用者名を編集履歴や各種一覧から秘匿する',
 'ipbwatchuser' => 'この利用者の利用者ページとトークページをウォッチ',
-'ipb-disableusertalk' => 'ã\83\96ã\83­ã\83\83ã\82¯ä¸­ã\81®ã\81\93ã\81®å\88©ç\94¨è\80\85è\87ªèº«ã\81«ã\82\88ã\82\8bã\83\88ã\83¼ã\82¯ã\83\9aã\83¼ã\82¸ç·¨é\9b\86を禁止',
+'ipb-disableusertalk' => 'ã\81\93ã\81®å\88©ç\94¨è\80\85ã\81\8cã\83\96ã\83­ã\83\83ã\82¯ä¸­ã\81«è\87ªèº«ã\81®ã\83\88ã\83¼ã\82¯ã\83\9aã\83¼ã\82¸ã\82\92ç·¨é\9b\86ã\81\99ã\82\8bã\81\93ã\81¨を禁止',
 'ipb-change-block' => 'これらの設定で、利用者を再びブロック',
 'ipb-confirm' => 'ブロックの確認',
 'badipaddress' => '無効なIPアドレス',
@@ -2813,10 +2811,10 @@ $1',
 'ipusubmit' => 'このブロックを解除',
 'unblocked' => '[[User:$1|$1]]のブロックを解除しました',
 'unblocked-range' => '$1のブロックを解除しました',
-'unblocked-id' => 'ã\83\96ã\83­ã\83\83ã\82¯$1ã\81¯é\99¤å\8e»ã\81\95ã\82\8cました',
+'unblocked-id' => 'ã\83\96ã\83­ã\83\83ã\82¯$1ã\82\92é\99¤å\8e»ã\81\97ました',
 'blocklist' => 'ブロックされている利用者',
 'ipblocklist' => 'ブロックされている利用者',
-'ipblocklist-legend' => 'ã\83\96ã\83­ã\83\83ã\82¯ã\81\95ã\82\8cã\81¦ã\81\84ã\82\8bå\88©ç\94¨è\80\85ã\82\92検索',
+'ipblocklist-legend' => 'ã\83\96ã\83­ã\83\83ã\82¯ã\81\95ã\82\8cã\81¦ã\81\84ã\82\8bå\88©ç\94¨è\80\85ã\81®検索',
 'blocklist-userblocks' => 'アカウントのブロックを非表示',
 'blocklist-tempblocks' => '期限付きブロックを非表示',
 'blocklist-addressblocks' => '単一 IP のブロックを非表示',
@@ -2848,11 +2846,11 @@ $1',
 $1 のブロックの理由は「''$2''」です。",
 'blocklogpage' => 'ブロック記録',
 'blocklog-showlog' => 'この利用者は以前にブロックされたことがあります。
-参考のため、ブロックの記録を以下に示します:',
+参考のため、ブロック記録を以下に示します:',
 'blocklog-showsuppresslog' => 'この利用者は以前にブロックされ、隠されたことがあります。
-参考のため、秘匿記録を以下に示します',
-'blocklogentry' => 'が [[$1]] を$2ブロックしました。ブロックの詳細$3',
-'reblock-logentry' => 'が [[$1]] のブロック設定を$2に変更しました。ブロックの詳細$3',
+参考のため、秘匿記録を以下に示します:',
+'blocklogentry' => 'が [[$1]] を$2ブロックしました。ブロックの詳細$3',
+'reblock-logentry' => 'が [[$1]] のブロック設定を$2に変更しました。ブロックの詳細$3',
 'blocklogtext' => 'このページは利用者のブロックと解除の記録です。
 自動的にブロックされたIPアドレスは表示されていません。
 現時点で有効なブロックは[[Special:BlockList|ブロックの一覧]]をご覧ください。',
@@ -2872,11 +2870,11 @@ $1 のブロックの理由は「''$2''」です。",
 'ipb-needreblock' => '$1 は既にブロックされています。設定を変更しますか?',
 'ipb-otherblocks-header' => 'その他の{{PLURAL:$1|ブロック}}',
 'unblock-hideuser' => '利用者名が隠されているため、この利用者のブロックを解除できません。',
-'ipb_cant_unblock' => 'エラー:ブロック ID $1 はありません。ブロックが既に解除されている可能性があります。',
-'ipb_blocked_as_range' => 'エラーIPアドレス$1は直接ブロックされておらず、ブロック解除できませんでした。
+'ipb_cant_unblock' => 'エラー: ブロック ID $1 が見つかりません。ブロックが既に解除されている可能性があります。',
+'ipb_blocked_as_range' => 'エラーIPアドレス$1は直接ブロックされておらず、ブロック解除できませんでした。
 ただし、$2の範囲でブロックされており、こちらのブロックは別途解除できます。',
 'ip_range_invalid' => 'IP範囲が無効です。',
-'ip_range_toolarge' => '/$1よりサイズの広い範囲ブロックは許可されていません。',
+'ip_range_toolarge' => '/$1より広範囲の範囲ブロックは許可されていません。',
 'blockme' => '自分をブロック',
 'proxyblocker' => 'プロキシブロック係',
 'proxyblocker-disabled' => 'この機能は無効になっています。',
@@ -2894,7 +2892,7 @@ $1 のブロックの理由は「''$2''」です。",
 'ipbnounblockself' => '自分自身のブロックは解除できません',
 
 # Developer tools
-'lockdb' => 'ã\83\87ã\83¼ã\82¿ã\83\99ã\83¼ã\82¹ã\82\92ロック',
+'lockdb' => 'ã\83\87ã\83¼ã\82¿ã\83\99ã\83¼ã\82¹ã\81®ロック',
 'unlockdb' => 'データベースのロック解除',
 'lockdbtext' => 'データベースをロックするとすべての利用者はページの編集や、個人設定の変更、ウォッチリストの編集、その他データベースでの変更を要求する作業ができなくなります。
 本当にデータベースをロックしていいかどうか確認し、メンテナンスが終了したらロックを解除してください。',
@@ -2905,8 +2903,8 @@ $1 のブロックの理由は「''$2''」です。",
 'lockbtn' => 'データベースをロック',
 'unlockbtn' => 'データベースのロックを解除',
 'locknoconfirm' => '確認ボックスにチェックが入っていません。',
-'lockdbsuccesssub' => 'データベースのロックに成功しました',
-'unlockdbsuccesssub' => 'データベースのロックを除去しました',
+'lockdbsuccesssub' => 'データベースのロック',
+'unlockdbsuccesssub' => 'データベースのロック除去',
 'lockdbsuccesstext' => 'データベースをロックしました。<br />
 メンテナンスが完了したら、忘れずに[[Special:UnlockDB|ロックを除去]]してください。',
 'unlockdbsuccesstext' => 'データベースのロックを解除しました。',
@@ -2920,11 +2918,11 @@ $1 のブロックの理由は「''$2''」です。",
 'move-page-legend' => 'ページの移動',
 'movepagetext' => "下のフォームを使用すると、ページ名を変更でき、そのページの履歴も変更先に移動できます。
 移動元のページは移動先への転送ページになります。
-移動元のページへのリダイレクトを自動的に修正できます。
-[[Special:DoubleRedirects|二重リダイレクト]]や[[Special:BrokenRedirects|迷子のリダイレクト]]を確認する必要があります。
+移動元のページへの転送ページを自動的に修正できます。
+[[Special:DoubleRedirects|二重転送]]や[[Special:BrokenRedirects|迷子のリダイレクト]]を確認する必要があります。
 リンクを正しく維持するのは移動した人の責任です。
 
-移動先が既に存在する場合は、そのページが空またはリダイレクトで、かつ過去の版を持たない場合を除いて移動'''できません'''。つまり、間違えてページ名を変更した場合には元に戻せます。また移動によって既存のページを上書きしてしまうことはありません。
+移動先が既に存在する場合は、そのページが転送ページであり、かつ過去の版を持たない場合を除いて移動'''できません'''。つまり、間違えてページ名を変更した場合には元に戻せます。また移動によって既存のページを上書きしてしまうことはありません。
 
 '''注意!'''
 よく閲覧されるページや、他の多くのページからリンクされているページを移動すると予期しない結果が起こるかもしれません。ページの移動に伴う影響をよく考えてから踏み切るようにしてください。",
@@ -2933,26 +2931,26 @@ $1 のブロックの理由は「''$2''」です。",
 自動的な修正を選択しない場合は、[[Special:DoubleRedirects|二重転送]]や[[Special:BrokenRedirects|迷子のリダイレクト]]を確認する必要があります。
 つながるべき場所にリンクがつながるよう維持するのは移動した人の責任です。
 
-移動先が既に存在する場合は、そのページが空または転送ページで、かつ過去の版を持たない場合を除いて移動'''できません'''。
+移動先が既に存在する場合は、そのページが転送ページであり、かつ過去の版を持たない場合を除いて移動'''できません'''。
 つまり、間違えてページ名を変更した場合には元に戻せます。また移動によって既存のページを上書きしてしまうことはありません。
 
 '''警告!'''
 多く閲覧されるページや多くリンクされているページを移動すると、予期しない大きな変化が起こるかもしれないことにご注意ください。
 ページの移動に伴う影響をよく考えてから移動してください。",
-'movepagetalktext' => "関連付けられたトークページも一緒に、自動的に移動されます。ただし、'''以下の場合を除きます'''
-* 移動先に、空ではないトークページが存在する場合
+'movepagetalktext' => "関連付けられたトークページも一緒に、自動的に移動されます。ただし、'''以下の場合を除きます:'''
+* 移動先に、空ではないトークページが既に存在する場合
 * 下のボックスのチェックを消した場合
 
 これらの場合、必要に応じて、トークページを移動または統合する必要があります。",
-'movearticle' => '移動するページ',
-'moveuserpage-warning' => "'''警告:'''利用者ページを移動しようとしています。移動した場合、ページのみが移動され、利用者名は''変更されない''点に注意してください。",
+'movearticle' => '移動するページ:',
+'moveuserpage-warning' => "'''警告:''' 利用者ページを移動しようとしています。この操作ではページのみが移動され、利用者名は''変更されない''点に注意してください。",
 'movenologin' => 'ログインしていません',
 'movenologintext' => 'ページを移動するためには、登録利用者でありかつ、[[Special:UserLogin|ログイン]]している必要があります。',
 'movenotallowed' => 'ページを移動する権限がありません。',
 'movenotallowedfile' => 'ファイルを移動する権限がありません。',
-'cant-move-user-page' => '利用者ページを移動させる権限がありません(下位ページ内は除く)。',
+'cant-move-user-page' => '利用者ページを移動させる権限がありません (下位ページ内を除く)。',
 'cant-move-to-user-page' => '利用者下位ページ以外の利用者ページに、ページを移動させる権限がありません。',
-'newtitle' => '新しいページ名',
+'newtitle' => '新しいページ名:',
 'move-watch' => '移動元と移動先ページをウォッチ',
 'movepagebtn' => 'ページを移動',
 'pagemovedsub' => '移動に成功しました',
@@ -2964,7 +2962,7 @@ $1 のブロックの理由は「''$2''」です。",
 'cantmove-titleprotected' => '新しいページ名が作成保護されているため、この場所にページを移動できません',
 'talkexists' => "'''ページ自身は移動できましたが、トークページは移動先のページが存在したため移動できませんでした。
 手動で統合してください。'''",
-'movedto' => '移動先',
+'movedto' => '移動先:',
 'movetalk' => '付随するトークページも移動',
 'move-subpages' => '下位ページも移動 ($1 件まで)',
 'move-talk-subpages' => 'トークページの下位ページも移動 ($1 件まで)',
@@ -2977,12 +2975,12 @@ $1 のブロックの理由は「''$2''」です。",
 'movesubpage' => '{{PLURAL:$1|下位ページ}}',
 'movesubpagetext' => 'このページには、以下の $1 {{PLURAL:$1|下位ページ}}があります。',
 'movenosubpage' => 'このページに下位ページはありません。',
-'movereason' => '理由',
+'movereason' => '理由:',
 'revertmove' => '差し戻し',
 'delete_and_move' => '削除して移動',
 'delete_and_move_text' => '== 削除が必要です ==
-移å\8b\95å\85\88ã\80\8c[[:$1]]ã\80\8dã\81¯æ\97¢ã\81«å­\98å\9c¨ã\81\97ã\81¦ã\81\84ã\81¾ã\81\99ã\80\82
-移動のためにこのページを削除しますか',
+移動先「[[:$1]]」は既に存在します。
+移動のためにこのページを削除しますか?',
 'delete_and_move_confirm' => 'はい、ページを削除します',
 'delete_and_move_reason' => '「[[$1]]」からの移動のために削除',
 'selfmove' => '移動元と移動先のページ名が同じです。
@@ -2991,18 +2989,18 @@ $1 のブロックの理由は「''$2''」です。",
 'immobile-target-namespace' => '「$1」名前空間にはページを移動できません',
 'immobile-target-namespace-iw' => 'ウィキ間リンクは、ページの移動先には指定できません。',
 'immobile-source-page' => 'このページは移動できません。',
-'immobile-target-page' => '移動先ページ名に移動させることができません。',
+'immobile-target-page' => '指定したページ名には移動できません。',
 'bad-target-model' => '指定した移動先では、異なるコンテンツ モデルを使用しています。$1から$2には変換できません。',
 'imagenocrossnamespace' => 'ファイルを、ファイル名前空間以外に移動させることはできません',
-'nonfile-cannot-move-to-file' => 'ファイルではないものを、ファイル名前空間に移動させることはできません',
+'nonfile-cannot-move-to-file' => 'ファイル以外のものを、ファイル名前空間に移動させることはできません',
 'imagetypemismatch' => '新しいファイルの拡張子がファイルのタイプと一致していません',
 'imageinvalidfilename' => '対象ファイル名が無効です',
 'fix-double-redirects' => 'このページへのリダイレクトがあればそのリダイレクトを修正',
 'move-leave-redirect' => '移動元に転送ページを作成する',
-'protectedpagemovewarning' => "'''警告:'''このページは保護されているため、管理者権限を持つ利用者のみが移動できます。
-参考として以下に最後の記録を表示します",
-'semiprotectedpagemovewarning' => "'''注意:'''このページは保護されているため、登録利用者のみが移動できます。
-参考として以下に最後の記録を表示します",
+'protectedpagemovewarning' => "'''警告:''' このページは保護されているため、管理者権限を持つ利用者のみが移動できます。
+参考として以下に最後の記録を表示します:",
+'semiprotectedpagemovewarning' => "'''注意:''' このページは保護されているため、登録利用者のみが移動できます。
+参考として以下に最後の記録を表示します:",
 'move-over-sharedrepo' => '== ファイルが存在します ==
 [[:$1]]は共有リポジトリ上に存在します。ファイルをこの名前に移動すると共有ファイルを上書きします。',
 'file-exists-sharedrepo' => '選ばれたファイル名は既に共有リポジトリ上で使用されています。
@@ -3019,16 +3017,16 @@ $1 のブロックの理由は「''$2''」です。",
 'exportall' => 'すべてのページを書き出し',
 'exportcuronly' => '完全な履歴は含めず、最新版のみを含める',
 'exportnohistory' => "----
-'''注意:'''負荷上の理由により、このフォームによるページの完全な履歴の書き出しは無効化されています。",
+'''注意:''' 処理能力上の理由により、このフォームによるページの完全な履歴の書き出しは無効化されています。",
 'exportlistauthors' => '各ページの投稿者の完全な一覧を含める',
 'export-submit' => '書き出し',
-'export-addcattext' => 'カテゴリからページを追加:',
+'export-addcattext' => '指定したカテゴリ内のページを追加:',
 'export-addcat' => '追加',
-'export-addnstext' => '名前空間からページを追加:',
+'export-addnstext' => '指定した名前空間内のページを追加:',
 'export-addns' => '追加',
 'export-download' => 'ファイルとして保存',
 'export-templates' => 'テンプレートを含める',
-'export-pagelinks' => '以下の階層までのリンク先ページを含める',
+'export-pagelinks' => '以下の階層までのリンク先ページを含める:',
 
 # Namespace 8 related
 'allmessages' => 'システムメッセージの一覧',
@@ -3050,7 +3048,7 @@ MediaWiki 全般のローカライズ (地域化) に貢献したい場合は、
 # Thumbnails
 'thumbnail-more' => '拡大',
 'filemissing' => 'ファイルがありません',
-'thumbnail_error' => 'サムネイルの作成中にエラーが発生しました$1',
+'thumbnail_error' => 'サムネイルの作成中にエラーが発生しました$1',
 'djvu_page_error' => 'DjVuページが範囲外です',
 'djvu_no_xml' => 'DjVuファイルのXMLデータを取得できません',
 'thumbnail-temp-create' => '一時的なサムネイルファイルを作成できません',
@@ -3058,8 +3056,8 @@ MediaWiki 全般のローカライズ (地域化) に貢献したい場合は、
 'thumbnail_invalid_params' => 'サムネイル引数が無効です',
 'thumbnail_dest_directory' => '出力ディレクトリを作成できません',
 'thumbnail_image-type' => '対応していない画像形式です',
-'thumbnail_gd-library' => 'GDライブラリの構成が不完全です関数$1が不足',
-'thumbnail_image-missing' => 'ファイルが見つかりません$1',
+'thumbnail_gd-library' => 'GDライブラリの構成が不完全です関数$1が不足',
+'thumbnail_image-missing' => 'ファイルが見つかりません$1',
 
 # Special:Import
 'import' => 'ページデータの取り込み',
@@ -3067,26 +3065,26 @@ MediaWiki 全般のローカライズ (地域化) に貢献したい場合は、
 'import-interwiki-text' => '取り込むウィキとページ名を選択してください。
 版の日付と編集者名は保持されます。
 ウィキ間移動のすべての取り込み操作は[[Special:Log/import|取り込み記録]]に記録されます。',
-'import-interwiki-source' => '取り込み元のウィキ/ページ',
+'import-interwiki-source' => '取り込み元のウィキ/ページ:',
 'import-interwiki-history' => 'このページのすべての版を複製する',
 'import-interwiki-templates' => 'すべてのテンプレートを含める',
 'import-interwiki-submit' => '取り込み',
 'import-interwiki-namespace' => '取り込み先の名前空間:',
 'import-interwiki-rootpage' => '取り込み先のルートページ (省略可能):',
-'import-upload-filename' => 'ファイル名',
-'import-comment' => 'コメント',
+'import-upload-filename' => 'ファイル名:',
+'import-comment' => 'コメント:',
 'importtext' => '元のウィキで[[Special:Export|書き出し機能]]を使用してファイルに書き出してください。
 それをコンピューターに保存した後、こちらへアップロードしてください。',
 'importstart' => 'ページを取り込み中...',
 'import-revision-count' => '$1{{PLURAL:$1|版}}',
 'importnopages' => '取り込むページがありません。',
 'imported-log-entries' => '$1 件の{{PLURAL:$1|記録項目}}を取り込みました。',
-'importfailed' => '取り込みに失敗しました<nowiki>$1</nowiki>',
+'importfailed' => '取り込みに失敗しました<nowiki>$1</nowiki>',
 'importunknownsource' => '取り込み元のタイプが不明です',
 'importcantopen' => '取り込みファイルが開けませんでした',
 'importbadinterwiki' => 'ウィキ間リンクが正しくありません',
 'importnotext' => '内容が空、または本文がありません',
-'importsuccess' => '取り込みが完了しました',
+'importsuccess' => '取り込みが完了しました!',
 'importhistoryconflict' => '取り込み時にいくつかの版が競合しました(以前に同じページが取り込まれているかもしれません)',
 'importnosources' => 'ウィキ間移動の取り込み元が定義されていないため、履歴の直接アップロードは無効になっています。',
 'importnofile' => '取り込みファイルはアップロードされませんでした。',
@@ -3097,7 +3095,7 @@ MediaWiki 全般のローカライズ (地域化) に貢献したい場合は、
 'importuploaderrortemp' => '取り込みファイルのアップロードに失敗しました。
 一時フォルダーがありません。',
 'import-parse-failure' => 'XMLの取り込み構文解析に失敗しました',
-'import-noarticle' => '取り込むページがありません',
+'import-noarticle' => '取り込むページがありません!',
 'import-nonewrevisions' => 'すべての版は以前に取り込み済みです。',
 'xml-error-string' => '$1、$2 行の $3 文字目 ($4バイト目): $5',
 'import-upload' => 'XMLデータをアップロード',
@@ -3125,7 +3123,7 @@ MediaWiki 全般のローカライズ (地域化) に貢献したい場合は、
 'javascripttest' => 'JavaScript をテスト中',
 'javascripttest-title' => '$1 のテストの実行',
 'javascripttest-pagetext-noframework' => 'このページは JavaScript のテストを実行するために予約されています。',
-'javascripttest-pagetext-unknownframework' => '未知のテストフレームワーク「$1」。',
+'javascripttest-pagetext-unknownframework' => 'テストフレームワーク「$1」は不明です。',
 'javascripttest-pagetext-frameworks' => '次のテストフレームワークからひとつを選択してください:$1',
 'javascripttest-pagetext-skins' => 'テストを実行する外装を選択してください:',
 'javascripttest-qunit-intro' => 'mediawiki.org上の[$1 テストのドキュメント]を参照してください。',
@@ -3171,8 +3169,8 @@ MediaWiki 全般のローカライズ (地域化) に貢献したい場合は、
 'tooltip-feed-rss' => 'このページのRSSフィード',
 'tooltip-feed-atom' => 'このページのAtomフィード',
 'tooltip-t-contributions' => 'この利用者の投稿の一覧',
-'tooltip-t-emailuser' => 'この利用者にメールを送信',
-'tooltip-t-upload' => 'ファイルをアップロード',
+'tooltip-t-emailuser' => 'この利用者にメールを送信する',
+'tooltip-t-upload' => 'ファイルをアップロードする',
 'tooltip-t-specialpages' => '特別ページの一覧',
 'tooltip-t-print' => 'このページの印刷用ページ',
 'tooltip-t-permalink' => 'このページのこの版への固定リンク',
@@ -3292,7 +3290,8 @@ MediaWiki 全般のローカライズ (地域化) に貢献したい場合は、
 'pageinfo-recent-authors' => '最近の投稿者数',
 'pageinfo-magic-words' => 'マジック {{PLURAL:$1|ワード}} ($1)',
 'pageinfo-hidden-categories' => '隠し{{PLURAL:$1|カテゴリ}} ($1)',
-'pageinfo-templates' => '参照読み込みされている{{PLURAL:$1|テンプレート}} ($1)',
+'pageinfo-templates' => 'このページが参照読み込みしている{{PLURAL:$1|テンプレート}} ($1)',
+'pageinfo-transclusions' => 'このページを参照読み込みしている{{PLURAL:$1|ページ}} ($1)',
 'pageinfo-toolboxlink' => 'ページ情報',
 'pageinfo-redirectsto' => '転送先',
 'pageinfo-redirectsto-info' => '情報',
@@ -3301,6 +3300,10 @@ MediaWiki 全般のローカライズ (地域化) に貢献したい場合は、
 'pageinfo-protect-cascading' => 'カスケード保護されている',
 'pageinfo-protect-cascading-yes' => 'はい',
 'pageinfo-protect-cascading-from' => 'カスケード保護の起点',
+'pageinfo-category-info' => 'カテゴリ情報',
+'pageinfo-category-pages' => 'ページ数',
+'pageinfo-category-subcats' => '下位カテゴリ数',
+'pageinfo-category-files' => 'ファイル数',
 
 # Skin names
 'skinname-standard' => 'クラシック',
@@ -3322,8 +3325,8 @@ MediaWiki 全般のローカライズ (地域化) に貢献したい場合は、
 'rcpatroldisabledtext' => '最近の更新の巡回機能は現在無効になっています。',
 'markedaspatrollederror' => '巡回済みにできません',
 'markedaspatrollederrortext' => '巡回済みにするには、版を指定する必要があります。',
-'markedaspatrollederror-noautopatrol' => '自分の編集を巡回済みにする権限がありません。',
-'markedaspatrollednotify' => '$1 ã\81¸ã\81®ã\81\93ã\81®å¤\89æ\9b´ã\81¯å·¡å\9b\9eæ¸\88ã\81¿ã\81«ã\81ªã\82\8aました。',
+'markedaspatrollederror-noautopatrol' => 'あなたには自分の編集を巡回済みにする権限がありません。',
+'markedaspatrollednotify' => '$1 ã\81¸ã\81®ã\81\93ã\81®å¤\89æ\9b´ã\82\92å·¡å\9b\9eæ¸\88ã\81¿ã\81«ã\81\97ました。',
 'markedaspatrollederrornotify' => '巡回済みにするのに失敗しました。',
 
 # Patrol log
@@ -3334,7 +3337,7 @@ MediaWiki 全般のローカライズ (地域化) に貢献したい場合は、
 # Image deletion
 'deletedrevision' => '古い版 $1 を削除しました',
 'filedeleteerror-short' => 'ファイルの削除エラー: $1',
-'filedeleteerror-long' => 'ファイルの削除中にエラーが発生しました
+'filedeleteerror-long' => 'ファイルの削除中にエラーが発生しました:
 
 $1',
 'filedelete-missing' => 'ファイル「$1」は存在しないため、削除できません。',
@@ -3347,8 +3350,8 @@ $1',
 'nextdiff' => '新しい編集→',
 
 # Media information
-'mediawarning' => "'''警告:'''この種類のファイルは悪意のあるコードを含んでいる可能性があります。
-実行するとシステムが危険にさらされる可能性があります。",
+'mediawarning' => "'''警告:''' この種類のファイルは、悪意があるコードを含んでいる可能性があります。
+実行するとシステムが危険にさらされるおそれがあります。",
 'imagemaxsize' => "画像のサイズ制限: <br />''(ファイルページに対する)''",
 'thumbsize' => 'サムネイルの大きさ:',
 'widthheight' => '$1 × $2',
@@ -3359,6 +3362,7 @@ $1',
 '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' => '高解像度での画像',
 'show-big-image-preview' => 'このプレビューのサイズ:$1。',
 'show-big-image-other' => 'その他の{{PLURAL:$2|解像度}}:$1。',
@@ -3376,7 +3380,7 @@ $1',
 'imagelisttext' => "以下は、'''$1'''{{PLURAL:$1|ファイル}}の$2で並べ替えた一覧です。",
 'newimages-summary' => 'この特別ページでは、最近アップロードされたファイルを表示します。',
 'newimages-legend' => '絞り込み',
-'newimages-label' => 'ファイル名(またはその一部):',
+'newimages-label' => 'ファイル名 (またはその一部):',
 'showhidebots' => '(ボットを$1)',
 'noimages' => '表示できるものがありません。',
 'ilsubmit' => '検索',
@@ -3393,6 +3397,8 @@ $1',
 'minutes' => '{{PLURAL:$1|$1 分}}',
 'hours' => '{{PLURAL:$1|$1 時間}}',
 'days' => '{{PLURAL:$1|$1 日}}',
+'months' => '{{PLURAL:$1|$1 か月}}',
+'years' => '{{PLURAL:$1|$1 年}}',
 'ago' => '$1前',
 'just-now' => 'ちょうど今',
 
@@ -3409,8 +3415,8 @@ To disable showing a particular link, set it to 'disable', e.g.
 'variantname-zh-sg' => 'disable',
 Variants for Chinese language
 */
-'variantname-zh-hans' => '中国語(簡体)',
-'variantname-zh-hant' => '中国語(繁体)',
+'variantname-zh-hans' => '中国語 (簡体)',
+'variantname-zh-hant' => '中国語 (繁体)',
 'variantname-zh-cn' => '中国簡体',
 'variantname-zh-tw' => '台湾正体',
 'variantname-zh-hk' => '香港正体',
@@ -3420,8 +3426,8 @@ Variants for Chinese language
 'variantname-zh' => '中国語',
 
 # Variants for Gan language
-'variantname-gan-hans' => 'カン語(簡体)',
-'variantname-gan-hant' => 'カン語(繁体)',
+'variantname-gan-hans' => 'カン語 (簡体)',
+'variantname-gan-hant' => 'カン語 (繁体)',
 'variantname-gan' => 'カン語',
 
 # Variants for Serbian language
@@ -3460,8 +3466,8 @@ Variants for Chinese language
 
 # Metadata
 'metadata' => 'メタデータ',
-'metadata-help' => 'このファイルには、追加情報があります(おそらく、作成やデジタル化する際に使用したデジタルカメラやスキャナーが追加したものです)
-このファイルが元の状態から変更されている場合、いくつかの項目は、修正されたファイルを完全に反映していないかもしれません。',
+'metadata-help' => 'このファイルには、追加情報があります (おそらく、作成やデジタル化する際に使用したデジタルカメラやスキャナーが追加したものです)
+このファイルが元の状態から変更されている場合、修正されたファイルを完全に反映していない項目がある場合があります。',
 'metadata-expand' => '拡張項目を表示',
 'metadata-collapse' => '拡張項目を非表示',
 'metadata-fields' => 'このメッセージで列挙している画像メタデータフィールドは、メタデータ表を折り畳んだ状態のときに画像ページに読み込まれます。
@@ -3563,9 +3569,9 @@ Variants for Chinese language
 'exif-subjectdistancerange' => '被写体距離レンジ',
 'exif-imageuniqueid' => '画像ユニークID',
 'exif-gpsversionid' => 'GPSタグのバージョン',
-'exif-gpslatituderef' => '北緯または南緯',
+'exif-gpslatituderef' => '北緯/南緯',
 'exif-gpslatitude' => '緯度',
-'exif-gpslongituderef' => '東経または西経',
+'exif-gpslongituderef' => '東経/西経',
 'exif-gpslongitude' => '経度',
 'exif-gpsaltituderef' => '高度の基準',
 'exif-gpsaltitude' => '高度',
@@ -3613,11 +3619,11 @@ Variants for Chinese language
 'exif-credit' => '帰属/提供者',
 'exif-source' => 'ソース',
 'exif-editstatus' => '画像の編集上の状態',
-'exif-urgency' => '緊急',
+'exif-urgency' => '緊急',
 'exif-fixtureidentifier' => 'フィクスチャ名',
 'exif-locationdest' => '映っている場所',
 'exif-locationdestcode' => '映っている場所のコード',
-'exif-objectcycle' => 'ã\81\93ã\81®ã\83¡ã\83\87ã\82£ã\82¢ã\83\95ã\82¡ã\82¤ã\83«ã\81«ã\82\88ã\81£ã\81¦意図されている時間帯',
+'exif-objectcycle' => 'ã\81\93ã\81®ã\83¡ã\83\87ã\82£ã\82¢ã\83\95ã\82¡ã\82¤ã\83«ã\81\8c意図されている時間帯',
 'exif-contact' => '連絡先情報',
 'exif-writer' => '記入者',
 'exif-languagecode' => '言語',
@@ -3726,8 +3732,8 @@ Variants for Chinese language
 'exif-lightsource-255' => 'その他の光源',
 
 # Flash modes
-'exif-flash-fired-0' => 'ã\82¹ã\83\88ã\83­ã\83\9c発光せず',
-'exif-flash-fired-1' => 'ã\82¹ã\83\88ã\83­ã\83\9c発光',
+'exif-flash-fired-0' => 'ã\83\95ã\83©ã\83\83ã\82·ã\83¥発光せず',
+'exif-flash-fired-1' => 'ã\83\95ã\83©ã\83\83ã\82·ã\83¥発光',
 'exif-flash-return-0' => 'ストロボのリターン検出機能なし',
 'exif-flash-return-2' => 'ストロボのリターン検出されず',
 'exif-flash-return-3' => 'ストロボのリターン検出',
@@ -3802,10 +3808,10 @@ Variants for Chinese language
 'exif-gpsaltitude-below-sealevel' => '水面下 $1 {{PLURAL:$1|メートル}}',
 
 'exif-gpsstatus-a' => '測位中',
-'exif-gpsstatus-v' => '未測位(中断中)',
+'exif-gpsstatus-v' => '未測位 (中断中)',
 
-'exif-gpsmeasuremode-2' => '2 次元測位',
-'exif-gpsmeasuremode-3' => '3 次元測位',
+'exif-gpsmeasuremode-2' => '2 次元測位',
+'exif-gpsmeasuremode-3' => '3 次元測位',
 
 # Pseudotags used for GPSSpeedRef
 'exif-gpsspeed-k' => 'キロメートル/時',
@@ -3872,7 +3878,7 @@ Variants for Chinese language
 
 # External editor support
 'edit-externally' => '外部アプリケーションを使用してこのファイルを編集',
-'edit-externally-help' => '(詳しくは[//www.mediawiki.org/wiki/Manual:External_editors 設定手順]をご覧ください)',
+'edit-externally-help' => '(詳しくは[//www.mediawiki.org/wiki/Manual:External_editors 設定手順]をご覧ください)',
 
 # 'all' in various places, this might be different for inflected languages
 'watchlistall2' => 'すべて',
@@ -3896,7 +3902,7 @@ Variants for Chinese language
 'confirmemail_sendfailed' => '{{SITENAME}}は確認メールを送信できませんでした。
 メールアドレスが無効な文字を含んでいないかご確認ください。
 
-メールサーバーからの返答$1',
+メールサーバーからの返答$1',
 'confirmemail_invalid' => '確認用コードが正しくありません。
 このコードの有効期限が切れている可能性があります。',
 'confirmemail_needlogin' => 'メールアドレスを確認するために$1が必要です。',
@@ -3905,16 +3911,16 @@ Variants for Chinese language
 'confirmemail_loggedin' => 'メールアドレスは確認されました。',
 'confirmemail_error' => '確認情報を保存する際にエラーが発生しました。',
 'confirmemail_subject' => '{{SITENAME}} メールアドレスの確認',
-'confirmemail_body' => '誰か(おそらくあなた)が、IPアドレス$1から、
+'confirmemail_body' => '誰か (おそらくあなた) が、IPアドレス$1から、
 このメールアドレスで{{SITENAME}}のアカウント「$2」を登録しました。
 
 このアカウントが本当に自分のものか確認して、
-{{SITENAME}}のメール機能を有効にするには、以下のURLをブラウザーで開いてください
+{{SITENAME}}のメール機能を有効にするには、以下のURLをブラウザーで開いてください:
 
 $3
 
 もしアカウントの登録をした覚えがない場合は、
-次のURLをブラウザーで開いて、メールアドレスの確認を中止してください
+次のURLをブラウザーで開いて、メールアドレスの確認を中止してください:
 
 $5
 
@@ -3957,16 +3963,16 @@ $5
 'scarytranscludetoolong' => '[URLが長すぎます]',
 
 # Delete conflict
-'deletedwhileediting' => "'''警告:'''このページが、編集開始後に削除されました!",
-'confirmrecreate' => "[[User:$1|$1]]([[User talk:$1|トーク]])が、このページの編集開始後に、このページを、次の理由で削除しました。
+'deletedwhileediting' => "'''警告''': このページが、編集開始後に削除されました!",
+'confirmrecreate' => "あなたが編集を開始した後、[[User:$1|$1]] ([[User talk:$1|トーク]]) がこのページを以下の理由で削除しました:
 : ''$2''
-本当にこのままこのページを再作成していいか確認してください。",
-'confirmrecreate-noreason' => 'ã\81\82ã\81ªã\81\9fã\81®ç·¨é\9b\86ã\82\92é\96\8bå§\8bã\81\97ã\81\9få¾\8cã\80\81ã\81\93ã\81®ã\83\9aã\83¼ã\82¸ã\82\92[[User:$1|$1]] ([[User talk:$1|ã\83\88ã\83¼ã\82¯]])ã\81\8cå\89\8aé\99¤ã\81\97ã\81¾ã\81\97ã\81\9fã\80\82æ\9c¬å½\93ã\81«ã\81\93ã\81®ã\83\9aã\83¼ã\82¸ã\82\92再作成していいかご確認ください。',
+このままこのページを本当に再作成していいか確認してください。",
+'confirmrecreate-noreason' => 'ã\81\82ã\81ªã\81\9fã\81\8cç·¨é\9b\86ã\82\92é\96\8bå§\8bã\81\97ã\81\9få¾\8cã\80\81[[User:$1|$1]] ([[User talk:$1|ã\83\88ã\83¼ã\82¯]]) ã\81\8cã\81\93ã\81®ã\83\9aã\83¼ã\82¸ã\82\92å\89\8aé\99¤ã\81\97ã\81¾ã\81\97ã\81\9fã\80\82ã\81\93ã\81®ã\83\9aã\83¼ã\82¸ã\82\92æ\9c¬å½\93ã\81«再作成していいかご確認ください。',
 'recreate' => '再作成する',
 
 # action=purge
 'confirm_purge_button' => 'OK',
-'confirm-purge-top' => 'このページのキャッシュを破棄しますか',
+'confirm-purge-top' => 'このページのキャッシュを破棄しますか?',
 'confirm-purge-bottom' => 'ページをパージすると、キャッシュが破棄され、強制的に最新版が表示されます。',
 
 # action=watch/unwatch
@@ -3987,7 +3993,7 @@ $5
 'imgmultipageprev' => '&larr;前ページ',
 'imgmultipagenext' => '次ページ&rarr;',
 'imgmultigo' => '表示',
-'imgmultigoto' => '$1へ行く',
+'imgmultigoto' => 'ページ$1に移動',
 
 # Table pager
 'ascending_abbrev' => '昇順',
@@ -4005,7 +4011,7 @@ $5
 'autosumm-blank' => 'ページの白紙化',
 'autosumm-replace' => '内容を「$1」で置換',
 'autoredircomment' => '[[$1]]への転送ページ',
-'autosumm-new' => 'ページの作成「$1」',
+'autosumm-new' => 'ページの作成:「$1」',
 
 # Size units
 'size-bytes' => '$1バイト',
@@ -4021,9 +4027,9 @@ $5
 # Live preview
 'livepreview-loading' => '読み込み中...',
 'livepreview-ready' => '読み込み中...完了!',
-'livepreview-failed' => 'ライブプレビューが失敗しました
+'livepreview-failed' => 'ライブプレビューが失敗しました!
 通常のプレビューを試してください。',
-'livepreview-error' => '接続に失敗しました$1「$2」。
+'livepreview-error' => '接続に失敗しました$1「$2」。
 通常のプレビューを試してください。',
 
 # Friendlier slave lag warnings
@@ -4031,26 +4037,26 @@ $5
 'lag-warn-high' => 'データベースサーバー遅延のため、この一覧には、$1 {{PLURAL:$1|秒}}より前の変更が表示されていない可能性があります。',
 
 # Watchlist editor
-'watchlistedit-numitems' => 'ウォッチリストには {{PLURAL:$1|$1 件のページ}}が登録されています(トークページを除く)。',
+'watchlistedit-numitems' => 'ウォッチリストには {{PLURAL:$1|$1 件のページ}}が登録されています (トークページを除く)。',
 'watchlistedit-noitems' => 'ウォッチリストにはどのページも登録されていません。',
 'watchlistedit-normal-title' => 'ウォッチリストの編集',
-'watchlistedit-normal-legend' => 'ウォッチリストからページを除去',
+'watchlistedit-normal-legend' => 'ウォッチリストからページを除去',
 'watchlistedit-normal-explain' => 'ウォッチリストに入っているページ名を以下に表示しています。
 ページを除去するには、隣のボックスにチェックを入れて「{{int:watchlistedit-normal-submit}}」をクリックしてください。
 また、[[Special:EditWatchlist/raw|ウォッチリストをテキストで編集]]も使用できます。',
 'watchlistedit-normal-submit' => 'ページを除去',
-'watchlistedit-normal-done' => 'ウォッチリストから {{PLURAL:$1|$1 件のページ}}を削除しました:',
+'watchlistedit-normal-done' => 'ウォッチリストから {{PLURAL:$1|$1 件のページ}}を除去しました:',
 'watchlistedit-raw-title' => 'ウォッチリストをテキストで編集',
 'watchlistedit-raw-legend' => 'ウォッチリストをテキストで編集',
 'watchlistedit-raw-explain' => '以下に、ウォッチリストに含まれるページ名を列挙しています。この一覧で追加や除去ができます。
 1行に1ページ名です。
 完了したら、「{{int:Watchlistedit-raw-submit}}」をクリックしてください。
 [[Special:EditWatchlist|標準の編集ページ]]も使用できます。',
-'watchlistedit-raw-titles' => 'ページ名',
+'watchlistedit-raw-titles' => 'ページ名:',
 'watchlistedit-raw-submit' => 'ウォッチリストを更新',
 'watchlistedit-raw-done' => 'ウォッチリストを更新しました。',
-'watchlistedit-raw-added' => '{{PLURAL:$1|$1 ページ}}を追加しました',
-'watchlistedit-raw-removed' => '{{PLURAL:$1|$1 ページ}}を除去しました',
+'watchlistedit-raw-added' => '{{PLURAL:$1|$1 ページ}}を追加しました:',
+'watchlistedit-raw-removed' => '{{PLURAL:$1|$1 ページ}}を除去しました:',
 
 # Watchlist editing tools
 'watchlisttools-view' => '関連する変更を閲覧',
@@ -4120,7 +4126,7 @@ $5
 
 # Core parser functions
 'unknown_extension_tag' => '不明な拡張機能タグ「$1」です',
-'duplicate-defaultsort' => "'''警告:'''既定のソートキー「$2」が、その前に書かれている既定のソートキー「$1」を上書きしています。",
+'duplicate-defaultsort' => "'''警告:''' 既定のソートキー「$2」が、その前に書かれている既定のソートキー「$1」を上書きしています。",
 
 # Special:Version
 'version' => 'バージョン情報',
@@ -4189,7 +4195,7 @@ MediaWikiは、有用であることを期待して配布されていますが
 'specialpages-group-highuse' => 'よく利用されているページ',
 'specialpages-group-pages' => 'ページの一覧',
 'specialpages-group-pagetools' => 'ページツール',
-'specialpages-group-wiki' => 'ã\82¦ã\82£ã\82­ã\81«é\96¢ã\81\99ã\82\8bæ\83\85å ±とツール',
+'specialpages-group-wiki' => 'ã\83\87ã\83¼ã\82¿とツール',
 'specialpages-group-redirects' => '転送される特別ページ',
 'specialpages-group-spam' => 'スパム対策ツール',
 
@@ -4234,12 +4240,12 @@ MediaWikiは、有用であることを期待して配布されていますが
 
 # Database error messages
 'dberr-header' => 'このウィキには問題があります',
-'dberr-problems' => '申し訳ありません
+'dberr-problems' => '申し訳ありません!
 このウェブサイトに技術的な問題が発生しています。',
 'dberr-again' => '数分間待った後、もう一度読み込んでください。',
-'dberr-info' => '(データベースサーバーに接続できませんでした:$1)',
+'dberr-info' => '(データベースサーバー $1 に接続できませんでした)',
 'dberr-usegoogle' => '元に戻るまで、Googleを利用して検索できます。',
-'dberr-outofdate' => 'それらが収集した内容は古い可能性があることに注意してください。',
+'dberr-outofdate' => '収集された内容は古い可能性があることに注意してください。',
 'dberr-cachederror' => 'これは要求されたページをキャッシュした複製であり、古くなっている可能性があります。',
 
 # HTML forms
@@ -4287,8 +4293,12 @@ MediaWikiは、有用であることを期待して配布されていますが
 'logentry-newusers-newusers' => '利用者アカウント $1 が作成されました',
 'logentry-newusers-create' => '利用者アカウント $1 が作成されました',
 'logentry-newusers-create2' => '利用者アカウント $3 が $1 により作成されました',
+'logentry-newusers-byemail' => '利用者アカウント $3 が $1 によって作成され、そのパスワードをメールで送信しました',
 'logentry-newusers-autocreate' => '利用者アカウント $1 が自動的に作成されました',
-'newuserlog-byemail' => 'パスワードをメールでお送りしました',
+'logentry-rights-rights' => '$1 が $3 の所属グループを $4 から $5 に変更しました',
+'logentry-rights-rights-legacy' => '$1 が $3 の所属グループを変更しました',
+'logentry-rights-autopromote' => '$1 が $4 から $5 に自動的に昇格しました',
+'rightsnone' => '(なし)',
 
 # Feedback
 'feedback-bugornote' => '技術的な問題の詳細を説明する準備ができている場合は、[$1 バグ報告]をお願いします。
@@ -4298,9 +4308,9 @@ MediaWikiは、有用であることを期待して配布されていますが
 'feedback-cancel' => 'キャンセル',
 'feedback-submit' => 'フィードバックを送信',
 'feedback-adding' => 'ページへのフィードバックの追加...',
-'feedback-error1' => 'エラー:APIから認識されない結果が返ってきました',
-'feedback-error2' => 'エラー編集に失敗しました',
-'feedback-error3' => 'エラー:APIからの応答がありません',
+'feedback-error1' => 'エラー: 認識できない結果を API が返しました',
+'feedback-error2' => 'エラー編集に失敗しました',
+'feedback-error3' => 'エラー: API からの応答がありません',
 'feedback-thanks' => 'ありがとうございます。フィードバックを「[$2 $1]」のページに投稿しました。',
 'feedback-close' => '完了',
 'feedback-bugcheck' => 'Great! [$1 既出のバグ]に既に含まれていないかご確認ください。',
@@ -4312,7 +4322,7 @@ MediaWikiは、有用であることを期待して配布されていますが
 
 # API errors
 'api-error-badaccess-groups' => 'このウィキへのファイルのアップロードが許可されていません。',
-'api-error-badtoken' => '内部エラートークンが正しくありません。',
+'api-error-badtoken' => '内部エラートークンが正しくありません。',
 'api-error-copyuploaddisabled' => 'URLによるアップロードはこのサーバーでは無効になっています。',
 'api-error-duplicate' => '当ウェブサイト上には、既に同じ内容の{{PLURAL:$1|[$2 他のファイル]が|[$2 他のファイルがいくつか]}}存在しています。',
 'api-error-duplicate-archive' => 'サイト上に同じ内容の{{PLURAL:$1|[$2 別のファイル]が|[$2 他のファイルがいくつか]}}既にありましたが、{{PLURAL:$1|それは|それらは}}削除されました。',
@@ -4320,7 +4330,7 @@ MediaWikiは、有用であることを期待して配布されていますが
 'api-error-duplicate-popup-title' => '重複した{{PLURAL:$1|ファイル|ファイル群}}です。',
 'api-error-empty-file' => '送信されたファイルは空でした。',
 'api-error-emptypage' => '内容がないページの新規作成は許可されていません。',
-'api-error-fetchfileerror' => '内部エラー:ファイルの取得中に問題が発生しました。',
+'api-error-fetchfileerror' => '内部エラー: ファイルを取得する際に問題が発生しました。',
 'api-error-fileexists-forbidden' => '「$1」という名前のファイルは存在しており、上書きはできません。',
 'api-error-fileexists-shared-forbidden' => '「$1」という名前のファイルは共有ファイルリポジトリに存在しており、上書きはできません。',
 'api-error-file-too-large' => '送信されたファイルは大きすぎます。',
@@ -4329,25 +4339,25 @@ MediaWikiは、有用であることを期待して配布されていますが
 'api-error-filetype-banned-type' => '$1{{PLURAL:$4|は許可されていないファイル形式です}}。許可されている{{PLURAL:$3|ファイル形式}}は$2です。',
 'api-error-filetype-missing' => 'ファイルに拡張子がありません。',
 'api-error-hookaborted' => '拡張機能のフックによって、修正が中断されました。',
-'api-error-http' => '内部エラー:サービスへの接続で問題が発生しました。',
+'api-error-http' => '内部エラー: サーバーに接続できませんでした。',
 'api-error-illegal-filename' => 'ファイル名が許可されていません。',
-'api-error-internal-error' => '内部エラーウィキ上でアップロードを処理する際に問題が発生しました。',
-'api-error-invalid-file-key' => '内部エラー一時格納場所にファイルが見つかりませんでした。',
-'api-error-missingparam' => '内部エラーリクエストのパラメーターが足りません。',
-'api-error-missingresult' => '内部エラー:複製に成功したか判断できませんでした。',
+'api-error-internal-error' => '内部エラーウィキ上でアップロードを処理する際に問題が発生しました。',
+'api-error-invalid-file-key' => '内部エラー一時格納場所にファイルが見つかりませんでした。',
+'api-error-missingparam' => '内部エラーリクエストのパラメーターが足りません。',
+'api-error-missingresult' => '内部エラー: 複製に成功したかどうか判断できませんでした。',
 'api-error-mustbeloggedin' => 'ファイルをアップロードするにはログインする必要があります。',
-'api-error-mustbeposted' => '内部エラー:リクエストはHTTP POSTである必要があります。',
+'api-error-mustbeposted' => '内部エラー: リクエストは HTTP の POST メソッドである必要があります。',
 'api-error-noimageinfo' => 'アップロードには成功しましたが、サーバーはファイルに関する情報を返しませんでした。',
-'api-error-nomodule' => '内部エラーアップロードを処理するモジュールが設定されていません。',
-'api-error-ok-but-empty' => '内部エラーサーバーからの応答がありません。',
+'api-error-nomodule' => '内部エラーアップロードを処理するモジュールが設定されていません。',
+'api-error-ok-but-empty' => '内部エラーサーバーからの応答がありません。',
 'api-error-overwrite' => '既存のファイルへの上書きは許可されていません。',
-'api-error-stashfailed' => '内部エラーサーバーは一時ファイルを格納できませんでした。',
+'api-error-stashfailed' => '内部エラーサーバーは一時ファイルを格納できませんでした。',
 'api-error-timeout' => 'サーバーが決められた時間内に応答しませんでした。',
 'api-error-unclassified' => '不明なエラーが発生しました。',
-'api-error-unknown-code' => '不明なエラー「$1」',
-'api-error-unknown-error' => '内部エラー:ファイルのアップロードの途中で問題が発生しました。',
-'api-error-unknown-warning' => '不明な警告「$1」',
-'api-error-unknownerror' => '不明なエラー「$1」',
+'api-error-unknown-code' => '不明なエラー:「$1」',
+'api-error-unknown-error' => '内部エラー: ファイルをアップロードする際に問題が発生しました。',
+'api-error-unknown-warning' => '不明な警告:「$1」',
+'api-error-unknownerror' => '不明なエラー:「$1」',
 'api-error-uploaddisabled' => 'このウィキではアップロードは無効になっています。',
 'api-error-verification-error' => 'このファイルは壊れているか、間違った拡張子になっています。',
 
@@ -4362,6 +4372,4 @@ MediaWikiは、有用であることを期待して配布されていますが
 'duration-centuries' => '$1 {{PLURAL:$1|世紀}}',
 'duration-millennia' => '$1{{PLURAL:$1|,000 年}}',
 
-# Unknown messages
-'svg-long-error' => '無効な SVG ファイル: $1',
 );
index e40b371..637df82 100644 (file)
@@ -664,7 +664,6 @@ Yu de pramis wi alzwel se a yu rait dis yuself, ar kapi'i frahn a poblik domien
 'template-protected' => '(protek)',
 'template-semiprotected' => '(semi-protek)',
 'hiddencategories' => 'Dis piej a memb a {{PLURAL:$1|1 idn kiatigari|$1 idn kiatigari}}:',
-'nocreatetitle' => 'Piej krieshan limit',
 'permissionserrors' => 'Permishan herro',
 'permissionserrorstext-withaction' => 'Yu no ab no poermishan fi $2, fi di falarin {{PLURAL:$1|riizn|riizndem}}:',
 'edit-conflict' => 'Hedit kanflik: $1',
@@ -736,6 +735,9 @@ Chrai priifix yu kwieri wid ''all:'' fi saach aal kantent (inkluudn taak piej, t
 
 'grouppage-sysop' => '{{ns:project}}:Adminischrieta',
 
+# Special:Log/newusers
+'newuserlogpage' => 'Yuuza krieshan lag',
+
 # User rights log
 'rightslog' => 'Yuuza raits lag',
 
@@ -826,9 +828,6 @@ Piej pahn [[Special:Watchlist|yu wachlis]] dem '''buol'''.",
 # Special:LinkSearch
 'linksearch' => 'Extoernal lingk',
 
-# Special:Log/newusers
-'newuserlogpage' => 'Yuuza krieshan lag',
-
 # Special:ListGroupRights
 'listgrouprights-members' => '(lis a memba)',
 
index 575d864..4279d5f 100644 (file)
@@ -454,6 +454,10 @@ hersenenge, (førge) = førskel til den førge hersenenge, l = lile til mendre 
 
 'grouppage-sysop' => '{{ns:project}}:Administråtorer',
 
+# Special:Log/newusers
+'newuserlogpage' => 'Brugeråprettelseslog',
+'newuserlogpagetext' => "Dett'er en log åver de senest åprettede brugere.",
+
 # User rights log
 'rightslog' => 'Rettigheds-logbåĝ',
 
@@ -605,10 +609,6 @@ hersenenge, (førge) = førskel til den førge hersenenge, l = lile til mendre 
 'linksearch-line' => '$2 linker til $1',
 'linksearch-error' => "Wildkårter må ken benyttes i'n stårt åf håstnavnet.",
 
-# Special:Log/newusers
-'newuserlogpage' => 'Brugeråprettelseslog',
-'newuserlogpagetext' => "Dett'er en log åver de senest åprettede brugere.",
-
 # E-mail user
 'emailuser' => 'E-mail til denne bruger',
 
@@ -853,7 +853,4 @@ Kun endholtet åf æ liste (lenjer startende ve *) bliver brugt. Den første hen
 # Special:SpecialPages
 'specialpages' => 'Sonst sider',
 
-# New logging system
-'newuserlog-byemail' => 'kodeort tilsend via e-mail',
-
 );
index cf6eb39..73d4961 100644 (file)
@@ -8,6 +8,7 @@
  * @file
  *
  * @author Anggoro
+ * @author Bennylin
  * @author Helix84
  * @author Hoo
  * @author Kaganer
@@ -99,7 +100,7 @@ $messages = array(
 
 'underline-always' => 'Tansah',
 'underline-never' => 'Ora',
-'underline-default' => 'Miturut konfigurasi panjlajah wèb',
+'underline-default' => 'Kulit atau penjelajah bawaan',
 
 # Font style option in Special:Preferences
 'editfont-style' => 'Modhèl aksara (font) ing kotak suntingan:',
@@ -184,6 +185,7 @@ $messages = array(
 'newwindow' => '(buka ing jendhéla anyar)',
 'cancel' => 'Batalna',
 'moredotdotdot' => 'Liyané...',
+'morenotlisted' => 'Isih ana...',
 'mypage' => 'Kaca',
 'mytalk' => 'Wicara',
 'anontalk' => 'Dhiskusi IP puniki',
@@ -369,9 +371,9 @@ Iki manawa uga nuduhaké anané kesalahan ing piranti alus sing dipigunakaké d
 'databaseerror' => 'Kasalahan database',
 'dberrortext' => 'Ana kasalahan sintaks ing panyuwunan basis data.
 Kasalahan iki mbokmenawa nuduhaké anané \'\'bug\'\' ing software.
-Panyuwunan basis data sing pungkasan yakuwi: <blockquote><tt>$1</tt></blockquote>
-saka jroning fungsi "<tt>$2</tt>".
-Basis data ngasilaké kasalahan "<tt>$3: $4</tt>".',
+Panyuwunan basis data sing pungkasan yakuwi: <blockquote><code>$1</code></blockquote>
+saka jroning fungsi "<code>$2</code>".
+Basis data ngasilaké kasalahan "<samp>$3: $4</samp>".',
 'dberrortextcl' => 'Ana kasalahan sintaks ing panyuwunan basis data.
 Panyuwunan basis data sing pungkasan iku:
 "$1"
@@ -416,7 +418,7 @@ Ora ana alesané.",
 'actionthrottled' => 'Tindakan diwatesi',
 'actionthrottledtext' => 'Minangka sawijining pepesthèn anti-spam, panjenengan diwatesi nglakoni tindhakan iki sing cacahé kakèhan ing wektu cendhak.
 Mangga dicoba manèh ing sawetara menit.',
-'protectedpagetext' => 'Kaca iki dikunci supaya ora disunting.',
+'protectedpagetext' => 'Kaca iki wis digembok supaya ora bisa disunting lan diapa-apakaké.',
 'viewsourcetext' => 'Panjenengan bisa mirsani utawa nulad sumber kaca iki:',
 'viewyourtext' => "Sampéyan bisa ndelok lan nyalin sumber '''suntingan Sampéyan''' nèng kaca iki:",
 'protectedinterface' => 'Kaca iki isiné tèks antarmuka sing dienggo software lan wis dikunci kanggo menghindari kasalahan.',
@@ -451,6 +453,8 @@ Pangurus sing ngopèni kuwi ngawedharaké: "$3".',
 Sampéyan bisa nganggo {{SITENAME}} sacara anonim, utawa bisa <span class='plainlinks'>[$1 mlebu log manèh]</span> kanthi jeneng panganggo sing padha utawa beda.
 
 Cathet yèn sapérangan kaca mungkin isih nampilaké tulisan yèn Sampéyan isih nèng njero log, kuwi bisa ilang yèn Sampéyan ngresiki ''cache'' pramban Sampéyan.",
+'welcomeuser' => 'Sugeng Rawuh, $1!',
+'welcomecreation-msg' => 'Akun panjenengan wis kacipta. Aja lali nata konfigurasi [[Special:Preferences|preferensi {{SITENAME}}]] panjenengan.',
 'yourname' => 'Asma pangangeman',
 'yourpassword' => 'Tembung sandhi:',
 'yourpasswordagain' => 'Balènana tembung sandhi',
@@ -473,7 +477,7 @@ Cathet yèn sapérangan kaca mungkin isih nampilaké tulisan yèn Sampéyan isih
 'gotaccount' => "Wis kagungan akun? '''$1'''.",
 'gotaccountlink' => 'Mlebu',
 'userlogin-resetlink' => 'Lali rincian mlebu log Sampéyan?',
-'createaccountmail' => 'liwat layang e-mail',
+'createaccountmail' => 'Nganggoa sandi sembarang lan kirimna liwat layang e-mail ing ngisor iki',
 'createaccountreason' => 'Alesan:',
 'badretype' => 'Sandhi panjenengan ora gathuk',
 'userexists' => 'Jeneng panganggo sing dilebokaké lagi dianggo.
@@ -536,6 +540,7 @@ Tulung nunggu dhisik sadurungé njajal manèh.',
 # E-mail sending
 'php-mail-error-unknown' => 'Kasalahan ora dingertèni nèng piguna mail() PHP.',
 'user-mail-no-addy' => 'Njajal ngirim layang èlèktronik tanpa alamat layang èlèktronik.',
+'user-mail-no-body' => 'Nyoba ngirim layang e-mail, tapi isine kosong.',
 
 # Change password dialog
 'resetpass' => 'Ganti tembung sandi',
@@ -567,6 +572,25 @@ Panjengen manawa wis kasil ganti tembung sandi utawa nyuwun tembung sandi saunta
 'passwordreset-capture-help' => 'Yèn Sampéyan nyentang kothak iki, layang èlèktronik (mawa tembung sandhi sawetara) bakal ditampilaké nèng Sampéyan lan uga dikirim nèng panganggo.',
 'passwordreset-email' => 'Alamat layang èlèktronik:',
 'passwordreset-emailtitle' => 'Rincian akun nèng {{SITENAME}}',
+'passwordreset-emailtext-ip' => 'Seseorang (mungkin Anda, dari alamat IP $1) meminta pengingat
+detail akun untuk {{SITENAME}} ($4). {{PLURAL:$3|Akun|Akun-akun}} berikut
+terkait dengan alamat surel ini:
+
+$2
+
+{{PLURAL:$3|Sandi sementara|Sandi sementara}} berikut akan kedaluwarsa dalam {{PLURAL:$5|satu hari|$5 hari}}.
+Anda harus masuk dan memilih sandi baru sekarang. Jika orang lain membuat
+permintaan ini atau jika Anda ingat sandi asli dan tidak lagi
+ingin mengubahnya, Anda dapat mengabaikan pesan ini dan terus menggunakan sandi lama.',
+'passwordreset-emailtext-user' => 'Seseorang (mungkin Anda, dari alamat IP $1) meminta pengingat detail akun untuk {{SITENAME}} ($4).
+{{PLURAL:$3|Akun|Akun-akun}} berikut terkait dengan alamat surel ini:
+
+$2
+
+{{PLURAL:$3|Sandi sementara|Sandi sementara}} berikut akan kedaluwarsa dalam {{PLURAL:$5|satu hari|$5 hari}}.
+Anda harus masuk dan memilih sandi baru sekarang. Jika orang lain membuat
+permintaan ini atau jika Anda ingat sandi asli dan tidak lagi
+ingin mengubahnya, Anda dapat mengabaikan pesan ini dan terus menggunakan sandi lama.',
 'passwordreset-emailelement' => 'Jeneng panganggo: $1
 Tembung sandhi sawetara: $2',
 'passwordreset-emailsent' => 'Layang èlèktronik pangèling wis dikirim.',
@@ -581,6 +605,7 @@ Tembung sandhi sawetara: $2',
 'changeemail-oldemail' => 'Alamat layang èlèktronik saiki:',
 'changeemail-newemail' => 'Alamat layang èlèktronik anyar:',
 'changeemail-none' => '(ora ana)',
+'changeemail-password' => 'Sandi {{SITENAME}} panjenengan:',
 'changeemail-submit' => 'Ganti layang èlèktronik',
 'changeemail-cancel' => 'Batal',
 
@@ -697,7 +722,7 @@ Log pamblokiran pungkasan dituduhaké ing ngisor iki minangka bahan rujukan:',
 'note' => "'''Cathetan:'''",
 'previewnote' => "'''Èling yèn Sampéyan mung ndelok pratayang.'''
 Owahan Sampéyan durung kasimpen!",
-'continue-editing' => 'Banjuraké nyunting',
+'continue-editing' => 'Lunga menyang area nyunting',
 'previewconflict' => 'Pratilik iki nuduhaké tèks ing bagian dhuwur kothak suntingan tèks kayadéné bakal katon yèn panjenengan bakal simpen.',
 'session_fail_preview' => "'''Nuwun sèwu, suntingan panjenengan ora bisa diolah amarga dhata sèsi kabusak.
 Coba kirim dhata manèh. Yèn tetep ora bisa, coba log metua lan mlebu log manèh.''''''Amerga wiki iki marengaké panggunan kodhe HTML mentah, mula pratilik didhelikaké minangka pancegahan marang serangan JavaScript.'''
@@ -748,7 +773,6 @@ Entri cathetan pungkasan disadiakake ing ngisor kanggo referensi:",
 'template-semiprotected' => '(semi-pangreksan)',
 'hiddencategories' => 'Kaca iki sawijining anggota saka {{PLURAL:$1|1 kategori ndelik|$1 kategori-kategori ndelik}}:',
 'edittools' => '<!-- Tèks ing ngisor iki bakal ditudhuhaké ing ngisoring isènan suntingan lan pangemotan.-->',
-'nocreatetitle' => 'Panggawéan kaca anyar diwatesi',
 'nocreatetext' => 'Situs iki ngwatesi kemampuan kanggo nggawé kaca anyar. Panjenengan bisa bali lan nyunting kaca sing wis ana, utawa mangga [[Special:UserLogin|mlebua log utawa ndaftar]]',
 'nocreate-loggedin' => 'Panjenengan ora kagungan idin kanggo nggawé kaca anyar.',
 'sectioneditnotsupported-title' => 'Panyuntingan bagéyan ora kasengkuyungan',
@@ -772,6 +796,15 @@ Katoné kaca iki wis dibusak.',
 'edit-already-exists' => 'Ora bisa nggawé kaca anyar.
 Amerga wis ana.',
 'defaultmessagetext' => 'Tèks layang gawan',
+'content-failed-to-parse' => 'Gagal menjabarkan konten $2 untuk model $1: $3',
+'invalid-content-data' => 'Data konten ora sah',
+'content-not-allowed-here' => 'Konten "$1" ora oleh ing kaca [[$2]]',
+
+# Content models
+'content-model-wikitext' => 'teks wiki',
+'content-model-text' => 'teks polos',
+'content-model-javascript' => 'JavaScript',
+'content-model-css' => 'CSS',
 
 # Parser/template warnings
 'expensive-parserfunction-warning' => "Pènget: Kaca iki ngandhut kakèhan panggunan fungsi ''parser'' sing larang.
@@ -790,6 +823,8 @@ Sawetara cithakan bakal dilirwakaké.',
 'node-count-exceeded-warning' => 'Kaca munjuli itungan-nodé',
 'expansion-depth-exceeded-category' => 'Kaca sing jeroné èkspansi wis punjul',
 'expansion-depth-exceeded-warning' => 'Kaca munculi jeroné èkspansi',
+'parser-unstrip-loop-warning' => 'Unstrip loop detected',
+'parser-unstrip-recursion-limit' => 'Unstrip recursion limit exceeded ($1)',
 'converter-manual-rule-error' => 'Kasalahan kadètèk nèng aturan pangubahan basa manual',
 
 # "Undo" feature
@@ -919,10 +954,11 @@ Panjenengan ora nduwèni aksès menyang révisi iki.',
 'revdelete-concurrent-change' => 'Gagal ngowahi révisi tanggal $1, jam $2: statusé mbokmanawa wis diowahi déning panganggo liya bebarengan karo panjenengan.
 Mangga priksa cathetan log.',
 'revdelete-only-restricted' => 'Ora bisa ndhelikaké siji barang mawa tanggal $1 wanci $2: Sampéyan ora bisa ndhelikaké barang kuwi saka pangurus tanpa milih salah sawiji pilihan kanggo ndhelikaké sing liyané.',
-'revdelete-reason-dropdown' => '*Alesan mbusak sing umum
-** Planggaran hak cipta
-** Inpormasi pribadi sing ora patut
-** Inpormasi sing potènsial ngrusak martabat',
+'revdelete-reason-dropdown' => '*Alasan penghapusan yang umum
+** Pelanggaran hak cipta
+** Komentar atau informasi pribadi yang tidak pantas
+** Nama pengguna yang tidak pantas
+** Berpotensi mencemarkan nama baik',
 'revdelete-otherreason' => 'Alesan liya/tambahan:',
 'revdelete-reasonotherlist' => 'Alesan liya',
 'revdelete-edit-reasonlist' => 'Sunting alesan pambusakan',
@@ -1115,7 +1151,7 @@ Iki aji acak sing bisa panjenengan gunakaké: $1',
 'timezoneregion-indian' => 'Samodra Hindhia',
 'timezoneregion-pacific' => 'Samodra Pasifik',
 'allowemail' => 'Marengaké panganggo liyané ngirim layang èlèktronik (email).',
-'prefs-searchoptions' => 'Opsi-opsi panggolèkan',
+'prefs-searchoptions' => 'Golèk',
 'prefs-namespaces' => 'Ruang jeneng / Bilik jeneng',
 'defaultns' => 'Utawa golèki ing bilik jeneng iki:',
 'default' => 'baku',
@@ -1128,9 +1164,9 @@ Pembalikan ora bisa dibatalaké.',
 'prefs-emailconfirm-label' => 'Konfirmasi layang-e:',
 'prefs-textboxsize' => 'Ukuran kothak suntingan',
 'youremail' => 'Layang élèktronik (E-mail):',
-'username' => 'Asma panganggo:',
-'uid' => 'ID panganggo:',
-'prefs-memberingroups' => 'Anggota {{PLURAL:$1|klompok|klompok-klompok}}:',
+'username' => '{{GENDER:$1|Asma panganggo}}:',
+'uid' => '{{GENDER:$1|ID panganggo}}:',
+'prefs-memberingroups' => '{{GENDER:$2|Anggota}} {{PLURAL:$1|klompok|klompok-klompok}}:',
 'prefs-registration' => 'Wektu régistrasi:',
 'yourrealname' => 'Asma sajatiné :',
 'yourlanguage' => 'Basa sing dianggo:',
@@ -1280,12 +1316,13 @@ Alamat layang èlèktronik Sampéyan ora dituduhaké nalika wong liya ngubungi S
 'right-sendemail' => 'Ngirim layang listrik (e-mail) menyang panganggo liya',
 'right-passwordreset' => 'Delok layang èlèktronik panyetèlulangan tembung sandhi',
 
+# Special:Log/newusers
+'newuserlogpage' => 'Log panganggo anyar',
+'newuserlogpagetext' => 'Ing ngisor iki kapacak log pandaftaran panganggo anyar.',
+
 # User rights log
 'rightslog' => 'Log pangowahan hak aksès',
 'rightslogtext' => 'Ing ngisor iki kapacak log pangowahan marang hak-hak panganggo.',
-'rightslogentry' => 'ngganti kaanggotan kelompok kanggo $1 saka $2 dadi $3',
-'rightslogentry-autopromote' => 'otomatis ditawakaké saka $2 nèng $3',
-'rightsnone' => '(ora ana)',
 
 # Associated actions - in the sentence "You do not have permission to X"
 'action-read' => 'maca kaca iki',
@@ -1507,6 +1544,7 @@ Mangga kontak [[Special:ListUsers/sysop|pangurus]].',
 'backend-fail-notsame' => 'Berkas nonidèntik wis ana nèng "$1".',
 'backend-fail-invalidpath' => '"$1" dudu jurusan nyimpen sing sah.',
 'backend-fail-delete' => 'Ora bisa mbusak berkas "$1".',
+'backend-fail-describe' => 'Gagal mengubah metadata untuk berkas "$1".',
 'backend-fail-alreadyexists' => 'Berkas "$1" wis ana.',
 'backend-fail-store' => 'Ora bisa nyèlèhaké berkas "$1" nèng "$2".',
 'backend-fail-copy' => 'Ora bisa nyalin berkas "$1" nèng "$2".',
@@ -1517,8 +1555,17 @@ Mangga kontak [[Special:ListUsers/sysop|pangurus]].',
 'backend-fail-read' => 'Ora bisa maca berkas "$1".',
 'backend-fail-create' => 'Ora bisa nulis berkas "$1".',
 'backend-fail-maxsize' => 'Ora bisa nulis berkas "$1" amarga luwih gedhé saka {{PLURAL:$2|sak bita|$2 bita}}.',
+'backend-fail-readonly' => 'Backend penyimpanan "$1" ini saat ini hanya bisa dibaca. Alasan yang diberikan adalah: "\'\'$2\'\'"',
+'backend-fail-synced' => 'Berkas "$1" dalam keadaan yang tidak konsisten dalam backends penyimpanan internal',
+'backend-fail-connect' => 'Tidak dapat menyambung ke penyimpanan backend "$1".',
+'backend-fail-internal' => 'Kesalahan yang tidak dikenal terjadi di backend penyimpanan "$1".',
 'backend-fail-contenttype' => 'Ora bisa nemtokaké jinisé kontèn saka berkas sing arep disimpen nèng "$1".',
-'backend-fail-usable' => 'Ora bisa nulis berkas "$1" amarga idin durung nyukupi utawa ilang dirèktori/kontaineré.',
+'backend-fail-batchsize' => 'Penyimpanan backend diberikan batch $1 berkas {{PLURAL:$1||}}operasi; batasnya adalah $2 {{PLURAL:$2||}}operasi.',
+'backend-fail-usable' => 'Ora bisa maca utawa nulis berkas "$1" amarga idin durung nyukupi utawa ilang dirèktori/kontaineré.',
+
+# File journal errors
+'filejournal-fail-dbconnect' => 'Tidak dapat menyambung ke database jurnal untuk penyimpanan backend "$1".',
+'filejournal-fail-dbquery' => 'Tidak bisa update database jurnal untuk penyimpanan backend "$1".',
 
 # Lock manager
 'lockmanager-notlocked' => 'Ora bisa mbukak gembok "$1"; kuwi ora kagembok.',
@@ -1649,6 +1696,7 @@ Mungkin Sampéyan pingin nyunting katrangan nèng [$2 kaca katrangan berkasé] n
 'uploadnewversion-linktext' => 'Unggahna vèrsi sing luwih anyar tinimbang gambar iki',
 'shared-repo-from' => 'saka $1',
 'shared-repo' => 'sawijining panyimpenan kanggo bebarengan',
+'upload-disallowed-here' => 'Anda tidak bisa menimpa berkas ini.',
 
 # File reversion
 'filerevert' => 'Balèkna $1',
@@ -1756,6 +1804,7 @@ Jeneng sing wis <del>dicorèk</del> tegesé wis rampung didandani.',
 # Miscellaneous special pages
 'nbytes' => '$1 {{PLURAL:$1|bita|bita}}',
 'ncategories' => '$1 {{PLURAL:$1|kategori|kategori}}',
+'ninterwikis' => '$1 {{PLURAL:$1|interwiki|interwiki}}',
 'nlinks' => '$1 {{PLURAL:$1|pranala|pranala}}',
 'nmembers' => '$1 {{PLURAL:$1|anggota|anggota}}',
 'nrevisions' => '$1 {{PLURAL:$1|revisi|revisi}}',
@@ -1784,6 +1833,7 @@ Jeneng sing wis <del>dicorèk</del> tegesé wis rampung didandani.',
 'mostlinkedtemplates' => 'Cithakan sing kerep dhéwé dienggo',
 'mostcategories' => 'Kaca sing kategoriné akèh dhéwé',
 'mostimages' => 'Berkas sing kerep dhéwé dienggo',
+'mostinterwikis' => 'Halaman dengan interwiki terbanyak',
 'mostrevisions' => 'Kaca mawa pangowahan sing akèh dhéwé',
 'prefixindex' => 'Kabèh kaca mawa ater-ater',
 'prefixindex-namespace' => 'Kabèh kaca mawa ater-ater (bilik jeneng $1)',
@@ -1881,7 +1931,9 @@ Deleng uga [[Special:WantedCategories|kategori sing diperlokaké]].',
 'linksearch-pat' => 'Pola panggolèkan:',
 'linksearch-ns' => 'Bilik nama:',
 'linksearch-ok' => 'Golèk',
-'linksearch-text' => "''Wildcards'' kaya ta \"*.wikipedia.org\" bisa dienggo.<br />Protokol sing disengkuyung: <code>\$1</code>",
+'linksearch-text' => 'Tanda bintang seperti "*.wikipedia.org" dapat digunakan.
+Perlu sedikitnya satu domain tingkat atas, misalnya "*.org".<br />
+{{PLURAL:$2|Protokol|Protokol}} yang didukung: <code>$1</code> (menggunakan http:// bila protokol tidak ditentukan)',
 'linksearch-line' => '$1 disambung saka $2',
 'linksearch-error' => "''Wildcards'' namung bisa dienggo ing bagéyan awal saka jeneng host.",
 
@@ -1900,10 +1952,6 @@ Deleng uga [[Special:WantedCategories|kategori sing diperlokaké]].',
 'activeusers-hidesysops' => 'Delikna pangurus',
 'activeusers-noresult' => 'Panganggo ora ditemokaké.',
 
-# Special:Log/newusers
-'newuserlogpage' => 'Log panganggo anyar',
-'newuserlogpagetext' => 'Ing ngisor iki kapacak log pandaftaran panganggo anyar.',
-
 # Special:ListGroupRights
 'listgrouprights' => 'Hak-hak grup panganggo',
 'listgrouprights-summary' => 'Ing ngisor iki kapacak dhaftar grup panganggo sing didéfinisi ing wiki iki, kanthi hak-hak aksès gandhèngané.
@@ -1927,8 +1975,10 @@ Informasi tambahan perkara hak-hak individual bisa ditemokaké ing [[{{MediaWiki
 'mailnologin' => 'Ora ana alamat layang e-mail',
 'mailnologintext' => 'Panjenengan kudu [[Special:UserLogin|mlebu log]] lan kagungan alamat e-mail sing sah ing [[Special:Preferences|preféèrensi]] yèn kersa ngirim layang e-mail kanggo panganggo liya.',
 'emailuser' => 'Kirim e-mail panganggo iki',
+'emailuser-title-target' => 'Kirim surel ke {{GENDER:$1|pengguna}} ini',
+'emailuser-title-notarget' => 'Kirimi panganggo iki layang e-mail',
 'emailpage' => 'Kirimi panganggo iki layang e-mail',
-'emailpagetext' => 'Panjenengan bisa migunakaké formulir ing ngisor kanggo ngirim layang-e marang panganggo iki.
+'emailpagetext' => 'Panjenengan bisa migunakaké formulir ing ngisor kanggo ngirim layang-e marang {{GENDER:$1|panganggo}} iki.
 Alamat layang-e sing panjenengan lebokaké ing [[Special:Preferences|préferèsi panjenengan]] bakal dadi alamat "Saka" jroning layang-e kasebut, mula panampa layang-e bakal bisa mbalesi langsung menyang panjenengan.',
 'usermailererror' => 'Kaluputan obyèk layang:',
 'defemailsubject' => '{{SITENAME}} layang èlèktronik saka panganggo "$1"',
@@ -1959,7 +2009,7 @@ Alamat layang-e sing panjenengan lebokaké ing [[Special:Preferences|préferèsi
 'usermessage-editor' => 'Pawartaning layang sistem',
 
 # Watchlist
-'watchlist' => 'Daftar artikel pilihan',
+'watchlist' => 'Daptar pangawasan',
 'mywatchlist' => 'Daftar pangawasan',
 'watchlistfor2' => 'Kanggo $1 $2',
 'nowatchlist' => 'Daftar pangawasan panjenengan kosong.',
@@ -1967,8 +2017,8 @@ Alamat layang-e sing panjenengan lebokaké ing [[Special:Preferences|préferèsi
 'watchnologin' => 'Durung mlebu log',
 'watchnologintext' => 'Panjenengan kudu [[Special:UserLogin|mlebu log]] kanggo ngowahi daftar artikel pilihan.',
 'addwatch' => 'Tambah nèng daptar pangawasan',
-'addedwatchtext' => "Kaca \"[[:\$1]]\" wis ditambahaké menyang [[Special:Watchlist|daftar pangawasan]].
-Owah-owahan sing dumadi ing tembé ing kaca iku lan kaca dhiskusi sing kagandhèng, bakal dipacak ing kéné, lan kaca iku bakal dituduhaké '''kandel''' ing [[Special:RecentChanges|daftar owah-owahan iku]] supados luwih gampang katon.",
+'addedwatchtext' => 'Kaca "[[:$1]]" wis ditambahaké menyang [[Special:Watchlist|daftar pangawasan]].
+Owah-owahan sing dumadi ing tembé ing kaca iku lan kaca dhiskusi sing kagandhèng, bakal dipacak ing kéné.',
 'removewatch' => 'Singkiraké saka daptar pangawasan',
 'removedwatchtext' => 'Kaca "[[:$1]]" wis dibusak saka [[Special:Watchlist|daftar pangawasan]].',
 'watch' => 'tutana',
@@ -1997,6 +2047,16 @@ Owah-owahan sing dumadi ing tembé ing kaca iku lan kaca dhiskusi sing kagandhè
 'enotif_mailer' => 'Pangirim Notifikasi {{SITENAME}}',
 'enotif_reset' => 'Tandhanana kabèh kaca sing wis ditiliki',
 'enotif_impersonal_salutation' => 'Panganggo {{SITENAME}}',
+'enotif_subject_deleted' => 'Halaman $1 di {{SITENAME}} telah dihapus oleh {{gender:$2|$2}}',
+'enotif_subject_created' => 'Halaman $1 di {{SITENAME}} telah dibuat oleh {{gender:$2|$2}}',
+'enotif_subject_moved' => 'Halaman $1 di {{SITENAME}} telah dipindahkan oleh {{gender:$2|$2}}',
+'enotif_subject_restored' => 'Halaman $1 di {{SITENAME}} telah dikembalikan oleh {{gender:$2|$2}}',
+'enotif_subject_changed' => 'Halaman $1 di {{SITENAME}} telah diubah oleh {{gender:$2|$2}}',
+'enotif_body_intro_deleted' => 'Halaman $1 di {{SITENAME}} telah dihapus pada $PAGEEDITDATE oleh {{gender:$2|$2}}, lihat $3.',
+'enotif_body_intro_created' => 'Halaman $1 di {{SITENAME}} telah dibuat pada $PAGEEDITDATE oleh {{gender:$2|$2}}, lihat $3 untuk revisi terkini.',
+'enotif_body_intro_moved' => 'Halaman $1 di {{SITENAME}} telah dipindahkan pada $PAGEEDITDATE oleh {{gender:$2|$2}}, lihat $3 untuk revisi terkini.',
+'enotif_body_intro_restored' => 'Halaman $1 di {{SITENAME}} telah dikembalikan pada $PAGEEDITDATE oleh {{gender:$2|$2}}, lihat $3 untuk revisi terkini.',
+'enotif_body_intro_changed' => 'Halaman $1 di {{SITENAME}} telah diubah pada $PAGEEDITDATE oleh {{gender:$2|$2}}, lihat $3 untuk revisi terkini.',
 'enotif_lastvisited' => 'Deleng $1 kanggo kabèh owah-owahan wiwit pungkasan panjenengan niliki.',
 'enotif_lastdiff' => 'Tilikana $1 kanggo mirsani owah-owahan iki.',
 'enotif_anon_editor' => 'panganggo anonim $1',
@@ -2022,6 +2082,8 @@ Kanggo ngowahi préferènsi ing daftar pangawasan panjenengan, mangga mirsani
 
 Umpan balik lan pitulung sabanjuré:
 {{canonicalurl:{{MediaWiki:Helppage}}}}',
+'created' => 'kadamel',
+'changed' => 'kaubah',
 
 # Delete
 'deletepage' => 'Busak kaca',
@@ -2089,6 +2151,8 @@ Delok [[Special:ProtectedPages|daptar kaca sing dijaga]] kanggo daptar panjagan
 'prot_1movedto2' => '$1 dialihaké menyang $2',
 'protect-badnamespace-title' => 'Bilik jeneng sing ora bisa dijagani',
 'protect-badnamespace-text' => 'Kaca nèng bilik jeneng iki ora bisa dijagani.',
+'protect-norestrictiontypes-text' => 'Kaca iki ora isa diproteksi.',
+'protect-norestrictiontypes-title' => 'Kaca sing ora bisa diproteksi',
 'protect-legend' => 'Konfirmasi pangreksan',
 'protectcomment' => 'Alesan:',
 'protectexpiry' => 'Kadaluwarsa:',
@@ -2149,8 +2213,8 @@ Ing ngisor iki kapacak konfigurasi kanggo kaca '''$1''':",
 'undeletepagetext' => '{{PLURAL:$1|kaca iki wis dibusak nanging isih|$1 kaca iki wis dibusak nanging isih}} ana ing arsip lan bisa dibalèkaké.
 Arsip bisa diresiki sakala-kala.',
 'undelete-fieldset-title' => 'Mulihaké rèvisi',
-'undeleteextrahelp' => "Kanggo mbalèkaké kabèh sajarah kaca, kothongaké kabèh kothak-cèk lan klik '''''Balèkna'''''.
-Kanggo nglakoni pambalèkan pinilih, conthèngen kothak-cèk  sing magepokan karo révisi sing dipéngini lan klik '''''Balèkna'''''.
+'undeleteextrahelp' => "Kanggo mbalèkaké kabèh sajarah kaca, kothongaké kabèh kothak-cèk lan klik '''''{{int:undeletebtn}}'''''.
+Kanggo nglakoni pambalèkan pinilih, conthèngen kothak-cèk  sing magepokan karo révisi sing dipéngini lan klik '''''{{int:undeletebtn}}'''''.
 Mencèt tombol '''''Reset''''' bakal ngosongaké isi komentar lan kabèh kothak-cèk.",
 'undeleterevisions' => '$1 {{PLURAL:$1|révisi|révisi}} diarsipaké',
 'undeletehistory' => 'Yèn panjenengan mbalèkaké kaca, kabèh révisi bakal dibalèkaké jroning sajarah.
@@ -2174,7 +2238,7 @@ Panjenengan mbokmenawa ngetutaké pranala sing salah, utawa revisi iku wis dipul
 'undeletedrevisions-files' => '$1 {{PLURAL:$1|révisi|révisi}} lan $2 berkas dibalèkaké',
 'undeletedfiles' => '$1 {{PLURAL:$1|berkas|berkas}} dibalèkaké',
 'cannotundelete' => 'Olèhé mbatalaké pambusakan gagal;
-mbokmenawa wis ana wong liya sing luwih dhisik nglakoni pambatalan.',
+$1',
 'undeletedpage' => "'''$1 bisa dibalèkaké'''
 
 Delengen [[Special:Log/delete|log pambusakan]] kanggo data pambusakan lan pambalèkan.",
@@ -2206,7 +2270,7 @@ $1',
 'blanknamespace' => '(Utama)',
 
 # Contributions
-'contributions' => 'Sumbangan panganggo',
+'contributions' => 'Sumbangan {{GENDER:$1|panganggo}}',
 'contributions-title' => 'Kontribusi panganggo kanggo $1',
 'mycontris' => 'Kontribusi',
 'contribsub2' => 'Kanggo $1 ($2)',
@@ -2345,7 +2409,7 @@ Log brèdèlan sumadhiya nèng ngisor kanggo rujukan:',
 'reblock-logentry' => 'Ngowahi sèting pamblokiran [[$1]] kanthi wektu daluwarsa $2 $3',
 'blocklogtext' => 'Ing ngisor iki kapacak log pamblokiran lan panjabelan blokir panganggo.
 Alamat IP sing diblokir sacara otomatis ora ana ing daftar iki.
-Mangga mirsani [[Special:BlockList|daftar alamat IP sing diblokir]] kanggo daftar blokir pungkasan.',
+Mangga mirsani [[Special:BlockList|daftar panganggo sing diblokir]] kanggo daftar blokir pungkasan.',
 'unblocklogentry' => 'njabel blokir "$1"',
 'block-log-flags-anononly' => 'namung panganggo anonim waé',
 'block-log-flags-nocreate' => 'opsi nggawé akun utawa rékening dipatèni',
@@ -2410,6 +2474,17 @@ Gatèkna yèn kaca iki '''ora''' bakal dipindhah yèn wis ana kaca liyané sing
 '''PÈNGET!'''
 Perkara iki bisa ngakibataké owah-owahan sing drastis lan ora kaduga kanggo kaca-kaca sing populèr;
 pastekaké dhisik panjenengan ngerti konsekwènsi saka panggayuh panjenengan sadurungé dibanjuraké.",
+'movepagetext-noredirectfixer' => "Formulir di bawah ini digunakan untuk mengubah nama suatu halaman dan memindahkan semua data sejarah ke nama baru.
+Judul yang lama akan menjadi halaman peralihan menuju judul yang baru.
+Pastikan untuk memeriksa pengalihan [[Special:DoubleRedirects|ganda]] atau [[Special:BrokenRedirects|rusak]].
+Anda bertanggung jawab untuk memastikan bahwa pranala terus menyambung ke halaman yang seharusnya.
+
+Perhatikan bahwa halaman '''tidak''' akan dipindah apabila telah ada halaman yang menggunakan judul yang baru, kecuali bila halaman tersebut kosong atau merupakan halaman peralihan dan tidak mempunyai sejarah penyuntingan.
+Ini berarti Anda dapat mengubah nama halaman kembali seperti semula apabila Anda membuat kesalahan, dan Anda tidak dapat menimpa halaman yang telah ada.
+
+'''Peringatan:'''
+Hal ini dapat mengakibatkan perubahan yang tak terduga dan drastis bagi halaman yang populer;
+Pastikan Anda mengerti konsekuensi dari perbuatan ini sebelum melanjutkan.",
 'movepagetalktext' => "Kaca dhiskusi sing kagandhèng uga bakal dipindhahaké sacara otomatis '''kejaba yèn:'''
 
 *Sawijining kaca dhiskusi sing ora kosong wis ana sangisoring irah-irahan (judhul) anyar, utawa
@@ -2462,6 +2537,7 @@ Apa panjenengan kersa mbusak iku supaya kacané bisa dialihaké?',
 'immobile-target-namespace-iw' => 'Pranala interwiki dudu target sing sah kanggo pamindhahan kaca.',
 'immobile-source-page' => 'Kaca iki ora bisa dipindhahaké.',
 'immobile-target-page' => 'Ora bisa mindhahaké menyang irah-irahan tujuan kasebut.',
+'bad-target-model' => 'Halaman yang dituju menggunakan model isi yang berbeda. Tidak dapat mengonversi $1 ke $2.',
 'imagenocrossnamespace' => 'Ora bisa mindhahaké gambar menyang bilik nama non-gambar',
 'nonfile-cannot-move-to-file' => 'Ora bisa mindhahaké non-berkas nèng bilik jeneng berkas',
 'imagetypemismatch' => 'Èkstènsi anyar berkas ora cocog karo jenisé',
@@ -2540,6 +2616,7 @@ Kabèh aktivitas impor transwiki bakal dilog ing [[Special:Log/import|log impor]
 'import-interwiki-templates' => 'Katutna kabèh cithakan',
 'import-interwiki-submit' => 'Impor',
 'import-interwiki-namespace' => 'Bilik jeneng tujuan:',
+'import-interwiki-rootpage' => 'Halaman turunan tujuan (opsional):',
 'import-upload-filename' => 'Jeneng berkas:',
 'import-comment' => 'Komentar:',
 'importtext' => 'Mangga èkspor berkas saka wiki sumber nganggo [[Special:Export|prangkat èkspor]].
@@ -2572,6 +2649,10 @@ Simpen nèng komputer Sampéyan lan unggaha nèng kéné.',
 'import-error-interwiki' => 'Kaca "$1" ora diimpor amarga jenengé dicadhangaké kango pranala njaba (interwiki).',
 'import-error-special' => 'Kaca "$1" ora diimpor amarga kuwi kalebu nèng bilik jeneng kusus sing ora nglilakaké anané kaca.',
 'import-error-invalid' => 'Kaca "$1" ora diimpor amarga jenengé ora sah.',
+'import-error-unserialize' => 'Revisi $2 dari halaman "$1" tidak dapat di-\'\'unserialized\'\'. Revisi tersebut dilaporkan menggunakan model konten $3 diserialisasi sebagai $4.',
+'import-options-wrong' => '{{PLURAL:$2|Opsi|Opsi}} salah: <nowiki>$1</nowiki>',
+'import-rootpage-invalid' => 'Halaman turunan yang diberikan adalah judul yang salah.',
+'import-rootpage-nosubpage' => 'Ruang nama "$1" di halaman turunan tidak mengizinkan subhalaman.',
 
 # Import log
 'importlogpage' => 'Log impor',
@@ -2687,9 +2768,27 @@ Mbokmanawa iki disebabaké anané pranala jaba sing klebu daftar ireng.',
 
 # Info page
 'pageinfo-title' => 'Inpormasi kanggo "$1"',
+'pageinfo-not-current' => 'Maaf, tidak mungkin memberikan informasi ini ke revisi lama.',
+'pageinfo-header-basic' => 'Informasi dhasar',
 'pageinfo-header-edits' => 'Riwayat suntingan',
+'pageinfo-header-restrictions' => 'Perlindungan halaman',
+'pageinfo-header-properties' => 'Properti kaca',
+'pageinfo-display-title' => 'Judul tampilan',
+'pageinfo-default-sort' => 'Kunci urut baku',
+'pageinfo-length' => 'Panjang halaman (dalam bita)',
+'pageinfo-article-id' => 'ID kaca',
+'pageinfo-language' => 'Bahasa isi halaman',
+'pageinfo-robot-policy' => 'Status mesin pencari',
+'pageinfo-robot-index' => 'Dapat diindeks',
+'pageinfo-robot-noindex' => 'Tidak dapat diindeks',
 'pageinfo-views' => 'Cacahing delokan',
 'pageinfo-watchers' => 'Cacahé pangawas kaca',
+'pageinfo-redirects-name' => 'Pengalihan ke halaman ini',
+'pageinfo-subpages-name' => 'Subhalaman halaman ini',
+'pageinfo-subpages-value' => '$1 ($2 {{PLURAL:$2|pengalihan|pengalihan}}; $3 {{PLURAL:$3|non-pengalihan|non-pengalihan}})',
+'pageinfo-firstuser' => 'Pembuat halaman',
+'pageinfo-firsttime' => 'Tanggal pembuatan halaman',
+'pageinfo-lastuser' => 'Penyunting terakhir',
 'pageinfo-lasttime' => 'Tanggal suntingan pungkasan',
 'pageinfo-edits' => 'Cacahé kabèh suntingan',
 'pageinfo-authors' => 'Cacahé kabèh panganggit sing bédha-bédha.',
@@ -2697,12 +2796,20 @@ Mbokmanawa iki disebabaké anané pranala jaba sing klebu daftar ireng.',
 'pageinfo-recent-authors' => 'Cacahé panganggit sing bédha-bédha saiki',
 'pageinfo-magic-words' => '{{PLURAL:$1|Tembung|Tembung}} mujarab ($1)',
 'pageinfo-hidden-categories' => '{{PLURAL:$1|Katégori|Katégori}} kadhelikaké ($1)',
+'pageinfo-templates' => '{{PLURAL:$1|Templat|Templat}} yang ditransklusi ($1)',
+'pageinfo-transclusions' => '{{PLURAL:$1|Kaca|Kaca}} sing ditransklusi ing ($1)',
 'pageinfo-toolboxlink' => 'Informasi kaca',
 'pageinfo-redirectsto' => 'Dialihaké dhateng',
 'pageinfo-redirectsto-info' => 'info',
 'pageinfo-contentpage' => 'Diétung minangka satunggaling kaca isi',
 'pageinfo-contentpage-yes' => 'Iya',
+'pageinfo-protect-cascading' => 'Proteksi runtun',
 'pageinfo-protect-cascading-yes' => 'Iya',
+'pageinfo-protect-cascading-from' => 'Proteksi runtun saking',
+'pageinfo-category-info' => 'Informasi kategori',
+'pageinfo-category-pages' => 'Cacahing kaca',
+'pageinfo-category-subcats' => 'Jumlah subkategori',
+'pageinfo-category-files' => 'Cacahing gambar',
 
 # Patrolling
 'markaspatrolleddiff' => 'Tandhanana wis dipatroli',
@@ -2714,6 +2821,8 @@ Mbokmanawa iki disebabaké anané pranala jaba sing klebu daftar ireng.',
 'markedaspatrollederror' => 'Ora bisa awèh tandha wis dipatroli',
 'markedaspatrollederrortext' => 'Panjenengan kudu nentokaké sawijining révisi kanggo ditandhani minangka sing dipatroli.',
 'markedaspatrollederror-noautopatrol' => 'Panjenengan ora pareng nandhani suntingan panjenengan dhéwé minangka dipatroli.',
+'markedaspatrollednotify' => 'Perubahan $1 telah dipatroli.',
+'markedaspatrollederrornotify' => 'Penanda patroli gagal dibuat.',
 
 # Patrol log
 'patrol-log-page' => 'Log patroli',
@@ -2746,6 +2855,8 @@ Yèn dilakokaké, sistem Sampéyan bisa kaserang.",
 'file-info-size-pages' => '$1 × $2 piksel, gedhéné berkas: $3, jinisé MIME: $4, $5 {{PLURAL:$5|kaca|kaca}}',
 'file-nohires' => 'Ora ana résolusi sing luwih dhuwur.',
 'svg-long-desc' => 'Berkas SVG, nominal $1 × $2 piksel, gedhené berkas: $3',
+'svg-long-desc-animated' => 'Berkas SVG, nominal $1 × $2 piksel, gedhené berkas: $3',
+'svg-long-error' => 'Berkas SVG ora sah: $1',
 'show-big-image' => 'Résolusi kebak',
 'show-big-image-preview' => 'Gedhéné pratayang iki: $1',
 'show-big-image-other' => '{{PLURAL:$2|Résolusi|Résolusi}} liya: $1.',
@@ -2755,6 +2866,8 @@ Yèn dilakokaké, sistem Sampéyan bisa kaserang.",
 'file-info-png-looped' => 'mubeng',
 'file-info-png-repeat' => 'diputer {{PLURAL:$1|ping|ping}} $1',
 'file-info-png-frames' => '$1 {{PLURAL:$1|rangka|rangka}}',
+'file-no-thumb-animation' => "'''Catatan: Karena keterbatasan teknis, cuplikan berkas ini tidak akan teranimasikan.'''",
+'file-no-thumb-animation-gif' => "'''Catatan: Karena keterbatasan teknis, cuplikan gambar GIF beresolusi tinggi seperti yang satu ini tidak akan teranimasikan.'''",
 
 # Special:NewFiles
 'newimages' => 'Galeri berkas anyar',
@@ -2773,7 +2886,10 @@ Yèn dilakokaké, sistem Sampéyan bisa kaserang.",
 'minutes' => '{{PLURAL:$1|$1 menit|$1 menit}}',
 'hours' => '{{PLURAL:$1|$1 jam|$1 jam}}',
 'days' => '{{PLURAL:$1|$1 dina|$1 dina}}',
+'months' => '{{PLURAL:$1|$1 sasi|$1 sasi}}',
+'years' => '{{PLURAL:$1|$1 taun|$1 taun}}',
 'ago' => '$1 kapungkur',
+'just-now' => 'baru saja',
 
 # Bad image list
 'bad_image_list' => "Formaté kaya mengkéné:
@@ -2981,6 +3097,9 @@ Pranala-pranala sabanjuré ing baris sing padha dianggep minangka ''pengecualian
 
 # EXIF attributes
 'exif-compression-1' => 'Ora dikomprèsi',
+'exif-compression-2' => 'CCITT Group 3 1-Dimensional Modified Huffman RLE',
+'exif-compression-3' => 'CCITT Group 3 fax encoding',
+'exif-compression-4' => 'CCITT Group 4 fax encoding',
 
 'exif-copyrighted-true' => 'Mawa hak cipta',
 'exif-copyrighted-false' => 'Domain umum',
@@ -3149,6 +3268,7 @@ Pranala-pranala sabanjuré ing baris sing padha dianggep minangka ''pengecualian
 'exif-gpsdirection-m' => 'Arah magnètis',
 
 'exif-ycbcrpositioning-1' => 'Kapusat',
+'exif-ycbcrpositioning-2' => 'Atas (co-sited)',
 
 'exif-dc-contributor' => 'Kontributor',
 'exif-dc-coverage' => 'Cakepan latar utawa wektu média',
@@ -3227,6 +3347,24 @@ Yèn panjenengan *ora tau* ndaftar akun iki, tutna pranala ing ngisor iki kanggo
 
 $5
 
+Konfirmasi iki bakal kadaluwarsa ing $4.',
+'confirmemail_body_changed' => 'Sawijining wong, mbokmenawa panjenengan dhéwé, saka alamat IP $1, wis ndaftaraké akun "$2" mawa alamat e-mail iki ing {{SITENAME}}. Bukaka pranala iki ing panjlajah wèb panjenengan.
+
+$3
+
+Yèn panjenengan *ora tau* ndaftar akun iki, tutna pranala ing ngisor iki kanggo mbatalaké konfirmasi alamat e-mail:
+
+$5
+
+Konfirmasi iki bakal kadaluwarsa ing $4.',
+'confirmemail_body_set' => 'Sawijining wong, mbokmenawa panjenengan dhéwé, saka alamat IP $1, wis ndaftaraké akun "$2" mawa alamat e-mail iki ing {{SITENAME}}. Bukaka pranala iki ing panjlajah wèb panjenengan.
+
+$3
+
+Yèn panjenengan *ora tau* ndaftar akun iki, tutna pranala ing ngisor iki kanggo mbatalaké konfirmasi alamat e-mail:
+
+$5
+
 Konfirmasi iki bakal kadaluwarsa ing $4.',
 'confirmemail_invalidated' => 'Pandhedhesan (konfirmasi) alamat e-mail batal',
 'invalidateemail' => 'Batalna pandhedhesan (konfirmasi) e-mail',
@@ -3234,6 +3372,7 @@ Konfirmasi iki bakal kadaluwarsa ing $4.',
 # Scary transclusion
 'scarytranscludedisabled' => '[Transklusi cithakan interwiki dipatèni]',
 'scarytranscludefailed' => '[Olèhé njupuk cithakan $1 gagal]',
+'scarytranscludefailed-httpstatus' => '[Pengambilan templat $1 gagal: HTTP $2]',
 'scarytranscludetoolong' => '[URL-é kedawan]',
 
 # Delete conflict
@@ -3343,6 +3482,12 @@ Panjenengan uga bisa [[Special:EditWatchlist|nganggo éditor standar panjenengan
 'version-license' => 'Lisènsi',
 'version-poweredby-credits' => "Wiki iki disengkuyung déning '''[//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.
+
+MediaWiki didistribusikan dengan harapan dapat digunakan, tetapi TANPA JAMINAN APA PUN; tanpa jaminan PERDAGANGAN atau KECOCOKAN UNTUK TUJUAN TERTENTU. Lihat Lisensi Publik Umum GNU untuk informasi lebih lanjut.
+
+Anda seharusnya telah menerima [{{SERVER}}{{SCRIPTPATH}}/COPYING salinan Lisensi Publik Umum GNU] bersama dengan program ini; jika tidak, kirim surat ke Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA atau [//www.gnu.org/licenses/old-licenses/gpl-2.0.html baca daring].',
 'version-software' => "''Software'' wis diinstalasi",
 'version-software-product' => 'Prodhuk',
 'version-software-version' => 'Vèrsi',
@@ -3478,8 +3623,12 @@ Gambar dituduhaké mawa résolusi kebak lan tipe liyané berkas bakal dibuka lan
 'logentry-newusers-newusers' => 'Akun panganggo $1 digawé',
 'logentry-newusers-create' => 'Akun panganggo $1 digawé',
 'logentry-newusers-create2' => 'Akun panganggo $3 digawé déning $1',
+'logentry-newusers-byemail' => 'Akun pengguna $3 dibuat oleh $1 dan kata sandi dikirim melalui e-mail',
 'logentry-newusers-autocreate' => 'Akun $1 digawé otomatis',
-'newuserlog-byemail' => 'tembung sandhi wis dikirim liwat e-mail',
+'logentry-rights-rights' => 'ngganti kaanggotan kelompok kanggo $3 saka $4 dadi $5',
+'logentry-rights-rights-legacy' => '$1 mengubah keanggotaan grup $3',
+'logentry-rights-autopromote' => 'otomatis ditawakaké saka $4 nèng $5',
+'rightsnone' => '(ora ana)',
 
 # Feedback
 'feedback-bugornote' => 'Yèn Sampéyan siap njelasaké masalah tèhnis kanthi rinci mangga [$1 laporaké bug].
@@ -3533,6 +3682,7 @@ Utawa, Sampéyan bisa nganggo pormulir gampang ngisor. Tanggepan Sampéyan bakal
 'api-error-ok-but-empty' => 'Kasalahan njero: Ora ana tanggepan saka sasana.',
 'api-error-overwrite' => 'Nibani berkas sing wis ana ora dililakaké.',
 'api-error-stashfailed' => 'Kasalahan njero: Sasana gagal nyèlèhaké berkas sawetara.',
+'api-error-publishfailed' => 'Kasalahan njero: Sasana gagal nyèlèhaké berkas sawetara.',
 'api-error-timeout' => 'Sasana ora nanggepi nèng wektu sing karepaké.',
 'api-error-unclassified' => 'Ana masalah sing ora dingertèni.',
 'api-error-unknown-code' => 'Kasalahan ora dingertèni: "$1".',
index 1c197f7..8859f3a 100644 (file)
@@ -211,6 +211,7 @@ $messages = array(
 'tog-ccmeonemails' => 'გამომიგზავნე ელფოსტების ასლები, რომლებსაც მე სხვა მომხმარებლებს ვუგზავნი',
 'tog-diffonly' => 'დამალე გვერდის შიგთავსი ცვლილების ქვევით',
 'tog-showhiddencats' => 'დამალული კატეგორიების ჩვენება',
+'tog-noconvertlink' => 'სათაურის გარდაქმნის ბმულის გამორთვა',
 'tog-norollbackdiff' => 'გამოტოვეთ ცვლილება გაუქმებისას',
 
 'underline-always' => 'მუდამ',
@@ -303,6 +304,7 @@ $messages = array(
 'newwindow' => '(ახალ ფანჯარაში)',
 'cancel' => 'გაუქმება',
 'moredotdotdot' => 'ვრცლად...',
+'morenotlisted' => 'მეტი არ არის ნაჩვენები...',
 'mypage' => 'გვერდი',
 'mytalk' => 'განხილვა',
 'anontalk' => 'ამ IP-ს განხილვა',
@@ -754,6 +756,7 @@ $2
 'changeemail-oldemail' => 'ელ-ფოსტის ამჟამინდელი მისამართი:',
 'changeemail-newemail' => 'ახალი ელ-ფოსტის მისამართი:',
 'changeemail-none' => '(არაფერი)',
+'changeemail-password' => 'თქვენი პაროლი პროექტში {{SITENAME}}:',
 'changeemail-submit' => 'ელ-ფოსტის შეცვლა',
 'changeemail-cancel' => 'გაუქმება',
 
@@ -936,7 +939,6 @@ $2
 'hiddencategories' => 'ეს გვერდი გაერთიანებულია $1 დამალულ კატეგორიაში.',
 'edittools' => '<!-- აქ განთავსებული ტექსტი ნაჩვენები იქნება რედაქტირებისა და ატვირთვის ფორმების ქვეშ. -->',
 'edittools-upload' => '-',
-'nocreatetitle' => 'გვერდის შექმნა ლიმიტირებულია',
 'nocreatetext' => 'ამ გვერდზე შეუძლებელია ახალი გვერდის შექმნა არსებული აკრძალვის გამო. თქვენ შეგიძლიათ უკან დაბრუნება და არსებული გვერდის რედაქტირება ან [[სპეციალური:Userlogin|შესვლა და ანგარიშის შექმნა]]',
 'nocreate-loggedin' => 'თქვენ არ გაქვთ ახალი გვერდების შექმნის უფლება.',
 'sectioneditnotsupported-title' => 'სექციის რედაქტირება ვერ ხერხდება',
@@ -1387,6 +1389,7 @@ $1",
 'saveusergroups' => 'მომხმარებელთა ჯგუფების შენახვა',
 'userrights-groupsmember' => 'ჯგუფის წევრი:',
 'userrights-groupsmember-auto' => 'ნაგულისხმევი წევრი:',
+'userrights-groupsmember-type' => '$1',
 'userrights-groups-help' => 'თქვენ შეგიძლიათ შეცვალოთ ჯგუფები, რომელშიც შედის ეს მომხმარებელი.
 * თუ ჯგუფის სახელწოდებასთან გაკეთებულია ნიშნული, ე.ი მომხმარებელი შედის ამ ჯგუფში.
 * თუ ნიშნული არ არის – მომხმარებელი არ განეკუთვნება არსებულ ჯგუფს.
@@ -1486,15 +1489,13 @@ $1",
 'right-sendemail' => 'გაგუგზავნე ელექტრონული ფოსტა სხვა მომხმარებლებს',
 'right-passwordreset' => 'ელ.ფოსტის ნახვა პაროლის შეცვლით',
 
+# Special:Log/newusers
+'newuserlogpage' => 'მომხმარებლის რეგისტრაციის ჟურნალი',
+'newuserlogpagetext' => 'ბოლო დროს დარეგისტრირებულ მომხმარებელთა სია',
+
 # User rights log
 'rightslog' => 'მომხმარებლის უფლებების ჟურნალი',
 'rightslogtext' => 'მომხმარებელთა უფლებების ცვლილებათა ჟურბალი',
-'rightslogentry' => 'შესწორდა მომხმარებლის ჯგუფები $1  $2-დან  $3-ზე',
-'rightslogentry-autopromote' => 'ავტომატურად იქნა გადაყვანილი $2–დან $3–ში',
-'logentry-rights-rights' => '$1 შეცვალა ჯგუფის წევრობა $3-თვის $4-დან $5-ზე',
-'logentry-rights-rights-legacy' => '$1 შეცვალა ჯგუფის წევრობა $3-თვის',
-'logentry-rights-autopromote' => '$1 ავტომატურად იქნა გადაყვანილი $4–დან $5–ში',
-'rightsnone' => '(არცერთი)',
 
 # Associated actions - in the sentence "You do not have permission to X"
 'action-read' => 'ამ გვერდის კითხვა',
@@ -2114,7 +2115,7 @@ $1',
 'linksearch-ok' => 'ძიება',
 'linksearch-text' => 'შესაძლებელია გამოიყენოთ ქვეხაზოვანი სიმბოლოები, მაგალითად, "*.wikipedia.org".
 უკიდურეს შემთხვევაში საჭიროა ზედა დონის დომენი, მაგალითად "*.org"<br />
-მხარდამჭერი პროტოკოლები: <code>$1</code> (სტანდარტულად http:// თუკი პროტოკოლი არ არის მითითებული)',
+მხარდამჭერი {{PLURAL:$2|პროტოკოლი|პროტოკოლები}}: <code>$1</code> (სტანდარტულად http:// თუკი პროტოკოლი არ არის მითითებული)',
 'linksearch-line' => 'ბმულები $1-ზე  $2-დან',
 'linksearch-error' => 'წარმოდგენილი სიმბოლოების გამოყენება შესაძლებელია მხოლოდ მისამართის დასაწყისში.',
 
@@ -2127,16 +2128,12 @@ $1',
 # Special:ActiveUsers
 'activeusers' => 'აქტიურ მომხმარებელთა სია',
 'activeusers-intro' => 'ეს არის მომხმარებელთა სია, რომელთაც აქვს წვლილი უკანასკნელი $1 {{PLURAL:$1|დღის|დღის}} განმავლობაში.',
-'activeusers-count' => '$1 {{PLURAL:$1|á\83ªá\83\95á\83\9aá\83\98á\83\9aá\83\94á\83\91á\83\90\83ªá\83\95á\83\9aá\83\98á\83\9aá\83\94á\83\91á\83\90}} {{PLURAL:$2|$3 á\83\93á\83¦á\83\94|$3 დღის}} განმავლობაში.',
+'activeusers-count' => '$1 {{PLURAL:$1|á\83\9bá\83\9dá\83¥á\83\9bá\83\94á\83\93á\83\94á\83\91á\83\90\83\9bá\83\9dá\83¥á\83\9bá\83\94á\83\93á\83\94á\83\91á\83\90}} {{PLURAL:$3|á\83\93á\83¦á\83\98á\83¡|$3 დღის}} განმავლობაში.',
 'activeusers-from' => 'მომხმარებელთა ჩვენება, დაწყებული:',
 'activeusers-hidebots' => 'რობოტების დამალვა',
 'activeusers-hidesysops' => 'ადმინისტრატორების დამალვა',
 'activeusers-noresult' => 'მომხმარებლები არ არიან ნაპოვნი.',
 
-# Special:Log/newusers
-'newuserlogpage' => 'მომხმარებლის რეგისტრაციის ჟურნალი',
-'newuserlogpagetext' => 'ბოლო დროს დარეგისტრირებულ მომხმარებელთა სია',
-
 # Special:ListGroupRights
 'listgrouprights' => 'მომხმარებელთა ჯგუფების უფლებები',
 'listgrouprights-summary' => 'ქვემოთ წარმოდგენილია ამ ვიკიში გარკვეულ ჯგუფთა სია და მათი უფლებები.
@@ -2180,7 +2177,7 @@ $1',
 'emailusernamesubmit' => 'შენახვა',
 'email-legend' => 'წერილის გაგზავნა სხვა მომხმარებლისადმი {{grammar:genitive|{{SITENAME}}}}',
 'emailfrom' => 'გამომგზავნი:',
-'emailto' => 'á\83\90á\83\93á\83 á\83\94á\83¡á\83\90á\83¢ი:',
+'emailto' => 'á\83\9bá\83\98á\83\9bá\83¦á\83\94á\83\91ი:',
 'emailsubject' => 'თემა:',
 'emailmessage' => 'შეტყობინება:',
 'emailsend' => 'გაგზავნა',
@@ -2196,7 +2193,7 @@ $1',
 'usermessage-template' => 'MediaWiki:მომხმარებლის შეტყობინება',
 
 # Watchlist
-'watchlist' => 'á\83©á\83\94á\83\9bá\83\98 á\83\99á\83\9dá\83\9cá\83¢á\83 á\83\9dá\83\9aá\83\98á\83¡ á\83¡á\83\98á\83\90',
+'watchlist' => 'კონტროლის სია',
 'mywatchlist' => 'კონტროლის სია',
 'watchlistfor2' => '$1 ($2) თვის',
 'nowatchlist' => 'თქვენი კონტროლის სია ცარიელია.',
@@ -2206,8 +2203,8 @@ $1',
 'watchnologin' => 'რეგისტრაცია ვერ შესრულდა',
 'watchnologintext' => 'თქვენ უნდა მოახდინოთ [[Special:UserLogin|რეგისტრაცია]] თქვენი კონტროლის სიის მოდიფიცირებისათვის.',
 'addwatch' => 'კონტროლის სიაში დამატება',
-'addedwatchtext' => "გვერდი „[[:$1]]“ დაემატა თქვენს [[Special:Watchlist|კონტროლის სიას]]. 
-ამ და მასთან დაკავშირებული განხილვის გვერდის შემდგომი ცვლილებები აისახება '''გამუქებულად''' [[Special:RecentChanges|ბოლო ცვლილებების სიაში]], რათა ადვილად დაინახოთ იგი. თუ გსურთ მისი კონტროლის სიიდან ამოშლა, დააწკაპეთ „კონტროლის მოხსნას“ ზედა დაფაზე.",
+'addedwatchtext' => 'გვერდი „[[:$1]]“ დაემატა თქვენს [[Special:Watchlist|კონტროლის სიას]].
+ამ და მასთან დაკავშირებული განხილვის გვერდის შემდგომი ცვლილებები აისახება იქ.',
 'removewatch' => 'კონტროლის სიიდან წაშლა',
 'removedwatchtext' => 'გვერდი „[[:$1]]“ ამოღებულია თქვენი [[Special:Watchlist|კონტროლის სიიდან]].',
 'watch' => 'კონტროლი',
@@ -2241,7 +2238,7 @@ $1',
 'enotif_subject_moved' => 'გვერდი პროექტიდან „{{SITENAME}}“ სახელწოდებით „$1“ გადაიტანა {{gender:$2|მომხმარებელმა}} $2',
 'enotif_subject_restored' => 'გვერდი პროექტიდან „{{SITENAME}}“ სახელწოდებით „$1“ აღადგინა {{gender:$2|მომხმარებელმა}} $2',
 'enotif_subject_changed' => 'გვერდი პროექტიდან „{{SITENAME}}“ სახელწოდებით „$1“ შეცვალა {{gender:$2|მომხმარებელმა}} $2',
-'enotif_body_intro_deleted' => '$PAGEEDITDATE {{gender:$2|á\83\9bá\83\9dá\83\9bá\83®á\83\9bá\83\90á\83 á\83\94á\83\91á\83\94á\83\9aá\83\9bá\83\90}} $2 á\83¬á\83\90á\83¨á\83\90á\83\9aá\83\90 á\83\92á\83\95á\83\94á\83 á\83\93á\83\98 á\83\9eá\83 á\83\9dá\83\94á\83¥á\83¢á\83\98á\83\93á\83\90á\83\9c â\80\9e{{SITENAME}}â\80\9c á\83¡á\83\90á\83®á\83\94á\83\9aá\83¬á\83\9dá\83\93á\83\94á\83\91á\83\98á\83\97 â\80\9e$1â\80\9c, á\83\9bá\83\98á\83\9bá\83\93á\83\98á\83\9cá\83\90á\83 á\83\94 á\83\95á\83\94á\83 á\83¡á\83\98á\83\90 á\83\98á\83®á\83\98á\83\9aá\83\98á\83\94á\83\97 á\83\91á\83\9bá\83£á\83\9aá\83\96á\83\94: $3',
+'enotif_body_intro_deleted' => '$PAGEEDITDATE {{gender:$2|á\83\9bá\83\9dá\83\9bá\83®á\83\9bá\83\90á\83 á\83\94á\83\91á\83\94á\83\9aá\83\9bá\83\90}} $2 á\83¬á\83\90á\83¨á\83\90á\83\9aá\83\90 á\83\92á\83\95á\83\94á\83 á\83\93á\83\98 á\83\9eá\83 á\83\9dá\83\94á\83¥á\83¢á\83\98á\83\93á\83\90á\83\9c â\80\9e{{SITENAME}}â\80\9c á\83¡á\83\90á\83®á\83\94á\83\9aá\83¬á\83\9dá\83\93á\83\94á\83\91á\83\98á\83\97 â\80\9e$1â\80\9c, á\83\98á\83®á\83\98á\83\9aá\83\94á\83\97 $3.',
 'enotif_body_intro_created' => '$PAGEEDITDATE {{gender:$2|მომხმარებელმა}} $2 შექმნა გვერდი პროექტიდან „{{SITENAME}}“ სახელწოდებით „$1“, მიმდინარე ვერსია იხილიეთ ბმულზე: $3',
 'enotif_body_intro_moved' => '$PAGEEDITDATE {{gender:$2|მომხმარებელმა}} $2 გადაიტანა გვერდი პროექტიდან „{{SITENAME}}“ სახელწოდებით „$1“, მიმდინარე ვერსია იხილიეთ ბმულზე: $3',
 'enotif_body_intro_restored' => '$PAGEEDITDATE {{gender:$2|მომხმარებელმა}} $2 აღადგინა გვერდი პროექტიდან „{{SITENAME}}“ სახელწოდებით „$1“, მიმდინარე ვერსია იხილიეთ ბმულზე: $3',
@@ -2275,6 +2272,8 @@ $UNWATCHURL
 
 დამატებითი ინფორმაცია
 {{canonicalurl:{{MediaWiki:Helppage}}}}',
+'created' => 'შექმნილია',
+'changed' => 'შეცვლილი',
 
 # Delete
 'deletepage' => 'გვერდის წაშლა',
@@ -2345,6 +2344,7 @@ $UNWATCHURL
 'prot_1movedto2' => '[[$1]] გადატანილია გვერდზე [[$2]]',
 'protect-badnamespace-title' => 'დაუცველი სახელთა სივრცე',
 'protect-badnamespace-text' => 'ამ სახელთა სივრცის გვერდების დაცვა შეუძლებელია.',
+'protect-norestrictiontypes-title' => 'დაუცველი გვერდი',
 'protect-legend' => 'დაცვის დადასტურება',
 'protectcomment' => 'მიზეზი:',
 'protectexpiry' => 'ვადა',
@@ -2360,9 +2360,10 @@ $UNWATCHURL
 'protect-cascadeon' => 'ეს გვერდი ამჟამად დაცულია, ვინაიდან იგი ნაწილია ამ {{PLURAL:$1|გვერდის, რომელსაც|გვერდების, რომელთაც}} კასკადური დაცვა აქვს ჩართული.
 თქვენ შეგიძლიათ ამ გვერდის დაცვის დონე შეცვალოთ, თუმცა ეს კასკადურ დაცვაზე გავლენას არ იქონიებს.',
 'protect-default' => 'ყველა მომხმარებელი',
-'protect-fallback' => 'á\83¡á\83\90á\83­á\83\98á\83 á\83\9dá\83\90 â\80\9e$1-á\83\98á\83¡â\80\9c á\83£á\83¤á\83\9aá\83\94á\83\91á\83\90',
-'protect-level-autoconfirmed' => 'á\83\90á\83®á\83\90á\83\9aá\83\98 á\83\93á\83\90 á\83\90á\83 á\83\90á\83 á\83\94á\83\92á\83\98á\83¡á\83¢á\83 á\83\98á\83 á\83\94á\83\91á\83£á\83\9aá\83\98 á\83\9bá\83\9dá\83\9bá\83®á\83\9bá\83\90á\83 á\83\94á\83\91á\83\9aá\83\94á\83\91á\83\98á\83¡á\83\90á\83\92á\83\90á\83\9c á\83\93á\83\90á\83ªá\83\95á\83\90',
+'protect-fallback' => 'á\83®á\83\94á\83\9aá\83\9bá\83\98á\83¡á\83\90á\83¬á\83\95á\83\93á\83\9dá\83\9bá\83\98á\83\90 á\83\9bá\83®á\83\9dá\83\9aá\83\9dá\83\93 â\80\9e$1-á\83\98á\83¡â\80\9c á\83£á\83¤á\83\9aá\83\94á\83\91á\83\98á\83¡ á\83\9bá\83¥á\83\9dá\83\9cá\83\94 á\83\9bá\83\9dá\83\9bá\83®á\83\9bá\83\90á\83 á\83\94á\83\91á\83\9aá\83\94á\83\91á\83\98á\83¡á\83\90á\83\97á\83\95á\83\98á\83¡',
+'protect-level-autoconfirmed' => 'á\83®á\83\94á\83\9aá\83\9bá\83\98á\83¡á\83\90á\83¬á\83\95á\83\93á\83\9dá\83\9bá\83\98á\83\90 á\83\9bá\83®á\83\9dá\83\9aá\83\9dá\83\93 á\83\90á\83\95á\83¢á\83\9dá\83\9bá\83\90á\83¢á\83£á\83 á\83\90á\83\93 á\83\93á\83\90á\83\93á\83\90á\83¡á\83¢á\83£á\83 á\83\94á\83\91á\83£á\83\9aá\83\98 á\83\9bá\83\9dá\83\9bá\83®á\83\9bá\83\90á\83 á\83\94á\83\91á\83\9aá\83\94á\83\91á\83\98á\83¡á\83\90á\83\97á\83\95á\83\98á\83¡',
 'protect-level-sysop' => 'მხოლოდ ადმინისტრატორები',
+'protect-summary-desc' => '[$1=$2] ($3)',
 'protect-summary-cascade' => 'იერარქიული',
 'protect-expiring' => 'ვადა გასდის: $1 (UTC)',
 'protect-expiring-local' => 'ვადის გასვლის თარიღია $1',
@@ -2656,11 +2657,18 @@ $1',
 # Move page
 'move-page' => '$1 — გადატანა',
 'move-page-legend' => 'გვერდის გადატანა',
-'movepagetext' => 'ქვემოთ მოცემული ფორმა გვერდს სახელს გადაარქმევს, რაც გადაიტანს მასთან დაკავშირებულ ისტორიასაც ახალ სახელზე. ძველი სათაური გახდება გადამისამართების გვერდი ახალ სათაურზე. ბმულები ძველი გვერდის სათაურზე არ შეიცვლება; შეამოწმეთ ორმაგი ან გამწყდარი გადამისამართებები. თქვენ ხართ პასუხისმგებელი, რომ ბმულები მკითხველს დანიშნულებისამებრ მიიყვანს.
+'movepagetext' => "ქვემოთ მოცემული ფორმა გვერდს სახელს გადაარქმევს, რაც გადაიტანს მასთან დაკავშირებულ ისტორიასაც ახალ სახელზე. 
+ძველი სათაური გახდება გადამისამართების გვერდი ახალ სათაურზე. 
+ბმულები ძველი გვერდის სათაურზე არ შეიცვლება; 
+შეამოწმეთ [[Special:DoubleRedirects|ორმაგი]] ან [[Special:BrokenRedirects|გამწყდარი გადამისამართებები]]. 
+თქვენ ხართ პასუხისმგებელი, რომ ბმულები მკითხველს დანიშნულებისამებრ მიიყვანს.
 
-გაითვალისწინეთ, რომ გვერდი არ გადავა, თუ ახალი სათაურით სტატია უკვე არსებობს, გარდა იმ შემთხვევისა, თუ ის ცარიელია ან გადამისამართებაა და არ აქვს გვერდის რედაქტირების ისტორია. ეს ნიშნავს, რომ თქვენ შეგიძლიათ დაუბრუნოთ ძველი სახელი გვერდს, თუ შეცდომა დაუშვით, მაგრამ არ შეგიძლიათ ზემოთ გადააწეროთ არსებულ გვერდს.
+გაითვალისწინეთ, რომ გვერდი არ გადავა, თუ ახალი სათაურით სტატია უკვე არსებობს, გარდა იმ შემთხვევისა, თუ ის ცარიელია ან გადამისამართებაა და არ აქვს გვერდის რედაქტირების ისტორია. 
+ეს ნიშნავს, რომ თქვენ შეგიძლიათ დაუბრუნოთ ძველი სახელი გვერდს, თუ შეცდომა დაუშვით, მაგრამ არ შეგიძლიათ ზემოთ გადააწეროთ არსებულ გვერდს.
 
-<b>გაფრთხილებთ!</b> ამ მოქმედებამ შეიძლება მნიშვნელოვანი და მოულოდნელი ცვლილება გამოიწვის პოპულარულ გვერდზე; სანამ გააგრძელებდეთ, გთხოვთ დარწმუნდეთ, რომ თქვენ გესმით თქვენი ქმედების შედეგები.',
+'''ფრთხილად!'''
+ამ მოქმედებამ შეიძლება მნიშვნელოვანი და მოულოდნელი ცვლილება გამოიწვის პოპულარულ გვერდზე; 
+სანამ გააგრძელებდეთ, გთხოვთ დარწმუნდეთ, რომ თქვენ გესმით თქვენი ქმედების შედეგები.",
 'movepagetext-noredirectfixer' => "ქვემოთ მოცემული ფორმა გვერდს სახელს გადაარქმევს, რაც გადაიტანს მასთან დაკავშირებულ ისტორიასაც ახალ სახელზე. 
 ძველი სათაური გახდება გადამისამართების გვერდი ახალ სათაურზე.
 შეამოწმეთ [[Special:DoubleRedirects|ორმაგი]] ან [[Special:BrokenRedirects|გამწყდარი]] გადამისამართებები. 
@@ -2959,8 +2967,8 @@ $1',
 
 # Spam protection
 'spamprotectiontitle' => 'სპამ-ფილტრი',
-'spamprotectiontext' => 'á\83\92á\83\95á\83\94á\83 á\83\93á\83\98, á\83 á\83\9dá\83\9bá\83\9aá\83\98á\83¡ á\83¨á\83\94á\83\9cá\83\90á\83®á\83\95á\83\90á\83¡á\83\90á\83ª á\83ªá\83\93á\83\98á\83\9aá\83\9dá\83\91á\83\97 á\83\93á\83\90á\83\91á\83\9aá\83\9dá\83\99á\83\98á\83\9aá\83\98á\83\90 á\83¡á\83\9eá\83\90á\83\9b\83¤á\83\9aá\83\98ტრით.
\83¡á\83\90á\83\95á\83\90á\83 á\83\90á\83£á\83\93á\83\9dá\83\93, á\83\97á\83¥á\83\95á\83\94á\83\9cá\83¡ á\83\9bá\83\98á\83\94á\83  á\83©ამატებული ვებ-გვერდის მისამართი შავ სიაშია.',
+'spamprotectiontext' => 'á\83\98á\83\9cá\83¢á\83\94á\83 á\83\9cá\83\94á\83¢-á\83 á\83\94á\83¡á\83£á\83 á\83¡á\83\98, á\83 á\83\9dá\83\9bá\83\9aá\83\98á\83¡ á\83¨á\83\94á\83\9cá\83\90á\83®á\83\95á\83\90á\83¡á\83\90á\83ª á\83ªá\83\93á\83\98á\83\9aá\83\9dá\83\91á\83\97, á\83\93á\83\90á\83\91á\83\9aá\83\9dá\83\99á\83\98á\83\9aá\83\98á\83\90 á\83¡á\83\9eá\83\90á\83\9b\83¤á\83\98á\83\9aტრით.
\83¡á\83\90á\83\95á\83\90á\83 á\83\90á\83£á\83\93á\83\9dá\83\93, á\83\97á\83¥á\83\95á\83\94á\83\9cá\83¡ á\83\9bá\83\98á\83\94á\83  á\83\93ამატებული ვებ-გვერდის მისამართი შავ სიაშია.',
 'spamprotectionmatch' => 'მომდევნო ტექსტი იყო სპამ-ფილტრის ჩართვის მიზეზი: $1',
 'spambot_username' => 'სპამის გასუფთავება',
 'spam_reverting' => 'დაბრუნება ბოლო ვერსიასთან, რომელიც არ შეიცავს ბმულს $1-თან',
@@ -2999,6 +3007,7 @@ $1',
 'pageinfo-magic-words' => 'ჯადოსნური {{PLURAL:$1|სიტყვა|სიტყვა}} ($1)',
 'pageinfo-hidden-categories' => 'დამალული {{PLURAL:$1|კატეგორია|კატეგორია}} ($1)',
 'pageinfo-templates' => 'ინტეგრირებულია {{PLURAL:$1|თარგი|თარგი}} ($1)',
+'pageinfo-transclusions' => '{{PLURAL:$1|ჩართული გვერდი|ჩართული გვერდი}} ($1)',
 'pageinfo-toolboxlink' => 'გვერდის ინფორმაცია',
 'pageinfo-redirectsto' => 'გადამისამართება',
 'pageinfo-redirectsto-info' => 'ინფორმაცია',
@@ -3007,6 +3016,10 @@ $1',
 'pageinfo-protect-cascading' => 'კასკადური დაცვა აქედან',
 'pageinfo-protect-cascading-yes' => 'დიახ',
 'pageinfo-protect-cascading-from' => 'კასკადური დაცვა',
+'pageinfo-category-info' => 'ინფორმაცია კატეგორიის შესახებ',
+'pageinfo-category-pages' => 'გვერდების რაოდენობა',
+'pageinfo-category-subcats' => 'ქვეკატეგორიების რაოდენობა',
+'pageinfo-category-files' => 'ფაილების რაოდენობა',
 
 # Skin names
 'skinname-standard' => 'კლასიკური',
@@ -3065,6 +3078,7 @@ $1',
 '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' => 'სრული გარჩევადობა',
 'show-big-image-preview' => 'ზომა წინასწარი გადახედვისას: $1.',
 'show-big-image-other' => 'სხვა {{PLURAL:$2|გაფართოება|გაფართოება}}: $1.',
@@ -3099,6 +3113,8 @@ $1',
 'minutes' => '$1 წუთის',
 'hours' => '$1 საათის',
 'days' => '$1 დღის',
+'months' => '{{PLURAL:$1|$1 თვე|$1 თვე}}',
+'years' => '{{PLURAL:$1|$1 წელი|$1 წელი}}',
 'ago' => '$1 წინ',
 'just-now' => 'ახლახანს',
 
@@ -3831,7 +3847,7 @@ MediaWiki ვრცელდება იმ იმედით, რომ ი
 'specialpages-group-highuse' => 'ხშირად გამოყენებული გვერდები',
 'specialpages-group-pages' => 'გვერდების სიები',
 'specialpages-group-pagetools' => 'ინსტრუმენტები გვერდებისთვის',
-'specialpages-group-wiki' => 'á\83\95á\83\98á\83\99á\83\98\83\9bá\83\9dá\83\9cá\83\90á\83ªá\83\94á\83\9bá\83\94á\83\91á\83\98 á\83\93á\83\90 á\83\98á\83\9cá\83¡á\83¢á\83 á\83£á\83\9bá\83\94á\83\9cá\83¢á\83\94á\83\91á\83\98',
+'specialpages-group-wiki' => 'მონაცემები და ინსტრუმენტები',
 'specialpages-group-redirects' => 'სპეცგვერდების გადამისამართება',
 'specialpages-group-spam' => 'ინსტრუმენტები სპამის წინააღმდეგ',
 
@@ -3926,8 +3942,12 @@ MediaWiki ვრცელდება იმ იმედით, რომ ი
 'logentry-newusers-newusers' => 'მომხმარებლის ანგარიში $1 შექმნილია',
 'logentry-newusers-create' => 'შეიქმნა მომხმარებლის ანგარიში $1',
 'logentry-newusers-create2' => 'მომხმარებლის ანგარიში $3 შექმნა მომხმარებელმა $1',
+'logentry-newusers-byemail' => 'მომხმარებლის ანგარიში $3 შექმნა მომხმარებელმა $1 და პაროლი გაგზავნა ელ. ფოსტით',
 'logentry-newusers-autocreate' => 'ავტომატურად შეიქმნა მომხმარებლის ანგარიში $1',
-'newuserlog-byemail' => 'პაროლი ელ-ფოსტითაა გამოგზავნილი',
+'logentry-rights-rights' => '$1 შეცვალა ჯგუფის წევრობა $3-თვის $4-დან $5-ზე',
+'logentry-rights-rights-legacy' => '$1 შეცვალა ჯგუფის წევრობა $3-თვის',
+'logentry-rights-autopromote' => '$1 ავტომატურად იქნა გადაყვანილი $4–დან $5–ში',
+'rightsnone' => '(არცერთი)',
 
 # Feedback
 'feedback-bugornote' => 'თუ თქვენ მზად ხართ დეტალურად აღწეროთ ტექნიკური პრობლემა, გთხოვთ, [$1 შეგვატყობინეთ შეცდომის შესახებ].
@@ -3980,7 +4000,8 @@ MediaWiki ვრცელდება იმ იმედით, რომ ი
 'api-error-nomodule' => 'შიდა შეცდომა. ატვირთვის მოდული არ არის კონფიგურირებული.',
 'api-error-ok-but-empty' => 'შიდა შეცდომა. სერვერს არ დაუბრუნებია ინფორმაცია ატვირთვადი ფაილის შესახებ.',
 'api-error-overwrite' => 'არსებული ფაილის შეცვლა მიუღებელია.',
-'api-error-stashfailed' => 'შიდა შეცდომა. ვიკიმ ვერ შეძლო დროებით ფაილის შენახვა.',
+'api-error-stashfailed' => 'შიდა შეცდომა: სერვერმა ვერ შეძლო დროებითი ფაილის შენახვა.',
+'api-error-publishfailed' => 'შიდა შეცდომა: სერვერმა ვერ შეძლო დროებითი ფაილის შენახვა.',
 'api-error-timeout' => 'სერვერმა არ მოახდინა რეაგირება მოსალოდნელ დროში.',
 'api-error-unclassified' => 'აღმოჩენილია უცნობი შეცდომა.',
 'api-error-unknown-code' => 'უცნობი შეცდომა : „$1“',
@@ -4001,6 +4022,4 @@ MediaWiki ვრცელდება იმ იმედით, რომ ი
 'duration-centuries' => '$1 {{PLURAL:$1|საუკუნე|საუკუნე}}',
 'duration-millennia' => '$1 {{PLURAL:$1|ათასწლეული|ათასწლეული}}',
 
-# Unknown messages
-'svg-long-error' => 'არასწორი SVG ფაილი: $1',
 );
index 78f94fe..7057d96 100644 (file)
@@ -701,7 +701,6 @@ To'mende en' aqırg'ı jurnal mag'lıwmatları berilgen.",
 'template-protected' => "(qorg'alg'an)",
 'template-semiprotected' => "(yarım-qorg'alg'an)",
 'hiddencategories' => "Bul bet {{PLURAL:$1|1 jasırın kategoriyasının'|$1 jasırın kategoriyalarının'}} ag'zası:",
-'nocreatetitle' => 'Bet jaratıw sheklengen',
 'nocreatetext' => "{{SITENAME}} saytında taza betlerdi jaratıw sheklengen.
 Arqag'a qaytıp bar betti o'zgertiwin'izge yamasa [[Special:UserLogin|kiriwin'izge / akkaunt jaratıwın'ızg'a]] boladı.",
 'nocreate-loggedin' => "Taza betler jaratıwın'ızg'a ruxsatın'ız joq.",
@@ -1015,11 +1014,13 @@ Barlıq mag'lıwmat tu'rin (sonın' ishinde sa'wbet betlerdi, shablonlardı h.t.
 'right-userrights-interwiki' => "Basqa wikilerdegi paydalanıwshının' huquqların o'zgertiw",
 'right-siteadmin' => "Mag'lıwmatlar bazasın qulıplaw ha'm qulıplawın o'shiriw",
 
+# Special:Log/newusers
+'newuserlogpage' => 'Paydalanıwshılardı esapqa alıw jurnalı',
+'newuserlogpagetext' => 'Bul paydalanıwshılardı esapqa alıw jurnalı',
+
 # User rights log
 'rightslog' => 'Paydalanıwshı huquqları jurnalı',
 'rightslogtext' => "Bul paydalanıwshı huquqların o'zgertiw jurnalı.",
-'rightslogentry' => "$1 paydalanıwshısının' ag'za bolg'an toparları $2 degennen $3 degenge o'zgertti",
-'rightsnone' => '(hesh qanday)',
 
 # Associated actions - in the sentence "You do not have permission to X"
 'action-read' => 'bul betti oqıw',
@@ -1366,10 +1367,6 @@ Ja'nede [[Special:WantedCategories|kerekli kategoriyalardı]] qarap ko'rin'.",
 'listusers-submit' => "Ko'rset",
 'listusers-noresult' => 'Paydalanıwshı tabılmadı.',
 
-# Special:Log/newusers
-'newuserlogpage' => 'Paydalanıwshılardı esapqa alıw jurnalı',
-'newuserlogpagetext' => 'Bul paydalanıwshılardı esapqa alıw jurnalı',
-
 # Special:ListGroupRights
 'listgrouprights' => 'Paydalanıwshılar toparı huqıqları',
 'listgrouprights-group' => 'Topar',
@@ -1431,6 +1428,8 @@ Eger siz bul betti baqlaw dizimin'izden o'shirmekshi bolsan'ız bettin' joqarg'
 'enotif_lastvisited' => "Son'g'ı kirwin'izden beri bolg'an o'zgerisler ushın $1 degendi ko'rin'iz.",
 'enotif_lastdiff' => "Usı o'zgeris ushın $1 degendi ko'rin'iz.",
 'enotif_anon_editor' => 'anonim paydalanıwshı $1',
+'created' => "jaratılg'an",
+'changed' => "o'zgertilgen",
 
 # Delete
 'deletepage' => "Betti o'shir",
@@ -1943,6 +1942,6 @@ Bul tastıyıqlaw kodının' pitetug'ın waqtı: $4.",
 # New logging system
 'revdelete-restricted' => "administratorlarg'a qollanılg'an sheklewler",
 'revdelete-unrestricted' => "administratorlardan alıp taslang'an sheklewler",
-'newuserlog-byemail' => 'parol e-mail arqalı jiberildi',
+'rightsnone' => '(hesh qanday)',
 
 );
index 51a66ca..a3f2e0c 100644 (file)
@@ -756,7 +756,6 @@ Asekcem aneggaru n uɣmis yella ddaw-agi :",
 'template-semiprotected' => '(nnefṣ-yettwaḥrez)',
 'hiddencategories' => 'Asebter agi yella deg {{PLURAL:$1|Taggayt i ffren|Tiggayin i ffren}} agi :',
 'edittools' => '<!-- Aḍris yettbanen-d seddaw talɣa n ubeddil d uzen. -->',
-'nocreatetitle' => 'Axleq n isebtar meḥdud',
 'nocreatetext' => '{{SITENAME}} yekref iẓubaẓ n usnulfu n isebtar imaynuten.
 Tzemreḍ ad uɣaleḍ ar deffir dɣa ad beddeleḍ asebter yellan yakan, naɣ [[Special:UserLogin|ad qqeneḍ naɣ ad snulfuḍ amiḍan]].',
 'nocreate-loggedin' => 'Ur tesɛiḍ ara turagt i usnulfu n isebtar imaynuten.',
@@ -1298,12 +1297,13 @@ Ur ilaq ara ad i sɛu ugar n $1 {{PLURAL:$1|asekkil|isekkilen}}.',
 'right-sendemail' => 'Ceggaɛ tirawt i iseqdacen nniḍen',
 'right-passwordreset' => 'Ẓeṛ tira n uwennez n awalen uɛaddi',
 
+# Special:Log/newusers
+'newuserlogpage' => 'Aɣmis n isnulfan n  imiḍanen n imseqdacen',
+'newuserlogpagetext' => 'Asebter agi yebeqqeḍ amezruy n usnulfu n imiḍanen n iseqdacen.',
+
 # User rights log
 'rightslog' => 'Aɣmis n yizerfan n wemseqdac',
 'rightslogtext' => 'Wagi d aɣmis n yibeddlen n yizerfan n wemseqdac',
-'rightslogentry' => 'Yettubeddel izerfan n wemseqdac $1 seg $2 ar $3',
-'rightslogentry-autopromote' => 'yesnerna s uwurman seg $2 ar $3',
-'rightsnone' => '(ulaḥedd)',
 
 # Associated actions - in the sentence "You do not have permission to X"
 'action-read' => 'ɣaṛ asebter agi',
@@ -1931,10 +1931,6 @@ Ineggafen imazdayen : <code>$1</code> (ur d-renu acemma deg unadi inek/inem)',
 'activeusers-hidesysops' => 'Ffer inedbalen',
 'activeusers-noresult' => 'Ur yufi aseqdac.',
 
-# Special:Log/newusers
-'newuserlogpage' => 'Aɣmis n isnulfan n  imiḍanen n imseqdacen',
-'newuserlogpagetext' => 'Asebter agi yebeqqeḍ amezruy n usnulfu n imiḍanen n iseqdacen.',
-
 # Special:ListGroupRights
 'listgrouprights' => 'Izerfan n igrawen n iseqdacen',
 'listgrouprights-summary' => 'Asebter agi yesɛa yiwen umuɣ n igrawen i sengelen deg wiki agi dɣa izerfan n wadduf i qqenen.
@@ -2066,6 +2062,8 @@ $UNWATCHURL
 
 Tuɣalin d tadhelt :
 {{canonicalurl:{{MediaWiki:Helppage}}}}',
+'created' => 'yettwaxleq',
+'changed' => 'yettubeddel',
 
 # Delete
 'deletepage' => 'Mḥu asebter',
@@ -3005,6 +3003,9 @@ G leɛnaya-k sentem belli ṣaḥḥ tebɣiḍ ad tɛiwedeḍ axlaq n usebter-ag
 # Special:Tags
 'tag-filter' => 'Astay n [[Special:Tags|ticraḍ]] :',
 
+# New logging system
+'rightsnone' => '(ulaḥedd)',
+
 # Feedback
 'feedback-subject' => 'Asentel :',
 'feedback-message' => 'Izen :',
index ea1a3b4..257e949 100644 (file)
 
 # $fallback = 'ru'; // bug 27785
 
+$namespaceNames = array(
+       NS_MEDIA            => 'Медиа',
+       NS_SPECIAL          => 'Служебная',
+       NS_TALK             => 'Тепсэлъэхьыгъуэ',
+       NS_USER             => 'ЦӀыхухэт',
+       NS_USER_TALK        => 'ЦӀыхухэт_тепсэлъэхьыгъуэ',
+       NS_PROJECT_TALK     => '$1_тепсэлъэхьыгъуэ',
+       NS_FILE             => 'Файл',
+       NS_FILE_TALK        => 'Файл_тепсэлъэхьыгъуэ',
+       NS_MEDIAWIKI        => 'MediaWiki',
+       NS_MEDIAWIKI_TALK   => 'MediaWiki_тепсэлъэхьыгъуэ',
+       NS_TEMPLATE         => 'Шаблон',
+       NS_TEMPLATE_TALK    => 'Шаблон_тепсэлъэхьыгъуэ',
+       NS_HELP             => 'ДэӀэпыкъуэгъуэ',
+       NS_HELP_TALK        => 'ДэӀэпыкъуэгъуэ_тепсэлъэхьыгъуэ',
+       NS_CATEGORY         => 'Категориэ',
+       NS_CATEGORY_TALK    => 'Категориэ_тепсэлъэхьыгъуэ',
+);
+
+$namespaceAliases = array(
+       # Russian namespaces
+       'Обсуждение'                         => NS_TALK,
+       'Участник'                           => NS_USER,
+       'Обсуждение_участника'               => NS_USER_TALK,
+       'Обсуждение_{{GRAMMAR:genitive|$1}}' => NS_PROJECT_TALK,
+       'Обсуждение_файла'                   => NS_FILE_TALK,
+       'Обсуждение_MediaWiki'               => NS_MEDIAWIKI_TALK,
+       'Обсуждение_шаблона'                 => NS_TEMPLATE_TALK,
+       'Справка'                            => NS_HELP,
+       'Обсуждение_справки'                 => NS_HELP_TALK,
+       'Категория'                          => NS_CATEGORY,
+       'Обсуждение_категории'               => NS_CATEGORY_TALK,
+);
+
+// Remove Russian gender aliases
+$namespaceGenderAliases = array();
+
 $messages = array(
 # User preference toggles
 'tog-underline' => 'ТехьэпӀэхэр щӀэтхъэн:',
@@ -686,7 +723,6 @@ $2',
 'template-protected' => '(теубыдащ)',
 'template-semiprotected' => '(иныкъуэр теубыдащ)',
 'hiddencategories' => 'Мы напэкӀуэцӀыр зхэхьэр $1 {{PLURAL:$1|1 категориэ зэхуэща|$1 категориэ зэхуэщахэр}}:',
-'nocreatetitle' => 'НапэкӀуэцӀ щӀыныр тубыдащ',
 'nocreatetext' => 'Мы сайтым деж ныпэкӀуэцӀ щӀэуэ щӀынхэм щхьэкӀэ теубыдыгъуэ щыӀэщ.
 Бгъэзэжу, напэкӀуэцӀ щыӀэр бгъэтэрэзыфынущ, [[Special:UserLogin|системэмэ зыкъегъэцӀыхун иэ щӀэуэ аккаунт щӀын]].',
 'nocreate-loggedin' => 'НапэкӀуэцӀыщӀэ пщӀыну хуитыныгъэ уиӀэкъым.',
@@ -976,6 +1012,9 @@ $1",
 
 'grouppage-sysop' => '{{ns:project}}:Тхьэмадэхэр',
 
+# Special:Log/newusers
+'newuserlogpage' => 'ЦӀыхухэтхэм я регистрациэ тхылъ',
+
 # User rights log
 'rightslog' => 'Хэтым пӀалъэ иӀэхэм я тхылъ',
 
@@ -1072,9 +1111,6 @@ $1",
 # Special:LinkSearch
 'linksearch' => 'КІуэцІ техьэпІэхэр',
 
-# Special:Log/newusers
-'newuserlogpage' => 'ЦӀыхухэтхэм я регистрациэ тхылъ',
-
 # Special:ListGroupRights
 'listgrouprights-members' => '(гупым и тхылъ)',
 
index e6094b9..6bb3162 100644 (file)
@@ -141,6 +141,7 @@ $messages = array(
 'index-category' => 'نو انڈیکس صفحات',
 'noindex-category' => 'نو انڈیکس صفحات',
 'broken-file-category' => 'نس پھت صفحات',
+'categoryviewer-pagedlinks' => '($1) ($2)',
 
 'about' => 'تعارف',
 'article' => 'صفحۂ مشمول',
@@ -269,6 +270,7 @@ $1',
 [[Special:Version|version page]]',
 
 'ok' => 'ٹھیک شیر',
+'pagetitle' => '$1 - {{SITENAME}}',
 'pagetitle-view-mainpage' => '{{SITENAME}}',
 'retrievedfrom' => '‘‘$1’’ نقل کاردو',
 'youhavenewmessages' => 'تہ بچے ای $1 شیر۔ ($2)',
@@ -276,6 +278,7 @@ $1',
 'newmessagesdifflink' => 'تـجـدیـد مـاقـبل آخـراری فـرق',
 'youhavenewmessagesmulti' => 'ء$1 تہ بچے نوغ نوغ پیغامات شینی',
 'editsection' => 'ترمیم',
+'editsection-brackets' => '[$1]',
 'editold' => 'ترمیم',
 'viewsourceold' => 'مآخذو لوڑے',
 'editlink' => 'تدوین کورے',
@@ -293,6 +296,8 @@ $1',
 'site-atom-feed' => '$1 اٹوم فیڈ',
 'page-rss-feed' => '$1 آر ایس ایس فیڈ',
 'page-atom-feed' => '$1 آٹوم فیڈ',
+'feed-atom' => 'اٹوم',
+'feed-rss' => 'آر ایس ایس',
 'red-link-title' => '
 $1 (صفحہ موجود نیکی)',
 
@@ -484,6 +489,7 @@ MySQL جوابِ خطاء پرائے "$3: $4"',
 
 # Special:ChangeEmail
 'changeemail-none' => '(نو)',
+'changeemail-cancel' => 'کھینسل',
 
 # Edit page toolbar
 'bold_sample' => 'بوسک متن',
@@ -560,6 +566,9 @@ MySQL جوابِ خطاء پرائے "$3: $4"',
 'moveddeleted-notice' => 'ھیہ ای حذف شدہ صفحہ شیر.
 صفحو نوشتۂ حذف شدگی و منتقلی ذیلا بطورِ حوالہ دیونو بویان.',
 
+# Content models
+'content-model-javascript' => 'جاوا اسکرپٹ',
+
 # Parser/template warnings
 'post-expand-template-inclusion-warning' => "'''خبردار:''' سانچو سایز بو لوٹ شیر.
 بعضی سانچہ شامل نو بونی.",
@@ -588,16 +597,23 @@ MySQL جوابِ خطاء پرائے "$3: $4"',
 'history-show-deleted' => 'صرفی حذف شدہ',
 'histfirst' => 'قدیم ترین',
 'histlast' => 'تازہ ترین',
+'historyempty' => '(خالی)',
 
 # Revision feed
 'history-feed-item-nocomment' => '$1 تا $2',
 
 # Revision deletion
 'rev-delundel' => 'پشاوے/کھوشتاوے',
+'rev-showdeleted' => 'پشاوے',
+'revdelete-radio-set' => 'Yes/دی',
+'revdelete-radio-unset' => 'نو',
 'revdel-restore' => 'ظاہریتو تبدیل کورے',
 'revdel-restore-deleted' => 'حذف شدہ رویژنز',
 'revdel-restore-visible' => 'ویزیبل رویژنز',
 
+# History merging
+'mergehistory-revisionrow' => '$1 ($2) $3 . . $4 $5 $6',
+
 # Merge log
 'revertmerge' => 'غیر ضم',
 
@@ -654,14 +670,17 @@ MySQL جوابِ خطاء پرائے "$3: $4"',
 'powersearch-ns' => 'جائے ناما تلاش:',
 'powersearch-redir' => 'فہرستِ رجوع مکرر',
 'powersearch-field' => 'تلاش برائے',
+'powersearch-toggleall' => 'سف',
 
 # Preferences page
 'preferences' => 'ترجیحات',
 'mypreferences' => 'مہ ترجیہات',
+'skin-preview' => 'نمائش',
 'youremail' => 'بشلی کغاز',
 'username' => 'ممبارو نم',
 'uid' => 'ممبارو لمبار:',
 'prefs-memberingroups' => '{{PLURAL:$1|گروہ|گروہاں}} رُکن:',
+'prefs-registration-date-time' => '$1',
 'yourrealname' => '* اصلی نم',
 'yournick' => 'دسخط',
 'badsig' => "ناقص خام دسخط.
@@ -682,9 +701,11 @@ HTML tags لوڑے.',",
 'right-upload' => 'فائل انځاوے',
 'right-delete' => 'صفحان ضائع کورے',
 
+# Special:Log/newusers
+'newuserlogpage' => 'نوشتۂ آمد صارف',
+
 # User rights log
 'rightslog' => 'یوزروت مختص شدہ حقوق',
-'rightsnone' => '(نو)',
 
 # Associated actions - in the sentence "You do not have permission to X"
 'action-edit' => 'ھیہ صفحا ایڈیٹنگ کورے',
@@ -832,9 +853,6 @@ HTML tags لوڑے.',",
 'linksearch-ok' => 'Search/تلاش',
 'linksearch-line' => '$1 مربوط شیر $2 ری',
 
-# Special:Log/newusers
-'newuserlogpage' => 'نوشتۂ آمد صارف',
-
 # Special:ListGroupRights
 'listgrouprights-members' => 'ممبارانن فھرست',
 
@@ -1124,6 +1142,9 @@ HTML tags لوڑے.',",
 # Special:ComparePages
 'compare-page1' => 'صفحہ 1',
 
+# New logging system
+'rightsnone' => '(نو)',
+
 # Feedback
 'feedback-message' => 'پیغام',
 
index d6d552a..0c50033 100644 (file)
@@ -185,7 +185,7 @@ $messages = array(
 'about' => 'Heqa',
 'article' => 'Pela tedeesteyu',
 'newwindow' => '(zerrê pençerê dê newey de beno ra)',
-'cancel' => 'Texelnaene',
+'cancel' => 'Bıtexelne',
 'moredotdotdot' => 'Jêde...',
 'mypage' => 'Pela mı',
 'mytalk' => 'Hurênayişê mı',
@@ -674,7 +674,7 @@ Beno ke [{{fullurl:{{#Special:Log}}/delete|page={{FULLPAGENAMEE}}}} deletion log
 Sıma be idarekerênia ho ra şikinê hona [$1 nê ferqi bıvênê], eke wazenê dewam kerê.",
 'rev-delundel' => 'bıasne/wedare',
 'rev-showdeleted' => 'bıasne',
-'revisiondelete' => 'Çımraviarnaisu bıestere/peyser bia',
+'revisiondelete' => 'Çımraviarnaisu bestere/peyser bia',
 'revdelete-nooldid-title' => 'Çımraviarnaena waştiye nêvêrena',
 'revdelete-nooldid-text' => 'Sıma vırastena nê fonksiyoni rê ya jü çımraviarnaena waştiye diyar nêkerdo, çımraviarnaena diyarkerdiye çına, ya ki sıma wazenê ke çımraviarnaena nıkaêne bınımnê.',
 'revdelete-nologtype-title' => 'Qet qeydê cı nêdiya',
@@ -902,14 +902,15 @@ Kaberê bini ke şıma de kewti irtıbat, adresa e-postey şıma eşkera nêbena
 'right-move' => 'Pelu bere',
 'right-movefile' => 'Dosyu bere',
 'right-upload' => 'Dosyu bar ke',
-'right-delete' => 'Pelu bıestere',
+'right-delete' => 'Pelu bestere',
 'right-undelete' => 'Esterıtena na pele peyser bıcê',
 
+# Special:Log/newusers
+'newuserlogpage' => 'Qeydê karberiê newey',
+
 # User rights log
 'rightslog' => 'Qeydê hequnê karberi',
 'rightslogtext' => 'No jü qeydê vurnaisê hequnê karberio.',
-'rightslogentry' => 'selahiyetê $1i $2 ra vurniya be $3i',
-'rightsnone' => '(qet jü)',
 
 # Associated actions - in the sentence "You do not have permission to X"
 'action-read' => 'na pele bıwane',
@@ -920,7 +921,7 @@ Kaberê bini ke şıma de kewti irtıbat, adresa e-postey şıma eşkera nêbena
 'action-move' => 'na pele bere',
 'action-movefile' => 'na dosya bere',
 'action-upload' => 'na dosya bar ke',
-'action-delete' => 'na pele bıestere',
+'action-delete' => 'na pele bestere',
 'action-undelete' => 'na pele meestere',
 
 # Recent changes
@@ -989,7 +990,7 @@ Kaberê bini ke şıma de kewti irtıbat, adresa e-postey şıma eşkera nêbena
 'watchthisupload' => 'Na dosya de şêr ke',
 
 'license' => 'Lisans:',
-'license-header' => 'Lisanskerdene',
+'license-header' => 'Lisansdais',
 
 # Special:ListFiles
 'imgfile' => 'dosya',
@@ -1006,8 +1007,8 @@ Kaberê bini ke şıma de kewti irtıbat, adresa e-postey şıma eşkera nêbena
 'file-anchor-link' => 'Dosya',
 'filehist' => 'Tarixê dosya',
 'filehist-help' => "Serba diyaena viartê dosya tarixê ke qısımê tarix/zeman'i derê inu bıteqne.",
-'filehist-deleteall' => 'Pêrune bıestere',
-'filehist-deleteone' => 'bıestere',
+'filehist-deleteall' => 'Pêrune bestere',
+'filehist-deleteone' => 'bestere',
 'filehist-revert' => 'raçarne',
 'filehist-current' => 'nıkaên',
 'filehist-datetime' => 'Tarix/Dem',
@@ -1035,10 +1036,10 @@ Cêr [$2 pela arezekerdena dosya de] arezekerdene asnina.',
 'filerevert-submit' => 'Raçarne',
 
 # File deletion
-'filedelete' => 'Bıestere $1',
-'filedelete-legend' => 'Dosya bıestere',
+'filedelete' => 'Bestere $1',
+'filedelete-legend' => 'Dosya bestere',
 'filedelete-comment' => 'Sebeb:',
-'filedelete-submit' => 'Bıestere',
+'filedelete-submit' => 'Bestere',
 'filedelete-otherreason' => 'Sebebo bin/ilaweki:',
 'filedelete-reason-otherlist' => 'Sebebo bin',
 'filedelete-edit-reasonlist' => 'Sebebunê esterıtene bıvurne',
@@ -1062,7 +1063,7 @@ Cêr [$2 pela arezekerdena dosya de] arezekerdene asnina.',
 'disambiguationspage' => 'Template:vuriyaisê maney',
 
 'brokenredirects-edit' => 'bıvurne',
-'brokenredirects-delete' => 'bıestere',
+'brokenredirects-delete' => 'bestere',
 
 'withoutinterwiki-legend' => 'Verbend',
 'withoutinterwiki-submit' => 'Bıasne',
@@ -1127,9 +1128,6 @@ Cêr [$2 pela arezekerdena dosya de] arezekerdene asnina.',
 # Special:ActiveUsers
 'activeusers' => 'Lista karberunê fealu',
 
-# Special:Log/newusers
-'newuserlogpage' => 'Qeydê karberiê newey',
-
 # Special:ListGroupRights
 'listgrouprights-group' => 'Kome',
 'listgrouprights-rights' => 'Heqi',
@@ -1167,9 +1165,11 @@ Nara dıme, vurnaisê na pele u pela hurênaisê dawa alaqedare ita bena lista,
 'watching' => 'Şêr ke…',
 'unwatching' => 'Şêr meke…',
 
+'changed' => 'vuriya',
+
 # Delete
-'deletepage' => 'Pele bıestere',
-'delete-legend' => 'Bıestere',
+'deletepage' => 'Pele bestere',
+'delete-legend' => 'Bestere',
 'confirmdeletetext' => 'Tı hawo kena ke jü pele be tarixê dae pêro bıne ra bıesterê.
 Eke ferqê neticê na kerdene de bena u no kar be gorê [[{{MediaWiki:Policy-url}}|qeydunê esterıtene]] beno, wa gurêy tesdiq ke.',
 'actioncomplete' => 'Kar bi temam',
@@ -1252,7 +1252,7 @@ Tı şikina sewiya sevekiyaena na pele bıvurnê, hema yê nae sevekiyaena qedem
 'blanknamespace' => '(Ser)',
 
 # Contributions
-'contributions' => 'İştırakê karberi',
+'contributions' => 'İştıraqê {{GENDER:$1|karber}}i',
 'contributions-title' => '$1 de iştırakê karberi',
 'mycontris' => 'İştıraqi',
 'contribsub2' => 'Serba $1 ($2)',
@@ -1398,7 +1398,7 @@ Kerem ke, qeydkerdene ra ver gozaga verqayti bıgurene.',
 Tı şikina çımunê dae bıvênê',
 'tooltip-ca-history' => 'Versiyonê verênê na pele',
 'tooltip-ca-protect' => 'Na pele bısevekne',
-'tooltip-ca-delete' => 'Na pele bıestere',
+'tooltip-ca-delete' => 'Na pele bestere',
 'tooltip-ca-move' => 'Namê na pele bıvurne',
 'tooltip-ca-watch' => 'Na pele bıcê lista huya şêrkerdene',
 'tooltip-ca-unwatch' => 'Na pele lista huya şêrkerdene ra wedare',
@@ -1603,4 +1603,7 @@ satır ê ke pê ney # # destpêkenê zey mışore/mıjore muamele vineno.
 'compare-page1' => 'Pele 1',
 'compare-page2' => 'Pele 2',
 
+# New logging system
+'rightsnone' => '(qet jü)',
+
 );
index c265eb4..edc0a10 100644 (file)
@@ -958,7 +958,6 @@ IP مەكەنجايىڭىز بۇل بەتتىڭ تۇزەتۋ تارىيحىند
 'template-protected' => '(قورعالعان)',
 'template-semiprotected' => '(جارتىلاي قورعالعان)',
 'hiddencategories' => 'بۇل بەت $1 جاسىرىن ساناتتىڭ مۇشەسى:',
-'nocreatetitle' => 'بەتتى باستاۋ شەكتەلگەن',
 'nocreatetext' => '{{SITENAME}} جوباسىندا جاڭا بەت باستاۋى شەكتەلگەن.
 كەرى قايتىپ بار بەتتى وڭدەۋىڭىزگە بولادى, نەمەسە [[Special:UserLogin|كىرۋىڭىزگە نە تىركەلۋىڭىزگە]] بولادى.',
 'nocreate-loggedin' => '{{SITENAME}} جوباسىندا جاڭا بەت باستاۋ رۇقساتىڭىز جوق.',
@@ -1304,11 +1303,13 @@ $3 كەلتىرىلگەن سەبەبى: ''$2''",
 'right-userrights-interwiki' => 'باسقا ۇىيكىيلەردەگى قاتىسۋشىلاردىڭ قۇقىقتارىن وڭدەۋ',
 'right-siteadmin' => 'دەرەكقوردى قۇلىپتاۋ جانە قۇلىپتاۋىن ٴوشىرۋ',
 
+# Special:Log/newusers
+'newuserlogpage' => 'تىركەلۋ جۋرنالى',
+'newuserlogpagetext' => 'بۇل قاتىسۋشى تىركەلگى جاساۋ جۋرنالى',
+
 # User rights log
 'rightslog' => 'قاتىسۋشى قۇقىقتارى جۋرنالى',
 'rightslogtext' => 'بۇل قاتىسۋشى قۇقىقتارىن وزگەرتۋ جۋرنالى.',
-'rightslogentry' => '$1 كىرگەن توپتارىن $2 دەگەننەن $3 دەگەنگە وزگەرتتى',
-'rightsnone' => '(ەشقانداي)',
 
 # Recent changes
 'nchanges' => '$1 وزگەرىس',
@@ -1683,10 +1684,6 @@ Also see [[Special:WantedCategories|wanted categories]].',
 'listusers-submit' => 'كورسەت',
 'listusers-noresult' => 'قاتىسۋشى تابىلعان جوق.',
 
-# Special:Log/newusers
-'newuserlogpage' => 'تىركەلۋ جۋرنالى',
-'newuserlogpagetext' => 'بۇل قاتىسۋشى تىركەلگى جاساۋ جۋرنالى',
-
 # Special:ListGroupRights
 'listgrouprights' => 'قاتىسۋشى توبى قۇقىقتارى',
 'listgrouprights-summary' => 'كەلەسى تىزىمدە بۇل ۋىيكىيدە تاعايىندالعان قاتىسۋشى قۇقىقتارى (بايلانىستى قاتىناۋ قۇقىقتارىمەن بىرگە) كورسەتىلەدى.
@@ -1778,6 +1775,8 @@ $NEWPAGE
 
 سىن-پىكىر بەرۋ جانە بىلايعى جاردەم الۋ ٴۇشىن:
 {{canonicalurl:{{{{ns:mediawiki}}:Helppage}}}}',
+'created' => 'باستادى',
+'changed' => 'وزگەرتتى',
 
 # Delete
 'deletepage' => 'بەتتى جويۋ',
@@ -2897,5 +2896,6 @@ $5
 # New logging system
 'revdelete-restricted' => 'اكىمشىلەرگە تىيىمدار قولدادى',
 'revdelete-unrestricted' => 'اكىمشىلەردەن تىيىمداردى الاستادى',
+'rightsnone' => '(ەشقانداي)',
 
 );
index 4d2e73b..e090991 100644 (file)
@@ -1053,7 +1053,6 @@ IP-мекенжайыңыз бұл беттің түзету тарихында
 'template-protected' => '(қорғалған)',
 'template-semiprotected' => '(жартылай қорғалған)',
 'hiddencategories' => 'Бұл бет $1 жасырын санаттың мүшесі:',
-'nocreatetitle' => 'Бетті бастау шектелген',
 'nocreatetext' => '{{SITENAME}} жобасында жаңа бет бастауы шектелген.
 Кері қайтып бар бетті өңдеуіңізге болады, немесе [[Special:UserLogin|кіруіңізге не тіркелуіңізге]] болады.',
 'nocreate-loggedin' => 'Жаңа бет бастауға рұқсатыңыз жоқ.',
@@ -1492,11 +1491,13 @@ $3 келтірілген себебі: ''$2''",
 'right-userrights-interwiki' => 'Басқа үикилердегі қатысушылардың құқықтарын өңдеу',
 'right-siteadmin' => 'Дерекқорды құлыптау және құлыптауын өшіру',
 
+# Special:Log/newusers
+'newuserlogpage' => 'Тіркелу журналы',
+'newuserlogpagetext' => 'Бұл қатысушы тіркелгі жасау журналы',
+
 # User rights log
 'rightslog' => 'Қатысушы құқықтары журналы',
 'rightslogtext' => 'Бұл қатысушы құқықтарын өзгерту журналы.',
-'rightslogentry' => '$1 кірген топтарын $2 дегеннен $3 дегенге өзгертті',
-'rightsnone' => '(ешқандай)',
 
 # Associated actions - in the sentence "You do not have permission to X"
 'action-read' => 'Осы бетті оқу',
@@ -1917,10 +1918,6 @@ Also see [[Special:WantedCategories|wanted categories]].',
 'listusers-submit' => 'Көрсет',
 'listusers-noresult' => 'Қатысушы табылған жоқ.',
 
-# Special:Log/newusers
-'newuserlogpage' => 'Тіркелу журналы',
-'newuserlogpagetext' => 'Бұл қатысушы тіркелгі жасау журналы',
-
 # Special:ListGroupRights
 'listgrouprights' => 'Қатысушы тобы құқықтары',
 'listgrouprights-summary' => 'Келесі тізімде бұл уикиде тағайындалған қатысушы құқықтары (байланысты қатынау құқықтарымен бірге) көрсетіледі.
@@ -2015,6 +2012,8 @@ $NEWPAGE
 
 Сын-пікір беру және былайғы жәрдем алу үшін:
 {{canonicalurl:{{{{ns:mediawiki}}:Helppage}}}}',
+'created' => 'бастады',
+'changed' => 'өзгертті',
 
 # Delete
 'deletepage' => 'Бетті жою',
@@ -3181,7 +3180,7 @@ $5
 'logentry-newusers-create' => '$1 жаңадан аккаунт тіркеді',
 'logentry-newusers-create2' => '$1 $3 деген аккаунт тіркеді',
 'logentry-newusers-autocreate' => '$1 аккаунты автоматты түрде тіркелді',
-'newuserlog-byemail' => 'Құпия сөз e-mail арқылы жіберілді',
+'rightsnone' => '(ешқандай)',
 
 # Search suggestions
 'searchsuggest-search' => 'Іздеу',
index 5738a6f..d1c1562 100644 (file)
@@ -921,7 +921,6 @@ Keýin qoldanw üşin mätändi qýıp alıp jäne qoýıp, mätin faýlına saq
 'template-protected' => '(qorğalğan)',
 'template-semiprotected' => '(jartılaý qorğalğan)',
 'hiddencategories' => 'Bul bet $1 jasırın sanattıñ müşesi:',
-'nocreatetitle' => 'Betti bastaw şektelgen',
 'nocreatetext' => '{{SITENAME}} jobasında jaña bet bastawı şektelgen.
 Keri qaýtıp bar betti öñdewiñizge boladı, nemese [[{{#special:Userlogin}}|kirwiñizge ne tirkelwiñizge]] boladı.',
 'nocreate-loggedin' => '{{SITENAME}} jobasında jaña bet bastaw ruqsatıñız joq.',
@@ -1267,11 +1266,13 @@ Eger bunı jetistirwdi tañdasañız, bul tüzetwiñizdiñ awtorlığın anıqta
 'right-userrights-interwiki' => 'Basqa üïkïlerdegi qatıswşılardıñ quqıqtarın öñdew',
 'right-siteadmin' => 'Derekqordı qulıptaw jäne qulıptawın öşirw',
 
+# Special:Log/newusers
+'newuserlogpage' => 'Tirkelw jwrnalı',
+'newuserlogpagetext' => 'Bul qatıswşı tirkelgi jasaw jwrnalı',
+
 # User rights log
 'rightslog' => 'Qatıswşı quqıqtarı jwrnalı',
 'rightslogtext' => 'Bul qatıswşı quqıqtarın özgertw jwrnalı.',
-'rightslogentry' => '$1 kirgen toptarın $2 degennen $3 degenge özgertti',
-'rightsnone' => '(eşqandaý)',
 
 # Recent changes
 'nchanges' => '$1 özgeris',
@@ -1646,10 +1647,6 @@ Also see [[Special:WantedCategories|wanted categories]].',
 'listusers-submit' => 'Körset',
 'listusers-noresult' => 'Qatıswşı tabılğan joq.',
 
-# Special:Log/newusers
-'newuserlogpage' => 'Tirkelw jwrnalı',
-'newuserlogpagetext' => 'Bul qatıswşı tirkelgi jasaw jwrnalı',
-
 # Special:ListGroupRights
 'listgrouprights' => 'Qatıswşı tobı quqıqtarı',
 'listgrouprights-summary' => 'Kelesi tizimde bul wïkïde tağaýındalğan qatıswşı quqıqtarı (baýlanıstı qatınaw quqıqtarımen birge) körsetiledi.
@@ -1741,6 +1738,8 @@ Baqılaw tizimiñizdiñ baptawlırın özgertw üşin, mında kelip-ketiñiz:
 
 Sın-pikir berw jäne bılaýğı järdem alw üşin:
 {{canonicalurl:{{{{ns:mediawiki}}:Helppage}}}}',
+'created' => 'bastadı',
+'changed' => 'özgertti',
 
 # Delete
 'deletepage' => 'Betti joyw',
@@ -2856,5 +2855,6 @@ Swretter tolıq ajıratılımdığımen körsetiledi, basqa faýl türlerine qat
 # New logging system
 'revdelete-restricted' => 'äkimşilerge tïımdar qoldadı',
 'revdelete-unrestricted' => 'äkimşilerden tïımdardı alastadı',
+'rightsnone' => '(eşqandaý)',
 
 );
index 2aa9a2f..077d775 100644 (file)
@@ -628,12 +628,12 @@ $1',
 'actionthrottledtext' => 'ក្រោមវិធានការប្រឆាំងស្ប៉ាម​ អ្នកត្រូវបាន​គេកំហិតមិនឱ្យ​ធ្វើសកម្មភាពនេះ​ច្រើនដងពេកទេ​ក្នុងរយៈពេលខ្លីមួយ។
 
 សូមព្យាយាមម្ដងទៀតក្នុងរយៈពេលប៉ុន្មាននាទីទៀត។',
-'protectedpagetext' => 'á\9e\91á\9f\86á\9e\96á\9f\90á\9e\9aá\9e\93á\9f\81á\9f\87á\9e\94á\9e¶á\9e\93á\9e\8fá\9f\92á\9e\9aá\9e¼á\9e\9cá\9e\85á\9e¶á\9e\80á\9f\8bá\9e\9fá\9f\84á\9e\98á\9e·á\9e\93á\9e±á\9f\92á\9e\99á\9e\80á\9f\82á\9e\94á\9f\92á\9e\9aá\9f\82â\80\8b។',
+'protectedpagetext' => 'á\9e\91á\9f\86á\9e\96á\9f\90á\9e\9aá\9e\93á\9f\81á\9f\87á\9e\94á\9e¶á\9e\93á\9e\8fá\9f\92á\9e\9aá\9e¼á\9e\9cá\9e\80á\9e¶á\9e\9aá\9e\96á\9e¶á\9e\9aá\9e\98á\9e·á\9e\93á\9e±á\9f\92á\9e\99á\9e\80á\9f\82á\9e\94á\9f\92á\9e\9aá\9f\82â\80\8bá\9e¬á\9e\92á\9f\92á\9e\9cá\9e¾á\9e\9fá\9e\80á\9e\98á\9f\92á\9e\98á\9e\97á\9e¶á\9e\96á\9e\95á\9f\92á\9e\9fá\9f\81á\9e\84á\9e\91á\9f\80á\9e\8fá\9e\9bá\9e¾á\9e\9cá\9e។',
 'viewsourcetext' => 'អ្នកអាចមើលនិងចម្លងកូដរបស់ទំព័រនេះ៖',
 'viewyourtext' => "អ្នកអាចមើលនិងចម្លងកូដរបស់'''ការកែប្រែរបស់អ្នក'''ទៅកាន់ទំព័រនេះ៖",
 'protectedinterface' => 'ទំព័រនេះផ្ដល់នូវអត្ថបទអន្តរមុខសម្រាប់សូហ្វវែរនៅក្នុងវិគីនេះ និងត្រូវបានចាក់សោដើម្បីចៀសវាងការបំពាន។
 ដើម្បីបន្ថែមឬផ្លាស់ប្ដូរការបកប្រែសំរាប់វិគីទាំងអស់ សូមប្រើប្រាស់ [//translatewiki.net/ translatewiki.net] ដែលជាគំរោងបកប្រែរបស់MediaWiki។',
-'editinginterface' => "'''á\9e\94á\9f\92á\9e\9aá\9e\99á\9f\90á\9e\8fá\9f\92á\9e\93á\9f\96''' á\9e¢á\9f\92á\9e\93á\9e\80á\9e\80á\9f\86á\9e\96á\9e»á\9e\84á\9e\8fá\9f\82á\9e\80á\9f\82á\9e\94á\9f\92á\9e\9aá\9f\82á\9e\91á\9f\86á\9e\96á\9f\90á\9e\9aá\9e\8aá\9f\82á\9e\9bá\9e\94á\9e¶á\9e\93á\9e\94á\9f\92á\9e\9aá\9e¾á\9e\94á\9f\92á\9e\9aá\9e¶á\9e\9fá\9f\8bâ\80\8bá\9e\8aá\9e¾á\9e\98á\9f\92á\9e\94á\9e¸á\9e\95á\9f\92á\9e\8aá\9e\9bá\9f\8bá\9e\93á\9e¼á\9e\9cá\9e¢á\9e\93á\9f\92á\9e\8fá\9e\9aá\9e\98á\9e»á\9e\81á\9e\9fá\9e\98á\9f\92á\9e\9aá\9e¶á\9e\94á\9f\8bá\9e\95á\9f\92á\9e\93á\9f\82á\9e\80á\9e\91á\9e\93á\9f\8bâ\80\8bá\9f\94 á\9e\94á\9f\86á\9e\9bá\9e¶á\9e\9fá\9f\8bá\9e\94á\9f\92á\9e\8aá\9e¼á\9e\9aá\9e\85á\9f\86á\9e\96á\9f\84á\9f\87á\9e\91á\9f\86á\9e\96á\9f\90á\9e\9aá\9e\93á\9f\81á\9f\87â\80\8bá\9e\93á\9e¹á\9e\84á\9e\94á\9f\89á\9f\87á\9e\96á\9e¶á\9e\9bá\9f\8bá\9e\8aá\9e\9bá\9f\8bá\9e\91á\9f\86á\9e\96á\9f\90á\9e\9aá\9e¢á\9e\93á\9f\92á\9e\8fá\9e\9aá\9e\98á\9e»á\9e\81á\9e\93á\9f\83á\9e¢á\9f\92á\9e\93á\9e\80á\9e\94á\9f\92á\9e\9aá\9e¾á\9e\94á\9f\92á\9e\9aá\9e¶á\9e\9fá\9f\8bâ\80\8bá\9e\87á\9e¶á\9e\85á\9f\92á\9e\9aá\9e¾á\9e\93 á\9e\8aá\9f\82á\9e\9bá\9e\94á\9f\92á\9e\9aá\9e¾á\9e\94á\9f\92á\9e\9aá\9e¶á\9e\9fá\9f\8bá\9e\9cá\9e·á\9e\94á\9e\9fá\9e¶á\9e\99á\9e\93á\9f\81á\9f\87á\9f\94 á\9e\9fá\9e\98á\9f\92á\9e\9aá\9e¶á\9e\94á\9f\8bá\9e\80á\9e¶á\9e\9aá\9e\94á\9e\80á\9e\94á\9f\92á\9e\9aá\9f\82 á\9e\9fá\9e¼á\9e\98á\9e\96á\9e·á\9e\85á\9e¶á\9e\9aá\9e\8eá\9e¶á\9e\94á\9f\92á\9e\9aá\9e¾á\9e\94á\9f\92á\9e\9aá\9e¶á\9e\9fá\9f\8b [//translatewiki.net/wiki/Main_Page?setlang=km translatewiki.net] (á\9e\94á\9f\81á\9e\8fá\9e¶á\9e\9cá\9e·á\9e\82á\9e¸) á\9e\82á\9e\98á\9f\92á\9e\9aá\9f\84á\9e\84â\80\8bá\9e¢á\9e\93á\9f\92á\9e\8fá\9e\9aá\9e\87á\9e¶á\9e\8fá\9e¼á\9e\94á\9e\93á\9e¸á\9e\99á\9e\80á\9e\98á\9f\92á\9e\98â\80\8bá\9e\93á\9f\83មេឌាវិគី ។",
+'editinginterface' => "'''á\9e\94á\9f\92á\9e\9aá\9e\99á\9f\90á\9e\8fá\9f\92á\9e\93á\9f\96''' á\9e¢á\9f\92á\9e\93á\9e\80á\9e\80á\9f\86á\9e\96á\9e»á\9e\84á\9e\8fá\9f\82á\9e\80á\9f\82á\9e\94á\9f\92á\9e\9aá\9f\82á\9e\91á\9f\86á\9e\96á\9f\90á\9e\9aá\9e\8aá\9f\82á\9e\9bá\9e\94á\9e¶á\9e\93á\9e\94á\9f\92á\9e\9aá\9e¾á\9e\94á\9f\92á\9e\9aá\9e¶á\9e\9fá\9f\8bâ\80\8bá\9e\8aá\9e¾á\9e\98á\9f\92á\9e\94á\9e¸á\9e\95á\9f\92á\9e\8aá\9e\9bá\9f\8bá\9e\87á\9e¼á\9e\93á\9e¢á\9e\93á\9f\92á\9e\8fá\9e\9aá\9e\98á\9e»á\9e\81á\9e\9fá\9e\98á\9f\92á\9e\9aá\9e¶á\9e\94á\9f\8bá\9e\9fá\9e¼á\9e á\9f\92á\9e\9cá\9e\9cá\9f\82á\9e\9aá\9f\94 á\9e\94á\9f\86á\9e\9bá\9e¶á\9e\9fá\9f\8bá\9e\94á\9f\92á\9e\8aá\9e¼á\9e\9aá\9e\85á\9f\86á\9e\96á\9f\84á\9f\87á\9e\91á\9f\86á\9e\96á\9f\90á\9e\9aá\9e\93á\9f\81á\9f\87â\80\8bá\9e\93á\9e¹á\9e\84á\9e\94á\9f\89á\9f\87á\9e\96á\9e¶á\9e\9bá\9f\8bá\9e\8aá\9e\9bá\9f\8bá\9e\91á\9f\92á\9e\9aá\9e\84á\9f\8bá\9e\91á\9f\92á\9e\9aá\9e¶á\9e\99á\9e\9aá\9e\94á\9e\9fá\9f\8bá\9e\91á\9f\86á\9e\96á\9f\90á\9e\9aá\9e¢á\9e\93á\9f\92á\9e\8fá\9e\9aá\9e\98á\9e»á\9e\81á\9e\9fá\9f\86á\9e\9aá\9e¶á\9e\94á\9f\8bá\9e¢á\9f\92á\9e\93á\9e\80á\9e\94á\9f\92á\9e\9aá\9e¾á\9e\94á\9f\92á\9e\9aá\9e¶á\9e\9fá\9f\8bâ\80\8bá\9e\87á\9e¶á\9e\85á\9f\92á\9e\9aá\9e¾á\9e\93 á\9e\8aá\9f\82á\9e\9bá\9e\94á\9f\92á\9e\9aá\9e¾á\9e\94á\9f\92á\9e\9aá\9e¶á\9e\9fá\9f\8bá\9e\9cá\9e·á\9e\82á\9e¸á\9e\93á\9f\81á\9f\87á\9f\94 á\9e\8aá\9e¾á\9e\98á\9f\92á\9e\94á\9e¸á\9e\94á\9e\93á\9f\92á\9e\90á\9f\82á\9e\98á\9e¬á\9e\95á\9f\92á\9e\9bá\9e¶á\9e\9fá\9f\8bá\9e\94á\9f\92á\9e\8aá\9e¼á\9e\9aá\9e\80á\9e¶á\9e\9aá\9e\94á\9e\80á\9e\94á\9f\92á\9e\9aá\9f\82â\80\8bá\9e\9fá\9f\86á\9e\9aá\9e¶á\9e\94á\9f\8bá\9e\9cá\9e·á\9e\82á\9e¸á\9e\91á\9e¶á\9f\86á\9e\84á\9e¢á\9e\9fá\9f\8b á\9e\9fá\9e¼á\9e\94á\9e\94á\9f\92á\9e\9aá\9e¾á\9e\94á\9f\92á\9e\9aá\9e¶á\9e\9fá\9f\8b  [//translatewiki.net/wiki/Main_Page?setlang=km translatewiki.net] á\9e\82á\9e\98á\9f\92á\9e\9aá\9f\84á\9e\84â\80\8bá\9e\94á\9e\80á\9e\94á\9f\92á\9e\9aá\9f\82á\9e\9aá\9e\94á\9e\9fá\9f\8bមេឌាវិគី ។",
 'sqlhidden' => '(ការអង្កេត SQL ត្រូវបិទបាំង)',
 'cascadeprotected' => 'ទំព័រនេះត្រូវបានការពារពីការការប្រែដោយសារវាមាន{{PLURAL:$1|ទំព័រ, ដែលមាន}} ដែលត្រូវបានការពារជាមួយជំរើស"ជាបណ្ដាក់"៖
 $2',
@@ -686,7 +686,7 @@ $2',
 'gotaccount' => "បើលោកអ្នកមានគណនីសម្រាប់ប្រើហើយ  សូម'''$1'''។",
 'gotaccountlink' => 'កត់ឈ្មោះចូល',
 'userlogin-resetlink' => 'តើអ្នកភ្លេចព័ត៌មានលំអិតសំរាប់កត់ឈ្មោះចូលហើយ?',
-'createaccountmail' => 'á\9e\8fá\9e¶á\9e\98á\9e\9aá\9e\99á\9f\88á\9e¢á\9f\8aá\9e¸á\9e\98á\9f\82á\9e\9b',
+'createaccountmail' => 'á\9e\94á\9f\92á\9e\9aá\9e¾á\9e\94á\9f\92á\9e\9aá\9e¶á\9e\9fá\9f\8bá\9e\96á\9e¶á\9e\80á\9f\92á\9e\99á\9e\9fá\9f\86á\9e\84á\9e¶á\9e\8fá\9f\8bá\9e\96á\9f\92á\9e\9aá\9f\80á\9e\84á\9e\94á\9e\8eá\9f\92á\9e\8aá\9f\84á\9f\87á\9e¢á\9e¶á\9e\9fá\9e\93á\9e»á\9f\92á\9e\93 á\9e\9aá\9e½á\9e\85á\9e\95á\9f\92á\9e\89á\9e¾á\9e\9cá\9e¶á\9e\91á\9f\85á\9e\80á\9e¶á\9e\93á\9f\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á\9e\81á\9e¶á\9e\84á\9e\80á\9f\92á\9e\9aá\9f\84á\9e\98',
 'createaccountreason' => 'មូលហេតុ៖',
 'badretype' => 'ពាក្យសំងាត់ដែលអ្នកបានបញ្ចូលនោះ គឺមិនស៊ីគ្នាទេ។',
 'userexists' => 'អត្តនាមដែលអ្នកបានវាយបញ្ចូលមានគេប្រើហើយ។
@@ -844,6 +844,7 @@ $2
 'changeemail-oldemail' => 'អាសយដ្ឋានអ៊ីមែលបច្ចុប្បន្ន៖',
 'changeemail-newemail' => 'អាសយដ្ឋានអ៊ីមែលថ្មី៖',
 'changeemail-none' => '(គ្មាន​)',
+'changeemail-password' => 'ពាក្យសំងាត់{{SITENAME}}របស់អ្នក:',
 'changeemail-submit' => 'ផ្លាស់ប្ដូរអ៊ីមែល',
 'changeemail-cancel' => 'បោះបង់',
 
@@ -1037,7 +1038,6 @@ $2
 'template-protected' => '(ត្រូវបានការពារ)',
 'template-semiprotected' => '(ត្រូវបានការពារពាក់កណ្តាល)',
 'hiddencategories' => 'ទំព័រនេះស្ថិតនៅក្នុង {{PLURAL:$1|ចំណាត់ថ្នាក់ក្រុមដែលត្រូវបានបិទបាំងមួយ|ចំណាត់ថ្នាក់ក្រុមដែលត្រូវបានបិទបាំងចំនួន$1}}:',
-'nocreatetitle' => 'ការបង្កើតទំព័រ​ត្រូវបានកម្រិត',
 'nocreatetext' => '{{SITENAME}} បានដាក់កំហិតលទ្ធភាពបង្កើតទំព័រថ្មី ។
 អ្នកអាចត្រឡប់ក្រោយ និង កែប្រែទំព័រមានស្រាប់ ឬ  [[Special:UserLogin|កត់ឈ្មោះចូលឬបង្កើតគណនី]]។',
 'nocreate-loggedin' => 'អ្នកគ្មានការអនុញ្ញាត​ឱ្យបង្កើតទំព័រថ្មី​ទេ។',
@@ -1412,9 +1412,9 @@ $1",
 'prefs-emailconfirm-label' => 'បញ្ជាក់ទទួលស្គាល់អ៊ីមែល៖',
 'prefs-textboxsize' => 'ទំហំរបស់ផ្ទាំងកែប្រែទំព័រ',
 'youremail' => 'អ៊ីមែល៖',
-'username' => 'អត្តនាម៖',
-'uid' => 'អត្តលេខ៖',
-'prefs-memberingroups' => 'សមាជិកក្នុង{{PLURAL:$1|ក្រុម|ក្រុម}}៖',
+'username' => '{{GENDER:$1|អត្តនាម}}៖',
+'uid' => 'អត្តលេខ{{GENDER:$1|អ្នកប្រើប្រាស់}}៖',
+'prefs-memberingroups' => '{{GENDER:$2|សមាជិក}}ក្នុង{{PLURAL:$1|ក្រុម|ក្រុម}}៖',
 'prefs-registration' => 'កាលបរិច្ឆេទចុះឈ្មោះ៖',
 'yourrealname' => 'ឈ្មោះពិត៖',
 'yourlanguage' => 'ភាសា៖',
@@ -1558,15 +1558,13 @@ $1",
 'right-sendemail' => 'ផ្ញើអ៊ីមែលទៅកាន់អ្នកប្រើដទៃ',
 'right-passwordreset' => 'មើលអ៊ីមែលសំរាប់កំណត់ពាក្យសំងាត់ឡើងវិញ',
 
+# Special:Log/newusers
+'newuserlogpage' => 'កំណត់ហេតុនៃការបង្កើតគណនី',
+'newuserlogpagetext' => 'នេះជាកំណត់ហេតុនៃការបង្កើតអ្នកប្រើប្រាស់។',
+
 # User rights log
 'rightslog' => 'កំណត់ហេតុនៃការប្តូរសិទ្ធិអ្នកប្រើប្រាស់',
 'rightslogtext' => 'នេះ​ជា​កំណត់ហេតុនៃបំលាស់ប្ដូរចំពោះកាប្ដូរក្រុមសមាជិកភាព​របស់​អ្នកប្រើប្រាស់។',
-'rightslogentry' => 'បានប្ដូរក្រុមសមាជិកភាពសម្រាប់ $1 ពី $2 ទៅ $3',
-'rightslogentry-autopromote' => 'ត្រូវបានតំលើងតំណែងដោយស្វ័យប្រវត្តិពី $2 ទៅជា $3',
-'logentry-rights-rights' => '$1 បានផ្លាស់ប្ដូរសមាជិកភាពរបស់ $3 ពី $4 ទៅជា $5',
-'logentry-rights-rights-legacy' => '$1បានផ្លាស់ប្ដូរសមាជិកភាពរបស់ $3',
-'logentry-rights-autopromote' => '$1 ត្រូវបានតំលើងសមាជិកភាពពី $4 ជា $5',
-'rightsnone' => '(ទទេ)',
 
 # Associated actions - in the sentence "You do not have permission to X"
 'action-read' => 'អានទំព័រនេះ',
@@ -2157,8 +2155,8 @@ $1',
 'linksearch-ns' => 'លំហឈ្មោះ៖',
 'linksearch-ok' => 'ស្វែងរក',
 'linksearch-text' => 'Wildcards ដូចជា "*.wikipedia.org" អាចប្រើបាន។
\9e\8fá\9f\86á\9e\9aá\9e¼á\9e\9cá\9e¢á\9f\84á\9e\99á\9e\98á\9e¶á\9e\93á\9e\99á\9f\89á\9e¶á\9e\84á\9e á\9f\84á\9e\85á\9e\8eá\9e¶á\9e\9fá\9f\8bá\9e¢á\9f\84á\9e\99á\9e\98á\9e¶á\9e\93á\9e\8aá\9e¼á\9e\98á\9f\89á\9f\82á\9e\93á\9e\80á\9f\86á\9e\9aá\9e·á\9e\8fá\9e\9bá\9e¾á\9e\82á\9f\81 á\9e§á\9e\91á\9e¶á\9e á\9e¶á\9e\9aá\9e\8eá\9f\8d "*.org"á\9f\94<br />
-ប្រូតូខូលប្រើបាន៖ <code>$1</code>  (តាមលំនាំដើមជា http:// ប្រសិនបើគ្មានបញ្ជាក់ប្រូតូខូល)។',
+តំរូវអោយមានយ៉ាងហោចណាស់អោយមានដូម៉ែនកំរិតលើគេ ឧទាហរណ៍ "*.org"។<br />
+{{PLURAL:$2ប្រូតូខូល|ប្រូតូខូល}}ប្រើបាន៖ <code>$1</code>  (តាមលំនាំដើមជា http:// ប្រសិនបើគ្មានបញ្ជាក់ប្រូតូខូល)។',
 'linksearch-line' => '$1បានតភ្ជាប់ពី$2',
 
 # Special:ListUsers
@@ -2170,16 +2168,12 @@ $1',
 # Special:ActiveUsers
 'activeusers' => 'បញ្ជីរាយនាមអ្នកប្រើប្រាស់សកម្ម',
 'activeusers-intro' => 'នេះជាបញ្ជីរាយនាមអ្នកប្រើប្រាស់ដែលមានសកម្មភាពក្នុងរូបភាពណាមួយក្នុងរយៈពេល $1 {{PLURAL:$1|ថ្ងៃ|ថ្ងៃ}}ចុងក្រោយ។',
-'activeusers-count' => '$1 {{PLURAL:$1|កំនែប្រែ|កំនែប្រែ}}ក្នុងរយៈពេល{{PLURAL:$3|ថ្ងៃ|$3 ថ្ងៃ}}ចុងក្រោយ',
+'activeusers-count' => '{{PLURAL:$1|សកម្មភាព|សកម្មភាព}}ចំនួន$1 ក្នុងរយៈពេល{{PLURAL:$3|១ថ្ងៃ|$3 ថ្ងៃ}}ចុងក្រោយ',
 'activeusers-from' => 'បង្ហាញអត្តនាមផ្ដើមដោយ៖',
 'activeusers-hidebots' => 'លាក់រូបយន្ត',
 'activeusers-hidesysops' => 'លាក់អ្នកអភិបាល',
 'activeusers-noresult' => 'អ្នកប្រើប្រាស់​រកមិនឃើញ​។​',
 
-# Special:Log/newusers
-'newuserlogpage' => 'កំណត់ហេតុនៃការបង្កើតគណនី',
-'newuserlogpagetext' => 'នេះជាកំណត់ហេតុនៃការបង្កើតអ្នកប្រើប្រាស់។',
-
 # Special:ListGroupRights
 'listgrouprights' => 'សិទ្ធិនិងក្រុមអ្នកប្រើប្រាស់',
 'listgrouprights-summary' => 'ខាងក្រោមនេះជាបញ្ជីរាយឈ្មោះក្រុមអ្នកប្រើប្រាស់ដែលបានកំណត់ជាមួយនឹងសិទ្ធិរបស់គេនៅលើវិគីនេះ។ មាន[[{{MediaWiki:Listgrouprights-helppage}}|ព័ត៌មានបន្ថែម]] អំពីសិទ្ធិផ្ទាល់ខ្លួន។',
@@ -2236,7 +2230,7 @@ $1',
 'usermessage-editor' => 'ប្រព័ន្ធផ្ញើសារ',
 
 # Watchlist
-'watchlist' => 'បញ្ជីតាមដានរបស់ខ្ញុំ',
+'watchlist' => 'បញ្ជីតាមដាន',
 'mywatchlist' => 'បញ្ជីតាមដាន​',
 'watchlistfor2' => 'សំរាប់ $1 $2',
 'nowatchlist' => 'គ្មានអ្វីនៅក្នុងបញ្ជីតាមដានរបស់អ្នកទេ។',
@@ -2310,6 +2304,8 @@ $UNWATCHURL
 
 មតិ​យោបល់​និងជំនួយបន្ថែម ៖
 {{canonicalurl:{{MediaWiki:Helppage}}}}',
+'created' => 'បានបង្កើត',
+'changed' => 'បានផ្លាស់ប្តូរ',
 
 # Delete
 'deletepage' => 'លុបទំព័រចោល',
@@ -2395,9 +2391,9 @@ $UNWATCHURL
 
 អ្នកអាចផ្លាស់ប្តូរកម្រិតការពារនៃ ទំព័រ ប៉ុន្តែវានឹងមិនប៉ះពាល់ដល់ការការពារជាថ្នាក់ទេ។',
 'protect-default' => 'អនុញ្ញាត​អ្នក​ប្រើ​ប្រាស់​ទាំង​អស់​',
-'protect-fallback' => 'á\9e\8fá\9e\98á\9f\92á\9e\9aá\9e¼á\9e\9cá\9e±á\9f\92á\9e\99á\9e\98á\9e¶á\9e\93á\9e\80á\9e¶á\9e\9aá\9e¢á\9e\93á\9e»á\9e\89á\9f\92á\9e\89á\9e¶á\9e\8fá\9e\93á\9f\83 "$1"',
-'protect-level-autoconfirmed' => 'á\9e á\9e¶á\9e\98á\9e\83á\9e¶á\9e\8fá\9f\8bá\9e¢á\9f\92á\9e\93á\9e\80á\9e\94á\9f\92á\9e\9aá\9e¾á\9e\94á\9f\92á\9e\9aá\9e¶á\9e\9fá\9f\8bá\9e\90á\9f\92á\9e\98á\9e¸â\80\8bá\9e\93á\9e¹á\9e\84â\80\8bá\9e¢á\9f\92á\9e\93á\9e\80â\80\8bâ\80\8bá\9e\98á\9e·á\9e\93á\9e\91á\9e¶á\9e\93á\9f\8bá\9e\85á\9e»á\9f\87á\9e\88á\9f\92á\9e\98á\9f\84á\9f\87',
-'protect-level-sysop' => 'á\9e\9fá\9e\98á\9f\92á\9e\9aá\9e¶á\9e\94á\9f\8bá\9e\8fá\9f\82á\9e¢á\9f\92á\9e\93á\9e\80á\9e\90á\9f\82á\9e\91á\9e¶á\9f\86á\9e\94á\9f\92á\9e\9aá\9e\96á\9f\90á\9e\93á\9f\92á\9e\92',
+'protect-fallback' => 'á\9e\9fá\9f\86á\9e\9aá\9e¶á\9e\94á\9f\8bá\9e\8fá\9f\82á\9e¢á\9f\92á\9e\93á\9e\80á\9e\8aá\9f\82á\9e\9bá\9e\98á\9e¶á\9e\93á\9e\80á\9e¶á\9e\9aá\9e¢á\9e\93á\9e»á\9e\89á\9f\92á\9e\89á\9e¶á\9e\8f "$1"',
+'protect-level-autoconfirmed' => 'á\9e\9fá\9f\86á\9e\9aá\9e¶á\9e\94á\9f\8bá\9e\8fá\9f\82á\9e¢á\9f\92á\9e\93á\9e\80á\9e\94á\9f\92á\9e\9aá\9e¾á\9e\94á\9f\92á\9e\9aá\9e¶á\9e\9fá\9f\8bá\9e\8aá\9f\82á\9e\9bá\9e\94á\9e¶á\9e\93á\9e\94á\9e\89á\9f\92á\9e\87á\9e¶á\9e\80á\9f\8bá\9e\91á\9e\91á\9e½á\9e\9bá\9e\9fá\9f\92á\9e\82á\9e¶á\9e\9bá\9f\8bá\9e\8aá\9f\84á\9e\99á\9e\9fá\9f\92á\9e\9cá\9f\90á\9e\99á\9e\94á\9f\92á\9e\9aá\9e\9cá\9e\8fá\9f\92á\9e\8fá\9e·',
+'protect-level-sysop' => 'á\9e\9fá\9e\98á\9f\92á\9e\9aá\9e¶á\9e\94á\9f\8bá\9e\8fá\9f\82á\9e¢á\9e\97á\9e·á\9e\94á\9e¶á\9e\9b',
 'protect-summary-cascade' => 'ការពារជា​ថ្នាក់',
 'protect-expiring' => 'ផុតកំណត់ $1 (UTC)',
 'protect-expiring-local' => 'ផុតកំណត់ $1',
@@ -2499,7 +2495,7 @@ $1',
 'blanknamespace' => '(ទូទៅ)',
 
 # Contributions
-'contributions' => 'ការរួមចំណែក​របស់អ្នកប្រើប្រាស់',
+'contributions' => 'ការរួមចំណែក​របស់{{GENDER:$1|អ្នកប្រើប្រាស់}}',
 'contributions-title' => 'ការរួមចំណែករបស់អ្នកប្រើប្រាស់ $1',
 'mycontris' => 'ការរួមចំណែក',
 'contribsub2' => 'សម្រាប់ $1 ($2)',
@@ -3543,6 +3539,7 @@ $5
 'version-software' => 'ផ្នែកទន់​ដែល​បានដំឡើង',
 'version-software-product' => 'ផលិតផល',
 'version-software-version' => 'កំណែ',
+'version-entrypoints-header-url' => 'URL',
 
 # Special:FilePath
 'filepath' => 'ផ្លូវនៃឯកសារ',
@@ -3577,7 +3574,7 @@ $5
 'specialpages-group-highuse' => 'ទំព័រដែលត្រូវបានប្រើច្រើន',
 'specialpages-group-pages' => 'បញ្ជីទំព័រនានា',
 'specialpages-group-pagetools' => 'ឧបករណ៍ទំព័រ',
-'specialpages-group-wiki' => 'ទិន្នន័យនិងឧបករណ៍វិគី',
+'specialpages-group-wiki' => 'ទិន្នន័យនិងឧបករណ៍',
 'specialpages-group-redirects' => 'ទំព័របញ្ជូនបន្តពិសេសៗ',
 'specialpages-group-spam' => 'ឧបករណ៍ស្ព៊ែម',
 
@@ -3649,7 +3646,10 @@ $5
 'logentry-newusers-create' => 'បានបង្កើតគណនីអ្នកប្រើប្រាស់ $1',
 'logentry-newusers-create2' => ' $3 បានបង្កើតគណនីអ្នកប្រើប្រាស់ $1',
 'logentry-newusers-autocreate' => 'គណនី $1 ត្រូវបានបង្កើតដោយស្វ័យប្រវត្តិ',
-'newuserlog-byemail' => 'ពាក្យសំងាត់ត្រូវបានផ្ញើតាមអ៊ីមែល',
+'logentry-rights-rights' => '$1 បានផ្លាស់ប្ដូរសមាជិកភាពរបស់ $3 ពី $4 ទៅជា $5',
+'logentry-rights-rights-legacy' => '$1បានផ្លាស់ប្ដូរសមាជិកភាពរបស់ $3',
+'logentry-rights-autopromote' => '$1 ត្រូវបានតំលើងសមាជិកភាពពី $4 ជា $5',
+'rightsnone' => '(ទទេ)',
 
 # Feedback
 'feedback-subject' => 'កម្មវត្ថុ ៖',
index 28b6490..b50820f 100644 (file)
@@ -7,6 +7,7 @@
  * @ingroup Language
  * @file
  *
+ * @author Akoppad
  * @author Ashwath Mattur <ashwatham@gmail.com> http://en.wikipedia.org/wiki/User:Ashwatham
  * @author Dipin
  * @author HPN
@@ -195,7 +196,7 @@ $messages = array(
 'newwindow' => '(ಹೊಸ ಕಿಟಕಿಯನ್ನು ತೆರೆಯುತ್ತದೆ)',
 'cancel' => 'ವಜಾ ಮಾಡಿ',
 'moredotdotdot' => 'ಇನ್ನಷ್ಟು...',
-'mypage' => 'ನನà³\8dನ à²ªà³\81à²\9f',
+'mypage' => 'ಪುಟ',
 'mytalk' => 'ಚರ್ಚೆ',
 'anontalk' => 'ಈ ಐ.ಪಿ ಗೆ ಮಾತನಾಡಿ',
 'navigation' => 'ಸಂಚರಣೆ',
@@ -528,6 +529,11 @@ $2',
 'resetpass-submit-cancel' => 'ರದ್ದು ಮಾಡು',
 'resetpass-temp-password' => 'ತಾತ್ಕಾಲಿಕ ಪ್ರವೇಶಪದ:',
 
+# Special:ChangeEmail
+'changeemail-newemail' => 'ಹೊಸ  ಇ-ಅಂಚೆ ವಿಳಾಸ:',
+'changeemail-submit' => 'ಇಮೇಲ್ ಬದಲಾಯಿಸಿ',
+'changeemail-cancel' => 'ರದ್ದುಗೊಳಿಸಿ',
+
 # Edit page toolbar
 'bold_sample' => 'ದಪ್ಪಗಿನ ಅಚ್ಚು',
 'bold_tip' => 'ದಪ್ಪಗಿನ ಅಚ್ಚು',
@@ -554,11 +560,14 @@ $2',
 'savearticle' => 'ಪುಟವನ್ನು ಉಳಿಸಿ',
 'preview' => 'ಮುನ್ನೋಟ',
 'showpreview' => 'ಮುನ್ನೋಟ',
+'showlivepreview' => 'ಸಜೀವ ಮುನ್ನೋಟ',
 'showdiff' => 'ಬದಲಾವಣೆಗಳನ್ನು ತೋರಿಸು',
 'anoneditwarning' => "'''ಎಚ್ಚರ:''' ನೀವು ಲಾಗ್ ಇನ್ ಆಗಿಲ್ಲ. ನಿಮ್ಮ ಐಪಿ ವಿಳಾಸವು ಪುಟದ ಸಂಪಾದನೆಗಳ ಇತಿಹಾಸದಲ್ಲಿ ದಾಖಲಾಗುತ್ತದೆ.",
+'anonpreviewwarning' => "''ನೀವು ಲಾಗಿನ್ ಆಗಿಲ್ಲ . ಉಳಿಸಲು ಪ್ರಯತ್ನಿಸಿದಾಗ ನಿಮ್ಮ IP ವಿಳಾಸವನ್ನು ಈ ಪುಟದ ಸಂಪಾದನೆ ಇತಿಹಾಸದಲ್ಲಿ ನಮೂದಿಸಲಗುವುದು.''",
 'missingsummary' => "'''ಗಮನಿಸಿ:''' ನಿಮ್ಮ ಸಂಪಾದನೆಯ ಸಾರಾಂಶವನ್ನು ನೀವು ನೀಡಿಲ್ಲ. ಮತ್ತೊಮ್ಮೆ \"ಉಳಿಸು\" ಗುಂಡಿಯನ್ನು ಒತ್ತಿದರೆ, ಸಾರಾಂಶವಿಲ್ಲದೆಯೇ ನಿಮ್ಮ ಸಂಪಾದನೆಯನ್ನು ಉಳಿಸಲಾಗುವುದು.",
-'missingcommentheader' => "'''ಗಮನಿಸಿ:''' ಈ ವ್ಯಾಖ್ಯಾನದ ವಿಷಯ ಅಥವ ತಲೆಬರಹ ನೀವು ಸೂಚಿಸಿಲ್ಲ.
-ಮತ್ತೊಮೆ ಉಳಿಸಿ ಅನ್ನು ಒತ್ತಿದರೆ ನಿಮ್ಮ ಸಂಪಾದನೆಯನ್ನು ಹಾಗೆಯೇ ಉಳಿಸಲಾಗುವುದು.",
+'missingcommenttext' => 'ಕೆಳಗೆ ಒಂದು ಟಿಪ್ಪಣಿ ನಮೂದಿಸಿ',
+'missingcommentheader' => "'''ಗಮನಿಸಿ:''' ಈ ವ್ಯಾಖ್ಯಾನಕ್ಕೆ ವಿಷಯ ಅಥವ ತಲೆಬರಹ ನೀವು ಸೂಚಿಸಿಲ್ಲ. ನೀವು \"{{int:savearticle}}\"
+ಮತ್ತೊಮೆ ಒತ್ತಿದರೆ ನಿಮ್ಮ ಸಂಪಾದನೆಯನ್ನು ಹಾಗೆಯೇ ಉಳಿಸಲಾಗುವುದು.",
 'summary-preview' => 'ತಾತ್ಪರ್ಯ ಮುನ್ನೋಟ:',
 'subject-preview' => 'ವಿಷಯದ/ತಲೆಬರಹದ ಮುನ್ನೋಟ:',
 'blockedtitle' => 'ಈ ಸದಸ್ಯರನ್ನು ತಡೆ ಹಿಡಿಯಲಾಗಿದೆ.',
@@ -619,6 +628,8 @@ $2',
 ನೀವು ಇತರ ಪುಟಗಳಲ್ಲಿ [[ವಿಶೇಷ:Search/{{PAGENAME}}|ಈ ಶೀರ್ಷಿಕೆಗಾಗಿ ಹುಡುಕಬಹುದು]],
 ಅಥವಾ <span class="plainlinks">[{{fullurl:{{#Special:Log}}|page={{FULLPAGENAMEE}}}} ಸಂಬಂಧಿಸಿದ ದಾಖಲಾತಿ ಹುಡುಕಿ]</span>.',
 'userpage-userdoesnotexist' => 'ಬಳಕೆದಾರ ಖಾತೆ "<nowiki>$1</nowiki>" ದಾಖಲಾಗಿಲ್ಲ. ನೀವು ಇದೇ ಪುಟವನ್ನು ಸೃಷ್ಟಿ/ಸಂಪಾದನೆ ಮಾಡಬೇಕೆಂದಿರುವಿರಿ ಎಂದು ಖಾತ್ರಿ ಮಾಡಿಕೊಳ್ಳಿ.',
+'blocked-notice-logextract' => 'ಈ ಬಳಕೆದಾರರನ್ನು  ಪ್ರಸ್ತುತವಾಗಿ  ನಿರ್ಬಂಧಿಸಲಾಗಿದೆ. 
+ಇತ್ತೀಚಿನ  ನಿರ್ಬಂಧನೆಯ ದಾಖಲೆಯನ್ನು ಉಲ್ಲೇಖಕ್ಕಾಗಿ ಕೆಳಗೆ ಕೊಟ್ಟಿದೆ:',
 'usercssyoucanpreview' => "'''ಗಮನಿಸಿ:''' ಉಳಿಸುವ ಮುನ್ನ 'ಮುನ್ನೋಟ' ಗುಂಡಿಯನ್ನು ಉಪಯೋಗಿಸಿ ನಿಮ್ಮ ಹೊಸ CSS ಅನ್ನು ಪ್ರಯೋಗ ಮಾಡಿ.",
 'userjsyoucanpreview' => "'''ಗಮನಿಸಿ:''' ಉಳಿಸುವ ಮುನ್ನ 'ಮುನ್ನೋಟ' ಗುಂಡಿಯನ್ನು ಉಪಯೋಗಿಸಿ ನಿಮ್ಮ ಹೊಸ JS ಅನ್ನು ಪ್ರಯೋಗ ಮಾಡಿ.",
 'usercsspreview' => "'''ನೆನಪಿಡಿ: ನೀವು ಇಲ್ಲಿ ಕೇವಲ ನಿಮ್ಮ ಬಳಕೆದಾರ CSSನ ಮುನ್ನೋಟ ನೋಡುತ್ತಿರುವಿರಿ.'''
@@ -626,8 +637,10 @@ $2',
 'userjspreview' => "'''ಗಮನಿಸಿ: ನೀವು ನಿಮ್ಮ ಬಳಕೆದಾರ JavaScriptನ ಮುನ್ನೋಟ ನೋಡುತ್ತಿರುವಿರಿ ಅಥವ ಪ್ರಯೋಗ ಮಾಡುತ್ತಿರುವಿರಿ. ಅದನ್ನಿನ್ನೂ ಉಳಿಸಲಾಗಿಲ್ಲ!'''",
 'sitecsspreview' => "'''ನೆನಪಿಡಿ: ನೀವು ಇಲ್ಲಿ ಕೇವಲ ನಿಮ್ಮ ಬಳಕೆದಾರ CSSನ ಮುನ್ನೋಟ ನೋಡುತ್ತಿರುವಿರಿ.''''''ಅದನ್ನು ಇನ್ನೂ ಉಳಿಸಲಾಗಿಲ್ಲ!'''",
 'sitejspreview' => "'''ನೆನಪಿಡಿ: ನೀವು ಇಲ್ಲಿ ಕೇವಲ ನಿಮ್ಮ ಬಳಕೆದಾರ CSSನ ಮುನ್ನೋಟ ನೋಡುತ್ತಿರುವಿರಿ.''''''ಅದನ್ನು ಇನ್ನೂ ಉಳಿಸಲಾಗಿಲ್ಲ!'''",
+'updated' => '(ನಕಲೆರಿಸಲಾಗಿದೆ)',
 'note' => "'''ಸೂಚನೆ:'''",
 'previewnote' => "'''ಇದು ಕೇವಲ ಮುನ್ನೋಟ; ಪುಟವನ್ನು ಇನ್ನೂ ಉಳಿಸಲಾಗಿಲ್ಲ ಎಂಬುದನ್ನು ಮರೆಯದಿರಿ!'''",
+'continue-editing' => 'ಸಂಪಾದನೆಯ ಪ್ರದೇಶಕ್ಕೆ  ಹೋಗಿ',
 'editing' => "'$1' ಲೇಖನ ಬದಲಾಯಿಸಲಾಗುತ್ತಿದೆ",
 'editingsection' => '$1 (ವಿಭಾಗ) ಅನ್ನು ಸಂಪಾದಿಸುತ್ತಿರುವಿರಿ',
 'editingcomment' => '$1 (ಹೊಸ ವಿಭಾಗ) ಸಂಪಾದಿಸಲಾಗುತ್ತಿದೆ',
@@ -661,7 +674,6 @@ $2',
 'template-protected' => '(ಸಂರಕ್ಷಿತ)',
 'template-semiprotected' => '(ಅರೆ-ಸಂರಕ್ಷಿತ)',
 'hiddencategories' => 'ಈ ಪುಟವು {{PLURAL:$1|೧ ಗುಪ್ತ ವರ್ಗಕ್ಕೆ|$1 ಗುಪ್ತ ವರ್ಗಗಳಿಗೆ}} ಸೇರಿದೆ:',
-'nocreatetitle' => 'ಪುಟವನ್ನು ಸೃಷ್ಟಿಸುವುದನ್ನು ನಿಯಮಿಸಲಾಗಿದೆ',
 'nocreatetext' => '{{SITENAME}} ಅಲ್ಲಿ ಹೊಸ ಪುಟಗಳನ್ನು ಸೃಷ್ಟಿಸಲು ಕೆಲವು ನಿಬಂಧನೆಗಳಿವೆ.
 ನೀವು ಹಿಂದಿರುಗಿ ಆಗಲೇ ಅಸ್ಥಿತ್ವದಲ್ಲಿರುವ ಪುಟವೊಂದನ್ನು ಸಂಪಾದಿಸಿ, ಅಥವ [[Special:UserLogin|ಲಾಗ್ ಇನ್ ಆಗಿ ಅಥವ ಹೊಸ ಸದಸ್ಯರಾಗಿ]].',
 'nocreate-loggedin' => 'ಹೊಸ ಪುಟಗಳನ್ನು ಸೃಷ್ಟಿಸಲು ನಿಮಗೆ ಅನುಮತಿ ಇಲ್ಲ.',
@@ -998,28 +1010,48 @@ $2',
 'right-edit' => 'ಪುಟಗಳನ್ನು ಬದಲಾಯಿಸಿ',
 'right-createpage' => 'ಪುಟಗಳನ್ನು ಸೃಷ್ಟಿಸಿ (ಚರ್ಚಾ ಪುಟಗಳಲ್ಲಿ ಇಲ್ಲದ್ದು)',
 'right-upload' => 'ಕಡತಗಳನ್ನು ಅಪ್ಲೋಡ್ ಮಾಡು',
+'right-reupload' => 'ಅಸ್ತಿತ್ವದಲ್ಲಿರುವ ಫೈಲ್ ಗಳ ಕಡತಗಳ ಮೇಲೆ ಬರೆಯಿರಿ',
+'right-reupload-own' => 'ವತಃ ತಾವೇ ನಕಲೆರಿಸಿರುವ ಅಸ್ತಿತ್ವದಲ್ಲಿರುವ ಫೈಲ್ ಗಳ ಕಡತಗಳ ಮೇಲೆ ಬರೆಯಿರಿ',
 'right-delete' => 'ಪುಟಗಳನ್ನು ಅಳಿಸಿ',
 'right-bigdelete' => 'ಜಾಸ್ತಿ ಇತಿಹಾಸವಿರುವ ಪುಟಗಳನ್ನು ಅಳಿಸಿ',
 'right-deleterevision' => 'ಪುಟದ ಕೆಲ ಆವೃತ್ತಿಗಳನ್ನು ಅಳಿಸಿ ಹಾಗು ಉಳಿಸಿ',
 'right-deletedtext' => 'ಆಳಿಸಿದ ಪಠ್ಯ ಮತ್ತು ಅಳಿಸಿದ ಆವೃತ್ತಿಗಳ ನಡುವಿನ ಬದಲಾವಣೆಗಳನ್ನು ನೋಡಿ',
 'right-browsearchive' => 'ಅಳಿಸಲಾಗಿರುವ ಪುಟಗಳನ್ನು ಹುಡುಕಿ',
+'right-undelete' => 'ಆಳಿಸಿದ ಪುಟವನ್ನು ಉಳಿಸಿ',
+'right-unwatchedpages' => 'ಪಹರೆಯಿಲ್ಲದ ಪುಟಗಳ ಪಟ್ಟಿಯನ್ನು ವೀಕ್ಷಿಸಿ',
+'right-mergehistory' => 'ಪುಟಗಳು ಇತಿಹಾಸದಲ್ಲಿ ವಿಲೀನಗೊಳಿಸಿ',
+'right-userrights' => 'ಎಲ್ಲಾ ಬಳಕೆದಾರ ಹಕ್ಕುಗಳನ್ನು ತಿದ್ದುಪಡಿಸಿ',
+'right-userrights-interwiki' => 'ಬೇರೆ ವಿಕಿಗಳ ಮೇಲೆ  ಎಲ್ಲಾ ಬಳಕೆದಾರ ಹಕ್ಕುಗಳನ್ನು ತಿದ್ದುಪಡಿಸಿ',
+'right-siteadmin' => 'ಡೇಟಾಬೇಸ್ ನ್ನು ಬೀಗ ಹಾಕಿ ತೆಗೆಯಿರಿ',
+'right-sendemail' => 'ಇತರ ಬಳಕೆದಾರರಿಗೆ ಇಮೇಲ್ ಕಳುಹಿಸಿ',
+'right-passwordreset' => 'ಪಾಸ್ವರ್ಡ್ ಮತ್ತೆ ಜೋಡಿಸಲ್ಪಟ್ಟ  ಇಮೇಲ್ ಗಳನ್ನು ವೀಕ್ಷಿಸಿ',
+
+# Special:Log/newusers
+'newuserlogpage' => 'ಸದಸ್ಯತ್ವ ಸೃಷ್ಟಿಗಳ ದಾಖಲೆ',
 
 # User rights log
 'rightslog' => 'ಸದಸ್ಯರ ಹಕ್ಕುಗಳ ದಾಖಲೆಗಳು',
 'rightslogtext' => 'ಇದು ಬಳಕೆದಾರ ಹಕ್ಕುಗಳ ಬದಲಾವಣೆಗಳ ದಾಖಲೆ.',
-'rightslogentry' => '$1 ಅವರ ಗುಂಪು ಸದಸ್ಯತ್ವವನ್ನು $2 ಇಂದ $3 ಗೆ ಬದಲಾಯಿಸಲಾಯಿತು',
-'rightsnone' => '(ಯಾವೂ ಇಲ್ಲ)',
 
 # Associated actions - in the sentence "You do not have permission to X"
 'action-read' => 'ಈ ಪುಟವನ್ನು ಓದಿ',
 'action-edit' => 'ಪುಟದ ಸಂಪಾದನೆ',
 'action-createpage' => 'ಪುಟಗಳನ್ನು ಸೃಷ್ಟಿಸು',
 'action-createtalk' => 'ಚರ್ಚಾ ಪುಟಗಳನ್ನು ಸೃಷ್ಟಿಸು',
+'action-createaccount' => 'ಈ ಬಳಕೆದಾರ ಖಾತೆಯನ್ನು ರಚಿಸಿ',
+'action-minoredit' => 'ಈ ತಿದ್ದುಪಡಿಯನ್ನು ಚಿಕ್ಕದೆಂದು ಗುರುತಿಸಿ',
+'action-move' => 'ಈ ಪುಟವನ್ನು ಸ್ಥಳಾಂತರಿಸಿ',
+'action-move-subpages' => 'ಈ ಪುಟವನ್ನು ಮತ್ತು ಅದರ ಉಪಪುಟಗಳನ್ನು ಸ್ಥಳಾಂತರಿಸಿ',
+'action-movefile' => 'ಈ ಪುಟವನ್ನು ಸ್ಥಳಾಂತರಿಸಿ',
+'action-upload' => 'ಈ ಫೈಲ್ ಅನ್ನು  ನಕಲೆರಿಸಿ',
 'action-delete' => 'ಈ ಪುಟವನ್ನು ಅಳಿಸು',
 'action-deleterevision' => 'ಈ ಆವೃತ್ತಿಯನ್ನು ಅಳಿಸು',
 'action-browsearchive' => 'ಅಳಿಸಲಾಗಿರುವ ಪುಟಗಳನ್ನು ಹುಡುಕು',
 'action-block' => 'ಈ ಸದಸ್ಯರನ್ನು ಸಂಪಾದಿಸಲು ಆಗದಂತೆ ನಿರ್ಭಂಧಿಸಿ',
 'action-protect' => 'ಈ ಪುಟದ ಸಂರಕ್ಷಣೆ ಮಟ್ಟಗಳನ್ನು ಬದಲಾಯಿಸಲು',
+'action-unwatchedpages' => 'ಪಹರೆಯಿಲ್ಲದ ಪುಟಗಳ ಪಟ್ಟಿಯನ್ನು ವೀಕ್ಷಿಸಿ',
+'action-userrights' => 'ಎಲ್ಲಾ ಬಳಕೆದಾರ ಹಕ್ಕುಗಳನ್ನು ತಿದ್ದುಪಡಿಸಿ',
+'action-sendemail' => 'ಇ-ಅಂಚೆ ಕಳುಹಿಸಿ',
 
 # Recent changes
 'nchanges' => '$1 {{PLURAL:$1|ಬದಲಾವಣೆ|ಬದಲಾವಣೆಗಳು}}',
@@ -1097,6 +1129,9 @@ $2',
 'filetype-banned-type' => "'''\".\$1\"''' ಒಂದು ನಿರ್ಬಂಧಿತ ಫೈಲಿನ ಮಾದರಿ.  ನಿರ್ಬಂಧನೆಯಿಲ್ಲದ ಫೈಲಿನ {{PLURAL:\$3|ಮಾದರಿಯು|ಮಾದರಿಗಳು}} \$2.",
 'filetype-missing' => 'ಈ ಫೈಲಿಗೆ ಉಪನಾಮ (extension ಉದಾ ".jpg") ಇಲ್ಲ.',
 'empty-file' => 'ನೀವು ಸಮರ್ಪಿಸಿದ ಕಡತವು ಖಾಲಿಯಾಗಿತ್ತು.',
+'unknown-error' => 'ಒಂದು ಅಜ್ಞಾತ ದೋಷ ಸಂಭವಿಸಿದೆ.',
+'tmp-create-error' => 'ತಾತ್ಕಾಲಿಕ ಕಡತವನ್ನು ರಚಿಸಲು ಸಾಧ್ಯವಾಗಿಲ್ಲ',
+'tmp-write-error' => 'ತಾತ್ಕಾಲಿಕ ಕಡತವನ್ನು ಬರೆಯುವಾಗ  ದೋಷ ಉಂಟಾಗಿದೆ',
 'large-file' => 'ಫೈಲುಗಳು $1 ಗಿಂತ ದೊಡ್ಡದಾಗಿರಬಾರದೆಂದು ಶಿಫಾರಿತ;
 ಈ ಫೈಲಿನ ಗಾತ್ರ $2.',
 'largefileserver' => 'ಈ ಫೈಲು ಸರ್ವರ್‍ನಲ್ಲಿ ಸೇರ್ಪಡೆ ಮಾಡಲು ಶಿಫಾರಿತ ಗಾತ್ರಕ್ಕಿಂತ ದೊಡ್ಡದಾಗಿದೆ.',
@@ -1132,6 +1167,7 @@ $2',
 'upload-source' => 'ಮೂಲ ಕಡತ',
 'sourcefilename' => 'ಮೂಲ ಫೈಲಿನ ಹೆಸರು:',
 'upload-maxfilesize' => 'ಗರಿಷ್ಠ ಫೈಲು ಗಾತ್ರ: $1',
+'upload-description' => 'ಕಡತ ವಿವರಣೆ',
 'watchthisupload' => 'ಈ ಪುಟವನ್ನು ವೀಕ್ಷಿಸಿ',
 'filewasdeleted' => 'ಈ ಹೆಸರಿನ ಫೈಲು ಮುಂಚೆ ಅಪ್ಲೋಡ್ ಮಾಡಲಾಗಿ ಅದನ್ನು ಆನಂತರ ಅಳಿಸಲಾಗಿತ್ತು.
 ಇದನ್ನು ಮತ್ತೊಮ್ಮೆ ಅಪ್ಲೋಡ್ ಮಾಡುವ ಮುನ್ನ ನೀವು $1 ಅನ್ನು ಪರೀಕ್ಷಿಸಬೇಕು.',
@@ -1143,6 +1179,15 @@ $2',
 'upload-misc-error' => 'ತಿಳಿದಿಲ್ಲದ ಅಪ್ಲೋಡ್ ದೋಷ',
 'upload-unknown-size' => 'ಅಪರಿಚಿತ ಗಾತ್ರ',
 
+# ZipDirectoryReader
+'zip-file-open-error' => 'ZIP ಚೆಕ್ಗಳಿಗೆ ಕಡತವನ್ನು ತೆರೆಯುವಾಗ ಒಂದು ದೋಷ ಸಂಭವಿಸಿದೆ.',
+'zip-wrong-format' => 'ಸೂಚಿಸಲಾದ ಕಡತ ZIP ಫೈಲ್ ಅಲ್ಲ.',
+
+# Special:UploadStash
+'uploadstash-badtoken' => 'ಕ್ರಿಯೆಯನ್ನು ನಿರ್ವಹಿಸುವಾಗ ನಿಮ್ಮ ಸಂಪಾದನೆಯನ್ನು ರುಜುವಾತುಗಳು ಅವಧಿ ಬಹುಶಃ, ಯಶಸ್ವಿಯಾಗಿಲ್ಲ. ಮತ್ತೆ ಪ್ರಯತ್ನಿಸಿ.',
+'uploadstash-errclear' => 'ಕಡತಗಳನ್ನು ತೆರವುಗೊಳಿಸುವುದು ಯಶಸ್ವಿಯಾಗಿಲ್ಲ.',
+'uploadstash-refresh' => 'ಕಡತಗಳ ಪಟ್ಟಿಯನ್ನು ಪುನಃ ಭಾರಹೇರಿಸಿ',
+
 # img_auth script messages
 'img-auth-accessdenied' => 'ಅನುಮತಿ ನಿರಾಕರಿಸಲಾಗಿದೆ',
 'img-auth-nofile' => 'ಕಡತ "$1" ಅಸ್ತಿತ್ವದಲ್ಲಿಲ್ಲ.',
@@ -1152,9 +1197,14 @@ $2',
 'upload-curl-error6-text' => 'ನೀಡಲ್ಪಟ್ಟ URL ಅನ್ನು ತಲುಪಲು ಆಗಲಿಲ್ಲ.
 ಈ URL ಸರಿಯಿದೆ ಮತ್ತು ಆ ತಾಣ ಕಾರ್ಯ ಮಾಡುತ್ತಿದೆ ಎಂದು ಮತ್ತೊಮ್ಮೆ ಪರೀಕ್ಷಿಸಿ.',
 'upload-curl-error28' => 'ಅಪ್ಲೋಡ್ ಕಾಲಾವಧಿ ಮೀರಿದೆ',
+'upload-curl-error28-text' => 'ಸೈಟ್ ಪ್ರತಿಕ್ರಿಯೆ ತೀರಾ ತಡವಾಗಿದೆ.
+ಸೈಟ್ ನಡೆಯುತ್ತಿದೆಯೇ ಎಂದು  ಪರಿಶೀಲಿಸಿ, ಸ್ವಲ್ಪ  ಸಮಯದ ನಂತರ ಮತ್ತೊಮ್ಮೆ ಪ್ರಯತ್ನಿಸಿ.
+ಸ್ವಲ್ಪ ಕಡಿಮೆ ಕಾರ್ಯನಿರತವಾಗಿರುವಾಗ ಪ್ರಯತ್ನಿಸಿ ಬಹುದು.',
 
 'license' => 'ಪರವಾನಗಿ:',
 'license-header' => 'ಪರವಾನಗಿ',
+'nolicense' => 'ಆಯ್ಕೆ ಇಲ್ಲ',
+'license-nopreview' => '(ಪೂರ್ವವೀಕ್ಷಣೆ ಲಭ್ಯವಿಲ್ಲ)',
 'upload_source_url' => ' (ಒಂದು ಮನ್ನಿತ, ಸಾರ್ವಜನಿಕವಾಗಿ ಎಟಕುವ URL)',
 'upload_source_file' => ' (ನಿಮ್ಮ ಗಣಕಯಂತ್ರದಲ್ಲಿರುವ ಒಂದು ಫೈಲು)',
 
@@ -1186,12 +1236,15 @@ $2',
 'filehist-dimensions' => 'ಆಯಾಮಗಳು',
 'filehist-filesize' => 'ಫೈಲಿನ ಗಾತ್ರ',
 'filehist-comment' => 'ವಕ್ಕಣೆ',
+'filehist-missing' => 'ಫೈಲು ಕಾಣೆಯಾಗಿದೆ',
 'imagelinks' => 'ಕಡತ ಬಳಕೆ',
 'linkstoimage' => 'ಈ ಕೆಳಗಿನ {{PLURAL:$1|ಪುಟವು|$1 ಪುಟಗಳು}} ಈ ಚಿತ್ರಕ್ಕೆ ಸಂಪರ್ಕ {{PLURAL:$1|ಹೊಂದಿದೆ|ಹೊಂದಿವೆ}}:',
 'nolinkstoimage' => 'ಈ ಫೈಲಿಗೆ ಯಾವ ಪುಟವೂ ಸಂಪರ್ಕ ಹೊಂದಿಲ್ಲ.',
 'sharedupload' => 'ಈ ಫೈಲು $1 ಇಂದ. ಇದು ಇತರ ಯೋಜನೆಗಳಲ್ಲಿ ಉಪಯೋಗದಲ್ಲಿರಬಹುದು.',
 'sharedupload-desc-here' => 'ಈಧು ಬನ್ದಿರುವುಧು $1 ಮಥು ಹಲವು ಯೋಜನೆ  ಯಲ್ಲಿ ಉಪಯೊಗ ವಗುಥದೆ. 
 ಕೊಟುರುವ   ವಿವರನೆ [$2 ಕತಥೆ ವಿವರನೆ ಪುಟಾ] ಕೆಲ್ಲಕೆ ನೊಡೀ.',
+'filepage-nofile' => 'ಈ ಹೆಸರಿನ ಫೈಲ್ ಅಸ್ತಿತ್ವದಲ್ಲಿಲ್ಲ',
+'filepage-nofile-link' => 'ಈ ಹೆಸರಿನ ಫೈಲ್ ಅಸ್ತಿತ್ವದಲ್ಲಿಲ್ಲ ಆದರೆ ನೀವು ಇದನ್ನು [$1 ನಕಲೆರಿಸಬಹುದು ]',
 'uploadnewversion-linktext' => 'ಈ ಫೈಲಿನ ಹೊಸ ಆವೃತ್ತಿಯನ್ನು ಅಪ್ಲೋಡ್ ಮಾಡಿ',
 
 # File reversion
@@ -1215,6 +1268,7 @@ $2',
 ** ಕೃತಿಸ್ವಾಮ್ಯತೆ ಉಲ್ಲಂಘನೆ
 ** ದ್ವಿಪ್ರತಿಗಳಿರುವ ಫೈಲು',
 'filedelete-edit-reasonlist' => 'ಅಳಿಸುವಿಕೆಯ ಕಾರಣಗಳನ್ನು ಸಂಪಾದಿಸು',
+'filedelete-maintenance-title' => 'ಕಡತವನ್ನು ಅಳಿಸಲು ಸಾಧ್ಯವಿಲ್ಲ',
 
 # MIME search
 'mimesearch' => 'MIME ಹುಡುಕಾಟ',
@@ -1247,7 +1301,9 @@ $2',
 'statistics-header-views' => 'ವೀಕ್ಷಣಾ ಅಂಕಿಅಂಶಗಳು',
 'statistics-header-users' => 'ಸದಸ್ಯರ ಅಂಕಿ ಅಂಶ',
 'statistics-header-hooks' => 'ಇತರ ಅಂಕಿಅಂಶಗಳು',
+'statistics-articles' => 'ಲೇಖನ ಪುಟ',
 'statistics-pages' => 'ಪುಟಗಳು',
+'statistics-views-total' => 'ಒಟ್ಟು ವೀಕ್ಷಣೆಗಳು',
 'statistics-mostpopular' => 'ಅತ್ಯಂತ ಹೆಚ್ಚು ವೀಕ್ಷಿತ ಪುಟಗಳು',
 
 'disambiguations' => 'ದ್ವಂದ್ವನಿವಾರಣಾ ಪುಟಗಳು',
@@ -1368,9 +1424,7 @@ $2',
 
 # Special:ActiveUsers
 'activeusers' => 'ಸಕ್ರಿಯ ಸದಸ್ಯರ ಪಟ್ಟಿ',
-
-# Special:Log/newusers
-'newuserlogpage' => 'ಸದಸ್ಯತ್ವ ಸೃಷ್ಟಿಗಳ ದಾಖಲೆ',
+'activeusers-noresult' => 'ಯಾವ ಬಳಕೆದಾರರೂ ಸಿಗಲಿಲ್ಲ.',
 
 # Special:ListGroupRights
 'listgrouprights' => 'ಬಳಕೆದಾರ ಗುಂಪು ಹಕ್ಕುಗಳು',
@@ -1385,6 +1439,7 @@ $2',
 'mailnologin' => 'ಕಳುಹಿಸುವ ವಿಳಾಸ ಇಲ್ಲ',
 'mailnologintext' => 'ಇತರ ಬಳಕೆದಾರರಿಗೆ ಇ-ಅಂಚೆ ಕಳುಹಿಸಲು ನೀವು [[Special:UserLogin|ಲಾಗ್ ಇನ್]] ಆಗಿರಬೇಕು ಮತ್ತು ನಿಮ್ಮ [[Special:Preferences|ಪ್ರಾಶಸ್ತ್ಯಗಳ ಪುಟದಲ್ಲಿ]] ಒಂದು ಧೃಡೀಕೃತ ಇ-ಅಂಚೆ ವಿಳಾಸ ನೀಡಿರಬೇಕು.',
 'emailuser' => 'ಈ ಸದಸ್ಯರಿಗೆ ಇ-ಅಂಚೆ ಕಳಿಸಿ',
+'emailuser-title-notarget' => 'ಸದಸ್ಯರಿಗೆ ವಿ-ಅ೦ಚೆ ಕಳಿಸಿ',
 'emailpage' => 'ಸದಸ್ಯರಿಗೆ ವಿ-ಅ೦ಚೆ ಕಳಿಸಿ',
 'defemailsubject' => 'ವಿಕಿಪೀಡಿಯ ವಿ-ಅ೦ಚೆ',
 'noemailtitle' => 'ಯಾವುದೇ ಇ-ಅಂಚೆ ವಿಳಾಸ ಇಲ್ಲ',
@@ -1432,6 +1487,8 @@ $2',
 'enotif_impersonal_salutation' => '{{SITENAME}} ಸದಸ್ಯ',
 'enotif_lastvisited' => 'ನಿಮ್ಮ ಕಳೆದ ಭೇಟಿಯ ನಂತರದ ಎಲ್ಲಾ ಬದಲಾವಣೆಗಳಿಗೆ $1 ನೋಡಿ.',
 'enotif_anon_editor' => 'ಅನಾಮಧೇಯ ಸದಸ್ಯ $1',
+'created' => 'ಸೃಷ್ಟಿಸಲ್ಪಟ್ಟಿದೆ',
+'changed' => 'ಬದಲಾಯಿಸಲಾಗಿದೆ',
 
 # Delete
 'deletepage' => 'ಪುಟವನ್ನು ಅಳಿಸಿ',
@@ -1548,6 +1605,8 @@ $2',
 'sp-contributions-logs' => 'ದಾಖಲೆಗಳು',
 'sp-contributions-talk' => 'ಚರ್ಚೆ',
 'sp-contributions-userrights' => 'ಬಳಕೆದಾರ ಹಕ್ಕುಗಳ ನಿರ್ವಹಣೆ',
+'sp-contributions-blocked-notice' => 'ಈ ಬಳಕೆದಾರರನ್ನು  ಪ್ರಸ್ತುತವಾಗಿ  ನಿರ್ಬಂಧಿಸಲಾಗಿದೆ. 
+ಇತ್ತೀಚಿನ  ನಿರ್ಬಂಧನೆಯ ದಾಖಲೆಯನ್ನು ಉಲ್ಲೇಖಕ್ಕಾಗಿ ಕೆಳಗೆ ಕೊಟ್ಟಿದೆ:',
 'sp-contributions-search' => 'ಸಂಪಾದನೆಗಳನ್ನು ಹುಡುಕು',
 'sp-contributions-username' => 'IP ವಿಳಾಸ ಅಥವ ಬಳಕೆಯ ಹೆಸರು:',
 'sp-contributions-toponly' => 'ಕೇವಲ ಇತ್ತೀಚಿನ ಪರಿಷ್ಕರಣೆಗೆ ಸಂಬಂಧಿಸಿದ ಸಂಪಾದನೆಗಳನ್ನು ಮಾತ್ರ ತೋರಿಸು',
@@ -2118,6 +2177,7 @@ $5
 # New logging system
 'revdelete-restricted' => 'ನಿರ್ವಾಹಕರಿಗೆ ನಿಬಂಧನೆಗಳನ್ನು ಅನ್ವಯಿಸಲಾಯಿತು',
 'revdelete-unrestricted' => 'ನಿರ್ವಾಹಕರ ನಿಬಂಧನೆಗಳನ್ನು ತೆಗೆಯಲಾಯಿತು',
+'rightsnone' => '(ಯಾವೂ ಇಲ್ಲ)',
 
 # Durations
 'duration-seconds' => '$1 {{PLURAL:$1|ಕ್ಷಣ|ಕ್ಷಣಗಳು}}',
index ec85ae0..29771eb 100644 (file)
@@ -26,6 +26,7 @@
  * @author Kaganer
  * @author Klutzy
  * @author Kwj2772
+ * @author LFM
  * @author Mintz0223
  * @author Pi.C.Noizecehx
  * @author PuzzletChung
@@ -68,10 +69,10 @@ $specialPageAliases = array(
        'Allmessages'               => array( '모든메시지' ),
        'Allpages'                  => array( '모든문서' ),
        'Ancientpages'              => array( '오래된문서' ),
-       'Badtitle'                  => array( 'ì\9e\98못ë\90\9cì\9d´ë¦\84', 'ì\9d¸ì\8b\9dë¶\88ê°\80ì\9d´ë¦\84', 'ì\9e\98못ë\90\9cì \9c목', 'ì\9d¸ì\8b\9dë¶\88ê°\80ì \9c목' ),
+       'Badtitle'                  => array( 'ì\9e\98못ë\90\9cì \9c목', 'ì\9d¸ì\8b\9dë¶\88ê°\80ì \9c목', 'ì\9e\98못ë\90\9cì\9d´ë¦\84', 'ì\9d¸ì\8b\9dë¶\88ê°\80ì\9d´ë¦\84' ),
        'Blankpage'                 => array( '빈문서' ),
-       'Block'                     => array( '차단' ),
-       'Blockme'                   => array( '자가차단' ),
+       'Block'                     => array( '차단', 'IP차단', '사용자차단' ),
+       'Blockme'                   => array( 'ì\9e\90기차ë\8b¨', 'ì\9e\90ê°\80ì°¨ë\8b¨' ),
        'Booksources'               => array( '책찾기' ),
        'BrokenRedirects'           => array( '끊긴넘겨주기' ),
        'Categories'                => array( '분류' ),
@@ -95,7 +96,7 @@ $specialPageAliases = array(
        'Invalidateemail'           => array( '이메일인증취소', '이메일인증해제' ),
        'JavaScriptTest'            => array( '자바스크립트시험' ),
        'BlockList'                 => array( '차단된사용자', '차단목록' ),
-       'LinkSearch'                => array( '외부링크찾기', '외부링크검색' ),
+       'LinkSearch'                => array( '링크찾기', '링크검색' ),
        'Listadmins'                => array( '관리자', '관리자목록' ),
        'Listbots'                  => array( '봇', '봇목록' ),
        'Listfiles'                 => array( '파일', '그림', '파일목록', '그림목록' ),
@@ -128,7 +129,7 @@ $specialPageAliases = array(
        'Preferences'               => array( '환경설정' ),
        'Prefixindex'               => array( '접두어찾기' ),
        'Protectedpages'            => array( '보호된문서' ),
-       'Protectedtitles'           => array( '생성보호된문서', '만들기보호된문서' ),
+       'Protectedtitles'           => array( '만들기보호된문서', '생성보호된문서' ),
        'Randompage'                => array( '임의문서' ),
        'Randomredirect'            => array( '임의넘겨주기' ),
        'Recentchanges'             => array( '최근바뀜' ),
@@ -150,11 +151,11 @@ $specialPageAliases = array(
        'Unusedimages'              => array( '안쓰는파일', '안쓰는그림', '쓰이지않는파일', '쓰이지않는그림' ),
        'Unusedtemplates'           => array( '안쓰는틀', '쓰이지않는틀' ),
        'Unwatchedpages'            => array( '주시안되는문서' ),
-       'Upload'                    => array( '올리기', '파일올리기', '그림올리기' ),
+       'Upload'                    => array( '올리기', '파일올리기', '그림올리기', '업로드' ),
        'UploadStash'               => array( '올린비공개파일' ),
        'Userlogin'                 => array( '로그인' ),
        'Userlogout'                => array( '로그아웃' ),
-       'Userrights'                => array( '권한조정' ),
+       'Userrights'                => array( '권한조정', '관리자하기', '봇하기' ),
        'Version'                   => array( '버전' ),
        'Wantedcategories'          => array( '필요한분류' ),
        'Wantedfiles'               => array( '필요한파일', '필요한그림' ),
@@ -477,6 +478,7 @@ $messages = array(
 'newwindow' => '(새 창으로 열림)',
 'cancel' => '취소',
 'moredotdotdot' => '더 보기...',
+'morenotlisted' => '목록에 없는 항목 더 보기...',
 'mypage' => '문서',
 'mytalk' => '토론',
 'anontalk' => '익명 사용자 토론',
@@ -512,7 +514,7 @@ $messages = array(
 
 'navigation-heading' => '둘러보기 메뉴',
 'errorpagetitle' => '오류',
-'returnto' => '$1(으)로 돌아갑니다.',
+'returnto' => '$1 문서로 돌아갑니다.',
 'tagline' => '{{SITENAME}}',
 'help' => '도움말',
 'search' => '찾기',
@@ -597,7 +599,7 @@ $1',
 
 'badaccess' => '권한 오류',
 'badaccess-group0' => '요청한 동작을 실행할 권한이 없습니다.',
-'badaccess-groups' => '요청한 동작은 {{PLURAL:$2|다음|다음 중 하나의}} 권한을 가진 사용자에게만 가능합니다: $1.',
+'badaccess-groups' => '요청한 동작은 {{PLURAL:$2|다음|다음 중 하나의}} 권한을 가진 사용자에게만 가능합니다: $1',
 
 'versionrequired' => '미디어위키 $1 버전 필요',
 'versionrequiredtext' => '이 문서를 사용하려면 $1 버전 미디어위키가 필요합니다.
@@ -778,10 +780,10 @@ $2',
 'nologin' => '계정이 없나요? $1.',
 'nologinlink' => '계정을 만들 수 있습니다',
 'createaccount' => '계정 만들기',
-'gotaccount' => "계정이 이미 있다면, '''$1'''.",
+'gotaccount' => '계정이 이미 있다면, $1.',
 'gotaccountlink' => '로그인하세요',
 'userlogin-resetlink' => '사용자 이름이나 비밀번호를 잊으셨나요?',
-'createaccountmail' => '이메일로 보내기',
+'createaccountmail' => 'ì\9e\84ì\8b\9c ì\9e\84ì\9d\98 ë¹\84ë°\80ë²\88í\98¸ë¥¼ ì\95\84ë\9e\98ì\97\90 ì§\80ì \95í\95\9c ì\9d´ë©\94ì\9d¼ë¡\9c ë³´ë\82´ê¸°',
 'createaccountreason' => '이유:',
 'badretype' => '입력한 비밀번호가 서로 다릅니다.',
 'userexists' => '입력하신 사용자 이름이 이미 등록되어 있습니다.
@@ -807,10 +809,10 @@ $2',
 철자가 맞는지 확인하세요.',
 'nouserspecified' => '사용자 이름을 입력하지 않았습니다.',
 'login-userblocked' => '이 사용자는 차단되었습니다. 로그인할 수 없습니다.',
-'wrongpassword' => '입력한 비밀번호가 다릅니다.
\8b¤ì\8b\9c ì\8b\9cë\8f\84í\95´ ì£¼세요.',
+'wrongpassword' => '입력한 비밀번호가 잘못되었습니다.
\8b¤ì\8b\9c ì\8b\9cë\8f\84í\95\98세요.',
 'wrongpasswordempty' => '비밀번호를 입력하지 않았습니다.
\8b¤ì\8b\9c ì\8b\9cë\8f\84í\95´ ì£¼세요.',
\8b¤ì\8b\9c ì\8b\9cë\8f\84í\95\98세요.',
 'passwordtooshort' => '비밀번호는 $1 문자 이상이어야 합니다.',
 'password-name-match' => '비밀번호는 사용자 이름과 반드시 달라야 합니다.',
 'password-login-forbidden' => '이 사용자 이름과 비밀번호는 사용할 수 없습니다.',
@@ -861,6 +863,7 @@ $2',
 # E-mail sending
 'php-mail-error-unknown' => 'PHP의 mail() 함수에서 알 수 없는 오류가 발생했습니다.',
 'user-mail-no-addy' => '받는이의 이메일 주소가 없으면 이메일을 보낼 수 없습니다.',
+'user-mail-no-body' => '비어 있거나 지나치게 짧은 본문으로 이메일을 보내려고 했습니다.',
 
 # Change password dialog
 'resetpass' => '비밀번호 바꾸기',
@@ -924,6 +927,7 @@ $2
 'changeemail-oldemail' => '현재 이메일 주소 :',
 'changeemail-newemail' => '새 이메일 주소:',
 'changeemail-none' => '(없음)',
+'changeemail-password' => '{{SITENAME}} 비밀번호:',
 'changeemail-submit' => '이메일 주소 바꾸기',
 'changeemail-cancel' => '취소',
 
@@ -956,7 +960,7 @@ $2
 'showlivepreview' => '실시간 미리 보기',
 'showdiff' => '차이 보기',
 'anoneditwarning' => "'''경고''': 로그인하고 있지 않습니다.
-당신의 IP 주소가 문서 역사에 남게 됩니다.",
+IP 주소가 문서 역사에 남게 됩니다.",
 'anonpreviewwarning' => "'''로그인하고 있지 않습니다. 문서를 저장하면 당신의 IP 주소가 문서 역사에 남게 됩니다.'''",
 'missingsummary' => "'''알림:''' 편집 요약을 적지 않았습니다.
 이대로 \"{{int:savearticle}}\"을 클릭하면 편집 요약 없이 저장됩니다.",
@@ -979,7 +983,8 @@ $1 또는 [[{{MediaWiki:Grouppage-sysop}}|다른 관리자]]에게 차단에 대
 [[Special:Preferences|계정 환경 설정]]에 올바른 이메일 주소가 있어야만 '이메일 보내기' 기능을 사용할 수 있습니다. 또 이메일 보내기 기능이 차단되어 있으면 이메일을 보낼 수 없습니다.
 지금 당신의 IP 주소는 $3이고, 차단 ID는 #$5입니다.
 문의할 때에 이 정보를 같이 알려주세요.",
-'autoblockedtext' => "당신의 IP 주소는 $1이 차단한 사용자가 사용했던 IP이기 때문에 자동으로 차단되었습니다. 차단된 이유는 다음과 같습니다:
+'autoblockedtext' => '당신의 IP 주소는 $1 사용자가 차단한 사용자가 사용했던 IP이기 때문에 자동으로 차단되었습니다.
+차단된 이유는 다음과 같습니다:
 
 :$2
 
@@ -989,10 +994,10 @@ $1 또는 [[{{MediaWiki:Grouppage-sysop}}|다른 관리자]]에게 차단에 대
 
 $1 또는 [[{{MediaWiki:Grouppage-sysop}}|다른 관리자]]에게 차단에 대해 문의할 수 있습니다.
 
-[[Special:Preferences|계정 환경 설정]]에 올바른 이메일 주소가 있어야만 '이메일 보내기' 기능을 사용할 수 있습니다. 또한 이메일 보내기 기능이 차단되어 있으면 이메일을 보낼 수 없습니다.
+[[Special:Preferences|계정 환경 설정]]에 올바른 이메일 주소가 있어야만 "이메일 보내기" 기능을 사용할 수 있습니다. 또한 이메일 보내기 기능이 차단되어 있으면 이메일을 보낼 수 없습니다.
 
-당신의 현재 IP 주소는 $3이고, 차단 ID는 #$5입니다.
-문의할 때에 이 정보를 같이 알려주세요.",
+현재 IP 주소는 $3이고, 차단 ID는 #$5입니다.
+문의할 때에 이 정보를 같이 알려주세요.',
 'blockednoreason' => '이유를 입력하지 않음',
 'whitelistedittext' => '문서를 편집하려면 $1해야 합니다.',
 'confirmedittext' => '문서를 고치려면 이메일 인증 절차가 필요합니다.
@@ -1094,7 +1099,7 @@ IP 주소는 여러 사용자가 공유할 수 있습니다.
 'longpageerror' => "'''오류: 문서의 크기가 {{PLURAL:$1|$1킬로바이트}}로 최대 크기인 {{PLURAL:$2|$2킬로바이트}}보다 큽니다.'''
 저장할 수 없습니다.",
 'readonlywarning' => "'''경고: 데이터베이스가 관리를 위해 잠겨 있습니다. 따라서 문서를 편집한 내용을 지금 저장할 수 없습니다.'''
-편집 내용을 복사 붙여넣기 등을 사용하여 일단 다른 곳에 저장한 후, 나중에 다시 시도해 주세요.
+편집 내용을 복사하여 붙여넣기 등을 사용하여 일단 다른 곳에 저장한 후, 나중에 다시 시도해 주세요.
 
 잠근 관리자가 남긴 설명은 다음과 같습니다: $1",
 'protectedpagewarning' => "'''경고: 이 문서는 관리자만 편집할 수 있도록 보호되어 있습니다.'''
@@ -1111,7 +1116,6 @@ IP 주소는 여러 사용자가 공유할 수 있습니다.
 'template-semiprotected' => '(준보호됨)',
 'hiddencategories' => '이 문서는 다음 숨은 분류 $1개에 속해 있습니다:',
 'edittools' => '<!-- 이 문서는 편집 창과 파일 올리기 창에 출력됩니다. -->',
-'nocreatetitle' => '문서 만들기 제한',
 'nocreatetext' => '{{SITENAME}}에서 새로운 문서를 만드는 것은 제한되어 있습니다.
 이미 존재하는 다른 문서를 편집하거나, [[Special:UserLogin|로그인하거나 계정을 만들 수 있습니다]].',
 'nocreate-loggedin' => '새 문서를 만들 권한이 없습니다.',
@@ -1132,9 +1136,9 @@ IP 주소는 여러 사용자가 공유할 수 있습니다.
 'edit-gone-missing' => '문서를 저장하지 못했습니다.
 문서가 삭제된 것 같습니다.',
 'edit-conflict' => '편집 충돌.',
-'edit-no-change' => '문ì\84\9cì\97\90 ì\95\84무ë\9f° ë³\80í\99\94ê°\80 ì\97\86기 ë\95\8c문ì\97\90 ë\8b¹ì\8b ì\9d\98 편집은 무시되었습니다.',
+'edit-no-change' => '문ì\84\9cì\97\90 ì\96´ë\96 í\95\9c ë°\94ë\80\9cë\8f\84 ì\97\86기 ë\95\8c문ì\97\90 편집은 무시되었습니다.',
 'edit-already-exists' => '새 문서를 만들 수 없습니다.
-그 문서는 이미 존재합니다.',
+문서가 이미 존재합니다.',
 'defaultmessagetext' => '기본 메세지 내용',
 'content-failed-to-parse' => '$1 모델에 대한 $2 내용을 구문 분석하는 데 실패했습니다: $3',
 'invalid-content-data' => '잘못된 내용 데이터입니다',
@@ -1164,8 +1168,8 @@ $2개 보다 적게 써야 하지만 지금은 $1개를 쓰고 있습니다.",
 'node-count-exceeded-warning' => '문서가 노드 수를 초과하였습니다.',
 'expansion-depth-exceeded-category' => '문서가 확장 깊이를 초과하였습니다.',
 'expansion-depth-exceeded-warning' => '문서가 확장 깊이를 초과하였습니다',
-'parser-unstrip-loop-warning' => 'ì\8a¤í\8a¸ë¦½í\95\98ì§\80 ì\95\8aë\8a\94 ë°\98ë³µì\9d´ ê°\90ì§\80ë\90\98ì\97\88ì\8aµë\8b\88ë\8b¤',
-'parser-unstrip-recursion-limit' => '스트립하지 않는 재귀 한도가 초과됨 ($1)',
+'parser-unstrip-loop-warning' => 'Unstripì\9d\98 ë°\98ë³µì\9d\84 ê°\90ì§\80í\96\88ì\8aµë\8b\88ë\8b¤',
+'parser-unstrip-recursion-limit' => 'Unstrip의 재귀 한도를 초과했습니다 ($1)',
 'converter-manual-rule-error' => '언어 변환 규칙을 수동으로 지정하는 도중 오류',
 
 # "Undo" feature
@@ -1349,7 +1353,7 @@ $1",
 # Diffs
 'history-title' => '"$1" 문서의 바뀜 내역',
 'difference-title' => '"$1"의 두 판 사이의 차이',
-'difference-title-multipage' => '문서 "$1"(와)과 "$2" 사이의 차이',
+'difference-title-multipage' => '"$1" 문서와 "$2" 문서 사이의 차이',
 'difference-multipage' => '(문서 사이의 차이)',
 'lineno' => '$1번째 줄:',
 'compareselectedversions' => '선택한 판을 비교하기',
@@ -1378,7 +1382,7 @@ $1",
 'prevn-title' => '이전 결과 $1개',
 'nextn-title' => '다음 결과 $1개',
 'shown-title' => '쪽마다 결과 $1개씩 보이기',
-'viewprevnext' => '보기: ($1 {{int:pipe-separator}} $2) ($3).',
+'viewprevnext' => '($1 {{int:pipe-separator}} $2) ($3) 보기',
 'searchmenu-legend' => '찾기 설정',
 'searchmenu-exists' => "'''이 위키에 \"[[:\$1]]\"의 이름을 가진 문서가 있습니다.'''",
 'searchmenu-new' => "'''이 위키에 \"[[:\$1]]\" 문서를 만드세요!'''",
@@ -1420,7 +1424,7 @@ $1",
 'powersearch-field' => '찾기',
 'powersearch-togglelabel' => '확인:',
 'powersearch-toggleall' => '모두 선택',
-'powersearch-togglenone' => '모두 선택하지 않음',
+'powersearch-togglenone' => '음',
 'search-external' => '바깥 찾기',
 'searchdisabled' => '{{SITENAME}} 찾기 기능이 비활성화되어 있습니다.
 기능이 작동하지 않는 동안에는 구글(Google)을 이용해 찾을 수 있습니다.
@@ -1495,7 +1499,7 @@ $1",
 'timezoneregion-arctic' => '북극',
 'timezoneregion-asia' => '아시아',
 'timezoneregion-atlantic' => '대서양',
-'timezoneregion-australia' => '오스트레일리아',
+'timezoneregion-australia' => '호주',
 'timezoneregion-europe' => '유럽',
 'timezoneregion-indian' => '인도양',
 'timezoneregion-pacific' => '태평양',
@@ -1538,7 +1542,7 @@ HTML 태그를 확인하세요.',
 실명을 입력할 경우 문서 기여에 자신의 이름이 들어가게 됩니다.',
 'prefs-help-email' => '이메일 주소 입력은 선택 사항입니다. 다만 비밀번호를 잊었을 때 비밀번호 바꾸기를 위해 필요합니다.',
 'prefs-help-email-others' => '자신의 문서나 토론 문서에 있는 이메일 보내기 링크로 다른 사용자가 연락할 수 있게 할 수도 있습니다.
-이 경우에도 당신의 이메일 주소는 다른 사용자가 연락할 때 공개되지 않습니다.',
+이 경우에도 이메일 주소는 다른 사용자가 연락할 때 공개되지 않습니다.',
 'prefs-help-email-required' => '이메일 주소가 필요합니다.',
 'prefs-info' => '기본 정보',
 'prefs-i18n' => '언어 설정',
@@ -1667,15 +1671,13 @@ HTML 태그를 확인하세요.',
 'right-sendemail' => '다른 사용자에게 이메일 보내기',
 'right-passwordreset' => '비밀번호 재설정 이메일을 보기',
 
+# Special:Log/newusers
+'newuserlogpage' => '사용자 등록 기록',
+'newuserlogpagetext' => '사용자 등록 기록입니다.',
+
 # User rights log
 'rightslog' => '사용자 권한 기록',
 'rightslogtext' => '사용자 권한 조정 기록입니다.',
-'rightslogentry' => '사용자가 $1의 권한을 $2에서 $3으로 바꾸었습니다',
-'rightslogentry-autopromote' => '사용자의 권한이 자동적으로 $2에서 $3으로 바뀌었습니다.',
-'logentry-rights-rights' => '$1 사용자가 $3 사용자의 권한을 $4에서 $5으로 바꾸었습니다.',
-'logentry-rights-rights-legacy' => '$1 사용자가 $3 사용자의 권한을 바꾸었습니다.',
-'logentry-rights-autopromote' => '$1 사용자의 권한이 자동적으로 $4에서 $5으로 바뀌었습니다.',
-'rightsnone' => '(없음)',
 
 # Associated actions - in the sentence "You do not have permission to X"
 'action-read' => '이 문서를 읽기',
@@ -1878,7 +1880,7 @@ $2 형식만 사용할 수 있습니다.',
 'watchthisupload' => '이 파일 주시하기',
 'filewasdeleted' => '같은 이름을 가진 파일이 올라온 적이 있었고 그 후에 삭제되었습니다.
 올리기 전에 $1을 확인해 주시기 바랍니다.',
-'filename-bad-prefix' => '올리려고 하는 파일 이름이 \'\'\'"$1"\'\'\'(으)로 시작합니다. "$1"은(는) 디지털 사진기가 자동으로 붙이는 의미없는 이름입니다.
+'filename-bad-prefix' => '올리려고 하는 파일 이름이 \'\'\'"$1"\'\'\' 이름으로 시작합니다. "$1" 이름은 디지털 사진기가 자동으로 붙이는 의미없는 이름입니다.
 파일에 대해 알기 쉬운 이름을 골라주세요.',
 'filename-prefix-blacklist' => ' #<!-- 이 줄은 그대로 두십시오 --> <pre>
 # 문법은 다음과 같습니다:
@@ -1979,7 +1981,7 @@ URL이 올바르고 접근 가능한지를 확인하고 다시 시도해주세
 'invalid-chunk-offset' => '청크 오프셋이 잘못되었습니다.',
 
 # img_auth script messages
-'img-auth-accessdenied' => '접근 거부됨',
+'img-auth-accessdenied' => '접근 거부됨',
 'img-auth-nopathinfo' => 'PATH_INFO를 잃었습니다.
 서버가 이 정보를 받을 수 있도록 설정되어 있지 않습니다.
 이러한 경우는 서버가 CGI 기반이고 img_auth를 지원하지 않을 때 나타날 수 있습니다.
@@ -2300,7 +2302,7 @@ URL이 맞고 해당 웹사이트가 작동하는지 확인해주세요.',
 'cachedspecial-refresh-now' => '최신 버전 보기.',
 
 # Special:Categories
-'categories' => '분류',
+'categories' => '분류 목록',
 'categoriespagetext' => '{{PLURAL:$1}}문서나 자료를 담고 있는 분류 목록입니다.
 [[Special:UnusedCategories|사용되지 않는 분류]]는 여기에 보이지 않습니다.
 [[Special:WantedCategories|필요한 분류]]도 참고하세요.',
@@ -2320,7 +2322,7 @@ URL이 맞고 해당 웹사이트가 작동하는지 확인해주세요.',
 'linksearch-ok' => '찾기',
 'linksearch-text' => '"*.wikipedia.org"와 같이 와일드 카드를 사용할 수 있습니다.
 적어도 "*.org"와 같이 최상위 도메인을 입력해야 합니다.<br />
-지원하는 프로토콜: <code>$1</code> (프로토콜을 지정하지 않을 때 기본값은 http://)',
+지원하는 {{PLURAL:$2|프로토콜}}: <code>$1</code> (프로토콜을 지정하지 않을 때 기본값은 http://)',
 'linksearch-line' => '$2에서 $1 을 링크하고 있습니다.',
 'linksearch-error' => '와일드카드는 주소의 처음 부분에만 사용될 수 있습니다.',
 
@@ -2333,16 +2335,12 @@ URL이 맞고 해당 웹사이트가 작동하는지 확인해주세요.',
 # Special:ActiveUsers
 'activeusers' => '활동적인 사용자 목록',
 'activeusers-intro' => '다음은 최근 $1일 동안 활동한 사용자의 목록입니다.',
-'activeusers-count' => '최근 $3일 사이의 편집 $1개',
+'activeusers-count' => '최근 {{PLURAL:$3|1일|$3일}} 사이의 {{PLURAL:$1|활동}} $1회',
 'activeusers-from' => '다음으로 시작하는 사용자를 보기:',
 'activeusers-hidebots' => '봇을 숨기기',
 'activeusers-hidesysops' => '관리자를 숨기기',
 'activeusers-noresult' => '사용자가 없습니다.',
 
-# Special:Log/newusers
-'newuserlogpage' => '사용자 등록 기록',
-'newuserlogpagetext' => '사용자 등록 기록입니다.',
-
 # Special:ListGroupRights
 'listgrouprights' => '사용자 권한 목록',
 'listgrouprights-summary' => '다음은 이 위키에서 설정된 사용자 권한 그룹의 목록입니다.
@@ -2409,8 +2407,8 @@ URL이 맞고 해당 웹사이트가 작동하는지 확인해주세요.',
 'watchnologin' => '로그인하지 않음',
 'watchnologintext' => '주시문서 목록을 고치려면 [[Special:UserLogin|로그인]]해야 합니다.',
 'addwatch' => '주시문서 목록에 추가',
-'addedwatchtext' => "\"[[:\$1]]\" 문서를 [[Special:Watchlist|주시문서 목록]]에 추가했습니다.
-앞으로 이 문서나 토론 문서가 바뀌면 [[Special:RecentChanges|최근 바뀜]]에서 알아보기 쉽게 '''굵은 글씨'''로 보일 것입니다.",
+'addedwatchtext' => '"[[:$1]]" 문서를 [[Special:Watchlist|주시문서 목록]]에 추가했습니다.
+앞으로 이 문서나 관련된 토론 문서가 바뀌면 보일 것입니다.',
 'removewatch' => '주시문서 목록에서 제거',
 'removedwatchtext' => '"[[:$1]]" 문서를 [[Special:Watchlist|주시문서 목록]]에서 뺐습니다.',
 'watch' => '주시',
@@ -2444,7 +2442,7 @@ URL이 맞고 해당 웹사이트가 작동하는지 확인해주세요.',
 'enotif_subject_moved' => '{{SITENAME}} $1 문서를 {{gender:$2|$2}} 사용자가 옮겼습니다',
 'enotif_subject_restored' => '{{SITENAME}} $1 문서를 {{gender:$2|$2}} 사용자가 복구했습니다',
 'enotif_subject_changed' => '{{SITENAME}} $1 문서를 {{gender:$2|$2}} 사용자가 바꾸었습니다',
-'enotif_body_intro_deleted' => '{{SITENAME}} $1 문서를 $PAGEEDITDATE에 {{gender:$2|$2}} 사용자가 삭제했습니다. 현재 판은 $3 에서 볼 수 있습니다.',
+'enotif_body_intro_deleted' => '{{SITENAME}} $1 문서를 $PAGEEDITDATE에 {{gender:$2|$2}} 사용자가 삭제했습니다. $3 에서 볼 수 있습니다.',
 'enotif_body_intro_created' => '{{SITENAME}} $1 문서를 $PAGEEDITDATE에 {{gender:$2|$2}} 사용자가 만들었습니다. 현재 판은 $3 에서 볼 수 있습니다.',
 'enotif_body_intro_moved' => '{{SITENAME}} $1 문서를 $PAGEEDITDATE에 {{gender:$2|$2}} 사용자가 옮겼습니다. 현재 판은 $3 에서 볼 수 있습니다.',
 'enotif_body_intro_restored' => '{{SITENAME}} $1 문서를 $PAGEEDITDATE에 {{gender:$2|$2}} 사용자가 복구했습니다. 현재 판은 $3 에서 볼 수 있습니다.',
@@ -2478,6 +2476,8 @@ $UNWATCHURL
 
 도움을 얻거나 피드백 하기:
 {{canonicalurl:{{MediaWiki:Helppage}}}}',
+'created' => '만들었',
+'changed' => '바꾸었',
 
 # Delete
 'deletepage' => '문서 삭제하기',
@@ -2550,6 +2550,8 @@ $UNWATCHURL
 'prot_1movedto2' => '[[$1]] 문서를 [[$2]] 문서로 이동함',
 'protect-badnamespace-title' => '보호할 수 없는 이름공간',
 'protect-badnamespace-text' => '이 이름공간에 있는 문서는 보호할 수 없습니다.',
+'protect-norestrictiontypes-text' => '이 문서는 제한 유형을 사용할 수 없음으로 보호할 수 없습니다.',
+'protect-norestrictiontypes-title' => '보호할 수 없는 문서',
 'protect-legend' => '보호 확인',
 'protectcomment' => '이유:',
 'protectexpiry' => '보호 기간:',
@@ -2566,9 +2568,9 @@ $UNWATCHURL
 'protect-cascadeon' => '다음 {{PLURAL:$1|문서}}에 연쇄적 보호가 작동하고 있어 그 문서에 속한 이 문서도 현재 보호됩니다.
 사용자는 이 문서의 보호 설정을 바꾸실 수 있지만 연쇄적 보호에는 영향을 주지 않습니다.',
 'protect-default' => '모든 사용자에게 허용',
-'protect-fallback' => '"$1" 권한 필요',
-'protect-level-autoconfirmed' => '등록된 사용자만 가능',
-'protect-level-sysop' => '관리자만 가능',
+'protect-fallback' => '"$1" 권한의 사용자만 허용',
+'protect-level-autoconfirmed' => '자동 인증된 사용자만 허용',
+'protect-level-sysop' => '관리자만 허용',
 'protect-summary-cascade' => '연쇄적',
 'protect-expiring' => '$1 (UTC)에 만료',
 'protect-expiring-local' => '$1에 해제',
@@ -2607,7 +2609,7 @@ $UNWATCHURL
 # Undelete
 'undelete' => '삭제된 문서 보기',
 'undeletepage' => '삭제된 문서를 보거나 되살리기',
-'undeletepagetitle' => "'''아래는 [[:$1|$1]]의 삭제된 판입니다.'''.",
+'undeletepagetitle' => "'''아래는 [[:$1|$1]]의 삭제된 판입니다'''.",
 'viewdeletedpage' => '삭제된 문서 보기',
 'undeletepagetext' => '다음 {{PLURAL:$1|문서는|문서 $1개는}} 삭제되었지만 아직 보관되어 있고 되살릴 수 있습니다.
 보관된 문서는 주기적으로 삭제될 것입니다.',
@@ -2826,7 +2828,7 @@ $1 사용자가 차단된 이유는 다음과 같습니다: "$2"',
 'ipb-needreblock' => '$1 사용자는 이미 차단되었습니다. 차단 설정을 바꾸시겠습니까?',
 'ipb-otherblocks-header' => '다른 {{PLURAL:$1|차단}} 기록',
 'unblock-hideuser' => '이 사용자 이름이 숨겨져 있기 때문에 이 사용자를 차단 해제할 수 없습니다.',
-'ipb_cant_unblock' => '오류: 차단 ID $1이(가) 존재하지 않습니다. 이미 차단 해제되었을 수 있습니다.',
+'ipb_cant_unblock' => '오류: $1 차단 ID가 존재하지 않습니다. 이미 차단 해제되었을 수 있습니다.',
 'ipb_blocked_as_range' => '오류: IP 주소 $1은 직접 차단되지 않았기 때문에 차단 해제할 수 없습니다.
 하지만 $2로 광역 차단되었기 때문에, 광역 차단 해제로 차단을 해제할 수 있습니다.',
 'ip_range_invalid' => 'IP 범위가 잘못되었습니다.',
@@ -2877,7 +2879,7 @@ $1 사용자가 차단된 이유는 다음과 같습니다: "$2"',
 만약 이 설정을 선택하지 않았다면 [[Special:DoubleRedirects|이중 넘겨주기]]와 [[Special:BrokenRedirects|끊긴 넘겨주기]]가 있는지 확인해주세요.
 넘겨주기 링크가 제대로 향하고 있는지 확인하여야 합니다.
 
-참고ë¡\9c ì\83\88 ì \9c목ì\9c¼ë¡\9c ë\90\9c ë¬¸ì\84\9cê°\80 ì\9d´ë¯¸ ì\9e\88ì\9d\84 ë\95\8c, ë¹\84ì\96´ ì\9e\88ê±°ë\82\98 ë\84\98겨주기 ë¬¸ì\84\9cì\9d´ê³  ë¬¸ì\84\9c ì\97­ì\82¬ê°\80 ì\97\86ì\9d\84 ë\95\8cì\97\90ë§\8c ì\9d´ë\8f\99í\95\98ë©° ê·¸ë \87ì§\80 ì\95\8aì\9d\84 ê²½ì\9a°ì\97\90ë\8a\94 ì\9d´ë\8f\99í\95\98ì§\80 '''ì\95\8aì\8aµë\8b\88ë\8b¤'''.
+참고로 새 제목으로 된 문서가 이미 있을 때, 넘겨주기 문서이고 문서 역사가 없을 때에만 이동하며 그렇지 않을 경우에는 이동하지 '''않습니다'''.
 실수로 문서를 옮겼을 때 되돌릴 수는 있지만 이미 있는 문서를 덮어쓸 수 없음을 의미합니다.
 
 '''경고!'''
@@ -3062,6 +3064,7 @@ $1 사용자가 차단된 이유는 다음과 같습니다: "$2"',
 'import-error-interwiki' => '"$1" 문서는 제목이 바깥 링크(인터위키)용으로 할당되어 있기 때문에 가져오지 않습니다.',
 'import-error-special' => '"$1" 문서는 특수 문서에 속해 있기 때문에 가져오지 않습니다.',
 'import-error-invalid' => '"$1" 문서는 제목이 잘못되었기 때문에 가져오지 않습니다.',
+'import-error-unserialize' => '"$1" 문서의 $2 판이 일렬적이지 않습니다. $3 콘텐츠 모델을 사용하여 $4 형식으로 일렬화되도록 판을 보고했습니다.',
 'import-options-wrong' => '잘못된 {{PLURAL:$2|선택 사항}}: <nowiki>$1</nowiki>',
 'import-rootpage-invalid' => '주어진 루트 문서는 잘못된 제목입니다.',
 'import-rootpage-nosubpage' => '루트 문서의 "$1" 이름공간은 하위 문서를 허용하지 않습니다.',
@@ -3141,7 +3144,7 @@ $1 사용자가 차단된 이유는 다음과 같습니다: "$2"',
 'tooltip-ca-nstab-category' => '분류 문서 내용을 봅니다.',
 'tooltip-minoredit' => '사소한 편집으로 표시하기',
 'tooltip-save' => '바뀜 저장하기',
-'tooltip-preview' => '편집 미리 보기. 저장하기 전에 꼭 미리 보기를 해 주세요!',
+'tooltip-preview' => '바뀜을 미리 봅니다. 저장하기 전에 꼭 미리 보기를 해 주세요!',
 'tooltip-diff' => '자신이 바꾼 것 보기',
 'tooltip-compareselectedversions' => '이 문서에서 선택한 두 판간의 차이를 비교',
 'tooltip-watch' => '이 문서를 주시문서 목록에 추가',
@@ -3156,15 +3159,15 @@ $1 사용자가 차단된 이유는 다음과 같습니다: "$2"',
 
 # Stylesheets
 'common.css' => '/* 이 CSS 설정은 모든 스킨에 동일하게 적용됩니다 */',
-'standard.css' => '/* 이 CSS 설정은 모든 스탠다드 스킨에 적용됩니다 */',
-'nostalgia.css' => '/* ì\9d´ CSS ì\84¤ì \95ì\9d\80 ëª¨ë\93  ë\85¸ì\8a¤í\85\94ì§\80ì\95\84 ì\8a¤í\82¨ì\97\90 적용됩니다 */',
-'cologneblue.css' => '/* 이 CSS 설정은 모든 쾰른 블루 스킨에 적용됩니다 */',
-'monobook.css' => '/* ì\9d´ CSS ì\84¤ì \95ì\9d\80 ëª¨ë\93  ëª¨ë\85¸ë¶\81 ì\8a¤í\82¨ì\97\90 적용됩니다 */',
-'myskin.css' => '/* ì\9d´ CSS ì\84¤ì \95ì\9d\80 ëª¨ë\93  ë§\88ì\9d´ì\8a¤í\82¨ ì\8a¤í\82¨ì\97\90 적용됩니다 */',
-'chick.css' => '/* 이 CSS 설정은 모든 치크 스킨에 적용됩니다 */',
-'simple.css' => '/* 이 CSS 설정은 모든 심플 스킨에 적용됩니다 */',
-'modern.css' => '/* ì\9d´ CSS ì\84¤ì \95ì\9d\80 ëª¨ë\93  ëª¨ë\8d\98 ì\8a¤í\82¨ì\97\90 적용됩니다 */',
-'vector.css' => '/* ì\9d´ CSS ì\84¤ì \95ì\9d\80 ëª¨ë\93  ë²¡í\84° ì\8a¤í\82¨ì\97\90 적용됩니다 */',
+'standard.css' => '/* 이 CSS 설정은 스탠다드 스킨을 사용하는 사용자에게 적용됩니다 */',
+'nostalgia.css' => '/* ì\9d´ CSS ì\84¤ì \95ì\9d\80 ë\85¸ì\8a¤í\85\94ì§\80ì\95\84 ì\8a¤í\82¨ì\9d\84 ì\82¬ì\9a©í\95\98ë\8a\94 ì\82¬ì\9a©ì\9e\90ì\97\90ê²\8c 적용됩니다 */',
+'cologneblue.css' => '/* 이 CSS 설정은 쾰른 블루 스킨을 사용하는 사용자에게 적용됩니다 */',
+'monobook.css' => '/* ì\9d´ CSS ì\84¤ì \95ì\9d\80 ëª¨ë\85¸ë¶\81 ì\8a¤í\82¨ì\9d\84 ì\82¬ì\9a©í\95\98ë\8a\94 ì\82¬ì\9a©ì\9e\90ì\97\90ê²\8c 적용됩니다 */',
+'myskin.css' => '/* ì\9d´ CSS ì\84¤ì \95ì\9d\80 ë§\88ì\9d´ì\8a¤í\82¨ ì\8a¤í\82¨ì\9d\84 ì\82¬ì\9a©í\95\98ë\8a\94 ì\82¬ì\9a©ì\9e\90ì\97\90ê²\8c 적용됩니다 */',
+'chick.css' => '/* 이 CSS 설정은 치크 스킨을 사용하는 사용자에게 적용됩니다 */',
+'simple.css' => '/* 이 CSS 설정은 심플 스킨을 사용하는 사용자에게 적용됩니다 */',
+'modern.css' => '/* ì\9d´ CSS ì\84¤ì \95ì\9d\80 ëª¨ë\8d\98 ì\8a¤í\82¨ì\9d\84 ì\82¬ì\9a©í\95\98ë\8a\94 ì\82¬ì\9a©ì\9e\90ì\97\90ê²\8c 적용됩니다 */',
+'vector.css' => '/* ì\9d´ CSS ì\84¤ì \95ì\9d\80 ë²¡í\84° ì\8a¤í\82¨ì\9d\84 ì\82¬ì\9a©í\95\98ë\8a\94 ì\82¬ì\9a©ì\9e\90ì\97\90ê²\8c 적용됩니다 */',
 'print.css' => '/* 이 CSS 설정은 인쇄 출력 화면에 적용됩니다 */',
 'handheld.css' => '/* 이 CSS 설정은 $wgHandheldStyle에 설정한 스킨을 기반으로 한 휴대 기기에 적용됩니다 */',
 'noscript.css' => '/* 이 CSS 설정은 자바스크립트를 비활성화한 사용자에 적용됩니다 */',
@@ -3246,6 +3249,7 @@ $1 사용자가 차단된 이유는 다음과 같습니다: "$2"',
 'pageinfo-magic-words' => '매직 {{PLURAL:$1|워드}} ($1개)',
 'pageinfo-hidden-categories' => '숨은 {{PLURAL:$1|분류}} ($1개)',
 'pageinfo-templates' => '포함한 {{PLURAL:$1|틀}} ($1개)',
+'pageinfo-transclusions' => '포함한 {{PLURAL:$1|문서}} ($1개)',
 'pageinfo-toolboxlink' => '문서 정보',
 'pageinfo-redirectsto' => '넘겨주기 대상',
 'pageinfo-redirectsto-info' => '정보',
@@ -3254,6 +3258,10 @@ $1 사용자가 차단된 이유는 다음과 같습니다: "$2"',
 'pageinfo-protect-cascading' => '여기서의 연쇄적 보호',
 'pageinfo-protect-cascading-yes' => '예',
 'pageinfo-protect-cascading-from' => '연쇄적 보호한 기점',
+'pageinfo-category-info' => '분류 정보',
+'pageinfo-category-pages' => '문서 수',
+'pageinfo-category-subcats' => '하위 분류 수',
+'pageinfo-category-files' => '파일 개수',
 
 # Skin names
 'skinname-standard' => '클래식',
@@ -3311,14 +3319,15 @@ $1',
 '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' => '최대 해상도',
-'show-big-image-preview' => '미리 보기 크기: $1.',
-'show-big-image-other' => '다른 {{PLURAL:$2|해상도}}: $1.',
+'show-big-image-preview' => '미리 보기 크기: $1',
+'show-big-image-other' => '다른 {{PLURAL:$2|해상도}}: $1',
 'show-big-image-size' => '$1 × $2 픽셀',
 'file-info-gif-looped' => '반복됨',
 'file-info-gif-frames' => '$1 프레임',
 'file-info-png-looped' => '반복됨',
-'file-info-png-repeat' => '$1 재생됨',
+'file-info-png-repeat' => '$1{{PLURAL:$1|번}} 재생됨',
 'file-info-png-frames' => '$1 프레임',
 'file-no-thumb-animation' => "'''참고: 기술적인 제한으로 인해 이 파일의 섬네일은 애니메이션을 지원하지 않습니다.'''",
 'file-no-thumb-animation-gif' => "'''참고: 기술적인 제한으로 인해 고해상도 GIF 그림 섬네일은 애니메이션을 지원하지 않습니다.'''",
@@ -3336,10 +3345,12 @@ $1',
 'sp-newimages-showfrom' => '$1 $2부터 올라온 파일 목록 보기',
 
 # Video information, used by Language::formatTimePeriod() to format lengths in the above messages
-'seconds' => '$1초',
-'minutes' => '$1분',
-'hours' => '$1시간',
-'days' => '$1일',
+'seconds' => '{{PLURAL:$1|$1초}}',
+'minutes' => '{{PLURAL:$1|$1분}}',
+'hours' => '{{PLURAL:$1|$1시간}}',
+'days' => '{{PLURAL:$1|$1일}}',
+'months' => '{{PLURAL:$1|$1월}}',
+'years' => '{{PLURAL:$1|$1년}}',
 'ago' => '$1 전',
 'just-now' => '방금',
 
@@ -3532,7 +3543,7 @@ Variants for Chinese language
 'exif-lens' => '사용된 렌즈',
 'exif-serialnumber' => '카메라 일련 번호',
 'exif-cameraownername' => '카메라 소유자',
-'exif-label' => 'ë\9d¼ë²¨',
+'exif-label' => 'ë \88ì\9d´ë¸\94',
 'exif-datetimemetadata' => '메타데이터 최종 수정일',
 'exif-nickname' => '그림의 비공식적 이름',
 'exif-rating' => '평가 (5점 만점)',
@@ -3807,7 +3818,7 @@ Variants for Chinese language
 'confirmemail_success' => '이메일 주소가 인증되었습니다.
 이제 [[Special:UserLogin|로그인]]해서 위키를 사용하세요.',
 'confirmemail_loggedin' => '이메일 주소가 인증되었습니다.',
-'confirmemail_error' => '당신의 인증을 저장하는 도중 오류가 발생했습니다.',
+'confirmemail_error' => '인증을 저장하는 도중 오류가 발생했습니다.',
 'confirmemail_subject' => '{{SITENAME}} 이메일 주소 인증',
 'confirmemail_body' => '$1 IP 주소를 사용하는 사용자가
 {{SITENAME}}의 "$2" 계정에 이메일 인증 신청을 했습니다.
@@ -3969,7 +3980,7 @@ $5
 'version-license' => '라이선스',
 'version-poweredby-credits' => "이 위키는 '''[//www.mediawiki.org/ MediaWiki]'''를 기반으로 작동합니다. Copyright © 2001-$1 $2.",
 'version-poweredby-others' => '그 외 다른 개발자',
-'version-credits-summary' => '우리는 [[Special:Version|미디어위키]]에 기여한 다음 사람한테 감사드립니다.',
+'version-credits-summary' => '[[Special:Version|미디어위키]]에 기여한 다음 사람한테 감사드립니다.',
 'version-license-info' => "미디어위키는 자유 소프트웨어입니다. 당신은 자유 소프트웨어 재단이 발표한 GNU 일반 공중 사용 허가서 버전 2나 그 이후 버전에 따라 이 파일을 재배포하거나 수정할 수 있습니다.
 
 미디어위키가 유용하게 사용될 수 있기를 바라지만 '''상용으로 사용'''되거나 '''특정 목적에 맞을 것'''이라는 것을 '''보증하지 않습니다'''. 자세한 내용은 GNU 일반 공중 사용 허가서 전문을 참고하십시오.
@@ -4005,8 +4016,8 @@ $5
 # Special:SpecialPages
 'specialpages' => '특수 문서 목록',
 'specialpages-note' => '----
-* 일반 특수 문서.
-* <span class="mw-specialpagerestricted">제한된 특수 문서.</span>',
+* 일반 특수 문서입니다.
+* <span class="mw-specialpagerestricted">제한된 특수 문서입니다.</span>',
 'specialpages-group-maintenance' => '관리용 목록',
 'specialpages-group-other' => '다른 특수 문서',
 'specialpages-group-login' => '로그인 / 계정 만들기',
@@ -4016,7 +4027,7 @@ $5
 'specialpages-group-highuse' => '많이 쓰이는 문서 목록',
 'specialpages-group-pages' => '문서 목록',
 'specialpages-group-pagetools' => '문서 도구',
-'specialpages-group-wiki' => '위키 정보와 도구',
+'specialpages-group-wiki' => '데이터와 도구',
 'specialpages-group-redirects' => '넘겨주기 특수 문서',
 'specialpages-group-spam' => '스팸 처리 도구',
 
@@ -4114,12 +4125,16 @@ $5
 'logentry-newusers-newusers' => '$1 사용자 계정을 만들었습니다.',
 'logentry-newusers-create' => '$1 사용자 계정을 만들었습니다.',
 'logentry-newusers-create2' => '$1 사용자가 $3 사용자 계정을 만들었습니다.',
+'logentry-newusers-byemail' => '$3 사용자 계정이 $1에 만들어졌고 비밀번호는 이메일로 보냈습니다',
 'logentry-newusers-autocreate' => '$1 사용자 계정을 자동적으로 만들었습니다.',
-'newuserlog-byemail' => '이메일로 보낸 비밀번호',
+'logentry-rights-rights' => '$1 사용자가 $3 사용자의 권한을 $4에서 $5으로 바꾸었습니다.',
+'logentry-rights-rights-legacy' => '$1 사용자가 $3 사용자의 권한을 바꾸었습니다.',
+'logentry-rights-autopromote' => '$1 사용자의 권한이 자동적으로 $4에서 $5으로 바뀌었습니다.',
+'rightsnone' => '(없음)',
 
 # Feedback
 'feedback-bugornote' => '기술적 문제를 구체적으로 설명할 준비가 되었다면 [$1 버그를 신고]해 주세요.
-아니면 아래에 쉬운 양식을 쓸 수 있습니다. 당신의 의견은 사용자 이름과 사용 중인 브라우저 정보와 함께 "[$3 $2]"에 남겨질 것입니다.',
+아니면 아래에 쉬운 양식을 쓸 수 있습니다. 의견은 사용자 이름과 함께 "[$3 $2]"에 남겨질 것입니다.',
 'feedback-subject' => '제목:',
 'feedback-message' => '내용:',
 'feedback-cancel' => '취소',
@@ -4128,7 +4143,7 @@ $5
 'feedback-error1' => '오류: API 실행 결과를 인식할 수 없음',
 'feedback-error2' => '오류: 편집 실패',
 'feedback-error3' => '오류: API가 응답하지 않음',
-'feedback-thanks' => '감사합니다! "[$2 $1]" 문서에 당신의 의견을 남겼습니다.',
+'feedback-thanks' => '감사합니다! "[$2 $1]" 문서에 의견을 남겼습니다.',
 'feedback-close' => '완료',
 'feedback-bugcheck' => '감사합니다! 혹시 해당 사항이 [$1 기존의 버그 보고서]에 올라와 있는지 확인해주세요.',
 'feedback-bugnew' => '확인했습니다. 새로운 버그 보고서를 작성합니다.',
@@ -4169,6 +4184,7 @@ $5
 'api-error-ok-but-empty' => '내부 오류: 서버에서 응답이 없습니다.',
 'api-error-overwrite' => '이미 있는 파일을 덮어쓸 수 없습니다.',
 'api-error-stashfailed' => '내부 오류: 서버가 임시 파일을 저장하지 못했습니다.',
+'api-error-publishfailed' => '내부 오류: 서버가 임시 파일을 게시하지 못했습니다.',
 'api-error-timeout' => '서버가 제 시간 내에 응답하지 않았습니다.',
 'api-error-unclassified' => '알 수 없는 오류가 발생했습니다.',
 'api-error-unknown-code' => '알 수 없는 오류: "$1".',
@@ -4189,6 +4205,4 @@ $5
 'duration-centuries' => '$1{{PLURAL:$1|세기}}',
 'duration-millennia' => '$1{{PLURAL:$1|천년}}',
 
-# Unknown messages
-'svg-long-error' => '잘못된 SVG 파일: $1',
 );
index 833cdf9..6dd4651 100644 (file)
@@ -385,6 +385,9 @@ $messages = array(
 
 'grouppage-sysop' => '{{ns:project}}:Веськöтлiссез',
 
+# Special:Log/newusers
+'newuserlogpage' => 'Уджкерисьö гижöтчан журнал',
+
 # User rights log
 'rightslog' => 'Уджкерисьлö позяннэз сьöртi журнал',
 
@@ -489,9 +492,6 @@ $messages = array(
 # Special:LinkSearch
 'linksearch' => 'Вики сайöдз ыстöттэз',
 
-# Special:Log/newusers
-'newuserlogpage' => 'Уджкерисьö гижöтчан журнал',
-
 # Special:ListGroupRights
 'listgrouprights-members' => '(уджкериссезлöн нимлёдз)',
 
index 4f1072c..cb3f61f 100644 (file)
@@ -39,6 +39,34 @@ $namespaceNames = array(
 // Remove Russian aliases
 $namespaceGenderAliases = array();
 
+$specialPageAliases = array(
+       'Activeusers'               => array( 'Тири_къошулуучула' ),
+       'Allmessages'               => array( 'Системаны_билдириулери' ),
+       'Allpages'                  => array( 'Бютеу_бетле' ),
+       'Blankpage'                 => array( 'Бош_бет' ),
+       'Block'                     => array( 'Блокла' ),
+       'Blockme'                   => array( 'Мени_блокла' ),
+       'Booksources'               => array( 'Китабланы_къайнакълары' ),
+       'BrokenRedirects'           => array( 'Джыртылгъан_редиректле' ),
+       'Categories'                => array( 'Категорияла' ),
+       'ChangeEmail'               => array( 'E-mail_ауушдур' ),
+       'ChangePassword'            => array( 'Пароль_ауушдур' ),
+       'ComparePages'              => array( 'Бетлени_тенглешдириу' ),
+       'Confirmemail'              => array( 'E-mail_тюзлюгюн_бегит' ),
+       'Contributions'             => array( 'Къошум' ),
+       'CreateAccount'             => array( 'Тергеу_джазыуну_къура', 'Къошулуучуну_къура', 'Зарегистрироваться' ),
+       'Deadendpages'              => array( 'Чыкъмазча_бетле' ),
+       'DeletedContributions'      => array( 'Кетерилген_къошум' ),
+       'Disambiguations'           => array( 'Кёб_магъаналы' ),
+       'DoubleRedirects'           => array( 'Экили_редирект' ),
+);
+
+$magicWords = array(
+       'redirect'                  => array( '0', '#джибериу', '#редирект', '#перенаправление', '#перенапр', '#REDIRECT' ),
+       'notoc'                     => array( '0', '__БАШЛАСЫЗ__', '__БЕЗ_ОГЛАВЛЕНИЯ__', '__БЕЗ_ОГЛ__', '__NOTOC__' ),
+       'nogallery'                 => array( '0', '_ГАЛЛЕРЕЯСЫЗ__', '__БЕЗ_ГАЛЕРЕИ__', '__NOGALLERY__' ),
+);
+
 $messages = array(
 # User preference toggles
 'tog-underline' => 'Джибериулени черт:',
@@ -750,7 +778,6 @@ $2',
 'template-semiprotected' => '(джарты джакъланыбды)',
 'hiddencategories' => 'Бу бет $1 {{PLURAL:$1|1 джашырылыннган категориягъа|$1 джашырылыннган категориялагъа}} киреди:',
 'edittools' => '<!-- Былайда орналгъан текст тюрлениу эмда джюклениу формада кёрюннюкдю. -->',
-'nocreatetitle' => 'Бетле къурау чекленибди',
 'nocreatetext' => 'Бу сайтда джангы бет къуралыу тыйылгъанды.
 Ызына къайтыб болгъан бетни тюрлендирирге боллукъсуз, [[Special:UserLogin|системагъа кесигизни танытыргъа неда джангы тергеу джазыу (аккаунт) къураргъа]].',
 'nocreate-loggedin' => 'Джангы бетле къураргъа эркинлигигиз джокъду.',
@@ -1304,15 +1331,13 @@ $1 {{PLURAL:$1|символдан|символладан}} кеб болургъ
 'right-sendemail' => 'Башха къошулуучулагъа электрон почта джиберирге',
 'right-passwordreset' => "пароль тюрлениуле бла e-mail'леге къарау",
 
+# Special:Log/newusers
+'newuserlogpage' => 'Къошулуучуланы регистрацияларыны журналы',
+'newuserlogpagetext' => 'Кёб болмай регистрация этген къошулуучуланы тизмеси.',
+
 # User rights log
 'rightslog' => 'Къошулуучуну хакъларыны журналы',
 'rightslogtext' => 'Бу къошулуучуну хакъларыны тюрлениуюню журналыды',
-'rightslogentry' => '$1-ни къауумлада членлиги $2-ден $3-ге тюрленнгенди',
-'rightslogentry-autopromote' => '$2 къауумдан автомат халда $3 къауумгъа кёчюрюлдю',
-'logentry-rights-rights' => '$1 къошулуучу, $3 къошулуучуну членлигин $4 къауумдан $5 къауумгъа кёчюрдю',
-'logentry-rights-rights-legacy' => '$1 къошулуучу, $3 къушулуучуну къауумлада членлигин тюрлендирди',
-'logentry-rights-autopromote' => '$1 къошулуучу, $4 къауумдан автомат халда $5 къауумгъа кёчюрюлдю',
-'rightsnone' => '(джокъ)',
 
 # Associated actions - in the sentence "You do not have permission to X"
 'action-read' => 'бу бетни окъуу',
@@ -1894,10 +1919,6 @@ URL-ни тюз , сайтны ачыкъ болгъанына ишексиз б
 'activeusers-hidesysops' => 'Администраторланы джашыр',
 'activeusers-noresult' => 'Къошлуучу табылмады.',
 
-# Special:Log/newusers
-'newuserlogpage' => 'Къошулуучуланы регистрацияларыны журналы',
-'newuserlogpagetext' => 'Кёб болмай регистрация этген къошулуучуланы тизмеси.',
-
 # Special:ListGroupRights
 'listgrouprights' => 'Къошулуучуланы къауумуну хакълары',
 'listgrouprights-summary' => 'Тюбюндеги бу викиде танылгъан къошулуучу къауумланы эмда аланы хакъларыны тизмеси.
@@ -2020,6 +2041,8 @@ $UNWATCHURL
 
 Болушлукъ эм теджеуле ючюн:
 {{canonicalurl:{{MediaWiki:Helppage}}}}',
+'created' => 'къуралды',
+'changed' => 'тюрленди',
 
 # Delete
 'deletepage' => 'Бетни кетер',
@@ -3525,7 +3548,10 @@ MediaWiki хайырлы боллукъду деген умут бла джай
 'logentry-newusers-create' => '$1 тергеу джазыу (аккаунт) къуралды',
 'logentry-newusers-create2' => '$1, $3 тергеу джазыуну къурады',
 'logentry-newusers-autocreate' => '$1 тергеу джазыу автомат халда къуралды',
-'newuserlog-byemail' => 'пароль электрон почта бла джиберилгенди',
+'logentry-rights-rights' => '$1 къошулуучу, $3 къошулуучуну членлигин $4 къауумдан $5 къауумгъа кёчюрдю',
+'logentry-rights-rights-legacy' => '$1 къошулуучу, $3 къушулуучуну къауумлада членлигин тюрлендирди',
+'logentry-rights-autopromote' => '$1 къошулуучу, $4 къауумдан автомат халда $5 къауумгъа кёчюрюлдю',
+'rightsnone' => '(джокъ)',
 
 # Feedback
 'feedback-subject' => 'Тема:',
index 9f9eefa..e41f898 100644 (file)
@@ -24,6 +24,8 @@ $namespaceNames = array(
        NS_FILE_TALK        => 'فَیِل_بَحَژ',
        NS_MEDIAWIKI        => 'میڈیاوکی',
        NS_MEDIAWIKI_TALK   => 'میڈیاوکی_بَحَژ',
+       NS_TEMPLATE         => 'فرما',
+       NS_TEMPLATE_TALK    => 'فرما_بَحَژ',
        NS_HELP             => 'پَلزُن',
        NS_HELP_TALK        => 'پَلزُن_بَحَژ',
        NS_CATEGORY         => 'زٲژ',
index 99cdd86..0ec0de7 100644 (file)
  * @author Rk_kaul (on ks.wikipedia.org)
  */
 
+$namespaceNames = array(
+       NS_MEDIA            => 'मीडिया',
+       NS_SPECIAL          => 'खास',
+       NS_TALK             => 'बहज़',
+       NS_USER             => 'रुक्न',
+       NS_USER_TALK        => 'रुक्न_बहज़',
+       NS_PROJECT_TALK     => '$1_बहज़',
+       NS_FILE             => 'फ़ाइल',
+       NS_FILE_TALK        => 'फ़ाइल_बहज़',
+       NS_MEDIAWIKI        => 'मीडियाविकि',
+       NS_MEDIAWIKI_TALK   => 'मीडियाविकि_बहज़',
+       NS_TEMPLATE         => 'नमॆना',
+       NS_TEMPLATE_TALK    => 'नमॆना_बहज़',
+       NS_HELP             => 'म॒दत',
+       NS_HELP_TALK        => 'म॒दत_बहज़',
+       NS_CATEGORY         => 'ज़ॉज़',
+       NS_CATEGORY_TALK    => 'ज़ॉज़_बहज़',
+);
+
 $digitTransformTable = array(
        '0' => '०', # &#x0966;
        '1' => '१', # &#x0967;
index d1e9fb0..cdc52b6 100644 (file)
@@ -234,7 +234,7 @@ $messages = array(
 'tog-previewonfirst' => 'Zeich de Vör-Aansich tirek för et eetste Mol beim Bearbeide aan',
 'tog-nocache' => 'Dun et Sigge Zweschespeichere en Dingem Brauser avschalte',
 'tog-enotifwatchlistpages' => 'Scheck mer en <i lang="en">e-mail</i>, wann en Sigg us minge Oppaßlėß verändert woode es',
-'tog-enotifusertalkpages' => 'Scheck mer en E-Mail, wann ming Klaaf Sigg jeändert weed',
+'tog-enotifusertalkpages' => 'Scheck mer en <i lang="en">e-mail</i>, wann ming Klaaf_Sigg jeändert weed',
 'tog-enotifminoredits' => 'Scheck mer och en <i lang="en">e-mail</i> för de klein Mini-Änderonge',
 'tog-enotifrevealaddr' => 'Zeich dä Andere ming E-Mail Adress aan, en de Benohrichtijunge per E-Mail',
 'tog-shownumberswatching' => 'Zeich de Aanzahl Metmaacher, die op die Sigg am oppasse sin',
@@ -243,7 +243,7 @@ $messages = array(
 'tog-externaleditor' => 'Nemm jedes Mol en extern Editor-Projramm (Doför bruchs de extra Enstellunge op Dingem Kompjutor. Dat es jet för Fachlück. Doh kanns De [//www.mediawiki.org/wiki/Manual:External_editors mieh drövver lässe])',
 'tog-externaldiff' => 'Nemm jedes Mol en extern Diff-Projramm (Doför bruchs de extra Enstellunge op Dingem Kompjutor. Dat es jet för Fachlück. Doh kanns De [//www.mediawiki.org/wiki/Manual:External_editors mieh drövver lässe])',
 'tog-showjumplinks' => '„Jangk-noh“-Links usjevve, die bei em „Zojang ohne Barrikad“ helfe dun',
-'tog-uselivepreview' => 'Dun de „Lebendije Vör-Aansich“ zeije (em Usprobierstadium, un bruch Java_Skripp)',
+'tog-uselivepreview' => 'Dun de „Lebendije Vör-Aansich“ zeije (bruch Java_Skripp)',
 'tog-forceeditsummary' => 'Froch noh, wann en däm Feld „Koot zosammejefass, Quell“ beim Avspeichere nix dren steiht',
 'tog-watchlisthideown' => 'Dun ming eije Änderunge <strong>nit</strong> en minger Oppassliss aanzeije',
 'tog-watchlisthidebots' => 'Dun jedes Mol dä Bots ehr Änderunge <strong>nit</strong> en minger Oppassliss zeije',
@@ -377,6 +377,7 @@ $messages = array(
 'namespaces' => 'Appachtemangs',
 'variants' => 'Variante',
 
+'navigation-heading' => 'Menü för et Navijeere',
 'errorpagetitle' => 'Fähler',
 'returnto' => 'Jangk widder noh: „$1“.',
 'tagline' => 'Us {{GRAMMAR:Dative|{{SITENAME}}}}',
@@ -423,7 +424,7 @@ $messages = array(
 'viewhelppage' => 'De Hölpsigg aanluure',
 'categorypage' => 'De Saachjruppesigg aanluure',
 'viewtalkpage' => 'Klaaf aanluure',
-'otherlanguages' => 'En ander Sproche',
+'otherlanguages' => 'En ander Schprooche',
 'redirectedfrom' => '(Ömjeleit vun $1)',
 'redirectpagesub' => 'Ömleitungssigg',
 'lastmodifiedat' => 'Heh di Sigg es et letz aam $1 öm $2 Uhr jeändert woode.',
@@ -839,6 +840,7 @@ Do moß Ding Paßwoot enjävve, öm Ding Änderong ze bschtäätejje.',
 'changeemail-oldemail' => 'Ding Address för de <i lang="en">e-mail</i> es jäz:',
 'changeemail-newemail' => 'Ding neue Address för de <i lang="en">e-mail</i> sull wääde:',
 'changeemail-none' => '(kein)',
+'changeemail-password' => 'Ding Passwoot {{GRAMMAR:en 3|{{ucfirst:{{SITENAME}}}}}}:',
 'changeemail-submit' => 'Lohß jonn!',
 'changeemail-cancel' => 'Ophüre',
 
@@ -1069,7 +1071,6 @@ Heh kütt der neuste Enndrach em Logbooch doh drövver:",
 'template-semiprotected' => '(halfjeschöz - tabu för neu Metmaacher un ohne Enlogge)',
 'hiddencategories' => 'Die Sigg heh is en {{PLURAL:$1|dä verstoche Saachjrupp: |dä $1 verstoche Saachjruppe: |keij verstoche Saachjruppe dren.}}',
 'edittools' => '<!-- Dä Tex hee zeich et Wiki unger däm Texfeld zom „Ändere/Bearbeide“ un beim Texfeld vum „Huhlade“. -->',
-'nocreatetitle' => 'Neu Sigge Aanläje eß nit einfach esu müjjelesch.',
 'nocreatetext' => 'Sigge neu aanläje es nor müjjelich, wann de [[Special:UserLogin|enjelogg]] bes. Der ohne kanns De ävver Sigge ändere, die ald do sin.',
 'nocreate-loggedin' => 'Do häs nit dat Rääch, neu Sigge aanzelääje.',
 'sectioneditnotsupported-title' => 'Afschnedde Ändere is nit zohjelohße',
@@ -1409,7 +1410,7 @@ dat dänne ihr Daate topaktuell sin,
 'prefs-labs' => 'Neu Saache zom Ußprobeere, die künnte noch nit akeraat fluppe',
 'prefs-user-pages' => 'Metmaachersigge',
 'prefs-personal' => 'De Enstellunge',
-'prefs-rc' => 'Neuste Änderunge',
+'prefs-rc' => 'Neuste Änderonge',
 'prefs-watchlist' => 'De Oppassliss',
 'prefs-watchlist-days' => 'Aanzahl Daare för en ming Oppassliss aanzezeije:',
 'prefs-watchlist-days-max' => 'Nit mieh wie {{PLURAL:$1|eine Daach|$1 Dääch|keine Daach}}',
@@ -1471,9 +1472,9 @@ Ene zohfällesch ußjewörfelte Schlößel, dää De nämme künnß, wöhr: <cod
 'prefs-emailconfirm-label' => 'Beshtätejung övver <i lang="en">e-mail</i>:',
 'prefs-textboxsize' => 'Wi jruuß sull dat Feld för et Afschnedde un Sigge ändere sin',
 'youremail' => 'E-Mail *',
-'username' => 'Metmaacher Name:',
-'uid' => 'Metmaacher Nommer:',
-'prefs-memberingroups' => 'Bes en {{PLURAL:$1|de Metmaacherjrupp:|<strong>$1</strong> Metmaacherjruppe:|keijn Metmaacherjruppe.}}',
+'username' => '{{GENDER:$1|Metmaacher|Metmaacherėnne|Metmaacher|Metmaacherėnne|Metmaacher}} Name:',
+'uid' => '{{GENDER:$1|Metmaacher|Metmaacherėnne|Metmaacher|Metmaacherėnne|Metmaacher}} Nommer:',
+'prefs-memberingroups' => '{{GENDER:$2|Bes}} en {{PLURAL:$1|de Metmaacherjrupp:|$1 Metmaacherjruppe:|keijn Metmaacherjruppe.}}',
 'prefs-registration' => 'Aanjemeldt zick',
 'prefs-registration-date-time' => 'dem $2 öm $3 Uhr',
 'yourrealname' => 'Dinge richtije Name *',
@@ -1622,15 +1623,13 @@ Ene zohfällesch ußjewörfelte Schlößel, dää De nämme künnß, wöhr: <cod
 'right-sendemail' => '<i lang="en">e-mail</i> aan ander Metmaacher schecke',
 'right-passwordreset' => 'De <i lang="en">e-mails</i> vum Paßwoot neu Säze aanloore',
 
+# Special:Log/newusers
+'newuserlogpage' => 'Logboch för neu Metmaachere',
+'newuserlogpagetext' => 'He sin de Metmaacher opjelėßß, di sesh nöü aanjemäldt han.',
+
 # User rights log
 'rightslog' => 'Logboch för Änderunge aan Metmaacher-Räächde',
 'rightslogtext' => 'Hee sin de Änderunge an Metmaacher ehre Räächde opjeliss. Op de Sigge üvver Metmaacher, Wiki-Köbesse, Bürrokrade, Stewards, un esu, kanns De nohlese, wat domet es.',
-'rightslogentry' => 'hät däm Metmaacher „$1“ sing Räächde vun „$2“ op „$3“ ömjestallt.',
-'rightslogentry-autopromote' => 'wood automattesch vun $2 zohm $3 jemaat.',
-'logentry-rights-rights' => '{{GENDER:$2|Dä|Dat|Dä Metmaacher|De|Dat}} „$1“ hät däm Metmaacher „$3“ sing Jroppe-Räächde vun „$4“ op „$5“ ömjestallt.',
-'logentry-rights-rights-legacy' => '{{GENDER:$1|Dä|Et|Dä Metmaacher|De|Dat}} $1 hät däm Metmaacher $3 sing Räääschte-Jroppe verändert.',
-'logentry-rights-autopromote' => '{{GENDER:$1|Dä|Et|Dä Metmaacher|De|Dat}} $1 wood automattesch vum $4 zom $5 jemaat.',
-'rightsnone' => '(nix)',
 
 # Associated actions - in the sentence "You do not have permission to X"
 'action-read' => 'di Sigg ze lesse',
@@ -1671,7 +1670,7 @@ Ene zohfällesch ußjewörfelte Schlößel, dää De nämme künnß, wöhr: <cod
 
 # Recent changes
 'nchanges' => '{{PLURAL:$1|Ein Änderong|$1 Änderonge|Kein Änderong}}',
-'recentchanges' => 'Neuste Änderunge',
+'recentchanges' => 'Neuste Änderonge',
 'recentchanges-legend' => 'Enstellunge',
 'recentchanges-summary' => 'Op dä Sigg hee sin de neuste Änderunge am Wiki opjeliss.',
 'recentchanges-feed-description' => 'Op dämm Abonnomang-Kannal (<i lang="en">Feed</i>) kannze de {{int:recentchanges}} aam Wiki en Laif un en Färve metloore.',
@@ -2313,11 +2312,9 @@ eins vun all däm op eimol.',
 'linksearch-pat' => 'Sök noh:',
 'linksearch-ns' => 'Appachtemang:',
 'linksearch-ok' => 'Söhke',
-'linksearch-text' => 'Di {{int:nstab-special}} heh mäd_et müjjelesch noh Sigge ze söke, woh beshtemmpte Links op Websigge dren enthallde sin.
-
-Beim Söke künnd_Er Schtäänsche aanjevve för e Schtöcksche fun ennem Name, wo mer nit jenou weiß, wi et heiß udder wat me nit kenne deit,  zem Beishpöll esu: <code>http://*.example.com</code> un ene bövverschte Name för en Domain moß aanjejovve sin, zem Beishpöll esu: <code>http://*.org</code> 
+'linksearch-text' => 'Beim Söke künnd_Er Schtäänsche aanjevve för e Schtöcksche fun ennem Naame, wo mer nit jenou weiß, wi et heiß udder wat me nit kenne deit, zem Beishpöll esu: <code>http://*.example.com</code> un ene bövverschte Name för en Domain moß aanjejovve sin, zem Beishpöll esu: <code>http://*.org</code> 
 
-De Brauserprotokolle, di beim Söke aanjejovve wäde künne, sen: <code>$1</code> un der Schtandatt es <code>http://</code> wann nix aanjejovve es.',
+De Brauserprotokolle, di mer beim Söke aanjäjovve kann, sin: <code>$1</code>, un der Schtandatt es <code>http://</code> wann nix aanjejovve es.',
 'linksearch-line' => '„$2“ hät ene Link op $1',
 'linksearch-error' => 'Shternshe kam_mer nor aam Aanfang fum Domain-Name bruche.',
 
@@ -2336,10 +2333,6 @@ De Brauserprotokolle, di beim Söke aanjejovve wäde künne, sen: <code>$1</code
 'activeusers-hidesysops' => 'De Wiki_Köbesse fott lohße',
 'activeusers-noresult' => 'Kein Metmaacher jefonge.',
 
-# Special:Log/newusers
-'newuserlogpage' => 'Logboch för neu Metmaachere',
-'newuserlogpagetext' => 'He sin de Metmaacher opjelėßß, di sesh nöü aanjemäldt han.',
-
 # Special:ListGroupRights
 'listgrouprights' => 'Metmaacher-Jruppe-Rääschte',
 'listgrouprights-summary' => 'Hee kütt de Liss met dä Medmaacher-Jruppe, di dat Wiki hee kennt, un denne ier Rääschte.
@@ -2412,11 +2405,11 @@ Alles klor?',
 'watchnologin' => 'Nit enjelogg',
 'watchnologintext' => 'Öm Ding Oppassliss ze ändere, mööts de ald [[Special:UserLogin|enjelogg]] sin.',
 'addwatch' => 'En de Oppassliss don',
-'addedwatchtext' => "Die Sigg „[[:$1]]“ es jetz en Ding [[Special:Watchlist|Oppassliss]].
+'addedwatchtext' => "Die Sigg „[[:$1]]“ es jetz en Dinge [[Special:Watchlist|Oppaßleß]].
 Av jetz, wann die Sigg verändert weed, oder ehr Klaafsigg, dann weed dat en de
 Oppassliss jezeich. Dä Endrach för die Sigg kütt en  '''Fettschreff''' en de
-„[[Special:RecentChanges|Neuste Änderunge]]“, domet De dä do och flöck fings.
-Wann de dä widder loss wääde wells us Dinger Oppassliss,
+„[[Special:RecentChanges|Neuste Änderunge]]“, domet De dä do och flöck fengs.
+Wann de dä widder loss wääde wells us Dinger Oppaßleß,
 dann klick op „Nimieh drop oppasse“ wann De die Sigg om Schirm häs.",
 'removewatch' => 'Us de Oppassliss nämme',
 'removedwatchtext' => 'Die Sigg „[[:$1]]“ es jetz us de [[Special:Watchlist|Oppassliss]] erusjenomme.',
@@ -2446,14 +2439,22 @@ dann klick op „Nimieh drop oppasse“ wann De die Sigg om Schirm häs.",
 'enotif_mailer' => '{{ucfirst:{{GRAMMAR:Genitive singe male|{{SITENAME}}}}}} Nohreechte-Versand',
 'enotif_reset' => 'Setz all Änderunge op „Aanjeluurt“ un Erledich.',
 'enotif_impersonal_salutation' => 'Metmaacher {{GRAMMAR:Genitiv vun|{{SITENAME}}}}',
+'enotif_subject_deleted' => '{{GENDER:$2|Dä Metmaacher|Et|Dä Metmaacher|De Metmaacherėn|Dä Metmaacher}} $2 hät di Sigg $1 {{GRAMMAR:en 3|{{ucfirst:{{SITENAME}}}}}} fott jeschmeße.',
+'enotif_subject_created' => '{{GENDER:$2|Dä Metmaacher|Et|Dä Metmaacher|De Metmaacherėn|Dä Metmaacher}} $2 hät di Sigg $1 {{GRAMMAR:en 3|{{ucfirst:{{SITENAME}}}}}} aanjelaat.',
+'enotif_subject_moved' => '{{GENDER:$2|Dä Metmaacher|Et|Dä Metmaacher|De Metmaacherėn|Dä Metmaacher}} $2 hät di Sigg $1 {{GRAMMAR:en 3|{{ucfirst:{{SITENAME}}}}}} ömjenannt.',
+'enotif_subject_restored' => '{{GENDER:$2|Dä Metmaacher|Et|Dä Metmaacher|De Metmaacherėn|Dä Metmaacher}} $2 hät di Sigg $1 {{GRAMMAR:en 3|{{ucfirst:{{SITENAME}}}}}} zeröck jehollt.',
+'enotif_subject_changed' => '{{GENDER:$2|Dä Metmaacher|Et|Dä Metmaacher|De Metmaacherėn|Dä Metmaacher}} $2 hät di Sigg $1 {{GRAMMAR:en 3|{{ucfirst:{{SITENAME}}}}}} verändert.',
+'enotif_body_intro_deleted' => '{{GENDER:$2|Dä Metmaacher|Et|Dä Metmaacher|De Metmaacherėn|Dä Metmaacher}} $2 hät di Sigg $1 {{GRAMMAR:en 3|{{ucfirst:{{SITENAME}}}}}} aam $PAGEEDITDATE fott jeschmeße, loor op $3.',
+'enotif_body_intro_created' => '{{GENDER:$2|Dä Metmaacher|Et|Dä Metmaacher|De Metmaacherėn|Dä Metmaacher}} $2 hät di Sigg $1 {{GRAMMAR:en 3|{{ucfirst:{{SITENAME}}}}}} aam $PAGEEDITDATE aanjelaat. Op $3 fengks De der aktoälle Schtand dervun.',
+'enotif_body_intro_moved' => '{{GENDER:$2|Dä Metmaacher|Et|Dä Metmaacher|De Metmaacherėn|Dä Metmaacher}} $2 hät di Sigg $1 {{GRAMMAR:en 3|{{ucfirst:{{SITENAME}}}}}} aam $PAGEEDITDATE ömjenannt. Op $3 fengks De der aktoälle Schtand vun dä Sigg.',
+'enotif_body_intro_restored' => '{{GENDER:$2|Dä Metmaacher|Et|Dä Metmaacher|De Metmaacherėn|Dä Metmaacher}} $2 hät di Sigg $1 {{GRAMMAR:en 3|{{ucfirst:{{SITENAME}}}}}} aam $PAGEEDITDATE zerökjehollt. Op $3 fengks De der aktoälle Schtand vun dä Sigg.',
+'enotif_body_intro_changed' => '{{GENDER:$2|Dä Metmaacher|Et|Dä Metmaacher|De Metmaacherėn|Dä Metmaacher}} $2 hät di Sigg $1 {{GRAMMAR:en 3|{{ucfirst:{{SITENAME}}}}}} aam $PAGEEDITDATE verändert. Op $3 fengks De der aktoälle Schtand vun dä Sigg.',
 'enotif_lastvisited' => 'Luur unger „$1“ - do fings de all die Änderunge zick Dingem letzte Besoch hee.',
 'enotif_lastdiff' => 'Loor op $1 för heh di Änderung aan_ze_loore.',
 'enotif_anon_editor' => 'Dä namelose Metmaacher $1',
 'enotif_body' => 'Leeven $WATCHINGUSERNAME,
 
-{{GRAMMAR:em|{{SITENAME}}}} wood die Sigg „$PAGETITLE“ am $PAGEEDITDATE {{GENDER:$PAGEEDITOR|vum|vum|vum_Metmaacher|vun dä|vum}} „$PAGEEDITOR“ $CHANGEDORCREATED, unger $PAGETITLE_URL fings Do de neuste Version.
-
-$NEWPAGE
+$PAGEINTRO $NEWPAGE
 
 {{int:summary}} „$PAGESUMMARY“ $PAGEMINOREDIT
 
@@ -2462,8 +2463,8 @@ Do kanns dä Metmaacher „$PAGEEDITOR“ aanspreche:
 * Em Wiki: $PAGEEDITOR_WIKI
 
 Do kriss vun jetz aan kein e-mail mieh, bes dat Do Der di Sigg aanjeluurt häs,
-och wann se norr_ens verändert weed.
-Do kanns ävver och all die Merker för e-mail för die Sigge en Dinger Oppassliss op eimol ändere.
+och wann se norr_ens verändert weed. Do kanns ävver och all die Merker för 
+e-mail för die Sigge en Dinger Oppassliss op eimol ändere.
 
 Ene schöne Jroß {{GRAMMAR:vun|{{SITENAME}}}}.
 
@@ -2479,6 +2480,8 @@ $UNWATCHURL
 
 Do kanns hee noh Hölp luure:
 {{canonicalurl:{{MediaWiki:Helppage}}}}',
+'created' => 'neu aanjelaht',
+'changed' => 'jeändert',
 
 # Delete
 'deletepage' => 'Schmieß die Sigg jetz fott',
@@ -2659,7 +2662,8 @@ $1',
 'blanknamespace' => '(Atikkele)',
 
 # Contributions
-'contributions' => 'Däm Metmaacher sing Beidräch',
+'contributions' => '{{GENDER:$1|Däm Metmaacher|Däm|Däm Metmaacher|Dä Metmaacherėn|Däm Metmaacher}} $1
+{{GENDER:$1|singe|singe|singe|iere|singe}} Beidräch',
 'contributions-title' => 'Beidräsch fum  $1',
 'mycontris' => 'Beidrähch',
 'contribsub2' => 'För dä Metmaacher: $1 ($2)',
@@ -3058,6 +3062,7 @@ Bes esu joot, un versök et noch ens.',
 'import-error-interwiki' => 'Di Sigg „$1“ weed nit empoteet, weil dä iehre Name för et Verlengke noh ußerhallef, pä Engerwiki-Lengk, jebruch weed.',
 'import-error-special' => 'Di Sigg „$1“ weed nit empoteet, weil dä iehre Name en enem besöndere Appachtemang litt, woh kein Sigge dren zohjelohße sin.',
 'import-error-invalid' => 'Di Sigg „$1“ weed nit empoteet, weil dä iehre Name nit jöltesch es.',
+'import-error-unserialize' => 'De Väsjohn $2 vun dä Sigg „$1“ kunnt nit von serijäll ußjepack wääde. De Väsjohn sull Daate vun dä Zoot „$3“ änthallde un ußjepack „$4“ jävve.',
 'import-options-wrong' => '{{PLURAL:$2|En verkiehrte Aanjab|Verkiehrte Aanjabe|Kein verkiehrte Aanjabe}}: <nowiki>$1</nowiki>',
 'import-rootpage-invalid' => 'Di aanjejovve Aanfangssigg hät keine jölteje Tittel.',
 'import-rootpage-nosubpage' => 'Em Appachtemang „$1“ vun dä Aanfangssig sin kein Ongersigge zohjelohße.',
@@ -3135,7 +3140,7 @@ Bes esu joot, un versök et noch ens.',
 'tooltip-ca-nstab-help' => 'Donn en Sigg met Hölp aanzeije',
 'tooltip-ca-nstab-category' => 'Dun die Saachjrupp aanzeije',
 'tooltip-minoredit' => 'Deit Ding Änderunge als klein Mini-Änderunge markeere.',
-'tooltip-save' => 'Deit Ding Änderunge avspeichere.',
+'tooltip-save' => 'Deit Ding Änderonge avspeichere.',
 'tooltip-preview' => 'Liss de Vör-Aansich vun dä Sigg un vun Dinge Änderunge ih datte se Avspeichere deis!',
 'tooltip-diff' => 'Zeich Ding Änderunge am Tex aan.',
 'tooltip-compareselectedversions' => 'Dun de Ungerscheid zwesche dä beids usjewählde Versione zeije.',
@@ -3305,6 +3310,7 @@ $1',
 'file-nohires' => 'Mer han kein hüütere Oplösung vun däm Beld.',
 'svg-long-desc' => 'SVG-Datei, de Basis es {{PLURAL:$1|ei Pixel|$1 Pixelle|kei Pixel}} breed × {{PLURAL:$2|ei Pixel|$2 Pixelle|kei Pixel}} huh, dä Dateiömfang es $3',
 'svg-long-desc-animated' => 'SVG-Datei met Bewääjong, de Basis es {{PLURAL:$1|ei Pixel|$1 Pixelle|kei Pixel}} breed × {{PLURAL:$2|ei Pixel|$2 Pixelle|kei Pixel}} huh, dä Dateiömfang es $3',
+'svg-long-error' => 'En kapodde <i lang="en">SVG</i>-Dattei: $1',
 'show-big-image' => 'Jröößer Oplöösung',
 'show-big-image-preview' => 'Heh di Vör_Aanseesch es $1 jruuß.',
 'show-big-image-other' => '{{PLURAL:$2|Ander Oplühsung|Ander Oplühsunge|kein ander Oplühsunge}}: $1.',
@@ -3335,9 +3341,10 @@ $1',
 'hours-abbrev' => '$1&nbsp;Std.',
 'seconds' => '{{PLURAL:$1|eine Sekund|$1 Sekunde|keine Sekund}}',
 'minutes' => '{{PLURAL:$1|eine Menutt|$1 Menutte|keine Menutt}}',
-'hours' => '{{PLURAL:$1|eine Shtundt|$1 Shtunde|keine Shtundt}}',
+'hours' => '{{PLURAL:$1|ein Schtundt|$1 Schtunde|kein Schtundt}}',
 'days' => '{{PLURAL:$1|einem Daach|$1 Dääsch|keinem Daach}}',
 'ago' => 'vür $1',
+'just-now' => 'jraad äävens',
 
 # Bad image list
 'bad_image_list' => '<strong>Fomat:</strong>
@@ -4165,11 +4172,14 @@ die De häs han welle. Se künnt jet ällder un nit mieh aktoäll sin.',
 'logentry-move-move_redir-noredirect' => 'Dä $1 hätt di Sigg „$3“ en „$4“ ömjenannt un derbei en ahle Ömleidongssigg fottjeschmeße un kein neue Ömliedongssig aanjelaat.',
 'logentry-patrol-patrol' => 'Dä $1 hät di Version $4 vun dä Sigg „$3“ nohjeloort.',
 'logentry-patrol-patrol-auto' => 'Dä $1 hät di Version $4 vun dä Sigg „$3“ automattesch nohjeloort.',
-'logentry-newusers-newusers' => 'Dä $1 hät ene neue Metmaacher aanjelaat.',
-'logentry-newusers-create' => 'Dä $1 hät ene Metmaacher aanjelaat.',
+'logentry-newusers-newusers' => 'Dä neue Metmaacher $1 wood aanjelaat.',
+'logentry-newusers-create' => 'Dä neue Metmaacher $1 wood aanjelaat.',
 'logentry-newusers-create2' => 'Dä $1 hät dä $3 als ene neue Metmaacher aanjelaat.',
 'logentry-newusers-autocreate' => 'Dä $1 wood automattesch als Metmaacher aanjelaat.',
-'newuserlog-byemail' => 'dat Passwood wood med de e-mail loßjescheck',
+'logentry-rights-rights' => '{{GENDER:$2|Dä|Dat|Dä Metmaacher|De|Dat}} „$1“ hät däm Metmaacher „$3“ sing Jroppe-Räächde vun „$4“ op „$5“ ömjestallt.',
+'logentry-rights-rights-legacy' => '{{GENDER:$1|Dä|Et|Dä Metmaacher|De|Dat}} $1 hät däm Metmaacher $3 sing Räääschte-Jroppe verändert.',
+'logentry-rights-autopromote' => '{{GENDER:$1|Dä|Et|Dä Metmaacher|De|Dat}} $1 wood automattesch vum $4 zom $5 jemaat.',
+'rightsnone' => '(nix)',
 
 # Feedback
 'feedback-bugornote' => 'Wann de em Bejreff bes, övver e täschesch Probleem ze schrieve, bes esu jood un donn dat als en [$1 Fählermäldong].
index 09efdd4..7fc0482 100644 (file)
@@ -134,7 +134,7 @@ $messages = array(
 'tog-externaleditor' => 'Edîtorekî derve bike "standard" (ji yên bi ezmûn re, tercîhên taybet di komputerê de hewce ne)',
 'tog-externaldiff' => 'Birnemijekî derve biguherîne "standard" (ji yên bi ezmûn re, tercîhên taybet di komputerê de hewce ne)',
 'tog-showjumplinks' => 'Girêdanên "Here-berve" qebûlbike',
-'tog-uselivepreview' => 'Pêşdîtinê "zindî" bikarbîne (JavaScript pêwîst e) (ceribandinî)',
+'tog-uselivepreview' => 'Pêşdîtina "zindî" bi kar bîne (JavaScript pêwîst e) (ceribandinî)',
 'tog-forceeditsummary' => 'Hinga kurteyeke vala hate tomarkirin min agahdar bike',
 'tog-watchlisthideown' => 'Guherandinên min ji lîsteya şopandinê veşêre',
 'tog-watchlisthidebots' => "Guherandinên bot'an ji lîsteya şopandinê veşêre",
@@ -506,7 +506,7 @@ Eger kesekî din vê xastinê ji te ra xast ya şîfreya kevin dîsa hate bîrê
 'passwordsent' => 'Ji navnîşana e-mail ku ji bo "$1" hat tomarkirin şîfreyekê nû hat şandin. Vê bistîne û dîsa têkeve.',
 'blocked-mailpassword' => "IP'ya ku tu niha bi kar tînî ji guherandinê re hatiye astengkirin. Ji bo tiştên şaş çênebin, xwestina te ya ji bo şîfreyeke nû jî hatiye qedexekirin.",
 'eauthentsent' => 'E-nameyeka naskirinê ji adresa nivîsî ra hate şandin. Berî e-name ji bikarhênerên din bi vê rêkê dikaribim bi te gên, ew adresa û rastbûna xwe gireke werin naskirin. Xêra xwe e-nameyê naskirinê bixûne!',
-'throttled-mailpassword' => 'Berî {{PLURAL:$1|saetekê|$1 saetan}} şîfreyeke nû hate xwestin. Ji bo şaşbûn bi vê fonksiyonê çênebin, bes her {{PLURAL:$1|saetekê|$1 saetan}} şîfreyeke nû dikare were xwestin.',
+'throttled-mailpassword' => 'Berî {{PLURAL:$1|saetekê|$1 saetan}} şîfreyeke nû hate xwestin. Ji bo şaşbûn bi vê fonksiyonê çênebin, serê her {{PLURAL:$1|saetekê|$1 saetan}} tenê şîfreyeke nû dikare were xwestin.',
 'mailerror' => 'Şaşbûnek li cem şandina e-nameyekê: $1',
 'acct_creation_throttle_hit' => 'Bibexşe! Te hesabê bikarhêneriyê $1 vekiriye. Tu êdî nikarî hesabên din vekî.',
 'emailauthenticated' => 'Adresa e-nameya te hate naskirin: $1.',
@@ -657,9 +657,9 @@ Astengkirina dawî bi referansa li jêr hatiye piştrastkirin:',
 * '''Opera:''' Girekin belkî cache'a xwe tevda di bin ''Tools → Preferences'' da valabikin",
 'usercssyoucanpreview' => "'''Tîp:''' 'Pêşdîtin' bikarwîne ji bo tu bibînê çawa CSS'ê te yê nuh e berî tomarkirinê.",
 'userjsyoucanpreview' => "'''Tîp:''' 'Pêşdîtin' bikarwîne ji bo tu bibînê çawa JS'ê te yê nuh e berî tomarkirinê.",
-'usercsspreview' => "'''Zanibe ku tu bes pêşdîtina CSS dibînî.'''
+'usercsspreview' => "'''Zanibe ku tu tenê pêşdîtina CSS dibînî.'''
 '''Ew hê nehatiye tomarkirin!'''",
-'userjspreview' => "'''Zanibe ku tu bes JavaScript'a xwe dicerbînê, ew hên nehatîye tomarkirin!'''",
+'userjspreview' => "'''Zanibe ku tu tenê JavaScript'a xwe diceribînî, ew hê nehatiye tomarkirin!'''",
 'updated' => '(Hate rojanekirin)',
 'note' => "'''Nîşe:'''",
 'previewnote' => "'''Ji bîr neke ku ev bi tenê çavdêriyek e, ev rûpel hîn nehatiye tomarkirin!'''",
@@ -685,14 +685,14 @@ Eger tu nexwazî ku nivîsên te bê dilrehmî bên guherandin û li gora keyfa
 Tu soz didî ku te ev bi xwe nivîsand an jî ji çavkaniyekê azad an geliyane (''public domain'') girt.
 '''Berhemên mafên wan parastî bê destûr neweşîne!'''",
 'protectedpagewarning' => "'''Hişyarî:  Ev rûpel tê parastin. Bi tenê bikarhênerên ku xwediyên mafên \"koordînatoriyê\" ne, dikarin vê rûpelê biguherînin.'''",
-'semiprotectedpagewarning' => "'''Hişyarî:''' Ev rûpel tê parastin, lewma bes bikarhênerên tomarkirî dikarin vê biguherînin.
+'semiprotectedpagewarning' => "'''Hişyarî:''' Ev rûpel tê parastin, lewma tenê bikarhênerên tomarkirî dikarin vê biguherînin.
 Guhertina herî dawî bi referansa li jêr hatiye piştrastkirin:",
 'templatesused' => '{{PLURAL:$1|Şablona|Şablonên}} ku li ser vê rûpelê {{PLURAL:$1|tê|tên}} bikaranîn:',
 'templatesusedpreview' => '{{PLURAL:$1|Şablona|Şablonên}} di vê pêşdîtinê de {{PLURAL:$1|tê|tên}} bikaranîn:',
 'templatesusedsection' => 'Şablonên ku di vê parçeyê de tên bikaranîn:',
 'template-protected' => '(tê parastin)',
 'template-semiprotected' => '(nîv-parastî)',
-'hiddencategories' => 'Ev rûpel endamê{{PLURAL:$1|1 hidden category|$1 hidden categories}} ye:',
+'hiddencategories' => 'Ev rûpel endamê {{PLURAL:$1|1 kategoriya veşartî|$1 kategoriyên veşartî}} ye:',
 'sectioneditnotsupported-title' => 'Guhertina beşê nayê piştgirîkirin',
 'sectioneditnotsupported-text' => 'Guhertina beşê di vê rûpelê de nayê piştgirîkirin.',
 'permissionserrors' => 'Çewtiyên destûrê',
@@ -1001,11 +1001,12 @@ Sedema qedexekirina $3 ev e: ''$2''",
 'right-userrights' => 'Hemû mafên bikarhêner biguherîne',
 'right-sendemail' => 'Ji bikarhênerên di re e-name bişîne',
 
+# Special:Log/newusers
+'newuserlogpage' => 'çêkirina hesabê nû',
+
 # User rights log
 'rightslog' => 'guhertina mafê bikarhêneriyê',
 'rightslogtext' => 'Ev guhertineke ji bo mafên bikarhêneriyê ye.',
-'rightslogentry' => 'grûpa bikarhêneran ji bo $1 ji $2 guherande $3',
-'rightsnone' => '(tune)',
 
 # Associated actions - in the sentence "You do not have permission to X"
 'action-read' => 'vê rûpelê bixwîne',
@@ -1335,7 +1336,7 @@ Li [[Special:WantedCategories|kategoriyên xwestî]] binêre.',
 # Special:DeletedContributions
 'deletedcontributions' => 'Beşdariyên bikarhênerekî yê jêbirî',
 'deletedcontributions-title' => 'Guherandinên bikarhêner yê jêbirî',
-'sp-deletedcontributions-contribs' => 'beşdari',
+'sp-deletedcontributions-contribs' => 'beşdarî',
 
 # Special:LinkSearch
 'linksearch' => 'Lêgerîna girêdanên derve',
@@ -1353,9 +1354,6 @@ Li [[Special:WantedCategories|kategoriyên xwestî]] binêre.',
 'activeusers-hidesysops' => 'Rêveberan veşêre',
 'activeusers-noresult' => 'Tu bikarhêner nehate dîtin.',
 
-# Special:Log/newusers
-'newuserlogpage' => 'çêkirina hesabê nû',
-
 # Special:ListGroupRights
 'listgrouprights' => 'Mafên koma bikarhêner',
 'listgrouprights-group' => 'Kom',
@@ -1444,6 +1442,8 @@ Heke tu dixwazî lîsteya xwe ya şopandinê biguherînî, li
 
 Paşagahîdan û alîkaraya din:
 {{canonicalurl:{{MediaWiki:Helppage}}}}',
+'created' => 'hate afirandin',
+'changed' => 'hate guhertin',
 
 # Delete
 'deletepage' => 'Rûpelê jê bibe',
@@ -1607,10 +1607,10 @@ Ji bo jêbirinan û çêkirinên nû, ji kerema xwe li [[{{ns:special}}:Log/dele
 'blockip' => 'Bikarhêner asteng bike',
 'blockip-title' => 'Bikarhêner asteng bike',
 'blockip-legend' => 'Bikarhêner asteng bike',
-'blockiptext' => 'Ji bo astengkirina nivîsandinê ji navnîşaneke IP an bi navekî bikarhêner, vê formê bikarbîne.
-Ev bes gireke were bikaranîn ji bo vandalîzmê biskinîne (bi vê [[{{MediaWiki:Policy-url}}|qebûlkirinê]]).
+'blockiptext' => "Ji bo astengkirina nivîsandinê ya ji navnîşaneke IP'yê an jî ji bikarhênerekî/ê, vê formê bikarbîne.
+Divê ev tenê ji bo sekinandina vandalîzmê were bikaranîn, ku divê li gorî [[{{MediaWiki:Policy-url}}|rêgezê]] be.
 
-Sedemekê binivîse!',
+Sedemekê binivîse!",
 'ipadressorusername' => "adresê IP'yekê ya navekî bikarhênerekî",
 'ipbexpiry' => 'Dem:',
 'ipbreason' => 'Sedem',
@@ -1663,7 +1663,7 @@ Sedemekê binivîse!',
 'ipblocklist-otherblocks' => '{{PLURAL:$1|Astengkirin|Astengkirinên}} din',
 'infiniteblock' => 'ji her demê ra',
 'expiringblock' => 'heta $1 $2',
-'anononlyblock' => 'bes kesên netên zanîn',
+'anononlyblock' => 'tenê kesên bênav',
 'noautoblockblock' => 'astengkirina otomatîk hatîye temirandin',
 'createaccountblock' => 'çêkirina hesaban hate qedexekirin',
 'emailblock' => 'E-Mail hate girtin',
@@ -1680,7 +1680,7 @@ Sedemekê binivîse!',
 'blocklogentry' => '"[[$1]]" ji bo dema $2, $3 asteng kir',
 'blocklogtext' => "Ev reşahîyek ji astengkirinên û rakirina astengkirinên bikarhêneran ra ye. Adrêsên IP'yan, yê otomatîk hatine astengkirin, nehatine nivîsandin. [[Special:BlockList|Lîsteya IP'yên astengkirî]] bibîne ji bo dîtina astengkirinên IP'yan.",
 'unblocklogentry' => 'astenga "$1" betalkir',
-'block-log-flags-anononly' => 'bes bikarhênerên neqeydkirî',
+'block-log-flags-anononly' => 'tenê bikarhênerên neqeydkirî',
 'block-log-flags-nocreate' => 'çêkirina hesaban hate qedexekirin',
 'block-log-flags-noautoblock' => 'astengkirina otomatik tune',
 'block-log-flags-noemail' => 'Şandina e-nameyan hatîye qedexekirin',
@@ -1797,7 +1797,7 @@ Rûpela "[[:$1]]" berê heye. Tu rast dixazê wê jêbibê ji bo navguherandinê
 'tooltip-pt-mycontris' => 'Lîsteya beşdariyên min',
 'tooltip-pt-logout' => 'Derkeve',
 'tooltip-ca-talk' => 'Gotûbêj li ser rûpela naverokê',
-'tooltip-ca-edit' => 'Vê rûpelê biguherîne! Berê qeydkirinê bişkoka "Pêşdîtin',
+'tooltip-ca-edit' => 'Vê rûpelê biguherîne! Berê qeydkirinê bişkoka "Pêşdîtin"',
 'tooltip-ca-addsection' => 'Beşekê zêde bike.',
 'tooltip-ca-viewsource' => 'Ev rûpel tê parastin.
 Tu dikarî tenê li çavkaniyê binêrî.',
@@ -2141,7 +2141,7 @@ Ji kerema xwe zanibe ku tu bi rastî dixwazî vê rûpelê dîsa çêkî.",
 'logentry-move-move_redir' => '$1 navê $3 guherand û kir $4',
 'logentry-newusers-newusers' => '$1 hesabekî bikarhêneriyê çêkir',
 'logentry-newusers-create' => '$1 hesabekî bikarhêneriyê çêkir',
-'newuserlog-byemail' => 'şîfre bi e-nameyê hate şandin',
+'rightsnone' => '(tune)',
 
 # Feedback
 'feedback-subject' => 'Mijar:',
index 49e5d42..e49779b 100644 (file)
@@ -60,52 +60,150 @@ $namespaceAliases = array(
 );
 
 $specialPageAliases = array(
-       'Allmessages'               => array( 'OllMessajow' ),
-       'Allpages'                  => array( 'OllFolednow' ),
-       'Ancientpages'              => array( 'FolednowKoth' ),
+       'Activeusers'               => array( 'DevnydhyoryonBew' ),
+       'Allmessages'               => array( 'OllMessajys' ),
+       'Allpages'                  => array( 'OllFolennow' ),
+       'Ancientpages'              => array( 'FolennowCoth' ),
        'Badtitle'                  => array( 'TitelDrog' ),
        'Blankpage'                 => array( 'FolenWag' ),
-       'Block'                     => array( 'Lettya' ),
-       'Booksources'               => array( 'PednfentynyowLyver' ),
-       'Categories'                => array( 'Klassys' ),
+       'Block'                     => array( 'Difen' ),
+       'Blockme'                   => array( 'DifenVy' ),
+       'Booksources'               => array( 'PennfentynyowLyver' ),
+       'BrokenRedirects'           => array( 'DaswedyansowTerrys' ),
+       'Categories'                => array( 'Classys' ),
        'ChangeEmail'               => array( 'ChanjyaEbost' ),
        'ChangePassword'            => array( 'ChanjyaGerTremena' ),
+       'ComparePages'              => array( 'KehevelyFolennow' ),
+       'Confirmemail'              => array( 'AfydhyaEbost' ),
        'Contributions'             => array( 'Kevrohow' ),
-       'CreateAccount'             => array( 'FormyaAkont' ),
+       'CreateAccount'             => array( 'FormyaAcont' ),
+       'Deadendpages'              => array( 'FolennowFordhDhall' ),
        'DeletedContributions'      => array( 'KevrohowDiles' ),
-       'EditWatchlist'             => array( 'ChanjyaRolGolyas' ),
+       'Disambiguations'           => array( 'Diamstyryansow' ),
+       'DoubleRedirects'           => array( 'DaswedyansowDewblek' ),
+       'EditWatchlist'             => array( 'ChanjyaOwRolGolyas' ),
        'Emailuser'                 => array( 'EbostyaDevnydhyer' ),
-       'Export'                    => array( 'Esperthi' ),
-       'Import'                    => array( 'Ymperthi' ),
-       'MIMEsearch'                => array( 'HwilansMIME' ),
+       'Export'                    => array( 'Esperthy' ),
+       'Fewestrevisions'           => array( 'AnLyhaAmendyansow' ),
+       'Filepath'                  => array( 'HensAnFolen' ),
+       'Import'                    => array( 'Ymperthy' ),
+       'Invalidateemail'           => array( 'DigomposaEbost' ),
+       'JavaScriptTest'            => array( 'PrevyansJavaScript' ),
+       'BlockList'                 => array( 'RolDhifen' ),
+       'LinkSearch'                => array( 'WhilasKevrennow' ),
+       'Listadmins'                => array( 'RolyaMenystroryon' ),
+       'Listbots'                  => array( 'RolyaBottys' ),
+       'Listfiles'                 => array( 'RolyaRestrennow' ),
+       'Listgrouprights'           => array( 'RolyaGwiryowBagas' ),
+       'Listredirects'             => array( 'RolyaDaswedyansow' ),
+       'Listusers'                 => array( 'RolyaDevnydhyoryon' ),
+       'Lockdb'                    => array( 'AlwhedhaDB' ),
+       'Log'                       => array( 'Covnoten', 'Covnotennow' ),
+       'Lonelypages'               => array( 'FolennowDigoweth' ),
+       'Longpages'                 => array( 'FolennowHir' ),
+       'MergeHistory'              => array( 'IstoryKesunya' ),
+       'MIMEsearch'                => array( 'WhilasMIME' ),
+       'Mostcategories'            => array( 'AnMoyhaClassys' ),
+       'Mostimages'                => array( 'AnMoyhaRestrennowKevennys' ),
+       'Mostinterwikis'            => array( 'AnMoyhaInterwikis' ),
+       'Mostlinked'                => array( 'AnMoyhaFolennowKevrennys' ),
+       'Mostlinkedcategories'      => array( 'AnMoyhaClassysKevrennys' ),
+       'Mostlinkedtemplates'       => array( 'AnMoyhaScantlynsKevrennys' ),
+       'Mostrevisions'             => array( 'AnMoyhaAmendyansow' ),
        'Movepage'                  => array( 'GwayaFolen' ),
        'Mycontributions'           => array( 'OwHevrohow' ),
        'Mypage'                    => array( 'OwFolen' ),
-       'Mytalk'                    => array( 'OwHows' ),
-       'Myuploads'                 => array( 'OwUghkargansow' ),
-       'Newimages'                 => array( 'RestrednowNowyth' ),
-       'Newpages'                  => array( 'FolednowNowyth' ),
+       'Mytalk'                    => array( 'OwHescows' ),
+       'Myuploads'                 => array( 'OwUghcargansow' ),
+       'Newimages'                 => array( 'RestrennowNowyth' ),
+       'Newpages'                  => array( 'FolennowNowyth' ),
        'PasswordReset'             => array( 'DassetyaGerTremena' ),
+       'PermanentLink'             => array( 'KevrenFast' ),
+       'Popularpages'              => array( 'FolennowGerysDa' ),
        'Preferences'               => array( 'Dowisyansow' ),
+       'Prefixindex'               => array( 'MenegvaRagerow' ),
+       'Protectedpages'            => array( 'FolennowDifresys' ),
+       'Protectedtitles'           => array( 'TitlysDifres' ),
        'Randompage'                => array( 'FolenDreJons' ),
+       'Randomredirect'            => array( 'DaswedyansDreJons' ),
        'Recentchanges'             => array( 'Chanjyow_a-dhiwedhes' ),
-       'Search'                    => array( 'Hwilas' ),
-       'Specialpages'              => array( 'FolednowArbednek' ),
-       'Uncategorizedcategories'   => array( 'KlassysHebKlass' ),
-       'Uncategorizedimages'       => array( 'RestrednowHebKlass' ),
-       'Uncategorizedpages'        => array( 'FolednowHebKlass' ),
-       'Uncategorizedtemplates'    => array( 'SkantlynsHebKlass' ),
-       'Upload'                    => array( 'Ughkarga' ),
-       'Userlogin'                 => array( 'Omgelmi' ),
-       'Userlogout'                => array( 'Digelmi' ),
+       'Recentchangeslinked'       => array( 'ChanjyowKelmys' ),
+       'Revisiondelete'            => array( 'DileaAmendyans' ),
+       'Search'                    => array( 'Whilas' ),
+       'Shortpages'                => array( 'FolennowCot' ),
+       'Specialpages'              => array( 'FolennowArbennek' ),
+       'Statistics'                => array( 'Statystygyon' ),
+       'Unblock'                   => array( 'DiswulDifennans' ),
+       'Uncategorizedcategories'   => array( 'ClassysHebClass' ),
+       'Uncategorizedimages'       => array( 'RestrennowHebClass' ),
+       'Uncategorizedpages'        => array( 'FolennowHebClass' ),
+       'Uncategorizedtemplates'    => array( 'ScantlynsHebClass' ),
+       'Undelete'                  => array( 'DiswulDileans' ),
+       'Unlockdb'                  => array( 'DialwhedhaDB' ),
+       'Unusedcategories'          => array( 'ClassysHebDevnydh' ),
+       'Unusedimages'              => array( 'RestrennowHebDevnydh' ),
+       'Unusedtemplates'           => array( 'ScantlynsHebDevnydh' ),
+       'Unwatchedpages'            => array( 'FolennowHebAgaHolyas' ),
+       'Upload'                    => array( 'Ughcarga' ),
+       'Userlogin'                 => array( 'Omgelmy' ),
+       'Userlogout'                => array( 'Digelmy' ),
        'Userrights'                => array( 'GwiryowDevnydhyer' ),
        'Version'                   => array( 'Versyon' ),
-       'Wantedcategories'          => array( 'KlassysHwansus' ),
-       'Wantedfiles'               => array( 'RestrednowHwansus' ),
-       'Wantedpages'               => array( 'FolednowHwansus' ),
-       'Wantedtemplates'           => array( 'SkantlynsHwansus' ),
+       'Wantedcategories'          => array( 'ClassysWhansus' ),
+       'Wantedfiles'               => array( 'RestrennowWhansus' ),
+       'Wantedpages'               => array( 'FolennowWhansus' ),
+       'Wantedtemplates'           => array( 'ScantlynsWhansus' ),
        'Watchlist'                 => array( 'Rol_golyas' ),
-       'Whatlinkshere'             => array( 'OwKevrednaObma' ),
+       'Whatlinkshere'             => array( 'OwKevrennaOmma' ),
+       'Withoutinterwiki'          => array( 'HebInterwiki' ),
+);
+
+$magicWords = array(
+       'redirect'                  => array( '0', '#DASWEDYANS', '#REDIRECT' ),
+       'numberofpages'             => array( '1', 'NIVERAFOLENNOW', 'NUMBEROFPAGES' ),
+       'numberofarticles'          => array( '1', 'NIVERAERTHYGLOW', 'NUMBEROFARTICLES' ),
+       'numberoffiles'             => array( '1', 'NIVERARESTRENNOW', 'NUMBEROFFILES' ),
+       'numberofusers'             => array( '1', 'NIVERADHEVNYDHYORYON', 'NUMBEROFUSERS' ),
+       'numberofactiveusers'       => array( '1', 'NIVERADHEVNYDHYORYONVEW', 'NUMBEROFACTIVEUSERS' ),
+       'numberofedits'             => array( '1', 'NIVERAJANJYOW', 'NUMBEROFEDITS' ),
+       'numberofviews'             => array( '1', 'NIVERAWELOW', 'NUMBEROFVIEWS' ),
+       'pagename'                  => array( '1', 'HANOWANFOLEN', 'PAGENAME' ),
+       'fullpagename'              => array( '1', 'HANOWLEUNANFOLEN', 'FULLPAGENAME' ),
+       'img_thumbnail'             => array( '1', 'skeusennik', 'thumbnail', 'thumb' ),
+       'img_manualthumb'           => array( '1', 'skeusennik=$1', 'thumbnail=$1', 'thumb=$1' ),
+       'img_right'                 => array( '1', 'dyhow', 'right' ),
+       'img_left'                  => array( '1', 'cledh', 'left' ),
+       'img_none'                  => array( '1', 'nagonan', 'none' ),
+       'img_center'                => array( '1', 'cresel', 'center', 'centre' ),
+       'img_framed'                => array( '1', 'fremys', 'framed', 'enframed', 'frame' ),
+       'img_frameless'             => array( '1', 'hebfram', 'frameless' ),
+       'img_page'                  => array( '1', 'folen=$1', 'folen_$1', 'page=$1', 'page $1' ),
+       'img_top'                   => array( '1', 'gwartha', 'top' ),
+       'img_text_top'              => array( '1', 'text-gwartha', 'text-top' ),
+       'img_middle'                => array( '1', 'cres', 'middle' ),
+       'img_bottom'                => array( '1', 'goles', 'bottom' ),
+       'img_text_bottom'           => array( '1', 'text-goles', 'text-bottom' ),
+       'img_link'                  => array( '1', 'kevren=$1', 'link=$1' ),
+       'sitename'                  => array( '1', 'HANOWANWIASVA', 'SITENAME' ),
+       'pageid'                    => array( '0', 'IDANFOLEN', 'PAGEID' ),
+       'server'                    => array( '0', 'SERVYER', 'SERVER' ),
+       'servername'                => array( '0', 'HANOWANSERVYER', 'SERVERNAME' ),
+       'grammar'                   => array( '0', 'GRAMASEK:', 'GRAMMAR:' ),
+       'fullurl'                   => array( '0', 'URLLEUN:', 'FULLURL:' ),
+       'displaytitle'              => array( '1', 'DISQWEDHESANTITEL', 'DISPLAYTITLE' ),
+       'language'                  => array( '0', '#YETH:', '#LANGUAGE:' ),
+       'numberofadmins'            => array( '1', 'NIVERAVENYSTRORYON', 'NUMBEROFADMINS' ),
+       'special'                   => array( '0', 'arbennek', 'special' ),
+       'filepath'                  => array( '0', 'HENSANFOLEN:', 'FILEPATH:' ),
+       'hiddencat'                 => array( '1', '__CLASSCUDHYS__', '__HIDDENCAT__' ),
+       'pagesincategory'           => array( '1', 'RESTRENNOWYNCLASS', 'PAGESINCATEGORY', 'PAGESINCAT' ),
+       'pagesize'                  => array( '1', 'MENSANRESTREN', 'PAGESIZE' ),
+       'index'                     => array( '1', '__MENEGVA__', '__INDEX__' ),
+       'noindex'                   => array( '1', '__HEBMENEGVA__', '__NOINDEX__' ),
+       'numberingroup'             => array( '1', 'NIVERYNBAGAS', 'NUMBERINGROUP', 'NUMINGROUP' ),
+       'url_path'                  => array( '0', 'HENS', 'PATH' ),
+       'pagesincategory_all'       => array( '0', 'oll', 'all' ),
+       'pagesincategory_pages'     => array( '0', 'folennow', 'pages' ),
 );
 
 $messages = array(
@@ -762,6 +860,9 @@ Nyns yw disqwedhys agas trigva ebost pan wrella devnydhyoryon erel kestava dhywg
 'right-upload' => 'Ughcarga restrennow',
 'right-delete' => 'Dilea folennow',
 
+# Special:Log/newusers
+'newuserlogpage' => 'Covnoten formya acontow devnydhyer',
+
 # User rights log
 'rightslog' => 'Covnoten wiryow an devnydhyer',
 
@@ -954,9 +1055,6 @@ Yma'n descrifans war y [$2 folen dhescrifans] disqwedhys a-woles.",
 # Special:ListUsers
 'listusers-submit' => 'Disqwedhes',
 
-# Special:Log/newusers
-'newuserlogpage' => 'Covnoten formya acontow devnydhyer',
-
 # Special:ListGroupRights
 'listgrouprights-members' => '(rol esely)',
 
index 0cefb03..929b697 100644 (file)
@@ -34,23 +34,59 @@ $messages = array(
 # User preference toggles
 'tog-underline' => 'Шилтемелердин алдын сызуу:',
 'tog-justify' => 'Тексти барактын жазысы боюнча түздөө',
-'tog-hideminor' => 'Соңку өзгөрүүлөрдө, майда өзгөрүүлөрдү жашыруу',
+'tog-hideminor' => 'Соңку өзгөрүүлөрдөгү арасындагы майда өзгөрүүлөрдү жашыр',
+'tog-hidepatrolled' => 'Акыркы өзгөрүүлөрдүн тизмесинен патрулдалган оңдоолорду жашыруу',
+'tog-newpageshidepatrolled' => 'Жаңы барактар тизмесинен патрулдалган барактарды жашыруу',
+'tog-extendwatchlist' => 'Бүт өзгөртүүлөрдү көрсөтүш үчүн көзөмөл тизмесин кеңейтүү, эң акыркыларды гана эмес эле',
 'tog-usenewrc' => 'Акыркы өзгөрүүлөрдөгү жана көзөмөл тизмедеги өзгөрүүлөрдү топтоо (JavaScript талап кылынат)',
-'tog-numberheadings' => 'Башсаптарды автоматтык түрдө номурлоо',
+'tog-numberheadings' => 'Башжазууларды автоматтуу түрдө номердөө',
 'tog-showtoolbar' => 'Оңдоо учурунда аспаптар тактасын көрсөтүү (JavaScript талап кылынат)',
 'tog-editondblclick' => 'Эки басып баракты оңдоо (JavaScript талап кылынат)',
 'tog-editsection' => 'Ар бир секция үчүн «оңдоо» шилтемесин көрсөтүү',
-'tog-rememberpassword' => 'Бул браузерден менин эсеп жазуумду (эң көп $1 {{PLURAL:$1|күн}}) эске сактоо',
-'tog-oldsig' => 'Кезектеги кол:',
+'tog-editsectiononrightclick' => 'Чычкандын оң кнопкасы менен секциянын башжазуусун басканда редакторлоо секциясын ачуу (JavaScript талап кылынат)',
+'tog-showtoc' => 'Мазмунду көрсөтүү (3 мазмундан артык барактар үчүн)',
+'tog-rememberpassword' => 'Бул браузерде ($1 {{PLURAL:$1|күн}}) менин эсеп жазуумду эске сактоо',
+'tog-watchcreations' => 'Көзөмөл тизмесине мен жараткан барактарды жана мен жүктөгөн файлдарды кошуу',
+'tog-watchdefault' => 'Мен өзгөрткөн барактарды жана файлдарды көзөмөл тизмеме кошуу',
+'tog-watchmoves' => 'Мен атын өзгөрткөн барактарды жана файлдарды көзөмөл тизмеме кошуу',
+'tog-watchdeletion' => 'Мен өчүргөн барактарды жана файлдарды көзөмөл тизмеме кошуу',
+'tog-minordefault' => 'Жарыяланбасча бүт оңдоолорду майда деп белги салуу',
+'tog-previewontop' => 'Оңдоо терезесинин алдына алдын ала көрсөтүүнү орундаштыруу',
+'tog-previewonfirst' => 'Оңдоого өткөндө алдын алдын ала көрсөтүү',
+'tog-nocache' => 'Барактарды кэштөөнү браузерден өчүрүү',
+'tog-enotifwatchlistpages' => 'Көзөмөл тизмемдеги барак же файл өзгөртүлгөндө мага эл. почта аркылуу билдирүү',
+'tog-enotifusertalkpages' => 'Талкуулоо барагым өзгөртүлгөндө мага эл. почта аркылуу билдирүү',
+'tog-enotifminoredits' => 'Барак же файлдардын майда өзгөртүлөрүн да мага эл. почта аркылуу билдирүү',
+'tog-enotifrevealaddr' => 'Кабардандыруу билдирүүлөрүндө менин эл. почта дарегимди көрсөтүү',
+'tog-shownumberswatching' => 'Көзөмөлдөп жаткан катышуучулардын санын көрсөтүү',
+'tog-oldsig' => 'Кезектеги кол тамга:',
+'tog-fancysig' => 'Кол тамганын өз уики-белгиси (автоматтык шилтемесиз)',
+'tog-externaleditor' => 'Тышкы редакторду жарыяланбасча колдонуу (адистер үчүн гана, компьютериңизде өзгөчө ырастоолор керек. [//www.mediawiki.org/wiki/Manual:External_editors кошумча маалымат.])',
+'tog-externaldiff' => 'Салыштыруу үчүн тышкы программаны жарыяланбасча колдонуу (адистер үчүн гана, компьютериңизде өзгөчө ырастоолор керек. [//www.mediawiki.org/wiki/Manual:External_editors кошумча маалымат.])',
+'tog-showjumplinks' => '«өтүү» деген жардамчы шилтемелерди күйгүзүү',
+'tog-uselivepreview' => 'Тез алдын ала көрсөтүүнү колдонуу (JavaScript талап кылынат) (эксперименталдык)',
+'tog-forceeditsummary' => 'Оңдоо баяндоосунун талаасы бош болгон кезинде мага алдын ала эскертүү',
+'tog-watchlisthideown' => 'Көзөмөлдөө тизмесинен менин оңдоолорумду жашыруу',
+'tog-watchlisthidebots' => 'Көзөмөлдөө тизмесинен боттун оңдоолорун жашыруу',
+'tog-watchlisthideminor' => 'Көзөмөлдөө тизмесинен майда оңдоолорду жашыруу',
+'tog-watchlisthideliu' => 'Көзөмөлдөө тизмесинен системага кирген катышуучулардын оңдоолорун жашыруу',
+'tog-watchlisthideanons' => 'Көзөмөлдөө тизмесинен анонимдүү катышуучулардын оңдоолорун жашыруу',
+'tog-watchlisthidepatrolled' => 'Көзөмөлдөө тизмесинен патрулдалган оңдоолорду жашыруу',
+'tog-ccmeonemails' => 'Мен башка катышуучуларга жөнөтүп жаткан каттардын көчүрмөлөрүн мага жөнөтүү',
+'tog-diffonly' => 'Эки версияны салыштыруунун астынан барактын мазмунун көрсөтпөө',
 'tog-showhiddencats' => 'Жашырылган категорияларды көрсөтүү',
+'tog-norollbackdiff' => 'Кетенчиктөөнү аткаргандан кийин версиялардын айырмасын көрсөтпөө',
 
 'underline-always' => 'Дайыма',
 'underline-never' => 'Эч качан',
+'underline-default' => 'Браузердин ырастоолорун колдонуу',
 
 # Font style option in Special:Preferences
-'editfont-style' => 'Ð\9eңдоо Ñ\82алааÑ\81Ñ\8bнÑ\8bн Ð°Ñ\80ибинин Ñ\81Ñ\82или:',
-'editfont-default' => 'Браузердин шрифти',
+'editfont-style' => 'Ð\9eңдолÑ\83п Ð¶Ð°Ñ\82кан Ð¶ÐµÑ\80дин Ñ\82амга Ð¶Ð°Ñ\81алгаÑ\81Ñ\8b:',
+'editfont-default' => 'Браузер ырастоолорунун шрифти',
 'editfont-monospace' => 'Моножазы шрифт',
+'editfont-sansserif' => 'Кесүүсү жок шрифт',
+'editfont-serif' => 'Кесүүсү бар шрифт',
 
 # Dates
 'sunday' => 'Жекшемби',
@@ -127,10 +163,10 @@ $messages = array(
 'article' => 'Макала',
 'newwindow' => '(жаңы терезеде ачылат)',
 'cancel' => 'Жокко чыгаруу',
-'moredotdotdot' => 'УландÑ\8bÑ\81Ñ\8b...',
+'moredotdotdot' => 'Ð\9aөбүÑ\80өөк...',
 'mypage' => 'Барак',
 'mytalk' => 'Талкуулоо',
-'anontalk' => 'Бул IP дарек үчүн талкуулоо',
+'anontalk' => 'Бул IP-дарек үчүн талкуулоо',
 'navigation' => 'Навигация',
 'and' => '&#32;жана',
 
@@ -140,7 +176,7 @@ $messages = array(
 'qbedit' => 'Оңдоо',
 'qbpageoptions' => 'Бул барак',
 'qbmyoptions' => 'Барактарым',
-'qbspecialpages' => 'Ð\90Ñ\82айÑ\8bн Ð±Ð°Ñ\80акÑ\82аÑ\80',
+'qbspecialpages' => 'Ð\9aÑ\8bзмаÑ\82 Ð±Ð°Ñ\80акÑ\82аÑ\80Ñ\8b',
 'faq' => 'КБС',
 'faqpage' => 'Project:КБС',
 
@@ -151,13 +187,14 @@ $messages = array(
 'vector-action-protect' => 'Коргоо',
 'vector-action-undelete' => 'Калыбына келтирүү',
 'vector-action-unprotect' => 'Коргоону өзгөртүү',
-'vector-view-create' => 'Жаратуу',
+'vector-simplesearch-preference' => 'Жөнөкөйлөнгөн издөө сабын күйгүзүү («Вектор» темасы гана)',
+'vector-view-create' => 'Башта',
 'vector-view-edit' => 'Оңдоо',
 'vector-view-history' => 'Тарыхын кароо',
 'vector-view-view' => 'Окуу',
 'vector-view-viewsource' => 'Кайнарын кароо',
 'actions' => 'Аракеттер',
-'namespaces' => 'Аталыш топтому',
+'namespaces' => 'Аталыштар мейкиндиги',
 'variants' => 'Варианттар',
 
 'navigation-heading' => 'Навигация менюсу',
@@ -170,25 +207,29 @@ $messages = array(
 'go' => 'Өтүү',
 'searcharticle' => 'Алга',
 'history' => 'Барактын тарыхы',
-'history_short' => 'Тарых',
+'history_short' => 'Тарыхы',
+'updatedmarker' => 'менин акыркы келүүмдөн кийин жаңыртылган',
 'printableversion' => 'Басма үлгүсү',
 'permalink' => 'Туруктуу шилтеме',
 'print' => 'Басып чыгаруу',
 'view' => 'Кароо',
 'edit' => 'Оңдоо',
-'create' => 'Ð\96аÑ\80аÑ\82Ñ\83Ñ\83',
+'create' => 'Ð\91аÑ\88Ñ\82а',
 'editthispage' => 'Бул баракты оңдоо',
 'create-this-page' => 'Бул баракты түзүү',
 'delete' => 'Өчүрүү',
 'deletethispage' => 'Бул баракты өчүрүү',
+'undelete_short' => '$1 {{PLURAL:$1|оңдоону}} калыбына келтирүү',
+'viewdeleted_short' => '{{PLURAL:$1|өчүрүлгөн оңдоону}} көрүү',
 'protect' => 'Коргоо',
 'protect_change' => 'өзгөртүү',
 'protectthispage' => 'Бул баракты коргоо',
 'unprotect' => 'Коргоону өзгөртүү',
+'unprotectthispage' => 'Бул барактын коргоосун өзгөртүү',
 'newpage' => 'Жаңы барак',
 'talkpage' => 'Бул баракты талкууга алуу',
 'talkpagelinktext' => 'талкуулоо',
-'specialpage' => 'Ð\90Ñ\82айÑ\8bн Ð±Ð°Ñ\80ак',
+'specialpage' => 'Ð\9aÑ\8bзмаÑ\82 Ð±Ð°Ñ\80агÑ\8b',
 'personaltools' => 'Жеке аспаптар',
 'postcomment' => 'Жаңы бөлүм',
 'articlepage' => 'Макаланы кароо',
@@ -199,10 +240,10 @@ $messages = array(
 'projectpage' => 'Долбоор барагын кароо',
 'imagepage' => 'Файлдын барагын кароо',
 'mediawikipage' => 'Кабардын  барагын кароо',
-'templatepage' => 'Ð\9aалÑ\8bпÑ\82Ñ\8bн барагын кароо',
-'viewhelppage' => 'Ð\96аÑ\80дам Ð±Ð°Ñ\80агÑ\8b',
+'templatepage' => 'ШаблондÑ\83н барагын кароо',
+'viewhelppage' => 'Ð\96аÑ\80дам Ð°Ð»Ñ\83Ñ\83',
 'categorypage' => 'Категория барагын көрсөтүү',
-'viewtalkpage' => 'Талкууну кароо',
+'viewtalkpage' => 'ТалкÑ\83Ñ\83лоонÑ\83 ÐºÐ°Ñ\80оо',
 'otherlanguages' => 'Башка тилдерде',
 'redirectedfrom' => '($1 барагындан багытталды)',
 'redirectpagesub' => 'Айдама барак',
@@ -210,71 +251,102 @@ $messages = array(
 'viewcount' => 'Бул барак {{PLURAL:$1|$1|$1}} жолу ачылды.',
 'protectedpage' => 'Корголгон барак',
 'jumpto' => 'Өтүү:',
-'jumptonavigation' => 'багÑ\8bÑ\82Ñ\82оо',
+'jumptonavigation' => 'навигаÑ\86иÑ\8f',
 'jumptosearch' => 'издөө',
+'view-pool-error' => 'Кечириңиз, азыркы учурда серверлер ашыра жүктөлгөн болуп турат.
+Өтө көп колдонуучулар бул баракты көрүүгө аракет кылып жатышат.
+Бул баракка кайта кирээр алдында кичине бир убакыт күтө туруңуз.
+
+$1',
+'pool-timeout' => 'Бөгөттөөнү күтүү убакытысы аяктады',
+'pool-queuefull' => 'Суроо жыйнагыч толук',
 '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) and the disambiguation template definition (see disambiguations).
 'aboutsite' => '{{SITENAME}} жөнүндө',
-'aboutpage' => 'Project:тууралуу',
+'aboutpage' => 'Project:Долбоор жөнүндө',
+'copyright' => '$1 лицензиясына ылайк жеткиликтүү мазмун.',
 'copyrightpage' => '{{ns:project}}:Автордук укуктар',
 'currentevents' => 'Учурдагы окуялар',
 'currentevents-url' => 'Project:Учурдагы окуялар',
 'disclaimers' => 'Жоопкерчиликтен баш тартуу',
-'disclaimerpage' => 'Project:Ð\96алпÑ\8b Ð¶Ð¾Ð¾Ð¿ÐºÐµÑ\80Ñ\87иликÑ\82ен Ð±Ð°Ñ\88 Ñ\82аÑ\80Ñ\82Ñ\83Ñ\83',
-'edithelp' => 'Оңдоого жардам',
-'edithelppage' => 'Help:Ð\9eңдоо',
-'helppage' => 'Help:Мазмун',
+'disclaimerpage' => 'Project:Жоопкерчиликтен баш тартуу',
+'edithelp' => 'Өзгөртүү боюнча жардам',
+'edithelppage' => 'Help:РедакÑ\82оÑ\80лоо',
+'helppage' => 'Help:Мазмуну',
 'mainpage' => 'Башбарак',
 'mainpage-description' => 'Башбарак',
 'policy-url' => 'Project:Эрежелер',
 'portal' => 'Жамаат порталы',
 'portal-url' => 'Project:Жамаат порталы',
-'privacy' => 'Ð\9cаалÑ\8bмаÑ\82Ñ\82Ñ\8b ÐºÑ\83пÑ\83Ñ\8f Ñ\81акÑ\82оо саясаты',
-'privacypage' => 'Project:Ð\9cаалÑ\8bмаÑ\82Ñ\82Ñ\8b ÐºÑ\83пÑ\83Ñ\8f Ñ\81акÑ\82оо саясаты',
+'privacy' => 'Ð\96аÑ\88Ñ\8bÑ\80Ñ\8bндÑ\83Ñ\83лÑ\83к саясаты',
+'privacypage' => 'Project:Ð\96аÑ\88Ñ\8bÑ\80Ñ\8bндÑ\83Ñ\83лÑ\83к саясаты',
 
 'badaccess' => 'Кирүү катасы',
+'badaccess-group0' => 'Сиз сураган аракетти аткарала албайсыз.',
+
+'versionrequired' => "MediaWiki'нин $1 версиясы керек",
 
 'ok' => 'OK',
 'retrievedfrom' => '"$1" булагынан алынды',
 'youhavenewmessages' => 'Сизге $1 ($2) бар.',
-'newmessageslink' => 'жаңы билдирмелер',
+'newmessageslink' => 'жаңы билдирүүлөр',
 'newmessagesdifflink' => 'соңку өзгөрүү',
+'youhavenewmessagesmanyusers' => 'Көп колдонуучулардан сиз $1 алдыңыз ($2).',
+'newmessageslinkplural' => '{{PLURAL:$1|жаңы билдирүү}}',
 'newmessagesdifflinkplural' => 'соңку {{PLURAL:$1|өзгөртүү|өзгөртүүлөр}}',
 'youhavenewmessagesmulti' => 'Сизге $1 жаңы кат бар',
 'editsection' => 'оңдоо',
 'editold' => 'оңдоо',
 'viewsourceold' => 'баштапкы кодун көрүү',
 'editlink' => 'оңдоо',
-'viewsourcelink' => 'Ð\91айкоо',
+'viewsourcelink' => 'Ð\9aайнаÑ\80дÑ\8b ÐºÐ°Ñ\80а',
 'editsectionhint' => '$1 бөлүмүн оңдоо',
-'toc' => 'Мазмун',
+'toc' => 'Мазмуну',
 'showtoc' => 'көрсөтүү',
-'hidetoc' => 'Ð\96ашыруу',
+'hidetoc' => 'Ðашыруу',
 'collapsible-collapse' => 'Түрүү',
 'collapsible-expand' => 'жаюу',
+'thisisdeleted' => '$1 көрүү же калыбына келтирүү?',
 'viewdeleted' => 'Көрүү $1?',
+'restorelink' => '{{PLURAL:$1|$1 өчүрүлгөн оңдоо}}',
+'feed-unavailable' => 'Синдикация лентасы жеткиликтүү эмес',
 'site-rss-feed' => '$1 RSS тилкеси',
 'site-atom-feed' => '$1 Atom агымы',
-'page-atom-feed' => '"$1" Atom агымы',
+'page-rss-feed' => '«$1» — RSS-лента',
+'page-atom-feed' => '«$1» — Atom-лента',
 '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' => 'Ð\9aолдонÑ\83Ñ\83Ñ\87Ñ\83нÑ\83н Ð±Ð°Ñ\80агÑ\8b',
+'nstab-user' => 'Ð\9aаÑ\82Ñ\8bÑ\88Ñ\83Ñ\83Ñ\87Ñ\83',
 'nstab-media' => 'Мультимедиа',
-'nstab-special' => 'Ð\90Ñ\82айÑ\8bн Ð±Ð°Ñ\80ак',
+'nstab-special' => 'Ð\9aÑ\8bзмаÑ\82 Ð±Ð°Ñ\80агÑ\8b',
 'nstab-project' => 'Долбоордун барагы',
 'nstab-image' => 'Файл',
-'nstab-mediawiki' => 'Билдирме',
-'nstab-template' => 'Шаблон',
+'nstab-mediawiki' => 'Билдирүү',
+'nstab-template' => 'Ð\9aалÑ\8bп',
 'nstab-help' => 'Жардам',
 'nstab-category' => 'Категория',
 
+# Main script and global functions
+'nosuchaction' => 'Мындай аракет жок',
+'nosuchspecialpage' => 'Мындай кызмат барагы жок',
+
 # General errors
 'error' => 'Ката',
 'databaseerror' => 'Маалымат базасынын катасы',
+'dberrortext' => 'Маалымат базасынын суроо синтаксисинде ката табылды.
+Бул программалык камсыздоодо ката бар болгонун билдирет.
+Акыркы маалымат базасынын суроосу:
+<blockquote><code>$1</code></blockquote>
+«<code>$2</code>» функциясынан пайда болду.
+Маалымат базасы «<samp>$3: $4</samp>» катасын кайтарды.',
+'laggedslavemode' => "'''Эскертүү:''' баракта акыркы жаңыртуулар жок болуп калышы мүмкүн.",
 'readonly' => 'Маалымат базасы камаланган',
+'enterlockreason' => 'Бөгөттөө себебин жана анын мөөнөтүн көрсөтүңүз',
 'missing-article' => 'Табылууга тийиш «$1» $2 деп аталган баракта текст маалыматтар базасында табылган жок.
 
 Бул сыяктуу абал өчүрүлгөн барактын өзгөрүүлөрдүн тарыхына эски шилтеме менен өткөндө учурайт.
@@ -287,6 +359,7 @@ $messages = array(
 'fileappenderrorread' => 'Аягына кошуу үчүн «$1» файлы ачылбады.',
 'fileappenderror' => '"$1" файлы "$2" файлынын аягына кошулбады.',
 'filecopyerror' => '"$1" файлы "$2" файлына көчүрүлбөдү.',
+'filerenameerror' => '«$1» файлын бул «$2» атка өзгөртүүгө мүмкүн эмес.',
 'filedeleteerror' => '"$1" файлын өчүрүүгө болбоду.',
 'directorycreateerror' => '"$1" каталогун түзүүгө болбоду.',
 'filenotfound' => '"$1" файлын табууга мүмкүн эмес.',
@@ -298,56 +371,93 @@ $messages = array(
 'badtitle' => 'Ыксыз аталыш',
 'badtitletext' => 'Талап кылынган барак аталышы туура эмес, бош, же тилдер-аралык же уики-аралык аталышы туура эмес шилтемеленген.
 Балким аталышта колдонулбай турган бир же андан көп белги камтылган.',
+'wrong_wfQuery_params' => 'wfQuery() функциясы үчүн жарабай турган параметрлер<br />
+Функция: $1<br />
+Суроо: $2',
 'viewsource' => 'Кароо',
 'viewsource-title' => '$1 барагынын баштапкы кодун көрүү',
-'ns-specialprotected' => 'Атайын барактарды оңдоого мүмкүн эмес.',
+'actionthrottled' => 'Аралык боюнча чектөө',
+'viewsourcetext' => 'Сиз бул барактын баштапкы кодун көрүп жана көчүрүп алсаңыз болот:',
+'sqlhidden' => '(SQL суроо жашырылган)',
+'ns-specialprotected' => 'Кызмат барактарын оңдоого мүмкүн эмес.',
+'exception-nologin' => 'Сиз система кирген жоксуз',
 
 # Virus scanner
+'virus-badscanner' => "Ырастоо катасы. Белгисиз вирус сканери: ''$1''",
 'virus-scanfailed' => 'скандоо катасы (код $1)',
 'virus-unknownscanner' => 'белгисиз антивирус:',
 
 # Login and logout pages
 'welcomeuser' => 'Кош келиңиз, $1!',
-'yourname' => 'Колдонуучу аты',
-'yourpassword' => 'Сырсөз',
-'yourpasswordagain' => 'Сырсөздү кайра жазыңыз',
-'remembermypassword' => 'Бул браузерде каттоо маалыматтарымды эске тут (эң көп $1 {{PLURAL:$1|күн|күн}})',
+'welcomecreation-msg' => 'Сиздин эсеп жазууңуз жаратылды.
+{{SITENAME}} сайтынын [[Special:Preferences|ырастоолорун]] өзгөртүүнү унутпаңыз.',
+'yourname' => 'Эсеп жазуусунун аты:',
+'yourpassword' => 'Сырсөз:',
+'yourpasswordagain' => 'Сырсөздү кайта терүү:',
+'remembermypassword' => 'Бул браузерде менин эсеп жазуумду ($1 {{PLURAL:$1|күнгө}} чейин сактоо)',
+'securelogin-stick-https' => 'Киргенден кийин HTTPS аркылуу туташтырууну улантуу',
 'yourdomainname' => 'Сиздин домен',
+'password-change-forbidden' => 'Сиз бул уикиден сырсөзүңүздү өзгөртө албайсыз.',
 'login' => 'Кирүү',
 'nav-login-createaccount' => 'Кирүү / Каттоо',
-'loginprompt' => '{{SITENAME}} сайтына кирүү үчүн «cookies» колдонууга уруксатыңыз керек .',
+'loginprompt' => '{{SITENAME}} сайтына кириш үчүн сиз «кукилерге» уруксат беришиңиз керек.',
 'userlogin' => 'Кирүү / Каттоо',
 'userloginnocreate' => 'Кирүү',
-'logout' => 'ЧÑ\8bгÑ\83Ñ\83',
-'userlogout' => 'ЧÑ\8bгÑ\83Ñ\83',
+'logout' => 'СеанÑ\81Ñ\82Ñ\8b Ð°Ñ\8fкÑ\82оо',
+'userlogout' => 'СеанÑ\81Ñ\82Ñ\8b Ð°Ñ\8fкÑ\82оо',
 'notloggedin' => 'Сиз системага кире элексиз',
-'nologin' => 'Ð\9aаÑ\82Ñ\82ай Ñ\8dлекÑ\81изби? $1.',
-'nologinlink' => 'Ð\9aаÑ\82Ñ\82оонÑ\83 Ð±Ð°Ñ\88Ñ\82оо',
+'nologin' => 'ЭÑ\81еп Ð¶Ð°Ð·Ñ\83Ñ\83Ò£Ñ\83з Ð¶Ð¾ÐºÐ¿Ñ\83? $1.',
+'nologinlink' => 'ЭÑ\81еп Ð¶Ð°Ð·Ñ\83Ñ\83Ñ\81Ñ\83н Ð¶Ð°Ñ\80аÑ\82Ñ\83Ñ\83',
 'createaccount' => 'Эсеп жазуусун жаратуу',
-'gotaccount' => 'Катталгансызбы? $1.',
+'gotaccount' => "Катталгансызбы? '''$1'''.",
 'gotaccountlink' => 'Кирүү',
 'userlogin-resetlink' => 'Кирүүчү маалыматарыңызды унутуп калдыңызбы?',
 'createaccountmail' => 'Электрондук дарек боюнча',
 'createaccountreason' => 'Себеби:',
 'badretype' => 'Сиз киргизген сырсөздөр дал келишпейт',
-'userexists' => 'Сиз тандаган колдонуучунун аты бош эмес.',
-'loginerror' => 'Колдонуучуну таанууда ката кетти',
-'createaccounterror' => '$1 эсебин түзүү мүмкүн эмес',
+'userexists' => 'Сиз тандаган катышуучунун аты бош эмес.
+Башка атты тандаңыз.',
+'loginerror' => 'Кирүү катасы',
+'createaccounterror' => '$1 эсеп жазуусун жаратууга мүмкүн эмес',
+'nocookieslogin' => '{{SITENAME}} сайты катышуучуларды киргизүү үчүн кукилерди колдонот.
+Алар сизде өчүрүлүп турат.
+Аларды күйгүзүп анан кайта аракет кылып көрүңүз.',
+'noname' => 'Сиз анык катышуучунун атын көрсөткөн жоксуз.',
 'loginsuccesstitle' => 'Сиз ийгиликтүү кирдиңиз',
+'loginsuccess' => "'''Сиз эми {{SITENAME}} сайтына \"\$1\" болуп кирдиңиз.'''",
+'nouserspecified' => 'Сиз катышуучу атын көрсөтүшүңүз керек.',
+'login-userblocked' => 'Бул катышуучу бөгөттөлгөн. Системага кирүүгө уруксат жок.',
 'wrongpassword' => 'Ката сырсөз киргизилди. Кайтадан аракет кылып көрүңүз.',
 'wrongpasswordempty' => 'Сырсөз киргизилген жок. Кайтадан аракет кылып көрүңүз.',
-'mailmypassword' => 'Жаңы сырсөздү e-mail аркылуу жиберүү',
+'passwordtooshort' => 'Сырсөз {{PLURAL:$1|1 символдон}} кем эмес болуш керек.',
+'password-name-match' => 'Сиздин сырсөзүңүз катышуучу атыңыздан айырмаланыш керек.',
+'password-login-forbidden' => 'Бул катышуучунун атын жана сырсөзүн колдонууга тыюу салынган.',
+'mailmypassword' => 'Жаңы сырсөздү эл. почта аркылуу жөнөтүү',
+'passwordremindertitle' => '{{SITENAME}} үчүн жаңы убактылуу сырсөз',
+'noemailcreate' => 'Эл. почтанын анык дарегин көрсөтүшүңүз керек',
+'mailerror' => 'Почтаны жөнөтүү кезиндеги ката: $1',
+'emailauthenticated' => 'Сиздин почта дарегиңиз аныкталды $2/$3.',
 'emailconfirmlink' => 'Электрондук дарегиңизди ырастаңыз',
+'emaildisabled' => 'Бул сайт эл. почтанын билдирүүлөрүн жөнөтө албайт.',
 'accountcreated' => 'Эсеп жазуусу жаратылды',
+'createaccount-title' => '{{SITENAME}} үчүн эсеп жазуусун жаратуу',
+'login-abort-generic' => 'Сиздин кирүүңүз ийгиликтүү эмес болду - Үзүлдү',
 'loginlanguagelabel' => 'Тил: $1',
 
+# E-mail sending
+'php-mail-error-unknown' => "PHP'нин mail() функциясындагы белгисиз ката.",
+
 # Change password dialog
 'resetpass' => 'Сырсөздү өзгөртүү',
 'resetpass_header' => 'Эсеп жазуусунун сырсөзүн өзгөртүү',
 'oldpassword' => 'Эски сырсөз:',
 'newpassword' => 'Жаңы сырсөз:',
 'retypenew' => 'Жаңы сырсөздү кайта киргизиңиз:',
+'resetpass_submit' => 'Сырсөз коюу анан кирүү',
+'resetpass_success' => 'Сиздин сырсөзүңүз ийгиликтүү өзгөртүлдү!
+Системага кирүү аткарылып жатат...',
 'resetpass_forbidden' => 'Сырсөздү өзгөртүүгө мүмкүн эмес',
+'resetpass-no-info' => 'Бул баракка түз кайрылыш үчүн, сиз системага киришиңиз керек.',
 'resetpass-submit-loggedin' => 'Сырсөздү өзгөртүү',
 'resetpass-submit-cancel' => 'Жокко чыгаруу',
 'resetpass-temp-password' => 'Убактылуу сырсөз:',
@@ -355,17 +465,26 @@ $messages = array(
 # Special:PasswordReset
 'passwordreset' => 'Сырсөздү түшүрүү',
 'passwordreset-legend' => 'Сырсөздү түшүрүү',
-'passwordreset-username' => 'Колдонуучу аты:',
+'passwordreset-disabled' => 'Бул уикиде сырсөздү түшүрүү мүмкүнчүлүгү өчүрүлгөн.',
+'passwordreset-username' => 'Катышуучу аты:',
 'passwordreset-domain' => 'Домен:',
+'passwordreset-capture' => 'Чыккан катты көрүү?',
 'passwordreset-email' => 'E-mail дарек:',
-'passwordreset-emailelement' => 'Колдонуучу аты: $1
+'passwordreset-emailtitle' => '{{SITENAME}} сайтындагы эсеп жазуусу жөнүндөгү маалымат',
+'passwordreset-emailelement' => 'Катышуучу аты: $1
 Убактылуу сырсөз: $2',
+'passwordreset-emailsent' => 'Эл. почта аркылуу эске салуу жөнөтүлдү.',
+'passwordreset-emailsent-capture' => 'Төмөн жакта жөнөтүлгөн эске салуу кат келтирилди.',
+'passwordreset-emailerror-capture' => 'Жаратылган эске салуу каты астында көрсөтүлүп турат, бирок аны катышуучуга жөнөтүү оңунан чыккан жок: $1',
 
 # Special:ChangeEmail
 'changeemail' => 'E-mail даректи өзгөртүү',
+'changeemail-header' => 'Эл. почтанын дарегин өзгөртүү',
+'changeemail-no-info' => 'Бул баракка түз кайрылыш үчүн, сиз системага киришиңиз керек.',
 'changeemail-oldemail' => 'Кезектеги e-mail дарек:',
 'changeemail-newemail' => 'Жаңы e-mail дарек:',
 'changeemail-none' => '(жок)',
+'changeemail-password' => '«{{SITENAME}}» долбоору үчүн сиздин сырсөзүңүз:',
 'changeemail-submit' => "E-mail'ди өзгөртүү",
 'changeemail-cancel' => 'Жокко чыгаруу',
 
@@ -373,7 +492,7 @@ $messages = array(
 'bold_sample' => 'Кара текст',
 'bold_tip' => 'Кара текст',
 'italic_sample' => 'Курсив текст',
-'italic_tip' => 'Ð\9aÑ\83Ñ\80Ñ\81ив текст',
+'italic_tip' => 'жанÑ\82Ñ\8bк текст',
 'link_sample' => 'Шилтеме аты',
 'link_tip' => 'Ички шилтеме',
 'extlink_sample' => 'http://www.example.com шилтеме аталышы',
@@ -399,11 +518,13 @@ $messages = array(
 'showdiff' => 'Өзгөртүүлөрдү көрсөтүү',
 'anoneditwarning' => "'''Эскертүү:''' Сиз каттоодон өткөн жоксуз.
 IP дарегиңиз бул барактын оңдоо тарыхына жазылат.",
+'missingcommenttext' => 'Төмөн жакка комментарийиңизди киргизиңиз.',
 'blockedtitle' => 'Катышуучу тосмолонгон',
 'blockedtext' => 'Сиздин колдонуучу атыңыз же IP дарегиңиз тосмолонгон',
 'blockednoreason' => 'себеби көрсөтүлгөн жок',
+'whitelistedittext' => 'Баркаты оңдоо үчүн сизге $1 керек.',
 'nosuchsectiontitle' => 'Бөлүктүү табууга мүмкүн эмес',
-'loginreqtitle' => 'Ð\9aолдонÑ\83Ñ\83Ñ\87Ñ\83нÑ\83н Ð°Ñ\82Ñ\8b талап кылынат',
+'loginreqtitle' => 'Ð\90вÑ\82оÑ\80изаÑ\86иÑ\8f талап кылынат',
 'loginreqlink' => 'Кирүү',
 'accmailtitle' => 'Сырсөз жөнөтүлдү.',
 'accmailtext' => ' [[User talk:$1|$1]] үчүн сырсөз $2 ге жөнөтүлдү.',
@@ -417,7 +538,7 @@ IP дарегиңиз бул барактын оңдоо тарыхына жаз
 же '''[{{fullurl:{{FULLPAGENAME}}|action=edit}} ошондой аталыш менен барак ача аласыз]'''</span>.",
 'noarticletext-nopermission' => 'Азыр бул баракта текст жок.
 Сиз [[Special:Search/{{PAGENAME}}|бул ат жөнүндө эскертүүлөрдү]] башка барактардан таба аласыз, же <span class="plainlinks">[{{fullurl:{{#Special:Log}}|page={{FULLPAGENAMEE}}}} тийиштүү журналдардын жазууларын таба аласыз]</span>. Бул баракты жаратууга укуктарыңыз жок.',
-'userpage-userdoesnotexist' => '"$1" Ð\9cÑ\8bндай ÐºÐ¾Ð»Ð´Ð¾Ð½уучу катталган эмес. Ушул баракты түзүүнү же оңдогонду каалганыңыз анык болсун',
+'userpage-userdoesnotexist' => '"$1" Ð\9cÑ\8bндай ÐºÐ°Ñ\82Ñ\8bÑ\88уучу катталган эмес. Ушул баракты түзүүнү же оңдогонду каалганыңыз анык болсун',
 'updated' => '(Жаңыртылды)',
 'note' => "'''Эскертүү:'''",
 'previewnote' => "'''Бул алдын ала көрүнүшү гана болгонун эсиңизге алыңыз.'''
@@ -428,13 +549,17 @@ IP дарегиңиз бул барактын оңдоо тарыхына жаз
 'creating' => '$1 түзүлүүдө',
 'editingsection' => '$1 (бөлүмү) оңдолууда',
 'editingcomment' => ' $1 оңдолууда (жаңы бөлүм)',
+'editconflict' => 'Оңдоо конфликти: $1',
 'yourtext' => 'Текстиңиз',
+'storedversion' => 'Сакталган версия',
 'yourdiff' => 'Айырмалар',
-'templatesused' => 'Бул баракта колдонулган {{PLURAL:$1|калып |калыптар}}:',
+'templatesused' => 'Бул баракта колдонулган {{PLURAL:$1|калып}}:',
+'templatesusedpreview' => 'Бул алдын ала көрсөтүүдө колдонулган {{PLURAL:$1|шаблон|шаблондор}}:',
 'template-protected' => '(корголгон)',
 'template-semiprotected' => '(жарым-жартылай корголгон)',
 'hiddencategories' => 'Бул барак {{PLURAL:$1|1 жашыруун категориянын|$1 жашыруун категориялардын}} мүчөсү:',
-'nocreatetitle' => 'Барактарды жаратуу чектелген',
+'nocreate-loggedin' => 'Жаңы барактарды жаратууга сизде уруксат жок.',
+'permissionserrors' => 'Кирүү укуктарынын каталары',
 'permissionserrorstext-withaction' => 'Сизге $2, төмөнкү {{PLURAL:$1|себеп|себеп}} менен уруксат жок:',
 'recreate-moveddeleted-warn' => "'''Эскертүү: Сиз мурун өчүрүлгөн баракты кайра баштап жатасыз.'''
 
@@ -442,8 +567,10 @@ IP дарегиңиз бул барактын оңдоо тарыхына жаз
 Ыңгайлуулук үчүн төмөндө өчүрүүлөрдүн жана өзгөртүүлөрдүн тизмеси берилген:",
 'moveddeleted-notice' => 'Бул барак өчүрүлгөн.
 Маалымат үчүн төмөндө өчүрүүлөрдүн жана өзгөртүүлөрдүн тизмеси берилген.',
+'log-fulllog' => 'Журналды бүтүн бойдон көрүү',
 'edit-conflict' => 'Өзгөртүүлөрдүн конфликти',
 'edit-already-exists' => 'Жаңы барак түзүү мүмкүн эмес. Мындай барак бар',
+'defaultmessagetext' => 'Жарыяланбасча текст',
 
 # Content models
 'content-model-wikitext' => 'уики-текст',
@@ -460,6 +587,9 @@ IP дарегиңиз бул барактын оңдоо тарыхына жаз
 'post-expand-template-argument-category' => 'Калыптардын аттатылган жүйөлөрүн камтыган барактар',
 'parser-template-loop-warning' => 'Калыптарда айланма бар:[[$1]]',
 
+# Account creation failure
+'cantcreateaccounttitle' => 'Эсеп жазуусун жаратууга мүмкүн эмес',
+
 # History pages
 'viewpagelogs' => 'Бул барак үчүн журналды көрсөтүү',
 'nohistory' => 'Бул барактын өзгөртүүлөр тарыхы жок',
@@ -481,17 +611,25 @@ IP дарегиңиз бул барактын оңдоо тарыхына жаз
 'history-show-deleted' => 'Өчүрүлгөндөрдү гана',
 'histfirst' => 'Эң эски',
 'histlast' => 'Соңку',
+'historysize' => '({{PLURAL:$1|1 байт}})',
 'historyempty' => 'бош',
 
 # Revision feed
 'history-feed-title' => 'Өзгөртүүлөр тарыхы',
+'history-feed-description' => 'Уикидеги бул барактын өзгөртүү тарыхы',
 'history-feed-item-nocomment' => '$1, $2 карата',
 
 # Revision deletion
+'rev-deleted-user' => '(катышуучу аты өчүрүлдү)',
 'rev-delundel' => 'көрсөтүү/жашыруу',
 'rev-showdeleted' => 'көрсөтүү',
+'revdelete-nologid-title' => 'Журналдын туура эмес жазуусу',
 'revdelete-show-file-submit' => 'Ооба',
+'revdelete-hide-text' => 'Версия текстин жашыруу',
 'revdelete-hide-image' => 'Файл мазмунун жашыруу',
+'revdelete-hide-name' => 'Аракетин жана объектин жашыруу',
+'revdelete-hide-comment' => 'Оңдоо баяндамасын жашыруу',
+'revdelete-hide-user' => 'Редактордун катышуучу атын/IP-дарегин жашыруу',
 'revdelete-radio-same' => '(өзгөртпөө)',
 'revdelete-radio-set' => 'Ооба',
 'revdelete-radio-unset' => 'Жок',
@@ -501,6 +639,12 @@ IP дарегиңиз бул барактын оңдоо тарыхына жаз
 'revdel-restore-visible' => 'көрүнүүчү версиялары',
 'pagehist' => 'Барактын тарыхы',
 'deletedhist' => 'Өчүрүүлөрдүн тарыхы',
+'revdelete-reason-dropdown' => '*Өчүрүүнүн стандарттуу себептери
+** Автордук укуктарды бузуу
+** Орунсуз комментарий же өздүк маалымат
+** Орунсуз катышуучу аты
+** Потенциалдуу ушактаган маалымат',
+'revdelete-otherreason' => 'Башка/кошумча себеп:',
 'revdelete-reasonotherlist' => 'Башка себеп',
 'revdelete-edit-reasonlist' => 'Өчүрүү себептерин оңдоо',
 'revdelete-offender' => 'Барак версиясынын автору:',
@@ -508,7 +652,11 @@ IP дарегиңиз бул барактын оңдоо тарыхына жаз
 # History merging
 'mergehistory' => 'Барактардын тарыхын бириктирүү',
 'mergehistory-from' => 'Баштапкы барак:',
+'mergehistory-into' => 'Максаттык барак:',
 'mergehistory-submit' => 'Версияларды бириктирүү',
+'mergehistory-invalid-source' => 'Баштапкы барагынын башжазуусуу туура бар болуш керек.',
+'mergehistory-invalid-destination' => 'Максаттык барагынын башжазуусуу туура бар болуш керек.',
+'mergehistory-same-destination' => 'Баштапкы жана максаттык барактары окшош эмес болуш керек',
 'mergehistory-reason' => 'Себеп',
 
 # Merge log
@@ -517,10 +665,12 @@ IP дарегиңиз бул барактын оңдоо тарыхына жаз
 
 # Diffs
 'history-title' => '"$1" өзгөрүүлөр тарыхы',
+'difference-multipage' => '(Барактардын арасындагы айырма)',
 'lineno' => '$1 -сап:',
 'compareselectedversions' => 'Тандалган версияларды салыштыруу',
+'showhideselectedversions' => 'Тандалган версияларды көрсөтүү/жашыруу',
 'editundo' => 'жокко чыгаруу',
-'diff-multi' => '({{PLURAL:$2|колдонÑ\83Ñ\83Ñ\87Ñ\83|$2 ÐºÐ¾Ð»Ð´Ð¾Ð½Ñ\83Ñ\83Ñ\87Ñ\83}} Ñ\82аÑ\80абÑ\8bнан Ð¶Ð°Ñ\81алган {{PLURAL:$1|аÑ\80алÑ\8bк Ð²ÐµÑ\80Ñ\81иÑ\8f|$1 аралык версия}} көрсөтүлгөн жок)',
+'diff-multi' => '({{PLURAL:$2|каÑ\82Ñ\8bÑ\88Ñ\83Ñ\83Ñ\87Ñ\83}} Ñ\82аÑ\80абÑ\8bнан Ð¶Ð°Ñ\81алган {{PLURAL:$1|аралык версия}} көрсөтүлгөн жок)',
 
 # Search results
 'searchresults' => 'Издөө жыйынтыктары',
@@ -544,22 +694,29 @@ IP дарегиңиз бул барактын оңдоо тарыхына жаз
 'searchprofile-project-tooltip' => '$1 -де издөө',
 'searchprofile-images-tooltip' => 'Файлдарды издөө',
 'searchprofile-everything-tooltip' => 'Баардык барактардан (талкуу барактарды кошо) издөө',
-'searchprofile-advanced-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%',
 'search-redirect' => '($1 кайра багыттоо)',
 'search-section' => '($1 бөлүмү)',
 'search-suggest' => 'Ушуну кааладыңызбы: $1',
 'search-interwiki-caption' => 'Тектеш долбоорлор',
 'search-interwiki-default' => '$1 жыйын.:',
 'search-interwiki-more' => '(көбүрөөк)',
+'search-relatedarticle' => 'Байланыштуу',
+'mwsuggest-disable' => 'AJAX-сунуштарын өчүрүү',
+'searcheverything-enable' => 'Бүт ат мейкиндиктеринен издөө',
 'searchrelated' => 'байланыштуу',
 'searchall' => 'баары',
 'showingresultsheader' => "'''$4''' үчүн {{PLURAL:$5|'''$3''' жыйынтыктан '''$1'''-и|'''$1 - $2''' -дан '''$3''' жыйынтык}}",
 'search-nonefound' => 'Талапка төп маалымат табылган жок.',
 'powersearch' => 'Кеңейтилген издөө',
 'powersearch-legend' => 'Кеңейтилген издөө',
+'powersearch-ns' => 'Ат мейкиндиктеринен издөө:',
+'powersearch-redir' => 'Багыттоолорду чыгаруу',
 'powersearch-field' => 'Издөө',
+'powersearch-togglelabel' => 'Белги салуу:',
 'powersearch-toggleall' => 'Баары',
 'powersearch-togglenone' => 'Эчтеке',
 'search-external' => 'Тышкы издөө',
@@ -567,30 +724,50 @@ IP дарегиңиз бул барактын оңдоо тарыхына жаз
 # Quickbar
 'qbsettings' => 'Навигация панели',
 'qbsettings-none' => 'Көрсөтпөө',
+'qbsettings-fixedleft' => 'Жылбаган сол',
+'qbsettings-fixedright' => 'Жылбаган оң',
+'qbsettings-floatingleft' => 'Оома сол',
+'qbsettings-floatingright' => 'Оома оң',
 
 # Preferences page
 'preferences' => 'Ырастоолор',
 'mypreferences' => 'Ырастоолор',
 'prefs-edits' => 'Өзгөртүүлөрдүн саны',
+'prefsnologin' => 'Система кирген жоксуз',
 'changepassword' => 'Сырсөздү өзгөртүү',
+'prefs-skin' => 'Тема',
 'skin-preview' => 'Алдын ала көрүү',
+'datedefault' => 'Жарыяланбасча',
 'prefs-beta' => 'Бета-мүмкүнчүлүктөр',
 'prefs-datetime' => 'Дата жана убакыт',
+'prefs-labs' => 'Эксперименталдык мүмкүнчүлүктөр',
 'prefs-user-pages' => 'Катышуучунун барактары',
+'prefs-personal' => 'Өздүк маалыматтар',
 'prefs-rc' => 'Соңку өзгөрүүлөр',
-'prefs-watchlist' => 'Байкоо тизмеси',
+'prefs-watchlist' => 'Көзөмөл тизмеси',
+'prefs-watchlist-days-max' => 'Эң көп $1 {{PLURAL:$1|күн}}',
+'prefs-watchlist-edits-max' => 'Эң чоң сан: 1000',
+'prefs-watchlist-token' => 'Көзөмөл тизмесинин токени:',
 'prefs-resetpass' => 'Сырсөздү өзгөртүү',
+'prefs-changeemail' => 'Эл. почтанын дарегин өзгөртүү',
+'prefs-setemail' => 'Эл. почтанын дарегин коюу',
 'prefs-email' => 'Электрондук почтанын параметрлери',
+'prefs-rendering' => 'Сырткы көрүнүш',
 'saveprefs' => 'Сактоо',
-'prefs-editing' => 'Оңдоо',
+'resetprefs' => 'Сакталбаган өзгөртүүлөрдү тазалоо',
+'restoreprefs' => 'Жарыяланбасча ырастоолорду калыбына келтирүү',
+'prefs-editing' => 'Редакторлоо',
+'prefs-edit-boxsize' => 'Редакторлоо терезесинин өлчөмү.',
 'rows' => 'Сап:',
 'columns' => 'Тилке:',
 'searchresultshead' => 'Издөө',
 'stub-threshold-disabled' => 'Өчүрүлгөн',
+'recentchangesdays-max' => 'Эң көп $1 {{PLURAL:$1|күн}}',
 'timezonelegend' => 'Сааттык алкак:',
-'localtime' => 'Жергиликтүү убакыт',
+'localtime' => 'Жердик убакыт:',
+'timezoneuseoffset' => 'Башка (жылышты көрсөтүңүз)',
 'timezoneoffset' => 'Жылыш¹:',
-'servertime' => 'СеÑ\80веÑ\80 Ñ\83багы:',
+'servertime' => 'СеÑ\80веÑ\80 Ñ\83бакÑ\8bÑ\82ы:',
 'timezoneregion-africa' => 'Африка',
 'timezoneregion-america' => 'Америка',
 'timezoneregion-antarctica' => 'Антарктика',
@@ -602,26 +779,37 @@ IP дарегиңиз бул барактын оңдоо тарыхына жаз
 'timezoneregion-indian' => 'Индий океаны',
 'timezoneregion-pacific' => 'Тынч океаны',
 'prefs-searchoptions' => 'Издөө',
+'prefs-namespaces' => 'Ат мейкиндиктери',
 'default' => 'жарыяланбасча',
 'prefs-files' => 'Файлдар',
+'prefs-custom-css' => 'Өз CSS',
+'prefs-custom-js' => 'Өз JavaScript',
+'prefs-emailconfirm-label' => 'Эл. почтаны аныктоо:',
+'prefs-textboxsize' => 'Редакторлоо терезесинин өлчөмү',
 'youremail' => 'Электрондук дарек:',
-'username' => 'Катышуучунун аты:',
-'uid' => 'Колдонуучунун ID си:',
+'username' => '{{GENDER:$1|Катышуучу аты}}:',
+'uid' => '{{GENDER:$1|Катышуучунун}} коду:',
+'prefs-memberingroups' => '{{GENDER:$2|Мүчөсү}} болгон {{PLURAL:$1|топ|топтор}}:',
+'prefs-registration' => 'Каттоо убагы:',
 'yourrealname' => 'Анык атыңыз:',
 'yourlanguage' => 'Тил:',
 'yourvariant' => 'Мазмундун тил варианты:',
 'yournick' => 'Жаңы колуңуз:',
+'badsig' => 'Туура эмес кол тамга.
+HTML-тегдеринин тууралыгын текшериңиз.',
 'yourgender' => 'Жыныс:',
 'gender-male' => 'Эркек',
 'gender-female' => 'Аял',
 'email' => 'Электрондук дарек',
 'prefs-help-email' => 'Электрондук дарек милдетүү эмес, бирок сырсөздү унутуп калсаңыз ал сырсөздү жиберүүгө керек.',
-'prefs-help-email-others' => 'Ð\9eÑ\88ондой Ñ\8dле Ð±Ð°Ñ\88калаÑ\80 Ñ\81из Ð¼ÐµÐ½ÐµÐ½ ÐºÐ¾Ð»Ð´Ð¾Ð½Ñ\83Ñ\83Ñ\87Ñ\83 Ð¶Ðµ Ñ\82алкÑ\83Ñ\83 барактарыңыздагы шилтеме аркылуу байланыш түзүүгө уруксат берүүнү тандай аласыз.
+'prefs-help-email-others' => 'Ð\9eÑ\88ондой Ñ\8dле Ð±Ð°Ñ\88калаÑ\80 Ñ\81из Ð¼ÐµÐ½ÐµÐ½ ÐºÐ°Ñ\82Ñ\8bÑ\88Ñ\83Ñ\83Ñ\87Ñ\83 Ð¶Ðµ Ñ\82алкÑ\83Ñ\83лоо барактарыңыздагы шилтеме аркылуу байланыш түзүүгө уруксат берүүнү тандай аласыз.
 Электрондук дарегиңиз башка кодонуучуларга байланыш түзгөндө көрүнбөйт.',
-'prefs-info' => 'Негизги маалыматтары',
+'prefs-help-email-required' => 'Эл. почтанын дарегин көрсөтүү керек.',
+'prefs-info' => 'Негизги маалыматтар',
 'prefs-i18n' => 'Интернационализация',
 'prefs-signature' => 'Кол тамга',
 'prefs-dateformat' => 'Дата форматы',
+'prefs-timeoffset' => 'Алкак убакытынын жылышы',
 'prefs-advancedediting' => 'Кеңейтилген ырастоолор',
 'prefs-advancedrc' => 'Кеңейтилген ырастоолор',
 'prefs-advancedrendering' => 'Кеңейтилген ырастоолор',
@@ -631,38 +819,61 @@ IP дарегиңиз бул барактын оңдоо тарыхына жаз
 'prefs-displaysearchoptions' => 'Көрсөтүүнүн ырастоолору',
 'prefs-displaywatchlist' => 'Көрсөтүүнүн ырастоолору',
 
+# User preference: e-mail validation using jQuery
+'email-address-validity-valid' => 'Эл. почтанын дареги анык көрүнөт',
+'email-address-validity-invalid' => 'Эл. почтанын анык дарегин киргизиңиз!',
+
 # User rights
+'userrights' => 'Катышуучулардын укуктарын башкаруу',
+'userrights-lookup-user' => 'Катышуучу топторун башкаруу',
+'userrights-user-editname' => 'Катышуучу атыңызды киргизиңиз:',
+'editusergroup' => 'Катышуучу топторун оңдоо',
+'userrights-editusergroup' => 'Катышуучу топторун оңдоо',
+'saveusergroups' => 'Катышуучу топторун сактоо',
+'userrights-groupsmember' => 'Топтордо турат:',
 'userrights-reason' => 'Себеп:',
+'userrights-changeable-col' => 'Сиз өзгөртө алган топтор',
+'userrights-unchangeable-col' => 'Сиз өзгөртө албаган топтор',
 
 # Groups
 'group' => 'Топ:',
 'group-user' => 'Катышуучулар',
+'group-autoconfirmed' => 'Автоаныкталган катышуучулар',
 'group-bot' => 'Боттор',
 'group-sysop' => 'Администраторлор',
 'group-bureaucrat' => 'Бюрократтар',
+'group-suppress' => 'Ревизорлор',
 'group-all' => '(баары)',
 
 'group-user-member' => '{{GENDER:$1|катышуучу}}',
+'group-autoconfirmed-member' => '{{GENDER:$1|автоаныкталган катышуучу}}',
 'group-bot-member' => '{{GENDER:$1|бот}}',
 'group-sysop-member' => '{{GENDER:$1|администратор}}',
 'group-bureaucrat-member' => '{{GENDER:$1|бюрократ}}',
+'group-suppress-member' => '{{GENDER:$1|ревизор}}',
 
 'grouppage-user' => '{{ns:project}}:Катышуучулар',
+'grouppage-autoconfirmed' => '{{ns:project}}:Автоаныкталган катышуучулар',
 'grouppage-bot' => '{{ns:project}}:Боттор',
 'grouppage-sysop' => '{{ns:project}}:Администраторлор',
+'grouppage-bureaucrat' => '{{ns:project}}:Бюрократтар',
+'grouppage-suppress' => '{{ns:project}}:Ревизорлор',
 
 # Rights
+'right-read' => 'барактарды карап чыгуу',
 'right-edit' => 'Барактарды оңдоо',
 'right-move' => 'барактардын атын өзгөртүү',
+'right-move-rootuserpages' => 'катышуучулардын түпкү барактарынын атын өзгөртүү',
 'right-movefile' => 'файлдардын атын өзгөртүү',
 'right-upload' => 'Файлдарды жүктөө',
+'right-reupload' => 'Бар болгон файлдардын үстүнөн жаздыруу',
 'right-delete' => 'Барактарды өчүрүү',
 'right-browsearchive' => 'Өчүрүлгөн барактарды издөө',
 'right-suppressionlog' => 'Жеке журналдарды көрүү',
 'right-userrights' => 'Бүт катышуучулардын укуктарын оңдоо',
 
-# User rights log
-'rightsnone' => '(жок)',
+# Special:Log/newusers
+'newuserlogpage' => 'Катышуучулардын каттоо журналы',
 
 # Associated actions - in the sentence "You do not have permission to X"
 'action-read' => 'бул баракты окуу',
@@ -691,13 +902,13 @@ IP дарегиңиз бул барактын оңдоо тарыхына жаз
 'rclistfrom' => '$1 күнүнөн баштап жаңы өзгөртүүлөрдү көрсөтүү',
 'rcshowhideminor' => 'Майда оңдоолорду $1',
 'rcshowhidebots' => 'ботторду $1',
-'rcshowhideliu' => '$1 ÐºÐ°Ñ\82Ñ\82алган ÐºÐ¾Ð»Ð´Ð¾Ð½уучу',
-'rcshowhideanons' => 'Жашыруун колдонуучулар $1',
+'rcshowhideliu' => '$1 ÐºÐ°Ñ\82Ñ\82алган ÐºÐ°Ñ\82Ñ\8bÑ\88уучу',
+'rcshowhideanons' => '$1 жашыруун катышуучу',
 'rcshowhidepatr' => 'Көзөмөл алдындагы оңдоолорду $1',
 'rcshowhidemine' => 'Оңдоолорумду $1',
 'rclinks' => 'Соңку $2 күндө жасалган акыркы $1 өзгөртүүлөрдү көрсөтүү<br />$3',
 'diff' => 'айырма',
-'hist' => 'тарых',
+'hist' => 'тарыхы',
 'hide' => 'Жашыруу',
 'show' => 'Көрсөтүү',
 'minoreditletter' => 'м',
@@ -710,11 +921,11 @@ IP дарегиңиз бул барактын оңдоо тарыхына жаз
 # Recent changes linked
 'recentchangeslinked' => 'Тиешелүү өзгөрүүлөр',
 'recentchangeslinked-feed' => 'Тиешелүү өзгөрүүлөр',
-'recentchangeslinked-toolbox' => 'ТиеÑ\88елүү өзгөрүүлөр',
+'recentchangeslinked-toolbox' => 'Ð\91айланÑ\8bÑ\88Ñ\82Ñ\83Ñ\83 өзгөрүүлөр',
 'recentchangeslinked-title' => '"$1" үчүн тийиштүү өзгөртүүлөр',
 'recentchangeslinked-noresult' => 'Берилген мөөнөттө шилтемеленген барактарда өзгөртүү жок.',
 'recentchangeslinked-summary' => 'Бул көрсөтүлгөн (же көрсөтүлгөн категорияга кирген) барактан шилтемеленген барактардагы жакын арада жасалган өзгөрүүлөрдүн тизмеси.
-[[Special:Watchlist|Ð\91айкоо тизмеңиз]]деги барактар калын арип менен белгиленген.',
+[[Special:Watchlist|Ð\9aөзөмөл тизмеңиз]]деги барактар калын арип менен белгиленген.',
 'recentchangeslinked-page' => 'Барактын аталышы',
 'recentchangeslinked-to' => 'Белгиленген барактан шилтемеленген барактардын ордуна өзгөртүулөрдү көрсөтүү',
 
@@ -794,8 +1005,12 @@ IP дарегиңиз бул барактын оңдоо тарыхына жаз
 'filedelete-legend' => 'Файлды өчүрүү',
 'filedelete-comment' => 'Себеп:',
 'filedelete-submit' => 'Өчүрүү',
+'filedelete-reason-otherlist' => 'Башка себеп',
+'filedelete-maintenance-title' => 'Файлды өчүрүү оңунан чыкпай жатат',
 
 # MIME search
+'mimesearch' => 'MIME боюнча издөө',
+'mimetype' => 'MIME-түр:',
 'download' => 'жүктөп алуу',
 
 # Unused templates
@@ -807,28 +1022,41 @@ IP дарегиңиз бул барактын оңдоо тарыхына жаз
 
 # Statistics
 'statistics' => 'Статистика',
-'statistics-header-users' => 'Катышуучулар боюнча статистика',
+'statistics-header-views' => 'Көрүү статистикасы',
+'statistics-header-users' => 'Коолдонуучулардын статистикасы',
+'statistics-header-hooks' => 'Башка статистика',
+'statistics-articles' => 'Макалалар',
 'statistics-pages' => 'Барак',
+'statistics-files' => 'Жүктөлгөн файлдар',
 
 'disambiguationspage' => 'Template:көп маанилүү',
 
 'brokenredirects-edit' => 'оңдоо',
 'brokenredirects-delete' => 'өчүрүү',
 
+'withoutinterwiki-legend' => 'Префикс',
 'withoutinterwiki-submit' => 'Көрсөтүү',
 
 # Miscellaneous special pages
 'nbytes' => '$1 {{PLURAL:$1|байт|байт}}',
 'nmembers' => '$1{{PLURAL:$1|мүчө|мүчө}}',
+'uncategorizedpages' => 'Категияланбаган барактар',
+'uncategorizedcategories' => 'Категияланбаган категориялар',
+'uncategorizedimages' => 'Категияланбаган файлдар',
+'uncategorizedtemplates' => 'Категияланбаган шаблондор',
 'unusedcategories' => 'Колдонулбаган категориялар',
 'unusedimages' => 'Колдонулбаган файлдар',
 'popularpages' => 'Популярдуу барактар',
-'prefixindex' => 'Префикс менен бардык барактар',
+'wantedcategories' => 'Керек болгон категориялар',
+'wantedpages' => 'Керек болгон барактар',
+'wantedfiles' => 'Керек болгон файлдар',
+'wantedtemplates' => 'Керек болгон шаблондор',
+'prefixindex' => 'Бардык барактар префикстери менен',
 'shortpages' => 'Кыска макалалар',
-'listusers' => 'Ð\9aолдонуучулар тизмеси',
+'listusers' => 'Ð\9aаÑ\82Ñ\8bÑ\88уучулар тизмеси',
 'usercreated' => "$1 күнү $2'да {{GENDER:$3|катталды}}.",
 'newpages' => 'Жаңы барактар',
-'newpages-username' => 'Ð\9aолдонÑ\83Ñ\83Ñ\87Ñ\83 аты:',
+'newpages-username' => 'Ð\9aаÑ\82Ñ\8bÑ\88Ñ\83Ñ\83Ñ\87Ñ\83нÑ\83н аты:',
 'ancientpages' => 'Эң эски барактар',
 'move' => 'Аталышын өзгөртүү',
 'movethispage' => 'Бул барактын атын өзгөртүү',
@@ -849,8 +1077,11 @@ IP дарегиңиз бул барактын оңдоо тарыхына жаз
 'allpages' => 'Бардык барактар',
 'alphaindexline' => '$1 -дан $2 чейин',
 'nextpage' => 'Кийинки барак ($1)',
+'prevpage' => 'Мурунку барак ($1)',
 'allpagesfrom' => '-дан башталган барактарды көрсөтүү:',
 'allarticles' => 'Бүт барактар',
+'allinnamespace' => '«$1» ат мейкиндигинин бүт барактары',
+'allnotinnamespace' => 'Бүт барактар («$1» ат мейкиндигинен башка)',
 'allpagesprev' => 'Абалкы',
 'allpagesnext' => 'Кийинки',
 'allpagessubmit' => 'Аткаруу',
@@ -865,44 +1096,46 @@ IP дарегиңиз бул барактын оңдоо тарыхына жаз
 
 # Special:ListUsers
 'listusers-submit' => 'Көрсөтүү',
-'listusers-noresult' => 'Ð\9aолдонуучу табылган жок.',
-'listusers-blocked' => '(блоктолду)',
+'listusers-noresult' => 'Ð\9aаÑ\82Ñ\8bÑ\88уучу табылган жок.',
+'listusers-blocked' => '(блокировкаланды)',
 
 # Special:ActiveUsers
-'activeusers' => 'Ð\90кÑ\82ивдүү ÐºÐ¾Ð»Ð´Ð¾Ð½уучулардын тизмеси',
+'activeusers' => 'Ð\90кÑ\82ивдүү ÐºÐ°Ñ\82Ñ\8bÑ\88уучулардын тизмеси',
 'activeusers-hidebots' => 'Ботторду жашыруу',
-'activeusers-noresult' => 'Колдонуучулар табылган жок.',
-
-# Special:Log/newusers
-'newuserlogpage' => 'Жаңы колдонуучулардын тизмеси',
+'activeusers-hidesysops' => 'Администраторлорду жашыруу',
+'activeusers-noresult' => 'Катышуучулар табылган жок.',
 
 # Special:ListGroupRights
 'listgrouprights-group' => 'Топ',
-'listgrouprights-rights' => 'Укутар',
+'listgrouprights-rights' => 'Укуктар',
+'listgrouprights-helppage' => 'Help:Топтордун укуктары',
 'listgrouprights-members' => '(мүчөлөрдүн тизмеси)',
 
 # E-mail user
-'emailuser' => 'Ð\91Ñ\83л ÐºÐ¾Ð»Ð´Ð¾Ð½уучуга кат жиберүү',
-'emailusername' => 'Ð\9aолдонÑ\83Ñ\83Ñ\87Ñ\83 аты:',
+'emailuser' => 'Ð\91Ñ\83л ÐºÐ°Ñ\82Ñ\8bÑ\88уучуга кат жиберүү',
+'emailusername' => 'Ð\9aаÑ\82Ñ\8bÑ\88Ñ\83Ñ\83Ñ\87Ñ\83нÑ\83н аты:',
 'emailusernamesubmit' => 'Жөнөтүү',
 'emailfrom' => '- дан',
 'emailto' => 'Кимге:',
 'emailsubject' => 'Тема:',
-'emailmessage' => 'Билдирме',
+'emailmessage' => 'Билдирүү:',
 'emailsend' => 'Жөнөтүү',
 
 # Watchlist
 'watchlist' => 'Көзөмөл тизмем',
-'mywatchlist' => 'Көзөмөл тизме',
+'mywatchlist' => 'Көзөмөл тизмеси',
 'watchlistfor2' => '$1 үчүн $2',
 'watchnologin' => 'Катталган жок',
 'watch' => 'Көзөмөлдөө',
-'unwatch' => 'Көзөлдөбөө',
+'unwatch' => 'Ð\9aөзөмөлдөбөө',
 'watchlist-details' => 'Талкуу барактарын эсепке албаганда көзөмөл тизмеңизде {{PLURAL:$1|$1 барак|$1 барак}} бар.',
-'watchlistcontains' => 'Ð\91айкоо Ñ\82измеңизде $1 {{PLURAL:$1|баÑ\80ак Ð±Ð°Ñ\80|баÑ\80ак Ð±Ð°Ñ\80}}.',
+'watchlistcontains' => 'Сиздин ÐºÓ©Ð·Ó©Ð¼Ó©Ð» Ñ\82измеңизде $1 {{PLURAL:$1|баÑ\80ак}} Ð±Ð°Ñ\80.',
 'wlshowlast' => 'Соңку $1 саат $2 күн $3 көрсөтүү.',
 'watchlist-options' => 'Көзөмөл тизменин ырастоолору',
 
+'created' => 'түзүлдү',
+'changed' => 'өзгөртүлдү',
+
 # Delete
 'deletepage' => 'Баракты өчүрүү',
 'confirm' => 'Аныктоо',
@@ -920,7 +1153,11 @@ IP дарегиңиз бул барактын оңдоо тарыхына жаз
 'protectlogpage' => 'Коргоо тизмеси',
 'protectedarticle' => '"[[$1]]" корголгон',
 'protectcomment' => 'Себеп:',
+'protect-level-sysop' => 'Администраторлор гана',
+'protect-othertime' => 'Башка убакыт:',
+'protect-othertime-op' => 'башка убакыт',
 'restriction-type' => 'Укуктар:',
+'pagesize' => '(байт)',
 
 # Restrictions (nouns)
 'restriction-edit' => 'Оңдоо',
@@ -928,6 +1165,9 @@ IP дарегиңиз бул барактын оңдоо тарыхына жаз
 'restriction-create' => 'Жаратуу',
 'restriction-upload' => 'Жүктөө',
 
+# Restriction levels
+'restriction-level-all' => 'бүт деңгээлдер',
+
 # Undelete
 'undeletebtn' => 'Калыбына келтирүү',
 'undeletelink' => 'кароо/калыбына келтирүү',
@@ -935,6 +1175,7 @@ IP дарегиңиз бул барактын оңдоо тарыхына жаз
 'undeletereset' => 'Түшүрүү',
 'undeletecomment' => 'Себеп:',
 'undelete-search-submit' => 'Издөө',
+'undelete-show-file-submit' => 'Ооба',
 
 # Namespace form on various pages
 'namespace' => 'Аталыштар мейкиндиги:',
@@ -943,14 +1184,14 @@ IP дарегиңиз бул барактын оңдоо тарыхына жаз
 
 # Contributions
 'contributions' => '{{GENDER:$1|Катышуучунун}} салымдары',
-'contributions-title' => '$1 Ò¯Ñ\87үн ÐºÐ¾Ð»Ð´Ð¾Ð½уучунун салымдары',
+'contributions-title' => '$1 Ò¯Ñ\87үн ÐºÐ°Ñ\82Ñ\8bÑ\88уучунун салымдары',
 'mycontris' => 'Салымдар',
 'contribsub2' => '$1 үчүн ($2)',
 'uctop' => '(соңку)',
 'month' => 'Айынан (же андан мурун):',
 'year' => 'Жылынан (жана андан мурун):',
 
-'sp-contributions-newbies' => 'Жаңы колдонуучулардын гана салымдарын көрсөт',
+'sp-contributions-newbies' => 'Жаңы эсеп жазуулардын гана салымдарын көрсөтүү',
 'sp-contributions-blocklog' => 'тосмолоолордун журналы',
 'sp-contributions-uploads' => 'жүктөөлөр',
 'sp-contributions-logs' => 'журналдар',
@@ -969,8 +1210,8 @@ IP дарегиңиз бул барактын оңдоо тарыхына жаз
 'isredirect' => 'кайра багыттоо барагы',
 'istemplate' => 'кошуу',
 'isimage' => 'файл шилтемеси',
-'whatlinkshere-prev' => '{{PLURAL:$1|мурунку|мурунку $1}}',
-'whatlinkshere-next' => '{{PLURAL:$1|кийинки|кийинки $1}}',
+'whatlinkshere-prev' => '{{PLURAL:$1|мурунку}}',
+'whatlinkshere-next' => '{{PLURAL:$1|кийинки}}',
 'whatlinkshere-links' => '← шилтемелер',
 'whatlinkshere-hideredirs' => 'Багыттоолорду $1',
 'whatlinkshere-hidetrans' => '$1 кошуулары',
@@ -979,78 +1220,151 @@ IP дарегиңиз бул барактын оңдоо тарыхына жаз
 'whatlinkshere-filters' => 'Фильтрлер',
 
 # Block/unblock
-'block' => 'Ð\9aаÑ\82Ñ\8bÑ\88Ñ\83Ñ\83Ñ\87Ñ\83нÑ\83 Ð±Ð»Ð¾ÐºÐºÐ¾ Ñ\81алÑ\83Ñ\83',
-'blockip' => 'Ð\9aаÑ\82Ñ\8bÑ\88Ñ\83Ñ\83Ñ\87Ñ\83нÑ\83 Ð±Ð»Ð¾ÐºÐºÐ¾ Ñ\81алÑ\83Ñ\83',
-'blockip-title' => 'Ð\9aаÑ\82Ñ\8bÑ\88Ñ\83Ñ\83Ñ\87Ñ\83нÑ\83 Ð±Ð»Ð¾ÐºÐºÐ¾ Ñ\81алÑ\83Ñ\83',
-'blockip-legend' => 'Ð\9aаÑ\82Ñ\8bÑ\88Ñ\83Ñ\83Ñ\87Ñ\83нÑ\83 Ð±Ð»Ð¾ÐºÐºÐ¾ Ñ\81алÑ\83Ñ\83',
-'ipadressorusername' => 'IP дарек же колдонуучу аты:',
+'block' => 'Ð\9aаÑ\82Ñ\8bÑ\88Ñ\83Ñ\83Ñ\87Ñ\83нÑ\83 Ð±Ð»Ð¾ÐºÐ¸Ñ\80овкалоо',
+'blockip' => 'Ð\9aолдонÑ\83Ñ\83Ñ\87Ñ\83нÑ\83Ñ\83 Ð±Ó©Ð³Ó©Ñ\82Ñ\82Ó©',
+'blockip-title' => 'Ð\9aолдонÑ\83Ñ\83Ñ\87Ñ\83нÑ\83Ñ\83 Ð±Ó©Ð³Ó©Ñ\82Ñ\82Ó©',
+'blockip-legend' => 'Ð\9aолдонÑ\83Ñ\83Ñ\87Ñ\83нÑ\83 Ð±Ó©Ð³Ó©Ñ\82Ñ\82Ó©',
+'ipadressorusername' => 'IP-дарек же катышуучу аты:',
 'ipbreason' => 'Себеп:',
 'ipbreasonotherlist' => 'Башка себеп',
+'ipbsubmit' => 'Бул колдонуучуну бөгөттө',
 'ipbother' => 'Башка убакыт:',
 'ipboptions' => '2 саат:2 hours,1 күн:1 day,3 күн:3 days,1 жума:1 week,2 жума:2 weeks,1 ай:1 month,3 ай:3 months,6 ай:6 months,1 жыл:1 year,мөөнөтсүз:infinite',
 'ipbotheroption' => 'башка',
 'ipblocklist' => 'Тосмолонгон катышуучулар',
+'blocklist-target' => 'Максат',
 'blocklist-reason' => 'Себеп',
 'ipblocklist-submit' => 'Издөө',
-'blocklink' => 'блокко салуу',
-'unblocklink' => 'блоктон алуу',
-'change-blocklink' => 'блоктоону өзгөртүү',
-'contribslink' => 'салым',
+'anononlyblock' => 'анонимдер гана',
+'emailblock' => 'кат жөнөтүүгө тыюу салынган',
+'ipblocklist-empty' => 'Бөгөт тизмеси бош.',
+'blocklink' => 'бөгөттө',
+'unblocklink' => 'бөгөттөн чыгар',
+'change-blocklink' => 'бөгөттү өзгөрт',
+'contribslink' => 'салымдары',
 'emaillink' => 'кат жиберүү',
 'blocklogpage' => 'Тосмолоолордун журналы',
 'blocklogentry' => '[[$1]] тосмолонду, тосмолоо мөөнөтү: $2 $3',
+'block-log-flags-anononly' => 'анонимдик катышуучулар гана',
 'block-log-flags-nocreate' => 'эсеп жазуусун жаратуу өчүрүлгөн',
+'block-log-flags-noemail' => 'кат жөнөтүүгө тыюу салынган',
+'block-log-flags-hiddenname' => 'катышуучу аты жашырылган',
+'blockme' => 'Мени бөгөттө',
+'proxyblocker' => 'Проксини блокировкалоо',
+
+# Developer tools
+'lockdb' => 'Маалымат базасын камоо',
+'lockbtn' => 'Маалымат базасын камоо',
 
 # Move page
-'movelogpage' => 'Өзгөртүлгөн аттардын журналы',
+'move-page' => '$1 — атын өзгөртүү',
+'move-page-legend' => 'Барактын атын өзгөртүү',
+'movearticle' => 'Барактын атын өзгөртүү:',
+'movenologin' => 'Сиз система кирген жоксуз',
+'newtitle' => 'Жаңы ат:',
+'movepagebtn' => 'Барактын атын өзгөртүү',
+'pagemovedsub' => 'Барактын аты өзгөртүлдү',
+'movepage-moved-redirect' => 'Багыттоо жаратылды.',
+'movelogpage' => 'Аталыштардын өзгөртүлүш тарыхы',
 'movereason' => 'Себеп:',
 'revertmove' => 'кайтаруу',
+'delete_and_move' => 'Өчүрүү же атын өзгөртүү',
 'delete_and_move_confirm' => 'Ооба, бул баракты өчүрөм',
+'immobile-source-page' => 'Бул барактын атын өзгөртсө болбойт.',
+'imageinvalidfilename' => 'Максаттык файл аты туура эмес',
+'move-leave-redirect' => 'Багыттоону калтыруу',
 
 # Export
 'export' => 'Барактарды экспорттоо',
+'exportall' => 'Бүт барактарды экспорттоо',
+'export-submit' => 'Экспорттоо',
+'export-addcattext' => 'Категориядан барактарды кошуу:',
 'export-addcat' => 'Кошуу',
+'export-addnstext' => 'Ат мейкиндигинен барактарды кошуу:',
 'export-addns' => 'Кошуу',
+'export-download' => 'Файлга ат коюп сактоо',
+'export-templates' => 'Калыптарды кошуу',
 
 # Namespace 8 related
-'allmessages' => 'Системалык билдирмелер',
+'allmessages' => 'Системалык билдирүүлөр',
 'allmessagesname' => 'Ат',
 'allmessagesdefault' => 'Белгиленген билдирүүнүн тексти',
 'allmessagescurrent' => 'Учурдагы текст',
 'allmessages-filter-legend' => 'Фильтр',
+'allmessages-filter-unmodified' => 'Өзгөртүлбөгөндөр',
 'allmessages-filter-all' => 'Баары',
+'allmessages-filter-modified' => 'Өзгөртүлгөндөр',
+'allmessages-prefix' => 'Префикс боюнча филтрдөө:',
 'allmessages-language' => 'Тил:',
 'allmessages-filter-submit' => 'Өтүү',
 
 # Thumbnails
 'thumbnail-more' => 'Чоңойтуу',
+'filemissing' => 'Файл табылган жок',
 'thumbnail_error' => 'Кичирейтилген сүрөттү түзүүдө ката: $1',
+'thumbnail_image-type' => 'Сүрөт түрү колдолбойт',
 
 # Special:Import
+'import' => 'Барактарды импорттоо',
+'importinterwiki' => 'Уики аралык импорт',
+'import-interwiki-source' => 'Уики-булак/барак:',
+'import-interwiki-history' => 'Бул барактын бүт өзгөртүү тарыхын көчүрүү',
+'import-interwiki-templates' => 'Бүт калыптарды кошуу',
 'import-interwiki-submit' => 'Импорттоо',
+'import-interwiki-namespace' => 'Максаттык ат мейкиндиги:',
+'import-interwiki-rootpage' => 'Максаттык түпкү барагы (сөзсүз эмес):',
 'import-upload-filename' => 'Файл аты:',
 'import-comment' => 'Эскертүү:',
+'importstart' => 'Барактарды импорттоо...',
+'import-revision-count' => '$1 {{PLURAL:$1|версия}}',
+'importnopages' => 'Импорттоого барактар жок.',
+'imported-log-entries' => '$1 {{PLURAL:$1|журнал жазуусу}} импорттолду.',
+'importfailed' => 'Импорттоо оңунан чыккан жок: <nowiki>$1</nowiki>',
+'importunknownsource' => 'Импорттолуп жаткан барактын белгисиз түрү',
+'importcantopen' => 'Импорт файлын ачууга мүмкүн эмес',
+'importbadinterwiki' => 'Туура эмес интеруики-шилтеме',
+'importnotext' => 'Бош же тексти жок',
+'importsuccess' => 'Импорттоо аякталды!',
+'importnofile' => 'Импорттоо файлы жүктөлгөн жок.',
+'importuploaderrorpartial' => 'Импорт файлын жүктөө оңунан чыккан жок.
+Ал жарым-жартылай эле жүктөлдү.',
+'importuploaderrortemp' => 'Импорт файлын жүктөө оңунан чыккан жок.
+Убактылуу папка жок.',
+'import-parse-failure' => "Импорттоо учурундагы XML'ди талдоо катасы",
+'import-noarticle' => 'Импорттоого барактар жок!',
+'import-nonewrevisions' => 'Бүт версиялар мурда импорттолгон.',
+'import-upload' => 'XML-маалыматтарды жүктөө',
+'import-token-mismatch' => 'Сеанстын маалыматтары жоготулду.
+Дагы аракет кылып көрүңүз.',
+'import-invalid-interwiki' => 'Көрсөтүлгөн уикиден импорттоого мүмкүн эмес.',
 
 # Import log
 'importlogpage' => 'Импорт журналы',
+'import-logentry-upload-detail' => '$1 {{PLURAL:$1|версия}}',
+'import-logentry-interwiki' => '«$1» — уики аралык импорту',
+
+# JavaScriptTest
+'javascripttest' => "JavaScript'ти текшерүү",
+'javascripttest-title' => '$1 үчүн текшерүү жүргүзүлүп жатат',
 
 # Tooltip help for the actions
 'tooltip-pt-userpage' => 'Катышуучу барагыңыз',
 'tooltip-pt-mytalk' => 'Талкуулоо барагыңыз',
+'tooltip-pt-anontalk' => 'Бул IP дарекке арналган талкуулоо барагы',
 'tooltip-pt-preferences' => 'Ырастоолоруңуз',
 'tooltip-pt-watchlist' => 'Өзгөрүүлөрүн көзөмөлгө алган барактардын тизмеси',
 'tooltip-pt-mycontris' => 'Салымдарыңыздын тизмеси',
 'tooltip-pt-login' => 'Сизге системада катталууга сунуш кылынат, бирок милдеттүү эмес',
-'tooltip-pt-logout' => 'ЧÑ\8bгÑ\83Ñ\83',
-'tooltip-ca-talk' => 'Барактын мазмуну боюнча талкуулоо',
-'tooltip-ca-edit' => 'Сиз Ð±Ñ\83л Ð±Ð°Ñ\80акÑ\82Ñ\8b Ð¾Ò£Ð´Ð¾Ð¹ Ð°Ð»Ð°Ñ\81Ñ\8bз. Ð\9aиÑ\87и Ð¿ÐµÐ¹Ð¸Ð»Ð´Ð¸ÐºÐºÐµ, Ñ\81акÑ\82оодон Ð¼Ñ\83Ñ\80да Ð°Ð»Ð´Ñ\8bн Ð°Ð»Ð° ÐºÓ©Ñ\80Ñ\81Ó©Ñ\82Ò¯Ò¯ Ð½Ñ\83кÑ\83Ñ\83Ñ\80Ñ\83н колдонуңуз.',
-'tooltip-ca-addsection' => 'Ð\96аңÑ\8b Ð±Ó©Ð»Ò¯Ð¼Ð´Ò¯ Ð±Ð°Ñ\88Ñ\82Ó©Ó©',
+'tooltip-pt-logout' => 'Ð\98Ñ\88 Ñ\81еанÑ\81Ñ\8bн Ð°Ñ\8fкÑ\82оо',
+'tooltip-ca-talk' => 'Барактын мазмунун талкуулоо',
+'tooltip-ca-edit' => 'Сиз Ð±Ñ\83л Ð±Ð°Ñ\80акÑ\82Ñ\8b Ð¾Ò£Ð´Ð¾Ð¹ Ð°Ð»Ð°Ñ\81Ñ\8bз. Ð\9aиÑ\87и Ð¿ÐµÐ¹Ð¸Ð»Ð´Ð¸ÐºÐºÐµ, Ñ\81акÑ\82оодон Ð¼Ñ\83Ñ\80да Ð°Ð»Ð´Ñ\8bн Ð°Ð»Ð° ÐºÓ©Ñ\80Ñ\81Ó©Ñ\82Ò¯Ò¯ Ð±Ð°Ñ\81кÑ\8bÑ\87Ñ\8bн колдонуңуз.',
+'tooltip-ca-addsection' => 'Ð\96аңÑ\8b Ð±Ó©Ð»Ò¯Ð¼Ð´Ò¯ Ð¶Ð°Ñ\80аÑ\82Ñ\83Ñ\83',
 'tooltip-ca-viewsource' => 'Бул барак корголгон.
 Сиз анын кайнарын көрө аласыз',
 'tooltip-ca-history' => 'Бул барактын мурунку оңдоолору',
 'tooltip-ca-protect' => 'Бул баракты коргоо',
 'tooltip-ca-delete' => 'Бул баракты өчүрүү',
-'tooltip-ca-move' => 'Баракты көчүрүү',
+'tooltip-ca-move' => 'Барактын атын өзгөртүү',
 'tooltip-ca-watch' => 'Бул баракты көзөмөл тизмеңизге кошуңуз',
 'tooltip-ca-unwatch' => 'Бул баракты көзөмөл тизмеңизден алып салыңыз',
 'tooltip-search' => '{{SITENAME}} издөө',
@@ -1062,30 +1376,35 @@ IP дарегиңиз бул барактын оңдоо тарыхына жаз
 'tooltip-n-portal' => 'Долбоор тууралуу, эмне жасай аласыз, кайсы жерде эмне бар жөнүндө',
 'tooltip-n-currentevents' => 'Учурдагы окуялар тууралуу кошумча маалымат табуу',
 'tooltip-n-recentchanges' => 'Уикидеги соңку өзгөртүүлөрдүн тизмеси',
-'tooltip-n-randompage' => 'Ð\98Ñ\80еÑ\82Ñ\81из Ñ\82Ò¯Ñ\80дө Ð±Ð¸Ñ\80 Ð±Ð°Ñ\80акÑ\82Ñ\8b Ð°Ñ\87Ñ\83Ñ\83',
+'tooltip-n-randompage' => 'ТÑ\83Ñ\88келди Ð±Ð°Ñ\80акÑ\82Ñ\8b Ð°Ñ\87Ñ\8bп ÐºÐ°Ñ\80а',
 'tooltip-n-help' => 'Маалымат алуу үчүн',
 'tooltip-t-whatlinkshere' => 'Ушул жерге шилтемеси бар бардык уики барактардын тизмеси',
 'tooltip-t-recentchangeslinked' => 'Бул барактан шилтеме берилген барактардагы соңку өзгөрүүлөр',
 'tooltip-feed-atom' => 'Бул барак үчүн Atom агымы',
-'tooltip-t-contributions' => 'Ð\91Ñ\83л ÐºÐ¾Ð»Ð´Ð¾Ð½уучунун салымдарынын тизмеси',
-'tooltip-t-emailuser' => 'Ð\91Ñ\83л ÐºÐ¾Ð»Ð´Ð¾Ð½уучуга кат жиберүү',
+'tooltip-t-contributions' => 'Ð\91Ñ\83л ÐºÐ°Ñ\82Ñ\8bÑ\88уучунун салымдарынын тизмеси',
+'tooltip-t-emailuser' => 'Ð\91Ñ\83л ÐºÐ°Ñ\82Ñ\8bÑ\88уучуга кат жиберүү',
 'tooltip-t-upload' => 'Файлдарды жүктөө',
-'tooltip-t-specialpages' => 'Бардык атайын барактардын тизмеси',
+'tooltip-t-specialpages' => 'Бүт кызмат барактарынын тизмеси',
 'tooltip-t-print' => 'Бул барактын басып чыгарууга ылайыктуу түрү',
 'tooltip-t-permalink' => 'Барактын бул версиясына туруктуу шилтеме',
 'tooltip-ca-nstab-main' => 'Барактын мазмунун кароо',
 'tooltip-ca-nstab-user' => 'Катышуучунун барагын көрсөтүү',
-'tooltip-ca-nstab-special' => 'Бул атайын барак, аны оңдой албайсыз',
+'tooltip-ca-nstab-media' => 'Медиа барагын көрүү',
+'tooltip-ca-nstab-special' => 'Бул кызмат барагы, аны оңдой албайсыз',
 'tooltip-ca-nstab-project' => 'Долбоор барагын көрүү',
 'tooltip-ca-nstab-image' => 'Файл барагын көрүү',
-'tooltip-ca-nstab-template' => 'Шаблонду көрүү',
+'tooltip-ca-nstab-mediawiki' => 'Системалык билдирүүсүн көрүү',
+'tooltip-ca-nstab-template' => 'Калыпты көрүү',
+'tooltip-ca-nstab-help' => 'Жардам барагын көрүү',
 'tooltip-ca-nstab-category' => 'Категория барагын көрүү',
 'tooltip-minoredit' => 'Муну майда оңдоо деп белгилөө',
-'tooltip-save' => 'Өзгөртүүлөрдү сактоо',
+'tooltip-save' => 'Өзгөртүүлөрүңүздү сактоо',
 'tooltip-preview' => 'Кичи пейлдикке, өзгөртүүлөрдү алдын ала көрсөтүүнү сактоодон мурун колдонуңуз!',
 'tooltip-diff' => 'Тексттке киргизген өзгөртүүлөрдү көрсөтүү',
 'tooltip-compareselectedversions' => 'Бул барактын тандалган эки версиясынын айырмаларын кароо',
 'tooltip-watch' => 'Бул баракты көзөмөл тизмеңизге кошуңуз',
+'tooltip-watchlistedit-raw-submit' => 'Көзөмөл тизмесин жаңыртуу',
+'tooltip-upload' => 'Жүктөөнү баштоо',
 'tooltip-rollback' => '"Кайтар" бир баскыч менен бул барактын соңку оңдоочусунун өзгөртүүлөрүн алып салат',
 'tooltip-undo' => 'Киргизилген оңдоону алып салат жана жокко чыгаруунун себебин белгилөөгө мүмкүнчүлүк берип алдын ала көрсөтүүнү ачат',
 'tooltip-preferences-save' => 'Ырастоолорду сактоо',
@@ -1093,14 +1412,27 @@ IP дарегиңиз бул барактын оңдоо тарыхына жаз
 
 # Attribution
 'others' => 'башкалар',
+'anonusers' => '{{SITENAME}} анонимдик {{PLURAL:$2|катышуучу}} $1',
 'creditspage' => 'Алкыштар',
 
 # Info page
+'pageinfo-title' => '«$1» үчүн маалымат',
+'pageinfo-header-basic' => 'Негизги маалыматтар',
 'pageinfo-header-edits' => 'Оңдоо тарыхы',
+'pageinfo-display-title' => 'Көрсөтүлгөн башжазуусу',
+'pageinfo-article-id' => 'Барактын идентификатору',
+'pageinfo-views' => 'Көрүү саны',
+'pageinfo-redirects-name' => 'Бул баракка багыттоолор',
+'pageinfo-firstuser' => 'Барактын жаратуучусу',
+'pageinfo-lastuser' => 'Акыркы редактор',
 'pageinfo-toolboxlink' => 'Барак жөнүндө маалымат',
+'pageinfo-redirectsto-info' => 'маалыматтар',
 'pageinfo-contentpage-yes' => 'Ооба',
 'pageinfo-protect-cascading-yes' => 'Ооба',
 
+# Patrol log
+'patrol-log-page' => 'Патрулдоо журналы',
+
 # Browsing diffs
 'previousdiff' => '← Эскисин оңдоо',
 'nextdiff' => 'Жаңысын оңдоо →',
@@ -1109,14 +1441,26 @@ IP дарегиңиз бул барактын оңдоо тарыхына жаз
 'file-info-size' => '$1 × $2 пиксель, файлдын көлөмү: $3, MIME түрү: $4',
 'file-nohires' => 'Мындан чоңураак чечим жок.',
 'svg-long-desc' => 'SVG файл, шарттуу түрдө $1 × $2 пиксел, файлдын көлөмү: $3',
+'svg-long-error' => 'туура эмес SVG-файл: $1',
 'show-big-image' => 'Толук чечими',
 
 # Special:NewFiles
 'newimages' => 'Жаңы файлдардын галереясы',
 'newimages-legend' => 'Фильтр',
+'newimages-label' => 'Файл аты (же анын жартысы):',
+'showhidebots' => '($1 бот)',
+'noimages' => 'Көрүүгө эчтеке жок.',
 'ilsubmit' => 'Издөө',
 'bydate' => 'дата боюнча',
 
+# Video information, used by Language::formatTimePeriod() to format lengths in the above messages
+'seconds' => '{{PLURAL:$1|$1 секунда}}',
+'minutes' => '{{PLURAL:$1|$1 мүнөт}}',
+'hours' => '{{PLURAL:$1|$1 саат}}',
+'days' => '{{PLURAL:$1|$1 күн}}',
+'ago' => '$1 мурун',
+'just-now' => 'азыр эле',
+
 # Bad image list
 'bad_image_list' => 'Төмөнкү калыпта болуш керек:
 
@@ -1145,14 +1489,46 @@ IP дарегиңиз бул барактын оңдоо тарыхына жаз
 * gpsaltitude',
 
 # EXIF tags
+'exif-imagewidth' => 'Туурасы',
+'exif-imagelength' => 'Бийиктик',
+'exif-imagedescription' => 'Сүрөт аты',
 'exif-artist' => 'Автор',
+'exif-pixelydimension' => 'Сүрөттүн туурасы',
+'exif-pixelxdimension' => 'Сүрөттүн бийиктиги',
+'exif-usercomment' => 'Колдонуучунун комментарийи',
+'exif-relatedsoundfile' => 'Байланыштуу аудио-файл',
+'exif-fnumber' => 'Диафрагманын саны',
+'exif-lightsource' => 'Жарыктын булагы',
+'exif-flash' => 'Жарк',
 'exif-filesource' => 'Файл булагы',
+'exif-scenetype' => 'Сахнанын түрү',
 'exif-contrast' => 'Карама-каршылык',
+'exif-gpslatitude' => 'Кеңдик',
+'exif-gpslongitude' => 'Узундук',
+'exif-gpsaltitude' => 'Бийиктик',
+'exif-gpstimestamp' => 'GPS убакыты (атомдук саат)',
+'exif-gpsspeedref' => 'Ылдамдыктын өлчөө бирдиги',
+'exif-gpsdatestamp' => 'Дата',
+'exif-jpegfilecomment' => 'JPEG-файл үчүн эскертүү',
 'exif-keywords' => 'Ачкыч сөздөр',
+'exif-countrydest' => 'Көрсөтүлгөн өлкө',
+'exif-citydest' => 'Көрсөтүлгөн шаар',
+'exif-objectname' => 'Кыска ат',
 'exif-source' => 'Булак',
+'exif-contact' => 'Байланыш маалыматы',
+'exif-writer' => 'Тексттин автору',
 'exif-languagecode' => 'Тил',
+'exif-iimversion' => 'IIM версиясы',
+'exif-iimcategory' => 'Категория',
+'exif-identifier' => 'Идентификатор',
+'exif-label' => 'Белги',
+'exif-rating' => 'Баа (5тен)',
+'exif-copyrighted' => 'Автордук-укуктук статус',
+'exif-copyrightowner' => 'Автордук укуктардын ээси',
+'exif-usageterms' => 'Колдонуу шарттары',
 'exif-pngfilecomment' => 'PNG-файл үчүн эскертүү',
 'exif-disclaimer' => 'Жоопкерчиликтен баш тартуу',
+'exif-contentwarning' => 'Мазмун жөнүндө эскертүү',
 'exif-giffilecomment' => 'GIF-файл үчүн эскертүү',
 'exif-intellectualgenre' => 'Объекттин түрү',
 'exif-subjectnewscode' => 'Теманын коду',
@@ -1160,16 +1536,22 @@ IP дарегиңиз бул барактын оңдоо тарыхына жаз
 # EXIF attributes
 'exif-compression-1' => 'Кыстырылбаган',
 
+'exif-copyrighted-true' => 'Автордук укук менен корголгон',
 'exif-copyrighted-false' => 'Коомдук мүлк',
 
 'exif-unknowndate' => 'Белгисиз дата',
 
+'exif-orientation-1' => 'Нормалдуу',
+
 'exif-exposureprogram-1' => 'Кол менен',
+'exif-exposureprogram-2' => 'Программалык режим (нормалдуу)',
 
 'exif-subjectdistance-value' => '$1 метр',
 
 'exif-meteringmode-0' => 'Белгисиз',
 'exif-meteringmode-1' => 'Орточо',
+'exif-meteringmode-5' => 'Матрицалуу',
+'exif-meteringmode-6' => 'Жарым-жартылай',
 'exif-meteringmode-255' => 'Башка',
 
 'exif-lightsource-0' => 'Белгисиз',
@@ -1182,6 +1564,8 @@ IP дарегиңиз бул барактын оңдоо тарыхына жаз
 
 'exif-focalplaneresolutionunit-2' => 'дюйм',
 
+'exif-sensingmethod-1' => 'Аныкталбаган',
+
 'exif-scenecapturetype-0' => 'Стандарттуу',
 'exif-scenecapturetype-1' => 'Ландшафт',
 'exif-scenecapturetype-2' => 'Портрет',
@@ -1189,8 +1573,19 @@ IP дарегиңиз бул барактын оңдоо тарыхына жаз
 
 'exif-gaincontrol-0' => 'Жок',
 
+'exif-contrast-0' => 'Кадимки',
+'exif-contrast-1' => 'Жумшак жогорулатуу',
+'exif-contrast-2' => 'Катуу жогорулатуу',
+
+'exif-saturation-0' => 'Кадимки',
+
+'exif-sharpness-0' => 'Кадимки',
+'exif-sharpness-1' => 'Жумшак жогорулатуу',
+'exif-sharpness-2' => 'Катуулатуу',
+
 'exif-subjectdistancerange-0' => 'Белгисиз',
 'exif-subjectdistancerange-1' => 'Макротартуу',
+'exif-subjectdistancerange-2' => 'Жакын аралыктагы тартуу',
 
 # Pseudotags used for GPSDestDistanceRef
 'exif-gpsdestdistance-k' => 'Километр',
@@ -1248,19 +1643,25 @@ IP дарегиңиз бул барактын оңдоо тарыхына жаз
 'imgmultipageprev' => '← мурунку барак',
 'imgmultipagenext' => 'кийинки барак →',
 'imgmultigo' => 'Өтүү!',
+'imgmultigoto' => '$1 барагына өтүү',
 
 # Table pager
+'ascending_abbrev' => 'өсүү',
+'descending_abbrev' => 'кемүү',
 'table_pager_next' => 'Кийинки барак',
 'table_pager_prev' => 'Мурунку барак',
 'table_pager_first' => 'Биринчи барак',
 'table_pager_last' => 'Акыркы барак',
 'table_pager_limit_submit' => 'Аткаруу',
+'table_pager_empty' => 'Табылган жок',
 
 # Live preview
 'livepreview-loading' => 'Жүктөө...',
+'livepreview-ready' => 'Жүктөө… Даяр!',
 
 # Watchlist editor
 'watchlistedit-raw-titles' => 'Жазуулар:',
+'watchlistedit-raw-submit' => 'Көзөмөл тизмесин жаңыртуу',
 
 # Watchlist editing tools
 'watchlisttools-view' => 'Тийиштүү өзгөрүүлөрдү көрсөтүү',
@@ -1273,8 +1674,9 @@ IP дарегиңиз бул барактын оңдоо тарыхына жаз
 # Special:Version
 'version' => 'Версия',
 'version-extensions' => 'Орнотулган кеңейтүүлөр',
-'version-specialpages' => 'Ð\90Ñ\82айÑ\8bн Ð±Ð°Ñ\80акÑ\82аÑ\80',
+'version-specialpages' => 'Ð\9aÑ\8bзмаÑ\82 Ð±Ð°Ñ\80акÑ\82аÑ\80Ñ\8b',
 'version-variables' => 'Өзгөрмөлөр',
+'version-skins' => 'Темалар',
 'version-other' => 'Башка',
 'version-version' => '(Версия $1)',
 'version-license' => 'Лицензия',
@@ -1293,7 +1695,8 @@ IP дарегиңиз бул барактын оңдоо тарыхына жаз
 'fileduplicatesearch-submit' => 'Издөө',
 
 # Special:SpecialPages
-'specialpages' => 'Атайын барактар',
+'specialpages' => 'Кызмат барактары',
+'specialpages-group-other' => 'Башка кызмат барактары',
 'specialpages-group-login' => 'Кирүү / Каттоо',
 'specialpages-group-pagetools' => 'Барак аспаптары',
 'specialpages-group-spam' => 'Спам үчүн аспаптар',
@@ -1316,10 +1719,13 @@ IP дарегиңиз бул барактын оңдоо тарыхына жаз
 'tag-filter-submit' => 'Фильтрдөө',
 'tags-title' => 'Белгилер',
 'tags-tag' => 'Белгинин аты',
+'tags-hitcount-header' => 'Белгиленген өзгөрүүлөр',
 'tags-edit' => 'оңдоо',
+'tags-hitcount' => '$1 {{PLURAL:$1|өзгөрүү}}',
 
 # Special:ComparePages
 'comparepages' => 'Барактарды салыштыруу',
+'compare-selector' => 'Барактардын версияларын салыштыруу',
 'compare-page1' => 'Биринчи барак',
 'compare-page2' => 'Экинчи барак',
 'compare-rev1' => 'Биринчи версия',
@@ -1330,21 +1736,32 @@ IP дарегиңиз бул барактын оңдоо тарыхына жаз
 'dberr-header' => 'Бул уикиде көйгөйлөр бар болуп жатат',
 
 # HTML forms
+'htmlform-required' => 'Бул чоңдук керек болот',
 'htmlform-submit' => 'Жөнөтүү',
 'htmlform-reset' => 'Өзгөртүүлөрдү жокко чыгаруу',
 'htmlform-selectorother-other' => 'Башка',
 
 # New logging system
+'logentry-delete-delete' => '$1 катышуучу $3 барагын өчүрдү',
 'revdelete-content-hid' => 'мазмун жашырылган',
-'revdelete-uname-hid' => 'колдонуучу аты жашырылган',
+'revdelete-summary-hid' => 'оңдоонун баяндамасы жашырылган',
+'revdelete-uname-hid' => 'катышуучу аты жашырылган',
 'revdelete-unrestricted' => 'администраторлор үчүн чектөөлөр алынды',
+'logentry-newusers-newusers' => '$1 эсеп жазуусу жаратылды',
+'logentry-newusers-create' => '$1 эсеп жазуусу жаратылды',
+'logentry-newusers-create2' => '$1 эсеп жазуусун жаратты',
+'logentry-newusers-autocreate' => 'Автоматтуу түрдө $1 эсеп жазуусу жаратылды',
+'rightsnone' => '(жок)',
 
 # Feedback
 'feedback-subject' => 'Тема:',
-'feedback-message' => 'Билдирме:',
+'feedback-message' => 'Билдирүү:',
 'feedback-cancel' => 'Жокко чыгаруу',
 'feedback-submit' => 'Пикир жөнөтүү',
+'feedback-adding' => 'Баракка пикирди кошуу…',
+'feedback-error1' => "Ката. API'ден белгисиз натыйжа",
 'feedback-error2' => 'Ката: Оңдоо оңунан чыккан жок',
+'feedback-error3' => "Ката: API'ден жооп жок",
 'feedback-close' => 'Даяр',
 'feedback-bugnew' => 'Мен текшердим. Жаңы ката жөнүндө маалымдоо',
 
@@ -1353,9 +1770,16 @@ IP дарегиңиз бул барактын оңдоо тарыхына жаз
 'searchsuggest-containing' => 'кармагандар...',
 
 # API errors
+'api-error-badtoken' => 'Ички ката: анык эмес токен.',
+'api-error-file-too-large' => 'Сиз жөнөткөн файл өтө чоң.',
+'api-error-filename-tooshort' => 'Файл аты өтө кыска.',
+'api-error-filetype-banned' => 'Бул файл түрүнө тыюу салынган.',
+'api-error-illegal-filename' => 'Жарабай турган файл аты.',
+'api-error-unclassified' => 'Белгисиз ката пайда болду.',
 'api-error-unknown-code' => 'Белгисиз ката: "$1".',
 'api-error-unknown-warning' => 'Белгисиз эскертүү: "$1".',
 'api-error-unknownerror' => 'Белгисиз ката: «$1».',
+'api-error-uploaddisabled' => 'Бул уикиде файлдарды жүктөө мүмкүнчүлүгү өчүрүлгөн.',
 
 # Durations
 'duration-seconds' => '$1 {{PLURAL:$1|секунда}}',
index e0e7ba7..346dd04 100644 (file)
@@ -13,6 +13,7 @@
  * @author Esteban97
  * @author Kaganer
  * @author LeighvsOptimvsMaximvs
+ * @author MF-Warburg
  * @author McDutchie
  * @author MissPetticoats
  * @author Omnipaedista
@@ -701,7 +702,6 @@ Nobis etiam spondes te esse ipsum horum verborum scriptorem primum, aut ex opere
 'template-protected' => '(protecta)',
 'template-semiprotected' => '(semi-protecta)',
 'hiddencategories' => 'Haec pagina ad {{PLURAL:$1|unam categoriam celatam|$1 categorias celatas}} pertinet:',
-'nocreatetitle' => 'Creatio paginarum coercita',
 'nocreate-loggedin' => 'Tibi non licet paginas novas creare.',
 'permissionserrors' => 'Errores permissionis',
 'permissionserrorstext-withaction' => 'Tibi non licet $2, ex {{PLURAL:$1|ratione|rationibus}}:',
@@ -1037,10 +1037,13 @@ Si vis id dare, opera tua tibi ascribentur.',
 'right-userrights-interwiki' => 'Potestates usorum aliis in vicis recensere',
 'right-siteadmin' => 'Basem datorum obstruere vel deobstruere',
 
+# Special:Log/newusers
+'newuserlogpage' => 'Index rationum novarum creatarum',
+'newuserlogpagetext' => 'Hic est index rationum novarum creatarum.',
+
 # User rights log
 'rightslog' => 'Index mutationum iuribus usorum',
 'rightslogtext' => 'Haec est index mutationum iuribus usorum.',
-'rightsnone' => '(nullus)',
 
 # Associated actions - in the sentence "You do not have permission to X"
 'action-read' => 'hanc paginam legere',
@@ -1419,10 +1422,6 @@ Vide etiam [[Special:WantedCategories|categorias desideratas]].',
 'activeusers-hidesysops' => 'Celare magistratus',
 'activeusers-noresult' => 'Nullus usor inventus.',
 
-# Special:Log/newusers
-'newuserlogpage' => 'Index rationum novarum creatarum',
-'newuserlogpagetext' => 'Hic est index rationum novarum creatarum.',
-
 # Special:ListGroupRights
 'listgrouprights' => 'Gregum usorum potestates',
 'listgrouprights-group' => 'Grex',
@@ -1469,9 +1468,8 @@ Inscriptio electronica quam in [[Special:Preferences|praeferentiis tuis]] dedis
 'watchlistanontext' => 'Necesse est $1 ad indicem paginarum custoditarum inspiciendum vel recensendum.',
 'watchnologin' => 'Conventum non est apertum',
 'watchnologintext' => '[[Special:UserLogin|Conventum aperire]] debes ut indicem paginarum custoditarum mutes.',
-'addedwatchtext' => "Pagina \"[[:\$1]]\" in [[Special:Watchlist|paginas tuas custoditas]] addita est. Mutationes posthac huic paginae et paginae disputationis ibi notabuntur, et pagina '''litteris pinguibus''' apparebit in [[Special:RecentChanges|nuper mutatorum]] indice, ut sit facilius electu.
-
-Si paginam ex indice paginarum custoditarum removere vis, imprime \"decustodire\" ab summa pagina.",
+'addedwatchtext' => 'Pagina "[[:$1]]" in [[Special:Watchlist|paginas tuas custoditas]] addita est.
+Mutationes posthac huic paginae et paginae disputationis ibi notabuntur.',
 'removedwatchtext' => 'Pagina "[[:$1]]" ex [[Special:Watchlist|indice paginarum custoditarum]] remota est.',
 'watch' => 'Custodire',
 'watchthispage' => 'Custodire hanc paginam',
@@ -1521,6 +1519,8 @@ To change your watchlist settings, visit
 
 Feedback and further assistance:
 {{canonicalurl:{{MediaWiki:Helppage}}}}',
+'created' => 'creata',
+'changed' => 'mutata',
 
 # Delete
 'deletepage' => 'Delere paginam',
@@ -1584,9 +1584,9 @@ ad emendationem proximam ab $2.',
 Ecce protectiones paginae '''$1''':",
 'protect-cascadeon' => 'Hanc paginam, in {{PLURAL:$1|pagina seriatim protecta|paginis seriatim protectis}} inclusam, potes deprotegere; manebit autem protectio serialis.',
 'protect-default' => 'Usoribus omnibus licet',
-'protect-fallback' => 'Postulat permissum "$1"',
-'protect-level-autoconfirmed' => 'Tironibus et conventu carentibus non licet',
-'protect-level-sysop' => 'Magistratus soli',
+'protect-fallback' => 'Sinere solum usores permissu "$1"',
+'protect-level-autoconfirmed' => 'Sinere solum usores adfirmati automaticale',
+'protect-level-sysop' => 'Sinere solum magistratus',
 'protect-summary-cascade' => 'defluens',
 'protect-expiring' => 'exit $1 (UTC)',
 'protect-expiry-indefinite' => 'infinita',
@@ -1651,7 +1651,7 @@ Si pagina nova cum ipso nomine post deletionem creata est, emendationes restitut
 'blanknamespace' => '(principale)',
 
 # Contributions
-'contributions' => 'Conlationes usoris',
+'contributions' => 'Conlationes {{GENDER:$1|usoris}}',
 'contributions-title' => 'Conlationes usoris $1',
 'mycontris' => 'Conlationes',
 'contribsub2' => 'Pro $1 ($2)',
@@ -2339,7 +2339,7 @@ Quaesumus, adfirma ut iterum hanc paginam crees.",
 'specialpages-group-users' => 'Usores eorumque potestates',
 'specialpages-group-pages' => 'Indices paginarum',
 'specialpages-group-pagetools' => 'Instrumenta paginarum',
-'specialpages-group-wiki' => 'Vici-data et instrumenta',
+'specialpages-group-wiki' => 'Data et instrumenta',
 'specialpages-group-redirects' => 'Paginae speciales redirigentes',
 'specialpages-group-spam' => 'Instrumenta contra praeconia incommoda',
 
@@ -2375,7 +2375,7 @@ Quaesumus, adfirma ut iterum hanc paginam crees.",
 'logentry-newusers-create' => 'Ratio usoris $1 creata est',
 'logentry-newusers-create2' => 'Ratio usoris $3 creata est ab usore $1',
 'logentry-newusers-autocreate' => 'Ratio $1 automatice creata est',
-'newuserlog-byemail' => 'tessera missa litteris electronicis',
+'rightsnone' => '(nullus)',
 
 # Search suggestions
 'searchsuggest-search' => 'Quaerere',
index a3ec90d..e1080cf 100644 (file)
@@ -749,6 +749,9 @@ Las búsquedas producen más o munco a buscar biervos comunes como «la» o «de
 'right-minoredit' => 'Marcar trocamientos como "chiquiticos"',
 'right-delete' => 'Efassar hojas',
 
+# Special:Log/newusers
+'newuserlogpage' => 'Registro de creación de usuarios',
+
 # User rights log
 'rightslog' => 'Trocamientos de profil de usuario',
 
@@ -882,9 +885,6 @@ La descripción en su [$2 hoja de descripción del arxivo] está amostrada debax
 'linksearch' => 'Linkes eksternos',
 'linksearch-line' => 'Atamiento para $1 en la ója $2',
 
-# Special:Log/newusers
-'newuserlogpage' => 'Registro de creación de usuarios',
-
 # Special:ListGroupRights
 'listgrouprights-members' => '(ver los miembros de este grupo)',
 
@@ -1279,7 +1279,6 @@ Los otros campos se van a guardar por defecto.
 
 # New logging system
 'logentry-newusers-autocreate' => 'El cuento $1 fue crîado otomatika mente',
-'newuserlog-byemail' => 'kóddiche mandado con letral',
 
 # Feedback
 'feedback-subject' => 'Sujeto',
index 1b4ce31..a579d53 100644 (file)
@@ -11,6 +11,7 @@
  * @author Kaffi
  * @author Kaganer
  * @author Les Meloures
+ * @author MF-Warburg
  * @author Purodha
  * @author Reedy
  * @author Robby
@@ -156,7 +157,7 @@ $magicWords = array(
        'pagename'                  => array( '1', 'Säitennumm', 'SEITENNAME', 'PAGENAME' ),
        'namespace'                 => array( '1', 'Nummraum', 'NAMENSRAUM', 'NAMESPACE' ),
        'subjectspace'              => array( '1', 'Haaptnummraum', 'HAUPTNAMENSRAUM', 'SUBJECTSPACE', 'ARTICLESPACE' ),
-       'subjectpagename'           => array( '1', 'Haaptsäit', 'HAUPTSEITE', 'SUBJECTPAGENAME', 'ARTICLEPAGENAME' ),
+       'subjectpagename'           => array( '1', 'Haaptsäit', 'HAUPTSEITE', 'HAUPTSEITENNAME', 'VORDERSEITE', 'SUBJECTPAGENAME', 'ARTICLEPAGENAME' ),
        'img_thumbnail'             => array( '1', 'Miniatur', 'miniatur', 'mini', 'thumbnail', 'thumb' ),
        'img_right'                 => array( '1', 'riets', 'rechts', 'right' ),
        'img_left'                  => array( '1', 'lénks', 'links', 'left' ),
@@ -175,8 +176,8 @@ $magicWords = array(
        'formatnum'                 => array( '0', 'ZUELEFORMAT', 'ZAHLENFORMAT', 'FORMATNUM' ),
        'special'                   => array( '0', 'spezial', 'special' ),
        'hiddencat'                 => array( '1', '__VERSTOPPT_KATEGORIE__', '__VERSTECKTE_KATEGORIE__', '__WARTUNGSKATEGORIE__', '__HIDDENCAT__' ),
-       'pagesincategory_pages'     => array( '0', 'Säiten', 'pages' ),
-       'pagesincategory_files'     => array( '0', 'Fichieren', 'files' ),
+       'pagesincategory_pages'     => array( '0', 'Säiten', 'seiten', 'pages' ),
+       'pagesincategory_files'     => array( '0', 'Fichieren', 'dateien', 'files' ),
 );
 
 $messages = array(
@@ -314,6 +315,7 @@ $messages = array(
 'newwindow' => '(geet an enger neier Fënster op)',
 'cancel' => 'Zréck',
 'moredotdotdot' => 'Méi …',
+'morenotlisted' => 'Méi, déi hei net stinn...',
 'mypage' => 'Säit',
 'mytalk' => 'Diskussioun',
 'anontalk' => 'Diskussioun fir dës IP Adress',
@@ -614,7 +616,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?",
-'createaccountmail' => 'Via E-Mail',
+'createaccountmail' => 'En temporäert Passwuert benotzen an et per E-Mail un déi E-Mailadress schécken déi hei drënner steet',
 'createaccountreason' => 'Grond:',
 'badretype' => 'Är Passwierder stëmmen net iwwerdeneen.',
 'userexists' => 'De Benotzernumm deen agi gouf gëtt scho benotzt.
@@ -689,6 +691,7 @@ Waart w.e.g. ier Dir et nach eng Kéier versicht.",
 # E-mail sending
 'php-mail-error-unknown' => 'Onbekannte Feeler an der PHP-Mail-Fonctioun',
 'user-mail-no-addy' => 'Huet versicht eng Mail ouni Mailadress ze schécken',
+'user-mail-no-body' => 'Et gouf probéiert eng E-Mail ouni Text oder mat engem ze kuerzen Text ze schécken.',
 
 # Change password dialog
 'resetpass' => 'Passwuert änneren',
@@ -742,6 +745,7 @@ Temporärt Passwuert: $2',
 'changeemail-oldemail' => 'Aktuell Mailadress:',
 'changeemail-newemail' => 'Nei Mailadress:',
 'changeemail-none' => '(keng)',
+'changeemail-password' => 'Ärt {{SITENAME}}-Passwuert:',
 'changeemail-submit' => 'Mailadress änneren',
 'changeemail-cancel' => 'Ofbriechen',
 
@@ -908,7 +912,8 @@ Dir verspriecht ausserdeem datt Dir dësen Text selwer verfaasst hutt, oder aus
 'copyrightwarning2' => "W.e.g. notéiert datt all Kontributiounen op {{SITENAME}} vun anere Benotzer verännert oder geläscht kënne ginn. Wann dir dat net wëllt, da setzt näischt heihinner.<br />
 Dir verspriecht ausserdeem datt dir dësen Text selwer verfaasst hutt, oder aus dem Domaine public oder anere fräie Quelle kopéiert hutt. (cf. $1 fir méi Detailler). '''DROT KEE COPYRECHTLECH GESCHÜTZTE CONTENU AN!'''",
 'longpageerror' => "'''FEELER: Den Text, den Dir Versicht ze späicheren, huet {{PLURAL:$1|1 Kilobyte|$1 Kilobytes}}. Dëst ass méi wéi den erlaabte Maximum vun  {{PLURAL:$2|1 Kilobyte|$2 Kilobytes}}''' Dofir kann den Text net gespäichert ginn.",
-'readonlywarning' => "'''OPGEPASST: D'Datebank gouf wéinst Maintenanceaarbechte fir Säitenännerunge gespaart, dofir kënnt Dir déi Säit den Ament net ofspäicheren. Versuergt den Text a versicht d'Ännerunge méi spéit nach emol ze maachen.'''
+'readonlywarning' => "'''OPGEPASST: D'Datebank gouf wéinst Maintenanceaarbechte gespaart, dofir kënnt Dir Är Ännerungen den Ament net ofspäicheren.'''
+Dir kënnt den Text kopéieren an an een Textfichier drasetzen an deen ofspäicheren fir méi spéit.
 
 Den Administrateur den d'Datebank gespaart huet, huet dës Erklärung ginn: $1",
 'protectedpagewarning' => "'''OPGEPASST: Dës Säit gouf gespaart a kann nëmme vun engem Administrateur geännert ginn.''' Déi lescht Zeil aus de Logbicher fannt Dir zu Ärer Informatioun hei ënnendrënner.",
@@ -922,7 +927,6 @@ Den Administrateur den d'Datebank gespaart huet, huet dës Erklärung ginn: $1",
 'template-semiprotected' => '(gespaart fir net-ugemellten an nei Benotzer)',
 'hiddencategories' => 'Dës Säit gehéiert zu {{PLURAL:$1|1 verstoppter Kategorie|$1 verstoppte Kategorien}}:',
 'edittools' => '<!-- Dësen Text gëtt ënnert dem "Ännere"-Formulair esouwéi dem "Eropluede"-Formulair ugewisen. -->',
-'nocreatetitle' => "D'Uleeë vun neie Säiten ass limitéiert.",
 'nocreatetext' => "Op {{SITENAME}} gouf d'Schafe vun neie Säite limitéiert. Dir kënnt Säiten déi scho bestinn änneren oder Iech [[Special:UserLogin|umellen]].",
 'nocreate-loggedin' => 'Dir hutt keng Berechtigung fir nei Säiten unzeleeën.',
 'sectioneditnotsupported-title' => 'Ännere vum Abschnitt gëtt net ënnerstëtzt',
@@ -1458,13 +1462,13 @@ Si muss manner wéi $1 {{PLURAL:$1|Zeechen|Zeechen}} hunn.',
 'right-sendemail' => 'Anere Benotzer E-Maile schécken',
 'right-passwordreset' => 'Maile vum Zrécksetze vum Passwuert weisen',
 
+# Special:Log/newusers
+'newuserlogpage' => 'Logbuch vun den neien Umeldungen',
+'newuserlogpagetext' => "Dëst ass d'Lescht vun de Benotzernimm déi ugeluecht goufen.",
+
 # User rights log
 'rightslog' => 'Logbuch vun de Benotzerrechter',
 'rightslogtext' => "Dëst ass d'Lëscht vun den Ännerunge vu Benotzerrechter.",
-'rightslogentry' => "huet d'Benotzerrechter vum $1 vun $2 op $3 geännert.",
-'rightslogentry-autopromote' => 'gouf automatesch aus dem Grupp $2 an de Grupp $3 gesat',
-'logentry-rights-autopromote' => "De Benotzer $1 huet d'Benotzerrechter automatesch vu(n) $4 op $5 geännert",
-'rightsnone' => '(keen)',
 
 # Associated actions - in the sentence "You do not have permission to X"
 'action-read' => 'dës Säit ze liesen',
@@ -2069,7 +2073,7 @@ Kuckt och [[Special:WantedCategories|Gewënscht Kategorien]].',
 'linksearch-ok' => 'Sichen',
 'linksearch-text' => '"Wildcards" wéi zum Beispill "*.example.com" kënne benotzt ginn.
 Et muss mindestens en Top-Level-Domaine ugi ginn, wéi z. Bsp. ".org".<br />
-Ënnerstëtzte Protekoller: <code>$1</code> (http:// gëtt benotzt wann näischt spezifizéiert gëtt).',
+Ënnerstëtzte {{PLURAL:$2|Protokoll|Protekoller}}: <code>$1</code> (http:// gëtt benotzt wann näischt spezifizéiert gëtt).',
 'linksearch-line' => '$1 verlinkt vun $2',
 'linksearch-error' => 'Wildcards (*,?) kënnen nëmmen am Ufank vum Host-Numm benotzt ginn.',
 
@@ -2082,16 +2086,12 @@ Et muss mindestens en Top-Level-Domaine ugi ginn, wéi z. Bsp. ".org".<br />
 # Special:ActiveUsers
 'activeusers' => 'Lëscht vun den aktive Benotzer',
 'activeusers-intro' => 'Dëst ass eng Lëscht vun de Benotzer déi op iergend eng Manéier an de leschten $1 {{PLURAL:$1|Dag|Deeg}} aktiv waren.',
-'activeusers-count' => '$1 {{PLURAL:$1|Ännerung|Ännerungen}} {{PLURAL:$3|gëschter|an de leschten $3 Deeg}}',
+'activeusers-count' => '$1 {{PLURAL:$1|Aktioun|Aktiounen}} {{PLURAL:$3|gëschter|an de leschten $3 Deeg}}',
 'activeusers-from' => 'Benotzer weisen, ugefaang bäi:',
 'activeusers-hidebots' => 'Botte verstoppen',
 'activeusers-hidesysops' => 'Administrateure verstoppen',
 'activeusers-noresult' => 'Keng Benotzer fonnt.',
 
-# Special:Log/newusers
-'newuserlogpage' => 'Logbuch vun den neien Umeldungen',
-'newuserlogpagetext' => "Dëst ass d'Lescht vun de Benotzernimm déi ugeluecht goufen.",
-
 # Special:ListGroupRights
 'listgrouprights' => 'Rechter vun de Benotzergruppen',
 'listgrouprights-summary' => 'Dëst ass eng Lëscht vun den op dëser Wiki definéierte Benotzergruppen an den domat verbonnene Rechter.
@@ -2149,7 +2149,7 @@ D\'E-Mailadress, déi Dir an [[Special:Preferences|Ären Astellungen]] aginn hut
 'usermessage-editor' => 'Benoriichtegungs-System',
 
 # Watchlist
-'watchlist' => 'Meng Iwwerwaachungslëscht',
+'watchlist' => 'Iwwerwaachungslëscht',
 'mywatchlist' => 'Iwwerwaachungslëscht',
 'watchlistfor2' => 'Vum $1 $2',
 'nowatchlist' => 'Är Iwwerwaachungslëscht ass eidel.',
@@ -2157,9 +2157,8 @@ D\'E-Mailadress, déi Dir an [[Special:Preferences|Ären Astellungen]] aginn hut
 'watchnologin' => 'Net ageloggt',
 'watchnologintext' => "Dir musst [[Special:UserLogin|ugemellt]] sinn, fir Är Iwwerwaachungslëscht z'änneren.",
 'addwatch' => "Op d'Iwwerwaachungslëscht derbäisetzen",
-'addedwatchtext' => "D'Säit \"[[:\$1]]\" gouf op är [[Special:Watchlist|Iwwerwaachtungslëscht]] gesat. All weider Ännerungen op dëser Säit an/oder der Diskussiounssäit ginn hei opgelëscht, an d'Säit gesäit '''fettgedréckt''' bei de [[Special:RecentChanges|rezenten Ännerungen]] aus, fir se méi séier erëmzefannen.
-
-Wann dir dës Säit net méi iwwerwaache wëllt, klickt op \"Net méi iwwerwaachen\" uewen op der Säit.",
+'addedwatchtext' => 'D\'Säit "[[:$1]]" gouf op är [[Special:Watchlist|Iwwerwaachtungslëscht]] gesat.
+All weider Ännerungen op dëser Säit an der assoziéierter Diskussiounssäit ginn hei opgelëscht.',
 'removewatch' => 'Vun der Iwwerwaachungslëscht erofhuelen',
 'removedwatchtext' => 'D\'Säit "[[:$1]]" gouf vun [[Special:Watchlist|ärer Iwwerwaachungslëscht]] erofgeholl.',
 'watch' => 'Iwwerwaachen',
@@ -2193,7 +2192,7 @@ Wann dir dës Säit net méi iwwerwaache wëllt, klickt op \"Net méi iwwerwaach
 'enotif_subject_moved' => "D'{{SITENAME}}-Säit $1 gouf vum {{gender:$2|$2}} geréckelt",
 'enotif_subject_restored' => "D'{{SITENAME}}-Säit $1 gouf vum {{gender:$2|$2}} restauréiert",
 'enotif_subject_changed' => "D'{{SITENAME}}-Säit $1 gouf vum {{gender:$2|$2}} geännert",
-'enotif_body_intro_deleted' => 'D\'{{SITENAME}}-Säit $1 gouf de(n) $PAGEEDITDATE {{gender:$2|vum $2|vun der $2}} geläscht, kuckt $3 fir déi aktuell Versioun.',
+'enotif_body_intro_deleted' => 'D\'{{SITENAME}}-Säit $1 gouf de(n) $PAGEEDITDATE {{gender:$2|vum $2|vun der $2}} geläscht, kuckt $3.',
 'enotif_lastvisited' => 'All Ännerungen op ee Bléck: $1',
 'enotif_lastdiff' => 'Kuckt $1 fir dës Ännerung.',
 'enotif_anon_editor' => 'Anonyme Benotzer $1',
@@ -2230,6 +2229,8 @@ $UNWATCHURL
 
 Reaktiounen a méi Hëllef:
 {{canonicalurl:{{MediaWiki:Helppage}}}}',
+'created' => 'gemaach',
+'changed' => 'geännert',
 
 # Delete
 'deletepage' => 'Säit läschen',
@@ -2300,6 +2301,7 @@ Kuckt d'[[Special:ProtectedPages|Lëscht vun de gespaarte Säite]] fir eng Lësc
 'prot_1movedto2' => '[[$1]] gouf op [[$2]] geréckelt',
 'protect-badnamespace-title' => 'Nummraum deen net gespaart ka ginn',
 'protect-badnamespace-text' => 'Säiten an dësem Nummraum kënnen net gespaart ginn.',
+'protect-norestrictiontypes-title' => 'Säit kann net gespaart ginn',
 'protect-legend' => "Confirméiert d'Protectioun",
 'protectcomment' => 'Grond:',
 'protectexpiry' => 'Dauer vun der Spär:',
@@ -2315,9 +2317,9 @@ Hei sinn déi aktuell Astellungen fir d'Säit '''$1''':",
 Hei sinn déi aktuell Astellunge fir d'Säit '''$1''':",
 'protect-cascadeon' => "Dës Säit ass elo gespaart well si an déi folgend {{PLURAL:$1|Säit|Säiten}} agebonn ass déi duerch eng Kaskadespär gespaart {{PLURAL:$1|ass|sinn}}. De Protectiounsniveau ka fir dës Säit geännert ginn, dat huet awer keen Afloss op d'Kaskadespär.",
 'protect-default' => 'All Benotzer erlaben',
-'protect-fallback' => 'Eng "$1"-Autorisatioun gëtt gebraucht.',
-'protect-level-autoconfirmed' => 'Spär fir nei an net ugemellte Benotzer',
-'protect-level-sysop' => 'Nëmmen Administrateuren',
+'protect-fallback' => 'Nëmme Benotzer mat enger "$1"-Autorisatioun erlaben.',
+'protect-level-autoconfirmed' => 'Nëmmen automatesch ugemellte Benotzer erlaben',
+'protect-level-sysop' => 'Nëmmen Administrateuren erlaben',
 'protect-summary-cascade' => 'Protectioun a Kaskaden',
 'protect-expiring' => 'bis $1 (UTC)',
 'protect-expiring-local' => 'bis $1',
@@ -2412,7 +2414,7 @@ $1',
 'blanknamespace' => '(Haapt)',
 
 # Contributions
-'contributions' => 'Kontributioune vum Benotzer $1',
+'contributions' => 'Kontributioune {{GENDER:$1|vum Benotzer $1}}',
 'contributions-title' => 'Kontributioune vum $1',
 'mycontris' => 'Kontributiounen',
 'contribsub2' => 'Fir $1 ($2)',
@@ -2609,13 +2611,13 @@ Fir d'Datebank ze spären oder fir d'Spär opzehiewen muss dëse Fichier vum Web
 'move-page' => 'Réckel $1',
 'move-page-legend' => 'Säit réckelen',
 'movepagetext' => "Wann dir dëse Formulaire benotzt, réckelt dir eng komplett Säit mat hirem Historique op en neien Numm.
-Den alen Titel déngt als Viruleedung op déi nei Säit.
+Den alen Titel gëtt eng Viruleedung op déi nei Säit.
 Dir kënnt Viruleedungen déi op déi al Säit ginn automatesch aktualiséieren.
-Wann Dir dat net maacht, da vergewëssert iech datt keng [[Special:DoubleRedirects|duebel]] oder [[Special:BrokenRedirects|futtis Viruleedungen]] am Spill sinn.
-Dir sidd responsabel datt d'Linke weiderhinn dohinner pointéieren, wou se hi sollen.
+Wann Dir dat net maacht, da vergewëssert Iech datt keng [[Special:DoubleRedirects|duebel]] oder [[Special:BrokenRedirects|futtis Viruleedungen]] am Spill sinn.
+Dir sidd responsabel datt d'Linke weiderhin dohinner pointéieren, wou se hi sollen.
 
 Beuecht w.e.g. datt d'Säit '''net''' geréckelt gëtt, wann et schonns eng Säit mat deem Titel gëtt, ausser déi ass eidel, ass eng Viruleedung oder huet keen Historique.
-Dëst bedeit datt dir eng Säit ëmbenenne kënnt an datt dir keng Säit iwwerschreiwe kënnt, déi et schonns gëtt.
+Dëst bedeit datt dir eng Säit zréck op hiren ursprénglechen Numm ëmbenenne kënnt wann Dir Iech geiert hat an datt dir keng Säit iwwerschreiwe kënnt, déi et schonns gëtt.
 
 '''OPGEPASST!'''
 Dëst kann en drastesche Changement fir eng populär Säit bedeiten;
@@ -2955,7 +2957,13 @@ Dëst warscheinlech duerch en externe Link den op der schwaarzer Lëscht (blackl
 'pageinfo-redirectsto-info' => 'Informatioun',
 'pageinfo-contentpage' => 'Als Säit mat Inhalt gezielt',
 'pageinfo-contentpage-yes' => 'Jo',
+'pageinfo-protect-cascading' => 'Säite mat Kaskadespär vun hei aus',
 'pageinfo-protect-cascading-yes' => 'Jo',
+'pageinfo-protect-cascading-from' => 'Säite mat Kaskadespär vu(n)',
+'pageinfo-category-info' => "Informatiounen iwwer d'Kategorie",
+'pageinfo-category-pages' => 'Zuel vun de Säiten',
+'pageinfo-category-subcats' => 'Zuel vun den Ënnerkategorien',
+'pageinfo-category-files' => 'Zuel vun de Fichieren',
 
 # Skin names
 'skinname-standard' => 'Klassesch',
@@ -3012,6 +3020,7 @@ Duerch d'Opmaache vum Fichier kann Äre System beschiedegt ginn.",
 'file-nohires' => 'Et gëtt keng méi héich Opléisung.',
 '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-preview' => 'Gréisst vun dësem Preview: $1.',
 'show-big-image-other' => 'Aner {{PLURAL:$2|Opléisung|Opléisungen}}: $1.',
@@ -3040,6 +3049,8 @@ Duerch d'Opmaache vum Fichier kann Äre System beschiedegt ginn.",
 'minutes' => '{{PLURAL:$1|enger Minutt|$1 Minutten}}',
 'hours' => '{{PLURAL:$1|enger Stonn|$1 Stonnen}}',
 'days' => '{{PLURAL:$1|engem Dag|$1 Deeg}}',
+'months' => '{{PLURAL:$1|ee Mount|$1 Méint}}',
+'years' => '{{PLURAL:$1|ee Joer|$1 Joer}}',
 'ago' => 'viru(n) $1',
 'just-now' => 'grad elo',
 
@@ -3673,7 +3684,7 @@ Den ugefrote Fichier gëtt direkt gewise respektiv mat enger verbonner Applikati
 'specialpages-group-highuse' => 'Dacks benotzte Säiten',
 'specialpages-group-pages' => 'Lëschte vu Säiten',
 'specialpages-group-pagetools' => 'Handwierksgeschir fir Säiten',
-'specialpages-group-wiki' => 'Systemdaten an Handwierksgeschir',
+'specialpages-group-wiki' => 'Daten an Handwierksgeschir',
 'specialpages-group-redirects' => 'Spezialsäiten déi viruleeden',
 'specialpages-group-spam' => 'Handwierksgeschir géint de Spam',
 
@@ -3767,8 +3778,10 @@ Den ugefrote Fichier gëtt direkt gewise respektiv mat enger verbonner Applikati
 'logentry-newusers-newusers' => 'De Benotzerkont $1 gouf ugeluecht',
 'logentry-newusers-create' => 'De Benotzerkont $1 gouf ugeluecht',
 'logentry-newusers-create2' => 'De Benotzerkont $3 gouf vum $1 ugeluecht',
+'logentry-newusers-byemail' => "De Benotzerkont $3 gouf vum $1 ugeluecht an d'Passwuert gouf per E-Mail geschéckt.",
 'logentry-newusers-autocreate' => 'De Benotzerkont $1 gouf automatesch ugeluecht',
-'newuserlog-byemail' => "d'Passwuert gouf per E-Mail geschéckt",
+'logentry-rights-autopromote' => "De Benotzer $1 huet d'Benotzerrechter automatesch vu(n) $4 op $5 geännert",
+'rightsnone' => '(keen)',
 
 # Feedback
 'feedback-bugornote' => 'Wann Dir bereet sidd fir en technesche Problem am Detail ze beschreiwen da [$1 mellt w.e.g. e Feeler (Bug)].
@@ -3822,6 +3835,7 @@ Soss kënnt Dir den einfache Formulär hei drënner benotzen. Är Bemierkung gë
 'api-error-ok-but-empty' => 'Interne Feeler: keng Äntwert vum Server.',
 'api-error-overwrite' => "D'Iwwerschreiwe vun engem Fichier ass net erlaabt.",
 'api-error-stashfailed' => 'Interne Feeler: de Server konnt den temporäre Fichier net späicheren.',
+'api-error-publishfailed' => 'Interne Feeler: de Server konnt den temporäre Fichier net publizéieren.',
 'api-error-timeout' => 'De Server huet net bannen där Zäit geäntwert déi virgesinn ass.',
 'api-error-unclassified' => 'En onbekannte Feeler ass geschitt',
 'api-error-unknown-code' => 'Onbekannte Feeler: "$1"',
index b6980d7..d596c8b 100644 (file)
@@ -597,7 +597,7 @@ $messages = array(
 'prefs-edits' => 'Дьузар хъувунрин кьадар',
 'prefsnologin' => 'Куьне гьахьнавач',
 'changepassword' => 'Парол дегишарун',
-'prefs-skin' => 'КЪайдадиз ттунин тема',
+'prefs-skin' => 'Къайдадиз ттунин тема',
 'skin-preview' => 'Сифтедин килигун',
 'datedefault' => 'Туькlуьрмир',
 'prefs-beta' => 'Бета-мумкинвилер',
@@ -613,7 +613,7 @@ $messages = array(
 'prefs-changeemail' => 'Э-почта дегишарун',
 'prefs-setemail' => 'Э-почта эцигна туькIуьрун',
 'prefs-email' => 'E-mail туькlуьрунин кьадарар',
-'prefs-rendering' => 'КЪецепатан  акунар',
+'prefs-rendering' => 'Къецепатан акунар',
 'saveprefs' => 'Хуьн',
 'resetprefs' => 'Хуьн тавунвай дегишвилер алудун',
 'restoreprefs' => 'Авайл хьиз кьунвай низамарунар туькIуьр хъувун',
@@ -689,9 +689,11 @@ $messages = array(
 'right-browsearchive' => 'Алуднавай ччинар жугъурун',
 'right-undelete' => 'Алуднавай ччинар туькIуьр хъувун',
 
+# Special:Log/newusers
+'newuserlogpage' => 'Уртахар регистрация авунин журнал',
+
 # User rights log
 'rightslog' => 'Эхтияр Ишлемишчидин дафтlар',
-'rightsnone' => '(садни)',
 
 # Associated actions - in the sentence "You do not have permission to X"
 'action-read' => 'И ччин кIелун',
@@ -918,9 +920,6 @@ $messages = array(
 'listusers-noresult' => 'Иштиракчияр жагъуриз хьанвач',
 'listusers-blocked' => '(блокарнава)',
 
-# Special:Log/newusers
-'newuserlogpage' => 'Уртахар регистрация авунин журнал',
-
 # Special:ListGroupRights
 'listgrouprights-group' => 'КIеретI',
 'listgrouprights-members' => '(уьзвийрин сиягь)',
@@ -952,6 +951,9 @@ $messages = array(
 'watching' => 'Килигун...',
 'unwatching' => 'Амма клигнай',
 
+'created' => 'туькIуьрнава',
+'changed' => 'дегишнава',
+
 # Delete
 'deletepage' => 'Къакъудун хъувун',
 'confirm' => 'Тестикьун',
@@ -1321,6 +1323,9 @@ Cиягьда авай анжах (* лишандихъ галаз эгечIза
 # Special:ComparePages
 'compare-page1' => 'Чар 1',
 
+# New logging system
+'rightsnone' => '(садни)',
+
 # Feedback
 'feedback-subject' => 'Тема:',
 'feedback-message' => 'Чар:',
index 6fe00d0..4e0d64b 100644 (file)
@@ -687,6 +687,8 @@ Si tu vole sutrae la paje de tu lista de pajes oservada en la futur, clica a \"n
 'watching' => 'Oserva...',
 'unwatching' => 'No oserva...',
 
+'created' => 'Creada',
+
 # Delete
 'deletepage' => 'Sutrae la paje',
 'confirm' => 'Aproba',
index eff69e3..d0be172 100644 (file)
@@ -728,7 +728,6 @@ Ekyasemba okuyingizibwa mu lukalala olw'ebifuddeyo lwa lwo bibino okwongera okuk
 'template-protected' => '(luno lusibidwa)',
 'template-semiprotected' => '(ebimu ku lupapula luno bisibidwa)',
 'hiddencategories' => 'Olupapula luno lusangibwa mu {{PLURAL:$1|ttuluba erikise limu|matuluba amakise $1}}:',
-'nocreatetitle' => 'Okukolawo empapula kuliko obukwakkulizo',
 'nocreatetext' => "Ku {{SITENAME}} tosobola okukolawo empapula mpya nga tokozesa buyinza obw'obwamemba. Kati oyinza kugenda n'okyusamu olupapula olulala olwakolebwa dda, oba oyinza [[Special:UserLogin|okufuna obuyinza obw'obwamemba]].",
 'nocreate-loggedin' => 'Tolina buyinza bwa kukolawo empapula mpya.',
 'sectioneditnotsupported-title' => 'Okukyusa mu bitundu tekukkirizibwa',
@@ -900,6 +899,9 @@ W'owandikira by'onoonya bw'osoosawo akagambo ''all:'', okunoonya kubuna Wikipedi
 
 'grouppage-sysop' => '{{ns:project}}:Abateesiteesi',
 
+# Special:Log/newusers
+'newuserlogpage' => "Olukalala olw'ebifudeyo mu kukolawo akawunti empya",
+
 # User rights log
 'rightslog' => "Olukalala lw'ebifudeyo ku by'endukusa za bamemba",
 
@@ -1017,9 +1019,6 @@ W'owandikira by'onoonya bw'osoosawo akagambo ''all:'', okunoonya kubuna Wikipedi
 'linksearch-ns' => 'Kuŋaanyizo:',
 'linksearch-ok' => 'Noonya',
 
-# Special:Log/newusers
-'newuserlogpage' => "Olukalala olw'ebifudeyo mu kukolawo akawunti empya",
-
 # Special:ListGroupRights
 'listgrouprights-members' => '(lukalala lwa bamemba)',
 
index cd3c801..f050977 100644 (file)
@@ -869,7 +869,6 @@ De lèste logbookregel vólg hier:",
 'template-protected' => '(besjirmp)',
 'template-semiprotected' => '(semi-besjörmp)',
 'hiddencategories' => 'Dees pagina vélt in de volgende verborge {{PLURAL:$1|categorie|categorië}}:',
-'nocreatetitle' => "'t Aanmake van pagina's is beperk",
 'nocreatetext' => "{{SITENAME}} haet de mäögelikheid óm nuuj pagina's te make beperk.
 De kans al besjtaonde pagina's verangere, of de kans [[Special:UserLogin|dich aanmelde of 'n gebroekersaccount aanmake]].",
 'nocreate-loggedin' => "De höbs gein rechte óm nuuj pagina's te make.",
@@ -1407,12 +1406,13 @@ Deze informatie is zichbaar veur angere gebroekers.',
 'right-sendemail' => 'Versjik e-mail aan anger gebroekers',
 'right-passwordreset' => 'Bekiek e-mails van ópnuuj ingestèldje wachwäörd',
 
+# Special:Log/newusers
+'newuserlogpage' => 'Logbook nuuj gebroekers',
+'newuserlogpagetext' => 'Hiej ónger saton de nuuj ingesjreve gebroekers.',
+
 # User rights log
 'rightslog' => 'Gebroekersrechtelogbook',
 'rightslogtext' => 'Hiej onger staon de wieziginge in gebroekersrechte.',
-'rightslogentry' => 'wiezigde de gebroekersrechte veur $1 van $2 nao $3',
-'rightslogentry-autopromote' => 'is autematis gepromoveerdj vanne groep "$2" nao de groep "$3"',
-'rightsnone' => '(gein)',
 
 # Associated actions - in the sentence "You do not have permission to X"
 'action-read' => 'dees pagina te bekieke',
@@ -2037,10 +2037,6 @@ Haet mèndestes e toepleveldomein, wie beveurbeildj "*.org".<br />
 'activeusers-hidesysops' => 'Verberg admins',
 'activeusers-noresult' => 'Gein gebroekers gevónje.',
 
-# Special:Log/newusers
-'newuserlogpage' => 'Logbook nuuj gebroekers',
-'newuserlogpagetext' => 'Hiej ónger saton de nuuj ingesjreve gebroekers.',
-
 # Special:ListGroupRights
 'listgrouprights' => 'Rechte van gebroekersgróppe',
 'listgrouprights-summary' => 'Op dees pazjena sjtaon de gebroekersgróppe in deze wiki besjreve, mit zien biebehurende rechte.
@@ -2162,6 +2158,8 @@ $UNWATCHURL
 
 Commentaar en wiejer assistentie:
 {{canonicalurl:{{MediaWiki:Helppage}}}}',
+'created' => 'aangemaak',
+'changed' => 'verangerd',
 
 # Delete
 'deletepage' => 'Pagina ewegsjaffe',
@@ -3649,7 +3647,7 @@ Aafbeildinge waere in häör vollejige resolutie getoeandj. Anger bestandjstypes
 'logentry-newusers-create' => "$1 haet 'ne gebroeker aangemaak",
 'logentry-newusers-create2' => "$1 haet 'ne gebroeker $3 aangemaak",
 'logentry-newusers-autocreate' => 'De gebroeker $1 is autematis aangemaak',
-'newuserlog-byemail' => 'wachwaord is versjik per e-mail',
+'rightsnone' => '(gein)',
 
 # Feedback
 'feedback-bugornote' => 'Es se zewied bös óm e technisch perbleem in détail te besjrieve, [$1 rapperteer \'ne bug]. 
index 18a6cd8..6442f4a 100644 (file)
@@ -651,6 +651,9 @@ Leggenda: (corr) = differense co-a verscion corrente, (prec) = differense co-a v
 
 'grouppage-sysop' => '{{ns:project}}:Amministratoî',
 
+# Special:Log/newusers
+'newuserlogpage' => 'Nêuvi utenti',
+
 # User rights log
 'rightslog' => "Diritti d'ûtente",
 
@@ -864,9 +867,6 @@ Ti te peu strinza a vista se ti te çerni un tipo de registro, un nomme de un ut
 'listusers-submit' => 'Fanni vedde',
 'listusers-noresult' => 'Utente non trovöo.',
 
-# Special:Log/newusers
-'newuserlogpage' => 'Nêuvi utenti',
-
 # Special:ListGroupRights
 'listgrouprights-members' => '(Elenco di membri)',
 
@@ -905,6 +905,7 @@ Ti te peu strinza a vista se ti te çerni un tipo de registro, un nomme de un ut
 'unwatching' => 'Scassâ da-i osservæ speçiâli',
 
 'enotif_anon_editor' => 'ûtente anònnimo $1',
+'changed' => 'cangiâ',
 
 # Delete
 'deletepage' => 'Scassa a paggina',
index a76dd63..eaf2125 100644 (file)
@@ -7,6 +7,7 @@
  * @ingroup Language
  * @file
  *
+ * @author Andrijko Z.
  * @author Erdemaslancan
  * @author Ohpuu
  * @author Warbola
@@ -372,6 +373,9 @@ Legend: '''({{int:cur}})''' = vaiţīd līdzinţõmizõks lǟndz redaktsijõks,,
 
 'grouppage-sysop' => '{{ns:project}}:Administrātord',
 
+# Special:Log/newusers
+'newuserlogpage' => 'Kȭlbatijizt lūomiz log',
+
 # User rights log
 'rightslog' => 'Kȭlbatijiz õigõmt log',
 
@@ -488,9 +492,6 @@ Legend: '''({{int:cur}})''' = vaiţīd līdzinţõmizõks lǟndz redaktsijõks,,
 'linksearch' => 'Uļļizt siḑīmõd',
 'linksearch-line' => '$1 um sidtõd līedst $2',
 
-# Special:Log/newusers
-'newuserlogpage' => 'Kȭlbatijizt lūomiz log',
-
 # Special:ListGroupRights
 'listgrouprights-members' => '(nõtkõmd nimkēra)',
 
@@ -560,7 +561,7 @@ Legend: '''({{int:cur}})''' = vaiţīd līdzinţõmizõks lǟndz redaktsijõks,,
 'blanknamespace' => '(Kēratõkst)',
 
 # Contributions
-'contributions' => 'Kȭlbatijiz kubsõtīe',
+'contributions' => '{{GENDER:$1|Kȭlbatijiz}} kubsõtīe',
 'contributions-title' => 'Kȭlbatijiz $1 kubsõtīe',
 'mycontris' => 'Min kubsõtīed',
 'contribsub2' => 'Kȭlbatiji $1 ($2) pierāst',
index 9a48f44..bc88182 100644 (file)
@@ -723,9 +723,11 @@ Pröa a giuntagh denanz a la tò ricerca ''all:'' per cercà in tücc i namespac
 'right-edit' => 'Edita pàgini',
 'right-createaccount' => 'Crea cünt de dovratt bej-e növ',
 
+# Special:Log/newusers
+'newuserlogpage' => 'Rrgister di druvat növ',
+
 # User rights log
 'rightslog' => 'Dirit di druvat',
-'rightslogentry' => "l'ha mudifegaa $1 dal grüp $2 al grüp $3",
 
 # Associated actions - in the sentence "You do not have permission to X"
 'action-edit' => 'mudifega quela pagina chì',
@@ -939,9 +941,6 @@ La descrizión sura la sua [$2 pagina de descrizión del file] l'è mustrada ch
 # Special:ActiveUsers
 'activeusers-from' => 'Fàm vedè i dupradur a partì da:',
 
-# Special:Log/newusers
-'newuserlogpage' => 'Rrgister di druvat növ',
-
 # Special:ListGroupRights
 'listgrouprights' => 'Dirit del grüp di druvat',
 'listgrouprights-members' => '(Lista di member)',
@@ -996,6 +995,7 @@ Per mudifegà l\'impustazión de la lista di paginn che te tegn d\'ögg, varda
 
 Per fà di cumünicazion de servizzi e per cercà jüt:
 {{canonicalurl:{{MediaWiki:Helppage}}}}',
+'changed' => 'cambiaa',
 
 # Delete
 'deletepage' => 'Scancela la pagina',
index 3d0999f..d63187d 100644 (file)
@@ -25,6 +25,9 @@ $messages = array(
 'tog-showtoolbar' => 'Komɔ́nisa ndámbo-ndámbo (esengélí JavaScript)',
 'tog-rememberpassword' => 'Komíkundola bokitoli na molúki (ekosúkisa na {{PLURAL:$1|mokɔlɔ|mikɔlɔ}} $1)',
 
+'underline-always' => 'Mikɔlɔ yɔ́nsɔ',
+'underline-never' => 'Libélá tɛ́',
+
 # Dates
 'sunday' => 'Lomíngo',
 'monday' => 'mokɔlɔ ya libosó',
@@ -88,6 +91,7 @@ $messages = array(
 'article' => 'ekakoli',
 'newwindow' => '(ekofúngola na lininísa lya sika)',
 'cancel' => 'Kozóngela',
+'mypage' => 'Lonkásá',
 'mytalk' => 'Ntembe na ngáí',
 'navigation' => 'Botamboli',
 'and' => '&#32;mpé',
@@ -96,6 +100,8 @@ $messages = array(
 'qbfind' => 'Koluka',
 'qbbrowse' => 'Kolúka',
 'qbedit' => 'Kobɔngisa',
+'qbpageoptions' => 'Lonkásá óyo',
+'qbmyoptions' => 'Lonkásá na ngáí',
 'qbspecialpages' => 'Nkásá gudi',
 'faq' => 'Mitúná Mizóngelaka (MM)',
 
@@ -144,6 +150,7 @@ $messages = array(
 'talkpagelinktext' => 'Ntembe',
 'specialpage' => 'Lonkásá gudi',
 'personaltools' => 'Bisáleli ya moto-mɛ́i',
+'postcomment' => 'Sɛksió sika',
 'articlepage' => 'Komɔ́nisa káti',
 'talk' => 'Ntembe',
 'views' => 'Bomɔ́nisi',
@@ -235,6 +242,7 @@ Ezalí listɛ́ ya nkásá gudi bizalí  na [[Special:SpecialPages|{{int:special
 'yourpassword' => 'Banda nayó:',
 'yourpasswordagain' => 'Banda naíno:',
 'remembermypassword' => 'Mɛ́i-komíkitola na molúki moye mbala ilandí (ekosúkisa na {{PLURAL:$1|mokɔlɔ|mikɔlɔ}} $1)',
+'yourdomainname' => 'Dɔmɛ́nɛ na yɔ̌:',
 'login' => 'komíkitola (log in)',
 'nav-login-createaccount' => 'Komíkomisa tǒ kokɔtɔ',
 'userlogin' => 'Komíkomisa tǒ komíkitola',
@@ -243,6 +251,7 @@ Ezalí listɛ́ ya nkásá gudi bizalí  na [[Special:SpecialPages|{{int:special
 'userlogout' => 'Kolongwa',
 'nologin' => "Omíkomísí naíno tɛ̂? '''$1'''.",
 'nologinlink' => 'Míkomísá yɔ̌-mɛ́i',
+'createaccount' => 'Míkomísá yɔ̌-mɛ́i',
 'gotaccount' => "Omíkomísí naíno ? '''$1'''.",
 'gotaccountlink' => 'komíkitola (log in)',
 'createaccountmail' => 'na mokánda',
@@ -404,6 +413,9 @@ Ezalí listɛ́ ya nkásá gudi bizalí  na [[Special:SpecialPages|{{int:special
 
 'group-sysop-member' => 'Moyángeli',
 
+# Special:Log/newusers
+'newuserlogpage' => 'Zuluná ya bokeli bwa konti ya mosáleli',
+
 # User rights log
 'rightslog' => 'Zuluná ya makokí ma basáleli',
 
@@ -514,9 +526,6 @@ Ezalí listɛ́ ya nkásá gudi bizalí  na [[Special:SpecialPages|{{int:special
 # Special:Categories
 'categories' => 'Ndéngé',
 
-# Special:Log/newusers
-'newuserlogpage' => 'Zuluná ya bokeli bwa konti ya mosáleli',
-
 # E-mail user
 'emailuser' => 'Kotíndela yě mɛ́lɛ',
 'defemailsubject' => '{{SITENAME}} mokánda',
@@ -542,6 +551,8 @@ Ezalí listɛ́ ya nkásá gudi bizalí  na [[Special:SpecialPages|{{int:special
 'watching' => 'Kolanda...',
 'unwatching' => 'Kolanda tɛ́...',
 
+'created' => 'ekomákí',
+
 # Delete
 'deletepage' => 'Kolímwisa lonkásá loye',
 'dellogpage' => 'zuluná ya bolímwisi',
index 75de322..7e9dcd7 100644 (file)
@@ -535,6 +535,10 @@ $messages = array(
 # User rights
 'editinguser' => 'ຜູ້ໃຊ້ <b>$1</b> ພວມດັດແກ້ ([[User talk:$1|{{int:talkpagelinktext}}]] | [[Special:Contributions/$1|{{int:contribslink}}]])',
 
+# Special:Log/newusers
+'newuserlogpage' => 'ບັນທຶກການສ້າງບັນຊີຜູ້ໃຊ້',
+'newuserlogpagetext' => 'ນີ້ແມ່ນ ບັນທຶກການສ້າງ ບັນຊີຜູ້ໃຊ້ໃໝ່',
+
 # Recent changes
 'nchanges' => '$1 {{PLURAL:$1|ການປ່ຽນແປງ|ການປ່ຽນແປງ}}',
 'recentchanges' => 'ການດັດແກ້ຫຼ້າສຸດ',
@@ -683,10 +687,6 @@ Also see [[Special:WantedCategories|wanted categories]].',
 # Special:ListUsers
 'listusers-submit' => 'ສະແດງ',
 
-# Special:Log/newusers
-'newuserlogpage' => 'ບັນທຶກການສ້າງບັນຊີຜູ້ໃຊ້',
-'newuserlogpagetext' => 'ນີ້ແມ່ນ ບັນທຶກການສ້າງ ບັນຊີຜູ້ໃຊ້ໃໝ່',
-
 # E-mail user
 'emailuser' => 'ສົ່ງອີເມລ ຫາ ຜູ້ໃຊ້ນີ້',
 'emailpage' => 'ສົ່ງອີເມລ ຫາ ຜູ້ໃຊ້',
@@ -722,6 +722,8 @@ Also see [[Special:WantedCategories|wanted categories]].',
 'unwatching' => 'ພວມເຊົາຕິດຕາມ...',
 
 'enotif_lastvisited' => 'ເບິ່ງ $1 ເພື່ອ ທຸກໆການປ່ຽນແປງ ຕັ້ງແຕ່ເທື່ອສຸດທ້າຍ ທີ່ ທ່ານເຂົ້າຫາ.',
+'created' => 'ສ້າງແລ້ວ',
+'changed' => 'ປ່ຽນແລ້ວ',
 
 # Delete
 'confirm' => 'ຢືນຢັນ',
index 44fcc3d..6f66906 100644 (file)
@@ -504,7 +504,6 @@ Informasi: (bye) = petuho a nca selt,
 
 # User rights log
 'rightslog' => 'Desu di petuhoni kwa sebelu',
-'rightsnone' => '(ni)',
 
 # Recent changes
 'nchanges' => '$1 {{PLURAL:$1|petuho|petuho}}',
@@ -734,6 +733,8 @@ A sa afi kulobala di zwa mukoloko di kentezi, tampi \"ngambu kentezi\".",
 'unwatching' => 'Dikentezi...',
 
 'enotif_impersonal_salutation' => '{{SITENAME}} sebelu',
+'created' => 'hlolini',
+'changed' => 'petuhoni',
 
 # Delete
 'deletepage' => 'Afi kulobala petulo',
@@ -1078,4 +1079,7 @@ Xete ling'ki kwa lina sa konsidisize desepo. Petulo dimedi inlinenikusize.",
 # Special:SpecialPages
 'specialpages' => 'Petulo zwenti',
 
+# New logging system
+'rightsnone' => '(ni)',
+
 );
index 118933b..b58684d 100644 (file)
@@ -7,6 +7,7 @@
  * @ingroup Language
  * @file
  *
+ * @author Audriusa
  * @author Auwris
  * @author Break Through Pain
  * @author Dark Eagle
@@ -315,6 +316,7 @@ $messages = array(
 'newwindow' => '(atsidaro naujame lange)',
 'cancel' => 'Atšaukti',
 'moredotdotdot' => 'Daugiau...',
+'morenotlisted' => 'Daugiau nėra',
 'mypage' => 'Naudotojo puslapis',
 'mytalk' => 'Mano aptarimas',
 'anontalk' => 'Šio IP aptarimas',
@@ -338,7 +340,7 @@ $messages = array(
 'vector-action-protect' => 'Užrakinti',
 'vector-action-undelete' => 'Atkurti',
 'vector-action-unprotect' => 'Keisti apsaugą',
-'vector-simplesearch-preference' => 'Įjungti išplėstinius paieškos pasiūlymus (tik „Vector“ išvaizda)',
+'vector-simplesearch-preference' => 'Supaprastinta paieška (tik „Vector“ išvaizda)',
 'vector-view-create' => 'Kurti',
 'vector-view-edit' => 'Redaguoti',
 'vector-view-history' => 'Istorija',
@@ -500,9 +502,9 @@ Egzistuojančių specialiųjų puslapių sąrašą galite rasti [[Special:Specia
 # General errors
 'error' => 'Klaida',
 'databaseerror' => 'Duomenų bazės klaida',
-'dberrortext' => 'Įvyko duomenų bazės užklausos sintaksės klaida.
-Tai gali reikšti klaidą programinėje įrangoje.
-Paskutinė mėginta duomenų bazės užklausa buvo:
+'dberrortext' => 'Neteisinga duomenų bazės užklausos sintaksė.
+Galima klaida programinėje įrangoje.
+Paskutinė mėginta užklausa:
 <blockquote><tt>$1</tt></blockquote>
 iš funkcijos: „<tt>$2</tt>“.
 Duomenų bazė grąžino klaidą „<tt>$3: $4</tt>“.',
@@ -690,6 +692,7 @@ Palaukite prieš bandant vėl.',
 # E-mail sending
 'php-mail-error-unknown' => 'Nežinoma klaida PHP mail() funkcijoje',
 'user-mail-no-addy' => 'Bandyta išsiųsti elektroninį laišką be el. pašto adreso.',
+'user-mail-no-body' => 'Mėginta siųsti tuščia ar pernelyg trumpą E-pašto žinutė.',
 
 # Change password dialog
 'resetpass' => 'Keisti slaptažodį',
@@ -737,6 +740,7 @@ Laikinas slaptažodis: $2',
 'changeemail-oldemail' => 'Dabartinis el. pašto adresas:',
 'changeemail-newemail' => 'Naujas el. pašto adresas:',
 'changeemail-none' => '(nėra)',
+'changeemail-password' => 'Jūsų {{SITENAME}} slaptažodis:',
 'changeemail-submit' => 'Keisti el. pašto adresą',
 'changeemail-cancel' => 'Atšaukti',
 
@@ -908,7 +912,6 @@ Naujausias įrašas žurnale yra pateiktas žemiau:",
 'template-semiprotected' => '(pusiau apsaugotas)',
 'hiddencategories' => 'Šis puslapis priklauso $1 {{PLURAL:$1|paslėptai kategorijai|paslėptoms kategorijoms|paslėptų kategorijų}}:',
 'edittools' => '<!-- Šis tekstas bus rodomas po redagavimo ir įkėlimo formomis. -->',
-'nocreatetitle' => 'Puslapių kūrimas apribotas',
 'nocreatetext' => '{{SITENAME}} apribojo galimybę kurti naujus puslapius.
 Jūs galite grįžti ir redaguoti jau esantį puslapį, arba [[Special:UserLogin|prisijungti arba sukurti paskyrą]].',
 'nocreate-loggedin' => 'Jūs neturite teisės kurti puslapius.',
@@ -933,6 +936,14 @@ Greičiausiai jis yra ištrintas.',
 'edit-already-exists' => 'Negalima sukurti naujo puslapio.
 Jis jau egzistuoja.',
 'defaultmessagetext' => 'Numatytasis pranešimo tekstas',
+'invalid-content-data' => 'Neleistinas turinys.',
+'content-not-allowed-here' => 'Turinys "$1" puslapyje [[$2]] nėra leistinas.',
+
+# Content models
+'content-model-wikitext' => 'wikitekstas',
+'content-model-text' => 'paprastasis tekstas',
+'content-model-javascript' => 'JavaScript',
+'content-model-css' => 'CSS',
 
 # Parser/template warnings
 'expensive-parserfunction-warning' => 'Įspėjimas: Šiame puslapyje yra per daug užtrunkančių analizatoriaus funkcijų šaukinių.
@@ -1083,7 +1094,8 @@ Prašome patikrinti sąrašus.',
 'revdelete-only-restricted' => 'Klaida slepiant $1 $2 elementą: jūs negalite paslėpti elementų nuo administratorių peržiūros nepasirenkant vieno iš kitų matomumo nustatymų.',
 'revdelete-reason-dropdown' => '*Dažnos trynimo priežastys
 ** Autorinių teisių pažeidimas
-** Netinkama asmeninė informacija
+** Netinkamas komentaras ar asmeninė informacija
+** Netinkamas naudotojo vardas
 ** Informacija, kuri gali būti šmeižikiška',
 'revdelete-otherreason' => 'Kita/papildoma priežastis:',
 'revdelete-reasonotherlist' => 'Kita priežastis',
@@ -1439,15 +1451,13 @@ teisės",
 'right-sendemail' => 'Siųsti el. laišką kitiems naudotojams',
 'right-passwordreset' => 'Peržiūrėti slaptažodžio pakeitimo e-mail laiškus',
 
+# Special:Log/newusers
+'newuserlogpage' => 'Prisiregistravę naudotojai',
+'newuserlogpagetext' => 'Tai naudotojų kūrimo sąrašas.',
+
 # User rights log
 'rightslog' => 'Naudotojų teisių pakeitimai',
 'rightslogtext' => 'Pateikiamas naudotojų teisių pakeitimų sąrašas.',
-'rightslogentry' => 'pakeista $1 grupės narystė iš $2 į $3',
-'rightslogentry-autopromote' => 'buvo automatiškai paaukštintas iš $2 į $3',
-'logentry-rights-rights' => '$1 pakeista narystė grupėje $3 iš $4 į $5',
-'logentry-rights-rights-legacy' => '$1 pakeista narystė grupėje $3',
-'logentry-rights-autopromote' => '$1 buvo automatiškai pervestas iš $4 į $5',
-'rightsnone' => '(jokių)',
 
 # Associated actions - in the sentence "You do not have permission to X"
 'action-read' => 'skaityti šį puslapį',
@@ -1671,6 +1681,7 @@ Prašome susisiekti su [[Special:ListUsers/sysop|sistemos administratoriumi]].',
 'backend-fail-notsame' => 'Jau egzistuoja neidentiškas failas $1.',
 'backend-fail-invalidpath' => '$1 yra neteisinga saugojimo nuoroda.',
 'backend-fail-delete' => 'Negalima panaikinti failo $1.',
+'backend-fail-describe' => 'Nepavyko pakeisti failo metaduomenis "$1".',
 'backend-fail-alreadyexists' => 'Failas $1 jau egzistuoja.',
 'backend-fail-store' => 'Negalima išsaugoti failo $1 kaip $2.',
 'backend-fail-copy' => 'Negalima nukopijuoti failo $1 į $2.',
@@ -2058,10 +2069,6 @@ Palaikomi protokolai: <code>$1</code> (nei vieno iš jų nenurodykite paieškoje
 'activeusers-hidesysops' => 'Slėpti administratorius',
 'activeusers-noresult' => 'Nerasta jokių naudotojų.',
 
-# Special:Log/newusers
-'newuserlogpage' => 'Prisiregistravę naudotojai',
-'newuserlogpagetext' => 'Tai naudotojų kūrimo sąrašas.',
-
 # Special:ListGroupRights
 'listgrouprights' => 'Naudotojų grupių teisės',
 'listgrouprights-summary' => 'Žemiau pateiktas naudotojų grupių, apibrėžtų šioje wiki, ir su jomis susijusių teisių sąrašas.
@@ -2085,6 +2092,8 @@ Palaikomi protokolai: <code>$1</code> (nei vieno iš jų nenurodykite paieškoje
 'mailnologin' => 'Nėra adreso',
 'mailnologintext' => 'Jums reikia būti [[Special:UserLogin|prisijungusiam]] ir turi būti įvestas teisingas el. pašto adresas jūsų [[Special:Preferences|nustatymuose]], kad siųstumėte el. laiškus kitiems nautotojams.',
 'emailuser' => 'Rašyti laišką šiam naudotojui',
+'emailuser-title-target' => 'Siųsti E-pašto žinutę {{GENDER:$1|user}}',
+'emailuser-title-notarget' => 'El. pašto vartotojas',
 'emailpage' => 'Siųsti el. laišką naudotojui',
 'emailpagetext' => 'Jūs gali pasinaudoti šia forma norėdami nusiųsti el. laišką šiam naudotojui.
 El. pašto adresas, kurį įvedėte [[Special:Preferences|savo naudotojo nustatymuose]], bus rodomas kaip el. pašto siuntėjo adresas, tam, kad gavėjas galėtų jums iškart atsakyti.',
@@ -2156,6 +2165,16 @@ taip pat bus '''paryškinti''' [[Special:RecentChanges|naujausių keitimų sąra
 'enotif_mailer' => '{{SITENAME}} Pranešimų sistema',
 'enotif_reset' => 'Pažymėti visus puslapius kaip aplankytus',
 'enotif_impersonal_salutation' => '{{SITENAME}} naudotojau',
+'enotif_subject_deleted' => '{{GENDER:$2|Naudotojas}} ištrynė puslapį $1, priklausantį projektui {{SITENAME}}',
+'enotif_subject_created' => '{{GENDER:$2|Naudotojas}} sukūrė puslapį $1, priklausantį projektui {{SITENAME}}',
+'enotif_subject_moved' => '{{GENDER:$2|Naudotojas}} pervardino puslapį $1, priklausantį projektui {{SITENAME}}',
+'enotif_subject_restored' => '{{GENDER:$2|Naudotojas}} atstatė puslapį $1, priklausantį projektui {{SITENAME}}',
+'enotif_subject_changed' => '{{GENDER:$2|Naudotojas}} redagavo puslapį $1, priklausantį projektui {{SITENAME}}',
+'enotif_body_intro_deleted' => '$PAGEEDITDATE {{GENDER:$2|Naudotojas}} ištrynė puslapį $1, priklausantį projektui {{SITENAME}}, žr.                     $3.',
+'enotif_body_intro_created' => '$PAGEEDITDATE {{GENDER:$2|Naudotojas}} sukūrė puslapį $1, priklausantį projektui {{SITENAME}}. Dabartinė versija matoma $3.',
+'enotif_body_intro_moved' => '$PAGEEDITDATE {{GENDER:$2|Naudotojas}} pervardino puslapį $1, priklausantį projektui {{SITENAME}}. Dabartinė versija matoma $3.',
+'enotif_body_intro_restored' => '$PAGEEDITDATE {{GENDER:$2|Naudotojas}} atstatė puslapį $1, priklausantį projektui {{SITENAME}}. Dabartinė versija matoma $3.',
+'enotif_body_intro_changed' => '$PAGEEDITDATE {{GENDER:$2|Naudotojas}} redagavo puslapį $1, priklausantį projektui {{SITENAME}}. Dabartinė versija matoma $3.',
 'enotif_lastvisited' => 'Užeikite į $1, jei norite matyti pakeitimus nuo paskutiniojo apsilankymo.',
 'enotif_lastdiff' => 'Užeikite į $1, jei norite pamatyti šį pakeitimą.',
 'enotif_anon_editor' => 'anoniminis naudotojas $1',
@@ -2189,6 +2208,8 @@ $UNWATCHURL
 
 Atsiliepimai ir pagalba:
 {{canonicalurl:{{MediaWiki:Helppage}}}}',
+'created' => 'sukurė',
+'changed' => 'pakeitė',
 
 # Delete
 'deletepage' => 'Trinti puslapį',
@@ -2257,6 +2278,8 @@ Dabar veikiančių puslapių apsaugų sąrašą rasite [[Special:ProtectedPages|
 'prot_1movedto2' => '[[$1]] pervadintas į [[$2]]',
 'protect-badnamespace-title' => 'Neapsaugota vardų sritis',
 'protect-badnamespace-text' => 'Puslapiai šioje vardų srityje negali būti apsaugoti.',
+'protect-norestrictiontypes-text' => 'Šis puslapis negali būti apsaugotas nes neturi galimų apribojimų tipų.',
+'protect-norestrictiontypes-title' => 'Neapsaugomas puslapis',
 'protect-legend' => 'Užrakinimo patvirtinimas',
 'protectcomment' => 'Priežastis:',
 'protectexpiry' => 'Baigia galioti:',
@@ -2922,6 +2945,10 @@ Leidžia pridėti atmetimo priežastį komentaruose',
 'pageinfo-contentpage' => 'Priskirtas turinio puslapiams',
 'pageinfo-contentpage-yes' => 'Taip',
 'pageinfo-protect-cascading-yes' => 'Taip',
+'pageinfo-category-info' => 'Informacija apie kategoriją',
+'pageinfo-category-pages' => 'Puslapių skaičius',
+'pageinfo-category-subcats' => 'Dukterinių kategorijų skaičius',
+'pageinfo-category-files' => 'Failų skaičius',
 
 # Skin names
 'skinname-standard' => 'Klasikinė',
@@ -2944,6 +2971,8 @@ Leidžia pridėti atmetimo priežastį komentaruose',
 'markedaspatrollederror' => 'Negalima pažymėti, kad patikrinta',
 'markedaspatrollederrortext' => 'Jums reikia nurodyti versiją, kurią pažymėti kaip patikrintą.',
 'markedaspatrollederror-noautopatrol' => 'Jums neleidžiama pažymėti savo paties keitimų kaip patikrintų.',
+'markedaspatrollednotify' => '$1 keitimas pažymėtas patikrintu.',
+'markedaspatrollederrornotify' => 'Nepavyko pažymėti kaip patikrinto.',
 
 # Patrol log
 'patrol-log-page' => 'Patikrinimų sąrašas',
@@ -2976,6 +3005,7 @@ Jį paleidus jūsų sistema gali būti pažeista.",
 'file-info-size-pages' => '$1 × $2 taškų, failo dydis: $3, MIME tipas: $4, $5 {{PLURAL:$5|page|pages}}',
 'file-nohires' => 'Geresnė raiška negalima.',
 'svg-long-desc' => 'SVG failas, formaliai $1 × $2 taškų, failo dydis: $3',
+'svg-long-error' => 'Neleistinas SVG failas: $1',
 'show-big-image' => 'Pilna raiška',
 'show-big-image-preview' => 'Sumažintos iliustracijos dydis: $1 .',
 'show-big-image-other' => '{{PLURAL:$2|Kita rezoliucija|Kitos $2 rezoliucijos|Kitų $2 rezoliucijų}}: $1 .',
@@ -3004,6 +3034,7 @@ Jį paleidus jūsų sistema gali būti pažeista.",
 'hours' => '{{PLURAL:$1|$1 valandą|$1 valandas|$1 valandų}}',
 'days' => '{{PLURAL:$1|$1 dieną|$1 dienas|$1 dienų}}',
 'ago' => 'prieš $1',
+'just-now' => 'tik dabar',
 
 # Bad image list
 'bad_image_list' => 'Formatas yra toks:
@@ -3616,6 +3647,7 @@ Jūs taip pat galite [[Special:EditWatchlist|naudoti standartinį redaktorių]].
 'version-license' => 'Licencija',
 'version-poweredby-credits' => "Šis projektas naudoja '''[//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. 
 
 MediaWiki yra platinama su viltimi, kad ji bus naudinga, bet BE JOKIOS GARANTIJOS; be jokios numanomos PARDAVIMO arba TINKAMUMO TAM TIKRAM TIKSLUI garantijos. Daugiau informacijos galite sužinoti GNU General Public License. 
@@ -3758,8 +3790,12 @@ Paveikslėliai yra rodomi pilna raiška, kiti failų tipai paleidžiami tiesiogi
 'logentry-newusers-newusers' => '$1 sukūrė naudotojo paskyrą',
 'logentry-newusers-create' => '$1 sukūrė naudotojo paskyrą',
 'logentry-newusers-create2' => '$1 sukūrė naudotojo paskyrą $3',
+'logentry-newusers-byemail' => 'Naudotojas $1 sukūrė paskyrą $3, slaptažodis išsiųstas E-paštu.',
 'logentry-newusers-autocreate' => 'Paskyra $1 buvo sukurta automatiškai',
-'newuserlog-byemail' => 'slaptažodis nusiųstas elektroniniu paštu',
+'logentry-rights-rights' => '$1 pakeista narystė grupėje $3 iš $4 į $5',
+'logentry-rights-rights-legacy' => '$1 pakeista narystė grupėje $3',
+'logentry-rights-autopromote' => '$1 buvo automatiškai pervestas iš $4 į $5',
+'rightsnone' => '(jokių)',
 
 # Feedback
 'feedback-bugornote' => 'Jei jūs esate pasirengę aprašyti techninę problemą išsamiau, [$1 praneškite apie programinę klaidą].
@@ -3779,6 +3815,7 @@ Kitu atveju, galite naudotis žemiau esančia paprastesne forma. Jūsų komentar
 
 # Search suggestions
 'searchsuggest-search' => 'Ieškoti',
+'searchsuggest-containing' => 'turintys',
 
 # API errors
 'api-error-badaccess-groups' => 'Jums neleidžiama įkelti failus į šią wiki.',
index b400758..d51483a 100644 (file)
@@ -453,9 +453,11 @@ n = nasvareigs lobuojums.',
 'right-upload_by_url' => 'Īsyuteit failu nu URL adresa',
 'right-delete' => 'Iztreit puslopys',
 
+# Special:Log/newusers
+'newuserlogpage' => 'Jaunūs lītuotuoju registrs',
+
 # User rights log
 'rightslog' => 'Lītuotuoju tīseibu registrs',
-'rightsnone' => '(navā)',
 
 # Associated actions - in the sentence "You do not have permission to X"
 'action-read' => 'skaiteit itū puslopu',
@@ -589,9 +591,6 @@ Lopys, kas ir tovā [[Special:Watchlist|puorraugamūs rokstu sarokstā]] ir '''r
 # Special:ListUsers
 'listusers-submit' => 'Paruodeit',
 
-# Special:Log/newusers
-'newuserlogpage' => 'Jaunūs lītuotuoju registrs',
-
 # Special:ListGroupRights
 'listgrouprights-members' => '(dalinīku saroksts)',
 'listgrouprights-addgroup' => 'Dalikt {{PLURAL:$2|grupu|grupys}}: $1',
@@ -902,4 +901,7 @@ Puorejī lauki, piec nūklusiejuma, byus nūglobuoti.
 # Special:SpecialPages
 'specialpages' => 'Specialuos puslopys',
 
+# New logging system
+'rightsnone' => '(navā)',
+
 );
index 52ba89f..645a78d 100644 (file)
@@ -607,7 +607,6 @@ I ràwn tùrin siam danglamna chanchin ziaka kan dahţhat thạr ber a hnuaiah k
 'template-protected' => '(vènhim)',
 'template-semiprotected' => '(hual)',
 'hiddencategories' => 'He phêk hi {{PLURAL:$1| pawl thuhrûk 1|pawl thuhrûk $1}}-a tel a ni.',
-'nocreatetitle' => 'Phêk siam theih chin bithliah',
 'nocreate-loggedin' => 'Phêk thar siam phalna i nei lo.',
 'sectioneditnotsupported-title' => 'Hlawm siamţhat bing theih loh',
 'sectioneditnotsupported-text' => 'He phêkah hian hlawm siamţhat bing theih a ni lo.',
@@ -946,6 +945,10 @@ Hmangtuten e-lehkha an thawn chein i e-chenhmun hrilh an ni chuang lo vang.',
 'right-hideuser' => 'Hmangtu hming dangbet rawh, vantlang laka thupin',
 'right-unblockself' => 'Mahnia dalna inphelh',
 
+# Special:Log/newusers
+'newuserlogpage' => 'Hmangtu siamna chanchin-ziak',
+'newuserlogpagetext' => 'Hei hi hmangtu siangchan siam chhinchhiahna a ni.',
+
 # Associated actions - in the sentence "You do not have permission to X"
 'action-read' => 'he phêk hi chhiar rawh',
 'action-edit' => 'phek siamṭhat',
@@ -1354,10 +1357,6 @@ Hetah hian [[Special:UnusedCategories|pawl hman lohho]] pholan tel a ni lo.
 'activeusers-hidesysops' => 'Roreltu thupna',
 'activeusers-noresult' => 'Hmangtu awm lo.',
 
-# Special:Log/newusers
-'newuserlogpage' => 'Hmangtu siamna chanchin-ziak',
-'newuserlogpagetext' => 'Hei hi hmangtu siangchan siam chhinchhiahna a ni.',
-
 # Special:ListGroupRights
 'listgrouprights' => 'Hmangtu pawl dikna-chanvote',
 'listgrouprights-key' => '* <span class="listgrouprights-granted">Dikna-chanvo phalsak</span>
@@ -1420,6 +1419,8 @@ Hetah hian [[Special:UnusedCategories|pawl hman lohho]] pholan tel a ni lo.
 'enotif_lastvisited' => 'I tlawh hnuhnùn ber hnu lama tihdanglam zawng zawng en i duh chuan $1 en rawh.',
 'enotif_lastdiff' => 'Hë tihdanglamna hi en tùrin $1 thlír rawh.',
 'enotif_anon_editor' => 'hmangtu hriat loh $1',
+'created' => 'siam a ni ta',
+'changed' => 'tihdanglam a ni ta',
 
 # Delete
 'deletepage' => 'Hë phêk hi paih rawh',
@@ -1917,7 +1918,6 @@ A bak zawng chu thuhrûk sa vek a ni ang.
 'logentry-newusers-create' => '$1 hian hmangtu siangchan a siam.',
 'logentry-newusers-create2' => '$1 hian hmangtu siangchan $3 a siam.',
 'logentry-newusers-autocreate' => 'Siangchan $1 hi amahin a insiam.',
-'newuserlog-byemail' => 'thurûk e-lehkha hmanga thawn a ni.',
 
 # Feedback
 'feedback-subject' => 'Thupui:',
index e119fd1..39ab154 100644 (file)
@@ -10,6 +10,7 @@
  * @author Dark Eagle
  * @author FnTmLV
  * @author Geimeris
+ * @author Gleb Borisov
  * @author GreenZeb
  * @author Kaganer
  * @author Karlis
@@ -64,23 +65,23 @@ $messages = array(
 'tog-editsectiononrightclick' => "Atvērt sadaļas rediģēšanas lapu, uzklikšķinot ar labo peles pogu uz sadaļas virsraksta (izmanto ''JavaScript'')",
 'tog-showtoc' => 'Parādīt satura rādītāju (lapām, kurās ir vairāk par 3 virsrakstiem)',
 'tog-rememberpassword' => 'Atcerēties manu lietotājvārdu pēc pārlūka aizvēršanas (ne vairāk kā $1 {{PLURAL:$1|diena|dienas}}).',
-'tog-watchcreations' => 'Pievienot manis radītās lapas uzraugāmo lapu sarakstam',
-'tog-watchdefault' => 'Pievienot manis izmainītās lapas uzraugāmo lapu sarakstam',
-'tog-watchmoves' => 'Pievienot manis pārvietotās lapas uzraugāmo lapu sarakstam',
-'tog-watchdeletion' => 'Pievienot manis izdzēstās lapas uzraugāmo lapu sarakstam',
+'tog-watchcreations' => 'Pievienot manis radītās lapas un manis augšuplādētos failus uzraugāmo lapu sarakstam',
+'tog-watchdefault' => 'Pievienot manis izmainītās lapas un failus uzraugāmo lapu sarakstam',
+'tog-watchmoves' => 'Pievienot manis pārvietotās lapas un failus uzraugāmo lapu sarakstam',
+'tog-watchdeletion' => 'Pievienot manis izdzēstās lapas un failus uzraugāmo lapu sarakstam',
 'tog-minordefault' => 'Atzīmēt visus labojumus jau sākotnēji par maznozīmīgiem',
 'tog-previewontop' => 'Parādīt priekšskatījumu virs rediģēšanas lauka, nevis zem',
 'tog-previewonfirst' => 'Parādīt priekšskatījumu jau uzsākot rediģēšanu',
 'tog-nocache' => 'Atslēgt pārlūka lapu saglabāšanu kešatmiņā',
-'tog-enotifwatchlistpages' => 'Paziņot pa e-pastu par uzraugāmo rakstu sarakstā esošo rakstu izmaiņām',
+'tog-enotifwatchlistpages' => 'Paziņot pa e-pastu par izmaiņām uzraugāmo rakstu sarakstā esošos rakstos un failos',
 'tog-enotifusertalkpages' => 'Paziņot pa e-pastu par izmaiņām manā diskusiju lapā',
-'tog-enotifminoredits' => 'Paziņot pa e-pastu arī par maznozīmīgiem rakstu labojumiem',
+'tog-enotifminoredits' => 'Paziņot pa e-pastu arī par maznozīmīgiem labojumiem rakstos un failos',
 'tog-enotifrevealaddr' => 'Atklāt manu e-pasta adresi paziņojumu vēstulēs',
 'tog-shownumberswatching' => 'Rādīt uzraudzītāju skaitu',
 'tog-oldsig' => 'Pašreizējais paraksts:',
 'tog-fancysig' => 'Vienkāršs paraksts (bez automātiskās saites)',
-'tog-externaleditor' => 'Pēc noklusējuma izmantot ārēju programmu lapu izmainīšanai (tikai pieredzējušiem lietotājiem, nepieciešami speciāli uzstādījumi tavā datorā (lai tas darbotos))',
-'tog-externaldiff' => 'Pēc noklusējuma izmantot ārēju programmu izmaiņu parādīšanai (tikai pieredzējušiem lietotājiem, nepieciešami speciāli uzstādījumi tavā datorā (lai tas darbotos))',
+'tog-externaleditor' => 'Pēc noklusējuma izmantot ārēju programmu lapu izmainīšanai (tikai pieredzējušiem lietotājiem, lai darbotos nepieciešami speciāli uzstādījumi tavā datorā sk. [//www.mediawiki.org/wiki/Manual:External_editor šeit])',
+'tog-externaldiff' => 'Pēc noklusējuma izmantot ārēju programmu izmaiņu parādīšanai (tikai pieredzējušiem lietotājiem, lai darbotos nepieciešami speciāli uzstādījumi tavā datorā sk. [//www.mediawiki.org/wiki/Manual:External_editor šeit])',
 'tog-showjumplinks' => 'Rādīt pārlēkšanas saites',
 'tog-uselivepreview' => "Lietot tūlītējo priekšskatījumu (izmanto ''JavaScript''; eksperimentāla iespēja)",
 'tog-forceeditsummary' => 'Atgādināt man, ja kopsavilkuma ailīte ir tukša',
@@ -97,7 +98,7 @@ $messages = array(
 
 'underline-always' => 'vienmēr',
 'underline-never' => 'nekad',
-'underline-default' => 'kā pārlūkā',
+'underline-default' => 'kā pārlūkā vai apdarē',
 
 # Font style option in Special:Preferences
 'editfont-style' => 'Fonta veids rediģēšanas laukā:',
@@ -182,7 +183,7 @@ $messages = array(
 'newwindow' => '(atveras jaunā logā)',
 'cancel' => 'Atcelt',
 'moredotdotdot' => 'Vairāk...',
-'mypage' => 'Mana lapa',
+'mypage' => 'Lapa',
 'mytalk' => 'Diskusijas',
 'anontalk' => 'Šīs IP adreses diskusija',
 'navigation' => 'Navigācija',
@@ -205,9 +206,9 @@ $messages = array(
 'vector-action-protect' => 'Aizsargāt',
 'vector-action-undelete' => 'Atjaunot',
 'vector-action-unprotect' => 'Mainīt aizsardzību',
-'vector-simplesearch-preference' => 'Ieslēgt uzlabotās meklēšanas piedāvājumus (tikai Vector apdarē)',
+'vector-simplesearch-preference' => 'Ieslēgt vienkāršoto meklēšanas joslu (tikai Vector apdarē)',
 'vector-view-create' => 'Izveidot',
-'vector-view-edit' => 'Rediģēt',
+'vector-view-edit' => 'Labot',
 'vector-view-history' => 'Hronoloģija',
 'vector-view-view' => 'Skatīt',
 'vector-view-viewsource' => 'Aplūkot kodu',
@@ -215,6 +216,7 @@ $messages = array(
 'namespaces' => 'Vārdtelpas',
 'variants' => 'Varianti',
 
+'navigation-heading' => 'Navigācijas izvēlne',
 'errorpagetitle' => 'Kļūda',
 'returnto' => 'Atgriezties: $1.',
 'tagline' => "No ''{{grammar:ģenitīvs|{{SITENAME}}}}''",
@@ -364,9 +366,9 @@ Derīgo īpašo lapu saraksts atrodas te: [[Special:SpecialPages|{{int:specialpa
 'dberrortext' => 'Konstatēta sintakses kļūda datubāzes pieprasījumā.
 Iespējams, tā radusies dēļ kļūdas programmatūrā.
 Pēdējais datubāzes pieprasījums bija:
-<blockquote><tt>$1</tt></blockquote>
-no funkcijas "<tt>$2</tt>".
-Datubāzes atgrieztais kļūdas paziņojums: "<tt>$3: $4</tt>".',
+<blockquote><code>$1</code></blockquote>
+no funkcijas "<code>$2</code>".
+Datubāzes atgrieztais kļūdas paziņojums: "<samp>$3: $4</samp>".',
 'dberrortextcl' => 'Datubāzes vaicājumā pieļauta sintakses kļūda.
 Pēdējais priekšraksts:
 "$1"
@@ -410,7 +412,7 @@ Funkcija: $1<br />
 Vaicājums: $2',
 'viewsource' => 'Aplūkot kodu',
 'actionthrottled' => 'Darbība netika atļauta',
-'protectedpagetext' => 'Šī lapa ir aizsargāta lai novērstu tās izmainīšanu.',
+'protectedpagetext' => 'Šī lapa ir aizsargāta lai novērstu tās izmainīšanu vai citas darbības.',
 'viewsourcetext' => 'Tu vari apskatīties un nokopēt šīs lapas vikitekstu:',
 'protectedinterface' => 'Šī lapa satur programmatūras interfeisā lietotu tekstu un ir bloķēta pret izmaiņām, lai pasargātu no bojājumiem.',
 'editinginterface' => "'''Brīdinājums:''' Tu izmaini lapu, kuras saturu izmanto wiki programmatūras lietotāja saskarnē (''interfeisā''). Šīs lapas izmaiņas ietekmēs lietotāja saskarni citiem lietotājiem. Pēc modificēšanas, šīs izmaiņas būtu lietderīgi pievienot arī [//translatewiki.net/wiki/Main_Page?setlang=en translatewiki.net], kas ir MediaWiki lokalizēšanas projekts.",
@@ -430,6 +432,7 @@ Norādītais iemesls bija ''$2''.",
 
 Vari turpināt to izmantot anonīmi, vari <span class='plainlinks'>[$1 atgriezties]</span> kā cits lietotājs vai varbūt tas pats.
 Ņem vērā, ka arī pēc iziešanas, dažas lapas var tikt parādītas tā, it kā tu vēl būtu iekšā, līdz tiks iztīrīta pārlūka kešatmiņa.",
+'welcomeuser' => 'Laipni lūgts, $1!',
 'yourname' => 'Tavs lietotājvārds',
 'yourpassword' => 'Tava parole:',
 'yourpasswordagain' => 'Atkārto paroli',
@@ -719,7 +722,6 @@ Pēdējais reģistra ieraksts ir apskatāms zemāk:",
 'template-protected' => '(aizsargāta)',
 'template-semiprotected' => '(daļēji aizsargāta)',
 'hiddencategories' => 'Šī lapa ietilpst {{PLURAL:$1|1 slēptajā kategorijā|$1 slēptajās kategorijās}}:',
-'nocreatetitle' => 'Lapu veidošana ierobežota',
 'nocreatetext' => '{{grammar:lokatīvs|{{SITENAME}}}} ir atslēgta iespēja izveidot jauinas lapas.
 Tu vari atgriezties atpakaļ un izmainīt esošu lapu, vai arī [[Special:UserLogin|ielogoties, vai izveidot kontu]].',
 'nocreate-loggedin' => 'Tev nav atļaujas veidot jaunas lapas.',
@@ -744,6 +746,11 @@ Izskatās, ka lapa ir dzēsta.',
 'edit-already-exists' => 'Nevar izveidot jaunu lapu.
 Tā jau eksistē.',
 'defaultmessagetext' => 'Noklusētais ziņojuma teksts',
+'invalid-content-data' => 'Nederīgi satura dati',
+
+# Content models
+'content-model-javascript' => 'JavaScript kods',
+'content-model-css' => 'CSS stils',
 
 # Parser/template warnings
 'expensive-parserfunction-category' => 'Lapas ar pārāk daudz laikietilpīgiem apstrādes funkciju izsaukumiem',
@@ -961,7 +968,7 @@ Pagaidām vari meklēt, izmantojot Google vai Yahoo.
 
 # Preferences page
 'preferences' => 'Izvēles',
-'mypreferences' => 'Izvēles',
+'mypreferences' => 'Iestatījumi',
 '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.',
@@ -1023,7 +1030,7 @@ Ja vēlies, tu vari izmantot šo nejauši uzģenerēto kodu: $1',
 'timezoneregion-indian' => 'Indijas okeāns',
 'timezoneregion-pacific' => 'Klusais okeāns',
 'allowemail' => 'Atļaut saņemt e-pastus no citiem lietotājiem',
-'prefs-searchoptions' => 'Meklēšanas opcijas',
+'prefs-searchoptions' => 'Meklēšana',
 'prefs-namespaces' => 'Vārdtelpas',
 'defaultns' => 'Meklēt šajās palīglapās pēc noklusējuma:',
 'default' => 'pēc noklusējuma',
@@ -1034,7 +1041,7 @@ Ja vēlies, tu vari izmantot šo nejauši uzģenerēto kodu: $1',
 'prefs-emailconfirm-label' => 'E-pasta statuss:',
 'prefs-textboxsize' => 'Rediģēšanas loga izmērs',
 'youremail' => 'Tava e-pasta adrese:',
-'username' => 'Lietotājvārds:',
+'username' => '{{GENDER:$1|Lietotājvārds}}:',
 'uid' => 'Lietotāja ID:',
 'prefs-memberingroups' => 'Pieder {{PLURAL:$1|grupai|grupām}}:',
 'prefs-registration' => 'Reģistrēšanās datums:',
@@ -1131,7 +1138,7 @@ Ja tu izvēlies to norādīt, tas tiks izmantots, lai identificētu tavu darbu (
 'right-minoredit' => 'Atzīmēt izmaiņas kā maznozīmīgas',
 'right-move' => 'Pārvietot lapas',
 'right-move-subpages' => 'Pārvietot lapas kopā ar to apakšlapām',
-'right-move-rootuserpages' => 'Pārvietot saknes lietotāju lapas',
+'right-move-rootuserpages' => 'Pārvietot saknes lietotāja lapas',
 'right-movefile' => 'Pārvietot failus',
 'right-suppressredirect' => 'Neveidot pāradresāciju no vecā nosaukuma, pārvietojot lapu',
 'right-upload' => 'Augšuplādēt failus',
@@ -1176,11 +1183,13 @@ Ja tu izvēlies to norādīt, tas tiks izmantots, lai identificētu tavu darbu (
 'right-sendemail' => 'Sūtīt e-pastu citiem lietotājiem',
 'right-passwordreset' => 'Apskatīt paroles atiestatīšanas e-pasta ziņojumus',
 
+# Special:Log/newusers
+'newuserlogpage' => 'Jauno lietotāju reģistrs',
+'newuserlogpagetext' => 'Jauno lietotājvārdu reģistrs.',
+
 # User rights log
 'rightslog' => 'Lietotāju tiesību reģistrs',
 'rightslogtext' => 'Šis ir lietotāju tiesību izmaiņu reģistrs.',
-'rightslogentry' => 'izmainīja $1 grupas no $2 uz $3',
-'rightsnone' => '(nav)',
 
 # Associated actions - in the sentence "You do not have permission to X"
 'action-read' => 'lasīt šo lapu',
@@ -1191,6 +1200,7 @@ Ja tu izvēlies to norādīt, tas tiks izmantots, lai identificētu tavu darbu (
 'action-minoredit' => 'atzīmēt šo labojumu kā maznozīmīgu',
 'action-move' => 'pārvietot šo lapu',
 'action-move-subpages' => 'pārvietot šo lapu un tās apakšlapas',
+'action-move-rootuserpages' => 'pārvietot saknes lietotāja lapas',
 'action-movefile' => 'pārvietot šo failu',
 'action-upload' => 'augšupielādēt šo failu',
 'action-reupload' => 'pārrakstīt esošo failu',
@@ -1433,6 +1443,7 @@ Skatīt https://www.mediawiki.org/wiki/Manual:Image_Authorization.',
 'img-auth-nofile' => 'Fails "$1" nepastāv.',
 'img-auth-isdir' => 'Jūs mēģinājāt piekļūt direktorijai "$1".
 Atļauta ir tikai failu piekļuve.',
+'img-auth-streaming' => 'Straumē "$1".',
 
 # HTTP errors
 'http-invalid-url' => 'Nederīgs URL: $1',
@@ -1496,6 +1507,7 @@ Apraksts ir [$2 faila apraksta lapā], kas ir parādīta zemāk.',
 'uploadnewversion-linktext' => 'Augšupielādēt jaunu šī faila versiju',
 'shared-repo-from' => 'no $1',
 'shared-repo' => 'kopējā krātuve',
+'upload-disallowed-here' => 'Šo failu nevar pārrakstīt.',
 
 # File reversion
 'filerevert' => 'Atjaunot $1',
@@ -1569,7 +1581,7 @@ Apraksts ir [$2 faila apraksta lapā], kas ir parādīta zemāk.',
 'statistics-users-active-desc' => 'Lietotāji, kas ir veikuši jebkādu darbību {{PLURAL:$1|iepriekšējā dienā|iepriekšējās $1 dienās}}',
 'statistics-mostpopular' => 'Visvairāk skatītās lapas',
 
-'disambiguations' => 'Nozīmju atdalīšanas lapas',
+'disambiguations' => 'Lapas, kuras norāda uz nozīmju atdalīšanas lapām',
 'disambiguationspage' => 'Template:Disambig',
 'disambiguations-text' => "Šeit esošajās lapās ir saite uz '''nozīmju atdalīšanas lapu'''.
 Šīs saites vajadzētu izlabot, lai tās vestu tieši uz attiecīgo lapu.<br />
@@ -1682,6 +1694,7 @@ Tu vari sašaurināt aplūkojamo reģistru, izvēloties reģistra veidu, lietot
 'allpagessubmit' => 'Aiziet!',
 'allpagesprefix' => 'Parādīt lapas ar šādu virsraksta sākumu:',
 'allpages-bad-ns' => '{{SITENAME}} nav vārdkopas "$1".',
+'allpages-hide-redirects' => 'Paslēpt pāradresācijas',
 
 # SpecialCachedPage
 'cachedspecial-refresh-now' => 'Skatīt jaunāko.',
@@ -1722,10 +1735,6 @@ Skatīt arī [[Special:WantedCategories|''sarkanās'' kategorijas]].",
 'activeusers-hidesysops' => 'Paslēpt administratorus',
 'activeusers-noresult' => 'Neviens lietotājs nav atrasts.',
 
-# Special:Log/newusers
-'newuserlogpage' => 'Jauno lietotāju reģistrs',
-'newuserlogpagetext' => 'Jauno lietotājvārdu reģistrs.',
-
 # Special:ListGroupRights
 'listgrouprights' => 'Lietotāju grupu tiesības',
 'listgrouprights-summary' => 'Šis ir šajā wiki definēto lietotāju grupu uskaitījums, kopā ar tām atbilstošajām piekļuves tiesībām.
@@ -1840,6 +1849,8 @@ $UNWATCHURL
 
 Papildinformācija:
 {{canonicalurl:{{MediaWiki:Helppage}}}}',
+'created' => 'izveidoja',
+'changed' => 'izmainīja',
 
 # Delete
 'deletepage' => 'Dzēst lapu',
@@ -2256,6 +2267,7 @@ Pēdējais reģistra ieraksts ir apskatāms zemāk:",
 Lai eksportētu lapas, šajā laukā ievadi to nosaukumus, katrā rindiņā pa vienam, un izvēlies vai gribi tikai pašreizējo versiju ar informāciju par pēdējo izmaiņu, vai arī pašreizējo versiju kopā ar visām vecajām versijām un hronoloģiju
 
 Pirmajā gadījumā var arī lietot šādu metodi, piem., [[{{#Special:Export}}/{{MediaWiki:Mainpage}}]] lapai "[[{{MediaWiki:Mainpage}}]]".',
+'exportall' => 'Eksportēt visas lapas',
 'exportcuronly' => 'Iekļaut tikai esošo versiju (bez pilnās hronoloģijas)',
 'exportnohistory' => "----
 '''Piezīme:''' Lapu eksportēšana kopā ar visu hronoloģiju šobrīd ir atslēgta, jo tas bremzē serveri.",
@@ -2341,6 +2353,10 @@ Lūdzu, mēģiniet vēlreiz.',
 'import-logentry-interwiki' => 'starpvikizēts $1',
 'import-logentry-interwiki-detail' => '$1 {{PLURAL:$1|versija|versijas}} no $2',
 
+# JavaScriptTest
+'javascripttest' => 'JavaScript testēšana',
+'javascripttest-title' => 'Darbina $1 testus',
+
 # Tooltip help for the actions
 'tooltip-pt-userpage' => 'Tava lietotāja lapa',
 'tooltip-pt-anonuserpage' => 'Manas IP adreses lietotāja lapa',
@@ -2434,11 +2450,24 @@ To visticamāk izraisīja ārēja saite uz melnajā sarakstā esošu interneta v
 
 # Info page
 'pageinfo-title' => 'Informācija par "$1"',
-'pageinfo-header-edits' => 'Labojumi',
+'pageinfo-header-basic' => 'Pamatinformācija',
+'pageinfo-header-edits' => 'Labojumu vēsture',
+'pageinfo-header-restrictions' => 'Lapas aizsardzība',
+'pageinfo-header-properties' => 'Lapas parametri',
+'pageinfo-length' => 'Lapas garums (baitos)',
+'pageinfo-article-id' => 'Lapas ID',
+'pageinfo-language' => 'Lappuses satura valoda',
 'pageinfo-views' => 'Skatījumu skaits',
 'pageinfo-watchers' => 'Uzraudzītāju skaits',
+'pageinfo-redirects-name' => 'Pāradresācijas uz šo lapu',
+'pageinfo-subpages-name' => 'Šīs lapas apakšlapas',
+'pageinfo-lastuser' => 'Pēdējais labotājs',
 'pageinfo-edits' => 'Izmaiņu skaits',
 'pageinfo-authors' => 'Atsevišķu autoru skaits',
+'pageinfo-toolboxlink' => 'Lapas informācija',
+'pageinfo-redirectsto-info' => 'info',
+'pageinfo-contentpage-yes' => 'Jā',
+'pageinfo-protect-cascading-yes' => 'Jā',
 
 # Patrolling
 'markaspatrolleddiff' => 'Atzīmēt kā pārbaudītu',
@@ -2479,6 +2508,7 @@ $1',
 'file-info-size-pages' => '$1 × $2 pikseļi, faila izmērs: $3, MIME tips: $4, $5 {{PLURAL:$5|lapa|lapas}}',
 'file-nohires' => 'Augstāka izšķirtspēja nav pieejama.',
 'svg-long-desc' => 'SVG fails, definētais izmērs $1 × $2 pikseļi, faila izmērs: $3',
+'svg-long-error' => 'Nederīgs SVG fails: $1',
 'show-big-image' => 'Pilnā izmērā',
 'show-big-image-preview' => 'Šī priekšskata izmērs: $1.',
 'show-big-image-other' => '{{PLURAL:$2|Cits izmērs|Citi izmēri}}: $1.',
@@ -2974,6 +3004,7 @@ Var arī lietot [[Special:EditWatchlist|standarta izmainīšanas lapu]].',
 'version-software' => 'Instalētā programmatūra',
 'version-software-product' => 'Produkts',
 'version-software-version' => 'Versija',
+'version-entrypoints-header-url' => 'URL',
 
 # Special:FilePath
 'filepath' => 'Failu adreses',
@@ -3074,8 +3105,15 @@ Var arī lietot [[Special:EditWatchlist|standarta izmainīšanas lapu]].',
 'revdelete-uname-unhid' => 'lietotājvārda slēpšana atcelta',
 'revdelete-restricted' => 'piemērot administratoriem ierobežojumus',
 'revdelete-unrestricted' => 'noņemt administratoriem ierobežojumus',
+'logentry-move-move' => '$1 pārvietoja lapu $3 uz $4',
+'logentry-move-move-noredirect' => '$1 pārvietoja lapu $3 uz $4, neatstājot pāradresāciju',
+'logentry-move-move_redir' => '$1 pārvietoja lapu $3 uz $4, atstājot pāradresāciju',
+'logentry-move-move_redir-noredirect' => '$1 pārvietoja lapu $3 uz $4 ar pāradresāciju, neatstājot pāradresāciju',
+'logentry-newusers-newusers' => 'Lietotāja konts $1 tika izveidots',
+'logentry-newusers-create' => 'Lietotāja konts $1 tika izveidots',
+'logentry-newusers-create2' => 'Lietotāja kontu $3 izveidoja $1',
 'logentry-newusers-autocreate' => 'Konts $1 tika izveidots automātiski',
-'newuserlog-byemail' => 'parole nosūtīta pa e-pastu',
+'rightsnone' => '(nav)',
 
 # Feedback
 'feedback-subject' => 'Temats:',
@@ -3095,6 +3133,7 @@ Var arī lietot [[Special:EditWatchlist|standarta izmainīšanas lapu]].',
 'searchsuggest-containing' => 'Meklējamā frāze:',
 
 # API errors
+'api-error-copyuploaddisabled' => 'Augšupielāde no URL šajā serverī ir atspējota.',
 'api-error-filename-tooshort' => 'Faila nosaukums ir pārāk īss.',
 'api-error-http' => 'Iekšēja kļūda: Nevar izveidot savienojumu ar serveri.',
 'api-error-ok-but-empty' => 'Iekšēja kļūda: Nav atbildes no servera.',
index b2d5ade..9f64387 100644 (file)
@@ -752,7 +752,6 @@ $2',
 'template-protected' => '(錮)',
 'template-semiprotected' => '(半錮)',
 'hiddencategories' => '此頁屬隱類之員有$1:',
-'nocreatetitle' => '新題謝焉',
 'nocreatetext' => '舊題可修,新題謝焉。[[Special:UserLogin|登簿、增簿]]以逮權也。',
 'nocreate-loggedin' => '子權未逮,新頁謝焉。',
 'sectioneditnotsupported-title' => '不纂持節',
@@ -1243,9 +1242,12 @@ $1",
 'right-override-export-depth' => '出有五層深之頁',
 'right-sendemail' => '擬書傳予他簿',
 
+# Special:Log/newusers
+'newuserlogpage' => '誌簿',
+'newuserlogpagetext' => '此為誌簿之記也',
+
 # User rights log
 'rightslog' => '職權志',
-'rightsnone' => '(凡)',
 
 # Associated actions - in the sentence "You do not have permission to X"
 'action-read' => '閱此頁',
@@ -1748,10 +1750,6 @@ $1',
 'activeusers-hidesysops' => '藏有秩',
 'activeusers-noresult' => '無簿矣。',
 
-# Special:Log/newusers
-'newuserlogpage' => '誌簿',
-'newuserlogpagetext' => '此為誌簿之記也',
-
 # Special:ListGroupRights
 'listgrouprights' => '權任一覽',
 'listgrouprights-summary' => '此所列述,諸職所司也,各有異同。欲知其詳,請閱[[{{MediaWiki:Listgrouprights-helppage}}|此文]]。',
@@ -1858,6 +1856,8 @@ $NEWPAGE
 欲刪之頁,惠訪$UNWATCHURL
 
 饋助之,惠訪{{canonicalurl:{{MediaWiki:Helppage}}}}',
+'created' => '撰',
+'changed' => '易',
 
 # Delete
 'deletepage' => '刪頁',
@@ -2830,6 +2830,6 @@ MediaWiki乃為用之發,無擔之責也;亦無售目之默擔也。參GNU
 # New logging system
 'revdelete-restricted' => '應限至有秩',
 'revdelete-unrestricted' => '除限自有秩',
-'newuserlog-byemail' => '號發自電郵',
+'rightsnone' => '(凡)',
 
 );
index 4c12a97..2e7155e 100644 (file)
@@ -401,9 +401,11 @@ Ogoruşi dudis '''all:''' pʼrefiksi okʼatute doloçʼareli na ren iri şeyi (o
 # Rights
 'right-delete' => 'Am sayfape jili',
 
+# Special:Log/newusers
+'newuserlogpage' => 'Ağani maxmareş kʼayitʼepe',
+
 # User rights log
 'rightslog' => 'Maxmareş hakʼişi kʼayitʼepe',
-'rightsnone' => '(Va ren)',
 
 # Associated actions - in the sentence "You do not have permission to X"
 'action-read' => "am sayfa ik'itxi",
@@ -503,9 +505,6 @@ Ogoruşi dudis '''all:''' pʼrefiksi okʼatute doloçʼareli na ren iri şeyi (o
 # Special:LinkSearch
 'linksearch' => 'Galeni kʼontaktʼepe',
 
-# Special:Log/newusers
-'newuserlogpage' => 'Ağani maxmareş kʼayitʼepe',
-
 # Special:ListGroupRights
 'listgrouprights-members' => '(makʼaturepeşi listʼe)',
 
@@ -777,4 +776,7 @@ Ukʼaçxe na mulunan kʼontʼaktʼepe istʼisna oqʼopinot kʼabuli ixvenen. Mes
 # Special:SpecialPages
 'specialpages' => 'Doxmeli butʼkʼape',
 
+# New logging system
+'rightsnone' => '(Va ren)',
+
 );
index 100f6c7..7ac299a 100644 (file)
@@ -749,7 +749,6 @@ $2
 'template-semiprotected' => '(अर्ध-रक्षित)',
 'hiddencategories' => 'ई पन्ना सदस्य अछि {{PLURAL:$1|1 नुकाएल संवर्ग|$1 नुकाएल संवर्ग सभ}}:',
 'edittools-upload' => '-',
-'nocreatetitle' => 'पन्ना निर्माण सीमित',
 'nocreatetext' => '{{अन्तर्जाल}} नव पन्ना निर्माणक क्षमताकेँ सीमित कऽ देने अछि।
 अहाँ आपस जा सकै छी आ कोनो पन्नाकेँ सम्पादित कऽ सकै छी, वा [[Special:UserLogin|log in or create an account]]',
 'nocreate-loggedin' => 'अहाँकेँ नव पन्ना बनेबाक अधिकार नै अछि।',
@@ -1280,12 +1279,13 @@ $3 द्वारा देल कारण अछि ''$2''",
 'right-sendemail' => 'ई-पत्र दोसर प्रयोक्ता लोकनिकेँ पठाउ',
 'right-passwordreset' => 'कूटशब्द पुनर्निर्धारण ई-पत्र देखू',
 
+# Special:Log/newusers
+'newuserlogpage' => 'प्रयोक्ता रचना वृत्तलेख',
+'newuserlogpagetext' => 'ई प्रयोक्ता निर्माणक वृत्तलेख अछि।',
+
 # User rights log
 'rightslog' => 'प्रयोक्ता अधिकार वृत्तलेख',
 'rightslogtext' => 'ई प्रयोक्ता अधिकार परिवर्तन सभक वृतलेख छी।',
-'rightslogentry' => 'वर्गक सदस्यता बदलल गेल $1 लेल $2 सँ $3',
-'rightslogentry-autopromote' => 'स्वयंचालित रूपमे $2 सँ $3 मे पदोन्नत भेल',
-'rightsnone' => '(कोनो नै)',
 
 # Associated actions - in the sentence "You do not have permission to X"
 'action-read' => 'ई पन्ना पढ़ू',
@@ -1868,10 +1868,6 @@ $1',
 'activeusers-hidesysops' => 'संचालक नुकाउ',
 'activeusers-noresult' => 'कोनो प्रयोक्ता नै भेटल',
 
-# Special:Log/newusers
-'newuserlogpage' => 'प्रयोक्ता रचना वृत्तलेख',
-'newuserlogpagetext' => 'ई प्रयोक्ता निर्माणक वृत्तलेख अछि।',
-
 # Special:ListGroupRights
 'listgrouprights' => 'प्रयोक्ता संवर्ग अधिकार',
 'listgrouprights-summary' => 'ई सभ प्रयोक्ता संवर्गक एकटा सूची अछि जे ऐ विकीपरपरिभाषित अछि ओकर संसर्गित प्रवेश अधिकारक संग।
@@ -1998,6 +1994,8 @@ $UNWATCHURL
 
 अपन अनुभव बतेबा वा कोनो सहायता लेल:
 {{canonicalurl:{{MediaWiki:Helppage}}}}',
+'created' => 'बनाएल गेल',
+'changed' => 'बदलल गेल',
 
 # Delete
 'deletepage' => 'पन्ना मेटाउ',
@@ -3529,7 +3527,7 @@ $5
 'logentry-newusers-create' => '$1 {{लिंग:$2|बनाएल}} एकटा प्रयोक्ता खाता',
 'logentry-newusers-create2' => '$1 {{लिंग:$2|बनाएल}} {{लिंग:$4|एकटा प्रयोक्ता खाता}} $3',
 'logentry-newusers-autocreate' => 'खाता $1 छल {{लिंग:$2|बनाएल}} स्वतः',
-'newuserlog-byemail' => 'कूटशब्द ई-पत्र द्वारा पठाएल गेल',
+'rightsnone' => '(कोनो नै)',
 
 # API errors
 'api-error-badaccess-groups' => 'अहि विकी सें अहां कोनो प्रारूप लोड नहि क सकब.',
index b3fdf9a..5730312 100644 (file)
@@ -22,7 +22,7 @@ $messages = array(
 'tog-hidepatrolled' => 'Umpetna suntingan sing wis dipatroli nang owahan anyar',
 'tog-newpageshidepatrolled' => 'Umpetna kaca sing wis dipatroli sekang daftar kaca anyar',
 'tog-extendwatchlist' => 'Kembangna daftar pengawasan kanggo nidokna kabeh pangowahan, ora mung sing paling anyar thok',
-'tog-usenewrc' => 'Gunakna tampilan owahan anyar sing wis dikembangna (mbutuhna JavaScript)',
+'tog-usenewrc' => 'Klompok owahan miturut kaca nang owahan anyar lan daptar pangawasan (mbutuhna JavaScript)',
 'tog-numberheadings' => 'Aweh nomer judul secara otomatis',
 'tog-showtoolbar' => 'Tidhokna bilah alat penyuntingan',
 'tog-editondblclick' => 'Nyunting kaca nganggo dobel klik (mbutuhna JavaScript)',
@@ -30,17 +30,17 @@ $messages = array(
 'tog-editsectiononrightclick' => 'Aktifna penyuntingan subbagian nganggo klik-tengen nang judul bagian (mbutuhna JavaScript)',
 'tog-showtoc' => 'Tidhokna daftar isine (kanggo kaca sing duwe lewih sekang 3 subbagian)',
 'tog-rememberpassword' => 'Emutna data login-ne inyong nang peramban kiye (kanggo paling suwe $1 {{PLURAL:$1|dina|dina}})',
-'tog-watchcreations' => 'Tambahna kaca gaweanne inyong nang daftar pangawasanne inyong',
-'tog-watchdefault' => 'Tambahna kaca sing tak-sunting maring daftar pangawasanne inyong',
-'tog-watchmoves' => 'Tambahna kaca sing tak-pindah maring daftar pangawasanne inyong',
-'tog-watchdeletion' => 'Tambahna kaca sing tak-busak maring daftar pangawasanne inyong',
+'tog-watchcreations' => 'Tambahna kaca gaweanne inyong lan berkas sing tek unggah nang daptar pangawasanne inyong',
+'tog-watchdefault' => 'Tambahna kaca lan berkas sing tek-sunting maring daptar pangawasanne inyong',
+'tog-watchmoves' => 'Tambahna kaca lan berkas sing tek-pindah maring daptar pangawasanne inyong',
+'tog-watchdeletion' => 'Tambahna kaca lan berkas sing tek-busek maring daptar pangawasanne inyong',
 'tog-minordefault' => 'Otomatis nandani kabeh suntingan dadi suntingan cilik',
 'tog-previewontop' => 'Tidokna pratayang sedurunge kotak sunting',
 'tog-previewonfirst' => 'Tidokna pratayang nang suntingan sing pertama',
 'tog-nocache' => 'Nonaktifna penyinggahan kaca peramban',
-'tog-enotifwatchlistpages' => 'Kirimna imel maring inyong angger kaca sing mlebu daftar pangawasanne inyong diowaih',
+'tog-enotifwatchlistpages' => 'Kirimna imel maring inyong angger kaca awa berkas utsing mlebu daptar pangawasanne inyong diowaih',
 'tog-enotifusertalkpages' => 'Kirimna imel maring inyong angger kaca dhiskusine inyong owah',
-'tog-enotifminoredits' => 'Kirimna imel maring inyong uga nek ana suntingan cilik',
+'tog-enotifminoredits' => 'Kirimna imel maring inyong uga nek ana suntingan cilik nang kaca lan berkas',
 'tog-enotifrevealaddr' => 'Tidokna alamat imel-e inyong nang imel notifikasi',
 'tog-shownumberswatching' => 'Tidhokna jumlah pangawas',
 'tog-oldsig' => 'Tapak asma sekiye:',
@@ -63,7 +63,7 @@ $messages = array(
 
 'underline-always' => 'Saben',
 'underline-never' => 'Ora tau',
-'underline-default' => 'Gawane peramban',
+'underline-default' => 'Gawane kulitutawa peramban',
 
 # Font style option in Special:Preferences
 'editfont-style' => 'Modhèl aksara (font) nang kotak suntingan:',
@@ -148,8 +148,8 @@ $messages = array(
 'newwindow' => '(buka nang jendhéla anyar)',
 'cancel' => 'Ora Sida',
 'moredotdotdot' => 'Liyané...',
-'mypage' => 'Kaca inyong',
-'mytalk' => 'Catetan inyong',
+'mypage' => 'Kaca',
+'mytalk' => 'Dopokan',
 'anontalk' => 'Dhiskusi IP kiye',
 'navigation' => 'pandhu arah',
 'and' => '&#32;lan',
@@ -171,7 +171,7 @@ $messages = array(
 'vector-action-protect' => 'Reksa',
 'vector-action-undelete' => 'Batalna pambusakan',
 'vector-action-unprotect' => 'Owahi pangreksan',
-'vector-simplesearch-preference' => 'Aktifna saran panggoletan sing wis disempurnakna (nang kulit Vector thok)',
+'vector-simplesearch-preference' => 'Aktifna bilah panggoletan sing wis deringkes (nang kulit Vector thok)',
 'vector-view-create' => 'Gawe',
 'vector-view-edit' => 'Sunting',
 'vector-view-history' => 'Sajarah kaca',
@@ -181,6 +181,7 @@ $messages = array(
 'namespaces' => 'Bilik jeneng',
 'variants' => 'Varian',
 
+'navigation-heading' => 'Menu navigasi',
 'errorpagetitle' => 'Kasalahan',
 'returnto' => 'Bali maring $1.',
 'tagline' => 'Sekang {{SITENAME}}',
@@ -278,6 +279,10 @@ Deleng [[Special:Version|kaca versi]].',
 'youhavenewmessages' => 'Rika duwe $1 ($2).',
 'newmessageslink' => 'pesen anyar',
 'newmessagesdifflink' => 'owahan keri dhewek',
+'youhavenewmessagesfromusers' => 'Rika nduwe $1 sekang {{PLURAL:$3|panganggo liya|$3 panganggo}} ($2).',
+'youhavenewmessagesmanyusers' => 'Rika nduwe $1 sekang akeh panganggo ($2).',
+'newmessageslinkplural' => '{{PLURAL:$1|pesen anyar|pesen anyar}}',
+'newmessagesdifflinkplural' => '{{PLURAL:$1||}}owah-owahan pungkasan',
 'youhavenewmessagesmulti' => 'Rika olih pesen-pesen anyar nang $1',
 'editsection' => 'sunting',
 'editold' => 'sunting',
@@ -329,12 +334,12 @@ Daftar kaca astamiwa sing sah teyeng dideleng nang [[Special:SpecialPages|{{int:
 # General errors
 'error' => 'Kasalahan',
 'databaseerror' => 'Kasalahan basis data',
-'dberrortext' => 'Ana kesalahan sintaksnang penjalukan basis data.
+'dberrortext' => 'Ana kesalahan sintaks nang penjalukan basis data.
 Kesalahan kiye ndeyan nandakna nek ana \'\'bug\'\' nang piranti alus.
 Penjalukan basis data sing pungkasan yakuwe:
-<blockquote><tt>$1</tt></blockquote>
-sekang jerone fungsi "<tt>$2</tt>".
-Basis data ngasilna kesalahan "<tt>$3: $4</tt>".',
+<blockquote><code>$1</code></blockquote>
+sekang jerone fungsi "<code>$2</code>".
+Basis data ngasilna kesalahan "<samp>$3: $4</samp>".',
 'laggedslavemode' => "'''Pènget:''' Kaca kiye mbokmenawa isiné dudu pangowahan pungkasan.",
 'readonly' => 'Basis data dikunci',
 'enterlockreason' => 'Lebokna alesan panguncèn, kalebu uga prakiran kapan kunci bakal dibuka',
@@ -624,7 +629,7 @@ Rika teyeng [[Special:Search/{{PAGENAME}}|nggoleti judul kaca kiye]] nang kaca-k
 utawa [{{fullurl:{{FULLPAGENAME}}|action=edit}} nyunting kaca kiye]</span>.',
 'noarticletext-nopermission' => 'Sekiye ora ana teks nang kaca kiye.
 Rika teyeng [[Special:Search/{{PAGENAME}}|nggoleti judul kaca kiye]] nang kaca-kaca liyane,
-utawa <span class="plainlinks">[{{fullurl:{{#Special:Log}}|page={{FULLPAGENAMEE}}}} goleti log sing ana gandengane]</span>.',
+utawa <span class="plainlinks">[{{fullurl:{{#Special:Log}}|page={{FULLPAGENAMEE}}}} goleti log sing ana gandengane]</span>, ningen Rika ora olih nggawe kaca kiye.',
 'userpage-userdoesnotexist' => "Akun panganggo ''<nowiki>$1</nowiki>'' ora kedaftar.
 Monggo dipriksa angger Rika kepengin gawe/nyunting kaca kiye.",
 'userpage-userdoesnotexist-view' => 'Panganggo "$1" ora kedaftar.',
@@ -667,7 +672,6 @@ Entri cathetan pungkasan disadiakna nang ngisor kanggo referensi:",
 'template-protected' => '(direksa)',
 'template-semiprotected' => '(semi-pangreksan)',
 'hiddencategories' => 'Kaca kiye kuwe anggota sekang {{PLURAL:$1|1 kategori sing diumpetna|$1 kategori-kategori sing diumpetna}}:',
-'nocreatetitle' => 'Panggawéan kaca anyar diwatesi',
 'nocreatetext' => '{{SITENAME}} wis mbatesi panggawean kaca anyar.
 Rika teyeng mbalik lan nyunting kaca sing wis ana, utawa [[Special:UserLogin|mlebu utawa gawe akun]]',
 'nocreate-loggedin' => 'Rika ora duwe hak akses nggo gawe kaca anyar.',
@@ -831,7 +835,7 @@ Gatèkna, angger nganggo pranala navigasi kuwe bakalan nge-reset kolom kiye.',
 'mergelogpagetext' => 'Nang ngisor kiye isine daftar panggabungan sajarah kaca maring kaca liyane.',
 
 # Diffs
-'history-title' => 'Sajarah revisi sekang "$1"',
+'history-title' => 'Riwayat revisi sekang "$1"',
 'difference-multipage' => '(Prabedan antarkaca)',
 'lineno' => 'Baris $1:',
 'compareselectedversions' => 'Bandingna revisi kapilih',
@@ -916,7 +920,7 @@ Ningen Rika kudu eling nek indeks Google kanggo {{SITENAME}} bisa baen isine anu
 
 # Preferences page
 'preferences' => 'Preferensi',
-'mypreferences' => 'Preferensine Inyong',
+'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.',
@@ -1137,12 +1141,12 @@ Aja kuatir, alamat imele Rika ora ditidokna dong pangganggo sejen ngontak Rika.'
 'right-override-export-depth' => "Ekspor kaca sisan karo kaca sing kagandheng gutul lapisan (''depth'') kaping 5",
 'right-sendemail' => 'Ngirim imel maring panganggo liyane',
 
+# Special:Log/newusers
+'newuserlogpage' => 'Log panganggo anyar',
+
 # User rights log
 'rightslog' => 'Log pangowahan hak akses panganggo',
 'rightslogtext' => 'Kiye log pangowahan maring hak-hak panganggo.',
-'rightslogentry' => 'Ngganti kaanggotaan kelompok nggo $1 sekang $2 dadi $3',
-'rightslogentry-autopromote' => 'otomatis dipromosikna sekang $2 dadi $3',
-'rightsnone' => '(ora ana)',
 
 # Associated actions - in the sentence "You do not have permission to X"
 'action-read' => 'maca kaca kiye',
@@ -1252,10 +1256,18 @@ Deleng [[Special:NewFiles|galeri berkas anyar]] nggo tampilan visual.',
 'license' => 'Jenis lisènsi:',
 'license-header' => 'Jinis lisènsi',
 
+# Special:ListFiles
+'listfiles_date' => 'Tanggal',
+'listfiles_name' => 'Jeneng',
+'listfiles_user' => 'Panganggo',
+'listfiles_count' => 'Versi',
+
 # File description page
 'file-anchor-link' => 'Berkas',
 'filehist' => 'Sajarah kaca',
 'filehist-help' => 'Klik nang tanggal/wektu kanggo ndeleng berkas kiye nang wektu kuwe mau.',
+'filehist-deleteall' => 'busek kabeh',
+'filehist-deleteone' => 'busek',
 'filehist-revert' => 'balekna',
 'filehist-current' => 'Sekiye',
 'filehist-datetime' => 'Tanggal/Wektu',
@@ -1438,18 +1450,29 @@ Rika teyeng mbatesi tampilan kanthi milih jinis log, jeneng panganggo (sensitif
 # Special:LinkSearch
 'linksearch-line' => '$1 duwe pranala sekang  $2',
 
-# Special:Log/newusers
-'newuserlogpage' => 'Log panganggo anyar',
-
 # Special:ListGroupRights
 'listgrouprights-members' => '(daftar anggota)',
 
 # E-mail user
 'emailuser' => 'Kirim imel maring panganggo kiye',
+'emailtarget' => 'Lebokna jeneng panganggo utawa panampa',
+'emailusername' => 'Jeneng panganggo:',
+'emailusernamesubmit' => 'Kirimna',
+'email-legend' => 'Kirim imel ming panganggo {{SITENAME}} liyane',
+'emailfrom' => 'Sekang:',
+'emailto' => 'Nggo:',
+'emailsubject' => 'Subyek:',
+'emailmessage' => 'Pesen:',
+'emailsend' => 'Kirim',
+'emailccme' => 'Kirimna salinan pesenku mau ming imele inyong.',
+'emailccsubject' => 'Salinan pesene Rika kanggo $1: $2',
+'emailsent' => 'Imel wis dikirim',
+'emailsenttext' => 'Pesen imele Rika wis dikirim.',
+'emailuserfooter' => 'Layang kiye dikirimna sekang $1 ming $2 nggunakna fungsi "Layangpanganggo" nang {{SITENAME}}.',
 
 # Watchlist
 'watchlist' => 'Daftar pangawasane inyong',
-'mywatchlist' => 'Daftar pangawasane inyong',
+'mywatchlist' => 'Daptar pangawasane inyong',
 'watchlistfor2' => 'Kanggo $1 $2',
 'watch' => 'Pantau',
 'unwatch' => 'Batalna pantauan',
@@ -1550,9 +1573,9 @@ Rika teyeng ngowaih tingkat pangreksan nggo kaca kiye, ningen perkara iku ora aw
 'blanknamespace' => '(Utama)',
 
 # Contributions
-'contributions' => 'Tulisan anggota',
+'contributions' => 'Kontribusi {{GENDER:$1|panganggo}}',
 'contributions-title' => 'Kontribusi panganggo kanggo $1',
-'mycontris' => 'Tulisan inyong',
+'mycontris' => 'Kontribusi',
 'contribsub2' => 'Kanggo $1 ($2)',
 'uctop' => ' (dhuwur)',
 'month' => 'Sekang sasi (lan sadurungé):',
@@ -1786,4 +1809,7 @@ Sing liyane bakal diumpetna sacara ''default''.
 # Special:Tags
 'tag-filter' => 'Filter [[Special:Tags|Tag]]:',
 
+# New logging system
+'rightsnone' => '(ora ana)',
+
 );
index 4ed2b93..008c3b9 100644 (file)
@@ -818,7 +818,6 @@ $2',
 'template-protected' => '(аралаф)',
 'template-semiprotected' => '(пялес-аралаф)',
 'hiddencategories' => 'Тя лопась {{PLURAL:$1|1 кяшф катериень|$1 кяшф категориень}} полаец:',
-'nocreatetitle' => 'Лопань тиемац оторонзаф',
 'nocreatetext' => '{{SITENAME}}-са од лопатнень тиемац оторонзаф.
 Тондейть ули кода мърдамс меки ди петнемс тиф ни лопать, эли [[Special:UserLogin|сувамс эли сёрматфтомс одукс]].',
 'nocreate-loggedin' => 'Тон аф мярьговат тиемс од лопат.',
@@ -1226,11 +1225,13 @@ $3 макссь туфталсь - ''$2''",
 'right-userrights-interwiki' => 'Петнемс тиихнень видекснон иля викить лопасонза',
 'right-siteadmin' => 'Пякстамс эди панжемс датабазать',
 
+# Special:Log/newusers
+'newuserlogpage' => 'Тиинь ушедоманзон лувомасна',
+'newuserlogpagetext' => 'Тя тиинь ушедоманзон лувомасна.',
+
 # User rights log
 'rightslog' => 'Тиить видексонза лувомась',
 'rightslogtext' => 'Тиить видексонзон полафнемасна лувомась.',
-'rightslogentry' => '$1-нь полгац полафтсь $2-ста $3-с',
-'rightsnone' => '(аш)',
 
 # Associated actions - in the sentence "You do not have permission to X"
 'action-read' => 'тя лопать морафтома',
@@ -1671,10 +1672,6 @@ $3 макссь туфталсь - ''$2''",
 'listusers-submit' => 'Няфтемс',
 'listusers-noresult' => 'Тиихть исть мув.',
 
-# Special:Log/newusers
-'newuserlogpage' => 'Тиинь ушедоманзон лувомасна',
-'newuserlogpagetext' => 'Тя тиинь ушедоманзон лувомасна.',
-
 # Special:ListGroupRights
 'listgrouprights' => 'Тиихнень полгаснон видексонза',
 'listgrouprights-summary' => 'Тяса тиихнень полгасна конатне сувсихть тя Викис синь сувама видексснон мархта.
@@ -1781,6 +1778,8 @@ $UNWATCHURL
 
 Азома мекпяли ди иля лезкс:
 {{canonicalurl:{{MediaWiki:Helppage}}}}',
+'created' => 'тиф',
+'changed' => 'полафтсь',
 
 # Delete
 'deletepage' => 'Нардамс лопать',
@@ -2888,6 +2887,6 @@ $5
 # New logging system
 'revdelete-restricted' => 'нолдаф тевс кардафксне системонь вятиксненди',
 'revdelete-unrestricted' => 'системонь вятиксненди кардафксне валхтфт',
-'newuserlog-byemail' => 'сувама валце кучф электрононь сёрмаса',
+'rightsnone' => '(аш)',
 
 );
index 918cb26..cdddf43 100644 (file)
@@ -349,7 +349,7 @@ $messages = array(
 'newwindow' => '(sokafy anaty takila hafa)',
 'cancel' => 'Aoka ihany',
 'moredotdotdot' => 'Tohiny...',
-'mypage' => 'Pejiko',
+'mypage' => 'Pejy',
 'mytalk' => 'Dinika',
 'anontalk' => "Resaka ho an'io adiresy IP io",
 'navigation' => 'Fikarohana',
@@ -588,11 +588,15 @@ fangatahana : $2",
 'actionthrottled' => 'Tao voafetra',
 'actionthrottledtext' => "Mba hiady amin'ny spam, ny hatetika momba ny fanaovana io otao io dia ferana ho foifoy, ary niaotra io fetra io ianao.
 Andramo indray afaka minitra vitsivitsy.",
-'protectedpagetext' => 'Voaaro mba tsy hisy hanova ity pejy ity.',
+'protectedpagetext' => 'Narovana mba tsy hisiana fanovana na tao hafa ity pejy ity.',
 'viewsourcetext' => "Azonao atao no mijery sy mandrika ny votoatin'ity pejy ity :",
 'viewyourtext' => "Azonao atao ny mijery ary mandika ny fangon'ny '''fanovanao''' tamin'ity pejy ity:",
-'protectedinterface' => "Manome lahatsoratra ho an'ny rindrankajy ity pejy ity ary voaaro izy ity mba tsy hisy hanararaotra",
-'editinginterface' => "'''Tandremo :''' manova pejy ampiasan'ny lôjisialy wiki ianao. Mety hita ny mpikambana sàsany izy io. Rehefa tia mandika teny ianao, jereo ny volavola MediaWiki ho an'ny internationalisation ny hafatra [//translatewiki.net/wiki/Main_Page?setlang=fr translatewiki.net].",
+'protectedinterface' => "Ity pejy ity dia manome ny lahatsoratra ho an'ny rindrankajy eto amin'ity Wiki ity, ary narovana mba tsy hisian'ny fanararaotana. Raha tia hanampy na hanova ny dikanteny ho an'ny wiki rehetra, ampiasao [//translatewiki.net/ translatewiki.net], izay tetikasa fandikanan ny rindrankajy Mediawiki.",
+'editinginterface' => "'''Tandremo''' : Manova pejy ampiasaina amin'ny famoahana ny hafatray ny rindrankajy ianao io.
+
+Hisy fiantraikany amin'ny fisehon'ny tranonkala amin'ny mpampiasa rehetra eto amin'ity wiki ity ny fanovana.
+
+Raha hanampy dikanteny izay tokony hihatra amin'ny wiki rehetra, ampiaao ny tranonkala [//translatewiki.net/ translatewiki.net translatewiki.net], ny tetikasa fandikana an'i MediaWiki.",
 'sqlhidden' => '(nafenina ny requête SQL)',
 'cascadeprotected' => 'Ankehitriny dia voaaro ity pejy ity satria misy pejy voaaro {{PLURAL:$1||$1}}1 mampiasa ity pejy ity. Io pejy io dia mampiasa ny fiarovana "en cascade" :
 
@@ -944,7 +948,6 @@ Ny mpandrindra nanidy ny banky angona dia nanome ny antony : <br />$1",
 'template-protected' => '(voaaro)',
 'template-semiprotected' => '(voaaro an-tàpany)',
 'hiddencategories' => '{{PLURAL:$1|anaty sokajy|anaty sokajy}} nasitrika $1 ity pejy ity',
-'nocreatetitle' => 'Voafetra ny famoronana pejy',
 'nocreatetext' => " Voafetra ihany ny fahafahana mamorona pejy eto amin'ity sehatra ity.  Ny pejy efa misy no azonao ovaina, na [[Special:UserLogin|midira na mamoròna kaonty]].",
 'nocreate-loggedin' => 'Tsy mahazo ataonao no manamboatra pejy vao.',
 'sectioneditnotsupported-title' => 'Fanovana fizarana tsy zaka',
@@ -1121,9 +1124,10 @@ Tsy azo jerenao io.",
 'revdelete-concurrent-change' => "Tsi-fetezana teo am-panovana ny zavatra voadaty tamin'ny $1 tamin'ny $2 : ny satany dia voaovan' olon-kafa tamin'ianao nanova azy.
 Jereo ny laogy.",
 'revdelete-only-restricted' => "Tsi-fetezana teo am-panitrihana ny zavatra voadaty tamin'ny $1 tamin'ny $2 : tsy azonao fafana ireo zavatra ireo amin'ny mpandrindra raha tsy misafidy famafana.",
-'revdelete-reason-dropdown' => '* Antom-pamafana matetika miasa
-** Tsi-fanajana ny Copyright
-** Fampahalalana tsy tokony apetraka eo',
+'revdelete-reason-dropdown' => "* Antom-pamafana matetika :
+** Tsifanajakan ny zom-pamrona;
+** Famoahan-kevitra na fampahalalana ho ann'ny olon-tokana tsy tokony haseho;
+** Fampahalalana mety mifototra amin'ny lainga.",
 'revdelete-otherreason' => 'Antony hafa / antony miampy :',
 'revdelete-reasonotherlist' => 'Antony hafa',
 'revdelete-edit-reasonlist' => "Hanova ny anton'ny famafàna",
@@ -1327,9 +1331,9 @@ Fenoy araka ny datin'ny solosainan'ny mpitsidika",
 'prefs-emailconfirm-label' => 'Famarinana ny imailaka :',
 'prefs-textboxsize' => "Hangezan'ny varavarankely fanovana",
 'youremail' => 'Imailaka:',
-'username' => 'Solonanarana:',
-'uid' => "Laharan'ny mpikambana:",
-'prefs-memberingroups' => "mpikamban'ny gropy{{PLURAL:}} $1 :",
+'username' => '{{GENDER:$1}}Anaram-pikambana :',
+'uid' => '{{GENDER:$1}}mpikambana :',
+'prefs-memberingroups' => "mpikambana{{GENDER:$2}} ao amin'ny vondrona{{PLURAL:$1}} :",
 'prefs-registration' => 'Daty fidirana :',
 'yourrealname' => 'Tena anarana marina:',
 'yourlanguage' => 'Tenim-pirenena:',
@@ -1477,15 +1481,13 @@ Tsy haseho ny adiresy imailakao rehefa manoratra any aminao ny mpikambana hafa."
 'right-sendemail' => "Mandefa imailaka any amin'ny mpikambana hafa",
 'right-passwordreset' => 'Hijery ny imailaka famerenana ny tenimiafina',
 
+# Special:Log/newusers
+'newuserlogpage' => 'Tatitr’asan’ny fanokafana kaontim-pikambana',
+'newuserlogpagetext' => "Ity pejy ity dia maneho ny tantaran'asan'ny fampidirana mpikambana vaovao.",
+
 # User rights log
 'rightslog' => 'Tatitr’asa momban’ny fanovana satam-pikambana',
 'rightslogtext' => "Ity ny laogy momban'ny fanovana ny zom-pikambana.",
-'rightslogentry' => "nanova ny fahefan'ny mpikambana « $1 », avy amin'ny $2 izy lasa $3",
-'rightslogentry-autopromote' => '$2 navadika $3 ho azy',
-'logentry-rights-rights' => "$1 dia nanova ny sokajim-pikambana isian'i $3 avy amin'ny $4 lasa $5",
-'logentry-rights-rights-legacy' => "$1 nanova ny vonodrom-pikambana isian'i $3",
-'logentry-rights-autopromote' => 'Lasa $5 ho azy i $1 izay $4 taloha',
-'rightsnone' => '(tsy misy)',
 
 # Associated actions - in the sentence "You do not have permission to X"
 'action-read' => 'mamaky ity pejy ity',
@@ -1722,7 +1724,7 @@ Raha mbola misy foana ilay  olana, manorata any amin'ny [[Special:ListUsers/syso
 'backend-fail-readonly' => 'Amin\'izao fotoana dia famakiana ihany ny fitahirizana terminal an\'i "$1". "\'\'$2\'\'" no antony nomena',
 'backend-fail-connect' => 'Tsy afaka mifandray amin\'ny terminal fitahirizana "$1".',
 'backend-fail-internal' => 'Hadisoana tsy fantatra tao anatin\'ny terminal fitahirizana "$1".',
-'backend-fail-usable' => "Tsy afaka manoratra ilay rakitra $1 noho ny tsifiampian'ny zo na noho ny petra-drakitra tsy misy.",
+'backend-fail-usable' => 'Tsy afaka nanoratra ny rakitra "$1" nohon\'ny zo tsy ampy na ny tsy fisian\'ny petra-drakitra.',
 
 # File journal errors
 'filejournal-fail-dbconnect' => 'Tsy afaka miantso ilay banky angona laogy ho an\'ny terminal fitahirizana "$1".',
@@ -1796,8 +1798,7 @@ ity wiki ity dia no-regler-na ho sarababem-bahoaka.",
 
 # Special:ListFiles
 'listfiles-summary' => "Ahitana ny rakitra rehetra nampidirina ity pejy manokana ity.
-Napetraka eny amin'ny voalohandohany ny rakitra vao nampidirina.
-Tsindrio eo amin'ny lohan-tsanganana raha hanova ny laharam-pisehoana.",
+Rehefa sivanin'ny mpikambana iray izy ity, ny rakitra izay ahitana santiôna vaovao indrindra izay nalefan'io mpikamana io no aseho.",
 'listfiles_search_for' => 'Hitady anarana media :',
 'imgfile' => 'rakitra',
 'listfiles' => "Lisitran'ny rakitra",
@@ -1918,7 +1919,7 @@ Aza manadino manamarina raha tsy misy rohy makany amin'ny endrika hafa alohan'ny
 'statistics-users-active-desc' => "Mpikambana nanao zavatra teto tanatin'ny $1 andro{{PLURAL:}}.",
 'statistics-mostpopular' => 'Pejy voatsidika',
 
-'disambiguations' => 'pejina homonimia',
+'disambiguations' => 'Pejy misy rohy amina pejy fanalana ny fisalasalana',
 'disambiguationspage' => 'Template:homonimia',
 
 'doubleredirects' => 'Fihodinana roa',
@@ -2083,10 +2084,6 @@ Protokoly zaka <code>$1</code> aza ampiana ao amin'ny karokao izy ireo.",
 'activeusers-hidesysops' => 'Asitriho ny mpandrindra',
 'activeusers-noresult' => 'Tsy nahitana mpikambana.',
 
-# Special:Log/newusers
-'newuserlogpage' => 'Tatitr’asan’ny fanokafana kaontim-pikambana',
-'newuserlogpagetext' => "Ity pejy ity dia maneho ny tantaran'asan'ny fampidirana mpikambana vaovao.",
-
 # Special:ListGroupRights
 'listgrouprights' => "Fahefan'ny vondrom-pikambana",
 'listgrouprights-group' => 'Vondrona/Gropy',
@@ -2187,29 +2184,35 @@ Aoriana, raha irinao ny hanaisotra azy ao amin'ny pejy arahanao maso, dia tsindr
 'enotif_lastvisited' => "Jereo eto $1 ny niova rehetra hatramin'ny fitsidihanao farany.",
 'enotif_lastdiff' => 'Jereo $1 mba ahitana ireo fanovana ireo.',
 'enotif_anon_editor' => 'mpikambana tsy nisoratra anarana $1',
-'enotif_body' => '$WATCHINGUSERNAME,
+'enotif_body' => 'Tompoko $WATCHINGUSERNAME,
 
-$CHANGEDORCREATED $PAGEEDITOR tamin\'ny $PAGEEDITDATE ny pejy $PAGETITLE tao amin\'ny sehatra {{SITENAME}}. Jereo eto $PAGETITLE_URL ny votoatiny ankehitriny.
+$PAGEINTRO $NEWPAGE
 
-$NEWPAGE
+Ambangovangon\'ny mpikambana nanova : $PAGESUMMARY $PAGEMINOREDIT
 
-Fanazavana tsotsotra: $PAGESUMMARY $PAGEMINOREDIT
+Ifandraisana amin\'io mpikambana io :
+mailaka : $PAGEEDITOR_EMAIL
+wiki : $PAGEEDITOR_WIKI
 
-Fifandraisana amin\'ny nanova ny pejy:
-imailaka: $PAGEEDITOR_EMAIL
-wiki: $PAGEEDITOR_WIKI
+Tsy hisy fampandrenesana hafa raha misy mpikambana manova aorian\'ny nandefasana ity mailaka ity, raha tsy hoe mitsidika ilay pejy ianao. Azonao atao koa ny mamerina ho aotra ny flag fampandrenesana ho an\'ny pejy rehetra ao amin\'ny lisitry ny pejy arahanao.
 
-Tsy handefasana fampahafantarana intsony aloha ianao momba io pejy io na dia misy manova aza izy mandra-pitsidikao azy.
-Azonao atao koa ny manajanona ny fampahafantarana anao aloha na misy manova aza ny pejy iray ao amin\'ny lisitry ny pejy arahinao maso.
-
-             Ny fitaovana fampahafantarana eto amin\'ny {{SITENAME}}
+             Ny rafitr\'i {{SITENAME}} mampandre anao.
 
 --
-Raha hanova ny fandehan\'ny momba ny lisitry ny pejy arahi-maso, jereo
+Rehefa hanova ny parametatra mikasika ny fampandrenesana amin\'ny alalan\'ny mailaka, tsidiho
+{{canonicalurl:{{#special:Preferences}}}}
+
+
+Rehefa tia hanova ny parametatray ny lisitry ny pejy arahanao, tsidiho
 {{canonicalurl:{{#special:EditWatchlist}}}}
 
-Hevitrao sy fanampiana:
+Rehefa tsy hanaraka ilay pejy intsony ianao dia tsidiho
+$UNWATCHURL
+
+Verindrohy ary fanampiana:
 {{canonicalurl:{{MediaWiki:Helppage}}}}',
+'created' => 'voaforona',
+'changed' => 'voaova',
 
 # Delete
 'deletepage' => 'Hamafa ny pejy',
@@ -3303,7 +3306,10 @@ Aseho amin'ny tena habeny ny sary aseho, ny hafa dia alefa miaraka amin'ny rindr
 'logentry-newusers-newusers' => 'Noforonina ny kaontim-pikambana $1',
 'logentry-newusers-create' => 'Noforonina ny kaontim-pikambana $1',
 'logentry-newusers-create2' => "Noforonin'i $1 ny kaomtim-pikambana $3",
-'logentry-newusers-autocreate' => 'Noforonina ho azy ny kaontim-pikambana $&',
-'newuserlog-byemail' => "tenimiafina nalefa tamin'ny imailaka",
+'logentry-newusers-autocreate' => 'Noforonina ho azy ny kaontim-pikambana $1',
+'logentry-rights-rights' => "$1 dia nanova ny sokajim-pikambana isian'i $3 avy amin'ny $4 lasa $5",
+'logentry-rights-rights-legacy' => "$1 nanova ny vonodrom-pikambana isian'i $3",
+'logentry-rights-autopromote' => 'Lasa $5 ho azy i $1 izay $4 taloha',
+'rightsnone' => '(tsy misy)',
 
 );
index 53b0097..17588be 100644 (file)
@@ -591,6 +591,9 @@ $messages = array(
 'grouppage-bot' => '{{ns:project}}:Бот-влак',
 'grouppage-sysop' => '{{ns:project}}:Сайтвиктарыше-влак',
 
+# Special:Log/newusers
+'newuserlogpage' => 'У пайдаланыше регистрацийым эртарыме журнал',
+
 # User rights log
 'rightslog' => 'Пайдаланышын кертыж нерген журнал',
 
@@ -763,9 +766,6 @@ $messages = array(
 'activeusers-hidebots' => 'Бот-влакым шылташ',
 'activeusers-hidesysops' => 'Сайтвиктарыше-влакым шылташ',
 
-# Special:Log/newusers
-'newuserlogpage' => 'У пайдаланыше регистрацийым эртарыме журнал',
-
 # Special:ListGroupRights
 'listgrouprights-members' => '(тӱшкаште улшо-влак)',
 
index 0f11987..665e870 100644 (file)
 
 $fallback = 'id';
 
+$namespaceNames = array(
+       NS_FILE             => 'Berkas',
+       NS_TEMPLATE         => 'Templat',
+);
+
 $messages = array(
 # User preference toggles
 'tog-underline' => 'Garih bawahi link:',
@@ -46,7 +51,7 @@ $messages = array(
 'tog-enotifusertalkpages' => 'E-mail ambo jiko laman barundiang denai lah barubah',
 'tog-enotifminoredits' => 'Kirimkan surel juo untuk saketek suntingan pado laman jo gambar',
 'tog-enotifrevealaddr' => 'Cogokan alamaik e-mail den pado e-mail notifikasi',
-'tog-shownumberswatching' => 'Tujuakkan jumlah pamantau',
+'tog-shownumberswatching' => 'Tunjuakkan jumlah pamantau',
 'tog-oldsig' => 'Tando tangan kini:',
 'tog-fancysig' => 'Palakuan tando tangan sabagai teks wiki (tanpa suatu tautan otomatis)',
 'tog-externaleditor' => 'Gunokan editor eksternal sacaro bawaan (untuak nan ahli sajo, kabutuahan pangaturan khusus pado komputer Sanak [//www.mediawiki.org/wiki/Manual:External_editors Informasi labiah lanjuik.].)',
@@ -82,7 +87,7 @@ $messages = array(
 'tuesday' => 'Salaso',
 'wednesday' => "Raba'a",
 'thursday' => 'Kamih',
-'friday' => 'Jumek',
+'friday' => 'Jumaik',
 'saturday' => 'Sabtu',
 'sun' => 'Min',
 'mon' => 'Sin',
@@ -101,7 +106,7 @@ $messages = array(
 'august' => 'Agustus',
 'september' => 'September',
 'october' => 'Oktober',
-'november' => 'November',
+'november' => 'Nopember',
 'december' => 'Desember',
 'january-gen' => 'Januari',
 'february-gen' => 'Pebruari',
@@ -113,7 +118,7 @@ $messages = array(
 'august-gen' => 'Agustus',
 'september-gen' => 'September',
 'october-gen' => 'Oktober',
-'november-gen' => 'November',
+'november-gen' => 'Nopember',
 'december-gen' => 'Desember',
 'jan' => 'Jan',
 'feb' => 'Peb',
@@ -122,10 +127,10 @@ $messages = array(
 'may' => 'Mai',
 'jun' => 'Jun',
 'jul' => 'Jul',
-'aug' => 'Agu',
+'aug' => 'Ags',
 'sep' => 'Sep',
 'oct' => 'Okt',
-'nov' => 'Nov',
+'nov' => 'Nop',
 'dec' => 'Des',
 
 # Categories related messages
@@ -133,25 +138,26 @@ $messages = array(
 'category_header' => 'Laman dalam kategori "$1"',
 'subcategories' => 'Subkategori',
 'category-media-header' => 'Laman/Media dalam kategori "$1"',
-'category-empty' => "''Kini ko, indak ado terdapat laman ataupun media dalam kategori iko.''",
+'category-empty' => "''Kini ko, indak ado laman ataupun media dalam kategori ko.''",
 'hidden-categories' => '{{PLURAL:$1|Kategori tapandam|Kategori tapandam}}',
 'hidden-category-category' => 'Kategori tasambunyi',
-'category-subcat-count' => '{{PLURAL:$2|Kategori ko hanyo punyo subkategori berikut.|Kategori ko punyo {{PLURAL:$1|subkategori|$1 subkategori}}, dari total $2.}}',
+'category-subcat-count' => '{{PLURAL:$2|Kategori ko punyo {{PLURAL:$1|$1 subkategori}}, dari total $2.}}',
 'category-subcat-count-limited' => 'Kategori iko mamiliki {{PLURAL:$1|subkategori|$1 subkategori}} barikuik.',
-'category-article-count' => '{{PLURAL:$2|Kategori ko hanyo punyo laman berikut.|Kategori ko punyo  {{PLURAL:$1|laman|$1 laman}} dari total $2.}}',
+'category-article-count' => '{{PLURAL:$2|Kategori ko punyo {{PLURAL:$1|$1 laman}}, dari total $2.}}',
 'category-article-count-limited' => 'Kategori iko mamiliki {{PLURAL:$1|ciek laman|$1 laman}} barikuik.',
-'category-file-count' => '{{PLURAL:$2|Kategori iko hanyo mamiliki ciek laman barikuik.|Kategori iko mamiliki {{PLURAL:$1|laman|$1 laman}} barikuik, dari total $2.}}',
+'category-file-count' => '{{PLURAL:$2|Kategori ko ado {{PLURAL:$1|$1 laman}}, dari $2 laman.}}',
 'category-file-count-limited' => 'Kategori iko mamiliki {{PLURAL:$1|laman|$1 laman}} barikuik.',
 'listingcontinuesabbrev' => 'lanjuik',
 'index-category' => 'Laman nan diindeks',
 'noindex-category' => 'Laman nan indak diindeks',
-'broken-file-category' => 'Laman jo gambar rusak',
+'broken-file-category' => 'Laman jo gamba rusak',
 
-'about' => 'Tentang',
+'about' => 'Perihal',
 'article' => 'Artikel',
-'newwindow' => '(buka di jendela baru)',
+'newwindow' => '(bukak di jandela baru)',
 'cancel' => 'Batalkan',
 'moredotdotdot' => 'Lainnyo...',
+'morenotlisted' => 'Salabiahnyo...',
 'mypage' => 'Laman',
 'mytalk' => 'Maota',
 'anontalk' => 'Ota IP iko',
@@ -159,12 +165,12 @@ $messages = array(
 'and' => '&#32;jo',
 
 # Cologne Blue skin
-'qbfind' => 'Pencarian',
-'qbbrowse' => 'Browse',
+'qbfind' => 'Pancarian',
+'qbbrowse' => 'Jalajah',
 'qbedit' => 'Suntiang',
 'qbpageoptions' => 'Laman ko',
 'qbmyoptions' => 'Laman denai',
-'qbspecialpages' => 'Halaman istimewa',
+'qbspecialpages' => 'Laman istimewa',
 'faq' => 'FAQ',
 'faqpage' => 'Project:FAQ',
 
@@ -172,7 +178,7 @@ $messages = array(
 'vector-action-addsection' => 'Bagian baru',
 'vector-action-delete' => 'Hapuih',
 'vector-action-move' => 'Pindahkan',
-'vector-action-protect' => 'Lindungi',
+'vector-action-protect' => 'Linduangkan',
 'vector-action-undelete' => 'Pambatalan panghapusan',
 'vector-action-unprotect' => 'Tuka palinduangan',
 'vector-simplesearch-preference' => 'Aktifkan kotak pancarian sadarano (hanyo kulik Vector)',
@@ -183,10 +189,10 @@ $messages = array(
 'vector-view-viewsource' => 'Caliak sumber',
 'actions' => 'Tindakan',
 'namespaces' => 'Ruang namo:',
-'variants' => 'Variasi:',
+'variants' => 'Varian:',
 
 'navigation-heading' => 'Menu navigasi',
-'errorpagetitle' => 'Kesalahan',
+'errorpagetitle' => 'Kasalahan',
 'returnto' => 'Baliak ka $1',
 'tagline' => 'Dari {{SITENAME}}',
 'help' => 'Bantuan',
@@ -194,11 +200,11 @@ $messages = array(
 'searchbutton' => 'Cari',
 'go' => 'Tuju',
 'searcharticle' => 'Tuju',
-'history' => 'Riwayat halaman',
+'history' => 'Riwayaik laman',
 'history_short' => 'Riwayaik',
 'updatedmarker' => 'diubah sajak kunjuangan tarakhir ambo',
 'printableversion' => 'Versi cetak',
-'permalink' => 'Pranala parmanen',
+'permalink' => 'Pranala permanen',
 'print' => 'Cetak',
 'view' => 'Tampilkan',
 'edit' => 'Suntiang',
@@ -209,7 +215,7 @@ $messages = array(
 'deletethispage' => 'Hapuih laman iko',
 'undelete_short' => 'Batal hapuih $1 {{PLURAL:$1|suntiangan|suntiangan}}',
 'viewdeleted_short' => 'Liek {{PLURAL:$1|ciek suntiangan|$1 suntiangan}} nan dihapuih',
-'protect' => 'Lindungi',
+'protect' => 'Linduangkan',
 'protect_change' => 'ubah',
 'protectthispage' => 'Lindungi laman iko',
 'unprotect' => 'Tuka palinduangan',
@@ -218,7 +224,7 @@ $messages = array(
 'talkpage' => 'Musyawarahkan laman ko',
 'talkpagelinktext' => 'Maota',
 'specialpage' => 'Laman istimewa',
-'personaltools' => 'Pakakeh paribadi',
+'personaltools' => 'Pakakeh pribadi',
 'postcomment' => 'Bagian baru',
 'articlepage' => 'Liek isi laman',
 'talk' => 'Rundiang',
@@ -232,18 +238,18 @@ $messages = array(
 'viewhelppage' => 'Caliak laman bantuan',
 'categorypage' => 'Caliak laman kategori',
 'viewtalkpage' => 'Caliak laman ota',
-'otherlanguages' => 'Dalam baso lain',
+'otherlanguages' => 'Dalam bahaso lain',
 'redirectedfrom' => '(Dialiahkan dari $1)',
 'redirectpagesub' => 'Laman pengalihan',
-'lastmodifiedat' => 'Laman ko tarakhir diubah pado $2, $1.',
+'lastmodifiedat' => 'Laman ko taakia diubah pado $2, $1.',
 'viewcount' => 'Laman iko alah diakses sabanyak {{PLURAL:$1|ciek kali|$1 kali}}.<br />',
 'protectedpage' => 'Laman nan dilindungi',
 'jumpto' => 'Lompek ka:',
 'jumptonavigation' => 'pinteh',
 'jumptosearch' => 'cari',
 'view-pool-error' => 'Maaf, server sadang sibuak pado kini ko.
-Talalu banyak pangguno barusaho mancaliak laman iko.
-Tunggu sabanta sabalum Sanak mancubo baliak mangakses laman iko.
+Talalu banyak pangguno barusaho mancaliak laman ko.
+Tunggu sabanta sabalum Sanak mancubo baliak mangakses laman ko.
 
 $1',
 'pool-timeout' => 'Lewat waktu manunggu kunci',
@@ -259,34 +265,34 @@ $1',
 'currentevents-url' => 'Project:Kajadian kini ko',
 'disclaimers' => 'Sanggah',
 'disclaimerpage' => 'Project:Sanggahan umum',
-'edithelp' => 'Bantuan suntingan',
+'edithelp' => 'Bantuan suntiangan',
 'edithelppage' => 'Help:Suntingan',
-'helppage' => 'Help:Takadia',
-'mainpage' => 'Laman Utamo',
-'mainpage-description' => 'Laman utamo',
+'helppage' => 'Help:Isi',
+'mainpage' => 'Palanta',
+'mainpage-description' => 'Palanta',
 'policy-url' => 'Project:Kabijakan',
 'portal' => 'Portal komunitas',
 'portal-url' => 'Project:Portal komunitas',
 'privacy' => 'Kecipehan privasi',
 'privacypage' => 'Project:Kecipehan privasi',
 
-'badaccess' => 'Kesalahan hak akses',
-'badaccess-group0' => 'Sanak indak diizinkan untuak malakukan tindakan nan Sanak minta.',
-'badaccess-groups' => 'Tindakan nan Sanak minta dibatasi untuak pangguno dalam {{PLURAL:$2|kalompok|ciek dari kelompok}}: $1.',
+'badaccess' => 'Kasalahan hak akses',
+'badaccess-group0' => 'Sanak indak diizinkan untuak malakukan tindakan nan Sanak nio.',
+'badaccess-groups' => 'Tindakan nan Sanak nio dibatasi untuak pangguno dalam {{PLURAL:$2|kalompok|ciek dari kelompok}}: $1.',
 
 'versionrequired' => 'Dibutuahkan MediaWiki versi $1',
-'versionrequiredtext' => 'MediaWiki versi $1 dibutuahkan untuak manggunokan laman ijo. Caliak [[Special:Version|laman versi]]',
+'versionrequiredtext' => 'MediaWiki versi $1 dibutuahkan untuak manggunokan laman ko. Caliak [[Special:Version|versi laman]]',
 
 'ok' => 'OK',
 'retrievedfrom' => 'Didapek dari "$1"',
 'youhavenewmessages' => 'Awak punyo $1 ($2).',
 'newmessageslink' => 'pasan baru',
-'newmessagesdifflink' => 'parubahan terakhir',
+'newmessagesdifflink' => 'parubahan tarakhia',
 'youhavenewmessagesfromusers' => 'Sanak mandapek $1 dari {{PLURAL:$3|another user|$3 users}} ($2)',
 'youhavenewmessagesmanyusers' => 'Sanak mandapek $1 dari banyak pangguno ($2)',
 'newmessageslinkplural' => '{{PLURAL:$1|sabuah pasan baru|pasan baru}}',
 'newmessagesdifflinkplural' => '{{PLURAL:$1|parubahan}} taakhia',
-'youhavenewmessagesmulti' => 'Awak ang mandapek pasan baru pado $1',
+'youhavenewmessagesmulti' => 'Sanak mandapek pasan baru pado $1',
 'editsection' => 'suntiang',
 'editold' => 'suntiang',
 'viewsourceold' => 'caliak sumber',
@@ -303,8 +309,8 @@ $1',
 'restorelink' => 'Caliak {{PLURAL:$1|ciek suntiangan|$1 suntiangan}} nan dihapuih',
 'feedlinks' => 'Umpan:',
 'feed-invalid' => 'Tipe pamintaan umpan indak tapek.',
-'feed-unavailable' => 'Umpan sindikasi indak tasadio',
-'site-rss-feed' => '$1 RSS Umpan',
+'feed-unavailable' => 'Sindikasi umpan indak tasadio',
+'site-rss-feed' => '$1 Umpan RSS',
 'site-atom-feed' => 'Umpan Atom $1',
 'page-rss-feed' => 'Umpan RSS "$1"',
 'page-atom-feed' => '"$1" umpan Atom',
@@ -350,12 +356,12 @@ Basis data manghasilkan kasalahan "$3: $4".',
 'readonly' => 'Basis data dikunci',
 'enterlockreason' => 'Masuakkan alasan panguncian, tamasuak pakiraan bilo kunci akan dibuka',
 'readonlytext' => 'Basis data sadang dikunci tahadok masuakan baru. Panguruih nan malakukan panguncian mamberikan panjalehan sabagai berikut: <p>$1',
-'missing-article' => 'Basis data indak dapek manamukan teks dari laman nan saharuihnyo ado, yaitu "$1" $2.
+'missing-article' => 'Basisdata indak dapek manamukan teks dari laman nan saharuihnyo ado, yaitu "$1" $2.
 
 Hal ko biasonyo disababkan dek pranala usang ka pabaikkan tadahulu laman nan alah dihapuih.
 
-Jikok bukan iko panyababnyo, Sanak mungkin alah manamukan sabuah bug dalam pakakeh lunak.
-Silakan laporkan hal iko ka [[Special:ListUsers/sysop|Pangurus]], dangan manyabuikkan alamaik URL nan dituju.',
+Jikok bukan ko panyababnyo, Sanak mungkin alah manamukan sabuah bug dalam pakakeh lunak.
+Silakan laporkan hal iko ka [[Special:ListUsers/sysop|pangurus]], sarato manyabuikkan alamaik URL nan dituju.',
 'missingarticle-rev' => '(revisi#: $1)',
 'missingarticle-diff' => '(Bedo: $1, $2)',
 'readonly_lag' => 'Basis data alah dikunci otomatis salagi basis data sakunder malakukan sinkronisasi jo basis data utamo',
@@ -378,7 +384,7 @@ Mungkin alah dihapuih jo urang lain.',
 'delete-hook-aborted' => 'Pengapusan batal jo hook.
 Indak ado keterangan.',
 'badtitle' => 'Judul indak sah',
-'badtitletext' => 'Permintaan judul laman indak sah, kosong, atau antarbaso atau antarwiki yang salah sambuang. Mungkin juo ado kandungan karakter yang indak buliah digunoan untuak judul.',
+'badtitletext' => 'Pamintaan judul laman indak sah, kosong, atau antarbaso atau antarwiki nan salah sambuang. Mungkin juo ado kandungan karakter nan indak buliah digunoan untuak judul.',
 'perfcached' => 'Data barikuik ko diambiak dari singgahan dan mungkin indak data nan baru. Nan tabanyak dari {{PLURAL:$1|suatu hasil dari|$1 hasilnyo}} ado di singgahan.',
 'perfcachedts' => 'Data barikuik ko singgahan, dan tarakhir diperbarui $1. Nan tabanyak dari {{PLURAL:$1|suatu hasil dari|$1 hasilnyo}} ado di singgahan.',
 'querypage-no-updates' => 'Pamutakhiran dari laman iko sadang dimatian. Data nan ado di siko saat iko indak akan dimuaik ulang.',
@@ -390,8 +396,8 @@ Indak ado keterangan.',
 'protectedpagetext' => 'Laman ko alah dikunci untuak manghindari panyuntiangan.',
 'viewsourcetext' => 'Sanak dapek malihek atau manyalin sumber laman iko:',
 'viewyourtext' => 'Sanak bisa mancaliak dan mangopi sumber untuak "editan sanak" ka halaman iko',
-'protectedinterface' => 'Laman iko barisi teks antarmuko untuak digunoan oleh parangkaik lunak di wiki iko sajo, dan alah dikunci untuak manghindari kasalahan. 
-Untuak manambah atau mangubah tarjemahan di sadonyo wiki, tolong digunoan [//translatewiki.net/ translatewiki.net], yaitu proyek lokalisasi dari MediaWiki.',
+'protectedinterface' => 'Laman iko baisi teks antarmuko untuak digunoan dek parangkaik lunak di wiki iko sajo, dan alah dikunci untuak maindaan kasalahan. 
+Untuak manambah atau maubah tajamahan di sadonyo wiki, harap gunoan [//translatewiki.net/ translatewiki.net], yaitu proyek palokalan MediaWiki.',
 'editinginterface' => "'''Paringatan:''' Sanak manyuntiang laman nan digunoan untuak manyadiokan teks antarmuko untuak parangkaik lunak.
 Parubahan teks ko akan mampangaruhi tampilan pado antarmuko pangguno untuak pangguno lain.
 Untuak tarjamahan, harap gunokan [//translatewiki.net/wiki/Main_Page?setlang=id translatewiki.net], proyek palokalan MediaWiki.",
@@ -408,6 +414,7 @@ Alasan nan diberikan adolah ''$2''.",
 
 Pangurus nan manguncinyo manawarkan penjelasan: "$3"',
 'invalidtitle-knownnamespace' => '↓Judul nan indak sah jo ruangnamo "$2" dan teks "$3"',
+'invalidtitle-unknownnamespace' => 'Judul nan tak sah jo nomor ruang namo indak diketahui $1 dan teks "$2"',
 'exception-nologin' => 'Indak log masuak',
 'exception-nologin-text' => 'Halaman ko hanyo bisa disuntiang dek pangguno badaftar.',
 
@@ -440,12 +447,12 @@ Parhatian bahawa bara laman mungkin masih taruih manunjukkan bahawa Sanak masih
 'userlogout' => 'Kalua log',
 'notloggedin' => 'Alun masuak log',
 'nologin' => "Alun mampunyoi akun? '''$1'''.",
-'nologinlink' => 'Cipta akun baru',
-'createaccount' => 'Buek akun baharu',
-'gotaccount' => "Alah tadaftar sabagai pangguno? '''$1'''.",
+'nologinlink' => 'Buek akun baru',
+'createaccount' => 'Buek akun',
+'gotaccount' => "Alah tadafta sabagai pangguno? '''$1'''.",
 'gotaccountlink' => 'Masuak log',
-'userlogin-resetlink' => 'Lupo detail info masuak Sanak?',
-'createaccountmail' => 'malalui surel',
+'userlogin-resetlink' => 'Lupo rincian info masuak Sanak?',
+'createaccountmail' => 'Pakai kato sandi sumbarang samantaro, lalu kirim ka alamaik surel nan di bawah ko',
 'createaccountreason' => 'Alasan:',
 'badretype' => 'Kato sandi nan Sanak masuakkan salah.',
 'userexists' => 'Namo pangguno nan dipiliah alah tapakai.
@@ -468,7 +475,7 @@ Pastian Sanak alah mangaktifan kuki, lalu muek ulang laman iko dan cubo baliak.'
 Namo psngguno msmbedokan kapitalisasi.
 Pariso baliak ejaan Sanak, atau [[Special:UserLogin/signup|buek akun baharu]].',
 'nosuchusershort' => 'Indak ado pangguno jo namo "$1".
-Sila pariso baliak ejaan Sanak.',
+Cubo pariso baliak ejaan Sanak.',
 'nouserspecified' => 'Sanak harus mamasuakkan namo pangguno.',
 'login-userblocked' => 'Pangguno iko diblokir. Indak diizinan/dipabuliahan untuak masuak log.',
 'wrongpassword' => 'Kato sandi nan Sanak masuakkan salah. Sila cubo baliak.',
@@ -517,6 +524,7 @@ Sila manunggu sabalun mancubo baliak.',
 # E-mail sending
 'php-mail-error-unknown' => 'Kasalahan nan indak dikana dalam fungsi mail() PHP',
 'user-mail-no-addy' => 'Mancubo mangirim e-mail tanpa alamat e-mail nan sah.',
+'user-mail-no-body' => 'Mancubo kirim surel kosong atau pasan talalu pendek',
 
 # Change password dialog
 'resetpass' => 'Tuka kato sandi',
@@ -570,55 +578,57 @@ ingin maubahnyo, Sanak dapek maabaikan pasan iko dan taruih manggunokan sandi la
 'passwordreset-emailelement' => 'Namo pangguno: $1
 Sandi samantaro: $2',
 'passwordreset-emailsent' => 'Surel pangingek alah dikiriman.',
-'passwordreset-emailsent-capture' => 'E-mail paringatan alah dikirim, nan tacaliak di bawah ko.',
+'passwordreset-emailsent-capture' => 'Surel paringatan alah dikirim, nan nampak di bawah ko.',
+'passwordreset-emailerror-capture' => 'Surel pangingek, nan ditampilkan di bawah, alah dibuek, tapi pengirimannyo gagal ka pangguno: $1',
 
 # Special:ChangeEmail
 'changeemail' => 'Tuka alamat e-mail.',
 'changeemail-header' => 'Ganti alamat e-mail.',
-'changeemail-text' => 'Panuahan formulir iko untuak mangganti alamat e-mail. Sanak harus mamasuakkan kato kunci untuak mangonfirmasi.',
-'changeemail-no-info' => 'Sanak harus masuak log untuak mangakses halaman ko.',
-'changeemail-oldemail' => 'Alamat e-mail kini:',
-'changeemail-newemail' => 'Alamat e-mail baharu:',
+'changeemail-text' => 'Isi formulir ko untuak mangganti alamat surel. Sanak harus mamasuakkan kato sandi untuak mayakinkan parubahan.',
+'changeemail-no-info' => 'Sanak harus masuak log untuak mangakses laman ko.',
+'changeemail-oldemail' => 'Alamat surel kini:',
+'changeemail-newemail' => 'Alamat surel baru:',
 'changeemail-none' => '(indak ado)',
-'changeemail-submit' => 'Ganti e-mail.',
+'changeemail-password' => 'Sandi {{SITENAME}} Sanak:',
+'changeemail-submit' => 'Ganti surel.',
 'changeemail-cancel' => 'Batalkan',
 
 # Edit page toolbar
-'bold_sample' => 'Teks dicetak taba',
-'bold_tip' => 'Teks dicetak taba',
-'italic_sample' => 'Teks dicetak miriang',
-'italic_tip' => 'Teks dicetak miriang',
+'bold_sample' => 'Teks taba',
+'bold_tip' => 'Teks taba',
+'italic_sample' => 'Teks miriang',
+'italic_tip' => 'Teks miriang',
 'link_sample' => 'Judul pranala',
-'link_tip' => 'Pranala dalam',
-'extlink_sample' => 'http://www.example.com judul pranala',
+'link_tip' => 'Pranala internal',
+'extlink_sample' => 'http://www.hanyo-contoh.com judul pranala',
 'extlink_tip' => 'Pranala lua (ingek awalannyo http://)',
-'headline_sample' => 'Teks tajuk',
-'headline_tip' => 'Tingkek 2 tajuk',
-'nowiki_sample' => 'Masuakkan disiko teks yang indak diformat',
-'nowiki_tip' => 'Abaikan pemformatan wiki',
+'headline_sample' => 'Teks judul',
+'headline_tip' => 'Tingkek 2 judul',
+'nowiki_sample' => 'Masuakkan disiko teks nan indak baformat',
+'nowiki_tip' => 'Abaikan format wiki',
 'image_tip' => 'Cantumkan berkas',
 'media_tip' => 'Pranala berkas',
-'sig_tip' => 'Tandotangan awak jo tando waktu',
-'hr_tip' => 'Garih horizontal',
+'sig_tip' => 'Tandotangan sanak jo waktu',
+'hr_tip' => 'Garih mandata',
 
 # Edit pages
 'summary' => 'Ringkasan:',
-'subject' => 'Subjek/tajuk:',
-'minoredit' => 'Iko di suntiang saketek',
+'subject' => 'Subjek/judul:',
+'minoredit' => 'Suntiangan ketek',
 'watchthis' => 'Pantau laman ko',
-'savearticle' => 'Simpan halaman',
-'preview' => 'Pratonton',
-'showpreview' => 'Lihek pratonton',
+'savearticle' => 'Simpan laman',
+'preview' => 'Caliak',
+'showpreview' => 'Caliak pratonton',
 'showlivepreview' => 'Pratayang langsuang',
-'showdiff' => 'Lihek parubahan',
-'anoneditwarning' => "'''Peringatan:''' Awak alun masuak log.
-Alamat IP awak akan tacatat pado riwayat suntingan laman ko.",
+'showdiff' => 'Caliak parubahan',
+'anoneditwarning' => "'''Ingek:''' Sanak alun masuak log.
+Alamat IP sanak tacatat pado riwayaik suntiangan laman ko.",
 'anonpreviewwarning' => "''Sanak alun masuak log. Manyimpan laman akan manyababkan alamaik IP Sanak tacatat pado riwayat suntiangan laman iko.''",
 'missingsummary' => "'''Paringatan:''' Sanak indak mamasuakan ringkasan panyuntiangan. Jikok Sanak baliak manakan tombol Simpan, suntiangan Sanak akan disimpan tanpa ringkasan panyuntiangan.",
 'missingcommenttext' => 'Sila masuakan komenta di bawah iko.',
 'missingcommentheader' => "'''Paringatan:''' Sanak alun maagihan subjek atau judul untuak komenta Sanak. Jikok Sanak baliak manakan \"{{int:savearticle}}\", suntiangan Sanak akan disimpan tanpa komenta tasabuik.",
-'summary-preview' => 'Pratonton ringkasan:',
-'subject-preview' => 'Pratayang sabyek/tajuak:',
+'summary-preview' => 'Ringkasan pratayang:',
+'subject-preview' => 'Pratayang subyek/judul:',
 'blockedtitle' => 'Pangguno diblokir',
 'blockedtext' => "'''Namo pangguno atau alamaik IP Sanak alah diblokir.'''
 
@@ -665,28 +675,28 @@ Subbagian iko mungkin dipindahan atau dihapuih katiko Sanak mambukanyo.',
 Kato sandi untuak akun baharu iko dapek diubah di laman ''[[Special:ChangePassword|pangubahan kato sandi]]'' satalah masuak log.",
 'newarticle' => '(Baru)',
 'newarticletext' => "Laman nan awak cari alun ado.
-Untuak mambuek laman tu, mulailah dengan menulis dalam kotak di bawah (lihek [[{{MediaWiki:Helppage}}|laman bantuan]] untuak maklumat lanjut).
-Jiko awak indak sangajo sampai ka laman ko, klik tombol '''back''' pado penjelajah web awak.",
+Untuak mambuek laman tu, mulailah dangan manulih dalam kotak di bawah (caliak [[{{MediaWiki:Helppage}}|laman bantuan]] untuak informasi lanjuiknyo).
+Jikok awak indak sangajo sampai ka laman ko, klik tombol '''back''' pado panjalajah web awak.",
 'anontalkpagetext' => "----''Iko adolah laman pambicaraan saurang pangguno anonim nan alun mambuek akun atau indak manggunoannyo.
 Jadi, kami tapaso harus mamakai alamat IP nan basangkutan untuak maidentifikasikannyo.
 Jikok Sanak adolah saurang pangguno anonim dan marasa mandapekkan komentar-komentar nan indak relevan nan ditujuan langsung kapado Sanak, sila [[Special:UserLogin/signup|mambuek akun]] atau [[Special:UserLogin|masuak log]] untuak mahindari karancuan jo pangguno anonim lainnya di lain wakatu.''",
 'noarticletext' => 'Kini ko indak ada teks di laman iko.
 Sanak dapek [[Special:Search/{{PAGENAME}}|malakukan pancarian untuak judul laman iko]] di laman-laman lain, <span class="plainlinks">[{{fullurl:{{#Special:Log}}|page={{FULLPAGENAMEE}}}} mancari log takaik], atau [{{fullurl:{{FULLPAGENAME}}|action=edit}} manyuntiang laman iko]</span>.',
-'noarticletext-nopermission' => 'Kini ko indak ado teks dalam laman iko.
+'noarticletext-nopermission' => 'Kini ko indak ado teks dalam laman ko.
+Sanak dapek [[Special:Search/{{PAGENAME}}|malakukan pancarian untuak judul laman ko]] di laman lain, atau <span class="plainlinks">[{{fullurl:{{#Special:Log}}|page={{FULLPAGENAMEE}}}} mancahari log takaik] </span>, tapi Sanak indak punyo izin untuak mambuek laman ko.',
+'missing-revision' => 'Revisi $1 di laman nan banamo "{{PAGENAME}}" ko indak ado.
 
-Sanak dapek [[Special:Search/{{PAGENAME}}|malakukan pancahari untuak judul laman iko]] di laman lain, atau <span class="plainlinks">[{{fullurl:{{#Special:Log}}|page={{FULLPAGENAMEE}}}} mancahari log takaik] </span>, tapi Sanak indak punyo izin untuak mambuek laman iko.',
-'missing-revision' => 'Revisi $1 di halaman ko nan banamo "{{PAGENAME}}" indak ado.
-
-Hal iko biasonyo disababkan dek pranala sajarah nan alah kadaluarsa ka halaman ko nan alah dihapuih.
+Hal iko biasonyo disababkan dek pranala sijarah nan alah kadaluarsa ka laman nan alah dihapuih.
 Rinciannyo dapek dicaliak di [{{fullurl:{{#Special:Log}}/delete|page={{FULLPAGENAMEE}}}} log panghapuihan].',
 'userpage-userdoesnotexist' => 'Akun pangguno "<nowiki>$1</nowiki>" indak tadafta.',
 'userpage-userdoesnotexist-view' => 'Pangguno "$1" indak tadafta.',
-'blocked-notice-logextract' => 'Pangguno iko sadang diblokir.
-Entri log pamblokiran tabaharu iko disadioan di bawah iko untuak referensi:',
-'clearyourcache' => "'''Catatan:''' Sasudah manyimpan preferensi, Sanak mungkin paralu mambarasiahan singgahan panjalajah web Sanak untuak mancaliak parubahan. '''Mozilla / Firefox / Safari:''' takan ''Ctrl-R'' (''Cmd-R'' pado Mac);
-'''Konqueror:''': takan ''F5'';
-'''Opera''' barasiahan singgahan malalui menu ''Tools → Preferences'';
-'''Internet Explorer:''' takan ''Ctrl-F5''.",
+'blocked-notice-logextract' => 'Pangguno ko tangah diblokir.
+Entri log pamblokiran tabaru disadioan di bawah ko untuak referensi:',
+'clearyourcache' => "'''Catatan:''' Sasudah menyimpan, Sanak mungkin harus meminteh singgahan paramban Sanak untuak maliek parubahan.
+* '''Firefox / Safari:''' Tahan ''Shift'' sambia mangklik ''Reload'', atau takan ''Ctrl-F5'' atau ''Ctrl-R'' (''⌘-R'' di Mac)
+* '''Google Chrome:''' Takan ''Ctrl-Shift-R'' (''⌘-Shift-R'' di Mac)
+* '''Internet Explorer:''' Tahan ''Ctrl'' sambia mangklik ''Refresh'', atau takan ''Ctrl-F5''
+* '''Opera:''' Barasiahkan tembolok di ''Tools → Preferences''",
 'usercssyoucanpreview' => "'''Tips:''' Gunoan tombol \"{{int:showpreview}}\" untuak mauji CSS baharu Sanak sabalun manyimpannyo.",
 'userjsyoucanpreview' => "'''Tips:''' Gunoan tombol \"{{int:showpreview}}\" untuak mauji JS baharu Sanak sabalun manyimpannyo.",
 'usercsspreview' => "'''Ingeklah bahawa Sanak sadang manampilan pratayang dari CSS Sanak.
@@ -699,7 +709,7 @@ Pratayang iko alun disimpan!'''",
 'userinvalidcssjstitle' => "'''Paringatan:''' Kulik \"\$1\" indak ditamuan. Harap diingek bahawa laman .css dan .js manggunokan huruf kecil, contoh {{ns:user}}:Foo/vector.css dan bukannyo {{ns:user}}:Foo/Vector.css.",
 'updated' => '(Dipabaharui)',
 'note' => "'''Catatan:'''",
-'previewnote' => "'''Ingek bahasonyo iko hanyo pratonton'''
+'previewnote' => "'''Ingek ko hanyo pratonton'''
 Parubahan Sanak alun disimpan!",
 'continue-editing' => 'Pai ka area mangedit.',
 'previewconflict' => 'Pratayang iko mancaminan teks pado bagian ateh kotak suntiangan teks sabagaimano akan taliek bilo Sanak manyimpannyo.',
@@ -717,7 +727,7 @@ Suntiangan tasabuik ditolak untuak mancegah kasalahan pado teks laman.
 Hal iko kadang tajadi jikok Sanak manggunokan layanan proxy anonim babasis web nan bamasalah.",
 'edit_form_incomplete' => "'''Babarapo bagian dari formulir suntiangan indak mancapai server; pariso baliak apokah suntiangan Sanak tatap utuah dan cubo lai.'''",
 'editing' => 'Manyuntiang $1',
-'creating' => 'Mambuek $!',
+'creating' => 'Mambuek $1',
 'editingsection' => 'Suntiang $1 (bagian)',
 'editingcomment' => 'Manyuntiang $1 (bahagian baharu)',
 'editconflict' => 'Konflik panyuntiangan: $1',
@@ -734,16 +744,16 @@ Alah tadapek sabuah solusi agar Sanak dapek manyuntiang laman jo aman: karakter
 Sanak manyuntiang revisi lama suatu laman.
 Jikok Sanak manyimpannyo, parubahan-parubahan nan dibuek sajak revisi iko akan hilang.'''",
 'yourdiff' => 'Pambedoan',
-'copyrightwarning' => "Untuak diingek bahwa apo nan disumbang kapado {{SITENAME}} dianggap lah dilapeh di bawah $2 (lihek $1 untuak lengkapnyo).
-Jiko awak indak ingin apo nan ditulis tu disuntiang dan disebarkan, jan dikirim tulisan tu ka siko.<br />
-Awak juo mesti bajanji bahwa itu adolah hasil karya awak surang, atau disalin dari sumber milik basamo atau sumber bebas lainnyo.
-'''Jan dikirim karya punyo hak cipta tanpa izin!'''",
+'copyrightwarning' => "Untuak diingek bahaso apo nan disumbang kapado {{SITENAME}} dianggap lah dilapeh di bawah $2 (caliak $1 untuak langkoknyo).
+Jikok awak indak ingin apo nan ditulih tu disuntiang dan disebaran, jan dikirim tulisan tu ka siko.<br />
+Awak musti bajanji juo bahaso iko adolah asia karya awak surang, atau disalin dari sumber miliak basamo atau sumber bebas lainnyo.
+'''Jan dikirim karya bahak cipta nan indak baizin!'''",
 'copyrightwarning2' => "Parhatikan bahawa sadoalah kontribusi terhadap {{SITENAME}} dapek disuntiang, diubah, atau dihapuih oleh panyumbang lainnyo. Jikok Sanak indak ingin tulisan Sanak disuntiang urang lain, jan kiriman ka siko.<br />Sanak jua bajanji bahawa iko adolah hasil karyo Sanak surang, atau disalin dari sumber miliak umum atau sumber bebas nan lain (liek $1 untuak informasi labiah lanjuik). '''JAN KIRIMAN KARYO NAN DILINDUNGI HAK CIPTA TANPA IJIN!'''",
-'longpageerror' => "'''KASALAHAN: Teks nan Sanak kiriman sagadang $1 kilobita, nan barati labiah gadang dari jumlah maksimum $2 kilobita. Teks indak dapek disimpan.'''",
-'readonlywarning' => "'''PARINGATAN: Basis data sadang dikunci karano pamaliharaan, sahinggo saat iko Sanak indak dapek manyimpan hasil suntiangan Sanak.
-Sanak mungkin paralu manyalin teks suntiangan Sanak iko dan manyimpannyo ka sabuah berkas teks dan mamuekannyo baliak sausai pamaliharaan usai.'''
+'longpageerror' => "'''KASALAHAN: Teks nan Sanak kiriman sagadang {{PLURAL:$1|kilobita|$1 kilobita}}, nan barati labiah gadang dari jumlah maksimum {{PLURAL:$2|kilobita|$2 kilobita}}. Teks indak dapek disimpan.'''",
+'readonlywarning' => "'''PARINGATAN: Basis data sadang dikunci untuak pamaliharaan, sahinggo saat iko Sanak indak dapek manyimpan hasil suntiangan.''' 
+Sanak mungkin paralu manyalin teks suntiangan Sanak ko dan simpankan ka sabuah berkas teks guno mamuekannyo baliak kundian.
 
-Pangurus nan mangunci basis data magiahan panjalehan barikuik: $1",
+Panguruih nan mangunci basis data maagiahan panjalehan barikuik: $1",
 'protectedpagewarning' => "'''Paringatan: Laman iko sadang dilinduangi sahinggo hanyo pangguno jo hak akses pangurus nan dapek manyuntiangnyo.'''
 Entri catatan tarakhir disadioan di bawah untuak referensi:",
 'semiprotectedpagewarning' => "'''Paringatan: Laman iko sadang dilinduangi sahinggo hanyo pangguno tadafta nan bisa manyuntiangnyo.'''
@@ -751,13 +761,12 @@ Entri catatan tarakhir disadioan di bawah untuak referensi:",
 'cascadeprotectedwarning' => "'''PARINGATAN:''' Laman iko sadang dilinduangi sahinggo hanyo pangguno jo hak akses pangurus sajo nan dapek manyuntiangnyo karano disaratokan dalam {{PLURAL:$1|laman|laman-laman}} barikuik nan alah dilinduangi jo opsi 'palinduangan runtun':",
 'titleprotectedwarning' => "'''Paringatan: Laman iko alah dilinduangi sahinggo diparaluan [[Special:ListGroupRights|hak khusus]] untuak mambueknyo.'''
 Entri catatan tarakhir disadioan di bawah untuak referensi:",
-'templatesused' => '{{PLURAL:$1|Templat|Templat}} yang digunoan di laman iko:',
+'templatesused' => '{{PLURAL:$1|Templat}} yang digunoan di laman ko:',
 'templatesusedpreview' => '{{PLURAL:$1|Templat|Templat}} yang digunoan dalam pratonton ko:',
 'templatesusedsection' => '{{PLURAL:$1|Templat|Templat}} nan digunoan di bagian iko:',
 'template-protected' => '(dilinduangi)',
 'template-semiprotected' => '(semi-perlindungan)',
-'hiddencategories' => 'Laman ko marupokan kalompok dari {{PLURAL:$1|1 kategori tapandam|$1 kategori tapandam}}:',
-'nocreatetitle' => 'Pambuekan laman baharu dibatasi',
+'hiddencategories' => 'Laman ko marupokan kalompok dari {{PLURAL:$1|$1 kategori tapandam}}:',
 'nocreatetext' => '{{SITENAME}} alah mambatasi pambuekan laman-laman baharu.
 Sanak dapek baliak dan manyuntiang laman nan alah ado, atau sila [[Special:UserLogin|masuak log atau mambuek akun]].',
 'nocreate-loggedin' => 'Sanak ndak mampunyoi hak akses untuak mambuek laman baharu.',
@@ -765,14 +774,16 @@ Sanak dapek baliak dan manyuntiang laman nan alah ado, atau sila [[Special:UserL
 'sectioneditnotsupported-text' => 'Panyuntiangan bagian indak didukuang di laman suntiang iko.',
 'permissionserrors' => 'Kasalahan Hak Akses',
 'permissionserrorstext' => 'Sanak ndak mampunyoi hak untuak malakuan hal itu karano {{PLURAL:$1|alasan|alasan-alasan}} barikuik:',
-'permissionserrorstext-withaction' => 'Awak indak punyo hak akses untuak $2, karano {{PLURAL:$1|alasan|alasan}} berikut:',
-'recreate-moveddeleted-warn' => "'''Paringatan: Sanak mambuek ulang suatu laman nan alah parnah dihapuih.'''
+'permissionserrorstext-withaction' => 'Awak indak punyo hak akses untuak $2, karano {{PLURAL:$1|alasan}} barikuik:',
+'recreate-moveddeleted-warn' => "'''Ingek: Sanak mambuek ulang suatu laman nan alah dihapuih.'''
 
-Harap patimbangan apokah layak untuak malanjutan suntiangan Sanak.
-Barikuik adolah log panghapuihan dan pamindahan dari laman iko:",
-'moveddeleted-notice' => 'Laman iko alah dihapuih.
-Sabagai referensi, barikuik adolah log panghapusan dan pamindahan laman iko.',
+Harap ditimbang apo rancak malanjuikan suntiangan Sanak.
+Barikuik ko log panghapuihan jo pamindahan dari laman ko:",
+'moveddeleted-notice' => 'Laman ko alah dihapuih.
+Sabagai referensi, barikuik adolah log panghapuihan dan pamindahannyo.',
 'log-fulllog' => 'Liek saluruah log',
+'edit-hook-aborted' => 'Suntiangan dibatalan samo kait parser
+tanpa ado katarangan.',
 'edit-gone-missing' => 'Indak bisa mamperbarui halaman.
 Mungkin alah dihapuih.',
 'edit-conflict' => 'Konflik suntingan.',
@@ -780,7 +791,9 @@ Mungkin alah dihapuih.',
 'edit-already-exists' => 'Indak bisa mambuek halaman baru.
 Alah ado.',
 'defaultmessagetext' => 'Teks pasan default.',
+'content-failed-to-parse' => 'Gagal manjabarkan konten $2 untuak model $1: $3',
 'invalid-content-data' => 'Data kanduangan indak valid.',
+'content-not-allowed-here' => 'Konten "$1" indak diizinan di laman [[$2]]',
 
 # Content models
 'content-model-wikitext' => 'Teks wiki',
@@ -789,77 +802,144 @@ Alah ado.',
 'content-model-css' => 'CSS',
 
 # Parser/template warnings
+'expensive-parserfunction-warning' => "'''Paringatan:''' Laman ko manganduang talalu banyak panggilan fungsi parser.
+
+Seharusnyo kurang dari $2 {{PLURAL:$2|panggilan|$2 panggilan}}, tapi {{PLURAL:$1|kini ado $1 panggilan|kini ko ado $1 panggilan}}.",
+'expensive-parserfunction-category' => 'Laman nan talalu banyak panggilan fungsi parser',
 'post-expand-template-inclusion-warning' => "'''Peringatan:''' Ukuran templat talalu gadang.
 Babarapo templat akan diabaikan.",
 'post-expand-template-inclusion-category' => 'Laman nan ukurannyo templatnyo malabiahi bateh',
-'post-expand-template-argument-warning' => 'Peringatan: Laman ko barisi satidaknyo ciek uraian templat na baukuran ekspansi nan talalu gadang. 
+'post-expand-template-argument-warning' => 'Paringatan: Laman ko barisi satidaknyo ciek uraian templat na ukuran ekspansinyo talalu gadang. 
 Uraian-uraian tu alah diabaikan.',
-'post-expand-template-argument-category' => 'Laman nan barisi uraian template nan diabaikan',
+'post-expand-template-argument-category' => 'Laman nan barisi uraian templat nan diabaikan',
+'parser-template-loop-warning' => 'Hubungan barulang templat tadeteksi: [[$1]]',
+'parser-template-recursion-depth-warning' => 'Limit kadalaman hubungan barulang templat lah talampau ($1)',
+'language-converter-depth-warning' => 'Bateh kadalaman pangonversi bahaso lah talampau ($1)',
+'node-count-exceeded-category' => 'Laman dimano hitungan-node talampaui',
+'node-count-exceeded-warning' => 'Laman hitungan-node lah talampau',
+'expansion-depth-exceeded-category' => 'Laman dima kadalaman ekspansi lah talampau',
+'expansion-depth-exceeded-warning' => 'Laman kadalaman ekspansi lah talampau',
+'parser-unstrip-loop-warning' => 'Unstrip loop detected',
+'parser-unstrip-recursion-limit' => 'Unstrip recursion limit exceeded ($1)',
+'converter-manual-rule-error' => 'Kasalahan tadeteksi di aturan manual konversi bahaso',
+
+# "Undo" feature
+'undo-success' => 'Suntiangan iko dapek dibatalan. 
+Tolong cek pabandiangan di bawah untuak mayakinkan bahwa bana itu nan Sanak ingin buek, lalu simpan parubahan tasabuik untuak manyalasaikan pambatalan suntiangan.',
+'undo-failure' => 'Suntiangan ko indak dapek dibatalan dek konflik panyuntiangan antaro.',
+'undo-norev' => 'Suntiangan ko indak dapek dibatalan dek laman indak ditamukan atau lah dihapuih.',
+'undo-summary' => 'Mambatalan revisi $1 oleh [[Special:Contributions/$2|$2]] ([[User talk:$2|talk]])',
+
+# Account creation failure
+'cantcreateaccounttitle' => 'Indak dapek mambuek akun',
+'cantcreateaccount-text' => "Mambuek akun dari alamat IP ko ('''$1''') alah diblok jo [[User:$3|$3]].
+
+Alasan nan diagiah jo $3 adolah ''$2''",
 
 # History pages
-'viewpagelogs' => 'Lihek log untuak laman ko',
-'currentrev-asof' => 'Revisi terkini pado $1',
+'viewpagelogs' => 'Caliak log untuak laman ko',
+'nohistory' => 'Indak ado sajarah panyuntiangan untuak laman ko',
+'currentrev' => 'Revisi tabaru',
+'currentrev-asof' => 'Revisi tabaru pado $1',
 'revisionasof' => 'Pabaikkan per $1',
 'revision-info' => 'Revisi sajak $1 dek $2',
 'previousrevision' => '← Pabaikkan sabalunnyo',
-'nextrevision' => 'Revisi selanjutnyo →',
-'currentrevisionlink' => 'Revisi terkini',
+'nextrevision' => 'Revisi selanjuiknyo →',
+'currentrevisionlink' => 'Revisi tabaru',
 'cur' => 'kini',
+'next' => 'lanjuik',
 'last' => 'sabalun',
-'histlegend' => "Membandingkan pilihan: Tandoi dari revisi yang ingin dibandingkan dengan memilih kotak radionyo dan tekan tombol ''Bandingkan revisi pilihan''.<br />
-Legend: '''({{int:kini}})''' = perbedaan jo revisi terakhir, '''({{int:dulu}})''' = perbedaan jo revisi sabalunnyo, '''{{int:k}}''' = suntingan ketek, '''{{int:b}}''' = suntingan bot.",
-'history-fieldset-title' => 'Telusuri riwayat',
+'page_first' => 'awal',
+'page_last' => 'akhir',
+'histlegend' => "Bandiangkan pilihan: Tandoi revisi untuak mambandiangkan dan takan enter atau tombol di bawah.<br />
+Contoh: '''({{int:cur}})''' = bedo jo versi tarakhia, '''({{int:last}})''' = bedo jo versi sabalunnyo, '''{{int:minoreditletter}}''' = suntiangan ketek.",
+'history-fieldset-title' => 'Talusuri riwayaik',
 'history-show-deleted' => 'Hanyo nan dihapuih',
 'histfirst' => 'Nan lamo',
 'histlast' => 'Nan baru',
+'historysize' => '({{PLURAL:$1|bita|$1  bita}})',
+'historyempty' => '(kosong)',
 
 # Revision feed
+'history-feed-title' => 'Riwayat revisi',
+'history-feed-description' => 'Riwayat revisi laman ko di wiki',
 'history-feed-item-nocomment' => '$1 pado $2',
+'history-feed-empty' => 'Laman nan dicari indak ado.
+Mungkin alah dihapuih dari wiki, atau diagiah namo baru.
+Cuba [[Special:Search|cari dulu]] untuak laman lain nan relevan.',
 
 # Revision deletion
+'rev-deleted-comment' => '(ringkasan suntiangan dihapuih)',
+'rev-deleted-user' => '(namo pangguno dihapuih)',
+'rev-deleted-event' => '(isi dihapuih)',
+'rev-deleted-user-contribs' => '[namo pangguno atau alamat IP dihapuih - suntiangan disuruakkan pad dafta kontribusi]',
+'rev-deleted-text-permission' => "Revisi laman ko alah '''dihapuih'''.
+Rinciannyo mungkin ado di [{{fullurl:{{#Special:Log}}/delete|page={{FULLPAGENAMEE}}}} log panghapuihan]",
+'rev-deleted-text-unhide' => "Revisi laman ko alah '''dihapuih'''.
+Rinciannyo mungkin ado di [{{fullurl:{{#Special:Log}}/delete|page={{FULLPAGENAMEE}}}} log penghapuihan].
+Angku masih dapek [$1 maliek revisi ko] ko' amuah.",
+'rev-suppressed-text-unhide' => "Revisi laman ko alah '''tabanam'''.
+Rinciannyo mungkin ado di [{{fullurl:{{#Special:Log}}/suppress|page={{FULLPAGENAMEE}}}} log pambanaman].
+Angku masih dapek [$1 maliek revisi ko] ko' amuah.",
+'rev-deleted-text-view' => "Laman revisi ko alah '''dihapuih'''.
+Angku dapek mancaliaknyo; rinciannyo mungkin ado di [{{fullurl:{{#Special:Log}}/delete|page={{FULLPAGENAMEE}}}} log penghapuihan].",
+'rev-suppressed-text-view' => "Revisi laman ko alah '''tabanam'''.
+Angku dapek malieknyo; rinciannyo mungkin ado di [{{fullurl:{{#Special:Log}}/delete|page={{FULLPAGENAMEE}}}} log pambanaman]",
+'rev-deleted-no-diff' => "Angku indak dapek maliek pabedoan ko dek salah satu dari revisinyo alah '''dihapuih'''.
+Rinciannyo mungkin ado di [{{fullurl:{{#Special:Log}}/delete|page={{FULLPAGENAMEE}}}} log penghapuihan].",
 'rev-delundel' => 'tampilkan/suruakkan',
+'rev-showdeleted' => "tunjua'an",
+'revdelete-show-file-submit' => 'Yo',
+'revdelete-radio-set' => 'Yo',
+'revdelete-radio-unset' => 'Indak',
+'revdelete-log' => 'Alasan:',
 'revdel-restore' => 'ganti tampilan',
 'revdel-restore-deleted' => 'suntiangan nan alah dihapuih',
 'revdel-restore-visible' => 'tampilan revisi',
+'pagehist' => 'Riwayaik laman',
+'revdelete-otherreason' => 'Alasan lain/tambahan:',
+'revdelete-reasonotherlist' => 'Alasan lain',
 
 # Merge log
-'revertmerge' => 'Bata bagabuang',
+'revertmerge' => 'Batagabuang',
 
 # Diffs
-'history-title' => 'Riwayaik pabaiakkan dari "$1"',
+'history-title' => 'Riwayaik revisi dari "$1"',
 'lineno' => 'Barih $1:',
-'compareselectedversions' => 'Bandingkan revisi pilihan',
-'editundo' => 'batalan',
-'diff-multi' => '({{PLURAL:$1|ciek |$1 revisi antaro}} oleh {{PLURAL:$2|ciek|$2 pangguno}} indak ditampilkan)',
+'compareselectedversions' => 'Bandiangan versi tapiliah',
+'editundo' => 'batal',
+'diff-multi' => '({{PLURAL:$1|$1 revisi antaro}} oleh {{PLURAL:$2|$2 pangguno}} indak ditampilkan)',
 
 # Search results
-'searchresults' => 'Hasil pencarian',
+'searchresults' => 'Hasil pancarian',
 'searchresults-title' => 'Hasil pancarian untuak "$1"',
-'searchresulttext' => 'Untuak informasi lanjut tentang pencarian {{SITENAME}}, lihek [[{{MediaWiki:Helppage}}|{{int:help}}]].',
+'searchresulttext' => 'Untuak informasi labiah lanjuik tantang pancarian {{SITENAME}}, caliak [[{{MediaWiki:Helppage}}|{{int:help}}]].',
 'searchsubtitle' => 'Awak mancari \'\'\'[[:$1]]\'\'\' ([[Special:Prefixindex/$1|sado laman yang dimulai jo "$1"]]{{int:pipe-separator}}[[Special:WhatLinksHere/$1|sado laman nan tapauik ka "$1"]])',
 'searchsubtitleinvalid' => "Awak mancari '''$1'''",
 'notitlematches' => 'Indak ado judul nan pas',
 'notextmatches' => 'Indak ado judul nan pas',
 'prevn' => '{{PLURAL:$1|$1}} sabalunnyo',
-'nextn' => '{{PLURAL:$1|$1}} salanjuknyo',
-'prevn-title' => '$1 {{PLURAL:$1|Hasil|Hasil-hasil}} sabalunnyo',
-'nextn-title' => '$1 {{PLURAL:$1|Hasil|Hasil-hasil}} barikuiknyo',
-'shown-title' => 'Tampilkan $1 {{PLURAL:$1|hasil|hasil-hasil}} per laman',
+'nextn' => '{{PLURAL:$1|$1}} salanjuiknyo',
+'prevn-title' => '$1 {{PLURAL:$1|hasil}} sabalunnyo',
+'nextn-title' => '$1 {{PLURAL:$1|hasil}} barikuiknyo',
+'shown-title' => 'Tampilkan $1 {{PLURAL:$1|hasil}} per laman',
 'viewprevnext' => 'Caliakkan ($1 {{int:pipe-separator}} $2) ($3)',
 'searchmenu-exists' => "'''Ado laman nan banamo \"[[:\$1]]\" pado wiki ko.'''",
 'searchmenu-new' => "'''Buek laman \"[[:\$1]]\" di wiki ko!'''",
+'searchhelp-url' => 'Help:Isi',
 'searchprofile-articles' => 'Laman isi',
 'searchprofile-project' => 'Laman Bantuan jo Proyek',
 'searchprofile-images' => 'Multimedia',
 'searchprofile-everything' => 'Sadonyo',
-'searchprofile-advanced' => 'Lanjukkan',
+'searchprofile-advanced' => 'Labiah lanjuik',
 'searchprofile-articles-tooltip' => 'Cari di $1',
 'searchprofile-project-tooltip' => 'Cari di $1',
 'searchprofile-images-tooltip' => 'Cari untuak berkas',
 'searchprofile-everything-tooltip' => 'Cari sadoalahnyo (tamasuak laman maota)',
 'searchprofile-advanced-tooltip' => 'Pacarian di ruang namo tatantu',
 'search-result-size' => '$1 ({{PLURAL:$2|1 kato|$2 kato}})',
-'search-result-category-size' => '{{PLURAL:$1|1 anggota|$1 anggota}} ({{PLURAL:$2|1 subkategori|$2 subkategori}}, {{PLURAL:$3|1 berkas|$3 berkas}})',
+'search-result-category-size' => '{{PLURAL:$1|$1 anggota}} ({{PLURAL:$2|$2 subkategori}}, {{PLURAL:$3|$3 berkas}})',
+'search-result-score' => 'Relevansi: $1%',
 'search-redirect' => '(pangaliahan $1)',
 'search-section' => '(bagian $1)',
 'search-suggest' => 'Mungkin maksud awak: $1',
@@ -868,6 +948,8 @@ Legend: '''({{int:kini}})''' = perbedaan jo revisi terakhir, '''({{int:dulu}})''
 'search-interwiki-more' => '(selanjutnyo)',
 'searchrelated' => 'bakaitan',
 'searchall' => 'sado',
+'showingresults' => "Di bawah iko dikaluaan inggo {{PLURAL:$1|'''1''' asia|'''$1''' asia}}, dimulai dari #'''$2'''.",
+'showingresultsnum' => "Di bawah iko dikaluaan {{PLURAL:$3|'''1'''|'''$3'''}} asia, dimulai dari #'''$2'''.",
 'showingresultsheader' => "{{PLURAL:$5|Hasil '''$1''' dari '''$3'''|Hasil '''$1 - $2''' dari '''$3'''}} untuak '''$4'''",
 'nonefound' => "'''Catatan''': hanyo babarapo ruangnamo yang dicari sacaro default.
 Cubo awali permintaan awak tu jo ''all:'' untuak mancari sado kandungan (tamasuak laman ota, templat, dll), atau gunoan ruangnamo yang diinginkan sabagai awalan.",
@@ -875,25 +957,60 @@ Cubo awali permintaan awak tu jo ''all:'' untuak mancari sado kandungan (tamasua
 'powersearch' => 'Pencarian lanjut',
 'powersearch-legend' => 'Pencarian lanjut',
 'powersearch-ns' => 'Mancari di ruangnamo:',
-'powersearch-redir' => 'Senarai pengalihan',
+'powersearch-redir' => 'Dafta pangaliahan',
 'powersearch-field' => 'Mancari',
+'powersearch-togglelabel' => 'Piliah:',
+'powersearch-toggleall' => 'Sadonyo',
+'powersearch-togglenone' => 'Dak ado',
 
 # Preferences page
 'preferences' => 'Preferensi',
-'mypreferences' => 'Preferensi',
-'prefs-beta' => 'Corak Beta',
-'prefs-labs' => 'Corak Uji',
-'youremail' => 'Surek Elektronik:',
+'mypreferences' => 'Pangaturan',
+'prefs-beta' => 'Fitur Beta',
+'prefs-datetime' => 'Tanggal dan waktu',
+'prefs-labs' => 'Fitur uji',
+'prefs-user-pages' => 'Laman pangguno',
+'prefs-personal' => 'Profil pangguno',
+'prefs-rc' => 'Parubahan tabaru',
+'prefs-watchlist' => 'Dafta pantauan',
+'prefs-watchlist-days' => 'Lamonyo dalam daftar pantauan:',
+'timezoneregion-africa' => 'Afrika',
+'timezoneregion-america' => 'Amerika',
+'timezoneregion-antarctica' => 'Antarktika',
+'timezoneregion-arctic' => 'Arktik',
+'timezoneregion-asia' => 'Asia',
+'timezoneregion-atlantic' => 'Samudera Atlantik',
+'timezoneregion-australia' => 'Australia',
+'timezoneregion-europe' => 'Eropa',
+'timezoneregion-indian' => 'Samudera Hindia',
+'timezoneregion-pacific' => 'Samudera Pasifik',
+'allowemail' => 'Izinkan pangguno lain mangirim surel',
+'prefs-searchoptions' => 'Cari',
+'prefs-namespaces' => 'Ruang namo',
+'defaultns' => 'Ataupun cari dalam ruang-ruang namo ko:',
+'default' => 'baku',
+'prefs-files' => 'Berkas',
+'prefs-custom-css' => 'CSS pribadi',
+'prefs-custom-js' => 'JS pribadi',
+'prefs-common-css-js' => 'CSS/JS babagi untuak sado kulit:',
+'prefs-emailconfirm-label' => 'Surel konfirmasi:',
+'prefs-textboxsize' => 'Ukuran kotak suntiang',
+'youremail' => 'Surel:',
+'username' => '{{GENDER:$1|Namo pangguno}}:',
 'yourrealname' => 'Namo sabananyo:',
-'prefs-help-email' => 'Alamaik surek elektronik ko hanyo tambahan se, namun paralu untuak maulang kato kunci, jiko awak ang lupo kato kunci.',
-'prefs-help-email-others' => 'Awak ang juo dapek mamiliah untuak mangizinkan urang lain manghubungi awak ang jo surek elektronik malalui laman pangguno atau laman ota.
-Alamaik surek elektronik awak ang tu indak kan katahuan dek urang lain nan manghubungi awak ang tu.',
+'prefs-help-email' => 'Alamaik surel ko hanyo tambahan se, namun paralu untuak maulang kato kunci, jikok Sanak lupo kato kunci.',
+'prefs-help-email-others' => 'Sanak dapek mamiliah untuak mangizinkan urang lain manghubungi jo surel malalui laman pangguno atau laman diskusi.
+Alamaik surel tu indakkan tau dek urang nan manghubungi sanak tu.',
+'prefs-signature' => 'Tando tangan',
 
 # Groups
 'group-sysop' => 'Pengurus',
 
 'grouppage-sysop' => '{{ns:project}}:Pengurus',
 
+# Special:Log/newusers
+'newuserlogpage' => 'Log pangguno baru',
+
 # User rights log
 'rightslog' => 'Log parubahan hak akses',
 
@@ -901,33 +1018,33 @@ Alamaik surek elektronik awak ang tu indak kan katahuan dek urang lain nan mangh
 'action-edit' => 'suntiang laman ko',
 
 # Recent changes
-'nchanges' => '$1 {{PLURAL:$1|parubahan|parubahan}}',
+'nchanges' => '$1 {{PLURAL:$1|parubahan}}',
 'recentchanges' => 'Parubahan baru',
 'recentchanges-legend' => 'Pilihan parubahan baru',
 'recentchanges-summary' => 'Manjajak parubahan terbaru dalam wiki di laman ko.',
 'recentchanges-feed-description' => 'Temukan parubahan baru dalam umpan wiki ko',
-'recentchanges-label-newpage' => 'Suntiang ko mambuek laman baru',
-'recentchanges-label-minor' => 'Iko di suntiang saketek',
+'recentchanges-label-newpage' => 'Suntiangan ko mambuek laman baru',
+'recentchanges-label-minor' => 'Iko suntiangan ketek',
 'recentchanges-label-bot' => 'Suntiang ko dibuek dek bot',
-'recentchanges-label-unpatrolled' => 'Suntiangan ko alun tajago',
-'rcnote' => "Berikut ko {{PLURAL:$1|'''1'''|'''$1'''}} parubahan dalam {{PLURAL:$2|hari|'''$2''' hari}} terakhir, sampai $5, pukul $4.",
-'rcnotefrom' => "Di bawah ko ado parubahan sejak '''$2''' (sampai '''$1''' parubahan).",
-'rclistfrom' => 'Tampilkan parubahan baru sejak $1',
+'recentchanges-label-unpatrolled' => 'Suntiangan ko alun dipatroli',
+'rcnote' => "Berikuik ko {{PLURAL:$1|'''$1'''}} parubahan dalam {{PLURAL:$2|'''$2''' hari}} tarakhia, sampai $4, pukul $5.",
+'rcnotefrom' => "Di bawah ko ado parubahan mulai dari '''$2''' (sampai '''$1''' parubahan).",
+'rclistfrom' => 'Tampilkan parubahan baru mulai dari $1',
 'rcshowhideminor' => '$1 suntingan ketek',
 'rcshowhidebots' => '$1 bot',
 'rcshowhideliu' => '$1 pangguno masuak log',
 'rcshowhideanons' => '$1 pangguno anon',
 'rcshowhidepatr' => '$1 suntiangan nan tajago',
 'rcshowhidemine' => '$1 suntingan denai',
-'rclinks' => 'Tampilkan $1 parubahan baru dalam $2 hari terakhir<br />$3',
+'rclinks' => 'Tampilkan $1 parubahan tabaru dalam $2 hari tarakhir<br />$3',
 'diff' => 'bedo',
-'hist' => 'sajarah',
+'hist' => 'sijarah',
 'hide' => 'Suruakkan',
 'show' => 'Tampilkan',
 'minoreditletter' => 'k',
 'newpageletter' => 'B',
 'boteditletter' => 'b',
-'rc-enhanced-expand' => 'Tampilkan rincian (perlu JavaScript)',
+'rc-enhanced-expand' => 'Tampilkan rincian (paralu JavaScript)',
 'rc-enhanced-hide' => 'Suruakkan rincian',
 
 # Recent changes linked
@@ -935,16 +1052,16 @@ Alamaik surek elektronik awak ang tu indak kan katahuan dek urang lain nan mangh
 'recentchangeslinked-toolbox' => 'Parubahan takaik',
 'recentchangeslinked-title' => 'Parubahan nan takaik jo "$1"',
 'recentchangeslinked-noresult' => 'Indak ado parubahan pado laman nan tapauik salamo periode nan ditantuan',
-'recentchangeslinked-summary' => "Iko adolah daftar parubahan tarakhir pado laman nan tahubuang dari laman tatantu (atau anggota dari suatu kategori tatantu).
-Halaman pada [[Special:Watchlist|your watchlist]] ditondai dangan '''cetak taba''",
+'recentchangeslinked-summary' => "Iko dafta parubahan tarakhir pado laman nan tahubuang dari laman tatantu (atau anggota dari kategori tatantu).
+Laman pado [[Special:Watchlist|pantauan Sanak]] ditandoi jo '''cetak taba'''.",
 'recentchangeslinked-page' => 'Namo laman:',
-'recentchangeslinked-to' => 'Tampilkan parubahan dari laman yang takaik jo laman yang disajikan',
+'recentchangeslinked-to' => 'Tampilkan parubahan dari laman nan takaik jo laman nan ko',
 
 # Upload
 'upload' => 'Muek berkas',
 'uploadlogpage' => 'Log unggah',
 'filedesc' => 'Ringkasan',
-'uploadedimage' => 'unggah "[[$1]]"',
+'uploadedimage' => 'muek "[[$1]]"',
 
 'license' => 'Lisensi:',
 'license-header' => 'Lisensi',
@@ -953,40 +1070,40 @@ Halaman pada [[Special:Watchlist|your watchlist]] ditondai dangan '''cetak taba'
 'file-anchor-link' => 'Berkas',
 'filehist' => 'Riwayaik berkas',
 'filehist-help' => 'Klik pado tanggal/waktu untuak malihek berkas pado maso tu',
-'filehist-revert' => 'kembalikan',
+'filehist-revert' => 'baliakkan',
 'filehist-current' => 'kini ko',
 'filehist-datetime' => 'Tanggal/Waktu',
 'filehist-thumb' => 'Miniatur',
 'filehist-thumbtext' => 'Miniatur untuak versi per $1',
 'filehist-user' => 'Pangguno',
 'filehist-dimensions' => 'Dimensi',
-'filehist-comment' => 'Ulasan',
+'filehist-comment' => 'Komen',
 'imagelinks' => 'Panggunoan berkas',
-'linkstoimage' => 'Berikut ko ado {{PLURAL:$1|laman nan takaik|$1 laman nan takaik}} jo berkas ko:',
-'nolinkstoimage' => 'Indak ado laman nan ado batauik ka berkas ko.',
+'linkstoimage' => 'Barikuik ko {{PLURAL:$1|$1 laman nan takaik}} jo berkas:',
+'nolinkstoimage' => 'Indak ado laman nan batauik ka berkas ko.',
 'sharedupload' => 'Berkas ko barasal dari $1 dan mungkin digunoan oleh berbagai proyek lain.',
 'sharedupload-desc-here' => 'Berkas ko dari $1 dan mungkin digunoan untuak proyek-proyek lain.
-Deskripsi dari [$2 laman deskripsi berkas] ditampilkan di bawah.',
+Katarangan dari [$2 laman kataranagn berkas] ditampilkan di bawah.',
 'uploadnewversion-linktext' => 'Unggah versi baru dari berkas ko',
 
 # Random page
-'randompage' => 'Laman sambarangan',
+'randompage' => 'Laman sumbarang',
 
 # Statistics
 'statistics' => 'Statistik',
 
-'disambiguationspage' => 'Template:disambig',
+'disambiguationspage' => 'Template:sanamo',
 
 # Miscellaneous special pages
-'nbytes' => '$1 {{PLURAL:$1|bait|bait}}',
-'nmembers' => '$1 {{PLURAL:$1|anggota|anggota}}',
-'prefixindex' => 'Semua laman jo awalan',
+'nbytes' => '$1 {{PLURAL:$1|bita}}',
+'nmembers' => '$1 {{PLURAL:$1|anggota}}',
+'prefixindex' => 'Sado laman jo awalan',
 'usercreated' => '{{GENDER:$3|Dibuek}} pado $1 pukua $2',
 'newpages' => 'Laman baru',
-'move' => 'Pindahkan',
-'movethispage' => 'Pindahkan laman ko',
-'pager-newer-n' => '{{PLURAL:$1|labiah baru 1|labiah baru $1}}',
-'pager-older-n' => '{{PLURAL:$1|labiah lamo 1|labiah lamo $1}}',
+'move' => 'Pindah',
+'movethispage' => 'Pindahan laman ko',
+'pager-newer-n' => '{{PLURAL:$1|$1 labiah baru}}',
+'pager-older-n' => '{{PLURAL:$1|$1 labiah lamo}}',
 
 # Book sources
 'booksources' => 'Sumber buku',
@@ -997,8 +1114,8 @@ Deskripsi dari [$2 laman deskripsi berkas] ditampilkan di bawah.',
 'log' => 'Log',
 
 # Special:AllPages
-'allpages' => 'Semua laman',
-'alphaindexline' => '$1 hinggo $2',
+'allpages' => 'Kasado laman',
+'alphaindexline' => '$1 sampai $2',
 'prevpage' => 'Laman sabalunnyo ($1)',
 'allpagesfrom' => 'Tampilkan laman mulai dari:',
 'allpagesto' => 'Tampilkan laman hinggo:',
@@ -1012,18 +1129,15 @@ Deskripsi dari [$2 laman deskripsi berkas] ditampilkan di bawah.',
 'linksearch' => 'Pranala lua',
 'linksearch-line' => '$1 tapauik dari $2',
 
-# Special:Log/newusers
-'newuserlogpage' => 'Log pangguno baru',
-
 # Special:ListGroupRights
-'listgrouprights-members' => '(senarai anggota)',
+'listgrouprights-members' => '(dafta anggota)',
 
 # E-mail user
-'emailuser' => 'E-mail pangguno',
+'emailuser' => 'Kirim surel pangguno ko',
 
 # Watchlist
-'watchlist' => 'Senarai pantauan denai',
-'mywatchlist' => 'Daftar pantauan denai',
+'watchlist' => 'Daftapantau',
+'mywatchlist' => 'Daftapantau',
 'watchlistfor2' => 'Untuak $1 $2',
 'addedwatchtext' => "Laman \"[[:\$1]]\" lah ditambahkan ka [[Special:Watchlist|senarai pantauan awak]].
 Parubahan laman ko tamasuak laman otanyo akan ditampilkan dalam '''cetak taba''' pado [[Special:RecentChanges|senarai parubahan]] agar lebih mudah manjagonyo.",
@@ -1031,9 +1145,9 @@ Parubahan laman ko tamasuak laman otanyo akan ditampilkan dalam '''cetak taba'''
 'watch' => 'Pantau',
 'watchthispage' => 'Pantau laman ko',
 'unwatch' => 'Batal pantau',
-'watchlist-details' => '{{PLURAL:$1|$1 laman|$1 laman}} dalam senarai pantauan awak, indak tamasuak laman ota.',
-'wlshowlast' => 'Tampilkan $1 jam $2 hari terakhir $3',
-'watchlist-options' => 'Pilihan senarai pantauan',
+'watchlist-details' => '{{PLURAL:$1|$1 laman}} dalam daftapantau awak, indak tamasuak laman diskusi.',
+'wlshowlast' => 'Tampilkan $1 jam $2 hari tarakhia $3',
+'watchlist-options' => 'Piliahan daftapantau',
 
 # Displayed when you click the "watch" button and it is in the process of watching
 'watching' => 'Mamantau...',
@@ -1043,11 +1157,11 @@ Parubahan laman ko tamasuak laman otanyo akan ditampilkan dalam '''cetak taba'''
 'deletepage' => 'Hapuih laman',
 'confirmdeletetext' => 'Awak akan mahapuih laman atau berkas basamo riwayatnyo.
 Pastikan awak mainginkannyo, dan awak lah tahu sagalo akibatnyo dan sasuai jo [[{{MediaWiki:Policy-url}}|kebijakan]] yang balaku.',
-'actioncomplete' => 'Proses selesai',
-'actionfailed' => 'Aksi gagal',
+'actioncomplete' => 'Proses salasai',
+'actionfailed' => 'Proses gagal',
 'deletedtext' => '"$1" lah dihapuih.
-Lihek $2 untuak rekam jejak laman yang lah dihapuih.',
-'dellogpage' => 'Log penghapusan',
+Caliak $2 untuak rakam jajak laman nan lah dihapuih.',
+'dellogpage' => 'Log penghapuihan',
 'deletecomment' => 'Alasan:',
 'deleteotherreason' => 'Alasan lain/tambahan:',
 'deletereasonotherlist' => 'Alasan lain',
@@ -1056,8 +1170,8 @@ Lihek $2 untuak rekam jejak laman yang lah dihapuih.',
 'rollbacklink' => 'baliakkan',
 
 # Protect
-'protectlogpage' => 'Log perlindungan',
-'protectedarticle' => 'melindungi "[[$1]]"',
+'protectlogpage' => 'Log palinduangan',
+'protectedarticle' => 'malinduangkan "[[$1]]"',
 'modifiedarticleprotection' => 'maubah tingkek perlindungan "[[$1]]"',
 'protectcomment' => 'Alasan:',
 'protectexpiry' => 'Kadaluwarsa:',
@@ -1079,6 +1193,9 @@ Awak dapek maubah tingkek perlindungannyo, walaupun indak pangaruah pado perlind
 'restriction-type' => 'Perlindungan:',
 'restriction-level' => 'Tingkek larangan:',
 
+# Restrictions (nouns)
+'restriction-move' => 'Pindahan',
+
 # Undelete
 'undeletelink' => 'caliak/cegakkan',
 'undeleteviewlink' => 'caliak',
@@ -1089,22 +1206,23 @@ Awak dapek maubah tingkek perlindungannyo, walaupun indak pangaruah pado perlind
 'blanknamespace' => '(Utamo)',
 
 # Contributions
-'contributions' => '{{GENDER:$1|User}} kontribusi',
+'contributions' => 'Jariah {{GENDER:$1|pangguno}}',
 'contributions-title' => 'Jariah pangguno untuak $1',
 'mycontris' => 'Jariah denai',
 'contribsub2' => 'Untuak $1 ($2)',
-'uctop' => '(atas)',
-'month' => 'Sejak bulan (dan sabalunnyo):',
-'year' => 'Sejak tahun (dan sabalunnyo):',
+'uctop' => '(ateh)',
+'month' => 'Dari bulan (dan sabalunnyo):',
+'year' => 'Dari taun (dan sabalunnyo):',
 
-'sp-contributions-newbies' => 'Tampilkan jariah pangguno baru',
-'sp-contributions-blocklog' => 'log pemblokiran',
+'sp-contributions-newbies' => 'Tampilkan jariah pangguno baru sajo',
+'sp-contributions-blocklog' => 'log pamblokiran',
+'sp-contributions-deleted' => 'kontribusi pangguno nan lah batiadoan',
 'sp-contributions-uploads' => 'muek',
 'sp-contributions-logs' => 'log',
-'sp-contributions-talk' => 'kecek',
+'sp-contributions-talk' => 'diskusi',
 'sp-contributions-search' => 'Cari jariah',
 'sp-contributions-username' => 'Alamat IP atau namo pangguno:',
-'sp-contributions-toponly' => 'Hanyo manampilkan suntiang nan tarakhir',
+'sp-contributions-toponly' => 'Hanyo manampilan suntiangan nan tarakhia',
 'sp-contributions-submit' => 'Cari',
 
 # What links here
@@ -1113,7 +1231,7 @@ Awak dapek maubah tingkek perlindungannyo, walaupun indak pangaruah pado perlind
 'whatlinkshere-page' => 'Laman:',
 'linkshere' => "Laman-laman ko bakaik ka '''[[:$1]]''':",
 'nolinkshere' => "Indak ado laman nan punyo tautan ka '''[[:$1]]'''.",
-'isredirect' => 'laman pengalihan',
+'isredirect' => 'laman pengaliahan',
 'istemplate' => 'transklusi',
 'isimage' => 'tautan berkas',
 'whatlinkshere-prev' => '{{PLURAL:$1|sabalunnyo|sabalunnyo $1}}',
@@ -1123,20 +1241,20 @@ Awak dapek maubah tingkek perlindungannyo, walaupun indak pangaruah pado perlind
 'whatlinkshere-hidetrans' => '$1 transklusi',
 'whatlinkshere-hidelinks' => '$1 pranala',
 'whatlinkshere-hideimages' => '$1 pahubuang berkas',
-'whatlinkshere-filters' => 'Penapis',
+'whatlinkshere-filters' => 'Panapiah',
 
 # Block/unblock
 'blockip' => 'Blokir pangguno',
-'ipboptions' => '2 jam:2 hours,1 hari:1 day,3 hari:3 days,1 minggu:1 week,2 minggu:2 weeks,1 bulan:1 month,3 bulan:3 months,6 bulan:6 months,1 tahun:1 year,salamonyo:infinite',
+'ipboptions' => '2 jam:2 hours,1 hari:1 day,3 hari:3 days,1 minggu:1 week,2 minggu:2 weeks,1 bulan:1 month,3 bulan:3 months,6 bulan:6 months,1 taun:1 year,salamonyo:infinite',
 'ipblocklist' => 'Pangguno tablokir',
 'blocklink' => 'balokir',
-'unblocklink' => 'hilangkan balokir',
+'unblocklink' => 'hilangkan blokir',
 'change-blocklink' => 'ubah balokir',
 'contribslink' => 'jariah',
-'blocklogpage' => 'Log pemblokiran',
-'blocklogentry' => 'memblokir [[$1]] dalam maso berlaku $2 $3',
+'blocklogpage' => 'Log pamblokiran',
+'blocklogentry' => 'mamblokir [[$1]] dalam maso $2 $3',
 'unblocklogentry' => 'mahilangkan blokir $1',
-'block-log-flags-nocreate' => 'cipta akun dimatikan',
+'block-log-flags-nocreate' => 'mambuek akun dimatikan',
 
 # Move page
 'movepagetext' => "Formulir di bawah ko digunoan untuak maubah namo suatu laman dan mamindahkan semua data riwayat ka namo baru. Judul lamo tu akan manjadi laman peralihan manuju judul yang baru. Pranala ka judul lamo indak akan baubah. Pastikan diperiksa laman yang [[Special:DoubleRedirects|peralihan ganda]] atau [[Special:BrokenRedirects|peralihan rusak]]. Awak bertanggungjawab untuak memastikan bahwa pranala tu terus manyambuang ka laman yang seharusnyo.
@@ -1173,62 +1291,62 @@ Dalam kasus tu, apobilo diinginkan, awak dapek mamindahkan atau manggabuangkan l
 
 # Thumbnails
 'thumbnail-more' => 'Pagadang',
-'thumbnail_error' => 'Gagal mambuek thumbnail : $1',
+'thumbnail_error' => 'Gagal mambuek miniatur: $1',
 
 # Tooltip help for the actions
 'tooltip-pt-userpage' => 'Laman pangguno sanak',
 'tooltip-pt-mytalk' => 'Laman ota sanak',
 'tooltip-pt-preferences' => 'Preferensi denai',
-'tooltip-pt-watchlist' => 'Daftar laman nan denai pantau.',
+'tooltip-pt-watchlist' => 'Dafta laman nan dipantau.',
 'tooltip-pt-mycontris' => 'Daftar jariah Sanak',
-'tooltip-pt-login' => 'Sanak disarankan untuak masuak log; musiki, hal tu indak diwajibkan',
+'tooltip-pt-login' => 'Sanak disaranan untuak masuak log; walaupun indak wajib',
 'tooltip-pt-logout' => 'Kalua log',
 'tooltip-ca-talk' => 'Parudiangan tantang isi laman',
-'tooltip-ca-edit' => 'Sanak dapek manyuntiang laman iko. Silakan gunokan tombol pratonton sabalun manyimpan',
+'tooltip-ca-edit' => 'Angku dapek manyuntiang laman ko. Silakan gunoan tombol pratonton sabalun manyimpan',
 'tooltip-ca-addsection' => 'Mulai bagian baru',
 'tooltip-ca-viewsource' => 'Laman ko dilinduangi.
-Sanak hanyo buliah lihek sumbernyo sajo',
-'tooltip-ca-history' => 'Pabaiakkan sabalunnyo dari laman ko',
-'tooltip-ca-protect' => 'Lindungi laman ko',
-'tooltip-ca-delete' => 'Hapuih laman iko',
-'tooltip-ca-move' => 'Pindahkan laman ko',
-'tooltip-ca-watch' => 'Tambahkan laman ko ka daftar pantauan sanak',
-'tooltip-ca-unwatch' => 'Kaluaan laman ko dari senarai pantauan awak',
+Sanak hanyo buliah mancaliak sumbernyo sajo',
+'tooltip-ca-history' => 'Revisi sabalunnyo dari laman ko',
+'tooltip-ca-protect' => 'Linduangi laman ko',
+'tooltip-ca-delete' => 'Hapuih laman ko',
+'tooltip-ca-move' => 'Pindahan laman ko',
+'tooltip-ca-watch' => 'Tambahkan laman ko ka dafta pantauan sanak',
+'tooltip-ca-unwatch' => 'Kaluaan laman ko dari daftapantau',
 'tooltip-search' => 'Cari {{SITENAME}}',
-'tooltip-search-go' => 'Cari suatu laman dengan namo yang samo jiko tasadio',
-'tooltip-search-fulltext' => 'Cari laman untuak teks iko',
-'tooltip-p-logo' => 'Kunjuangi laman utamo',
-'tooltip-n-mainpage' => 'Kunjuangi laman Utamo',
-'tooltip-n-mainpage-description' => 'Kunjuangi laman utamo',
-'tooltip-n-portal' => 'Tantang proyek, apa nan dapek Sanak lakukan, dima untuak manamukan sasuatu',
-'tooltip-n-currentevents' => 'Tamukan informasi manganai latar balakang kajadian kini ko',
-'tooltip-n-recentchanges' => 'Daftar panyuntiangan baru dalam wiki',
-'tooltip-n-randompage' => 'Muek sambarang laman',
+'tooltip-search-go' => 'Cari laman jo namo nan samo jikok ado',
+'tooltip-search-fulltext' => 'Cari laman untuak teks ko',
+'tooltip-p-logo' => 'Kunjuangi palanta',
+'tooltip-n-mainpage' => 'Kunjuangi palanta',
+'tooltip-n-mainpage-description' => 'Kunjuangi palanta',
+'tooltip-n-portal' => 'Tantang proyek, nan dapek Sanak buek, dima ka basobok',
+'tooltip-n-currentevents' => 'Cari informasi manganai latar balakang kajadian ko',
+'tooltip-n-recentchanges' => 'Dafta parubahan baru dalam wiki',
+'tooltip-n-randompage' => 'Muek sumbarang laman',
 'tooltip-n-help' => 'Tampek mancari bantuan',
-'tooltip-t-whatlinkshere' => 'Daftar dari kasado laman wiki nan tahubuang kasiko',
-'tooltip-t-recentchangeslinked' => 'Parubahan baru halaman nan bakaik jo laman ko',
+'tooltip-t-whatlinkshere' => 'Dafta dari sado laman wiki nan tahubuang kasiko',
+'tooltip-t-recentchangeslinked' => 'Parubahan baru laman nan bakaik jo laman ko',
 'tooltip-feed-rss' => 'Umpan RSS untuak laman ko',
 'tooltip-feed-atom' => 'Umpan Atom untuak laman ko',
-'tooltip-t-contributions' => 'Lihek senarai jariah pangguno ko',
-'tooltip-t-emailuser' => 'Kirimkan e-mail ka pangguno ko',
+'tooltip-t-contributions' => 'Caliak dafta jariah pangguno ko',
+'tooltip-t-emailuser' => 'Kirim surel ka pangguno ko',
 'tooltip-t-upload' => 'Muek berkas',
-'tooltip-t-specialpages' => 'Daftar dari kasado laman istimewa',
+'tooltip-t-specialpages' => 'Dafta dari sado laman istimewa',
 'tooltip-t-print' => 'Versi cetak dari laman ko',
-'tooltip-t-permalink' => 'Pranala parmanen untuak pabaiakkan laman ko',
+'tooltip-t-permalink' => 'Pranala permanen untuak revisi laman ko',
 'tooltip-ca-nstab-main' => 'Caliak isi laman',
 'tooltip-ca-nstab-user' => 'Caliak laman pangguno',
-'tooltip-ca-nstab-special' => 'Iko adolah laman istimewa, awak indak buliah manyuntiangnyo',
-'tooltip-ca-nstab-project' => 'Lihek laman proyek',
+'tooltip-ca-nstab-special' => 'Laman istimewa, indak dapek disuntiang',
+'tooltip-ca-nstab-project' => 'Caliak laman proyek',
 'tooltip-ca-nstab-image' => 'Caliak laman berkas',
-'tooltip-ca-nstab-template' => 'Lihek templat',
+'tooltip-ca-nstab-template' => 'Caliak templat',
 'tooltip-ca-nstab-help' => 'Caliak laman bantuan',
-'tooltip-ca-nstab-category' => 'Lihek laman kategori',
-'tooltip-minoredit' => 'Tandoi iko sabagai suntingan ketek',
-'tooltip-save' => 'Simpan yang awak ubah ko',
-'tooltip-preview' => 'Pratonton parubahan, harap gunokan iko sabalun disimpan',
-'tooltip-diff' => 'Lihek parubahan yang sudah awak buek tu',
-'tooltip-compareselectedversions' => 'Lihek parbedaan antaro duo revisi pilihan laman ko',
-'tooltip-watch' => 'Tambahkan laman ko ka senarai pantauan awak',
+'tooltip-ca-nstab-category' => 'Caliak laman kategori',
+'tooltip-minoredit' => 'Tandoi iko sabagai suntiangan ketek',
+'tooltip-save' => 'Simpan nan diubah',
+'tooltip-preview' => 'Caliak dulu nan diubah, gunokan ko sabalun manyimpan',
+'tooltip-diff' => 'Caliak parubahan nan alah awak buek tu',
+'tooltip-compareselectedversions' => 'Caliak pabedoan antaro duo revisi pilihan laman ko',
+'tooltip-watch' => 'Tambahkan laman ko ka daftapantau',
 'tooltip-recreate' => 'Buek baliak laman walaupun sabananyo pernah dihapuih',
 'tooltip-upload' => 'Mulai mamuek',
 'tooltip-rollback' => '"Baliakkan" uruangkan suntiang laman ko pado kontribusi tarakhir dalam sakali klik',
@@ -1239,26 +1357,76 @@ Sanak hanyo buliah lihek sumbernyo sajo',
 # Metadata
 'notacceptable' => 'Layanan wiki indak manyadioan data dalam format yang dapek dibaco dek pelanggan awak.',
 
+# Skin names
+'skinname-standard' => 'Klasik',
+'skinname-nostalgia' => 'Nostalgia',
+'skinname-cologneblue' => 'Biru Köln',
+'skinname-monobook' => 'MonoBook',
+'skinname-myskin' => 'MySkin',
+'skinname-chick' => 'Chick',
+'skinname-simple' => 'Sadarano',
+'skinname-modern' => 'Moderen',
+'skinname-vector' => 'Vektor',
+
 # Browsing diffs
 'previousdiff' => '← Revisi sabalunnyo',
 'nextdiff' => 'Revisi salanjuiknyo →',
 
 # Media information
+'widthheight' => '$1 × $2',
 'file-info-size' => '$1 × $2 piksel, ukuran berkas: $3, tipe MIME: $4',
-'file-nohires' => 'Indak tasadio resolusi yang labiah tinggi.',
-'svg-long-desc' => 'SVG berkas, nominal $1 × $2 piksel, ukuran berkas: $3',
-'show-big-image' => 'Resolusi penuh',
+'file-nohires' => 'Indak tasadio resolusi nan labiah gadang.',
+'svg-long-desc' => 'Berkas SVG, $1 × $2 piksel, ukuran berkas: $3',
+'show-big-image' => 'Resolusi panuah',
+
+# Video information, used by Language::formatTimePeriod() to format lengths in the above messages
+'video-dims' => '$1, $2 × $3',
+'seconds-abbrev' => '$1 d',
+'minutes-abbrev' => '$1 min',
+'hours-abbrev' => '$1 j',
+'days-abbrev' => '$1 h',
 
 # Bad image list
 'bad_image_list' => 'Ukurannyo adolah sabagai barikuik:
 
-Hanyo daftar butia (barih nan dimulai jo tando *) nan dianggap.
-Pranala patamo pado barih musiti pranala ka berkas buruak.
+Hanyo dafta butia (barih nan dimulai jo tando *) nan dianggap.
+Pranala patamo pado barih musti pranala ka berkas buruak.
 Satiok pranala salanjuiknyo pado barih nan samo dianggap pangacualian, yaitu laman dima berkas tasabuik bisa tajadi sajajar.',
 
+/*
+Short names for language variants used for language conversion links.
+To disable showing a particular link, set it to 'disable', e.g.
+'variantname-zh-sg' => 'disable',
+Variants for Chinese language
+*/
+'variantname-zh-hans' => 'hans',
+'variantname-zh-hant' => 'hant',
+'variantname-zh-cn' => 'cn',
+'variantname-zh-tw' => 'tw',
+'variantname-zh-hk' => 'hk',
+'variantname-zh-mo' => 'mo',
+'variantname-zh-sg' => 'sg',
+'variantname-zh-my' => 'my',
+'variantname-zh' => 'zh',
+
+# Variants for Gan language
+'variantname-gan-hans' => 'hans',
+'variantname-gan-hant' => 'hant',
+'variantname-gan' => 'gan',
+
+# Variants for Serbian language
+'variantname-sr-ec' => 'sr-ec',
+'variantname-sr-el' => 'sr-el',
+'variantname-sr' => 'sr',
+
+# Variants for Kazakh language
+'variantname-kk-kz' => 'kk-kz',
+'variantname-kk-tr' => 'kk-tr',
+'variantname-kk-cn' => 'kk-cn',
+
 # Metadata
 'metadata' => 'Metadata',
-'metadata-help' => 'Berkas ko mengandung informasi tambahan yang mungkin ditambahkan dek kamera digital atau pemindai yang digunokan untuak mambuek atau mendigitalisasi berkas. Jiko berkas ko lah mangalami modifikasi, rincian yang ado mungkin indak sacaro penuh merefleksikan modifikasi berkas tu.',
+'metadata-help' => 'Berkas ko ado informasi tambahan nan mungkin ditambahkan dek kamera digital atau pemindai yang digunokan untuak mambuek atau mendigitalisasi berkas. Jikok berkas ko lah mangalami modifikasi, rincian nan ado mungkin indak sacaro panuah merefleksi modifikasi dari berkas tu.',
 'metadata-expand' => 'Tampilkan rincian tambahan',
 'metadata-collapse' => 'Suruakkan rincian tambahan',
 'metadata-fields' => 'Tapak metadata gambar nan disenaraikan dalam pasan ko akan di masuakan pado tampilan laman gambar katiko tabel metadata disuruakkan. 
@@ -1279,20 +1447,24 @@ Nan lainnyo akan tasuruak sacaro default.
 
 # External editor support
 'edit-externally' => 'Suntiang berkas ko dengan aplikasi lua',
-'edit-externally-help' => '(Lihek [//www.mediawiki.org/wiki/Manual:External_editors instruksi pengaturan] untuak maklumat lanjutnyo)',
+'edit-externally-help' => '(Caliak [//www.mediawiki.org/wiki/Manual:External_editors instruksi pangaturan] untuak informasi lanjuiknyo)',
 
 # 'all' in various places, this might be different for inflected languages
-'watchlistall2' => 'semua',
-'namespacesall' => 'semua',
-'monthsall' => 'sado',
+'watchlistall2' => 'kasadonyo',
+'namespacesall' => 'sadonyo',
+'monthsall' => 'sadonyo',
 
 # Watchlist editing tools
 'watchlisttools-view' => 'Tampilkan parubahan takaik',
-'watchlisttools-edit' => 'Tampilkan dan suntiang senarai pantauan',
-'watchlisttools-raw' => 'Suntiang senarai pantauan mentah',
+'watchlisttools-edit' => 'Tampilkan sarato suntiang daftapantau',
+'watchlisttools-raw' => 'Suntiang pantauan mantah',
 
 # Core parser functions
-'duplicate-defaultsort' => '\'\'\'Peringatan:\'\'\' Kunci panguruitan default "$2" sabalunnyo maabaikan kunci panguruitan default "$1".',
+'duplicate-defaultsort' => '\'\'\'Peringatan:\'\'\' Kunci panguruitan default "$2" sabalunnyo mangabaikan kunci panguruitan default "$1".',
+
+# Special:Version
+'version-entrypoints-articlepath' => '[https://www.mediawiki.org/wiki/Manual:$wgArticlePath Artikel path]',
+'version-entrypoints-scriptpath' => '[https://www.mediawiki.org/wiki/Manual:$wgScriptPath Skrip path]',
 
 # Special:FileDuplicateSearch
 'fileduplicatesearch-result-n' => 'Berkas "$1" punyo {{PLURAL:$2|1 duplikat identik|$2 duplikat identik}}.',
index 476c0e9..3ac29b3 100644 (file)
@@ -330,7 +330,7 @@ $magicWords = array(
        'numberingroup'             => array( '1', 'БРОЈВОГРУПА', 'NUMBERINGROUP', 'NUMINGROUP' ),
        'staticredirect'            => array( '1', '__СТАТИЧНОПРЕНАСОЧУВАЊЕ__', '__STATICREDIRECT__' ),
        'protectionlevel'           => array( '1', 'НИВОНАЗАШТИТА', 'PROTECTIONLEVEL' ),
-       'formatdate'                => array( '0', 'Ñ\84оÑ\80маÑ\82надаÑ\82Ñ\83м', 'formatdate', 'dateformat' ),
+       'formatdate'                => array( '0', 'форматдатум', 'formatdate', 'dateformat' ),
        'url_path'                  => array( '0', 'ПАТЕКА', 'PATH' ),
        'url_wiki'                  => array( '0', 'ВИКИ', 'WIKI' ),
        'url_query'                 => array( '0', 'БАРАЊЕ', 'QUERY' ),
@@ -379,7 +379,7 @@ $messages = array(
 'tog-externaleditor' => 'По основно користи надворешен уредувач (само за стручњаци, потребно е посебно нагодување на сметачот. [//www.mediawiki.org/wiki/Manual:External_editors?uselang=mk Повеќе информации.])',
 'tog-externaldiff' => 'По основно користи надворешен програм за споредување верзии (само за стручњаци, потребно е специјално нагодување на сметачот. [//www.mediawiki.org/wiki/Manual:External_editors?uselang=mk Повеќе информации.])',
 'tog-showjumplinks' => 'Овозможи врски на пристапност „скокни на“',
-'tog-uselivepreview' => 'Користи преглед во живо (JavaScript, експериментално)',
+'tog-uselivepreview' => 'Користи преглед во живо (бара JavaScript) (експериментално)',
 'tog-forceeditsummary' => 'Извести ме кога нема опис на промените',
 'tog-watchlisthideown' => 'Скриј мои уредувања од списокот на набљудувања',
 'tog-watchlisthidebots' => 'Скриј ботовски уредувања од списокот на набљудувања',
@@ -482,6 +482,7 @@ $messages = array(
 'newwindow' => '(се отвора во нов прозорец)',
 'cancel' => 'Откажи',
 'moredotdotdot' => 'Повеќе...',
+'morenotlisted' => 'Повеќе (вон списокот)...',
 'mypage' => 'Страница',
 'mytalk' => 'Разговор',
 'anontalk' => 'Разговор за оваа IP-адреса',
@@ -597,7 +598,7 @@ $1',
 'policy-url' => 'Project:Начела',
 'portal' => 'Портал',
 'portal-url' => 'Project:Портал на заедницата',
-'privacy' => 'Ð\97аÑ\88Ñ\82иÑ\82а Ð½Ð° Ð¿Ñ\80иваÑ\82ноÑ\81Ñ\82а',
+'privacy' => 'Ð\97аÑ\88Ñ\82иÑ\82а Ð½Ð° Ð»Ð¸Ñ\87ниÑ\82е Ð¿Ð¾Ð´Ð°Ñ\82оÑ\86и',
 'privacypage' => 'Project:Заштита на личните податоци',
 
 'badaccess' => 'Немате овластување',
@@ -790,7 +791,7 @@ $2',
 'gotaccount' => "Веќе имате корисничка сметка? '''$1'''.",
 'gotaccountlink' => 'Најавете се',
 'userlogin-resetlink' => 'Си ги заборавивте податоците за најава?',
-'createaccountmail' => 'по Ðµ-поÑ\88Ñ\82а',
+'createaccountmail' => 'Ð\94аÑ\98 Ð¿Ñ\80ивÑ\80емена Ð¿Ñ\80оизволна Ð»Ð¾Ð·Ð¸Ð½ÐºÐ° Ð¸ Ð¸Ñ\81пÑ\80аÑ\82и Ñ\98а Ð½Ð° Ð´Ð¾Ð»Ñ\83наведенаÑ\82а Ð°Ð´Ñ\80еÑ\81а',
 'createaccountreason' => 'Причина:',
 'badretype' => 'Внесените лозинки не се совпаѓаат.',
 'userexists' => 'Корисничкото име што го внесовте е зафатено.
@@ -868,6 +869,7 @@ $2',
 # E-mail sending
 'php-mail-error-unknown' => 'Непозната грешка во функцијата mail() на PHP',
 'user-mail-no-addy' => 'Се обидовте да испратите порака без да внесете адреса',
+'user-mail-no-body' => 'Се обидовте да испратите писмо кое е празно или со неразумно куса содржина.',
 
 # Change password dialog
 'resetpass' => 'Промена на лозинка',
@@ -933,6 +935,7 @@ $2
 'changeemail-oldemail' => 'Тековна е-пошта:',
 'changeemail-newemail' => 'Нова е-пошта:',
 'changeemail-none' => '(нема)',
+'changeemail-password' => 'Вашата лозинка на {{SITENAME}}:',
 'changeemail-submit' => 'Смени е-пошта',
 'changeemail-cancel' => 'Откажи',
 
@@ -1102,7 +1105,8 @@ $2
 'longpageerror' => "'''Грешка: Текстот што го внесовте е голем {{PLURAL:$1|еден килобајт|$1 килобајти}}, што ја надминува границата од {{PLURAL:$2|еден килобајт|$2 килобајти}}.'''
 Затоа нема да може да се зачува.",
 'readonlywarning' => "'''ПРЕДУПРЕДУВАЊЕ: Базата на податоци е заклучена заради одржување, па нема да можете да ги зачувате промените сега.
-Пробајте да го зачувате текстот за подоцна, локално (со прекопирање) во некоја податотека.'''
+
+Ви препорачуваме да го прекопирате текстот на текстуална податотека за да го зачувате за подоцна.'''
 
 Администраторот кој ја заклучил базата на податоци го дал следново објаснување: $1",
 'protectedpagewarning' => "'''Предупредување:  Оваа страница е заклучена, така што само корисници со администраторски привилегии можат да ја уредуваат.'''
@@ -1119,7 +1123,6 @@ $2
 'template-semiprotected' => '(полузаштитен)',
 'hiddencategories' => 'Оваа страница припаѓа на {{PLURAL:$1|1 скриена категорија|$1 скриени категории}}:',
 'edittools' => '<!-- Овој текст ќе се прикаже под обрасците за уредување и подигање. -->',
-'nocreatetitle' => 'Создавањето на нови страници е ограничено',
 'nocreatetext' => '{{SITENAME}} ја има ограничено можноста за создавање нови страници.
 Можете да се вратите назад и да уредувате постоечка страница или [[Special:UserLogin|најавете се или создајте нова корисничка сметка]].',
 'nocreate-loggedin' => 'Немате дозвола да создавате нови страници.',
@@ -1231,12 +1234,12 @@ $2
 'rev-deleted-text-unhide' => "Оваа ревизија на страницата е '''избришана'''.
 Повеќе подробности ќе најдете во [{{fullurl:{{#Special:Log}}/delete|page={{FULLPAGENAMEE}}}} дневникот на бришења].
 Сепак можете [$1 да ја погледнете оваа ревизија] ако сакате да продолжите.",
-'rev-suppressed-text-unhide' => "Оваа ревизија на страница е '''скриена'''.
+'rev-suppressed-text-unhide' => "Оваа ревизија на страница е '''притаена'''.
 Повеќе подробности ќе најдете во [{{fullurl:{{#Special:Log}}/suppress|page={{FULLPAGENAMEE}}}} дневникот на прикривања].
 Сепак можете да ја [$1 погледнете оваа ревизија] ако сакате да продолжите.",
 'rev-deleted-text-view' => "Оваа ревизија на страницата е '''избришана'''.
 Можете да ја погледнете; повеќе подробности ќе најдете во [{{fullurl:Special:Log/delete|page={{FULLPAGENAMEE}}}} дневникот на бришења].",
-'rev-suppressed-text-view' => "Оваа ревизија на страницата е '''скриена'''.
+'rev-suppressed-text-view' => "Оваа ревизија на страницата е '''притаена'''.
 Можете да ја погледнете; повеќе подробности ќе најдете во [{{fullurl:Special:Log/suppress|page={{FULLPAGENAMEE}}}} дневникот на скривања].",
 'rev-deleted-no-diff' => "Не може да ја погледнете оваа разлика бидејќи една од ревизиите била '''избришана'''.
 Може да најдете повеќе подробности во [{{fullurl:{{#Special:Log}}/delete|page={{FULLPAGENAMEE}}}} дневникот на бришења].",
@@ -1244,12 +1247,12 @@ $2
 'rev-deleted-unhide-diff' => "Една од ревизиите на оваа разлика е '''избришана'''.
 Повеќе подробности ќе најдете во [{{fullurl:Special:Log/delete|page={{FULLPAGENAMEE}}}} дневникот на бришења].
 Сепак можете [$1 да ја видите оваа разлика] ако сакате да продолжите.",
-'rev-suppressed-unhide-diff' => "Една од ревизиите на оваа разлика е '''скриена'''.
+'rev-suppressed-unhide-diff' => "Една од ревизиите на оваа разлика е '''притаена'''.
 Повеќе подробности ќе најдете во [{{fullurl:{{#Special:Log}}/suppress|page={{FULLPAGENAMEE}}}} дневникот на скривања].
 Можете да [$1 ја видите оваа разлика] ако сакате да продолжите.",
 'rev-deleted-diff-view' => "Една од ревизиите на оваа разлика е '''избришана'''.
 Можете да ја погледате оваа разлика; подробности ќе најдете во [{{fullurl:{{#Special:Log}}/delete|page={{FULLPAGENAMEE}}}} дневникот на бришење].",
-'rev-suppressed-diff-view' => "Една од ревизиите на оваа разлика е '''скриена'''.
+'rev-suppressed-diff-view' => "Една од ревизиите на оваа разлика е '''притаена'''.
 Можете да ја погледате оваа разлика; подробности ќе најдете во [{{fullurl:{{#Special:Log}}/suppress|page={{FULLPAGENAMEE}}}} дневникот на скривања].",
 'rev-delundel' => 'прикажи/скриј',
 'rev-showdeleted' => 'прикажи',
@@ -1281,7 +1284,7 @@ $2
 'revdelete-radio-same' => '(не менувај)',
 'revdelete-radio-set' => 'Да',
 'revdelete-radio-unset' => 'Не',
-'revdelete-suppress' => 'СкÑ\80иј податоци и од администраторите',
+'revdelete-suppress' => 'Ð\9fÑ\80иÑ\82аÑ\98Ñ\83вај податоци и од администраторите',
 'revdelete-unsuppress' => 'Отстрани ограничувања на обновени ревизии',
 'revdelete-log' => 'Причина:',
 'revdelete-submit' => 'Примени на одбрани {{PLURAL:$1|ревизија|ревизии}}',
@@ -1441,7 +1444,7 @@ $1",
 
 # Preferences page
 'preferences' => 'Нагодувања',
-'mypreferences' => 'Ð\9dагодувања',
+'mypreferences' => 'нагодувања',
 'prefs-edits' => 'Број на уредувања:',
 'prefsnologin' => 'Не сте најавени',
 'prefsnologintext' => 'Мора да бидете <span class="plainlinks">[{{fullurl:{{#Special:UserLogin}}|returnto=$1}} најавени]</span> за да ги менувате вашите кориснички нагодувања.',
@@ -1670,15 +1673,13 @@ $1",
 'right-sendemail' => 'Испраќање на е-пошта до други корисници',
 'right-passwordreset' => 'Преглед на пораки по е-пошта за промена на лозинка',
 
+# Special:Log/newusers
+'newuserlogpage' => 'Дневник на регистрирања на корисници',
+'newuserlogpagetext' => 'Ова е дневник на регистрирани корисници.',
+
 # User rights log
 'rightslog' => 'Дневник на менувања на кориснички права',
 'rightslogtext' => 'Ова е дневник на промени на кориснички права.',
-'rightslogentry' => 'Променето членство во група за $1 од $2 во $3',
-'rightslogentry-autopromote' => 'е автоматски унапреден од $2 во $3',
-'logentry-rights-rights' => '$1 го смени групното членство за $3 од $4 во $5',
-'logentry-rights-rights-legacy' => '$1 го смени групното членство за $3',
-'logentry-rights-autopromote' => '$1 е автоматски унапреден од $4 во $5',
-'rightsnone' => '(нема)',
 
 # Associated actions - in the sentence "You do not have permission to X"
 'action-read' => 'читање на оваа страница',
@@ -2320,7 +2321,7 @@ $1',
 'linksearch-ok' => 'Барај',
 'linksearch-text' => 'Може да се користат џокери, како на „*.wikipedia.org“.
 Бара барем највисок домен, како на пр. „*.org“.<br />
-Поддржани протоколи: <code>$1</code> (задава http:// ако не укажете протокол).',
+{{PLURAL:$2|Поддржан протокол|Поддржани протоколи}}: <code>$1</code> (задава http:// ако не укажете протокол).',
 'linksearch-line' => '$1 врска во $2',
 'linksearch-error' => 'Џокер-знаците може да се користат само на почетокот во името на домаќинот.',
 
@@ -2333,16 +2334,12 @@ $1',
 # Special:ActiveUsers
 'activeusers' => 'Список на активни корисници',
 'activeusers-intro' => 'Ова е список на корисници кои биле на некој начин активни во последните $1 {{PLURAL:$1|ден|дена}}.',
-'activeusers-count' => '$1 {{PLURAL:$1|уредување|уредувања}} {{PLURAL:$3|денес|во последните $3 дена}}',
+'activeusers-count' => '$1 {{PLURAL:$1|дејство|дејства}} {{PLURAL:$3|денес|во последните $3 дена}}',
 'activeusers-from' => 'Прикажи корисници почнувајќи од:',
 'activeusers-hidebots' => 'Скриј ботови',
 'activeusers-hidesysops' => 'Скриј администратори',
 'activeusers-noresult' => 'Нема пронајдено корисници.',
 
-# Special:Log/newusers
-'newuserlogpage' => 'Дневник на регистрирања на корисници',
-'newuserlogpagetext' => 'Ова е дневник на регистрирани корисници.',
-
 # Special:ListGroupRights
 'listgrouprights' => 'Права на кориснички групи',
 'listgrouprights-summary' => 'Следи список на кориснички групи утврдени на ова вики, заедно со нивните придружни права на пристап.
@@ -2400,7 +2397,7 @@ $1',
 'usermessage-editor' => 'Системски гласник',
 
 # Watchlist
-'watchlist' => 'мои Ð½абљудувања',
+'watchlist' => 'Ð\9dабљудувања',
 'mywatchlist' => 'Набљудувања',
 'watchlistfor2' => 'За $1 $2',
 'nowatchlist' => 'Немате ништо во списокот на набљудувања.',
@@ -2408,8 +2405,8 @@ $1',
 'watchnologin' => 'Не сте најавени',
 'watchnologintext' => 'Мора да сте [[Special:UserLogin|најавени]] за да го менувате списокот на набљудувања.',
 'addwatch' => 'Додај во списокот на набљудувања',
-'addedwatchtext' => "Страницата „[[:$1]]“ е додадена во [[Special:Watchlist|списокот на набљудувања]].
\98дниÑ\82е Ð¿Ñ\80омени Ð½Ð° Ð¾Ð²Ð°Ð° Ñ\81Ñ\82Ñ\80аниÑ\86а Ð¸ Ð¿Ð¾Ð²Ñ\80заниÑ\82е Ñ\81о Ð½ÐµÐ° Ñ\81Ñ\82Ñ\80аниÑ\86и Ð·Ð° Ñ\80азговоÑ\80 Ñ\9cе Ð±Ð¸Ð´Ð°Ñ\82 Ð¿Ñ\80икажани Ð¾Ð²Ð´Ðµ, Ð° Ñ\81Ñ\82Ñ\80аниÑ\86аÑ\82а Ñ\9cе Ñ\81е Ð¿Ñ\80икаже '''задебелена''' Ð²Ð¾ [[Special:RecentChanges|Ñ\81пиÑ\81окоÑ\82 Ð½Ð° Ñ\81коÑ\80еÑ\88ни Ð¿Ñ\80омени]] Ð·Ð° Ð´Ð° Ð¼Ð¾Ð¶ÐµÑ\82е Ð¿Ð¾Ð»ÐµÑ\81но Ð´Ð° Ñ\98а Ð¿Ñ\80епознаеÑ\82е.",
+'addedwatchtext' => 'Страницата „[[:$1]]“ е додадена во [[Special:Watchlist|списокот на набљудувања]].
\98дниÑ\82е Ð¿Ñ\80омени Ð½Ð° Ð¾Ð²Ð°Ð° Ñ\81Ñ\82Ñ\80аниÑ\86а Ð¸ Ð½ÐµÑ\98зинаÑ\82а Ñ\81Ñ\82Ñ\80аниÑ\86а Ð·Ð° Ñ\80азговоÑ\80 Ñ\9cе Ñ\81е Ð¿Ñ\80икажÑ\83вааÑ\82 Ñ\82амÑ\83.',
 'removewatch' => 'Отстрани од списокот на набљудувања',
 'removedwatchtext' => 'Страницата „[[:$1]]“ е отстранета од [[Special:Watchlist|списокот на набљудувања]].',
 'watch' => 'Набљудувај',
@@ -2443,7 +2440,7 @@ $1',
 'enotif_subject_moved' => 'Страницата $1 на {{SITENAME}} е преместена од {{gender:$2|$2}}',
 'enotif_subject_restored' => 'Страницата $1 на {{SITENAME}} е повратена од {{gender:$2|$2}}',
 'enotif_subject_changed' => 'Страницата $1 на {{SITENAME}} е изменета од {{gender:$2|$2}}',
-'enotif_body_intro_deleted' => 'СÑ\82Ñ\80аниÑ\86аÑ\82а $1 Ð½Ð° {{SITENAME}} Ðµ Ð¸Ð·Ð±Ñ\80иÑ\88ана Ð½Ð° $PAGEEDITDATE Ð¾Ð´ {{gender:$2|$2}}. Ð¢ÐµÐºÐ¾Ð²Ð½Ð°Ñ\82а Ñ\80евизиÑ\98а Ñ\9cе Ñ\98а Ð½Ð°Ñ\98деÑ\82е Ð½Ð° $3.',
+'enotif_body_intro_deleted' => 'СÑ\82Ñ\80аниÑ\86аÑ\82а $1 Ð½Ð° {{SITENAME}} Ðµ Ð¸Ð·Ð±Ñ\80иÑ\88ана Ð½Ð° $PAGEEDITDATE Ð¾Ð´ {{gender:$2|$2}}. Ð\9fогл. $3.',
 'enotif_body_intro_created' => 'Страницата $1 на {{SITENAME}} е создадена на $PAGEEDITDATE од {{gender:$2|$2}}. Тековната ревизија ќе ја најдете на $3.',
 'enotif_body_intro_moved' => 'Страницата $1 на {{SITENAME}} е преместена на $PAGEEDITDATE од {{gender:$2|$2}}. Тековната ревизија ќе ја најдете на $3.',
 'enotif_body_intro_restored' => 'Страницата $1 на {{SITENAME}} е повратена на $PAGEEDITDATE од {{gender:$2|$2}}. Тековната ревизија ќе ја најдете на $3.',
@@ -2480,6 +2477,8 @@ $UNWATCHURL
 
 Ваши мислења, прашања и повеќе помош:
 {{canonicalurl:{{MediaWiki:Helppage}}}}',
+'created' => 'создадена',
+'changed' => 'изменета',
 
 # Delete
 'deletepage' => 'Избриши страница',
@@ -2551,6 +2550,8 @@ $UNWATCHURL
 'prot_1movedto2' => '[[$1]] преместена како [[$2]]',
 'protect-badnamespace-title' => 'Незаштитлив именски простор',
 'protect-badnamespace-text' => 'Страниците во овој именски простор не можат да се заштитуваат.',
+'protect-norestrictiontypes-text' => 'Страницава не може да се заштити бидејќи нема расположиви типови на ограничување.',
+'protect-norestrictiontypes-title' => 'Незаштитливи страници',
 'protect-legend' => 'Потврдете ја заштитата',
 'protectcomment' => 'Причина:',
 'protectexpiry' => 'Истекува:',
@@ -2567,9 +2568,9 @@ $UNWATCHURL
 'protect-cascadeon' => 'Оваа страница е моментално заштитена бидејќи е вклучена во {{PLURAL:$1|следнава страница, за која е|следниве страници, за кои се}} под каскадна заштита.
 Можете да го измените степенот на заштита, но тоа нема да влијае на каскадната заштита.',
 'protect-default' => 'Допуштено за сите корисници',
-'protect-fallback' => 'Ð\91аÑ\80аÑ\98 Ð´Ð¾Ð·Ð²Ð¾Ð»Ð° Ð¾Ð´ „$1“',
-'protect-level-autoconfirmed' => 'Ð\91локиÑ\80аÑ\98 Ð½Ð¾Ð²Ð¸ Ð¸ Ð½ÐµÑ\80егиÑ\81Ñ\82Ñ\80иÑ\80ани корисници',
-'protect-level-sysop' => 'Само администратори',
+'protect-fallback' => 'Ð\94опÑ\83Ñ\88Ñ\82аÑ\98 Ñ\81амо ÐºÐ¾Ñ\80иÑ\81ниÑ\86и Ñ\81о Ð´Ð¾Ð·Ð²Ð¾Ð»Ð° „$1“',
+'protect-level-autoconfirmed' => 'Ð\94опÑ\83Ñ\88Ñ\82аÑ\98 Ñ\81амо Ð°Ð²Ñ\82опоÑ\82вÑ\80дени корисници',
+'protect-level-sysop' => 'Ð\94опÑ\83Ñ\88Ñ\82аÑ\98 Ñ\81амо администратори',
 'protect-summary-cascade' => 'каскада',
 'protect-expiring' => 'истекува на $1 (UTC)',
 'protect-expiring-local' => 'истекува $1',
@@ -2672,7 +2673,7 @@ $1',
 # Contributions
 'contributions' => '{{GENDER:$1|Кориснички}} придонеси',
 'contributions-title' => 'Придонеси на корисникот $1',
-'mycontris' => 'Ð\9fридонеси',
+'mycontris' => 'придонеси',
 'contribsub2' => 'За $1 ($2)',
 'nocontribs' => 'Не се пронајдени промени што одговараат на овој критериум.',
 'uctop' => ' (врв)',
@@ -2878,9 +2879,9 @@ $1',
 Ако не изберете автоматско подновување, проверете на [[Special:DoubleRedirects|двојни]] или [[Special:BrokenRedirects|прекинати пренасочувања]].
 На вас е одговорноста да се осигурате дека врските ќе продолжат да насочуваат таму за каде се предвидени.
 
\98маÑ\98Ñ\82е Ð¿Ñ\80едвид Ð´ÐµÐºÐ° Ñ\81Ñ\82Ñ\80аниÑ\86аÑ\82а '''Ð\9dÐ\95Ð\9cÐ\90''' Ð´Ð° Ð±Ð¸Ð´Ðµ Ð¿Ñ\80емеÑ\81Ñ\82ена Ð°ÐºÐ¾ Ð²ÐµÑ\9cе Ð¿Ð¾Ñ\81Ñ\82ои Ñ\81Ñ\82Ñ\80аниÑ\86а Ñ\81о Ð½Ð¾Ð²Ð¸Ð¾Ñ\82 Ð½Ð°Ñ\81лов, Ð¾Ñ\81вен Ð°ÐºÐ¾ Ðµ Ð¿Ñ\80азна Ð¸Ð»Ð¸ Ð°ÐºÐ¾ е пренасочување и нема историја на минати уредувања. Тоа значи дека можете да ја преименувате страницата како што била претходно доколку сте направиле грешка без да ја прекриете постоечката страница.
\98маÑ\98Ñ\82е Ð¿Ñ\80едвид Ð´ÐµÐºÐ° Ñ\81Ñ\82Ñ\80аниÑ\86аÑ\82а '''нема''' Ð´Ð° Ð±Ð¸Ð´Ðµ Ð¿Ñ\80емеÑ\81Ñ\82ена Ð°ÐºÐ¾ Ð²ÐµÑ\9cе Ð¿Ð¾Ñ\81Ñ\82ои Ñ\81Ñ\82Ñ\80аниÑ\86а Ñ\81о Ð½Ð¾Ð²Ð¸Ð¾Ñ\82 Ð½Ð°Ñ\81лов, Ð¾Ñ\81вен Ð°ÐºÐ¾ Ðµ Ð½Ðµ е пренасочување и нема историја на минати уредувања. Тоа значи дека можете да ја преименувате страницата како што била претходно доколку сте направиле грешка без да ја прекриете постоечката страница.
 
-'''ПРЕДУПРЕДУВАЊЕ!'''
+'''Предупредување!'''
 Ова може да биде драстична и неочекувана промена за популарна страница;
 осигурајте се дека сте ги разбрале последиците од ова пред да продолжите.",
 'movepagetext-noredirectfixer' => "Со користењето на овој образец можете да преименувате страница, преместувајќи ја целата нејзина историја под ново име.
@@ -3063,6 +3064,7 @@ $1',
 'import-error-interwiki' => 'Страницата „$1“ не е увезена бидејќи името е резервирано за надворешни врски (меѓувики).',
 'import-error-special' => 'Страницата „$1“ не е увезена бидејќи припаѓа на посебен именски простор што не дозволува страници.',
 'import-error-invalid' => 'Страницата „$1“ не е увезена бидејќи името ѝ е неважечко.',
+'import-error-unserialize' => 'Ревизијата $2 на страницата „$1“ не може да се отсеријализира. Утврдено е дека користи содржинскиот модел $3 што е серијализиран како $4.',
 'import-options-wrong' => '{{PLURAL:$2|Погрешна можност|Погрешни можности}}: <nowiki>$1</nowiki>',
 'import-rootpage-invalid' => 'Укажаната основна страница е неважечки наслов.',
 'import-rootpage-nosubpage' => 'Именскиот простор „$1“ на основната страница не допушта потстраници.',
@@ -3246,6 +3248,7 @@ $1',
 'pageinfo-magic-words' => '{{PLURAL:$1|Волшебен збор|Волшебни зборови}} ($1)',
 'pageinfo-hidden-categories' => '{{PLURAL:$1|Скриена категорија|Скриени категории}} ($1)',
 'pageinfo-templates' => '{{PLURAL:$1|Превметнат шаблон|Превметнати шаблони}} ($1)',
+'pageinfo-transclusions' => '{{PLURAL:$1|Превметната страница|Превметнати страници}} на ($1)',
 'pageinfo-toolboxlink' => 'Информации за страницата',
 'pageinfo-redirectsto' => 'Пренасочува кон',
 'pageinfo-redirectsto-info' => 'инфо',
@@ -3254,6 +3257,10 @@ $1',
 'pageinfo-protect-cascading' => 'Каскадната заштита на страниците важи од тука',
 'pageinfo-protect-cascading-yes' => 'Да',
 'pageinfo-protect-cascading-from' => 'Страници со каскадна заштита од',
+'pageinfo-category-info' => 'Информации за категоријата',
+'pageinfo-category-pages' => 'Број на страници',
+'pageinfo-category-subcats' => 'Број на поткатегории',
+'pageinfo-category-files' => 'Број на податотеки',
 
 # Skin names
 'skinname-standard' => 'Класично',
@@ -3312,6 +3319,7 @@ $1',
 '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' => 'Вистинска големина',
 'show-big-image-preview' => 'Големина на овој преглед: $1.',
 'show-big-image-other' => '{{PLURAL:$2|Друга резолуција|Други резолуции}}: $1.',
@@ -3346,6 +3354,8 @@ $1',
 'minutes' => '{{PLURAL:$1|$1 минута|$1 минути}}',
 'hours' => '{{PLURAL:$1|$1 час|$1 часа}}',
 'days' => '{{PLURAL:$1|$1 ден|$1 дена}}',
+'months' => '{{PLURAL:$1|$1 месец|$1 месеци}}',
+'years' => '{{PLURAL:$1|$1 година|$1 години}}',
 'ago' => 'пред $1',
 'just-now' => 'Штотуку',
 
@@ -4157,7 +4167,7 @@ $5
 'specialpages-group-highuse' => 'Најкористени страници',
 'specialpages-group-pages' => 'Списоци на страници',
 'specialpages-group-pagetools' => 'Алатки за страници',
-'specialpages-group-wiki' => 'Ð\92ики-податоци и алатки',
+'specialpages-group-wiki' => 'Ð\9fодатоци и алатки',
 'specialpages-group-redirects' => 'Пренасочување на специјални страници',
 'specialpages-group-spam' => 'Алатки против спам',
 
@@ -4231,7 +4241,7 @@ $5
 'logentry-delete-revision' => '$1 ја измени видливоста на {{PLURAL:$5|ревизија|$5 ревизии}} на страницата $3: $4',
 'logentry-delete-event-legacy' => '$1 ја измени видливоста на настани во дневникот на $3',
 'logentry-delete-revision-legacy' => '$1 ја измени видливоста на ревизии на страницата $3',
-'logentry-suppress-delete' => '$1 ја потисна страницата $3',
+'logentry-suppress-delete' => '$1 ја притаи страницата $3',
 'logentry-suppress-event' => '$1 потајно ја измени видливоста на {{PLURAL:$5|настан во дневникот|$5 настани во дневникот}} на $3: $4',
 'logentry-suppress-revision' => '$1 потајно ја измени видливоста на {{PLURAL:$5|ревизија|$5 ревизии}} на страницата $3: $4',
 'logentry-suppress-event-legacy' => '$1 потајно ја измени видливоста на настани во дневникот на $3',
@@ -4253,8 +4263,12 @@ $5
 'logentry-newusers-newusers' => 'Направена е корисничката сметка $1',
 'logentry-newusers-create' => 'Направена е корисничката сметка $1',
 'logentry-newusers-create2' => 'Направена е корисничката сметка $3; создавач: $1',
+'logentry-newusers-byemail' => '$1 ја создаде корисничката сметка $3. Лозинката ви ја испративме по е-пошта',
 'logentry-newusers-autocreate' => 'Сметката $1 е создадена автоматски',
-'newuserlog-byemail' => 'испратена лозинка по е-пошта',
+'logentry-rights-rights' => '$1 го смени групното членство за $3 од $4 во $5',
+'logentry-rights-rights-legacy' => '$1 го смени групното членство за $3',
+'logentry-rights-autopromote' => '$1 е автоматски унапреден од $4 во $5',
+'rightsnone' => '(нема)',
 
 # Feedback
 'feedback-bugornote' => 'Ако сте спремни подробно да го опишете техничкиот проблем, тогаш [$1 пријавете грешка]. 
@@ -4307,7 +4321,8 @@ $5
 'api-error-nomodule' => 'Внатрешна грешка: нема зададено модул за подигање.',
 'api-error-ok-but-empty' => 'Внатрешна грешка: опслужувачот не одговара.',
 'api-error-overwrite' => 'Презапишувањето врз постоечки податотеки не е дозволено.',
-'api-error-stashfailed' => 'Внатрешна грешка: опслужувачот не успеа да ја складира привремената податотека.',
+'api-error-stashfailed' => 'Внатрешна грешка: Опслужувачот не успеа да ја складира привремената податотека.',
+'api-error-publishfailed' => 'Внатрешна грешка: Опслужувачот не успеа да ја објави привремената податотека.',
 'api-error-timeout' => 'Опслужувачот не одговори во очекуваното време.',
 'api-error-unclassified' => 'Се појави непозната грешка.',
 'api-error-unknown-code' => 'Непозната грешка: „$1“',
@@ -4328,6 +4343,4 @@ $5
 'duration-centuries' => '$1 {{PLURAL:$1|век|века}}',
 'duration-millennia' => '$1 {{PLURAL:$1|милениум|милениуми}}',
 
-# Unknown messages
-'svg-long-error' => 'Неважечка SVG-податотека: $1',
 );
index 0567894..356937b 100644 (file)
@@ -262,6 +262,7 @@ $magicWords = array(
        'img_text_bottom'           => array( '1', 'എഴുത്ത്-താഴെ', 'text-bottom' ),
        'img_link'                  => array( '1', 'കണ്ണി=$1', 'link=$1' ),
        'img_alt'                   => array( '1', 'പകരം=$1', 'alt=$1' ),
+       'img_class'                 => array( '1', 'ശ്രേണി=$1', 'class=$1' ),
        'sitename'                  => array( '1', 'സൈറ്റിന്റെപേര്', 'SITENAME' ),
        'ns'                        => array( '0', 'നാമേ:', 'NS:' ),
        'localurl'                  => array( '0', 'ലോക്കൽയുആർഎൽ:', 'LOCALURL:' ),
@@ -307,6 +308,7 @@ $magicWords = array(
        'padleft'                   => array( '0', 'ഇടത്ത്നിറക്കുക', 'PADLEFT' ),
        'padright'                  => array( '0', 'വലത്ത്നിറക്കുക', 'PADRIGHT' ),
        'special'                   => array( '0', 'പ്രത്യേകം', 'special' ),
+       'speciale'                  => array( '0', 'സവിശേഷം', 'speciale' ),
        'defaultsort'               => array( '1', 'സ്വതവേയുള്ളക്രമപ്പെടുത്തൽ:', 'സ്വതവേയുള്ളക്രമപ്പെടുത്തൽചാവി:', 'സ്വതവേയുള്ളവർഗ്ഗക്രമപ്പെടുത്തൽ:', 'DEFAULTSORT:', 'DEFAULTSORTKEY:', 'DEFAULTCATEGORYSORT:' ),
        'filepath'                  => array( '0', 'പ്രമാണപഥം:', 'FILEPATH:' ),
        'tag'                       => array( '0', 'റ്റാഗ്', 'ടാഗ്', 'tag' ),
@@ -365,7 +367,7 @@ $messages = array(
 'tog-externaleditor' => 'സ്വതേ ബാഹ്യ എഡിറ്റർ ഉപയോഗിക്കുക (വിദഗ്ദ്ധ ഉപയോക്താക്കൾക്കു മാത്രം, താങ്കളുടെ കമ്പ്യൂട്ടറിൽ പ്രത്യേക സജ്ജീകരണങ്ങൾ ആവശ്യമാണ്. [//www.mediawiki.org/wiki/Manual:External_editors കൂടുതൽ വിവരങ്ങൾ.])',
 'tog-externaldiff' => 'വ്യത്യാസം അറിയാൻ സ്വതേ ബാഹ്യ ഉപകരണങ്ങൾ ഉപയോഗിക്കുക (വിദഗ്ദ്ധ ഉപയോക്താക്കൾക്കു മാത്രം, താങ്കളുടെ കമ്പ്യൂട്ടറിൽ പ്രത്യേക സജ്ജീകരണങ്ങൾ ആവശ്യമാണ്. [//www.mediawiki.org/wiki/Manual:External_editors കൂടുതൽ വിവരങ്ങൾ.])',
 'tog-showjumplinks' => '"പോവുക" ഗമ്യത കണ്ണികൾ പ്രാപ്തമാക്കുക',
-'tog-uselivepreview' => 'തത്സമയ പ്രിവ്യൂ ഉപയോഗപ്പെടുത്തുക (ജാവാസ്ക്രിപ്റ്റ്) (പരീക്ഷണാടിസ്ഥാനത്തിലുള്ളത്)',
+'tog-uselivepreview' => 'തത്സമയ പ്രിവ്യൂ ഉപയോഗപ്പെടുത്തുക (ജാവാസ്ക്രിപ്റ്റ് ആവശ്യമാണ്) (പരീക്ഷണാടിസ്ഥാനം)',
 'tog-forceeditsummary' => 'തിരുത്തലുകളുടെ ചുരുക്കം നൽകിയില്ലെങ്കിൽ എന്നെ ഓർമ്മിപ്പിക്കുക',
 'tog-watchlisthideown' => 'ഞാൻ ശ്രദ്ധിക്കുന്ന താളുകളുടെ പട്ടികയിൽനിന്ന് എന്റെ തിരുത്തലുകൾ മറയ്ക്കുക',
 'tog-watchlisthidebots' => 'ഞാൻ ശ്രദ്ധിക്കുന്ന താളുകളുടെ പട്ടികയിൽനിന്ന് യന്ത്രങ്ങൾ വരുത്തിയ തിരുത്തലുകൾ മറയ്ക്കുക',
@@ -449,7 +451,7 @@ $messages = array(
 'category-empty' => "''ഈ വർഗ്ഗത്തിൽ താളുകളോ പ്രമാണങ്ങളോ ഇല്ല.''",
 'hidden-categories' => '{{PLURAL:$1|മറഞ്ഞിരിക്കുന്ന വർഗ്ഗം|മറഞ്ഞിരിക്കുന്ന വർഗ്ഗങ്ങൾ}}',
 'hidden-category-category' => 'മറഞ്ഞിരിക്കുന്ന വർഗ്ഗങ്ങൾ',
-'category-subcat-count' => '{{PLURAL:$2|ഈ വർഗ്ഗത്തിനു്‌ താഴെ നൽകിയിരിക്കുന്ന ഒരു ഉപവർഗ്ഗം മാത്രമാണുള്ളത്.|ഈ വർഗ്ഗത്തിനു്‌ $2 ഉപവർഗ്ഗങ്ങളുള്ളതിൽ {{PLURAL:$1|ഒരെണ്ണം|$1 എണ്ണം}} താഴെ നൽകിയിരിക്കുന്നു.}}',
+'category-subcat-count' => '{{PLURAL:$2|ഈ വർഗ്ഗത്തിനു താഴെ നൽകിയിരിക്കുന്ന ഒരു ഉപവർഗ്ഗം മാത്രമാണുള്ളത്.|ഈ വർഗ്ഗത്തിന് ആകെ $2 ഉപവർഗ്ഗങ്ങൾ ഉള്ളതിൽ {{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 താളുകൾ ഉണ്ട്}}.',
@@ -465,6 +467,7 @@ $messages = array(
 'newwindow' => '(പുതിയ ജാലകത്തിൽ തുറന്നു വരും)',
 'cancel' => 'റദ്ദാക്കുക',
 'moredotdotdot' => 'കൂടുതൽ...',
+'morenotlisted' => 'ബാക്കി പട്ടികയിൽ ഉൾപ്പെടുത്തിയിട്ടില്ല...',
 'mypage' => 'താൾ',
 'mytalk' => 'സംവാദത്താൾ',
 'anontalk' => 'ഈ ഐ.പി.യുടെ സം‌വാദം താൾ',
@@ -767,7 +770,7 @@ $2',
 'gotaccount' => "താങ്കൾക്ക് അംഗത്വമുണ്ടോ? '''$1'''.",
 'gotaccountlink' => 'പ്രവേശിക്കുക',
 'userlogin-resetlink' => 'താങ്കളുടെ ലോഗിൻ വിവരങ്ങൾ മറന്നു പോയോ?',
-'createaccountmail' => 'à´\87à´®àµ\86യിൽ à´µà´´à´¿',
+'createaccountmail' => 'താതàµ\8dà´\95ാലിà´\95മായ à´\95àµ\8dരമരഹിത à´°à´¹à´¸àµ\8dയവാà´\95àµ\8dà´\95àµ\8d à´\89പയàµ\8bà´\97à´¿à´\95àµ\8dà´\95ാനനàµ\81വാദà´\82 à´¨àµ½à´\95àµ\81à´\95à´¯àµ\81à´\82 à´\85à´¤àµ\8d à´¤à´¾à´´àµ\86 à´µàµ\8dà´¯à´\95àµ\8dതമാà´\95àµ\8dà´\95ിയിരിà´\95àµ\8dà´\95àµ\81à´¨àµ\8dà´¨ à´\87à´®àµ\86യിൽ à´µà´¿à´²à´¾à´¸à´¤àµ\8dതിലàµ\87à´¯àµ\8dà´\95àµ\8dà´\95àµ\8d à´\85à´¯à´\95àµ\8dà´\95àµ\81à´\95à´¯àµ\81à´\82 à´\9aàµ\86à´¯àµ\8dà´¯àµ\81à´\95',
 'createaccountreason' => 'കാരണം:',
 'badretype' => 'താങ്കൾ നൽകിയ രഹസ്യവാക്കുകൾ സമമല്ല.',
 'userexists' => 'നൽകിയ ഉപയോക്തൃനാമം മുമ്പേ നിലവിലുണ്ട്.
@@ -831,6 +834,7 @@ $2',
 # E-mail sending
 'php-mail-error-unknown' => 'പി.എച്ച്.പി.യുടെ main() ഫങ്ഷനിൽ അപരിചിതമായ പിഴവ്',
 'user-mail-no-addy' => 'ഇമെയിൽ വിലാസം ഇല്ലാതെയാണ് ഇമെയിൽ അയയ്ക്കാൻ ശ്രമിച്ചത്',
+'user-mail-no-body' => 'ശൂന്യമായതോ അസാമാന്യമായി ചെറുതോ ആയ ഉള്ളടക്കമുള്ള ഇമെയിൽ അയയ്ക്കാൻ ശ്രമിച്ചു.',
 
 # Change password dialog
 'resetpass' => 'രഹസ്യവാക്ക് മാറ്റുക',
@@ -890,6 +894,7 @@ $2
 'changeemail-oldemail' => 'ഇപ്പോഴത്തെ ഇമെയിൽ വിലാസം:',
 'changeemail-newemail' => 'പുതിയ ഇമെയിൽ വിലാസം:',
 'changeemail-none' => '(ഒന്നുമില്ല)',
+'changeemail-password' => 'താങ്കളുടെ {{SITENAME}} രഹസ്യവാക്ക്:',
 'changeemail-submit' => 'ഇമെയിലിൽ മാറ്റംവരുത്തുക',
 'changeemail-cancel' => 'റദ്ദാക്കുക',
 
@@ -1044,7 +1049,7 @@ $1 ആണ് ഈ തടയൽ നടത്തിയത്. ''$2'' എന്ന
 ഇതു താങ്കൾത്തന്നെ എഴുതിയതാണെന്നും, അതല്ലെങ്കിൽ പകർപ്പവകാശ നിയമങ്ങളുടെ പരിധിയിലില്ലാത്ത ഉറവിടങ്ങളിൽനിന്നും പകർത്തിയതാണെന്നും ഉറപ്പാക്കുക (കുടുതൽ വിവരത്തിനു $1 കാണുക).
 '''പകർപ്പവകാശ സംരക്ഷണമുള്ള സൃഷ്ടികൾ ഒരു കാരണവശാലും ഇവിടെ പ്രസിദ്ധീകരിക്കരുത്!'''",
 'longpageerror' => "'''പിഴവ്: താങ്കൾ സമർപ്പിച്ച എഴുത്തുകൾക്ക് {{PLURAL:$1|ഒരു കിലോബൈറ്റ്|$1 കിലോബൈറ്റ്സ്}} വലിപ്പമുണ്ട്. പരമാവധി അനുവദനീയമായ വലിപ്പം {{PLURAL:$2|ഒരു കിലോബൈറ്റ്|$2 കിലോബൈറ്റ്സ്}} ആണ്‌. അതിനാലിതു സേവ് ചെയ്യാൻ സാദ്ധ്യമല്ല.'''",
-'readonlywarning' => "'''à´®àµ\81à´¨àµ\8dനറിയിപàµ\8dà´ªàµ\8d: à´¡àµ\87à´±àµ\8dറാബàµ\87à´¸àµ\8d à´ªà´°à´¿à´ªà´¾à´²à´¨à´¤àµ\8dതിനàµ\81 à´µàµ\87à´£àµ\8dà´\9fà´¿ à´¬à´¨àµ\8dധിà´\9aàµ\8dà´\9aà´¿à´°à´¿à´\95àµ\8dà´\95àµ\81à´¨àµ\8dà´¨àµ\81, à´\85à´¤àµ\81à´\95àµ\8aà´£àµ\8dà´\9fàµ\8d à´¤à´¾à´\99àµ\8dà´\95ളിപàµ\8dà´ªàµ\8bൾ à´µà´°àµ\81à´¤àµ\8dതിയ à´®à´¾à´±àµ\8dà´±à´\99àµ\8dà´\99ൾ à´¸àµ\87à´µàµ\8d à´\9aàµ\86à´¯àµ\8dയാൻ à´¸à´¾à´¦àµ\8dà´§àµ\8dയമലàµ\8dà´².''' à´¤à´¾à´\99àµ\8dà´\95ൾ à´µà´°àµ\81à´¤àµ\8dതിയ à´®à´¾à´±àµ\8dà´±à´\99àµ\8dà´\99ൾ à´\92à´°àµ\81 à´\9fàµ\86à´\95àµ\8dà´¸àµ\8dà´±àµ\8dà´±àµ\8d à´ªàµ\8dരമാണതàµ\8dതിലàµ\87à´\95àµ\8dà´\95àµ\8d à´ªà´\95ർതàµ\8dതി (à´\95à´\9fàµ\8dà´\9fàµ\8d & പേസ്റ്റ്) പിന്നീടുള്ള ഉപയോഗത്തിനായി സേവ് ചെയ്യുവാൻ താല്പര്യപ്പെടുന്നു. ഡേറ്റാബേസ് ബന്ധിച്ച അഡ്മിനിസ്ട്രേറ്റർ നൽകിയ വിശദീകരണം: $1",
+'readonlywarning' => "'''à´®àµ\81à´¨àµ\8dനറിയിപàµ\8dà´ªàµ\8d: à´¡àµ\87à´±àµ\8dറാബàµ\87à´¸àµ\8d à´ªà´°à´¿à´ªà´¾à´²à´¨à´¤àµ\8dതിനàµ\81 à´µàµ\87à´£àµ\8dà´\9fà´¿ à´¬à´¨àµ\8dധിà´\9aàµ\8dà´\9aà´¿à´°à´¿à´\95àµ\8dà´\95àµ\81à´¨àµ\8dà´¨àµ\81, à´\85à´¤àµ\81à´\95àµ\8aà´£àµ\8dà´\9fàµ\8d à´¤à´¾à´\99àµ\8dà´\95ളിപàµ\8dà´ªàµ\8bൾ à´µà´°àµ\81à´¤àµ\8dതിയ à´®à´¾à´±àµ\8dà´±à´\99àµ\8dà´\99ൾ à´¸àµ\87à´µàµ\8d à´\9aàµ\86à´¯àµ\8dയാൻ à´¸à´¾à´¦àµ\8dà´§àµ\8dയമലàµ\8dà´².''' à´¤à´¾à´\99àµ\8dà´\95ൾ à´µà´°àµ\81à´¤àµ\8dതിയ à´®à´¾à´±àµ\8dà´±à´\99àµ\8dà´\99ൾ à´\92à´°àµ\81 à´\9fàµ\86à´\95àµ\8dà´¸àµ\8dà´±àµ\8dà´±àµ\8d à´ªàµ\8dരമാണതàµ\8dതിലàµ\87à´\95àµ\8dà´\95àµ\8d à´ªà´\95ർതàµ\8dതി (à´\95àµ\8bà´ªàµ\8dപി & പേസ്റ്റ്) പിന്നീടുള്ള ഉപയോഗത്തിനായി സേവ് ചെയ്യുവാൻ താല്പര്യപ്പെടുന്നു. ഡേറ്റാബേസ് ബന്ധിച്ച അഡ്മിനിസ്ട്രേറ്റർ നൽകിയ വിശദീകരണം: $1",
 'protectedpagewarning' => "'''മുന്നറിയിപ്പ്:  ഈ താൾ കാര്യനിർവാഹക പദവിയുള്ളവർക്കു മാത്രം തിരുത്താൻ സാധിക്കാവുന്ന തരത്തിൽ സം‌രക്ഷിക്കപ്പെട്ടിരിക്കുന്നു.''' അവലംബമായി രേഖകളിൽ ലഭ്യമായ ഏറ്റവും പുതിയ വിവരം താഴെ നൽകിയിരിക്കുന്നു:",
 'semiprotectedpagewarning' => "'''ശ്രദ്ധിക്കുക:'''അംഗത്വമെടുത്തിട്ടുള്ളവർക്കുമാത്രം തിരുത്താൻ സാധിക്കുന്ന വിധത്തിൽ ഈ താൾ സംരക്ഷിക്കപ്പെട്ടിരിക്കുന്നു. അവലംബമായി രേഖകളിലെ ഏറ്റവും പുതിയ വിവരം താഴെ കൊടുത്തിരിക്കുന്നു:",
 'cascadeprotectedwarning' => "'''മുന്നറിയിപ്പ്:''' ഈ താൾ കാര്യനിർവാഹക അവകാശമുള്ളവർക്കു മാത്രം തിരുത്തുവാൻ സാധിക്കുന്ന വിധത്തിൽ സം‌രക്ഷിക്കപ്പെട്ടിട്ടുള്ളതാണ്‌. {{PLURAL:$1|താൾ|താളുകൾ}} കാസ്കേഡ് സം‌രക്ഷണം ചെയ്തപ്പോൾ അതിന്റെ ഭാഗമായി സംരക്ഷിക്കപ്പെട്ടിട്ടുള്ളതാണ്‌ ഈ താൾ.",
@@ -1056,7 +1061,6 @@ $1 ആണ് ഈ തടയൽ നടത്തിയത്. ''$2'' എന്ന
 'template-semiprotected' => '(അർദ്ധസം‌രക്ഷിതം)',
 'hiddencategories' => 'ഈ താൾ {{PLURAL:$1|മറഞ്ഞിരിക്കുന്ന ഒരു വർഗ്ഗത്തിൽ|മറഞ്ഞിരിക്കുന്ന $1 വർഗ്ഗങ്ങളിൽ}} അംഗമാണു്‌:',
 'edittools' => '<!-- തിരുത്തുവാനുള്ളതിനും അപ്‌‌ലോഡ് ചെയ്യുന്നതിനുമുള്ള ഫോമുകൾക്കടിയിൽ ഇവിടെ നൽകുന്ന എഴുത്തുകൾ വരുന്നതാണ്. -->',
-'nocreatetitle' => 'താളുകൾ സൃഷ്ടിക്കുന്നത് പരിമിതപ്പെടുത്തിയിരിക്കുന്നു',
 'nocreatetext' => '{{SITENAME}} സംരംഭത്തിൽ പുതിയ താളുകൾ സൃഷ്ടിക്കുവാനുള്ള അവകാശം നിയന്ത്രിതമാണ്‌.
 താങ്കൾ ദയവായി തിരിച്ചുചെന്ന് നിലവിലുള്ള ഒരു താൾ തിരുത്തുകയോ, അഥവാ [[Special:UserLogin|ലോഗിൻ ചെയ്യുകയോ ഒരു അംഗത്വം സൃഷ്ടിക്കുകയോ]] ചെയ്യാൻ അഭ്യർത്ഥിക്കുന്നു.',
 'nocreate-loggedin' => 'പുതിയ താളുകൾ സൃഷ്ടിക്കുവാനുള്ള അനുവാദം താങ്കൾക്കില്ല.',
@@ -1240,7 +1244,7 @@ $1",
 'revdelete-modify-no-access' => '$2, $1 എന്നു സമയമുദ്രയുള്ള ഇനം പുതുക്കുന്നതിൽ പിഴവ്: ഈ ഇനം "ഉപയോഗം പരിമിതപ്പെടുത്തിയത്" എന്നടയാളപ്പെടുത്തിയതാണ്.
 താങ്കൾക്കതിനുള്ള അനുമതി ഇല്ല.',
 'revdelete-modify-missing' => 'ഇനം ഐ.ഡി. $1 ഉള്ളതിൽ മാറ്റം വരുത്തുമ്പോൾ പിഴവ് സംഭവിച്ചു: ഇത് ഡേറ്റാബേസിൽ ലഭ്യമല്ല!',
-'revdelete-no-change' => "'''à´®àµ\81à´¨àµ\8dനറിയിപàµ\8dà´ªàµ\8d:''' $2 $1 à´¤àµ\80യതിയിലàµ\81à´³àµ\8dà´³ à´\87à´¨à´\82 à´®àµ\81à´®àµ\8dà´ªàµ\81തനàµ\8dà´¨àµ\86 à´¦àµ\83à´¶àµ\8dയതാ à´\95àµ\8dà´°à´®àµ\80à´\95à´°à´£à´\99àµ\8dà´\99ൾ à´\86വശàµ\8dയപàµ\8dà´ªàµ\86à´\9fàµ\8dà´\9fà´¿à´\9fàµ\8dà´\9fുണ്ട്.",
+'revdelete-no-change' => "'''à´®àµ\81à´¨àµ\8dനറിയിപàµ\8dà´ªàµ\8d:''' $2 $1 à´¤àµ\80യതിയിലàµ\81à´³àµ\8dà´³ à´\88 à´ªà´¤à´¿à´ªàµ\8dപിനàµ\8d à´\86വശàµ\8dയപàµ\8dà´ªàµ\86à´\9fàµ\8dà´\9fà´¿à´\9fàµ\8dà´\9fàµ\81à´³àµ\8dà´³ à´¦àµ\83à´¶àµ\8dയതാà´\95àµ\8dà´°à´®àµ\80à´\95à´°à´£à´\99àµ\8dà´\99ൾ à´®àµ\81ൻപàµ\87തനàµ\8dà´¨àµ\86 à´¨à´¿à´²à´µà´¿à´²ുണ്ട്.",
 'revdelete-concurrent-change' => '$1 $2 ദിനസമയമുദ്രയുള്ള ഇനം പുതുക്കുമ്പോൾ പിഴവു സംഭവിച്ചിരിക്കുന്നു: താങ്കൾ പുതുക്കാൻ ശ്രമിക്കുമ്പോൾ മറ്റാരോ അതിന്റെ സ്ഥിതി മാറ്റിയതായി കാണുന്നു.
 ദയവായി രേഖകൾ പരിശോധിക്കുക.',
 'revdelete-only-restricted' => '$2, $1 തീയതിയിലെ ഇനം മറയ്ക്കുന്നതിൽ പിഴവ്: ഒതുക്കലിനുള്ള മറ്റ് ഐച്ഛികങ്ങളിലൊന്ന് തിരഞ്ഞെടുക്കാതെ ഇനങ്ങൾ കാര്യനിർവാഹകരുടെ ദൃഷ്ടിയിൽ നിന്നും ഒതുക്കാൻ താങ്കൾക്ക് കഴിയില്ല.',
@@ -1605,15 +1609,13 @@ $1",
 'right-sendemail' => 'മറ്റുപയോക്താക്കൾക്ക് ഇമെയിൽ അയയ്ക്കുക',
 'right-passwordreset' => 'രഹസ്യവാക്ക് പുനഃക്രമീകരിക്കാനുള്ള ഇമെയിലുകൾ കാണുക',
 
+# Special:Log/newusers
+'newuserlogpage' => 'ഉപയോക്തൃ സൃഷ്ടിയുടെ രേഖ',
+'newuserlogpagetext' => 'പുതിയതായി അംഗത്വമെടുത്ത ഉപയോക്താക്കളുടെ പട്ടിക താഴെ കാണാം.',
+
 # User rights log
 'rightslog' => 'ഉപയോക്തൃ അവകാശ രേഖ',
 'rightslogtext' => 'ഈ പ്രവർത്തനരേഖ ഉപയോക്തൃ അവകാശങ്ങൾക്കുണ്ടായ മാറ്റങ്ങളുടേതാണ്.',
-'rightslogentry' => '$1 എന്ന ഉപയോക്താവിന്റെ സംഘ അംഗത്വം $2 എന്നതിൽ നിന്നു $3 എന്നതിലേക്കു മാറ്റിയിരിക്കുന്നു',
-'rightslogentry-autopromote' => '$2 എന്നതിൽ നിന്ന് $3 എന്നതിലേയ്ക്ക് സ്വയം ഉയർത്തിയിരിക്കുന്നു',
-'logentry-rights-rights' => '$3 എന്ന ഉപയോക്താവിന്റെ സംഘ അംഗത്വം $1, $4 എന്നതിൽ നിന്നു $5 എന്നതിലേക്കു മാറ്റിയിരിക്കുന്നു',
-'logentry-rights-rights-legacy' => '$3 എന്ന ഉപയോക്താവിന്റെ സംഘ അംഗത്വം $1 മാറ്റിയിരിക്കുന്നു',
-'logentry-rights-autopromote' => '$1 എന്ന ഉപയോക്താവ് $4 എന്നതിൽ നിന്നും $5 എന്നതിലേയ്ക്ക് സ്വയം ഉയർത്തിയിരിക്കുന്നു',
-'rightsnone' => '(ഒന്നുമില്ല)',
 
 # Associated actions - in the sentence "You do not have permission to X"
 'action-read' => 'ഈ താൾ വായിക്കുക',
@@ -2231,7 +2233,7 @@ https://www.mediawiki.org/wiki/Manual:Image_Authorization കാണുക.',
 'linksearch-ok' => 'തിരയൂ',
 'linksearch-text' => '"*.wikipedia.org" പോലുള്ള വൈൽഡ് കാർഡുകൾ ഉപയോഗിക്കാവുന്നതാണ്‌.
 കുറഞ്ഞത് "*.org" പോലുള്ള ഒരു ടോപ്-ലെവൽ ഡൊമൈൻ എങ്കിലും ഉണ്ടായിരിക്കണം.<br />
-പിന്തുണയുള്ള പ്രോട്ടോക്കോളുകൾ: <code>$1</code> (ഒന്നും നൽകിയില്ലെങ്കിൽ സ്വതേയുള്ള http:// ഉപയോഗിക്കുന്നതാണ്).',
+പിന്തുണയുള്ള {{PLURAL:$2|പ്രോട്ടോക്കോൾ|പ്രോട്ടോക്കോളുകൾ}}: <code>$1</code> (ഒന്നും നൽകിയില്ലെങ്കിൽ സ്വതേയുള്ള http:// ഉപയോഗിക്കുന്നതാണ്).',
 'linksearch-line' => '$1,  $2ൽ നിന്നു കണ്ണി ചേർക്കപ്പെട്ടിരിക്കുന്നു.',
 'linksearch-error' => 'ഹോസ്റ്റ്നെയിമിന്റെ തുടക്കത്തിൽ മാത്രമേ വൈൽഡ് കാർഡുകൾ വരാവൂ.',
 
@@ -2244,16 +2246,12 @@ https://www.mediawiki.org/wiki/Manual:Image_Authorization കാണുക.',
 # Special:ActiveUsers
 'activeusers' => 'സജീവ ഉപയോക്താക്കളുടെ പട്ടിക',
 'activeusers-intro' => 'ഇത് കഴിഞ്ഞ {{PLURAL:$1|ദിവസം|$1 ദിവസങ്ങളിൽ}} ഏതെങ്കിലും വിധത്തിലുള്ള പ്രവർത്തനങ്ങൾ ചെയ്ത ഉപയോക്താക്കളുടെ പട്ടികയാണ്.',
-'activeusers-count' => 'à´\95à´´à´¿à´\9eàµ\8dà´\9e {{PLURAL:$3|à´\92à´°àµ\81 à´¦à´¿à´µà´¸à´\82|$3 à´¦à´¿à´µà´¸à´\99àµ\8dà´\99ളിൽ}} {{PLURAL:$1|à´\92à´°àµ\81 à´¤à´¿à´°àµ\81à´¤àµ\8dà´¤àµ\8d|$1 à´¤à´¿à´°àµ\81à´¤àµ\8dà´¤àµ\81കൾ}}',
+'activeusers-count' => 'à´\95à´´à´¿à´\9eàµ\8dà´\9e {{PLURAL:$3|à´\92à´°àµ\81 à´¦à´¿à´µà´¸à´\82|$3 à´¦à´¿à´µà´¸à´\99àµ\8dà´\99ളിൽ}} {{PLURAL:$1|à´\92à´°àµ\81 à´ªàµ\8dà´°à´µàµ\83à´¤àµ\8dതി|$1 à´ªàµ\8dà´°à´µàµ\83à´¤àµ\8dതികൾ}}',
 'activeusers-from' => 'ഇങ്ങനെ തുടങ്ങുന്ന ഉപയോക്താക്കളെ കാട്ടുക:',
 'activeusers-hidebots' => 'യന്ത്രങ്ങളെ മറയ്ക്കുക',
 'activeusers-hidesysops' => 'കാര്യനിർവാഹകരെ മറയ്ക്കുക',
 'activeusers-noresult' => 'ഉപയോക്താക്കളില്ല',
 
-# Special:Log/newusers
-'newuserlogpage' => 'ഉപയോക്തൃ സൃഷ്ടിയുടെ രേഖ',
-'newuserlogpagetext' => 'പുതിയതായി അംഗത്വമെടുത്ത ഉപയോക്താക്കളുടെ പട്ടിക താഴെ കാണാം.',
-
 # Special:ListGroupRights
 'listgrouprights' => 'ഉപയോക്തൃവിഭാഗത്തിന്റെ അവകാശങ്ങൾ',
 'listgrouprights-summary' => 'ഈ വിക്കിയിൽ നിർവ്വചിക്കപ്പെട്ടിരിക്കുന്ന ഉപയോക്തൃസംഘങ്ങളെയും, ആ സംഘങ്ങൾക്ക് പ്രാപ്തമായിട്ടുള്ള അവകാശങ്ങളേയും താഴെ കുറിച്ചിരിക്കുന്നു.
@@ -2311,7 +2309,7 @@ https://www.mediawiki.org/wiki/Manual:Image_Authorization കാണുക.',
 'usermessage-editor' => 'വ്യവസ്ഥാസന്ദേശകൻ',
 
 # Watchlist
-'watchlist' => 'ശ്രദ്ധിക്കുന്ന താളുകളുടെ പട്ടിക',
+'watchlist' => 'ശ്രദ്ധിക്കുന്ന',
 'mywatchlist' => 'ശ്രദ്ധിക്കുന്നവ',
 'watchlistfor2' => 'ഉപയോക്താവ്:$1 $2',
 'nowatchlist' => 'താങ്കൾ ശ്രദ്ധിക്കുന്ന താളുകളുടെ പട്ടികയിൽ ഇനങ്ങളൊന്നുമില്ല.',
@@ -2319,7 +2317,7 @@ https://www.mediawiki.org/wiki/Manual:Image_Authorization കാണുക.',
 'watchnologin' => 'ലോഗിൻ ചെയ്തിട്ടില്ല',
 'watchnologintext' => 'ശ്രദ്ധിക്കുന്ന താളിന്റെ പട്ടിക തിരുത്തുവാൻ താങ്കൾ [[Special:UserLogin|ലോഗിൻ]] ചെയ്തിരിക്കണം.',
 'addwatch' => 'ശ്രദ്ധിക്കുന്ന താളുകളുടെ പട്ടികയിലേക്കു ചേർക്കുക',
-'addedwatchtext' => "താങ്കൾ [[Special:Watchlist|ശ്രദ്ധിക്കുന്ന താളുകളുടെ പട്ടികയിലേക്ക്]] \"[[:\$1]]\" എന്ന ഈ താൾ ചേർത്തിരിക്കുന്നു. ഇനി മുതൽ ഈ താളിലും ബന്ധപ്പെട്ട സം‌വാദം താളിലും ഉണ്ടാകുന്ന മാറ്റങ്ങൾ ആ പട്ടികയിൽ ദൃശ്യമാവും. കൂടാതെ താങ്കൾക്ക് എളുപ്പത്തിൽ തിരിച്ചറിയാൻ [[Special:RecentChanges|പുതിയ മാറ്റങ്ങൾ]] താളിൽ ഈ താളിലെ മാറ്റങ്ങൾ '''കടുപ്പത്തിൽ''' കാണിക്കുകയും ചെയ്യും.",
+'addedwatchtext' => 'താങ്കൾ [[Special:Watchlist|ശ്രദ്ധിക്കുന്ന താളുകളുടെ പട്ടികയിലേക്ക്]] "[[:$1]]" എന്ന ഈ താൾ ചേർത്തിരിക്കുന്നു. ഇനി മുതൽ ഈ താളിലും ബന്ധപ്പെട്ട സം‌വാദം താളിലും ഉണ്ടാകുന്ന മാറ്റങ്ങൾ ആ പട്ടികയിൽ ദൃശ്യമാവും.',
 'removewatch' => 'ശ്രദ്ധിക്കുന്ന താളുകളുടെ പട്ടികയിൽ നിന്നും ഒഴിവാക്കുക',
 'removedwatchtext' => 'താങ്കൾ [[Special:Watchlist|ശ്രദ്ധിക്കുന്ന താളുകളുടെ പട്ടികയിൽ]] നിന്നും "[[:$1]]" എന്ന താൾ നീക്കം ചെയ്തിരിക്കുന്നു.',
 'watch' => 'മാറ്റങ്ങൾ ശ്രദ്ധിക്കുക',
@@ -2353,7 +2351,7 @@ https://www.mediawiki.org/wiki/Manual:Image_Authorization കാണുക.',
 'enotif_subject_moved' => '{{SITENAME}} സംരംഭത്തിലെ $1 എന്ന താൾ {{gender:$2|$2}} മാറ്റിയിരിക്കുന്നു',
 'enotif_subject_restored' => '{{SITENAME}} സംരംഭത്തിലെ $1 എന്ന താൾ {{gender:$2|$2}} പുനഃസ്ഥാപിച്ചിരിക്കുന്നു',
 'enotif_subject_changed' => '{{SITENAME}} സംരംഭത്തിലെ $1 എന്ന താളിൽ {{gender:$2|$2}} മാറ്റം വരുത്തിയിരിക്കുന്നു',
-'enotif_body_intro_deleted' => '{{SITENAME}} സംരംഭത്തിലെ $1 എന്ന താൾ $PAGEEDITDATE-നു {{gender:$2|$2}} മായ്ച്ചിരിക്കുന്നു, ഇപ്പോഴത്തെ നാൾപ്പതിപ്പിനായി $3 കാണുക.',
+'enotif_body_intro_deleted' => '{{SITENAME}} സംരംഭത്തിലെ $1 എന്ന താൾ $PAGEEDITDATE-നു {{gender:$2|$2}} മായ്ച്ചിരിക്കുന്നു, $3 കാണുക.',
 'enotif_body_intro_created' => '{{SITENAME}} സംരംഭത്തിൽ $1 എന്ന താൾ $PAGEEDITDATE-നു {{gender:$2|$2}} സൃഷ്ടിച്ചിരിക്കുന്നു, ഇപ്പോഴത്തെ നാൾപ്പതിപ്പിനായി $3 കാണുക.',
 'enotif_body_intro_moved' => '{{SITENAME}} സംരംഭത്തിലെ $1 എന്ന താൾ $PAGEEDITDATE-നു {{gender:$2|$2}} മാറ്റിയിരിക്കുന്നു, ഇപ്പോഴത്തെ നാൾപ്പതിപ്പിനായി $3 കാണുക.',
 'enotif_body_intro_restored' => '{{SITENAME}} സംരംഭത്തിലെ $1 എന്ന താൾ $PAGEEDITDATE-നു {{gender:$2|$2}} പുനഃസ്ഥാപിച്ചിരിക്കുന്നു, ഇപ്പോഴത്തെ നാൾപ്പതിപ്പിനായി $3 കാണുക.',
@@ -2390,6 +2388,8 @@ $UNWATCHURL
 
 അഭിപ്രായം അറിയിക്കാനും മറ്റു സഹായങ്ങൾക്കും:
 {{canonicalurl:{{MediaWiki:Helppage}}}}',
+'created' => 'സൃഷ്ടിച്ചു',
+'changed' => 'മാറ്റിയിരിക്കുന്നു',
 
 # Delete
 'deletepage' => 'താൾ മായ്ക്കുക',
@@ -2455,6 +2455,8 @@ $UNWATCHURL
 'prot_1movedto2' => '[[$1]] എന്ന താളിന്റെ പേർ [[$2]] എന്നാക്കിയിരിക്കുന്നു',
 'protect-badnamespace-title' => 'സംരക്ഷിക്കാനാവാത്ത നാമമേഖല',
 'protect-badnamespace-text' => 'ഈ നാമമേഖലയിലെ താളുകൾ സംരക്ഷിക്കാനാവില്ല.',
+'protect-norestrictiontypes-text' => 'പരിധി നിർണ്ണയിക്കാനുള്ള വിധം ഇല്ലാത്തതിനാൽ ഈ താൾ സംരക്ഷിക്കാനാവില്ല.',
+'protect-norestrictiontypes-title' => 'സംരക്ഷിക്കാനാവാത്ത താൾ',
 'protect-legend' => 'സം‌രക്ഷണം സ്ഥിരീകരിക്കുക',
 'protectcomment' => 'കാരണം:',
 'protectexpiry' => 'സംരക്ഷണ കാലാവധി:',
@@ -2470,9 +2472,9 @@ $UNWATCHURL
 '''$1''' എന്ന താളിന്റെ നിലവിലുള്ള ക്രമീകരണങ്ങൾ ഇതാ:",
 'protect-cascadeon' => 'ഈ താൾ നിർഝരിതസംരക്ഷിതമായ (cascading protection) {{PLURAL:$1|ഒരു താളിൽ|പല താളുകളിൽ}} ഉൾപ്പെടുത്തപ്പെടുത്തപ്പെട്ടിരിക്കുന്നതിനാൽ ഇത് സംരക്ഷിത താളാണ്. എന്നാൽ താങ്കൾക്ക് ഈ താളിന്റെ സംരക്ഷണമാനം മാറ്റുവാൻ കഴിയും, അങ്ങനെ ചെയ്താൽ നിർഝരിതസംരക്ഷണത്തിനു മാറ്റം വരികയില്ല.',
 'protect-default' => 'എല്ലാ ഉപയോക്താക്കളെയും അനുവദിക്കുക',
-'protect-fallback' => '"$1" à´\85à´¨àµ\81വാദà´\82 à´\86വശàµ\8dയമാണàµ\8dâ\80\8c',
-'protect-level-autoconfirmed' => 'à´\85à´\82à´\97à´¤àµ\8dവമàµ\86à´\9fàµ\81à´\95àµ\8dà´\95ാതàµ\8dà´¤ à´\89പയàµ\8bà´\95àµ\8dതാà´\95àµ\8dà´\95à´³àµ\86 à´¤à´\9fà´¯àµ\81à´\95',
-'protect-level-sysop' => 'സിസàµ\8bà´ªàµ\8dà´ªàµ\81à´\95ൾ à´®à´¾à´¤àµ\8dà´°à´\82',
+'protect-fallback' => '"$1" à´\85à´¨àµ\81വാദമàµ\81à´³àµ\8dà´³ à´\89പയàµ\8bà´\95àµ\8dതാà´\95àµ\8dà´\95à´³àµ\86 à´®à´¾à´¤àµ\8dà´°à´\82 à´\85à´¨àµ\81വദിà´\95àµ\8dà´\95àµ\81à´¨àµ\8dà´¨àµ\81',
+'protect-level-autoconfirmed' => 'à´¸àµ\8dഥിരàµ\80à´\95à´°à´¿à´\95àµ\8dà´\95à´ªàµ\8dà´ªàµ\86à´\9fàµ\8dà´\9f à´\89പയàµ\8bà´\95àµ\8dതാà´\95àµ\8dà´\95à´³àµ\86 à´®à´¾à´¤àµ\8dà´°à´\82 à´\85à´¨àµ\81വദിà´\95àµ\8dà´\95àµ\81à´¨àµ\8dà´¨àµ\81',
+'protect-level-sysop' => 'സിസàµ\8bà´ªàµ\8dà´ªàµ\81à´\95à´³àµ\86 à´®à´¾à´¤àµ\8dà´°à´\82 à´\85à´¨àµ\81വദിà´\95àµ\8dà´\95àµ\81à´¨àµ\8dà´¨àµ\81',
 'protect-summary-cascade' => 'നിർഝരിതം',
 'protect-expiring' => 'കാലാവധി തീരുന്നത് - $1 (UTC)',
 'protect-expiring-local' => '$1-നു കാലഹരണപ്പെടുന്നു',
@@ -2765,8 +2767,7 @@ $1',
 # Move page
 'move-page' => '$1 മാറ്റുക',
 'move-page-legend' => 'താൾ മാറ്റുക',
-'movepagetext' => "താഴെയുള്ള ഫോം ഒരു താളിനെ പുനർനാമകരണം ചെയ്യാനുള്ളതാണ്.
-താളിന്റെ പഴയരൂപങ്ങളും ഈ മാറ്റത്തിന് വിധേയമാക്കപ്പെടും.
+'movepagetext' => "താഴെയുള്ള ഫോം ഒരു താളിനെ പുനർനാമകരണം ചെയ്യാനുള്ളതാണ്, താളിന്റെ നാൾവഴിയും അക്കൂടെ പുതിയ പേരിലേയ്ക്ക് മാറുന്നതാണ്.
 പഴയ തലക്കെട്ട്, പുതിയ തലക്കെട്ടുള്ള താളിലേക്കുള്ള ഒരു തിരിച്ചുവിടൽ താളായി മാറും.
 പഴയ തലക്കെട്ടിലേക്കുള്ള തിരിച്ചുവിടലുകൾ യന്ത്രങ്ങൾ ഉപയോഗിച്ച് താങ്കൾക്ക് ശരിയാക്കാവുന്നതാണ്.
 അങ്ങനെ വേണ്ട എന്നാണ് താങ്കളാഗ്രഹിക്കുന്നതെങ്കിൽ [[Special:DoubleRedirects|ഇരട്ട തിരിച്ചുവിടലുകളോ]], [[Special:BrokenRedirects|ഫലപ്രദമല്ലാത്ത തിരിച്ചുവിടലുകളോ]] ഉണ്ടാകുന്നുണ്ടോയെന്ന് ദയവായി പരിശോധിക്കുക.
@@ -3139,6 +3140,10 @@ $1',
 'pageinfo-protect-cascading' => 'സംരക്ഷണങ്ങൾ ഇവിടെ നിന്ന് നിർഝരിതപ്പെടുത്തുന്നു',
 'pageinfo-protect-cascading-yes' => 'അതെ',
 'pageinfo-protect-cascading-from' => 'സംരക്ഷണങ്ങൾ നിർഝരിതപ്പെടുത്തുന്നത്',
+'pageinfo-category-info' => 'വർഗ്ഗത്തിന്റെ വിവരങ്ങൾ',
+'pageinfo-category-pages' => 'താളുകളുടെ എണ്ണം',
+'pageinfo-category-subcats' => 'ഉപവർഗ്ഗങ്ങളുടെ എണ്ണം',
+'pageinfo-category-files' => 'പ്രമാണങ്ങളുടെ എണ്ണം',
 
 # Skin names
 'skinname-standard' => 'സാർവത്രികം',
@@ -3195,6 +3200,7 @@ $1',
 'file-nohires' => 'കൂടുതൽ വ്യക്തതയുള്ള ചിത്രം ലഭ്യമല്ല.',
 'svg-long-desc' => 'എസ്.വി.ജി. പ്രമാണം, നാമമാത്രമായ $1 × $2 പിക്സലുകൾ, പ്രമാണത്തിന്റെ വലിപ്പം: $3',
 'svg-long-desc-animated' => 'ചലിക്കുന്ന എസ്.വി.ജി. പ്രമാണം, നാമമാത്രമായ $1 × $2 പിക്സലുകൾ, പ്രമാണത്തിന്റെ വലിപ്പം: $3',
+'svg-long-error' => 'അസാധുവായ എസ്.വി.ജി. പ്രമാണം: $1',
 'show-big-image' => 'പൂർണ്ണ റെസലൂഷൻ',
 'show-big-image-preview' => 'ഈ പ്രിവ്യൂവിന്റെ വലിപ്പം: $1.',
 'show-big-image-other' => 'കൂടുതൽ {{PLURAL:$2|റെസലൂഷൻ}}: $1.',
@@ -3228,6 +3234,8 @@ $1',
 'minutes' => '{{PLURAL:$1|ഒരു മിനിറ്റ്|$1 മിനിറ്റ്}}',
 'hours' => '{{PLURAL:$1|ഒരു മണിക്കൂർ|$1 മണിക്കൂർ}}',
 'days' => '{{PLURAL:$1|ഒരു ദിവസം|$1 ദിവസം}}',
+'months' => '{{PLURAL:$1|ഒരു മാസം|$1 മാസം}}',
+'years' => '{{PLURAL:$1|ഒരു വർഷം|$1 വർഷം}}',
 'ago' => '$1 മുമ്പ്',
 'just-now' => 'ഇപ്പോൾ',
 
@@ -3844,9 +3852,9 @@ $5
 'version-software' => 'ഇൻസ്റ്റോൾ ചെയ്ത സോഫ്റ്റ്‌വെയർ',
 'version-software-product' => 'സോഫ്റ്റ്‌വെയർ ഉല്പ്പന്നം',
 'version-software-version' => 'വിവരണം',
-'version-entrypoints' => 'പ്രവേശന നില യൂ.ആർ.എല്ലുകൾ',
-'version-entrypoints-header-entrypoint' => 'പ്രവേശന നില',
-'version-entrypoints-header-url' => 'à´¯àµ\82.ആർ.എൽ.',
+'version-entrypoints' => 'പ്രവേശനസ്ഥാന യു.ആർ.എല്ലുകൾ',
+'version-entrypoints-header-entrypoint' => 'പ്രവേശനസ്ഥാനം',
+'version-entrypoints-header-url' => 'à´¯àµ\81.ആർ.എൽ.',
 'version-entrypoints-articlepath' => '[https://www.mediawiki.org/wiki/Manual:$wgArticlePath ലേഖന പഥം]',
 'version-entrypoints-scriptpath' => '[https://www.mediawiki.org/wiki/Manual:$wgScriptPath സ്ക്രിപ്റ്റ് പഥം]',
 
@@ -3883,7 +3891,7 @@ $5
 'specialpages-group-highuse' => 'കൂടുതൽ ഉപയോഗിക്കപ്പെട്ട താളുകൾ',
 'specialpages-group-pages' => 'താളുകളുടെ പട്ടിക',
 'specialpages-group-pagetools' => 'താളുകൾക്കുള്ള ഉപകരണങ്ങൾ',
-'specialpages-group-wiki' => 'വിà´\95àµ\8dà´\95à´¿ à´µà´¿à´µà´°à´\99àµ\8dà´\99à´³àµ\81à´\82 à´\89à´ªà´\95à´°à´£à´\99àµ\8dà´\99à´³àµ\81à´\82',
+'specialpages-group-wiki' => 'വിവരങ്ങളും ഉപകരണങ്ങളും',
 'specialpages-group-redirects' => 'തിരിച്ചുവിടൽ സംബന്ധിച്ച പ്രത്യേക താളുകൾ',
 'specialpages-group-spam' => 'പാഴെഴുത്ത് ഉപകരണങ്ങൾ',
 
@@ -3981,8 +3989,12 @@ $5
 'logentry-newusers-newusers' => '$1 എന്ന ഉപയോക്തൃ അംഗത്വം സൃഷ്ടിക്കപ്പെട്ടിരിക്കുന്നു',
 'logentry-newusers-create' => '$1 എന്ന ഉപയോക്തൃ അംഗത്വം സൃഷ്ടിക്കപ്പെട്ടിരിക്കുന്നു',
 'logentry-newusers-create2' => '$3 എന്ന ഉപയോക്തൃ അംഗത്വം $1 സൃഷ്ടിച്ചിരിക്കുന്നു',
+'logentry-newusers-byemail' => '$3 എന്ന ഉപയോക്തൃ അംഗത്വം $1 സൃഷ്ടിച്ചിരിക്കുന്നു, രഹസ്യവാക്ക് ഇമെയിൽ വഴി അയച്ചു',
 'logentry-newusers-autocreate' => '$1 എന്ന അംഗത്വം സ്വയം സൃഷ്ടിക്കപ്പെട്ടിരിക്കുന്നു',
-'newuserlog-byemail' => 'രഹസ്യവാക്ക് ഇ-മെയിൽ വഴി അയച്ചിരിക്കുന്നു',
+'logentry-rights-rights' => '$3 എന്ന ഉപയോക്താവിന്റെ സംഘ അംഗത്വം $1, $4 എന്നതിൽ നിന്നു $5 എന്നതിലേക്കു മാറ്റിയിരിക്കുന്നു',
+'logentry-rights-rights-legacy' => '$3 എന്ന ഉപയോക്താവിന്റെ സംഘ അംഗത്വം $1 മാറ്റിയിരിക്കുന്നു',
+'logentry-rights-autopromote' => '$1 എന്ന ഉപയോക്താവ് $4 എന്നതിൽ നിന്നും $5 എന്നതിലേയ്ക്ക് സ്വയം ഉയർത്തിയിരിക്കുന്നു',
+'rightsnone' => '(ഒന്നുമില്ല)',
 
 # Feedback
 'feedback-bugornote' => 'സാങ്കേതിക പ്രശ്നം എന്താണെന്ന് വിവരിച്ചെഴുതാൻ താങ്കൾ തയ്യാറാണെങ്കിൽ [$1 ബഗ് അറിയിക്കുക].
@@ -4036,6 +4048,7 @@ $5
 'api-error-ok-but-empty' => 'ആന്തരിക പിഴവ്: സെർവറിൽ നിന്ന് പ്രതികരണമൊന്നും ലഭിക്കുന്നില്ല.',
 'api-error-overwrite' => 'നിലവിലുള്ള പ്രമാണത്തിന്റെ മുകളിൽ സ്ഥാപിക്കൽ അനുവദിച്ചിട്ടില്ല.',
 'api-error-stashfailed' => 'ആന്തരിക പിഴവ്: പ്രമാണം താത്കാലികമായി സംഭരിക്കുന്നതിൽ സെർവർ പരാജയപ്പെട്ടു.',
+'api-error-publishfailed' => 'ആന്തരിക പിഴവ്: താത്കാലിക പ്രമാണം പ്രസിദ്ധീകരിക്കുന്നതിൽ സെർവർ പരാജയപ്പെട്ടു.',
 'api-error-timeout' => 'പ്രതീക്ഷിക്കപ്പെട്ട കാലാവധിക്കുള്ളിൽ സെർവർ പ്രതികരിച്ചില്ല.',
 'api-error-unclassified' => 'അപരിചിതമായ പിഴവ് സംഭവിച്ചിരിക്കുന്നു',
 'api-error-unknown-code' => 'അപരിചിതമായ പിഴവ്: "$1"',
@@ -4056,6 +4069,4 @@ $5
 'duration-centuries' => '{{PLURAL:$1|ഒരു നൂറ്റാണ്ട്|$1 നൂറ്റാണ്ട്}}',
 'duration-millennia' => '{{PLURAL:$1|ഒരു സഹസ്രാബ്ദം|$1 സഹസ്രാബ്ദം}}',
 
-# Unknown messages
-'svg-long-error' => 'അസാധുവായ എസ്.വി.ജി. പ്രമാണം: $1',
 );
index 7e3f940..f863d34 100644 (file)
@@ -208,6 +208,7 @@ $messages = array(
 'namespaces' => 'Нэрний зайнууд',
 'variants' => 'Хувилбарууд',
 
+'navigation-heading' => 'Хажуугийн цэс',
 'errorpagetitle' => 'Aлдаа',
 'returnto' => '$1 руу буцах.',
 'tagline' => '{{SITENAME}}-с',
@@ -307,6 +308,8 @@ $1',
 'newmessagesdifflink' => 'сүүлийн өөрчлөлт',
 'youhavenewmessagesfromusers' => 'Танд {{PLURAL:$3|өөр нэгэн хэрэглэгчээс |$3 хэрэглэгчээс}} $1 ирсэн байна ($2).',
 'youhavenewmessagesmanyusers' => 'Танд ($2) олон хэрэглэгчидээс $1.',
+'newmessageslinkplural' => '{{PLURAL:$1|нэг шинэ меммеж| шинэ мессеж}}',
+'newmessagesdifflinkplural' => '{{PLURAL:$1|сүүлд хийсэн өөрчлөлт|сүүлд хийсэн өөрчлөлт}}',
 'youhavenewmessagesmulti' => 'Таньд $1 дээр шинэ мессеж ирсэн байна',
 'editsection' => 'засварлах',
 'editold' => 'засварлах',
@@ -401,6 +404,8 @@ $1',
 'cannotdelete' => '"$1" гэсэн хуудас буюу файлыг устгаж чадсангүй.
 Өөр хэрэглэгч өрсөж устгасан байж магадгүй.',
 'cannotdelete-title' => '"$1" хуудсыг устгаж чадсангүй',
+'delete-hook-aborted' => 'Хүк устгалыг зогсоолоо.
+Шалтгаан өгөгдсөнгүй.',
 'badtitle' => 'Болохгүй гарчиг',
 'badtitletext' => 'Оруулсан хуудасны нэр тань хүчингүй, хоосон, эсвэл буруу холбосон интер-хэл буюу интер-викигийн нэр байна. Нэрэнд хэрэглэгдэж болохгүй тэмдэгт орсон байж болзошгүй.',
 'perfcached' => 'Дараах тоо баримт нь нөөц хуулбар учраас хуучирсан мэдээлэлтэй байж магадгүй. Дээд тал нь {{PLURAL:$1|нэг илэрц|$1 илэрцүүд}} нөөцөд бэлэн байна.',
@@ -429,7 +434,13 @@ $2',
 'ns-specialprotected' => 'Тусгай хуудсуудыг засварлах боломжгүй.',
 'titleprotected' => "[[User:$1|$1]] нь энэ хуудсыг үүсгэх явдыг хорьжээ.
 Шалтгаан нь: ''$2''.",
+'filereadonlyerror' => '"$1" файлыг өөрчилж чадсангүй, "$2" файлын санг зөвхөн уншихаар тохируулсан байна.
+
+Түүнийг түгжсэн админы тайлбар: "$3".',
+'invalidtitle-knownnamespace' => 'Гарчигийг "$2" namespace, "$3" бичвэртэй буруу оруулсан байна',
+'invalidtitle-unknownnamespace' => '$1 гэсэн үл мэдэгдэх неймспайсын дугаар, "$2" бичвэртэй буруу гарчиг байна.',
 'exception-nologin' => 'Та хэрэглэгчийн нэрээр нэвтрээгүй байна.',
+'exception-nologin-text' => 'Уг хуудас, үйлдлийг хийхэд та викируу холбогдсон байх шаардлагатай.',
 
 # Virus scanner
 'virus-badscanner' => "Буруу тохиргоо: үл мэдэгдэх вирус илрүүлэгч программ: ''$1''",
@@ -574,6 +585,23 @@ $2',
 'passwordreset-capture-help' => 'Энэ нүдийг чагталбал цахим шуудан түр нууц үгийн хамт танд харагдахаас гадна, шуудангаар тань очих болно.',
 'passwordreset-email' => 'Цахим шуудан:',
 'passwordreset-emailtitle' => '{{SITENAME}}-н бүртгэлийн мэдээлэл',
+'passwordreset-emailtext-ip' => 'Хэн нэгэн ($1 гэсэн IP хаягаас) {{SITENAME}} ($4) дээр таны бүртгэлийн сануулга авахаар хүссэн байна. Дараах {{PLURAL:$3|бүртгэл|бүртгэл}}
+уг е-шуудантай холбоотой:
+
+$2
+
+{{PLURAL:$3|Уг түр хэрэглэх нууц үг|Уг түр хэрэглэх нууц үгүүд}} нь {{PLURAL:$5|нэг өдрийн|$5 өдрийн}} дотор устах болно.
+Та уг нууц үгээр нэвтэрч, түүнийг шинэчлэх хэрэгтэй. Хэрэв өөр нэгэн уг хүсэлтийг явуулсан бол 
+эсвэл өөрийн ориг нууц үгээ санаж байгаад түүнийгээ өөрчлөхийг хүсэхгүй байгаа бол энэ захиаг үл ойшоож 
+энгийнээр нэвтэрч болно.',
+'passwordreset-emailtext-user' => '{{SITENAME}} дээрх $1 хэрэглэгч {{SITENAME}} ($4) дээр өөрийн тань бүртгэл дээр сануулга хүссэн байна. 
+Дараах {{PLURAL:$3|бүртгэл|бүртгэлүүд}} уг е-шуудантай холбоотой байна:
+
+$2
+
+Энэ {{PLURAL:$3|түр нууц үг|түр нууц үгс}} {{PLURAL:$5|нэг өдрийн дараа|$5 өдрийн дараа}} устах болно.
+Түүгээр нэвтэрч ороод нууц үгээ шинэчилнэ үү. Энэ сануулгыг өөр хэн нэгэн хийсэн, эсвэл та
+нууц үгээ санаж байгаа бол энэ захиаг анхааралгүйгээр хуучнаараа ороход болно.',
 'passwordreset-emailelement' => 'Хэрэглэгчийн нэр: $1
 Түр зуурын нууц үг: $2',
 'passwordreset-emailsent' => 'Танд санамж болгон нэг имайл явууллаа',
@@ -588,6 +616,7 @@ $2',
 'changeemail-oldemail' => 'Одоогийн цахим шуудан:',
 'changeemail-newemail' => 'Шинэ цахим шуудангийн хаяг:',
 'changeemail-none' => '(байхгүй)',
+'changeemail-password' => '{{SITENAME}} дахь таны нууц үг:',
 'changeemail-submit' => 'Цахим шуудан солих',
 'changeemail-cancel' => 'Цуцал',
 
@@ -766,7 +795,6 @@ $2',
 'template-semiprotected' => '(хагас-хамгаалагдсан)',
 'hiddencategories' => 'Энэ хуудас нь $1 нуугдсан ангилалд багтаж байна:',
 'edittools' => '<!-- Энд бичсэн текст засварлах болоод аплоудын тавцангийн доор гарна. -->',
-'nocreatetitle' => 'Хуудасны үүсгэл хязгаарлагдсан байна',
 'nocreatetext' => '{{SITENAME}} нь шинэ хуудас үүсгэх явдлыг хаасан байна.
 Та буцаад хуучин байсан хуудсыг засварлах, эсвэл [[Special:UserLogin|нэвтэрч орох буюу бүртгүүлж болно]].',
 'nocreate-loggedin' => 'Таньд шинэ хуудас үүсгэх эрх байхгүй байна.',
@@ -791,6 +819,7 @@ $2',
 'edit-already-exists' => 'Шинэ хуудас үүсгэж чадсангүй.
 Өмнө үүсгэгдсэн байна.',
 'defaultmessagetext' => 'Үндсэн мессеж текст',
+'content-failed-to-parse' => '$2 гэсэн агуулгыг $1 модел дээр авч чадсангүй: $3',
 
 # Content models
 'content-model-wikitext' => 'вики бичвэр',
@@ -993,6 +1022,7 @@ $1",
 
 # Diffs
 'history-title' => '"$1"-н хянасан түүх',
+'difference-title' => '"$1"-ны өөр хувилбарууд',
 'difference-title-multipage' => '"$1", "$2" хоёр хуудасны ялгаа',
 'difference-multipage' => '(Хуудсууд хоорондын ялгаа)',
 'lineno' => '$1-р мөр:',
@@ -1074,6 +1104,7 @@ $1",
 'qbsettings-fixedright' => 'Баруун талд бэхжүүлсэн',
 'qbsettings-floatingleft' => 'Зүүн талд хөвсөн',
 'qbsettings-floatingright' => 'Баруун талд хөвсөн',
+'qbsettings-directionality' => 'Тухай хэлний барилаас хамаарч хэлбэрийг бий болгох',
 
 # Preferences page
 'preferences' => 'Хэрэглэгчийн тохиргоо',
@@ -1087,6 +1118,7 @@ $1",
 'datedefault' => 'Анхны байдал',
 'prefs-beta' => 'Туршилтын бета хэрэгсүүрүүд',
 'prefs-datetime' => 'Огноо ба цаг',
+'prefs-labs' => 'Labs -ын функцүүд',
 'prefs-user-pages' => 'Хэрэглэгчийн хуудсууд',
 'prefs-personal' => 'Хувийн тохируулга',
 'prefs-rc' => 'Сүүлийн засварууд',
@@ -1152,9 +1184,9 @@ $1",
 'prefs-emailconfirm-label' => 'Мэйлийн баталгаажуулалт:',
 'prefs-textboxsize' => 'Засварлах талбарын хэмжээ',
 'youremail' => 'Мэйл хаяг:',
-'username' => 'Хэрэглэгчийн нэр:',
-'uid' => 'Хэрэглэгчийн ID:',
-'prefs-memberingroups' => 'Дараах {{PLURAL:$1|бүлгийн|бүлгүүдийн}} гишүүн:',
+'username' => '{{GENDER:$1|Хэрэглэгчийн нэр}}:',
+'uid' => '{{GENDER:$1|Хэрэглэгчийн}} ID:',
+'prefs-memberingroups' => '{{PLURAL:$1|грүпийн|грүпийн}} {{GENDER:$2|гишүүн}} :',
 'prefs-registration' => 'Бүртгүүлсэн цаг:',
 'yourrealname' => 'Жинхэнэ нэр:',
 'yourlanguage' => 'Хэл:',
@@ -1266,6 +1298,7 @@ $1 тэмдэгтээс богино байх ёстой.',
 'right-writeapi' => 'Засварын API-н хэрэглээ',
 'right-delete' => 'Хуудас устгах',
 'right-bigdelete' => 'Том хэмжээний түүхтэй хуудсуудыг устгах',
+'right-deletelogentry' => 'Тухайн логуудыг устгах, сэргээх',
 'right-deleterevision' => 'Хуудсуудын тодорхой засваруудыг устгах буюу үл устгах',
 'right-deletedhistory' => 'Устгагдсан түүхийн бүртгэлийг холбогдох бичиггүй нь үзэх',
 'right-deletedtext' => 'Устгагдсан засварууд хоорондын устгагсдан текст, өөрчлөлтүүдийг харах',
@@ -1302,12 +1335,13 @@ $1 тэмдэгтээс богино байх ёстой.',
 'right-sendemail' => 'Бусад хэрэглэгчид руу и-мэйл явуулах',
 'right-passwordreset' => 'Цахим шуудангийн нууц үгийг сэргээн харах',
 
+# Special:Log/newusers
+'newuserlogpage' => 'Хэрэглэгч үүсгэлтийн лог',
+'newuserlogpagetext' => 'Энэ нь хэрэглэгч үүсгэлтийн лог юм.',
+
 # User rights log
 'rightslog' => 'Хэрэглэгчдийн эрхийн лог',
 'rightslogtext' => 'Энэ бол хэрэглэгчдийн эрхэд учруулсан өөрчлөлтүүдийн лог юм.',
-'rightslogentry' => '$1-н бүлгийн гишүүнчлэлийг $2-с $3 болгож өөрчиллөө',
-'rightslogentry-autopromote' => '$2 -оос $3 -руу автоматаар шилжив',
-'rightsnone' => '(байхгүй)',
 
 # Associated actions - in the sentence "You do not have permission to X"
 'action-read' => 'энэ хуудсыг унших',
@@ -1334,6 +1368,7 @@ $1 тэмдэгтээс богино байх ёстой.',
 'action-suppressionlog' => 'энэ хувийн логийг үзэх',
 'action-block' => 'энэ хэрэглэгчийг засвар хийхээс түгжих',
 'action-protect' => 'энэ хуудасны хамгаалалтын түвшингүүдийг өөрчлөх',
+'action-rollback' => 'сүүлд хийгдсэн тодорхой хэрэглэгчдийн өөрчлөлтүүдийг буцаах',
 'action-import' => 'энэ хуудсыг өөр викигээс оруулах',
 'action-importupload' => 'энэ хуудсыг файл оруулалтаас оруулах',
 'action-patrol' => 'бусдын хийсэн засварыг манагдсан гэж тэмдэглэх',
@@ -1935,10 +1970,6 @@ URL нь зөв болон сайт ажиллагаатай байгаа эсэ
 'activeusers-hidesysops' => 'Администраторуудыг нуух',
 'activeusers-noresult' => 'Хэрэглэгч олдсонгүй.',
 
-# Special:Log/newusers
-'newuserlogpage' => 'Хэрэглэгч үүсгэлтийн лог',
-'newuserlogpagetext' => 'Энэ нь хэрэглэгч үүсгэлтийн лог юм.',
-
 # Special:ListGroupRights
 'listgrouprights' => 'Хэрэглэгчийн бүлгийн эрхүүд',
 'listgrouprights-summary' => 'Дараах нь энэ вики дээрх хэрэглэгчийн бүлгүүд болон тэдгээрийн эрх, зөвшөөрлүүдийн жагсаалт юм.
@@ -1996,7 +2027,7 @@ URL нь зөв болон сайт ажиллагаатай байгаа эсэ
 'usermessage-template' => 'МедиаВики:ХэрэглэгчийнМэдээ',
 
 # Watchlist
-'watchlist' => 'Ð\9cиний Ñ\85Ñ\8fнаж Ð±Ñ\83й Ñ\85Ñ\83Ñ\83дÑ\81Ñ\83Ñ\83д',
+'watchlist' => 'Ð¥Ñ\8fнаÑ\85 Ð¶Ð°Ð³Ñ\81аалÑ\82',
 'mywatchlist' => 'Хяналтын хуудсын жагсаалт',
 'watchlistfor2' => 'Хэрэглэгч: $1 $2',
 'nowatchlist' => 'Танд хянаж буй зүйл байхгүй.',
@@ -2068,6 +2099,8 @@ $UNWATCHURL
 
 Санал сэтгэгдэл болон тулгарсан бэрхшээлээ :
 {{canonicalurl:{{MediaWiki:Helppage}}}} хаягаар орж бичнэ үү',
+'created' => 'үүсгэсэн',
+'changed' => 'өөрчлөгдсөн',
 
 # Delete
 'deletepage' => 'Хуудсыг устга',
@@ -2218,7 +2251,8 @@ $UNWATCHURL
 'undeletedrevisions' => '{{PLURAL:$1|1 хувилбар|$1 хувилбар}}  сэргээгдлээ',
 'undeletedrevisions-files' => '{{PLURAL:$1|1 засвар|$1 засвар}} ба {{PLURAL:$2|1 файл|$2 файл}} сэргээгдлээ',
 'undeletedfiles' => '{{PLURAL:$1|1 файл|$1 файл}} сэргээгдлээ',
-'cannotundelete' => 'Устгасан хуудсыг буцааж сэргээх үйлдэл амжилтгүй боллоо. Хэн нэгэн уг хуудсыг өрсөж сэргээсэн байх боломжтой.',
+'cannotundelete' => 'Устгал сэргээлт хийж чадсангүй:
+$1',
 'undeletedpage' => "'''$1 сэргээгдэв'''
 
 Сүүлийн үед устгагдсан ба сэргээгдсэн зүйлүүдийн жагсаалтыг [[Special:Log/delete|устгалын бүртгэл]] дээрээс харна уу.",
@@ -2342,6 +2376,7 @@ $1',
 'unblockiptext' => 'Өмнө нь хориг тавьсан интернет хаяг юм уу хэрэглэгчийн бичих эрхийг сэргээхийн тулд дорх маягтыг ашигла.',
 'ipusubmit' => 'Энэ түгжээг цуцлах',
 'unblocked' => '[[User:$1|$1]]-ийн хориг цуцлагдсан (идэвхижсэн) байна.',
+'unblocked-range' => '$1 -г блоклогдсон байдлаас гаргасан',
 'unblocked-id' => '$1 түгжээг авч хаялаа',
 'blocklist' => 'Блоклогдсон хэрэглэгчид',
 'ipblocklist' => 'Түгжигдсэн хэрэглэгчид',
@@ -2349,6 +2384,8 @@ $1',
 'blocklist-userblocks' => 'бүртгэгдсэн блок-г нуух',
 'blocklist-tempblocks' => 'Түр зуурын блокыг нуух',
 'blocklist-addressblocks' => 'Ганц IP блокыг нуух',
+'blocklist-rangeblocks' => 'Блокуудыг нуух',
+'blocklist-timestamp' => 'Цагийн зааг',
 'blocklist-target' => 'Бай',
 'blocklist-expiry' => 'Цуцлагдана',
 'blocklist-by' => 'Админыг блоклох',
@@ -2503,6 +2540,7 @@ $1',
 'immobile-target-namespace-iw' => 'Интервики холбоос нь хуудас зөөлтийн зорьсон газар болох боломжгүй.',
 'immobile-source-page' => 'Энэ хуудсыг зөөх боломжгүй.',
 'immobile-target-page' => 'Энэ зорьсон гарчиг руу зөөх боломжгүй.',
+'bad-target-model' => 'Уг хаягт өөр агуулгын модель ашиглаж байгаагаас $1 ээс $2 руу хөрвүүлж болохгүй байна..',
 'imagenocrossnamespace' => 'Файлыг файлаас өөр нэрний зай руу зөөх боломжгүй',
 'nonfile-cannot-move-to-file' => 'Файлын нэрний зай руу файл биш зүйлийг зөөх боломжгүй.',
 'imagetypemismatch' => 'Шинэ файлын өргөтгөл төрөлтэй нь таарахгүй байна',
@@ -2530,6 +2568,7 @@ $1',
 'exportcuronly' => 'Бүх түүхийг биш, зөвхөн одоогийн өөрчлөлтийг багтаа',
 'exportnohistory' => "----
 '''Анхаар:''' Энэ маягтын дагуу хуудсуудын бүтэн түүхийг экспортлох үйлдэл гүйцэтгэлийн шалтгаануудын улмаас зогсоогдсон байна.",
+'exportlistauthors' => 'Хуудас бүрт хувь нэмэр оруулэгчдийг харуулах',
 'export-submit' => 'Экспортлох',
 'export-addcattext' => 'Дараах ангиллаас хуудсуудыг нэмэх:',
 'export-addcat' => 'Нэмэх',
@@ -2787,6 +2826,7 @@ $1',
 'file-info-size' => '$1 × $2 пиксел, файлын хэмжээ: $3, MIME төрөл: $4',
 'file-nohires' => 'Илүү чанартай хувилбар байхгүй байна.',
 'svg-long-desc' => 'SVG файл, $1 × $2 пиксэл, файлын хэмжээ: $3',
+'svg-long-error' => '$1 : Буруу SVG файл',
 'show-big-image' => 'Хамгийн сайн чанартай хувилбар',
 'show-big-image-preview' => 'Үзлэгийн хэмжээ : $1',
 'show-big-image-other' => 'Бусад {{PLURAL:$2|зургын нягтрал|зургын нягтрал}}: $1.',
@@ -3444,7 +3484,10 @@ $5
 'logentry-delete-restore' => '$3 хуудсыг $1 сэтгээсэн',
 'revdelete-restricted' => 'системийн операторуудад тавигдсан хязгаарлалтууд',
 'revdelete-unrestricted' => 'системийн операторуудаас авч хаясан хязгаарлалтууд',
-'newuserlog-byemail' => 'мэйлээр явуулсан нууц үг',
+'logentry-rights-rights' => '$1 $3 дахь грүпийн гишүүнчлэлээ $4 ээс $5 руу шилжүүллээ',
+'logentry-rights-rights-legacy' => '$1 $3 дэхь грүпийн гишүүнчлэлээ сольсон',
+'logentry-rights-autopromote' => '$1 $4 аас $5 руу автоматаар дэвшигдлээ',
+'rightsnone' => '(байхгүй)',
 
 # Feedback
 'feedback-cancel' => 'Болих',
@@ -3468,6 +3511,4 @@ $5
 'duration-centuries' => '$1 {{PLURAL:$1|зуун|зуун}}',
 'duration-millennia' => '$1 {{PLURAL:$1|мянган|мянган}}',
 
-# Unknown messages
-'svg-long-error' => '$1 : Буруу SVG файл',
 );
index 834d1ff..363890d 100644 (file)
@@ -43,6 +43,7 @@
  * @author कोल्हापुरी
  * @author प्रणव कुलकर्णी
  * @author शࣿरीहरि
+ * @author संतोष दहिवळ
  */
 
 $namespaceNames = array(
@@ -453,6 +454,7 @@ $messages = array(
 'newwindow' => '(नवीन खिडकीत उघडते.)',
 'cancel' => 'खोडा',
 'moredotdotdot' => 'अजून...',
+'morenotlisted' => 'आणखी यादीत नाही...',
 'mypage' => 'माझे पान',
 'mytalk' => 'माझ्या चर्चा',
 'anontalk' => 'या अंकपत्त्याचे चर्चा पान उघडा',
@@ -699,6 +701,9 @@ $2',
 'ns-specialprotected' => 'विशेष पाने संपादित करता येत नाहीत.',
 'titleprotected' => "या शीर्षकाचे पान सदस्य [[User:$1|$1]]ने निर्मीत करण्यापासून सुरक्षित केलेले आहे.
 ''$2'' हे कारण नमूद केलेले आहे.",
+'invalidtitle-knownnamespace' => '"$2" नामविश्वात "$3" हे अयोग्य शीर्षक',
+'exception-nologin' => 'प्रवेश केलेला नाही',
+'exception-nologin-text' => 'हे करण्यासाठी आपल्याला या विकिवर सदस्यनावाने प्रवेश करायला हवा.',
 
 # Virus scanner
 'virus-badscanner' => "चुकीचे कॉन्फिगरेशन: व्हायरस स्कॅनर अनोळखी: ''$1''",
@@ -710,12 +715,16 @@ $2',
 
 तुम्ही अनामिकपणे {{SITENAME}}चा उपयोग करत राहू शकता, किंवा त्याच अथवा वेगळ्या सदस्य नावाने <span class='plainlinks'>[$1  पुन्हा दाखल होऊ शकता]</span>.
 आपण स्वत:च्या न्याहाळकाची सय (cache) रिकामी करत नाही तो पर्यंत काही पाने आपण अजून दाखल आहात, असे नुसतेच दाखवत राहू शकतील.",
+'welcomeuser' => 'स्वागत, $1!',
+'welcomecreation-msg' => 'तुमचे खाते उघडण्यात आले आहे.
+आपल्या [[Special:Preferences|{{SITENAME}} पसंती]] बदलण्यास विसरू नका.',
 'yourname' => 'तुमचे नाव',
 'yourpassword' => 'तुमचा परवलीचा शब्द',
 'yourpasswordagain' => 'तुमचा परवलीचा शब्द पुन्हा लिहा',
 'remembermypassword' => 'माझा प्रवेश या संगणकावर लक्षात ठेवा (जास्तीत जास्त $1 {{PLURAL:$1|दिवस|दिवसांसाठी}})',
 'securelogin-stick-https' => 'प्रवेशानंतर एचटीटीपीएसच्या संपर्कात रहा',
 'yourdomainname' => 'तुमचे क्षेत्र (डॉमेन) :',
+'password-change-forbidden' => 'तुम्ही या विकिवर तुमचा संकेतशब्द बदलू शकत नाही.',
 'externaldberror' => 'विदागार ’खातरजमा’ (प्रमाणितीकरण) त्रुटी होती अथवा तुम्हाला तुमचे बाह्य खाते अद्ययावत  करण्याची परवानगी नाही.',
 'login' => 'प्रवेश करा',
 'nav-login-createaccount' => 'सदस्य प्रवेश',
@@ -777,6 +786,7 @@ $2',
 'emailconfirmlink' => 'आपला ई-मेल पत्ता तपासून पहा.',
 'invalidemailaddress' => 'तुम्ही दिलेला ई-मेल पत्ता चुकीचा आहे, कारण तो योग्यप्रकारे लिहिलेला नाही. कृपया योग्यप्रकारे ई-मेल पत्ता लिहा अथवा ती जागा मोकळी सोडा.',
 'cannotchangeemail' => 'या विकीवर खात्याचा ईमेल बदलता येत नाही',
+'emaildisabled' => 'हे संकेतस्थळ विपत्र पाठवू शकत नाही.',
 'accountcreated' => 'खाते उघडले.',
 'accountcreatedtext' => '$1 चे सदस्यखाते उघडले.',
 'createaccount-title' => '{{SITENAME}} साठीची सदस्य नोंदणी',
@@ -848,6 +858,7 @@ $2',
 'changeemail-oldemail' => 'सध्याचा ईमेल पत्ता :',
 'changeemail-newemail' => 'नवा ईमेल पत्ता:',
 'changeemail-none' => '(दिलेला नाही)',
+'changeemail-password' => 'तुमचा {{SITENAME}} संकेतांक:',
 'changeemail-submit' => 'ईमेल बदला',
 'changeemail-cancel' => 'रद्द करा',
 
@@ -999,7 +1010,6 @@ $2',
 'template-protected' => '(सुरक्षित)',
 'template-semiprotected' => '(अर्ध-सुरक्षीत)',
 'hiddencategories' => 'हे पान खालील {{PLURAL:$1|एका लपविलेल्या वर्गामध्ये|$1 लपविलेल्या वर्गांमध्ये}} आहे:',
-'nocreatetitle' => 'पान निर्मीतीस मर्यादा',
 'nocreatetext' => '{{SITENAME}}वर नवीन लेख लिहिण्यास मज्जाव करण्यात आलेला आहे. आपण परत जाऊन अस्तित्वात असलेल्या लेखांचे संपादन करू शकता अथवा [[Special:UserLogin|नवीन सदस्यत्व घ्या/ प्रवेश करा]].',
 'nocreate-loggedin' => 'येथे तुम्हाला नवीन पाने बनवण्याची परवानगी नाही.',
 'sectioneditnotsupported-title' => 'विभाग संपादन समर्थित नाही.',
@@ -1022,6 +1032,12 @@ $2',
 'edit-already-exists' => 'नवीन पान तयार करता येऊ शकले नाही.
 या नावाचे पान आधीच अस्तित्वात आहे.',
 
+# Content models
+'content-model-wikitext' => 'विकिमजकूर',
+'content-model-text' => 'सामान्य मजकूर',
+'content-model-javascript' => 'जावास्क्रिप्ट',
+'content-model-css' => 'सीएसएस',
+
 # Parser/template warnings
 'expensive-parserfunction-warning' => '”’इशारा:”’ या पानावर खूप सारे खर्चिक पृथक्करण क्रिया कॉल्स आहेत.
 
@@ -1525,12 +1541,13 @@ $1",
 'right-sendemail' => 'इतर सदस्यांना विपत्रे पाठवा',
 'right-passwordreset' => 'परवलीचा शब्द (पासवर्ड) पुन:स्थापित केल्याची इ मेल पहा.',
 
+# Special:Log/newusers
+'newuserlogpage' => 'नवीन सदस्यांची नोंद',
+'newuserlogpagetext' => 'ही नवीन सदस्यांची नोंद यादी आहे.',
+
 # User rights log
 'rightslog' => 'सदस्य आधिकार नोंद',
 'rightslogtext' => 'ही सदस्य अधिकारांमध्ये झालेल्या बदलांची यादी आहे.',
-'rightslogentry' => '$1 चे ग्रुप सदस्यत्व $2 पासून $3 ला बदलण्यात आलेले आहे',
-'rightslogentry-autopromote' => '$2 ते $3 आपोआप नियुक्ती झाली.',
-'rightsnone' => '(काहीही नाही)',
 
 # Associated actions - in the sentence "You do not have permission to X"
 'action-read' => 'हे पान वाचा',
@@ -1747,6 +1764,7 @@ $1',
 'backend-fail-notsame' => ' $1 येथे यापेक्षा विभिन्न असलेली संचिका पूर्वीच विद्यमान आहे',
 'backend-fail-invalidpath' => '$1 हा वैध संग्राहक-पथ नाही.',
 'backend-fail-delete' => '$1 ही संचिका (फाईल) बनवता आली नाही.',
+'backend-fail-describe' => '"$1" या संचिकेसाठी आपण मेटाडाटा बदलू शकत नाही.',
 'backend-fail-alreadyexists' => '$1 ही संचिका अगोदरच अस्तित्वात आहे.',
 'backend-fail-store' => '$1 ही संचिका $2मधे साठवू शकत नाही.',
 'backend-fail-copy' => '"$1" संचिकेची "$2" ही प्रत करता आली नाही.',
@@ -1887,6 +1905,7 @@ https://www.mediawiki.org/wiki/Manual:Image_Authorization कृपया हे
 'uploadnewversion-linktext' => 'या संचिकेची नवीन आवृत्ती चढवा',
 'shared-repo-from' => '$1 पासून',
 'shared-repo' => 'एक मुक्त कोश',
+'upload-disallowed-here' => 'या संचिकेवर आपण पुनर्लिखाण करु शकत नाही.',
 
 # File reversion
 'filerevert' => '$1 पूर्वपद',
@@ -1991,6 +2010,7 @@ Input:contenttype/subtype, e.g. <code>image/jpeg</code>.',
 # Miscellaneous special pages
 'nbytes' => '$1 {{PLURAL:$1|बाइट|बाइट}}',
 'ncategories' => '$1 {{PLURAL:$1|वर्ग|वर्ग}}',
+'ninterwikis' => '$1 {{PLURAL:$1|आंतरविकि|आंतरविकि दुवे}}',
 'nlinks' => '$1 {{PLURAL:$1|दुवा|दुवे}}',
 'nmembers' => '$1 {{PLURAL:$1|सदस्य|सदस्य}}',
 'nrevisions' => '$1 {{PLURAL:$1|आवर्तन|आवर्तने}}',
@@ -2019,6 +2039,7 @@ Input:contenttype/subtype, e.g. <code>image/jpeg</code>.',
 'mostlinkedtemplates' => 'सर्वाधिक जोडलेले साचे',
 'mostcategories' => 'सर्वाधिक वर्गीकृत पाने',
 'mostimages' => 'सर्वाधिक जोडलेली चित्रे',
+'mostinterwikis' => 'सर्वाधिक आंतरविकि दुवे असणारी पाने',
 'mostrevisions' => 'सर्वाधिक बदललेले लेख',
 'prefixindex' => 'उपसर्ग असणाऱ्या लेखांची यादी',
 'prefixindex-namespace' => '($1 नामविश्व) हा  उपसर्ग असणारी सर्व पाने',
@@ -2087,6 +2108,7 @@ Input:contenttype/subtype, e.g. <code>image/jpeg</code>.',
 'allpagesprefix' => 'पुढील शब्दाने सुरू होणारी पाने दाखवा:',
 'allpagesbadtitle' => 'दिलेले शीर्षक चुकीचे किंवा आंतरभाषीय किंवा आंतरविकि शब्दाने सुरू होणारे होते. त्यात एक किंवा अधिक शीर्षकात न वापरता येणारी अक्षरे असावीत.',
 'allpages-bad-ns' => '{{SITENAME}}मध्ये "$1" हे नामविश्व नाही.',
+'allpages-hide-redirects' => 'पुनर्निर्देशने लपवा',
 
 # SpecialCachedPage
 'cachedspecial-refresh-now' => 'आखेरचे दृश्य',
@@ -2131,10 +2153,6 @@ Input:contenttype/subtype, e.g. <code>image/jpeg</code>.',
 'activeusers-hidesysops' => 'प्रचालक लपवा',
 'activeusers-noresult' => 'एकही सदस्य सापडला नाही.',
 
-# Special:Log/newusers
-'newuserlogpage' => 'नवीन सदस्यांची नोंद',
-'newuserlogpagetext' => 'ही नवीन सदस्यांची नोंद यादी आहे.',
-
 # Special:ListGroupRights
 'listgrouprights' => 'सदस्य गट अधिकार',
 'listgrouprights-summary' => 'खाली या विकिवर दिलेली सदस्य गटांची यादी त्यांच्या अधिकारांसकट दर्शविलेली आहे. प्रत्येकाच्या अधिकारांची अधिक माहिती [[{{MediaWiki:Listgrouprights-helppage}}|इथे]] दिलेली आहे.',
@@ -2157,6 +2175,7 @@ Input:contenttype/subtype, e.g. <code>image/jpeg</code>.',
 'mailnologin' => 'पाठविण्याचा पत्ता नाही',
 'mailnologintext' => 'इतर सदस्यांना विपत्र(ई-मेल) पाठवण्याकरिता तुम्ही [[Special:UserLogin|प्रवेश केलेला]] असणे आणि  प्रमाणित (ई-मेल) पत्ता तुमच्या [[Special:Preferences|पसंतीत]] नमुद असणे आवश्यक आहे.',
 'emailuser' => 'या सदस्याला ई-मेल पाठवा',
+'emailuser-title-target' => '{{GENDER:$1|सदस्याला}} विपत्र पाठवा',
 'emailuser-title-notarget' => 'विपत्र (ईमेल) उपयोगकर्ता',
 'emailpage' => 'विपत्र (ईमेल) उपयोगकर्ता',
 'emailpagetext' => 'जर या सदस्याने प्रमाणित विपत्र (ईमेल)पत्ता तीच्या अथवा त्याच्या सदस्य पसंतीत नमुद केला असेल,तर खालील सारणी तुम्हाला एक(च) संदेश पाठवेल.तुम्ही तुमच्या [[Special:Preferences|सदस्य पसंतीत]] नमुद केलेला विपत्र पत्ता "कडून" पत्त्यात येईल म्हणजे  प्राप्तकरता आपल्याला उत्तर देऊ शकेल.',
@@ -2228,6 +2247,11 @@ Input:contenttype/subtype, e.g. <code>image/jpeg</code>.',
 'enotif_mailer' => '{{SITENAME}} सूचना विपत्र',
 'enotif_reset' => 'सर्व पानास भेट दिल्याचे नमुद करा',
 'enotif_impersonal_salutation' => '{{SITENAME}} सदस्य',
+'enotif_subject_deleted' => '{{SITENAME}} पानाला $1 {{gender:$2|$2}} ने वगळले',
+'enotif_subject_created' => '{{SITENAME}} पान $1  {{gender:$2|$2}} ने तयार केले',
+'enotif_subject_moved' => '{{SITENAME}}पान $1  {{gender:$2|$2}} ने हलविले',
+'enotif_subject_restored' => '{{SITENAME}} पान $1  {{gender:$2|$2}} ने पुनर्स्थापित केले',
+'enotif_subject_changed' => '{{SITENAME}} पान $1  {{gender:$2|$2}} ने बदलले',
 'enotif_lastvisited' => 'तुमच्या शेवटच्या भेटीनंतरचे बदल बघणयासाठी पहा - $1.',
 'enotif_lastdiff' => 'हा बदल पहाण्याकरिता $1 पहा.',
 'enotif_anon_editor' => 'अनामिक उपयोगकर्ता $1',
@@ -2257,6 +2281,8 @@ $UNWATCHURL
 
 पुढील साहाय्य आणि प्रतिक्रिया:
 {{canonicalurl:{{MediaWiki:Helppage}}}}',
+'created' => 'तयार केले',
+'changed' => 'बदलले',
 
 # Delete
 'deletepage' => 'पान वगळा',
@@ -2294,6 +2320,8 @@ $UNWATCHURL
 'rollback' => 'बदल वेगात माघारी न्या',
 'rollback_short' => 'द्रुतमाघार',
 'rollbacklink' => 'द्रुतमाघार',
+'rollbacklinkcount' => 'उलटवा $1 {{PLURAL:$1|संपादन|संपादने}}',
+'rollbacklinkcount-morethan' => '$1 पेक्षा अधिक उलटवा {{PLURAL:$1|संपादन|संपादने}}',
 'rollbackfailed' => 'द्रूतमाघार फसली',
 'cantrollback' => 'जुन्या आवृत्तीकडे परतवता येत नाही; शेवटचा संपादक या पानाचा एकमात्र लेखक आहे.',
 'alreadyrolled' => '[[User:$2|$2]] ([[User talk:$2|Talk]] [[Special:Contributions/$2|{{int:contribslink}}]])चे शेवटाचे [[:$1]]वे संपादन माघारी परतवता येत नाही; पान आधीच कुणी माघारी परतवले आहे किंवा संपादीत केले आहे.
@@ -2320,6 +2348,8 @@ $UNWATCHURL
 'prot_1movedto2' => '"[[$1]]" हे पान "[[$2]]" मथळ्याखाली स्थानांतरित केले.',
 'protect-badnamespace-title' => 'असुरक्षणीय नामविश्व',
 'protect-badnamespace-text' => 'या नामविश्वातील पाने सुरक्षीत करता येत नाहीत',
+'protect-norestrictiontypes-text' => 'हे पान सुरक्षित होऊ शकत नाही कारण कोणताही सुरक्षापातळी प्रकार उपलब्ध नाही.',
+'protect-norestrictiontypes-title' => 'सुरक्षापातळी नसलेले पान',
 'protect-legend' => 'सुरक्षापातळीतील बदल निर्धारित करा',
 'protectcomment' => 'कारण:',
 'protectexpiry' => 'संपण्याचा कालावधी:',
@@ -2929,10 +2959,26 @@ $1',
 'pageinfo-header-basic' => 'मूलभूत माहिती',
 'pageinfo-header-edits' => 'संपादने',
 'pageinfo-header-restrictions' => 'पान सुरक्षा',
+'pageinfo-header-properties' => 'पानाची माहिती',
+'pageinfo-display-title' => 'दृश्य शीर्षक',
+'pageinfo-length' => 'पानाचा आकार (बाइट्समध्ये)',
+'pageinfo-language' => 'पानाच्या मजकूराची भाषा',
 'pageinfo-views' => 'अभिप्रायांची संख्या',
 'pageinfo-watchers' => 'पाहणाऱ्यांची संख्या',
+'pageinfo-redirects-name' => 'या पानाकडील पुनर्निर्देशने',
+'pageinfo-firsttime' => 'पान निर्मितीचा दिनांक',
+'pageinfo-lastuser' => 'अलीकडील संपादक',
+'pageinfo-lasttime' => 'अलीकडिल संपादनाचा दिनांक',
 'pageinfo-edits' => 'संपादनांची संख्या',
 'pageinfo-authors' => 'वेगळ्या लेखकांची संख्या',
+'pageinfo-toolboxlink' => 'पानाची माहिती',
+'pageinfo-redirectsto-info' => 'माहिती',
+'pageinfo-contentpage-yes' => 'होय',
+'pageinfo-protect-cascading-yes' => 'होय',
+'pageinfo-category-info' => 'वर्ग माहिती',
+'pageinfo-category-pages' => 'पानांची संख्या',
+'pageinfo-category-subcats' => 'उपवर्गांची संख्या',
+'pageinfo-category-files' => 'संचिकांची संख्या',
 
 # Skin names
 'skinname-standard' => 'अभिजात',
@@ -2986,6 +3032,7 @@ $1',
 'file-info-size-pages' => '$1 × $2 पिक्सेल, संचिका आकारमान: $3, एमआयएमई प्रकार: $4, $5 {{PLURAL:$5|पान|पाने}}',
 'file-nohires' => 'यापेक्षा मोठे चित्र उपलब्ध नाही.',
 'svg-long-desc' => 'SVG संचिका, साधारणपणे $1 × $2 pixels, संचिकेचा आकार: $3',
+'svg-long-error' => 'अयोग्य SVG प्रकारातील संचिका: $1',
 'show-big-image' => 'संपूर्ण रिजोल्यूशन',
 'show-big-image-preview' => 'या झलकेचा आकार: $1. पिक्सेल',
 'show-big-image-other' => 'इतर {{PLURAL:$2|resolution|resolutions}}: $1.',
@@ -3017,7 +3064,10 @@ $1',
 'minutes' => '{{PLURAL:$1|$1 मिनिट|$1 मिनिट}}',
 'hours' => '{{PLURAL:$1|$1 तास|$1 तास}}',
 'days' => '{{PLURAL:$1|$1 दिवस|$1 दिवस}}',
+'months' => '{{PLURAL:$1|$1 महिना|$1 महिने}}',
+'years' => '{{PLURAL:$1|$1 वर्ष|$1 वर्षे}}',
 'ago' => '$1 पूर्वी',
+'just-now' => 'लगेच',
 
 # Bad image list
 'bad_image_list' => 'रूपरेषा खालीलप्रमाणे आहे:
@@ -3756,7 +3806,8 @@ $5
 'logentry-newusers-create' => 'एक सदस्यखाते $1 तयार केले',
 'logentry-newusers-create2' => '$1  ने  सदस्य खाते $3  निर्मित केले  आहे.',
 'logentry-newusers-autocreate' => '$1  खाते स्वयमेव निर्मित झाले आहे.',
-'newuserlog-byemail' => 'परवलीचा शब्द ई-मेल मार्फत पाठविलेला आहे',
+'logentry-rights-rights-legacy' => '$1 ने $3 चे ग्रुप सदस्यत्व बदलले',
+'rightsnone' => '(काहीही नाही)',
 
 # Feedback
 'feedback-bugornote' => 'जर आपण तांत्रिक प्रश्न  विस्तृतपणे मांडण्यास तयार असाल तर कृपया ($1 गणकदोष वृतांत) पाठवा. नपेक्षा, खाली देण्यात आलेले सोपे आवेदनपत्र वापरा. आपली टिप्पणी "[ $3, $2]" या पानास आपले सदस्यनाव व आपण कोणता ब्राउजर वापरता यासह जोडण्यात येईल.',
index f67d234..cc1a869 100644 (file)
@@ -326,6 +326,7 @@ $messages = array(
 'newwindow' => '(dibuka di tetingkap baru)',
 'cancel' => 'Batalkan',
 'moredotdotdot' => 'Lagi...',
+'morenotlisted' => 'Lain-lain yang tidak tersenarai...',
 'mypage' => 'Halaman',
 'mytalk' => 'Perbualan',
 'anontalk' => 'Perbualan bagi IP ini',
@@ -628,7 +629,7 @@ Jangan lupa untuk mengubah [[Special:Preferences|keutamaan anda di {{SITENAME}}]
 'gotaccount' => "Sudah mempunyai akaun? '''$1'''.",
 'gotaccountlink' => 'Log masuk',
 'userlogin-resetlink' => 'Lupa nama pengguna/kata laluan anda?',
-'createaccountmail' => 'melalui e-mel',
+'createaccountmail' => 'Gunakan kata laluan rawak yang sementara dan hantarnya ke alamat e-mel yang dinyatakan di bawah',
 'createaccountreason' => 'Sebab:',
 'badretype' => 'Sila ulangi kata laluan dengan betul.',
 'userexists' => 'Nama pengguna yang diisikan telah pun digunakan.
@@ -699,6 +700,7 @@ Sila tunggu sebentar dan cuba lagi.',
 # E-mail sending
 'php-mail-error-unknown' => 'Ralat tak diketahui dalam fungsi mail() PHP',
 'user-mail-no-addy' => 'E-eml cuba dihantar tanpa alamat e-mel',
+'user-mail-no-body' => 'Anda telah cuba menghantar e-mel dengan isi yang kosong atau terlampau ringkas.',
 
 # Change password dialog
 'resetpass' => 'Tukar kata laluan',
@@ -754,6 +756,7 @@ Kata laluan sementara: $2',
 'changeemail-oldemail' => 'Alamat e-mel sekarang:',
 'changeemail-newemail' => 'Alamat e-mel baru:',
 'changeemail-none' => '(tiada)',
+'changeemail-password' => 'Kata laluan anda di {{SITENAME}}:',
 'changeemail-submit' => 'Tukar E-mel',
 'changeemail-cancel' => 'Batalkan',
 
@@ -911,10 +914,10 @@ disalin daripada domain awam atau mana-mana sumber bebas lain (lihat $1 untuk bu
 '''JANGAN KIRIM KARYA HAK CIPTA ORANG LAIN TANPA KEBENARAN!'''",
 'longpageerror' => "'''Ralat: Teks yang anda serahkan itu panjangnya {{PLURAL:$1|1|$1}} kilobait, iaitu lebih panjang daripada had maksimum {{PLURAL:$2|1|$2}} kilobait.'''
 Oleh itu, ia tidak boleh disimpan.",
-'readonlywarning' => "'''AMARAN: Pangkalan data telah dikunci untuk penyenggaraan. Justeru, anda tidak boleh menyimpan suntingan anda pada masa sekarang.
-Anda boleh menyalin teks anda ke dalam komputer anda terlebih dahulu dan simpan teks tersebut di sini pada masa akan datang.'''
+'readonlywarning' => "'''Amaran: Pangkalan data ini dikunci untuk tujuan penyelenggaraan , maka anda tidak akan dapat menyimpan suntingan anda buat sekarang.'''
+Anda boleh menyalin tampal teks anda pada fail teks dan menyimpannya untuk lain kali.
 
-Yang berikut ialah penjelasan yang diberikan: $1",
+Penyelia yang menguncinya memberikan penjelasan ini: $1",
 'protectedpagewarning' => "'''Amaran: Laman ini telah dikunci supaya hanya mereka yang mempunyai keistimewaan penyelia boleh menyuntingnya.'''
 Masukan log terakhir ditunjukkan di bawah untuk rujukan:",
 'semiprotectedpagewarning' => "'''Nota:''' Laman ini telah dikunci agar hanya pengguna berdaftar sahaja boleh menyuntingnya.
@@ -930,7 +933,6 @@ Masukan log terakhir ditunjukkan di bawah untuk rujukan:",
 'hiddencategories' => 'Laman ini terdapat dalam $1 kategori tersembunyi:',
 'edittools' => '<!-- Teks di sini akan ditunjukkan bawah borang sunting dan muat naik. -->',
 'edittools-upload' => '-',
-'nocreatetitle' => 'Penciptaan laman dihadkan',
 'nocreatetext' => 'Penciptaan laman baru dihadkan pada {{SITENAME}}.
 Anda boleh berundur dan menyunting laman yang sedia ada, atau [[Special:UserLogin|log masuk]].',
 'nocreate-loggedin' => 'Anda tidak mempunyai keizinan untuk mencipta laman baru.',
@@ -1479,15 +1481,13 @@ Tindakan ini tidak boleh dibatalkan.',
 'right-sendemail' => 'Mengirim e-mel kepada pengguna-pengguna lain',
 'right-passwordreset' => 'Lihat e-mel set semula kata laluan',
 
+# Special:Log/newusers
+'newuserlogpage' => 'Log akaun baru',
+'newuserlogpagetext' => 'Yang berikut ialah log penciptaan pengguna.',
+
 # User rights log
 'rightslog' => 'Log hak pengguna',
 'rightslogtext' => 'Ini ialah log perubahan terhadap hak pengguna.',
-'rightslogentry' => 'menukar keahlian kumpulan bagi $1 daripada $2 kepada $3',
-'rightslogentry-autopromote' => 'dinaik pangkat secara automatik dari $2 ke $3',
-'logentry-rights-rights' => '$1 menukar keahlian kumpulan untuk $3 dari $4 ke $5',
-'logentry-rights-rights-legacy' => '$1 menukar keahlian kumpulan untuk $3',
-'logentry-rights-autopromote' => '$1 dinaik pangkat secara automatik dari $4 ke $5',
-'rightsnone' => '(tiada)',
 
 # Associated actions - in the sentence "You do not have permission to X"
 'action-read' => 'membaca laman ini',
@@ -1932,7 +1932,7 @@ Mungkin anda ingin menyunting keterangan pada [$2 laman penerangan failnya] di s
 
 # Statistics
 'statistics' => 'Statistik',
-'statistics-header-pages' => 'Statistik laman',
+'statistics-header-pages' => 'Statistik halaman',
 'statistics-header-edits' => 'Statistik suntingan',
 'statistics-header-views' => 'Statistik pandangan',
 'statistics-header-users' => 'Statistik pengguna',
@@ -2108,7 +2108,7 @@ Lihat juga [[Special:WantedCategories|kategori yang dikehendaki]].',
 'linksearch-ok' => 'Cari',
 'linksearch-text' => 'Kad bebas seperti "*.wikipedia.org" dibenarkan.<br />
 Memerlukan sekurang-kurangnya satu domain peringkat tinggi, cth. "*.org".<br />
-Protokol yang disokong: <code>$1</code> (menjadi http:// jika tiada protokol dinyatakan).',
+{{PLURAL:$2|Protokol|Protokol-protokol}} yang disokong: <code>$1</code> (menjadi http:// jika tiada protokol dinyatakan).',
 'linksearch-line' => '$1 dipaut dari $2',
 'linksearch-error' => 'Kad bebas hanya boleh digunakan pada permulaan nama hos.',
 
@@ -2121,16 +2121,12 @@ Protokol yang disokong: <code>$1</code> (menjadi http:// jika tiada protokol din
 # Special:ActiveUsers
 'activeusers' => 'Senarai pengguna aktif',
 'activeusers-intro' => 'Yang berikut ialah senarai pengguna yang bergiat sejak {{PLURAL:$1|semalam|$1 hari lalu}}.',
-'activeusers-count' => '$1 {{PLURAL:$1|suntingan|suntingan}} sejak {{PLURAL:$3|semalam|$3 hari lalu}}',
+'activeusers-count' => '$1 tindakan sejak {{PLURAL:$3|semalam|$3 hari lalu}}',
 'activeusers-from' => 'Tunjukkan pengguna bermula pada:',
 'activeusers-hidebots' => 'Sorokkan bot',
 'activeusers-hidesysops' => 'Sorokkan pentadbir',
 'activeusers-noresult' => 'Tiada pengguna dijumpai.',
 
-# Special:Log/newusers
-'newuserlogpage' => 'Log akaun baru',
-'newuserlogpagetext' => 'Yang berikut ialah log penciptaan pengguna.',
-
 # Special:ListGroupRights
 'listgrouprights' => 'Hak kumpulan pengguna',
 'listgrouprights-summary' => 'Yang berikut ialah senarai kumpulan pengguna yang ditubuhkan di wiki ini dengan hak-hak masing-masing.
@@ -2199,12 +2195,8 @@ Alamat e-mel yang ditetapkan dalam [[Special:Preferences|keutamaan anda]] akan d
 'watchnologin' => 'Belum log masuk',
 'watchnologintext' => 'Anda mesti [[Special:UserLogin|log masuk]] terlebih dahulu untuk mengubah senarai pantau.',
 'addwatch' => 'Tambahkan ke senarai pantau',
-'addedwatchtext' => "Laman \"[[:\$1]]\" telah ditambahkan ke dalam [[Special:Watchlist|senarai pantau]] anda.
-Semua perubahan bagi laman tersebut dan laman perbincangannya akan disenaraikan di sana,
-dan tajuk laman tersebut juga akan ditonjolkan dalam '''teks tebal''' di [[Special:RecentChanges|senarai perubahan terkini]]
-untuk memudahkan anda.
-
-Jika anda mahu membuang laman tersebut daripada senarai pantau, klik \"Nyahpantau\" pada bar sisi.",
+'addedwatchtext' => 'Halaman "[[:$1]]" telah dimasukkan ke dalam [[Special:Watchlist|senarai pantau anda]].
+Perubahan-perubahan pada halaman ini dan halaman perbualannya pada masa akan datang akan tersenarai di dalam senarai itu.',
 'removewatch' => 'Buang dari senarai pantau',
 'removedwatchtext' => 'Laman "[[:$1]]" telah dibuang daripada [[Special:Watchlist|senarai pantau anda]].',
 'watch' => 'Pantau',
@@ -2238,7 +2230,7 @@ Jika anda mahu membuang laman tersebut daripada senarai pantau, klik \"Nyahpanta
 'enotif_subject_moved' => 'Halaman $1 di {{SITENAME}} telah dipindahkan oleh {{gender:$2|$2}}',
 'enotif_subject_restored' => 'Halaman $1 di {{SITENAME}} telah dipulihkan oleh {{gender:$2|$2}}',
 'enotif_subject_changed' => 'Halaman $1 di {{SITENAME}} telah disunting oleh {{gender:$2|$2}}',
-'enotif_body_intro_deleted' => 'Halaman $1 di {{SITENAME}} telah dihapuskan oleh {{gender:$2|$2}} pada $PAGEEDITDATE, sila rujuk $3 untuk semakan terkini.',
+'enotif_body_intro_deleted' => 'Halaman $1 di {{SITENAME}} telah dihapuskan oleh {{gender:$2|$2}} pada $PAGEEDITDATE, sila rujuk $3.',
 'enotif_body_intro_created' => 'Halaman $1 di {{SITENAME}} telah diwujudkan oleh {{gender:$2|$2}} pada $PAGEEDITDATE, sila rujuk $3 untuk semakan terkini.',
 'enotif_body_intro_moved' => 'Halaman $1 di {{SITENAME}} telah dipindahkan oleh {{gender:$2|$2}} pada $PAGEEDITDATE, sila rujuk $3 untuk semakan terkini.',
 'enotif_body_intro_restored' => 'Halaman $1 di {{SITENAME}} telah dipulihkan oleh {{gender:$2|$2}} pada $PAGEEDITDATE, sila rujuk $3 untuk semakan terkini.',
@@ -2272,6 +2264,8 @@ $UNWATCHURL
 
 Maklum balas dan bantuan selanjutnya:
 {{canonicalurl:{{MediaWiki:Helppage}}}}',
+'created' => 'dicipta',
+'changed' => 'diubah',
 
 # Delete
 'deletepage' => 'Hapus laman',
@@ -2340,6 +2334,8 @@ Lihat [[Special:ProtectedPages|senarai laman terlindung]] untuk senarai laman-la
 'prot_1movedto2' => '[[$1]] dipindahkan ke [[$2]]',
 'protect-badnamespace-title' => 'Ruang nama yang tidak boleh dilindungi',
 'protect-badnamespace-text' => 'Laman-laman dalam ruang nama ini tidak boleh dilindungi.',
+'protect-norestrictiontypes-text' => 'Halaman ini tidak boleh dilindungi kerana tiadanya jenis-jenis sekatan yang disediakan.',
+'protect-norestrictiontypes-title' => 'Halaman tak terlindung',
 'protect-legend' => 'Sahkan perlindungan',
 'protectcomment' => 'Sebab:',
 'protectexpiry' => 'Sehingga:',
@@ -2355,9 +2351,9 @@ Ini adalah tetapan semasa bagi laman '''$1''':",
 Ini adalah tetapan semasa bagi laman '''$1''':",
 'protect-cascadeon' => 'Laman ini dilindungi kerana ia terkandung dalam {{PLURAL:$1|laman|laman-laman}} berikut, yang dilindungi secara melata. Anda boleh menukar peringkat perlindunan laman ini, akan tetapi ia tidak akan menjejaskan perlindungan melata tersebut.',
 'protect-default' => 'Benarkan semua pengguna',
-'protect-fallback' => 'Perlukan keizinan "$1"',
-'protect-level-autoconfirmed' => 'Sekat pengguna baru dan pengguna tidak berdaftar',
-'protect-level-sysop' => 'Pentadbir sahaja',
+'protect-fallback' => 'Benarkan pengguna yang berizin "$1" sahaja',
+'protect-level-autoconfirmed' => 'Benarkan pengguna yang diautosahkan sahaja',
+'protect-level-sysop' => 'Benarkan pentadbir sahaja',
 'protect-summary-cascade' => 'melata',
 'protect-expiring' => 'sehingga $1 (UTC)',
 'protect-expiring-local' => 'luput $1',
@@ -2656,13 +2652,17 @@ sahkan bahawa anda betul-betul mahu melakukan tindakan ini.',
 # Move page
 'move-page' => 'Pindahkan $1',
 'move-page-legend' => 'Pindahkan laman',
-'movepagetext' => "Gunakan borang di bawah untuk menukar nama laman dan memindahkan semua maklumat sejarahnya ke nama baru. Tajuk yang lama akan dijadikan lencongan ke tajuk yang baru. Anda juga boleh mengemaskinikan semua lencongan yang menuju ke tajuk asal supaya menuju ke tajuk baru. Sebaliknya, anda boleh menyemak sekiranya terdapat [[Special:DoubleRedirects|lencongan berganda]] atau [[Special:BrokenRedirects|lencongan rosak]]. Anda bertanggungjawab memastikan semua pautan bersambung ke laman yang sepatutnya.
+'movepagetext' => "Menggunakan borang di bawah akan menukar nama halaman dan memindahkan segala sejarahnya kepada nama baru itu.
+Tajuk yang lama akan menjadi halaman lencongan kepada tajuk baru.
+Anda boleh mengemaskinikan lencongan yang menghala ke tajuk asal secara automatik.
+Jika anda memilih untuk tidak berbuat demikian, tolong semak untuk mencari lencongan [[Special:DoubleRedirects|berganda]] atau [[Special:BrokenRedirects|terputus]].
+Anda dipertanggungjawabkan untuk memastikan agar semua pautan tetap menghala ke tempat yang sepatutnya.
 
-Sila ambil perhatian bahawa laman tersebut '''tidak''' akan dipindahkan sekiranya laman dengan tajuk yang baru tadi telah wujud, melainkan apabila
-laman tersebut kosong atau merupakan laman lencongan dan tidak mempunyai sejarah penyuntingan. Ini bermakna anda boleh menukar semula nama sesebuah
-laman kepada nama yang asal jika anda telah melakukan kesilapan, dan anda tidak boleh menulis ganti laman yang telah wujud.
+Sila ingat bahasa halaman '''tidak''' akan dipindahkan jika tajuk barunya sudah diambil oleh halaman yang sedia ada, melainkan ia merupakan lencongan tanpa sebarang sejarah suntingan.
+Ertinya, anda boleh menukar kembali nama halaman ke nama yang sebelumnya jika anda terbuat silap, tetapi anda tidak boleh menulis ganti halaman yang sedia ada.
 
-'''AMARAN!''' Tindakan ini boleh menjadi perubahan yang tidak dijangka dan drastik bagi laman popular. Oleh itu, sila pastikan anda faham akibat yang mungkin timbul sebelum meneruskannya.",
+'''Amaran!'''
+Tindakan ini boleh mendatangkan perubahan yang drastik dan tidak dijangka untuk halaman yang popular; sila pasti bahawa anda memahami akibatnya sebelum meneruskan.",
 'movepagetext-noredirectfixer' => "Borang di bawah akan menamakan semula sesebuah laman, memindahkan kesemua sejarahnya ke nama baru.
 Nama lamanya akan menjadi sebuah laman lencongan ke laman baru tadi.
 Pastikan [[Special:DoubleRedirects|lencongan berganda]] atau [[Special:BrokenRedirects|rosak]] sudah diperiksa.
@@ -2838,6 +2838,7 @@ Simpan dalam komputer anda dan muat naiknya di sini.',
 'import-error-interwiki' => 'Laman "$1" tidak diimport kerana namanya ditempah untuk pemautan luaran (antara wiki).',
 'import-error-special' => 'Laman "$1" tidak diimport kerana ia tergolong dalam ruang nama khas yang tidak membenarkan laman.',
 'import-error-invalid' => 'Laman "$1" tidak diimport kerana namanya tidak sah.',
+'import-error-unserialize' => 'Semakan $2 dari halaman "$1" tidak dapat dinyahsirikan. Semakan ini dilaporkan telah menggunakan model kandungan $3 yang disirikan sebagai $4.',
 'import-options-wrong' => '{{PLURAL:$2|Pilihan|Pilihan-pilihan}} salah: <nowiki>$1</nowiki>',
 'import-rootpage-invalid' => 'Halaman akar yang dinyatakan adalah tidak sah.',
 'import-rootpage-nosubpage' => 'Ruang nama "$1" halaman akar tidak membenarkan subhalaman.',
@@ -2996,6 +2997,7 @@ Simpan dalam komputer anda dan muat naiknya di sini.',
 'pageinfo-magic-words' => 'Kata sakti ($1)',
 'pageinfo-hidden-categories' => 'Kategori tersembunyi ($1)',
 'pageinfo-templates' => 'Templat tertransklusi ($1)',
+'pageinfo-transclusions' => '{{PLURAL:$1|Halaman|Halaman-halaman}} yang tertransklusi pada ($1)',
 'pageinfo-toolboxlink' => 'Maklumat halaman',
 'pageinfo-redirectsto' => 'Melencong ke',
 'pageinfo-redirectsto-info' => 'maklumat',
@@ -3004,6 +3006,10 @@ Simpan dalam komputer anda dan muat naiknya di sini.',
 'pageinfo-protect-cascading' => 'Perlindungan sedang melata dari sini',
 'pageinfo-protect-cascading-yes' => 'Ya',
 'pageinfo-protect-cascading-from' => 'Perlindungan sedang melata dari',
+'pageinfo-category-info' => 'Keterangan kategori',
+'pageinfo-category-pages' => 'Bilangan halaman',
+'pageinfo-category-subcats' => 'Bilangan subkategori',
+'pageinfo-category-files' => 'Bilangan fail',
 
 # Skin names
 'skinname-standard' => 'Klasik',
@@ -3062,6 +3068,7 @@ Dengan menjalankannya, komputer anda mungkin akan terjejas.",
 'file-nohires' => 'Tiada leraian lebih besar.',
 'svg-long-desc' => 'Fail SVG, ukuran dasar $1 × $2 piksel, saiz fail: $3',
 'svg-long-desc-animated' => 'Fail SVG animasi, ukuran dasar $1 × $2 piksel, saiz fail: $3',
+'svg-long-error' => 'Fail SVG tidak sah: $1',
 'show-big-image' => 'Leraian penuh',
 'show-big-image-preview' => 'Saiz pralihat ini: $1.',
 'show-big-image-other' => '{{PLURAL:$2|Leraian|Leraian-leraian}} lain: $1.',
@@ -3094,6 +3101,8 @@ Dengan menjalankannya, komputer anda mungkin akan terjejas.",
 'minutes' => '$1 minit',
 'hours' => '$1 jam',
 'days' => '$1 hari',
+'months' => '$1 bulan',
+'years' => '$1 tahun',
 'ago' => '$1 yang lalu',
 'just-now' => 'tadi',
 
@@ -3757,7 +3766,7 @@ Imej ditunjuk dalam leraian penuh, jenis fail yang lain dibuka dengan atur cara
 'specialpages-group-highuse' => 'Laman popular',
 'specialpages-group-pages' => 'Senarai laman',
 'specialpages-group-pagetools' => 'Alatan laman',
-'specialpages-group-wiki' => 'Data dan alatan wiki',
+'specialpages-group-wiki' => 'Data dan peralatan',
 'specialpages-group-redirects' => 'Laman khas yang melencong',
 'specialpages-group-spam' => 'Alatan spam',
 
@@ -3854,8 +3863,12 @@ Imej ditunjuk dalam leraian penuh, jenis fail yang lain dibuka dengan atur cara
 'logentry-newusers-newusers' => 'Akaun pengguna $1 dibuka',
 'logentry-newusers-create' => 'Akaun pengguna $1 dibuka',
 'logentry-newusers-create2' => 'Akaun pengguna $3 dibuka oleh $1',
+'logentry-newusers-byemail' => 'Akaun pengguna $3 dibuka oleh $1 dan kata laluannya dihantar melalui e-mel',
 'logentry-newusers-autocreate' => 'Akaun $1 dibuka secara automatik',
-'newuserlog-byemail' => 'kata laluan dihantar melalui e-mel',
+'logentry-rights-rights' => '$1 menukar keahlian kumpulan untuk $3 dari $4 ke $5',
+'logentry-rights-rights-legacy' => '$1 menukar keahlian kumpulan untuk $3',
+'logentry-rights-autopromote' => '$1 dinaik pangkat secara automatik dari $4 ke $5',
+'rightsnone' => '(tiada)',
 
 # Feedback
 'feedback-bugornote' => 'Jika anda bersedia untuk menerangkan masalah teknikal secara terperinci, sila [$1 laporkan pepijat]. 
@@ -3909,6 +3922,7 @@ Ataupun, anda boleh menggunakan borang yang mudah di bawah. Ulasan anda akan dic
 'api-error-ok-but-empty' => 'Ralat dalaman: tiada gerak balas dari pelayan.',
 'api-error-overwrite' => 'Menulis ganti fail yang telah wujud adalah tidak dibenarkan.',
 'api-error-stashfailed' => 'Ralat dalaman: pelayan tidak dapat menyimpan fail sementara.',
+'api-error-publishfailed' => 'Ralat dalaman: Pelayan tidak dapat menerbitkan fail sementara.',
 'api-error-timeout' => 'Pelayan tidak bergerak balas dalam tempoh yang diharapkan.',
 'api-error-unclassified' => 'Berlakunya ralat yang tidak diketahui',
 'api-error-unknown-code' => 'Ralat tidak diketahui: "$1"',
@@ -3929,6 +3943,4 @@ Ataupun, anda boleh menggunakan borang yang mudah di bawah. Ulasan anda akan dic
 'duration-centuries' => '$1 abad',
 'duration-millennia' => '$1 alaf',
 
-# Unknown messages
-'svg-long-error' => 'Fail SVG tidak sah: $1',
 );
index 2463081..1294e51 100644 (file)
@@ -289,13 +289,13 @@ $messages = array(
 'tog-rememberpassword' => "Ftakar il-login tiegħi fuq dan il-browżer (għal massimu ta' {{PLURAL:$1|ġurnata|$1 ġurnata}})",
 'tog-watchcreations' => "Żid il-paġni li noħloq u l-fajls li ntella' fil-lista ta' osservazzjoni tiegħi",
 'tog-watchdefault' => "Żid il-paġni u l-fajls li nimmodifika fil-lista ta' osservazzjoni personali",
-'tog-watchmoves' => "Żid il-paġni li mmexxi fil-lista ta' osservazzjoni tiegħi",
-'tog-watchdeletion' => "Żid il-paġni li nħassar mal-lista ta' osservazzjoni tiegħi",
+'tog-watchmoves' => "Żid il-paġni u fajls li mmexxi fil-lista ta' osservazzjoni tiegħi",
+'tog-watchdeletion' => "Żid il-paġni u fajls li nħassar mal-lista ta' osservazzjoni tiegħi",
 'tog-minordefault' => 'Immarka awtomatikament kull modifika bħala waħda minuri',
 'tog-previewontop' => 'Uri dehra proviżorja tal-paġna fuq il-kaxxa tal-immodifikar',
 'tog-previewonfirst' => 'Uri dehra proviżorja mal-ewwel modifika',
 'tog-nocache' => 'Iddiżattiva l-cache tal-paġni tal-browser',
-'tog-enotifwatchlistpages' => "Ibgħatli ittra-e kull meta sseħħ modifika fuq paġna li tinsab fil-lista ta' osservazzjoni tiegħi",
+'tog-enotifwatchlistpages' => "Ibgħatli ittre kull meta sseħħ modifika fuq paġna jew fajl li jinsab fil-lista ta' osservazzjoni tiegħi",
 'tog-enotifusertalkpages' => "Ibgħatli ittra-e kull meta l-paġna ta' diskussjoni tiegħi tiġi modifikata",
 'tog-enotifminoredits' => 'Ibgħatli wkoll ittra-e għall-modifiki minuri fuq paġni u fajls',
 'tog-enotifrevealaddr' => "Ikxef l-indirizz tal-posta elettronika tiegħi fil-messaġġi ta' avviż",
@@ -407,8 +407,8 @@ $messages = array(
 'newwindow' => "(tinfetaħ f'tieqa ġdida)",
 'cancel' => 'Annulla',
 'moredotdotdot' => 'Aktar...',
-'mypage' => 'Il-paġna tiegħi',
-'mytalk' => 'diskussjonijiet tiegħi',
+'mypage' => 'Paġna',
+'mytalk' => 'Diskussjoni',
 'anontalk' => 'Diskussjoni għal dan l-IP',
 'navigation' => 'Navigazzjoni',
 'and' => '&#32;u',
@@ -440,6 +440,7 @@ $messages = array(
 'namespaces' => 'Spazji tal-isem',
 'variants' => 'Varjanti',
 
+'navigation-heading' => "Menu ta' navigazzjoni",
 'errorpagetitle' => 'Problema',
 'returnto' => "Erġa' lura lejn $1.",
 'tagline' => 'Minn {{SITENAME}}',
@@ -907,6 +908,10 @@ Jekk int utent anonimu u tħoss li qiegħed tirċievi kummenti irrelevanti jew l
 'noarticletext' => "Bħalissa m'hemm l-ebda test f'din il-paġna.
 Inti tista' [[Special:Search/{{PAGENAME}}|tfittex it-titlu ta' din il-paġna]] f'paġni oħra, jew <span class=\"plainlinks\">[{{fullurl:{{#Special:Log}}|page={{FULLPAGENAMEE}}}} tfittex ir-reġistri relatati], jew [{{fullurl:{{FULLPAGENAME}}|action=edit}} timmodifika din il-paġna]</span>.",
 'noarticletext-nopermission' => "Bħalissa m'hemm l-ebda test f'din il-paġna. Inti tista' [[Special:Search/{{PAGENAME}}|tfittex għal dan it-titlu tal-paġna]] f'paġni oħra, jew <span class=\"plainlinks\">[{{fullurl:{{#Special:Log}}|page={{FULLPAGENAMEE}}}} fittex ir-reġistri relatati]</span>.",
+'missing-revision' => 'Ir-reviżjoni #$1 tal-paġna bl-isem "{{PAGENAME}}" ma teżistix.
+
+Dan ħafna drabi jiġri minħabba li tkun segwejt ħolqa lejn paġna mħassra, f\'kronoloġija li mhix aġġornata.
+Id-detallji tista\' ssibhom fir-[{{fullurl:{{#Special:Log}}/delete|page={{FULLPAGENAMEE}}}} reġistru tat-tħassir].',
 'userpage-userdoesnotexist' => 'Il-kont tal-utent "<nowiki>$1</nowiki>" mhux reġistrat.
 Jekk jogħġbok, ara jekk verament tridx toħloq/timodifika din il-paġna.',
 'userpage-userdoesnotexist-view' => 'Il-kont tal-utent "$1" mhuwiex reġistrat.',
@@ -916,7 +921,6 @@ L-aħħar daħla fir-reġistru tal-imblokki hi mogħtiha hawn taħt għal refere
 * '''Firefox / Safari:''' żomm il-buttuna ''Shift'' waqt li tagħfas fuq ''Reload'', jew agħfas ''Ctrl-F5'' jew ''Ctrl-R'' (''⌘-R'' fuq Mac)
 * '''Google Chrome:''' agħfas ''Ctrl-Shift-R'' (''⌘-Shift-R'' fuq Mac)
 * '''Internet Explorer:''' żomm il-buttuna ''Ctrl'' waqt li tagħfas ''Refresh'', jew agħfas ''Ctrl-F5''
-* '''Konqueror:''' agħfas ''Reload'' jew ''F5''
 * '''Opera:''' ħassar il-cache fuq ''Tools → Preferences''",
 'usercssyoucanpreview' => "'''Suġġeriment:''' Uża l-buttuna \"{{int:showpreview}}\" sabiex tipprova s-CSS il-ġdid tiegħek qabel ma ssalvah.",
 'userjsyoucanpreview' => "'''Suġġeriment:''' Uża l-buttuna \"{{int:showpreview}}\" sabiex tipprova l-JavaScript il-ġdid tiegħek qabel ma ssalvah.",
@@ -930,7 +934,7 @@ Ftakar li l-paġni .css u .js personalizzati għandhom l-ewwel ittra tat-titlu 
 'note' => "'''Nota:'''",
 'previewnote' => "'''Ftakar li din hija biss dehra proviżorja.'''
 It-tibdiliet tiegħek għadhom ma ġewx salvati!",
-'continue-editing' => 'Kompli l-modifika',
+'continue-editing' => 'Mur fil-kaxxa tal-editjar',
 'previewconflict' => "Din il-previżjoni turi l-kliem li jinsab fiż-żona ta' modifika superjuri u turi kif tidher kieku l-paġna kella tiġi modifikata.",
 'session_fail_preview' => "'''Jiddispjaċina imma l-modifika tiegħek ma setgħetx tiġi pproċessata minħabba li ntilfet l-informazzjoni tas-sessjoni.
 Jekk jogħġbok, erġa' pprova. Jekk xorta tibqa' ma taħdimx, ipprova [[Special:UserLogout|oħroġ]] u erġa' idħol.'''",
@@ -969,7 +973,7 @@ Jekk inti tixtieq li l-kitba tiegħek ma tiġiex modifikata jew mqassma, jekk jo
 Inti qiegħed ukoll qiegħed twiegħed li ktibt dan ix-xogħol int, jew ġibtu minn dominazzjoni pubblika jew resorsi b'xejn simili. (ara  $1 għal aktar informazzjoni) <br />
 <br />
 '''TAGĦMILX MODIFIKI LI JINKLUDU XOGĦOL TA' ĦADDIEĦOR BLA PERMESS!'''",
-'longpageerror' => "'''PROBLEMA: Il-Modifika li għamilt hija twila $1 ''kilobyte'', li hija aktar mill-massimu ta' $2 ''kilobyte''. Il-Modifiki ma jistgħux jiġu salvati.'''",
+'longpageerror' => "'''PROBLEMA: Il-modifika li għamilt hija twila {{PLURAL:$1|kilobyte waħda|$1 kilobytes}}, li hija iktar mill-massimu ta' {{PLURAL:$1|kilobyte waħda|$2 kilobytes}}.''' Il-modifika ma tistax tiġi salvata.",
 'readonlywarning' => "'''TWISSIJA: Id-databażi ġiet imblukkata għall-manutenzjoni, u għaldaqstant m'huwiex possibbli li ssalva l-modifiki tiegħek dal-ħin. Biex ma titlifhomx, għalissa salva xogħlok ġo fajl u ġaladarba terġa' tinfetaħ id-databażi, ikkopja kollox. Grazzi.'''
 
 L-amministratur li mblokkaha offra din ir-raġuni: $1",
@@ -986,7 +990,6 @@ L-aħħar daħla fir-reġistru hija disponibbli hawn taħt għar-referenza:",
 'template-semiprotected' => '(semi-protetta)',
 'hiddencategories' => "Din il-paġna hija membru ta' {{PLURAL:$1|1 kategorija moħbija|$1 kategoriji moħbija}}:",
 'edittools' => '<!-- Kliem hawnhekk jidher taħt l-formuli tal-modifika u postjar. -->',
-'nocreatetitle' => 'Il-ħolqien tal-paġna ġie miżmum',
 'nocreatetext' => "{{SITENAME}} limitat l-abbilitá tal-ħolqien ta' paġni ġodda.
 Tista' tmur lura u tagħmel modifiki ta' paġni eżistenti, inkella [[Special:UserLogin|idħol jew oħloq kont ġdid]].",
 'nocreate-loggedin' => "M'għandekx permess li toħloq paġni ġodda.",
@@ -1010,6 +1013,12 @@ Jidher li din ġiet imħassra.',
 'edit-already-exists' => 'Ma tistax tinħoloq din il-paġna.
 Din teżisti diġà.',
 
+# Content models
+'content-model-wikitext' => 'test tal-wiki',
+'content-model-text' => 'test normali',
+'content-model-javascript' => 'JavaScript',
+'content-model-css' => 'CSS',
+
 # Parser/template warnings
 'expensive-parserfunction-warning' => "'''Twissija:''' Din il-paġna għandha ħafna sejħiet għall-funzjonijiet parser.
 
@@ -1284,7 +1293,7 @@ Innota però li l-werreja tal-kontenut ta' {{SITENAME}} f'dawn is-siti, jistgħu
 
 # Preferences page
 'preferences' => 'Preferenzi',
-'mypreferences' => 'preferenzi',
+'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>.',
@@ -1346,7 +1355,7 @@ Hawnhekk hawn valur iġġenerat b'mod każwali li inti tista' tuża: $1",
 'timezoneregion-indian' => 'Oċean Indjan',
 'timezoneregion-pacific' => 'Oċean Paċifiku',
 'allowemail' => 'Ħalli li jaslulek ittri-e mingħand utenti oħrajn',
-'prefs-searchoptions' => 'Preferenzi għat-tfittxija',
+'prefs-searchoptions' => 'Fittex',
 'prefs-namespaces' => 'Namespace',
 'defaultns' => "Fil-każ kuntrarju, fittex f'dawn l-ispazji tal-isem:",
 'default' => 'predefinit',
@@ -1358,9 +1367,9 @@ Hawnhekk hawn valur iġġenerat b'mod każwali li inti tista' tuża: $1",
 'prefs-emailconfirm-label' => 'Konferma tal-ittra-e:',
 'prefs-textboxsize' => 'Daqs tat-tieqa tal-modifika',
 'youremail' => 'E-mail:',
-'username' => 'Isem tal-utent:',
-'uid' => 'L-ID tal-utent:',
-'prefs-memberingroups' => 'Membru tal-{{PLURAL:$1|grupp|gruppi}}:',
+'username' => '{{GENDER:$1|Isem tal-utent}}:',
+'uid' => '{{GENDER:$1|ID tal-utent}}:',
+'prefs-memberingroups' => '{{GENDER:$2|Membru}} tal-{{PLURAL:$1|grupp|gruppi}}:',
 'prefs-memberingroups-type' => '$1',
 'prefs-registration' => "Ħin ta' reġistrazzjoni:",
 'yourrealname' => 'Isem proprju:',
@@ -1508,13 +1517,13 @@ Hawnhekk hawn valur iġġenerat b'mod każwali li inti tista' tuża: $1",
 'right-sendemail' => 'Jibgħat ittri-e lil utenti oħra',
 'right-passwordreset' => 'Jara l-messaġġi tal-impostazzjoni mill-ġdid tal-password',
 
+# Special:Log/newusers
+'newuserlogpage' => 'Utenti ġodda',
+'newuserlogpagetext' => "Dan hu reġistru tal-kreazzjoni ta' kontijiet ġodda.",
+
 # User rights log
 'rightslog' => 'Drittijiet tal-utenti',
 'rightslogtext' => "Dan huwa r-reġistru tal-modifiki ta' drittijiet tal-utenti.",
-'rightslogentry' => "biddel is-sħubija ta' $1 minn $2 għal $3",
-'rightslogentry-autopromote' => 'ġie awtomatikament promoss minn $2 għal $3',
-'logentry-rights-rights' => "$1 biddel is-sħubija ta' $3 minn $4 għal $5",
-'rightsnone' => '(xejn)',
 
 # Associated actions - in the sentence "You do not have permission to X"
 'action-read' => 'aqra din il-paġna',
@@ -1586,6 +1595,7 @@ Hawnhekk hawn valur iġġenerat b'mod każwali li inti tista' tuża: $1",
 'newsectionsummary' => '/* $1 */ sezzjoni ġdida',
 'rc-enhanced-expand' => 'Uri d-dettalji (hemm bżonn tal-JavaScript)',
 'rc-enhanced-hide' => 'Aħbi d-dettalji',
+'rc-old-title' => 'oriġinarjament maħluqa bħala "$1"',
 
 # Recent changes linked
 'recentchangeslinked' => 'Tibdil relatat',
@@ -1744,6 +1754,8 @@ Jekk il-problema tkompli tippersisti, ikkuntatja lil xi [[Special:ListUsers/syso
 # File backend
 'backend-fail-delete' => 'Il-fajl "$1" ma setax jiġi mħassar.',
 'backend-fail-alreadyexists' => 'Il-fajl "$1" diġà jeżisti.',
+'backend-fail-read' => 'Il-fajl "$1" ma jistax jinqara.',
+'backend-fail-create' => 'Il-fajl "$1" ma jistax jinkiteb.',
 
 # ZipDirectoryReader
 'zip-file-open-error' => 'Qam żball waqt il-ftuħ tal-fajl għall-kontrolli ZIP.',
@@ -1766,8 +1778,8 @@ Ma jistax jiġi kkontrollat għas-sigurtà b'mod adegwat.",
 'img-auth-accessdenied' => 'Aċċess miċħud',
 'img-auth-nopathinfo' => "PATH_INFO nieqes.
 Is-server tiegħek mhuwiex issettjat sabiex jgħaddi din l-informazzjoni.
-Jista' jkun ibbażat fuq CGI u ma jistax isostni img_auth.
-Ikkonsulta lil https://www.mediawiki.org/wiki/Manual:Image_Authorization.",
+Jista' jkun li huwa bbażat fuq CGI u ma jistax isostni img_auth.
+Żur https://www.mediawiki.org/wiki/Manual:Image_Authorization.",
 'img-auth-notindir' => 'Id-destinazzjoni rikjesta mhijiex fid-direttorju tat-tlugħ konfigurat.',
 'img-auth-badtitle' => 'Ma setax jinbena titlu validu minn "$1".',
 'img-auth-nologinnWL' => 'M\'intix fil-kont tiegħek u "$1" mhuwiex fil-lista l-bajda.',
@@ -1851,11 +1863,14 @@ Il-lista segwenti turi {{PLURAL:$1|l-ewwel paġna li tipponta|l-ewwel $1 paġni
 Jekk jogħġbok ara l-[$2 paġna ta' deskrizzjoni tal-fajl] għal aktar informazzjoni.",
 'sharedupload-desc-here' => "Dan il-fajl huwa minn $1 u jista' jiġi wżat minn proġetti oħrajn.
 Id-deskrizzjoni fuq il-[$2 paġna ta' deskrizzjoni tal-fajl] tinsab hawn taħt.",
+'sharedupload-desc-edit' => "Dan il-fajl huwa minn $1 u jista' jiġi wżat minn proġetti oħrajn. Probabbilment trid timmodifika d-deskrizzjoni fuq il-[$2 paġna ta' deskrizzjoni tal-fajl].",
+'sharedupload-desc-create' => "Dan il-fajl huwa minn $1 u jista' jiġi wżat minn proġetti oħrajn. Probabbilment trid timmodifika d-deskrizzjoni fuq il-[$2 paġna ta' deskrizzjoni tal-fajl].",
 'filepage-nofile' => "L-ebda fajl ma jeżisti b'dan l-isem.",
 'filepage-nofile-link' => "L-ebda fajl ma jeżisti b'dan l-isem, però inti tista' [$1 ttellgħu].",
 'uploadnewversion-linktext' => "Tella' verżjoni ġdida ta' dan il-fajl",
 'shared-repo-from' => 'minn $1',
 'shared-repo' => 'repożitorju maqsum',
+'upload-disallowed-here' => 'Ma tistax tikteb fuq dan il-fajl.',
 
 # File reversion
 'filerevert' => 'Ġib lura $1',
@@ -1936,8 +1951,9 @@ Daħħal: tip/sottotip, eż. <code>image/jpeg</code>.",
 
 'disambiguations' => "Paġni li jorbtu lejn paġni ta' diżambigwazzjoni",
 'disambiguationspage' => 'Template:diżambig',
-'disambiguations-text' => "Il-Paġni li jinsabu f'din lista huma parti minn '''paġna ta' diżambigwazzjoni''' b'hekk għandhom jiġu relatati mas-suġġett preċiż minflok. <br />
-Paġna tiġi stimata paġna ta' diżambigwazzjoni dawk kollha li jagħmlu użu mit-template elenkat f'[[MediaWiki:Disambiguationspage]]",
+'disambiguations-text' => "Il-paġni segwenti għandhom minn tal-inqas ħolqa waħda lejn '''paġna ta' diżambigwazzjoni'''.
+Dawn probabbilment għandhom jippuntaw lejn l-paġna t-tajba minflok.<br />
+Paġna tiġi stmata bħala paġna ta' diżambigwazzjoni jekk tuża' mudell fil-lista li tinsab fuq [[MediaWiki:Disambiguationspage]].",
 
 'doubleredirects' => 'Rindirizzi doppji',
 'doubleredirectstext' => 'Din il-paġna telenka dawk il-paġni li jindirizzaw lejn paġna oħra ta\' rindirizzament.
@@ -1960,8 +1976,9 @@ Daħliet <del>maqtugħa</del> saritilhom it-tiswija.',
 'fewestrevisions' => 'Paġni bl-inqas reviżjonijiet',
 
 # Miscellaneous special pages
-'nbytes' => '{{PLURAL:$1|byte|$1  bytes}}',
+'nbytes' => '{{PLURAL:$1|byte|$1 bytes}}',
 'ncategories' => '{{PLURAL:$1|kategorija|$1 kategoriji}}',
+'ninterwikis' => '{{PLURAL:$1|interwiki waħda|$1 interwikis}}',
 'nlinks' => '{{PLURAL:$1|link|$1 links}}',
 'nmembers' => '$1 {{PLURAL:$1|membru|membri}}',
 'nrevisions' => '{{PLURAL:$1|reviżjoni|$1 reviżjonijiet}}',
@@ -1982,14 +1999,17 @@ Daħliet <del>maqtugħa</del> saritilhom it-tiswija.',
 'wantedpages' => 'Paġni rikjesti',
 'wantedpages-badtitle' => "Titlu invalidu fil-grupp ta' riżultati: $1",
 'wantedfiles' => 'Fajls rikjesti',
+'wantedfiletext-nocat' => 'Il-fajls segwenti huma wżati, imma ma jeżistux. Fajls minn repożitorji barranin jistgħu jkunu elenkati minkejja li ma jeżistux. Dawn il-falzi pożittivi jkunu <del>maqtugħin</del>.',
 'wantedtemplates' => 'Mudelli rikjesti',
 'mostlinked' => "Paġni bl-ikbar numru ta' links li jwasslu għalihom",
 'mostlinkedcategories' => "Kategoriji bl-ikbar numru ta' links li jwasslu għalihom",
 'mostlinkedtemplates' => 'L-iktar mudelli wżati',
 'mostcategories' => "Paġni bl-ikbar numru ta' kategoriji",
 'mostimages' => "Fajls bl-ikbar numru ta' links li jwasslu għalihom",
+'mostinterwikis' => 'Paġni bl-iktar interwikis',
 'mostrevisions' => "Paġni bl-ikbar numru ta' reviżjonijiet",
 'prefixindex' => 'Il-paġni kollha bil-prefiss',
+'prefixindex-namespace' => 'Il-paġni kollha bil-prefiss tal-ispazju tal-isem $1',
 'shortpages' => 'Paġni qosra',
 'longpages' => 'Paġni twal',
 'deadendpages' => 'Paġni bla ħruġ',
@@ -2062,6 +2082,7 @@ Kun af li siti elettroniċi oħra jistgħu jorbtu b'ħolqa diretta lejn il-fajl,
 
 # SpecialCachedPage
 'cachedspecial-viewing-cached-ttl' => "Qiegħed tara verżjoni ta' din il-paġna memorizzata fil-''cache'', li tista' tkun antika sa massimu ta' $1.",
+'cachedspecial-viewing-cached-ts' => "Qiegħed tara verżjoni ta' din il-paġna li tinsab memorizzata fil-cache, li tista' ma tkunx kompletament aġġornata.",
 'cachedspecial-refresh-now' => 'Uri l-iktar riċenti.',
 
 # Special:Categories
@@ -2083,8 +2104,9 @@ Ara wkoll il-[[Special:WantedCategories|kategoriji rikjesti]].',
 'linksearch-pat' => "Mudell ta' tfittxija:",
 'linksearch-ns' => 'Spazju tal-isem:',
 'linksearch-ok' => 'Fittex',
-'linksearch-text' => 'Huwa possibbli li tagħmel użu minn metakarattri, per eżempju "*.wikipedia.org".<br />
-Protokolli aċċettati: <code>$1</code>',
+'linksearch-text' => 'Tista\' tagħmel użu minn metakarattri, per eżempju "*.wikipedia.org".<br />
+Huwa neċessarju minn tal-inqas dominju tal-ewwel livell, per eżempju "*.org".<br />
+Protokolli aċċettati: <code>$1</code> (jekk ma jiġi speċifikat l-ebda protokol, dan jiġi awtomatikament definit bħala http://).',
 'linksearch-line' => '$1 hija marbuta mill-paġna $2',
 'linksearch-error' => 'Il-metakarattri jistgħu jintużaw biss fil-bidu tal-indirizz.',
 
@@ -2103,10 +2125,6 @@ Protokolli aċċettati: <code>$1</code>',
 'activeusers-hidesysops' => 'Aħbi amministraturi',
 'activeusers-noresult' => 'L-ebda utent ma nstab.',
 
-# Special:Log/newusers
-'newuserlogpage' => 'Utenti ġodda',
-'newuserlogpagetext' => "Dan hu reġistru tal-kreazzjoni ta' kontijiet ġodda.",
-
 # Special:ListGroupRights
 'listgrouprights' => 'Drittijiet tal-grupp tal-utenti',
 'listgrouprights-summary' => "Hawn taħt hawn elenkati l-gruppi tal-utenti għal din il-wiki, bid-drittijiet ta' aċċess rispettiv.
@@ -2130,8 +2148,10 @@ Jista' jkun hemm [[{{MediaWiki:Listgrouprights-helppage}}|aktar informazzjoni]]
 'mailnologin' => 'L-Ebda indirizz tal-posta',
 'mailnologintext' => "Sabiex tkun tista' tibgħat posta elettronika 'l utenti oħrajn huwa neċessarju li [[Special:UserLogin|tidħol fis-sit]] bħalha utent reġistrat u jkollhok indirizz validu fil-[[Special:Preferences|preferenzi]] tiegħek.",
 'emailuser' => 'Ikteb lil dan l-utent',
+'emailuser-title-notarget' => 'Ibgħat ittre lil utent',
 'emailpage' => 'Ibgħat messaġġ lil dan l-utent bil-posta elettronika',
-'emailpagetext' => "Huwa possibbli li tuża' l-formola t'hawn taħt biex tibgħat posta elettronika għal dan l-utent. L-indirizz li daħħalt fil-[[Special:Preferences|preferenzi]] jidher fl-ispazju \"Minn:\" tal-messaġġ, biex dak li jirċievi l-messaġġ ikun jista' jagħtik risposta.",
+'emailpagetext' => "Tista' tuża' din il-formola t'hawn taħt sabiex tibgħat ittra elettronika lil dan l-{{GENDER:\$1|utent}}.
+L-indirizz elettroniku li daħħalt fil-[[Special:Preferences|preferenzi]] jidher fl-ispazju \"Minn\" tal-messaġġ, biex dak li jirċievi l-messaġġ ikun jista' jagħtik risposta.",
 'usermailererror' => 'L-oġġett tal-posta ta l-problema:',
 'defemailsubject' => 'Messaġ minn {{SITENAME}} mingħand l-utent "$1"',
 'usermaildisabled' => 'Il-posta elettronika tal-utent mhux attivata',
@@ -2162,17 +2182,15 @@ Jista' jkun hemm [[{{MediaWiki:Listgrouprights-helppage}}|aktar informazzjoni]]
 
 # Watchlist
 'watchlist' => "Lista ta' osservazzjoni tiegħi",
-'mywatchlist' => 'li qed insegwi',
+'mywatchlist' => "Lista ta' osservazzjonijiet",
 'watchlistfor2' => 'Tal-utent $1 $2',
 'nowatchlist' => "Il-lista ta' osservazzjoni tiegħek hija vojta.",
 'watchlistanontext' => "Sabiex tara u timmodifika l-lista ta' osservazzjoni tiegħek, hemm bżonn li $1.",
 'watchnologin' => 'Għadek ma dħaltx ġewwa',
 'watchnologintext' => "Biex tagħmel modifika fil-lista t'osservazzjoni speċjali huwa neċessarju li l-ewwel [[Special:UserLogin|tidħol]] fil-kont tiegħek.",
 'addwatch' => "Żid mal-lista ta' osservazzjonijiet",
-'addedwatchtext' => "Il-paġna \"[[:\$1]]\" ġiet miżjuda mal-[[Special:Watchlist|lista ta' osservazzjoni]] tiegħek.
-Minn issa 'l quddiem, il-modifiki f'din il-paġna u fil-paġna ta' diskussjoni tagħha jiġu rreġistrati hawnhekk, u l-paġna tibda tidher b'tipa '''ħoxna''' fil-[[Special:RecentChanges|lista ta' modifiki riċenti]] sabiex tinsab iktar faċilment.
-
-Jekk f'xi ħin tkun tixtieq tneħħi l-paġna mil-lista ta' osservazzjoni tiegħek, kemm tagħfas fuq \"tibqax issegwi\" li tinsab fl-iżbarra ta' fuq.",
+'addedwatchtext' => 'Il-paġna "[[:$1]]" ġiet miżjuda mal-[[Special:Watchlist|lista ta\' osservazzjonijiet]] tiegħek.
+Kwalunkwe modifika li ssir fil-futur, kemm fuq din il-paġna u fil-paġna ta\' diskussjoni tagħha, tiġi elenkata hemmhekk.',
 'removewatch' => "Neħħi mil-lista ta' osservazzjonijiet",
 'removedwatchtext' => 'Il-paġna "[[:$1]]" tneħħiet mil-[[Special:Watchlist|lista ta\' osservazzjoni tiegħek]].',
 'watch' => 'Segwi',
@@ -2201,37 +2219,47 @@ Jekk f'xi ħin tkun tixtieq tneħħi l-paġna mil-lista ta' osservazzjoni tiegħ
 'enotif_mailer' => "Sistema ta' notifikazzjoni bl-użu tal-posta elettronika fuq {{SITENAME}}",
 'enotif_reset' => 'Immarka l-paġni kollha bħala diġà viżitati',
 'enotif_impersonal_salutation' => "Utent ta' {{SITENAME}}",
+'enotif_subject_deleted' => "Il-paġna $1 ta' {{SITENAME}} ġiet imħassra minn {{gender:$2|$2}}",
+'enotif_subject_created' => "Il-paġna $1 ta' {{SITENAME}} ġiet maħluqa minn {{gender:$2|$2}}",
+'enotif_subject_moved' => "Il-paġna $1 ta' {{SITENAME}} tmexxiet minn {{gender:$2|$2}}",
+'enotif_subject_restored' => "Il-paġna $1 ta' {{SITENAME}} ġiet irkuprata minn {{gender:$2|$2}}",
+'enotif_subject_changed' => "Il-paġna $1 ta' {{SITENAME}} ġiet mibdula minn {{gender:$2|$2}}",
+'enotif_body_intro_deleted' => 'Il-paġna $1 ta\' {{SITENAME}} ġiet imħassra minn {{gender:$2|$2}} nhar il-$PAGEEDITDATE (ara $3 għar-reviżjoni attwali).',
+'enotif_body_intro_created' => 'Il-paġna $1 ta\' {{SITENAME}} ġiet maħluqa minn {{gender:$2|$2}} nhar il-$PAGEEDITDATE, ara $3 għar-reviżjoni attwali.',
+'enotif_body_intro_moved' => 'Il-paġna $1 ta\' {{SITENAME}} tmexxiet minn {{gender:$2|$2}} nhar il-$PAGEEDITDATE, ara $3 għar-reviżjoni attwali.',
+'enotif_body_intro_restored' => 'Il-paġna $1 ta\' {{SITENAME}} ġiet irkuprata minn {{gender:$2|$2}} nhar il-$PAGEEDITDATE, ara $3 għar-reviżjoni attwali.',
+'enotif_body_intro_changed' => 'Il-paġna $1 ta\' {{SITENAME}} ġiet mibdula minn {{gender:$2|$2}} nhar il-$PAGEEDITDATE, ara $3 għar-reviżjoni attwali.',
 'enotif_lastvisited' => 'Ara $1 għal modifiki kollha mill-aħħar żjara.',
 'enotif_lastdiff' => 'Ara $1 biex tara din l-modifika.',
 'enotif_anon_editor' => 'utent anonimu $1',
-'enotif_body' => 'Għażiż $WATCHINGUSERNAME,
+'enotif_body' => 'Għażiż/a $WATCHINGUSERNAME,
 
-Il-paġna $PAGETITLE ta\' {{SITENAME}} ġiet $CHANGEDORCREATED nhar il-$PAGEEDITDATE minn $PAGEEDITOR; il-verżjoni kurrenti tinsab fl-indirizz $PAGETITLE_URL.
-
-$NEWPAGE
+$PAGEINTRO $NEWPAGE
 
 Taqsira tal-editur: $PAGESUMMARY $PAGEMINOREDIT
 
 Ikkuntatja lill-editur:
-ittra-e: $PAGEEDITOR_EMAIL
+ittre: $PAGEEDITOR_EMAIL
 wiki: $PAGEEDITOR_WIKI
 
-Mhux se jiġu mibgħuta notifiki oħra f\'każ ta\' aktar modifiki sakemm ma żżurx din il-paġna. Huwa possibbli li terġa\' tpoġġi l-avviż mill-ġdid għal paġni kollha fil-lista ta\' osservazzjonijiet.
+Mhux se jkun hemm iktar notifiki oħra f\'każ ta\' aktar modifiki sakemm ma żżurx din il-paġna. Huwa possibbli li tippersonalizza s-sistema ta\' notifikazzjoni għall-paġni kollha fil-lista ta\' osservazzjoni tiegħek.
 
-Is-sistema ta\' notifika ta\' {{SITENAME}}, fis-servizz tiegħek
+Is-sistema ta\' notifika ta\' {{SITENAME}}
 
 --
 Biex tbiddel it-tqegħid tan-notifiki permezz tal-posta elettronika, żur
-{{fullurl:{{#special:Preferences}}}}
+{{canonicalurl:{{#special:Preferences}}}}
 
 Biex tbiddel t-tqegħid tal-lista ta\' osservazzjonijiet, żur
-{{fullurl:{{#special:Preferences}}}}
+{{canonicalurl:{{#special:EditWatchlist}}}}
 
 Biex tħassar il-paġna minn fuq il-lista ta\' osservazzjonijiet, żur
 $UNWATCHURL
 
-Biex tgħaddi l-kummenti tiegħek u biex tikseb aktar għajnuna:
-{{fullurl:{{MediaWiki:Helppage}}}}',
+Biex tgħaddi kumment u biex tikseb iktar għajnuna:
+{{canonicalurl:{{MediaWiki:Helppage}}}}',
+'created' => 'inħolqot',
+'changed' => 'modifikata',
 
 # Delete
 'deletepage' => 'Ħassar il-paġna',
@@ -2294,6 +2322,7 @@ Ara l-[[Special:ProtectedPages|lista ta' paġni protetti]] għal-lista ta' paġn
 'movedarticleprotection' => 'mexxa l-protezzjoni minn "[[$2]]" għal "[[$1]]"',
 'protect-title' => 'Modifika livell ta\' protezzjoni ta\' "$1"',
 'prot_1movedto2' => '[[$1]] tmexxa lejn [[$2]]',
+'protect-badnamespace-text' => "Paġni f'dan l-ispazju tal-isem ma jistgħux jiġu protetti.",
 'protect-legend' => 'Ikkonferma l-protezzjoni',
 'protectcomment' => 'Raġuni:',
 'protectexpiry' => 'Jiskadi:',
@@ -2373,8 +2402,8 @@ Int jista' jkollhok link ħażin, jew jista' jkun li ir-reviżjoni ġie rkuprat
 'undeletedrevisions' => '{{PLURAL:$1|reviżjoni irkuprata|$1 reviżjonijiet irkuprati}}',
 'undeletedrevisions-files' => '{{PLURAL:$1|reviżjoni waħda|$1 reviżjonijiet}} u {{PLURAL:$2|fajl wieħed irkuprat|$2 fajls irkuprati}}',
 'undeletedfiles' => '{{PLURAL:$1|file wieħed|$1 fajls}} irkuprati',
-'cannotundelete' => "L-irkuprar ma rnexxiex;
-jista' jkun li xi ħadd ieħor irkupra l-paġna qabel.",
+'cannotundelete' => 'L-irkuprar ma rnexxiex:
+$1',
 'undeletedpage' => "'''$1 ġie irkuprat'''
 
 Ikkonsulta r-[[Special:Log/delete|reġistru tat-tħassir]] biex tara t-tħassir u l-irkuprar ta' paġni l-aktar riċenti.",
@@ -2406,9 +2435,9 @@ $1',
 'blanknamespace' => '(Prinċipali)',
 
 # Contributions
-'contributions' => 'Kontribuzzjonijiet tal-utent',
+'contributions' => 'Kontribuzzjonijiet tal-{{GENDER:$1|utent}}',
 'contributions-title' => 'Kontribuzzjonijiet tal-utent għal $1',
-'mycontris' => 'kontribuzzjonijiet',
+'mycontris' => 'Kontribuzzjonijiet',
 'contribsub2' => 'Għal $1 ($2)',
 'nocontribs' => 'L-Ebda modifiki li jisodisfa l-kriterji tat-tfittxija.',
 'uctop' => '(l-aħħar fil-paġna)',
@@ -2448,8 +2477,8 @@ L-aħħar daħla fir-reġistru tal-imblokki tinsab hawn taħt bħala referenza:'
 'whatlinkshere-links' => '← links',
 'whatlinkshere-hideredirs' => '$1 riindirizzi',
 'whatlinkshere-hidetrans' => '$1 inklużjonijiet',
-'whatlinkshere-hidelinks' => '$1 link',
-'whatlinkshere-hideimages' => '$1 links tal-istampi',
+'whatlinkshere-hidelinks' => '$1 l-ħoloq',
+'whatlinkshere-hideimages' => '$1 ħoloq lejn fajls',
 'whatlinkshere-filters' => 'Filtri',
 
 # Block/unblock
@@ -2490,8 +2519,8 @@ Indika r-raġuni speċifika għalfejn tixtieq tipproċedi bil-blokk (per eżempj
 'ipb-confirm' => 'Ikkonferma l-blokk',
 'badipaddress' => "Indirizz ta' IP invalidu",
 'blockipsuccesssub' => 'Il-blokk irnexxa',
-'blockipsuccesstext' => 'L-utent [[Special:Contributions/$1|$1]] ġie imblukkat.<br />
-Ara l-[[Special:BlockList|lista tal-IP imblukkati]] biex tara l-blokki attivi.',
+'blockipsuccesstext' => '[[Special:Contributions/$1|$1]] ġie imblukkat.<br />
+Ara l-[[Special:BlockList|lista tal-blokki]] sabiex tara l-blokki attivi.',
 'ipb-blockingself' => 'Inti se timblokka lilek innifsek! Inti ċert li trid tagħmel dan?',
 'ipb-confirmhideuser' => 'Inti se timblokka utent bl-opzjoni "Aħbi l-utent" magħżula. B\'dan il-mod jiġi evitat li jidher l-isem tal-utent fl-elenki u fid-daħliet rar-reġistri kollha. Inti ċert li trid tagħmel dan?',
 'ipb-edit-dropdown' => 'Immodifika r-raġunijiet tal-imblukkar',
@@ -2691,6 +2720,7 @@ Biex tesporta paġni, daħħal it-titli fil-kaxxa tat-test hawn taħt, titlu f'k
 
 Fl-aħħar każ inti tista' tuża ħolqa, per eżempju
 [[{{#Special:Export}}/{{MediaWiki:Mainpage}}]] sabiex tesporta \"[[{{MediaWiki:Mainpage}}]]\".",
+'exportall' => 'Esporta l-paġni kollha',
 'exportcuronly' => 'Inkludi biss reviżjonijiet kurrenti, mhux kronoloġiji sħaħ',
 'exportnohistory' => "----
 '''Nota:''' L-Esportazzjoni tal-kronoloġija kollha tal-paġni min-naħa waħda għall-oħra din l-''interface'' ġiet disattivata għar-raġunijiet marbutin tal-għemil.",
@@ -3680,7 +3710,7 @@ Stampi huwa mogħrija b'risoluzzjoni sħiħa, tipi tal-fajl oħrajn jibdew bil-p
 * <span class="mw-specialpagecached">Paġni speċjali disponibbli f\'verżjoni cache (jistgħu jkunu skaduti).</span>',
 'specialpages-group-maintenance' => 'Rapporti tal-manteniment',
 'specialpages-group-other' => 'Paġni speċjali oħrajn',
-'specialpages-group-login' => 'Idħol / irreġistra',
+'specialpages-group-login' => 'Idħol / oħloq kont',
 'specialpages-group-changes' => 'L-Aħħar modifiki u reġistri',
 'specialpages-group-media' => 'Fajls multimedjali - rapporti u tellgħar',
 'specialpages-group-users' => 'Utenti u drittijiet',
@@ -3727,7 +3757,7 @@ Stampi huwa mogħrija b'risoluzzjoni sħiħa, tipi tal-fajl oħrajn jibdew bil-p
 'compare-rev2' => 'Reviżjoni 2',
 'compare-submit' => 'Qabbel',
 'compare-invalid-title' => 'It-titlu li speċifikajt huwa invalidu.',
-'compare-title-not-exists' => 'It-titlu li speċifikajt huwa ma jeżistix.',
+'compare-title-not-exists' => 'It-titlu li speċifikajt ma jeżistix.',
 'compare-revision-not-exists' => 'Ir-reviżjoni li speċifikajt ma teżistix.',
 
 # Database error messages
@@ -3759,17 +3789,26 @@ Stampi huwa mogħrija b'risoluzzjoni sħiħa, tipi tal-fajl oħrajn jibdew bil-p
 'logentry-delete-delete' => '$1 ħassar il-paġna $3',
 'logentry-delete-restore' => "$1 reġġa' lura l-paġna $3",
 'logentry-delete-event' => "$1 biddel il-viżibilità ta' {{PLURAL:$5|azzjoni tar-reġistru|$5 azzjonijiet tar-reġistru}} ta' $3: $4",
+'revdelete-content-hid' => 'kontenut moħbi',
+'revdelete-summary-hid' => 'taqsira moħbija',
+'revdelete-uname-hid' => 'isem tal-uten moħbi',
+'revdelete-content-unhid' => 'kontenut muri mill-ġdid',
+'revdelete-summary-unhid' => 'taqsira murija mill-ġdid',
+'revdelete-uname-unhid' => 'isem tal-utent muri mill-ġdid',
 'revdelete-restricted' => "limiti applikati 'l amministraturi",
 'revdelete-unrestricted' => "neħħi l-limiti 'l amministraturi",
 'logentry-move-move' => '$1 mexxa l-paġna $3 għal $4',
 'logentry-move-move-noredirect' => '$1 mexxa l-paġna $3 għal $4 mingħajr ma ħalla rindirizz',
 'logentry-move-move_redir' => '$1 mexxa l-paġna $3 għal $4 fuq rindrizz',
 'logentry-move-move_redir-noredirect' => '$1 mexxa l-paġna $3 għal $4 fuq rindirizz mingħajr ma ħalla rindirizz',
-'logentry-newusers-newusers' => '$1 ħoloq kont tal-utent',
-'logentry-newusers-create' => '$1 ħoloq kont tal-utent',
-'logentry-newusers-create2' => '$1 ħoloq kont tal-utent $3',
+'logentry-newusers-newusers' => 'Il-kont $1 ġie maħluq',
+'logentry-newusers-create' => 'Il-kont $1 ġie maħluq',
+'logentry-newusers-create2' => 'Il-kont $3 ġie maħluq minn $1',
 'logentry-newusers-autocreate' => 'Il-kont $1 ġie maħluq awtomatikament',
-'newuserlog-byemail' => "il-password intbagħtet permezz ta' posta elettronika",
+'logentry-rights-rights' => "$1 biddel is-sħubija ta' $3 minn $4 għal $5",
+'logentry-rights-rights-legacy' => "$1 biddel is-sħubija fil-gruppi ta' $3",
+'logentry-rights-autopromote' => '$1 ġie awtomatikament promoss minn $4 għal $5',
+'rightsnone' => '(xejn)',
 
 # Feedback
 'feedback-subject' => 'Suġġett:',
@@ -3796,6 +3835,7 @@ Stampi huwa mogħrija b'risoluzzjoni sħiħa, tipi tal-fajl oħrajn jibdew bil-p
 'api-error-filetype-banned' => "It-tip ta' fajl mhuwiex aċċettat.",
 'api-error-filetype-missing' => 'L-isem tal-fajl jonqsu l-estensjoni.',
 'api-error-illegal-filename' => 'L-isem tal-fajl mhuwiex permess.',
+'api-error-unknownerror' => 'Żball mhux magħruf: "$1"',
 'api-error-uploaddisabled' => "It-tlugħ ta' fajls mhuwiex attivat fuq din il-wiki.",
 'api-error-verification-error' => "Dan il-fajl jista' jkun imħassar, jew għandu l-estensjoni l-ħażina.",
 
index 18e0686..26ed430 100644 (file)
@@ -639,9 +639,11 @@ Causo l çponiblizes, este será outelizado pa te dar crédito pul tou trabalho.
 'right-move' => 'Arrastrar páiginas',
 'right-movefile' => 'Arrastrar fexeiros',
 
+# Special:Log/newusers
+'newuserlogpage' => 'Registro de criaçon de outelizadores',
+
 # User rights log
 'rightslog' => 'Registro de dreitos de l outelizador',
-'rightsnone' => '(nanhun)',
 
 # Associated actions - in the sentence "You do not have permission to X"
 'action-read' => 'lher esta páigina',
@@ -846,9 +848,6 @@ Páiginas que steian ne ls [[Special:Watchlist|tous begiados]] son amostradas an
 # Special:ListUsers
 'listusers-submit' => 'Amostrar',
 
-# Special:Log/newusers
-'newuserlogpage' => 'Registro de criaçon de outelizadores',
-
 # Special:ListGroupRights
 'listgrouprights-rights' => 'Dreitos',
 'listgrouprights-members' => '(lista de nembros)',
@@ -875,6 +874,9 @@ Altaraçones feturas na tal páigina i páiginas de çcusson a eilha associadas
 'watching' => 'A begiar...',
 'unwatching' => 'A deixar de begiar...',
 
+'created' => 'criada',
+'changed' => 'demudada',
+
 # Delete
 'deletepage' => 'Botar fuora páigina',
 'delete-confirm' => 'Botar fuora "$1"',
@@ -1230,4 +1232,7 @@ Causo l fexeiro tenga sido demudado a partir de l sou stado oureginal, alguns de
 'tags-title' => 'Eitiquetas',
 'tags-edit' => 'eiditar',
 
+# New logging system
+'rightsnone' => '(nanhun)',
+
 );
index 2eac463..e6f79b9 100644 (file)
@@ -894,11 +894,13 @@ Your e-mail address is not revealed when other users contact you.
 'right-userrights-interwiki' => 'အခြားဝီကီများမှ အသုံးပြုသူများ၏ အသုံးပြုသူအခွင့်အရေးများကို တည်းဖြတ်ရန်',
 'right-sendemail' => 'အခြားအသုံးပြုသူများကို အီးမေးပို့ရန်',
 
+# Special:Log/newusers
+'newuserlogpage' => 'အသုံးပြုသူအသစ်ရောက်လာခြင်း မှတ်တမ်း',
+'newuserlogpagetext' => 'ဤသည်မှာ အသုံးပြုသူအသစ် ဖတ်တီးမှု မှတ်တမ်း ဖြစ်သည်။',
+
 # User rights log
 'rightslog' => 'အသုံးပြုသူ၏ အခွင့်အရေးများ မှတ်တမ်း',
 'rightslogtext' => 'ဤသည်မှာ အသုံးပြုသူအခွင့်အရေးများ၏ ပြောင်းလဲမှုများမှတ်တမ်းဖြစ်သည်။',
-'rightslogentry' => '$1 အတွက် အုပ်စုအသင်ဝင်ဖြစ်မှုကို အုပ်စု $2 မှ အုပ်စု $3 သို့ ပြောင်းလဲပြီး',
-'rightsnone' => '(ဘာမှမရှိ)',
 
 # Associated actions - in the sentence "You do not have permission to X"
 'action-read' => 'ဤစာမျက်နှာကို ဖတ်ရန်',
@@ -1261,10 +1263,6 @@ Your e-mail address is not revealed when other users contact you.
 'activeusers-hidesysops' => 'အက်ဒမင်များကို ဝှက်ရန်',
 'activeusers-noresult' => 'အသုံးပြုသူ မတွေ့ပါ။',
 
-# Special:Log/newusers
-'newuserlogpage' => 'အသုံးပြုသူအသစ်ရောက်လာခြင်း မှတ်တမ်း',
-'newuserlogpagetext' => 'ဤသည်မှာ အသုံးပြုသူအသစ် ဖတ်တီးမှု မှတ်တမ်း ဖြစ်သည်။',
-
 # Special:ListGroupRights
 'listgrouprights' => 'အသုံးပြုသူအုပ်စု အခွင့်အရေးများ',
 'listgrouprights-group' => 'အုပ်စု',
@@ -1320,6 +1318,8 @@ Your e-mail address is not revealed when other users contact you.
 
 'enotif_impersonal_salutation' => '{{SITENAME}} အသုံးပြုသူ',
 'enotif_anon_editor' => 'အမည်မသိ အသုံးပြုသူ $1',
+'created' => 'ဖန်တီးလိုက်သည်',
+'changed' => 'ပြောင်းလဲလိုက်သည်',
 
 # Delete
 'deletepage' => 'စာမျက်နှာကိုဖျက်ပါ',
@@ -1908,7 +1908,7 @@ Your e-mail address is not revealed when other users contact you.
 # New logging system
 'revdelete-restricted' => 'အက်ဒမင်များသို့ ကန့်သတ်ချက်များ သက်ရောက်ရန်',
 'revdelete-unrestricted' => 'အက်ဒမင်များအတွက် ကန့်သတ်ချက်များကို ဖယ်ရှားရန်',
-'newuserlog-byemail' => 'စကားဝှက်ကို အီးမေးဖြင့် ပို့လိုက်ပါပြီ။',
+'rightsnone' => '(ဘာမှမရှိ)',
 
 # API errors
 'api-error-filename-tooshort' => 'ဖိုင်အမည်သည် တိုလွန်းသည်။',
index e429ef2..05f5854 100644 (file)
@@ -233,7 +233,7 @@ $messages = array(
 
 'underline-always' => 'Свал',
 'underline-never' => 'Зярдояк',
-'underline-default' => 'Ð\92аÑ\81нÑ\8fнÑ\8c Ð±Ñ\80аÑ\83зеÑ\80',
+'underline-default' => 'Ð\91Ñ\80аÑ\83зеÑ\80Ñ\8dнÑ\8c Ñ\83Ñ\88одкÑ\81 Ð»Ð°Ð´Ñ\81емаÑ\82не',
 
 # Font style option in Special:Preferences
 'editfont-style' => 'Витнема-петнема уминенть фонт стилезэ',
@@ -491,8 +491,8 @@ $messages = array(
 Пачтта сёрмине теде [[Special:ListUsers/sysop|системань ветийнень]] URL адресэнть тештязь.',
 'missingarticle-rev' => '(лиякстомтома#: $1)',
 'missingarticle-diff' => '(Мейсэ явовить: $1, $2)',
-'internalerror' => 'Ð\9fоÑ\82монÑ\8c Ð¸Ð»Ñ\8cведÑ\8cкÑ\81',
-'internalerror_info' => 'Ð\9fоÑ\82монÑ\8c Ð¸Ð»Ñ\8cведÑ\8cкÑ\81: $1',
+'internalerror' => 'Потмоильведькс',
+'internalerror_info' => 'Потмоильведькс: $1',
 'fileappenderrorread' => '"$1" файлась эзь ловново поладомо шкастонзо.',
 'fileappenderror' => '"$1" файлась эзь поладово "$2" файлантень.',
 'filecopyerror' => '"$1" файлась эзь ванстово од "$2" файлакс.',
@@ -504,16 +504,20 @@ $messages = array(
 'unexpected' => 'Апак учонь вейкетстямо: "$1"="$2".',
 'formerror' => 'Ильведевкс: Формась а кучови',
 'badarticleerror' => 'Те лопасонть вешезь тевесь а тееви.',
+'cannotdelete-title' => '"$1" лопась а нардави',
 'badtitle' => 'Амаштовикс конякс',
 'badtitletext' => 'Вешезь лопанть лемезэ аволь виде, чаво, эли аволь видестэ сюлмазь келеньйутковань эли интервикинь лем. Паряк, лемсэнть тевс нолдазь анолдавикс тешкст.',
 'viewsource' => 'Ванномс лисьмапрянть',
+'viewsource-title' => 'Ваномс "$1" лопанть лисьмапрянзо',
 'actionthrottled' => 'Тев тееманть курокксчизэ киртязь',
 'protectedpagetext' => 'Те лопась панжома экшсэ, илязо понго витнемс-петнемс эли лия тевс.',
 'viewsourcetext' => 'Те лопанть лисьмапрясь маштови ваномскак, лангстонзо саемс копияяк:',
 'sqlhidden' => '(SQL вешнемась кекшезь)',
+'namespaceprotected' => "'''$1''' лемпотмосонть арась видечить витнемс-петнемс лопатнесэ.",
 'ns-specialprotected' => '{{ns:special}} лем марто лопатне а витневить-петневить.',
 'titleprotected' => "Те коняксонть ванстызе [[Теиця:$1|$1]], кияк иляссо тее.
 Тувталось вана ''$2''.",
+'exception-nologin' => 'Эзить сова',
 
 # Virus scanner
 'virus-scanfailed' => 'сканнось эзь лисе (код $1)',
@@ -525,7 +529,9 @@ $messages = array(
 'yourpassword' => 'Салава валот:',
 'yourpasswordagain' => 'Омбоцеде сёрмадык кирдицянь леметь:',
 'remembermypassword' => 'Ледстемс совамом те бравзерсэнть (сех кувать $1 {{PLURAL:$1|чи|чить}})',
+'securelogin-stick-https' => 'Кирдемс "HTTPS" сюлмавкс совамодо мейлеяк',
 'yourdomainname' => 'Эсеть доменэть:',
+'password-change-forbidden' => 'Те викисэнть а полавтсак салававалот.',
 'login' => 'Совамо',
 'nav-login-createaccount' => 'Совамо / тейть совамотарка',
 'loginprompt' => '{{SITENAME}} сайтэнтень совамга эряви нолдамс тевс cookies.',
@@ -592,6 +598,7 @@ $messages = array(
 
 # Change password dialog
 'resetpass' => 'Полавтомс совамо валот',
+'resetpass_announce' => 'Совавить нурька шкань салававалсо, кона кучозель куляпаргозот. Совамот прядомга эряви путомс од салававал вана тезэень:',
 'resetpass_header' => 'Полавтомс совамо валот',
 'oldpassword' => 'Ташто совамо валот:',
 'newpassword' => 'Од совамо валот:',
@@ -615,6 +622,7 @@ $messages = array(
 'changeemail-oldemail' => 'Неень е-сёрмапаргот:',
 'changeemail-newemail' => 'Од е-сёрмапаргот:',
 'changeemail-none' => '(арась мезе невтемс)',
+'changeemail-password' => '«{{SITENAME}}» проектэнь салававалот:',
 'changeemail-submit' => 'Полавтомс е-сёрмапаргот',
 'changeemail-cancel' => 'Саемс мекев',
 
@@ -713,7 +721,6 @@ IP-тешкстэть — $3, саймас совавтоманть ID-сь —
 'template-protected' => '(ванстозь)',
 'template-semiprotected' => '(пельс ванстозь)',
 'hiddencategories' => 'Те лопась совавтови {{PLURAL:$1|кекшень 1 категорияс|кекшень $1 категорияс}}:',
-'nocreatetitle' => 'Лопань теемась аволь певтеме',
 'nocreatetext' => 'Те {{SITENAME}} лопасонть пирязь од лопань теемась. Тонь ули мелеть велявтомс удалов ды  питнемензе-витнемензе улиця лопанть, али [[Special:UserLogin|совамс али теемс од совама]].',
 'nocreate-loggedin' => 'Тонеть а мерить теемс-шкамс од лопат.',
 'permissionserrorstext' => 'Тонеть а мерить теемс тень, вана {{PLURAL:$1|тувталось|тувталтнэ}}:',
@@ -864,6 +871,7 @@ IP-тешкстэть — $3, саймас совавтоманть ID-сь —
 'search-interwiki-default' => '$1 савкс:',
 'search-interwiki-more' => '(седе ламо)',
 'search-relatedarticle' => 'Малавикс',
+'mwsuggest-disable' => 'Лоткавтомс "AJAX" превспутыенть',
 'searcheverything-enable' => 'Вешнемс весе лем потмотнестэ',
 'searchrelated' => 'малавикс',
 'searchall' => 'весе',
@@ -913,6 +921,7 @@ IP-тешкстэть — $3, саймас совавтоманть ID-сь —
 'prefs-rendering' => 'Тюсозо-лангозо',
 'saveprefs' => 'Ванстомс',
 'resetprefs' => 'Нардамс апак вансто полавтнемат',
+'restoreprefs' => 'Велявтомс мекев весе ушодкс ладсематнень',
 'prefs-editing' => 'Витнема-петнема',
 'prefs-edit-boxsize' => 'Витнема-петнема вальманть сэрензэ-келензэ.',
 'rows' => 'Вал чилькстнэ (строкатне):',
@@ -984,9 +993,10 @@ IP-тешкстэть — $3, саймас совавтоманть ID-сь —
 'group-user-member' => '{{GENDER:$1|теиця}}',
 'group-autoconfirmed-member' => '
 {{GENDER:$1|сонсь кемекставиця теиця}}',
-'group-bot-member' => 'Бот',
-'group-sysop-member' => 'Администратор',
-'group-bureaucrat-member' => 'Бюрократ',
+'group-bot-member' => '{{GENDER:$1|Бот}}',
+'group-sysop-member' => '{{GENDER:$1|Администратор}}',
+'group-bureaucrat-member' => '
+{{GENDER:$1|Бюрократ}}',
 
 'grouppage-user' => '{{ns:project}}:Совицятне',
 'grouppage-bot' => '{{ns:project}}:Ботт',
@@ -1023,9 +1033,12 @@ IP-тешкстэть — $3, саймас совавтоманть ID-сь —
 'right-siteadmin' => 'Датабазань сёлгомо ды панжомо',
 'right-passwordreset' => 'Ваномс теицянь салава валонь полавтома е-сёрмат',
 
+# Special:Log/newusers
+'newuserlogpage' => 'Теицянь шкамодо-теемадо конёв',
+'newuserlogpagetext' => 'Те теицянь шкавксто журнал',
+
 # User rights log
 'rightslog' => 'Уськетеицянть видечинть кемекстома',
-'rightsnone' => '(арасть)',
 
 # Associated actions - in the sentence "You do not have permission to X"
 'action-read' => 'те лопань ловномо',
@@ -1086,6 +1099,7 @@ IP-тешкстэть — $3, саймас совавтоманть ID-сь —
 'newsectionsummary' => '/* $1 */ од пелькс',
 'rc-enhanced-expand' => 'Невтемс седе ламо тень ланга (JavaScript эряви)',
 'rc-enhanced-hide' => 'Кекшемс келейстэ ёвтазенть',
+'rc-old-title' => 'васня сёрмадозель «$1» лем марто',
 
 # Recent changes linked
 'recentchangeslinked' => 'Сюлмавозь лиякстоматне',
@@ -1114,6 +1128,7 @@ IP-тешкстэть — $3, саймас совавтоманть ID-сь —
 'filestatus' => 'Авторонь видечинь статусозо:',
 'filesource' => 'Лисьмапрязо:',
 'uploadedfiles' => 'Ёвкстань файлат',
+'ignorewarnings' => 'А явомс мель «Ванок» серьгедематненень',
 'minlength1' => 'Файлалемесь аштезэ вейке эли седе ламо тешксттнэстэ.',
 'badfilename' => 'Файланть лемесь полавтозь "$1"-кс.',
 'filetype-missing' => 'Файланть арась поладкс пезэ (саемга «.jpg»).',
@@ -1311,6 +1326,7 @@ IP-тешкстэть — $3, саймас совавтоманть ID-сь —
 'mostimages' => 'Весемеде ламо сюлмавкс марто файлат',
 'mostrevisions' => 'Лопат конатнесэ теезь сехте ламо лиякстомтомат',
 'prefixindex' => 'Весе лопатне, конат саевить истямо икелькс пене марто',
+'prefixindex-namespace' => 'Весе лопат, косо лемушодксось ($1 лемпотмо)',
 'shortpages' => 'Нурькине лопат',
 'longpages' => 'Кувака лопат',
 'deadendpages' => 'Поладкстомо-лисемавтомо лопат',
@@ -1392,10 +1408,6 @@ IP-тешкстэть — $3, саймас совавтоманть ID-сь —
 'activeusers-hidesysops' => 'Кекшемс администратортнэнь',
 'activeusers-noresult' => 'Якинзэ-пакинзэ арасть',
 
-# Special:Log/newusers
-'newuserlogpage' => 'Теицянь шкамодо-теемадо конёв',
-'newuserlogpagetext' => 'Те теицянь шкавксто журнал',
-
 # Special:ListGroupRights
 'listgrouprights' => 'Теиця куронть видечинзэ',
 'listgrouprights-group' => 'Куро',
@@ -1447,6 +1459,8 @@ IP-тешкстэть — $3, саймас совавтоманть ID-сь —
 'enotif_impersonal_salutation' => '{{SITENAME}} теицясь',
 'enotif_lastdiff' => 'Те полавтоманть ваномга вант $1.',
 'enotif_anon_editor' => 'лемтеме теиця $1',
+'created' => 'теезь-шказь',
+'changed' => 'полавтозь',
 
 # Delete
 'deletepage' => 'Нардамс лопанть',
@@ -2211,7 +2225,7 @@ IP-тешкстэть — $3, саймас совавтоманть ID-сь —
 'htmlform-selectorother-other' => 'Лия',
 
 # New logging system
-'newuserlog-byemail' => 'салава валот кучозь е-сёрмасо',
+'rightsnone' => '(арасть)',
 
 # Feedback
 'feedback-subject' => 'Мезде:',
@@ -2219,6 +2233,9 @@ IP-тешкстэть — $3, саймас совавтоманть ID-сь —
 'feedback-cancel' => 'А теемс',
 'feedback-close' => 'Анок',
 
+# Search suggestions
+'searchsuggest-search' => 'Вешнемс',
+
 # API errors
 'api-error-filename-tooshort' => 'Керьмазлементь а саты кувалмозо',
 'api-error-illegal-filename' => 'Керьмазлемесь а маштови.',
index 7d54b31..48d2e38 100644 (file)
@@ -711,7 +711,6 @@ $2، $1',
 # User rights log
 'rightslog' => 'سیاهه اختیارای کاروری',
 'rightslogtext' => 'اینتا سیاهه تغییرای اختیارای کاروری هسته.',
-'rightsnone' => '(هچّی)',
 
 # Associated actions - in the sentence "You do not have permission to X"
 'action-edit' => 'این صفحه ره دچی‌ین',
@@ -864,6 +863,7 @@ $2، $1',
 'enotif_lastvisited' => 'بدی‌ین همه‌ی تغییرات از آخرین باری که سر بزونی وسّه $1 ره هارشین.',
 'enotif_lastdiff' => 'هارشائن این تغییر وسّه $1 ره بزنین.',
 'enotif_anon_editor' => 'نشناسی‌یه کارور $1',
+'created' => 'بساته بیّه',
 
 # Delete
 'deletepage' => 'صفحه پاک هاکردن',
@@ -1086,6 +1086,7 @@ $5
 'logentry-move-move_redir-noredirect' => '$1 ، $3 ره بدون اینکه مسیر تغییری درس بوه به $4 که مسیر تغییر بیه منتقل هاکرده',
 'logentry-newusers-newusers' => '$1  بساتن اتا حساب کاروری',
 'logentry-newusers-create' => '$1  بساتن اتا حساب کاروری',
+'rightsnone' => '(هچّی)',
 
 # Feedback
 'feedback-subject' => 'موضوع:',
index 239339b..e464a70 100644 (file)
@@ -739,7 +739,6 @@ Intlā ticnequi, tlācah quimatīzqueh motequi.',
 
 # User rights log
 'rightslog' => 'Tlatequitiltilīlli huelītiliztli tlahcuilōlloh',
-'rightsnone' => 'ahtlein',
 
 # Associated actions - in the sentence "You do not have permission to X"
 'action-read' => 'ticpōhuāz inīn zāzanilli',
@@ -1058,6 +1057,8 @@ $UNWATCHURL
 
 Tētlamachītīliztli īhuān oc yeh tēpalehuiliztli:
 {{canonicalurl:{{MediaWiki:Helppage}}}}',
+'created' => 'ōmochīuh',
+'changed' => 'ōmotlacuep',
 
 # Delete
 'deletepage' => 'Ticpolōz inīn zāzanilli',
@@ -1503,6 +1504,9 @@ Niman tihuelīti [[Special:UserLogin|timocalaqui]] auh ticpactiāz huiquitica.',
 # HTML forms
 'htmlform-selectorother-other' => 'Occē',
 
+# New logging system
+'rightsnone' => 'ahtlein',
+
 # Search suggestions
 'searchsuggest-search' => 'Tlatēmoliztli',
 
index 813d72d..8f63d34 100644 (file)
@@ -449,6 +449,7 @@ $messages = array(
 'newwindow' => '(åpnes i et nytt vindu)',
 'cancel' => 'Avbryt',
 'moredotdotdot' => 'Mer …',
+'morenotlisted' => 'Mer som ikke er oppført&nbsp;…',
 'mypage' => 'Min brukerside',
 'mytalk' => 'Min diskusjonsside',
 'anontalk' => 'Brukerdiskusjon for denne IP-adressen',
@@ -513,7 +514,7 @@ $messages = array(
 'unprotectthispage' => 'Endre beskyttelsen av denne siden',
 'newpage' => 'Ny side',
 'talkpage' => 'Diskuter denne siden',
-'talkpagelinktext' => 'Diskusjon',
+'talkpagelinktext' => 'diskusjon',
 'specialpage' => 'Spesialside',
 'personaltools' => 'Personlige verktøy',
 'postcomment' => 'Ny seksjon',
@@ -750,7 +751,7 @@ Ikke glem å endre [[Special:Preferences|innstillingene dine]] på {{SITENAME}}.
 'gotaccount' => 'Har du allerede en konto? $1.',
 'gotaccountlink' => 'Logg inn',
 'userlogin-resetlink' => 'Har du glemt påloggingsdetaljene dine?',
-'createaccountmail' => 'per e-post',
+'createaccountmail' => 'Bruk et midlertidig tilfeldig passord, og send det til e-postadressen nedenfor',
 'createaccountreason' => 'Årsak:',
 'badretype' => 'Passordene samsvarte ikke.',
 'userexists' => 'Brukernavnet er allerede i bruk.
@@ -819,6 +820,7 @@ Du kan ignorere denne beskjeden dersom kontoen ble opprettet ved en feil.',
 # E-mail sending
 'php-mail-error-unknown' => 'Ukjent feil i PHPs mail()-funksjon',
 'user-mail-no-addy' => 'Forsøkte å sende e-post uten e-postadresse',
+'user-mail-no-body' => 'Prøvde å sende e-post med tom eller for kort brødtekst.',
 
 # Change password dialog
 'resetpass' => 'Endre passord',
@@ -885,6 +887,7 @@ Midlertidig passord: $2',
 'changeemail-oldemail' => 'Nåværende e-postadresse:',
 'changeemail-newemail' => 'Ny e-postadresse:',
 'changeemail-none' => '(ingen)',
+'changeemail-password' => 'Ditt passord på {{SITENAME}}:',
 'changeemail-submit' => 'Endre e-post',
 'changeemail-cancel' => 'Avbryt',
 
@@ -1069,7 +1072,6 @@ Det siste loggelementet er oppgitt under som referanse:",
 'template-semiprotected' => '(halvbeskyttet)',
 'hiddencategories' => 'Denne siden er medlem av {{PLURAL:$1|1 skjult kategori|$1 skjulte kategorier}}:',
 'edittools' => '<!-- Teksten her vil vises under redigerings- og opplastingsboksene. -->',
-'nocreatetitle' => 'Sideoppretting er begrenset',
 'nocreatetext' => '{{SITENAME}} har begrensede muligheter for oppretting av nye sider. Du kan gå tilbake og redigere en eksisterende side, eller [[Special:UserLogin|logge inn eller opprette en ny konto]].',
 'nocreate-loggedin' => 'Du har ikke tillatelse til å opprette sider.',
 'sectioneditnotsupported-title' => 'Seksjonsredigering støttes ikke',
@@ -1462,9 +1464,9 @@ Dette kan ikke tilbakestilles.',
 'prefs-emailconfirm-label' => 'E-postbekreftelse:',
 'prefs-textboxsize' => 'Størrelse på redigeringsvindu',
 'youremail' => 'E-post:',
-'username' => 'Brukernavn:',
-'uid' => 'Bruker-ID:',
-'prefs-memberingroups' => 'Medlem i følgende {{PLURAL:$1|gruppe|grupper}}:',
+'username' => '{{GENDER:$1|Brukernavn}}:',
+'uid' => '{{GENDER:$1|Bruker-ID}}:',
+'prefs-memberingroups' => '{{GENDER:$2|Medlem}} i følgende {{PLURAL:$1|gruppe|grupper}}:',
 'prefs-registration' => 'Registreringstid:',
 'yourrealname' => 'Virkelig navn:',
 'yourlanguage' => 'Språk:',
@@ -1613,15 +1615,13 @@ Den kan maks inneholde $1 {{PLURAL:$1|tegn|tegn}}.',
 'right-sendemail' => 'Send e-post til andre brukere',
 'right-passwordreset' => 'Vis e-poster over tilbakestilte passord',
 
+# Special:Log/newusers
+'newuserlogpage' => 'Brukeropprettelseslogg',
+'newuserlogpagetext' => 'Dette er en logg over brukeropprettelser.',
+
 # User rights log
 'rightslog' => 'Brukerrettighetslogg',
 'rightslogtext' => 'Dette er en logg over endringer av brukerrettigheter.',
-'rightslogentry' => 'endret gruppe for $1 fra $2 til $3',
-'rightslogentry-autopromote' => 'ble automatisk forfremmet fra $2 til $3',
-'logentry-rights-rights' => '$1 endret gruppemedlemskap for $3 fra $4 til $5',
-'logentry-rights-rights-legacy' => '$1 endret gruppemedlemskap for $3',
-'logentry-rights-autopromote' => '$1 ble automatisk forfremmet fra $4 til $5',
-'rightsnone' => '(ingen)',
 
 # Associated actions - in the sentence "You do not have permission to X"
 'action-read' => 'se denne siden',
@@ -2244,7 +2244,7 @@ Se også [[Special:WantedCategories|ønskede kategorier]].',
 'linksearch-ok' => 'Søk',
 'linksearch-text' => 'Jokertegn slik som i «*.wikipedia.org» kan brukes.
 Det kreves at det oppgis minst et toppnivådomene, for eksempel «*.org».<br />
-Støttede protokoller: <code>$1</code> (ikke legg til noen av disse i søket ditt).',
+{{PLURAL:$2|Støttede protokoller}}: <code>$1</code> (ikke legg til noen av disse i søket ditt).',
 'linksearch-line' => '$1 lenkes fra $2',
 'linksearch-error' => 'Jokertegn kan kun brukes foran tjenernavnet.',
 
@@ -2263,10 +2263,6 @@ Støttede protokoller: <code>$1</code> (ikke legg til noen av disse i søket dit
 'activeusers-hidesysops' => 'Skjul administratorer',
 'activeusers-noresult' => 'Ingen brukere funnet.',
 
-# Special:Log/newusers
-'newuserlogpage' => 'Brukeropprettelseslogg',
-'newuserlogpagetext' => 'Dette er en logg over brukeropprettelser.',
-
 # Special:ListGroupRights
 'listgrouprights' => 'Rettigheter for brukergrupper',
 'listgrouprights-summary' => 'Følgende er en liste over brukergrupper som er definert på denne wikien, og hvilke rettigheter de har.
@@ -2332,8 +2328,8 @@ E-postadressen du har satt i [[Special:Preferences|innstillingene dine]] vil vis
 'watchnologin' => 'Ikke logget inn',
 'watchnologintext' => 'Du må være [[Special:UserLogin|logget inn]] for å kunne endre overvåkningslisten.',
 'addwatch' => 'Legg til i overvåkningslisten',
-'addedwatchtext' => "Siden «[[:$1]]» er lagt til [[Special:Watchlist|overvåkningslisten]].
-Fremtidige endringer til denne siden og den tilhørende diskusjonssiden blir listet opp her, og siden vil fremstå '''uthevet''' i [[Special:RecentChanges|listen over siste endringer]] for å gjøre det lettere å finne den.",
+'addedwatchtext' => 'Siden «[[:$1]]» er lagt til [[Special:Watchlist|overvåkningslisten]] din.
+Fremtidige endringer til denne siden og den tilhørende diskusjonssiden blir listet opp der.',
 'removewatch' => 'Fjern fra overvåkningslisten',
 'removedwatchtext' => 'Siden «[[:$1]]» er fjernet fra [[Special:Watchlist|overvåkningslisten din]].',
 'watch' => 'Overvåk',
@@ -2367,7 +2363,7 @@ Fremtidige endringer til denne siden og den tilhørende diskusjonssiden blir lis
 'enotif_subject_moved' => '{{SITENAME}}-siden $1 har blitt flyttet av {{gender:$2|$2}}',
 'enotif_subject_restored' => '{{SITENAME}}-siden $1 har blitt gjenopprettet av {{gender:$2|$2}}',
 'enotif_subject_changed' => '{{SITENAME}}-siden $1 har blitt endret av {{gender:$2|$2}}',
-'enotif_body_intro_deleted' => '{{SITENAME}}-siden $1 ble slettet $PAGEEDITDATE av {{gender:$2|$2}}. Se $3 for den nåværende versjonen.',
+'enotif_body_intro_deleted' => '{{SITENAME}}-siden $1 ble slettet $PAGEEDITDATE av {{gender:$2|$2}}; se $3.',
 'enotif_body_intro_created' => '{{SITENAME}}-siden $1 ble opprettet $PAGEEDITDATE av {{gender:$2|$2}}. Se $3 for den nåværende versjonen.',
 'enotif_body_intro_moved' => '{{SITENAME}}-siden $1 ble flyttet $PAGEEDITDATE av {{gender:$2|$2}}. Se $3 for den nåværende versjonen.',
 'enotif_body_intro_restored' => '{{SITENAME}}-siden $1 ble gjenopprettet $PAGEEDITDATE av {{gender:$2|$2}}. Se $3 for den nåværende versjonen.',
@@ -2402,6 +2398,8 @@ $UNWATCHURL
 
 Tilbakemelding og videre assistanse:
 {{canonicalurl:{{MediaWiki:Helppage}}}}',
+'created' => 'opprettet',
+'changed' => 'endret',
 
 # Delete
 'deletepage' => 'Slett side',
@@ -2467,6 +2465,8 @@ Se [[Special:ProtectedPages|listen over beskyttede sider]] for listen over gjeld
 'prot_1movedto2' => '[[$1]] flyttet til [[$2]]',
 'protect-badnamespace-title' => 'Navnerom som ikke kan beskyttes',
 'protect-badnamespace-text' => 'Sider i dette navnerommet kan ikke beskyttes.',
+'protect-norestrictiontypes-text' => 'Denne siden kan ikke beskyttes fordi det ikke er noen tilgjengelige begrensningstyper.',
+'protect-norestrictiontypes-title' => 'Ubeskyttbar side',
 'protect-legend' => 'Bekreft låsing',
 'protectcomment' => 'Årsak:',
 'protectexpiry' => 'Utløper:',
@@ -2481,9 +2481,9 @@ Dette er de nåværende innstillingene for siden '''$1''':",
 'protect-cascadeon' => 'Denne siden er for tiden beskyttet fordi den er inkludert på følgende {{PLURAL:$1|side|sider}} som har dypbeskyttelse slått på.
 Du kan endre sidens beskyttelsesnivå, men det vil ikke påvirke dypbeskyttelsen.',
 'protect-default' => 'Tillat alle brukere',
-'protect-fallback' => 'Må ha «$1»-tillatelse',
-'protect-level-autoconfirmed' => 'Blokker uregistrerte og nye brukere',
-'protect-level-sysop' => 'Kun administratorer',
+'protect-fallback' => 'Tillat kun brukere med tillatelsen «$1»',
+'protect-level-autoconfirmed' => 'Tillat kun autobekreftede brukere',
+'protect-level-sysop' => 'Tillat kun administratorer',
 'protect-summary-cascade' => 'dypbeskyttelse',
 'protect-expiring' => 'utløper $1 (UTC)',
 'protect-expiring-local' => 'løper ut $1',
@@ -2577,7 +2577,7 @@ $1',
 'blanknamespace' => '(Hoved)',
 
 # Contributions
-'contributions' => 'Brukerbidrag',
+'contributions' => '{{GENDER:$1|Brukerbidrag}}',
 'contributions-title' => 'Brukerbidrag av $1',
 'mycontris' => 'Bidrag',
 'contribsub2' => 'For $1 ($2)',
@@ -2958,6 +2958,7 @@ Lagre den på din egen datamaskin og last den opp her.',
 'import-error-interwiki' => 'Siden «$1» ble ikke importert fordi navnet er reservert for ekstern lenking (interwiki).',
 'import-error-special' => 'Siden «$1» ble ikke importert fordi den tilhører et spesialnavnerom som ikke tillater sider.',
 'import-error-invalid' => 'Siden «$1» ble ikke importert fordi navnet er ugyldig.',
+'import-error-unserialize' => 'Revisjon $2 av siden «$1» kunne ikke serialiseres. Det ble rapportert at revisjonen bruker innholdsmodellen $3 serialisert som $4.',
 'import-options-wrong' => 'Feil {{PLURAL:$2|opsjon|opsjoner}}: <nowiki>$1</nowiki>',
 'import-rootpage-invalid' => 'Den angitte grunnsiden har en ugyldig tittel.',
 'import-rootpage-nosubpage' => 'Navnerommet "$1" til grunnsiden tillater ikke undersider.',
@@ -3127,7 +3128,8 @@ Dette er sannsynligvis forårsaket av en lenke til et svartelistet eksternt nett
 'pageinfo-recent-authors' => 'Antall nylige forfattere',
 'pageinfo-magic-words' => '{{PLURAL:$1|Magisk|Magiske}} ord ($1)',
 'pageinfo-hidden-categories' => '{{PLURAL:$1|Skjult kategori|Skjulte kategorier}} ($1)',
-'pageinfo-templates' => 'Transkludert {{PLURAL:$1|mal|maler}} ($1)',
+'pageinfo-templates' => 'Transkluderte {{PLURAL:$1|mal|maler}} ($1)',
+'pageinfo-transclusions' => '{{PLURAL:$1|Sider}} transkludert på ($1)',
 'pageinfo-toolboxlink' => 'Sideinformasjon',
 'pageinfo-redirectsto' => 'Omdirigerer til',
 'pageinfo-redirectsto-info' => 'info',
@@ -3136,6 +3138,10 @@ Dette er sannsynligvis forårsaket av en lenke til et svartelistet eksternt nett
 'pageinfo-protect-cascading' => 'Dypbeskyttelse starter herfra',
 'pageinfo-protect-cascading-yes' => 'Ja',
 'pageinfo-protect-cascading-from' => 'Dypbeskyttelse fra',
+'pageinfo-category-info' => 'Kategoriinformasjon',
+'pageinfo-category-pages' => 'Antall sider',
+'pageinfo-category-subcats' => 'Antall underkategorier',
+'pageinfo-category-files' => 'Antall filer',
 
 # Skin names
 'skinname-standard' => 'Standard',
@@ -3191,6 +3197,7 @@ Ved å åpne den kan systemet ditt kompromitteres.",
 'file-nohires' => 'Ingen høyere oppløsning tilgjengelig.',
 'svg-long-desc' => 'SVG-fil, standardstørrelse $1 × $2 piksler, filstørrelse: $3',
 'svg-long-desc-animated' => 'Animert SVG-fil, standardstørrelse $1 × $2 piksler, filstørrelse: $3',
+'svg-long-error' => 'Ugyldig SVG-fil: $1',
 'show-big-image' => 'Full oppløsning',
 'show-big-image-preview' => 'Størrelse på denne forhåndsvisningen: $1.',
 'show-big-image-other' => '{{PLURAL:$2|Annen oppløsning|Andre oppløsninger}}: $1.',
@@ -3221,6 +3228,8 @@ Ved å åpne den kan systemet ditt kompromitteres.",
 'minutes' => '{{PLURAL:$1|$1 minutt|$1 minutter}}',
 'hours' => '{{PLURAL:$1|$1 time|$1 timer}}',
 'days' => '{{PLURAL:$1|$1 dag|$1 dager}}',
+'months' => '{{PLURAL:$1|$1 måned|$1 måneder}}',
+'years' => '{{PLURAL:$1|$1 år}}',
 'ago' => '$1 siden',
 'just-now' => 'nettopp',
 
@@ -3898,7 +3907,7 @@ Bilder vises med full oppløsning, mens andre filtyper startes direkte gjennom s
 'specialpages-group-highuse' => 'Ofte brukte sider',
 'specialpages-group-pages' => 'Sidelister',
 'specialpages-group-pagetools' => 'Sideverktøy',
-'specialpages-group-wiki' => 'Informasjon og verktøy for wikien',
+'specialpages-group-wiki' => 'Data og verktøy',
 'specialpages-group-redirects' => 'Omdirigerende spesialsider',
 'specialpages-group-spam' => 'Spamverktøy',
 
@@ -3995,8 +4004,12 @@ Bilder vises med full oppløsning, mens andre filtyper startes direkte gjennom s
 'logentry-newusers-newusers' => 'Kontoen $1 ble opprettet',
 'logentry-newusers-create' => 'Kontoen $1 ble opprettet',
 'logentry-newusers-create2' => 'Kontoen $3 ble opprettet av $1',
+'logentry-newusers-byemail' => 'Kontoen $3 ble opprettet av $1 og passordet sendt med e-post',
 'logentry-newusers-autocreate' => 'Konto $1 ble opprettet automatisk',
-'newuserlog-byemail' => 'passord sendt på e-post',
+'logentry-rights-rights' => '$1 endret gruppemedlemskap for $3 fra $4 til $5',
+'logentry-rights-rights-legacy' => '$1 endret gruppemedlemskap for $3',
+'logentry-rights-autopromote' => '$1 ble automatisk forfremmet fra $4 til $5',
+'rightsnone' => '(ingen)',
 
 # Feedback
 'feedback-bugornote' => 'Hvis du er klar til å sende inn en detaljert feilrapport, vennligst [$1 rapporter en feil].
@@ -4050,6 +4063,7 @@ Om det ikke er tilfellet, kan du bruke det enkle skjemaet som du finner under. K
 'api-error-ok-but-empty' => 'Intern feil: ingen svar fra server.',
 'api-error-overwrite' => 'Det er ikke tillatt å overskrive eksisterende filer.',
 'api-error-stashfailed' => 'Internal error: tjeneren greide ikke å lagre midlertidig fil.',
+'api-error-publishfailed' => 'Intern feil: Tjeneren greide ikke å publisere midlertidig fil.',
 'api-error-timeout' => 'Serveren svarte ikke innenfor forventet tid.',
 'api-error-unclassified' => 'En ukjent feil har oppstått',
 'api-error-unknown-code' => 'Ukjent feil: "$1"',
@@ -4070,6 +4084,4 @@ Om det ikke er tilfellet, kan du bruke det enkle skjemaet som du finner under. K
 'duration-centuries' => '$1 {{PLURAL:$1|århundre|århundrer}}',
 'duration-millennia' => '$1 {{PLURAL:$1|millennium|millennier}}',
 
-# Unknown messages
-'svg-long-error' => 'Ugyldig SVG-fil: $1',
 );
index 5051116..e2833ce 100644 (file)
@@ -63,8 +63,8 @@ $magicWords = array(
        'noeditsection'             => array( '0', '__KEENÄNNERNLINK__', '__ABSCHNITTE_NICHT_BEARBEITEN__', '__NOEDITSECTION__' ),
        'currentmonth'              => array( '1', 'AKTMAAND', 'JETZIGER_MONAT', 'JETZIGER_MONAT_2', 'CURRENTMONTH', 'CURRENTMONTH2' ),
        'currentmonthname'          => array( '1', 'AKTMAANDNAAM', 'JETZIGER_MONATSNAME', 'CURRENTMONTHNAME' ),
-       'currentmonthnamegen'       => array( '1', 'AKTMAANDNAAMGEN', 'JETZIGER_MONATSNAME_GENITIV', 'CURRENTMONTHNAMEGEN' ),
-       'currentday'                => array( '1', 'AKTDAG', 'JETZIGER_KALENDERTAG', 'CURRENTDAY' ),
+       'currentmonthnamegen'       => array( '1', 'AKTMAANDNAAMGEN', 'JETZIGER_MONATSNAME_GENITIV', 'JETZIGER_MONATSNAME_GEN', 'CURRENTMONTHNAMEGEN' ),
+       'currentday'                => array( '1', 'AKTDAG', 'JETZIGER_KALENDERTAG', 'JETZIGER_TAG', 'CURRENTDAY' ),
        'currentdayname'            => array( '1', 'AKTDAGNAAM', 'JETZIGER_WOCHENTAG', 'CURRENTDAYNAME' ),
        'currentyear'               => array( '1', 'AKTJOHR', 'JETZIGES_JAHR', 'CURRENTYEAR' ),
        'currenttime'               => array( '1', 'AKTTIED', 'JETZIGE_UHRZEIT', 'CURRENTTIME' ),
@@ -874,7 +874,6 @@ Bruker mit Sysop-Rechten doran arbeiden könnt.'''",
 'template-semiprotected' => '(half-schuult)',
 'hiddencategories' => 'Disse Siet steiht in {{PLURAL:$1|ene verstekene Kategorie|$1 verstekene Kategorien}}:',
 'edittools' => '<!-- Disse Text warrt ünner de Finstern för dat Ännern un Hoochladen wiest. -->',
-'nocreatetitle' => 'Opstellen vun ne’e Sieden is inschränkt.',
 'nocreatetext' => '{{SITENAME}} verlööft di dat Opstellen vun ne’e Sieden nich. Du kannst blot Sieden ännern, de al dor sünd, oder du musst di [[Special:UserLogin|anmellen]].',
 'nocreate-loggedin' => 'Du hest keen Verlööf, ne’e Sieden antoleggen.',
 'permissionserrors' => 'Fehlers mit de Rechten',
@@ -1342,11 +1341,13 @@ Dat kann nich wedder ungeschehn maakt warrn.',
 'right-siteadmin' => 'Datenbank sperren un wedder apen maken',
 'right-override-export-depth' => 'Exporteer Sieden, lenkt Sieden inslaten bet to en Deepd vun 5',
 
+# Special:Log/newusers
+'newuserlogpage' => 'Ne’e-Bruker-Logbook',
+'newuserlogpagetext' => 'Dit is dat Logbook för nee opstellte Brukerkonten.',
+
 # User rights log
 'rightslog' => 'Brukerrechten-Logbook',
 'rightslogtext' => 'In dit Logbook staht Ännern an de Brukerrechten.',
-'rightslogentry' => 'Grupp bi $1 vun $2 op $3 ännert.',
-'rightsnone' => '(kene)',
 
 # Associated actions - in the sentence "You do not have permission to X"
 'action-read' => 'de Sied to lesen',
@@ -1807,10 +1808,6 @@ Kiek ok bi de [[Special:WantedCategories|wünschten Kategorien]].',
 'activeusers-hidesysops' => 'Administraters nich wiesen',
 'activeusers-noresult' => 'Keen Brukers funnen.',
 
-# Special:Log/newusers
-'newuserlogpage' => 'Ne’e-Bruker-Logbook',
-'newuserlogpagetext' => 'Dit is dat Logbook för nee opstellte Brukerkonten.',
-
 # Special:ListGroupRights
 'listgrouprights' => 'Brukergruppen-Rechten',
 'listgrouprights-summary' => 'Dit is en List vun de Brukergruppen, de in dit Wiki defineert sünd, un de Rechten, de dor mit verbunnen sünd.
@@ -1918,6 +1915,8 @@ Du kriggst solang keen Bescheedgeev-E-Mails mehr, bet dat du de Siet wedder bes
 
 --
 De Instellungen vun dien Oppasslist to ännern, gah na: {{canonicalurl:Special:Watchlist/edit}}',
+'created' => 'opstellt',
+'changed' => 'ännert',
 
 # Delete
 'deletepage' => 'Siet wegsmieten',
@@ -3089,6 +3088,6 @@ Geev den Dateinaam ahn den Tosatz „{{ns:file}}:“ an.',
 # New logging system
 'revdelete-restricted' => 'Inschränkungen för Administraters instellt',
 'revdelete-unrestricted' => 'Inschränkungen för Administraters rutnahmen',
-'newuserlog-byemail' => 'Passwoord per E-Mail toschickt',
+'rightsnone' => '(kene)',
 
 );
index acaca93..06841f0 100644 (file)
@@ -1,5 +1,5 @@
 <?php
-/** Nedersaksies (Nedersaksies)
+/** Low Saxon (Netherlands) (Nedersaksies)
  *
  * See MessagesQqq.php for message documentation incl. usage of parameters
  * To improve a translation please visit http://translatewiki.net
@@ -1047,7 +1047,6 @@ De leste logboekregel steet hieronder:",
 'template-semiprotected' => '(half-beveiligd)',
 'hiddencategories' => 'Disse zied völt in de volgende verbörgen {{PLURAL:$1|kategorie|kategorieën}}:',
 'edittools' => '<!-- Disse tekste steet onder de bewarkings- en bestaandinlaodformulieren. -->',
-'nocreatetitle' => 't Anmaken van nieje ziejen is beteund',
 'nocreatetext' => 'Disse webstee hef de meugelikheid um nieje ziejen an te maken beteund. Je kunnen ziejen die al bestaon wiezigen of je kunnen je [[Special:UserLogin|anmelden of n gebrukerszied anmaken]].',
 'nocreate-loggedin' => 'Je hebben gien toestemming um nieje ziejen an te maken.',
 'sectioneditnotsupported-title' => 't Bewarken van seksies wörden niet ondersteund',
@@ -1579,12 +1578,13 @@ Disse informasie is zichtbaor veur aandere gebrukers.',
 'right-sendemail' => 'Bericht versturen naor aandere gebrukers',
 'right-passwordreset' => 'Bekiek netpostberichten veur t opniej instellen van joew wachtwoord',
 
+# Special:Log/newusers
+'newuserlogpage' => 'Logboek mit anwas',
+'newuserlogpagetext' => 'Hieronder staon de niej in-eschreven gebrukers',
+
 # User rights log
 'rightslog' => 'Gebrukersrechtenlogboek',
 'rightslogtext' => 'Dit is n logboek mit veraanderingen van gebrukersrechten',
-'rightslogentry' => 'Gebrukersrechten veur $1 ewiezigd van $2 naor $3',
-'rightslogentry-autopromote' => 'was automaties umhoge egaon van $2 naor $3',
-'rightsnone' => '(gien)',
 
 # Associated actions - in the sentence "You do not have permission to X"
 'action-read' => 'disse zied lezen',
@@ -2218,10 +2218,6 @@ Ondersteunde protokollen: <code>$1</code> (zet t niet in joew zeukopdrachte).',
 'activeusers-hidesysops' => 'Beheerders verbargen',
 'activeusers-noresult' => 'Gien aktieve gebrukers evunnen.',
 
-# Special:Log/newusers
-'newuserlogpage' => 'Logboek mit anwas',
-'newuserlogpagetext' => 'Hieronder staon de niej in-eschreven gebrukers',
-
 # Special:ListGroupRights
 'listgrouprights' => 'Rechten van gebrukersgroepen',
 'listgrouprights-summary' => "Op disse zied staon de gebrukersgroepen van disse wiki beschreven, mit de biebeheurende rechten.
@@ -2350,6 +2346,8 @@ $UNWATCHURL
 
 Opmarkingen en veerdere hulpe:
 {{canonicalurl:{{MediaWiki:Helppage}}}}',
+'created' => 'an-emaakt',
+'changed' => 'ewiezigd',
 
 # Delete
 'deletepage' => 'Vortdoon',
@@ -3885,7 +3883,7 @@ Aandere bestaandstypen wörden gelieke in t mit t MIME-type verbunnen programma
 'logentry-newusers-create' => '$1 hef n gebruker an-emaakt',
 'logentry-newusers-create2' => '$1 hef n gebruker $3 an-emaakt',
 'logentry-newusers-autocreate' => 'De gebruker $1 is automaties an-emaakt',
-'newuserlog-byemail' => 'wachtwoord is verstuurd via de netpost',
+'rightsnone' => '(gien)',
 
 # Feedback
 'feedback-bugornote' => 'A\'j zovere bin um n technies probleem nauwkeurig te beschrieven, [$1 meld dan n programmafout].
index 9088513..512ed32 100644 (file)
@@ -788,7 +788,6 @@ $2
 'hiddencategories' => 'यो पृष्ठ निम्न {{PLURAL:$1|1 लुकाइएको श्रेणी|$1 लुकाइएका श्रेणीहरु}}को सदस्य हो :',
 'edittools' => '<!-- Text here will be shown below edit and upload forms. -->',
 'edittools-upload' => '-',
-'nocreatetitle' => 'पृष्ठ सृजना सीमित गरिएको',
 'nocreatetext' => '{{SITENAME}} ले नयाँ पृष्ठ सृजना गर्न सक्ने क्षमतामा रोक लगाएको छ।
 तपाईँ पछाडि जानु भइ रहिआएको पृष्ठ सम्पादन गर्नसक्नुहुन्छ , अथवा [[Special:UserLogin|प्रवेश गर्नुहोस या नयाँ खाता सृजना गर्नुहोस् ]]।',
 'nocreate-loggedin' => 'नयाँ पृष्ठ सृजनागर्नको लागि तपाईँलाई अनुमति छैन ।',
@@ -1306,12 +1305,12 @@ HTML ट्यागहरु जाँच्नुहोस् ।',
 'right-sendemail' => 'अन्य प्रयोगकर्ताहरुलाई इमेल गर्ने',
 'right-passwordreset' => 'पासवर्ड परिवर्तन गर्ने ईमेलहरु हेर्नुहोस',
 
+# Special:Log/newusers
+'newuserlogpage' => 'प्रयोगकर्ता श्रृजना लग',
+
 # User rights log
 'rightslog' => 'प्रयोगकर्ता अधिकार लग',
 'rightslogtext' => 'यो प्रयोगकर्ता अधिकारहरुको परिवर्तन लग हो ।',
-'rightslogentry' => '$1 समूह सदस्याता $2 बाट $3 मा परिवर्तन गरिएको छ',
-'rightslogentry-autopromote' => ' $2 बाट $3 मा स्वत: बढुवा गरिएको छ',
-'rightsnone' => '(कुनैपनि होइन)',
 
 # Associated actions - in the sentence "You do not have permission to X"
 'action-read' => 'यो पृष्ठ पढ्ने',
@@ -1813,9 +1812,6 @@ $1',
 'activeusers-hidesysops' => 'प्रबन्धकहरु लुकाउने',
 'activeusers-noresult' => 'प्रयोगकर्ताहरु भेटिएनन्।',
 
-# Special:Log/newusers
-'newuserlogpage' => 'प्रयोगकर्ता श्रृजना लग',
-
 # Special:ListGroupRights
 'listgrouprights' => 'प्रयोगकर्ता समूह अधिकार',
 'listgrouprights-summary' => 'निम्न सूची यस विकिमा परिभाषित समूहहरु र तिनीहरुले प्रयोगगर्न सक्ने संबद्ध  अधिकारहरुको हो।
@@ -1940,6 +1936,8 @@ $UNWATCHURL
 
 प्रतिक्रिया र अन्य सहयोगको निम्ति:
 {{canonicalurl:{{MediaWiki:Helppage}}}}',
+'created' => 'बनाइएको',
+'changed' => 'परिवर्तन भइसकेको',
 
 # Delete
 'deletepage' => 'पृष्ठ मेट्नुहोस्',
@@ -3434,7 +3432,7 @@ $5
 'revdelete-restricted' => 'प्रबन्धकहरुमाथि सीमितता लागू गरियो',
 'revdelete-unrestricted' => 'प्रवन्धककोलागि निषेधहरु हटाइयो ।',
 'logentry-move-move' => '$1 द्वारा $3 पृष्ठलाई $4 मा सारियो',
-'newuserlog-byemail' => 'इ मेलबाट पठाइएको प्रवेशशव्द',
+'rightsnone' => '(कुनैपनि होइन)',
 
 # Feedback
 'feedback-subject' => 'विषय:',
index 323c35f..81c4b42 100644 (file)
@@ -172,7 +172,7 @@ $magicWords = array(
        'img_middle'                => array( '1', 'midden', 'middle' ),
        'img_bottom'                => array( '1', 'beneden', 'bottom' ),
        'img_text_bottom'           => array( '1', 'tekst-beneden', 'text-bottom' ),
-       'img_link'                  => array( '1', 'verwijzing=$1', 'link=$1' ),
+       'img_link'                  => array( '1', 'koppeling=$1', 'verwijzing=$1', 'link=$1' ),
        'sitename'                  => array( '1', 'SITENAAM', 'SITENAME' ),
        'ns'                        => array( '0', 'NR:', 'NS:' ),
        'nse'                       => array( '0', 'NRE:', 'NSE:' ),
@@ -212,7 +212,7 @@ $magicWords = array(
        'displaytitle'              => array( '1', 'WEERGEGEVENTITEL', 'TOONTITEL', 'DISPLAYTITLE' ),
        'rawsuffix'                 => array( '1', 'V', 'R' ),
        'newsectionlink'            => array( '1', '__NIEUWESECTIELINK__', '__NIEUWESECTIEKOPPELING__', '__NEWSECTIONLINK__' ),
-       'nonewsectionlink'          => array( '1', '__GEENNIEUWESECTIELINK__', '__GEENNIEUWKOPJEVERWIJZING__', '__NONEWSECTIONLINK__' ),
+       'nonewsectionlink'          => array( '1', '__GEENNIEUWKOPJEKOPPELING__', '__GEENNIEUWESECTIELINK__', '__GEENNIEUWKOPJEVERWIJZING__', '__NONEWSECTIONLINK__' ),
        'currentversion'            => array( '1', 'HUIDIGEVERSIE', 'CURRENTVERSION' ),
        'urlencode'                 => array( '0', 'URLCODEREN', 'CODEERURL', 'URLENCODE:' ),
        'anchorencode'              => array( '0', 'ANKERCODEREN', 'CODEERANKER', 'ANCHORENCODE' ),
@@ -354,7 +354,7 @@ $linkTrail = '/^([a-zäöüïëéèà]+)(.*)$/sDu';
 
 $messages = array(
 # User preference toggles
-'tog-underline' => 'Verwijzingen onderstrepen:',
+'tog-underline' => 'Koppelingen onderstrepen:',
 'tog-justify' => "Alinea's uitvullen",
 'tog-hideminor' => 'Kleine wijzigingen verbergen in recente wijzigingen',
 'tog-hidepatrolled' => 'Gemarkeerde wijzigingen verbergen in recente wijzigingen',
@@ -382,10 +382,10 @@ $messages = array(
 'tog-enotifrevealaddr' => 'Mijn e-mailadres weergeven in e-mailberichten',
 'tog-shownumberswatching' => 'Het aantal gebruikers weergeven dat deze pagina volgt',
 'tog-oldsig' => 'Bestaande ondertekening:',
-'tog-fancysig' => 'Als wikitekst behandelen (zonder automatische verwijzing)',
+'tog-fancysig' => 'Als wikitekst behandelen (zonder automatische koppeling)',
 'tog-externaleditor' => 'Standaard een externe tekstbewerker gebruiken (alleen voor experts - voor deze functie zijn speciale instellingen nodig. [//www.mediawiki.org/wiki/Manual:External_editors Meer informatie]).',
 'tog-externaldiff' => 'Standaard een extern vergelijkingsprogramma gebruiken (alleen voor experts - voor deze functie zijn speciale instellingen nodig. [//www.mediawiki.org/wiki/Manual:External_editors Meer informatie]).',
-'tog-showjumplinks' => '"ga naar"-toegankelijkheidsverwijzingen inschakelen',
+'tog-showjumplinks' => '"ga naar"-toegankelijkheidskoppelingen inschakelen',
 'tog-uselivepreview' => '"live voorvertoning" gebruiken (vereist JavaScript – experimenteel)',
 'tog-forceeditsummary' => 'Een melding geven bij een lege bewerkingssamenvatting',
 'tog-watchlisthideown' => 'Eigen bewerkingen op mijn volglijst verbergen',
@@ -480,13 +480,14 @@ $messages = array(
 'listingcontinuesabbrev' => 'meer',
 'index-category' => "Te indexeren pagina's",
 'noindex-category' => "Niet te indexeren pagina's",
-'broken-file-category' => "Pagina's met onjuiste bestandsverwijzingen",
+'broken-file-category' => "Pagina's met onjuiste bestandskoppelingen",
 
 'about' => 'Over',
 'article' => 'Pagina',
 'newwindow' => '(opent in een nieuw venster)',
 'cancel' => 'Annuleren',
 'moredotdotdot' => 'Meer…',
+'morenotlisted' => 'Meer niet in de lijst...',
 'mypage' => 'Gebruikerspagina',
 'mytalk' => 'Overleg',
 'anontalk' => 'Overlegpagina voor dit IP-adres',
@@ -533,7 +534,7 @@ $messages = array(
 'history_short' => 'Geschiedenis',
 'updatedmarker' => 'bewerkt sinds mijn laatste bezoek',
 'printableversion' => 'Printervriendelijke versie',
-'permalink' => 'Permanente verwijzing',
+'permalink' => 'Permanente koppeling',
 'print' => 'Afdrukken',
 'view' => 'Lezen',
 'edit' => 'Bewerken',
@@ -576,7 +577,7 @@ $messages = array(
 'jumpto' => 'Ga naar:',
 'jumptonavigation' => 'navigatie',
 'jumptosearch' => 'zoeken',
-'view-pool-error' => 'Sorry, de servers zijn op het moment overbelast.
+'view-pool-error' => 'De servers zijn op het moment helaas overbelast.
 Te veel gebruikers proberen deze pagina te bekijken.
 Wacht alstublieft even voordat u opnieuw toegang probeert te krijgen tot deze pagina.
 
@@ -663,7 +664,7 @@ Meer informatie is beschikbaar op de pagina [[Special:Version|softwareversie]].'
 # Main script and global functions
 'nosuchaction' => 'Opgegeven handeling bestaat niet',
 'nosuchactiontext' => 'De opdracht in de URL is ongeldig.
-Mogelijk heeft u een typefout gemaakt in de URL of een onjuiste verwijzing gevolgd.
+Mogelijk heeft u een typefout gemaakt in de URL of een onjuiste koppeling gevolgd.
 Het kan ook wijzen op een fout in de software van {{SITENAME}}.',
 'nosuchspecialpage' => 'Deze speciale pagina bestaat niet',
 'nospecialpagetext' => '<strong>U hebt een onbestaande speciale pagina opgevraagd.</strong>
@@ -692,7 +693,7 @@ De database gaf de volgende foutmelding: "$3: $4"',
 De beheerder heeft de volgende reden opgegeven: $1',
 'missing-article' => 'In de database is geen inhoud aangetroffen voor de pagina "$1" die er wel zou moeten zijn ($2).
 
-Dit kan voorkomen als u een verouderde verwijzing naar het verschil tussen twee versies van een pagina volgt of een versie opvraagt die is verwijderd.
+Dit kan voorkomen als u een verouderde koppeling naar het verschil tussen twee versies van een pagina volgt of een versie opvraagt die is verwijderd.
 
 Als dit niet het geval is, hebt u wellicht een fout in de software gevonden.
 Maak hiervan melding bij een [[Special:ListUsers/sysop|beheerder]] van {{SITENAME}} en vermeld daarbij de URL van deze pagina.',
@@ -718,7 +719,7 @@ Mogelijk is deze al door iemand anders verwijderd.',
 'delete-hook-aborted' => 'Het verwijderen is afgebroken door een hook.
 Er is geen toelichting beschikbaar.',
 'badtitle' => 'Ongeldige paginanaam',
-'badtitletext' => 'De naam van de opgevraagde pagina was ongeldig, leeg of bevatte een verkeerde intertaal- of interwikinaamverwijzing.
+'badtitletext' => 'De naam van de opgevraagde pagina was ongeldig, leeg of bevatte een verkeerde intertaal- of interwikikoppeling.
 Wellicht bevat de paginanaam niet toegestane tekens.',
 'perfcached' => 'Deze gegevens komen uit een cache en zijn mogelijk niet actueel. Er {{PLURAL:$1|is maximaal één resultaat|zijn maximaal $1 resultaten}} beschikbaar in de cache.',
 'perfcachedts' => 'Deze gegevens komen uit een cache die voor het laatst is bijgewerkt op $2 om $3. Er {{PLURAL:$4|is maximaal één resultaat|zijn maximaal $4 resultaten}} beschikbaar in de cache.',
@@ -740,7 +741,7 @@ Probeer het over een aantal minuten opnieuw.',
 Gebruik [//translatewiki.net/ translatewiki.net], het vertaalproject voor MediaWiki, om vertalingen voor alle wiki's toe te voegen of te wijzigen.",
 'editinginterface' => "'''Waarschuwing:''' u bewerkt een pagina die interfacetekst voor de software bevat.
 Bewerkingen op deze pagina beïnvloeden de gebruikersinterface van iedereen op deze wiki.
-Om vertalingen toe te voegen of te wijzigen voor alle wiki's, gebruik [//translatewiki.net/ translatewiki.net], het vertaalproject voor MediaWiki.",
+Gebruik [//translatewiki.net/ translatewiki.net], het vertaalproject voor MediaWiki, om vertalingen toe te voegen of te wijzigen voor alle wiki's.",
 'sqlhidden' => '(SQL-zoekopdracht verborgen)',
 'cascadeprotected' => "Deze pagina kan niet bewerkt worden, omdat die is opgenomen in de volgende {{PLURAL:$1|pagina|pagina's}} die beveiligd {{PLURAL:$1|is|zijn}} met de cascade-optie:
 $2",
@@ -793,7 +794,7 @@ Vergeet niet uw [[Special:Preferences|voorkeuren voor {{SITENAME}}]] aan te pass
 'gotaccount' => 'Hebt u al een gebruikersnaam? $1.',
 'gotaccountlink' => 'Aanmelden',
 'userlogin-resetlink' => 'Bent u uw aanmeldgegevens vergeten?',
-'createaccountmail' => 'Per e-mail',
+'createaccountmail' => 'Gebruik een tijdelijk willekeurig wachtwoord en stuur het naar het e-mailadres dat hieronder is vermeld',
 'createaccountreason' => 'Reden:',
 'badretype' => 'De ingevoerde wachtwoorden verschillen van elkaar.',
 'userexists' => 'De gekozen gebruikersnaam is al in gebruik.
@@ -816,7 +817,7 @@ Gebruikersnamen zijn hoofdlettergevoelig.
 Controleer de schrijfwijze of [[Special:UserLogin/signup|maak een nieuwe gebruiker aan]].',
 'nosuchusershort' => 'De gebruiker "$1" bestaat niet.
 Controleer de schrijfwijze.',
-'nouserspecified' => 'U dient een gebruikersnaam op te geven.',
+'nouserspecified' => 'Geef een gebruikersnaam op.',
 'login-userblocked' => 'Deze gebruiker is geblokkeerd.
 Aanmelden is niet mogelijk.',
 'wrongpassword' => 'Het ingegeven wachtwoord is onjuist.
@@ -850,8 +851,8 @@ Tot die tijd kunnen er geen e-mails naar het e-mailadres gezonden worden.',
 'throttled-mailpassword' => 'In {{PLURAL:$1|het laatste uur|de laatste $1 uur}} is er al een wachtwoordherinnering verzonden.
 Om misbruik te voorkomen wordt er slechts één wachtwoordherinnering per {{PLURAL:$1|uur|$1 uur}} verzonden.',
 'mailerror' => 'Fout bij het verzenden van e-mail: $1',
-'acct_creation_throttle_hit' => 'Bezoekers van deze wiki met hetzelfde IP-adres als u hebben de afgelopen dag {{PLURAL:$1|al 1 gebruiker|al $1 gebruikers}} geregistreerd, wat het maximale aantal in deze periode is.
-Daarom kunt u als vanaf uw IP-adres op dit moment geen nieuwe gebruiker registreren.',
+'acct_creation_throttle_hit' => 'Bezoekers van deze wiki met hetzelfde IP-adres als u hebben de afgelopen dag al $1 gebruiker{{PLURAL:$1||s}} geregistreerd, wat het maximale aantal in deze periode is.
+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.',
@@ -879,6 +880,7 @@ Wacht even voordat u het opnieuw probeert.',
 # E-mail sending
 'php-mail-error-unknown' => 'Er is een onbekende fout opgetreden in de mail()-functie van PHP',
 'user-mail-no-addy' => 'Geprobeerd een e-mail te verzenden zonder een e-mailadres.',
+'user-mail-no-body' => 'Er is geprobeerd een e-mail te verzenden zonder inhoud of met een hele korte inhoud.',
 
 # Change password dialog
 'resetpass' => 'Wachtwoord wijzigen',
@@ -940,6 +942,7 @@ Tijdelijk wachtwoord: $2',
 'changeemail-oldemail' => 'Huidig e-mailadres:',
 'changeemail-newemail' => 'Nieuw e-mailadres:',
 'changeemail-none' => '(geen)',
+'changeemail-password' => 'Uw wachtwoord voor {{SITENAME}}:',
 'changeemail-submit' => 'E-mailadres wijzigen',
 'changeemail-cancel' => 'Annuleren',
 
@@ -949,9 +952,9 @@ Tijdelijk wachtwoord: $2',
 'italic_sample' => 'Schuingedrukte tekst',
 'italic_tip' => 'Schuin',
 'link_sample' => 'Onderwerp',
-'link_tip' => 'Interne verwijzing',
-'extlink_sample' => 'http://www.example.com verwijzingstekst',
-'extlink_tip' => 'Externe verwijzing (vergeet http:// niet)',
+'link_tip' => 'Interne koppeling',
+'extlink_sample' => 'http://www.example.com koppelingstekst',
+'extlink_tip' => 'Externe koppeling (vergeet http:// niet)',
 'headline_sample' => 'Deelonderwerp',
 'headline_tip' => 'Tussenkopje (hoogste niveau)',
 'nowiki_sample' => 'Voer hier de niet op te maken tekst in',
@@ -959,7 +962,7 @@ Tijdelijk wachtwoord: $2',
 'image_sample' => 'Voorbeeld.png',
 'image_tip' => 'Mediabestand',
 'media_sample' => 'Voorbeeld.ogg',
-'media_tip' => 'Verwijzing naar bestand',
+'media_tip' => 'Koppeling naar bestand',
 'sig_tip' => 'Uw handtekening met datum en tijd',
 'hr_tip' => 'Horizontale lijn (gebruik spaarzaam)',
 
@@ -977,9 +980,9 @@ Tijdelijk wachtwoord: $2',
 Uw IP-adres wordt opgeslagen als u wijzigingen op deze pagina maakt.",
 'anonpreviewwarning' => "''U bent niet aangemeld.''
 ''Door uw bewerking op te slaan wordt uw IP-adres opgeslagen in de paginageschiedenis.''",
-'missingsummary' => "'''Herinnering:''' u hebt geen bewerkingssamenvatting opgegeven.
+'missingsummary' => "'''Let op:''' u hebt geen bewerkingssamenvatting opgegeven.
 Als u nogmaals op \"{{int:savearticle}}\" klikt wordt de bewerking zonder samenvatting opgeslagen.",
-'missingcommenttext' => 'Plaats uw opmerking hieronder.',
+'missingcommenttext' => 'Plaats uw reactie hieronder.',
 'missingcommentheader' => "'''Let op:''' u hebt geen onderwerp/kop voor deze opmerking opgegeven.
 Als u opnieuw op \"{{int:savearticle}}\" klikt, wordt uw wijziging zonder een onderwerp/kop opgeslagen.",
 'summary-preview' => 'Bewerkingssamenvatting nakijken:',
@@ -1016,7 +1019,7 @@ Vermeld alle bovenstaande gegevens als u ergens op deze blokkade reageert.',
 'blockednoreason' => 'geen reden opgegeven',
 'whitelistedittext' => "U moet $1 om pagina's te bewerken.",
 'confirmedittext' => 'U moet uw e-mailadres bevestigen voor u kunt bewerken.
-Voer uw e-mailadres in en bevestig het via [[Special:Preferences|uw voorkeuren]].',
+Voer uw e-mailadres in en bevestig het via uw [[Special:Preferences|voorkeuren]].',
 'nosuchsectiontitle' => 'Deze subkop bestaat niet',
 'nosuchsectiontext' => 'U probeerde een subkopje te bewerken dat niet bestaat.
 Wellicht is het verplaatst of verwijderd terwijl u de pagina aan het bekijken was.',
@@ -1031,7 +1034,7 @@ Het wachtwoord voor deze nieuwe gebruiker kan gewijzigd worden via de pagina ''[
 'newarticletext' => "Deze pagina bestaat niet.
 Typ in het onderstaande veld om de pagina aan te maken (meer informatie staat op de [[{{MediaWiki:Helppage}}|hulppagina]]).
 Gebruik de knop '''vorige''' in uw browser als u hier per ongeluk terecht bent gekomen.",
-'anontalkpagetext' => "----''Deze overlegpagina hoort bij een anonieme gebruiker die hetzij geen gebruikersnaam heeft, hetzij deze niet gebruikt.
+'anontalkpagetext' => "----''Deze overlegpagina hoort bij een anonieme gebruiker die geen gebruikersnaam heeft of deze niet gebruikt.
 Daarom wordt het IP-adres ter identificatie gebruikt.
 Het is mogelijk dat meerdere personen hetzelfde IP-adres gebruiken.
 Mogelijk ontvangt u hier berichten die niet voor u bedoeld zijn.
@@ -1043,9 +1046,9 @@ U kunt [[Special:Search/{{PAGENAME}}|naar deze term zoeken]] in andere pagina\'s
 <span class="plainlinks">[{{fullurl:{{#Special:Log}}|page={{FULLPAGENAMEE}}}} de logboeken doorzoeken]</span>, maar u mag de pagina niet aanmaken.',
 'missing-revision' => 'De versie #$1 van de pagina "{{PAGENAME}} bestaat niet.
 
-Dit wordt meestal veroorzaakt door het volgen van een verouderde verwijzing naar een pagina die is verwijderd.
+Dit wordt meestal veroorzaakt door het volgen van een verouderde koppeling naar een pagina die is verwijderd.
 Meer gegevens zijn mogelijk te vinden in het [{{fullurl:{{#Special:Log}}/delete|page={{FULLPAGENAMEE}}}} verwijderlogboek].',
-'userpage-userdoesnotexist' => 'U bewerkt een gebruikerspagina van een gebruiker die niet bestaat (gebruiker "<nowiki>$1</nowiki>").
+'userpage-userdoesnotexist' => 'U bewerkt een gebruikerspagina van een gebruiker die niet bestaat (gebruiker "$1").
 Controleer of u deze pagina wel wilt aanmaken of bewerken.',
 'userpage-userdoesnotexist-view' => 'De gebruiker "$1" is niet geregistreerd.',
 'blocked-notice-logextract' => 'Deze gebruiker is op het moment geblokkeerd.
@@ -1131,7 +1134,6 @@ De laatste logboekregel staat hieronder:",
 'template-semiprotected' => '(semibeveiligd)',
 'hiddencategories' => 'Deze pagina valt in de volgende verborgen {{PLURAL:$1|categorie|categorieën}}:',
 'edittools' => '<!-- Deze tekst wordt weergegeven onder bewerkings- en uploadformulieren. -->',
-'nocreatetitle' => "Het aanmaken van pagina's is beperkt",
 'nocreatetext' => "{{SITENAME}} heeft de mogelijkheid om nieuwe pagina's te maken beperkt.
 U kunt reeds bestaande pagina's wijzigen of u kunt [[Special:UserLogin|zich aanmelden of registreren]].",
 'nocreate-loggedin' => "U hebt geen rechten om nieuwe pagina's te maken.",
@@ -1311,15 +1313,15 @@ $1",
 'deletedhist' => 'verwijderde geschiedenis',
 'revdelete-hide-current' => 'Er is een fout opgetreden bij het verbergen van het object van $1 om $2 uur: dit is de huidige versie.
 Deze versie kan niet verborgen worden.',
-'revdelete-show-no-access' => 'Er is een fout opgetreden bij het weergeven van het object van $1 om $2 uur: dit object is gemarkeerd als "beschermd".
+'revdelete-show-no-access' => 'Er is een fout opgetreden tijdens het weergeven van het object van $1 om $2: dit object is gemarkeerd als "beschermd".
 U hebt geen toegang tot dit object.',
-'revdelete-modify-no-access' => 'Er is een fout opgetreden bij het wijzigen van het object van $1 om $2 uur: dit object is gemarkeerd als "beschermd".
+'revdelete-modify-no-access' => 'Er is een fout opgetreden tijdens het wijzigen van het object van $1 om $2: dit object is gemarkeerd als "beschermd".
 U hebt geen toegang tot dit object.',
 'revdelete-modify-missing' => 'Er is een fout opgetreden bij het wijzigen van versienummer $1: het komt niet voor in de database!',
 'revdelete-no-change' => "'''Waarschuwing:''' het object van $1 om $2 uur had al de aangegeven zichtbaarheidsinstellingen.",
-'revdelete-concurrent-change' => 'Er is een fout opgetreden bij het wijzigen van het object van $1 om $2 uur: de status is inmiddels gewijzigd door iemand anders.
+'revdelete-concurrent-change' => 'Er is een fout opgetreden bij het wijzigen van het object van $1 om $2: de status is inmiddels gewijzigd door iemand anders.
 Controleer de logboeken.',
-'revdelete-only-restricted' => 'Er is een fout opgetreden bij het verbergen van het item van $1, $2: u kunt geen items onderdrukken uit het zicht van beheerders zonder ook een van de andere zichtbaarheidsopties te selecteren.',
+'revdelete-only-restricted' => 'Er is een fout opgetreden tijdens het verbergen van het item van $1, $2: u kunt geen items onderdrukken uit het zicht van beheerders zonder ook een van de andere zichtbaarheidsopties te selecteren.',
 'revdelete-reason-dropdown' => '* Veel voorkomende redenen voor verwijderen
 ** Auteursrechtenschending
 ** Onbetamelijke reactie of persoonlijke gegevens
@@ -1345,7 +1347,7 @@ Zorg dat deze wijziging de geschiedenisdoorlopendheid van de pagina behoudt.',
 'mergehistory-list' => 'Samenvoegbare bewerkingsgeschiedenis',
 'mergehistory-merge' => 'De volgende versies van [[:$1]] kunnen samengevoegd worden naar [[:$2]].
 Gebruik de kolom met keuzerondjes om alleen de versies gemaakt op en voor de aangegeven tijd samen te voegen.
-Let op dat het gebruiken van de navigatieverwijzingen deze kolom opnieuw instelt.',
+Let op dat het gebruiken van de navigatiekoppelingen deze kolom opnieuw instelt.',
 'mergehistory-go' => 'Samenvoegbare bewerkingen bekijken',
 'mergehistory-submit' => 'Versies samenvoegen',
 'mergehistory-empty' => 'Er zijn geen versies die samengevoegd kunnen worden.',
@@ -1379,7 +1381,7 @@ Let op dat het gebruiken van de navigatieverwijzingen deze kolom opnieuw instelt
 'diff-multi-manyusers' => '($1 tussenliggende {{PLURAL:$1|versie|versies}} door meer dan $2 {{PLURAL:$2|gebruiker|gebruikers}}  worden niet weergegeven)',
 'difference-missing-revision' => '{{PLURAL:$2|Eén versie|$2 versies}} van deze verschillen ($1) {{PLURAL:$2|is|zijn}} niet aangetroffen.
 
-Dit wordt meestal veroorzaakt door het volgen van een verouderde verwijzing verschillen voor een pagina die is verwijderd.
+Dit wordt meestal veroorzaakt door het volgen van een verouderde koppeling verschillen voor een pagina die is verwijderd.
 Meer gegevens zijn mogelijk te vinden in het [{{fullurl:{{#Special:Log}}/delete|page={{FULLPAGENAMEE}}}} verwijderlogboek].',
 
 # Search results
@@ -1432,7 +1434,7 @@ Probeer een andere zoekopdracht.',
 'showingresults' => "Hieronder {{PLURAL:$1|staat '''1''' resultaat|staan '''$1''' resultaten}} vanaf #'''$2'''.",
 'showingresultsnum' => "Hieronder {{PLURAL:$3|staat '''1''' resultaat|staan '''$3''' resultaten}} vanaf #'''$2'''.",
 'showingresultsheader' => "{{PLURAL:$5|Resultaat '''$1''' van '''$3'''|Resultaten '''$1 - $2''' van '''$3'''}} voor '''$4'''",
-'nonefound' => "'''Opmerking''': standaard worden niet alle naamruimten doorzocht.
+'nonefound' => "'''Let op''': standaard worden niet alle naamruimten doorzocht.
 Als u in uw zoekopdracht als voorvoegsel \"''all:''\" gebruikt, worden alle pagina's doorzocht (inclusief overlegpagina's, sjablonen, enzovoort).
 U kunt ook een naamruimte als voorvoegsel gebruiken.",
 'search-nonefound' => 'Er zijn geen resultaten voor uw zoekopdracht.',
@@ -1549,7 +1551,7 @@ Deze handeling kan niet ongedaan gemaakt worden.',
 De tildes worden omgezet in uw ondertekening en een datum en tijd van de bewerking.',
 'badsig' => 'Ongeldige ondertekening; controleer de HTML-tags.',
 'badsiglength' => 'Uw ondertekening is te lang.
-Deze moet minder dan $1 {{PLURAL:$1|karakters|karakters}} bevatten.',
+Deze moet minder dan $1 {{PLURAL:$1|teken|tekens}} bevatten.',
 'yourgender' => 'Geslacht:',
 'gender-unknown' => 'Niet aangegeven',
 'gender-male' => 'Man',
@@ -1560,7 +1562,7 @@ Deze informatie is zichtbaar voor andere gebruikers.',
 'prefs-help-realname' => 'Echte naam is optioneel.
 Als u deze opgeeft, kan deze naam gebruikt worden om u erkenning te geven voor uw werk.',
 'prefs-help-email' => 'E-mailadres is optioneel, maar maakt het mogelijk om u uw wachtwoord te e-mailen als u het bent vergeten.',
-'prefs-help-email-others' => 'U kunt ook anderen in staat stellen per e-mail contact met u op te nemen via een verwijzing op uw gebruikers- en overlegpagina zonder dat u uw identiteit prijsgeeft.',
+'prefs-help-email-others' => 'U kunt ook anderen in staat stellen per e-mail contact met u op te nemen via een koppeling op uw gebruikers- en overlegpagina zonder dat u uw identiteit prijsgeeft.',
 'prefs-help-email-required' => 'Hiervoor is een e-mailadres nodig.',
 'prefs-info' => 'Basisinformatie',
 'prefs-i18n' => 'Taalinstellingen',
@@ -1689,15 +1691,13 @@ Als u deze opgeeft, kan deze naam gebruikt worden om u erkenning te geven voor u
 'right-sendemail' => 'E-mail versturen aan andere gebruikers',
 'right-passwordreset' => 'E-mails voor wachtwoord opnieuw instellen bekijken',
 
+# Special:Log/newusers
+'newuserlogpage' => 'Logboek nieuwe gebruikers',
+'newuserlogpagetext' => 'Hieronder staan de nieuw ingeschreven gebruikers',
+
 # User rights log
 'rightslog' => 'Gebruikersrechtenlogboek',
 'rightslogtext' => 'Hieronder staan de wijzigingen in gebruikersrechten.',
-'rightslogentry' => 'heeft de gebruikersrechten voor $1 gewijzigd van $2 naar $3',
-'rightslogentry-autopromote' => 'is automatisch gepromoveerd van de groepen "$2" naar de groepen "$3"',
-'logentry-rights-rights' => '$1 heeft groepslidmaatschap voor $3 gewijzigd van $4 naar $5',
-'logentry-rights-rights-legacy' => '$1 heeft groepslidmaatschap voor $3 gewijzigd',
-'logentry-rights-autopromote' => '$1 is automatisch gepromoveerd van $4 naar $5',
-'rightsnone' => '(geen)',
 
 # Associated actions - in the sentence "You do not have permission to X"
 'action-read' => 'deze pagina te bekijken',
@@ -1781,7 +1781,7 @@ Als u deze opgeeft, kan deze naam gebruikt worden om u erkenning te geven voor u
 'recentchangeslinked-summary' => "Deze speciale pagina geeft de laatste bewerkingen weer op pagina's waarheen verwezen wordt vanaf een aangegeven pagina of op pagina's in een aangegeven categorie.
 Pagina's die op [[Special:Watchlist|uw volglijst]] staan worden '''vet''' weergegeven.",
 'recentchangeslinked-page' => 'Paginanaam:',
-'recentchangeslinked-to' => "Wijzigingen aan pagina's met verwijzingen naar deze pagina bekijken",
+'recentchangeslinked-to' => "Wijzigingen aan pagina's met koppelingen naar deze pagina bekijken",
 
 # Upload
 'upload' => 'Bestand uploaden',
@@ -1855,8 +1855,9 @@ Ga na of u dit bestand werkelijk bedoelde te uploaden.',
 Controleer <strong>[[:$1]]</strong> als u niet zeker weet of u het huidige bestand wilt overschrijven.
 [[$1|thumb]]',
 'filepageexists' => 'De beschrijvingspagina voor dit bestand bestaat al op <strong>[[:$1]]</strong>, maar er bestaat geen bestand met deze naam.
-De samenvatting die u hebt opgegeven zal niet op de beschrijvingspagina verschijnen.
-Bewerk de pagina handmatig om uw beschrijving daar weer te geven. [[$1|miniatuur]]',
+De samenvatting die u hebt opgegeven verschijnt niet op de beschrijvingspagina.
+Bewerk de pagina handmatig om uw beschrijving daar weer te geven.
+[[$1|miniatuur]]',
 'fileexists-extension' => 'Een bestand met dezelfde naam bestaat al: [[$2|thumb]]
 * Naam van het geüploade bestand: <strong>[[:$1]]</strong>
 * Naam van het bestaande bestand: <strong>[[:$2]]</strong>
@@ -2081,11 +2082,11 @@ Als deze pagina wordt gefilterd op gebruiker, worden alleen bestanden waar de ge
 'filehist-missing' => 'Het bestand is niet aangetroffen',
 'imagelinks' => 'Bestandsgebruik',
 'linkstoimage' => "Dit bestand wordt op de volgende {{PLURAL:$1|pagina|$1 pagina's}} gebruikt:",
-'linkstoimage-more' => 'Er {{PLURAL:$2|is|zijn}} meer dan $1 {{PLURAL:$1|verwijzing|verwijzingen}} naar dit bestand.
-De volgende lijst geeft alleen de eerste {{PLURAL:$1|verwijzing|$1 verwijzingen}} naar dit bestand weer.
+'linkstoimage-more' => 'Er {{PLURAL:$2|is|zijn}} meer dan $1 {{PLURAL:$1|koppeling|koppelingen}} naar dit bestand.
+De volgende lijst geeft alleen de eerste {{PLURAL:$1|koppeling|$1 koppelingen}} naar dit bestand weer.
 Er is ook een [[Special:WhatLinksHere/$2|volledige lijst]].',
 'nolinkstoimage' => 'Geen enkele pagina gebruikt dit bestand.',
-'morelinkstoimage' => '[[Special:WhatLinksHere/$1|Meer verwijzingen]] naar dit bestand bekijken.',
+'morelinkstoimage' => '[[Special:WhatLinksHere/$1|Meer koppelingen]] naar dit bestand bekijken.',
 'linkstoimage-redirect' => '$1 (bestandsdoorverwijzing) $2',
 'duplicatesoffile' => '{{PLURAL:$1|Het volgende bestand is|De volgende $1 bestanden zijn}} identiek aan dit bestand ([[Special:FileDuplicateSearch/$2|meer details]]):',
 'sharedupload' => 'Dit bestand komt van $1 en kan ook door andere projecten gebruikt worden.',
@@ -2152,8 +2153,8 @@ Invoer: inhoudstype/subtype, bijvoorbeeld <code>image/jpeg</code>.',
 # Unused templates
 'unusedtemplates' => 'Ongebruikte sjablonen',
 'unusedtemplatestext' => 'Deze pagina geeft alle pagina\'s weer in de naamruimte {{ns:template}} die op geen enkele pagina gebruikt worden.
-Vergeet niet de "Verwijzingen naar deze pagina" te controleren alvorens deze sjabloon te verwijderen.',
-'unusedtemplateswlh' => 'andere verwijzingen',
+Vergeet niet de "Koppelingen naar deze pagina" te controleren alvorens deze sjabloon te verwijderen.',
+'unusedtemplateswlh' => 'andere koppelingen',
 
 # Random page
 'randompage' => 'Willekeurige pagina',
@@ -2186,13 +2187,13 @@ Vergeet niet de "Verwijzingen naar deze pagina" te controleren alvorens deze sja
 
 'disambiguations' => "Pagina's die verwijzen naar doorverwijspagina's",
 'disambiguationspage' => 'Template:Doorverwijspagina',
-'disambiguations-text' => "Hieronder staan pagina's met tenminste één verwijzing naar een '''doorverwijspagina'''.
+'disambiguations-text' => "Hieronder staan pagina's met tenminste één koppeling naar een '''doorverwijspagina'''.
 Deze horen waarschijnlijk direct naar een meer toepasselijke pagina te verwijzen.<br />
 Een pagina wordt gezien als doorverwijspagina als er een sjabloon op staat dat opgenomen is op [[MediaWiki:Disambiguationspage]].",
 
 'doubleredirects' => 'Dubbele doorverwijzingen',
 'doubleredirectstext' => "Deze lijst bevat pagina's die doorverwijzen naar andere doorverwijspagina's.
-Elke rij bevat verwijzingen naar de eerste en de tweede doorverwijspagina en een verwijzing naar de doelpagina van de tweede doorverwijspagina.
+Elke rij bevat koppelingen naar de eerste en de tweede doorverwijspagina en een koppeling naar de doelpagina van de tweede doorverwijspagina.
 Meestal is de laatste pagina het eigenlijke doel, waar de eerste pagina naar zou moeten doorverwijzen.
 <del>Doorgehaalde regels</del> geven aan dat het probleem al is opgelost.",
 'double-redirect-fixed-move' => '[[$1]] is verplaatst en is nu een doorverwijzing naar [[$2]]',
@@ -2204,7 +2205,7 @@ Meestal is de laatste pagina het eigenlijke doel, waar de eerste pagina naar zou
 'brokenredirects-edit' => 'bewerken',
 'brokenredirects-delete' => 'verwijderen',
 
-'withoutinterwiki' => "Pagina's zonder taalverwijzingen",
+'withoutinterwiki' => "Pagina's zonder taalkoppelingen",
 'withoutinterwiki-summary' => "De volgende pagina's verwijzen niet naar versies in een andere taal.",
 'withoutinterwiki-legend' => 'Voorvoegsel',
 'withoutinterwiki-submit' => 'Bekijken',
@@ -2214,8 +2215,8 @@ Meestal is de laatste pagina het eigenlijke doel, waar de eerste pagina naar zou
 # Miscellaneous special pages
 'nbytes' => '$1 {{PLURAL:$1|byte|bytes}}',
 'ncategories' => '$1 {{PLURAL:$1|categorie|categorieën}}',
-'ninterwikis' => '$1 {{PLURAL:$1|interwikiverwijzing|interwikiverwijzingen}}',
-'nlinks' => '$1 {{PLURAL:$1|verwijzing|verwijzingen}}',
+'ninterwikis' => '$1 {{PLURAL:$1|interwikikoppeling|interwikikoppelingen}}',
+'nlinks' => '$1 {{PLURAL:$1|koppeling|koppelingen}}',
 'nmembers' => '$1 {{PLURAL:$1|item|items}}',
 'nrevisions' => '$1 {{PLURAL:$1|versie|versies}}',
 'nviews' => '{{PLURAL:$1|1 keer|$1 keer}} bekeken',
@@ -2232,25 +2233,25 @@ De pagina's zijn ook niet als sjabloon opgenomen.",
 'unusedcategories' => 'Ongebruikte categorieën',
 'unusedimages' => 'Ongebruikte bestanden',
 'popularpages' => "Veel bekeken pagina's",
-'wantedcategories' => 'Niet-bestaande categorieën met de meeste verwijzingen',
-'wantedpages' => "Niet-bestaande pagina's met verwijzingen",
+'wantedcategories' => 'Niet-bestaande categorieën met de meeste koppelingen',
+'wantedpages' => "Niet-bestaande pagina's met koppelingen",
 'wantedpages-badtitle' => 'Ongeldige paginanaam in resultaat: $1',
-'wantedfiles' => 'Niet-bestaande bestanden met verwijzingen',
+'wantedfiles' => 'Niet-bestaande bestanden met koppelingen',
 'wantedfiletext-cat' => "De volgende bestanden worden gebruikt maar bestaan niet. Bestanden van externe repositories kunnen zijn opgenomen in de lijst, ondanks dat ze bestaan. Dergelijke vals positieven worden <del>doorgehaald weergegeven</del>. Pagina's die niet-bestaande bestanden insluiten staan op de pagina [[:$1]].",
 'wantedfiletext-nocat' => 'De volgende bestanden worden gebruikt maar bestaan niet. Bestanden van externe repositories kunnen zijn opgenomen in de lijst, ondanks dat ze bestaan. Dergelijke vals positieven worden <del>doorgehaald weergegeven</del>.',
-'wantedtemplates' => 'Niet-bestaande sjablonen met verwijzingen',
+'wantedtemplates' => 'Niet-bestaande sjablonen met koppelingen',
 'mostlinked' => "Pagina's waar het meest naar verwezen wordt",
 'mostlinkedcategories' => 'Categorieën waar het meest naar verwezen wordt',
 'mostlinkedtemplates' => 'Meestgebruikte sjablonen',
 'mostcategories' => "Pagina's met de meeste categorieën",
 'mostimages' => 'Meestgebruikte bestanden',
-'mostinterwikis' => "Pagina's met de meeste interwikiverwijzingen",
+'mostinterwikis' => "Pagina's met de meeste interwikikoppelingen",
 'mostrevisions' => "Pagina's met de meeste bewerkingen",
 'prefixindex' => "Alle pagina's op voorvoegsel",
 'prefixindex-namespace' => "Alle pagina's met het voorvoegsel (naamruimte $1)",
 'shortpages' => "Korte pagina's",
 'longpages' => "Lange pagina's",
-'deadendpages' => "Pagina's zonder verwijzingen",
+'deadendpages' => "Pagina's zonder koppelingen",
 'deadendpagestext' => "De onderstaande pagina's verwijzen niet naar andere pagina's in deze wiki.",
 'protectedpages' => "Beveiligde pagina's",
 'protectedpages-indef' => 'Alleen blokkades zonder vervaldatum',
@@ -2330,7 +2331,7 @@ Mogelijk bevatte de naam tekens die niet gebruikt mogen worden in paginanamen.',
 'categories' => 'Categorieën',
 'categoriespagetext' => "De volgende {{PLURAL:$1|categorie bevat|categorieën bevatten}} pagina's of mediabestanden.
 [[Special:UnusedCategories|Ongebruikte categorieën]] worden hier niet weergegeven.
-Zie ook [[Special:WantedCategories|niet-bestaande categorieën met verwijzingen]].",
+Zie ook [[Special:WantedCategories|niet-bestaande categorieën met koppelingen]].",
 'categoriesfrom' => 'Categorieën weergeven vanaf:',
 'special-categories-sort-count' => 'op aantal sorteren',
 'special-categories-sort-abc' => 'alfabetisch sorteren',
@@ -2341,14 +2342,14 @@ Zie ook [[Special:WantedCategories|niet-bestaande categorieën met verwijzingen]
 'sp-deletedcontributions-contribs' => 'bijdragen',
 
 # Special:LinkSearch
-'linksearch' => 'Externe verwijzingen zoeken',
+'linksearch' => 'Externe koppelingen zoeken',
 'linksearch-pat' => 'Zoekpatroon:',
 'linksearch-ns' => 'Naamruimte:',
 'linksearch-ok' => 'Zoeken',
 'linksearch-text' => 'Wildcards zoals "*.wikipedia.org" of "*.org" zijn toegestaan.
 Heeft tenminste een topleveldomein nodig, zoals bijvoorbeeld "*.org".<br />
-Ondersteunde protocollen: <code>$1</code> (wordt "http://"als er geen protocol wordt opgegeven).',
-'linksearch-line' => '$1 heeft een verwijzing in $2',
+{{PLURAL:$2|Ondersteund protocol|Ondersteunde protocollen}}: <code>$1</code> (wordt "http://"als er geen protocol wordt opgegeven).',
+'linksearch-line' => '$1 heeft een koppeling in $2',
 'linksearch-error' => 'Wildcards zijn alleen toegestaan aan het begin van een hostnaam.',
 
 # Special:ListUsers
@@ -2360,16 +2361,12 @@ Ondersteunde protocollen: <code>$1</code> (wordt "http://"als er geen protocol w
 # Special:ActiveUsers
 'activeusers' => 'Aanwezige gebruikers',
 'activeusers-intro' => 'Dit is een lijst met gebruikers die enige activiteit hebben laten zien in de afgelopen {{PLURAL:$1|dag|$1 dagen}}.',
-'activeusers-count' => '$1 recente {{PLURAL:$1|bewerking|bewerkingen}} in de {{PLURAL:$3|afgelopen dag|laatste $3 dagen}}',
+'activeusers-count' => '$1 recente {{PLURAL:$1|handeling|handelingen}} in de {{PLURAL:$3|afgelopen dag|laatste $3 dagen}}',
 'activeusers-from' => 'Gebruikers worden weergegeven vanaf:',
 'activeusers-hidebots' => 'Bots verbergen',
 'activeusers-hidesysops' => 'Beheerders verbergen',
 'activeusers-noresult' => 'Geen actieve gebruikers gevonden.',
 
-# Special:Log/newusers
-'newuserlogpage' => 'Logboek nieuwe gebruikers',
-'newuserlogpagetext' => 'Hieronder staan de nieuw ingeschreven gebruikers',
-
 # Special:ListGroupRights
 'listgrouprights' => 'Rechten van gebruikersgroepen',
 'listgrouprights-summary' => 'Op deze pagina staan de gebruikersgroepen in deze wiki beschreven, met hun bijbehorende rechten.
@@ -2436,8 +2433,8 @@ De ontvanger kan dus direct naar u reageren.',
 'watchnologin' => 'U bent niet aangemeld',
 'watchnologintext' => 'U dient [[Special:UserLogin|aangemeld]] te zijn om uw volglijst te bewerken.',
 'addwatch' => 'Toevoegen aan volglijst',
-'addedwatchtext' => "De pagina \"[[:\$1]]\" is toegevoegd aan uw [[Special:Watchlist|volglijst]].
-Toekomstige bewerkingen van deze pagina en de bijbehorende overlegpagina worden op [[Special:Watchlist|uw volglijst]] vermeld en worden '''vet''' weergegeven in de [[Special:RecentChanges|lijst van recente wijzigingen]].",
+'addedwatchtext' => 'De pagina "[[:$1]]" is toegevoegd aan uw [[Special:Watchlist|volglijst]].
+Toekomstige bewerkingen van deze pagina en de bijbehorende overlegpagina worden daar weergegeven.',
 'removewatch' => 'Verwijderen uit volglijst',
 'removedwatchtext' => 'De pagina "[[:$1]]" is van [[Special:Watchlist|uw volglijst]] verwijderd.',
 'watch' => 'Volgen',
@@ -2452,7 +2449,7 @@ Toekomstige bewerkingen van deze pagina en de bijbehorende overlegpagina worden
 'wlheader-showupdated' => "* Pagina's die zijn bewerkt sinds uw laatste bezoek worden '''vet''' weergegeven",
 'watchmethod-recent' => "controleer recente wijzigingen op pagina's op volglijst",
 'watchmethod-list' => "controleer pagina's op volglijst op wijzigingen",
-'watchlistcontains' => "Er {{PLURAL:$1|staat 1 pagina|staan $1 pagina's}} op uw volglijst.",
+'watchlistcontains' => "Er {{PLURAL:$1|staat één pagina|staan $1 pagina's}} op uw volglijst.",
 'iteminvalidname' => "Probleem met object '$1', ongeldige naam…",
 'wlnote' => 'Hieronder {{PLURAL:$1|staat de laaste wijziging|staan de laatste $1 wijzigingen}} in {{PLURAL:$2|het laatste uur|de laatste $2 uur}} per $3 om $4.',
 'wlshowlast' => 'Laatste $1 uur, $2 dagen bekijken ($3)',
@@ -2471,7 +2468,7 @@ Toekomstige bewerkingen van deze pagina en de bijbehorende overlegpagina worden
 'enotif_subject_moved' => '{{SITENAME}}: pagina $1 is hernoemd door {{GENDER:$2|$2}}',
 'enotif_subject_restored' => '{{SITENAME}}: pagina $1 is teruggeplaatst door {{GENDER:$2|$2}}',
 'enotif_subject_changed' => '{{SITENAME}}: pagina $1 is bewerkt door {{GENDER:$2|$2}}',
-'enotif_body_intro_deleted' => 'De pagina $1 op {{SITENAME}} is verwijderd door {{GENDER:$2|$2}} op $PAGEEDITDATE. Zie $3 voor de huidige versie.',
+'enotif_body_intro_deleted' => 'De pagina $1 op {{SITENAME}} is verwijderd door {{gender:$2|$2}} op $PAGEEDITDATE. Zie $3 voor de huidige versie.',
 'enotif_body_intro_created' => 'De pagina $1 op {{SITENAME}} is aangemaakt door {{GENDER:$2|$2}} op $PAGEEDITDATE. Zie $3 voor de huidige versie.',
 'enotif_body_intro_moved' => 'De pagina $1 op {{SITENAME}} is hernoemd door {{GENDER:$2|$2}} op $PAGEEDITDATE. Zie $3 voor de huidige versie.',
 'enotif_body_intro_restored' => 'De pagina $1 op {{SITENAME}} is teruggeplaatst door {{GENDER:$2|$2}} op $PAGEEDITDATE. Zie $3 voor de huidige versie.',
@@ -2500,11 +2497,13 @@ U kunt uw e-mailinstellingen wijzigen op:
 U kunt uw volglijstinstellingen wijzigen op:
 {{canonicalurl:Special:Watchlist/edit}}
 
-U kunt de pagina van uw volglijst verwijderen via de volgende verwijzing:
+U kunt de pagina van uw volglijst verwijderen via de volgende koppeling:
 $UNWATCHURL
 
 Terugkoppeling en verdere assistentie:
 {{canonicalurl:{{MediaWiki:Helppage}}}}',
+'created' => 'aangemaakt',
+'changed' => 'gewijzigd',
 
 # Delete
 'deletepage' => 'Pagina verwijderen',
@@ -2577,6 +2576,8 @@ Zie de [[Special:ProtectedPages|lijst met beveiligde pagina's]] voor alle beveil
 'prot_1movedto2' => '[[$1]] is hernoemd naar [[$2]]',
 'protect-badnamespace-title' => 'Niet te beveiligen naamruimte',
 'protect-badnamespace-text' => "Pagina's in deze naamruimte kunnen niet beveiligd worden.",
+'protect-norestrictiontypes-text' => 'Deze pagina kan niet beveiligd worden omdat er geen beperkingstypen beschikbaar zijn.',
+'protect-norestrictiontypes-title' => 'Niet te beveiligen pagina',
 'protect-legend' => 'Beveiliging bevestigen',
 'protectcomment' => 'Reden:',
 'protectexpiry' => 'Duur:',
@@ -2593,9 +2594,9 @@ Dit zijn de huidige instellingen voor de pagina '''$1''':",
 'protect-cascadeon' => "Deze pagina is beveiligd, omdat die in de volgende {{PLURAL:$1|pagina|pagina's}} is opgenomen, die beveiligd {{PLURAL:$1|is|zijn}} met de cascade-optie.
 Het beveiligingsniveau wijzigen heeft geen enkel effect.",
 'protect-default' => 'Toestaan voor alle gebruikers',
-'protect-fallback' => 'Hiervoor is het recht "$1" nodig',
-'protect-level-autoconfirmed' => 'Blokkeren voor nieuwe en anonieme gebruikers',
-'protect-level-sysop' => 'Alleen beheerders',
+'protect-fallback' => 'Alleen gebruikers met het recht "$1" toestaan',
+'protect-level-autoconfirmed' => 'Alleen automatisch bevestigde gebruikers toestaan',
+'protect-level-sysop' => 'Alleen beheerders toestaan',
 'protect-summary-cascade' => 'cascade',
 'protect-expiring' => 'vervalt op $2 om $3 (UTC)',
 'protect-expiring-local' => 'vervalt op $1',
@@ -2650,7 +2651,7 @@ De reden hiervoor staat hieronder, samen met de details van de gebruikers die de
 De verwijderde inhoud van de pagina is alleen zichtbaar voor beheerders.',
 'undelete-revision' => 'Dit is de verwijderde versie van $1 van $4 om $5 gemaakt door $3:',
 'undeleterevision-missing' => 'Ongeldige of missende versie.
-Mogelijk hebt u een verkeerde verwijzing of is de versie hersteld of verwijderd uit het archief.',
+Mogelijk hebt u een verkeerde koppeling of is de versie hersteld of verwijderd uit het archief.',
 'undelete-nodiff' => 'Geen eerdere versie gevonden.',
 'undeletebtn' => 'Terugplaatsen',
 'undeletelink' => 'bekijken/terugplaatsen',
@@ -2722,7 +2723,7 @@ De laatste regel uit het blokkeerlogboek wordt hieronder ter referentie weergege
 'sp-contributions-submit' => 'Bekijken',
 
 # What links here
-'whatlinkshere' => 'Verwijzingen naar deze pagina',
+'whatlinkshere' => 'Koppelingen naar deze pagina',
 'whatlinkshere-title' => 'Pagina\'s die verwijzen naar "$1"',
 'whatlinkshere-page' => 'Pagina:',
 'linkshere' => "De volgende pagina's verwijzen naar '''[[:$1]]''':",
@@ -2730,14 +2731,14 @@ De laatste regel uit het blokkeerlogboek wordt hieronder ter referentie weergege
 'nolinkshere-ns' => "Geen enkele pagina in de gekozen naamruimte verwijst naar '''[[:$1]]'''.",
 'isredirect' => 'doorverwijspagina',
 'istemplate' => 'ingevoegd als sjabloon',
-'isimage' => 'bestandsverwijzing',
+'isimage' => 'bestandskoppeling',
 'whatlinkshere-prev' => '{{PLURAL:$1|vorige|vorige $1}}',
 'whatlinkshere-next' => '{{PLURAL:$1|volgende|volgende $1}}',
-'whatlinkshere-links' => '← verwijzingen naar deze pagina',
+'whatlinkshere-links' => '← koppelingen',
 'whatlinkshere-hideredirs' => 'doorverwijzingen $1',
 'whatlinkshere-hidetrans' => 'Transclusies $1',
-'whatlinkshere-hidelinks' => 'verwijzingen $1',
-'whatlinkshere-hideimages' => 'Bestandsverwijzingen $1',
+'whatlinkshere-hidelinks' => 'koppelingen $1',
+'whatlinkshere-hideimages' => 'Bestandskoppelingen $1',
 'whatlinkshere-filters' => 'Filters',
 
 # Block/unblock
@@ -2757,7 +2758,7 @@ Geef hieronder een reden op (bijvoorbeeld welke pagina's gevandaliseerd zijn).",
 'ipbreason-dropdown' => "*Veel voorkomende redenen voor blokkades
 ** Foutieve informatie invoeren
 ** Verwijderen van informatie uit pagina's
-** Spamverwijzing naar externe websites
+** Spamkoppeling naar externe websites
 ** Invoegen van nonsens in pagina's
 ** Intimiderend gedrag
 ** Misbruik door meerdere gebruikers
@@ -2850,7 +2851,7 @@ Zie ook de [[Special:BlockList|blokkadelijst]] voor de op dit moment actieve blo
 'ipb-needreblock' => '$1 is al geblokkeerd.
 Wilt u de instellingen wijzigen?',
 'ipb-otherblocks-header' => 'Andere {{PLURAL:$1|blokkade|blokkades}}',
-'unblock-hideuser' => 'U kunt deze gebruiker niet deblokkeeren, omdat de gebruikersnaam verborgen is.',
+'unblock-hideuser' => 'U kunt deze gebruiker niet deblokkeeren, omdat de gebruikersnaam is verborgen.',
 'ipb_cant_unblock' => 'Fout: blokkadenummer $1 is niet gevonden.
 Misschien is de blokkade al opgeheven.',
 'ipb_blocked_as_range' => 'Fout: het IP-adres $1 is niet direct geblokkeerd en de blokkade kan niet opgeheven worden.
@@ -2861,14 +2862,14 @@ De blokkade is onderdeel van de reeks $2, waarvan de blokkade wel opgeheven kan
 'proxyblocker' => 'Proxyblocker',
 'proxyblocker-disabled' => 'Deze functie is uitgeschakeld.',
 'proxyblockreason' => 'Uw IP-adres is geblokkeerd, omdat u gebruik maakt van een open proxyserver.
-Neem contact op met uw Internet-provider of uw helpdesk en stel die op de hoogte van dit ernstige beveiligingsprobleem.',
+Neem contact op met uw internetprovider of uw helpdesk en stel die op de hoogte van dit ernstige beveiligingsprobleem.',
 'proxyblocksuccess' => 'Afgerond.',
 'sorbsreason' => 'Uw IP-adres staat bekend als open proxyserver in de DNS-blacklist die {{SITENAME}} gebruikt.',
 'sorbs_create_account_reason' => 'Uw IP-adres staat bekend als open proxyserver in de DNS-blacklist die {{SITENAME}} gebruikt.
 U kunt geen gebruiker registreren.',
 'cant-block-while-blocked' => 'U kunt andere gebruikers niet blokkeren terwijl u zelf geblokkeerd bent.',
-'cant-see-hidden-user' => "De gebruiker die u probeert te blokken is al geblokkeerd en verborgen.
-Omdat u het recht 'hideuser' niet hebt, kunt u de blokkade van de gebruiker niet bekijken of bewerken.",
+'cant-see-hidden-user' => 'De gebruiker die u probeert te blokken is al geblokkeerd en verborgen.
+Omdat u het recht "hideuser" niet hebt, kunt u de blokkade van de gebruiker niet bekijken of bewerken.',
 'ipbblocked' => 'U kunt geen andere gebruikers (de)blokkeren, omdat u zelf geblokkeerd bent',
 'ipbnounblockself' => 'U mag uzelf niet deblokkeren',
 
@@ -2878,7 +2879,6 @@ Omdat u het recht 'hideuser' niet hebt, kunt u de blokkade van de gebruiker niet
 'lockdbtext' => "Als u de database blokkeert, kunnen gebruikers geen pagina's meer bewerken, geen voorkeuren wijzigen of iets anders te doen waarvoor wijzigingen in de database nodig zijn.
 Bevestig dat u deze handeling wilt uitvoeren en dat u de database vrijgeeft nadat het onderhoud is uitgevoerd.",
 'unlockdbtext' => "Na het vrijgeven van de database kunnen gebruikers weer pagina's bewerken, hun voorkeuren wijzigen of iets anders te doen waarvoor er wijzigingen in de database nodig zijn.
-
 Bevestig dat u deze handeling wilt uitvoeren.",
 'lockconfirm' => 'Ja, ik wil de database blokkeren.',
 'unlockconfirm' => 'Ja, ik wil de database vrijgeven.',
@@ -2901,13 +2901,13 @@ Om de database te kunnen blokkeren of vrij te geven, dient de webserver schrijfr
 'movepagetext' => "Door middel van het onderstaande formulier kunt u een pagina hernoemen.
 De geschiedenis gaat mee naar de nieuwe pagina.
 * De oude naam wordt automatisch een doorverwijzing naar de nieuwe pagina.
-* Verwijzingen naar de oude pagina worden niet aangepast.
+* Koppelingen naar de oude pagina worden niet aangepast.
 * De pagina's die doorverwijzen naar de oorspronkelijke paginanaam worden automatisch bijgewerkt.
 Als u dit niet wenst, controleer dan of er geen [[Special:DoubleRedirects|dubbele]] of [[Special:BrokenRedirects|onjuiste doorverwijzingen]] zijn ontstaan.
 
 Een pagina kan '''alleen''' hernoemd worden als de nieuwe paginanaam niet bestaat of een doorverwijspagina zonder verdere geschiedenis is.
 
-'''WAARSCHUWING!'''
+'''Waarschuwing!'''
 Voor veel bekeken pagina's kan het hernoemen drastische en onvoorziene gevolgen hebben.
 Zorg ervoor dat u die gevolgen overziet voordat u deze handeling uitvoert.",
 'movepagetext-noredirectfixer' => "Door middel van het onderstaande formulier kunt u een pagina en alle bijbehorende oude versies hernoemen.
@@ -2915,14 +2915,16 @@ De oude naam wordt automatisch een doorverwijzing naar de nieuwe pagina.
 Controleer dan of er geen [[Special:DoubleRedirects|dubbele]] of [[Special:BrokenRedirects|onjuiste doorverwijzingen]] zijn ontstaan.
 
 Een pagina kan '''alleen''' hernoemd worden als de nieuwe paginanaam niet bestaat of een doorverwijspagina zonder verdere geschiedenis is.
-U kunt dus een pagina die abusievelijk is hernoemd terug hernoemen en u kunt een bestaande pagina niet overschrijven. 
+U kunt dus een pagina die per ongeluk is hernoemd terug hernoemen en u kunt een bestaande pagina niet overschrijven. 
 
 '''Waarschuwing!'''
 Voor veel bekeken pagina's kan het hernoemen drastische en onvoorziene gevolgen hebben.
 Zorg ervoor dat u die gevolgen overziet voordat u deze handeling uitvoert.",
 'movepagetalktext' => "De bijbehorende overlegpagina krijgt automatisch een andere naam, '''tenzij''':
 * De overlegpagina onder de nieuwe naam al bestaat;
-* U het onderstaande vinkje deselecteert.",
+* U het onderstaande vinkje deselecteert.
+
+In die gevallen moet u de pagina handmatig hernoemen of samenvoegen.",
 'movearticle' => 'Te hernoemen pagina:',
 'moveuserpage-warning' => "'''Waarschuwing:''' u gaat een gebruikerspagina hernoemen. Houd er rekening mee dat alleen de pagina wordt hernoemd, ''niet'' de gebruiker.",
 'movenologin' => 'Niet aangemeld',
@@ -2968,7 +2970,7 @@ Wilt u deze verwijderen om plaats te maken voor de te hernoemen pagina?',
 'selfmove' => 'U kunt een pagina niet hernoemen naar dezelfde paginanaam.',
 'immobile-source-namespace' => 'Pagina\'s in de naamruimte "$1" kunnen niet hernoemd worden',
 'immobile-target-namespace' => 'Pagina\'s kunnen niet hernoemd worden naar de naamruimte "$1"',
-'immobile-target-namespace-iw' => 'Een interwikiverwijzing is geen geldige bestemming voor het hernoemen van een pagina.',
+'immobile-target-namespace-iw' => 'Een interwikikoppeling is geen geldige bestemming voor het hernoemen van een pagina.',
 'immobile-source-page' => 'Deze pagina kan niet hernoemd worden.',
 'immobile-target-page' => 'Het is niet mogelijk te hernoemen naar die paginanaam.',
 'bad-target-model' => 'De gewenste bestemming gebruikt een ander inhoudsmodel. Het is niet mogelijk om te zetten van $1 naar $2.',
@@ -2995,7 +2997,7 @@ Dit exportbestand is daarna te importeren in een andere MediaWiki via de [[Speci
 
 Geef in het onderstaande veld de namen van de te exporteren pagina\'s op, één pagina per regel, en geef aan of u alle versies met de bewerkingssamenvatting of alleen de huidige versies met de bewerkingssamenvatting wilt exporteren.
 
-In het laatste geval kunt u ook een verwijzing gebruiken, bijvoorbeeld [[{{#Special:Export}}/{{MediaWiki:Mainpage}}]] voor de pagina "[[{{MediaWiki:Mainpage}}]]".',
+In het laatste geval kunt u ook een koppeling gebruiken, bijvoorbeeld [[{{#Special:Export}}/{{MediaWiki:Mainpage}}]] voor de pagina "[[{{MediaWiki:Mainpage}}]]".',
 'exportall' => "Alle pagina's exporteren",
 'exportcuronly' => 'Alleen de laatste versie, niet de volledige geschiedenis',
 'exportnohistory' => "----
@@ -3064,7 +3066,7 @@ Sla de uitvoer op uw eigen computer op, en voeg die daarna hier toe.',
 'importfailed' => 'Import is mislukt: $1',
 'importunknownsource' => 'Onbekend importbrontype',
 'importcantopen' => 'Kon het importbestand niet openen',
-'importbadinterwiki' => 'Verkeerde interwikiverwijzing',
+'importbadinterwiki' => 'Verkeerde interwikikoppeling',
 'importnotext' => 'Leeg of geen tekst',
 'importsuccess' => 'Import afgerond!',
 'importhistoryconflict' => 'Er zijn conflicten in de geschiedenis van de pagina (is misschien eerder geïmporteerd)',
@@ -3085,9 +3087,10 @@ Een tijdelijke map is niet aanwezig.',
 'import-invalid-interwiki' => 'Het is niet mogelijk van de aangegeven wiki te importeren.',
 'import-error-edit' => 'De pagina "$1" is niet geïmporteerd omdat u niet de rechten hebt om die te bewerken.',
 'import-error-create' => 'De pagina "$1" is niet geïmporteerd omdat u niet de rechten hebt om die aan te maken.',
-'import-error-interwiki' => 'De pagina "$1" is niet geïmporteerd omdat deze naam is gereserveerd voor externe verwijzingen (interwiki).',
+'import-error-interwiki' => 'De pagina "$1" is niet geïmporteerd omdat deze naam is gereserveerd voor externe koppelingen (interwiki).',
 'import-error-special' => 'Pagina "$1" is niet geïmporteerd omdat deze is geplaatst in een speciale naamruimte waar geen pagina\'s in geplaatst kunnen worden.',
 'import-error-invalid' => 'De pagina" "$1" is niet geïmporteerd omdat de naam ongeldig is.',
+'import-error-unserialize' => 'Versie $2 van de pagina "$1" kon niet verwerkt worden. De versie hoort contentmodel $3 te gebruiken met een serialisatie als $4.',
 'import-options-wrong' => 'Verkeerde {{PLURAL:$2|optie|opties}}: <nowiki>$1</nowiki>',
 'import-rootpage-invalid' => 'De opgegeven basispagina is ongeldig.',
 'import-rootpage-nosubpage' => 'In de naamruimte "$1" van de basispagina is het aanmaken van subpagina\'s niet mogelijk.',
@@ -3154,7 +3157,7 @@ U kunt wel de broncode bekijken.',
 'tooltip-t-upload' => 'Bestanden uploaden',
 'tooltip-t-specialpages' => "Lijst met alle speciale pagina's",
 'tooltip-t-print' => 'Printvriendelijke versie van deze pagina',
-'tooltip-t-permalink' => 'Permanente verwijzing naar deze versie van de pagina',
+'tooltip-t-permalink' => 'Permanente koppeling naar deze versie van de pagina',
 'tooltip-ca-nstab-main' => 'Inhoudspagina bekijken',
 'tooltip-ca-nstab-user' => 'Gebruikerspagina bekijken',
 'tooltip-ca-nstab-media' => 'Mediapagina bekijken',
@@ -3233,12 +3236,12 @@ U kunt wel de broncode bekijken.',
 # Spam protection
 'spamprotectiontitle' => 'Spamfilter',
 'spamprotectiontext' => 'De pagina die u wilde opslaan is geblokkeerd door het spamfilter.
-Meestal wordt dit door een externe verwijzing op een zwarte lijst veroorzaakt.',
+Meestal wordt dit door een externe koppeling op een zwarte lijst veroorzaakt.',
 'spamprotectionmatch' => 'De volgende tekst veroorzaakte een alarm van de spamfilter: $1',
 'spambot_username' => 'MediaWiki opschoning spam',
-'spam_reverting' => 'Teruggedraaid naar de laatste versie die geen verwijzing bevat naar $1',
-'spam_blanking' => 'Alle versies bevatten een verwijzing naar $1. Pagina leeggemaakt',
-'spam_deleting' => 'Alle versies bevatten verwijzingen naar $1. Pagina verwijderd',
+'spam_reverting' => 'Teruggedraaid naar de laatste versie die geen koppeling bevat naar $1',
+'spam_blanking' => 'Alle versies bevatten een koppeling naar $1. Pagina leeggemaakt',
+'spam_deleting' => 'Alle versies bevatten koppelingen naar $1. Pagina verwijderd',
 
 # Info page
 'pageinfo-title' => 'Informatie over "$1"',
@@ -3271,6 +3274,7 @@ Meestal wordt dit door een externe verwijzing op een zwarte lijst veroorzaakt.',
 'pageinfo-magic-words' => '{{PLURAL:$1|Magisch woord|Magische woorden}} ($1)',
 'pageinfo-hidden-categories' => 'Verborgen {{PLURAL:$1|categorie|categorieën}} ($1)',
 'pageinfo-templates' => '{{PLURAL:$1|Gebruikt sjabloon|Gebruikte sjablonen}} ($1)',
+'pageinfo-transclusions' => "{{PLURAL:$1|Pagina|Pagina's}} getranscludeerd op ($1)",
 'pageinfo-toolboxlink' => 'Paginagegevens',
 'pageinfo-redirectsto' => 'Verwijst door naar',
 'pageinfo-redirectsto-info' => 'informatie',
@@ -3279,6 +3283,10 @@ Meestal wordt dit door een externe verwijzing op een zwarte lijst veroorzaakt.',
 'pageinfo-protect-cascading' => 'Beveiligingen werken vanaf hier door',
 'pageinfo-protect-cascading-yes' => 'Ja',
 'pageinfo-protect-cascading-from' => 'Pagina is beveiligd vanuit een andere pagina',
+'pageinfo-category-info' => 'Categoriegegevens',
+'pageinfo-category-pages' => "Aantal pagina's",
+'pageinfo-category-subcats' => 'Aantal subcategorieën',
+'pageinfo-category-files' => 'Aantal bestanden',
 
 # Skin names
 'skinname-standard' => 'Klassiek',
@@ -3336,6 +3344,7 @@ $1',
 'file-nohires' => 'Geen hogere resolutie beschikbaar.',
 '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-preview' => 'Grootte van deze voorvertoning: $1.',
 'show-big-image-other' => 'Andere {{PLURAL:$2|resolutie|resoluties}}: $1.',
@@ -3345,8 +3354,8 @@ $1',
 'file-info-png-looped' => 'herhalend',
 'file-info-png-repeat' => '$1 {{PLURAL:$1|keer|keer}} afgespeeld',
 'file-info-png-frames' => '$1 {{PLURAL:$1|frame|frames}}',
-'file-no-thumb-animation' => "'''Let op: vanwege technische beperkingen, kunnen miniaturen van dit bestand niet geanimeerd worden weergegeven.''",
-'file-no-thumb-animation-gif' => "'''Let op: vanwege technische beperkingen, kunnen miniaturen van GIF-afbeeldingen met een hoge resolutie niet geanimeerd worden weergegeven.''",
+'file-no-thumb-animation' => "'''Let op: vanwege technische beperkingen, kunnen miniaturen van dit bestand niet geanimeerd worden weergegeven.'''",
+'file-no-thumb-animation-gif' => "'''Let op: vanwege technische beperkingen, kunnen miniaturen van GIF-afbeeldingen met een hoge resolutie niet geanimeerd worden weergegeven.'''",
 
 # Special:NewFiles
 'newimages' => 'Nieuwe bestanden',
@@ -3366,6 +3375,8 @@ $1',
 'minutes' => '{{PLURAL:$1|$1 minuut|$1 minuten}}',
 'hours' => '{{PLURAL:$1|$1 uur|$1 uur}}',
 'days' => '{{PLURAL:$1|$1 dag|$1 dagen}}',
+'months' => '{{PLURAL:$1|één maand|$1 maanden}}',
+'years' => '{{PLURAL:$1|één jaar|$1 jaar}}',
 'ago' => '$1 geleden',
 'just-now' => 'Daarnet',
 
@@ -3373,8 +3384,8 @@ $1',
 'bad_image_list' => "De opmaak is als volgt:
 
 Alleen regels in een lijst (regels die beginnen met *) worden verwerkt.
-De eerste verwijzing op een regel moet een verwijzing zijn naar een ongewenst bestand.
-Alle volgende verwijzingen die op dezelfde regel staan, worden behandeld als uitzondering, zoals bijvoorbeeld pagina's waarop het bestand in de tekst is opgenomen.",
+De eerste koppeling op een regel moet een koppeling zijn naar een ongewenst bestand.
+Alle volgende koppelingen die op dezelfde regel staan, worden behandeld als uitzondering, zoals bijvoorbeeld pagina's waarop het bestand in de tekst is opgenomen.",
 
 # Metadata
 'metadata' => 'Metadata',
@@ -3561,7 +3572,7 @@ Andere velden worden verborgen.
 'exif-originaldocumentid' => 'Uniek ID van het originele document',
 'exif-licenseurl' => 'URL voor auteursrechtenlicentie',
 'exif-morepermissionsurl' => 'Alternatieve licentiegegevens',
-'exif-attributionurl' => 'Gebruik de volgende verwijzing bij hergebruik van dit werk',
+'exif-attributionurl' => 'Gebruik de volgende koppeling bij hergebruik van dit werk',
 'exif-preferredattributionname' => 'Gebruik de volgende credits bij hergebruik van dit werk',
 'exif-pngfilecomment' => 'Opmerking bij PNG-bestand',
 'exif-disclaimer' => 'Voorbehoud',
@@ -3802,8 +3813,8 @@ Andere velden worden verborgen.
 'confirmemail_noemail' => 'U hebt geen geldig e-mailadres ingegeven in uw [[Special:Preferences|gebruikersvoorkeuren]].',
 'confirmemail_text' => '{{SITENAME}} eist bevestiging van uw e-mailadres voordat u de e-mailmogelijkheden kunt gebruiken.
 Klik op de onderstaande knop om een bevestigingsbericht te ontvangen.
-Dit bericht bevat een verwijzing met een code.
-Open die verwijzing om uw e-mailadres te bevestigen.',
+Dit bericht bevat een koppeling met een code.
+Open die koppeling om uw e-mailadres te bevestigen.',
 'confirmemail_pending' => 'Er is al een bevestigingsbericht aan u verzonden.
 Als u recentelijk uw gebruiker hebt aangemaakt, wacht dan een paar minuten totdat die aankomt voordat u opnieuw een e-mail laat sturen.',
 'confirmemail_send' => 'Een bevestigingscode verzenden',
@@ -3825,11 +3836,11 @@ U kunt zich nu [[Special:UserLogin|aanmelden]] en de wiki gebruiken.',
 'confirmemail_body' => 'Iemand, waarschijnlijk u, met het IP-adres $1,
 heeft zich met dit e-mailadres geregistreerd als gebruiker "$2" op {{SITENAME}}.
 
-Open de volgende verwijzing in uw webbrowser om te bevestigen dat u deze gebruiker bent en om de e-mailmogelijkheden op {{SITENAME}} te activeren:
+Open de volgende koppeling in uw webbrowser om te bevestigen dat u deze gebruiker bent en om de e-mailmogelijkheden op {{SITENAME}} te activeren:
 
 $3
 
-Als u uzelf *niet* hebt aangemeld, volg dan de volgende verwijzing om de bevestiging van uw e-mailadres te annuleren:
+Als u uzelf *niet* hebt aangemeld, volg dan de volgende koppeling om de bevestiging van uw e-mailadres te annuleren:
 
 $5
 
@@ -3837,11 +3848,11 @@ De bevestigingscode vervalt op $4.',
 'confirmemail_body_changed' => 'Iemand, waarschijnlijk u, met het IP-adres $1,
 heeft het het e-mailadres geregistreerd voor gebruiker "$2" op {{SITENAME}} gewijzigd naar dit e-mailadres.
 
-Open de volgende verwijzing in uw webbrowser om te bevestigen dat u deze gebruiker bent en om de e-mailmogelijkheden op {{SITENAME}} opnieuw te activeren:
+Open de volgende koppeling in uw webbrowser om te bevestigen dat u deze gebruiker bent en om de e-mailmogelijkheden op {{SITENAME}} opnieuw te activeren:
 
 $3
 
-Als u uzelf *niet* hebt aangemeld, volg dan de volgende verwijzing om de bevestiging van uw e-mailadres te annuleren:
+Als u uzelf *niet* hebt aangemeld, volg dan de volgende koppeling om de bevestiging van uw e-mailadres te annuleren:
 
 $5
 
@@ -3849,11 +3860,11 @@ De bevestigingscode vervalt op $4.',
 'confirmemail_body_set' => 'Iemand, waarschijnlijk u, met het IP-adres $1,
 heeft het het e-mailadres voor gebruiker "$2" op {{SITENAME}} ingesteld op dit e-mailadres.
 
-Open de volgende verwijzing in uw webbrowser om te bevestigen dat u deze gebruiker bent en om de e-mailmogelijkheden op {{SITENAME}} opnieuw te activeren:
+Open de volgende koppeling in uw webbrowser om te bevestigen dat u deze gebruiker bent en om de e-mailmogelijkheden op {{SITENAME}} opnieuw te activeren:
 
 $3
 
-Als u zelf deze wijziging *niet* hebt gemaakt, volg dan de volgende verwijzing om de bevestiging van uw e-mailadres te annuleren:
+Als u deze wijziging *niet* hebt gemaakt, volg dan de volgende koppeling om de bevestiging van uw e-mailadres te annuleren:
 
 $5
 
@@ -3935,7 +3946,7 @@ Probeer normale voorvertoning te gebruiken.',
 Klik op het vinkvakje ernaast en daarna op "{{int:Watchlistedit-normal-submit}}" om een pagina te verwijderen.
 U kunt ook de [[Special:EditWatchlist/raw|ruwe lijst bewerken]].',
 'watchlistedit-normal-submit' => "Pagina's verwijderen",
-'watchlistedit-normal-done' => 'Er {{PLURAL:$1|is 1 pagina|zijn $1 pagina’s}} verwijderd van uw volglijst:',
+'watchlistedit-normal-done' => 'Er {{PLURAL:$1|is één pagina|zijn $1 pagina’s}} verwijderd van uw volglijst:',
 'watchlistedit-raw-title' => 'Ruwe volglijst bewerken',
 'watchlistedit-raw-legend' => 'Ruwe volglijst bewerken',
 'watchlistedit-raw-explain' => 'Hieronder staan pagina’s op uw volglijst.
@@ -4044,7 +4055,7 @@ Andere bestandstypen worden direct in het met het MIME-type verbonden programma
 'specialpages-group-highuse' => "Veelgebruikte pagina's",
 'specialpages-group-pages' => 'Paginalijsten',
 'specialpages-group-pagetools' => 'Paginahulpmiddelen',
-'specialpages-group-wiki' => 'Wikigegevens en -hulpmiddelen',
+'specialpages-group-wiki' => 'Gegevens en -hulpmiddelen',
 'specialpages-group-redirects' => "Doorverwijzende speciale pagina's",
 'specialpages-group-spam' => 'Spamhulpmiddelen',
 
@@ -4056,7 +4067,7 @@ Andere bestandstypen worden direct in het met het MIME-type verbonden programma
 'external_image_whitelist' => ' #Laat deze regel onveranderd<pre>
 #Zet hieronder reguliere expressiefragmenten (alleen het deel dat tussen de // staat)
 #Deze worden gehouden tegen de URL\'s van externe (gehotlinkte) afbeeldingen
-#Als de reguliere expressie van toegang is, wordt een afbeelding weergegeven, anders wordt alleen een verwijzing weergegeven
+#Als de reguliere expressie van toegang is, wordt een afbeelding weergegeven, anders wordt alleen een koppeling weergegeven
 #Regels die beginnen met "#" worden als opmerking behandeld
 #Regels in de witte lijst zijn niet hoofdlettergevoelig.
 
@@ -4141,8 +4152,12 @@ Andere bestandstypen worden direct in het met het MIME-type verbonden programma
 'logentry-newusers-newusers' => 'Gebruiker $1 is aangemaakt',
 'logentry-newusers-create' => 'Gebruiker $1 is aangemaakt',
 'logentry-newusers-create2' => 'Gebruiker $3 is aangemaakt door $1',
+'logentry-newusers-byemail' => 'Gebruiker $3 is aangemaakt door $1 en het wachtwoord is per e-mail verzonden',
 'logentry-newusers-autocreate' => 'De gebruiker $1 is automatisch aangemaakt',
-'newuserlog-byemail' => 'wachtwoord is verzonden per e-mail',
+'logentry-rights-rights' => '$1 heeft groepslidmaatschap voor $3 gewijzigd van $4 naar $5',
+'logentry-rights-rights-legacy' => '$1 heeft groepslidmaatschap voor $3 gewijzigd',
+'logentry-rights-autopromote' => '$1 is automatisch gepromoveerd van $4 naar $5',
+'rightsnone' => '(geen)',
 
 # Feedback
 'feedback-bugornote' => 'Als u zover bent om een technisch probleem in detail te beschrijven, [$1 rapporteer dan een bug].
@@ -4196,6 +4211,7 @@ Anders kunt u ook het eenvoudige formulier hieronder gebruiken. Uw reactie wordt
 'api-error-ok-but-empty' => 'Interne fout: de server heeft geen gegevens teruggeleverd.',
 'api-error-overwrite' => 'Het overschrijven van een bestand bestand is niet toegestaan.',
 'api-error-stashfailed' => 'Interne fout: de server kon het tijdelijke bestand niet opslaan.',
+'api-error-publishfailed' => 'Interne fout: de server kon het tijdelijke bestand niet publiceren.',
 'api-error-timeout' => 'De server heeft niet binnen de verwachte tijd geantwoord.',
 'api-error-unclassified' => 'Er is een onbekende fout opgetreden',
 'api-error-unknown-code' => 'Interne fout: "$1"',
@@ -4216,6 +4232,4 @@ Anders kunt u ook het eenvoudige formulier hieronder gebruiken. Uw reactie wordt
 'duration-centuries' => '$1 {{PLURAL:$1|eeuw|eeuwen}}',
 'duration-millennia' => '$1 {{PLURAL:$1|millennium|millennia}}',
 
-# Unknown messages
-'svg-long-error' => 'Ongeldig SVG-bestand: $1',
 );
index ad59e1e..d96f7ad 100644 (file)
@@ -431,9 +431,9 @@ $messages = array(
 'category-empty' => "''Kategorien inneheld for tida ingen sider eller mediefiler.''",
 'hidden-categories' => '{{PLURAL:$1|Gøymd kategori|Gøymde kategoriar}}',
 'hidden-category-category' => 'Gøymde kategoriar',
-'category-subcat-count' => 'Kategorien har {{PLURAL:$2|berre den følgjande underkategorien|{{PLURAL:$1|den følgjande underkategorien|dei følgjande $1 underkategoriane}}, av totalt $2}}.',
-'category-subcat-count-limited' => 'Denne kategorien har {{PLURAL:$1|den følgjande underkategorien|dei følgjande $1 underkategoriane}}.',
-'category-article-count' => 'Kategorien inneheld {{PLURAL:$2|berre den følgjande sida|dei følgjande {{PLURAL:$1|side|$1 sidene}}, av totalt $2}}.',
+'category-subcat-count' => 'Kategorien har {{PLURAL:$2|berre denne underkategorien|{{PLURAL:$1|denne underkategorien|desse $1 underkategoriane}}, av totalt $2}}.',
+'category-subcat-count-limited' => 'Kategorien har {{PLURAL:$1|denne underkategorien|desse $1 underkategoriane}}.',
+'category-article-count' => 'Kategorien inneheld {{PLURAL:$2|berre denne sida|{{PLURAL:$1|denne sida|desse $1 sidene}}, av totalt $2}}.',
 'category-article-count-limited' => 'Følgjande {{PLURAL:$1|side|$1 sider}} er i denne kategorien.',
 'category-file-count' => 'Kategorien inneheld {{PLURAL:$2|berre den følgjande fila|dei følgjande {{PLURAL:$1|fil|$1 filene}}, av totalt $2}}.',
 'category-file-count-limited' => 'Følgjande {{PLURAL:$1|fil|$1 filer}} er i denne kategorien.',
@@ -449,6 +449,7 @@ $messages = array(
 'newwindow' => '(vert opna i eit nytt vindauge)',
 'cancel' => 'Avbryt',
 'moredotdotdot' => 'Meir …',
+'morenotlisted' => 'Meir som ikkje er lista opp …',
 'mypage' => 'Sida mi',
 'mytalk' => 'Diskusjon',
 'anontalk' => 'Diskusjonside for denne IP-adressa',
@@ -739,7 +740,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?',
-'createaccountmail' => 'over e-post',
+'createaccountmail' => 'Bruk eit mellombels tilfeldig passord og send det til e-postadressa som er oppgjeven under',
 'createaccountreason' => 'Årsak:',
 'badretype' => 'Passorda du skreiv inn er ikkje like.',
 'userexists' => 'Brukarnamnet er alt i bruk. Vel eit anna brukarnamn.',
@@ -802,6 +803,7 @@ Du kan sjå bort frå denne meldinga dersom kontoen vart oppretta med eit uhell.
 # E-mail sending
 'php-mail-error-unknown' => 'Ukjend feil i PHPs mail()-funksjon',
 'user-mail-no-addy' => '↓Prøvde å senda e-post utan e-postadresse',
+'user-mail-no-body' => 'Freista å senda e-post med tom eller urimeleg stutt brødtekst.',
 
 # Change password dialog
 'resetpass' => 'Endra passord',
@@ -859,6 +861,7 @@ Mellombels passord: $2',
 'changeemail-oldemail' => '↓Noverande e-postadresse:',
 'changeemail-newemail' => 'Ny e-postadresse:',
 'changeemail-none' => '↓(ingen)',
+'changeemail-password' => '{{SITENAME}}-passordet ditt:',
 'changeemail-submit' => '↓Endre e-post',
 'changeemail-cancel' => '↓Avbryt',
 
@@ -973,7 +976,7 @@ Det siste elementet i blokkeringsloggen er oppgjeve nedanfor:',
 'userinvalidcssjstitle' => "'''Åtvaring:''' Det finst ikkje noka sidedrakt som heiter «$1». Hugs på at vanlege .css- og .js-sider brukar titlar med små bokstavar, til dømes {{ns:user}}:Døme/vector.css, og ikkje {{ns:user}}:Døme/Vector.css.",
 'updated' => '(Oppdatert)',
 'note' => "'''Merk:'''",
-'previewnote' => "'''Hugsa at dette berre er ei førehandsvising.'''
+'previewnote' => "'''Hugs at dette berre er ei førehandsvising.'''
 Endringane dine er ikkje lagra enno!",
 'continue-editing' => 'Gå til endringsområdet',
 'previewconflict' => 'Dette er ei førehandsvising av teksten i endringsboksen over, slik han vil sjå ut om du lagrar han',
@@ -1011,9 +1014,9 @@ Teksten må du ha skrive sjølv eller ha kopiert frå ein ressurs som er kompati
 
 '''LEGG ALDRI INN MATERIALE SOM ANDRE HAR OPPHAVSRETT TIL UTAN LØYVE FRÅ DEI!'''",
 'longpageerror' => "'''Feil: Teksten du sende inn er {{PLURAL:$1|éin kilobyte|$1 kilobyte}} stor, noko som er større enn øvstegrensa på {{PLURAL:$2|éin kilobyte|$2 kilobyte}}.''' Han kan difor ikkje lagrast.",
-'readonlywarning' => "'''ÅTVARING: Databasen er skriveverna på grunn av vedlikehald, så du kan ikkje lagre endringane dine akkurat no. Det kan vera lurt å  kopiere teksten din til ei tekstfil, så du kan lagre han her seinare.'''
+'readonlywarning' => "'''ÅTVARING: Databasen er skriveverna på grunn av vedlikehald, så du kan ikkje lagre endringane dine akkurat no. Det kan vera lurt å kopiere teksten din til ei tekstfil, så du kan lagre han her seinare.'''
 
-Systemadministratoren som låste databasen gav følgjande årsak: $1",
+Systemadministratoren som låste databasen gav denne årsaka: $1",
 'protectedpagewarning' => "'''ÅTVARING: Denne sida er verna, slik at berre administratorar kan endra henne.'''
 Det siste loggelementet er oppgjeve under som referanse:",
 'semiprotectedpagewarning' => "'''Merk:''' Denne sida er verna slik at berre registrerte brukarar kan endre henne.
@@ -1028,7 +1031,6 @@ Det siste loggelementet er oppgjeve under som referanse:",
 'template-semiprotected' => '(delvis verna)',
 'hiddencategories' => 'Denne sida er med i {{PLURAL:$1|éin gøymd kategori|$1 gøymde kategoriar}}:',
 'edittools' => '<!-- Teksten her vert vist mellom tekstboksen og «Lagre»-knappen når ein endrar ei side. -->',
-'nocreatetitle' => 'Avgrensa sideoppretting',
 'nocreatetext' => '{{SITENAME}} har avgrensa tilgang til å opprette nye sider.
 Du kan gå attende og endre ei eksisterande side, [[Special:UserLogin|logge inn eller opprette ein brukarkonto]].',
 'nocreate-loggedin' => 'Du har ikkje tilgang til å opprette nye sider.',
@@ -1326,7 +1328,7 @@ For å søkja i alle, bruk prefikset ''all:'' (det inkluderer diskusjonssider, m
 'powersearch-ns' => 'Søk i namnerom:',
 'powersearch-redir' => 'Vis omdirigeringar',
 'powersearch-field' => 'Søk etter',
-'powersearch-togglelabel' => 'Haka av:',
+'powersearch-togglelabel' => 'Hak av:',
 'powersearch-toggleall' => 'Alle',
 'powersearch-togglenone' => 'Ingen',
 'search-external' => 'Eksternt søk',
@@ -1421,9 +1423,9 @@ Dette kan ikkje tilbakestillast.',
 'prefs-emailconfirm-label' => 'Stadfesting av e-post:',
 'prefs-textboxsize' => 'Storleiken til redigeringsvindauga',
 'youremail' => 'E-post:',
-'username' => 'Brukarnamn:',
-'uid' => 'Brukar-ID:',
-'prefs-memberingroups' => 'Medlem av {{PLURAL:$1|denne gruppa|desse gruppene}}:',
+'username' => '{{GENDER:$1|Brukarnamn}}:',
+'uid' => '{{GENDER:$1|Brukar-ID}}:',
+'prefs-memberingroups' => '{{GENDER:$2|Medlem}} av {{PLURAL:$1|gruppa|gruppene}}:',
 'prefs-registration' => 'Registreringstid:',
 'yourrealname' => 'Verkeleg namn:',
 'yourlanguage' => 'Språk:',
@@ -1570,15 +1572,13 @@ Dette kan ikkje tilbakestillast.',
 'right-sendemail' => 'Senda e-post til andre brukarar',
 'right-passwordreset' => 'Sjå e-postar for passord som er stilte attende',
 
+# Special:Log/newusers
+'newuserlogpage' => 'Brukaropprettingslogg',
+'newuserlogpagetext' => 'Dette er ein logg over oppretta brukarkontoar.',
+
 # User rights log
 'rightslog' => 'Brukartilgangslogg',
 'rightslogtext' => 'Dette er ein logg over endringar av brukartilgang.',
-'rightslogentry' => 'endra brukartilgangen til $1 frå $2 til $3',
-'rightslogentry-autopromote' => '↓vart automatisk forfremja frå $2 til $3',
-'logentry-rights-rights' => '$1 endra gruppemedlemskap for $3 frå $4 til $5',
-'logentry-rights-rights-legacy' => '$1 endra gruppemedlemskap for $3',
-'logentry-rights-autopromote' => '$1 vart automatisk forfremja frå $4 til $5',
-'rightsnone' => '(ingen)',
 
 # Associated actions - in the sentence "You do not have permission to X"
 'action-read' => 'sjå denne sida',
@@ -1867,7 +1867,7 @@ Ho kan ikkje tryggingskontrollerast godt nok.',
 # img_auth script messages
 'img-auth-accessdenied' => 'Tilgjenge avslått',
 'img-auth-nopathinfo' => 'PATH_INFO saknar.
-Filtenaren din er ikkje sett opp for å gjeva denne informasjonen.
+Filtenaren din er ikkje sett opp for å gje denne informasjonen.
 Han kan vera CGI-basert og ikkje stø img_auth.
 Sjå https://www.mediawiki.org/wiki/Manual:Image_Authorization.',
 'img-auth-notindir' => 'Den ynskte filstien er ikkje i den oppsette opplastingskatalogen',
@@ -1963,7 +1963,7 @@ Du vil kan henda endra skildringa på [$2 filskildringssida] hennar der.',
 'upload-disallowed-here' => 'Du kan ikkje overskriva denne fila.',
 
 # File reversion
-'filerevert' => 'Rulla attende $1',
+'filerevert' => 'Rull attende $1',
 'filerevert-legend' => 'Rull attende fila',
 'filerevert-intro' => "Du rullar attende '''[[Media:$1|$1]]''' til [$4 versjonen frå $3, $2].",
 'filerevert-comment' => 'Årsak:',
@@ -2074,7 +2074,7 @@ Ei side vert handsama som ei fleirtydingsside om ho nyttar ein mal som er lenkja
 'ntransclusions' => 'brukt på $1 {{PLURAL:$1|side|sider}}',
 'specialpage-empty' => 'Det er ingen resultat for denne rapporten.',
 'lonelypages' => 'Foreldrelause sider',
-'lonelypagestext' => 'Følgjande sider er ikkje lenkja til på andre sider på {{SITENAME}}.',
+'lonelypagestext' => 'Desse sidene er ikkje lenkja til eller inkluderte på andre sider på {{SITENAME}}.',
 'uncategorizedpages' => 'Ukategoriserte sider',
 'uncategorizedcategories' => 'Ukategoriserte kategoriar',
 'uncategorizedimages' => 'Ukategoriserte filer',
@@ -2193,7 +2193,7 @@ Sjå òg [[Special:WantedCategories|ønska kategoriar]].',
 'linksearch-ok' => 'Søk',
 'linksearch-text' => 'Jokerteikn som «*.wikipedia.org» kan nyttast.
 Det er påkravt med eit toppnivådomene, til dømes «*.org».<br />
-Støtta protokollar: <code>$1</code> (nyttar http:// som standard om ingen protokoll er oppgjeven)',
+{{PLURAL:$2|Stødd protokoll|Stødde protokollar}}: <code>$1</code> (nyttar http:// som standard om ingen protokoll er oppgjeven)',
 'linksearch-line' => '$2 lenkjer til $1',
 'linksearch-error' => 'Jokerteikn kan berre nyttast føre tenarnamnet.',
 
@@ -2206,16 +2206,12 @@ Støtta protokollar: <code>$1</code> (nyttar http:// som standard om ingen proto
 # Special:ActiveUsers
 'activeusers' => 'Liste over aktive brukarar',
 'activeusers-intro' => 'Dette er ei liste over brukarar som har hatt ei eller anna form for aktivitet innanfor {{PLURAL:$1|den siste dagen|dei siste dagane}}.',
-'activeusers-count' => '{{PLURAL:$1|Éi endring|$1 endringar}} {{PLURAL:$3|det siste døgeret|dei siste $3 døgra}}',
+'activeusers-count' => '{{PLURAL:$1|Éi handling|$1 handlingar}} {{PLURAL:$3|det siste døgeret|dei siste $3 døgra}}',
 'activeusers-from' => 'Vis brukarar frå og med:',
 'activeusers-hidebots' => 'Skjul botar',
 'activeusers-hidesysops' => 'Skjul administratorar',
 'activeusers-noresult' => 'Ingen brukarar funne.',
 
-# Special:Log/newusers
-'newuserlogpage' => 'Brukaropprettingslogg',
-'newuserlogpagetext' => 'Dette er ein logg over oppretta brukarkontoar.',
-
 # Special:ListGroupRights
 'listgrouprights' => 'Rettar for brukargrupper',
 'listgrouprights-summary' => 'Følgjande liste viser brukargruppene som er definert på denne wikien, og kvar rettar dei har. Meir informasjon om dei ulike rettane ein kan ha finn ein [[{{MediaWiki:Listgrouprights-helppage}}|her]].',
@@ -2280,9 +2276,7 @@ E-postadressa du har sett i [[Special:Preferences|innstillingane dine]] vil dukk
 'watchnologin' => 'Ikkje innlogga',
 'watchnologintext' => 'Du lyt vera [[Special:UserLogin|innlogga]] for å kunna endre overvakingslista.',
 'addwatch' => '↓Legg til i overvakingslista',
-'addedwatchtext' => "Sida «[[:$1]]» er lagt til [[Special:Watchlist|overvakingslista]] di. Framtidige endringar av denne sida og den tilhøyrande diskusjonssida vil bli oppførde her, og sida vil vera '''utheva''' på «[[Special:RecentChanges|siste endringar]]» for å gjera deg merksam på henne.
-
-Om du seinare vil fjerne sida frå overvakingslista, klikk på «Fjern overvaking» på den aktuelle sida.",
+'addedwatchtext' => 'Sida «[[:$1]]» er lagd til i [[Special:Watchlist|overvakingslista]] di. Framtidige endringar av henne og den tilhøyrande diskusjonssida hennar vil bli oppførde der.',
 'removewatch' => 'Fjerna frå overvakingslista',
 'removedwatchtext' => 'Sida «[[:$1]]» er fjerna frå [[Special:Watchlist|overvakingslista di]].',
 'watch' => 'Overvak',
@@ -2316,7 +2310,7 @@ Om du seinare vil fjerne sida frå overvakingslista, klikk på «Fjern overvakin
 'enotif_subject_moved' => '{{SITENAME}}-sida $1 har vorte flytta av {{gender:$2|$2}}',
 'enotif_subject_restored' => '{{SITENAME}}-sida $1 har vorte attoppretta av {{gender:$2|$2}}',
 'enotif_subject_changed' => '{{SITENAME}}-sida $1 har vorte endra av {{gender:$2|$2}}',
-'enotif_body_intro_deleted' => '{{SITENAME}}-sida $1 vart sletta $PAGEEDITDATE av {{gender:$2|$2}}, sjå $3 for den gjeldande versjonen.',
+'enotif_body_intro_deleted' => '{{SITENAME}}-sida $1 vart sletta $PAGEEDITDATE av {{gender:$2|$2}}, sjå $3.',
 'enotif_body_intro_created' => '{{SITENAME}}-sida $1 vart oppretta $PAGEEDITDATE av {{gender:$2|$2}}, sjå $3 for den gjeldande versjonen.',
 'enotif_body_intro_moved' => '{{SITENAME}}-sida $1 vart flytt $PAGEEDITDATE av {{gender:$2|$2}}, sjå $3 for den gjeldande versjonen.',
 'enotif_body_intro_restored' => '{{SITENAME}}-sida $1 vart attoppretta $PAGEEDITDATE av {{gender:$2|$2}}, sjå $3 for den gjeldande versjonen.',
@@ -2330,7 +2324,7 @@ $PAGEINTRO $NEWPAGE
 
 Endringssamandraget var: $PAGESUMMARY $PAGEMINOREDIT
 
-Kontakta brukaren:
+Kontakt brukaren:
 e-post: $PAGEEDITOR_EMAIL
 wiki: $PAGEEDITOR_WIKI
 
@@ -2350,6 +2344,8 @@ $UNWATCHURL
 
 Attendemelding og hjelp:
 {{canonicalurl:{{MediaWiki:Helppage}}}}',
+'created' => 'oppretta',
+'changed' => 'endra',
 
 # Delete
 'deletepage' => 'Slett sida',
@@ -2382,10 +2378,10 @@ Attendemelding og hjelp:
 
 # Rollback
 'rollback' => 'Rull attende endringar',
-'rollback_short' => 'Rulla attende',
-'rollbacklink' => 'rulla attende',
-'rollbacklinkcount' => 'rulla attende {{PLURAL:$1|éi endring|$1 endringar}}',
-'rollbacklinkcount-morethan' => 'rulla attende meir enn {{PLURAL:$1|éi endring|$1 endringar}}',
+'rollback_short' => 'Rull attende',
+'rollbacklink' => 'rull attende',
+'rollbacklinkcount' => 'rull attende {{PLURAL:$1|éi endring|$1 endringar}}',
+'rollbacklinkcount-morethan' => 'rull attende meir enn {{PLURAL:$1|éi endring|$1 endringar}}',
 'rollbackfailed' => 'Kunne ikkje rulle attende',
 'cantrollback' => 'Kan ikkje rulle attende fordi den siste brukaren er den einaste forfattaren.',
 'alreadyrolled' => 'Kan ikkje rulla attende den siste endringa på [[:$1]] gjord av [[User:$2|$2]] ([[User talk:$2|diskusjon]]{{int:pipe-separator}}[[Special:Contributions/$2|{{int:contribslink}}]]) av di nokon andre alt har endra eller attenderulla sida.
@@ -2413,6 +2409,8 @@ Sjå [[Special:ProtectedPages|lista over verna sider]] for lista over vern som n
 'prot_1movedto2' => '«[[$1]]» flytt til «[[$2]]»',
 'protect-badnamespace-title' => 'Namnerommet kan ikkje vernast',
 'protect-badnamespace-text' => 'Sider i dette namnerommet kan ikkje vernast.',
+'protect-norestrictiontypes-text' => 'Sida kan ikkje vernast sidan det ikkje finst tilgjengelege restriksjonstypar.',
+'protect-norestrictiontypes-title' => 'Side som ikkje kan vernast',
 'protect-legend' => 'Stadfest vern',
 'protectcomment' => 'Grunngjeving:',
 'protectexpiry' => 'Endar:',
@@ -2426,9 +2424,9 @@ Sjå [[Special:ProtectedPages|lista over verna sider]] for lista over vern som n
 Her er dei noverande innstillingane for sida '''$1''':",
 'protect-cascadeon' => 'Denne sida er verna fordi ho er inkludert på {{PLURAL:$1|den opplista sida|dei opplista sidene}} som har djupvern slått på. Du kan endre på nivået til vernet av denne sida, men det vil ikkje ha innverknad på djupvernet.',
 'protect-default' => 'Tillat alle brukarar',
-'protect-fallback' => 'Må ha «$1»-tilgang',
-'protect-level-autoconfirmed' => 'Blokker nye og uregistrerte brukarar',
-'protect-level-sysop' => 'Berre administratorar',
+'protect-fallback' => 'Berre tillat brukarar med løyvet «$1»',
+'protect-level-autoconfirmed' => 'Berre tillat autostadfeste brukarar',
+'protect-level-sysop' => 'Berre tillat administratorar',
 'protect-summary-cascade' => 'djupvern',
 'protect-expiring' => 'endar $1 (UTC)',
 'protect-expiring-local' => 'endar $1',
@@ -2471,8 +2469,8 @@ Her er dei noverande innstillingane for sida '''$1''':",
 'viewdeletedpage' => 'Sjå sletta sider',
 'undeletepagetext' => '{{PLURAL:$1|Den følgjande sida er sletta, men ho|Dei følgjande $1 sidene er sletta, men dei}} finst enno i arkivet og kan attopprettast. Arkivet blir periodevis sletta.',
 'undelete-fieldset-title' => 'Attenderull endringar',
-'undeleteextrahelp' => "For å attoppretta heile historikken til sida, lat alle boksane vera vera tomme og trykk '''''{{int:undeletebtn}}'''''.
-For å berre attopretta delar av historikken, haka av boksane til dei relevante endringane og trykk '''''{{int:undeletebtn}}'''''.",
+'undeleteextrahelp' => "For å attoppretta heile historikken til sida, lat alle boksane vera tomme og trykk '''''{{int:undeletebtn}}'''''.
+For å berre attopretta delar av historikken, hak av boksane til dei relevante endringane og trykk '''''{{int:undeletebtn}}'''''.",
 'undeleterevisions' => '{{PLURAL:$1|Éin versjon arkivert|$1 versjonar arkiverte}}',
 'undeletehistory' => 'Om du gjenopprettar sida vil alle endringar i historikken også bli gjenoppretta. Dersom ei ny side med same namn er oppretta etter slettinga, vil dei gjenoppretta endringane dukke opp før denne i endringshistorikken.',
 'undeleterevdel' => 'Gjenoppretting kan ikkje utførast om det resulterer i at den øvste endringa delvis vert sletta. I slike tilfelle må du fjerne merkinga av den siste sletta endringa.',
@@ -2517,9 +2515,9 @@ $1',
 # Namespace form on various pages
 'namespace' => 'Namnerom:',
 'invert' => 'Vreng val',
-'tooltip-invert' => 'Haka av boksen for å gøyma endringar på sider i det valde namnerommet (og det tilknytte namnerommet om det er haka av)',
+'tooltip-invert' => 'Hak av boksen for å gøyma endringar på sider i det valde namnerommet (og det tilknytte namnerommet om det er haka av)',
 'namespace_association' => 'Tilknytt namnerom',
-'tooltip-namespace_association' => 'Haka av boksen for at diskusjonssida eller emnenamnerommet knytt til det valde namnerommet skal vera med òg',
+'tooltip-namespace_association' => 'Hak av boksen for at diskusjonssida eller emnenamnerommet knytt til det valde namnerommet skal vera med òg',
 'blanknamespace' => '(Hovud)',
 
 # Contributions
@@ -2624,7 +2622,7 @@ Sjå [[Special:BlockList|blokkeringslista]] for alle blokkeringane.',
 'blocklist-tempblocks' => 'Gøym mellombelse blokkeringar',
 'blocklist-addressblocks' => 'Gøym einskilde IP-blokkeringar',
 'blocklist-rangeblocks' => 'Gøym intervallblokkeringar',
-'blocklist-timestamp' => 'Tidsmerkje',
+'blocklist-timestamp' => 'Tidsmerke',
 'blocklist-target' => 'Mål',
 'blocklist-expiry' => 'Endar',
 'blocklist-by' => 'Blokkerande admin',
@@ -2710,11 +2708,15 @@ IP-adresser som blir automatisk blokkerte er ikkje lista her. Sjå [[Special:Blo
 # Move page
 'move-page' => 'Flytt $1',
 'move-page-legend' => 'Flytt side',
-'movepagetext' => "Ved å bruke skjemaet nedanfor kan du få omdøypt ei side og flytt heile historikken til det nye namnet. Den gamle tittelen vil bli ei omdirigeringsside til den nye tittelen. Lenkjer til den gamle tittelen vil ikkje bli endra. Pass på å sjekke for doble eller dårlege omdirigeringar. Du er ansvarleg for at alle lenkjene stadig peiker dit det er meininga at dei skal peike.
+'movepagetext' => "Ved å bruka skjemaet nedanfor kan du få omdøypt ei side og flytt heile historikken til det nye namnet.
+Den gamle tittelen vil verta ei omdirigeringsside til den nye.
+Du kan oppdatera omdirigeringar som peikar til den opphavlege tittelen automatisk.
+Vel du å ikkje gjera dette, pass på å sjå etter [[Special:DoubleRedirects|doble]] eller [[Special:BrokenRedirects|øydelagde omdirigeringar]].
 
-Merk at sida '''ikkje''' kan flyttast dersom det allereie finst ei side med den nye tittelen. Du kan likevel flytte ei side attende dit ho vart flytt frå dersom du gjer ein feil, så lenge den sida du flytter attende til ikkje er vorten endra sidan flyttinga.
+Merk at sida '''ikkje''' vert flytt dersom det alt finst ei side med den nye tittelen, minder ho er ei omdirigering og ikkje har nokon endringshistorikk. Detter tyder at du kan omdøypa ei side attende til der ho vart omdøypt frå om du gjorde eit mistak, og du kan ikkje skriva over sider som finst.
 
-<b>ÅTVARING!</b> Dette kan vera ei drastisk og uventa endring for ei populær side; ver sikker på at du skjønner konsekvensane av dette før du fortset.",
+'''ÅTVARING!'''
+Dette kan vera ei drastisk og uventa endring for ei populær side; ver viss på at du skjøner konsekvensane av dette før du held fram.",
 'movepagetext-noredirectfixer' => "Nyttar ein skjemaet under får ein døypt om ei side og flytt heile historikken til det nye namnet. 
 Den gamle tittelen vil verta ei omdirigeringsside for den nye tittelen. 
 Pass på å sjå etter [[Special:DoubleRedirects|doble]] eller [[Special:BrokenRedirects|uverksame]] omdirigeringar. 
@@ -2730,7 +2732,7 @@ ver viss på at du skjøner konsekvensane av flyttinga før du held fram.",
 *ei ikkje-tom diskusjonsside alt finst under det nye namnet, eller
 *du fjernar avhakinga i boksen nedanfor.
 
-I desse falla lyt du flytta eller fletta sida manuelt, om ynskeleg.",
+I desse falla lyt du flytta eller fletta sida manuelt, om ynskjeleg.",
 'movearticle' => 'Flytt side:',
 'moveuserpage-warning' => "'''Åtvaring:''' Du er i ferd med å flytta ei brukarside. Merk at berre sida vert flytt og at brukarnamnet '''ikkje''' vert endra.",
 'movenologin' => 'Ikkje innlogga',
@@ -2818,7 +2820,7 @@ Dersom du berre vil ha noverande versjon, kan du også bruke ei lenkje, til døm
 'allmessages' => 'Systemmeldingar',
 'allmessagesname' => 'Namn',
 'allmessagesdefault' => 'Standardtekst',
-'allmessagescurrent' => 'Noverande tekst',
+'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.',
 'allmessagesnotsupportedDB' => "Denne sida kan ein ikkje bruka fordi «'''\$wgUseDatabaseMessages'''» er slått av.",
@@ -2886,6 +2888,7 @@ Vitja [//www.mediawiki.org/wiki/Localisation MediaWiki Localisation] og [//trans
 'import-error-interwiki' => 'Sida «$1» vart ikkje importert sidan namnet hennar er reservert for ekstern lenking (interwiki).',
 'import-error-special' => 'Sida «$1» vart ikkje importert sidan ho høyrer til eit spesialnamnerom som ikkje tillèt sider.',
 'import-error-invalid' => 'Sida «$1» vart ikkje importert sidan namnet er ugildt.',
+'import-error-unserialize' => 'Versjonen $2 av sida «$1» kunne ikkje avserialiserast. Versjonen var rapportert å nytta innhaldsmodellen $3 serialisert som $4.',
 'import-options-wrong' => '{{PLURAL:$2|Galt val|Gale val}}: <nowiki>$1</nowiki>',
 'import-rootpage-invalid' => 'Den oppgjevne rotsida er ein ugild tittel',
 'import-rootpage-nosubpage' => 'Namnerommet «$1» til rotsida tillèt ikkje undersider.',
@@ -3027,7 +3030,7 @@ Vitja [//www.mediawiki.org/wiki/Localisation MediaWiki Localisation] og [//trans
 
 # Info page
 'pageinfo-title' => 'Informasjon om «$1»',
-'pageinfo-not-current' => 'Orsak, det er umogeleg å gjeva denne informasjonen for gamle versjonar.',
+'pageinfo-not-current' => 'Diverre er det umogeleg å gje ut denne informasjonen for gamle versjonar.',
 'pageinfo-header-basic' => 'Grunnleggjande informasjon',
 'pageinfo-header-edits' => 'Endringshistorikk',
 'pageinfo-header-restrictions' => 'Sidevern',
@@ -3056,6 +3059,7 @@ Vitja [//www.mediawiki.org/wiki/Localisation MediaWiki Localisation] og [//trans
 'pageinfo-magic-words' => '{{PLURAL:$1|Trylleord}} ($1)',
 'pageinfo-hidden-categories' => '{{PLURAL:$1|Løynd kategori|Løynde kategoriar}} ($1)',
 'pageinfo-templates' => '{{PLURAL:$1|Inkludert mal|Inkluderte malar}} ($1)',
+'pageinfo-transclusions' => '{{PLURAL:$1|Side inkludert|Sider inkluderte}} på ($1)',
 'pageinfo-toolboxlink' => 'Sideinformasjon',
 'pageinfo-redirectsto' => 'Omdirigerer til',
 'pageinfo-redirectsto-info' => 'info',
@@ -3064,6 +3068,10 @@ Vitja [//www.mediawiki.org/wiki/Localisation MediaWiki Localisation] og [//trans
 'pageinfo-protect-cascading' => 'Djupvern byrjar her',
 'pageinfo-protect-cascading-yes' => 'Ja',
 'pageinfo-protect-cascading-from' => 'Djupvern byrjar i',
+'pageinfo-category-info' => 'Kategoriinformasjon',
+'pageinfo-category-pages' => 'Tal sider',
+'pageinfo-category-subcats' => 'Tal underkategoriar',
+'pageinfo-category-files' => 'Tal filer',
 
 # Skin names
 'skinname-standard' => 'Klassisk',
@@ -3119,6 +3127,7 @@ $1',
 'file-nohires' => 'Høgare oppløysing er ikkje tilgjengeleg.',
 'svg-long-desc' => 'SVG-fil, standardoppløysing: $1 × $2 pikslar, filstorleik: $3',
 'svg-long-desc-animated' => 'Animert SVG-fil, standardoppløysing $1 × $2 pikslar, filstorleik: $3',
+'svg-long-error' => 'Ugild SVG-fil: $1',
 'show-big-image' => 'Full oppløysing',
 'show-big-image-preview' => 'Storleik på førehandsvising: $1.',
 'show-big-image-other' => '{{PLURAL:$2|Anna oppløysing|Andre oppløysingar}}: $1.',
@@ -3148,6 +3157,8 @@ $1',
 'minutes' => '{{PLURAL:$1|$1 minutt|$1 minutt}}',
 'hours' => '{{PLURAL:$1|$1 time|$1 timar}}',
 'days' => '{{PLURAL:$1|$1 dag|$1 dagar}}',
+'months' => '{{PLURAL:$1|éin månad|$1 månader}}',
+'years' => '{{PLURAL:$1|éitt år|$1 år}}',
 'ago' => '$1 sidan',
 'just-now' => 'akkurat no',
 
@@ -3799,7 +3810,7 @@ Bilete vert viste i full oppløysing, andre filtypar vert starta direkte i dei t
 'specialpages-group-highuse' => 'Mykje brukte sider',
 'specialpages-group-pages' => 'Sidelister',
 'specialpages-group-pagetools' => 'Sideverktøy',
-'specialpages-group-wiki' => 'Informasjon og verktøy for wikien',
+'specialpages-group-wiki' => 'Data og verktøy',
 'specialpages-group-redirects' => 'Omdirigerande spesialsider',
 'specialpages-group-spam' => 'Spamverktøy',
 
@@ -3896,8 +3907,12 @@ Bilete vert viste i full oppløysing, andre filtypar vert starta direkte i dei t
 'logentry-newusers-newusers' => 'Brukarkontoen $1 vart oppretta',
 'logentry-newusers-create' => 'Brukarkontoen $1 vart oppretta',
 'logentry-newusers-create2' => 'Brukarkontoen $3 vart oppretta av $1',
+'logentry-newusers-byemail' => 'Brukarkontoen $3 vart oppretta av $1 og passord vart sendt med e-post',
 'logentry-newusers-autocreate' => 'Kontoen $1 vart oppretta av seg sjølv',
-'newuserlog-byemail' => 'passordet er sendt på e-post',
+'logentry-rights-rights' => '$1 endra gruppemedlemskap for $3 frå $4 til $5',
+'logentry-rights-rights-legacy' => '$1 endra gruppemedlemskap for $3',
+'logentry-rights-autopromote' => '$1 vart automatisk forfremja frå $4 til $5',
+'rightsnone' => '(ingen)',
 
 # Feedback
 'feedback-bugornote' => 'Er du klar til å skildra ein teknisk vanske i detalj, gjer vel å [$1 rapportera inn ein feil].
@@ -3951,6 +3966,7 @@ Om ikkje kan du nytta det enkle skjemaet under. Merknaden din vert lagd til på
 'api-error-ok-but-empty' => 'Intern feil: ikkje noko svar frå tenaren.',
 'api-error-overwrite' => 'Det er ikkje tillate å skriva over filer som alt finst.',
 'api-error-stashfailed' => 'Intern feil: tenaren greidde ikkje å lagra ei mellombels fil.',
+'api-error-publishfailed' => 'Intern feil: tenaren greidde ikkje å publisera mellombels fil.',
 'api-error-timeout' => 'Tenaren svara ikkje innan tida svar var venta.',
 'api-error-unclassified' => 'Det oppstod ein ukjend feil.',
 'api-error-unknown-code' => 'Ukjend feil: «$1»',
@@ -3971,6 +3987,4 @@ Om ikkje kan du nytta det enkle skjemaet under. Merknaden din vert lagd til på
 'duration-centuries' => '$1 {{PLURAL:$1|hundreår|hundreår}}',
 'duration-millennia' => '$1 {{PLURAL:$1|tusenår|tusenår}}',
 
-# Unknown messages
-'svg-long-error' => 'Ugild SVG-fil: $1',
 );
diff --git a/languages/messages/MessagesNo.php b/languages/messages/MessagesNo.php
deleted file mode 100644 (file)
index ca3f1b8..0000000
+++ /dev/null
@@ -1,3407 +0,0 @@
-<?php
-/** Norwegian (bokmål)‬ (‪norsk (bokmål)‬)
- *
- * See MessagesQqq.php for message documentation incl. usage of parameters
- * To improve a translation please visit http://translatewiki.net
- *
- * @ingroup Language
- * @file
- *
- * @author Jeblad
- */
-
-$fallback = 'nb';
-
-$messages = array(
-# User preference toggles
-'tog-underline' => 'Strek under lenker:',
-'tog-justify' => 'Blokkjusterte avsnitt',
-'tog-hideminor' => 'Skjul mindre redigeringer i siste endringer',
-'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' => 'Forbedret siste endringer (krever JavaScript)',
-'tog-numberheadings' => 'Autonummerer overskrifter',
-'tog-showtoolbar' => 'Vis verktøylinje (JavaScript)',
-'tog-editondblclick' => 'Rediger sider ved å dobbeltklikke (JavaScript)',
-'tog-editsection' => 'Rediger avsnitt ved hjelp av [rediger]-lenke',
-'tog-editsectiononrightclick' => 'Rediger avsnitt ved å høyreklikke på avsnittsoverskrift (JavaScript)',
-'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' => 'Overvåk sider jeg oppretter',
-'tog-watchdefault' => 'Overvåk alle sider jeg redigerer',
-'tog-watchmoves' => 'Overvåk sider jeg flytter',
-'tog-watchdeletion' => 'Overvåk sider jeg sletter',
-'tog-minordefault' => 'Merk i utgangspunktet alle redigeringer som mindre',
-'tog-previewontop' => 'Flytt forhåndsvisningen foran redigeringsboksen',
-'tog-previewonfirst' => 'Bruk forhåndsvisning ved første redigering av en side',
-'tog-nocache' => 'Deaktiver nettlesermellomlagring av sider («caching»)',
-'tog-enotifwatchlistpages' => 'Send meg en e-post når sider på overvåkningslisten blir endret',
-'tog-enotifusertalkpages' => 'Send meg en e-post ved endringer av brukerdiskusjonssiden min',
-'tog-enotifminoredits' => 'Send meg en e-post også ved mindre sideendringer',
-'tog-enotifrevealaddr' => 'Vis min e-postadresse i utgående meldinger',
-'tog-shownumberswatching' => 'Vis antall overvåkende brukere',
-'tog-oldsig' => 'Nåværende signatur:',
-'tog-fancysig' => 'Signatur som wikitekst uten automatisk lenke',
-'tog-externaleditor' => 'Bruk ekstern behandler som standard (kun for viderekomne, krever spesielle innstillinger på din datamaskin. [//www.mediawiki.org/wiki/Manual:External_editors Mer informasjon.])',
-'tog-externaldiff' => 'Bruk ekstern differanse som standard (kun for viderekomne, krever spesielle innstillinger på din datamaskin. [//www.mediawiki.org/wiki/Manual:External_editors Mer informasjon.])',
-'tog-showjumplinks' => 'Slå på «gå til»-lenker',
-'tog-uselivepreview' => 'Bruk levende forhåndsvisning (eksperimentell JavaScript)',
-'tog-forceeditsummary' => 'Advar meg når jeg ikke gir noen redigeringsforklaring',
-'tog-watchlisthideown' => 'Skjul egne endringer fra overvåkningslisten',
-'tog-watchlisthidebots' => 'Skjul robotendringer fra overvåkningslisten',
-'tog-watchlisthideminor' => 'Skjul mindre endringer fra overvåkningslisten',
-'tog-watchlisthideliu' => 'Skjul endringer av innloggede brukere fra overvåkningslisten',
-'tog-watchlisthideanons' => 'Skjul endringer av anonyme brukere fra overvåkningslisten',
-'tog-watchlisthidepatrolled' => 'Skjul patruljerte endringer fra overvåkningslisten',
-'tog-nolangconversion' => 'Slå av variantkonvertering',
-'tog-ccmeonemails' => 'Send meg kopier av e-poster jeg sender til andre brukere',
-'tog-diffonly' => 'Ikke vis sideinnhold under differ',
-'tog-showhiddencats' => 'Vis skjulte kategorier',
-'tog-norollbackdiff' => 'Ikke vis diff etter tilbakestilling',
-
-'underline-always' => 'Alltid',
-'underline-never' => 'Aldri',
-'underline-default' => 'Bruk nettleserstandard',
-
-# Font style option in Special:Preferences
-'editfont-style' => 'Endre stilen for skrifttypen i området:',
-'editfont-default' => 'Nettleserstandard',
-'editfont-monospace' => 'Skrift med fast bredde',
-'editfont-sansserif' => 'Sans-serif',
-'editfont-serif' => 'Serif',
-
-# Dates
-'sunday' => 'søndag',
-'monday' => 'mandag',
-'tuesday' => 'tirsdag',
-'wednesday' => 'onsdag',
-'thursday' => 'torsdag',
-'friday' => 'fredag',
-'saturday' => 'lørdag',
-'sun' => 'søn',
-'mon' => 'man',
-'tue' => 'tir',
-'wed' => 'ons',
-'thu' => 'tor',
-'fri' => 'fre',
-'sat' => 'lør',
-'january' => 'januar',
-'february' => 'februar',
-'march' => 'mars',
-'april' => 'april',
-'may_long' => 'mai',
-'june' => 'juni',
-'july' => 'juli',
-'august' => 'august',
-'september' => 'september',
-'october' => 'oktober',
-'november' => 'november',
-'december' => 'desember',
-'january-gen' => 'januar',
-'february-gen' => 'februar',
-'march-gen' => 'mars',
-'april-gen' => 'april',
-'may-gen' => 'mai',
-'june-gen' => 'juni',
-'july-gen' => 'juli',
-'august-gen' => 'august',
-'september-gen' => 'september',
-'october-gen' => 'oktober',
-'november-gen' => 'november',
-'december-gen' => 'desember',
-'jan' => 'jan',
-'feb' => 'feb',
-'mar' => 'mar',
-'apr' => 'apr',
-'may' => 'mai',
-'jun' => 'jun',
-'jul' => 'jul',
-'aug' => 'aug',
-'sep' => 'sep',
-'oct' => 'okt',
-'nov' => 'nov',
-'dec' => 'des',
-
-# Categories related messages
-'pagecategories' => '{{PLURAL:$1|Kategori|Kategorier}}',
-'category_header' => 'Sider i kategorien «$1»',
-'subcategories' => 'Underkategorier',
-'category-media-header' => 'Filer i kategorien «$1»',
-'category-empty' => "''Denne kategorien inneholder for tiden ingen artikler eller filer.''",
-'hidden-categories' => '{{PLURAL:$1|Skjult kategori|Skjulte kategorier}}',
-'hidden-category-category' => 'Skjulte kategorier',
-'category-subcat-count' => '{{PLURAL:$2|Denne kategorien har kun den følgende underkategorien.|Denne kategorien har følgende {{PLURAL:$1|underkategori|$1 underkategorier}}, av totalt $2.}}',
-'category-subcat-count-limited' => 'Kategorien har følgende {{PLURAL:$1|underkategori|$1 underkategorier}}.',
-'category-article-count' => '{{PLURAL:$2|Denne kategorien inneholder kun den følgende siden.|Følgende {{PLURAL:$1|side|$1 sider}} er i denne kategorien, av totalt $2.}}',
-'category-article-count-limited' => 'Følgende {{PLURAL:$1|side|$1 sider}} er i denne kategorien.',
-'category-file-count' => '{{PLURAL:$2|Denne kategorien inneholder kun den følgende filen.|Følgende {{PLURAL:$1|fil|$1 filer}} er i denne kategorien, av totalt $2.}}',
-'category-file-count-limited' => 'Følgende {{PLURAL:$1|fil|$1 filer}} er i denne kategorien.',
-'listingcontinuesabbrev' => 'forts.',
-'index-category' => 'Indekserte sider',
-'noindex-category' => 'Ikke-indekserte sider',
-'broken-file-category' => 'Sider med brutte fillenker',
-
-'about' => 'Om',
-'article' => 'Innholdsside',
-'newwindow' => '(åpnes i et nytt vindu)',
-'cancel' => 'Avbryt',
-'moredotdotdot' => 'Mer …',
-'mypage' => 'Min side',
-'mytalk' => 'Min diskusjonsside',
-'anontalk' => 'Brukerdiskusjon for denne IP-adressen',
-'navigation' => 'Navigasjon',
-'and' => '&#32;og',
-
-# Cologne Blue skin
-'qbfind' => 'Finn',
-'qbbrowse' => 'Bla gjennom',
-'qbedit' => 'Rediger',
-'qbpageoptions' => 'Sideinnstillinger',
-'qbpageinfo' => 'Sideinformasjon',
-'qbmyoptions' => 'Egne innstillinger',
-'qbspecialpages' => 'Spesialsider',
-'faq' => 'Ofte stilte spørsmål',
-'faqpage' => 'Project:Ofte stilte spørsmål',
-
-# Vector skin
-'vector-action-addsection' => 'Nytt emne',
-'vector-action-delete' => 'Slett',
-'vector-action-move' => 'Flytt',
-'vector-action-protect' => 'Beskytt',
-'vector-action-undelete' => 'Gjenopprett',
-'vector-action-unprotect' => 'Endre beskyttelse',
-'vector-simplesearch-preference' => 'Aktiver forbedrede søkeforslag (kun for drakten Vector)',
-'vector-view-create' => 'Opprett',
-'vector-view-edit' => 'Rediger',
-'vector-view-history' => 'Vis historikk',
-'vector-view-view' => 'Les',
-'vector-view-viewsource' => 'Vis kilden',
-'actions' => 'Handlinger',
-'namespaces' => 'Navnerom',
-'variants' => 'Varianter',
-
-'errorpagetitle' => 'Feil',
-'returnto' => 'Tilbake til $1.',
-'tagline' => 'Fra {{SITENAME}}',
-'help' => 'Hjelp',
-'search' => 'Søk',
-'searchbutton' => 'Søk',
-'go' => 'Gå',
-'searcharticle' => 'Gå',
-'history' => 'Sidehistorikk',
-'history_short' => 'Historikk',
-'updatedmarker' => 'oppdatert siden mitt forrige besøk',
-'printableversion' => 'Utskriftsvennlig versjon',
-'permalink' => 'Permanent lenke',
-'print' => 'Skriv ut',
-'view' => 'Vis',
-'edit' => 'Rediger',
-'create' => 'Opprett',
-'editthispage' => 'Rediger siden',
-'create-this-page' => 'Opprett denne siden',
-'delete' => 'Slett',
-'deletethispage' => 'Slett denne siden',
-'undelete_short' => 'Gjenopprett {{PLURAL:$1|én revisjon|$1 revisjoner}}',
-'viewdeleted_short' => 'Vis {{PLURAL:$1|en slettet redigering|$1 slettede redigeringer}}',
-'protect' => 'Beskytt',
-'protect_change' => 'endre',
-'protectthispage' => 'Lås siden',
-'unprotect' => 'Endre beskyttelse',
-'unprotectthispage' => 'Endre beskyttelsen av denne siden',
-'newpage' => 'Ny side',
-'talkpage' => 'Diskuter denne siden',
-'talkpagelinktext' => 'Diskusjon',
-'specialpage' => 'Spesialside',
-'personaltools' => 'Personlige verktøy',
-'postcomment' => 'Ny seksjon',
-'articlepage' => 'Vis innholdsside',
-'talk' => 'Diskusjon',
-'views' => 'Visninger',
-'toolbox' => 'Verktøy',
-'userpage' => 'Vis brukerside',
-'projectpage' => 'Vis prosjektside',
-'imagepage' => 'Vis filside',
-'mediawikipage' => 'Vis beskjedside',
-'templatepage' => 'Vis mal',
-'viewhelppage' => 'Vis hjelpeside',
-'categorypage' => 'Vis kategoriside',
-'viewtalkpage' => 'Vis diskusjon',
-'otherlanguages' => 'På andre språk',
-'redirectedfrom' => '(Omdirigert fra $1)',
-'redirectpagesub' => 'Omdirigeringsside',
-'lastmodifiedat' => 'Denne siden ble sist endret $1 kl. $2.',
-'viewcount' => 'Denne siden er vist $1 {{PLURAL:$1|gang|ganger}}.',
-'protectedpage' => 'Låst side',
-'jumpto' => 'Gå til:',
-'jumptonavigation' => 'navigasjon',
-'jumptosearch' => 'søk',
-'view-pool-error' => 'Beklager, serverne er overbelastet for øyeblikket.
-For mange brukere forsøker å se denne siden.
-Vennligst vent en stund før du prøver å besøke denne siden på nytt.
-
-$1',
-'pool-timeout' => 'Tidsavbudd mens man ventet på låsing',
-'pool-queuefull' => 'Køen er full',
-'pool-errorunknown' => 'Ukjent feil',
-
-# 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) and the disambiguation template definition (see disambiguations).
-'aboutsite' => 'Om {{SITENAME}}',
-'aboutpage' => 'Project:Om',
-'copyright' => 'Innholdet er tilgjengelig under $1.',
-'copyrightpage' => '{{ns:project}}:Opphavsrett',
-'currentevents' => 'Aktuelt',
-'currentevents-url' => 'Project:Aktuelt',
-'disclaimers' => 'Forbehold',
-'disclaimerpage' => 'Project:Generelle forbehold',
-'edithelp' => 'Redigeringshjelp',
-'edithelppage' => 'Help:Redigering',
-'helppage' => 'Help:Innhold',
-'mainpage' => 'Hovedside',
-'mainpage-description' => 'Hovedside',
-'policy-url' => 'Project:Retningslinjer',
-'portal' => 'Prosjektportal',
-'portal-url' => 'Project:Prosjektportal',
-'privacy' => 'Personvern',
-'privacypage' => 'Project:Personvern',
-
-'badaccess' => 'Rettighetsfeil',
-'badaccess-group0' => 'Du har ikke tilgang til å utføre handlingen du prøvde på.',
-'badaccess-groups' => 'Handlingen du prøvde å utføre kan kun utføres av brukere i {{PLURAL:$2|gruppa|gruppene}} $1.',
-
-'versionrequired' => 'Versjon $1 av MediaWiki påtrengt',
-'versionrequiredtext' => 'Versjon $1 av MediaWiki er nødvendig for å bruke denne siden. Se [[Special:Version|versjonsiden]]',
-
-'ok' => 'OK',
-'retrievedfrom' => 'Hentet fra «$1»',
-'youhavenewmessages' => 'Du har $1 ($2).',
-'newmessageslink' => 'nye meldinger',
-'newmessagesdifflink' => 'siste endring',
-'youhavenewmessagesmulti' => 'Du har nye beskjeder på $1',
-'editsection' => 'rediger',
-'editold' => 'rediger',
-'viewsourceold' => 'vis kilde',
-'editlink' => 'rediger',
-'viewsourcelink' => 'vis kilde',
-'editsectionhint' => 'Rediger avsnitt: $1',
-'toc' => 'Innhold',
-'showtoc' => 'vis',
-'hidetoc' => 'skjul',
-'collapsible-collapse' => 'skjul',
-'collapsible-expand' => 'vis',
-'thisisdeleted' => 'Se eller gjenopprett $1?',
-'viewdeleted' => 'Vis $1?',
-'restorelink' => '{{PLURAL:$1|én slettet revisjon|$1 slettede revisjoner}}',
-'feedlinks' => 'Mating:',
-'feed-invalid' => 'Ugyldig matingstype.',
-'feed-unavailable' => 'Abonnementskilder er ikke tilgjengelig',
-'site-rss-feed' => '$1 RSS-mating',
-'site-atom-feed' => '$1 Atom-mating',
-'page-rss-feed' => '«$1» RSS-mating',
-'page-atom-feed' => '«$1» Atom-mating',
-'red-link-title' => '$1 (siden finnes ikke)',
-'sort-descending' => 'Sorter i synkende rekkefølge',
-'sort-ascending' => 'Sorter i stigende rekkefølge',
-
-# Short words for each namespace, by default used in the namespace tab in monobook
-'nstab-main' => 'Side',
-'nstab-user' => 'Brukerside',
-'nstab-media' => 'Mediaside',
-'nstab-special' => 'Spesialside',
-'nstab-project' => 'Prosjektside',
-'nstab-image' => 'Fil',
-'nstab-mediawiki' => 'Melding',
-'nstab-template' => 'Mal',
-'nstab-help' => 'Hjelp',
-'nstab-category' => 'Kategori',
-
-# Main script and global functions
-'nosuchaction' => 'Funksjonen finnes ikke',
-'nosuchactiontext' => 'Handlingen spesifisert i URL-en er ugyldig.
-Du kan ha skrevet URL-en feil, eller fulgt en link som var feil.
-Det kan også være en bug i {{SITENAME}}.',
-'nosuchspecialpage' => 'En slik spesialside finnes ikke',
-'nospecialpagetext' => 'Du ba om en ugyldig spesialside; en liste over gyldige spesialsider finnes på [[Special:SpecialPages|{{int:specialpages}}]].',
-
-# General errors
-'error' => 'Feil',
-'databaseerror' => 'Databasefeil',
-'dberrortext' => 'Det har oppstått en syntaksfeil i en databaseforespørsel.
-Dette kan tyde på en feil i programvaren.
-Forrige databaseforespørsel var:
-<blockquote><tt>$1</tt></blockquote>
-fra funksjonen «<tt>$2</tt>».
-Databasen returnerte feilen «<tt>$3: $4</tt>».',
-'dberrortextcl' => 'Det oppsto en syntaksfeil i en databaseforespørsel.
-Forrige databaseforespørsel var:
-«$1»
-fra funksjonen «$2».
-Databasen returnerte feilen «$3: $4».',
-'laggedslavemode' => 'Advarsel: Dette kan være en eldre versjon av siden.',
-'readonly' => 'Databasen er skrivebeskyttet',
-'enterlockreason' => 'Skriv en begrunnelse for skrivebeskyttelsen, inkludert et estimat for når den blir opphevet',
-'readonlytext' => 'Databasen er for øyeblikket skrivebeskyttet, sannsynligvis på grunn av rutinemessig vedlikehold.
-
-Administratoren som låste databasen ga forklaringen: $1',
-'missing-article' => 'Databasen fant ikke teksten på siden som den burde ha funnet, med navnet «$1» $2.
-
-Dette skyldes vanligvis at man følger en utdatert diff- eller historikklenke til en side som har blitt slettet.
-
-Om dette ikke er tilfellet kan du ha oppdaget en feil i programvaren.
-Vennligst rapporter dette til en [[Special:ListUsers/sysop|administrator]], oppgi da nettadressen.',
-'missingarticle-rev' => '(revisjon#: $1)',
-'missingarticle-diff' => '(diff: $1, $2)',
-'readonly_lag' => 'Databasen er automatisk skrivebeskyttet så slavetjenerne kan ta igjen mestertjeneren',
-'internalerror' => 'Intern feil',
-'internalerror_info' => 'Intern feil: $1',
-'fileappenderrorread' => 'Klarte ikke å lese «$1» når data skulle tilføyes.',
-'fileappenderror' => 'Kunne ikke legge "$1" til "$2".',
-'filecopyerror' => 'Klarte ikke å kopiere filen «$1» til «$2».',
-'filerenameerror' => 'Klarte ikke å døpe om filen «$1» til «$2».',
-'filedeleteerror' => 'Klarte ikke å slette filen «$1».',
-'directorycreateerror' => 'Klarte ikke å opprette mappe «$1».',
-'filenotfound' => 'Klarte ikke å finne filen «$1».',
-'fileexistserror' => 'Klarte ikke å skrive til filen «$1»: filen finnes fra før',
-'unexpected' => 'Uventet verdi: «$1»=«$2».',
-'formerror' => 'Feil: klarte ikke å sende skjema',
-'badarticleerror' => 'Handlingen kan ikke utføres på denne siden.',
-'cannotdelete' => 'Kunne ikke slette filen «$1». Den kan ha blitt slettet av noen andre.',
-'badtitle' => 'Ugyldig tittel',
-'badtitletext' => 'Den ønskede tittelen var ugyldig, tom eller feilaktig lenket fra en annen wiki.
-Det kan inneholder en eller flere tegn som ikke kan brukes i titler.',
-'querypage-no-updates' => 'Oppdateringer for denne siden er slått av. Data her blir ikke gjenoppfrisket.',
-'wrong_wfQuery_params' => 'Gale paramtere til wfQuery()<br />
-Funksjon: $1<br />
-Spørring: $2',
-'viewsource' => 'Vis kildetekst',
-'actionthrottled' => 'Handlingsgrense overskredet',
-'actionthrottledtext' => 'For å beskytte mot spam, kan du ikke utføre denne handlingen for mange ganger i løpet av et kort tidssrom, og du har overskredet denne grensen. Prøv igjen om noen minutter.',
-'protectedpagetext' => 'Denne siden har blitt låst for redigeringer.',
-'viewsourcetext' => 'Du kan se og kopiere kilden til denne siden:',
-'protectedinterface' => 'Denne siden viser brukergrensesnittet for programvaren, og er låst for å hindre misbruk.',
-'editinginterface' => "'''Advarsel:''' Du redigerer en side som brukes i grensesnittet for programvaren. Endringer på denne siden vil påvirke hvordan grensesnittet vil se ut. For oversettelser er det best om du bruker [//translatewiki.net/wiki/Main_Page?setlang=no translatewiki.net], prosjektet for oversettelse av MediaWiki.",
-'sqlhidden' => '(SQL-spørring skjult)',
-'cascadeprotected' => 'Denne siden er låst for redigering fordi den inkluderes på følgende sider som har dypbeskyttelse slått på:<!--{{PLURAL:$1}}-->
-$2',
-'namespaceprotected' => "Du har ikke tillatelse til å redigere sider i navnerommet '''$1'''.",
-'customcssprotected' => 'Du har ikke tillatelse til å redigere denne CSS-siden fordi den inneholder en annen brukers personlige innstillinger.',
-'customjsprotected' => 'Du har ikke tillatelse til å redigere denne JavaScript-siden fordi den inneholder en annen brukers personlige innstillinger.',
-'ns-specialprotected' => 'Sier i navnerommet {{ns:special}} kan ikke redigeres.',
-'titleprotected' => "Denne tittelen har blitt låst for oppretting av [[User:$1|$1]].
-Den angitte grunnen er ''$2''.",
-
-# Virus scanner
-'virus-badscanner' => "Dårlig konfigurasjon: ukjent virusskanner: ''$1''",
-'virus-scanfailed' => 'skanning mislyktes (kode $1)',
-'virus-unknownscanner' => 'ukjent antivirusprogram:',
-
-# Login and logout pages
-'logouttext' => "'''Du er nå logget ut.'''
-
-Du kan fortsette å bruke {{SITENAME}} anonymt, eller [[Special:UserLogin|logge inn igjen]] som samme eller annen bruker.
-Merk at noen sider kan vise at du fortsatt er logget inn fram til du tømmer mellomlageret i nettleseren.",
-'welcomecreation' => '==Velkommen, $1!==
-Brukerkontoen din har blitt opprettet.
-Ikke glem å endre [[Special:Preferences|innstillingene]] dine.',
-'yourname' => 'Brukernavn:',
-'yourpassword' => 'Passord:',
-'yourpasswordagain' => 'Gjenta passord',
-'remembermypassword' => 'Husk meg på denne datamaskinen (i maks $1 {{PLURAL:$1|dag|dager}})',
-'securelogin-stick-https' => 'Vær fortsatt koblet til HTTPS etter innlogging',
-'yourdomainname' => 'Ditt domene',
-'externaldberror' => 'Det var en ekstern autentifiseringsfeil, eller du kan ikke oppdatere din eksterne konto.',
-'login' => 'Logg inn',
-'nav-login-createaccount' => 'Logg inn eller opprett en konto',
-'loginprompt' => 'Du må ha slått på informasjonskapsler for å logge in på {{SITENAME}}.',
-'userlogin' => 'Logg inn eller opprett en konto',
-'userloginnocreate' => 'Logg inn',
-'logout' => 'Logg ut',
-'userlogout' => 'Logg ut',
-'notloggedin' => 'Ikke logget inn',
-'nologin' => "Er du ikke registrert? '''$1'''.",
-'nologinlink' => 'Opprett en konto',
-'createaccount' => 'Opprett konto',
-'gotaccount' => "Har du allerede et brukernavn? '''$1'''.",
-'gotaccountlink' => 'Logg inn',
-'userlogin-resetlink' => 'Har du glemt påloggingsdetaljene dine?',
-'createaccountmail' => 'per e-post',
-'createaccountreason' => 'Årsak:',
-'badretype' => 'Passordene samsvarte ikke.',
-'userexists' => 'Brukernavnet er allerede i bruk.
-Velg et annet brukernavn.',
-'loginerror' => 'Innloggingsfeil',
-'createaccounterror' => 'Kunne ikke opprette konto: $1',
-'nocookiesnew' => 'Din brukerkonto er nå opprettet, men du har ikke logget på. {{SITENAME}} bruker informasjonskapsler («cookies») for å logge brukere på og du har slått dem av. Slå dem på for å kunne logge på med ditt nye brukernavn og passord.',
-'nocookieslogin' => '{{SITENAME}} bruker informasjonskapsler («cookies») for å logge brukere på og du har slått dem av. Slå dem på og prøv igjen.',
-'nocookiesfornew' => 'Brukerkontoen ble ikke opprettet siden vi ikke kunne bekrefte dens kilde.
-Kontroller at du har aktivert informasjonskapsler, oppdater siden og prøv igjen.',
-'noname' => 'Du har ikke oppgitt et gyldig brukernavn.',
-'loginsuccesstitle' => 'Du er nå logget inn',
-'loginsuccess' => 'Du er nå logget inn på {{SITENAME}} som «$1».',
-'nosuchuser' => 'Det eksisterer ingen bruker ved navn «$1».
-Merk at det skilles mellom store og små bokstaver.
-Sjekk stavemåten eller [[Special:UserLogin/signup|opprett en ny konto]].',
-'nosuchusershort' => 'Det finnes ingen bruker ved navn «$1». Kontroller stavemåten.',
-'nouserspecified' => 'Du må oppgi et brukernavn.',
-'login-userblocked' => 'Brukeren er blokkert. Innlogging er ikke tillatt.',
-'wrongpassword' => 'Du har oppgitt et ugyldig passord. Prøv igjen.',
-'wrongpasswordempty' => 'Du oppga ikke noe passord. Prøv igjen.',
-'passwordtooshort' => 'Passord må ha minst {{PLURAL:$1|ett tegn|$1 tegn}}.',
-'password-name-match' => 'Passordet ditt må være anderledes enn brukernavnet.',
-'password-login-forbidden' => 'Bruken av disse brukernavn og passord har blitt forbudt.',
-'mailmypassword' => 'Send nytt passord',
-'passwordremindertitle' => 'Nytt midlertidig passord fra {{SITENAME}}',
-'passwordremindertext' => 'Noen (antagelig deg, fra IP-adressen $1) ba oss sende deg et nytt
-passord til {{SITENAME}} ($4). Et midlertidig passord for «$2» har
-blitt laget og er satt til «$3». Om det var det du ville, må du logge inn
-og velge et nytt passord nå. Det midlertidige passordet vil utgå om {{PLURAL:$5|én dag|$5 dager}}.
-
-Dersom denne forespørselen ble utført av noen andre, eller om du kom på passordet
-og ikke lenger ønsker å endre det, kan du ignorere denne beskjeden
-og fortsette å bruke det gamle passordet.',
-'noemail' => 'Det er ikke registrert noen e-postadresse for brukeren «$1».',
-'noemailcreate' => 'De må oppgi en gyldig e-postadresse.',
-'passwordsent' => 'Et nytt passord har blitt sendt til e-postadressen registrert på bruker «$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.',
-'throttled-mailpassword' => 'En passordpåminnelse ble sendt for mindre enn {{PLURAL:$1|en time|$1 timer}} siden.
-For å forhindre misbruk kan kun én passordpåminnelse 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.',
-'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.',
-'invalidemailaddress' => 'Din e-postadresse kan ikke aksepteres, fordi den er ugyldig formatert.
-Skriv inn en fungerende e-postadresse eller tøm feltet.',
-'accountcreated' => 'Konto opprettet',
-'accountcreatedtext' => 'Brukerkonto for $1 har blitt opprettet.',
-'createaccount-title' => 'Kontooppretting på {{SITENAME}}',
-'createaccount-text' => 'Noen opprettet en konto for din e-postadresse på {{SITENAME}} ($4) med navnet «$2», med «$3» som passord. Du burde logge inn og endre passordet nå.
-
-Du kan ignorere denne beskjeden dersom kontoen ble opprettet ved en feil.',
-'usernamehasherror' => 'Brukernavn kan ikke inneholde nummertegn.',
-'login-throttled' => 'Du har prøvd å logge inn med denne kontoen for mange ganger. Vent før du prøver igjen.',
-'login-abort-generic' => 'Innleggingen ble avbrutt.',
-'loginlanguagelabel' => 'Språk: $1',
-'suspicious-userlogout' => 'Din forespørsel om å logge ut ble nektet fordi den så ut til å ha bli sendt av en ødelagt nettleser eller en mellomtjener.',
-
-# E-mail sending
-'php-mail-error-unknown' => 'Ukjent feil i PHPs mail()-funksjon',
-
-# Change password dialog
-'resetpass' => 'Endre passord',
-'resetpass_announce' => 'Du logget inn med en midlertidig e-postkode. For å fullføre innloggingen må du oppgi et nytt passord her:',
-'resetpass_text' => '<!-- Legg til tekst her -->',
-'resetpass_header' => 'Endre passord',
-'oldpassword' => 'Gammelt passord:',
-'newpassword' => 'Nytt passord:',
-'retypenew' => 'Gjenta nytt passord:',
-'resetpass_submit' => 'Angi passord og logg inn',
-'resetpass_success' => 'Passordet ditt ble endret! Logger inn&nbsp;…',
-'resetpass_forbidden' => 'Passord kan ikke endres',
-'resetpass-no-info' => 'Du må være logget inn for å gå til denne siden direkte',
-'resetpass-submit-loggedin' => 'Endre passord',
-'resetpass-submit-cancel' => 'Avbryt',
-'resetpass-wrong-oldpass' => 'Feil midlertidig eller nåværende passord.
-Du kan ha allerede byttet passordet, eller bedt om et nytt midlertidig passord.',
-'resetpass-temp-password' => 'Midlertidig passord:',
-
-# Special:PasswordReset
-'passwordreset' => 'Passordresetting',
-'passwordreset-text' => 'Fyll ut dette skjemaet for å motta en påminnelse om kontoopplysningene dine i en e-post.',
-'passwordreset-legend' => 'Tilbakestill passord',
-'passwordreset-disabled' => 'Tilbakestilling av passord har blitt deaktivert på denne wikien.',
-'passwordreset-pretext' => '{{PLURAL:$1||Angi en av datadelene nedenfor}}',
-'passwordreset-username' => 'Brukernavn:',
-'passwordreset-domain' => 'Domene:',
-'passwordreset-email' => 'E-postadresse:',
-'passwordreset-emailtitle' => 'Kontodetaljer på {{SITENAME}}',
-'passwordreset-emailtext-ip' => 'Noen (sannsynligvis deg fra IP-adressen $1) ba om en påminnelse om dine
-kontodetaljer for {{SITENAME}} ($4). {{PLURAL:$3|Den følgende brukerkontoen|De følgende brukerkontoene}} er
-tilknyttet denne e-postadressen:
-
-$2
-
-{{PLURAL:$3|Dette midlertidige passordet|Disse midlertidige passordene}} utløper om {{PLURAL:$5|én dag|$5 dager}}.
-Du bør logge på og velge et nytt passord nå. Dersom noen andre kom med denne
-forespørselen, eller du har kommet på ditt opprinnelige passord, og ikke lenger
-ønsker å endre det, kan du ignorere denne meldingen og fortsette å bruke ditt gamle
-passord.',
-'passwordreset-emailtext-user' => 'Brukeren $1 på {{SITENAME}} ba om en påminnelse om kontodetaljene dine for {{SITENAME}}
-($4). {{PLURAL:$3|Den følgende brukerkontoen|De følgende brukerkontoene}} er tilknyttet denne e-postadressen:
-
-$2
-
-{{PLURAL:$3|Dette midlertidige passordet|Disse midlertidige passordene}} utløper om {{én dag|$5 dager}}.
-Du bør logge på og velge et nytt passord nå. Dersom noen andre kom med denne
-forespørselen, eller du har kommet på ditt opprinnelige passord, og ikke lenger
-ønsker å endre det, kan du ignorere denne meldingen og fortsette å bruke ditt gamle
-passord.',
-'passwordreset-emailelement' => 'Brukernavn: $1
-Midlertidig passord: $2',
-'passwordreset-emailsent' => 'En påminnelse har blitt sendt på e-post.',
-
-# Edit page toolbar
-'bold_sample' => 'Fet tekst',
-'bold_tip' => 'Fet tekst',
-'italic_sample' => 'Kursiv tekst',
-'italic_tip' => 'Kursiv tekst',
-'link_sample' => 'Lenketittel',
-'link_tip' => 'Intern lenke',
-'extlink_sample' => 'http://www.example.com lenketittel',
-'extlink_tip' => 'Ekstern lenke (husk prefikset http://)',
-'headline_sample' => 'Overskriftstekst',
-'headline_tip' => 'Overskrift, nivå 2',
-'nowiki_sample' => 'Sett inn uformatert tekst her',
-'nowiki_tip' => 'Ignorer wikiformatering',
-'image_sample' => 'Eksempel.jpg',
-'image_tip' => 'Innebygd fil',
-'media_sample' => 'Eksempel.ogg',
-'media_tip' => 'Fillenke',
-'sig_tip' => 'Din signatur med dato',
-'hr_tip' => 'Horisontal linje (bruk sparsomt)',
-
-# Edit pages
-'summary' => 'Redigeringsforklaring:',
-'subject' => 'Emne/overskrift:',
-'minoredit' => 'Dette er en mindre endring',
-'watchthis' => 'Overvåk denne siden',
-'savearticle' => 'Lagre siden',
-'preview' => 'Forhåndsvisning',
-'showpreview' => 'Forhåndsvisning',
-'showlivepreview' => 'Levende forhåndsvisning',
-'showdiff' => 'Vis endringer',
-'anoneditwarning' => "'''Advarsel:''' Du er ikke logget inn.
-IP-adressen din blir bevart i sidens redigeringshistorikk.",
-'anonpreviewwarning' => "''Du er ikke logget inn. Lagring vil registrere din IP-adresse i sidens redigeringshistorikk.''",
-'missingsummary' => "'''Påminnelse:''' Du har ikke lagt inn en redigeringsforklaring.
-Velger du ''Lagre siden'' en gang til blir endringene lagret uten forklaring.",
-'missingcommenttext' => 'Vennligst legg inn en kommentar under.',
-'missingcommentheader' => "'''Påminnelse:''' Du har ikke angitt et emne/overskrift for denne kommentaren.
-Om du trykker «{{int:savearticle}}» igjen vil redigeringen din bli lagret uten forklaring.",
-'summary-preview' => 'Forhåndsvisning av redigeringsforklaring:',
-'subject-preview' => 'Forhåndsvisning av emne/overskrift:',
-'blockedtitle' => 'Brukeren er blokkert',
-'blockedtext' => "'''Ditt brukernavn eller din IP-adresse har blitt blokkert.'''
-
-Blokkeringen ble utført av $1. Grunnen som ble oppgitt var ''$2''.
-
-* Blokkeringen begynte: $8
-* Blokkeringen utgår: $6
-* Blokkering ment på: $7
-
-Du kan kontakte $1 eller en annen [[{{MediaWiki:Grouppage-sysop}}|administrator]] for å diskutere blokkeringen.
-Du kan ikke bruke «E-post til denne brukeren»-funksjonen med mindre du har oppgitt en gyldig e-postadresse i [[Special:Preferences|innstillingene dine]] og du ikke er blokkert fra å sende e-post.
-Din nåværende IP-adresse er $3, og blokkerings-ID-en er #$5.
-Vennligst ta all denne informasjonen ved henvendelser.",
-'autoblockedtext' => "Din IP-adresse har blitt automatisk blokkert fordi den ble brukt av en annen bruker som ble blokkert av $1.
-Den oppgitte grunnen var:
-
-:'''$2'''
-
-* Blokkeringen begynte: $8
-* Blokkeringen utgår: $6
-* Blokkeringen er ment for: $7
-
-Du kan kontakte $1 eller en av de andre [[{{MediaWiki:Grouppage-sysop}}|administratorene]] for å diskutere blokkeringen.
-
-Merk at du ikke kan bruke «E-post til denne brukeren»-funksjonen med mindre du har registrert en gyldig e-postadresse i [[Special:Preferences|innstillingene dine]].
-
-Din IP-adresse er $3, og blokkerings-ID-en er #$5.
-Vennligst ta med all denne informasjonen ved henvendelser.",
-'blockednoreason' => 'ingen grunn gitt',
-'whitelistedittext' => 'Du må $1 for å redigere artikler.',
-'confirmedittext' => 'Du må bekrefte e-postadressen din før du kan redigere sider. Vennligst oppgi og bekreft e-postadressen din via [[Special:Preferences|innstillingene dine]].',
-'nosuchsectiontitle' => 'Finner ikke avsnittet',
-'nosuchsectiontext' => 'Du prøvde å redigere et avsnitt som ikke eksisterer.
-Det kan ha blitt flyttet eller slettet mens du så på siden.',
-'loginreqtitle' => 'Innlogging kreves',
-'loginreqlink' => 'logge inn',
-'loginreqpagetext' => 'Du må $1 for å se andre sider.',
-'accmailtitle' => 'Passord sendt.',
-'accmailtext' => 'Et tilfeldig passord for [[User talk:$1|$1]] har blitt sendt til $2.
-
-Passordet for denne nye kontoen [[Special:ChangePassword|kan endres]] når du logger inn.',
-'newarticle' => '(Ny)',
-'newarticletext' => "Du har fulgt en lenke til en side som ikke finnes ennå.
-For å opprette siden, begynn å skrive i boksen under (se [[{{MediaWiki:Helppage}}|hjelpesiden]] for mer informasjon).
-Om du havnet her ved en feil, trykk '''tilbake''' i nettleseren.",
-'anontalkpagetext' => "----
-''Dette er en diskusjonsside for en uregistrert bruker som ikke har opprettet konto eller ikke er logget inn.
-Vi er derfor nødt til å bruke den numeriske IP-adressen til å identifisere ham eller henne.
-En IP-adresse kan være delt mellom flere brukere.
-Hvis du er en uregistrert bruker og synes at du har fått irrelevante kommentarer på en slik side, [[Special:UserLogin/signup|opprett en konto]] eller [[Special:UserLogin|logg inn]] så vi unngår fremtidige forvekslinger med andre uregistrerte brukere.''",
-'noarticletext' => 'Det er for tiden ingen tekst på denne siden.
-Du kan [[Special:Search/{{PAGENAME}}|søke etter denne sidetittelen]] på andre sider,
-<span class="plainlinks">[{{fullurl:{{#Special:Log}}|page={{FULLPAGENAMEE}}}} søke i relaterte logger],
-eller [{{fullurl:{{FULLPAGENAME}}|action=edit}} opprette siden]</span>.',
-'noarticletext-nopermission' => 'Det er ingen tekst på denne siden.
-Du kan [[Special:Search/{{PAGENAME}}|søke etter sidens tittel]] i andre sider, eller <span class="plainlinks">[{{fullurl:{{#Special:Log}}|page={{FULLPAGENAMEE}}}} søke i relevante logger]</span>.',
-'userpage-userdoesnotexist' => 'Brukerkontoen «<nowiki>$1</nowiki>» er ikke registrert. Sjekk om du ønsker å opprette/redigere denne siden.',
-'userpage-userdoesnotexist-view' => 'Kontoen «$1» er ikke registrert.',
-'blocked-notice-logextract' => 'Denne brukeren er for tiden blokkert.
-Siste blokkeringsloggelement kan sees nedenfor.',
-'clearyourcache' => "'''Merk:''' Etter lagring vil det kanskje være nødvendig at nettleseren sletter hurtiglageret sitt for at endringene skal tre i kraft.
-* '''Firefox / Safari:''' hold ''Shift'' mens du klikker på ''Oppdater'' eller trykk ''Ctrl-F5'' eller ''Ctrl-R'' (''Command-R'' på en Mac)
-* '''Google Chrome:''' trykk ''Ctrl-Shift-R'' (''Command-Shift-R'' på en Mac)
-* '''Internet Explorer:''' hold ''Ctrl'' mens du klikker på ''Oppdater'' eller trykk ''Ctrl-F5''
-* '''Konqueror:''' klikk ''Oppdater'' eller trykk ''F5''
-* '''Opera:''' tøm hurtiglageret i ''Verktøy → Innstillinger''",
-'usercssyoucanpreview' => "'''Tips:''' Bruk '{{int:showpreview}}'-knappen for å teste din nye CSS før du lagrer.",
-'userjsyoucanpreview' => "'''Tips:''' Bruk '{{int:showpreview}}'-knappen for å teste ditt nye JS før du lagrer.",
-'usercsspreview' => "'''Husk at dette bare er en forhåndsvisning av din bruker-CSS og at den ikke er lagret!'''",
-'userjspreview' => "'''Husk at dette bare er en test eller forhåndsvisning av ditt bruker-JavaScript, og det ikke er lagret!'''",
-'sitecsspreview' => "'''Husk at du bare forhåndsviser denne CSS.'''
-'''Den har ikke blitt lagret ennå!'''",
-'sitejspreview' => "'''Husk at du bare forhåndsviser denne JavaScript-koden.'''
-'''Den har ikke blitt lagret ennå!'''",
-'userinvalidcssjstitle' => "'''Advarsel:''' Det finnes ikke noe utseende ved navn «$1». Husk at .css- og .js-sider bruker titler i små bokstaver, for eksempel {{ns:user}}:Eksempel/vector.css, ikke {{ns:user}}:Eksempel/Vector.css",
-'updated' => '(Oppdatert)',
-'note' => "'''Merk:'''",
-'previewnote' => "'''Husk at dette bare er en forhåndsvisning.'''
-Endringene dine har ikke blitt lagret ennå!",
-'previewconflict' => 'Slik vil teksten i redigeringsvinduet se ut dersom du lagrer den.',
-'session_fail_preview' => "'''Beklager! Klarte ikke å lagre redigeringen din. Prøv igjen. Om det fortsetter å gå galt, prøv å [[Special:UserLogout|logge ut]] og så inn igjen.'''",
-'session_fail_preview_html' => "'''Beklager! Klarte ikke å lagre redigeringen din på grunn av tap av øktdata.'''
-
-''Fordi {{SITENAME}} har rå HTML slått på, er forhåndsvisningen skjult for å forhindre JavaScript-angrep.''
-
-'''Om dette er et legitimt redigeringsforsøk, prøv igjen. Om det da ikke fungerer, prøv å [[Special:UserLogout|logge ut]] og logge inn igjen.'''",
-'token_suffix_mismatch' => "'''Redigeringen din har blitt avvist fordi klienten din ikke hadde punktasjonstegn i redigeringsteksten. Redigeringen har blitt avvist for å hindre ødeleggelse av artikkelteksten. Dette forekommer av og til når man bruker vevbaserte anonyme proxytjenester.'''",
-'edit_form_incomplete' => "'''Deler av redigeringsskjemaet nådde ikke tjeneren; dobbelsjekk at redigeringen er korrekt og prøv igjen.'''",
-'editing' => 'Redigerer $1',
-'editingsection' => 'Redigerer $1 (avsnitt)',
-'editingcomment' => 'Redigerer $1 (ny seksjon)',
-'editconflict' => 'Redigeringskonflikt: $1',
-'explainconflict' => "Noen andre har endret teksten siden du begynte å redigere.
-Den øverste boksen inneholder den nåværende tekst.
-Dine endringer vises i den nederste boksen.
-Du er nødt til å flette dine endringer sammen med den nåværende teksten.
-'''Kun''' teksten i den øverste tekstboksen blir lagret når du trykker «{{int:savearticle}}».",
-'yourtext' => 'Din tekst',
-'storedversion' => 'Den lagrede versjonen',
-'nonunicodebrowser' => "'''ADVARSEL: Nettleseren din har ikke støtte for Unicode. Skru det på før du begynner å redigere artikler.'''",
-'editingold' => "'''ADVARSEL:
-Du redigerer en gammel versjon av denne siden.
-Hvis du lagrer den, vil alle endringer foretatt siden denne versjonen bli overskrevet.'''",
-'yourdiff' => 'Forskjeller',
-'copyrightwarning' => "Merk at alle bidrag til {{SITENAME}} anses som utgitt under $2 (se $1 for detaljer).
-Om du ikke vil at dine bidrag skal kunne redigeres og distribuert fritt etter andres forgodtbefinnende, ikke legg det til her.<br />
-Du lover også at du har skrevet dette selv, eller kopiert det fra en ressurs som samsvarer med vilkårene eller ikke er vernet av opphavsrett.
-'''Ikke legg til opphavsbeskyttet materiale uten tillatelse!'''",
-'copyrightwarning2' => "Vennligst merk at alle bidrag til {{SITENAME}} kan bli redigert, endret eller fjernet av andre bidragsytere. Om du ikke vil at dine bidrag skal kunne redigeres fritt, ikke legg det til her.<br />
-Du lover også at du har skrevet dette selv, eller kopiert det fra en ressurs som er i public domain eller lignende (se $1 for detaljer). '''IKKE LEGG TIL OPPHAVSBESKYTTET MATERIALE UTEN TILLATELSE!'''",
-'readonlywarning' => "'''ADVARSEL: Databasen er låst på grunn av vedlikehold,
-så du kan ikke lagre dine endringer akkurat nå. Det kan være en god idé å
-kopiere teksten din til en tekstfil, så du kan lagre den til senere.'''
-
-Systemadministratoren som låste databasen oppga følgende årsak: $1",
-'protectedpagewarning' => "'''Advarsel: Denne siden har blitt låst slik at kun brukere med administratorrettigheter kan redigere den.'''
-Det siste loggelementet er oppgitt under som referanse:",
-'semiprotectedpagewarning' => "'''Merk:''' Denne siden har blitt låst slik at kun registrerte brukere kan endre den.
-Det siste loggelementet er oppgitt under som referanse:",
-'cascadeprotectedwarning' => "'''Advarsel:''' Denne siden har blitt låst slik at kun brukere med administratorrettigheter kan redigere den, fordi den inkluderes på følgende dypbeskyttede sider:<!--{{PLURAL:$1}}-->",
-'titleprotectedwarning' => "'''Advarsel: Denne siden har blitt låst slik at [[Special:ListGroupRights|spesielle rettigheter]] kreves for å opprette den.'''
-Det siste loggelementet er oppgitt under som referanse:",
-'templatesused' => '{{PLURAL:$1|Mal|Maler}} som brukes på denne siden:',
-'templatesusedpreview' => '{{PLURAL:$1|Mal|Maler}} brukt i denne forhåndsvisningen:',
-'templatesusedsection' => '{{PLURAL:$1|Mal|Maler}} brukt i denne seksjonen:',
-'template-protected' => '(beskyttet)',
-'template-semiprotected' => '(halvbeskyttet)',
-'hiddencategories' => 'Denne siden er medlem av {{PLURAL:$1|1 skjult kategori|$1 skjulte kategorier}}:',
-'edittools' => '<!-- Teksten her vil vises under redigerings- og opplastingsboksene. -->',
-'nocreatetitle' => 'Sideoppretting er begrenset',
-'nocreatetext' => '{{SITENAME}} har begrensede muligheter for oppretting av nye sider. Du kan gå tilbake og redigere en eksisterende side, eller [[Special:UserLogin|logge inn eller opprette en ny konto]].',
-'nocreate-loggedin' => 'Du har ikke tillatelse til å opprette sider.',
-'sectioneditnotsupported-title' => 'Seksjonsredigering støttes ikke',
-'sectioneditnotsupported-text' => 'Seksjonsredigering støttes ikke på denne siden.',
-'permissionserrors' => 'Tilgangsfeil',
-'permissionserrorstext' => 'Du har ikke tillatelse til å utføre dette, av følgende {{PLURAL:$1|grunn|grunner}}:',
-'permissionserrorstext-withaction' => 'Du har ikke tillatelse til å $2 {{PLURAL:$1|på grunn av|av følgende grunner}}:',
-'recreate-moveddeleted-warn' => "Advarsel: Du er i ferd med å opprette en side som tidligere har blitt slettet.'''
-
-Du bør vurdere om det er passende å fortsette å redigere denne siden.
-Slette- og flytteloggen for denne siden gjengis her:",
-'moveddeleted-notice' => 'Denne siden har blitt slettet.
-Slette- og flytteloggen vises nedenfor.',
-'log-fulllog' => 'Vis fullstendig logg',
-'edit-hook-aborted' => 'Redigering avbrutt av en funksjon, uten forklaring.',
-'edit-gone-missing' => 'Kunne ikke oppdatere siden fordi den har blitt slettet.',
-'edit-conflict' => 'Redigeringskonflikt.',
-'edit-no-change' => 'Redigeringen din ble ignorert fordi det ikke var noen endringer.',
-'edit-already-exists' => 'Kunne ikke opprette ny side fordi den finnes fra før.',
-
-# Parser/template warnings
-'expensive-parserfunction-warning' => 'Advarsel: Denne siden inneholder for mange prosesskrevende parserfunksjoner.
-
-Det burde være mindre enn {{PLURAL:$2|$2|$2}}, men er nå {{PLURAL:$1|$1|$1}}..',
-'expensive-parserfunction-category' => 'Sider med for mange prosesskrevende parserfunksjoner',
-'post-expand-template-inclusion-warning' => 'Advarsel: Størrelsen på inkluderte maler er for stor.
-Noen maler vil ikke bli inkludert.',
-'post-expand-template-inclusion-category' => 'Sider som inneholder for store maler',
-'post-expand-template-argument-warning' => 'Advarsel: Siden inneholder ett eller flere malparametere som blir for lange når de utvides.
-Disse parameterne har blitt utelatt.',
-'post-expand-template-argument-category' => 'Sider med utelatte malparametere',
-'parser-template-loop-warning' => 'Mal-loop oppdaget: [[$1]]',
-'parser-template-recursion-depth-warning' => 'Mal er brukt for mange ganger ($1)',
-'language-converter-depth-warning' => 'Dybdegrense for språkkonvertering overskredet ($1)',
-
-# "Undo" feature
-'undo-success' => 'Redigeringen kan omgjøres. Sjekk sammenligningen under for å bekrefte at du vil gjøre dette, og lagre endringene for å fullføre omgjøringen.',
-'undo-failure' => 'Redigeringen kunne ikke omgjøres på grunn av konflikterende etterfølgende redigeringer.',
-'undo-norev' => 'Redigeringen kunne ikke fjernes fordi den ikke eksisterer eller ble slettet',
-'undo-summary' => 'Fjerner revisjon $1 av [[Special:Contributions/$2]] ([[User talk:$2|diskusjon]] | [[Special:Contributions/$2|{{int:contribslink}}]])',
-
-# Account creation failure
-'cantcreateaccounttitle' => 'Kan ikke opprette konto',
-'cantcreateaccount-text' => "Kontooppretting fra denne IP-adressen ('''$1''') har blitt blokkert av [[User:$3|$3]].
-
-Grunnen som ble oppgitt av $3 er ''$2''",
-
-# History pages
-'viewpagelogs' => 'Vis logger for denne siden',
-'nohistory' => 'Denne siden har ingen historikk.',
-'currentrev' => 'Nåværende versjon',
-'currentrev-asof' => 'Nåværende revisjon fra $1',
-'revisionasof' => 'Revisjonen fra $1',
-'revision-info' => 'Revisjon per $1 av $2',
-'previousrevision' => '← Eldre revisjon',
-'nextrevision' => 'Nyere revisjon →',
-'currentrevisionlink' => 'Nåværende revisjon',
-'cur' => 'nå',
-'next' => 'neste',
-'last' => 'forrige',
-'page_first' => 'første',
-'page_last' => 'siste',
-'histlegend' => "Valg av diff: merk i radioboksene de revisjonene du ønsker å sammenligne og trykk linjeskift eller knappen nederst på siden.<br />
-Forklaring: '''({{int:cur}})''' = forskjell fra nåværende revisjon, '''({{int:last}})''' = forskjell fra foregående revisjon, '''{{int:minoreditletter}}''' = mindre endring.",
-'history-fieldset-title' => 'Bla i historikken',
-'history-show-deleted' => 'Kun slettede',
-'histfirst' => 'Første',
-'histlast' => 'Siste',
-'historysize' => '({{PLURAL:$1|1 byte|$1 byte}})',
-'historyempty' => '(tom)',
-
-# Revision feed
-'history-feed-title' => 'Revisjonshistorikk',
-'history-feed-description' => 'Revisjonshistorikk for denne siden',
-'history-feed-item-nocomment' => '$1 på $2',
-'history-feed-empty' => 'Den etterspurte siden finnes ikke. Den kan ha blitt slettet fra wikien, eller fått et nytt navn. Prøv å [[Special:Search|søke]] etter beslektede sider.',
-
-# Revision deletion
-'rev-deleted-comment' => '(redigeringskommentar fjernet)',
-'rev-deleted-user' => '(brukernavn fjernet)',
-'rev-deleted-event' => '(fjernet loggoppføring)',
-'rev-deleted-user-contribs' => '[brukernavn eller IP-adresse fjernet – redigeringen vises ikke blant bidragene]',
-'rev-deleted-text-permission' => "Denne revisjonen har blitt '''slettet'''.
-Det kan være detaljer i [{{fullurl:{{#Special:Log}}/delete|page={{FULLPAGENAMEE}}}} slettingsloggen].",
-'rev-deleted-text-unhide' => "Denne siderevisjonen har blitt '''slettet'''.
-Se etter detaljer i slettingsloggen: [{{fullurl:{{#Special:Log}}/delete|page={{FULLPAGENAMEE}}}}].
-Som administrator kan du fortsatt [$1 se revisjonen] om du ønsker det.",
-'rev-suppressed-text-unhide' => "Denne siderevisjonen har blitt '''skjult'''.
-Informasjon om dette kan finnes i [{{fullurl:{{#Special:Log}}/suppress|page={{FULLPAGENAMEE}}}} skjulingsloggen].
-Som administrator kan du fortsatt [$1 se revisjonen] om du ønsker det.",
-'rev-deleted-text-view' => "Denne siderevisjonen har blitt '''slettet'''.
-Som administrator kan du fortsatt se den. Detaljer finnes i slettingsloggen: [{{fullurl:{{#Special:Log}}/delete|page={{FULLPAGENAMEE}}}}].",
-'rev-suppressed-text-view' => "!Denne siderevisjonen har blitt '''skjult'''.
-Som administrator kan du se den; detaljer kan finnes i [{{fullurl:{{#Special:Log}}/suppress|page={{FULLPAGENAMEE}}}} skjulingsloggen].",
-'rev-deleted-no-diff' => "Du kan ikke vise forskjellen fordi en av versjonene har blitt '''slettet'''.
-Det kan finnes flere detaljer i [{{fullurl:{{#Special:Log}}/delete|page={{FULLPAGENAMEE}}}} slettingsloggen].",
-'rev-suppressed-no-diff' => "Du kanne ikke se revisjonsforskjellen fordi en av revisjonene har blitt '''slettet'''.",
-'rev-deleted-unhide-diff' => "Én av revisjonene i denne diffen har blitt '''slettet'''.
-Det finnes flere detaljer i [{{fullurl:{{#Special:Log}}/delete|page={{FULLPAGENAMEE}}}} slettingsloggen].
-Som administrator kan du fortsatt [$1 se diffen] om du ønsker å gå videre.",
-'rev-suppressed-unhide-diff' => "En av siderevisjonene i denne diffen har blitt '''skjult'''.
-Det kan være detaljer i [{{fullurl:{{#Special:Log}}/suppress|page={{FULLPAGENAMEE}}}} skjulingsloggen].
-Som administrator kan du fortsatt [$1 se diffen] om du ønsker å gå videre.",
-'rev-deleted-diff-view' => "En av revisjonene i denne diffen har blitt '''slettet'''.
-Som administrator kan du se diffen; det kan finnes detaljer i [{{fullurl:{{#Special:Log}}/delete|page={{FULLPAGENAMEE}}}} sletteloggen].",
-'rev-suppressed-diff-view' => "En av revisjonene i denne diffen har blitt '''skjult'''.
-Som administrator kan du se denne diffen; det kan finnes detaljer i [{{fullurl:{{#Special:Log}}/suppcess|page={{FULLPAGENAMEE}}}} skjulingsloggen].",
-'rev-delundel' => 'vis/skjul',
-'rev-showdeleted' => 'vis',
-'revisiondelete' => 'Slett/gjenopprett revisjoner',
-'revdelete-nooldid-title' => 'Ugyldig målversjon',
-'revdelete-nooldid-text' => 'Du har ikke angitt en målversjon for denne funksjonen, den angitte versjonen finnes ikke, eller du forsøker å skjule den nåværende versjonen.',
-'revdelete-nologtype-title' => 'Ingen loggtype spesifisert',
-'revdelete-nologtype-text' => 'Du har ikke spesifisert en loggtype å utføre denne handlingen på.',
-'revdelete-nologid-title' => 'Ugyldig loggelement',
-'revdelete-nologid-text' => 'Du har enten ikke spesifisert ett loggelement å utføre på denne funksjonen, eller spesifisert element finnes ikke.',
-'revdelete-no-file' => 'Den spesifiserte filen finnes ikke.',
-'revdelete-show-file-confirm' => 'Er du sikker på at du ønsker å vise en slettet versjon av filen «<nowiki>$1</nowiki>» fra den $2 klokken $3?',
-'revdelete-show-file-submit' => 'Ja',
-'revdelete-selected' => "'''{{PLURAL:$2|Valgt revisjon|Valgte revisjoner}} av [[:$1]]:'''",
-'logdelete-selected' => "'''{{PLURAL:$1|Valgt loggoppføring|Valgte loggoppføringer}}:'''",
-'revdelete-text' => "'''Slettede versjoner og oppføringer vil fortsatt vises i sidehistorikken og loggene, men deler av innholdet vil ikke lenger bli offentliggjort.'''
-Andre administratorer på {{SITENAME}} vil fortsatt kunne se det skjulte innholdet, og kan gjenopprette det, med mindre videre begrensninger blir gitt av sideoperatørene.",
-'revdelete-confirm' => 'Bekreft at du ønsker å gjøre dette, at du forstår konsekvensene, og at du gjør det i samsvar med [[{{MediaWiki:Policy-url}}|retningslinjene]].',
-'revdelete-suppress-text' => "Skjuling bør '''kun''' brukes i følgende tilfeller:
-* Mulig injurierende utsagn
-* Upassende personlige opplysninger, herunder
-*: ''privatadresser og -telefonnumre, fødselsnumre og lignende''",
-'revdelete-legend' => 'Fastsett synlighetsbegrensninger',
-'revdelete-hide-text' => 'Skjul revisjonstekst',
-'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-restricted' => 'La disse begrensningene gjelde for administratorer også, og steng dette grensesnittet',
-'revdelete-radio-same' => '(ikke endre)',
-'revdelete-radio-set' => 'Ja',
-'revdelete-radio-unset' => 'Nei',
-'revdelete-suppress' => 'Skjul informasjon også fra administratorer',
-'revdelete-unsuppress' => 'Fjern betingelser på gjenopprettede revisjoner',
-'revdelete-log' => 'Årsak:',
-'revdelete-submit' => 'Utfør på {{PLURAL:$1|valgt revisjon|valgte revisjoner}}',
-'revdelete-success' => "'''Versjonssynlighet vellykket oppdatert.'''",
-'revdelete-failure' => "'''Kunne ikke endre versjonssynligheten:'''
-$1",
-'logdelete-success' => "'''Hendelsessynlighet satt.'''",
-'logdelete-failure' => "'''Loggens synlighet kunne ikke bli stilt inn:'''
-$1",
-'revdel-restore' => 'endre synlighet',
-'revdel-restore-deleted' => 'slettede revisjoner',
-'revdel-restore-visible' => 'synlige revisjoner',
-'pagehist' => 'Sidehistorikk',
-'deletedhist' => 'Slettet historikk',
-'revdelete-hide-current' => 'Feil under skjuling av objektet datert $2, $1: dette er den gjeldende revisjonen.
-Den kan ikke skjules.',
-'revdelete-show-no-access' => 'Feil under visning av objekt datert $2, $1: dette objektet har blitt markert "begrenset".
-Du har ikke tilgang til det.',
-'revdelete-modify-no-access' => 'Feil under endring av objekt datert $2, $1: dette objektet har blitt markert "begrenset".
-Du har ikke tilgang til det.',
-'revdelete-modify-missing' => 'Feil under endring av objekt ID $1: det mangler i databasen!',
-'revdelete-no-change' => "'''Advarsel:''' objektet datert $2 $1 hadde allerede synlighetsinnstillingene du forespurte.",
-'revdelete-concurrent-change' => 'Feil under endring av objektet datert $2, $1: dets status ser ut til å ha blitt endret av noen andre mens du prøvde å endre det.
-Vennligst sjekk loggen.',
-'revdelete-only-restricted' => 'Feil ved gjemming av objekt datert $2, $1: du kan ikke skjule objekt fra å vises for administratorer uten også å velge en av de andre visningsalternativene.',
-'revdelete-reason-dropdown' => '*Vanlige slettingsgrunner
-** Opphavsrettsbrudd
-** Upassende personopplysninger
-** Mulig falskt sladder',
-'revdelete-otherreason' => 'Annen/ytterligere årsak:',
-'revdelete-reasonotherlist' => 'Annen årsak',
-'revdelete-edit-reasonlist' => 'Rediger begrunnelser for sletting',
-'revdelete-offender' => 'Forfatter av denne versjonen:',
-
-# Suppression log
-'suppressionlog' => 'Sideskjulingslogg',
-'suppressionlogtext' => 'Under er en liste over sider som er slettet eller blokkert med innhold skjult fra administratorer.
-Se [[Special:BlockList|IP-blokkeringsliste]] for oversikt over aktuelle utelukkelser og blokkeringer.',
-
-# History merging
-'mergehistory' => 'Flett sidehistorikker',
-'mergehistory-header' => 'Denne siden lar deg flette historikken til to sider.
-Forsikre deg om at denne endringen vil opprettholde historisk sidekontinuitet.',
-'mergehistory-box' => 'Flett historikken til to sider:',
-'mergehistory-from' => 'Kildeside:',
-'mergehistory-into' => 'Målside:',
-'mergehistory-list' => 'Flettbar redigeringshistorikk',
-'mergehistory-merge' => 'Følgende revisjoner av [[:$1]] kan flettes til [[:$2]]. Du kan velge å flette kun de revisjonene som kom før tidspunktet gitt i tabellen. Merk at bruk av navigasjonslenkene vil resette denne kolonnen.',
-'mergehistory-go' => 'Vis flettbare redigeringer',
-'mergehistory-submit' => 'Flett revisjoner',
-'mergehistory-empty' => 'Ingen revisjoner kan flettes.',
-'mergehistory-success' => '{{PLURAL:$3|Én revisjon|$3 revisjoner}} av [[:$1]] ble flettet til [[:$2]].',
-'mergehistory-fail' => 'Klarte ikke å utføre historikkfletting; sjekk siden og tidsparameterne igjen.',
-'mergehistory-no-source' => 'Kildesiden $1 finnes ikke.',
-'mergehistory-no-destination' => 'Målsiden $1 finnes ikke.',
-'mergehistory-invalid-source' => 'Kildesiden må ha en gyldig tittel.',
-'mergehistory-invalid-destination' => 'Målsiden må ha en gyldig tittel.',
-'mergehistory-autocomment' => 'Flettet [[:$1]] inn i [[:$2]]',
-'mergehistory-comment' => 'Flettet [[:$1]] inn i [[:$2]]: $3',
-'mergehistory-same-destination' => 'Kilde- og målside kan ikke være den samme.',
-'mergehistory-reason' => 'Årsak:',
-
-# Merge log
-'mergelog' => 'Flettingslogg',
-'pagemerge-logentry' => 'flettet [[$1]] til [[$2]] (revisjoner fram til $3)',
-'revertmerge' => 'Omgjør fletting',
-'mergelogpagetext' => 'Nedenfor er en liste over de nyligste flettingene av sidehistorikker.',
-
-# Diffs
-'history-title' => 'Revisjonshistorikk for «$1»',
-'difference-multipage' => '(Forskjell mellom sider)',
-'lineno' => 'Linje $1:',
-'compareselectedversions' => 'Sammenlign valgte revisjoner',
-'showhideselectedversions' => 'Vis/skjul valgte versjoner',
-'editundo' => 'angre',
-'diff-multi' => '({{PLURAL:$1|Én mellomrevisjon|$1 mellomrevisjoner}} av {{PLURAL:$2|én bruker|$2 brukere}} vises ikke)',
-'diff-multi-manyusers' => '({{PLURAL:$1|Én mellomrevisjon|$1 mellomrevisjoner}} av mer enn $2 {{PLURAL:$2|bruker|brukere}} vises ikke)',
-
-# Search results
-'searchresults' => 'Søkeresultat',
-'searchresults-title' => 'Søkeresultat for «$1»',
-'searchresulttext' => 'For mer informasjon om søking i {{SITENAME}}, se [[{{MediaWiki:Helppage}}|{{int:help}}]].',
-'searchsubtitle' => "Du søkte etter '''[[:$1]]''' ([[Special:Prefixindex/$1|alle sider som begynner med «$1»]]{{int:pipe-separator}}[[Special:WhatLinksHere/$1|alle sider som lenker til «$1»]])",
-'searchsubtitleinvalid' => "Du søkte etter '''$1'''",
-'toomanymatches' => 'For mange mulige svar, prøv med en annen spørring',
-'titlematches' => 'Artikkeltitler med treff på forespørselen',
-'notitlematches' => 'Ingen sidetitler samsvarte med søket',
-'textmatches' => 'Artikkeltekster med treff på forespørselen',
-'notextmatches' => 'Inden sidetekst samsvarte med søket',
-'prevn' => 'forrige {{PLURAL:$1|$1}}',
-'nextn' => 'neste {{PLURAL:$1|$1}}',
-'prevn-title' => 'Forrige $1 {{PLURAL:$1|resultat|resultater}}',
-'nextn-title' => 'Neste $1 {{PLURAL:$1|resultat|resultater}}',
-'shown-title' => 'Vis $1 {{PLURAL:$1|resultat|resultater}} per side',
-'viewprevnext' => 'Vis ($1 {{int:pipe-separator}} $2) ($3)',
-'searchmenu-legend' => 'Søkeinnstillinger',
-'searchmenu-exists' => "* Siden '''[[$1]]'''",
-'searchmenu-new' => "'''Opprett siden ''[[:$1]]'' på denne wikien.'''",
-'searchhelp-url' => 'Help:Hjelp',
-'searchmenu-prefix' => '[[Special:PrefixIndex/$1|Vis alle sider som begynner med dette]]',
-'searchprofile-articles' => 'Innholdssider',
-'searchprofile-project' => 'Hjelp- og prosjektsider',
-'searchprofile-images' => 'Multimedia',
-'searchprofile-everything' => 'Alt',
-'searchprofile-advanced' => 'Avansert',
-'searchprofile-articles-tooltip' => 'Søk i $1',
-'searchprofile-project-tooltip' => 'Søk i $1',
-'searchprofile-images-tooltip' => 'Søk etter filer',
-'searchprofile-everything-tooltip' => 'Søk i alt innhold (inkldert diskusjonssider)',
-'searchprofile-advanced-tooltip' => 'Søk i visse navnerom',
-'search-result-size' => '$1 ({{PLURAL:$2|ett|$2}} ord)',
-'search-result-category-size' => '{{PLURAL:$1|1 medlem|$1 medlemmer}} ({{PLURAL:$2|1 underkategori|$2 underkategorier}}, {{PLURAL:$3|1 fil|$3 filer}})',
-'search-result-score' => 'Relevans: $1&nbsp;%',
-'search-redirect' => '(omdirigering $1)',
-'search-section' => '(avsnitt $1)',
-'search-suggest' => 'Mente du: $1',
-'search-interwiki-caption' => 'Søsterprosjekt',
-'search-interwiki-default' => '$1-resultat:',
-'search-interwiki-more' => '(mer)',
-'search-mwsuggest-enabled' => 'med forslag',
-'search-mwsuggest-disabled' => 'ingen forslag',
-'search-relatedarticle' => 'Relatert',
-'mwsuggest-disable' => 'Slå av AJAX-forslag',
-'searcheverything-enable' => 'Søk i alle navnerom',
-'searchrelated' => 'relatert',
-'searchall' => 'alle',
-'showingresults' => "Nedenfor vises opptil {{PLURAL:$1|'''ett''' resultat|'''$1''' resultater}} fra og med nummer <b>$2</b>.",
-'showingresultsnum' => "Nedenfor vises {{PLURAL:$3|'''ett''' resultat|'''$3''' resultater}} fra og med nummer '''$2'''.",
-'showingresultsheader' => "{{PLURAL:$5|Resultat '''$1''' av '''$3'''|Resultat '''$1 - $2''' av '''$3'''}} for '''$4'''",
-'nonefound' => "'''Merk''': Som standard søkes det kun i enkelte navnerom.
-For å søke i alle, bruk prefikset ''all:'' (inkluderer diskusjonssider, maler, osv), eller bruk det ønskede navnerommet som prefiks.",
-'search-nonefound' => 'Det var ingen resultater som passet til søket.',
-'powersearch' => 'Avansert søk',
-'powersearch-legend' => 'Avansert søk',
-'powersearch-ns' => 'Søk i navnerom:',
-'powersearch-redir' => 'Vis omdirigeringer',
-'powersearch-field' => 'Søk etter',
-'powersearch-togglelabel' => 'Merk:',
-'powersearch-toggleall' => 'Alle',
-'powersearch-togglenone' => 'Ingen',
-'search-external' => 'Eksternt søk',
-'searchdisabled' => 'Søkefunksjonen er slått av. Du kan søke via Google i mellomtiden. Merk at Googles indeksering av {{SITENAME}} muligens er utdatert.',
-
-# Quickbar
-'qbsettings' => 'Brukerinnstillinger for hurtigmeny.',
-'qbsettings-none' => 'Ingen',
-'qbsettings-fixedleft' => 'Fast venstre',
-'qbsettings-fixedright' => 'Fast høyre',
-'qbsettings-floatingleft' => 'Flytende venstre',
-'qbsettings-floatingright' => 'Flytende til høyre',
-'qbsettings-directionality' => '"Låst", f. eks. i posisjon "låst til venstre eller til høyre". For venstre-mot-høyre-språk vil hurtigvelgeren være satt til venstre, for høyre-mot-venstre-språk til høyre.',
-
-# Preferences page
-'preferences' => 'Innstillinger',
-'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',
-'datedefault' => 'Ingen foretrukket',
-'prefs-beta' => 'Betafunksjoner',
-'prefs-datetime' => 'Dato og tid',
-'prefs-labs' => 'Lab-funksjoner',
-'prefs-personal' => 'Brukerdata',
-'prefs-rc' => 'Siste endringer',
-'prefs-watchlist' => 'Overvåkningsliste',
-'prefs-watchlist-days' => 'Dager som skal vises i overvåkningslisten:',
-'prefs-watchlist-edits' => 'Antall redigeringer som skal vises i utvidet overvåkningsliste:',
-'prefs-watchlist-edits-max' => 'Maksimum antall: 1000',
-'prefs-watchlist-token' => 'Nøkkel for overvåkningsliste',
-'prefs-misc' => 'Diverse',
-'prefs-resetpass' => 'Endre passord',
-'prefs-email' => 'Alternativer for e-post',
-'prefs-rendering' => 'Utseende',
-'saveprefs' => 'Lagre',
-'resetprefs' => 'Tilbakestill ulagrede endringer',
-'restoreprefs' => 'Tilbakestill til standardinnstillinger overalt',
-'prefs-editing' => 'Redigering',
-'prefs-edit-boxsize' => 'Størrelse på redigeringsvinduet.',
-'rows' => 'Rader:',
-'columns' => 'Kolonner',
-'searchresultshead' => 'Søk',
-'resultsperpage' => 'Resultater per side:',
-'stub-threshold' => 'Grense for <span class="mw-stub-example">stubblenkeformatering</span>:',
-'stub-threshold-disabled' => 'Deaktivert',
-'recentchangesdays' => 'Antall dager som skal vises i siste endringer:',
-'recentchangesdays-max' => '(maksimum $1 {{PLURAL:$1|dag|dager}})',
-'recentchangescount' => 'Antall redigeringer som skal vises som standard:',
-'prefs-help-recentchangescount' => 'Dette inkluderer nylige endringer, sidehistorikk og logger.',
-'prefs-help-watchlist-token' => 'Om du fyller ut dette feltet med et hemmelig tall, vil det lages en RSS-liste for overvåkningslisten din.
-Alle som vet det rette tallet vil være i stand til å lese overvåkningslisten din, så velg en sikker verdi.
-Her er et tilfeldig tall du kan bruke: $1',
-'savedprefs' => 'Innstillingene ble lagret.',
-'timezonelegend' => 'Tidssone:',
-'localtime' => 'Lokaltid:',
-'timezoneuseserverdefault' => 'Bruk wikistandard ($1)',
-'timezoneuseoffset' => 'Annet (spesifiser forskjell)',
-'timezoneoffset' => 'Forskjell¹:',
-'servertime' => 'Serverens tid er nå:',
-'guesstimezone' => 'Hent tidssone fra nettleseren',
-'timezoneregion-africa' => 'Afrika',
-'timezoneregion-america' => 'Amerika',
-'timezoneregion-antarctica' => 'Antarktis',
-'timezoneregion-arctic' => 'Arktis',
-'timezoneregion-asia' => 'Asia',
-'timezoneregion-atlantic' => 'Atlanterhavet',
-'timezoneregion-australia' => 'Australia',
-'timezoneregion-europe' => 'Europe',
-'timezoneregion-indian' => 'Det indiske hav',
-'timezoneregion-pacific' => 'Stillehavet',
-'allowemail' => 'Tillat andre å sende meg e-post',
-'prefs-searchoptions' => 'Søkealternativ',
-'prefs-namespaces' => 'Navnerom',
-'defaultns' => 'Søk ellers i disse navnerommene:',
-'default' => 'standard',
-'prefs-files' => 'Filer',
-'prefs-custom-css' => 'Personlig CSS',
-'prefs-custom-js' => 'Personlig Javascript',
-'prefs-common-css-js' => 'Delt CSS/JS for alle drakter:',
-'prefs-reset-intro' => 'Du kan bruke denne siden til å tilbakestille innstillingene dine til standardinnstillingene.
-Dette kan ikke tilbakestilles.',
-'prefs-emailconfirm-label' => 'E-postbekreftelse:',
-'prefs-textboxsize' => 'Størrelse på redigeringsvindu',
-'youremail' => 'E-post:',
-'username' => 'Brukernavn:',
-'uid' => 'Bruker-ID:',
-'prefs-memberingroups' => 'Medlem i følgende {{PLURAL:$1|gruppe|grupper}}:',
-'prefs-registration' => 'Registreringstid:',
-'yourrealname' => 'Virkelig navn:',
-'yourlanguage' => 'Språk:',
-'yourvariant' => 'Språkvariant for innhold:',
-'yournick' => 'Signatur:',
-'prefs-help-signature' => 'Kommentarer på diskusjonssider bør alltid signeres med «<nowiki>~~~~</nowiki>», som vil bli konvertert til din signatur med tidspunkt.',
-'badsig' => 'Ugyldig råsignatur; sjekk HTML-elementer.',
-'badsiglength' => 'Signaturen er for lang.
-Den kan maks inneholde $1 {{PLURAL:$1|tegn|tegn}}.',
-'yourgender' => 'Kjønn:',
-'gender-unknown' => 'Uspesifisert',
-'gender-male' => 'Mann',
-'gender-female' => 'Kvinne',
-'prefs-help-gender' => 'Valgfritt: brukes for kjønnskorrekt tekst av programvaren. Denne informasjonen vil være offentlig.',
-'email' => 'E-post',
-'prefs-help-realname' => '* Virkelig navn (valgfritt): dersom du velger å oppgi navnet, vil det bli brukt til å kreditere deg for ditt arbeid.',
-'prefs-help-email' => 'Å angi e-postadresse er valgfritt, men er nødvendig for å få tilsendt nytt passord om du skulle glemme det gamle.',
-'prefs-help-email-others' => 'Du kan også velge å la andre brukere kontakte deg via brukersiden din uten å røpe identiteten din.',
-'prefs-help-email-required' => 'E-postadresse er påkrevd.',
-'prefs-info' => 'Grunnleggende informasjon',
-'prefs-i18n' => 'Internasjonalisering',
-'prefs-signature' => 'Signatur',
-'prefs-dateformat' => 'Datoformat',
-'prefs-timeoffset' => 'Tidsforskyvning',
-'prefs-advancedediting' => 'Avanserte alternativ',
-'prefs-advancedrc' => 'Avanserte alternativ',
-'prefs-advancedrendering' => 'Avanserte alternativ',
-'prefs-advancedsearchoptions' => 'Avanserte alternativ',
-'prefs-advancedwatchlist' => 'Avanserte alternativ',
-'prefs-displayrc' => 'Visningsalternativ',
-'prefs-displaysearchoptions' => 'Visningsalternativer',
-'prefs-displaywatchlist' => 'Visningsalternativer',
-'prefs-diffs' => 'Forskjeller',
-
-# User preference: e-mail validation using jQuery
-'email-address-validity-valid' => 'E-postadressen ser gyldig ut',
-'email-address-validity-invalid' => 'Skriv inn en gyldig e-postadresse',
-
-# User rights
-'userrights' => 'Brukerrettighetskontroll',
-'userrights-lookup-user' => 'Ordne brukergrupper',
-'userrights-user-editname' => 'Skriv inn et brukernavn:',
-'editusergroup' => 'Endre brukergrupper',
-'userrights-editusergroup' => 'Rediger brukergrupper',
-'saveusergroups' => 'Lagre brukergrupper',
-'userrights-groupsmember' => 'Medlem av:',
-'userrights-groupsmember-auto' => 'Implisitt medlem av:',
-'userrights-groups-help' => 'Du kan endre hvilke grupper denne brukeren er medlem av.
-* En avkrysset boks betyr at brukeren er medlem av gruppen.
-* En uavkrysset boks betyr at brukeren ikke er medlem av gruppen.
-* En * betyr at du ikke kan fjerne gruppemedlemskapet når du har lagt det til, eller vice versa.',
-'userrights-reason' => 'Årsak:',
-'userrights-no-interwiki' => 'Du har ikke tillatelse til å endre brukerrettigheter på andre wikier.',
-'userrights-nodatabase' => 'Databasen $1 finnes ikke, eller er ikke lokal.',
-'userrights-nologin' => 'Du må [[Special:UserLogin|logge inn]] med en administratorkonto for å endre brukerrettigheter.',
-'userrights-notallowed' => 'Kontoen din har ikke tillatelse til å legge til eller fjerne brukerrettigheter.',
-'userrights-changeable-col' => 'Grupper du kan endre',
-'userrights-unchangeable-col' => 'Grupper du ikke kan endre',
-'userrights-irreversible-marker' => '$1 *',
-
-# Groups
-'group' => 'Gruppe:',
-'group-user' => 'Brukere',
-'group-autoconfirmed' => 'Autobekreftede brukere',
-'group-bot' => 'Roboter',
-'group-sysop' => 'Administratorer',
-'group-bureaucrat' => 'Byråkrater',
-'group-suppress' => 'Sidefjernere',
-'group-all' => '(alle)',
-
-'group-user-member' => 'bruker',
-'group-autoconfirmed-member' => 'autobekreftet bruker',
-'group-bot-member' => 'robot',
-'group-sysop-member' => 'administrator',
-'group-bureaucrat-member' => 'byråkrat',
-'group-suppress-member' => 'revisjonsfjerner',
-
-'grouppage-user' => '{{ns:project}}:Brukere',
-'grouppage-autoconfirmed' => '{{ns:project}}:Autobekreftede brukere',
-'grouppage-bot' => '{{ns:project}}:Roboter',
-'grouppage-sysop' => '{{ns:project}}:Administratorer',
-'grouppage-bureaucrat' => '{{ns:project}}:Byråkrater',
-'grouppage-suppress' => '{{ns:project}}:Historikkrydding',
-
-# Rights
-'right-read' => 'Se sider',
-'right-edit' => 'Redigere sider',
-'right-createpage' => 'Opprette sider (som ikke er diskusjonssider)',
-'right-createtalk' => 'Opprette diskusjonssider',
-'right-createaccount' => 'Opprette nye kontoer',
-'right-minoredit' => 'Marker endringer som mindre',
-'right-move' => 'Flytte sider',
-'right-move-subpages' => 'Flytte sider med undersider',
-'right-move-rootuserpages' => 'Flytte hovedbrukersider',
-'right-movefile' => 'Flytte filer',
-'right-suppressredirect' => 'Behøver ikke å opprette omdirigeringer ved sideflytting',
-'right-upload' => 'Laste opp filer',
-'right-reupload' => 'Skrive over eksisterende filer',
-'right-reupload-own' => 'Skrive over egne filer',
-'right-reupload-shared' => 'Skrive over delte filer lokalt',
-'right-upload_by_url' => 'Laste opp en fil via URL',
-'right-purge' => 'Rense mellomlageret for sider',
-'right-autoconfirmed' => 'Redigere halvlåste sider',
-'right-bot' => 'Bli behandlet som en automatisk prosess',
-'right-nominornewtalk' => 'Får ikke «Du har nye meldinger»-beskjeden ved mindre endringer på diskusjonsside',
-'right-apihighlimits' => 'Bruke API med høyere grenser',
-'right-writeapi' => 'Redigere via API',
-'right-delete' => 'Slette sider',
-'right-bigdelete' => 'Slette sider med stor historikk',
-'right-deleterevision' => 'Slette og gjenopprette enkeltrevisjoner av sider',
-'right-deletedhistory' => 'Se slettet sidehistorikk uten tilhørende sidetekst',
-'right-deletedtext' => 'Vis slettet tekst og endringer mellom slettede versjoner',
-'right-browsearchive' => 'Søke i slettede sider',
-'right-undelete' => 'Gjenopprette sider',
-'right-suppressrevision' => 'Se og gjenopprette skjulte siderevisjoner',
-'right-suppressionlog' => 'Se private logger',
-'right-block' => 'Blokkere andre brukere fra å redigere',
-'right-blockemail' => 'Blokkere brukere fra å sende e-post',
-'right-hideuser' => 'Blokkere et brukernavn og skjule det fra det offentlige',
-'right-ipblock-exempt' => 'Kan redigere fra blokkerte IP-adresser',
-'right-proxyunbannable' => 'Kan redigere fra blokkerte proxyer',
-'right-unblockself' => 'Fjern blokkering av seg selv',
-'right-protect' => 'Endre beskyttelsesnivåer',
-'right-editprotected' => 'Redigere beskyttede sider',
-'right-editinterface' => 'Redigere brukergrensesnittet',
-'right-editusercssjs' => 'Redigere andre brukeres CSS- og JS-filer',
-'right-editusercss' => 'Redigere andre brukeres CSS-filer',
-'right-edituserjs' => 'Redigere andre brukeres JS-filer',
-'right-rollback' => 'Raskt tilbakestille den siste brukeren som har redigert en gitt side',
-'right-markbotedits' => 'Markere tilbakestillinger som robotredigeringer',
-'right-noratelimit' => 'Påvirkes ikke av hastighetsgrenser',
-'right-import' => 'Importere sider fra andre wikier',
-'right-importupload' => 'Importere sider via opplasting',
-'right-patrol' => 'Markere redigeringer som patruljerte',
-'right-autopatrol' => 'Får sine egne redigeringer merket som patruljerte',
-'right-patrolmarks' => 'Bruke patruljeringsfunksjoner i siste endringer',
-'right-unwatchedpages' => 'Se listen over uovervåkede sider',
-'right-mergehistory' => 'Flette sidehistorikker',
-'right-userrights' => 'Redigere alle brukerrettigheter',
-'right-userrights-interwiki' => 'Redigere rettigheter for brukere på andre wikier',
-'right-siteadmin' => 'Låse og låse opp databasen',
-'right-override-export-depth' => 'Eksporter sider inkludert lenkede sider til en dypde på 5',
-'right-sendemail' => 'Send e-post til andre brukere',
-
-# User rights log
-'rightslog' => 'Brukerrettighetslogg',
-'rightslogtext' => 'Dette er en logg over forandringer i brukerrettigheter.',
-'rightslogentry' => 'endret gruppe for $1 fra $2 til $3',
-'rightslogentry-autopromote' => 'ble automatisk forfremmet fra $2 til $3',
-'rightsnone' => '(ingen)',
-
-# Associated actions - in the sentence "You do not have permission to X"
-'action-read' => 'se denne siden',
-'action-edit' => 'redigere denne siden',
-'action-createpage' => 'opprette sider',
-'action-createtalk' => 'opprette diskusjonssider',
-'action-createaccount' => 'opprette denne kontoen',
-'action-minoredit' => 'merke denne redigeringen som mindre',
-'action-move' => 'flytte denne siden',
-'action-move-subpages' => 'flytte denne siden og dens undersider',
-'action-move-rootuserpages' => 'flytte hovedbrukersider',
-'action-movefile' => 'flytte denne filen',
-'action-upload' => 'laste opp denne filen',
-'action-reupload' => 'overskrive den nåværende filen',
-'action-reupload-shared' => 'overskrive denne filen på fellesdatabasen',
-'action-upload_by_url' => 'laste opp denne filen fra en URL',
-'action-writeapi' => 'bruke skrive-API-en',
-'action-delete' => 'slette denne siden',
-'action-deleterevision' => 'slette denne revisjonen',
-'action-deletedhistory' => 'se denne sidens slettede historikk',
-'action-browsearchive' => 'søke i slettede sider',
-'action-undelete' => 'gjenopprette denne siden',
-'action-suppressrevision' => 'se og gjenopprette denne skjulte revisjonen',
-'action-suppressionlog' => 'se denne private loggen',
-'action-block' => 'blokkere denne brukeren fra å redigere',
-'action-protect' => 'endre denne sidens beskyttelsesnivåer',
-'action-import' => 'importere denne siden fra en annen wiki',
-'action-importupload' => 'importere denne siden fra en opplastet fil',
-'action-patrol' => 'merke andre brukeres redigeringer som patruljert',
-'action-autopatrol' => 'merke redigeringene dine som patruljert',
-'action-unwatchedpages' => 'vise listen over uovervåkede sider',
-'action-mergehistory' => 'flette sidens historikk',
-'action-userrights' => 'redigere alle brukerrettigheter',
-'action-userrights-interwiki' => 'endre brukerrettigheter for brukere på andre wikier',
-'action-siteadmin' => 'låse eller låse opp databasen',
-
-# Recent changes
-'nchanges' => '$1 {{PLURAL:$1|endring|endringer}}',
-'recentchanges' => 'Siste endringer',
-'recentchanges-legend' => 'Alternativ for siste endringer',
-'recentchanges-summary' => 'Vis de siste endringene til denne siden',
-'recentchanges-feed-description' => 'Følg med på siste endringer i denne wikien med denne matingen.',
-'recentchanges-label-newpage' => 'Denne redigeringen opprettet en ny side',
-'recentchanges-label-minor' => 'Dette er en mindre endring',
-'recentchanges-label-bot' => 'Denne redigeringen ble gjort av en bot',
-'recentchanges-label-unpatrolled' => 'Denne redigeringen har ikke blitt patruljert ennå',
-'rcnote' => "Nedenfor vises {{PLURAL:$1|'''1''' endring|de siste '''$1''' endringene}} fra {{PLURAL:$2|det siste døgnet|de siste '''$2''' døgnene}}, per $5 $4.",
-'rcnotefrom' => "Nedenfor er endringene fra '''$2''' (opp til '''$1''' vises).",
-'rclistfrom' => 'Vis nye endringer med start fra $1',
-'rcshowhideminor' => '$1 mindre endringer',
-'rcshowhidebots' => '$1 roboter',
-'rcshowhideliu' => '$1 innloggede brukere',
-'rcshowhideanons' => '$1 anonyme brukere',
-'rcshowhidepatr' => '$1 godkjente endringer',
-'rcshowhidemine' => '$1 mine endringer',
-'rclinks' => 'Vis siste $1 endringer i de siste $2 dagene<br />$3',
-'diff' => 'diff',
-'hist' => 'hist',
-'hide' => 'Skjul',
-'show' => 'Vis',
-'minoreditletter' => 'm',
-'newpageletter' => 'N',
-'boteditletter' => 'b',
-'number_of_watching_users_pageview' => '[$1 overvåkende {{PLURAL:$1|bruker|brukere}}]',
-'rc_categories' => 'Begrens til kategorier (skilletegn: «|»)',
-'rc_categories_any' => 'Alle',
-'newsectionsummary' => '/* $1 */ ny seksjon',
-'rc-enhanced-expand' => 'Vis detaljer (krever JavaScript)',
-'rc-enhanced-hide' => 'Skjul detaljer',
-
-# Recent changes linked
-'recentchangeslinked' => 'Relaterte endringer',
-'recentchangeslinked-feed' => 'Relaterte endringer',
-'recentchangeslinked-toolbox' => 'Relaterte endringer',
-'recentchangeslinked-title' => 'Endringer relatert til «$1»',
-'recentchangeslinked-noresult' => 'Ingen endringer på lenkede sider i den gitte perioden.',
-'recentchangeslinked-summary' => "Dette er en liste over de siste endringene på sidene lenket fra en spesifisert side (eller til meldlemmer av en spesifisert kategori).
-Sider på [[Special:Watchlist|overvåkningslisten din]] er i '''fet skrift'''.",
-'recentchangeslinked-page' => 'Sidenavn:',
-'recentchangeslinked-to' => 'Vis endringer på sider som lenker til den gitte siden istedet',
-
-# Upload
-'upload' => 'Last opp fil',
-'uploadbtn' => 'Last opp fil',
-'reuploaddesc' => 'Avbryt opplasting og gå tilbake til opplastingsskjemaet',
-'upload-tryagain' => 'Send inn endret filbeskrivelse',
-'uploadnologin' => 'Ikke logget inn',
-'uploadnologintext' => 'Du må være [[Special:UserLogin|logget inn]] for å kunne laste opp filer.',
-'upload_directory_missing' => 'Oppplastingsmappen ($1) mangler og kunne ikke opprettes av tjeneren.',
-'upload_directory_read_only' => 'Opplastingsmappa ($1) er ikke skrivbar for tjeneren.',
-'uploaderror' => 'Feil under opplasting av fil',
-'upload-recreate-warning' => "'''Advarsel: En fil med det navnet har blitt slettet eller flyttet.'''
-
-Slette- og flytteloggen for denne siden gjengis her:",
-'uploadtext' => "Bruk skjemaet nedenfor for å laste opp filer.
-For å se eller søke i eksisterende filer, gå til [[Special:FileList|listen over filer]]. Opplastinger lagres også i [[Special:Log/upload|opplastingsloggen]].
-
-For å inkludere en fil på en side, bruk en slik lenke:
-*'''<tt><nowiki>[[</nowiki>{{ns:file}}:Filnavn.jpg<nowiki>]]</nowiki></tt>''' for å bruke bildet i opprinnelig form
-*'''<tt><nowiki>[[</nowiki>{{ns:file}}:Filnavn.png|200px|thumb|left|Alternativ tekst<nowiki>]]</nowiki></tt>''' for å bruke bildet med en bredde på 200&nbsp;piksler, venstrestilt og med «Alternativ tekst» som beskrivelse
-*'''<tt><nowiki>[[</nowiki>{{ns:media}}:Filnavn.ogg<nowiki>]]</nowiki></tt>''' for å lenke direkte til filen uten å vise den",
-'upload-permitted' => 'Tillatte filtyper: $1.',
-'upload-preferred' => 'Foretrukne filtyper: $1',
-'upload-prohibited' => 'Forbudte filtyper: $1.',
-'uploadlog' => 'opplastingslogg',
-'uploadlogpage' => 'Opplastingslogg',
-'uploadlogpagetext' => 'Her er en liste over de siste opplastede filene.
-Se [[Special:NewFiles|galleriet over nye filer]] for en mer visuell visning',
-'filename' => 'Filnavn',
-'filedesc' => 'Beskrivelse',
-'fileuploadsummary' => 'Beskrivelse:',
-'filereuploadsummary' => 'Filendringer:',
-'filestatus' => 'Opphavsrettsstatus:',
-'filesource' => 'Kilde:',
-'uploadedfiles' => 'Filer som er lastet opp',
-'ignorewarning' => 'Ignorer advarselen og lagre filen likevel',
-'ignorewarnings' => 'Ignorer eventuelle advarsler',
-'minlength1' => 'Filnavn må være på minst én bokstav.',
-'illegalfilename' => 'Filnavnet «$1» inneholder ugyldige tegn. Gi filen et nytt navn og prøv igjen.',
-'badfilename' => 'Navnet på filen er blitt endret til «$1».',
-'filetype-mime-mismatch' => 'Filendelsen «.$1» tilsvarer ikke MIME-typen som oppgis i filen ($2).',
-'filetype-badmime' => 'Filer av typen «$1» kan ikke lastes opp.',
-'filetype-bad-ie-mime' => 'Kan ikke laste opp denne filen fordi Internet Explorer ville detektert denne som «$1», noe som er ikke er tillatt, og en potensielt farlig filtype.',
-'filetype-unwanted-type' => "'''«.$1»''' er en uønsket filtype.
-{{PLURAL:$3|Foretrukken filtype|Foretrukne filtyper}} er $2.",
-'filetype-banned-type' => "{{PLURAL:$4|Filtypen|Filtypene}} '''«.$1»''' er ikke {{PLURAL:$4|tillatt|tillatte}}.
-{{PLURAL:$3|Tillatt filtype|Tillatte filtyper}} er $2.",
-'filetype-missing' => 'Filen har ingen endelse (som «.jpg»).',
-'empty-file' => 'Filen du sendte inn var tom.',
-'file-too-large' => 'Filen du sendte inn var for stor.',
-'filename-tooshort' => 'Filnavnet er for kort.',
-'filetype-banned' => 'Denne filtypen er forbudt.',
-'verification-error' => 'Denne filen bestod ikke filbekreftelsen.',
-'hookaborted' => 'Endringene du prøvde å gjøre ble avbrutt av en utvidelseskrok.',
-'illegal-filename' => 'Filnavnet er ikke tillatt.',
-'overwrite' => 'Overskriving av eksisterende filer er ikke tillatt.',
-'unknown-error' => 'En ukjent feil oppsto.',
-'tmp-create-error' => 'Kunne ikke opprette midlertidig fil.',
-'tmp-write-error' => 'Feil ved skriving av midlertidig fil.',
-'large-file' => 'Det er anbefalt at filen ikke er større enn $1; denne filen er $2.',
-'largefileserver' => 'Denne filen er større enn det tjeneren er satt opp til å tillate.',
-'emptyfile' => 'Filen du lastet opp ser ut til å være tom. Dette kan komme av en skrivefeil i filnavnet. Sjekk om du virkelig vil laste opp denne filen.',
-'windows-nonascii-filename' => 'Denne wikien støtter ikke filnavn med spesialtegn.',
-'fileexists' => "Ei fil med dette navnet finnes allerede.
-Sjekk '''<tt>[[:$1]]</tt>''' hvis du ikke er sikker på at du vil forandre den.
-[[$1|thumb]]",
-'filepageexists' => "Beskrivelsessiden for denne filen finnes allerede på '''<tt>[[:$1]]</tt>''', men ingen filer med dette navnet finnes. Sammendraget du skruver inn vil ikke vises på beskrivelsessiden. For at det skal dukke opp der må du skrive det inn manuelt etter å da lastet opp filen.
-[[$1|thumb]]",
-'fileexists-extension' => "En fil med et lignende navn finnes: [[$2|thumb]]
-* Navnet på din fil: '''<tt>[[:$1]]</tt>'''
-* Navn på eksisterende fil: '''<tt>[[:$2]]</tt>'''
-Velg et annet filnavn.",
-'fileexists-thumbnail-yes' => "Filen ser ut til å være et bilde av redusert størrelse. [[$1|thumb]]
-Vennligst sjekk filen '''<tt>[[:$1]]</tt>'''.
-Om filen du sjekket er det samme bildet, men i opprinnelig størrelse, er det ikke nødvendig å laste opp en ekstra fil.",
-'file-thumbnail-no' => "Filnavnet begynner med '''<tt>$1</tt>'''.
-Det virker som om det er et bilde av redusert størrelse ''(miniatyrbilde)''.
-Om du har dette bildet i stor utgave, last opp det, eller endre filnavnet på denne filen.",
-'fileexists-forbidden' => 'En fil med dette navnet finnes fra før, og kan ikke erstattes.
-Om du fortsatt ønsker å laste opp filen, gå tilbake og last den opp under et nytt navn. [[File:$1|thumb|center|$1]]',
-'fileexists-shared-forbidden' => 'Ei fil med dette navnet finnes fra før i det delte fillageret.
-Om du fortsatt ønsker å laste opp filen, gå tilbake og last den opp under et nytt navn. [[File:$1|thumb|center|$1]]',
-'file-exists-duplicate' => 'Denne filen er en dublett av følgende {{PLURAL:$1|fil|filer}}:',
-'file-deleted-duplicate' => 'En fil identisk med denne filen ([[:$1]]) har tidligere blitt slettet. Du bør sjekke denne filens slettehistorikk før du prøver å laste den opp på nytt.',
-'uploadwarning' => 'Opplastingsadvarsel',
-'uploadwarning-text' => 'Vennligst endre filbeskrivelsen nedenfor og prøv igjen.',
-'savefile' => 'Lagre fil',
-'uploadedimage' => 'lastet opp «[[$1]]»',
-'overwroteimage' => 'last opp en ny versjon av «[[$1]]»',
-'uploaddisabled' => 'Opplastingsfunksjonen er slått av',
-'copyuploaddisabled' => 'Opplasting via nettadresse deaktivert.',
-'uploadfromurl-queued' => 'Opplastingen din har blitt satt i kø.',
-'uploaddisabledtext' => 'Opplasting er slått av.',
-'php-uploaddisabledtext' => 'PHP-filopplasting er deaktivert. Sjekk innstillingen for file_uploads.',
-'uploadscripted' => 'Denne filen inneholder HTML eller skripting som kan feiltolkes av en nettleser.',
-'uploadvirus' => 'Denne filen inneholder virus! Detaljer: $1',
-'uploadjava' => 'Filen er en ZIP-fil som inneholder en Java-fil av typen .class.
-Det er ikke tillatt å laste opp Java-filer, fordi de kan omgå sikkerhetsrestriksjoner.',
-'upload-source' => 'Kildefil',
-'sourcefilename' => 'Velg en fil:',
-'sourceurl' => 'Kildens URL:',
-'destfilename' => 'Ønsket filnavn:',
-'upload-maxfilesize' => 'Maksimal filstørrelse: $1',
-'upload-description' => 'Filbeskrivelse',
-'upload-options' => 'Opplastingsvalg',
-'watchthisupload' => 'Overvåk denne filen',
-'filewasdeleted' => 'Ei fil ved dette navnet har blitt lastet opp tidligere, og så slettet. Sjekk $1 før du forsøker å laste det opp igjen.',
-'filename-bad-prefix' => "Navnet på filen du laster opp begynner med '''«$1»''', hvilket er et ikke-beskrivende navn som vanligvis brukes automatisk av digitalkameraer. Vennligst bruk et mer beskrivende navn på filen.",
-'filename-prefix-blacklist' => ' #<!-- leave this line exactly as it is --> <pre>
-# Syntaksen er som følger:
-#   * Alt fra tegnet «#» til slutten av linja er en kommentar
-#   * Alle linjer som ikke er blanke er et prefiks som vanligvis brukes automatisk av digitale kameraer
-CIMG # Casio
-DSC_ # Nikon
-DSCF # Fuji
-DSCN # Nikon
-DUW # noen mobiltelefontyper
-IMG # generisk
-JD # Jenoptik
-MGP # Pentax
-PICT # div.
- #</pre> <!-- leave this line exactly as it is -->',
-'upload-success-subj' => 'Opplastingen er gjennomført',
-'upload-success-msg' => 'Din opplasting fra [$2] var vellykket. Den er tilgjengelig her: [[:{{ns:file}}:$1]]',
-'upload-failure-subj' => 'Opplastingsproblem',
-'upload-failure-msg' => 'Det oppsto et problem med opplastingen din fra [$2]:
-
-$1',
-'upload-warning-subj' => 'Opplastingsadvarsel',
-'upload-warning-msg' => 'Det oppsto et problem med opplastingen din fra [$2]. Du kan gå tilbake til [[Special:Upload/stash/$1|opplastingsskjemaet]] for å løse dette problemet.',
-
-'upload-proto-error' => 'Gal protokoll',
-'upload-proto-error-text' => 'Fjernopplasting behøver adresser som begynner med <code>http://</code> eller <code>ftp://</code>.',
-'upload-file-error' => 'Intern feil',
-'upload-file-error-text' => 'En intern feil oppsto under forsøk på å lage en midlertidig fil på tjeneren. Vennligst kontakt en [[Special:ListUsers/sysop|administrator]].',
-'upload-misc-error' => 'Ukjent opplastingsfeil',
-'upload-misc-error-text' => 'En ukjent feil forekom under opplastingen.
-Bekreft at adressen er gyldig og tilgjengelig, og prøv igjen.
-Om problemet fortsetter, kontakt en [[Special:ListUsers/sysop|administrator]].',
-'upload-too-many-redirects' => 'URL-en inneholdt for mange omdirigeringer',
-'upload-unknown-size' => 'Ukjent størrelse',
-'upload-http-error' => 'En HTTP-feil oppstod: $1',
-
-# ZipDirectoryReader
-'zip-file-open-error' => 'Det oppsto en feil under åpning av filen for ZIP-sjekking.',
-'zip-wrong-format' => 'Den angitte filen var ikke en ZIP-fil.',
-'zip-bad' => 'Filen er en skadd eller på annen måte uleselig ZIP-fil.
-Den kan ikke sikkerhetskontrolleres.',
-'zip-unsupported' => 'Filen er en ZIP-fil som bruker funksjoner som ikke støttes av MediaWiki.
-Den kan ikke sikkerhetskontrolleres.',
-
-# Special:UploadStash
-'uploadstash' => 'Last opp stash',
-'uploadstash-summary' => 'Denne siden gir tilgang til filer som har blitt lastet opp (eller er i ferd med å bli lastet opp) men som ennå ikke er publisert til wikien. Disse filene er ikke synlige for andre enn brukeren som lastet dem opp.',
-'uploadstash-clear' => 'Fjern stashede filer',
-'uploadstash-nofiles' => 'Du har ingen stashede filer.',
-'uploadstash-badtoken' => 'Utføringen av den handlingen var mislykket, kanskje fordi dine redigeringsrettigheter har utløpt. Prøv igjen.',
-'uploadstash-errclear' => 'Fjerning av filene var mislykket.',
-'uploadstash-refresh' => 'Oppdater listen over filer',
-
-# img_auth script messages
-'img-auth-accessdenied' => 'Ingen tilgang',
-'img-auth-nopathinfo' => 'Manglende PATH_INFO.
-Tjeneren din er ikke satt opp til å gi denne informasjonen.
-Den er kanskje CGI-basert og støtter ikke img_auth.
-[//www.mediawiki.org/wiki/Manual:Image_Authorization Se bildeautorisasjon.]',
-'img-auth-notindir' => 'Den ønskede stien finnes ikke i den oppsatte opplastingsmappa.',
-'img-auth-badtitle' => 'Kunne ikke lage en gyldig tittel ut fra «$1».',
-'img-auth-nologinnWL' => 'Du er ikke logget inn, og «$1» er ikke på hvitelista.',
-'img-auth-nofile' => 'Filen «$1» finnes ikke.',
-'img-auth-isdir' => 'Du prøver å få tilgang til mappa «$1».
-Kun filtilgang tillates.',
-'img-auth-streaming' => 'Sender «$1».',
-'img-auth-public' => 'Funksjonen til img_auth.php er å lage filer fra en privat wiki.
-Denne wikien er satt opp som en offentlig wiki.
-For best mulig sikkerhet er img_auth.php slått av.',
-'img-auth-noread' => 'Brukeren har ikke tilgang til å lese «$1».',
-'img-auth-bad-query-string' => 'URL-en har en ugyldig spørrestreng.',
-
-# HTTP errors
-'http-invalid-url' => 'Ugyldig internettadresse: $1',
-'http-invalid-scheme' => 'Internettadresser med «$1»-formen støttes ikke',
-'http-request-error' => 'HTTP-forespørselen feilet på grunn av en ukjent feil.',
-'http-read-error' => 'HTTP-lesefeil.',
-'http-timed-out' => 'Tidsavbrudd på HTTP-forespørsel.',
-'http-curl-error' => 'Feil under henting av adresse: $1',
-'http-host-unreachable' => 'Kunne ikke nå adressen.',
-'http-bad-status' => 'Det var et problem under HTTP-forespørselen: $1 $2',
-
-# Some likely curl errors. More could be added from <http://curl.haxx.se/libcurl/c/libcurl-errors.html>
-'upload-curl-error6' => 'Kunne ikke nå adressen',
-'upload-curl-error6-text' => 'Adressen kunne ikke nås. Vennligst dobbelsjekk at adressen er korrekt og at siden er oppe.',
-'upload-curl-error28' => 'Opplastingstimeout',
-'upload-curl-error28-text' => 'Siden brukte for lang tid på å reagere. Vennligst sjekk at siden er oppe, og vent en kort stund for du prøver igjen. Vurder å prøve på en mindre hektisk tid.',
-
-'license' => 'Lisens:',
-'license-header' => 'Lisensiering',
-'nolicense' => 'Ingen spesifisert',
-'license-nopreview' => '(Forhåndsvisning ikke tilgjengelig)',
-'upload_source_url' => ' (en gyldig, offentlig tilgjengelig adresse)',
-'upload_source_file' => ' (en fil på din datamaskin)',
-
-# Special:ListFiles
-'listfiles-summary' => 'Denne spesialsiden viser alle opplastede filer.
-Når den filtreres av en bruker, vises bare de sist opplastede versjonene av filen.',
-'listfiles_search_for' => 'Søk etter filnavn:',
-'imgfile' => 'fil',
-'listfiles' => 'Filliste',
-'listfiles_thumb' => 'Miniatyrbilde',
-'listfiles_date' => 'Dato',
-'listfiles_name' => 'Navn',
-'listfiles_user' => 'Bruker',
-'listfiles_size' => 'Størrelse (bytes)',
-'listfiles_description' => 'Beskrivelse',
-'listfiles_count' => 'Versjoner',
-
-# File description page
-'file-anchor-link' => 'Fil',
-'filehist' => 'Filhistorikk',
-'filehist-help' => 'Klikk på en dato/klokkeslett for å se filen slik den var da.',
-'filehist-deleteall' => 'slett alt',
-'filehist-deleteone' => 'slett',
-'filehist-revert' => 'tilbakestill',
-'filehist-current' => 'nåværende',
-'filehist-datetime' => 'Dato/tid',
-'filehist-thumb' => 'Miniatyrbilde',
-'filehist-thumbtext' => 'Miniatyrbilde av versjonen fra $1',
-'filehist-nothumb' => 'Intet miniatyrbilde',
-'filehist-user' => 'Bruker',
-'filehist-dimensions' => 'Dimensjoner',
-'filehist-filesize' => 'Filstørrelse',
-'filehist-comment' => 'Kommentar',
-'filehist-missing' => 'Fil mangler',
-'imagelinks' => 'Filbruk',
-'linkstoimage' => 'Følgende {{PLURAL:$1|side|$1 sider}} har lenker til denne filen:',
-'linkstoimage-more' => 'Mer enn $1 {{PLURAL:$1|side|sider}} lenker til denne filen.
-Følgende liste viser {{PLURAL:$1|den første siden|de $1 første sidene}}.
-En [[Special:WhatLinksHere/$2|fullstendig liste]] er tilgjengelig.',
-'nolinkstoimage' => 'Det er ingen sider som bruker denne filen.',
-'morelinkstoimage' => 'Vis [[Special:WhatLinksHere/$1|flere lenker]] til denne filen.',
-'linkstoimage-redirect' => '$1 (filomdirigering) $2',
-'duplicatesoffile' => 'Følgende {{PLURAL:$1|fil er en dublett|filer er dubletter}} av denne filen ([[Special:FileDuplicateSearch/$2|fler detaljer]]):',
-'sharedupload' => 'Denne filen er fra $1 og kan bli brukt av andre prosjekter.',
-'sharedupload-desc-there' => 'Denne filen er fra $1 og kan brukes på andre prosjekter.
-Se [$2 filbeskrivelsessida] for mer informasjon.',
-'sharedupload-desc-here' => 'Denne filen er fra $1 og kan brukes av andre prosjekter.
-Beskrivelsen fra [$2 filbeskrivelsessida] vises nedenfor.',
-'filepage-nofile' => 'Det finnes ingen fil med dette navnet.',
-'filepage-nofile-link' => 'Ingen fil med dette navnet eksisterer, men du kan [$1 laste den opp].',
-'uploadnewversion-linktext' => 'Last opp en ny versjon av denne filen',
-'shared-repo-from' => 'fra $1',
-'shared-repo' => 'et delt fillager',
-
-# File reversion
-'filerevert' => 'Tilbakestill $1',
-'filerevert-legend' => 'Tilbakestill fil',
-'filerevert-intro' => "Du tilbakestiller '''[[Media:$1|$1]]''' til [$4 versjonen à $2, $3].",
-'filerevert-comment' => 'Årsak:',
-'filerevert-defaultcomment' => 'Tilbakestilte til versjonen à $1, $2',
-'filerevert-submit' => 'Tilbakestill',
-'filerevert-success' => "'''[[Media:$1|$1]]''' ble tilbakestilt til [$4 versjonen à $2, $3].",
-'filerevert-badversion' => 'Det er ingen tidligere lokal versjon av denne filen med det gitte tidstrykket.',
-
-# File deletion
-'filedelete' => 'Slett $1',
-'filedelete-legend' => 'Slett fil',
-'filedelete-intro' => "Du er i ferd med å slette filen '''[[Media:$1|$1]]''' sammen med hele dens historikk.",
-'filedelete-intro-old' => "Du sletter versjonen av '''[[Media:$1|$1]]''' à [$4 $3, $2].",
-'filedelete-comment' => 'Årsak:',
-'filedelete-submit' => 'Slett',
-'filedelete-success' => "'''$1''' ble slettet.",
-'filedelete-success-old' => "Versjonen av '''[[Media:$1|$1]]''' à $3, $2 ble slettet.",
-'filedelete-nofile' => "'''$1''' finnes ikke.",
-'filedelete-nofile-old' => "Det er ingen arkivert versjon av '''$1''' med de gitte attributtene.",
-'filedelete-otherreason' => 'Annen/utdypende grunn:',
-'filedelete-reason-otherlist' => 'Annen grunn',
-'filedelete-reason-dropdown' => '*Vanlige slettingsgrunner
-** Opphavsrettsbrudd
-** Duplikatfil',
-'filedelete-edit-reasonlist' => 'Rediger begrunnelser for sletting',
-'filedelete-maintenance' => 'Sletting og gjenoppretting av filer er midlertidig slått av på grunn av vedlikehold.',
-
-# MIME search
-'mimesearch' => 'MIME-søk',
-'mimesearch-summary' => 'Denne siden muliggjør filtrering av filer per MIME-type. Skriv inn: innholdstype/undertype, for eksempel <tt>image/jpeg</tt>.',
-'mimetype' => 'MIME-type:',
-'download' => 'last ned',
-
-# Unwatched pages
-'unwatchedpages' => 'Sider som ikke er overvåket',
-
-# List redirects
-'listredirects' => 'Liste over omdirigeringer',
-
-# Unused templates
-'unusedtemplates' => 'Ubrukte maler',
-'unusedtemplatestext' => 'Denne siden lister opp alle sider i malnavnerommet ({{ns:template}}:) som ikke er inkludert på en annen side. Husk å sjekke for andre slags lenker til malen før du sletter den.',
-'unusedtemplateswlh' => 'andre lenker',
-
-# Random page
-'randompage' => 'Tilfeldig side',
-'randompage-nopages' => 'Det er ingen sider i {{PLURAL:$2|det følgende navnrommet|de følgende navnrommene}}: $1.',
-
-# Random redirect
-'randomredirect' => 'Tilfeldig omdirigering',
-'randomredirect-nopages' => 'Det er ingen omdirigeringer i navnerommet $1.',
-
-# Statistics
-'statistics' => 'Statistikk',
-'statistics-header-pages' => 'Sidestatistikk',
-'statistics-header-edits' => 'Redigeringsstatistikk',
-'statistics-header-views' => 'Visningsstatistikk',
-'statistics-header-users' => 'Brukerstatistikk',
-'statistics-header-hooks' => 'Øvrig statistikk',
-'statistics-articles' => 'Innholdssider',
-'statistics-pages' => 'Sider',
-'statistics-pages-desc' => 'Alle sider på wikien, inkludert diskusjonssider, omdirigeringer o.l.',
-'statistics-files' => 'Opplastede filer',
-'statistics-edits' => 'Redigeringer siden {{SITENAME}} ble opprettet',
-'statistics-edits-average' => 'Gjennomsnittlig antall redigeringer per side',
-'statistics-views-total' => 'Totalt antall visninger',
-'statistics-views-total-desc' => 'Visninger av ikke-eksisterende sider og spesielsider inkluderes ikke',
-'statistics-views-peredit' => 'Visninger per redigering',
-'statistics-users' => 'Registrerte [[Special:ListUsers|brukere]]',
-'statistics-users-active' => 'Aktive brukere',
-'statistics-users-active-desc' => 'Brukere som har utført handlinger {{PLURAL:$1|det siste døgnet|de siste $1 dagene}}',
-'statistics-mostpopular' => 'Mest viste sider',
-
-'disambiguations' => 'Sider som lenker til artikler med flertydige titler',
-'disambiguationspage' => 'Template:Peker',
-'disambiguations-text' => "Følgende sider lenker til en '''pekerside'''.
-De burde i stedet lenke til en passende innholdsside.<br />
-En side anses om en pekerside om den inneholder en mal som det lenkes til fra [[MediaWiki:Disambiguationspage]]",
-
-'doubleredirects' => 'Doble omdirigeringer',
-'doubleredirectstext' => 'Denne siden lister opp de sidene som er omdirigeringer til andre omdirigeringssider.
-Hver rad inneholder lenker til første og andre omdirigering, samt målet for den andre omdirigeringen, som vanligvis er den «virkelige» målsiden som den første omdirigeringen burde peke til.
-<del>Gjennomstrøkne</del> sider har blitt fikset.',
-'double-redirect-fixed-move' => '[[$1]] har blitt flyttet, og er nå en omdirigering til [[$2]]',
-'double-redirect-fixed-maintenance' => 'Fikser dobbel omdirigering fra [[$1]] til [[$2]].',
-'double-redirect-fixer' => 'Omdirigeringsfikser',
-
-'brokenredirects' => 'Brutte omdirigeringer',
-'brokenredirectstext' => 'Følgende omdirigeringer peker til ikkeeksisterende sider:',
-'brokenredirects-edit' => 'rediger',
-'brokenredirects-delete' => 'slett',
-
-'withoutinterwiki' => 'Sider uten språklenker',
-'withoutinterwiki-summary' => 'Følgende sider lenker ikke til andre språkversjoner:',
-'withoutinterwiki-legend' => 'Prefiks',
-'withoutinterwiki-submit' => 'Vis',
-
-'fewestrevisions' => 'Artikler med færrest revisjoner',
-
-# Miscellaneous special pages
-'nbytes' => '$1 {{PLURAL:$1|byte|bytes}}',
-'ncategories' => '$1 {{PLURAL:$1|kategori|kategorier}}',
-'nlinks' => '$1 {{PLURAL:$1|lenke|lenker}}',
-'nmembers' => '$1 {{PLURAL:$1|medlem|medlemmer}}',
-'nrevisions' => '$1 {{PLURAL:$1|revisjon|revisjoner}}',
-'nviews' => '$1 {{PLURAL:$1|visning|visninger}}',
-'nimagelinks' => 'Brukt på $1 {{PLURAL:$1|side|sider}}',
-'ntransclusions' => 'brukt på $1 {{PLURAL:$1|side|sider}}',
-'specialpage-empty' => 'Denne siden er tom.',
-'lonelypages' => 'Foreldreløse sider',
-'lonelypagestext' => 'Følgende sider blir ikke lenket til eller brukt på andre sider på {{SITENAME}}.',
-'uncategorizedpages' => 'Ukategoriserte sider',
-'uncategorizedcategories' => 'Ukategoriserte kategorier',
-'uncategorizedimages' => 'Ukategoriserte filer',
-'uncategorizedtemplates' => 'Ukategoriserte maler',
-'unusedcategories' => 'Ubrukte kategorier',
-'unusedimages' => 'Ubrukte filer',
-'popularpages' => 'Populære sider',
-'wantedcategories' => 'Ønskede kategorier',
-'wantedpages' => 'Etterspurte sider',
-'wantedpages-badtitle' => 'Ugyldig tittel i resultatene: $1',
-'wantedfiles' => 'Ønskede filer',
-'wantedtemplates' => 'Etterspurte maler',
-'mostlinked' => 'Sider med flest lenker til seg',
-'mostlinkedcategories' => 'Kategorier med flest sider',
-'mostlinkedtemplates' => 'Mest brukte maler',
-'mostcategories' => 'Sider med flest kategorier',
-'mostimages' => 'Mest brukte filer',
-'mostrevisions' => 'Artikler med flest revisjoner',
-'prefixindex' => 'Alle sider med prefiks',
-'shortpages' => 'Korte sider',
-'longpages' => 'Lange sider',
-'deadendpages' => 'Blindveisider',
-'deadendpagestext' => 'Følgende sider lenker ikke til andre sider på {{SITENAME}}.',
-'protectedpages' => 'Låste sider',
-'protectedpages-indef' => 'Kun beskyttelser på ubestemt tid',
-'protectedpages-cascade' => 'Kun dypbeskyttelse',
-'protectedpagestext' => 'Følgende sider er låst for flytting eller redigering',
-'protectedpagesempty' => 'Ingen sider er for øyeblikket låst med disse paramterne.',
-'protectedtitles' => 'Beskyttede titler',
-'protectedtitlestext' => 'Følgende titler er beskyttet fra opprettelse',
-'protectedtitlesempty' => 'Ingen titler beskyttes med disse parameterne for øyeblikket.',
-'listusers' => 'Brukerliste',
-'listusers-editsonly' => 'Vis bare brukere med redigeringer',
-'listusers-creationsort' => 'Sorter etter opprettelsesdato',
-'usereditcount' => '{{PLURAL:$1|én redigering|$1 redigeringer}}',
-'newpages' => 'Nye sider',
-'newpages-username' => 'Brukernavn:',
-'ancientpages' => 'Eldste sider',
-'move' => 'Flytt',
-'movethispage' => 'Flytt denne siden',
-'unusedimagestext' => 'Følgende filer eksisterer men er ikke innlagt på noen sider.
-Merk at andre sider kanskje lenker til en fil med en direkte lenke, så filen listes her selv om den faktisk er i bruk.',
-'unusedcategoriestext' => 'Følgende kategorier finnes, men det er ingen sider i dem.',
-'notargettitle' => 'Intet mål',
-'notargettext' => 'Du oppga ikke en målside eller bruker å utføre denne funksjonen på.',
-'nopagetitle' => 'Målsiden finnes ikke',
-'nopagetext' => 'Siden du ville flytte finnes ikke.',
-'pager-newer-n' => '{{PLURAL:$1|1 nyere|$1 nyere}}',
-'pager-older-n' => '{{PLURAL:$1|1 eldre|$1 eldre}}',
-'suppress' => 'Historikkrydding',
-'querypage-disabled' => 'Denne spesialsiden er deaktivert av ytelsesårsaker.',
-
-# Book sources
-'booksources' => 'Bokkilder',
-'booksources-search-legend' => 'Søk etter bokkilder',
-'booksources-go' => 'Gå',
-'booksources-text' => 'Under er en liste over lenker til andre sider som selger nye og brukte bøker, og kan også ha videre informasjon om bøker du leter etter:',
-'booksources-invalid-isbn' => 'Det gitte ISBN-nummeret er ugyldig; sjekk om du har angitt det riktig.',
-
-# Special:Log
-'specialloguserlabel' => 'Bruker:',
-'speciallogtitlelabel' => 'Tittel:',
-'log' => 'Logger',
-'all-logs-page' => 'Alle offentlige logger',
-'alllogstext' => 'Kombinert visning av alle loggene på {{SITENAME}}.
-Du kan minske antallet resultater ved å velge loggtype, brukernavn eller den siden som er påvirket (husk å skille mellom store og små bokstaver).',
-'logempty' => 'Ingen elementer i loggen.',
-'log-title-wildcard' => 'Søk i titler som starter med denne teksten',
-
-# Special:AllPages
-'allpages' => 'Alle sider',
-'alphaindexline' => '$1 til $2',
-'nextpage' => 'Neste side ($1)',
-'prevpage' => 'Forrige side ($1)',
-'allpagesfrom' => 'Vis sider fra og med:',
-'allpagesto' => 'Vis sider som slutter på:',
-'allarticles' => 'Alle sider',
-'allinnamespace' => 'Alle sider i $1-navnerommet',
-'allnotinnamespace' => 'Alle sider (ikke i $1-navnerommet)',
-'allpagesprev' => 'Forrige',
-'allpagesnext' => 'Neste',
-'allpagessubmit' => 'Gå',
-'allpagesprefix' => 'Vis sider med prefikset:',
-'allpagesbadtitle' => 'Den angitte sidetittelen var ugyldig eller hadde et interwiki-prefiks. Den kan inneholde ett eller flere tegn som ikke kan brukes i titler.',
-'allpages-bad-ns' => '{{SITENAME}} har ikke navnerommet «$1».',
-
-# Special:Categories
-'categories' => 'Kategorier',
-'categoriespagetext' => 'Følgende {{PLURAL:$1|kategori|kategorier}} inneholder sider eller media.
-[[Special:UnusedCategories|Ubrukte kategorier]] vises ikke her.
-Se også [[Special:WantedCategories|ønskede kategorier]].',
-'categoriesfrom' => 'Vis kategorier fra og med:',
-'special-categories-sort-count' => 'soter etter antall',
-'special-categories-sort-abc' => 'sorter alfabetisk',
-
-# Special:DeletedContributions
-'deletedcontributions' => 'Slettede brukerbidrag',
-'deletedcontributions-title' => 'Slettede brukerbidrag',
-'sp-deletedcontributions-contribs' => 'bidrag',
-
-# Special:LinkSearch
-'linksearch' => 'Søk i eksterne lenker',
-'linksearch-pat' => 'Søkemønster:',
-'linksearch-ns' => 'Navnerom:',
-'linksearch-ok' => 'Søk',
-'linksearch-text' => 'Jokertegn som «*.wikipedia.org» kan brukes.<br />Støttede protokoller: <tt>$1</tt>',
-'linksearch-line' => '$1 lenkes fra $2',
-'linksearch-error' => 'Jokertegn kan kun brukes foran tjenernavnet.',
-
-# Special:ListUsers
-'listusersfrom' => 'Vis brukere fra og med:',
-'listusers-submit' => 'Vis',
-'listusers-noresult' => 'Ingen bruker funnet.',
-'listusers-blocked' => '(konto blokkert)',
-
-# Special:ActiveUsers
-'activeusers' => 'Liste over aktive brukere',
-'activeusers-intro' => 'Dette er en liste over brukere som har hatt en eller annen form for aktivitet innenfor {{PLURAL:$1|den siste dagen|de siste dagene}}.',
-'activeusers-count' => '$1 {{PLURAL:$1|endring|endringer}} {{PLURAL:$3|det siste døgnet|de siste $3 dagene}}',
-'activeusers-from' => 'Vis brukere fra og med:',
-'activeusers-hidebots' => 'Skjul roboter',
-'activeusers-hidesysops' => 'Skjul administratorer',
-'activeusers-noresult' => 'Ingen brukere funnet.',
-
-# Special:Log/newusers
-'newuserlogpage' => 'Brukeropprettelseslogg',
-'newuserlogpagetext' => 'Dette er en logg over brukeropprettelser.',
-
-# Special:ListGroupRights
-'listgrouprights' => 'Rettigheter for brukergrupper',
-'listgrouprights-summary' => 'Følgende er en liste over brukergrupper som er definert på denne wikien, og hvilke rettigheter de har.
-Mer informasjon om de enkelte rettighetstypene kan finnes [[{{MediaWiki:Listgrouprights-helppage}}|her]].',
-'listgrouprights-key' => '* <span class="listgrouprights-granted">Innvilget rettighet</span>
-* <span class="listgrouprights-granted">Tilbaketrukket rettighet</span>',
-'listgrouprights-group' => 'Gruppe',
-'listgrouprights-rights' => 'Rettigheter',
-'listgrouprights-helppage' => 'Help:Grupperettigheter',
-'listgrouprights-members' => '(liste over medlemmer)',
-'listgrouprights-addgroup' => 'Kan legge til {{PLURAL:$2|gruppa|gruppene}}: $1',
-'listgrouprights-removegroup' => 'Kan fjerne {{PLURAL:$2|gruppa|gruppene}}: $1',
-'listgrouprights-addgroup-all' => 'Kan legge til alle grupper',
-'listgrouprights-removegroup-all' => 'Kan fjerne alle grupper',
-'listgrouprights-addgroup-self' => 'Kan legge til {{PLURAL:$2|gruppe|gruppene}} til egen konto: $1',
-'listgrouprights-removegroup-self' => 'Kan ta vekk {{PLURAL:$2|gruppe|grupper}} fra egen konto: $1',
-'listgrouprights-addgroup-self-all' => 'Kan legge til alle grupper til egen konto',
-'listgrouprights-removegroup-self-all' => 'Kan ta bort alle grupper fra egen konto',
-
-# E-mail user
-'mailnologin' => 'Ingen avsenderadresse',
-'mailnologintext' => 'Du må være [[Special:UserLogin|logget inn]] og ha en gyldig e-postadresse satt i [[Special:Preferences|brukerinnstillingene]] for å sende e-post til andre brukere.',
-'emailuser' => 'E-post til denne brukeren',
-'emailpage' => 'E-post til bruker',
-'emailpagetext' => 'Du kan bruke skjemaet nedenfor for å sende en e-post til denne brukeren.
-Den e-postadressen du har satt i [[Special:Preferences|innstillingene dine]] vil dukke opp i «fra»-feltet på denne e-posten, så mottakeren er i stand til å svare.',
-'usermailererror' => 'E-postobjekt returnerte feilen:',
-'usermaildisabled' => 'Brukerepost deaktivert',
-'usermaildisabledtext' => 'Du kan ikke sende epost til andre brukere på denne wikien',
-'noemailtitle' => 'Ingen e-postadresse',
-'noemailtext' => 'Dene brukeren har ikke oppgitt en gyldig e-postadresse.',
-'nowikiemailtitle' => 'Ingen e-post tillatt',
-'nowikiemailtext' => 'Denne brukeren har valgt å ikke motta e-post fra andre brukere.',
-'emailnotarget' => 'Ikke-eksisterende eller ugyldig brukernavn for mottaker.',
-'emailtarget' => 'Skriv inn brukernavnet på mottakeren',
-'emailusername' => 'Brukernavn:',
-'emailusernamesubmit' => 'Send',
-'email-legend' => 'Send en e-post til en annen {{SITENAME}}-bruker',
-'emailfrom' => 'Fra:',
-'emailto' => 'Til:',
-'emailsubject' => 'Emne:',
-'emailmessage' => 'Beskjed:',
-'emailsend' => 'Send',
-'emailccme' => 'Send meg en kopi av beskjeden min.',
-'emailccsubject' => 'Kopi av din beskjed til $1: $2',
-'emailsent' => 'E-post sendt',
-'emailsenttext' => 'E-postbeskjeden er sendt',
-'emailuserfooter' => 'E-posten ble sendt av $1 til $2 via «Send e-post»-funksjonen på {{SITENAME}}.',
-
-# User Messenger
-'usermessage-summary' => 'Etterlater en systembeskjed.',
-'usermessage-editor' => 'Systembudbringer',
-
-# Watchlist
-'watchlist' => 'Overvåkningsliste',
-'mywatchlist' => 'Overvåkningsliste',
-'watchlistfor2' => 'For $1 $2',
-'nowatchlist' => 'Du har ingenting i overvåkningslisten.',
-'watchlistanontext' => 'Vennligst $1 for å vise eller redigere sider på overvåkningslisten din.',
-'watchnologin' => 'Ikke logget inn',
-'watchnologintext' => 'Du må være [[Special:UserLogin|logget inn]] for å kunne endre overvåkningslisten.',
-'addwatch' => 'Legg til i overvåkningslisten',
-'addedwatchtext' => "Siden «[[:$1]]» er lagt til [[Special:Watchlist|overvåkningslisten]].
-Fremtidige endringer til denne siden og den tilhørende diskusjonssiden blir listet opp her, og siden vil fremstå '''uthevet''' i [[Special:RecentChanges|listen over siste endringer]] for å gjøre det lettere å finne den.",
-'removewatch' => 'Fjern fra overvåkningslisten',
-'removedwatchtext' => 'Siden «[[:$1]]» er fjernet fra [[Special:Watchlist|overvåkningslisten din]].',
-'watch' => 'Overvåk',
-'watchthispage' => 'Overvåk denne siden',
-'unwatch' => 'Avslutt overvåkning',
-'unwatchthispage' => 'Fjerner overvåkning',
-'notanarticle' => 'Ikke en artikkel',
-'notvisiblerev' => 'Revisjonen er slettet',
-'watchnochange' => 'Ingen av sidene i overvåkningslisten er endret i den valgte perioden.',
-'watchlist-details' => '{{PLURAL:$1|Én side|$1 sider}} på din overvåkningsliste, teller ikke diskusjonssider.',
-'wlheader-enotif' => '* E-postnotifikasjon er slått på.',
-'wlheader-showupdated' => "* Sider som har blitt forandret siden du sist besøkte dem vises i '''fet tekst'''",
-'watchmethod-recent' => 'sjekker siste endringer for sider i overvåkningslisten',
-'watchmethod-list' => 'sjekker siste endringer for sider i overvåkningslisten',
-'watchlistcontains' => 'Overvåkningslisten inneholder $1 {{PLURAL:$1|side|sider}}.',
-'iteminvalidname' => 'Problem med «$1», ugyldig navn&nbsp;…',
-'wlshowlast' => 'Vis siste $1 timer $2 dager $3',
-'watchlist-options' => 'Alternativ for overvåkningslisten',
-
-# Displayed when you click the "watch" button and it is in the process of watching
-'watching' => 'Overvåker…',
-'unwatching' => 'Fjerner fra overvåkningsliste…',
-'watcherrortext' => 'Det oppsto en feil under endring av overvåkningsinnstillingene dine for «$1».',
-
-'enotif_mailer' => '{{SITENAME}}s påminnelsessystem',
-'enotif_reset' => 'Merk alle sider som besøkt',
-'enotif_newpagetext' => 'Dette er en ny side.',
-'enotif_impersonal_salutation' => '{{SITENAME}}-bruker',
-'changed' => 'endret',
-'created' => 'opprettet',
-'enotif_subject' => '{{SITENAME}}-siden $PAGETITLE har blitt $CHANGEDORCREATED av $PAGEEDITOR',
-'enotif_lastvisited' => 'Se $1 for alle endringer siden ditt forrige besøk.',
-'enotif_lastdiff' => 'Se $1 for å se denne endringen.',
-'enotif_anon_editor' => 'anonym bruker $1',
-'enotif_body' => 'Kjære $WATCHINGUSERNAME,
-
-
-{{SITENAME}}-siden $PAGETITLE har blitt $CHANGEDORCREATED den $PAGEEDITDATE av $PAGEEDITOR, se $PAGETITLE_URL for den nåværende revisjonen.
-
-$NEWPAGE
-
-Redigeringssammendrag: $PAGESUMMARY $PAGEMINOREDIT
-
-Kontakt brukeren:
-e-post: $PAGEEDITOR_EMAIL
-wiki: $PAGEEDITOR_WIKI
-
-Det vil ikke komme flere varsler om endringer på denne siden med mindre du besøker den.
-Du kan også fjerne varslingsflagg for alle overvåkede sider i overvåkningslisten din.
-
-             Ditt vennlige varslingssystem for {{SITENAME}}
-
---
-For å endre innstillingene for e-postvarsler, se
-{{canonicalurl:{{#special:Preferences}}}}
-
-For å endre innstillingene for overvåkningslisten, se
-{{canonicalurl:{{#special:EditWatchlist}}}}
-
-For å slette en side fra overvåkningssiden, se
-$UNWATCHURL
-
-Tilbakemelding og videre assistanse:
-{{canonicalurl:{{MediaWiki:Helppage}}}}',
-
-# Delete
-'deletepage' => 'Slett side',
-'confirm' => 'Bekreft',
-'excontent' => 'Innholdet var: «$1»',
-'excontentauthor' => 'innholdet var «$1» (og eneste bidragsyter var [[Special:Contributions/$2|$2]])',
-'exbeforeblank' => 'innholdet før siden ble tømt var: «$1»',
-'exblank' => 'siden var tom',
-'delete-confirm' => 'Slett «$1»',
-'delete-legend' => 'Slett',
-'historywarning' => 'Advarsel: Siden du er i ferd med å slette har en historikk med omtrent {{PLURAL:$1|én revisjon|$1 revisjoner}}:',
-'confirmdeletetext' => 'Du holder på å slette en side sammen med historikken.
-Bekreft at du virkelig vil slette denne siden, at du forstår konsekvensene og at du gjør det i samsvar med [[{{MediaWiki:Policy-url}}|retningslinjene]].',
-'actioncomplete' => 'Gjennomført',
-'actionfailed' => 'Handling mislyktes',
-'deletedtext' => '«$1» er slettet.
-Se $2 for en oversikt over de siste slettingene.',
-'dellogpage' => 'Slettingslogg',
-'dellogpagetext' => 'Under er ei liste over nylige slettinger.',
-'deletionlog' => 'slettingslogg',
-'reverted' => 'Gjenopprettet en tidligere versjon',
-'deletecomment' => 'Årsak:',
-'deleteotherreason' => 'Annen/utdypende grunn:',
-'deletereasonotherlist' => 'Annen grunn',
-'deletereason-dropdown' => '* Vanlige grunner for sletting
-** På forfatters forespørsel
-** Opphavsrettsbrudd
-** Vandalisme',
-'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.',
-
-# Rollback
-'rollback' => 'Fjern redigeringer',
-'rollback_short' => 'Tilbakestill',
-'rollbacklink' => 'tilbakestill',
-'rollbackfailed' => 'Kunne ikke tilbakestille',
-'cantrollback' => 'Kan ikke fjerne redigering; den siste brukeren er den eneste forfatteren.',
-'alreadyrolled' => 'Kan ikke fjerne den siste redigeringen på [[$1]] av [[User:$2|$2]] ([[User talk:$2|diskusjon]]{{int:pipe-separator}}[[Special:Contributions/$2|{{int:contribslink}}]]); en annen har allerede redigert siden eller fjernet redigeringen.
-
-Den siste redigeringen ble foretatt av [[User:$3|$3]] ([[User talk:$3|diskusjon]]{{int:pipe-separator}}[[Special:Contributions/$3|{{int:contribslink}}]]).',
-'editcomment' => "Redigeringskommentaren var: «''$1''»",
-'revertpage' => 'Tilbakestilte endring av [[Special:Contributions/$2|$2]] ([[User talk:$2|diskusjon]]) til siste versjon av [[User:$1|$1]]',
-'revertpage-nouser' => 'Tilbakestilte endringer av (fjernet brukernavn) til siste versjon av [[User:$1|$1]]',
-'rollback-success' => 'Tilbakestilte endringer av $1; endret til siste versjon av $2.',
-
-# Edit tokens
-'sessionfailure-title' => 'Sesjonsfeil',
-'sessionfailure' => "Det ser ut til å være et problem med innloggingen din, og den ble avbrutt av sikkerhetshensyn. Trykk ''Tilbake'' i nettleseren din, oppdater siden og prøv igjen.",
-
-# Protect
-'protectlogpage' => 'Beskyttelseslogg',
-'protectlogtext' => 'Nedenfor er en liste over endringer av sidebeskyttelser.
-Se [[Special:ProtectedPages|listen over beskyttede sider]] for listen over gjeldende sidebeskyttelser.',
-'protectedarticle' => 'beskyttet «[[$1]]»',
-'modifiedarticleprotection' => 'endret beskyttelsesnivå for «[[$1]]»',
-'unprotectedarticle' => 'fjernet beskyttelse av «[[$1]]»',
-'movedarticleprotection' => 'flyttet beskyttelsesinnstillinger fra «[[$2]]» til «[[$1]]»',
-'protect-title' => 'Låser «$1»',
-'prot_1movedto2' => '[[$1]] flyttet til [[$2]]',
-'protect-legend' => 'Bekreft låsing',
-'protectcomment' => 'Årsak:',
-'protectexpiry' => 'Utløper:',
-'protect_expiry_invalid' => 'Utløpstiden er ugyldig.',
-'protect_expiry_old' => 'Utløpstiden har allerede vært.',
-'protect-unchain-permissions' => 'Lås opp flere beskyttelsesinnstillinger',
-'protect-text' => "Du kan se og endre beskyttelsesnivået for siden '''$1''' her.",
-'protect-locked-blocked' => "Du kan ikke endre beskyttelsesnivåer mens du er blokkert. Dette er de nåværende innstillingene for siden '''$1''':",
-'protect-locked-dblock' => "Beskyttelsesnivåer kan ikke endres under en aktiv databasebeskyttelse. Dette er de nåværende innstillingene for siden '''$1''':",
-'protect-locked-access' => "Kontoen din har ikke tillatelse til å endre sidebeskyttelsesnivå.
-Dette er de nåværende innstillingene for siden '''$1''':",
-'protect-cascadeon' => 'Denne siden er for tiden beskyttet fordi den er inkludert på følgende {{PLURAL:$1|side|sider}} som har dypbeskyttelse slått på.
-Du kan endre sidens beskyttelsesnivå, men det vil ikke påvirke dypbeskyttelsen.',
-'protect-default' => 'Tillat alle brukere',
-'protect-fallback' => 'Må ha «$1»-tillatelse',
-'protect-level-autoconfirmed' => 'Eastte anonyma ja ođđa geavaheddjiid',
-'protect-level-sysop' => 'Kun administratorer',
-'protect-summary-cascade' => 'dypbeskyttelse',
-'protect-expiring' => 'utløper $1 (UTC)',
-'protect-expiry-indefinite' => 'ubestemt',
-'protect-cascade' => 'Beskytt sider som er inkludert på denne siden (dypbeskyttelse)',
-'protect-cantedit' => 'Du kan ikke endre beskyttelsesnivået til denne siden fordi du ikke har tillatelse til å redigere den.',
-'protect-othertime' => 'Annen tid:',
-'protect-othertime-op' => 'annen tid',
-'protect-existing-expiry' => 'Gjeldende utløpstid: $3 $2',
-'protect-otherreason' => 'Annen/utdypende grunn:',
-'protect-otherreason-op' => 'Annen grunn',
-'protect-dropdown' => '*Vanlige låsingsårsaker
-** Gjentatt hærverk
-** Gjentatt spam
-** Redigeringskrig
-** Side med mange besøkende',
-'protect-edit-reasonlist' => 'Rediger låsingsgrunner',
-'protect-expiry-options' => '1 time:1 hour,1 dag:1 day,1 uke:1 week,2 uker:2 weeks,1 måned:1 month,3 måneder:3 months,6 måneder:6 months,1 år:1 year,uendelig:infinite',
-'restriction-type' => 'Tillatelse:',
-'restriction-level' => 'Restriksjonsnivå:',
-'minimum-size' => 'Minimumstørrelse',
-'maximum-size' => 'Maksimumstørrelse:',
-'pagesize' => '(byte)',
-
-# Restrictions (nouns)
-'restriction-edit' => 'Redigering',
-'restriction-move' => 'Flytting',
-'restriction-create' => 'Opprett',
-'restriction-upload' => 'Last opp',
-
-# Restriction levels
-'restriction-level-sysop' => 'fullstendig låst',
-'restriction-level-autoconfirmed' => 'halvlåst',
-'restriction-level-all' => 'alle nivåer',
-
-# Undelete
-'undelete' => 'Vis slettede sider',
-'undeletepage' => 'Se og gjenopprett slettede sider',
-'undeletepagetitle' => "'''Følgende innhold er slettede revisjoner av [[:$1]].'''",
-'viewdeletedpage' => 'Vis slettede sider',
-'undeletepagetext' => 'Følgende {{PLURAL:$1|side|sider}} er slettet, men finnes fortsatt i arkivet og kan gjenopprettes. Arkivet blir periodevis slettet.',
-'undelete-fieldset-title' => 'Gjenopprett revisjoner',
-'undeleteextrahelp' => "For å gjenopprette hele sidens historikk, la alle boksene være tomme og klikk '''''{{int:undeletebtn}}'''''.
-For å gjenopprette kun deler, kryss av boksene for revisjonene du vil gjenopprette og klikk '''''{{int:undeletebtn}}'''''.",
-'undeleterevisions' => '{{PLURAL:$1|Én versjon arkivert|$1 versjoner arkiverte}}',
-'undeletehistory' => 'Om du gjenoppretter siden vil alle revisjoner gjenopprettes i historikken.
-Dersom en ny side ved samme navn har blitt oprettet etter slettingen, vil de gjenopprettede revisjonene dukke opp før denne i redigeringshistorikken.',
-'undeleterevdel' => 'Gjenoppretting kan ikke utføres dersom det resulterer i at den øverste revisjonen blir delvis slettet. I slike tilfeller må du fjerne merkingen av den nyeste slettede revisjonen.',
-'undeletehistorynoadmin' => 'Denne artikkelen har blitt slettet. Grunnen for slettingen vises i oppsummeringen nedenfor, sammen med detaljer om brukerne som redigerte siden før den ble slettet. Teksten i disse slettede revisjonene er kun tilgjengelig for administratorer.',
-'undelete-revision' => 'Slettet revisjon av $1 (per $4 $5) av $3:',
-'undeleterevision-missing' => 'Ugyldig eller manglende revisjon. Du kan ha en ødelagt lenke, eller revisjonen har blitt fjernet fra arkivet.',
-'undelete-nodiff' => 'Ingen tidligere revisjoner funnet.',
-'undeletebtn' => 'Gjenopprett',
-'undeletelink' => 'vis/gjenopprett',
-'undeleteviewlink' => 'vis',
-'undeletereset' => 'Nullstill',
-'undeleteinvert' => 'Inverter valg',
-'undeletecomment' => 'Årsak:',
-'undeletedrevisions' => '{{PLURAL:$1|Én revisjon|$1 revisjoner}} gjenopprettet',
-'undeletedrevisions-files' => '{{PLURAL:$1|Én revisjon|$1 revisjoner}} og {{PLURAL:$2|én fil|$2 filer}} gjenopprettet',
-'undeletedfiles' => '{{PLURAL:$1|Én fil|$1 filer}} gjenopprettet',
-'cannotundelete' => 'Kunne ikke gjenopprette siden (den kan være gjenopprettet av noen andre).',
-'undeletedpage' => "'''$1 ble gjenopprettet'''
-
-Sjekk [[Special:Log/delete|slettingsloggen]] for en liste over nylige slettinger og gjenopprettelser.",
-'undelete-header' => 'Se [[Special:Log/delete|slettingsloggen]] for nylig slettede sider.',
-'undelete-search-box' => 'Søk i slettede sider',
-'undelete-search-prefix' => 'Vis sider som starter med:',
-'undelete-search-submit' => 'Søk',
-'undelete-no-results' => 'Ingen passende sider funnet i slettingsarkivet.',
-'undelete-filename-mismatch' => 'Kan ikke gjenopprette filrevisjon med tidstrykk $1: ikke samsvarende filnavn',
-'undelete-bad-store-key' => 'Kan ikke gjenopprette filrevisjon med tidstrykk $1: fil manglet før sletting',
-'undelete-cleanup-error' => 'Feil i sletting av ubrukt arkivfil «$1».',
-'undelete-missing-filearchive' => 'Klarte ikke å gjenopprette filarkivet med ID $1 fordi det ikke er i databasen. Det kan ha blitt gjenopprettet tidligere.',
-'undelete-error-short' => 'Feil under filgjenoppretting: $1',
-'undelete-error-long' => 'Feil oppsto under filgjenoppretting:
-
-$1',
-'undelete-show-file-confirm' => 'Er du sikker på at du vil vise en slettet versjon av filen «<nowiki>$1</nowiki>» fra den $2 klokken $3?',
-'undelete-show-file-submit' => 'Ja',
-
-# Namespace form on various pages
-'namespace' => 'Navnerom:',
-'invert' => 'Inverter valg',
-'tooltip-invert' => 'Kryss av denne boksen for å skjule endringer på sider i det valgte navnerommet (og tilhørende navnerom hvis de er avkrysset også)',
-'namespace_association' => 'Tilknyttet navnerom',
-'tooltip-namespace_association' => 'Kryss av denne boksen for å også inkludere diskusjons- eller emnenavnerommet som er tilknyttet det valgte navnerommet',
-'blanknamespace' => '(Hoved)',
-
-# Contributions
-'contributions' => 'Brukerbidrag',
-'contributions-title' => 'Brukerbidrag av $1',
-'mycontris' => 'Egne bidrag',
-'contribsub2' => 'For $1 ($2)',
-'nocontribs' => 'Ingen endringer er funnet som passer disse kriteriene.',
-'uctop' => '(siste)',
-'month' => 'Fra måned (og tidligere):',
-'year' => 'Fra år (og tidligere):',
-
-'sp-contributions-newbies' => 'Vis kun bidrag fra nye kontoer',
-'sp-contributions-newbies-sub' => 'For nybegynnere',
-'sp-contributions-newbies-title' => 'Bidrag av nye kontoer',
-'sp-contributions-blocklog' => 'blokkeringslogg',
-'sp-contributions-deleted' => 'slettede brukerbidrag',
-'sp-contributions-uploads' => 'opplastinger',
-'sp-contributions-logs' => 'logger',
-'sp-contributions-talk' => 'diskusjon',
-'sp-contributions-userrights' => 'brukerrettighetskontroll',
-'sp-contributions-blocked-notice' => 'Denne brukeren er for tiden blokkert.
-Siste blokkeringsloggelement kan sees nedenfor.',
-'sp-contributions-blocked-notice-anon' => 'Denne IP-adressen er for tiden blokkert.
-Den siste oppføringen i blokkeringsloggen er vist nedenfor som referanse:',
-'sp-contributions-search' => 'Søk etter bidrag',
-'sp-contributions-username' => 'IP-adresse eller brukernavn:',
-'sp-contributions-toponly' => 'Vis kun endringer som er gjeldende revisjoner',
-'sp-contributions-submit' => 'Søk',
-
-# What links here
-'whatlinkshere' => 'Lenker hit',
-'whatlinkshere-title' => 'Sider som lenker til «$1»',
-'whatlinkshere-page' => 'Side:',
-'linkshere' => "Følgende sider lenker til '''[[:$1]]''':",
-'nolinkshere' => "Ingen sider lenker til '''[[:$1]]'''.",
-'nolinkshere-ns' => "Ingen sider lenker til '''[[:$1]]''' i valgte navnerom.",
-'isredirect' => 'omdirigeringsside',
-'istemplate' => 'transklusjon',
-'isimage' => 'fillenke',
-'whatlinkshere-prev' => '{{PLURAL:$1|forrige|forrige $1}}',
-'whatlinkshere-next' => '{{PLURAL:$1|neste|neste $1}}',
-'whatlinkshere-links' => '← lenker',
-'whatlinkshere-hideredirs' => '$1 omdirigeringer',
-'whatlinkshere-hidetrans' => '$1 transkluderinger',
-'whatlinkshere-hidelinks' => '$1 lenker',
-'whatlinkshere-hideimages' => '$1 fillenker',
-'whatlinkshere-filters' => 'Filtre',
-
-# Block/unblock
-'autoblockid' => 'Autoblokker #$1',
-'block' => 'Blokker bruker',
-'unblock' => 'Fjern blokkering av bruker',
-'blockip' => 'Blokker bruker',
-'blockip-title' => 'Blokker bruker',
-'blockip-legend' => 'Blokker bruker',
-'blockiptext' => 'Bruk skjemaet under for å blokkere en IP-adresses tilgang til å redigere artikler. Dette må kun gjøres for å forhindre hærverk, og i overensstemmelse med [[{{MediaWiki:Policy-url}}|retningslinjene]]. Fyll ut en spesiell begrunnelse under.',
-'ipadressorusername' => 'IP-adresse eller brukernavn',
-'ipbexpiry' => 'Varighet:',
-'ipbreason' => 'Årsak:',
-'ipbreasonotherlist' => 'Annen grunn',
-'ipbreason-dropdown' => '*Vanlige blokkeringsgrunner
-** Legger inn feilinformasjon
-** Fjerner innhold fra sider
-** Lenkespam
-** Legger inn vås
-** Truende oppførsel
-** Misbruk av flere kontoer
-** Uakseptabelt brukernavn',
-'ipb-hardblock' => 'Hindre innloggede brukere i å redigere fra denne IP-adressen',
-'ipbcreateaccount' => 'Hindre kontoopprettelse',
-'ipbemailban' => 'Forhindre brukeren fra å sende e-post',
-'ipbenableautoblock' => 'Blokker forrige IP-adresse brukt av denne brukeren automatisk, samt alle IP-adresser brukeren forsøker å redigere med i framtiden',
-'ipbsubmit' => 'Blokker denne brukeren',
-'ipbother' => 'Annen tid',
-'ipboptions' => '2 timer:2 hours,1 dag:1 day,3 dager:3 days,1 uke:1 week,2 uker:2 weeks,1 måned:1 month,3 måneder:3 months,6 måneder:6 months,1 år:1 year,uendelig:infinite',
-'ipbotheroption' => 'annet',
-'ipbotherreason' => 'Annen/utdypende grunn:',
-'ipbhidename' => 'Skjul brukernavn fra endringer og lister',
-'ipbwatchuser' => 'Overvåk brukerens brukerside og diskusjonsside',
-'ipb-disableusertalk' => 'Hindre denne brukeren i å redigere sin egen diskusjonsside mens han/hun er blokkert',
-'ipb-change-block' => 'Blokker brukeren på nytt med disse innstillingene',
-'ipb-confirm' => 'Bekreft blokkering',
-'badipaddress' => 'Ugyldig IP-adresse.',
-'blockipsuccesssub' => 'Blokkering utført',
-'blockipsuccesstext' => '­«[[Special:Contributions/$1|$1]]» har blitt blokkert.<br />
-Se [[Special:IPBlockList|blokkeringslisten]] for alle blokkeringer.',
-'ipb-blockingself' => 'Du er i ferd med å blokkere deg selv! Er du sikker på at du vil gjøre det?',
-'ipb-confirmhideuser' => 'Du er i ferd med å blokkere en bruker med «skjul bruker» aktivert. Dette vil skjule brukerens navn i alle lister og loggoppføringer. Er du sikker på at du vil gjøre dette?',
-'ipb-edit-dropdown' => 'Rediger blokkeringsgrunner',
-'ipb-unblock-addr' => 'Avblokker $1',
-'ipb-unblock' => 'Avblokker et brukernavn eller en IP-adresse',
-'ipb-blocklist' => 'Vis gjeldende blokkeringer',
-'ipb-blocklist-contribs' => 'Bidrag fra $1',
-'unblockip' => 'Opphev blokkering',
-'unblockiptext' => 'Bruk skjemaet under for å gjenopprette skriveadgangen for en tidligere blokkert adresse eller bruker.',
-'ipusubmit' => 'Opphev blokkering',
-'unblocked' => '[[User:$1|$1]] ble avblokkert',
-'unblocked-range' => '$1 har fått løftet blokkeringen',
-'unblocked-id' => 'Blokkering $1 ble fjernet',
-'blocklist' => 'Blokkerte brukere',
-'ipblocklist' => 'Blokkerte IP-adresser og brukernavn',
-'ipblocklist-legend' => 'Finn en blokkert bruker',
-'blocklist-userblocks' => 'Skjul kontoblokkeringer',
-'blocklist-tempblocks' => 'Skjul midlertidige blokkeringer',
-'blocklist-addressblocks' => 'Skjul individuelle IP-blokkeringer',
-'blocklist-timestamp' => 'Tidsstempel',
-'blocklist-target' => 'Mål',
-'blocklist-expiry' => 'Utløper',
-'blocklist-by' => 'Blokkerende admin',
-'blocklist-params' => 'Blokkeringsparametre',
-'blocklist-reason' => 'Årsak',
-'ipblocklist-submit' => 'Søk',
-'ipblocklist-localblock' => 'Lokal blokkering',
-'ipblocklist-otherblocks' => '{{PLURAL:$1|Annen blokkering|Andre blokkeringer}}',
-'infiniteblock' => 'uendelig',
-'expiringblock' => 'utgår den $1 kl $2',
-'anononlyblock' => 'kun uregistrerte',
-'noautoblockblock' => 'autoblokkering slått av',
-'createaccountblock' => 'kontooppretting blokkert',
-'emailblock' => 'e-post blokkert',
-'blocklist-nousertalk' => 'kan ikke redigere sin egen diskusjonsside',
-'ipblocklist-empty' => 'Blokkeringslisten er tom.',
-'ipblocklist-no-results' => 'Den angitte IP-adressen eller brukeren er ikke blokkert.',
-'blocklink' => 'blokker',
-'unblocklink' => 'opphev blokkering',
-'change-blocklink' => 'endre blokkering',
-'contribslink' => 'bidrag',
-'autoblocker' => 'Du ble automatisk blokkert fordi du deler IP-adresse med «[[User:$1|$1]]». Grunnen som ble gitt til at «$1» ble blokkert var: «$2».',
-'blocklogpage' => 'Blokkeringslogg',
-'blocklog-showlog' => 'Denne brukeren har blitt blokkert før.
-Blokkeringsloggen vises nedenfor.',
-'blocklog-showsuppresslog' => 'Denne brukeren har tidligere blitt blokkert og skjult.
-Skjulingsloggen vises nedenfor.',
-'blocklogentry' => 'blokkerte [[$1]] med en varighet på $2 $3',
-'reblock-logentry' => 'endret blokkeringsinnstillinger for [[$1]] med en varighet på $2 $3',
-'blocklogtext' => 'Dette er en logg som viser hvilke brukere som har blitt blokkert og avblokkert. Automatisk blokkerte IP-adresser vises ikke. Se [[Special:BlockList|blokkeringslisten]] for en liste over IP-adresser som er blokkert akkurat nå.',
-'unblocklogentry' => 'opphevet blokkeringen av $1',
-'block-log-flags-anononly' => 'kun uregistrerte brukere',
-'block-log-flags-nocreate' => 'kontooppretting deaktivert',
-'block-log-flags-noautoblock' => 'autoblokkering slått av',
-'block-log-flags-noemail' => 'e-post blokkert',
-'block-log-flags-nousertalk' => 'kan ikke redigere egen diskusjonsside',
-'block-log-flags-angry-autoblock' => 'utvidet autoblokkering aktivert',
-'block-log-flags-hiddenname' => 'brukernavn skjult',
-'range_block_disabled' => 'Muligheten til å blokkere flere IP-adresser om gangen er slått av.',
-'ipb_expiry_invalid' => 'Ugyldig utløpstid.',
-'ipb_expiry_temp' => 'For å skjule brukernavnet må blokkeringen være permanent.',
-'ipb_hide_invalid' => 'Kan ikke skjule denne kontoen. Den kan ha for mange redigeringer.',
-'ipb_already_blocked' => '«$1» er allerede blokkert',
-'ipb-needreblock' => '$1 er blokkert fra før. Vil du endre innstillingene?',
-'ipb-otherblocks-header' => '{{PLURAL:$1|Annen blokkering|Andre blokkeringer}}',
-'unblock-hideuser' => 'Du kan ikke løfte blokkeringen av denne brukeren siden dens brukernavn har blitt skjult.',
-'ipb_cant_unblock' => 'Feil: Blokk-ID $1 ikke funnet. Kan ha blitt avblokkert allerede.',
-'ipb_blocked_as_range' => 'Feil: IP-en $1 er ikke blokkert direkte, og kan ikke avblokkeres. Den er imidlertid blokkert som del av blokkeringa av IP-rangen $2, som kan avblokkeres.',
-'ip_range_invalid' => 'Ugyldig IP-rad.',
-'ip_range_toolarge' => 'Blokkering av IP-serier større enn /$1 er ikke tillatt.',
-'blockme' => 'Blokker meg',
-'proxyblocker' => 'Proxyblokker',
-'proxyblocker-disabled' => 'Denne funksjonen er slått av.',
-'proxyblockreason' => 'IP-adressen din ble blokkert fordi den er en åpen proxy. Kontakt internettleverandøren din eller teknisk støtte og informer dem om dette alvorlige sikkerhetsproblemet.',
-'proxyblocksuccess' => 'Utført.',
-'sorbsreason' => 'Din IP-adresse angis som en åpen proxy i DNSBL-en brukt av {{SITENAME}}.',
-'sorbs_create_account_reason' => 'Din IP-adresse angis som en åpen proxy i DNSBL-en brukt av {{SITENAME}}. Du kan ikke opprette en konto',
-'cant-block-while-blocked' => 'Du kan ikke blokkere andre mens du selv er blokkert.',
-'cant-see-hidden-user' => 'Brukeren du prøver å blokkere har allerede blitt blokkert og skjult. Ettersom du ikke har rett til å skjule brukere (hideuser), kan du ikke se eller endre brukerens blokkering.',
-'ipbblocked' => 'Du kan ikke blokkere eller avblokkere andre brukere, siden du selv er blokkert',
-'ipbnounblockself' => 'Du har ikke tillatelse til å avblokkere deg selv',
-
-# Developer tools
-'lockdb' => 'Lås database',
-'unlockdb' => 'Åpne database',
-'lockdbtext' => 'Å låse databasen vil avbryte alle brukere fra å kunne
-redigere sider, endre deres innstillinger, redigere deres
-overvåkningsliste, og andre ting som krever endringer i databasen.
-Bekreft at du har til hensikt å gjøre dette, og at du vil
-låse opp databasen når vedlikeholdet er utført.',
-'unlockdbtext' => 'Å låse opp databasen vil si at alle brukere igjen
-kan redigere sider, endre sine innstillinger, redigere sin
-overvåkningsliste, og andre ting som krever endringer i databasen.
-Bekreft at du har til hensikt å gjøre dette.',
-'lockconfirm' => 'Ja, jeg vil virkelig låse databasen.',
-'unlockconfirm' => 'Ja, jeg vil virkelig låse opp databasen.',
-'lockbtn' => 'Lås databasen',
-'unlockbtn' => 'Åpne databasen',
-'locknoconfirm' => 'Du har ikke bekreftet handlingen.',
-'lockdbsuccesssub' => 'Databasen er nå låst',
-'unlockdbsuccesssub' => 'Databasen er nå lås opp',
-'lockdbsuccesstext' => 'Databasen er låst.<br />Husk å [[Special:UnlockDB|låse den opp]] når du er ferdig med vedlikeholdet.',
-'unlockdbsuccesstext' => 'Databasen er låst opp.',
-'lockfilenotwritable' => 'Kan ikke skrive til databasen. For å låse eller åpne databasen, må denne kunne skrives til av tjeneren.',
-'databasenotlocked' => 'Databasen er ikke låst.',
-'lockedbyandtime' => '(av $1 den $2, kl $3)',
-
-# Move page
-'move-page' => 'Flytt $1',
-'move-page-legend' => 'Flytt side',
-'movepagetext' => "Når du bruker skjemaet nedenfor døper du om en side og flytter hele historikken til det nye navnet.
-Den gamle tittelen blir en omdirigeringsside til den nye tittelen.
-Du kan oppdatere omdirigeringer som peker til den opprinnelige tittelen automatisk.
-Om du velger å ikke gjøre det, sjekk at flyttingen ikke fører til [[Special:DoubleRedirects|doble]] eller [[Special:BrokenRedirects|ødelagte omdirigeringer]].
-Du er ansvarlig for at lenker fortsetter å peke til de sidene de er ment å peke til.
-
-Legg merke til at siden '''ikke''' kan flyttes hvis det allerede finnes en side med den nye tittelen, med mindre den er tom eller er en omdirigeringsside uten historikk.
-Det betyr at du kan flytte en side tilbake dit den kom fra hvis du gjør en feil, og du kan ikke overskrive eksisterende sider ved et uhell.
-
-'''Advarsel!'''
-Dette kan være en drastisk og uventet endring for en populær side;
-vær sikker på at du forstår konsekvensene av dette før du fortsetter.",
-'movepagetext-noredirectfixer' => "Skjemaet nedenfor vil gi en side ny tittel og flytte historikken dens til det nye navnet.
-Den gamle tittelen vil bli en omdirigering til den nye.
-Sjekk om det blir [[Special:DoubleRedirects|doble]] eller [[Special:BrokenRedirects|ødelagte omdirigeringer]].
-Du er ansvarlig for å sjekke at lenker fortsetter å gå dit de skal.
-
-Merk at sider '''ikke''' blir flyttet om det allerede finnes en side med den tittelen, med mindre siden er tom eller en omdirigering og ikke har noen redigeringshistorikk.
-Dette betyr at du kan endre tittelen til en tittel siden hadde tidligere, og at du ikke kan skrive over en eksisterende side.
-
-'''Advarsel!'''
-Dette kan være en drastisk og uventen endring for en populær side;
-vær sikker på at du forstår konsekvensene av dette før du fortsetter.",
-'movepagetalktext' => "Den tilhørende diskusjonssiden vil automatisk bli flyttet sammen med siden '''med mindre:'''
-*Det allerede finnes en diskusjonsside som ikke er tom under det nye navnet, eller
-*Du fjerner markeringen i boksen nedenfor.
-
-I disse tilfellene er du nødt til å flytte eller flette siden manuelt, om ønskelig.",
-'movearticle' => 'Flytt side:',
-'moveuserpage-warning' => "'''Advarsel:''' Du er i ferd med å flytte en brukerside. Merk at kun siden vil bli flyttet; brukernavnet vil ''ikke'' bli endret.",
-'movenologin' => 'Ikke logget inn',
-'movenologintext' => 'Du må være registrert bruker og være [[Special:UserLogin|logget på]] for å flytte en side.',
-'movenotallowed' => 'Du har ikke tillatelse til å flytte sider.',
-'movenotallowedfile' => 'Du har ikke tillatelse til å flytte filer.',
-'cant-move-user-page' => 'Du har ikke tillatelse til å flytte brukersider (bortsett fra undersider).',
-'cant-move-to-user-page' => 'Du har ikke tillatelse til å flytte brukersider (bortsett fra undersider).',
-'newtitle' => 'Til ny tittel:',
-'move-watch' => 'Overvåk kilde- og målsiden',
-'movepagebtn' => 'Flytt side',
-'pagemovedsub' => 'Flytting gjennomført',
-'movepage-moved' => "'''«$1» ble flyttet til «$2»'''",
-'movepage-moved-redirect' => 'En omdirigering har blitt opprettet.',
-'movepage-moved-noredirect' => 'Det ble ikke opprettet en omdirigering.',
-'articleexists' => 'En side med det navnet finnes allerede eller det valgte navn er ugyldig.
-Velg et annet navn.',
-'cantmove-titleprotected' => 'Du kan ikke flytte en side til dette navnet, fordi den nye tittelen er beskyttet fra opprettelse.',
-'talkexists' => "'''Siden ble flyttet korrekt, men den tilhørende diskusjonssiden kunne ikke flyttes fordi det allerede finnes en under den nye tittelen.
-Du er nødt til å flette dem manuelt.'''",
-'movedto' => 'flyttet til',
-'movetalk' => 'Flytt tilhørende diskusjonsside.',
-'move-subpages' => 'Flytt alle undersider (opp til $1)',
-'move-talk-subpages' => 'Flytt alle undersider av diskusjonssiden (opp til $1)',
-'movepage-page-exists' => 'Siden $1 finnes allerede og kan ikke overskrives automatisk.',
-'movepage-page-moved' => 'Siden $1 har blitt flyttet til $2.',
-'movepage-page-unmoved' => 'Siden $1 kunne ikke flyttes til $2.',
-'movepage-max-pages' => 'Grensen på {{PLURAL:$1|én side|$1 sider}} er nådd; ingen flere sider vil bli flyttet automatisk.',
-'movelogpage' => 'Flyttelogg',
-'movelogpagetext' => 'Her er ei liste over sider som har blitt flyttet.',
-'movesubpage' => '{{PLURAL:$1|Underside|Undersider}}',
-'movesubpagetext' => 'Denne siden har {{PLURAL:$1|én underside|$1 undersider}} som vises nedenfor.',
-'movenosubpage' => 'Denne siden har ingen undersider.',
-'movereason' => 'Årsak:',
-'revertmove' => 'tilbakestill',
-'delete_and_move' => 'Slett og flytt',
-'delete_and_move_text' => '==Sletting nødvendig==
-Målsiden «[[:$1]]» finnes allerede. Vil du slette den så denne siden kan flyttes dit?',
-'delete_and_move_confirm' => 'Ja, slett siden',
-'selfmove' => 'Kilde- og destinasjonstittel er den samme; kan ikke flytte siden.',
-'immobile-source-namespace' => 'Kan ikke flytte sider i navnerommet «$1»',
-'immobile-target-namespace' => 'Kan ikke flytte sider til navnerommet «$1»',
-'immobile-target-namespace-iw' => 'Du kan ikke flytte en side til et navn som er en interwikilenke.',
-'immobile-source-page' => 'Denne siden kan ikke flyttes.',
-'immobile-target-page' => 'Kan ikke flytte til det navnet.',
-'imagenocrossnamespace' => 'Kan ikke flytte filer til andre navnerom enn filnavnerommet',
-'nonfile-cannot-move-to-file' => 'Kan ikke flytte ikke-filer til filnavnerom',
-'imagetypemismatch' => 'Den nye filendelsen tilsvarer ikke filtypen',
-'imageinvalidfilename' => 'Målnavnet er ugyldig',
-'fix-double-redirects' => 'Oppdater omdirigeringer som fører til den gamle tittelen',
-'move-leave-redirect' => 'La det være igjen en omdirigering',
-'protectedpagemovewarning' => "'''Advarsel:''' Denne siden har blitt låst slik at kun brukere med administratorrettigheter kan flytte den.
-Det siste loggelementet er oppgitt under som referanse:",
-'semiprotectedpagemovewarning' => "'''Merk:''' Denne siden har blitt låst slik at kun registrerte brukere kan flytte den.
-Det siste loggelementet er oppgitt under som referanse:",
-'move-over-sharedrepo' => '== Filen finnes ==
-[[:$1]] finnes på en delt kilde. Dersom du flytter en fil til dette navnet, vil du overstyre den delte filen.',
-'file-exists-sharedrepo' => 'Det valgte filnavnet er allerede i bruk på en delt kilde.
-Vennligst velg et annet navn.',
-
-# Export
-'export' => 'Eksporter sider',
-'exporttext' => 'Du kan eksportere teksten og redigeringshistorikken for en bestemt side eller en gruppe sider i XML.
-Dette kan senere importeres til en annen wiki som bruker MediaWiki ved hjelp av [[Special:Import|importsiden]].
-
-For å eksportere sider, skriv inn titler i tekstboksen under, én tittel per linje, og velg om du vil ha kun nåværende versjon, eller alle versjoner i historikken.
-
-Dersom du bare vil ha nåværende versjon, kan du også bruke en lenke, for eksempel [[{{#Special:Export}}/{{MediaWiki:Mainpage}}]] for siden «[[{{MediaWiki:Mainpage}}]]».',
-'exportcuronly' => 'Ta bare med den nåværende versjonen, ikke hele historikken.',
-'exportnohistory' => "----
-'''Merk:''' Eksportering av hele historikken gjennom dette skjemaet har blitt slått av av ytelsesgrunner.",
-'export-submit' => 'Eksporter',
-'export-addcattext' => 'Legg til sider fra kategori:',
-'export-addcat' => 'Legg til',
-'export-addnstext' => 'Legg til sider fra navnerom:',
-'export-addns' => 'Legg til',
-'export-download' => 'Lagre som fil',
-'export-templates' => 'Ta med maler',
-'export-pagelinks' => 'Inkluder lenkede sider med en dybde på:',
-
-# Namespace 8 related
-'allmessages' => 'Systemmeldinger',
-'allmessagesname' => 'Navn',
-'allmessagesdefault' => 'Standardtekst',
-'allmessagescurrent' => 'Nåværende tekst',
-'allmessagestext' => 'Dette er en liste over tilgjengelige systemmeldinger i MediaWiki-navnerommet.
-Besøk [//translatewiki.net translatewiki.net] om du ønsker å bidra med oversettelse av MediaWiki.',
-'allmessagesnotsupportedDB' => "''{{ns:special}}:Allmessages'' kan ikke brukes fordi '''\$wgUseDatabaseMessages''' er slått av.",
-'allmessages-filter-legend' => 'Filtrér',
-'allmessages-filter' => 'Filtrér etter tilpassningsgrad',
-'allmessages-filter-unmodified' => 'Uendret',
-'allmessages-filter-all' => 'Alle',
-'allmessages-filter-modified' => 'Endret',
-'allmessages-prefix' => 'Filtrer etter prefiks:',
-'allmessages-language' => 'Språk:',
-'allmessages-filter-submit' => 'Gå',
-
-# Thumbnails
-'thumbnail-more' => 'Forstørr',
-'filemissing' => 'Filen mangler',
-'thumbnail_error' => 'Feil under oppretting av miniatyrbilde: $1',
-'djvu_page_error' => 'DjVu-side ute av rekkevidde',
-'djvu_no_xml' => 'Klarte ikke å hente XML for DjVu-fil',
-'thumbnail_invalid_params' => 'Ugyldige miniatyrparametere, eller PNG-fil med flere piksler enn 12,5 millioner.',
-'thumbnail_dest_directory' => 'Klarte ikke å opprette målmappe',
-'thumbnail_image-type' => 'Bildetypen støttes ikke',
-'thumbnail_gd-library' => 'Ufullstendig konfigurering av GD library: mangler funksjonen $1',
-'thumbnail_image-missing' => 'Filen ser ut til å mangle: $1',
-
-# Special:Import
-'import' => 'Importer sider',
-'importinterwiki' => 'Transwiki-importering',
-'import-interwiki-text' => 'Velg en wiki og en side å importere. Revisjonsdatoer og bidragsyteres navn blir bevart. Alle transwiki-importeringer listes i [[Special:Log/import|importloggen]].',
-'import-interwiki-source' => 'Kildewiki/side:',
-'import-interwiki-history' => 'Kopier all historikk for denne siden',
-'import-interwiki-templates' => 'Inkluder alle maler',
-'import-interwiki-submit' => 'Importer',
-'import-interwiki-namespace' => 'Målnavnerom:',
-'import-upload-filename' => 'Filnavn:',
-'import-comment' => 'Kommentar:',
-'importtext' => 'Importer filen fra kildewikien med [[Special:Export|eksporteringsverktøyet]].
-Lagre den på din egen datamaskin og last den opp her.',
-'importstart' => 'Importerer sider&nbsp;…',
-'import-revision-count' => '({{PLURAL:$1|Én revisjon|$1 revisjoner}})',
-'importnopages' => 'Ingen sider å importere.',
-'imported-log-entries' => 'Importerte $1 {{PLURAL:$1|loggoppføring|loggoppføringer}}.',
-'importfailed' => 'Importering mislyktes: $1',
-'importunknownsource' => 'Ukjent importkildetype',
-'importcantopen' => 'Kunne ikke åpne importfil',
-'importbadinterwiki' => 'Ugyldig interwikilenke',
-'importnotext' => 'Tom eller ingen tekst',
-'importsuccess' => 'Importering ferdig.',
-'importhistoryconflict' => 'Motstridende revisjoner finnes (siden kan ha blitt importert tidligere)',
-'importnosources' => 'Ingen transwikiimportkilder er angitt, og direkte historikkimporteringer er slått av.',
-'importnofile' => 'Ingen importfil opplastet.',
-'importuploaderrorsize' => 'Importfilopplasting mislyktes. Filen er større enn tillatt opplastingsstørrelse.',
-'importuploaderrorpartial' => 'Importfilopplasting mislyktes. Filen ble kun delvis opplastet.',
-'importuploaderrortemp' => 'Importfilopplasting mislyktes. En midlertidig mappe mangler.',
-'import-parse-failure' => 'Tolkningsfeil ved XML-import',
-'import-noarticle' => 'Ingen side å importere!',
-'import-nonewrevisions' => 'Alle revisjoner var importert fra før.',
-'xml-error-string' => '$1 på linje $2, kolonne $3 (byte: $4): $5',
-'import-upload' => 'Last opp XML-data',
-'import-token-mismatch' => 'Sesjonsdata mistet. Venligst prøv igjen.',
-'import-invalid-interwiki' => 'Kan ikke importere fra angitt wiki.',
-
-# Import log
-'importlogpage' => 'Importlogg',
-'importlogpagetext' => 'Administrativ import av sider med redigeringshistorikk fra andre wikier.',
-'import-logentry-upload' => 'importerte [[$1]] ved opplasting',
-'import-logentry-upload-detail' => 'Importerte {{PLURAL:$1|én revisjon|$1 revisjoner}}',
-'import-logentry-interwiki' => 'transwikiimporterte $1',
-'import-logentry-interwiki-detail' => '{{PLURAL:$1|Én revisjon|$1 revisjoner}} fra $2',
-
-# Tooltip help for the actions
-'tooltip-pt-userpage' => 'Din brukerside',
-'tooltip-pt-anonuserpage' => 'Brukersiden for IP-adressen du redigerer fra',
-'tooltip-pt-mytalk' => 'Din diskusjonsside',
-'tooltip-pt-anontalk' => 'Diskusjon om redigeringer fra denne IP-adressen',
-'tooltip-pt-preferences' => 'Dine innstillinger',
-'tooltip-pt-watchlist' => 'Liste over sider du overvåker for endringer.',
-'tooltip-pt-mycontris' => 'Liste over dine bidrag',
-'tooltip-pt-login' => 'Du oppfordres til å logge inn, men det er ikke obligatorisk',
-'tooltip-pt-anonlogin' => 'Du oppfordres til å logge inn, men det er ikke obligatorisk.',
-'tooltip-pt-logout' => 'Logg ut',
-'tooltip-ca-talk' => 'Diskusjon om innholdssiden',
-'tooltip-ca-edit' => 'Du kan redigere denne siden. Vennligst bruk forhåndsvisningsknappen før du lagrer.',
-'tooltip-ca-addsection' => 'Start et nytt avsnitt',
-'tooltip-ca-viewsource' => 'Denne siden er beskyttet.
-Du kan se på kildeteksten',
-'tooltip-ca-history' => 'Tidligere revisjoner av denne siden',
-'tooltip-ca-protect' => 'Beskytt denne siden',
-'tooltip-ca-unprotect' => 'Endre beskyttelsen av denne siden',
-'tooltip-ca-delete' => 'Slett denne siden',
-'tooltip-ca-undelete' => 'Gjenopprett redigerenge som ble gjort på denne siden før den ble slettet.',
-'tooltip-ca-move' => 'Flytt denne siden',
-'tooltip-ca-watch' => 'Legg denne siden til overvåkningslisten din',
-'tooltip-ca-unwatch' => 'Fjern denne siden fra din overvåkningsliste',
-'tooltip-search' => 'Søk i {{SITENAME}}',
-'tooltip-search-go' => 'Gå til en side med dette navnet om den finnes',
-'tooltip-search-fulltext' => 'Søk etter sider som innholder denne teksten',
-'tooltip-p-logo' => 'Hovedside',
-'tooltip-n-mainpage' => 'Gå til hovedsiden',
-'tooltip-n-mainpage-description' => 'Gå til hovedsiden',
-'tooltip-n-portal' => 'Om prosjektet, hva du kan gjøre, hvor du kan finne ting',
-'tooltip-n-currentevents' => 'Finn bakgrunnsinformasjon om aktuelle hendelser',
-'tooltip-n-recentchanges' => 'Liste over siste endringer på wikien.',
-'tooltip-n-randompage' => 'Vis en tilfeldig side',
-'tooltip-n-help' => 'Stedet for å få hjelp',
-'tooltip-t-whatlinkshere' => 'Liste over alle wikisider som lenker hit',
-'tooltip-t-recentchangeslinked' => 'Siste endringer i sider som blir lenket fra denne siden',
-'tooltip-feed-rss' => 'RSS-mating for denne siden',
-'tooltip-feed-atom' => 'Atom-mating for denne siden',
-'tooltip-t-contributions' => 'Vis liste over bidrag fra denne brukeren',
-'tooltip-t-emailuser' => 'Send en e-post til denne brukeren',
-'tooltip-t-upload' => 'Last opp filer',
-'tooltip-t-specialpages' => 'Liste over alle spesialsider',
-'tooltip-t-print' => 'Utskriftsvennlig versjon av denne siden',
-'tooltip-t-permalink' => 'Permanent lenke til denne revisjonen av siden',
-'tooltip-ca-nstab-main' => 'Vis innholdssiden',
-'tooltip-ca-nstab-user' => 'Vis brukersiden',
-'tooltip-ca-nstab-media' => 'Vis mediasiden',
-'tooltip-ca-nstab-special' => 'Dette er en spesialside og kan ikke redigeres',
-'tooltip-ca-nstab-project' => 'Vis prosjektsiden',
-'tooltip-ca-nstab-image' => 'Vis filsiden',
-'tooltip-ca-nstab-mediawiki' => 'Vis systembeskjeden',
-'tooltip-ca-nstab-template' => 'Vis malen',
-'tooltip-ca-nstab-help' => 'Vis hjelpesiden',
-'tooltip-ca-nstab-category' => 'Vis kategorisiden',
-'tooltip-minoredit' => 'Merk dette som en mindre endring',
-'tooltip-save' => 'Lagre endringene dine',
-'tooltip-preview' => 'Forhåndsvis endringene dine, vennligst gjør dette før du lagrer!',
-'tooltip-diff' => 'Vis hvilke endringer du har gjort på teksten',
-'tooltip-compareselectedversions' => 'Se forskjellen mellom de to valgte revisjonene av denne siden',
-'tooltip-watch' => 'Legg denne siden til overvåkningslisten din',
-'tooltip-recreate' => 'Gjenopprett siden til tross for at den har blitt slettet',
-'tooltip-upload' => 'Start opplasting',
-'tooltip-rollback' => '«Tilbakestill»-knappen tilbakestiller den siste bidragsyterens endring(er) på denne siden med ett klikk',
-'tooltip-undo' => '«Angre» tilbakestiller denne endringen og åpner redigeringsskjemaet i forhåndsvisningsmodus. Det tillater en å legge til en begrunnelse i redigeringsforklaringen.',
-'tooltip-preferences-save' => 'Lagre innstillinger',
-'tooltip-summary' => 'Skriv et kort sammendrag',
-
-# Stylesheets
-'common.css' => '/* CSS plassert i denne fila vil gjelde for alle utseender. */',
-'standard.css' => '/* CSS i denne fila vil gjelde alle som bruker drakta Standard */',
-'nostalgia.css' => '/* CSS i denne fila vil gjelde alle som bruker drakta Nostalgia */',
-'cologneblue.css' => '/* CSS i denne fila vil gjelde alle som bruker drakta Kølnerblå */',
-'monobook.css' => '/* CSS i denne fila vil gjelde alle som bruker drakta Monobook */',
-'myskin.css' => '/* CSS i denne fila vil gjelde alle som bruker drakta MySkin */',
-'chick.css' => '/* CSS i denne fila vil gjelde alle som bruker drakta Chick */',
-'simple.css' => '/* CSS i denne fila vil gjelde alle som bruker drakta Simple */',
-'modern.css' => '/* CSS i denne fila vil gjelde alle som bruker drakta Modern */',
-
-# Scripts
-'common.js' => '/* Javascript i denne fila vil gjelde for alle drakter. */',
-'standard.js' => '/* Javascript i denne fila vil gjelde for brukere av drakta Standard */',
-'nostalgia.js' => '/* Javascript i denne fila vil gjelde for brukere av drakta Nostalgia */',
-'cologneblue.js' => '/* Javascript i denne fila vil gjelde for brukere av drakta Kølnerblå */',
-'monobook.js' => '/* Javascript i denne fila vil gjelde for brukere av drakta Monobook */',
-'myskin.js' => '/* Javascript i denne fila vil gjelde for brukere av drakta MySkin */',
-'chick.js' => '/* Javascript i denne fila vil gjelde for brukere av drakta Chick */',
-'simple.js' => '/* Javascript i denne fila vil gjelde for brukere av drakta Simple */',
-'modern.js' => '/* Javascript i denne fila vil gjelde for brukere av drakta Modern */',
-
-# Metadata
-'notacceptable' => 'Tjeneren har ingen mulige måter å vise data i din nettleser.',
-
-# Attribution
-'anonymous' => '{{PLURAL:$1|Anonym bruker|Anonyme brukere}} av {{SITENAME}}',
-'siteuser' => '{{SITENAME}}-bruker $1',
-'anonuser' => '{{SITENAME}}s anonyme bruker $1',
-'lastmodifiedatby' => 'Denne siden ble sist redigert $1 kl. $2 av $3.',
-'othercontribs' => 'Basert på arbeid av $1.',
-'others' => 'andre',
-'siteusers' => '{{SITENAME}}-{{PLURAL:$2|bruker|brukere}} $1',
-'anonusers' => '{{SITENAME}}s {{PLURAL:$2|anonyme bruker|anonyme brukere}} $1',
-'creditspage' => 'Sidekrediteringer',
-'nocredits' => 'Ingen krediteringer er tilgjengelig for denne siden.',
-
-# Spam protection
-'spamprotectiontitle' => 'Søppelpostfilter',
-'spamprotectiontext' => 'Siden du ønsket å lagre ble blokkert av spamfilteret.
-Dette er sannsynligvis forårsaket av en lenke til et svartelistet eksternt nettsted.',
-'spamprotectionmatch' => 'Følgende tekst er det som aktiverte spamfilteret: $1',
-'spambot_username' => 'MediaWikis spamopprydning',
-'spam_reverting' => 'Tilbakestiller til siste versjon uten lenke til $1',
-'spam_blanking' => 'Alle revisjoner inneholdt lenke til $1, tømmer siden',
-
-# Info page
-'pageinfo-title' => 'Informasjon om «$1»',
-'pageinfo-header-edits' => 'Redigeringer',
-'pageinfo-header-watchlist' => 'Overvåkningsliste',
-'pageinfo-header-views' => 'Visninger',
-'pageinfo-subjectpage' => 'Side',
-'pageinfo-talkpage' => 'Diskusjonsside',
-'pageinfo-watchers' => 'Antall overvåkere',
-'pageinfo-edits' => 'Antall redigeringer',
-'pageinfo-authors' => 'Antall forskjellige forfattere',
-'pageinfo-views' => 'Antall visninger',
-'pageinfo-viewsperedit' => 'Visninger per redigering',
-
-# Skin names
-'skinname-standard' => 'Standard',
-'skinname-nostalgia' => 'Nostalgi',
-'skinname-cologneblue' => 'Kølnerblå',
-'skinname-monobook' => 'Monobook',
-'skinname-myskin' => 'Eget utseende',
-'skinname-simple' => 'Enkel',
-'skinname-modern' => 'Moderne',
-
-# Patrolling
-'markaspatrolleddiff' => 'Godkjenn endringen',
-'markaspatrolledtext' => 'Godkjenn denne siden',
-'markedaspatrolled' => 'Merket som godkjent',
-'markedaspatrolledtext' => 'Den valgte revisjonen av [[:$1]] har blitt markert som patruljert.',
-'rcpatroldisabled' => 'Siste endringer-patruljering er slått av',
-'rcpatroldisabledtext' => 'Siste endringer-patruljeringsfunksjonen er slått av.',
-'markedaspatrollederror' => 'Kan ikke merke som godkjent',
-'markedaspatrollederrortext' => 'Du må spesifisere en versjon å merke som godkjent.',
-'markedaspatrollederror-noautopatrol' => 'Du kan ikke merke dine egne endringer som godkjente.',
-
-# Patrol log
-'patrol-log-page' => 'Godkjenningslogg',
-'patrol-log-header' => 'Dette er en logg over patruljerte sideversjoner.',
-'log-show-hide-patrol' => '$1 patruljeringslogg',
-
-# Image deletion
-'deletedrevision' => 'Slettet gammel revisjon $1.',
-'filedeleteerror-short' => 'Feil under filsletting: $1',
-'filedeleteerror-long' => 'Feil oppsto under filsletting:
-
-$1',
-'filedelete-missing' => 'Filen «$1» kan ikke slettes fordi den ikke finnes.',
-'filedelete-old-unregistered' => 'Filrevisjonen «$1» finnes ikke i databasen.',
-'filedelete-current-unregistered' => 'Filen «$1» finnes ikke i databasen.',
-'filedelete-archive-read-only' => 'Arkivmappa «$1» kan ikke skrives av tjeneren.',
-
-# Browsing diffs
-'previousdiff' => '← Forrige endring',
-'nextdiff' => 'Neste endring →',
-
-# Media information
-'mediawarning' => "'''Advarsel''': Denne filen kan inneholde farlig kode.
-Ved å åpne den kan systemet ditt kompromitteres.",
-'imagemaxsize' => "Bildestørrelsesgrense:<br />''(for filbeskrivelsessider)''",
-'thumbsize' => 'Miniatyrbildestørrelse:',
-'widthheightpage' => '$1×$2, {{PLURAL:$3|én side|$3 sider}}',
-'file-info' => 'filstørrelse: $1, MIME-type: $2',
-'file-info-size' => '$1 × $2 piksler, filstørrelse: $3, MIME-type: $4',
-'file-info-size-pages' => '$1 × $2 piksler, filstørrelse: $3, MIME-type: $4, $5 {{PLURAL:$5|side|sider}}',
-'svg-long-desc' => 'SVG-fil, standardoppløsning $1 × $2 piksler, filstørrelse: $3',
-'show-big-image' => 'Full oppløsning',
-'show-big-image-size' => '$1 × $2 piksler',
-'file-info-gif-looped' => 'gjentas',
-'file-info-gif-frames' => '$1 {{PLURAL:$1|ramme|rammer}}',
-'file-info-png-looped' => 'loopet',
-'file-info-png-repeat' => 'avspilt $1 {{PLURAL:$1|gang|ganger}}',
-'file-info-png-frames' => '$1 {{PLURAL:$1|bilde|bilder}}',
-
-# Special:NewFiles
-'newimages' => 'Galleri over nye filer',
-'imagelisttext' => "Dete er en liste med '''$1''' {{PLURAL:$1|fil|filer}} sortert $2.",
-'newimages-summary' => 'Denne spesialsiden viser de sist opplastede filene.',
-'newimages-legend' => 'Filnavn',
-'newimages-label' => 'Filnavn (helt eller delvis):',
-'showhidebots' => '($1 roboter)',
-'noimages' => 'Ingenting å se.',
-'ilsubmit' => 'Søk',
-'bydate' => 'etter dato',
-'sp-newimages-showfrom' => 'Vis nye filer fra og med $2 $1',
-
-# Bad image list
-'bad_image_list' => 'Formatet er som følger:
-
-Kun listeelementer (linjer som starter med *) tas med.
-Den første lenken på en linje må være en lenke til en dårlig fil.
-Alle andre lenker på samme linje anses for å være unntak, altså sider der filen kan opptre.',
-
-# Metadata
-'metadata' => 'Metadata',
-'metadata-help' => 'Denne filen inneholder tilleggsinformasjon, antagligvis lagt til av digitalkameraet eller skanneren brukt til å lage eller digitalisere det.
-Hvis filen har blitt forandret fra utgangspunktet, kan enkelte detaljer være unøyaktige.',
-'metadata-expand' => 'Vis utvidede detaljer',
-'metadata-collapse' => 'Skjul utvidede detaljer',
-'metadata-fields' => 'Bildemetadatafelt listet i denne meldingen inkluderes på bildesiden når metadatatabellen er slått sammen.
-Andre vil skjules som standard.
-* make
-* model
-* datetimeoriginal
-* exposuretime
-* fnumber
-* isospeedratings
-* focallength
-* artist
-* copyright
-* imagedescription
-* gpslatitude
-* gpslongitude
-* gpsaltitude',
-
-# EXIF tags
-'exif-imagewidth' => 'Bredde',
-'exif-imagelength' => 'Høyde',
-'exif-bitspersample' => 'Bits per komponent',
-'exif-compression' => 'Kompresjonsskjema',
-'exif-photometricinterpretation' => 'Pixelsammensetning',
-'exif-orientation' => 'Retning',
-'exif-samplesperpixel' => 'Antall komponenter',
-'exif-planarconfiguration' => 'Dataarrangement',
-'exif-ycbcrsubsampling' => 'Subsamplingsforhold mellom Y og C',
-'exif-ycbcrpositioning' => 'Y- og C-posisjonering',
-'exif-xresolution' => 'Horisontal oppløsning',
-'exif-yresolution' => 'Vertikal oppløsning',
-'exif-stripoffsets' => 'Plassering for bildedata',
-'exif-rowsperstrip' => 'Antall rader per stripe',
-'exif-stripbytecounts' => 'Antall byte per kompresserte stripe',
-'exif-jpeginterchangeformat' => 'Offset til JPEG SOI',
-'exif-jpeginterchangeformatlength' => 'Byte med JPEG-data',
-'exif-whitepoint' => 'Hvitpunktkromatisitet',
-'exif-primarychromaticities' => 'Primærfargenes renhet',
-'exif-ycbcrcoefficients' => 'Koeffisienter fr fargeromstransformasjonsmatrise',
-'exif-referenceblackwhite' => 'Par av svarte og hvite referanseverdier',
-'exif-datetime' => 'Dato og tid for filendring',
-'exif-imagedescription' => 'Bildetittel',
-'exif-make' => 'Kameraprodusent',
-'exif-model' => 'Kameramodell',
-'exif-software' => 'Programvare brukt',
-'exif-artist' => 'Skaper',
-'exif-copyright' => 'Opphavsbeskyttelse tilhører',
-'exif-exifversion' => 'Exif-versjon',
-'exif-flashpixversion' => 'Støttet Flashpix-versjon',
-'exif-colorspace' => 'Fargerom',
-'exif-componentsconfiguration' => 'Betydning av hver komponent',
-'exif-compressedbitsperpixel' => 'Bildekompresjonsmodus',
-'exif-pixelydimension' => 'Bildebredde',
-'exif-pixelxdimension' => 'Bildehøyde',
-'exif-usercomment' => 'Brukerkommentarer',
-'exif-relatedsoundfile' => 'Relatert lydfil',
-'exif-datetimeoriginal' => 'Dato og tid for datagenerering',
-'exif-datetimedigitized' => 'Dato og tid for digitalisering',
-'exif-subsectime' => 'Endringstidspunkt, sekunddeler',
-'exif-subsectimeoriginal' => 'Eksponeringstidspunkt, sekunddeler',
-'exif-subsectimedigitized' => 'Digitaliseringstidspunkt, sekunddeler',
-'exif-exposuretime' => 'Eksponeringstid',
-'exif-exposuretime-format' => '$1 sek ($2)',
-'exif-fnumber' => 'F-nummer',
-'exif-exposureprogram' => 'Eksponeringsprogram',
-'exif-spectralsensitivity' => 'Spektralsensitivitet',
-'exif-isospeedratings' => 'Filmhastighet (ISO)',
-'exif-shutterspeedvalue' => 'APEX lukkerhastighet',
-'exif-aperturevalue' => 'APEX blenderåpning',
-'exif-brightnessvalue' => 'APEX lysstyrke',
-'exif-exposurebiasvalue' => 'Eksponeringsbias',
-'exif-maxaperturevalue' => 'Maksimal blender',
-'exif-subjectdistance' => 'Avstand til subjekt',
-'exif-meteringmode' => 'Målingsmodus',
-'exif-lightsource' => 'Lyskilde',
-'exif-flash' => 'Blits',
-'exif-focallength' => 'Linsens brennvidde',
-'exif-subjectarea' => 'Motivområde',
-'exif-flashenergy' => 'Blitsenergi',
-'exif-focalplanexresolution' => 'Oppløsning i fokalplan X',
-'exif-focalplaneyresolution' => 'Oppløsning i fokalplan Y',
-'exif-focalplaneresolutionunit' => 'Enhet for oppløsning i fokalplan',
-'exif-subjectlocation' => 'Motivets beliggenhet',
-'exif-exposureindex' => 'Eksponeringsindeks',
-'exif-sensingmethod' => 'Avkjenningsmetode',
-'exif-filesource' => 'Filkilde',
-'exif-scenetype' => 'Scenetype',
-'exif-customrendered' => 'Tilpasset bildebehandling',
-'exif-exposuremode' => 'Eksponeringsmodus',
-'exif-whitebalance' => 'Hvit balanse',
-'exif-digitalzoomratio' => 'Digitalt zoomomfang',
-'exif-focallengthin35mmfilm' => 'Brennvidde på 35 mm-film',
-'exif-scenecapturetype' => 'Motivprogram',
-'exif-gaincontrol' => 'Scenekontroll',
-'exif-contrast' => 'Kontrast',
-'exif-saturation' => 'Metning',
-'exif-sharpness' => 'Skarphet',
-'exif-devicesettingdescription' => 'Beskrivelse av apparatets innstilling',
-'exif-subjectdistancerange' => 'Avstandsintervall til motiv',
-'exif-imageuniqueid' => 'Unik bilde-ID',
-'exif-gpsversionid' => 'Versjon for GPS-tagger',
-'exif-gpslatituderef' => 'nordlig eller sørlig breddegrad',
-'exif-gpslatitude' => 'Breddegrad',
-'exif-gpslongituderef' => 'Østlig eller vestlig breddegrad',
-'exif-gpslongitude' => 'Lengdegrad',
-'exif-gpsaltituderef' => 'Høydereferanse',
-'exif-gpsaltitude' => 'Høyde',
-'exif-gpstimestamp' => 'GPS-tid (atomklokke)',
-'exif-gpssatellites' => 'Satelitter brukt i måling',
-'exif-gpsstatus' => 'Mottakerstatus',
-'exif-gpsmeasuremode' => 'Målingsmodus',
-'exif-gpsdop' => 'Målingspresisjon',
-'exif-gpsspeedref' => 'Fartsenhet',
-'exif-gpsspeed' => 'GPS-mottakerens hastighet',
-'exif-gpstrackref' => 'Referanse for bevegelsesretning',
-'exif-gpstrack' => 'Bevegelsesretning',
-'exif-gpsimgdirectionref' => 'Referanse for bilderetning',
-'exif-gpsimgdirection' => 'Bilderetning',
-'exif-gpsmapdatum' => 'Brukt geodetisk data',
-'exif-gpsdestlatituderef' => 'Referanse for målbreddegrad',
-'exif-gpsdestlatitude' => 'Målbreddegrad',
-'exif-gpsdestlongituderef' => 'Referanse for mållengdegrad',
-'exif-gpsdestlongitude' => 'Mållengdegrad',
-'exif-gpsdestbearingref' => 'Referanse for retning mot målet',
-'exif-gpsdestbearing' => 'Retning mot målet',
-'exif-gpsdestdistanceref' => 'Referanse for lengde til mål',
-'exif-gpsdestdistance' => 'Lengde til mål',
-'exif-gpsprocessingmethod' => 'Navn på GPS-prosesseringsmetode',
-'exif-gpsareainformation' => 'Navn på GPS-område',
-'exif-gpsdatestamp' => 'GPS-dato',
-'exif-gpsdifferential' => 'Differentiell GPS-korreksjon',
-'exif-jpegfilecomment' => 'JPEG-filkommentar',
-'exif-keywords' => 'Nøkkelord',
-'exif-worldregioncreated' => 'Verdensregionen som bildet ble tatt i',
-'exif-countrycreated' => 'Landet som bildet ble tatt i',
-'exif-countrycodecreated' => 'Landskoden som bildet ble tatt i',
-'exif-provinceorstatecreated' => 'Provinsen eller delstaten som bildet ble tatt i',
-'exif-citycreated' => 'Byen som bildet ble tatt i',
-'exif-sublocationcreated' => 'Bydelen som bildet ble tatt i',
-'exif-worldregiondest' => 'Verdensregionen vises',
-'exif-countrydest' => 'Landet vises',
-'exif-countrycodedest' => 'Landskoden vises',
-'exif-provinceorstatedest' => 'Provinsen eller delstaten vises',
-'exif-citydest' => 'Byen vises',
-'exif-sublocationdest' => 'Bydelen vises',
-'exif-objectname' => 'Kort tittel',
-'exif-specialinstructions' => 'Spesielle instruksjoner',
-'exif-headline' => 'Overskrift',
-'exif-credit' => 'Kreditt/Leverandør',
-'exif-source' => 'Kilde',
-'exif-editstatus' => 'Bildets redaksjonelle status',
-'exif-urgency' => 'Prioritet',
-'exif-fixtureidentifier' => 'Fiksturnavn',
-'exif-locationdest' => 'Avbildet plass',
-'exif-locationdestcode' => 'Avbildet plasseringskode',
-'exif-objectcycle' => 'Tid på dagen mediet er ment for',
-'exif-contact' => 'Kontaktinformasjon',
-'exif-writer' => 'Forfatter',
-'exif-languagecode' => 'Språk',
-'exif-iimversion' => 'IIM-versjon',
-'exif-iimcategory' => 'Kategori',
-'exif-iimsupplementalcategory' => 'Tilleggskategorier',
-'exif-datetimeexpires' => 'Ikke bruk etter',
-'exif-datetimereleased' => 'Utgitt den',
-'exif-originaltransmissionref' => 'Opprinnelig lokasjonskode for transmisjon',
-'exif-identifier' => 'Identifikator',
-'exif-lens' => 'Objektiv',
-'exif-serialnumber' => 'Kameraets serienummer',
-'exif-cameraownername' => 'Kameraets eier',
-'exif-label' => 'Etikett',
-'exif-datetimemetadata' => 'Dato metadata sist ble endret',
-'exif-nickname' => 'Bildets uformelle navn',
-'exif-rating' => 'Vurdering (av 5)',
-'exif-rightscertificate' => 'Rettighetsforvaltningssertifikat',
-'exif-copyrighted' => 'Opphavsrettsstatus',
-'exif-copyrightowner' => 'Opphavsrettsinnehaver',
-'exif-usageterms' => 'Bruksvilkår',
-'exif-webstatement' => 'Opphavsrettserklæring på internett',
-'exif-originaldocumentid' => 'Unik ID for originaldokumentet',
-'exif-licenseurl' => 'URL for opphavsrettslisens',
-'exif-morepermissionsurl' => 'Alternativ lisensieringsinformasjon',
-'exif-attributionurl' => 'Ved gjenbruk av dette arbeidet, vennligst inkluder en lenke til',
-'exif-preferredattributionname' => 'Ved gjenbruk av dette arbeidet, vennligst gi kreditt til',
-'exif-pngfilecomment' => 'PNG-filkommentar',
-'exif-disclaimer' => 'Ansvarsfraskrivelse',
-'exif-contentwarning' => 'Innholdsadvarsel',
-'exif-giffilecomment' => 'GIF-filkommentar',
-'exif-intellectualgenre' => 'Elementtype',
-'exif-subjectnewscode' => 'Emnekode',
-'exif-scenecode' => 'IPTC-scenekode',
-'exif-event' => 'Avbildet hendelse',
-'exif-organisationinimage' => 'Avbildet organisasjon',
-'exif-personinimage' => 'Avbildet person',
-'exif-originalimageheight' => 'Høyde på bildet før det ble beskåret',
-'exif-originalimagewidth' => 'Bredde på bildet før det ble beskåret',
-
-# EXIF attributes
-'exif-compression-1' => 'Ukomprimert',
-'exif-compression-2' => 'CCITT Gruppe 3 1-dimensjonal modifisert Huffman-kjørelengdekoding',
-'exif-compression-3' => 'CCITT Gruppe 3 faks-koding',
-'exif-compression-4' => 'CCITT Gruppe 4 faks-koding',
-
-'exif-copyrighted-true' => 'Opphavsrettsbeskyttet',
-'exif-copyrighted-false' => 'Ikke beskyttet av opphavsrett',
-
-'exif-unknowndate' => 'Ukjent dato',
-
-'exif-orientation-1' => 'Normal',
-'exif-orientation-2' => 'Snudd horisontalt',
-'exif-orientation-3' => 'Rotert 180°',
-'exif-orientation-4' => 'Snudd vertikalt',
-'exif-orientation-5' => 'Rotated 90° CCW and flipped vertically
-
-Rotert 90° mot klokka og vridd vertikalt',
-'exif-orientation-6' => 'Rotert 90° mot klokka',
-'exif-orientation-7' => 'Rotert 90° med klokka og vridd vertikalt',
-'exif-orientation-8' => 'Rotert 90° med klokka',
-
-'exif-planarconfiguration-1' => 'chunkformat',
-'exif-planarconfiguration-2' => 'planærformat',
-
-'exif-colorspace-65535' => 'Ukalibrert',
-
-'exif-componentsconfiguration-0' => 'finnes ikke',
-
-'exif-exposureprogram-0' => 'Ikke angitt',
-'exif-exposureprogram-1' => 'Manuell',
-'exif-exposureprogram-2' => 'Normalt program',
-'exif-exposureprogram-3' => 'Blenderprioritet',
-'exif-exposureprogram-4' => 'Slutterprioritet',
-'exif-exposureprogram-5' => 'Kunstnerlig program (prioriterer skarphetsdyp)',
-'exif-exposureprogram-6' => 'Bevegelsesprogram (prioriterer kortere sluttertid)',
-'exif-exposureprogram-7' => 'Portrettmodus (for nærbilder med ufokusert bakgrunn)',
-'exif-exposureprogram-8' => 'Landskapsmodus (for landskapsbilder med fokusert bakgrunn)',
-
-'exif-subjectdistance-value' => '$1 meter',
-
-'exif-meteringmode-0' => 'Ukjent',
-'exif-meteringmode-1' => 'Gjennomsnitt',
-'exif-meteringmode-2' => 'Sentrumsveid gjennomsnitt',
-'exif-meteringmode-3' => 'Spot',
-'exif-meteringmode-4' => 'Multispot',
-'exif-meteringmode-5' => 'Mønster',
-'exif-meteringmode-6' => 'Delvis',
-'exif-meteringmode-255' => 'Annet',
-
-'exif-lightsource-0' => 'Ukjent',
-'exif-lightsource-1' => 'Dagslys',
-'exif-lightsource-2' => 'Lysrør',
-'exif-lightsource-3' => 'Glødelampe',
-'exif-lightsource-4' => 'Blits',
-'exif-lightsource-9' => 'Fint vær',
-'exif-lightsource-10' => 'Overskyet',
-'exif-lightsource-11' => 'Skygge',
-'exif-lightsource-12' => 'Dagslyslysrør (D 5700 – 7100K)',
-'exif-lightsource-13' => 'Dagshvitt lysrør (N 4600 – 5400K)',
-'exif-lightsource-14' => 'Kaldhvitt lysrør (W 3900 – 4500K)',
-'exif-lightsource-15' => 'Hvitt lysrør (WW 3200 – 3700K)',
-'exif-lightsource-17' => 'Standardlys A',
-'exif-lightsource-18' => 'Standardlys B',
-'exif-lightsource-19' => 'Standardlys C',
-'exif-lightsource-24' => 'ISO studiobelysning',
-'exif-lightsource-255' => 'Annen lyskilde',
-
-# Flash modes
-'exif-flash-fired-0' => 'Blitz ikke utløst',
-'exif-flash-fired-1' => 'Blitz utløst',
-'exif-flash-return-0' => 'ingen funksjon for oppdaing av strobelys',
-'exif-flash-return-2' => 'strobelys ikke oppdaget',
-'exif-flash-return-3' => 'strobelys oppdaget',
-'exif-flash-mode-1' => 'tvunget blitzutløsning',
-'exif-flash-mode-2' => 'tvunget blitzløs',
-'exif-flash-mode-3' => 'automatisk modus',
-'exif-flash-function-1' => 'Ingen blitzfunksjon',
-'exif-flash-redeye-1' => 'røde-øyne-redusering',
-
-'exif-focalplaneresolutionunit-2' => 'tommer',
-
-'exif-sensingmethod-1' => 'Ikke angitt',
-'exif-sensingmethod-2' => 'Énchipsfargesensor',
-'exif-sensingmethod-3' => 'Tochipsfargesensor',
-'exif-sensingmethod-4' => 'Trechipsfargesensor',
-'exif-sensingmethod-5' => 'Fargesekvensiell områdesensor',
-'exif-sensingmethod-7' => 'Trilineær sensor',
-'exif-sensingmethod-8' => 'Fargesekvensiell linær sensor',
-
-'exif-filesource-3' => 'Digitalt stillbildekamera',
-
-'exif-scenetype-1' => 'Direktefotografert bilde',
-
-'exif-customrendered-0' => 'Normal prosess',
-'exif-customrendered-1' => 'Tilpasset prosess',
-
-'exif-exposuremode-0' => 'Automatisk eksponering',
-'exif-exposuremode-1' => 'Manuell eksponering',
-'exif-exposuremode-2' => 'Automatisk alternativeksponering',
-
-'exif-whitebalance-0' => 'Automatisk hvitbalanse',
-'exif-whitebalance-1' => 'Manuell hvitbalanse',
-
-'exif-scenecapturetype-0' => 'Standard',
-'exif-scenecapturetype-1' => 'Landskap',
-'exif-scenecapturetype-2' => 'Portrett',
-'exif-scenecapturetype-3' => 'Nattscene',
-
-'exif-gaincontrol-0' => 'Ingen',
-'exif-gaincontrol-1' => 'Økning av lavnivåforsterkning',
-'exif-gaincontrol-2' => 'Økning av høynivåforsterkning',
-'exif-gaincontrol-3' => 'Senkning av lavnivåforsterkning',
-'exif-gaincontrol-4' => 'Senkning av høynivåforsterkning',
-
-'exif-contrast-0' => 'Normal',
-'exif-contrast-1' => 'Myk',
-'exif-contrast-2' => 'Hard',
-
-'exif-saturation-0' => 'Normal',
-'exif-saturation-1' => 'Lav metningsgrad',
-'exif-saturation-2' => 'Høy metningsgrad',
-
-'exif-sharpness-0' => 'Normal',
-'exif-sharpness-1' => 'Myk',
-'exif-sharpness-2' => 'Hard',
-
-'exif-subjectdistancerange-0' => 'Ukjent',
-'exif-subjectdistancerange-1' => 'Makro',
-'exif-subjectdistancerange-2' => 'Nærbilde',
-'exif-subjectdistancerange-3' => 'Fjernbilde',
-
-# Pseudotags used for GPSLatitudeRef and GPSDestLatitudeRef
-'exif-gpslatitude-n' => 'Nordlig breddegrad',
-'exif-gpslatitude-s' => 'Sørlig breddegrad',
-
-# Pseudotags used for GPSLongitudeRef and GPSDestLongitudeRef
-'exif-gpslongitude-e' => 'Østlig lengdegrad',
-'exif-gpslongitude-w' => 'Vestlig lengdegrad',
-
-# Pseudotags used for GPSAltitudeRef
-'exif-gpsaltitude-above-sealevel' => '{{PLURAL:$1|Én|$1}} meter over havet',
-'exif-gpsaltitude-below-sealevel' => '{{PLURAL:$1|Én|$1}} meter under havet',
-
-'exif-gpsstatus-a' => 'Måling pågår',
-'exif-gpsstatus-v' => 'Målingsinteroperabilitet',
-
-'exif-gpsmeasuremode-2' => 'todimensjonell måling',
-'exif-gpsmeasuremode-3' => 'tredimensjonell måling',
-
-# Pseudotags used for GPSSpeedRef
-'exif-gpsspeed-k' => 'Kilometer per time',
-'exif-gpsspeed-m' => 'Miles per time',
-'exif-gpsspeed-n' => 'Knop',
-
-# Pseudotags used for GPSDestDistanceRef
-'exif-gpsdestdistance-k' => 'Kilometer',
-'exif-gpsdestdistance-m' => 'Miles',
-'exif-gpsdestdistance-n' => 'Nautiske mil',
-
-'exif-gpsdop-excellent' => 'Utmerket ($1)',
-'exif-gpsdop-good' => 'God ($1)',
-'exif-gpsdop-moderate' => 'Moderat ($1)',
-'exif-gpsdop-fair' => 'Middelmådig ($1)',
-'exif-gpsdop-poor' => 'Dårlig ($1)',
-
-'exif-objectcycle-a' => 'Kun morgen',
-'exif-objectcycle-p' => 'Kun kveld',
-'exif-objectcycle-b' => 'Både morgen og kveld',
-
-# Pseudotags used for GPSTrackRef, GPSImgDirectionRef and GPSDestBearingRef
-'exif-gpsdirection-t' => 'Sann retning',
-'exif-gpsdirection-m' => 'Magnetisk retning',
-
-'exif-ycbcrpositioning-1' => 'Sentrert',
-'exif-ycbcrpositioning-2' => 'Co-lokalisert',
-
-'exif-dc-contributor' => 'Bidragsytere',
-'exif-dc-coverage' => 'Romlig eller timelig omfang av mediet',
-'exif-dc-date' => 'Dato(er)',
-'exif-dc-publisher' => 'Utgiver',
-'exif-dc-relation' => 'Relaterte media',
-'exif-dc-rights' => 'Rettigheter',
-'exif-dc-source' => 'Mediakilde',
-'exif-dc-type' => 'Mediatype',
-
-'exif-rating-rejected' => 'Avvist',
-
-'exif-isospeedratings-overflow' => 'Større enn 65535',
-
-'exif-iimcategory-ace' => 'Kunst, kultur og underholdning',
-'exif-iimcategory-clj' => 'Kriminalitet og jura',
-'exif-iimcategory-dis' => 'Katastrofer og ulykker',
-'exif-iimcategory-fin' => 'Økonomi og næringsliv',
-'exif-iimcategory-edu' => 'Utdanning',
-'exif-iimcategory-evn' => 'Miljø',
-'exif-iimcategory-hth' => 'Helse',
-'exif-iimcategory-hum' => 'Menneskelig interesse',
-'exif-iimcategory-lab' => 'Arbeidskraft',
-'exif-iimcategory-lif' => 'Livsstil og fritid',
-'exif-iimcategory-pol' => 'Politikk',
-'exif-iimcategory-rel' => 'Religion og livssyn',
-'exif-iimcategory-sci' => 'Vitenskap og teknologi',
-'exif-iimcategory-soi' => 'Sosiale problemer',
-'exif-iimcategory-spo' => 'Sport',
-'exif-iimcategory-war' => 'Krig, konflikt og uro',
-'exif-iimcategory-wea' => 'Vær',
-
-'exif-urgency-normal' => 'Normal ($1)',
-'exif-urgency-low' => 'Lav ($1)',
-'exif-urgency-high' => 'Høy ($1)',
-'exif-urgency-other' => 'Brukerdefinert prioritet ($1)',
-
-# 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)',
-
-# 'all' in various places, this might be different for inflected languages
-'watchlistall2' => 'alle',
-'namespacesall' => 'alle',
-'monthsall' => 'alle',
-'limitall' => 'alle',
-
-# E-mail address confirmation
-'confirmemail' => 'Bekreft e-postadresse',
-'confirmemail_noemail' => 'Du har ikke oppgitt en gyldig e-postadresse i [[Special:Preferences|innstillingene dine]].',
-'confirmemail_text' => 'Du må bekrefte e-postadressen din før du kan benytte deg av e-posttjenester på {{SITENAME}}. Trykk på knappen under for å sende en bekreftelsesmelding til e-postadressen din. Meldingen vil inneholde en lenke med en kode; følg lenken for å bekrefte at e-postadressen er gyldig.',
-'confirmemail_pending' => 'En bekreftelseskode har allerede blitt sendt til deg på e-post; om du nylig opprettet kontoen din, kan du ønske å vente noen minutter før du spør om ny kode.',
-'confirmemail_send' => 'Send en bekreftelseskode.',
-'confirmemail_sent' => 'Bekreftelsesmelding sendt.',
-'confirmemail_oncreate' => 'En bekreftelseskode ble sendt til din e-postadresse. Denne koden er ikke nødvendig for å logge inn, men er nødvendig for å slå på e-postbaserte tjenester i denne wikien.',
-'confirmemail_sendfailed' => '{{SITENAME}} klarte ikke å sende bekreftelseskode.
-Sjekk e-postadressen for ugyldige tegn.
-
-E-postsenderen ga følgende melding: $1',
-'confirmemail_invalid' => 'Ugyldig bekreftelseskode. Koden kan ha utløpt.',
-'confirmemail_needlogin' => 'Du må $1 for å bekrefte e-postadressen din.',
-'confirmemail_success' => 'Din e-postadresse er nå bekreftet. Du kan nå logge inn og nyte wikien.',
-'confirmemail_loggedin' => 'E-postadressen din er bekreftet.',
-'confirmemail_error' => 'Noe gikk galt under lagringen av din bekreftelse.',
-'confirmemail_subject' => 'Bekreftelsesmelding fra {{SITENAME}}',
-'confirmemail_body' => 'Noen, antageligvis deg, har registrert kontoen «$2» på {{SITENAME}}, fra IP-adressen $1.
-
-For å bekrefte at denne kontoen tilhører deg og for å aktivere e-posttjenester på {{SITENAME}}, åpne følgende lenke i nettleseren din:
-
-$3
-
-Om du *ikke* registrerte kontoen, følg denne lenken for å avbryte bekreftelse av e-postadresse:
-
-$5
-
-Denne bekreftelseskoden utgår $4.',
-'confirmemail_body_changed' => 'Noen, antageligvis deg, fra IP-adresse $1,
-har endret e-postadressen til kontoen «$2» til denne adressen på {{SITENAME}}.
-
-For å bekrefte at denne kontoen virkelig er din og for å reaktivere e-postegenskaper på {{SITENAME}}, åpne denne lenken i nettleseren din:
-
-$3
-
-Dersom denne kontoen *ikke* tilhører deg, følg denne lenken
-for å avbryte e-postbekreftelsen:
-
-$5
-
-Denne bekreftelseskoden vil løpe ut $4.',
-'confirmemail_body_set' => 'Noen, trolig deg, har satt e-postadressen for kontoen «$2» til denne adressen på {{SITENAME}}, fra IP-adressen $1.
-
-For å bekrefte at denne kontoen tilhører deg og for å slå på e-posttjenestene på {{SITENAME}}, åpne denne lenka i nettleseren din:
-
-$3
-
-Om kontoen *ikke* tilhører deg, følg denne lenka for å avbryte bekreftelsen:
-
-$5
-
-Denne bekreftelseskoden går ut på dato $4.',
-'confirmemail_invalidated' => 'Bekreftelse av e-postadresse avbrutt',
-'invalidateemail' => 'Avbryt bekreftelse av e-postadresse',
-
-# Scary transclusion
-'scarytranscludedisabled' => '[Interwiki-transkludering er slått av]',
-'scarytranscludefailed' => '[Malen kunne ikke hentes for $1]',
-'scarytranscludetoolong' => '[URL-en er for lang]',
-
-# Delete conflict
-'deletedwhileediting' => "'''Advarsel:''' Denne siden har blitt slettet etter at du begynte å redigere den!",
-'confirmrecreate' => '«[[User:$1|$1]]» ([[User talk:$1|diskusjon]]) slettet siden etter at du begynte å redigere den, med begrunnelsen «$2». Vennligst bekreft at du vil gjenopprette siden.',
-'confirmrecreate-noreason' => 'Brukeren [[User:$1|$1]] ([[User talk:$1|diskusjon]]) slettet denne siden etter at du begynte å redigere. Bekreft at du virkelig ønsker å gjenopprette denne siden.',
-'recreate' => 'Gjenopprett',
-
-# action=purge
-'confirm_purge_button' => 'OK',
-'confirm-purge-top' => "Vil du slette tjenerens mellomlagrede versjon (''cache'') av denne siden?",
-'confirm-purge-bottom' => 'Rensing av en side sletter mellomlageret og tvinger frem den nyeste versjonen.',
-
-# action=watch/unwatch
-'confirm-watch-button' => 'OK',
-'confirm-watch-top' => 'Legg denne siden til overvåkningslisten din?',
-'confirm-unwatch-button' => 'OK',
-'confirm-unwatch-top' => 'Fjern denne siden fra overvåkningslisten din?',
-
-# Multipage image navigation
-'imgmultipageprev' => '← forrige side',
-'imgmultipagenext' => 'neste side &rarr;',
-'imgmultigo' => 'Gå!',
-'imgmultigoto' => 'Gå til siden $1',
-
-# Table pager
-'ascending_abbrev' => 'stig.',
-'descending_abbrev' => 'synk.',
-'table_pager_next' => 'Neste side',
-'table_pager_prev' => 'Forrige side',
-'table_pager_first' => 'Første side',
-'table_pager_last' => 'Siste side',
-'table_pager_limit' => 'Vis $1 elementer per side',
-'table_pager_limit_label' => 'Element per side:',
-'table_pager_limit_submit' => 'Gå',
-'table_pager_empty' => 'Ingen resultater',
-
-# Auto-summaries
-'autosumm-blank' => 'Tømmer siden',
-'autosumm-replace' => 'Erstatter siden med «$1»',
-'autoredircomment' => 'Omdirigerer til [[$1]]',
-'autosumm-new' => 'Ny side: $1',
-
-# Live preview
-'livepreview-loading' => 'Laster…',
-'livepreview-ready' => 'Laster&nbsp;… Klar!',
-'livepreview-failed' => 'Levende forhåndsvisning mislyktes. Prøv vanlig forhåndsvisning.',
-'livepreview-error' => 'Tilkobling mislyktes: $1 «$2»
-Prøv vanlig forhåndsvisning.',
-
-# Friendlier slave lag warnings
-'lag-warn-normal' => 'Endringer nyere enn $1 {{PLURAL:$1|sekund|sekunder}} vises muligens ikke i denne listen.',
-'lag-warn-high' => 'På grunn av stor databaseforsinkelse, vil ikke endringer som er nyere enn $1 {{PLURAL:$1|sekund|sekunder}} vises i denne listen.',
-
-# Watchlist editor
-'watchlistedit-numitems' => 'Overvåkningslisten din inneholder {{PLURAL:$1|én tittel|$1 titler}}, ikke inkludert diskusjonssider.',
-'watchlistedit-noitems' => 'Overvåkningslisten din inneholder ingen titler.',
-'watchlistedit-normal-title' => 'Rediger overvåkningsliste',
-'watchlistedit-normal-legend' => 'Fjern titler fra overvåkninglisten',
-'watchlistedit-normal-explain' => 'Titler på overvåkningslisten din vises nedenfor.
-For å fjerne en tittel, merk av boksen ved siden av den og klikk på «{{int:Watchlistedit-normal-submit}}».
-Du kan også [[Special:EditWatchlist/raw|redigere den rå overvåkningslisten]].',
-'watchlistedit-normal-submit' => 'Fjern titler',
-'watchlistedit-normal-done' => '{{PLURAL:$1|Én tittel|$1 titler}} ble fjernet fra overvåkningslisten din:',
-'watchlistedit-raw-title' => 'Rediger rå overvåkningsliste',
-'watchlistedit-raw-legend' => 'Rediger rå overvåkningsliste',
-'watchlistedit-raw-explain' => 'Titler på overvåkningslisten din vises nedenunder, og kan redigeres ved å legge til eller fjerne fra listen;
-én tittel per linje.
-Når du er ferdig, trykk «{{int:Watchlistedit-raw-submit}}».
-Du kan også [[Special:EditWatchlist|bruke standardverktøyet]].',
-'watchlistedit-raw-titles' => 'Titler:',
-'watchlistedit-raw-submit' => 'Oppdater overvåkningsliste',
-'watchlistedit-raw-done' => 'Overvåkningslisten din er oppdatert.',
-'watchlistedit-raw-added' => '{{PLURAL:$1|Én tittel|$1 titler}} ble lagt til:',
-'watchlistedit-raw-removed' => '{{PLURAL:$1|Én tittel|$1 titler}} ble fjernet:',
-
-# Watchlist editing tools
-'watchlisttools-view' => 'Vis relevante endringer',
-'watchlisttools-edit' => 'Vis og rediger overvåkningsliste',
-'watchlisttools-raw' => 'Rediger rå overvåkningsliste',
-
-# Hebrew month names
-'hebrew-calendar-m1' => 'Tisjri',
-'hebrew-calendar-m2' => 'Hesjván',
-'hebrew-calendar-m3' => 'Kislév',
-'hebrew-calendar-m4' => 'Tebét',
-'hebrew-calendar-m5' => 'Sjebát',
-'hebrew-calendar-m6' => 'Adár',
-'hebrew-calendar-m6a' => 'Adár I',
-'hebrew-calendar-m6b' => 'Adár II',
-'hebrew-calendar-m7' => 'Nisán',
-'hebrew-calendar-m8' => 'Ijár',
-'hebrew-calendar-m9' => 'Siván',
-'hebrew-calendar-m10' => 'Tammúz',
-'hebrew-calendar-m11' => 'Ab',
-'hebrew-calendar-m12' => 'Elúl',
-'hebrew-calendar-m1-gen' => 'Tisjri',
-'hebrew-calendar-m2-gen' => 'Hesjván',
-'hebrew-calendar-m3-gen' => 'Kislév',
-'hebrew-calendar-m4-gen' => 'Tebét',
-'hebrew-calendar-m5-gen' => 'Sjebát',
-'hebrew-calendar-m6-gen' => 'Adár',
-'hebrew-calendar-m6a-gen' => 'Adár I',
-'hebrew-calendar-m6b-gen' => 'Adár II',
-'hebrew-calendar-m7-gen' => 'Nisán',
-'hebrew-calendar-m8-gen' => 'Ijár',
-'hebrew-calendar-m9-gen' => 'Siván',
-'hebrew-calendar-m10-gen' => 'Tammúz',
-'hebrew-calendar-m11-gen' => 'Ab',
-'hebrew-calendar-m12-gen' => 'Elúl',
-
-# Core parser functions
-'unknown_extension_tag' => 'Ukjent tilleggsmerking «$1»',
-'duplicate-defaultsort' => 'Advarsel: Standardsorteringen «$2» tar over for den tidligere sorteringen «$1».',
-
-# Special:Version
-'version' => 'Versjon',
-'version-extensions' => 'Installerte utvidelser',
-'version-specialpages' => 'Spesialsider',
-'version-parserhooks' => 'Parsertillegg',
-'version-variables' => 'Variabler',
-'version-antispam' => 'Søppelpostforebygging',
-'version-skins' => 'Drakter',
-'version-other' => 'Annet',
-'version-mediahandlers' => 'Mediahåndterere',
-'version-hooks' => 'Haker',
-'version-extension-functions' => 'Tilleggsfunksjoner',
-'version-parser-extensiontags' => 'Tilleggstagger',
-'version-parser-function-hooks' => 'Parserfunksjoner',
-'version-hook-name' => 'Navn',
-'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-others' => 'andre',
-'version-license-info' => 'MediaWiki er fri programvare; du kan redistribuere det og/eller modifisere det under betingelsene i GNU General Public License som publisert av Free Software Foundation; enten versjon 2 av lisensen, eller (etter eget valg) enhver senere versjon.
-
-MediaWiki er distribuert i håp om at det vil være nyttig, men UTEN NOEN GARANTI; ikke engang implisitt garanti av SALGBARHET eller EGNETHET FOR ET BESTEMT FORMÅL. Se GNU General Public License for flere detaljer.
-
-Du skal ha mottatt [{{SERVER}}{{SCRIPTPATH}}/COPYING en kopi av GNU General Public License] sammen med dette programmet; hvis ikke, skriv til Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA eller [//www.gnu.org/licenses/old-licenses/gpl-2.0.html les det på nettet].',
-'version-software' => 'Installert programvare',
-'version-software-product' => 'Produkt',
-'version-software-version' => 'Versjon',
-
-# Special:FilePath
-'filepath' => 'Filsti',
-'filepath-page' => 'Fil:',
-'filepath-submit' => 'Gå',
-'filepath-summary' => 'Denne spesialsiden returnerer den fullstendige stien for en fil.
-Bilder vises med full oppløsning, mens andre filtyper startes direkte gjennom sine tilknyttede programmer.',
-
-# Special:FileDuplicateSearch
-'fileduplicatesearch' => 'Søk etter duplikatfiler',
-'fileduplicatesearch-summary' => 'Søk etter duplikatfiler basert på dets hash-verdi.',
-'fileduplicatesearch-legend' => 'Søk etter en duplikatfil',
-'fileduplicatesearch-filename' => 'Filnavn:',
-'fileduplicatesearch-submit' => 'Søk',
-'fileduplicatesearch-info' => '$1 × $2 piksler<br />Filstørrelse: $3<br />MIME-type: $4',
-'fileduplicatesearch-result-1' => 'Det er ingen duplikater av «$1».',
-'fileduplicatesearch-result-n' => 'Det er {{PLURAL:$2|ett duplikat|$2 duplikater}} av «$1».',
-'fileduplicatesearch-noresults' => 'Ingen ved navn «$1» funnet.',
-
-# Special:SpecialPages
-'specialpages' => 'Spesialsider',
-'specialpages-group-maintenance' => 'Vedlikeholdsrapporter',
-'specialpages-group-other' => 'Andre spesialsider',
-'specialpages-group-login' => 'Innlogging / registrering',
-'specialpages-group-changes' => 'Siste endringer og logger',
-'specialpages-group-media' => 'Mediarapporter og opplastinger',
-'specialpages-group-users' => 'Brukere og rettigheter',
-'specialpages-group-highuse' => 'Ofte brukte sider',
-'specialpages-group-pages' => 'Sidelister',
-'specialpages-group-pagetools' => 'Sideverktøy',
-'specialpages-group-wiki' => 'Informasjon og verktøy for wikien',
-'specialpages-group-redirects' => 'Omdirigerende spesialsider',
-'specialpages-group-spam' => 'Spamverktøy',
-
-# Special:BlankPage
-'blankpage' => 'Tom side',
-'intentionallyblankpage' => 'Denne siden er tom med vilje',
-
-# External image whitelist
-'external_image_whitelist' => '#La denne linja være som den er<pre>
-#Skriv fragmenter av regulære uttrykk (delen som går mellom //) nedenfor
-#Disse vil sjekkes mot adresser til bilder fra eksterne sider
-#De som blir godkjent vil vises, ellers vil det gis en lenke til bildet
-#Linjer som begynner med # anses som kommentarer
-#Det skilles ikke mellom store og små bokstaver
-
-#Skriv alle fragmenter av regulære uttrykk over denne lina. La denne linja være som den er</pre>',
-
-# Special:Tags
-'tags' => 'Gyldige endringstagger',
-'tag-filter' => 'Filter for [[Special:Tags|tagger]]:',
-'tag-filter-submit' => 'Filtrer',
-'tags-title' => 'Tagger',
-'tags-intro' => 'Denne siden lister opp taggene programvaren kan merke en endring med, og hva de betyr.',
-'tags-tag' => 'Taggnavn',
-'tags-display-header' => 'Utseende på endringslister',
-'tags-description-header' => 'Fullstendig betydning',
-'tags-hitcount-header' => 'Taggede endringer',
-'tags-edit' => 'rediger',
-'tags-hitcount' => '{{PLURAL:$1|én endring|$1 endringer}}',
-
-# Special:ComparePages
-'comparepages' => 'Sammenlign sider',
-'compare-selector' => 'Sammenlign siderevisjoner',
-'compare-page1' => 'Side 1',
-'compare-page2' => 'Side 2',
-'compare-rev1' => 'Revisjon 1',
-'compare-rev2' => 'Revisjon 2',
-'compare-submit' => 'Sammenlign',
-
-# Database error messages
-'dberr-header' => 'Wikien har et problem',
-'dberr-problems' => 'Siden har tekniske problemer.',
-'dberr-again' => 'Prøv å oppdatere siden om noen minutter.',
-'dberr-info' => '(Kan ikke kontakte databasetjeneren: $1)',
-'dberr-usegoogle' => 'Du kan prøve å søke via Google imens.',
-'dberr-outofdate' => 'Merk at deres indeks over våre sider kan være utdatert.',
-'dberr-cachederror' => 'Følgende er en mellomlagret kopi av den etterspurte siden, og kan være foreldet.',
-
-# HTML forms
-'htmlform-invalid-input' => 'Det er problemer med noen av inndatene dine',
-'htmlform-select-badoption' => 'Verdien du valgte er ikke et gyldig alternativ.',
-'htmlform-int-invalid' => 'Verdien du valgte er ikke et heltall.',
-'htmlform-float-invalid' => 'Verdien du valgte er ikke et tall.',
-'htmlform-int-toolow' => 'Verdien du valgte er mindre enn minimum på $1',
-'htmlform-int-toohigh' => 'Verdien du valgte er over det mulige $1',
-'htmlform-required' => 'Denne verdien er påkrevd',
-'htmlform-submit' => 'Lagre',
-'htmlform-reset' => 'Omgjør endringer',
-'htmlform-selectorother-other' => 'Andre',
-
-# SQLite database support
-'sqlite-has-fts' => '$1 med støtte for fulltekstsøk',
-'sqlite-no-fts' => '$1 uten støtte for fulltekstsøk',
-
-# New logging system
-'revdelete-restricted' => 'begrensninger gjelder også administratorer',
-'revdelete-unrestricted' => 'fjernet begrensninger for administratorer',
-'newuserlog-byemail' => 'passord sendt på e-post',
-
-);
index 0eca8f6..9c73019 100644 (file)
@@ -647,6 +647,9 @@ Ga re fane ka e-poso ya gago go bašumiši ba bangwe ge ba polela le wena ka yon
 'right-edit' => 'Fetola matlakala',
 'right-move' => 'Huduša matlakala',
 
+# Special:Log/newusers
+'newuserlogpage' => '"Log" yago hlola mošumiši',
+
 # User rights log
 'rightslog' => "''log'' ya ditumello tša mošomiši",
 
@@ -863,9 +866,6 @@ Matlakala ago ba [[Special:Watchlist|lenanong la gago la matlakala ditlhapetšo]
 # Special:ListUsers
 'listusers-submit' => 'Bontšha',
 
-# Special:Log/newusers
-'newuserlogpage' => '"Log" yago hlola mošumiši',
-
 # Special:ListGroupRights
 'listgrouprights-members' => '(Lenano la ditho)',
 
@@ -906,6 +906,8 @@ Ga eba o nyaka go hloša letlaka le go lenano la ditlhapetšo tša gago, šomiš
 'enotif_impersonal_salutation' => '{{SITENAME}} mošumiši',
 'enotif_lastvisited' => 'Lebelela  $1 go bona diphetogo ka moka gotloga ge go tsena la mafelelo.',
 'enotif_lastdiff' => 'Bona $1 go nyakorela phetogo ye.',
+'created' => 'tlhodilwe',
+'changed' => 'fetotšwe',
 
 # Delete
 'deletepage' => 'Phumula letlakala',
index f02999c..d71b899 100644 (file)
@@ -298,7 +298,7 @@ $messages = array(
 'tog-hidepatrolled' => 'Amagar las modificacions susvelhadas dels darrièrs cambiaments',
 'tog-newpageshidepatrolled' => 'Amagar las paginas susvelhadas de la lista de las paginas novèlas',
 'tog-extendwatchlist' => 'Espandir la lista de seguiment per afichar totas las modificacions e non pas solament las mai recentas',
-'tog-usenewrc' => 'Utilizar los darrièrs cambiaments melhorats (necessita JavaScript)',
+'tog-usenewrc' => 'Agropar los cambiaments dins los darrièrs cambiaments e la lista de seguiment (necessita JavaScript)',
 'tog-numberheadings' => 'Numerotar automaticament los títols',
 'tog-showtoolbar' => 'Far veire la barra de menut de modificacion (JavaScript)',
 'tog-editondblclick' => 'Modificar una pagina amb un clic doble (JavaScript)',
@@ -306,23 +306,23 @@ $messages = array(
 'tog-editsectiononrightclick' => 'Modificar una seccion en fasent un clic drech sus son títol (JavaScript)',
 'tog-showtoc' => "Afichar l'ensenhador (per las paginas de mai de 3 seccions)",
 'tog-rememberpassword' => 'Se remembrar de mon senhal sus aqueste ordinator (al mai $1 {{PLURAL:$1|jorn|jorns}})',
-'tog-watchcreations' => 'Apondre las paginas que creï a ma lista de seguiment',
-'tog-watchdefault' => 'Apondre las paginas que modifiqui a ma lista de seguiment',
-'tog-watchmoves' => 'Apondre las paginas que tòrni nomenar a ma lista de seguiment',
-'tog-watchdeletion' => 'Apondre las paginas que suprimissi de ma lista de seguiment',
+'tog-watchcreations' => "Apondre las paginas que creï e los fichièrs qu'impòrti a ma lista de seguiment",
+'tog-watchdefault' => "Apondre las paginas que modifiqui e los fichièrs qu'impòrti a ma lista de seguiment",
+'tog-watchmoves' => 'Apondre las paginas e los fichièrs que tòrni nomenar a ma lista de seguiment',
+'tog-watchdeletion' => 'Apondre las paginas e los fichièrs que suprimissi de ma lista de seguiment',
 'tog-minordefault' => 'Considerar mas modificacions coma menoras per defaut',
 'tog-previewontop' => 'Far veire la previsualizacion al dessús de la zòna de modificacion',
 'tog-previewonfirst' => 'Far veire la previsualizacion al moment de la primièra edicion',
 'tog-nocache' => "Desactivar l'amagatal de paginas",
-'tog-enotifwatchlistpages' => 'M’avertir per corrièr electronic quand una pagina de ma lista de seguiment es modificada',
+'tog-enotifwatchlistpages' => 'M’avertir per corrièr electronic quand una pagina o un fichièr de ma lista de seguiment es modificat',
 'tog-enotifusertalkpages' => 'M’avertir per corrièr electronic en cas de modificacion de ma pagina de discussion',
-'tog-enotifminoredits' => 'M’avertir per corrièr electronic quitament en cas de modificacions menoras',
+'tog-enotifminoredits' => 'M’avertir per corrièr electronic quitament en cas de modificacions menoras de las paginas o dels fichièrs',
 'tog-enotifrevealaddr' => 'Afichar mon adreça electronica dins la los corrièrs electronics d’avertiment',
 'tog-shownumberswatching' => "Afichar lo nombre d'utilizaires que seguisson aquesta pagina",
 'tog-oldsig' => 'Apercebut de la signatura existenta :',
 'tog-fancysig' => 'Tractar la signatura coma de wikitèxte (sens ligam automatic)',
 'tog-externaleditor' => 'Utilizar un editor extèrne per defaut (pels utilizaires avançats, necessita una configuracion especiala sus vòstre ordinator)',
-'tog-externaldiff' => 'Utilizar un comparator extèrne per defaut (pels utilizaires avançats, necessita una configuracion especiala sus vòstre ordenador)',
+'tog-externaldiff' => "Utilizar un comparador extèrne per defaut (pels utilizaires avançats, necessita una configuracion especiala sus vòstre ordenador, [//www.mediawiki.org/wiki/Manual:External_editors/fr mai d'informacions]).",
 'tog-showjumplinks' => 'Activar los ligams « navigacion » e « recèrca » en naut de pagina (aparéncias Myskin e autres)',
 'tog-uselivepreview' => 'Utilizar l’apercebut rapid (JavaScript) (experimental)',
 'tog-forceeditsummary' => "M'avertir quand ai pas completat lo contengut de la bóstia de comentaris",
@@ -340,7 +340,7 @@ $messages = array(
 
 'underline-always' => 'Totjorn',
 'underline-never' => 'Pas jamai',
-'underline-default' => 'Segon lo navigador',
+'underline-default' => 'Valor per defaut del navigador o del tèma',
 
 # Font style option in Special:Preferences
 'editfont-style' => "Estil de poliça de la zòna d'edicion :",
@@ -425,8 +425,9 @@ $messages = array(
 'newwindow' => '(dobrís una fenèstra novèla)',
 'cancel' => 'Anullar',
 'moredotdotdot' => 'E mai...',
-'mypage' => 'Ma pagina',
-'mytalk' => 'Ma pagina de discussion',
+'morenotlisted' => 'Mai pas listat…',
+'mypage' => 'Pagina',
+'mytalk' => 'Discussion',
 'anontalk' => 'Discussion amb aquesta adreça IP',
 'navigation' => 'Navigacion',
 'and' => '&#32;e',
@@ -448,6 +449,7 @@ $messages = array(
 'vector-action-protect' => 'Protegir',
 'vector-action-undelete' => 'Restablir',
 'vector-action-unprotect' => 'Suprimir la proteccion',
+'vector-simplesearch-preference' => "Activar la barra de recèrca simplificada (solament per l'abilhatge Vector)",
 'vector-view-create' => 'Crear',
 'vector-view-edit' => 'Modificar',
 'vector-view-history' => "Veire l'istoric",
@@ -457,6 +459,7 @@ $messages = array(
 'namespaces' => 'Espacis de noms',
 'variants' => 'Variantas',
 
+'navigation-heading' => 'Menú de navigacion',
 'errorpagetitle' => 'Error de títol',
 'returnto' => 'Tornar a la pagina $1.',
 'tagline' => 'Un article de {{SITENAME}}.',
@@ -494,7 +497,7 @@ $messages = array(
 'articlepage' => "Vejatz l'article",
 'talk' => 'Discussion',
 'views' => 'Afichatges',
-'toolbox' => "Bóstia d'espleches",
+'toolbox' => "Bóstia d'aisinas",
 'userpage' => "Pagina d'utilizaire",
 'projectpage' => 'Pagina meta',
 'imagepage' => 'Veire la pagina del fichièr',
@@ -517,6 +520,8 @@ Tròp d’utilizaires cercan a accedir a aquesta pagina.
 Esperatz un moment abans d'ensajar d’accedir a aquesta pagina.
 
 $1",
+'pool-timeout' => "Relambi depassat pendent l'espèra del varrolh",
+'pool-queuefull' => 'La fila de trabalh es plena',
 'pool-errorunknown' => 'Error desconeguda',
 
 # 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) and the disambiguation template definition (see disambiguations).
@@ -551,6 +556,10 @@ $1",
 'youhavenewmessages' => 'Avètz $1 ($2).',
 'newmessageslink' => 'de messatges novèls',
 'newmessagesdifflink' => 'darrièr cambiament',
+'youhavenewmessagesfromusers' => "Avètz $1 {{PLURAL:$3|d'un autre utilizaire|de $3 autres utilizaires}} ($2).",
+'youhavenewmessagesmanyusers' => 'Avètz $1 de fòrça utilizaires ($2).',
+'newmessageslinkplural' => '{{PLURAL:$1|un novèl messatge|de novèls messatges}}',
+'newmessagesdifflinkplural' => '{{PLURAL:$1|darrièr cambiament|darrièrs cambiaments}}',
 'youhavenewmessagesmulti' => 'Avètz de messatges novèls sus $1',
 'editsection' => 'modificar',
 'editold' => 'modificar',
@@ -644,10 +653,12 @@ Informatz-ne un [[Special:ListUsers/sysop|administrator]] aprèp aver notada l
 'cannotdelete' => 'Impossible de suprimir la pagina o lo fichièr « $1 ».
 Benlèu la supression ja es estada efectuada per qualqu’un mai.',
 'cannotdelete-title' => 'Impossible de suprimir la pagina "$1"',
+'delete-hook-aborted' => "Supression anullada per una extension.
+Cap d'explicacion es pas estada provesida.",
 'badtitle' => 'Títol marrit',
 'badtitletext' => 'Lo títol de la pagina demandada es invalid, void o s’agís d’un títol interlenga o interprojècte mal ligat. Benlèu conten un o maites caractèrs que pòdon pas èsser utilizats dins los títols.',
-'perfcached' => 'Aquò es una version en amagatal e es benlèu pas a jorn. A maximum of {{PLURAL:$1|one result is|$1 results are}} available in the cache.',
-'perfcachedts' => "Las donadas que segon son dins l'amagatal, son doncas pas forçadament a jorn. La darrièra actualizacion data del $1. A maximum of {{PLURAL:$4|one result is|$4 results are}} available in the cache.",
+'perfcached' => "Las donadas seguendas son en escondedor e benlèu, son pas a jorn. Un maximum de {{PLURAL:$1|un resultat|$1 resultats}} es disponible dins l'escondedor.",
+'perfcachedts' => "Las donadas seguendas son en escondedor e benlèu, son pas a jorn. Un maximum de {{PLURAL:$1|un resultat|$1 resultats}} es disponible dins l'escondedor.",
 'querypage-no-updates' => 'Las mesas a jorn per aquesta pagina son actualamnt desactivadas. Las donadas çaijós son pas mesas a jorn.',
 'wrong_wfQuery_params' => 'Paramètres incorrèctes sus wfQuery()<br />
 Foncion : $1<br />
@@ -656,8 +667,9 @@ Requèsta : $2',
 'viewsource-title' => 'Veire la font de $1',
 'actionthrottled' => 'Accion limitada',
 'actionthrottledtext' => "Per luchar contra lo spam, l’utilizacion d'aquesta accion es limitada a un cèrt nombre de còps dins una sosta pro corta. S'avèra qu'avètz depassat aqueste limit. Ensajatz tornamai dins qualques minutas.",
-'protectedpagetext' => 'Aquesta pagina es estada protegida per empachar sa modificacion.',
+'protectedpagetext' => "Aquesta pagina es estada protegida per empachar sa modificacion o d'autras accions.",
 'viewsourcetext' => 'Podètz veire e copiar lo contengut de l’article per poder trabalhar dessús :',
+'viewyourtext' => "Podètz veire e copiar lo contengut de '''vòstras modificacions''' a aquesta pagina :",
 'protectedinterface' => 'Aquesta pagina provesís de tèxte d’interfàcia pel logicial e es protegida per evitar los abuses.',
 'editinginterface' => "'''Atencion :''' sètz a editar una pagina utilizada per crear lo tèxte de l’interfàcia del logicial. Los cambiaments se repercutaràn, segon lo contèxte, sus totas o d'unas paginas visiblas pels autres utilizaires. Per las traduccions, vos convidam a utilizar lo projècte MediaWiki d'internacionalizacion dels messatges [//translatewiki.net/wiki/Main_Page?setlang=oc translatewiki.net].",
 'sqlhidden' => '(Requèsta SQL amagada)',
@@ -669,6 +681,7 @@ $2",
 'ns-specialprotected' => 'Las paginas dins l’espaci de noms « {{ns:special}} » pòdon pas èsser modificadas',
 'titleprotected' => "Aqueste títol es estat protegit a la creacion per [[User:$1|$1]].
 Lo motiu avançat es « ''$2'' ».",
+'exception-nologin' => 'Pas connectat',
 
 # Virus scanner
 'virus-badscanner' => "Marrida configuracion : escaner de virús desconegut : ''$1''",
@@ -680,11 +693,16 @@ Lo motiu avançat es « ''$2'' ».",
 
 Podètz contunhar d'utilizar {{SITENAME}} anonimament, o vos podètz <span class='plainlinks'>[$1 tornar connectar]</span> jol meteis nom o amb un autre nom.
 Notatz que d'unas paginas pòdon èsser encara afichadas coma s'eratz encara connect{{GENDER:||at|ada}}, fins al moment qu'escafaretz l'amagatal de vòstre navigador.",
-'yourname' => "Vòstre nom d'utilizaire :",
+'welcomeuser' => 'Benvenguda, $1&nbsp;!',
+'welcomecreation-msg' => "Vòstre compte d'utilizaire es estat creat.
+Doblidetz pas de modificar [[Special:Preferences|vòstras preferéncias per {{SITENAME}}]].",
+'yourname' => "Nom d'utilizaire :",
 'yourpassword' => 'Vòstre senhal :',
-'yourpasswordagain' => 'Picatz vòstre senhal tornarmai :',
+'yourpasswordagain' => 'Confirmar lo senhal :',
 'remembermypassword' => 'Me reconnectar automaticament a las visitas venentas (al maximum $1 {{PLURAL:$1|jorn|jorns}})',
+'securelogin-stick-https' => 'Demorar connectat en HTTPS aprèp la connexion',
 'yourdomainname' => 'Vòstre domeni',
+'password-change-forbidden' => 'Podètz pas modificar los senhals sus aqueste wiki.',
 'externaldberror' => 'Siá una error s’es producha amb la banca de donadas d’autentificacion extèrna, siá sètz pas autorizat a metre a jorn vòstre compte extèrne.',
 'login' => 'Identificacion',
 'nav-login-createaccount' => 'Crear un compte o se connectar',
@@ -699,7 +717,7 @@ Notatz que d'unas paginas pòdon èsser encara afichadas coma s'eratz encara con
 'createaccount' => 'Crear un compte novèl',
 'gotaccount' => "Ja avètz un compte ? '''$1'''.",
 'gotaccountlink' => 'Identificatz-vos',
-'userlogin-resetlink' => 'Vos doblidèretz las informacions de conneccion?',
+'userlogin-resetlink' => 'Avètz doblidat vòstres detalhs de connexion ?',
 'createaccountmail' => 'per corrièr electronic',
 'createaccountreason' => 'Motiu :',
 'badretype' => "Los senhals qu'avètz picats son pas identics.",
@@ -751,6 +769,7 @@ Atal los visitors qu'utilizan aquesta adreça IP pòdon pas crear mai de compte
 '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.
 Picatz una adreça plan formatada o daissatz aqueste camp void.",
+'emaildisabled' => 'Aqueste site pòt pas mandar de corrièls.',
 'accountcreated' => 'Compte creat.',
 'accountcreatedtext' => "Lo compte d'utilizaire de $1 es estat creat.",
 'createaccount-title' => "Creacion d'un compte per {{SITENAME}}",
@@ -760,9 +779,13 @@ Ignoratz aqueste messatge se aqueste compte es estat creat per error.",
 'usernamehasherror' => "Lo nom d'utilizaire pòt pas conténer de caractèrs de hachage",
 'login-throttled' => 'Avètz ensajat tròp de temptativas de connexion darrièrament.
 Esperatz abans d’ensajar tornamai.',
+'login-abort-generic' => 'Vòstra temptativa de connexion a fracassat',
 'loginlanguagelabel' => 'Lenga: $1',
 'suspicious-userlogout' => 'Vòstra demanda de desconnexion es estada refusada perque sembla qu’es estada mandada per un navigador copat o la mesa en escondedor d’un proxy.',
 
+# E-mail sending
+'php-mail-error-unknown' => 'Error desconeguda dins la foncion mail() de PHP.',
+
 # Change password dialog
 'resetpass' => 'Cambiar lo senhal del compte',
 'resetpass_announce' => 'Vos sètz enregistrat amb un senhal temporari mandat per corrièr electronic. Per acabar l’enregistrament, vos cal picar un senhal novèl aicí :',
@@ -909,8 +932,9 @@ La darrièra entrada del jornal dels blocatges es indicada çaijós a títol d
 'userinvalidcssjstitle' => "'''Atencion :''' existís pas d'estil « $1 ». Remembratz-vos que las paginas personalas amb extensions .css e .js utilizan de títols en minusculas, per exemple, {{ns:user}}:Foo/vector.css e non pas {{ns:user}}:Foo/Vector.css.",
 'updated' => '(Mes a jorn)',
 'note' => "'''Nòta :'''",
-'previewnote' => "'''Atencion, aqueste tèxte es sonque una previsualizacion e es pas encara estat salvat !'''",
-'continue-editing' => "Contunhar l'edicion",
+'previewnote' => "'''Remembratz-vos qu'es pas qu'una previsualizacion.'''
+Vòstras modificacions son pas encara estadas enregistradas !",
+'continue-editing' => 'Anar a la zòna de modificacion',
 'previewconflict' => 'Aquesta previsualizacion fa veire lo tèxte de la bóstia de modificacion superiora coma apareisserà se causissètz de lo salvar.',
 'session_fail_preview' => "'''Podèm pas enregistrar vòstra modificacion a causa d’una pèrda d’informacions concernent vòstra sesilha.
 Ensajatz tornarmai.
@@ -956,7 +980,6 @@ Aquesta proteccion es estada facha perque aquesta pagina es inclusa dins {{PLURA
 'template-semiprotected' => '(semiprotegit)',
 'hiddencategories' => "{{PLURAL:$1|Categoria amagada|Categorias amagadas}} qu'aquesta pagina ne fa partida :",
 'edittools' => '<!-- Tot tèxte picat aicí serà afichat jos las bóstias de modificacion o d’impòrt de fichièr. -->',
-'nocreatetitle' => 'Creacion de pagina limitada',
 'nocreatetext' => '{{SITENAME}} a restrencha la possibilitat de crear de paginas novèlas.
 Podètz tonar en rèire e modificar una pagina existenta, [[Special:UserLogin|vos connectar o crear un compte]].',
 'nocreate-loggedin' => 'Avètz pas la permission de crear de paginas novèlas.',
@@ -982,6 +1005,12 @@ Sembla que siá estada suprimida.',
 Existís ja.',
 'defaultmessagetext' => 'Messatge per defaut',
 
+# Content models
+'content-model-wikitext' => 'wikitèxte',
+'content-model-text' => 'tèxte brut',
+'content-model-javascript' => 'JavaScript',
+'content-model-css' => 'CSS',
+
 # Parser/template warnings
 'expensive-parserfunction-warning' => 'Atencion : Aquesta pagina conten tròp d’apèls dispendioses de foncions del parser.
 
@@ -1168,7 +1197,7 @@ Asseguratz-vos qu'aqueste cambiament pòsca conservar la continuitat de l'istori
 'mergelogpagetext' => "Vaquí, çaijós, la lista de las fusions las mai recentas de l'istoric d'una pagina amb una autra.",
 
 # Diffs
-'history-title' => 'Istoric de las versions de « $1 »',
+'history-title' => '$1 : Istoric de las versions',
 'difference-multipage' => '(Diferéncias entre las paginas)',
 'lineno' => 'Linha $1 :',
 'compareselectedversions' => 'Comparar las versions seleccionadas',
@@ -1243,8 +1272,8 @@ En esperant la reactivacion, podètz efectuar una recèrca via Google.
 Atencion, lor indexacion de contengut {{SITENAME}} benlèu es pas a jorn.',
 
 # Quickbar
-'qbsettings' => "Barra d'espleches",
-'qbsettings-none' => 'Cap',
+'qbsettings' => "Barra d'aisinas",
+'qbsettings-none' => 'Pas cap',
 'qbsettings-fixedleft' => 'Esquèrra',
 'qbsettings-fixedright' => 'Drecha',
 'qbsettings-floatingleft' => 'Flotanta a esquèrra',
@@ -1252,7 +1281,7 @@ Atencion, lor indexacion de contengut {{SITENAME}} benlèu es pas a jorn.',
 
 # Preferences page
 'preferences' => 'Preferéncias',
-'mypreferences' => 'Mas preferéncias',
+'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.',
@@ -1263,11 +1292,12 @@ Atencion, lor indexacion de contengut {{SITENAME}} benlèu es pas a jorn.',
 'prefs-beta' => 'Foncionalitats bèta',
 'prefs-datetime' => 'Data e ora',
 'prefs-labs' => 'Foncionalitats « labs »',
+'prefs-user-pages' => "Paginas d'utilizaire",
 'prefs-personal' => 'Entresenhas personalas',
 'prefs-rc' => 'Darrièrs cambiaments',
 'prefs-watchlist' => 'Lista de seguiment',
 'prefs-watchlist-days' => "Nombre de jorns d'afichar dins la lista de seguiment :",
-'prefs-watchlist-days-max' => 'Maximum $1 {{PLURAL:$1|day|days}}',
+'prefs-watchlist-days-max' => '(maximum $1 jorn{{PLURAL:$1||s}})',
 'prefs-watchlist-edits' => "Nombre de modificacions d'afichar dins la lista de seguiment espandida :",
 'prefs-watchlist-edits-max' => 'Nombre maximum : 1000',
 'prefs-watchlist-token' => 'Geton per la lista de seguiment :',
@@ -1326,9 +1356,9 @@ Vaquí una valor generada aleatòriament que podètz utilizar : $1',
 'prefs-emailconfirm-label' => 'Confirmacion del corrièr electronic :',
 'prefs-textboxsize' => 'Talha de la fenèstra de modificacion',
 'youremail' => 'Adreça de corrièr electronic :',
-'username' => "Nom de l'utilizaire :",
-'uid' => 'Numèro de l’utilizaire :',
-'prefs-memberingroups' => 'Membre {{PLURAL:$1|del grop|dels gropes}} :',
+'username' => "{{GENDER:$1|Nom d'utilizaire|Nom d'utilizaira}}:",
+'uid' => "Numèro d'{{GENDER:$1|utilizaire|utilizaira}}:",
+'prefs-memberingroups' => '{{GENDER:$2|Membre|Membra}} {{PLURAL:$1|del grop|dels gropes}}:',
 'prefs-registration' => 'Data de creacion del compte :',
 'yourrealname' => 'Nom vertadièr :',
 'yourlanguage' => "Lenga de l'interfàcia :",
@@ -1347,6 +1377,7 @@ Deu aver, al maximum $1 caractèr{{PLURAL:$1||s}}.',
 'prefs-help-realname' => "(facultatiu) : se l'especificatz, serà utilizat per vos atribuir vòstras contribucions.",
 'prefs-help-email' => 'L’adreça de corrièr electronic es facultativa mas vos permet de reçaupre lo senhal se lo doblidatz.
 Tanben podètz causir de permetre a d’autres de vos contactar per vòstra pagina d’utilizaire o la de discussion sens sofracha de desvelar vòstra idenditat.',
+'prefs-help-email-others' => "Tanben podètz causir de daissar los autres vos contactar sus vòstra pagina de discussion d'utilizaire sens que siá necessari de revelar vòstra identitat.",
 'prefs-help-email-required' => 'Una adreça de corrièr electronic es requesa.',
 'prefs-info' => 'Informacion de basa',
 'prefs-i18n' => 'Internationalizacion',
@@ -1474,11 +1505,13 @@ Tanben podètz causir de permetre a d’autres de vos contactar per vòstra pagi
 'right-sendemail' => 'Mandar un corrièl als autres utilizaires',
 'right-passwordreset' => 'Tòrna inicializar lo senhal d’un utilizaire ([[Special:PasswordReset|pagina especiala]])',
 
+# Special:Log/newusers
+'newuserlogpage' => 'Istoric de las creacions de comptes',
+'newuserlogpagetext' => "Jornal de las creacions de comptes d'utilizaires.",
+
 # User rights log
 'rightslog' => "Istoric de las modificacions d'estatut",
 'rightslogtext' => "Aquò es un jornal dels cambiaments d'estatut d’utilizaire.",
-'rightslogentry' => 'a modificat los dreches de l’utilizaire « $1 » de $2 a $3',
-'rightsnone' => '(cap)',
 
 # Associated actions - in the sentence "You do not have permission to X"
 'action-read' => 'legir aquesta pagina',
@@ -1698,6 +1731,27 @@ Se lo problèma persistís, contactatz un [[Special:ListUsers/sysop|administrato
 'upload-unknown-size' => 'Talha desconeguda',
 'upload-http-error' => 'Una error HTTP es intervenguda : $1',
 
+# File backend
+'backend-fail-stream' => 'Impossible de legir lo fichièr $1.',
+'backend-fail-backup' => 'Impossible de salvar lo fichièr $1.',
+'backend-fail-notexists' => 'Lo fichièr $1 existís pas.',
+'backend-fail-alreadyexists' => 'Lo fichièr $1 existís ja.',
+'backend-fail-store' => "Impossible d'emmagazinar lo fichièr « $1 » dins « $2 ».",
+'backend-fail-copy' => 'Impossible de copiar lo fichièr « $1 » dins « $2 ».',
+'backend-fail-move' => 'Impossible de desplaçar lo fichièr « $1 » cap a « $2 ».',
+'backend-fail-opentemp' => 'Impossible de dobrir lo fichièr temporari.',
+'backend-fail-writetemp' => "Impossible d'escriure dins lo fichièr temporari.",
+'backend-fail-closetemp' => 'Impossible de tampar lo fichièr temporari.',
+'backend-fail-read' => 'Impossible de legir lo fichièr $1.',
+'backend-fail-create' => "Impossible d'escriure lo fichièr $1.",
+
+# Lock manager
+'lockmanager-fail-closelock' => 'Impossible de tampar lo fichièr de varrolh per « $1 ».',
+'lockmanager-fail-deletelock' => 'Impossible de suprimir lo fichièr de varrolh per « $1 ».',
+'lockmanager-fail-acquirelock' => "Impossible d'obténer lo fichièr de varrolh per « $1 ».",
+'lockmanager-fail-openlock' => 'Impossible de dobrir lo fichièr de varrolh per « $1 ».',
+'lockmanager-fail-releaselock' => 'Impossible de daissar anar lo fichièr de varrolh per « $1 ».',
+
 # img_auth script messages
 'img-auth-accessdenied' => 'Accès refusat',
 'img-auth-nopathinfo' => 'PATH_INFO mancant.
@@ -1937,7 +1991,7 @@ Las entradas <del>barradas</del> son estadas resolgudas.',
 'listusers-editsonly' => "Far veire sonque los utilizaires qu'an al mens una contribucion",
 'listusers-creationsort' => 'Triar per data de creacion',
 'usereditcount' => '$1 {{PLURAL:$1|cambiament|cambiaments}}',
-'usercreated' => 'Creat lo $1 a $2',
+'usercreated' => '{{GENDER:$3|Creat}} lo $1 a $2',
 'newpages' => 'Paginas novèlas',
 'newpages-username' => "Nom d'utilizaire :",
 'ancientpages' => 'Articles mai ancians',
@@ -1963,8 +2017,8 @@ Notatz que d’autres sites pòdon aver un ligam dirècte cap a un fichièr, e d
 'booksources-invalid-isbn' => "Lo numèro ISBN balhat sembla pas èsser valid ; verificatz s'avètz fach una error al moment de la còpia dempuèi la font.",
 
 # Special:Log
-'specialloguserlabel' => 'Utilizaire :',
-'speciallogtitlelabel' => 'Títol :',
+'specialloguserlabel' => 'Autor :',
+'speciallogtitlelabel' => 'Cibla (títol o utilizaire):',
 'log' => 'Jornals',
 'all-logs-page' => 'Totas las operacions publicas',
 'alllogstext' => 'Afichatge combinat de totes los jornals de {{SITENAME}}.
@@ -2004,7 +2058,7 @@ Vejatz tanben [[Special:WantedCategories|las categorias demandadas]].',
 'sp-deletedcontributions-contribs' => 'contribucions',
 
 # Special:LinkSearch
-'linksearch' => 'Ligams extèrnes',
+'linksearch' => 'Recèrca de ligams extèrnes',
 'linksearch-pat' => 'Recercar l’expression :',
 'linksearch-ns' => 'Espacis de noms :',
 'linksearch-ok' => 'Recercar',
@@ -2027,10 +2081,6 @@ Vejatz tanben [[Special:WantedCategories|las categorias demandadas]].',
 'activeusers-hidesysops' => 'Amagar los administrators',
 'activeusers-noresult' => "Cap d'utilizaire pas trobat.",
 
-# Special:Log/newusers
-'newuserlogpage' => 'Istoric de las creacions de comptes',
-'newuserlogpagetext' => "Jornal de las creacions de comptes d'utilizaires.",
-
 # Special:ListGroupRights
 'listgrouprights' => "Dreches dels gropes d'utilizaires",
 'listgrouprights-summary' => "Aquesta pagina conten una tièra de gropes definits sus aqueste wiki e mai los dreches d'accès qu'i son associats.
@@ -2056,11 +2106,13 @@ I pòt aver [[{{MediaWiki:Listgrouprights-helppage}}|d'entresenhas complementàr
 e aver indicat una adreça electronica valida dins vòstras [[Special:Preferences|preferéncias]]
 per poder mandar un messatge a un autre utilizaire.',
 'emailuser' => 'Mandar un messatge a aqueste utilizaire',
+'emailuser-title-target' => 'Mandar un corrièl a {{GENDER:$1|aqueste utilizaire|aquesta utilizaira}}',
+'emailuser-title-notarget' => 'Mandar un corrièr electronic a l’utilizaire',
 'emailpage' => 'Mandar un corrièr electronic a l’utilizaire',
-'emailpagetext' => "Podètz utilizar lo formulari çaijós per mandar un corrièr electronic a aqueste utilizaire.
+'emailpagetext' => "Podètz utilizar lo formulari çaijós per mandar un corrièr electronic a {{GENDER:$1|aqueste utilizaire|aquesta utilizaira}}.
 L'adreça electronica qu'avètz indicada dins [[Special:Preferences|vòstras preferéncias]] apareisserà dins lo camp « Expeditor » de vòstre messatge. E mai, lo destinatari vos poirà respondre dirèctament.",
 'usermailererror' => 'Error dins lo subjècte del corrièr electronic :',
-'defemailsubject' => 'Corrièr electronic mandat dempuèi {{SITENAME}}',
+'defemailsubject' => "{{SITENAME}} Corrièl de l'utilizaire « $1 »",
 'usermaildisabled' => 'Lo mandadís de corrièrs electronics entre utilizairers es desactivat',
 'usermaildisabledtext' => "Podètz pas mandar de corrièrs electronics a d'autres utilizaires sur aquel wiki",
 'noemailtitle' => "Pas d'adreça electronica",
@@ -2124,6 +2176,11 @@ Las modificacions venentas d\'aquesta pagina e de la pagina de discussion associ
 'enotif_mailer' => 'Sistèma d’expedicion de notificacion de {{SITENAME}}',
 'enotif_reset' => 'Marcar totas las paginas coma visitadas',
 'enotif_impersonal_salutation' => 'Utilizaire de {{SITENAME}}',
+'enotif_subject_deleted' => 'La pagina $1 sus {{SITENAME}} es estada suprimida per {{GENDER:$2|$2}}',
+'enotif_subject_created' => 'La pagina $1 sus {{SITENAME}} es estada creada per {{GENDER:$2|$2}}',
+'enotif_subject_moved' => 'La pagina $1 sus {{SITENAME}} es estada renomenada per {{GENDER:$2|$2}}',
+'enotif_subject_restored' => 'La pagina $1 sus {{SITENAME}} es estada restablida per {{GENDER:$2|$2}}',
+'enotif_subject_changed' => 'La pagina $1 sus {{SITENAME}} es estada modificada per {{GENDER:$2|$2}}',
 'enotif_lastvisited' => 'Consultatz $1 per totes los cambiaments dempuèi vòstra darrièra visita.',
 'enotif_lastdiff' => 'Consultatz $1 per veire aquesta modificacion.',
 'enotif_anon_editor' => 'utilizaire anonim $1',
@@ -2153,6 +2210,8 @@ $UNWATCHURL
 
 Retorn e assisténcia :
 {{canonicalurl:{{MediaWiki:Helppage}}}}',
+'created' => 'creada',
+'changed' => 'modificada',
 
 # Delete
 'deletepage' => 'Suprimir la pagina',
@@ -2192,6 +2251,8 @@ D'efectuar amb prudéncia.",
 'rollback' => 'Anullar las modificacions',
 'rollback_short' => 'Anullar',
 'rollbacklink' => 'anullar',
+'rollbacklinkcount' => 'revocar $1 {{PLURAL:$1|modificacion|modificacions}}',
+'rollbacklinkcount-morethan' => 'revocar mai de $1 {{PLURAL:$1|modificacion|modificacions}}',
 'rollbackfailed' => "L'anullacion a pas capitat",
 'cantrollback' => "Impossible d'anullar : l'autor es la sola persona a aver efectuat de modificacions sus aqueste article",
 'alreadyrolled' => "Impossible d'anullar la darrièra modificacion de l'article « [[:$1]] » efectuada per [[User:$2|$2]] ([[User talk:$2|Discutir]]{{int:pipe-separator}}[[Special:Contributions/$2|{{int:contribslink}}]]) ;
@@ -2211,12 +2272,14 @@ Clicatz sus « Precedent » e tornatz cargar la pagina d’ont venètz, puèi en
 
 # Protect
 'protectlogpage' => 'Istoric de las proteccions',
-'protectlogtext' => 'Vejatz las [[Special:ProtectedPages|directivas]] per mai d’informacion.',
+'protectlogtext' => 'Aquí una lista de las modificacions de las proteccions de paginas.
+Consultatz la [[Special:ProtectedPages|lista de las paginas protegidas]] per la lista de las proteccions actualament operacionalas.',
 'protectedarticle' => 'a protegit « [[$1]] »',
 'modifiedarticleprotection' => 'a modificat lo nivèl de proteccion de « [[$1]] »',
-'unprotectedarticle' => 'a desprotegit « [[$1]] »',
+'unprotectedarticle' => 'a suprimit la proteccion de « [[$1]] »',
 'movedarticleprotection' => 'a desplaçat los paramètres de proteccion dempuèi « [[$2]] » cap a « [[$1]] »',
 'protect-title' => 'Cambiar lo nivèl de proteccion de « $1 »',
+'protect-title-notallowed' => 'Veire lo nivèl de proteccion de « $1 »',
 'prot_1movedto2' => 'a renomenat [[$1]] en [[$2]]',
 'protect-legend' => 'Confirmar la proteccion',
 'protectcomment' => 'Rason :',
@@ -2230,9 +2293,9 @@ Clicatz sus « Precedent » e tornatz cargar la pagina d’ont venètz, puèi en
 'protect-locked-access' => "Avètz pas los dreches necessaris per modificar la proteccion de la pagina. Vaquí los reglatges actuals de la pagina '''$1''' :",
 'protect-cascadeon' => "Aquesta pagina es actualament protegida perque es inclusa dins {{PLURAL:$1|la pagina seguenta|las paginas seguentas}}, {{PLURAL:$1|qu'es estada protegida|que son estadas protegidas}} amb l’opcion « proteccion en cascada » activada. Podètz cambiar lo nivèl de proteccion d'aquesta pagina sens qu'aquò afècte la proteccion en cascada.",
 'protect-default' => 'Autorizar totes los utilizaires',
-'protect-fallback' => 'Necessita l’abilitacion «$1»',
-'protect-level-autoconfirmed' => 'Blocar los utilizaires novèls e los utilizaires anonims',
-'protect-level-sysop' => 'Administrators unicament',
+'protect-fallback' => 'Autorizar unicament los utilizaires amb lo drech « $1 »',
+'protect-level-autoconfirmed' => 'Autorizar unicament los utilizaires autoconfirmats',
+'protect-level-sysop' => 'Autorizar unicament los administrators',
 'protect-summary-cascade' => 'proteccion en cascada',
 'protect-expiring' => 'expira lo $1',
 'protect-expiring-local' => 'expira lo $1',
@@ -2324,9 +2387,9 @@ $1",
 'blanknamespace' => '(Principal)',
 
 # Contributions
-'contributions' => "Contribucions d'aqueste contributor",
+'contributions' => "Contribucions de l'{{GENDER:$1|utilizaire|utilizaira}}",
 'contributions-title' => 'Tièra de las contribucions de l’utilizaire $1',
-'mycontris' => 'Mas contribucions',
+'mycontris' => 'Contribucions',
 'contribsub2' => 'Lista de las contribucions de $1 ($2). Las paginas que son estadas escafadas son pas afichadas.',
 'nocontribs' => 'Cap de modificacion correspondenta a aquestes critèris es pas estada trobada.',
 'uctop' => '(darrièra)',
@@ -2366,10 +2429,11 @@ La darrièra intrada del jornal dels blocatges es indicada çaijós a títol d
 'whatlinkshere-hideredirs' => '$1 redireccions',
 'whatlinkshere-hidetrans' => '$1 transclusions',
 'whatlinkshere-hidelinks' => '$1 ligams',
-'whatlinkshere-hideimages' => '$1 ligams de fichièrs',
+'whatlinkshere-hideimages' => '$1 los fichièrs ligats',
 'whatlinkshere-filters' => 'Filtres',
 
 # Block/unblock
+'autoblockid' => 'Blocatge automatic #$1',
 'block' => 'Blocar un utilizaire',
 'unblock' => 'Desblocar un utilizaire',
 'blockip' => 'Blocar en escritura',
@@ -2422,6 +2486,9 @@ a partir d'una adreça IP precedentament blocada.",
 'blocklist' => 'Utilizaires o adreças IP blocats',
 'ipblocklist' => 'Utilizaires o adreças IP blocats',
 'ipblocklist-legend' => 'Cercar un utilizaire blocat',
+'blocklist-target' => 'Cibla',
+'blocklist-expiry' => "Data d'expiracion",
+'blocklist-reason' => 'Motiu',
 'ipblocklist-submit' => 'Recercar',
 'ipblocklist-localblock' => 'Blocatge local',
 'ipblocklist-otherblocks' => '{{PLURAL:$1|Autre blocatge|Autres blocatges}}',
@@ -2503,11 +2570,12 @@ Doblidetz pas de la desvarrolhar quand auretz acabat vòstra operacion de manten
 # Move page
 'move-page' => 'Tornar nomenar $1',
 'move-page-legend' => 'Tornar nomenar una pagina',
-'movepagetext' => "Utilizatz lo formulari çaijós per tornar nomenar una pagina, en desplaçant tot son istoric cap al nom novèl. Lo títol ancian vendrà una pagina de redireccion cap al títol novèl. Los ligams cap al títol de la pagina anciana seràn pas cambiats ; verificatz qu'aqueste desplaçament a pas creat de [[Special:DoubleRedirects|redireccion dobla]] o de [[Special:BrokenRedirects|redireccion copada]].
+'movepagetext' => "Utilizatz lo formulari çaijós per tornar nomenar una pagina, en desplaçant tot son istoric cap al nom novèl. Lo títol ancian vendrà una pagina de redireccion cap al títol novèl. Podètz metre a jorn automaticament las redireccions actualas que puntan cap al títol original. Se causissètz de lo far pas, asseguratz-vos de verificar tota [[Special:DoubleRedirects|redireccion dobla]] o [[Special:BrokenRedirects|redireccion copada]]. Avètz la responsabilitat de vos assegurar que los ligams contunhen de puntar cap a lor destinacion supausada.
 
-Avètz la responsabilitat de vos assegurar que los ligams contunhen de puntar cap a lor destinacion supausada. Una pagina serà pas desplaçada se la pagina del títol novèl existís ja, a mens qu'aquesta darrièra siá voida o en redireccion, e qu’aja pas d’istoric. Aquò vòl dire que podètz tornar nomenar una pagina cap a sa posicion d’origina s'avètz fach una error, mas que podètz pas escafar una pagina qu'existís ja amb aqueste procediment.
+Notatz que la pagina serà '''pas''' renomada s'existís ja una pagina amb lo novèl títol, levat se aquesta darrièra a un istoric de modificacions verge e es una simpla redireccion. Aquò permet de renomenar una pagina cap a sa posicion d'origina se lo desplaçament s'avera erronèu.
 
-'''ATENCION !''' Aquò pòt provocar un cambiament radical e imprevist per una pagina consultada frequentament. Asseguratz-vos de n'aver comprés las consequéncias abans de contunhar.",
+'''ATENCION !'''
+Aquò pòt provocar un cambiament radical e imprevist per una pagina consultada frequentament. Asseguratz-vos de n'aver comprés las consequéncias abans de contunhar.",
 'movepagetalktext' => "La pagina de discussion associada, se presenta, serà automaticament desplaçada amb ''' levat se :'''
 *Desplaçatz una pagina cap a un autre espaci,
 *Una pagina de discussion ja existís amb lo nom novèl, o
@@ -2634,9 +2702,11 @@ Totas las accions d’importacion interwiki son conservadas dins lo [[Special:Lo
 'import-interwiki-templates' => 'Enclure totes los modèls',
 'import-interwiki-submit' => 'Importar',
 'import-interwiki-namespace' => 'Espaci de noms de destinacion :',
+'import-interwiki-rootpage' => 'Pagina raiç de destinacion (opcionala):',
 'import-upload-filename' => 'Nom del fichièr :',
 'import-comment' => 'Comentari :',
-'importtext' => 'Exportatz lo fichièr dempuèi lo wiki d’origina en utilizant l’esplech Special:Export, salvatz-lo sus vòstre disc dur e copiatz-lo aicí.',
+'importtext' => "Exportatz lo fichièr dempuèi lo wiki d’origina en utilizant [[Special:Export|aisina d'exportacion]].
+Salvatz-lo sus vòstre disc dur puèi importatz-lo aicí.",
 'importstart' => 'Impòrt de las paginas...',
 'import-revision-count' => '$1 {{PLURAL:$1|version|versions}}',
 'importnopages' => "Cap de pagina d'importar.",
@@ -2787,9 +2857,36 @@ Aquò es probablament causat per un ligam sus lista negra que punta cap a un sit
 'spam_blanking' => 'Totas las versions que contenon de ligams cap a $1 son blanquidas',
 
 # Info page
+'pageinfo-title' => 'Informacions per « $1 »',
+'pageinfo-header-basic' => 'Informacions de basa',
+'pageinfo-header-edits' => 'Istoric de las modificacions',
+'pageinfo-header-restrictions' => 'Proteccion de la pagina',
+'pageinfo-header-properties' => 'Proprietats de la pagina',
+'pageinfo-display-title' => 'Títol afichat',
+'pageinfo-default-sort' => 'Clau de triada per defaut',
+'pageinfo-length' => 'Talha de la pagina (en octets)',
+'pageinfo-article-id' => 'Numèro de la pagina',
+'pageinfo-robot-policy' => 'Estatut de motor de recèrca',
+'pageinfo-robot-index' => 'Indexable',
+'pageinfo-robot-noindex' => 'Pas indexable',
 'pageinfo-views' => 'Nombre de vistas',
-'pageinfo-edits' => "Nombre d'edicions",
-'pageinfo-authors' => "Nombre d'autors distints",
+'pageinfo-redirects-name' => 'Redireccions cap a aquesta pagina',
+'pageinfo-subpages-name' => "Sospaginas d'aquesta pagina",
+'pageinfo-subpages-value' => '$1 ($2 {{PLURAL:$2|redireccion|redireccions}}; $3 {{PLURAL:$3|non-redireccion|non-redireccions}})',
+'pageinfo-firstuser' => 'Creator de la pagina',
+'pageinfo-firsttime' => 'Data de creacion de la pagina',
+'pageinfo-lastuser' => 'Darrièr contributor',
+'pageinfo-lasttime' => 'Data de la darrièra modificacion',
+'pageinfo-edits' => 'Nombre total de modificacions',
+'pageinfo-authors' => "Nombre total d'autors distinctes",
+'pageinfo-recent-edits' => 'Nombre de modificacions recentas (dins los darrièrs $1)',
+'pageinfo-recent-authors' => "Nombre d'autors distinctes recents",
+'pageinfo-magic-words' => '{{PLURAL:$1|Mot magic|Mots magics}} ($1)',
+'pageinfo-hidden-categories' => '{{PLURAL:$1|Categoria amagada|Categorias amagadas}} ($1)',
+'pageinfo-templates' => '{{PLURAL:$1|Modèl inclús|Modèls incluses}} ($1)',
+'pageinfo-redirectsto-info' => 'info',
+'pageinfo-contentpage-yes' => 'Òc',
+'pageinfo-protect-cascading-yes' => 'Òc',
 
 # Skin names
 'skinname-standard' => 'Estandard',
@@ -2840,11 +2937,19 @@ Se l'executatz, vòstre sistèma pòt èsser compromés.",
 'widthheightpage' => '$1 × $2, $3 {{PLURAL:$3|pagina|paginas}}',
 'file-info' => 'Talha del fichièr: $1, tipe MIME: $2',
 'file-info-size' => '$1 × $2 pixèl, talha del fichièr: $3, tipe MIME: $4',
+'file-info-size-pages' => '$1 × $2 pixèls, talha de fichièr: $3, tipe MIME: $4, $5 {{PLURAL:$5|pagina|paginas}}',
 'file-nohires' => 'Pas de resolucion mai nauta disponibla.',
 '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',
 'show-big-image' => 'Imatge en resolucion mai nauta',
+'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',
 'file-info-gif-looped' => 'en bocla',
 'file-info-gif-frames' => '$1 {{PLURAL:$1|imatge|imatges}}',
+'file-info-png-looped' => 'en bocla',
+'file-info-png-repeat' => 'jogat $1 {{PLURAL:$1|còp|còps}}',
+'file-info-png-frames' => '$1 {{PLURAL:$1|imatge|imatges}}',
 
 # Special:NewFiles
 'newimages' => 'Galariá dels fichièrs novèls',
@@ -2858,6 +2963,13 @@ Se l'executatz, vòstre sistèma pòt èsser compromés.",
 'bydate' => 'per data',
 'sp-newimages-showfrom' => 'Afichar los imatges novèls importats dempuèi lo $2, $1',
 
+# Video information, used by Language::formatTimePeriod() to format lengths in the above messages
+'seconds' => '{{PLURAL:$1|$1 segonda|$1 segondas}}',
+'minutes' => '{{PLURAL:$1|$1 minuta|$1 minutas}}',
+'hours' => '{{PLURAL:$1|$1 ora|$1 oras}}',
+'days' => '{{PLURAL:$1|$1 jorn|$1 jorns}}',
+'ago' => 'I a $1',
+
 # Bad image list
 'bad_image_list' => "Lo format es lo seguent :
 
@@ -2924,8 +3036,8 @@ Los autres ligams sus la meteissa linha son considerats coma d'excepcions, per e
 'exif-colorspace' => 'Espaci colorimetric',
 'exif-componentsconfiguration' => 'Significacion de cada compausanta',
 'exif-compressedbitsperpixel' => 'Mòde de compression de l’imatge',
-'exif-pixelydimension' => 'Largor d’imatge valida',
-'exif-pixelxdimension' => 'Nautor d’imatge valida',
+'exif-pixelydimension' => 'Largor de l’imatge',
+'exif-pixelxdimension' => 'Nautor de l’imatge',
 'exif-usercomment' => "Comentaris de l'utilizaire",
 'exif-relatedsoundfile' => 'Fichièr àudio associat',
 'exif-datetimeoriginal' => 'Data e ora de la generacion de donadas',
@@ -2939,9 +3051,9 @@ Los autres ligams sus la meteissa linha son considerats coma d'excepcions, per e
 'exif-exposureprogram' => 'Programa d’exposicion',
 'exif-spectralsensitivity' => 'Sensibilitat espectrala',
 'exif-isospeedratings' => 'Sensibilitat ISO',
-'exif-shutterspeedvalue' => 'Velocitat d’obturacion',
-'exif-aperturevalue' => 'Dobertura',
-'exif-brightnessvalue' => 'Luminositat',
+'exif-shutterspeedvalue' => "velocitat d’obturacion de l'APEX",
+'exif-aperturevalue' => "Dobertura de l'APEX",
+'exif-brightnessvalue' => 'Luminança APEX',
 'exif-exposurebiasvalue' => 'Correccion d’exposicion',
 'exif-maxaperturevalue' => 'Camp de dobertura maximal',
 'exif-subjectdistance' => 'Distància del subjècte',
@@ -3003,9 +3115,66 @@ Los autres ligams sus la meteissa linha son considerats coma d'excepcions, per e
 'exif-gpsareainformation' => 'Nom de la zòna GPS',
 'exif-gpsdatestamp' => 'Data GPS',
 'exif-gpsdifferential' => 'Correccion diferenciala GPS',
+'exif-jpegfilecomment' => 'Comentari de fichièr JPEG',
+'exif-keywords' => 'Mots claus',
+'exif-worldregiondest' => 'Region del mond representada',
+'exif-countrydest' => 'País representat',
+'exif-countrycodedest' => 'Còde del país representat',
+'exif-provinceorstatedest' => 'Província o Estat representat',
+'exif-citydest' => 'Vila representada',
+'exif-sublocationdest' => 'Partida de la vila representada',
+'exif-objectname' => 'Títol cort',
+'exif-specialinstructions' => 'Instruccions especialas',
+'exif-headline' => 'Títol',
+'exif-credit' => 'Credit / provesidor',
+'exif-source' => 'Font',
+'exif-editstatus' => "Estatut editorial de l'imatge",
+'exif-urgency' => 'Urgéncia',
+'exif-fixtureidentifier' => 'Nom element recurrent',
+'exif-locationdest' => 'Luòc representat',
+'exif-locationdestcode' => 'Còde del luòc representat',
+'exif-objectcycle' => 'Moment de la jornada al qual aqueste mèdia es destinat',
+'exif-contact' => 'Informacions de contacte',
+'exif-writer' => 'Autor',
+'exif-languagecode' => 'Lenga',
+'exif-iimversion' => 'version IIM',
+'exif-iimcategory' => 'Categoria',
+'exif-iimsupplementalcategory' => 'Categorias suplementàrias',
+'exif-datetimeexpires' => 'Utilizar pas aprèp',
+'exif-datetimereleased' => 'Paregut lo',
+'exif-originaltransmissionref' => 'Còde de localizacion de la transmission originala',
+'exif-identifier' => 'Identificant',
+'exif-lens' => 'Lentilha utilizada',
+'exif-serialnumber' => "Numèro de seria de l'aparelh de fòto",
+'exif-cameraownername' => "Proprietari de l'aparelh de fòto",
+'exif-label' => 'Libellat',
+'exif-rating' => 'Nòta (sus 5)',
+'exif-rightscertificate' => 'Certificat de gestion dels dreches',
+'exif-copyrighted' => "Estatut del drech d'autor",
+'exif-copyrightowner' => "Detentor del drech d'autor",
+'exif-usageterms' => "Condicions d'utilizacion",
+'exif-webstatement' => "Declaracion de dreches d'autor en linha",
+'exif-pngfilecomment' => 'Comentari de fichièr JPEG',
+'exif-disclaimer' => 'Desistiment',
+'exif-contentwarning' => 'Avertiment sul contengut',
+'exif-giffilecomment' => 'Comentari de fichièr GIF',
+'exif-intellectualgenre' => "Tipe d'element",
+'exif-subjectnewscode' => 'Còde del subjècte',
+'exif-scenecode' => 'Còde de scèna IPTC',
+'exif-event' => 'Eveniment representat',
+'exif-organisationinimage' => 'Organizacion representada',
+'exif-personinimage' => 'Persona representada',
+'exif-originalimageheight' => "Nautor de l'imatge abans d'èsser requadrada",
+'exif-originalimagewidth' => "Largor de l'imatge abans d'èsser requadrada",
 
 # EXIF attributes
 'exif-compression-1' => 'Sens compression',
+'exif-compression-2' => "CCITT Grop 3 Longor de l'encodatge Huffman modificat de dimension 1",
+'exif-compression-3' => 'CCITT Grop 3 encodatge del fax',
+'exif-compression-4' => 'CCITT Grop 4 encodatge del fax',
+
+'exif-copyrighted-true' => "Somés al drech d'autor",
+'exif-copyrighted-false' => 'Domeni public',
 
 'exif-unknowndate' => 'Data desconeguda',
 
@@ -3014,9 +3183,9 @@ Los autres ligams sus la meteissa linha son considerats coma d'excepcions, per e
 'exif-orientation-3' => 'Virada de 180°',
 'exif-orientation-4' => 'Inversada verticalament',
 'exif-orientation-5' => 'Virada de 90° dins lo sens antiorari e inversada verticalament',
-'exif-orientation-6' => 'Virada de 90° dins lo sens orari',
+'exif-orientation-6' => 'Virada de 90° dins lo sens antiorari',
 'exif-orientation-7' => 'Virada de 90° dins lo sens orari e inversada verticalament',
-'exif-orientation-8' => 'Virada de 90° dins lo sens antiorari',
+'exif-orientation-8' => 'Virada de 90° dins lo sens orari',
 
 'exif-planarconfiguration-1' => 'Donadas atenentas',
 'exif-planarconfiguration-2' => 'Donadas separadas',
@@ -3087,7 +3256,7 @@ Los autres ligams sus la meteissa linha son considerats coma d'excepcions, per e
 'exif-sensingmethod-7' => 'Captador trilinear',
 'exif-sensingmethod-8' => 'Captador de color linear sequencial',
 
-'exif-filesource-3' => 'Aparelh fotografic numeric',
+'exif-filesource-3' => 'Aparelh de fòto numeric',
 
 'exif-scenetype-1' => 'Imatge dirèctament fotografiat',
 
@@ -3137,6 +3306,10 @@ Los autres ligams sus la meteissa linha son considerats coma d'excepcions, per e
 'exif-gpslongitude-e' => 'Longitud Èst',
 'exif-gpslongitude-w' => 'Longitud Oèst',
 
+# Pseudotags used for GPSAltitudeRef
+'exif-gpsaltitude-above-sealevel' => '$1 {{PLURAL:$1|mètre|mètres}} en dessús del nivèl de la mar',
+'exif-gpsaltitude-below-sealevel' => '$1 {{PLURAL:$1|mètre|mètres}} en dejós del nivèl de la mar',
+
 'exif-gpsstatus-a' => 'Mesura en cors',
 'exif-gpsstatus-v' => 'Interoperabilitat de la mesura',
 
@@ -3153,19 +3326,58 @@ Los autres ligams sus la meteissa linha son considerats coma d'excepcions, per e
 'exif-gpsdestdistance-m' => 'Milas anglesas',
 'exif-gpsdestdistance-n' => 'Milas nauticas',
 
+'exif-gpsdop-excellent' => 'Excellenta ($1)',
+'exif-gpsdop-good' => 'Bona ($1)',
+'exif-gpsdop-moderate' => 'Mejana ($1)',
+'exif-gpsdop-fair' => 'Passable ($1)',
+'exif-gpsdop-poor' => 'Marrida ($1)',
+
+'exif-objectcycle-a' => 'Matin solament',
+'exif-objectcycle-p' => 'Serada solament',
+'exif-objectcycle-b' => 'Matin e ser',
+
 # Pseudotags used for GPSTrackRef, GPSImgDirectionRef and GPSDestBearingRef
 'exif-gpsdirection-t' => 'Direccion vertadièra',
 'exif-gpsdirection-m' => 'Nòrd magnetic',
 
+'exif-ycbcrpositioning-1' => 'Centrat',
+'exif-ycbcrpositioning-2' => 'Cosituat',
+
+'exif-dc-contributor' => 'Contributors',
+'exif-dc-coverage' => 'Portada espaciala o temporala del mèdia',
+'exif-dc-date' => 'Data(s)',
+'exif-dc-publisher' => 'Editor',
+'exif-dc-relation' => 'Mèdias connèxes',
+'exif-dc-rights' => 'dreches',
+'exif-dc-source' => 'Mèdia font',
+'exif-dc-type' => 'Tipe de mèdia',
+
+'exif-rating-rejected' => 'Regetat',
+
+'exif-isospeedratings-overflow' => 'Mai grand que 65535',
+
+'exif-iimcategory-ace' => 'Arts, cultura e lésers',
+'exif-iimcategory-clj' => 'Crime e drech',
+'exif-iimcategory-dis' => 'Catastròfas e accidents',
+'exif-iimcategory-fin' => 'Economia e afars',
 'exif-iimcategory-edu' => 'Educacion',
 'exif-iimcategory-evn' => 'Environament',
 'exif-iimcategory-hth' => 'Santat',
+'exif-iimcategory-hum' => 'Interès uman',
 'exif-iimcategory-lab' => 'Tribailh',
+'exif-iimcategory-lif' => 'Mòde de vida e de lésers',
 'exif-iimcategory-pol' => 'Politic',
 'exif-iimcategory-rel' => 'Religion e cresenças',
 'exif-iimcategory-sci' => 'Sciéncia e tecnologia',
+'exif-iimcategory-soi' => 'Questions socialas',
 'exif-iimcategory-spo' => 'Espòrts',
 'exif-iimcategory-war' => 'Guèrra, conflictes',
+'exif-iimcategory-wea' => 'Metèo',
+
+'exif-urgency-normal' => 'Normala ($1)',
+'exif-urgency-low' => 'Febla ($1)',
+'exif-urgency-high' => 'Nauta ($1)',
+'exif-urgency-other' => "Urgéncia definida per l'utilizaire ($1)",
 
 # External editor support
 'edit-externally' => 'Modificar aqueste fichièr en utilizant una aplicacion extèrna',
@@ -3370,7 +3582,7 @@ Picatz lo nom del fichièr sens lo prefix « {{ns:file}}: »",
 * <strong class="mw-specialpagerestricted">en gras</strong> son restrenhudas.',
 'specialpages-group-maintenance' => 'Rapòrts de mantenença',
 'specialpages-group-other' => 'Autras paginas especialas',
-'specialpages-group-login' => 'Se connectar / s’enregistrar',
+'specialpages-group-login' => "S'identificar / s'inscriure",
 'specialpages-group-changes' => 'Darrièrs cambiaments e jornals',
 'specialpages-group-media' => 'Rapòrts dels fichièrs de mèdias e dels impòrts',
 'specialpages-group-users' => 'Utilizaires e dreches estacats',
@@ -3409,9 +3621,15 @@ Picatz lo nom del fichièr sens lo prefix « {{ns:file}}: »",
 'tags-hitcount' => '$1 {{PLURAL:$1|cambiament|cambiaments}}',
 
 # Special:ComparePages
+'comparepages' => 'Comparar de paginas',
+'compare-selector' => 'Comparar las versions de las paginas',
 'compare-page1' => 'Pagina 1',
 'compare-page2' => 'Pagina 2',
+'compare-rev1' => 'Version 1',
+'compare-rev2' => 'Version 2',
 'compare-submit' => 'Comparar',
+'compare-invalid-title' => "Lo títol qu'avètz especificat es incorrècte.",
+'compare-title-not-exists' => "Lo títol qu'avètz especificat existís pas",
 
 # Database error messages
 'dberr-header' => 'Aqueste wiki a un problèma',
@@ -3435,12 +3653,50 @@ Picatz lo nom del fichièr sens lo prefix « {{ns:file}}: »",
 'htmlform-selectorother-other' => 'Autre',
 
 # New logging system
+'revdelete-content-hid' => 'contengut amagat',
+'revdelete-summary-hid' => 'resumit de modificacion amagat',
+'revdelete-uname-hid' => 'nom d’utilizaire amagat',
+'revdelete-content-unhid' => 'contengut afichat',
+'revdelete-summary-unhid' => 'resumit de modificacion afichat',
+'revdelete-uname-unhid' => 'nom d’utilizaire afichat',
 'revdelete-restricted' => 'aplicar las restriccions als administrators',
 'revdelete-unrestricted' => 'restriccions levadas pels administrators',
-'newuserlog-byemail' => 'senhal mandat per corrièr electronic',
+'logentry-move-move' => '$1 a deplaçat la pagina $3 cap a $4',
+'logentry-move-move-noredirect' => '$1 a deplaçat la pagina $3 cap a $4 sens daissar cap de redireccion',
+'logentry-move-move_redir' => '$1 a deplaçat la pagina $3 cap a $4 per dessús una redireccion',
+'logentry-move-move_redir-noredirect' => '$1 a deplaçat la pagina $3 cap a $4 per dessús una redireccion sens daissar cap de redireccion',
+'logentry-newusers-newusers' => "Lo compte d'utilizaire $1 es estat creat",
+'logentry-newusers-create' => "Lo compte d'utilizaire $1 es estat creat",
+'logentry-newusers-create2' => "Lo compte d'utilizaire $3 es estat creat per $1",
+'logentry-newusers-autocreate' => 'Lo compte $1 es estat creat automaticament',
+'rightsnone' => '(cap)',
+
+# Feedback
+'feedback-subject' => 'Subjècte :',
+'feedback-message' => 'Messatge :',
+'feedback-cancel' => 'Anullar',
+'feedback-submit' => 'Mandar vòstres comentaris',
+'feedback-close' => 'Fach',
 
 # Search suggestions
 'searchsuggest-search' => 'Recercar',
 'searchsuggest-containing' => 'que conten...',
 
+# API errors
+'api-error-unknown-code' => 'Error desconeguda : « $1 »',
+'api-error-unknown-warning' => 'Avertiment desconegut : $1',
+'api-error-unknownerror' => 'Error desconeguda : « $1 »',
+'api-error-uploaddisabled' => 'Lo cargament es desactivat sus aqueste wiki.',
+
+# Durations
+'duration-seconds' => '$1 segonda{{PLURAL:$1||s}}',
+'duration-minutes' => '$1 minuta{{PLURAL:$1||s}}',
+'duration-hours' => '$1 ora{{PLURAL:$1||s}}',
+'duration-days' => '$1 jorn{{PLURAL:$1||s}}',
+'duration-weeks' => '$1 setmana{{PLURAL:$1||s}}',
+'duration-years' => '$1 annada{{PLURAL:$1||s}}',
+'duration-decades' => '$1 decenni{{PLURAL:$1||s}}',
+'duration-centuries' => '$1 sègle{{PLURAL:$1||s}}',
+'duration-millennia' => '$1 milleni{{PLURAL:$1||s}}',
+
 );
index 6db7ce9..ed778b7 100644 (file)
@@ -304,7 +304,7 @@ $messages = array(
 
 'underline-always' => 'ସବୁବେଳେ',
 'underline-never' => 'କେବେନୁହେଁ',
-'underline-default' => 'ବ୍ରାଉଜରରେ ଆଗରୁ ଥିବା ସୁବିଧା',
+'underline-default' => 'ବ୍ରାଉଜର କିମ୍ବା ସ୍କିନରେ ଆଗରୁ ଥିବା ସୁବିଧା',
 
 # Font style option in Special:Preferences
 'editfont-style' => 'ଫଣ୍ଟ ଶୈଳୀକୁ ବଦଳାଇବେ:',
@@ -389,7 +389,8 @@ $messages = array(
 'newwindow' => '(ଏହା ନୂଆ ଉଇଣ୍ଡୋରେ ଖୋଲିବ)',
 'cancel' => 'ନାକଚ',
 'moredotdotdot' => 'ଅଧିକ...',
-'mypage' => 'ମୋ ପୃଷ୍ଠା',
+'morenotlisted' => 'ଆଉ ଅଧିକ ତାଲିକାଭୁକ୍ତ ହୋଇନାହିଁ...',
+'mypage' => 'ପୃଷ୍ଠା',
 'mytalk' => 'ଆଲୋଚନା',
 'anontalk' => 'ଏହି ଆଇ.ପି. ଠିକଣା ଉପରେ ଆଲୋଚନା',
 'navigation' => 'ଦିଗବାରେଣି',
@@ -412,7 +413,7 @@ $messages = array(
 'vector-action-protect' => 'କିଳିବେ',
 'vector-action-undelete' => 'ଲିଭାଇବେ ନାହିଁ',
 'vector-action-unprotect' => 'କିଳିବେ ନାହିଁ',
-'vector-simplesearch-preference' => 'à¬\86ହà­\81ରି à¬\85ଧିà¬\95 à¬\96à­\8bà¬\9cା à¬®à¬¤à¬¾à¬®à¬¤ à¬\97à­\81ଡ଼ିà¬\95 ସଚଳ କରିବେ (କେବଳ ଭେକ୍ଟର ସ୍କିନ)',
+'vector-simplesearch-preference' => 'ସହà¬\9c à¬\96à­\8bà¬\9cା à¬¬à¬¾à¬°à¬\9fିà¬\95à­\81 ସଚଳ କରିବେ (କେବଳ ଭେକ୍ଟର ସ୍କିନ)',
 'vector-view-create' => 'ଗଢ଼ନ୍ତୁ',
 'vector-view-edit' => 'ଏହାକୁ ବଦଳାନ୍ତୁ',
 'vector-view-history' => 'ଇତିହାସ',
@@ -422,6 +423,7 @@ $messages = array(
 'namespaces' => 'ନେମସ୍ପେସ',
 'variants' => 'ନିଆରା',
 
+'navigation-heading' => 'ଦିଗବାରେଣୀ ମିନୁ',
 'errorpagetitle' => 'ଭୁଲ',
 'returnto' => '$1କୁ ଫେରିଯାନ୍ତୁ ।',
 'tagline' => '{{SITENAME}} ରୁ',
@@ -630,13 +632,13 @@ $1',
 'actionthrottled' => 'କାମଟି ବନ୍ଦ କରିଦିଆଗଲା',
 'actionthrottledtext' => 'ସ୍ପାମକୁ ବନ୍ଦ କରିବା ନିମନ୍ତେ ଏକ ଅଳ୍ପ ସମୟ ବିରତି ଭିତରେ ଆପଣଙ୍କୁ ଏହି କାମଟୀ ବାରମ୍ବାର କରିବାକୁ ଅନୁମତି ଦିଆଯାଉନାହିଁ ଓ ଆପଣ ସୀମା ପାର କରିଯାଇଛନ୍ତି ।
 ଦୟାକରି କିଛି ସମୟ ପରେ ଚେଷ୍ଟା କରନ୍ତୁ ।',
-'protectedpagetext' => 'ଏହି ପୃଷ୍ଠାଟି ସମ୍ପାଦନା କରିବାରୁ କିଳାଯାଇଛି ।',
+'protectedpagetext' => 'à¬\8fହି à¬ªà­\83ଷà­\8dଠାà¬\9fି à¬¸à¬®à­\8dପାଦନା à¬\95ିମà­\8dବା à¬\85ନà­\8dà­\9fà¬\95à­\8cଣସି à¬\95ାରà­\8dଯà­\8dà­\9f à¬\95ରିବାରà­\81 à¬\95ିଳାଯାà¬\87à¬\9bି à¥¤',
 'viewsourcetext' => 'ଆପଣ ଏହି ପୃଷ୍ଠାର ଲେଖା ଦେଖିପାରିବେ ଓ ନକଲ କରିପାରିବେ:',
 'viewyourtext' => "ଆପଣ '''ଆପଣଙ୍କ ସମ୍ପାଦିତ ''' ଅଧରଟିକୁ ଦେଖିପାରିବେ ଓ ଏହି ପୃଷ୍ଠାକୁ ନକଲ କରି ପାରିବେ",
-'protectedinterface' => 'à¬\8fହି à¬ªà­\83ଷà­\8dଠାà¬\9fି à¬¸à¬«à­\8dà¬\9fବà­\87ର à¬¨à¬¿à¬®à¬¨à­\8dତà­\87 à¬\87ଣà­\8dà¬\9fରଫà­\87ସ à¬²à­\87à¬\96ା à¬¯à­\8bà¬\97ାà¬\87ଥାà¬\8f à¬\93 à¬\8fହା à¬\85ବà­\8dà­\9fବହାରà¬\95à­\81 à¬°à­\8bà¬\95ିବା à¬¨à¬¿à¬®à¬¨à­\8dତà­\87 à¬\95ିଳାଯାà¬\87à¬\85à¬\9bି ।',
+'protectedinterface' => 'à¬\8fହି à¬ªà­\83ଷà­\8dଠାà¬\9fି à¬\8fହି à¬\89à¬\87à¬\95ିରà­\87 à¬¥à¬¿à¬¬à¬¾ à¬¸à¬«à­\8dà¬\9fà­±à­\87ର à¬¨à¬¿à¬®à¬¨à­\8dତà­\87 à¬\87ଣà­\8dà¬\9fରଫà­\87ସ à¬²à­\87à¬\96ା à¬¯à­\8bà¬\97ାà¬\87ଥାà¬\8f à¬\93 à¬\8fହା à¬\85ବà­\8dପà­\9fବହାରà¬\95à­\81 à¬°à­\8bà¬\95ିବା à¬¨à¬¿à¬®à¬¨à­\8dତà­\87 à¬\95ିଳାଯାà¬\87à¬\85à¬\9bି à¥¤ à¬¸à¬®à¬¸à­\8dତ à¬\89à¬\87à¬\95ିର à¬\85ନà­\81ବାଦà¬\95à­\81 à¬¯à­\8bଡିବା à¬\8fବà¬\82 à¬¬à¬¦à¬³à¬¾à¬\87ବା à¬ªà¬¾à¬\87à¬\81 à¬®à­\87ଡିà¬\86à¬\89à¬\87à¬\95ିର à¬¸à­\8dଥାନà­\80à­\9f à¬ªà­\8dରà¬\95ଳà­\8dପରà­\87 à¬¥à¬¿à¬¬à¬¾ [//translatewiki.net/ translatewiki.net]à¬\95à­\81 à¬¬à­\8dà­\9fବହାର à¬\95ରନà­\8dତà­\81 ।',
 'editinginterface' => "'''ଚେତାବନୀ:''' ଆପଣ ସଫ୍ଟବେରର ଇଣ୍ଟରଫେସ ଲେଖା ଯୋଗାଇବା ନିମନ୍ତେ ବ୍ୟବହାର କରାଯାଉଥିବା ଏକ ପୃଷ୍ଠାର ସମ୍ପାଦନା କରୁଅଛନ୍ତି ।
-ଏହି ପୃଷ୍ଠାର କିଛି ବି ବଦଳ ବାକି ସଭ୍ୟମାନଙ୍କ ଇଣ୍ଟରଫେସର ଦେଖଣାକୁ ପ୍ରଭାବିତ କରିବ ।
-ଅନୁବାଦ ନିମନ୍ତେ, ଦୟାକରି ମିଡ଼ିଆଉଇକିର ସ୍ଥାନୀୟକରଣ ପ୍ରକଳ୍ପ [//translatewiki.net/wiki/Main_Page?setlang=en translatewiki.net] ବ୍ୟବହାର କରନ୍ତୁ ।",
+à¬\8fହି à¬\89à¬\87à¬\95ିପà­\83ଷà­\8dଠାର à¬\95ିà¬\9bି à¬¬à¬¿ à¬¬à¬¦à¬³ à¬¬à¬¾à¬\95ି à¬¸à¬­à­\8dà­\9fମାନà¬\99à­\8dà¬\95 à¬\87ଣà­\8dà¬\9fରଫà­\87ସର à¬¦à­\87à¬\96ଣାà¬\95à­\81 à¬ªà­\8dରଭାବିତ à¬\95ରିବ à¥¤
+ସମସà­\8dତ à¬\89à¬\87à¬\95ିର à¬\85ନà­\81ବାଦ à¬¨à¬¿à¬®à¬¨à­\8dତà­\87, à¬¦à­\9fାà¬\95ରି à¬®à¬¿à¬¡à¬¼à¬¿à¬\86à¬\89à¬\87à¬\95ିର à¬¸à­\8dଥାନà­\80à­\9fà¬\95ରଣ à¬ªà­\8dରà¬\95ଳà­\8dପ [//translatewiki.net/wiki/Main_Page?setlang=en translatewiki.net] à¬¬à­\8dà­\9fବହାର à¬\95ରନà­\8dତà­\81 à¥¤",
 'sqlhidden' => '(SQL ପ୍ରଶ୍ନ ଲୁଚାଯାଇଅଛି)',
 'cascadeprotected' => 'ଏହି ପୃଷ୍ଠା ସମ୍ପାଦନା କରିବାରୁ କିଳାଯାଇଅଛି, କାରଣ ଏଥିରେ ତଳଲିଖିତ {{PLURAL:$1|ପୃଷ୍ଠାଟିଏ ଅଛି|ଟି ପୃଷ୍ଠା ଅଛି}} ଯାହା "କ୍ୟାସକେଡ଼ କରା" ସୁବିଧା ଦେଇ କିଳାଯାଇଅଛି ।:
 $2',
@@ -665,6 +667,8 @@ $2',
 ଆପଣ ଅଜଣା ଭାବରେ {{SITENAME}}କୁ ଯାଇପାରିବେ, କିମ୍ବା <span class='plainlinks'>[$1 ଆଉଥରେ]</span> ଆଗର ଇଉଜର ନାଆଁରେ/ଅଲଗା ନାଆଁରେ ଲଗଇନ କରିପାରିବେ ।
 ଜାଣିରଖନ୍ତୁ, କିଛି ପୃଷ୍ଠା ଲଗାଆଉଟ କଲାପରେ ବି ଆଗପରି ଦେଖାଯାଇପାରେ, ଆପଣ ବ୍ରାଉଜର କାସକୁ ହଟାଇଲା ଯାଏଁ ଏହା ଏମିତି ରହିବ ।",
 'welcomeuser' => 'ସ୍ଵାଗତ, $1!',
+'welcomecreation-msg' => 'ଆପଣଙ୍କ ଖାତାଟି ଖୋଲାଗଲା
+ନିଜର [[Special:Preferences|{{SITENAME}} ପସନ୍ଦସବୁକୁ]] ବଦଳାଇବାକୁ ଭୁଲିବେ ନାହିଁ ।',
 'yourname' => 'ବ୍ୟବହାରକାରୀଙ୍କ ନାମ:',
 'yourpassword' => 'ପାସୱାର୍ଡ଼',
 'yourpasswordagain' => 'ପାସୱାର୍ଡ଼ ଆଉଥରେ:',
@@ -768,6 +772,7 @@ continue using your old password.',
 # E-mail sending
 'php-mail-error-unknown' => 'PHP ର ମେଲ() କାମରେ ଅଜଣା ଅସୁବିଧା ।',
 'user-mail-no-addy' => 'ଏକ ଇ-ମେଲ ଠିକଣା ବିନା ଇ-ମେଲ ପଠାଇବାକୁ ଚେଷ୍ଟା କଲୁଁ ।',
+'user-mail-no-body' => 'ଏକ ଖାଲି କିମ୍ବା ଅଦରକାରୀ ଛୋଟ ଲେଖା ଥିବା ମେଲ ପଠେଇବାକୁ ଚେଷ୍ଟା କରିଥିଲେ',
 
 # Change password dialog
 'resetpass' => 'ପାସୱାର୍ଡ଼ ବଦଳାନ୍ତୁ',
@@ -831,6 +836,7 @@ $2
 'changeemail-oldemail' => 'ଏବେକାର ଇ-ମେଲ ଠିକଣା:',
 'changeemail-newemail' => 'ନୂଆ ଇ-ମେଲ ଠିକଣା:',
 'changeemail-none' => '(କିଛି ନାହିଁ)',
+'changeemail-password' => 'ଆପଣଙ୍କ {{SITENAME}} ପାସୱାର୍ଡ',
 'changeemail-submit' => 'ଇ-ମେଲ ପରିର୍ବତ୍ତନ କରନ୍ତୁ',
 'changeemail-cancel' => 'ନାକଚ',
 
@@ -961,7 +967,7 @@ $1 ଦ୍ଵାରା ପ୍ରତିରୋଧ କରାଯାଇଛି
 'note' => "'''ଟୀକା:'''",
 'previewnote' => "'''ଜାଣିରଖନ୍ତୁ ଯେ, ଏହା କେବଳ ଏକ ଦେଖଣା ।'''
 ଆପଣ କରିଥିବା ବଦଳସବୁ ଏଯାଏଁ ସାଇତା ଯାଇନାହିଁ!",
-'continue-editing' => 'ବଦଳାà¬\87ବା à¬\9cାରି à¬°à¬\96ନ୍ତୁ',
+'continue-editing' => 'ବଦଳାà¬\87ବା à¬\9cାà¬\97ାà¬\95à­\81 à¬¯à¬¾à¬\85ନ୍ତୁ',
 'previewconflict' => 'ଉପରେ ଦିଶୁଥିବା ଏହି ଦେଖଣାକୁ ସାଇତିଲେ ଏହା ଏକାପରି ଦେଖାଯିବ ।',
 'session_fail_preview' => "'''କ୍ଷମା କରିବେ! ଅବଧି ତଥ୍ୟ ନଷ୍ଟ ହୋଇଯାଇଥିବାରୁ ଆମେ ଆପଣଙ୍କ ବଦଳସବୁକୁ ଗ୍ରହଣ କରିପାରିଲୁ ନାହିଁ ।'''
 ଦୟାକରି ଆଉଥରେ ଚେଷ୍ଟା କରନ୍ତୁ ।
@@ -1020,7 +1026,6 @@ $1 ଦ୍ଵାରା ପ୍ରତିରୋଧ କରାଯାଇଛି
 'template-protected' => '(କିଳାଯାଇଥିବା)',
 'template-semiprotected' => '(ଅଧା କିଳାଯାଇଥିବା)',
 'hiddencategories' => 'ଏହି ପୃଷ୍ଠାଟି {{PLURAL:$1|ଲୁଚାଯାଇଥିବା ଶ୍ରେଣୀ|$1ଟି ଲୁଚାଯାଇଥିବା ଶ୍ରେଣୀସମୂହ}} ଭିତରୁ ଗୋଟିଏ:',
-'nocreatetitle' => 'ପୃଷ୍ଠା ଗଢ଼ିବାକୁ ସୀମିତ କରାଯାଇଅଛି',
 'nocreatetext' => '{{SITENAME}} ନୂଆ ପୃଷ୍ଠା ତିଆରି କରିବାକୁ ବାରଣ କରିଅଛନ୍ତି ।
 ଆପଣ ପଛକୁ ଫେରି ଆଗରୁ ଥିବା ପୃଷ୍ଠାଟିଏର ସମ୍ପାଦନା କରିପାରିବେ କିମ୍ବା [[Special:UserLogin|ଲଗ ଇନ କରିପାରିବେ ବା ନୂଆ ଖାତାଟିଏ ତିଆରି କରିପାରିବେ]] ।',
 'nocreate-loggedin' => 'ଆପଣଙ୍କୁ ନୂଆ ପୃଷ୍ଠାଟିଏ ତିଆରିବା ନିମନ୍ତେ ଅନୁମତି ମିଳି ନାହିଁ ।',
@@ -1045,9 +1050,15 @@ $1 ଦ୍ଵାରା ପ୍ରତିରୋଧ କରାଯାଇଛି
 'edit-already-exists' => 'ନୂଆ ପୃଷ୍ଠାଟିଏ ତିଆରି କରିପାରିଲୁଁ ନାହିଁ ।
 ଏହା ଅଗରୁ ଅଛି ।',
 'defaultmessagetext' => 'ଡିଫଲ୍ଟ ମେସେଜ ଲେଖାଗୁଡିକ',
+'content-failed-to-parse' => '$1 ପ୍ରକାର ପାଇଁ $2 ଲେଖାକୁ ବର୍ଣ୍ଣନା କରିପାରିଲା ନାହିଁ: $3',
+'invalid-content-data' => 'ଅବୈଧ ଆଧାର ତଥ୍ୟ',
+'content-not-allowed-here' => '"$1" ବିଷୟଗୁଡିକ [[$2]]ପୃଷ୍ଠାରେ ରହିପାରିବ ନାହିଁ',
 
 # Content models
 'content-model-wikitext' => 'ଉଇକିଟେକ୍ସଟ',
+'content-model-text' => 'ଖାଲି ଲେଖା',
+'content-model-javascript' => 'ଜାଭାସ୍କ୍ରିପ୍ଟ',
+'content-model-css' => 'CSS',
 
 # Parser/template warnings
 'expensive-parserfunction-warning' => "'''ଚେତାବନୀ:''' ଏହି ପୃଷ୍ଠାରେ ଅନେକ ଗୁଡ଼ିଏ ମୂଲ୍ୟବାନ ପାର୍ସର ଫଙ୍କସନ କଲ ଅଛି ।
@@ -1205,10 +1216,9 @@ $1",
 'revdelete-only-restricted' => '$2 ଦିନ, $1 ବେଳେ ବସ୍ତୁଟି ଲୁଚାଇବା ବେଳେ ଅସୁବିଧାଟିଏ ଘଟିଲା: ଆପଣ ଦେଖଣା ବିକଳ୍ପମାନ ବ୍ୟବହାର ନକରି ବସ୍ତୁସବୁ ପରିଛାମାନଙ୍କ ଦେଇ ଦେଖାଯିବାରୁ ଅଟକାଇପାରିବେ ନାହିଁ ।',
 'revdelete-reason-dropdown' => '*ସାଧାରଣ ଲିଭାଇବା କାରଣମାନ
 ** ସତ୍ଵାଧିକାର ଉଲ୍ଲଙ୍ଘନ
-** ଭୁଲ ଆତ୍ମ ବିବରଣୀ
-** ସମ୍ଭାବିତ ଅପମାନଜନକ ବିବରଣୀ
-** ଭୁଲ ନାମ
-** ଆବଶ୍ୟକ ନାହିଁ',
+** ଭୁଲ ଆତ୍ମ ବିବରଣୀ କିମ୍ବା ଖରାପ ମନ୍ତବ୍ୟ
+** ଭୁଲ ବ୍ୟବହାରକାରୀ ନାମ
+** ପ୍ରାୟ ଭୁଲ ତଥ୍ୟ',
 'revdelete-otherreason' => 'ବାକି/ଅଧିକ କାରଣ:',
 'revdelete-reasonotherlist' => 'ଅଲଗା କାରଣ',
 'revdelete-edit-reasonlist' => 'ଲିଭାଇବା କାରଣମାନ ବଦଳାଇବେ',
@@ -1251,6 +1261,8 @@ $1",
 
 # Diffs
 'history-title' => '"$1" ର ପୁନରାବୃତି ଇତିହାସ',
+'difference-title' => '"$1"ର ପୁନରାବୃତିଗୁଡିକରେ ପାର୍ଥକ୍ୟ',
+'difference-title-multipage' => 'ପୃଷ୍ଠା "$1" ଏବଂ "$2" ମଧ୍ୟରେ ଥିବା ପାର୍ଥକ୍ୟ',
 'difference-multipage' => '(ପୃଷ୍ଠା ଭିତରେ ଥିବା ତଫାତ)‌',
 'lineno' => '$1 କ ଧାଡ଼ି:',
 'compareselectedversions' => 'ବଛାହୋଇଥିବା ସଙ୍କଳନ ଗୁଡ଼ିକୁ ତଉଲିବେ',
@@ -1258,6 +1270,10 @@ $1",
 'editundo' => 'ପଛକୁ ଫେରିବା',
 'diff-multi' => '({{PLURAL:$2|ଜଣେ ବ୍ୟବହାରକାରୀ|$2 ଜଣ ବ୍ୟବହାରକାରୀ}}ଙ୍କ ଦେଇ ହୋଇଥିବା {{PLURAL:$1|ଗୋଟିଏ ମଝି ସଙ୍କଳନ|$1ଟି ମଝି ସଙ୍କଳନ}} ଦେଖାଯାଉନାହିଁ)',
 'diff-multi-manyusers' => '($2 {{PLURAL:$2|ଜଣ|ଜଣ}} ସଭ୍ୟଙ୍କ ଦେଇ କରାଯାଇଥିବା {{PLURAL:$1|ଗୋଟିଏ ମଝି ସଂସ୍କରଣ|$1 ଗୋଟି ମଝି ସଂସ୍କରଣମାନ}} ଦେଖାଯାଉ ନାହିଁ)',
+'difference-missing-revision' => '($1) {{PLURAL:$2|was|were}}ର ଭିନ୍ନତା {{PLURAL:$2|One revision|$2 revisions}} ମିଳିଲା ନାହିଁ ।
+
+ପୁରୁଣା ହୋଇଯାଇଥିବା ଇତିହାସ ଲିଙ୍କ ଯାହା ଏକ ଲିଭାଯାଇଥିବା ପୃଷ୍ଠାକୁ ଦିଆଯାଇଥିବାରୁ ଏହା ସାଧାରଣତଃ ହୋଇଥାଏ ।
+ଅଧିକ ବିବରଣୀ [{{fullurl:{{#Special:Log}}/delete|page={{FULLPAGENAMEE}}}} deletion log]ରେ ମିଳିପାରିବ ।',
 
 # Search results
 'searchresults' => 'ଖୋଜା ଫଳାଫଳ',
@@ -1398,7 +1414,7 @@ $1",
 'timezoneregion-indian' => 'ଭାରତୀୟ ମହାସାଗର',
 'timezoneregion-pacific' => 'ପ୍ରଶାନ୍ତ ମହାସାଗର',
 'allowemail' => 'ବାକି ସଭ୍ୟମାନଙ୍କ ଠାରୁ ଆସିଥିବା ଇ-ମେଲ ସଚଳ କରାଇବେ',
-'prefs-searchoptions' => 'à¬\96à­\8bà¬\9cିବା à¬¬à¬¿à¬\95ଳà­\8dପ',
+'prefs-searchoptions' => 'à¬\96à­\8bà¬\9cିବà­\87',
 'prefs-namespaces' => 'ନେମସ୍ପେସ',
 'defaultns' => 'ନଚେତ ଏହି ନେମସ୍ପେସ ଗୁଡ଼ିକରେ ଖୋଜନ୍ତୁ:',
 'default' => 'ପୂର୍ବ ନିର୍ଦ୍ଧାରିତ',
@@ -1411,9 +1427,9 @@ $1",
 'prefs-emailconfirm-label' => 'ଇ-ମେଲ ସଜାଣି:',
 'prefs-textboxsize' => 'ସମ୍ପାଦନା ଘରର ଆକାର',
 'youremail' => 'ଇ-ମେଲ:',
-'username' => 'ବ୍ୟବହାରକାରୀଙ୍କ ନାମ:',
-'uid' => 'ବ୍ୟବହାରକାରୀ ଆଇଡ଼ି:',
-'prefs-memberingroups' => '{{PLURAL:$1|ଗୋଠ|ଗୋଠ ସମୂହ}}ର ସଭ୍ୟ:',
+'username' => '{{GENDER:$1|Username}}:',
+'uid' => '{{GENDER:$1|User}} ID:',
+'prefs-memberingroups' => '{{PLURAL:$1|group|groups}}:ର {{GENDER:$2|Member}}',
 'prefs-registration' => 'ନାମଲେଖା ବେଳା:',
 'yourrealname' => 'ପ୍ରକୃତ ନାମ:',
 'yourlanguage' => 'ଭାଷା:',
@@ -1528,6 +1544,7 @@ HTML ଟାଗ ପରଖିନିଅନ୍ତୁ ।',
 'right-writeapi' => 'API ଲେଖାର ବ୍ୟବହାର',
 'right-delete' => 'ପୃଷ୍ଠାଟି ଲିଭାଇଦେବେ',
 'right-bigdelete' => 'ବଡ଼ ଇତିହାସ ନଥିବା ପୃଷ୍ଠାସବୁକୁ ଲିଭାଇଦେବେ',
+'right-deletelogentry' => 'କୌଣସି ଏକ ତାଲିକା ବିବରଣୀକୁ ଲିଭାଇବେ ଏବଂ ଏବଂ ଲିଭାଇବାରୁ ବାରଣ କରିବେ',
 'right-deleterevision' => 'ଏକ ପୃଷ୍ଠାର ନିର୍ଦ୍ଦିଷ୍ଟ ସଙ୍କଳନମାନ ଲିଭାଇବେ ଓ ଲିଭାଇବାରୁ ରୋକିବେ',
 'right-deletedhistory' => 'ଯୋଡ଼ାଯାଇଥିବା ଲେଖାକୁ ବାଦ ଦେଇ ଲିଭାଯାଇଥିବା ପୃଷ୍ଠାର ଇତିହାସ ଦେଖିବେ',
 'right-deletedtext' => 'ଲିଭାଇ ଦିଆଯାଇଥିବା ଲେଖା ଓ ଲିଭାଇ ଦିଆଯାଇଥିବା ଲେଖା ଭିତରର ସଙ୍କଳନର ବଦଳ ଦେଖିବେ',
@@ -1564,12 +1581,13 @@ HTML ଟାଗ ପରଖିନିଅନ୍ତୁ ।',
 'right-sendemail' => 'ବାକି ସଭ୍ୟ ମାନଙ୍କୁ ଇ-ମେଲ ପଠାଇବେ',
 'right-passwordreset' => 'ପାସୱାର୍ଡ଼ ପୁନସ୍ଥାପନ ଇମେଲ କରିବେ',
 
+# Special:Log/newusers
+'newuserlogpage' => 'ବ୍ୟବହାରକାରୀ ତିଆରି ଲଗ',
+'newuserlogpagetext' => 'ସଭ୍ୟଙ୍କର ଖାତା ଗଠନ ପାଇଁ ଏକ ଇତିହାସ ଅଛି ।',
+
 # User rights log
 'rightslog' => 'ସଭ୍ୟଙ୍କ ଅଧିକାରର ଲଗ',
 'rightslogtext' => 'ସଭ୍ୟଙ୍କ ଅଧିକାର ବଦଳର ଏହା ଏକ ଇତିହାସ ।',
-'rightslogentry' => '$1 ପାଇଁ ଗୋଠ ସଭ୍ୟପଦର ଅବସ୍ଥା $2 ରୁ $3କୁ ବଦଳାଇଦିଆଗଲା',
-'rightslogentry-autopromote' => '$2 ରୁ $3କୁ ଆପେଆପେ ଉନ୍ନୀତ କରାଗଲା',
-'rightsnone' => '(କିଛି ନାହିଁ)',
 
 # Associated actions - in the sentence "You do not have permission to X"
 'action-read' => 'ଏହି ପୃଷ୍ଠାଟି ପଢ଼ିବେ',
@@ -1638,9 +1656,11 @@ HTML ଟାଗ ପରଖିନିଅନ୍ତୁ ।',
 'number_of_watching_users_pageview' => '[$1 {{PLURAL:$1|ସଭ୍ୟ|ସଭ୍ୟଗଣା}}ଙ୍କୁ ଦେଖୁଅଛି]',
 'rc_categories' => 'ଶ୍ରେଣୀସମୂହ ପାଇଁ ସୀମା ( "|" ଦେଇ ଅଲଗା କରିବେ)',
 'rc_categories_any' => 'ଯେ କୌଣସି',
+'rc-change-size-new' => 'ବଦଳପରେ $1 {{PLURAL:$1|byte|bytes}}',
 'newsectionsummary' => '/* $1 */ ନୂଆ ଭାଗ',
 'rc-enhanced-expand' => 'ପୁରା ଦେଖାଇବେ (ଜାଭାସ୍କ୍ରିପ୍ଟ ଦରକାର)',
 'rc-enhanced-hide' => 'ବେଶି କଥାସବୁ ଲୁଚାଇଦିଅ',
+'rc-old-title' => 'ପ୍ରକୃତରେ "$1" ଭାବେ ତିଆରି କରାଯାଇକଥିଲା',
 
 # Recent changes linked
 'recentchangeslinked' => 'ଏଇମାତ୍ର ବଦଳାଯାଇଥିବା ପୃଷ୍ଠାର ଲିଙ୍କ',
@@ -1794,6 +1814,7 @@ $1',
 'upload-too-many-redirects' => 'ଏହି URL ଟିରେ ଅନେକ ଗୁଡ଼ିଏ ଫେରନ୍ତା ଲିଙ୍କ ଅଛି',
 'upload-unknown-size' => 'ଅଜଣା ଆକାର',
 'upload-http-error' => 'HTTP ଅସୁବିଧାଟିଏ ଘଟିଲା: $1',
+'upload-copy-upload-invalid-domain' => 'ନକଲ ଅପଲୋଡଗୁଡିକ ଏହି ଡୋମେନ ରେ ଉପଲବ୍ଧ ନାହିଁ ।',
 
 # File backend
 'backend-fail-stream' => 'ଷ୍ଟ୍ରିମ ଫାଇଲ $1ଟି ମିଳିଲା ନାହିଁ ।',
@@ -1803,6 +1824,7 @@ $1',
 'backend-fail-notsame' => '$1 ଠାରେ ଏକ ଅସମ ଫାଇଲ ଆଗରୁ ଅଛି ।',
 'backend-fail-invalidpath' => '$1 ଏକ ବୈଧ ସାଇତିବା ପଥ ନୁହେଁ ।',
 'backend-fail-delete' => '$1 ଫାଇଲଟି ଲିଭାଇ ପାରିବେ ନାହିଁ ।',
+'backend-fail-describe' => '"$1" ଫାଇଲ ପାଇଁ ମେଟାଡାଟା ବଦଳାଯାଇପାରିଲା ନାହିଁ ।',
 'backend-fail-alreadyexists' => '$1 ଫାଇଲଟି ଆଗରୁ ଅଛି ।',
 'backend-fail-store' => '$2 ଠାରେ $1 ଫାଇଲଟି ସାଇତାଯାଇ ପାରିଲା ନାହିଁ ।',
 'backend-fail-copy' => '$1 ଫାଇଲଟିରୁ $2 କୁ ଫାଇଲ ନକଲ କରାଯାଇପାରିବ ନାହିଁ ।',
@@ -1812,6 +1834,18 @@ $1',
 'backend-fail-closetemp' => 'ଅସ୍ଥାୟୀ ଫାଇଲ ବନ୍ଦ କରିହେଲା ନାହିଁ ।',
 'backend-fail-read' => '$1 ଫାଇଲଟି ପଢ଼ିପାରିଲୁ ନାହିଁ ।',
 'backend-fail-create' => '$1 ଫାଇଲରେ କିଛି ଲେଖି ହେଲା ନାହିଁ ।',
+'backend-fail-maxsize' => '"$1" ଫାଇଲଟିକୁ ଲେଖି ପାରିଲା ନାହିଁ କାରଣ ଏହା {{PLURAL:$2|one byte|$2 bytes}}ଠାରୁ ବଡ ।',
+'backend-fail-readonly' => 'ସାଇତାଲେଖା "$1" କେବଳ ପଢିହେବ । କାରଣଟି ହେଉଛି: "\'\'$2\'\'"',
+'backend-fail-synced' => 'ଭିତର ସାଇତା ମଧ୍ୟରେ "$1"ଏକ ଅସ୍ଥାୟୀ ଫାଇଲ',
+'backend-fail-connect' => 'ସାଇତିବା ଧାରକ "$1" ସହ ଯୋଗାଯୋଗ ହୋଇ ପାରିଲା ନାହିଁ ।',
+'backend-fail-internal' => 'ସାଇତା ଧାରକ "$1" କିଛି ଅଜଣା ଅସୁବିଧା ଉପୁଜିଲା ।',
+'backend-fail-contenttype' => '"$1"ରେ ଥିବା ସାଇତା ପାଇଁ ଥିବା ଫାଇଲର ବିଷୟବସ୍ତୁର ପ୍ରକାର ଗୁଡିକ ଜଣାପଡୁନି ।',
+'backend-fail-batchsize' => 'ସାଇତା ଧାରକକୁ  $1 ଫାଇଲର {{PLURAL:$1|operation|operations}} ଏକ ଗୋଛା ଦିଆଯାଇଥିଲା; ସୀମା ହେଉଛି $2 {{PLURAL:$2|operation|operations}} ।',
+'backend-fail-usable' => 'ଅନୁମତି ନଥିବାରୁ କିମ୍ବା ଧାରକ/ସୂଚୀ ନଥିବାରୁ"$1" ଫାଇଲଟିକୁ ପଢି କିମ୍ବା ଲେଖି ହେଲାନି ।',
+
+# File journal errors
+'filejournal-fail-dbconnect' => 'ସାଇତା ଧାରକ "$1" ପାଇଁ ପାଠ୍ୟ ଡାଟାବେସକୁ ସଂଯୋଗ କରିହେଲାନି ।',
+'filejournal-fail-dbquery' => 'ସାଇତା ଧାରକ "$1" ପାଇଁ ପାଠ୍ୟ ଡାଟାବେସକୁ ଅପଡେଟ କରିହେଲାନି ।',
 
 # Lock manager
 'lockmanager-notlocked' => 'କିଳାଯାଇଥିବା "$1"କୁ ଖୋଲିପାରିଲୁ ନାହିଁ; ଏହା ପ୍ରକୃତରେ କିଳାଯାଇନାହିଁ ।',
@@ -1822,6 +1856,7 @@ $1',
 'lockmanager-fail-releaselock' => '"$1" ଚାବି ପାଇଁ ତାଲା ମିଳିଲା ନାହିଁ ।',
 'lockmanager-fail-db-bucket' => '$1 ଝୁଡ଼ିରେ ଥିବା ସବୁ କିଳାଯାଇଥିବା ଡାଟାବେସ ସହ ଯୋଗାଯୋଗ କରାଯାଇପାରିଲା ନାହିଁ ।',
 'lockmanager-fail-db-release' => '$1 ଡାଟାବେସରେ ଲାଗିଥିବା ତାଲା ଖୋଲାଯାଇପାରିଲା ନାହିଁ ।',
+'lockmanager-fail-svr-acquire' => '$1 ସର୍ଭରରେ ଲାଗିଥିବା ତାଲା ଖୋଲାଯାଇପାରିଲା ନାହିଁ ।',
 'lockmanager-fail-svr-release' => '$1 ସର୍ଭରରେ ଲାଗିଥିବା ତାଲା ଖୋଲାଯାଇପାରିଲା ନାହିଁ ।',
 
 # ZipDirectoryReader
@@ -1932,11 +1967,16 @@ URLଟି ଠିକ ଅଚିକି କି ନାଁ ଓ ସାଇଟଟି ସ
 ଅଧିକ ଜାଣିବା ନିମନ୍ତେ ଦୟାକରି [$2 ଫାଇଲ ବିବରଣୀ ପୃଷ୍ଠା ଦେଖନ୍ତୁ] ।',
 'sharedupload-desc-here' => 'ଏହି ଫାଇଲଟି $1 ଠାରୁ ଓ ଏହା ଅନ୍ୟ ପ୍ରକଳ୍ପରେ ବ୍ୟବହାର କରାଯାଇପାରିବ ।
 ଏହାର ବିବରଣୀ [$2 ଫାଇଲ ବିବରଣୀ ପୃଷ୍ଠାରେ] ତଳେ ରହିଅଛି ।',
+'sharedupload-desc-edit' => 'ଏହି ଫାଇଲଟି $1ରୁ ଆସିଛି ଏବଂ ଏହା ଅନ୍ୟ ପ୍ରକଳ୍ପଗୁଡିକରେ ବ୍ୟବହୃତ ହୋଇଥାଇ ପାରେ ।
+ଆପଣ ଏହାର ବର୍ଣ୍ଣନାଟିକୁ ଏହାର [$2 file description page]ରେ ବଦଳାଇ ପାରନ୍ତି ।',
+'sharedupload-desc-create' => 'ଏହି ଫାଇଲଟି $1ରୁ ଆସିଛି ଏବଂ ଏହା ଅନ୍ୟ ପ୍ରକଳ୍ପଗୁଡିକରେ ବ୍ୟବହୃତ ହୋଇଥାଇ ପାରେ ।
+ଆପଣ ଏହାର ବର୍ଣ୍ଣନାଟିକୁ ଏହାର [$2 file description page]ରେ ବଦଳାଇ ପାରନ୍ତି ।',
 'filepage-nofile' => 'ଏହି ନାମରେ କୌଣସିଟି ଫାଇଲ ନାହିଁ ।',
 'filepage-nofile-link' => 'ଏହି ନାମରେ କିଛି ବି ଫାଇଲ ନାହିଁ, କିନ୍ତୁ ଆପଣ ଏହା [$1 ଅପଲୋଡ଼] କରିପାରିବେ ।',
 'uploadnewversion-linktext' => 'ଏହି ଫାଇଲର ନୂଆ ସଙ୍କଳନଟିଏ ଅପଲୋଡ଼ କରିବେ',
 'shared-repo-from' => '$1 ଠାରୁ',
 'shared-repo' => 'ଏକ ବଣ୍ଟା ଭଣ୍ଡାର',
+'upload-disallowed-here' => 'ଆପଣ ଏହି ଫାଇଲଟିକୁ ବଦଳାଇପାରିବେ ନାହିଁ ।',
 
 # File reversion
 'filerevert' => '$1କୁ ଫେରାଇଦେବା',
@@ -2046,6 +2086,7 @@ URLଟି ଠିକ ଅଚିକି କି ନାଁ ଓ ସାଇଟଟି ସ
 # Miscellaneous special pages
 'nbytes' => '$1 {{PLURAL:$1|byte|ବାଇଟ}}',
 'ncategories' => '$1 {{PLURAL:$1|ଶ୍ରେଣୀ|ଶ୍ରେଣୀସମୂହ}}',
+'ninterwikis' => '{{PLURAL:$1|interwiki|interwikis}} $1',
 'nlinks' => '$1 ଟି {{PLURAL:$1|ଲିଙ୍କ|ଲିଙ୍କ}}',
 'nmembers' => '$1 {{PLURAL:$1|member|ସଭ୍ୟ}}',
 'nrevisions' => '$1 ଗୋଟି {{PLURAL:$1|ସଂସ୍କରଣ|ସଂସ୍କରଣ}}',
@@ -2066,12 +2107,15 @@ URLଟି ଠିକ ଅଚିକି କି ନାଁ ଓ ସାଇଟଟି ସ
 'wantedpages' => 'ଦରକାରି ପୃଷ୍ଠା',
 'wantedpages-badtitle' => '$1 ଉତ୍ତରସବୁରେ ଥିବା ଭୁଲ ଟାଇଟଲ',
 'wantedfiles' => 'ଦରକାରି ଫାଇଲ',
+'wantedfiletext-cat' => 'ନିମ୍ନଲିଖିତ ଫାଇଲଗୁଡିକ ବ୍ୟବହୃତ ହେଇଛି ହଲେ ନାହିଁ । ରହିଥିବା ଫାଇଲ ବଦଳରେ ବାହାରେ ଥିବା ଫାଇଲଗୁଡିକ ତାଲିକାଭୁକ୍ତ ହେଇଛି । ଏହିଭଳି ଭୁଲ ସତ୍ୟଗୁଡିକ <del>struck out</del> ହେଇଯିବ । ଅଧିକନ୍ତୁ, ପ୍ରକୃତରେ ନଥିବା ଫାଇଲଗୁଡିକର ପୃଷ୍ଠାଗୁଡିକ [[:$1]]ରେ ତାଲିକାଭୁକ୍ତ ହୋଇଛି ।',
+'wantedfiletext-nocat' => 'ନିମ୍ନଲିଖିତ ଫାଇଲଗୁଡିକ ବ୍ୟବହୃତ ହେଇଛି ହଲେ ନାହିଁ । ରହିଥିବା ଫାଇଲ ବଦଳରେ ବାହାରେ ଥିବା ଫାଇଲଗୁଡିକ ତାଲିକାଭୁକ୍ତ ହେଇଛି । ଏହିଭଳି ଭୁଲ ସତ୍ୟଗୁଡିକ <del>struck out</del> ହେଇଯିବ ।',
 'wantedtemplates' => 'ଦରକାରୀ ଛାଞ୍ଚ',
 'mostlinked' => 'ଅଧିକ ଯୋଡ଼ାଯାଇଥିବା ପୃଷ୍ଠା',
 'mostlinkedcategories' => 'ବେଶି ଯୋଡ଼ାଯାଇଥିବା ଶ୍ରେଣୀ',
 'mostlinkedtemplates' => 'ବେଶୀ ଯୋଡ଼ାଯାଇଥିବା ଛାଞ୍ଚ',
 'mostcategories' => 'ଅଧିକ ଶ୍ରେଣୀ ଥିବା ପୃଷ୍ଠା',
 'mostimages' => 'ଫାଇଲରେ ବେଶି ଯୋଡ଼ାଯାଇଥିବା ଥିବା',
+'mostinterwikis' => 'ସବୁଠାରୁ ଅଧିକ ଉଇକିଥିବା ପୃଷ୍ଠାଗୁଡିକ',
 'mostrevisions' => 'ସବୁଠାରୁ ଅଧିକ ସଙ୍କଳନ ଥିବା ପୃଷ୍ଠାସମୂହ',
 'prefixindex' => 'ଆଗରୁ କିଛି ଯୋଡ଼ା ସହ ଥିବା ସବୁ ଫରଦସବୁ',
 'prefixindex-namespace' => 'ଉପସର୍ଗ ଲାଗିଥିବା ସବୁଯାକ ପୃଷ୍ଠା ($1 ଗୋଟି ନେମସ୍ପେସ)',
@@ -2125,6 +2169,7 @@ URLଟି ଠିକ ଅଚିକି କି ନାଁ ଓ ସାଇଟଟି ସ
 ଆପଣ ଲଗର ପ୍ରକାର ଅନୁସାରେ ବି ସେସବୁକୁ ବାଛି ପାରିବେ । ଇଉଜରନାଆଁଟି ଛୋଟ ଓ ବଡ଼ ଅକ୍ଷର ଅନୁସାରେ ଅଲଗା ହୋଇଥାଏ, ପୃଷ୍ଠାର ନାଆଁ ସବୁ ବି ଛୋଟ ଓ ବଡ଼ ଇଂରାଜି ଅକ୍ଷର ଅନୁସାରେ ଅଲଗା ହୋଇଥାଏ ।',
 'logempty' => 'ଲଗରେ ଥିବା ଲେଖା ସହ ମେଳଖାଉ ନାହିଁ ।',
 'log-title-wildcard' => 'ଏହି ଲେଖାରେ ଆରମ୍ଭ ହୋଇଥିବା ଶିରୋନାମାସବୁ ଖୋଜିବେ',
+'showhideselectedlogentries' => 'ବାଛିଥିବା ତାଲିକାକୁ ଦେଖାଇବେ/ଲୁଚାଇବେ',
 
 # Special:AllPages
 'allpages' => 'ସବୁ ପୃଷ୍ଠା',
@@ -2146,6 +2191,8 @@ URLଟି ଠିକ ଅଚିକି କି ନାଁ ଓ ସାଇଟଟି ସ
 'allpages-hide-redirects' => 'ପୁନଃପ୍ରେରଣସମୂହକୁ ଲୁଚାଇବେ',
 
 # SpecialCachedPage
+'cachedspecial-viewing-cached-ttl' => 'ଆପଣ ଏହି ପୃଷ୍ଠାର ଏକ ପୁରୁଣା ସଂସ୍କରଣ ଦେଖୁଛନ୍ତି, ଯାହାକି $1 ପୁରୁଣା ହୋଇଥାଇପାରେ ।',
+'cachedspecial-viewing-cached-ts' => 'ଆପଣ ଏହି ପୃଷ୍ଠାର ଏକ ପୁରୁଣା ସଂସ୍କରଣ ଦେଖୁଛନ୍ତି, ଯାହାକି ପ୍ରକୃତରେ ସଂପୂର୍ଣ ନ ହୋଇଥାଇପାରେ ।',
 'cachedspecial-refresh-now' => 'ନୂତନତମ ଦେଖନ୍ତୁ ।',
 
 # Special:Categories
@@ -2169,7 +2216,7 @@ URLଟି ଠିକ ଅଚିକି କି ନାଁ ଓ ସାଇଟଟି ସ
 'linksearch-ok' => 'ଖୋଜିବା',
 'linksearch-text' => '"*.wikipedia.org" ପରି ୱାଇଲ୍ଡକାର୍ଡ଼ର ବ୍ୟବହାର କରାଯାଇଥାଇ ପାରେ ।
 ଏକ ଉଚ୍ଚକୋଟୀର ଡୋମେନ ଲୋଡ଼ା, ଯଥା "*.org".<br />
-ଅନୁମୋଦିତ ପ୍ରଟୋକଲ: <code>$1</code> (ନିଜର ଖୋଜିବାରେ ଏହାକୁ ରଖନ୍ତୁ ନାହିଁ) ।',
+ଅନୁମୋଦିତ {{PLURAL:$2|protocol|protocols}}: <code>$1</code> (ଯଦି କୌଣସି ପ୍ରୋଟୋକଲ ଦିଆଯାଇନଥାଏ ତେବେ ଆପେ ଆପେ http:// ହୋଇଯାଇଥାଏ) ।',
 'linksearch-line' => '$1 ଟି $2ରୁ ଯୋଡ଼ାଯାଇଅଛି ।',
 'linksearch-error' => 'କେବଳ ହୋଷ୍ଟ ନାମର ଆରମ୍ଭରେ ୱାଇଲ୍ଡକାର୍ଡ଼ ଦେଖାଯିବ ।',
 
@@ -2188,10 +2235,6 @@ URLଟି ଠିକ ଅଚିକି କି ନାଁ ଓ ସାଇଟଟି ସ
 'activeusers-hidesysops' => 'ପରିଚାଳକମାନଙ୍କୁ ଲୁଚାଇବେ',
 'activeusers-noresult' => 'ଜଣେ ବି ସଭ୍ୟ ମିଳିଲେ ନାହିଁ ।',
 
-# Special:Log/newusers
-'newuserlogpage' => 'ବ୍ୟବହାରକାରୀ ତିଆରି ଲଗ',
-'newuserlogpagetext' => 'ସଭ୍ୟଙ୍କର ଖାତା ଗଠନ ପାଇଁ ଏକ ଇତିହାସ ଅଛି ।',
-
 # Special:ListGroupRights
 'listgrouprights' => 'ସଭ୍ୟ ଗୋଠ ଅଧିକାରସମୂହ',
 'listgrouprights-summary' => 'ତଳେ ଉଇକି ସ୍ଥିର କରାଯାଇଥିବା ଏକ ଏକ ବ୍ୟବହାରକାରୀ ଗୋଠର ତାଲିକା ଦିଆଯାଇଛି, ସେଥିରେ ସେମାନଙ୍କ ବ୍ୟବହାର ଅଧିକାର ବାବଦରେ ମଧ୍ୟ ଦିଆଯାଇଛି ।
@@ -2215,9 +2258,10 @@ URLଟି ଠିକ ଅଚିକି କି ନାଁ ଓ ସାଇଟଟି ସ
 'mailnologin' => 'ଗୋଟିଏ ବି ପଠାଇବା ଠିକଣା ନାହିଁ',
 'mailnologintext' => 'ଆପଣ ନିଜ [[Special:Preferences|ପସନ୍ଦସବୁ]]ରେ [[Special:UserLogin|ଲଗ ଇନ]] କରିଥିଲେ ଓ ନିଜର ଏକ ସଚଳ ଇ-ମେଲ ଠିକଣା ଥିଲେ ଯାଇ ବାକି ସବୁ ସଭ୍ୟଙ୍କୁ ଇ-ମେଲ ପଠାଇପାରିବେ ।',
 'emailuser' => 'ଏହି ସଭ୍ୟଙ୍କୁ ଇମେଲ କରିବେ',
+'emailuser-title-target' => '{{GENDER:$1|user}}କୁ ଇ-ମେଲ କରନ୍ତୁ',
 'emailuser-title-notarget' => 'ବ୍ୟବହାରକାରୀ କୁ ଇ-ମେଲ',
 'emailpage' => 'ଇ-ମେଲ ବ୍ୟବହାରକାରୀ',
-'emailpagetext' => 'ତଳà­\87 à¬¥à¬¿à¬¬à¬¾ à¬«à¬°à­\8dମ à¬¬à­\8dà­\9fବହାର à¬\95ରି à¬\86ପଣ à¬\8fହି à¬¸à¬­à­\8dà­\9fà¬\99à­\8dà¬\95à­\81 ଇ-ମେଲ କରିପାରିବେ ।
+'emailpagetext' => 'ଥିବା à¬«à¬°à­\8dମ à¬¬à­\8dà­\9fବହାର à¬\95ରି à¬\86ପଣ à¬\8fହି {{GENDER:$1|user}} ଇ-ମେଲ କରିପାରିବେ ।
 [[Special:Preferences|ଆପଣଙ୍କ ପସନ୍ଦ]]ରେ ଥିବା ଇ-ମେଲ ଠିକଣା ପ୍ରେରକ ଭାବରେ ଦେଖାଯିବ, ତେଣୁ ଚିଠି ପାଇଥିବା ସଭ୍ୟ ଆପଣଙ୍କୁ ସିଧା ସଳଖ ଉତ୍ତର ଦେଇପାରିବ ।',
 'usermailererror' => 'ମେଲ ଭିତରେ କିଛି ଅସୁବିଧା ଅଛି ବୋଲି ଜାଣିବାକୁ ମିଳିଲା:',
 'defemailsubject' => '{{SITENAME}} "$1" ସଭ୍ୟଙ୍କ ଠାରୁ ଇ-ମେଲ କରିବେ',
@@ -2256,8 +2300,8 @@ URLଟି ଠିକ ଅଚିକି କି ନାଁ ଓ ସାଇଟଟି ସ
 'watchnologin' => 'ଲଗ‌‌ ଇନ କରିନାହାନ୍ତି',
 'watchnologintext' => 'ଆପଣା ଦେଖଣାତାଲିକା ବଦଳାଇବା ନିମନ୍ତେ ଆପଣଙ୍କୁ [[Special:UserLogin|ଲଗ ଇନ]] କରିବାକୁ ପଡ଼ିବ ।',
 'addwatch' => 'ଦେଖଣାତାଲିକାରେ ଯୋଡ଼ିବେ',
-'addedwatchtext' => "\"[[:\$1]]\" ପୃଷ୍ଠାଟି ଆପଣଙ୍କ [[Special:Watchlist|ଦେଖଣାତାଲିକା]]ରେ ଯୋଡ଼ିଦିଆଗଲା ।
-à¬\8fହି à¬ªà­\83ଷà­\8dଠାରà­\87 à¬­à¬¬à¬¿à¬·à­\8dà­\9fତର à¬\85ଦଳ à¬¬à¬¦à¬³ à¬\93 à¬¤à¬¾à¬¹à¬¾ à¬¸à¬¹ à¬¯à­\8bଡ଼ା à¬\86ଲà­\8bà¬\9aନା à¬ªà­\83ଷà­\8dଠା à¬\8fଠାରà­\87 à¬¦à¬¿à¬\86ଯିବ, à¬\86à¬\89 à¬ªà­\83ଷà­\8dଠାà¬\9fି [[Special:RecentChanges|ନà¬\97ଦ à¬¬à¬¦à¬³ à¬¤à¬¾à¬²à¬¿à¬\95ା]]ରà­\87 à¬¸à¬¹à¬\9cରà­\87 à¬¬à¬¾à¬\9bିବା à¬ªà¬¾à¬\87à¬\81 '''ମà­\8bà¬\9fା à¬\85à¬\95à­\8dଷର''' à¬¹à­\8bà¬\87 à¬¦à­\87à¬\96ାଯିବ à¥¤",
+'addedwatchtext' => '"[[:$1]]" ପୃଷ୍ଠାଟି ଆପଣଙ୍କ [[Special:Watchlist|ଦେଖଣାତାଲିକା]]ରେ ଯୋଡ଼ିଦିଆଗଲା ।
+à¬\8fହି à¬ªà­\83ଷà­\8dଠାରà­\87 à¬­à¬¬à¬¿à¬·à­\8dà­\9fତର à¬\85ଦଳ à¬¬à¬¦à¬³ à¬\93 à¬¤à¬¾à¬¹à¬¾ à¬¸à¬¹ à¬¯à­\8bଡ଼ା à¬\86ଲà­\8bà¬\9aନା à¬ªà­\83ଷà­\8dଠା à¬¸à­\87ଠାରà­\87 à¬¦à¬¿à¬\86ଯିବ à¥¤',
 'removewatch' => 'ଦେଖଣା ତାଲିକାରୁ ହଟାଇବେ',
 'removedwatchtext' => '"[[:$1]]" ପୃଷ୍ଠାଟି [[Special:Watchlist|ଆପଣଙ୍କ ଦେଖଣାତାଳିକା]]ରୁ ହଟାଗଲା ।',
 'watch' => 'ଦେଖିବେ',
@@ -2286,11 +2330,22 @@ URLଟି ଠିକ ଅଚିକି କି ନାଁ ଓ ସାଇଟଟି ସ
 'enotif_mailer' => '{{SITENAME}} ସୂଚନା ମେଲ ପ୍ରେରକ',
 'enotif_reset' => 'ସବୁଯାକ ଦେଖାଯାଇଥିବା ପୃଷ୍ଠାକୁ ଚିହ୍ନିତ କରିବେ',
 'enotif_impersonal_salutation' => '{{SITENAME}} ବ୍ୟବହାରକାରୀ',
+'enotif_subject_deleted' => '{{SITENAME}} $1 ପୃଷ୍ଠାଟି {{gender:$2|$2}}ଦ୍ଵାରା ଲିଭାଯାଇଛି',
+'enotif_subject_created' => '{{SITENAME}} $1 ପୃଷ୍ଠାଟି {{gender:$2|$2}}ଦ୍ଵାରା ତିଆରି କରାଯାଇଛି',
+'enotif_subject_moved' => '{{SITENAME}} $1 ପୃଷ୍ଠାଟି {{gender:$2|$2}}ଦ୍ଵାରା ଘୁଞ୍ଚାଯାଇଛି',
+'enotif_subject_restored' => '{{SITENAME}} $1 ପୃଷ୍ଠାଟି {{gender:$2|$2}}ଦ୍ଵାରା ପୁନଃସ୍ଥାପନ କରାଯାଇଛି',
+'enotif_subject_changed' => '{{SITENAME}} $1 ପୃଷ୍ଠାଟି {{gender:$2|$2}}ଦ୍ଵାରା ବଦଳାଯାଇଛି',
+'enotif_body_intro_deleted' => '{{SITENAME}} $1 ପୃଷ୍ଠାଟି {{gender:$2|$2}}ଦ୍ଵାରା $PAGEEDITDATEରେ ଲିଭାଯାଇଛି, $3 ଦେଖନ୍ତୁ ।',
+'enotif_body_intro_created' => '{{SITENAME}} $1 ପୃଷ୍ଠାଟି {{gender:$2|$2}}ଦ୍ଵାରା $PAGEEDITDATEରେ ତିଆରି କରାଯାଇଛି, ପୁନରାବୃତି ପାଇଁ $3 ଦେଖନ୍ତୁ ।',
+'enotif_body_intro_moved' => '{{SITENAME}} $1 ପୃଷ୍ଠାଟି {{gender:$2|$2}}ଦ୍ଵାରା $PAGEEDITDATEରେ ଘୁଞ୍ଚାଯାଇଛି, ଏବେକାର ପୁନରାବୃତି ପାଇଁ $3 ଦେଖନ୍ତୁ ।',
+'enotif_body_intro_restored' => '{{SITENAME}} $1 ପୃଷ୍ଠାଟି {{gender:$2|$2}}ଦ୍ଵାରା $PAGEEDITDATEରେ ପୁନଃସ୍ଥାପନ କରାଯାଇଛି, ଏବେକାର ପୁନରାବୃତି ପାଇଁ $3 ଦେଖନ୍ତୁ ।',
+'enotif_body_intro_changed' => '{{SITENAME}} $1 ପୃଷ୍ଠାଟି {{gender:$2|$2}}ଦ୍ଵାରା $PAGEEDITDATEରେ ବଦଳାଯାଇଛି, ଏବେକାର ପୁନରାବୃତି ପାଇଁ $3 ଦେଖନ୍ତୁ ।',
 'enotif_lastvisited' => 'ଆପଣଙ୍କ ଶେଷ ଦେଖଣା ପରେ ହୋଇଥିବା ବଦଳସବୁକୁ  ଦେଖିବା ନିମନ୍ତେ $1 ଦେଖନ୍ତୁ ।',
 'enotif_lastdiff' => 'ଏହି ବଦଳ ଦେଖିବା ପାଇଁ $1 ଦେଖନ୍ତୁ ।',
 'enotif_anon_editor' => 'ବେନାମି ସଭ୍ୟ $1',
 'enotif_body' => 'ପ୍ରିୟ $WATCHINGUSERNAME,
 
+$PAGEINTRO $NEWPAGE
 
 ଏହି {{SITENAME}} $PAGETITLE ପୃଷ୍ଠାଟି $PAGEEDITOR ଙ୍କ ଦେଇ $PAGEEDITDATE ବେଳେ $CHANGEDORCREATE, ନଗଦ ସଂସ୍କରଣ ପାଇଁ $PAGETITLE_URL  ଦେଖନ୍ତୁ ।
 
@@ -2302,23 +2357,15 @@ $NEWPAGE
 mail: $PAGEEDITOR_EMAIL
 wiki: $PAGEEDITOR_WIKI
 
-ଆପଣ ପୃଷ୍ଠାଟିକୁ ଯାଇ ନ ଦେଖିଲେ କିଛି ବି ସୂଚନା ରହିବ ନାହିଁ ।
-ଆପଣା ଦେଖଣାତାଲିକାରୁ ଆପଣ ସବୁଯାକ ସୂଚନା ଫଳକକୁ ମୂଳ ଅବସ୍ଥାକୁ ଫେରାଇ ଦେଇପାରିବେ ।
+ଭବିଷ୍ୟତରେ ଆପଣ ପୃଷ୍ଠାଟିକୁ ନ ଦେଖିବା ଯାଏ ଆଉ କିଛି ବି ସୂଚନା ରହିବ ନାହିଁ ।ଆପଣା ଦେଖଣାତାଲିକାରୁ ଆପଣ ସବୁଯାକ ସୂଚନା ଫଳକକୁ ମୂଳ ଅବସ୍ଥାକୁ ଫେରାଇ ଦେଇପାରିବେ ।
 
                         ଆପଣଙ୍କର ହିତକାରୀ {{SITENAME}} ସୂଚନା ପ୍ରଣାଳୀ
 
 --
 ଆପଣା ଇ-ମେଲ ସୂଚନା ସଜାଣି ଦେଖିବା ନିମନ୍ତେ
-{{canonicalurl:{{#special:Preferences}}}} ଦେଖନ୍ତୁ
-
-ଆପଣା ଦେଖଣାତାଲିକା ସଜାଣି ବଦଳାଇବା ନିମନ୍ତେ,
-{{canonicalurl:{{#special:EditWatchlist}}}} ଦେଖନ୍ତୁ
-
-ଆପଣା ଦେଖଣାତାଲିକାରୁ ଏହି ପୃଷ୍ଠାଟି ଲିଭାଇବା ନିମନ୍ତେ,
-$UNWATCHURL ଦେଖନ୍ତୁ
-
-ମତାମତ ଓ ଅଧିକ ସହଯୋଗ:
-{{canonicalurl:{{MediaWiki:Helppage}}}}',
+{{canonicalurl:{{#special:Preferences}}}} ଦେଖନ୍ତୁ',
+'created' => 'ତିଆରି କରାଗଲା',
+'changed' => 'ବଦଳାଗଲା',
 
 # Delete
 'deletepage' => 'ପୃଷ୍ଠାଟି ଲିଭାଇଦେବେ',
@@ -2358,6 +2405,8 @@ $UNWATCHURL ଦେଖନ୍ତୁ
 'rollback' => 'ପୁରାପୁରି ପଛକୁ ଫେରିବା ବଦଳ',
 'rollback_short' => 'ପୁରାପୁରି ପଛକୁ ଫେରିଯିବେ',
 'rollbacklink' => 'ପୁରାପୁରି ପଛକୁ ଫେରିଯିବେ',
+'rollbacklinkcount' => '{{PLURAL:$1|edit|edits}} $1 ପଛକୁ ଫେରାଇବେ',
+'rollbacklinkcount-morethan' => '{{PLURAL:$1|edit|edits}} $1ରୁ ଅଧିକ ପଛକୁ ଫେରାଇବେ',
 'rollbackfailed' => 'ପୁରାପୁରି ପଛକୁ ଫେରିବା ବିଫଳ ହେଲା',
 'cantrollback' => 'ବଦଳକୁ ପଛକୁ ଫେରାଇ ପାରିବେ ନାହିଁ;
 ଶେଷ ଦାତାଜଣଙ୍କ ଏହି ପୃଷ୍ଠାର ଜଣେମାତ୍ର ଦାତା ।',
@@ -2390,6 +2439,8 @@ $2ଙ୍କ ଦେଇ ଶେଷଥର ହୋଇଥିବା ସଂସ୍କର
 'prot_1movedto2' => '[[$1]] ପୃଷ୍ଠାଟି [[$2]] କୁ ଘୁଞ୍ଚାଇ ଦିଆଗଲା',
 'protect-badnamespace-title' => 'କିଳାହୋଇନଥିବା ନେମସ୍ପେସ',
 'protect-badnamespace-text' => 'ଏହି ନେମସ୍ପେସଥିବା ପୃଷ୍ଠାସବୁକୁ ସାଇତାଯାଇପାରିବ ନାହିଁ ।',
+'protect-norestrictiontypes-text' => 'ଏହି ପୃଷ୍ଠାଟିକୁ କିଳାଯାଇପାରିବ ନାହିଁ କାରଣ ଏହାର କୌଣସି ସୁରକ୍ଷା ପ୍ରକାର ନାହିଁ ।',
+'protect-norestrictiontypes-title' => 'କିଳାଯାଇପାରୁନଥିବା ପୃଷ୍ଠା',
 'protect-legend' => 'କିଳଣାକୁ ଥୟ କରିବେ',
 'protectcomment' => 'କାରଣ:',
 'protectexpiry' => 'ଅଚଳ ହେବ:',
@@ -2476,7 +2527,7 @@ $2ଙ୍କ ଦେଇ ଶେଷଥର ହୋଇଥିବା ସଂସ୍କର
 'undeletedrevisions-files' => '{{PLURAL:$1|ଗୋଟିଏ ସଂସ୍କରଣ|$1 ଗୋଟି ସଂସ୍କରଣ}} ଓ {{PLURAL:$2|ଗୋଟିଏ ଫାଇଲ|$2 ଗୋଟି ଫାଇଲ}} ପୁନସ୍ଥାପନ କରାଗଲା',
 'undeletedfiles' => '{{PLURAL:$1|ଗୋଟିଏ ଫାଇଲ|$1 ଗୋଟି ଫାଇଲ}} ପୁନସ୍ଥାପନ କରାଗଲା',
 'cannotundelete' => 'ଲିଭାଇବାରୁ ରୋକିବା ବିଫଳ ହେଲା;
-ଏହାକୁ ଆଗରୁ କେହି ଜଣେ ଲିଭାଇବାରୁ ରୋକି ସାରିଅଛି ।',
+$1',
 'undeletedpage' => "'''$1ର ପୁନସ୍ଥାପନ କରାଗଲା'''
 
 ନଗଦ ଲିଭାଇବା ଓ ପୁନସ୍ଥାପନ ପାଇଁ [[Special:Log/delete|ଲିଭାଇବା ଇତିହାସ]] ଦେଖନ୍ତୁ ।",
@@ -2508,7 +2559,7 @@ $1',
 'blanknamespace' => '(ମୂଳ)',
 
 # Contributions
-'contributions' => 'ବ୍ୟବହାରକାରୀଙ୍କ ଦାନ',
+'contributions' => '{{GENDER:$1|User}}ଙ୍କ ଅବଦାନ',
 'contributions-title' => '$1 ପାଇଁ ବ୍ୟବହାରକାରୀଙ୍କ ଦାନ',
 'mycontris' => 'ଅବଦାନ',
 'contribsub2' => '$1 ($2) ପାଇଁ',
@@ -2648,7 +2699,7 @@ $1ର ଅଟକ ପାଇଁ ଦିଆଯାଇଥିବା କାରଣଟି 
 'reblock-logentry' => '[[$1]] ଙ୍କ ନିମନ୍ତେ $2 $3 ମିଆଦର ଅଟକକୁ ବଦଳାଗଲା',
 'blocklogtext' => 'ଏହା ଏକ ବ୍ୟବହାରକାରୀ ଅଟକ ଓ ଛାଡ଼ ପାଇଁ ଇତିହାସ ।
 ଆପେଆପେ ଅଟକାଯାଇଥିବା IP ଠିକଣା ଏଠାରେ ସ୍ଥାନିତ ହୋଇନାହିଁ ।
-ଏବେ ସଚଳ କରାଯାଇଥିବା ଅଟକ ଓ ବାରଣସବୁ ଦେଖବା ନିମନ୍ତେ [[Special:BlockList|IP ଅଟକ ତାଲିକା]] ଦେଖନ୍ତୁ ।',
+ଏବେ ସଚଳ କରାଯାଇଥିବା ଅଟକ ଓ ବାରଣସବୁ ଦେଖବା ନିମନ୍ତେ [[Special:BlockList|block]] ଦେଖନ୍ତୁ ।',
 'unblocklogentry' => 'କିଳାଯାଇନଥିବା $1',
 'block-log-flags-anononly' => 'କେବଳ ବେନାମି ସଭ୍ୟ',
 'block-log-flags-nocreate' => 'ନୂଆ ଖାତା ଖୋଲିବା ଅଚଳ କରାଯାଇଅଛି',
@@ -2787,6 +2838,7 @@ $1ର ଅଟକ ପାଇଁ ଦିଆଯାଇଥିବା କାରଣଟି 
 'immobile-target-namespace-iw' => 'ଇଣ୍ଟରଉଇକି ଲିଙ୍କ ପୃଷ୍ଠା ଘୁଞ୍ଚାଇବା ନିମନ୍ତେ ଏକ ବୈଧ ଲକ୍ଷସ୍ଥଳ ନୁହେଁ ।',
 'immobile-source-page' => 'ଏହି ପୃଷ୍ଠାଟି ଘୁଞ୍ଚାଯୋଗ୍ୟ ନୁହେଁ ।',
 'immobile-target-page' => 'ଦେହି ମୁକାମ ନାମକୁ ଘୁଞ୍ଚାଇହେବ ନାହିଁ ।',
+'bad-target-model' => 'ଆଶାକରାଯାଇଥିବା ଲକ୍ଷସ୍ଥଳୀଟି ଅଲଗା ପ୍ରକାର ଶୈଳୀ ବ୍ୟବହାର କରୁଛି । $1ରୁ $2କୁ ବଦଳାଇ ପାରିବ ନାହିଁ ।',
 'imagenocrossnamespace' => 'ଫାଇଲଟିକୁ ଅଣ-ଫାଇଲ ନେମସ୍ପେସକୁ ଘୁଞ୍ଚାଇହେବ ନାହିଁ',
 'nonfile-cannot-move-to-file' => 'ଅଣ-ଫାଇଲଟିକୁ ଫାଇଲ ନେମସ୍ପେସକୁ ଘୁଞ୍ଚାଇହେବ ନାହିଁ',
 'imagetypemismatch' => 'ନୂଆ ଫାଇଲ ଏକ୍ସଟେନସନ ଏହାର ପ୍ରକାର ସାଙ୍ଗରେ ମେଳ ଖାଉନାହିଁ',
@@ -2810,6 +2862,7 @@ MediaWiki ବ୍ୟବହାର କରି [[Special:Import|ପୃଷ୍ଠା 
 ପୃଷ୍ଠା ରପ୍ତାନି କରିବା ନିମନ୍ତେ ତଳେ ଥିବା ଟେକ୍ସଟ ଘରେ ନାମ ଦିଅନ୍ତୁ, ଧାଡ଼ିପ୍ରତି ଗୋଟିଏ ଲେଖାଏଁ ନାମ, ଆଉ ଆପଣ ଏବେକାର ସଂସ୍କରଣ ଚାହୁଁଛନ୍ତି ବା ପୁରୁଣା ସଂସ୍କରଣମାନ ଚାହୁଁଛନ୍ତି, ପୃଷ୍ଠାର ଇତିହାସ ସହ, କିମ୍ବା ଶେଷ ବଦଳ ବାବଦରେ ଏକ ବିବରଣୀ ସହ ଏବେକାର ସଂସ୍କରଣ ଦିଅନ୍ତୁ ।
 
 ଶେଷ କ୍ଷେତ୍ରରେ ଆପଣ ଏକ ଲିଙ୍କ ବ୍ୟବହାର କରିପାରିବେ, ଯଥା ଏକ ପୃଷ୍ଠା ପାଇଁ [[{{#Special:Export}}/{{MediaWiki:Mainpage}}]] "[[{{MediaWiki:Mainpage}}]]" ।',
+'exportall' => 'ସମସ୍ତ ପୃଷ୍ଠାଗୁଡିକୁ ରପ୍ତାନି କରିବେ',
 'exportcuronly' => 'କେବଳ ଏବେକର ସଂସ୍କରଣରେ ଭରିଥାଏ, ପୁରା ଇତିହାସରେ ନୁହେଁ',
 'exportnohistory' => "----
 '''ସୂଚନା:''' ଦେଖଣାରେ ଅସୁବିଧା ହେବା କାରଣରୁ ପୃଷ୍ଠାର ପୁରା ଇତିହାସ ରପ୍ତାନି କରିବା ଅଚଳ କରାଯାଇଛି ।",
@@ -2865,6 +2918,7 @@ MediaWiki ବ୍ୟବହାର କରି [[Special:Import|ପୃଷ୍ଠା 
 'import-interwiki-templates' => 'ସବୁଯାକ ଛାଞ୍ଚ ଏହା ଭିତରେ ରଖିବେ',
 'import-interwiki-submit' => 'ଆମଦାନୀ',
 'import-interwiki-namespace' => 'ଲକ୍ଷ ନେମସ୍ପେସ:',
+'import-interwiki-rootpage' => 'ଲକ୍ଷସ୍ଥଳୀର ମୂଳ ପୃଷ୍ଠା(ଇଛାଧୀନ):',
 'import-upload-filename' => 'ଫାଇଲ ନାମ:',
 'import-comment' => 'ମତାମତ:',
 'importtext' => '[[Special:Export|ରପ୍ତାନି ସୁବିଧା]] ବ୍ୟବହାର କରି ମୂଳ ଉଇକିରୁ ଫାଇଲଟି ରପ୍ତାନି କରନ୍ତୁ ।
@@ -2898,6 +2952,13 @@ MediaWiki ବ୍ୟବହାର କରି [[Special:Import|ପୃଷ୍ଠା 
 'import-invalid-interwiki' => 'ଦିଆଯାଇଥିବା ଉଇକିରୁ ଆହରଣ କରାଯାଇପାରିବ ନାହିଁ ।',
 'import-error-edit' => '"$1" ପୃଷ୍ଠାଟି ଅଣାଯାଇନାହିଁ କାରଣ ଆପଣଙ୍କର ଏହାକୁ ବଦଳାଇବା ଅଧିକାର ନାହିଁ ।',
 'import-error-create' => '"$1" ପୃଷ୍ଠାଟି ଅଣାଯାଇନାହିଁ କାରଣ ଆପଣଙ୍କର ଏହାକୁ ତିଆରିକରିବା ଅଧିକାର ନାହିଁ ।',
+'import-error-interwiki' => '"$1"ପୃଷ୍ଠାକୁ ଆମଦାନୀ କରିହେଲାନି କାରଣ ଏହାର ନାମ ବାହାରଲିଙ୍କରେ ଆଗରୁ ଅଛି(ଉଇକିଗୁଡିକ ମଧ୍ୟରେ) ।',
+'import-error-special' => '"$1"ପୃଷ୍ଠାକୁ ଆମଦାନୀ କରିହେଲାନି କାରଣ ଏହା ଏକ ବିଶେଷ ନେମସ୍ପେସରେ ଅଛି ଯାହା ପୃଷ୍ଠାଗୁଡିକୁ ଅନୁମତି ଦିଏ ନାହିଁ ।',
+'import-error-invalid' => '"$1"ପୃଷ୍ଠାକୁ ଆମଦାନୀ କରିହେଲାନି କାରଣ ଏହାର ନାମଟି ଅବୈଧ ।',
+'import-error-unserialize' => '"$1"ପୃଷ୍ଠାର $2 ପୁନରାବୃତିଟି ଅଣତାଲିକାଭୁକ୍ତ କରାଯାଇପାରିବ ନାହିଁ । ପୁନରାବୃତିଟି $3 ପ୍ରକାର ବ୍ୟବାହର କରିବା ପାଇଁ $4ରେ ତାଲିକାଭୁକ୍ତ ହୋଇଛି ।',
+'import-options-wrong' => 'ଭୁଲ {{PLURAL:$2|option|options}}: <nowiki>$1</nowiki>',
+'import-rootpage-invalid' => 'ଦିଆଯାଇଥିବା ମୂଳ ପୃଷ୍ଠାର ଶୀର୍ଷକଟି ଅବୈଧ ଅଟେ ।',
+'import-rootpage-nosubpage' => 'ମୂଳ ପୃଷ୍ଠାର "$1" ନେମସ୍ପେସ ଉପପୃଷ୍ଠାର ଅନୁମତି ଦିଏନାହିଁ ।',
 
 # Import log
 'importlogpage' => 'ଇତିହାସ ଆହରଣ',
@@ -2907,6 +2968,16 @@ MediaWiki ବ୍ୟବହାର କରି [[Special:Import|ପୃଷ୍ଠା 
 'import-logentry-interwiki' => '$1 କୁ ଟ୍ରାନ୍ସଉଇକି କରାଗଲା',
 'import-logentry-interwiki-detail' => '$2 ଭିତରୁ $1 ଗୋଟି {{PLURAL:$1|ସଂସ୍କରଣ|ସଂସ୍କରଣ}}',
 
+# JavaScriptTest
+'javascripttest' => 'ଜାଭାସ୍କ୍ରିପ୍ଟ ପରଖ',
+'javascripttest-title' => 'ଚାଲୁଥିବା $1 ପରଖଗୁଡିକ',
+'javascripttest-pagetext-noframework' => 'ଏହି ପୃଷ୍ଠାଟି ଜାଭାସ୍କ୍ରିପ୍ଟ ପରଖ ପାଇଁ ସଂରକ୍ଷଣ କରି ରଖାଯାଇଛି ।',
+'javascripttest-pagetext-unknownframework' => '"$1" ଅଜଣା ପରଖ ଗତିବିଧି ।',
+'javascripttest-pagetext-frameworks' => 'ଦୟାକରି ନିମ୍ନରେ ଥିବା ଏକ ପରଖ ପ୍ରକ୍ରିୟାକୁ ବାଛନ୍ତୁ :$1',
+'javascripttest-pagetext-skins' => 'ଏହି ପରଖକୁ ଚାଲୁ କରିବା ପାଇଁ ଏକ ଆବରଣ ବାଛନ୍ତୁ ।',
+'javascripttest-qunit-intro' => 'mediawiki.orgରେ [$1 testing documentation]କୁ ଦେଖନ୍ତୁ ।',
+'javascripttest-qunit-heading' => 'ମେଡିଆଉଇକି ଜାଭାସ୍କ୍ରିପ୍ଟ Qunit ପରଖ ପ୍ରକ୍ରିୟା',
+
 # Tooltip help for the actions
 'tooltip-pt-userpage' => 'ଆପଣଙ୍କ ବ୍ୟବହାରକାରୀ ପୃଷ୍ଠା',
 'tooltip-pt-anonuserpage' => 'ଆପଣ ଯେଉଁ IP ଠିକଣାର ବ୍ୟବହାରକାରୀ ପୃଷ୍ଠାଟି ବଦଳାଇବା ପାଇଁ ଚେଷ୍ଟା କରୁଛନ୍ତି',
@@ -3000,18 +3071,52 @@ MediaWiki ବ୍ୟବହାର କରି [[Special:Import|ପୃଷ୍ଠା 
 'spambot_username' => 'ମିଡ଼ିଆଉଇକି ସ୍ପାମ ସଫାକରିବା',
 'spam_reverting' => '$1 ସହ ଯୋଡ଼ା ନଥିବା ଶେଷ ସଂସ୍କରଣକୁ ଲେଉଟାଇ ଦେଉଅଛୁଁ',
 'spam_blanking' => '$1 ସହ ଯୋଡ଼ାଥିବା ସବୁଯାକ ସଂସ୍କରଣ ଖାଲି କରିଦିଆଗଲା',
+'spam_deleting' => '$1 ସହ ଯୋଡ଼ାଥିବା ସବୁଯାକ ସଂସ୍କରଣ ଖାଲି କରିଦିଆଗଲା',
 
 # Info page
 'pageinfo-title' => '"$1"ର ବିବରଣୀ',
+'pageinfo-not-current' => 'ଦୁଖିତଃ, ପୁରୁଣା ସଂସ୍କରଣଗୁଡିକର ଏହି ତଥ୍ୟ ଦେବା ସମ୍ଭବ ନୁହେଁ ।',
 'pageinfo-header-basic' => 'ସାଧାରଣ ଜାଣିବା କଥା',
-'pageinfo-header-edits' => 'ବଦଳସବୁ',
+'pageinfo-header-edits' => 'ବଦଳ ଇତିହାସ',
+'pageinfo-header-restrictions' => 'ପୃଷ୍ଠା ସୁରକ୍ଷା',
+'pageinfo-header-properties' => 'ପୃଷ୍ଠା ସବିଶେଷ',
+'pageinfo-display-title' => 'ଶୀର୍ଷକ ଦେଖାଇବେ',
+'pageinfo-default-sort' => 'ପୂର୍ବରୁଥିବା ସଜାଇବା ଚାବି',
+'pageinfo-length' => 'ପୃଷ୍ଠା ଲମ୍ବ(ବାଇଟରେ)',
 'pageinfo-article-id' => 'ପୃଷ୍ଠା ଆଇଡ଼ି',
+'pageinfo-language' => 'ପୃଷ୍ଠା ବିଷୟବସ୍ତୁର ଭାଷା',
+'pageinfo-robot-policy' => 'ଖୋଜିବା ଇଞ୍ଜିନ ସ୍ଥିତି',
+'pageinfo-robot-index' => 'ସୂଚୀପତ୍ର କରିହେଉଥିବା',
+'pageinfo-robot-noindex' => 'ସୂଚୀପତ୍ର କରିହେଉନଥିବା',
 'pageinfo-views' => 'ଦେଖଣା ସଂଖ୍ୟା',
-'pageinfo-watchers' => 'ଦେଖଣାହାରି ସଂଖ୍ୟା',
+'pageinfo-watchers' => 'ପୃଷ୍ଠା ଦେଖଣାହାରି ସଂଖ୍ୟା',
+'pageinfo-redirects-name' => 'ଏହି ପୃଷ୍ଠାକୁ ଲେଉଟାଣି ଅଛି',
+'pageinfo-subpages-name' => 'ଏହି ପୃଷ୍ଠାରେ ଥିବା ଉପପୃଷ୍ଠା',
+'pageinfo-subpages-value' => '$1 ($2 {{PLURAL:$2|redirect|redirects}}; $3 {{PLURAL:$3|non-redirect|non-redirects}})',
+'pageinfo-firstuser' => 'ପୃଷ୍ଠା ତିଆରିକରିଛନ୍ତି',
+'pageinfo-firsttime' => 'ପୃଷ୍ଠା ତିଆରି କରିବା ତାରିଖ',
+'pageinfo-lastuser' => 'ନୂତନତମ ବଦଳକାରୀ',
+'pageinfo-lasttime' => 'ନୂତନତମ ବଦଳର ତାରିଖ',
 'pageinfo-edits' => 'ସମ୍ପାଦନା ସଂଖ୍ୟା',
-'pageinfo-authors' => 'ନିଆରା ଲେଖକଙ୍କ ସଂଖ୍ୟା',
+'pageinfo-authors' => 'ନିଆରା ଲେଖକଙ୍କ ମୋଟସଂଖ୍ୟା',
+'pageinfo-recent-edits' => 'ନଗଦବଦଳ ସଂଖ୍ୟା($1 ମଧ୍ୟରେ)',
+'pageinfo-recent-authors' => 'ନିଆରା ଲେଖକଙ୍କ ମୋଟସଂଖ୍ୟା',
+'pageinfo-magic-words' => 'ଚମତ୍କାର {{PLURAL:$1|word|words}} ($1)',
+'pageinfo-hidden-categories' => '{{PLURAL:$1|category|categories}} ($1) ଲୁଚାଗଲା',
+'pageinfo-templates' => '{{PLURAL:$1|template|templates}} ($1) ଯୋଡିହେଇଥିବା',
+'pageinfo-transclusions' => '{{PLURAL:$1|Page|Pages}} ($1)ରେ ଯୋଡାଗଲା',
+'pageinfo-toolboxlink' => 'ପୃଷ୍ଠା ସୂଚନା',
+'pageinfo-redirectsto' => 'କୁ ଲେଉଟାଣି',
+'pageinfo-redirectsto-info' => 'ସୂଚନା',
+'pageinfo-contentpage' => 'ବିଷୟବସ୍ତୁ ପୃଷ୍ଠାଭାବେ ଗଣା ହେଲା',
 'pageinfo-contentpage-yes' => 'ହଁ',
+'pageinfo-protect-cascading' => 'ସୁରକ୍ଷାଗୁଡିକ ଏଠାରୁ ଲାଗିଲାଗି ଅଛି',
 'pageinfo-protect-cascading-yes' => 'ହଁ',
+'pageinfo-protect-cascading-from' => 'ରୁ ସୁରକ୍ଷାଗୁଡିକ ଲାଗିଲାଗି ଅଛି',
+'pageinfo-category-info' => 'ଶ୍ରେଣୀସମ୍ପର୍କୀୟ ତଥ୍ୟ',
+'pageinfo-category-pages' => 'ପୃଷ୍ଠା ସଂଖ୍ୟା',
+'pageinfo-category-subcats' => 'ଉପବିଭାଗଗୁଡିକର ସଂଖ୍ୟା',
+'pageinfo-category-files' => 'ଫାଇଲ ସଂଖ୍ୟା',
 
 # Patrolling
 'markaspatrolleddiff' => 'ଜଗାଯାଇଅଛି ବୋଲି ଚିହ୍ନିତ କରାଗଲା',
@@ -3023,6 +3128,8 @@ MediaWiki ବ୍ୟବହାର କରି [[Special:Import|ପୃଷ୍ଠା 
 'markedaspatrollederror' => 'ଜଗାଯାଇଅଛି ବୋଲି ଚିହ୍ନିତ କରିପାରୁଲୁଁ ନାହିଁ',
 'markedaspatrollederrortext' => 'ଜଗାଯାଇଅଛି ବୋଲି ଚିହ୍ନିତ କରିବା ନିମନ୍ତେ ଆପଣଙ୍କୁ ଏକ ସଂସ୍କରଣ ଦେବାକୁ ପଡ଼ିବ ।',
 'markedaspatrollederror-noautopatrol' => 'ଆପଣ ନିଜର ସମ୍ପାଦନାସବୁକୁ ଜଗାଯାଇଅଛି ବୋଲି ଚିହ୍ନିତ କରିପାରିବେ ନାହିଁ ।',
+'markedaspatrollednotify' => '$1 ପାଇଁ ଏହି ବଦଳଟିକୁ ଶ୍ରେଣୀଗତ ବୋଲି ଚିହ୍ନଟ କରାଯାଇଛି ।',
+'markedaspatrollederrornotify' => 'ଶ୍ରେଣୀବିଭାଗ କରିହେଲାନି ।',
 
 # Patrol log
 'patrol-log-page' => 'ଜଗିବା ଇତିହାସ',
@@ -3056,6 +3163,7 @@ $1',
 'file-nohires' => 'ବଡ଼ ରେଜୋଲୁସନ ନାହିଁ ।',
 'svg-long-desc' => 'SVG ଫାଇଲ, ସାଧାରଣ ମାପ $1 × $2 ପିକ୍ସେଲ, ଫାଇଲ ଆକାର: $3',
 'svg-long-desc-animated' => 'Animated SVG ଫାଇଲ, ସାଧାରଣ ମାପ $1 × $2 ପିକ୍ସେଲ, ଫାଇଲ ଆକାର: $3',
+'svg-long-error' => 'ଅବୈଧ SVG ଫାଇଲ: $1',
 'show-big-image' => 'ପୁରା ବଡ଼ ଆକାରରେ',
 'show-big-image-preview' => 'ଏହି ଦେଖଣାର ଆକାର: $1 ।',
 'show-big-image-other' => 'ବାକି {{PLURAL:$2|ରେଜୋଲୁସନ|ରେଜୋଲୁସନ}}: $1.',
@@ -3065,6 +3173,8 @@ $1',
 'file-info-png-looped' => 'ଲୁପ ଥିବା',
 'file-info-png-repeat' => '$1 {{PLURAL:$1|ଥରେ|ଥର}} ଖେଳିଲେ',
 'file-info-png-frames' => '$1 ଗୋଟି {{PLURAL:$1|ଫ୍ରେମ|ଫ୍ରେମ}}',
+'file-no-thumb-animation' => "'''ଟୀକା:ଯାନ୍ତ୍ରିକ ସୀମାରେଖା ଯୋଗୁ, ଏହି ଫାଇଲର ଛୋଟଛବିଗୁଡିକ ଦୋଳାୟମାନ ହେବନାହିଁ ।'''",
+'file-no-thumb-animation-gif' => "'''ଟୀକା:ଯାନ୍ତ୍ରିକ ସୀମାରେଖା ଯୋଗୁ, ଏହି ଫାଇଲଭଳି ଅଧିକ ଆକାରଥିବା GIF ଛବିଗୁଡିକର ଛୋଟଛବିଗୁଡିକ ଦୋଳାୟମାନ ହେବନାହିଁ ।'''",
 
 # Special:NewFiles
 'newimages' => 'ନୁତନ ଫାଇଲଗୁଡିକର ଗ୍ୟାଲେରୀ',
@@ -3083,7 +3193,10 @@ $1',
 'minutes' => '{{PLURAL:$1|$1 ମିନିଟ|$1 ମିନିଟ}}',
 'hours' => '{{PLURAL:$1|$1 ଘଣ୍ଟା|$1 ଘଣ୍ଟା}}',
 'days' => '{{PLURAL:$1|$1 ଦିନ|$1 ଦିନ}}',
+'months' => '{{PLURAL:$1|$1 month|$1 months}}',
+'years' => '{{PLURAL:$1|$1 year|$1 years}}',
 'ago' => '$1 ଆଗରୁ',
+'just-now' => 'ଏବେ ଏବେ',
 
 # Bad image list
 'bad_image_list' => 'ଗଢ଼ଣଟି ଏମିତି ହେବ:
@@ -3579,6 +3692,7 @@ $5
 # Scary transclusion
 'scarytranscludedisabled' => '[ଉଇକି-ଉଇକି ଭିତରେ ଟ୍ରାନ୍ସକ୍ଲୁଡ଼ିଙ୍ଗ ଅଚଳ କରାଯାଇଛି]',
 'scarytranscludefailed' => '[$1 ପାଇଁ ଛାଞ୍ଚକୁ ପାଇବା ସମ୍ଭବ ହେଲାନାହିଁ]',
+'scarytranscludefailed-httpstatus' => '[Template fetch failed for $1: HTTP $2]',
 'scarytranscludetoolong' => '[URLଟି ଖୁବ ଲମ୍ବା]',
 
 # Delete conflict
@@ -3607,7 +3721,7 @@ $5
 'imgmultigoto' => '$1 ପୃଷ୍ଠାକୁ ଯିବେ',
 
 # Table pager
-'ascending_abbrev' => 'asc',
+'ascending_abbrev' => 'ସାନରୁ ବଡ କ୍ରମରେ',
 'descending_abbrev' => 'ବଖାଣ',
 'table_pager_next' => 'ପର ପୃଷ୍ଠା',
 'table_pager_prev' => 'ଆଗ ପୃଷ୍ଠା',
@@ -3690,6 +3804,7 @@ $5
 'version-license' => 'ଲାଇସେନ୍ସ',
 'version-poweredby-credits' => "ଏହି ଉଇକିଟି '''[//www.mediawiki.org/ ମିଡ଼ିଆଉଇକି]''' ଦେଇ ପରିଚାଳିତ, ସତ୍ଵାଧିକାର © ୨୦୦୧-$1 $2 ।",
 'version-poweredby-others' => 'ବାକିସବୁ',
+'version-credits-summary' => 'ଆମେ ଏହି ଲୋକମାନଙ୍କୁ [[Special:Version|MediaWiki]]ରେ ସେମାନକର ଅବଦାନ ପାଇଁ ଚିହ୍ନିବାକୁ ଚାହୁଁଛୁ ।',
 'version-license-info' => 'MediaWiki ଏକ ମାଗଣା ସଫ୍ଟୱାର; ଆପଣ ଏହାକୁ ପୁନବଣ୍ଟନ କରିପାରିବେ ବା GNU ଜେନେରାଲ ପବ୍ଲିକ ଲାଇସେନ୍ସ ଅଧିନରେ ବଦଳାଇପାରିବେ ଯାହା ଫ୍ରି ସଫ୍ଟୱାର ଫାଉଣ୍ଡେସନ ଦେଇ ପ୍ରକାଶିତ ହୋଇଥିବ।
 
 MediaWiki ଉପଯୋଗୀ ହେବା ଲକ୍ଷରେ ବଣ୍ଟାଯାଇଥାଏ, କିନ୍ତୁ ଏହା କୌଣସି ଲିଖିତ ପଟା ସହ ଆସିନଥାଏ; ଏହା ବିକ୍ରୟଯୋଗ୍ୟତା ବା ଏକ ନିର୍ଦିଷ୍ଟ କାମପାଇଁ ବାଧ୍ୟତାମୂଳକ ପଟା ସହ ଆସିନଥାଏ । ଅଧିକ ଜାଣିବା ନିମନ୍ତେ ଦୟାକରି GNU ଜେନେରାଲ ପବ୍ଲିକ ଲାଇସେନ୍ସ ଦେଖନ୍ତୁ ।
@@ -3698,6 +3813,7 @@ MediaWiki ଉପଯୋଗୀ ହେବା ଲକ୍ଷରେ ବଣ୍ଟାଯ
 'version-software' => 'ଇନଷ୍ଟଲ ହୋଇଥିବା ସଫ୍ଟୱାର',
 'version-software-product' => 'ଉତ୍ପାଦ',
 'version-software-version' => 'ସଂସ୍କରଣ',
+'version-entrypoints' => 'ନିବେଶ ହେଉଥିବା ସ୍ଥାନର URLଗୁଡିକ',
 'version-entrypoints-header-entrypoint' => 'ପ୍ରବେଶ ବିନ୍ଦୁ',
 'version-entrypoints-header-url' => 'ଇଉଆରଏଲ',
 
@@ -3828,11 +3944,14 @@ MediaWiki ଉପଯୋଗୀ ହେବା ଲକ୍ଷରେ ବଣ୍ଟାଯ
 'logentry-move-move_redir-noredirect' => '$1 $3 ପୃଷ୍ଠାଟି $4କୁ ପୁନପ୍ରେରଣକୁ ଛାଡ଼ି ପୁନପ୍ରେରଣ ବିନା ଘୁଞ୍ଚାଇଲେ',
 'logentry-patrol-patrol' => '$1 $3 ପୃଷ୍ଠାର $4 ତମ ସଙ୍କଳନକୁ ଜଗାଯାଇଅଛି ବୋଲି ଚିହ୍ନିତ କଲେ',
 'logentry-patrol-patrol-auto' => '$1 ଆପେଆପେ $3 ପୃଷ୍ଠାର $4 ତମ ସଙ୍କଳନକୁ ଜଗାଯାଇଅଛି ବୋଲି ଚିହ୍ନିତ କଲେ',
-'logentry-newusers-newusers' => '$1 ନୂଆ ସଭ୍ୟ ଖାତାଟିଏ ତିଆରି କଲେ',
-'logentry-newusers-create' => '$1 ନୂଆ ସଭ୍ୟ ଖାତାଟିଏ ତିଆରି କଲେ',
-'logentry-newusers-create2' => '$1 ନୂଆ ସଭ୍ୟ ଖାତାଟିଏ $3 ତିଆରି କଲେ',
+'logentry-newusers-newusers' => 'ସଭ୍ୟ ଖାତା $1 ତିଆରି କରାଗଲା',
+'logentry-newusers-create' => 'ସଭ୍ୟ ଖାତା $1 ତିଆରି କରାଗଲା',
+'logentry-newusers-create2' => 'ସଭ୍ୟ ଖାତା $3ଟି $1 ଦ୍ଵାରା ତିଆରି କରାଗଲା',
 'logentry-newusers-autocreate' => '$1 ଖାତାଟି ଆପେଆପେ ତିଆରିହେଲା',
-'newuserlog-byemail' => 'ଇ-ମେଲରେ ପାସୱାର୍ଡ଼ ପଠାଇଦିଆଗଲା',
+'logentry-rights-rights' => '$1, $3 ପାଇଁ $4ରୁ $5କୁ ସଭ୍ୟପଦ ବଦଳାଇଲେ',
+'logentry-rights-rights-legacy' => '$1, $3 ପାଇଁ ଗୋଷ୍ଠୀ ସଭ୍ୟପଦ ବଦଳାଇଛି',
+'logentry-rights-autopromote' => '$1 ଆପେ ଆପେ $4ରୁ $5କୁ ଗଲେ',
+'rightsnone' => '(କିଛି ନାହିଁ)',
 
 # Feedback
 'feedback-bugornote' => 'ଦୟାକରି ଆପଣ ଏକ କାରିଗରି ଅସୁବିଧାଟିଏ ଜଣାଇବା ପାଇଁ ଚାହୁଁଥିଲେ ଦୟାକରି [$1 ଏଠାରେ ଅସୁବିଧାଟି ଜଣାନ୍ତୁ] । 
@@ -3865,10 +3984,13 @@ MediaWiki ଉପଯୋଗୀ ହେବା ଲକ୍ଷରେ ବଣ୍ଟାଯ
 'api-error-empty-file' => 'ଆପଣ ପଠାଇଥିବା ଫାଇଲଟି ଖାଲି ଅଟେ ।',
 'api-error-emptypage' => 'ନୂଆ, ଖାଲି ପୃଷ୍ଠ ତିଆରି କରିବାର ଅନୁମତି ନାହି ।',
 'api-error-fetchfileerror' => 'ଭିତର ଅସୁବିଧା: ଏହି ଫାଇଲଟି ପାଖରେ ପହଞ୍ଚିବା ବେଳେ କିଛି ଅସୁବିଧା ହେଲା ।',
+'api-error-fileexists-forbidden' => '"$1" ନାମରେ ଗୋଟିଏ ଫାଇଲ ଆଗରୁ ଅଛି, ଏବଂ ଏହା ଉପରେ ଲେଖି ହେବନି ।',
+'api-error-fileexists-shared-forbidden' => '"$1" ନାମରେ ଗୋଟିଏ ଫାଇଲ ବଣ୍ଟାଯାଇଥିବା ସାଇତାଗୃହରେ ଅଛି, ଏବଂ ଏହା ବାଲାଯାଇପାରିବ ନାହିଁ ।',
 'api-error-file-too-large' => 'ଆପଣ ପଠାଇଥିବା ଫାଇଲଟି ବିରାଟ ଅଟେ ।',
 'api-error-filename-tooshort' => 'ଫାଇଲ ନାମଟି ଖୁବ ଛୋଟ ।',
 'api-error-filetype-banned' => 'ଏହି ପ୍ରକାରର ଫାଇଲ ବାରଣ କରାଯାଇଅଛି ।',
-'api-error-filetype-banned-type' => '$1 {{PLURAL:$4|ଏକ ଅନୁମୋଦିତ ଫାଇଲ ପ୍ରକାର ନୁହେଁ|ମାନ ଅନୁମୋଦିତ ଫାଇଲ ପ୍ରକାର ନୁହଁନ୍ତି}} । ଅନୁମୋଦିତ {{PLURAL:$3|ଫାଇଲ ପ୍ରକାର ହେଲା|ଫାଇଲ ପ୍ରକାର ହେଲା}} $2 ।',
+'api-error-filetype-banned-type' => '$1 {{PLURAL:$4|ଏକ ଅନୁମୋଦିତ ଫାଇଲ ପ୍ରକାର ନୁହେଁ|ମାନ ଅନୁମୋଦିତ ଫାଇଲ ପ୍ରକାର ନୁହଁନ୍ତି}} ।
+ଅନୁମୋଦିତ {{PLURAL:$3|ଫାଇଲ ପ୍ରକାର ହେଲା|ଫାଇଲଗୁଡିକର ପ୍ରକାର ହେଲା}} $2 ।',
 'api-error-filetype-missing' => 'ଫାଇଲଟିର ଏକ୍ସଟେନସନ ନାହିଁ ।',
 'api-error-hookaborted' => 'ଏକ ଏକ୍ସଟେନସନ ହୁକ ଦେଇ ଆପଣ କରୁଥିବା ବଦଳଟି ବନ୍ଦ କରିଦିଆଗଲା ।',
 'api-error-http' => 'ଭିତର ଅସୁବିଧା: ସର୍ଭର ସହ ଯୋଡ଼ି ହେଉନାହିଁ ।',
index 0f8a436..984a3d7 100644 (file)
@@ -55,6 +55,8 @@ $specialPageAliases = array(
        'Activeusers'               => array( 'АктивонАрхайджытæ' ),
        'Allmessages'               => array( 'ФыстæджытæИууылдæр' ),
        'Allpages'                  => array( 'ФæрстæИууылдæр' ),
+       'Ancientpages'              => array( 'ЗæрондФæрстæ' ),
+       'Badtitle'                  => array( 'Æвзæрном' ),
        'Blankpage'                 => array( 'АфтидФарс' ),
        'Block'                     => array( 'Блок' ),
        'Blockme'                   => array( 'НыблокМæКæн' ),
@@ -67,25 +69,117 @@ $specialPageAliases = array(
        'Confirmemail'              => array( 'EmailБæлвырдКæнын' ),
        'Contributions'             => array( 'Бавæрд' ),
        'CreateAccount'             => array( 'АккаунтСкæнын' ),
+       'Deadendpages'              => array( 'ХæдбарФæрстæ' ),
        'DeletedContributions'      => array( 'ХафтБавæрд' ),
+       'Disambiguations'           => array( 'Бирæнысаниуæгджынтæ' ),
+       'DoubleRedirects'           => array( 'ДывæрÆрвыстытæ' ),
+       'EditWatchlist'             => array( 'ЦæстдардИвын' ),
+       'Emailuser'                 => array( 'АрхайæгмæEmail' ),
+       'Export'                    => array( 'Экспорт' ),
+       'Fewestrevisions'           => array( 'ЦъусдæрФæлтæртæ' ),
+       'FileDuplicateSearch'       => array( 'ФайлыДубликатАгурын' ),
+       'Filepath'                  => array( 'ФайлмæФæт' ),
+       'Import'                    => array( 'Импорт' ),
+       'Invalidateemail'           => array( 'EmailРабæлвырдКæнын' ),
+       'JavaScriptTest'            => array( 'JavaScriptТест' ),
+       'BlockList'                 => array( 'Блокты_Номхыгъд' ),
+       'LinkSearch'                => array( 'ÆрвитæнАгурын' ),
+       'Listadmins'                => array( 'РадгæстыНомхыгъд' ),
+       'Listbots'                  => array( 'БоттыНомхыгъд' ),
+       'Listfiles'                 => array( 'НывтыНомхыгъд' ),
+       'Listgrouprights'           => array( 'АрхайджытыБартыНомхыгъд' ),
+       'Listredirects'             => array( 'ÆрвыстытыНомхыгъд' ),
+       'Listusers'                 => array( 'АрхайджытыНомхыгъд' ),
+       'Lockdb'                    => array( 'РДСæхгæнын' ),
+       'Log'                       => array( 'Логтæ' ),
+       'Lonelypages'               => array( 'ИунæгФæрстæ' ),
+       'Longpages'                 => array( 'ДаргъФæрстæ' ),
+       'MergeHistory'              => array( 'ИсторитæБаиуКæнын' ),
+       'MIMEsearch'                => array( 'MIMEАгурын' ),
+       'Mostcategories'            => array( 'ФылдæрКатегоритæ' ),
+       'Mostimages'                => array( 'ÆппæтыАрхайдФайлтæ' ),
+       'Mostinterwikis'            => array( 'ФылдæрИнтервикитæ' ),
+       'Mostlinked'                => array( 'ФылдæрБастФæрстæ' ),
+       'Mostlinkedcategories'      => array( 'ФылдæрБастКатегоритæ' ),
+       'Mostlinkedtemplates'       => array( 'ФылдæрБастХуызæгтæ' ),
+       'Mostrevisions'             => array( 'ФылдæрФæлтæртæ' ),
+       'Movepage'                  => array( 'ФарсХæссын' ),
        'Mycontributions'           => array( 'МæБавæрд' ),
        'Mypage'                    => array( 'МæФарс' ),
        'Mytalk'                    => array( 'МæНыхас' ),
        'Myuploads'                 => array( 'МæБавгæд' ),
        'Newimages'                 => array( 'НогФайлтæ' ),
        'Newpages'                  => array( 'НогФæрстæ' ),
-       'Preferences'               => array( 'Фадæттæ' ),
+       'PasswordReset'             => array( 'ПарольНогКæнын' ),
+       'PermanentLink'             => array( 'УдгасÆрвитæн' ),
+       'Popularpages'              => array( 'АрæхФæрстæ' ),
+       'Preferences'               => array( 'Уагæвæрдтæ' ),
+       'Prefixindex'               => array( 'РазæфтуантыИндекс' ),
+       'Protectedpages'            => array( 'ÆхгæдФæрстæ' ),
+       'Protectedtitles'           => array( 'ÆхгæдНæмттæ' ),
        'Randompage'                => array( 'ÆрхаугæФарс' ),
+       'Randomredirect'            => array( 'ÆрхаугæРарвыст' ),
        'Recentchanges'             => array( 'ФæстагИвдтытæ' ),
+       'Recentchangeslinked'       => array( 'БастИвдтытæ' ),
+       'Revisiondelete'            => array( 'ИвдХафын' ),
        'Search'                    => array( 'Агурын' ),
+       'Shortpages'                => array( 'ЦыбырФæрстæ' ),
+       'Specialpages'              => array( 'СæрмагондФæрстæ' ),
+       'Statistics'                => array( 'Статистикæ' ),
+       'Tags'                      => array( 'Тегтæ' ),
+       'Unblock'                   => array( 'РаблокКæнын' ),
+       'Uncategorizedcategories'   => array( 'ÆнæКатегориКатегоритæ' ),
+       'Uncategorizedimages'       => array( 'ÆнæКатегориФайлтæ' ),
+       'Uncategorizedpages'        => array( 'ÆнæКатегориФæрстæ' ),
+       'Uncategorizedtemplates'    => array( 'ÆнæКатегориХуызæгтæ' ),
+       'Undelete'                  => array( 'Рацаразын' ),
+       'Unlockdb'                  => array( 'РДРаблокКæнын' ),
+       'Unusedcategories'          => array( 'ÆнæАрхайдКатегоритæ' ),
+       'Unusedimages'              => array( 'ÆнæАрхайдФайлтæ' ),
+       'Unusedtemplates'           => array( 'ÆнæАрхайдХуызæгтæ' ),
+       'Unwatchedpages'            => array( 'ÆнæЦæстдардФæрстæ' ),
+       'Upload'                    => array( 'Æвгæнын' ),
+       'Userlogin'                 => array( 'Бахизын' ),
+       'Userlogout'                => array( 'Рахизын' ),
+       'Userrights'                => array( 'АрхайæджыБартæ' ),
+       'Version'                   => array( 'Фæлтæр' ),
+       'Wantedcategories'          => array( 'ХъæугæКатегоритæ' ),
+       'Wantedfiles'               => array( 'ХъæугæФайлтæ' ),
+       'Wantedpages'               => array( 'ХъæугæФæрстæ' ),
+       'Wantedtemplates'           => array( 'ХъæугæХуызæгтæ' ),
        'Watchlist'                 => array( 'Цæстдард' ),
+       'Whatlinkshere'             => array( 'АрдæмЦыÆрвиты' ),
+       'Withoutinterwiki'          => array( 'ÆнæИнтервики' ),
 );
 
 
 $magicWords = array(
-       'redirect'                  => array( '0', '#РАРВЫСТ', '#перенаправление', '#перенапр', '#REDIRECT' ),
+       'redirect'                  => array( '0', '#ÆРВИТÆН', '#ÆРВЫСТ', '#РАРВЫСТ', '#перенаправление', '#перенапр', '#REDIRECT' ),
+       'notoc'                     => array( '0', '__ÆНÆСÆР__', '__БЕЗ_ОГЛАВЛЕНИЯ__', '__БЕЗ_ОГЛ__', '__NOTOC__' ),
+       'nogallery'                 => array( '0', '__ÆНÆГАЛЕРЕЙ__', '__БЕЗ_ГАЛЕРЕИ__', '__NOGALLERY__' ),
+       'forcetoc'                  => array( '0', '__СÆРТИМÆ__', '__ОБЯЗАТЕЛЬНОЕ_ОГЛАВЛЕНИЕ__', '__ОБЯЗ_ОГЛ__', '__FORCETOC__' ),
+       'toc'                       => array( '0', '__СÆРТÆ__', '__ОГЛАВЛЕНИЕ__', '__ОГЛ__', '__TOC__' ),
+       'noeditsection'             => array( '0', '__ÆНÆХАЙИВЫНÆЙ__', '__БЕЗ_РЕДАКТИРОВАНИЯ_РАЗДЕЛА__', '__NOEDITSECTION__' ),
+       'currentmonth'              => array( '1', 'АЦЫМÆЙ', 'АЦЫМÆЙ2', 'ТЕКУЩИЙ_МЕСЯЦ', 'ТЕКУЩИЙ_МЕСЯЦ_2', 'CURRENTMONTH', 'CURRENTMONTH2' ),
+       'currentmonth1'             => array( '1', 'АЦЫМÆЙ1', 'ТЕКУЩИЙ_МЕСЯЦ_1', 'CURRENTMONTH1' ),
+       'currentmonthname'          => array( '1', 'АЦЫМÆЙЫНОМ', 'НАЗВАНИЕ_ТЕКУЩЕГО_МЕСЯЦА', 'CURRENTMONTHNAME' ),
+       'currentmonthnamegen'       => array( '1', 'АЦЫМÆЙЫНОМГУЫР', 'НАЗВАНИЕ_ТЕКУЩЕГО_МЕСЯЦА_РОД', 'CURRENTMONTHNAMEGEN' ),
+       'currentmonthabbrev'        => array( '1', 'АЦЫМÆЙЫНОМЦЫБ', 'НАЗВАНИЕ_ТЕКУЩЕГО_МЕСЯЦА_АБР', 'CURRENTMONTHABBREV' ),
+       'currentday'                => array( '1', 'АБОН', 'ТЕКУЩИЙ_ДЕНЬ', 'CURRENTDAY' ),
+       'currentday2'               => array( '1', 'АБОН2', 'ТЕКУЩИЙ_ДЕНЬ_2', 'CURRENTDAY2' ),
+       'currentdayname'            => array( '1', 'АБОНЫБОНЫНОМ', 'НАЗВАНИЕ_ТЕКУЩЕГО_ДНЯ', 'CURRENTDAYNAME' ),
+       'currentyear'               => array( '1', 'АЦЫАЗ', 'ТЕКУЩИЙ_ГОД', 'CURRENTYEAR' ),
+       'currenttime'               => array( '1', 'НЫРЫРÆСТÆГ', 'ТЕКУЩЕЕ_ВРЕМЯ', 'CURRENTTIME' ),
+       'currenthour'               => array( '1', 'НЫРЫСАХАТ', 'ТЕКУЩИЙ_ЧАС', 'CURRENTHOUR' ),
+       'numberofpages'             => array( '1', 'ФÆРСТЫНЫМÆЦ', 'КОЛИЧЕСТВО_СТРАНИЦ', 'NUMBEROFPAGES' ),
+       'numberofarticles'          => array( '1', 'УАЦТЫНЫМÆЦ', 'КОЛИЧЕСТВО_СТАТЕЙ', 'NUMBEROFARTICLES' ),
+       'pagename'                  => array( '1', 'ФАРСЫНОМ', 'НАЗВАНИЕ_СТРАНИЦЫ', 'PAGENAME' ),
+       'img_thumbnail'             => array( '1', 'къаддæргонд', 'къаддæр', 'мини', 'миниатюра', 'thumbnail', 'thumb' ),
+       'img_manualthumb'           => array( '1', 'къаддæргонд=$1', 'къаддæр=$1', 'мини=$1', 'миниатюра=$1', 'thumbnail=$1', 'thumb=$1' ),
        'img_right'                 => array( '1', 'рахиз', 'справа', 'right' ),
        'img_left'                  => array( '1', 'галиу', 'слева', 'left' ),
+       'img_none'                  => array( '1', 'æнæ', 'без', 'none' ),
+       'img_center'                => array( '1', 'астæу', 'центр', 'center', 'centre' ),
 );
 
 $linkTrail = '/^((?:[a-z]|а|æ|б|в|г|д|е|ё|ж|з|и|й|к|л|м|н|о|п|р|с|т|у|ф|х|ц|ч|ш|щ|ъ|ы|ь|э|ю|я|“|»)+)(.*)$/sDu';
@@ -225,6 +319,7 @@ $messages = array(
 'newwindow' => '(кæны ног рудзынджы)',
 'cancel' => 'Ныууадзын',
 'moredotdotdot' => 'Фылдæр…',
+'morenotlisted' => 'Фылдæр æнææвдыст...',
 'mypage' => 'Фарс',
 'mytalk' => 'Ныхас',
 'anontalk' => 'Ацы IP-адрисы тæрхон',
@@ -243,7 +338,7 @@ $messages = array(
 
 # Vector skin
 'vector-action-addsection' => 'Нæуæг ныхас бакæнын',
-'vector-action-delete' => 'Ð\90ппаÑ\80ын',
+'vector-action-delete' => 'СÑ\85аÑ\84ын',
 'vector-action-move' => 'Ном ивын',
 'vector-action-protect' => 'Сæхгæнын',
 'vector-action-undelete' => 'Рацаразын',
@@ -279,7 +374,7 @@ $messages = array(
 'editthispage' => 'Ивын ацы фарс',
 'create-this-page' => 'Ацы фарс скæнын',
 'delete' => 'Схафын',
-'deletethispage' => 'Аппарын ацы фарс',
+'deletethispage' => 'Ацы фарс схафын',
 'undelete_short' => 'Рацаразын {{PLURAL:$1|иу ивд|$1 ивды}}',
 'viewdeleted_short' => 'Кæсын {{PLURAL:$1|иу хафт ивд|$1 хафт ивдтытæ}}',
 'protect' => 'Сæхгæнын',
@@ -306,7 +401,7 @@ $messages = array(
 'categorypage' => 'Категорийы фарс фен',
 'viewtalkpage' => 'Тæрхон фен',
 'otherlanguages' => 'Æндæр æвзæгтыл',
-'redirectedfrom' => '({{grammar:ablative|$1}} ӕрвыст)',
+'redirectedfrom' => '({{grammar:ablative|$1}} æрвыст)',
 'redirectpagesub' => 'Рарвысты фарс',
 'lastmodifiedat' => 'Ацы фарс фæстаг хатт ивд æрцыд: $1, $2.',
 'viewcount' => 'Ацы фарс домд æрцыд {{PLURAL:$1|иу хатт|$1 хатты}}.',
@@ -337,7 +432,7 @@ $1',
 'helppage' => 'Help:Мидис',
 'mainpage' => 'Сæйраг фарс',
 'mainpage-description' => 'Сæйраг фарс',
-'policy-url' => 'Project:УагæвæÑ\80д',
+'policy-url' => 'Project:ФæÑ\82к',
 'portal' => 'Архайджыты æхсæнад',
 'portal-url' => 'Project:Архайджыты æхсæнад',
 'privacy' => 'Хибардзинады политикæ',
@@ -444,15 +539,15 @@ $1',
 'fileappenderror' => 'Нæ рауадис бафтауын "$1" "{{grammar:allative|$2}}".',
 'filecopyerror' => 'Файл «$1» файлмæ «$2» халдихгæнæн нæ разынд.',
 'filerenameerror' => 'Нæ рауадис фæивын "$1" файлы ном "$2"-мæ.',
-'filedeleteerror' => 'Нæй аппарæн файл «$1».',
+'filedeleteerror' => 'Нæ уайы файл «$1» схафын.',
 'directorycreateerror' => 'Нæй саразæн файлдон «$1».',
 'filenotfound' => 'Нæй ссарæн файл «$1».',
 'fileexistserror' => 'Нæй фыссæн "$1" файлы: Файл ис.',
 'unexpected' => 'Æнæмбæлон æмиасад: «$1»=«$2».',
 'formerror' => 'Рæдыд: формæ арвитæн нæй',
 'badarticleerror' => 'Ацы архайд нæ арæзт кæны ацы фарсыл.',
-'cannotdelete' => 'Нæй аппарæн файл кæнæ фарс "$1".
-Æндæр исчи йæ аппæрста мыййаг.',
+'cannotdelete' => 'Нæ уайы файл кæнæ фарс "$1" схафын.
+Гæнæн ис, æндæр чидæр æй схафта.',
 'cannotdelete-title' => 'Нæ уайы схафын фарс "$1"',
 'delete-hook-aborted' => 'Хук æй хафын нæ бауагъта.
 Уæлæмхасæн æмбарынгæнæн нæ радта.',
@@ -471,7 +566,7 @@ $1',
 'actionthrottled' => 'Архайд урæд æрцыд',
 'actionthrottledtext' => 'Спамы ныхмæ тохы тыххæй дæуæн нæй гæнæн аразын ацы архайд æвæрд лимитæй фылдæр гыццыл рæстæджы. Ды уыцы лимит сæххæст кодтай.
 Дæ хорзæхæй, бафæлвар нæуæгæй цалдæр минуты фæстæ.',
-'protectedpagetext' => 'Ацы фарс у ивынæй æхгæд.',
+'protectedpagetext' => 'Ацы фарс ивынæй æмæ æндæр митæй æхгæд у.',
 'viewsourcetext' => 'Ацы фарсы код фенæн æмæ халдих кæнæн ис:',
 'viewyourtext' => "Дæ бон у фенын æмæ скопи кæнын ацы фарсмæ '''цы ивдтытæ сарæзтай''', уыдон бындур текст :",
 'protectedinterface' => 'Ацы фарсы ис ацы викийы софты интерфейсæн текст æмæ у æхгæд, цæмæй йæ фехалæн ма уа.
@@ -522,7 +617,7 @@ $2',
 'loginprompt' => 'Дæ cookies хъуамæ иу уой цæмæй дæ бон уа бахизын {{grammar:allative|{{SITENAME}}}}.',
 'userlogin' => 'Бахизын / регистраци кæнын',
 'userloginnocreate' => 'Бахизын',
-'logout' => 'Ð\9dомÑ\81Ñ\83Ñ\81æг Ñ\81Ñ\83ын',
+'logout' => 'РаÑ\85изын',
 'userlogout' => 'Рахизын',
 'notloggedin' => 'Системæйæн дæхи нæ бацамыдтай',
 'nologin' => "Регистрацигонд нæма дæ? '''$1'''.",
@@ -548,7 +643,7 @@ $2',
 'nocookiesfornew' => 'Архайæджы аккаунт нæ сарæзт ис, уымæн æмæ йын мах нæ базыдтам йæ равзæрæн.
 Бацархай, цæмæй cookies иу уой, анæуæг кæн ацы фарс æмæ ногæй бафæлвар.',
 'noname' => 'Раст фæсномыг нæ ныффыстай.',
-'loginsuccesstitle' => 'Бахизын рауадис',
+'loginsuccesstitle' => 'Бахызтæ',
 'loginsuccess' => "'''Ныр ды дæ хыст {{grammar:genitive|{{SITENAME}}}} куыд \"\$1\".'''",
 'nosuchuser' => 'Нæй ахæм архайæг "$1" номимæ.
 Архайджыты нæмттæ хатынц дамгъæты регистр.
@@ -629,7 +724,7 @@ $2',
 'resetpass-temp-password' => 'Рæстæгмæ пароль:',
 
 # Special:PasswordReset
-'passwordreset' => 'Ð\9fаÑ\80олÑ\8c Ñ\84æлварæн',
+'passwordreset' => 'Ð\9fаÑ\80олÑ\8c Ñ\80аппарæн',
 'passwordreset-text' => 'Байдзаг кæн ацы формæ, цæмæй райсай дæ аккаунты бахизæнтæ рымысæн e-mail.',
 'passwordreset-legend' => 'Пароль раппарын',
 'passwordreset-disabled' => 'Парол фæлварын ацы викийы хицæн у.',
@@ -666,6 +761,7 @@ $2
 'changeemail-oldemail' => 'Нырыккон e-mail адрис:',
 'changeemail-newemail' => 'Ног e-mail адрис:',
 'changeemail-none' => '(нæй)',
+'changeemail-password' => 'Дæ {{grammar:genitive|{{SITENAME}}}} пароль:',
 'changeemail-submit' => 'E-mail фæивын',
 'changeemail-cancel' => 'Ныууадзын',
 
@@ -763,6 +859,10 @@ $2
 кæнæ [{{fullurl:{{FULLPAGENAME}}|action=edit}} скæнын ацы фарс]</span>.',
 'noarticletext-nopermission' => 'Ацы фарсы нырмæ текст нæй.
 Дæ бон у [[Special:Search/{{PAGENAME}}|бацагурын ацы фарсы ном]] æндæр фæрсты, кæнæ <span class="plainlinks">[{{fullurl:{{#Special:Log}}|page={{FULLPAGENAMEE}}}} агурын йæ кой логты]</span>, фæлæ дын йæ саразыны бар нæй.',
+'missing-revision' => '"{{grammar:genitive|{{PAGENAME}}}}" фарсæн $1-æм фæлтæр нæй.
+
+Ай арæх æрцæуы, исчи хафт фарсы зæронд историйы æрвитæны фæдыл куы ацæуы.
+Фылдæр гæнæн ис базонын [{{fullurl:{{#Special:Log}}/delete|page={{FULLPAGENAMEE}}}} хафыны логы].',
 'userpage-userdoesnotexist-view' => 'Архайæджы аккаунт "$1" регистрацигонд нæу.',
 'updated' => '(Ноггонд)',
 'note' => "'''Фиппаинаг:'''",
@@ -816,8 +916,8 @@ $2
 'nextrevision' => 'Ногдæр фæлтæр →',
 'currentrevisionlink' => 'Нырыккон фæлтæр',
 'cur' => 'ныр.',
-'next' => 'фæдылдзог',
-'last' => 'раздæры',
+'next' => 'иннæ',
+'last' => 'раз.',
 'page_first' => 'фыццаг',
 'page_last' => 'фæстаг',
 'histlegend' => "Æвзарынæн: банысан кæн фæлтæрты радиобокстæ цæмæй цæ иртæсай æмæ стæй ныххæц enter кæнæ бынæй цы ныххæцæн ис, ууыл.<br />
@@ -840,6 +940,7 @@ $2
 'rev-delundel' => 'равдисын/айсын',
 'rev-showdeleted' => 'равдисын',
 'revisiondelete' => 'Фæлтæртæ схафын/рацаразын',
+'revdelete-show-file-submit' => 'О',
 'revdelete-radio-same' => '(ма баив)',
 'revdelete-radio-set' => 'О',
 'revdelete-radio-unset' => 'Нæ',
@@ -847,6 +948,11 @@ $2
 'revdel-restore-deleted' => 'хафт ивдтытæ',
 'revdel-restore-visible' => 'зынгæ ивдтытæ',
 'pagehist' => 'Фарсы истори',
+'revdelete-reason-dropdown' => '*Хафыны арæхдæр бындуртæ
+** Сфæлдисæгы барты æфхæрд
+** Кæйдæр тыххæй æнæмбæлгæ информаци кæнæ хъуыды
+** Æнæмбæлгæ фæсномыг
+** Гæнæн ис цъыфкалд у',
 'revdelete-reasonotherlist' => 'Æндæр аххос',
 'revdelete-offender' => 'Фæлтæры автор:',
 
@@ -974,8 +1080,26 @@ $2
 'prefs-help-email-others' => 'Дæ бон ма у равзарын цæмæй дæм иннæтæ бадзурой e-mail-æй, кæцымæ уыдзæн æрвитæн дæ фарс æмæ дæ ныхасы фарсыл.
 Дæ e-mail адрис афтæмæй нæ рабæрæг уыдзæнис.',
 'prefs-help-email-required' => 'Электронон посты адрис хъæуы.',
+'prefs-advancedediting' => 'Фылдæр фадæттæ',
+'prefs-advancedrc' => 'Фылдæр фадæттæ',
+'prefs-advancedrendering' => 'Фылдæр фадæттæ',
+'prefs-advancedsearchoptions' => 'Фылдæр фадæттæ',
+'prefs-advancedwatchlist' => 'Фылдæр фадæттæ',
+'prefs-displayrc' => 'Æвдисыны фадæттæ',
+'prefs-displaysearchoptions' => 'Æвдисыны фадæттæ',
+'prefs-displaywatchlist' => 'Æвдисыны фадæттæ',
+'prefs-diffs' => 'Иртасæнтæ',
+
+# User preference: e-mail validation using jQuery
+'email-address-validity-valid' => 'E-mail раст зыны',
+'email-address-validity-invalid' => 'Раст e-mail бацамон',
 
 # User rights
+'userrights' => 'Архайæджы барты армдарæн',
+'userrights-lookup-user' => 'Архайæджы къордтæ ивын',
+'userrights-user-editname' => 'Фæсномыг бацамон:',
+'editusergroup' => 'Архайæджы къордтæ фæивын',
+'userrights-reason' => 'Бындур:',
 'userrights-nodatabase' => 'Рарддон $1 нæй кæнæ бынæттон нæу.',
 
 # Groups
@@ -1009,10 +1133,10 @@ $2
 'right-upload' => 'Файлтæ æвгæнын',
 'right-upload_by_url' => 'Бавгæнын файлтæ интернетæй',
 'right-delete' => 'Фæрстæ хафын',
-'right-bigdelete' => 'фæрстæ æмæ сæ ивды истори аппарын',
+'right-bigdelete' => 'Стыр историимæ фæрстæ хафын',
 
-# User rights log
-'rightsnone' => '(нæй)',
+# Special:Log/newusers
+'newuserlogpage' => 'Архайджыты фæзындты лог',
 
 # Associated actions - in the sentence "You do not have permission to X"
 'action-read' => 'ацы фарс кæсын',
@@ -1024,7 +1148,7 @@ $2
 'action-move' => 'ацы фарсы ном ивын',
 'action-movefile' => 'ацы файлы ном ивын',
 'action-upload' => 'ацы файл æвгæнын',
-'action-delete' => 'ацы фарс аппарын',
+'action-delete' => 'ацы фарс схафын',
 
 # Recent changes
 'nchanges' => '$1 {{PLURAL:$1|ивд|ивды}}',
@@ -1058,6 +1182,7 @@ $3',
 'newsectionsummary' => '/* $1 */ ног хай',
 'rc-enhanced-expand' => 'Лæмбынæг информаци равдисын (домы JavaScript)',
 'rc-enhanced-hide' => 'Айсын лæмбынæг информаци',
+'rc-old-title' => 'фыццаг арæзт æрцыд куыд "$1"',
 
 # Recent changes linked
 'recentchangeslinked' => 'Баст ивдтытæ',
@@ -1236,9 +1361,6 @@ $3',
 # Special:ListUsers
 'listusers-submit' => 'Равдисын',
 
-# Special:Log/newusers
-'newuserlogpage' => 'Архайджыты фæзындты лог',
-
 # Special:ListGroupRights
 'listgrouprights-group' => 'Къорд',
 'listgrouprights-rights' => 'Бартæ',
@@ -1272,6 +1394,7 @@ $3',
 'unwatching' => 'Цæстдард фæрсты номхыгъдæй аиуварс кæнын...',
 
 'enotif_anon_editor' => 'сусæг архайæг $1',
+'changed' => 'ивд æрцыд',
 
 # Delete
 'deletepage' => 'Схаф фарс',
@@ -1279,8 +1402,8 @@ $3',
 'delete-confirm' => 'Схаф "$1"',
 'actioncomplete' => 'Æххæст',
 'actionfailed' => 'Нæ рауадис',
-'dellogpage' => 'Ð\90ппаÑ\80Ñ\8bны лог',
-'deletionlog' => 'аппарыны лог',
+'dellogpage' => 'ХаÑ\84Ñ\8bнÑ\82ы лог',
+'deletionlog' => 'хафынты лог',
 'deletecomment' => 'Аххос:',
 'deleteotherreason' => 'Æндæр кæнæ уæлæмхасæн аххос:',
 'deletereasonotherlist' => 'Æндæр аххос',
@@ -1307,6 +1430,7 @@ $3',
 # Undelete
 'undeletelink' => 'кæсын/рацаразын',
 'undeleteviewlink' => 'кæсын',
+'undelete-search-submit' => 'Агурын',
 
 # Namespace form on various pages
 'namespace' => 'Номдон:',
@@ -1323,7 +1447,7 @@ $3',
 'year' => 'Ацы азы (æмæ раздæр):',
 
 'sp-contributions-newbies' => 'Æвдисын æрмæст нæуæг архайджыты бавæрд',
-'sp-contributions-blocklog' => 'Хъодыты лог',
+'sp-contributions-blocklog' => 'хъодыты лог',
 'sp-contributions-uploads' => 'бавгæндтытæ',
 'sp-contributions-logs' => 'логтæ',
 'sp-contributions-talk' => 'ныхас',
@@ -1336,7 +1460,7 @@ $3',
 'whatlinkshere' => 'Чи æрвиты ардæм',
 'whatlinkshere-title' => 'Фæрстæ, кæдон æрвитынц ардæм: «$1»',
 'whatlinkshere-page' => 'Фарс:',
-'linkshere' => "Ацы фæрстæ æрвитынц '''{{grammar:allative|[[:$1]]}}''':",
+'linkshere' => "Ацы фæрстæ æрвитынц '''[[:$1|{{grammar:allative|$1}}]]''':",
 'nolinkshere' => "Никæцы фарс æрвиты ардæм: '''[[:$1]]'''.",
 'isredirect' => 'æрвитæн фарс',
 'istemplate' => 'æфтыдæй',
@@ -1351,11 +1475,16 @@ $3',
 'whatlinkshere-filters' => 'Фильтртæ',
 
 # Block/unblock
-'blockip' => 'Бахъоды кæн',
-'blockip-legend' => 'Бахъоды æй кæн',
+'block' => 'Архайæгыл хъоды кæнын',
+'blockip' => 'Бахъоды кæнын',
+'blockip-title' => 'Архайæгыл хъоды',
+'blockip-legend' => 'Архайæгыл хъоды кæнын',
+'ipadressorusername' => 'IP адрис кæнæ фæсномыг:',
+'ipbexpiry' => 'Фæуыны афон:',
 'ipbreason' => 'Аххос:',
-'ipbreasonotherlist' => 'Æндæр аххос',
+'ipbreasonotherlist' => 'Æндæр тыххæй',
 'ipboptions' => '2 сахаты:2 hours,1 бон:1 day,3 боны:3 days,1 къуыри:1 week,2 къуырийы:2 weeks,1 мæй:1 month,3 мæййы:3 months,6 мæййы:6 months,1 аз:1 year,нæбæрæг:infinite',
+'ipbotheroption' => 'æндæр',
 'ipbotherreason' => 'Æндæр кæнæ уæлæмхасæн аххос:',
 'blockipsuccesstext' => '[[Special:Contributions/$1|$1]] хъодыгонд æрцыд.<br />
 Кæс [[Special:Ipblocklist|хъодыгонд IP-адристы номхыгъд]].',
@@ -1363,6 +1492,7 @@ $3',
 'ipb-blocklist-contribs' => '{{grammar:genitive|$1}} бавæрд',
 'ipblocklist' => 'Хъодыгонд архайджытæ',
 'ipblocklist-legend' => 'Хъодыгонд архайæджы ацагур',
+'ipblocklist-submit' => 'Агурын',
 'ipblocklist-empty' => 'Хъодыгæндты номхыгъд афтид у.',
 'blocklink' => 'бахъоды кæн',
 'unblocklink' => 'хъоды айс',
@@ -1392,7 +1522,7 @@ $3',
 'export' => 'Фæрсты экспорт',
 
 # Namespace 8 related
-'allmessages' => 'СиÑ\81Ñ\82емæйÑ\8b Ñ\83аÑ\86тæ',
+'allmessages' => 'СиÑ\81Ñ\82емæйÑ\8b Ñ\84Ñ\8bÑ\81Ñ\82Ñ\8bтæ',
 'allmessagesname' => 'Ном',
 'allmessagesdefault' => 'Разæвæрд текст',
 'allmessages-filter-all' => 'Иууылдæр',
@@ -1422,7 +1552,7 @@ $3',
 Дæ бон у фенын ын йæ бындуртекст',
 'tooltip-ca-history' => 'Ацы фарсæн йæ раздæры фæлтæртæ',
 'tooltip-ca-protect' => 'Ацы фарс ивддзинæдтæй сæхгæнын',
-'tooltip-ca-delete' => 'Аппарын ацы фарс',
+'tooltip-ca-delete' => 'Ацы фарс схафын',
 'tooltip-ca-move' => 'Уацы ном ивын',
 'tooltip-ca-watch' => 'Бафтау ацы фарс дæ цæстдард рæгъмæ',
 'tooltip-ca-unwatch' => 'Айс ацы фарс дæ цæстдард рæгъæй',
@@ -1459,11 +1589,23 @@ $3',
 'tooltip-diff' => 'Æвдисы цы ивд бахастай текстмæ',
 'tooltip-compareselectedversions' => 'Кæс дыууæ æвзæрст фæлтæры цæмæй хицæн кæнынц',
 'tooltip-watch' => 'Ацы фарсмæ цæст æрдарынæн',
+'tooltip-watchlistedit-normal-submit' => 'Нæмттæ схафын',
+'tooltip-watchlistedit-raw-submit' => 'Цæстдард фæнæуæг кæнын',
+'tooltip-recreate' => 'Фарс рацаразын, кæд хафт уыд, уæддæр',
+'tooltip-upload' => 'Æвгæнын байдайын',
 'tooltip-rollback' => '"Раздæхын" æздæхы ацы фарсы фæстаг архайæджы ивд(тытæ) иу хæстмæ',
 'tooltip-undo' => '"Раивын" æздæхы ацы ивд æмæ æвдисы ивæн фарс разбакаст уавæры. Уый дын дæ бавæрдæн фсон скæныны фадат дæтты.',
+'tooltip-preferences-save' => 'Уаг бавæрын',
 'tooltip-summary' => 'Бафысс чысыл æмбарынгæнæн',
 
+# Metadata
+'notacceptable' => 'Ацы викийæн йæ бон нæу радтын рардтæ ахæм форматы, цæмæй цæ дæ клиент фæрса.',
+
 # Attribution
+'anonymous' => '{{grammar:genitive|{{SITENAME}}}} æнæном {{PLURAL:$1|архайæг|архайджытæ}}',
+'siteuser' => '{{grammar:genitive|{{SITENAME}}}} архайæг $1',
+'anonuser' => '{{grammar:genitive|{{SITENAME}}}} æнæном архайæг $1',
+'lastmodifiedatby' => 'Ацы фарс фæстаг хатт фæивта $3, $1, $2 сахатыл.',
 'others' => 'æндæртæ',
 
 # Spam protection
@@ -1646,11 +1788,20 @@ $3',
 # HTML forms
 'htmlform-selectorother-other' => 'Æндæр',
 
+# New logging system
+'logentry-delete-delete' => '$1 схафта фарс $3',
+'logentry-delete-restore' => '$1 рацарæзта фарс $3',
+'rightsnone' => '(нæй)',
+
 # Feedback
 'feedback-subject' => 'Сæр:',
 'feedback-message' => 'Фыстæг:',
+'feedback-cancel' => 'Ныууадзын',
 'feedback-close' => 'Æххæст',
 
+# Search suggestions
+'searchsuggest-search' => 'Агурын',
+
 # API errors
 'api-error-missingparam' => 'Мидæггаг рæдыд: Курдиаты параметртæ нæй.',
 'api-error-missingresult' => 'Мидæггаг рæдыд: Нæ рауадис сбæрæг кæнын къопи кæнын куыд бантыстис.',
index 28ed2bc..774c331 100644 (file)
@@ -61,32 +61,62 @@ $namespaceAliases = array(
 
 $specialPageAliases = array(
        'Activeusers'               => array( 'ਸਰਗਰਮ_ਮੈਂਬਰ' ),
+       'Allmessages'               => array( 'ਸਾਰੇ_ਸਨੇਹੇ' ),
+       'Allpages'                  => array( 'ਸਾਰੇ_ਪੰਨੇ' ),
+       'Ancientpages'              => array( 'ਪੁਰਾਣੇ_ਪੰਨੇ' ),
        'Badtitle'                  => array( 'ਖਰਾਬ_ਸਿਰਲੇਖ' ),
        'Blankpage'                 => array( 'ਖਾਲੀ_ਪੰਨਾ' ),
        'Block'                     => array( 'ਪਾਬੰਦੀ_ਲਾਓ', 'IP_’ਤੇ_ਪਾਬੰਦੀ_ਲਾਓ', 'ਮੈਂਬਰ_’ਤੇ_ਪਾਬੰਦੀ_ਲਾਓ' ),
+       'Blockme'                   => array( 'ਮੇਰੇ_’ਤੇ_ਪਾਬੰਦੀ_ਲਾਓ' ),
+       'Booksources'               => array( 'ਕਿਤਾਬ_ਸਰੋਤ' ),
+       'BrokenRedirects'           => array( 'ਟੁੱਟੇ_ਰੀਡਿਰੈਕਟ' ),
        'Categories'                => array( 'ਸ਼੍ਰੇਣੀਆਂ' ),
        'ChangeEmail'               => array( 'ਈ-ਮੇਲ_ਬਦਲੋ' ),
        'ChangePassword'            => array( 'ਪਾਸਵਰਡ_ਬਦਲੋ', 'ਪਾਸਵਰਡ_ਰੀਸੈੱਟ_ਕਰੋ' ),
+       'ComparePages'              => array( 'ਪੰਨਿਆਂ_ਦੀ_ਤੁਲਨਾ_ਕਰੋ' ),
+       'Confirmemail'              => array( 'ਈ-ਮੇਲ_ਤਸਦੀਕ_ਕਰੋ' ),
        'Contributions'             => array( 'ਯੋਗਦਾਨ' ),
        'CreateAccount'             => array( 'ਖਾਤਾ_ਬਣਾਓ' ),
+       'Deadendpages'              => array( 'ਬੰਦ_ਪੰਨੇ' ),
        'DeletedContributions'      => array( 'ਮਿਟਾਏ_ਯੋਗਦਾਨ' ),
+       'Disambiguations'           => array( 'ਗੁੰਝਲਖੋਲ੍ਹ' ),
        'DoubleRedirects'           => array( 'ਦੂਹਰੇ_ਰੀਡਿਰੈਕਟ' ),
        'EditWatchlist'             => array( 'ਨਿਗਰਾਨੀ-ਲਿਸਟ_ਸੋਧੋ' ),
-       'Emailuser'                 => array( 'ਵਰਤੋਂਕਾਰ_ਨੂੰ_ਈ-ਮੇਲ' ),
+       'Emailuser'                 => array( 'ਮੈਂਬਰ_ਨੂੰ_ਈ-ਮੇਲ_ਕਰੋ' ),
+       'Export'                    => array( 'ਨਿਰਯਾਤ' ),
+       'Fewestrevisions'           => array( 'ਸਭ_ਤੋਂ_ਘੱਟ_ਰੀਵਿਜ਼ਨਾਂ' ),
+       'FileDuplicateSearch'       => array( 'ਨਕਲੀ_ਫ਼ਾਈਲ_ਖੋਜੋ' ),
+       'Filepath'                  => array( 'ਫ਼ਾਈਲ_ਪਥ' ),
+       'Import'                    => array( 'ਆਯਾਤ' ),
+       'Invalidateemail'           => array( 'ਗਲਤ_ਈ-ਮੇਲ_ਪਤਾ' ),
        'JavaScriptTest'            => array( 'ਜਾਵਾਸਕ੍ਰਿਪਟ_ਪਰਖ' ),
-       'Listadmins'                => array( 'ਐਡਮਿਨਾਂ_ਦੀ_ਸੂਚੀ' ),
-       'Listbots'                  => array( 'ਬੋਟਾਂ_ਦੀ_ਲਿਸਟ' ),
-       'Listfiles'                 => array( 'ਫ਼ਾਈਲਾਂ_ਦੀ_ਲਿਸਟ', 'ਤਸਵੀਰਾਂ_ਦੀ_ਲਿਸਟ' ),
-       'Listredirects'             => array( 'ਰੀਡਿਰੈਕਟਾਂ_ਦੀ_ਲਿਸਟ' ),
-       'Listusers'                 => array( 'ਵਰਤੋਂਕਾਰਾਂ_ਦੀ_ਲਿਸਟ' ),
-       'Longpages'                 => array( 'ਲੰਬੇ_ਸਫ਼ੇ' ),
-       'MergeHistory'              => array( 'ਰਲ਼ਾਉਣ_ਦਾ_ਅਤੀਤ' ),
-       'MIMEsearch'                => array( 'MIME_ਖੋਜ' ),
+       'BlockList'                 => array( 'ਪਾਬੰਦੀਆਂ_ਦੀ_ਸੂਚੀ' ),
+       'LinkSearch'                => array( 'ਲਿੰਕ_ਖੋਜੋ' ),
+       'Listadmins'                => array( 'ਪ੍ਰਬੰਧਕਾਂ_ਦੀ_ਸੂਚੀ' ),
+       'Listbots'                  => array( 'ਬੋਟਾਂ_ਦੀ_ਸੂਚੀ' ),
+       'Listfiles'                 => array( 'ਫ਼ਾਈਲਾਂ_ਦੀ_ਸੂਚੀ' ),
+       'Listgrouprights'           => array( 'ਵਰਤੋਂਕਾਰ_ਹੱਕ_ਸੂਚੀ' ),
+       'Listredirects'             => array( 'ਰੀਡਿਰੈਕਟਾਂ_ਦੀ_ਸੂਚੀ' ),
+       'Listusers'                 => array( 'ਵਰਤੋਂਕਾਰਾਂ_ਦੀ_ਸੂਚੀ' ),
+       'Lockdb'                    => array( 'ਡੈਟਾਬੇਸ_’ਤੇ_ਤਾਲਾ_ਲਗਾਓ' ),
+       'Log'                       => array( 'ਚਿੱਠਾ', 'ਚਿੱਠੇ' ),
+       'Lonelypages'               => array( 'ਇਕੱਲੇ_ਪੰਨੇ' ),
+       'Longpages'                 => array( 'ਲੰਬੇ_ਪੰਨੇ' ),
+       'MergeHistory'              => array( 'ਰਲਾਉਣ_ਦਾ_ਅਤੀਤ' ),
+       'MIMEsearch'                => array( 'MIME_ਖੋਜੋ' ),
+       'Mostcategories'            => array( 'ਸਭ_ਤੋਂ_ਵੱਧ_ਸ਼੍ਰੇਣੀਆਂ' ),
+       'Mostimages'                => array( 'ਸਭ_ਤੋਂ_ਵੱਧ_ਜੁੜੀਆਂ_ਫ਼ਾਈਲਾਂ' ),
+       'Mostinterwikis'            => array( 'ਸਭ_ਤੋਂ_ਵੱਧ_ਇੰਟਰਵਿਕੀ' ),
+       'Mostlinked'                => array( 'ਸਭ_ਤੋਂ_ਵੱਧ_ਜੁੜੇ_ਪੰਨੇ' ),
+       'Mostlinkedcategories'      => array( 'ਸਭ_ਤੋਂ_ਵੱਧ_ਜੁੜੀਆਂ_ਸ਼੍ਰੇਣੀਆਂ' ),
+       'Mostlinkedtemplates'       => array( 'ਸਭ_ਤੋਂ_ਵੱਧ_ਜੁੜੇ_ਫਰਮੇ' ),
+       'Mostrevisions'             => array( 'ਸਭ_ਤੋਂ_ਵੱਧ_ਰੀਵਿਜ਼ਨ' ),
        'Movepage'                  => array( 'ਸਿਰਲੇਖ_ਬਦਲੋ' ),
        'Mycontributions'           => array( 'ਮੇਰੇ_ਯੋਗਦਾਨ' ),
+       'Mypage'                    => array( 'ਮੇਰਾ_ਪੰਨਾ' ),
        'Mytalk'                    => array( 'ਮੇਰੀ_ਚਰਚਾ' ),
        'Myuploads'                 => array( 'ਮੇਰੇ_ਅੱਪਲੋਡ' ),
-       'Newimages'                 => array( 'ਨਵੀਆਂ_ਫ਼ਾਈਲਾਂ', 'ਨਵੀਆਂ_ਤਸਵੀਰਾਂ' ),
+       'Newimages'                 => array( 'ਨਵੀਆਂ_ਫ਼ਾਈਲਾਂ' ),
        'Newpages'                  => array( 'ਨਵੇਂ_ਪੰਨੇ' ),
        'PasswordReset'             => array( 'ਪਾਸਵਰਡ_ਰੀਸੈੱਟ' ),
        'PermanentLink'             => array( 'ਪੱਕਾ_ਲਿੰਕ' ),
@@ -95,25 +125,51 @@ $specialPageAliases = array(
        'Prefixindex'               => array( 'ਅਗੇਤਰ_ਤਤਕਰਾ' ),
        'Protectedpages'            => array( 'ਸੁਰੱਖਿਅਤ_ਪੰਨੇ' ),
        'Protectedtitles'           => array( 'ਸੁਰੱਖਿਅਤ_ਸਿਰਲੇਖ' ),
-       'Randompage'                => array( 'ਰਲ਼ਵਾਂ', 'ਰਲਵਾਂ_ਪੰਨਾ' ),
-       'Randomredirect'            => array( 'ਰਲਵਾਂ_ਰੀਡਿਰੈਕਟ' ),
-       'Recentchanges'             => array( 'ਤਾਜਾ_ਤਬਦੀਲੀਆਂ' ),
-       'Search'                    => array( 'ਖੋਜ' ),
+       'Randompage'                => array( 'ਰਲਵਾਂ_ਪੰਨਾ' ),
+       'Randomredirect'            => array( 'ਸੁਰੱਖਿਅਤ_ਰੀਡਿਰੈਕਟ' ),
+       'Recentchanges'             => array( 'ਹਾਲ_\'ਚ_ਹੋਈਆਂ_ਤਬਦੀਲੀਆਂ' ),
+       'Recentchangeslinked'       => array( 'ਜੁੜੀਆਂ_ਤਾਜ਼ਾ_ਤਬਦੀਲੀਆਂ' ),
+       'Revisiondelete'            => array( 'ਰੀਵਿਜਨ_ਮਿਟਾਓ' ),
+       'Search'                    => array( 'ਖੋਜੋ' ),
        'Shortpages'                => array( 'ਛੋਟੇ_ਪੰਨੇ' ),
        'Specialpages'              => array( 'ਖਾਸ_ਪੰਨੇ' ),
-       'Statistics'                => array( 'à¨\86à¨\82ਕੜੇ' ),
+       'Statistics'                => array( 'à¨\85à©°ਕੜੇ' ),
        'Tags'                      => array( 'ਟੈਗ' ),
-       'Undelete'                  => array( 'ਅਣ-ਮਿਟਾਉਣ' ),
+       'Unblock'                   => array( 'ਪਾਬੰਦੀ_ਹਟਾਓ' ),
+       'Uncategorizedcategories'   => array( 'ਸ਼੍ਰੇਣੀਹੀਣ_ਸ਼੍ਰੇਣੀਆਂ' ),
+       'Uncategorizedimages'       => array( 'ਸ਼੍ਰੇਣੀਹੀਣ_ਫ਼ਾਈਲਾਂ' ),
+       'Uncategorizedpages'        => array( 'ਸ਼੍ਰੇਣੀਹੀਣ_ਪੰਨੇ' ),
+       'Uncategorizedtemplates'    => array( 'ਸ਼੍ਰੇਣੀਹੀਣ_ਸਾਂਚੇ' ),
+       'Undelete'                  => array( 'ਅਣ-ਹਟਾਓਣ' ),
+       'Unlockdb'                  => array( 'ਡੈਟਾਬੇਸ_ਖੋਲ੍ਹੋ' ),
+       'Unusedcategories'          => array( 'ਅਣਵਰਤੀਆਂ_ਸ਼੍ਰੇਣੀਆਂ' ),
+       'Unusedimages'              => array( 'ਅਣਵਰਤੀਆਂ_ਫ਼ਾਈਲਾਂ' ),
+       'Unusedtemplates'           => array( 'ਅਣਵਰਤੇ_ਫਰਮੇ' ),
+       'Unwatchedpages'            => array( 'ਬੇ-ਨਿਗਰਾਨ_ਪੰਨੇ' ),
        'Upload'                    => array( 'ਅੱਪਲੋਡ' ),
        'Userlogin'                 => array( 'ਮੈਂਬਰ_ਲਾਗਇਨ' ),
        'Userlogout'                => array( 'ਮੈਂਬਰ_ਲਾਗਆਊਟ' ),
+       'Userrights'                => array( 'ਮੈਂਬਰ_ਹੱਕ', 'ਪ੍ਰਬੰਧਕ_ਬਣਾਓ', 'ਬੋਟ_ਬਣਾਓ' ),
+       'Version'                   => array( 'ਰੂਪ' ),
        'Wantedcategories'          => array( 'ਚਾਹੀਦੀਆਂ_ਸ਼੍ਰੇਣੀਆਂ' ),
        'Wantedfiles'               => array( 'ਚਾਹੀਦੀਆਂ_ਫ਼ਾਈਲਾਂ' ),
+       'Wantedpages'               => array( 'ਚਾਹੀਦੇ_ਪੰਨੇ', 'ਟੁੱਟੇ_ਜੋੜ' ),
        'Wantedtemplates'           => array( 'ਚਾਹੀਦੇ_ਫਰਮੇ' ),
        'Watchlist'                 => array( 'ਨਿਗਰਾਨੀ-ਲਿਸਟ' ),
+       'Whatlinkshere'             => array( 'ਕਿਹੜੇ_ਪੰਨੇ_ਇੱਥੇ_ਜੋੜਦੇ_ਹਨ' ),
        'Withoutinterwiki'          => array( 'ਬਿਨਾਂ_ਇੰਟਰਵਿਕੀਆਂ_ਵਾਲੇ' ),
 );
 
+$magicWords = array(
+       'redirect'                  => array( '0', '#ਰੀਡਿਰੈਕਟ', '#REDIRECT' ),
+       'url_wiki'                  => array( '0', 'ਵਿਕੀ', 'WIKI' ),
+       'defaultsort_noerror'       => array( '0', 'ਗਲਤੀ_ਨਹੀਂ', 'noerror' ),
+       'pagesincategory_all'       => array( '0', 'ਸਬ', 'all' ),
+       'pagesincategory_pages'     => array( '0', 'ਪੰਨੇ', 'pages' ),
+       'pagesincategory_subcats'   => array( '0', 'ਉਪਸ਼੍ਰੇਣੀਆਂ', 'subcats' ),
+       'pagesincategory_files'     => array( '0', 'ਫ਼ਾਈਲਾਂ', 'files' ),
+);
+
 $digitTransformTable = array(
        '0' => '੦', # &#x0a66;
        '1' => '੧', # &#x0a67;
@@ -255,11 +311,11 @@ Manual:External_editors ਹੋਰ ਜਾਣਕਾਰੀ।])',
 'category-empty' => "''ਇਸ ਸ਼੍ਰੇਣੀ ਵਿੱਚ ਇਸ ਵੇਲੇ ਕੋਈ ਵੀ ਪੰਨਾ ਜਾਂ ਮੀਡੀਆ ਨਹੀਂ ਹੈ।''",
 'hidden-categories' => '{{PLURAL:$1|ਲੁਕਵੀਂ ਸ਼੍ਰੇਣੀ|ਲੁਕਵੀਂਆਂ ਸ਼੍ਰੇਣੀਆਂ}}',
 'hidden-category-category' => 'ਲੁਕੀਆਂ ਕੈਟੇਗਰੀਆਂ',
-'category-subcat-count' => 'à¨\87ਸ à¨¸à¨¼à©\8dਰà©\87ਣà©\80 à¨µà¨¿à©±à¨\9a, à¨\95à©\81ੱਲ $2 à¨µà¨¿à©±à¨\9aà©\8bà¨\82, {{PLURAL:$2|ਸਿਰਫ਼ ਇਹ ਉਪਸ਼੍ਰੇਣੀ ਹੈ|ਇਹ {{PLURAL:$1|ਉਪਸ਼੍ਰੇਣੀ ਹੈ|$1 ਉਪਸ਼੍ਰੇਣੀਆਂ ਹਨ}}}}।',
+'category-subcat-count' => 'à¨\87ਸ à¨¸à¨¼à©\8dਰà©\87ਣà©\80 à¨µà¨¿à©±à¨\9a, à¨\95à©\81ੱਲ $2 à¨µà¨¿à©±à¨\9aà©\8bà¨\82, {{PLURAL:$2|à¨\95à©\87ਵਲ ਇਹ ਉਪਸ਼੍ਰੇਣੀ ਹੈ|ਇਹ {{PLURAL:$1|ਉਪਸ਼੍ਰੇਣੀ ਹੈ|$1 ਉਪਸ਼੍ਰੇਣੀਆਂ ਹਨ}}}}।',
 'category-subcat-count-limited' => 'ਇਸ ਕੈਟੇਗਰੀ ਵਿਚ {{PLURAL:$1|ਸਬ-ਕੈਟੇਗਰੀ ਹੈ|$1 ਸਬ-ਕੈਟੇਗਰੀਆਂ ਹਨ}}।',
-'category-article-count' => '{{PLURAL:$2|à¨\87ਸ à¨¸à¨¼à©\8dਰà©\87ਣà©\80 à¨µà¨¿à©±à¨\9a à¨¸à¨¿à¨°à¨«à¨¼ ਇਹ ਪੰਨਾ ਹੈ।| ਇਸ ਸ਼੍ਰੇਣੀ ਵਿੱਚ, ਕੁੱਲ $2 ਵਿੱਚੋਂ, ਇਹ {{PLURAL:$1|ਪੰਨਾ ਹੈ|$1 ਪੰਨੇ ਹਨ}}}}।',
+'category-article-count' => '{{PLURAL:$2|à¨\87ਸ à¨¸à¨¼à©\8dਰà©\87ਣà©\80 à¨µà¨¿à©±à¨\9a à¨\95à©\87ਵਲ ਇਹ ਪੰਨਾ ਹੈ।| ਇਸ ਸ਼੍ਰੇਣੀ ਵਿੱਚ, ਕੁੱਲ $2 ਵਿੱਚੋਂ, ਇਹ {{PLURAL:$1|ਪੰਨਾ ਹੈ|$1 ਪੰਨੇ ਹਨ}}}}।',
 'category-article-count-limited' => 'ਮੌਜੂਦਾ ਕੈਟੇਗਰੀ ਵਿਚ ਇਹ {{PLURAL:$1|ਸਫ਼ਾ ਹੈ|$1 ਸਫ਼ੇ ਹਨ}}।',
-'category-file-count' => '{{PLURAL:$2|à¨\87ਸ à¨¸à¨¼à©\8dਰà©\87ਣà©\80 à¨µà¨¿à©±à¨\9a à¨¸à¨¿à¨°à¨«à¨¼ ਇਹ ਫ਼ਾਈਲ ਹੈ|ਇਸ ਸ਼੍ਰੇਣੀ ਵਿੱਚ {{PLURAL:$1|ਫ਼ਾਈਲ ਹੈ|$1 ਫ਼ਾਈਲਾਂ ਹਨ}}}}।',
+'category-file-count' => '{{PLURAL:$2|à¨\87ਸ à¨¸à¨¼à©\8dਰà©\87ਣà©\80 à¨µà¨¿à©±à¨\9a à¨\95à©\87ਵਲ ਇਹ ਫ਼ਾਈਲ ਹੈ|ਇਸ ਸ਼੍ਰੇਣੀ ਵਿੱਚ {{PLURAL:$1|ਫ਼ਾਈਲ ਹੈ|$1 ਫ਼ਾਈਲਾਂ ਹਨ}}}}।',
 'category-file-count-limited' => 'ਮੌਜੂਦਾ ਕੈਟੇਗਰੀ ਵਿਚ ਇਹ {{PLURAL:$1|ਫ਼ਾਈਲ ਹੈ|$1 ਫ਼ਾਈਲਾਂ ਹਨ}}।',
 'listingcontinuesabbrev' => 'ਜਾਰੀ',
 'index-category' => 'ਤਤਕਰੇ ਵਾਲ਼ੇ ਸਫ਼ੇ',
@@ -294,7 +350,7 @@ Manual:External_editors ਹੋਰ ਜਾਣਕਾਰੀ।])',
 'vector-action-protect' => 'ਸੁਰੱਖਿਅਤ ਕਰੋ',
 'vector-action-undelete' => 'ਅਣ-ਮਿਟਾਉਣਾ',
 'vector-action-unprotect' => 'ਸੁਰੱਖਿਆ ਬਦਲੋ',
-'vector-simplesearch-preference' => 'ਵਾਧà©\82 à¨\96à©\8bà¨\9c à¨¸à¨²à¨¾à¨¹à¨¾à¨\82 ਯੋਗ ਕਰੋ (ਸਿਰਫ਼ ਵਿਕਟਰ ਸਕਿੰਨ ਵਿਚ)',
+'vector-simplesearch-preference' => 'ਸਧਾਰਨ à¨\96à©\8bà¨\9c à¨¸à¨²à¨¾à¨¹ à¨ªà©±à¨\9fà©\80 ਯੋਗ ਕਰੋ (ਸਿਰਫ਼ ਵਿਕਟਰ ਸਕਿੰਨ ਵਿਚ)',
 'vector-view-create' => 'ਬਣਾਓ',
 'vector-view-edit' => 'ਸੰਪਾਦਨ',
 'vector-view-history' => 'ਇਤਿਹਾਸ ਵੇਖੋ',
@@ -304,6 +360,7 @@ Manual:External_editors ਹੋਰ ਜਾਣਕਾਰੀ।])',
 'namespaces' => 'ਨਾਮ-ਥਾਂਵਾਂ',
 'variants' => 'ਬਦਲ',
 
+'navigation-heading' => 'ਦਿਕਚਾਲਨ ਸੂਚੀ',
 'errorpagetitle' => 'ਗਲਤੀ',
 'returnto' => '$1 ’ਤੇ ਵਾਪਸ ਜਾਓ।',
 'tagline' => '{{SITENAME}} ਤੋਂ',
@@ -328,7 +385,7 @@ Manual:External_editors ਹੋਰ ਜਾਣਕਾਰੀ।])',
 'undelete_short' => '{{PLURAL:$1|ਇੱਕ ਸੋਧ|$1 ਸੋਧਾਂ}} ਅਣ-ਮਿਟਾਓ',
 'viewdeleted_short' => '{{PLURAL:$1|ਇਕ ਮਿਟਾਈ ਸੋਧ|$1 ਮਿਟਾਈਆਂ ਸੋਧਾਂ}} ਵੇਖੋ',
 'protect' => 'ਸੁਰੱਖਿਆ',
-'protect_change' => 'ਤਬਦà©\80ਲੀ',
+'protect_change' => 'ਬਦਲੀ',
 'protectthispage' => 'ਇਹ ਸਫ਼ਾ ਸੁਰੱਖਿਅਤ ਕਰੋ',
 'unprotect' => 'ਸੁਰੱਖਿਆ ਬਦਲੋ',
 'unprotectthispage' => 'ਇਹ ਸਫ਼ੇ ਦੀ ਸੁਰੱਖਿਆ ਬਦਲੋ',
@@ -353,7 +410,7 @@ Manual:External_editors ਹੋਰ ਜਾਣਕਾਰੀ।])',
 'otherlanguages' => 'ਹੋਰ ਭਾਸ਼ਾਵਾਂ',
 'redirectedfrom' => '($1 ਤੋਂ ਰੀਡਿਰੈਕਟ)',
 'redirectpagesub' => 'ਰੀਡਿਰੈਕਟ ਸਫ਼ਾ',
-'lastmodifiedat' => 'à¨\87ਹ à¨ªà©°à¨¨à¨¾ à¨\86à¨\96ਰà©\80 à¨µà¨¾à¨° $1 à¨¨à©\82à©° $2 â\80\99ਤà©\87 à¨¬à¨¦à¨² à¨\97ਿਆ ਸੀ।',
+'lastmodifiedat' => 'à¨\87ਸ à¨ªà©°à¨¨à¨¾ à¨¦à¨¾ à¨ªà¨¿à©±à¨\9bਲਾ à¨¬à¨¦à¨²à¨¾à¨µ  $1 à¨¨à©\82à©°  $2 à¨µà¨\9cà©\87 à¨¹à©\8bà¨\87ਆ ਸੀ।',
 'viewcount' => 'ਇਹ ਸਫ਼ਾ {{PLURAL:$1|ਇੱਕ ਵਾਰ|$1 ਵਾਰ}} ਵੇਖਿਆ ਗਿਆ।',
 'protectedpage' => 'ਸੁਰੱਖਿਅਤ ਪੇਜ',
 'jumpto' => 'ਇਸ ’ਤੇ ਜਾਓ:',
@@ -399,7 +456,7 @@ $1',
 'retrievedfrom' => '"$1" ਤੋਂ ਲਿਆ',
 'youhavenewmessages' => 'ਤੁਹਾਡੇ ਲਈ $1। ($2)',
 'newmessageslink' => 'ਨਵੇਂ ਸੁਨੇਹੇ',
-'newmessagesdifflink' => 'à¨\86à¨\96ਰà©\80 à¨¤à¨¬à¨¦à©\80ਲà©\80',
+'newmessagesdifflink' => 'ਪਿੱà¨\9bਲਾ à¨¬à¨¦à¨²à¨¾à¨µ',
 'youhavenewmessagesfromusers' => '{{PLURAL:$3|ਇੱਕ ਵਰਤੋਂਕਾਰ|$3 ਵਰਤੋਂਕਾਰਾਂ}} ਵੱਲੋਂ ਤੁਹਾਨੂੰ $1 ($2)।',
 'youhavenewmessagesmanyusers' => 'ਕਈ ਵਰਤੋਂਕਾਰਾਂ ਵੱਲੋਂ ਤੁਹਾਨੂੰ $1 ($2)।',
 'newmessageslinkplural' => '{{PLURAL:$1|ਇੱਕ ਨਵਾਂ ਸੁਨੇਹਾ|ਨਵੇਂ ਸੁਨੇਹੇ}} {{PLURAL:$1|ਹੈ|ਹਨ}}',
@@ -432,9 +489,9 @@ $1',
 
 # Short words for each namespace, by default used in the namespace tab in monobook
 'nstab-main' => 'ਪੰਨਾ',
-'nstab-user' => 'ਮà©\88à¨\82ਬਰ ਪੰਨੇ',
+'nstab-user' => 'ਵਰਤà©\8bà¨\82à¨\95ਾਰ ਪੰਨੇ',
 'nstab-media' => 'ਮੀਡੀਆ ਸਫ਼ਾ',
-'nstab-special' => 'à¨\96ਾਸ ਪੰਨਾ',
+'nstab-special' => 'ਵਿਸ਼à©\87ਸ਼ ਪੰਨਾ',
 'nstab-project' => 'ਪਰਿਯੋਜਨਾ ਪੰਨਾ',
 'nstab-image' => 'ਫ਼ਾਈਲ',
 'nstab-mediawiki' => 'ਸੁਨੇਹਾ',
@@ -458,18 +515,17 @@ $1',
 ਹੋ ਸਕਦਾ ਹੈ ਇਹ ਤਰੁ੍ੱਟੀ ਸਾਫ਼ਟਵੇਅਰ ਦੀ ਹੋਵੇ।
 ਇਸ ਗਣਿਤਫ਼ਲ "<tt>$2</tt>" ਵਿਚੌਂ ਪਿਛਲੀ ਡੈਟਬਾਸ ਪੁੱਛ ਗਿੱਛ ਸੀ: <blockquote><tt>$1</tt></blockquote.
 ਡੈਟਾਬੇਸ ਨੇ ਇਹ ਤਰੁੱਟੀ "<tt>$3: $4</tt>"ਜਵਾਬ ਵਿਚ ਦਿੱਤੀ।',
-'dberrortextcl' => 'ਡੈਟਾਬੇਸ ਪੁ੍ਛ ਗਿੱਛ ਵਿਚ ਹਿਦਾਇਤਾਂ ਦੀ ਤਰੁੱਟੀ ਮਿਲੀ ਹੈ।
-ਹੋ ਸਕਦਾ ਹੈ ਇਹ ਤਰੁੱਟੀ ਸਾਫ਼ਟਵੇਅਰ ਦੀ ਹੋਵੇ।
-ਇਸ ਗਣਿਤਫ਼ਲ "$2" ਵਿਚੌਂ ਪਿਛਲੀ ਡੈਟਬਾਸ ਪੁੱਛ ਗਿੱਛ ਸੀ: "$1".
-ਡੈਟਾਬੇਸ ਨੇ ਇਹ ਤਰੁੱਟੀ "$1"ਜਵਾਬ ਵਿਚ ਦਿੱਤੀ।',
+'dberrortextcl' => 'ਡੈਟਾਬੇਸ ਪੁੱਛਗਿੱਛ ਵਿਚ ਹਿਦਾਇਤ ਗਲਤੀ ਮਿਲੀ ਹੈ।
+ਫੰਕਸ਼ਨ "$2" ਤੋਂ ਪਿਛਲੀ ਡਾਟਬਾਸ ਪੁੱਛ ਗਿੱਛ ਸੀ: "$1".
+ਡੈਟਾਬੇਸ ਨੇ ਇਹ ਗਲਤੀ "$3:$4" ਦਿੱਤੀ',
 'laggedslavemode' => "'''ਖ਼ਬਰਦਾਰ:''' ਹੋ ਸਕਦਾ ਹੈ ਸਫ਼ੇ ਵਿਚ ਤਾਜ਼ਾ ਤਬਦੀਲੀਆਂ ਸ਼ਾਮਲ ਨਾ ਹੋਣ।",
 'readonly' => 'ਡਾਟਾਬੇਸ ਲਾਕ ਹੈ',
 'enterlockreason' => 'ਤਾਲਾ-ਬੰਦੀ ਲਈ ਕਾਰਨ ਦਾਖ਼ਲ ਕਰੋ, ਨਾਲ਼ ਹੀ ਤਾਲਾ-ਬੰਦੀ ਦੇ ਰਿਲੀਜ਼ ਹੋਣ ਦਾ ਅੰਦਾਜ਼ਨ ਵਕਤ',
 'readonlytext' => 'ਡੈਟਾਬੇਸ ਨੂੰ ਇਸ ਵੇਲ਼ੇ ਤਾਲਾ ਲੱਗਾ ਹੋਇਆ ਹੈ, ਸ਼ਾਇਦ ਆਮ ਰੱਖ-ਰਖਾਵ ਲਈ, ਇਸਤੋਂ ਬਾਅਦ ਇਹ ਆਮ ਵਾਂਗ ਉਪਲੱਬਧ ਹੋਵੇਗਾ।
 ਜਿਸ ਪ੍ਰਬੰਧਕ ਨੇ ਇਸਨੂੰ ਤਾਲਾ ਲਾਇਆ ਹੈ ਉਸਦਾ ਕਹਿਣਾ ਹੈ ਕਿ: $1',
 'missing-article' => "ਡਾਟਾਬੇਸ ਨੂੰ ''$1'' $2 ਨਾਮ ਦਾ ਕੋਈ ਪੰਨਾ ਨਹੀਂ ਮਿਲਿਆ।
-à¨\86ਮ à¨¤à©\8cਰ à¨¤à©\87 à¨®à¨¿à¨\9fਾà¨\8f à¨\9cਾ à¨\9aà©\81ੱà¨\95à©\87 à¨ªà©°à¨¨à©\87 à¨¦à©\80 à¨\85ਤà©\80ਤ ਕੜੀ ਦੀ ਵਰਤੋਂ ਕਰਨ ਨਾਲ ਇੰਝ ਹੁੰਦਾ ਹੈ।
-à¨\9cà©\87 à¨\87ਹ à¨\97ੱਲ à¨¨à¨¹à©\80à¨\82 à¨¤à¨¾à¨\82 à¨¹à©\8b à¨¸à¨\95ਦਾ à¨¹à©\88 à¨¤à©\81ਹਾਨà©\82à©° à¨¸à¨¾à¨«à¨¼à¨\9fਵà©\87à¨\85ਰ à¨µà¨¿à¨\9a à¨\96ਾਮà©\80 à¨®à¨¿à¨² à¨\97à¨\88 à¨¹à©\88। à¨®à¨¿à¨¹à¨°à¨¬à¨¾à¨¨à©\80 ਕਰਕੇ ਪੰਨੇ ਦੇ ਪਤੇ ਸਮੇਤ [[Special:ListUsers/sysop|administrator]] ਨੂੰ ਇਤਲਾਹ ਦਿਓ।",
+à¨\86ਮ à¨¤à©\8cਰ à¨¤à©\87 à¨¹à¨\9fਾà¨\88 à¨\9cਾ à¨\9aà©\81ੱà¨\95à©\87 à¨ªà©°à¨¨à©\87 à¨¦à¨¾ à¨\87ਤਿਹਾਸ ਕੜੀ ਦੀ ਵਰਤੋਂ ਕਰਨ ਨਾਲ ਇੰਝ ਹੁੰਦਾ ਹੈ।
+à¨\9cà©\87 à¨\87ਹ à¨\97ੱਲ à¨¨à¨¹à©\80à¨\82 à¨¤à¨¾à¨\82 à¨¹à©\8b à¨¸à¨\95ਦਾ à¨¹à©\88 à¨¤à©\81ਹਾਨà©\82à©° à¨¸à¨¾à¨«à¨¼à¨\9fਵà©\87à¨\85ਰ à¨µà¨¿à¨\9a à¨\96ਾਮà©\80 à¨®à¨¿à¨² à¨\97à¨\88 à¨¹à©\88। à¨\95ਿਰਪਾ ਕਰਕੇ ਪੰਨੇ ਦੇ ਪਤੇ ਸਮੇਤ [[Special:ListUsers/sysop|administrator]] ਨੂੰ ਇਤਲਾਹ ਦਿਓ।",
 'missingarticle-rev' => '(ਬਦਲਾਅ#: $1)',
 'missingarticle-diff' => '(ਫ਼ਰਕ: $1, $2)',
 'readonly_lag' => 'ਜਦੌਂ ਤਕ ਅਧੀਨ ਡੇਟਾਬੇਸ ਸਰਵਰ ਸੁਤੰਤਰ ਡੈਟਾਬੇਸ ਸਰਵਰ ਦੀ ਪਕੜ ਵਿਚ ਨਹੀਂ ਆ ਜਾਂਦੇ ਡੈਟਾਬੇਸ ਸਵੈ ਜਕੜਿਆ ਗਿਆ ਹੈ।',
@@ -496,12 +552,16 @@ $1',
 'viewsource' => 'ਸਰੋਤ ਵੇਖੋ',
 'viewsource-title' => '$1 ਲਈ ਸਰੋਤ ਵੇਖੋ',
 'actionthrottled' => 'ਕਾਰਜ ਬੰਦ ਕਰ ਦਿੱਤਾ ਗਿਆ ਹੈ',
-'protectedpagetext' => 'ਇਹ ਸਫ਼ਾ ਫੇਰ-ਬਦਲ ਕਰਨ ਖ਼ਿਲਾਫ਼ ਸੁਰੱਖਿਅਤ ਹੈ।',
+'actionthrottledtext' => 'ਸਪੈਮ ਦੀ ਰੋਕਥਾਮ ਲਈ, ਇਹ ਕਰੀਆ ਇਨ੍ਹੇ ਘੱਟ ਸਮੇਂ ਵਿੱਚ ਇੱਕ ਸੀਮਾ ਤੋਂ ਜਿਆਦਾ ਵਾਰ ਕਰਨ ਤੋਂ ਮਨਾਹੀ ਹੈ, ਅਤੇ ਤੁਸੀਂ ਇਸ ਸੀਮਾ ਨੂੰ ਪਾਰ ਕਰ ਚੁੱਕੇ ਹੋ।
+ਕਿਰਪਾ ਕਰਕੇ ਕੁਝ ਸਮੇਂ ਬਾਅਦ ਪੁੰਨ: ਜਤਨ ਕਰੋ।',
+'protectedpagetext' => 'ਇਹ ਪੰਨੇ ਸੰਪਾਦਨ ਅਤੇ ਹੋਰ ਕੰਮ ਤੋਂ ਸੁਰੱਖਿਅਤ ਕੀਤਾ ਹੋਇਆ ਹੈ।',
 'viewsourcetext' => 'ਤੁਸੀਂ ਇਸ ਸਫ਼ੇ ਦਾ ਸਰੋਤ ਵੇਖ ਅਤੇ ਨਕਲ ਕਰ ਸਕਦੇ ਹੋ:',
 'viewyourtext' => 'ਤੁਸੀਂ ਇਸ ਸਫ਼ੇ ’ਤੇ ਕੀਤੀਆਂ "ਆਪਣੀਆਂ ਸੋਧਾਂ" ਦਾ ਸਰੋਤ ਵੇਖ ਅਤੇ ਨਕਲ ਕਰ ਸਕਦੇ ਹੋ:',
 'protectedinterface' => 'ਇਹ ਪੰਨਾ ਸਾਫ਼ਟਵੇਅਰ ਇੰਟਰਫ਼ੇਸ ਦਾ ਮੂਲ ਪਾਠ ਹੈ ,ਅਤੇ ਦੁਰਵਰਤੌਂ ਤੌਂ ਬਚਾਅ ਲਈ ਰਾਖਵਾਂ ਕੀਤਾ ਗਿਆ ਹੈ।',
 'editinginterface' => "'''ਚਿਤਾਵਨੀ''' ਤੁਸੀਂ ਐਸੇ ਪੰਨੇ ਨੂੰ ਬਦਲ ਰਹੇ ਹੋ ਜੋ ਸਾਫ਼ਟਵੇਅਰ ਇੰਟਰਫ਼ੇਸ ਦੇ ਮੂਲ ਪਾਠ ਲਈ ਵਰਤਿਆ ਗਿਆ ਹੈ।
 ਇਸ ਪੰਨੇ ਦੇ ਬਦਲਾਅ ਦੁਸਰੇ ਵਰਤੋਂ ਕਰਣ ਵਾਲਿਆਂ ਲਈ ਵਰਤੇ ਜਾਣ ਵਾਲੇ ਇੰਟਰਫਲੇਸ ਦੀ ਸ਼ਕਲ ਤੇ ਅਸਰ ਪਾ ਦੇਣਗੇ।ਅਨੁਵਾਦ ਕਰਣ ਲਈ ,ਕਿਰਪਾ ਕਰਕੇ [//translatewiki.net/wiki/Main_Page?setlang=pa ਟ੍ਰਾਂਸਲੇਟਵਿਕੀ.ਨੈਟ] ਦੀ ਵਰਤੌਂ ਕਰੋ,ਇਹ ਮੀਡੀਆਵਿਕੀ ਦੀ ਸਥਾਨਕੀਕਰਣ ਯੋਜਨਾ ਹੈ।",
+'cascadeprotected' => 'ਇਹ ਪੰਨਾ ਸੁਰੱਖਿਅਤ ਹੈ, ਕਿਉਂਕਿ ਇਹ ਨਿੱਚੇ ਲਿਖੇ {{PLURAL:$1|ਪੰਨਾ|ਪੰਨੇ}} ਦੀ ਸੁਰੱਖਿਆ-ਸੀੜੀ ਵਿੱਚ ਸ਼ਾਮਲ ਹੈ:
+$2',
 'namespaceprotected' => "ਤੁਹਾਨੂੰ '''$1''' ਥਾਂ-ਨਾਮ ਵਾਲ਼ੇ ਸਫ਼ਿਆਂ ਵਿਚ ਫੇਰ-ਬਦਲ ਕਰਨ ਦੀ ਇਜਾਜ਼ਤ ਨਹੀਂ ਹੈ।",
 'customcssprotected' => 'ਤੁਹਾਨੂੰ ਇਸ CSS ਸਫ਼ੇ ਵਿਚ ਸੋਧ ਕਰਨ ਦੀ ਇਜਾਜ਼ਤ ਨਹੀਂ ਹੈ ਕਿਉਂਕਿ ਇਸ ਵਿਚ ਕਿਸੇ ਹੋਰ ਮੈਂਬਰ ਦੀਆਂ ਨਿੱਜੀ ਸੈਟਿੰਗਾਂ ਹਨ।',
 'customjsprotected' => 'ਤੁਹਾਨੂੰ ਇਸ CSS ਸਫ਼ੇ ਵਿਚ ਸੋਧ ਕਰਨ ਦੀ ਇਜਾਜ਼ਤ ਨਹੀਂ ਹੈ ਕਿਉਂਕਿ ਇਸ ਵਿਚ ਕਿਸੇ ਹੋਰ ਮੈਂਬਰ ਦੀਆਂ ਨਿੱਜੀ ਸੈਟਿੰਗਾਂ ਹਨ।',
@@ -521,7 +581,7 @@ You can continue to use {{SITENAME}} anonymously, or you can log in again as the
 Note that some pages may continue to be displayed as if you were still logged in, until you clear your browser cache.",
 'welcomeuser' => 'ਸੁਆਗਤ, $1!',
 'welcomecreation-msg' => 'ਤੁਹਾਡਾ ਖਾਤਾ ਬਣ ਚੁੱਕਾ ਹੈ। ਆਪਣੀਆਂ [[Special:Preferences|{{SITENAME}} ਪਸੰਦਾਂ]] ਬਦਲਣੀਆਂ ਨਾ ਭੁੱਲੋ।',
-'yourname' => 'ਮà©\88à¨\82ਬਰ ਨਾਮ:',
+'yourname' => 'ਵਰਤà©\8bà¨\82à¨\95ਾਰ ਨਾਮ:',
 'yourpassword' => 'ਪਾਸਵਰਡ:',
 'yourpasswordagain' => 'ਪਾਸਵਰਡ ਦੁਬਾਰਾ ਲਿਖੋ:',
 'remembermypassword' => 'ਇਸ ਕੰਪਿਊਟਰ ’ਤੇ ਮੇਰਾ ਲਾਗਇਨ ਯਾਦ ਰੱਖੋ (ਵੱਧ ਤੋਂ ਵੱਧ $1 {{PLURAL:$1|ਦਿਨ|ਦਿਨਾਂ}} ਲਈ)',
@@ -529,7 +589,7 @@ Note that some pages may continue to be displayed as if you were still logged in
 'password-change-forbidden' => 'ਇਸ ਵਿਕੀ ਤੇ ਤੁਸੀਂ ਪਾਸਵਰਡ ਨਹੀਂ ਬਦਲ ਸਕਦੇ।',
 'login' => 'ਲਾਗ ਇਨ',
 'nav-login-createaccount' => 'ਲਾਗ ਇਨ/ਖਾਤਾ ਬਣਾਓ',
-'loginprompt' => 'ਤà©\81ਹਾਨà©\82à©° {{SITENAME}} â\80\99ਤà©\87 à¨²à¨¾à¨\97à¨\87ਨ à¨\95ਰਨ à¨²à¨\88 à¨\95à©\82à¨\95à©\80à¨\9c਼ ਯੋਗ ਕਰਨੇ ਜ਼ਰੂਰੀ ਹਨ।',
+'loginprompt' => 'ਤà©\81ਹਾਨà©\82à©° {{SITENAME}} â\80\99ਤà©\87 à¨²à¨¾à¨\97à¨\87ਨ à¨\95ਰਨ à¨²à¨\88 à¨\95à©\82à¨\95à©\80ਸ ਯੋਗ ਕਰਨੇ ਜ਼ਰੂਰੀ ਹਨ।',
 'userlogin' => 'ਲਾਗ ਇਨ/ਖਾਤਾ ਬਣਾਓ',
 'userloginnocreate' => 'ਲਾਗ ਇਨ',
 'logout' => 'ਲਾਗ ਆਉਟ',
@@ -677,13 +737,13 @@ $2
 # Edit pages
 'summary' => 'ਸਾਰ:',
 'subject' => 'ਵਿਸ਼ਾ/ਹੈੱਡਲਾਈਨ:',
-'minoredit' => 'à¨\87ਹ à¨\87ੱà¨\95 à¨\9bà©\8bà¨\9fà©\80 à¨¤à¨¬à¨¦à©\80ਲà©\80 ਹੈ',
+'minoredit' => 'à¨\87ਹ à¨\87ੱà¨\95 à¨\9bà©\8bà¨\9fਾ à¨¬à¨¦à¨²à¨¾à¨µ ਹੈ',
 'watchthis' => 'ਇਸ ਪੰਨੇ ’ਤੇ ਧਿਆਨ ਰੱਖੋ',
 'savearticle' => 'ਪੰਨਾ ਸਾਂਭੋ',
 'preview' => 'ਝਲਕ',
 'showpreview' => 'ਝਲਕ ਵੇਖੋ',
 'showlivepreview' => 'ਲਾਈਵ ਝਲਕ',
-'showdiff' => 'ਤਬਦà©\80ਲà©\80 à¨µà©\87à¨\96à©\8b',
+'showdiff' => 'ਬਦਲਾਵ à¨µà¨¿à¨\96ਾà¨\93',
 'anoneditwarning' => "'''ਚੇਤਾਵਨੀ:''' ਤੁਸੀਂ ਲਾਗਇਨ ਨਹੀਂ ਕੀਤਾ ਹੈ। ਤੁਹਾਡਾ IP ਐਡਰੈੱਸ ਇਸ ਪੰਨੇ ਦੇ ਇਤਿਹਾਸ ਵਿੱਚ ਰਿਕਾਰਡ ਕੀਤਾ ਜਾਵੇਗਾ।",
 'anonpreviewwarning' => "''ਤੁਸੀਂ ਲਾਗਇਨ ਨਹੀਂ ਕੀਤਾ। ਤਬਦੀਲੀ ਸਾਂਭਣ ਨਾਲ਼ ਤੁਹਾਡਾ IP ਪਤਾ ਸਫ਼ੇ ਦੇ ਸੋਧ ਅਤੀਤ ਵਿਚ ਰਿਕਾਰਡ ਹੋ ਜਾਵੇਗਾ।''",
 'missingsummary' => "'''ਯਾਦ-ਦਹਾਨੀ:''' ਤੁਸੀਂ ਸੋਧ ਸਾਰ ਮੁਹੱਈਆ ਨਹੀਂ ਕਰਵਾਇਆ। ਜੇ ਤੁਸੀਂ \"{{int:savearticle}}\" ਤੇ ਦੁਬਾਰਾ ਕਲਿੱਕ ਕੀਤਾ ਤਾਂ ਤੁਹਾਡਾ ਸਫ਼ਾ ਇਸਦੇ ਬਿਨਾਂ ਹੀ ਸਾਂਭਿਆ ਜਾਵੇਗਾ।",
@@ -747,7 +807,8 @@ sysop}}|administrator]] ਨਾਲ ਰਾਬਤਾ ਕਰ ਸਕਦੇ ਹੋ।
 '''ਇਹ ਹਾਲੇ ਸਾਂਭੀ ਨਹੀਂ ਗਈ ਹੈ!'''",
 'updated' => '(ਅੱਪਡੇਟ)',
 'note' => "'''ਨੋਟ:'''",
-'previewnote' => "'''ਯਾਦ ਰੱਖੋ ਇਹ ਸਿਰਫ਼ ਇਕ ਝਲਕ ਹੈ।''' ਤੁਹਾਡੀਆਂ ਤਬਦੀਲੀਆਂ ਹਾਲੇ ਸਾਂਭੀਆਂ ਨਹੀਂ ਗਈਆਂ!",
+'previewnote' => "'''ਯਾਦ ਰੱਖੋ, ਇਹ ਕੇਵਲ ਇੱਕ ਝਲਕ ਹੈ।'''
+ਤੁਹਾਡੇ ਬਦਲਾਵ ਹੁਣੇ ਤੱਕ ਸਾਂਭੇ ਨਹੀਂ ਗਏ ਹਨ!",
 'continue-editing' => 'ਸੰਪਾਦਨ ਜਾਰੀ ਰੱਖੋ',
 'previewconflict' => 'ਇਹ ਝਲਕ ਲਿਖਤ ਦਾ ਓਹ ਅਕਸ ਪੇਸ਼ ਕਰਦੀ ਹੈ ਜਿਵੇਂ ਓਹ ਤੁਹਾਡੇ ਸਾਂਭੇ ਜਾਣ ਤੋਂ ਬਾਅਦ ਦਿੱਸੇਗਾ।',
 'editing' => '$1 ਸੰਪਾਦਨ',
@@ -777,20 +838,19 @@ sysop}}|administrator]] ਨਾਲ ਰਾਬਤਾ ਕਰ ਸਕਦੇ ਹੋ।
 'template-semiprotected' => '(ਨੀਮ-ਸੁਰੱਖਿਅਤ)',
 'hiddencategories' => 'ਇਹ ਪੰਨਾ {{PLURAL:$1|੧ ਲੁਕਵੀਂ ਸ਼੍ਰੇਣੀ|
 $1 ਲੁਕਵੀਆਂ ਸ਼੍ਰੇਣੀਆਂ}} ਦਾ ਮੈਂਬਰ ਹੈ:',
-'nocreatetitle' => 'ਸਫ਼ਾ ਬਣਾਉਣ ਦੀ ਹੱਦ ਹੈ',
 'nocreatetext' => '{{SITENAME}} ਨੇ ਨਵੇਂ ਸਫ਼ੇ ਬਣਾਉਣ ਤੇ ਰੋਕ ਲਾਈ ਹੋਈ ਹੈ।
 ਤੁਸੀਂ ਵਾਪਸ ਜਾ ਕੇ ਮੌਜੂਦਾ ਸਫ਼ੇ ਸੋਧ ਸਕਦੇ ਹੋ ਜਾਂ [[Special:UserLogin|ਲਾਗਇਨ ਜਾਂ ਖਾਤਾ ਬਣਾ]] ਸਕਦੇ ਹੋ।',
 'nocreate-loggedin' => 'ਤੁਹਾਨੂੰ ਨਵੇਂ ਸਫ਼ੇ ਬਣਾਉਣ ਦੀ ਇਜਾਜ਼ਤ ਨਹੀਂ ਹੈ।',
 'permissionserrors' => 'ਅਧਿਕਾਰ ਗਲਤੀਆਂ',
 'permissionserrorstext' => 'ਤੁਹਾਨੂੰ ਇੰਝ ਕਰਨ ਦੇ ਅਧਿਕਾਰ ਨਹੀਂ ਹਨ। ਹੇਠ ਦਿੱਤੇ {{PLURAL:$1|ਕਾਰਨ|ਕਾਰਨ}} ਨੇ:',
-'permissionserrorstext-withaction' => '{{PLURAL:$1|ਇਸ ਕਾਰਨ|ਇਹਨਾਂ ਕਾਰਨਾਂ}} ਕਰਕੇ ਤੁਹਾਨੂੰ $2 ਦੀ ਇਜਾਜ਼ਤ ਨਹੀਂ ਹੈ:',
-'recreate-moveddeleted-warn' => "'''à¨\96ਬਰਦਾਰ:
+'permissionserrorstext-withaction' => 'ਤੁਹਾਨੂੰ  $2 ਦੀ ਅਨੁਮਤੀ ਨਹੀਂ ਹਨ, ਨਿੱਚੇ ਲਿਖੇ {{PLURAL:$1|ਕਾਰਨ|ਕਾਰਨਾਂ}} ਦੀ ਵਜ੍ਹਾ:',
+'recreate-moveddeleted-warn' => "'''à¨\9aਿਤਾਵਣà©\80:
 ਤੁਸੀਂ ਐਸਾ ਪੰਨਾ ਬਣਾ ਰਹੇ ਹੋ ਜੋ ਪਹਿਲਾਂ ਹਟਾਇਆ ਜਾ ਚੁੱਕਾ ਹੈ।'''
 
 ਖਿਆਲ ਕਰੋ ਕਿ ਕੀ ਇਸ ਪੰਨੇ ਦਾ ਕਾਇਮ ਰਹਿਣਾ ਠੀਕ ਹੈ।
 ਇਸਨੂੰ ਮਿਟਾਉਣ ਜਾਂ ਸਿਰਲੇਖ ਬਦਲੀ ਦਾ ਚਿੱਠਾ ਹੇਠਾਂ ਦਿੱਤਾ ਗਿਆ ਹੈ।",
 'moveddeleted-notice' => 'ਇਹ ਪੰਨਾ ਹਟਾ ਦਿੱਤਾ ਗਿਆ ਹੈ।
-à¨\87ਸਦà©\87 à¨®à¨¿ਟਾਉਣ ਜਾਂ ਸਿਰਲੇਖ ਬਦਲੀ ਦਾ ਚਿੱਠਾ ਹਵਾਲੇ ਲਈ ਹੇਠ ਦਿੱਤਾ ਗਿਆ ਹੈ।',
+à¨\87ਸਦà©\87 à¨¹ਟਾਉਣ ਜਾਂ ਸਿਰਲੇਖ ਬਦਲੀ ਦਾ ਚਿੱਠਾ ਹਵਾਲੇ ਲਈ ਹੇਠ ਦਿੱਤਾ ਗਿਆ ਹੈ।',
 'log-fulllog' => 'ਪੂਰਾ ਚਿੱਠਾ ਵੇਖੋ',
 'edit-gone-missing' => 'ਸਫ਼ਾ ਅਪਡੇਟ ਨਹੀਂ ਹੋ ਸਕਿਆ।
 ਲਗਦਾ ਹੈ ਮਿਟਾਇਆ ਜਾ ਚੁੱਕਾ ਹੈ।',
@@ -801,7 +861,7 @@ $1 ਲੁਕਵੀਆਂ ਸ਼੍ਰੇਣੀਆਂ}} ਦਾ ਮੈਂਬਰ 
 # Parser/template warnings
 'post-expand-template-inclusion-warning' => "'''ਖਬਰਦਾਰ:''' ਸਾਂਚਾ ਦਾ ਅਕਾਰ ਬਹੁਤ ਵੱਡਾ ਹੈ। ਕੁਝ ਟੈਂਪਲੇਟ ਸ਼ਾਮਲ ਨਹੀਂ ਹੋਣਗੇ।",
 'post-expand-template-inclusion-category' => 'ਓਹ ਪੰਨੇ ਜਿੱਥੇ ਟੈਂਪਲੇਟਾਂ ਦੇ ਸ਼ਾਮਲ ਕਰਨ ਦਾ ਅਕਾਰ ਹੱਦੋਂ ਵਧ ਗਿਆ ਹੈ',
-'post-expand-template-argument-warning' => "'''à¨\96਼ਬਰਦਾਰ:'''
+'post-expand-template-argument-warning' => "'''à¨\9aà©\87ਤਾਵਨà©\80:'''
 ਇਸ ਪੰਨੇ ਤੇ ਘੱਟੋ ਘੱਟ ਇੱਕ ਐਸੀ ਸਾਂਚਾ ਬਹਿਸ ਹੈ ਜਿਸ ਦਾ ਅਕਾਰ ਬਹੁਤ ਵੱਡਾ ਹੈ। ਅਜਿਹੀਆਂ ਬਹਿਸਾਂ ਨੂੰ ਛੱਡ ਦਿੱਤਾ ਗਿਆ ਹੈ।",
 'post-expand-template-argument-category' => 'ਐਸੇ ਪੰਨੇ ਜਿਨ੍ਹਾਂ ਵਿੱਚ ਸਾਂਚੇ ਦੇ ਸਁਘਟਕ ਛੁੱਟ ਗਏ ਹਨ ।',
 'parser-template-loop-warning' => 'ਸਾਂਚੇ ਦਾ ਲੂਪ ਲੱਭਿਆ: [[$1]]',
@@ -830,15 +890,15 @@ $3 ਨੇ ਕਾਰਨ ਇਹ ਦੱਸਿਆ ਹੈ, ''$2''",
 'currentrevisionlink' => 'ਸਭ ਤੋ ਨਵਾਂ ਰੀਵਿਜਨ',
 'cur' => 'ਮੌਜੂਦਾ',
 'next' => 'ਅੱਗੇ',
-'last' => 'à¨\86à¨\96ਰà©\80',
+'last' => 'ਪਿੱà¨\9bਲਾ',
 'page_first' => 'ਪਹਿਲਾਂ',
 'page_last' => 'ਆਖਰੀ',
-'histlegend' => "ਫ਼ਰà¨\95 ਵੇਖੋ:
+'histlegend' => "à¨\85ੰਤਰ ਵੇਖੋ:
 ਮੁਕਾਬਲਾ ਕਰਨ ਲਈ ਰੀਵਿਜਨਾਂ ਦੇ ਰੇਡੀਓ ਬਟਨਾਂ ਵਿੱਚ ਨਿਸ਼ਾਨ ਲਾਓ ਅਤੇ ਜਾਓ ਜਾਂ ਸਭ ਤੋਂ ਥੱਲੇ ਵਾਲੇ ਬਟਨ ਤੇ ਕਲਿੱਕ ਕਰੋ। <br />
 ਲੈਜਅੰਡ:
-'''({{int:cur}})''' = à¨¨à¨µà©\87à¨\82 à¨°à©\80ਵਿà¨\9cਨ à¨¨à¨¾à¨²à©\8bà¨\82 à¨«à¨¼à¨°à¨\95, '''({{int:last}})''' = à¨\86à¨\96ਰà©\80 à¨°à©\80ਵਿà¨\9cਨ à¨¨à¨¾à¨²à©\8bà¨\82 à¨«à¨¼à¨°à¨\95, '''({{int:minoreditletter}})''' = à¨\9bà©\8bà¨\9fà©\80 à¨¸à©\8bਧ।",
+'''({{int:cur}})''' = à¨¨à¨µà©\87à¨\82 à¨°à©\80ਵਿà¨\9cਨ à¨¨à¨¾à¨²à©\8bà¨\82 à¨\85ੰਤਰ, '''({{int:last}})''' = à¨ªà¨¿à©±à¨\9bਲà©\80 à¨°à©\80ਵਿà¨\9cਨ à¨¨à¨¾à¨²à©\8bà¨\82 à¨\85ੰਤਰ, '''({{int:minoreditletter}})''' = à¨\9bà©\8bà¨\9fਾ à¨¬à¨¦à¨²à¨¾à¨µ।",
 'history-fieldset-title' => 'ਇਤਿਹਾਸ ਨੂੰ ਬ੍ਰਾਊਜ਼ ਕਰੋ',
-'history-show-deleted' => 'ਸਿਰਫ਼ à¨®à¨¿ਟਾਏ ਗਏ',
+'history-show-deleted' => 'à¨\95à©\87ਵਲ à¨¹ਟਾਏ ਗਏ',
 'histfirst' => 'ਸਭ ਤੋਂ ਪਹਿਲਾਂ ਦੇ',
 'histlast' => 'ਸਭ ਤੋਂ ਨਵਾਂ',
 'historysize' => '($1 ਬਾਈਟ)',
@@ -875,7 +935,7 @@ page={{FULLPAGENAMEE}}}} ਮਿਟਾਉਣ ਦੇ ਚਿੱਠੇ] ਵਿਚ 
 'rev-suppressed-diff-view' => "ਇਸ ਫ਼ਰਕ ਵਿੱਚੋਂ ਇੱਕ ਰੀਵਿਜ਼ਨ '''ਜ਼ਬਤ''' ਕੀਤੀ ਜਾ ਚੁੱਕੀ ਹੈ।
 ਤਫ਼ਸੀਲ [{{fullurl:{{#Special:Log}}/delete|
 page={{FULLPAGENAMEE}}}} ਜ਼ਬਤੀ ਦੇ ਚਿੱਠੇ] ਵਿਚ ਵੇਖੀ ਜਾ ਸਕਦੀ ਹੈ।",
-'rev-delundel' => 'ਦਿà¨\96ਾà¨\93/ਲà©\81à¨\95ਾਓ',
+'rev-delundel' => 'ਵਿà¨\96ਾà¨\93/à¨\9bà©\81ਪਾਓ',
 'rev-showdeleted' => 'ਵਖਾਓ',
 'revisiondelete' => 'ਰੀਵਿਜ਼ਨ ਮਿਟਾਓ/ਮਿਟਾਈ ਰੱਦ ਕਰੋ',
 'revdelete-nooldid-title' => 'ਕੋਈ ਟਾਰਗੇਟ ਰੀਵਿਜ਼ਨ ਨਹੀਂ',
@@ -896,7 +956,7 @@ page={{FULLPAGENAMEE}}}} ਜ਼ਬਤੀ ਦੇ ਚਿੱਠੇ] ਵਿਚ ਵ
 'revdelete-radio-unset' => 'ਨਹੀਂ',
 'revdelete-unsuppress' => 'ਮੁੜ ਬਹਾਲ ਕੀਤੀਆਂ ਰੀਵਿਜ਼ਨਾਂ ਤੋਂ ਰੋਕਾਂ ਹਟਾਓ',
 'revdelete-log' => 'ਕਾਰਨ:',
-'revdelete-submit' => 'à¨\9aà©\81ਣà©\87 à¨°à©\80ਵਿà¨\9c਼ਨ à¨\89ੱਤà©\87 à¨²à¨¾à¨\97à©\82 à¨\95ਰà©\8b',
+'revdelete-submit' => 'ਚੁਣੇ ਰੀਵਿਜਨ ਉੱਤੇ ਲਾਗੂ ਕਰੋ',
 'logdelete-success' => "'''ਚਿੱਠੇ ਦੀ ਦਿੱਖ ਕਾਮਯਾਬੀ ਨਾਲ਼ ਸੈੱਟ ਕੀਤੀ।'''",
 'logdelete-failure' => "'''ਚਿੱਠੇ ਦੀ ਦਿੱਖ ਸੈੱਟ ਨਹੀਂ ਕੀਤੀ ਜਾ ਸਕਦੀ:''' $1",
 'revdel-restore' => 'ਦਿੱਖ ਬਦਲੋ',
@@ -940,7 +1000,7 @@ page={{FULLPAGENAMEE}}}} ਜ਼ਬਤੀ ਦੇ ਚਿੱਠੇ] ਵਿਚ ਵ
 'compareselectedversions' => 'ਚੁਣੇ ਵਰਜਨਾਂ ਦੀ ਤੁਲਨਾ',
 'showhideselectedversions' => 'ਚੁਣੇ ਰੀਵਿਜ਼ਨ ਵਖਾਓ/ਲੁਕਾਓ',
 'editundo' => 'ਉਧੇੜੋ',
-'diff-multi' => '({{PLURAL:$2|ਮà©\88à¨\82ਬਰ à¨¦à©\80|$2 à¨®à©\88à¨\82ਬਰਾà¨\82 à¨¦à©\80à¨\86à¨\82}} {{PLURAL:$1|ਵਿà¨\9aà¨\95ਾਰਲà©\80 à¨°à©\80ਵਿà¨\9cਨ à¨¨à¨¹à©\80à¨\82 à¨¦à¨¿à¨\96ਾà¨\88 à¨\9cਾ à¨°à¨¹à©\80|ਵਿà¨\9aà¨\95ਾਰਲà©\80à¨\86à¨\82 $1 à¨°à©\80ਵਿà¨\9c਼ਨਾਂ ਨਹੀਂ ਦਿਖਾਈਆਂ ਜਾ ਰਹੀਆਂ}})',
+'diff-multi' => '({{PLURAL:$2|ਵਰਤà©\8bà¨\82à¨\95ਾਰ à¨¦à©\80|$2 à¨µà¨°à¨¤à©\8bà¨\82à¨\95ਾਰਾà¨\82 à¨¦à©\80à¨\86à¨\82}} {{PLURAL:$1|ਵਿà¨\9aà¨\95ਾਰਲà©\80 à¨°à©\80ਵਿà¨\9cਨ à¨¨à¨¹à©\80à¨\82 à¨¦à¨¿à¨\96ਾà¨\88 à¨\9cਾ à¨°à¨¹à©\80|ਵਿà¨\9aà¨\95ਾਰਲà©\80à¨\86à¨\82 $1 à¨°à©\80ਵਿà¨\9cਨਾਂ ਨਹੀਂ ਦਿਖਾਈਆਂ ਜਾ ਰਹੀਆਂ}})',
 
 # Search results
 'searchresults' => 'ਖੋਜ ਨਤੀਜੇ',
@@ -1069,8 +1129,8 @@ $3|'''1''' ਨਤੀਜਾ|'''$3''' ਨਤੀਜੇ}} ਵਖਾਓ।",
 'prefs-emailconfirm-label' => 'ਈ-ਮੇਲ ਤਸਦੀਕ:',
 'prefs-textboxsize' => 'ਸੋਧ ਖਿੜਕੀ ਦਾ ਅਕਾਰ',
 'youremail' => 'ਈ-ਮੇਲ:',
-'username' => 'ਯà©\82à¨\9c਼ਰ à¨¨à¨¾à¨\82:',
-'uid' => 'ਯà©\82à¨\9c਼ਰ ID:',
+'username' => 'ਵਰਤà©\8bà¨\82à¨\95ਾਰਨਾਮ:',
+'uid' => 'ਵਰਤà©\8bà¨\82à¨\95ਾਰ ID:',
 'prefs-memberingroups' => '{{PLURAL:$1|ਗਰੁੱਪ|ਗਰੁੱਪਾਂ}} ਦਾ ਮੈਂਬਰ:',
 'prefs-registration' => 'ਰਜਿਸਟ੍ਰੇਸ਼ਨ ਦਾ ਵਕਤ:',
 'yourrealname' => 'ਅਸਲੀ ਨਾਮ:',
@@ -1084,9 +1144,9 @@ $3|'''1''' ਨਤੀਜਾ|'''$3''' ਨਤੀਜੇ}} ਵਖਾਓ।",
 'gender-female' => 'ਔਰਤ',
 'email' => 'ਈਮੇਲ',
 'prefs-help-realname' => 'ਅਸਲੀ ਨਾਂ ਚੋਣਵਾਂ ਹੈ, ਅਤੇ ਜੇ ਤੁਸੀਂ ਇਹ ਦਿੱਤਾ ਹੈ ਤਾਂ ਤੁਹਾਡੇ ਕੰਮ ਵਾਸਤੇ ਗੁਣ ਦੇ ਤੌਰ ਉੱਤੇ ਵਰਤਿਆ ਜਾਵੇਗਾ।',
-'prefs-help-email' => 'ਤà©\81ਹਾਡà©\80 à¨®à¨°à¨\9c਼à©\80 à¨¹à©\88 à¨\88ਮà©\87ਲ à¨ªà¨¤à¨¾ à¨¦à¨¿à¨\93 à¨\9cਾà¨\82 à¨¨à¨¾ à¨¦à¨¿à¨\93 à¨ªà¨° à¨ªà¨¾à¨¸à¨µà¨°à¨¡ à¨­à©\81ੱਲ à¨\9cਾਣ à¨¤à©\87 à¨¨à¨µà¨¾à¨\82 à¨ªà¨¾à¨¸à¨µà¨°à¨¡ à¨¹à¨¾à¨¸à¨² à¨\95ਰਨ à¨²à¨\88 à¨\87ਹ à¨\9c਼ਰੂਰੀ ਹੈ।',
-'prefs-help-email-others' => 'ਤà©\81ਸà©\80à¨\82 à¨\87ਹ à¨µà©\80 à¨\9aà©\81ਣ à¨¸à¨\95ਦà©\87 à¨¹à©\8b à¨\95ਿ à¨¤à©\81ਹਾਡà©\87 à¨®à©\88à¨\82ਬਰ à¨\9cਾà¨\82 à¨\9aਰà¨\9aਾ à¨ªà©°à¨¨à©\87 à¨¤à©\8bà¨\82 à¨¹à©\8bਰ à¨®à©\88à¨\82ਬਰ ਤੁਹਾਨੂੰ ਈ-ਮੇਲ ਭੇਜ ਸਕਣ?
-à¨\9cਦà©\8bà¨\82 à¨¹à©\8bਰ à¨®à©\88à¨\82ਬਰ ਤੁਹਾਨੂੰ ਈ-ਮੇਲ ਭੇਜਦੇ ਹਨ ਤਾਂ ਤੁਹਾਡਾ ਈ-ਮੇਲ ਪਤਾ ਜ਼ਾਹਰ ਨਹੀਂ ਕੀਤਾ ਜਾਂਦਾ।',
+'prefs-help-email' => 'ਤà©\81ਹਾਡà©\80 à¨®à¨°à¨\9cà©\80 à¨¹à©\88 à¨\88ਮà©\87ਲ à¨ªà¨¤à¨¾ à¨¦à¨¿à¨\93 à¨\9cਾà¨\82 à¨¨à¨¾ à¨¦à¨¿à¨\93 à¨ªà¨° à¨ªà¨¾à¨¸à¨µà¨°à¨¡ à¨­à©\81ੱਲ à¨\9cਾਣ à¨¤à©\87 à¨¨à¨µà¨¾à¨\82 à¨ªà¨¾à¨¸à¨µà¨°à¨¡ à¨¹à¨¾à¨¸à¨² à¨\95ਰਨ à¨²à¨\88 à¨\87ਹ à¨\9cਰੂਰੀ ਹੈ।',
+'prefs-help-email-others' => 'ਤà©\81ਸà©\80à¨\82 à¨\87ਹ à¨µà©\80 à¨\9aà©\81ਣ à¨¸à¨\95ਦà©\87 à¨¹à©\8b à¨\95ਿ à¨¤à©\81ਹਾਡà©\87 à¨µà¨°à¨¤à©\8bà¨\82à¨\95ਾਰ à¨\9cਾà¨\82 à¨\9aਰà¨\9aਾ à¨ªà©°à¨¨à©\87 à¨¤à©\8bà¨\82 à¨¹à©\8bਰ à¨µà¨°à¨¤à©\8bà¨\82à¨\95ਾਰ ਤੁਹਾਨੂੰ ਈ-ਮੇਲ ਭੇਜ ਸਕਣ?
+à¨\9cਦà©\8bà¨\82 à¨¹à©\8bਰ à¨µà¨°à¨¤à©\8bà¨\82à¨\95ਾਰ ਤੁਹਾਨੂੰ ਈ-ਮੇਲ ਭੇਜਦੇ ਹਨ ਤਾਂ ਤੁਹਾਡਾ ਈ-ਮੇਲ ਪਤਾ ਜ਼ਾਹਰ ਨਹੀਂ ਕੀਤਾ ਜਾਂਦਾ।',
 'prefs-help-email-required' => 'ਈ-ਮੇਲ ਪਤਾ ਚਾਹੀਦਾ ਹੈ।',
 'prefs-info' => 'ਮੁੱਢਲੀ ਜਾਣਕਾਰੀ',
 'prefs-signature' => 'ਦਸਤਖ਼ਤ',
@@ -1107,7 +1167,7 @@ $3|'''1''' ਨਤੀਜਾ|'''$3''' ਨਤੀਜੇ}} ਵਖਾਓ।",
 'userrights-lookup-user' => 'ਯੂਜ਼ਰ ਗਰੁੱਪ ਦੇਖਭਾਲ',
 'userrights-user-editname' => 'ਇੱਕ ਯੂਜ਼ਰ ਨਾਂ ਦਿਓ:',
 'editusergroup' => 'ਯੂਜ਼ਰ ਗਰੁੱਪ ਸੋਧ',
-'editinguser' => '<b>$1</b> à¨¯à©\82à¨\9c਼ਰ ਸੋਧਿਆ ਜਾ ਰਿਹਾ ਹੈ ([[User talk:$1|{{int:talkpagelinktext}}]] | [[Special:Contributions/$1|{{int:contribslink}}]])',
+'editinguser' => '<b>$1</b> à¨µà¨°à¨¤à©\8bà¨\82à¨\95ਾਰ ਸੋਧਿਆ ਜਾ ਰਿਹਾ ਹੈ ([[User talk:$1|{{int:talkpagelinktext}}]] | [[Special:Contributions/$1|{{int:contribslink}}]])',
 'userrights-editusergroup' => 'ਯੂਜ਼ਰ ਗਰੁੱਪ ਸੋਧ',
 'saveusergroups' => 'ਯੂਜ਼ਰ ਗਰੁੱਪ ਸੰਭਾਲੋ',
 'userrights-groupsmember' => 'ਇਸ ਦਾ ਮੈਂਬਰ:',
@@ -1154,11 +1214,13 @@ $3|'''1''' ਨਤੀਜਾ|'''$3''' ਨਤੀਜੇ}} ਵਖਾਓ।",
 'right-siteadmin' => 'ਡੈਟਾਬੇਸ ਨੂੰ ਤਾਲਾ ਲਾਉਣਾ ਤੇ ਖੋਲ੍ਹਣਾ',
 'right-sendemail' => 'ਦੂਜੇ ਮੈਂਬਰਾਂ ਨੂੰ ਈ-ਮੇਲ ਭੇਜਣਾ',
 
+# Special:Log/newusers
+'newuserlogpage' => 'ਬਣਾਏ ਖਾਤਿਆਂ ਦਾ ਚਿੱਠਾ',
+'newuserlogpagetext' => 'ਇਹ ਬਣੇ ਮੈਂਬਰਾਂ ਦਾ ਚਿੱਠਾ ਹੈ।',
+
 # User rights log
 'rightslog' => 'ਮੈਂਬਰ ਹੱਕਾਂ ਦਾ ਚਿੱਠਾ',
 'rightslogtext' => 'ਇਹ ਮੈਂਬਰ ਹੱਕਾਂ ਵਿਚ ਹੋਈਆਂ ਤਬਦੀਲੀਆਂ ਦਾ ਚਿੱਠਾ ਹੈ।',
-'rightslogentry-autopromote' => '$2 ਤੋਂ ਆਪਣੇ ਆਪ $3 ਤੱਕ ਤਰੱਕੀ ਕਰੀ',
-'rightsnone' => '(ਕੋਈ ਨਹੀਂ)',
 
 # Associated actions - in the sentence "You do not have permission to X"
 'action-read' => 'ਇਹ ਸਫ਼ਾ ਪੜ੍ਹਨ',
@@ -1182,46 +1244,45 @@ $3|'''1''' ਨਤੀਜਾ|'''$3''' ਨਤੀਜੇ}} ਵਖਾਓ।",
 'action-sendemail' => 'ਈ-ਮੇਲਾਂ ਭੇਜਣ',
 
 # Recent changes
-'nchanges' => '$1 {{PLURAL:$1|ਤਬਦੀਲੀ|
-ਤਬਦੀਲੀਆਂ}}',
-'recentchanges' => 'ਹਾਲ ਹੀ ’ਚ ਹੋਈਆਂ ਤਬਦੀਲੀਆਂ',
-'recentchanges-legend' => 'ਹਾਲ ਦੀਆਂ ਤਬਦੀਲੀਆਂ ਸਬੰਧੀ ਚੋਣਾਂ',
+'nchanges' => '$1 {{PLURAL:$1|ਬਦਲਾਵ}}',
+'recentchanges' => 'ਹਾਲ ’ਚ ਹੋਏ ਬਦਲਾਵ',
+'recentchanges-legend' => 'ਹਾਲ ਦੇ ਪਰਿਵਰਤਨ ਸਬੰਧੀ ਵਿਕਲਪ',
 'recentchanges-summary' => 'ਇਸ ਵਿਕੀ ’ਤੇ ਹੋਈਆਂ ਸਭ ਤੋਂ ਨਵੀਆਂ ਤਬਦੀਲੀਆਂ ਇਸ ਸਫ਼ੇ ’ਤੇ ਵੇਖੋ।',
-'recentchanges-feed-description' => 'ਇਸ ਵਿਕੀ ’ਤੇ ਹਾਲ ਹੀ ਵਿਚ ਹੋਈਆਂ ਤਬਦੀਲੀਆਂ ਇਸ ਫ਼ੀਡ ’ਚ ਵੇਖੀਆਂ ਜਾ ਸਕਦੀਆਂ ਹਨ।',
+'recentchanges-feed-description' => 'ਇਸ ਵਿਕੀ ’ਤੇ ਹਾਲ ‘ਚ ਹੋਏ ਬਦਲਾਵ ਇਸ ਫ਼ੀਡ ’ਚ ਵੇਖੀਆਂ ਜਾ ਸਕਦੀਆਂ ਹਨ।',
 'recentchanges-label-newpage' => 'ਇਹ ਸੰਪਾਦਨ ਨੇ ਨਵਾਂ ਪੰਨਾ ਬਣਾਇਆ ਹੈ',
 'recentchanges-label-minor' => 'ਇਹ ਇੱਕ ਛੋਟਾ ਸੰਪਾਦਨ ਹੈ',
 'recentchanges-label-bot' => 'ਇਹ ਸੰਪਾਦਨ ਬੋਟ ਵਲੋਂ ਕੀਤੀ ਗਈ ਹੈ',
 'recentchanges-label-unpatrolled' => 'ਇਹ ਫੇਰ-ਬਦਲ ਹਾਲੇ ਵੇਖਿਆ ਨਹੀਂ ਗਿਆ',
-'rcnote' => "$4, $5 à¨¤à©±à¨\95 à¨\86à¨\96ਰà©\80 {{PLURAL:$2|ਦਿਨ|'''$2''' à¨¦à¨¿à¨¨à¨¾à¨\82}} à¨µà¨¿à©±à¨\9a {{PLURAL:$1|'''1''' à¨¤à¨¬à¨¦à©\80ਲà©\80 à¨¹à©\8bà¨\88 à¨¹à©\88।|'''$1''' à¨¤à¨¬à¨¦à©\80ਲੀਆਂ ਹੋਈਆਂ ਹਨ।}}",
-'rcnotefrom' => "'''$2''' à¨¤à©±à¨\95 ('''$1''' à¨¤à©±à¨\95 à¨¦à¨¿à©±à¨¸à¨¦à©\80à¨\86à¨\82) à¨¤à¨¬à¨¦à©\80ਲà©\80à¨\86à¨\82 ਹੇਠ ਦਿੱਤੀਆਂ ਹਨ।",
-'rclistfrom' => '$1 à¨¤à©\8bà¨\82 à¨¸à¨¼à©\81ਰà©\82 à¨\95ਰà¨\95à©\87 à¨¨à¨µà©\80à¨\86à¨\82 à¨¤à¨¬à¨¦à©\80ਲà©\80à¨\86à¨\82 à¨¦à¨¿ਖਾਓ',
-'rcshowhideminor' => '$1 à¨\9bà©\8bà¨\9fà©\80à¨\86à¨\82 à¨¤à¨¬à¨¦à©\80ਲà©\80à¨\86à¨\82',
+'rcnote' => "$4, $5 à¨¤à©±à¨\95 à¨\86à¨\96ਰà©\80 {{PLURAL:$2|ਦਿਨ|'''$2''' à¨¦à¨¿à¨¨à¨¾à¨\82}} à¨µà¨¿à©±à¨\9a {{PLURAL:$1|'''1''' à¨¬à¨¦à¨²à©\80 à¨¹à©\8bà¨\88 à¨¹à©\88।|'''$1''' à¨¬à¨¦ਲੀਆਂ ਹੋਈਆਂ ਹਨ।}}",
+'rcnotefrom' => "'''$2''' à¨¤à©±à¨\95 ('''$1''' à¨¤à©±à¨\95 à¨¦à¨¿à©±à¨¸à¨¦à©\87) à¨¬à¨¦à¨²à¨¾à¨µ ਹੇਠ ਦਿੱਤੀਆਂ ਹਨ।",
+'rclistfrom' => '$1 à¨¤à©\8bà¨\82 à¨¸à¨¼à©\81ਰà©\82 à¨\95ਰà¨\95à©\87 à¨¨à¨µà©\87à¨\82 à¨¬à¨¦à¨²à¨¾à¨µ à¨µà©\87ਖਾਓ',
+'rcshowhideminor' => '$1 à¨\9bà©\8bà¨\9fà©\87 à¨¬à¨¦à¨²à¨¾à¨µ',
 'rcshowhidebots' => '$1 ਬੋਟ',
-'rcshowhideliu' => '$1 à¨²à¨¾à¨\97à¨\87ਨ à¨¹à©\8bà¨\8f à¨®à©\88à¨\82ਬਰ',
-'rcshowhideanons' => '$1 à¨\97à©\81ਮਨਾਮ à¨®à©\88à¨\82ਬਰ',
+'rcshowhideliu' => '$1 à¨²à¨¾à¨\97à¨\87ਨ à¨¹à©\8bà¨\8f à¨µà¨°à¨¤à©\8bà¨\82à¨\95ਾਰਾà¨\82',
+'rcshowhideanons' => '$1 à¨\97à©\81ਮਨਾਮ à¨µà¨°à¨¤à©\8bà¨\82à¨\95ਾਰ',
 'rcshowhidepatr' => 'ਜਾਂਚੇ ਹੋਏ ਸੰਪਾਦਨ $1',
-'rcshowhidemine' => 'ਮà©\87ਰà©\80à¨\86à¨\82 à¨¤à¨¬à¨¦à©\80ਲà©\80à¨\86à¨\82 $1',
-'rclinks' => 'ਪਿà¨\9bਲà©\87 $2 à¨¦à¨¿à¨¨à¨¾à¨\82 à¨µà¨¿à©±à¨\9a à¨¹à©\8bà¨\88à¨\86à¨\82 $1 à¨¤à¨¬à¨¦à©\80ਲà©\80à¨\86à¨\82 à¨¦à¨¿à¨\96ਾà¨\93 <br /> $3',
-'diff' => 'ਫ਼ਰà¨\95',
+'rcshowhidemine' => 'ਮà©\87ਰà©\87 à¨¬à¨¦à¨²à¨¾à¨µ $1',
+'rclinks' => 'ਪਿà¨\9bਲà©\87 $2 à¨¦à¨¿à¨¨à¨¾à¨\82 à¨µà¨¿à©±à¨\9a à¨¹à©\8bà¨\8f $1 à¨¬à¨¦à¨²à¨¾à¨µ à¨µà©\87à¨\96ਾà¨\93<br /> $3',
+'diff' => 'à¨\85ੰਤਰ',
 'hist' => 'ਇਤਿਹਾਸ',
-'hide' => 'ਲà©\81à¨\95ਾਓ',
-'show' => 'ਵਖਾਓ',
-'minoreditletter' => 'ਛ',
+'hide' => 'à¨\9bà©\81ਪਾਓ',
+'show' => 'ਵਿà¨\96ਾà¨\93',
+'minoreditletter' => 'ਛ',
 'newpageletter' => 'ਨ',
-'boteditletter' => 'ਬ',
+'boteditletter' => 'ਬ',
 'rc_categories_any' => 'ਕੋਈ ਵੀ',
-'rc-enhanced-expand' => 'ਵੇਰਵਾ ਵਖਾਓ (ਜਾਵਾਸਕ੍ਰਿਪਟ ਲੋੜੀਂਦੀ ਹੈ)',
-'rc-enhanced-hide' => 'ਵà©\87ਰਵਾ à¨²à©\81à¨\95ਾਓ',
+'rc-enhanced-expand' => 'ਵà©\87ਰਵਾ à¨µà©\87à¨\96ਾà¨\93 (à¨\9cਾਵਾਸà¨\95à©\8dਰਿਪà¨\9f à¨²à©\8bà©\9cà©\80à¨\82ਦà©\80 à¨¹à©\88)',
+'rc-enhanced-hide' => 'ਵà©\87ਰਵਾ à¨\9bà©\81ਪਾਓ',
 
 # Recent changes linked
-'recentchangeslinked' => 'ਸਬੰਧਤ à¨¤à¨¬à¨¦à©\80ਲà©\80à¨\86à¨\82',
+'recentchangeslinked' => 'ਸਬੰਧਤ à¨¬à¨¦à¨²à¨¾à¨µ',
 'recentchangeslinked-feed' => 'ਸਬੰਧਤ ਤਬਦੀਲੀਆਂ',
-'recentchangeslinked-toolbox' => 'ਸਬੰਧਿਤ à¨¤à¨¬à¨¦à©\80ਲà©\80à¨\86à¨\82',
-'recentchangeslinked-title' => '"$1" à¨¨à¨¾à¨² à¨¸à¨¬à©°à¨§à¨¿à¨¤ à¨¤à¨¬à¨¦à©\80ਲà©\80à¨\86à¨\82',
-'recentchangeslinked-noresult' => 'à¨\9cà©\81à©\9cà©\87 à¨ªà©°à¨¨à¨¿à¨\86à¨\82 â\80\99ਤà©\87, à¨¦à¨¿à©±à¨¤à©\87 à¨¸à¨®à©\87à¨\82 â\80\99à¨\9a à¨\95à©\8bà¨\88 à¨¤à¨¬à¨¦à©\80ਲà©\80 ਨਹੀਂ ਹੋਈ।',
-'recentchangeslinked-summary' => 'à¨\87ਹ à¨¸à©\82à¨\9aà©\80 à¨\87ੱà¨\95 à¨\96ਾਸ à¨ªà©°à¨¨à©\87 à¨¨à¨¾à¨² à¨¸à¨¬à©°à¨§à¨¿à¨¤ à¨ªà©°à¨¨à¨¿à¨\86à¨\82 à¨\9cਾà¨\82 à¨\95ਿਸà©\87 à¨\96ਾਸ à¨¸à¨¼à©\8dਰà©\87ਣà©\80 à¨¦à©\87 à¨®à©\88à¨\82ਬਰਾà¨\82 à¨¦à©\87 à¨¹à¨¾à¨² à¨µà¨¿à©±à¨\9a à¨¹à©\8bà¨\88à¨\86à¨\82 à¨¤à¨¬à¨¦à©\80ਲà©\80à¨\86ਂ ਨੂੰ ਦਰਸਾਂਉਦੀ ਹੈ। [[Special:Watchlist|ਤੁਹਾਡੀ ਧਿਆਨਸੂਚੀ]] ਵਿੱਚ ਮੌਜੂਦ ਪੰਨੇ ਮੋਟੇ ਅੱਖਰਾਂ ਵਿੱਚ ਦਿਖਾਈ ਦੇਣਗੇ।',
+'recentchangeslinked-toolbox' => 'ਪੰਨà©\87 à¨¨à¨¾à¨² à¨¸à©°à¨¬à©°à¨§à¨¿à¨¤ à¨¬à¨¦à¨²à¨¾à¨µ',
+'recentchangeslinked-title' => '"$1" à¨¨à¨¾à¨² à¨¸à¨¬à©°à¨§à¨¿à¨¤ à¨¬à¨¦à¨²à¨¾à¨µ',
+'recentchangeslinked-noresult' => 'à¨\9cà©\81à©\9cà©\87 à¨ªà©°à¨¨à¨¿à¨\86à¨\82 â\80\99ਤà©\87, à¨¦à¨¿à©±à¨¤à©\87 à¨¸à¨®à©\87à¨\82 â\80\99à¨\9a à¨\95à©\8bà¨\88 à¨¬à¨¦à¨²à¨¾à¨µ ਨਹੀਂ ਹੋਈ।',
+'recentchangeslinked-summary' => 'à¨\87ਹ à¨¸à©\82à¨\9aà©\80 à¨\87ੱà¨\95 à¨µà¨¿à¨¸à¨¼à©\87ਸ਼ à¨ªà©°à¨¨à©\87 à¨¨à¨¾à¨² à¨¸à¨¬à©°à¨§à¨¿à¨¤ à¨ªà©°à¨¨à¨¿à¨\86à¨\82 à¨\9cਾà¨\82 à¨\95ਿਸà©\87 à¨µà¨¿à¨¸à¨¼à©\87ਸ਼ à¨¸à¨¼à©\8dਰà©\87ਣà©\80 à¨¦à©\87 à¨®à©\88à¨\82ਬਰਾà¨\82 à¨¦à©\87 à¨¹à¨¾à¨² â\80\98à¨\9a à¨¹à©\8bà¨\8f à¨¬à¨¦à¨²à¨¾à¨µà¨¾ਂ ਨੂੰ ਦਰਸਾਂਉਦੀ ਹੈ। [[Special:Watchlist|ਤੁਹਾਡੀ ਧਿਆਨਸੂਚੀ]] ਵਿੱਚ ਮੌਜੂਦ ਪੰਨੇ ਮੋਟੇ ਅੱਖਰਾਂ ਵਿੱਚ ਦਿਖਾਈ ਦੇਣਗੇ।',
 'recentchangeslinked-page' => 'ਪੰਨੇ ਦਾ ਨਾਮ:',
-'recentchangeslinked-to' => 'à¨\87ਸਦà©\87 à¨¬à¨¦à¨²à©\87 à¨\87ਸ à¨ªà©°à¨¨à©\87 à¨¨à¨¾à¨² à¨\9cà©\81à©\9cà©\87 à¨ªà©°à¨¨à¨¿à¨\86à¨\82 à¨µà¨¿à©±à¨\9a à¨¹à©\8bà¨\8f à¨¬à¨¦à¨²à¨¾à¨\85 à¨¦ਿਖਾਓ',
+'recentchangeslinked-to' => 'à¨\87ਸਦà©\87 à¨¬à¨¦à¨²à©\87 à¨\87ਸ à¨ªà©°à¨¨à©\87 à¨¨à¨¾à¨² à¨\9cà©\81à©\9cà©\87 à¨ªà©°à¨¨à¨¿à¨\86à¨\82 à¨µà¨¿à©±à¨\9a à¨¹à©\8bà¨\8f à¨¬à¨¦à¨²à¨¾à¨\85 à¨µਿਖਾਓ',
 
 # Upload
 'upload' => 'ਫ਼ਾਈਲ ਅੱਪਲੋਡ ਕਰੋ',
@@ -1322,7 +1383,7 @@ to upload files.',
 'filehist-thumb' => 'ਨਮੂਨਾ',
 'filehist-thumbtext' => '$1 ਦੇ ਸਮੇਂ ਦੇ ਸੰਸਕਰਨ ਦਾ ਅੰਗੂਠਾਕਾਰ ਪ੍ਰਤੀਰੂਪ',
 'filehist-nothumb' => 'ਕੋਈ ਨਮੂਨਾ-ਤਸਵੀਰ ਨਹੀਂ',
-'filehist-user' => 'ਮà©\88à¨\82ਬਰ',
+'filehist-user' => 'ਵਰਤà©\8bà¨\82à¨\95ਾਰ',
 'filehist-dimensions' => 'ਨਾਪ',
 'filehist-filesize' => 'ਫਾਇਲ ਆਕਾਰ',
 'filehist-comment' => 'ਟਿੱਪਣੀ',
@@ -1334,7 +1395,7 @@ to upload files.',
 'sharedupload' => 'ਇਹ ਫ਼ਾਈਲ $1 ਤੋਂ ਹੈ ਅਤੇ ਸ਼ਾਇਦ ਦੂਜੇ ਪ੍ਰੋਜੈਕਟਾਂ ਤੇ ਵਰਤੀ ਜਾ ਸਕਦੀ ਹੈ।',
 'sharedupload-desc-there' => 'ਇਹ ਫ਼ਾਈਲ $1 ਤੋਂ ਹੈ ਅਤੇ ਸ਼ਾਇਦ ਦੂਜੇ ਪ੍ਰੋਜੈਕਟਾਂ ਦੁਆਰਾ ਵਰਤੀ ਜਾ ਸਕਦੀ ਹੈ।
 ਜ਼ਿਆਦਾ ਜਾਣਕਾਰੀ ਲਈ ਮਿਹਰਬਾਨੀ ਕਰਕੇ [$2 ਫ਼ਾਈਲ ਦਾ ਵੇਰਵਾ ਸਫ਼ਾ] ਵੇਖੋ।',
-'sharedupload-desc-here' => 'à¨\87ਹ à¨«à¨¼à¨¾à¨\88ਲ $1 à¨¦à©\80 à¨¹à©\88 à¨\85ਤà©\87 à¨¹à©\8bਰ à¨ªà©\8dਰਾà¨\9cà©\88à¨\95à¨\9fਾà¨\82 à¨µà¨¿à¨\9a à¨µà©\80 à¨µà¨°à¨¤à©\80 à¨\9cਾ à¨¸à¨\95ਦà©\80 à¨¹à©\88 à¥¤ à¨\87ਸ [$2 à¨«à¨¼à¨¾à¨\88ਲ à¨¦à©\87 à¨µà©\87ਰਵਾ à¨¸à¨«à¨¼à©\87] à¨µà¨¿ਚ ਮੌਜੂਦ ਵੇਰਵਾ ਹੇਠ ਦਿਸ ਰਿਹਾ ਹੈ।',
+'sharedupload-desc-here' => 'à¨\87ਹ à¨«à¨¼à¨¾à¨\88ਲ $1 à¨¦à©\80 à¨¹à©\88 à¨\85ਤà©\87 à¨¹à©\8bਰ à¨ªà¨°à¨¿à¨¯à©\8bà¨\9cਨਾਵਾà¨\82 à¨µà¨¿à©±à¨\9a à¨µà©\80 à¨µà¨°à¨¤à©\80 à¨\9cਾ à¨¸à¨\95ਦà©\80 à¨¹à©\88 à¥¤ à¨\87ਸ [$2 à¨«à¨¼à¨¾à¨\88ਲ à¨¦à©\87 à¨µà©\87ਰਵਾ à¨ªà©°à¨¨à©\87] à¨µà¨¿à©±ਚ ਮੌਜੂਦ ਵੇਰਵਾ ਹੇਠ ਦਿਸ ਰਿਹਾ ਹੈ।',
 'sharedupload-desc-edit' => 'ਇਹ ਫ਼ਾਈਲ $1 ਤੋਂ ਹੈ ਅਤੇ ਸ਼ਾਇਦ ਦੂਜੇ ਪ੍ਰੋਜੈਕਟਾਂ ਦੁਆਰਾ ਵਰਤੀ ਜਾ ਸਕਦੀ ਹੈ।
 ਸ਼ਾਇਦ ਤੁਸੀਂ [$2 ਫ਼ਾਈਲ ਦੇ ਵੇਰਵੇ ਸਫ਼ੇ] ਤੇ ਇਸਦਾ ਵੇਰਵਾ ਬਦਲਣਾ ਚਾਹੋ।',
 'sharedupload-desc-create' => 'ਇਹ ਫ਼ਾਈਲ $1 ਤੋਂ ਹੈ ਅਤੇ ਸ਼ਾਇਦ ਦੂਜੇ ਪ੍ਰੋਜੈਕਟਾਂ ਦੁਆਰਾ ਵਰਤੀ ਜਾ ਸਕਦੀ ਹੈ।
@@ -1456,14 +1517,14 @@ to upload files.',
 'pager-older-n' => '{{PLURAL:$1|1 ਪੁਰਾਣਾ|$1 ਪੁਰਾਣੇ}}',
 
 # Book sources
-'booksources' => 'à¨\95ਿਤਾਬ ਸਰੋਤ',
-'booksources-search-legend' => 'à¨\95ਿਤਾਬ ਸਰੋਤ ਖੋਜੋ',
+'booksources' => 'ਪà©\81ਸਤà¨\95ਾà¨\82 à¨¦à©\87 ਸਰੋਤ',
+'booksources-search-legend' => 'ਪà©\81ਸਤà¨\95ਾà¨\82 à¨¦à©\87 ਸਰੋਤ ਖੋਜੋ',
 'booksources-go' => 'ਜਾਓ',
 'booksources-invalid-isbn' => 'ਦਿੱਤਾ ਗਿਆ ISBN ਸਹੀ ਨਹੀਂ ਲਗਦਾ, ਅਸਲੀ ਸਰੋਤ ਤੋਂ ਨਕਲ ਕਰਦੇ ਵਕਤ ਹੋਈਆਂ ਗ਼ਲਤੀਆਂ ਜਾਂਚੋ।',
 
 # Special:Log
-'specialloguserlabel' => 'ਯà©\82à¨\9c਼ਰ:',
-'speciallogtitlelabel' => 'à¨\9fਾà¨\87à¨\9fਲ:',
+'specialloguserlabel' => 'à¨\95ਰਤਾ:',
+'speciallogtitlelabel' => 'ਸਿਰਲà©\87à¨\96:',
 'log' => 'ਚਿੱਠੇ',
 'all-logs-page' => 'ਸਾਰੇ ਆਮ ਚਿੱਠੇ',
 'logempty' => 'ਚਿੱਠੇ ’ਚ ਮੇਲ ਖਾਂਦੀ ਕੋਈ ਚੀਜ਼ ਨਹੀਂ ਹੈ।',
@@ -1502,7 +1563,7 @@ to upload files.',
 'sp-deletedcontributions-contribs' => 'ਯੋਗਦਾਨ',
 
 # Special:LinkSearch
-'linksearch' => 'ਬਾਹਰà©\80 à¨²à¨¿à©°à¨\95',
+'linksearch' => 'ਬਾਹਰà©\80 à¨\95à©\9cà©\80 à¨\96à©\8bà¨\9cà©\8b',
 'linksearch-ns' => 'ਥਾਂ-ਨਾਮ:',
 'linksearch-ok' => 'ਖੋਜੋ',
 'linksearch-line' => '$2 ਵਿੱਚ $1 ਬਾਹਰੀ ਸਿਰਨਾਵਾਂ ਹੈ',
@@ -1522,22 +1583,18 @@ to upload files.',
 'activeusers-hidesysops' => 'ਐਡਮਨਿਸਟ੍ਰੇਟਰ ਲੁਕਾਓ',
 'activeusers-noresult' => 'ਕੋਈ ਮੈਂਬਰ ਨਹੀਂ ਲੱਭਿਆ।',
 
-# Special:Log/newusers
-'newuserlogpage' => 'ਬਣਾਏ ਖਾਤਿਆਂ ਦਾ ਚਿੱਠਾ',
-'newuserlogpagetext' => 'ਇਹ ਬਣੇ ਮੈਂਬਰਾਂ ਦਾ ਚਿੱਠਾ ਹੈ।',
-
 # Special:ListGroupRights
 'listgrouprights-group' => 'ਗਰੁੱਪ',
 'listgrouprights-rights' => 'ਹੱਕ',
 'listgrouprights-helppage' => 'Help:ਗਰੁੱਪ ਹੱਕ',
-'listgrouprights-members' => '(ਮà©\88à¨\82ਬਰਾਂ ਦੀ ਸੂਚੀ)',
+'listgrouprights-members' => '(ਵਰਤà©\8bà¨\82à¨\95ਾਰਾਂ ਦੀ ਸੂਚੀ)',
 'listgrouprights-addgroup-all' => 'ਸਾਰੇ ਗਰੁੱਪ ਜੋੜੋ',
 'listgrouprights-removegroup-all' => 'ਸਾਰੇ ਗਰੁੱਪ ਹਟਾਓ',
 
 # E-mail user
 'mailnologin' => 'ਕੋਈ ਭੇਜਣ ਐਡਰੈੱਸ ਨਹੀਂ',
 'mailnologintext' => 'ਦੂਜੇ ਮੈਂਬਰਾਂ ਨੂੰ ਈ-ਮੇਲ ਭੇਜਣ ਲਈ ਤੁਹਾਨੂੰ [[Special:UserLogin|ਲਾਗਇਨ]] ਹੋਣਾ ਅਤੇ ਆਪਣੀਆਂ [[Special:Preferences|ਪਸੰਦਾਂ]] ਵਿਚ ਇਕ ਸਹੀ ਈ-ਮੇਲ ਪਤਾ ਦੇਣਾ ਪਵੇਗਾ।',
-'emailuser' => 'à¨\87ਸ à¨®à©\88à¨\82ਬਰ ਨੂੰ ਈ-ਮੇਲ ਭੇਜੋ',
+'emailuser' => 'à¨\87ਸ à¨µà¨°à¨¤à©\8bà¨\82à¨\95ਾਰ ਨੂੰ ਈ-ਮੇਲ ਭੇਜੋ',
 'emailpage' => 'ਯੂਜ਼ਰ ਨੂੰ ਈਮੇਲ ਕਰੋ',
 'defemailsubject' => '{{SITENAME}} ਈਮੇਲ',
 'usermaildisabled' => 'ਮੈਂਬਰ ਈ-ਮੇਲ ਬੰਦ ਹੈ',
@@ -1571,8 +1628,8 @@ to upload files.',
 'watchnologin' => 'ਲਾਗਇਨ ਨਹੀਂ',
 'watchnologintext' => 'ਆਪਣੀ ਨਿਗਰਾਨੀ-ਲਿਸਟ ਵਿਚ ਫੇਰ-ਬਦਲ ਕਰਨ ਲਈ ਤੁਹਾਨੂੰ [[Special:UserLogin|ਲਾਗਇਨ]] ਕਰਨਾ ਪਵੇਗਾ।',
 'addwatch' => 'ਨਿਗਰਾਨੀ-ਲਿਸਟ ’ਚ ਜੋੜੋ',
-'addedwatchtext' => "ਸਫ਼ਾ \"[[:\$1]]\" à¨¤à©\81ਹਾਡà©\80 [[Special:Watchlist|ਨਿà¨\97ਰਾਨà©\80-ਲਿਸà¨\9f]] ’ਚ ਜੁੜ ਚੁੱਕਾ ਹੈ।
-à¨\87ਸ à¨\85ਤà©\87 à¨\87ਸਦà©\87 à¨\97ੱਲ-ਬਾਤ à¨¸à¨«à¨¼à©\87 â\80\99à¨\9a à¨¹à©\8bà¨\88à¨\86à¨\82 à¨¤à¨¬à¨¦à©\80ਲà©\80à¨\86à¨\82 à¨\93ਥà©\87 à¨µà¨\96ਾà¨\88 à¨¦à©\87ਣà¨\97à©\80à¨\86à¨\82 à¨\85ਤà©\87 à¨µà©\87à¨\96ਣ à¨¦à©\80 à¨¸à©\8cà¨\96 à¨²à¨\88 [[Special:RecentChanges|ਤਾà¨\9c਼ਾ à¨¤à¨¬à¨¦à©\80ਲà©\80à¨\86à¨\82 à¨¦à©\80 à¨²à¨¿à¨¸à¨\9f]] à¨µà¨¿à¨\9a à¨\87ਹ à¨¸à¨«à¨¼ਾ '''ਗੂੜ੍ਹਾ''' ਦਿਖਾਈ ਦੇਵੇਗਾ।",
+'addedwatchtext' => "ਪੰਨਾ \"[[:\$1]]\" à¨¤à©\81ਹਾਡà©\80 [[Special:Watchlist|ਧਿà¨\86ਨਸà©\82à¨\9aà©\80]] ’ਚ ਜੁੜ ਚੁੱਕਾ ਹੈ।
+à¨\87ਸ à¨\85ਤà©\87 à¨\87ਸਦà©\87 à¨\9aਰà¨\9aਾ à¨ªà©°à¨¨à©\87 â\80\99à¨\9a à¨¹à©\8bà¨\88à¨\86à¨\82 à¨¬à¨¦à¨²à©\80à¨\86à¨\82 à¨\93ਥà©\87 à¨µà¨\96ਾà¨\88 à¨¦à©\87ਣà¨\97à©\80à¨\86à¨\82 à¨\85ਤà©\87 à¨µà©\87à¨\96ਣ à¨¦à©\80 à¨¸à©\8cà¨\96 à¨²à¨\88 [[Special:RecentChanges|ਹਾਲ à¨¹à©\80 â\80\99à¨\9a à¨¹à©\8bà¨\88à¨\86à¨\82 à¨¬à¨¦à¨²à©\80à¨\86à¨\82]] à¨µà¨¿à©±à¨\9a à¨\87ਹ à¨ªà©°à¨¨ਾ '''ਗੂੜ੍ਹਾ''' ਦਿਖਾਈ ਦੇਵੇਗਾ।",
 'removewatch' => 'ਨਿਗਰਾਨੀ-ਲਿਸਟ ’ਚੋਂ ਹਟਾਓ',
 'removedwatchtext' => 'ਸਫ਼ਾ "[[:$1]]" [[Special:Watchlist|ਤੁਹਾਡੀ ਨਿਗਰਾਨੀ-ਲਿਸਟ]] ’ਚੋਂ ਹਟ ਚੁੱਕਾ ਹੈ।',
 'watch' => 'ਧਿਆਨ ਰੱਖੋ',
@@ -1585,7 +1642,7 @@ to upload files.',
 'watchlistcontains' => 'ਤੁਹਾਡੀ ਨਿਗਰਾਨੀ-ਲਿਸਟ ਵਿਚ $1 {{PLURAL:$1|ਸਫ਼ਾ ਹੈ|ਸਫ਼ੇ ਹਨ}}।',
 'wlnote' => "$3, $4 ਮੁਤਾਬਕ ਆਖ਼ਰੀ {{PLURAL:$2|ਘੰਟੇ|'''$2''' ਘੰਟਿਆਂ}} ਵਿਚ {{PLURAL:
 $1|ਤਬਦੀਲੀ ਹੋਈ|'''$1''' ਤਬਦੀਲੀਆਂ ਹੋਈਆਂ}}, ਹੇਠਾਂ ਵੇਖੋ।",
-'wlshowlast' => 'à¨\86à¨\96ਰà©\80 $1 à¨¦à¨¿à¨¨ $2 à¨\98à©°à¨\9fà©\87 $3 à¨µà¨\96ਾà¨\93',
+'wlshowlast' => 'ਪਿੱà¨\9bਲà©\87 $1 à¨\98à©°à¨\9fà©\87 $2 à¨¦à¨¿à¨¨ $3 à¨µà©\87à¨\96à©\8b',
 'watchlist-options' => 'ਧਿਆਨਸੂਚੀ ਦੇ ਇਖਤਿਆਰ',
 
 # Displayed when you click the "watch" button and it is in the process of watching
@@ -1596,6 +1653,8 @@ $1|ਤਬਦੀਲੀ ਹੋਈ|'''$1''' ਤਬਦੀਲੀਆਂ ਹੋਈਆ
 'enotif_lastvisited' => 'ਤੁਹਾਡੀ ਆਖ਼ਰੀ ਆਮਦ ਤੋਂ ਲੈ ਕੇ ਹੋਈਆਂ ਤਬਦੀਲੀਆਂ ਵੇਖਣ ਲਈ $1 ਵੇਖੋ।',
 'enotif_lastdiff' => 'ਇਸ ਤਬਦੀਲੀ ਨੂੰ ਵੇਖਣ ਲਈ $1 ਵੇਖੋ।',
 'enotif_anon_editor' => 'ਅਗਿਆਤ ਯੂਜ਼ਰ $1',
+'created' => 'ਬਣਾਇਆ',
+'changed' => 'ਬਦਲਿਆ',
 
 # Delete
 'deletepage' => 'ਪੇਜ ਹਟਾਓ',
@@ -1610,7 +1669,7 @@ $1|ਤਬਦੀਲੀ ਹੋਈ|'''$1''' ਤਬਦੀਲੀਆਂ ਹੋਈਆ
 'actionfailed' => 'ਕਾਰਵਾਈ ਨਾਕਾਮ',
 'deletedtext' => '"$1" ਮਿਟਾਇਆ ਜਾ ਚੁੱਕਾ ਹੈ।
 ਤਾਜ਼ੀਆਂ ਮਿਟਾਉਣਾਂ ਦੇ ਰਿਕਾਰਡ ਲਈ $2 ਵੇਖੋ।',
-'dellogpage' => 'ਮਿਟਾਉਣ ਦਾ ਚਿੱਠਾ',
+'dellogpage' => 'ਹਟਾਉਣ ਦਾ ਚਿੱਠਾ',
 'dellogpagetext' => 'ਹੇਠਾਂ ਸਭ ਤੋਂ ਤਾਜ਼ਾ ਮਿਟਾਉਣਾਂ ਦੀ ਲਿਸਟ ਹੈ।',
 'deletionlog' => 'ਮਿਟਾਉਣਾਂ ਦਾ ਚਿੱਠਾ',
 'deletecomment' => 'ਕਾਰਨ:',
@@ -1649,8 +1708,8 @@ $1|ਤਬਦੀਲੀ ਹੋਈ|'''$1''' ਤਬਦੀਲੀਆਂ ਹੋਈਆ
 'protect-text' => "ਇੱਥੇ ਸ਼ਾਇਦ ਤੁਸੀਂ ਸਫ਼ਾ '''$1''' ਦਾ ਸੁਰੱਖਿਆ ਦਰਜਾ ਵੇਖ ਅਤੇ ਬਦਲ ਸਕਦੇ ਹੋ।",
 'protect-default' => 'ਸਭ ਯੂਜ਼ਰ ਮਨਜ਼ੂਰ',
 'protect-fallback' => '"$1" ਅਧਿਕਾਰ ਲੋੜੀਦਾ ਹੈ',
-'protect-level-autoconfirmed' => 'ਨਵà©\87à¨\82 à¨¤à©\87 à¨\97਼à©\88ਰ-ਰà¨\9cਿਸà¨\9fਰ à¨¯à©\82à¨\9c਼ਰਾਂ ਉੱਤੇ ਪਾਬੰਦੀ',
-'protect-level-sysop' => 'à¨\95à©\87ਵਲ à¨ªà¨°à¨¸à¨¼à¨¾à¨¸à¨¼ਕ',
+'protect-level-autoconfirmed' => 'ਨਵà©\87à¨\82 à¨¤à©\87 à¨\97à©\88ਰ-ਰà¨\9cਿਸà¨\9fਰ à¨µà¨°à¨¤à©\8bà¨\82à¨\95ਾਰਾਂ ਉੱਤੇ ਪਾਬੰਦੀ',
+'protect-level-sysop' => 'à¨\95à©\87ਵਲ à¨ªà©\8dਰਬੰਧਕ',
 'protect-summary-cascade' => 'ਕਾਸਕੇਡਿੰਗ',
 'protect-cascade' => 'ਇਸ ਸਫ਼ੇ ਵਿਚ ਸ਼ਾਮਲ ਸਫ਼ੇ ਸੁਰੱਖਿਅਤ ਕਰੋ (ਕਾਸਕੇਡਿੰਗ ਸੁਰੱਖਿਆ)',
 'protect-cantedit' => 'ਤੁਸੀਂ ਇਸ ਸਫ਼ੇ ਦਾ ਸੁਰੱਖਿਆ ਦਰਜਾ ਨਹੀਂ ਬਦਲ ਸਕਦੇ ਕਿਉਂਕਿ ਤੁਹਾਨੂੰ ਇਸਨੂੰ ਸੋਧਣ ਦੀ ਇਜਾਜ਼ਤ ਨਹੀਂ ਹੈ।',
@@ -1688,8 +1747,8 @@ $1|ਤਬਦੀਲੀ ਹੋਈ|'''$1''' ਤਬਦੀਲੀਆਂ ਹੋਈਆ
 'undeleteviewlink' => 'ਵੇਖੋ',
 'undeletereset' => 'ਰੀ-ਸੈੱਟ',
 'undeletecomment' => 'ਟਿੱਪਣੀ:',
-'undelete-header' => 'ਤਾà¨\9c਼à©\87 à¨®à¨¿à¨\9fਾà¨\8f à¨\97à¨\8f à¨¸à¨«à¨¼ਿਆਂ ਲਈ [[Special:Log/
-delete|ਮਿà¨\9fਾà¨\89ਣਾà¨\82 ਦਾ ਚਿੱਠਾ]] ਵੇਖੋ।',
+'undelete-header' => 'ਤਾà¨\9c਼à©\87 à¨¹à¨\9fਾà¨\8f à¨\97à¨\8f à¨ªà©°à¨¨ਿਆਂ ਲਈ [[Special:Log/
+delete|ਹà¨\9fਾà¨\89ਣ ਦਾ ਚਿੱਠਾ]] ਵੇਖੋ।',
 'undelete-search-title' => 'ਮਿਟਾਏ ਹੋਏ ਸਫ਼ੇ ਖੋਜੋ',
 'undelete-search-box' => 'ਮਿਟਾਏ ਹੋਏ ਸਫ਼ੇ ਖੋਜੋ',
 'undelete-search-submit' => 'ਖੋਜੋ',
@@ -1709,7 +1768,7 @@ delete|ਮਿਟਾਉਣਾਂ ਦਾ ਚਿੱਠਾ]] ਵੇਖੋ।',
 'month' => 'ਇਸ (ਅਤੇ ਪਿਛਲੇ) ਮਹੀਨੇ ਤੋਂ :',
 'year' => 'ਇਸ (ਅਤੇ ਪਿਛਲੇ) ਸਾਲ ਤੋਂ :',
 
-'sp-contributions-newbies' => 'ਸਿਰਫ਼ à¨¨à¨µà©\87à¨\82 à¨®à©\88à¨\82ਬਰਾਂ ਦੇ ਯੋਗਦਾਨ ਵਖਾਓ',
+'sp-contributions-newbies' => 'ਸਿਰਫ਼ à¨¨à¨µà©\87à¨\82 à¨µà¨°à¨¤à©\8bà¨\82à¨\95ਾਰਾਂ ਦੇ ਯੋਗਦਾਨ ਵਖਾਓ',
 'sp-contributions-newbies-sub' => 'ਨਵੇਂ ਅਕਾਊਂਟਾਂ ਲਈ',
 'sp-contributions-blocklog' => 'ਪਾਬੰਦੀ ਚਿੱਠਾ',
 'sp-contributions-uploads' => 'ਅਪਲੋਡ',
@@ -1720,8 +1779,8 @@ delete|ਮਿਟਾਉਣਾਂ ਦਾ ਚਿੱਠਾ]] ਵੇਖੋ।',
 'sp-contributions-blocked-notice-anon' => 'ਇਹ IP ਪਤਾ ਇਸ ਵੇਲ਼ੇ ਪਾਬੰਦੀਸ਼ੁਦਾ ਹੈ।
 ਪਾਬੰਦੀ ਚਿੱਠੇ ਦਾ ਤਾਜ਼ਾ ਦਾਖ਼ਲਾ ਹਵਾਲੇ ਲਈ ਹੇਠਾਂ ਦਿੱਤਾ ਗਿਆ ਹੈ:',
 'sp-contributions-search' => 'ਯੋਗਦਾਨ ਖੋਜੋ',
-'sp-contributions-username' => 'IP à¨ªà¨¤à¨¾ à¨\9cਾà¨\82 à¨®à©\88à¨\82ਬਰ ਨਾਮ:',
-'sp-contributions-toponly' => 'à¨\95à©\87ਵਲ à¨\89ਨà©\8dਹਾà¨\82 à¨¸à©°à¨ªà¨¾à¨¦à¨¨à¨¾à¨\82 à¨¨à©\82à©° à¨¦à¨¿à¨\96ਾਵਾà¨\82 ਜੋ ਨਵੀਨਤਮ ਸੰਸ਼ੋਧਨ ਹਨ',
+'sp-contributions-username' => 'IP à¨ªà¨¤à¨¾ à¨\9cਾà¨\82 à¨µà¨°à¨¤à©\8bà¨\82à¨\95ਾਰਨਾਮ:',
+'sp-contributions-toponly' => 'à¨\95à©\87ਵਲ à¨\89ਨà©\8dਹਾà¨\82 à¨¸à©°à¨ªà¨¾à¨¦à¨¨à¨¾à¨\82 à¨¨à©\82à©° à¨µà¨\96ਾà¨\93 ਜੋ ਨਵੀਨਤਮ ਸੰਸ਼ੋਧਨ ਹਨ',
 'sp-contributions-submit' => 'ਖੋਜੋ',
 
 # What links here
@@ -1768,7 +1827,7 @@ delete|ਮਿਟਾਉਣਾਂ ਦਾ ਚਿੱਠਾ]] ਵੇਖੋ।',
 'unblocked-range' => '$1 ਪਾਬੰਦੀ ਮੁਕਤ ਹੋ ਚੁੱਕੀ ਹੈ',
 'unblocked-id' => 'ਪਾਬੰਦੀ $1 ਹਟ ਚੁੱਕੀ ਹੈ',
 'blocklist' => 'ਪਾਬੰਦੀਸ਼ੁਦਾ ਮੈਂਬਰ',
-'ipblocklist' => 'ਪਾਬੰਦà©\80ਸ਼à©\81ਦਾ à¨®à©\88à¨\82ਬਰ',
+'ipblocklist' => 'ਪਾਬੰਦà©\80ਸ਼à©\81ਦਾ à¨µà¨°à¨¤à©\8bà¨\82à¨\95ਾਰ',
 'ipblocklist-legend' => 'ਪਾਬੰਦੀਸ਼ੁਦਾ ਮੈਂਬਰ ਲੱਭੋ',
 'blocklist-userblocks' => 'ਖਾਤਾ ਪਾਬੰਦੀਆਂ ਲੁਕਾਓ',
 'blocklist-tempblocks' => 'ਆਰਜ਼ੀ ਪਾਬੰਦੀਆਂ ਲੁਕਾਓ',
@@ -1830,7 +1889,7 @@ delete|ਮਿਟਾਉਣਾਂ ਦਾ ਚਿੱਠਾ]] ਵੇਖੋ।',
 ਮਿਹਰਬਾਨੀ ਕਰਕੇ ਕੋਈ ਹੋਰ ਨਾਮ ਚੁਣੋ।',
 'movedto' => 'ਮੂਵ ਕੀਤਾ',
 'movepage-page-moved' => 'ਸਫ਼ਾ $1 ਨੂੰ $2 ’ਤੇ ਭੇਜਿਆ ਜਾ ਚੁੱਕਾ ਹੈ।',
-'movelogpage' => 'ਸਿਰਲà©\87à¨\96 à¨¬à¨¦à¨²à©\80 ਦਾ ਚਿੱਠਾ',
+'movelogpage' => 'ਸਥਾਨਾà¨\82ਤਰਣ ਦਾ ਚਿੱਠਾ',
 'movereason' => 'ਕਾਰਨ:',
 'revertmove' => 'ਰੱਦ ਕਰੋ',
 'delete_and_move' => 'ਹਟਾਓ ਅਤੇ ਮੂਵ ਕਰੋ',
@@ -1849,7 +1908,7 @@ delete|ਮਿਟਾਉਣਾਂ ਦਾ ਚਿੱਠਾ]] ਵੇਖੋ।',
 # Namespace 8 related
 'allmessages' => 'ਸਿਸਟਮ ਸੁਨੇਹੇ',
 'allmessagesname' => 'ਨਾਮ',
-'allmessagesdefault' => 'ਡਿਫਾਲà¨\9f à¨\9fà©\88à¨\95ਸà¨\9f',
+'allmessagesdefault' => 'ਡਿਫਾਲà¨\9f à¨ªà¨¾à¨ ',
 'allmessagescurrent' => 'ਮੌਜੂਦਾ ਟੈਕਸਟ',
 'allmessages-filter-legend' => 'ਛਾਨਣਾ',
 'allmessages-filter-all' => 'ਸਭ',
@@ -1874,10 +1933,10 @@ delete|ਮਿਟਾਉਣਾਂ ਦਾ ਚਿੱਠਾ]] ਵੇਖੋ।',
 
 # Import log
 'importlogpage' => 'ਇੰਪੋਰਟ ਲਾਗ',
-'import-logentry-upload-detail' => '$1 à¨°à©\80ਵਿà¨\9c਼ਨ',
+'import-logentry-upload-detail' => '$1 ਰੀਵਿਜਨ',
 
 # Tooltip help for the actions
-'tooltip-pt-userpage' => 'ਤà©\81ਹਾਡਾ à¨®à©\88à¨\82ਬਰ ਪੰਨਾ',
+'tooltip-pt-userpage' => 'ਤà©\81ਹਾਡਾ à¨µà¨°à¨¤à©\8bà¨\82à¨\95ਾਰ ਪੰਨਾ',
 'tooltip-pt-mytalk' => 'ਤੁਹਾਡਾ ਚਰਚਾ ਪੰਨਾ',
 'tooltip-pt-preferences' => 'ਤੁਹਾਡੀਆਂ ਪਸੰਦਾਂ',
 'tooltip-pt-watchlist' => 'ਓਹਨਾਂ ਪੰਨਿਆਂ ਦੀ ਸੂਚੀ ਜੋ ਤੁਸੀਂ ਤਬਦੀਲੀਆਂ ਲਈ ਵੇਖ ਰਹੇ ਹੋ',
@@ -1905,31 +1964,31 @@ delete|ਮਿਟਾਉਣਾਂ ਦਾ ਚਿੱਠਾ]] ਵੇਖੋ।',
 'tooltip-n-mainpage-description' => 'ਮੁੱਖ ਪੰਨੇ ’ਤੇ ਜਾਓ',
 'tooltip-n-portal' => 'ਪਰਿਯੋਜਨਾ ਬਾਰੇ, ਤੁਸੀਂ ਕੀ ਕਰ ਸਕਦੇ ਹੋ, ਕਿੱਥੇ ਕੁਝ ਲੱਭਣਾ ਹੈ',
 'tooltip-n-currentevents' => 'ਮੌਜੂਦਾ ਸਮਾਗਮ ਬਾਰੇ ਪਿਛਲੀ ਜਾਣਕਾਰੀ ਲੱਭੋ',
-'tooltip-n-recentchanges' => 'ਵਿਕੀ ’ਚ ਤਾਜ਼ਾ ਤਬਦੀਲੀਆਂ ਦੀ ਸੂਚੀ',
+'tooltip-n-recentchanges' => 'ਵਿਕੀ ਵਿੱਚ ਹਾਲ ’ਚ ਹੋਈਆਂ ਬਦਲੀਆਂ ਦੀ ਸੂਚੀ',
 'tooltip-n-randompage' => 'ਇੱਕ ਰਲਵਾਂ ਪੰਨਾ ਲੋਡ ਕਰੋ',
 'tooltip-n-help' => 'ਖੋਜਣ ਲਈ ਥਾਂ',
 'tooltip-t-whatlinkshere' => 'ਵਿਕੀ ਦੇ ਸਾਰੇ ਪੰਨਿਆਂ ਦੀ ਸੂਚੀ, ਜੋ ਇੱਥੇ ਜੋੜਦੇ ਹਨ',
 'tooltip-t-recentchangeslinked' => 'ਇਸ ਪੰਨੇ ਤੋਂ ਲਿੰਕ ਕੀਤੇ ਪੰਨਿਆਂ ਵਿੱਚ ਤਾਜ਼ਾ ਤਬਦੀਲੀਆਂ',
 'tooltip-feed-atom' => 'ਇਸ ਪੰਨੇ ਦੀ ਐਟਮ ਫ਼ੀਡ',
-'tooltip-t-contributions' => 'à¨\87ਸ à¨®à©\88à¨\82ਬਰ ਦੇ ਯੋਗਦਾਨ ਦੀ ਸੂਚੀ',
-'tooltip-t-emailuser' => 'à¨\87ਸ à¨®à©\88à¨\82ਬਰ ਨੂੰ ਈ-ਮੇਲ ਭੇਜੋ',
+'tooltip-t-contributions' => 'à¨\87ਸ à¨µà¨°à¨¤à©\8bà¨\82à¨\95ਾਰ ਦੇ ਯੋਗਦਾਨ ਦੀ ਸੂਚੀ',
+'tooltip-t-emailuser' => 'à¨\87ਸ à¨µà¨°à¨¤à©\8bà¨\82à¨\95ਾਰ ਨੂੰ ਈ-ਮੇਲ ਭੇਜੋ',
 'tooltip-t-upload' => 'ਚਿੱਤਰ ਜਾਂ ਮੀਡੀਆ ਫਾਈਲਾਂ ਅੱਪਲੋਡ ਕਰੋ',
-'tooltip-t-specialpages' => 'ਸਾਰà©\87 à¨\96ਾਸ ਪੰਨਿਆਂ ਦੀ ਸੂਚੀ',
+'tooltip-t-specialpages' => 'ਸਾਰà©\87 à¨µà¨¿à¨¸à¨¼à©\87ਸ਼ ਪੰਨਿਆਂ ਦੀ ਸੂਚੀ',
 'tooltip-t-print' => 'ਇਹ ਪੰਨੇ ਦਾ ਛਪਣਯੋਗ ਵਰਜਨ',
 'tooltip-t-permalink' => 'ਪੰਨੇ ਦੇ ਇਸ ਰੀਵਿਜਨ ਲਈ ਪੱਕਾ ਲਿੰਕ',
 'tooltip-ca-nstab-main' => 'ਸਮੱਗਰੀ ਪੰਨਾ ਵੇਖੋ',
-'tooltip-ca-nstab-user' => 'ਮà©\88à¨\82ਬਰ ਪੰਨਾ ਵੇਖੋ',
+'tooltip-ca-nstab-user' => 'ਵਰਤà©\8bà¨\82à¨\95ਾਰ ਪੰਨਾ ਵੇਖੋ',
 'tooltip-ca-nstab-media' => 'ਮੀਡਿਆ ਪੇਜ ਵੇਖੋ',
-'tooltip-ca-nstab-special' => 'à¨\87ਹ à¨\96ਾਸ ਪੰਨਾ ਹੈ, ਤੁਸੀਂ ਇਸ ਪੰਨੇ ਨੂੰ ਬਦਲ ਨਹੀਂ ਸਕਦੇ।',
+'tooltip-ca-nstab-special' => 'à¨\87ਹ à¨µà¨¿à¨¸à¨¼à©\87ਸ਼ ਪੰਨਾ ਹੈ, ਤੁਸੀਂ ਇਸ ਪੰਨੇ ਨੂੰ ਬਦਲ ਨਹੀਂ ਸਕਦੇ।',
 'tooltip-ca-nstab-project' => 'ਪਰਿਯੋਜਨਾ ਪੰਨਾ ਵੇਖੋ',
 'tooltip-ca-nstab-image' => 'ਫ਼ਾਈਲ ਪੰਨਾ ਵੇਖੋ',
 'tooltip-ca-nstab-mediawiki' => 'ਸਿਸਟਮ ਸੁਨੇਹੇ ਵੇਖੋ',
 'tooltip-ca-nstab-template' => 'ਸਾਂਚਾ ਵੇਖੋ',
 'tooltip-ca-nstab-help' => 'ਮੱਦਦ ਪੇਜ ਵੇਖੋ',
 'tooltip-ca-nstab-category' => 'ਸ਼੍ਰੇਣੀ ਪੰਨਾ ਵੇਖੋ',
-'tooltip-minoredit' => 'à¨\87ਸ â\80\99ਤà©\87 à¨¬à¨¤à©\8cਰ à¨\9bà©\8bà¨\9fà©\80 à¨¤à¨¬à¨¦à©\80ਲà©\80 ਨਿਸ਼ਾਨ ਲਾਓ',
+'tooltip-minoredit' => 'à¨\87ਸ â\80\99ਤà©\87 à¨¬à¨¤à©\8cਰ à¨\9bà©\8bà¨\9fਾ à¨¬à¨¦à¨²à¨¾à¨µ ਨਿਸ਼ਾਨ ਲਾਓ',
 'tooltip-save' => 'ਆਪਣੀਆਂ ਤਬਦੀਲੀਆਂ ਸਾਂਭੋ',
-'tooltip-preview' => 'à¨\86ਪਣà©\80 à¨¤à¨¬à¨¦à©\80ਲà©\80 ਦੀ ਝਲਕ ਵੇਖੋ, ਸਾਂਭਣ ਤੋਂ ਪਹਿਲਾਂ ਇਹ ਵਰਤੋਂ!',
+'tooltip-preview' => 'à¨\86ਪਣà©\87 à¨¬à¨¦à¨²à¨¾à¨µ ਦੀ ਝਲਕ ਵੇਖੋ, ਸਾਂਭਣ ਤੋਂ ਪਹਿਲਾਂ ਇਹ ਵਰਤੋਂ!',
 'tooltip-diff' => 'ਤੁਹਾਡੇ ਦੁਆਰਾ ਲਿਖਤ ਵਿੱਚ ਕੀਤੀਆਂ ਤਬਦੀਲੀਆਂ ਵਖਾਉਂਦਾ ਹੈ',
 'tooltip-compareselectedversions' => 'ਇਸ ਪੰਨੇ ਦੇ ਦੋ ਚੁਣੇ ਹੋਏ ਸੋਧਾਂ ਵਿੱਚ ਫ਼ਰਕ ਵੇਖੋ',
 'tooltip-watch' => 'ਇਸ ਪੰਨੇ ਨੂੰ ਆਪਣੀ ਧਿਆਨਸੂਚੀ ਵਿੱਚ ਪਾਓ',
@@ -1937,15 +1996,15 @@ delete|ਮਿਟਾਉਣਾਂ ਦਾ ਚਿੱਠਾ]] ਵੇਖੋ।',
 'tooltip-watchlistedit-raw-submit' => 'ਨਿਗਰਾਨੀ-ਲਿਸਟ ਨਵੀਂ ਕਰੋ',
 'tooltip-upload' => 'ਅੱਪਲੋਡ ਸਟਾਰਟ ਕਰੋ',
 'tooltip-rollback' => "''ਵਾਪਸ ਮੋੜੋ'' ਇੱਕ ਹੀ ਕਲਿੱਕ ਨਾਲ ਆਖਰੀ ਯੋਗਦਾਨ ਨੂੰ ਰੱਦ ਕਰ ਦਿੰਦਾ ਹੈ",
-'tooltip-undo' => '"à¨\89ਧà©\87à©\9cਨਾ" à¨\87ਸ à¨¤à¨¬à¨¦à©\80ਲà©\80 ਨੂੰ ਰੱਦ ਕਰਕੇ ਸੋਧ ਫ਼ਾਰਮ ਨੂੰ ਝਲਕ ਦੇ ਸ਼ੈਲੀ ਵਿੱਚ ਦਿਖਾਉਂਦਾ ਹੈ।
-à¨\87à©°à¨\9d "ਸਾਰ" à¨µà¨¿à©±à¨\9a à¨¤à¨¬à¨¦à©\80ਲà©\80 ਨਕਾਰਨ ਦਾ ਕਾਰਨ ਲਿਖਿਆ ਜਾ ਸਕਦਾ ਹੈ।',
+'tooltip-undo' => '"à¨\89ਧà©\87à©\9cਨਾ" à¨\87ਸ à¨¬à¨¦à¨²à¨¾à¨µ ਨੂੰ ਰੱਦ ਕਰਕੇ ਸੋਧ ਫ਼ਾਰਮ ਨੂੰ ਝਲਕ ਦੇ ਸ਼ੈਲੀ ਵਿੱਚ ਦਿਖਾਉਂਦਾ ਹੈ।
+à¨\87à©°à¨\9d "ਸਾਰ" à¨µà¨¿à©±à¨\9a à¨¬à¨¦à¨²à¨¾à¨µ ਨਕਾਰਨ ਦਾ ਕਾਰਨ ਲਿਖਿਆ ਜਾ ਸਕਦਾ ਹੈ।',
 'tooltip-preferences-save' => 'ਪਸੰਦਾਂ ਸਾਂਭੋ',
 'tooltip-summary' => 'ਸੰਖੇਪ ਸਾਰ ਦਰਜ ਕਰੋ',
 
 # Attribution
 'lastmodifiedatby' => 'ਇਹ ਸਫ਼ਾ ਆਖ਼ਰੀ ਵਾਰ $1 ਨੂੰ $2 ’ਤੇ $3 ਨੇ ਸੋਧਿਆ ਸੀ।',
 'others' => 'ਹੋਰ',
-'siteusers' => '{{SITENAME}} ਯੂਜ਼ਰ $1',
+'siteusers' => '{{SITENAME}} {{PLURAL:$2|ਵਰਤੋਂਕਾਰ|ਵਰਤੋਂਕਾਰਾਂ}} $1',
 'creditspage' => 'ਪੇਜ ਮਾਣ',
 
 # Spam protection
@@ -1953,6 +2012,7 @@ delete|ਮਿਟਾਉਣਾਂ ਦਾ ਚਿੱਠਾ]] ਵੇਖੋ।',
 
 # Info page
 'pageinfo-header-edits' => 'ਸੋਧਾਂ ਦਾ ਅਤੀਤ',
+'pageinfo-article-id' => 'ਪੰਨਾ ਆਈ.ਡੀ',
 'pageinfo-watchers' => 'ਸਫ਼ੇ ’ਤੇ ਨਜ਼ਰ ਰੱਖਣ ਵਾਲਿਆਂ ਦੀ ਗਿਣਤੀ',
 'pageinfo-edits' => 'ਕੁੱਲ ਸੋਧਾਂ',
 
@@ -1964,17 +2024,17 @@ delete|ਮਿਟਾਉਣਾਂ ਦਾ ਚਿੱਠਾ]] ਵੇਖੋ।',
 'skinname-simple' => 'ਸੈਂਪਲ',
 
 # Browsing diffs
-'previousdiff' => 'â\86\90 à¨\87ਸ à¨¤à©\8bà¨\82 à¨ªà©\81ਰਾਣà©\80 à¨¤à¨¬à¨¦à©\80ਲà©\80',
-'nextdiff' => 'ਤਾà¨\9c਼ਾ à¨¸à©°à¨ªà¨¾à¨¦à¨¨ â\86\92',
+'previousdiff' => 'â\86\90 à¨\87ਸ à¨¤à©\8bà¨\82 à¨ªà©\81ਰਾਣਾ à¨¬à¨¦à¨²à¨¾à¨µ',
+'nextdiff' => 'ਤਾਜਾ ਸੰਪਾਦਨ →',
 
 # Media information
 'thumbsize' => 'ਥੰਮਨੇਲ ਆਕਾਰ:',
-'widthheightpage' => '$1 × $2, $3 ਪੇਜ਼',
+'widthheightpage' => '$1 × $2, $3 {{PLURAL:$3|ਪੰਨਾ|ਪੰਨੇ}}',
 'file-info' => 'ਫਾਇਲ ਆਕਾਰ: $1, MIME ਕਿਸਮ: $2',
 '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' => 'ਪੂਰਾ ਰੈਜੋਲੇਸ਼ਨ',
 
 # Special:NewFiles
 'newimages' => 'ਨਵੀਆਂ ਫ਼ਾਈਲਾਂ ਦੀ ਗੈਲਰੀ',
@@ -2032,6 +2092,11 @@ delete|ਮਿਟਾਉਣਾਂ ਦਾ ਚਿੱਠਾ]] ਵੇਖੋ।',
 'exif-gpsspeed-k' => 'ਕਿਲੋਮੀਟਰ ਪ੍ਰਤੀ ਘੰਟਾ',
 'exif-gpsspeed-m' => 'ਮੀਲ ਪ੍ਰਤੀ ਘੰਟਾ',
 
+'exif-iimcategory-war' => 'ਯੁੱਧ, ਸੰਘਰਸ਼ ਅਤੇ ਅਸ਼ਾਂਟੀ',
+'exif-iimcategory-wea' => 'ਮੌਸਮ',
+
+'exif-urgency-normal' => 'ਸਧਾਰਨ ($1)',
+
 # External editor support
 'edit-externally' => 'ਬਾਹਰੀ ਐਪਲੀਕੇਸ਼ਨ ਵਰਤਦੇ ਹੋਏ ਇਸ ਫ਼ਾਈਲ ਨੂੰ ਸੰਪਾਦਨ ਕਰੋ।',
 'edit-externally-help' => '(ਜ਼ਿਆਦਾ ਜਾਣਕਾਰੀ ਲਈ [//www.mediawiki.org/wiki/Manual:External_editors setup instructions] ਵੇਖੋ)',
@@ -2040,6 +2105,7 @@ delete|ਮਿਟਾਉਣਾਂ ਦਾ ਚਿੱਠਾ]] ਵੇਖੋ।',
 'watchlistall2' => 'ਸਭ',
 'namespacesall' => 'ਸਭ',
 'monthsall' => 'ਸਭ',
+'limitall' => 'ਸਭ',
 
 # E-mail address confirmation
 'confirmemail' => 'ਈਮੇਲ ਐਡਰੈੱਸ ਪੁਸ਼ਟੀ',
@@ -2083,12 +2149,14 @@ delete|ਮਿਟਾਉਣਾਂ ਦਾ ਚਿੱਠਾ]] ਵੇਖੋ।',
 'livepreview-ready' => 'ਲੋਡ ਕੀਤਾ ਜਾ ਰਿਹਾ ਹੈ...ਤਿਆਰ!',
 
 # Watchlist editor
+'watchlistedit-normal-title' => 'ਧਿਆਨਸੂਚੀ ਬਦਲੋ',
 'watchlistedit-raw-titles' => 'ਟਾਇਟਲ:',
+'watchlistedit-raw-submit' => 'ਧਿਆਨਸੂਚੀ ਨੂੰ ਅਪਡੇਟ ਕਰੋ',
 'watchlistedit-raw-added' => '{{PLURAL:$1|1 title was|$1 titles were}} ਸ਼ਾਮਲ:',
 'watchlistedit-raw-removed' => '{{PLURAL:$1|1 title was|$1 titles were}} ਹਟਾਓ:',
 
 # Watchlist editing tools
-'watchlisttools-view' => 'ਮà©\8cà¨\95à©\87 à¨®à©\81ਤਾਬà¨\95 à¨¤à¨¬à¨¦à©\80ਲà©\80à¨\86à¨\82 ਵੇਖੋ',
+'watchlisttools-view' => 'à¨\86ਧਾਰਿਤ à¨¬à¨¦à¨²à¨¾à¨µ ਵੇਖੋ',
 'watchlisttools-edit' => 'ਧਿਆਨਸੂਚੀ ਵੇਖੋ ’ਤੇ ਸੰਪਾਦਨ ਕਰੋ',
 'watchlisttools-raw' => 'ਕੱਚੀ ਧਿਆਨਸੂਚੀ ਸੰਪਾਦਨ ਕਰੋ',
 
@@ -2097,10 +2165,16 @@ delete|ਮਿਟਾਉਣਾਂ ਦਾ ਚਿੱਠਾ]] ਵੇਖੋ।',
 
 # Special:Version
 'version' => 'ਵਰਜਨ',
+'version-other' => 'ਹੋਰ',
+
+# Special:FilePath
+'filepath-page' => 'ਫਾਈਲ:',
+'filepath-submit' => 'ਜਾਓ',
 
 # Special:SpecialPages
-'specialpages' => 'à¨\96ਾਸ ਪੰਨੇ',
+'specialpages' => 'ਵਿਸ਼à©\87ਸ਼ ਪੰਨੇ',
 'specialpages-group-login' => 'ਲਾਗਇਨ / ਖਾਤਾ ਬਣਾਓ',
+'specialpages-group-users' => 'ਵਰਤੋਂਕਾਰਾਂ ਅਤੇ ਅਧਿਕਾਰ',
 
 # Special:BlankPage
 'blankpage' => 'ਖ਼ਾਲੀ ਸਫ਼ਾ',
@@ -2117,12 +2191,26 @@ delete|ਮਿਟਾਉਣਾਂ ਦਾ ਚਿੱਠਾ]] ਵੇਖੋ।',
 
 # Special:Tags
 'tag-filter' => '[[Special:Tags|ਟੈਗ]] ਛਾਨਣੀ:',
+'tags-tag' => 'ਟੈਗ ਦਾ ਨਾਮ',
+'tags-edit' => 'ਸੰਪਾਦਨ',
 
 # HTML forms
 'htmlform-submit' => 'ਭੇਜੋ',
 'htmlform-reset' => 'ਬਦਲਾਅ ਵਾਪਸ ਲਵੋ',
 'htmlform-selectorother-other' => 'ਹੋਰ',
 
+# New logging system
+'logentry-move-move' => "$1 ਨੇ $3 ਪੰਨੇ $4 'ਤੇ ਸਥਾਨਾਂਤਰਿਤ ਕੀਤਾ",
+'logentry-newusers-newusers' => 'ਮੈਂਬਰ ਖਾਤਾ $1 ਬਣਾਇਆ ਗਿਆ',
+'logentry-newusers-create' => 'ਵਰਤੋਂਕਾਰ ਖਾਤਾ $1 ਬਣਾਇਆ ਗਿਆ',
+'logentry-newusers-create2' => 'ਵਰਤੋਂਕਾਰ ਖਾਤਾ $3 $1 ਦੁਆਰਾ ਬਣਾਇਆ ਗਿਆ ਸੀ',
+'rightsnone' => '(ਕੋਈ ਨਹੀਂ)',
+
+# Feedback
+'feedback-subject' => 'ਵਿਸ਼ਾ:',
+'feedback-message' => 'ਸੁਨੇਹਾ:',
+'feedback-cancel' => 'ਰੱਦ ਕਰੋ',
+
 # Search suggestions
 'searchsuggest-search' => 'ਖੋਜ',
 
index 8ed1153..b644558 100644 (file)
@@ -600,7 +600,6 @@ Maliari meng i-\"cut-n-paste\" ing sinulat mu king metung a text file, at i-save
 'template-protected' => '(protektadu)',
 'template-semiprotected' => '(maki dakeng protektadu)',
 'hiddencategories' => 'Kayabe ya ing bulung a ini king/karing {{PLURAL:$1|1 makasalikut a kategoriya|$1 makasalikut a kategoriya}}:',
-'nocreatetitle' => 'Maki angganan (limitadu) ing pamangawang bulung',
 'nocreatetext' => 'Lilimitan ning {{SITENAME}} ing pamangawa kareng bayung bulung.
 Malyari kang magbalik at mag-edit king bulung a atyu na, o makapag[[Special:UserLogin|log in ka at maglalang account]].',
 'nocreate-loggedin' => 'Ala kang paintulut a maglalang bayung bulung king {{SITENAME}}.',
@@ -951,11 +950,12 @@ Nung ibie me, magamit ya bang kilalanan ing kekang ambag.',
 'right-userrights-interwiki' => 'I-edit la reng katulirang talagamit (user rights) da reng talagamit kareng aliwang karinan a wiki',
 'right-siteadmin' => 'Isara ya ampong ibusni ing database',
 
+# Special:Log/newusers
+'newuserlogpage' => "Tala ning pamaglalang talagamit (''User creation log'')",
+
 # User rights log
 'rightslog' => 'Tala da reng katulirang talagamit (user rights log)',
 'rightslogtext' => 'Ini tala de reng miyalilan king katulirang talagamit (user rights).',
-'rightslogentry' => 'miyalilan ya ing grupu nung nu ya kayanib i $1 manibat king $2 paras king $3',
-'rightsnone' => '(ala)',
 
 # Associated actions - in the sentence "You do not have permission to X"
 'action-edit' => 'i-edit/alilan ya ing bulung a ini',
@@ -1323,9 +1323,6 @@ Also see [[Special:WantedCategories|wanted categories]].',
 'listusers-submit' => 'Pakit',
 'listusers-noresult' => 'Alang meyakit a talagamit.',
 
-# Special:Log/newusers
-'newuserlogpage' => "Tala ning pamaglalang talagamit (''User creation log'')",
-
 # Special:ListGroupRights
 'listgrouprights' => 'Katuliran da reng grupung talagamit (user group rights)',
 'listgrouprights-summary' => 'Ing makatuki tala (list) de reng grupung talagamit a mituldu kening wiki, ampo reng karelang katuliran king pamaglub (access rights). Ating karagdagang impormasiun tungkul king katuliran ning balang metung [[{{MediaWiki:Listgrouprights-helppage}}|keni]].',
@@ -1419,6 +1416,8 @@ Ba mong ayalilan deng pakatuldu king kekang tala ring babanten (watchlist settin
 
 Keni ka magparalang puna/komentu at maniad karagdagang saup:
 {{canonicalurl:{{MediaWiki:Helppage}}}}',
+'created' => 'melalang',
+'changed' => 'miyalilan',
 
 # Delete
 'deletepage' => 'Buran ya ing bulung',
@@ -2346,5 +2345,6 @@ Mayari/mapasu ya ining confirmation code keng $4.',
 # New logging system
 'revdelete-restricted' => 'ipairal la reng limitasiun kareng sysop',
 'revdelete-unrestricted' => 'ilako la reng makabawal kareng sysops',
+'rightsnone' => '(ala)',
 
 );
index 76797a9..e22c428 100644 (file)
@@ -520,11 +520,12 @@ Léginde : ({{MediaWiki:Cur}}) = différinches aveuc el vérchon à ch'momint-ch
 # Preferences page
 'preferences' => 'Préférinches',
 'mypreferences' => 'Mes préférinches',
+'changepassword' => "Canger ch'mot d'passe",
 'timezoneregion-europe' => 'Urope',
 'youremail' => 'Imèle:',
 'username' => "Nom d'uzeu:",
 'uid' => 'ID dech uzeu:',
-'prefs-memberingroups' => 'Mimbe éd {{PLURAL:$1|groupe|groupes}}:',
+'prefs-memberingroups' => '{{GENDER:$2|Mimbe}}  {{PLURAL:$1|du groupe|des groupes}}:',
 'yourrealname' => 'Vrai nom:',
 'yourlanguage' => 'Langache:',
 'badsiglength' => 'Vote signature est gramint longue.
@@ -540,6 +541,8 @@ Ale doét mie éte pu longue éq $1 {{PLURAL:$1|caracter|caractéres}}.',
 'userrights-groupsmember' => 'Mimbe éd:',
 
 # Groups
+'group-user' => 'Uzeus',
+'group-autoconfirmed' => 'Uzeus inrégistrés',
 'group-sysop' => 'Aménistrateus',
 'group-bureaucrat' => 'Buroécrates',
 
@@ -548,6 +551,9 @@ Ale doét mie éte pu longue éq $1 {{PLURAL:$1|caracter|caractéres}}.',
 
 'grouppage-sysop' => '{{ns:project}}:Aménistrateus',
 
+# Special:Log/newusers
+'newuserlogpage' => "Jornal éd chés créachons d'comptes d'uzeu",
+
 # User rights log
 'rightslog' => "Jornal d'chés droés dechl uzeu",
 
@@ -650,6 +656,9 @@ Vir apré ([$2 pache]).",
 # MIME search
 'mimesearch' => 'Tracher pèr type éd contenu MIME',
 
+# Unwatched pages
+'unwatchedpages' => 'Paches poin suivies',
+
 # List redirects
 'listredirects' => 'Lisse des érdiréccions',
 
@@ -661,6 +670,7 @@ Vir apré ([$2 pache]).",
 
 # Statistics
 'statistics' => 'Éstatistikes',
+'statistics-users' => '[[Special:ListUsers|Uzeus]] inrégistrés',
 
 'disambiguations' => 'Paches aveuc des loïens vers des paches du meume nom',
 'disambiguationspage' => 'Template:Omonymie',
@@ -725,6 +735,10 @@ Vir apré ([$2 pache]).",
 # Special:Categories
 'categories' => 'Lisse des catégories',
 
+# Special:DeletedContributions
+'deletedcontributions' => 'Contérbuchons abolies',
+'deletedcontributions-title' => 'Contérbuchons abolies',
+
 # Special:LinkSearch
 'linksearch' => 'Loïens éstérieurs',
 'linksearch-line' => '$1 est loïé édpuis $2',
@@ -732,9 +746,6 @@ Vir apré ([$2 pache]).",
 # Special:ActiveUsers
 'activeusers' => 'Lisse des ouvreus uzeus',
 
-# Special:Log/newusers
-'newuserlogpage' => "Jornal éd chés créachons d'comptes d'uzeu",
-
 # Special:ListGroupRights
 'listgrouprights-summary' => "L'pache-lo ch'est ène lisse d'chés groupes d'uzeus définis édseur ech wiki aveuc chés drouots d'intrèe achuchonnés.<br />I put y avoèr ichi d'eutes [[MediaWiki:Listgrouprights-helppage|informacions]] édseur chés drouots individuèls. ([[{{MediaWiki:Listgrouprights-helppage}}|vir]])",
 'listgrouprights-members' => '(lisse éd chés mimbes)',
@@ -806,6 +817,8 @@ Vlo chés réglages del pache '''$1''' à ch'momint-chi:",
 'restriction-level' => 'Nivieu éd réstricchon:',
 
 # Undelete
+'undelete' => 'Vir chés paches abolies',
+'viewdeletedpage' => 'Vir chés paches abolies',
 'undeletelink' => 'vir/érfoaire',
 'undeleteviewlink' => 'Vir',
 
@@ -825,6 +838,7 @@ Vlo chés réglages del pache '''$1''' à ch'momint-chi:",
 
 'sp-contributions-newbies' => 'Montrer chés contérbuchons éd chés nouvieus conptes seulemint',
 'sp-contributions-blocklog' => 'jornal éd chés blotcåjhes',
+'sp-contributions-deleted' => 'Contérbuchons abolies',
 'sp-contributions-uploads' => "téléquértch'mints",
 'sp-contributions-logs' => 'Gasètes',
 'sp-contributions-talk' => 'Dviser',
@@ -853,6 +867,7 @@ Vlo chés réglages del pache '''$1''' à ch'momint-chi:",
 'whatlinkshere-filters' => 'Filtes',
 
 # Block/unblock
+'block' => "Blotcher l'uzeu",
 'blockip' => "Blotcher l'uzeu",
 'blockip-title' => "Blotcher l'uzeu",
 'blockip-legend' => "Blotcher l'uzeu",
index a8d240b..ab3f5ce 100644 (file)
@@ -487,8 +487,8 @@ Paesswatt fer nau: $2',
 'right-writeapi' => 'Yuus vun write API',
 'right-delete' => 'Bledder lesche',
 
-# User rights log
-'rightsnone' => '(ken)',
+# Special:Log/newusers
+'newuserlogpage' => 'Logbuch vun neie Yuuser',
 
 # Associated actions - in the sentence "You do not have permission to X"
 'action-read' => 'es Blatt zu lese',
@@ -668,9 +668,6 @@ Paesswatt fer nau: $2',
 'activeusers-hidebots' => 'Waddefresser verschwinne losse',
 'activeusers-hidesysops' => 'Verwalter verschwinne losse',
 
-# Special:Log/newusers
-'newuserlogpage' => 'Logbuch vun neie Yuuser',
-
 # Special:ListGroupRights
 'listgrouprights' => 'Rechte vun Yuuser-Druppe',
 'listgrouprights-group' => 'Druppe',
@@ -707,6 +704,7 @@ Paesswatt fer nau: $2',
 'unwatching' => 'Nimmi watsche...',
 
 'enotif_impersonal_salutation' => '{{SITENAME}}-Yuuser',
+'changed' => 'gennert',
 
 # Delete
 'deletepage' => 'Blatt lesche',
@@ -1012,6 +1010,9 @@ Guck $2 fer e Lischt vun de letscht Leschunge.',
 'htmlform-reset' => 'Enneringe losmache',
 'htmlform-selectorother-other' => 'Annere',
 
+# New logging system
+'rightsnone' => '(ken)',
+
 # Feedback
 'feedback-message' => 'Melding:',
 
index 0d3d28a..60a8a21 100644 (file)
 
 $fallback = 'de';
 
+$namespaceNames = array(
+       NS_MEDIA            => 'Medium',
+       NS_SPECIAL          => 'Schbezial',
+       NS_TALK             => 'Babble',
+       NS_USER             => 'Benudzer',
+       NS_USER_TALK        => 'Benudzer_Dischbediere',
+       NS_PROJECT_TALK     => '$1_Dischbediere',
+       NS_FILE             => 'Dadai',
+       NS_FILE_TALK        => 'Dadai_Dischbediere',
+       NS_MEDIAWIKI        => 'MediaWiki',
+       NS_MEDIAWIKI_TALK   => 'MediaWiki_Dischbediere',
+       NS_TEMPLATE         => 'Vorlach',
+       NS_TEMPLATE_TALK    => 'Vorlach_Dischbediere',
+       NS_HELP             => 'Hilf',
+       NS_HELP_TALK        => 'Hilf_Dischbediere',
+       NS_CATEGORY         => 'Kadegorie',
+       NS_CATEGORY_TALK    => 'Kadegorie_Dischbediere',
+);
+
+$namespaceAliases = array(
+       # German namespaces
+       'Medium'               => NS_MEDIA,
+       'Spezial'              => NS_SPECIAL,
+       'Diskussion'           => NS_TALK,
+       'Benutzer'             => NS_USER,
+       'Benutzer_Diskussion'  => NS_USER_TALK,
+       '$1_Diskussion'        => NS_PROJECT_TALK,
+       'Datei'                => NS_FILE,
+       'Datei_Diskussion'     => NS_FILE_TALK,
+       'MediaWiki_Diskussion' => NS_MEDIAWIKI_TALK,
+       'Vorlage'              => NS_TEMPLATE,
+       'Vorlage_Diskussion'   => NS_TEMPLATE_TALK,
+       'Hilfe'                => NS_HELP,
+       'Hilfe_Diskussion'     => NS_HELP_TALK,
+       'Kategorie'            => NS_CATEGORY,
+       'Kategorie_Diskussion' => NS_CATEGORY_TALK,
+);
+
 $messages = array(
 # User preference toggles
-'tog-showtoolbar' => "Werkzaich zum Bearwaide zaische (dodezu braucht's JavaScript)",
+'tog-showtoolbar' => "Werkzaich zum Bearwaide zaische (dodezu brauchd's JavaScript)",
+'tog-showhiddencats' => 'Zaisch vaschdeglde Kadegorije',
 
 'underline-always' => 'Immer',
 'underline-never' => 'Garnet',
-'underline-default' => 'Des nemme, was em Broweser gsaacht hoscht.',
+'underline-default' => 'Des nemme, was em Browser gsaachd hoschd.',
 
 # Dates
 'sunday' => 'Sundaach',
@@ -49,7 +88,7 @@ $messages = array(
 'august' => 'Auguschd',
 'september' => 'Sebdember',
 'october' => 'Ogdower',
-'november' => 'November',
+'november' => 'Nowember',
 'december' => 'Dezember',
 'january-gen' => 'Jänner',
 'february-gen' => 'Fewwer',
@@ -58,10 +97,10 @@ $messages = array(
 'may-gen' => 'Mai',
 'june-gen' => 'Juni',
 'july-gen' => 'Juli',
-'august-gen' => 'Auguscht',
+'august-gen' => 'Auguschd',
 'september-gen' => 'Sebdember',
 'october-gen' => 'Ogdower',
-'november-gen' => 'November',
+'november-gen' => 'Nowember',
 'december-gen' => 'Dezember',
 'jan' => 'Jän',
 'feb' => 'Few',
@@ -82,6 +121,7 @@ $messages = array(
 'subcategories' => 'Unnerkadegorie',
 'category-media-header' => 'Medie in de Kadegorie „$1“',
 'hidden-categories' => '{{PLURAL:$1|Verschdegelde Kadegorie|Verschdegelde Kadegorije}}',
+'hidden-category-category' => 'Verschdegelde Kadegorije',
 'category-subcat-count' => '{{PLURAL:$2|Die Kategorie hot die Unnerkategorie:|{{PLURAL:$1|Die Unnerkategori isch eni vun insgsamt $2 Unnerkategorie in derre Kategorie:|S werre $1 vun insgsamt $2 Unnerkategorie in derre Kategorie aagezeicht:}}}}',
 'category-article-count' => "{{PLURAL:$2|In derre Kadegorie hot's numme die Said.|Die {{PLURAL:$1|Said|$1 Saide}} gebbt's in derre Kadegorie, vun insgsamt $2.}}",
 'listingcontinuesabbrev' => '(Forts.)',
@@ -89,6 +129,7 @@ $messages = array(
 'about' => 'Iwwer',
 'newwindow' => '(werd im e naie Fenschter uffgmacht)',
 'cancel' => 'Abbreche',
+'mypage' => 'Said',
 'mytalk' => 'Dischbediere',
 'navigation' => 'Nawigadzion',
 
@@ -101,11 +142,12 @@ $messages = array(
 # Vector skin
 'vector-action-delete' => 'Lesche',
 'vector-action-move' => 'Verschiewe',
-'vector-action-protect' => 'Schitze',
+'vector-action-protect' => 'Schidze',
 'vector-view-edit' => 'Bearwaide',
 'vector-view-history' => 'Dadaigschischd',
 'vector-view-view' => 'Lese',
 'actions' => 'Agzione',
+'namespaces' => 'Nomensreem',
 
 'errorpagetitle' => 'Fehler',
 'returnto' => 'Zrick zu $1.',
@@ -115,18 +157,20 @@ $messages = array(
 'searchbutton' => 'Suche',
 'go' => 'Adiggel',
 'searcharticle' => 'Suche',
-'history' => 'Gschicht vun de Said',
+'history' => 'Gschichd vun de Said',
 'history_short' => 'Versione',
-'printableversion' => 'Druck-Aasicht',
+'printableversion' => 'Drugg-Aasicht',
 'permalink' => 'Permanentlink',
 'print' => 'Ausdrugge',
+'view' => 'Lese',
 'edit' => 'Bearwaide',
 'create' => 'Aaleche',
 'editthispage' => 'Die Said bearwaide',
 'delete' => 'Lesche',
 'undelete_short' => '{{PLURAL:$1|ä Ännerung|$1 Ännerunge}} widderherschdelle',
-'protect' => 'schitze',
+'protect' => 'schidze',
 'protect_change' => 'ännere',
+'protectthispage' => 'Die Said schidze',
 'unprotect' => 'Saideschudz änare',
 'newpage' => 'Naie Said',
 'talkpage' => 'Iwwer die Said dischbediere',
@@ -163,20 +207,21 @@ $messages = array(
 'privacy' => 'Dadeschuds',
 'privacypage' => 'Project:Daadeschutz',
 
-'badaccess' => 'Kää ausraichende Recht',
+'badaccess' => 'Kää ausraichende Reschd',
 
 'retrievedfrom' => 'Vun "$1"',
 'youhavenewmessages' => 'Du hoscht $1 ($2).',
-'newmessageslink' => 'naie Nochrichte',
-'newmessagesdifflink' => 'letschte Ännerung',
+'newmessageslink' => 'naie Nochrischde',
+'newmessagesdifflink' => 'ledschde Ännerung',
 'editsection' => 'bearwaide',
 'editold' => 'bearwaide',
+'viewsourceold' => 'Quelltegschd ogugge',
 'editlink' => 'bearwaide',
-'viewsourcelink' => 'Quell aagucke',
+'viewsourcelink' => 'Quell aagugge',
 'editsectionhint' => 'Abschnidd ännere: $1',
 'toc' => 'Inhald',
-'showtoc' => 'zaiche',
-'hidetoc' => 'versteggeln',
+'showtoc' => 'zaische',
+'hidetoc' => 'versteggle',
 'site-rss-feed' => '$1 RSS Feed',
 'site-atom-feed' => '$1 Atom Feed',
 'page-rss-feed' => '"$1" RSS Feed',
@@ -189,10 +234,10 @@ $messages = array(
 'nstab-media' => 'Media',
 'nstab-special' => 'Spezialsaid',
 'nstab-project' => 'Bordal',
-'nstab-image' => 'Datei',
+'nstab-image' => 'Dadei',
 'nstab-mediawiki' => 'Mitdeelung',
 'nstab-template' => 'Vorlaach',
-'nstab-help' => 'Hilfe',
+'nstab-help' => 'Hilf',
 'nstab-category' => 'Kadegorie',
 
 # General errors
@@ -206,101 +251,104 @@ Bidde meldsm [[Special:ListUsers/sysop|Adminischdrador]], un gebb d URL dezu aa.
 'badtitle' => 'Schleschde Didl',
 'badtitletext' => 'De Titel vun de aageforderte Said isch nid giltich, leer, odder e nid giltiche Link vun eme annere Wiki.
 S kann sai, dass es ää odder meh Zaiche drin hot, wu im Titel vun de Said nid gebraucht werre därfe.',
-'viewsource' => 'Quelltekschd betrachde',
+'viewsource' => 'Quelltegschd bedrachde',
 
 # Login and logout pages
 'yourname' => 'Benutzername:',
-'yourpassword' => 'Passwort:',
+'yourpassword' => 'Password:',
+'yourpasswordagain' => 'Password nomol oigewe:',
 'remembermypassword' => 'Mai Passwort uff dem Computer merke (hechschtens fer $1 {{PLURAL:$1|Dach|Dach}})',
 'login' => 'Omelde',
-'nav-login-createaccount' => 'Aamelde / Benutzerkonto aaleche',
+'nav-login-createaccount' => 'Aamelde / Benudzerkondo aaleche',
 'userlogin' => 'Omelde / Benutzerkonto anleche',
 'logout' => 'Abmelde',
 'userlogout' => 'Abmelde',
-'nologinlink' => 'E Benutzerkonto aaleche',
+'nologinlink' => 'E Benutzerkondo aaleche',
 'mailmypassword' => 'Nais Passwort per E-Mail schicke',
 
 # Edit page toolbar
-'bold_sample' => 'Fette Schrift',
-'bold_tip' => 'Fette Schrift',
-'italic_sample' => 'Kursive Schrift',
-'italic_tip' => 'Kursive Schrift',
-'link_sample' => 'Stichwort',
+'bold_sample' => 'Fedde Schrifd',
+'bold_tip' => 'Fedde Schrifd',
+'italic_sample' => 'Kursive Schrifd',
+'italic_tip' => 'Kursive Schrifd',
+'link_sample' => 'Schdischword',
 'link_tip' => 'Interner Link',
-'extlink_sample' => 'http://www.example.com Linktext',
+'extlink_sample' => "http://www.example.com Ling'gtegschd",
 'extlink_tip' => 'Externer Link (uff http:// Acht gewwe)',
 'headline_sample' => 'Abschnitts-Iwwerschrift',
 'headline_tip' => 'Iwwerschrift Ewene 2',
 'nowiki_sample' => 'Gebb do en Text ai, wu nit formatiert wird',
 'nowiki_tip' => 'Wiki-Formatierunge ignoriere',
 'image_tip' => 'Bildverwais',
-'media_tip' => 'Dateilink',
+'media_tip' => 'Dadeilink',
 'sig_tip' => 'Dai Unnerschrifd mid ener Zaidaagab',
 'hr_tip' => 'Horizontale Linie (sparsam verwenne)',
 
 # Edit pages
 'summary' => 'Zammefassung:',
-'subject' => 'Betreff:',
-'minoredit' => 'Des ischt e klänni Bearwaidung',
+'subject' => 'Bedreff:',
+'minoredit' => 'Des isch e klänni Bearwaidung',
 'watchthis' => 'Die Said beowachde',
 'savearticle' => 'Said schbeichere',
 'preview' => 'Voaschau',
 'showpreview' => 'Vorschau zaische',
 'showlivepreview' => 'Live-Vorschau',
 'showdiff' => 'Ännerunge zaische',
-'anoneditwarning' => "'''Warnung:''' Du bischt nit aagemeldt. Dai IP-Adress werd in de Gschicht vun dem Artikel gspaichert.",
+'anoneditwarning' => "'''Warnung:''' Du bischt nit aagemeldt. Dai IP-Adress werd in de Gschichd vum Artikel gspaichert.",
 'summary-preview' => 'Zammefassung:',
 'newarticle' => '(Nai)',
 'newarticletext' => "Du bisch eme Link nogange zu re Said, wu s no gar nit gebbt.
 Zum die Said aaleche, kannscht do in dem Käschtel unne aafange mid schraiwe (guck[[{{MediaWiki:Helppage}}|Hilfe]] fer meh Informatione).
 Wenn do nid hin hoscht welle, no druck in Daim Browser uff '''Zrick'''.",
-'noarticletext' => 'Uff derre Said gebbt\'s noch kää Text. Du kannscht uff annere Saide [[Special:Search/{{PAGENAME}}|den Aitrach suche]], <span class="plainlinks">[{{fullurl:{{#Special:Log}}|page={{FULLPAGENAMEE}}}} de Logbuchaidrach suche, wu dezu ghert],
+'noarticletext' => 'Uff derre Said gebbt\'s noch kää Text. Du kannschd uff annere Saide [[Special:Search/{{PAGENAME}}|de Aidrach suche]], <span class="plainlinks">[{{fullurl:{{#Special:Log}}|page={{FULLPAGENAMEE}}}} de Logbuchaidrach suche, wu dezu ghert],
 orrer [{{fullurl:{{FULLPAGENAME}}|action=edit}} die Said bearwaide]</span>.',
 'previewnote' => "'''Deng'g droa, dass des numme e Vorschau isch.'''
 Doi Ännerunge sinn no nid gschbaichert worre!",
 'editing' => 'Am $1 bearwaide',
 'editingsection' => '$1 bearwaide (Abschnitt)',
 'yourtext' => 'Doin Tegschd',
+'storedversion' => 'Gschbaischerdi Version',
 'yourdiff' => 'Unaschied',
-'copyrightwarning' => "Bitte gebb acht, dass alle Baidräch zu {{SITENAME}} unner $2 vereffentlicht werre (guck $1 fer mehr Details).
-Wenn du nit willhsct, dass deswu du gschriwwe hoscht, gänneret un kopiert werre kann, dann duu s do nit naischraiwe.<br />
-du gebbscht do au zu, dass Du des selwerscht gschriwwe hoscht orrer vun ere effentliche, fraie Quell ('''public domain''')orrer vun ere ähnliche fraie Quell her hoscht.
-'''SCHRAIB DO NIX NAI, WAS URHEWERRECHTKLICH GSCHITZT ISCH!'''",
-'templatesused' => '{{PLURAL:$1|Vorlach wu uff derre Said gebraucht werd|Vorlache wu uff derre Said gebraucht werre}}:',
-'templatesusedpreview' => '{{PLURAL:$1|Vorlach wu in derre Vorschau gebraucht werd|Vorlache wu in derre Vorschau gebraucht werre}}:',
-'template-protected' => '(gschitzt)',
-'template-semiprotected' => '(halb-gschitzt)',
+'copyrightwarning' => "Bidde gebb achd, dass alle Baidräch zu {{SITENAME}} unner $2 vereffentlischd werre (guck $1 fer mehr Details).
+Wenn du nit willschd, dass deswu du gschriwwe hoschd, gänneret un kopierd werre kann, dann duu s do nit naischraiwe.<br />
+du gebbschd do au zu, dass Du des selwerschd gschriwwe hoschd orrer vun ere effendliche, fraie Quell ('''public domain''') orrer vun ere ähnliche fraie Quell her hoschd.
+'''SCHRAIB DO NIX NAI, WAS URHEWERRECHDLICH GSCHIZD ISCH!'''",
+'templatesused' => '{{PLURAL:$1|Vorlach wu uff derre Said gbrauchd werd|Vorlache wu uff derre Said gbrauchd werre}}:',
+'templatesusedpreview' => '{{PLURAL:$1|Vorlach wu in derre Vorschau gbrauchd werd|Vorlache wu in derre Vorschau gbrauchd werre}}:',
+'template-protected' => '(gschizd)',
+'template-semiprotected' => '(halb-gschizd)',
 'hiddencategories' => 'Die Said ghert zu {{PLURAL:$1|1 versteckelte Kategorie|$1 versteckelte Kategorie}}:',
 'permissionserrorstext-withaction' => 'Du därfscht nid $2, aus {{PLURAL:$1|dem Grund|denne Grind}}:',
 'moveddeleted-notice' => 'Die Said isch gleschd worre.
 De Leschaidrach fa die Said isch do unne als Kwell aagewwe.',
 
 # History pages
-'viewpagelogs' => 'Lochbicher fer die Said aagucke',
-'currentrev-asof' => 'Aktuelle Version vun $1',
+'viewpagelogs' => 'Lochbischer fer die Said aagucke',
+'currentrev' => 'Ledschdi Änarung',
+'currentrev-asof' => 'Agduell Version vun $1',
 'revisionasof' => 'Version vun $1',
-'previousrevision' => '← Ältere Versione',
-'nextrevision' => 'Naier Version →',
-'currentrevisionlink' => 'Aktuell Version',
+'previousrevision' => '← Äldere Versione',
+'nextrevision' => 'Naiere Versione →',
+'currentrevisionlink' => 'Agduell Version',
 'cur' => 'jetzert',
-'next' => 'Negschte',
+'next' => 'Negschde',
 'last' => 'vorich',
 'histlegend' => "Du kannscht zwää Versione auswähle un verglaiche.<br />
 Erklärung: '''({{int:cur}})''' = Unnerschied zu jetzert,
 '''({{int:last}})''' = Unnerschied zu de voriche Version, '''{{int:minoreditletter}}''' = klenni Ännerung.",
-'history-fieldset-title' => 'In de Versionsgschicht suche',
-'histfirst' => 'Ältschte',
-'histlast' => 'Naischte',
+'history-fieldset-title' => 'In de Versionsgschichd gugge',
+'histfirst' => 'Ältschde',
+'histlast' => 'Naischde',
 
 # Revision feed
 'history-feed-item-nocomment' => '$1 om $2',
 
 # Revision deletion
-'rev-delundel' => 'zaich/versteckel',
+'rev-delundel' => 'zaisch/verschdeggle',
 'revdelete-show-file-submit' => 'Ja',
 'revdelete-radio-set' => 'Ja',
 'revdelete-radio-unset' => 'Nä',
-'revdelete-submit' => 'Uff die aussgewählt {{PLURAL:$1|Version|Versione}} owende',
+'revdelete-submit' => 'Uff die gewehld {{PLURAL:$1|Version|Versione}} owende',
 'revdel-restore' => 'Sischdbakaid ännere',
 'revdel-restore-deleted' => 'gleschdi Änarunge',
 'revdel-restore-visible' => 'sischdbari Änarunge',
@@ -312,7 +360,7 @@ Erklärung: '''({{int:cur}})''' = Unnerschied zu jetzert,
 'history-title' => 'Änarungsgschischd vun "$1"',
 'lineno' => 'Zail $1:',
 'compareselectedversions' => 'Die Versione mitenonner vergleiche',
-'editundo' => 'zerick',
+'editundo' => 'zerigg',
 
 # Search results
 'searchresults' => 'Ergebnis suche',
@@ -326,8 +374,13 @@ Erklärung: '''({{int:cur}})''' = Unnerschied zu jetzert,
 'nextn' => 'negschte {{PLURAL:$1|$1}}',
 'prevn-title' => 'Frijari $1 {{PLURAL:$1|result|Ergewnis}}',
 'nextn-title' => 'Negschdi $1 {{PLURAL:$1|result|Ergewnis}}',
+'shown-title' => 'Zaisch $1 {{PLURAL:$1|Ergewnis}} vunde Said',
 'viewprevnext' => 'Gugg ($1 {{int:pipe-separator}} $2) ($3)',
 'searchprofile-everything' => 'Alles',
+'searchprofile-articles-tooltip' => 'In $1 gugge',
+'searchprofile-project-tooltip' => 'In $1 gugge',
+'searchprofile-images-tooltip' => 'Gugg noch Bilder',
+'searchprofile-advanced-tooltip' => 'Gugg in onare Nomensraim',
 'search-result-size' => '$1 ({{PLURAL:$2|1 Word|$2 Wärder}})',
 'search-redirect' => '(Wairerlaitung $1)',
 'search-section' => '(Abschnitt $1)',
@@ -335,7 +388,9 @@ Erklärung: '''({{int:cur}})''' = Unnerschied zu jetzert,
 'search-interwiki-caption' => 'Schweschterprojekt',
 'search-interwiki-default' => '$1 Ergebnis:',
 'search-interwiki-more' => '(meh)',
+'searchall' => 'alle',
 'nonefound' => "'''Hiiwais:''' S werre standardmäßich numme e Dail Namensraim durchsucht. Setz ''all:'' vor Dai Suchbegriff zum alle Saide (mit Dischbediersaide, Voalaache usw.) durchsuche odder direkt de Name vum Namensraum, wu durchsucht werre sell.",
+'search-nonefound' => 'Fa die Such hods kä Ergewnis.',
 'powersearch' => 'Erwaiterte Such',
 'powersearch-legend' => 'Erwaiterte Such',
 'powersearch-ns' => 'In de Namensraim suche:',
@@ -352,6 +407,8 @@ Erklärung: '''({{int:cur}})''' = Unnerschied zu jetzert,
 'saveprefs' => 'Oischdellunge schbeichere',
 'resetprefs' => 'Oischdellunge verwerfe',
 'guesstimezone' => 'Aus em Browser iwwernemme',
+'yourrealname' => 'Birscherlischer Nome:',
+'yourlanguage' => 'Schbrooch:',
 'gender-unknown' => 'Ghoim gkalde',
 
 # Groups
@@ -361,22 +418,24 @@ Erklärung: '''({{int:cur}})''' = Unnerschied zu jetzert,
 'group-bureaucrat' => 'Birokrade',
 'group-all' => '(alle)',
 
-'group-bot-member' => 'Bot',
-'group-sysop-member' => 'Adminischdrador',
-'group-bureaucrat-member' => 'Birokrad',
+'group-bot-member' => '{{GENDER:$1|Bot}}',
+'group-sysop-member' => '{{GENDER:$1|Adminischdrador}}',
+'group-bureaucrat-member' => '{{GENDER:$1|Birokrad}}',
 
 'grouppage-sysop' => '{{ns:project}}:Adminischtratore',
 
+# Special:Log/newusers
+'newuserlogpage' => 'Naiaameldungs-Logbuch',
+
 # User rights log
 'rightslog' => 'Benutzerrecht-Logbuch',
-'rightsnone' => '(-)',
 
 # Associated actions - in the sentence "You do not have permission to X"
 'action-edit' => 'die Said bearwaide',
 
 # Recent changes
 'nchanges' => '$1 {{PLURAL:$1|Ännerung|Ännerunge}}',
-'recentchanges' => 'Was zuletschd gemachd worre isch',
+'recentchanges' => 'Was zuledschd gemachd worre isch',
 'recentchanges-legend' => 'Optione vun de Aazaich',
 'recentchanges-feed-description' => 'Di letschte Ännerunge vun {{SITENAME}} in des Feed aigewwe.',
 'recentchanges-label-minor' => "S'ische glänni Beawaidung",
@@ -389,7 +448,7 @@ Erklärung: '''({{int:cur}})''' = Unnerschied zu jetzert,
 'rcshowhidemine' => 'Mai Bearwaidunge $1',
 'rclinks' => 'Zeich die letschte $1 Ännerunge in de letschte $2 Dache<br />$3',
 'diff' => 'Unnerschied',
-'hist' => 'Gschicht',
+'hist' => 'Gschichd',
 'hide' => 'vaschdeggle',
 'show' => 'zaische',
 'minoreditletter' => 'k',
@@ -413,8 +472,9 @@ Saide uff [[Special:Watchlist|Dainer Beowachdungslischt]] sin '''fett'''.",
 'uploadbtn' => 'Datei hochlade',
 'uploadlogpage' => 'Dateie-Logbuch',
 'filedesc' => 'Zommefassung',
+'fileuploadsummary' => 'Zommefassung:',
 'savefile' => 'Datei schbeichere',
-'uploadedimage' => 'hot „[[$1]]“ hochglade',
+'uploadedimage' => 'hod „[[$1]]“ nuffglade',
 
 # Lock manager
 'lockmanager-notlocked' => '„$1“ hod ned uffgmachd were kenne, die isch ganed gschberd gwesd.',
@@ -424,6 +484,9 @@ Saide uff [[Special:Watchlist|Dainer Beowachdungslischt]] sin '''fett'''.",
 'lockmanager-fail-openlock' => 'Die gschberd Dadai „$1“ komma ned uffmache.',
 'lockmanager-fail-releaselock' => '„$1“ konn ned fraigewe werre.',
 
+# Special:ListFiles
+'listfiles_count' => 'Versione',
+
 # File description page
 'file-anchor-link' => 'Datei',
 'filehist' => 'Dateigschischd',
@@ -433,11 +496,11 @@ Saide uff [[Special:Watchlist|Dainer Beowachdungslischt]] sin '''fett'''.",
 'filehist-datetime' => 'Zaidpungd',
 'filehist-thumb' => 'Vorschaubild',
 'filehist-thumbtext' => 'Vorschaubild fer Version vum $1',
-'filehist-user' => 'Benutzer',
+'filehist-user' => 'Benudzer',
 'filehist-dimensions' => 'Moß',
 'filehist-comment' => 'Kommentar',
 'imagelinks' => 'Dadaivawendung',
-'linkstoimage' => 'Die {{PLURAL:$1|Said verwaist|$1 Saire verwaise}} uff die Datei:',
+'linkstoimage' => 'Die {{PLURAL:$1|Said verwaisd|$1 Saide verwaise}} uff die Datei:',
 'sharedupload' => 'Die Datei isch vun $1 un s kann sai, dass se ach vun annere Projekt gebraucht werd.',
 'uploadnewversion-linktext' => 'E naiere Version vun derre Datei hochlade',
 
@@ -485,19 +548,17 @@ Saide uff [[Special:Watchlist|Dainer Beowachdungslischt]] sin '''fett'''.",
 # Special:LinkSearch
 'linksearch' => 'Externe Links',
 
-# Special:Log/newusers
-'newuserlogpage' => 'Naiaameldungs-Logbuch',
-
 # Special:ListGroupRights
-'listgrouprights-members' => '(Mitgliederlischd)',
+'listgrouprights-members' => '(Midgliederlischd)',
 
 # E-mail user
-'emailuser' => 'E-Mail on den Benutzer',
+'emailuser' => 'E-Mail on de Benutzer',
 'emailsend' => 'Abschigge',
 
 # Watchlist
 'watchlist' => 'Beowachdungslischd',
 'mywatchlist' => 'Beowachdungslischd',
+'watchlistfor2' => 'Vun $1 $2',
 'addedwatchtext' => "Die Said \"[[:\$1]]\" isch zu Dainer [[Special:Watchlist|Beowachdungslischt]] zugefiecht worre.
 Zukimftiche Ännerunge an derre Said un de Dischbediersaid, wu dezu ghert, werre doo aagezaicht, un d Said werd '''fett''' aagezaicht in de [[Special:RecentChanges|Letschte Ännerunge]] fer dass es ääfacher isch zum finne.",
 'removedwatchtext' => 'D Said "[[:$1]]" isch aus [[Special:Watchlist|Dainer Beowachdungslischt]] rausgenumme worre.',
@@ -529,11 +590,11 @@ Guck $2 fer e Lischt vun de letschte Leschunge.',
 'deletereasonotherlist' => 'Annere Grund',
 
 # Rollback
-'rollbacklink' => 'Zericksetze',
+'rollbacklink' => 'Zeriggsetze',
 
 # Protect
 'protectlogpage' => 'Saideschutz-Logbuch',
-'protectedarticle' => 'hot "[[$1]]" gschitzt',
+'protectedarticle' => 'hot "[[$1]]" gschizd',
 'modifiedarticleprotection' => 'hot de Schutzstatus vun "[[$1]]" gännert',
 'protectcomment' => 'Grund:',
 'protectexpiry' => 'Bis:',
@@ -542,7 +603,7 @@ Guck $2 fer e Lischt vun de letschte Leschunge.',
 'protect-text' => "Du kannscht de Schutzstatus vun de Said '''$1''' aagucke un ännere.",
 'protect-locked-access' => "Dai Benutzerkonto hot ken Recht zum de Schutzstatus vun ener Said ze ännere.
 Do hot s di aktuelle Aistellunge vun de Said '''$1''':",
-'protect-cascadeon' => 'Die Said isch gschitzt, wail se {{PLURAL:$1|zu derre Said ghert|zu denne Saide ghert}}, wu e Kaskadesperrung gelt.
+'protect-cascadeon' => 'Die Said isch gschizd, wail se {{PLURAL:$1|zu derre Said ghert|zu denne Saide ghert}}, wu e Kaskadesperrung gelt.
 Der Schutzstatus vun derre Said kannscht ännere, awwer des hot kää Aifluss uff d Kaskadesperrung.',
 'protect-default' => 'Alle Benutzer erlääwe',
 'protect-fallback' => '«$1»-Berechdichung nedich',
@@ -550,7 +611,7 @@ Der Schutzstatus vun derre Said kannscht ännere, awwer des hot kää Aifluss uf
 'protect-level-sysop' => 'Numme Adminischtratore',
 'protect-summary-cascade' => 'Kaskade',
 'protect-expiring' => 'bis $1 (UTC)',
-'protect-cascade' => 'Kaskadesperrung – alle aigebunnene Vorlache sinn midgsperrt.',
+'protect-cascade' => 'Kaskadesperrung – alle aigebunnene Vorlache sinn midgsperrd.',
 'protect-cantedit' => 'Du kannscht de Schutzstatus vun derre Said nit ännere, wail Du nid d Berechdichung dezu hoscht.',
 'restriction-type' => 'Berechdichung:',
 'restriction-level' => 'Schutzewene:',
@@ -657,7 +718,7 @@ Bitte duu se vun Hand zammefiehre.'''",
 'movetalk' => 'Dischbediersaid, wu dezu ghert, verschiewe',
 'movelogpage' => 'Verschiewungs-Logbuch',
 'movereason' => 'Grund:',
-'revertmove' => 'Zerick verschiewe',
+'revertmove' => 'Zerigg verschiewe',
 'delete_and_move' => 'Lesche un Verschiewe',
 'delete_and_move_confirm' => 'Ja, Said lesche',
 
@@ -672,7 +733,7 @@ Bitte duu se vun Hand zammefiehre.'''",
 'import-interwiki-submit' => 'Impordiere',
 
 # Tooltip help for the actions
-'tooltip-pt-userpage' => 'Dai Benutzersaid',
+'tooltip-pt-userpage' => 'Dai Benudzersaid',
 'tooltip-pt-mytalk' => 'Dai Dischbedier-Said',
 'tooltip-pt-preferences' => 'Dai Aistellunge',
 'tooltip-pt-watchlist' => 'D Lischt vun Saide, die wu du beowachde dusch',
@@ -683,26 +744,26 @@ Bitte duu se vun Hand zammefiehre.'''",
 'tooltip-ca-edit' => 'Du kannschd die Said bearwaide.
 Bidde nemmde Vorschau-Knobb vorm Schbaischere',
 'tooltip-ca-addsection' => 'E naie Abschnitt aaleche',
-'tooltip-ca-viewsource' => 'Die Said isch gschitzt.
-Du kannscht awwer de Quelltext aagucke',
+'tooltip-ca-viewsource' => 'Die Said isch gschizd.
+Du kannscht awwer de Quelltegschd aagucke',
 'tooltip-ca-history' => 'Ledschde Versione vun derre Said',
-'tooltip-ca-protect' => 'Die Said schitze',
+'tooltip-ca-protect' => 'Die Said schidze',
 'tooltip-ca-delete' => 'Die Said lesche',
 'tooltip-ca-move' => 'Die Said verschiewe',
 'tooltip-ca-watch' => 'Die Said zu Dainere Beowachdungslischt zufieche',
 'tooltip-ca-unwatch' => 'Die Said aus Dainer Beowachdunschlischde rausnemme',
 'tooltip-search' => 'Durchsuch {{SITENAME}}',
 'tooltip-search-go' => 'Geh zu ere Said mid genää dem Namme, wenn s se gebbt',
-'tooltip-search-fulltext' => 'Such in de Said nochm Tegschd',
+'tooltip-search-fulltext' => 'Gugg in de Said nochm Tegschd',
 'tooltip-p-logo' => 'Haubdsaid',
 'tooltip-n-mainpage' => 'Uff d Hääptsaid geh',
 'tooltip-n-mainpage-description' => 'Haubdsaid aagucke',
 'tooltip-n-portal' => 'Iwwers Brojegd, wude duu kannschd, wu ebbes finne duschd',
 'tooltip-n-currentevents' => 'hinnergundsinformatione finne iwwer naie Eraichnis',
 'tooltip-n-recentchanges' => 'D Lischd vun de ledschde Ännerunge in dem Wiki',
-'tooltip-n-randompage' => 'E zufälliche Said lade',
+'tooltip-n-randompage' => 'E zufällisch Said lade',
 'tooltip-n-help' => 'De Ort zum rausfinne',
-'tooltip-t-whatlinkshere' => 'Lischt vun alle Wikisaide, wu do her verlinkt sinn',
+'tooltip-t-whatlinkshere' => 'Lischd vun alle Wikisaide, wu do her verlingd sinn',
 'tooltip-t-recentchangeslinked' => 'Letschde Ännerunge in Saide, wu vun do verlinkt sin',
 'tooltip-feed-rss' => 'RSS feed fer die Said',
 'tooltip-feed-atom' => 'Atom feed fer die Said',
@@ -725,9 +786,9 @@ Du kannscht awwer de Quelltext aagucke',
 'tooltip-diff' => 'Guck, welle Ännerunge Du im Text gmacht hoscht',
 'tooltip-compareselectedversions' => 'D Unnerschied zwische denne zwai ausgwehlte Versione aagucke',
 'tooltip-watch' => 'Die Said zu Dainer Beowachdunglischd zufieche',
-'tooltip-rollback' => '„Zericksetze“ machd alle Bearwaidunge vum ledschde Bearwaider rickgängich',
-'tooltip-undo' => '„Zerick“ macht numme die Ännerung rickgängich un zaicht d Vorschau aa.
-Du kannschd e Grund in dr Zammfassung aagewwe',
+'tooltip-rollback' => "„Zeriggsetze“ machd alle Bearwaidunge vum ledschde Bearwaider rigg'gängisch",
+'tooltip-undo' => "„Zerigg“ machd numme die Ännerung rigg'gängich un zaichd d Vorschau aa.
+Du kannschd e Grund in dr Zammfassung aagewwe",
 
 # Browsing diffs
 'previousdiff' => '← Ältere Bearwaidung',
@@ -790,10 +851,16 @@ Annere Medadaade sinn noamalawais verschdegld.
 
 # Special:SpecialPages
 'specialpages' => 'Spezialsaide',
+'specialpages-group-other' => 'Onare bsundare Saide',
+'specialpages-group-pagetools' => 'Wergzaisch fa Saide',
+'specialpages-group-wiki' => 'Daade un Wergzaisch',
 
 # Special:Tags
 'tags-edit' => 'bearwaide',
 
+# New logging system
+'rightsnone' => '(-)',
+
 # Feedback
 'feedback-close' => 'Erledischd',
 
index 7c1644b..7c9cbe6 100644 (file)
@@ -20,6 +20,7 @@
  * @author Holek
  * @author Jwitos
  * @author Kaganer
+ * @author Kaligula
  * @author Karol007
  * @author Lajsikonik
  * @author Lampak
  * @author Reedy
  * @author Remedios44
  * @author Remember the dot
+ * @author Rezonansowy
  * @author Rzuwig
  * @author Saper
  * @author Sovq
  * @author Sp5uhe
+ * @author Stanko
  * @author Stlmch
  * @author Stv
  * @author Szczepan1990
@@ -212,7 +215,7 @@ $magicWords = array(
        'redirect'                  => array( '0', '#PATRZ', '#PRZEKIERUJ', '#TAM', '#REDIRECT' ),
        'notoc'                     => array( '0', '__BEZSPISU__', '__NOTOC__' ),
        'nogallery'                 => array( '0', '__BEZGALERII__', '__NOGALLERY__' ),
-       'forcetoc'                  => array( '0', '__ZESPISEM__', '__FORCETOC__' ),
+       'forcetoc'                  => array( '0', '__ZESPISEM__', '__WYMUŚSPIS__', '__FORCETOC__' ),
        'toc'                       => array( '0', '__SPIS__', '__TOC__' ),
        'noeditsection'             => array( '0', '__BEZEDYCJISEKCJI__', '__NOEDITSECTION__' ),
        'currentday'                => array( '1', 'AKTUALNYDZIEŃ', 'CURRENTDAY' ),
@@ -730,7 +733,7 @@ Nie zapomnij dostosować [[Special:Preferences|preferencji]].',
 'gotaccount' => "Masz już konto? '''$1'''.",
 'gotaccountlink' => 'Zaloguj się',
 'userlogin-resetlink' => 'Zapomniałeś danych do zalogowania się?',
-'createaccountmail' => 'Wyślij hasło e-mailem',
+'createaccountmail' => 'Użyj tymczasowego hasła wygenerowanego losowo i wyślij je na podany poniżej adres e-mail',
 'createaccountreason' => 'Powód',
 'badretype' => 'Wprowadzone hasła różnią się między sobą.',
 'userexists' => 'Wybrana przez Ciebie nazwa użytkownika jest już zajęta.
@@ -808,6 +811,7 @@ Odczekaj chwilę zanim ponowisz próbę.',
 # E-mail sending
 'php-mail-error-unknown' => 'Wystąpił nieznany błąd w funkcji PHP mail()',
 'user-mail-no-addy' => 'Próba wysłania e‐maila bez adresu odbiorcy',
+'user-mail-no-body' => 'Próbowano wysłać e-mail o psutej lub krótkiej treści.',
 
 # Change password dialog
 'resetpass' => 'Zmień hasło',
@@ -866,6 +870,7 @@ Tymczasowe hasło – $2',
 'changeemail-oldemail' => 'Obecny adres e‐mail',
 'changeemail-newemail' => 'Nowy adres e-mail',
 'changeemail-none' => '(brak)',
+'changeemail-password' => 'Hasło {{SITENAME}}:',
 'changeemail-submit' => 'Zapisz nowy',
 'changeemail-cancel' => 'Anuluj',
 
@@ -1033,7 +1038,7 @@ Jeśli nie chcesz, żeby Twój tekst był dowolnie zmieniany przez każdego i ro
 Zapisując swoją edycję, oświadczasz, że ten tekst jest Twoim dziełem lub pochodzi z materiałów dostępnych na warunkach ''domeny publicznej'' lub kompatybilnych (zobacz także $1).
 '''PROSZĘ NIE WPROWADZAĆ MATERIAŁÓW CHRONIONYCH PRAWEM AUTORSKIM BEZ POZWOLENIA WŁAŚCICIELA!'''",
 'longpageerror' => "'''Błąd! Wprowadzony przez Ciebie tekst ma {{PLURAL:$1|1 kilobajt|$1 kilobajty|$1 kilobajtów}}. Długość tekstu nie może przekraczać {{PLURAL:$2|1 kilobajt|$2 kilobajty|$2 kilobajtów}}. Tekst nie może być zapisany.'''",
-'readonlywarning' => "'''Uwaga! Baza danych została zablokowana do celów administracyjnych. W tej chwili nie można zapisać nowej wersji strony. Zapisz jej treść do pliku, używając wytnij i wklej, aby zachować na później.'''
+'readonlywarning' => "'''Uwaga! Baza danych została zablokowana do celów administracyjnych. W tej chwili nie można zapisać nowej wersji strony. Jeśli chcesz, może skopiować ją do pliku, aby móc zapisać ją później.'''
 
 Administrator, który zablokował bazę, podał następujące wyjaśnienie: $1",
 'protectedpagewarning' => "'''Uwaga! Możliwość modyfikacja tej strony została zabezpieczona. Mogą ją edytować jedynie użytkownicy z uprawnieniami administratora.'''
@@ -1050,7 +1055,6 @@ Ostatni wpis z rejestru jest pokazany poniżej.",
 'template-semiprotected' => '(częściowo zabezpieczony)',
 'hiddencategories' => 'Ta strona jest w {{PLURAL:$1|jednej ukrytej kategorii|$1 ukrytych kategoriach}}:',
 'edittools' => '<!-- Znajdujący się tutaj tekst zostanie pokazany pod polem edycji i formularzem przesyłania plików. -->',
-'nocreatetitle' => 'Ograniczono możliwość tworzenia nowych stron',
 'nocreatetext' => 'W {{GRAMMAR:MS.lp|{{SITENAME}}}} ograniczono możliwość tworzenia nowych stron.
 Możesz edytować istniejące strony bądź też [[Special:UserLogin|zalogować się lub utworzyć konto]].',
 'nocreate-loggedin' => 'Nie masz uprawnień do tworzenia nowych stron.',
@@ -1599,15 +1603,13 @@ Jeśli zdecydujesz się je podać, zostaną użyte, by udokumentować Twoje auto
 'right-sendemail' => 'Wysyłanie e‐maili do innych użytkowników',
 'right-passwordreset' => 'Sprawdzanie treści e‐maila o resetowaniu hasła',
 
+# Special:Log/newusers
+'newuserlogpage' => 'Nowi użytkownicy',
+'newuserlogpagetext' => 'To jest rejestr ostatnio utworzonych kont użytkowników',
+
 # User rights log
 'rightslog' => 'Uprawnienia',
 'rightslogtext' => 'Rejestr zmian uprawnień użytkowników.',
-'rightslogentry' => 'zmienił przynależność $1 do grup ($2 → $3)',
-'rightslogentry-autopromote' => 'automatycznie zmienił przynależność ($2 → $3)',
-'logentry-rights-rights' => '$1 zmienił przynależność $3 do grup ($4 → $5)',
-'logentry-rights-rights-legacy' => '$1 zmienił przynależność $3 do grup',
-'logentry-rights-autopromote' => '$1 automatycznie zmienił przynależność ($4 → $5)',
-'rightsnone' => 'brak',
 
 # Associated actions - in the sentence "You do not have permission to X"
 'action-read' => 'przeglądania tej strony',
@@ -1995,14 +1997,15 @@ Więcej informacji odnajdziesz na [$2 stronie opisu pliku].',
 'sharedupload-desc-here' => 'Ten plik znajduje się w $1 i może być używany w innych projektach.
 Poniżej znajdują się informacje ze [$2 strony opisu] tego pliku.',
 'sharedupload-desc-edit' => 'Plik ten pochodzi z $1 i może być wykorzystany w innych projektach.
-Być może zechcesz zmienić opis na tej [$2 stronie opisu pliku].',
+Jeżeli chcesz zmienić opis, zrób to na [$2 stronie opisu pliku].',
 'sharedupload-desc-create' => 'Plik ten pochodzi z $1 i może być wykorzystany w innych projektach.
-Być może zechcesz zmienić opis na tej [$2 stronie opisu pliku].',
+Jeżeli chcesz zmienić opis, zrób to na [$2 stronie opisu pliku].',
 'filepage-nofile' => 'Plik o tej nazwie nie istnieje.',
 'filepage-nofile-link' => 'Plik o tej nazwie nie istnieje, ale możesz go [$1 przesłać].',
 'uploadnewversion-linktext' => 'Załaduj nowszą wersję tego pliku',
 'shared-repo-from' => 'z $1',
 'shared-repo' => 'współdzielone zasoby',
+'filepage.css' => '/* Styl CSS tutaj zamieszczony jest dołączany do strony pliku, także na innych wiki */',
 'upload-disallowed-here' => 'Nie możesz nadpisać tego pliku.',
 
 # File reversion
@@ -2241,7 +2244,7 @@ Zobacz również [[Special:WantedCategories|brakujące kategorie]].',
 'linksearch-ok' => 'Szukaj',
 'linksearch-text' => 'Można użyć symboli wieloznacznych jak „*.wikipedia.org”.
 Wymaga podania co najmniej domeny najwyższego poziomu np. „*.org”.<br />
-Obsługiwane protokoły: <code>$1</code> (jeśli nie podano, domyślny to http://).',
+{{PLURAL:$2|Obsługiwany protokół|Obsługiwane protokoły}}: <code>$1</code> (jeśli nie podano, domyślny to http://).',
 'linksearch-line' => '$1 link na stronie $2',
 'linksearch-error' => 'Symbolu wieloznacznego można użyć wyłącznie na początku nazwy hosta.',
 
@@ -2260,10 +2263,6 @@ Obsługiwane protokoły: <code>$1</code> (jeśli nie podano, domyślny to http:/
 'activeusers-hidesysops' => 'Ukryj administratorów',
 'activeusers-noresult' => 'Nie odnaleziono żadnego użytkownika.',
 
-# Special:Log/newusers
-'newuserlogpage' => 'Nowi użytkownicy',
-'newuserlogpagetext' => 'To jest rejestr ostatnio utworzonych kont użytkowników',
-
 # Special:ListGroupRights
 'listgrouprights' => 'Uprawnienia grup użytkowników',
 'listgrouprights-summary' => 'Poniżej znajduje się spis zdefiniowanych na tej wiki grup użytkowników, z wyszczególnieniem przydzielonych im uprawnień.
@@ -2329,8 +2328,8 @@ Adres e‐mailowy, który został przez Ciebie wprowadzony w [[Special:Preferenc
 'watchnologin' => 'Nie jesteś zalogowany',
 'watchnologintext' => 'Musisz się [[Special:UserLogin|zalogować]] przed modyfikacją listy obserwowanych stron.',
 'addwatch' => 'Dodaj do listy obserwowanych',
-'addedwatchtext' => "Strona „[[:$1|$1]]” została dodana do Twojej [[Special:Watchlist|listy obserwowanych]].
-Każda zmiana treści tej strony lub związanej z nią strony dyskusji zostanie odnotowana na tej liście. Dodatkowo nazwa strony zostanie '''wytłuszczona''' na [[Special:RecentChanges|liście ostatnich zmian]], aby ułatwić Ci zauważenie faktu zmiany.",
+'addedwatchtext' => 'Strona „[[:$1|$1]]” została dodana do Twojej [[Special:Watchlist|listy obserwowanych]].
+Każda zmiana treści tej strony lub związanej z nią strony dyskusji zostanie odnotowana na tej liście.',
 'removewatch' => 'Usuń z listy obserwowanych',
 'removedwatchtext' => 'Strona „[[:$1]]” została usunięta z Twojej [[Special:Watchlist|listy obserwowanych]].',
 'watch' => 'Obserwuj',
@@ -2364,7 +2363,7 @@ Każda zmiana treści tej strony lub związanej z nią strony dyskusji zostanie
 'enotif_subject_moved' => 'Strona projektu {{SITENAME}} o nazwie $1 została przeniesiona przez {{gender:$2|$2}}',
 'enotif_subject_restored' => 'Strona projektu {{SITENAME}} o nazwie $1 została przywrócona przez {{gender:$2|$2}}',
 'enotif_subject_changed' => 'Strona projektu {{SITENAME}} o nazwie $1 została zmieniona przez {{gender:$2|$2}}',
-'enotif_body_intro_deleted' => 'Strona projektu {{SITENAME}} o nazwie $1 została usunięta $PAGEEDITDATE przez {{gender:$2|$2}}, zobacz aktualną wersję na: $3',
+'enotif_body_intro_deleted' => 'Strona projektu {{SITENAME}} o nazwie $1 została usunięta $PAGEEDITDATE przez {{gender:$2|$2}}, zobacz: $3',
 'enotif_body_intro_created' => 'Strona projektu {{SITENAME}} o nazwie $1 została stworzona $PAGEEDITDATE przez {{gender:$2|$2}}, zobacz aktualną wersję na: $3',
 'enotif_body_intro_moved' => 'Strona projektu {{SITENAME}} o nazwie $1 została przeniesiona $PAGEEDITDATE przez {{gender:$2|$2}}, zobacz aktualną wersję na: $3',
 'enotif_body_intro_restored' => 'Strona projektu {{SITENAME}} o nazwie $1 została przywrócona $PAGEEDITDATE przez {{gender:$2|$2}}, zobacz aktualną wersję na: $3',
@@ -2395,6 +2394,8 @@ $UNWATCHURL
 
 Pomoc
 {{canonicalurl:{{MediaWiki:Helppage}}}}',
+'created' => 'utworzona',
+'changed' => 'zmieniona',
 
 # Delete
 'deletepage' => 'Usuń stronę',
@@ -2466,6 +2467,8 @@ Wszystkie aktywne zabezpieczenia odnajdziesz na liście [[Special:ProtectedPages
 'prot_1movedto2' => 'stronę [[$1]] przeniósł do [[$2]]',
 'protect-badnamespace-title' => 'Przestrzeń nazw, w której nie można zabezpieczać stron',
 'protect-badnamespace-text' => 'Stron w tej przestrzeni nazw nie można zabezpieczać.',
+'protect-norestrictiontypes-text' => 'Ta strona nie może być chroniona, gdyż nie ma dla niej żadnych dostępnych typów ograniczeń.',
+'protect-norestrictiontypes-title' => 'Nieblokowalna strona',
 'protect-legend' => 'Potwierdź zabezpieczenie',
 'protectcomment' => 'Powód',
 'protectexpiry' => 'Czas wygaśnięcia',
@@ -2481,7 +2484,7 @@ Obecne ustawienia dla strony '''$1''' to:",
 'protect-default' => 'Dostęp mają wszyscy użytkownicy',
 'protect-fallback' => 'Wymaga uprawnień „$1”',
 'protect-level-autoconfirmed' => 'Blokuj nowych i niezarejestrowanych użytkowników',
-'protect-level-sysop' => 'Dostęp mają tylko administratorzy',
+'protect-level-sysop' => 'Dozwolone tylko dla administratorów',
 'protect-summary-cascade' => 'dziedziczenie',
 'protect-expiring' => 'wygasa $1 (UTC)',
 'protect-expiring-local' => 'wygasa $1',
@@ -2784,7 +2787,7 @@ Blokowanie i odblokowywanie bazy danych, wymaga by plik mógł być zapisywany p
 Pod starym tytułem zostanie umieszczona strona przekierowująca.
 Możesz automatycznie zaktualizować przekierowania wskazujące na tytuł przed zmianą.
 Jeśli nie wybierzesz tej opcji, upewnij się po przeniesieniu strony, czy nie powstały [[Special:DoubleRedirects|podwójne]] lub [[Special:BrokenRedirects|zerwane przekierowania]].
-Jesteś odpowiedzialny za to, by linki w dalszym ciągu pokazywały tam, gdzie powinny.
+Jesteś odpowiedzialny za to, by linki w dalszym ciągu prowadziły tam, gdzie powinny.
 
 Strona '''nie''' zostanie przeniesiona, jeśli strona o nowej nazwie już istnieje, chyba że jest pusta lub jest przekierowaniem i ma pustą historię edycji.
 To oznacza, że błędną operację zmiany nazwy można bezpiecznie odwrócić, zmieniając nową nazwę strony na poprzednią, i że nie można nadpisać istniejącej strony.
@@ -2969,6 +2972,7 @@ Brak katalogu dla plików tymczasowych.',
 'import-error-interwiki' => 'Strona „$1” nie została zaimportowana, ponieważ jej nazwa jest zarezerwowana do linków zewnętrznych (interwiki).',
 'import-error-special' => 'Strona „$1” nie została zaimportowana, ponieważ należy do specjalnej przestrzeni nazw, która nie zezwala na strony.',
 'import-error-invalid' => 'Strona „$1” nie została zaimportowana, ponieważ jej nazwa jest nieprawidłowa.',
+'import-error-unserialize' => 'Wersja $2 strony "$1" nie może zostać odserializowana. Wersja używa modelu treści $3 zserializowanego jako $4',
 'import-options-wrong' => '{{PLURAL:$2|Niepoprawna opcja|Niepoprawne opcje}}: <nowiki>$1</nowiki>',
 'import-rootpage-invalid' => 'Wskazana strona główna jest niepoprawna.',
 'import-rootpage-nosubpage' => 'Przestrzeń nazw "$1" strony głównej nie dopuszcza stron podrzędnych.',
@@ -3075,6 +3079,8 @@ Pozwala na wpisanie powodu w opisie zmian.',
 'print.css' => '/* Umieszczony tutaj kod CSS wpłynie na wygląd wydruku */',
 'handheld.css' => '/* Umieszczony tutaj kod CSS wpłynie na wygląd na urządzeniach kieszonkowych skórki ustawionej w zmiennej $wgHandheldStyle */',
 'noscript.css' => '/* Umieszczony tu arkusz stylów CSS będzie wykorzystywany dla użytkowników z wyłączoną obsługą JavaScript */',
+'group-autoconfirmed.css' => '/* CSS tutaj umieszczony będzie dotyczyć tylko automatycznie zatwierdzonych użytkowników */',
+'group-bot.css' => '/* CSS tutaj umieszczony będzie obowiązywał tylko dla botów */',
 
 # Scripts
 'common.js' => '/* Umieszczony tutaj kod JavaScript zostanie załadowany przez każdego użytkownika, podczas każdego ładowania strony. */',
@@ -3144,6 +3150,7 @@ Najprawdopodobniej zostało to spowodowane przez link do zewnętrznej strony int
 'pageinfo-magic-words' => 'Magiczne {{PLURAL:$1|słowo|słowa|słowa}} ($1)',
 'pageinfo-hidden-categories' => '{{PLURAL:$1|Ukryta kategoria|Ukryte kategorie|Ukryte kategorie}} ($1)',
 'pageinfo-templates' => 'Wykorzystywan{{PLURAL:$1|y szablon|e szablony}} ($1)',
+'pageinfo-transclusions' => 'Dołączona na {{PLURAL:$1|stronie|stronach}} ($1)',
 'pageinfo-toolboxlink' => 'Informacje o tej stronie',
 'pageinfo-redirectsto' => 'Przekierowuje na',
 'pageinfo-redirectsto-info' => 'informacje',
@@ -3152,6 +3159,10 @@ Najprawdopodobniej zostało to spowodowane przez link do zewnętrznej strony int
 'pageinfo-protect-cascading' => 'Zabezpieczona z włączoną opcją dziedziczenia',
 'pageinfo-protect-cascading-yes' => 'Tak',
 'pageinfo-protect-cascading-from' => 'Zabezpieczenie dziedziczone z',
+'pageinfo-category-info' => 'Informacje o kategorii',
+'pageinfo-category-pages' => 'Liczba stron',
+'pageinfo-category-subcats' => 'Liczba podkategorii',
+'pageinfo-category-files' => 'Liczba plików',
 
 # Skin names
 'skinname-standard' => 'Standardowa',
@@ -3209,6 +3220,7 @@ Jeśli go otworzysz, możesz zarazić swój system.",
 'file-nohires' => 'Grafika w wyższej rozdzielczości nie jest dostępna.',
 'svg-long-desc' => 'Plik SVG, nominalnie $1 × $2 pikseli, rozmiar pliku: $3',
 'svg-long-desc-animated' => 'Animowany plik SVG, nominalnie $1 × $2 pikseli, rozmiar pliku: $3',
+'svg-long-error' => 'Nieprawidłowy plik SVG:$1',
 'show-big-image' => 'Pełna rozdzielczość',
 'show-big-image-preview' => 'Rozmiar podglądu – $1.',
 'show-big-image-other' => '{{PLURAL:$2|Inna rozdzielczość|Inne rozdzielczości}}: $1.',
@@ -3241,6 +3253,8 @@ Jeśli go otworzysz, możesz zarazić swój system.",
 'minutes' => '{{PLURAL:$1|$1 minuta|$1 minuty|$1 minut}}',
 'hours' => '{{PLURAL:$1|$1 godzina|$1 godziny|$1 godzin}}',
 'days' => '{{PLURAL:$1|$1 dzień|$1 dni}}',
+'months' => '{{PLURAL:$1|$1 miesiąc|$1 miesiące|$1 miesięcy}}',
+'years' => '{{PLURAL:$1|$1 rok|$1 lata|$1 lat}}',
 'ago' => '$1 temu',
 'just-now' => 'przed chwilą',
 
@@ -3953,7 +3967,7 @@ Grafiki są pokazywane w pełnej rozdzielczości. Inne typy plików są otwieran
 'specialpages-group-highuse' => 'Strony często używane',
 'specialpages-group-pages' => 'Zestawienia stron',
 'specialpages-group-pagetools' => 'Narzędzia stron',
-'specialpages-group-wiki' => 'Informacje oraz narzędzia wiki',
+'specialpages-group-wiki' => 'Informacje i narzędzia',
 'specialpages-group-redirects' => 'Specjalne strony przekierowujące',
 'specialpages-group-spam' => 'Narzędzia do walki ze spamem',
 
@@ -4022,12 +4036,12 @@ Grafiki są pokazywane w pełnej rozdzielczości. Inne typy plików są otwieran
 'sqlite-no-fts' => '$1 bez obsługi pełnotekstowego wyszukiwania',
 
 # New logging system
-'logentry-delete-delete' => '$1 usuwa stronę $3',
-'logentry-delete-restore' => '$1 odtwarza stronę $3',
-'logentry-delete-event' => '$1 zmienia widoczność {{PLURAL:$5|zdarzenia|$5 zdarzeń}} w rejestrze $3, wykonano następujące operacje: $4',
-'logentry-delete-revision' => '$1 zmienia widoczność {{PLURAL:$5|wersji|$5 wersji}} strony $3, wykonano następujące operacje: $4',
-'logentry-delete-event-legacy' => '$1 zmienia widoczność zdarzeń w rejestrze $3',
-'logentry-delete-revision-legacy' => '$1 zmienia widoczność wersji strony $3',
+'logentry-delete-delete' => '$1 {{GENDER:$2|usunął|usunęła}} stronę $3',
+'logentry-delete-restore' => '$1 {{GENDER:$2|odtworzył|odtworzyła}} stronę $3',
+'logentry-delete-event' => '$1 {{GENDER:$2|zmienił|zmieniła}} widoczność {{PLURAL:$5|zdarzenia|$5 zdarzeń}} w rejestrze $3, wykonano następujące operacje: $4',
+'logentry-delete-revision' => '$1 {{GENDER:$2|zmienił|zmieniła}} widoczność {{PLURAL:$5|wersji|$5 wersji}} strony $3, wykonano następujące operacje: $4',
+'logentry-delete-event-legacy' => '$1 {{GENDER:$2|zmienił|zmieniła}} widoczność zdarzeń w rejestrze strony $3',
+'logentry-delete-revision-legacy' => '$1 {{GENDER:$2|zmienił|zmieniła}} widoczność wersji strony $3',
 'logentry-suppress-delete' => '$1 ukrywa stronę $3',
 'logentry-suppress-event' => '$1 potajemnie zmienia widoczność {{PLURAL:$5|zdarzenia|$5 zdarzeń}} w $3, wykonano następujące operacje: $4',
 'logentry-suppress-revision' => '$1 potajemnie zmienia widoczność {{PLURAL:$5|wersji|$5 wersji}} strony $3, wykonano następujące operacje: $4',
@@ -4041,17 +4055,21 @@ Grafiki są pokazywane w pełnej rozdzielczości. Inne typy plików są otwieran
 'revdelete-uname-unhid' => 'wycofano ukrycie nazwy użytkownika',
 'revdelete-restricted' => 'ograniczono widoczność dla administratorów',
 'revdelete-unrestricted' => 'wycofano ograniczenie widoczności dla administratorów',
-'logentry-move-move' => '$1 przenosi stronę $3 do $4',
-'logentry-move-move-noredirect' => '$1 przenosi stronę $3 na $4, bez pozostawienia przekierowania pod starym tytułem',
-'logentry-move-move_redir' => '$1 przenosi stronę $3 na $4 w miejsce przekierowania',
-'logentry-move-move_redir-noredirect' => '$1 przenosi stronę $3 na $4 w miejsce przekierowania i bez pozostawienia przekierowania pod starym tytułem',
-'logentry-patrol-patrol' => '$1 oznacza wersję $4 strony $3 jako sprawdzoną',
-'logentry-patrol-patrol-auto' => '$1 automatycznie oznacza wersję $4 strony $3 jako sprawdzoną',
+'logentry-move-move' => '$1 {{GENDER:$2|przeniósł|przeniosła}} stronę $3 do $4',
+'logentry-move-move-noredirect' => '$1 {{GENDER:$2|przeniósł|przeniosła}} stronę $3 na $4, bez pozostawienia przekierowania pod starym tytułem',
+'logentry-move-move_redir' => '$1 {{GENDER:$2|przeniósł|przeniosła}} stronę $3 na $4 w miejsce przekierowania',
+'logentry-move-move_redir-noredirect' => '$1 {{GENDER:$2|przeniósł|przeniosła}} stronę $3 na $4 w miejsce przekierowania i bez pozostawienia przekierowania pod starym tytułem',
+'logentry-patrol-patrol' => '$1 {{GENDER:$2|oznaczył|oznaczyła}} wersję $4 strony $3 jako sprawdzoną',
+'logentry-patrol-patrol-auto' => '$1 automatycznie {{GENDER:$2|oznaczył|oznaczyła}} wersję $4 strony $3 jako sprawdzoną',
 'logentry-newusers-newusers' => 'Konto użytkownika $1 zostało utworzone',
 'logentry-newusers-create' => 'Konto użytkownika $1 zostało utworzone',
 'logentry-newusers-create2' => 'Konto użytkownika $3 zostało utworzone przez użytkownika $1',
+'logentry-newusers-byemail' => 'Konto $3 zostało utworzone przez użytkownika $1, hasło wysłano e-mailem',
 'logentry-newusers-autocreate' => '$1 automatycznie tworzy konto użytkownika',
-'newuserlog-byemail' => 'hasło zostało wysłane e‐mailem',
+'logentry-rights-rights' => '$1 {{GENDER:$2|zmienił|zmieniła}} przynależność $3 do grup ($4 → $5)',
+'logentry-rights-rights-legacy' => '$1 {{GENDER:$2|zmienił|zmieniła}} przynależność $3 do grup',
+'logentry-rights-autopromote' => '$1 automatycznie {{GENDER:$2|zmienił|zmieniła}} przynależność ($4 → $5)',
+'rightsnone' => 'brak',
 
 # Feedback
 'feedback-bugornote' => 'Jeśli jesteś {{GENDER:|gotów|gotowa}} szczegółowo opisać problem techniczny proszę [$1 zgłoś błąd].
@@ -4105,6 +4123,7 @@ W przeciwnym wypadku można użyć prostego formularza poniżej. Komentarz zosta
 'api-error-ok-but-empty' => 'Błąd wewnętrzny – brak odpowiedzi od serwera.',
 'api-error-overwrite' => 'Nadpisanie istniejącego pliku nie jest dopuszczalne.',
 'api-error-stashfailed' => 'Błąd wewnętrzny – serwer nie mógł zapisać pliku tymczasowego.',
+'api-error-publishfailed' => 'Błąd wewnętrzny: serwer nie mógł zapisać pliku tymczasowego.',
 'api-error-timeout' => 'Serwer nie odpowiedział w oczekiwanym czasie.',
 'api-error-unclassified' => 'Wystąpił nieznany błąd',
 'api-error-unknown-code' => 'Błąd nieznany – „$1”',
@@ -4125,6 +4144,4 @@ W przeciwnym wypadku można użyć prostego formularza poniżej. Komentarz zosta
 'duration-centuries' => '$1 {{PLURAL:$1|stulecie|stulecia|stuleci}}',
 'duration-millennia' => '$1 {{PLURAL:$1|tysiąclecie|tysiąclecia|tysiącleci}}',
 
-# Unknown messages
-'svg-long-error' => 'Nieprawidłowy plik SVG:$1',
 );
index be7ecca..058870e 100644 (file)
@@ -74,7 +74,7 @@ $messages = array(
 'tog-externaleditor' => "Dovré coma stàndard n'editor estern (mach për espert, a-i é dabzògn d'ampostassion speciaj dzora a sò ordinator. [//www.mediawiki.org/wiki/Manual:External_editors Për savèjne ëd pi.])",
 'tog-externaldiff' => "Dovré për stàndard un programa comparator estern (mach për espert, a-i é dabzògn d'ampostassion speciaj ansima a sò ordinator [//www.mediawiki.org/wiki/Manual:External_editors Për savèjne ëd pi.])",
 'tog-showjumplinks' => 'Dovré j\'anliure d\'acessibilità dla sòrt "Va a"',
-'tog-uselivepreview' => "Dovré la fonsion ''Preuva dal viv'' (a-i va JavaScript e a l'é mach sperimental)",
+'tog-uselivepreview' => "Dovré la fonsion ''Preuva dal viv'' (a-i va JavaScript) (sperimental)",
 'tog-forceeditsummary' => "Ciama conferma se ël somari dla modìfica a l'é veujd",
 'tog-watchlisthideown' => 'Stërma mie modìfiche ant la ròba che im ten-o sot euj',
 'tog-watchlisthidebots' => 'Stërma le modìfiche fàite daj trigomiro ant la lista dle ròbe che im ten-o sot euj',
@@ -175,6 +175,7 @@ $messages = array(
 'newwindow' => '(as deurb ant na fnestra neuva)',
 'cancel' => 'Scancela',
 'moredotdotdot' => 'Dë pì...',
+'morenotlisted' => 'Autr pa listà...',
 'mypage' => 'Pàgina',
 'mytalk' => 'Ciaciarade',
 'anontalk' => "Ciaciarade për st'adrëssa IP-sì",
@@ -547,6 +548,7 @@ Për piasì speta prima ëd prové torna.",
 # E-mail sending
 'php-mail-error-unknown' => 'Eror pa conossù ant la funsion PHP mail()',
 'user-mail-no-addy' => 'Provà a spedì un mëssagi sensa adrëssa ëd pòsta eletrònica.',
+'user-mail-no-body' => 'Preuva a mandé un corel con un còrp veuid o motobin curt.',
 
 # Change password dialog
 'resetpass' => 'Cambia la ciav',
@@ -605,6 +607,7 @@ Ciav a temp: $2',
 'changeemail-oldemail' => 'Adrëssa ëd pòsta eletrònica atual:',
 'changeemail-newemail' => 'Adrëssa ëd pòsta eletrònica neuva:',
 'changeemail-none' => '(gnun)',
+'changeemail-password' => 'Toa ciav ëd {{SITENAME}}:',
 'changeemail-submit' => "Cangé l'adrëssa ëd pòsta eletrònica",
 'changeemail-cancel' => 'Scancela',
 
@@ -781,7 +784,6 @@ L'ùltima vos dël registr a l'é smonùa sì-sota për arferiment:",
 'template-semiprotected' => '(mes-protet)',
 'hiddencategories' => 'Sta pàgina-sì a fa part ëd {{PLURAL:$1|na categorìa|$1 categorìe}} stërmà:',
 'edittools' => "<!-- Test ch'a së s-ciàira sot a ij mòduj ëd mòdifica e 'd càrich d'archivi. -->",
-'nocreatetitle' => 'Creassion ëd pàgine limità',
 'nocreatetext' => "Cost sit-sì a l'ha limità la possibilità ëd creé dle pàgine neuve.
 A peul torné andaré e modifiché na pàgina che a-i é già, ò pura [[Special:UserLogin|rintré ant ël sistema ò deurb-se un cont]].",
 'nocreate-loggedin' => "A l'ha pa ij përmess për creé dle pàgine neuve.",
@@ -1179,9 +1181,9 @@ Sòn a peul pa esse anulà.',
 'prefs-emailconfirm-label' => "Conferma dl'adrëssa ëd pòsta eletrònica:",
 'prefs-textboxsize' => 'Dimension ëd la fnestra ëd modìfica',
 'youremail' => 'Soa adrëssa ëd pòsta eletrònica:',
-'username' => 'Stranòm:',
-'uid' => "ID dl'utent:",
-'prefs-memberingroups' => 'Mèmber {{PLURAL:$1|dla partìa|dle partìe}}:',
+'username' => '{{GENDER:$1|Stranòm}}:',
+'uid' => "Identificativ dl'{{GENDER:$1|utent}}:",
+'prefs-memberingroups' => '{{GENDER:$2|Mèmber}} {{PLURAL:$1|dla partìa|dle partìe}}:',
 'prefs-memberingroups-type' => '$1',
 'prefs-registration' => 'Data ëd registrassion:',
 'prefs-registration-date-time' => '$1',
@@ -1333,15 +1335,13 @@ Costa anformassion a sarà pùblica.",
 'right-sendemail' => "Mandé un mëssagi an pòsta eletrònica a j'àutri utent",
 'right-passwordreset' => 'Vëdde ij mëssagi ëd pòsta eletrònica ëd riampostassion dle ciav',
 
+# Special:Log/newusers
+'newuserlogpage' => "Registr dla creassion dj'utent",
+'newuserlogpagetext' => "Sossì a l'é un registr andova ch'as marco le creassion dj'utent.",
+
 # User rights log
 'rightslog' => "Argistr dij drit ëd j'utent",
 'rightslogtext' => "Costa a l'é na lista dij cambiament aj drit ëd j'utent.",
-'rightslogentry' => "a l'ha tramudà $1 da 'nt la partìa $2 a la partìa $3",
-'rightslogentry-autopromote' => "a l'é stàit automaticament promovù da $2 a $3",
-'logentry-rights-rights' => "$1 a l'ha tramudà l'apartenesa a la partìa për $3 da $4 a $5",
-'logentry-rights-rights-legacy' => "$1 a l'ha tramudà l'apartenensa a la partìa për $3",
-'logentry-rights-autopromote' => "$1 a l'é stàit automaticament promovù da $4 a $5",
-'rightsnone' => '(gnun)',
 
 # Associated actions - in the sentence "You do not have permission to X"
 'action-read' => 'lese sta pàgina-sì',
@@ -1473,7 +1473,7 @@ Beiché la [[Special:NewFiles|galarìa dj'archivi neuv]] për na presentassion p
 'filetype-unwanted-type' => "'''\".\$1\"''' a l'é na sòrt d'archivi ch'as pija nen ëd bon-a veuja.
 {{PLURAL:\$3|La sòrt preferìa a l'é|Le sòrt preferìe a son}} \$2.",
 'filetype-banned-type' => "'''\".\$1\"''' {{PLURAL:\$4|a l'é na sòrt d'archivi proibìa|a son ëd sòrt d'archivi proibìe}}.
-{{PLURAL:\$3|Sòrt d'archivi consentìa a l'é|Sòrt d'archivi consentìe a son}} \$2.",
+{{PLURAL:\$3|La sòrt d'archivi consentìa a l'é|Le sòrt d'archivi consentìe a son}} \$2.",
 'filetype-missing' => "A l'archivi a-j manca l'estension (pr'esempi \".jpg\").",
 'empty-file' => "L'archivi ch'a l'ha mandà a l'era veuid.",
 'file-too-large' => "L'archivi ch'a l'ha mandà a l'era tròp gròss.",
@@ -1570,7 +1570,7 @@ $1",
 Për piasì, ch'as butà an comunicassion con n'[[Special:ListUsers/sysop|aministrator]].",
 'upload-misc-error' => "Eror nen identificà antramentr ch'as cariava",
 'upload-misc-error-text' => "A l'é staie n'eror nen identificà dëmentrè ch'as cariava chèich-còs.
-Për piasì, ch'a varda che soa anliura a sia bon-a e che a l'arsponda e peuj ch'a preuva torna.
+Për piasì, ch'a varda che soa anliura a sia bon-a e che a sponda e peuj ch'a preuva torna.
 Se a-i riva sossì n'àotra vira, ch'as buta an comunicassion con n'[[Special:ListUsers/sysop|aministrator]].",
 'upload-too-many-redirects' => "L'adrëssa dl'aragnà a l'avìa tròpe ridiression",
 'upload-unknown-size' => 'Dimension pa conossùa',
@@ -1668,10 +1668,10 @@ Për na sicurëssa otimal, img_auth.php a l'é disabilità.",
 'http-bad-status' => "A l'é staje un problema durant l'arcesta HTTP: $1 $2",
 
 # Some likely curl errors. More could be added from <http://curl.haxx.se/libcurl/c/libcurl-errors.html>
-'upload-curl-error6' => "L'anliura a l'arspond pa",
+'upload-curl-error6' => "L'anliura a spond pa",
 'upload-curl-error6-text' => "L'anliura che a l'ha butà a marcia pa. Për piasì, ch'a contròla che st'anliura a sia scrita giusta e che ël sit a marcia.",
 'upload-curl-error28' => "A l'é finìje ël temp ch'as peul dovresse për carié",
-'upload-curl-error28-text' => "Ël sit a-i buta tròp temp a arsponde. Për piasì, ch'a contròla che a l'é an pé, ch'a speta na minuta e peuj che a torna a prové. A peul esse che a-j ven-a a taj serne un moment che ës sit a sia nen tant carià ëd tràfich.",
+'upload-curl-error28-text' => "Ël sit a-i buta tròp temp a sponde. Për piasì, ch'a contròla che a l'é an pé, ch'a speta na minuta e peuj che a torna a prové. A peul esse che a-j ven-a a taj serne un moment che ës sit a sia nen tant carià ëd tràfich.",
 
 'license' => 'Licensa:',
 'license-header' => 'Licensa',
@@ -1973,7 +1973,7 @@ Ch'a bèica ëdcò [[Special:WantedCategories|le categorìe domandà]].",
 'linksearch-ok' => 'Sërché',
 'linksearch-text' => 'As peulo dovresse dij ciapatut com "*.wikipedia.org".
 A-i é dabzògn almanch d\'un domini a livel pi àut, për esempi "*.org".<br />
-Protocòj ch\'as peulo dovresse: <code>$1</code> (predefinì http:// se gnun protocòj a son specificà).',
+{{PLURAL:$2|Protocòl|Protocòj}} ch\'as peulo dovresse: <code>$1</code> (predefinì http:// se gnun protocòj a son specificà).',
 'linksearch-line' => "$1 a l'ha n'anliura ch'a-j riva dzora da $2",
 'linksearch-error' => 'Ij ciapatut as peulo butesse mach an prinsipi dël nòm dël sërvent.',
 
@@ -1992,10 +1992,6 @@ Protocòj ch\'as peulo dovresse: <code>$1</code> (predefinì http:// se gnun pro
 'activeusers-hidesysops' => "Stërmé j'aministrator",
 'activeusers-noresult' => 'Pa gnun utent trovà.',
 
-# Special:Log/newusers
-'newuserlogpage' => "Registr dla creassion dj'utent",
-'newuserlogpagetext' => "Sossì a l'é un registr andova ch'as marco le creassion dj'utent.",
-
 # Special:ListGroupRights
 'listgrouprights' => "Drit dël grup d'utent",
 'listgrouprights-summary' => "Ambelessì a-i é na lista dle partìe d'utent definìe ansima a costa wiki, con ij sò drit d'acess associà.
@@ -2054,7 +2050,7 @@ L'adrëssa ëd pòsta eletrònica ch'a l'ha butà ant ij [[Special:Preferences|s
 'usermessage-editor' => 'Mëssagerìa ëd sistema',
 
 # Watchlist
-'watchlist' => 'Ròba che im ten-o sot-euj',
+'watchlist' => 'Ròba che as ten sot euj',
 'mywatchlist' => 'Ròba che as ten sot euj',
 'watchlistfor2' => 'Për $1 $2',
 'nowatchlist' => "A l'ha ancó pa marcà dj'artìcoj coma ròba da tnì sot-euj.",
@@ -2063,8 +2059,8 @@ L'adrëssa ëd pòsta eletrònica ch'a l'ha butà ant ij [[Special:Preferences|s
 'watchnologintext' => "A l'ha da manca prima ëd tut ëd [[Special:UserLogin|rintré ant ël sistema]]
 për podèj modifiché soa lista dla ròba dë tnì sot-euj.",
 'addwatch' => "Gionté a la lista ëd lòn ch'as ten sot-euj",
-'addedwatchtext' => 'La pàgina  "[[:$1]]" a l\'é staita giontà a soa [[Special:Watchlist|lista dla ròba da tnì sot-euj]].
-Le modìfiche che a-i vniran ant costa pàgina-sì e ant soa pàgina ëd discussion a saran listà ambelessì, e la pàgina a së s-ciairërà ën <b>grassèt</b> ant la pàgina ëd j\'[[Special:RecentChanges|ùltime modìfiche]] përchè che a resta belfé a ten-la d\'euj.',
+'addedwatchtext' => "La pàgina «[[:$1]]» a l'é staita giontà a soa [[Special:Watchlist|lista dla ròba da tnì sot-euj]].
+Le modìfiche che a-i saran ant costa pàgina-sì e ant soa pàgina ëd discussion a saran listà ambelessì.",
 'removewatch' => "Gavé da la lista ëd lòn ch'as ten sot-euj",
 'removedwatchtext' => "La pàgina «[[:$1]]» a l'è staita gavà via da [[Special:Watchlist|soa lista dla ròba da tnì sot-euj]].",
 'watch' => 'ten-e sot-euj',
@@ -2098,7 +2094,7 @@ Le modìfiche che a-i vniran ant costa pàgina-sì e ant soa pàgina ëd discuss
 'enotif_subject_moved' => "La pàgina $1 ëd {{SITENAME}} a l'é stàita tramudà da {{gender:$2|$2}}",
 'enotif_subject_restored' => "La pàgina $1 ëd {{SITENAME}} a l'é stàita ripristinà da {{gender:$2|$2}}",
 'enotif_subject_changed' => "La pàgina $1 ëd {{SITENAME}} a l'é stàita modificà da {{gender:$2|$2}}",
-'enotif_body_intro_deleted' => 'La pàgina $1 ëd {{SITENAME}} a l\'é stàita scancelà da {{gender:$2|$2}} ël $PAGEEDITDATE, vëdde $3 për la revision corenta.',
+'enotif_body_intro_deleted' => 'La pàgina $1 ëd {{SITENAME}} a l\'é stàita scancelà da {{gender:$2|$2}} ël $PAGEEDITDATE, vëdde $3.',
 'enotif_body_intro_created' => 'La pàgina $1 ëd {{SITENAME}} a l\'é stàita creà da {{gender:$2|$2}} ël $PAGEEDITDATE, vëdde $3 për la revision corenta.',
 'enotif_body_intro_moved' => 'La pàgina $1 ëd {{SITENAME}} a l\'é stàita tramudà da {{gender:$2|$2}} ël $PAGEEDITDATE, vëdde $3 për la revision corenta.',
 'enotif_body_intro_restored' => 'La pàgina $1 ëd {{SITENAME}} a l\'é stàita ripristinà da {{gender:$2|$2}} ël $PAGEEDITDATE, vëdde $3 për la revision corenta.',
@@ -2132,6 +2128,8 @@ $UNWATCHURL
 
 Comunicassion ëd servissi e pì d\'agiut:
 {{canonicalurl:{{MediaWiki:Helppage}}}}',
+'created' => 'creà',
+'changed' => 'modificà',
 
 # Delete
 'deletepage' => 'Scancelé la pàgina',
@@ -2201,6 +2199,8 @@ Ch'a varda la [[Special:ProtectedPages|Lista dle pàgine protegiùe]] për la li
 'prot_1movedto2' => '[[$1]] tramudà a [[$2]]',
 'protect-badnamespace-title' => 'Spassi nominal pa protegìbil',
 'protect-badnamespace-text' => 'Le pàgine an cost ëspassi nominal-sì a peulo pa esse protegiùe.',
+'protect-norestrictiontypes-text' => 'Sta pagina a peul pa esse protegiùa përchè a-i son gnun-e sòrt ëd restrission disponìbij.',
+'protect-norestrictiontypes-title' => 'Pagina pa protegìbila',
 'protect-legend' => 'Che an conferma la protession',
 'protectcomment' => 'Rason:',
 'protectexpiry' => 'Scadensa:',
@@ -2215,9 +2215,9 @@ Ambelessì a-i son le regolassion corente për la pàgina '''$1''':",
 Ambelessì a-i son j'ampostassion atuaj për la pàgina '''$1''':",
 'protect-cascadeon' => "Sta pàgina për adess a l'é blocà përchè a-i intra ant {{PLURAL:$1|la pàgina sì-sota, ch'a l'ha|le-pàgine sì sota, ch'a l'han}} na protession a sàut anvisca. A peul cambie-je sò livel ëd protession a sta pàgina-sì ma lòn a tochërà pa la protession a sàut.",
 'protect-default' => "Autorisé tùit j'utent",
-'protect-fallback' => 'A-i va ël përmess «$1»',
-'protect-level-autoconfirmed' => "Bloca j'utent neuv e coj nen registrà",
-'protect-level-sysop' => "mach për j'aministrator",
+'protect-fallback' => "Përmëtt mach a j'utent con ël përmess «$1»",
+'protect-level-autoconfirmed' => "Përmëtt mach j'utent autoconfirmà",
+'protect-level-sysop' => "Përmëtt mach a j'aministrator",
 'protect-summary-cascade' => 'a sàut',
 'protect-expiring' => 'scadensa: $1 (UTC)',
 'protect-expiring-local' => 'a finiss ai $1',
@@ -2705,6 +2705,7 @@ Për piasì, ch'a preuva torna.",
 'import-error-interwiki' => "La pàgina «$1» a l'é pa amportà përchè sò nòm a l'é arzervà për na liura esterna (antërwiki).",
 'import-error-special' => "La pàgina «$1» a l'é pa amportà përchè a ponta a në spassi nominal ch'a përmët pa dle pàgine.",
 'import-error-invalid' => "La pàgina «$1» a l'é pa amportà përchè sò nòm a l'é pa bon.",
+'import-error-unserialize' => "La revision $2 dla pagina «$1» a peul pa esse desserialisà. La revision a l'era arportà përchè a deuvra ël model ëd contnù $3 serialisà com $4.",
 'import-options-wrong' => '{{PLURAL:$2|Opsion|Opsion}} sbalià: <nowiki>$1</nowiki>',
 'import-rootpage-invalid' => "La pàgina prinsipal dàita a l'é un tìtol pa bon.",
 'import-rootpage-nosubpage' => 'Lë spassi nominal «$1» ëd la pàgina prinsipal a përmët pa dle sot-pagine.',
@@ -2862,6 +2863,7 @@ Sòn a l'é motobin belfé che a sia rivà përchè a-i era n'anliura a un sit e
 'pageinfo-magic-words' => '{{PLURAL:$1|Paròla màgica|Paròle màgiche}} ($1)',
 'pageinfo-hidden-categories' => '{{PLURAL:$1|Categorìa|Categorìe}} stërmà ($1)',
 'pageinfo-templates' => '{{PLURAL:$1|stamp contnù|stamp contnù}} ($1)',
+'pageinfo-transclusions' => '{{PLURAL:$1|Pagina|Pagine}} transcludùe dzor ($1)',
 'pageinfo-toolboxlink' => 'Anformassion an sla pàgina',
 'pageinfo-redirectsto' => 'Ridiression-a a',
 'pageinfo-redirectsto-info' => 'anformassion',
@@ -2870,6 +2872,10 @@ Sòn a l'é motobin belfé che a sia rivà përchè a-i era n'anliura a un sit e
 'pageinfo-protect-cascading' => 'Le protession a son a cascada da sì',
 'pageinfo-protect-cascading-yes' => 'É!',
 'pageinfo-protect-cascading-from' => 'Le protession a son a cascada da',
+'pageinfo-category-info' => 'Anformassion ëd categorìa',
+'pageinfo-category-pages' => 'Nùmer ëd pàgine',
+'pageinfo-category-subcats' => 'Nùmer ëd sotcategorìe',
+'pageinfo-category-files' => "Nùmer d'archivi",
 
 # Patrolling
 'markaspatrolleddiff' => 'Marché coma verificà',
@@ -2916,6 +2922,7 @@ An fasend-lo marcé ansima a sò ordinator chiel a podrìa porteje ëd dann a s
 'file-nohires' => 'Gnun-a risolussion pì bela disponìbil.',
 '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-preview' => 'Amzure dë sta preuva: $1.',
 'show-big-image-other' => '{{PLURAL:$2|Àutra arzolussion|Àutre arzolussion}}: $1.',
@@ -2945,6 +2952,8 @@ An fasend-lo marcé ansima a sò ordinator chiel a podrìa porteje ëd dann a s
 'minutes' => '{{PLURAL:$1|$1 minuta|$1 minute}}',
 'hours' => '{{PLURAL:$1|$1 ora|$1 ore}}',
 'days' => '{{PLURAL:$1|$1 di|$1 di}}',
+'months' => '{{PLURAL:$1|$1 mèis}}',
+'years' => '{{PLURAL:$1|$1 ann|$1 agn}}',
 'ago' => '$1 fa',
 'just-now' => 'pròpi adess',
 
@@ -3516,8 +3525,7 @@ Ch'a preuva an manera sòlita.",
 
 # Friendlier slave lag warnings
 'lag-warn-normal' => 'Le modìfiche pì neuve ëd $1 {{PLURAL:$1|second}} a podrìo nen ess-ie ant sta lista-sì.',
-'lag-warn-high' => "Për via che la màchina serventa a tarda a dene d'arspòsta, le modìfiche fàite men che $1 {{PLURAL:$1|second}} fa
-a podrìo ëdcò nen ess-ie ant sta lista-sì.",
+'lag-warn-high' => "Për via che la màchina serventa a tarda a dene 'd rispòste, le modìfiche fàite men che $1 {{PLURAL:$1|second}} fa a podrìo ëdcò nen ess-ie ant sta lista-sì.",
 
 # Watchlist editor
 'watchlistedit-numitems' => "A l'é antramentr ch'a ten sot-euj {{PLURAL:$1|1 tìtol|$1 tìtoj}}, nen contand le pàgine ëd discussion.",
@@ -3683,18 +3691,18 @@ Le figure a së smon-o a amzura pijn-a, j'àotre sòrt d'archivi a ven-o fàite
 'dberr-info' => '(Conession al servent ëd base ëd dàit impossìbil: $1)',
 'dberr-usegoogle' => 'Antratant a peul prové a sërché con Google.',
 'dberr-outofdate' => "Ch'a ten-a da ment che soe indesassion dij nòstri contnù a podrìo esse nen agiornà.",
-'dberr-cachederror' => 'Sta sì a l\'ìé na còpia an "cache" ëd la pàgina ciamà, e a peul esse pa agiornà.',
+'dberr-cachederror' => "Costa-sì a l'é na còpia an memòria local ëd la pàgina ciamà, e a peul esse nen agiornà.",
 
 # HTML forms
-'htmlform-invalid-input' => 'A-i son dij problema con cheidun dij tò input',
-'htmlform-select-badoption' => "Ël valor che it l'has spessificà a l'é n'opsion pa vàlida.",
-'htmlform-int-invalid' => "Ël valor ch'it l'has spessificà a l'é pa n'antregh.",
-'htmlform-float-invalid' => "Ël valor ch'it l'has spessificà a l'é pa un nùmer.",
-'htmlform-int-toolow' => "Ël valor ch'it l'has spessificà a l'é sota al mìnim ëd $1.",
-'htmlform-int-toohigh' => "Ël valor ch'it l'has spessificà a l'é dzora dël màssim ëd $1.",
+'htmlform-invalid-input' => "A-i son dij problema con cheidun dij valor ch'a l'ha butà",
+'htmlform-select-badoption' => "Ël valor che a l'ha spessificà a l'é pa n'opsion vàlida.",
+'htmlform-int-invalid' => "Ël valor ch'a l'ha spessificà a l'é pa n'antregh.",
+'htmlform-float-invalid' => "Ël valor ch'a l'ha spessificà a l'é pa un nùmer.",
+'htmlform-int-toolow' => "Ël valor ch'a l'ha spessificà a l'é sota al mìnim ëd $1.",
+'htmlform-int-toohigh' => "Ël valor ch'a l'ha spessificà a l'é dzora al màssim ëd $1.",
 'htmlform-required' => 'A-i é dabzògn ëd cost valor',
-'htmlform-submit' => 'Spediss',
-'htmlform-reset' => 'Scansela ij cambiament',
+'htmlform-submit' => 'Mandé',
+'htmlform-reset' => 'Gavé le modìfiche',
 'htmlform-selectorother-other' => 'Àutr',
 
 # SQLite database support
@@ -3704,14 +3712,14 @@ Le figure a së smon-o a amzura pijn-a, j'àotre sòrt d'archivi a ven-o fàite
 # New logging system
 'logentry-delete-delete' => "$1 a l'ha scancelà la pàgina $3",
 'logentry-delete-restore' => "$1 a l'ha ripristinà la pàgina $3",
-'logentry-delete-event' => "$1 cangià la visibilità ëd {{PLURAL:$5|n'event dël registr|$5 event dël registr}} dzora $3: $4",
+'logentry-delete-event' => "$1 a l'ha modificà la visibilità ëd {{PLURAL:$5|n'event dël registr|$5 event dël registr}} dzora $3: $4",
 'logentry-delete-revision' => "$1 a l'ha modificà la visibilità ëd {{PLURAL:$5|na revision|$5 revision}} dzora la pàgina $3: $4",
-'logentry-delete-event-legacy' => "$1 cangià la visibilità dj'event dël registr dzora $3",
+'logentry-delete-event-legacy' => "$1 a l'ha modificà la visibilità dj'eveniment dël registr dzora $3",
 'logentry-delete-revision-legacy' => "$1 a l'ha modificà la visibilità dle revision dzora la pàgina $3",
 'logentry-suppress-delete' => "$1 a l'ha eliminà la pàgina $3",
-'logentry-suppress-event' => "$1 cangià segretament la visibilità ëd {{PLURAL:$5|n'event dël registr|$5 event dël registr}} dzora $3: $4",
+'logentry-suppress-event' => "$1 a l'ha modificà segretament la visibilità ëd {{PLURAL:$5|n'eveniment dël registr|$5 eveniment dël registr}} dzora $3: $4",
 'logentry-suppress-revision' => "$1 a l'ha modificà segretament la visibilità ëd {{PLURAL:$5|na revision|$5 revision}} dzora la pàgina $3: $4",
-'logentry-suppress-event-legacy' => "$1 cangià segretament la visibilità dj'event dël registr dzora $3",
+'logentry-suppress-event-legacy' => "$1 l'ha modificà segretament la visibilità dj'evenimentt dël registr dzora $3",
 'logentry-suppress-revision-legacy' => "$1 a l'ha modificà segretament la visibilità dle revision dzora la pàgina $3",
 'revdelete-content-hid' => 'contnù stërmà',
 'revdelete-summary-hid' => 'resumé dle modìfiche stërmà',
@@ -3719,7 +3727,7 @@ Le figure a së smon-o a amzura pijn-a, j'àotre sòrt d'archivi a ven-o fàite
 'revdelete-content-unhid' => 'contnù dëscoatà',
 'revdelete-summary-unhid' => 'resumé dle modìfiche dëscoatà',
 'revdelete-uname-unhid' => 'stranòm dëscoatà',
-'revdelete-restricted' => "a l'ha aplicà le restrission a j'aministrator",
+'revdelete-restricted' => "restrission aplicà a j'aministrator",
 'revdelete-unrestricted' => "restrission për j'aministrator gavà",
 'logentry-move-move' => "$1 a l'ha tramudà la pàgina $3 a $4",
 'logentry-move-move-noredirect' => "$1 a l'ha tramudà la pàgina $3 a $4 sensa lassé na ridiression",
@@ -3731,66 +3739,69 @@ Le figure a së smon-o a amzura pijn-a, j'àotre sòrt d'archivi a ven-o fàite
 'logentry-newusers-create' => "Ël cont utent $1 a l'é stàit creà",
 'logentry-newusers-create2' => "Ël cont utent $3 a l'é stàit creà da $1",
 'logentry-newusers-autocreate' => "Ël cont $1 a l'é stàit creà an automàtich",
-'newuserlog-byemail' => 'ciav spedìa për pòsta eletrònica',
+'logentry-rights-rights' => "$1 a l'ha tramudà l'apartenesa a la partìa për $3 da $4 a $5",
+'logentry-rights-rights-legacy' => "$1 a l'ha tramudà l'apartenensa a la partìa për $3",
+'logentry-rights-autopromote' => "$1 a l'é stàit automaticament promovù da $4 a $5",
+'rightsnone' => '(gnun)',
 
 # Feedback
-'feedback-bugornote' => 'S\'a ses pront a descrive un problema técnich an detaj, për piasì ch\'a [$1 signala un bigat]. 
-Dësnò, a peule dovré ël formlari semplificà sì-sota. Sò coment a sarà giontà a la pàgina "[$3 $2]", con sò stranòm e ël navigador che chiel a deuvra.',
+'feedback-bugornote' => "S'a l'é pront a descrive un problema técnich an detaj, për piasì ch'a [$1 signala un bigat]. 
+Dësnò, a peul dovré ël formolari semplificà sì-sota. Sò coment a sarà giontà a la pàgina «[$3 $2]», con sò stranòm.",
 'feedback-subject' => 'Soget:',
 'feedback-message' => 'Mëssagi:',
-'feedback-cancel' => 'Scancela',
+'feedback-cancel' => 'Anulé',
 'feedback-submit' => 'Spedì ij coment',
 'feedback-adding' => 'Gionta dij coment a la pàgina...',
-'feedback-error1' => 'Eror: Arzultà pa arconossù da API',
+'feedback-error1' => "Eror: Arzultà ëd l'API nen arconossù",
 'feedback-error2' => 'Eror: Modìfica falìa',
-'feedback-error3' => 'Eror: Pa gnun-e arspòste da API',
-'feedback-thanks' => 'Mersì! Sò coment a l\'é stàit publicà an sla pàgina "[$1 $2]".',
+'feedback-error3' => "Eror: gnun-e rispòste da l'API",
+'feedback-thanks' => 'Mersì! Sò coment a l\'é stàit publicà an sla pàgina "[$2 $1]".',
 'feedback-close' => 'Fàit',
 'feedback-bugcheck' => "Bin fàit! Ch'a contròla mach ch'a sia pa già un dij [$1 bigat conossù].",
-'feedback-bugnew' => "I l'heu controlà. Arpòrta n'eror neuv.",
+'feedback-bugnew' => "I l'heu controlà. Signalé n'eror neuv.",
 
 # Search suggestions
-'searchsuggest-search' => 'Arserca',
+'searchsuggest-search' => 'Arserc',
 'searchsuggest-containing' => 'contenent ...',
 
 # API errors
-'api-error-badaccess-groups' => "Chiel a peul pa carié d'archivi su sta wiki.",
+'api-error-badaccess-groups' => "Chiel a peul pa carié d'archivi su costa wiki.",
 'api-error-badtoken' => 'Eror antern: sìmbol pa bon.',
-'api-error-copyuploaddisabled' => "Ël càrigh a travers ëd n'anliura a l'é disabilità su cost sërvent.",
-'api-error-duplicate' => "A-i {{PLURAL:$1|é [$2 n'àutr archivi]|son [$2 d'àutr archivi]}} già an sël sit col ël midem contnù",
-'api-error-duplicate-archive' => "A-i {{PLURAL:$1|era [$2 n'àutr archivi]|ero [$2 àutri archivi]}} già an sël sit con ël midem contnù, ma {{PLURAL:$1|a l'é stàit|a son stàit}} ëscancelà.",
+'api-error-copyuploaddisabled' => 'Le carie a travers ëd liure a son disabilità ansima a cost servent.',
+'api-error-duplicate' => "A-i {{PLURAL:$1|é [$2 n'àutr archivi]|son [$2 àutri archivi]}} già an sël sit col ël midem contnù.",
+'api-error-duplicate-archive' => "A-i {{PLURAL:$1|era [$2 n'àutr archivi]|ero [$2 àutri archivi]}} già an sël sit con ël midem contnù, ma {{PLURAL:$1|a l'é stàit|a son ëstàit}} ëscancelà.",
 'api-error-duplicate-archive-popup-title' => "Dupliché {{PLURAL:$1|l'archivi|j'archivi}} ch'a son già stàit ëscancelà",
 'api-error-duplicate-popup-title' => "Dupliché {{PLURAL:$1|l'archivi|j'archivi}}",
 'api-error-empty-file' => "L'archivi ch'a l'ha mandà a l'era veuid.",
-'api-error-emptypage' => "La creassion ëd pagine neuve veujde a l'é pa përmëttùa.",
-'api-error-fetchfileerror' => "Eror antern: quaicòs a l'é andàit mal an mente as arcuperava l'archivi",
+'api-error-emptypage' => "La creassion ëd pàgine neuve veujde a l'é nen përmëttùa.",
+'api-error-fetchfileerror' => "Eror antern: quaicòs a l'é andàit mal antramentre ch'as arcuperava l'archivi.",
 'api-error-fileexists-forbidden' => "N'archivi con nòm «$1» a esist già, e a peul pa esse dzorascrivù.",
-'api-error-fileexists-shared-forbidden' => 'N\'archivi con nòm "$1" a esist già ant ël depòsit condivis ëd j\'archivi, e a peul pa esse dzorascrivù.',
+'api-error-fileexists-shared-forbidden' => "N'archivi con nòm «$1» a esist già ant ël depòsit condivis ëd j'archivi, e a peul pa esse dzorascrivù.",
 'api-error-file-too-large' => "L'archivi ch'a l'ha mandà a l'era tròp gròss.",
 'api-error-filename-tooshort' => "Ël nòm ëd l'archivi a l'é tròp curt.",
 'api-error-filetype-banned' => "Costa sòrt d'archivi a l'é proibìa.",
-'api-error-filetype-banned-type' => "$1 {{PLURAL:$4|a l'é na sòrt d'archivi proibìa|a son ëd sòrt d'archivi proibìe}}. {{PLURAL:$3|Sòrt d'archivi consentìa a l'é|Sòrt d'archivi consentìe a son}} $2.",
+'api-error-filetype-banned-type' => "$1 {{PLURAL:$4|a l'é na sòrt d'archivi proibìa|a son ëd sòrt d'archivi proibìe}}. {{PLURAL:$3|La sòrt d'archivi consentìa a l'é|Le sòrt d'archivi consentìe a son}} $2.",
 'api-error-filetype-missing' => "L'archivi a l'é sensa estension.",
 'api-error-hookaborted' => "La modìfica ch'a l'ha provà a fé a l'é stàita blocà dal gancio ëd n'estension.",
-'api-error-http' => 'Eror antern: as peul pa coleghesse al sërvent.',
+'api-error-http' => 'Eror antern: As peul pa coleghesse al servent.',
 'api-error-illegal-filename' => "Ël nòm dl'archivi a l'é nen consentì.",
-'api-error-internal-error' => "Eror antern: quaicòs a l'é andàit mal con ël tratament ëd tò cariagi an sla wiki.",
+'api-error-internal-error' => "Eror antern: Cheicòs a l'é andàit mal con ël tratament ëd soa amportassion an sla wiki.",
 'api-error-invalid-file-key' => 'Eror antern: archivi pa trovà ant la memòria a temp.',
 'api-error-missingparam' => "Eror antern: paràmetr mancant ant l'arcesta.",
 'api-error-missingresult' => "Eror antern: as peul pa determiné se la còpia a l'é andàita bin.",
 'api-error-mustbeloggedin' => "A dev esse intrà ant ël sistema për carié dj'archivi.",
 'api-error-mustbeposted' => "Eror antern: L'arcesta a l'ha da manca d'HTTP POST.",
-'api-error-noimageinfo' => "Ël càrigh a l'é andàit bin, ma ël sërvent a l'ha dane gnun-e anformassion an sl'archivi.",
-'api-error-nomodule' => 'Eror antern: Gnun mòdoj ëd cariagi ampostà.',
-'api-error-ok-but-empty' => 'Eror antern: Gnun-a arspòste dal sërvent.',
+'api-error-noimageinfo' => "Ël cariament a l'é andàit bin, ma ël servent a l'ha dane gnun-e anformassion an sl'archivi.",
+'api-error-nomodule' => 'Eror antern: gnun mòdoj ëd caria ampostà.',
+'api-error-ok-but-empty' => 'Eror antern: Gnun-a rispòsta dal servent.',
 'api-error-overwrite' => "Dzorascrive ansima a n'archivi esistent a l'é nen përmëttù.",
-'api-error-stashfailed' => "Eror antern: ël sërvent a l'ha pa podù memorisé l'archivi a temp.",
-'api-error-timeout' => "Ël sërvent a l'ha pa arspondù ant ël temp spetà.",
+'api-error-stashfailed' => "Eror antern: ël servent a l'ha pa podù memorisé l'archivi a temp.",
+'api-error-timeout' => "Ël servent a l'ha pa rëspondù ant ël temp ëspetà.",
 'api-error-unclassified' => "A l'é capitaje n'eror nen conossù.",
-'api-error-unknown-code' => 'Eror sconossù: "$1"',
-'api-error-unknown-error' => "Eror antern: quaicòs a l'é andàit mal quand a l'é provasse a carié tò archivi.",
+'api-error-unknown-code' => 'Eror sconossù: «$1».',
+'api-error-unknown-error' => "Eror antern: Cheicòs a l'é andàit mal quand a l'é provasse a carié sò archivi.",
 'api-error-unknown-warning' => 'Avis pa conossù: $1',
-'api-error-unknownerror' => 'Eror sconossù: "$1".',
+'api-error-unknownerror' => 'Eror sconossù: «$1».',
 'api-error-uploaddisabled' => "Ël cariagi a l'é disabilità su sta wiki.",
 'api-error-verification-error' => "Cost archivi a peul esse danegià, o avèj l'estension sbalià.",
 
@@ -3805,6 +3816,4 @@ Dësnò, a peule dovré ël formlari semplificà sì-sota. Sò coment a sarà gi
 'duration-centuries' => '$1 {{PLURAL:$1|sécol|sécoj}}',
 'duration-millennia' => '$1 {{PLURAL:$1|milenari|milenari}}',
 
-# Unknown messages
-'svg-long-error' => 'Archivi SVG nen bon: $1',
 );
index be574b4..8e0e7c1 100644 (file)
@@ -735,7 +735,6 @@ Custom .css تے .js pages use a lowercase title, e.g. {{ns:user}}:Foo/vector.cs
 'template-protected' => '(بچایا گیا)',
 'template-semiprotected' => '(کج بچایا ہویا)',
 'hiddencategories' => 'اے صفہ {{PLURAL:$1|1 چھپی گٹھ|$1 چپھی گٹھیاں}} دا رکن اے:',
-'nocreatetitle' => 'صفحہ بنانے دی حد اے',
 'nocreatetext' => '{{SITENAME}} نے نۓ صفحے بنانے تے پابندی لائی اے۔<br />
 تسی واپس جا کے پہلاں توں موجود صفحیاں تے لکھ سکدے او یا فیر [[Special:UserLogin|اندر آؤ یا نواں کھاتہ کھولو۔]]',
 'nocreate-loggedin' => 'توانوں نواں صفحہ بنانے دی اجازت نئیں۔',
@@ -1262,12 +1261,13 @@ $1",
 'right-sendemail' => 'دوجے ورتن والیاں نوں ای-میل کرو',
 'right-passwordreset' => 'کنجی بدلی ای-میلاں نوں وکھاؤ',
 
+# Special:Log/newusers
+'newuserlogpage' => 'ورتاوا بنان آلی لاگ',
+'newuserlogpagetext' => 'اے ورتن والا بنان دی لاگ اے۔',
+
 # User rights log
 'rightslog' => 'ورتن والے دے حقاں دی لاگ',
 'rightslogtext' => 'ورتن حقاں چ تبدیلیاں دی اے لاگ اے۔',
-'rightslogentry' => 'ٹولی ممرشپ $1 لئی $2 توں $3 تک بدلو۔',
-'rightslogentry-autopromote' => '$2 توں اپنے آپ $3 تک ودایا گیا۔',
-'rightsnone' => '(کوئی وی نئیں)',
 
 # Associated actions - in the sentence "You do not have permission to X"
 'action-read' => 'اس صفحے نوں پڑھو',
@@ -1890,10 +1890,6 @@ $1",
 'activeusers-hidesysops' => 'مکھۓ لکاؤ',
 'activeusers-noresult' => 'کوئی ورتن والا نئیں لبیا۔',
 
-# Special:Log/newusers
-'newuserlogpage' => 'ورتاوا بنان آلی لاگ',
-'newuserlogpagetext' => 'اے ورتن والا بنان دی لاگ اے۔',
-
 # Special:ListGroupRights
 'listgrouprights' => 'ورتن ٹرلی حق',
 'listgrouprights-summary' => 'تھلے اک لسٹ اے ورتن ٹولیاں دی ای وکی تے، اپنے رلدے حقاں نال۔ 
@@ -2023,6 +2019,8 @@ $UNWATCHURL
 
 فیڈبیک تے ہور مدد لئی:
 {{canonicalurl:{{MediaWiki:Helppage}}}}',
+'created' => 'بن گیا',
+'changed' => 'بدلیا',
 
 # Delete
 'deletepage' => 'صفہ مٹاؤ',
@@ -3533,7 +3531,7 @@ the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
 'logentry-newusers-create' => '$1 {{جنس:$2|بنایا}} اک ورتن والا کھاتہ',
 'logentry-newusers-create2' => '$1 {{جنس:$2|بنایا}} {{جنس:$4|اک ورتن کھاتہ}} $3',
 'logentry-newusers-autocreate' => 'کھاتہ $1 اپنے آپ ای {{جنس:$2|بنایا گیا}} بنایا گیا۔',
-'newuserlog-byemail' => 'کنجی ای-میل راہ پیج دتی گئی۔',
+'rightsnone' => '(کوئی وی نئیں)',
 
 # Feedback
 'feedback-bugornote' => 'اگر تسیں اک تکنیکی مسلے نوں  پوری طراں دسن لئی تیار او تے فیر مہربانی کرکے [$1 بگ بارے دسو]۔  ںئیں تے تسیں تھلے دتا گیا فارم ورتو۔ تواڈی گل صفہ "[$3 $2]" تے جڑے گی،  تواڈے ورتن والے ناں تے براؤزر جیہڑا تسیں ورت رۓ او۔',
index 455e78f..88b7195 100644 (file)
@@ -704,9 +704,11 @@ $messages = array(
 'right-import' => "Έμπαζμαν σελιδίων ασ' άλλα βίκι",
 'right-siteadmin' => 'Ασπάλισον κι άνοιξον τη βάση δογμενίων',
 
+# Special:Log/newusers
+'newuserlogpage' => 'Αρχείον ποισιματίων λογαρίων χρήστε',
+
 # User rights log
 'rightslog' => 'Αρχείον δικαιωματίων',
-'rightsnone' => '(τιδέν)',
 
 # Associated actions - in the sentence "You do not have permission to X"
 'action-read' => 'δεάβασον αβούτεν την σελίδαν',
@@ -941,9 +943,6 @@ $messages = array(
 # Special:ListUsers
 'listusers-submit' => 'Δείξον',
 
-# Special:Log/newusers
-'newuserlogpage' => 'Αρχείον ποισιματίων λογαρίων χρήστε',
-
 # Special:ListGroupRights
 'listgrouprights-group' => 'Ομάδαν',
 'listgrouprights-rights' => 'Δικαιώματα',
@@ -978,6 +977,8 @@ $messages = array(
 
 'enotif_impersonal_salutation' => '{{SITENAME}} χρήστες',
 'enotif_anon_editor' => 'ανώνυμον χρήστες $1',
+'created' => 'έντον',
+'changed' => 'ελλάγεν',
 
 # Delete
 'deletepage' => 'Σβήσον τη σελίδαν',
@@ -1437,6 +1438,9 @@ $messages = array(
 'htmlform-reset' => "Κλώσον τ'αλλαγάς",
 'htmlform-selectorother-other' => 'Άλλον',
 
+# New logging system
+'rightsnone' => '(τιδέν)',
+
 # Search suggestions
 'searchsuggest-search' => 'Αράεμαν',
 
index 8b1308a..3819ced 100644 (file)
@@ -624,7 +624,6 @@ Teksts ni mazzi būtwei enpeisātan.",
 'template-protected' => '(pakūnstan)',
 'template-semiprotected' => '(delīkiskai pakūnstan)',
 'hiddencategories' => 'Šin pāusan ast en {{PLURAL:$1|ainassei kliptan kategōrijan|$1 kliptan kategōrijan}}:',
-'nocreatetitle' => 'Kānkē di mazīngiskwan stesses segīsnan stēisan nāunan pāusan',
 'nocreatetext' => 'Nāunan pāusan teīksnas mazīngisku en {{SITENAME}} pastāi arāikintan.
 Tū mazzi redigītun ekzistīntins pāusans anga [[Special:UserLogin|enēitwei anga teīktun nāunan rekkenan]].',
 'nocreate-loggedin' => 'Tū ni turri preiwērpsenin, kāi teīklai nāunans pāusans.',
@@ -1041,11 +1040,13 @@ Tū mazzi dīgi etrīnktun dātun kitēimans drāugautwei sen tin pra tērpautaj
 'right-override-export-depth' => 'Ekspōrtis pāusans ēmpiri sen pāusans prei kawīdans tenēi autenginna, ērgi gilluwan stēisan 5 autengīnsenin',
 'right-sendemail' => 'Tenginnais e-mailin kitēimans tērpautajans',
 
+# Special:Log/newusers
+'newuserlogpage' => 'Nāunai tērpautajai',
+'newuserlogpagetext' => 'Sta ast registerin stēisan nāunai teīkatan rekkenan stēisan tērpautajan',
+
 # User rights log
 'rightslog' => 'Registerin stēisan tērpautajan enwarīnsenin',
 'rightslogtext' => 'Sta ast registerin stēisan tērpautajan ewarīnsenin kitawīdinsnan.',
-'rightslogentry' => 'ast kitawīdinuns(si) $1 perlānksnan prei gruppins ($2 → $3)',
-'rightsnone' => '(nisātausna)',
 
 # Associated actions - in the sentence "You do not have permission to X"
 'action-read' => 'skaitātun šin pāusan',
@@ -1526,10 +1527,6 @@ Ebšlūzitai prōtokulai: <code>$1</code>',
 'activeusers-hidesysops' => 'Kliptinais perwaldītajans',
 'activeusers-noresult' => 'Ni aupalā di tērpautajans',
 
-# Special:Log/newusers
-'newuserlogpage' => 'Nāunai tērpautajai',
-'newuserlogpagetext' => 'Sta ast registerin stēisan nāunai teīkatan rekkenan stēisan tērpautajan',
-
 # Special:ListGroupRights
 'listgrouprights' => 'Tērpautajan gruppin enwarīnsenei',
 'listgrouprights-summary' => 'Zemmais ast listi stēisan tērpautajan gruppin definītan en šissei wiki sen enwarīnsenins preipeisātan tenēimans.
@@ -1610,6 +1607,8 @@ Eraīna šisse pāusas ēnturas kitawīdinsna anga diskusiōnis pāusas sēitan
 'enotif_lastvisited' => 'Wīdais en $1 wissans kitawīdinsnans ezze Twajjai panzdauman kāimalukisenin.',
 'enotif_lastdiff' => 'Wīdais en $1 šan kitawīdisnan.',
 'enotif_anon_editor' => 'anōnims tērpautajs $1',
+'created' => 'teīktan',
+'changed' => 'kitawīdintan',
 
 # Delete
 'deletepage' => 'Āupausinais pāusan',
@@ -2708,6 +2707,6 @@ Enpeisāis zūrbrukes pabilīsnan šlāit "{{ns:file}}:" prefiksan.',
 # New logging system
 'revdelete-restricted' => 'ensadinnais arāikinsenins per perwaldītajans',
 'revdelete-unrestricted' => 'āupausinais arāikinsenins per perwaldītajans',
-'newuserlog-byemail' => 'kliptaswīrds tengīntan pra e-mail',
+'rightsnone' => '(nisātausna)',
 
 );
index 1801ff0..3b701cd 100644 (file)
@@ -308,7 +308,7 @@ $messages = array(
 'vector-action-addsection' => 'سرليکونه ورګډول',
 'vector-action-delete' => 'ړنګول',
 'vector-action-move' => 'لېږدول',
-'vector-action-protect' => 'پروژه',
+'vector-action-protect' => 'ژغورل',
 'vector-action-undelete' => 'ناړنګول',
 'vector-action-unprotect' => 'ژغورنه بدلول',
 'vector-view-create' => 'جوړول',
@@ -320,6 +320,7 @@ $messages = array(
 'namespaces' => 'نوم-تشيالونه',
 'variants' => 'ډولونه',
 
+'navigation-heading' => 'ګرځښت غورنۍ',
 'errorpagetitle' => 'تېروتنه',
 'returnto' => 'بېرته $1 ته وګرځه.',
 'tagline' => 'د {{SITENAME}} لخوا',
@@ -552,7 +553,7 @@ $1',
 'gotaccount' => 'آيا وار دمخې يو ګڼون لری؟ $1.',
 'gotaccountlink' => 'ننوتل',
 'userlogin-resetlink' => 'د ننوتلو مالومات مو هېر شوي؟',
-'createaccountmail' => 'د برېښليک له مخې',
+'createaccountmail' => 'يو لنډمهاله ناټاکلی پټنوم کارول او په لاندې ورکړل شوې برېښليک پته کې ورلېږل',
 'createaccountreason' => 'سبب:',
 'badretype' => 'دا پټنوم چې تاسې ليکلی د مخکني پټنوم سره ورته نه دی.',
 'userexists' => 'کوم کارن نوم چې تاسې ورکړی هغه بل چا کارولی.
@@ -662,6 +663,7 @@ $1',
 'changeemail-oldemail' => 'اوسنۍ برېښليک پته:',
 'changeemail-newemail' => 'نوې برېښليک پته:',
 'changeemail-none' => '(هېڅ)',
+'changeemail-password' => 'ستاسې د{{SITENAME}} پټنوم:',
 'changeemail-submit' => 'برېښليک بدلول',
 'changeemail-cancel' => 'ناګارل',
 
@@ -793,7 +795,6 @@ $1',
 'template-protected' => '(ژغورلی)',
 'template-semiprotected' => '(نيم-ژغورلی)',
 'hiddencategories' => 'دا مخ د {{PLURAL:$1|1 پټې وېشنيزې|$1 پټو وېشنيزو}} يو غړی دی:',
-'nocreatetitle' => 'د مخ جوړول بريد ټاکلی دی',
 'nocreatetext' => '{{SITENAME}} د نوو مخونو د جوړولو وړتيا محدوده کړې.
 تاسو بېرته پر شا تللای شی او په شته مخونو کې سمونې ترسره کولای شی، او يا هم [[Special:UserLogin|غونډال ته ننوتلای او يو ګڼون جوړولای شی]].',
 'nocreate-loggedin' => 'تاسې د نوو مخونو د جوړولو پرېښله نلرۍ.',
@@ -1061,9 +1062,9 @@ $1',
 'prefs-emailconfirm-label' => 'د برېښليک باورتيا:',
 'prefs-textboxsize' => 'د سمون کړکۍ کچه',
 'youremail' => 'برېښليک *',
-'username' => 'کارن-نوم:',
-'uid' => 'د کارن پېژندنه:',
-'prefs-memberingroups' => 'د {{PLURAL:$1|ډلې|ډلو}} غړی:',
+'username' => '{{GENDER:$1|کارن نوم}}:',
+'uid' => '{{GENDER:$1|کارن}} پېژندنه:',
+'prefs-memberingroups' => 'د {{PLURAL:$1|ډله|ډلې}} {{GENDER:$2|غړی}}:',
 'prefs-registration' => 'د نومليکنې وخت:',
 'yourrealname' => 'اصلي نوم:',
 'yourlanguage' => 'ژبه:',
@@ -1166,10 +1167,13 @@ $1',
 'right-userrights-interwiki' => 'په نورو ويکي ګانو د نورو کارنانو  کارن-رښتې سمول',
 'right-sendemail' => 'نورو کارنانو ته برېښليک لېږل',
 
+# Special:Log/newusers
+'newuserlogpage' => 'د کارن-نوم د جوړېدو يادښت',
+'newuserlogpagetext' => 'دا د کارن-نوم د جوړېدو يادښت دی',
+
 # User rights log
 'rightslog' => 'د کارن د رښتو يادښت',
 'rightslogtext' => 'دا د کارن رښتو د بدلونونو يو يادښت دی',
-'rightsnone' => '(هېڅ)',
 
 # Associated actions - in the sentence "You do not have permission to X"
 'action-read' => 'همدا مخ لوستل',
@@ -1378,6 +1382,7 @@ $1',
 'filepage-nofile-link' => 'په دې نوم کومه دوتنه نشته، خو تاسې يې [$1 پورته کولی شی].',
 'uploadnewversion-linktext' => 'د همدغې دوتنې نوې بڼه پورته کول',
 'shared-repo-from' => 'د $1 لخوا',
+'upload-disallowed-here' => 'تاسې د دې دوتنې دپاسه نشی ليکلی.',
 
 # File reversion
 'filerevert-comment' => 'سبب:',
@@ -1397,6 +1402,7 @@ $1',
 ** د رښتو نه غاړه غړونه
 ** کټ مټ دوه ګونې دوتنه',
 'filedelete-edit-reasonlist' => 'د ړنګولو سببونه سمول',
+'filedelete-maintenance-title' => 'دوتنه نه شي ړنګېدی',
 
 # MIME search
 'mimesearch' => 'MIME پلټنه',
@@ -1433,6 +1439,7 @@ $1',
 'statistics-edits' => 'د {{SITENAME}} د جوړېدو راهيسې د مخونو سمون',
 'statistics-edits-average' => 'پر يوه مخ د سمون منځوۍ کچه',
 'statistics-views-total' => 'ټولټال کتنې',
+'statistics-views-peredit' => 'د هر سمون په سر کتنې',
 'statistics-users' => 'ثبت شوي [[Special:ListUsers|کارنان]]',
 'statistics-users-active' => 'فعاله کارنان',
 'statistics-users-active-desc' => 'هغه کارنان چې په {{PLURAL:$1|وروستۍ ورځ|وروستيو $1 ورځو}} کې فعاله ونډه لرلې',
@@ -1540,6 +1547,9 @@ $1',
 'allpages-bad-ns' => '{{SITENAME}} د "$1" په نامه هېڅ کوم نوم-تشيال نه لري.',
 'allpages-hide-redirects' => 'مخ ګرځونې پټول',
 
+# SpecialCachedPage
+'cachedspecial-refresh-now' => 'تر ټولو تازه کتل.',
+
 # Special:Categories
 'categories' => 'وېشنيزې',
 'categoriespagetext' => 'دا لاندينۍ {{PLURAL:$1|وېشنيزه|وېشنيزې}} مخونه يا رسنيزې دوتنې لري.
@@ -1576,10 +1586,6 @@ $1',
 'activeusers-hidesysops' => 'پازوالان پټول',
 'activeusers-noresult' => 'کارن و نه موندل شو.',
 
-# Special:Log/newusers
-'newuserlogpage' => 'د کارن-نوم د جوړېدو يادښت',
-'newuserlogpagetext' => 'دا د کارن-نوم د جوړېدو يادښت دی',
-
 # Special:ListGroupRights
 'listgrouprights' => 'د کارن ډلو رښتې',
 'listgrouprights-group' => 'ډله',
@@ -1635,11 +1641,9 @@ $1',
 'watchnologin' => 'غونډال کې نه ياست ننوتي.',
 'watchnologintext' => 'ددې لپاره چې خپل کتنلړ کې بدلون راولی نو تاسو ته پکار ده چې لومړی غونډال کې [[Special:UserLogin|ورننوځۍ]].',
 'addwatch' => 'کتنلړ کې ورګډول',
-'addedwatchtext' => "د \"[[:\$1]]\" په نوم يو مخ ستاسې [[Special:Watchlist|کتنلړ]] کې ورګډ شو.
-په راتلونکې کې چې په دغه مخ او د ده د خبرواترو مخ کې کوم بدلونونه راځي نو هغه به ستاسې کتنلړ کې ښکاره شي،
-او په همدې توګه هغه مخونه به د [[Special:RecentChanges|وروستي بدلونونو]] په لړليک کې په '''روڼ''' ليک ښکاري ترڅو په اسانۍ سره څوک وپوهېږي چې په کوم کوم مخونو کې بدلونونه ترسره شوي.
-
-که چېرته تاسې بيا وروسته غواړۍ چې کوم مخ د خپل کتنلړ نه ليرې کړۍ، نو په \"نه کتل\" تڼۍ باندې ټک ورکړۍ.",
+'addedwatchtext' => 'د "[[:$1]]" په نوم يو مخ ستاسې [[Special:Watchlist|کتنلړ]] کې ورګډ شو.
+په راتلونکې کې چې په دغه مخ او د دې د خبرواترو مخ کې کوم بدلونونه راځي نو هغه به ستاسې کتنلړ کې ښکاري.',
+'removewatch' => 'له کتنلړ نه غورځول',
 'removedwatchtext' => 'د "[[:$1]]" مخ [[Special:Watchlist|ستاسې کتنلړ]] نه لرې شو.',
 'watch' => 'کتل',
 'watchthispage' => 'همدا مخ کتل',
@@ -1662,6 +1666,16 @@ $1',
 'enotif_mailer' => 'د {{SITENAME}} خبرتيايي برېښليک',
 'enotif_reset' => 'ټول مخونه کتل شوي نخښه کول',
 'enotif_impersonal_salutation' => '{{SITENAME}} کارن',
+'enotif_subject_deleted' => 'د {{SITENAME}} مخ $1 د {{gender:$2|$2}} لخوا ړنګ شوی',
+'enotif_subject_created' => 'د {{SITENAME}} مخ $1 د {{gender:$2|$2}} لخوا جوړ شوی',
+'enotif_subject_moved' => 'د {{SITENAME}} مخ $1 د {{gender:$2|$2}} لخوا لېږدول شوی',
+'enotif_subject_restored' => 'د {{SITENAME}} مخ $1 د {{gender:$2|$2}} لخوا بيازېرمل شوی',
+'enotif_subject_changed' => 'د {{SITENAME}} مخ $1 د {{gender:$2|$2}} لخوا بدل شوی',
+'enotif_body_intro_deleted' => 'د {{SITENAME}} مخ $1 په $ د {{gender:$2|$2}} لخوا ړنګ شوی، $3 وګورۍ.',
+'enotif_body_intro_created' => 'د {{SITENAME}} مخ $1 په $PAGEEDITDATE د {{gender:$2|$2}} لخوا جوړ شوی، د اوسنۍ بڼې کتلو لپاره $3 وګورۍ.',
+'enotif_body_intro_moved' => 'د {{SITENAME}} مخ $1 په $PAGEEDITDATE د {{gender:$2|$2}} لخوا لېږدول شوی، د اوسنۍ بڼې کتلو لپاره $3 وګورۍ.',
+'enotif_body_intro_restored' => 'د {{SITENAME}} مخ $1 په $PAGEEDITDATE د {{gender:$2|$2}} لخوا بيازېرمل شوی، د اوسنۍ بڼې کتلو لپاره $3 وګورۍ.',
+'enotif_body_intro_changed' => 'د {{SITENAME}} مخ $1 په $PAGEEDITDATE د {{gender:$2|$2}} لخوا بدل شوی، د اوسنۍ بڼې کتلو لپاره $3 وګورۍ.',
 'enotif_lastvisited' => 'د ټولو هغو بدلونونو د کتلو لپاره چې ستاسو د وروستي ځل راتګ نه وروسته پېښې شوي، $1 وګورۍ.',
 'enotif_lastdiff' => 'د همدغه بدلون د کتلو لپاره $1 وګورۍ.',
 'enotif_anon_editor' => 'ورکنومی کارن $1',
@@ -1694,6 +1708,8 @@ $UNWATCHURL  نه ليدنه وکړۍ
 
 انګېرنې او نورې مرستې:
 {{canonicalurl:{{MediaWiki:Helppage}}}}',
+'created' => 'جوړ شو',
+'changed' => 'بدلېدلی',
 
 # Delete
 'deletepage' => 'مخ ړنګول',
@@ -2142,8 +2158,10 @@ $UNWATCHURL  نه ليدنه وکړۍ
 'pageinfo-lastuser' => 'وروستنی سمونګر',
 'pageinfo-edits' => 'د ټولو سمونونو شمېر',
 'pageinfo-toolboxlink' => 'د مخ مالومات',
+'pageinfo-redirectsto-info' => 'مالومات',
 'pageinfo-contentpage' => 'مېنځپانګيز مخ کې شمېرل شوی',
 'pageinfo-contentpage-yes' => 'هو',
+'pageinfo-protect-cascading-yes' => 'هو',
 
 # Skin names
 'skinname-standard' => 'کلاسيک',
@@ -2657,7 +2675,7 @@ $5
 'logentry-newusers-newusers' => 'د $1 کارن ګڼون جوړ شو',
 'logentry-newusers-create' => 'د $1 کارن ګڼون جوړ شو',
 'logentry-newusers-autocreate' => 'د $1 ګڼون په اتوماتيک ډول جوړ شو',
-'newuserlog-byemail' => 'پټنوم مو برېښليک ته درولېږه',
+'rightsnone' => '(هېڅ)',
 
 # Feedback
 'feedback-subject' => 'سکالو:',
index f08cac1..276eabf 100644 (file)
@@ -34,6 +34,7 @@
  * @author MetalBrasil
  * @author Minh Nguyen
  * @author Nuno Tavares
+ * @author Opraco
  * @author Paulo Juntas
  * @author Pedroca cerebral
  * @author Rafael Vargas
@@ -154,6 +155,7 @@ $specialPageAliases = array(
        'Mytalk'                    => array( 'Minha_discussão' ),
        'Newimages'                 => array( 'Ficheiros_novos', 'Imagens_novas', 'Arquivos_novos' ),
        'Newpages'                  => array( 'Páginas_novas', 'Artigos_novos' ),
+       'PermanentLink'             => array( 'Ligação_permanente', 'Link_permanente' ),
        'Popularpages'              => array( 'Páginas_populares', 'Artigos_populares' ),
        'Preferences'               => array( 'Preferências' ),
        'Prefixindex'               => array( 'Índice_por_prefixo', 'Índice_de_prefixo' ),
@@ -525,7 +527,7 @@ $messages = array(
 'otherlanguages' => 'Noutras línguas',
 'redirectedfrom' => '(Redireccionado de $1)',
 'redirectpagesub' => 'Página de redireccionamento',
-'lastmodifiedat' => 'Esta página foi modificada pela última vez às $2 de $1.',
+'lastmodifiedat' => 'Esta página foi modificada pela última vez à(s) $2 de $1.',
 'viewcount' => 'Esta página foi acedida {{PLURAL:$1|uma vez|$1 vezes}}.',
 'protectedpage' => 'Página protegida',
 'jumpto' => 'Ir para:',
@@ -719,8 +721,7 @@ O administrador que efetuou o bloqueio deu a seguinte explicação: "$3".',
 Pode continuar a utilizar a {{SITENAME}} anonimamente, ou pode <span class='plainlinks'>[$1 autenticar-se novamente]</span> com o mesmo nome de utilizador ou com um nome de utilizador diferente.
 Tenha em atenção que algumas páginas poderão continuar a ser apresentadas como se ainda estivesse autenticado até limpar a cache do seu browser.",
 'welcomeuser' => 'Bem-vindo, $1!',
-'welcomecreation-msg' => '== Bem-vindo, $1! ==
-A sua conta foi criada.
+'welcomecreation-msg' => 'A sua conta foi criada.
 Não se esqueça de personalizar as suas [[Special:Preferences|preferências]].',
 'yourname' => 'Nome de utilizador:',
 'yourpassword' => 'Palavra-chave:',
@@ -1066,7 +1067,6 @@ Para referência, é apresentada abaixo a última entrada do registo:",
 'template-semiprotected' => '(semi-protegida)',
 'hiddencategories' => 'Esta página pertence a {{PLURAL:$1|uma categoria oculta|$1 categorias ocultas}}:',
 'edittools' => '<!-- O texto colocado aqui será mostrado abaixo dos formulários de edição e de envio de ficheiros. -->',
-'nocreatetitle' => 'A criação de páginas encontra-se limitada',
 'nocreatetext' => 'A {{SITENAME}} restringe a criação de páginas novas por utilizadores anónimos.
 Pode voltar atrás e editar uma página já existente, ou [[Special:UserLogin|autenticar-se ou criar uma conta]].',
 'nocreate-loggedin' => 'Não possui permissão para criar novas páginas.',
@@ -1091,8 +1091,10 @@ Ela parece ter sido eliminada.',
 'edit-already-exists' => 'Não foi possível criar uma página nova.
 Ela já existia.',
 'defaultmessagetext' => 'Texto da mensagem padrão',
+'content-not-allowed-here' => 'Conteúdo do tipo "$1" não é permitido na página [[$2]]',
 
 # Content models
+'content-model-wikitext' => 'wikitexto',
 'content-model-text' => 'texto simples',
 'content-model-javascript' => 'JavaScript',
 'content-model-css' => 'CSS',
@@ -1469,9 +1471,9 @@ Esta operação não pode ser desfeita.',
 'prefs-emailconfirm-label' => 'Confirmação do endereço:',
 'prefs-textboxsize' => 'Tamanho da janela de edição',
 'youremail' => 'Correio electrónico:',
-'username' => 'Nome de utilizador:',
+'username' => 'Nome de {{GENDER:$1|utilizador|utilizadora}}:',
 'uid' => 'Número de identificação:',
-'prefs-memberingroups' => 'Membro {{PLURAL:$1|do grupo|dos grupos}}:',
+'prefs-memberingroups' => '{{GENDER:$2|Membro}} {{PLURAL:$1|do grupo|dos grupos}}:',
 'prefs-registration' => 'Hora de registo:',
 'yourrealname' => 'Nome verdadeiro:',
 'yourlanguage' => 'Língua:',
@@ -1620,13 +1622,13 @@ Esta informação será pública.',
 'right-sendemail' => 'Enviar correio electrónico a outros utilizadores',
 'right-passwordreset' => 'Ver emails de reposição de palavras-chave',
 
+# Special:Log/newusers
+'newuserlogpage' => 'Registo de criação de utilizadores',
+'newuserlogpagetext' => 'Este é um registo de novas contas de utilizador',
+
 # User rights log
 'rightslog' => 'Registo de privilégios de utilizador',
 'rightslogtext' => 'Este é um registo de mudanças nos privilégios dos utilizadores.',
-'rightslogentry' => 'alterou grupos de $1 (de $2 para $3)',
-'rightslogentry-autopromote' => 'foi automaticamente promovido de $2 para $3',
-'logentry-rights-rights' => '$1 modificou os privilégios do utilizador  $3  de  $4  para $5',
-'rightsnone' => '(nenhum)',
 
 # Associated actions - in the sentence "You do not have permission to X"
 'action-read' => 'ler esta página',
@@ -1653,7 +1655,7 @@ Esta informação será pública.',
 'action-suppressionlog' => 'ver este registo privado',
 'action-block' => 'impedir este utilizador de editar',
 'action-protect' => 'alterar os níveis de protecção desta página',
-'action-rollback' => 'Reverter rapidamente as edições do último utilizador que editou uma dada página',
+'action-rollback' => 'reverter rapidamente as edições do último utilizador que editou uma dada página',
 'action-import' => 'importar esta página a partir de outra wiki',
 'action-importupload' => 'importar esta página a partir de um ficheiro xml',
 'action-patrol' => 'marcar as edições de outros utilizadores como patrulhadas',
@@ -1808,7 +1810,7 @@ Verifique o motivo da eliminação do ficheiro antes de prosseguir com o re-envi
 'uploadwarning-text' => 'Modifique a descrição do ficheiro abaixo e tente novamente, por favor.',
 'savefile' => 'Gravar ficheiro',
 'uploadedimage' => 'carregou "[[$1]]"',
-'overwroteimage' => 'foi enviada uma nova versão de "[[$1]]"',
+'overwroteimage' => 'enviou uma nova versão de "[[$1]]"',
 'uploaddisabled' => 'Carregamentos impossibilitados',
 'copyuploaddisabled' => 'Upload por URL impossibilitado.',
 'uploadfromurl-queued' => 'O seu upload foi adicionado à fila.',
@@ -2281,10 +2283,6 @@ Protocolos suportados: <code>$1</code> (não adicione nenhum destes na sua pesqu
 'activeusers-hidesysops' => 'Esconder administradores',
 'activeusers-noresult' => 'Nenhum utilizador encontrado.',
 
-# Special:Log/newusers
-'newuserlogpage' => 'Registo de criação de utilizadores',
-'newuserlogpagetext' => 'Este é um registo de novas contas de utilizador',
-
 # Special:ListGroupRights
 'listgrouprights' => 'Privilégios dos grupos de utilizadores',
 'listgrouprights-summary' => 'A seguinte lista contém os grupos de utilizadores definidos nesta wiki, com os respectivos privilégios de acesso.
@@ -2383,12 +2381,9 @@ O nome desta página passará a aparecer a '''negrito''' na lista de [[Special:R
 'enotif_lastvisited' => 'Consulte $1 para todas as alterações efectuadas desde a sua última visita.',
 'enotif_lastdiff' => 'Consulte $1 para ver esta alteração.',
 'enotif_anon_editor' => 'utilizador anónimo $1',
-'enotif_body' => 'Caro(a) $WATCHINGUSERNAME,
-
+'enotif_body' => '{{GENDER:$WATCHINGUSERNAME|Caro|Cara|Caro(a)}},
 
-A página $PAGETITLE da {{SITENAME}} foi $CHANGEDORCREATED a $PAGEEDITDATE por $PAGEEDITOR; consulte $PAGETITLE_URL para ver a versão actual.
-
-$NEWPAGE
+$PAGEINTRO $NEWPAGE
 
 Resumo da edição: $PAGESUMMARY $PAGEMINOREDIT
 
@@ -2413,6 +2408,8 @@ $UNWATCHURL
 
 Para comentários e pedidos de ajuda:
 {{canonicalurl:{{MediaWiki:Helppage}}}}',
+'created' => 'criada',
+'changed' => 'alterada',
 
 # Delete
 'deletepage' => 'Eliminar página',
@@ -2506,7 +2503,7 @@ Pode alterar o nível de protecção desta página, mas isso não afectará a pr
 'protect-summary-cascade' => 'em cascata',
 'protect-expiring' => 'expira a $1 (UTC)',
 'protect-expiring-local' => 'expira a $1',
-'protect-expiry-indefinite' => 'tempo indefinido',
+'protect-expiry-indefinite' => 'indefinidamente',
 'protect-cascade' => 'Proteja quaisquer páginas que estejam incluídas nesta (protecção em cascata)',
 'protect-cantedit' => 'Não pode alterar o nível de protecção desta página, porque não tem permissão para editá-la.',
 'protect-othertime' => 'Outra duração:',
@@ -2566,7 +2563,8 @@ Pode ter usado um link incorrecto ou talvez a revisão tenha sido restaurada ou
 'undeletedrevisions' => '$1 {{PLURAL:$1|edição restaurada|edições restauradas}}',
 'undeletedrevisions-files' => '$1 {{PLURAL:$2|edição restaurada|edições restauradas}} e $2 {{PLURAL:$2|ficheiro restaurado|ficheiros restaurados}}',
 'undeletedfiles' => '{{PLURAL:$1|ficheiro restaurado|$1 ficheiros restaurados}}',
-'cannotundelete' => 'Restauração falhada; alguém talvez já restaurou a página.',
+'cannotundelete' => 'Restauração falhada:
+$1',
 'undeletedpage' => "'''$1 foi restaurada'''
 
 Consulte o [[Special:Log/delete|registo de eliminações]] para um registo das eliminações e restaurações mais recentes.",
@@ -2869,6 +2867,7 @@ não é possível mover uma página para ela mesma.',
 'immobile-target-namespace-iw' => 'Um link interwikis não é um destino válido para uma movimentação de página.',
 'immobile-source-page' => 'Esta página não pode ser movida.',
 'immobile-target-page' => 'Não é possível mover para esse título de destino.',
+'bad-target-model' => 'O destino pretendido usa um modelo de conteúdo diferente. Não é possível converter de $1 para $2.',
 'imagenocrossnamespace' => 'Não é possível mover imagem para espaço nominal que não de imagens',
 'nonfile-cannot-move-to-file' => 'Não é possível mover algo que não é um ficheiro para o espaço nominal de ficheiros',
 'imagetypemismatch' => 'A extensão do novo ficheiro não corresponde ao seu tipo',
@@ -3106,7 +3105,7 @@ Permite colocar uma justificação no resumo da edição.',
 'anonymous' => '{{PLURAL:$1|Utilizador anónimo|Utilizadores anónimos}} da {{SITENAME}}',
 'siteuser' => '$1 da {{SITENAME}}',
 'anonuser' => 'utilizador anónimo $1 da {{SITENAME}}',
-'lastmodifiedatby' => 'Esta página foi modificada pela última vez às $2 de $1 por $3.',
+'lastmodifiedatby' => 'Esta página foi modificada pela última vez à(s) $2 de $1 por $3.',
 'othercontribs' => 'Baseado no trabalho de $1.',
 'others' => 'outros',
 'siteusers' => '{{PLURAL:$2|um utilizador|$2 utilizadores}} da {{SITENAME}} ($1)',
@@ -3134,12 +3133,13 @@ Este bloqueio foi provavelmente causado por um link para um site externo que con
 'pageinfo-display-title' => 'Exibir título',
 'pageinfo-length' => 'Tamanho da página (em bytes)',
 'pageinfo-article-id' => 'ID da página',
+'pageinfo-language' => 'Idioma do conteúdo da página',
 'pageinfo-robot-policy' => 'Status do mecanismo de pesquisa',
 'pageinfo-robot-index' => 'Indexável',
 'pageinfo-robot-noindex' => 'Não indexável',
 'pageinfo-views' => 'Número de visitas',
 'pageinfo-watchers' => 'Número de vigilantes da página',
-'pageinfo-redirects-name' => 'Redireciona para esta página',
+'pageinfo-redirects-name' => 'Redirecionamentos para esta página',
 'pageinfo-subpages-name' => 'Subpáginas desta página',
 'pageinfo-subpages-value' => '$1 ($2 {{PLURAL:$2|redirecionamento|redirecionamentos}}; $3 {{PLURAL:$3|não-redirecionamento|não-redirecionamentos}})',
 'pageinfo-firstuser' => 'Criador da página',
@@ -3158,6 +3158,10 @@ Este bloqueio foi provavelmente causado por um link para um site externo que con
 'pageinfo-contentpage' => 'Contada como página de conteúdo',
 'pageinfo-contentpage-yes' => 'Sim',
 'pageinfo-protect-cascading-yes' => 'Sim',
+'pageinfo-category-info' => 'Informações da categoria',
+'pageinfo-category-pages' => 'Número de páginas',
+'pageinfo-category-subcats' => 'Número de subcategorias',
+'pageinfo-category-files' => 'Número de ficheiros',
 
 # Skin names
 'skinname-standard' => 'Clássico',
@@ -3213,6 +3217,7 @@ Executá-lo poderá comprometer a segurança do seu sistema.",
 'file-nohires' => 'Sem resolução maior disponível.',
 'svg-long-desc' => 'ficheiro SVG, de $1 × $2 pixels, tamanho: $3',
 'svg-long-desc-animated' => 'ficheiro SVG animado, de $1 × $2 pixels, tamanho: $3',
+'svg-long-error' => 'Ficheiro SVG inválido: $1',
 'show-big-image' => 'Resolução completa',
 'show-big-image-preview' => 'Tamanho desta antevisão: $1.',
 'show-big-image-other' => '{{PLURAL:$2|Outra resolução|Outras resoluções}}: $1.',
@@ -3242,6 +3247,8 @@ Executá-lo poderá comprometer a segurança do seu sistema.",
 'minutes' => '{{PLURAL:$1|um minuto|$1 minutos}}',
 'hours' => '{{PLURAL:$1|uma hora|$1 horas}}',
 'days' => '{{PLURAL:$1|um dia|$1 dias}}',
+'months' => '{{PLURAL:$1|1 mês|$1 meses}}',
+'years' => '{{PLURAL:$1|1 ano|$1 anos}}',
 'ago' => '$1 atrás',
 'just-now' => 'agora mesmo',
 
@@ -3975,7 +3982,7 @@ Imagens serão apresentadas pelo browser na resolução máxima; ficheiros de ou
 'logentry-delete-delete' => '$1 apagou a página $3',
 'logentry-delete-restore' => '$1 restaurou a página $3',
 'logentry-delete-event' => '$1 alterou a visibilidade {{PLURAL:$5|de uma entrada|das $5 entradas}} em $3: $4',
-'logentry-delete-revision' => '$1 alterou a visibilidade {{PLURAL:$5|de uma revisão|das $5 revisões}} em $3: $4',
+'logentry-delete-revision' => '$1 alterou a visibilidade de {{PLURAL:$5|uma revisão|$5 revisões}} em $3: $4',
 'logentry-delete-event-legacy' => '$1 alterou a visibilidade de uma entrada em $3',
 'logentry-delete-revision-legacy' => '$1 alterou a visibilidade de uma revisão em $3',
 'logentry-suppress-delete' => '$1 suprimiu a página $3',
@@ -3991,8 +3998,8 @@ Imagens serão apresentadas pelo browser na resolução máxima; ficheiros de ou
 'revdelete-uname-unhid' => 'utilizador não oculto',
 'revdelete-restricted' => 'restrições a administradores aplicadas',
 'revdelete-unrestricted' => 'restrições a administradores removidas',
-'logentry-move-move' => '$1 moveu página $3 para $4',
-'logentry-move-move-noredirect' => '$1 moveu página $3 para $4 sem deixar um redireccionamento',
+'logentry-move-move' => '$1 moveu página $3 para $4',
+'logentry-move-move-noredirect' => '$1 moveu página $3 para $4 sem deixar um redireccionamento',
 'logentry-move-move_redir' => '$1 moveu a página $3 para $4 através de um redireccionamento',
 'logentry-move-move_redir-noredirect' => '$1 moveu a página $3 para $4 sem um redireccionamento',
 'logentry-patrol-patrol' => '$1 marcou a revisão $4 da página $3 como patrulhada',
@@ -4001,7 +4008,9 @@ Imagens serão apresentadas pelo browser na resolução máxima; ficheiros de ou
 'logentry-newusers-create' => 'A conta de utilizador $1 foi criada',
 'logentry-newusers-create2' => 'A conta de utilizador $3 foi criada por $1',
 'logentry-newusers-autocreate' => 'A conta $1 foi criada automaticamente',
-'newuserlog-byemail' => 'palavra-chave enviada por correio-electrónico',
+'logentry-rights-rights' => '$1 modificou os privilégios do utilizador  $3  de  $4  para $5',
+'logentry-rights-autopromote' => '$1 foi automaticamente {{GENDER:$2|promovido|promovida}} de $4 a $5',
+'rightsnone' => '(nenhum)',
 
 # Feedback
 'feedback-bugornote' => 'Se está pronto para descrever um problema técnico em detalhe, por favor, [$1 comunique o defeito].
@@ -4075,6 +4084,4 @@ Caso contrário, pode facilmente usar o formulário abaixo. O seu comentário se
 'duration-centuries' => '$1 {{PLURAL:$1|século|séculos}}',
 'duration-millennia' => '$1 {{PLURAL:$1|milénio|milénios}}',
 
-# Unknown messages
-'svg-long-error' => 'Ficheiro SVG inválido: $1',
 );
index 2eaae75..7846686 100644 (file)
@@ -41,6 +41,7 @@
  * @author ManoDbo
  * @author McDutchie
  * @author MetalBrasil
+ * @author Opraco
  * @author Pedroca cerebral
  * @author Ppena
  * @author Rafael Vargas
@@ -157,6 +158,7 @@ $specialPageAliases = array(
        'Mytalk'                    => array( 'Minha_discussão' ),
        'Newimages'                 => array( 'Arquivos_novos', 'Imagens_novas', 'Ficheiros_novos' ),
        'Newpages'                  => array( 'Páginas_novas', 'Artigos_novos' ),
+       'PermanentLink'             => array( 'Ligação_permanente', 'Link_permanente' ),
        'Popularpages'              => array( 'Páginas_populares', 'Artigos_populares' ),
        'Preferences'               => array( 'Preferências' ),
        'Prefixindex'               => array( 'Índice_de_prefixo', 'Índice_por_prefixo' ),
@@ -361,7 +363,7 @@ $messages = array(
 
 'underline-always' => 'Sempre',
 'underline-never' => 'Nunca',
-'underline-default' => 'Padrão do navegador',
+'underline-default' => 'Padrão do navegador/skin',
 
 # Font style option in Special:Preferences
 'editfont-style' => 'Estilo da fonte para a região de edição:',
@@ -446,6 +448,7 @@ $messages = array(
 'newwindow' => '(abre em uma nova janela)',
 'cancel' => 'Cancelar',
 'moredotdotdot' => 'Mais...',
+'morenotlisted' => 'Outros não listados...',
 'mypage' => 'Página',
 'mytalk' => 'Discussão',
 'anontalk' => 'Discussão para este IP',
@@ -479,6 +482,7 @@ $messages = array(
 'namespaces' => 'Espaços nominais',
 'variants' => 'Variantes',
 
+'navigation-heading' => 'Menu de navegação',
 'errorpagetitle' => 'Erro',
 'returnto' => 'Retornar para $1.',
 'tagline' => 'De {{SITENAME}}',
@@ -528,7 +532,7 @@ $messages = array(
 'otherlanguages' => 'Em outros idiomas',
 'redirectedfrom' => '(Redirecionado de $1)',
 'redirectpagesub' => 'Página de redirecionamento',
-'lastmodifiedat' => 'Esta página foi modificada pela última vez às $2 de $1.',
+'lastmodifiedat' => 'Esta página foi modificada pela última vez à(s) $2 de $1.',
 'viewcount' => 'Esta página foi acessada {{PLURAL:$1|uma vez|$1 vezes}}.',
 'protectedpage' => 'Página protegida',
 'jumpto' => 'Ir para:',
@@ -576,7 +580,7 @@ Veja a [[Special:Version|página sobre a versão do sistema]].',
 'youhavenewmessages' => 'Você tem $1 ($2).',
 'newmessageslink' => 'novas mensagens',
 'newmessagesdifflink' => 'última alteração',
-'youhavenewmessagesfromusers' => 'Você tem $1 de {{PLURAL:$3|outro usuário|outros usuários}} ($2)',
+'youhavenewmessagesfromusers' => 'Você tem $1 de {{PLURAL:$3|outro usuário|$3 usuários}} ($2)',
 'youhavenewmessagesmanyusers' => 'Você tem $1 de muitos usuários ($2).',
 'newmessageslinkplural' => '{{PLURAL:$1|uma mensagem nova|mensagens novas}}',
 'newmessagesdifflinkplural' => '{{PLURAL:$1|última alteração|últimas alterações}}',
@@ -689,11 +693,15 @@ Consulta: $2',
 'actionthrottled' => 'Ação controlada',
 'actionthrottledtext' => 'Como medida "anti-spam", você se encontra impedido de realizar esta operação muitas vezes em um curto espaço de tempo; você já excedeu esse limite.
 Tente novamente em alguns minutos.',
-'protectedpagetext' => 'Esta página foi protegida contra novas edições.',
+'protectedpagetext' => 'Esta página foi protegida contra novas edições ou ações relacionadas.',
 'viewsourcetext' => 'Você pode ver e copiar o código desta página:',
 'viewyourtext' => "Pode ver e copiar o código fonte '''das suas edições''' nesta página:",
-'protectedinterface' => 'Esta página fornece texto de interface ao software e encontra-se trancada para prevenir abusos.',
-'editinginterface' => "'''Aviso:''' Você se encontra prestes a editar uma página que é utilizada para fornecer texto de interface ao software. Alterações nesta página irão afetar a aparência da interface de usuário para outros usuários. Para traduções, considere utilizar a [//translatewiki.net/wiki/Main_Page?setlang=pt-br translatewiki.net], um projeto destinado para a tradução do MediaWiki.",
+'protectedinterface' => 'Esta página fornece texto de interface ao software deste wiki, se encontrando protegida para prevenir abusos.
+
+Para adicionar ou alterar traduções em todos os wikis, utilize o [//translatewiki.net/ translatewiki.net], projeto de traduções do MediaWiki.',
+'editinginterface' => "'''Aviso:''' Você se encontra prestes a editar uma página que é utilizada para fornecer texto de interface ao software.
+Alterações nesta página irão afetar a aparência da interface de usuário para outros usuários deste wiki.
+Para alterar ou adicionar traduções, considere utilizar a [//translatewiki.net/wiki/Main_Page?setlang=pt-br translatewiki.net], um projeto destinado para a tradução do MediaWiki.",
 'sqlhidden' => '(Consulta SQL em segundo-plano)',
 'cascadeprotected' => 'Esta página foi protegida contra edições por estar incluída {{PLURAL:$1|na página listada|nas páginas listadas}} a seguir, ({{PLURAL:$1|página essa que está protegida|páginas essas que estão protegidas}} com a opção de "proteção progressiva" ativada):
 $2',
@@ -721,6 +729,9 @@ O administrador que bloqueou ofereceu a seguinte explicação: "$3".',
 
 É possível continuar usando {{SITENAME}} anonimamente ou <span class='plainlinks'>[$1 autenticar-se novamente]</span> com o mesmo nome de usuário ou com um nome diferente.
 Note que algumas páginas podem continuar sendo exibidas como se você ainda estivesse autenticado até que você limpe a ''cache'' do seu navegador.",
+'welcomeuser' => 'Bem-vindo, $1!',
+'welcomecreation-msg' => 'A sua conta foi criada.
+Não se esqueça de personalizar as suas [[Special:Preferences|preferências no wiki {{SITENAME}}]].',
 'yourname' => 'Nome de usuário:',
 'yourpassword' => 'Senha:',
 'yourpasswordagain' => 'Redigite sua senha',
@@ -735,7 +746,7 @@ Note que algumas páginas podem continuar sendo exibidas como se você ainda est
 'userlogin' => 'Entrar / criar conta',
 'userloginnocreate' => 'Entrar',
 'logout' => 'Sair',
-'userlogout' => 'Desconectar',
+'userlogout' => 'Sair',
 'notloggedin' => 'Não autenticado',
 'nologin' => 'Não possui uma conta? $1.',
 'nologinlink' => 'Criar uma conta',
@@ -743,7 +754,7 @@ Note que algumas páginas podem continuar sendo exibidas como se você ainda est
 'gotaccount' => "Já possui uma conta? '''$1'''.",
 'gotaccountlink' => 'Autenticar-se',
 'userlogin-resetlink' => 'Esqueceu-se do seu nome de usuário ou da senha?',
-'createaccountmail' => 'por e-mail',
+'createaccountmail' => 'Usar uma senha aleatória e temporária que será enviada ao endereço de e-mail especificado a seguir',
 'createaccountreason' => 'Razão:',
 'badretype' => 'As senhas que você digitou não são iguais.',
 'userexists' => 'O nome de usuário fornecido já está em uso.
@@ -814,6 +825,7 @@ Por favor aguarde antes de tentar novamente.',
 # E-mail sending
 'php-mail-error-unknown' => 'Erro desconhecido na função mail() do PHP',
 'user-mail-no-addy' => 'Tentou enviar uma mensagem sem um endereço de e-mail.',
+'user-mail-no-body' => 'Você tentou enviar com o campo de e-mail vazio ou com poucos caracteres.',
 
 # Change password dialog
 'resetpass' => 'Alterar senha',
@@ -875,6 +887,7 @@ Senha temporária: $2',
 'changeemail-oldemail' => 'Endereço de e-mail atual:',
 'changeemail-newemail' => 'Novo endereço de e-mail:',
 'changeemail-none' => '(nenhum)',
+'changeemail-password' => 'Sua senha para o wiki {{SITENAME}}:',
 'changeemail-submit' => 'Alterar e-mail',
 'changeemail-cancel' => 'Cancelar',
 
@@ -1000,7 +1013,7 @@ O registro de bloqueio mais recente é fornecido abaixo, para referência:',
 'note' => "'''Nota:'''",
 'previewnote' => "'''Lembre-se de que isto é apenas uma previsão.'''
 Suas alterações ainda não foram salvas!",
-'continue-editing' => 'Continuar editando',
+'continue-editing' => 'Ir para a área de edição',
 'previewconflict' => 'Esta previsão reflete o texto que está na área de edição acima e como ele aparecerá se você escolher salvar.',
 'session_fail_preview' => "'''Pedimos desculpas, mas não foi possível processar a sua edição devido à perda de dados da sua sessão.
 Por favor tente novamente.
@@ -1039,10 +1052,10 @@ Você está, ao mesmo tempo, a garantir-nos que isto é algo escrito por si, ou
 '''NÃO ENVIE TRABALHO PROTEGIDO POR DIREITOS DE AUTOR SEM A DEVIDA PERMISSÃO!'''",
 'longpageerror' => "'''Erro: O texto que submeteu ocupa {{PLURAL:$1|um kilobyte|$1 kilobytes}}, que excede o máximo de {{PLURAL:$2|um kilobyte|$2 kilobytes}}.'''
 A página não pode ser salva.",
-'readonlywarning' => "'''Aviso: A base de dados foi bloqueada para manutenção, por isso você não poderá salvar a sua edição neste momento.'''
-Pode, no entanto, copiar o seu texto num editor externo e guardá-lo para posterior envio.
+'readonlywarning' => "'''Aviso: O banco de dados foi bloqueado para manutenção, por isso você não poderá salvar a sua edição neste momento.'''
+Talvez você queira copiar o seu texto num editor externo e guardá-lo, para posterior envio.
 
-Quem bloqueou o banco de dados forneceu a seguinte justificativa: $1",
+Quem bloqueou o banco de dados forneceu a seguinte explicação: $1",
 'protectedpagewarning' => "'''Atenção: Esta página foi protegida para que apenas usuários com privilégios de administrador possam editá-la.'''
 A última entrada no histórico é fornecida abaixo como referência:",
 'semiprotectedpagewarning' => "'''Nota:''' Esta página foi protegida, sendo que apenas usuários registrados poderão editá-la.
@@ -1057,7 +1070,6 @@ A última entrada no histórico é fornecida abaixo como referência:",
 'template-semiprotected' => '(semi-protegida)',
 'hiddencategories' => 'Esta página pertence a {{PLURAL:$1|uma categoria oculta|$1 categorias ocultas}}:',
 'edittools' => '<!-- O texto aqui disponibilizado será exibido abaixo dos formulários de edição e de envio de arquivos. -->',
-'nocreatetitle' => 'A criação de páginas se encontra limitada',
 'nocreatetext' => '{{SITENAME}} tem restringida a habilidade de criar novas páginas.
 Volte à tela anterior e edite uma página já existente, ou [[Special:UserLogin|autentique-se ou crie uma conta]].',
 'nocreate-loggedin' => 'Você não possui permissão para criar novas páginas.',
@@ -1082,6 +1094,15 @@ Ela parece ter sido eliminada.',
 'edit-already-exists' => 'Não foi possível criar uma nova página.
 Ela já existia.',
 'defaultmessagetext' => 'Texto da mensagem padrão',
+'content-failed-to-parse' => 'Falha ao analisar o conteúdo $2 para o modelo $1: $3',
+'invalid-content-data' => 'Dados de conteúdo inválidos',
+'content-not-allowed-here' => 'O conteúdo de tipo "$1" não é permitido na página [[$2]]',
+
+# Content models
+'content-model-wikitext' => 'wikitexto',
+'content-model-text' => 'texto simples',
+'content-model-javascript' => 'Javascript',
+'content-model-css' => 'CSS',
 
 # Parser/template warnings
 'expensive-parserfunction-warning' => 'Aviso: Esta página contém muitas chamadas a funções do analisador "parser".
@@ -1206,13 +1227,13 @@ Outros administradores no {{SITENAME}} continuarão podendo acessar ao conteúdo
 'revdelete-hide-comment' => 'Ocultar o sumário de edição',
 'revdelete-hide-user' => 'Ocultar nome de usuário/IP do editor',
 'revdelete-hide-restricted' => 'Suprimir dados de administradores assim como de outros',
-'revdelete-radio-same' => '(não altere)',
+'revdelete-radio-same' => '(não alterar)',
 'revdelete-radio-set' => 'Sim',
 'revdelete-radio-unset' => 'Não',
 'revdelete-suppress' => 'Suprimir dados de administradores, bem como de outros',
 'revdelete-unsuppress' => 'Remover restrições das edições restauradas',
 'revdelete-log' => 'Motivo:',
-'revdelete-submit' => 'Aplicar {{PLURAL:$1|à revisão selecionada|à revisões selecionadas}}',
+'revdelete-submit' => 'Aplicar {{PLURAL:$1|à revisão selecionada|às revisões selecionadas}}',
 'revdelete-success' => "'''A visibilidade da revisão foi definida com sucesso.'''",
 'revdelete-failure' => "'''A visibilidade da revisão não foi atualizada:'''
 $1",
@@ -1447,9 +1468,9 @@ Esta ação não pode ser desfeita.',
 'prefs-emailconfirm-label' => 'Confirmação do e-mail:',
 'prefs-textboxsize' => 'Tamanho da janela de edição',
 'youremail' => 'Seu e-mail:',
-'username' => 'Nome de usuário:',
-'uid' => 'Número de identificação:',
-'prefs-memberingroups' => 'Membro {{PLURAL:$1|do grupo|dos grupos}}:',
+'username' => 'Nome de {{GENDER:$1|usuário|usuária}}:',
+'uid' => 'ID de {{GENDER:$1|usuário|usuária}}:',
+'prefs-memberingroups' => '{{GENDER:$2|Membro}} {{PLURAL:$1|do grupo|dos grupos}}:',
 'prefs-registration' => 'Hora de registro:',
 'yourrealname' => 'Nome verdadeiro:',
 'yourlanguage' => 'Língua:',
@@ -1598,13 +1619,13 @@ Caso decida fornecê-lo, este será utilizado para dar-lhe crédito pelo seu tra
 'right-sendemail' => 'Enviar email a outros usuários',
 'right-passwordreset' => 'Ver todos os e-mails de reposição de senhas',
 
+# Special:Log/newusers
+'newuserlogpage' => 'Registro de criação de usuários',
+'newuserlogpagetext' => 'Este é um registro de novas contas de usuário',
+
 # User rights log
 'rightslog' => 'Registro de privilégios de usuário',
 'rightslogtext' => 'Este é um registro de mudanças nos privilégios de usuários.',
-'rightslogentry' => 'alterou os grupos de privilégios {{GENDER:$1|do usuário|da usuária|de usuário para}} $1 (de $2 para $3)',
-'rightslogentry-autopromote' => 'foi automaticamente promovido de $2 para $3',
-'logentry-rights-rights' => '$1 alterou os grupos de usuário de $3 de $4 para $5',
-'rightsnone' => '(nenhum)',
 
 # Associated actions - in the sentence "You do not have permission to X"
 'action-read' => 'ler esta página',
@@ -1631,7 +1652,7 @@ Caso decida fornecê-lo, este será utilizado para dar-lhe crédito pelo seu tra
 'action-suppressionlog' => 'ver este registro privado',
 'action-block' => 'impedir que este usuário edite',
 'action-protect' => 'alterar os níveis de proteção desta página',
-'action-rollback' => 'Reverter rapidamente as edições do último usuário que editou uma página em particular',
+'action-rollback' => 'reverter rapidamente as edições do último usuário que editou uma página em particular',
 'action-import' => 'importar esta página a partir de outro wiki',
 'action-importupload' => 'importar esta página através do carregamento de um arquivo',
 'action-patrol' => 'marcar as edições de outros usuários como patrulhadas',
@@ -1857,6 +1878,7 @@ Caso o problema persista, procure um [[Special:ListUsers/sysop|administrador]].'
 'backend-fail-notsame' => 'Já existe um arquivo não idêntico em $1 .',
 'backend-fail-invalidpath' => '$1 não é um caminho válido de armazenamento.',
 'backend-fail-delete' => 'Não foi possível excluir o arquivo $1.',
+'backend-fail-describe' => 'Não foi possível alterar os metadados do arquivo "$1".',
 'backend-fail-alreadyexists' => 'O arquivo $1 já existe.',
 'backend-fail-store' => 'Não foi possível armazenar o arquivo $1 em $2.',
 'backend-fail-copy' => 'Não foi possível copiar o arquivo $1 para $2.',
@@ -1873,7 +1895,7 @@ Caso o problema persista, procure um [[Special:ListUsers/sysop|administrador]].'
 'backend-fail-internal' => 'Ocorreu um erro desconhecido no servidor de armazenamento "$1".',
 'backend-fail-contenttype' => 'Não foi possível determinar o tipo de conteúdo do arquivo para armazenar em "$1".',
 'backend-fail-batchsize' => 'O servidor de armazenamento retornou um conjunto de $1 {{PLURAL:$1|operação|operações}} de arquivo, enquanto seu limite é de $2 {{PLURAL:$1|operação|operações}}.',
-'backend-fail-usable' => 'Não foi possível salvar o arquivo $1 devido a permissões insuficientes a diretórios ou repositórios inexistentes.',
+'backend-fail-usable' => 'Não foi possível ler ou salvar o arquivo $1 devido a permissões insuficientes a diretórios, ou a repositórios/diretórios inexistentes.',
 
 # File journal errors
 'filejournal-fail-dbconnect' => 'Não foi possível se conectar ao banco de dados de registros do sistema de armazenamento "$1".',
@@ -2006,7 +2028,8 @@ Talvez você deseje editar a descrição na sua [$2 página de descrição de ar
 'uploadnewversion-linktext' => 'Enviar uma nova versão deste arquivo',
 'shared-repo-from' => 'de $1',
 'shared-repo' => 'um repositório compartilhado',
-'upload-disallowed-here' => 'Infelizmente você não pode substituir essa imagem.',
+'filepage.css' => '/* O CSS aqui inserido será incluído na página de descrição de arquivo local e de wikis externos */',
+'upload-disallowed-here' => 'Você não pode substituir este arquivo.',
 
 # File reversion
 'filerevert' => 'Reverter $1',
@@ -2086,8 +2109,9 @@ Talvez você deseje editar a descrição na sua [$2 página de descrição de ar
 
 'disambiguations' => 'Páginas com links para páginas de desambiguação',
 'disambiguationspage' => 'Template:disambig',
-'disambiguations-text' => 'As páginas a seguir ligam a "páginas de desambiguação" ao invés de aos tópicos adequados.<br />
-Uma página é considerada como de desambiguação se utilizar uma predefinição que esteja definida em [[MediaWiki:Disambiguationspage]]',
+'disambiguations-text' => "As páginas a seguir possuem pelo menos um link para uma '''página de desambiguação'''.
+Talvez fosse melhor que possuissem links para uma página mais específica.</br>
+Uma página é considerada como de desambiguação se utilizar uma predefinição que esteja definida em [[MediaWiki:Disambiguationspage]].",
 
 'doubleredirects' => 'Redirecionamentos duplos',
 'doubleredirectstext' => 'Esta página lista as páginas que redirecionam para outros redirecionamentos.
@@ -2239,9 +2263,9 @@ Veja também [[Special:WantedCategories|categorias pedidas]].',
 'linksearch-pat' => 'Procurar padrão:',
 'linksearch-ns' => 'Espaço nominal:',
 'linksearch-ok' => 'Pesquisar',
-'linksearch-text' => 'É possível usar caracteres curinga, como "*.wikipedia.org".
-É necessário, pelo menos, um domínio de nível superior, por exemplo "*.org".<br />
-Protocolos suportados: <code>$1</code> (não adicionado nenhum desses em sua pesquisa).',
+'linksearch-text' => 'É possível usar caracteres coringa, como "*.wikipedia.org".
+Necessário no mínimo um domínio de nível superior, por exemplo "*.org".<br />
+{{PLURAL:$2|Protocolo suportado|Protocolos suportados}}: <code>$1</code> (caso nenhum seja especificado, o protocolo http:// será selecionado automaticamente).',
 'linksearch-line' => '$2 possui links para $1',
 'linksearch-error' => "\"Caracteres mágicos\" (''wildcards'') só podem ser usados no início do endereço.",
 
@@ -2254,16 +2278,12 @@ Protocolos suportados: <code>$1</code> (não adicionado nenhum desses em sua pes
 # Special:ActiveUsers
 'activeusers' => 'Lista de usuários ativos',
 'activeusers-intro' => 'Esta é uma lista de usuários com algum tipo de atividade nos últimos $1 {{PLURAL:$1|dia|dias}}.',
-'activeusers-count' => '$1 {{PLURAL:$1|edição|edições}} {{PLURAL:$3|no último dia|nos últimos $3 dias}}',
+'activeusers-count' => '$1 {{PLURAL:$1|ação|ações}} {{PLURAL:$3|no último dia|nos últimos $3 dias}}',
 'activeusers-from' => 'Mostrar usuários começando em:',
 'activeusers-hidebots' => 'Esconder robôs',
 'activeusers-hidesysops' => 'Esconder administradores',
 'activeusers-noresult' => 'Nenhum usuário encontrado.',
 
-# Special:Log/newusers
-'newuserlogpage' => 'Registro de criação de usuários',
-'newuserlogpagetext' => 'Este é um registro de novas contas de usuário',
-
 # Special:ListGroupRights
 'listgrouprights' => 'Privilégios de grupo de usuários',
 'listgrouprights-summary' => 'O que segue é uma lista dos grupos de usuários definidos neste wiki, com os seus privilégios de acessos associados.
@@ -2287,9 +2307,11 @@ Pode haver [[{{MediaWiki:Listgrouprights-helppage}}|informações adicionais]] s
 'mailnologin' => 'Nenhum endereço de envio',
 'mailnologintext' => 'Necessita de estar [[Special:UserLogin|autenticado]] e de possuir um endereço de e-mail válido nas suas [[Special:Preferences|preferências]] para poder enviar um e-mail a outros usuários.',
 'emailuser' => 'Enviar-lhe um e-mail',
+'emailuser-title-target' => 'Enviar e-mail para {{GENDER:$1|este usuário|esta usuária}}',
+'emailuser-title-notarget' => 'Enviar e-mail',
 'emailpage' => 'Contactar usuário',
-'emailpagetext' => 'Você pode usar o formulário abaixo para enviar uma mensagem por correio eletrônico para este usuário.
-O endereço eletrônico que você inseriu em [[Special:Preferences|suas preferências de usuário]] irá aparecer como o endereço do remetente da mensagem, então o destinatário poderá responder diretamente para você.',
+'emailpagetext' => 'Você pode usar o formulário a seguir para enviar um e-mail para {{GENDER:$1|este usuário|esta usuária}}.
+O endereço de e-mail que você inseriu em [[Special:Preferences|suas preferências de usuário]] irá aparecer como o endereço do remetente da mensagem, com o destinatário podendo responder diretamente para você.',
 'usermailererror' => 'Erro no email:',
 'defemailsubject' => 'E-mail do usuário "$1" da {{SITENAME}}',
 'usermaildisabled' => 'O e-mail do usuário foi desativado',
@@ -2327,8 +2349,8 @@ O endereço eletrônico que você inseriu em [[Special:Preferences|suas preferê
 'watchnologin' => 'Não está autenticado',
 'watchnologintext' => 'Você precisa estar [[Special:UserLogin|autenticado]] para modificar a sua lista de páginas vigiadas.',
 'addwatch' => 'Adicionar às páginas vigiadas',
-'addedwatchtext' => "A página \"[[:\$1]]\" foi adicionada à sua [[Special:Watchlist|lista de páginas vigiadas]].
-Modificações futuras em tal página e páginas de discussão a ela associadas serão listadas lá, e a página aparecerá em '''negrito''' na [[Special:RecentChanges|lista de mudanças recentes]], para que você possa encontrá-la com maior facilidade.",
+'addedwatchtext' => 'A página "[[:$1]]" foi adicionada à sua [[Special:Watchlist|lista de páginas vigiadas]].
+Futuras modificações em tal página e páginas de discussão relacionadas serão listadas lá.',
 'removewatch' => 'Remover das páginas vigiadas',
 'removedwatchtext' => 'A página "[[:$1]]" foi removida de sua [[Special:Watchlist|lista de páginas vigiadas]].',
 'watch' => 'Vigiar',
@@ -2362,7 +2384,7 @@ Modificações futuras em tal página e páginas de discussão a ela associadas
 'enotif_subject_moved' => 'A página $1 da {{SITENAME}} foi movida por {{gender:$2|$2}}',
 'enotif_subject_restored' => 'A página $1 da {{SITENAME}} foi restaurada por {{gender:$2|$2}}',
 'enotif_subject_changed' => 'A página $1 da {{SITENAME}} foi alterada por {{gender:$2|$2}}',
-'enotif_body_intro_deleted' => 'A página $1 da {{SITENAME}} foi eliminada em $PAGEEDITDATE por {{gender:$2|$2}}, acesse $3 para ver a versão atual.',
+'enotif_body_intro_deleted' => 'A página $1 do wiki {{SITENAME}} foi eliminada em $PAGEEDITDATE por {{gender:$2|$2}}. Veja $3.',
 'enotif_body_intro_created' => 'A página $1 da {{SITENAME}} foi criada em $PAGEEDITDATE por {{gender:$2|$2}}, acesse $3 para ver a versão atual.',
 'enotif_body_intro_moved' => 'A página $1 da {{SITENAME}} foi movida em $PAGEEDITDATE por {{gender:$2|$2}}, acesse $3 para ver a versão atual.',
 'enotif_body_intro_restored' => 'A página $1 da {{SITENAME}} foi restaurada em $PAGEEDITDATE por {{gender:$2|$2}}, acesse $3 para ver a versão atual.',
@@ -2370,7 +2392,7 @@ Modificações futuras em tal página e páginas de discussão a ela associadas
 'enotif_lastvisited' => 'Consulte $1 para todas as alterações efetuadas desde a sua última visita.',
 'enotif_lastdiff' => 'Acesse $1 para ver esta alteração.',
 'enotif_anon_editor' => 'usuário anônimo $1',
-'enotif_body' => 'Caro(a) $WATCHINGUSERNAME,
+'enotif_body' => '{{GENDER:$WATCHINGUSERNAME|Caro|Cara|Caro(a)}},
 
 $PAGEINTRO $NEWPAGE
 
@@ -2397,6 +2419,8 @@ $UNWATCHURL
 
 Para comentários e pedidos de ajuda:
 {{canonicalurl:{{MediaWiki:Helppage}}}}',
+'created' => 'criada',
+'changed' => 'alterada',
 
 # Delete
 'deletepage' => 'Eliminar página',
@@ -2468,6 +2492,8 @@ Consulte a [[Special:ProtectedPages|lista de páginas protegidas]] para ver as p
 'prot_1movedto2' => '[[$1]] foi movido para [[$2]]',
 'protect-badnamespace-title' => 'Espaço de nomes não-protegidos',
 'protect-badnamespace-text' => 'As páginas presentes nesse espaço de nomes não se pode proteger',
+'protect-norestrictiontypes-text' => 'Esta página não pode ser protegida, pois não há nenhum tipo de restrição disponível.',
+'protect-norestrictiontypes-title' => 'Página com proteção indisponível',
 'protect-legend' => 'Confirmar proteção',
 'protectcomment' => 'Motivo:',
 'protectexpiry' => 'Expiração',
@@ -2482,13 +2508,13 @@ Esta é a configuração atual para a página '''$1''':",
 Esta é a configuração atual para a página '''$1''':",
 'protect-cascadeon' => 'Esta página encontra-se protegida, uma vez que se encontra incluída {{PLURAL:$1|na página listada a seguir, protegida|nas páginas listadas a seguir, protegidas}} com a "proteção progressiva" ativada. Você poderá alterar o nível de proteção desta página, mas isso não afetará a "proteção progressiva".',
 'protect-default' => 'Permitir todos os usuários',
-'protect-fallback' => 'É necessário o privilégio de "$1"',
-'protect-level-autoconfirmed' => 'Bloquear usuários novos e não registrados',
-'protect-level-sysop' => 'Apenas administradores',
+'protect-fallback' => 'Permitir apenas os usuários com privilégio de "$1"',
+'protect-level-autoconfirmed' => 'Permitir apenas usuários auto-confirmados',
+'protect-level-sysop' => 'Permitir apenas administradores',
 'protect-summary-cascade' => 'p. progressiva',
 'protect-expiring' => 'expira em $1 (UTC)',
 'protect-expiring-local' => 'expira $1',
-'protect-expiry-indefinite' => 'tempo indefinido',
+'protect-expiry-indefinite' => 'indefinidamente',
 'protect-cascade' => '"Proteção progressiva" - proteja quaisquer páginas que estejam incluídas nesta.',
 'protect-cantedit' => 'Você não pode alterar o nível de proteção desta página uma vez que você não se encontra habilitado a editá-la.',
 'protect-othertime' => 'Outra duração:',
@@ -2548,7 +2574,8 @@ Em tais casos, deverá desselecionar ou reverter a ocultação da versão apagad
 'undeletedrevisions' => '$1 {{PLURAL:$1|edição restaurada|edições restauradas}}',
 'undeletedrevisions-files' => '$1 {{PLURAL:$2|edição restaurada|edições restauradas}} e $2 {{PLURAL:$2|arquivo restaurado|arquivos restaurados}}',
 'undeletedfiles' => '{{PLURAL:$1|arquivo restaurado|$1 arquivos restaurados}}',
-'cannotundelete' => 'Restauração falhada; alguém talvez já restaurou a página.',
+'cannotundelete' => 'Falha ao restaurar:
+$1',
 'undeletedpage' => "'''$1 foi restaurada'''
 
 Consulte o [[Special:Log/delete|registro de eliminações]] para um registro das eliminações e restaurações mais recentes.",
@@ -2579,7 +2606,7 @@ $1',
 'blanknamespace' => '(Principal)',
 
 # Contributions
-'contributions' => 'Contribuições {{GENDER:{{BASEPAGENAME}}|do usuário|da usuária}}',
+'contributions' => 'Contribuições {{GENDER:$1|do usuário|da usuária}}',
 'contributions-title' => 'Contribuições {{GENDER:$1|do usuário|da usuária}} $1',
 'mycontris' => 'Contribuições',
 'contribsub2' => 'Para $1 ($2)',
@@ -2621,7 +2648,7 @@ Segue, para referência, a entrada mais recente no registro de bloqueios:',
 'whatlinkshere-hideredirs' => '$1 redirecionamentos',
 'whatlinkshere-hidetrans' => '$1 transclusões',
 'whatlinkshere-hidelinks' => '$1 links',
-'whatlinkshere-hideimages' => '$1 links de imagens',
+'whatlinkshere-hideimages' => '$1 links para arquivos',
 'whatlinkshere-filters' => 'Filtros',
 
 # Block/unblock
@@ -2773,14 +2800,18 @@ Por favor, confirme que realmente pretende fazer isso.',
 # Move page
 'move-page' => 'Mover $1',
 'move-page-legend' => 'Mover página',
-'movepagetext' => "Utilizando o seguinte formulário você poderá renomear uma página, movendo todo o histórico para o novo título. O título anterior será transformado em um redirecionamento para o novo.
-
-Links para as páginas antigas não serão mudados; certifique-se de verificar por redirecionamentos quebrados ou duplos. Você é responsável por certificar-se que os links continuam apontando para onde eles deveriam apontar.
-
-Note que a página '''não''' será movida se já existir uma página com o novo título, a não ser que ele esteja vazio ou seja um redirecionamento e não tenha histórico de edições. Isto significa que pode renomear uma página de volta para o nome que tinha anteriormente se cometer algum engano e que não pode sobrescrever uma página.
-
-<b>CUIDADO!</b>
-Isto pode ser uma mudança drástica e inesperada para uma página popular; por favor, tenha certeza de que compreende as consequências da mudança antes de prosseguir.",
+'movepagetext' => "Utilizando o formulário a seguir você poderá renomear uma página, movendo todo o histórico para o novo título.
+O título anterior será transformado em um redirecionamento para o novo.
+Você poderá optar em atualizar automaticamente os redirecionamentos que se destinem ao título original.
+Caso escolha pela não-atualização, se certifique de verificar por redirecionamentos [[Special:DoubleRedirects|duplos]] ou [[Special:BrokenRedirects|quebrados]].
+É de sua responsabilidade que os links continuem direcionando para onde eles devem.
+
+Note que a página '''não''' será movida se já existir uma página com o novo título, a não ser que ele seja um redirecionamento e não tenha histórico de edições.
+Isto significa que você pode renomear uma página de volta para o seu nome anterior se cometer algum engano e que não poderá sobrescrever uma página existente.
+
+'''CUIDADO!'''
+Esta pode ser uma mudança drástica e inesperada para uma página popular;
+tenha certeza de que compreende as consequências da mudança antes de prosseguir.",
 'movepagetext-noredirectfixer' => "Usando o formulário abaixo, você irá alterar o nome de uma página e moverá todo o histórico desta para o nome novo.
 A página antiga será transformada numa página de redirecionamento para a nova.
 Verifique a existência de [[Special:DoubleRedirects|redirecionamentos duplos]] ou [[Special:BrokenRedirects|quebrados]].
@@ -2842,6 +2873,7 @@ A página de destino ("[[:$1]]") já existe. Deseja eliminá-la de modo a poder
 'immobile-target-namespace-iw' => 'Uma ligação interwiki não é um destino válido para uma movimentação de página.',
 'immobile-source-page' => 'Esta página não pode ser movida.',
 'immobile-target-page' => 'Não é possível mover para esse título de destino.',
+'bad-target-model' => 'O destino especificado usa um modelo de conteúdo diferente. Não é possível converter $1 para $2.',
 'imagenocrossnamespace' => 'Não é possível mover imagem para espaço nominal que não de imagens',
 'nonfile-cannot-move-to-file' => 'Não é possível mover não arquivos para espaço nominal de arquivos',
 'imagetypemismatch' => 'A extensão do novo arquivo não corresponde ao seu tipo',
@@ -2954,7 +2986,9 @@ Salve o arquivo no seu computador e importe-o aqui.',
 'import-error-interwiki' => 'A página "$1" não pôde ser importada pois seu nome está reservado para um link interwik.',
 'import-error-special' => 'A página "$1" não pôde ser importada porque ela pertence a um espaço nominal especial que não suporta páginas.',
 'import-error-invalid' => 'A página "$1" não pôde ser importada por seu nome ser inválido.',
+'import-options-wrong' => '{{PLURAL:$2|Opção com erro|Opções com erros}}: <nowiki>$1</nowiki>',
 'import-rootpage-invalid' => 'A página raiz dada é um título inválido.',
+'import-rootpage-nosubpage' => 'O espaço nominal $1 da página principal não permite subpáginas.',
 
 # Import log
 'importlogpage' => 'Registro de importações',
@@ -3068,7 +3102,7 @@ Permite colocar uma justificativa no sumário da edição.',
 'anonymous' => '{{PLURAL:$1|Usuário anônimo|Usuários anônimos}} da {{SITENAME}}',
 'siteuser' => '{{GENDER:$2|um utilizador|uma utilizadora|um utilizador}} da {{SITENAME}} ($1)',
 'anonuser' => 'usuário anônimo $1 da {{SITENAME}}',
-'lastmodifiedatby' => 'Esta página foi modificada pela última vez às $2 de $1 por $3.',
+'lastmodifiedatby' => 'Esta página foi modificada pela última vez à(s) $2 de $1 por $3.',
 'othercontribs' => 'Baseado no trabalho de $1.',
 'others' => 'outros',
 'siteusers' => '{{PLURAL:$2|um usuário|$2 usuários}} da {{SITENAME}} ($1)',
@@ -3088,19 +3122,22 @@ Tal bloqueio foi provavelmente causado por uma ligação para um ''website'' ext
 
 # Info page
 'pageinfo-title' => 'Informações sobre "$1"',
+'pageinfo-not-current' => 'Desculpe-nos, não é possível fornecer esses dados para edições antigas.',
 'pageinfo-header-basic' => 'Informação básica',
 'pageinfo-header-edits' => 'Histórico de edições',
 'pageinfo-header-restrictions' => 'Proteção da página',
 'pageinfo-header-properties' => 'Propriedades da página',
 'pageinfo-display-title' => 'Exibir título',
+'pageinfo-default-sort' => 'Chave de ordenação padrão',
 'pageinfo-length' => 'Tamanho da página (em bytes)',
 'pageinfo-article-id' => 'ID da página',
+'pageinfo-language' => 'Idioma do conteúdo da página',
 'pageinfo-robot-policy' => 'Status do mecanismo de pesquisa',
 'pageinfo-robot-index' => 'Indexável',
 'pageinfo-robot-noindex' => 'Não indexável',
 'pageinfo-views' => 'Número de visitas',
 'pageinfo-watchers' => 'Número de vigilantes da página',
-'pageinfo-redirects-name' => 'Redireciona para esta página',
+'pageinfo-redirects-name' => 'Redirecionamentos para esta página',
 'pageinfo-subpages-name' => 'Subpáginas desta página',
 'pageinfo-subpages-value' => '$1 ($2 {{PLURAL:$2|redirecionamento|redirecionamentos}}; $3 {{PLURAL:$3|não-redirecionamento|não-redirecionamentos}})',
 'pageinfo-firstuser' => 'Criador da página',
@@ -3113,14 +3150,20 @@ Tal bloqueio foi provavelmente causado por uma ligação para um ''website'' ext
 'pageinfo-recent-authors' => 'Número recente de autores distintos',
 'pageinfo-magic-words' => '{{PLURAL:$1|Palavra mágica|Palavras mágicas}} ($1)',
 'pageinfo-hidden-categories' => '{{PLURAL:$1|Categoria oculta|Categorias ocultas}} ($1)',
-'pageinfo-templates' => '{{PLURAL:$1|predefinição transcluída|predefinições transcluídas}}',
+'pageinfo-templates' => '{{PLURAL:$1|Predefinição transcluída|Predefinições transcluídas ($1)}}',
+'pageinfo-transclusions' => '{{PLURAL:$1|Página incluída |Páginas incluídas}} ($1)',
 'pageinfo-toolboxlink' => 'Informações da página',
-'pageinfo-redirectsto' => 'Redirecionar para',
+'pageinfo-redirectsto' => 'Redireciona para',
 'pageinfo-redirectsto-info' => 'informações',
 'pageinfo-contentpage' => 'Contado como uma página de conteúdo',
 'pageinfo-contentpage-yes' => 'Sim',
 'pageinfo-protect-cascading' => 'Proteção em cascata ativada',
 'pageinfo-protect-cascading-yes' => 'Sim',
+'pageinfo-protect-cascading-from' => 'Proteções herdadas de',
+'pageinfo-category-info' => 'Informações da categoria',
+'pageinfo-category-pages' => 'Número de páginas',
+'pageinfo-category-subcats' => 'Número de subcategorias',
+'pageinfo-category-files' => 'Número de arquivos',
 
 # Skin names
 'skinname-standard' => 'Clássico',
@@ -3142,6 +3185,8 @@ Tal bloqueio foi provavelmente causado por uma ligação para um ''website'' ext
 'markedaspatrollederror' => 'Não é possível marcar como verificado',
 'markedaspatrollederrortext' => 'Você precisa de especificar uma revisão para poder marcar como verificado.',
 'markedaspatrollederror-noautopatrol' => 'Você não está autorizado a marcar suas próprias edições como edições patrulhadas.',
+'markedaspatrollednotify' => 'Esta alteração em $1 foi marcada como patrulhada.',
+'markedaspatrollederrornotify' => 'Falha ao marcar como patrulhada.',
 
 # Patrol log
 'patrol-log-page' => 'Registro de edições patrulhadas',
@@ -3174,6 +3219,8 @@ Executá-lo poderá comprometer a segurança do seu sistema.",
 'file-info-size-pages' => '$1 × $2 pixels, tamanho do arquivo: $3, tipo MIME: $4, $5 {{PLURAL:$5|página|páginas}}',
 'file-nohires' => 'Sem resolução maior disponível.',
 'svg-long-desc' => 'arquivo SVG, de $1 × $2 pixels, tamanho: $3',
+'svg-long-desc-animated' => 'arquivo SVG animado, de $1 × $2 pixels e de tamanho: $3',
+'svg-long-error' => 'Arquivo SVG inválido: $1',
 'show-big-image' => 'Resolução original',
 'show-big-image-preview' => 'Tamanho desta previsualização: $1.',
 'show-big-image-other' => '{{PLURAL:$2|Outra resolução|Outras resoluções}}: $1.',
@@ -3183,6 +3230,8 @@ Executá-lo poderá comprometer a segurança do seu sistema.",
 'file-info-png-looped' => 'cíclico',
 'file-info-png-repeat' => 'tocado $1 {{PLURAL:$1|vez|vezes}}',
 'file-info-png-frames' => '$1 {{PLURAL:$1|quadro|quadros}}',
+'file-no-thumb-animation' => "'''Nota: por limitações técnicas, as miniaturas deste arquivo não estarão animadas.'''",
+'file-no-thumb-animation-gif' => "'''Nota: por limitações técnicas, miniaturas de imagens GIF de alta resolução como esta, não estarão animadas.'''",
 
 # Special:NewFiles
 'newimages' => 'Galeria de novos arquivos',
@@ -3201,7 +3250,10 @@ Executá-lo poderá comprometer a segurança do seu sistema.",
 'minutes' => '{{PLURAL:$1|um minuto|$1 minutos}}',
 'hours' => '{{PLURAL:$1|uma hora|$1 horas}}',
 'days' => '{{PLURAL:$1|um dia|$1 dias}}',
+'months' => '{{PLURAL:$1|$1 mês|$1 meses}}',
+'years' => '{{PLURAL:$1|$1 ano|$1 anos}}',
 'ago' => '$1 atrás',
+'just-now' => 'agora mesmo',
 
 # Bad image list
 'bad_image_list' => 'O formato é o seguinte:
@@ -3704,6 +3756,7 @@ Este código de confirmação irá expirar em $4.',
 # Scary transclusion
 'scarytranscludedisabled' => '[A transclusão de páginas de outros wikis encontra-se desabilitada]',
 'scarytranscludefailed' => '[Não foi possível obter a predefinição a partir de $1]',
+'scarytranscludefailed-httpstatus' => '[Não foi possível obter a predefinição a partir de $1: erro HTTP $2]',
 'scarytranscludetoolong' => '[URL longa demais]',
 
 # Delete conflict
@@ -3814,6 +3867,7 @@ Você também pode [[Special:EditWatchlist|editar a lista da maneira convenciona
 'version-license' => 'Licença',
 'version-poweredby-credits' => "Este é um wiki '''[//www.mediawiki.org/ MediaWiki]''', copyright © 2001-$1 $2.",
 'version-poweredby-others' => 'outros',
+'version-credits-summary' => 'Gostaríamos de agradecer às seguintes pessoas por suas contribuições no [[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.
 
 O MediaWiki é distribuído na esperança de que seja útil, mas SEM QUALQUER GARANTIA; inclusive, sem a garantia implícita da POSSIBILIDADE DE SER COMERCIALIZADO ou de ADEQUAÇÂO PARA QUALQUER FINALIDADE ESPECÍFICA. Consulte a licença GNU General Public License para mais detalhes.
@@ -3858,7 +3912,7 @@ As imagens serão exibidas em sua resolução máxima, outros tipos de arquivos
 'specialpages-group-highuse' => 'Páginas muito usadas',
 'specialpages-group-pages' => 'Listas de páginas',
 'specialpages-group-pagetools' => 'Ferramentas de páginas',
-'specialpages-group-wiki' => 'Dados e ferramentas sobre este wiki',
+'specialpages-group-wiki' => 'Dados e ferramentas',
 'specialpages-group-redirects' => 'Páginas especiais redirecionadas',
 'specialpages-group-spam' => 'Ferramentas anti-spam',
 
@@ -3930,7 +3984,7 @@ As imagens serão exibidas em sua resolução máxima, outros tipos de arquivos
 'logentry-delete-delete' => '$1 apagou a página $3',
 'logentry-delete-restore' => '$1 restaurou a página $3',
 'logentry-delete-event' => '$1 alterou a visibilidade {{PLURAL:$5|de uma entrada|de $5 entradas}} do registro $3: $4',
-'logentry-delete-revision' => '$1 alterou a visibilidade {{PLURAL:$5|de uma revisão|das $5 revisões}} em $3: $4',
+'logentry-delete-revision' => '$1 alterou a visibilidade de {{PLURAL:$5|uma revisão|$5 revisões}} em $3: $4',
 'logentry-delete-event-legacy' => '$1 alterou a visibilidade de uma entrada em $3',
 'logentry-delete-revision-legacy' => '$1 alterou a visibilidade de uma revisão em $3',
 'logentry-suppress-delete' => '$1 suprimiu a página $3',
@@ -3946,17 +4000,21 @@ As imagens serão exibidas em sua resolução máxima, outros tipos de arquivos
 'revdelete-uname-unhid' => 'nome de usuário não oculto',
 'revdelete-restricted' => 'restrições a administradores aplicadas',
 'revdelete-unrestricted' => 'restrições a administradores removidas',
-'logentry-move-move' => '$1 moveu página $3 para $4',
-'logentry-move-move-noredirect' => '$1 moveu página $3 para $4 sem deixar um redirecionamento',
+'logentry-move-move' => '$1 moveu página $3 para $4',
+'logentry-move-move-noredirect' => '$1 moveu página $3 para $4 sem deixar um redirecionamento',
 'logentry-move-move_redir' => '$1 moveu a página $3 para $4 através de um redirecionamento',
 'logentry-move-move_redir-noredirect' => '$1 moveu a página $3 para $4 sem um redirecionamento',
 'logentry-patrol-patrol' => '$1 marcou a revisão $4 da página $3 como patrulhada',
 'logentry-patrol-patrol-auto' => '$1 marcou automaticamente a revisão $4 da página $3 como patrulhada',
-'logentry-newusers-newusers' => '$1 criou uma conta de usuário',
-'logentry-newusers-create' => '$1 criou uma conta de usuário',
-'logentry-newusers-create2' => '$1 criou uma conta de usuário $3',
+'logentry-newusers-newusers' => 'A conta de usuário $1 foi criada',
+'logentry-newusers-create' => 'A conta de usuário $1 foi criada',
+'logentry-newusers-create2' => 'A conta de usuário $3 foi criada por $1',
+'logentry-newusers-byemail' => 'A conta de usuário $3 foi criada por $1, com a senha sendo enviada por e-mail',
 'logentry-newusers-autocreate' => 'A conta $1 foi criada automaticamente',
-'newuserlog-byemail' => 'senha enviada por correio-eletrônico',
+'logentry-rights-rights' => '$1 alterou os grupos de usuário de $3 de $4 para $5',
+'logentry-rights-rights-legacy' => '$1 alterou os grupos de $3',
+'logentry-rights-autopromote' => '$1 foi promovido automaticamente de $4 a $5',
+'rightsnone' => '(nenhum)',
 
 # Feedback
 'feedback-bugornote' => 'Se você está preparado para descrever detalhadamente um problema técnico, [$1 relate um bug].
index 456343d..5e40fbb 100644 (file)
@@ -76,6 +76,7 @@
  * @author Meno25
  * @author Metalhead64
  * @author MichaelFrey
+ * @author Mido
  * @author Mihai
  * @author Minh Nguyen
  * @author Mormegil
@@ -91,6 +92,7 @@
  * @author Octahedron80
  * @author Od1n
  * @author Onecountry
+ * @author Opraco
  * @author OsamaK
  * @author PhiLiP
  * @author Piangpha
@@ -158,7 +160,8 @@ This is the toolbar: [[Image:Toolbar.png]]",
 'tog-editondblclick' => "[[Special:Preferences]], tab 'Edit'. Offers user to open edit page on double click. {{Gender}}",
 'tog-editsection' => "[[Special:Preferences]], tab 'Edit'. Offers user to add links in sub headings for editing sections. {{Gender}}",
 'tog-editsectiononrightclick' => "[[Special:Preferences]], tab 'Edit'. Offers user to edit a section by clicking on a section title. {{Gender}}",
-'tog-showtoc' => "[[Special:Preferences]], tab 'Misc'. Offers user to show a table of contents automatically if a page has more than three headings. {{Gender}}",
+'tog-showtoc' => "[[Special:Preferences]], tab 'Misc'.
+Offers user to show a table of contents automatically if a page has more than 3 headings (= 4 or more headings).",
 'tog-rememberpassword' => "{{Identical|Remember my login on this computer}}[[Special:Preferences]], tab 'User profile', section 'Change password'. Offers user remember login details.  {{Gender}} Parameters:
 * $1 is the number of days the login details are remembered.",
 'tog-watchcreations' => "[[Special:Preferences]], tab 'Watchlist'. Offers user to add created pages to watchlist. {{Gender}}",
@@ -291,9 +294,10 @@ This option means "underline links as in your user skin or your browser", there
 {{Identical|December}}',
 'jan' => 'Abbreviation of January, the first month of the Gregorian calendar',
 'feb' => 'Abbreviation of February, the second month of the Gregorian calendar',
-'mar' => 'Abbreviation of March, the thrird month of the Gregorian calendar',
+'mar' => 'Abbreviation of March, the third month of the Gregorian calendar',
 'apr' => 'Abbreviation of April, the fourth month of the Gregorian calendar',
-'may' => 'Abbreviation of May, the fifth month of the Gregorian calendar',
+'may' => 'Abbreviation of May, the fifth month of the Gregorian calendar.
+{{Identical|May}}',
 'jun' => 'Abbreviation of June, the sixth month of the Gregorian calendar',
 'jul' => 'Abbreviation of July, the seventh month of the Gregorian calendar',
 'aug' => 'Abbreviation of August, the eighth month of the Gregorian calendar',
@@ -330,7 +334,8 @@ See http://test.wikipedia.org/wiki/Category:Test_ko?uselang={{SUBPAGENAME}}, for
 'index-category' => 'Name of the [[mw:Help:Tracking categories|tracking category]] where pages with the <nowiki>__INDEX__</nowiki> behaviour switch are listed. For description of this behaviour switch see [//www.mediawiki.org/wiki/Help:Magic_words#Behavior_switches mediawiki].',
 'noindex-category' => 'Name of the [[mw:Help:Tracking categories|tracking category]] where pages with the <nowiki>__NOINDEX__</nowiki> behaviour switch are listed. For description of this behaviour switch see [//www.mediawiki.org/wiki/Help:Magic_words#Behavior_switches mediawiki].',
 'broken-file-category' => 'Name of [[mw:Help:Tracking categories|tracking category]] where pages that embed files that do not exist ("broken images") are listed.',
-'categoryviewer-pagedlinks' => 'The pagination links in category viewer. Parameters:
+'categoryviewer-pagedlinks' => '{{Optional}}
+The pagination links in category viewer. Parameters:
 * $1 is the previous link,
 * $2 is the next link',
 
@@ -343,15 +348,34 @@ Possible alternatives to the word 'content' are 'subject matter' or 'wiki subjec
 
 {{Identical|Content page}}",
 'newwindow' => 'Below the edit form, next to "{{msg-mw|Edithelp}}".',
-'cancel' => 'Message shown below the edit form, and if you click on it, you stop with editing the page and go back to the normal page view.
-
+'cancel' => '{{doc-actionlink}}
+Message shown below the edit form, and if you click on it, you stop with editing the page and go back to the normal page view.
 {{Identical|Cancel}}',
-'moredotdotdot' => '{{Identical|More...}}',
-'mypage' => "A text for the link to the user's user page in the links at the top of the page.",
-'mytalk' => 'In the personal urls page section - right upper corner.
+'moredotdotdot' => 'Used as "More..." link for {{msg-mw|pageinfo-transclusions}} field, in the "templates used on this page" list.
+
+Similar to {{msg-mw|morenotlisted}}.
+{{Identical|More...}}',
+'morenotlisted' => 'An indication that more of a templates list is not shown.
+
+Used as "More..." link for {{msg-mw|pageinfo-templates}} field.
+
+Similar to {{msg-mw|moredotdotdot}}.',
+'mypage' => "A text for the link to the user's user page in the links at the top of the page.
+{{Identical|Page}}",
+'mytalk' => 'In the personal URLs page section - right upper corner.
+
+Used as link title in your personal toolbox.
+
+See also:
+* {{msg-mw|Mytalk}}
+* {{msg-mw|Accesskey-pt-mytalk}}
+* {{msg-mw|Tooltip-pt-mytalk}}',
+'anontalk' => 'Link to the talk page appearing in [[mw:Help:Navigation#User_Links|user links]] for each anonymous users when [[mw:Manual:$wgShowIPinHeader|$wgShowIPinHeader]] is true.
 
-Used as link title in "Personal tools" toolbar.',
-'anontalk' => 'Link to the talk page appearing in [[mw:Help:Navigation#User_Links|user links]] for each anonymous users when [[mw:Manual:$wgShowIPinHeader|$wgShowIPinHeader]] is true.',
+See also:
+* {{msg-mw|Anontalk}}
+* {{msg-mw|Accesskey-pt-anontalk}}
+* {{msg-mw|Tooltip-pt-anontalk}}',
 'navigation' => 'This is shown as a section header in the sidebar of most skins.
 
 {{Identical|Navigation}}',
@@ -369,6 +393,7 @@ This can also appear in the credits page if the credits feature is enabled,for e
 'qbmyoptions' => 'Heading in the Cologne Blue skin user menu containing links to user (talk) page, preferences, watchlist, etc.
 {{Identical|My pages}}',
 'qbspecialpages' => '{{Identical|Special pages}}',
+'faq' => "FAQ is short for ''frequently asked questions''.",
 'faqpage' => "FAQ is short for ''frequently asked questions''. This page is only linked on some of the old skins, not in Monobook or Modern.
 
 {{doc-important|Do not translate <tt>Project:</tt> part.}}",
@@ -413,16 +438,28 @@ This can also appear in the credits page if the credits feature is enabled,for e
 
 See also [[MediaWiki:Helppage/{{SUBPAGENAME}}|{{int:helppage}}]] and [[MediaWiki:Edithelp/{{SUBPAGENAME}}|{{int:edithelp}}]].
 
+See also:
+* {{msg-mw|Help}}
+* {{msg-mw|Accesskey-n-help}}
+* {{msg-mw|Tooltip-n-help}}
 {{Identical|Help}}',
 'search' => 'Noun. Text of menu section shown on every page of the wiki above the search form.
 
 Also used as title of [[Special:Search]] page in [[Special:SpecialPages]].
 
+See also:
+* {{msg-mw|Search}}
+* {{msg-mw|Accesskey-search}}
+* {{msg-mw|Tooltip-search}}
 {{Identical|Search}}',
 'searchbutton' => 'The button you can see in the sidebar, below the search input box. The "Go" button is [[MediaWiki:Searcharticle/{{SUBPAGENAME}}]].
 
 {{Identical|Search}}',
-'go' => '{{Identical|Go}}',
+'go' => 'See also:
+* {{msg-mw|Go}}
+* {{msg-mw|Accesskey-search-go}}
+* {{msg-mw|Tooltip-search-go}}
+{{Identical|Go}}',
 'searcharticle' => 'Button description in the search menu displayed on every page. The "Search" button is [[MediaWiki:Searchbutton/{{SUBPAGENAME}}]].
 
 {{Identical|Go}}',
@@ -430,23 +467,41 @@ Also used as title of [[Special:Search]] page in [[Special:SpecialPages]].
 
 {{Identical|History}}',
 'updatedmarker' => 'Displayed in the page history (of a page you are [[Special:Watchlist|watching]]), when the page has been edited since the last time you visited it. This feature is used if [[mw:Manual:$wgShowUpdatedMarker|$wgShowUpdatedMarker]] is enabled.',
-'printableversion' => 'Display name for link in wiki menu that leads to a printable version of a content page. Example: see one but last menu item on [[Main Page]].',
-'permalink' => 'Display name for a permanent link to the current revision of a page. When the page is edited, permalink will still link to this revision. Example: Last menu link on [[{{MediaWiki:Mainpage}}]]',
+'printableversion' => 'Display name for link in wiki menu that leads to a printable version of a content page. Example: see one but last menu item on [[Main Page]].
+
+See also:
+* {{msg-mw|Printableversion}}
+* {{msg-mw|Accesskey-t-print}}
+* {{msg-mw|Tooltip-t-print}}',
+'permalink' => 'Display name for a permanent link to the current revision of a page. When the page is edited, permalink will still link to this revision. Example: Last menu link on [[{{MediaWiki:Mainpage}}]]
+
+See also:
+* {{msg-mw|Permalink}}
+* {{msg-mw|Accesskey-t-permalink}}
+* {{msg-mw|Tooltip-t-permalink}}',
 'print' => '{{Identical|Print}}',
 'view' => 'The default text of the "View" or "Read" (Vector) views tab which represents the basic view for the page. Should be in the infinitive mood.
 
 {{Identical|View}}',
-'edit' => 'The text of the tab going to the edit form. When the page is protected, you will see "[[MediaWiki:Viewsource/{{SUBPAGENAME}}|{{int:viewsource}}]]". Should be in the infinitive mood.
+'edit' => 'The text of the tab going to the edit form. When the page is protected, you will see {{msg-mw|Viewsource}}. Should be in the infinitive mood.
 
+See also:
+* {{msg-mw|Edit}}
+* {{msg-mw|Accesskey-ca-edit}}
+* {{msg-mw|Tooltip-ca-edit}}
 {{Identical|Edit}}',
 'create' => 'The text on the tab of the edit form on unexisting pages starts editing them.
 
 {{Identical|Create}}',
 'editthispage' => 'This is the "edit" link as used in the skins Classic/Standard, Cologne Blue and Nostalgia. See {{msg|create-this-page}} for when the page does not exist.',
-'create-this-page' => 'In the skins Classic/Standard, Cologne Blue and Nostalgia this is the text for the link leading to the edit form on pages that have not yet been created. See {{msg|editthispage}} for when the page already exists.
+'create-this-page' => 'In the skins Classic/Standard, Cologne Blue and Nostalgia this is the text for the link leading to the edit form on pages that have not yet been created. See {{msg-mw|editthispage}} for when the page already exists.
 {{Identical|Createpage}}',
 'delete' => 'Name of the Delete tab shown for admins. Should be in the infinitive mood.
 
+See also:
+* {{msg-mw|Delete}}
+* {{msg-mw|Accesskey-ca-delete}}
+* {{msg-mw|Tooltip-ca-delete}}
 {{Identical|Delete}}',
 'deletethispage' => 'In the skins Classic/Standard, Cologne Blue and Nostalgia this is the text for link to delete the page in admin view.
 {{Identical|Delete this page}}',
@@ -454,6 +509,10 @@ Also used as title of [[Special:Search]] page in [[Special:SpecialPages]].
 'viewdeleted_short' => 'Tab label for the undelete button when the user has permission to view the deleted history but not undelete.',
 'protect' => 'Name of protect tab displayed for admins. Should be in the infinitive mood.
 
+See also:
+* {{msg-mw|Protect}}
+* {{msg-mw|Accesskey-ca-protect}}
+* {{msg-mw|Tooltip-ca-protect}}
 {{Identical|Protect}}',
 'protect_change' => 'Text on links for each entry in [[Special:ProtectedPages]] to change the protection of pages (only displayed to admins).
 {{Identical|Change}}',
@@ -461,6 +520,10 @@ Also used as title of [[Special:Search]] page in [[Special:SpecialPages]].
 {{Identical|Protect this page}}',
 'unprotect' => 'Name of unprotect tab displayed for admins
 
+See also:
+* {{msg-mw|Unprotect}}
+* {{msg-mw|Accesskey-ca-unprotect}}
+* {{msg-mw|Tooltip-ca-unprotect}}
 {{Identical|Unprotect}}',
 'unprotectthispage' => 'In the skins Classic/Standard, Cologne Blue and Nostalgia this is the anchor text for the link to unprotect the page in admin view.
 {{Identical|Unprotect this page}}',
@@ -469,18 +532,30 @@ Also used as title of [[Special:Search]] page in [[Special:SpecialPages]].
 'talkpagelinktext' => 'Used as name of links going to talk page in some places, like in [[Special:RecentChanges]], [[Special:Allmessages]], [[Special:Logs]], and [[Special:Watchlist/edit]].
 
 {{Identical|Talk}}',
+'specialpage' => '{{Identical|Special pages}}',
 'personaltools' => 'Heading for a group of links to your user page, talk page, preferences, watchlist, and contributions. This heading is visible in the sidebar in some skins. For an example, see [http://translatewiki.net/wiki/Main_Page?useskin=simple Main Page using simple skin].',
 'articlepage' => "'Content page' is used for NS_MAIN and any other non-standard namespace and this message is only used in skins Nostalgia, Cologneblue and Standard in the bottomLinks part.
 
 {{Identical|Content page}}",
-'talk' => 'Used as display name for the tab to all talk pages. These pages accompany all content pages and can be used for discussing the content page. Example: [[Talk:Example]].
+'talk' => 'Used as display name for the tab to all {{msg-mw|Talk}} pages. These pages accompany all content pages and can be used for discussing the content page. Example: [[Talk:Example]].
 
+See also:
+* {{msg-mw|Talk}}
+* {{msg-mw|Accesskey-ca-talk}}
+* {{msg-mw|Tooltip-ca-talk}}
 {{Identical|Discussion}}',
 'views' => 'Subtitle for the list of available views, for the current page. In "monobook" skin the list of views are shown as tabs, so this sub-title is not shown. For an example, see [http://translatewiki.net/wiki/Main_Page?useskin=simple Main Page using simple skin].
 
 \'\'\'Note:\'\'\' This is "views" as in "appearances"/"representations", \'\'\'not\'\'\' as in "visits"/"accesses".
 {{Identical|View}}',
 'toolbox' => 'The title of the toolbox below the search menu.',
+'userpage' => '',
+'projectpage' => 'Used as link text in Talk page of project page.',
+'imagepage' => 'Used as link text in Talk page of file page.',
+'mediawikipage' => 'Used as link text in Talk page of MediaWiki message page.',
+'templatepage' => 'Used as link text in Talk page of template page.',
+'viewhelppage' => 'Used as link text in Talk page of help page.',
+'categorypage' => 'Used as link text in Talk page of category page.',
 'viewtalkpage' => 'Used in Standard (a.k.a. Classic) skin as a link to talk page for all namespaces, in edit or history mode.',
 'otherlanguages' => 'This message is shown under the toolbox. It is used if there are interwiki links added to the page, like <tt><nowiki>[[</nowiki>en:Interwiki article]]</tt>.
 {{Identical|Otherlanguages}}',
@@ -494,6 +569,10 @@ Also used as title of [[Special:Search]] page in [[Special:SpecialPages]].
 * $2: time
 
 See also [[MediaWiki:Lastmodifiedatby/{{SUBPAGENAME}}]].',
+'viewcount' => 'Used as page-view counter.',
+'protectedpage' => "This message is displayed when trying to edit a page you can't edit because it has been protected.
+
+This message is the title for the message {{msg-mw|protectedpagetext}}.",
 'jumpto' => '"Jump to" navigation links. Hidden by default in monobook skin. The format is: {{int:jumpto}} [[MediaWiki:Jumptonavigation/{{SUBPAGENAME}}|{{int:jumptonavigation}}]], [[MediaWiki:Jumptosearch/{{SUBPAGENAME}}|{{int:jumptosearch}}]].',
 'jumptonavigation' => 'Part of the "jump to" navigation links. Hidden by default in monobook skin. The format is: [[MediaWiki:Jumpto/{{SUBPAGENAME}}|{{int:jumpto}}]] {{int:jumptonavigation}}, [[MediaWiki:Jumptosearch/{{SUBPAGENAME}}|{{int:jumptosearch}}]].
 
@@ -501,6 +580,7 @@ See also [[MediaWiki:Lastmodifiedatby/{{SUBPAGENAME}}]].',
 'jumptosearch' => 'Part of the "jump to" navigation links. Hidden by default in monobook skin. The format is: [[MediaWiki:Jumpto/{{SUBPAGENAME}}|{{int:jumpto}}]] [[MediaWiki:Jumptonavigation/{{SUBPAGENAME}}|{{int:jumptonavigation}}]], {{int:jumptosearch}}.
 
 {{Identical|Search}}',
+'view-pool-error' => 'Error message. $1 is probably unused.',
 'pool-timeout' => "Part of {{msg-mw|view-pool-error}}.
 
 For explanation of 'lock' see [http://en.wikipedia.org/wiki/Lock_%28computer_science%29 wikipedia].",
@@ -520,11 +600,18 @@ For explanation of 'lock' see [http://en.wikipedia.org/wiki/Lock_%28computer_sci
 'aboutpage' => 'Used as the target of the link that appears at the footer of every page on the wiki (in most of  the skins) and leads to the page that contains the site description. Therefore the content should be the same with the page name of the site description page. Only the message in the [[mw:Manual:$wgLanguageCode|site language]]  ([[MediaWiki:Aboutpage]]) is used. The link label is {{msg-mw|aboutsite}}.
 
 {{doc-important|Do not translate "Project:" part, for this is the namespace prefix.}}',
+'copyright' => '* $1 - license name',
 'copyrightpage' => '{{doc-important|Do not change <nowiki>{{ns:project}}</nowiki>}}
 
 {{Identical|Copyright}}',
-'currentevents' => 'Standard link in the sidebar, for news. See also {{msg|currentevents-url}} for the link url.',
-'currentevents-url' => "Target page of ''{{Mediawiki:currentevents}}'' in the sidebar. See also {{msg|currentevents}}.
+'currentevents' => 'Standard link in the sidebar, for news. See also {{msg|currentevents-url}} for the link url.
+
+See also:
+* {{msg-mw|Currentevents}}
+* {{msg-mw|Currentevents-url}}
+* {{msg-mw|Accesskey-n-currentevents}}
+* {{msg-mw|Tooltip-n-currentevents}}',
+'currentevents-url' => "Target page of ''CurrentEvents'' in the sidebar. See also {{msg-mw|currentevents}}.
 {{doc-important|Do not translate the \"<tt>Project:</tt>\" part.}}",
 'disclaimers' => 'Used as display name for the link to [[{{MediaWiki:Disclaimerpage}}]] shown at the bottom of every page on the wiki. Example [[{{MediaWiki:Disclaimerpage}}|{{MediaWiki:Disclaimers}}]].',
 'disclaimerpage' => 'Used as page for that contains the site disclaimer. Used at the bottom of every page on the wiki. Example: [[{{MediaWiki:Disclaimerpage}}|{{MediaWiki:Disclaimers}}]].
@@ -532,18 +619,40 @@ For explanation of 'lock' see [http://en.wikipedia.org/wiki/Lock_%28computer_sci
 'edithelp' => 'This is the text that appears on the editing help link that is near the bottom of the editing page',
 'edithelppage' => 'The help page displayed when a user clicks on editing help link which is present on the right of Show changes button.
 {{doc-important|Do not change the "<tt>Help:</tt>" part.}}',
-'helppage' => 'The link destination used by default in the sidebar, and in {{msg|noarticletext}}.
+'helppage' => 'The link destination used by default in the sidebar, and in {{msg-mw|noarticletext}}.
 {{doc-important|Do not change the "<tt>Help:</tt>" part.}}
 {{Identical|HelpContent}}',
 'mainpage' => 'Defines the link and display name of the main page of the wiki. Shown as the top link in the navigation part of the interface. Please do not change it too often, that could break things!
 
+See also:
+* {{msg-mw|Mainpage}}
+* {{msg-mw|Accesskey-n-mainpage}}
+* {{msg-mw|Tooltip-n-mainpage}}
+{{Identical|Main page}}',
+'mainpage-description' => 'The same as {{msg|mainpage|pl=yes}}, used as link text on [[MediaWiki:Sidebar]]. This makes it possible to the change the link destination (the message "mainpage") without changing the link text or without disabling translations.
+
+See also:
+* {{msg-mw|Mainpage-description}}
+* {{msg-mw|Accesskey-n-mainpage-description}}
+* {{msg-mw|Tooltip-n-mainpage-description}}
 {{Identical|Main page}}',
-'mainpage-description' => 'The same as {{msg|mainpage|pl=yes}}, used as link text on [[MediaWiki:Sidebar]]. This makes it possible to the change the link destination (the message "mainpage") without changing the link text or without disabling translations.',
 'policy-url' => 'Description: The URL of the project page describing the policies of the wiki. This is shown below every page (the left link).
 {{doc-important|Do not change the "<tt>Project:</tt>" part.}}',
-'portal' => "Display name for the 'Community portal', shown in the sidebar menu of all pages. The target page is meant to be a portal for users where useful links are to be found about the wiki's operation.",
+'portal' => "Display name for the 'Community portal', shown in the sidebar menu of all pages. The target page is meant to be a portal for users where useful links are to be found about the wiki's operation.
+
+See also:
+* {{msg-mw|Portal}}
+* {{msg-mw|Portal-url}}
+* {{msg-mw|Accesskey-n-portal}}
+* {{msg-mw|Tooltip-n-portal}}",
 'portal-url' => 'Description: The URL of the community portal. This is shown in the sidebar by default (removed on translatewiki.net).
-{{doc-important|Do not change the "<tt>Project:</tt>" part.}}',
+{{doc-important|Do not change the "<tt>Project:</tt>" part.}}
+
+See also:
+* {{msg-mw|Portal}}
+* {{msg-mw|Portal-url}}
+* {{msg-mw|Accesskey-n-portal}}
+* {{msg-mw|Tooltip-n-portal}}',
 'privacy' => 'Used as page name and link at the bottom of each wiki page. The page contains a legal notice providing information about the use of personal information by the website owner.of the site. Example: [[Privacy policy]].',
 'privacypage' => 'Used as page for that contains the privacy policy. Used at the bottom of every page on the wiki. Example: [[{{MediaWiki:Privacypage}}|{{MediaWiki:Privacy}}]].
 {{doc-important|Do not change the "<tt>Project:</tt>" part.}}',
@@ -559,8 +668,8 @@ For explanation of 'lock' see [http://en.wikipedia.org/wiki/Lock_%28computer_sci
 'versionrequiredtext' => 'This message is not used in the MediaWiki core, but was introduced with the reason that it could be useful for extensions. See also {{msg|versionrequired}}.',
 
 'ok' => '{{Identical|OK}}',
-'pagetitle' => "{{doc-important|You most probably do not need to translate this message.}}
-
+'pagetitle' => "{{Optional}}
+{{doc-important|You most probably do not need to translate this message.}}
 Do '''not''' replace SITENAME with a translation of Wikipedia or some encycopedic additions. The message has to be neutral for all projects.",
 'pagetitle-view-mainpage' => '{{optional}}',
 'backlinksubtitle' => '{{optional}}
@@ -569,10 +678,15 @@ Appears in subtitle
 'retrievedfrom' => 'Message which appears in the source of every page, but it is hidden. It is shown when printing. $1 is 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}}]]}}"',
-'newmessageslink' => 'This is the first link displayed in an orange rectangle when a user gets a message on his talk page. Used in message {{msg-mw|youhavenewmessages}} (as parameter $1).
+'newmessageslink' => 'This is the first link displayed in an orange rectangle when a user gets a message on his talk page.
+
+Used in message {{msg-mw|youhavenewmessages}} (as parameter $1).
 
 {{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 in message {{msg-mw|youhavenewmessages}} (as parameter $2).',
+'newmessagesdifflink' => 'This is the second link displayed in an orange rectangle when a user gets a message on his talk page. Used in message {{msg-mw|youhavenewmessages}} (as parameter $2).
+
+See also:
+* {{msg-mw|Newmessagesdifflinkplural}}',
 'youhavenewmessagesfromusers' => 'New talk indicator message: the message appearing when someone edited your user talk page.
 The message takes three parameters;
 *$1 {{msg-mw|newmessageslinkplural}},
@@ -584,8 +698,11 @@ The message takes three parameters;
 'newmessageslinkplural' => 'Like {{msg-mw|newmessageslink}} but supporting pluralization. Used in message {{msg-mw|youhavenewmessagesfromusers}} (as parameter $1).
 This message itself takes one parameter, $1, which is 1 if there was one new edit, or 2 if there was more than one new edit
 since the last time the user has seen his or her talk page.',
-'newmessagesdifflinkplural' => 'Like {{msg-mw|newmessagesdifflink}} but supporting pluralization. Used in message {{msg-mw|youhavenewmessagesfromusers}} (as parameter $2).
-This message itself takes one parameter, $1, which is the number of new edits since the last time the user has seen his or her talk page.',
+'newmessagesdifflinkplural' => 'This message itself takes one parameter, $1, which is the number of new edits since the last time the user has seen his or her talk page: it should be used only for correct [[plural]] as in the source text, as the exact number is not relevant.
+
+Like {{msg-mw|newmessagesdifflink}} but supporting pluralization.
+
+Used in message {{msg-mw|youhavenewmessagesfromusers}} (as parameter $2).',
 'youhavenewmessagesmulti' => 'The alternative of {{msg|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}}]]}}"',
 'editsection' => 'Display name of link to edit a section on a content page. Example: [{{MediaWiki:Editsection}}].
@@ -610,13 +727,25 @@ The format is: "{{int:youhavenewmessagesmulti| [[MediaWiki:Newmessageslink/{{SUB
 'hidetoc' => 'This is the link used to hide the table of contents
 
 {{Identical|Hide}}',
-'collapsible-collapse' => 'This is the link used to collapse a collapsible element. (used as plaintext. No wikitext or html is parsed.)',
-'collapsible-expand' => 'This is the link used to expand a collapsible element (used as plaintext. No wikitext or html is parsed.)',
+'collapsible-collapse' => '{{Doc-actionlink}}
+This is the link used to collapse a collapsible element. (used as plaintext. No wikitext or html is parsed.)
+
+See also:
+* {{msg-mw|Collapsible-expand}}',
+'collapsible-expand' => '{{Doc-actionlink}}
+This is the link used to expand a collapsible element (used as plaintext. No wikitext or html is parsed.)
+
+See also:
+* {{msg-mw|Collapsible-collapse}}
+
+See the following example:
+{{Identical|Expand}}',
 'thisisdeleted' => 'Message shown on a deleted page when the user has the undelete right. $1 is a link to [[Special:Undelete]], with {{msg-mw|restorelink}} as the text. See also {{msg-mw|viewdeleted}}.',
 'viewdeleted' => 'Message shown on a deleted page when the user does not have the undelete right (but has the deletedhistory right). $1 is a link to [[Special:Undelete]], with {{msg-mw|restorelink}} as the text. See also {{msg-mw|thisisdeleted}}.',
 'restorelink' => "This text is always displayed in conjunction with the {{msg-mw|thisisdeleted}} message (View or restore $1?). The user will see
 View or restore <nowiki>{{PLURAL:$1|one deleted edit|$1 deleted edits}}</nowiki>?    i.e ''View or restore one deleted edit?''     or
 ''View or restore n deleted edits?''",
+'feed-invalid' => 'Result of check whether feed type is valid or not.',
 'feed-unavailable' => 'This message is displayed when a user tries to use an RSS or Atom feed on a wiki where such feeds have been disabled.',
 'site-rss-feed' => "Used in the HTML header of a wiki's RSS feed.
 $1 is <nowiki>{{SITENAME}}</nowiki>.
@@ -628,8 +757,16 @@ HTML markup cannot be used.
 {{Identical|S1 RSS/Atom feed}}",
 'page-rss-feed' => '{{Identical|S1 RSS/Atom feed}}',
 'page-atom-feed' => '{{Identical|S1 RSS/Atom feed}}',
-'feed-atom' => '{{optional}}',
-'feed-rss' => '{{optional}}',
+'feed-atom' => '{{optional}}
+See also:
+* {{msg-mw|Feed-atom}}
+* {{msg-mw|Accesskey-feed-atom}}
+* {{msg-mw|Tooltip-feed-atom}}',
+'feed-rss' => '{{optional}}
+See also:
+* {{msg-mw|Feed-rss}}
+* {{msg-mw|Accesskey-feed-rss}}
+* {{msg-mw|Tooltip-feed-rss}}',
 'red-link-title' => 'Title for red hyperlinks. Indicates, that the page is empty, not written yet.',
 'sort-descending' => 'JavaScript message. Used by sortable table script.',
 'sort-ascending' => 'JavaScript message. Used by sortable table script.',
@@ -637,34 +774,87 @@ HTML markup cannot be used.
 # Short words for each namespace, by default used in the namespace tab in monobook
 'nstab-main' => 'The name for the tab of the main namespace. Example: [[Example]]
 
+See also:
+* {{msg-mw|Nstab-main}}
+* {{msg-mw|Accesskey-ca-nstab-main}}
+* {{msg-mw|Tooltip-ca-nstab-main}}
 {{Identical|Page}}',
 'nstab-user' => 'The name for the tab of the user namespace. Example: [[User:Example]]. It is possible to use <nowiki>{{GENDER:{{BASEPAGENAME}}|male form|female form}}</nowiki> if needed.
 
+See also:
+* {{msg-mw|Nstab-user}}
+* {{msg-mw|Accesskey-ca-nstab-user}}
+* {{msg-mw|Tooltip-ca-nstab-user}}
 {{Identical|User page}}',
-'nstab-special' => 'The name for the tab of the special namespace. Example: [[Special:Version]]',
-'nstab-project' => 'The name for the tab of the project namespace. Example: [[Project:Example]]',
-'nstab-image' => 'The name for the tab of the image namespace. Example: [[Image:Example]]
+'nstab-media' => 'The name for the tab of the media namespace. Example: [[Media:Example]]
 
+See also:
+* {{msg-mw|Nstab-media}}
+* {{msg-mw|Accesskey-ca-nstab-media}}
+* {{msg-mw|Tooltip-ca-nstab-media}}',
+'nstab-special' => 'The name for the tab of the special namespace. Example: [[Special:Version]]
+
+See also:
+* {{msg-mw|Nstab-special}}
+* {{msg-mw|Tooltip-ca-nstab-special}}
+{{Identical|Special pages}}',
+'nstab-project' => 'The name for the tab of the project namespace. Example: [[Project:Example]]
+
+See also:
+* {{msg-mw|Nstab-project}}
+* {{msg-mw|Accesskey-ca-nstab-project}}
+* {{msg-mw|Tooltip-ca-nstab-project}}',
+'nstab-image' => 'The name for the tab of the File namespace. Example: [[Image:Example]]
+
+See also:
+* {{msg-mw|Nstab-image}}
+* {{msg-mw|Accesskey-ca-nstab-image}}
+* {{msg-mw|Tooltip-ca-nstab-image}}
 {{Identical|File}}',
 'nstab-mediawiki' => 'The name for the tab of the MediaWiki namespace. Example: [[MediaWiki:Example]]
 
+See also:
+* {{msg-mw|Nstab-mediawiki}}
+* {{msg-mw|Accesskey-ca-nstab-mediawiki}}
+* {{msg-mw|Tooltip-ca-nstab-mediawiki}}
 {{Identical|Message}}',
 'nstab-template' => 'The name for the tab of the template namespace. Example: [[Template:Example]]
 
+See also:
+* {{msg-mw|Nstab-template}}
+* {{msg-mw|Accesskey-ca-nstab-template}}
+* {{msg-mw|Tooltip-ca-nstab-template}}
 {{Identical|Template}}',
-'nstab-help' => 'The name for the tab of the help namespace. Example: [[Help:Rollback]]',
+'nstab-help' => 'The name for the tab of the help namespace. Example: [[Help:Rollback]]
+
+See also:
+* {{msg-mw|Nstab-help}}
+* {{msg-mw|Accesskey-ca-nstab-help}}
+* {{msg-mw|Tooltip-ca-nstab-help}}',
 'nstab-category' => 'The name for the tab of the category namespace. Example: [[:Category:Example]]
 
+See also:
+* {{msg-mw|Nstab-category}}
+* {{msg-mw|Accesskey-ca-nstab-category}}
+* {{msg-mw|Tooltip-ca-nstab-category}}
 {{Identical|Category}}',
 
 # Main script and global functions
+'nosuchaction' => 'The title of the error you get when trying to open a page with invalid "action" parameter. The text of the warning is the message {{msg-mw|nosuchactiontext}}.
+
+See example [//translatewiki.net/wiki/Main_page?action=x action=x].',
+'nosuchactiontext' => 'This error is shown when trying to open a page with invalid "action" parameter, e.g. [//translatewiki.net/wiki/Main_page?action=x action=x].
+* The title of this error is the message {{msg-mw|nosuchaction}}.',
 'nosuchspecialpage' => 'The title of the error you get when trying to open a special page which does not exist. The text of the warning is the message {{msg-mw|nospecialpagetext}}. Example: [[Special:Nosuchpage]]',
-'nospecialpagetext' => 'This error is shown when trying to open a special page which does not exist, e.g. [[Special:Nosuchpage]].
-* The title of this error is the message {{msg-mw|nosuchspecialpage}}.
-* Link <code><nowiki>[[Special:SpecialPages|{{int:specialpages}}]]</nowiki></code> should remain untranslated.',
+'nospecialpagetext' => '{{doc-important|Link <code><nowiki>[[Special:SpecialPages|{{int:specialpages}}]]</nowiki></code> should remain untranslated.}}
+This error is shown when trying to open a special page which does not exist, e.g. [[Special:Nosuchpage]].
+* The title of this error is the message {{msg-mw|nosuchspecialpage}}.',
 
 # General errors
 'error' => '{{Identical|Error}}',
+'databaseerror' => 'Used as title of error message (one of the following messages):
+* {{msg-mw|Dberrortext}}
+* {{msg-mw|Dberrortextcl}}',
 'dberrortext' => 'Parameters:
 * $1 - The last SQL command/query
 * $2 - SQL function name
@@ -675,7 +865,10 @@ HTML markup cannot be used.
 * $2 - SQL function name
 * $3 - Error number
 * $4 - Error description',
+'laggedslavemode' => 'Used as warning when getting the timestamp of the latest version, if in LaggedSlaveMode.',
+'readonly' => 'Used as title of error message when database is locked.',
 'enterlockreason' => 'For developers when locking the database',
+'readonlytext' => 'Used as error message when the database is locked.',
 'missing-article' => "This message is shown when a revision does not exist, either as permalink or as diff. Examples:
 
 # [http://translatewiki.net/w/i.php?title=Project:News&oldid=9999999 Permalink with invalid revision#]
@@ -686,12 +879,12 @@ HTML markup cannot be used.
 * $2: Content of
 *# {{msg-mw|Missingarticle-rev}} - Permalink with invalid revision#
 *# {{msg-mw|Missingarticle-diff}} - Diff with invalid revision#",
-'missingarticle-rev' => 'Parameter $2 of {{msg|Missing-article}}: It is shown after the articlename.
+'missingarticle-rev' => 'Parameter $2 of {{msg-mw|Missing-article}}: It is shown after the articlename.
 
 * $1: revision# of the requested id
 
 [http://translatewiki.net/w/i.php?title=Translating:Tasks&oldid=371789000 Click here] to see an example of such an error message.',
-'missingarticle-diff' => 'Parameter $2 of {{msg|Missing-article}}: It is shown after the articlename.
+'missingarticle-diff' => 'Parameter $2 of {{msg-mw|Missing-article}}: It is shown after the articlename.
 
 * $1: revision# of the old id
 * $2: revision# of the id build the diff with.
@@ -699,14 +892,44 @@ HTML markup cannot be used.
 [http://translatewiki.net/w/i.php?title=Translating:Tasks&diff=372398&oldid=371789000 Click here] to see an example of such an error message.',
 'readonly_lag' => 'Error message displayed when the database is locked.',
 'internalerror' => '{{Identical|Internal error}}',
+'internalerror_info' => '* $1 - error message',
 'fileappenderrorread' => '"Append" is a computer procedure, explained on [http://en.wikipedia.org/wiki/Append Wikipedia].
 
 $1 is a filename, I think.',
+'fileappenderror' => 'Parameters:
+* $1 - file name
+* $2 - file name',
+'filecopyerror' => 'Parameters:
+* $1 - source file name
+* $2 - destination file name',
+'filerenameerror' => 'Parameters:
+* $1 - old file name
+* $2 - new file name',
+'filedeleteerror' => '* $1 - file name',
+'directorycreateerror' => '* $1 - directory name',
+'filenotfound' => '* $1 - file name',
+'fileexistserror' => '* $1 - file name',
+'unexpected' => 'This message indicates the value $2 is unexpected for $1. Parameters:
+* $1 - name
+* $2 - value',
+'badarticleerror' => 'Used as error message in moving page.
+
+See also:
+* {{msg-mw|Articleexists}}
+* {{msg-mw|Bad-target-model}}',
+'cannotdelete' => 'Error message in deleting. Parameters:
+* $1 - page name or file name',
 'cannotdelete-title' => 'Title of error page when the user cannot delete a page
 * $1 is the page name',
 'delete-hook-aborted' => 'Error message shown when an extension hook prevents a page deletion, but does not provide an error message.',
 'badtitle' => 'The page title when a user requested a page with invalid page name. The content will be {{msg-mw|badtitletext}}.',
-'badtitletext' => 'The message shown when a user requested a page with invalid page name. The page title will be {{msg-mw|badtitle}}.',
+'badtitletext' => 'The message shown when a user requested a page with invalid page name. The page title will be {{msg-mw|badtitle}}.
+
+See also:
+* {{msg-mw|selfmove}}
+* {{msg-mw|immobile-source-namespace}}
+* {{msg-mw|immobile-target-namespace-iw}}
+* {{msg-mw|immobile-target-namespace}}',
 'perfcached' => 'Like {{msg-mw|perfcachedts}} but used when we do not know how long ago page was cached (unlikely to happen). Parameters:
 * $1 is the max result cut off ($wgQueryCacheLimit)',
 'perfcachedts' => 'Used on pages that list page lists for which the displayed data is cached. Parameters:
@@ -715,15 +938,21 @@ $1 is a filename, I think.',
 * $3 is a time (optional)
 * $4 is the cut off limit for cached results ($wgQueryCacheLimit). If there are more then this many results for the query, only the first $4 of those will be listed on the page. Usually $4 is about 1000.',
 'querypage-no-updates' => 'Text on some special pages, e.g. [[Special:FewestRevisions]].',
-'viewsource' => 'The text displayed in place of the "edit" tab when the user has no permission to edit the page.
+'wrong_wfQuery_params' => 'Used as error message.',
+'viewsource' => 'The text displayed in place of the {{msg-mw|Edit}} tab when the user has no permission to edit the page.
 
+See also:
+* {{msg-mw|Viewsource}}
+* {{msg-mw|Accesskey-ca-viewsource}}
+* {{msg-mw|Tooltip-ca-viewsource}}
 {{Identical|View source}}',
 'viewsource-title' => 'Page title shown when trying to edit a protected page.
 * $1 is the name of the page',
 'actionthrottled' => 'This is the title of an error page. Read it in combination with {{msg-mw|actionthrottledtext}}.',
-'protectedpagetext' => 'This message is displayed when trying to edit a page you can\'t edit because it has been protected.
+'actionthrottledtext' => 'Used as error message. Read it in combination with {{msg-mw|actionthrottled}}.',
+'protectedpagetext' => "This message is displayed when trying to edit a page you can't edit because it has been protected.
 
-* $1: the protection type, e.g. "protect" for fully protected pages',
+The title for this message is {{msg-mw|protectedpage}}.",
 'viewsourcetext' => 'The text shown when displaying the source of a page that the user has no permission to edit',
 'viewyourtext' => 'Same as {{msg-mw|viewsourcetext}} but when showing the text submitted by the user, this happens e.g. when the user was blocked while he is editing the page',
 'protectedinterface' => 'Message shown if a user without the "editinterface" right tries to edit a page in the MediaWiki namespace.
@@ -732,8 +961,19 @@ See also {{msg-mw|editinginterface}}.',
 'editinginterface' => 'A message shown when editing pages in the namespace MediaWiki:.
 
 See also {{msg-mw|protectedinterface}}.',
+'sqlhidden' => 'This message indicates the SQL is hidden for security reasons.',
+'cascadeprotected' => 'Parameters:
+* $1 - number of cascade-protected pages, used for PLURAL
+* $2 - list of cascade-protected pages',
+'namespaceprotected' => '* $1 - namespace name',
+'customcssprotected' => 'Used as error message.',
+'customjsprotected' => 'Used as error message.',
 'ns-specialprotected' => 'Error message displayed when trying to edit a page in the Special namespace',
 'titleprotected' => 'Use $1 for GENDER.',
+'filereadonlyerror' => 'Parameters:
+* $1 - file name
+* $2 - file repository name
+* $3 - reason',
 'invalidtitle-knownnamespace' => 'Displayed when an invalid title was encountered (generally in a list), but the namespace number is known to exist.
 * $1 is the namespace number
 * $2 is the namespace name in content language or {{msg-mw|blanknamespace}} for the main namespace
@@ -741,9 +981,16 @@ See also {{msg-mw|protectedinterface}}.',
 'invalidtitle-unknownnamespace' => 'Displayed when an invalid title was encountered (generally in a list) and the namespace number is unknown.
 * $1 is the namespace number
 * $2 is the part of the title after the namespace (e.g. SomeName for the page User:SomeName)',
-'exception-nologin' => 'Generic page title used on error page when a user is not logged in. Message used by the UserNotLoggedIn exception.',
+'exception-nologin' => 'Generic page title used on error page when a user is not logged in. Message used by the UserNotLoggedIn exception.
+{{Identical|Not logged in}}',
 'exception-nologin-text' => 'Generic reason displayed on error page when a user is not logged in. Message used by the UserNotLoggedIn exception.',
 
+# Virus scanner
+'virus-badscanner' => 'Used as error message.',
+'virus-scanfailed' => 'Used as error message. "scan" stands for "virus scan". Parameters:
+* $1 - exit code of virus scanner',
+'virus-unknownscanner' => 'Used as error message. This message is followed by the virus scanner name.',
+
 # Login and logout pages
 'logouttext' => 'Log out message
 * $1 is an URL to [[Special:Userlogin]] containing returnto and returntoquery parameters',
@@ -761,12 +1008,18 @@ See also {{msg-mw|protectedinterface}}.',
 'remembermypassword' => 'A check box in [[Special:UserLogin]]
 
 {{Identical|Remember my login on this computer}}',
+'securelogin-stick-https' => 'Used as label for checkbox.',
+'yourdomainname' => 'Used as label for listbox.',
 'password-change-forbidden' => 'Error message shown when an external authentication source does not allow the password to be changed.',
 'externaldberror' => 'This message is thrown when a valid attempt to change the wiki password for a user fails because of a database error or an error from an external system.',
-'login' => "Shown as the caption of the button at [[Special:UserLogin]], and also to anonymous users in the upper right corner of the page when they can't create an account (otherwise the message {{msg|nav-login-createaccount}} is shown there).
+'login' => "Shown as the caption of the button at [[Special:UserLogin]], and also to anonymous users in the upper right corner of the page when they can't create an account (otherwise the message {{msg-mw|nav-login-createaccount}} is shown there).
 
+See also:
+* {{msg-mw|Login}}
+* {{msg-mw|Accesskey-pt-anonlogin}}
+* {{msg-mw|Tooltip-pt-anonlogin}}
 {{Identical|Log in}}",
-'nav-login-createaccount' => "Shown to anonymous users in the upper right corner of the page. When you can't create an account, the message {{msg|login}} is shown.
+'nav-login-createaccount' => "Shown to anonymous users in the upper right corner of the page. When you can't create an account, the message {{msg-mw|login}} is shown.
 {{identical|Log in / create account}}",
 'loginprompt' => 'A small notice in the log in form.',
 'userlogin' => 'Name of special page [[Special:UserLogin]] where a user can log in or click to create a user account.
@@ -774,8 +1027,15 @@ See also {{msg-mw|protectedinterface}}.',
 'userloginnocreate' => 'A variant of {{msg-mw|Userlogin}} when the user is not allowed to create a new account.
 
 {{Identical|Log in}}',
-'logout' => '{{Identical|Log out}}',
-'userlogout' => '{{Identical|Log out}}',
+'logout' => 'Used as link text in your personal toolbox (upper right side).
+
+See also:
+* {{msg-mw|Logout}}
+* {{msg-mw|Accesskey-pt-logout}}
+* {{msg-mw|Tooltip-pt-logout}}
+{{Identical|Log out}}',
+'userlogout' => '{{Doc-actionlink}}
+{{Identical|Log out}}',
 'notloggedin' => 'This message is displayed in the standard skin when not logged in. The message is placed above the login link in the top right corner of pages.
 
 {{Identical|Not logged in}}',
@@ -786,13 +1046,17 @@ See also {{msg-mw|protectedinterface}}.',
 
 It is also used on the top of the page for logged out users, where it appears next to {{msg-mw|login}}, so consider making them similar.
 {{Identical|Create account}}',
-'gotaccount' => 'A message shown in the account creation form. $1 is a link to the log in form, and the text of it is "[[MediaWiki:Gotaccountlink/{{SUBPAGENAME}}|{{int:gotaccountlink}}]]".',
+'gotaccount' => 'A message shown in the account creation form.
+* $1 - a link to the log in form, and the text of it is {{msg-mw|Gotaccountlink}}',
 'gotaccountlink' => 'Text of the link to the log in form. Before that link, the message [[MediaWiki:Gotaccount/{{SUBPAGENAME}}]] appears.
 
 {{Identical|Log in}}',
 'userlogin-resetlink' => 'Used on the login page.',
 'createaccountmail' => 'Button text for creating a new account and sending the new password to the specified e-mail address directly, as used on [[Special:UserLogin/signup]] if creating accounts by e-mail is allowed.',
 'createaccountreason' => '{{Identical|Reason}}',
+'badretype' => 'Used as error message when the new password and its retype do not match.',
+'userexists' => 'Used as error message in creating a user account.',
+'loginerror' => 'Used as title of error message.',
 'createaccounterror' => 'Parameters:
 * $1 is an error message',
 'nocookiesnew' => "This message is displayed when a new account was successfully created, but the browser doesn't accept cookies.",
@@ -802,13 +1066,16 @@ It is also used on the top of the page for logged out users, where it appears ne
 This message is displayed when someone tried to login and the CSRF failed (most likely, the browser doesn't accept cookies).
 
 Defaults to '''nocookieslogin''' ({{int:nocookieslogin}})",
+'noname' => 'Error message.',
 'loginsuccesstitle' => 'The title of the page saying that you are logged in. The content of the page is the message "[[MediaWiki:Loginsuccess/{{SUBPAGENAME}}]]".',
 'loginsuccess' => 'The content of the page saying that you are logged in. The title of the page is "[[MediaWiki:Loginsuccesstitle/{{SUBPAGENAME}}|{{int:loginsuccesstitle}}]]". $1 is the name of the logged in user.
 
 <nowiki>{{</nowiki>[[Gender|GENDER]]<nowiki>}}</nowiki> is supported.',
-'nosuchuser' => 'Displayed when trying to log in with an unexisting username. When you are not allowed to create an account, the message {{msg|nosuchusershort}} is displayed.',
-'nosuchusershort' => "Displayed when trying to log in with a non-existant username. This message is only shown when you can't create an account, otherwise the message {{msg|nosuchusershort}} is displayed.",
+'nosuchuser' => 'Displayed when trying to log in with an unexisting username. When you are not allowed to create an account, the message {{msg-mw|nosuchusershort}} is displayed.',
+'nosuchusershort' => "Displayed when trying to log in with a non-existant username. This message is only shown when you can't create an account, otherwise the message {{msg-mw|nosuchusershort}} is displayed.",
+'nouserspecified' => 'Used as error message when username to fetch is not specified.',
 'login-userblocked' => 'This message supports GENDER, username is available in $1.',
+'wrongpassword' => 'Used as error message when the provided password is wrong.',
 'wrongpasswordempty' => 'Error message displayed when entering a blank password',
 'passwordtooshort' => 'This message is shown at
 
@@ -816,6 +1083,7 @@ Defaults to '''nocookieslogin''' ({{int:nocookieslogin}})",
 * [[Special:CreateAccount]]
 
 $1 is the minimum number of characters in the password.',
+'password-name-match' => 'Used as error message when password validity check failed.',
 'password-login-forbidden' => 'Error message shown when the user has tried to log in using one of the special username/password combinations used for MediaWiki testing. (See [[mwr:75589]], [[mwr:75605]].)',
 'mailmypassword' => 'Shown at [[Special:UserLogin]]',
 'passwordremindertitle' => 'Title of e-mail which contains temporary password',
@@ -829,7 +1097,14 @@ $1 is the minimum number of characters in the password.',
 
 Parameters:
 * $1 is a user name. This parameter can be used with GENDER.',
+'noemailcreate' => 'Error message.',
+'passwordsent' => '* $1 - username',
+'blocked-mailpassword' => 'Used as error message in password recovery.',
 'eauthentsent' => "This message appears after entering an e-mail address in [[Special:Preferences]] > {{int:prefs-personal}} > {{int:email}}, then clicking on '{{int:saveprefs}}'.",
+'throttled-mailpassword' => 'Used in [[Special:PasswordReset]].
+* $1 - password reminder resend time (in hours)',
+'mailerror' => 'Used as error message in sending confirmation mail to user. Parameters:
+* $1 - new mail address',
 'acct_creation_throttle_hit' => 'Errormessage at [[Special:CreateAccount]].
 "in the last day" precisely means: during the lasts 86400 seconds (24 hours) ending right now.',
 'emailauthenticated' => 'In user preferences ([[Special:Preferences]] > {{int:prefs-personal}} > {{int:email}}) and on [[Special:ConfirmEmail]].
@@ -843,6 +1118,16 @@ Parameters:
 'invalidemailaddress' => 'Shown as a warning when written an invalid e-mail adress in [[Special:Preferences]] and {{fullurl:Special:UserLogin|type=signup}} page',
 'cannotchangeemail' => 'Error message shown when user goes to [[Special:ChangeEmail]] but email addresses cannot be changed on the site.',
 'emaildisabled' => 'Error message shown when user tries to set an e-mail address but e-mail features are disabled.',
+'accountcreated' => 'Used as page title in [[Special:UserLogin]].
+
+See also:
+* {{msg-mw|Accountcreated|title}}
+* {{msg-mw|Accountcreatedtext|message}}',
+'accountcreatedtext' => 'Used in [[Special:UserLogin]]. Parameters:
+* $1 - username
+See also:
+* {{msg-mw|Accountcreated|title}}
+* {{msg-mw|Accountcreatedtext|message}}',
 'createaccount-title' => 'This is the subject of an e-mail sent to the e-mail address entered at [[Special:CreateAccount]] if the button "by e-mail" is clicked.',
 'createaccount-text' => 'This text is sent as an e-mail to the e-mail address entered at [[Special:CreateAccount]] if the button "by e-mail" is clicked.
 
@@ -853,14 +1138,18 @@ Parameters:
 'login-abort-generic' => 'The generic unsuccessful login message is used unless otherwise specified by hook writers',
 'loginlanguagelabel' => 'Used on [[Special:UserLogin]] if $wgLoginLanguageSelector is true. $1 is a pipe-separated list built from the names that appear in the message {{msg-mw|Loginlanguagelinks}}.
 {{Identical|Language}}',
+'suspicious-userlogout' => 'Used when the logout request looks suspicious, in Special:UserLogout.',
 
 # E-mail sending
+'php-mail-error-unknown' => 'Used as error message when <code>mail()</code> returned empty error message.',
 'user-mail-no-addy' => 'This is the error message in case an e-mail could not be sent because there was no e-mail address to send it to.',
+'user-mail-no-body' => 'This is the error message in case an e-mail has an empty or unreasonably short body',
 
 # Change password dialog
 'resetpass' => 'The caption of [[Special:ChangePassword]]
 
 {{Identical|Change password}}',
+'resetpass_announce' => 'Used in [[Special:UserLogin]].',
 'resetpass_text' => '{{optional}}',
 'resetpass_header' => 'Header on box on special page [[Special:ChangePassword]].
 
@@ -869,6 +1158,9 @@ Parameters:
 'newpassword' => '{{Identical|New password}}',
 'retypenew' => "Appears on the 'User profile' tab of the 'Preferences' special page in the 'Change password' section. It appears next to the text box for entering the new password a second time.",
 'resetpass_submit' => 'Submit button on [[Special:ChangePassword]]',
+'resetpass_success' => 'Used in [[Special:ChangePassword]].',
+'resetpass_forbidden' => "Used as error message in changing password. Maybe the external auth plugin won't allow local password changes.",
+'resetpass-no-info' => 'Error message for [[Special:ChangePassword]].',
 'resetpass-submit-loggedin' => 'Button on [[Special:ResetPass]] to submit new password.
 
 {{Identical|Change password}}',
@@ -883,6 +1175,7 @@ Used on [[Special:ResetPass]]',
 {{Identical|Reset password}}',
 'passwordreset-text' => 'Text on [[Special:PasswordReset]]',
 'passwordreset-legend' => '{{Identical|Reset password}}',
+'passwordreset-disabled' => 'Used as error message in changing password.',
 'passwordreset-pretext' => 'These instructions are shown on the password reset dialogue, which can, in principle, take the user\'s email address as well as, or instead of, their username. This text displays above one or more fields, at least one of which needs to be completed, and the message does not know which routes are available, so it needs to refer to some vague noun rather than specifically "username".
 "One of the pieces of data" means "an info"/"a datum" (probably to be translatea with a singular noun in your language if available). Parameters:
 * $1 is the number of password reset routes. This is never 1, but always two or more. Thus, the first plural option is empty in English.',
@@ -891,6 +1184,7 @@ Used on [[Special:ResetPass]]',
 'passwordreset-capture' => 'Label for checkbox asking the user whether they want to see the contents of the password reset email (only shown if they have the <tt>passwordreset</tt> permission',
 'passwordreset-capture-help' => 'Longer explanatory message for the capture checkbox label.',
 'passwordreset-email' => '{{Identical|E-mail address}}',
+'passwordreset-emailtitle' => 'Used as subject (title) of E-mail.',
 'passwordreset-emailtext-ip' => 'Be consistent with {{msg-mw|Passwordreset-emailtext-user|notext=y}}.
 
 Parameters:
@@ -908,8 +1202,21 @@ Parameters:
 'passwordreset-emailelement' => "This is a body of a reminder email to allow them into the system with a new password. Parameters:
 * $1 will be the user's login name. This parameter can be used for GENDER.
 * $2 will be the temporary password given by the system.",
-'passwordreset-emailerror-capture' => 'Error message displayed when sending an e-mail fails. Parameters:
-* $1 is the name of a user who was supposed to get the e-mail.',
+'passwordreset-emailsent' => 'Used in [[Special:PasswordReset]].
+
+See also:
+* {{msg-mw|Passwordreset-emailsent-capture}}
+* {{msg-mw|Passwordreset-emailerror-capture}}',
+'passwordreset-emailsent-capture' => 'Used in [[Special:PasswordReset]].
+
+See also:
+* {{msg-mw|Passwordreset-emailsent}}
+* {{msg-mw|Passwordreset-emailerror-capture}}',
+'passwordreset-emailerror-capture' => 'Error message displayed in [[Special:PasswordReset]] when sending an e-mail fails. Parameters:
+* $1 - the name of a user who was supposed to get the e-mail
+See also:
+* {{msg-mw|Passwordreset-emailsent}}
+* {{msg-mw|Passwordreset-emailsent-capture}}',
 
 # Special:ChangeEmail
 'changeemail' => 'Title of [[Special:ChangeEmail|special page]].',
@@ -966,20 +1273,59 @@ Used in text generated by Picture button in toolbar.',
 # Edit pages
 'summary' => 'The Summary text beside the edit summary field
 
+See also:
+* {{msg-mw|Subject}}
+See also:
+* {{msg-mw|Accesskey-summary}}
+* {{msg-mw|Tooltip-summary}}
 {{Identical|Summary}}',
-'minoredit' => 'Text above Save page button in editor',
-'watchthis' => 'Text of checkbox above "Show preview" button in editor.
+'subject' => 'Used as label for input box in the EditPage page.
+
+See also:
+* {{msg-mw|Summary}}',
+'minoredit' => 'Text above Save page button in editor
+
+See also:
+* {{msg-mw|Minoredit}}
+* {{msg-mw|Accesskey-minoredit}}
+* {{msg-mw|Tooltip-minoredit}}',
+'watchthis' => 'Text of checkbox above {{msg-mw|Showpreview}} button in editor.
 
+See also:
+* {{msg-mw|Watchthis}}
+* {{msg-mw|Accesskey-watch}}
+* {{msg-mw|Tooltip-watch}}
 {{Identical|Watch this page}}',
-'savearticle' => 'Text on the Save page button. See also {{msg|showpreview}} and {{msg|showdiff}} for the other buttons.',
+'savearticle' => 'Text on the Save page button. See also {{msg-mw|showpreview}} and {{msg-mw|showdiff}} for the other buttons.
+
+See also:
+* {{msg-mw|Savearticle}}
+* {{msg-mw|Accesskey-save}}
+* {{msg-mw|Tooltip-save}}',
 'preview' => 'The title of the Preview page shown after clicking the "Show preview" button in the edit page. Since this is a heading, it should probably be translated as a noun and not as a verb.
 
 {{Identical|Preview}}',
-'showpreview' => 'The text of the button to preview the page you are editing. See also {{msg|showdiff}} and {{msg|savearticle}} for the other buttons.',
+'showpreview' => 'The text of the button to preview the page you are editing. See also {{msg-mw|showdiff}} and {{msg-mw|savearticle}} for the other buttons.
+
+See also:
+* {{msg-mw|Showpreview}}
+* {{msg-mw|Accesskey-preview}}
+* {{msg-mw|Tooltip-preview}}',
 'showlivepreview' => 'An edit preview without needing to reload the edit form.',
-'showdiff' => 'Button below the edit page. See also {{msg|showpreview}} and {{msg|savearticle}} for the other buttons.',
-'anoneditwarning' => 'Shown when editing a page anonymously.',
-'anonpreviewwarning' => 'See also {{msg-mw|Anoneditwarning}}',
+'showdiff' => 'Button below the edit page. See also {{msg|showpreview}} and {{msg|savearticle}} for the other buttons.
+
+See also:
+* {{msg-mw|Showdiff}}
+* {{msg-mw|Accesskey-diff}}
+* {{msg-mw|Tooltip-diff}}',
+'anoneditwarning' => 'Shown when editing a page anonymously.
+See also:
+* {{msg-mw|Sf autoedit anoneditwarning}}
+* {{msg-mw|Wikibase-anonymouseditwarning-property}}
+* {{msg-mw|Wikibase-anonymouseditwarning-item}}
+* {{msg-mw|Anonpreviewwarning}}',
+'anonpreviewwarning' => 'See also:
+* {{msg-mw|Anoneditwarning}}',
 'missingsummary' => 'The text "edit summary" is in {{msg-mw|summary}}.
 The text "Save" is in {{msg-mw|savearticle}}.',
 'missingcommenttext' => 'This message is shown, when the textbox by a new-section is empty.',
@@ -987,6 +1333,9 @@ The text "Save" is in {{msg-mw|savearticle}}.',
 'summary-preview' => 'Preview of the edit summary, shown under the edit summary itself.
 Should match: {{msg-mw|summary}}.',
 'subject-preview' => 'Should match {{msg-mw|subject}}',
+'blockedtitle' => 'Used as title displayed for blocked users. The corresponding message body is one of the following messages:
+* {{msg-mw|Blockedtext|notext=1}}
+* {{msg-mw|Autoblockedtext|notext=1}}',
 'blockedtext' => 'Text displayed to blocked users.
 
 Parameters:
@@ -1009,14 +1358,31 @@ Parameters:
 * <tt>$6</tt> is the expiry of the block
 * <tt>$7</tt> is the intended target of the block (what the blocking user specified in the blocking form)
 * <tt>$8</tt> is the timestamp when the block started',
-'blockednoreason' => '{{Identical|No reason given}}',
-'whitelistedittext' => '* $1 is a link to [[Special:UserLogin]] with {{msg-mw|loginreqlink}} as link description',
+'blockednoreason' => 'Substituted with <code>$2</code> in the following message if the reason is not given:
+* {{msg-mw|cantcreateaccount-text}}.
+{{Identical|No reason given}}',
+'whitelistedittext' => 'Used as error message. Parameters:
+* $1 is a link to [[Special:UserLogin]] with {{msg-mw|loginreqlink}} as link description
+See also:
+* {{msg-mw|Nocreatetext}}
+* {{msg-mw|Uploadnologintext}}
+* {{msg-mw|Loginreqpagetext}}',
+'confirmedittext' => 'Used as error message.',
+'nosuchsectiontitle' => 'Used as error message when the user has attempted to edit a nonexistent section.',
 'nosuchsectiontext' => 'This message is displayed when a user tries to edit a section that does not exist.',
+'loginreqtitle' => 'Used as title of error message.
+
+See also:
+* {{msg-mw|permissionserrors}}',
 'loginreqlink' => 'Take a look on inflection. Used as parameter in {{msg-mw|loginreqpagetext}}, {{msg-mw|whitelistedittext}}, {{msg-mw|watchlistanontext‎}} and {{msg-mw|Confirmemail needlogin}}.
 
 {{Identical|Log in}}',
 'loginreqpagetext' => 'This message is displayed if an anonymous reader attempts to access a page which is only available to logged-in users.
-* $1 is a link to [[Special:UserLogin]] with {{msg-mw|loginreqlink}} as link description',
+* $1 is a link to [[Special:UserLogin]] with {{msg-mw|loginreqlink}} as link description
+See also:
+* {{msg-mw|Whitelistedittext}}
+* {{msg-mw|Nocreatetext}}
+* {{msg-mw|Uploadnologintext}}',
 'accmailtitle' => 'Page title when temporary password was sent to a user via email.',
 'accmailtext' => "The message shown when a temporary password has been sent to the user's email address.
 
@@ -1046,22 +1412,64 @@ Example: [http://translatewiki.net/w/i.php?title=Project:News&oldid=9999999 Perm
 'userjspreview' => 'Text displayed on preview of every user .js subpage',
 'sitecsspreview' => 'Text displayed on preview of .css pages in MediaWiki namespace',
 'sitejspreview' => 'Text displayed on preview of .js pages in MediaWiki namespace',
+'userinvalidcssjstitle' => '* $1 - skin name',
 'updated' => '{{Identical|Updated}}',
 'previewnote' => 'Note displayed when clicking on Show preview',
-'continue-editing' => 'A link to the beginning of the editing textarea on the same page. Displayed after {{msg-mw|previewnote}}.',
+'continue-editing' => '{{doc-actionlink}}
+A link to the beginning of the editing textarea on the same page.
+
+Displayed after {{msg-mw|previewnote}}.',
+'previewconflict' => 'Used in Preview page.',
+'session_fail_preview' => 'Error message in Preview page.
+
+See also:
+* {{msg-mw|Token suffix mismatch}}
+* {{msg-mw|Session fail preview}}
+* {{msg-mw|Edit form incomplete}}',
+'session_fail_preview_html' => 'Used as error message in Preview page.',
+'token_suffix_mismatch' => 'Error message in Preview page.
+
+See also:
+* {{msg-mw|Token suffix mismatch}}
+* {{msg-mw|Session fail preview}}
+* {{msg-mw|Edit form incomplete}}',
+'edit_form_incomplete' => 'Error message in Preview page.
+
+See also:
+* {{msg-mw|Token suffix mismatch}}
+* {{msg-mw|Session fail preview}}
+* {{msg-mw|Edit form incomplete}}',
 'editing' => "Shown as page title when editing a page. \$1 is the name of the page that is being edited. Example: \"''Editing Main Page''\".",
 'creating' => "Shown as page title when creating a page. Parameters:
 * \$1 is the name of the page that is being created. Example: \"''Creating Main Page''\".",
-'editingsection' => 'The variable $1 is the page name.  This message displays at the top of the page when a user is editing a page section.',
+'editingsection' => 'This message displays at the top of the page when a user is editing a page section. Parameters:
+* $1 - page name
+See also:
+* {{msg-mw|Editingcomment}}',
+'editingcomment' => 'This message displays at the top of the page when a user is creating a new section. Parameters:
+* $1 - page name
+See also:
+* {{msg-mw|Editingsection}}',
+'editconflict' => 'Used as title of error message. Parameters:
+* $1 - page title',
 'explainconflict' => 'Appears at the top of a page when there is an edit conflict.',
-'storedversion' => 'This is used in an edit conflict as the label for the top revision that has been stored, as opposed to your version that has not been stored which is shown at the bottom of the page.',
+'yourtext' => 'Used in Diff Preview page. The diff is between {{msg-mw|currentrev}} and {{msg-mw|yourtext}}.
+
+Also used in Edit Conflict page; the diff between {{msg-mw|yourtext}} and {{msg-mw|storedversion}}.',
+'storedversion' => 'This is used in an edit conflict as the label for the top revision that has been stored, as opposed to your version {{msg-mw|yourtext}} that has not been stored which is shown at the bottom of the page.',
+'nonunicodebrowser' => 'Used as warning when editing page.',
+'editingold' => 'Used as warning when editing page.',
 'yourdiff' => '',
 'copyrightwarning' => 'Copyright warning displayed under the edit box in editor
-*$1 - ...
-*$2 - ...',
+*$1 - link
+*$2 - license name',
+'copyrightwarning2' => 'Copyright warning displayed under the edit box in editor
+*$1 - license name',
 'longpageerror' => 'Warning displayed when trying to save a text larger than the maximum size allowed',
+'readonlywarning' => '* $1 - reason',
 'protectedpagewarning' => '{{Related|Semiprotectedpagewarning}}',
 'semiprotectedpagewarning' => '{{Related|Semiprotectedpagewarning}}',
+'cascadeprotectedwarning' => '* $1 - number of pages',
 'titleprotectedwarning' => 'Warning message above the edit form when editing a page that has been protected aginst creation.',
 'templatesused' => 'Displayed below the page when editing it. It indicates a list of templates which are used on that page.',
 'templatesusedpreview' => 'Used in editor when displaying a preview.',
@@ -1073,15 +1481,69 @@ Example: [http://translatewiki.net/w/i.php?title=Project:News&oldid=9999999 Perm
 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.
+
+See also:
+* {{msg-mw|Nocreate-loggedin}}
+* {{msg-mw|Whitelistedittext}}
+* {{msg-mw|Uploadnologintext}}
+* {{msg-mw|Loginreqpagetext}}',
+'nocreate-loggedin' => 'Used as error message.
+
+See also:
+* {{msg-mw|Nocreatetext}}',
 'sectioneditnotsupported-title' => 'Page title of special page, which presumably appears when someone tries to edit a section, and section editing is disabled. Explanation of section editing on [http://meta.wikimedia.org/wiki/Help:Section_editing#Section_editing meta].',
 'sectioneditnotsupported-text' => 'I think this is the text of an error message, which presumably appears when someone tries to edit a section, and section editing is disabled. Explanation of section editing on [http://meta.wikimedia.org/wiki/Help:Section_editing#Section_editing meta].',
-'permissionserrorstext-withaction' => '* $1 is the number of reasons that were found why the action cannot be performed.
+'permissionserrors' => 'Used as title of error message.
+
+See also:
+* {{msg-mw|loginreqtitle}}',
+'permissionserrorstext' => "This message is \"without action\" version of {{msg-mw|Permissionserrorstext-withaction}}.
+* \$1 is the number of reasons that were found why ''the action'' cannot be performed.",
+'permissionserrorstext-withaction' => 'This message is "with action" version of {{msg-mw|Permissionserrorstext}}.
+
+* $1 is the number of reasons that were found why the action cannot be performed.
 * $2 is one of the action-* messages (for example {{msg|action-edit}}) or other such messages tagged with {{tl|doc-action}} in their documentation.
 
 Please report at [[Support]] if you are unable to properly translate this message. Also see [[bugzilla:14246]]',
 'recreate-moveddeleted-warn' => 'Warning shown when creating a page which has already been deleted. See for example [[Test]].',
 'moveddeleted-notice' => 'Shown on top of a deleted page in normal view modus ([http://translatewiki.net/wiki/Test example]).',
-'edit-conflict' => "An 'Edit conflict' happens when more than one edit is being made to a page at the same time. This would usually be caused by separate individuals working on the same page. However, if the system is slow, several edits from one individual could back up and attempt to apply simultaneously - causing the conflict.",
+'log-fulllog' => 'Used as link text.',
+'edit-hook-aborted' => 'Used as error message.
+
+See also:
+* {{msg-mw|edit-gone-missing}}
+* {{msg-mw|edit-conflict}}
+* {{msg-mw|edit-no-change}}
+* {{msg-mw|edit-already-exists}}',
+'edit-gone-missing' => 'Used as error message.
+
+See also:
+* {{msg-mw|edit-hook-aborted}}
+* {{msg-mw|edit-conflict}}
+* {{msg-mw|edit-no-change}}
+* {{msg-mw|edit-already-exists}}',
+'edit-conflict' => "An 'Edit conflict' happens when more than one edit is being made to a page at the same time. This would usually be caused by separate individuals working on the same page. However, if the system is slow, several edits from one individual could back up and attempt to apply simultaneously - causing the conflict.
+
+See also:
+* {{msg-mw|edit-hook-aborted}}
+* {{msg-mw|edit-gone-missing}}
+* {{msg-mw|edit-no-change}}
+* {{msg-mw|edit-already-exists}}",
+'edit-no-change' => 'Used as error message.
+
+See also:
+* {{msg-mw|edit-hook-aborted}}
+* {{msg-mw|edit-gone-missing}}
+* {{msg-mw|edit-conflict}}
+* {{msg-mw|edit-already-exists}}',
+'edit-already-exists' => 'Used as error message.
+
+See also:
+* {{msg-mw|edit-hook-aborted}}
+* {{msg-mw|edit-gone-missing}}
+* {{msg-mw|edit-conflict}}
+* {{msg-mw|edit-no-change}}',
 'defaultmessagetext' => 'Caption above the default message text shown on the left-hand side of a diff displayed after clicking “Show changes” when creating a new page in the MediaWiki: namespace',
 'content-failed-to-parse' => "Error message indicating that the page's content can not be saved because it is syntactically invalid. This may occurr for content types using serialization or a strict markup syntax.
 *$1 – content model ({{msg-mw|Content-model-wikitext}}, {{msg-mw|Content-model-javascript}}, {{msg-mw|Content-model-css}} or {{msg-mw|Content-model-text}})
@@ -1116,15 +1578,36 @@ This message is substituted in:
 
 # Parser/template warnings
 'expensive-parserfunction-warning' => 'On some (expensive) [[MetaWikipedia:Help:ParserFunctions|parser functions]] (e.g. <code><nowiki>{{#ifexist:}}</nowiki></code>) there is a limit of how many times it may be used. This is an error message shown when the limit is exceeded.
-
 * $1 is the current number of parser function calls.
 * $2 is the allowed number of parser function calls.
+See also [[:mw:Manual:$wgExpensiveParserFunctionLimit|$wgExpensiveParserFunctionLimit in the MediaWiki manual]].
+
+See also:
+* {{msg-mw|Expensive-parserfunction-category}}',
+'expensive-parserfunction-category' => 'This message is used as a category name for a [[mw:Help:Tracking categories|tracking category]] where pages are placed automatically if they contain too many calls to expensive parser functions.
+
+See also:
+* {{msg-mw|Expensive-parserfunction-warning}}',
+'post-expand-template-inclusion-warning' => 'When templates are expanded, there is a size limit for the number of bytes yielded. Usually that occurs from excessively nested templates, recursive templates, or ones having x-zillion of #if #case or similar contructs in them. When the wikicode parser detects this, it outputs a red warning message to the page.
+
 
-See also [[:mw:Manual:$wgExpensiveParserFunctionLimit|$wgExpensiveParserFunctionLimit in the MediaWiki manual]].',
-'expensive-parserfunction-category' => 'This message is used as a category name for a [[mw:Help:Tracking categories|tracking category]] where pages are placed automatically if they contain too many calls to expensive parser functions.',
-'post-expand-template-inclusion-warning' => 'When templates are expanded, there is a size limit for the number of bytes yielded. Usually that occurs from excessively nested templates, recursive templates, or ones having x-zillion of #if #case or similar contructs in them. When the wikicode parser detects this, it outputs a red warning message to the page.',
+See also:
+* {{msg-mw|Post-expand-template-inclusion-category}}',
 'post-expand-template-inclusion-category' => 'This message is used as a category name for a [[mw:Help:Tracking categories|tracking category]] where pages are placed automatically if the expanded size of the templates they contain exceeds the limit.
-When templates are expanded, there is a size limit for the number of bytes yielded. Usually that occurs from excessively nested templates, recursive templates, or ones having x-zillion of #if #case or similar contructs in them. When the wikicode parser detects this, it outputs a red warning message to the page.',
+When templates are expanded, there is a size limit for the number of bytes yielded. Usually that occurs from excessively nested templates, recursive templates, or ones having x-zillion of #if #case or similar contructs in them. When the wikicode parser detects this, it outputs a red warning message to the page.
+
+See also:
+* {{msg-mw|Post-expand-template-inclusion-warning}}',
+'post-expand-template-argument-warning' => 'Used as warning in parser limitation.
+
+See also:
+* {{msg-mw|Post-expand-template-argument-category}}',
+'post-expand-template-argument-category' => 'This message is used as a category name for a [[mw:Help:Tracking categories|tracking category]] where pages are placed automatically if they contain omitted template arguments.
+
+See also:
+* {{msg-mw|Post-expand-template-argument-warning}}',
+'parser-template-loop-warning' => '* $1 - page title',
+'parser-template-recursion-depth-warning' => '* $1 - limit value of recursion depth',
 'language-converter-depth-warning' => 'Error message shown when a page uses too deeply nested language conversion syntax
 
 * <tt>$1</tt> is the value of the depth limit',
@@ -1164,9 +1647,23 @@ This warning may be encountered due to input text like &lt;ref>&lt;ref>&lt;ref>.
 {{Identical|Undo}}',
 'undo-summary' => 'Edit summary for an undo action.{{Identical|Undo}}',
 
+# Account creation failure
+'cantcreateaccounttitle' => 'Used as title of the error message {{msg-mw|Cantcreateaccount-text}}.',
+'cantcreateaccount-text' => 'Used as error message, with the title {{msg-mw|cantcreateaccounttitle}}.
+* $1 - target IP address
+* $2 - reason or {{msg-mw|blockednoreason}}
+* $3 - username',
+
 # History pages
 'viewpagelogs' => 'Link displayed in history of pages',
-'currentrev' => '{{Identical|Current revision}}',
+'nohistory' => 'Message shown when there are no history to list. See [{{canonicalurl:x|action=history}} example history].
+----
+Also used as title of error message when the feed is empty. See [{{canonicalurl:x|action=history&feed=atom}} example feed].
+
+See the error message:
+* {{msg-mw|history-feed-empty}}',
+'currentrev' => 'Used in Diff Preview page. The diff is between {{msg-mw|currentrev}} and {{msg-mw|yourtext}}.
+{{Identical|Current revision}}',
 'currentrev-asof' => 'Used on a difference page when comparing the current versions of a page with each other. See {{msg-mw|Revisionasof}} for the message for non-current version.
 * $1 is a date and time
 * $2 is a date (optional)
@@ -1183,6 +1680,10 @@ This warning may be encountered due to input text like &lt;ref>&lt;ref>&lt;ref>.
 * (optional) $4: date of revision
 * (optional) $5: time of revision
 * (optional) $6: author of revision, for GENDER use',
+'previousrevision' => 'See also:
+* {{msg-mw|Nextrevision}}',
+'nextrevision' => 'See also:
+* {{msg-mw|Previousrevision}}',
 'currentrevisionlink' => '{{Identical|Current revision}}',
 'cur' => 'Link in page history',
 'next' => 'Link in page history
@@ -1201,28 +1702,57 @@ This warning may be encountered due to input text like &lt;ref>&lt;ref>&lt;ref>.
 'history-show-deleted' => 'CheckBox to show only per [[mw:Manual:RevisionDelete|RevisonDelete]] deleted versions.
 
 Used in History and [[Special:Contributions]].',
-'histfirst' => 'Used in page history.',
-'histlast' => 'Used in page history.',
+'histfirst' => 'This is part of the navigation message on the top and bottom of Page History pages which are lists of things in date order, e.g. [{{canonicalurl:Support|action=history}} Page History of Support].
+
+It is followed by the message {{msg-mw|Viewprevnext}}.',
+'histlast' => 'This is part of the navigation message on the top and bottom of Page History pages which are lists of things in date order, e.g. [{{canonicalurl:Support|action=history}} Page History of Support].
+
+It is followed by the message {{msg-mw|Viewprevnext}}.',
+'historysize' => '* $1 - byte count',
 'historyempty' => 'Text in page history for empty page revisions
 
 {{Identical|Empty}}',
 
 # Revision feed
+'history-feed-title' => 'Used as title of the RSS/Atom feed for a page history. See [{{canonicalurl:Main_Page|feed=atom&action=history}} example].',
+'history-feed-description' => 'Used as subtitle (description) of the RSS/Atom feed for a page history. See [{{canonicalurl:Main_Page|feed=atom&action=history}} example].',
 'history-feed-item-nocomment' => "Title for each revision when viewing the RSS/Atom feed for a page history:
 * '''$1''' - user name,
 * '''$2''' - date/time,
 * '''$3''' - date,
 * '''$4''' - time.",
+'history-feed-empty' => 'Used as summary of the RSS/Atom feed for a page history when the feed is empty.
+See [{{canonicalurl:x|feed=atom&action=history}} example].',
 
 # Revision deletion
 'rev-deleted-comment' => 'Apparently this can also be about the reason of a log action, not only an edit summary. See also:
 *{{msg-mw|revdelete-hide-comment}}',
+'rev-deleted-user' => 'See also:
+* {{msg-mw|Rev-deleted-event}}',
+'rev-deleted-event' => 'See also:
+* {{msg-mw|Rev-deleted-user}}',
 'rev-deleted-user-contribs' => 'Part of revision deletion.',
-'rev-deleted-text-unhide' => 'This message is very similar to {{msg-mw|rev-suppressed-unhide-diff}}. Parameters:
-* $1 is a HTML link to the diff',
+'rev-deleted-text-permission' => '{{Related|Rev-deleted-text}}',
+'rev-deleted-text-unhide' => 'Parameters:
+* $1 - a HTML link to the revision
+{{Related|Rev-deleted-text}}',
+'rev-suppressed-text-unhide' => 'Parameters:
+* $1 - a HTML link to the revision
+{{Related|Rev-deleted-text}}',
 'rev-deleted-text-view' => 'I believe this is an error message which appears if a user tries to view a past revision of a page, where the revision has been hidden from view, although later revisions of the page still exist.',
-'rev-suppressed-unhide-diff' => 'This message is very similar to {{msg-mw|rev-deleted-unhide-diff}} and to {{msg-mw|rev-suppressed-text-unhide}}. Parameters:
-* $1 is a HTML link to the diff',
+'rev-suppressed-text-view' => '{{Related|Rev-deleted-text}}',
+'rev-deleted-no-diff' => 'See also:
+* {{msg-mw|Rev-suppressed-no-diff}}',
+'rev-suppressed-no-diff' => 'See also:
+* {{msg-mw|Rev-deleted-no-diff}}',
+'rev-deleted-unhide-diff' => 'Parameters:
+* $1 - a HTML link to the diff
+{{Related|Rev-deleted-diff}}',
+'rev-suppressed-unhide-diff' => 'Parameters:
+* $1 - a HTML link to the diff
+{{Related|Rev-deleted-diff}}',
+'rev-deleted-diff-view' => '{{Related|Rev-deleted-diff}}',
+'rev-suppressed-diff-view' => '{{Related|Rev-deleted-diff}}',
 'rev-delundel' => 'Link in page history for oversight (see also {{msg-mw|rev-showdeleted}})',
 'rev-showdeleted' => 'Link in page history for oversight (see also {{msg-mw|rev-delundel}})
 {{Identical|Show}}',
@@ -1230,6 +1760,15 @@ Used in History and [[Special:Contributions]].',
 It is the page title of [[Special:RevisionDelete]].',
 'revdelete-nooldid-title' => '{{RevisionDelete}}',
 'revdelete-nooldid-text' => '{{RevisionDelete}}',
+'revdelete-nologtype-title' => 'See also:
+* {{msg-mw|Revdelete-nologtype-text}}',
+'revdelete-nologtype-text' => 'See also:
+* {{msg-mw|Revdelete-nologtype-title}}',
+'revdelete-nologid-title' => 'See also:
+* {{msg-mw|Revdelete-nologid-text}}',
+'revdelete-nologid-text' => 'See also:
+* {{msg-mw|Revdelete-nologid-title}}',
+'revdelete-no-file' => 'Used as error message in [[Special:RevisionDelete]].',
 'revdelete-show-file-confirm' => 'A confirmation message shown on Special:Revisiondelete when the request does not contain a valid token (e.g. when a user clicks a link received in mail).
 
 * <code>$1</code> is a file name
@@ -1246,9 +1785,26 @@ It is the page title of [[Special:RevisionDelete]].',
 'revdelete-text' => '{{RevisionDelete}}
 This is the introduction explaining the feature.',
 'revdelete-confirm' => 'This message is a part of the [[mw:RevisionDelete|RevisionDelete]] feature.
-[[File:RevDelete Special-RevisionDelete (r60428).png|frame|center|Screenshot of the interface]]',
+[[File:RevDelete Special-RevisionDelete (r60428).png|frame|center|Screenshot of the interface]]
+
+See also:
+* {{msg-mw|Revdelete-suppress}}
+* {{msg-mw|Revdelete-suppress-text}}',
+'revdelete-suppress-text' => 'Used as usage text in [[Special:RevisionDelete]].
+
+See also:
+* {{msg-mw|Revdelete-suppress}}
+* {{msg-mw|Revdelete-confirm}}',
 'revdelete-legend' => '{{RevisionDelete}}
-[[File:RevDelete Special-RevisionDelete (r60428).png|frame|center|Screenshot of the interface]]',
+Used as legend for the form.
+[[File:RevDelete Special-RevisionDelete (r60428).png|frame|center|Screenshot of the interface]]
+
+See also:
+* {{msg-mw|Revdelete-log|label for dropdown}}
+* {{msg-mw|Revdelete-reason-dropdown|item list for dropdown|notext=1}}
+* {{msg-mw|Revdelete-reasonotherlist|item in dropdown}}
+* {{msg-mw|Revdelete-otherreason|label for input box}}
+* {{msg-mw|Revdelete-submit|submit button}}',
 'revdelete-hide-text' => 'Option for oversight. This message is a part of the [[mw:RevisionDelete|RevisionDelete]] feature.
 [[File:RevDelete Special-RevisionDelete (r60428).png|frame|center|Screenshot of the interface]]',
 'revdelete-hide-image' => 'Option for <del>oversight</del> [[:mw:RevisionDelete|RevisionDelete]] feature.',
@@ -1260,25 +1816,51 @@ This is the introduction explaining the feature.',
 'revdelete-hide-restricted' => 'Option for oversight.',
 'revdelete-radio-same' => '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}}, and {{msg-mw|Revdelete-radio-unset}}.',
+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}}',
 'revdelete-radio-set' => '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}}, and {{msg-mw|Revdelete-radio-unset}}.
-
+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|Yes}}',
 '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}}, and {{msg-mw|Revdelete-radio-unset}}.
-
+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|No}}',
-'revdelete-suppress' => 'Option for oversight',
+'revdelete-suppress' => 'Option for oversight; used in [[Special:RevisionDelete]].
+
+See also:
+* {{msg-mw|Revdelete-suppress-text}}
+* {{msg-mw|Revdelete-confirm}}',
 'revdelete-unsuppress' => '{{RevisionDelete}}',
 'revdelete-log' => '{{Identical|Reason}}
-Log comment text for oversight. {{RevisionDelete}}
-[[File:RevDelete Special-RevisionDelete (r60428).png|thumb|331px||Screenshot of the interface]]',
+{{RevisionDelete}}
+Used as log comment text for oversight.
+[[File:RevDelete Special-RevisionDelete (r60428).png|frame|center|Screenshot of the interface]]
+
+See also:
+* {{msg-mw|Revdelete-legend|legend for the form}}
+* {{msg-mw|Revdelete-reason-dropdown|item list for dropdown|notext=1}}
+* {{msg-mw|Revdelete-reasonotherlist|item in dropdown}}
+* {{msg-mw|Revdelete-otherreason|label for input box}}
+* {{msg-mw|Revdelete-submit|submit button}}',
 'revdelete-submit' => '{{RevisionDelete}}
 This is the submit button on [[Special:RevisionDelete]].
-[[File:RevDelete Special-RevisionDelete (r60428).png|frame|center|Screenshot of the interface]]',
+[[File:RevDelete Special-RevisionDelete (r60428).png|frame|center|Screenshot of the interface]]
+
+See also:
+* {{msg-mw|Revdelete-legend|legend for the form}}
+* {{msg-mw|Revdelete-log|label for dropdown}}
+* {{msg-mw|Revdelete-reason-dropdown|item list for dropdown|notext=1}}
+* {{msg-mw|Revdelete-reasonotherlist|item in dropdown}}
+* {{msg-mw|Revdelete-otherreason|label for input box}}',
 'revdelete-success' => "{{RevisionDelete}}
 
 Possible alternative text - 'Restrictions on the revision visibility were successfully changed.'",
@@ -1292,9 +1874,15 @@ Possible alternative message - 'Restrictions on log entry visibility successfull
 
 Possible alternative message - 'Restrictions could not be set on the visibility of the log entry.'",
 'revdel-restore' => '{{RevisionDelete}}',
-'pagehist' => 'Links to page history at Special:RevisionDelete header together with links to the logs and Special:Undelete.',
-'deletedhist' => 'Links to Special:Undelete at Special:RevisionDelete header together with links to the logs and page history.',
-'revdelete-hide-current' => 'Parameters:
+'revdel-restore-deleted' => '{{RevisionDelete}}',
+'revdel-restore-visible' => '{{RevisionDelete}}',
+'pagehist' => '{{RevisionDelete}}
+
+Links to page history at Special:RevisionDelete header together with links to the logs and Special:Undelete.',
+'deletedhist' => '{{RevisionDelete}}
+Links to Special:Undelete at Special:RevisionDelete header together with links to the logs and page history.',
+'revdelete-hide-current' => '{{RevisionDelete}}
+Parameters:
 * $1 is a date
 * $2 is a time',
 'revdelete-show-no-access' => '{{RevisionDelete}}
@@ -1319,15 +1907,42 @@ Parameters:
 Parameters:
 *$1 - date
 *$2 - time',
+'revdelete-reason-dropdown' => '{{RevisionDelete}}
+Used as item list for dropdown.
+[[File:RevDelete Special-RevisionDelete (r60428).png|frame|center|Screenshot of the interface]]
+
+See also:
+* {{msg-mw|Revdelete-legend|legend for the form}}
+* {{msg-mw|Revdelete-log|label for dropdown}}
+* {{msg-mw|Revdelete-reasonotherlist|item in dropdown}}
+* {{msg-mw|Revdelete-otherreason|label for input box}}
+* {{msg-mw|Revdelete-submit|submit button}}',
 'revdelete-otherreason' => '{{Identical|Other/additional reason}}
 {{RevisionDelete}}
-[[File:RevDelete Special-RevisionDelete (r60428).png|frame|center|Screenshot of the interface]]',
+Used as label for input box.
+[[File:RevDelete Special-RevisionDelete (r60428).png|frame|center|Screenshot of the interface]]
+
+See also:
+* {{msg-mw|Revdelete-legend|legend for the form}}
+* {{msg-mw|Revdelete-log|label for dropdown}}
+* {{msg-mw|Revdelete-reason-dropdown|item list for dropdown|notext=1}}
+* {{msg-mw|Revdelete-reasonotherlist|item in dropdown}}
+* {{msg-mw|Revdelete-submit|submit button}}',
 'revdelete-reasonotherlist' => '{{Identical|Other reason}}
 {{RevisionDelete}}
-[[File:RevDelete Special-RevisionDelete (r60428).png|frame|center|Screenshot of the interface]]',
+Used as an item in dropdown.
+[[File:RevDelete Special-RevisionDelete (r60428).png|frame|center|Screenshot of the interface]]
+
+See also:
+* {{msg-mw|Revdelete-legend|legend for the form}}
+* {{msg-mw|Revdelete-log|label for dropdown}}
+* {{msg-mw|Revdelete-reason-dropdown|item list for dropdown|notext=1}}
+* {{msg-mw|Revdelete-otherreason|label for input box}}
+* {{msg-mw|Revdelete-submit|submit button}}',
 'revdelete-edit-reasonlist' => '{{Identical|Edit delete reasons}}
 {{RevisionDelete}}
 [[File:RevDelete Special-RevisionDelete (r60428).png|frame|center|Screenshot of the interface]]',
+'revdelete-offender' => 'Used as label for input box in the form.',
 
 # Suppression log
 'suppressionlog' => '{{doc-logpage}}
@@ -1336,6 +1951,80 @@ Title of the suppression log. Shown in the drop down menu at [[Special:log]] and
 'suppressionlogtext' => 'Description text of the suppression log. Shown at top of [[Special:log/suppress]].',
 
 # History merging
+'mergehistory-header' => 'Used as header for Merge form in [[Special:MergeHistory]].
+
+See also:
+* {{msg-mw|mergehistory-box}}
+* {{msg-mw|mergehistory-from}}
+* {{msg-mw|mergehistory-into}}
+* {{msg-mw|mergehistory-go}}',
+'mergehistory-box' => 'Used as the legend for the Merge form in [[Special:MergeHistory]].
+
+See also:
+* {{msg-mw|mergehistory-header}}
+* {{msg-mw|mergehistory-from}}
+* {{msg-mw|mergehistory-into}}
+* {{msg-mw|mergehistory-go}}',
+'mergehistory-from' => 'Used as label for the Merge form in [[Special:MergeHistory]].
+
+See also:
+* {{msg-mw|mergehistory-header}}
+* {{msg-mw|mergehistory-box}}
+* {{msg-mw|mergehistory-into}}
+* {{msg-mw|mergehistory-go}}',
+'mergehistory-into' => 'Used as label for the Merge form in [[Special:MergeHistory]].
+
+See also:
+* {{msg-mw|mergehistory-header}}
+* {{msg-mw|mergehistory-box}}
+* {{msg-mw|mergehistory-from}}
+* {{msg-mw|mergehistory-go}}',
+'mergehistory-list' => 'Used as section header in [[Special:MergeHistory]].',
+'mergehistory-merge' => 'Used in [[Special:MergeHistory]].
+* $1 - target page title
+* $2 - destination page title',
+'mergehistory-go' => 'Used as the label for Submit button in the Merge form, in [[Special:MergeHistory]].
+
+See also:
+* {{msg-mw|mergehistory-header}}
+* {{msg-mw|mergehistory-box}}
+* {{msg-mw|mergehistory-from}}
+* {{msg-mw|mergehistory-into}}',
+'mergehistory-submit' => 'Used as label for Submit button in [[Special:MergeHistory]].',
+'mergehistory-empty' => 'Used in [[Special:MergeHistory]].',
+'mergehistory-success' => 'Used in [[Special:MergeHistory]].
+* $1 - target page title
+* $2 - destination page title
+* $3 - number of revisions which succeeded to merge',
+'mergehistory-fail' => 'Used as error message in [[Special:MergeHistory]].',
+'mergehistory-no-source' => 'Used as error message in [[Special:MergeHistory]].
+* $1 - source page title
+See also:
+* {{msg-mw|mergehistory-invalid-source}}
+* {{msg-mw|mergehistory-invalid-destination}}
+* {{msg-mw|mergehistory-no-destination}}
+* {{msg-mw|mergehistory-same-destination}}',
+'mergehistory-no-destination' => 'Used as error message in [[Special:MergeHistory]].
+* $1 - destination page title
+See also:
+* {{msg-mw|mergehistory-invalid-source}}
+* {{msg-mw|mergehistory-no-source}}
+* {{msg-mw|mergehistory-invalid-destination}}
+* {{msg-mw|mergehistory-same-destination}}',
+'mergehistory-invalid-source' => 'Used as error message in [[Special:MergeHistory]].
+
+See also:
+* {{msg-mw|mergehistory-no-source}}
+* {{msg-mw|mergehistory-invalid-destination}}
+* {{msg-mw|mergehistory-no-destination}}
+* {{msg-mw|mergehistory-same-destination}}',
+'mergehistory-invalid-destination' => 'Used as error message in [[Special:MergeHistory]].
+
+See also:
+* {{msg-mw|mergehistory-invalid-source}}
+* {{msg-mw|mergehistory-no-source}}
+* {{msg-mw|mergehistory-no-destination}}
+* {{msg-mw|mergehistory-same-destination}}',
 'mergehistory-autocomment' => 'This message is used as an edit summary when a redirect is automatically created after an entire page history is merged into another page history, and the user who did the merge wrote no comment.
 
 *Parameter $1 is the name of the redirect page which is created
@@ -1345,9 +2034,16 @@ Title of the suppression log. Shown in the drop down menu at [[Special:log]] and
 *Parameter $1 is the name of the redirect page which is created
 *Parameter $2 is the target of the redirect
 *Parameter $3 is a log comment for the merge',
-'mergehistory-same-destination' => 'Error message shown on [[Special:MergeHistory]] when the user entered the same page title to both source and destination',
+'mergehistory-same-destination' => 'Error message shown on [[Special:MergeHistory]] when the user entered the same page title to both source and destination
+
+See also:
+* {{msg-mw|mergehistory-invalid-source}}
+* {{msg-mw|mergehistory-no-source}}
+* {{msg-mw|mergehistory-invalid-destination}}
+* {{msg-mw|mergehistory-no-destination}}',
 'mergehistory-reason' => '{{Identical|Reason}}',
-'mergehistory-revisionrow' => 'A revision row in the merge history page. Parameters:
+'mergehistory-revisionrow' => '{{Optional}}
+A revision row in the merge history page. Parameters:
 * $1 is a radio button to indicate a merge point,
 * $2 is a link to the last revision of a page ({{msg-mw|last}}),
 * $3 is a page link,
@@ -1367,6 +2063,7 @@ This is the name of a log of merge actions done on [[Special:MergeHistory]]. Thi
 The log and its associated special page 'MergeHistory' is not enabled by default.
 
 Please note that the parameters in a log entry will appear in the log only in the default language of the wiki. View [[Special:Log]] for examples on translatewiki.net with English default language.",
+'revertmerge' => 'Used as link text',
 'mergelogpagetext' => 'Description of the [http://translatewiki.net/w/i.php?title=Special%3ALog&type=merge&user=&page=&year=&month=-1 merge log], on the log. The associated [[Special:MergeHistory|Merge]] special page is not enabled by default.',
 
 # Diffs
@@ -1376,7 +2073,12 @@ Please note that the parameters in a log entry will appear in the log only in th
 'difference-multipage' => 'Displayed under the title when viewing the difference between two or more pages.
 See also {{msg-mw|difference}}.',
 'lineno' => 'Message used when comparing different versions of a page (diff). $1 is a line number.',
-'compareselectedversions' => 'Used as button in history pages.',
+'compareselectedversions' => 'Used as button in history pages.
+
+See also:
+* {{msg-mw|Compareselectedversions}}
+* {{msg-mw|Accesskey-compareselectedversions}}
+* {{msg-mw|Tooltip-compareselectedversions}}',
 'showhideselectedversions' => 'Text of the button which brings up the [[mw:RevisionDelete|RevisionDelete]] menu on history pages.',
 'editundo' => 'Undo link when viewing diffs
 {{Identical|Undo}}
@@ -1401,6 +2103,18 @@ Example: [http://translatewiki.net/w/i.php?title=Project:News&diff=426850&oldid=
 
 {{Identical|Search results}}',
 'searchresults-title' => 'Appears as page title in the html header of the search result special page.',
+'searchsubtitle' => 'Parameters:
+* $1 - search term
+See also:
+* {{msg-mw|Searchsubtitleinvalid}}',
+'searchsubtitleinvalid' => 'Parameters:
+* $1 - search term
+See also:
+* {{msg-mw|Searchsubtitle}}',
+'toomanymatches' => 'Used as section header in [[Special:Search]], when there are too many hits.',
+'titlematches' => 'Used as section header in [[Special:Search]].
+
+This message is followed by search results.',
 'notitlematches' => 'Header of results page after a search for a title for which no page exists',
 'textmatches' => 'When displaying search results',
 'notextmatches' => 'Error message when there are no results',
@@ -1416,6 +2130,13 @@ $1 is the number of items shown per page. It is not used when $1 is zero; not su
 [[Special:WhatLinksHere|Whatlinkshere]] pages use {{msg-mw|Whatlinkshere-next}} instead (still as an argument to {{msg-mw|Viewprevnext}}).
 
 {{Identical|Next $1}}",
+'prevn-title' => '* $1 - number of search results
+See also:
+* {{msg-mw|Viewprevnext}}',
+'nextn-title' => '* $1 - number of search results
+See also:
+* {{msg-mw|Viewprevnext}}',
+'shown-title' => '* $1 - number of search results',
 'viewprevnext' => 'This is part of the navigation message on the top and bottom of Special pages which are lists of things, e.g. the User\'s contributions page (in date order) or the list of all categories (in alphabetical order). ($1) and ($2) are either {{msg-mw|Pager-older-n}} and {{msg-mw|Pager-newer-n}} (for date order) or {{msg-mw|Prevn}} and {{msg-mw|Nextn}} (for alphabetical order).
 
 It is also used by [[Special:WhatLinksHere|Whatlinkshere]] pages, where ($1) and ($2) are {{msg-mw|Whatlinkshere-prev}} and {{msg-mw|Whatlinkshere-next}}.
@@ -1426,9 +2147,12 @@ Viewprevnext is sometimes preceded by the {{msg-mw|Showingresults}} or {{msg-mw|
 'searchmenu-legend' => '{{Identical|Search options}}',
 'searchmenu-exists' => 'An option shown in a menu beside search form offering a link to the existing page having the specified title (when using the default MediaWiki search engine).',
 'searchmenu-new' => 'An option shown in a menu beside search form offering a red link to the not yet existing page having the specified title (when using the default MediaWiki search engine).',
-'searchhelp-url' => '{{Identical|HelpContent}}
-Description: The URL of the search help page.
-{{doc-important|Do not change the "<tt>Help:</tt>" part.}}',
+'searchhelp-url' => 'Description: The URL of the search help page.
+{{doc-important|Do not change the "<tt>Help:</tt>" part.}}
+{{Identical|HelpContent}}',
+'searchmenu-prefix' => '{{doc-important|Do not translate "Special:PrefixIndex"}}
+Parameters:
+* $1 - prefix string',
 'searchprofile-articles' => "A quick link in the advanced search box on [[Special:Search]]. Clicking on this link starts a search in the content pages of the wiki.
 
 A 'content page' is a page that forms part of the purpose of the wiki. It includes the main page and pages in the main namespace and any other namespaces that are included when the wiki is customised. For example on Wikimedia Commons 'content pages' include pages in the file and category namespaces. On Wikinews 'content pages' include pages in the Portal namespace. For technical definition of 'content namespaces' see [//www.mediawiki.org/wiki/Manual:Using_custom_namespaces#Content_namespaces Mediawiki].
@@ -1436,17 +2160,59 @@ A 'content page' is a page that forms part of the purpose of the wiki. It includ
 Possible alternatives to the word 'content' are 'subject matter' or 'wiki subject' or 'wiki purpose'.
 
 {{Identical|Content page}}",
-'searchprofile-project' => 'An option in the [[Special:Search]] page.',
-'searchprofile-images' => 'An option in the [http://translatewiki.net/wiki/Special:Search Special:search] page.',
-'searchprofile-everything' => 'An option in the [http://translatewiki.net/wiki/Special:Search Special:search] page.',
-'searchprofile-advanced' => 'An option in the [http://translatewiki.net/wiki/Special:Search Special:Search] page.
+'searchprofile-project' => 'Used as an option in [[Special:Search]].
+
+See also:
+* {{msg-mw|Searchprofile-project|message}}
+* {{msg-mw|Searchprofile-project-tooltip|tooltip}}',
+'searchprofile-images' => 'An option in the [[Special:Search]].
+
+See also:
+* {{msg-mw|Searchprofile-images|message}}
+* {{msg-mw|Searchprofile-images-tooltip|tooltip}}',
+'searchprofile-everything' => 'Used as an option in [[Special:Search]].
+
+See also:
+* {{msg-mw|Searchprofile-everything|message}}
+* {{msg-mw|Searchprofile-everything-tooltip|tooltip}}',
+'searchprofile-advanced' => 'Used as an option in [[Special:Search]].
 
+See also:
+* {{msg-mw|Searchprofile-advanced|message}}
+* {{msg-mw|Searchprofile-advanced-tooltip|tooltip}}
 {{Identical|Advanced}}',
-'searchprofile-articles-tooltip' => '$1 is list of namespaces. {{Identical|Search in $1}}',
-'searchprofile-project-tooltip' => '$1 is list of namespaces. {{Identical|Search in $1}}',
+'searchprofile-articles-tooltip' => 'Used as tooltip for the option {{msg-mw|Searchprofile-articles}} in [[Special:Search]].
+* $1 - list of namespaces
+See also:
+* {{msg-mw|Searchprofile-articles|message}}
+* {{msg-mw|Searchprofile-articles-tooltip|tooltip}}
+{{Identical|Search in $1}}',
+'searchprofile-project-tooltip' => 'Used as tooltip for the option {{msg-mw|Searchprofile-project}} in [[Special:Search]].
+* $1 - list of namespaces
+See also:
+* {{msg-mw|Searchprofile-project|message}}
+* {{msg-mw|Searchprofile-project-tooltip|tooltip}}
+{{Identical|Search in $1}}',
+'searchprofile-images-tooltip' => 'Used as tooltip for the option {{msg-mw|Searchprofile-images}} in the [[Special:Search]].
+See also:
+* {{msg-mw|Searchprofile-images|message}}
+* {{msg-mw|Searchprofile-images-tooltip|tooltip}}',
+'searchprofile-everything-tooltip' => 'Used as tooltip for the option {{msg-mw|Searchprofile-everything}} in [[Special:Search]].
+
+See also:
+* {{msg-mw|Searchprofile-everything|message}}
+* {{msg-mw|Searchprofile-everything-tooltip|tooltip}}',
+'searchprofile-advanced-tooltip' => 'Used as tooltip for the option {{msg-mw|Searchprofile-advanced}} in [[Special:Search]].
+
+See also:
+* {{msg-mw|Searchprofile-advanced|message}}
+* {{msg-mw|Searchprofile-advanced-tooltip|tooltip}}',
 'search-result-size' => 'Shown per line of a [[Special:Search|search result]]
 * $1 is the size of the page in bytes, but no need to add "byte" or similar as the unit is added by special function.
 * $2 is the sum of all words in this page.',
+'search-result-category-size' => '* $1 - number of members in this category. $1 is equal to $2+$3.
+* $2 - number of subcategories
+* $3 - number of files',
 'search-result-score' => 'Shown per line of a [[Special:Search|search result]].
 
 $1 is the relevance of this result in per cent.
@@ -1454,22 +2220,28 @@ $1 is the relevance of this result in per cent.
 {{Identical|Relevance: $1%}}',
 'search-redirect' => "\$1 is a link to the redirect to the page (so, \$1 is the page that the search result is redirected '''from'''). \"Redirect\" is a noun here, not a verb.",
 'search-section' => 'This text will be shown on the search result listing after the page title of a result if the search algorithm thinks that section is more relevant than the rest of the page. $1 is a section title.',
+'search-suggest' => 'Used for "Did you mean" suggestions:
+* $1 - suggested link',
+'search-interwiki-caption' => 'Used in [[Special:Search]], when showing search results from other wikis.',
 'search-interwiki-default' => '* $1 is the hostname of the remote wiki from where the additional results listed below are returned',
 'search-interwiki-more' => '{{Identical|More}}',
-'search-relatedarticle' => '{{Identical|Related}}
-
-This is a search result (and I guess search engine) dependent messages. I do not know how to trigger the feature. The message is displayed if the search result contains information that related pages can also be provided from the search engine. I assume this is "More Like This" functionality. Microsoft glossary defines MLT as "A way to refine search by identifying the right set of documents and then locating similar documents. This allows the searcher to control the direction of the search and focus on the most fruitful lines of inquiry."[http://www.microsoft.com/enterprisesearch/en/us/search-glossary.aspx]',
+'search-relatedarticle' => 'This is a search result (and I guess search engine) dependent messages. I do not know how to trigger the feature. The message is displayed if the search result contains information that related pages can also be provided from the search engine. I assume this is "More Like This" functionality. Microsoft glossary defines MLT as "A way to refine search by identifying the right set of documents and then locating similar documents. This allows the searcher to control the direction of the search and focus on the most fruitful lines of inquiry."[http://www.microsoft.com/enterprisesearch/en/us/search-glossary.aspx]
+{{Identical|Related}}',
 'mwsuggest-disable' => "The text of an option on the 'search options' tab of a user's Preferences.",
 'searcheverything-enable' => 'Used in [[Special:Preferences]], tab “Search”.',
-'searchrelated' => '{{Identical|Related}}
-
-This is a search result (and I guess search engine) dependent messages. I do not know how to trigger the feature. The message is displayed if the search result contains information that related pages can also be provided from the search engine. I assume this is "More Like This" functionality. Microsoft glossary defines MLT as "A way to refine search by identifying the right set of documents and then locating similar documents. This allows the searcher to control the direction of the search and focus on the most fruitful lines of inquiry."[http://www.microsoft.com/enterprisesearch/en/us/search-glossary.aspx]',
+'searchrelated' => 'This is a search result (and I guess search engine) dependent messages. I do not know how to trigger the feature. The message is displayed if the search result contains information that related pages can also be provided from the search engine. I assume this is "More Like This" functionality. Microsoft glossary defines MLT as "A way to refine search by identifying the right set of documents and then locating similar documents. This allows the searcher to control the direction of the search and focus on the most fruitful lines of inquiry."[http://www.microsoft.com/enterprisesearch/en/us/search-glossary.aspx]
+{{Identical|Related}}',
 'searchall' => '{{Identical|All}}',
-'showingresults' => "This message is used on some special pages such as 'Wanted categories'.
+'showingresults' => 'This message is used on some special pages such as [[Special:WantedCategories]]. Parameters:
 *$1 is the total number of results in the batch shown.
-*$2 is the number of the first item listed.",
-'showingresultsnum' => '*$3 is the number of results on the page.
-*$2 is the first number in the batch of results.',
+*$2 is the number of the first item listed.
+See also:
+* {{msg-mw|Showingresultsnum}}',
+'showingresultsnum' => 'Parameters:
+* $2 - the first number in the batch of results
+* $3 - the number of results on the page
+See also:
+* {{msg-mw|Showingresults}}',
 'showingresultsheader' => 'Used in search results of [[Special:Search]].',
 'nonefound' => 'This message appears on the search results page if no results are found.
 {{doc-important|Do not translate "all:".}}',
@@ -1489,7 +2261,10 @@ This is a search result (and I guess search engine) dependent messages. I do not
 'powersearch-togglenone' => '"None" refers to namespaces. It is used in Advanced search: http://translatewiki.net/w/i.php?title=Special:Search&advanced=1
 {{Identical|None}}',
 'search-external' => 'Legend of the fieldset for the input form when the internal search is disabled. Inside the fieldset [[MediaWiki:Searchdisabled]] and [[MediaWiki:Googlesearch]] is shown.',
-'searchdisabled' => 'Shown on [[Special:Search]] when the internal search is disabled.',
+'searchdisabled' => '{{doc-singularthey}}
+In this sentence, "their indexes" refers to "Google\'s indexes".
+
+Shown on [[Special:Search]] when the internal search is disabled.',
 
 # Quickbar
 'qbsettings' => 'The title of the section in [[Special:Preferences]], only shown when using the skins "Standard/Classic" or "Cologne Blue". The quicbar is the same as the sidebar.',
@@ -1506,16 +2281,24 @@ This is a search result (and I guess search engine) dependent messages. I do not
 {{Identical|Preferences}}',
 'mypreferences' => 'Action link label that leads to Special:Preferences; appears in the top menu (e.g. "Username Talk Preferences Watchlist Contributions Log out").
 
-{{Identical|My preferences}}',
+See also:
+* {{msg-mw|Mypreferences}}
+* {{msg-mw|Accesskey-pt-preferences}}
+* {{msg-mw|Tooltip-pt-preferences}}
+{{Identical|Preferences}}',
 'prefs-edits' => 'In user preferences.',
 'prefsnologin' => '{{Identical|Not logged in}}',
+'prefsnologintext' => '* $1 - URI for "returnto" argument',
 'changepassword' => "Section heading on [[Special:Preferences]], tab 'User profile'.
 {{Identical|Change password}}",
 'prefs-skin' => 'Used in user preferences.
 {{Identical|Skin}}',
-'skin-preview' => 'The link beside each skin name in [[Special:Preferences|your user preferences]], tab "skin".
-
+'skin-preview' => '{{doc-actionlink}}
+The link beside each skin name in [[Special:Preferences|your user preferences]], tab "skin".
 {{Identical|Preview}}',
+'datedefault' => 'Used as checkbox label in [[Special:Preferences#mw-prefsection-datetime|user preferences]], {{msg-mw|prefs-datetime}} tab.
+
+This message indicates {{msg-mw|prefs-dateformat}} is default (= not specified).',
 'prefs-beta' => "Header of a subsection at [[Special:Preferences]], tab ''{{int:prefs-editing}}'', listing features that are in beta but mostly suitable for general use",
 'prefs-datetime' => '{{Identical|Date}}',
 'prefs-labs' => "Header of a subsection at [[Special:Preferences]], tab ''{{int:prefs-editing}}'', listing features that are experimental",
@@ -1524,7 +2307,8 @@ This is a search result (and I guess search engine) dependent messages. I do not
 'prefs-rc' => 'Used in user preferences.
 
 {{Identical|Recent changes}}',
-'prefs-watchlist' => 'Used in user preferences.',
+'prefs-watchlist' => 'Used in user preferences.
+{{Identical|My watchlist}}',
 'prefs-watchlist-days' => 'Used in [[Special:Preferences]], tab "Watchlist".',
 'prefs-watchlist-days-max' => 'Shown as hint in [[Special:Preferences]], tab "Watchlist"',
 'prefs-watchlist-edits' => 'Used in [[Special:Preferences]], tab "Watchlist".',
@@ -1534,15 +2318,34 @@ This is a search result (and I guess search engine) dependent messages. I do not
 'prefs-resetpass' => 'Button on user data tab in user preferences. When you click the button you go to the special page [[Special:ResetPass]].
 
 {{Identical|Change password}}',
-'prefs-changeemail' => 'Link on [[Special:Preferences]] to [[Special:ChangeEmail]].',
+'prefs-changeemail' => 'Link on [[Special:Preferences]] to [[Special:ChangeEmail]].
+
+See also:
+* {{msg-mw|prefs-help-email-required|help}}
+* {{msg-mw|prefs-help-email|help}}
+* {{msg-mw|prefs-help-email-others|help}}
+* {{msg-mw|prefs-setemail|link title}}',
+'prefs-setemail' => 'Used as link title in [[Special:Preferences]], if the user has not set E-mail address yet.
+
+See also:
+* {{msg-mw|prefs-help-email-required|help}}
+* {{msg-mw|prefs-help-email|help}}
+* {{msg-mw|prefs-help-email-others|help}}
+* {{msg-mw|prefs-changeemail|link title}}',
+'prefs-email' => 'Used as section name in [[Special:Preferences]].',
 'prefs-rendering' => 'Title of tab in [[Special:Preferences]].',
 'saveprefs' => 'Button for saving changes in the preferences page.
 
+See also:
+* {{msg-mw|Saveprefs}}
+* {{msg-mw|Accesskey-preferences-save}}
+* {{msg-mw|Tooltip-preferences-save}}
 {{Identical|Save}}',
 'resetprefs' => 'Button for resetting changes in the preferences page.',
 'restoreprefs' => 'Used in [[Special:Preferences]]',
 'prefs-editing' => 'Title of a tab in [[Special:Preferences]].
 When changing this message, please also update {{msg-mw|vector-editwarning-warning}} which references to this message.',
+'prefs-edit-boxsize' => 'Used on [[Special:Preferences]].',
 'rows' => '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',
 'searchresultshead' => 'This is the label of the tab in [[Special:Preferences|my preferences]] which contains options for searching the wiki.
@@ -1558,13 +2361,36 @@ When changing this message, please also update {{msg-mw|vector-editwarning-warni
 'prefs-help-watchlist-token' => 'Used in [[Special:Preferences]], tab Watchlist.',
 'savedprefs' => 'This message appears after saving changes to your user preferences.',
 'timezonelegend' => '{{Identical|Time zone}}',
+'localtime' => 'Used as label in [[Special:Preferences#mw-prefsection-datetime|preferences]].',
 'timezoneuseserverdefault' => '[[Special:Preferences]] > Date and time > Time zone
 
 This option lets your time zone setting use the one that is used on the wiki (often UTC).',
+'timezoneuseoffset' => 'Used in "Time zone" listbox in [[Special:Preferences#mw-prefsection-datetime|preferences]], "date and time" tab.',
 'timezoneoffset' => "Text next to input box in [[Special:Preferences]], tab 'date and time', section 'timezone'.",
+'servertime' => 'Used as label in [[Special:Preferences#mw-prefsection-datetime|preferences]].',
 'guesstimezone' => 'Option to fill in the timezone from the browser setting',
+'timezoneregion-africa' => 'Used in "Time zone" listbox in [[Special:Preferences#mw-prefsection-datetime|preferences]], "date and time" tab.
+{{Related|Timezoneregion}}',
+'timezoneregion-america' => 'Used in "Time zone" listbox in [[Special:Preferences#mw-prefsection-datetime|preferences]], "date and time" tab.
+{{Related|Timezoneregion}}',
+'timezoneregion-antarctica' => 'Used in "Time zone" listbox in [[Special:Preferences#mw-prefsection-datetime|preferences]], "date and time" tab.
+{{Related|Timezoneregion}}',
+'timezoneregion-arctic' => 'Used in "Time zone" listbox in [[Special:Preferences#mw-prefsection-datetime|preferences]], "date and time" tab.
+{{Related|Timezoneregion}}',
+'timezoneregion-asia' => 'Used in "Time zone" listbox in [[Special:Preferences#mw-prefsection-datetime|preferences]], "date and time" tab.
+{{Related|Timezoneregion}}',
+'timezoneregion-atlantic' => 'Used in "Time zone" listbox in [[Special:Preferences#mw-prefsection-datetime|preferences]], "date and time" tab.
+{{Related|Timezoneregion}}',
+'timezoneregion-australia' => 'Used in "Time zone" listbox in [[Special:Preferences#mw-prefsection-datetime|preferences]], "date and time" tab.
+{{Related|Timezoneregion}}',
+'timezoneregion-europe' => 'Used in "Time zone" listbox in [[Special:Preferences#mw-prefsection-datetime|preferences]], "date and time" tab.
+{{Related|Timezoneregion}}',
+'timezoneregion-indian' => 'Used in "Time zone" listbox in [[Special:Preferences#mw-prefsection-datetime|preferences]], "date and time" tab.
+{{Related|Timezoneregion}}',
+'timezoneregion-pacific' => 'Used in "Time zone" listbox in [[Special:Preferences#mw-prefsection-datetime|preferences]], "date and time" tab.
+{{Related|Timezoneregion}}',
 'allowemail' => 'Used in [[Special:Preferences]] > {{int:prefs-personal}} > {{int:email}}.',
-'prefs-searchoptions' => '{{Identical|Search options}}',
+'prefs-searchoptions' => '{{Identical|Search}}',
 'prefs-namespaces' => "{{Identical|Namespaces}}
 Shown as legend of the second fieldset of the tab 'Search' in [[Special:Preferences]]",
 'defaultns' => 'Used in [[Special:Preferences]], tab "Search".',
@@ -1572,6 +2398,7 @@ Shown as legend of the second fieldset of the tab 'Search' in [[Special:Preferen
 'prefs-files' => 'Title of a tab in [[Special:Preferences]].',
 'prefs-custom-css' => 'visible on [[Special:Preferences]] -[Skins].',
 'prefs-custom-js' => 'visible on [[Special:Preferences]] -[Skins].',
+'prefs-common-css-js' => 'Used as label in [[Special:Preferences#mw-prefsection-rendering|preferences]], tab "Appearance", section "Skin".',
 'prefs-reset-intro' => 'Used in [[Special:Preferences/reset]].',
 'prefs-emailconfirm-label' => 'Sub-heading in [[Special:Preferences]] > {{int:prefs-personal}} > {{int:email}}.',
 'prefs-textboxsize' => "Header for the box specifying the size of the editing window, displayed on the 'editing' tab of the [[Special:Preferences|user preferences]] special page.",
@@ -1609,20 +2436,40 @@ Used in [[Special:Preferences]]. Parameters are:
 'badsiglength' => 'Warning message that is displayed on [[Special:Preferences]] when trying to save a signature that is too long. Parameter $1 is the maximum number of characters that is allowed in a signature (multi-byte characters are counted as one character).',
 'yourgender' => 'Used in [[Special:Preferences]], first tab.
 {{Identical|Gender}}',
-'gender-unknown' => 'Used in [[Special:Preferences]], first tab, as one of the selectable options of the {{msg-mw|gender}} prompt. Choosing it indicates that the grammatical gender of the user name is not to be made public, cannot be determined, or matches none of the other choices preset in the select.',
-'gender-male' => 'Used in [[Special:Preferences]], first tab, as one of the selectable options of the {{msg-mw|gender}} prompt. Choosing it indicates that the grammatical gender of the user name should be "male" for those languages having a "normal" male grammatical gender.
+'gender-unknown' => 'Used in [[Special:Preferences]], first tab, as one of the selectable options of the {{msg-mw|Yourgender}} prompt. Choosing it indicates that the grammatical gender of the user name is not to be made public, cannot be determined, or matches none of the other choices preset in the select.',
+'gender-male' => 'Used in [[Special:Preferences]], first tab, as one of the selectable options of the {{msg-mw|Yourgender}} prompt. Choosing it indicates that the grammatical gender of the user name should be "male" for those languages having a "normal" male grammatical gender.
 {{Identical|Male}}',
-'gender-female' => 'Used in [[Special:Preferences]], first tab, as one of the selectable options of the {{msg-mw|gender}} prompt. Choosing it indicates that the grammatical gender of the user name should be "female" for those languages having a "normal" female grammatical gender.
+'gender-female' => 'Used in [[Special:Preferences]], first tab, as one of the selectable options of the {{msg-mw|Yourgender}} prompt. Choosing it indicates that the grammatical gender of the user name should be "female" for those languages having a "normal" female grammatical gender.
 {{Identical|Female}}',
+'prefs-help-gender' => 'Used as additional description for {{msg-mw|yourgender}} field in [[Special:Preferences]], section {{msg-mw|prefs-info}}.',
 'email' => '{{Identical|E-mail}}',
 'prefs-help-realname' => 'In user preferences.
 {{Identical|Real name attribution}}',
-'prefs-help-email' => 'Shown as explanation text on [[Special:Preferences]] > {{int:prefs-personal}} > {{int:email}}.',
-'prefs-help-email-others' => 'This text is shown on account creation, below the description of the e-mail address field (which is optional).',
+'prefs-help-email' => 'Shown as explanation text on [[Special:Preferences]] > {{int:prefs-personal}} > {{int:email}}.
+
+See also:
+* {{msg-mw|prefs-help-email-required|help}}
+* {{msg-mw|prefs-help-email-others|help}}
+* {{msg-mw|prefs-changeemail|link title}}
+* {{msg-mw|prefs-setemail|link title}}',
+'prefs-help-email-others' => 'This text is shown on account creation, below the description of the e-mail address field (which is optional).
+
+See also:
+* {{msg-mw|prefs-help-email-required|help}}
+* {{msg-mw|prefs-help-email|help}}
+* {{msg-mw|prefs-changeemail|link title}}
+* {{msg-mw|prefs-setemail|link title}}',
+'prefs-help-email-required' => 'Shown as explanation text on [[Special:Preferences]] > {{int:prefs-personal}} > {{int:email}}.
+
+See also:
+* {{msg-mw|prefs-help-email|help}}
+* {{msg-mw|prefs-help-email-others|help}}
+* {{msg-mw|prefs-changeemail|link title}}
+* {{msg-mw|prefs-setemail|link title}}',
 'prefs-info' => "Header for the box giving basic information on the user account, displayed on the 'user profile' tab of the [[Special:Preferences|user preferences]] special page.",
 'prefs-i18n' => 'Field set legend for user preferences regarding the interface language',
 'prefs-signature' => '{{Identical|Signature}}',
-'prefs-dateformat' => 'Used in [[Special:Preferences]], tab "Date and time".',
+'prefs-dateformat' => 'Used in [[Special:Preferences#mw-prefsection-datetime|Special:Preferences]], tab "Date and time".',
 'prefs-timeoffset' => 'Used in [[Special:Preferences]], tab "Date and time".',
 'prefs-advancedediting' => 'Used in [[Special:Preferences]], tab "Editing".
 {{Identical|Advanced options}}',
@@ -1650,6 +2497,10 @@ Used in [[Special:Preferences]], tab "Watchlist". The display options refer to:
 * {{msg-mw|Prefs-watchlist-edits}}',
 'prefs-diffs' => 'Used in [[Special:Preferences]], tab "Misc".',
 
+# User preference: e-mail validation using jQuery
+'email-address-validity-valid' => 'Used as hint for {{msg-mw|changeemail-newemail}} field in [[Special:ChangeEmail]], when the provided E-mail address is valid.',
+'email-address-validity-invalid' => 'Used as warning for {{msg-mw|changeemail-newemail}} field in [[Special:ChangeEmail]], when the provided E-mail address is invalid.',
+
 # User rights
 'userrights' => 'Page title of [[Special:UserRights]].',
 'userrights-lookup-user' => 'Label text when managing user rights ([[Special:UserRights]])',
@@ -1660,8 +2511,9 @@ Used in [[Special:Preferences]], tab "Watchlist". The display options refer to:
 'editinguser' => 'Appears on [[Special:UserRights]]. Parameters:
 * $1 is a username
 * $2 are user tool links. Example: "(Talk | contribs | block | send e-mail)".',
-'userrights-editusergroup' => '{{Identical|Edit user groups}}. Parameter:
-* $1 is a username - optional, can be used for GENDER',
+'userrights-editusergroup' => 'Parameter:
+* $1 is a username - optional, can be used for GENDER
+{{Identical|Edit user groups}}',
 'saveusergroups' => 'Button text when editing user groups',
 'userrights-groupsmember' => 'Used when editing user groups in [[Special:Userrights]]. The message is followed by a list of group names.
 
@@ -1739,15 +2591,16 @@ Basic right to read any page.',
 'right-edit' => '{{doc-right|edit}}
 Basic right to edit pages that are not protected.',
 'right-createpage' => '{{doc-right|createpage}}
-Basic right to create pages. The right to edit discussion/talk pages is {{msg|right-createtalk|pl=yes}}.',
+Basic right to create pages. The right to edit discussion/talk pages is {{msg-mw|right-createtalk}}.',
 'right-createtalk' => '{{doc-right|createtalk}}
-Basic right to create discussion/talk pages. The right to edit other pages is {{msg|right-createpage|pl=yes}}.',
+Basic right to create discussion/talk pages. The right to edit other pages is {{msg-mw|right-createpage}}.',
 'right-createaccount' => '{{doc-right|createaccount}}
 The right to [[Special:CreateAccount|create a user account]].',
 'right-minoredit' => '{{doc-right|minoredit}}
-The right to use the "This is a minor edit" checkbox. See {{msg|minoredit|pl=yes}} for the message used for that checkbox.',
+The right to use the "This is a minor edit" checkbox. See {{msg-mw|minoredit}} for the message used for that checkbox.',
 'right-move' => '{{doc-right|move}}
-The right to move any page that is not protected from moving.',
+The right to move any page that is not protected from moving.
+{{Identical|Move page}}',
 'right-move-subpages' => '{{doc-right|move-subpages}}',
 'right-move-rootuserpages' => '{{doc-right|move-rootuserpages}}',
 'right-movefile' => '{{doc-right|movefile}}',
@@ -1755,11 +2608,24 @@ The right to move any page that is not protected from moving.',
 'right-upload' => '{{doc-right|upload}}
 The right to [[Special:Upload|upload]] a file (this includes images, media, audio, ...).',
 'right-reupload' => '{{doc-right|reupload}}
-The right to upload a file under a file name that already exists. Related messages: {{msg|right-upload|pl=yes}}, {{msg|right-reupload-own|pl=yes}} and {{msg|right-reupload-shared|pl=yes}}.',
+The right to upload a file under a file name that already exists.
+
+Related messages:
+* {{msg-mw|right-upload}}
+* {{msg-mw|right-reupload-own}}
+* {{msg-mw|right-reupload-shared}}',
 'right-reupload-own' => '{{doc-right|reupload-own}}
-Right to upload a file under a file name that already exists, and that the same user has uploaded. Related messages: {{msg|right-upload|pl=yes}} and {{msg|right-reupload|pl=yes}}.',
+Right to upload a file under a file name that already exists, and that the same user has uploaded.
+
+Related messages:
+* {{msg-mw|right-upload}}
+* {{msg-mw|right-reupload}}',
 'right-reupload-shared' => '{{doc-right|reupload-shared}}
-The right to upload a file locally under a file name that already exists in a shared database (for example Commons). Related messages: {{msg|right-upload|pl=yes}} and {{msg|right-reupload|pl=yes}}.',
+The right to upload a file locally under a file name that already exists in a shared database (for example Commons).
+
+Related messages:
+* {{msg-mw|right-upload}}
+* {{msg-mw|right-reupload}}',
 'right-upload_by_url' => '{{doc-right|upload by url}}',
 'right-purge' => '{{doc-right|purge}}
 The right to use <tt>&action=purge</tt> in the URL, without needing to confirm it (by default, anonymous users need to confirm it).',
@@ -1768,66 +2634,67 @@ If your account is older than [[mw:Manual:\$wgAutoConfirmAge|wgAutoConfirmAge]]
 If you are in that group, you have (by default) the '''right \"autoconfirmed\"'''. With this right, you can for example <!-- I think this right includes more things --> edit semi-protected pages.",
 'right-bot' => '{{doc-right|bot}}',
 'right-nominornewtalk' => '{{doc-right|nominornewtalk}}
-If someone with this right (bots by default) edits a user talk page and marks it as minor (requires {{msg|right-minoredit|pl=yes}}), the user will not get a notification "You have new messages".',
+If someone with this right (bots by default) edits a user talk page and marks it as minor (requires {{msg-mw|right-minoredit}}), the user will not get a notification "You have new messages".',
 'right-apihighlimits' => '{{doc-right|apihighlimits}}',
 'right-writeapi' => '{{doc-right|writeapi}}',
 'right-delete' => '{{doc-right|delete}}',
 'right-bigdelete' => '{{doc-right|bigdelete}}',
 'right-deletelogentry' => '{{doc-right|deletelogentry}}
 This user right is part of the [[mw:RevisionDelete|RevisionDelete]] feature.
-It can be given to the group {{msg|group-sysop|pl=yes}}, although this right is disabled by default.
+It can be given to the group {{msg-mw|group-sysop}}, although this right is disabled by default.
 
-See also
-* {{msg|right-suppressionlog|pl=yes}}
-* {{msg|right-hideuser|pl=yes}}
-* {{msg|right-suppressrevision|pl=yes}}
-* {{msg|right-deleterevision|pl=yes}}',
+See also:
+* {{msg-mw|right-suppressionlog}}
+* {{msg-mw|right-hideuser}}
+* {{msg-mw|right-suppressrevision}}
+* {{msg-mw|right-deleterevision}}',
 'right-deleterevision' => '{{doc-right|deleterevision}}
 This user right is part of the [[mw:RevisionDelete|RevisionDelete]] feature.
-It can be given to the group {{msg|group-sysop|pl=yes}}, although this right is disabled by default.
+It can be given to the group {{msg-mw|group-sysop}}, although this right is disabled by default.
 
 See also
-* {{msg|right-suppressionlog|pl=yes}}
-* {{msg|right-hideuser|pl=yes}}
-* {{msg|right-suppressrevision|pl=yes}}
-* {{msg|right-deletelogentry|pl=yes}}',
+* {{msg-mw|right-suppressionlog}}
+* {{msg-mw|right-hideuser}}
+* {{msg-mw|right-suppressrevision}}
+* {{msg-mw|right-deletelogentry}}',
 'right-deletedhistory' => '{{doc-right|deletedhistory}}',
 'right-deletedtext' => '{{doc-right|deletedtext}}',
 'right-browsearchive' => '{{doc-right|browsearchive}}',
 'right-undelete' => '{{doc-right|undelete}}',
 'right-suppressrevision' => '{{doc-right|suppressrevision}}
 This user right is part of the [[mw:RevisionDelete|RevisionDelete]] feature.
-It can be given to the group {{msg|group-suppress|pl=yes}}, although that group is disabled by default.
+It can be given to the group {{msg-mw|group-suppress}}, although that group is disabled by default.
 
-See also
-* {{msg|right-suppressionlog|pl=yes}}
-* {{msg|right-hideuser|pl=yes}}
-* {{msg|right-deletelogentry|pl=yes}}
-* {{msg|right-deleterevision|pl=yes}}',
+See also:
+* {{msg-mw|right-suppressionlog}}
+* {{msg-mw|right-hideuser}}
+* {{msg-mw|right-deletelogentry}}
+* {{msg-mw|right-deleterevision}}',
 'right-suppressionlog' => '{{doc-right|suppressionlog}}
 This user right is part of the [[mw:RevisionDelete|RevisionDelete]] feature.
-It can be given to the group {{msg|group-suppress|pl=yes}}, although that group is disabled by default.
+It can be given to the group {{msg-mw|group-suppress}}, although that group is disabled by default.
 
 See also
-* {{msg|right-suppressrevision|pl=yes}}
-* {{msg|right-hideuser|pl=yes}}
-* {{msg|right-deletelogentry|pl=yes}}
-* {{msg|right-deleterevision|pl=yes}}',
+* {{msg-mw|right-suppressrevision}}
+* {{msg-mw|right-hideuser}}
+* {{msg-mw|right-deletelogentry}}
+* {{msg-mw|right-deleterevision}}',
 'right-block' => '{{doc-right|block}}',
 'right-blockemail' => '{{doc-right|blockemail}}',
 'right-hideuser' => '{{doc-right|hideuser}}
 This user right is part of the [[mw:RevisionDelete|RevisionDelete]] feature.
-It can be given to the group {{msg|group-suppress|pl=yes}}, although that group is disabled by default.
+It can be given to the group {{msg-mw|group-suppress}}, although that group is disabled by default.
 
 See also
-* {{msg|right-suppressionlog|pl=yes}}
-* {{msg|right-suppressrevision|pl=yes}}
-* {{msg|right-deletelogentry|pl=yes}}
-* {{msg|right-deleterevision|pl=yes}}',
+* {{msg-mw|right-suppressionlog}}
+* {{msg-mw|right-suppressrevision}}
+* {{msg-mw|right-deletelogentry}}
+* {{msg-mw|right-deleterevision}}',
 'right-ipblock-exempt' => '{{doc-right|ipblock-exempt}}
 This user automatically bypasses IP blocks, auto-blocks and range blocks - so I presume - but I am uncertain',
 'right-proxyunbannable' => '{{doc-right|proxyunbannable}}',
-'right-unblockself' => '{{doc-right|unblockself}}',
+'right-unblockself' => '{{doc-right|unblockself}}
+{{doc-singularthey}}',
 'right-protect' => '{{doc-right|protect}}',
 'right-editprotected' => '{{doc-right|editprotected}}',
 'right-editinterface' => '{{doc-right|editinterface}}',
@@ -1854,45 +2721,16 @@ The rate limits have no effect on the groups that have this right. Rate limits i
 'right-sendemail' => '{{doc-right|sendemail}}',
 'right-passwordreset' => '{{doc-right|passwordreset}}',
 
-# User rights log
+# Special:Log/newusers
+'newuserlogpage' => '{{doc-logpage}}
+
+Part of the "Newuserlog" extension. It is both the title of [[Special:Log/newusers]] and the link you can see in [[Special:RecentChanges]].',
+'newuserlogpagetext' => 'Part of the "Newuserlog" extension. It is the description you can see on [[Special:Log/newusers]].',
+
+# User rights log
 'rightslog' => '{{doc-logpage}}
 In [[Special:Log]]',
 'rightslogtext' => 'Text in [[Special:Log/rights]].',
-'rightslogentry' => 'This message is displayed in the [[Special:Log/rights|User Rights Log]] when a bureaucrat changes the user groups for a user.
-
-* Parameter $1 is the username
-* Parameters $2 and $3 are lists of user groups or {{msg-mw|Rightsnone}}
-
-The name of the bureaucrat who did this task appears before this message.
-
-Similar to {{msg-mw|Gur-rightslog-entry}}',
-'rightslogentry-autopromote' => 'This message is displayed in the [[Special:Log/rights|User Rights Log]] when a user is automatically promoted to a user group.
-
-Parameters:
-* $2 is a comma separated list of old user groups or {{msg-mw|Rightsnone}}
-* $3 is a comma separated list of new user groups',
-'logentry-rights-rights' => '*$1 - username
-*$2 - (see below)
-*$3 - username
-*$4 - list of user groups or {{msg-mw|Rightsnone}}
-*$5 - list of user groups or {{msg-mw|Rightsnone}}
-----
-{{Logentry}}',
-'logentry-rights-rights-legacy' => '*$1 - username
-*$2 - (see below)
-*$3 - username
-----
-{{Logentry}}',
-'logentry-rights-autopromote' => '*$1 - username
-*$2 - (see below)
-*$3 - (see below)
-*$4 - comma separated list of old user groups or {{msg-mw|Rightsnone}}
-*$5 - comma separated list of new user groups
-----
-{{Logentry}}',
-'rightsnone' => 'Default rights for registered users.
-
-{{Identical|None}}',
 
 # Associated actions - in the sentence "You do not have permission to X"
 'action-read' => '{{Doc-action|read}}',
@@ -1939,9 +2777,14 @@ This action allows editing of all of the "user rights", not just the rights of t
 'nchanges' => 'Appears on the [[Special:RecentChanges]] special page in brackets after pages having more than one change on that date. $1 is the number of changes on that day.',
 'recentchanges' => 'The text of the link in sidebar going to the special page [[Special:RecentChanges]]. Also the page title of that special page.
 
+See also:
+* {{msg-mw|Recentchanges}}
+* {{msg-mw|Accesskey-n-recentchanges}}
+* {{msg-mw|Tooltip-n-recentchanges}}
 {{Identical|Recent changes}}',
 'recentchanges-legend' => 'Legend of the fieldset of [[Special:RecentChanges]]',
 'recentchanges-summary' => 'Summary of [[Special:RecentChanges]].',
+'recentchanges-feed-description' => 'Used in feed of RecentChanges. See example [http://translatewiki.net/w/i.php?title=Special:RecentChanges&feed=atom feed].',
 'recentchanges-label-newpage' => 'Tooltip for {{msg-mw|newpageletter}}',
 'recentchanges-label-minor' => 'Tooltip for {{msg-mw|minoreditletter}}',
 'recentchanges-label-bot' => 'Tooltip for {{msg-mw|boteditletter}}',
@@ -1970,7 +2813,8 @@ Similar to {{msg-mw|wlnote}} which is used on [[Special:Watchlist]].
 {{Identical|$1 bots}}",
 'rcshowhideliu' => 'Option text in [[Special:RecentChanges]]',
 'rcshowhideanons' => "Option text in [[Special:RecentChanges]]. Parameters:
-* $1 is the 'show/hide' command, with the text taken from either {{msg-mw|show}} or {{msg-mw|hide}}.",
+* $1 is the 'show/hide' command, with the text taken from either {{msg-mw|show}} or {{msg-mw|hide}}.
+{{Identical|Anonymous user}}",
 'rcshowhidepatr' => "Option text in [[Special:RecentChanges]]. Parameters:
 * $1 is the 'show/hide' command, with the text taken from either {{msg-mw|show}} or {{msg-mw|hide}}.",
 'rcshowhidemine' => "Option text in [[Special:RecentChanges]]. Parameters:
@@ -1982,31 +2826,53 @@ Similar to {{msg-mw|wlnote}} which is used on [[Special:Watchlist]].
 List elements are separated by {{msg-mw|pipe-separator}} each. Each list element is, or contains, a link.",
 'diff' => 'Short form of "differences". Used on [[Special:RecentChanges]], [[Special:Watchlist]], ...',
 'hist' => 'Short form of "history". Used on [[Special:RecentChanges]], [[Special:Watchlist]], ...',
-'hide' => 'Option text in [[Special:RecentChanges]], and in [[Special:WhatLinksHere]]
+'hide' => '{{doc-actionlink}}
+Option text in [[Special:RecentChanges]], and in [[Special:WhatLinksHere]].
 
+See also:
+* {{msg-mw|Show}}
 {{Identical|Hide}}',
-'show' => '{{Identical|Show}}',
+'show' => '{{doc-actionlink}}
+Option text in [[Special:RecentChanges]], and in [[Special:WhatLinksHere]].
+
+See also:
+* {{msg-mw|Hide}}
+{{Identical|Show}}',
 'minoreditletter' => "Very short form of \"'''minor edit'''\". Used in [[Special:RecentChanges]], [[Special:Watchlist]], [[Special:Contributions]] and history pages.",
 'newpageletter' => "Very short form of \"'''new page'''\". Used in [[Special:RecentChanges]], [[Special:Watchlist]] and [[Special:Contributions]].",
 'boteditletter' => 'Abbreviation of "bot". Appears in [[Special:RecentChanges]] and [[Special:Watchlist]].',
 'unpatrolledletter' => '{{optional}}
 
 Used in {{msg-mw|Recentchanges-label-legend}}, meaning "unpatrolled".',
+'number_of_watching_users_pageview' => 'Used if <code>$wgPageShowWatchingUsers</code> is true.
+* $1 - number of watching user(s)',
 'rc_categories' => "Probably to do with 'recent changes' special page, either in a particular skin, or for a particular user group.
 
 I guess that this should appear before an input box where you can specify that recent changes should be shown for pages belonging to certain categories only. You name the categories in the input box, and separate them by a pipe character. If this is right, then you should be able to use 'restrict' instead of 'limit', or even 'show pages in the following categories only'.",
+'rc_categories_any' => 'Used in the CategoryFilter form on [[Special:RecentChanges]], if <code>$wgAllowCategorizedRecentChanges</code> is true.
+{{Identical|Any}}',
 'rc-change-size' => '{{optional}}
 
 Does not work under $wgMiserMode ([[mwr:48986|r48986]]).',
 'rc-change-size-new' => 'Tooltip when hovering a change list diff size. The tooltip shows the resulting new size in bytes.',
 'newsectionsummary' => 'Default summary when adding a new section to a page.',
+'rc-enhanced-expand' => 'See also:
+* {{msg-mw|Rc-enhanced-hide}}',
+'rc-enhanced-hide' => 'See also:
+* {{msg-mw|Rc-enhanced-expand}}',
 'rc-old-title' => 'Text that shows the original title of a page, $1 is the original title text',
 
 # Recent changes linked
-'recentchangeslinked' => 'Title of [[Special:RecentChangesLinked]] and display name of page on [[Special:SpecialPages]].',
+'recentchangeslinked' => 'Title of [[Special:RecentChangesLinked]] and display name of page on [[Special:SpecialPages]].
+
+See also:
+* {{msg-mw|Recentchangeslinked}}
+* {{msg-mw|Accesskey-t-recentchangeslinked}}
+* {{msg-mw|Tooltip-t-recentchangeslinked}}',
 'recentchangeslinked-feed' => 'Title of [[Special:RecentChangesLinked]] and display name of page on [[Special:SpecialPages]].',
 'recentchangeslinked-toolbox' => 'Title of [[Special:RecentChangesLinked]] and display name of page on [[Special:SpecialPages]].',
 'recentchangeslinked-title' => 'Message used as title and page header on [[Special:RecentChangesLinked]] (needs an argument like "/Main Page"). Related changes are all recent change to pages that are linked from \'\'this page\'\'. "$1" is the name of the page for which related changes are shown.',
+'recentchangeslinked-noresult' => 'Used in [[Special:RecentChangesLinked]], when there are no changes.',
 'recentchangeslinked-summary' => 'Summary of [[Special:RecentChangesLinked]].',
 'recentchangeslinked-page' => '{{Identical|Page name}}',
 'recentchangeslinked-to' => 'Checkbox in [[Special:RecentChangesLinked]].',
@@ -2014,11 +2880,44 @@ Does not work under $wgMiserMode ([[mwr:48986|r48986]]).',
 # Upload
 'upload' => 'Display name for link to [[Special:Upload]] for uploading files to the wiki.
 
+See also:
+* {{msg-mw|Upload}}
+* {{msg-mw|Accesskey-t-upload}}
+* {{msg-mw|Tooltip-t-upload}}
 {{Identical|Upload file}}',
 'uploadbtn' => 'Button name in [[Special:Upload]].
 
+See also:
+* {{msg-mw|Uploadbtn}}
+* {{msg-mw|Accesskey-upload}}
+* {{msg-mw|Tooltip-upload}}
 {{Identical|Upload file}}',
-'uploadnologin' => '{{Identical|Not logged in}}',
+'reuploaddesc' => 'Used as button text in the Upload form on [[Special:Upload]].
+
+See also:
+* {{msg-mw|upload-tryagain|Submit button text}}
+* {{msg-mw|ignorewarning|button text}}',
+'upload-tryagain' => 'Used as Submit button text in [[Special:Upload]].
+
+See also:
+* {{msg-mw|Uploaderror|section header}}
+* {{msg-mw|ignorewarning|button text}}
+* {{msg-mw|reuploaddesc|button text}}',
+'uploadnologin' => 'Used as title of the error message {{msg-mw|Uploadnologintext}}.
+{{Identical|Not logged in}}',
+'uploadnologintext' => 'Used as error message. The title for this message is {{msg-mw|Uploadnologin}}.
+
+See also:
+* {{msg-mw|Whitelistedittext}}
+* {{msg-mw|Nocreatetext}}
+* {{msg-mw|Loginreqpagetext}}',
+'upload_directory_missing' => '* $1 - directory name',
+'upload_directory_read_only' => '* $1 - directory name',
+'uploaderror' => 'Used as section header in [[Special:Upload]].
+
+See also:
+* {{msg-mw|upload-tryagain|Submit text}}',
+'upload-recreate-warning' => 'Used as warning in [[Special:Upload]].',
 'uploadtext' => "{{doc-important|''thumb'' and ''left'' are magic words. Leave them untranslated!}}
 Text displayed when uploading a file using [[Special:Upload]].",
 'upload-permitted' => 'Used in [[Special:Upload]].',
@@ -2026,18 +2925,56 @@ Text displayed when uploading a file using [[Special:Upload]].",
 'upload-prohibited' => 'Used in [[Special:Upload]].',
 'uploadlogpage' => '{{doc-logpage}}
 Page title of [[Special:Log/upload]].',
+'uploadlogpagetext' => 'Appears on top of [[Special:Log/upload]].',
 'filename' => '{{Identical|Filename}}',
-'filedesc' => '{{Identical|Summary}}',
+'filedesc' => 'Used as section header in [[Special:Upload]].
+
+See also:
+* {{msg-mw|License-header}}
+* {{msg-mw|Filestatus}}
+* {{msg-mw|Filesource}}
+{{Identical|Summary}}',
 'fileuploadsummary' => '{{Identical|Summary}}',
 'filereuploadsummary' => 'Label of textearea in Special:Upload when uploading a new version of existing file.',
+'filestatus' => 'Used as section header in [[Special:Upload]].
+
+See also:
+* {{msg-mw|License-header}}
+* {{msg-mw|Filedesc}}
+* {{msg-mw|Filesource}}',
 'filesource' => 'On page [[Special:Upload]] if defined $wgUseCopyrightUpload for detailed copyright information forms. This is source of file.
 
+See also:
+* {{msg-mw|License-header}}
+* {{msg-mw|Filedesc}}
+* {{msg-mw|Filestatus}}
 {{Identical|Source}}',
+'ignorewarning' => 'Used as button text in the Upload form on [[Special:Upload]].
+
+See also:
+* {{msg-mw|upload-tryagain|Submit button text}}
+* {{msg-mw|reuploaddesc|button text}}',
 'ignorewarnings' => 'In [[Special:Upload]]',
-'filename-toolong' => 'Error message when uploading a file with a filename longer than the hardcoded limit of 240 bytes. This limit will never change and is hardcoded in the message',
+'illegalfilename' => '* $1 - filename',
+'filename-toolong' => 'Error message when uploading a file with a filename longer than the hard-coded limit of 240 bytes. This limit will never change and is hard-coded in the message.
+
+See also:
+* {{msg-mw|empty-file}}
+* {{msg-mw|file-too-large}}
+* {{msg-mw|filetype-missing}}
+* {{msg-mw|filetype-banned}}
+* {{msg-mw|filename-tooshort}}
+* {{msg-mw|illegal-filename}}
+* {{msg-mw|overwrite}}
+* {{msg-mw|verification-error}}
+* {{msg-mw|hookaborted}}
+* {{msg-mw|windows-nonascii-filename}}
+* {{msg-mw|unknown-error}}',
+'badfilename' => '* $1 - filename',
 'filetype-mime-mismatch' => 'Upload error. Parameters:
 * $1 is the extension of the uploaded file
 * $2 is the MIME type of the uploaded file',
+'filetype-badmime' => '* $1 - string representing the MIME type',
 'filetype-bad-ie-mime' => '$1 will contain a mime type like <tt>image/jpeg</tt> or <tt>application/zip</tt>',
 'filetype-unwanted-type' => "* $1 is the extension of the file which cannot be uploaded
 * $2 is the list of file extensions that can be uploaded (Example: ''png, gif, jpg, jpeg, ogg, pdf, svg.'')
@@ -2046,11 +2983,175 @@ Page title of [[Special:Log/upload]].',
 * $2 is the list of file extensions that can be uploaded (Example: ''png, gif, jpg, jpeg, ogg, pdf, svg.'')
 * $3 is the number of allowed file formats (to be used for the PLURAL function)
 * $4 is the number of extensions that could not be uploaded (to be used for the PLURAL function)",
-'filetype-missing' => 'Error when uploading a file with no extension',
-'verification-error' => 'Error message shown when an uploaded file contents does not pass verification, i.e. the file is corrupted, it is not the type it claims to be etc.',
+'filetype-missing' => 'Used as error message when uploading a file.
+
+See also:
+* {{msg-mw|empty-file}}
+* {{msg-mw|file-too-large}}
+* {{msg-mw|filetype-banned}}
+* {{msg-mw|filename-tooshort}}
+* {{msg-mw|illegal-filename}}
+* {{msg-mw|overwrite}}
+* {{msg-mw|verification-error}}
+* {{msg-mw|hookaborted}}
+* {{msg-mw|windows-nonascii-filename}}
+* {{msg-mw|filename-toolong}}
+* {{msg-mw|unknown-error}}',
+'empty-file' => 'Used as error message when uploading a file.
+
+See also:
+* {{msg-mw|file-too-large}}
+* {{msg-mw|filetype-missing}}
+* {{msg-mw|filetype-banned}}
+* {{msg-mw|filename-tooshort}}
+* {{msg-mw|illegal-filename}}
+* {{msg-mw|overwrite}}
+* {{msg-mw|verification-error}}
+* {{msg-mw|hookaborted}}
+* {{msg-mw|windows-nonascii-filename}}
+* {{msg-mw|filename-toolong}}
+* {{msg-mw|unknown-error}}',
+'file-too-large' => 'Used as error message when uploading a file.
+
+See also:
+* {{msg-mw|empty-file}}
+* {{msg-mw|filetype-missing}}
+* {{msg-mw|filetype-banned}}
+* {{msg-mw|filename-tooshort}}
+* {{msg-mw|illegal-filename}}
+* {{msg-mw|overwrite}}
+* {{msg-mw|verification-error}}
+* {{msg-mw|hookaborted}}
+* {{msg-mw|windows-nonascii-filename}}
+* {{msg-mw|filename-toolong}}
+* {{msg-mw|unknown-error}}',
+'filename-tooshort' => 'Used as error message when uploading a file.
+
+See also:
+* {{msg-mw|empty-file}}
+* {{msg-mw|file-too-large}}
+* {{msg-mw|filetype-missing}}
+* {{msg-mw|filetype-banned}}
+* {{msg-mw|illegal-filename}}
+* {{msg-mw|overwrite}}
+* {{msg-mw|verification-error}}
+* {{msg-mw|hookaborted}}
+* {{msg-mw|windows-nonascii-filename}}
+* {{msg-mw|filename-toolong}}
+* {{msg-mw|unknown-error}}',
+'filetype-banned' => 'Used as error message when uploading a file.
+
+See also:
+* {{msg-mw|empty-file}}
+* {{msg-mw|file-too-large}}
+* {{msg-mw|filetype-missing}}
+* {{msg-mw|filename-tooshort}}
+* {{msg-mw|illegal-filename}}
+* {{msg-mw|overwrite}}
+* {{msg-mw|verification-error}}
+* {{msg-mw|hookaborted}}
+* {{msg-mw|windows-nonascii-filename}}
+* {{msg-mw|filename-toolong}}
+* {{msg-mw|unknown-error}}',
+'verification-error' => 'Used as error message when uploading a file.
+
+See also:
+* {{msg-mw|empty-file}}
+* {{msg-mw|file-too-large}}
+* {{msg-mw|filetype-missing}}
+* {{msg-mw|filetype-banned}}
+* {{msg-mw|filename-tooshort}}
+* {{msg-mw|illegal-filename}}
+* {{msg-mw|overwrite}}
+* {{msg-mw|hookaborted}}
+* {{msg-mw|windows-nonascii-filename}}
+* {{msg-mw|filename-toolong}}
+* {{msg-mw|unknown-error}}',
+'hookaborted' => 'Used as error message when uploading a file.
+
+See also:
+* {{msg-mw|empty-file}}
+* {{msg-mw|file-too-large}}
+* {{msg-mw|filetype-missing}}
+* {{msg-mw|filetype-banned}}
+* {{msg-mw|filename-tooshort}}
+* {{msg-mw|illegal-filename}}
+* {{msg-mw|overwrite}}
+* {{msg-mw|verification-error}}
+* {{msg-mw|windows-nonascii-filename}}
+* {{msg-mw|filename-toolong}}
+* {{msg-mw|unknown-error}}',
+'illegal-filename' => 'Used as error message when uploading a file.
+
+See also:
+* {{msg-mw|empty-file}}
+* {{msg-mw|file-too-large}}
+* {{msg-mw|filetype-missing}}
+* {{msg-mw|filetype-banned}}
+* {{msg-mw|filename-tooshort}}
+* {{msg-mw|overwrite}}
+* {{msg-mw|verification-error}}
+* {{msg-mw|hookaborted}}
+* {{msg-mw|windows-nonascii-filename}}
+* {{msg-mw|filename-toolong}}
+* {{msg-mw|unknown-error}}',
+'overwrite' => 'Used as error message when uploading a file.
+
+See also:
+* {{msg-mw|empty-file}}
+* {{msg-mw|file-too-large}}
+* {{msg-mw|filetype-missing}}
+* {{msg-mw|filetype-banned}}
+* {{msg-mw|filename-tooshort}}
+* {{msg-mw|illegal-filename}}
+* {{msg-mw|verification-error}}
+* {{msg-mw|hookaborted}}
+* {{msg-mw|windows-nonascii-filename}}
+* {{msg-mw|filename-toolong}}
+* {{msg-mw|unknown-error}}',
+'unknown-error' => 'Used as error message when uploading a file and the error is unknown.
+
+See also:
+* {{msg-mw|empty-file}}
+* {{msg-mw|file-too-large}}
+* {{msg-mw|filetype-missing}}
+* {{msg-mw|filetype-banned}}
+* {{msg-mw|filename-tooshort}}
+* {{msg-mw|illegal-filename}}
+* {{msg-mw|overwrite}}
+* {{msg-mw|verification-error}}
+* {{msg-mw|hookaborted}}
+* {{msg-mw|windows-nonascii-filename}}
+* {{msg-mw|filename-toolong}}',
+'tmp-create-error' => 'Used as error message in UploadFromURL feature.
+
+See also:
+* {{msg-mw|http-invalid-url}}
+* {{msg-mw|upload-copy-upload-invalid-domain}}
+* {{msg-mw|tmp-write-error}}',
+'tmp-write-error' => 'Used as error message in UploadFromURL feature.
+
+See also:
+* {{msg-mw|http-invalid-url}}
+* {{msg-mw|upload-copy-upload-invalid-domain}}
+* {{msg-mw|tmp-create-error}}',
 'large-file' => 'Variables $1 and $2 have appropriate unit symbols already. See for example [[Mediawiki:size-kilobytes]].',
 'largefileserver' => 'Error message when uploading a file whose size is larger than the maximum allowed',
 'emptyfile' => 'Error message when trying to upload an empty file',
+'windows-nonascii-filename' => 'Used as error message when uploading a file.
+
+See also:
+* {{msg-mw|empty-file}}
+* {{msg-mw|file-too-large}}
+* {{msg-mw|filetype-missing}}
+* {{msg-mw|filetype-banned}}
+* {{msg-mw|filename-tooshort}}
+* {{msg-mw|illegal-filename}}
+* {{msg-mw|overwrite}}
+* {{msg-mw|verification-error}}
+* {{msg-mw|hookaborted}}
+* {{msg-mw|filename-toolong}}
+* {{msg-mw|unknown-error}}',
 'fileexists' => "{{doc-important|''thumb'' is a magic word. Leave it untranslated!}}",
 'filepageexists' => "{{doc-important|''thumb'' is a magic word. Leave it untranslated!}}
 Shown on [[Special:Upload]], $1 is link to the page. This message is displayed if a description page exists, but a file with the same name does not yet exists, and a user tries to upload a file with that name. In that case the description page is not changed, even if the uploading user specifies a description with the upload.",
@@ -2060,45 +3161,161 @@ Shown on [[Special:Upload]], $1 is link to the page. This message is displayed i
 'fileexists-forbidden' => "{{doc-important|''thumb'' and ''center'' are magic words. Leave it untranslated!}}",
 'fileexists-shared-forbidden' => "{{doc-important|''thumb'' and ''center'' are magic words. Leave it untranslated!}}
 Error message at [[Special:Upload]]",
+'file-exists-duplicate' => 'Used as warning in [[Special:Upload]].
+This message is followed by the gallery of the duplicate files.
+
+Parameters:
+* $1 - number of duplicate files',
+'file-deleted-duplicate' => 'Used in [[Special:Upload]. Parameters:
+* $1 - page title of the file',
+'uploadwarning' => 'Used as section header in [[Special:Upload]].',
+'uploadwarning-text' => 'Used in [[Special:Upload]].',
 'savefile' => 'When uploading a file',
 'uploadedimage' => 'This is the text of an entry in the [[Special:Log|upload log]] (and Recent Changes), after hour (and date, only in the Upload log) and user name. $1 is the name of the file uploaded.',
 'overwroteimage' => 'This is the text of an entry in the [[Special:Log|upload log]] (and Recent Changes), after hour (and date, only in the Upload log) and user name. $1 is the name of the file uploaded.',
-'uploaddisabled' => 'Title of the Special:Upload page when upload is disabled.',
+'uploaddisabled' => 'Title of the Special:Upload page when upload is disabled.
+
+See also:
+* {{msg-mw|Copyuploaddisabled}}',
+'copyuploaddisabled' => 'See also:
+* {{msg-mw|Uploaddisabled}}',
 'uploaddisabledtext' => 'This message can have parameter $1, which contains the name of the target file. See r22243 and [https://bugzilla.wikimedia.org/show_bug.cgi?id=8818 bug 8818].',
 'php-uploaddisabledtext' => 'This means that file uploading is disabled in PHP, not upload of PHP-files.',
-'uploadvirus' => 'Note displayed when uploaded file contains a virus',
+'uploadscripted' => 'Used as error message when uploading a file.
+
+See also:
+* {{msg-mw|zip-wrong-format}}
+* {{msg-mw|uploadjava}}
+* {{msg-mw|uploadvirus}}',
+'uploadvirus' => 'Error message displayed when uploaded file contains a virus
+
+See also:
+* {{msg-mw|uploadscripted}}
+* {{msg-mw|zip-wrong-format}}
+* {{msg-mw|uploadjava}}',
+'uploadjava' => 'Used as error message when uploading a file.
+
+See also:
+* {{msg-mw|uploadscripted}}
+* {{msg-mw|zip-wrong-format}}
+* {{msg-mw|uploadvirus}}',
 'upload-source' => 'Caption above a section of the [[Special:Upload]] page',
-'sourcefilename' => 'In [[Special:Upload]]',
-'sourceurl' => 'Caption for the upload-by-url feature at [[Special:Upload]]',
+'sourcefilename' => 'Used in [[Special:Upload]].
+
+See also:
+* {{msg-mw|Sourceurl|label}}
+* {{msg-mw|Upload source file}}
+* {{msg-mw|Upload source url}}
+* {{msg-mw|Upload-maxfilesize}}',
+'sourceurl' => 'Caption for the upload-by-url feature at [[Special:Upload]]
+
+See also:
+* {{msg-mw|Sourcefilename|label}}
+* {{msg-mw|Upload source file}}
+* {{msg-mw|Upload source url}}
+* {{msg-mw|Upload-maxfilesize}}',
 'destfilename' => 'In [[Special:Upload]]',
 'upload-maxfilesize' => 'Shows at [[Special:Upload]] the maximum file size that can be uploaded.
-
-$1 is the value in KB/MB/GB',
+* $1 - the value in KB/MB/GB
+See also:
+* {{msg-mw|Sourcefilename|label}}
+* {{msg-mw|Sourceurl|label}}
+* {{msg-mw|Upload source file}}
+* {{msg-mw|Upload source url}}',
 'upload-description' => 'Caption above a section of the [[Special:Upload]] page',
 'upload-options' => 'Caption above a section of the [[Special:Upload]] page',
 'watchthisupload' => 'In [[Special:Upload]]',
 'filewasdeleted' => 'This warning is shown when trying to upload a file that does not exist, but has previously been deleted.
 Parameters:
 * $1 is a link to the deletion log, with the text from {{msg|deletionlog}}.',
+'filename-bad-prefix' => 'Used as warning in [[Special:Upload]]. Parameters:
+* $1 - prefix
+See also:
+* {{msg-mw|fileexists}}
+* {{msg-mw|filepageexists}}
+* {{msg-mw|fileexists-extension}}
+* {{msg-mw|fileexists-thumbnail-yes}}
+* {{msg-mw|file-thumbnail-no}}
+* {{msg-mw|filewasdeleted}}',
 'filename-prefix-blacklist' => "{{optional}}
 Do not translate the file name prefixes before the hash mark (#). Leave all the wiki markup, including the spaces, as is. You can translate the text, including 'Leave this line exactly as it is'. The first line of this messages has one (1) leading space.",
-'upload-success-msg' => '$1 is the local file name after uploading
-$2 is the url the file was uploaded from, when using upload-by-url.',
-'upload-failure-msg' => '$1 is the specific error message
-$2 is the url the file tried to upload from, when using upload-by-url.',
-'upload-warning-msg' => '$1 is the url the file was uploaded from, when using upload-by-url
-$2 is the session key for the upload',
-
-'upload-proto-error-text' => '"Remote upload" is explained on [http://en.wikipedia.org/wiki/Uploading_and_downloading#Remote_upload Wikipedia].',
+'upload-success-subj' => 'Used as message subject which is posted on the user talk page.
+
+See also:
+* {{msg-mw|upload-success-subj|subject}}
+* {{msg-mw|upload-success-msg|message}}
+* {{msg-mw|upload-failure-subj|subject}}
+* {{msg-mw|upload-failure-msg|message}}',
+'upload-success-msg' => 'Used as message body which is posted on the user talk page. Parameters:
+* $1 - the local file name after uploading
+* $2 - the URL the file was uploaded from, when using upload-by-url
+See also:
+* {{msg-mw|upload-success-subj|subject}}
+* {{msg-mw|upload-success-msg|message}}
+* {{msg-mw|upload-failure-subj|subject}}
+* {{msg-mw|upload-failure-msg|message}}',
+'upload-failure-subj' => 'Used as message subject which is posted on the user talk page.
+
+I think this message should be translated as opposed to {{msg-mw|upload-success-subj}}.
+
+See also:
+* {{msg-mw|upload-success-subj|subject}}
+* {{msg-mw|upload-success-msg|message}}
+* {{msg-mw|upload-failure-subj|subject}}
+* {{msg-mw|upload-failure-msg|message}}',
+'upload-failure-msg' => 'Used as message body which is posted on the user talk page. Parameters:
+* $1 - the specific error message
+* $2 - the URL the file tried to upload from, when using upload-by-url.
+See also:
+* {{msg-mw|upload-success-subj|subject}}
+* {{msg-mw|upload-success-msg|message}}
+* {{msg-mw|upload-failure-subj|subject}}
+* {{msg-mw|upload-failure-msg|message}}',
+'upload-warning-subj' => 'Used as warning subject which is posted on the user talk page.
+
+See also:
+* {{msg-mw|upload-warning-subj|subject}}
+* {{msg-mw|upload-warning-msg|message}}',
+'upload-warning-msg' => 'Used as warning body which is posted on the user talk page. Parameters:
+* $1 is the URL the file was uploaded from, when using upload-by-url
+* $2 is the session key for the upload
+See also:
+* {{msg-mw|upload-warning-subj|subject}}
+* {{msg-mw|upload-warning-msg|message}}',
+
+'upload-proto-error' => 'See also:
+* {{msg-mw|Upload-proto-error|title}}
+* {{msg-mw|Upload-proto-error-text|text}}',
+'upload-proto-error-text' => '"Remote upload" is explained on [http://en.wikipedia.org/wiki/Uploading_and_downloading#Remote_upload Wikipedia].
+
+See also:
+* {{msg-mw|Upload-proto-error|title}}
+* {{msg-mw|Upload-proto-error-text|text}}',
 'upload-file-error' => 'Unused on core [http://svn.wikimedia.org/viewvc/mediawiki/trunk/phase3/includes/specials/SpecialUpload.php?r1=53161&r2=53282].
 
 Extensions making use of it:
 *ImportFreeImages
 *SemanticForms
-
-
+See also:
+* {{msg-mw|Upload-file-error|title}}
+* {{msg-mw|Upload-file-error-text|text}}
 {{Identical|Internal error}}',
-'upload-copy-upload-invalid-domain' => 'Error message shown if a user is trying to upload (i.e. copy) a file from a website that is not in $wgCopyUploadsDomains (if set).',
+'upload-file-error-text' => 'See also:
+* {{msg-mw|Upload-file-error|title}}
+* {{msg-mw|Upload-file-error-text|text}}',
+'upload-misc-error' => 'See also:
+* {{msg-mw|Upload-misc-error|title}}
+* {{msg-mw|Upload-misc-error-text|text}}',
+'upload-misc-error-text' => 'See also:
+* {{msg-mw|Upload-misc-error|title}}
+* {{msg-mw|Upload-misc-error-text|text}}',
+'upload-http-error' => '* $1 - error message',
+'upload-copy-upload-invalid-domain' => 'Error message shown if a user is trying to upload (i.e. copy) a file from a website that is not in $wgCopyUploadsDomains (if set).
+
+See also:
+* {{msg-mw|http-invalid-url}}
+* {{msg-mw|tmp-create-error}}
+* {{msg-mw|tmp-write-error}}',
 
 # File backend
 'backend-fail-stream' => 'Parameters:
@@ -2127,10 +3344,19 @@ Extensions making use of it:
 'backend-fail-move' => 'Parameters:
 * $1 is a file path
 * $2 is a file path.',
-'backend-fail-read' => 'Parameters:
-* $1 is a filename.',
+'backend-fail-opentemp' => 'Used as error message.
+{{Related|Backend-fail}}',
+'backend-fail-writetemp' => 'Used as error message.
+{{Related|Backend-fail}}',
+'backend-fail-closetemp' => 'Used as error message.
+{{Related|Backend-fail}}',
+'backend-fail-read' => 'Used as error message. Parameters:
+* $1 - filename
+{{Related|Backend-fail}}',
 'backend-fail-create' => 'Parameters:
 * $1 is a filename.',
+'backend-fail-maxsize' => '* $1 - destination storage path
+* $2 - max file size (in bytes)',
 'backend-fail-readonly' => 'A "[[:wikipedia:Front and back ends|backend]]" is a system or component that ordinary users don\'t interact with directly and don\'t need to know about, and that is responsible for a distinct task or service - for example, a storage back-end is a generic system for storing data which other applications can use. Possible alternatives for back-end are "system" or "service", or (depending on context and language) even leave it untranslated.',
 'backend-fail-synced' => 'A "[[:wikipedia:Front and back ends|backend]]" is a system or component that ordinary users don\'t interact with directly and don\'t need to know about, and that is responsible for a distinct task or service - for example, a storage back-end is a generic system for storing data which other applications can use. Possible alternatives for back-end are "system" or "service", or (depending on context and language) even leave it untranslated.',
 'backend-fail-connect' => 'A "[[:wikipedia:Front and back ends|backend]]" is a system or component that ordinary users don\'t interact with directly and don\'t need to know about, and that is responsible for a distinct task or service - for example, a storage back-end is a generic system for storing data which other applications can use. Possible alternatives for back-end are "system" or "service", or (depending on context and language) even leave it untranslated.',
@@ -2170,17 +3396,50 @@ A "[http://en.wikipedia.org/wiki/File_locking#Lock_files lock file]" signals by
 A "[http://en.wikipedia.org/wiki/File_locking#Lock_files lock file]" signals by its presence that some resource is locked.',
 'lockmanager-fail-releaselock' => 'Parameters:
 * $1 is a resource path (e.g. "mwstore://media-public/a/ab/file.jpg").',
-'lockmanager-fail-db-bucket' => 'Parameters:
-* $1 is a bucket name.',
+'lockmanager-fail-db-bucket' => 'The databases store what is locked by who. Parameters:
+* $1 is a bucket name. Any string used as a lock name maps to a "bucket", which is a basically a set of 1 or more database servers that must agree that a lock can be acquired.',
 'lockmanager-fail-db-release' => 'Parameters:
 * $1 is a database name.',
+'lockmanager-fail-svr-acquire' => '* $1 - server',
 'lockmanager-fail-svr-release' => 'Parameters:
 * $1 is a server name.',
 
 # ZipDirectoryReader
-'zip-unsupported' => "Perhaps translations of 'software' can be used instead of 'features' and 'understood' or 'handled' instead of 'supported'.",
+'zip-file-open-error' => 'Used as ZIP error message.
+
+See also:
+* {{msg-mw|Zip-wrong-format}}
+* {{msg-mw|Zip-bad}}
+* {{msg-mw|Zip-unsupported}}',
+'zip-wrong-format' => 'Used as ZIP error message.
+
+See also:
+* {{msg-mw|Zip-file-open-error}}
+* {{msg-mw|Zip-bad}}
+* {{msg-mw|Zip-unsupported}}',
+'zip-bad' => 'Used as ZIP error message.
+
+See also:
+* {{msg-mw|Zip-file-open-error}}
+* {{msg-mw|Zip-wrong-format}}
+* {{msg-mw|Zip-unsupported}}',
+'zip-unsupported' => "Used as ZIP error message.
+
+Perhaps translations of 'software' can be used instead of 'features' and 'understood' or 'handled' instead of 'supported'.
+
+See also:
+* {{msg-mw|Zip-file-open-error}}
+* {{msg-mw|Zip-wrong-format}}
+* {{msg-mw|Zip-bad}}",
 
 # Special:UploadStash
+'uploadstash' => 'Used as page title in [[Special:UploadStash]].',
+'uploadstash-summary' => 'Used as summary in [[Special:UploadStash]].',
+'uploadstash-clear' => 'Used as Submit button text in [[Special:UploadStash]].',
+'uploadstash-nofiles' => 'Used in [[Special:UploadStash]]; used when no files available in stash.',
+'uploadstash-badtoken' => 'Used as error message in [[Special:UploadStash]].',
+'uploadstash-errclear' => 'Used as error message in [[Special:UploadStash]].',
+'uploadstash-refresh' => 'Used as link text in [[Special:UploadStash]].',
 'invalid-chunk-offset' => 'Error that can happen if chunks get uploaded out of order.
 As a result of this error, clients can continue from an offset provided or restart the upload.
 Used on [[Special:UploadWizard]].',
@@ -2200,6 +3459,7 @@ Used on [[Special:UploadWizard]].',
 'img-auth-noread' => '[[mw:Manual:Image Authorization|Manual:Image Authorization]]: User does not have access to read file, $1 is the file',
 
 # HTTP errors
+'http-invalid-url' => '* $1 - URL',
 'http-invalid-scheme' => 'The message appears in the Mediawiki code as follows:
 
  if ( $this->parsedUrl[\'scheme\'] != \'http\' ) {
@@ -2209,11 +3469,74 @@ Used on [[Special:UploadWizard]].',
 Siebrand think this has to do with allowing MediaWiki to fetch remote URLs, and in that not allowing anything but "http://" request. So if this for example is "irc://" or "https://", $1 would be "irc" or "https" respectively.
 
 If \'scheme\' is difficult to translate, then you could use \'prefix\' instead.',
+'http-request-error' => 'Used as error message when executing HTTP request.
+
+See also:
+* {{msg-mw|Http-read-error}}
+* {{msg-mw|Http-host-unreachable|6}}
+* {{msg-mw|Http-timed-out|28}}',
+'http-read-error' => 'Used as error message when executing HTTP request.
+
+See also:
+* {{msg-mw|Http-request-error}}
+* {{msg-mw|Http-host-unreachable|6}}
+* {{msg-mw|Http-timed-out|28}}',
+'http-timed-out' => 'Used as error message when executing HTTP request.
+
+See also:
+* {{msg-mw|Http-request-error}}
+* {{msg-mw|Http-read-error}}
+* {{msg-mw|Http-host-unreachable|6}}',
+'http-curl-error' => 'Used as curl error message when the error is other than known messages.
+* $1 - error code; not URL
+Known messages are:
+* {{msg-mw|http-host-unreachable}}
+* {{msg-mw|http-timed-out}}',
+'http-host-unreachable' => 'Used as error message when executing HTTP request.
+
+See also:
+* {{msg-mw|Http-request-error}}
+* {{msg-mw|Http-read-error}}
+* {{msg-mw|Http-timed-out|28}}',
 'http-bad-status' => '$1 is an HTTP error code (e.g. 404), $2 is the HTTP error message (e.g. File Not Found)',
 
+# Some likely curl errors. More could be added from <http://curl.haxx.se/libcurl/c/libcurl-errors.html>
+'upload-curl-error6' => 'See also:
+* {{msg-mw|Upload-curl-error6|title}}
+* {{msg-mw|Upload-curl-error6-text|body}}',
+'upload-curl-error6-text' => 'See also:
+* {{msg-mw|Upload-curl-error6|title}}
+* {{msg-mw|Upload-curl-error6-text|body}}',
+'upload-curl-error28' => 'See also:
+* {{msg-mw|Upload-curl-error28|title}}
+* {{msg-mw|Upload-curl-error28-text|body}}',
+'upload-curl-error28-text' => 'See also:
+* {{msg-mw|Upload-curl-error28|title}}
+* {{msg-mw|Upload-curl-error28-text|body}}',
+
 'license' => 'This appears in the upload form for the license drop-down. The header in the file description page is now at {{msg-mw|License-header}}.',
+'license-header' => 'Used as section header in [[Special:Upload]].
+
+See also:
+* {{msg-mw|Filedesc}}
+* {{msg-mw|Filestatus}}
+* {{msg-mw|Filesource}}',
 'nolicense' => '{{Identical|None selected}}',
 'license-nopreview' => 'Error message when a certain license does not exist',
+'upload_source_url' => 'Used in [[Special:Upload]].
+
+See also:
+* {{msg-mw|Sourcefilename|label}}
+* {{msg-mw|Sourceurl|label}}
+* {{msg-mw|Upload source file}}
+* {{msg-mw|Upload-maxfilesize}}',
+'upload_source_file' => 'Used in [[Special:Upload]].
+
+See also:
+* {{msg-mw|Sourcefilename|label}}
+* {{msg-mw|Sourceurl|label}}
+* {{msg-mw|Upload source url}}
+* {{msg-mw|Upload-maxfilesize}}',
 
 # Special:ListFiles
 'listfiles-summary' => 'This message is displayed at the top of [[Special:ImageList]] to explain how to use that special page.',
@@ -2279,6 +3602,9 @@ Example: [[:Image:Addon-icn.png]]',
 * $1: limit. At the moment hardcoded at 100
 * $2: filename',
 'nolinkstoimage' => 'Displayed on image description pages, see for exampe [[:Image:Tournesol.png#filelinks]].',
+'morelinkstoimage' => '{{doc-important|Do not translate "Special:WhatLinksHere"}}
+Parameters:
+* $1 - page title',
 'linkstoimage-redirect' => 'Item in the "the following pages link to this file" section on a file page if the item is a redirect.
 * $1: an HTML link to the file
 * $2: the list of files that link to the redirect (may be empty)',
@@ -2290,13 +3616,33 @@ Example: [[:Image:Addon-icn.png]]',
 
 * $1 is the name of the shared repository. On Wikimedia sites, $1 is {{msg-mw|shared-repo-name-shared}}. The default value for $1 is {{msg-mw|shared-repo}}.
 
-{{doc-important|Do not customise this message. Just translate it.|Customisation should be done by local wikis.}}',
-'sharedupload-desc-there' => ':See also: {{msg-mw|Sharedupload}}',
-'sharedupload-desc-here' => ':See also: {{msg-mw|Sharedupload}}',
-'sharedupload-desc-edit' => ':See also: {{msg-mw|Sharedupload-desc-here}}
-:See also: {{msg-mw|Sharedupload-desc-create}}',
-'sharedupload-desc-create' => ':See also: {{msg-mw|Sharedupload-desc-here}}
-:See also: {{msg-mw|Sharedupload-desc-edit}}',
+{{doc-important|Do not customise this message. Just translate it.|Customisation should be done by local wikis.}}
+
+See also:
+* {{msg-mw|Sharedupload-desc-there}}
+* {{msg-mw|Sharedupload-desc-here}}
+* {{msg-mw|Sharedupload-desc-edit}}
+* {{msg-mw|Sharedupload-desc-create}}',
+'sharedupload-desc-there' => 'See also:
+* {{msg-mw|Sharedupload}}
+* {{msg-mw|Sharedupload-desc-here}}
+* {{msg-mw|Sharedupload-desc-edit}}
+* {{msg-mw|Sharedupload-desc-create}}',
+'sharedupload-desc-here' => 'See also:
+* {{msg-mw|Sharedupload}}
+* {{msg-mw|Sharedupload-desc-there}}
+* {{msg-mw|Sharedupload-desc-edit}}
+* {{msg-mw|Sharedupload-desc-create}}',
+'sharedupload-desc-edit' => 'See also:
+* {{msg-mw|Sharedupload}}
+* {{msg-mw|Sharedupload-desc-there}}
+* {{msg-mw|Sharedupload-desc-here}}
+* {{msg-mw|Sharedupload-desc-create}}',
+'sharedupload-desc-create' => 'See also:
+* {{msg-mw|Sharedupload}}
+* {{msg-mw|Sharedupload-desc-there}}
+* {{msg-mw|Sharedupload-desc-here}}
+* {{msg-mw|Sharedupload-desc-edit}}',
 'filepage-nofile' => "This message appears when visiting a File page for which there's no file, if the user cannot upload files, or file uploads are disabled. (Otherwise, see {{msg-mw|Filepage-nofile-link}})
 
 Filepage-nofile and Filepage-nofile-link message deprecate {{msg-mw|Noimage}}",
@@ -2340,7 +3686,14 @@ $1 is the name of the shared repository. On wikimedia sites, $1 is {{msg-mw|shar
 {{Identical|Revert}}',
 
 # File deletion
+'filedelete' => 'Used as page title. Parameters:
+* $1 - file title
+See also:
+* {{msg-mw|Filedelete-intro}}',
 'filedelete-legend' => '{{Identical|Delete}}',
+'filedelete-intro' => 'Used as introduction for FileDelete form.
+See also:
+* {{msg-mw|Filedelete|page title}}',
 'filedelete-intro-old' => 'Message displayed when you try to delete a version of a file.
 * $1 is the name of the media
 * $2 is a date
@@ -2350,10 +3703,13 @@ $1 is the name of the shared repository. On wikimedia sites, $1 is {{msg-mw|shar
 'filedelete-submit' => 'Delete button when deleting a file for admins
 
 {{Identical|Delete}}',
+'filedelete-success' => '* $1 - filename',
 'filedelete-success-old' => 'Message displayed when you succeed in deleting a version of a file.
 * $1 is the name of the media
 * $2 is a date
 * $3 is a hour',
+'filedelete-nofile' => '* $1 - filename',
+'filedelete-nofile-old' => '* $1 - filename',
 'filedelete-otherreason' => 'Message used when deleting a file. This is the description field for "Other/additional reason" for deletion.
 
 {{Identical|Other/additional reason}}',
@@ -2368,8 +3724,17 @@ $1 is the name of the shared repository. On wikimedia sites, $1 is {{msg-mw|shar
 'filedelete-maintenance-title' => 'Title of the error page when $wgUploadMaintenance is set to true.',
 
 # MIME search
-'mimesearch' => 'Title of [[Special:MIMESearch]].',
+'mimesearch' => 'Title of [[Special:MIMESearch]]. Also used as legend of the form.
+
+See also:
+* {{msg-mw|Mimetype|label for input box}}
+* {{msg-mw|Ilsubmit|Submit button text}}',
 'mimesearch-summary' => 'Text for [[Special:MIMESearch]]',
+'mimetype' => 'Used as label for input box in the MIMESearch form on [[Special:MIMESearch]].
+
+See also:
+* {{msg-mw|Mimesearch|page title}}
+* {{msg-mw|Ilsubmit|Submit button text}}',
 'download' => 'Direct download link in each line returned by [[Special:MIMESearch]]. Points to the actual file, rather than the image description page.
 {{Identical|Download}}',
 
@@ -2386,10 +3751,17 @@ $1 is the name of the shared repository. On wikimedia sites, $1 is {{msg-mw|shar
 # Random page
 'randompage' => 'Name of special page displayed in [[Special:SpecialPages]].
 
+See also:
+* {{msg-mw|Randompage}}
+* {{msg-mw|Accesskey-n-randompage}}
+* {{msg-mw|Tooltip-n-randompage}}
 {{Identical|Random page}}',
+'randompage-nopages' => '* $1 - list of namespaces
+* $2 - number of namespaces',
 
 # Random redirect
 'randomredirect' => 'Name of special page displayed in [[Special:SpecialPages]].',
+'randomredirect-nopages' => '* $1 - namespace name',
 
 # Statistics
 'statistics' => 'Name of special page displayed in [[Special:SpecialPages]].
@@ -2435,7 +3807,7 @@ Possible alternatives to the word 'content' are 'subject matter' or 'wiki subjec
 'doubleredirects' => 'Name of [[Special:DoubleRedirects]] displayed in [[Special:SpecialPages]]',
 'doubleredirectstext' => 'Shown on top of [[Special:Doubleredirects]]',
 'double-redirect-fixed-move' => 'This is the message in the log when the software (under the username {{msg|double-redirect-fixer}}) updates the redirects after a page move. See also {{msg|fix-double-redirects}}.',
-'double-redirect-fixed-maintenance' => 'This is the message in the log when the software (under the username {{msg|double-redirect-fixer}}) updates the redirects after running maintenance/fixDoubleRedirects.php. Compare with {{msg|double-redirect-fixed-move}}.',
+'double-redirect-fixed-maintenance' => 'This is the message in the log when the software (under the username {{msg-mw|double-redirect-fixer}}) updates the redirects after running maintenance/fixDoubleRedirects.php. Compare with {{msg-mw|double-redirect-fixed-move}}.',
 'double-redirect-fixer' => "This is the '''username''' of the user who updates the double redirects after a page move. A user is created with this username, so it is perhaps better to not change this message too often. See also {{msg|double-redirect-fixed-move}} and {{msg|fix-double-redirects}}.",
 
 'brokenredirects' => 'Name of [[Special:BrokenRedirects]] displayed in [[Special:SpecialPages]]',
@@ -2518,27 +3890,61 @@ $1 is a page title",
 'ancientpages' => 'The page title of [[Special:Ancientpages]]. [[mw:Manual:Interface/Special pages title|mw manual]]',
 'move' => 'Name of Move tab. Should be in the imperative mood.
 
+See also:
+* {{msg-mw|Move}}
+* {{msg-mw|Accesskey-ca-move}}
+* {{msg-mw|Tooltip-ca-move}}
 {{Identical|Move}}',
 'movethispage' => '{{Identical|Move this page}}',
 'unusedimagestext' => 'Header message of [[Special:UnusedFiles]]',
+'notargettitle' => 'Used as title of error message.
+
+See also:
+* {{msg-mw|Notargettitle|title}}
+* {{msg-mw|Notargettext|text}}',
+'notargettext' => 'Used as error message in [[Special:MovePage]].
+
+See also:
+* {{msg-mw|Notargettitle|title}}
+* {{msg-mw|Notargettext|text}}',
 'nopagetitle' => 'Used as title of [[Special:MovePage]], when the oldtitle does not exist.
 
-The text is {{msg-mw|nopagetext}}.',
+The text is {{msg-mw|nopagetext}}.
+
+See also:
+* {{msg-mw|Nopagetitle|title}}
+* {{msg-mw|Nopagetext|text}}',
 'nopagetext' => 'Used as text on special pages like [[Special:MovePage]] (when the oldtitle does not exist) or [[Special:PermaLink]].
 
-The title is {{msg-mw|nopagetitle}}.',
-'pager-newer-n' => "This is part of the navigation message on the top and bottom of Special pages which are lists of things in date order, e.g. the User's contributions page. It is passed as the second argument of {{msg-mw|Viewprevnext}}. $1 is the number of items shown per page.",
+The title is {{msg-mw|nopagetitle}}.
+
+See also:
+* {{msg-mw|Nopagetitle|title}}
+* {{msg-mw|Nopagetext|text}}',
+'pager-newer-n' => "This is part of the navigation message on the top and bottom of Special pages which are lists of things in date order, e.g. the User's contributions page. It is passed as the second argument of {{msg-mw|Viewprevnext}}. $1 is the number of items shown per page.
+{{Identical|Newer}}",
 'pager-older-n' => "This is part of the navigation message on the top and bottom of Special pages which are lists of things in date order, e.g. the User's contributions page. It is passed as the first argument of {{msg-mw|Viewprevnext}}. $1 is the number of items shown per page.",
 'suppress' => '{{Identical|Oversight}}',
 'querypage-disabled' => "On special pages that use expensive database queries but are not cacheable, this message is displayed when 'miser mode' is on (i.e. no expensive queries allowed).",
 
 # Book sources
-'booksources' => 'Name of special page displayed in [[Special:SpecialPages]]',
+'booksources' => 'Name of special page displayed in [[Special:SpecialPages]]
+
+See also:
+* {{msg-mw|Booksources|title}}
+* {{msg-mw|Booksources-text|text}}',
 'booksources-search-legend' => 'Box heading on [[Special:BookSources|book sources]] special page. The box is for searching for places where a particular book can be bought or viewed.',
 'booksources-isbn' => '{{optional}}',
 'booksources-go' => 'Name of button in [[Special:BookSources]]
 
 {{Identical|Go}}',
+'booksources-text' => 'Used in [[Special:BookSources/1]].
+
+This message is followed by a list of links to other sites.
+
+See also:
+* {{msg-mw|Booksources|title}}
+* {{msg-mw|Booksources-text|text}}',
 'booksources-invalid-isbn' => 'This message is displayed after an invalid ISBN is entered on [[Special:Booksources]].',
 
 # Special:Log
@@ -2584,11 +3990,12 @@ Title of [[Special:Log]].',
 
 {{Identical|Go}}',
 'allpagesprefix' => "Used for the label of the input box of [[Special:PrefixIndex]]. On this page you can either write 'Name of namespace:string from which to begin display in alphabetical order' in the top box, or you can choose a namespace in the bottom box and put 'string from which to begin display in alphabetical order' in the top box. The result will be the same.",
+'allpages-bad-ns' => '* $1 - namespace name',
 'allpages-hide-redirects' => 'Label for a checkbox. If the checkbox is checked redirects will not be shown in the list. Used in [[Special:PrefixIndex]] and [[Special:Allpages]].',
 
 # SpecialCachedPage
 'cachedspecial-viewing-cached-ttl' => 'Message notifying they are watching a cached page. $1 is a duration (ie "1 hour and 30 minutes")',
-'cachedspecial-viewing-cached-ts' => 'Message notifying they are watching a cached page.',
+'cachedspecial-viewing-cached-ts' => 'Message notifying they are watching a cached page. This is a message displayed on special pages (contaning lists of pages with certain properties) that are served from the cache, as opposed to having been compiled run-time. This means that the displayed data may differ from the current situation.',
 'cachedspecial-refresh-now' => 'Link text pointing to the most recent version of the page.',
 
 # Special:Categories
@@ -2640,18 +4047,33 @@ You can apparently use 'URL' instead of 'hostname'.",
 
 # Special:ActiveUsers
 'activeusers' => 'Title of [[Special:ActiveUsers]]',
-'activeusers-count' => "Used in [[Special:ActiveUsers]] to show the active user's recent edit count in brackets ([]).
-* $1 is the number of recent edits
+'activeusers-intro' => 'Used as introduction in [[Special:ActiveUsers]]. Parameters:
+* $1 - number of days (<code>$wgActiveUserDays</code>)',
+'activeusers-count' => "Used in [[Special:ActiveUsers]] to show the active user's recent action count in brackets ([]).
+* $1 is the number of recent actions
 * $2 is the user's name for use with GENDER (optional)
 * $3 is the maximum number of days of the RecentChangesList",
-'activeusers-from' => 'identical with {{msg-mw|listusersfrom}}',
-'activeusers-noresult' => 'identical with {{msg-mw|listusers-noresult}}',
+'activeusers-from' => 'Used as label for checkbox in the form on [[Special:ActiveUsers]].
 
-# Special:Log/newusers
-'newuserlogpage' => '{{doc-logpage}}
+identical with {{msg-mw|listusersfrom}}
 
-Part of the "Newuserlog" extension. It is both the title of [[Special:Log/newusers]] and the link you can see in [[Special:RecentChanges]].',
-'newuserlogpagetext' => 'Part of the "Newuserlog" extension. It is the description you can see on [[Special:Log/newusers]].',
+See also:
+* {{msg-mw|activeusers|legend for the form}}
+* {{msg-mw|activeusers-hidebots|label for checkbox}}
+* {{msg-mw|activeusers-hidesysops|label for checkbox}}',
+'activeusers-hidebots' => 'Used as label for checkbox in the form on [[Special:ActiveUsers]].
+
+See also:
+* {{msg-mw|activeusers|legend for the form}}
+* {{msg-mw|activeusers-from|label for input box}}
+* {{msg-mw|activeusers-hidesysops|label for checkbox}}',
+'activeusers-hidesysops' => 'Used as label for checkbox in the form on [[Special:ActiveUsers]].
+
+See also:
+* {{msg-mw|activeusers|legend for the form}}
+* {{msg-mw|activeusers-from|label for input box}}
+* {{msg-mw|activeusers-hidebots|label for checkbox}}',
+'activeusers-noresult' => 'identical with {{msg-mw|listusers-noresult}}',
 
 # Special:ListGroupRights
 'listgrouprights' => 'The name of the special page [[Special:ListGroupRights]].',
@@ -2679,20 +4101,33 @@ See also {{msg|listgrouprights-removegroup}}.',
 * $2 is the number of group names in $1.
 See also {{msg|listgrouprights-addgroup}}.',
 'listgrouprights-addgroup-all' => 'Used on [[Special:ListGroupRights]].
-
-See also {{msg-mw|listgrouprights-removegroup-all}}.',
+{{Related|Listgrouprights}}',
 'listgrouprights-removegroup-all' => 'Used on [[Special:ListGroupRights]].
-
-See also {{msg-mw|listgrouprights-addgroup-all}}.',
+{{Related|Listgrouprights}}',
 'listgrouprights-addgroup-self' => 'This is an individual right for groups, used on [[Special:ListGroupRights]].
 * $1 are the group names.
 * $2 is the number of group names in $1.',
 'listgrouprights-removegroup-self' => 'This is an individual right for groups, used on [[Special:ListGroupRights]].
 * $1 are the group names.
 * $2 is the number of group names in $1.',
+'listgrouprights-addgroup-self-all' => 'Used on [[Special:ListGroupRights]].
+{{Related|Listgrouprights}}',
+'listgrouprights-removegroup-self-all' => 'Used on [[Special:ListGroupRights]].
+{{Related|Listgrouprights}}',
 
 # E-mail user
-'emailuser' => 'Link in the sidebar to send an e-mail to a user.',
+'mailnologin' => 'Used in [[Special:EmailUser]].
+
+Used as title of the error message {{msg-mw|Mailnologintext}}.',
+'mailnologintext' => 'Used as error message in [[Special:EmailUser]].
+
+The title of this error message is {{msg-mw|Mailnologin}}.',
+'emailuser' => 'Link in the sidebar to send an e-mail to a user.
+
+See also:
+* {{msg-mw|Emailuser}}
+* {{msg-mw|Accesskey-t-emailuser}}
+* {{msg-mw|Tooltip-t-emailuser}}',
 'emailuser-title-target' => 'Title of [[Special:EmailUser|special page]] when a user was given to e-mail. Parameters:
 * $1 is a plain text username, used for GENDER.',
 'emailuser-title-notarget' => 'Title of [[Special:EmailUser|special page]] when no user given to e-mail yet',
@@ -2703,6 +4138,9 @@ Special:EmailUser appears when you click on the link "E-mail this user" in the s
 'defemailsubject' => 'The default subject of EmailUser emails. Parameters:
 * $1 is the username of the user sending the email and can be used for GENDER.',
 'usermaildisabled' => 'Caption for an error message ({{msg-mw|Usermaildisabledtext}}) shown when the user-to-user e-mail feature is disabled on the wiki (see [[mw:Manual:$wgEnableEmail]], [[mw:Manual:$wgEnableUserEmail]]).',
+'usermaildisabledtext' => 'Used as error message in [[Special:EmailUser]].
+
+The title for this error message is {{msg-mw|Usermaildisabled}}.',
 'noemailtitle' => 'The title of the message that appears instead of Special:EmailUser after clicking the "E-mail this user" link in the sidebar, if no e-mail can be sent to the user.',
 'noemailtext' => 'The text of the message that appears in [[Special:EmailUser]] after clicking the "E-mail this user" link in the sidebar, if no e-mail can be sent to the user because he has not specified or not confirmed an e-mail address.',
 'nowikiemailtext' => 'This is an error message used in [[Special:Emailuser]] when called with a target user not consenting to be an e-mail recipient.',
@@ -2746,6 +4184,10 @@ This is a button text used in [[Special:Emailuser]] when called without a (valid
 'watchlist' => '{{Identical|My watchlist}}',
 'mywatchlist' => 'Link at the upper right corner of the screen.
 
+See also:
+* {{msg-mw|Mywatchlist}}
+* {{msg-mw|Accesskey-pt-watchlist}}
+* {{msg-mw|Tooltip-pt-watchlist}}
 {{Identical|My watchlist}}',
 'watchlistfor2' => 'Subtitle on [[Special:Watchlist]].
 
@@ -2756,43 +4198,134 @@ This is a button text used in [[Special:Emailuser]] when called without a (valid
 'watchlistanontext' => '* $1 is a link to [[Special:UserLogin]] with {{msg-mw|loginreqlink}} as link description',
 'watchnologin' => '{{Identical|Not logged in}}',
 'addwatch' => 'Link to a dialog box, displayed at the end of the list of categories at the foot of each page.',
-'addedwatchtext' => 'Explanation shown when clicking on the {{msg|watch}} tab. See also {{msg|addedwatch}}.',
+'addedwatchtext' => 'Explanation shown when clicking on the {{msg-mw|watch}} tab.
+
+See also {{msg-mw|addedwatch}}.',
 'removedwatchtext' => "After a page has been removed from a user's watchlist by clicking the {{msg|unwatch}} tab at the top of an article, this message appears just below the title of the article. $1 is the title of the article. See also {{msg|removedwatch}} and {{msg|addedwatchtext}}.",
-'watch' => 'Name of the Watch tab. Should be in the imperative mood.',
-'watchthispage' => '{{Identical|Watch this page}}',
-'unwatch' => 'Label of "Unwatch" tab.',
+'watch' => '{{doc-actionlink}}
+Name of the Watch tab. Should be in the imperative mood.
+
+See also:
+* {{msg-mw|Watch}}
+* {{msg-mw|Accesskey-ca-watch}}
+* {{msg-mw|Tooltip-ca-watch}}',
+'watchthispage' => 'Used as link text.
+
+See also:
+* {{msg-mw|Unwatchthispage|link text}}
+* {{msg-mw|Notanarticle|error message}}
+{{Identical|Watch this page}}',
+'unwatch' => '{{doc-actionlink}}
+Label of "Unwatch" tab.
+
+See also:
+* {{msg-mw|Unwatch}}
+* {{msg-mw|Accesskey-ca-unwatch}}
+* {{msg-mw|Tooltip-ca-unwatch}}',
+'unwatchthispage' => 'Used as link text.
+
+See also:
+* {{msg-mw|Watchthispage|link text}}
+* {{msg-mw|Notanarticle|error message}}',
 'notanarticle' => "A 'content page' is a page that forms part of the purpose of the wiki. It includes the main page and pages in the main namespace and any other namespaces that are included when the wiki is customised. For example on Wikimedia Commons 'content pages' include pages in the file and category namespaces. On Wikinews 'content pages' include pages in the Portal namespace. For technical definition of 'content namespaces' see [//www.mediawiki.org/wiki/Manual:Using_custom_namespaces#Content_namespaces Mediawiki].
 
 Possible alternatives to the word 'content' are 'subject matter' or 'wiki subject' or 'wiki purpose'.
 
 {{Identical|Content page}}",
-'watchlist-details' => 'Message on [[Special:Watchlist]]. This is paired with the message {{msg-mw|Nowatchlist}} which appears instead of Watchlist-details when $1 is 0.',
+'notvisiblerev' => 'Used as error message when rolling back.
+
+See also:
+* {{msg-mw|Cantrollback}}',
+'watchnochange' => 'Used in [[Special:Watchlist]] if there is nothing to show.',
+'watchlist-details' => 'Message on [[Special:Watchlist]]. Parameters:
+* $1 - number of pages in your watchlist
+This is paired with the message {{msg-mw|Nowatchlist}} which appears instead of Watchlist-details when $1 is 0.
+
+See also:
+* {{msg-mw|Watchlist-options|fieldset}}
+* {{msg-mw|Wlheader-enotif|watchlist header}}
+* {{msg-mw|enotif reset|Submit button text}}',
+'wlheader-enotif' => 'Used in [[Special:Watchlist]].
+
+See also:
+* {{msg-mw|Watchlist-options|fieldset}}
+* {{msg-mw|Watchlist-details|watchlist header}}
+* {{msg-mw|enotif reset|Submit button text}}',
 'wlheader-showupdated' => 'This message shows up near top of users watchlist page.',
+'watchmethod-recent' => 'See also:
+* {{msg-mw|Watchmethod-list}}',
+'watchmethod-list' => 'See also:
+* {{msg-mw|Watchmethod-recent}}',
+'watchlistcontains' => '* $1 - number of pages in your watchlist',
 'wlnote' => 'Used on [[Special:Watchlist]] when the maximum number of days is specified.
 Similar to {{msg-mw|rcnote}} which is used on [[Special:RecentChanges]].
 * $1 is the number of changes shown,
 * $2 is the number of hours for which the changes are shown,
 * $3 is a date alone,
 * $4 is a time alone.',
-'wlshowlast' => "Appears on [[Special:Watchlist]]. Variable $1 gives a choice of different numbers of hours, $2 gives a choice of different numbers of days and $3 is '{{int:watchlistall2}}' ([[Mediawiki:watchlistall2/{{SUBPAGENAME}}]]). Clicking on your choice changes the list of changes you see (without changing the default in my preferences).",
-'watchlist-options' => 'Legend of the fieldset of [[Special:Watchlist]]',
+'wlshowlast' => 'Appears on [[Special:Watchlist]]. Parameters:
+* $1 - a choice of different numbers of hours ("1 | 2 | 6 | 12")
+* $2 - a choice of different numbers of days ("1 | 3 | 7")
+* $3 - {{msg-mw|watchlistall2}}
+Clicking on your choice changes the list of changes you see (without changing the default in my preferences).',
+'watchlist-options' => 'Legend of the fieldset of [[Special:Watchlist]]
+
+See also:
+* {{msg-mw|Watchlist-details|watchlist header}}
+* {{msg-mw|Wlheader-enotif|watchlist header}}
+* {{msg-mw|enotif reset|Submit button text}}',
 
 # Displayed when you click the "watch" button and it is in the process of watching
 'watching' => 'Text displayed when clicked on the watch tab: [[MediaWiki:Watch/{{SUBPAGENAME}}|{{int:watch}}]]. It means the wiki is adding that page to your watchlist.',
 'unwatching' => 'Text displayed when clicked on the unwatch tab: [[MediaWiki:Unwatch/{{SUBPAGENAME}}|{{int:unwatch}}]]. It means the wiki is removing that page from your watchlist.',
-'watcherrortext' => 'When a user clicked the watch/unwatch tab and the action did not succeed, this message is displayed. See also {{msg|addedwatchtext}}. and {{msg|addedwatchtext}}. This message is used raw and should not contain wikitext.',
+'watcherrortext' => 'When a user clicked the watch/unwatch tab and the action did not succeed, this message is displayed.
+
+This message is used raw and should not contain wikitext.
+
+See also:
+* {{msg-mw|addedwatchtext}}
+* {{msg-mw|addedwatchtext}}',
+
+'enotif_reset' => "Used in [[Special:Watchlist]].
+
+This should be translated as \"Mark all pages '''as''' visited\".
 
-'enotif_reset' => "This should be translated as \"Mark all pages '''as''' visited\".",
+See also:
+* {{msg-mw|Watchlist-options|fieldset}}
+* {{msg-mw|Watchlist-details|watchlist header}}
+* {{msg-mw|Wlheader-enotif|watchlist header}}",
 'enotif_impersonal_salutation' => 'Used for impersonal e-mail notifications, suitable for bulk mailing.',
-'enotif_subject_deleted' => 'Email notification subject for deleted pages, $1 is page title, $2 is page editor.',
-'enotif_subject_created' => 'Email notification subject for new pages, $1 is page title, $2 is page editor.',
-'enotif_subject_moved' => 'Email notification subject for pages that get moved, $1 is page title, $2 is page editor.',
-'enotif_subject_restored' => 'Email notification subject for pages that get restored, $1 is page title, $2 is page editor.',
-'enotif_subject_changed' => 'Email notification subject for pages that get changed, $1 is page title, $2 is page editor.',
-'enotif_body_intro_deleted' => 'Email notification body intro text for deleted pages, $1 is the page title, $2 is the page editor, $3 is page url.',
-'enotif_body_intro_created' => 'Email notification body intro text for new pages, $1 is the page title, $2 is the page editor, $3 is page url.',
-'enotif_body_intro_moved' => 'Email notification body intro for pages that get moved, $1 is the page title, $2 is the page editor, $3 is page url.',
-'enotif_body_intro_restored' => 'Email notification body intro for pages that get restored, $1 is the page title, $2 is the page editor, $3 is page url.',
+'enotif_subject_deleted' => 'Email notification subject for deleted pages,
+* $1 - page title
+* $2 - page editor',
+'enotif_subject_created' => 'Email notification subject for new pages,
+* $1 - page title
+* $2 - page editor',
+'enotif_subject_moved' => 'Email notification subject for pages that get moved,
+* $1 - page title
+* $2 - page editor',
+'enotif_subject_restored' => 'Email notification subject for pages that get restored,
+* $1 - page title
+* $2 - page editor',
+'enotif_subject_changed' => 'Email notification subject for pages that get changed.
+* $1 - page title
+* $2 - page editor',
+'enotif_body_intro_deleted' => 'Email notification body intro text for deleted pages.
+* $1 - the page title
+* $2 - the page editor
+* $3 - page URL',
+'enotif_body_intro_created' => 'Email notification body intro text for new pages.
+* $1 - the page title
+* $2 - the page editor
+* $3 - page URL',
+'enotif_body_intro_moved' => 'Email notification body intro for pages that get moved.
+* $1 - the page title
+* $2 - the page editor
+* $3 - page URL',
+'enotif_body_intro_restored' => 'Email notification body intro for pages that get restored.
+* $1 - the page title
+* $2 - the page editor
+* $3 - page URL',
 'enotif_body_intro_changed' => 'Email notification body intro for pages that get changed, $1 is the page title, $2 is the page editor, $3 is page url.',
 'enotif_lastvisited' => '$1 is a URL address.',
 'enotif_lastdiff' => 'E-mail notification text to the latest page differences. Parameters:
@@ -2806,7 +4339,7 @@ Similar to {{msg-mw|rcnote}} which is used on [[Special:RecentChanges]].
 **{{msg-mw|enotif body intro deleted}}
 **{{msg-mw|enotif body intro created}}
 **{{msg-mw|enotif body intro moved}}
-**{{msg-mw|enotif body intro restored}} 
+**{{msg-mw|enotif body intro restored}}
 **{{msg-mw|enotif body intro changed}} (for all the other cases).
 *$NEWPAGE consists of either
 **if the page is new (in older releases), {{msg-mw|enotif newpagetext}}
@@ -2815,6 +4348,7 @@ Similar to {{msg-mw|rcnote}} which is used on [[Special:RecentChanges]].
 ***a newline
 ***{{msg-mw|enotif lastvisited}}
 *$PAGEEDITOR_EMAIL and $PAGEEDITOR_WIKI are links respectively to the e-mail user special page and user page for the user who performed the action.
+*$PAGEEDITOR is the username of the user who performed the action.
 
 The subject of the e-mail is one of the following messages:
 *{{msg-mw|enotif subject deleted}}
@@ -2822,6 +4356,14 @@ The subject of the e-mail is one of the following messages:
 *{{msg-mw|enotif subject moved}}
 *{{msg-mw|enotif subject restored}}
 *{{msg-mw|enotif subject changed}}',
+'created' => '{{Optional}}
+Possible value for $CHANGEDORCREATED in the following messages:
+* {{msg-mw|enotif_subject}}
+* {{msg-mw|enotif_body}}',
+'changed' => '{{Optional}}
+Possible value for $CHANGEDORCREATED in the following messages:
+* {{msg|enotif_subject}}
+* {{msg|enotif_body}}',
 
 # Delete
 'confirm' => 'Submit button text for protection confirmation
@@ -2837,7 +4379,14 @@ $1 = the name of the page',
 'historywarning' => 'Warning when about to delete a page that has history.
 $1 is the <b>approximate</b> number of revisions that the page has, the message should not claim to give an exact count.',
 'confirmdeletetext' => 'Introduction shown when deleting a page.',
-'actioncomplete' => 'Used in several situations, for example when a page has been deleted.',
+'actioncomplete' => 'Used in several situations, for example when a page has been deleted.
+
+See also:
+* {{msg-mw|Actionfailed|page title}}',
+'actionfailed' => 'Used as page title when the submit operation failed, in [[Special:RevisionDelete]].
+
+See also:
+* {{msg-mw|Actioncomplete|page title}}',
 'deletedtext' => 'Parameters:
 * $1 is a page that was deleted
 * $2 is {{msg-mw|deletionlog}}',
@@ -2846,8 +4395,10 @@ The name of the deletion log. Used as heading on [[Special:Log/delete]] and in t
 
 {{Identical|Deletion log}}',
 'dellogpagetext' => 'Text in [[Special:Log/delete]].',
-'deletionlog' => 'This message is used to link to the deletion log as parameter $1 of {{msg|Filewasdeleted}}, as parameter $2 of {{msg|deletedtext}}, and in log lines on [[Special:DeletedContributions]].
-
+'deletionlog' => 'This message is used to link to the deletion log:
+* Used as parameter $1 of {{msg-mw|Filewasdeleted}}
+* Used as parameter $2 of {{msg-mw|deletedtext}}
+* Used in log lines on [[Special:DeletedContributions]].
 {{Identical|Deletion log}}',
 'reverted' => '{{Identical|Revert}}',
 'deletecomment' => '{{Identical|Reason}}',
@@ -2857,25 +4408,46 @@ The name of the deletion log. Used as heading on [[Special:Log/delete]] and in t
 <pre>* Group
 ** Common delete reason
 ** ...</pre>',
-'delete-edit-reasonlist' => 'Shown beneath the page deletion form on the right side. It is a link to [[MediaWiki:Deletereason-dropdown]]. See also {{msg|Ipb-edit-dropdown}} and {{msg|Protect-edit-reasonlist}}.
+'delete-edit-reasonlist' => 'Shown beneath the page deletion form on the right side. It is a link to {{msg-mw|Deletereason-dropdown|notext=1}}.
 
+See also:
+* {{msg-mw|Ipb-edit-dropdown}}
+* {{msg-mw|Protect-edit-reasonlist}}.
 {{Identical|Edit delete reasons}}',
+'delete-toobig' => 'Parameters:
+* $1 - the upper limit of number of revisions
+See also:
+* {{msg-mw|Delete-warning-toobig}}',
+'delete-warning-toobig' => 'Parameters:
+* $1 - the upper limit of number of revisions
+See also:
+* {{msg-mw|Delete-toobig}}',
 
 # Rollback
 'rollback' => '{{Identical|Rollback}}',
 'rollback_short' => '{{Identical|Rollback}}',
 'rollbacklink' => '{{Identical|Rollback}}
-This link text appears on the recent changes page to users who have the "rollback" right.  It is also effectively a submit button; when clicked it performs the rollback without going to a dialog box first.
-This message has a tooltip {{msg-mw|tooltip-rollback}}',
-'rollbacklinkcount' => 'Text of the rollback link showing the number of edits to be rolled back. This link is also effectively a submit button; when clicked it performs the rollback without going to a dialog box first.  See also {{msg-mw|rollbacklink}}.
+This link text appears on the recent changes page to users who have the "rollback" right.
+This message has a tooltip {{msg-mw|tooltip-rollback}}
+
+{{Doc-actionlink}}',
+'rollbacklinkcount' => 'Text of the rollback link showing the number of edits to be rolled back. See also {{msg-mw|rollbacklink}}.
 * $1: the number of edits that will be rollbacked. If $1 is over the value of $wgShowRollbackEditCount (default: 10) {{msg-mw|rollbacklinkcount-morethan}} is used.
 
-The rollback link is displayed with a tooltip {{msg-mw|Tooltip-rollback}}',
+The rollback link is displayed with a tooltip {{msg-mw|Tooltip-rollback}}
+
+{{Doc-actionlink}}',
 'rollbacklinkcount-morethan' => 'Text of the rollback link when a greater number of edits is to be rolled back. See also {{msg-mw|rollbacklink}}.
 
-When the number of edits rolled back is smaller than [[mw:Manual:$wgShowRollbackEditCount|$wgShowRollbackEditCount]], {{msg-mw|rollbacklinkcount}} is used instead.',
+When the number of edits rolled back is smaller than [[mw:Manual:$wgShowRollbackEditCount|$wgShowRollbackEditCount]], {{msg-mw|rollbacklinkcount}} is used instead.
+
+{{Doc-actionlink}}',
 'rollbackfailed' => '{{Identical|Rollback}}',
-'cantrollback' => '{{Identical|Revert}}
+'cantrollback' => 'Used as error message when rolling back.
+
+See also:
+* {{msg-mw|Notvisiblerev}}
+{{Identical|Revert}}
 {{Identical|Rollback}}',
 'alreadyrolled' => "Appear when there's rollback and/or edit collision.
 * $1: the page to be rollbacked
@@ -2896,12 +4468,19 @@ In other cases the message {{msg-mw|revertpage}} is used.',
 {{Identical|Revert}}
 {{Identical|Rollback}}',
 
+# Edit tokens
+'sessionfailure-title' => 'Used as title of the error message {{msg-mw|Sessionfailure}}.',
+'sessionfailure' => 'Used as error message.
+
+The title for this error message is {{msg-mw|Sessionfailure-title}}.',
+
 # Protect
 'protectlogpage' => '{{doc-logpage}}
 Title of [[Special:Log/protect]].',
 'protectlogtext' => 'Text in [[Special:Log/protect]].',
 'protectedarticle' => 'Text describing an action on [[Special:Log]]. $1 is a page title.',
 'modifiedarticleprotection' => 'Text describing an action on [[Special:Log]]. $1 is a page title.',
+'unprotectedarticle' => 'Used as action in the log.',
 'movedarticleprotection' => 'This is a log entry. It appears in the log if a protected page is renamed.
 
 Example:
@@ -2911,12 +4490,27 @@ Example:
 'prot_1movedto2' => 'Message description: [[mw:Manual:Interface/1movedto2]]',
 'protect-badnamespace-title' => 'Title of error page when trying to access action=protect on a non-protectable namespace (currently this only for the MediaWiki: namespace).',
 'protect-badnamespace-text' => 'Content of the error page that goes with {{msg-mw|protect-badnamespace-title}}.',
+'protect-norestrictiontypes-text' => "Content of the error page in case there aren't any restriction types (like edit or create) available.",
+'protect-norestrictiontypes-title' => "Page title in case there aren't any restriction types (like edit or create) available ($1 represents the page title).",
 'protect-legend' => 'Legend of the fieldset around the input form of the protection form.',
 'protectcomment' => '{{Identical|Reason}}',
 'protectexpiry' => '{{Identical|Expires}}',
+'protect_expiry_invalid' => 'Used as error message about the Protection Form.
+
+See also:
+* {{msg-mw|Protect expiry old}}',
+'protect_expiry_old' => 'Used as error message about the Protection Form.
+
+See also:
+* {{msg-mw|Protect expiry invalid}}',
 'protect-unchain-permissions' => 'This message is a label for a checkbox displayed in the "protect" form just below the first selector (generally the "edit" protection). If the checkbox is checked (default) other selectors will be locked and have the same value as the first selector, otherwise other selectors are editable by the user.
 This message was something like "unlock move protection" in the past.',
 'protect-text' => 'Intro of the protection interface. See [[meta:Protect]] for more information.',
+'protect-locked-blocked' => '* $1 - page title',
+'protect-locked-dblock' => '* $1 - page title',
+'protect-locked-access' => '* $1 - page title',
+'protect-cascadeon' => 'Used in Protection form.
+* $1 - number of cascade source pages',
 'protect-default' => '{{Identical|Default}}',
 'protect-fallback' => 'This message is used as an option in the protection form on wikis were extra protection levels have been configured.',
 'protect-level-autoconfirmed' => 'Used as protect level.
@@ -2925,6 +4519,11 @@ See example: [http://translatewiki.net/w/i.php?title=Main_Page&action=info]',
 'protect-level-sysop' => 'Used as protect level.
 
 See example: [http://translatewiki.net/w/i.php?title=Main_Page&action=info]',
+'protect-summary-desc' => '{{Optional}}
+Used in edit summary for description of a protecting restriction.
+* $1 is action, taken from restriction-*
+* $2 is restriction, taken from protect-level-*
+* $3 is {{msg-mw|protect-expiring}} or {{msg-mw|protect-expiry-indefinite}}',
 'protect-summary-cascade' => 'Used in edit summary when cascade protecting a page. Appears in protection log. See [[Special:Log]] and [[m:Special:Log]].
 
 Also used in [[Special:ProtectedPages]] when a page is cascade protected. See example: [[m:Special:ProtectedPages]].<br />
@@ -2956,7 +4555,11 @@ See also:
 
 <tt><nowiki>* Groupname</nowiki></tt> - defines a new group<br />
 <tt><nowiki>** Reason</nowiki></tt> - defines a reason in this group',
-'protect-edit-reasonlist' => 'Shown beneath the page protection form on the right side. It is a link to [[MediaWiki:Protect-dropdown]]. See also {{msg|Delete-edit-reasonlist}} and {{msg|Ipb-edit-dropdown}}.',
+'protect-edit-reasonlist' => 'Shown beneath the page protection form on the right side. It is a link to {{msg-mw|Protect-dropdown|notext=1}}.
+
+See also:
+* {{msg-mw|Delete-edit-reasonlist}}
+* {{msg-mw|Ipb-edit-dropdown}}',
 'protect-expiry-options' => "{{Identical|Infinite}}{{doc-important|Be careful: '''1 translation:1 english''', so the first part is the translation and the second part should stay in English.}}
 
 Options for the duration of the page protection. Example: See e.g. [[MediaWiki:Protect-expiry-options/nl]] if you still don't know how to do it.",
@@ -2976,33 +4579,58 @@ Options for the duration of the page protection. Example: See e.g. [[MediaWiki:P
 'restriction-create' => 'Used on [[Special:ProtectedPages]]. An option in a drop-down box. See the help pages on [//www.mediawiki.org/wiki/Project:Protected_titles MediaWiki] and [http://meta.wikimedia.org/wiki/Protect Meta] for more information on protection.
 
 {{Identical|Create}}',
+'restriction-upload' => '{{Identical|Upload}}',
 
 # Restriction levels
 'restriction-level-sysop' => "Used on [[Special:ProtectedPages]] and [[Special:ProtectedTitles]]. An option in the drop-down box 'Restriction level' and in brackets after each page name entry. See the [//www.mediawiki.org/wiki/Project:Protected_titles help page on Mediawiki] and on [http://meta.wikimedia.org/wiki/Protect Meta] for more information.
 
-*{{msg-mw|Restriction-level-sysop}}
+See also:
 *{{msg-mw|Restriction-level-autoconfirmed}}
 *{{msg-mw|Restriction-level-all}}",
 'restriction-level-autoconfirmed' => "Used on [[Special:ProtectedPages]] and [[Special:ProtectedTitles]]. An option in the drop-down box 'Restriction level', and in brackets after each page name entry. See the [//www.mediawiki.org/wiki/Project:Protected_titles help page on Mediawiki] and on [http://meta.wikimedia.org/wiki/Protect Meta] for more information.
 
+See also:
 *{{msg-mw|Restriction-level-sysop}}
-*{{msg-mw|Restriction-level-autoconfirmed}}
 *{{msg-mw|Restriction-level-all}}",
 'restriction-level-all' => "Used on [[Special:ProtectedPages]] and [[Special:ProtectedTitles]]. An option in the drop-down box 'Restriction level'. See the [//www.mediawiki.org/wiki/Project:Protected_titles help page on Mediawiki] and on [http://meta.wikimedia.org/wiki/Protect Meta] for more information.
 
+See also:
 *{{msg-mw|Restriction-level-sysop}}
-*{{msg-mw|Restriction-level-autoconfirmed}}
-*{{msg-mw|Restriction-level-all}}",
+*{{msg-mw|Restriction-level-autoconfirmed}}",
 
 # Undelete
 'undelete' => 'Name of special page for admins as displayed in [[Special:SpecialPages]].
 
+See also:
+* {{msg-mw|Undelete}}
+* {{msg-mw|Accesskey-ca-undelete}}
+* {{msg-mw|Tooltip-ca-undelete}}
 {{Identical|View deleted pages}}',
 'undeletepage' => 'Title of special page [[Special:Undelete]]. This special page is only visible to administrators.',
+'undeletepagetitle' => 'Used as introduction in [[Special:Undelete]]. Parameters:
+* $1 - page title',
 'viewdeletedpage' => 'Title of the [[Special:Undelete]].
 
 {{Identical|View deleted pages}}',
+'undeletepagetext' => '* $1 - number of pages',
+'undelete-fieldset-title' => 'Used as the title of the fieldset.',
 'undeleteextrahelp' => "Help message displayed when restoring history of a page. In your language, ''Restore'' is called ''[[MediaWiki:Undeletebtn/{{SUBPAGENAME}}|{{int:Undeletebtn}}]]'' ({{msg|Undeletebtn}}), The ''Reset'' button is called ''[[MediaWiki:Undeletereset/{{SUBPAGENAME}}|{{int:Undeletereset}}]]'' ({{msg|Undeletereset}}).",
+'undeleterevisions' => '* $1 - number of revisions',
+'undeletehistory' => 'Used in [[Special:Undelete]].
+
+See also:
+* {{msg-mw|Undeleterevdel}}
+* {{msg-mw|Undeletehistorynoadmin}}',
+'undeleterevdel' => 'Used in [[Special:Undelete]].
+
+See also:
+* {{msg-mw|Undeletehistory}}
+* {{msg-mw|Undeletehistorynoadmin}}',
+'undeletehistorynoadmin' => 'Used in [[Special:Undelete]].
+
+See also:
+* {{msg-mw|Undeletehistory}}
+* {{msg-mw|Undeleterevdel}}',
 'undelete-revision' => 'Shown in "View and restore deleted pages" ([[Special:Undelete/$1]]).
 
 * $1: deleted page name
@@ -3011,6 +4639,7 @@ Options for the duration of the page protection. Example: See e.g. [[MediaWiki:P
 * $5: time of the revision
 
 \'\'Example:\'\' Deleted revision of [[Main Page]] (as of {{CURRENTDAY}} {{CURRENTMONTHNAME}} {{CURRENTYEAR}}, at {{CURRENTTIME}}) by [[User:Username|Username]]:',
+'undelete-nodiff' => 'Used in [[Special:Undelete]].',
 'undeletebtn' => 'Shown on [[Special:Undelete]] as button caption and on [[Special:Log/delete|deletion log]] after each entry (for sysops).
 
 {{Identical|Restore}}',
@@ -3023,11 +4652,63 @@ Options for the duration of the page protection. Example: See e.g. [[MediaWiki:P
 {{Identical|Reset}}',
 'undeleteinvert' => '{{Identical|Invert selection}}',
 'undeletecomment' => '{{Identical|Reason}}',
+'undeletedrevisions' => 'Used as reason in the log entry. Parameters:
+* $1 - number of revisions
+See also:
+* {{msg-mw|Undeletedrevisions-files}}
+* {{msg-mw|Undeletedfiles}}',
+'undeletedrevisions-files' => 'Used as reason in the log entry. Parameters:
+* $1 - number of revisions
+* $2 - number of files
+See also:
+* {{msg-mw|Undeletedrevisions}}
+* {{msg-mw|Undeletedfiles}}',
+'undeletedfiles' => 'Used as reason in the log entry. Parameters:
+* $1 - number of files
+See also:
+* {{msg-mw|Undeletedrevisions-files}}
+* {{msg-mw|Undeletedrevisions}}',
 'cannotundelete' => 'Message shown when undeletion failed for some reason.
 * <code>$1</code> is the combined wikitext of messages for all errors that caused the failure.',
-'undelete-search-title' => 'Page title when showing the search form in Special:Undelete',
-'undelete-search-submit' => '{{Identical|Search}}',
+'undeletedpage' => '* $1 - page title',
+'undelete-header' => 'Used in [[Special:Undelete]].',
+'undelete-search-title' => 'Page title when showing the search form in [[Special:Undelete]].
+
+See also:
+* {{msg-mw|undelete-search-box}}
+* {{msg-mw|undelete-search-prefix}}
+* {{msg-mw|undelete-search-submit}}',
+'undelete-search-box' => 'Used as legend for the Search form in [[Special:Undelete]].
+
+See also:
+* {{msg-mw|undelete-search-title}}
+* {{msg-mw|undelete-search-prefix}}
+* {{msg-mw|undelete-search-submit}}',
+'undelete-search-prefix' => 'Used as label for the input box in [[Special:Undelete]].
+
+See also:
+* {{msg-mw|undelete-search-title}}
+* {{msg-mw|undelete-search-box}}
+* {{msg-mw|undelete-search-submit}}',
+'undelete-search-submit' => 'Used as Submit button text in Search form on [[Special:Undelete]].
+
+See also:
+* {{msg-mw|undelete-search-title}}
+* {{msg-mw|undelete-search-box}}
+* {{msg-mw|undelete-search-prefix}}
+{{Identical|Search}}',
+'undelete-no-results' => 'Used as Search result in [[Special:Undelete]].',
+'undelete-filename-mismatch' => '* $1 - date and time',
+'undelete-bad-store-key' => '* $1 - date and time',
+'undelete-cleanup-error' => '* $1 - file path',
+'undelete-missing-filearchive' => '* $1 - ID',
 'undelete-error' => 'Page title when a page could not be undeleted',
+'undelete-error-short' => 'Used as error message. See also:
+* {{msg-mw|Undelete-error-short}}
+* {{msg-mw|Undelete-error-long}}',
+'undelete-error-long' => 'Used as error message. See also:
+* {{msg-mw|Undelete-error-short}}
+* {{msg-mw|Undelete-error-long}}',
 'undelete-show-file-confirm' => 'A confirmation message shown on Special:Undelete when the request does not contain a valid token (e.g. when a user clicks a link received in mail).
 * <code>$1</code> is the name of the file being undeleted.
 * <code>$2</code> is the date of the displayed revision.
@@ -3035,7 +4716,8 @@ Options for the duration of the page protection. Example: See e.g. [[MediaWiki:P
 
 {{identical|Are you sure you want to view the deleted revision of the file...}}',
 'undelete-show-file-submit' => '{{Identical|Yes}}',
-'undelete-revisionrow' => "A revision row in the undelete page. Parameters:
+'undelete-revisionrow' => "{{Optional}}
+A revision row in the undelete page. Parameters:
 * $1 is a checkBox to indicate whether to restore this specific revision
 * $2 is a link to the revision
 * $3 is a link to the last revision of a page ({{msg-mw|last}})
@@ -3045,7 +4727,8 @@ Options for the duration of the page protection. Example: See e.g. [[MediaWiki:P
 * $7 is the revision comment",
 
 # Namespace form on various pages
-'namespace' => 'This message is located at [[Special:Contributions]].',
+'namespace' => 'This message is located at [[Special:Contributions]].
+{{Identical|Namespace}}',
 'invert' => 'Displayed in [[Special:RecentChanges|RecentChanges]], [[Special:RecentChangesLinked|RecentChangesLinked]] and [[Special:Watchlist|Watchlist]].
 
 This message means "Invert selection of namespace".
@@ -3060,51 +4743,138 @@ This message has a tooltip {{msg-mw|tooltip-namespace association}}',
 'blanknamespace' => 'Name for main namespace (blank namespace) in drop-down menus at [[Special:RecentChanges]] and other special pages.',
 
 # Contributions
-'contributions' => "Display name for the 'User contributions', shown in the sidebar menu of all user pages and user talk pages. Also the page name of the target page. The target page shows an overview of the most recent contributions by a user.",
+'contributions' => "Display name for the 'User contributions', shown in the sidebar menu of all user pages and user talk pages. Also the page name of the target page. The target page shows an overview of the most recent contributions by a user.
+
+See also:
+* {{msg-mw|Contributions}}
+* {{msg-mw|Accesskey-t-contributions}}
+* {{msg-mw|Tooltip-t-contributions}}",
 'contributions-title' => 'The page title in your browser bar, but not the page title. See also {{msg|contributions}}. Parameter $1 is the username.
 
 {{Gender}}',
-'mycontris' => 'In the personal urls page section - right upper corner.',
-'contribsub2' => 'Contributions for "user" (links)',
+'mycontris' => 'In the personal urls page section - right upper corner.
+
+See also:
+* {{msg-mw|Mycontris}}
+* {{msg-mw|Accesskey-pt-mycontris}}
+* {{msg-mw|Tooltip-pt-mycontris}}',
+'contribsub2' => 'Contributions for "user" (links)
+{{Identical|For $1}}',
 'nocontribs' => 'Optional parameter: $1 is the user name',
 'uctop' => 'This message is used in [[Special:Contributions]]. It is used to show that a particular edit was the last made to a page. Example: 09:57, 11 February 2008 (hist) (diff) Pagename‎ (edit summary) (top)',
-'month' => 'Used in [[Special:Contributions]] and history pages ([{{fullurl:Sandbox|action=history}} example]), as label for a dropdown box to select a specific month to view the edits made in that month, and the earlier months. See also {{msg|year}}.',
-'year' => 'Used in [[Special:Contributions]] and history pages ([{{fullurl:Sandbox|action=history}} example]), as label for a inputbox to select a specific year to view the edits made in that year, and the earlier years. See also {{msg|month}}.',
+'month' => 'Used in [[Special:Contributions]] and history pages ([{{fullurl:Sandbox|action=history}} example]), as label for a dropdown box to select a specific month to view the edits made in that month, and the earlier months. See also {{msg-mw|year}}.',
+'year' => 'Used in [[Special:Contributions]] and history pages ([{{fullurl:Sandbox|action=history}} example]), as label for a inputbox to select a specific year to view the edits made in that year, and the earlier years. See also {{msg-mw|month}}.',
 
 'sp-contributions-newbies' => 'Text of radio button on special page [[Special:Contributions]].',
 'sp-contributions-newbies-sub' => "Note at the top of the page of results for a search on [[Special:Contributions]] where 'Show contributions for new accounts only' has been selected.",
 'sp-contributions-newbies-title' => 'The page title in your browser bar, but not the page title. See also {{msg|sp-contributions-newbies-sub}}.',
 'sp-contributions-blocklog' => 'Used as a display name for a link to the block log on for example [[Special:Contributions/Mediawiki default]]
 
+Used as link title in [[Special:Contributions]] and in [[Special:DeletedContributions]].
+
+See also:
+* {{msg-mw|Sp-contributions-talk}}
+* {{msg-mw|Change-blocklink}}
+* {{msg-mw|Unblocklink}}
+* {{msg-mw|Blocklink}}
+* {{msg-mw|Sp-contributions-uploads}}
+* {{msg-mw|Sp-contributions-logs}}
+* {{msg-mw|Sp-contributions-deleted}}
+* {{msg-mw|Sp-contributions-userrights}}
 {{Identical|Block log}}',
-'sp-contributions-deleted' => "This is a link anchor used in [[Special:Contributions]]/''name'', when user viewing the page has the right to delete pages, or to restore deleted pages.",
-'sp-contributions-uploads' => '{{Identical|Upload}}',
-'sp-contributions-logs' => "Appears as an action link in the header of the Special:Contributions/''Username'' pages (e.g. \"For Somebody (talk | block log | logs)\").",
+'sp-contributions-deleted' => "This is a link anchor used in [[Special:Contributions]]/''name'', when user viewing the page has the right to delete pages, or to restore deleted pages.
+
+Used as link title in [[Special:Contributions]].
+
+See also:
+* {{msg-mw|Sp-contributions-talk}}
+* {{msg-mw|Change-blocklink}}
+* {{msg-mw|Unblocklink}}
+* {{msg-mw|Blocklink}}
+* {{msg-mw|Sp-contributions-blocklog}}
+* {{msg-mw|Sp-contributions-uploads}}
+* {{msg-mw|Sp-contributions-logs}}
+* {{msg-mw|Sp-contributions-userrights}}",
+'sp-contributions-uploads' => 'Used as link title in [[Special:Contributions]] and in [[Special:DeletedContributions]].
+
+See also:
+* {{msg-mw|Sp-contributions-talk}}
+* {{msg-mw|Change-blocklink}}
+* {{msg-mw|Unblocklink}}
+* {{msg-mw|Blocklink}}
+* {{msg-mw|Sp-contributions-blocklog}}
+* {{msg-mw|Sp-contributions-logs}}
+* {{msg-mw|Sp-contributions-deleted}}
+* {{msg-mw|Sp-contributions-userrights}}
+{{Identical|Upload}}',
+'sp-contributions-logs' => "Appears as an action link in the header of the Special:Contributions/''Username'' pages (e.g. \"For Somebody (talk | block log | logs)\").
+
+Used as link title in [[Special:Contributions]] and in [[Special:DeletedContributions]].
+
+See also:
+* {{msg-mw|Sp-contributions-talk}}
+* {{msg-mw|Change-blocklink}}
+* {{msg-mw|Unblocklink}}
+* {{msg-mw|Blocklink}}
+* {{msg-mw|Sp-contributions-blocklog}}
+* {{msg-mw|Sp-contributions-uploads}}
+* {{msg-mw|Sp-contributions-deleted}}
+* {{msg-mw|Sp-contributions-userrights}}",
 'sp-contributions-talk' => "This is a link anchor used in the [[Special:Contributions]]/''usernamename'' pages.
 The link appears in a list of similar ones separated by {{msg-mw|pipe-separator}}, e.g. like this:<br />
 ( talk | block log | logs | deleted contributions | rights management )
+
+Used as link title in [[Special:Contributions]] and in [[Special:DeletedContributions]].
+
+See also:
+* {{msg-mw|change-blocklink}}
+* {{msg-mw|unblocklink}}
+* {{msg-mw|blocklink}}
+* {{msg-mw|sp-contributions-blocklog}}
+* {{msg-mw|sp-contributions-uploads}}
+* {{msg-mw|sp-contributions-logs}}
+* {{msg-mw|sp-contributions-deleted}}
+* {{msg-mw|sp-contributions-userrights}}
 {{Identical|Talk}}",
-'sp-contributions-userrights' => "This is a link anchor used in [[Special:Contributions]]/''name'', if the user viewing the page has the right to set or alter user rights.",
+'sp-contributions-userrights' => "This is a link anchor used in [[Special:Contributions]]/''name'', if the user viewing the page has the right to set or alter user rights.
+
+Used as link title in [[Special:Contributions]] and in [[Special:DeletedContributions]].
+
+See also:
+* {{msg-mw|Sp-contributions-talk}}
+* {{msg-mw|Change-blocklink}}
+* {{msg-mw|Unblocklink}}
+* {{msg-mw|Blocklink}}
+* {{msg-mw|Sp-contributions-blocklog}}
+* {{msg-mw|Sp-contributions-uploads}}
+* {{msg-mw|Sp-contributions-logs}}
+* {{msg-mw|Sp-contributions-deleted}}",
 'sp-contributions-blocked-notice' => 'Shown on top of contributions special page of currently blocked users. Parameters:
 * $1 is the blocked user. Can be used for GENDER (optional)
 Anon version: {{msg-mw|Sp-contributions-blocked-notice-anon}}',
 'sp-contributions-blocked-notice-anon' => 'Same as {{msg-mw|Sp-contributions-blocked-notice}} but for anonymous users.',
 'sp-contributions-search' => 'Used on [[Special:Contributions]]',
 'sp-contributions-username' => 'This message appears whenever someone requests [[Special:Contributions]].
-
-{{Identical/IP address or username}}',
+{{Identical|IP address or username}}',
 'sp-contributions-toponly' => '"top revision" means the "latest revision"',
 'sp-contributions-submit' => '{{Identical|Search}}',
 'sp-contributions-explain' => '{{optional}}',
 
 # What links here
-'whatlinkshere' => 'The text of the link in the toolbox (on the left, below the search menu) going to [[Special:WhatLinksHere]].',
+'whatlinkshere' => 'The text of the link in the toolbox (on the left, below the search menu) going to [[Special:WhatLinksHere]].
+
+See also:
+* {{msg-mw|Whatlinkshere}}
+* {{msg-mw|Accesskey-t-whatlinkshere}}
+* {{msg-mw|Tooltip-t-whatlinkshere}}',
 'whatlinkshere-title' => "Title of the special page [[Special:WhatLinksHere]]. This page appears when you click on the 'What links here' button in the toolbox. $1 is the name of the page concerned.",
 'whatlinkshere-page' => '{{Identical|Page}}',
-'linkshere' => "This message is the header line of the [[Special:WhatLinksHere/$1]] page generated by clicking 'What links here' in the sidebar toolbox. It is followed by a navigation bar built using {{msg-mw|Viewprevnext}}.",
+'linkshere' => "This message is the header line of the [[Special:WhatLinksHere/$1]] page generated by clicking 'What links here' in the sidebar toolbox. It is followed by a navigation bar built using {{msg-mw|Viewprevnext}}. Parameters:
+* $1 - page title",
 'nolinkshere' => 'This appears on Whatlinkshere pages which are empty.
 
 Parameter $1 is a page title.',
+'nolinkshere-ns' => '* $1 - page title',
 'isredirect' => 'Displayed in Special:WhatLinksHere (see [{{fullurl:Special:WhatLinksHere/Project:Translator|hidelinks=1}} Special:WhatLinksHere/Project:Translator] for example).
 
 {{Identical|Redirect page}}',
@@ -3142,6 +4912,8 @@ See also:
 'whatlinkshere-filters' => '{{Identical|Filter}}',
 
 # Block/unblock
+'autoblockid' => 'Used as name of autoblock, instead of autoblocked IPs. Parameters:
+* $1 - autoblock ID',
 'block' => 'Name of the special page on [[Special:SpecialPages]]',
 'unblock' => 'Name of the special page on [[Special:SpecialPages]]',
 'blockip' => 'The title of the special page [[Special:BlockIP]].
@@ -3151,15 +4923,43 @@ See also:
 'blockip-legend' => 'Legend/Header for the fieldset around the input form of [[Special:Block]].
 
 {{Identical|Block user}}',
-'ipadressorusername' => '{{Identical/IP address or username}}',
+'ipadressorusername' => '{{Identical|IP address or username}}',
 'ipbexpiry' => '{{Identical|Expiry}}',
 'ipbreason' => 'Label of the block reason dropdown in [[Special:BlockIP]] and the unblock reason textfield in [{{fullurl:Special:IPBlockList|action=unblock}} Special:IPBlockList?action=unblock].
 
 {{Identical|Reason}}',
 'ipbreasonotherlist' => '{{Identical|Other reason}}',
+'ipbreason-dropdown' => 'Used as item list for dropdown on [[Special:Block]].
+
+The label for this dropdown is {{msg-mw|Ipbreason}}.',
+'ipb-hardblock' => 'This is the label for a checkbox in the user block form on [[Special:Block]].
+
+See also:
+* {{msg-mw|ipbemailban}}
+* {{msg-mw|ipb-disableusertalk}}
+* {{msg-mw|ipbenableautoblock}}
+* {{msg-mw|ipbhidename}}
+* {{msg-mw|ipbwatchuser}}',
 'ipbcreateaccount' => '{{Identical|Prevent account creation}}',
-'ipbemailban' => '{{Identical|Prevent user from sending e-mail}}',
-'ipbenableautoblock' => '{{Identical|Automatically block ...}}',
+'ipbemailban' => 'Used as label for checkbox in [[Special:Block]].
+
+See also:
+* {{msg-mw|ipb-disableusertalk}}
+* {{msg-mw|ipbenableautoblock}}
+* {{msg-mw|ipbhidename}}
+* {{msg-mw|ipbwatchuser}}
+* {{msg-mw|ipb-hardblock}}
+{{Identical|Prevent user from sending e-mail}}',
+'ipbenableautoblock' => '{{doc-singularthey}}
+Used as label for checkbox in [[Special:Block]].
+
+See also:
+* {{msg-mw|ipbemailban}}
+* {{msg-mw|ipb-disableusertalk}}
+* {{msg-mw|ipbhidename}}
+* {{msg-mw|ipbwatchuser}}
+* {{msg-mw|ipb-hardblock}}
+{{Identical|Automatically block ...}}',
 'ipbsubmit' => '{{Identical|Block this user}}',
 'ipbother' => '{{Identical|Other time}}',
 'ipboptions' => "{{Identical|Infinite}}{{doc-important|Be careful: '''1 translation:1 english''', so the first part is the translation and the second part should stay in English.}}
@@ -3167,22 +4967,90 @@ See also:
 Options for the duration of the block. Example: See e.g. [[MediaWiki:Ipboptions/nl]] if you still don't know how to do it.",
 'ipbotheroption' => '{{Identical|Other}}',
 'ipbotherreason' => '{{Identical|Other/additional reason}}',
-'ipbhidename' => 'This is the label for a checkbox in the user block form on [[Special:Block]].',
-'ipbwatchuser' => 'This is an option on [[Special:BlockIP]] to watch the user page and talk page of the blocked user',
-'ipb-disableusertalk' => '{{doc-singularthey}}',
-'ipb-change-block' => 'Confirmation checkbox required for blocks that would override an earlier block. Appears together with {{msg|ipb-needreblock}}.',
+'ipbhidename' => 'This is the label for a checkbox in the user block form on [[Special:Block]].
+
+See also:
+* {{msg-mw|ipbemailban}}
+* {{msg-mw|ipb-disableusertalk}}
+* {{msg-mw|ipbenableautoblock}}
+* {{msg-mw|ipbwatchuser}}
+* {{msg-mw|ipb-hardblock}}',
+'ipbwatchuser' => 'This is an option on [[Special:BlockIP]] to watch the user page and talk page of the blocked user
+
+See also:
+* {{msg-mw|ipbemailban}}
+* {{msg-mw|ipb-disableusertalk}}
+* {{msg-mw|ipbenableautoblock}}
+* {{msg-mw|ipbhidename}}
+* {{msg-mw|ipb-hardblock}}',
+'ipb-disableusertalk' => '{{doc-singularthey}}
+Used as label for checkbox in [[Special:Block]].
+
+See also:
+* {{msg-mw|ipbemailban}}
+* {{msg-mw|ipbenableautoblock}}
+* {{msg-mw|ipbhidename}}
+* {{msg-mw|ipbwatchuser}}
+* {{msg-mw|ipb-hardblock}}',
+'ipb-change-block' => 'Confirmation checkbox required for blocks that would override an earlier block. Appears together with {{msg-mw|ipb-needreblock}}.',
+'ipb-confirm' => 'Used as hidden field in the form on [[Special:Block]].',
 'badipaddress' => 'An error message shown when one entered an invalid IP address in blocking page.',
-'blockipsuccesstext' => '<nowiki>{{</nowiki>[[Gender|GENDER]]<nowiki>}}</nowiki> is supported.',
-'ipb-edit-dropdown' => 'Shown beneath the user block form on the right side. It is a link to [[MediaWiki:Ipbreason-dropdown]]. See also {{msg|Delete-edit-reasonlist}} and {{msg|Protect-edit-reasonlist}}.',
+'blockipsuccesssub' => 'Used as page title in [[Special:Block]].
+
+This message is the subject for the following message:
+* {{msg-mw|Blockipsuccesstext}}',
+'blockipsuccesstext' => 'Used in [[Special:Block]].
+The title (subject) for this message is {{msg-mw|Blockipsuccesssub}}.
+
+Parameters:
+* $1 - username, can be used for GENDER',
+'ipb-edit-dropdown' => 'Shown beneath the user block form on the right side. It is a link to {{msg-mw|Ipbreason-dropdown|notext=1}}.
+
+See also:
+* {{msg-mw|Delete-edit-reasonlist}}
+* {{msg-mw|Protect-edit-reasonlist}}',
+'ipb-unblock-addr' => 'Used in [[Special:Block]].
+* $1 - target username',
+'ipb-blocklist-contribs' => 'Used in [[Special:Block]].
+* $1 - target username',
+'unblockip' => 'Used as legend for the form in [[Special:Unblock]].',
+'unblockiptext' => 'Used in the {{msg-mw|Unblockip}} form on [[Special:Unblock]].',
 'ipusubmit' => 'Used as button text on Special:BlockList?action=unblock. To see the message:
 * Go to [[Special:BlockList]]
 * Click "unblock" for any block (but you can only see "unblock" if you have administrator rights)
 * It is now the button below the form',
-'unblocked' => 'Do not translate the namespace "User:".  $1 - the IP address or username that was unblocked.',
-'unblocked-range' => 'Shown when successfully lifting a rangeblock, so do not link to contributions.
-* $1 - the range that was unblocked.',
+'unblocked' => '{{doc-important|Do not translate the namespace "User:".}}
+Parameters:
+* $1 - the IP address or username that was unblocked
+See also:
+* {{msg-mw|Unblocked-range}}
+* {{msg-mw|Unblocked-id}}',
+'unblocked-range' => 'Shown when successfully lifting a rangeblock, so do not link to contributions. Parameters:
+* $1 - the range that was unblocked
+See also:
+* {{msg-mw|Unblocked}}
+* {{msg-mw|Unblocked-id}}',
+'unblocked-id' => 'Used in [[Special:Unblock]]. Parameters:
+* $1 - autoblock ID
+See also:
+* {{msg-mw|Unblocked}}
+* {{msg-mw|Unblocked-range}}',
 'ipblocklist' => 'Title of [[Special:Ipblocklist]].',
-'blocklist-rangeblocks' => 'For an explanation of "range blocks", see http://www.mediawiki.org/wiki/Help:Range_blocks',
+'ipblocklist-legend' => 'Used as legend of the form in [[Special:BlockList]].
+
+See also:
+* {{msg-mw|Ipblocklist-legend}}
+* {{msg-mw|Ipblocklist-submit}}',
+'blocklist-userblocks' => 'Used as the label for the multi-select checkbox in the form on [[Special:BlockList]].
+{{Related|Blocklist-blocks}}',
+'blocklist-tempblocks' => 'Used as the label for the multi-select checkbox in the form on [[Special:BlockList]].
+{{Related|Blocklist-blocks}}',
+'blocklist-addressblocks' => 'Used as the label for the multi-select checkbox in the form on [[Special:BlockList]].
+{{Related|Blocklist-blocks}}',
+'blocklist-rangeblocks' => 'Used as the label for the multi-select checkbox in the form on [[Special:BlockList]].
+
+For an explanation of "range blocks", see http://www.mediawiki.org/wiki/Help:Range_blocks
+{{Related|Blocklist-blocks}}',
 'blocklist-timestamp' => 'This is a column header for dates and times in the table on the page [[Special:BlockList]].
 {{Identical|Timestamp}}',
 'blocklist-target' => 'The table header for the column containing the block targets, that is user names or IP-addresses linked to their respective user pages, in the table on the page [[Special:BlockList]].',
@@ -3192,7 +5060,12 @@ Options for the duration of the block. Example: See e.g. [[MediaWiki:Ipboptions/
 'blocklist-reason' => 'This is a column header in the table on the page [[Special:BlockList]].
 
 {{Identical|Reason}}',
-'ipblocklist-submit' => '{{Identical|Search}}',
+'ipblocklist-submit' => 'Used as Submit button text in the form on [[Special:BlockList]].
+
+See also:
+* {{msg-mw|Ipblocklist-legend}}
+* {{msg-mw|Ipblocklist-submit}}
+{{Identical|Search}}',
 'ipblocklist-localblock' => '[[File:Special IPBlockList new.png|thumb|Example]]
 Used on [[Special:IPBlockList]] as header when global blocks exists too.',
 'ipblocklist-otherblocks' => '[[File:Special IPBlockList new.png|thumb|Example]]
@@ -3202,6 +5075,16 @@ Used on [[Special:IPBlockList]] as header for other blocks, i.e. from GlobalBloc
 <blockquote>''{{int:Globalblocking-blocked}}''</blockquote>
 *See also {{msg-mw|Expiringblock}}
 
+Part of the log entry of user block in [[Special:BlockList]].
+
+See also:
+* {{msg-mw|Anononlyblock}}
+* {{msg-mw|Createaccountblock}}
+* {{msg-mw|Noautoblockblock}}
+* {{msg-mw|Emailblock}}
+* {{msg-mw|Blocklist-nousertalk}}
+* {{msg-mw|Unblocklink}}
+* {{msg-mw|Change-blocklink}}
 {{Identical|Infinite}}",
 'expiringblock' => 'Parameters:
 * $1 is a date
@@ -3211,19 +5094,77 @@ Usage:
 * Substituted as $4 in in {{msg-mw|Blocklistline|notext=1}}
 * Substituted as $4 in  in {{msg-mw|Globalblocking-blocked|notext=1}}
 * See also {{msg-mw|Infiniteblock}}',
-'anononlyblock' => 'Part of the log entry of user block.
+'anononlyblock' => 'Part of the log entry of user block in [[Special:BlockList]].
 
+"anon." stands for "anonymous".
+
+See also:
+* {{msg-mw|Block-log-flags-anononly}}
+{{Related|Blocklist}}
 {{Identical|Anon only}}',
-'noautoblockblock' => '{{Identical|Autoblock disabled}}',
-'emailblock' => '{{Identical|E-mail blocked}}',
-'blocklist-nousertalk' => 'Used in [[Special:IPBlockList]] when "Allow this user to edit own talk page while blocked" option hasn\'t been flagged. See also {{msg-mw|Block-log-flags-nousertalk}}.',
+'noautoblockblock' => 'Part of the log entry of user block in [[Special:BlockList]].
+{{Related|Blocklist}}
+{{Identical|Autoblock disabled}}',
+'createaccountblock' => 'Part of the log entry of user block in [[Special:BlockList]].
+
+See also:
+* {{msg-mw|Block-log-flags-nocreate}}
+{{Related|Blocklist}}',
+'emailblock' => 'Part of the log entry of user block in [[Special:BlockList]].
+{{Related|Blocklist}}
+{{Identical|E-mail blocked}}',
+'blocklist-nousertalk' => 'Used in [[Special:IPBlockList]] when "Allow this user to edit own talk page while blocked" option hasn\'t been flagged.
+
+See also {{msg-mw|Block-log-flags-nousertalk}}.
+
+Part of the log entry of user block in [[Special:BlockList]].
+
+{{Related|Blocklist}}',
 'ipblocklist-empty' => 'Shown on page [[Special:Blocklist]], if no blocks are to be shown.',
-'blocklink' => "Display name for a link that, when selected, leads to a form where a user can be blocked. Used in page history and recent changes pages. Example: \"''UserName (Talk | contribs | '''block''')''\".",
-'change-blocklink' => 'Used to name the link on Special:Log',
+'blocklink' => "Display name for a link that, when selected, leads to a form where a user can be blocked. Used in page history and recent changes pages. Example: \"''UserName (Talk | contribs | '''block''')''\".
+
+Used as link title in [[Special:Contributions]] and in [[Special:DeletedContributions]].
+
+See also:
+* {{msg-mw|Sp-contributions-talk}}
+* {{msg-mw|Change-blocklink}}
+* {{msg-mw|Unblocklink}}
+* {{msg-mw|Sp-contributions-blocklog}}
+* {{msg-mw|Sp-contributions-uploads}}
+* {{msg-mw|Sp-contributions-logs}}
+* {{msg-mw|Sp-contributions-deleted}}
+* {{msg-mw|Sp-contributions-userrights}}",
+'unblocklink' => 'Used as link title in [[Special:Contributions]] and in [[Special:DeletedContributions]].
+
+See also:
+* {{msg-mw|Sp-contributions-talk}}
+* {{msg-mw|change-blocklink}}
+* {{msg-mw|blocklink}}
+* {{msg-mw|sp-contributions-blocklog}}
+* {{msg-mw|sp-contributions-uploads}}
+* {{msg-mw|sp-contributions-logs}}
+* {{msg-mw|sp-contributions-deleted}}
+* {{msg-mw|sp-contributions-userrights}}',
+'change-blocklink' => 'Used to name the link on Special:Log.
+
+Also used as link title in [[Special:Contributions]] and in [[Special:DeletedContributions]].
+
+See also:
+* {{msg-mw|Sp-contributions-talk}}
+* {{msg-mw|unblocklink}}
+* {{msg-mw|blocklink}}
+* {{msg-mw|sp-contributions-blocklog}}
+* {{msg-mw|sp-contributions-uploads}}
+* {{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.',
 '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}}',
+'autoblocker' => 'Used in [[Special:Block]].
+* $1 - target username
+* $2 - reason',
 'blocklogpage' => "{{doc-logpage}}
 
 The page name of [[Special:Log/block]]. Also appears in the drop down menu of [[Special:Log]] pages and in the action links of Special:Contributions/''Username'' pages (e.g. \"For Somebody (talk | block log | logs)\").
@@ -3245,19 +5186,95 @@ See also {{msg-mw|Blocklistline}}.',
 'blocklogtext' => 'Appears on top of [[Special:Log/block]].',
 'unblocklogentry' => 'This is the text of an entry in the Block log (and Recent Changes), after hour (and date, only in the Block log) and sysop name:
 * $1 is the user being unblocked',
-'block-log-flags-noautoblock' => '{{Identical|Autoblock disabled}}',
-'block-log-flags-noemail' => "Log message for [[Special:Log/block]] to note that a user cannot use the 'email another user' option.
+'block-log-flags-anononly' => 'Used as a block log flag in [[Special:Log/block]] and in [[Special:Block]].
+
+See also:
+* {{msg-mw|Anononlyblock}}
+{{Related|Block-log-flags}}',
+'block-log-flags-nocreate' => 'Used as a block log flag in [[Special:Log/block]] and in [[Special:Block]].
 
+See also:
+* {{msg-mw|Createaccountblock}}
+{{Related|Block-log-flags}}',
+'block-log-flags-noautoblock' => 'Used as a block log flag in [[Special:Log/block]] and in [[Special:Block]].
+{{Related|Block-log-flags}}
+{{Identical|Autoblock disabled}}',
+'block-log-flags-noemail' => "Used as a block log flag in [[Special:Log/block]] and in [[Special:Block]], to note that a user cannot use the 'email another user' option.
+{{Related|Block-log-flags}}
 {{Identical|E-mail blocked}}",
-'block-log-flags-nousertalk' => 'Used in [[Special:Log/block]] when "Allow this user to edit own talk page while blocked" option hasn\'t been flagged. See also {{msg-mw|Blocklist-nousertalk}}.',
+'block-log-flags-nousertalk' => 'Used as a block log flag in [[Special:Log/block]] and in [[Special:Block]], when "Allow this user to edit own talk page while blocked" option hasn\'t been flagged.
+
+See also {{msg-mw|Blocklist-nousertalk}}.
+{{Related|Block-log-flags}}',
+'block-log-flags-angry-autoblock' => 'Used as a block log flag in [[Special:Log/block]].
+{{Related|Block-log-flags}}',
+'block-log-flags-hiddenname' => 'Used as a block log flag in [[Special:Log/block]] and in [[Special:Block]].
+
+{{Related|Block-log-flags}}',
+'range_block_disabled' => 'Used as error message in [[Special:Block]].
+
+See also:
+* {{msg-mw|Range block disabled}}
+* {{msg-mw|Ip range invalid}}
+* {{msg-mw|Ip range toolarge}}',
 'ipb_expiry_temp' => 'Warning message displayed on [[Special:BlockIP]] if the option "hide username" is selected but the expiry time is not infinite.',
 'ipb_already_blocked' => '{{Identical|$1 is already blocked}}',
+'ipb-needreblock' => 'Used in [[Special:Block]].
+* $1 - target username',
 'ipb-otherblocks-header' => '[[File:Special.Block with other blocks from GlobalBlocking and TorBlocks.png|thumb|Example]]
 Used on [[Special:Block]] as header for other blocks, i.e. from GlobalBlocking or TorBlocks',
 'unblock-hideuser' => '{{doc-singularthey}}',
+'ipb_cant_unblock' => '* $1 - block ID',
+'ipb_blocked_as_range' => 'Used when unblock of a single IP fails. Parameters:
+* $1 - IP address
+* $2 - IP range',
+'ip_range_invalid' => 'Used as error message in [[Special:Block]].
+
+See also:
+* {{msg-mw|Range block disabled}}
+* {{msg-mw|Ip range invalid}}
+* {{msg-mw|Ip range toolarge}}',
+'ip_range_toolarge' => 'Used as error message in [[Special:Block]]. Parameters:
+* $1 - a number from 0 to 32 for IPv4 (from 0 to 128 for IPv6); a part of CIDR (Classless Inter-Domain Routing) notation.
+See also:
+* {{msg-mw|Range block disabled}}
+* {{msg-mw|Ip range invalid}}
+* {{msg-mw|Ip range toolarge}}',
 'blockme' => 'The page title of [[Special:Blockme]], a feature which is disabled by default.',
-'proxyblocksuccess' => '{{Identical|Done}}',
+'proxyblocker' => 'Used in [[Special:BlockMe]].
+
+See also:
+* {{msg-mw|proxyblocker-disabled}}
+* {{msg-mw|proxyblockreason}}
+* {{msg-mw|proxyblocksuccess}}',
+'proxyblocker-disabled' => 'Used in [[Special:BlockMe]].
+
+See also:
+* {{msg-mw|proxyblocker}}
+* {{msg-mw|proxyblockreason}}
+* {{msg-mw|proxyblocksuccess}}',
+'proxyblockreason' => 'Used as explanation of the reason in [[Special:BlockMe]].
+
+See also:
+* {{msg-mw|proxyblocker-disabled}}
+* {{msg-mw|proxyblocker}}
+* {{msg-mw|proxyblocksuccess}}',
+'proxyblocksuccess' => 'Used in [[Special:BlockMe]].
+
+See also:
+* {{msg-mw|proxyblocker-disabled}}
+* {{msg-mw|proxyblocker}}
+* {{msg-mw|proxyblockreason}}
+{{Identical|Done}}',
 'sorbs' => '{{optional}}',
+'sorbsreason' => 'See also:
+* {{msg-mw|Sorbsreason}}
+* {{msg-mw|Sorbs create account_reason}}',
+'sorbs_create_account_reason' => 'Used in [[Special:UserLogin]] when creating an account.
+
+See also:
+* {{msg-mw|Sorbsreason}}
+* {{msg-mw|Sorbs create account_reason}}',
 'cant-see-hidden-user' => 'Used as (red) error message on Special:Block when you try to change (as sysop w/o the hideuser right) the block of a hidden user.',
 'ipbblocked' => 'Error message shown when a user tries to alter block settings when they are themselves blocked.',
 'ipbnounblockself' => 'Error message shown when a user without the <tt>unblockself</tt> right tries to unblock themselves.',
@@ -3265,17 +5282,91 @@ Used on [[Special:Block]] as header for other blocks, i.e. from GlobalBlocking o
 # Developer tools
 'lockdb' => 'The title of the special page [[Special:LockDB]].
 
+Also used as the title of the error message {{msg-mw|Databasenotlocked}} in [[Special:UnlockDB]].
+
+See also:
+* {{msg-mw|Lockdb}}
+* {{msg-mw|Unlockdb}}
+* {{msg-mw|Lockfilenotwritable|error in Special:LockDB}}
+* {{msg-mw|Databasenotlocked|error in Special:UnlockDB}}
 {{Identical|Lock database}}',
 'unlockdb' => 'The title of the special page [[Special:UnlockDB]].
 
 {{Identical|Unlock database}}',
+'lockdbtext' => 'Used in the Lock form on [[Special:LockDB]].
+
+See also:
+* {{msg-mw|Lockbtn}}
+* {{msg-mw|Unlockbtn}}
+* {{msg-mw|Lockdbtext}}
+* {{msg-mw|Unlockdbtext}}',
+'unlockdbtext' => 'Used in the Unlock form on [[Special:UnlockDB]].
+
+See also:
+* {{msg-mw|Lockbtn}}
+* {{msg-mw|Unlockbtn}}
+* {{msg-mw|Lockdbtext}}
+* {{msg-mw|Unlockdbtext}}',
+'lockconfirm' => 'Used as label for checkbox in the form on [[Special:LockDB]].
+
+See also:
+* {{msg-mw|Unlockconfirm}}',
+'unlockconfirm' => 'Used as label for checkbox in the form on [[Special:UnlockDB]].
+
+See also:
+* {{msg-mw|Lockconfirm}}',
 'lockbtn' => 'The submit button on the special page [[Special:LockDB]].
 
+See also:
+* {{msg-mw|Lockbtn}}
+* {{msg-mw|Unlockbtn}}
+* {{msg-mw|Lockdbtext}}
+* {{msg-mw|Unlockdbtext}}
 {{Identical|Lock database}}',
 'unlockbtn' => 'The submit button on the special page [[Special:UnlockDB]].
 
+See also:
+* {{msg-mw|Lockbtn}}
+* {{msg-mw|Unlockbtn}}
+* {{msg-mw|Lockdbtext}}
+* {{msg-mw|Unlockdbtext}}
 {{Identical|Unlock database}}',
+'locknoconfirm' => 'Used as error message in [[Special:LockDB]] and in [[Special:UnlockDB]].',
+'lockdbsuccesssub' => 'Used as subtitle in [[Special:LockDB]].
+
+See also:
+* {{msg-mw|Lockdbsuccesssub|subtitle}}
+* {{msg-mw|Lockdbsuccesstext|text}}
+* {{msg-mw|Unlockdbsuccesssub|subtitle}}
+* {{msg-mw|Unlockdbsuccesstext|text}}',
+'unlockdbsuccesssub' => 'Used as subtitle in [[Special:UnlockDB]].
+
+See also:
+* {{msg-mw|Lockdbsuccesssub|subtitle}}
+* {{msg-mw|Lockdbsuccesstext|text}}
+* {{msg-mw|Unlockdbsuccesssub|subtitle}}
+* {{msg-mw|Unlockdbsuccesstext|text}}',
+'lockdbsuccesstext' => 'Used as message text in [[Special:LockDB]].
+
+See also:
+* {{msg-mw|Lockdbsuccesssub|subtitle}}
+* {{msg-mw|Lockdbsuccesstext|text}}
+* {{msg-mw|Unlockdbsuccesssub|subtitle}}
+* {{msg-mw|Unlockdbsuccesstext|text}}',
+'unlockdbsuccesstext' => 'Used as message text in [[Special:UnlockDB]].
+
+See also:
+* {{msg-mw|Lockdbsuccesssub|subtitle}}
+* {{msg-mw|Lockdbsuccesstext|text}}
+* {{msg-mw|Unlockdbsuccesssub|subtitle}}
+* {{msg-mw|Unlockdbsuccesstext|text}}',
 'lockfilenotwritable' => "'No longer needed' on wikipedia.",
+'databasenotlocked' => 'Used as error message in [[Special:UnlockDB]].
+The title of this error message is {{msg-mw|Lockdb}}.
+
+See also:
+* {{msg-mw|Lockdb|title}}
+* {{msg-mw|Databasenotlocked|message}}',
 'lockedbyandtime' => 'Used as part of the message when a database is locked through [[Special:LockDB]]. Parameters:
 * $1 is the user that locked the database.
 * $2 is the date on which the lock was made
@@ -3285,34 +5376,174 @@ Used on [[Special:Block]] as header for other blocks, i.e. from GlobalBlocking o
 'move-page' => 'Header of the special page to move pages. $1 is the name of the page to be moved.',
 'move-page-legend' => 'Legend of the fieldset around the input form of [[Special:MovePage/testpage]].
 
+See also:
+* {{msg-mw|movearticle|label for old title}}
+* {{msg-mw|newtitle|label for new title}}
+* {{msg-mw|movereason|label for textarea}}
+* {{msg-mw|movetalk|label for checkbox}}
+* {{msg-mw|move-leave-redirect|label for checkbox}}
+* {{msg-mw|fix-double-redirects|label for checkbox}}
+* {{msg-mw|move-subpages|label for checkbox}}
+* {{msg-mw|move-talk-subpages|label for checkbox}}
+* {{msg-mw|move-watch|label for checkbox}}
 {{Identical|Move page}}',
 'movepagetext' => 'Introduction shown when moving a page ([[Special:MovePage]]).
 
 Special pages mentioned: {{msg-mw|Doubleredirects}}, {{msg-mw|Brokenredirects}}
 
-See also {{msg-mw|Movepagetext-noredirectfixer|notext=1}}',
-'movepagetext-noredirectfixer' => 'A variant of {{msg-mw|Movepagetext|notext=1}} displayed when the automatic redirect fixer is not enabled.',
+See also:
+* {{msg-mw|Movepagetext-noredirectfixer}}',
+'movepagetext-noredirectfixer' => "A variant of the following message ''Movepagetext'' displayed when the automatic redirect fixer is not enabled.
+
+Special pages mentioned: {{msg-mw|Doubleredirects}}, {{msg-mw|Brokenredirects}}
+
+See also:
+* {{msg-mw|Movepagetext}}",
 'movepagetalktext' => "Text on the special 'Move page'. This text only appears if the talk page is not empty.",
-'movearticle' => 'The text before the name of the page that you are moving. Can be translated as "Page that is going to be moved"
+'movearticle' => 'The text before the name of the page that you are moving. Can be translated as "Page that is going to be moved". Used in [[Special:MovePage]].
 
+See also:
+* {{msg-mw|move-page-legend|legend for the form}}
+* {{msg-mw|newtitle|label for new title}}
+* {{msg-mw|movereason|label for textarea}}
+* {{msg-mw|movetalk|label for checkbox}}
+* {{msg-mw|move-leave-redirect|label for checkbox}}
+* {{msg-mw|fix-double-redirects|label for checkbox}}
+* {{msg-mw|move-subpages|label for checkbox}}
+* {{msg-mw|move-talk-subpages|label for checkbox}}
+* {{msg-mw|move-watch|label for checkbox}}
 {{Identical|Move page}}',
+'moveuserpage-warning' => 'Used as warning in [[Special:MovePage]], when moving a user page.',
 'movenologin' => '{{Identical|Not logged in}}',
-'movenologintext' => "Text of message on special page 'Permissions Errors', which appears when somebody tries to move a page without being logged in.",
-'newtitle' => 'Used in the special page "[[Special:MovePage]]". The text for the inputbox to give the new page title.',
-'move-watch' => 'The text of the checkbox to watch the pages you are moving from and to. If checked, both the destination page and the original page will be added to the watchlist, even if you decide not to leave a redirect behind.',
+'movenologintext' => "Text of message on special page 'Permissions Errors', which appears when somebody tries to move a page without being logged in.
+
+See also:
+* {{msg-mw|cant-move-user-page}}
+* {{msg-mw|cant-move-to-user-page}}
+* {{msg-mw|movenotallowedfile}}
+* {{msg-mw|movenotallowed}}",
+'movenotallowed' => 'Used as error message.
+
+See also:
+* {{msg-mw|cant-move-user-page}}
+* {{msg-mw|cant-move-to-user-page}}
+* {{msg-mw|movenotallowedfile}}
+* {{msg-mw|movenologintext}}',
+'movenotallowedfile' => 'Used as error message.
+
+See also:
+* {{msg-mw|cant-move-user-page}}
+* {{msg-mw|cant-move-to-user-page}}
+* {{msg-mw|movenotallowed}}
+* {{msg-mw|movenologintext}}',
+'cant-move-user-page' => 'Used as error message.
+
+See also:
+* {{msg-mw|cant-move-to-user-page}}
+* {{msg-mw|movenotallowedfile}}
+* {{msg-mw|movenotallowed}}
+* {{msg-mw|movenologintext}}',
+'cant-move-to-user-page' => 'Used as error message.
+
+See also:
+* {{msg-mw|cant-move-user-page}}
+* {{msg-mw|movenotallowedfile}}
+* {{msg-mw|movenotallowed}}
+* {{msg-mw|movenologintext}}',
+'newtitle' => 'Used in the special page "[[Special:MovePage]]". The text for the inputbox to give the new page title.
+
+See also:
+* {{msg-mw|Move-page-legend|legend for the form}}
+* {{msg-mw|Movearticle|label for old title}}
+* {{msg-mw|Movereason|label for textarea}}
+* {{msg-mw|Movetalk|label for checkbox}}
+* {{msg-mw|Move-leave-redirect|label for checkbox}}
+* {{msg-mw|Fix-double-redirects|label for checkbox}}
+* {{msg-mw|Move-subpages|label for checkbox}}
+* {{msg-mw|Move-talk-subpages|label for checkbox}}
+* {{msg-mw|Move-watch|label for checkbox}}',
+'move-watch' => 'The text of the checkbox to watch the pages you are moving from and to. If checked, both the destination page and the original page will be added to the watchlist, even if you decide not to leave a redirect behind.
+
+See also:
+* {{msg-mw|Move-page-legend|legend for the form}}
+* {{msg-mw|Movearticle|label for old title}}
+* {{msg-mw|Newtitle|label for new title}}
+* {{msg-mw|Movereason|label for textarea}}
+* {{msg-mw|Movetalk|label for checkbox}}
+* {{msg-mw|Move-leave-redirect|label for checkbox}}
+* {{msg-mw|Fix-double-redirects|label for checkbox}}
+* {{msg-mw|Move-subpages|label for checkbox}}
+* {{msg-mw|Move-talk-subpages|label for checkbox}}',
 'movepagebtn' => "Button label on the special 'Move page'.
 
 {{Identical|Move page}}",
 'pagemovedsub' => 'Message displayed as aheader of the body, after succesfully moving a page from source to target name.',
-'movepage-moved' => 'Message displayed after succesfully moving a page from source to target name.
-* $1 is the source page as a link with display name
-* $2 is the target page as a link with display name
-* $3 (optional) is the source page name without a link
-* $4 (optional) is the target page name without a link',
-'movepage-moved-noredirect' => 'The message is shown after pagemove if checkbox "{{int:move-leave-redirect}}" was unselected before moving.',
-'movetalk' => 'The text of the checkbox to watch the associated talk page to the page you are moving. This only appears when the talk page is not empty.',
-'move-subpages' => 'The text of an option on the special page [[Special:MovePage|MovePage]]. If this option is ticked, any subpages will be moved with the main page to a new title.',
-'move-talk-subpages' => 'The text of an option on the special page [[Special:MovePage|MovePage]]. If this option is ticked, any talk subpages will be moved with the talk page to a new title.',
+'movepage-moved' => 'Message displayed after succesfully moving a page from source to target name. Parameters:
+* $1 - the source page as a link with display name
+* $2 - the target page as a link with display name
+* $3 - (optional) the source page name without a link
+* $4 - (optional) the target page name without a link
+See also:
+* {{msg-mw|Movepage-moved-redirect}}
+* {{msg-mw|Movepage-moved-noredirect}}',
+'movepage-moved-redirect' => 'See also:
+* {{msg-mw|Movepage-moved}}
+* {{msg-mw|Movepage-moved-noredirect}}',
+'movepage-moved-noredirect' => 'The message is shown after pagemove if checkbox "{{int:move-leave-redirect}}" was unselected before moving.
+
+See also:
+* {{msg-mw|Movepage-moved}}
+* {{msg-mw|Movepage-moved-redirect}}',
+'articleexists' => 'Used as error message when moving a page.
+
+See also:
+* {{msg-mw|Badarticleerror}}
+* {{msg-mw|Bad-target-model}}',
+'cantmove-titleprotected' => 'Used as error message when moving a page.',
+'movetalk' => 'The text of the checkbox to watch the associated talk page to the page you are moving. This only appears when the talk page is not empty. Used in [[Special:MovePage]].
+
+See also:
+* {{msg-mw|Move-page-legend|legend for the form}}
+* {{msg-mw|Movearticle|label for old title}}
+* {{msg-mw|Newtitle|label for new title}}
+* {{msg-mw|Movereason|label for textarea}}
+* {{msg-mw|Move-leave-redirect|label for checkbox}}
+* {{msg-mw|Fix-double-redirects|label for checkbox}}
+* {{msg-mw|Move-subpages|label for checkbox}}
+* {{msg-mw|Move-talk-subpages|label for checkbox}}
+* {{msg-mw|Move-watch|label for checkbox}}',
+'move-subpages' => 'The text of an option on the special page [[Special:MovePage|MovePage]]. If this option is ticked, any subpages will be moved with the main page to a new title.
+
+See also:
+* {{msg-mw|Move-page-legend|legend for the form}}
+* {{msg-mw|Movearticle|label for old title}}
+* {{msg-mw|Newtitle|label for new title}}
+* {{msg-mw|Movereason|label for textarea}}
+* {{msg-mw|Movetalk|label for checkbox}}
+* {{msg-mw|Move-leave-redirect|label for checkbox}}
+* {{msg-mw|Fix-double-redirects|label for checkbox}}
+* {{msg-mw|Move-talk-subpages|label for checkbox}}
+* {{msg-mw|Move-watch|label for checkbox}}',
+'move-talk-subpages' => 'The text of an option on the special page [[Special:MovePage|MovePage]]. If this option is ticked, any talk subpages will be moved with the talk page to a new title.
+
+See also:
+* {{msg-mw|Move-page-legend|legend for the form}}
+* {{msg-mw|Movearticle|label for old title}}
+* {{msg-mw|Newtitle|label for new title}}
+* {{msg-mw|Movereason|label for textarea}}
+* {{msg-mw|Movetalk|label for checkbox}}
+* {{msg-mw|Move-leave-redirect|label for checkbox}}
+* {{msg-mw|Fix-double-redirects|label for checkbox}}
+* {{msg-mw|Move-subpages|label for checkbox}}
+* {{msg-mw|Move-watch|label for checkbox}}',
+'movepage-page-exists' => 'Used as error message when moving page.
+* $1 - page title',
+'movepage-page-moved' => 'Used as success message when moving page.
+* $1 - old page title
+* $2 - new page title',
+'movepage-page-unmoved' => 'Used as error message when moving page.
+* $1 - old page title
+* $2 - new page title',
 'movepage-max-pages' => 'PROBABLY (A GUESS): when moving a page, you can select an option of moving its subpages, but there is a maximum that can be moved automatically.',
 'movelogpage' => '{{doc-logpage}}
 Title of [[Special:Log/move]]. Used as heading on that page, and in the dropdown menu on log pages.',
@@ -3320,9 +5551,31 @@ Title of [[Special:Log/move]]. Used as heading on that page, and in the dropdown
 'movesubpage' => "This is a section header on [[Special:MovePage]], below is a list of subpages.
 Parameters:
 *'''$1''' = number of subpages
-<!--{{Note|Plural is supported if you need it, the number of subpages is available in <code>$1</code>.}}-->",
+See also:
+* {{msg-mw|movesubpage|section header}}
+* {{msg-mw|movenosubpage|without subpage}}
+* {{msg-mw|movesubpagetext|with subpages}}",
+'movesubpagetext' => '* $1 - number of subpages
+See also:
+* {{msg-mw|movesubpage|section header}}
+* {{msg-mw|movenosubpage|without subpage}}
+* {{msg-mw|movesubpagetext|with subpages}}',
+'movenosubpage' => 'See also:
+* {{msg-mw|movesubpage|section header}}
+* {{msg-mw|movenosubpage|without subpage}}
+* {{msg-mw|movesubpagetext|with subpages}}',
 'movereason' => 'Used in [[Special:MovePage]]. The text for the inputbox to give a reason for the page move.
 
+See also:
+* {{msg-mw|Move-page-legend|legend for the form}}
+* {{msg-mw|Movearticle|label for old title}}
+* {{msg-mw|Newtitle|label for new title}}
+* {{msg-mw|Movetalk|label for checkbox}}
+* {{msg-mw|Move-leave-redirect|label for checkbox}}
+* {{msg-mw|Fix-double-redirects|label for checkbox}}
+* {{msg-mw|Move-subpages|label for checkbox}}
+* {{msg-mw|Move-talk-subpages|label for checkbox}}
+* {{msg-mw|Move-watch|label for checkbox}}
 {{Identical|Reason}}',
 'revertmove' => '{{Identical|Revert}}',
 'delete_and_move' => 'Button text on the move page when the target page already exists.',
@@ -3330,199 +5583,805 @@ Parameters:
 'delete_and_move_confirm' => 'Used when moving a page, but the destination page already exists and needs deletion. This message is for a checkbox to confirm that you really want to delete the page. See also {{msg|delete and move text}}.',
 'delete_and_move_reason' => 'Shown as reason in content language in the deletion log. Parameter:
 * $1: The page name for which this page was deleted.',
+'selfmove' => 'Used as error message when moving page.
+
+See also:
+* {{msg-mw|badtitletext}}
+* {{msg-mw|immobile-source-namespace}}
+* {{msg-mw|immobile-target-namespace-iw}}
+* {{msg-mw|immobile-target-namespace}}',
+'immobile-source-namespace' => '* $1 - source namespace name
+See also:
+* {{msg-mw|Immobile-source-namespace}}
+* {{msg-mw|Immobile-source-page}}
+* {{msg-mw|Immobile-target-namespace}}
+* {{msg-mw|Immobile-target-page}}',
+'immobile-target-namespace' => '* $1 - destination namespace name
+See also:
+* {{msg-mw|Immobile-source-namespace}}
+* {{msg-mw|Immobile-source-page}}
+* {{msg-mw|Immobile-target-namespace}}
+* {{msg-mw|Immobile-target-page}}',
 'immobile-target-namespace-iw' => "This message appears when attempting to move a page, if a person has typed an interwiki link as a namespace prefix in the input box labelled 'To new title'.  The special page 'Movepage' cannot be used to move a page to another wiki.
 
 'Destination' can be used instead of 'target' in this message.",
+'immobile-source-page' => 'See also:
+* {{msg-mw|Immobile-source-namespace}}
+* {{msg-mw|Immobile-source-page}}
+* {{msg-mw|Immobile-target-namespace}}
+* {{msg-mw|Immobile-target-page}}',
+'immobile-target-page' => 'See also:
+* {{msg-mw|Immobile-source-namespace}}
+* {{msg-mw|Immobile-source-page}}
+* {{msg-mw|Immobile-target-namespace}}
+* {{msg-mw|Immobile-target-page}}',
 'bad-target-model' => 'This message is shown when attempting to move a page, but the move would change the page\'s content model.
 This may be the case when [[mw:Manual:$wgContentHandlerUseDB|$wgContentHandlerUseDB]] is set to false, because then a page\'s content model is derived from the page\'s title.
 * $1: The localized name of the original page\'s content model:
 **{{msg-mw|Content-model-wikitext}}, {{msg-mw|Content-model-javascript}}, {{msg-mw|Content-model-css}} or {{msg-mw|Content-model-text}}
 * $2: The localized name of the content model used by the destination title:
 **{{msg-mw|Content-model-wikitext}}, {{msg-mw|Content-model-javascript}}, {{msg-mw|Content-model-css}} or {{msg-mw|Content-model-text}}',
-'fix-double-redirects' => 'This is a checkbox in [[Special:MovePage]] which allows to move all redirects from the old title to the new title.',
-'protectedpagemovewarning' => 'Related message: [[MediaWiki:protectedpagewarning/{{#titleparts:{{PAGENAME}}|1|2}}]]
-{{Related|Semiprotectedpagewarning}}',
-'semiprotectedpagemovewarning' => 'Related message: [[MediaWiki:Semiprotectedpagewarning/{{#titleparts:{{PAGENAME}}|1|2}}]]
-{{Related|Semiprotectedpagewarning}}',
+'imagenocrossnamespace' => 'Used as error message.
+
+See also:
+* {{msg-mw|Imagenocrossnamespace}}
+* {{msg-mw|Nonfile-cannot-move-to-file}}',
+'nonfile-cannot-move-to-file' => 'Used as error message.
+
+See also:
+* {{msg-mw|Imagenocrossnamespace}}
+* {{msg-mw|Nonfile-cannot-move-to-file}}',
+'imagetypemismatch' => 'Used as error message.
+
+See also:
+* {{msg-mw|imageinvalidfilename}}
+* {{msg-mw|imagenocrossnamespace}}',
+'imageinvalidfilename' => 'Used as error message.
+
+See also:
+* {{msg-mw|imagetypemismatch}}
+* {{msg-mw|imagenocrossnamespace}}',
+'fix-double-redirects' => 'This is a checkbox in [[Special:MovePage]] which allows to move all redirects from the old title to the new title. Used in [[Special:MovePage]].
+
+See also:
+* {{msg-mw|Move-page-legend|legend for the form}}
+* {{msg-mw|Movearticle|label for old title}}
+* {{msg-mw|Newtitle|label for new title}}
+* {{msg-mw|Movereason|label for textarea}}
+* {{msg-mw|Movetalk|label for checkbox}}
+* {{msg-mw|Move-leave-redirect|label for checkbox}}
+* {{msg-mw|Move-subpages|label for checkbox}}
+* {{msg-mw|Move-talk-subpages|label for checkbox}}
+* {{msg-mw|Move-watch|label for checkbox}}',
+'move-leave-redirect' => 'Used as label for checkbox in the Move Pages form on [[Special:MovePage]].
+
+See also:
+* {{msg-mw|move-page-legend|legend for the form}}
+* {{msg-mw|movearticle|label for old title}}
+* {{msg-mw|newtitle|label for new title}}
+* {{msg-mw|movereason|label for textarea}}
+* {{msg-mw|movetalk|label for checkbox}}
+* {{msg-mw|fix-double-redirects|label for checkbox}}
+* {{msg-mw|move-subpages|label for checkbox}}
+* {{msg-mw|move-talk-subpages|label for checkbox}}
+* {{msg-mw|move-watch|label for checkbox}}',
+'protectedpagemovewarning' => '{{Related|Semiprotectedpagewarning}}',
+'semiprotectedpagemovewarning' => '{{Related|Semiprotectedpagewarning}}',
 'move-over-sharedrepo' => 'Notice when a file with that filename already exists on a shared repository, such as Wikimedia Commons.',
+'file-exists-sharedrepo' => 'Used in [[Special:MovePage]].',
 
 # Export
 'export' => 'Page title of [[Special:Export]], a page where a user can export pages from a wiki to a file.',
 'exporttext' => 'Main text on [[Special:Export]]. Leave the line <tt><nowiki>[[{{#Special:Export}}/{{MediaWiki:Mainpage}}]]</nowiki></tt> exactly as it is!',
 'exportall' => 'A label of checkbox option in [[Special:Export]]',
 'exportcuronly' => 'A label of checkbox option in [[Special:Export]]',
+'exportnohistory' => 'Used in [[Special:Export]].',
+'exportlistauthors' => 'Used as label for checkbox in the form on [[Special:Export]].
+
+See also:
+* {{msg-mw|Export-download}}',
 'export-submit' => 'Button name in [[Special:Export]].
 
-{{Identical|Export}}',
-'export-addcat' => '{{Identical|Add}}',
-'export-addnstext' => 'Message {{msg-mw|configure-setting-wgExportFromNamespaces}} refers to this one.',
-'export-addns' => '{{Identical|Add}}',
-'export-download' => 'A label of checkbox option in [[Special:Export]]',
-'export-templates' => 'A label of checkbox option in [[Special:Export]]',
-'export-pagelinks' => 'This is an input in [[Special:Export]]',
+{{Identical|Export}}',
+'export-addcattext' => 'Used as label for "category name" input box in the form on [[Special:Export]].
+
+Submit button text of this form is {{msg-mw|Export-addcat}}.
+
+See also:
+* {{msg-mw|Export-addnstext}}',
+'export-addcat' => 'Used as label for input box in the form on [[Special:Export]].
+
+See also:
+* {{msg-mw|Export-addcattext|label for input box}}
+{{Identical|Add}}',
+'export-addnstext' => 'Message {{msg-mw|configure-setting-wgExportFromNamespaces}} refers to this one.
+
+See also:
+* {{msg-mw|Export-addcattext}}',
+'export-addns' => '{{Identical|Add}}',
+'export-download' => 'A label of checkbox option in [[Special:Export]]
+
+See also:
+* {{msg-mw|Exportlistauthors}}',
+'export-templates' => 'A label of checkbox option in [[Special:Export]]',
+'export-pagelinks' => 'This is an input in [[Special:Export]]',
+
+# Namespace 8 related
+'allmessages' => 'The title of the special page [[Special:AllMessages]].',
+'allmessagesname' => 'Used on [[Special:Allmessages]] meaning "the name of the message".
+{{Identical|Name}}',
+'allmessagesdefault' => 'The header for the lower row of each column in the table of [[Special:AllMessages]].',
+'allmessagescurrent' => 'The header for the upper row of each column in the table of [[Special:AllMessages]].',
+'allmessagestext' => 'Summary displayed at the top of [[Special:AllMessages]].',
+'allmessagesnotsupportedDB' => 'This message is displayed on [[Special:AllMessages]] on wikis were the configuration variable $wgUseDatabaseMessages is disabled. It means that the MediaWiki namespace is not used.',
+'allmessages-filter-legend' => 'Used in [[Special:AllMessages]].
+
+{{Identical|Filter}}',
+'allmessages-filter' => 'Option used in [[Special:AllMessages]].',
+'allmessages-filter-unmodified' => 'Used in [[Special:AllMessages]].',
+'allmessages-filter-all' => 'Used in [[Special:AllMessages]].
+{{Identical|All}}',
+'allmessages-filter-modified' => 'Used in [[Special:AllMessages]].
+{{Identical|Modified}}',
+'allmessages-prefix' => 'Used in [[Special:AllMessages]].',
+'allmessages-language' => 'Used on [[Special:Allmessages]].
+
+{{Identical|Language}}',
+'allmessages-filter-submit' => 'Used on [[Special:Allmessages]].
+
+{{Identical|Go}}',
+
+# Thumbnails
+'thumbnail-more' => '[[Image:Yes.png|thumb|This:]]
+Tooltip shown when hovering over a little sign of a thumb image, to go to the image page (where it is bigger). For example, see the image at the right:',
+'filemissing' => 'Used in the ImageGallery feature.',
+'thumbnail_error' => 'Message shown in a thumbnail frame when creation of the thumbnail fails. Parameters:
+* $1 - the reason
+The reason $1 is one of the following messages:
+* {{msg-mw|Thumbnail-dest-create}}
+* {{msg-mw|Thumbnail dest directory}}
+* {{msg-mw|Thumbnail invalid params}}
+* {{msg-mw|Djvu no xml}}
+* {{msg-mw|Djvu page error}}
+* {{msg-mw|Svg-long-error}}
+* other custom string',
+'djvu_page_error' => 'Used as error message.
+
+See also:
+* {{msg-mw|Thumbnail error}}
+* {{msg-mw|Djvu no xml}}
+* {{msg-mw|Djvu page error}}',
+'djvu_no_xml' => 'Used as error message.
+
+See also:
+* {{msg-mw|Thumbnail error}}
+* {{msg-mw|Djvu page error}}',
+'thumbnail-temp-create' => 'Used as thumbnail error message.
+
+See also:
+* {{msg-mw|Thumbnail-dest-create}}
+* {{msg-mw|Thumbnail invalid params}}
+* {{msg-mw|Thumbnail dest directory}}',
+'thumbnail-dest-create' => 'Used as thumbnail error message.
+
+See also:
+* {{msg-mw|Thumbnail error}}
+* {{msg-mw|Thumbnail-temp-create}}
+* {{msg-mw|Thumbnail invalid params}}
+* {{msg-mw|Thumbnail dest directory}}',
+'thumbnail_invalid_params' => 'Used as thumbnail error message.
+
+See also:
+* {{msg-mw|Thumbnail-temp-create}}
+* {{msg-mw|Thumbnail-dest-create}}
+* {{msg-mw|Thumbnail dest directory}}',
+'thumbnail_dest_directory' => 'Used as thumbnail error message.
+
+See also:
+* {{msg-mw|Thumbnail error}}
+* {{msg-mw|Thumbnail-temp-create}}
+* {{msg-mw|Thumbnail-dest-create}}
+* {{msg-mw|Thumbnail invalid params}}',
+'thumbnail_image-type' => 'This is the parameter 1 of the message {{msg-mw|thumbnail error}}',
+'thumbnail_gd-library' => 'This is the parameter 1 of the message {{msg-mw|thumbnail error}}.
+*$1 is a function name of the GD library',
+'thumbnail_image-missing' => 'This is the parameter 1 of the message {{msg-mw|thumbnail error}}.
+*$1 is the path incl. filename of the missing image',
+
+# Special:Import
+'import' => 'The title of the special page [[Special:Import]];',
+'importinterwiki' => 'Used as legend for the Import form in [[Special:Import]].',
+'import-interwiki-text' => 'Used as summary for the Import form in [[Special:Import]].',
+'import-interwiki-source' => 'Used as label for input box in [[Special:Import]].',
+'import-interwiki-history' => 'This is an option on [[Special:Import]]. Usually, when unchecked, only the first version of a page is imported. When you check the option, all versions are imported. This is important often to check for licensing reasons.
+
+See also:
+* {{msg-mw|Import-interwiki-templates}}
+* {{msg-mw|Import-interwiki-namespace}}
+* {{msg-mw|Import-comment}}
+* {{msg-mw|Import-interwiki-rootpage}}
+* {{msg-mw|Import-interwiki-submit}}',
+'import-interwiki-templates' => 'Used as label for the checkbox in [[Special:Import]].
+
+See also:
+* {{msg-mw|Import-interwiki-history}}
+* {{msg-mw|Import-interwiki-namespace}}
+* {{msg-mw|Import-comment}}
+* {{msg-mw|Import-interwiki-rootpage}}
+* {{msg-mw|Import-interwiki-submit}}',
+'import-interwiki-submit' => 'Used as Submit button text in [[Special:Import]].
+
+See also:
+* {{msg-mw|Import-interwiki-history}}
+* {{msg-mw|Import-interwiki-templates}}
+* {{msg-mw|Import-interwiki-namespace}}
+* {{msg-mw|Import-comment}}
+* {{msg-mw|Import-interwiki-rootpage}}
+{{Identical|Import}}',
+'import-interwiki-namespace' => 'Used as label in Import form on [[Special:Import]].
+
+See also:
+* {{msg-mw|Import-interwiki-history}}
+* {{msg-mw|Import-interwiki-templates}}
+* {{msg-mw|Import-comment}}
+* {{msg-mw|Import-interwiki-rootpage}}
+* {{msg-mw|Import-interwiki-submit}}',
+'import-interwiki-rootpage' => 'Used on [[Special:Import]] as label.
+
+See also:
+* {{msg-mw|Import-interwiki-history}}
+* {{msg-mw|Import-interwiki-templates}}
+* {{msg-mw|Import-interwiki-namespace}}
+* {{msg-mw|Import-comment}}
+* {{msg-mw|Import-interwiki-submit}}',
+'import-upload-filename' => 'Used on [[Special:Import]] as label for upload of an XML file containing the pages to import.',
+'import-comment' => 'Used as label for input box in [[Special:Import]].
+
+See also:
+* {{msg-mw|Import-interwiki-history}}
+* {{msg-mw|Import-interwiki-templates}}
+* {{msg-mw|Import-interwiki-namespace}}
+* {{msg-mw|Import-interwiki-rootpage}}
+* {{msg-mw|Import-interwiki-submit}}',
+'importtext' => 'Used in the Import form on [[Special:Import]].',
+'importstart' => 'Used in [[Special:Import]].
+
+See also:
+* {{msg-mw|Importsuccess}}
+* {{msg-mw|Importfailed}}',
+'import-revision-count' => '* $1 - number of revisions, success count',
+'importnopages' => 'Used as error message in [[Special:Import]].',
+'imported-log-entries' => '* $1 - number of log items',
+'importfailed' => 'Used as error message in [[Special:Import]]. Parameters:
+* $1 - import source
+See also:
+* {{msg-mw|Importstart}}
+* {{msg-mw|Importsuccess}}',
+'importunknownsource' => 'Used as error message in [[Special:Import]].
+
+See also:
+* {{msg-mw|import-token-mismatch}}
+* {{msg-mw|import-invalid-interwiki}}
+* {{msg-mw|Importunknownsource}}',
+'importcantopen' => 'Used as error message when importing from file or from URL.',
+'importbadinterwiki' => 'Used as error message when importing from interwiki.
+
+See also:
+* {{msg-mw|Import-noarticle}}
+* {{msg-mw|Importbadinterwiki}}',
+'importsuccess' => 'Used in [[Special:Import]].
+
+See also:
+* {{msg-mw|Importstart}}
+* {{msg-mw|Importfailed}}',
+'importnosources' => 'Used in [[Special:Import]] instead of the Import form.',
+'importnofile' => 'Used as error message when importing from file.
+
+See also:
+* {{msg-mw|importuploaderrorsize}}
+* {{msg-mw|importuploaderrorpartial}}
+* {{msg-mw|importuploaderrortemp}}',
+'importuploaderrorsize' => 'Used as error message when importing from file.
+
+See also:
+* {{msg-mw|importnofile}}
+* {{msg-mw|importuploaderrorpartial}}
+* {{msg-mw|importuploaderrortemp}}',
+'importuploaderrorpartial' => 'Used as error message when importing from file.
+
+See also:
+* {{msg-mw|importnofile}}
+* {{msg-mw|importuploaderrorsize}}
+* {{msg-mw|importuploaderrortemp}}',
+'importuploaderrortemp' => 'Used as error message when importing from file.
+
+See also:
+* {{msg-mw|importnofile}}
+* {{msg-mw|importuploaderrorsize}}
+* {{msg-mw|importuploaderrorpartial}}',
+'import-noarticle' => 'Used as error message when importing from interwiki.
+
+See also:
+* {{msg-mw|Import-noarticle}}
+* {{msg-mw|Importbadinterwiki}}',
+'import-nonewrevisions' => 'Used in [[Special:Import]].',
+'xml-error-string' => ':$1: Some kind of message, perhaps name of the error?
+:$2: line number
+:$3: columm number
+:$4: ?? $this->mByte . $this->mContext
+:$5: error description
+----
+:Example
+Import failed: XML import parse failure at line 1, col 1 (byte 3; "- <mediawiki xml"): Empty document',
+'import-upload' => 'Used on [[Special:Import]].
+
+Related messages:
+* {{msg-mw|right-importupload}} (the user right for this)',
+'import-token-mismatch' => 'Used as error message in [[Special:Import]].
+
+See also:
+* {{msg-mw|import-token-mismatch}}
+* {{msg-mw|import-invalid-interwiki}}
+* {{msg-mw|Importunknownsource}}',
+'import-invalid-interwiki' => 'Used as error message in [[Special:Import]].
+
+See also:
+* {{msg-mw|import-token-mismatch}}
+* {{msg-mw|import-invalid-interwiki}}
+* {{msg-mw|Importunknownsource}}',
+'import-error-edit' => 'Import error message displayed when importing user has no edit rights for a page. Parameters:
+* $1 is a page name.
+See also:
+* {{msg-mw|import-error-create}}',
+'import-error-create' => 'Import error message displayed when importing user has no create rights for a page. Parameters:
+* $1 is a page name.
+See also:
+* {{msg-mw|import-error-edit}}',
+'import-error-interwiki' => '* $1 - page title',
+'import-error-special' => '* $1 - page title',
+'import-error-invalid' => '* $1 - page title',
+'import-error-unserialize' => 'Import error message displayed when a revision could not be unserialized.
+This may happen if the content got corrupted or the serialization format is mis-reported. Parameters:
+* $1 is the name of the page the offending revision belongs to.
+* $2 is the ID of the offending revision, as reported in the dump that is being imported.
+* $3 is the content model reported for the offending revision in the dump that is being imported.
+* $4 is the serialization format reported for the offending revision in the dump that is being imported.',
+'import-options-wrong' => 'Used on [[Special:Import]], when one of the options has an error.',
+'import-rootpage-invalid' => 'Used on [[Special:Import]], when the root page is invalid.',
+'import-rootpage-nosubpage' => 'Used on [[Special:Import]], when the import namespace does not support subpages. Parameters:
+* $1 is a namespace name.',
+
+# Import log
+'importlogpage' => '{{doc-logpage}}',
+'importlogpagetext' => 'This text appears at the top of the [//translatewiki.net/w/i.php?title=Special:Log&type=import import log] special page.',
+'import-logentry-upload' => 'This is the text of an entry in the Import log (and Recent Changes), after hour (and date, only in the Import log) and sysop name:
+* $1 is the name of the imported file',
+'import-logentry-upload-detail' => '* $1 - number of revisions, success count',
+'import-logentry-interwiki' => 'Used as action listed in the log.',
+'import-logentry-interwiki-detail' => '* $1 - number of revisions, success count
+* $2 - interwiki name',
+
+# JavaScriptTest
+'javascripttest' => 'Title of the special page [[Special:JavaScriptTest]].
+
+See also:
+* {{msg-mw|Javascripttest|title}}
+* {{msg-mw|Javascripttest-pagetext-noframework|summary}}
+* {{msg-mw|Javascripttest-pagetext-unknownframework|error message}}',
+'javascripttest-title' => 'Title of the special page when running a test suite. Parameters:
+* $1 is the name of the framework, for example QUnit.',
+'javascripttest-pagetext-noframework' => 'Used as summary when no framework specified.
+
+See also:
+* {{msg-mw|Javascripttest|title}}
+* {{msg-mw|Javascripttest-pagetext-noframework|summary}}
+* {{msg-mw|Javascripttest-pagetext-unknownframework|error message}}',
+'javascripttest-pagetext-unknownframework' => 'Error message when given framework ID is not found. Parameters:
+* $1 - the ID of the framework
+See also:
+* {{msg-mw|Javascripttest|title}}
+* {{msg-mw|Javascripttest-pagetext-noframework|summary}}
+* {{msg-mw|Javascripttest-pagetext-unknownframework|error message}}',
+'javascripttest-pagetext-frameworks' => '$1 is the id of the framework.',
+'javascripttest-pagetext-skins' => 'Used as label in [[Special:JavaScriptTest]].',
+'javascripttest-qunit-intro' => '$1 is the configured url to the documentation.',
+'javascripttest-qunit-heading' => '{{Optional}}',
+
+# Tooltip help for the actions
+'tooltip-pt-userpage' => 'Tooltip shown when hovering the mouse over the link to your own User page in the upper-side personal toolbox.
+
+See also:
+<!--* username-->
+* {{msg-mw|Accesskey-pt-userpage}}
+* {{msg-mw|Tooltip-pt-userpage}}',
+'tooltip-pt-mytalk' => 'Tooltip shown when hovering over the {{msg-mw|Mytalk}} link in your personal toolbox (upper right side).
+
+See also:
+* {{msg-mw|Mytalk}}
+* {{msg-mw|Accesskey-pt-mytalk}}
+* {{msg-mw|Tooltip-pt-mytalk}}',
+'tooltip-pt-anontalk' => 'Used as tooltip for link {{msg-mw|Anontalk}}.
+
+See also:
+* {{msg-mw|Anontalk}}
+* {{msg-mw|Accesskey-pt-anontalk}}
+* {{msg-mw|Tooltip-pt-anontalk}}',
+'tooltip-pt-preferences' => 'Tooltip shown when hovering over the {{msg-mw|Mypreferences}} link in your personal toolbox (upper right side).
+
+See also:
+* {{msg-mw|Mypreferences}}
+* {{msg-mw|Accesskey-pt-preferences}}
+* {{msg-mw|Tooltip-pt-preferences}}
+{{Identical|Preferences}}',
+'tooltip-pt-watchlist' => 'Tooltip shown when hovering over the {{msg-mw|Mywatchlist}} link in your personal toolbox (upper right side).
+
+See also:
+* {{msg-mw|Mywatchlist}}
+* {{msg-mw|Accesskey-pt-watchlist}}
+* {{msg-mw|Tooltip-pt-watchlist}}',
+'tooltip-pt-mycontris' => 'Tooltip shown when hovering over the {{msg-mw|Mycontris}} link in your personal toolbox (upper right side).
+
+See also:
+* {{msg-mw|Mycontris}}
+* {{msg-mw|Accesskey-pt-mycontris}}
+* {{msg-mw|Tooltip-pt-mycontris}}',
+'tooltip-pt-login' => "Tooltip shown when hovering over the link 'Log in / create account' in the upper right corner show on all pages while not logged in.",
+'tooltip-pt-anonlogin' => 'Used as tooltip for link {{msg-mw|Login}} in your personal toolbox (upper right side).
+
+See also:
+* {{msg-mw|Login}}
+* {{msg-mw|Accesskey-pt-anonlogin}}
+* {{msg-mw|Tooltip-pt-anonlogin}}',
+'tooltip-pt-logout' => 'Tooltip shown when hovering over the {{msg-mw|Logout}} link in your personal toolbox (upper right side).
+
+See also:
+* {{msg-mw|Logout}}
+* {{msg-mw|Accesskey-pt-logout}}
+* {{msg-mw|Tooltip-pt-logout}}
+{{Identical|Log out}}',
+'tooltip-ca-talk' => "Tooltip shown when hovering over the {{msg-mw|Talk}} tab.
+
+A 'content page' is a page that forms part of the purpose of the wiki. It includes the main page and pages in the main namespace and any other namespaces that are included when the wiki is customised. For example on Wikimedia Commons 'content pages' include pages in the file and category namespaces. On Wikinews 'content pages' include pages in the Portal namespace. For a technical definition of 'content namespaces' see [//www.mediawiki.org/wiki/Manual:Using_custom_namespaces#Content_namespaces Mediawiki].
+
+Possible alternatives to the word 'content' are 'subject matter' or 'wiki subject' or 'wiki purpose'.
+
+See also:
+* {{msg-mw|Talk}}
+* {{msg-mw|Accesskey-ca-talk}}
+* {{msg-mw|Tooltip-ca-talk}}
+{{Identical|Content page}}",
+'tooltip-ca-edit' => 'The tooltip when hovering over the {{msg-mw|Edit}} tab.
+
+See also:
+* {{msg-mw|Edit}}
+* {{msg-mw|Accesskey-ca-edit}}
+* {{msg-mw|Tooltip-ca-edit}}',
+'tooltip-ca-addsection' => 'Tooltip shown when hovering over the "addsection" tab (shown on talk pages).
+
+See also:
+* {{msg-mw|Addsection}}
+* {{msg-mw|Accesskey-ca-addsection}}
+* {{msg-mw|Tooltip-ca-addsection}}',
+'tooltip-ca-viewsource' => 'Tooltip displayed when hovering over the {{msg|viewsource}} tab.
+
+See also:
+* {{msg-mw|Viewsource}}
+* {{msg-mw|Accesskey-ca-viewsource}}
+* {{msg-mw|Tooltip-ca-viewsource}}',
+'tooltip-ca-protect' => 'Used as tooltip for {{msg-mw|Protect}}.
+
+See also:
+* {{msg-mw|Protect}}
+* {{msg-mw|Accesskey-ca-protect}}
+* {{msg-mw|Tooltip-ca-protect}}
+{{Identical|Protect this page}}',
+'tooltip-ca-unprotect' => 'Used as tooltip for {{msg-mw|Unprotect}}.
+
+See also:
+* {{msg-mw|Unprotect}}
+* {{msg-mw|Accesskey-ca-unprotect}}
+* {{msg-mw|Tooltip-ca-unprotect}}
+{{Identical|Unprotect this page}}',
+'tooltip-ca-delete' => 'Tooltip shown when hovering over the {{msg-mw|Delete}} tab.
+
+See also:
+* {{msg-mw|Delete}}
+* {{msg-mw|Accesskey-ca-delete}}
+* {{msg-mw|Tooltip-ca-delete}}
+{{Identical|Delete this page}}',
+'tooltip-ca-undelete' => 'Used as tooltip for {{msg-mw|Undelete}}.
+
+See also:
+* {{msg-mw|Undelete}}
+* {{msg-mw|Accesskey-ca-undelete}}
+* {{msg-mw|Tooltip-ca-undelete}}',
+'tooltip-ca-move' => 'See also:
+* {{msg-mw|Move}}
+* {{msg-mw|Accesskey-ca-move}}
+* {{msg-mw|Tooltip-ca-move}}
+{{Identical|Move this page}}',
+'tooltip-ca-watch' => 'See also:
+* {{msg-mw|Watch}}
+* {{msg-mw|Accesskey-ca-watch}}
+* {{msg-mw|Tooltip-ca-watch}}
+{{Identical|Add this page to your watchlist}}',
+'tooltip-ca-unwatch' => 'Tooltip shown when hovering over the {{msg|unwatch}} tab.
+
+See also:
+* {{msg-mw|Unwatch}}
+* {{msg-mw|Accesskey-ca-unwatch}}
+* {{msg-mw|Tooltip-ca-unwatch}}',
+'tooltip-search' => 'The tooltip when hovering over the search menu.
+
+See also:
+* {{msg-mw|Search}}
+* {{msg-mw|Accesskey-search}}
+* {{msg-mw|Tooltip-search}}',
+'tooltip-search-go' => 'This is the text of the tooltip displayed when hovering the mouse over the {{msg-mw|Go}} button next to the search box.
+
+See also:
+* {{msg-mw|Go}}
+* {{msg-mw|Accesskey-search-go}}
+* {{msg-mw|Tooltip-search-go}}',
+'tooltip-search-fulltext' => 'This is the text of the tooltip displayed when hovering the mouse over the {{msg-mw|Search}} button under the search box.
+
+See also:
+* {{msg-mw|Search}}
+* {{msg-mw|Accesskey-search-fulltext}}
+* {{msg-mw|Tooltip-search-fulltext}}',
+'tooltip-p-logo' => 'Tool tip shown when hovering the mouse over the logo that links to [[Main Page]].
+
+See also:
+* {{msg-mw|Accesskey-p-logo}}
+* {{msg-mw|Tooltip-p-logo}}
+{{Identical|Visit the main page}}',
+'tooltip-n-mainpage' => 'Tool tip shown when hovering the mouse over the link to [[{{MediaWiki:Mainpage}}]].
+
+See also:
+* {{msg-mw|Mainpage}}
+* {{msg-mw|Accesskey-n-mainpage}}
+* {{msg-mw|Tooltip-n-mainpage}}
+{{Identical|Visit the main page}}',
+'tooltip-n-mainpage-description' => 'See also:
+* {{msg-mw|Mainpage-description}}
+* {{msg-mw|Accesskey-n-mainpage-description}}
+* {{msg-mw|Tooltip-n-mainpage-description}}
+{{Identical|Visit the main page}}',
+'tooltip-n-portal' => 'Tooltip shown when hovering over the link to {{msg-mw|Portal}} shown in the side bar menu on all pages.
+
+See also:
+* {{msg-mw|Portal}}
+* {{msg-mw|Portal-url}}
+* {{msg-mw|Accesskey-n-portal}}
+* {{msg-mw|Tooltip-n-portal}}',
+'tooltip-n-currentevents' => 'Tooltip shown when hovering over {{msg|currentevents}} in the sidebar.
+
+See also:
+* {{msg-mw|Currentevents}}
+* {{msg-mw|Currentevents-url}}
+* {{msg-mw|Accesskey-n-currentevents}}
+* {{msg-mw|Tooltip-n-currentevents}}',
+'tooltip-n-recentchanges' => 'The tooltip when hovering over the {{msg-mw|Recentchanges}} link in the sidebar going to the special page [[Special:RecentChanges]].
+
+See also:
+* {{msg-mw|Recentchanges}}
+* {{msg-mw|Accesskey-n-recentchanges}}
+* {{msg-mw|Tooltip-n-recentchanges}}',
+'tooltip-n-randompage' => "Tooltip shown when hovering over the link to 'Random page' shown in the side bar menu on all pages. Clicking the link will show a random page in from the wiki's main namespace.
+
+See also:
+* {{msg-mw|Randompage}}
+* {{msg-mw|Accesskey-n-randompage}}
+* {{msg-mw|Tooltip-n-randompage}}",
+'tooltip-n-help' => "Tooltip shown when hovering over the link 'help' shown in the side bar menu on all pages.
+
+See also:
+* {{msg-mw|Help}}
+* {{msg-mw|Accesskey-n-help}}
+* {{msg-mw|Tooltip-n-help}}",
+'tooltip-t-whatlinkshere' => 'Tooltip shown when hovering over the {{msg|whatlinkshere}} message in the toolbox.
+
+See also:
+* {{msg-mw|Whatlinkshere}}
+* {{msg-mw|Accesskey-t-whatlinkshere}}
+* {{msg-mw|Tooltip-t-whatlinkshere}}',
+'tooltip-t-recentchangeslinked' => 'Used as tooltip for the link {{msg-mw|Recentchangeslinked}}.
+
+See also:
+* {{msg-mw|Recentchangeslinked}}
+* {{msg-mw|Accesskey-t-recentchangeslinked}}
+* {{msg-mw|Tooltip-t-recentchangeslinked}}',
+'tooltip-feed-rss' => 'Used as tooltip for RSS feed link.
+
+See also:
+* {{msg-mw|Feed-rss}}
+* {{msg-mw|Accesskey-feed-rss}}
+* {{msg-mw|Tooltip-feed-rss}}',
+'tooltip-feed-atom' => 'Used as tooltip for Atom feed link.
+
+See also:
+* {{msg-mw|Feed-atom}}
+* {{msg-mw|Accesskey-feed-atom}}
+* {{msg-mw|Tooltip-feed-atom}}',
+'tooltip-t-contributions' => 'Tooltip shown when hovering over {{msg|contributions}} in the toolbox.
+
+See also:
+* {{msg-mw|Contributions}}
+* {{msg-mw|Accesskey-t-contributions}}
+* {{msg-mw|Tooltip-t-contributions}}',
+'tooltip-t-emailuser' => 'Tooltip shown when hovering over the {{msg|emailuser}} link in the toolbox (sidebar, below).
+
+See also:
+* {{msg-mw|Emailuser}}
+* {{msg-mw|Accesskey-t-emailuser}}
+* {{msg-mw|Tooltip-t-emailuser}}',
+'tooltip-t-upload' => 'Tooltip shown when hovering over the link to upload files shown in the side bar menu on all pages.
+
+See also:
+* {{msg-mw|Upload}}
+* {{msg-mw|Accesskey-t-upload}}
+* {{msg-mw|Tooltip-t-upload}}',
+'tooltip-t-specialpages' => 'The tooltip when hovering over the link "[[MediaWiki:Specialpages/{{SUBPAGENAME}}|{{int:specialpages}}]]" going to a list of all special pages available in the wiki.
+
+See also:
+* {{msg-mw|Specialpages}}
+* {{msg-mw|Accesskey-t-specialpages}}
+* {{msg-mw|Tooltip-t-specialpages}}',
+'tooltip-t-print' => 'Tooltip shown when hovering over the link to printable version shown in the side bar menu on all pages.
+
+See also:
+* {{msg-mw|Printableversion}}
+* {{msg-mw|Accesskey-t-print}}
+* {{msg-mw|Tooltip-t-print}}',
+'tooltip-t-permalink' => 'Tooltip shown when hovering over the link to permanent link shown in the side bar menu on all pages.
+
+See also:
+* {{msg-mw|Permalink}}
+* {{msg-mw|Accesskey-t-permalink}}
+* {{msg-mw|Tooltip-t-permalink}}',
+'tooltip-ca-nstab-main' => 'A "content page" is a page that forms part of the purpose of the wiki. It includes the main page and pages in the main namespace and any other namespaces that are included when the wiki is customised. For example on Wikimedia Commons "content pages" include pages in the file and category namespaces. On Wikinews "content pages" include pages in the Portal namespace. For technical definition of "content namespaces" see [//www.mediawiki.org/wiki/Manual:Using_custom_namespaces#Content_namespaces Mediawiki].
+
+Possible alternatives to the word \'content\' are \'subject matter\' or \'wiki subject\' or \'wiki purpose\'.
+
+See also:
+* {{msg-mw|Nstab-main}}
+* {{msg-mw|Accesskey-ca-nstab-main}}
+* {{msg-mw|Tooltip-ca-nstab-main}}
+{{Identical|Content page}}',
+'tooltip-ca-nstab-user' => 'Tooltip shown when hovering over {{msg|nstab-user}} (User namespace tab).
 
-# Namespace 8 related
-'allmessages' => 'The title of the special page [[Special:AllMessages]].',
-'allmessagesname' => 'Used on [[Special:Allmessages]] meaning "the name of the message".
-{{Identical|Name}}',
-'allmessagesdefault' => 'The header for the lower row of each column in the table of [[Special:AllMessages]].',
-'allmessagescurrent' => 'The header for the upper row of each column in the table of [[Special:AllMessages]].',
-'allmessagestext' => 'Summary displayed at the top of [[Special:AllMessages]].',
-'allmessagesnotsupportedDB' => 'This message is displayed on [[Special:AllMessages]] on wikis were the configuration variable $wgUseDatabaseMessages is disabled. It means that the MediaWiki namespace is not used.',
-'allmessages-filter-legend' => 'Used in [[Special:AllMessages]].
+No GENDER-Support for performance reason.
 
-{{Identical|Filter}}',
-'allmessages-filter' => 'Option used in [[Special:AllMessages]].',
-'allmessages-filter-unmodified' => 'Used in [[Special:AllMessages]].',
-'allmessages-filter-all' => 'Used in [[Special:AllMessages]].
-{{Identical|All}}',
-'allmessages-filter-modified' => 'Used in [[Special:AllMessages]].
-{{Identical|Modified}}',
-'allmessages-prefix' => 'Used in [[Special:AllMessages]].',
-'allmessages-language' => 'Used on [[Special:Allmessages]].
+See also:
+* {{msg-mw|Nstab-user}}
+* {{msg-mw|Accesskey-ca-nstab-user}}
+* {{msg-mw|Tooltip-ca-nstab-user}}',
+'tooltip-ca-nstab-media' => 'Used as tooltip for tab of Media namespace.
 
-{{Identical|Language}}',
-'allmessages-filter-submit' => 'Used on [[Special:Allmessages]].
+See also:
+* {{msg-mw|Nstab-media}}
+* {{msg-mw|Accesskey-ca-nstab-media}}
+* {{msg-mw|Tooltip-ca-nstab-media}}',
+'tooltip-ca-nstab-special' => 'Used as tooltip for tab of Special namespace.
 
-{{Identical|Go}}',
+See also:
+* {{msg-mw|Nstab-special}}
+* {{msg-mw|Tooltip-ca-nstab-special}}',
+'tooltip-ca-nstab-project' => 'Used as tooltip for tab of Project namespace.
 
-# Thumbnails
-'thumbnail-more' => '[[Image:Yes.png|thumb|This:]]
-Tooltip shown when hovering over a little sign of a thumb image, to go to the image page (where it is bigger). For example, see the image at the right:',
-'thumbnail_error' => 'Message shown in a thumbnail frame when creation of the thumbnail fails.
-* $1 is the reason',
-'thumbnail_image-type' => 'This is the parameter 1 of the message {{msg-mw|thumbnail error}}',
-'thumbnail_gd-library' => 'This is the parameter 1 of the message {{msg-mw|thumbnail error}}.
-*$1 is a function name of the GD library',
-'thumbnail_image-missing' => 'This is the parameter 1 of the message {{msg-mw|thumbnail error}}.
-*$1 is the path incl. filename of the missing image',
+See also:
+* {{msg-mw|Nstab-project}}
+* {{msg-mw|Accesskey-ca-nstab-project}}
+* {{msg-mw|Tooltip-ca-nstab-project}}',
+'tooltip-ca-nstab-image' => 'Tooltip shown when hovering over {{msg|nstab-image}} (File namespace tab).
 
-# Special:Import
-'import' => 'The title of the special page [[Special:Import]];',
-'import-interwiki-history' => 'This is an option on [[Special:Import]]. Usually, when unchecked, only the first version of a page is imported. When you check the option, all versions are imported. This is important often to check for licensing reasons.',
-'import-interwiki-submit' => '{{Identical|Import}}',
-'import-interwiki-rootpage' => 'Used on [[Special:Import]] as label',
-'import-upload-filename' => 'Used on [[Special:Import]] as label for upload of an XML file containing the pages to import.',
-'xml-error-string' => ':$1: Some kind of message, perhaps name of the error?
-:$2: line number
-:$3: columm number
-:$4: ?? $this->mByte . $this->mContext
-:$5: error description
-----
-:Example
-Import failed: XML import parse failure at line 1, col 1 (byte 3; "- <mediawiki xml"): Empty document',
-'import-upload' => 'Used on [[Special:Import]].
+See also:
+* {{msg-mw|Nstab-image}}
+* {{msg-mw|Accesskey-ca-nstab-image}}
+* {{msg-mw|Tooltip-ca-nstab-image}}',
+'tooltip-ca-nstab-mediawiki' => 'Used as tooltip for tab of MediaWiki namespace.
 
-Related messages: {{msg|right-importupload|pl=yes}} (the user right for this).',
-'import-error-edit' => 'Import error message displayed when importing user has no edit rights for a page. Parameters:
-* $1 is a page name.
 See also:
-* {{msg-mw|import-error-create}}',
-'import-error-create' => 'Import error message displayed when importing user has no create rights for a page. Parameters:
-* $1 is a page name.
+* {{msg-mw|Nstab-mediawiki}}
+* {{msg-mw|Accesskey-ca-nstab-mediawiki}}
+* {{msg-mw|Tooltip-ca-nstab-mediawiki}}',
+'tooltip-ca-nstab-template' => 'Tooltip shown when hovering over the {{msg|nstab-template}} tab.
+
 See also:
-* {{msg-mw|import-error-edit}}',
-'import-error-unserialize' => 'Import error message displayed when a revision could not be unserialized.
-This may happen if the content got corrupted or the serialization format is mis-reported. Parameters:
-* $1 is the name of the page the offending revision belongs to.
-* $2 is the ID of the offending revision, as reported in the dump that is being imported.
-* $3 is the content model reported for the offending revision in the dump that is being imported.
-* $4 is the serialization format reported for the offending revision in the dump that is being imported.',
-'import-options-wrong' => 'Used on [[Special:Import]], when one of the options has an error.',
-'import-rootpage-invalid' => 'Used on [[Special:Import]], when the root page is invalid.',
-'import-rootpage-nosubpage' => 'Used on [[Special:Import]], when the import namespace does not support subpages. Parameters:
-* $1 is a namespace name.',
+* {{msg-mw|Nstab-template}}
+* {{msg-mw|Accesskey-ca-nstab-template}}
+* {{msg-mw|Tooltip-ca-nstab-template}}',
+'tooltip-ca-nstab-help' => 'Tootip shown when hovering over the {{msg|nstab-help}} tab in the Help namespace.
 
-# Import log
-'importlogpage' => '{{doc-logpage}}',
-'importlogpagetext' => 'This text appears at the top of the [//translatewiki.net/w/i.php?title=Special:Log&type=import import log] special page.',
-'import-logentry-upload' => 'This is the text of an entry in the Import log (and Recent Changes), after hour (and date, only in the Import log) and sysop name:
-* $1 is the name of the imported file',
+See also:
+* {{msg-mw|Nstab-help}}
+* {{msg-mw|Accesskey-ca-nstab-help}}
+* {{msg-mw|Tooltip-ca-nstab-help}}',
+'tooltip-ca-nstab-category' => 'Tooltip shown when hovering over the {{msg|nstab-category}} tab.
 
-# JavaScriptTest
-'javascripttest' => 'Title of [[Special:JavaScriptTest|the special page]]',
-'javascripttest-title' => 'Title of the special page when running a test suite. Parameters:
-* $1 is the name of the framework, for example QUnit.',
-'javascripttest-pagetext-unknownframework' => 'Error message when given framework id is not found. $1 is the id of the framework.',
-'javascripttest-pagetext-frameworks' => '$1 is the id of the framework.',
-'javascripttest-qunit-intro' => '$1 is the configured url to the documentation.',
-'javascripttest-qunit-heading' => '{{Optional}}',
+See also:
+* {{msg-mw|Nstab-category}}
+* {{msg-mw|Accesskey-ca-nstab-category}}
+* {{msg-mw|Tooltip-ca-nstab-category}}',
+'tooltip-minoredit' => 'Tooltip shown when hovering over the "{{msg-mw|Minoredit}}" link below the edit form.
 
-# Tooltip help for the actions
-'tooltip-pt-userpage' => 'Tooltip shown when hovering the mouse over the link to your own User page in the upper-side personal toolbox.',
-'tooltip-pt-mytalk' => 'Tooltip shown when hovering over the "my talk" link in your personal toolbox (upper right side).',
-'tooltip-pt-preferences' => 'Tooltip shown when hovering over the {{msg-mw|Mypreferences}} link in your personal toolbox (upper right side).
+See also:
+* {{msg-mw|Minoredit}}
+* {{msg-mw|Accesskey-minoredit}}
+* {{msg-mw|Tooltip-minoredit}}',
+'tooltip-save' => 'This is the text that appears when you hover the mouse over {{msg-mw|Savearticle}} button on the edit page.
 
-{{Identical|My preferences}}',
-'tooltip-pt-watchlist' => 'Tooltip shown when hovering over the "my watchlist" link in your personal toolbox (upper right side).',
-'tooltip-pt-mycontris' => 'Tooltip shown when hovering over the "my contributions" link in your personal toolbox (upper right side).',
-'tooltip-pt-login' => "Tooltip shown when hovering over the link 'Log in / create account' in the upper right corner show on all pages while not logged in.",
-'tooltip-pt-logout' => 'Tooltip shown when hovering over the "Log out" link in your personal toolbox (upper right side).
+See also:
+* {{msg-mw|Savearticle}}
+* {{msg-mw|Accesskey-save}}
+* {{msg-mw|Tooltip-save}}',
+'tooltip-preview' => 'Tooltip shown when hovering over {{msg-mw|Showpreview}} button.
 
-{{Identical|Log out}}',
-'tooltip-ca-talk' => "Tooltip shown when hovering over the \"[[MediaWiki:Talk/{{SUBPAGENAME}}|{{int:talk}}]]\" tab.
+If the length of the translated message is over 60 characters (including spaces) then the end of the message will be cut off when using Firefox 2.0.0.7 browser, Linux operating system and the Monobook skin.
 
-A 'content page' is a page that forms part of the purpose of the wiki. It includes the main page and pages in the main namespace and any other namespaces that are included when the wiki is customised. For example on Wikimedia Commons 'content pages' include pages in the file and category namespaces. On Wikinews 'content pages' include pages in the Portal namespace. For a technical definition of 'content namespaces' see [//www.mediawiki.org/wiki/Manual:Using_custom_namespaces#Content_namespaces Mediawiki].
+See also:
+* {{msg-mw|Showpreview}}
+* {{msg-mw|Accesskey-preview}}
+* {{msg-mw|Tooltip-preview}}',
+'tooltip-diff' => 'This is the text (tooltip) that appears when you hover the mouse over {{msg-mw|Showdiff}} button on the edit page.
 
-Possible alternatives to the word 'content' are 'subject matter' or 'wiki subject' or 'wiki purpose'.
+See also:
+* {{msg-mw|Showdiff}}
+* {{msg-mw|Accesskey-diff}}
+* {{msg-mw|Tooltip-diff}}',
+'tooltip-compareselectedversions' => 'Tooltip of {{msg|compareselectedversions}} (which is used as button in history pages).
 
-{{Identical|Content page}}",
-'tooltip-ca-edit' => 'The tooltip when hovering over the "[[MediaWiki:Edit/{{SUBPAGENAME}}|{{int:edit}}]]" tab.',
-'tooltip-ca-addsection' => 'Tooltip shown when hovering over the "addsection" tab (shown on talk pages).',
-'tooltip-ca-viewsource' => 'Tooltip displayed when hovering over the {{msg|viewsource}} tab.',
-'tooltip-ca-protect' => '{{Identical|Protect this page}}',
-'tooltip-ca-unprotect' => '{{Identical|Unprotect this page}}',
-'tooltip-ca-delete' => 'Tooltip shown when hovering over the "[[MediaWiki:Delete/{{SUBPAGENAME}}|{{int:delete}}]]" tab.
+See also:
+* {{msg-mw|Compareselectedversions}}
+* {{msg-mw|Accesskey-compareselectedversions}}
+* {{msg-mw|Tooltip-compareselectedversions}}',
+'tooltip-watch' => 'Used as tooltip for checkbox in Editor page.
 
-{{Identical|Delete this page}}',
-'tooltip-ca-move' => '{{Identical|Move this page}}',
-'tooltip-ca-watch' => '{{Identical|Add this page to your watchlist}}',
-'tooltip-ca-unwatch' => 'Tooltip shown when hovering over the {{msg|unwatch}} tab.',
-'tooltip-search' => 'The tooltip when hovering over the search menu.',
-'tooltip-search-go' => 'This is the text of the tooltip displayed when hovering the mouse over the “{{msg-mw|Go}}” button next to the search box.',
-'tooltip-search-fulltext' => 'This is the text of the tooltip displayed when hovering the mouse over the “{{msg-mw|Search}}” button under the search box.',
-'tooltip-p-logo' => 'Tool tip shown when hovering the mouse over the logo that links to [[Main Page]].
-{{Identical|Visit the main page}}',
-'tooltip-n-mainpage' => 'Tool tip shown when hovering the mouse over the link to [[{{MediaWiki:Mainpage}}]].
-{{Identical|Visit the main page}}',
-'tooltip-n-mainpage-description' => '{{Identical|Visit the main page}}',
-'tooltip-n-portal' => "Tooltip shown when hovering over the link to 'Community portal' shown in the side bar menu on all pages.",
-'tooltip-n-currentevents' => 'Tooltip shown when hovering over {{msg|currentevents}} in the sidebar.',
-'tooltip-n-recentchanges' => 'The tooltip when hovering over the "[[MediaWiki:Recentchanges/{{SUBPAGENAME}}|{{int:recentchanges}}]]" link in the sidebar going to the special page [[Special:RecentChanges]].',
-'tooltip-n-randompage' => "Tooltip shown when hovering over the link to 'Random page' shown in the side bar menu on all pages. Clicking the link will show a random page in from the wiki's main namespace.",
-'tooltip-n-help' => "Tooltip shown when hovering over the link 'help' shown in the side bar menu on all pages.",
-'tooltip-t-whatlinkshere' => 'Tooltip shown when hovering over the {{msg|whatlinkshere}} message in the toolbox.',
-'tooltip-t-contributions' => 'Tooltip shown when hovering over {{msg|contributions}} in the toolbox.',
-'tooltip-t-emailuser' => 'Tooltip shown when hovering over the {{msg|emailuser}} link in the toolbox (sidebar, below).',
-'tooltip-t-upload' => 'Tooltip shown when hovering over the link to upload files shown in the side bar menu on all pages.',
-'tooltip-t-specialpages' => 'The tooltip when hovering over the link "[[MediaWiki:Specialpages/{{SUBPAGENAME}}|{{int:specialpages}}]]" going to a list of all special pages available in the wiki.',
-'tooltip-ca-nstab-main' => "A 'content page' is a page that forms part of the purpose of the wiki. It includes the main page and pages in the main namespace and any other namespaces that are included when the wiki is customised. For example on Wikimedia Commons 'content pages' include pages in the file and category namespaces. On Wikinews 'content pages' include pages in the Portal namespace. For technical definition of 'content namespaces' see [//www.mediawiki.org/wiki/Manual:Using_custom_namespaces#Content_namespaces Mediawiki].
+See also:
+* {{msg-mw|Watchthis}}
+* {{msg-mw|Accesskey-watch}}
+* {{msg-mw|Tooltip-watch}}
+{{Identical|Add this page to your watchlist}}',
+'tooltip-watchlistedit-normal-submit' => 'Tooltip for {{msg-mw|watchlistedit-normal-submit}} (used as button on [[Special:EditWatchlist]]).
 
-Possible alternatives to the word 'content' are 'subject matter' or 'wiki subject' or 'wiki purpose'.
+See also:
+* {{msg-mw|Watchlistedit-normal-submit}}
+* {{msg-mw|Accesskey-watchlistedit-normal-submit}}
+* {{msg-mw|Tooltip-watchlistedit-normal-submit}}',
+'tooltip-watchlistedit-raw-submit' => 'Tooltip for {{msg-mw|watchlistedit-raw-submit}} (used as button on [[Special:EditWatchlist/raw]]).
 
-{{Identical|Content page}}",
-'tooltip-ca-nstab-user' => 'Tooltip shown when hovering over {{msg|nstab-user}} (User namespace tab).
+See also:
+* {{msg-mw|Watchlistedit-raw-submit}}
+* {{msg-mw|Accesskey-watchlistedit-raw-submit}}
+* {{msg-mw|Tooltip-watchlistedit-raw-submit}}',
+'tooltip-recreate' => 'Used as tooltip for Recreate link.
+
+See also:
+* {{msg-mw|Recreate}}
+* {{msg-mw|Tooltip-recreate}}',
+'tooltip-upload' => 'Used as tooltip for Upload button.
 
-No GENDER-Support for performance reason.',
-'tooltip-ca-nstab-image' => 'Tooltip shown when hovering over {{msg|nstab-image}} (Image namespace tab).',
-'tooltip-ca-nstab-template' => 'Tooltip shown when hovering over the {{msg|nstab-template}} tab.',
-'tooltip-ca-nstab-help' => 'Tootip shown when hovering over the {{msg|nstab-help}} tab in the Help namespace.',
-'tooltip-ca-nstab-category' => 'Tooltip shown when hovering over the {{msg|nstab-category}} tab.',
-'tooltip-minoredit' => 'Tooltip shown when hovering over the "{{msg-mw|Minoredit}}" link below the edit form.',
-'tooltip-save' => "This is the text that appears when you hover the mouse over the 'Save page' button on the edit page",
-'tooltip-preview' => 'Tooltip shown when hovering over the "Show preview" button.
-
-If the length of the translated message is over 60 characters (including spaces) then the end of the message will be cut off when using Firefox 2.0.0.7 browser, Linux operating system and the Monobook skin.',
-'tooltip-diff' => 'This is the text (tooltip) that appears when you hover the mouse over the "Show changes" button ({{msg|showdiff}}) on the edit page.',
-'tooltip-compareselectedversions' => 'Tooltip of {{msg|compareselectedversions}} (which is used as button in history pages).',
-'tooltip-watch' => '{{Identical|Add this page to your watchlist}}',
-'tooltip-watchlistedit-normal-submit' => 'Tooltip for {{msg|watchlistedit-normal-submit}} (used as button on [[Special:EditWatchlist]]).',
-'tooltip-watchlistedit-raw-submit' => 'Tooltip for {{msg|watchlistedit-raw-submit}} (used as button on [[Special:EditWatchlist/raw]]).',
+See also:
+* {{msg-mw|Uploadbtn}}
+* {{msg-mw|Accesskey-upload}}
+* {{msg-mw|Tooltip-upload}}',
 'tooltip-rollback' => 'Tooltip of the rollback link on the history page and the diff view {{msg-mw|rollbacklinkcount}}
 {{Identical|Rollback}}
 {{Identical|Revert}}',
 'tooltip-undo' => 'Tooltip of the undo link on the history page and the diff view {{msg-mw|editundo}}
 {{Identical|Undo}}{{Identical|Revert}}',
+'tooltip-preferences-save' => 'Used as tooltip for Save button.
+
+See also:
+* {{msg-mw|Saveprefs}}
+* {{msg-mw|Accesskey-preferences-save}}
+* {{msg-mw|Tooltip-preferences-save}}',
+'tooltip-summary' => 'Used as tooltip for Summary input box in Editor page.
+
+See also:
+* {{msg-mw|Summary}}
+* {{msg-mw|Accesskey-summary}}
+* {{msg-mw|Tooltip-summary}}',
 
 # Stylesheets
 'common.css' => '{{optional}}
@@ -3564,6 +6423,9 @@ JS for users using Monobook skin.',
 'group-sysop.js' => '{{doc-group|sysop|js}}',
 'group-bureaucrat.js' => '{{doc-group|bureaucrat|js}}',
 
+# Metadata
+'notacceptable' => 'Used as error message for HTTP "406 Not acceptable" error.',
+
 # Attribution
 'anonymous' => 'This message is shown when viewing the credits of a page (example: {{fullurl:Main Page|action=credits}}). Note that this action is disabled by default (currently enabled on translatewiki.net).
 This message appears at the very end of the list of names in the message [[MediaWiki:Othercontribs/{{SUBPAGENAME}}|othercontribs]]. If there are no anonymous users in the credits list then this message does not appear at all.
@@ -3578,7 +6440,7 @@ Parameters:
 This message is the variable $3 in the message {{msg-mw|lastmodifiedatby}}. This message only appears if the user is anonymous. The variable $1 in this message is a link to the user's contributions.
 
 See also {{msg-mw|Anonusers}} and {{msg-mw|Siteuser}}.",
-'lastmodifiedatby' => "This message is shown when viewing the credits of a page (example: {{fullurl:Main Page|action=credits}}). Note that this action is disabled by default (currently enabled on translatewiki.net).
+'lastmodifiedatby' => "This message is shown when viewing the credits of a page (example: [{{fullurl:Main Page|action=credits}}]). Note that this action is disabled by default (currently enabled on translatewiki.net).
 * $1: date
 * $2: time
 * $3: if the user has entered his 'real name' in his preferences then this variable is his 'real name'. If the user has not entered his 'real name' in his preferences then this variable is the message [[Mediawiki:siteuser/{{SUBPAGENAME}}]], which includes his username.
@@ -3613,6 +6475,27 @@ See also {{msg-mw|Anonuser}} and {{msg-mw|Siteusers}}.',
 'nocredits' => 'This message is shown when viewing the credits of a page (example: {{fullurl:Main Page|action=credits}}) but when there are no credits available. Note that the credits action is disabled by default (currently enabled on translatewiki.net).',
 
 # Spam protection
+'spamprotectiontitle' => 'Used as page title when the edit contains spam.
+
+See also:
+* {{msg-mw|Spamprotectiontext|text}}
+* {{msg-mw|Spamprotectionmatch|if matched}}
+* {{msg-mw|Yourdiff}}
+* {{msg-mw|Yourtext}}',
+'spamprotectiontext' => 'Used when the edit contains spam.
+
+See also:
+* {{msg-mw|Spamprotectiontitle|title}}
+* {{msg-mw|Spamprotectionmatch|if matched}}
+* {{msg-mw|Yourdiff}}
+* {{msg-mw|Yourtext}}',
+'spamprotectionmatch' => 'Used when the user\'s edit contains spam.
+* $1 - matching "spam filter"
+See also:
+* {{msg-mw|Spamprotectiontitle|title}}
+* {{msg-mw|Spamprotectiontext|text}}
+* {{msg-mw|Yourdiff}}
+* {{msg-mw|Yourtext}}',
 'spam_reverting' => 'Edit summary for spam cleanup script. Used when a page is reverted because all later revisions contained a particular link. Parameters:
 * $1 is a spammed domain name.',
 'spam_blanking' => 'Edit summary for spam cleanup script. Used when a page is blanked (made to have no content, but still exist) because the script could not find an appropriate revision to set the page to. Parameters:
@@ -3636,15 +6519,16 @@ See also {{msg-mw|Anonuser}} and {{msg-mw|Siteusers}}.',
 'pageinfo-robot-policy' => 'The search engine status of the page.
 *{{msg-mw|Pageinfo-robot-index}}
 *{{msg-mw|Pageinfo-robot-noindex}}',
-'pageinfo-robot-index' => 'An indication that the page is indexable.',
-'pageinfo-robot-noindex' => 'An indication that the page is not indexable.',
+'pageinfo-robot-index' => 'An indication that the page is indexable by search engines, that is listed in their search results.',
+'pageinfo-robot-noindex' => 'An indication that the page is not indexable (that is, is not listed on the results page of a search engine).',
 'pageinfo-views' => 'The number of times the page has been viewed.',
 'pageinfo-watchers' => 'The number of users watching the page.',
 'pageinfo-redirects-name' => "The number of redirects to the page.
 
 Used as link text, linked to '{{int:Whatlinkshere-title}}' page ([[Special:WhatLinksHere]]).",
-'pageinfo-redirects-value' => 'Parameters:
-* $1 is the number of redirects to the page.',
+'pageinfo-redirects-value' => '{{Optional}}
+Parameters:
+* $1 - the number of redirects to the page',
 'pageinfo-subpages-name' => "The number of subpages of the page.
 
 Used as link text, linked to '{{int:Prefixindex}}' page ([[Special:PrefixIndex]]).",
@@ -3665,10 +6549,17 @@ Used as link text, linked to '{{int:Prefixindex}}' page ([[Special:PrefixIndex]]
 'pageinfo-hidden-categories' => 'The list of hidden categories on the page. Parameters:
 * $1 is the number of hidden categories on the page.',
 'pageinfo-templates' => 'The list of templates transcluded within the page. Parameters:
-* $1 is the number of templates transcluded within the page.',
+* $1 is the number of templates transcluded within the current page.
+See also:
+* {{msg-mw|Pageinfo-transclusions}}',
+'pageinfo-transclusions' => 'The list of pages on which this page is transcluded. Parameters:
+* $1 is the number of pages the current page is transcluded on.
+See also:
+* {{msg-mw|Pageinfo-templates}}',
 'pageinfo-toolboxlink' => "Information link for the page (like 'What links here', but to action=info for the current page instead)",
-'pageinfo-redirectsto' => 'Key for the row shown if this page is a redirect.',
-'pageinfo-redirectsto-info' => 'Text to put in parentheses for the link to the action=info of the redirect target.',
+'pageinfo-redirectsto' => 'Key for the row shown if this page is a redirect. Verb. See [http://en.wikipedia.org/w/index.php?title=Main_page&action=info example].',
+'pageinfo-redirectsto-info' => 'Text to put in parentheses for the link to the action=info of the redirect target.
+{{Identical|Info}}',
 'pageinfo-contentpage' => 'Key for the row shown on [{{fullurl:News|action=info}} action=info] if this page is [[mw:Manual:Article count|counted as a content page]]',
 'pageinfo-contentpage-yes' => 'Yes, this page is a content page',
 'pageinfo-protect-cascading' => 'Key for the row which shows whether this page has cascading protection enabled
@@ -3678,6 +6569,16 @@ Used as link text, linked to '{{int:Prefixindex}}' page ([[Special:PrefixIndex]]
 *{{msg-mw|Pageinfo-protect-cascading}}
 *{{msg-mw|Pageinfo-protect-cascading-yes}}',
 'pageinfo-protect-cascading-from' => 'Key for a list of pages where protections are cascading from',
+'pageinfo-category-info' => 'Showed on the page displaying information about the current page (add "?action=info" to the URL)',
+'pageinfo-category-pages' => 'See also:
+* {{msg-mw|Pageinfo-category-subcats}}
+* {{msg-mw|Pageinfo-category-files}}',
+'pageinfo-category-subcats' => 'See also:
+* {{msg-mw|Pageinfo-category-pages}}
+* {{msg-mw|Pageinfo-category-files}}',
+'pageinfo-category-files' => 'See also:
+* {{msg-mw|Pageinfo-category-pages}}
+* {{msg-mw|Pageinfo-category-subcats}}',
 
 # Skin names
 'skinname-standard' => '{{optional}}
@@ -3692,14 +6593,75 @@ Used as link text, linked to '{{int:Prefixindex}}' page ([[Special:PrefixIndex]]
 'skinname-vector' => '{{optional}}',
 
 # Patrolling
-'markedaspatrolledtext' => '{{Identical|Markedaspatrolled}}',
-'markedaspatrollednotify' => 'Notification shown after a change has been marked as patrolled, $1 is the page title',
-'markedaspatrollederrornotify' => 'Notification shown after marking a change as patrolled failed',
+'markaspatrolleddiff' => '{{doc-actionlink}}
+See also:
+* {{msg-mw|Markaspatrolledtext}}',
+'markaspatrolledtext' => '{{doc-actionlink}}
+See also:
+* {{msg-mw|Markaspatrolleddiff}}',
+'markedaspatrolled' => 'Used as title of the message {{msg-mw|Markedaspatrolledtext}}, when marking a change as patrolled.
+{{Related|Markedaspatrolled}}',
+'markedaspatrolledtext' => 'Used when marking a change as patrolled.
+
+The title for this message is {{msg-mw|Markedaspatrolled}}.
+{{Related|Markedaspatrolled}}',
+'rcpatroldisabled' => 'Used as title of the error message {{msg-mw|Rcpatroldisabledtext}}, when marking a change as patrolled.
+{{Related|Markedaspatrolled}}',
+'rcpatroldisabledtext' => 'Used as the error message when marking a change as patrolled.
+
+The title for this error message is {{msg-mw|Rcpatroldisabled}}.
+{{Related|Markedaspatrolled}}',
+'markedaspatrollederror' => 'Used as title of the following error messages:
+* {{msg-mw|Markedaspatrollederrortext}}
+* {{msg-mw|Markedaspatrollederror-noautopatrol}}
+This message is used when marking a change as patrolled.
+{{Related|Markedaspatrolled}}',
+'markedaspatrollederrortext' => 'Used as the error message when marking a change as patrolled.
+
+The title for this error message is {{msg-mw|Markedaspatrollederror}}.
+{{Related|Markedaspatrolled}}',
+'markedaspatrollederror-noautopatrol' => 'Used as error message when marking a change as patrolled.
+
+The title for this error message is {{msg-mw|Markedaspatrollederror}}.
+{{Related|Markedaspatrolled}}',
+'markedaspatrollednotify' => 'Notification shown after the user has marked a change as patrolled successfully. Parameters:
+* $1 - the page title
+See also:
+* {{msg-mw|Markedaspatrollederrornotify}} - error message on failure',
+'markedaspatrollederrornotify' => 'Notification shown after the user has failed to mark a change as patrolled.
+
+See also:
+* {{msg-mw|Markedaspatrollednotify}} - notification on success',
 
 # Patrol log
 'patrol-log-page' => '{{doc-logpage}}',
 'patrol-log-header' => 'Text that appears above the log entries on the [[Special:log|patrol log]].',
-'log-show-hide-patrol' => '* $1 is one of {{msg|show}} or {{msg|hide}}',
+'log-show-hide-patrol' => '* $1 is one of {{msg-mw|show}} or {{msg-mw|hide}}',
+
+# Image deletion
+'deletedrevision' => '* $1 - archive name of old image',
+'filedeleteerror-short' => 'Used as error message. See also:
+* {{msg-mw|Filedeleteerror-short}}
+* {{msg-mw|Filedeleteerror-long}}',
+'filedeleteerror-long' => 'Used as error message. See also:
+* {{msg-mw|Filedeleteerror-short}}
+* {{msg-mw|Filedeleteerror-long}}',
+'filedelete-missing' => 'Used as error message. Parameters:
+* $1 - filename
+See also:
+* {{msg-mw|Filedelete-old-unregistered}}
+* {{msg-mw|Filedelete-current-unregistered}}',
+'filedelete-old-unregistered' => 'Used as error message. Parameters:
+* $1 - name
+See also:
+* {{msg-mw|Filedelete-current-unregistered}}
+* {{msg-mw|Filedelete-missing}}',
+'filedelete-current-unregistered' => 'Used as error message. Parameters:
+* $1 - filename
+See also:
+* {{msg-mw|Filedelete-old-unregistered}}
+* {{msg-mw|Filedelete-missing}}',
+'filedelete-archive-read-only' => '* $1 - directory name',
 
 # Browsing diffs
 'previousdiff' => 'Used when viewing the difference between edits. See also {{msg|nextdiff}}.',
@@ -3707,7 +6669,14 @@ Used as link text, linked to '{{int:Prefixindex}}' page ([[Special:PrefixIndex]]
 
 # Media information
 'mediawarning' => 'Shows up on file description pages if the file type is not listed in [[mw:Manual:$wgTrustedMediaFormats|Manual:$wgTrustedMediaFormats]].',
-'imagemaxsize' => 'This is used in Special:Preferences, under Files.',
+'imagemaxsize' => 'This is used in Special:Preferences, under Files.
+
+See also:
+* {{msg-mw|Thumbsize}}',
+'thumbsize' => 'Used as label.
+
+See also:
+* {{msg-mw|Imagemaxsize}}',
 'widthheight' => '{{optional}}',
 'widthheightpage' => 'This message is used on image pages in the dimensions column in the file history section for images  with more than one page.
 
@@ -3741,7 +6710,12 @@ Start with a lowercase letter, unless the first word is “SVG”.',
 * $3 is the file size including a unit (for example "10 KB").
 
 Start with a lowercase letter, unless the first word is “SVG”.',
+'svg-long-error' => 'Displayed for invalid SVG file metadata. Parameters:
+* $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-preview' => 'Message shown under the image description page thumbnail, next to {{msg-mw|show-big-image-other}}.',
 'show-big-image-other' => 'Message shown under the image description page thumbnail, next to {{msg-mw|show-big-image-preview}}, if the image is in high resolution.',
 'show-big-image-size' => '
 Parameters:
@@ -3771,7 +6745,12 @@ For example of message in use see [[:File:Mouse10.gif]].',
 
 {{Identical|$1 bots}}',
 'noimages' => "This is shown on the special page [[Special:NewImages]], when there aren't any recently uploaded files.",
-'ilsubmit' => '{{Identical|Search}}',
+'ilsubmit' => 'Used as label for input box in the MIMESearch form on [[Special:MIMESearch]].
+
+See also:
+* {{msg-mw|Mimesearch|page title}}
+* {{msg-mw|Mimetype|label for input box}}
+{{Identical|Search}}',
 'bydate' => '{{Identical|Date}}',
 'sp-newimages-showfrom' => "This is a link on [[Special:NewImages]] which takes you to a gallery of the newest files.
 * $1 is a date (example: ''19 March 2008'')
@@ -3804,7 +6783,8 @@ Part of variable $1 in {{msg-mw|Ago}}',
 
 See also {{msg-mw|Minutes-abbrev}}
 
-Part of variable $1 in {{msg-mw|Ago}}',
+Part of variable $1 in {{msg-mw|Ago}}.
+{{Identical|Minute}}',
 'hours' => 'Full word for "hours". $1 is the number of hours.
 
 See also {{msg-mw|Hours-abbrev}}
@@ -3816,11 +6796,19 @@ See also {{msg-mw|Days-abbrev}}
 
 Part of variable $1 in {{msg-mw|Ago}}
 {{Identical|Day}}',
+'months' => 'Full word for "months". $1 is the number of months.
+
+Part of variable $1 in {{msg-mw|Ago}}',
+'years' => 'Full word for "years". $1 is the number of years.
+
+Part of variable $1 in {{msg-mw|Ago}}',
 'ago' => 'Phrase for indicating how long ago something happened. $1 is something like "3 days 10 hours", taken from these messages:
 *{{msg-mw|Seconds}}
 *{{msg-mw|Minutes}}
 *{{msg-mw|Hours}}
-*{{msg-mw|Days}}',
+*{{msg-mw|Days}}
+*{{msg-mw|Months}}
+*{{msg-mw|Years}}',
 'just-now' => 'Phrase for indicating something happened just now.',
 
 # Bad image list
@@ -3944,15 +6932,23 @@ Similar to "metadata-langitem" but for the case where a multilingual property ha
 'exif-bitspersample' => 'Exif is a format for storing metadata in image files. See this [http://en.wikipedia.org/wiki/Exchangeable_image_file_format Wikipedia article] and the example at the bottom of [http://commons.wikimedia.org/wiki/File:Phalacrocorax-auritus-020.jpg this page on Commons]. The tags are explained [http://www.awaresystems.be/imaging/tiff/tifftags/privateifd/exif.html briefly] and [http://www.kodak.com/global/plugins/acrobat/en/service/digCam/exifStandard2.pdf in further detail].',
 'exif-compression' => 'Exif is a format for storing metadata in image files. See this [http://en.wikipedia.org/wiki/Exchangeable_image_file_format Wikipedia article] and the example at the bottom of [http://commons.wikimedia.org/wiki/File:Phalacrocorax-auritus-020.jpg this page on Commons]. The tags are explained [http://www.awaresystems.be/imaging/tiff/tifftags/privateifd/exif.html briefly] and [http://www.kodak.com/global/plugins/acrobat/en/service/digCam/exifStandard2.pdf in further detail].
 
-This field labels what the compression of the image is. It is commonly seen in Tiff images. It uses messages like {{msg-mw|exif-compression-1}} for the value. http://en.wikipedia.org/wiki/TIFF#TIFF_Compression_Tag has information about this field.',
+This field labels what the compression of the image is. It is commonly seen in Tiff images. It uses messages like {{msg-mw|exif-compression-1}} for the value. http://en.wikipedia.org/wiki/TIFF#TIFF_Compression_Tag has information about this field.
+{{Related|Exif-compression}}',
 'exif-photometricinterpretation' => 'Exif is a format for storing metadata in image files. See this [http://en.wikipedia.org/wiki/Exchangeable_image_file_format Wikipedia article] and the example at the bottom of [http://commons.wikimedia.org/wiki/File:Phalacrocorax-auritus-020.jpg this page on Commons]. The tags are explained [http://www.awaresystems.be/imaging/tiff/tifftags/privateifd/exif.html briefly] and [http://www.kodak.com/global/plugins/acrobat/en/service/digCam/exifStandard2.pdf in further detail].',
 'exif-orientation' => 'Exif is a format for storing metadata in image files. See this [http://en.wikipedia.org/wiki/Exchangeable_image_file_format Wikipedia article] and the example at the bottom of [http://commons.wikimedia.org/wiki/File:Phalacrocorax-auritus-020.jpg this page on Commons]. The tags are explained [http://www.awaresystems.be/imaging/tiff/tifftags/privateifd/exif.html briefly] and [http://www.kodak.com/global/plugins/acrobat/en/service/digCam/exifStandard2.pdf in further detail].
 
-For specific information on the orientation tag, see http://sylvana.net/jpegcrop/exif_orientation.html',
+For specific information on the orientation tag, see http://sylvana.net/jpegcrop/exif_orientation.html
+{{Related|Exif-orientation}}',
 'exif-samplesperpixel' => 'Exif is a format for storing metadata in image files. See this [http://en.wikipedia.org/wiki/Exchangeable_image_file_format Wikipedia article] and the example at the bottom of [http://commons.wikimedia.org/wiki/File:Phalacrocorax-auritus-020.jpg this page on Commons]. The tags are explained [http://www.awaresystems.be/imaging/tiff/tifftags/privateifd/exif.html briefly] and [http://www.kodak.com/global/plugins/acrobat/en/service/digCam/exifStandard2.pdf in further detail].',
-'exif-planarconfiguration' => 'Exif is a format for storing metadata in image files. See this [http://en.wikipedia.org/wiki/Exchangeable_image_file_format Wikipedia article] and the example at the bottom of [http://commons.wikimedia.org/wiki/File:Phalacrocorax-auritus-020.jpg this page on Commons]. The tags are explained [http://www.awaresystems.be/imaging/tiff/tifftags/privateifd/exif.html briefly] and [http://www.kodak.com/global/plugins/acrobat/en/service/digCam/exifStandard2.pdf in further detail].',
+'exif-planarconfiguration' => 'Exif is a format for storing metadata in image files. See this [http://en.wikipedia.org/wiki/Exchangeable_image_file_format Wikipedia article] and the example at the bottom of [http://commons.wikimedia.org/wiki/File:Phalacrocorax-auritus-020.jpg this page on Commons]. The tags are explained [http://www.awaresystems.be/imaging/tiff/tifftags/privateifd/exif.html briefly] and [http://www.kodak.com/global/plugins/acrobat/en/service/digCam/exifStandard2.pdf in further detail].
+
+See also:
+* {{msg-mw|Exif-planarconfiguration}}
+* {{msg-mw|Exif-planarconfiguration-1}}
+* {{msg-mw|Exif-planarconfiguration-2}}',
 'exif-ycbcrsubsampling' => 'Exif is a format for storing metadata in image files. See this [http://en.wikipedia.org/wiki/Exchangeable_image_file_format Wikipedia article] and the example at the bottom of [http://commons.wikimedia.org/wiki/File:Phalacrocorax-auritus-020.jpg this page on Commons]. The tags are explained [http://www.awaresystems.be/imaging/tiff/tifftags/privateifd/exif.html briefly] and [http://www.kodak.com/global/plugins/acrobat/en/service/digCam/exifStandard2.pdf in further detail].',
-'exif-ycbcrpositioning' => 'Exif is a format for storing metadata in image files. See this [http://en.wikipedia.org/wiki/Exchangeable_image_file_format Wikipedia article] and the example at the bottom of [http://commons.wikimedia.org/wiki/File:Phalacrocorax-auritus-020.jpg this page on Commons]. The tags are explained [http://www.awaresystems.be/imaging/tiff/tifftags/privateifd/exif.html briefly] and [http://www.kodak.com/global/plugins/acrobat/en/service/digCam/exifStandard2.pdf in further detail].',
+'exif-ycbcrpositioning' => 'Exif is a format for storing metadata in image files. See this [http://en.wikipedia.org/wiki/Exchangeable_image_file_format Wikipedia article] and the example at the bottom of [http://commons.wikimedia.org/wiki/File:Phalacrocorax-auritus-020.jpg this page on Commons]. The tags are explained [http://www.awaresystems.be/imaging/tiff/tifftags/privateifd/exif.html briefly] and [http://www.kodak.com/global/plugins/acrobat/en/service/digCam/exifStandard2.pdf in further detail].
+{{Related|Exif-ycbcrpositioning}}',
 'exif-xresolution' => 'Exif is a format for storing metadata in image files. See this [http://en.wikipedia.org/wiki/Exchangeable_image_file_format Wikipedia article] and the example at the bottom of [http://commons.wikimedia.org/wiki/File:Phalacrocorax-auritus-020.jpg this page on Commons]. The tags are explained [http://www.awaresystems.be/imaging/tiff/tifftags/privateifd/exif.html briefly] and [http://www.kodak.com/global/plugins/acrobat/en/service/digCam/exifStandard2.pdf in further detail].
 
 This is the horizontal resolution in either dots/inch or dots/cm.',
@@ -4011,10 +7007,16 @@ Version of exif standard photo uses. Typically this is 2.22',
 Version of flashpix used. Flashpix is a format used for storing some types of metadata in image. It is not as commonly used as EXIF, and mediawiki currently cannot read Flashpix data.',
 'exif-colorspace' => 'Exif is a format for storing metadata in image files. See this [http://en.wikipedia.org/wiki/Exchangeable_image_file_format Wikipedia article] and the example at the bottom of [http://commons.wikimedia.org/wiki/File:Phalacrocorax-auritus-020.jpg this page on Commons]. The tags are explained [http://www.awaresystems.be/imaging/tiff/tifftags/privateifd/exif.html briefly] and [http://www.kodak.com/global/plugins/acrobat/en/service/digCam/exifStandard2.pdf in further detail].
 
-The colorspace of the photo. This tells the computer how to make the colours in the photo be more true to the original photo. Typical values for this are sRGB or uncalibrated. This only gives information on colour information given in the exif-colorspace property. However, colour information is often stored elsewhere in the photo.',
+The colorspace of the photo. This tells the computer how to make the colours in the photo be more true to the original photo. Typical values for this are sRGB or uncalibrated. This only gives information on colour information given in the exif-colorspace property. However, colour information is often stored elsewhere in the photo.
+
+See also:
+* {{msg-mw|Exif-colorspace}}
+* {{msg-mw|Exif-colorspace-1|optional}}
+* {{msg-mw|Exif-colorspace-65535}}',
 'exif-componentsconfiguration' => 'Exif is a format for storing metadata in image files. See this [http://en.wikipedia.org/wiki/Exchangeable_image_file_format Wikipedia article] and the example at the bottom of [http://commons.wikimedia.org/wiki/File:Phalacrocorax-auritus-020.jpg this page on Commons]. The tags are explained [http://www.awaresystems.be/imaging/tiff/tifftags/privateifd/exif.html briefly] and [http://www.kodak.com/global/plugins/acrobat/en/service/digCam/exifStandard2.pdf in further detail].
 
-This contains how the information in the picture is stored. This is most commonly Y, Cr, Cb to specify luma, red, blue. RGB is also possible to specify Red, Green, Blue.',
+This contains how the information in the picture is stored. This is most commonly Y, Cr, Cb to specify luma, red, blue. RGB is also possible to specify Red, Green, Blue.
+{{Related|Exif-componentsconfiguration}}',
 'exif-compressedbitsperpixel' => 'Exif is a format for storing metadata in image files. See this [http://en.wikipedia.org/wiki/Exchangeable_image_file_format Wikipedia article] and the example at the bottom of [http://commons.wikimedia.org/wiki/File:Phalacrocorax-auritus-020.jpg this page on Commons]. The tags are explained [http://www.awaresystems.be/imaging/tiff/tifftags/privateifd/exif.html briefly] and [http://www.kodak.com/global/plugins/acrobat/en/service/digCam/exifStandard2.pdf in further detail].',
 'exif-pixelydimension' => 'Exif is a format for storing metadata in image files. See this [http://en.wikipedia.org/wiki/Exchangeable_image_file_format Wikipedia article] and the example at the bottom of [http://commons.wikimedia.org/wiki/File:Phalacrocorax-auritus-020.jpg this page on Commons]. The tags are explained [http://www.awaresystems.be/imaging/tiff/tifftags/privateifd/exif.html briefly] and [http://www.kodak.com/global/plugins/acrobat/en/service/digCam/exifStandard2.pdf in further detail].',
 'exif-pixelxdimension' => 'Exif is a format for storing metadata in image files. See this [http://en.wikipedia.org/wiki/Exchangeable_image_file_format Wikipedia article] and the example at the bottom of [http://commons.wikimedia.org/wiki/File:Phalacrocorax-auritus-020.jpg this page on Commons]. The tags are explained [http://www.awaresystems.be/imaging/tiff/tifftags/privateifd/exif.html briefly] and [http://www.kodak.com/global/plugins/acrobat/en/service/digCam/exifStandard2.pdf in further detail].',
@@ -4057,7 +7059,8 @@ Exif is a format for storing metadata in image files. See this [http://en.wikipe
 *f is the abbreviation used in English for 'f-number'.",
 'exif-exposureprogram' => 'Exif is a format for storing metadata in image files. See this [http://en.wikipedia.org/wiki/Exchangeable_image_file_format Wikipedia article] and the example at the bottom of [http://commons.wikimedia.org/wiki/File:Phalacrocorax-auritus-020.jpg this page on Commons]. The tags are explained [http://www.awaresystems.be/imaging/tiff/tifftags/privateifd/exif.html briefly] and [http://www.kodak.com/global/plugins/acrobat/en/service/digCam/exifStandard2.pdf in further detail].
 
-How the camera figured out what exposure to use. (If it was manually set, if its optimizing for fast shutter speed, etc).',
+How the camera figured out what exposure to use. (If it was manually set, if its optimizing for fast shutter speed, etc).
+{{Related|Exif-exposureprogram}}',
 'exif-spectralsensitivity' => 'Exif is a format for storing metadata in image files. See this [http://en.wikipedia.org/wiki/Exchangeable_image_file_format Wikipedia article] and the example at the bottom of [http://commons.wikimedia.org/wiki/File:Phalacrocorax-auritus-020.jpg this page on Commons]. The tags are explained [http://www.awaresystems.be/imaging/tiff/tifftags/privateifd/exif.html briefly] and [http://www.kodak.com/global/plugins/acrobat/en/service/digCam/exifStandard2.pdf in further detail].
 
 How sensitive each channel (colour) of the photo is to light. This tag is almost never used.',
@@ -4086,12 +7089,18 @@ The 'land' in a camera refers possibly to the inner surface of the barrel of the
 The subject of a photograph is the person or thing on which the camera focuses. 'Subject distance' is the distance to the subject given in meters.",
 'exif-meteringmode' => 'Exif is a format for storing metadata in image files. See this [http://en.wikipedia.org/wiki/Exchangeable_image_file_format Wikipedia article] and the example at the bottom of [http://commons.wikimedia.org/wiki/File:Phalacrocorax-auritus-020.jpg this page on Commons]. The tags are explained [http://www.awaresystems.be/imaging/tiff/tifftags/privateifd/exif.html briefly] and [http://www.kodak.com/global/plugins/acrobat/en/service/digCam/exifStandard2.pdf in further detail].
 
-See [http://en.wikipedia.org/wiki/Metering_mode Wikipedia article] on metering mode.',
-'exif-lightsource' => 'Exif is a format for storing metadata in image files. See this [http://en.wikipedia.org/wiki/Exchangeable_image_file_format Wikipedia article] and the example at the bottom of [http://commons.wikimedia.org/wiki/File:Phalacrocorax-auritus-020.jpg this page on Commons]. The tags are explained [http://www.awaresystems.be/imaging/tiff/tifftags/privateifd/exif.html briefly] and [http://www.kodak.com/global/plugins/acrobat/en/service/digCam/exifStandard2.pdf in further detail].',
+See [http://en.wikipedia.org/wiki/Metering_mode Wikipedia article] on metering mode.
+{{Related|Exif-meteringmode}}',
+'exif-lightsource' => 'Exif is a format for storing metadata in image files. See this [http://en.wikipedia.org/wiki/Exchangeable_image_file_format Wikipedia article] and the example at the bottom of [http://commons.wikimedia.org/wiki/File:Phalacrocorax-auritus-020.jpg this page on Commons]. The tags are explained [http://www.awaresystems.be/imaging/tiff/tifftags/privateifd/exif.html briefly] and [http://www.kodak.com/global/plugins/acrobat/en/service/digCam/exifStandard2.pdf in further detail].
+{{Related|Exif-lightsource}}',
 'exif-flash' => 'Exif is a format for storing metadata in image files. See this [http://en.wikipedia.org/wiki/Exchangeable_image_file_format Wikipedia article] and the example at the bottom of [http://commons.wikimedia.org/wiki/File:Phalacrocorax-auritus-020.jpg this page on Commons]. The tags are explained [http://www.awaresystems.be/imaging/tiff/tifftags/privateifd/exif.html briefly] and [http://www.kodak.com/global/plugins/acrobat/en/service/digCam/exifStandard2.pdf in further detail].
 
 See this [http://en.wikipedia.org/wiki/Flash_(photography) Wikipedia article] for an explanation of the term.
 
+See also:
+* {{msg-mw|Exif-flash}}
+* {{msg-mw|Exif-flash-fired-0}}
+* {{msg-mw|Exif-flash-fired-1}}
 {{Identical|Flash}}',
 'exif-focallength' => 'Exif is a format for storing metadata in image files. See this [http://en.wikipedia.org/wiki/Exchangeable_image_file_format Wikipedia article] and the example at the bottom of [http://commons.wikimedia.org/wiki/File:Phalacrocorax-auritus-020.jpg this page on Commons]. The tags are explained [http://www.awaresystems.be/imaging/tiff/tifftags/privateifd/exif.html briefly] and [http://www.kodak.com/global/plugins/acrobat/en/service/digCam/exifStandard2.pdf in further detail].
 
@@ -4111,52 +7120,132 @@ How bright the flash is in beam candle power seconds.',
 
 Indicates the number of pixels in the image width (X) direction per FocalPlaneResolutionUnit on the camera focal plane.',
 'exif-focalplaneyresolution' => 'Exif is a format for storing metadata in image files. See this [http://en.wikipedia.org/wiki/Exchangeable_image_file_format Wikipedia article] and the example at the bottom of [http://commons.wikimedia.org/wiki/File:Phalacrocorax-auritus-020.jpg this page on Commons]. The tags are explained [http://www.awaresystems.be/imaging/tiff/tifftags/privateifd/exif.html briefly] and [http://www.kodak.com/global/plugins/acrobat/en/service/digCam/exifStandard2.pdf in further detail].',
-'exif-focalplaneresolutionunit' => 'Exif is a format for storing metadata in image files. See this [http://en.wikipedia.org/wiki/Exchangeable_image_file_format Wikipedia article] and the example at the bottom of [http://commons.wikimedia.org/wiki/File:Phalacrocorax-auritus-020.jpg this page on Commons]. The tags are explained [http://www.awaresystems.be/imaging/tiff/tifftags/privateifd/exif.html briefly] and [http://www.kodak.com/global/plugins/acrobat/en/service/digCam/exifStandard2.pdf in further detail].',
+'exif-focalplaneresolutionunit' => 'Exif is a format for storing metadata in image files. See this [http://en.wikipedia.org/wiki/Exchangeable_image_file_format Wikipedia article] and the example at the bottom of [http://commons.wikimedia.org/wiki/File:Phalacrocorax-auritus-020.jpg this page on Commons]. The tags are explained [http://www.awaresystems.be/imaging/tiff/tifftags/privateifd/exif.html briefly] and [http://www.kodak.com/global/plugins/acrobat/en/service/digCam/exifStandard2.pdf in further detail].
+
+See also:
+* {{msg-mw|Exif-focalplaneresolutionunit-2}}',
 'exif-subjectlocation' => 'Exif is a format for storing metadata in image files. See this [http://en.wikipedia.org/wiki/Exchangeable_image_file_format Wikipedia article] and the example at the bottom of [http://commons.wikimedia.org/wiki/File:Phalacrocorax-auritus-020.jpg this page on Commons]. The tags are explained [http://www.awaresystems.be/imaging/tiff/tifftags/privateifd/exif.html briefly] and [http://www.kodak.com/global/plugins/acrobat/en/service/digCam/exifStandard2.pdf in further detail].
 
 Same as {{msg-mw|exif-subjectarea}} but only ever has two numbers as a value.',
 'exif-exposureindex' => 'Exif is a format for storing metadata in image files. See this [http://en.wikipedia.org/wiki/Exchangeable_image_file_format Wikipedia article] and the example at the bottom of [http://commons.wikimedia.org/wiki/File:Phalacrocorax-auritus-020.jpg this page on Commons]. The tags are explained [http://www.awaresystems.be/imaging/tiff/tifftags/privateifd/exif.html briefly] and [http://www.kodak.com/global/plugins/acrobat/en/service/digCam/exifStandard2.pdf in further detail].',
-'exif-sensingmethod' => 'Exif is a format for storing metadata in image files. See this [http://en.wikipedia.org/wiki/Exchangeable_image_file_format Wikipedia article] and the example at the bottom of [http://commons.wikimedia.org/wiki/File:Phalacrocorax-auritus-020.jpg this page on Commons]. The tags are explained [http://www.awaresystems.be/imaging/tiff/tifftags/privateifd/exif.html briefly] and [http://www.kodak.com/global/plugins/acrobat/en/service/digCam/exifStandard2.pdf in further detail].',
+'exif-sensingmethod' => 'Exif is a format for storing metadata in image files. See this [http://en.wikipedia.org/wiki/Exchangeable_image_file_format Wikipedia article] and the example at the bottom of [http://commons.wikimedia.org/wiki/File:Phalacrocorax-auritus-020.jpg this page on Commons]. The tags are explained [http://www.awaresystems.be/imaging/tiff/tifftags/privateifd/exif.html briefly] and [http://www.kodak.com/global/plugins/acrobat/en/service/digCam/exifStandard2.pdf in further detail].
+{{Related|Exif-sensingmethod}}',
 'exif-filesource' => 'Exif is a format for storing metadata in image files. See this [http://en.wikipedia.org/wiki/Exchangeable_image_file_format Wikipedia article] and the example at the bottom of [http://commons.wikimedia.org/wiki/File:Phalacrocorax-auritus-020.jpg this page on Commons]. The tags are explained [http://www.awaresystems.be/imaging/tiff/tifftags/privateifd/exif.html briefly] and [http://www.kodak.com/global/plugins/acrobat/en/service/digCam/exifStandard2.pdf in further detail].
 
 Determines if the image was recorded by a digital camera adhering to DSC standard (which is almost all digital cameras).',
 'exif-scenetype' => 'Exif is a format for storing metadata in image files. See this [http://en.wikipedia.org/wiki/Exchangeable_image_file_format Wikipedia article] and the example at the bottom of [http://commons.wikimedia.org/wiki/File:Phalacrocorax-auritus-020.jpg this page on Commons]. The tags are explained [http://www.awaresystems.be/imaging/tiff/tifftags/privateifd/exif.html briefly] and [http://www.kodak.com/global/plugins/acrobat/en/service/digCam/exifStandard2.pdf in further detail].
 
-If the image is directly photographed (taken by a digital camera).',
+If the image is directly photographed (taken by a digital camera).
+
+See also:
+* {{msg-mw|Exif-scenetype}}
+* {{msg-mw|Exif-scenetype-1}}',
 'exif-customrendered' => 'Exif is a format for storing metadata in image files. See this [http://en.wikipedia.org/wiki/Exchangeable_image_file_format Wikipedia article] and the example at the bottom of [http://commons.wikimedia.org/wiki/File:Phalacrocorax-auritus-020.jpg this page on Commons]. The tags are explained [http://www.awaresystems.be/imaging/tiff/tifftags/privateifd/exif.html briefly] and [http://www.kodak.com/global/plugins/acrobat/en/service/digCam/exifStandard2.pdf in further detail].
 
-See also Wikipedia on [http://en.wikipedia.org/wiki/Image_processing image processing].',
+See also Wikipedia on [http://en.wikipedia.org/wiki/Image_processing image processing].
+
+See also:
+* {{msg-mw|Exif-customrendered}}
+* {{msg-mw|Exif-customrendered-0}}
+* {{msg-mw|Exif-customrendered-1}}',
 'exif-exposuremode' => "Exif is a format for storing metadata in image files. See this [http://en.wikipedia.org/wiki/Exchangeable_image_file_format Wikipedia article] and the example at the bottom of [http://commons.wikimedia.org/wiki/File:Phalacrocorax-auritus-020.jpg this page on Commons]. The tags are explained [http://www.awaresystems.be/imaging/tiff/tifftags/privateifd/exif.html briefly] and [http://www.kodak.com/global/plugins/acrobat/en/service/digCam/exifStandard2.pdf in further detail].
 
-See also Wikipedia on [http://en.wikipedia.org/wiki/Exposure_(photography) exposure in photography]. This tag shows if the photo's exposure was manually set or automatically determined.",
+See also Wikipedia on [http://en.wikipedia.org/wiki/Exposure_(photography) exposure in photography]. This tag shows if the photo's exposure was manually set or automatically determined.
+{{Related|Exif-exposuremode}}",
 'exif-whitebalance' => 'Exif is a format for storing metadata in image files. See this [http://en.wikipedia.org/wiki/Exchangeable_image_file_format Wikipedia article] and the example at the bottom of [http://commons.wikimedia.org/wiki/File:Phalacrocorax-auritus-020.jpg this page on Commons]. The tags are explained [http://www.awaresystems.be/imaging/tiff/tifftags/privateifd/exif.html briefly] and [http://www.kodak.com/global/plugins/acrobat/en/service/digCam/exifStandard2.pdf in further detail].
 
-See also Wikipedia on [http://en.wikipedia.org/wiki/Color_balance color balance].',
+See also Wikipedia on [http://en.wikipedia.org/wiki/Color_balance color balance].
+
+See also:
+* {{msg-mw|Exif-whitebalance}}
+* {{msg-mw|Exif-whitebalance-0}}
+* {{msg-mw|Exif-whitebalance-1}}',
 'exif-digitalzoomratio' => 'Exif is a format for storing metadata in image files. See this [http://en.wikipedia.org/wiki/Exchangeable_image_file_format Wikipedia article] and the example at the bottom of [http://commons.wikimedia.org/wiki/File:Phalacrocorax-auritus-020.jpg this page on Commons]. The tags are explained [http://www.awaresystems.be/imaging/tiff/tifftags/privateifd/exif.html briefly] and [http://www.kodak.com/global/plugins/acrobat/en/service/digCam/exifStandard2.pdf in further detail].
 
 See also Wikipedia on [http://en.wikipedia.org/wiki/Digital_zoom digital zoom].',
 'exif-focallengthin35mmfilm' => 'Exif is a format for storing metadata in image files. See this [http://en.wikipedia.org/wiki/Exchangeable_image_file_format Wikipedia article] and the example at the bottom of [http://commons.wikimedia.org/wiki/File:Phalacrocorax-auritus-020.jpg this page on Commons]. The tags are explained [http://www.awaresystems.be/imaging/tiff/tifftags/privateifd/exif.html briefly] and [http://www.kodak.com/global/plugins/acrobat/en/service/digCam/exifStandard2.pdf in further detail].
 
 See also Wikipedia on [http://en.wikipedia.org/wiki/Focal_length#In_photography focal length].',
+'exif-scenecapturetype' => '{{Related|Exif-scenecapturetype}}',
+'exif-gaincontrol' => 'Gain amplifies the signal off of the image sensor. Gain turns the brightness level up or down.
+{{Related|Exif-gaincontrol}}',
+'exif-contrast' => '{{Related|Exif-contrast}}',
+'exif-saturation' => '{{Related|Exif-saturation}}',
+'exif-sharpness' => '{{Related|Exif-sharpness}}',
+'exif-subjectdistancerange' => '{{Related|Exif-subjectdistancerange}}',
 'exif-imageuniqueid' => 'A unique identifier for the image in the form of a 128-bit hexadecimal string. See http://www.exif.org/Exif2-2.PDF for details on exif properties.',
 'exif-gpsversionid' => 'Version of the GPS IFD used to store location information. This is usually 2.2.0.0',
-'exif-gpslatituderef' => 'In older versions of mediawiki this referred to if the latitude was North or South. This is no longer used in modern versions of mediawiki except for when using a foreign image repository that is using an older version of mediawiki since the information is now contained in {{msg-mw|exif-gpslatitude}}.',
-'exif-gpslatitude' => 'The latitude of the location from where the picture was taken from.',
-'exif-gpslongituderef' => 'Same as {{msg-mw|exif-gpslatituderef}} but for longitude.',
-'exif-gpslongitude' => 'The longitude of the location from where the picture was taken from.
+'exif-gpslatituderef' => 'In older versions of mediawiki this referred to if the latitude was North or South. This is no longer used in modern versions of mediawiki except for when using a foreign image repository that is using an older version of mediawiki since the information is now contained in {{msg-mw|exif-gpslatitude}}.
+{{Related|Exif-gpslatitude}}',
+'exif-gpslatitude' => 'The latitude of the location from where the picture was taken from.
+{{Related|Exif-gpslatitude}}',
+'exif-gpslongituderef' => 'Same as {{msg-mw|exif-gpslatituderef}} but for longitude.
 
-{{Identical|Longitude}}',
+{{Related|Exif-gpslatitude}}',
+'exif-gpslongitude' => 'The longitude of the location from where the picture was taken from.
+{{Related|Exif-gpslatitude}}',
 'exif-gpsaltituderef' => 'No longer used except for when using foreign image repository with old version of mediawiki. 0 for above sea level, 1 for below sea level.',
 'exif-gpsaltitude' => 'Altitude in meters that the image was taken at.',
 'exif-gpstimestamp' => 'Time (does not include date) that GPS measurement was taken, in UTC. Since often this is at the same time as photo was taken, this is sometimes more reliable than {{msg-mw|exif-datetimeoriginal}}.',
-'exif-gpsmeasuremode' => 'Is the measurement 2D (latitude and longitude) or 3D (latitude, longitude, and altitude).',
-'exif-gpsdop' => 'How accurate the GPS information is. See http://en.wikipedia.org/wiki/Dilution_of_precision_(GPS)',
-'exif-gpsdestlatitude' => 'The latitude of the location shown in the picture, if it is different from latitude of the camera location. See {{msg-mw|exif-gpslatitude}}.
+'exif-gpsstatus' => 'See also:
+* {{msg-mw|Exif-gpsstatus-a}}
+* {{msg-mw|Exif-gpsstatus-v}}',
+'exif-gpsmeasuremode' => 'Is the measurement 2D (latitude and longitude) or 3D (latitude, longitude, and altitude).
 
+See also:
+* {{msg-mw|Exif-gpsmeasuremode-2}}
+* {{msg-mw|Exif-gpsmeasuremode-3}}',
+'exif-gpsdop' => 'How accurate the GPS information is. See http://en.wikipedia.org/wiki/Dilution_of_precision_(GPS)
+{{Related|Exif-gpsdop}}',
+'exif-gpsspeedref' => '{{Related|Exif-gpsspeed}}',
+'exif-gpsspeed' => '{{Related|Exif-gpsspeed}}',
+'exif-gpstrackref' => 'See also:
+* {{msg-mw|Exif-gpstrack}}
+* {{msg-mw|Exif-gpsimgdirection}}
+* {{msg-mw|Exif-gpsimgdirectionref}}
+* {{msg-mw|Exif-gpsdestbearing}}
+* {{msg-mw|Exif-gpsdestbearingref}}',
+'exif-gpstrack' => 'See also:
+* {{msg-mw|Exif-gpstrackref}}
+* {{msg-mw|Exif-gpsimgdirection}}
+* {{msg-mw|Exif-gpsimgdirectionref}}
+* {{msg-mw|Exif-gpsdestbearing}}
+* {{msg-mw|Exif-gpsdestbearingref}}',
+'exif-gpsimgdirectionref' => 'See also:
+* {{msg-mw|Exif-gpstrack}}
+* {{msg-mw|Exif-gpstrackref}}
+* {{msg-mw|Exif-gpsimgdirection}}
+* {{msg-mw|Exif-gpsdestbearing}}
+* {{msg-mw|Exif-gpsdestbearingref}}',
+'exif-gpsimgdirection' => 'See also:
+* {{msg-mw|Exif-gpstrack}}
+* {{msg-mw|Exif-gpstrackref}}
+* {{msg-mw|Exif-gpsimgdirectionref}}
+* {{msg-mw|Exif-gpsdestbearing}}
+* {{msg-mw|Exif-gpsdestbearingref}}',
+'exif-gpsdestlatituderef' => '{{Related|Exif-gpslatitude}}',
+'exif-gpsdestlatitude' => 'The latitude of the location shown in the picture, if it is different from latitude of the camera location. See {{msg-mw|exif-gpslatitude}}.
+{{Related|Exif-gpslatitude}}
 {{Identical|Latitude}}',
+'exif-gpsdestlongituderef' => '{{Related|Exif-gpslatitude}}',
 'exif-gpsdestlongitude' => 'The longitude of the location shown in the picture, if it is different from longitude of the camera location. See {{msg-mw|exif-gpslongitude}}.
-
+{{Related|Exif-gpslatitude}}
 {{Identical|Longitude}}',
+'exif-gpsdestbearingref' => 'See also:
+* {{msg-mw|Exif-gpstrack}}
+* {{msg-mw|Exif-gpstrackref}}
+* {{msg-mw|Exif-gpsimgdirection}}
+* {{msg-mw|Exif-gpsimgdirectionref}}
+* {{msg-mw|Exif-gpsdestbearing}}',
+'exif-gpsdestbearing' => 'See also:
+* {{msg-mw|Exif-gpstrack}}
+* {{msg-mw|Exif-gpstrackref}}
+* {{msg-mw|Exif-gpsimgdirection}}
+* {{msg-mw|Exif-gpsimgdirectionref}}
+* {{msg-mw|Exif-gpsdestbearingref}}',
+'exif-gpsdestdistanceref' => 'I think "reference" stands for "unit". See {{msg-mw|Exif-gpsspeedref}}
+{{Related|Exif-gpsdestdistance}}',
+'exif-gpsdestdistance' => '{{Related|Exif-gpsdestdistance}}',
 'exif-gpsdatestamp' => 'Date (does not generally include time unless recorded in XMP) that GPS measurement was taken, in UTC. Since often this is at the same date as photo was taken, this is sometimes more reliable than {{msg-mw|exif-datetimeoriginal}}.',
 'exif-coordinate-format' => '{{optional}} For formatting GPS latitude coordinates. $1 is degrees, $2 is minutes, $3 is seconds (up to two decimal places), $4 is direction (N, S, W, or E), $5 is coordinate as a single positive or negative real number.',
 'exif-jpegfilecomment' => 'This is not a true exif tag, but the contents of the JPEG COM segment. This often contains a file source, but can potentially contain any comment about the file. This is similar to {{msg-mw|exif-usercomment}}, {{msg-mw|exif-pngfilecomment}}, and {{msg-mw|exif-giffilecomment}}.',
@@ -4192,11 +7281,17 @@ Who gave us the image. This might be different from the creator of the image. Th
 This is who originally owned the image (a person, stock photo agency, etc). This does not refer to the image this image is based on.
 {{Identical|Source}}',
 'exif-editstatus' => 'Editorial status of image. This is more intended for use with people making news papers. This denotes whether the image is on the main page, is part of a correction, etc. See 2:07 of http://www.iptc.org/std/IIM/4.1/specification/IIMV4.1.pdf',
-'exif-urgency' => 'Urgency. How urgent this image is. 1 is very urgent, 5 is normal, 8 is  very low priority.',
+'exif-urgency' => 'Urgency. How urgent this image is. 1 is very urgent, 5 is normal, 8 is  very low priority.
+{{Related|Exif-urgency}}',
 'exif-fixtureidentifier' => 'Fixture name. Identifies frequently occuring object data, for example a regular column in a news paper.',
 'exif-locationdest' => 'Full printable name of location.',
 'exif-locationdestcode' => 'Code of location depicted. Typically this is an ISO country code, but the IPTC-iim standard also defines other codes like XSP for outer space. See appendix D (and tag 2:100) of http://www.iptc.org/std/IIM/4.1/specification/IIMV4.1.pdf',
-'exif-objectcycle' => 'Time of day that media is intended for. Either morning only, evening only, or all day. Typically only used for news related things that might only be broadcast at a specific time of day. See {{msg-mw|exif-objectcycle-a}}, {{msg-mw|exif-objectcycle-p}} and {{msg-mw|exif-objectcycle-b}} for the values that this message labels.',
+'exif-objectcycle' => 'Time of day that media is intended for. Either morning only, evening only, or all day. Typically only used for news related things that might only be broadcast at a specific time of day.
+
+See also:
+* {{msg-mw|Exif-objectcycle-a}}
+* {{msg-mw|Exif-objectcycle-p}}
+* {{msg-mw|Exif-objectcycle-b}}',
 'exif-contact' => 'Contact information of the person responsible for the image.',
 'exif-writer' => 'The person who wrote the caption of the image. See Description Writer on page 18 of http://www.iptc.org/std/photometadata/specification/IPTC-PhotoMetadata-201007_1.pdf',
 'exif-languagecode' => "Language of image/media.
@@ -4231,10 +7326,16 @@ This property can come from xmp:Label in XMP ( http://www.adobe.com/content/dam/
 'exif-morepermissionsurl' => 'A url where you can "buy" (or otherwise negotiate) to get more rights for the image.',
 'exif-attributionurl' => "A url that you're supposed to use when re-using the image.",
 'exif-preferredattributionname' => 'The preferred name to give credit to when re-using this image.',
+'exif-pngfilecomment' => 'See also:
+* {{msg-mw|Exif-pngfilecomment}}
+* {{msg-mw|Exif-giffilecomment}}',
 'exif-disclaimer' => 'Disclaimer for the image.',
 'exif-contentwarning' => 'Content warning for the image. For example if the image/media contains violent, sexual or otherwise offensive content.
 
 This comes from the png warning textual chunk. See http://www.w3.org/TR/PNG/#11keywords',
+'exif-giffilecomment' => 'See also:
+* {{msg-mw|Exif-pngfilecomment}}
+* {{msg-mw|Exif-giffilecomment}}',
 'exif-intellectualgenre' => 'The "intellectual genre" of the image/media item. This typically means the type of item it is, ignoring the actual content of the item. See http://cv.iptc.org/newscodes/genre/ for some examples of the types of values this field might have.',
 'exif-subjectnewscode' => 'A (or multiple) codes describing the content of the image/media. The code is an 8 digit number representing some sort of category. The code is hierarchical , with the first two digits being a broad category (this broad category is shown to the user. See {{msg-mw|exif-subjectnewscode-value}} for how the value this field labels is shown to user). See http://cv.iptc.org/newscodes/subjectcode for the full list of codes.',
 'exif-scenecode' => 'IPTC (numeric) scene code. Contains information on what type of scene it is (like panoramic scene, close-up, etc). See http://cv.iptc.org/newscodes/scene/',
@@ -4261,6 +7362,10 @@ Note, not all fields are guaranteed to be present, some may be empty strings.',
 *$2 is one of 17 broad categories that the code falls into. For example any code starting with 15 has the contents of {{msg-mw|exif-iimcategory-spo}} for $2.',
 
 # EXIF attributes
+'exif-compression-1' => '{{Related|Exif-compression}}',
+'exif-compression-2' => '{{Related|Exif-compression}}',
+'exif-compression-3' => '{{Related|Exif-compression}}',
+'exif-compression-4' => '{{Related|Exif-compression}}',
 'exif-compression-5' => '{{optional}}
 Lempel-Ziv & Welch algorithm',
 'exif-compression-6' => '{{optional}}',
@@ -4276,142 +7381,365 @@ Lempel-Ziv & Welch algorithm',
 'exif-photometricinterpretation-2' => '{{optional}}',
 'exif-photometricinterpretation-6' => '{{optional}}',
 
-'exif-orientation-1' => '{{Identical|Normal}}
-0th row: top; 0th column: left',
-'exif-orientation-2' => '0th row: top; 0th column: right',
-'exif-orientation-3' => '0th row: bottom; 0th column: right',
-'exif-orientation-4' => '0th row: bottom; 0th column: left',
+'exif-orientation-1' => '0th row: top; 0th column: left
+{{Related|Exif-orientation}}
+{{Identical|Normal}}',
+'exif-orientation-2' => '0th row: top; 0th column: right
+{{Related|Exif-orientation}}',
+'exif-orientation-3' => '0th row: bottom; 0th column: right
+{{Related|Exif-orientation}}',
+'exif-orientation-4' => '0th row: bottom; 0th column: left
+{{Related|Exif-orientation}}',
 'exif-orientation-5' => '0th row: left; 0th column: top
 
-CCW is an abbreviation for counter-clockwise',
+CCW is an abbreviation for counter-clockwise
+{{Related|Exif-orientation}}',
 'exif-orientation-6' => '0th row: right; 0th column: top
 
-CCW is an abbreviation for counter-clockwise.',
+CCW is an abbreviation for counter-clockwise.
+{{Related|Exif-orientation}}',
 'exif-orientation-7' => '0th row: right; 0th column: bottom
 
-CW is an abbreviation for clockwise',
+CW is an abbreviation for clockwise
+{{Related|Exif-orientation}}',
 'exif-orientation-8' => '0th row: left; 0th column: bottom
 
-CW is an abbreviation for clockwise.',
+CW is an abbreviation for clockwise.
+{{Related|Exif-orientation}}',
+
+'exif-planarconfiguration-1' => 'See also:
+* {{msg-mw|Exif-planarconfiguration}}
+* {{msg-mw|Exif-planarconfiguration-1}}
+* {{msg-mw|Exif-planarconfiguration-2}}',
+'exif-planarconfiguration-2' => 'See also:
+* {{msg-mw|Exif-planarconfiguration}}
+* {{msg-mw|Exif-planarconfiguration-1}}
+* {{msg-mw|Exif-planarconfiguration-2}}',
 
 'exif-xyresolution-i' => '{{Optional}} Used to format {{msg-mw|exif-xresolution}} and {{msg-mw|exif-yresolution}} if the unit is dots per inch. $1 is the number of dots/in.',
 'exif-xyresolution-c' => '{{Optional}} Used to format {{msg-mw|exif-xresolution}} and {{msg-mw|exif-yresolution}} if the unit is dots per centimetre. $1 is the number of dots/cm.',
 
-'exif-colorspace-1' => '{{Optional}} If it uses the standard sRGB colour space.',
-'exif-colorspace-65535' => 'The photograph is not colour calibrated.',
+'exif-colorspace-1' => '{{Optional}}
+If it uses the standard sRGB colour space.
 
-'exif-componentsconfiguration-1' => '{{optional}}',
-'exif-componentsconfiguration-2' => '{{optional}}',
-'exif-componentsconfiguration-3' => '{{optional}}',
-'exif-componentsconfiguration-4' => '{{optional}}',
-'exif-componentsconfiguration-5' => '{{optional}}',
-'exif-componentsconfiguration-6' => '{{optional}}',
+See also:
+* {{msg-mw|Exif-colorspace}}
+* {{msg-mw|Exif-colorspace-1|optional}}
+* {{msg-mw|Exif-colorspace-65535}}',
+'exif-colorspace-65535' => 'The photograph is not colour calibrated.
 
-'exif-exposureprogram-1' => "One of the exposure program types in the table of metadata on image description pages. See the Wikipedia article '[http://en.wikipedia.org/wiki/Mode_dial Mode dial]' for an explanation.",
-'exif-exposureprogram-3' => 'One of the exposure program types in the table of metadata on image description pages. See the Wikipedia article for a definition of the term [http://en.wikipedia.org/wiki/Aperture_priority aperture priority].',
-'exif-exposureprogram-4' => 'One of the exposure program types in the table of metadata on image description pages. See the Wikipedia article for a definition of the term [http://en.wikipedia.org/wiki/Shutter_priority shutter priority].',
-'exif-exposureprogram-5' => "One of the exposure program types in the table of metadata on image description pages. See the Wikipedia article '[http://en.wikipedia.org/wiki/Mode_dial Mode dial]' for an explanation.",
-'exif-exposureprogram-6' => "One of the exposure program types in the table of metadata on image description pages. See the Wikipedia article '[http://en.wikipedia.org/wiki/Mode_dial Mode dial]' for an explanation.",
-'exif-exposureprogram-7' => "One of the exposure program types in the table of metadata on image description pages. See the Wikipedia article '[http://en.wikipedia.org/wiki/Mode_dial Mode dial]' for an explanation.",
-'exif-exposureprogram-8' => "One of the exposure program types in the table of metadata on image description pages. See the Wikipedia article '[http://en.wikipedia.org/wiki/Mode_dial Mode dial]' for an explanation.",
+See also:
+* {{msg-mw|Exif-colorspace}}
+* {{msg-mw|Exif-colorspace-1|optional}}
+* {{msg-mw|Exif-colorspace-65535}}',
+
+'exif-componentsconfiguration-0' => '{{Related|Exif-componentsconfiguration}}',
+'exif-componentsconfiguration-1' => '{{optional}}
+{{Related|Exif-componentsconfiguration}}',
+'exif-componentsconfiguration-2' => '{{optional}}
+{{Related|Exif-componentsconfiguration}}',
+'exif-componentsconfiguration-3' => '{{optional}}
+{{Related|Exif-componentsconfiguration}}',
+'exif-componentsconfiguration-4' => '{{optional}}
+{{Related|Exif-componentsconfiguration}}',
+'exif-componentsconfiguration-5' => '{{optional}}
+{{Related|Exif-componentsconfiguration}}',
+'exif-componentsconfiguration-6' => '{{optional}}
+{{Related|Exif-componentsconfiguration}}',
+
+'exif-exposureprogram-0' => '{{Related|Exif-exposureprogram}}',
+'exif-exposureprogram-1' => "One of the exposure program types in the table of metadata on image description pages. See the Wikipedia article '[http://en.wikipedia.org/wiki/Mode_dial Mode dial]' for an explanation.
+{{Related|Exif-exposureprogram}}",
+'exif-exposureprogram-2' => '{{Related|Exif-exposureprogram}}',
+'exif-exposureprogram-3' => 'One of the exposure program types in the table of metadata on image description pages. See the Wikipedia article for a definition of the term [http://en.wikipedia.org/wiki/Aperture_priority aperture priority].
+{{Related|Exif-exposureprogram}}',
+'exif-exposureprogram-4' => 'One of the exposure program types in the table of metadata on image description pages. See the Wikipedia article for a definition of the term [http://en.wikipedia.org/wiki/Shutter_priority shutter priority].
+{{Related|Exif-exposureprogram}}',
+'exif-exposureprogram-5' => "One of the exposure program types in the table of metadata on image description pages. See the Wikipedia article '[http://en.wikipedia.org/wiki/Mode_dial Mode dial]' for an explanation.
+{{Related|Exif-exposureprogram}}",
+'exif-exposureprogram-6' => "One of the exposure program types in the table of metadata on image description pages. See the Wikipedia article '[http://en.wikipedia.org/wiki/Mode_dial Mode dial]' for an explanation.
+{{Related|Exif-exposureprogram}}",
+'exif-exposureprogram-7' => "One of the exposure program types in the table of metadata on image description pages. See the Wikipedia article '[http://en.wikipedia.org/wiki/Mode_dial Mode dial]' for an explanation.
+{{Related|Exif-exposureprogram}}",
+'exif-exposureprogram-8' => "One of the exposure program types in the table of metadata on image description pages. See the Wikipedia article '[http://en.wikipedia.org/wiki/Mode_dial Mode dial]' for an explanation.
+{{Related|Exif-exposureprogram}}",
 
 'exif-subjectdistance-value' => '$1 is a distance measured in metres. The value can, and usually does, include decimal places.',
 
-'exif-meteringmode-0' => '{{Identical|Unknown}}',
-'exif-meteringmode-1' => '{{Identical|Average}}',
+'exif-meteringmode-0' => '{{Related|Exif-meteringmode}}
+{{Identical|Unknown}}',
+'exif-meteringmode-1' => '{{Related|Exif-meteringmode}}
+{{Identical|Average}}',
+'exif-meteringmode-2' => '{{Related|Exif-meteringmode}}',
+'exif-meteringmode-3' => '{{Related|Exif-meteringmode}}',
+'exif-meteringmode-4' => '{{Related|Exif-meteringmode}}',
+'exif-meteringmode-5' => '{{Related|Exif-meteringmode}}',
+'exif-meteringmode-6' => '{{Related|Exif-meteringmode}}',
 'exif-meteringmode-255' => '{{Identical|Other}}',
 
-'exif-lightsource-0' => '{{Identical|Unknown}}',
-'exif-lightsource-4' => '{{Identical|Flash}}',
-'exif-lightsource-20' => '{{optional}}',
-'exif-lightsource-21' => '{{optional}}',
-'exif-lightsource-22' => '{{optional}}',
-'exif-lightsource-23' => '{{optional}}',
+'exif-lightsource-0' => '{{Identical|Unknown}}
+{{Related|Exif-lightsource}}',
+'exif-lightsource-1' => '{{Related|Exif-lightsource}}',
+'exif-lightsource-2' => '{{Related|Exif-lightsource}}',
+'exif-lightsource-3' => '{{Related|Exif-lightsource}}',
+'exif-lightsource-4' => '{{Identical|Flash}}
+{{Related|Exif-lightsource}}',
+'exif-lightsource-9' => '{{Related|Exif-lightsource}}',
+'exif-lightsource-10' => '{{Related|Exif-lightsource}}',
+'exif-lightsource-11' => '{{Related|Exif-lightsource}}',
+'exif-lightsource-12' => '{{Related|Exif-lightsource}}',
+'exif-lightsource-13' => '{{Related|Exif-lightsource}}',
+'exif-lightsource-14' => '{{Related|Exif-lightsource}}',
+'exif-lightsource-15' => '{{Related|Exif-lightsource}}',
+'exif-lightsource-17' => '{{Related|Exif-lightsource}}',
+'exif-lightsource-18' => '{{Related|Exif-lightsource}}',
+'exif-lightsource-19' => '{{Related|Exif-lightsource}}',
+'exif-lightsource-20' => '{{optional}}
+{{Related|Exif-lightsource}}',
+'exif-lightsource-21' => '{{optional}}
+{{Related|Exif-lightsource}}',
+'exif-lightsource-22' => '{{optional}}
+{{Related|Exif-lightsource}}',
+'exif-lightsource-23' => '{{optional}}
+{{Related|Exif-lightsource}}',
+'exif-lightsource-24' => '{{Related|Exif-lightsource}}',
+'exif-lightsource-255' => '{{Related|Exif-lightsource}}',
 
 # Flash modes
+'exif-flash-fired-0' => 'See also:
+* {{msg-mw|Exif-flash}}
+* {{msg-mw|Exif-flash-fired-0}}
+* {{msg-mw|Exif-flash-fired-1}}',
+'exif-flash-fired-1' => 'See also:
+* {{msg-mw|Exif-flash}}
+* {{msg-mw|Exif-flash-fired-0}}
+* {{msg-mw|Exif-flash-fired-1}}',
 'exif-flash-return-0' => 'Exif is a format for storing metadata in image files. See this [http://en.wikipedia.org/wiki/Exchangeable_image_file_format Wikipedia article] and the example at the bottom of [http://commons.wikimedia.org/wiki/File:Phalacrocorax-auritus-020.jpg this page on Commons]. The tags are explained [http://www.awaresystems.be/imaging/tiff/tifftags/privateifd/exif.html briefly] and [http://www.kodak.com/global/plugins/acrobat/en/service/digCam/exifStandard2.pdf in further detail].
 
-"Strobe" and "flash" mean the same here.',
+"Strobe" and "flash" mean the same here.
+
+See also:
+* {{msg-mw|Exif-flash-return-0}}
+* {{msg-mw|Exif-flash-return-2}}
+* {{msg-mw|Exif-flash-return-3}}',
 'exif-flash-return-2' => 'Exif is a format for storing metadata in image files. See this [http://en.wikipedia.org/wiki/Exchangeable_image_file_format Wikipedia article] and the example at the bottom of [http://commons.wikimedia.org/wiki/File:Phalacrocorax-auritus-020.jpg this page on Commons]. The tags are explained [http://www.awaresystems.be/imaging/tiff/tifftags/privateifd/exif.html briefly] and [http://www.kodak.com/global/plugins/acrobat/en/service/digCam/exifStandard2.pdf in further detail].
 
-"Strobe" and "flash" mean the same here.',
-'exif-flash-return-3' => 'Exif is a format for storing metadata in image files. See this [http://en.wikipedia.org/wiki/Exchangeable_image_file_format Wikipedia article] and the example at the bottom of [http://commons.wikimedia.org/wiki/File:Phalacrocorax-auritus-020.jpg this page on Commons]. The tags are explained [http://www.awaresystems.be/imaging/tiff/tifftags/privateifd/exif.html briefly] and [http://www.kodak.com/global/plugins/acrobat/en/service/digCam/exifStandard2.pdf in further detail].
+"Strobe" and "flash" mean the same here.
 
-"Strobe" and "flash" mean the same here.',
-'exif-flash-mode-1' => 'This is when you have chosen that your camera must use a flash for this picture.',
-'exif-flash-mode-2' => "This is when you have chosen that your camera must ''not'' use a flash for this picture.",
-'exif-flash-function-1' => 'Exif is a format for storing metadata in image files. See this [http://en.wikipedia.org/wiki/Exchangeable_image_file_format Wikipedia article] and the example at the bottom of [http://commons.wikimedia.org/wiki/File:Phalacrocorax-auritus-020.jpg this page on Commons]. The tags are explained [http://www.awaresystems.be/imaging/tiff/tifftags/privateifd/exif.html briefly] and [http://www.kodak.com/global/plugins/acrobat/en/service/digCam/exifStandard2.pdf in further detail].',
+See also:
+* {{msg-mw|Exif-flash-return-0}}
+* {{msg-mw|Exif-flash-return-2}}
+* {{msg-mw|Exif-flash-return-3}}',
+'exif-flash-return-3' => 'Exif is a format for storing metadata in image files. See this [http://en.wikipedia.org/wiki/Exchangeable_image_file_format Wikipedia article] and the example at the bottom of [http://commons.wikimedia.org/wiki/File:Phalacrocorax-auritus-020.jpg this page on Commons]. The tags are explained [http://www.awaresystems.be/imaging/tiff/tifftags/privateifd/exif.html briefly] and [http://www.kodak.com/global/plugins/acrobat/en/service/digCam/exifStandard2.pdf in further detail].
 
-'exif-sensingmethod-5' => "''Color sequential'' means, that the three base colors are measured one after another (i.e. the sensor is first measuring red, than green, than blue).",
-'exif-sensingmethod-8' => "''Color sequential'' means, that the three base colors are measured one after another (i.e. the sensor is first measuring red, than green, than blue).",
+"Strobe" and "flash" mean the same here.
 
-'exif-filesource-3' => '{{optional}}',
+See also:
+* {{msg-mw|Exif-flash-return-0}}
+* {{msg-mw|Exif-flash-return-2}}
+* {{msg-mw|Exif-flash-return-3}}',
+'exif-flash-mode-1' => 'This is when you have chosen that your camera must use a flash for this picture.
 
-'exif-exposuremode-2' => "A type of exposure mode shown as part of the metadata on image description pages. The Wikipedia article on [http://en.wikipedia.org/wiki/Bracketing#Exposure_bracketing bracketing] says that 'auto bracket' is a camera exposure setting which automatically takes a series of pictures at slightly different light exposures.",
+See also:
+* {{msg-mw|Exif-flash-mode-1}}
+* {{msg-mw|Exif-flash-mode-2}}
+* {{msg-mw|Exif-flash-mode-3}}',
+'exif-flash-mode-2' => "This is when you have chosen that your camera must ''not'' use a flash for this picture.
 
-'exif-scenecapturetype-0' => '{{Identical|Standard}}',
+See also:
+* {{msg-mw|Exif-flash-mode-1}}
+* {{msg-mw|Exif-flash-mode-2}}
+* {{msg-mw|Exif-flash-mode-3}}",
+'exif-flash-mode-3' => 'See also:
+* {{msg-mw|Exif-flash-mode-1}}
+* {{msg-mw|Exif-flash-mode-2}}
+* {{msg-mw|Exif-flash-mode-3}}',
+'exif-flash-function-1' => 'Exif is a format for storing metadata in image files. See this [http://en.wikipedia.org/wiki/Exchangeable_image_file_format Wikipedia article] and the example at the bottom of [http://commons.wikimedia.org/wiki/File:Phalacrocorax-auritus-020.jpg this page on Commons]. The tags are explained [http://www.awaresystems.be/imaging/tiff/tifftags/privateifd/exif.html briefly] and [http://www.kodak.com/global/plugins/acrobat/en/service/digCam/exifStandard2.pdf in further detail].',
 
-'exif-gaincontrol-0' => 'Gain amplifies the signal off of the image sensor. Gain turns the brightness level up or down.
+'exif-focalplaneresolutionunit-2' => 'See also:
+* {{msg-mw|Exif-focalplaneresolutionunit}}',
 
-:0: None: no gain at all
-:1: Low gain up: some more brightness
-:2: High gain up: much more brightness
-:3: Low gain down: some less brightness (seems to be uncommon in photography)
-:4: High gain down: much less brightness (seems to be uncommon in photography)
+'exif-sensingmethod-1' => '{{Related|Exif-sensingmethod}}',
+'exif-sensingmethod-2' => '{{Related|Exif-sensingmethod}}',
+'exif-sensingmethod-3' => '{{Related|Exif-sensingmethod}}',
+'exif-sensingmethod-4' => '{{Related|Exif-sensingmethod}}',
+'exif-sensingmethod-5' => "''Color sequential'' means, that the three base colors are measured one after another (i.e. the sensor is first measuring red, than green, than blue).
+{{Related|Exif-sensingmethod}}",
+'exif-sensingmethod-7' => '{{Related|Exif-sensingmethod}}',
+'exif-sensingmethod-8' => "''Color sequential'' means, that the three base colors are measured one after another (i.e. the sensor is first measuring red, than green, than blue).
+{{Related|Exif-sensingmethod}}",
 
-{{Identical|None}}',
-'exif-gaincontrol-1' => '{{:MediaWiki:Exif-gaincontrol-0/qqq}}',
-'exif-gaincontrol-2' => '{{:MediaWiki:Exif-gaincontrol-0/qqq}}',
-'exif-gaincontrol-3' => '{{:MediaWiki:Exif-gaincontrol-0/qqq}}',
-'exif-gaincontrol-4' => '{{:MediaWiki:Exif-gaincontrol-0/qqq}}',
+'exif-filesource-3' => '{{optional}}',
 
-'exif-contrast-0' => '{{Identical|Normal}}',
-'exif-contrast-1' => '{{Identical|Soft}}',
-'exif-contrast-2' => '{{Identical|Hard}}',
+'exif-scenetype-1' => 'See also:
+* {{msg-mw|Exif-scenetype}}
+* {{msg-mw|Exif-scenetype-1}}',
+
+'exif-customrendered-0' => 'See also:
+* {{msg-mw|Exif-customrendered}}
+* {{msg-mw|Exif-customrendered-0}}
+* {{msg-mw|Exif-customrendered-1}}',
+'exif-customrendered-1' => 'See also:
+* {{msg-mw|Exif-customrendered}}
+* {{msg-mw|Exif-customrendered-0}}
+* {{msg-mw|Exif-customrendered-1}}',
+
+'exif-exposuremode-0' => '{{Related|Exif-exposuremode}}',
+'exif-exposuremode-1' => '{{Related|Exif-exposuremode}}',
+'exif-exposuremode-2' => "A type of exposure mode shown as part of the metadata on image description pages. The Wikipedia article on [http://en.wikipedia.org/wiki/Bracketing#Exposure_bracketing bracketing] says that 'auto bracket' is a camera exposure setting which automatically takes a series of pictures at slightly different light exposures.
+{{Related|Exif-exposuremode}}",
+
+'exif-whitebalance-0' => 'See also:
+* {{msg-mw|Exif-whitebalance}}
+* {{msg-mw|Exif-whitebalance-0}}
+* {{msg-mw|Exif-whitebalance-1}}',
+'exif-whitebalance-1' => 'See also:
+* {{msg-mw|Exif-whitebalance}}
+* {{msg-mw|Exif-whitebalance-0}}
+* {{msg-mw|Exif-whitebalance-1}}',
+
+'exif-scenecapturetype-0' => '{{Related|Exif-scenecapturetype}}
+{{Identical|Standard}}',
+'exif-scenecapturetype-1' => '{{Related|Exif-scenecapturetype}}',
+'exif-scenecapturetype-2' => '{{Related|Exif-scenecapturetype}}',
+'exif-scenecapturetype-3' => '{{Related|Exif-scenecapturetype}}',
 
-'exif-saturation-0' => '{{Identical|Normal}}',
-'exif-saturation-2' => 'Color saturation in picture EXIF data',
+'exif-gaincontrol-0' => 'Gain amplifies the signal off of the image sensor. Gain turns the brightness level up or down.
+{{Related|Exif-gaincontrol}}
+{{Identical|None}}',
+'exif-gaincontrol-1' => 'Gain amplifies the signal off of the image sensor. Gain turns the brightness level up or down.
+{{Related|Exif-gaincontrol}}',
+'exif-gaincontrol-2' => 'Gain amplifies the signal off of the image sensor. Gain turns the brightness level up or down.
+{{Related|Exif-gaincontrol}}',
+'exif-gaincontrol-3' => 'Gain amplifies the signal off of the image sensor. Gain turns the brightness level up or down.
+{{Related|Exif-gaincontrol}}',
+'exif-gaincontrol-4' => 'Gain amplifies the signal off of the image sensor. Gain turns the brightness level up or down.
+{{Related|Exif-gaincontrol}}',
+
+'exif-contrast-0' => '{{Related|Exif-contrast}}
+{{Identical|Normal}}',
+'exif-contrast-1' => '{{Related|Exif-contrast}}
+{{Identical|Soft}}',
+'exif-contrast-2' => '{{Related|Exif-contrast}}
+{{Identical|Hard}}',
+
+'exif-saturation-0' => '{{Related|Exif-saturation}}
+{{Identical|Normal}}',
+'exif-saturation-1' => '{{Related|Exif-saturation}}',
+'exif-saturation-2' => 'Color saturation in picture EXIF data
+{{Related|Exif-saturation}}',
+
+'exif-sharpness-0' => '{{Related|Exif-sharpness}}
+{{Identical|Normal}}',
+'exif-sharpness-1' => '{{Related|Exif-sharpness}}
+{{Identical|Soft}}',
+'exif-sharpness-2' => '{{Related|Exif-sharpness}}
+{{Identical|Hard}}',
+
+'exif-subjectdistancerange-0' => '{{Related|Exif-subjectdistancerange}}
+{{Identical|Unknown}}',
+'exif-subjectdistancerange-1' => 'Macro view is close-up photography. See [http://en.wikipedia.org/wiki/Macro_photography Wikipedia].
+{{Related|Exif-subjectdistancerange}}',
+'exif-subjectdistancerange-2' => '{{Related|Exif-subjectdistancerange}}',
+'exif-subjectdistancerange-3' => '{{Related|Exif-subjectdistancerange}}',
 
-'exif-sharpness-0' => '{{Identical|Normal}}',
-'exif-sharpness-1' => '{{Identical|Soft}}',
-'exif-sharpness-2' => '{{Identical|Hard}}',
+# Pseudotags used for GPSLatitudeRef and GPSDestLatitudeRef
+'exif-gpslatitude-n' => 'Very rarely used. Only used when using an old version of Mediawiki as a foreign image repo.
+{{Related|Exif-gpslatitude}}',
+'exif-gpslatitude-s' => 'Very rarely used. Only used when using an old version of Mediawiki as a foreign image repo.
+{{Related|Exif-gpslatitude}}',
 
-'exif-subjectdistancerange-0' => '{{Identical|Unknown}}',
-'exif-subjectdistancerange-1' => 'See also:
-* {{msg|Exif-subjectdistancerange-0}}
-* {{msg|Exif-subjectdistancerange-1}}
-* {{msg|Exif-subjectdistancerange-2}}
-* {{msg|Exif-subjectdistancerange-3}}
+# Pseudotags used for GPSLongitudeRef and GPSDestLongitudeRef
+'exif-gpslongitude-e' => 'Very rarely used. Only used when using an old version of Mediawiki as a foreign image repo.
+{{Related|Exif-gpslatitude}}',
+'exif-gpslongitude-w' => 'Very rarely used. Only used when using an old version of Mediawiki as a foreign image repo.
+{{Related|Exif-gpslatitude}}',
+
+# Pseudotags used for GPSAltitudeRef
+'exif-gpsaltitude-above-sealevel' => 'Used as GPS Altitude in Exif data. Parameters:
+* $1 - altitude above sea level (in meters)
+See also:
+* {{msg-mw|Exif-gpsaltitude-below-sealevel}}',
+'exif-gpsaltitude-below-sealevel' => 'Used as GPS Altitude in Exif data. Parameters:
+* $1 - altitude below sea level (in meters)
+See also:
+* {{msg-mw|Exif-gpsaltitude-above-sealevel}}',
 
-Macro view is close-up photography. See [http://en.wikipedia.org/wiki/Macro_photography Wikipedia].',
+'exif-gpsstatus-a' => 'See also:
+* {{msg-mw|Exif-gpsstatus}}
+* {{msg-mw|Exif-gpsstatus-v}}',
+'exif-gpsstatus-v' => 'See also:
+* {{msg-mw|Exif-gpsstatus}}
+* {{msg-mw|Exif-gpsstatus-a}}',
 
-# Pseudotags used for GPSLatitudeRef and GPSDestLatitudeRef
-'exif-gpslatitude-n' => 'Very rarely used. Only used when using an old version of Mediawiki as a foreign image repo.',
-'exif-gpslatitude-s' => 'Very rarely used. Only used when using an old version of Mediawiki as a foreign image repo.',
+'exif-gpsmeasuremode-2' => 'Only latitude and longitude recorded, no altitude.
 
-# Pseudotags used for GPSLongitudeRef and GPSDestLongitudeRef
-'exif-gpslongitude-e' => 'Very rarely used. Only used when using an old version of Mediawiki as a foreign image repo.',
-'exif-gpslongitude-w' => 'Very rarely used. Only used when using an old version of Mediawiki as a foreign image repo.',
+See also:
+* {{msg-mw|Exif-gpsmeasuremode}}
+* {{msg-mw|Exif-gpsmeasuremode-3}}',
+'exif-gpsmeasuremode-3' => 'Latitude, longitude, and altitude recorded.
 
-'exif-gpsmeasuremode-2' => 'Only latitude and longitude recorded, no altitude.',
-'exif-gpsmeasuremode-3' => 'Latitude, longitude, and altitude recorded.',
+See also:
+* {{msg-mw|Exif-gpsmeasuremode}}
+* {{msg-mw|Exif-gpsmeasuremode-2}}',
 
 # Pseudotags used for GPSSpeedRef
-'exif-gpsspeed-n' => "Knots: ''Knot'' is a unit of speed on water used for ships, etc., equal to one nautical mile per hour.",
+'exif-gpsspeed-k' => '{{Related|Exif-gpsspeed}}',
+'exif-gpsspeed-m' => '{{Related|Exif-gpsspeed}}',
+'exif-gpsspeed-n' => "Knots: ''Knot'' is a unit of speed on water used for ships, etc., equal to one nautical mile per hour.
+{{Related|Exif-gpsspeed}}",
+
+# Pseudotags used for GPSDestDistanceRef
+'exif-gpsdestdistance-k' => '{{Related|Exif-gpsdestdistance}}',
+'exif-gpsdestdistance-m' => '{{Related|Exif-gpsdestdistance}}',
+'exif-gpsdestdistance-n' => '{{Related|Exif-gpsdestdistance}}',
+
+'exif-gpsdop-excellent' => 'Parameters:
+* $1 - the actual HDOP/PDOP value (less than or equal to 2 for excellent). See http://en.wikipedia.org/wiki/Dilution_of_precision_(GPS)
+{{Related|Exif-gpsdop}}',
+'exif-gpsdop-good' => 'Parameters:
+* $1 - the actual HDOP/PDOP value (2-5 for good). See http://en.wikipedia.org/wiki/Dilution_of_precision_(GPS)
+{{Related|Exif-gpsdop}}',
+'exif-gpsdop-moderate' => 'Parameters:
+* $1 - the actual HDOP/PDOP value (5-10 for moderate). See http://en.wikipedia.org/wiki/Dilution_of_precision_(GPS)
+{{Related|Exif-gpsdop}}',
+'exif-gpsdop-fair' => 'Parameters:
+* $1 - the actual HDOP/PDOP value (10-20 for fair). See http://en.wikipedia.org/wiki/Dilution_of_precision_(GPS)
+{{Related|Exif-gpsdop}}',
+'exif-gpsdop-poor' => 'Parameters:
+* $1 - the actual HDOP/PDOP value (greater than 20 for poor). See http://en.wikipedia.org/wiki/Dilution_of_precision_(GPS)
+{{Related|Exif-gpsdop}}',
+
+'exif-objectcycle-a' => 'Morning only (a is for AM).
 
-'exif-gpsdop-excellent' => '$1 is the actual HDOP/PDOP value (less than or equal to 2 for excellent). See http://en.wikipedia.org/wiki/Dilution_of_precision_(GPS)',
-'exif-gpsdop-good' => '$1 is the actual HDOP/PDOP value (2-5 for good). See http://en.wikipedia.org/wiki/Dilution_of_precision_(GPS)',
-'exif-gpsdop-moderate' => '$1 is the actual HDOP/PDOP value (5-10 for moderate). See http://en.wikipedia.org/wiki/Dilution_of_precision_(GPS)',
-'exif-gpsdop-fair' => '$1 is the actual HDOP/PDOP value (10-20 for fair). See http://en.wikipedia.org/wiki/Dilution_of_precision_(GPS)',
-'exif-gpsdop-poor' => '$1 is the actual HDOP/PDOP value (greater than 20 for poor). See http://en.wikipedia.org/wiki/Dilution_of_precision_(GPS)',
+See also:
+* {{msg-mw|Exif-objectcycle}}
+* {{msg-mw|Exif-objectcycle-p}}
+* {{msg-mw|Exif-objectcycle-b}}',
+'exif-objectcycle-p' => 'Evening only (p is for PM).
 
-'exif-objectcycle-a' => 'Morning only (a is for AM). See also {{msg-mw|Exif-objectcycle}}.',
-'exif-objectcycle-p' => 'Evening only (p is for PM). See also {{msg-mw|Exif-objectcycle}}.',
-'exif-objectcycle-b' => 'Both morning and evening (b is for both). See also {{msg-mw|Exif-objectcycle}}.',
+See also:
+* {{msg-mw|Exif-objectcycle}}
+* {{msg-mw|Exif-objectcycle-a}}
+* {{msg-mw|Exif-objectcycle-b}}',
+'exif-objectcycle-b' => 'Both morning and evening (b is for both).
 
-'exif-ycbcrpositioning-1' => 'If the Chrominance samples are centered with respect to the Luminance samples.',
+See also:
+* {{msg-mw|Exif-objectcycle}}
+* {{msg-mw|Exif-objectcycle-a}}
+* {{msg-mw|Exif-objectcycle-p}}',
+
+# Pseudotags used for GPSTrackRef, GPSImgDirectionRef and GPSDestBearingRef
+'exif-gpsdirection-t' => 'See also:
+* {{msg-mw|Exif-gpsdirection-m}}',
+'exif-gpsdirection-m' => 'See also:
+* {{msg-mw|Exif-gpsdirection-t}}',
+
+'exif-ycbcrpositioning-1' => 'If the Chrominance samples are centered with respect to the Luminance samples.
+{{Related|Exif-ycbcrpositioning}}',
 'exif-ycbcrpositioning-2' => 'If the Chrominance samples are on top of to the Luminance samples.
-See: http://www.awaresystems.be/imaging/tiff/tifftags/ycbcrpositioning.html',
+See: http://www.awaresystems.be/imaging/tiff/tifftags/ycbcrpositioning.html
+{{Related|Exif-ycbcrpositioning}}',
 
 'exif-dc-contributor' => 'People who helped make the resource, but are secondary in contribution to the author.',
 'exif-dc-coverage' => '"The extent or scope of the resource" see dc:coverage in http://www.adobe.com/content/dam/Adobe/en/devnet/xmp/pdfs/XMPSpecificationPart2.pdf',
@@ -4451,10 +7779,18 @@ $1 is maxaperture in APEX units (APEX aperture units = 2log<sub>2</sub>(f-number
 'exif-iimcategory-war' => 'Displayed as part of the iimcategory field if the 3 letter code is recognized, or as part {{msg-mw|exif-subjectnewscode-value}}',
 'exif-iimcategory-wea' => 'Displayed as part of the iimcategory field if the 3 letter code is recognized, or as part {{msg-mw|exif-subjectnewscode-value}}',
 
-'exif-urgency-normal' => '$1 is numeric priority (aka 5 for normal)',
-'exif-urgency-low' => '$1 is numeric priority (6-8 for low)',
-'exif-urgency-high' => '$1 is numeric priority (1-4 for high)',
-'exif-urgency-other' => '$1 is numeric priority. Most specs define 0 and 9 to either be reserved or not allowed. However the exiftool documentation defines 0 to be reserved and 9 to be user-defined priority.',
+'exif-urgency-normal' => 'Parameters:
+* $1 - numeric priority (aka 5 for normal)
+{{Related|Exif-urgency}}',
+'exif-urgency-low' => 'Parameters:
+* $1 - numeric priority (6-8 for low)
+{{Related|Exif-urgency}}',
+'exif-urgency-high' => 'Parameters:
+* $1 - numeric priority (1-4 for high)
+{{Related|Exif-urgency}}',
+'exif-urgency-other' => 'Parameters:
+* $1 - numeric priority. Most specs define 0 and 9 to either be reserved or not allowed. However the exiftool documentation defines 0 to be reserved and 9 to be user-defined priority.
+{{Related|Exif-urgency}}',
 
 # External editor support
 'edit-externally' => 'Displayed on image description pages. See for example [[:Image:Yes.png#filehistory]].',
@@ -4463,7 +7799,8 @@ $1 is maxaperture in APEX units (APEX aperture units = 2log<sub>2</sub>(f-number
 Please leave the link http://www.mediawiki.org/wiki/Manual:External_editors exactly as it is.',
 
 # 'all' in various places, this might be different for inflected languages
-'watchlistall2' => 'Appears on [[Special:Watchlist]]. It is variable $3 in the text message [[Mediawiki:Wlshowlast]].
+'watchlistall2' => 'Appears on [[Special:Watchlist]].
+This message is variable $3 in the message {{msg-mw|Wlshowlast}}.
 
 {{Identical|All}}',
 'namespacesall' => 'In special page [[Special:WhatLinksHere]]. Drop-down box option for namespace.
@@ -4483,12 +7820,20 @@ Please leave the link http://www.mediawiki.org/wiki/Manual:External_editors exac
 'confirmemail_pending' => 'Message on [[Special:ConfirmEmail]] when confirmation of e-mail not yet complete.',
 'confirmemail_send' => 'Button label on [[Special:ConfirmEmail]]',
 'confirmemail_sent' => 'Message appearing after button {{msg-mw|Confirmemail_send}} activated on [[Special:ConfirmEmail]].',
-'confirmemail_sendfailed' => 'Failure message to do with [[Special:ConfirmEmail]].
+'confirmemail_oncreate' => 'Used in [[Special:ConfirmEmail]].
 
-$1 is a message from the e-mail delivery system.',
+See also:
+* {{msg-mw|Confirmemail sendfailed}}',
+'confirmemail_sendfailed' => 'Failure message to do with [[Special:ConfirmEmail]]. Parameters:
+* $1 - message from the e-mail delivery system
+See also:
+* {{msg-mw|Confirmemail oncreate}}',
+'confirmemail_invalid' => 'Error message on [[Special:ConfirmEmail]] on error of confirmation.',
 'confirmemail_needlogin' => 'Used on [[Special:ConfirmEmail]] when you are logged out.
 * $1 is a link to [[Special:UserLogin]] with {{msg-mw|loginreqlink}} as link description',
+'confirmemail_success' => 'Explanation on [[Special:ConfirmEmail]] on completion of confirmation.',
 'confirmemail_loggedin' => 'Explanation on [[Special:ConfirmEmail]] on completion of confirmation.',
+'confirmemail_error' => 'Error message on [[Special:ConfirmEmail]]',
 'confirmemail_subject' => 'Text in subject box of e-mail sent to user during e-mail address confirmation
 {{Identical|SITENAME e-mail address confirmation}}',
 'confirmemail_body' => 'This message is sent as an e-mail to users when they add or change their e-mail adress in [[Special:Preferences]].
@@ -4526,18 +7871,48 @@ See also [[MediaWiki:Confirmemail_body_changed]].
 
 # Scary transclusion
 'scarytranscludedisabled' => 'Shown when scary transclusion is disabled.',
-'scarytranscludefailed' => 'Shown when the HTTP request for the template failed.',
-'scarytranscludefailed-httpstatus' => 'Identical to {{msg-mw|scarytranscludefailed}}, but shows the HTTP error which was received.',
+'scarytranscludefailed' => 'Shown when the HTTP request for the template failed.
+
+* {{msg-mw|Scarytranscludefailed}}
+* {{msg-mw|Scarytranscludefailed-httpstatus}}',
+'scarytranscludefailed-httpstatus' => 'Identical to {{msg-mw|scarytranscludefailed}}, but shows the HTTP error which was received.
+
+* {{msg-mw|Scarytranscludefailed}}
+* {{msg-mw|Scarytranscludefailed-httpstatus}}',
 'scarytranscludetoolong' => 'The URL was too long.',
 
+# Delete conflict
+'deletedwhileediting' => 'Used as warning in the EditPage page.',
+'confirmrecreate' => '* $1 - username
+* $2 - reason
+See also:
+* {{msg-mw|Confirmrecreate}}
+* {{msg-mw|Confirmrecreate-noreason}}',
+'confirmrecreate-noreason' => '* $1 - username
+See also:
+* {{msg-mw|Confirmrecreate}}
+* {{msg-mw|Confirmrecreate-noreason}}',
+'recreate' => 'Used as link text.
+
+See also:
+* {{msg-mw|Recreate}}
+* {{msg-mw|Tooltip-recreate}}',
+
 'unit-pixel' => '{{optional}}',
 
 # action=purge
-'confirm_purge_button' => '{{Identical|OK}}',
+'confirm_purge_button' => 'Used as Submit button text.
+{{Identical|OK}}',
+'confirm-purge-top' => 'Used as confirmation message.',
+'confirm-purge-bottom' => 'Additional description for Purge form.',
 
 # action=watch/unwatch
-'confirm-watch-button' => '{{Identical|OK}}',
-'confirm-unwatch-button' => '{{Identical|OK}}',
+'confirm-watch-button' => 'Used as Submit button text.
+{{Identical|OK}}',
+'confirm-watch-top' => 'Used as confirmation message.',
+'confirm-unwatch-button' => 'Used as Submit button text.
+{{Identical|OK}}',
+'confirm-unwatch-top' => 'Used as confirmation message.',
 
 # Separators for various lists, etc.
 'semicolon-separator' => '{{optional}}',
@@ -4553,17 +7928,38 @@ Most languages use a space, but some Asian languages, such as Thai and Chinese,
 'ellipsis' => '{{optional}}',
 'percent' => '{{optional}}',
 'parentheses' => '{{optional}}',
+'brackets' => '{{Optional}}',
 
 # Multipage image navigation
 'imgmultipageprev' => '{{Identical|Previous page}}',
 'imgmultipagenext' => '{{Identical|Next page}}',
-'imgmultigo' => '{{Identical|Go}}',
+'imgmultigo' => 'Used as label for submit button.
+
+See also:
+* {{msg-mw|Imgmultigoto}}
+{{Identical|Go}}',
+'imgmultigoto' => 'Used in the ImagePage page which has multiple pages. Parameters:
+* $1 - page number
+See also:
+* {{msg-mw|Imgmultigo|Submit button text}}',
 
 # Table pager
-'ascending_abbrev' => 'Abbreviation of Ascending power',
-'table_pager_next' => '{{Identical|Next page}}',
-'table_pager_prev' => '{{Identical|Previous page}}',
+'ascending_abbrev' => 'Abbreviation of ascending order.
+See also:
+* {{msg-mw|Ascending abbrev}}
+* {{msg-mw|Descending abbrev}}',
+'descending_abbrev' => 'Abbreviation of descending order.
+See also:
+* {{msg-mw|Ascending abbrev}}
+* {{msg-mw|Descending abbrev}}',
+'table_pager_next' => 'Used as image button text of pager. See [[Support|example]] (the bottom of the page).
+{{Identical|Next page}}',
+'table_pager_prev' => 'Used as image button text of pager. See [[Support|example]] (the bottom of the page).
+{{Identical|Previous page}}',
+'table_pager_first' => 'Used as image button text of pager. See [[Support|example]] (the bottom of the page).',
+'table_pager_last' => 'Used as image button text of pager. See [[Support|example]] (the bottom of the page).',
 'table_pager_limit' => "Do not use PLURAL in this message, because ''$1'' is not the actual number. ''$1'' is a limit selector drop-down list.",
+'table_pager_limit_label' => 'Used as label for input field.',
 'table_pager_limit_submit' => '{{Identical|Go}}',
 'table_pager_empty' => 'Used in a table pager when there are no results (e.g. when there are no images in the table on [[Special:ImageList]]).',
 
@@ -4615,15 +8011,43 @@ Bitrate (of a file, typically) in yottabits (1 yottabits = 1000×1000×1000×100
 
 # Live preview
 'livepreview-loading' => '{{Identical|Loading}}',
+'livepreview-ready' => 'See also:
+* {{msg-mw|Livepreview-loading}}
+* {{msg-mw|Livepreview-failed}}
+* {{msg-mw|Livepreview-error}}',
+'livepreview-failed' => 'Used as error message.
+
+See also:
+* {{msg-mw|Livepreview-failed}}
+* {{msg-mw|Livepreview-error}}',
+'livepreview-error' => 'Used as error message. Parameters:
+* $1 - ...
+* $2 - ...
+See also:
+* {{msg-mw|Livepreview-failed}}
+* {{msg-mw|Livepreview-error}}',
+
+# Friendlier slave lag warnings
+'lag-warn-normal' => 'Used as warning about slave lag. See also:
+* {{msg-mw|Lag-warn-normal}}
+* {{msg-mw|Lag-warn-high}}',
+'lag-warn-high' => 'Used as warning about slave lag. See also:
+* {{msg-mw|Lag-warn-normal}}
+* {{msg-mw|Lag-warn-high}}',
 
 # Watchlist editor
-'watchlistedit-numitems' => 'Message on [[Special:EditWatchlist]]. This is paired with the message {{Msg-mw|Watchlistedit-noitems}} which appears instead of Watchlistedit-numitems when $1 is 0.',
+'watchlistedit-numitems' => 'Message on [[Special:EditWatchlist]]. This is paired with the message {{Msg-mw|Watchlistedit-noitems}} which appears instead of this message when $1 is 0.',
 'watchlistedit-noitems' => "Message on [[Special:EditWatchlist]], which only appears when a user's watchlist is empty.",
 'watchlistedit-normal-title' => 'Title of [[Special:Watchlist/edit|special page]].',
 'watchlistedit-normal-legend' => 'Heading of dialogue box on [[Special:Watchlist/edit]]',
 'watchlistedit-normal-explain' => 'An introduction/explanation about the [[Special:Watchlist/edit|normal edit watchlist function]].
 Hint: the text "Remove Titles" is in {{msg-mw|watchlistedit-normal-submit}}',
-'watchlistedit-normal-submit' => 'Text of submit button on [[Special:Watchlist/edit]].',
+'watchlistedit-normal-submit' => 'Text of submit button on [[Special:Watchlist/edit]].
+
+See also:
+* {{msg-mw|Watchlistedit-normal-submit}}
+* {{msg-mw|Accesskey-watchlistedit-normal-submit}}
+* {{msg-mw|Tooltip-watchlistedit-normal-submit}}',
 'watchlistedit-normal-done' => 'Message on [[Special:EditWatchlist]] after pages are removed from the watchlist.',
 'watchlistedit-raw-title' => 'Title of [[Special:Watchlist/raw|Special page]].
 
@@ -4633,16 +8057,32 @@ Hint: the text "Remove Titles" is in {{msg-mw|watchlistedit-normal-submit}}',
 {{Identical|Edit raw watchlist}}',
 'watchlistedit-raw-explain' => 'An introduction/explanation about the [[Special:Watchlist/raw|raw edit watchlist function]].',
 'watchlistedit-raw-titles' => 'Text above edit box containing items being watched on [[Special:Watchlist/raw]].',
-'watchlistedit-raw-submit' => 'Text of submit button on [[Special:Watchlist/raw]].',
+'watchlistedit-raw-submit' => 'Text of submit button on [[Special:Watchlist/raw]].
+
+See also:
+* {{msg-mw|Watchlistedit-raw-submit}}
+* {{msg-mw|Accesskey-watchlistedit-raw-submit}}
+* {{msg-mw|Tooltip-watchlistedit-raw-submit}}',
 'watchlistedit-raw-done' => 'A message which appears after the raw watchlist has been updated using [[Special:Watchlist/raw]].',
 'watchlistedit-raw-added' => 'Message on [[Special:EditWatchlist/raw]]. The message appears after at least 1 message is added to the raw watchlist.',
 'watchlistedit-raw-removed' => 'Message on [[Special:EditWatchlist/raw]]. The message appears after at least 1 message is deleted from the raw watchlist.',
 
 # Watchlist editing tools
-'watchlisttools-view' => '[[Special:Watchlist]]: Navigation link under the title. See also {{msg|watchlisttools-edit}} and {{msg|watchlisttools-raw}}.',
-'watchlisttools-edit' => '[[Special:Watchlist]]: Navigation link under the title. See also {{msg|watchlisttools-view}} and {{msg|watchlisttools-raw}}.',
-'watchlisttools-raw' => '[[Special:Watchlist]]: Navigation link under the title. See also {{msg|watchlisttools-view}} and {{msg|watchlisttools-edit}}.
+'watchlisttools-view' => '[[Special:Watchlist]]: Navigation link under the title.
+
+See also:
+* {{msg|watchlisttools-edit}}
+* {{msg|watchlisttools-raw}}',
+'watchlisttools-edit' => '[[Special:Watchlist]]: Navigation link under the title.
+
+See also:
+* {{msg|watchlisttools-view}}
+* {{msg|watchlisttools-raw}}',
+'watchlisttools-raw' => '[[Special:Watchlist]]: Navigation link under the title.
 
+See also:
+* {{msg-mw|watchlisttools-view}}
+* {{msg-mw|watchlisttools-edit}}
 {{Identical|Edit raw watchlist}}',
 
 # Iranian month names
@@ -4765,7 +8205,7 @@ Use your language default parentheses ({{msg-mw|parentheses}}), but not use the
 # Core parser functions
 'unknown_extension_tag' => '* Description: This is an error shown when you use an unknown extension tag name. This feature allows tags like <tt><nowiki><pre></nowiki></tt> to be called with a parser like <tt><nowiki>{{#tag:pre}}</nowiki></tt>.
 * Parameter $1: This is the unknown extension tag name.',
-'duplicate-defaultsort' => 'Definition of [http://en.wikipedia.org/wiki/Sorting sort key] on Wikipedia.',
+'duplicate-defaultsort' => 'See definition of [http://en.wikipedia.org/wiki/Sorting sort key] on Wikipedia.',
 
 # Special:Version
 'version' => 'Name of special page displayed in [[Special:SpecialPages]]
@@ -4777,6 +8217,8 @@ Use your language default parentheses ({{msg-mw|parentheses}}), but not use the
 {{Identical|Special pages}}',
 'version-parserhooks' => 'This message is a heading at [[Special:Version]] for extensions that modifies the parser of wikitext.',
 'version-variables' => '{{Identical|Variable}}',
+'version-antispam' => 'Part of [[Special:Version]].
+This message is followed by the list of SPAM prevention extensions.',
 'version-skins' => '{{Identical|Skin}}',
 'version-api' => '{{optional}}',
 'version-other' => '{{Identical|Other}}',
@@ -4784,6 +8226,8 @@ Use your language default parentheses ({{msg-mw|parentheses}}), but not use the
 There are no such extensions here, so look at [[wikipedia:Special:Version]] for an example.',
 'version-hooks' => 'Shown in [[Special:Version]]',
 'version-extension-functions' => 'Shown in [[Special:Version]]',
+'version-parser-extensiontags' => 'Part of [[Special:Version]].
+This message is followed by the list of parser extension tags like <code><nowiki><charinsert></nowiki></code>, <code><nowiki><coordinates></nowiki></code>, etc.',
 'version-parser-function-hooks' => 'Shown in [[Special:Version]]',
 'version-hook-name' => 'Shown in [[Special:Version]]',
 'version-hook-subscribedby' => 'Shown in [[Special:Version]]',
@@ -4800,14 +8244,18 @@ This is being used in [[Special:Version]], preceeding the subversion revision nu
 'version-poweredby-others' => 'Used at the very end of {{msg-mw|version-poweredby-credits}} on [[Special:Version]]. First, there\'s a long list of selected MediaWiki authors, then the word "and" (from {{msg-mw|and}}) follows and then this translation, which is supposed to credit the many other people than developer helping with MediaWiki.',
 'version-credits-summary' => 'Summary of the [[Special:Version/Credits]] sub page, which lists all developers etc. who contributed to MediaWiki. Shown at the top.',
 '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-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]].
 See also {{msg-mw|Version-entrypoints}}',
 'version-entrypoints-header-url' => 'Header for the second column in the entry points table on [[Special:Version]].',
-'version-entrypoints-articlepath' => 'A short description of the article path entry point. Links to the mediawiki.org documentation page for $wgArticlePath.',
-'version-entrypoints-scriptpath' => 'A short description of the script path entry point. Links to the mediawiki.org documentation page for $wgScriptPath.',
+'version-entrypoints-articlepath' => '{{Optional}}
+A short description of the article path entry point. Links to the mediawiki.org documentation page for $wgArticlePath.',
+'version-entrypoints-scriptpath' => '{{Optional}}
+A short description of the script path entry point. Links to the mediawiki.org documentation page for $wgScriptPath.',
 
 # Special:FilePath
 'filepath' => 'Legend of fieldset around input box in [[Special:FilePath]].',
@@ -4841,10 +8289,16 @@ $1 is the name of the requested file.',
 
 * $1 is the name of the requested file.
 * $2 is the number of identical duplicates of the requested file',
+'fileduplicatesearch-noresults' => 'Parameters:
+* $1 - file name',
 
 # Special:SpecialPages
 'specialpages' => 'Display name of link to [[Special:SpecialPages]] shown on all pages in the toolbox, as well as the page title and header of [[Special:SpecialPages]].
 
+See also:
+* {{msg-mw|Specialpages}}
+* {{msg-mw|Accesskey-t-specialpages}}
+* {{msg-mw|Tooltip-t-specialpages}}
 {{Identical|Special pages}}',
 'specialpages-note' => 'Footer note for the [[Special:SpecialPages]] page',
 'specialpages-group-maintenance' => 'Section heading in the list of [[Special:SpecialPages|Special pages]].',
@@ -4858,14 +8312,22 @@ $1 is the name of the requested file.',
 'specialpages-group-pagetools' => 'Title of the special pages group containing special pages like [[Special:MovePage]], [[Special:Undelete]], [[Special:WhatLinksHere]], [[Special:Export]] etc.',
 'specialpages-group-wiki' => 'Title of the special pages group, containing special pages like [[Special:Version]], [[Special:Statistics]], [[Special:LockDB]], etc.',
 'specialpages-group-redirects' => 'Title of the special pages group, containing special pages that redirect to another location, like [[Special:Randompage]], [[Special:Mypage]], [[Special:Mytalk]], etc.',
+'specialpages-group-spam' => 'Title of the special pages group, containing special pages like (...), etc.',
 
 # Special:BlankPage
-'intentionallyblankpage' => 'Text displayed in [[Special:BlankPage]].',
+'blankpage' => 'Used as page title in [[Special:BlankPage]].
+
+See also:
+* {{msg-mw|Intentionallyblankpage|text}}',
+'intentionallyblankpage' => 'Text displayed in [[Special:BlankPage]].
+
+See also:
+* {{msg-mw|Intentionallyblankpage|page title}}',
 
 # External image whitelist
 'external_image_whitelist' => "As usual please leave all the wiki markup, including the spaces, as they are. You can translate the text, including 'Leave this line exactly as it is'. The first line of this messages has one (1) leading space.
 
-Definition of [http://en.wikipedia.org/wiki/Regular_expression regular expression] on Wikipedia.",
+See definition of [http://en.wikipedia.org/wiki/Regular_expression regular expression] on Wikipedia.",
 
 # Special:Tags
 'tags' => "Shown on [[Special:Specialpages]] for page listing the tags that the software may mark an edit with, and their meaning. For more information on tags see [//www.mediawiki.org/wiki/Manual:Tags Mediawiki].
@@ -4899,16 +8361,82 @@ Used on [[Special:Tags]]. Verb. Used as display text on a link to create/edit a
 'compare-rev2' => 'Label for the field of the 2nd revision in the comparison for [[Special:ComparePages]]
 {{Identical|Revision}}',
 'compare-submit' => 'Submit button on [[Special:ComparePages]]',
+'compare-invalid-title' => 'Used as error message in [[Special:ComparePages]].',
+'compare-title-not-exists' => 'Used as error message in [[Special:ComparePages]].',
+'compare-revision-not-exists' => 'Used as error message in [[Special:ComparePages]].',
 
 # Database error messages
 'dberr-header' => 'This message does not allow any wiki nor html markup.',
 'dberr-problems' => 'This message does not allow any wiki nor html markup.',
 'dberr-again' => 'This message does not allow any wiki nor html markup.',
-'dberr-info' => 'This message does not allow any wiki nor html markup.',
+'dberr-info' => 'This message does not allow any wiki nor html markup.
+* $1 - database server name',
 'dberr-usegoogle' => 'This message does not allow any wiki nor html markup.',
-'dberr-outofdate' => "In this sentence, '''their''' indexes refers to '''Google's''' indexes. This message does not allow any wiki nor html markup.",
+'dberr-outofdate' => "{{doc-singularthey}}
+In this sentence, '''their''' indexes refers to '''Google's''' indexes. This message does not allow any wiki nor html markup.",
+'dberr-cachederror' => 'Used as error message at the bottom of the page.',
 
 # HTML forms
+'htmlform-invalid-input' => 'Used as error message in HTML forms.
+
+* {{msg-mw|Htmlform-required}}
+* {{msg-mw|Htmlform-float-invalid}}
+* {{msg-mw|Htmlform-int-invalid}}
+* {{msg-mw|Htmlform-int-toolow}}
+* {{msg-mw|Htmlform-int-toohigh}}
+* {{msg-mw|Htmlform-select-badoption}}',
+'htmlform-select-badoption' => 'Used as error message in HTML forms.
+
+* {{msg-mw|Htmlform-invalid-input}}
+* {{msg-mw|Htmlform-required}}
+* {{msg-mw|Htmlform-float-invalid}}
+* {{msg-mw|Htmlform-int-invalid}}
+* {{msg-mw|Htmlform-int-toolow}}
+* {{msg-mw|Htmlform-int-toohigh}}',
+'htmlform-int-invalid' => 'Used as error message in HTML forms.
+
+* {{msg-mw|Htmlform-invalid-input}}
+* {{msg-mw|Htmlform-required}}
+* {{msg-mw|Htmlform-float-invalid}}
+* {{msg-mw|Htmlform-int-toolow}}
+* {{msg-mw|Htmlform-int-toohigh}}
+* {{msg-mw|Htmlform-select-badoption}}',
+'htmlform-float-invalid' => 'Used as error message in HTML forms.
+
+"number" stands for "float" (integer and decimal fraction).
+
+* {{msg-mw|Htmlform-invalid-input}}
+* {{msg-mw|Htmlform-required}}
+* {{msg-mw|Htmlform-int-invalid}}
+* {{msg-mw|Htmlform-int-toolow}}
+* {{msg-mw|Htmlform-int-toohigh}}
+* {{msg-mw|Htmlform-select-badoption}}',
+'htmlform-int-toolow' => 'Used as error message in HTML forms. Parameters:
+* $1 - minimum value
+See also:
+* {{msg-mw|Htmlform-invalid-input}}
+* {{msg-mw|Htmlform-required}}
+* {{msg-mw|Htmlform-float-invalid}}
+* {{msg-mw|Htmlform-int-invalid}}
+* {{msg-mw|Htmlform-int-toohigh}}
+* {{msg-mw|Htmlform-select-badoption}}',
+'htmlform-int-toohigh' => 'Used as error message in HTML forms. Parameters:
+* $1 - maximum value
+See also:
+* {{msg-mw|Htmlform-invalid-input}}
+* {{msg-mw|Htmlform-required}}
+* {{msg-mw|Htmlform-float-invalid}}
+* {{msg-mw|Htmlform-int-invalid}}
+* {{msg-mw|Htmlform-int-toolow}}
+* {{msg-mw|Htmlform-select-badoption}}',
+'htmlform-required' => 'Used as error message in HTML forms.
+
+* {{msg-mw|Htmlform-invalid-input}}
+* {{msg-mw|Htmlform-float-invalid}}
+* {{msg-mw|Htmlform-int-invalid}}
+* {{msg-mw|Htmlform-int-toolow}}
+* {{msg-mw|Htmlform-int-toohigh}}
+* {{msg-mw|Htmlform-select-badoption}}',
 'htmlform-submit' => '{{Identical|Submit}}',
 'htmlform-reset' => '{{Identical|Undo}}',
 'htmlform-selectorother-other' => 'Used in drop-down boxes in [[Special:Preferences]] as follows:
@@ -4998,15 +8526,42 @@ Parameter $4, the target page, is also not visible to parser functions.',
 'logentry-patrol-patrol-auto' => '{{Logentry}}
 * $4 is a formatted revision number, maybe linked to the diff.
 "Automatically" refers to users with autopatrol right who mark revisions automatically patrolled when editing.',
+'logentry-newusers-newusers' => 'Parameters:
+* $1 - user name',
 'logentry-newusers-create' => '{{Logentry}}
 
 $4 is the gender of the target user.',
 'logentry-newusers-create2' => '{{Logentry}}
 
-$4 is the name of the target user.',
+$4 is the name of the user that was created.',
+'logentry-newusers-byemail' => '{{Logentry}}
+
+$4 is the name of the user that was created.',
 'logentry-newusers-autocreate' => '{{Logentry}}
 
 $4 is the gender of the target user.',
+'logentry-rights-rights' => '*$1 - username
+*$2 - (see below)
+*$3 - username
+*$4 - list of user groups or {{msg-mw|Rightsnone}}
+*$5 - list of user groups or {{msg-mw|Rightsnone}}
+----
+{{Logentry}}',
+'logentry-rights-rights-legacy' => '*$1 - username
+*$2 - (see below)
+*$3 - username
+----
+{{Logentry}}',
+'logentry-rights-autopromote' => '*$1 - username
+*$2 - (see below)
+*$3 - (see below)
+*$4 - comma separated list of old user groups or {{msg-mw|Rightsnone}}
+*$5 - comma separated list of new user groups
+----
+{{Logentry}}',
+'rightsnone' => 'Default rights for registered users.
+
+{{Identical|None}}',
 
 # Feedback
 'feedback-bugornote' => 'When feedback dialog box is opened, this introductory message in small print explains the options to report a bug or add simple feedback. We expect that people in a hurry will not read this.',
@@ -5075,6 +8630,7 @@ $4 is the gender of the target user.',
 'api-error-ok-but-empty' => 'API error message that can be used for client side localisation of API errors.',
 'api-error-overwrite' => 'API error message that can be used for client side localisation of API errors.',
 'api-error-stashfailed' => 'API error message that can be used for client side localisation of API errors.',
+'api-error-publishfailed' => 'API error message that can be used for client side localisation of API errors.',
 'api-error-timeout' => 'API error message that can be used for client side localisation of API errors.',
 'api-error-unclassified' => 'API error message that can be used for client side localisation of API errors.',
 'api-error-unknown-code' => 'API error message that can be used for client side localisation of API errors. Parameters:
@@ -5082,10 +8638,21 @@ $4 is the gender of the target user.',
 'api-error-unknown-error' => 'API error message that can be used for client side localisation of API errors.',
 'api-error-unknown-warning' => 'API error message that can be used for client side localisation of API errors. Parameters:
 * $1 is an unknown warning.',
+'api-error-unknownerror' => 'API error message that can be used for client side localisation of API errors. Parameters:
+* $1 is an unknown error message.',
 'api-error-uploaddisabled' => 'API error message that can be used for client side localisation of API errors.',
 'api-error-verification-error' => 'The word "extension" refers to the part behind the last dot in a file name, that by convention gives a hint about the kind of data format which a files contents are in.',
 
-# Unknown messages
-'svg-long-error' => 'Displayed for invalid SVG file metadata.
-* $1 is the error message.',
+# Durations
+'duration-seconds' => '{{Related|Duration}}',
+'duration-minutes' => '{{Related|Duration}}
+{{Identical|Minute}}',
+'duration-hours' => '{{Related|Duration}}',
+'duration-days' => '{{Related|Duration}}',
+'duration-weeks' => '{{Related|Duration}}',
+'duration-years' => '{{Related|Duration}}',
+'duration-decades' => '{{Related|Duration}}',
+'duration-centuries' => '{{Related|Duration}}',
+'duration-millennia' => '{{Related|Duration}}',
+
 );
index d61676f..ac35dad 100644 (file)
@@ -314,7 +314,7 @@ $messages = array(
 
 'underline-always' => "Hayk'appas",
 'underline-never' => "Mana hayk'appas",
-'underline-default' => "Wamp'unap kikinmanta chanin",
+'underline-default' => "Qarap icha wamp'unap kikinmanta chanin",
 
 # Font style option in Special:Preferences
 'editfont-style' => "Llamk'apuy k'itichapi sanampa rik'chakuynin:",
@@ -637,7 +637,7 @@ Tapuna: $2',
 'viewsource-title' => "$1 sutiyuq p'anqap pukyu qillqanta qhaway",
 'actionthrottled' => "Rurayniykiqa hark'asqam",
 'actionthrottledtext' => "Spam nisqa millay rurayta hark'anapaq, manam saqillasunkichu kayta nisyu kutikunata rurayta ratulla mit'api. Nisyutam ruraykachanki. Ama hina kaspa, huk minutukunamanta musuqmanta ruraykachay.",
-'protectedpagetext' => "Kay p'anqaqa llamk'apuymanta amachasqam.",
+'protectedpagetext' => "Kay p'anqaqa llamk'apuymanta hukchaymantapas amachasqam.",
 'viewsourcetext' => "Kay p'anqap pukyu qillqantam qhawayta iskaychaytapas atinki:",
 'viewyourtext' => "'''Qampa llamk'apusqayki'''p pukyu qillqantam qhawayta iskaychaytapas atinki:",
 'protectedinterface' => "Kay p'anqapiqa wakichintinpa uyapuranpaq qillqam. Wandalismu nisqamanta amachasqam kachkan.
@@ -669,6 +669,7 @@ Amachaq kamachiqqa kayrayku amachani nispa nirqanmi: "$3".',
 'logouttext' => "'''Llamk'apuy tiyayniykiqa puchukasqañam.'''
 
 Sutinnaq kaspaykipas {{SITENAME}}pi wamp'uytam atinki. Mana hinataq munaspaykiqa, <span class='plainlinks'>[$1 musuqmanta yaykuy]</span> ñawpaq icha huk sutiwan. Huk p'anqakunaqa kaqllam rikch'akunqa, ''cache'' nisqa pakasqa hallch'ata mana ch'usaqchaptiykiqa.",
+'welcomeuser' => 'Allinmi hamusqayki, $1!',
 'yourname' => 'Ruraq sutiyki:',
 'yourpassword' => 'Yaykuna rimayki',
 'yourpasswordagain' => 'Yaykuna rimaykita kutipayay',
@@ -978,7 +979,6 @@ Hallch'api qhipaq kaq yaykuchisqataqa kay qatiqpim rikunki willasunaykipaq:",
 'template-protected' => '(amachasqa)',
 'template-semiprotected' => '(rakilla amachasqa)',
 'hiddencategories' => "Kay p'anqaqa {{PLURAL:$1|1 pakasqa katiguriya|$1 pakasqa katiguriyakuna}}manmi kapun:",
-'nocreatetitle' => "P'anqa kamariyqa saywachasqam",
 'nocreatetext' => "{{SITENAME}}piqa saywachasqam musuq p'anqakunata kamariy. Ñawpaqman kutiytam atinkiman kachkaqña p'anqata llamk'apuspa. Astawantaq, [[Special:UserLogin|yaykuy icha musuq rakiqunata kichariy]].",
 'nocreate-loggedin' => "Manam saqillasunkichu musuq p'anqakunata kamariyta.",
 'sectioneditnotsupported-title' => "Raki allichayqa manam q'imisqachu",
@@ -1002,6 +1002,7 @@ Qullusqachá.",
 'edit-already-exists' => "Manam atinichu musuq p'anqata kamariyta.
 Kachkañam.",
 'defaultmessagetext' => 'Ñawpaq qillqa',
+'invalid-content-data' => 'Samiqmanta willaykunaqa manam allinchu',
 
 # Content models
 'content-model-wikitext' => 'wiki qillqa',
@@ -1363,9 +1364,9 @@ Chaytataq manam kutichiyta atinkichu.",
 'prefs-emailconfirm-label' => 'E-chaskita takyachiy:',
 'prefs-textboxsize' => "Llamk'apuna wintanap chhikan kaynin",
 'youremail' => 'E-chaski imamaytayki',
-'username' => 'Ruraqpa sutin:',
-'uid' => 'Ruraqpa ID-nin:',
-'prefs-memberingroups' => 'Kay {{PLURAL:$1|huñuman|huñukunaman}} kapuq:',
+'username' => '{{GENDER:$1|Ruraqpa sutin}}:',
+'uid' => '{{GENDER:$1|Ruraqpa}} ID-nin:',
+'prefs-memberingroups' => 'Kay {{PLURAL:$1|huñuman|huñukunaman}} {{GENDER:$2|kapuq}}:',
 'prefs-registration' => "Hallch'ay pacha:",
 'yourrealname' => 'Chiqap sutiyki*',
 'yourlanguage' => 'Rimay',
@@ -1512,12 +1513,13 @@ $1 {{PLURAL:$1|sanampamanta|sanampakunamanta}} aswan pisi kananmi.',
 'right-sendemail' => 'Huk ruraqkunaman e-chaskita kachay',
 'right-passwordreset' => 'Yaykuna rima kutichina e-chaskikunata qhaway',
 
+# Special:Log/newusers
+'newuserlogpage' => "Rakiquna kamariy hallch'a",
+'newuserlogpagetext' => "Kayqa ruraqkunap rakiqunankunata kamariymanta hallch'am.",
+
 # User rights log
 'rightslog' => 'Ruraqpa hayñinkunap hukyasqankuna',
 'rightslogtext' => "Kayqa hayñi hukchasqa hallch'aymi.",
-'rightslogentry' => 'hukchan $1-pa hayñinkunata $2-manta $3-man',
-'rightslogentry-autopromote' => 'kikinmanta $2-manta $3-manmi ñawpanchisqa',
-'rightsnone' => '(-)',
 
 # Associated actions - in the sentence "You do not have permission to X"
 'action-read' => "kay p'anqata ñawiriy",
@@ -1879,6 +1881,7 @@ Ama hina kaspa, [$2 willañiqi ch'uyanchana p'anqata] qhaway astawan willachikun
 'uploadnewversion-linktext' => 'Kay willañiqi ñaqha musuqchasqata churkuy',
 'shared-repo-from' => '$1-manta',
 'shared-repo' => 'rakinakusqa qullqa',
+'upload-disallowed-here' => 'Manam atinkichu kay willañiqita huknachayta.',
 
 # File reversion
 'filerevert' => '$1-ta kutichiy',
@@ -1969,7 +1972,7 @@ P'anqa [[MediaWiki:Disambiguationspage]] plantillayuq kaspaqa sut'ichana qillqam
 'double-redirect-fixed-maintenance' => '[[$1]]-manta [[$2]]-man iskaylla pusapunata allinchaspa.',
 'double-redirect-fixer' => 'Pusapuna allinchaq',
 
-'brokenredirects' => 'Panta pusapunakuna',
+'brokenredirects' => "P'akisqa pusapunakuna",
 'brokenredirectstext' => "Kay pusapuna p'anqakunaqa mana kachkaq p'anqakunamanmi pusapuchkan:",
 'brokenredirects-edit' => "llamk'apuy",
 'brokenredirects-delete' => 'qulluy',
@@ -1984,6 +1987,7 @@ P'anqa [[MediaWiki:Disambiguationspage]] plantillayuq kaspaqa sut'ichana qillqam
 # Miscellaneous special pages
 'nbytes' => '$1 {{PLURAL:$1|byte|byte}}',
 'ncategories' => '$1 {{PLURAL:$1|katiguriya|katiguriyakuna}}',
+'ninterwikis' => '{{PLURAL:$1|huk wikipura|$1 wikipura}}',
 'nlinks' => "$1 {{PLURAL:$1|t'inki|t'inkikuna}}",
 'nmembers' => '$1 {{PLURAL:$1|qillqa|qillqakuna}}',
 'nrevisions' => "$1 {{PLURAL:$1|llamk'apusqa|llamk'apusqakuna}}",
@@ -2012,6 +2016,7 @@ P'anqa [[MediaWiki:Disambiguationspage]] plantillayuq kaspaqa sut'ichana qillqam
 'mostlinkedtemplates' => "Lliwmanta aswan t'inkimuqniyuq plantillakuna",
 'mostcategories' => "Lliwmanta aswan katiguriyayuq p'anqakuna",
 'mostimages' => "Lliwmanta astawan llamk'achisqa rikchakuna",
+'mostinterwikis' => "Lliwmanta aswan wikipurayuq p'anqakuna",
 'mostrevisions' => 'Lliwmanta aswan hukchasqayuq qillqakuna',
 'prefixindex' => "Tukuy p'anqakuna ñawpa k'askaqchayuq",
 'prefixindex-namespace' => "Tukuy qallarina k'askaqniyuq p'anqakuna ($1 suti k'itipi)",
@@ -2065,6 +2070,7 @@ Ama hina kaspa musyariy, huk llika tiyaykunachá chiqalla t'inkimun huk rikchap
 Rikuyniykitaqa k'ullkuchaytam atinki hallch'a layata, ruraqpa sutinta (uchuy icha hatun sanampakunata musyaq) icha chayachisqa p'anqata (uchuy icha hatun sanampakunata musyaq) akllaspa.",
 'logempty' => "Manam hallch'asqakuna kachkanchu.",
 'log-title-wildcard' => "Kaywan qallariq p'anqa sutikunata maskay",
+'showhideselectedlogentries' => "Akllasqa hallch'asqakunata rikuchiy/pakay",
 
 # Special:AllPages
 'allpages' => "Tukuy p'anqakuna",
@@ -2110,7 +2116,7 @@ Rikuyniykitaqa k'ullkuchaytam atinki hallch'a layata, ruraqpa sutinta (uchuy ich
 'linksearch-ok' => 'Maskay',
 'linksearch-text' => 'Ima rantipas sananchawanpas maskayta saqillasunkim, ahinataq "*.wikipedia.org".
 Hawa kaq duminyullapas kanam, ahinataq "*.org".<br />
-Q\'imichisqa tantari qillqa: <code>$1</code> (maskaspaykiqa kaykunamanta ama mayqintapas yapaychu).',
+Q\'imichisqa tantari {{PLURAL:$2|qillqa|qillqakuna}}: <code>$1</code> (mana mayqintapas akllaptiykiqa, http:// nisqam kanqa).',
 'linksearch-line' => "$1-man $2-manta t'inkimusqa",
 'linksearch-error' => 'Ima rantipas sananchaqa (* ?) tiyaypa qallariyninpim kanman chaylla.',
 
@@ -2129,10 +2135,6 @@ Q\'imichisqa tantari qillqa: <code>$1</code> (maskaspaykiqa kaykunamanta ama may
 'activeusers-hidesysops' => 'Kamachiqkunata pakay',
 'activeusers-noresult' => 'Ruraqkunataqa manam tarinichu.',
 
-# Special:Log/newusers
-'newuserlogpage' => "Rakiquna kamariy hallch'a",
-'newuserlogpagetext' => "Kayqa ruraqkunap rakiqunankunata kamariymanta hallch'am.",
-
 # Special:ListGroupRights
 'listgrouprights' => 'Ruraq huñup hayñinkuna',
 'listgrouprights-summary' => "Kay qatiq sutisuyupiqa kay wikipi sut'ichasqa ruraq huñukunatam, kikinpa chayamuna hayñinkunatawan rikunki.
@@ -2156,8 +2158,10 @@ Chay kikinkunap hayñinkunamanta astawan ñawirinaykipaqqa [[{{MediaWiki:Listgro
 'mailnologin' => 'Imamaytataqa ama kachaychu',
 'mailnologintext' => '[[Special:UserLogin|Yaykunaykim]], [[Special:Preferences|allinkachinaykikunapi]] chaniyuq e-chaski imamaytappas kananmi tiyan huk ruraqkunaman e-chaskita kachanaykipaq.',
 'emailuser' => 'Kay ruraqman e-chaskita kachay',
+'emailuser-title-target' => 'Kay {{GENDER:$1|ruraqman}} e-chaskita kachay',
+'emailuser-title-notarget' => 'E-chaski kay ruraqman:',
 'emailpage' => 'E-chaski kay ruraqman:',
-'emailpagetext' => "Kay hunt'ana p'anqatam llamk'achiyta atinki e-chaskita kachanaykipaq.
+'emailpagetext' => "Kay uranpi kaq hunt'ana p'anqatam llamk'achiyta atinki kay {{GENDER:$1|ruraqman}} e-chaskita kachanaykipaq.
 Qampa [[Special:Preferences|allinkachinaykikunapi]] qillqakamachisqayki imamaytaqa paqarinqa kachasqayki e-chaskipi chaskiqpa kutichisunaykita atinanpaq.",
 'usermailererror' => 'Chaski llikaqa pantasqatam kutichimurqan:',
 'defemailsubject' => '{{SITENAME}} p\'anqamanta chaski "$1" sutiyuq ruraqmanta',
@@ -2189,14 +2193,14 @@ Qampa [[Special:Preferences|allinkachinaykikunapi]] qillqakamachisqayki imamayta
 
 # Watchlist
 'watchlist' => "Watiqasqa p'anqakuna",
-'mywatchlist' => 'Watiqasqaykuna',
+'mywatchlist' => "Watiqasqay p'anqakuna",
 'watchlistfor2' => '$1-paq $2',
 'nowatchlist' => 'Manam watiqasqakunachu kachkan.',
 'watchlistanontext' => 'Ama hina kaspa, $1 watiqana sutisuyuykipi imakunatapas qhawanaykipaq icha hukchanaykipaq.',
 'watchnologin' => 'Manam yaykurqankichu',
 'watchnologintext' => '[[Special:UserLogin|Yaykunaykim]] tiyan watiqana sutisuyuykita hukchanaykipaq.',
 'addwatch' => 'Watiqasqaykunaman yapay',
-'addedwatchtext' => "Kunanqa «[[:\$1]]» sutiyuq p'anqa [[Special:Watchlist|watiqanykipim]] kachkañam. Chay p'anqapi rimachinanpipas hukchanakunaqa kay watiqana p'anqapim rikunki. Watiqasqayki p'anqaqa [[Special:RecentChanges|ñaqha hukchasqakunapi]] '''yanasapa''' qillqasqa rikuchisqa kanqa aswan sikllalla tarinaykipaq. <p>Manaña watiqayta munaptiykiqa, uma siq'ipi \"amaña watiqaychu\" ñit'iy.",
+'addedwatchtext' => "Kunanqa \"[[:\$1]]\" sutiyuq p'anqa [[Special:Watchlist|watiqasqayki p'anqakunaman]] yapasqañam. Chay p'anqapi rimanakuy p'anqanpipas hukchanakunata kay watiqana p'anqapim rikunki.",
 'removewatch' => 'Watiqasqaykunamanta qichuy',
 'removedwatchtext' => '"[[:$1]]" sutiyuq p\'anqaqa [[Special:Watchlist|watiqasqaykikunamanta]] qichusqam.',
 'watch' => 'Watiqay',
@@ -2225,14 +2229,22 @@ Qampa [[Special:Preferences|allinkachinaykikunapi]] qillqakamachisqayki imamayta
 'enotif_mailer' => '{{SITENAME}}pa chaski musyachina sirwiqnin',
 'enotif_reset' => "Tukuy p'anqakunata watukusqakama sananchay",
 'enotif_impersonal_salutation' => '{{SITENAME}}pa ruraqnin',
+'enotif_subject_deleted' => "{{gender:$2|$2}} sutiyuq ruraqqa {{SITENAME}} nisqapi kaq $1 nisqa p'anqatam qullurqañam",
+'enotif_subject_created' => "{{gender:$2|$2}} sutiyuq ruraqqa {{SITENAME}} nisqapi kaq $1 nisqa p'anqatam kamarirqañam",
+'enotif_subject_moved' => "{{gender:$2|$2}} sutiyuq ruraqqa {{SITENAME}} nisqapi kaq $1 nisqa p'anqatam astarqañam",
+'enotif_subject_restored' => "{{gender:$2|$2}} sutiyuq ruraqqa {{SITENAME}} nisqapi kaq $1 nisqa p'anqatam qullusqamanta paqarichirqañam",
+'enotif_subject_changed' => "{{gender:$2|$2}} sutiyuq ruraqqa {{SITENAME}} nisqapi kaq $1 nisqa p'anqatam hukcharqañam",
+'enotif_body_intro_deleted' => '{{gender:$2|$2}} sutiyuq ruraqqa {{SITENAME}} nisqapi kaq $1 nisqa p\'anqatam $PAGEEDITDATE p\'unchawpi qullurqañam, kaypi qhaway: $3.',
+'enotif_body_intro_created' => '{{gender:$2|$2}} sutiyuq ruraqqa {{SITENAME}} nisqapi kaq $1 nisqa p\'anqatam $PAGEEDITDATE p\'unchawpi kamarirqañam, kunan musuqchasqatataq kaypi qhaway: $3.',
+'enotif_body_intro_moved' => '{{gender:$2|$2}} sutiyuq ruraqqa {{SITENAME}} nisqapi kaq $1 nisqa p\'anqatam $PAGEEDITDATE p\'unchawpi astarqañam, kunan musuqchasqatataq kaypi qhaway: $3.',
+'enotif_body_intro_restored' => '{{gender:$2|$2}} sutiyuq ruraqqa {{SITENAME}} nisqapi kaq $1 nisqa p\'anqatam qullusqamanta $PAGEEDITDATE p\'unchawpi paqarichirqañam, kunan musuqchasqatataq kaypi qhaway: $3.',
+'enotif_body_intro_changed' => '{{gender:$2|$2}} sutiyuq ruraqqa {{SITENAME}} nisqapi kaq $1 nisqa p\'anqatam $PAGEEDITDATE p\'unchawpi hukcharqañam, kunan musuqchasqatataq kaypi qhaway: $3.',
 'enotif_lastvisited' => "$1 sutiyuq p'anqata qhaway qayna watukamusqaykimantapacha tukuy hukchasqakunata rikunaykipaq.",
 'enotif_lastdiff' => "$1 sutiyuq p'anqata qhaway kay hukchasqata rikunaykipaq.",
 'enotif_anon_editor' => 'sutinnaq ruraq $1',
 'enotif_body' => 'Munakusqa $WATCHINGUSERNAME,
 
-{{SITENAME}}pi $PAGETITLE sutiyuq p\'anqataqa $PAGEEDITOR sutiyuq ruraqmi $CHANGEDORCREATED $PAGEEDITDATE pachapi, $PAGETITLE_URL sutiyuq p\'anqata qhaway kunan hukchasqata rikunaykipaq.
-
-$NEWPAGE
+$PAGEINTRO $NEWPAGE
 
 Llamk\'apuqpa willasqan: $PAGESUMMARY $PAGEMINOREDIT
 
@@ -2240,7 +2252,7 @@ Llamk\'apuqta tapuy:
 e-chaski: $PAGEEDITOR_EMAIL
 wiki: $PAGEEDITOR_WIKI
 
-Kay p\'anqata mana musuqmanta watukamuptiykiqa, manam huk hukchasqakunamanta willasqaykichu. Tukuy watiqasqayki p\'anqakunapaq musyachina sananchakunatapas kutichiytam atinkiman.
+Kay p\'anqata mana musuqmanta watukamuptiykiqa, manam huk ruraykunamanta willasqaykichu. Tukuy watiqasqayki p\'anqakunapaq musyachina sananchakunatapas kutichiytam atinkiman.
 
              Tukuy sunquwan, {{SITENAME}}pa e-chaski musyachina llikan
 
@@ -2256,6 +2268,8 @@ $UNWATCHURL
 
 Yanapasunaykipaq:
 {{canonicalurl:{{MediaWiki:Helppage}}}}',
+'created' => 'kamarirqan',
+'changed' => 'hukchasqa',
 
 # Delete
 'deletepage' => "Kay p'anqata qulluy",
@@ -2292,6 +2306,8 @@ $2 nisqa p\'anqata qhaway ñaqha qullusqakunata rikunaykipaq.',
 'rollback' => 'Hukchasqakunata kutichiy',
 'rollback_short' => 'Kutichiy',
 'rollbacklink' => 'Kutichiy',
+'rollbacklinkcount' => '$1 {{PLURAL:$1|hukchasqata}} kutichiy',
+'rollbacklinkcount-morethan' => '$1-manta aswan {{PLURAL:$1|hukchasqakunata}} kutichiy',
 'rollbackfailed' => 'Manam kutichiyta atinchu',
 'cantrollback' => "Manam atinichu llamk'apusqata kutichiyta; qhipaq kaq llamk'apuqqa kay p'anqap hukllam ruraqnin.",
 'alreadyrolled' => "Manam atinichu [[User:$2|$2]]-pa ([[User talk:$2|rimanakuy]]) [[$1]] nisqa qhipaq llamk'apusqanta kutichiyta; pipas kay p'anqataqa llamk'apurqunñam icha kutichirqunñam.
@@ -2320,6 +2336,8 @@ Ama hina kaspa, llika wamp'unaykipi \"Ñawpaqman\" (\"Back\") ñit'ispa ñawpaq
 'prot_1movedto2' => '«[[$1]]» «[[$2]]»-man astasqa',
 'protect-badnamespace-title' => "Mana amachanalla suti k'iti",
 'protect-badnamespace-text' => "Kay suti k'iti kaq p'anqakunaqa manam amachanallachu.",
+'protect-norestrictiontypes-text' => "Kay p'anqaqa manam amachanapaqchu, saywachana rikch'aqkuna (llamk'apuna icha kamarina hina) mana kaptinmi.",
+'protect-norestrictiontypes-title' => "Mana amachana p'anqa",
 'protect-legend' => 'Amachayta takyachiy',
 'protectcomment' => 'Kayrayku:',
 'protectexpiry' => 'Amachaypa puchukaynin',
@@ -2334,8 +2352,8 @@ Kay qatiqpiqa '''$1''' sutiyuq p'anqap kunan allinkachinankunatam rikunki:",
 Kay qatiqpiqa '''$1''' sutiyuq p'anqap kunan allinkachinankunatam rikunki:",
 'protect-cascadeon' => "Kay p'anqaqa amachasqam kachkan, kay phaqchalla amachasqa {{PLURAL:$1|p'anqapi|p'anqakunapi}} ch'aqtasqa kaspanmi. Kay p'anqap amachasqa kachkayninta hukchaytam atinki, hinaspapas manam phaqcha nisqa amachasqa kaynintachu hukchanki.",
 'protect-default' => 'Tukuy ruraqkunapaq',
-'protect-fallback' => '"$1" saqillanam',
-'protect-level-autoconfirmed' => 'Mana llullu rakiqunayuq ruraqkunallapaq',
+'protect-fallback' => '"$1" saqillanayuq ruraqkunallapaq',
+'protect-level-autoconfirmed' => 'Kikin rakiqunayuq ruraqkunallapaq',
 'protect-level-sysop' => 'Kamachiqkunallapaq',
 'protect-summary-cascade' => "''phaqcha'' nisqapi",
 'protect-expiring' => 'puchukanqa $1 (UTC)',
@@ -2428,7 +2446,7 @@ $1',
 'blanknamespace' => '(Uma)',
 
 # Contributions
-'contributions' => "Ruraqpa llamk'apusqankuna",
+'contributions' => "{{GENDER:$1|Ruraqpa}} llamk'apusqankuna",
 'contributions-title' => "$1 sutiyuq ruraqpa llamk'apusqankuna",
 'mycontris' => "Llamk'apusqaykuna",
 'contribsub2' => '$1 ($2)',
@@ -2470,7 +2488,7 @@ Qhipaq hark'ay hallch'a yaykuchisqatam kay qatiqpi rikunki:",
 'whatlinkshere-hideredirs' => '$1 pusapunakuna',
 'whatlinkshere-hidetrans' => "$1 plantilla ch'aqtanakuna",
 'whatlinkshere-hidelinks' => "$1 t'inkikuna",
-'whatlinkshere-hideimages' => "$1 rikcha t'inkikuna",
+'whatlinkshere-hideimages' => "$1 rikchaman t'inkikuna",
 'whatlinkshere-filters' => "Ch'illchinakuna",
 
 # Block/unblock
@@ -2616,14 +2634,14 @@ Willariy imaraykum hark'anki (ahinataq: sapaq wandaluchasqa p'anqakunamanta will
 # Move page
 'move-page' => '$1-ta astay',
 'move-page-legend' => "P'anqata astay",
-'movepagetext' => "Kay hunt'ana p'anqawanqa huk p'anqam tukuy wiñay kawsasqanpas astasqa kanqa. Mawk'a sutinqa musuq sutiman pusapuq p'anqam tukunqa. Mawk'a sutiman t'inkimuq p'anqakunaqa manam hukyanqachu. Paqtataq iskaylla pusapuna p'anqakunata allinchallay. Ama panta t'inkimuqkunata saqiychu.
+'movepagetext' => "Kay hunt'ana p'anqawanqa huk p'anqam tukuy wiñay kawsasqanpas astasqa kanqa. Mawk'a sutinqa musuq sutiman pusapuq p'anqam tukunqa. Mawk'a sutiman t'inkimuq p'anqakunaqa manam hukyanqachu. Paqtataq [[Special:DoubleRedirects|iskayllapas]] [[Special:BrokenRedirects|p'akisqapas]] pusapuna p'anqakunata allinchallay. Ama panta t'inkimuqkunata saqiychu.
 
 
 Nisqayki musuq sutiyuq wiñay kawsasqayuq p'anqaña kachkaptinqa, kay p'anqa '''manam''' astasqa kanqachu.
 
 Huklla kuti astasqa p'anqataqa mawk'a sutinman astayta atinkim, manataq huk mawk'a kachkaqña p'anqamanchu.
 
-<b>PAQTATAQ!</b>
+'''Paqtataq!'''
 Kay astayqa ancha riqsisqa p'anqata hatun mana suyapusqa hukchaymi kayta atinman;
 ama hina kaspa, yuyarillay imachus kay astanaykita saqispa tukunata atinman.",
 'movepagetext-noredirectfixer' => "Kay hunt'ana p'anqawanqa huk p'anqam tukuy wiñay kawsasqanpas musuq sutiman astasqa kanqa.
@@ -2688,6 +2706,7 @@ Tukuna p\'anqaqa ("[[:$1]]") kachkañam. Astanapaq qulluyta munankichu?',
 'immobile-target-namespace-iw' => "Wikipura t'inkiqa p'anqa astanapaq manam allin taripanachu.",
 'immobile-source-page' => "Kay p'anqaqa manam astanallachu.",
 'immobile-target-page' => 'Manam atinichu chay taripana sutiman astayta.',
+'bad-target-model' => "Munakusqa taripanaqa wakin samiq qatillanayuqmi. Manam atinichu $1-manta $2-man t'ikrayta.",
 'imagenocrossnamespace' => "Manam atinichu p'anqata astayta mana willañiqipaq suti k'itiman",
 'nonfile-cannot-move-to-file' => "Manam atinichu mana willañiqi kaqta astayta willañiqipaq suti k'itiman",
 'imagetypemismatch' => "Willañiqip musuq mast'arinanqa kay layapaq manam allinchu",
@@ -2766,6 +2785,7 @@ Tukuy hawa wikimanta chaskisqakunaqa [[Special:Log/import|hawamanta chaskiy hall
 'import-interwiki-templates' => 'Tukuy plantillakunapas',
 'import-interwiki-submit' => 'Hawamanta chaskiy',
 'import-interwiki-namespace' => "Kay suti k'itiman churay:",
+'import-interwiki-rootpage' => "Taripana saphi p'anqa (akllanalla):",
 'import-upload-filename' => 'Willañiqip sutin:',
 'import-comment' => 'Willayniyki:',
 'importtext' => "Ama hina kaspa, willañiqita qallariy wikimanta [[Special:Export|hawaman quna llamk'anawan]] hawaman quy antañiqiqniykipi waqaychaspa, chaymantataq kaypi churkuy.",
@@ -2797,6 +2817,9 @@ Tukuy hawa wikimanta chaskisqakunaqa [[Special:Log/import|hawamanta chaskiy hall
 'import-error-interwiki' => '"$1" sutiyuq p\'anqaqa hawamanta manam chaskisqachu, sutin wikipura (interwiki) nisqapaq hallch\'asqa kaptinmi.',
 'import-error-special' => '"$1" sutiyuq p\'anqaqa hawamanta manam chaskisqachu, mana p\'anqapaq kaq sapaq suti k\'itiman kapuspanmi.',
 'import-error-invalid' => '"$1" sutiyuq p\'anqaqa hawamanta manam chaskisqachu, sutin mana allin kaptinmi.',
+'import-options-wrong' => 'Pantasqa {{PLURAL:$2|akllasqa|akllasqakuna}}: <nowiki>$1</nowiki>',
+'import-rootpage-invalid' => "Qusqa saphi p'anqaqa manam allin sutichu.",
+'import-rootpage-nosubpage' => 'Saphi p\'anqap "$1" sutisuyunpiqa urin p\'anqakuna manam kanqachu.',
 
 # Import log
 'importlogpage' => "Hawamanta chaskiy hallch'a",
@@ -2931,24 +2954,46 @@ Tukuy hawa wikimanta chaskisqakunaqa [[Special:Log/import|hawamanta chaskiy hall
 'spambot_username' => 'MediaWiki-ta spam nisqamanta pichay',
 'spam_reverting' => "Qhipaq kaq mana $1-man t'inkimuqniyuq llamk'apusqaman kutichispa",
 'spam_blanking' => "Tukuy llamk'apusqakunaqa $1-manmi t'inkimuq, ch'usaqchaspa",
+'spam_deleting' => "Tukuy musuqchasqakunaqa $1-manmi t'inkimun, qulluspa",
 
 # Info page
 'pageinfo-title' => '"$1" sutiyuq p\'anqamanta willay',
+'pageinfo-header-basic' => 'Tiksi willaykuna',
 'pageinfo-header-edits' => "Llamk'apusqakunap wiñay kawsaynin",
+'pageinfo-header-restrictions' => "P'anqap amachaynin",
+'pageinfo-header-properties' => "P'anqap kaqninkuna",
+'pageinfo-display-title' => "P'anqa sutita rikuchiy",
+'pageinfo-default-sort' => 'Kikinmanta ñiqichana llawi',
+'pageinfo-length' => "P'anqap chhikan (byte)",
+'pageinfo-article-id' => "P'anqap ID-nin",
+'pageinfo-language' => "P'anqap rimaynin",
+'pageinfo-robot-policy' => 'Maskana kuyuchinap kachkaynin',
+'pageinfo-robot-index' => 'Maskana yuyarinapaqpas',
+'pageinfo-robot-noindex' => 'Mana maskana yuyarinapaq',
 'pageinfo-views' => "Hayk'a qhawaykuna",
 'pageinfo-watchers' => "P'anqata hayk'a watiqaqkuna",
+'pageinfo-redirects-name' => "Kay p'anqaman pusampuqkuna",
+'pageinfo-subpages-name' => "Kay p'anqap urin p'anqankuna",
 'pageinfo-firstuser' => "P'anqap kamariqnin",
 'pageinfo-firsttime' => "P'anqa kamariypa p'unchawnin",
 'pageinfo-lastuser' => "Ñaqha llamk'apuqnin",
 'pageinfo-lasttime' => "Ñaqha llamk'apuypa p'unchawnin",
 'pageinfo-edits' => "Tukuymanta hayk'a hukchasqakuna",
 'pageinfo-authors' => "Tukuymanta hayk'a sapaq kaq ruraqkuna",
+'pageinfo-magic-words' => 'Layqa {{PLURAL:$1|simi|simikuna}} ($1)',
+'pageinfo-hidden-categories' => 'Pakasqa {{PLURAL:$1|katiguriya|katiguriyakuna}} ($1)',
+'pageinfo-templates' => "Ch'aqtasqa {{PLURAL:$1|plantilla|plantillakuna}} ($1)",
+'pageinfo-transclusions' => "Kaypi ch'aqtasqa {{PLURAL:$1|p'anqa|p'anqakuna}} ($1)",
 'pageinfo-toolboxlink' => "P'anqamanta willakuna",
 'pageinfo-redirectsto' => 'Kayman pusampun:',
 'pageinfo-redirectsto-info' => 'willachikuy',
 'pageinfo-contentpage' => "Samiqniyuq p'anqa hinam chaninchasqa",
 'pageinfo-contentpage-yes' => 'Arí',
 'pageinfo-protect-cascading-yes' => 'Arí',
+'pageinfo-category-info' => 'Katiguriyamanta willaykuna',
+'pageinfo-category-pages' => "Hayk'a p'anqakuna",
+'pageinfo-category-subcats' => "Hayk'a urin katiguriyakuna",
+'pageinfo-category-files' => "Hayk'a willañiqikuna",
 
 # Patrolling
 'markaspatrolleddiff' => 'Qhawakipasqaman sananchay',
@@ -2960,6 +3005,8 @@ Tukuy hawa wikimanta chaskisqakunaqa [[Special:Log/import|hawamanta chaskiy hall
 'markedaspatrollederror' => 'Manam atinichu qhawakipasqaman sananchayta',
 'markedaspatrollederrortext' => "Huk llamk'apusqata akllanaykim tiyan qhawakipasqaman sananchanaykipaq.",
 'markedaspatrollederror-noautopatrol' => "Manam saqillasunkichu qampa llamk'apusqaykikunata qhawakipasqaman sananchayta.",
+'markedaspatrollednotify' => "Kay $1 sutiyuq p'anqapi hukchasqaqa qhawakipasqa nisqa sananchasqañam.",
+'markedaspatrollederrornotify' => 'Qhawakipasqa niyqa manam aypanchu.',
 
 # Patrol log
 'patrol-log-page' => "Qhawakipay hallch'a",
@@ -2992,6 +3039,8 @@ Payta rurachiyqa antañiqiqniykita llikaykitapas waqllinqachá.",
 'file-info-size-pages' => "$1 × $2 iñu, willañiqip chhikan kaynin: $3; MIME laya: $4, $5 {{PLURAL:$5|p'anqa|p'anqa}}",
 'file-nohires' => 'Manam kanchu aswan huyakuyuq rikcha.',
 'svg-long-desc' => 'SVG willañiqi, rimasqakama $1 × $2 iñuyuq, willañiqip chhikan kaynin: $3',
+'svg-long-desc-animated' => 'Kuyuchisqa SVG willañiqi, rimasqakama $1 × $2 iñuyuq, willañiqip chhikan kaynin: $3',
+'svg-long-error' => 'Mana allin SVG willañiqi: $1',
 'show-big-image' => 'Qallariy huyaku',
 'show-big-image-preview' => 'Kay ñawpaq qhawariypa chhikan kaynin: $1.',
 'show-big-image-other' => 'Huk {{PLURAL:$2|huyaku|huyakukuna}}: $1.',
@@ -3019,7 +3068,10 @@ Payta rurachiyqa antañiqiqniykita llikaykitapas waqllinqachá.",
 'minutes' => '{{PLURAL:$1|huk minutu|$1 minutu}}',
 'hours' => '{{PLURAL:$1|huk ura|$1 ura}}',
 'days' => "{{PLURAL:$1|huk p'unchaw|$1 p'unchaw}}",
+'months' => '{{PLURAL:$1|huk killa|$1 killa}}',
+'years' => '{{PLURAL:$1|huk wata|$1 wata}}',
 'ago' => '$1 ñaqha',
+'just-now' => 'kunallan',
 
 # Bad image list
 'bad_image_list' => "Chantaqa kay hinam:
@@ -3749,11 +3801,11 @@ Rikchakunatataq hunt'a ch'irkukupim rikunki. Huk willañiqi llayakunaqa tantapus
 'logentry-move-move_redir-noredirect' => "$1 sutiyuq ruraqqa p'anqatam astan $3-manta $4-man pusapunata huknachaspa mana pusapunata saqispa",
 'logentry-patrol-patrol' => "$1 sutiyuq ruraqqa $3 nisqa p'anqamanta $4 musuqchasqatam patrullasqa nispa sananchan",
 'logentry-patrol-patrol-auto' => "$1 sutiyuq ruraqqa $3 nisqa p'anqamanta $4 musuqchasqatam kikinmanta patrullasqa nispa sananchan",
-'logentry-newusers-newusers' => '$1 sutiyuq ruraqqa rakiqunatam kamarin',
-'logentry-newusers-create' => '$1 sutiyuq ruraqqa rakiqunatam kamarin',
-'logentry-newusers-create2' => '$1 sutiyuq ruraqqa rakiqunatam kamarin $3',
+'logentry-newusers-newusers' => '$1 sutiyuq rakiquna kamarisqañam',
+'logentry-newusers-create' => '$1 sutiyuq rakiquna kamarisqañam',
+'logentry-newusers-create2' => '$1 sutiyuq ruraqqa $3 sutiyuq rakiqunatam kamarirqanñam',
 'logentry-newusers-autocreate' => '$1 sutiyuq rakiqunaqa kikinmanta kamarisqam',
-'newuserlog-byemail' => 'e-chaskiwan kachasqa yaykuna rima',
+'rightsnone' => '(-)',
 
 # Feedback
 'feedback-bugornote' => "Allwiyapi sasachakuymanta imaymanachanta willayta munaspaykiqa, [\$1 pantasqamanta willay].
index 38deb96..1585ced 100644 (file)
@@ -44,7 +44,7 @@ $messages = array(
 'tog-hidepatrolled' => 'mushuk killkaykunapak kamupi, ña rikushka killkaykunata pakana',
 'tog-newpageshidepatrolled' => 'Mushuk pankakunapak kamupi, ña rikushka pankakunata pakana',
 'tog-extendwatchlist' => 'Rikushka pankakunapak mushuk killkaykunapak kamupi, ama yallik mushuk killkaykunatalla rikuchina, tukuykunatami rikuchina',
-'tog-usenewrc' => 'Mushuk killkaykunata ashtawan alli rikuchina (Javascriptwanlla)',
+'tog-usenewrc' => 'Mushuk killkaykunata chapashka pankakunapak killkaykunatapash ashtawan alli rikuchina (Javascriptwanlla)',
 'tog-numberheadings' => 'Uma killkaykunata yupayta churak antawata llankachina',
 'tog-showtoolbar' => 'Llamkana antakunata rikuchina (Javascriptwanlla)',
 'tog-editondblclick' => 'Ishkayta klik rurashpa pankapi killkanata kallarina (JavaScriptwanlla)',
@@ -348,11 +348,12 @@ Shina kakpika, shuk rurakka ña pankata pichankacha.',
 'viewsource' => 'Pukyu killkata rikuna',
 'actionthrottled' => 'Rurayta harkashka',
 'actionthrottledtext' => 'Spam rurashpa nalli runakunaka ama yapata chaskikuna kachankapak, mana chayta kutin ñapash rurana ushapankichu. Ama shinachu kapay, ashata shuyashpa  (wakin minutoskuna) kutin rurapay.',
-'protectedpagetext' => 'Kay pankata ama shukchinkapak harkashkami kan.',
+'protectedpagetext' => 'Kay pankaka ama shukchinkapak harkashkami kan.',
 'viewsourcetext' => 'Kay pankapak wiki killkayta rikunata, ishkachinatapash ushapankimi.',
 'protectedinterface' => 'Kay pankaka kapak willaykunata charinmi, ama nalli runakunaka kaypi killkankapak harkashkami kapan.',
 
 # Login and logout pages
+'welcomeuser' => '¡Alli shamushka, $1!',
 'yourname' => 'Rurak shuti:',
 'yourpassword' => 'Yaykunkapak rimay:',
 'yourpasswordagain' => 'Yaykunapak rimayta kutin killkapay:',
@@ -404,8 +405,8 @@ Shina kakpika, shuk rurakka ña pankata pichankacha.',
 'newarticletext' => 'Shuk illak pankaman tinkita katirkapanki. Kay pankata kamankapak uraypi killkapay. Ashtawan yachakunkapak [[{{MediaWiki:Helppage}}|yanapana pankata]] rikupay. Mana chay pankata kamanata munakpika, ñawpa pankaman kutin ripay.',
 'noarticletext' => 'Kunan pachapi, kay pankaka mana killkaykunata charin.
 Pakpak shutita [[Special:Search/{{PAGENAME}}|shuk pankakunapi maskanata]], <span class="plainlinks">[{{fullurl:{{#Special:Log}}|page={{FULLPAGENAMEE}}}} registroskunapi maskanata]pash ushankimi, kutin [{{fullurl:{{FULLPAGENAME}}|action=edit}} kay pankata kamarinata] ushankimi',
-'noarticletext-nopermission' => 'Kunan pachapi kay pankaka mana killkashkakunata charinchu. Paypak shutita [[Special:Search/{{PAGENAME}}|shuk pankakunapi maskanata]] ushapankimi, shinalla <span class="plainlinks">pankakunapa wiñay kawsay kamupi [{{fullurl:{{#Special:Log}}|page={{FULLPAGENAMEE}}}} tinkishka shukchiykunaka] maskana</span>',
-'previewnote' => 'Rikupay: kay killkaykunata mana churapankichu !',
+'noarticletext-nopermission' => 'Kunan pachapi kay pankakapi killkaykuna illan. Paypak shutita [[Special:Search/{{PAGENAME}}|shuk pankakunapi maskanata]] ushapankimi, shinalla <span class="plainlinks">pankakunapa wiñay kawsay kamupi [{{fullurl:{{#Special:Log}}|page={{FULLPAGENAMEE}}}} tinkishka killkaykunapi] maskanata ushapanki</span>. Shinapash, chay pankaka mana kamarinata ushapankichu.',
+'previewnote' => 'Rikupay: kay killkaykunata nara allichipashkankichu !',
 'editing' => '$1 pankapi killkashpa',
 'editingsection' => '$1 rakipi killkashpa',
 'templatesused' => 'Kay pankaka {{PLURAL:$1|plantilla|plantillakuna}}ta llankachin:',
@@ -525,6 +526,9 @@ Shuk rurakkunaka kikinpa e-chaski ''dirección''ta mana yachankachu.",
 
 'grouppage-sysop' => '{{ns:project}}:Kamachik',
 
+# Special:Log/newusers
+'newuserlogpage' => 'Rurakkununata kamaykunapa kamu',
+
 # User rights log
 'rightslog' => 'Rurakpa hayñikunapa kamu',
 
@@ -640,9 +644,6 @@ Shuk rurakkunaka kikinpa e-chaski ''dirección''ta mana yachankachu.",
 'linksearch' => 'hawaman tinkikunata maskana',
 'linksearch-line' => '$1 pankaka $2-manta tinkishkami kan',
 
-# Special:Log/newusers
-'newuserlogpage' => 'Rurakkununata kamaykunapa kamu',
-
 # Special:ListGroupRights
 'listgrouprights-members' => '(Kay tantanakuypa rurakkunapa shutikuna)',
 
@@ -651,7 +652,7 @@ Shuk rurakkunaka kikinpa e-chaski ''dirección''ta mana yachankachu.",
 
 # Watchlist
 'watchlist' => 'Rikukushka pankakuna',
-'mywatchlist' => 'Imata rikukuni',
+'mywatchlist' => 'Imata chapakuni',
 'watchlistfor2' => '$1-pak $2',
 'watch' => 'rikupay',
 'watchthispage' => 'Kay pankata rikukuna',
@@ -686,9 +687,9 @@ $2 rikpika, ima pankakunaka pichashkami kan yachakupanki.',
 'protect_expiry_invalid' => "''Ima pachakaman'' mana alli nishkami.",
 'protect_expiry_old' => "''Ima pachakaman'' mana alli nishkami : kay pachaka ñawpak pachapi kapanmi !",
 'protect-default' => 'Rukuy runakunaman ari nipay',
-'protect-fallback' => '«$1» hayñita mutsupanki',
-'protect-level-autoconfirmed' => 'Mushuk rurakkunata mana shutiyuk rurakkunatapash wichkana',
-'protect-level-sysop' => 'Kipukamayukkunalla',
+'protect-fallback' => '«$1» hayñiyuk rurakkunallapak',
+'protect-level-autoconfirmed' => 'Kikin shutiyuk rurakkunallapak',
+'protect-level-sysop' => 'Kipukamayukkunallapak',
 'protect-expiring' => '$1 (UTC) pachakaman',
 'restriction-type' => 'Hayñi:',
 
@@ -702,7 +703,7 @@ $2 rikpika, ima pankakunaka pichashkami kan yachakupanki.',
 'blanknamespace' => 'Kapak',
 
 # Contributions
-'contributions' => 'Kay rurakpa killkaykuna',
+'contributions' => '{{GENDER:$1|Kay rurakpa}} killkaykuna',
 'contributions-title' => '$1 shutiyuq rurakpa killkaykuna',
 'mycontris' => 'Nukapak killkaykuna',
 'contribsub2' => '$1 ($2)',
index 9cc078e..79dbea3 100644 (file)
@@ -379,6 +379,9 @@ Lezenda: '''({{int:cur}})''' = difarenzi cun la versiòn d'adès; '''({{int:last
 
 'grouppage-sysop' => '{{ns:project}}:Aministradór',
 
+# Special:Log/newusers
+'newuserlogpage' => "Regèstar d'j nov",
+
 # User rights log
 'rightslog' => "Dirètt d'j navigador",
 
@@ -470,9 +473,6 @@ $1 {{PLURAL:$1|elemént|elemént}}',
 # Special:LinkSearch
 'linksearch' => 'Ghènz int ê web',
 
-# Special:Log/newusers
-'newuserlogpage' => "Regèstar d'j nov",
-
 # Special:ListGroupRights
 'listgrouprights-members' => "(Lèsta d'j mèmbar)",
 
index f6adcaa..efab7a9 100644 (file)
@@ -43,7 +43,7 @@ $magicWords = array(
 
 $messages = array(
 # User preference toggles
-'tog-underline' => 'suttastritgar colliaziuns:',
+'tog-underline' => 'Suttastritgar colliaziuns:',
 'tog-justify' => "Text en furma da 'bloc'",
 'tog-hideminor' => 'Zuppentar pitschnas midadas en las ultimas midadas',
 'tog-hidepatrolled' => 'Zuppentar midadas controlladas en las «ultimas midadas»',
@@ -88,9 +88,9 @@ $messages = array(
 'tog-showhiddencats' => 'Mussar categorias zuppendatas',
 'tog-norollbackdiff' => 'Betg mussar las differenzas suenter revocar',
 
-'underline-always' => 'adina suttastritgar',
-'underline-never' => 'mai suttastritgar',
-'underline-default' => 'Standard dal navigatur',
+'underline-always' => 'Adina suttastritgar',
+'underline-never' => 'Mai suttastritgar',
+'underline-default' => 'Dependent dal skin u dal standard dal navigatur',
 
 # Font style option in Special:Preferences
 'editfont-style' => 'Scrittira per il text en la fanestra da modifitgar:',
@@ -175,8 +175,8 @@ $messages = array(
 'newwindow' => '(avra ina nova fanestra)',
 'cancel' => 'refusar las midadas',
 'moredotdotdot' => 'Dapli...',
-'mypage' => 'mia pagina',
-'mytalk' => 'discussiun',
+'mypage' => 'Pagina',
+'mytalk' => 'Discussiun',
 'anontalk' => 'Pagina da discussiun da questa IP',
 'navigation' => 'Navigaziun',
 'and' => '&#32;e',
@@ -208,6 +208,7 @@ $messages = array(
 'namespaces' => 'Tip da pagina',
 'variants' => 'Variantas',
 
+'navigation-heading' => 'Menu da navigaziun',
 'errorpagetitle' => 'Errur',
 'returnto' => 'Enavos tar $1.',
 'tagline' => 'Ord {{SITENAME}}',
@@ -420,7 +421,7 @@ Query: $2',
 'actionthrottled' => 'Acziun limitada',
 'actionthrottledtext' => 'Sco mesira cunter spam na pos ti betg exequir questa acziun memia bleras giadas en curt temp. Ti has surpassà questa limita. 
 Emprova danovamain en in per minutas.',
-'protectedpagetext' => "Questa pagina è vegnida bloccada per evitar ch'ella vegn modifitgada.",
+'protectedpagetext' => "Questa pagina è vegnida bloccada per evitar ch'ella modificaziuns ed autras acziuns.",
 'viewsourcetext' => 'Ti pos guardar e copiar il code-fundamental da questa pagina:',
 'viewyourtext' => "Ti pos giardar e copiar la il code da funatuna da '''tias midadas''' vid questa pagina:",
 'protectedinterface' => "Questa pagina cuntegna ils texts per l'interfatscha da la software ed è protegida per evitar abus.",
@@ -453,6 +454,9 @@ L\'administratur che ha bloccà l\'access da scriva ha dà suandanta explicaziun
 'logouttext' => "'''Sortì cun success.'''
 
 Ti pos cuntinuar cun utilisar {{SITENAME}} anonimamain, u che ti pos <span class='plainlinks'>[$1 t'annunziar]</span> sco medem u in'auter utilisader. Resguarda che entginas paginas pon anc vesair or tuttina sco sche ti eras annunzià enfin che ti has stizzà il cache da tes navigatur.",
+'welcomeuser' => 'Bainvegni, $1!',
+'welcomecreation-msg' => "Tes conto è vegnì creà. 
+N'emblida betg da midar tias [[Special:Preferences|{{SITENAME}} preferenzas]].",
 'yourname' => "Num d'utilisader",
 'yourpassword' => 'pled-clav',
 'yourpasswordagain' => 'repeter pled-clav',
@@ -608,6 +612,7 @@ Pled-clav temporar: $2",
 'changeemail-oldemail' => 'Adressa dad e-mail actuala:',
 'changeemail-newemail' => ' Nova adressa dad e-mail',
 'changeemail-none' => '(nagina)',
+'changeemail-password' => 'Tes pled-clav da {{SITENAME}}:',
 'changeemail-submit' => "Midar l'adressa dad e-mail",
 'changeemail-cancel' => 'Interrumper',
 
@@ -792,7 +797,6 @@ L'ultima endataziun dal log vegn mussada sco referenza:",
 'template-protected' => '(bloccà)',
 'template-semiprotected' => '(mez protegidas)',
 'hiddencategories' => 'Quest artitgel è commember da {{PLURAL:$1|1 categoria zuppentada|$1 categorias zuppentadas}}:',
-'nocreatetitle' => 'La creaziun da novas paginas è limitada',
 'nocreatetext' => "{{SITENAME}} ha restrinschì las pussaivladas da crear novas paginas.
 Ti pos ir anavos e modifitgar ina pagina existenta, u [[Special:UserLogin|t'annunziar u registrar]].",
 'nocreate-loggedin' => "Ti n'has betg la lubientscha da crear novas paginas.",
@@ -816,6 +820,15 @@ I para sco sch'ella fiss vegnida stizzada.",
 'edit-no-change' => 'Tia modificaziun è vegnida ignorada perquai che naginas midadas èn vegnidas fatgas en il text.',
 'edit-already-exists' => "Betg pussaivel da crear ina nova pagina perquai ch'ella exista gia.",
 'defaultmessagetext' => 'Text da standard',
+'content-failed-to-parse' => 'Impussibel dad elavurar il cuntegn $2 per il model $1: $3',
+'invalid-content-data' => 'Data da cuntegn nunvalida',
+'content-not-allowed-here' => 'Il cuntegn "$1" n\'è betg lubì sin la pagina [[$2]]',
+
+# Content models
+'content-model-wikitext' => 'wikitext',
+'content-model-text' => 'text senza formataziun',
+'content-model-javascript' => 'JavaScript',
+'content-model-css' => 'CSS',
 
 # Parser/template warnings
 'expensive-parserfunction-warning' => "'''Attenziun:''' Questa pagina cuntegna memia bleras funcziuns dal parser cumplitgadas. 
@@ -985,6 +998,8 @@ Controllescha per plaschair ils protocols.",
 
 # Suppression log
 'suppressionlog' => 'Protocol da suppressiuns',
+'suppressionlogtext' => 'Sutvart vegn mussada ina glista da paginas stizzadas u bloccadas che chaschunan che cuntegn vegn zuppentà dad administraturs.
+Guarda la [[Special:BlockList|glista da bloccadas]] per vesair la glista da da bloccadas actualas.',
 
 # History merging
 'mergehistory' => 'Unir la cronologia da paginas',
@@ -1019,12 +1034,19 @@ Fa stim che navigar cun agid da las coalliziuns reinizialisescha tia tscherna.',
 
 # Diffs
 'history-title' => '$1: Cronologia da las versiuns',
+'difference-title' => 'Differenza tranter versiuns da "$1"',
+'difference-title-multipage' => 'Differenza tranter las paginas "$1" e "$2"',
 'difference-multipage' => '(Differenzas tranter las paginas)',
 'lineno' => 'Lingia $1:',
 'compareselectedversions' => 'cumparegliar las versiuns selecziunadas',
 'showhideselectedversions' => 'Mussar/zuppentar las versiuns tschernidas',
 'editundo' => 'revocar',
 'diff-multi' => '({{PLURAL:$1|Ina versiun|$1 versiuns}} {{PLURAL:$2|dad in utilisader|da $2 utilisaders}} tranter en na {{PLURAL:$1|vegn betg mussada|na vegnan betg mussadas}}.)',
+'diff-multi-manyusers' => '({{PLURAL:$1|Ina versiun|$1 versiuns}} tranteren da dapli che $2 {{PLURAL:$2|utilisader|utilisaders}} na vegn betg mussada)',
+'difference-missing-revision' => "{{PLURAL:$2|Ina versiun|$2 versiuns}} da questa differenza ($1) {{PLURAL:$2|n'è betg vegnida chattada|n'èn betg vegnidas chattadas}}.
+
+Per ordinari vegn quai chaschunà dad ina colliaziun da diff antiquada ad ina pagian ch'è vegnida stizzada. 
+Detagls pon vegnir chattads en il [{{fullurl:{{#Special:Log}}/delete|page={{FULLPAGENAMEE}}}} protocol da stizzar].",
 
 # Search results
 'searchresults' => 'Resultats da tschertga',
@@ -1081,7 +1103,7 @@ Scriva il prefix ''all:'' avant il term che ti vuls tschertgar, per tschertgar e
 'powersearch' => 'retschertgar',
 'powersearch-legend' => 'Tschertga extendida',
 'powersearch-ns' => 'Tschertgar en tips da pagina:',
-'powersearch-redir' => 'Mussar sviaments',
+'powersearch-redir' => 'Mussar renviaments',
 'powersearch-field' => 'Tschertgar',
 'powersearch-togglelabel' => 'Tscherna:',
 'powersearch-toggleall' => 'Tuts',
@@ -1098,10 +1120,11 @@ Considerescha che lur index da {{SITENAME}} po cuntegnair datas ch'èn betg pli
 'qbsettings-fixedright' => 'Dretg, fixà',
 'qbsettings-floatingleft' => 'Sanester, flottand',
 'qbsettings-floatingright' => 'Dretg, flottand',
+'qbsettings-directionality' => 'Fixà, dependent da la direcziun da scriver da tia lingua',
 
 # Preferences page
 'preferences' => 'Preferenzas',
-'mypreferences' => 'preferenzas',
+'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.',
@@ -1136,10 +1159,15 @@ Considerescha che lur index da {{SITENAME}} po cuntegnair datas ch'èn betg pli
 'columns' => 'Colonnas:',
 'searchresultshead' => 'Tschertga',
 'resultsperpage' => 'resultats per pagina:',
+'stub-threshold' => 'Limita per la formataziun sco <a href="#" class="stub">colliaziun a stubs</a>, en bytes:',
 'stub-threshold-disabled' => 'Deactivà',
 'recentchangesdays' => 'Dumber da dis che duain vegnir mussads en las ultimas midadas:',
 'recentchangesdays-max' => 'Maximalmain $1 {{PLURAL:$1|di|dis}}',
 'recentchangescount' => 'Dumber da modificaziuns che duai vegnir mussà sco standard:',
+'prefs-help-recentchangescount' => 'Quai cumpiglia las ultimas midadas, la cronologia da paginas ed ils protocols.',
+'prefs-help-watchlist-token' => "Emplenir quest champ cun ina clav secreta vegn a generar in feed RSS per tia glista d'observaziun.
+Mintgin che enconuscha questa clav vegn ad esser abel da leger tia glista d'observaziun, tscherna pia ina clav segira.
+Qua è ina valur casuali che ti pos utilisar: $1",
 'savedprefs' => 'Tias preferenzas èn vegnidas memorisadas.',
 'timezonelegend' => "Zona d'urari:",
 'localtime' => 'Temp local:',
@@ -1166,18 +1194,20 @@ Considerescha che lur index da {{SITENAME}} po cuntegnair datas ch'èn betg pli
 'prefs-files' => 'Datotecas',
 'prefs-custom-css' => 'CSS persunalisà',
 'prefs-custom-js' => 'JavaScript persunalisà',
+'prefs-common-css-js' => 'CSS/JavaScript cundividì per tut ils skins:',
 'prefs-reset-intro' => 'Ti pos utilisar questa pagina per restituir las valurs da standard da questa pagina per tias preferenzas. 
 Questa operaziun na po betg vegnir revocada.',
 'prefs-emailconfirm-label' => 'Confirmaziun per e-mail:',
 'prefs-textboxsize' => 'Grondezza da la fanestra da modifitgar',
 'youremail' => 'Adressa dad e-mail:',
-'username' => "Num d'utilisader:",
-'uid' => "ID da l'utilisader:",
-'prefs-memberingroups' => 'Commember {{PLURAL:$1|da la gruppa|da las gruppas}}:',
+'username' => "{{GENDER:$1|Num d'utilisader|Num da l'utilisadra}}:",
+'uid' => "ID da l'{{GENDER:$1|utilisader|utilisadra}}:",
+'prefs-memberingroups' => '{{GENDER:$2|Commember|Commembra}} da {{PLURAL:$1|la gruppa|las gruppas}}:',
 'prefs-registration' => 'Temp da registraziun:',
 'yourrealname' => 'Num real:',
 'yourlanguage' => 'Lingua:',
 'yourvariant' => 'Varianta da la lingua:',
+'prefs-help-variant' => 'Tia varianta u ortografia preferida per mussar las paginas da cuntegn da quest vichi.',
 'yournick' => 'Signatura:',
 'prefs-help-signature' => 'Commentaris sin paginas da discussiun duessan vegnir signadas cun "<nowiki>~~~~</nowiki>". Quests segns vegnan lura convertids en tia signatura ed la data.',
 'badsig' => 'Signatura invalida. 
@@ -1286,6 +1316,7 @@ Tia adressa dad e-mail na vegn betg mussada sche auters utilisaders ta contactes
 'right-writeapi' => "Utilisar l'API per scriver",
 'right-delete' => 'Stizzar paginas',
 'right-bigdelete' => 'Stizzar paginas cun ina gronda cronologia',
+'right-deletelogentry' => 'Stizzar u restaurar endataziuns specificas dal protocol',
 'right-deleterevision' => 'Stizzar e restituir versiuns specificas da paginas',
 'right-deletedhistory' => 'Vesair endataziuns da la cronologia stizzadas, senza il text assozià',
 'right-deletedtext' => 'Vesair text stizzà e midadas tranter versiuns stizzadas',
@@ -1306,11 +1337,13 @@ Tia adressa dad e-mail na vegn betg mussada sche auters utilisaders ta contactes
 'right-editusercss' => "Modifitgar datotecas da CSS d'auters utilisaders",
 'right-edituserjs' => "Modifitgar datotecas da JavaScript d'auters utilisaders",
 'right-rollback' => "Revocar svelt las modificaziuns da l'ultim utilisader che ha modifitgà ina pagina particulara.",
+'right-markbotedits' => 'Marcar modificaziuns revocadas sco modificaziuns da bots',
 'right-noratelimit' => "N'è betg pertutgà da limitas dad acziuns",
 'right-import' => "Importar paginas d'auters wikis",
 'right-importupload' => "Importar paginas d'ina datoteca chargiada si",
 'right-patrol' => "Marcar modificaziuns d'auters sco controlladas",
 'right-autopatrol' => 'Marcar sias atgnas modificaziuns automaticamain sco controlladas',
+'right-patrolmarks' => 'Vesair las marcaziuns da controlla en las ultimas midadas',
 'right-unwatchedpages' => 'Vesair ina glista da las paginas betg contempladas',
 'right-mergehistory' => 'Unir la cronologia da questa pagina',
 'right-userrights' => 'Modifitgar ils dretgs dals utilisaders',
@@ -1318,13 +1351,15 @@ Tia adressa dad e-mail na vegn betg mussada sche auters utilisaders ta contactes
 'right-siteadmin' => 'Bloccar u debloccar la banca da datas',
 'right-override-export-depth' => 'Exportar paginas inclusivamain paginas colliadas fin ad ina profunditad da 5',
 'right-sendemail' => 'Trametter e-mails ad auters utilisaders',
+'right-passwordreset' => "Vesair l'e-mail per redefinir pleds-clav",
+
+# Special:Log/newusers
+'newuserlogpage' => "Log d'utilisaders creads",
+'newuserlogpagetext' => "Quai è il log dals contos d'utilisader ch'èn vegnids creads.",
 
 # User rights log
 'rightslog' => "Log dals dretgs d'utilisader",
 'rightslogtext' => "Quai è il log da las midadas en ils dretgs d'utilisaders.",
-'rightslogentry' => 'midar la commembranza da $1 davent da $2 a $3',
-'rightslogentry-autopromote' => 'è vegnì promovì automaticamain da $2 $3',
-'rightsnone' => '(nagins)',
 
 # Associated actions - in the sentence "You do not have permission to X"
 'action-read' => 'leger questa pagina',
@@ -1351,6 +1386,7 @@ Tia adressa dad e-mail na vegn betg mussada sche auters utilisaders ta contactes
 'action-suppressionlog' => 'vesair quest log privat',
 'action-block' => "bloccar quest utilisader ch'el na po betg pli modifitgar",
 'action-protect' => 'midar il livel da protecziun da questa pagina',
+'action-rollback' => "revocar spert las midadas da l'ultim utilisader che ha modifitgà ina pagina particulara",
 'action-import' => "importar questa pagina d'in auter wiki",
 'action-importupload' => "importar questa pagina d'ina datoteca chargiada si",
 'action-patrol' => "marcar modificaziuns d'auters sco controlladas",
@@ -1360,6 +1396,7 @@ Tia adressa dad e-mail na vegn betg mussada sche auters utilisaders ta contactes
 'action-userrights' => 'modifitgar ils dretgs dals utilisaders',
 'action-userrights-interwiki' => "modifitgar ils dretgs d'utilisaders sin autras wikis",
 'action-siteadmin' => 'bloccar u debloccar la banca da datas',
+'action-sendemail' => 'trametter e-mails',
 
 # Recent changes
 'nchanges' => '$1 {{PLURAL:$1|midada|midadas}}',
@@ -1391,9 +1428,11 @@ Tia adressa dad e-mail na vegn betg mussada sche auters utilisaders ta contactes
 'number_of_watching_users_pageview' => '[$1 {{PLURAL:$1|utilisader|utilisaders}} observeschan quest artitgel]',
 'rc_categories' => 'Be paginas ord las categorias (seperar cun "|")',
 'rc_categories_any' => 'Tuts',
+'rc-change-size-new' => '$1 {{PLURAL:$1|byte|bytes}} suenter la midada',
 'newsectionsummary' => 'Nov chapitel /* $1 */',
 'rc-enhanced-expand' => 'Mussar detagls (JavaScript è necessari)',
 'rc-enhanced-hide' => 'Zuppentar detagls',
+'rc-old-title' => 'creà oriundamain sco "$1"',
 
 # Recent changes linked
 'recentchangeslinked' => 'Midadas sin paginas cun colliaziuns',
@@ -1444,6 +1483,7 @@ Guarda era la [[Special:NewFiles|galleria da novas datotecas]] per ina survista
 'ignorewarnings' => 'Ignorar tut ils avertiments (Warnung)',
 'minlength1' => 'Nums da datotecas ston esser almain in bustab lung.',
 'illegalfilename' => 'Il num da datoteca "$1" cuntegna almain in segn betg lubì. Endatescha in\'auter num ed emprova danovamain da chargiar si la datoteca.',
+'filename-toolong' => 'Nums da datotecas na pon betg esser pli lungs che 240 bytes.',
 'badfilename' => 'Midà num da la datoteca a "$1".',
 'filetype-mime-mismatch' => 'L\'extensiun dal num da datoteca ".$1" na correspunda betg al tip da MIME scuvrì en la datoteca ($2).',
 'filetype-badmime' => 'Datotecas dal tip da MIME "$1" na dastgan betg vegnir chargiads si.',
@@ -1458,6 +1498,7 @@ Lubidas èn datotecas {{PLURAL:\$3|dal tip|dals tips}} \$2.",
 'filename-tooshort' => 'Il num da datoteca è memia curt.',
 'filetype-banned' => 'Quest tip da datoteca è scumandà.',
 'verification-error' => "Questa datoteca n'è betg passà cun success la verificaziun da datotecas.",
+'hookaborted' => 'La modificaziuns che ti has empruvà dad exequir è vegnida interrutta dad ina extensiun.',
 'illegal-filename' => "Il num da datoteca n'è betg lubì.",
 'overwrite' => "Recuvrir (surscriver) datotecas existentas n'è betg lubì.",
 'unknown-error' => 'Ina errur nunenconuschenta è capitada.',
@@ -1469,6 +1510,7 @@ questa datoteca è $2 gronda.",
 'emptyfile' => "La datoteca che ti has chargià si para dad esser vida.
 Quai po esser pervia d'in sbagl da tippar en il num da datoteca.
 Controllescha sche ti vuls propi chargiar si questa datoteca.",
+'windows-nonascii-filename' => 'Quest vichi na sustegna betg nums da datotecas cun caracters specials.',
 'fileexists' => "Ina datoteca cun quest num exista gia. Controllescha <strong>[[:$1]]</strong> sche ti n'es betg segir sche ti vuls midar ella.
 [[$1|thumb]]",
 'filepageexists' => "La pagina da descripziun per questa datoteca è vegnida creada ils <strong>[[:$1]]</strong> ma i n'exista anc nagina datoteca cun quest num. 
@@ -1500,11 +1542,15 @@ Ti duessas controllar la cronologia da stizzar da questa datoteca avant che pusp
 'uploadedimage' => '"[[$1]]" è vengì chargià si',
 'overwroteimage' => 'ha chargià si ina nova versiun da "[[$1]]"',
 'uploaddisabled' => 'Chargiar si è deactivà.',
+'copyuploaddisabled' => 'Il transferir per URL è deactivà.',
+'uploadfromurl-queued' => 'Tia datoteca per transferir è vegnida agiuntada a la colonna da spetga.',
 'uploaddisabledtext' => 'La funcziun da chargiar si datotecas è deactivada.',
 'php-uploaddisabledtext' => "La funcziun da chargiar si datotecas è deactivada en PHP. 
 Controllescha per plaschair l'opziun <code>file_uploads</code>.",
 'uploadscripted' => 'Questa datoteca cuntegna HTML u code da scripts che pudess vegnir exequì per sbagl dal navigatur.',
 'uploadvirus' => 'La datoteca cuntegna in virus! Detagls: $1',
+'uploadjava' => "La datoteca è ina datoteca da ZIP che cuntegna ina datoteca .class da Java.
+Igl n'è betg lubì da transferir datotecas da Java, perquai che quellas pon pussiblitar da giuntgir restricziuns da segirezza.",
 'upload-source' => 'Datoteca da funtauna',
 'sourcefilename' => "Num da la datoteca d'origin:",
 'sourceurl' => 'URL da funtauna:',
@@ -1513,6 +1559,10 @@ Controllescha per plaschair l'opziun <code>file_uploads</code>.",
 'upload-description' => 'Descripziun da la datoteca',
 'upload-options' => 'Opziuns per chargiar si',
 'watchthisupload' => 'Observar questa datoteca',
+'filewasdeleted' => "Ina datoteca cun quest num è pli baul vegnida transferida ed è allura vegnida stizzada.
+Ti duessas controllar l'emprim il $1 avant che cuntinuar da transferir danovamain la datoteca.",
+'filename-bad-prefix' => "Il num da la datoteca che ti transfereschas cumenza cun '''\"\$1\"'''. Quai è in num betg descriptiv che vegn per ordinari assegna atomaticamain da cameras digitalas.
+Tscherna p. pl. in num pli descriptiv per tia datoteca.",
 'upload-success-subj' => 'Transferì cun success',
 'upload-success-msg' => 'Tes transfer da [$2] è stà cun success. La datoteca è disponibla qua: [[:{{ns:file}}:$1]]',
 'upload-failure-subj' => 'Probelm cun transferir',
@@ -1533,6 +1583,7 @@ Sch'il problem exista anc adina, contactescha in [[Special:ListUsers/sysop|admin
 'upload-too-many-redirects' => 'La URL ha cuntegnì memia blers renviaments',
 'upload-unknown-size' => 'Grondezza nunenconuschenta',
 'upload-http-error' => 'In sbagl da HTTP è capità: $1',
+'upload-copy-upload-invalid-domain' => "Transferir copias n'è betg pussaivel sin questa domain.",
 
 # File backend
 'backend-fail-stream' => 'Impussibel da leger la datoteca $1.',
@@ -1542,6 +1593,7 @@ Sch'il problem exista anc adina, contactescha in [[Special:ListUsers/sysop|admin
 'backend-fail-notsame' => 'Ina datoteca betg identica exista gia sin $1.',
 'backend-fail-invalidpath' => "$1 n'è betg in percus valida per memorisar.",
 'backend-fail-delete' => 'Impussibel da stizzar la datoteca $1.',
+'backend-fail-describe' => 'Impussibel da midar las datas meta per la datoteca "$1".',
 'backend-fail-alreadyexists' => 'La datoteca $1 exista gia.',
 'backend-fail-store' => 'Impussibel da memorisar la datoteca $1 en $2.',
 'backend-fail-copy' => 'Impussibel da copiar la datoteca $1 a $2.',
@@ -1551,7 +1603,48 @@ Sch'il problem exista anc adina, contactescha in [[Special:ListUsers/sysop|admin
 'backend-fail-closetemp' => 'Impussibel da serrar la datoteca temporara.',
 'backend-fail-read' => 'Impussibel da leger la datoteca $1.',
 'backend-fail-create' => 'Impussibel da crear la datoteca $1.',
+'backend-fail-maxsize' => 'Impussibel da scriver en la datoteca "$1" perquai ch\'ella è pli gronda che {{PLURAL:$2|in byte|$2 bytes}}.',
 'backend-fail-readonly' => 'Il backend "$1" da memorisar è actualmain en il modus da be leger. Il motiv inditgà è: "$2".',
+'backend-fail-synced' => 'La datoteca "$1" è en in stadi inconsistent cun il backend intern da memorisar',
+'backend-fail-connect' => 'Impussibel da connectar cun il backend da memorisar "$1".',
+'backend-fail-internal' => 'Ina errur nunenconuschenta è capitada en il backend da memorisar "$1".',
+'backend-fail-contenttype' => 'Impussibel da determinar il tip da cuntegn da la datoteca per memorisar en "$1".',
+'backend-fail-batchsize' => 'Il backend da memorisar ha retschavì ina seria da $1 {{PLURAL:$1|operaziun|operaziuns}}; la limita è $2 {{PLURAL:$1|operaziun|operaziuns}}.',
+'backend-fail-usable' => 'Impussibel da leger u scriver la datoteca "$1" causa da permissiuns insufficientas u ordinaturs/containers mancants.',
+
+# File journal errors
+'filejournal-fail-dbconnect' => 'Impussibel da connectar a la banca da datas dal journal per il backend da memorisar "$1".',
+'filejournal-fail-dbquery' => 'Impussibel dad actualisar la banca da datas dal journal per il backend da memorisar "$1".',
+
+# Lock manager
+'lockmanager-notlocked' => 'Impussibel da debloccar "$1"; la resursa n\'è betg bloccada.',
+'lockmanager-fail-closelock' => 'Impussibel da serrar la datotoca da bloccar per "$1".',
+'lockmanager-fail-deletelock' => 'Impussibel da stizzar la datotoca da bloccar per "$1".',
+'lockmanager-fail-acquirelock' => 'Impussibel d\'obtegnair la datotoca da bloccar per "$1".',
+'lockmanager-fail-openlock' => 'Impussibel dad avrir la datotoca da bloccar per "$1".',
+'lockmanager-fail-releaselock' => 'Impussibel dad allontanar la bloccada per "$1".',
+'lockmanager-fail-db-bucket' => 'Impussibel da contactar avunda bancas da datas da bloccar en il bucket $1.',
+'lockmanager-fail-db-release' => 'Impussibel dad allontanar la bloccada sin la banca da datas $1.',
+'lockmanager-fail-svr-acquire' => 'Impussibel dad obtegnair la bloccada sin il server $1.',
+'lockmanager-fail-svr-release' => 'Impussibel dad allontanar la bloccada sin il server $1.',
+
+# ZipDirectoryReader
+'zip-file-open-error' => 'Ina errur è capitada durant avrir la datoteca per controllas da ZIP.',
+'zip-wrong-format' => "La datoteca specifitgada n'è betg ina datoteca da ZIP.",
+'zip-bad' => 'La datoteca è corrupta u ord auters motivs betg legibla.
+Ella na po betg vegnir controllada correctamain per la segirezza.',
+'zip-unsupported' => 'Questa datoteca da ZIP cuntegna funcziuns da ZIP che na vegnan betg sustegnidas da MediaWiki.
+Ella na po betg vegnir controllada correctamain per la segirezza.',
+
+# Special:UploadStash
+'uploadstash' => 'Stash da datotecas transferidas',
+'uploadstash-summary' => "Questa pagina porscha access a datotecas che èn transferidas u vegnan actualmain transferidas, ma n'èn anc betg publitgadas en il vichi. Questas datotecas èn be visiblas per l'utilisader che las transferescha.",
+'uploadstash-clear' => 'Stizzar las datotecas en il stash',
+'uploadstash-nofiles' => 'Ti has naginas datotecas en il stash',
+'uploadstash-badtoken' => "L'execuziun da questa acziun è fallada, forsa perquai che tias datas da la sessiun èn scrudadas. Emprova danovamain.",
+'uploadstash-errclear' => 'Nagin success cun stizzar las datotecas.',
+'uploadstash-refresh' => 'Actualisar la glista da las datotecas',
+'invalid-chunk-offset' => 'Offset dal segment nunvalid',
 
 # img_auth script messages
 'img-auth-accessdenied' => "Refusà l'access",
@@ -1559,16 +1652,27 @@ Sch'il problem exista anc adina, contactescha in [[Special:ListUsers/sysop|admin
 Tes server n'è betg configurà per surdar questa infurmaziun.
 El basa forsa sin CGI è na sustegna betg img_auth.
 Consultescha https://www.mediawiki.org/wiki/Manual:Image_Authorization.",
+'img-auth-notindir' => "Il percurs dumandà n'è betg en l'ordinatur da transferir configurà.",
+'img-auth-badtitle' => 'Nunpussaivel da construir in titel valid da "$1".',
 'img-auth-nologinnWL' => 'Ti n\'ès betg t\'annunzia ed "$1" n\'è betg sin la glista alva.',
 'img-auth-nofile' => 'Datoteca "$1" n\'exista betg.',
+'img-auth-isdir' => 'Ti emprovas dad acceder l\'ordinatur "$1".
+Ti has be access a singulas datotecas.',
+'img-auth-streaming' => 'Stream da "$1".',
+'img-auth-public' => "La funcziun da img_auth.php è da returnar datotecas d'in vichi privat.
+Quest vichi è configurà sco public.
+Per cuntanscher segirezza opgimala è img_auth.php deactivà.",
+'img-auth-noread' => 'L\'utilisader n\'ha betg access da leger "$1".',
+'img-auth-bad-query-string' => "L'URL ha in string da query nunvalid.",
 
 # HTTP errors
 'http-invalid-url' => 'URL nunvalida: $1',
 'http-invalid-scheme' => 'URLs dal schema "$1" na vegnan betg sustegnidas.',
 'http-request-error' => "La damonda HTTP n'è betg reussida causa ina errur nunenconuschenta.",
 'http-read-error' => 'Sbagl da leger HTTP.',
-'http-timed-out' => 'Surpassà il temp durant la dumanda HTTP.',
-'http-host-unreachable' => "Betg pussaivel da cuntanscher l'URL.",
+'http-timed-out' => 'Surpassà il temp durant la dumonda HTTP.',
+'http-curl-error' => "Errur cun recuperar l'URL: $1",
+'http-host-unreachable' => "Impussibel da cuntanscher l'URL.",
 'http-bad-status' => 'Durant la dumonda HTTP è ina errur capitada: $1 $2',
 
 # Some likely curl errors. More could be added from <http://curl.haxx.se/libcurl/c/libcurl-errors.html>
@@ -1620,15 +1724,28 @@ Sche la pagina vegn filtrada tenor utilisaders vegnan be datotecas nua che l'uti
 'filehist-missing' => 'Datoteca manca',
 'imagelinks' => 'Utilisaziun da la datoteca',
 'linkstoimage' => '{{PLURAL:$1|La suandanta pagina è colliada|Las suandantas $1 paginas èn colliadas}} cun questa datoteca:',
+'linkstoimage-more' => "Dapli che {{PLURAL:$1|ina pagina è colliada|$1 paginas èn colliadas}} a questa datoteca.
+La suandanta glista mussa be {{PLURAL:$1|l'emprima colliaziun|las emprimas $1 colliaziuns}} a questa pagina.
+Ina [[Special:WhatLinksHere/$2|glista cumpletta]] è disponibla",
 'nolinkstoimage' => 'Naginas paginas mussan sin questa datoteca.',
+'morelinkstoimage' => 'Mussar [[Special:WhatLinksHere/$1|dapli colliaziuns]] a questa datoteca.',
+'linkstoimage-redirect' => '$1 (renviament da datotecas) $2',
+'duplicatesoffile' => '{{PLURAL:$1|La suandanta datoteca è in duplicat|Las suandantas $1 datotecas èn duplicats}} da questa datoteca ([[Special:FileDuplicateSearch/$2|dapli detagls]]):',
 'sharedupload' => 'Quai è ina datoteca da $1 e vegn eventualmain utilisada dad auters projects.',
+'sharedupload-desc-there' => 'Questa datoteca è da $1 e vegn eventualmain utilisada dad auters projects.
+Legia la [$2 pagina da descripziun da la datoteca] per retschaiver ulteriuras infurmaziuns.',
 'sharedupload-desc-here' => 'Questa datoteca deriva da $1 e po vegnir utilisà dad auters projects.
 La descripziun da sia [$2 pagina da descripziun da datotecas] vegn mussada sutvart.',
+'sharedupload-desc-edit' => 'Questa datoteca è da $1 e vegn eventualmain utilisada dad auters projects.
+Eventualmain vuls ti modifitgar la descripziun sin la [$2 pagina da descripziun da la datoteca].',
+'sharedupload-desc-create' => 'Questa datoteca è da $1 e vegn eventualmain utilisada dad auters projects.
+Eventualmain vuls ti modifitgar la descripziun sin la [$2 pagina da descripziun da la datoteca].',
 'filepage-nofile' => "I n'exista nagina datoteca cun quest num.",
 'filepage-nofile-link' => "I n'exista nagina datoteca cun quest num, ti la pos dentant [$1 chargiar si].",
 'uploadnewversion-linktext' => 'Chargiar si ina nova versiun da questa datoteca',
 'shared-repo-from' => 'da $1',
 'shared-repo' => 'in repositori communabel',
+'upload-disallowed-here' => 'Ti na pos betg sursvriver questa datoteca.',
 
 # File reversion
 'filerevert' => 'Reninizialisar $1',
@@ -1658,6 +1775,7 @@ La descripziun da sia [$2 pagina da descripziun da datotecas] vegn mussada sutva
 ** Duplicat",
 'filedelete-edit-reasonlist' => 'Modifitgar ils motivs per stizzar',
 'filedelete-maintenance' => 'Pervia da lavurs da mantegniment èn las funcziuns per stizzar e reinizialisar datotecas deactivadas temporarmain.',
+'filedelete-maintenance-title' => 'Impussibel da stizzar la datoteca',
 
 # MIME search
 'mimesearch' => 'tschertgar tenor tip da MIME',
@@ -1709,6 +1827,9 @@ Betg emblida da controllar sche autras colliaziuns mainan als models avant ch'al
 
 'disambiguations' => 'Paginas cun colliaziuns sin paginas per la decleraziun da noziuns',
 'disambiguationspage' => 'Template:disambiguiziun',
+'disambiguations-text' => "Las suandantas paginas cuntegnan almain ina colliaziun ad ina '''pagina per la decleraziun da noziuns'''.
+Eventualmain duessan ellas plitost esser cun il dretg artitgel. 
+Ina pagina vegn tractada sco pagina per la decleraziun da noziuns sch'ella cuntegna almain in dals models enumerads sin [[MediaWiki:Disambiguationspage]].",
 
 'doubleredirects' => 'Renviaments dubels',
 'doubleredirectstext' => "Questa glista mussa renviaments che mainan puspè a renviaments.
@@ -1716,6 +1837,7 @@ Mintga colonna cuntegna colliaziuns a l'emprim ed al segund renviaments, sco era
 Elements <del>stritgads</del> èn gia eliminads.",
 'double-redirect-fixed-move' => '[[$1]] è vegnì spustà.
 I renviescha uss a [[$2]].',
+'double-redirect-fixed-maintenance' => 'Correctura dal renviament dubel da [[$1]] a [[$2]].',
 'double-redirect-fixer' => 'Bot da renviaments',
 
 'brokenredirects' => 'Renviaments defects',
@@ -1733,6 +1855,7 @@ I renviescha uss a [[$2]].',
 # Miscellaneous special pages
 'nbytes' => '$1 {{PLURAL:$1|byte|bytes}}',
 'ncategories' => '$1 {{PLURAL:$1|categoria|categorias}}',
+'ninterwikis' => '$1 {{PLURAL:$1|interwiki|interwikis}}',
 'nlinks' => '$1 {{PLURAL:$1|colliaziun|colliaziuns}}',
 'nmembers' => '$1 {{PLURAL:$1|commember|commembers}}',
 'nrevisions' => '{{PLURAL:$1|Ina versiun|$1 versiuns}}',
@@ -1753,52 +1876,76 @@ I renviescha uss a [[$2]].',
 'wantedpages' => 'Artitgels giavischads',
 'wantedpages-badtitle' => 'Titel nunvalid en il resultat: $1',
 'wantedfiles' => 'Datotecas giavischadas',
+'wantedfiletext-cat' => "Suandantas datotecas èn utilisadas ma n'existan betg. Datotecas da repositorys externs pon far part da la glista malgrà ch'ellas existan. Quests fauss positivs vegnan <del>stritgads</del>. Plinavant èn las paginas che integreschan datotecas che n'existan betg visiblas en [[:$1]].",
+'wantedfiletext-nocat' => "Suandantas datotecas èn utilisadas ma n'existan betg. Datotecas da repositorys externs pon far part da la glista malgrà ch'ellas existan. Quests fauss positivs vegnan <del>stritgads</del>.",
 'wantedtemplates' => 'Models giavischads',
 'mostlinked' => 'Artitgels sin ils quals las pli biaras colliaziuns mussan',
 'mostlinkedcategories' => 'Categorias utilisadas il pli savens',
 'mostlinkedtemplates' => 'Models integrads il pli savens',
 'mostcategories' => "Artitgels ch'èn en las pli bleras chategorias",
 'mostimages' => 'Datotecas utilisadas il pli savens',
+'mostinterwikis' => 'Paginas cun il pli bia interwikis',
 'mostrevisions' => 'Artitgels cun las pli bleras revisiuns',
 'prefixindex' => 'Tut las paginas cun prefix',
+'prefixindex-namespace' => 'Tut las paginas cun prefix (tip da pagina $1)',
 'shortpages' => 'Paginas curtas',
 'longpages' => 'Artitgels lungs',
 'deadendpages' => 'Artitgels senza colliaziuns internas',
+'deadendpagestext' => "Suandantas paginas n'han naginas colliaziuns ad autras paginas entaifer {{SITENAME}}.",
 'protectedpages' => 'Paginas protegidas',
+'protectedpages-indef' => 'Be mussar paginas protegidas illimitadamain',
+'protectedpages-cascade' => 'Be mussar protecziuns ertadas',
+'protectedpagestext' => 'Suandantas paginas èn protegidas encunter spustar u modifitgar.',
+'protectedpagesempty' => 'Naginas paginas èn actualmain protegidas cun quests parameters.',
 'protectedtitles' => 'Titels bloccads',
 'protectedtitlestext' => 'Suandants titels èn bloccads per vegnir creads.',
 'protectedtitlesempty' => 'Cun ils parameters inditgads èn naginas titels actualmain bloccads per vegnir creads.',
 'listusers' => 'Glista dals utilisaders',
+'listusers-editsonly' => 'Be mussar utilisaders cun modificaziuns',
+'listusers-creationsort' => 'Zavrar tenor data da creaziun',
+'usereditcount' => '$1 {{PLURAL:$1|modificaziun|modificaziuns}}',
 'usercreated' => '{{GENDER:$3|Creà}} ils $1 las $2 uras',
 'newpages' => 'Artitgels novs',
 'newpages-username' => "Num d'utilisader:",
 'ancientpages' => 'Artitgels il pli ditg betg modifitgads',
 'move' => 'spustar',
 'movethispage' => 'Spustar quest artitgel',
+'unusedimagestext' => "Suandantas datotecas exista ma n'èn betg inclusas en paginas. 
+Fa stim che era websites externas pon avair ina colliaziun a questa datoteca cun l'URL directa e la datoteca fa uschè part da questa glista malgrà ch'ella vegn utilisada.",
+'unusedcategoriestext' => 'Suandantas paginas da categoria existan, era sche nagina autra pagina u categoria las utilisescha.',
 'notargettitle' => 'Nagina destinaziun',
 'notargettext' => "Ti n'has betg inditgà inaa pagina da destinaziun u in utilisader per exequir questa acziun.",
 'nopagetitle' => "Questa pagina da destinaziun n'exista betg",
 'nopagetext' => "La pagina da destinaziun che ti has inditgà n'exista betg.",
 'pager-newer-n' => '{{PLURAL:$1|pli nov|ils $1 pli novs}}',
 'pager-older-n' => '{{PLURAL:$1|in pli vegl|$1 pli vegls}}',
+'suppress' => 'Oversight',
+'querypage-disabled' => 'Questa pagina speciala è deactivada ord motivs da prestaziun.',
 
 # Book sources
 'booksources' => 'Tschertga da ISBN',
 'booksources-search-legend' => 'Tschertgar pussaivladad da cumpra per cudeschs',
 'booksources-go' => 'Leger',
+'booksources-text' => 'Sutvart è ina glista da las colliaziuns ad autras paginas che vendan cudeschs novs ed utilisads e che pudessan avair dapli infurmaziuns davart ils cudeschs che ti tschertgas:',
+'booksources-invalid-isbn' => "Il numer ISBN na para betg dad esser valid; controllescha che ti n'has betg fatg errurs cun la scriver.",
 
 # Special:Log
 'specialloguserlabel' => 'Acziun exequida da:',
 'speciallogtitlelabel' => 'Destinaziun (titel u utilisader):',
 'log' => 'logs / cudesch da navigaziun',
 'all-logs-page' => 'Tut ils logs publics',
+'alllogstext' => "Quai è ina visualisaziun cumbinada da tut ils protocols da {{SITENAME}}.
+Ti pos restrenscher la vista cun tscherner in tip da protocol, il num d'utilisader (resguardar maiusclas/minusclas) u la pagina pertutgada (era resguardar maiusclas/minusclas).",
+'logempty' => 'Nagins elements correspundents en il protocol.',
+'log-title-wildcard' => 'Tschertgar titels che cumenzan cun quest text',
+'showhideselectedlogentries' => 'Mussar/zuppentar las endataziuns tschernidas dal protocol',
 
 # Special:AllPages
 'allpages' => 'Tut ils artitgels',
 'alphaindexline' => '$1 enfin $2',
 'nextpage' => 'proxima pagina ($1)',
 'prevpage' => 'ultima pagina ($1)',
-'allpagesfrom' => 'Mussar paginas naven da:',
+'allpagesfrom' => 'Mussar paginas davent da:',
 'allpagesto' => 'Mussar paginas enfin:',
 'allarticles' => 'Tut ils artitgels',
 'allinnamespace' => 'tut las paginas (tip da pagina $1)',
@@ -1807,10 +1954,24 @@ I renviescha uss a [[$2]].',
 'allpagesnext' => 'enavant',
 'allpagessubmit' => 'Mussar',
 'allpagesprefix' => 'Mussar paginas cun il prefix:',
+'allpagesbadtitle' => 'Il titel da pagina inditgà è nunvalid u ha in prefix dad inter-linguas u inter-wiki.
+El pudess cuntegnair in u plirs caracters che na pon betg vegnir utilisads en titels.',
 'allpages-bad-ns' => 'Il tip da pagina "$1" n\'existà betg sin {{SITENAME}}.',
+'allpages-hide-redirects' => 'Zuppentar renviaments',
+
+# SpecialCachedPage
+'cachedspecial-viewing-cached-ttl' => 'Ti contemplas ina versiun dal cache da questa pagina che pudess esser enfin $1 veglia.',
+'cachedspecial-viewing-cached-ts' => 'Ti contemplas ina versiun dal cache da questa pagina che pudess esser betg cumplettamain actuala.',
+'cachedspecial-refresh-now' => 'Mussar la pli nova.',
 
 # Special:Categories
 'categories' => 'Categorias',
+'categoriespagetext' => '{{PLURAL:$1|Suandanta categoria cuntegna|Suandantas categorias cuntegnan}} paginas u multimedia.
+[[Special:UnusedCategories|Categorias betg utilisadas]] na vegnan betg mussadas qua.
+Guarda era las [[Special:WantedCategories|categorias giavischadas]].',
+'categoriesfrom' => 'Mussar las categorias davent da:',
+'special-categories-sort-count' => 'zavrar tenor dumber',
+'special-categories-sort-abc' => 'zavrar alfabeticamain',
 
 # Special:DeletedContributions
 'deletedcontributions' => "Contribuziuns d'utilisaders stidadas",
@@ -1824,12 +1985,12 @@ I renviescha uss a [[$2]].',
 'linksearch-ok' => 'Tschertgar',
 'linksearch-text' => 'Tegnaplazzas sco "*.wikipedia.org" pon vegnir utilisads.
 Dovra almain ina top-level domain, per exempel "*.org".<br />
-Protocols sustegnids: <code>$1</code> (n\'agiunta betg quels a tia tschertga).',
+{{PLURAL:$2|Protocol sustegnì|Protocols sustegnids}}: <code>$1</code> (standard è http:// sche nagin protocol è specifitgà).',
 'linksearch-line' => '$1 è collià davent da la pagina $2',
 'linksearch-error' => "Wildcards pon esser be a l'entschatta dal num da host.",
 
 # Special:ListUsers
-'listusersfrom' => 'Mussar utilisaders naven da:',
+'listusersfrom' => 'Mussar utilisaders davent da:',
 'listusers-submit' => 'Mussar',
 'listusers-noresult' => 'Betg chattà in utilisader.',
 'listusers-blocked' => '(bloccà)',
@@ -1838,15 +1999,11 @@ Protocols sustegnids: <code>$1</code> (n\'agiunta betg quels a tia tschertga).',
 'activeusers' => 'Glista dals utilisaders activs',
 'activeusers-intro' => "Quai è ina glista dals utilisaders che han gì activitads {{PLURAL:$1|l'ultim di|en ils ultims $1 dis}}.",
 'activeusers-count' => "$1 {{PLURAL:$1|modificaziun|modificaziuns}} {{PLURAL:$3|l'ultim di|ils ultims $3 dis}}",
-'activeusers-from' => 'Mussar utilisaders naven da:',
+'activeusers-from' => 'Mussar utilisaders davent da:',
 'activeusers-hidebots' => 'Zuppentar bots',
 'activeusers-hidesysops' => 'Zuppentar administraturs',
 'activeusers-noresult' => 'Chattà nagins utilisaders.',
 
-# Special:Log/newusers
-'newuserlogpage' => "Log d'utilisaders creads",
-'newuserlogpagetext' => "Quai è il log dals contos d'utilisader ch'èn vegnids creads.",
-
 # Special:ListGroupRights
 'listgrouprights' => "Dretgs da las gruppas d'utilisaders",
 'listgrouprights-summary' => "Sutvart vegn mussada ina glista da las gruppas d'utilisaders sin questa wiki cun ils dretgs d'access associads.
@@ -1873,8 +2030,8 @@ Infurmaziuns supplementaras davart ils singuls dretgs chattas [[{{MediaWiki:List
 'emailuser-title-target' => 'Trametta in e-mail a {{GENDER:$1|quest utilisader|questa utilisadra}}',
 'emailuser-title-notarget' => "Trametter in e-mail a l'utilisader",
 'emailpage' => "Trametter in e-mail a l'utilisader",
-'emailpagetext' => "Ti pos utilisar il formular sutvart per trametter in'e-mail a quest utilisader.
-L'adressa dad e-mail che ti has endatà en [[Special:Preferences|tias preferenzas]] vegn inditgada sco speditur da l'e-mail, uschia ch'il retschavider po rispunder directamain a tai.",
+'emailpagetext' => "Ti pos utilisar il formular sutvart per trametter in'e-mail a {{GENDER:$1|quest utilisader|questa utilisadra}}.
+L'adressa dad e-mail che ti has endatà en [[Special:Preferences|tias preferenzas]] vegn inditgada sco speditur da l'e-mail, uschia {{GENDER:$1|ch'il retschavider|che la retschavidra}} po rispunder directamain a tai.",
 'usermailererror' => 'La funcziun dad e-mail ha returnà ina errur:',
 'defemailsubject' => '{{SITENAME}} e-mail da l\'utilisader "$1"',
 'usermaildisabled' => 'Trametter e-mails è deactivà',
@@ -1904,16 +2061,16 @@ L'adressa dad e-mail che ti has endatà en [[Special:Preferences|tias preferenza
 'usermessage-editor' => 'Messenger dal sistem',
 
 # Watchlist
-'watchlist' => "glista d'observaziun",
-'mywatchlist' => "glista d'observaziun",
+'watchlist' => "Glista d'observaziun",
+'mywatchlist' => "Glista d'observaziun",
 'watchlistfor2' => 'Per $1 $2',
 'nowatchlist' => "Ti n'has nagins elements sin tia glista d'observaziun.",
 'watchlistanontext' => "Ti stos $1 per vesair u modifitgar elements sin tia glista d'observaziun",
 'watchnologin' => "Ti n'es betg t'annunzià!",
 'watchnologintext' => "Ti stos [[Special:UserLogin|t'annunziar]] per midar tia glista d'observaziun.",
 'addwatch' => "Agiuntar a la glista d'observaziun",
-'addedwatchtext' => "L'artitgel \"[[:\$1]]\" è vegnì agiuntà a vossa [[Special:Watchlist|glista dad observaziun]].
-Midadas futuras vid quai artitgel e la pagina da discussiun appertegnenta vegnan enumeradas là e l'artitgel vegn marcà '''grass''' en la [[Special:RecentChanges|glista da las ultimas midadas]].",
+'addedwatchtext' => 'La pagina "[[:$1]]" è vegnida agiuntada a tia [[Special:Watchlist|glista dad observaziun]].
+Midadas futuras vid questa pagina e la pagina da discussiun appertegnenta vegnan mussadas là.',
 'removewatch' => "Allontanar da la glista d'observaziun",
 'removedwatchtext' => 'La pagina "[[:$1]]" è vegnida stizzada da [[Special:Watchlist|tia glista d\'observaziun]].',
 'watch' => 'Observar',
@@ -1942,14 +2099,22 @@ Midadas futuras vid quai artitgel e la pagina da discussiun appertegnenta vegnan
 'enotif_mailer' => "Servetsch d'infurmaziun per e-mail da {{SITENAME}}",
 'enotif_reset' => 'Marcar tut las paginas sco visitadas.',
 'enotif_impersonal_salutation' => 'Utilisader da {{SITENAME}}',
+'enotif_subject_deleted' => 'La pagina $1 da {{SITENAME}} è vegnida stizzada da {{GENDER:$2|$2}}',
+'enotif_subject_created' => 'La pagina $1 da {{SITENAME}} è vegnida creada da {{GENDER:$2|$2}}',
+'enotif_subject_moved' => 'La pagina $1 da {{SITENAME}} è vegnida spustada da {{GENDER:$2|$2}}',
+'enotif_subject_restored' => 'La pagina $1 da {{SITENAME}} è vegnida restaurada da {{GENDER:$2|$2}}',
+'enotif_subject_changed' => 'La pagina $1 da {{SITENAME}} è vegnida midada da {{GENDER:$2|$2}}',
+'enotif_body_intro_deleted' => 'La pagina $1 da {{SITENAME}} è vegnida stizzada ils $PAGEEDITDATE da {{GENDER:$2|$2}}, vesair $3.',
+'enotif_body_intro_created' => 'La pagina $1 da {{SITENAME}} è vegnida creada ils $PAGEEDITDATE da {{GENDER:$2|$2}}. $3 mussa la versiun actuala.',
+'enotif_body_intro_moved' => 'La pagina $1 da {{SITENAME}} è vegnida spustada ils $PAGEEDITDATE da {{GENDER:$2|$2}}. $3 mussa la versiun actuala.',
+'enotif_body_intro_restored' => 'La pagina $1 da {{SITENAME}} è vegnida restaurada ils $PAGEEDITDATE da {{GENDER:$2|$2}}. $3 mussa la versiun actuala.',
+'enotif_body_intro_changed' => 'La pagina $1 da {{SITENAME}} è vegnida midada ils $PAGEEDITDATE da {{GENDER:$2|$2}}. $3 mussa la versiun actuala.',
 'enotif_lastvisited' => 'Visita $1 per vesair tut las midadas dapi tia ultima visita.',
 'enotif_lastdiff' => 'Guarda $1 per vesair questa midada.',
 'enotif_anon_editor' => 'utilisader anonim $1',
 'enotif_body' => 'Olla $WATCHINGUSERNAME,
 
-La pagina $PAGETITLE sin {{SITENAME}} è vegnida $CHANGEDORCREATED ils $PAGEEDITDATE da $PAGEEDITOR, guarda $PAGETITLE_URL per la versiun actuala.
-
-$NEWPAGE
+$PAGEINTRO $NEWPAGE
 
 Resumaziun dal contribuent: $PAGESUMMARY $PAGEMINOREDIT
 
@@ -1957,8 +2122,7 @@ Contactar il contribuent:
 mail: $PAGEEDITOR_EMAIL
 wiki: $PAGEEDITOR_WIKI
 
-Ti na retschaivas betg ulteriurs avis en cass dad ulteriuras midadas sche ti na visitas betg questa pagina. 
-Ti has era la pussaivladad da redefinir tut ils flags d\'avis per tut las paginas sin tia glista d\'observaziun.
+Ti na retschaivas betg ulteriurs avis en cass dad ulteriuras activitads sche ti na visitas betg questa pagina. Ti has era la pussaivladad da redefinir tut ils flags d\'avis per tut las paginas sin tia glista d\'observaziun.
 
 Cun amiaivels salids,
 il sistem d\'avis da {{SITENAME}}
@@ -1975,6 +2139,8 @@ $UNWATCHURL
 
 Resuns ed agid chattas qua:
 {{fullurl:{{MediaWiki:Helppage}}}}',
+'created' => 'creada',
+'changed' => 'midada',
 
 # Delete
 'deletepage' => 'Stizzar la pagina',
@@ -1994,7 +2160,7 @@ Conferma per plaschair che ti ta es conscient da las consequenzas e che ti agesc
 Sin $2 chattas ti ina glista dals davos artitgels stizzads.',
 'dellogpage' => 'log dal stizzar',
 'dellogpagetext' => "Sutvart è ina glista dals elements stizzads l'ultim.",
-'deletionlog' => 'log dal stizzar',
+'deletionlog' => 'log da stizzar',
 'reverted' => 'Reinizialisà ina versiun da pli baud',
 'deletecomment' => 'Motiv:',
 'deleteotherreason' => 'Autra / supplementara raschun:',
@@ -2004,11 +2170,18 @@ Sin $2 chattas ti ina glista dals davos artitgels stizzads.',
 ** Violaziun dals dretgs d'autur
 ** Vandalissem",
 'delete-edit-reasonlist' => 'Midar ils motivs per il stizzar',
+'delete-toobig' => "Questa pagina ha in grond dumber da midadas (passa $1 {{PLURAL:$1|versiun|versiuns}}).
+La funcziun da stizzar è vegnida restrenschida per talas paginas per evitar ch'il server da {{SITENAME}} vegni surchargià.",
+'delete-warning-toobig' => 'Questa pagina ha in grond dumber da midadas (passa $1 {{PLURAL:$1|versiun|versiuns}}).
+Stizzar ina tala pagina pudess surchargiar las operaziuns da la banca da datas da {{SITENAME}}.
+Cuntinuescha cun precauziun.',
 
 # Rollback
 'rollback' => 'Revocar modificaziuns',
 'rollback_short' => 'Revocar',
 'rollbacklink' => 'revocar',
+'rollbacklinkcount' => 'revocar $1 {{PLURAL:$1|midada|midadas}}',
+'rollbacklinkcount-morethan' => 'revocar dapli che $1 {{PLURAL:$1|midada|midadas}}',
 'rollbackfailed' => 'Betg reussì da revocar',
 'cantrollback' => "Betg pussaivel da reinizialisar questa modificaziun; 
 l'ulitima contribuziun è dal sulet autur da questa pagina.",
@@ -2016,13 +2189,31 @@ l'ulitima contribuziun è dal sulet autur da questa pagina.",
 Enzatgi auter ha gia modifitga u reinizialisà qeusta pagina.
 
 L'ultima modificaziun vid questa pagina è da [[User:$3|$3]] ([[User talk:$3|talk]]{{int:pipe-separator}}[[Special:Contributions/$3|{{int:contribslink}}]]).",
+'editcomment' => "La resumaziun da la midada era: \"''\$1''\"",
+'revertpage' => "Annullà las modificaziun da [[Special:Contributions/$2|$2]] ([[User talk:$2|discussiun]]), l'ultima versiun da [[User:$1|$1]] è vegnida restaurada",
+'revertpage-nouser' => "Annullà las modificaziuns da (allontanà il num d'utilisader), l'ultima versiun da [[User:$1|$1]] è vegnida restaurada",
+'rollback-success' => "Annullà las modificaziuns da $1;
+restaurà l'ultima versiun da $2.",
+
+# Edit tokens
+'sessionfailure-title' => 'Errur da la sessiun',
+'sessionfailure' => "I para da dar in problem cun la sessiun da s'annunziar;
+questa acziun è vegnida interrutta sco mesira da precauziun encunter hijacking da sessiuns.
+Turna a l'ultima pagina, rechargia la pagina ed emprova anc ina giada.",
 
 # Protect
 'protectlogpage' => 'Log da las protecziuns',
+'protectlogtext' => 'Sutvart è ina glista da midadas vid protecziuns da paginas.
+Guarda la [[Special:ProtectedPages|glista da paginas protegidas]] per vesair la glista da las protecziuns actualmain activas.',
 'protectedarticle' => 'bloccà "[[$1]]"',
 'modifiedarticleprotection' => 'Midà il livel da protecziun per "[[$1]]"',
+'unprotectedarticle' => 'allontanà la protecziun da "[[$1]]"',
+'movedarticleprotection' => 'spustà la configuraziun da protecziun da "[[$2]]" a "[[$1]]"',
 'protect-title' => 'Midar il livel da protecziun per "$1"',
+'protect-title-notallowed' => 'Vesair il livel da protecziun da "$1"',
 'prot_1movedto2' => 'ha spustà [[$1]] tar [[$2]]',
+'protect-badnamespace-title' => 'Tip da pagina che na po betg vegnir protegì',
+'protect-badnamespace-text' => 'Paginas da quest tip da pagina na pon betg vegnir protegidas.',
 'protect-legend' => 'Midar il status da protecziun da la pagina.',
 'protectcomment' => 'Motiv:',
 'protectexpiry' => 'Pretegì enfin:',
@@ -2044,6 +2235,7 @@ Ti pos midar il livel da protecziun da quest\'artitgel, quai na vegn dentant bet
 'protect-level-sysop' => 'be administraturs',
 'protect-summary-cascade' => '"protecziun ertaivla"',
 'protect-expiring' => 'Scroda $1 (UTC)',
+'protect-expiring-local' => 'scroda ils $1',
 'protect-expiry-indefinite' => 'permanent',
 'protect-cascade' => 'Proteger paginas integradas en questa pagina ("protecziun ertaivla")',
 'protect-cantedit' => "Ti na pos betg midar il livel da protecziun da questa pagina, perquai che ti n'has betg ils dretgs per far quai.",
@@ -2089,6 +2281,14 @@ Per restituir be tschertgas part, activescha las chaschettas correspundentas per
 'undeleterevisions' => 'Archivà $1 {{PLURAL:$1|versiun|versiuns}} archived',
 'undeletehistory' => "Sche ti restaureschas ina pagina vegnan tut las versiuns en la coronologia era restauradas. 
 Sch'ina nova pagina cun il medem num è vegnida creada dapi che la pagina è vegnida stizzada, vegnan las versiuns restauradas cumparir avant en la cronologia.",
+'undeleterevdel' => 'La pagina na vegn betg restaurada sche la versiun la pli nova da la pagina u da la datoteca resta parzialmain stizzada.
+En quest cass na dastgas ti betg marcar la versiun la pli nova u na dastgas betg pli supprimer questa versiun.',
+'undeletehistorynoadmin' => "Questa pagina è vegnida stizzada.
+La raschun per stizzar è mussada en la resumaziun sutvart ensemen cun ils detagls dals utilisaders che han modifitgà questa pagina avant ch'ella è vegnida stizzada. 
+Il text actual da questas versiuns stizzadas è be disponibel per administraturs.",
+'undelete-revision' => 'Versiun stizzada da $1 (stadi dals $4, las $5) da $3:',
+'undeleterevision-missing' => "Versiun nunvalida u mancanta.
+Eventualmain es ti suandà ina colliaziun faussa u la versiun è vegnida restaurada u stizzada da l'archiv.",
 'undelete-nodiff' => 'Chattà naginas versiuns anteriuras.',
 'undeletebtn' => 'restituir',
 'undeletelink' => 'mussar/restituir',
@@ -2099,18 +2299,42 @@ Sch'ina nova pagina cun il medem num è vegnida creada dapi che la pagina è veg
 'undeletedrevisions' => 'Restituì {{PLURAL:$1|1 versiun|$1 versiuns}}',
 'undeletedrevisions-files' => 'Restituì {{PLURAL:$1|1 versiun|$1 versiuns}} e {{PLURAL:$2|1 datoteca|$2 datotecas}}',
 'undeletedfiles' => 'Restituì {{PLURAL:$1|1 datoteca|$1 datotecas}}',
+'cannotundelete' => 'Errur cun restaurar:
+$1',
+'undeletedpage' => "'''$1 è vegnì restaurà'''
+
+Consultescha il [[Special:Log/delete|protocol da stizzar]] per retschaiver ina survista da las ultimas paginas stizzadas u restauradas.",
+'undelete-header' => 'Legia il [[Special:Log/delete|protocol da stizzar]] per retschaiver ina survista da las ultimas paginas stizzadas u restauradas.',
+'undelete-search-title' => 'Tschertgar paginas stizzadas',
+'undelete-search-box' => 'Tschertgar paginas stizzadas',
+'undelete-search-prefix' => 'Mussar paginas che cumenzan cun:',
 'undelete-search-submit' => 'Tschertga',
+'undelete-no-results' => "Chattà naginas correspundenzas en l'archiv da stizzar.",
+'undelete-filename-mismatch' => 'Impussibel da restaurar la datoteca cun temp $1: Ils nums da datoteca na correspundan betg.',
+'undelete-bad-store-key' => 'Impussibel da restaurar la datoteca cun temp $1: La datoteca ha gia mancà avant che stizzar.',
+'undelete-cleanup-error' => 'Errur cun stizzar la datoteca da l\'archiv nunutilisada "$1".',
+'undelete-missing-filearchive' => "Impussibel da restaurar la datoteca cun l'ID dad archiv $1, perquai ch'ella n'exista betg en la banca da datas.
+Eventualmain è ella gia vegnida restaurada.",
+'undelete-error' => 'Errur durant restaurar la pagina',
+'undelete-error-short' => 'Errur durant restaurar la datoteca: $1',
+'undelete-error-long' => 'Durant restaurar la datoteca èn errurs vegnidas constatadas: 
+
+$1',
+'undelete-show-file-confirm' => 'Es ti segir che ti vuls vesair la versiun stizzada da la datoteca "<nowiki>$1</nowiki>" dals $2 las $3?',
 'undelete-show-file-submit' => 'Gea',
 
 # Namespace form on various pages
 'namespace' => 'Tip da pagina:',
 'invert' => 'invertar la selecziun',
+'tooltip-invert' => 'Activescha quest champ per zuppentar midadas a paginas dal tip da pagina tschernì (e, sche tschernì, dals tips da pagina associads)',
+'namespace_association' => 'Tip da pagina associà',
+'tooltip-namespace_association' => 'Activescha quest champ per era tschertgar en las paginas da discussiun (u cuntrari era en la pagina principala) associadas al tip da pagina tschernì',
 'blanknamespace' => '(principal)',
 
 # Contributions
-'contributions' => "Contribuziuns da l'utilisader",
+'contributions' => "Contribuziuns {{GENDER:$1|dal utilisader|da l'utilisadra}}",
 'contributions-title' => "Contribuziuns d'utilisader da $1",
-'mycontris' => 'contribuziuns',
+'mycontris' => 'Contribuziuns',
 'contribsub2' => 'Per $1 ($2)',
 'nocontribs' => 'Chattà naginas modificaziuns che correspundan a quests criteris.',
 'uctop' => '(actual)',
@@ -2148,13 +2372,16 @@ L'ultima endataziun dal log da bloccar vegn mussà sutvart sco referenza:",
 'whatlinkshere-prev' => '{{PLURAL:$1|ultim|ultims $1}}',
 'whatlinkshere-next' => '{{PLURAL:$1|proxim|proxims $1}}',
 'whatlinkshere-links' => '← colliaziuns',
-'whatlinkshere-hideredirs' => '$1 sviaments',
+'whatlinkshere-hideredirs' => '$1 renviaments',
 'whatlinkshere-hidetrans' => '$1 integraziuns da models',
 'whatlinkshere-hidelinks' => '$1 colliaziuns',
-'whatlinkshere-hideimages' => '$1 colliaziuns da datotecas',
+'whatlinkshere-hideimages' => '$1 colliaziuns a datotecas',
 'whatlinkshere-filters' => 'Filters',
 
 # Block/unblock
+'autoblockid' => 'Bloccada automatica #$1',
+'block' => "Bloccar l'utilisader",
+'unblock' => 'Debloccar in utilisader',
 'blockip' => "Bloccar l'utilisader",
 'blockip-title' => "Bloccar l'utilisader",
 'blockip-legend' => "Bloccar l'utilisader",
@@ -2173,6 +2400,7 @@ Inditgescha sutvart in motiv (per exempel pos ti inditgar paginas ch'èn vegnida
 ** Sedepurtar nunconvegnent u mulestant
 ** Abus da plirs contos
 ** Num d'utilisader nunacceptabel",
+'ipb-hardblock' => 'Evitar che utilisaders annunziads pon far modificaziuns davent da questa adressa IP',
 'ipbcreateaccount' => "Impedir la creaziun da contos d'utilisader",
 'ipbemailban' => 'Bloccar la funcziun da trametter e-mails',
 'ipbenableautoblock' => "Bloccar automaticamain l'ultima adressa IP che quest utilisader ha utilisà e mintga adressa IP che succeda da la quala el emprova da far modificaziuns",
@@ -2183,11 +2411,15 @@ Inditgescha sutvart in motiv (per exempel pos ti inditgar paginas ch'èn vegnida
 'ipbotherreason' => 'Auter/ulteriur motiv:',
 'ipbhidename' => "Zuppentar il num d'utilisader en las modicaziuns e glistas",
 'ipbwatchuser' => "Observar las paginas d'utilisader e da discussiun da quest utilisader",
+'ipb-disableusertalk' => "Evitar che quest utilisader po modifitgar sia pagina da discussiun durant ch'el è bloccà.",
 'ipb-change-block' => "Re-bloccar l'utilisader cun las medemas configuraziuns",
+'ipb-confirm' => 'Confermar la bloccada',
 'badipaddress' => "L'adressa IP è nunvalida",
 'blockipsuccesssub' => 'Bloccà cun success',
 'blockipsuccesstext' => '[[Special:Contributions/$1|$1]] è vegnì bloccà.<br />
 La [[Special:BlockList|glista da bloccadas]] mussa tut las bloccadas.',
+'ipb-blockingself' => 'Ti bloccheschas sa sez! Es ti segir che ti vuls far quai?',
+'ipb-confirmhideuser' => "Ti es londervi da bloccar in utilisader en il modus 'Zuppentar l'utilisader'. Quai vegn a supprimer il num da l'utilisader en tut las glistas e tut las endataziuns da protocols. Es ti segir che ti vuls cuntiunuar?",
 'ipb-edit-dropdown' => 'Modifitgar ils motivs per bloccar',
 'ipb-unblock-addr' => 'Debloccar $1',
 'ipb-unblock' => 'Debloccar in utilisader u ina adressa IP',
@@ -2197,6 +2429,7 @@ La [[Special:BlockList|glista da bloccadas]] mussa tut las bloccadas.',
 'unblockiptext' => "Utilisescha il formular sutvart per restituir l'access da scriver per ina adressa IP u in utilisader ch'è vegnì bloccà pli baud.",
 'ipusubmit' => 'Allontanar questa bloccada',
 'unblocked' => '[[User:$1|$1]] è vegnì debloccà',
+'unblocked-range' => '$1 è vegnì debloccà',
 'unblocked-id' => 'La bloccada $1 è vegnida allontanada',
 'blocklist' => 'Utilisaders bloccads',
 'ipblocklist' => 'Utilisaders bloccads',
@@ -2204,6 +2437,7 @@ La [[Special:BlockList|glista da bloccadas]] mussa tut las bloccadas.',
 'blocklist-userblocks' => 'zuppentar las bloccadas da contos',
 'blocklist-tempblocks' => 'Zuppentar bloccadas temporaras',
 'blocklist-addressblocks' => 'Zuppentar singuls blocs dad adressas dad IP',
+'blocklist-rangeblocks' => "Zuppentar las bloccadas da blocs d'adressas",
 'blocklist-timestamp' => 'Bul da temp',
 'blocklist-target' => 'Destinaziun',
 'blocklist-expiry' => 'Scroda ils',
@@ -2226,6 +2460,7 @@ La [[Special:BlockList|glista da bloccadas]] mussa tut las bloccadas.',
 'unblocklink' => 'debloccar',
 'change-blocklink' => 'Midar opziuns da bloccar',
 'contribslink' => 'contribuziuns',
+'emaillink' => 'Trametter in e-mail',
 'autoblocker' => "Vossa adressa dad IP è vegnida bloccada perquai che vus utilisais ina adressa dad IP cun [[User:$1|$1]]. Motiv per bolccar $1: '''$2'''.",
 'blocklogpage' => 'Log dal bloccar',
 'blocklog-showlog' => 'Quest utilisader è gia vegnì bloccà pli baud.
@@ -2234,6 +2469,9 @@ Qua il log da bloccaziun sco infurmaziun:',
 Quai è il log da supprimer sco infurmaziun:',
 'blocklogentry' => 'bloccà [[$1]] per $2. Motiv: $3',
 'reblock-logentry' => 'ha midà las opziuns da bloccada per [[$1]] enfin ils: $2 $3',
+'blocklogtext' => 'Quai è in protocol dad acziuns da bloccar e debloccar utilisaders.
+Adressas IP che vegnan bloccadas automaticamain na fan betg part da questa glista.
+Legia la [[Special:BlockList|glista da bloccadas]] per vesair ina glista da las bloccadas activas.',
 'unblocklogentry' => "debloccà l'utilisader „$1“",
 'block-log-flags-anononly' => 'be utilisaders anonims',
 'block-log-flags-nocreate' => 'deactivà la creaziun da contos',
@@ -2245,10 +2483,12 @@ Quai è il log da supprimer sco infurmaziun:',
 'range_block_disabled' => "La pussaivladad che l'administratur po bloccar entiras zonas d'adressas IP è deactivada.",
 'ipb_expiry_invalid' => 'La durada da la bloccada inditgada è nunvalaivla.',
 'ipb_expiry_temp' => "Bloccadas cun zuppentar il num d'utilisader sont esser permanentas.",
+'ipb_hide_invalid' => 'Impussibel da supprimer quest conto; eventualmain ha el memia bleras midadas.',
 'ipb_already_blocked' => '"$1" è gia bloccà',
 'ipb-needreblock' => '$1 è gia bloccà.
 Vuls ti midar las opziuns da la bloccada?',
 'ipb-otherblocks-header' => '{{PLURAL:$1|Autra bloccada|Autras bloccadas}}',
+'unblock-hideuser' => "Ti na pos betg debloccar quest utilisader, perquai che il num d'utilisader è vegnì zuppentà.",
 'ipb_cant_unblock' => "Errur: La bloccada cun lÎD $1 n'è betg vegnida chattada.
 Eventualmain è ella gia vegnida annulada.",
 'ipb_blocked_as_range' => "Errur: L'adressa IP $1 n'è betg bloccada directamain e na po betg vegnir debloccada.
@@ -2281,6 +2521,7 @@ Conferma che ti vuls propi far quai.",
 'unlockconfirm' => 'Gea, jau vi propi debloccar la banca da datas.',
 'lockbtn' => 'Bloccar la banca da datas',
 'unlockbtn' => 'Debloccar la banca da datas',
+'locknoconfirm' => "Ti n'has betg activà il champ da confermar.",
 'lockdbsuccesssub' => 'Bloccà cun success la banca da datas',
 'unlockdbsuccesssub' => 'Debloccà cun success la banca da datas',
 'lockdbsuccesstext' => 'La banca da datas è vegnida bloccada.<br />
@@ -2289,6 +2530,7 @@ Betg emblida da [[Special:UnlockDB|debloccar la banca da datas]] suenter che las
 'lockfilenotwritable' => 'La datoteca per bloccar la banca da datas na po betg vegnir scritta.
 Per bloccar ni debloccar la banca da datas sto il server avair il dretg da scriver en quella.',
 'databasenotlocked' => 'Questa banca da datas è betg bloccada.',
+'lockedbyandtime' => '(da {{GENDER:$1|$1}} ils $2 las $3)',
 
 # Move page
 'move-page' => 'Spustar "$1"',
@@ -2304,6 +2546,18 @@ Fa stim, che la pagina '''na vegn betg''' spustada sch'i exista gia in artitgel
 '''ATTENZIUN!'''
 Quai po esser ina midada drastica ed nunspetgada per in artitgel popular;
 sajas conscient da las consequenzas che quai process po avair.",
+'movepagetext-noredirectfixer' => "Il formular sutvart po dar in nov num ad ina pagina e spustar l'entira cronologia ad nov num. 
+Il titel vegl vegn a renviar al titel nov.
+Controllescha silsuenter ils [[Special:DoubleRedirects|renviaments dubels]] u [[Special:BrokenRedirects|nuncorrects]]. 
+Ti es responsabel da controllar che las colliaziuns mussan en quest lieu nua ch'ellas duessan. 
+
+Fa stim, che la pagina na vegn '''betg''' spustada sch'ina pagina cun il nov num exista gia; danor sch'ella è vida u in renviament senza cronologia.
+Quai munta che ti pos en cas che ti fas in sbagl spustar anavos la pagina nua ch'ella era avon e che ti na pso betg surscriver ina pagina existenta.
+
+
+'''Attenziun!'''
+Quai po esser ina midada drastica ed nunspetgada per in artitgel popular;
+sajas conscient da las consequenzas che quai process po avair.",
 'movepagetalktext' => "La pagina da discussiun che tutga tar l'artitgel vegn spustada automaticamain cun l'artitgel, '''sche betg''':
 *Ina pagina da discussiun betg vida exista gia sut il lemma nov
 *Ti prendas ora il crutschin dal champ sutvart
@@ -2355,6 +2609,7 @@ betg pussaivel da spustar ina pagina en il medem lieu.',
 'immobile-target-namespace-iw' => "Ina colliaziun dad interwiki n'è betg ina destinaziun valida per spustar.",
 'immobile-source-page' => 'Questa pagina na po betg vegnir spustada.',
 'immobile-target-page' => 'Betg pussaivel da spustar a quest titel da destinaziun.',
+'bad-target-model' => 'La destinaziun desiderada utilisescha in auter model da cuntegn. Impussibel da convertar $1 a $2.',
 'imagenocrossnamespace' => 'Betg pussaivel da spustar ina datoteca ad in tip da pagina betg da datoteca',
 'nonfile-cannot-move-to-file' => "Betg pussaivel da spustar in element che n'è nagina datoteca al tip da pagina datoteca",
 'imagetypemismatch' => 'La nova extensiun da datoteca na correspunda betg al tip da datoteca',
@@ -2434,6 +2689,7 @@ Tut ils imports transwiki vegnan registrads en il [[Special:Log/import|log d'imp
 'import-interwiki-templates' => 'Includer tut ils models',
 'import-interwiki-submit' => 'Importar',
 'import-interwiki-namespace' => 'Tip da pagina da destinaziun:',
+'import-interwiki-rootpage' => 'Pagina principala da destinaziun (opziunal):',
 'import-upload-filename' => 'Num da datoteca:',
 'import-comment' => 'Commentari:',
 'importtext' => "Exportescha la datoteca da la wiki da funtauna cun agid da la [[Special:Export|funcziun d'export]].
@@ -2470,6 +2726,10 @@ Emprova danovamain.',
 'import-error-interwiki' => 'La pagina "$1" n\'è betg vegnida importada perquai ch\'il num è reservà per colliaziuns externas (interwiki).',
 'import-error-special' => 'La pagina "$1" n\'è betg vegnida importada perquai ch\'ella fa part dad in tip da pagina spezial che na lubescha naginas pagina.',
 'import-error-invalid' => 'La pagina "$1" n\'è betg vegnida importada perquai ch\'il num n\'è betg valid.',
+'import-error-unserialize' => 'La versiun $2 da la pagina "$1" na po betg vegnir deserialisada. I è vegnì rapportà che la versiun utilisescha il model da cuntegn $3 serialisà sco $4.',
+'import-options-wrong' => '{{PLURAL:$2|Opziun nuncorrecta|Opziuns nuncorrectas}}: <nowiki>$1</nowiki>',
+'import-rootpage-invalid' => 'La pagina principala inditgada è in titel nunvalid.',
+'import-rootpage-nosubpage' => 'Il tip da pagina "$1" da la pagina principala na lubescha naginas sutpaginas.',
 
 # Import log
 'importlogpage' => 'Log dals imports',
@@ -2487,6 +2747,7 @@ Emprova danovamain.',
 'javascripttest-pagetext-frameworks' => 'Tscherna per plaschair in dals suandantas frameworks da test: $1',
 'javascripttest-pagetext-skins' => 'Tscherna in skin che duai vegnir utilisà per ils tests:',
 'javascripttest-qunit-intro' => 'Legia la [$1 documentaziun da tests] sin mediawiki.org.',
+'javascripttest-qunit-heading' => 'Collecziun da test da QUnit per JavaScript en MediaWiki',
 
 # Tooltip help for the actions
 'tooltip-pt-userpage' => "Mussar tia pagina d'utilisader",
@@ -2589,15 +2850,20 @@ Probablamien è quai capità pervia dad in link ad ina pagina externa ch'è sin
 'spambot_username' => 'Sistem da MediaWikip per nettegiar da spam',
 'spam_reverting' => "Restituir l'ultima versiun che na cuntegna naginas colliaziuns a $1",
 'spam_blanking' => 'Tut las versiuns cuntegnivan colliaziuns a $1, nettegià',
+'spam_deleting' => 'Tut las versiuns cuntegnivan colliaziuns a $1, stizzar',
 
 # Info page
 'pageinfo-title' => 'Infurmaziuns per "$1"',
+'pageinfo-not-current' => 'Questa infurmaziun na stat deplorablamain betg a disposiziun per versiuns veglias.',
 'pageinfo-header-basic' => 'Infurmaziuns da basa',
 'pageinfo-header-edits' => 'Cronologia da las midadas',
+'pageinfo-header-restrictions' => 'Protecziun da la pagina',
+'pageinfo-header-properties' => 'Carapteristicas da la pagina',
 'pageinfo-display-title' => 'Titel mussà',
 'pageinfo-default-sort' => 'Criteri da zavrar da standard',
 'pageinfo-length' => 'Lunghezza da la pagina (en bytes)',
 'pageinfo-article-id' => 'ID da la pagina',
+'pageinfo-language' => 'Lingua dal cuntegn da la pagina',
 'pageinfo-robot-policy' => 'Status per maschinas da tschertgar',
 'pageinfo-robot-index' => 'Indexabel',
 'pageinfo-robot-noindex' => 'Betg indexabel',
@@ -2617,6 +2883,14 @@ Probablamien è quai capità pervia dad in link ad ina pagina externa ch'è sin
 'pageinfo-magic-words' => '{{PLURAL:$1|Pled magic|Pleds magics}} ($1)',
 'pageinfo-hidden-categories' => '{{PLURAL:$1|Categoria zuppentada|Categorias zuppentadas}} ($1)',
 'pageinfo-templates' => '{{PLURAL:$1|Template integrà|Templates integrads}} ($1)',
+'pageinfo-toolboxlink' => 'Infurmaziuns da la pagina',
+'pageinfo-redirectsto' => 'Renviescha a',
+'pageinfo-redirectsto-info' => 'infurmaziun',
+'pageinfo-contentpage' => 'Contemplada sco pagina da cuntegn',
+'pageinfo-contentpage-yes' => 'Gea',
+'pageinfo-protect-cascading' => 'Protecziuns vegnan ertadas davent da qua',
+'pageinfo-protect-cascading-yes' => 'Gea',
+'pageinfo-protect-cascading-from' => 'Las protecziuns vegnan ertadas davent da',
 
 # Patrolling
 'markaspatrolleddiff' => 'Marcar sco controllà',
@@ -2628,6 +2902,8 @@ Probablamien è quai capità pervia dad in link ad ina pagina externa ch'è sin
 'markedaspatrollederror' => 'Betg pussaivel da marcar sco controllà',
 'markedaspatrollederrortext' => 'Ti stos specifitgar ina versiun per marcar sco controllada.',
 'markedaspatrollederror-noautopatrol' => 'Ti na dastgas betg marcar tias atgnas midadas sco controlladas.',
+'markedaspatrollednotify' => 'Questa midada vid $1 è vegnida marcada sco controllada.',
+'markedaspatrollederrornotify' => 'Sbagl durant marcar sco controllà.',
 
 # Patrol log
 'patrol-log-page' => 'Log da controlla',
@@ -2661,6 +2937,7 @@ Cun exequir questa datoteca po tes sistem vegnir donnegià.",
 'file-nohires' => 'Nagina resuluziun pli auta disponibla.',
 'svg-long-desc' => 'datoteca da SVG, grondezza da basa $1 × $2 pixels, grondezza da datoteca: $3',
 'svg-long-desc-animated' => 'Datoteca da SVG animada, dimensiun normala $1 x $2 pixels, grondezza da datoteca: $3',
+'svg-long-error' => 'Datoteca da SVG nundalida: $1',
 'show-big-image' => 'Resoluziun cumplaina',
 'show-big-image-preview' => 'Grondezza da questa prevista: $1.',
 'show-big-image-other' => 'Other {{PLURAL:$2|resoluziun|resoluziuns}}: $1.',
@@ -2691,6 +2968,7 @@ Cun exequir questa datoteca po tes sistem vegnir donnegià.",
 'hours' => '{{PLURAL:$1|$1 ura|$1 uras}}',
 'days' => '{{PLURAL:$1|$1 di|$1 dis}}',
 'ago' => 'avant $1',
+'just-now' => 'gist ussa',
 
 # Bad image list
 'bad_image_list' => "Il format è sco suonda:
@@ -2795,6 +3073,7 @@ Sche la datoteca è vegnida midada dal status original èn tscherts detagls even
 'exif-digitalzoomratio' => 'Quota dal zoom digital',
 'exif-focallengthin35mmfilm' => 'Distanza focala equivalenta en in film da 35 mm',
 'exif-scenecapturetype' => 'Tip da scena registrada',
+'exif-gaincontrol' => "Controlla da l'intensivaziun",
 'exif-contrast' => 'Contrast',
 'exif-saturation' => 'Saturaziun',
 'exif-sharpness' => 'Netezza (Schärfe)',
@@ -2938,6 +3217,12 @@ Sche la datoteca è vegnida midada dal status original èn tscherts detagls even
 
 'exif-meteringmode-0' => 'Nunenconuschent',
 'exif-meteringmode-1' => 'Media',
+'exif-meteringmode-2' => 'Media pesada en il center',
+'exif-meteringmode-3' => 'Spot',
+'exif-meteringmode-4' => 'Multi-Spot',
+'exif-meteringmode-5' => 'Muster',
+'exif-meteringmode-6' => 'Parzial',
+'exif-meteringmode-255' => 'Auter',
 
 'exif-lightsource-0' => 'Nunenconuschent',
 'exif-lightsource-1' => 'Glisch dal di',
@@ -2947,18 +3232,41 @@ Sche la datoteca è vegnida midada dal status original èn tscherts detagls even
 'exif-lightsource-9' => "Bel'aura",
 'exif-lightsource-10' => 'Nivels',
 'exif-lightsource-11' => 'Sumbriva',
+'exif-lightsource-12' => 'Cler dal di fluorescent (D 5700 – 7100K)',
+'exif-lightsource-13' => 'Di fluorescent (N 4600 - 5400K)',
+'exif-lightsource-14' => 'Alv fluorescent fraid (W 3900 – 4500K)',
+'exif-lightsource-15' => 'Alv fluorescent (WW 3200 – 3700K)',
 'exif-lightsource-17' => 'Glisch da standard A',
 'exif-lightsource-18' => 'Glisch da standard B',
 'exif-lightsource-19' => 'Glisch da standard C',
+'exif-lightsource-24' => 'Glisch da studio ISO (tungsten)',
+'exif-lightsource-255' => 'Autra funtauna da glisch',
 
 # Flash modes
 'exif-flash-fired-0' => 'Senza chametg/straglisch',
 'exif-flash-fired-1' => 'Cun chametg/straglisch',
+'exif-flash-return-0' => 'nagina funcziun da retrunar datas dal straglisch',
+'exif-flash-return-2' => 'chattà nagin return da glisch dal straglisch',
+'exif-flash-return-3' => 'chattà glisch da return dal straglisch',
+'exif-flash-mode-1' => 'straglisch obligatoric',
+'exif-flash-mode-2' => 'straglisch deactivà',
+'exif-flash-mode-3' => 'modus automatic',
+'exif-flash-function-1' => 'Nagina funcziun da straglisch',
 'exif-flash-redeye-1' => 'Reducziun dad egls cotschens',
 
 'exif-focalplaneresolutionunit-2' => 'Poleschs',
 
 'exif-sensingmethod-1' => 'Betg definì',
+'exif-sensingmethod-2' => 'Sensur da colur dad in chip',
+'exif-sensingmethod-3' => 'Sensur da colur dad dus chips',
+'exif-sensingmethod-4' => 'Sensur da colur dad trais chips',
+'exif-sensingmethod-5' => 'Sensur da zona da colur sequenzial',
+'exif-sensingmethod-7' => 'Sensur trilinear',
+'exif-sensingmethod-8' => 'Sensur da zona da colur sequenzial linear',
+
+'exif-filesource-3' => 'Camera digitala per maletgs da statua',
+
+'exif-scenetype-1' => 'Ina fotografia directa',
 
 'exif-customrendered-0' => 'Process normal',
 'exif-customrendered-1' => 'Process persunalisà',
@@ -3040,6 +3348,9 @@ Sche la datoteca è vegnida midada dal status original èn tscherts detagls even
 'exif-gpsdirection-t' => 'Direcziun reala',
 'exif-gpsdirection-m' => 'Direcziun magnetica',
 
+'exif-ycbcrpositioning-1' => 'Centrà',
+'exif-ycbcrpositioning-2' => 'Co-situà',
+
 'exif-dc-contributor' => 'Contribuents',
 'exif-dc-coverage' => 'Champ  local u temporal dal med',
 'exif-dc-date' => 'Data(s)',
@@ -3158,6 +3469,7 @@ Quai code da confermaziun vegn a scrudar ils $4.',
 # Scary transclusion
 'scarytranscludedisabled' => "[L'integraziun interwiki è deactivada]",
 'scarytranscludefailed' => "[Betg reussì d'integrar in model per $1]",
+'scarytranscludefailed-httpstatus' => '[Errur durant chargiar il model per $1: HTTP $2]',
 'scarytranscludetoolong' => '[URL è memia lunga]',
 
 # Delete conflict
@@ -3267,6 +3579,7 @@ Ti pos era utilisar [[Special:EditWatchlist|la pagina da standard]].',
 'version-license' => 'Licenza',
 'version-poweredby-credits' => "Questa wiki utilisescha '''[//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. 
 
 MediaWiki vegn distribuì en la speranza che questa software saja utila, dentant SENZA MINTGA GARANZIA; era senza garanzia implizita da NEGOZIABILITAD u ADDATAZIUN PER IN INTENT SPECIAL. Guarda la GNU General Public License per ulteriurs detagls. 
@@ -3409,11 +3722,14 @@ Questa pagina ha actualmain difficultads tecnicas.',
 'logentry-move-move_redir-noredirect' => '$1 ha spustà la pagina $3 a $4 e surscrit quatras in renviament senza crear in renviament',
 'logentry-patrol-patrol' => '$1 ha marcà la versiun $4 da la pagina $3 sco controllada',
 'logentry-patrol-patrol-auto' => '$1 ha marcà automaticamain la versiun $4 da la pagina $3 sco controllada',
-'logentry-newusers-newusers' => "$1 ha creà in conto d'utilisader",
-'logentry-newusers-create' => "$1 ha creà in conto d'utilisader",
-'logentry-newusers-create2' => "$1 ha creà in conto d'utilisader $3",
+'logentry-newusers-newusers' => 'Il conto $1 è vegnì creà',
+'logentry-newusers-create' => 'Il conto $1 è vegnì creà',
+'logentry-newusers-create2' => 'Il conto $3 è vegnì creà da $1',
 'logentry-newusers-autocreate' => 'Il conto $1 è vegnì creà automaticamain',
-'newuserlog-byemail' => 'tramess il pled-clav per e-mail',
+'logentry-rights-rights' => '$1 ha midà la commembranza da gruppas per $3 da $4 a $5',
+'logentry-rights-rights-legacy' => '$1 ha midà la commembranza da gruppas per $3',
+'logentry-rights-autopromote' => '$1 è vegnì promovì automaticamain da $4 a $5',
+'rightsnone' => '(nagins)',
 
 # Feedback
 'feedback-bugornote' => 'Sche ti vuls descriver detagliadamain in problem techic, lura [$1 rapporta in bug].
index b1856e5..183e193 100644 (file)
@@ -208,7 +208,7 @@ $specialPageAliases = array(
        'Contributions'             => array( 'Contribuții' ),
        'CreateAccount'             => array( 'Înregistrare' ),
        'Deadendpages'              => array( 'Pagini_fără_legături' ),
-       'DeletedContributions'      => array( 'Contibuții_șterse' ),
+       'DeletedContributions'      => array( 'Contribuții_șterse' ),
        'Disambiguations'           => array( 'Dezambiguizări' ),
        'DoubleRedirects'           => array( 'Redirectări_duble' ),
        'Emailuser'                 => array( 'Email_utilizator' ),
@@ -416,7 +416,7 @@ pe titlul secțiunii (JavaScript)',
 'category-empty' => "''Această categorie nu conține articole sau fișiere media.''",
 'hidden-categories' => '{{PLURAL:$1|Categorie ascunsă|Categorii ascunse}}',
 'hidden-category-category' => 'Categorii ascunse',
-'category-subcat-count' => '{{PLURAL:$2|Această categorie conține doar următoarea subcategorie.|Această categorie conține {{PLURAL:$1|următoarea subcategorie|următoarele $1 subcategorii}}, dintr-un total de $2.}}',
+'category-subcat-count' => '{{PLURAL:$2|Această categorie conține doar următoarea subcategorie.|Această categorie conține {{PLURAL:$1|următoarea subcategorie|următoarele $1 subcategorii|următoarele $1 de subcategorii}}, dintr-un total de $2.}}',
 'category-subcat-count-limited' => 'Această categorie conține {{PLURAL:$1|următoarea subcategorie|următoarele $1 subcategorii}}.',
 'category-article-count' => '{{PLURAL:$2|Această categorie conține doar următoarea pagină.|{{PLURAL:$1|Următoarea pagină|Următoarele $1 pagini}} se află în această categorie, dintr-un total de $2.}}',
 'category-article-count-limited' => '{{PLURAL:$1|Următoarea pagină|Următoarele $1 pagini}} se află în categoria curentă.',
@@ -434,6 +434,7 @@ pe titlul secțiunii (JavaScript)',
 'newwindow' => '(se deschide într-o fereastră nouă)',
 'cancel' => 'Revocare',
 'moredotdotdot' => 'Mai mult…',
+'morenotlisted' => 'Mai multe nu sunt enumerate...',
 'mypage' => 'Pagină',
 'mytalk' => 'Discuții',
 'anontalk' => 'Discuția pentru această adresă IP',
@@ -664,9 +665,8 @@ S-ar putea ca acesta să fi fost deja șters de altcineva.',
 'delete-hook-aborted' => 'Ștergerea a fost abandonată din cauza unui hook.
 Nicio explicație furnizată.',
 'badtitle' => 'Titlu incorect',
-'badtitletext' => 'Titlul căutat a fost invalid, gol sau o legătură invalidă inter-linguală sau inter-wiki.
-
-Poate conține unul sau mai multe caractere ce nu poate fi folosit în titluri.',
+'badtitletext' => 'Titlul paginii căutate este incorect, gol sau este o legătură interlinguală sau interwiki incorectă.
+Poate conține unul sau mai multe caractere ce nu pot fi folosite în titluri.',
 'perfcached' => 'Datele următoare au fost păstrate în cache și s-ar putea să nu fie actualizate. Un maxim de {{PLURAL:$1|un rezultat este disponibil|$1 rezultate sunt disponibile}} în cache.',
 'perfcachedts' => 'Informațiile de mai jos provin din cache, ultima actualizare efectuându-se la $1. Un maxim de {{PLURAL:$4|un rezultat este disponibil|$4 rezultate sunt disponibile}} în cache.',
 'querypage-no-updates' => 'Actualizările acestei pagini sunt momentan dezactivate. Informațiile de aici nu sunt împrospătate.',
@@ -738,7 +738,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?',
-'createaccountmail' => 'după e-mail',
+'createaccountmail' => 'Utilizează o parolă temporară aleasă la întâmplare și o trimite la adresa de e-mail specificată mai jos',
 'createaccountreason' => 'Motiv:',
 'badretype' => 'Parolele pe care le-ați introdus diferă.',
 'userexists' => 'Numele de utilizator pe care l-ați introdus este deja folosit.
@@ -807,6 +807,7 @@ Vă rugăm să așteptați până să mai încercați.',
 # E-mail sending
 'php-mail-error-unknown' => 'Eroare necunoscută în funcția PHP mail()',
 'user-mail-no-addy' => 'S-a încercat trimiterea e-mailului fără o adresă de e-mail.',
+'user-mail-no-body' => 'S-a încercat trimiterea unui e-mail fără conținut sau nejustificat de scurt.',
 
 # Change password dialog
 'resetpass' => 'Modifică parola',
@@ -868,6 +869,7 @@ Parolă temporară: $2',
 'changeemail-oldemail' => 'Adresa de e-mail actuală:',
 'changeemail-newemail' => 'Noua adresă de e-mail:',
 'changeemail-none' => '(niciuna)',
+'changeemail-password' => 'Parola dumneavoastră la {{SITENAME}}:',
 'changeemail-submit' => 'Modifică adresa de e-mail',
 'changeemail-cancel' => 'Revocare',
 
@@ -1051,7 +1053,6 @@ Ultima intrare în jurnal este afișată mai jos pentru referință:",
 'template-semiprotected' => '(semiprotejat)',
 'hiddencategories' => 'Această pagină este membrul {{PLURAL:$1|unei categorii ascunse|a $1 categorii ascunse}}:',
 'edittools' => '<!-- Acest text va apărea după caseta de editare și formularele de trimitere fișier. -->',
-'nocreatetitle' => 'Creare de pagini limitată',
 'nocreatetext' => '{{SITENAME}} a restricționat abilitatea de a crea pagini noi.
 Puteți edita o pagină deja existentă sau puteți să vă [[Special:UserLogin|autentificați/creați]] un cont de utilizator.',
 'nocreate-loggedin' => 'Nu ai permisiunea să creezi pagini noi.',
@@ -1447,7 +1448,7 @@ Aici se află o combinație generată întâmplător pe care o puteți folosi: $
 Acțiunea nu este reversibilă.',
 'prefs-emailconfirm-label' => 'Confirmare e-mail:',
 'prefs-textboxsize' => 'Mărime căsuță de modificare',
-'youremail' => 'Adresa de e-mail:',
+'youremail' => 'Adresă de e-mail:',
 'username' => '{{GENDER:$1|Nume de utilizator}}:',
 'uid' => 'ID {{GENDER:$1|utilizator|utilizatoare}}:',
 'prefs-memberingroups' => '{{GENDER:$2|Membru|Membră}} în {{PLURAL:$1|grupul|grupurile}}:',
@@ -1600,15 +1601,13 @@ Dacă decideți furnizarea sa, acesta va fi folosit pentru a vă atribui munca.'
 'right-sendemail' => 'Trimite e-mail altor utilizatori',
 'right-passwordreset' => 'Vizualizează e-mailurile de reinițializare a parolelor',
 
+# Special:Log/newusers
+'newuserlogpage' => 'Jurnal utilizatori noi',
+'newuserlogpagetext' => 'Acesta este jurnalul creărilor conturilor de utilizator.',
+
 # User rights log
 'rightslog' => 'Jurnal permisiuni de utilizator',
 'rightslogtext' => 'Acest jurnal cuprinde modificările permisiunilor utilizatorilor.',
-'rightslogentry' => 'a schimbat permisiunile pentru $1 de la $2 la $3',
-'rightslogentry-autopromote' => 'a fost promovat în mod automat de la $2 la $3',
-'logentry-rights-rights' => '$1 a schimbat apartenența la grup pentru $3 de la $4 la $5',
-'logentry-rights-rights-legacy' => '$1 a schimbat apartenența la grup pentru $3',
-'logentry-rights-autopromote' => '$1 a fost promovat în mod automat de la $4 la $5',
-'rightsnone' => '(niciunul)',
 
 # Associated actions - in the sentence "You do not have permission to X"
 'action-read' => 'citiți această pagină',
@@ -2238,7 +2237,7 @@ Vedeți și [[Special:WantedCategories|categoriile dorite]].',
 'linksearch-ok' => 'Caută',
 'linksearch-text' => 'Pot fi folosite metacaractere precum „*.wikipedia.org”.
 Necesită cel puțin un domeniu de nivel superior, cum ar fi „*.org”.<br />
-Protocoale suportate: <code>$1</code> (se trece implicit la http:// dacă nu este specificat niciun protocol).',
+{{PLURAL:$2|Protocol suportat|Protocoale suportate}}: <code>$1</code> (se trece implicit la http:// dacă nu este specificat niciun protocol).',
 'linksearch-line' => '$1 este legat de $2',
 'linksearch-error' => 'Metacaracterele pot să apară doar la începutul hostname-ului.',
 
@@ -2249,18 +2248,14 @@ Protocoale suportate: <code>$1</code> (se trece implicit la http:// dacă nu est
 'listusers-blocked' => '(blocat{{GENDER:$1||ă|}})',
 
 # Special:ActiveUsers
-'activeusers' => 'Lista de utilizatori activi',
-'activeusers-intro' => 'Aceasta este o listă cu utilizatorii care au avut un fel de activitate în {{PLURAL:$1|ultima zi|ultimele $1 zile}}.',
-'activeusers-count' => '$1 {{PLURAL:$1|modificare recentă|modificări recente}} în {{PLURAL:$3|ultima zi|ultimele $3 zile}}',
+'activeusers' => 'Listă utilizatori activi',
+'activeusers-intro' => 'Aceasta este o listă cu utilizatorii care au avut orice fel de activitate în {{PLURAL:$1|ultima zi|ultimele $1 zile}}.',
+'activeusers-count' => '{{PLURAL:$1|o acțiune|$1 acțiuni|$1 de acțiuni}} în {{PLURAL:$3|ultima zi|ultimele $3 zile|ultimele $3 de zile}}',
 'activeusers-from' => 'Afișează utilizatori începând cu:',
 'activeusers-hidebots' => 'Ascunde roboții',
 'activeusers-hidesysops' => 'Ascunde administratorii',
 'activeusers-noresult' => 'Niciun utilizator găsit.',
 
-# Special:Log/newusers
-'newuserlogpage' => 'Jurnal utilizatori noi',
-'newuserlogpagetext' => 'Acesta este jurnalul creărilor conturilor de utilizator.',
-
 # Special:ListGroupRights
 'listgrouprights' => 'Permisiuni grupuri de utilizatori',
 'listgrouprights-summary' => 'Mai jos se află o listă a grupurilor de utilizatori definite în acest wiki, împreună cu permisiunile de acces asociate.
@@ -2327,7 +2322,7 @@ Adresa de e-mail specificată de dumneavoastră în [[Special:Preferences|prefer
 'watchnologintext' => 'Trebuie să fiți [[Special:UserLogin|autentificat]] pentru a vă modifica lista de pagini urmărite.',
 'addwatch' => 'Adăugă la lista de pagini urmărite',
 'addedwatchtext' => 'Pagina „[[:$1]]” a fost adăugată la lista dumneavoastră de [[Special:Watchlist|pagini urmărite]].
-Modificările viitoare efectuate asupra acestei pagini dar și asupra paginii de discuție asociată vor fi listate acolo și, în plus, ele vor apărea cu <b>caractere îngroșate</b> în pagina cu [[Special:RecentChanges|schimbări recente]] pentru evidențiere.',
+Modificările viitoare efectuate asupra acestei pagini dar și asupra paginii de discuție asociată vor fi listate acolo.',
 'removewatch' => 'Elimină din lista de pagini urmărite',
 'removedwatchtext' => 'Pagina „[[:$1]]” a fost eliminată din [[Special:Watchlist|lista de pagini urmărite]].',
 'watch' => 'Urmărire',
@@ -2361,7 +2356,7 @@ Modificările viitoare efectuate asupra acestei pagini dar și asupra paginii de
 'enotif_subject_moved' => 'Pagina $1 de la {{SITENAME}} a fost redenumită de către {{gender:$2|$2}}',
 'enotif_subject_restored' => 'Pagina $1 de la {{SITENAME}} a fost restaurată de către {{gender:$2|$2}}',
 'enotif_subject_changed' => 'Pagina $1 de la {{SITENAME}} a fost modificată de către {{gender:$2|$2}}',
-'enotif_body_intro_deleted' => 'Pagina $1 de la {{SITENAME}} a fost ștearsă la $PAGEEDITDATE de către {{gender:$2|$2}}; vedeți $3 pentru versiunea actuală.',
+'enotif_body_intro_deleted' => 'Pagina $1 de la {{SITENAME}} a fost ștearsă la $PAGEEDITDATE de către {{gender:$2|$2}}; vedeți $3.',
 'enotif_body_intro_created' => 'Pagina $1 de la {{SITENAME}} a fost creată la $PAGEEDITDATE de către {{gender:$2|$2}}; vedeți $3 pentru versiunea actuală.',
 'enotif_body_intro_moved' => 'Pagina $1 de la {{SITENAME}} a fost redenumită la $PAGEEDITDATE de către {{gender:$2|$2}}; vedeți $3 pentru versiunea actuală.',
 'enotif_body_intro_restored' => 'Pagina $1 de la {{SITENAME}} a fost restaurată la $PAGEEDITDATE de către {{gender:$2|$2}}; vedeți $3 pentru versiunea actuală.',
@@ -2394,6 +2389,8 @@ $UNWATCHURL
 
 Asistență și suport:
 {{canonicalurl:{{MediaWiki:Helppage}}}}',
+'created' => 'creată',
+'changed' => 'modificată',
 
 # Delete
 'deletepage' => 'Șterge pagina',
@@ -2462,6 +2459,8 @@ Consultați [[Special:ProtectedPages|indexul paginilor protejate]] pentru o list
 'prot_1movedto2' => 'a mutat [[$1]] la [[$2]]',
 'protect-badnamespace-title' => 'Spațiu de nume neprotejabil',
 'protect-badnamespace-text' => 'Paginile din acest spațiu de nume nu pot fi protejate.',
+'protect-norestrictiontypes-text' => 'Această pagină nu poate fi protejată întrucât nu există niciun tip de restricție disponibil.',
+'protect-norestrictiontypes-title' => 'Pagină neprotejabilă',
 'protect-legend' => 'Confirmă protejare',
 'protectcomment' => 'Motiv:',
 'protectexpiry' => 'Expiră:',
@@ -2478,9 +2477,9 @@ Aici sunt setările curente pentru pagina '''$1''':",
 'protect-cascadeon' => 'Această pagină este protejată deoarece este inclusă în {{PLURAL:$1|următoarea pagină, ce are|următoarele pagini ce au}} activată protejarea la modificare în cascadă.
 Puteți schimba nivelul de protejare al acestei pagini, dar asta nu va afecta protecția în cascadă.',
 'protect-default' => 'Permis pentru toți utilizatorii',
-'protect-fallback' => 'Cere permisiunea "$1"',
-'protect-level-autoconfirmed' => 'Blochează utilizatorii noi și neînregistrați',
-'protect-level-sysop' => 'Numai administratorii',
+'protect-fallback' => 'Autorizat doar pentru utilizatorii cu permisiunea „$1”',
+'protect-level-autoconfirmed' => 'Autorizat doar pentru utilizatorii autoconfirmați',
+'protect-level-sysop' => 'Autorizat doar pentru administratori',
 'protect-summary-cascade' => 'în cascadă',
 'protect-expiring' => 'expiră $1 (UTC)',
 'protect-expiring-local' => 'expiră la $1',
@@ -2785,8 +2784,7 @@ nu uitați să verificați dacă nu există redirecționări [[Special:DoubleRed
 
 Vă rugăm să rețineți că sunteți responsabil(ă) pentru a face legăturile vechi să rămână valide.
 
-Rețineți că pagina '''nu va fi redenumită''' dacă există deja o pagină cu noul titlu, în afara cazurilor în care cea din urmă nu are conținut sau este deja
-o redirecționare; în plus, aceasta nu trebuie să aibă un istoric de modificări.
+Rețineți că pagina '''nu va fi redenumită''' dacă există deja o pagină cu noul titlu, în afara cazului în care cea din urmă este deja o redirecționare; în plus, aceasta nu trebuie să aibă un istoric de modificări.
 Cu alte cuvinte, veți putea redenumi înapoi o pagină pe care ați redenumit-o greșit, dar nu veți putea suprascrie o pagină validă existentă prin redenumirea alteia.
 
 '''ATENȚIE!'''
@@ -2969,6 +2967,7 @@ Un dosar temporar lipsește.',
 'import-error-interwiki' => 'Pagina „$1” nu poate fi importată deoarece numele acesteia este rezervat pentru legături externe (interwiki).',
 'import-error-special' => 'Pagina „$1” nu poate fi importată deoarece aparține unui spațiu de nume special care nu admite pagini.',
 'import-error-invalid' => 'Pagina „$1” nu poate fi importată deoarece numele acesteia este invalid.',
+'import-error-unserialize' => 'Versiunea $2 a paginii „$1” nu poate fi deserializată. Versiunea a fost raportată ca utilizând modelul de conținut $3 serializat ca $4.',
 'import-options-wrong' => '{{PLURAL:$2|Opțiune eronată|Opțiuni eronate}}: <nowiki>$1</nowiki>',
 'import-rootpage-invalid' => 'Pagina rădăcină furnizată este un titlu nevalid.',
 'import-rootpage-nosubpage' => 'Spațiul de nume „$1” al paginii rădăcină nu permite subpagini.',
@@ -3129,6 +3128,7 @@ Permite adăugarea unui motiv în descrierea modificărilor',
 'pageinfo-magic-words' => '{{PLURAL:$1|Cuvânt magic|Cuvinte magice}} ($1)',
 'pageinfo-hidden-categories' => '{{PLURAL:$1|Categorie ascunsă|Categorii ascunse}} ($1)',
 'pageinfo-templates' => '{{PLURAL:$1|Format inclus|Formate incluse}} ($1)',
+'pageinfo-transclusions' => '{{PLURAL:$1|Pagină transclusă|Pagini transcluse}} din ($1)',
 'pageinfo-toolboxlink' => 'Informații despre pagină',
 'pageinfo-redirectsto' => 'Redirecționează către',
 'pageinfo-redirectsto-info' => 'info',
@@ -3137,6 +3137,10 @@ Permite adăugarea unui motiv în descrierea modificărilor',
 'pageinfo-protect-cascading' => 'Protecțiile provin în cascadă de aici',
 'pageinfo-protect-cascading-yes' => 'Da',
 'pageinfo-protect-cascading-from' => 'Protecțiile provin în cascadă de la',
+'pageinfo-category-info' => 'Informații despre categorie',
+'pageinfo-category-pages' => 'Număr de pagini',
+'pageinfo-category-subcats' => 'Număr de subcategorii',
+'pageinfo-category-files' => 'Număr de fișiere',
 
 # Skin names
 'skinname-standard' => 'Clasic',
@@ -3195,6 +3199,7 @@ Executându-l, sistemul dvs. poate fi compromis.",
 'file-nohires' => 'Rezoluții mai mari nu sunt disponibile.',
 '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-preview' => 'Mărimea acestei previzualizări: $1.',
 'show-big-image-other' => '{{PLURAL:$2|Altă rezoluție|Alte rezoluții}}: $1.',
@@ -3224,6 +3229,8 @@ Executându-l, sistemul dvs. poate fi compromis.",
 'minutes' => '{{PLURAL:$1|un minut|$1 minute|$1 de minute}}',
 'hours' => '{{PLURAL:$1|o oră|$1 ore|$1 de ore}}',
 'days' => '{{PLURAL:$1|o zi|$1 zile|$1 de zile}}',
+'months' => '{{PLURAL:$1|$1 lună|$1 luni|$1 de luni}}',
+'years' => '{{PLURAL:$1|$1 an|$1 ani|$1 de ani}}',
 'ago' => '$1 în urmă',
 'just-now' => 'Chiar acum',
 
@@ -3875,7 +3882,7 @@ Imaginile sunt afișate la rezoluția lor maximă, în timp ce alte tipuri de fi
 'specialpages-group-highuse' => 'Pagini utilizate intens',
 'specialpages-group-pages' => 'Liste de pagini',
 'specialpages-group-pagetools' => 'Unelte pentru pagini',
-'specialpages-group-wiki' => 'Date și unelte wiki',
+'specialpages-group-wiki' => 'Date și instrumente',
 'specialpages-group-redirects' => 'Pagini speciale de redirecționare',
 'specialpages-group-spam' => 'Unelte spam',
 
@@ -3972,8 +3979,12 @@ Imaginile sunt afișate la rezoluția lor maximă, în timp ce alte tipuri de fi
 'logentry-newusers-newusers' => 'Contul de utilizator $1 a fost creat',
 'logentry-newusers-create' => 'Contul de utilizator $1 a fost creat',
 'logentry-newusers-create2' => 'Contul de utilizator $3 a fost creat de către $1',
+'logentry-newusers-byemail' => 'Contul de utilizator $3 a fost creat de către $1, iar parola a fost trimisă prin e-mail',
 'logentry-newusers-autocreate' => 'Contul $1 a fost creat în mod automat',
-'newuserlog-byemail' => 'parola trimisă prin e-mail',
+'logentry-rights-rights' => '$1 a schimbat apartenența la grup pentru $3 de la $4 la $5',
+'logentry-rights-rights-legacy' => '$1 a schimbat apartenența la grup pentru $3',
+'logentry-rights-autopromote' => '$1 a fost promovat în mod automat de la $4 la $5',
+'rightsnone' => '(niciunul)',
 
 # Feedback
 'feedback-bugornote' => 'Dacă sunteți pregătit să descrieți o problemă tehnică în detaliu vă rugăm să [$1 raportați un bug].
@@ -4027,6 +4038,7 @@ Imaginile sunt afișate la rezoluția lor maximă, în timp ce alte tipuri de fi
 'api-error-ok-but-empty' => 'Eroare internă: niciun răspuns de la server.',
 'api-error-overwrite' => 'Nu este permisă suprascrierea unui fișier existent.',
 'api-error-stashfailed' => 'Eroare internă: serverul nu a putut stoca fișierul temporar.',
+'api-error-publishfailed' => 'Eroare internă: serverul nu a putut publica fișierul temporar.',
 'api-error-timeout' => 'Serverul nu a răspuns în timp util.',
 'api-error-unclassified' => 'A apărut o eroare necunoscută.',
 'api-error-unknown-code' => 'Eroare necunoscută: „$1”',
@@ -4047,6 +4059,4 @@ Imaginile sunt afișate la rezoluția lor maximă, în timp ce alte tipuri de fi
 'duration-centuries' => '$1 {{PLURAL:$1|secol|secole|de secole}}',
 'duration-millennia' => '$1 {{PLURAL:$1|mileniu|milenii|de milenii}}',
 
-# Unknown messages
-'svg-long-error' => 'Fișier SVG invalid: $1',
 );
diff --git a/languages/messages/MessagesRoa_rup.php b/languages/messages/MessagesRoa_rup.php
deleted file mode 100644 (file)
index d05aa0c..0000000
+++ /dev/null
@@ -1,15 +0,0 @@
-<?php
-/** Aromanian (Armãneashce)
- *
- * ISO 639-3 code 'rup' should be used. This is code is maintained for backward
- * compatilibity.
- *
- * See MessagesQqq.php for message documentation incl. usage of parameters
- * To improve a translation please visit http://translatewiki.net
- *
- * @ingroup Language
- * @file
- *
- */
-
-$fallback = 'rup';
index f11c283..3bec703 100644 (file)
@@ -10,6 +10,7 @@
  * @author Joetaras
  * @author Kaganer
  * @author McDutchie
+ * @author Reder
  */
 
 $specialPageAliases = array(
@@ -74,7 +75,7 @@ $messages = array(
 
 'underline-always' => 'Sembre',
 'underline-never' => 'Maje',
-'underline-default' => "Valore de default d'u browser",
+'underline-default' => "Valore de default d'u browser o scheme",
 
 # Font style option in Special:Preferences
 'editfont-style' => "Stile d'u carattere jndr'à l'area de le cangiaminde:",
@@ -162,6 +163,7 @@ $messages = array(
 'newwindow' => "(iapre jndr'à 'na fenestra nova)",
 'cancel' => 'Scangìlle',
 'moredotdotdot' => 'De cchiù...',
+'morenotlisted' => "Otre non jndr'à l'elenghe...",
 'mypage' => "'A pàgena meje",
 'mytalk' => "'Ngazzaminde mie",
 'anontalk' => "'Ngazzaminde pe quiste IP",
@@ -185,7 +187,7 @@ $messages = array(
 'vector-action-protect' => 'Protegge',
 'vector-action-undelete' => 'Repristine',
 'vector-action-unprotect' => "Cange 'a protezione",
-'vector-simplesearch-preference' => "Abbilete le suggereminde d'a ricerche avanzate (Sulamende pe le scheme a vettore)",
+'vector-simplesearch-preference' => "Abbilite 'a barre de ricerche semblificate (Sulamende pe le scheme a vettore)",
 'vector-view-create' => 'Ccreje',
 'vector-view-edit' => 'Cange',
 'vector-view-history' => "Vide 'u cunde",
@@ -195,6 +197,7 @@ $messages = array(
 'namespaces' => 'Namespace',
 'variants' => 'Variande',
 
+'navigation-heading' => 'Menu de navegazione',
 'errorpagetitle' => 'Errore',
 'returnto' => 'Tuerne a $1.',
 'tagline' => 'Da {{SITENAME}}',
@@ -412,14 +415,14 @@ Query: $2",
 'actionthrottled' => 'Azione inderrotte',
 'actionthrottledtext' => "Cumme 'na mesure andi-spam, tu è state limitete da fà st'azione troppe vote jndr'à 'nu timbe piccinne e tu è subranete stu limite.
 Pe piacere prueve cchiù tarde.",
-'protectedpagetext' => 'Sta pàgene ha state prutette pe no fa fà cangiaminde a uecchje.',
+'protectedpagetext' => 'Sta pàgene ha state prutette pe no fa fà cangiaminde o otre aziune a uecchje.',
 'viewsourcetext' => "Tu puè vedè e cupià 'a sorgente de sta pàgene:",
 'viewyourtext' => "Tu puè vedè e copià 'a sorgende de '''le cangiaminde tune''' a sta pàgene:",
 'protectedinterface' => "Sta pàgene dèje 'nu teste de l'inderfacce pu software de sta uicchi, e jè prutette pe prevenìe l'abbuse.
 Pe aggiungere o cangià le traduziune pe tutte le uicchi, pe piacere ause [//translatewiki.net/ translatewiki.net], 'u proggette de localizzazzione de MediaUicchi.",
-'editinginterface' => "'''Fà attenziò:'''  Tu ste cange 'na pàgene ca jè ausete pe dà 'n'inderfacce de teste p'u software.
-Le cangiaminde de sta pàgene vonne a mettene mane sus a l'inderfacce utende pe l'otre utinde.
-Pe traduziune, pe piacere vide ce ause [//translatewiki.net/wiki/Main_Page?setlang=roa-tara translatewiki.net], 'u pruggette de localizzazione de MediaUicchi.",
+'editinginterface' => "'''Fà attenziò:'''  Tu ste cange 'na pàgene ca jè ausate pe dà 'n'inderfacce de teste p'u software.
+Le cangiaminde de sta pàgene vonne a mettene mane sus a l'inderfacce utende pe l'otre utinde de sta Uicchi.
+Pe aggiungere o cangià le traduziune, pe piacere vide ce ause [//translatewiki.net/ translatewiki.net], 'u pruggette de localizzazione de MediaUicchi.",
 'sqlhidden' => '(query SQL ascunnute)',
 'cascadeprotected' => 'Sta pàgene ha state prutette da le cangiaminde, purcè jè ingluse jndr\'à {{PLURAL:$1|seguende pàgene, ca jè|le seguende pàggene, ca sonde}} prutette cu l\'opzione "a caschete":
 $2',
@@ -447,6 +450,9 @@ L\'amministratore ca l\'ha bloccate dèje sta spiegazione: "$3".',
 
 Tu puè condinuà a ausà {{SITENAME}} in mode anonime, o tu puè <span class='plainlinks'>[$1 collegarte 'n'otra vote]</span> cumme 'u stesse utende o cumme 'n'otre utende.
 Note Bbuene ca certe pàggene ponne condinuà a essere viste cumme ce tu ste angore colleghete, fine a quanne a cache d'u browser no se sdeveche.",
+'welcomeuser' => 'Bovègne, $1!',
+'welcomecreation-msg' => "'U cunde tue ha state ccrejete.
+No te sce scurdanne de cangià le [[Special:Preferences|{{SITENAME}} preferenze tue]].",
 'yourname' => 'Nome utende:',
 'yourpassword' => 'Passuord:',
 'yourpasswordagain' => "Scrive 'a passuord notra vote:",
@@ -469,7 +475,7 @@ Note Bbuene ca certe pàggene ponne condinuà a essere viste cumme ce tu ste ang
 'gotaccount' => "Tine già 'nu cunde? '''$1'''.",
 'gotaccountlink' => 'Tràse',
 'userlogin-resetlink' => "T'è scurdate le dettaglie pe trasè?",
-'createaccountmail' => 'pe e-mail',
+'createaccountmail' => 'Pe e-mail',
 'createaccountreason' => 'Mutive:',
 'badretype' => 'Le passuord ca è scritte non ge sonde uguale.',
 'userexists' => "'U nome de l'utende ca è scritte jè già ausate.
@@ -551,6 +557,7 @@ Pe piacere vide c'aspitte 'nu picche de timbe apprime de pruvà 'n'otra vote.",
 # E-mail sending
 'php-mail-error-unknown' => "Errore scanusciute jndr'à funzione PHP mail()",
 'user-mail-no-addy' => "E' pruvate a mannà 'na mail senze 'u 'ndirizze mail",
+'user-mail-no-body' => "Pruvate a mannà 'na mail cu 'nu cuèrpe vacande o troppe curte.",
 
 # Change password dialog
 'resetpass' => "Cange 'a password",
@@ -610,6 +617,7 @@ Passuord temboranèe: $2',
 'changeemail-oldemail' => 'Indirizze e-mail de mò:',
 'changeemail-newemail' => 'Indirizze e-mail nuève:',
 'changeemail-none' => '(ninde)',
+'changeemail-password' => "'A passuord tue de {{SITENAME}}:",
 'changeemail-submit' => 'Cange e-mail',
 'changeemail-cancel' => 'Annulle',
 
@@ -740,7 +748,7 @@ Arrecuerdete ca jndr'à le file personalizzete .css e .js s'ause scrivere le tit
 'note' => "'''Vide Bbuene:'''",
 'previewnote' => "'''Arrecuerdete queste è sole 'n'andeprime.'''
 le cangiaminde non g'onne state angore reggistrate!",
-'continue-editing' => "Condinue 'u cangiamende",
+'continue-editing' => "Veje jndr'à l'arèe de le cangiaminde",
 'previewconflict' => "Sta andeprime fece vedè 'u teste ca ste jndr'à 'u teste de l'area de sus cumme avène fore ce tu decide cu reggistre.",
 'session_fail_preview' => "'''Ne dispiace! Non ge putime processà 'u cangiamende tue purcè s'a perse 'a sessione de le date.
 Pe piacere pruève 'n'otra vote.
@@ -782,10 +790,10 @@ Tu ne stè promitte ca quidde ca scrive tu, o lè scritte cu 'u penziere tue o l
 '''NO REGGISTRA' FATIJE CUPERTE DA 'U COPYRIGHT SENZA PERMESSE! NO FA STUDECARIE!'''",
 'longpageerror' => "'''ERRORE: 'U teste ca tu vuè ccu reggistre è luenghe {{PLURAL:$1|'nu kilobyte|$1 kilobyte}}, invece 'u limite massime jè de {{PLURAL:$2|'nu kilobyte|$2 kilobyte}}.'''
 Non ge puè reggistrà sta pàggene.",
-'readonlywarning' => "'''FA ATTENZIO': 'U database ha state bloccate pe manutenziona, e allore tu non ge puè reggistrà le cangiaminde ca ste face mò.'''
-Tu puè fa 'na bella cose, tagghie e 'nzicche le cangiaminde jndr'à 'nu file de teste sus a 'u combiuter tue e pò cchiù tarde le reggistre sus 'a Uicchi.
+'readonlywarning' => "'''FA ATTENZIO': 'U database ha state bloccate pe manutenzione, e allore tu non ge puè reggistrà le cangiaminde ca ste face mò.'''
+Tu puè fa 'na bella cose, tagghie e 'nzicche le cangiaminde jndr'à 'nu file de teste sus a 'u combiuter tune e pò cchiù tarde le reggistre sus 'a Uicchi.
 
-L'amministratore ca ha bloccate 'u database ha scritte stu mutive: $1",
+L'amministratore ca ha bloccate 'u database ha date stu mutive: $1",
 'protectedpagewarning' => "'''ATTENZIO': Sta pàgene ha state bloccate e allore sulamende le utinde cu le privilegge de ''sysop'' ponne cangiarle.'''
 L'urteme archivie de le trasute ha state previste aqquà sotte pe referimende:",
 'semiprotectedpagewarning' => "'''Fà attenzione:''' Sta pàgene ha state bloccate accussì sulamende l'utinde reggistrete ponne fà cangiaminde.
@@ -801,7 +809,6 @@ L'urteme archivije de le trasute jè provviste sotte pe referimende:",
 'hiddencategories' => 'Sta pàgene jè membre de {{PLURAL:$1|1 categorja|$1 categorije}} scunnute:',
 'edittools' => "<!-- 'U teste aqquà avène fatte vedè sotte a le module de le cangiaminde e de le carecaminde- -->",
 'edittools-upload' => '-',
-'nocreatetitle' => "Ccreazione d'a pàgene limitete",
 'nocreatetext' => "{{SITENAME}} ha restritte l'abilità de ccrejà pàggene nuéve.
 Tu puè turnà rrete e cangià 'na pàgene ca già esiste, oppure puè [[Special:UserLogin|trasè o ccrejà n'utende nuéve]].",
 'nocreate-loggedin' => 'Non ge tine le permesse pe ccreja pàggene nuève.',
@@ -825,8 +832,12 @@ Pare proprie ca l'onne scangellete.",
 'edit-no-change' => "'U cangiamende ca p fatte, avène scettate purcè 'u teste non g'à cangete manghe de 'na virgola.",
 'edit-already-exists' => "Non ge puè ccrejà 'na pàgene nove purcè esiste già!",
 'defaultmessagetext' => 'Messàgge de teste de base',
+'content-failed-to-parse' => "L'analise d'u condenute $2 pu modelle $1 ha fallite: $3",
+'invalid-content-data' => "Condenute d'u date invalide",
+'content-not-allowed-here' => '"$1" condenute non g\'è permesse sus \'a pàgene [[$2]]',
 
 # Content models
+'content-model-wikitext' => 'Uicchiteste',
 'content-model-text' => 'teste semblice',
 'content-model-javascript' => 'JavaScript',
 'content-model-css' => 'CSS',
@@ -1201,9 +1212,9 @@ Quiste non ge pò essere annullate.",
 'prefs-emailconfirm-label' => "Conferme de l'e-mail:",
 'prefs-textboxsize' => "Dimenzione d'a finestre de le cangiaminde",
 'youremail' => 'Poste:',
-'username' => "Nome de l'utende:",
-'uid' => 'ID Utende:',
-'prefs-memberingroups' => "Membre {{PLURAL:$1|d'u gruppe|de le gruppe}}:",
+'username' => "{{GENDER:$1|Nome de l'utende}}:",
+'uid' => '{{GENDER:$1|ID Utende}}:',
+'prefs-memberingroups' => "{{GENDER:$2|Membre}} {{PLURAL:$1|d'u gruppe|de le gruppe}}:",
 'prefs-memberingroups-type' => '$1',
 'prefs-registration' => 'Orarie de reggistrazzione:',
 'prefs-registration-date-time' => '$1',
@@ -1356,12 +1367,13 @@ Ce tu 'u mitte, a fatje ca è fatte t'avène ricanusciute.",
 'right-sendemail' => "Manne 'a mail a otre utinde",
 'right-passwordreset' => "Vide l'e-mail de azzeramende d'a passuord",
 
+# Special:Log/newusers
+'newuserlogpage' => 'Archivije de ccreazione de le utinde',
+'newuserlogpagetext' => "Quiste ète l'archivije de le creazziune de l'utinde.",
+
 # User rights log
 'rightslog' => "Archivie de le diritte de l'utende",
 'rightslogtext' => "Quiste jè 'n'archivije pe le cangiaminde de le deritte de l'utinde.",
-'rightslogentry' => "membre d'u gruppe cangete pe $1 da $2 a $3",
-'rightslogentry-autopromote' => 'ha state promosse automaticamende da $2 a $3',
-'rightsnone' => '(ninde)',
 
 # Associated actions - in the sentence "You do not have permission to X"
 'action-read' => 'ligge sta pàgene',
@@ -1611,6 +1623,7 @@ Ce 'u probbleme angore jè presende, condatte 'n'[[Special:ListUsers/sysop|ammin
 'backend-fail-notsame' => "'Nu file non-indendiche esiste già cumme $1.",
 'backend-fail-invalidpath' => "$1 non g'è 'nu percorse de memorizzazzione valide.",
 'backend-fail-delete' => 'Non ge pozze scangellà \'u file "$1".',
+'backend-fail-describe' => 'Non ge pozze cangià le metadata pu file "$1".',
 'backend-fail-alreadyexists' => "'U file $1 già esiste.",
 'backend-fail-store' => "Non ge pozze reggistrà 'u file $1 sus a $2.",
 'backend-fail-copy' => "Non ge pozze cupià 'u file $1 jndr'à $2.",
@@ -2004,8 +2017,8 @@ Vide pure [[Special:WantedCategories|Categorije cercate]].",
 'linksearch-ns' => 'Neimspeise:',
 'linksearch-ok' => 'Cirche',
 'linksearch-text' => 'Le wildcard cumme a "*.wikipedia.org" ponne essere ausate.<br />
-Onne abbesogne almede de \'nu dominie de levèlle ierte, pe esembie "*.org". <br />
-Protocolle supportate: <code>$1</code> (no sce aggiungenne nisciune de chiste jndr\'à recerca toje).',
+Onne abbesogne almene de \'nu dominie de levèlle ierte, pe esembie "*.org". <br />
+{{PLURAL:$2|Protocolle}} supportate: <code>$1</code> (\'u valore de base jè http:// ce \'u protocolle non g\'è specificate).',
 'linksearch-line' => '$1 jè pundete da $2',
 'linksearch-error' => "Le wildcard ponne essere ausate sulamende a l'inzie de l'hostname.",
 
@@ -2018,16 +2031,12 @@ Protocolle supportate: <code>$1</code> (no sce aggiungenne nisciune de chiste jn
 # Special:ActiveUsers
 'activeusers' => "Liste de l'utinde attive",
 'activeusers-intro' => "Queste jè 'n'elenghe de utinde ca avene fatte certe tipe de attività fine a l'urteme $1 {{PLURAL:$1|sciurne|sciurne}}.",
-'activeusers-count' => "$1 {{PLURAL:$1|cangiamende|cangiaminde}} jndr'à l'urteme {{PLURAL:$3|sciurne|$3 sciurne}}",
+'activeusers-count' => "$1 {{PLURAL:$1|cangiamende|cangiaminde}} jndr'à l'urteme {{PLURAL:$3|sciurne}}",
 'activeusers-from' => "Fà vedè l'utinde partenne da:",
 'activeusers-hidebots' => 'Scunne le bot',
 'activeusers-hidesysops' => 'Scunne le amministrature',
 'activeusers-noresult' => 'Nisciune utende acchiate.',
 
-# Special:Log/newusers
-'newuserlogpage' => 'Archivije de ccreazione de le utinde',
-'newuserlogpagetext' => "Quiste ète l'archivije de le creazziune de l'utinde.",
-
 # Special:ListGroupRights
 'listgrouprights' => 'Deritte de le gruppe utinde',
 'listgrouprights-summary' => "'A liste ca ste vide ète 'na liste de le gruppe utinde ccreiate sus a sta Uicchi, cu le lore deritte d'accesse associate.
@@ -2056,8 +2065,8 @@ Ponne stà [[{{MediaWiki:Listgrouprights-helppage}}|'mbormaziune de cchiù]] sus
 'emailuser-title-target' => "Manne n'email a quiste {{GENDER:$1|utende}}",
 'emailuser-title-notarget' => "E-mail de l'utende",
 'emailpage' => "E-mail de l'utende",
-'emailpagetext' => "Tu puè ausà 'a schermate aqquà sotte pe mannà 'n'email a stu utende.
-L'indirizze e-mail ca tu è 'nzerite jndr'à le [[Special:Preferences|preferenze tue]] iesse jndr'à 'u cambe \"Da\" de l'e-mail, accussìa ce riceve 'a mail sape a ce addà responnere.",
+'emailpagetext' => "Tu puè ausà 'a schermate aqquà sotte pe mannà 'n'email a stu {{GENDER:\$1|utende}}.
+L'indirizze e-mail ca tu è 'nzerite jndr'à le [[Special:Preferences|preferenze tune]] iesse jndr'à 'u cambe \"Da\" de l'e-mail, accussì ce riceve 'a mail sape a ce addà responnere.",
 'usermailererror' => "L'oggette ''Mail'' ha returnete 'n'errore:",
 'defemailsubject' => 'e-mail de {{SITENAME}} da l\'utende "$1"',
 'usermaildisabled' => "L'e-mail de l'utende è disabbilitate",
@@ -2088,7 +2097,7 @@ L'indirizze e-mail ca tu è 'nzerite jndr'à le [[Special:Preferences|preferenze
 'usermessage-template' => 'MediaWiki:UserMessage',
 
 # Watchlist
-'watchlist' => 'Pàggene condrollete',
+'watchlist' => 'Pàggene condrollate',
 'mywatchlist' => 'Pàggene condrollate',
 'watchlistfor2' => 'Pe $1 $2',
 'nowatchlist' => "Non ge tine pàggene jndr'à liste de le pàggene condrollete.",
@@ -2096,8 +2105,8 @@ L'indirizze e-mail ca tu è 'nzerite jndr'à le [[Special:Preferences|preferenze
 'watchnologin' => 'Non ge sinde colleghete',
 'watchnologintext' => 'Tu a essere [[Special:UserLogin|colleghete]] pe cangià le pàggene condrollete tue.',
 'addwatch' => "Mitte jndr'à le pàggene condrollate",
-'addedwatchtext' => "'A pàgene \"[[:\$1]]\" ha state aggiunde jndr'à le [[Special:Watchlist|pàggene condrollete]].
-Le cangiaminde future a sta pàgene e 'a pàgene de le 'ngazzaminde associete le puè acchià aqquà, e 'a pàgene avène signete cu 'u '''grascette''' jndr'à [[Special:RecentChanges|liste de le cangiaminde recende]] pe facilità l'identificazione.",
+'addedwatchtext' => "'A pàgene \"[[:\$1]]\" ha state aggiunde jndr'à le [[Special:Watchlist|pàggene condrollate]].
+Le cangiaminde future a sta pàgene e 'a pàgene de le 'ngazzaminde associete le puè acchià aqquà.",
 'removewatch' => 'Live da le pàggene condrollate',
 'removedwatchtext' => '\'A pàgene "[[:$1]]" ha state scangillete da [[Special:Watchlist|le pàggene condrollete tue]].',
 'watch' => 'Condrolle',
@@ -2126,39 +2135,48 @@ Le cangiaminde future a sta pàgene e 'a pàgene de le 'ngazzaminde associete le
 'enotif_mailer' => '{{SITENAME}} Notificatore de email',
 'enotif_reset' => 'Signe tutte le pàggene cumme visitete',
 'enotif_impersonal_salutation' => 'Utende de {{SITENAME}}',
+'enotif_subject_deleted' => "'A pàgene $1 de {{SITENAME}} ha state scangellate da {{gender:$2|$2}}",
+'enotif_subject_created' => "'A pàgene $1 de {{SITENAME}} ha state crejete da {{gender:$2|$2}}",
+'enotif_subject_moved' => "'A pàgene $1 de {{SITENAME}} ha state spustate da {{gender:$2|$2}}",
+'enotif_subject_restored' => "'A pàgene $1 de {{SITENAME}} ha state repristenate da {{gender:$2|$2}}",
+'enotif_subject_changed' => "'A pàgene $1 de {{SITENAME}} ha state cangiate da {{gender:$2|$2}}",
+'enotif_body_intro_deleted' => '\'A pàgene $1 de {{SITENAME}} ha state scangellate suse a $PAGEEDITDATE da {{gender:$2|$2}}, vide $3.',
+'enotif_body_intro_created' => '\'A pàgene $1 de {{SITENAME}} ha state crejete suse a $PAGEEDITDATE da {{gender:$2|$2}}, vide $3 p\'a revisione corrende.',
+'enotif_body_intro_moved' => '\'A pàgene $1 de {{SITENAME}} ha state spustate suse a $PAGEEDITDATE da {{gender:$2|$2}}, vide $3 p\'a revisione corrende.',
+'enotif_body_intro_restored' => '\'A pàgene $1 de {{SITENAME}} ha state repristenate suse a $PAGEEDITDATE da {{gender:$2|$2}}, vide $3 p\'a revisione corrende.',
+'enotif_body_intro_changed' => '\'A pàgene $1 de {{SITENAME}} ha state cangiate suse a $PAGEEDITDATE da {{gender:$2|$2}}, vide $3 p\'a revisione corrende.',
 'enotif_lastvisited' => "Vide $1 pe tutte le cangiaminde da l'urtema visita toje.",
 'enotif_lastdiff' => 'Vide $1 pe vedè stu cangiamende.',
 'enotif_anon_editor' => 'Utende anonime $1',
-'enotif_body' => 'Care $WATCHINGUSERNAME,
+'enotif_body' => "Care \$WATCHINGUSERNAME,
 
+\$PAGEINTRO \$NEWPAGE
 
-\'A pàgene $PAGETITLE de {{SITENAME}} ha state $CHANGEDORCREATED \'u $PAGEEDITDATE da $PAGEEDITOR, vide $PAGETITLE_URL pa revisione corrende.
+Riepileghe de le cangiaminde: \$PAGESUMMARY \$PAGEMINOREDIT
 
-$NEWPAGE
+Condatte l'editore:
+mail: \$PAGEEDITOR_EMAIL
+uicchi: \$PAGEEDITOR_WIKI
 
-Riepileghe de le cangiaminde: $PAGESUMMARY $PAGEMINOREDIT
+Non ge stonne otre notifiche ce tu face otre attivitate senze ca tu visite sta pàgene.
+Tu puè pure azzerà 'a spunde de le notifiche pe tutte le pàggene condrollate jndr'à lista toje.
 
-Condatte l\'editore:
-mail: $PAGEEDITOR_EMAIL
-uicchi: $PAGEEDITOR_WIKI
-
-Non ge stonne otre notifiche ce tu face otre cangiaminde senza ca tu visite sta pàgene.
-Tu puè pure azzerà \'a spunde de le notifiche pe tutte le pàggene condrollate jndr\'à lista toje.
-
-             Statte Bbuene, \'u sisteme de notificaziune de {{SITENAME}}
+             Statte Bbuene, 'u sisteme de notificaziune de {{SITENAME}}
 
 --
-Pe cangià le \'mbostaziune de notifeche de l\'email toje, vè vide
+Pe cangià le 'mbostaziune de notifeche de l'email toje, vè vide
 {{canonicalurl:{{#special:Preferences}}}}
 
-Pe cangià le \'mbostaziune de l\'elenghe de le pàggene condrollate tune, vè vide
+Pe cangià le 'mbostaziune de l'elenghe de le pàggene condrollate tune, vè vide
 {{canonicalurl:{{#special:EditWatchlist}}}}
 
-Pe scangellà \'a pàgene da \'a liste de le pàggene condrollate, vè vide
-$UNWATCHURL
+Pe scangellà 'a pàgene da 'a liste de le pàggene condrollate, vè vide
+\$UNWATCHURL
 
 Segnalaziune e otre assistenze:
-{{canonicalurl:{{MediaWiki:Helppage}}}}',
+{{canonicalurl:{{MediaWiki:Helppage}}}}",
+'created' => 'ccrejete',
+'changed' => 'cangete',
 
 # Delete
 'deletepage' => "Scangille 'a pàgene",
@@ -2232,6 +2250,8 @@ Vide 'a [[Special:ProtectedPages|liste de le pàggene prutette]] pa liste de le
 'prot_1movedto2' => "[[$1]] spustete jndr'à [[$2]]",
 'protect-badnamespace-title' => 'Namespace none proteggibbele',
 'protect-badnamespace-text' => "Le pàggene jndr'à stu namespace non ge ponne essere prutette.",
+'protect-norestrictiontypes-text' => 'Sta pàggene non ge pò essere protette purcé non ge stonne tipe de restriziune disponibbile.',
+'protect-norestrictiontypes-title' => 'Pàgene non proteggibbele',
 'protect-legend' => "Conferme 'a protezione",
 'protectcomment' => 'Mutive:',
 'protectexpiry' => 'More:',
@@ -2248,9 +2268,9 @@ Chiste sonde le configuraziune corrende p'a pàgene '''$1''':",
 'protect-cascadeon' => "Sta pàgene mò jè  prutette purcè jè ingluse jndr'à {{PLURAL:$1|'a seguende pàgene, ca tène|le seguende pàggene, ca tènene}} a protezione a cascata appizzechete.
 Tu puè cangià 'u levèlle de protezione de sta pàgene ma stu cangiamende non ge tène effette a cascata.",
 'protect-default' => "Permitte a tutte l'utinde",
-'protect-fallback' => 'Richieste \'u permesse "$1"',
-'protect-level-autoconfirmed' => "Blocche l'utinde nuève e chidde non reggistrete",
-'protect-level-sysop' => 'Sulamende pe le Sysops',
+'protect-fallback' => 'Richieste d\'u permesse "$1"',
+'protect-level-autoconfirmed' => "Blocche l'utinde nuève e chidde non reggistrate",
+'protect-level-sysop' => 'Sulamende pe le Amministrature',
 'protect-summary-cascade' => 'a caschete',
 'protect-expiring' => "more 'u $1 (UTC)",
 'protect-expiring-local' => "scade 'u $1",
@@ -2554,18 +2574,18 @@ Pe bloccà o sbloccà 'u database quiste abbesogne de essere scritte da 'nu web
 # Move page
 'move-page' => 'Spuèste $1',
 'move-page-legend' => "Spuèste 'a pàgene",
-'movepagetext' => "Ausanne 'u form aqquà sotte ste cange 'u nome d'a pàgene, spustanne tutte a storia soje sus a 'u nome néve.
-U' vecchie titele devènde 'nu ridirezionamende sus 'a pàgena nove.
-Tu puè aggiornà 'u ridirezionamende ca apponde da 'u titele automaticamende.
-Ce tu no fece ninde condrolle ca non ccreje [[Special:DoubleRedirects|doppie ridirezionaminde ]] o [[Special:BrokenRedirects|ridirezionaminde scuasciete]].
-Tu si 'u responsabbile de quidde ca cumbine, allore me raccomande fa attenzione.
+'movepagetext' => "Ausanne 'u form aqquà sotte ste cange 'u nome d'a pàgene, spustanne tutte 'a storia soje sus a 'u nome nuéve.
+U' vecchie titole devènde 'nu ridirezionamende sus 'a pàgena nove.
+Tu puè aggiornà 'u ridirezionamende ca apponde a 'u titole origgenale automaticamende.
+Ce tu no ste scacchie, sta secure de condrollà [[Special:DoubleRedirects|doppie ridirezionaminde]] o [[Special:BrokenRedirects|ridirezionaminde scuasciate]].
+Tu si 'u responsabbile de quidde ca cumbine, assicurate ca 'u collegamende condinue a appondà addò avessa scè.
 
-Vide Bbuene ca 'a pàgene non g'avene spustete ce esiste n'otra pàgene cu 'u titele nuéve, a mene ca jè vacande o jè 'na pàgene de ridirezionamende senza storie.
-Quieste significhe ca tu puè fà turnà 'u vecchie nome 'a pàgene ce jedde ha state renomenete e t'è rese conde ca è fatte 'na studecarije sovrascrevènne 'na pàgene esistende.
+Vide Bbuene ca 'a pàgene '''non''' g'avene spustate ce esiste n'otra pàgene cu 'u titole nuéve, a mene ca jè vacande o jè 'na pàgene de ridirezionamende senza storie.
+Quieste significhe ca tu puè fà turnà 'u vecchie nome 'a pàgene ce jedde ha state renomenate e t'è rese conde ca è fatte 'na studecarije sovrascrevènne 'na pàgene esistende.
 
 '''ATTENZIONE!'''
-Quiste pò essere 'nu cangiamende drastiche e inaspettete de 'na pàgene famose assaje;
-pe piacere a essere secure-secure de le conseguenze prime de procedere.",
+Quiste pò essere 'nu cangiamende drastiche e inaspettate de 'na pàgene famose assaje;
+pe piacere a essere secure-secure de le conseguenze apprime de condinuà.",
 'movepagetext-noredirectfixer' => "Ausanne 'u module aqquà sotte puè renomenà 'na pàgene, spustanne tutte 'a storia soje sotte a 'u nome nuève.
 'U titele vecchie addevende 'na pàgene de ridirezionamende a 'u titele nuève.
 Me raccomande condrolle le redirezionaminde [[Special:DoubleRedirects|a doppie]] o [[Special:BrokenRedirects|scuasciate]].
@@ -2631,6 +2651,7 @@ non ge se pò movere 'na pàgene sus a sè stesse.",
 'immobile-target-namespace-iw' => "'U collegamende InderUicchi non ge tène 'na destinaziona valide purcè 'a pàgene ha state spustate.",
 'immobile-source-page' => 'Sta pàgene non ge se pò spustà.',
 'immobile-target-page' => 'Non ge puè spustà sus a stu titele de destinazione.',
+'bad-target-model' => "'A destinazione desiderate ause 'nu modelle de le condenute diverse. Non ge se pò convertì da $1 a $2.",
 'imagenocrossnamespace' => "Non ge pozze spustà 'nu file jndr'à 'nu namespace senza file",
 'nonfile-cannot-move-to-file' => "Non ge pozze spustà 'nu file jndr'à 'nu namespace senza file",
 'imagetypemismatch' => "L'estenziona nove d'u file non ge se accocchie cu 'u tipe sue",
@@ -2746,6 +2767,7 @@ Reggistrele sus a 'u combiuter tune e carechele aqquà.",
 'import-error-interwiki' => 'Pagene "$1" non g\'ha state \'mbortate purcé \'u nome sue jè riservate pe collegaminde esterne (interuicchi).',
 'import-error-special' => "'A pagena \"\$1\" non g'ha state 'mbortate purcé apponde a 'nu namespace speciale ca non g'è permesse a le pàggene normale.",
 'import-error-invalid' => "'A pàgene \"\$1\" non g'ha state 'mbortate purcé 'u nome jè invalide.",
+'import-error-unserialize' => '\'A revisione $2 d\'a pàgene "$1" non ge pò essere deserializzate. \'A revisione ha state reportate pe ausà \'u modelle d\'u condenute $3 serializzate cumme $4.',
 'import-options-wrong' => '{{PLURAL:$2|opzione|opziune}} sbagliate: <nowiki>$1</nowiki>',
 'import-rootpage-invalid' => "'A pàgene radice date tène 'nu titole invalide.",
 'import-rootpage-nosubpage' => 'Namespace "$1" d\'a pàgene prengepàle non ge permette le sottopàggene.',
@@ -2901,6 +2923,7 @@ Stu fatte ha state causate da 'nu collegamende a 'nu site esterne ca appartene a
 
 # Info page
 'pageinfo-title' => '\'Mbormaziune pe "$1"',
+'pageinfo-not-current' => "Ne despiace, non g'è possibbile pigghià sta 'mbormazione pe le versiune vecchie.",
 'pageinfo-header-basic' => "'Mbormaziune 'nderra-'nderre",
 'pageinfo-header-edits' => 'Cunde de le cangiaminde',
 'pageinfo-header-restrictions' => "Protezione d'a pàgene",
@@ -2909,6 +2932,7 @@ Stu fatte ha state causate da 'nu collegamende a 'nu site esterne ca appartene a
 'pageinfo-default-sort' => 'Chiave de ordenamende de base',
 'pageinfo-length' => "Lunghezze d'a pàgene (in byte)",
 'pageinfo-article-id' => "ID d'a pàgene",
+'pageinfo-language' => "Lènga d'a pàgene de condenute",
 'pageinfo-robot-policy' => "State d'u motore de ricerche",
 'pageinfo-robot-index' => 'Indicizzabbele',
 'pageinfo-robot-noindex' => 'None indicizzabbele',
@@ -2929,8 +2953,19 @@ Stu fatte ha state causate da 'nu collegamende a 'nu site esterne ca appartene a
 'pageinfo-magic-words' => '{{PLURAL:$1|Parole|Parole}} maggiche ($1)',
 'pageinfo-hidden-categories' => '{{PLURAL:$1|Categorije|Categorije}} scunnute ($1)',
 'pageinfo-templates' => 'Esclude {{PLURAL:$1|template|template}} ($1)',
+'pageinfo-transclusions' => '{{PLURAL:$1|Pàgene|Pàggene}} escluse sus a ($1)',
+'pageinfo-toolboxlink' => "'Mbormaziune d'a pagene",
+'pageinfo-redirectsto' => 'Reinderizze a',
+'pageinfo-redirectsto-info' => "'Mbormazione",
+'pageinfo-contentpage' => "Cundate cumme 'na vôsce",
 'pageinfo-contentpage-yes' => 'Sine',
+'pageinfo-protect-cascading' => 'Protezziune vonne a cascate da aqquà',
 'pageinfo-protect-cascading-yes' => 'Sine',
+'pageinfo-protect-cascading-from' => 'Le protezziune sò a cascate da',
+'pageinfo-category-info' => "'Mbormaziune sus a 'a categorije",
+'pageinfo-category-pages' => 'Numere de pàggene',
+'pageinfo-category-subcats' => 'Numere de sottocategorije',
+'pageinfo-category-files' => 'Numere de file',
 
 # Skin names
 'skinname-standard' => 'Classeche',
@@ -2953,6 +2988,8 @@ Stu fatte ha state causate da 'nu collegamende a 'nu site esterne ca appartene a
 'markedaspatrollederror' => 'Non ge se pò signà cumme condrollate',
 'markedaspatrollederrortext' => "Tu è abbesogne de specificà 'na revisione da signà cumme condrollate.",
 'markedaspatrollederror-noautopatrol' => 'Tu non ge puè signà le cangiaminde tue cumme condrollate.',
+'markedaspatrollednotify' => 'Stu cangiamende a $1 ha state signate cumme condrollate.',
+'markedaspatrollederrornotify' => 'Signate cumme condrollate fallite.',
 
 # Patrol log
 'patrol-log-page' => 'Archivije de le condrolle',
@@ -2987,6 +3024,7 @@ Ce l'esegue sus a 'u sisteme tue pò essere ca se combromette.",
 'file-nohires' => "Manghe 'a risoluzione ierta.",
 'svg-long-desc' => "Fail SVG, nominalmende sonde $1 × $2 pixel, dimenzione d'u fail: $3",
 'svg-long-desc-animated' => "File SVG animate, nominalmende sonde $1 × $2 pixel, dimenzione d'u file: $3",
+'svg-long-error' => 'File SVG invalide: $1',
 'show-big-image' => 'Risoluzione chiena chiena',
 'show-big-image-preview' => 'Dimenziune de sta andeprime: $1.',
 'show-big-image-other' => 'Otre {{PLURAL:$2|resoluzione|resoluziune}}: $1.',
@@ -3021,7 +3059,10 @@ Ce l'esegue sus a 'u sisteme tue pò essere ca se combromette.",
 'minutes' => '{{PLURAL:$1|$1 minute|$1 minute}}',
 'hours' => '{{PLURAL: $1|$1ore|$1 ore}}',
 'days' => '{{PLURAL: $1|$1 sciurne|$1 sciurne}}',
+'months' => '{{PLURAL:$1|$1 mese|$1 mise}}',
+'years' => '{{PLURAL:$1|$1 anne}}',
 'ago' => '$1 fà',
+'just-now' => 'mò mò',
 
 # Bad image list
 'bad_image_list' => "'U formete jè 'u seguende:
@@ -3616,6 +3657,7 @@ Stu codece de conferme scade 'u \$4.",
 # Scary transclusion
 'scarytranscludedisabled' => "[Collegaminde 'mbrà InterUicchi disabbilitate]",
 'scarytranscludefailed' => "[L'analisi d'u template ha fallite pe $1]",
+'scarytranscludefailed-httpstatus' => "[Analise d'u template fallite pe $1: HTTP $2]",
 'scarytranscludetoolong' => '[URL jè troppe longhe]',
 
 # Delete conflict
@@ -3823,6 +3865,7 @@ Tu puè pure [[Special:EditWatchlist|ausà 'u cangiatore standàrd]].",
 'version-license' => 'Licenze',
 'version-poweredby-credits' => "Sta Uicchi jè fatte da '''[//www.mediawiki.org/ MediaWiki]''', copyright © 2001-$1 $2.",
 'version-poweredby-others' => 'otre',
+'version-credits-summary' => 'Nuje vulesseme acchià le persone seguende pe le lore condrebbute a [[Special:Version|MediaUicchi]].',
 'version-license-info' => "MediaUicchi jè 'nu softuare libbere, tu 'u puè redestribbuì  e/o cangiarle sotte le termine d'a GNU (Licenze Pubbleche Generale) cumme pubblecate da 'a Free Software Foundation; endrambe le versiune 2 d'a Licenze, o (a scelta toje) 'le versiune cchiù nnove.
 
 Mediauicchi jè destribbuite cu 'a speranze ca jè utile, ma SENZE NISCIUNA GARANZIE; senze nemmanghe 'a garanzie imblicite de COMMERCIABBELETÀ o IDONIETÀ PE 'NU SCOPE PARTICOLARE. Vatte a vide 'a GNU (Licenze Pubbleche Generale) pe cchiù 'mbormaziune.
@@ -3868,7 +3911,7 @@ Le immaggine sonde fatte vedè jndr'à resoluziona megghie, otre tipe de file re
 'specialpages-group-highuse' => 'Pàggene ausete assaje proprie',
 'specialpages-group-pages' => 'Liste de le pàggene',
 'specialpages-group-pagetools' => 'Pàgene de le struminde',
-'specialpages-group-wiki' => 'Date e struminde de Uicchi',
+'specialpages-group-wiki' => 'Date e struminde',
 'specialpages-group-redirects' => 'Redirezionaminde de le pàggene speciele',
 'specialpages-group-spam' => "Struminde p'u spam",
 
@@ -3964,9 +4007,13 @@ Le immaggine sonde fatte vedè jndr'à resoluziona megghie, otre tipe de file re
 'logentry-patrol-patrol-auto' => '$1 automaticamende revisione marcate $4 de pàgene condrollate $3',
 'logentry-newusers-newusers' => "'U cunde utende $1 ha state ccrejate",
 'logentry-newusers-create' => "'U cunde utende $1 ha state ccrejate",
-'logentry-newusers-create2' => "$1 ccrejate 'nu cunde utende $3",
+'logentry-newusers-create2' => "$1 {{GENDER:$2|ccrejate}} {{GENDER:$4|'nu cunde utende}} $3",
+'logentry-newusers-byemail' => "'U cunde utende $3 ha state ccrejate da $1 e 'a passuord ha state mannate pe e-mail",
 'logentry-newusers-autocreate' => "'U cunde utende $1 ha state ccrejate automaticamende",
-'newuserlog-byemail' => 'password mannete pe e-mail',
+'logentry-rights-rights' => "$1 membre d'u gruppe cangiate pe $3 da $4 a $5",
+'logentry-rights-rights-legacy' => "$1 ave cangiate 'u membre d'u gruppe pe $3",
+'logentry-rights-autopromote' => '$1 ha state promosse automaticamende da $4 a $5',
+'rightsnone' => '(ninde)',
 
 # Feedback
 'feedback-bugornote' => "Ce tu si pronde a descrivere 'nu probbleme tecniche cu le dettaglie pe piacere [\$1 manne 'nu bug].
@@ -4020,6 +4067,7 @@ Ce nò, tu puè ausà 'u module facile aqquà sotte. 'U commende tune avène agg
 'api-error-ok-but-empty' => "Errore inderne: Nisciune resposte da 'u server.",
 'api-error-overwrite' => "'A sovrascritture de 'nu file ca esiste non ge se pò fà.",
 'api-error-stashfailed' => "Errore inderne: 'U server ha fallite 'a reggistrazione de le file temboranèe.",
+'api-error-publishfailed' => "Errore inderne: 'U server ha fallite 'a pubblecazione d'u file temboranèe.",
 'api-error-timeout' => "'U server non g'ave resposte jndr'à 'u tiembe ca 'u spettave.",
 'api-error-unclassified' => "'N'errore scanusciute s'a verificate",
 'api-error-unknown-code' => 'Errore scanusciute: "$1"',
index 03d4d70..3c96260 100644 (file)
  * @author Anonim.one
  * @author Askarmuk
  * @author Assele
+ * @author Biathlon
  * @author Bouron
  * @author Chilin
  * @author Claymore
  * @author Comp1089
+ * @author Cryptocoryne
  * @author DCamer
  * @author Daniyar
  * @author Dim Grits
@@ -518,9 +520,9 @@ $messages = array(
 'category-empty' => "''Эта категория в данный момент пуста.''",
 'hidden-categories' => '{{PLURAL:$1|Скрытая категория|Скрытые категории}}',
 'hidden-category-category' => 'Скрытые категории',
-'category-subcat-count' => '{{PLURAL:$2|Эта категория содержит только следующую подкатегорию.|{{PLURAL:$1|Показана $1 подкатегория|Показано $1 подкатегории|Показано $1 подкатегорий}} из $2 {{PLURAL:$2|имеющейся|имеющихся}}.}}',
+'category-subcat-count' => '{{PLURAL:$2|Эта категория содержит только следующую подкатегорию.|Эта категория содержит $1 {{PLURAL:$1|подкатегорию|подкатегории}} из $2 всего.}}',
 'category-subcat-count-limited' => 'В этой категории {{PLURAL:$1|$1 подкатегория|$1 подкатегории|$1 подкатегорий}}.',
-'category-article-count' => '{{PLURAL:$2|Эта категория содержит только одну страницу.|{{PLURAL:$1|Показана $1 страница|Показано $1 страницы|Показано $1 страниц}} из $2 {{PLURAL:$2|имеющейся|имеющихся}}.}}',
+'category-article-count' => '{{PLURAL:$2|Эта категория содержит только одну страницу.|{{PLURAL:$1|Показана $1 страница|Показано $1 страницы|Показано $1 страниц}} из $2.}}',
 'category-article-count-limited' => 'В этой категории {{PLURAL:$1|$1 страница|$1 страницы|$1 страниц}}.',
 'category-file-count' => '{{PLURAL:$2|Эта категория содержит только один файл.|В этой категории {{PLURAL:$1|показан $1 файл|показано $1 файла|показано $1 файлов}} из $2 {{PLURAL:$2|имеющейся|имеющихся}}.}}',
 'category-file-count-limited' => 'В этой категории {{PLURAL:$1|$1 файл|$1 файла|$1 файлов}}.',
@@ -534,6 +536,7 @@ $messages = array(
 'newwindow' => '(в новом окне)',
 'cancel' => 'Отменить',
 'moredotdotdot' => 'Далее…',
+'morenotlisted' => 'Больше ничего нету...',
 'mypage' => 'Страница',
 'mytalk' => 'Обсуждение',
 'anontalk' => 'Обсуждение для этого IP-адреса',
@@ -577,7 +580,7 @@ $messages = array(
 'go' => 'Перейти',
 'searcharticle' => 'Перейти',
 'history' => 'История',
-'history_short' => 'история',
+'history_short' => 'Ð\98стория',
 'updatedmarker' => 'обновлено после моего последнего посещения',
 'printableversion' => 'Версия для печати',
 'permalink' => 'Постоянная ссылка',
@@ -910,7 +913,8 @@ $2',
 
 # E-mail sending
 'php-mail-error-unknown' => 'Неизвестная ошибка в PHP-функции mail()',
-'user-mail-no-addy' => 'Попытался отправить электронное письмо без адреса электронной почты',
+'user-mail-no-addy' => 'Пытался отправить электронное письмо без адреса электронной почты',
+'user-mail-no-body' => 'Пытался отправить электронное письмо с пустым или бессмысленно коротким содержанием.',
 
 # Change password dialog
 'resetpass' => 'Изменение пароля',
@@ -978,6 +982,7 @@ $2
 'changeemail-oldemail' => 'Текущий адрес электронной почты:',
 'changeemail-newemail' => 'Новый адрес электронной почты:',
 'changeemail-none' => '(нет)',
+'changeemail-password' => 'Ваш пароль для проекта «{{SITENAME}}»:',
 'changeemail-submit' => 'Изменить адрес',
 'changeemail-cancel' => 'Отмена',
 
@@ -1144,7 +1149,7 @@ $2
 '''НЕ РАЗМЕЩАЙТЕ БЕЗ РАЗРЕШЕНИЯ ОХРАНЯЕМЫЕ АВТОРСКИМ ПРАВОМ МАТЕРИАЛЫ!'''",
 'longpageerror' => "'''ОШИБКА: записываемый вами текст имеет размер {{PLURAL:$1|$1 килобайт|$1 килобайта|$1 килобайт}}, что больше, чем установленный предел в {{PLURAL:$2|$2 килобайт|$2 килобайта|$2 килобайт}}. Страница не может быть сохранена.'''",
 'readonlywarning' => "'''Предупреждение. База данных заблокирована в связи с процедурами обслуживания, поэтому вы не можете записать ваши изменения прямо сейчас.'''
\92озможно, Ð²Ð°Ð¼ Ñ\81ледÑ\83еÑ\82 Ñ\81оÑ\85Ñ\80аниÑ\82Ñ\8c Ñ\82екÑ\81Ñ\82 Ð² Ñ\84айл, Ñ\87Ñ\82обÑ\8b Ð²Ð¾Ñ\81полÑ\8cзоваÑ\82Ñ\8cÑ\81Ñ\8f Ñ\8dÑ\82им Ñ\82екÑ\81Ñ\82ом Ð¿Ð¾Ð·Ð¶е.
\92озможно, Ð²Ð°Ð¼ Ñ\81ледÑ\83еÑ\82 Ñ\81копиÑ\80оваÑ\82Ñ\8c Ñ\8dÑ\82оÑ\82 Ñ\82екÑ\81Ñ\82 Ð² Ñ\82екÑ\81Ñ\82овÑ\8bй Ñ\84айл, Ñ\87Ñ\82обÑ\8b Ñ\81оÑ\85Ñ\80аниÑ\82Ñ\8c ÐµÐ³Ð¾ Ð½Ð° Ð±Ñ\83дÑ\83Ñ\89ее.
 
 Администратор, заблокировавший базу данных, оставил следующее объяснение: $1",
 'protectedpagewarning' => "'''Предупреждение. Эта страница защищена от изменений, её могут редактировать только участники с полномочиями администраторов.'''
@@ -1161,7 +1166,6 @@ $2
 'template-semiprotected' => '(частично защищено)',
 'hiddencategories' => 'Эта страница относится к $1 {{PLURAL:$1|скрытой категории|скрытым категориям}}:',
 'edittools' => '<!-- Расположенный здесь текст будет показываться под формой редактирования и формой загрузки. -->',
-'nocreatetitle' => 'Создание страниц ограничено',
 'nocreatetext' => 'На этом сайте ограничена возможность создания новых страниц.
 Вы можете вернуться назад и отредактировать существующую страницу, [[Special:UserLogin|представиться системе или создать новую учётную запись]].',
 'nocreate-loggedin' => 'У вас нет разрешения создавать новые страницы.',
@@ -1658,7 +1662,7 @@ $1",
 'right-move-subpages' => 'переименование страниц с их подстраницами',
 'right-move-rootuserpages' => 'переименование корневых страниц участников',
 'right-movefile' => 'переименование файлов',
-'right-suppressredirect' => 'не создаётся перенаправление со старого имени при переименовании страницы',
+'right-suppressredirect' => 'не создавать перенаправление со старого имени при переименовании страницы',
 'right-upload' => 'загрузка файлов',
 'right-reupload' => 'запись файлов поверх существующих',
 'right-reupload-own' => 'перезапись файлов тем же участником',
@@ -1685,14 +1689,14 @@ $1",
 'right-hideuser' => 'запрет имени участника и его сокрытие',
 'right-ipblock-exempt' => 'обход блокировок по IP, автоблокировок и блокировок диапазонов',
 'right-proxyunbannable' => 'обход автоматической блокировки прокси',
-'right-unblockself' => 'Ñ\80азблокиÑ\80ование Ñ\81ебÑ\8f Ñ\81амого',
+'right-unblockself' => 'Ñ\80азблокиÑ\80овка Ñ\81амого Ñ\81ебÑ\8f',
 'right-protect' => 'изменение уровня защиты страниц и правка защищённых страниц',
 'right-editprotected' => 'правка защищённых страниц (без каскадной защиты)',
 'right-editinterface' => 'изменение пользовательского интерфейса',
 'right-editusercssjs' => 'правка CSS- и JS-файлов других участников',
 'right-editusercss' => 'правка CSS-файлов других участников',
 'right-edituserjs' => 'правка JavaScript-файлов других участников',
-'right-rollback' => 'бÑ\8bÑ\81Ñ\82Ñ\80Ñ\8bй Ð¾Ñ\82каÑ\82 Ð¿Ñ\80авок Ð¿Ð¾Ñ\81леднего Ñ\83Ñ\87аÑ\81Ñ\82ника Ð½Ð° Ð½ÐµÐºÐ¾Ñ\82оÑ\80ой странице',
+'right-rollback' => 'бÑ\8bÑ\81Ñ\82Ñ\80Ñ\8bй Ð¾Ñ\82каÑ\82 Ð¿Ñ\80авок Ð¿Ð¾Ñ\81леднего Ñ\83Ñ\87аÑ\81Ñ\82ника Ð½Ð° Ð¾Ð¿Ñ\80еделенной странице',
 'right-markbotedits' => 'отметка откатываемых правок как правок бота',
 'right-noratelimit' => 'нет ограничений по скорости',
 'right-import' => 'импорт страниц из других вики',
@@ -1702,22 +1706,20 @@ $1",
 'right-patrolmarks' => 'просмотр отметок о патрулировании в свежих правках',
 'right-unwatchedpages' => 'просмотр списка ненаблюдаемых страниц',
 'right-mergehistory' => 'объединение историй страниц',
-'right-userrights' => 'изменение Ð¿Ñ\80ав Ð²Ñ\81еÑ\85 участников',
+'right-userrights' => 'изменение Ð²Ñ\81еÑ\85 Ð¿Ñ\80ав участников',
 'right-userrights-interwiki' => 'изменение прав участников на других вики-сайтах',
 'right-siteadmin' => 'блокировка и разблокировка базы данных',
 'right-override-export-depth' => 'экспортирование страниц, включая связанные страницы с глубиной до 5',
 'right-sendemail' => 'отправлять электронную почту другим участникам',
 'right-passwordreset' => 'просмотр электронных писем с изменением пароля',
 
+# Special:Log/newusers
+'newuserlogpage' => 'Журнал регистрации участников',
+'newuserlogpagetext' => 'Список недавно зарегистрировавшихся участников',
+
 # User rights log
 'rightslog' => 'Журнал прав участника',
 'rightslogtext' => 'Это журнал изменений прав участника.',
-'rightslogentry' => 'изменил членство в группах для $1 с $2 на $3',
-'rightslogentry-autopromote' => 'был автоматически переведён из $2 в $3',
-'logentry-rights-rights' => '$1 {{GENDER:$1|изменил|изменила}} членство в группах для $3 с $4 на $5',
-'logentry-rights-rights-legacy' => '$1 {{GENDER:$1|изменил|изменила}} членство в группах для $3',
-'logentry-rights-autopromote' => '$1 {{GENDER:$2|был автоматически переведён|была автоматически переведена}} из $4 в $5',
-'rightsnone' => '(нет)',
 
 # Associated actions - in the sentence "You do not have permission to X"
 'action-read' => 'чтение этой страницы',
@@ -2345,7 +2347,7 @@ $1',
 'linksearch-ok' => 'Найти',
 'linksearch-text' => 'Можно использовать подстановочные символы, например, <code>*.wikipedia.org</code>.
 Необходим по крайней мере домен верхнего уровня, например <code>*.org</code><br />
-Поддерживаемые протоколы: <code>$1</code> (по умолчанию подставляется http://, если протокол явно не задан).',
+Поддерживаемые {{PLURAL:$2|протокол|протоколы}}: <code>$1</code> (по умолчанию подставляется http://, если протокол явно не задан).',
 'linksearch-line' => 'Ссылка на $1 из $2',
 'linksearch-error' => 'Подстановочные символы могут использоваться только в начале адресов.',
 
@@ -2364,10 +2366,6 @@ $1',
 'activeusers-hidesysops' => 'Скрыть администраторов',
 'activeusers-noresult' => 'Не найдено участников.',
 
-# Special:Log/newusers
-'newuserlogpage' => 'Журнал регистрации участников',
-'newuserlogpagetext' => 'Список недавно зарегистрировавшихся участников',
-
 # Special:ListGroupRights
 'listgrouprights' => 'Права групп участников',
 'listgrouprights-summary' => 'Ниже представлен список определённых в этой вики групп участников, указаны соответствующие им права доступа.
@@ -2435,8 +2433,8 @@ $1',
 'watchnologin' => 'Нужно представиться системе',
 'watchnologintext' => 'Вы должны [[Special:UserLogin|представиться системе]], чтобы иметь возможность изменять свой список наблюдения',
 'addwatch' => 'Добавить в список наблюдения',
-'addedwatchtext' => "Страница «[[:$1]]» была добавлена в ваш [[Special:Watchlist|список наблюдения]].
\9fоÑ\81ледÑ\83Ñ\8eÑ\89ие Ð¸Ð·Ð¼ÐµÐ½ÐµÐ½Ð¸Ñ\8f Ñ\8dÑ\82ой Ñ\81Ñ\82Ñ\80аниÑ\86Ñ\8b Ð¸ Ñ\81вÑ\8fзанной Ñ\81 Ð½ÐµÐ¹ Ñ\81Ñ\82Ñ\80аниÑ\86Ñ\8b (оÑ\81новной Ð¸Ð»Ð¸ Ñ\81Ñ\82Ñ\80аниÑ\86Ñ\8b Ð¾Ð±Ñ\81Ñ\83ждениÑ\8f) Ð±Ñ\83дÑ\83Ñ\82 Ð¾Ñ\82меÑ\87аÑ\82Ñ\8cÑ\81Ñ\8f Ð² Ñ\8dÑ\82ом Ñ\81пиÑ\81ке, Ð° Ñ\82акже Ð±Ñ\83дÑ\83Ñ\82 Ð²Ñ\8bделенÑ\8b '''полÑ\83жиÑ\80нÑ\8bм''' Ñ\88Ñ\80иÑ\84Ñ\82ом Ð² [[Special:RecentChanges|Ñ\81пиÑ\81ке Ñ\81вежиÑ\85 Ð¸Ð·Ð¼ÐµÐ½ÐµÐ½Ð¸Ð¹]], Ñ\87Ñ\82обÑ\8b Ð¸Ñ\85 Ð±Ñ\8bло Ð»ÐµÐ³Ñ\87е Ð·Ð°Ð¼ÐµÑ\82иÑ\82Ñ\8c.",
+'addedwatchtext' => 'Страница «[[:$1]]» была добавлена в ваш [[Special:Watchlist|список наблюдения]].
¢Ð°Ð¼ Ð±Ñ\83дÑ\83Ñ\82 Ð¾Ñ\82меÑ\87аÑ\82Ñ\8cÑ\81Ñ\8f Ð¿Ð¾Ñ\81ледÑ\83Ñ\8eÑ\89ие Ð¸Ð·Ð¼ÐµÐ½ÐµÐ½Ð¸Ñ\8f Ñ\8dÑ\82ой Ñ\81Ñ\82Ñ\80аниÑ\86Ñ\8b, Ð° Ñ\82акже Ñ\81вÑ\8fзанной Ñ\81 Ð½ÐµÐ¹ Ñ\81Ñ\82Ñ\80аниÑ\86Ñ\8b Ð¾Ð±Ñ\81Ñ\83ждениÑ\8f.',
 'removewatch' => 'Удалить из списка наблюдения',
 'removedwatchtext' => 'Страница «[[:$1]]» была удалена из вашего [[Special:Watchlist|списка наблюдения]].',
 'watch' => 'Следить',
@@ -2470,7 +2468,7 @@ $1',
 'enotif_subject_moved' => 'Страница проекта «{{SITENAME}}» с именем «$1» была переименована {{gender:$2|участником|участницей}} $2',
 'enotif_subject_restored' => 'Страница проекта «{{SITENAME}}» с именем «$1» была восстановлена {{gender:$2|участником|участницей}} $2',
 'enotif_subject_changed' => 'Страница проекта «{{SITENAME}}» с именем «$1» была изменена {{gender:$2|участником|участницей}} $2',
-'enotif_body_intro_deleted' => '$PAGEEDITDATE {{gender:$2|участником|участницей}} $2 была удалена страница проекта «{{SITENAME}}» с именем «$1», см. текущую версию по ссылке: $3',
+'enotif_body_intro_deleted' => '$PAGEEDITDATE {{gender:$2|участником|участницей}} $2 была удалена страница проекта «{{SITENAME}}» с именем «$1», см. $3.',
 'enotif_body_intro_created' => '$PAGEEDITDATE {{gender:$2|участником|участницей}} $2 была создана страница проекта «{{SITENAME}}» с именем «$1», см. текущую версию по ссылке: $3',
 'enotif_body_intro_moved' => '$PAGEEDITDATE {{gender:$2|участником|участницей}} $2 была переименована страница проекта «{{SITENAME}}» с именем «$1», см. текущую версию по ссылке: $3',
 'enotif_body_intro_restored' => '$PAGEEDITDATE {{gender:$2|участником|участницей}} $2 была восстановлена страница проекта «{{SITENAME}}» с именем «$1», см. текущую версию по ссылке: $3',
@@ -2504,6 +2502,8 @@ $UNWATCHURL
 
 Обратная связь и помощь
 {{canonicalurl:{{MediaWiki:Helppage}}}}',
+'created' => 'создана',
+'changed' => 'изменена',
 
 # Delete
 'deletepage' => 'Удалить страницу',
@@ -2574,6 +2574,8 @@ $UNWATCHURL
 'prot_1movedto2' => '[[$1]] переименована в [[$2]]',
 'protect-badnamespace-title' => 'Незащищаемое пространство имён',
 'protect-badnamespace-text' => 'Страницы в этом пространстве имён не могут быть защищены.',
+'protect-norestrictiontypes-text' => 'Эта страница не может быть защищена, как как для неё нет доступных типов ограничений.',
+'protect-norestrictiontypes-title' => 'Незащищаемая страница',
 'protect-legend' => 'Подтвердите установку защиты страницы',
 'protectcomment' => 'Причина:',
 'protectexpiry' => 'Истекает:',
@@ -2588,9 +2590,9 @@ $UNWATCHURL
 'protect-locked-access' => "У вашей учётной записи недостаточно прав для изменения уровня защиты страницы. Текущие установки для страницы '''$1''':",
 'protect-cascadeon' => 'Эта страница защищена в связи с тем, что она включена {{PLURAL:$1|в указанную ниже страницу, на которую|в нижеследующие страницы, на которые}} установлена каскадная защита. Вы можете изменить уровень защиты этой страницы, но это не повлияет на каскадную защиту.',
 'protect-default' => 'Без защиты',
-'protect-fallback' => 'ТÑ\80ебÑ\83еÑ\82Ñ\81Ñ\8f Ñ\80азÑ\80еÑ\88ение «$1»',
-'protect-level-autoconfirmed' => 'Ð\97аÑ\89иÑ\82иÑ\82Ñ\8c Ð¾Ñ\82 Ð½Ð¾Ð²Ñ\8bÑ\85 Ð¸ Ð½ÐµÐ·Ð°Ñ\80егиÑ\81Ñ\82Ñ\80иÑ\80ованнÑ\8bÑ\85 Ñ\83Ñ\87аÑ\81Ñ\82ников',
-'protect-level-sysop' => 'ТолÑ\8cко Ð°Ð´Ð¼Ð¸Ð½Ð¸Ñ\81Ñ\82Ñ\80аÑ\82оÑ\80Ñ\8b',
+'protect-fallback' => 'РазÑ\80еÑ\88ено Ñ\82олÑ\8cко Ñ\83Ñ\87аÑ\81Ñ\82никам Ñ\81 Ð¿Ñ\80авами «$1»',
+'protect-level-autoconfirmed' => 'РазÑ\80еÑ\88ено Ñ\82олÑ\8cко Ð°Ð²Ñ\82оподÑ\82веÑ\80ждÑ\91ннÑ\8bм Ñ\83Ñ\87аÑ\81Ñ\82никам',
+'protect-level-sysop' => 'РазÑ\80еÑ\88ено Ñ\82олÑ\8cко Ð°Ð´Ð¼Ð¸Ð½Ð¸Ñ\81Ñ\82Ñ\80аÑ\82оÑ\80ам',
 'protect-summary-cascade' => 'каскадная',
 'protect-expiring' => 'истекает $1 (UTC)',
 'protect-expiring-local' => 'истекает $1',
@@ -2883,17 +2885,17 @@ $1',
 # Move page
 'move-page' => '$1 — переименование',
 'move-page-legend' => 'Переименование страницы',
-'movepagetext' => "Воспользовавшись формой ниже, вы переименуете страницу, одновременно переместив на новое место её журнал изменений.
-Старое название станет перенаправлением на новое название.
+'movepagetext' => "Воспользовавшись нижеприведённой формой, вы переименуете страницу, одновременно переместив на новое место её журнал изменений.
+Старое название станет перенаправлением на новое.
 Вы можете автоматически обновить перенаправления, которые вели на старое название.
 Если вы этого не сделаете, пожалуйста, проверьте наличие [[Special:DoubleRedirects|двойных]] и [[Special:BrokenRedirects|разорванных перенаправлений]].
-Вы отвечаете за то, что бы ссылки продолжали и далее указывают туда, куда предполагалось.
+Вы отвечаете за то, чтобы ссылки продолжали и далее указывать туда, куда предполагалось.
 
\9eбÑ\80аÑ\82иÑ\82е Ð²Ð½Ð¸Ð¼Ð°Ð½Ð¸Ðµ, Ñ\87Ñ\82о Ñ\81Ñ\82Ñ\80аниÑ\86а '''не Ð±Ñ\83деÑ\82''' Ð¿ÐµÑ\80еименована, ÐµÑ\81ли Ñ\81Ñ\82Ñ\80аниÑ\86а Ñ\81 Ð½Ð¾Ð²Ñ\8bм Ð½Ð°Ð·Ð²Ð°Ð½Ð¸ÐµÐ¼ Ñ\83же Ñ\81Ñ\83Ñ\89еÑ\81Ñ\82вÑ\83еÑ\82, ÐºÑ\80оме Ñ\81лÑ\83Ñ\87аев, ÐµÑ\81ли Ð¾Ð½Ð° Ñ\8fвлÑ\8fеÑ\82Ñ\81Ñ\8f Ð¿ÐµÑ\80енапÑ\80авлением Ð¸Ð»Ð¸ Ð¿Ñ\83Ñ\81Ñ\82а Ð¸ не имеет истории правок.
-Это означает, что вы можете переименовать страницу обратно в то название, которое у него только что было, если вы переименовали по ошибке, но вы не можете случайно затереть существующую страницу.
\9eбÑ\80аÑ\82иÑ\82е Ð²Ð½Ð¸Ð¼Ð°Ð½Ð¸Ðµ, Ñ\87Ñ\82о Ñ\81Ñ\82Ñ\80аниÑ\86а '''не Ð±Ñ\83деÑ\82''' Ð¿ÐµÑ\80еименована, ÐµÑ\81ли Ñ\83же Ñ\81Ñ\83Ñ\89еÑ\81Ñ\82вÑ\83еÑ\82 Ñ\81Ñ\82Ñ\80аниÑ\86а Ñ\81 Ð½Ð°Ð·Ð²Ð°Ð½Ð¸ÐµÐ¼, Ð¸Ð´ÐµÐ½Ñ\82иÑ\87нÑ\8bм Ð²Ñ\8bбÑ\80анномÑ\83, ÐºÑ\80оме Ñ\81лÑ\83Ñ\87аев, ÐºÐ¾Ð³Ð´Ð° Ñ\82акаÑ\8f Ñ\81Ñ\82Ñ\80аниÑ\86а Ñ\8fвлÑ\8fеÑ\82Ñ\81Ñ\8f Ð¿ÐµÑ\80енапÑ\80авлением Ð¸Ð»Ð¸ Ð¿Ñ\83Ñ\81Ñ\82а, Ð¸ Ð¿Ñ\80и Ñ\8dÑ\82ом не имеет истории правок.
+Это означает, что вы можете переименовать страницу обратно в то название, которое у него только что было, если вы сделали преименование ошибочно, но вы не можете случайно затереть существующую страницу.
 
-'''ПРЕДУПРЕЖДЕНИЕ!'''
-Переименование может привести к масштабным и неожиданным изменениям для ''популярных'' страниц.
+'''Предупреждение!'''
+Переименование ''популярных'' страниц может привести к масштабным и неожиданным изменениям.
 Пожалуйста, прежде чем вы продолжите, убедитесь, что вы понимаете все возможные последствия.",
 'movepagetext-noredirectfixer' => "Воспользовавшись формой ниже, вы переименуете страницу, одновременно переместив на новое место её журнал изменений.
 Старое название станет перенаправлением на новое название.
@@ -3070,6 +3072,7 @@ $1',
 'import-error-interwiki' => 'Страница «$1» не была импортирована, так как её название зарезервировано для внешних ссылок (интервики).',
 'import-error-special' => 'Страница «$1» не была импортирована, так как она относится к особому пространству имён, не позволяющему создавать страницы.',
 'import-error-invalid' => 'Страница «$1» не была импортирована из-за недопустимого названия.',
+'import-error-unserialize' => 'Версия $2 страницы «$1» не может быть структурирована (десериализована). Получено сообщение, что в этой версии использована модель содержимого $3,  сериализуемая в формате $4.',
 'import-options-wrong' => '{{PLURAL:$2|Неверная опция|Неверные опции}}: <nowiki>$1</nowiki>',
 'import-rootpage-invalid' => 'Указанное название корневой страницы некорректно.',
 'import-rootpage-nosubpage' => 'В пространстве имён указанной корневой страницы «$1» подстраницы запрещены.',
@@ -3254,6 +3257,7 @@ The wiki server can't provide data in a format your client can read.",
 'pageinfo-magic-words' => '{{PLURAL:$1|Магическое слово|Магические слова}} ($1)',
 'pageinfo-hidden-categories' => '{{PLURAL:$1|Скрытая категория|Скрытых категорий}} ($1)',
 'pageinfo-templates' => '{{PLURAL:$1|Шаблон|Шаблонов}} ($1)',
+'pageinfo-transclusions' => '{{PLURAL:$1|Включаемые страницы|Включаемых страниц}} ($1)',
 'pageinfo-toolboxlink' => 'Сведения о странице',
 'pageinfo-redirectsto' => 'Перенаправление',
 'pageinfo-redirectsto-info' => 'сведения',
@@ -3262,6 +3266,10 @@ The wiki server can't provide data in a format your client can read.",
 'pageinfo-protect-cascading' => 'Каскадная защита отсюда',
 'pageinfo-protect-cascading-yes' => 'Да',
 'pageinfo-protect-cascading-from' => 'Каскадная защита от',
+'pageinfo-category-info' => 'Информация о категории',
+'pageinfo-category-pages' => 'Количество страниц',
+'pageinfo-category-subcats' => 'Количество подкатегорий',
+'pageinfo-category-files' => 'Количество файлов',
 
 # Skin names
 'skinname-standard' => 'Классическое',
@@ -3319,6 +3327,7 @@ $1',
 'file-nohires' => 'Нет версии с бо́льшим разрешением.',
 '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-preview' => 'Размер при предпросмотре: $1.',
 'show-big-image-other' => '{{PLURAL:$2|Другое разрешение|Другие разрешения}}: $1.',
@@ -3353,6 +3362,8 @@ $1',
 'minutes' => '{{PLURAL:$1|$1 минута|$1 минуты|$1 минут}}',
 'hours' => '{{PLURAL:$1|$1 час|$1 часа|$1 часов}}',
 'days' => '{{PLURAL:$1|$1 день|$1 дня|$1 дней}}',
+'months' => '{{PLURAL:$1|$1 месяц|$1 месяца|$1 месяцев}}',
+'years' => '{{PLURAL:$1|$1 год|$1 года|$1 лет}}',
 'ago' => '$1 назад',
 'just-now' => 'только что',
 
@@ -4190,8 +4201,12 @@ MediaWiki распространяется в надежде, что она бу
 'logentry-newusers-newusers' => 'Создана учётная запись $1',
 'logentry-newusers-create' => 'Создана учётная запись $1',
 'logentry-newusers-create2' => '$1 {{GENDER:$2|создал|создала}} учётную запись для $3',
+'logentry-newusers-byemail' => 'Учетная запись пользователя $3 была создана $1 и пароль был отправлен по электронной почте',
 'logentry-newusers-autocreate' => 'Автоматически создана учётная запись $1',
-'newuserlog-byemail' => 'пароль отправлен по эл. почте',
+'logentry-rights-rights' => '$1 {{GENDER:$1|изменил|изменила}} членство в группах для $3 с $4 на $5',
+'logentry-rights-rights-legacy' => '$1 {{GENDER:$1|изменил|изменила}} членство в группах для $3',
+'logentry-rights-autopromote' => 'Учётная запись «$1» была автоматически переведена из $4 в $5',
+'rightsnone' => '(нет)',
 
 # Feedback
 'feedback-bugornote' => 'Если вы готовы подробно описать техническую проблему, пожалуйста, [$1 сообщите об ошибке].
@@ -4245,6 +4260,7 @@ MediaWiki распространяется в надежде, что она бу
 'api-error-ok-but-empty' => 'Внутренняя ошибка: нет ответа от сервера.',
 'api-error-overwrite' => 'Не допускается замена существующего файла.',
 'api-error-stashfailed' => 'Внутренняя ошибка: сервер не смог сохранить временный файл.',
+'api-error-publishfailed' => 'Внутренняя ошибка: сервер не смог сохранить временный файл.',
 'api-error-timeout' => 'Сервер не отвечает в течение ожидаемого времени.',
 'api-error-unclassified' => 'Произошла неизвестная ошибка',
 'api-error-unknown-code' => 'Неизвестная ошибка: «$1»',
@@ -4265,6 +4281,4 @@ MediaWiki распространяется в надежде, что она бу
 'duration-centuries' => '$1 {{PLURAL:$1|век|века|веков}}',
 'duration-millennia' => '$1 {{PLURAL:$1|тысячелетие|тысячелетия|тысячелетий}}',
 
-# Unknown messages
-'svg-long-error' => 'неправильный SVG-файл: $1',
 );
index 32ccd50..fff9084 100644 (file)
@@ -683,6 +683,7 @@ $2
 'changeemail-oldemail' => 'Теперїшня імейлова адреса:',
 'changeemail-newemail' => 'Нова імейлова адреса:',
 'changeemail-none' => '(жадне)',
+'changeemail-password' => 'Ваше гесло на портал {{SITENAME}}:',
 'changeemail-submit' => 'Змінити імейл',
 'changeemail-cancel' => 'Сторно',
 
@@ -851,7 +852,6 @@ $2
 'template-protected' => '(всокочена)',
 'template-semiprotected' => '(частково всокочене)',
 'hiddencategories' => 'Тота сторінка належыть до $1 {{PLURAL:$1|схованa катеґорія|схованы катеґорії|схованых катеґорій}}:',
-'nocreatetitle' => 'Створїня сторінок обмеджено',
 'nocreatetext' => 'На {{grammar:6sg|{{SITENAME}}}} є можливость створїна новых сторінок обмеджена.
 Можете ся вернути і едітовати уж екзістуючу сторінку, або [[Special:UserLogin|ся приголосити ці ся реґістровати]].',
 'nocreate-loggedin' => 'Не маєте права створёвати новы сторінкы.',
@@ -1398,15 +1398,13 @@ $1",
 'right-sendemail' => 'Посыланя пошты іншым хоснователям',
 'right-passwordreset' => 'Перезераня імейлів про зміну гесла',
 
+# Special:Log/newusers
+'newuserlogpage' => 'Лоґ вытварянь хоснователїв',
+'newuserlogpagetext' => 'Тото є список ново реґістрованых хоснователїв.',
+
 # User rights log
 'rightslog' => 'Лоґ хосновательскых прав',
 'rightslogtext' => 'Тото є протокол зміны прав хоснователїв',
-'rightslogentry' => 'змінив членство в ґрупах про хоснователя $1 з $2 на $3',
-'rightslogentry-autopromote' => 'быв автоматічно повышеный з $2 на $3',
-'logentry-rights-rights' => '$1 {{GENDER:$1|змінив|змінила}} членство в ґрупах про $3 із $4 на $5',
-'logentry-rights-rights-legacy' => '$1 {{GENDER:$1|змінив|змінила}} членство в ґрупах про $3',
-'logentry-rights-autopromote' => '$1 было автоматічно переведено із $4 в $5',
-'rightsnone' => '(жадне)',
 
 # Associated actions - in the sentence "You do not have permission to X"
 'action-read' => 'прочітати тоту сторінку',
@@ -2030,10 +2028,6 @@ $1',
 'activeusers-hidesysops' => 'Сховати адміністраторів',
 'activeusers-noresult' => 'Ненайдженый жаден хоснователь.',
 
-# Special:Log/newusers
-'newuserlogpage' => 'Лоґ вытварянь хоснователїв',
-'newuserlogpagetext' => 'Тото є список ново реґістрованых хоснователїв.',
-
 # Special:ListGroupRights
 'listgrouprights' => 'Права ґруп хоснователїв',
 'listgrouprights-summary' => 'Тото є список ґруп хоснователїв дефінованых на тій вікіi і&nbsp;їх приступовых прав.
@@ -2100,8 +2094,8 @@ $1',
 'watchnologin' => 'Не сьте приголошеный(а)',
 'watchnologintext' => 'Про слїдованя сторінок ся мусите [[Special:UserLogin|приголосити]].',
 'addwatch' => 'Придати до списку слїдованых сторінок',
-'addedwatchtext' => "Сторінка «[[:$1]]» была придана до вашого [[Special:Watchlist|списку слїдованых]].
-Будучі зміны той статї і з нёв повязаной сторінков діскузії будуть зображены у тім списку, а тыж будуть выдїлены '''тучнї''' на сторінцї із [[Special:RecentChanges|списком послїднїх змін]], жебы їх было легше вшимнути.",
+'addedwatchtext' => 'Сторінка «[[:$1]]» была придана до вашого [[Special:Watchlist|списку слїдованых]].
+Будучі зміны той статї і з нёв повязаной сторінков діскузії будуть зображены у тім списку.',
 'removewatch' => 'Вымазати зо списку слїдованых сторінок',
 'removedwatchtext' => 'Сторінка «[[:$1]]» вымазана з вашого [[Special:Watchlist|списку слїдованых сторінок]].',
 'watch' => 'Слїдовати',
@@ -2135,7 +2129,7 @@ $1',
 'enotif_subject_moved' => '$2 {{gender:$2|переменовав|переменовала}} сторінку $1 на {{grammar:6sg|{{SITENAME}}}}',
 'enotif_subject_restored' => '$2 {{gender:$2|обновив|обновила}} сторінку $1 на {{grammar:6sg|{{SITENAME}}}}',
 'enotif_subject_changed' => '$2 {{gender:$2|змінив|змінила}} сторінку $1 на {{grammar:6sg|{{SITENAME}}}}',
-'enotif_body_intro_deleted' => 'В $PAGEEDITDATE {{gender:$2|змазав|змазала}} $2 на {{grammar:6sg|{{SITENAME}}}} сторінку $1, посмотьте актуалну верзію на $3 .',
+'enotif_body_intro_deleted' => 'В $PAGEEDITDATE {{gender:$2|змазав|змазала}} $2 на {{grammar:6sg|{{SITENAME}}}} сторінку $1,посмотьте $3 .',
 'enotif_body_intro_created' => 'В $PAGEEDITDATE {{gender:$2|створив|створила}} $2 на {{grammar:6sg|{{SITENAME}}}} сторінку $1, посмотьте актуалну верзію на $3 .',
 'enotif_body_intro_moved' => 'В $PAGEEDITDATE {{gender:$2|переменовав|переменовала}} $2 на {{grammar:6sg|{{SITENAME}}}} сторінку $1, посмотьте актуалну верзію на $3 .',
 'enotif_body_intro_restored' => 'В $PAGEEDITDATE {{gender:$2|обновив|обновила}} $2 на {{grammar:6sg|{{SITENAME}}}} сторінку $1, посмотьте актуалну верзію на $3 .',
@@ -2169,6 +2163,8 @@ $UNWATCHURL
 
 Порада і контакт:
 {{canonicalurl:{{MediaWiki:Helppage}}}}',
+'created' => 'створена',
+'changed' => 'змінена',
 
 # Delete
 'deletepage' => 'Змазати сторінку',
@@ -2725,6 +2721,7 @@ $1',
 'import-error-interwiki' => 'Сторінка „$1“ ся не імпортує, бо єй назва є зарезервована про вонкашнї лінкы (interwiki).',
 'import-error-special' => 'Сторінка „$1“ ся не імпортує, бо належыть до шпеціалного простору назв, до котрого сторінкы не належать.',
 'import-error-invalid' => 'Сторінка „$1“ ся не імпортує, бо єй назва неприпустна.',
+'import-error-unserialize' => 'Не вдало ся десеріалізовати ревізію $2 сторінкы „$1“. Ревізія хотїла хосновати модел обсягу $3 серіалоізованый як $4.',
 'import-options-wrong' => '{{PLURAL:$2|Неправильна опція|Неправильны опції}}: <nowiki>$1</nowiki>',
 'import-rootpage-invalid' => 'Вказана некоректна назва корїнёвой сторінкы',
 'import-rootpage-nosubpage' => 'В просторї назв вказаной корїнёвой сторінкы «$1» не дозволены підсторінкы',
@@ -2926,6 +2923,8 @@ $1',
 'file-info-size-pages' => '$1 × $2 пікселів, великость файлу: $3, MIME тіп: $4, $5 {{PLURAL:$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' => 'Повне розлишіня',
 'show-big-image-preview' => 'Розмір того нагляду: $1.',
 'show-big-image-other' => '{{PLURAL:$2|Інше|іншы}} розлишіня: $1.',
@@ -2935,6 +2934,8 @@ $1',
 'file-info-png-looped' => 'в слючцї',
 'file-info-png-repeat' => 'повторяне  $1{{PLURAL:$1|раз|разы}}',
 'file-info-png-frames' => '$1 {{PLURAL:$1|снимок|снимкы|снимків}}',
+'file-no-thumb-animation' => "'''Позначка. Через технічны обмеджіня, мініатуры того файлу не будуть анімованы.'''",
+'file-no-thumb-animation-gif' => "'''Позначка. Через технічны обмеджіня, мініатуры образчіків GIF высокого розлишіня, як є гевто, ся не анімують.'''",
 
 # Special:NewFiles
 'newimages' => 'Ґалерія новых файлів',
@@ -3447,6 +3448,7 @@ $5
 # Scary transclusion
 'scarytranscludedisabled' => '[Вкладаня шаблон міджі вікі є выпнуте]',
 'scarytranscludefailed' => '[Не вдало ся натягнути шаблону про $1]',
+'scarytranscludefailed-httpstatus' => '[Не вдало ся наладовати шаблону про $1: HTTP $2]',
 'scarytranscludetoolong' => '[URL дуже довгый]',
 
 # Delete conflict
@@ -3556,6 +3558,7 @@ $5
 'version-license' => 'Ліценція',
 'version-poweredby-credits' => "Тота вікі біжыть на '''[//www.mediawiki.org/ MediaWiki]''', copyright © 2001–$1 $2.",
 'version-poweredby-others' => 'іншы',
+'version-credits-summary' => 'Слїдуючім людям бы сьме радо подяковали за їх приспівкы [[Special:Version|MediaWiki]].',
 'version-license-info' => 'MediaWiki є слободный софтвер; можете го шырити або управляти в згодї з условіями GNU General Public License, выдаваной Free Software Foundation; будь верзія 2 той ліценції або (як уважыте) будьяка пізнїша верзія.
 
 MediaWiki є дістрібуована в надїї, же буде хосновна, але БЕЗ БУДЬЯКОЙ ЗАРУКЫ; не давають ся ани зарукы ПРОДАЙНОСТИ або ВАЛУШНОСТИ ПРО СТАНОВЛЕНЫЙ ЦІЛЬ. Детайлы ся дочітате в текстї  GNU General Public License.
@@ -3698,7 +3701,10 @@ MediaWiki є дістрібуована в надїї, же буде хосно
 'logentry-newusers-create' => 'Створене было хосновательске конто $1',
 'logentry-newusers-create2' => '$1 створив хосновательске конто $3',
 'logentry-newusers-autocreate' => 'Автоматічно было створене конто $1',
-'newuserlog-byemail' => 'гело послане електронічнов поштов',
+'logentry-rights-rights' => '$1 {{GENDER:$1|змінив|змінила}} членство в ґрупах про $3 із $4 на $5',
+'logentry-rights-rights-legacy' => '$1 {{GENDER:$1|змінив|змінила}} членство в ґрупах про $3',
+'logentry-rights-autopromote' => '$1 было автоматічно переведено із $4 в $5',
+'rightsnone' => '(жадне)',
 
 # Feedback
 'feedback-bugornote' => 'Кідь сьте прирыхтованый подробно описати технічный проблем, можете [$1 наголосити хыбу].
index 1939488..67b8110 100644 (file)
@@ -445,6 +445,7 @@ The following {{PLURAL:$1|file is|$1 files are}} in the current category.',
 'namespaces' => 'नामाकाशानि',
 'variants' => 'भिन्नरूपाणि',
 
+'navigation-heading' => 'मार्गणसूचिः',
 'errorpagetitle' => 'दोषः',
 'returnto' => '$1 इत्येतद् प्रति निवर्तताम्।',
 'tagline' => '{{SITENAME}} इत्यस्मात्',
@@ -679,6 +680,9 @@ $2',
 
 भवान् {{SITENAME}} इत्येतत् अनामतया प्रयोक्तुं शक्नोति, अथवा भवान् तेनैव प्रयोक्तृनाम्ना, भिन्नप्रयोक्तृनाम्ना वा  <span class='plainlinks'>[$1 पुनः प्रवेष्टुं शक्नोति]</span>।
 इदानीमपि कानिचन पृष्ठानि पूर्ववदेव दृश्येरन् । अस्य वारणाय विचरकस्य स्मृतिसञ्चयः रिक्तीक्रियताम् ।",
+'welcomeuser' => 'स्वागतं, हे $1!',
+'welcomecreation-msg' => 'भवतः लेखा रचिताऽस्ति।
+स्वकीयानां [[Special:Preferences|{{SITENAME}} इष्टतमानां]]. निगदनं मा विस्मर्यताम्।',
 'yourname' => 'योजकनामन्:',
 'yourpassword' => 'कूटशब्दः',
 'yourpasswordagain' => 'कूटशब्दः पुनः लिख्यताम् ।',
@@ -837,6 +841,7 @@ $2
 'changeemail-oldemail' => 'प्रचलितः विद्युन्मानपत्रसङ्केतः ।',
 'changeemail-newemail' => 'नूतनः विद्युन्मानसङ्केतः ।',
 'changeemail-none' => 'असत्',
+'changeemail-password' => 'भवतः {{SITENAME}} कूटशब्दः:',
 'changeemail-submit' => 'विद्युन्मानपत्रसङ्केतं परिवर्तयतु ।',
 'changeemail-cancel' => 'निवर्तयते',
 
@@ -1009,7 +1014,6 @@ $2
 'template-protected' => '(संरक्षितम्)',
 'template-semiprotected' => '(अर्धसंरक्षितम्)',
 'hiddencategories' => 'इदं पृष्ठं {{PLURAL:$1|1 निगूढे वर्गे |$1 निगूढेषु वर्गेषु}} अन्यतमं विद्यते :',
-'nocreatetitle' => 'पुटनिर्माणं नियतम् ।',
 'nocreatetext' => '{{SITENAME}} नूतनपुटनिर्माणस्य क्षमता नियता । वर्तमानापुटानां सम्पादनार्थं निर्गच्छतु । अथवा [[Special:UserLogin|log in or create an account]].',
 'nocreate-loggedin' => 'नूतनपुटनिर्मार्थम् अनुमतिः नास्ति ।',
 'sectioneditnotsupported-title' => 'विभागसम्पादनं न पोषितम् ।',
@@ -1032,6 +1036,14 @@ $2
 'edit-already-exists' => 'नूतनं पृष्ठं स्रष्टुं नापारयत्।
 इदं पूर्वे एव विद्यते।',
 'defaultmessagetext' => 'सन्देशपाठं स्थिरयतु ।',
+'invalid-content-data' => 'अमान्यः सामग्रीदत्तांशः',
+'content-not-allowed-here' => '[[$2]] इति पृष्ठे "$1" सामग्री अनुमता नास्ति।',
+
+# Content models
+'content-model-wikitext' => 'विकिपाठः',
+'content-model-text' => 'शुद्धपाठः',
+'content-model-javascript' => 'जावालिपिः',
+'content-model-css' => 'सी-एस्-एस्',
 
 # Parser/template warnings
 'expensive-parserfunction-warning' => "'''प्रबोधः :''' अस्मिन् पृष्ठे प्रभूतानि जटिलानि पार्सर्-फ़ंक्शन्-आह्वानानि सन्ति।
@@ -1530,12 +1542,13 @@ You can still [$1 view this revision]",
 'right-sendemail' => 'अन्ययोजकेभ्यः विद्युन्मानपत्राणि प्रेषयतु ।',
 'right-passwordreset' => 'निकुञ्चपुनारचितानां विद्युन्मानपत्राणाम् अवलोकनम् ।',
 
+# Special:Log/newusers
+'newuserlogpage' => 'प्रयोक्तृ-सृजन-सूचिका',
+'newuserlogpagetext' => 'अयं योजकनिर्माणास्य प्रवेशः ।',
+
 # User rights log
 'rightslog' => 'प्रयोक्तृ-अधिकार-सूचिका',
 'rightslogtext' => 'अयं योजकाधिकारस्य परिवर्तनकुञ्चः ।',
-'rightslogentry' => '$2 - $3 तः $1 सामूहिकसदस्यत्वं परिवर्तितम् ।',
-'rightslogentry-autopromote' => '$2 तः $3 स्वयम् उन्नतीकृतम् ।',
-'rightsnone' => '(कतम)',
 
 # Associated actions - in the sentence "You do not have permission to X"
 'action-read' => 'एतत्पुटं पठतु ।',
@@ -1763,6 +1776,7 @@ URL मान्यम् अभिगम्यं वेति परिशी
 'backend-fail-notsame' => '$1 मध्ये काचित् अज्ञातसञ्चिका पूर्वमेवास्ति ।',
 'backend-fail-invalidpath' => '$1 मान्यः सङ्ग्रहपथः न ।',
 'backend-fail-delete' => '$1 सञ्चिकां परिमर्जितुं नैव शक्यते ।',
+'backend-fail-describe' => '"$1" इति सञ्चिकार्थं प्रदत्तांशं परिवर्तयितुं नाशक्नोत्।',
 'backend-fail-alreadyexists' => '$1 इति सञ्चिक पूर्वमेव वर्तते ।',
 'backend-fail-store' => '$1 सञ्चिकां $2 मध्ये सङ्ग्रहितुं नैव शक्यते ।',
 'backend-fail-copy' => '$1 सञ्चिकां $2 मध्ये प्रतिकृतिः कर्तुं नैव शक्यते ।',
@@ -2172,10 +2186,6 @@ See https://www.mediawiki.org/wiki/Manual:Image_Authorization.',
 'activeusers-hidesysops' => 'प्रशासकान् गोपयतु ।',
 'activeusers-noresult' => 'योजकः न प्राप्तः ।',
 
-# Special:Log/newusers
-'newuserlogpage' => 'प्रयोक्तृ-सृजन-सूचिका',
-'newuserlogpagetext' => 'अयं योजकनिर्माणास्य प्रवेशः ।',
-
 # Special:ListGroupRights
 'listgrouprights' => 'योजकसमूहाधिकाराः ।',
 'listgrouprights-summary' => 'अधोदत्ता विकिपरिभाषितस्य सङ्गताभिगम्यताधिकारैः सहिता योजकसमूहस्य आवली । [[{{MediaWiki:Listgrouprights-helppage}}|additional information]]',
@@ -2270,10 +2280,47 @@ See https://www.mediawiki.org/wiki/Manual:Image_Authorization.',
 'enotif_mailer' => '{{SITENAME}} सूचितः विद्युन्मानपत्रप्रेषकः ।',
 'enotif_reset' => 'सन्दर्शितानि इति सर्वपुटानि अङ्कयतु ।',
 'enotif_impersonal_salutation' => '{{SITENAME}} योजक',
+'enotif_subject_deleted' => '{{SITENAME}} पृष्ठं $1 इत्येतत् {{gender:$2 इत्यनेन|$2 इत्यनया}} अपाकृतमस्ति।',
+'enotif_subject_created' => '{{SITENAME}} पृष्ठं $1 इत्येतत् {{gender:$2 इत्यनेन|$2 इत्यनया}} रचितमस्ति',
+'enotif_subject_moved' => '{{SITENAME}} पृष्ठं $1 इत्येतत् {{gender:$2 इत्यनेन|$2 इत्यनया}} चालितमस्ति',
+'enotif_subject_restored' => '{{SITENAME}} पृष्ठं $1 इत्येतत् {{gender:$2 इत्यनेन|$2 इत्यनया}} पुनःस्थापितमस्ति',
+'enotif_subject_changed' => '{{SITENAME}} पृष्ठं $1 इत्येतत् {{gender:$2 इत्यनेन|$2 इत्यनया}} परिवर्तितमस्ति।',
+'enotif_body_intro_deleted' => '{{SITENAME}} पृष्ठं $1 इत्येतत् $PAGEEDITDATE इति दिनाङ्के {{gender:$2 इत्यनेन|$2 इत्यनया}} अपाकृतमस्ति,  $3 इत्येतत् दृश्यताम्।',
+'enotif_body_intro_created' => '{{SITENAME}} पृष्ठं $1 इत्येतत् $PAGEEDITDATE इति दिनाङ्के {{gender:$2 इत्यनेन|$2 इत्यनया}} रचितमस्ति, वर्तमानावृत्त्यर्थे $3 इत्येतत् दृश्यताम्।',
+'enotif_body_intro_moved' => '{{SITENAME}} पृष्ठं $1 इत्येतत् $PAGEEDITDATE इति दिनाङ्के {{gender:$2 इत्यनेन|$2 इत्यनया}} चालितमस्ति, वर्तमानावृत्त्यर्थे $3 इत्येतत् दृश्यताम्।',
+'enotif_body_intro_restored' => '{{SITENAME}} पृष्ठं $1 इत्येतत् $PAGEEDITDATE इति दिनाङ्के {{gender:$2 इत्यनेन|$2 इत्यनया}} पुनःस्थापितमस्ति, वर्तमानावृत्त्यर्थे $3 इति दृश्यताम्।',
+'enotif_body_intro_changed' => '{{SITENAME}} पृष्ठं $1 इत्येतत् $PAGEEDITDATE इति दिनाङ्के {{gender:$2 इत्यनेन|$2 इत्यनया}} परिवर्तितमस्ति, वर्तमानावृत्त्यर्थे $3 इत्येतत् दृश्यताम्।',
 'enotif_lastvisited' => 'भवतः पूवसन्दर्शनस्य पश्चात् सवृत्तपरिवर्तनार्थं $1 पश्यतु ।',
 'enotif_lastdiff' => 'एतत्परिवर्तनं दृष्टुं $1 पश्यतु ।',
 'enotif_anon_editor' => 'अनामकः योजकः $1',
-'enotif_body' => 'आत्मीय $ अवलोकनबन्धो',
+'enotif_body' => 'Dear $WATCHINGUSERNAME,
+
+$PAGEINTRO $NEWPAGE
+
+Editor\'s summary: $PAGESUMMARY $PAGEMINOREDIT
+
+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.
+
+                        Your friendly {{SITENAME}} notification system
+
+--
+To change your e-mail notification settings, visit
+{{canonicalurl:{{#special:Preferences}}}}
+
+To change your watchlist settings, visit
+{{canonicalurl:{{#special:EditWatchlist}}}}
+
+To delete the page from your watchlist, visit
+$UNWATCHURL
+
+Feedback and further assistance:
+{{canonicalurl:{{MediaWiki:Helppage}}}}',
+'created' => 'सृष्टम् ।',
+'changed' => 'परिवर्तितम् ।',
 
 # Delete
 'deletepage' => 'पृष्ठं निराकरोतु।',
@@ -2729,6 +2776,7 @@ $2 इति प्रकारस्य अवरोधं कर्तुं 
 'immobile-target-namespace-iw' => 'पुटचालनार्थम् अन्तर्विक्यानुबन्धः मान्यं लक्ष्यं न ।',
 'immobile-source-page' => 'एतत्पुटं चालनयोग्यं न ।',
 'immobile-target-page' => 'तत् लक्षितशीर्षकं प्रति चालयितुं न शक्यते ।',
+'bad-target-model' => 'अभीष्टगन्तव्ये तु भिन्नमेकं सामग्रीप्रतिमानं प्रयुज्यते। $1 इत्यस्य $2 इत्यस्मिन् परिवर्तनं न शक्यम्।',
 'imagenocrossnamespace' => 'सञ्चिकां  अनामस्थाने स्थानान्तरितं कर्तुं नैव शक्यते ।',
 'nonfile-cannot-move-to-file' => 'असञ्चिकायाः सञ्चिकानामस्थाने स्थानान्तरं न शक्यते ।',
 'imagetypemismatch' => 'नूतपुटविस्तारः तस्य प्रकाण सह मेलं न  प्राप्नोति ।',
@@ -2955,6 +3003,7 @@ $2 इति प्रकारस्य अवरोधं कर्तुं 
 
 # Info page
 'pageinfo-title' => '"$1" कृते सूचनाः ।',
+'pageinfo-not-current' => 'क्षम्यताम्, पुरातनाभ्यः आवृत्तिभ्यः एषा सूचना दातुं न शक्यते।',
 'pageinfo-header-basic' => 'मूलसूचनाः ।',
 'pageinfo-header-edits' => 'इतिहासः सम्पाद्यताम्',
 'pageinfo-header-restrictions' => 'पृष्ठसंरक्षणम्',
@@ -2963,6 +3012,7 @@ $2 इति प्रकारस्य अवरोधं कर्तुं 
 'pageinfo-default-sort' => 'संविभागकीलकं पूर्वनिर्दिष्टं क्रियताम्',
 'pageinfo-length' => 'पृष्ठदैर्घ्यम् (बैट्स्द्वारा)',
 'pageinfo-article-id' => 'पृष्ठाभिज्ञापकम्',
+'pageinfo-language' => 'पृष्ठसामग्र्याः भाषा',
 'pageinfo-robot-policy' => 'चालकयन्त्रस्थितिः अन्विष्यताम्',
 'pageinfo-robot-index' => 'अङ्कनयोग्यम्',
 'pageinfo-robot-noindex' => 'अङ्कनायोग्यम्',
@@ -2982,6 +3032,17 @@ $2 इति प्रकारस्य अवरोधं कर्तुं 
 'pageinfo-magic-words' => 'मान्त्रिक{{PLURAL:$1|शब्दः|शब्दाः}} ($1)',
 'pageinfo-hidden-categories' => 'गोपित{{PLURAL:$1|वर्गः|वर्गाः}} ($1)',
 'pageinfo-templates' => 'समायोजित{{PLURAL:$1|फलकम्|फलकानि}} ($1)',
+'pageinfo-toolboxlink' => 'पृष्ठसूचनाः',
+'pageinfo-redirectsto' => 'इत्यत्र अनुप्रेष्यते',
+'pageinfo-redirectsto-info' => 'सूचना',
+'pageinfo-contentpage' => 'सामग्रीपृष्ठवत् गण्यते',
+'pageinfo-contentpage-yes' => 'आम्',
+'pageinfo-protect-cascading' => 'अतस्तु संरक्षणविधिः सोपानवत् गच्छति',
+'pageinfo-protect-cascading-yes' => 'आम्',
+'pageinfo-protect-cascading-from' => 'अधोलिखितेभ्यः संरक्षणविधिः सोपानवत् गच्छति',
+'pageinfo-category-info' => 'वर्गविषयकसूचना',
+'pageinfo-category-pages' => 'पृष्ठानां सङ्ख्या',
+'pageinfo-category-subcats' => 'उपवर्गानां सङ्ख्या',
 
 # Skin names
 'skinname-standard' => 'पूर्व',
@@ -3001,6 +3062,8 @@ $2 इति प्रकारस्य अवरोधं कर्तुं 
 'markedaspatrollederror' => 'आरक्षितमिति अङ्कितं न भवति ।',
 'markedaspatrollederrortext' => 'आरक्षितमिति सूचयितुं पुनरावृत्तिं विशेषयतु ।',
 'markedaspatrollederror-noautopatrol' => 'स्वस्य परिवर्तनानि आरक्षितं कर्तुं भवान् नानुमतः ।',
+'markedaspatrollednotify' => '$1 इत्यस्य एतत् परिवर्तनं समीक्षितम् इति अङ्कितम्।',
+'markedaspatrollederrornotify' => 'समीक्षितम् इति चिह्नीकरणं विफलम्।',
 
 # Patrol log
 'patrol-log-page' => 'आरक्षणसूचिका ।',
@@ -3032,6 +3095,7 @@ $2 इति प्रकारस्य अवरोधं कर्तुं 
 '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' => 'पूर्णं विभेदनम्',
 'show-big-image-preview' => 'अस्य पूर्वावलोकनस्य आकारः : $1',
 'show-big-image-other' => 'अन्याः {{PLURAL:$2| प्रस्तवः|प्रस्तावाः}}:  $1 ।',
@@ -3062,6 +3126,7 @@ $2 इति प्रकारस्य अवरोधं कर्तुं 
 'hours' => '{{PLURAL:$1|$1होरा|$1 होराः}}',
 'days' => '{{PLURAL:$1|$1 दिनम्|$1 दिनानि}}',
 'ago' => '$1 पूर्वम्',
+'just-now' => 'अधुनैव',
 
 # Bad image list
 'bad_image_list' => 'रूपम् एवम् अस्ति -
@@ -3665,6 +3730,7 @@ $5
 'version-license' => 'अनुज्ञापत्रम्',
 'version-poweredby-credits' => "इयं विकिः अनेन सञ्चालिता '''[//www.mediawiki.org/ MediaWiki]''', स्वामित्वम् © 2001 - $1  $2 ।",
 'version-poweredby-others' => 'अन्य',
+'version-credits-summary' => '[[Special:Version|MediaWiki] इत्यत्र योगदानार्थं वयं अधोलिखितान् जनान् प्रशंसितुमिच्छामः।',
 'version-license-info' => 'मिडियाविकिः तु निश्शुल्कतन्त्रांशः ; भवान् पुनः वितर्तुं शक्नोति अथवा GNU सामान्यसार्वजनिकानुज्ञपत्रस्य नियमानुगुणं द्वीतीयावृत्तिम् अथवा अन्यनूतनावृतिं संस्कर्तुं शक्नोति । 
 
 एषा बहूपयोगाय भवेत् इति धिया मिडियाविकिः वितीर्णा । किन्तु केनापि प्रमाणत्वेन विना दत्ता । अथवा निर्दिष्टोद्देशर्थे अनुकूलकरं वेति अपरिशील्य अथवा वाणिज्यस्य आनुषङ्गिकानुज्ञापत्रेण विना अपि मीडियाविकिः प्रदत्ता । विशेषविवरणप्राप्तये GNU सर्वजनसामान्यम् अनुज्ञापत्रं पश्यतु ।
@@ -3806,9 +3872,12 @@ $1 इत्यनेन $3 इति पृष्ठम् $4 इत्ये
 'logentry-patrol-patrol-auto' => '$1 इत्येतत् $3 पुटस्य $4 आवृत्तिं स्वयं चालितरूपात् आरक्षितम् ।',
 'logentry-newusers-newusers' => '$1 योजकलेखाम् असृजत्',
 'logentry-newusers-create' => '$1 योजकलेखाम् असृजत्',
-'logentry-newusers-create2' => '$1,  $3 योजकलेखाम् असृजत्',
+'logentry-newusers-create2' => '$1,  $3 à¤\87ति à¤¯à¥\8bà¤\9cà¤\95लà¥\87à¤\96ामà¥\8d à¤\85सà¥\83à¤\9cतà¥\8d',
 'logentry-newusers-autocreate' => '$1 लेखा स्वयमेव सृष्टं जातम्',
-'newuserlog-byemail' => 'कूटशब्दः ईपत्रद्वारा प्रेषितः',
+'logentry-rights-rights' => '$1 इत्ययं $3 इत्यस्य समूहसदस्यतां $4 इत्यतः परिवर्त्य $5 इत्यकरोत्',
+'logentry-rights-rights-legacy' => '$1, $3 इत्यस्मै समूहसदस्यतां पर्यवर्तयत्',
+'logentry-rights-autopromote' => '$1 इत्ययं स्वचालितरूपेण $4 इत्यतः $5 इति यावत् पदोन्नतः',
+'rightsnone' => '(कतम)',
 
 # Feedback
 'feedback-bugornote' => 'यदि भवान् कस्याश्चित् तान्त्रिकसमस्यायाः विषये विशदीकर्तुम् इच्छति तर्हि [$1 मत्कुणसञ्चिकां करोतु ।]
index ce0eeef..ab74e45 100644 (file)
@@ -176,7 +176,8 @@ $messages = array(
 'newwindow' => '(атын түннүккэ арыллар)',
 'cancel' => 'Алҕас',
 'moredotdotdot' => 'Өссө...',
-'mypage' => 'Бэйэм туспунан',
+'morenotlisted' => 'Атын суох...',
+'mypage' => 'Сирэй',
 'mytalk' => 'Кэпсэтэр сирим',
 'anontalk' => 'Бу IP-га ырытыы',
 'navigation' => 'Навигация',
@@ -209,6 +210,7 @@ $messages = array(
 'namespaces' => 'Аат даллара',
 'variants' => 'Барыллар',
 
+'navigation-heading' => 'Навигация',
 'errorpagetitle' => 'Сыыһа',
 'returnto' => 'Төттөрү $1 сирэйгэ.',
 'tagline' => '{{SITENAME}} диэн сиртэн ылыллыбыт',
@@ -413,7 +415,7 @@ $1',
 'viewsource-title' => 'Бу сирэй $1 исходнигын көрүү',
 'actionthrottled' => 'Түргэнин хааччахтааһын',
 'actionthrottledtext' => 'Бу дьайыыны кылгас кэм иһигэр элбэхтик оҥорор бобуллар. Бу быраабыла спаамы утары охсуһарга көмөлөһөр. Аҕыйах мүнүүтэннэн өссө боруобалаар.',
-'protectedpagetext' => 'Бу сирэй уларытыллыбат.',
+'protectedpagetext' => 'Бу сирэй уларытыыттан уонна да атын дьайыылартан көмүскэммит.',
 'viewsourcetext' => 'Эн бу сирэй төрдүн көрүөххүн уонна төгүллүөххүн сөп:',
 'viewyourtext' => "'''Бэйэҥ көннөрүүлэриҥ''' исходнигын бу сирэйгэ көрүөххүн уонна хатылаан ылыаххын сөп:",
 'protectedinterface' => 'Бу сирэй бырагыраамма интерфейсын биллэриитин көрдөрөр, онон моһуогурууттан халытан хатанан турар.
@@ -449,6 +451,9 @@ $2',
 {{SITENAME}} ситим-сиргэ билигин урукку ааккынан буолбакка IP-аадырыһынан эрэ көстөҕүн.
 Салгыы ааккын ааттаабакка үлэлиэххин сөп, эбэтэр саҥаттан урукку ааккынан дуу, атын аатынан дуу <span class='plainlinks'>[$1 киириэххин]</span> сөп.
 Сорох сирэйдэр өссө даҕаны эйигин урукку ааккынан көрдөрүөхтэрин сөп, ону суох гыныаххын баҕардаххына интэриниэт көрдөрөөччүҥ кээһин ыраастаа.",
+'welcomeuser' => 'Нөрүөн нөргүй, $1!',
+'welcomecreation-msg' => 'Аатыҥ бэлиэтэннэ.
+{{SITENAME}} ситим-сиргэ үлэлииргэ табыгастаах буоллун диэн [[Special:Preferences|тус туруорууларгын]] уларытыаххын сөп.',
 'yourname' => 'Кыттааччы аатыҥ:',
 'yourpassword' => 'Киирии тыла:',
 'yourpasswordagain' => 'Киирии тылгын хатылаа:',
@@ -471,7 +476,7 @@ $2',
 'gotaccount' => "Бэлиэтэммитиҥ дуо? '''$1'''.",
 'gotaccountlink' => 'Аатыҥ',
 'userlogin-resetlink' => 'Киирэр тылгын умнубуккун дуо?',
-'createaccountmail' => 'e-mail-ынан',
+'createaccountmail' => 'Быстах киирии тылы туһаныы уонна ону email-ынан ыытыы',
 'createaccountreason' => 'Төрүөтэ:',
 'badretype' => 'Киирии тылларыҥ сөп түбэспэтилэр.',
 'userexists' => 'Суруйбут аатыҥ бэлиэр баар.
@@ -545,6 +550,7 @@ $2',
 # E-mail sending
 'php-mail-error-unknown' => 'mail() PHP-функциятыгар туох эрэ алҕас тахсыбыт',
 'user-mail-no-addy' => 'Сурук аадырыһа суох ыыттылла сатаабыт',
+'user-mail-no-body' => 'Кураанах эбэтэр суолтата суох кылгас тиэкистээх суругу ыыта сатаабыт.',
 
 # Change password dialog
 'resetpass' => 'Киирии тылы уларытыы',
@@ -611,6 +617,7 @@ $2
 'changeemail-oldemail' => 'Билиҥҥи аадырыс:',
 'changeemail-newemail' => 'Саҥа аадырыс:',
 'changeemail-none' => '(суох)',
+'changeemail-password' => '{{SITENAME}} ситим-сиргэ киирэр тылыҥ:',
 'changeemail-submit' => 'Аадырыһы уларыт',
 'changeemail-cancel' => 'Тохтот',
 
@@ -708,6 +715,10 @@ IP-аадырыһа эрэ көстөр.
 'noarticletext-nopermission' => 'Билигин бу сирэй кураанах.
 Бу [[Special:Search/{{PAGENAME}}|ааты атын сирэйдэргэ көрдөөн көрүөххүн]] сөп,
 эбэтэр <span class="plainlinks">[{{fullurl:{{#Special:Log}}|page={{FULLPAGENAMEE}}}} сурунаалларга манна сыһыаннаах суруктары булуоххун сөп].</span> Бу сирэйи айар кыаҕыҥ суох.',
+'missing-revision' => '«{{PAGENAME}}» сирэй $1 барыла суох.
+
+Маннык үксүн хайыы-үйэ сотуллубут билэҕэ эргэрбит сигэнэн бардахха буолааччы.
+Сиһилии баҕар [{{fullurl:{{#Special:Log}}/delete|page={{FULLPAGENAMEE}}}} сотуу сурунаалыгар] баара буолуо.',
 'userpage-userdoesnotexist' => '"<nowiki>$1</nowiki>" аат бэлиэтэммэтэх. Бу сирэйи оҥорор/уларытар баҕалааххын дуо?',
 'userpage-userdoesnotexist-view' => '"$1" кыттааччы аата бэлиэтэниллибэтэх.',
 'blocked-notice-logextract' => 'Бу кыттааччы билигин бобуллубут.
@@ -716,7 +727,6 @@ IP-аадырыһа эрэ көстөр.
 *'''Firefox / Safari.''' ''Shift'' кунуопканы тутан туран ''Reload'' баттаа, эбэтэр ''Ctrl-F5'', ''Ctrl-R'' дуу (Mac-ка ''⌘-R'') баттаа;
 *'''Google Chrome:''' ''Ctrl-Shift-R'' баттаа (Mac-ка ''⌘-Shift-R'')
 *'''Internet Explorer:''' ''Ctrl'' тутан туран ''Refresh'' баттаа, эбэтэр ''Ctrl-F5'' баттаа.
-*'''Konqueror:''' ''Reload'' эбэтэр ''F5'' баттаа;
 *'''Opera:''' Манна ''Tools → Preferences'' киирэн кээһин ыраастаа",
 'usercssyoucanpreview' => "'''Көмө.''' CSS-билэ саҥа барылын бигэргэтиэҥ иннинэ бу тимэҕи «{{int:showpreview}}»  баттаан тургутан көр.",
 'userjsyoucanpreview' => "'''Көмө.''' JS-билэ саҥа барылын бигэргэтиэҥ иннинэ бу тимэҕи «{{int:showpreview}}»  баттаан тургутан көр.",
@@ -732,7 +742,7 @@ IP-аадырыһа эрэ көстөр.
 'note' => "'''Хос быһаарыы:'''",
 'previewnote' => "'''Бу барыллаан көрүү эрэ.'''
 Атын уларытыы бигэргэтиллэ илик!",
-'continue-editing' => 'Уларытыыны ситэр',
+'continue-editing' => 'Уларытар сиргэ',
 'previewconflict' => 'Этот предварительный просмотр отражает текст в верхнем окне редактирования так, как он будет выглядеть, если вы решите записать его.',
 'session_fail_preview' => "'''Сиэрбэр сессия идентификаторын сүтэрэн кэбиһэн эн уларытыыгын кыайан киллэрбэтэ.
 Өссө холонон көр.
@@ -768,10 +778,10 @@ IP-аадырыһа эрэ көстөр.
 'copyrightwarning2' => "Болҕой, эн суруйбут матырыйаалгын ким баҕарар уларытар уонна суох гынар бырааптаах. Суруйбуккун уларыталларын сөбүлээбэт буоллаххына манна суруйума.<br />
 Эбиитин манна суруйдаххына, уларытыы ааптара мин буолабын, эбэтэр көҥүл туһанары уонна уларытары көҥүллүүр сиртэн ыллым диэн бигэргэтэҕин (маны көр $1).<br /> '''КИМ ЭРЭ БАС БИЛИИТИН МАННА КИНИТТЭН КӨҤҮЛЭ СУОХ УГУМА!'''",
 'longpageerror' => "'''Алҕас: Суруйар кэрчиккит {{PLURAL:$1|биир килобаайт|$1 килобаайт}} ыйааһыннаах, онтуккут көҥүллэммит {{PLURAL:$2|биир килобаайты|$2 килобайты}} килобаайты куоһарар. Онон сирэй бигэргэтиллэр кыаҕа суох.'''",
-'readonlywarning' => "'''СЭРЭТИИ: Сиэрбэргэ техническай үлэ бара турар, онон киллэрбит уларытыыларыҥ тута хаалар кыахтара суох.
\91илигин Ñ\83лаÑ\80Ñ\8bÑ\82Ñ\8bÑ\8bгÑ\8bн Ð±Ñ\8dйÑ\8dÒ¥ Ð´Ð¸Ð¸Ñ\81кÑ\8dÒ\95Ñ\8dÑ\80 Ñ\85ааллаÑ\80ан Ð±Ð°Ñ\80ан, ÐºÑ\8dлин Ð¼Ð°Ð½Ð½Ð° Ñ\83ган Ð±Ð¸Ñ\8dÑ\80иÑ\8dÑ\85Ñ\85ин Ñ\81өп.'''
+'readonlywarning' => "'''Сэрэтии: Сиэрбэргэ техническай үлэ бара турар, онон киллэрбит уларытыыларыҥ тута бигэргэнэр кыахтара суох.'''
\9eнон Ñ\83лаÑ\80Ñ\8bÑ\82Ñ\8bÑ\8bгÑ\8bн Ñ\82иÑ\8dкиÑ\81Ñ\82Ñ\8dÑ\8dÑ\85 Ð±Ð¸Ð»Ñ\8dÒ\95Ñ\8d Ñ\83ган Ð±Ð°Ñ\80ан, ÐºÑ\8dлин Ð¼Ð°Ð½Ð½Ð° ÐºÐ¸Ð»Ð»Ñ\8dÑ\80иÑ\8dÑ\85Ñ\85ин Ñ\81өп.
 
\94Ñ\8cаһабÑ\8bл Ð¼Ð°Ð½Ð½Ñ\8bк Ð±Ñ\8bһаарбыт: $1",
¥Ð°Ð°Ñ\87Ñ\87аÒ\95Ñ\8b Ñ\82Ñ\83Ñ\80Ñ\83оÑ\80бÑ\83Ñ\82 Ð´Ñ\8cаһабÑ\8bл Ð¼Ð°Ð½Ð½Ñ\8bк Ð±Ñ\8bһааÑ\80Ñ\8bÑ\8bнÑ\8b Ñ\85аалларбыт: $1",
 'protectedpagewarning' => "'''Сэрэтии:  Бу сирэй хатанан турар, администратор бырааптаах эрэ кыттааччылар уларытар кыахтаахтар.'''
 Аллара сурунаал бүтэһик суруга көрдөрүлүннэ:",
 'semiprotectedpagewarning' => "'''Биллэрии:''' Бу сирэй хатанан турар; ааттарын билиһиннэрбит эрэ кыттааччылар уларытар кыахтаахтар.
@@ -786,7 +796,6 @@ IP-аадырыһа эрэ көстөр.
 'template-semiprotected' => '(хатаммыт аҥардаах)',
 'hiddencategories' => 'Бу сирэй кистэммит {{PLURAL:$1|1 категорияҕа|$1 категорияларга}} киирэр:',
 'edittools' => '<!-- Манна суруллубут сурук уларытыы уонна эбии пуормаларын анныгар суруллуо. -->',
-'nocreatetitle' => 'Сирэй оҥорор хааччахтаммыт',
 'nocreatetext' => '{{SITENAME}} саайтыгар саҥа сирэйи оҥорор хааччахтанар.
 Баар сирэйи уларытыаххын сөп, эбэтэр [[Special:UserLogin|манна  бэлиэтэниэххин эбэтэр атын аатынан киириэххин сөп]].',
 'nocreate-loggedin' => 'Эн саҥа сирэйи оҥорор кыаҕыҥ өссө суох.',
@@ -811,6 +820,15 @@ IP-аадырыһа эрэ көстөр.
 'edit-already-exists' => 'Саҥа сирэйи оҥорор табыллыбат.
 Маннык сирэй баар эбит.',
 'defaultmessagetext' => 'Туспа этиллибэтэҕинэ суруллар тиэкис',
+'content-failed-to-parse' => '$2 иһинээҕитэ $1 көрүҥэр сөп түбэспэт: $3.',
+'invalid-content-data' => 'Алҕастаах дааннайдар',
+'content-not-allowed-here' => '[[$2]] сирэйгэ "$1" туттуллуо суохтаах',
+
+# Content models
+'content-model-wikitext' => 'биики-тиэкис',
+'content-model-text' => 'көннөрү тиэкис',
+'content-model-javascript' => 'JavaScript',
+'content-model-css' => 'CSS',
 
 # Parser/template warnings
 'expensive-parserfunction-warning' => 'Болҕой. Бу сирэй наһаа элбэх көмпүүтэри ноҕуруускалыыр ресурсаларга сигэнэр.
@@ -828,8 +846,11 @@ IP-аадырыһа эрэ көстөр.
 'language-converter-depth-warning' => 'Тыл конвертерын дириҥин хааччаҕа куоһарыллыбыт ($1)',
 'node-count-exceeded-category' => 'Түмүктэрин ахсаана аһара барбыт сирэйдэр',
 'node-count-exceeded-warning' => 'Сирэй түмүгүн ахсаана таһынан барбыт',
+'expansion-depth-exceeded-category' => 'Аһыллыытын дириҥэ куоһарыллыбыт сирэйдэр',
 'expansion-depth-exceeded-warning' => 'Сирэйгэ угуллубут билэлэр аһара элбээбиттэр',
+'parser-unstrip-loop-warning' => 'Сабыллыбатах pre көһүннэ',
 'parser-unstrip-recursion-limit' => 'Рекурсия ахсаана таһынан барбыт ($1)',
+'converter-manual-rule-error' => 'Тылы уларытыы быраабылатын алҕаһа таҕыста',
 
 # "Undo" feature
 'undo-success' => 'Правка может быть отменена. Пожалуйста, просмотрите сравнение версий, чтобы убедиться, что это именно те изменения, которые вас интересуют, и нажмите «Записать страницу», чтобы изменения вступили в силу.',
@@ -967,7 +988,8 @@ $1",
 'revdelete-only-restricted' => 'Алҕас таҕыста ($2 $1): Бу суругу дьаһабыллар көрбөттөрүн курдук оҥорорго кистээһин ханнык эмэ туруоруутун талыахха наада.',
 'revdelete-reason-dropdown' => '*Сотуу төрүөттэрэ сүнньүнэн
 ** Ааптар быраабын күөмчүлээһин
-** Тустаах киһи туһунан киэҥ эйгэҕэ тахсыбат билии',
+** Тустаах киһи туһунан киэҥ эйгэҕэ тахсыбат билии
+** Куорҕаллааһын курдук сыаналаныан сөп этии',
 'revdelete-otherreason' => 'Атын/эбии төрүөт:',
 'revdelete-reasonotherlist' => 'Атын төрүөт',
 'revdelete-edit-reasonlist' => 'Сотуу төрүөтүн уларыт',
@@ -1018,6 +1040,10 @@ $1",
 'editundo' => 'төнүн',
 'diff-multi' => '({{PLURAL:$2|$2 кыттааччы|$2 ахсааннаах кыттааччы}} {{PLURAL:$1|$1 ыккардынааҕы барыла көрдөрүллүбэтэ|$1 ахсааннаах ыккардынааҕы барыла көрдөрүллүбэтэ|$1.}})',
 'diff-multi-manyusers' => '(Кырата {{PLURAL:$2|$1 кыттааччы|$2 ахсааннаах кыттааччы}} оҥорбут {{PLURAL:$1|ыккардынааҕы $1 барыла|ыккардынааҕы $1 барыллара}} көрдөрүллүбэтэ)',
+'difference-missing-revision' => '$2 барыл бу тэҥнээһиҥҥэ ($1) көстүбэтэ.
+
+Бу үксүн хайыы-үйэ сотуллубут сирэйи кытта тэҥнээри эргэрбит сигэнэн кэллэххэ баар буолааччы.
+Сиһилии баҕар [{{fullurl:{{#Special:Log}}/delete|page={{FULLPAGENAMEE}}}} сотуу сурунаалыгар] баара буолуо.',
 
 # Search results
 'searchresults' => 'Булулунна',
@@ -1092,7 +1118,7 @@ $1",
 
 # Preferences page
 'preferences' => 'Уларытыылар',
-'mypreferences' => 'Туруорууларым',
+'mypreferences' => 'Туруоруулар',
 'prefs-edits' => 'Көннөрүү ахсаана:',
 'prefsnologin' => 'Ааккын эппэтиҥ',
 'prefsnologintext' => 'Эн <span class="plainlinks">[{{fullurl:{{#Special:UserLogin}}|returnto=$1}} ааккын эттэххинэ]</span> эрэ кыттаачы туруорууларын уларытар кыахтаныаҥ.',
@@ -1155,7 +1181,7 @@ $1",
 'timezoneregion-indian' => 'Индия байҕала',
 'timezoneregion-pacific' => 'Чуумпу байҕал',
 'allowemail' => 'Атын кыттааччылартан сурук тутары көҥүллүүбүн',
-'prefs-searchoptions' => 'Көрдөөһүн туруоруулара',
+'prefs-searchoptions' => 'Көрдөөһүн',
 'prefs-namespaces' => 'Аат дала',
 'defaultns' => 'Атын ыйыллыбатаҕына бу аат далларыгар көрдүүргэ:',
 'default' => 'чопчу ыйыллыбатаҕына маннык',
@@ -1168,9 +1194,9 @@ $1",
 'prefs-emailconfirm-label' => 'Эл. почтаны бигэргэтии:',
 'prefs-textboxsize' => 'Эрэдээкисэйлиир түннүк улахана',
 'youremail' => 'E-mail-ыҥ:',
-'username' => 'Бэлиэтэммит аатыҥ:',
-'uid' => 'Кыттааччы ID-та:',
-'prefs-memberingroups' => 'Бу {{PLURAL:$1|бөлөххө|бөлөхтөргө}} киирэр:',
+'username' => '{{GENDER:$1|Бэлиэтэммит аатыҥ}}:',
+'uid' => '{{GENDER:$1|Кыттааччы}} ID-та:',
+'prefs-memberingroups' => 'Бу {{PLURAL:$1|бөлөххө|бөлөхтөргө}} {{GENDER:$2|киирэр}}:',
 'prefs-registration' => 'Бэлиэтэнии кэмэ:',
 'prefs-registration-date-time' => '$1',
 'yourrealname' => 'Докумуонунан аатыҥ:',
@@ -1282,6 +1308,7 @@ $1 {{PLURAL:$1|бэлиэттэн|бэлиэттэн (буукубаттан)}}
 'right-writeapi' => 'API-ны туттуу',
 'right-delete' => 'Сирэйдэри сотуу',
 'right-bigdelete' => 'Уһун историялаах сирэйдэри сотуу',
+'right-deletelogentry' => 'сурунаал сорох суруктарын сотуу уонна сөргүтүү.',
 'right-deleterevision' => 'Сирэй сорох торумнарын сотуу уонна хат киллэрии',
 'right-deletedhistory' => 'Сотуллубут тиэкиһи көрөөһүнэ суох сотуу историятын көрүү',
 'right-deletedtext' => 'Сотуллубут тиэкиһи уонна сотуллубут сирэйдэр бэйэ-бэйэлэрин ыккардыларыгар уратыларын көрүү',
@@ -1318,12 +1345,13 @@ $1 {{PLURAL:$1|бэлиэттэн|бэлиэттэн (буукубаттан)}}
 'right-sendemail' => 'Атын кыттааччыларга эл. почтаны ыытарга',
 'right-passwordreset' => 'Киирии тылы почта нөҥүө уларытыыны көрүү',
 
+# Special:Log/newusers
+'newuserlogpage' => 'Кыттааччылары бэлиэтиир сурунаал',
+'newuserlogpagetext' => 'Соторутааҕыта бэлиэтэммит кыттааччылар.',
+
 # User rights log
 'rightslog' => 'Кыттаачы бырааптарын сурунаала',
 'rightslogtext' => 'Бу кыттааччы бырааптарын уларыйыытын көрдөрөр сурунаал.',
-'rightslogentry' => '$1 кыттаачы киирэр бырааба $2-тан $3 уларыйда',
-'rightslogentry-autopromote' => 'мантан $2 аптамаатынан манна $3 көспүт',
-'rightsnone' => '(суох)',
 
 # Associated actions - in the sentence "You do not have permission to X"
 'action-read' => 'бу сирэйи ааҕыы',
@@ -1578,7 +1606,12 @@ $1',
 'backend-fail-connect' => 'Маны кытта «$1» холбонор табыллыбата.',
 'backend-fail-internal' => 'Манна «$1» биллибэт алҕас таҕыста.',
 'backend-fail-contenttype' => 'Билэ иһинээҕитин көрүҥүн араарар сатамматаҕын түмүгэр манна «$1» угар табыллыбата.',
-'backend-fail-usable' => '$1 билэни суруттарар табыллыбата, тоҕо диэтэххэ быраабыҥ тиийбэтэ эбэтэр анаммыт паапка суох буолан биэрдэ.',
+'backend-fail-batchsize' => '$1 билэ операциялаах блогу тутта, хааччах $2 операция буолбут.',
+'backend-fail-usable' => '$1 билэни ааҕар эбэтэр суруттарар табыллыбата, тоҕо диэтэххэ быраабыҥ тиийбэтэ эбэтэр анаммыт паапкаҥ суох буолан биэрбит.',
+
+# File journal errors
+'filejournal-fail-dbconnect' => '«$1» хранилище дааннайдарын баазатын сурунаалыгар киирэр табыллыбата.',
+'filejournal-fail-dbquery' => '«$1» хранилище баазатын дааннайдарын саҥардар табыллыбата.',
 
 # Lock manager
 'lockmanager-notlocked' => 'Маны "$1" хааччаҕын устар табыллыбата; кини хааччахтамматах.',
@@ -1706,6 +1739,7 @@ $1',
 'uploadnewversion-linktext' => 'Бу билэ саҥа барылын суруттар',
 'shared-repo-from' => 'мантан: $1',
 'shared-repo' => 'уопсай умуһах',
+'upload-disallowed-here' => 'Бу билэни хос суруттарар кыаҕыҥ суох эбит.',
 
 # File reversion
 'filerevert' => 'Төннөр $1',
@@ -1786,7 +1820,9 @@ $1',
 
 'disambiguations' => 'Элбэх суолталаах өйдөбүллэргэ сигэнэр сирэйдэр',
 'disambiguationspage' => 'Template:элбэх суолталаах өйдөбүллэр',
-'disambiguations-text' => "Маннык сирэйдэр '''омонимнар сирэйдэрин''' кытта сибээстээхтэр. Ол оннугар чуолаан теманы кытта сибээстэһиэхтээхтэр.<br />Өскө бу халыыбы [[MediaWiki:Disambiguationspage]] туттубут буоллахтарына, сирэй омонимнары суох оҥоруу курдук обработкаламмыт.",
+'disambiguations-text' => "Маннык сирэйдэр '''хас да суолталаах сирэйгэ''' сигэнэллэр. 
+Ол оннугар ханнык эрэ чопчу сирэйгэ сигэниэхтээхтэр.<br />
+Быһаарыы: [[MediaWiki:Disambiguationspage]] халыып баар сирэйдэрэ хас да суолталаах сирэй ахсааныгар киирэллэр.",
 
 'doubleredirects' => 'Хос көһөрөөһүн',
 'doubleredirectstext' => 'Бу сирэйгэ атын сиргэ утаарар хос утаарыылар тиһиктэрэ көстөр.
@@ -1811,6 +1847,7 @@ $1',
 # Miscellaneous special pages
 'nbytes' => '$1 {{PLURAL:$1|баайт|баайтаах}}',
 'ncategories' => '$1 {{PLURAL:$1|категориялаах|категория баар}}',
+'ninterwikis' => '$1 интервики-сигэ',
 'nlinks' => '$1 {{PLURAL:$1|сигэлээх|сигэлэрдээх}}',
 'nmembers' => '$1 {{PLURAL:$1|кыттааччы|кыттааччылаах}}',
 'nrevisions' => '$1 {{PLURAL:$1|барыллаах|барыл баар}}',
@@ -1839,6 +1876,7 @@ $1',
 'mostlinkedtemplates' => 'Саамай элбэхтик туттуллар халыыптар',
 'mostcategories' => 'Элбэх категорияҕа киирэр ыстатыйалар',
 'mostimages' => 'Саамай элбэхтик сигэниллэр билэлэр',
+'mostinterwikis' => 'Ордук элбэх интервики-сигэлээх сирэйдэр',
 'mostrevisions' => 'Саамай элбэхтик уларытыллыбыт ыстатыйалар',
 'prefixindex' => 'Мантан саҕаланар (префикстаах) сирэйдэр барыта',
 'prefixindex-namespace' => 'Сирэй саҕаланыытынан наардаан көрдөрүү ($1 аат далыгар)',
@@ -1937,8 +1975,8 @@ $1',
 'linksearch-ns' => 'Аат хочото (namespace):',
 'linksearch-ok' => 'Бул',
 'linksearch-text' => 'Туруоран биэрэр бэлиэлэри туһаныахха сөп, холобур, "*.wikipedia.org".
-Саатар үрдүкү таһымнаах домен наада эбит, холобур "*.org".<br />
-Өйүүр боротокуоллар: <code>$1</code> (көрдүүргэр балартан ханныгын да эбимэ)',
+Үрдүкү таһымнаах домен көрдөнөр, холобур "*.org".<br />
+Өйөнөр боротокуоллар: <code>$1</code> (көрдүүргэр ханнык да боротокуолу талбатаххына http:// туруоруллуо)',
 'linksearch-line' => 'Мантан $2 манна $1 ыйынньык',
 'linksearch-error' => 'Туруоран биэрэр бэлиэлэри аадырыс/hostname саҕаланыытыгар эрэ туттуохха сөп.',
 
@@ -1951,16 +1989,12 @@ $1',
 # Special:ActiveUsers
 'activeusers' => 'Көхтөөх кыттааччылар тиһиктэрэ',
 'activeusers-intro' => 'Бу кэлиҥҥи $1 {{PLURAL:$1|күҥҥэ|күннэргэ}} тугу эмэ гыммыт кыттааччылар тиһиктэрэ.',
-'activeusers-count' => '$1 бүтэһик $3 күҥҥэ саҥа {{PLURAL:$1|көннөрүүлээх|көннөрүүлээх эбит}}',
+'activeusers-count' => 'Кэнники $3 күҥҥэ саҥа $1 көннөрүү киирбит',
 'activeusers-from' => 'Мантан саҕалаан кыттааччылары көрүү:',
 'activeusers-hidebots' => 'Руобаттары көрдөрүмэ',
 'activeusers-hidesysops' => 'Дьаһабыллары көрдөрүмэ',
 'activeusers-noresult' => 'Кыттааччылар көстүбэтилэр.',
 
-# Special:Log/newusers
-'newuserlogpage' => 'Кыттааччылары бэлиэтиир сурунаал',
-'newuserlogpagetext' => 'Соторутааҕыта бэлиэтэммит кыттааччылар.',
-
 # Special:ListGroupRights
 'listgrouprights' => 'Кыттааччылар бөлөхтөрүн бырааптара',
 'listgrouprights-summary' => 'Манна бу биикигэ баар бөлөхтөр уонна кинилэр киирэр бырааптара көстөллөр.
@@ -1984,10 +2018,12 @@ $1',
 'mailnologin' => 'Аадырыһа суох',
 'mailnologintext' => 'Атын кыттааччылары кытта e-mail көмөтүнэн суруйсуоххун баҕарар буоллаххына бэйэҕин [[Special:UserLogin|билиһиннэриэхтээххин]]  уонна e-mail аадырыскын [[Special:Preferences|туруорууларгар]] суруйуохтааххын.',
 'emailuser' => 'Кыттааччыга сурук',
+'emailuser-title-target' => 'Эл. суругу {{GENDER:$1|кыттааччыга}} суруйуу',
+'emailuser-title-notarget' => 'Кыттааччыга e-mail сурук ыытыы',
 'emailpage' => 'Кыттааччыга E-mail ыыт',
-'emailpagetext' => 'Бу фуорма көмөтүнэн кыттааччыга сурук ыытыаххын сөп.
-"Ð\9aимÑ\82Ñ\8dн" Ð³Ñ\80аÑ\84ааÒ\95а эн [[Special:Preferences|туруорууларгар]] баар аадырыһыҥ киириэҕэ,
-онон Ñ\82Ñ\83ппÑ\83Ñ\82 ÐºÐ¸Ò»Ð¸ хардарар кыахтаныа.',
+'emailpagetext' => 'Бу фуорма көмөтүнэн {{GENDER:$1|кыттааччыга}} сурук ыытыаххын сөп.
+"Ð\9aимÑ\82Ñ\8dн" Ð´Ð¸Ñ\8dÒ¥Ò¥Ñ\8d эн [[Special:Preferences|туруорууларгар]] баар аадырыһыҥ киириэҕэ,
+онон Ñ\81Ñ\83Ñ\80Ñ\83гÑ\83 Ñ\82Ñ\83ппÑ\83Ñ\82 ÐºÐ¸Ò»Ð¸ Ð¾Ð» Ð°Ð°Ð´Ñ\8bÑ\80Ñ\8bÑ\81каÑ\80 Ñ\87опÑ\87Ñ\83 хардарар кыахтаныа.',
 'usermailererror' => 'Сурук кыайан барбата:',
 'defemailsubject' => '{{SITENAME}} — $1 диэн киһиттэн сурук кэлбит',
 'usermaildisabled' => 'Кыттааччы эл почтата арахса сылдьар',
@@ -2017,16 +2053,16 @@ $1',
 'usermessage-editor' => 'Тиһилик биллэрээччитэ',
 
 # Watchlist
-'watchlist' => 'Ð\9cин ÐºÑ\8dÑ\82Ñ\8dÑ\8dһиним',
-'mywatchlist' => 'Кэтиир сирэйдэрим',
+'watchlist' => 'Ð\9aÑ\8dÑ\82Ñ\8dбилим Ñ\82иһигÑ\8d',
+'mywatchlist' => 'Кэтэбил тиһигэ',
 'watchlistfor2' => '$1 $2 аналлаах',
 'nowatchlist' => 'Эн кэтиир сирэйдэриҥ суохтар.',
 'watchlistanontext' => 'Кэтэбилиҥ сирэйин көрөргөр эбэтэр уларытаргар маны оҥор: $1.',
 'watchnologin' => 'Бэйэҕин билиһиннэр',
 'watchnologintext' => 'Бэйэҕин [[Special:UserLogin|билиһиннэрдэххинэ]] кэтэбил сирэйгин уларытыаххын сөп.',
 'addwatch' => 'Кэтэбил тиһигэр киллэр',
-'addedwatchtext' => '«[[:$1]]» сирэй [[Special:Watchlist|кэтэбилгэ]] киирдэ.
-Сирэй уларытыылара бүгүҥҥүттэн манна көстөр буолуохтара, эбиитин [[Special:RecentChanges|саҥа уларытыылар испииһэктэригэр]] модьу бичигинэн бэлиэтэнэн көстүөхтэрэ.',
+'addedwatchtext' => '«[[:$1]]» сирэй [[Special:Watchlist|кэтэбил тиһигэр]] киирдэ.
+Сирэй уларытыылара уонна кинини кытта ситимнээх ырытыы сирэйин уларытыылара бүгүҥҥүттэн онно көстөр буолуохтара.',
 'removewatch' => 'Кэтэбил тиһигиттэн сот',
 'removedwatchtext' => '[[:$1]]" сирэй [[Special:Watchlist|кэтэбилиҥ тиһигиттэн]] сотулунна.',
 'watch' => 'Кэтээ',
@@ -2083,6 +2119,8 @@ $UNWATCHURL
 
 Көмөлөһүннэрэр уонна быһаартарар сир:
 {{canonicalurl:{{MediaWiki:Helppage}}}}',
+'created' => 'айыллыбыт',
+'changed' => 'уларыппыт (уларытыллыбыт)',
 
 # Delete
 'deletepage' => 'Сирэйи сот',
@@ -2121,6 +2159,8 @@ $UNWATCHURL
 'rollback' => 'Уруккутугар төннөр',
 'rollback_short' => 'Төннөрүү',
 'rollbacklink' => 'төннөр',
+'rollbacklinkcount' => '$1 көннөрүүнү суох гын',
+'rollbacklinkcount-morethan' => '$1 элбэх көннөрүүнү суох гын',
 'rollbackfailed' => 'Төннөрөргө моһуок үөскээтэ',
 'cantrollback' => 'Төннөрөр кыах суох; бүтэһик көннөрүүнү оҥорбут киһи бу сирэй соҕотох ааптара буолар.',
 'alreadyrolled' => 'Бүтэһик [[User:$2|$2]] ([[User talk:$2|Ырытыы]]{{int:pipe-separator}}[[Special:Contributions/$2|{{int:contribslink}}]]) оҥорбут [[:$1]] уларытыыларын төннөрөр кыах суох;
@@ -2164,9 +2204,9 @@ $UNWATCHURL
 '''$1''' сирэй уларыыттын таһыма билиҥҥи туругунан маннык:",
 'protect-cascadeon' => 'Бу сирэй уларытыыттан көмүскэммит {{PLURAL:$1|сирэй бөлөҕөр|сирэйдэр бөлөхтөрүгэр}} (каскааднай көмүскэл) киирэр буолан эмиэ көмүскэммит. Эн көмүскэнии таһымын уларытыаххын сөп, ол каскаднай көмүскэли уларыппат.',
 'protect-default' => 'Барыларыгар көҥүллэнэр',
-'protect-fallback' => '"$1" көҥүллэ көрдөө',
-'protect-level-autoconfirmed' => 'Саҥа Ñ\83онна Ð±Ñ\8dлиÑ\8dÑ\82Ñ\8dммÑ\8dÑ\82Ñ\8dÑ\85 ÐºÑ\8bÑ\82Ñ\82ааÑ\87Ñ\87Ñ\8bлаÑ\80 Ñ\83лаÑ\80Ñ\8bппаÑ\82Ñ\82аÑ\80Ñ\8bн ÐºÑ\83Ñ\80дÑ\83к Ð¾Ò¥Ð¾р',
-'protect-level-sysop' => 'Дьаһабыллар эрэ',
+'protect-fallback' => '"$1" кыттааччылар эрэ маны оҥорор кыахтаахтар',
+'protect-level-autoconfirmed' => 'Ð\90пÑ\82амааÑ\82Ñ\8bнан Ð±Ð¸Ð³Ñ\8dÑ\80гÑ\8dммиÑ\82 ÐºÑ\8bÑ\82Ñ\82ааÑ\87Ñ\87Ñ\8bлаÑ\80га Ñ\8dÑ\80Ñ\8d ÐºÓ©Ò¥Ò¯Ð»Ð»Ñ\8dнÑ\8dр',
+'protect-level-sysop' => 'Дьаһабылларга эрэ көҥүллэнэр',
 'protect-summary-cascade' => 'каскадтаах',
 'protect-expiring' => 'болдьоҕо $1 (UTC)',
 'protect-expiring-local' => 'болдьоҕо баччаҕа бүтэр: $1',
@@ -2264,7 +2304,7 @@ $1',
 'blanknamespace' => '(Сүрүн)',
 
 # Contributions
-'contributions' => 'Кыттааччы суруйуута (вклад)',
+'contributions' => '{{GENDER:$1|Кыттааччы}} суруйуута (кылаата)',
 'contributions-title' => '$1 кыттааччы киллэрбит уларытыылара',
 'mycontris' => 'Суруйуу тиһигэ',
 'contribsub2' => 'Вклад $1 ($2)',
@@ -2462,15 +2502,15 @@ $1',
 'movepagetext' => "Манна баар форманы туһанан сирэй аатын уларытыаххын сөп.
 Бу түбэлтэҕэ уларытыы сурунаала саҥа сиргэ көһөр.
 Урукку аат саҥа сирэйгэ утаарар сирэйгэ кубулуйар.
-Урукку аакка ыйынньыктар уларыйбаттар;
-бука диэн [[Special:DoubleRedirects|хос ыйынньыктар]] уонна [[Special:BrokenRedirects|быстыбыт сигэниилэр]] баалларын-суохтарын көр.
+Урукку аакка ыйынньыктары аптамаатынан уларытыаххын сөп.
\98ннÑ\8cÑ\8d Ð³Ñ\8bммаÑ\82 Ð±Ñ\83оллаÑ\85Ñ\85Ñ\8bна, Ð±Ñ\83ка Ð´Ð¸Ñ\8dн [[Special:DoubleRedirects|Ñ\85оÑ\81 Ñ\8bйÑ\8bннÑ\8cÑ\8bкÑ\82аÑ\80]] Ñ\83онна [[Special:BrokenRedirects|бÑ\8bÑ\81Ñ\82Ñ\8bбÑ\8bÑ\82 Ñ\81игÑ\8dниилÑ\8dÑ\80]] Ð±Ð°Ð°Ð»Ð»Ð°Ñ\80Ñ\8bн-Ñ\81Ñ\83оÑ\85Ñ\82аÑ\80Ñ\8bн ÐºÓ©Ñ\80.
 Сиэр быһыытынан ыйынньыктар сөпкө сигэнэллэрин эн ситиһиэхтээххин.
 
 Өскө маннык ааттаах сирэй номнуо баар буоллаҕына сирэй аата '''уларыйыа суоҕа''', арай ол сирэй кураанах эбэтэр утаарар сирэй буолбатах буоллаҕына.
-Ол аата эн сирэй аатын сыыһа уларыппыт буоллаххына төттөрү урукку аатыгар төннөрүөххүн сөп гынан баран баар сирэйи алҕас сотор кыаҕыҥ суох.
+Ол аата эн сирэй аатын сыыһа уларыппыт буоллаххына төттөрү урукку аатыгар төннөрүөххүн сөп, ол гынан баран баар сирэйи алҕас сотор кыаҕыҥ суох.
 
-'''СЭРЭТИИ!'''
-Сирэй аатын уларытыы улахан уонна эрдэттэн өйдөммөтөх содуллаах буолуон сөп.
+'''Сэрэтии!'''
+Сирэй аатын уларытыы бөдөҥ уонна эрдэттэн өйдөммөтөх содуллаах буолуон сөп.
 Онон, бука диэн салгыаҥ иннинэ үчүгэйдик толкуйдаа.",
 'movepagetext-noredirectfixer' => "Манна баар форманы туһанан сирэй аатын уларытыаххын сөп.
 Бу түбэлтэҕэ уларытыы сурунаала саҥа сиргэ көһөр.
@@ -2618,6 +2658,7 @@ $1',
 'import-interwiki-templates' => 'Бары халыыптары киллэр',
 'import-interwiki-submit' => 'Импортаа',
 'import-interwiki-namespace' => 'Бу аат далыгар көһөрөргө:',
+'import-interwiki-rootpage' => 'Тирэх сирэйэ (булгуччута суох)',
 'import-upload-filename' => 'Билэ аата:',
 'import-comment' => 'Хос быһаарыы:',
 'importtext' => 'Сирэйи [[Special:Export|экспорт үнүстүрүмүөнүн]] көмөтүнэн бастакы биикиттэн экспортаа. 
@@ -2650,6 +2691,9 @@ $1',
 'import-error-interwiki' => '"$1" сирэй импортаммата, тоҕо диэтэххэ бу аат тас сигэлэргэ (интервикаҕа) аналлаах эбит.',
 'import-error-special' => '"$1" сирэй импортаммата, тоҕо диэтэххэ кини баар аат далыгар саҥа сирэйдэри оҥорор көҥүллэммэт эбит.',
 'import-error-invalid' => '"$1" сирэй импортаммата, тоҕо диэтэххэ маннык аат туттуллара бобуллубут.',
+'import-options-wrong' => 'Алҕастаах {{PLURAL:$2|опция|опциялар}}: <nowiki>$1</nowiki>',
+'import-rootpage-invalid' => 'Тирэх сирэй ыйыллыбыт аата алҕастаах.',
+'import-rootpage-nosubpage' => '"$1" тирэх сирэй аатын далыгар сирэй үөдүҥнэрэ (подстраницалар) көҥүллэммэттэр',
 
 # Import log
 'importlogpage' => 'Импорт сурунаала',
@@ -2774,11 +2818,38 @@ $1',
 
 # Info page
 'pageinfo-title' => '"$1" туһунан',
-'pageinfo-header-edits' => 'Уларытыылар',
+'pageinfo-not-current' => 'Баалаама, эргэ барылларга манныгы көрдөрөр сатаммат эбит.',
+'pageinfo-header-basic' => 'Сүрүн сибидиэнньэлэр',
+'pageinfo-header-edits' => 'Сурунаал уларытыыта',
+'pageinfo-header-restrictions' => 'Сирэйи көмүскээһин',
+'pageinfo-header-properties' => 'Сирэй туруоруулара',
+'pageinfo-display-title' => 'Көстөр аата',
+'pageinfo-default-sort' => 'Наардааһын күлүүһэ',
+'pageinfo-length' => 'Сирэй устата (баайтынан)',
+'pageinfo-article-id' => 'Сирэй нүөмэрэ',
+'pageinfo-robot-policy' => 'Көрдүүр сулууспалар туруктара',
+'pageinfo-robot-index' => 'Индекстанар',
+'pageinfo-robot-noindex' => 'Индекстаммат',
 'pageinfo-views' => 'Көрүү ахсаана',
-'pageinfo-watchers' => 'Кэтээччилэр ахсааннара',
-'pageinfo-edits' => 'Көннөрүү ахсаана',
+'pageinfo-watchers' => 'Кэтээнэр сирэйдэр ахсааннара',
+'pageinfo-redirects-name' => 'Бу сирэйгэ утаарыы ахсаана',
+'pageinfo-subpages-name' => 'Сирэй аннынааҕы сирэйдэр ахсааннара',
+'pageinfo-subpages-value' => '$1 ($2 утаарыы; $3 көннөрү (утаарыыта суох))',
+'pageinfo-firstuser' => 'Сирэйи айааччы',
+'pageinfo-firsttime' => 'Сирэй айыллыбыт кэмэ',
+'pageinfo-lastuser' => 'Тиһэх уларыппыт киһи',
+'pageinfo-lasttime' => 'Тиһэх уларытыы кэмэ',
+'pageinfo-edits' => 'Көннөрүү ахсаана барыта',
 'pageinfo-authors' => 'Бу сирэйи уларыппыт ааптардар ахсааннара',
+'pageinfo-recent-edits' => 'Кэнники кэмҥэ уларытыы ахсаана ($1 иһигэр)',
+'pageinfo-recent-authors' => 'Бу сирэйи уларыппыт киһи ахсаана',
+'pageinfo-magic-words' => 'Аптаах {{PLURAL:$1|тыл|тыллар}} ($1)',
+'pageinfo-hidden-categories' => 'Кистэммит {{PLURAL:$1|категория|категориялар}} ($1)',
+'pageinfo-templates' => '$1 халыыптаах ($1)',
+'pageinfo-contentpage-yes' => 'Сөп',
+'pageinfo-protect-cascading' => 'Каскаадынан көмүскэл мантан',
+'pageinfo-protect-cascading-yes' => 'Сөп',
+'pageinfo-protect-cascading-from' => 'Каскадынан көмүскэл мантан',
 
 # Skin names
 'skinname-standard' => 'Классика',
@@ -2830,6 +2901,7 @@ $1',
 'file-info-size-pages' => '$1 × $2 пиксель, билэ кээмэйэ: $3, MIME-көрүҥ: $4, $5 сирэйдээх',
 'file-nohires' => 'Бу ойуу маннааҕар улахан торума суох.',
 'svg-long-desc' => 'SVG билэ, номинальнай кээмэйэ $1 × $2 пииксэл, билэ кээмэйэ: $3',
+'svg-long-desc-animated' => '$1 × $2 пииксэллээх анимацияламмыт SVG-билэ, кээмэйэ: $3',
 'show-big-image' => 'Ойуу бэйэтин толору кээмэйэ',
 'show-big-image-preview' => 'Бигэргэтиэх иннинэ көрүү улахана: $1.',
 'show-big-image-other' => 'Атын {{PLURAL:$2|түмүк|түмүктэр}}: $1.',
@@ -2839,6 +2911,8 @@ $1',
 'file-info-png-looped' => 'төттөрү эргийэр',
 'file-info-png-repeat' => '{{PLURAL:$1|биирдэ|төгүл}} оонньонор $1',
 'file-info-png-frames' => '$1 {{PLURAL:$1|фреймнаах|фреймнардаах}}',
+'file-no-thumb-animation' => "'''Сэрэтии. Бу билэ куччатыллыбыт барыла техническэй төрүөттэн сылтаан хамсыа суоҕа.'''",
+'file-no-thumb-animation-gif' => "'''Сэрэтии. Манные GIF-билэлэр куччатыллыбыт барыллара техническэй төрүөтүнэн хамсыыр кыахтара суох.'''",
 
 # Special:NewFiles
 'newimages' => 'Саҥа билэлэр галереялара',
@@ -3510,7 +3584,7 @@ MediaWiki туһалаах буоллун диэн тарҕатыллар, ол
 'specialpages-group-highuse' => 'Элбэхтик туттуллар сирэйдэр',
 'specialpages-group-pages' => 'Сирэйдэр тиһиктэрэ',
 'specialpages-group-pagetools' => 'Сирэйдэр үнүстүрүмүөннэрэ',
-'specialpages-group-wiki' => 'Wiki дааннайдара уонна үнүстүрүмүөннэр',
+'specialpages-group-wiki' => 'Дааннайдара уонна тэриллэрэ',
 'specialpages-group-redirects' => 'Утаарар аналлаах сирэйдэр',
 'specialpages-group-spam' => 'Спаамы утары үнүстүрүмүөннэр',
 
@@ -3604,11 +3678,11 @@ MediaWiki туһалаах буоллун диэн тарҕатыллар, ол
 'logentry-move-move_redir-noredirect' => '$1 $3 сирэй аатын утаарыы үрдүнэн маннык $4 уларыппыт, утаарыы-сирэй оҥорботох',
 'logentry-patrol-patrol' => '$1 $3 сирэй $4 барылын ботуруулламмыт курдук бэлиэтээбит',
 'logentry-patrol-patrol-auto' => '$1 $3 сирэй $4 барылын аптамаатынан ботуруулламмыт курдук бэлиэтээбит',
-'logentry-newusers-newusers' => '$1 ÐºÑ\8bÑ\82Ñ\82ааÑ\87Ñ\87Ñ\8bнÑ\8b Ð±Ñ\8dлиÑ\8dÑ\82Ñ\8dÑ\8dбиÑ\82',
-'logentry-newusers-create' => '$1 ÐºÑ\8bÑ\82Ñ\82ааÑ\87Ñ\87Ñ\8bнÑ\8b Ð±Ñ\8dлиÑ\8dÑ\82Ñ\8dÑ\8dбиÑ\82',
-'logentry-newusers-create2' => '$3 кыттааччыны $1 бэлиэтээбит',
+'logentry-newusers-newusers' => '$1 Ð´Ð¸Ñ\8dн ÐºÑ\8bÑ\82Ñ\82ааÑ\87Ñ\87Ñ\8b Ð±Ñ\8dлиÑ\8dÑ\82Ñ\8dннÑ\8d',
+'logentry-newusers-create' => '$1 Ð´Ð¸Ñ\8dн ÐºÑ\8bÑ\82Ñ\82ааÑ\87Ñ\87Ñ\8b Ð±Ñ\8dлиÑ\8dÑ\82Ñ\8dннÑ\8d',
+'logentry-newusers-create2' => '$3 кыттааччы аатын $1 бэлиэтээбит',
 'logentry-newusers-autocreate' => 'Маннык аат $1 аптамаатынан бэлиэтэнилиннэ',
-'newuserlog-byemail' => 'киирии тыл эл. почтаннан ыытылынна',
+'rightsnone' => '(суох)',
 
 # Feedback
 'feedback-bugornote' => 'Туох кыһалҕаны көрсүбүккүн сиһилии суруйар кыахтаах буоллаххына, бука диэн [$1 алҕас туһунан биллэр].
index 8f39ea1..11346a6 100644 (file)
@@ -597,7 +597,6 @@ Amaḱ bodolaḱ kodo nit habićte bań rukhíạakana!",
 'template-protected' => 'Rukhiạ',
 'template-semiprotected' => '(Kạṭic-rukhiyạ)',
 'hiddencategories' => 'Noa sakam do {{PLURAL:$1 1 ukuakan bhag $1 uku akan bhagkorenaḱ}} gaõtarenge:',
-'nocreatetitle' => 'Sakam tear do akoṭgea',
 'nocreate-loggedin' => 'Nãwã sakam tear lạgit́te am do ạidạri em baṅ hoeakana.',
 'sectioneditnotsupported-title' => 'Pahaṭa sompadona do bae hataoeda',
 'sectioneditnotsupported-text' => 'Noa sompadona sakamre pahaṭa sompadona do bae hataoeda',
@@ -796,6 +795,9 @@ Amaḱ e-mail ṭhikạna do bań cabaḱa tinre onko do ko beohara',
 'right-upload' => 'Rẽtko rakabmẽ',
 'right-delete' => 'Sakamko get giḍiymẽ',
 
+# Special:Log/newusers
+'newuserlogpage' => 'Laṛcaṛićaḱ tear cạbi',
+
 # Associated actions - in the sentence "You do not have permission to X"
 'action-edit' => 'noa sakam joṛao',
 
@@ -935,9 +937,6 @@ Noa reaḱ pasnao katha [$2 rẽt pasnao sakam] latare emena',
 'listusers-submit' => 'Udugmẽ',
 'listusers-blocked' => '(Esetgea)',
 
-# Special:Log/newusers
-'newuserlogpage' => 'Laṛcaṛićaḱ tear cạbi',
-
 # Special:ListGroupRights
 'listgrouprights-group' => 'Gaõta',
 'listgrouprights-rights' => 'Ạidạriko',
@@ -970,6 +969,8 @@ Noa reaḱ pasnao katha [$2 rẽt pasnao sakam] latare emena',
 # Displayed when you click the "watch" button and it is in the process of watching
 'watching' => 'Ńeloḱ kana...',
 
+'changed' => 'Bodolena',
+
 # Delete
 'deletepage' => 'Sakam get giḍikam',
 'delete-legend' => 'Get giḍi',
index f243f2c..f41597f 100644 (file)
@@ -553,7 +553,6 @@ Cun s'imbiu de custu scritu ses garantende, a responsabilidade tua, si su scritu
 'template-protected' => '(amparadu)',
 'template-semiprotected' => '(mesu-amparadu)',
 'hiddencategories' => 'Custa pàgina faghet parte de {{PLURAL:$1|1 categoria cuada|$1 categorias cuadas}}:',
-'nocreatetitle' => 'Creatzione de pàginas limitada',
 'nocreate-loggedin' => 'Non tenes su permissu de creare pàginas noas.',
 'permissionserrors' => 'Faddina de permissos',
 'permissionserrorstext-withaction' => 'Non tenes su permissu de $2, pro {{PLURAL:$1|custu motivu|custus motivus}}:',
@@ -773,9 +772,11 @@ Prova a seberare ''totu:'' pro chircare in totu su cuntènnidu (inclùdidas pàg
 'right-undelete' => 'Restaurare una pàgina',
 'right-siteadmin' => 'Bloccare e sbloccare su database',
 
+# Special:Log/newusers
+'newuserlogpage' => 'Usuàrios nous',
+
 # User rights log
 'rightslog' => 'Deretos de is usuàrios',
-'rightsnone' => '(nisciunu)',
 
 # Associated actions - in the sentence "You do not have permission to X"
 'action-read' => 'lègher custa pàgina',
@@ -1011,9 +1012,6 @@ Dia podent essere immàgines impreadas dae àteros giassos cun unu ligàmine dir
 'activeusers-hidebots' => 'Cua bots',
 'activeusers-hidesysops' => 'Cua amministradores',
 
-# Special:Log/newusers
-'newuserlogpage' => 'Usuàrios nous',
-
 # Special:ListGroupRights
 'listgrouprights-group' => 'Grupu',
 'listgrouprights-members' => '(lista de is cumponentes)',
@@ -1064,6 +1062,7 @@ Is mudàntzias de custa pàgina e de sa pàgina de cuntierras sua ant a bennere
 'unwatching' => 'Boghende dae sa watchlist...',
 
 'enotif_impersonal_salutation' => 'Usuàriu de {{SITENAME}}',
+'created' => 'creada',
 
 # Delete
 'deletepage' => 'Fùlia pàgina',
@@ -1550,7 +1549,7 @@ Is acàpius chi sighint in sa matessi lìnia sunt cunsideraus comente eccetzione
 'htmlform-selectorother-other' => 'Àteru',
 
 # New logging system
-'newuserlog-byemail' => 'password imbiada via e-mail',
+'rightsnone' => '(nisciunu)',
 
 # Search suggestions
 'searchsuggest-search' => 'Chirca',
index 40f50d0..d2b9dc8 100644 (file)
@@ -51,89 +51,104 @@ $namespaceAliases = array(
 );
 
 $specialPageAliases = array(
-       'Allmessages'               => array( 'Missaggi' ),
-       'Allpages'                  => array( 'TuttiLiPàggini' ),
-       'Ancientpages'              => array( 'PàgginiMenuNovi' ),
-       'Blankpage'                 => array( 'PàgginaVacanti' ),
+       'Activeusers'               => array( 'UtentiAttivi' ),
+       'Allmessages'               => array( 'Messaggi' ),
+       'Allpages'                  => array( 'TutteLePagine' ),
+       'Ancientpages'              => array( 'PagineMenoRecenti' ),
+       'Badtitle'                  => array( 'TitoloErrato' ),
+       'Blankpage'                 => array( 'PaginaVuota' ),
        'Block'                     => array( 'Blocca' ),
        'Blockme'                   => array( 'BloccaProxy' ),
        'Booksources'               => array( 'RicercaISBN' ),
-       'BrokenRedirects'           => array( 'RinnirizzamentiSbagghiati' ),
-       'Categories'                => array( 'Catigurìi' ),
-       'ChangePassword'            => array( 'RimpostaPassword' ),
-       'Confirmemail'              => array( 'CunfermaEmail' ),
-       'Contributions'             => array( 'Cuntribbuti', 'CuntribbutiUtenti' ),
-       'CreateAccount'             => array( 'CrìatiNuCuntu' ),
-       'Deadendpages'              => array( 'PàgginiSenzaNisciuta' ),
-       'DeletedContributions'      => array( 'CuntribbutiScancillati' ),
-       'Disambiguations'           => array( 'Disambiguazzioni' ),
-       'DoubleRedirects'           => array( 'RinnirizzamentiDuppi' ),
-       'Emailuser'                 => array( 'MannaEmail' ),
+       'BrokenRedirects'           => array( 'RedirectErrati' ),
+       'Categories'                => array( 'Categorie' ),
+       'ChangeEmail'               => array( 'CambiaEmail' ),
+       'ChangePassword'            => array( 'CambiaPassword' ),
+       'ComparePages'              => array( 'ComparaPagine' ),
+       'Confirmemail'              => array( 'ConfermaEMail' ),
+       'Contributions'             => array( 'Contributi', 'ContributiUtente', 'Edit' ),
+       'CreateAccount'             => array( 'CreaAccount' ),
+       'Deadendpages'              => array( 'PagineSenzaUscita' ),
+       'DeletedContributions'      => array( 'ContributiCancellati' ),
+       'Disambiguations'           => array( 'Disambigua' ),
+       'DoubleRedirects'           => array( 'RedirectDoppi' ),
+       'EditWatchlist'             => array( 'ModificaOsservati', 'ModificaOsservatiSpeciali', 'ModificaListaSeguiti' ),
+       'Emailuser'                 => array( 'InviaEMail' ),
        'Export'                    => array( 'Esporta' ),
-       'Fewestrevisions'           => array( 'PàgginiCuCchiùPiccaRivisioni' ),
-       'Import'                    => array( 'Mporta' ),
-       'BlockList'                 => array( 'IPBluccati' ),
-       'LinkSearch'                => array( 'CercaCullicamenti' ),
-       'Listadmins'                => array( 'Amministratura' ),
-       'Listbots'                  => array( 'ListaBot' ),
-       'Listfiles'                 => array( 'Mmàggini' ),
-       'Listgrouprights'           => array( 'AlencuPirmessiGruppi' ),
-       'Listredirects'             => array( 'Rinnirizzamenti', 'ListaRinnirizzamenti' ),
-       'Listusers'                 => array( 'Utilizzatura', 'ListaUtilizzatura' ),
-       'Lockdb'                    => array( 'BloccaDB', 'BloccaDatabase' ),
-       'Log'                       => array( 'Riggistri', 'Riggistru' ),
-       'Lonelypages'               => array( 'PàgginiOrfani' ),
-       'Longpages'                 => array( 'PàgginiCchiùLonghi' ),
-       'MergeHistory'              => array( 'UnìficaCrunuluggìa' ),
+       'Fewestrevisions'           => array( 'PagineConMenoRevisioni' ),
+       'FileDuplicateSearch'       => array( 'CercaFileDuplicati' ),
+       'Filepath'                  => array( 'Percorso' ),
+       'Import'                    => array( 'Importa' ),
+       'Invalidateemail'           => array( 'InvalidaEMail' ),
+       'JavaScriptTest'            => array( 'TestJavaScript' ),
+       'BlockList'                 => array( 'IPBloccati', 'ElencoBlocchi', 'Blocchi' ),
+       'LinkSearch'                => array( 'CercaCollegamenti', 'CercaLink' ),
+       'Listadmins'                => array( 'Amministratori', 'ElencoAmministratori', 'Admin', 'Sysop', 'Cricca' ),
+       'Listbots'                  => array( 'Bot', 'ElencoBot' ),
+       'Listfiles'                 => array( 'File', 'Immagini' ),
+       'Listgrouprights'           => array( 'ElencoPermessiGruppi', 'Privilegi' ),
+       'Listredirects'             => array( 'Redirect', 'ElencoRedirect' ),
+       'Listusers'                 => array( 'Utenti', 'ElencoUtenti' ),
+       'Lockdb'                    => array( 'BloccaDB' ),
+       'Log'                       => array( 'Registri', 'Registro' ),
+       'Lonelypages'               => array( 'PagineOrfane' ),
+       'Longpages'                 => array( 'PaginePiùLunghe' ),
+       'MergeHistory'              => array( 'FondiCronologia', 'UnificaCronologia' ),
        'MIMEsearch'                => array( 'RicercaMIME' ),
-       'Mostcategories'            => array( 'PàgginiCuCchiossaiCatigurìi' ),
-       'Mostimages'                => array( 'MmàgginiCchiùRichiamati' ),
-       'Mostlinked'                => array( 'PàgginiCchiùRichiamati' ),
-       'Mostlinkedcategories'      => array( 'CatigurìiCchiùRichiamati' ),
-       'Mostlinkedtemplates'       => array( 'TemplateCchiùRichiamati' ),
-       'Mostrevisions'             => array( 'PàgginiCuCchiossaiRivisioni' ),
-       'Movepage'                  => array( 'Sposta', 'Rinòmina' ),
-       'Mycontributions'           => array( 'CuntribbutiMei' ),
-       'Mypage'                    => array( 'MèPàgginaUtenti' ),
-       'Mytalk'                    => array( 'DiscussioniMei' ),
-       'Newimages'                 => array( 'MmàgginiRicenti' ),
-       'Newpages'                  => array( 'PàgginiCchiùNovi' ),
-       'Popularpages'              => array( 'PàgginiCchiùVisitati' ),
-       'Preferences'               => array( 'Prifirenzi' ),
-       'Prefixindex'               => array( 'Prifissi' ),
-       'Protectedpages'            => array( 'PàgginiPrutiggiuti' ),
-       'Protectedtitles'           => array( 'TìtuliPrutiggiuti' ),
-       'Randompage'                => array( 'PàgginaAmmuzzu' ),
-       'Randomredirect'            => array( 'RedirectAmmuzzu' ),
-       'Recentchanges'             => array( 'ÙrtimiCanciamenti' ),
-       'Recentchangeslinked'       => array( 'CanciamentiCurrilati' ),
-       'Revisiondelete'            => array( 'ScancellaRivisioni' ),
-       'Search'                    => array( 'Ricerca', 'Cerca' ),
-       'Shortpages'                => array( 'PàgginiCchiùCurti' ),
-       'Specialpages'              => array( 'PàgginiSpiciali' ),
-       'Statistics'                => array( 'Statìstichi' ),
-       'Uncategorizedcategories'   => array( 'CatigurìiSenzaCatigurìi' ),
-       'Uncategorizedimages'       => array( 'MmàgginiSenzaCatigurìi' ),
-       'Uncategorizedpages'        => array( 'PàgginiSenzaCatigurìi' ),
-       'Uncategorizedtemplates'    => array( 'TemplateSenzaCatigurìi' ),
-       'Undelete'                  => array( 'Riprìstina' ),
-       'Unlockdb'                  => array( 'SbloccaDB', 'SbloccaDatabase' ),
-       'Unusedcategories'          => array( 'CatigurìiNonUsati' ),
-       'Unusedimages'              => array( 'MmàgginiNonUsati' ),
-       'Unusedtemplates'           => array( 'TemplateNunUsati' ),
-       'Unwatchedpages'            => array( 'PàgginiNunTaliati' ),
-       'Upload'                    => array( 'Càrrica' ),
-       'Userlogin'                 => array( 'Tràsi', 'Login' ),
-       'Userlogout'                => array( 'Nesci', 'Logout' ),
-       'Userrights'                => array( 'PirmessiUtenti' ),
-       'Version'                   => array( 'Virsioni' ),
-       'Wantedcategories'          => array( 'CatigurìiAddumannati' ),
-       'Wantedfiles'               => array( 'FileAddumannati' ),
-       'Wantedpages'               => array( 'PàgginiAddumannati' ),
-       'Wantedtemplates'           => array( 'TemplateAddumannati' ),
-       'Watchlist'                 => array( 'ArtìculiTaliati' ),
-       'Whatlinkshere'             => array( 'ChiPuntaCcà' ),
-       'Withoutinterwiki'          => array( 'SenzaInterwiki' ),
+       'Mostcategories'            => array( 'PagineConPiùCategorie' ),
+       'Mostimages'                => array( 'ImmaginiPiùRichiamate' ),
+       'Mostinterwikis'            => array( 'InterwikiPiùRichiamati' ),
+       'Mostlinked'                => array( 'PaginePiùRichiamate' ),
+       'Mostlinkedcategories'      => array( 'CategoriePiùRichiamate' ),
+       'Mostlinkedtemplates'       => array( 'TemplatePiùRichiamati' ),
+       'Mostrevisions'             => array( 'PagineConPiùRevisioni' ),
+       'Movepage'                  => array( 'Sposta', 'Rinomina' ),
+       'Mycontributions'           => array( 'MieiContributi' ),
+       'Mypage'                    => array( 'MiaPaginaUtente', 'MiaPagina' ),
+       'Mytalk'                    => array( 'MieDiscussioni' ),
+       'Myuploads'                 => array( 'MieiUpload', 'MieiEdit' ),
+       'Newimages'                 => array( 'ImmaginiRecenti' ),
+       'Newpages'                  => array( 'PaginePiùRecenti' ),
+       'PasswordReset'             => array( 'ReimpostaPassword' ),
+       'PermanentLink'             => array( 'LinkPermanente' ),
+       'Popularpages'              => array( 'PaginePiùVisitate' ),
+       'Preferences'               => array( 'Preferenze' ),
+       'Prefixindex'               => array( 'Prefissi' ),
+       'Protectedpages'            => array( 'PagineProtette' ),
+       'Protectedtitles'           => array( 'TitoliProtetti' ),
+       'Randompage'                => array( 'PaginaCasuale' ),
+       'Randomredirect'            => array( 'RedirectCasuale' ),
+       'Recentchanges'             => array( 'UltimeModifiche' ),
+       'Recentchangeslinked'       => array( 'ModificheCorrelate' ),
+       'Revisiondelete'            => array( 'CancellaRevisione' ),
+       'Search'                    => array( 'Arriscedi', 'Cerca', 'Trova' ),
+       'Shortpages'                => array( 'PaginePiùCorte' ),
+       'Specialpages'              => array( 'PagineSpeciali' ),
+       'Statistics'                => array( 'Statistiche' ),
+       'Tags'                      => array( 'Etichette', 'Tag' ),
+       'Unblock'                   => array( 'ElencoSblocchi', 'Sblocchi' ),
+       'Uncategorizedcategories'   => array( 'CategorieSenzaCategorie' ),
+       'Uncategorizedimages'       => array( 'ImmaginiSenzaCategorie' ),
+       'Uncategorizedpages'        => array( 'PagineSenzaCategorie' ),
+       'Uncategorizedtemplates'    => array( 'TemplateSenzaCategorie' ),
+       'Undelete'                  => array( 'Ripristina' ),
+       'Unlockdb'                  => array( 'SbloccaDB' ),
+       'Unusedcategories'          => array( 'CategorieNonUsate', 'CategorieVuote' ),
+       'Unusedimages'              => array( 'ImmaginiNonUsate' ),
+       'Unusedtemplates'           => array( 'TemplateNonUsati' ),
+       'Unwatchedpages'            => array( 'PagineNonOsservate' ),
+       'Upload'                    => array( 'Carica' ),
+       'Userlogin'                 => array( 'Entra', 'Login' ),
+       'Userlogout'                => array( 'Esci', 'Logout' ),
+       'Userrights'                => array( 'PermessiUtente' ),
+       'Version'                   => array( 'Versione' ),
+       'Wantedcategories'          => array( 'CategorieRichieste' ),
+       'Wantedfiles'               => array( 'FileRichiesti' ),
+       'Wantedpages'               => array( 'PagineRichieste' ),
+       'Wantedtemplates'           => array( 'TemplateRichiesti' ),
+       'Watchlist'                 => array( 'OsservatiSpeciali' ),
+       'Whatlinkshere'             => array( 'PuntanoQui' ),
+       'Withoutinterwiki'          => array( 'PagineSenzaInterwiki' ),
 );
 
 $messages = array(
@@ -761,7 +776,6 @@ L'amministraturi ca bluccau lu database lu fici pi stu mutivu: $1",
 'template-semiprotected' => '(semiprutettu)',
 'hiddencategories' => 'Sta pàggina apparteni a {{PLURAL:$1|na catigurìa ammuciata|$1 catigurìi ammuciati}}:',
 'edittools' => '<!-- Chistu testu cumpari sutta li moduli di canciu e carricamentu. -->',
-'nocreatetitle' => 'Criazzioni dî pàggini limitata',
 'nocreatetext' => "La pussibbilitati di criari pàggini novi nta {{SITENAME}} è limitata a l'utenti riggistrati. Poi turnari 'n arreri e canciari na pàggina esistenti, oppuru [[Special:UserLogin|tràsiri o criari nu cuntu novu]].",
 'nocreate-loggedin' => 'Nun hai lu pirmissu pi criari pàggini novi ntâ {{SITENAME}}.',
 'permissionserrors' => 'Erruri di pirmissu',
@@ -1232,11 +1246,13 @@ L'operazioni nun pò èssiri annullata.",
 'right-siteadmin' => 'Blocca a sblocca lu databasi',
 'right-override-export-depth' => 'Esporta pàggini cumpresi li pàggini culligati finu ô quintu liveddu',
 
+# Special:Log/newusers
+'newuserlogpage' => 'Novi utenti',
+'newuserlogpagetext' => 'Di sècutu vènunu elincati li criazzioni di cunti novi (account).',
+
 # User rights log
 'rightslog' => "Dritti di l'utenti",
 'rightslogtext' => "Chistu è un log dî canciamenti a li dritti di l'utenti.",
-'rightslogentry' => "hà canciatu l'appartinenza di $1 dû gruppu $2 a lu gruppu $3",
-'rightsnone' => '(nuddu)',
 
 # Associated actions - in the sentence "You do not have permission to X"
 'action-read' => 'lèggiri sta pàggina',
@@ -1716,10 +1732,6 @@ Protucolli suppurtati: <code>$1</code>',
 'activeusers-hidesysops' => 'Amministratura ammucciati',
 'activeusers-noresult' => 'Nussun utenti truvatu.',
 
-# Special:Log/newusers
-'newuserlogpage' => 'Novi utenti',
-'newuserlogpagetext' => 'Di sècutu vènunu elincati li criazzioni di cunti novi (account).',
-
 # Special:ListGroupRights
 'listgrouprights' => 'Diritti dô gruppu utenti',
 'listgrouprights-summary' => "Ccà sutta sunnu elincati li gruppi utenti difiniti pi sta wiki, cu li dritti d'accessu assuciati a iddi. Pi sapìrinni chiossai supra li dritti, lèggiti [[{{MediaWiki:Listgrouprights-helppage}}|sta pàggina]].",
@@ -1821,6 +1833,8 @@ Pi mudificari li mpustazzioni dâ lista di l\'ussirvati spiciali, vìsita
 
 Pi dari lu tò feedback e arricèviri ultiriuri assistenza:
 {{canonicalurl:{{MediaWiki:Helppage}}}}',
+'created' => 'criatu',
+'changed' => 'canciatu',
 
 # Delete
 'deletepage' => 'Elìmina la pàggina',
@@ -2977,7 +2991,7 @@ Mèttiri lu nomu dû file senza lu prifissu "{{ns:file}}:"',
 'revdelete-unrestricted' => 'ristrizzioni pi suli amministraturi rimossi',
 'logentry-move-move' => '$1 spustau la pàggina $3 a $4',
 'logentry-newusers-create' => '$1 criau na utenza',
-'newuserlog-byemail' => 'password mannata via mail',
+'rightsnone' => '(nuddu)',
 
 # Search suggestions
 'searchsuggest-search' => 'Ricerca',
index 8fae11a..7630872 100644 (file)
@@ -595,7 +595,6 @@ lang, an that's langer than the maximum of $2 kilobytes. It canna be hained.'''"
 'template-protected' => '(protectit)',
 'template-semiprotected' => '(semi-protectit)',
 'hiddencategories' => 'This page is a member of {{PLURAL:$1|1 hidden category|$1 hidden categories}}:',
-'nocreatetitle' => 'Page makkin limitit',
 'nocreatetext' => 'This site haes restrictit the ability to mak new pages.
 Ye can go back an eik tae an existing page, or [[Special:UserLogin|log in or mak an accoont]].',
 'nocreate-loggedin' => 'Ye dinnae hae the richts tae mak new pages on this wiki.',
@@ -808,6 +807,9 @@ Yer e-mail address insae revealed whin ither uisers contact ye.",
 # Rights
 'right-delete' => 'Delete pages',
 
+# Special:Log/newusers
+'newuserlogpage' => 'Uiser creation log',
+
 # User rights log
 'rightslog' => 'Uiser richts log',
 'rightslogtext' => 'This is a log o chynges tae uiser richts.',
@@ -1054,9 +1056,6 @@ Also see [[Special:WantedCategories|wanted categories]].',
 'listusers-submit' => 'Shaw',
 'listusers-blocked' => '(blockit)',
 
-# Special:Log/newusers
-'newuserlogpage' => 'Uiser creation log',
-
 # Special:ListGroupRights
 'listgrouprights-members' => '(leet o members)',
 
@@ -1095,6 +1094,8 @@ Also see [[Special:WantedCategories|wanted categories]].',
 
 'enotif_reset' => 'Merk aa pages visitit',
 'enotif_lastvisited' => 'Hae a leuk at $1 for aa chynges sin yer last visit.',
+'created' => 'creatit',
+'changed' => 'chynged',
 
 # Delete
 'deletepage' => 'Delete page',
index 7b37ec7..880e9b5 100644 (file)
@@ -713,6 +713,9 @@ $1 {{PLURAL:$1|اکر|اکرن}} کان ننڍي هوڻ گھرجي.',
 'watching' => 'ٽيٽيندي...',
 'unwatching' => 'اڻ ٽيٽيندي...',
 
+'created' => 'ٺهي چڪو',
+'changed' => 'تبديل ٿي ويو',
+
 # Delete
 'deletepage' => 'صفحو ڊاهيو',
 'confirm' => 'پڪ ڪريو',
index b63dd6b..0c16f3c 100644 (file)
@@ -652,7 +652,6 @@ Inviendi lu testhu ài la ripunsabiriddai chi lu testhu sia toiu oppuru sia i lu
 'template-semiprotected' => '(mezu-prutiggiddu)',
 'hiddencategories' => 'Chistha pagina appartheni a {{PLURAL:$1|una categuria cuadda|$1 categurì cuaddi}}:',
 'edittools' => '<!-- Testhu chi appari in giossu lu mòdulu di mudìfiga e di carriggamentu. -->',
-'nocreatetitle' => 'Criazioni di li pàgini limitadda',
 'nocreatetext' => '{{SITENAME}} à limitaddu la pussibiliddai di crià nobi pagini a li sori utenti registhraddi. È pussìbiri turrà indareddu e mudìfiggà una pàgina esisthenti, oppuru [[Special:UserLogin|intrà o crià una noba registhrazioni]].',
 'nocreate-loggedin' => 'No si diponi di li pimmissi nezzessàri pa crià nobi pàgini in {{SITENAME}}.',
 'permissionserrors' => 'Errori i li pimmissi',
@@ -907,11 +906,12 @@ Cunsulthà lu [{{fullurl:{{#Special:Log}}/suppress|page={{FULLPAGENAMEE}}}} rigi
 'grouppage-sysop' => '{{ns:project}}:Amministhradori',
 'grouppage-bureaucrat' => '{{ns:project}}:Buròcrati',
 
+# Special:Log/newusers
+'newuserlogpage' => 'Nobi utenti',
+
 # User rights log
 'rightslog' => 'Diritti di li utenti',
 'rightslogtext' => "Chisthu è lu rigisthru di lu mudìfigghi a li diritti assignaddi a l'utenti.",
-'rightslogentry' => "à mudìfiggaddu l'apparthinènzia di $1 da lu gruppu $2 a lu gruppu $3",
-'rightsnone' => '(nisciunu)',
 
 # Associated actions - in the sentence "You do not have permission to X"
 'action-edit' => 'mudìfiggà chistha pàgina',
@@ -1242,9 +1242,6 @@ Also see [[Special:WantedCategories|wanted categories]].",
 'listusers-submit' => 'Musthra',
 'listusers-noresult' => 'Nisciun utenti curripundi a li critéri impusthaddi.',
 
-# Special:Log/newusers
-'newuserlogpage' => 'Nobi utenti',
-
 # Special:ListGroupRights
 'listgrouprights-members' => '(erencu di li membri)',
 
@@ -1331,6 +1328,8 @@ Pa mudìfiggà l\'impusthazioni di la listha di l\'abbaidaddi ippiziari, visita
 
 Pa dì cosa ni pensi e dumandà assisthènzia:
 {{canonicalurl:{{MediaWiki:Helppage}}}}',
+'created' => 'criadda',
+'changed' => 'ciambadda',
 
 # Delete
 'deletepage' => 'Canzella pàgina',
@@ -2040,4 +2039,7 @@ Pa piazeri, cunfèimma chi vòi ricrià avveru chistha pàgina.",
 'htmlform-reset' => 'Annulla mudifigghi',
 'htmlform-selectorother-other' => 'Althru',
 
+# New logging system
+'rightsnone' => '(nisciunu)',
+
 );
index 6f8b233..31bd8ea 100644 (file)
@@ -519,7 +519,6 @@ Don fertet dahkat du rievdadusaid dálá tekstii.
 'template-protected' => '(suodjáluvvon)',
 'template-semiprotected' => '(suodjáluvvon anonyma ja ođđa geavaheddjiin)',
 'edittools' => '<!-- Teaksta mii lea dás, čájehuvvo rievdadanskovi vuolábealde. -->',
-'nocreatetitle' => 'Siidduid álggaheapmi lea ráddjejuvvon',
 
 # Account creation failure
 'cantcreateaccounttitle' => 'Dovddaldaga ráhkadeapmi ii lihkosmuvvan',
@@ -709,8 +708,6 @@ $1 {{int:pipe-separator}} $2',
 # User rights log
 'rightslog' => 'Logga geavaheaddjirievttiin',
 'rightslogtext' => 'Vuolábealde lea logga geavaheaddjirivttiid rievdadusain.',
-'rightslogentry' => 'Geavaheaddji $1 rievttit rievdaduvvoi joavkkuin $2 joavkkuide $3',
-'rightsnone' => '(eai rievttit)',
 
 # Recent changes
 'nchanges' => '$1 {{PLURAL:$1|rievdadus|rievdadusa}}',
@@ -1045,6 +1042,8 @@ Also see [[Special:WantedCategories|wanted categories]].',
 'enotif_lastvisited' => 'Čujuhusas $1 leat buot rievdadusat du maŋimus geavahangearddi maŋŋá.',
 'enotif_lastdiff' => 'Rievdadus lea čujuhusas $1.',
 'enotif_anon_editor' => 'registereretkeahtes geavaheaddji $1',
+'created' => 'álggahan siiddu',
+'changed' => 'rievdadan siiddu',
 
 # Delete
 'deletepage' => 'Sihko siiddu',
@@ -1466,6 +1465,7 @@ Siiddus $2 lea listu maŋimus sihkomiin.',
 'logentry-move-move_redir-noredirect' => '$1 sirddii siiddu $3 nammii $4 iige ráhkadan ođđasitstivrema',
 'logentry-newusers-create' => '$1 ráhkadii dovddaldaga',
 'logentry-newusers-autocreate' => 'Dovddaldat $1 ráhkaduvvui automáhtalaččat',
+'rightsnone' => '(eai rievttit)',
 
 # Search suggestions
 'searchsuggest-search' => 'Oza',
index 4b19c56..7c4d997 100644 (file)
@@ -504,7 +504,6 @@ Jan lajxepe occuram me usadad proxy service anon web-based buggy.'''",
 'templatesusedsection' => 'Automií usadad jan seccion iti:',
 'template-protected' => '(protectöx)',
 'template-semiprotected' => '(semi-protectöx)',
-'nocreatetitle' => 'Limiitde creacionde páhinám',
 'nocreatetext' => 'Jan site coccebj avlutuatl altede creatöx hun páhinám.
 Me pos-coccebj revertöx ö ticpatlöx janpáhinám jöx [[Special:UserLogin|caápo]].',
 'nocreate-loggedin' => 'Me necoccebj permiccionde creatöx hunpáhinám jan wiki iti.',
@@ -659,9 +658,6 @@ Informacion: (curt) = quiíxde vercion currentua,
 'grouppage-sysop' => '{{ns:project}}:Sysopam',
 'grouppage-bureaucrat' => '{{ns:project}}:Bureaucrátam',
 
-# User rights log
-'rightsnone' => '(zéro)',
-
 # Recent changes
 'nchanges' => '$1 {{PLURAL:$1|quiix|quíix}}',
 'recentchanges' => 'Camjöx cmaa',
@@ -888,6 +884,8 @@ iitom e-iitomde diijömde caitóm.',
 
 'enotif_impersonal_salutation' => '{{SITENAME}} caitom',
 'enotif_anon_editor' => 'caitom anoniimom $1',
+'created' => 'creacöx',
+'changed' => 'quiixöx',
 
 # Delete
 'deletepage' => 'Delatar páhina',
@@ -1058,4 +1056,7 @@ iitom e-iitomde diijömde caitóm.',
 # Special:SpecialPages
 'specialpages' => 'Páhinám extravám',
 
+# New logging system
+'rightsnone' => '(zéro)',
+
 );
index bb9a485..6f981d1 100644 (file)
@@ -613,7 +613,6 @@ tudie negaliesėt ėšsauguotė sava pakeitėmu daba. Tamsta galėt nosėkopėjo
 'template-protected' => '(apsauguots)',
 'template-semiprotected' => '(posiau apsauguots)',
 'hiddencategories' => 'Tas poslapis prėklausa $1 {{PLURAL:$1|pakavuotā kateguorėjē|pakavuotoms kateguorėjėms|pakavuotu kateguorėju}}:',
-'nocreatetitle' => 'Poslapiu kūrims aprėbuots',
 'nocreatetext' => '{{SITENAME}} aprėbuojė galėmībe kortė naujus poslapius.
 Tamsta galėt grīžtė ė redagoutė nūnā esonti poslapi, a [[Special:UserLogin|prėsėjongtė a sokortė paskīra]].',
 'permissionserrors' => 'Teisiu klaida',
@@ -877,11 +876,12 @@ Ana gal sodarītė ne daugiau kāp $1 {{PLURAL:$1|sėmbuolis|sėmbuolē|sėmbuol
 'right-read' => 'Skaitītė poslapius',
 'right-edit' => 'Keistė poslapius',
 
+# Special:Log/newusers
+'newuserlogpage' => 'Nauduotuojė kūrėma regėstros',
+
 # User rights log
 'rightslog' => 'Nauduotuoju teisiu istuorėjė',
 'rightslogtext' => 'Pateikiams nauduotuoju teisiu pakeitėmu sārašos.',
-'rightslogentry' => 'pakeista $1 gropės narīstė ėš $2 i $3. Sveikėnam!',
-'rightsnone' => '(juokiū)',
 
 # Associated actions - in the sentence "You do not have permission to X"
 'action-edit' => 'redagoutė ta poslapi',
@@ -1226,9 +1226,6 @@ Also see [[Special:WantedCategories|wanted categories]].',
 'listusers-submit' => 'Ruodītė',
 'listusers-noresult' => 'Nerast anėjuokiū nauduotuoju.',
 
-# Special:Log/newusers
-'newuserlogpage' => 'Nauduotuojė kūrėma regėstros',
-
 # Special:ListGroupRights
 'listgrouprights' => 'Nauduotuoju gropiu teisės',
 'listgrouprights-group' => 'Gropė',
@@ -1288,6 +1285,8 @@ Jēgo bikumet ožsėnuorietomiet liautėis keravuotė straipsnė, spauskat \"neb
 
 'enotif_reset' => 'Pažīmietė vėsus poslapius kāp aplonkītus',
 'enotif_anon_editor' => 'anuonėminis nauduotuos $1',
+'created' => 'sokūrė',
+'changed' => 'pakeitė',
 
 # Delete
 'deletepage' => 'Trintė poslapi',
@@ -1963,6 +1962,6 @@ Tamsta tēpuogi galėt [[Special:EditWatchlist/raw|redagoutė grīnaji keravuoja
 'logentry-newusers-newusers' => '$1 padėrba nauduotuojė paskīra',
 'logentry-newusers-create2' => '$1 padėrba nauduotuojė paskīra $3',
 'logentry-newusers-autocreate' => 'Paskīra $1 bova padėrbta autuomatėškā',
-'newuserlog-byemail' => 'slaptažuodis ėšsiōsts par el. pašta',
+'rightsnone' => '(juokiū)',
 
 );
index da72293..b323f35 100644 (file)
@@ -968,7 +968,6 @@ Posljednja stavka registra je prikazana ispod kao referenca:",
 'template-protected' => '(zaštićeno)',
 'template-semiprotected' => '(polu-zaštićeno)',
 'hiddencategories' => 'Ova stranica pripada {{PLURAL:$1|1 skrivenoj kategoriji|$1 skrivenim kategorijama}}:',
-'nocreatetitle' => 'Stvaranje stranica ograničeno',
 'nocreatetext' => '{{SITENAME}} je ograničio/la postavljanje novih stranica.
 Možete se vratiti i uređivati već postojeće stranice ili se [[Special:UserLogin|prijaviti ili otvoriti korisnički račun]].',
 'nocreate-loggedin' => 'Nemate dopuštenje da kreirate nove stranice.',
@@ -1524,15 +1523,13 @@ Ako izaberete da date ime, biće korišteno za pripisivanje Vašeg rada.',
 'right-sendemail' => 'Slanje e-maila drugim korisnicima',
 'right-passwordreset' => 'Pregled e-maila za obnavljanje lozinke',
 
+# Special:Log/newusers
+'newuserlogpage' => 'Registar novih korisnika',
+'newuserlogpagetext' => 'Ovo je evidencija registracije novih korisnika.',
+
 # User rights log
 'rightslog' => 'Registar korisničkih prava',
 'rightslogtext' => 'Ovo je evidencija izmjene korisničkih prava.',
-'rightslogentry' => 'promjena članstva u grupi za $1 sa $2 na $3',
-'rightslogentry-autopromote' => 'je automatski unaprijeđen iz $2 u $3',
-'logentry-rights-rights' => '$1 {{GENDER:$1|je promijenio|je promijenila|je promijenio}} članstvo grupe za $3 iz $4 u $5',
-'logentry-rights-rights-legacy' => '$1 {{GENDER:$1|je promenio|je promenila|je promenio}} članstvo grupe za $3',
-'logentry-rights-autopromote' => '$1 je automatski {{GENDER:$1|unaprijeđen|unaprijeđena|unaprijeđen}} iz $4 u $5',
-'rightsnone' => '(nema)',
 
 # Associated actions - in the sentence "You do not have permission to X"
 'action-read' => 'čitanje ove stranice',
@@ -2176,10 +2173,6 @@ Podržani protokoli: <tt>$1</tt> (zadaje http:// ako ne navedete protokol).',
 'activeusers-hidesysops' => 'Sakrij administratore',
 'activeusers-noresult' => 'Nije pronađen korisnik.',
 
-# Special:Log/newusers
-'newuserlogpage' => 'Registar novih korisnika',
-'newuserlogpagetext' => 'Ovo je evidencija registracije novih korisnika.',
-
 # Special:ListGroupRights
 'listgrouprights' => 'Prava korisničkih grupa',
 'listgrouprights-summary' => 'Slijedi spisak korisničkih grupa na ovoj wiki, s njihovim pravima pristupa.
@@ -2315,6 +2308,8 @@ $UNWATCHURL
 
 Povratne informacije i daljnja pomoć:
 {{canonicalurl:{{MediaWiki:Helppage}}}}',
+'created' => 'napravljena',
+'changed' => 'promijenjena',
 
 # Delete
 'deletepage' => 'Izbrišite stranicu',
@@ -3102,6 +3097,7 @@ Njegovim izvršavanjem možete da ugrozite Vaš sistem.",
 'file-nohires' => 'Veća rezolucija nije dostupna.',
 'svg-long-desc' => 'SVG fajl, nominalno $1 × $2 piksela, veličina fajla: $3',
 'svg-long-desc-animated' => 'Animirana SVG datoteka, nominalno: $1 × $2 piksela, veličina: $3',
+'svg-long-error' => 'Nevaljana SVG datoteka: $1',
 'show-big-image' => 'Puna rezolucija',
 'show-big-image-preview' => 'Veličina ovog prikaza: $1.',
 'show-big-image-other' => '{{PLURAL:$2|Druga rezolucija|Druge rezolucije}}: $1.',
@@ -3889,7 +3885,10 @@ Slike su prikazane u punoj veličini, ostale vrste datoteka su prikazane direktn
 'logentry-newusers-create' => 'Korisnički račun $1 je napravljen',
 'logentry-newusers-create2' => 'Korisnički račun $3 {{GENDER:|je napravio|je napravila|je napravio}} $1',
 'logentry-newusers-autocreate' => 'Račun $1 je samostalno otvoren',
-'newuserlog-byemail' => 'lozinka je poslana putem e-maila',
+'logentry-rights-rights' => '$1 {{GENDER:$1|je promijenio|je promijenila|je promijenio}} članstvo grupe za $3 iz $4 u $5',
+'logentry-rights-rights-legacy' => '$1 {{GENDER:$1|je promenio|je promenila|je promenio}} članstvo grupe za $3',
+'logentry-rights-autopromote' => '$1 je automatski {{GENDER:$1|unaprijeđen|unaprijeđena|unaprijeđen}} iz $4 u $5',
+'rightsnone' => '(nema)',
 
 # Feedback
 'feedback-bugornote' => 'Ako ste spremni da detaljno opišete tehnički problem, onda [$1 prijavite grešku].
@@ -3963,6 +3962,4 @@ U suprotnom, poslužite se jednostavnim obrascem ispod. Vaš komentar će stajat
 'duration-centuries' => '$1 {{PLURAL:$1|vijek|vijekova}}',
 'duration-millennia' => '$1 {{PLURAL:$1|milenijum|milenijuma}}',
 
-# Unknown messages
-'svg-long-error' => 'Nevaljana SVG datoteka: $1',
 );
index bc0e71e..696c4fb 100644 (file)
@@ -740,9 +740,11 @@ Izdar ad urtili ɣ isbidn n mayllan ɣ {{SITENAME}} .',
 
 'grouppage-sysop' => '{{ns:project}}: Inedbalen',
 
+# Special:Log/newusers
+'newuserlogpage' => 'Aɣmis n willi mmurzmn imiḍan amsqdac',
+
 # User rights log
 'rightslog' => 'Anɣmas n imbddlnn izrfan n umsqdac',
-'rightsnone' => '(ḥtta yan)',
 
 # Associated actions - in the sentence "You do not have permission to X"
 'action-read' => 'Ssɣr tasna yad',
@@ -906,9 +908,6 @@ Mel imbddeln z tisniwin li ittuyzdayni bla tasna li trit.',
 'linksearch' => 'Izdayn n brra',
 'linksearch-line' => '$1 tmmuttid z $2',
 
-# Special:Log/newusers
-'newuserlogpage' => 'Aɣmis n willi mmurzmn imiḍan amsqdac',
-
 # Special:ListGroupRights
 'listgrouprights-members' => 'Umuɣ n  midn',
 
@@ -1353,5 +1352,6 @@ Wiyyaḍ raggis ḥbun s ɣiklli sttin kkan gantn.
 # New logging system
 'revdelete-restricted' => 'iskr aqn i indbaln',
 'revdelete-unrestricted' => 'Aqn iḥiyd i indbaln',
+'rightsnone' => '(ḥtta yan)',
 
 );
index bbba547..0dbb6f3 100644 (file)
@@ -613,6 +613,7 @@ $2',
 'remembermypassword' => 'මාගේ පිවිසීම මෙම ගවේෂක මතකයෙහි (උපරිම ලෙස {{PLURAL:$1|දින|දින}}) $1 ක් මතක තබාගන්න',
 'securelogin-stick-https' => 'ඇතුල්වීමෙන් පසුවද HTTPS හරහා සම්බන්ධ වන්න',
 'yourdomainname' => 'ඔබගේ වසම:',
+'password-change-forbidden' => 'ඔබට මෙම විකියෙහි මුරපද වෙනස් කල නොහැක.',
 'externaldberror' => 'එක්කෝ සත්‍යාවත් දත්ත-ගබඩා දෝෂයක් පැවතුනි නැතිනම් ඔබගේ බාහිර ගිණුම යාවත්කාලීන කිරීමට ඔබ හට අවසර දී නොමැත.',
 'login' => 'පිවිසෙන්න',
 'nav-login-createaccount' => 'පිවිසෙන්න / නව ගිණුමක් තනන්න',
@@ -686,6 +687,7 @@ $2',
 'invalidemailaddress' => 'විද්‍යුත්-තැපැල් ලිපිනයෙහි  ආකෘතිය අනීතික බවක් ‍ පිළිබිඹු කරන බැවින් එය පිළිගත නොහැක.
 මනා-ආකෘතියකින් සුසැදි ලිපිනයක් ඇතුළත් කිරීමට හෝ එම ක්ෂේත්‍රය සිස් කිරීම‍ට හෝ කාරුණික වන්න.',
 'cannotchangeemail' => 'මෙම විකියේ ගිණුම් විද්‍යුත් ලිපිනය වෙනස් කල නොහැකිය.',
+'emaildisabled' => 'මෙම අඩවියට විද්‍යුත්-තැපැල් යැවිය නොහැක.',
 'accountcreated' => 'ගිණුම තනන ලදි',
 'accountcreatedtext' => ' $1 සඳහා පරිශීලක ගිණුම තනන ලදි.',
 'createaccount-title' => '{{SITENAME}} සඳහා ගිණුම තැනීම',
@@ -756,6 +758,7 @@ $2
 'changeemail-oldemail' => 'වත්මන් විද්‍යුත් තැපැල් ලිපිනය:',
 'changeemail-newemail' => 'නව විද්‍යුත් තැපැල් ලිපිනය:',
 'changeemail-none' => '(කිසිවක් නොමැත)',
+'changeemail-password' => 'ඔබේ {{SITENAME}} මුරපදය:',
 'changeemail-submit' => 'විද්‍යුත් තැපෑල  වෙනස් කරන්න',
 'changeemail-cancel' => 'අවලංගු කරන්න',
 
@@ -939,7 +942,6 @@ $2
 'template-semiprotected' => '(අර්ධ-ආරක්‍ෂිත)',
 'hiddencategories' => 'මෙම පිටුව, {{PLURAL:$1| එක් සැඟවුණු ප්‍රවර්ගයක| සැඟවුණු ප්‍රවර්ගයන් $1 ක}} අවයවයක් වේ:',
 'edittools' => '<!-- මෙම පෙළ සංස්කරණ හා උඩුගත ආකෘතින්ට පහළින් පෙන්නුම් කෙරේ. -->',
-'nocreatetitle' => 'පිටු තැනීම සීමා කර ඇත',
 'nocreatetext' => 'නව පිටු තැනීමේ හැකියාව {{SITENAME}} විසින් සීමාකර ඇත.
 ඔබ හට පෙරළා ගොස්,  දැනට පවතින පිටුවක් සංස්කරණය කිරීම හෝ,  [[Special:UserLogin|ගිණුමකට ප්‍රවිෂ්ට වීම හෝ  නව ගිණුමක් තැනීම හෝ]] සිදුකල හැක.',
 'nocreate-loggedin' => '{{SITENAME}} හි නව පිටු තැනීමට අවසරයක් ඔබ හට ප්‍රදානය කොට නොමැත.',
@@ -963,6 +965,14 @@ $2
 'edit-no-change' => 'පෙළට කිසිදු වෙනසක් සිදු නොකල  බැවින් ඔබගේ සංස්කරණය නොසලකාහරින ලදි.',
 'edit-already-exists' => 'නව පිටුවක් තැනිය නොහැකි විය.
 එය දැනටමත් පවතියි.',
+'defaultmessagetext' => 'සාමාන්‍ය පණිවුඩ පෙළ',
+'invalid-content-data' => 'වලංගු නොවන අන්තර්ගත දත්ත',
+
+# Content models
+'content-model-wikitext' => 'විකිපෙළ',
+'content-model-text' => 'සාමාන්‍ය පෙළ',
+'content-model-javascript' => 'ජාවාස්ක්‍රිප්ට්',
+'content-model-css' => 'CSS',
 
 # Parser/template warnings
 'expensive-parserfunction-warning' => 'අවවාදයයි: මෙම පිටුවෙහි අධිවැය ව්‍යාකරණ විග්‍රහ ශ්‍රිත කැඳවුම් (expensive parser function calls) පමණට වඩා ඇත.
@@ -1253,6 +1263,7 @@ $1",
 'prefs-beta' => 'බීටා අනුවාදයේ ලක්ෂණ',
 'prefs-datetime' => 'දිනය සහ වේලාව',
 'prefs-labs' => 'Labs features',
+'prefs-user-pages' => 'පරිශීලක පිටු',
 'prefs-personal' => 'පරිශීලක පැතිකඩ',
 'prefs-rc' => '‍නව වෙනස්වීම්',
 'prefs-watchlist' => 'මුර-ලැයිස්තුව',
@@ -1317,9 +1328,9 @@ $1",
 'prefs-emailconfirm-label' => 'විද්‍යුත්-ලිපිනය තහවුරුකිරීම:',
 'prefs-textboxsize' => 'සංස්කරණ කවුළුවෙහි ප්‍රමාණය',
 'youremail' => 'විද්‍යුත් තැපෑල:',
-'username' => 'පරිශීලක නාමය:',
-'uid' => 'පරිශීලක අනන්‍යාංකය:',
-'prefs-memberingroups' => 'ඉදිරියේ දැක්වෙන {{PLURAL:$1|කණ්ඩායමෙහි|කණ්ඩායම් වල}} සාමාජිකයෙකි:',
+'username' => '{{GENDER:$1|පරිශීලක නාමය}}:',
+'uid' => '{{GENDER:$1|පරිශීලක}} අනන්‍යාංකය:',
+'prefs-memberingroups' => 'ඉදිරියේ දැක්වෙන {{PLURAL:$1|කණ්ඩායමෙහි|කණ්ඩායම් වල}} {{GENDER:$2|සාමාජිකයෙකි}}:',
 'prefs-registration' => 'ලියාපදිංචිවූ වේලාව:',
 'yourrealname' => 'සැබෑ නාමය:',
 'yourlanguage' => 'භාෂාව:',
@@ -1470,12 +1481,13 @@ HTML ටැගයන් පිරික්සන්න.',
 'right-sendemail' => 'අනෙක් පරිශීලකයන්ට ඊ-ලිපි යවන්න',
 'right-passwordreset' => 'මුරපද යලි සැකසීම් විද්‍යුත් තැපෑලයන් නරඹන්න',
 
+# Special:Log/newusers
+'newuserlogpage' => 'පරිශීලකයන් තැනීමේ සටහන',
+'newuserlogpagetext' => 'මෙය පරිශිලකයන් තැනීම පිළිබඳ සටහනකි.',
+
 # User rights log
 'rightslog' => 'පරිශීලක හිමිකම් සටහන',
 'rightslogtext' => 'මෙය පරිශීලකයන්ගේ හිමිකම් වෙනස්වීම් පිළිබඳ ලඝු-සටහනකි.',
-'rightslogentry' => '$1 සඳහා කණ්ඩායම් සාමාජිකත්වය $2 සිට $3 දක්වා වෙනස්කෙරිණි',
-'rightslogentry-autopromote' => 'ස්වයංක්‍රීය ලෙසින් $2 සිට $3 දක්වා උසස් කරන ලදි',
-'rightsnone' => '(කිසිවක් නොමැත)',
 
 # Associated actions - in the sentence "You do not have permission to X"
 'action-read' => 'මෙම පිටුව කියවන්න',
@@ -1963,6 +1975,7 @@ When filtered by user, only files where that user uploaded the most recent versi
 # Miscellaneous special pages
 'nbytes' => '{{PLURAL:$1|බයිටි|බයිට්}} $1 ක්',
 'ncategories' => '{{PLURAL:$1|එක් ප්‍රවර්ගයකි|ප්‍රවර්ගයන් $1 කි}}',
+'ninterwikis' => '{{PLURAL:$1|අන්තර්විකි}} $1 ක්',
 'nlinks' => '{{PLURAL:$1|එක් සබැඳියකි|සබැඳියන් $1 කි}}',
 'nmembers' => '{{PLURAL:$1|එක් සාමාජිකයෙකි|සාමාජීකයන් $1 කි}}',
 'nrevisions' => '{{PLURAL:$1|එක් සංශෝධනයකි|සංශෝධන $1 කි }}',
@@ -2106,10 +2119,6 @@ When filtered by user, only files where that user uploaded the most recent versi
 'activeusers-hidesysops' => 'පරිපාලකයින් සඟවන්න',
 'activeusers-noresult' => 'කිසිදු පරිශීලකයෙකු හමුනොවිණි.',
 
-# Special:Log/newusers
-'newuserlogpage' => 'පරිශීලකයන් තැනීමේ සටහන',
-'newuserlogpagetext' => 'මෙය පරිශිලකයන් තැනීම පිළිබඳ සටහනකි.',
-
 # Special:ListGroupRights
 'listgrouprights' => 'පරිශීලක කාණ්ඩ හිමිකම්',
 'listgrouprights-summary' => 'මෙම විකියේ අර්ථදක්වා ඇති පරිශීලක කාණ්ඩ ලැයිස්තුවක් ඔවුනට අදාළ ප්‍රවේශ හිමිකම්ද සමගින් මෙහි පහත ලැයිස්තුගත කොට ඇත.
@@ -2236,6 +2245,8 @@ $UNWATCHURL
 
 Feedback and further assistance:
 {{canonicalurl:{{MediaWiki:Helppage}}}}',
+'created' => 'තනන ලදි',
+'changed' => 'වෙනස්කරන ලදි',
 
 # Delete
 'deletepage' => 'පිටුව මකා දමන්න',
@@ -2323,9 +2334,9 @@ $2 ගේ අවසන් අනුවාදය වෙතට යළි වෙන
 'protect-cascadeon' => 'තීරු දර්ශන ආරක්ෂණය (cascading protection) බල ගන්වා ඇති පහත  {{PLURAL:$1|පිටුව|පිටු}} අන්තර්ගත වීම හේතුවෙන් මෙම පිටුව දැනට ආරක්ෂණයට ලක්ව ඇත.
 පිටුවෙහි ආරක්ෂණ මට්ටම ඔබ විසින් වෙනස් කල හැකි නමුදු, එම ක්‍රියාව තීරු දර්ශන ආරක්ෂණය කෙරෙහි බලපෑම් ඇති නොකරනු ඇත.',
 'protect-default' => 'සියළු පරිශිලකයන්ට ඉඩ සලසන්න',
-'protect-fallback' => '"$1" à¶\85à·\80à·\83රය à\85à·\80à·\81à·\8aâ\80\8dය à·\80à·\9a',
-'protect-level-autoconfirmed' => 'නà·\80 à·\83à·\84 à¶½à·\92යà·\8fපදà·\92à¶\82චà·\92 à·\80à·\93 à¶±à·\9cමà·\90තà·\92 à¶´à¶»à·\92à·\81à·\93ලà¶\9aයනà·\8a à·\80à·\8fරණය à¶\9aරන්න',
-'protect-level-sysop' => 'පරà·\92පà·\8fලà¶\9aà·\80රà·\94නà·\8aට à¶´à¶¸à¶«à¶ºà·\92',
+'protect-fallback' => '"$1" à¶\85à·\80à·\83රය à·\83à·\84à·\92ත à¶´à¶»à·\92à·\81à·\93ලà¶\9aයනà·\8aට à¶´à¶¸à¶«à¶\9aà·\8a à¶\89ඩදà·\99නà·\8aන',
+'protect-level-autoconfirmed' => 'à·\83à·\8aà·\80යà¶\82තà·\84à·\80à·\94රà·\94 à¶\9aල à¶´à¶»à·\92à·\81à·\93ලà¶\9aයනà·\8aට à¶´à¶¸à¶«à¶\9aà·\8a à¶\89ඩදà·\99න්න',
+'protect-level-sysop' => 'පරà·\92පà·\8fලà¶\9aà·\80රà·\94නà·\8aට à¶´à¶¸à¶«à¶\9aà·\8a à¶\89ඩදà·\99නà·\8aන',
 'protect-summary-cascade' => 'තීරු දර්ශනය (cascading)',
 'protect-expiring' => 'ඉකුත් වේ  $1 (යූටීසි)',
 'protect-expiring-local' => 'කල් ඉකුත්වීම $1',
@@ -2782,6 +2793,7 @@ $1 ගේ වාරණයට හේතුව මෙය වේ: "$2"',
 'import-interwiki-templates' => 'සියළු සැකිලි අන්තර්ගත කරන්න',
 'import-interwiki-submit' => 'ආයාත කරන්න',
 'import-interwiki-namespace' => 'ගමනාන්ත නාමඅවකාශය:',
+'import-interwiki-rootpage' => 'ගමනාන්ත මූල පිටුව (අමතර)ථ',
 'import-upload-filename' => 'ගොනු-නාමය:',
 'import-comment' => 'පරිකථනය:',
 'importtext' => 'කරුණාකර [[Special:Export|නිර්යාත උපයුක්තය]] භාවිත කරමින් මූලාශ්‍ර විකිය මගින් ගොනුව නිර්යාත කරන්න .
@@ -2815,6 +2827,7 @@ $1 ගේ වාරණයට හේතුව මෙය වේ: "$2"',
 'import-invalid-interwiki' => 'සඳහන් කර ඇති විකියෙන් ආයාත කිරීම සිදු කල නොහැක.',
 'import-error-edit' => '"$1" පිටුව ආයාත නොකරන ලදී මන්ද ඔබට එය සංස්කරණය කිරීමට ඉඩ නොදේ.',
 'import-error-create' => '"$1" පිටුව ආයාත නොකරන ලදී මන්ද ඔබට එය තැනීමට ඉඩ නොදේ.',
+'import-rootpage-invalid' => 'ලබා දුන් මූල පිටුව වැරදි ශීර්ෂයක් වේ.',
 
 # Import log
 'importlogpage' => 'ලඝු-සටහන් ආයාත කරන්න',
@@ -2953,11 +2966,15 @@ $1 ගේ වාරණයට හේතුව මෙය වේ: "$2"',
 'pageinfo-header-basic' => 'මූලික තොරතුරු',
 'pageinfo-header-edits' => 'සංස්කරණ',
 'pageinfo-header-restrictions' => 'පිටු ආරක්ෂණය',
+'pageinfo-header-properties' => 'පිටු ගුණාංග',
 'pageinfo-display-title' => 'මාතෘකාව පෙන්වන්න',
 'pageinfo-default-sort' => 'පෙරනිමි තේරීම් යතුර',
 'pageinfo-length' => 'පිටු දිග (බයිට් වලින්)',
 'pageinfo-article-id' => 'පිටු අනන්‍යනාංකය',
+'pageinfo-language' => 'පිටු අන්තර්ගතයේ භාෂාව',
 'pageinfo-robot-policy' => 'සෙවුම් එන්ජිම් තත්ත්වය',
+'pageinfo-robot-index' => 'සුචිමය',
+'pageinfo-robot-noindex' => 'සුචිමය නොවන',
 'pageinfo-views' => 'නැරඹුම් සංඛ්‍යාව',
 'pageinfo-watchers' => 'පිටු මුරකරන්නන් සංඛ්‍යාව',
 'pageinfo-redirects-name' => 'මෙම පිටුවට යළියොමු ගණන',
@@ -2973,6 +2990,11 @@ $1 ගේ වාරණයට හේතුව මෙය වේ: "$2"',
 'pageinfo-recent-authors' => 'මෑත ප්‍රභින්න කර්තෘවරුන් සංඛ්‍යාව',
 'pageinfo-magic-words' => 'මැජික් {{PLURAL:$1|වචනය|වචන}} ($1)',
 'pageinfo-toolboxlink' => 'පිටු තොරතුරු',
+'pageinfo-redirectsto' => 'වෙත යළියොමු කරන්න',
+'pageinfo-redirectsto-info' => 'තොරතුරු',
+'pageinfo-contentpage' => 'අන්තර්ගත පිටුවක් ලෙස ගණනය ගණනය කර ඇත',
+'pageinfo-contentpage-yes' => 'ඔව්',
+'pageinfo-protect-cascading-yes' => 'ඔව්',
 
 # Patrolling
 'markaspatrolleddiff' => 'පරික්ෂාකර බැලූ ලෙස සලකුණු කරන්න',
@@ -3016,6 +3038,7 @@ $1',
 'file-info-size-pages' => '$1 × $2 පික්සල, ගොනු තරම: $3, MIME වර්ගය: $4, $5 {{PLURAL:$5|පිටුව|පිටු}}',
 'file-nohires' => 'මෙයට ඉහල විසර්ජනයක් දක්වා එළඹිය නොහැක.',
 'svg-long-desc' => 'SVG ගොනුව, නාමමාත්‍රිකව $1 × $2 පික්සල්, ගොනු විශාලත්වය: $3',
+'svg-long-error' => 'අනීතික SVG ගොනුව: $1',
 'show-big-image' => 'පූර්ණ විභේදනය',
 'show-big-image-preview' => 'මෙම පෙරදසුනෙහි තරම: $1.',
 'show-big-image-other' => 'අනෙකුත් {{PLURAL:$2|විභේදනය|විභේදනයන්}}: $1.',
@@ -3048,6 +3071,7 @@ $1',
 'hours' => '{{PLURAL:$1|$1 පැය|$1 පැය}}',
 'days' => '{{PLURAL:$1|$1 දවස|$1 දවස්}}',
 'ago' => '$1 පෙර',
+'just-now' => 'මේ දැන්',
 
 # Bad image list
 'bad_image_list' => 'ආකෘතිය පහත පරිදි වේ:
@@ -3920,7 +3944,7 @@ MediaWiki බෙදාහැර ඇත්තේ එය ප්‍රයෝජන
 'logentry-newusers-create' => '$1 පරිශීලක ගිණුමක් තනන ලදී',
 'logentry-newusers-create2' => '$1 විසින් $3 පරිශීලක ගිණුම තනන ලදී',
 'logentry-newusers-autocreate' => '$1 ගිණුම ස්වංක්‍රීයව නිර්මිතය',
-'newuserlog-byemail' => 'විද්‍යුත්-තැපෑලෙන් මුර-පදය යවන ලදි',
+'rightsnone' => '(කිසිවක් නොමැත)',
 
 # Feedback
 'feedback-subject' => 'විෂයය:',
diff --git a/languages/messages/MessagesSimple.php b/languages/messages/MessagesSimple.php
deleted file mode 100644 (file)
index 6d331d8..0000000
+++ /dev/null
@@ -1,11 +0,0 @@
-<?php
-/** Simple English (Simple English)
- *
- * See MessagesQqq.php for message documentation incl. usage of parameters
- * To improve a translation please visit http://translatewiki.net
- *
- * @ingroup Language
- * @file
- */
-
-$fallback = 'en';
index f89fbde..c8e03a6 100644 (file)
@@ -1030,7 +1030,6 @@ Správca, ktorý ju zamkol, uviedol nasledovné vysvetlenie: $1",
 'template-semiprotected' => '(čiastočne zamknutá)',
 'hiddencategories' => 'Táto stránka patrí do {{PLURAL:$1|1 skrytej kategórie|$1 skrytých kategórií}}:',
 'edittools' => '<!-- Tento text sa zobrazí pod upravovacím a nahrávacím formulárom. -->',
-'nocreatetitle' => 'Tvorba nových stránok bola obmedzená',
 'nocreatetext' => 'Na {{GRAMMAR:lokál|{{SITENAME}}}} je tvorba nových stránok obmedzená.
 Teraz sa môžete vrátiť späť a upravovať existujúcu stránku alebo [[Special:UserLogin|sa prihlásiť alebo vytvoriť účet]].',
 'nocreate-loggedin' => 'Nemáte povolenie vytvárať nové stránky.',
@@ -1576,15 +1575,13 @@ Musí obsahovať menej ako $1 {{PLURAL:$1|znak|znaky|znakov}}.',
 'right-sendemail' => 'Posielať e-mail ostatným používateľom',
 'right-passwordreset' => 'Prezeranie e-mailov pre znovunastavovanie hesla',
 
+# Special:Log/newusers
+'newuserlogpage' => 'Záznam vytvorených používateľov',
+'newuserlogpagetext' => 'Toto je záznam naposledy vytvorených používateľských účtov.',
+
 # User rights log
 'rightslog' => 'Záznam používateľských práv',
 'rightslogtext' => 'Toto je záznam zmien práv používateľa.',
-'rightslogentry' => 'členstvo v skupine zmenené pre $1 z $2 na $3',
-'rightslogentry-autopromote' => 'bol automaticky povýšený z $2 na $3',
-'logentry-rights-rights' => '$1 {{GENDER:$2|zmenil|zmenila}} členstvo $3 v skupinách z $4 na $5',
-'logentry-rights-rights-legacy' => '$1 {{GENDER:$2|zmenil|zmenila}} členstvo $3 v skupinách',
-'logentry-rights-autopromote' => '$1 {{GENDER:$2|bol automaticky povýšený|bola automaticky povýšená}} z $4 na $5',
-'rightsnone' => '(žiadne)',
 
 # Associated actions - in the sentence "You do not have permission to X"
 'action-read' => 'čítať túto stránku',
@@ -2226,10 +2223,6 @@ Podporované protokoly: <code>$1</code> (ak protokol nie je uvedený, použije s
 'activeusers-hidesysops' => 'Skryť správcov',
 'activeusers-noresult' => 'Neboli nájdení žiadni používatelia.',
 
-# Special:Log/newusers
-'newuserlogpage' => 'Záznam vytvorených používateľov',
-'newuserlogpagetext' => 'Toto je záznam naposledy vytvorených používateľských účtov.',
-
 # Special:ListGroupRights
 'listgrouprights' => 'Práva skupiny používateľov',
 'listgrouprights-summary' => 'Toto je zoznam skupín používateľov definovaných na tejto wiki a ich prístupových práv.
@@ -2295,9 +2288,7 @@ Mailová adresa, ktorú ste zadali vo svojich [[Special:Preferences|nastaveniach
 'watchnologin' => 'Nie ste prihlásený/á',
 'watchnologintext' => 'Musíte byť [[Special:UserLogin|prihlásený/á]], aby ste mohli modifikovať vaše sledované stránky.',
 'addwatch' => 'Pridať do zoznamu sledovaných stránok',
-'addedwatchtext' => "Stránka [[$1]] bola pridaná do [[Special:Watchlist|sledovaných stránok]]. Budú tam uvedené ďalšie úpravy tejto stránky a jej diskusie a stránka bude zobrazená '''tučne''' v [[Special:RecentChanges|zozname posledných úprav]], aby ste ju ľahšie našli.
-
-Ak budete chcieť neskôr stránku odstrániť zo sledovaných stránok, kliknite na „{{int:unwatch}}“ v záložkách na vrchu.",
+'addedwatchtext' => "Stránka [[:$1]] bola pridaná do zoznamu [[Special:Watchlist|sledovaných stránok]]. Budú tam uvedené ďalšie úpravy tejto stránky a jej diskusie a stránka bude zobrazená '''tučne''' v [[Special:RecentChanges|zozname posledných úprav]], aby ste ju ľahšie našli.",
 'removewatch' => 'Odstrániť zo zoznamu sledovaných',
 'removedwatchtext' => 'Stránka „[[:$1]]“ bola odstránená z vášho [[Special:Watchlist|zoznamu sledovaných stránok]].',
 'watch' => 'Sledovať',
@@ -2354,6 +2345,8 @@ $UNWATCHURL
 
 Návrhy a ďalšia pomoc:
 {{canonicalurl:{{int:Helppage}}}}',
+'created' => 'vytvorení',
+'changed' => 'zmene',
 
 # Delete
 'deletepage' => 'Zmazať stránku',
@@ -3962,11 +3955,14 @@ Obrázky sa zobrazia v plnom rozlíšení, ostatné typy súborov sa spustia v p
 'logentry-move-move_redir-noredirect' => '$1 premiestnil stránku $3 na $4 prostredníctvom  presmerovania, ale neponechal presmerovanie',
 'logentry-patrol-patrol' => '$1 označil revíziu $4 stránky $3 ako overenú',
 'logentry-patrol-patrol-auto' => '$1 automaticky označil revíziu $4 stránky $3 ako overenú',
-'logentry-newusers-newusers' => '$1 založil používateľský účet',
-'logentry-newusers-create' => '$1 založil používateľský účet',
-'logentry-newusers-create2' => '$1 založil používateľský účet $3',
+'logentry-newusers-newusers' => 'Bol vytvorený používateľský účet $1',
+'logentry-newusers-create' => 'Bol vytvorený používateľský účet $1',
+'logentry-newusers-create2' => '$1 vytvoril používateľský účet $3',
 'logentry-newusers-autocreate' => 'Automaticky bol založený účet $1',
-'newuserlog-byemail' => 'heslo poslané emailom',
+'logentry-rights-rights' => '$1 {{GENDER:$2|zmenil|zmenila}} členstvo $3 v skupinách z $4 na $5',
+'logentry-rights-rights-legacy' => '$1 {{GENDER:$2|zmenil|zmenila}} členstvo $3 v skupinách',
+'logentry-rights-autopromote' => '$1 {{GENDER:$2|bol automaticky povýšený|bola automaticky povýšená}} z $4 na $5',
+'rightsnone' => '(žiadne)',
 
 # Feedback
 'feedback-bugornote' => 'Ak ste pripravený podrobne popísať technický problém, prosím pošlite [$1 hlásenie o chybe]. 
index 002acea..f96c25a 100644 (file)
@@ -318,6 +318,7 @@ $messages = array(
 'newwindow' => '(odpre se novo okno)',
 'cancel' => 'Prekliči',
 'moredotdotdot' => 'Več ...',
+'morenotlisted' => 'Več ni navedenih ...',
 'mypage' => 'Stran',
 'mytalk' => 'Pogovor',
 'anontalk' => 'Pogovorna stran IP',
@@ -623,7 +624,7 @@ Ne pozabite si prilagoditi vaših [[Special:Preferences|nastavitev {{GRAMMAR:rod
 'gotaccount' => 'Račun že imate? $1.',
 'gotaccountlink' => 'Prijavite se',
 'userlogin-resetlink' => 'Ste pozabili svoje prijavne podatke?',
-'createaccountmail' => 'Po e-pošti',
+'createaccountmail' => 'Ustvari začasno naključno geslo in ga pošlji na spodaj navedeni e-poštni naslov',
 'createaccountreason' => 'Razlog:',
 'badretype' => 'Gesli, ki ste ju vnesli, se ne ujemata.',
 'userexists' => 'Uporabniško ime, ki ste ga vnesli, je že zasedeno.
@@ -703,6 +704,7 @@ Prosimo počakajte, preden poskusite znova.',
 # E-mail sending
 'php-mail-error-unknown' => 'Neznana napaka v funkciji PHP mail()',
 'user-mail-no-addy' => 'Poskušal poslati e-pošto brez e-poštnega naslova',
+'user-mail-no-body' => 'Poskušali ste poslati e-pošto s prazno ali nerazumno kratko vsebino.',
 
 # Change password dialog
 'resetpass' => 'Spremeni geslo',
@@ -770,6 +772,7 @@ Začasno geslo: $2',
 'changeemail-oldemail' => 'Trenutni e-poštni naslov:',
 'changeemail-newemail' => 'Novi e-poštni naslov:',
 'changeemail-none' => '(noben)',
+'changeemail-password' => 'Vaše geslo na {{GRAMMAR:orodnik|{{SITENAME}}}}:',
 'changeemail-submit' => 'Spremeni e-naslov',
 'changeemail-cancel' => 'Prekliči',
 
@@ -949,7 +952,6 @@ Za sklic je priskrbljen spodnji dnevnik vnosov:",
 'template-semiprotected' => '(delno zaščitena)',
 'hiddencategories' => 'Ta stran je v vsebovana v {{PLURAL:$1|1 skriti kategoriji|$1 skritih kategorijah}}:',
 'edittools' => '<!-- To besedilo bo prikazano pod urejevalnim poljem in poljem za nalaganje. -->',
-'nocreatetitle' => 'Ustvarjanje strani je omejeno',
 'nocreatetext' => '{{SITENAME}} ima omejeno zmožnost za ustvarjanje novih strani.
 Lahko se vrnete nazaj in urejate že obstoječe strani, ali pa se [[Special:UserLogin|prijavite ali ustvarite račun]].',
 'nocreate-loggedin' => 'Nimate pravic, da bi ustvarjali nove strani.',
@@ -1502,15 +1504,13 @@ Ko vas drugi uporabniki kontaktirajo, jim vašega e-poštnega naslova ne bomo ra
 'right-sendemail' => 'Pošiljanje e-pošte drugim uporabnikom',
 'right-passwordreset' => 'Ogled e-pošt ponastavitve gesel',
 
+# Special:Log/newusers
+'newuserlogpage' => 'Dnevnik registracij uporabnikov',
+'newuserlogpagetext' => 'Prikazan je dnevnik nedavnih registracij novih uporabnikov.',
+
 # User rights log
 'rightslog' => 'Dnevnik uporabniških pravic',
 'rightslogtext' => 'Prikazan je dnevnik sprememb uporabniških pravic.',
-'rightslogentry' => 'je spremenil(-a) pravice uporabnika $1 iz $2 v $3',
-'rightslogentry-autopromote' => 'je bil(-a) samodejno povišan(-a) z $2 na $3',
-'logentry-rights-rights' => '$1 je spremenil(-a) članstvo skupine $3 z $4 na $5',
-'logentry-rights-rights-legacy' => '$1 je spremenil(-a) članstvo skupine $3',
-'logentry-rights-autopromote' => '$1 je bil(-a) samodejno povišan(-a) z $4 na $5',
-'rightsnone' => '(nobeno)',
 
 # Associated actions - in the sentence "You do not have permission to X"
 'action-read' => 'branje te strani',
@@ -1883,7 +1883,7 @@ Ko so rezultati filtrirani po uporabniku, so prikazane samo datoteke, pri kateri
 'filehist-thumbtext' => 'Sličica za različico $1',
 'filehist-nothumb' => 'Brez predogleda',
 'filehist-user' => 'Uporabnik',
-'filehist-dimensions' => 'Dimenzije',
+'filehist-dimensions' => 'Velikost',
 'filehist-filesize' => 'Velikost datoteke',
 'filehist-comment' => 'Komentar',
 'filehist-missing' => 'Datoteka manjka',
@@ -2150,7 +2150,7 @@ Glej tudi [[Special:WantedCategories|želene kategorije]].',
 'linksearch-ok' => 'Išči',
 'linksearch-text' => 'Uporabljate lahko nadomestne znake, kot je »*.wikipedia.org«.
 Zahtevana je vsaj najvišja domena, na primer »*.org«.<br />
-Podprti protokoli: <code>$1</code> (če protokol ni določen, se privzame http://).',
+{{PLURAL:$2|Podprt protokol|Podprta protokola|Podprti protokoli}}: <code>$1</code> (če protokol ni določen, se privzame http://).',
 'linksearch-line' => '$1 povezano iz $2',
 'linksearch-error' => 'Jokerji se lahko pojavijo le na začetku gostiteljskega imena.',
 
@@ -2163,16 +2163,12 @@ Podprti protokoli: <code>$1</code> (če protokol ni določen, se privzame http:/
 # Special:ActiveUsers
 'activeusers' => 'Seznam aktivnih uporabnikov',
 'activeusers-intro' => 'Seznam uporabnikov, ki so bili kakor koli aktivni v {{PLURAL:$1|zadnjem $1 dnevu|zadnjih $1 dneh}}.',
-'activeusers-count' => '$1 {{PLURAL:$1|urejanje|urejanji|urejanja|urejanj}} v {{PLURAL:$3|preteklem dnevu|preteklih $3 dneh}}',
+'activeusers-count' => '$1 {{PLURAL:$1|dejanje|dejanji|dejanja|dejanj}} v {{PLURAL:$3|preteklem dnevu|preteklih $3 dneh}}',
 'activeusers-from' => 'Prikaži uporabnike začenši z:',
 'activeusers-hidebots' => 'Skrij bote',
 'activeusers-hidesysops' => 'Skrij administratorje',
 'activeusers-noresult' => 'Noben uporabnik ni bil najden.',
 
-# Special:Log/newusers
-'newuserlogpage' => 'Dnevnik registracij uporabnikov',
-'newuserlogpagetext' => 'Prikazan je dnevnik nedavnih registracij novih uporabnikov.',
-
 # Special:ListGroupRights
 'listgrouprights' => 'Pravice uporabniških skupin',
 'listgrouprights-summary' => 'Tu je na razpolago seznam uporabniških skupin na tem wikiju z navedbo dodeljenih pravic dostopa.
@@ -2238,8 +2234,8 @@ E-poštni naslov, ki ste ga vpisali v [[Special:Preferences|uporabniških nastav
 'watchnologin' => 'Niste prijavljeni',
 'watchnologintext' => 'Za urejanje spiska nadzorov morate biti [[Special:UserLogin|prijavljeni]].',
 'addwatch' => 'Dodaj na spisek nadzorov',
-'addedwatchtext' => "Stran »[[:$1]]« je bila dodana na vaš [[Special:Watchlist|spisek nadzorov]].
-Morebitne spremembe te strani in pripadajoče pogovorne strani bodo navedene tukaj, v [[Special:RecentChanges|seznamu zadnjih sprememb]] pa bodo za lažjo izbiro označene '''krepko'''.",
+'addedwatchtext' => 'Stran »[[:$1]]« je bila dodana na vaš [[Special:Watchlist|spisek nadzorov]].
+Morebitne spremembe te strani in pripadajoče pogovorne strani bodo navedene tukaj.',
 'removewatch' => 'Odstrani s spiska nadzorov',
 'removedwatchtext' => 'Stran »[[:$1]]« je bila odstranjena z vašega [[Special:Watchlist|spiska nadzorov]].',
 'watch' => 'Opazuj',
@@ -2273,7 +2269,7 @@ Morebitne spremembe te strani in pripadajoče pogovorne strani bodo navedene tuk
 'enotif_subject_moved' => '{{GENDER:$2|Uporabnik|Uporabnica}} $2 je {{GENDER:$2|prestavil|prestavila}} stran $1 v {{GRAMMAR:dajalnik|{{SITENAME}}}}',
 'enotif_subject_restored' => '{{GENDER:$2|Uporabnik|Uporabnica}} $2 je {{GENDER:$2|obnovil|obnovila}} stran $1 v {{GRAMMAR:dajalnik|{{SITENAME}}}}',
 'enotif_subject_changed' => '{{GENDER:$2|Uporabnik|Uporabnica}} $2 je {{GENDER:$2|spremenil|spremenila}} stran $1 v {{GRAMMAR:dajalnik|{{SITENAME}}}}',
-'enotif_body_intro_deleted' => '{{GENDER:$2|uporabnik|uporabnica}} $2 je dne $PAGEEDITDATE {{GENDER:$2|izbrisal|izbrisala}} stran $1 v {{GRAMMAR:dajalnik|{{SITENAME}}}}; za trenutno redakcijo glejte $3.',
+'enotif_body_intro_deleted' => '{{GENDER:$2|uporabnik|uporabnica}} $2 je dne $PAGEEDITDATE {{GENDER:$2|izbrisal|izbrisala}} stran $1 v {{GRAMMAR:dajalnik|{{SITENAME}}}}; glejte $3.',
 'enotif_body_intro_created' => '{{GENDER:$2|uporabnik|uporabnica}} $2 je dne $PAGEEDITDATE {{GENDER:$2|ustvaril|ustvarila}} stran $1 v {{GRAMMAR:dajalnik|{{SITENAME}}}}; za trenutno redakcijo glejte $3.',
 'enotif_body_intro_moved' => '{{GENDER:$2|uporabnik|uporabnica}} $2 je dne $PAGEEDITDATE {{GENDER:$2|spremenil|spremenila}} stran $1 v {{GRAMMAR:dajalnik|{{SITENAME}}}}; za trenutno redakcijo glejte $3.',
 'enotif_body_intro_restored' => '{{GENDER:$2|uporabnik|uporabnica}} $2 je dne $PAGEEDITDATE {{GENDER:$2|obnovil|obnovila}} stran $1 v {{GRAMMAR:dajalnik|{{SITENAME}}}}; za trenutno redakcijo glejte $3.',
@@ -2307,6 +2303,8 @@ $UNWATCHURL
 
 Povratna sporočila in pomoč:
 {{canonicalurl:{{MediaWiki:Helppage}}}}',
+'created' => 'ustvaril',
+'changed' => 'spremenil',
 
 # Delete
 'deletepage' => 'Briši stran',
@@ -2377,6 +2375,8 @@ Oglejte si [[Special:ProtectedPages|seznam zaščitenih strani]] za seznam trenu
 'prot_1movedto2' => 'je prestavil(-a) [[$1]] na [[$2]]',
 'protect-badnamespace-title' => 'Nezaščitljiv imenski prostor',
 'protect-badnamespace-text' => 'Strani v tem imenskem prostoru ni mogoče zaščititi.',
+'protect-norestrictiontypes-text' => 'Strani ni mogoče zaščititi, saj zanjo ni na voljo nobena vrsta omejitve.',
+'protect-norestrictiontypes-title' => 'Stran, ki je ni mogoče zaščititi',
 'protect-legend' => 'Potrdite zaščito',
 'protectcomment' => 'Razlog:',
 'protectexpiry' => 'Poteče:',
@@ -2393,9 +2393,9 @@ Trenutne nastavitve za stran '''$1''' so:",
 'protect-cascadeon' => 'Ta stran je trenutno uaščitena, ker je vključena v {{PLURAL:$1|naslednjo stran, ki ima|naslednji strani, ki imata|naslednje strani, ki imajo|naslednjih strani, ki imajo}} vključeno kaskadno zaščito.
 Stopnjo zaščite te strani lahko spremenite, vendar to ne bo vplivalo na kaskadno zaščito.',
 'protect-default' => 'Dovoli vsem uporabnikom',
-'protect-fallback' => 'Potrebujete pravice »$1«',
-'protect-level-autoconfirmed' => 'Blokiraj nove in neregistrirane uporabnike',
-'protect-level-sysop' => 'Samo administratorji',
+'protect-fallback' => 'Dovoli samo uporabnikom s pravico »$1«',
+'protect-level-autoconfirmed' => 'Dovoli samo samodejno potrjenim uporabnikom',
+'protect-level-sysop' => 'Dovoli samo administratorjem',
 'protect-summary-cascade' => 'kaskadno',
 'protect-expiring' => 'poteče $1 (UTC)',
 'protect-expiring-local' => 'poteče $1',
@@ -2702,7 +2702,7 @@ Samodejno lahko posodobite preusmeritve, ki kažejo na dosedanji naslov.
 Če se za to ne odločite, ne pozabite preveriti vseh [[Special:DoubleRedirects|dvojnih]] ali [[Special:BrokenRedirects|pretrganih preusmeritev]].
 Odgovorni ste, da bodo povezave še naprej kazale na prava mesta.
 
-Kjer stran z izbranim novim imenom že obstaja, dejanje '''ne''' bo izvedeno, razen če je sedanja stran prazna ali preusmeritvena in brez zgodovine urejanj.
+Kjer stran z izbranim novim imenom že obstaja, dejanje '''ne''' bo izvedeno, razen če je sedanja stran preusmeritev in brez zgodovine urejanj.
 To pomeni, da lahko, če se zmotite, strani vrnete prvotno ime, ne morete pa prepisati že obstoječe strani.
 
 '''Opozorilo!'''
@@ -2889,6 +2889,7 @@ Prosimo, poskusite znova.',
 'import-error-interwiki' => 'Strani »$1« nismo uvozili, ker je njeno ime rezervirano za zunanje povezovanje (interwiki).',
 'import-error-special' => 'Strani »$1« nismo uvozili, ker spada k posebnemu imenskemu prostoru, ki ne dovoljuje strani.',
 'import-error-invalid' => 'Strani »$1« nismo uvozili, ker njeno ime ni veljavno.',
+'import-error-unserialize' => 'Redakcije $2 strani »$1« ni bilo mogoče deserializirati. Redakcija bi naj uporabljala model vsebine $3, serializiran kot $4.',
 'import-options-wrong' => '{{PLURAL:$2|Napačna možnost|Napačni možnosti|Napačne možnosti}}: <nowiki>$1</nowiki>',
 'import-rootpage-invalid' => 'Podana korenska stran ni veljaven naslov.',
 'import-rootpage-nosubpage' => 'Imenski prostor »$1« korenske strani ne dovoli podstrani.',
@@ -3036,6 +3037,7 @@ Omogoča vnos pojasnila v povzetku urejanja.',
 'pageinfo-magic-words' => '{{PLURAL:$1|Čarobna beseda|Čarobni besedi|Čarobne besede}} ($1)',
 'pageinfo-hidden-categories' => '{{PLURAL:$1|Skrita kategorija|Skriti kategoriji|Skrite kategorije}} ($1)',
 'pageinfo-templates' => '{{PLURAL:$1|Vključena predloga|Vključeni predlogi|Vključene predloge}} ($1)',
+'pageinfo-transclusions' => '{{PLURAL:$1|Stran, vključena|Strani, vključeni|Strani, vključene}} na ($1)',
 'pageinfo-toolboxlink' => 'Podatki o strani',
 'pageinfo-redirectsto' => 'Preusmerja na',
 'pageinfo-redirectsto-info' => 'informacije',
@@ -3044,6 +3046,10 @@ Omogoča vnos pojasnila v povzetku urejanja.',
 'pageinfo-protect-cascading' => 'Zaščite se dedujejo od tukaj',
 'pageinfo-protect-cascading-yes' => 'Da',
 'pageinfo-protect-cascading-from' => 'Zaščite se dedujejo od',
+'pageinfo-category-info' => 'Informacije o kategoriji',
+'pageinfo-category-pages' => 'Število strani',
+'pageinfo-category-subcats' => 'Število podkategorij',
+'pageinfo-category-files' => 'Število datotek',
 
 # Patrolling
 'markaspatrolleddiff' => 'Označite kot nadzorovano',
@@ -3091,6 +3097,7 @@ Z njenim zagonom lahko ogrozite vaš sistem.",
 'file-nohires' => 'Višja ločljivost slike ni na voljo.',
 '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-preview' => 'Velikost predogleda: $1.',
 'show-big-image-other' => '{{PLURAL:$2|Druga resolucija|Drugi resoluciji|Druge resolucije}}: $1.',
@@ -3125,6 +3132,8 @@ Z njenim zagonom lahko ogrozite vaš sistem.",
 'minutes' => '$1 {{PLURAL:$1|minuta|minuti|minute|minut}}',
 'hours' => '$1 {{PLURAL:$1|ura|uri|ure|ur}}',
 'days' => '$1 {{PLURAL:$1|dan|dneva|dnevi|dni}}',
+'months' => '$1 {{PLURAL:$1|mesec|meseca|mesece|mesecev}}',
+'years' => '$1 {{PLURAL:$1|leto|leti|leta|let}}',
 'ago' => 'pred $1',
 'just-now' => 'pravkar',
 
@@ -3790,7 +3799,7 @@ Vnesite ime datoteke brez predpone »{{ns:file}}:«.',
 'specialpages-group-highuse' => 'Strani visoke uporabe',
 'specialpages-group-pages' => 'Seznam strani',
 'specialpages-group-pagetools' => 'Orodja strani',
-'specialpages-group-wiki' => 'Podatki in orodja wiki',
+'specialpages-group-wiki' => 'Podatki in orodja',
 'specialpages-group-redirects' => 'Preusmerjajoče posebne strani',
 'specialpages-group-spam' => 'Orodja za spam',
 
@@ -3888,8 +3897,12 @@ Ta stran se sooča s tehničnimi težavami.',
 'logentry-newusers-newusers' => '$1 je ustvaril(-a) uporabniški račun',
 'logentry-newusers-create' => '$1 je ustvaril(-a) uporabniški račun',
 'logentry-newusers-create2' => '$1 je ustvaril(-a) uporabniški račun $3',
+'logentry-newusers-byemail' => '$1 je {{GENDER:$2|ustvaril|ustvarila|ustvaril(-a)}} uporabniški račun $3; geslo je bilo poslano po e-pošti',
 'logentry-newusers-autocreate' => 'Račun $1 je bil samodejno ustvarjen',
-'newuserlog-byemail' => 'geslo je bilo poslano po e-pošti',
+'logentry-rights-rights' => '$1 je spremenil(-a) članstvo skupine $3 z $4 na $5',
+'logentry-rights-rights-legacy' => '$1 je spremenil(-a) članstvo skupine $3',
+'logentry-rights-autopromote' => '$1 je bil(-a) samodejno povišan(-a) z $4 na $5',
+'rightsnone' => '(nobeno)',
 
 # Feedback
 'feedback-bugornote' => 'Če ste pripravljeni podrobno opisati tehnično težavo, vložite [$1 poročilo o hrošču].
@@ -3943,6 +3956,7 @@ V nasprotnem primeru lahko uporabite preprost obrazec spodaj. Vašo pripombo bom
 'api-error-ok-but-empty' => 'Notranja napaka: strežnik se ne odziva.',
 'api-error-overwrite' => 'Prepisovanje obstoječe datoteke ni dovoljeno.',
 'api-error-stashfailed' => 'Notranja napaka: strežnik ni uspel shraniti začasne datoteke.',
+'api-error-publishfailed' => 'Notranja napaka: strežnik ni uspel objaviti začasne datoteke.',
 'api-error-timeout' => 'Strežnik se ni odzval v pričakovanem času.',
 'api-error-unclassified' => 'Prišlo je do neznane napake',
 'api-error-unknown-code' => 'Neznana napaka: »$1«',
@@ -3963,6 +3977,4 @@ V nasprotnem primeru lahko uporabite preprost obrazec spodaj. Vašo pripombo bom
 'duration-centuries' => '$1 {{PLURAL:$1|stoletje|stoletji|stoletja|stoletij}}',
 'duration-millennia' => '$1 {{PLURAL:$1|tisočletje|tisočletji|tisočletja|tisočletij}}',
 
-# Unknown messages
-'svg-long-error' => 'Neveljavna datoteka SVG: $1',
 );
index 0fd3d94..08d25e2 100644 (file)
@@ -597,7 +597,6 @@ Grund fier de Sperre: $1",
 'template-protected' => '(schreibgeschietzt)',
 'template-semiprotected' => '(schreibgeschietzt fier unoagemeldete und neue Nutzer)',
 'hiddencategories' => 'Diese Seite ies Mitglied vun {{PLURAL:$1|1 versteckter Kategorie|$1 versteckta Kategoria}}:',
-'nocreatetitle' => 'De Erstellung neuer Seyta ies eengeschränkt.',
 'nocreatetext' => 'Uff {{SITENAME}} wurde doas Erstalla neuer Seyta eengeschränkt. Du koast bestiehende Seyten ändern oder diech [[Special:UserLogin|oamelda]].',
 'nocreate-loggedin' => 'Du host kenne Berechtigung, neue Seyta zu erstalla.',
 'permissionserrorstext' => 'Du best ne berechtigt, de Aksjonn auszufiehra. {{PLURAL:$1|Grund|Grinde}}:',
@@ -957,9 +956,12 @@ Stelle sicher, doaß de Versionsgeschichte anner Seite historisch korrekt ies.',
 'right-siteadmin' => 'Datenbank sperra und entsperra',
 'right-sendemail' => 'E-Mails oa andere Nutzer senda',
 
+# Special:Log/newusers
+'newuserlogpage' => 'Neuoameldungs-Logbuch',
+'newuserlogpagetext' => 'Dies ies a Logbuch fier neu erstellte Nutzerkonten.',
+
 # User rights log
 'rightslogtext' => 'Dies ies doas Logbuch dar Änderunga dar Nutzerrechte.',
-'rightslogentry' => 'änderte de Nutzerrechte fier „$1“ vu „$2“ uff „$3“',
 
 # Associated actions - in the sentence "You do not have permission to X"
 'action-read' => 'de Seite zu lasa',
@@ -1360,10 +1362,6 @@ Siehe au de Liste der [[Special:WantedCategories|gewinschta Kategorien]].',
 # Special:ActiveUsers
 'activeusers-noresult' => 'Kenne Benutzer gefunda.',
 
-# Special:Log/newusers
-'newuserlogpage' => 'Neuoameldungs-Logbuch',
-'newuserlogpagetext' => 'Dies ies a Logbuch fier neu erstellte Nutzerkonten.',
-
 # Special:ListGroupRights
 'listgrouprights' => 'Nutzergruppen-Rechte',
 'listgrouprights-summary' => 'Dies ies anne Liste dar ei diesem Wiki definierten Nutzergruppen und dar damit verbundenen Rechte.
@@ -1459,6 +1457,7 @@ Is waan sulange kenne wettera Benachrichtigungs-E-Mails gesendet, bis du de Seit
 Im de Einstellunga denner Beobachtungsliste oazupoaßa, besuche: {{canonicalurl:{{#special:EditWatchlist}}}}
 
 Rickmeldungen und wettere Hilfe: {{canonicalurl:{{MediaWiki:Helppage}}}}',
+'created' => 'erzeugt',
 
 # Delete
 'deletepage' => 'Seite läscha',
@@ -2363,6 +2362,5 @@ De Eengabe muuß ohne dann Zusatz „{{ns:file}}:“ erfolga.',
 # New logging system
 'revdelete-restricted' => 'Einschränkungen gelten au fier Administratorn',
 'revdelete-unrestricted' => 'Einschränkungen fier Administratorn uffgehobn',
-'newuserlog-byemail' => 'doas Passwurt wourde per E-Mail versandt',
 
 );
index 3f46114..6767d65 100644 (file)
@@ -258,8 +258,8 @@ $1',
 'mainpage' => 'Bogga Hore',
 'mainpage-description' => 'Bogga Hore',
 'policy-url' => 'Project: Xeerka',
-'portal' => 'Bortaalka jaaliyada',
-'portal-url' => 'Project:Bortaalka jaaliyada',
+'portal' => 'Albaabka Bulshada',
+'portal-url' => 'Project:Albaabka bulshada',
 'privacy' => 'Xeerka Wiki',
 'privacypage' => 'Project:Xeerka Wiki',
 
@@ -279,6 +279,7 @@ fiiri [[Special:Version|nooca bogga]].',
 'youhavenewmessagesfromusers' => 'Waxay $1 kaaga timid {{PLURAL:$3|adeegsade kale|$3 adeegsade}} ($2).',
 'youhavenewmessagesmanyusers' => 'Waxay ka $1 timid adeegsade yaal farabadan ($2).',
 'newmessageslinkplural' => '{{PLURAL:$1|Waa fariin cusub|fariin cusub}}',
+'newmessagesdifflinkplural' => '$1 {{PLURAL:$1|bedelkii ugu dambeeyey|bedeladii ugu dambeeyey}}',
 'youhavenewmessagesmulti' => '$1 waxaa kuu yaalo fariimo cusub',
 'editsection' => 'Wax ka bedel',
 'editold' => 'Wax ka bedel',
@@ -365,6 +366,9 @@ Waxaa ku jiri kara xuruufo aanan loo isticmaalikarin cinwaan ahaan.',
 fadlan waxyar kadib ku soo noqo.',
 'protectedpagetext' => 'Boggaan  waala difaacay si aan wax looga bedelin.',
 'viewsourcetext' => 'Waad fiirin kartaa waana koobi gareen kartaa xogta boggaan:',
+'editinginterface' => "'''Digniin:''' Waxaad guda gashay inaad badesho bogga lawada arkayo wajiga hore ee qoraalka softwareka.
+Waxa uu saameeyn ku yeelan doonaa boggaan habka uu wax u arko adeegsadaha iyo dhamaan adeegsadayaasha ee wikgaan.
+Si aad wax ugu kordhiso ama aad uga dhinto turjumaadda mashaariicda wikiga , fadlan adeegso [//translatewiki.net/ translatewiki.net], mashruuca gaarka ah ee MediaWiki.",
 'cascadeprotected' => 'Boggaan waxaa laga difaacay in wax laga bedelo, sababtoo ah wuxuu ka midyahay  {{PLURAL:$1|bog, oo ah |bogyaalo ah, waana}}  kuwa laga difaacay "qoraalada kaskadka ah" dooqyada woo u furanyahay:
 $2',
 'namespaceprotected' => "Ma laguu ogolo in aad wax ka bedesho maqaalada ku jirto '''$1''' xarun magaceedka.",
@@ -620,10 +624,10 @@ Fadlan markale isku day. Hadii aysan weli shaqaynin, ka bax ee markale soo gudag
 ''Sababtoo ah {{SITENAME}}han wuxuu leeyahay HTML ceyriin ah, horfiirintiisa waxaa loo qariyey si looga hortago weerar ka yimaada JavaScriptga.''
 
 '''Hadii wax ka bedlkaan uu yahay mid xaq ah, fadlan markale isku day. Hadii aysan weli shaqaynin, is kuday inaad  ka baxdo ee markale soo gudagal.'''",
-'editing' => 'Waxaa badaloosaa $1',
-'creating' => 'Sameynaa $1',
-'editingsection' => 'Waxaa wax ka badaloosaa $1 (qeyb yar)',
-'editingcomment' => 'Waxaa wax ka badaloosaa $1 (qeyb yar)',
+'editing' => 'Waxaad badalaysaa $1',
+'creating' => 'Sameyta $1',
+'editingsection' => 'Waxaa wax ka badaleysaa $1 (qeyb yar)',
+'editingcomment' => 'Waxaa wax ka badaleysaa $1 (qeyb yar)',
 'editconflict' => 'Isku dhac badalaadka: $1',
 'yourtext' => 'Qoraalkaaga',
 'editingold' => "'''DIGNIIN: Waxaad wax ka bedeli rabtaa boggan caddadkiisa duqoobay.
@@ -655,6 +659,7 @@ Tirtiraha iyo wareejinta gudagalaha boggaan waxaad ka arki kartaa hoostaan.',
 'post-expand-template-inclusion-warning' => "'''Digniin:''' Aad oo u weyn yahay tusmo'da aad ku dartay.
 Tusmooyinka qaar lagumo dari doono.",
 'post-expand-template-inclusion-category' => "Boggaga ku xad gudbay weyninka tusmo'da",
+'post-expand-template-argument-warning' => "'''Digniin:'''Boggaan waxaa ku jira ugu yaraan hal iyo wixii ka badan oo template ah, waxaana ku xiran kuwa kale.",
 
 # "Undo" feature
 'undo-summary' => 'Noqay bedelaadka $1 ee sameeyay  [[Special:Contributions/$2|$2]] ([[User talk:$2|hadal]])',
@@ -723,9 +728,9 @@ sababteeda neh waxaa laga heli kartaa  [{{fullurl:{{#Special:Log}}/delete|page={
 'editundo' => 'ka noqo',
 
 # Search results
-'searchresults' => 'Raadi natiijooyinka',
-'searchresults-title' => 'Raadi natiijoojika "$1"',
-'searchsubtitle' => 'Waxaad raadisay \'\'\'[[:$1]]\'\'\' ([[Special:Prefixindex/$1|dhamaan boggaga ka bilaawdo "$1"]]{{int:pipe-separator}}[[Special:WhatLinksHere/$1|dhamaan boggaga la xiriiro "$1"]])',
+'searchresults' => 'Natiijada raadinta (Baaris)',
+'searchresults-title' => 'Raadinta natiijooyinka "$1"',
+'searchsubtitle' => 'Waxaad raadisay \'\'\'[[:$1]]\'\'\' ([[Special:Prefixindex/$1|dhamaan bogaaga ka bilaawdo "$1"]]{{int:pipe-separator}}[[Special:WhatLinksHere/$1|dhamaan bogagga la xiriiro "$1"]])',
 'searchsubtitleinvalid' => "Waxaa raadisay '''$1'''",
 'prevn' => 'Ka horeeya {{PLURAL:$1|$1}}',
 'nextn' => 'Ku xiga {{PLURAL:$1|$1}}',
@@ -751,12 +756,15 @@ sababteeda neh waxaa laga heli kartaa  [{{fullurl:{{#Special:Log}}/delete|page={
 'search-result-category-size' => '{{PLURAL:$1|1 ka mid ah|$1 ka mid ah}} ({{PLURAL:$2|1 qeybta hoose|$2 qeybaha hoose}}, {{PLURAL:$3|1 fayl|$3 fayl-yo}})',
 'search-redirect' => '(waxaa loo toosiyay $1)',
 'search-section' => '(maqaalka $1)',
-'search-suggest' => 'Waxaa ka waday miyaa: $1',
+'search-suggest' => 'Ma waxaad ulajeeday: $1',
+'search-interwiki-caption' => 'Mashaariicda walaalaha',
 'search-interwiki-default' => '$1 natiijooyinka:',
 'search-interwiki-more' => '(wax kale)',
 'search-relatedarticle' => 'La xiriiro',
 'searchrelated' => 'La xiriiro',
 'searchall' => 'Dhamaan',
+'showingresults' => "Waxaa hoos laga heley{{PLURAL:$1|'''1''' natiijo|'''$1''' natiijooyin}} ka biloow #'''$2'''.",
+'showingresultsnum' => "Hoos waxaa laga helay {{PLURAL:$3|'''1''' Natiijo|'''$3''' Natiijooyin}} Ka billow #'''$2'''.",
 'showingresultsheader' => "{{PLURAL:$5|Natiijada  '''$1''' ee '''$3'''|Natiijooyinka '''$1 - $2'''  oo ah  '''$3'''}} ee '''$4'''",
 'search-nonefound' => 'Wax natiijo oo ka soo baxay ma jirto wixii aad raadisay',
 'powersearch' => 'Sidii aad wax uugu raadin laheed',
@@ -821,10 +829,12 @@ E-mailkaada mala sheegaayo markii ee dadka kale kula soo xiriirayaan.',
 # User rights
 'saveusergroups' => 'Kaydi kooxaha isticmaalayaasha',
 'userrights-groupsmember' => 'Ka mid ah:',
+'userrights-reason' => 'Sababta:',
 
 # Groups
 'group' => 'Koox:',
 'group-user' => 'Isticmaalada',
+'group-autoconfirmed' => 'Gude galayaasha la hubiyey si iskeed ah',
 'group-bot' => 'botyada',
 'group-sysop' => 'Maamulada',
 'group-all' => '(dhamaan)',
@@ -834,6 +844,7 @@ E-mailkaada mala sheegaayo markii ee dadka kale kula soo xiriirayaan.',
 'group-sysop-member' => '{{GENDER:$1|maamulaha}}',
 
 'grouppage-user' => '{{ns:project}}:Isticmaalada',
+'grouppage-autoconfirmed' => '{{ns:project}}:Gude gale la hubiyey si iskeeda ah',
 'grouppage-sysop' => '{{ns:project}}:Maamulada',
 
 # Rights
@@ -846,8 +857,8 @@ E-mailkaada mala sheegaayo markii ee dadka kale kula soo xiriirayaan.',
 'right-browsearchive' => 'Raadi maqaalada la tirtiray',
 'right-undelete' => 'Ha tirtirin bog',
 
-# User rights log
-'rightsnone' => '(waxna)',
+# Special:Log/newusers
+'newuserlogpage' => 'Gudagalaha Isticmaale sameeyay',
 
 # Associated actions - in the sentence "You do not have permission to X"
 'action-read' => 'akhri boggaan',
@@ -999,12 +1010,14 @@ Tafaasiishiisa waxee ku qorantahay [$2 bogga tafaasiisha faylka] oo ka arki kart
 'lonelypages' => 'Boggaga agoonta ah',
 'uncategorizedpages' => 'Maqaalada aan la aruurin',
 'popularpages' => 'Boggaga caanka ah',
-'prefixindex' => 'Dhamaan boggaga leh qoraalka hore',
+'prefixindex' => 'Dhamaan bogagga leh qoraalka hore',
 'shortpages' => 'Boggaga gaaban',
 'longpages' => 'Boggaga dhaadheer',
 'deadendpages' => 'Boggaga aanan la daba joogin',
 'deadendpagestext' => 'Boggagaan soo socota lama xiriiraan boggaga kale ee {{SITENAME}}.',
 'protectedpages' => "Boggag la'difaacay",
+'listusers-editsonly' => 'Itus adeegsede yaasha sameeyey bedalka oo kaliya',
+'listusers-creationsort' => 'Ka dhig si ah taariikhdii la sameeyey',
 'usercreated' => '{{GENDER:$3|Sameeyay}} marka ee eheed $1 saacada $2',
 'newpages' => 'Bogyaalo cusub',
 'newpages-username' => 'Magaca gudagalka:',
@@ -1022,14 +1035,14 @@ Tafaasiishiisa waxee ku qorantahay [$2 bogga tafaasiisha faylka] oo ka arki kart
 'log' => 'Guda galayaasha',
 
 # Special:AllPages
-'allpages' => 'Dhamaan boggaga',
+'allpages' => 'Dhamaan bogagga',
 'alphaindexline' => '$1 ilaa $2',
 'nextpage' => 'Bogga ku xiga ($1)',
 'prevpage' => 'Bogga ka horeeyo ($1)',
 'allpagesfrom' => 'Soosaar boggaga ka bilaawda:',
-'allarticles' => 'Dhamaan boggaga',
-'allinnamespace' => 'Dhamaan boggaga ($1 namespace)',
-'allnotinnamespace' => 'Dhamaan boggaga (aan ku jirin xarun magaceedka $1)',
+'allarticles' => 'Dhamaan bogagga',
+'allinnamespace' => 'Dhamaan bogagga ($1 namespace)',
+'allnotinnamespace' => 'Dhamaan bogagga (aan ku jirin xarun magaceedka $1)',
 'allpagesprev' => 'ka hore',
 'allpagesnext' => 'Ku xiga',
 'allpagessubmit' => 'Soco',
@@ -1051,9 +1064,6 @@ Tafaasiishiisa waxee ku qorantahay [$2 bogga tafaasiisha faylka] oo ka arki kart
 'listusers-noresult' => 'Lama helin isticmaale.',
 'listusers-blocked' => '(waa la mamnuucay)',
 
-# Special:Log/newusers
-'newuserlogpage' => 'Gudagalaha Isticmaale sameeyay',
-
 # Special:ListGroupRights
 'listgrouprights-members' => '(Inta ka mid ah liiskooda)',
 
@@ -1101,6 +1111,42 @@ Hadii aad rabootid in aad boggan ka saartid wardiyeynta, dhagsii \"Ha' wardiyeyn
 # Displayed when you click the "watch" button and it is in the process of watching
 'watching' => 'Daawasho...',
 
+'enotif_subject_created' => '{{SITENAME}} Bogga $1 Qof ayaa sameeyey {{gender:$2|$2}}',
+'enotif_subject_changed' => '{{SITENAME}} Bogga $1 Waxaa {{GENDER:$2|Bedel}} ku sameeyey qof $2',
+'enotif_body_intro_created' => 'Bogga {{SITENAME}} ga $1 waxaa la sameeyey $PAGEEDITDATE qof {{gender:$2|$2}}, eeg $3 sida laga dhigay hadda.',
+'enotif_body_intro_restored' => 'Booga {{SITENAME}} $1 waa labadelay {{GENDER:$2|dib u habayn}} waqtigaan $PAGEEDITDATE waxaana badalay $2, eeg $3 sida hadda laga dhigay.',
+'enotif_body_intro_changed' => 'Bogga {{SITENAME}} ga $1 waxaa la badelay $PAGEEDITDATE qof {{gender:$2|$2}}, eeg $3 sida laga dhigay hadda.',
+'enotif_lastvisited' => 'Eeg $1 Dhamaan isbedeleda ilaa goortii kuugu dambaysay.',
+'enotif_lastdiff' => 'Eeg $1 si aad u aragto bedelkaan.',
+'enotif_anon_editor' => 'Aan la qoon $1',
+'enotif_body' => 'Mudane $WATCHINGUSERNAME,
+
+$PAGEINTRO $NEWPAGE
+
+Qaybta wax laga bedelay: $PAGESUMMARY $PAGEMINOREDIT
+
+La xariirka Tafaftiraha:
+mail: $PAGEEDITOR_EMAIL
+wiki: $PAGEEDITOR_WIKI
+
+Lama soo diri doono ogeysiin dambe hadii isbedel kale lagu sii sameeyo ilaa aad ka soo booqato bogga.
+Waxaad awoodaa inaad ka saarto liiska waardiyeha booga.
+
+                        Nidaamka war gelinta {{SITENAME}} ee E-mailka
+
+--
+si aad ubedesho fariinta e-mail dooqyadiisa, Booqo
+{{canonicalurl:{{#special:Preferences}}}}
+
+Si aad ubedesho liiskaada waardiyaha, Booqo
+{{canonicalurl:{{#special:EditWatchlist}}}}
+
+si aad utirtirto liiskaada waardiyaha ee gaarka ah, Booqo
+$UNWATCHURL
+
+Faalada iyo helista caawinaad dheeraad ah:
+{{canonicalurl:{{MediaWiki:Helppage}}}}',
+
 # Delete
 'confirm' => 'Xaqiiji',
 'excontent' => "qoraalka wuxuu ahaa: '$1'",
@@ -1123,7 +1169,10 @@ Wuxuu ku badalay bedelkii ka danbeeyay oo sameeyay $2.',
 
 # Protect
 'protectlogpage' => 'Difaacida gudagalaheeda',
+'protectlogtext' => 'Hoos waxaa ku qoran isbedelada ilaaliya bogagga.
+eeg [[Special:ProtectedPages|Liiska bogagga dhowrsoon]] liiska bogagga howlaha dhowrista ee hadda.',
 'protectedarticle' => 'la difaacay "[[$1]]"',
+'modifiedarticleprotection' => 'Ka badal heerka difaacida "[[$1]]"',
 'protect-title' => 'Ka badal heerka difaacida   "$1"',
 'prot_1movedto2' => '[[$1]] waxaa loo wareejiyey [[$2]]',
 'protect-legend' => 'Xaqiiji difaacida',
@@ -1151,6 +1200,7 @@ Wuxuu ku badalay bedelkii ka danbeeyay oo sameeyay $2.',
 # Undelete
 'undelete' => "Fiiri boggaga la'tirtiray",
 'undeletepage' => "Fiiri dibna u sooceli boggaga la'tirtiray",
+'undeletepagetitle' => "'''Meeshaan waxa ay ka koobatahay raadka wixii laga tiray[[:$1|$1]]'''.",
 'viewdeletedpage' => "Fiiri boggaga la'tirtiray",
 'undeletebtn' => 'Sooceli',
 'undeletelink' => 'fiiri/mar kale sameey',
@@ -1217,6 +1267,9 @@ Wuxuu ku badalay bedelkii ka danbeeyay oo sameeyay $2.',
 'autoblocker' => 'Waxaa automaatik u xirista keenay in mudo dhow uu cinwaanka IP:ga isticmaalay "[[User:$1|$1]]". Sababta keentay in loo xiro $1 waa: "\'\'\'$2\'\'\'"',
 'blocklogpage' => 'Mamnuucida guda galaheeda',
 'blocklogentry' => 'la mamnuucay  [[$1]] Waqtiga uu dhacaayo neh waa $2 $3',
+'blocklogtext' => 'Halkaan waa  liiska lagu muujiyo manuuca iyo mamnuuc ka qaadista.
+Ciwaanka IP ga ee la mamnuucay so iskeedka ee aan la soo ban dhigin.
+Eeg [[Special:BlockList|Mamnuucyada]] si aad u aragto liiska mamnuucyada ee hadda shaqaynaua.',
 'unblocklogentry' => 'lama mamnuucin $1',
 'block-log-flags-anononly' => "Isticmaalayaasha aanan la'aqoonsanin oo kaliya",
 'block-log-flags-nocreate' => 'sameynta gudagalah lamaogola',
@@ -1308,8 +1361,10 @@ Waxaa fiiri kartaa cadaadkiisa',
 'tooltip-diff' => 'Fiiri waxa aad ka badashay qoraalka',
 'tooltip-compareselectedversions' => 'Fiiri sida ee u kala duwanyihiin  bedelaadka labada aad ka dooratay boggaan',
 'tooltip-watch' => 'Boggaan ku dar liiskaaga waardiyaha',
+'tooltip-watchlistedit-raw-submit' => 'Liska waardiyeha dib u howlageli',
 'tooltip-rollback' => '"Dib u soo celi" wuxuu dib boggaan ugu soo celinaa qofkii ugu danbeeyay wixii oo ku darsaday hal riix kaliya',
 'tooltip-undo' => '"Ka noqo" wuxuu dib u noqaa badalkaan wuxuuna furaa badalkii ka horeey.Wuxuu kuu fasaxaa in aad ku dartid sababta.',
+'tooltip-preferences-save' => 'Kaydi isbedelada',
 'tooltip-summary' => 'ku qor qoraal kooban',
 
 # Attribution
@@ -1318,6 +1373,10 @@ Waxaa fiiri kartaa cadaadkiisa',
 'lastmodifiedatby' => 'Bogaan waxaa ugu dambeyntii wax laga bedelay $2, $1 kana bedelay $3.',
 'othercontribs' => 'Waxay ku saleysantahay shaqada $1.',
 
+# Info page
+'pageinfo-title' => 'Macluumaad ku saabsan "$1"',
+'pageinfo-toolboxlink' => 'Macluumad ku saabsan',
+
 # Browsing diffs
 'previousdiff' => '← bedelkii ka duqsanaa',
 'nextdiff' => 'Bedelkii ugu cusbaa →',
@@ -1364,6 +1423,9 @@ Hadii faylka wax laga badalay sida oo markiisa hore ahaa, waxaa laga yaabaa in e
 # E-mail address confirmation
 'confirmemail_noemail' => 'Kuma haysatid cinwaan E-boosto sax [[Special:Preferences|isticmaala dooqiisa]].',
 
+# action=watch/unwatch
+'confirm-unwatch-top' => 'Boggaan ka saar liiskaaga waardiyaha',
+
 # Multipage image navigation
 'imgmultigo' => 'Soco!',
 
@@ -1377,6 +1439,13 @@ Hadii faylka wax laga badalay sida oo markiisa hore ahaa, waxaa laga yaabaa in e
 'autosumm-replace' => 'Wuxuu qoraalka ku badalay "$1"',
 'autosumm-new' => 'Bog cusub: $1',
 
+# Watchlist editor
+'watchlistedit-normal-legend' => 'Ka saar ciwaanada liiska waardiyaha',
+'watchlistedit-normal-explain' => 'Ciwaanada ee liiskaada waardiyaha hoos ayaa lagu soo ban dhigay.
+Si aad u tirtito Ciwaanka, Godka udhow calaameey, ee guji "{{int:Watchlistedit-normal-submit}}".
+waxaad awoodaa [[Special:EditWatchlist/raw|Liiska wax ka bedel]].',
+'watchlistedit-raw-legend' => 'Badal liiska waardiyeenta ceeriinka ah',
+
 # Watchlist editing tools
 'watchlisttools-view' => 'Itusi isbedelada jiro',
 'watchlisttools-edit' => 'Fiiri iyo wax ka badal liiska waardiyaha',
@@ -1394,12 +1463,15 @@ Hadii faylka wax laga badalay sida oo markiisa hore ahaa, waxaa laga yaabaa in e
 'fileduplicatesearch-submit' => 'Raadi',
 
 # Special:SpecialPages
-'specialpages' => 'bogaga khaaska ah',
+'specialpages' => 'bogagga khaaska ah',
 'specialpages-group-pages' => 'liiska maqaalada',
 
 # Special:BlankPage
 'blankpage' => 'Bog masaxan',
 
+# Special:Tags
+'tag-filter' => '[[Special:Tags|Filtaraha]] tag:',
+
 # Database error messages
 'dberr-usegoogle' => 'Waxaa baroobeen kartaa in aad ka raadiso google',
 
@@ -1407,6 +1479,12 @@ Hadii faylka wax laga badalay sida oo markiisa hore ahaa, waxaa laga yaabaa in e
 'htmlform-reset' => 'Ka noqo wax bedelka',
 'htmlform-selectorother-other' => 'kuwa kale',
 
+# New logging system
+'rightsnone' => '(waxna)',
+
+# Feedback
+'feedback-message' => 'Fariinta:',
+
 # Search suggestions
 'searchsuggest-search' => 'Raadi',
 
index 0b4fbd7..6e0886f 100644 (file)
@@ -961,7 +961,6 @@ Regjistri më i vonshëm i hyrjeve është poshtë për referncë:",
 'template-semiprotected' => '(gjysëm-mbrojtur)',
 'hiddencategories' => 'Kjo faqe është nën {{PLURAL:$1|një kategori të fshehur|$1 kategori të fshehura}}:',
 'edittools' => '<!-- Teksti këtu do të tregohet poshtë kutive të redaktimit dhe ngarkimit të skedave. -->',
-'nocreatetitle' => 'Krijimi i faqeve të reja është i kufizuar.',
 'nocreatetext' => 'Mundësia për të krijuar faqe të reja është kufizuar. Duhet të [[Special:UserLogin|hyni ose të hapni një llogari]] për të krijuar faqe të reja, ose mund të ktheheni mbrapsh dhe të redaktoni një faqe ekzistuese.',
 'nocreate-loggedin' => 'Nuk ju lejohet të krijoni faqe të reja.',
 'sectioneditnotsupported-title' => 'Redaktimi i pjesës nuk është i mbështetur',
@@ -1489,12 +1488,13 @@ Kjo informatë është publike.',
 'right-sendemail' => 'Dërgo e-mail tek përdoruesit e tjerë',
 'right-passwordreset' => 'Shiko e-mail-et e rivendosjes së fjalëkalimit',
 
+# Special:Log/newusers
+'newuserlogpage' => 'Regjistri i llogarive',
+'newuserlogpagetext' => 'Ky është një regjistër i llogarive të fundit që janë hapur',
+
 # User rights log
 'rightslog' => 'Regjistri i privilegjeve të përdoruesit',
 'rightslogtext' => 'Ky është një regjistër për ndryshimet e privilegjeve të përdoruesit.',
-'rightslogentry' => 'u ndryshua anëtarësimi i grupit për $1 nga $2 tek $3',
-'rightslogentry-autopromote' => 'automatikisht u rrit në datyrë nga $2 në $3',
-'rightsnone' => '(asgjë)',
 
 # Associated actions - in the sentence "You do not have permission to X"
 'action-read' => 'lexo këtë faqe',
@@ -2121,10 +2121,6 @@ Protokolle të mbështetura: <code>$1<code> (mos shtoni ndonjërin nga këta në
 'activeusers-hidesysops' => 'Fshih administratorët',
 'activeusers-noresult' => 'Asnjë përdorues nuk u gjet.',
 
-# Special:Log/newusers
-'newuserlogpage' => 'Regjistri i llogarive',
-'newuserlogpagetext' => 'Ky është një regjistër i llogarive të fundit që janë hapur',
-
 # Special:ListGroupRights
 'listgrouprights' => 'Grupime përdoruesish me privilegje',
 'listgrouprights-summary' => 'Më poshtë jepet grupimi i përdoruesve sipas privilegjeve që ju janë dhënë në këtë wiki. Më shumë informacion rreth privilegjeve në veçanti mund të gjendet [[{{MediaWiki:Listgrouprights-helppage}}|këtu]].',
@@ -2273,6 +2269,8 @@ $UNWATCHURL
 
 Për të na dhënë përshtypjet tuaja ose për ndihmë të mëtejshme:
 {{canonicalurl:{{MediaWiki:Helpage}}}}',
+'created' => 'u krijua',
+'changed' => 'ndryshuar',
 
 # Delete
 'deletepage' => 'Grise faqen',
@@ -3779,7 +3777,7 @@ Kjo faqe është duke përjetuar vështirësi teknike.',
 'logentry-newusers-create' => '$1 krijoi një llogari',
 'logentry-newusers-create2' => '$1 krijoi një llogari $3',
 'logentry-newusers-autocreate' => 'Llogaria $1 u krijua automatikisht',
-'newuserlog-byemail' => 'fjalëkalimi u dërgua në postën elektronike',
+'rightsnone' => '(asgjë)',
 
 # Feedback
 'feedback-bugornote' => 'Nëse jeni gati për të përshkruar një problem teknik me detaje ju lutemi [$1 raportoni një problem].
index 7dbb673..4eab336 100644 (file)
@@ -528,7 +528,7 @@ $messages = array(
 'newwindow' => '(отвара у новом прозору)',
 'cancel' => 'Откажи',
 'moredotdotdot' => 'Више…',
-'mypage' => 'Ð\9cоÑ\98а Ñ\81траница',
+'mypage' => 'Страница',
 'mytalk' => 'Разговор',
 'anontalk' => 'Разговор за ову ИП адресу',
 'navigation' => 'Навигација',
@@ -561,6 +561,7 @@ $messages = array(
 'namespaces' => 'Именски простори',
 'variants' => 'Варијанте',
 
+'navigation-heading' => 'Навигациони мени',
 'errorpagetitle' => 'Грешка',
 'returnto' => 'Назад на $1.',
 'tagline' => 'Извор: {{SITENAME}}',
@@ -777,9 +778,9 @@ $1',
 'viewsource-title' => 'Приказ извора странице $1',
 'actionthrottled' => 'Радња је успорена',
 'actionthrottledtext' => 'У циљу борбе против непожељних порука, ограничене су вам измене у одређеном времену, а управо сте прешли то ограничење. Покушајте поново за неколико минута.',
-'protectedpagetext' => 'Ова страница је закључана за уређивања.',
-'viewsourcetext' => 'Можете да погледате и умножите изворни текст ове странице:',
-'viewyourtext' => "Можете да погледате и умножите извор '''ваших измена''' на овој страници:",
+'protectedpagetext' => 'Ова страница је закључана за измене и друге радње.',
+'viewsourcetext' => 'Можете да погледате и копирате изворни текст ове странице:',
+'viewyourtext' => "Можете да погледате и копирате извор '''ваших измена''' на овој страници:",
 'protectedinterface' => 'Ова страница садржи текст корисничког окружења за софтвер на овом викију и заштићена је ради спречавања злоупотребе.
 Да бисте додали или изменили преводе свих викија, посетите [//translatewiki.net/ Транслејтвики], пројекат за локализацију Медијавикија.',
 'editinginterface' => "'''Упозорење:''' уређујете страницу која се користи за приказивање текста корисничког окружења.
@@ -812,6 +813,9 @@ $2',
 
 Можете да наставите с коришћењем овог викија као гост, или се <span class='plainlinks'>[$1 поново пријавите]</span> као други корисник.
 Имајте на уму да неке странице могу наставити да се приказују као да сте још пријављени, све док не очистите привремену меморију свог прегледача.",
+'welcomeuser' => 'Добро дошли, $1!',
+'welcomecreation-msg' => 'Ваш налог је отворен.
+Не заборавите да промените своја [[Special:Preferences|подешавања]].',
 'yourname' => 'Корисничко име:',
 'yourpassword' => 'Лозинка:',
 'yourpasswordagain' => 'Потврда лозинке:',
@@ -970,6 +974,7 @@ $2
 'changeemail-oldemail' => 'Тренутна е-адреса:',
 'changeemail-newemail' => 'Нова е-адреса:',
 'changeemail-none' => '(ништа)',
+'changeemail-password' => 'Ваша лозинка:',
 'changeemail-submit' => 'Промени',
 'changeemail-cancel' => 'Откажи',
 
@@ -999,8 +1004,8 @@ $2
 'minoredit' => 'мања измена',
 'watchthis' => 'надгледај ову страницу',
 'savearticle' => 'Сачувај страницу',
-'preview' => 'Преглед',
-'showpreview' => 'Ð\9fÑ\80егледаÑ\98',
+'preview' => 'Претпреглед',
+'showpreview' => 'Ð\9fÑ\80икажи Ð¿Ñ\80еÑ\82пÑ\80еглед',
 'showlivepreview' => 'Тренутни преглед',
 'showdiff' => 'Прикажи измене',
 'anoneditwarning' => "'''Упозорење:''' нисте пријављени.
@@ -1140,10 +1145,10 @@ $2
 '''Не шаљите радове заштићене ауторским правима без дозволе!'''",
 'longpageerror' => "'''Грешка: текст који сте унели је величине {{PLURAL:$1|један килобајт|$1 килобајта|$1 килобајта}}, што је веће од {{PLURAL:$2|дозвољеног једног килобајта|дозвољена $2 килобајта|дозвољених $2 килобајта}}.'''
 Страница не може бити сачувана.",
-'readonlywarning' => "'''Упозорење: база података је закључана ради одржавања, тако да нећете моћи да сачувате измене.
\9dаÑ\98боÑ\99е Ð±Ð¸ Ð±Ð¸Ð»Ð¾ Ð´Ð° Ñ\83множиÑ\82е Ñ\82екÑ\81Ñ\82 Ñ\83 Ñ\83Ñ\80еÑ\92иваÑ\87 Ñ\82екÑ\81Ñ\82а Ð¸ Ñ\81аÑ\87Ñ\83ваÑ\82е Ð³Ð° Ð·Ð° ÐºÐ°Ñ\81ниÑ\98е.'''
+'readonlywarning' => "'''Упозорење: база података је закључана ради одржавања, тако да тренутно нећете моћи да сачувате измене.
\9dаÑ\98боÑ\99е Ð±Ð¸ Ð±Ð¸Ð»Ð¾ Ð´Ð° Ñ\81аÑ\87Ñ\83ваÑ\82е Ñ\82екÑ\81Ñ\82 Ð·Ð° ÐºÐ°Ñ\81ниÑ\98е Ñ\83 Ð½ÐµÐºÐ¾Ñ\98 Ñ\82екÑ\81Ñ\82Ñ\83алноÑ\98 Ð´Ð°Ñ\82оÑ\82еÑ\86и.'''
 
\90дминиÑ\81Ñ\82Ñ\80аÑ\82оÑ\80 ÐºÐ¾Ñ\98и Ñ\98е Ð·Ð°ÐºÑ\99Ñ\83Ñ\87ао Ð±Ð°Ð·Ñ\83 Ð¿Ð¾Ð´Ð°Ñ\82ака Ñ\98е Ð½Ð°Ð²ÐµÐ¾ следеће објашњење: $1",
\90дминиÑ\81Ñ\82Ñ\80аÑ\82оÑ\80 ÐºÐ¾Ñ\98и Ñ\98е Ð·Ð°ÐºÑ\99Ñ\83Ñ\87ао Ð±Ð°Ð·Ñ\83 Ð´Ð°Ð¾ Ñ\98е следеће објашњење: $1",
 'protectedpagewarning' => "'''Упозорење: ова страница је заштићена, тако да само администратори могу да је мењају.'''
 Последња ставка у историји је приказана испод:",
 'semiprotectedpagewarning' => "'''Напомена:''' ова страница је заштићена, тако да само регистровани корисници могу да је уређују.
@@ -1158,7 +1163,6 @@ $2
 'hiddencategories' => 'Ова страница је члан {{PLURAL:$1|једне скривене категорије|$1 скривене категорије|$1 скривених категорија}}:',
 'edittools' => '<!-- Овај текст ће бити приказан испод обрасца за уређивање и отпремање. -->',
 'edittools-upload' => '-',
-'nocreatetitle' => 'Прављење странице је ограничено',
 'nocreatetext' => 'На овом викију је ограничено прављење нових страница.
 Можете се вратити и уредити постојећу страницу, или се [[Special:UserLogin|пријавите или отворите налог]].',
 'nocreate-loggedin' => 'Немате дозволу да правите нове странице.',
@@ -1717,15 +1721,13 @@ $1",
 'right-sendemail' => 'слање е-порука другим корисницима',
 'right-passwordreset' => 'прегледање порука за обнављање лозинке',
 
+# Special:Log/newusers
+'newuserlogpage' => 'Дневник нових корисника',
+'newuserlogpagetext' => 'Ово је историја нових корисника.',
+
 # User rights log
 'rightslog' => 'Дневник корисничких права',
 'rightslogtext' => 'Ово је дневник измена корисничких права.',
-'rightslogentry' => '{{GENDER:|је променио|је променила|је променио}} права за члана $1 из $2 у $3',
-'rightslogentry-autopromote' => 'је унапређен из $2 у $3',
-'logentry-rights-rights' => '$1 {{GENDER:$1|је променио|је променила|је променио}} чланство групе за $3 из $4 у $5',
-'logentry-rights-rights-legacy' => '$1 {{GENDER:$1|је променио|је променила|је променио}} чланство групе за $3',
-'logentry-rights-autopromote' => '$1 је аутоматски {{GENDER:$1|унапређен|унапређена|унапређен}} из $4 у $5',
-'rightsnone' => '(ништа)',
 
 # Associated actions - in the sentence "You do not have permission to X"
 'action-read' => 'читање ове странице',
@@ -1978,6 +1980,7 @@ $1',
 'backend-fail-notsame' => 'Већ постоји неистоветна датотека – $1.',
 'backend-fail-invalidpath' => '$1 није исправна путања за складиштење.',
 'backend-fail-delete' => 'Не могу да обришем датотеку $1.',
+'backend-fail-describe' => 'Не могу да променим метаподатке за датотеку „$1“.',
 'backend-fail-alreadyexists' => 'Датотека $1 већ постоји.',
 'backend-fail-store' => 'Не могу да сместим датотеку $1 у $2.',
 'backend-fail-copy' => 'Не могу да умножим датотеку $1 у $2.',
@@ -2126,7 +2129,7 @@ $1',
 Њен опис можете да измените на [$2 одговарајућој страници].',
 'filepage-nofile' => 'Не постоји датотека с овим називом.',
 'filepage-nofile-link' => 'Не постоји датотека с овим називом, али је можете [$1 послати].',
-'uploadnewversion-linktext' => 'Пошаљи ново издање ове датотеке',
+'uploadnewversion-linktext' => 'Пошаљи нову верзију ове датотеке',
 'shared-repo-from' => 'из $1',
 'shared-repo' => 'заједничко складиште',
 'shared-repo-name-wikimediacommons' => 'Викимедијина остава',
@@ -2391,10 +2394,6 @@ $1',
 'activeusers-hidesysops' => 'Сакриј администраторе',
 'activeusers-noresult' => 'Корисник није пронађен.',
 
-# Special:Log/newusers
-'newuserlogpage' => 'Дневник нових корисника',
-'newuserlogpagetext' => 'Ово је историја нових корисника.',
-
 # Special:ListGroupRights
 'listgrouprights' => 'Права корисничких група',
 'listgrouprights-summary' => 'Следи списак корисничких група на овом викију, заједно с правима приступа.
@@ -2495,6 +2494,16 @@ $1',
 'enotif_mailer' => '{{SITENAME}} е-обавештење',
 'enotif_reset' => 'Означи све странице као посећене',
 'enotif_impersonal_salutation' => '{{SITENAME}} корисник',
+'enotif_subject_deleted' => 'Страницу $1 на {{SITENAME}} {{GENDER:$2|обрисао је|обрисала је|обрисао је}} $2',
+'enotif_subject_created' => 'Страницу $1 на {{SITENAME}} {{GENDER:$2|направио је|направила је|направио је}} $2',
+'enotif_subject_moved' => 'Страницу $1 на {{SITENAME}} {{GENDER:$2|преместио је|преместила је|преместио је}} $2',
+'enotif_subject_restored' => 'Страницу $1 на {{SITENAME}} {{GENDER:$2|вратио је|вратила је|вратио је}} $2',
+'enotif_subject_changed' => 'Страницу $1 на {{SITENAME}} {{GENDER:$2|променио је|променила је|променио је}} $2',
+'enotif_body_intro_deleted' => 'Страницу $1 на {{SITENAME}} {{GENDER:$2|обрисао је|обрисала је|обрисао је}} $2 дана $PAGEEDITDATE. Погледајте $3.',
+'enotif_body_intro_created' => 'Страницу $1 на {{SITENAME}} {{GENDER:$2|направио је|направила је|направио је}} $2 дана $PAGEEDITDATE. Тренутна измена налази се на $3.',
+'enotif_body_intro_moved' => 'Страницу $1 на {{SITENAME}} {{GENDER:$2|преместио је|преместила је|преместио је}} $2 дана $PAGEEDITDATE. Тренутна измена налази се на  $3.',
+'enotif_body_intro_restored' => 'Страницу $1 на {{SITENAME}} {{GENDER:$2|вратио је|вратила је|вратио је}} $2 дана $PAGEEDITDATE. Тренутна измена налази се на $3.',
+'enotif_body_intro_changed' => 'Страницу $1 на {{SITENAME}} {{GENDER:$2|променио је|променила је|променио је}} $2 дана $PAGEEDITDATE. Тренутна измена налази се на $3.',
 'enotif_lastvisited' => 'Погледајте $1 за све измене од ваше последње посете.',
 'enotif_lastdiff' => 'Погледајте $1 да видите ову измену.',
 'enotif_anon_editor' => 'анониман корисник $1',
@@ -2528,6 +2537,8 @@ $UNWATCHURL
 
 Подршка и даља помоћ:
 {{canonicalurl:{{MediaWiki:Helppage}}}}',
+'created' => 'направљена',
+'changed' => 'измењена',
 
 # Delete
 'deletepage' => 'Обриши страницу',
@@ -3072,7 +3083,7 @@ $1',
 Датуми и имена уредника ће бити сачувани.
 Све радње при увозу с других викија су забележене у [[Special:Log/import|дневнику увоза]].',
 'import-interwiki-source' => 'Извор викија/странице:',
-'import-interwiki-history' => 'Умножи Ñ\81ве измене ове странице',
+'import-interwiki-history' => 'Ð\9aопиÑ\80аÑ\98 Ñ\81ве Ñ\81Ñ\82аÑ\80иÑ\98е измене ове странице',
 'import-interwiki-templates' => 'Укључи све шаблоне',
 'import-interwiki-submit' => 'Увези',
 'import-interwiki-namespace' => 'Одредишни именски простор:',
@@ -3199,7 +3210,7 @@ $1',
 'tooltip-watchlistedit-raw-submit' => 'Ажурирај списак',
 'tooltip-recreate' => 'Поново направите страницу иако је обрисана',
 'tooltip-upload' => 'Започните отпремање',
-'tooltip-rollback' => 'Опција „Врати“ враћа измене последњег корисника',
+'tooltip-rollback' => '„Врати“ враћа измене последњег корисника једним кликом',
 'tooltip-undo' => 'Враћа ову измену и отвара образац за уређивање.',
 'tooltip-preferences-save' => 'Сачувај поставке',
 'tooltip-summary' => 'Унесите кратак опис',
@@ -3991,7 +4002,7 @@ $5
 
 # Delete conflict
 'deletedwhileediting' => "'''Упозорење''': ова страница је обрисана након што сте почели с уређивањем!",
-'confirmrecreate' => "[[User:$1|$1]] ([[User talk:$1|разговор]]) {{GENDER:$1|је обрисао|је обрисала|је обрисао}} ову страницу након што сте почели да је уређујете из следећег разлога:
+'confirmrecreate' => "[[User:$1|$1]] ([[User talk:$1|разговор]]) {{GENDER:$1|је обрисао|је обрисала|обриса}} ову страницу након што сте почели да је уређујете из следећег разлога:
 : ''$2''
 Потврдите да стварно желите да направите страницу.",
 'confirmrecreate-noreason' => 'Корисник [[User:$1|$1]] ([[User talk:$1|разговор]]) је обрисао ову страницу након што сте почели да га уређујете. Потврдите да стварно желите да поново направите ову страницу.',
@@ -4322,7 +4333,10 @@ $5
 'logentry-newusers-create' => '$1 {{GENDER:|је отворио|је отворила|је отворио}} кориснички налог',
 'logentry-newusers-create2' => '$1 {{GENDER:|је отворио|је отворила|је отворио}} кориснички налог $3',
 'logentry-newusers-autocreate' => 'Налог $1 је самостално отворен',
-'newuserlog-byemail' => 'лозинка је послата е-поштом',
+'logentry-rights-rights' => '$1 {{GENDER:$1|је променио|је променила|је променио}} чланство групе за $3 из $4 у $5',
+'logentry-rights-rights-legacy' => '$1 {{GENDER:$1|је променио|је променила|је променио}} чланство групе за $3',
+'logentry-rights-autopromote' => '$1 је аутоматски {{GENDER:$1|унапређен|унапређена|унапређен}} из $4 у $5',
+'rightsnone' => '(ништа)',
 
 # Feedback
 'feedback-bugornote' => 'Ако сте спремни да детаљно опишете технички проблем, онда [$1 пријавите грешку].
index d5460a5..c516bf8 100644 (file)
@@ -1068,7 +1068,6 @@ Poslednji zapis u dnevniku je prikazan ispod:",
 'hiddencategories' => 'Ova stranica je član {{PLURAL:$1|jedne skrivene kategorije|$1 skrivene kategorije|$1 skrivenih kategorija}}:',
 'edittools' => '<!-- Ovaj tekst će biti prikazan ispod obrasca za uređivanje i otpremanje. -->',
 'edittools-upload' => '-',
-'nocreatetitle' => 'Pravljenje stranice je ograničeno',
 'nocreatetext' => 'Na ovom vikiju je ograničeno pravljenje novih stranica.
 Možete se vratiti i urediti postojeću stranicu, ili se [[Special:UserLogin|prijavite ili otvorite nalog]].',
 'nocreate-loggedin' => 'Nemate dozvolu da pravite nove stranice.',
@@ -1627,15 +1626,13 @@ Ako izaberete da ga unesete, ono će biti korišćeno za pripisivanje vašeg rad
 'right-sendemail' => 'slanje e-poruka drugim korisnicima',
 'right-passwordreset' => 'pregledanje poruka za obnavljanje lozinke',
 
+# Special:Log/newusers
+'newuserlogpage' => 'Dnevnik novih korisnika',
+'newuserlogpagetext' => 'Ovo je istorija novih korisnika.',
+
 # User rights log
 'rightslog' => 'Dnevnik korisničkih prava',
 'rightslogtext' => 'Ovo je dnevnik izmena korisničkih prava.',
-'rightslogentry' => '{{GENDER:|je promenio|je promenila|je promenio}} prava za člana $1 iz $2 u $3',
-'rightslogentry-autopromote' => 'je unapređen iz $2 u $3',
-'logentry-rights-rights' => '$1 {{GENDER:$1|je promenio|je promenila|je promenio}} članstvo grupe za $3 iz $4 u $5',
-'logentry-rights-rights-legacy' => '$1 {{GENDER:$1|je promenio|je promenila|je promenio}} članstvo grupe za $3',
-'logentry-rights-autopromote' => '$1 je automatski {{GENDER:$1|unapređen|unapređena|unapređen}} iz $4 u $5',
-'rightsnone' => '(ništa)',
 
 # Associated actions - in the sentence "You do not have permission to X"
 'action-read' => 'čitanje ove stranice',
@@ -2301,10 +2298,6 @@ Podržani protokoli: <code>$1</code> (zadaje http:// ako ne navedete protokol).'
 'activeusers-hidesysops' => 'Sakrij administratore',
 'activeusers-noresult' => 'Korisnik nije pronađen.',
 
-# Special:Log/newusers
-'newuserlogpage' => 'Dnevnik novih korisnika',
-'newuserlogpagetext' => 'Ovo je istorija novih korisnika.',
-
 # Special:ListGroupRights
 'listgrouprights' => 'Prava korisničkih grupa',
 'listgrouprights-summary' => 'Sledi spisak korisničkih grupa na ovom vikiju, zajedno s pravima pristupa.
@@ -2438,6 +2431,8 @@ $UNWATCHURL
 
 Podrška i dalja pomoć:
 {{canonicalurl:{{MediaWiki:Helppage}}}}',
+'created' => 'napravljena',
+'changed' => 'izmenjena',
 
 # Delete
 'deletepage' => 'Obriši stranicu',
@@ -4232,7 +4227,10 @@ Slike su prikazane u punoj veličini, a druge vrste datoteka se pokreću pomoću
 'logentry-newusers-create' => '$1 {{GENDER:|je otvorio|je otvorila|je otvorio}} korisnički nalog',
 'logentry-newusers-create2' => '$1 {{GENDER:|je otvorio|je otvorila|je otvorio}} korisnički nalog $3',
 'logentry-newusers-autocreate' => 'Nalog $1 je samostalno otvoren',
-'newuserlog-byemail' => 'lozinka je poslata e-poštom',
+'logentry-rights-rights' => '$1 {{GENDER:$1|je promenio|je promenila|je promenio}} članstvo grupe za $3 iz $4 u $5',
+'logentry-rights-rights-legacy' => '$1 {{GENDER:$1|je promenio|je promenila|je promenio}} članstvo grupe za $3',
+'logentry-rights-autopromote' => '$1 je automatski {{GENDER:$1|unapređen|unapređena|unapređen}} iz $4 u $5',
+'rightsnone' => '(ništa)',
 
 # Feedback
 'feedback-bugornote' => 'Ako ste spremni da detaljno opišete tehnički problem, onda [$1 prijavite grešku].
index 9bcadf5..0b23f31 100644 (file)
@@ -727,7 +727,6 @@ A kan ben trowe efu dribi.
 
 # User rights log
 'rightslog' => 'Log buku fu kebroikiman leti',
-'rightsnone' => '(no)',
 
 # Recent changes
 'nchanges' => '$1 {{PLURAL:$1|kenki|kenki}}',
@@ -1237,4 +1236,7 @@ Trawan o kibri.
 # Special:SpecialPages
 'specialpages' => 'Spesrutu papira',
 
+# New logging system
+'rightsnone' => '(no)',
+
 );
index 1b312e5..f2bd238 100644 (file)
@@ -736,7 +736,6 @@ Gruund foar ju Speere: $1",
 'template-semiprotected' => '(Siedenskuts foar nit anmäldede un näie Benutsere)',
 'hiddencategories' => 'Disse Siede is Meeglid fon {{PLURAL:$1|1 ferstatte Kategorie|$1 ferstatte Kategorien}}:',
 'edittools' => '<!-- Text hier stoant unner Beoarbaidengsfäildere un Hoochleedefäildere. -->',
-'nocreatetitle' => 'Dät Moakjen fon näie Sieden is begränsed',
 'nocreatetext' => 'Ap {{SITENAME}} wuude dät Moakjen fon näie Sieden begränsed. Du koast al bestoundene Sieden beoarbaidje of die [[Special:UserLogin|anmäldje]].',
 'nocreate-loggedin' => 'Du hääst neen Begjuchtigenge, näie Sieden antoulääsen.',
 'sectioneditnotsupported-title' => 'Ju Beoarbaidenge fon Ousnitte wäd nit unnerstutsed',
@@ -1255,12 +1254,13 @@ Ju duur maximoal $1 {{PLURAL:$1|Teeken|Teekene}} loang weese.',
 'right-sendemail' => 'E-Mails an uur Benutsere seende',
 'right-passwordreset' => 'Paaswoud fon n Benutser touräächsätte ([[Special:PasswordReset|Spezioalsiede]])',
 
+# Special:Log/newusers
+'newuserlogpage' => 'Näianmäldengs-Logbouk',
+'newuserlogpagetext' => 'Dit is dät Logbouk fon näi anmäldede Benutsere.',
+
 # User rights log
 'rightslog' => 'Gjuchte-Logbouk',
 'rightslogtext' => 'Dit is dät Logbouk fon do Annerengen fon do Benutsergjuchte.',
-'rightslogentry' => 'annerde ju Gruppentouheeregaid foar „$1“ fon „$2“ ap „$3“.',
-'rightslogentry-autopromote' => 'wuud automatisk fon „$2“ ätter „$3“ touoardend',
-'rightsnone' => '(-)',
 
 # Associated actions - in the sentence "You do not have permission to X"
 'action-read' => 'disse Siede tou leesen',
@@ -1829,10 +1829,6 @@ Sjuch uk ju Lieste fon do [[Special:WantedCategories|wonskede Kategorien]].',
 'activeusers-hidesysops' => 'Administratore fersteete',
 'activeusers-noresult' => 'Neen Benutsere fuunen.',
 
-# Special:Log/newusers
-'newuserlogpage' => 'Näianmäldengs-Logbouk',
-'newuserlogpagetext' => 'Dit is dät Logbouk fon näi anmäldede Benutsere.',
-
 # Special:ListGroupRights
 'listgrouprights' => 'Benutsergruppen-Gjuchte',
 'listgrouprights-summary' => 'Dit is ne Lieste fon do in dissen Wiki definierde Benutsergruppen un do deermäd ferbuundene Gjuchte.
@@ -1960,6 +1956,8 @@ Uum ju Siede fon dien Kontrollieste tou läskjen, besäik
 $UNWATCHURL
 
 Touräächmäldengen un wiedere Hälpe: {{canonicalurl:{{MediaWiki:Helppage}}}}',
+'created' => 'näi anlaid',
+'changed' => 'annerd',
 
 # Delete
 'deletepage' => 'Siede läskje',
@@ -3288,7 +3286,7 @@ Ne [{{SERVER}}{{SCRIPTPATH}}/COPYING Kopie fon ju ''GNU General Public License''
 # New logging system
 'revdelete-restricted' => 'Einskränkengen jäilde uk foar Administratore',
 'revdelete-unrestricted' => 'Ienskränkengen foar Administratore wächhoald',
-'newuserlog-byemail' => 'dät Paaswoud wuud uur E-Mail fersoand',
+'rightsnone' => '(-)',
 
 # Search suggestions
 'searchsuggest-search' => 'Säik',
index 5f3c0dc..4e41157 100644 (file)
@@ -821,7 +821,6 @@ kuncén nu ngonci pangkalan data mikeun kajelasan : $1",
 'template-semiprotected' => '(semi-dikonci)',
 'hiddencategories' => 'Ieu kaca kaasup {{PLURAL:$1|1 kategori nyumput|$1 kategori nyumput}}:',
 'edittools' => '<!-- Téks di dieu bakal némbongan di handapeun formulir édit jeung muat.-->',
-'nocreatetitle' => 'Nyieun kaca kakara diwatesan',
 'nocreatetext' => '{{SITENAME}} nutup kabisa nyieun kaca anyar.
 Mangga édit artikel nu geus aya, atawa [[Special:UserLogin|asup log/daptar heula]].',
 'nocreate-loggedin' => 'Anjeun teu diwenangkeun pikeun nyieun kaca anyar.',
@@ -1310,12 +1309,13 @@ Mun geus anggeus teu bisa dibolaykeun.',
 'right-siteadmin' => 'Ngonci jeung muka konci databés',
 'right-sendemail' => 'Kirim surélék ka pamaké séjén',
 
+# Special:Log/newusers
+'newuserlogpage' => 'Log akun anyar',
+'newuserlogpagetext' => 'Di handap ieu béréndélan log pamaké anyar.',
+
 # User rights log
 'rightslog' => 'Log hak pamaké',
 'rightslogtext' => 'Ieu mangrupa log parobahan hak-hak pamaké.',
-'rightslogentry' => 'ngarobah kaanggotaan grup pikeun $1 tina $2 jadi $3',
-'rightslogentry-autopromote' => 'geus sacara otomatis dipromosikeun ti $2 ka $3',
-'rightsnone' => '(euweuh)',
 
 # Associated actions - in the sentence "You do not have permission to X"
 'action-read' => 'maca ieu kaca',
@@ -1816,10 +1816,6 @@ Baca ogé [[Special:WantedCategories|kategori nu dipikabutuh]].',
 'activeusers-hidesysops' => 'Sumputkeun kuncén',
 'activeusers-noresult' => 'Teu kapendak.',
 
-# Special:Log/newusers
-'newuserlogpage' => 'Log akun anyar',
-'newuserlogpagetext' => 'Di handap ieu béréndélan log pamaké anyar.',
-
 # Special:ListGroupRights
 'listgrouprights' => 'Hak-hak grup pamaké',
 'listgrouprights-summary' => 'Ieu mangrupa daptar jumplukan pamaké anu aya di wiki ieu, kalawan daptar hak aksés maranéhanana.
@@ -1928,6 +1924,8 @@ Pikeun ngarobah setélan dabtar awaseun anjeun, sindang ka {{SERVER}}{{localurl:
 
 Asupan jeung bantuan salajengna:
 {{canonicalurl:{{MediaWiki:Helppage}}}}',
+'created' => 'geus dijieun',
+'changed' => 'geus robah',
 
 # Delete
 'deletepage' => 'Hapus kaca',
@@ -3044,7 +3042,7 @@ Coba ku sawangan normal.',
 # New logging system
 'revdelete-restricted' => 'akses geus dibatesan ukur keur kuncén',
 'revdelete-unrestricted' => 'Watesan akses kuncén dihapuskeun',
-'newuserlog-byemail' => 'Sandi geus dikirim maké surélék.',
+'rightsnone' => '(euweuh)',
 
 # Feedback
 'feedback-subject' => 'Ngeunaan:',
index 879e877..bee87f8 100644 (file)
@@ -454,6 +454,7 @@ $messages = array(
 'newwindow' => '(öppnas i ett nytt fönster)',
 'cancel' => 'Avbryt',
 'moredotdotdot' => 'Mer...',
+'morenotlisted' => 'Mer som inte är listad...',
 'mypage' => 'Min sida',
 'mytalk' => 'Diskussion',
 'anontalk' => 'Diskussionssida för denna IP-adress',
@@ -754,9 +755,9 @@ 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?',
-'createaccountmail' => 'med e-post',
+'createaccountmail' => 'Använd ett tillfällig slumpartat lösenord och skicka den till e-postadressen som anges nedan',
 'createaccountreason' => 'Orsak:',
-'badretype' => 'De lösenord du uppgett överenstämmer inte med varandra.',
+'badretype' => 'De lösenord du uppgett överensstämmer inte med varandra.',
 'userexists' => 'Det valda användarnamnet används redan.
 Var god välj ett annat namn.',
 'loginerror' => 'Inloggningsproblem',
@@ -824,6 +825,7 @@ Vänta innan du försöker igen.',
 # E-mail sending
 'php-mail-error-unknown' => "Okänt fel i PHP's mail()-funktion",
 'user-mail-no-addy' => 'Försökte skicka e-post utan en e-postadress',
+'user-mail-no-body' => 'Försökte skicka e-post med tomt eller orimligt kort innehåll.',
 
 # Change password dialog
 'resetpass' => 'Ändra lösenord',
@@ -881,6 +883,7 @@ Tillfälligt lösenord: $2',
 'changeemail-oldemail' => 'Nuvarande e-postadress:',
 'changeemail-newemail' => 'Ny e-postadress:',
 'changeemail-none' => '(ingen)',
+'changeemail-password' => 'Ditt lösenord till {{SITENAME}}:',
 'changeemail-submit' => 'Ändra e-post',
 'changeemail-cancel' => 'Avbryt',
 
@@ -1044,7 +1047,7 @@ Du lovar oss också att du skrev texten själv, eller kopierade från kulturellt
 'longpageerror' => "'''FEL: Texten som du försöker spara är {{PLURAL:$1|en kilobyte|$1 kilobyte}}, vilket är mer än det maximalt tillåtna {{PLURAL:$2|en kilobyte|$2 kilobyte}}.'''
 Den kan inte sparas.",
 'readonlywarning' => "'''VARNING: Databasen är tillfälligt låst för underhåll. Du kommer inte att kunna spara dina ändringar just nu.
-Det kan vara klokt att kopiera över texten till din egen dator, tills databasen är upplåst igen.'''
+Det kan vara klokt att kopiera texten till ett textdokument som sparas på din dator tills vidare.'''
 
 Administratören som låste databasen gav följande förklaring: $1",
 'protectedpagewarning' => "'''Varning: Den här sidan har låsts så att bara användare med administratörsrättigheter kan redigera den.'''
@@ -1061,7 +1064,6 @@ Den senaste loggposten tillhandahålls nedan som referens:",
 'template-semiprotected' => '(delvis skyddad)',
 'hiddencategories' => 'Denna sida är medlem i följande dolda {{PLURAL:$1|kategori|kategorier}}:',
 'edittools' => '<!-- Denna text kommer att visas nedanför redigeringsrutor och uppladdningsformulär. -->',
-'nocreatetitle' => 'Skapande av sidor begränsat',
 'nocreatetext' => '{{SITENAME}} har begränsat möjligheterna att skapa nya sidor.
 Du kan redigera existerande sidor, eller [[Special:UserLogin|logga in eller skapa ett användarkonto]].',
 'nocreate-loggedin' => 'Du har inte behörighet att skapa nya sidor.',
@@ -1573,7 +1575,7 @@ Om du väljer att ange ditt riktiga namn, kommer det att användas för att till
 'right-bot' => 'Behandlas som en automatisk process',
 'right-nominornewtalk' => 'Mindre ändringar på diskussionssidor ger inte besked om nya meddelanden',
 'right-apihighlimits' => 'Använda högre gränser i API-frågor',
-'right-writeapi' => 'Använda skriv-API:t',
+'right-writeapi' => 'Använda skriv-API:et',
 'right-delete' => 'Radera sidor',
 'right-bigdelete' => 'Radera sidor med stor historik',
 'right-deletelogentry' => 'Radera och återställ specifika loggposter',
@@ -1613,15 +1615,13 @@ Om du väljer att ange ditt riktiga namn, kommer det att användas för att till
 'right-sendemail' => 'Skicka e-post till andra användare',
 'right-passwordreset' => 'Visa e-postmeddelanden med lösenordsåterställning',
 
+# Special:Log/newusers
+'newuserlogpage' => 'Logg över nya användare',
+'newuserlogpagetext' => 'Detta är en logg över skapade användarkonton.',
+
 # User rights log
 'rightslog' => 'Användarrättighetslogg',
 'rightslogtext' => 'Detta är en logg över ändringar av användares rättigheter.',
-'rightslogentry' => 'ändrade grupptillhörighet för $1 från $2 till $3',
-'rightslogentry-autopromote' => 'befordrades automatiskt från $2 till $3',
-'logentry-rights-rights' => '$1 ändrade gruppmedlemskap för $3 från $4 till $5',
-'logentry-rights-rights-legacy' => '$1 ändrade gruppmedlemskap för $3',
-'logentry-rights-autopromote' => '$1 befordrades automatiskt från $4 till $5',
-'rightsnone' => '(inga)',
 
 # Associated actions - in the sentence "You do not have permission to X"
 'action-read' => 'läsa denna sida',
@@ -2248,7 +2248,7 @@ Se även [[Special:WantedCategories|önskade kategorier]].',
 'linksearch-ok' => 'Sök',
 'linksearch-text' => 'Jokertecken (wildcards) som t.ex. "*.wikipedia.org" kan användas.
 Det krävs åtminstone en toppdomän, t.ex. "*.org".<br />
-Protokoll som stöds: <code>$1</code> (sätts till http:// om inget protokoll anges).',
+{{PLURAL:$2|Protokollet|Protokollen}} som stöds: <code>$1</code> (sätts till http:// om inget protokoll anges).',
 'linksearch-line' => '$1 länkas från $2',
 'linksearch-error' => 'Jokertecken kan bara användas i början av domännamnet.',
 
@@ -2261,16 +2261,12 @@ Protokoll som stöds: <code>$1</code> (sätts till http:// om inget protokoll an
 # Special:ActiveUsers
 'activeusers' => 'Lista över aktiva användare',
 'activeusers-intro' => 'Detta är en lista på användare som har haft någon form av aktivitet inom de senaste $1 {{PLURAL:$1|dygnet|dygnen}}.',
-'activeusers-count' => '$1 {{PLURAL:$1|redigering|redigeringar}} {{PLURAL:$3|det senaste dygnet|de senaste $3 dygnen}}',
+'activeusers-count' => '$1 {{PLURAL:$1|handling|handlingar}} {{PLURAL:$3|det senaste dygnet|de senaste $3 dygnen}}',
 'activeusers-from' => 'Visa användare från och med:',
 'activeusers-hidebots' => 'Göm botar',
 'activeusers-hidesysops' => 'Dölj administratörer',
 'activeusers-noresult' => 'Inga användare funna.',
 
-# Special:Log/newusers
-'newuserlogpage' => 'Logg över nya användare',
-'newuserlogpagetext' => 'Detta är en logg över skapade användarkonton.',
-
 # Special:ListGroupRights
 'listgrouprights' => 'Behörigheter för användargrupper',
 'listgrouprights-summary' => 'Följande lista visar vilka användargrupper som är definierade på den här wikin och vilka behörigheter grupperna har.
@@ -2336,8 +2332,8 @@ Den e-postadress du har angivit i [[Special:Preferences|dina användarinställni
 'watchnologin' => 'Inte inloggad',
 'watchnologintext' => 'Du måste vara [[Special:UserLogin|inloggad]] för att kunna ändra din bevakningslista.',
 'addwatch' => 'Lägg till i bevakningslistan',
-'addedwatchtext' => "Sidan \"[[:\$1]]\" har lagts till på din [[Special:Watchlist|bevakningslista]].
-Framtida ändringar av den här sidan och dess diskussionssida kommer att listas där, och sidan kommer att markeras med '''fetstil''' i [[Special:RecentChanges|listan över de senaste ändringarna]] för att lättare kunna hittas.",
+'addedwatchtext' => 'Sidan "[[:$1]]" har lagts till på din [[Special:Watchlist|bevakningslista]].
+Framtida ändringar av den här sidan och dess diskussionssida kommer att listas där.',
 'removewatch' => 'Ta bort från bevakningslistan',
 'removedwatchtext' => 'Sidan "[[:$1]]" har tagits bort från [[Special:Watchlist|din bevakningslista]].',
 'watch' => 'Bevaka',
@@ -2371,7 +2367,7 @@ Framtida ändringar av den här sidan och dess diskussionssida kommer att listas
 'enotif_subject_moved' => '{{SITENAME}}sidan $1 har flyttats av {{gender:$2|$2}}',
 'enotif_subject_restored' => '{{SITENAME}}sidan $1 har återställts av {{gender:$2|$2}}',
 'enotif_subject_changed' => '{{SITENAME}}sidan $1 har ändrats {{gender:$2|$2}}',
-'enotif_body_intro_deleted' => '{{SITENAME}}sidan $1 raderades den $PAGEEDITDATE av {{gender:$2|$2}}, se $3 för den aktuella versionen.',
+'enotif_body_intro_deleted' => 'Sidan $1 på {{SITENAME}} raderades den $PAGEEDITDATE av {{gender:$2|$2}}, se $3.',
 'enotif_body_intro_created' => '{{SITENAME}}sidan $1 skapades den $PAGEEDITDATE av {{gender:$2|$2}}, se $3 för den aktuella versionen.',
 'enotif_body_intro_moved' => '{{SITENAME}}sidan $1 flyttades den $PAGEEDITDATE av {{gender:$2|$2}}, se $3 för den aktuella versionen.',
 'enotif_body_intro_restored' => '{{SITENAME}}sidan $1 återställdes den $PAGEEDITDATE av {{gender:$2|$2}}, se $3 för den aktuella versionen.',
@@ -2406,6 +2402,8 @@ $UNWATCHURL
 
 Feedback och ytterligare hjälp:
 {{canonicalurl:{{MediaWiki:Helppage}}}}',
+'created' => 'skapad',
+'changed' => 'ändrad',
 
 # Delete
 'deletepage' => 'Ta bort sida',
@@ -2472,6 +2470,8 @@ Se [[Special:ProtectedPages|listan över skyddade sidor]] för listan över akti
 'prot_1movedto2' => 'flyttade [[$1]] till [[$2]]',
 'protect-badnamespace-title' => 'Namnrymd som inte kan skrivskyddas',
 'protect-badnamespace-text' => 'Sidor i den här namnrymden kan inte skrivskyddas.',
+'protect-norestrictiontypes-text' => 'Denna sida kan inte skyddas eftersom det inte finns några begränsningstyper tillgängliga.',
+'protect-norestrictiontypes-title' => 'Oskyddbar sida',
 'protect-legend' => 'Bekräfta skrivskydd av sida',
 'protectcomment' => 'Anledning:',
 'protectexpiry' => 'Varaktighet:',
@@ -2488,7 +2488,7 @@ Nuvarande skrivskyddsinställning för sidan '''$1''' är:",
 'protect-cascadeon' => 'Den här sidan är skrivskyddad eftersom den inkluderas på följande {{PLURAL:$1|sida|sidor}} som har ett kaskaderande skydd.
 Du kan ändra skyddet av den här sidan, men det påverkar inte det kaskaderande skyddet.',
 'protect-default' => 'Tillåt alla användare',
-'protect-fallback' => 'Kräver "$1"-behörighet',
+'protect-fallback' => 'Kräv "$1"-behörighet',
 'protect-level-autoconfirmed' => 'Blockera nya och oregistrerade användare',
 'protect-level-sysop' => 'Enbart administratörer',
 'protect-summary-cascade' => 'kaskaderande',
@@ -2789,7 +2789,7 @@ Du kan välja att automatiskt uppdatera omdirigeringar som leder till den gamla
 Om du väljer att inte göra det, kontrollera då att du inte skapar några [[Special:DoubleRedirects|dubbla]] eller [[Special:BrokenRedirects|trasiga omdirigeringar]].
 Du bör också se till att länkar fortsätter att peka dit de ska.
 
-Notera att sidan '''inte''' kan flyttas om det redan finns en sida under den nya sidtiteln, såvida inte den sidan är tom eller en omdirigering till den gamla titeln och saknar annan versionshistorik.
+Notera att sidan '''inte''' kan flyttas om det redan finns en sida under den nya sidtiteln, såvida inte den sidan är en omdirigering till den gamla titeln och saknar annan versionshistorik.
 Det innebär att du kan flytta tillbaks en sida om du råkar göra fel, och att du inte kan skriva över existerande sidor.
 
 '''VARNING!'''
@@ -2971,6 +2971,7 @@ Spara den på din dator och ladda upp den här.',
 'import-error-interwiki' => 'Sidan "$1" är inte importerad eftersom dess namn är reserverat för externa länkar (interwiki).',
 'import-error-special' => 'Sidan "$1" är inte importerad eftersom den tillhör en särskild namnrymd som inte tillåter sidor.',
 'import-error-invalid' => 'Sidan "$1" är inte importerad eftersom dess namn är ogiltigt.',
+'import-error-unserialize' => 'Versionen $2 av sidan "$1" kunde inte avserialiseras. Versionen rapporterades för att använda innehållsmodellen $3, som serialiserades som $4.',
 'import-options-wrong' => 'Fel {{PLURAL:$2|alternativ|alternativ}}: <nowiki>$1</nowiki>',
 'import-rootpage-invalid' => 'Angiven grundsida är en ogiltig titel.',
 'import-rootpage-nosubpage' => 'Namnrymden "$1" till grundsidan tillåter inte undersidor.',
@@ -3155,6 +3156,7 @@ Detta orsakades troligen av en länk till en svartlistad webbplats.',
 'pageinfo-magic-words' => '{{PLURAL:$1|Magiskt|Magiska}} ord ($1)',
 'pageinfo-hidden-categories' => '{{PLURAL:$1|Dold kategori|Dolda kategorier}} ($1)',
 'pageinfo-templates' => '{{PLURAL:$1|Inkluderad mall|Inkluderade mallar}} ($1)',
+'pageinfo-transclusions' => '{{PLURAL:$1|Sida|Sidor}} mallinkluderas på ($1)',
 'pageinfo-toolboxlink' => 'Sidinformation',
 'pageinfo-redirectsto' => 'Omdirigerar till',
 'pageinfo-redirectsto-info' => 'info',
@@ -3163,6 +3165,10 @@ Detta orsakades troligen av en länk till en svartlistad webbplats.',
 'pageinfo-protect-cascading' => 'Skrivskydd kaskaderar härifrån',
 'pageinfo-protect-cascading-yes' => 'Ja',
 'pageinfo-protect-cascading-from' => 'Skrivskydd kaskaderar från',
+'pageinfo-category-info' => 'Kategoriinformation',
+'pageinfo-category-pages' => 'Antal sidor',
+'pageinfo-category-subcats' => 'Antal underkategorier',
+'pageinfo-category-files' => 'Antal filer',
 
 # Skin names
 'skinname-standard' => 'Standard',
@@ -3220,6 +3226,7 @@ Om du kör den kan din dator skadas.",
 'file-nohires' => 'Det finns ingen version med högre upplösning.',
 '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-preview' => 'Storlek på förhandsvisningen: $1.',
 'show-big-image-other' => '{{PLURAL:$2|Annan upplösning|Andra upplösningar}}: $1.',
@@ -3250,6 +3257,8 @@ Om du kör den kan din dator skadas.",
 'minutes' => '{{PLURAL:$1|$1 minut|$1 minuter}}',
 'hours' => '{{PLURAL:$1|$1 timme|$1 timmar}}',
 'days' => '{{PLURAL:$1|$1 dag|$1 dagar}}',
+'months' => '{{PLURAL:$1|$1 månad|$1 månader}}',
+'years' => '{{PLURAL:$1|$1 år}}',
 'ago' => '$1 sedan',
 'just-now' => 'precis nu',
 
@@ -3849,7 +3858,7 @@ Du kan också [[Special:EditWatchlist|använda standardeditorn]].',
 'version-specialpages' => 'Specialsidor',
 'version-parserhooks' => 'Parsertillägg',
 'version-variables' => 'Variabler',
-'version-antispam' => 'Förhindring av skräppost',
+'version-antispam' => 'Förhindrar spam',
 'version-skins' => 'Utseenden',
 'version-other' => 'Annat',
 'version-mediahandlers' => 'Mediahanterare',
@@ -3909,7 +3918,7 @@ Bilder visas i full upplösning, andra filtyper öppnas direkt i de program som
 'specialpages-group-highuse' => 'Sidor som används mycket',
 'specialpages-group-pages' => 'Listor över sidor',
 'specialpages-group-pagetools' => 'Sidverktyg',
-'specialpages-group-wiki' => 'Information och verktyg för wikin',
+'specialpages-group-wiki' => 'Data och verktyg',
 'specialpages-group-redirects' => 'Omdirigerande specialsidor',
 'specialpages-group-spam' => 'Spamverktyg',
 
@@ -4006,8 +4015,12 @@ Bilder visas i full upplösning, andra filtyper öppnas direkt i de program som
 'logentry-newusers-newusers' => 'Användarkonto $1 skapades',
 'logentry-newusers-create' => 'Användarkonto $1 skapades',
 'logentry-newusers-create2' => 'Användarkonto $3 skapades av $1',
+'logentry-newusers-byemail' => 'Användarkontot $3 skapades av $1 och lösenordet skickades via e-post',
 'logentry-newusers-autocreate' => 'Kontot $1 skapades automatiskt',
-'newuserlog-byemail' => 'lösenord skickat med e-post',
+'logentry-rights-rights' => '$1 ändrade gruppmedlemskap för $3 från $4 till $5',
+'logentry-rights-rights-legacy' => '$1 ändrade gruppmedlemskap för $3',
+'logentry-rights-autopromote' => '$1 befordrades automatiskt från $4 till $5',
+'rightsnone' => '(inga)',
 
 # Feedback
 'feedback-bugornote' => 'Om du är redo att beskriva ett tekniskt problem detaljerat, var god [$1 rapporterar en bugg].
@@ -4061,6 +4074,7 @@ Annars kan du använda det enkla formuläret nedan. Din kommentar kommer att lä
 'api-error-ok-but-empty' => 'Internt fel: Inget svar från servern.',
 'api-error-overwrite' => 'Det är inte tillåtet att skriva över en befintlig fil.',
 'api-error-stashfailed' => 'Internt fel: servern kunde inte lagra temporär fil.',
+'api-error-publishfailed' => 'Internt fel: Servern kunde inte publicera temporär fil.',
 'api-error-timeout' => 'Servern svarade inte inom förväntad tid.',
 'api-error-unclassified' => 'Ett okänt fel uppstod',
 'api-error-unknown-code' => 'Okänt fel: "$1"',
@@ -4081,6 +4095,4 @@ Annars kan du använda det enkla formuläret nedan. Din kommentar kommer att lä
 'duration-centuries' => '$1 {{PLURAL:$1|sekel|sekel}}',
 'duration-millennia' => '$1 {{PLURAL:$1|millennium|millennier}}',
 
-# Unknown messages
-'svg-long-error' => 'Felaktig SVG-fil: $1',
 );
index c3b74fe..2761d58 100644 (file)
@@ -863,7 +863,6 @@ Rejea kumbukumbu ya mwisho inayoandikwa chini:",
 'template-protected' => '(kulindwa)',
 'template-semiprotected' => '(ulindaji kwa kiasi)',
 'hiddencategories' => 'Ukurasa huu uliomo katika jamii $1 {{PLURAL:$1|iliofichwa|zilizofichwa}}:',
-'nocreatetitle' => 'Si wote wanaoweza kuanzisha ukurasa',
 'nocreatetext' => '{{SITENAME}} imebana uwezekano kutengeneza kurasa mpya. Unaweza kurudia na kuhariri kurasa zilizomo, au [[Special:UserLogin|ingia au anza akaunti]].',
 'nocreate-loggedin' => 'Huna ruhusa ya kuanzisha ukurasa mpya.',
 'sectioneditnotsupported-title' => 'Kuhariri sehemu kwa sehemu haiwezikani',
@@ -886,6 +885,9 @@ Inaonekana kwamba ukurasa umefutwa.',
 Ukurasa wa jina hilo unapatikana tayari.',
 'defaultmessagetext' => 'Ujumbe uliopo',
 
+# Content models
+'content-model-javascript' => 'HatiJava',
+
 # Parser/template warnings
 'post-expand-template-inclusion-warning' => "'''Ilani:''' Kigezo kinajumlisha ukubwa uliozidi mno.
 Baadhi ya vigezo havitaweza kuingizwa.",
@@ -1343,11 +1345,13 @@ Taarifa hii itakuwa wazi.',
 'right-sendemail' => 'Kutuma barua-pepe kwa watumiaji wengine',
 'right-passwordreset' => 'Onesha barua pepe zinazoweka neno la siri upya',
 
+# Special:Log/newusers
+'newuserlogpage' => 'Kumbukumbu za kuanzisha akaunti za watumiaji',
+'newuserlogpagetext' => 'Hii ni kumbukumbu ya akaunti mpya zilizosajiliwa.',
+
 # User rights log
 'rightslog' => 'Kumbukumbu za vyeo vya watumiaji',
 'rightslogtext' => 'Hii ni kumbukumbu za mabadiliko za wezo za watumiaji.',
-'rightslogentry' => 'alibadilisha wezo za $1 aliyekuwa na wezo za kundi $2 awe mwanachama wa $3',
-'rightsnone' => '(hana)',
 
 # Associated actions - in the sentence "You do not have permission to X"
 'action-read' => 'kusoma ukurasa huu',
@@ -1840,6 +1844,7 @@ Sasa unaelekeza kwa [[$2]].',
 'notargettitle' => 'Hakuna lengo',
 'pager-newer-n' => '{{PLURAL:$1|1 ya karibu zaidi|$1 ya karibu zaidi}}',
 'pager-older-n' => '{{PLURAL:$1|$1 ya zamani zaidi}}',
+'suppress' => 'Uangalizi',
 
 # Book sources
 'booksources' => 'Vyanzo vya vitabu',
@@ -1919,10 +1924,6 @@ Itifaki zinazoungwa mkono: <code>$1</code> (usiongeza hizi unapotafuta).',
 'activeusers-hidesysops' => 'Ficha wakabidhi',
 'activeusers-noresult' => 'Watumiaji hawakupatikana.',
 
-# Special:Log/newusers
-'newuserlogpage' => 'Kumbukumbu za kuanzisha akaunti za watumiaji',
-'newuserlogpagetext' => 'Hii ni kumbukumbu ya akaunti mpya zilizosajiliwa.',
-
 # Special:ListGroupRights
 'listgrouprights' => 'Wezo za kundi za watumiaji',
 'listgrouprights-summary' => 'Inafuata orodha ya kundi za watumiaji wa wiki hii, pamoja na maelezo ya wezo zao za kushughulika mambo.
@@ -1946,6 +1947,8 @@ Labda patakuwa na [[{{MediaWiki:Listgrouprights-helppage}}|maelezo mengine]] kuh
 'mailnologin' => 'Hakuna anwani wa kutuma',
 'mailnologintext' => 'Ukitaka kutuma barua pepe kwa watumiaji wengine inabidi uwe [[Special:UserLogin|umeshaingia kwenye akaunti yako]] na pia uwe na anwani ya barua pepe sahihi pale [[Special:Preferences|mapendekezo yako]].',
 'emailuser' => 'Mtumie mtumiaji huyu barua pepe',
+'emailuser-title-target' => 'Tumia barua pepe {{GENDER:$1|user}}',
+'emailuser-title-notarget' => 'Kumtumia mtumiaji barua pepe',
 'emailpage' => 'Kumtumia mtumiaji barua pepe',
 'emailpagetext' => 'Utumie fomu iliopo chini ili kutuma barua pepe kwa mtumiaji huyu.
 Anwani yako ya barua pepe ulioitaja katika [[Special:Preferences|mapendekezo yako]] itaandikwa kwenye sanduku la anwani "Kutoka kwa" katika barua pepe, ili mtu atakayeipokea aweze kukujibu moja kwa moja.',
@@ -1978,7 +1981,7 @@ Anwani yako ya barua pepe ulioitaja katika [[Special:Preferences|mapendekezo yak
 'usermessage-editor' => 'Jumbe za mfumo',
 
 # Watchlist
-'watchlist' => 'Maangalizi yangu',
+'watchlist' => 'Maangalizi',
 'mywatchlist' => 'Maangalizi',
 'watchlistfor2' => 'Kwa ajili ya $1 $2',
 'nowatchlist' => 'Hamna vitu katika maangalizi yako.',
@@ -2050,6 +2053,8 @@ $UNWATCHURL
 
 Kutoa maoni yako au kupata msaada mwingine:
 {{canonicalurl:{{MediaWiki:Helppage}}}}',
+'created' => 'alianzisha',
+'changed' => 'alibadilisha',
 
 # Delete
 'deletepage' => 'Futa ukurasa',
@@ -2178,6 +2183,7 @@ Hivi ni vipimo kwa ukurasa '''$1''':",
 'cannotundelete' => 'Kurudisha ukurasa imeshindikana;
 huenda ikawa mtu mwingine ameurudisha tayari.',
 'undelete-header' => 'Tazama [[Special:Log/delete|kumbukumbu za ufutaji]] ili kujua kurasa zipi zilizofutwa hivi karibuni.',
+'undelete-search-title' => 'Tafuta kwenye kurasa zilizofutwa',
 'undelete-search-box' => 'Tafuta kwenye kurasa zilizofutwa',
 'undelete-search-prefix' => 'Onyesha kurasa kuanzia na:',
 'undelete-search-submit' => 'Tafuta',
@@ -2194,7 +2200,7 @@ $1',
 'blanknamespace' => '(Kuu)',
 
 # Contributions
-'contributions' => 'Michango ya mtumiaji',
+'contributions' => 'Michango ya {{GENDER:$1|mtumiaji}}',
 'contributions-title' => 'Michango ya mtumiaji $1',
 'mycontris' => 'Michango',
 'contribsub2' => 'Kwa $1 ($2)',
@@ -2237,7 +2243,7 @@ Rejea kumbukumbu ya uzuio ya mwisho inayoandikwa chini:',
 'whatlinkshere-hideredirs' => '$1 maelekezo',
 'whatlinkshere-hidetrans' => '$1 majumuisho',
 'whatlinkshere-hidelinks' => '$1 viungo',
-'whatlinkshere-hideimages' => '$1 viungo vya picha',
+'whatlinkshere-hideimages' => 'viungo $1 vya faili',
 'whatlinkshere-filters' => 'Machujio',
 
 # Block/unblock
@@ -2279,8 +2285,10 @@ Andika sababu ya kuzuia chini (kwa mfano, kwa kutaja mifano ya kurasa zilizohari
 'ipb-edit-dropdown' => 'Hariri sababu za kuzuia',
 'ipb-unblock-addr' => 'Acha kumzuia $1',
 'ipb-unblock' => 'Acha kumzuia mtumiaji au anwani ya IP',
+'ipb-blocklist' => 'Tazama vizuizi vilivyomo',
 'ipb-blocklist-contribs' => 'Michango ya $1',
 'unblockip' => 'Acha kuzuia mtumiaji',
+'ipusubmit' => 'Toa kizuizi hiki',
 'blocklist' => 'Watumiaji waliozuiliwa',
 'ipblocklist' => 'Watumiaji waliozuiliwa',
 'ipblocklist-legend' => 'Tafuta mtumiaji aliyezuiwa',
@@ -2306,7 +2314,7 @@ Andika sababu ya kuzuia chini (kwa mfano, kwa kutaja mifano ya kurasa zilizohari
 'block-log-flags-noemail' => 'barua pepe imezuiliwa',
 'block-log-flags-hiddenname' => 'jina la mtumiaji limefichwa',
 'ipb_already_blocked' => '"$1" tayari imeshazuiwa',
-'blockme' => 'Unizuishe',
+'blockme' => 'Nizuie',
 'proxyblocksuccess' => 'Tayari.',
 
 # Developer tools
@@ -2473,6 +2481,8 @@ Ulihafadhie katika tarakalishi yako, halafu ulipakie hapa.',
 'importnotext' => 'Tupu au bila maandishi',
 'importsuccess' => 'Kuleta kumekamilishwa!',
 'import-noarticle' => 'Hakuna kurasa ya kuingiza!',
+'import-nonewrevisions' => 'Pitio zote zilikuwa zimepakiwa hapo awali',
+'import-upload' => 'Pakia data ya XML',
 'import-token-mismatch' => 'Data ya kipindi zilipotelewa.
 Tafadhali jaribu tena.',
 
@@ -2540,6 +2550,7 @@ Tafadhali jaribu tena.',
 'tooltip-diff' => 'Onyesha mabadiliko uliyofanya kwenye maandishi.',
 'tooltip-compareselectedversions' => 'Tazama tofauti baina ya mapitio mawili uliochagua ya ukurasa huu.',
 'tooltip-watch' => 'Fuatilia ukurasa huu kwenye maangalizi yako',
+'tooltip-watchlistedit-normal-submit' => 'Ondoa mada',
 'tooltip-recreate' => 'Kuanzisha ukurasa upya ingawa umekuwa umefutwa',
 'tooltip-upload' => 'Kuanza kupakia',
 'tooltip-rollback' => '"Rejesha" inarejesha (ma)sahihisho ya ukurasa huu yaliyofanyika na yule aliyeuhariri mwishoni, kwa kubofya mara moja tu.',
@@ -2561,11 +2572,21 @@ Tafadhali jaribu tena.',
 
 # Info page
 'pageinfo-title' => 'Taarifa juu ya "$1"',
-'pageinfo-header-edits' => 'Maharirio',
+'pageinfo-header-basic' => 'Maelezo ya msingi',
+'pageinfo-header-edits' => 'Historia ya hariri',
+'pageinfo-header-restrictions' => 'Ulinzi wa ukurasa',
+'pageinfo-header-properties' => 'Sifa za ukurasa',
+'pageinfo-display-title' => 'Onyesha mada',
+'pageinfo-article-id' => 'ID ya ukurasa',
+'pageinfo-language' => 'Lugha ya maudhui ya ukurasa',
 'pageinfo-watchers' => 'Idadi ya wanaofuatilia',
 'pageinfo-edits' => 'Idadi ya maharirio',
+'pageinfo-toolboxlink' => 'Maelezo ya ukurasa',
 'pageinfo-contentpage-yes' => 'Ndiyo',
 'pageinfo-protect-cascading-yes' => 'Ndiyo',
+'pageinfo-category-info' => 'Maelezo ya jamii',
+'pageinfo-category-pages' => 'Idadi ya kurasa',
+'pageinfo-category-files' => 'Idadi ya mafaili',
 
 # Image deletion
 'deletedrevision' => 'Pitio la awali lililofutwa $1',
@@ -3137,7 +3158,7 @@ Tovuti hii inapata matatatizo wakati huu.',
 'logentry-newusers-create' => '$1 alianzisha akaunti ya mtumiaji',
 'logentry-newusers-create2' => '$1 alianzisha akaunti ya mtumiaji $3',
 'logentry-newusers-autocreate' => 'Akaunti ya mtumiaji $1 ilianzishwa na mashine',
-'newuserlog-byemail' => 'neno la siri limetumwa kwa barua pepe',
+'rightsnone' => '(hana)',
 
 # Feedback
 'feedback-subject' => 'Mada:',
@@ -3165,6 +3186,7 @@ Tovuti hii inapata matatatizo wakati huu.',
 'api-error-unknown-code' => 'Hitilafu isiyojulikana: "$1".',
 'api-error-unknown-warning' => 'Ilani isiyojulikana: "$1".',
 'api-error-unknownerror' => 'Hitilafu isiyojulikana: "$1".',
+'api-error-uploaddisabled' => 'Kupakia kumelemazwa katika wiki hii.',
 
 # Durations
 'duration-seconds' => '$1 {{PLURAL:$1|second|sekunde}}',
index 38e810f..4cbd8eb 100644 (file)
@@ -737,7 +737,6 @@ Uostatńy wpis z rejera je ńyżej.",
 'template-protected' => '(zawrzity uod sprowjańo)',
 'template-semiprotected' => '(tajlowo zawarte)',
 'hiddencategories' => 'Ta zajta je {{PLURAL:$1|w jednyj schrůńunyj katygoryji|we $1 schrůńunych katygoryjach}}:',
-'nocreatetitle' => 'Uograńičůno wćepywańy zajtůw',
 'nocreatetext' => 'Na {{GRAMMAR:MS.lp|{{SITENAME}}}} twořyńy nowych zajtůw uograńičůno.
 Možeš sprowjać te co juž sům, abo [[Special:UserLogin|zalogować śe, abo zauožyć konto]].',
 'nocreate-loggedin' => 'Ńy moš uprowńyń do twořyńo nowych zajtůw.',
@@ -1181,11 +1180,13 @@ $1',
 'right-userrights-interwiki' => 'Sprowjej uprawńyńo užytkowńikůw na zajtach inkšych Wiki',
 'right-siteadmin' => 'Zawjerańy i uodmykańy bazy danych',
 
+# Special:Log/newusers
+'newuserlogpage' => 'Nowe użytkowniki',
+'newuserlogpagetext' => 'To je rejer uostatńo utworzůnych kůnt użytkowńikůw',
+
 # User rights log
 'rightslog' => 'Uprawńyńa',
 'rightslogtext' => 'Rejer půmjyńań uprawńyń užytkowńikůw.',
-'rightslogentry' => 'půmjyńiu/a uprawńyńo užytkowńika $1 ($2 → $3)',
-'rightsnone' => 'podstawowo',
 
 # Associated actions - in the sentence "You do not have permission to X"
 'action-read' => 'přeglůndańo tyj zajty',
@@ -1628,10 +1629,6 @@ Uobsůgiwane protokoły: <code>$1</code>',
 'activeusers-hidesysops' => 'Schrůń adminy',
 'activeusers-noresult' => 'Ńy sům używacze.',
 
-# Special:Log/newusers
-'newuserlogpage' => 'Nowe użytkowniki',
-'newuserlogpagetext' => 'To je rejer uostatńo utworzůnych kůnt użytkowńikůw',
-
 # Special:ListGroupRights
 'listgrouprights' => 'Uprawńyńo grup użytkowńikůw',
 'listgrouprights-summary' => 'Půńiży znojdowo śe spis grup użytkowńikůw zdefińjowanych na tyj wiki, s wyszczygůlńyńym przidźelůnych im prow dostympu.
@@ -1739,6 +1736,8 @@ Kejbyś chćou půmjyńić štalowańo swojej listy zajtůw, na kere dowoš poz
 
 Pomoc:
 {{canonicalurl:{{MediaWiki:Helppage}}}}',
+'created' => 'utwořono',
+'changed' => 'pomjyńono',
 
 # Delete
 'deletepage' => 'Wyćep artikel',
@@ -2843,6 +2842,6 @@ Naškryflej sam mjano plika bez prefiksu „{{ns:file}}:”.',
 # New logging system
 'revdelete-restricted' => 'naštaluj uograničyńo do administratorůw',
 'revdelete-unrestricted' => 'wycofej uograničyńo do administratorůw',
-'newuserlog-byemail' => 'hasło uostało wysłane e-brifym',
+'rightsnone' => 'podstawowo',
 
 );
index 82084bc..26e0538 100644 (file)
@@ -249,6 +249,7 @@ $messages = array(
 
 மாற்றுருவங்கள்',
 
+'navigation-heading' => 'வழிசெலுத்தல் பட்டி',
 'errorpagetitle' => 'தவறு',
 'returnto' => '$1 பக்கத்துக்குத் திரும்பு.',
 'tagline' => '{{SITENAME}} இருந்து',
@@ -346,6 +347,7 @@ $1',
 'newmessageslink' => 'புதிய செய்திகள்',
 'newmessagesdifflink' => 'கடைசி மாற்றம்',
 'youhavenewmessagesfromusers' => 'உங்களுக்கு $1 {{PLURAL:$3|வேறொரு பயனரிடம்|$3 பயனர்களிடம்}} இருந்து உள்ளது ($2).',
+'youhavenewmessagesmanyusers' => 'உங்களுக்கு பல பயனர்களிடமிருந்து $1 பதிய செய்திகள்  உள்ளன ($2).',
 'newmessageslinkplural' => '{{PLURAL:$1|ஒரு புதிய செய்தி|புதிய செய்திகள்}}',
 'newmessagesdifflinkplural' => 'கடைசி {{PLURAL:$1|மாற்றம்|மாற்றங்கள்}}',
 'youhavenewmessagesmulti' => '$1 இல் உங்களுக்கு புதிய செய்திகள் காத்திருக்கின்றன',
@@ -630,6 +632,7 @@ $2
 'changeemail-oldemail' => 'தற்பொழுதுள்ள மின்னஞ்சல் முகவரி:',
 'changeemail-newemail' => 'புதிய மின்னஞ்சல் முகவரி:',
 'changeemail-none' => '(எதுவுமில்லை)',
+'changeemail-password' => 'உங்கள் {{SITENAME}} கடவுச்சொல்:',
 'changeemail-submit' => 'மின்னஞ்சலை மாற்று',
 'changeemail-cancel' => 'விட்டுவிடு',
 
@@ -791,7 +794,6 @@ $1 எனும் பயனரையோ வேறு [[{{MediaWiki:Grouppage-sy
 'template-protected' => '(காக்கப்பட்டது)',
 'template-semiprotected' => '(பகுதியாகக் காக்கப்பட்டது)',
 'hiddencategories' => 'இப்பக்கம் {{PLURAL:$1|ஒரு மறைக்கப்பட்ட பகுப்பில்|$1 மறைக்கப்பட்ட பகுப்புகளில்}} அடங்குகிறது:',
-'nocreatetitle' => 'பக்கத் தொடக்கம் மட்டுப்படுத்தப்பட்டுள்ளது',
 'nocreatetext' => '{{SITENAME}} புதிய பக்கங்களை ஆக்குவதற்கான அனுமதியை மட்டுப்படுத்தியுள்ளது.
 நீங்கள் ஏற்கனவே இருக்கும் பக்கங்களைத் தொகுக்க முடியும் அல்லது [[Special:UserLogin|புகுபதிகை செய்யவும் அல்லது கணக்கொன்றை தொடங்குங்கள்]].',
 'nocreate-loggedin' => 'புதியப் பக்கங்களைத் தொடங்குவதற்கு உங்களுக்கு அனுமதி கிடையாது.',
@@ -818,10 +820,14 @@ $1 எனும் பயனரையோ வேறு [[{{MediaWiki:Grouppage-sy
 'edit-already-exists' => 'புதிய பக்கமொன்றை உருவாக்க முடியாது.
 இப்பக்கம் ஏற்கனவே உள்ளது.',
 'defaultmessagetext' => 'இயல்பிருப்பு தகவல் உரை',
+'invalid-content-data' => 'செல்லாத உள்ளடக்கத் தரவு',
+'content-not-allowed-here' => '"$1" உள்ளடக்கம் [[$2]] பக்கத்தில் அனுமதிக்கப்படவில்லை.',
 
 # Content models
 'content-model-wikitext' => 'விக்கிஉரை',
+'content-model-text' => 'எளிய உரை',
 'content-model-javascript' => 'ஜாவா ஸ்கிரிப்ட்',
+'content-model-css' => 'சிஎஸ்எஸ்',
 
 # Parser/template warnings
 'expensive-parserfunction-warning' => 'எச்சரிக்கை: இப்பக்கம் அதிகளவு இலக்கணப் பாகுபடுத்திச் சார்புகளைக் கொண்டுள்ளது.
@@ -867,7 +873,7 @@ $1 எனும் பயனரையோ வேறு [[{{MediaWiki:Grouppage-sy
 'currentrevisionlink' => 'நடப்பிலுள்ள திருத்தம்',
 'cur' => 'நடப்பு',
 'next' => 'அடுத்தது',
-'last' => 'à®®à¯\81நà¯\8dதà¯\88ய',
+'last' => 'à®®à¯\81நà¯\8dதிய',
 'page_first' => 'முதல்',
 'page_last' => 'கடைசி',
 'histlegend' => 'வேறுபாட்டைக் காண வேண்டிய இரண்டு பத்திப்புக்களை தெரிவுச் செய்து கீழுள்ள பொத்தானை அழுத்தவும்.<br />
@@ -1044,7 +1050,7 @@ $1",
 'notextmatches' => 'கட்டுரை உரை எதுவும் பொருந்தவில்லை',
 'prevn' => 'முன் {{PLURAL:$1|$1}}',
 'nextn' => 'அடுத்த {{PLURAL:$1|$1}}',
-'prevn-title' => 'à®®à¯\81நà¯\8dதà¯\88ய $1 {{PLURAL:$1|முடிவு|முடிவுகள்}}',
+'prevn-title' => 'à®®à¯\81நà¯\8dதிய $1 {{PLURAL:$1|முடிவு|முடிவுகள்}}',
 'nextn-title' => 'அடுத்த $1 {{PLURAL:$1|முடிவு|முடிவுகள்}}',
 'shown-title' => 'ஒரு பக்கத்திற்கு $1 {{PLURAL:$1|முடிவு|முடிவுகள்}} காட்டவும்',
 'viewprevnext' => '($1 {{int:pipe-separator}} $2) ($3) பக்கங்களைப் பார்.',
@@ -1181,7 +1187,7 @@ $1",
 'prefs-emailconfirm-label' => 'மின்னஞ்சலை உறுதிசெய்தல்:',
 'prefs-textboxsize' => 'தொகுக்கும் சாளரத்தின் அளவு',
 'youremail' => 'மின்னஞ்சல்:',
-'username' => 'பயனர் பெயர்:',
+'username' => '{{GENDER:$1|பயனர் பெயர்}}:',
 'uid' => 'பயனர்:',
 'prefs-memberingroups' => 'பின்வரும் {{PLURAL:$1|குழு|குழுக்களில்}} உறுப்பினர்:',
 'prefs-registration' => 'பதிவு செய்யும் நேரம்:',
@@ -1334,12 +1340,13 @@ $1",
 'right-sendemail' => 'மற்ற பயனர்களுக்கு மின்னஞ்சல் அனுப்பு',
 'right-passwordreset' => 'கடவுச்சொல் மீட்டமை மின்னஞ்சல்களை காண்.',
 
+# Special:Log/newusers
+'newuserlogpage' => 'பயனர் உருவாக்கம் பற்றிய குறிப்பு',
+'newuserlogpagetext' => 'இது பயனர் படைப்புகளின் பதிவு ஆகும்.',
+
 # User rights log
 'rightslog' => 'பயனர் உரிமைகள் பதிகை',
 'rightslogtext' => 'இது பயனர் உரிமைகள் தொடர்பான மாற்றங்களின் பதிகையாகும்.',
-'rightslogentry' => '$1 பயனருக்கான குழு உறுப்பியம் $2 குழுவிலிருந்து $3 குழுவிற்கு மாற்றப்பட்டது',
-'rightslogentry-autopromote' => '  $2  லிருந்து $3 க்கு தானாக உயர்ந்தது.',
-'rightsnone' => '(எதுவுமில்லை)',
 
 # Associated actions - in the sentence "You do not have permission to X"
 'action-read' => 'இப் பக்கத்தை வாசிக்கவும்',
@@ -1702,7 +1709,7 @@ $1',
 'filerevert-defaultcomment' => '$2, $1 இல் உள்ளபடியான பதிப்புக்கு முன்நிலையாக்கப்பட்டது',
 'filerevert-submit' => 'முன்நிலையாக்கு',
 'filerevert-success' => "ஊடகம் '''[[Media:$1|$1]]''' $3, $2 இல் உள்ளபடியான $4 பதிப்புக்கு முன்நிலையாக்கப்பட்டது.",
-'filerevert-badversion' => 'à®\95à¯\81றிதà¯\8dத à®¨à¯\87à®° à®®à¯\81தà¯\8dதிரà¯\88யà¯\81à®\9fனà¯\8d à®\95à¯\82à®\9fிய à®®à¯\81நà¯\8dதà¯\88ய à®\89ளà¯\8dளà®\95 திருத்தங்கள் காணப்படவில்லை.',
+'filerevert-badversion' => 'à®\95à¯\81றிதà¯\8dத à®¨à¯\87à®° à®®à¯\81தà¯\8dதிரà¯\88யà¯\81à®\9fனà¯\8d à®\95à¯\82à®\9fிய à®®à¯\81நà¯\8dதிய à®\89ளà¯\8dளà®\95தà¯\8d திருத்தங்கள் காணப்படவில்லை.',
 
 # File deletion
 'filedelete' => '$1 கோப்பை நீக்கு',
@@ -1821,6 +1828,7 @@ $1',
 'mostlinkedtemplates' => 'அதிகம் இணைக்கப்பட்ட வார்ப்புருக்கள்',
 'mostcategories' => 'பகுப்புகளுக்கு அதிகமாக இணைக்கப்பட்டவை',
 'mostimages' => 'படிமங்களுக்கு அதிகமாக இணைக்கப்பட்டவை',
+'mostinterwikis' => 'அதிக விக்கியிடை இணைப்பு கொண்ட பக்கங்கள்',
 'mostrevisions' => 'அதிக திருத்தங்களைக் கொண்ட கட்டுரைகள்',
 'prefixindex' => 'முன்னொட்டுச் சுட்டியுடன் உள்ள அனைத்துப் பக்கங்களும்',
 'prefixindex-namespace' => 'முன்னொட்டு ( $1  பயனர்வெளி)கொண்ட அனைத்து பக்கங்களும்',
@@ -1879,13 +1887,13 @@ $1',
 'allpages' => 'அனைத்துப் பக்கங்கள்',
 'alphaindexline' => '$1 தொடக்கம் $2 வரை',
 'nextpage' => 'அடுத்த பக்கம் ($1)',
-'prevpage' => 'à®®à¯\81நà¯\8dதà¯\88ய பக்கம் ($1)',
+'prevpage' => 'à®®à¯\81நà¯\8dதிய பக்கம் ($1)',
 'allpagesfrom' => 'அடுத்து காணப்படும் எழுத்தில் தொடங்கும் பக்கங்களை காட்டு:',
 'allpagesto' => 'இவ்வெழுத்துக்களில் முடிவடையும் பக்கங்களைக் காட்டு',
 'allarticles' => 'அனைத்துக் கட்டுரைகள்',
 'allinnamespace' => 'அனைத்து பக்கங்கள் ($1 பெயர்வெளியில்)',
 'allnotinnamespace' => 'அனைத்து பக்கங்கள் ($1 பெயர்வெளி தவிர்த்து)',
-'allpagesprev' => 'à®®à¯\81நà¯\8dதà¯\88ய',
+'allpagesprev' => 'à®®à¯\81நà¯\8dதிய',
 'allpagesnext' => 'அடுத்தது',
 'allpagessubmit' => 'செல்',
 'allpagesprefix' => 'பின்வரும் முன்னொட்டு உடைய பக்கங்களை காட்டு:',
@@ -1933,10 +1941,6 @@ $1',
 'activeusers-hidesysops' => 'நிர்வாகிகளை மறை',
 'activeusers-noresult' => 'எந்தவொரு பயனர்களும் காணப்படவில்லை.',
 
-# Special:Log/newusers
-'newuserlogpage' => 'பயனர் உருவாக்கம் பற்றிய குறிப்பு',
-'newuserlogpagetext' => 'இது பயனர் படைப்புகளின் பதிவு ஆகும்.',
-
 # Special:ListGroupRights
 'listgrouprights' => 'பயனர் குழு உரிமைகள்',
 'listgrouprights-key' => '<span class="listgrouprights-granted">உரிமை வழங்கப்பட்டது</span>
@@ -1959,6 +1963,7 @@ $1',
 'mailnologintext' => 'நீங்கள்[[Special:UserLogin|புகுபதிகை செய்திருப்பதுடன்]]
 ஏனைய பயனர்களுக்கு மின்னஞ்சல் அனுப்பக்கூடியத்தாக செல்லுபடியாகக்கூடிய மின்னஞ்சல் முகவரியொன்றும் உங்களுடைய  [[Special:Preferences|விருப்பத் தெரிவுகளில்]] கொடுபட்டிருக்கவேண்டும்.',
 'emailuser' => 'இப் பயனருக்கு மின்னஞ்சல் செய்',
+'emailuser-title-target' => '{{GENDER:$1|user}} என்ற பயனருக்கு மின்னஞ்சல் செய்',
 'emailuser-title-notarget' => 'பயனருக்கு மின்னஞ்சல் செய்',
 'emailpage' => 'மின்னஞ்சல் பயனர்',
 'emailpagetext' => 'நீங்கள் கீழ்வரும் படிவத்தை உபயோகித்து இந்த பயனருக்கு மின்னஞ்சல் செய்யலாம்.
@@ -2057,6 +2062,8 @@ $NEWPAGE
 
 பின்னூட்டம், மேலதிக உதவிகளுக்கு:
 {{canonicalurl:{{MediaWiki:Helppage}}}}',
+'created' => 'தொடக்கப்பட்டது',
+'changed' => 'மாற்றப்பட்டது',
 
 # Delete
 'deletepage' => 'பக்கத்தை நீக்கு',
@@ -2096,6 +2103,7 @@ $NEWPAGE
 'rollback_short' => 'முன்நிலையாக்கு',
 'rollbacklink' => 'முன்நிலையாக்கு',
 'rollbacklinkcount' => '$1 {{PLURAL:$1|தொகுப்பை|தொகுப்புகளை}} முன்நிலையாக்குக',
+'rollbacklinkcount-morethan' => '$1-க்கும் மேற்பட்ட {{PLURAL:$1|தொகுப்பை|தொகுப்புகளை}} முன்நிலையாக்குக',
 'rollbackfailed' => 'முன்நிலையாக்கம் தோல்வி',
 'cantrollback' => 'தொகுப்பை முன்நிலையாக்க முடியாது; கடைசிப் பங்களிப்பாளரே இக்கட்டுரையின் ஒரே ஆசிரியராகும்.',
 'alreadyrolled' => '[[User:$2|$2]] ([[User talk:$2|Talk]]{{int:pipe-separator}}[[Special:Contributions/$2|{{int:contribslink}}]]) பயனரால் செய்யப்பட்ட [[:$1]] இன் கடைசித் தொகுப்பை முன்நிலையாக்க முடியாது; வேறு யாரோ இப்பக்கத்தை ஏற்கெனவே தொகுத்தோ அல்லது முன்நிலையாக்கியோ உள்ளார்.
@@ -2193,7 +2201,7 @@ $NEWPAGE
 நீக்கப்பட்ட திருத்தங்களின் வாசகங்களை நிர்வாகிகள் மட்டுமே காணமுடியும்.',
 'undelete-revision' => '$3 செய்த $1 பக்கத்தின் ($4, $5 இல் உள்ளபடியான) நீக்கப்பட்ட திருத்தம்:',
 'undeleterevision-missing' => 'செல்லுபடியற்ற அல்லது காணப்படாத திருத்தம். நீங்கள் இங்கே வந்த இணைப்பு பழுதுள்ளதாக இருக்கலாம் அல்லது குறித்த திருத்தம் பரணிலிருந்து நீக்கப்பட்டோ அல்லது மீட்கபட்டோ இருக்கலாம்.',
-'undelete-nodiff' => 'à®®à¯\81நà¯\8dதà¯\88ய திருத்தங்கள் காணப்படவில்லை.',
+'undelete-nodiff' => 'à®®à¯\81நà¯\8dதிய திருத்தங்கள் காணப்படவில்லை.',
 'undeletebtn' => 'மீட்டெடு',
 'undeletelink' => 'பார்க்க/மீட்டெடு',
 'undeleteviewlink' => 'பார்வையிடு',
@@ -2239,8 +2247,8 @@ $1',
 'contribsub2' => '$1 பயனரின் ($2)',
 'nocontribs' => 'இந்த நிபந்தனையுடன் ஒத்துப்போகும் வகையில் மாற்றங்களெதுவும் காணப்படவில்லை.',
 'uctop' => '(மேல்)',
-'month' => 'மாதமà¯\8d à®\89à®\9fà¯\8dபà®\9f à®®à¯\81நà¯\8dதà¯\88ய:',
-'year' => 'à®\86ணà¯\8dà®\9fà¯\81 à®\89à®\9fà¯\8dபà®\9f à®®à¯\81நà¯\8dதà¯\88ய:',
+'month' => 'மாதமà¯\8d à®\89à®\9fà¯\8dபà®\9f à®®à¯\81நà¯\8dதிய:',
+'year' => 'à®\86ணà¯\8dà®\9fà¯\81 à®\89à®\9fà¯\8dபà®\9f à®®à¯\81நà¯\8dதிய:',
 
 'sp-contributions-newbies' => 'புதிய கணக்குகளின் பங்களிப்புகளை மட்டும் காட்டு',
 'sp-contributions-newbies-sub' => 'புதிய கணக்குகளுக்கு',
@@ -2270,7 +2278,7 @@ $1',
 'isredirect' => 'வழிமாற்றுப் பக்கம்',
 'istemplate' => 'உள்ளிடப்பட்டுள்ளது',
 'isimage' => 'கோப்பு இணைப்பு',
-'whatlinkshere-prev' => '{{PLURAL:$1|à®®à¯\81நà¯\8dதà¯\88ய|à®®à¯\81நà¯\8dதà¯\88ய $1}}',
+'whatlinkshere-prev' => '{{PLURAL:$1|à®®à¯\81நà¯\8dதிய|à®®à¯\81நà¯\8dதிய $1}}',
 'whatlinkshere-next' => '{{PLURAL:$1|அடுத்த|அடுத்த $1}}',
 'whatlinkshere-links' => '← இணைப்புக்கள்',
 'whatlinkshere-hideredirs' => 'வழிமாற்றுகளை $1',
@@ -2300,7 +2308,7 @@ $1',
 ** பொறுப்பற்ற நடிவடிக்கைகள்
 ** ஒரு பயனர் பல கணக்குகளைப் பேணல்
 ** ஏற்றுக்கொள்ளப்படமுடியாத பயனர் பெயர்',
-'ipb-hardblock' => 'à®\87நà¯\8dத IP à®®à¯\81à®\95வரியிலà¯\8d à®\87à®°à¯\81நà¯\8dதà¯\81 à®ªà¯\81à®\95à¯\81பதிà®\95à¯\88 à®\9aà¯\86யà¯\8dத à®ªà®¯à®©à®°à¯\8dà®\95ளà¯\8d à®¤à®¿à®°à¯\81தà¯\8dதà¯\81வதà¯\88 தடுக்கவும்',
+'ipb-hardblock' => 'à®\87நà¯\8dத IP à®®à¯\81à®\95வரியிலà¯\8d à®\87à®°à¯\81நà¯\8dதà¯\81 à®ªà¯\81à®\95à¯\81பதிà®\95à¯\88 à®\9aà¯\86யà¯\8dத à®ªà®¯à®©à®°à¯\8dà®\95ளà¯\8d à®¤à¯\8aà®\95à¯\81பà¯\8dபதà¯\88தà¯\8d தடுக்கவும்',
 'ipbcreateaccount' => 'கணக்குகள் தொடங்குவதைத் தடு',
 'ipbemailban' => 'பயனர் மின்னஞ்சல் செய்வதைத் தடு',
 'ipbenableautoblock' => 'தானியக்கமாக இப்பயனர் கடைசியாகப் பயன்படுத்திய ஐ.பி முகவரியையும் பங்களிக்க முயலும் ஐ.பி. முகவரிகளையும் தடை செய்',
@@ -2311,7 +2319,7 @@ $1',
 'ipbotherreason' => 'வேறு மேலதிக காரணம்:',
 'ipbhidename' => 'தொகுப்புக்கள் மற்றும் பட்டியல்களிலிருந்து பயனர் பெயரை மறைக்கவும்',
 'ipbwatchuser' => 'இந்த பயனர்களின் பயனர் மற்றும் உரையாடல் பங்கங்களை கவனி.',
-'ipb-disableusertalk' => 'à®\87நà¯\8dத à®ªà®¯à®©à®°à¯\8dà®\95ளà¯\8d à®¤à®\99à¯\8dà®\95ளà¯\81à®\9fà¯\88ய à®\89à®°à¯\88யாà®\9fலà¯\8d à®ªà®\95à¯\8dà®\95தà¯\8dதà¯\88 à®¤à®¿à®°à¯\81தà¯\8dதà¯\81வதà¯\88 à®\85வரà¯\8dà®\95ளà¯\8d à®¤à®\9fà¯\81à®\95à¯\8dà®\95பà¯\8dபà®\9fà¯\8dà®\9fà¯\81ளà¯\8dளபà¯\8bதà¯\81 தடுக்கவும்.',
+'ipb-disableusertalk' => 'à®\87நà¯\8dத à®ªà®¯à®©à®°à¯\8dà®\95ளà¯\8d à®¤à®\9fà¯\88à®\9aà¯\86யà¯\8dயபà¯\8dபà®\9fà¯\8dà®\9fà¯\81ளà¯\8dள à®ªà¯\8bதà¯\81 à®¤à®\99à¯\8dà®\95ளà¯\81à®\9fà¯\88ய à®\89à®°à¯\88யாà®\9fலà¯\8d à®ªà®\95à¯\8dà®\95தà¯\8dதà¯\88தà¯\8d à®¤à¯\8aà®\95à¯\81பà¯\8dபதà¯\88தà¯\8d தடுக்கவும்.',
 'ipb-change-block' => 'இந்த அமைப்புகளுடன் இப்பயனரை மீண்டும் தடுக்கவும்.',
 'ipb-confirm' => 'தடையை உறுதிசெய்',
 'badipaddress' => 'செல்லுபடியற்ற ஐ.பி. முகவரி',
@@ -2366,7 +2374,7 @@ $1',
 தடுப்பு குறிப்பேடு ஒப்பீட்டிற்காக கீழே வழங்கப்பட்டுள்ளது:',
 'blocklog-showsuppresslog' => 'இந்த பயனர் முன்பே தடுக்கப்பட்டு மறைக்கப்பட்டுள்ளார்.
 தடுப்பு குறிப்பேடு ஒப்பீட்டிற்காக கீழே வழங்கப்பட்டுள்ளது:',
-'blocklogentry' => '$2, $3 அன்று காலாவதியாகும் வகையில் [[$1]] தடுக்கப்பட்டது',
+'blocklogentry' => 'பயனரால் $2 அன்று காலாவதியாகும் வகையில் [[$1]] தடுக்கப்பட்டது $3',
 'blocklogtext' => 'இது ஒரு பயனரின் தடுப்பு தடை நீக்கல் செயற்பாடுகளுக்கான பதிவாகும். தானியங்கி முறையில் தடுக்கப்படும் ஐபி முகவரிகள் இப்பட்டியலில் இடம்பெறா.  தற்போது செயற்பாட்டிலுள்ள தடைகளையும் முடக்கங்களையும் [[Special:BlockList|ஐ.பி. தடுப்பு பட்டியலில்]] பார்க்க.',
 'unblocklogentry' => '"$1" தொடர்பான தடுப்பு நீக்கப்பட்டது',
 'block-log-flags-anononly' => 'அடையாளம் காட்டாத பயனர் மட்டும்',
@@ -2722,12 +2730,23 @@ $1',
 'pageinfo-robot-policy' => 'தேடற்பொறி நிலைமை',
 'pageinfo-views' => 'காட்சிகள் எண்ணிக்கை',
 'pageinfo-watchers' => 'பார்வையாளர்கள் எண்ணிக்கை',
+'pageinfo-redirects-name' => 'இந்தப் பக்கத்திற்கான வழிமாற்றுகள்',
+'pageinfo-subpages-name' => 'இந்தப் பக்கத்தின் துணைப் பக்கங்கள்',
+'pageinfo-subpages-value' => '$1 ($2 {{PLURAL:$2|வழிமாற்று|வழிமாற்றுகள்}}; $3 {{PLURAL:$3|வழிமாற்றில்லாதது|வழிமாற்றில்லாதவை}})',
 'pageinfo-firstuser' => 'பக்க உருவாக்குநர்',
 'pageinfo-firsttime' => 'பக்கம் உருவாக்கப்பட்ட காலம்',
 'pageinfo-lastuser' => 'அண்மைய தொகுப்பாளர்',
-'pageinfo-edits' => 'தொகுப்புகளின் எண்ணிக்கை:',
-'pageinfo-authors' => 'சாதகமான அம்சங்களை பெற்றிருக்கும் எழுத்தாளர்கள் எண்ணிக்கை',
+'pageinfo-lasttime' => 'சமீபத்திய தொகுப்பின் தேதி',
+'pageinfo-edits' => 'மொத்தத் தொகுப்புகளின் எண்ணிக்கை:',
+'pageinfo-authors' => 'சாதகமான அம்சங்களை பெற்றிருக்கும் மொத்த தொகுப்பாளர்களின் எண்ணிக்கை',
+'pageinfo-recent-edits' => 'அண்மைய தொகுப்புகளின் எண்ணிக்கை (கடைசி $1-க்குள்)',
+'pageinfo-recent-authors' => 'சாதகமான அம்சங்களை பெற்றிருக்கும் அண்மைய தொகுப்பாளர்களின் எண்ணிக்கை',
+'pageinfo-magic-words' => 'மாய {{PLURAL:$1|வார்த்தை|வார்த்தைகள்}} ($1)',
+'pageinfo-hidden-categories' => 'மறைக்கப்பட்ட {{PLURAL:$1|பகுப்பு|பகுப்புகள்}} ($1)',
+'pageinfo-templates' => 'பயன்படுத்தப்பட்ட {{PLURAL:$1|வார்ப்புரு|வார்ப்புருக்கள்}} ($1)',
+'pageinfo-toolboxlink' => 'பக்கத் தகவல்',
 'pageinfo-redirectsto-info' => 'தகவல்',
+'pageinfo-contentpage' => 'உள்ளடக்கப் பக்கமாய்க் கணக்கிடப்பட்டது.',
 'pageinfo-contentpage-yes' => 'ஆம்',
 'pageinfo-protect-cascading-yes' => 'ஆம்',
 
@@ -2746,6 +2765,7 @@ $1',
 'markedaspatrollederror' => 'ரோந்திட்டதாக குறிக்க முடியாது',
 'markedaspatrollederrortext' => 'ரோந்திட்டதாக குறிக்க நீங்கள் திருத்தமொன்றைக் குறிப்பிட வேண்டும்.',
 'markedaspatrollederror-noautopatrol' => 'உமது மாற்றங்களை நீரே ரோந்திட்டதாக குறிக்க அனுமதி கிடையாது.',
+'markedaspatrollednotify' => '$1 இல் மேற்கொள்ளப்பட்ட இம்மாற்றம் கண்காணிக்கப்பட்டதாய்க் குறிக்கப்பட்டது.',
 
 # Patrol log
 'patrol-log-page' => 'ரோந்துப் பதிகை',
@@ -2764,7 +2784,7 @@ $1',
 'filedelete-archive-read-only' => 'வழங்கனால் பரண் அடைவு "$1" எழுதப்படமுடியாது.',
 
 # Browsing diffs
-'previousdiff' => 'â\86\90 à®®à¯\81நà¯\8dதà¯\88ய தொகுப்பு',
+'previousdiff' => 'â\86\90 à®®à¯\81நà¯\8dதிய தொகுப்பு',
 'nextdiff' => 'அடுத்த தொகுப்பு →',
 
 # Media information
@@ -3310,7 +3330,7 @@ $5
 'confirm-unwatch-top' => 'இப்பக்கத்தை உங்கள்  கவனிப்புப் பட்டியலிருந்து நீக்கா வேண்டுமா?',
 
 # Multipage image navigation
-'imgmultipageprev' => 'â\86\90 à®®à¯\81நà¯\8dதà¯\88ய பக்கம்',
+'imgmultipageprev' => 'â\86\90 à®®à¯\81நà¯\8dதிய பக்கம்',
 'imgmultipagenext' => 'அடுத்தப் பக்கம் →',
 'imgmultigo' => 'செல்!',
 'imgmultigoto' => 'பக்கம் $1இற்கு செல்க',
@@ -3319,7 +3339,7 @@ $5
 'ascending_abbrev' => 'ஏறு',
 'descending_abbrev' => 'இறங்கு',
 'table_pager_next' => 'அடுத்த பக்கம்',
-'table_pager_prev' => 'à®®à¯\81நà¯\8dதà¯\88ய பக்கம்',
+'table_pager_prev' => 'à®®à¯\81நà¯\8dதிய பக்கம்',
 'table_pager_first' => 'முதலாவது பக்கம்',
 'table_pager_last' => 'கடைசி பக்கம்',
 'table_pager_limit' => 'ஒரு பக்கத்துக்கு $1 உள்ளடக்கங்களைக் காட்டு',
@@ -3537,7 +3557,7 @@ $5
 'logentry-newusers-create' => '$1 ஒரு புதிய பயனர் கணக்கை உருவாக்கியுள்ளார்.',
 'logentry-newusers-create2' => '$3 பயனர் கணக்கினை $1 உருவாக்கினார்',
 'logentry-newusers-autocreate' => 'கணக்கு  $1   தானாக    உருவாக்கப்பட்டது',
-'newuserlog-byemail' => 'மின்னஞ்சல் மூலம் கடவுச்சொல் அனுப்பப்பட்டுவிட்டது',
+'rightsnone' => '(எதுவுமில்லை)',
 
 # Feedback
 'feedback-bugornote' => 'நீங்கள் ஒரு தொழில்நுட்பக் கோளாறு குறித்து விரிவாக விளக்க தாயாராக இருந்தால் தயவுசெய்து [ $1  ஒரு bug பற்றி கூறு].
index 8dd1913..6fad2e8 100644 (file)
@@ -635,6 +635,9 @@ $messages = array(
 'right-delete' => 'ಪುಟೊಕುಲೆನ್ ಮಾಜಾಲೆ',
 'right-undelete' => 'ಪುಟೊನ್ ಮಾಜಾವಡೆ',
 
+# Special:Log/newusers
+'newuserlogpage' => 'ಸದಸ್ಯ ರಚನೆ ಲಾಗ್',
+
 # User rights log
 'rightslog' => 'ಸದಸ್ಯೆರ್ನ ಹಕ್ಕು ದಾಖಲೆ',
 
@@ -771,9 +774,6 @@ $messages = array(
 'allarticles' => 'ಪೂರಾ ಲೇಖನೊಲು',
 'allpagessubmit' => 'ಪೋ',
 
-# Special:Log/newusers
-'newuserlogpage' => 'ಸದಸ್ಯ ರಚನೆ ಲಾಗ್',
-
 # Special:ListGroupRights
 'listgrouprights-members' => '(ಸದಸ್ಯೆರ್ನ ಪಟ್ಟಿ)',
 
index 65fbe47..5c28ebd 100644 (file)
@@ -862,7 +862,6 @@ $2
 'template-protected' => '(సంరక్షితం)',
 'template-semiprotected' => '(సెమీ-రక్షణలో ఉంది)',
 'hiddencategories' => 'ఈ పేజీ {{PLURAL:$1|ఒక దాచిన వర్గంలో|$1 దాచిన వర్గాల్లో}} ఉంది:',
-'nocreatetitle' => 'పేజీని సృష్టించడాన్ని నియంత్రించాం.',
 'nocreatetext' => '{{SITENAME}}లో కొత్త పేజీలు సృష్టించడాన్ని నియంత్రించారు.
 మీరు వెనక్కి వెళ్ళి వేరే పేజీలు మార్చవచ్చు, లేదా [[Special:UserLogin|లోనికి ప్రవేశించండి లేదా ఖాతా సృష్టించుకోండి]].',
 'nocreate-loggedin' => 'కొత్త పేజీలను సృష్టించేందుకు మీకు అనుమతి లేదు.',
@@ -1042,7 +1041,8 @@ $1",
 'revdelete-only-restricted' => '$2, $1 తేదీ గల అంశాన్ని దాచడంలో పొరపాటు: ఇతర దృశ్యత వికల్పాల్లోంచి ఒకదాన్ని ఎంచుకోకుండా అంశాలని నిర్వాహకులకు కనబడకుండా అణచివెయ్యలేరు.',
 'revdelete-reason-dropdown' => '*సాధారణ తొలగింపు కారణాలు
 ** కాపీహక్కుల ఉల్లంఘన
-** అసంబద్ధ వ్యక్తిగత సమాచారం
+** అసంబద్ధ వ్యాఖ్య లేదా వ్యక్తిగత సమాచారం
+** అసంబద్ధ వాడుకరి పేరు
 ** నిందాపూర్వక సమాచారం',
 'revdelete-otherreason' => 'ఇతర/అదనపు కారణం:',
 'revdelete-reasonotherlist' => 'ఇతర కారణం',
@@ -1230,7 +1230,7 @@ $1",
 'timezoneregion-indian' => 'హిందూ మహాసముద్రం',
 'timezoneregion-pacific' => 'పసిఫిక్ మహాసముద్రం',
 'allowemail' => 'ఇతర వాడుకరుల నుండి ఈ-మెయిళ్ళను రానివ్వు',
-'prefs-searchoptions' => 'à°\85à°¨à±\8dà°µà±\87à°·à°£ à°\8eà°\82పిà°\95à°²à±\81',
+'prefs-searchoptions' => 'à°µà±\86à°¤à±\81à°\95à±\81లాà°\9f',
 'prefs-namespaces' => 'పేరుబరులు',
 'defaultns' => 'లేకపోతే ఈ నేంస్పేసులలో అన్వేషించు:',
 'default' => 'అప్రమేయం',
@@ -1242,7 +1242,7 @@ $1",
 'prefs-emailconfirm-label' => 'ఈ-మెయిల్ నిర్ధారణ:',
 'prefs-textboxsize' => 'దిద్దుబాటు కిటికీ పరిమాణం',
 'youremail' => 'మీ ఈ-మెయిలు*',
-'username' => 'వాడుకరి పేరు:',
+'username' => '{{GENDER:$1|వాడుకరి పేరు}}:',
 'uid' => 'వాడుకరి ID:',
 'prefs-memberingroups' => 'సభ్యులుగా ఉన్న {{PLURAL:$1|గుంపు|గుంపులు}}:',
 'prefs-registration' => 'నమోదైన సమయం:',
@@ -1392,11 +1392,13 @@ $1",
 'right-sendemail' => 'ఇతర వాడుకరులకు ఈ-మెయిలు పంపించగలగడం',
 'right-passwordreset' => 'సంకేతపదాన్ని పునరుద్ధరించిన ఈ-మెయిళ్ళు',
 
+# Special:Log/newusers
+'newuserlogpage' => 'కొత్త వాడుకరుల చిట్టా',
+'newuserlogpagetext' => 'ఇది వాడుకరి నమోదుల చిట్టా.',
+
 # User rights log
 'rightslog' => 'వాడుకరుల హక్కుల మార్పుల చిట్టా',
 'rightslogtext' => 'ఇది వాడుకరుల హక్కులకు జరిగిన మార్పుల చిట్టా.',
-'rightslogentry' => '$1 గారి సభ్యత్వ గుంపును $2 నుండి $3 కి మార్చారు',
-'rightsnone' => '(ఏమీలేవు)',
 
 # Associated actions - in the sentence "You do not have permission to X"
 'action-read' => 'ఈ పేజీని చదవండి',
@@ -1969,10 +1971,6 @@ https://www.mediawiki.org/wiki/Manual:Image_Authorization చూడండి.',
 'activeusers-hidesysops' => 'నిర్వాహకులను దాచు',
 'activeusers-noresult' => 'వాడుకరులెవరూ లేరు.',
 
-# Special:Log/newusers
-'newuserlogpage' => 'కొత్త వాడుకరుల చిట్టా',
-'newuserlogpagetext' => 'ఇది వాడుకరి నమోదుల చిట్టా.',
-
 # Special:ListGroupRights
 'listgrouprights' => 'వాడుకరి గుంపుల హక్కులు',
 'listgrouprights-summary' => 'కింది జాబితాలో ఈ వికీలో నిర్వచించిన వాడుకరి గుంపులు, వాటికి సంబంధించిన హక్కులు ఉన్నాయి.
@@ -2094,6 +2092,8 @@ $UNWATCHURL కి వెళ్ళండి.
 
 మీ అభిప్రాయాలు చెప్పేందుకు మరియు మరింత సహాయానికై:
 {{canonicalurl:{{MediaWiki:helppage}}}}',
+'created' => 'సృష్టించారు',
+'changed' => 'మార్చారు',
 
 # Delete
 'deletepage' => 'పేజీని తొలగించు',
@@ -2265,7 +2265,7 @@ $UNWATCHURL కి వెళ్ళండి.
 'blanknamespace' => '(మొదటి)',
 
 # Contributions
-'contributions' => 'వాడుకరి రచనలు',
+'contributions' => '{{GENDER:$1|వాడుకరి}} రచనలు',
 'contributions-title' => '$1 యొక్క మార్పులు-చేర్పులు',
 'mycontris' => 'మార్పులు చేర్పులు',
 'contribsub2' => '$1 ($2) కొరకు',
@@ -2833,7 +2833,10 @@ $1',
 'minutes' => '{{PLURAL:$1|ఒక నిమిషం|$1 నిమిషాల}}',
 'hours' => '{{PLURAL:$1|ఒక గంట|$1 గంటల}}',
 'days' => '{{PLURAL:$1|ఒక రోజు|$1 రోజుల}}',
+'months' => '{{PLURAL:$1|ఒక నెల|$1 నెలల}}',
+'years' => '{{PLURAL:$1|ఒక సంవత్సరం|$1 సంవత్సరాల}}',
 'ago' => '$1 క్రితం',
+'just-now' => 'ఇప్పుడే',
 
 # Bad image list
 'bad_image_list' => 'కింద తెలిపిన తీరులో కలపాలి:
@@ -3299,7 +3302,7 @@ $5
 # action=purge
 'confirm_purge_button' => 'సరే',
 'confirm-purge-top' => 'ఈ పేజీ యొక్క పాత కాపీని తొలగించమంటారా?',
-'confirm-purge-bottom' => 'à°ªà±\87à°\9cà±\80 à°¤à°¾à°¡à°¨à°¤à±\8b à°\95à±\8bà°¶à°\82 à°\96ాళà±\80 à°\85యి, à°\87à°\9fà±\8dà°\9fà±\80వలి à°\95à±\82à°°à±\8dà°ªà±\81à°¨à±\81 à°\95నబడà±\87లా à°\9aà±\87à°¸à±\8dతుంది.',
+'confirm-purge-bottom' => 'సతà±\8dవరనిలà±\8dà°µ(cache)à°²à±\8bà°ªà±\87à°\9cà±\80 à°¨à°¿à°°à±\8dà°®à±\82లిà°\82à°\9aà°¿à°¤à±\87, à°\87à°\9fà±\80వలి à°\95à±\82à°°à±\8dà°ªà±\81 à°\95నబడà±\81తుంది.',
 
 # action=watch/unwatch
 'confirm-watch-button' => 'సరే',
@@ -3522,7 +3525,7 @@ $5
 'logentry-newusers-create' => '$1 ఒక వాడుకరి ఖాతాను సృష్టించారు',
 'logentry-newusers-create2' => '$1  వాడుకరి ఖాతా $3ను సృష్టించారు',
 'logentry-newusers-autocreate' => '$1 ఖాతాను ఆటోమెటిగ్గా సృష్టించారు',
-'newuserlog-byemail' => 'ఈ-మెయిలులో సంకేతపదం పంపించాం',
+'rightsnone' => '(ఏమీలేవు)',
 
 # Feedback
 'feedback-subject' => 'విషయం:',
index 8eeee27..b614b9f 100644 (file)
@@ -481,11 +481,13 @@ Ita-nia mudansa la armazenadu seidauk!",
 'right-userrights' => "Edita priviléjiu uza-na'in hotu",
 'right-userrights-interwiki' => "Edita priviléjiu uza-na'in iha wiki seluk sira",
 
+# Special:Log/newusers
+'newuserlogpage' => "Lista kria uza-na'in",
+'newuserlogpagetext' => "Ne'e lista kria uza-na'in.",
+
 # User rights log
 'rightslog' => "Lista mudansa priviléjiu uza-na'in",
 'rightslogtext' => "Ne'e lista mudansa priviléjiu uza-na'in sira nian.",
-'rightslogentry' => 'muda grupu "$1" nian husi "$2" ba "$3"',
-'rightsnone' => '(mamuk)',
 
 # Associated actions - in the sentence "You do not have permission to X"
 'action-read' => "lee pájina ne'e",
@@ -627,10 +629,6 @@ Ita-nia mudansa la armazenadu seidauk!",
 'activeusers-hidebots' => 'Subar bot sira',
 'activeusers-hidesysops' => 'Subar administradór sira',
 
-# Special:Log/newusers
-'newuserlogpage' => "Lista kria uza-na'in",
-'newuserlogpagetext' => "Ne'e lista kria uza-na'in.",
-
 # Special:ListGroupRights
 'listgrouprights-group' => 'Grupu',
 'listgrouprights-rights' => 'Priviléjiu',
@@ -658,6 +656,8 @@ Ita-nia mudansa la armazenadu seidauk!",
 'unwatching' => 'La hateke...',
 
 'enotif_impersonal_salutation' => "Uza-na'in {{SITENAME}} nian",
+'created' => 'kria ona',
+'changed' => 'muda ona',
 
 # Delete
 'deletepage' => 'Halakon pájina',
@@ -975,4 +975,7 @@ Ligasaun seluk iha liña - ne'e pájina sira iha ne'ebé bele inklui imajen aat.
 # Database error messages
 'dberr-header' => "Wiki ne'e iha problema",
 
+# New logging system
+'rightsnone' => '(mamuk)',
+
 );
index 65246ac..371a819 100644 (file)
@@ -668,7 +668,6 @@ $1',
 'template-protected' => '(ҳифзшуда)',
 'template-semiprotected' => '(нима-муҳофизатшуда)',
 'hiddencategories' => 'Ин саҳифа дар {{PLURAL:$1|1 гурӯҳи пинҳон|$1 гурӯҳҳои пинҳон}} қарор дорад:',
-'nocreatetitle' => 'Эҷоди саҳифа маҳдуд шудааст',
 'nocreatetext' => '{{SITENAME}} қобилияти эҷоди саҳифаҳои ҷадидро маҳдуд карда аст.
 Шумо метавонед бозгашта саҳифаи мавҷудбударо вироиш кунед, ё [[Special:UserLogin|ба систем вуруд кунед ё ҳисоби корбарӣ эҷод кунед]].',
 'nocreate-loggedin' => 'Шумо иҷозати эҷоди саҳифаи ҷадидро надоред.',
@@ -1006,11 +1005,13 @@ $1',
 'right-userrights-interwiki' => 'Вироиши ихтиёроти корбарии корбарони дигар викиҳо',
 'right-siteadmin' => 'Бастн ва боз кардани пойгоҳи дода',
 
+# Special:Log/newusers
+'newuserlogpage' => 'Гузориши эҷоди корбар',
+'newuserlogpagetext' => 'Ин гузориш аз номҳои корбарии тозасохташуда аст.',
+
 # User rights log
 'rightslog' => 'Гузориши ихтиёроти корбар',
 'rightslogtext' => 'Ин гузориш тағйироти ихтиёроти корбар аст.',
-'rightslogentry' => 'узвияти $1 аз гурӯҳ $2 ба $3 тағйир дода шуд',
-'rightsnone' => '(ҳеҷ)',
 
 # Associated actions - in the sentence "You do not have permission to X"
 'action-edit' => 'вироиши ин саҳифа',
@@ -1378,10 +1379,6 @@ Also see [[Special:WantedCategories|wanted categories]].',
 'listusers-submit' => 'Нишон додани',
 'listusers-noresult' => 'Ҳеҷ корбаре ёфт нашуд.',
 
-# Special:Log/newusers
-'newuserlogpage' => 'Гузориши эҷоди корбар',
-'newuserlogpagetext' => 'Ин гузориш аз номҳои корбарии тозасохташуда аст.',
-
 # Special:ListGroupRights
 'listgrouprights' => 'Ихтиёроти гурӯҳҳои корбарӣ',
 'listgrouprights-group' => 'Гурӯҳ',
@@ -1474,6 +1471,8 @@ $NEWPAGE
 
 Пешниҳодот ва кӯмаки бештар:
 {{canonicalurl:{{MediaWiki:Helppage}}}}',
+'created' => 'эҷод шуд',
+'changed' => 'тағйирёфта',
 
 # Delete
 'deletepage' => 'Ҳазфи саҳифа',
@@ -2534,6 +2533,6 @@ $5
 # New logging system
 'revdelete-restricted' => 'маҳдудиятҳо ба мудирон амалӣ шуданд',
 'revdelete-unrestricted' => 'маҳдудиятҳо аз мудирон бардошта шуданд',
-'newuserlog-byemail' => 'калимаи убур ба почтаи электронӣ фиристода шуд',
+'rightsnone' => '(ҳеҷ)',
 
 );
index 8d0ed14..6d8f1d3 100644 (file)
@@ -568,7 +568,6 @@ Hamin tavr şumo qavl medihed, ki xudatonro inro naviştaed jo onro az jak manba
 'template-protected' => '(hifzşuda)',
 'template-semiprotected' => '(nima-muhofizatşuda)',
 'hiddencategories' => 'In sahifa dar {{PLURAL:$1|1 gurūhi pinhon|$1 gurūhhoi pinhon}} qaror dorad:',
-'nocreatetitle' => 'Eçodi sahifa mahdud şudaast',
 'nocreatetext' => '{{SITENAME}} qobilijati eçodi sahifahoi çadidro mahdud karda ast.
 Şumo metavoned bozgaşta sahifai mavçudbudaro viroiş kuned, jo [[Special:UserLogin|ba sistem vurud kuned jo hisobi korbarī eçod kuned]].',
 'nocreate-loggedin' => 'Şumo içozati eçodi sahifai çadidro nadored.',
@@ -888,11 +887,13 @@ On bojad kamtar az $1 {{PLURAL:$1|alomat|alomatho}} boşad.',
 'right-userrights-interwiki' => 'Viroişi ixtijoroti korbariji korbaroni digar vikiho',
 'right-siteadmin' => 'Bastn va boz kardani pojgohi doda',
 
+# Special:Log/newusers
+'newuserlogpage' => 'Guzorişi eçodi korbar',
+'newuserlogpagetext' => 'In guzoriş az nomhoi korbariji tozasoxtaşuda ast.',
+
 # User rights log
 'rightslog' => 'Guzorişi ixtijoroti korbar',
 'rightslogtext' => 'In guzoriş taƣjiroti ixtijoroti korbar ast.',
-'rightslogentry' => 'uzvijati $1 az gurūh $2 ba $3 taƣjir doda şud',
-'rightsnone' => '(heç)',
 
 # Associated actions - in the sentence "You do not have permission to X"
 'action-edit' => 'viroişi in sahifa',
@@ -1228,10 +1229,6 @@ Jak klik kardani rūi unvoni sutunho boisi taƣjiri tartibi namoişi parvandaho
 'listusers-submit' => 'Nişon dodani',
 'listusers-noresult' => 'Heç korbare joft naşud.',
 
-# Special:Log/newusers
-'newuserlogpage' => 'Guzorişi eçodi korbar',
-'newuserlogpagetext' => 'In guzoriş az nomhoi korbariji tozasoxtaşuda ast.',
-
 # Special:ListGroupRights
 'listgrouprights' => 'Ixtijoroti gurūhhoi korbarī',
 'listgrouprights-group' => 'Gurūh',
@@ -1298,6 +1295,8 @@ Agar şumo dertar az fehristi nazarotaton in sahifaro hazv kardan xohed, dar men
 'enotif_lastvisited' => 'Baroi didani hamai taƣjirot az oxirin bore, ki sar zadaed $1ro bubined.',
 'enotif_lastdiff' => 'Baroi namoişi in taƣjir $1ro bubined.',
 'enotif_anon_editor' => 'korbari noşinos $1',
+'created' => 'eçod şud',
+'changed' => 'taƣjirjofta',
 
 # Delete
 'deletepage' => 'Hazfi sahifa',
@@ -2336,6 +2335,6 @@ Nişonai pajvandro biduni peşvand "{{ns:file}}:" vorid kuned.',
 # New logging system
 'revdelete-restricted' => 'mahdudijatho ba mudiron amalī şudand',
 'revdelete-unrestricted' => 'mahdudijatho az mudiron bardoşta şudand',
-'newuserlog-byemail' => 'kalimai ubur ba poctai elektronī firistoda şud',
+'rightsnone' => '(heç)',
 
 );
index 9d83285..8c1750e 100644 (file)
  * @author LMNOP at Thai Wikipedia (manop@itshee.com) since July 2007
  * @author Manop
  * @author Mopza
+ * @author Nullzero
  * @author Octahedron80
  * @author Passawuth
+ * @author TMo3289
  * @author Woraponboonkerd
  * @author לערי ריינהארט
  * @author จักรกฤช วงศ์สระหลวง (Jakkrit Vongsraluang) / PaePae
@@ -196,57 +198,57 @@ $linkTrail = '/^([a-z]+)(.*)\$/sD';
 $messages = array(
 # User preference toggles
 'tog-underline' => 'ขีดเส้นใต้ลิงก์',
-'tog-justify' => 'à¸\88ัà¸\94ยà¹\88อหà¸\99à¹\89าà¹\80à¸\95à¹\87มà¸\9aรรà¸\97ัà¸\94',
-'tog-hideminor' => 'à¹\84มà¹\88à¹\81สà¸\94à¸\87การแก้ไขเล็กน้อยในหน้าปรับปรุงล่าสุด',
+'tog-justify' => 'à¸\88ัà¸\94ยà¹\88อหà¸\99à¹\89าà¸\8aิà¸\94à¸\82อà¸\9a',
+'tog-hideminor' => 'à¸\8bà¹\88อà¸\99การแก้ไขเล็กน้อยในหน้าปรับปรุงล่าสุด',
 'tog-hidepatrolled' => 'ซ่อนการแก้ไขที่ตรวจแล้วในหน้าปรับปรุงล่าสุด',
-'tog-newpageshidepatrolled' => 'à¸\8bà¹\88อà¸\99หà¸\99à¹\89าà¸\97ีà¹\88à¸\95รวà¸\88à¹\81ลà¹\89วà¸\88าà¸\81รายà¸\8aืà¹\88อหน้าใหม่',
-'tog-extendwatchlist' => 'à¸\84ลีà¹\88รายà¸\81ารà¹\80à¸\9dà¹\89าà¸\94ูออà¸\81 à¹\80à¸\9eืà¹\88อà¹\81สà¸\94à¸\87à¸\81ารà¹\80à¸\9bลีà¹\88ยà¸\99à¹\81à¸\9bลà¸\87à¸\97ัà¹\89à¸\87หมà¸\94 à¹\84มà¹\88à¹\80à¸\9eียà¸\87à¹\81à¸\84à¹\88การเปลี่ยนแปลงล่าสุด',
-'tog-usenewrc' => 'à¹\83à¸\8aà¹\89หà¸\99à¹\89าà¸\9bรัà¸\9aà¸\9bรุà¸\87ลà¹\88าสุà¸\94รุà¹\88à¸\99à¹\80สริม (ต้องการจาวาสคริปต์)',
-'tog-numberheadings' => 'à¹\83สà¹\88à¸\95ัวà¹\80ลà¸\82หัวà¸\82à¹\89อà¹\83à¸\99สารà¸\9aัà¸\8d',
-'tog-showtoolbar' => 'แสดงเครื่องมือแก้ไข',
+'tog-newpageshidepatrolled' => 'à¸\8bà¹\88อà¸\99หà¸\99à¹\89าà¸\97ีà¹\88à¸\95รวà¸\88à¹\81ลà¹\89วà¸\88าà¸\81รายà¸\81ารหน้าใหม่',
+'tog-extendwatchlist' => 'à¸\82ยายรายà¸\81ารà¹\80à¸\9dà¹\89าà¸\94ูà¹\83หà¹\89à¹\81สà¸\94à¸\87à¸\81ารà¹\80à¸\9bลีà¹\88ยà¸\99à¹\81à¸\9bลà¸\87à¸\97ัà¹\89à¸\87หมà¸\94 à¹\84มà¹\88à¹\80à¸\9eียà¸\87การเปลี่ยนแปลงล่าสุด',
+'tog-usenewrc' => 'à¸\88ัà¸\94à¸\81ลุà¹\88มà¸\81ารà¹\80à¸\9bลีà¹\88ยà¸\99à¹\81à¸\9bลà¸\87à¹\82à¸\94ยหà¸\99à¹\89าà¹\83à¸\99รายà¸\81ารà¸\9bรัà¸\9aà¸\9bรุà¸\87ลà¹\88าสุà¸\94à¹\81ละรายà¸\81ารà¹\80à¸\9dà¹\89าà¸\94ู (ต้องการจาวาสคริปต์)',
+'tog-numberheadings' => 'à¹\83สà¹\88à¹\80ลà¸\82หัวà¸\82à¹\89อà¹\83à¸\99สารà¸\9aัà¸\8dอัà¸\95à¹\82à¸\99มัà¸\95ิ',
+'tog-showtoolbar' => 'แสดงเครื่องมือแก้ไข (จาวาสคริปต์)',
 'tog-editondblclick' => 'แก้ไขหน้าโดยการดับเบิลคลิก (จาวาสคริปต์)',
-'tog-editsection' => 'à¹\80à¸\9bิà¸\94à¸\81ารà¹\81à¸\81à¹\89à¹\84à¸\82à¹\80à¸\89à¸\9eาะสà¹\88วà¸\99à¹\82à¸\94ยà¹\83à¸\8aà¹\89ลิงก์ [แก้ไข]',
+'tog-editsection' => 'à¹\80à¸\9bิà¸\94à¸\81ารà¹\81à¸\81à¹\89à¹\84à¸\82à¹\80à¸\89à¸\9eาะสà¹\88วà¸\99à¸\9cà¹\88าà¸\99ลิงก์ [แก้ไข]',
 'tog-editsectiononrightclick' => 'เปิดการแก้ไขเฉพาะส่วนโดยคลิกขวาที่หัวข้อ (จาวาสคริปต์)',
-'tog-showtoc' => 'แสดงสารบัญ<br />(สำหรับหน้าที่มีมากกว่า 3 หัวข้อ)',
-'tog-rememberpassword' => 'à¸\88ำà¸\82à¹\89อมูลà¸\81ารà¹\80à¸\82à¹\89าสูà¹\88ระà¸\9aà¸\9aà¸\82อà¸\87à¸\89ัà¸\99à¹\83à¸\99à¹\80à¸\9aราà¹\80à¸\8bอรà¹\8cà¸\99ีà¹\89 (สูà¸\87สุà¸\94 $1 {{PLURAL: $1 | à¸§à¸±à¸\99 | à¸§à¸±à¸\99}})',
-'tog-watchcreations' => 'à¸\99ำหà¸\99à¹\89าà¸\97ีà¹\88สรà¹\89าà¸\87à¹\83สà¹\88รายการเฝ้าดู',
-'tog-watchdefault' => 'à¸\99ำหà¸\99à¹\89าà¸\97ีà¹\88à¹\81à¸\81à¹\89à¹\84à¸\82à¹\83สà¹\88รายการเฝ้าดู',
-'tog-watchmoves' => 'à¸\99ำหà¸\99à¹\89าà¸\97ีà¹\88à¹\80à¸\9bลีà¹\88ยà¸\99à¸\8aืà¹\88อà¹\83สà¹\88รายการเฝ้าดู',
-'tog-watchdeletion' => 'à¸\99ำหà¸\99à¹\89าà¸\97ีà¹\88ลà¸\9aà¹\83สà¹\88รายการเฝ้าดู',
-'tog-minordefault' => 'à¸\95ัà¹\89à¸\87à¸\84à¹\88าà¹\80à¸\9bà¹\87à¸\99à¸\81ารà¹\81à¸\81à¹\89à¹\84à¸\82à¹\80ลà¹\87à¸\81à¸\99à¹\89อยà¸\97ุà¸\81à¸\84รัà¹\89à¸\87à¸\97ีà¹\88à¹\80ริà¹\88มà¸\81ารà¹\81à¸\81à¹\89à¹\84à¸\82',
+'tog-showtoc' => 'แสดงสารบัญ (สำหรับหน้าที่มีมากกว่า 3 หัวข้อ)',
+'tog-rememberpassword' => 'à¸\88ำà¸\81ารลà¹\87อà¸\81อิà¸\99à¸\82อà¸\87à¸\89ัà¸\99à¹\83à¸\99à¹\80à¸\9aราวà¹\8cà¹\80à¸\8bอรà¹\8cà¸\99ีà¹\89 (สูà¸\87สุà¸\94 $1 à¸§à¸±à¸\99)',
+'tog-watchcreations' => 'à¹\80à¸\9eิà¹\88มหà¸\99à¹\89าà¸\97ีà¹\88à¸\89ัà¸\99สรà¹\89าà¸\87à¹\81ละà¹\84à¸\9fลà¹\8cà¸\97ีà¹\88à¸\89ัà¸\99อัà¸\9bà¹\82หลà¸\94à¹\80à¸\82à¹\89ารายการเฝ้าดู',
+'tog-watchdefault' => 'à¹\80à¸\9eิà¹\88มหà¸\99à¹\89าà¹\81ละà¹\84à¸\9fลà¹\8cà¸\97ีà¹\88à¸\89ัà¸\99à¹\81à¸\81à¹\89à¹\84à¸\82à¹\80à¸\82à¹\89ารายการเฝ้าดู',
+'tog-watchmoves' => 'à¹\80à¸\9eิà¹\88มà¹\81ละà¹\84à¸\9fลà¹\8cà¸\97ีà¹\88à¸\89ัà¸\99à¹\80à¸\9bลีà¹\88ยà¸\99à¸\8aืà¹\88อà¹\80à¸\82à¹\89ารายการเฝ้าดู',
+'tog-watchdeletion' => 'à¹\80à¸\9eิà¹\88มหà¸\99à¹\89าà¹\81ละà¹\84à¸\9fลà¹\8cà¸\97ีà¹\88à¸\89ัà¸\99ลà¸\9aà¹\80à¸\82à¹\89ารายการเฝ้าดู',
+'tog-minordefault' => 'à¸\81ำหà¸\99à¸\94à¹\83หà¹\89à¸\81ารà¹\81à¸\81à¹\89à¹\84à¸\82à¸\97ุà¸\81à¸\84รัà¹\89à¸\87à¹\80à¸\9bà¹\87à¸\99à¸\81ารà¹\81à¸\81à¹\89à¹\84à¸\82à¹\80ลà¹\87à¸\81à¸\99à¹\89อยà¹\82à¸\94ยà¸\9bริยาย',
 'tog-previewontop' => 'แสดงตัวอย่างการแก้ไขก่อนกล่องแก้ไข',
 'tog-previewonfirst' => 'แสดงตัวอย่างการแก้ไขสำหรับการแก้ไขครั้งแรก',
 'tog-nocache' => 'ปิดใช้งานแคช',
-'tog-enotifwatchlistpages' => 'หà¸\99à¹\89าà¸\97ีà¹\88à¹\80à¸\9dà¹\89าà¸\94ูมีà¸\81ารà¹\81à¸\81à¹\89à¹\84à¸\82',
-'tog-enotifusertalkpages' => 'หà¸\99à¹\89าà¸\9eูà¸\94à¸\84ุยสà¹\88วà¸\99à¸\95ัวมีà¸\81ารà¹\81à¸\81à¹\89à¹\84à¸\82',
-'tog-enotifminoredits' => 'à¹\81มà¹\89วà¹\88าà¸\81ารà¹\81à¸\81à¹\89à¹\84à¸\82à¸\88ะà¹\80à¸\9bà¹\87à¸\99à¸\81ารà¹\81à¸\81à¹\89à¹\84à¸\82เล็กน้อย',
+'tog-enotifwatchlistpages' => 'อีà¹\80มลหาà¹\80มืà¹\88อหà¸\99à¹\89าหรือà¹\84à¸\9fลà¹\8cà¹\83à¸\99รายà¸\81ารà¹\80à¸\9dà¹\89าà¸\94ูมีà¸\81ารà¹\80à¸\9bลีà¹\88ยà¸\99à¹\81à¸\9bลà¸\87',
+'tog-enotifusertalkpages' => 'อีà¹\80มลหาà¹\80มืà¹\88อหà¸\99à¹\89าà¸\84ุยà¸\81ัà¸\9aà¸\9cูà¹\89à¹\83à¸\8aà¹\89à¸\82อà¸\87à¸\89ัà¸\99มีà¸\81ารà¹\80à¸\9bลีà¹\88ยà¸\99à¹\81à¸\9bลà¸\87',
+'tog-enotifminoredits' => 'อีà¹\80มลหาà¹\80à¸\8aà¹\88à¸\99à¸\81ัà¸\99สำหรัà¸\9aà¸\81ารà¹\81à¸\81à¹\89à¹\84à¸\82หà¸\99à¹\89าà¹\81ละà¹\84à¸\9fลà¹\8cเล็กน้อย',
 'tog-enotifrevealaddr' => 'เผยที่อยู่อีเมลในอีเมลที่ชี้แจง',
-'tog-shownumberswatching' => 'แสดงจำนวนผู้ใช้ที่เฝ้าดูหน้านี้',
+'tog-shownumberswatching' => 'แสดงจำนวนผู้ใช้ที่เฝ้าดู',
 'tog-oldsig' => 'ลายเซ็นที่ใช้อยู่:',
-'tog-fancysig' => 'à¹\83à¸\8aà¹\89à¸\84ำสัà¹\88à¸\87วิà¸\81ิà¸\97ีà¹\88à¸\9bราà¸\81à¸\8fà¹\83à¸\99ลายà¹\80à¸\8bà¹\87à¸\99à¸\99ีà¹\89 (à¹\84มà¹\88มีà¸\81ารสรà¹\89าà¸\87ลิงก์อัตโนมัติ)',
+'tog-fancysig' => 'à¹\83à¸\8aà¹\89à¸\84ำสัà¹\88à¸\87วิà¸\81ิà¸\97ีà¹\88à¸\9bราà¸\81à¸\8fà¹\83à¸\99ลายà¹\80à¸\8bà¹\87à¸\99à¸\99ีà¹\89 (à¹\82à¸\94ยà¹\84มà¹\88มีลิงก์อัตโนมัติ)',
 'tog-externaleditor' => 'ใช้โปรแกรมแก้ไขภายนอกโดยปริยาย (สำหรับผู้เชี่ยวชาญเท่านั้น ต้องการการตั้งค่าพิเศษบนคอมพิวเตอร์ของคุณ [//www.mediawiki.org/wiki/Manual:External_editors ข้อมูลเพิ่มเติม])',
 'tog-externaldiff' => 'ใช้โปรแกรมเปรียบเทียบภายนอกโดยปริยาย (สำหรับผู้เชี่ยวชาญเท่านั้น ต้องการการตั้งค่าพิเศษบนคอมพิวเตอร์ของคุณ [//www.mediawiki.org/wiki/Manual:External_editors ข้อมูลเพิ่มเติม])',
 'tog-showjumplinks' => 'เปิดใช้งาน "กระโดด" อัตโนมัติไปตามลิงก์',
 'tog-uselivepreview' => 'แสดงตัวอย่างการแก้ไขแบบทันที (จาวาสคริปต์) (ทดลอง)',
 'tog-forceeditsummary' => 'เตือนเมื่อช่องคำอธิบายอย่างย่อว่าง',
-'tog-watchlisthideown' => 'à¹\84มà¹\88à¹\81สà¸\94à¸\87à¸\81ารà¹\81à¸\81à¹\89à¹\84à¸\82à¸\82อà¸\87à¸\95à¸\99à¹\80อà¸\87à¸\88าà¸\81รายà¸\81ารà¹\80à¸\9dà¹\89าà¸\94ูà¸\82อà¸\87à¸\95à¸\99à¹\80อà¸\87',
-'tog-watchlisthidebots' => 'à¹\84มà¹\88à¹\81สà¸\94à¸\87à¸\81ารà¹\81à¸\81à¹\89à¹\84à¸\82à¸\82อà¸\87à¸\9aอà¸\95à¸\88าà¸\81รายà¸\81ารà¹\80à¸\9dà¹\89าà¸\94ูà¸\82อà¸\87à¸\95à¸\99à¹\80อà¸\87',
-'tog-watchlisthideminor' => 'à¹\84มà¹\88à¹\81สà¸\94à¸\87à¸\81ารà¹\81à¸\81à¹\89à¹\84à¸\82à¹\80ลà¹\87à¸\81à¸\99à¹\89อยà¸\88าà¸\81รายà¸\81ารà¹\80à¸\9dà¹\89าà¸\94ูà¸\82อà¸\87à¸\95à¸\99à¹\80อà¸\87',
+'tog-watchlisthideown' => 'à¸\8bà¹\88อà¸\99à¸\81ารà¹\81à¸\81à¹\89à¹\84à¸\82à¸\82อà¸\87à¸\89ัà¸\99à¸\88าà¸\81รายà¸\81ารà¹\80à¸\9dà¹\89าà¸\94ู',
+'tog-watchlisthidebots' => 'à¸\8bà¹\88อà¸\99à¸\81ารà¹\81à¸\81à¹\89à¹\84à¸\82à¸\82อà¸\87à¸\9aอà¸\95à¸\88าà¸\81รายà¸\81ารà¹\80à¸\9dà¹\89าà¸\94ู',
+'tog-watchlisthideminor' => 'à¸\8bà¹\88อà¸\99à¸\81ารà¹\81à¸\81à¹\89à¹\84à¸\82à¹\80ลà¹\87à¸\81à¸\99à¹\89อยà¸\88าà¸\81รายà¸\81ารà¹\80à¸\9dà¹\89าà¸\94ู',
 'tog-watchlisthideliu' => 'ซ่อนการแก้ไขโดยผู้ใช้ล็อกอินจากรายการเฝ้าดู',
 'tog-watchlisthideanons' => 'ซ่อนการแก้ไขโดยผู้ใช้นิรนามจากรายการเฝ้าดู',
 'tog-watchlisthidepatrolled' => 'ซ่อนการแก้ไขที่ตรวจแล้วจากรายการเฝ้าดู',
-'tog-ccmeonemails' => 'สà¹\88à¸\87สำà¹\80à¸\99าอีà¹\80มลà¸\81ลัà¸\9aมาà¸\97ุà¸\81à¸\84รัà¹\89à¸\87à¸\97ีà¹\88สà¹\88à¸\87หาà¸\84à¸\99อืà¹\88น',
+'tog-ccmeonemails' => 'สà¹\88à¸\87สำà¹\80à¸\99าอีà¹\80มลà¸\97ีà¹\88à¸\89ัà¸\99สà¹\88à¸\87หาà¸\9cูà¹\89อืà¹\88à¸\99à¹\83หà¹\89à¸\89ัน',
 'tog-diffonly' => 'ไม่แสดงเนื้อหาใต้ส่วนต่างการแก้ไข',
 'tog-showhiddencats' => 'แสดงหมวดหมู่ที่ซ่อนอยู่',
 'tog-noconvertlink' => 'ปิดใช้งานการแปลงชื่อเรื่องของลิงก์',
-'tog-norollbackdiff' => 'à¸\82à¹\89ามà¹\81สà¸\94à¸\87à¸\84วามà¹\80à¸\9bลีà¹\88ยà¸\99à¹\81à¸\9bลà¸\87หลัà¸\87à¸\88าà¸\81à¸\94ำà¹\80à¸\99ิà¸\99à¸\81ารยà¹\89อà¸\99à¸\81ลัà¸\9a',
+'tog-norollbackdiff' => 'à¹\84มà¹\88à¹\81สà¸\94à¸\87à¸\81ารà¹\80à¸\9bลีà¹\88ยà¸\99à¹\81à¸\9bลà¸\87หลัà¸\87à¸\94ำà¹\80à¸\99ิà¸\99à¸\81ารยà¹\89อà¸\99à¸\81ลัà¸\9aà¸\89ุà¸\81à¹\80à¸\89ิà¸\99',
 
 'underline-always' => 'เสมอ',
 'underline-never' => 'ไม่เคย',
-'underline-default' => 'à¸\84à¹\88าà¸\9bริยายà¸\95ามà¹\80วà¹\87à¸\9aเบราว์เซอร์',
+'underline-default' => 'à¸\84à¹\88าà¹\82à¸\94ยà¸\9bริยายà¸\82อà¸\87หà¸\99à¹\89าà¸\95าหรือเบราว์เซอร์',
 
 # Font style option in Special:Preferences
-'editfont-style' => 'รูà¸\9bà¹\81à¸\9aà¸\9aà¸\82อà¸\87à¹\81à¸\9aà¸\9aà¸\95ัวอัà¸\81ษรà¹\83à¸\99à¸\81ลà¹\88อà¸\87แก้ไข:',
+'editfont-style' => 'รูà¸\9bà¹\81à¸\9aà¸\9aà¸\95ัวอัà¸\81ษรà¹\83à¸\99à¸\9eืà¹\89à¸\99à¸\97ีà¹\88แก้ไข:',
 'editfont-default' => 'ค่าตั้งต้นของเบราว์เซอร์',
 'editfont-monospace' => 'ชุดอักษรแบบความกว้างคงที่',
 'editfont-sansserif' => 'ชุดอักษรแบบไม่มีเชิง',
@@ -306,28 +308,29 @@ $messages = array(
 
 # Categories related messages
 'pagecategories' => '{{PLURAL:$1|หมวดหมู่|หมวดหมู่}}',
-'category_header' => 'à¹\80à¸\99ืà¹\89อหาในหมวดหมู่ "$1"',
+'category_header' => 'หà¸\99à¹\89าในหมวดหมู่ "$1"',
 'subcategories' => 'หมวดหมู่ย่อย',
 'category-media-header' => 'สื่อในหมวดหมู่ "$1"',
-'category-empty' => "''หมวà¸\94หมูà¹\88à¸\99ีà¹\89วà¹\88าà¸\87 à¹\84มà¹\88มีà¸\9aà¸\97à¸\84วามà¹\83à¸\94อยูà¹\88''",
+'category-empty' => "''à¸\9bัà¸\88à¸\88ุà¸\9aัà¸\99หมวà¸\94หมูà¹\88à¸\99ีà¹\89à¹\84มà¹\88มีหà¸\99à¹\89าหรือสืà¹\88อà¹\83à¸\94''",
 'hidden-categories' => '{{PLURAL:$1|หมวดหมู่ที่ซ่อนอยู่|หมวดหมู่ที่ซ่อนอยู่}}',
 'hidden-category-category' => 'หมวดหมู่ที่ซ่อนอยู่',
 'category-subcat-count' => '{{PLURAL:$2|หมวดหมู่นี้มีหมวดหมู่ย่อยเพียงหมวดหมู่เดียว|หมวดหมู่นี้มี {{PLURAL:$1|หมวดหมู่ย่อย|$1 หมวดหมู่ย่อย}} จากทั้งหมด $2 หมวดหมู่}}',
-'category-subcat-count-limited' => 'หมวดหมู่นี้มี {{PLURAL:$1|หมวดหมู่ย่อยเพียงหมวดหมู่เดียว|$1 หมวดหมู่ย่อย}}',
-'category-article-count' => '{{PLURAL:$2|หมวà¸\94หมูà¹\88à¸\99ีà¹\89มีหà¸\99à¹\89าอยูà¹\88à¹\80à¸\9eียà¸\87หà¸\99à¹\89าà¹\80à¸\94ียว|มี {{PLURAL:$1|หà¸\99à¹\89าà¹\80à¸\94ียว|$1 à¸«à¸\99à¹\89า}} à¹\83à¸\99หมวà¸\94หมูà¹\88à¸\99ีà¹\89 à¹\80à¸\95à¹\87ม $2}}',
-'category-article-count-limited' => '{{PLURAL:$1|หน้า|หน้า}}ต่อไปนี้อยู่ในหมวดหมู่นี้',
-'category-file-count' => '{{PLURAL:$2|มีà¹\84à¸\9fลà¹\8cà¹\80à¸\94ียวà¹\83à¸\99หมวà¸\94หมูà¹\88à¸\99ีà¹\89|มี {{PLURAL:$1|à¹\84à¸\9fลà¹\8c|à¹\84à¸\9fลà¹\8c}} à¹\83à¸\99หมวà¸\94หมูà¹\88à¸\99ีà¹\89จากทั้งหมด $2 ไฟล์}}',
+'category-subcat-count-limited' => 'หมวดหมู่นี้มี $1 หมวดหมู่ย่อย',
+'category-article-count' => '{{PLURAL:$2|หมวà¸\94หมูà¹\88à¸\99ีà¹\89มีอยูà¹\88à¹\80à¸\9eียà¸\87หà¸\99à¹\89าà¹\80à¸\94ียว|à¹\83à¸\99หมวà¸\94หมูà¹\88à¸\99ีà¹\89มี {{PLURAL:$1|หà¸\99à¹\89าà¹\80à¸\94ียว|$1 à¸«à¸\99à¹\89า}} à¸\88าà¸\81à¸\97ัà¹\89à¸\87หมà¸\94 $2 à¸«à¸\99à¹\89า}}',
+'category-article-count-limited' => '$1 หน้าต่อไปนี้อยู่ในหมวดหมู่นี้',
+'category-file-count' => '{{PLURAL:$2|หมวà¸\94หมูà¹\88à¸\99ีà¹\89มีà¹\80à¸\9eียà¸\87à¹\84à¸\9fลà¹\8cà¹\80à¸\94ียว|à¹\83à¸\99หมวà¸\94หมูà¹\88à¸\99ีà¹\89มี $1 à¹\84à¸\9fลà¹\8c จากทั้งหมด $2 ไฟล์}}',
 'category-file-count-limited' => '{{PLURAL:$1|ไฟล์|ไฟล์}}ต่อไปนี้อยู่ในหมวดหมู่นี้',
 'listingcontinuesabbrev' => '(ต่อ)',
 'index-category' => 'หน้าที่มีดัชนี',
 'noindex-category' => 'หน้าที่ไม่มีดัชนี',
 'broken-file-category' => 'หน้าที่มีลิงก์ไฟล์เสีย',
 
-'about' => 'à¹\80วà¹\87à¸\9aà¹\84à¸\8bà¸\95à¹\8cà¸\99ีà¹\89',
+'about' => 'à¹\80à¸\81ีà¹\88ยวà¸\81ัà¸\9a',
 'article' => 'หน้าเนื้อหา',
 'newwindow' => '(เปิดหน้าต่างใหม่)',
 'cancel' => 'ยกเลิก',
 'moredotdotdot' => 'ดูเพิ่ม...',
+'morenotlisted' => 'มีที่ยังไม่แสดงอีก...',
 'mypage' => 'หน้า',
 'mytalk' => 'พูดคุย',
 'anontalk' => 'พูดคุยกับไอพีนี้',
@@ -345,13 +348,13 @@ $messages = array(
 'faqpage' => 'Project:คำถามถามบ่อย',
 
 # Vector skin
-'vector-action-addsection' => 'à¹\80à¸\9eิà¹\88มหัวà¸\82à¹\89อใหม่',
+'vector-action-addsection' => 'à¹\80à¸\9eิà¹\88มสà¹\88วà¸\99ใหม่',
 'vector-action-delete' => 'ลบ',
-'vector-action-move' => 'ยà¹\89าย',
+'vector-action-move' => 'à¹\80à¸\9bลีà¹\88ยà¸\99à¸\8aืà¹\88อ',
 'vector-action-protect' => 'ป้องกัน',
-'vector-action-undelete' => 'ยà¸\81à¹\80ลิà¸\81à¸\81ารลà¸\9a',
+'vector-action-undelete' => 'à¸\81ูà¹\89à¸\84ืà¸\99',
 'vector-action-unprotect' => 'เปลี่ยนค่าการป้องกัน',
-'vector-simplesearch-preference' => 'à¹\80à¸\9bิà¸\94à¹\83à¸\8aà¹\89à¸\87าà¸\99à¸\84ำà¹\81à¸\99ะà¸\99ำà¸\81ารà¸\84à¹\89à¸\99หาà¸\82ัà¹\89à¸\99สูà¸\87 (สำหรัà¸\9aสà¸\81ิà¸\99 Vector à¹\80à¸\97à¹\88าà¸\99ัà¹\89à¸\99)',
+'vector-simplesearch-preference' => 'à¹\80à¸\9bิà¸\94à¹\83à¸\8aà¹\89à¸\87าà¸\99à¹\81à¸\96à¸\9aà¸\84à¹\89à¸\99หาอยà¹\88าà¸\87à¸\87à¹\88าย (à¹\80à¸\89à¸\9eาะหà¸\99à¹\89าà¸\95าà¹\80วà¸\81à¹\80à¸\95อรà¹\8c)',
 'vector-view-create' => 'สร้าง',
 'vector-view-edit' => 'แก้ไข',
 'vector-view-history' => 'ดูประวัติ',
@@ -361,18 +364,19 @@ $messages = array(
 'namespaces' => 'เนมสเปซ',
 'variants' => 'สิ่งที่แตกต่าง',
 
+'navigation-heading' => 'รายการเลือกป้ายบอกทาง',
 'errorpagetitle' => 'มีข้อผิดพลาด',
 'returnto' => 'กลับไป $1',
 'tagline' => 'จาก {{SITENAME}}',
-'help' => 'วิà¸\98ีà¹\83à¸\8aà¹\89',
+'help' => 'à¸\84ำอà¸\98ิà¸\9aาย',
 'search' => 'สืบค้น',
 'searchbutton' => 'สืบค้น',
 'go' => 'ไป',
 'searcharticle' => 'ไป',
 'history' => 'ประวัติหน้า',
 'history_short' => 'ประวัติ',
-'updatedmarker' => 'à¸\84วามà¹\80à¸\9bลีà¹\88ยà¸\99à¹\81à¸\9bลà¸\87à¸\95ัà¹\89à¸\87à¹\81à¸\95à¹\88à¸\84รัà¹\89à¸\87ลà¹\88าสุà¸\94',
-'printableversion' => 'หà¸\99à¹\89าสำหรัà¸\9aพิมพ์',
+'updatedmarker' => 'à¸\81ารà¸\9bรัà¸\9aà¸\95ัà¹\89à¸\87à¹\81à¸\95à¹\88à¸\81ารà¹\80à¸\82à¹\89าà¸\8aมà¸\84รัà¹\89à¸\87ลà¹\88าสุà¸\94à¸\82อà¸\87à¸\89ัà¸\99',
+'printableversion' => 'รุà¹\88à¸\99à¸\9eรà¹\89อมพิมพ์',
 'permalink' => 'ลิงก์ถาวร',
 'print' => 'พิมพ์',
 'view' => 'ดู',
@@ -382,38 +386,38 @@ $messages = array(
 'create-this-page' => 'สร้างหน้านี้',
 'delete' => 'ลบ',
 'deletethispage' => 'ลบหน้านี้',
-'undelete_short' => 'à¹\80รียà¸\81à¸\84ืà¸\99 {{PLURAL:$1|1 à¸\81ารà¹\81à¸\81à¹\89à¹\84à¸\82|$1 à¸\81ารà¹\81à¸\81à¹\89à¹\84à¸\82}}',
-'viewdeleted_short' => 'ดู {{PLURAL:$1|1 การแก้ไขที่ถูกลบ|$1 การแก้ไขที่ถูกลบ}}',
+'undelete_short' => 'à¸\81ูà¹\89à¸\84ืà¸\99 $1 à¸\81ารà¹\81à¸\81à¹\89à¹\84à¸\82',
+'viewdeleted_short' => 'ดู $1 การแก้ไขที่ถูกลบ',
 'protect' => 'ล็อก',
 'protect_change' => 'เปลี่ยน',
 'protectthispage' => 'ล็อกหน้านี้',
 'unprotect' => 'เปลี่ยนค่าการป้องกัน',
-'unprotectthispage' => 'à¹\81à¸\81à¹\89à¹\84à¸\82à¸\81ารà¸\9bà¹\89อà¸\87à¸\81ัà¸\99หà¸\99à¹\89าà¹\80วà¹\87à¸\9aà¸\99ีà¹\89',
+'unprotectthispage' => 'แก้ไขการป้องกันหน้านี้',
 'newpage' => 'หน้าใหม่',
-'talkpage' => 'à¸\9eูà¸\94à¸\84ุยหน้านี้',
+'talkpage' => 'อภิà¸\9bรายหน้านี้',
 'talkpagelinktext' => 'พูดคุย',
 'specialpage' => 'หน้าพิเศษ',
 'personaltools' => 'เครื่องมือส่วนตัว',
-'postcomment' => 'หัวà¸\82à¹\89อใหม่',
-'articlepage' => 'à¹\81สà¸\94à¸\87หน้าเนื้อหา',
+'postcomment' => 'à¸\95อà¸\99ใหม่',
+'articlepage' => 'à¸\94ูหน้าเนื้อหา',
 'talk' => 'อภิปราย',
 'views' => 'ดู',
-'toolbox' => 'เครื่องมือเพิ่ม',
+'toolbox' => 'เครื่องมือ',
 'userpage' => 'ดูหน้าผู้ใช้',
 'projectpage' => 'ดูหน้าโครงการ',
-'imagepage' => 'à¸\94ูหà¸\99à¹\89ารายละà¹\80อียà¸\94à¹\84à¸\9fลà¹\8c',
+'imagepage' => 'ดูหน้าไฟล์',
 'mediawikipage' => 'ดูหน้าข้อความ',
 'templatepage' => 'ดูหน้าแม่แบบ',
-'viewhelppage' => 'à¸\94ูหà¸\99à¹\89าวิà¸\98ีà¹\83à¸\8aà¹\89',
+'viewhelppage' => 'à¸\94ูหà¸\99à¹\89าà¸\84ำอà¸\98ิà¸\9aาย',
 'categorypage' => 'ดูหน้าหมวดหมู่',
 'viewtalkpage' => 'ดูการพูดคุย',
 'otherlanguages' => 'ในภาษาอื่น',
 'redirectedfrom' => '(เปลี่ยนทางจาก $1)',
 'redirectpagesub' => 'หน้าเปลี่ยนทาง',
-'lastmodifiedat' => 'หน้านี้แก้ไขล่าสุดเมื่อวันที่  $1 เวลา $2',
-'viewcount' => 'หน้านี้มีการเข้าชม {{PLURAL:$1|1 ครั้ง|$1 ครั้ง}}',
+'lastmodifiedat' => 'หน้านี้แก้ไขล่าสุดเมื่อวันที่ $1 เวลา $2',
+'viewcount' => 'หน้านี้มีการเข้าชม $1 ครั้ง',
 'protectedpage' => 'หน้าถูกล็อก',
-'jumpto' => 'à¸\82à¹\89ามà¹\84à¸\9bà¸\97ีà¹\88:',
+'jumpto' => 'à¸\82à¹\89ามà¹\84à¸\9bยัà¸\87:',
 'jumptonavigation' => 'นำทาง',
 'jumptosearch' => 'สืบค้น',
 'view-pool-error' => 'ขออภัย ขณะนี้เซิร์ฟเวอร์มีภาระเกิน
@@ -427,13 +431,13 @@ $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) and the disambiguation template definition (see disambiguations).
 'aboutsite' => 'เกี่ยวกับ {{SITENAME}}',
-'aboutpage' => 'Project:เกี่ยวกับเว็บไซต์',
+'aboutpage' => 'Project:เกี่ยวกับ',
 'copyright' => 'เนื้อหาอนุญาตให้เผยแพร่ภายใต้ $1',
 'copyrightpage' => '{{ns:project}}:ลิขสิทธิ์',
 'currentevents' => 'เหตุการณ์ปัจจุบัน',
 'currentevents-url' => 'Project:เหตุการณ์ปัจจุบัน',
 'disclaimers' => 'ข้อปฏิเสธความรับผิดชอบ',
-'disclaimerpage' => 'Project:ข้อปฏิเสธความรับผิดชอบ',
+'disclaimerpage' => 'Project:ข้อปฏิเสธความรับผิดชอบทั่วไป',
 'edithelp' => 'คำอธิบายการแก้ไข',
 'edithelppage' => 'Help:การแก้ไข',
 'helppage' => 'Help:สารบัญ',
@@ -446,21 +450,21 @@ $1',
 'privacypage' => 'Project:นโยบายสิทธิส่วนบุคคล',
 
 'badaccess' => 'มีข้อผิดพลาดในการใช้สิทธิ',
-'badaccess-group0' => 'คุณไม่ได้รับอนุญาตให้ดำเนินการตามที่ร้องขอนี้',
-'badaccess-groups' => 'à¸\9bà¸\8fิà¸\9aัà¸\95ิà¸\81ารà¸\97ีà¹\88à¸\84ุà¸\93รà¹\89อà¸\87à¸\82อà¸\99ีà¹\89สà¸\87วà¸\99à¹\84วà¹\89à¹\80à¸\89à¸\9eาะà¸\9cูà¹\89à¹\83à¸\8aà¹\89à¹\83à¸\99{{PLURAL:$2|à¸\81ลุà¹\88ม|à¸\81ลุà¹\88มà¹\83à¸\94à¸\81ลุà¹\88มหà¸\99ึà¹\88à¸\87 ดังนี้}}: $1',
+'badaccess-group0' => 'คุณไม่ได้รับอนุญาตให้ดำเนินการตามที่ร้องขอ',
+'badaccess-groups' => 'à¸\9bà¸\8fิà¸\9aัà¸\95ิà¸\81ารà¸\97ีà¹\88à¸\84ุà¸\93รà¹\89อà¸\87à¸\82อà¸\99ีà¹\89สà¸\87วà¸\99à¹\84วà¹\89à¹\80à¸\89à¸\9eาะà¸\9cูà¹\89à¹\83à¸\8aà¹\89à¹\83à¸\99{{PLURAL:$2|à¸\81ลุà¹\88ม|à¸\81ลุà¹\88มหà¸\99ึà¹\88à¸\87à¸\81ลุà¹\88มà¹\83à¸\94 ดังนี้}}: $1',
 
 'versionrequired' => 'ต้องการมีเดียวิกิรุ่น $1',
-'versionrequiredtext' => 'ต้องการมีเดียวิกิรุ่น $1 สำหรับใช้งานหน้านี้ ดูเพิ่ม [[Special:Version|รุ่นซอฟต์แวร์]]',
+'versionrequiredtext' => 'ต้องการมีเดียวิกิรุ่น $1 สำหรับใช้งานหน้านี้ ดู[[Special:Version|หน้ารุ่น]]',
 
 'ok' => 'ตกลง',
 'retrievedfrom' => 'รับข้อมูลจาก "$1"',
-'youhavenewmessages' => 'คุณมี $1 ($2)',
+'youhavenewmessages' => 'คุณมี$1 ($2)',
 'newmessageslink' => 'ข้อความใหม่',
 'newmessagesdifflink' => 'การเปลี่ยนแปลงล่าสุด',
-'youhavenewmessagesfromusers' => 'คุณมี $1 จาก{{PLURAL:$3|ผู้ใช้คนอื่น|ผู้ใช้ $3 คน}} ($2)',
-'youhavenewmessagesmanyusers' => 'คุณมี $1 จากผู้ใช้หลายคน ($2)',
-'newmessageslinkplural' => '{{PLURAL:$1|ข้อความใหม่|ข้อความใหม่}}',
-'newmessagesdifflinkplural' => '{{PLURAL:$1|การเปลี่ยนแปลง|การเปลี่ยนแปลง}}ล่าสุด',
+'youhavenewmessagesfromusers' => 'คุณมี $1จาก{{PLURAL:$3|ผู้ใช้คนอื่น|ผู้ใช้ $3 คน}} ($2)',
+'youhavenewmessagesmanyusers' => 'คุณมี $1จากผู้ใช้หลายคน ($2)',
+'newmessageslinkplural' => '$1 ข้อความใหม่',
+'newmessagesdifflinkplural' => '$1 การเปลี่ยนแปลงล่าสุด',
 'youhavenewmessagesmulti' => 'คุณมีข้อความใหม่ที่ $1',
 'editsection' => 'แก้ไข',
 'editold' => 'แก้ไข',
@@ -475,7 +479,7 @@ $1',
 'collapsible-expand' => 'ขยาย',
 'thisisdeleted' => 'แสดงหรือเรียกดู $1',
 'viewdeleted' => 'ดู $1',
-'restorelink' => '{{PLURAL:$1|1 การแก้ไขที่ถูกลบ|$1 การแก้ไขที่ถูกลบ}}',
+'restorelink' => '$1 การแก้ไขที่ถูกลบ',
 'feedlinks' => 'ฟีด',
 'feed-invalid' => 'ฟีดที่สมัครไม่ถูกชนิด',
 'feed-unavailable' => 'ฟีดไม่ถูกเปิดการใช้งาน',
@@ -488,7 +492,7 @@ $1',
 'sort-ascending' => 'เรียงจากน้อยไปมาก',
 
 # Short words for each namespace, by default used in the namespace tab in monobook
-'nstab-main' => 'à¹\80à¸\99ืà¹\89อหา',
+'nstab-main' => 'หà¸\99à¹\89า',
 'nstab-user' => 'หน้าผู้ใช้',
 'nstab-media' => 'หน้าสื่อ',
 'nstab-special' => 'หน้าพิเศษ',
@@ -496,7 +500,7 @@ $1',
 'nstab-image' => 'ไฟล์',
 'nstab-mediawiki' => 'ข้อความ',
 'nstab-template' => 'แม่แบบ',
-'nstab-help' => 'หà¸\99à¹\89าวิà¸\98ีà¹\83à¸\8aà¹\89',
+'nstab-help' => 'หà¸\99à¹\89าà¸\84ำอà¸\98ิà¸\9aาย',
 'nstab-category' => 'หมวดหมู่',
 
 # Main script and global functions
@@ -505,13 +509,12 @@ $1',
 คุณอาจกรอกยูอาร์แอลผิด หรือมาตามลิงก์ที่ไม่ถูกต้อง
 หรืออาจเกิดจากข้อผิดพลาดในซอฟต์แวร์ซึ่ง {{SITENAME}} ใช้อยู่',
 'nosuchspecialpage' => 'ไม่มีหน้าพิเศษดังกล่าว',
-'nospecialpagetext' => '
-<strong>คุณร้องขอหน้าพิเศษไม่ถูกต้อง</strong>
+'nospecialpagetext' => '<strong>คุณร้องขอหน้าพิเศษไม่ถูกต้อง</strong>
 
-รายà¸\8aืà¹\88อหà¸\99à¹\89าà¸\9eิà¹\80ศษà¸\97ีà¹\88à¸\96ูà¸\81à¸\95à¹\89อà¸\87à¸\94ูà¹\84à¸\94à¹\89à¸\97ีà¹\88 [[Special:SpecialPages|รายà¸\8aืà¹\88อหน้าพิเศษ]]',
+รายà¸\81ารหà¸\99à¹\89าà¸\9eิà¹\80ศษà¸\97ีà¹\88à¸\96ูà¸\81à¸\95à¹\89อà¸\87à¸\94ูà¹\84à¸\94à¹\89à¸\97ีà¹\88 [[Special:SpecialPages|รายà¸\81ารหน้าพิเศษ]]',
 
 # General errors
-'error' => 'ผิดพลาด',
+'error' => 'à¸\82à¹\89อà¸\9cิà¸\94à¸\9eลาà¸\94',
 'databaseerror' => 'ความผิดพลาดที่ฐานข้อมูล',
 'dberrortext' => 'ไวยากรณ์ในการค้นฐานข้อมูลผิดพลาด
 สาเหตุอาจเกิดจากบั๊กของซอฟต์แวร์
@@ -524,23 +527,23 @@ $1',
 "$1"
 จากฟังก์ชัน "$2"
 ฐานข้อมูลแจ้งข้อผิดพลาดว่า "$3: $4"',
-'laggedslavemode' => 'คำเตือน! ข้อมูลในหน้าอาจจะไม่ใช่ข้อมูลล่าสุด',
+'laggedslavemode' => "'''คำเตือน:''' ข้อมูลในหน้าอาจไม่ใช่ข้อมูลล่าสุด",
 'readonly' => 'ฐานข้อมูลถูกล็อก',
-'enterlockreason' => 'à¹\83สà¹\88à¹\80หà¸\95ุà¸\9cลà¹\83à¸\99à¸\81ารลà¹\87อà¸\81 à¸£à¸§à¸¡à¸\96ึà¸\87à¸\8aà¹\88วงเวลาที่คาดว่าจะปลดล็อก',
-'readonlytext' => 'à¸\90าà¸\99à¸\82à¹\89อมูลà¸\82à¸\93ะà¸\99ีà¹\89à¸\96ูà¸\81ลà¹\87อà¸\81สำหรัà¸\9aà¸\81ารà¸\9bรัà¸\9aà¸\9bรุà¸\87 à¹\81à¸\81à¹\89à¹\84à¸\82 à¸«à¸£à¸·à¸­à¸\9bรัà¸\9aà¸\9bรุà¸\87 à¹\80à¸\9bà¹\87à¸\99ระยะ à¸«à¸¥à¸±à¸\87à¸\88าà¸\81à¹\80สรà¹\87à¸\88à¹\81ลà¹\89วสามารà¸\96ใช้งานได้ตามปกติ
+'enterlockreason' => 'à¹\83สà¹\88à¹\80หà¸\95ุà¹\81หà¹\88à¸\87à¸\81ารลà¹\87อà¸\81 à¸\97ัà¹\89งเวลาที่คาดว่าจะปลดล็อก',
+'readonlytext' => 'à¸\82à¸\93ะà¸\99ีà¹\89à¸\90าà¸\99à¸\82à¹\89อมูลà¸\96ูà¸\81ลà¹\87อà¸\81มิà¹\83หà¹\89รัà¸\9aà¸\82à¹\89อมูลà¹\83หมà¹\88à¹\81ละà¸\81ารà¹\80à¸\9bลีà¹\88ยà¸\99à¹\81à¸\9bลà¸\87อืà¹\88à¸\99 à¸­à¸²à¸\88à¹\80à¸\9bà¹\87à¸\99à¹\80à¸\9eราะà¸\81ารà¸\9aำรุà¸\87รัà¸\81ษาà¸\90าà¸\99à¸\82à¹\89อมูลรูà¸\97ีà¸\99 à¸«à¸¥à¸±à¸\87à¹\81ลà¹\89วà¹\80สรà¹\87à¸\88à¸\88ะà¸\81ลัà¸\9aมาใช้งานได้ตามปกติ
 
-à¸\9cูà¹\89à¸\94ูà¹\81ลระà¸\9aà¸\9aà¸\97ีà¹\88à¸\97ำà¸\81ารลà¹\87อà¸\81à¹\84à¸\94à¹\89à¹\83หà¹\89à¸\84ำอà¸\98ิà¸\9aายà¸\94ัà¸\87à¸\99ีà¹\89: $1',
+ผู้ดูแลระบบที่ล็อกได้ให้คำอธิบายดังนี้: $1',
 'missing-article' => 'ฐานข้อมูลไม่พบเนื้อหาของหน้าที่ควรจะมี ในชื่อ "$1" $2
 
-สาà¹\80หà¸\95ุมัà¸\81à¹\80à¸\81ิà¸\94à¸\88าà¸\81à¸\81ารà¹\80à¸\9bรียà¸\9aà¹\80à¸\97ียà¸\9aà¸\97ีà¹\88ลà¹\89าสมัย à¸«à¸£à¸·à¸­à¸\9bระวัà¸\95ิà¸\81ารà¹\80à¸\8aืà¹\88อมà¹\82ยà¸\87ไปยังหน้านั้นได้ถูกลบแล้ว
+สาà¹\80หà¸\95ุมัà¸\81à¹\80à¸\81ิà¸\94à¸\88าà¸\81à¸\81ารà¹\80à¸\9bรียà¸\9aà¹\80à¸\97ียà¸\9aà¸\97ีà¹\88ลà¹\89าสมัย à¸«à¸£à¸·à¸­à¸\81ารà¹\80à¸\8aืà¹\88อมà¹\82ยà¸\87à¸\9bระวัà¸\95ิไปยังหน้านั้นได้ถูกลบแล้ว
 
-หาà¸\81à¹\84มà¹\88à¹\83à¸\8aà¹\88à¸\81รà¸\93ีà¸\94ัà¸\87à¸\81ลà¹\88าว à¸\84ุà¸\93อาà¸\88à¸\88ะà¸\9eà¸\9aà¸\9aัà¹\8aà¸\81à¹\83à¸\99à¸\8bอà¸\9fà¸\95à¹\8cà¹\81วรà¹\8c à¸\81รุà¸\93ารายà¸\87าà¸\99à¸\95à¹\88อ[[Special:ListUsers/sysop|à¸\9cูà¹\89à¸\94ูà¹\81ลระà¸\9aà¸\9a]] à¹\82à¸\94ยระà¸\9aุ URL à¹\84à¸\9bà¸\94à¹\89วย',
+หาà¸\81à¹\84มà¹\88à¹\83à¸\8aà¹\88à¸\81รà¸\93ีà¸\94ัà¸\87à¸\81ลà¹\88าว à¸\84ุà¸\93อาà¸\88à¸\9eà¸\9aà¸\9aัà¹\8aà¸\81à¹\83à¸\99à¸\8bอà¸\9fà¸\95à¹\8cà¹\81วรà¹\8c à¸\81รุà¸\93ารายà¸\87าà¸\99à¸\95à¹\88อ[[Special:ListUsers/sysop|à¸\9cูà¹\89à¸\94ูà¹\81ลระà¸\9aà¸\9a]] à¸\9eรà¹\89อมระà¸\9aุ URL',
 'missingarticle-rev' => '(รุ่น#: $1)',
 'missingarticle-diff' => '(ต่าง: $1, $2)',
 'readonly_lag' => 'ฐานข้อมูลถูกล็อกอัตโนมัติขณะที่เซิร์ฟเวอร์ฐานข้อมูลรองกำลังปรับปรุงตามฐานข้อมูลหลัก',
 'internalerror' => 'เกิดความผิดพลาดภายใน',
 'internalerror_info' => 'เกิดความผิดพลาดภายใน: $1',
-'fileappenderrorread' => 'à¹\84มà¹\88สามารà¸\96อà¹\88าà¸\99 "$1" à¹\83à¸\99ระหวà¹\88าà¸\87à¸\81ารà¸\9cà¸\99วà¸\81à¹\84à¸\9fลà¹\8c',
+'fileappenderrorread' => 'ไม่สามารถอ่าน "$1" ระหว่างการผนวกไฟล์',
 'fileappenderror' => 'ไม่สามารถต่อท้าย "$2" ด้วย "$1"',
 'filecopyerror' => 'ไม่สามารถคัดลอกไฟล์ "$1" ไปที่ "$2"',
 'filerenameerror' => 'ไม่สามารถเปลี่ยนชื่อไฟล์ "$1" เป็น "$2"',
@@ -550,37 +553,42 @@ $1',
 'fileexistserror' => 'ไม่สามารถเขียนไฟล์ "$1" ได้ เนื่องจากมีไฟล์อยู่แล้ว',
 'unexpected' => 'ผลที่ไม่คาดคิด: "$1"="$2"',
 'formerror' => 'ผิดพลาด: ไม่สามารถส่งแบบได้',
-'badarticleerror' => 'à¸\81ารà¸\81ระà¸\97ำà¸\99ีà¹\89à¹\84มà¹\88สามารà¸\96à¸\94ำà¹\80à¸\99ิà¸\99à¸\81ารà¹\83à¸\99หà¸\99à¹\89าà¸\99ีà¹\89à¹\84à¸\94้',
+'badarticleerror' => 'à¹\84มà¹\88สามารà¸\96à¸\94ำà¹\80à¸\99ิà¸\99à¸\9bà¸\8fิà¸\9aัà¸\95ิà¸\81ารà¸\99ีà¹\89à¹\83à¸\99หà¸\99à¹\89าà¸\99ี้',
 'cannotdelete' => 'ไม่สามารถลบหน้าหรือไฟล์ "$1" 
 อาจมีผู้อื่นลบไปแล้ว',
 'cannotdelete-title' => "ไม่สามารถลบหน้า ''$1''",
-'delete-hook-aborted' => 'à¸\81ารลà¸\9aà¸\96ูà¸\81ยà¸\81à¹\80ลิà¸\81à¹\82à¸\94ยฮุ
+'delete-hook-aborted' => 'à¸\81ารลà¸\9aà¸\96ูà¸\81ฮุà¸\81ยà¸\81à¹\80ลิ
 ไม่มีคำอธิบายสำหรับการยกเลิกนี้',
-'badtitle' => 'à¸\8aืà¹\88อหà¸\99à¹\89าà¹\84มà¹\88à¹\80หมาะสม',
-'badtitletext' => 'à¸\8aืà¹\88อหà¸\99à¹\89าà¸\97ีà¹\88รà¹\89อà¸\87à¸\82อà¹\84มà¹\88à¸\96ูà¸\81à¸\95à¹\89อà¸\87 à¹\80à¸\9bà¹\87à¸\99à¸\8aืà¹\88อวà¹\88าà¸\87 à¸«à¸£à¸·à¸­à¸\8aืà¹\88อà¸\97ีà¹\88à¸\9cิà¸\94à¸\9eลาà¸\94à¹\80à¸\99ืà¹\88อà¸\87à¸\88าà¸\81ลิà¸\87à¸\81à¹\8cà¸\82à¹\89ามมาà¸\88าà¸\81ภาษาอืà¹\88à¸\99 à¸\8aืà¹\88อà¸\97ีà¹\88à¹\83à¸\8aà¹\89อาà¸\88à¸\88ะมีà¸\95ัวอัà¸\81ษรà¸\97ีà¹\88à¹\84มà¹\88สามารà¸\96à¸\96ูà¸\81à¹\83à¸\8aà¹\89à¹\80à¸\9bà¹\87นชื่อได้',
-'perfcached' => 'à¸\82à¹\89อมูลà¸\95à¹\88อà¹\84à¸\9bà¸\99ีà¹\89อาà¸\88à¹\80à¸\9bà¹\87à¸\99à¸\82à¹\89อมูลà¹\80à¸\81à¹\88า à¸\97ีà¹\88à¹\80à¸\81à¹\87à¸\9aà¹\84วà¹\89à¹\83à¸\99à¹\81à¸\84à¸\8aà¸\82อà¸\87ระà¸\9aà¸\9a A maximum of {{PLURAL:$1|one result is|$1 results are}} available in the cache.',
-'perfcachedts' => 'ข้อมูลต่อไปนี้ถูกเก็บไว้ในหน่วยความจำแคช, และได้รับการปรับปรุงครั้งสุดท้าย $1. ค่าสูงสุดของ {{PLURAL:$4|หนึ่งผลลัพธ์คือ|$4 ผลลัพธ์คือ}} จะสามารถเก็บไว้ในหน่วยความจำแคชได้',
-'querypage-no-updates' => 'à¸\82à¸\93ะà¸\99ีà¹\89à¸\81ารà¸\9bรัà¸\9aà¸\9bรุà¸\87หà¸\99à¹\89าà¸\99ีà¹\89à¸\96ูà¸\81ระà¸\87ัà¸\9a à¸\82à¹\89อมูลà¹\83à¸\99à¸\97ีà¹\88à¸\99ีà¹\88à¸\88ะà¹\84มà¹\88รีà¹\80à¸\9fรà¸\8aà¹\80à¸\9bà¹\87à¸\99à¸\82à¹\89อมูลà¸\9bัà¸\88à¸\88ุà¸\9aัà¸\99',
+'badtitle' => 'ชื่อไม่เหมาะสม',
+'badtitletext' => 'à¸\8aืà¹\88อหà¸\99à¹\89าà¸\97ีà¹\88รà¹\89อà¸\87à¸\82อà¹\84มà¹\88à¸\96ูà¸\81à¸\95à¹\89อà¸\87 à¹\80à¸\9bà¹\87à¸\99à¸\8aืà¹\88อวà¹\88าà¸\87 à¸«à¸£à¸·à¸­à¸\8aืà¹\88อà¸\97ีà¹\88à¸\9cิà¸\94à¸\9eลาà¸\94à¹\80à¸\99ืà¹\88อà¸\87à¸\88าà¸\81ลิà¸\87à¸\81à¹\8cà¸\82à¹\89ามมาà¸\88าà¸\81ภาษาอืà¹\88à¸\99 à¸\8aืà¹\88อà¸\97ีà¹\88à¹\83à¸\8aà¹\89อาà¸\88มีà¸\95ัวอัà¸\81ษรà¸\97ีà¹\88à¹\84มà¹\88สามารà¸\96à¸\9bราà¸\81à¸\8fà¹\83นชื่อได้',
+'perfcached' => 'à¸\82à¹\89อมูลà¸\95à¹\88อà¹\84à¸\9bà¸\99ีà¹\89à¸\96ูà¸\81à¹\80à¸\81à¹\87à¸\9aà¹\84วà¹\89à¹\83à¸\99à¹\81à¸\84à¸\8a à¹\81ละอาà¸\88ลà¹\89าสมัย à¸¡à¸µà¸\9cลà¸\81ารà¸\84à¹\89à¸\99หาสูà¸\87สุà¸\94 $1 à¸£à¸²à¸¢à¸\81ารà¹\83à¸\99à¹\81à¸\84à¸\8a',
+'perfcachedts' => 'ข้อมูลต่อไปนี้ถูกเก็บไว้ในหน่วยความจำแคช และได้รับการปรับล่าสุดเมื่อ $1 ค่าสูงสุด $4 ผลลัพธ์สามารถเก็บไว้ในหน่วยความจำแคชได้',
+'querypage-no-updates' => 'ขณะนี้การปรับปรุงหน้านี้ถูกระงับ ข้อมูลในที่นี่จะไม่รีเฟรชเป็นปัจจุบัน',
 'wrong_wfQuery_params' => 'พารามิเตอร์ที่ส่งไป wfQuery() ไม่ถูกต้อง<br />
 ฟังก์ชั่น: $1<br />
 คำค้น: $2',
 'viewsource' => 'ดูโค้ด',
 'viewsource-title' => 'ดูโค้ดสำหรับ $1',
-'actionthrottled' => 'à¸\81ารà¸\81ระà¸\97ำà¸\99ีà¹\89à¸\96ูà¸\81ระà¸\87ัà¸\9aà¸\8aัà¹\88วà¸\84ราว',
+'actionthrottled' => 'การกระทำถูกระงับชั่วคราว',
 'actionthrottledtext' => 'เพื่อเป็นมาตรการป้องกันสแปม คุณจึงถูกจำกัดมิให้กระทำสิ่งนี้ไม่ให้ติดต่อกันหลายครั้งเกินไปในช่วงระยะเวลาสั้น ๆ ซึ่งขณะนี้คุณได้กระทำเกินขีดจำกัดแล้ว กรุณารอสักครู่แล้วลองอีกครั้ง',
-'protectedpagetext' => 'หà¸\99à¹\89าà¸\99ีà¹\89à¸\96ูà¸\81ลà¹\87อà¸\81à¸\9bà¹\89อà¸\87à¸\81ัà¸\99à¸\81ารà¹\81à¸\81à¹\89à¹\84à¸\82',
+'protectedpagetext' => 'หà¸\99à¹\89าà¸\99ีà¹\89à¸\96ูà¸\81à¸\9bà¹\89อà¸\87à¸\81ัà¸\99มิà¹\83หà¹\89à¹\81à¸\81à¹\89à¹\84à¸\82หรือà¸\9bà¸\8fิà¸\9aัà¸\95ิà¸\81ารอืà¹\88à¸\99',
 'viewsourcetext' => 'คุณสามารถดูและคัดลอกโค้ดหน้านี้ได้:',
-'viewyourtext' => "คุณสามารถเปิดดูและคัดลอกต้นฉบับของ '''การแก้ไขของคุณ''' ของหน้านี้ได้",
-'protectedinterface' => 'หน้านี้เป็นข้อความที่ใช้แสดงบนหน้าตาหรือส่วนติดต่อผู้ใช้ของซอฟต์แวร์ ถูกล็อกห้ามแก้ไขเพื่อป้องกันการก่อกวน',
-'editinginterface' => "'''คำเตือน:''' คุณกำลังแก้ไขข้อความที่ใช้แสดงบนหน้าตาหรือส่วนติดต่อผู้ใช้ของซอฟต์แวร์  การแก้ไขหน้านี้จะมีผลต่อการแสดงข้อความบนส่วนติดต่อผู้ใช้ของทุกคน  ถ้าคุณต้องการแปลหน้านี้ ให้ลองใช้บริการของ [//translatewiki.net/wiki/Main_Page?setlang=th translatewiki.net] ซึ่งเป็นโครงการสำหรับแปลซอฟต์แวร์มีเดียวิกิ",
+'viewyourtext' => "คุณสามารถดูและคัดลอกต้นฉบับ'''การแก้ไขของคุณ'''ในหน้านี้ได้",
+'protectedinterface' => 'หน้านี้เป็นข้อความอินเตอร์เฟซสำหรับซอฟต์แวร์บนวิกินี้ และถูกป้องกันเพื่อมิให้มีการกระทำผิด
+ในการเพิ่มหรือเปลี่ยนแปลงการแปลสำหรับทุกวิกิ โปรดใช้ [//translatewiki.net/ translatewiki.net] โครงการแปลมีเดียวิกิเป็นภาษาถิ่น',
+'editinginterface' => "'''คำเตือน:''' คุณกำลังแก้ไขหน้าที่ใช้เพื่อให้ข้อความอินเตอร์เฟซแก่ซอฟต์แวร์
+การเปลี่ยนแปลงหน้านี้จะกระทบต่อลักษณะของอินเตอร์เฟซผู้ใช้แก่ผู้ใช้อื่นบนวิกินี้
+ในการเพิ่มหรือเปลี่ยนแปลงคำแปลสำหรับทุกวิกิ โปรดใช้ [//translatewiki.net/wiki/Main_Page?setlang=th translatewiki.net] โครงการแปลมีเดียวิกิเป็นภาษาถิ่น",
 'sqlhidden' => '(คำสั่ง SQL ซ่อนอยู่)',
 'cascadeprotected' => 'หน้านี้ได้รับการป้องกันจากการแก้ไข เนื่องจากหน้านี้ถูกใช้เป็นส่วนหนึ่งใน{{PLURAL:$1|หน้า $2 ซึ่งได้รับการป้องกันแบบ "ทบทุกลำดับขั้น"|หน้าซึ่งได้รับการป้องกันแบบ "ทบทุกลำดับขั้น" ดังต่อไปนี้: $2}}',
 'namespaceprotected' => "คุณไม่มีสิทธิแก้ไขหน้าในเนมสเปซ '''$1'''",
-'customcssprotected' => 'à¸\84ุà¸\93à¹\84มà¹\88มีสิà¸\97à¸\98ิà¹\8cà¹\83à¸\99à¸\81ารà¹\81à¸\81à¹\89à¹\84à¸\82หà¸\99à¹\89าสà¹\84à¸\95ลà¹\8c CSS à¸«à¸\99à¹\89าà¸\99ีà¹\89 à¹\80à¸\99ืà¹\88อà¸\87à¸\88าà¸\81หà¸\99à¹\89าà¸\99ีà¹\89à¸\9bระà¸\81อà¸\9aà¸\94à¹\89วยการตั้งค่าส่วนบุคคลของผู้ใช้อื่น',
-'customjsprotected' => 'à¸\84ุà¸\93à¹\84มà¹\88มีสิà¸\97à¸\98ิà¹\8cà¹\83à¸\99à¸\81ารà¹\81à¸\81à¹\89à¹\84à¸\82หà¸\99à¹\89า JavaScript à¸«à¸\99à¹\89าà¸\99ีà¹\89 à¹\80à¸\99ืà¹\88อà¸\87à¸\88าà¸\81หà¸\99à¹\89าà¸\99ีà¹\89à¸\9bระà¸\81อà¸\9aà¸\94à¹\89วยการตั้งค่าส่วนบุคคลของผู้ใช้อื่น',
+'customcssprotected' => 'à¸\84ุà¸\93à¹\84มà¹\88มีสิà¸\97à¸\98ิà¹\81à¸\81à¹\89à¹\84à¸\82หà¸\99à¹\89าสà¹\84à¸\95ลà¹\8c CSS à¸\99ีà¹\89 à¹\80à¸\99ืà¹\88อà¸\87à¸\88าà¸\81หà¸\99à¹\89าà¸\99ีà¹\89มีการตั้งค่าส่วนบุคคลของผู้ใช้อื่น',
+'customjsprotected' => 'à¸\84ุà¸\93à¹\84มà¹\88มีสิà¸\97à¸\98ิà¹\81à¸\81à¹\89à¹\84à¸\82หà¸\99à¹\89าà¸\88าวาสà¸\84ริà¸\9bà¸\95à¹\8cà¸\99ีà¹\89 à¹\80à¸\99ืà¹\88อà¸\87à¸\88าà¸\81หà¸\99à¹\89าà¸\99ีà¹\89มีการตั้งค่าส่วนบุคคลของผู้ใช้อื่น',
 'ns-specialprotected' => 'หน้าพิเศษไม่สามารถแก้ไขได้',
-'titleprotected' => "หัวà¹\80รืà¹\88อà¸\87à¸\99ีà¹\89à¹\84à¸\94à¹\89รัà¸\9aà¸\81ารà¸\9bà¹\89อà¸\87à¸\81ัà¸\99à¹\84มà¹\88à¹\83หà¹\89สรà¹\89าà¸\87à¹\83หมà¹\88 โดย [[User:$1|$1]] 
+'titleprotected' => "à¸\8aืà¹\88อà¹\80รืà¹\88อà¸\87à¸\99ีà¹\89à¸\96ูà¸\81à¸\9bà¹\89อà¸\87à¸\81ัà¸\99มิà¹\83หà¹\89สรà¹\89าà¸\87โดย [[User:$1|$1]] 
 เหตุผลที่ให้ไว้ คือ ''$2''",
+'invalidtitle-knownnamespace' => 'ชื่อที่มีเนมสเปซ "$2" กับข้อความ "$3" ไม่ถูกต้อง',
+'invalidtitle-unknownnamespace' => 'ชื่อที่ไม่ทราบเนมสเปซหมายเลข $1 กับข้อความ "$2" ไม่ถูกต้อง',
 'exception-nologin' => 'ไม่ได้ล็อกอิน',
 'exception-nologin-text' => 'หน้าหรือปฏิบัติการนี้กำหนดให้คุณล็อกอินเข้าสู่วิกินี้ก่อน',
 
@@ -590,34 +598,38 @@ $1',
 'virus-unknownscanner' => 'ไม่รู้จักโปรแกรมป้องกันไวรัสตัวนี้:',
 
 # Login and logout pages
-'logouttext' => "'''à¸\82à¸\93ะà¸\99ีà¹\89à¸\84ุà¸\93à¹\84à¸\94à¹\89ลà¹\87อà¸\81à¹\80อาà¸\95à¹\8cออà¸\81à¸\88าà¸\81ระà¸\9aà¸\9a'''
+'logouttext' => "'''à¸\82à¸\93ะà¸\99ีà¹\89à¸\84ุà¸\93à¹\84à¸\94à¹\89ลà¹\87อà¸\81à¹\80อาà¸\95à¹\8cà¹\81ลà¹\89ว'''
 
-คุณสามารถใช้งาน {{SITENAME}} ได้ต่อในฐานะผู้ใช้นิรนาม หรือคุณสามารถ<span class='plainlinks'>[$1 ล็อกอินกลับเข้าไป]</span>ด้วยชื่อผู้ใช้เดิมหรือชื่อผู้ใช้อื่นๆ
-อย่างไรก็ตามอาจจะมีบางหน้าที่ยังแสดงข้อความว่าคุณกำลังล็อกอินอยู่ จนกว่าคุณจะล้างแคชออกจากเว็บเบราว์เซอร์",
+คุณสามารถใช้งาน {{SITENAME}} ต่อในฐานะผู้ใช้นิรนาม หรือคุณสามารถ<span class='plainlinks'>[$1 ล็อกอินกลับเข้าไป]</span>ด้วยชื่อผู้ใช้เดิมหรือชื่อผู้ใช้อื่น
+อย่างไรก็ตามอาจมีบางหน้าที่แสดงผลเสมือนคุณกำลังล็อกอินอยู่ จนกว่าคุณจะล้างแคชเบราว์เซอร์ของคุณ",
+'welcomeuser' => 'ยินดีต้อนรับ $1!',
+'welcomecreation-msg' => 'บัญชีของคุณถูกสร้างขึ้นแล้ว
+อย่าลืมเปลี่ยนแปลง[[Special:Preferences|การตั้งค่าใน {{SITENAME}}]] ของคุณ',
 'yourname' => 'ชื่อผู้ใช้',
 'yourpassword' => 'รหัสผ่าน',
 'yourpasswordagain' => 'พิมพ์รหัสผ่านอีกครั้ง:',
-'remembermypassword' => 'à¸\88ำà¸\89ัà¸\99à¸\88าà¸\81à¹\80à¸\84รืà¹\88อà¸\87à¸\99ีà¹\89 (à¹\80à¸\9bà¹\87à¸\99à¹\80วลาอยà¹\88าà¸\87มาà¸\81 $1 {{PLURAL:$1|วัà¸\99|วัà¸\99}})',
+'remembermypassword' => 'à¸\88ำà¸\81ารลà¹\87อà¸\81อิà¸\99à¸\82อà¸\87à¸\89ัà¸\99à¸\9aà¸\99à¹\80à¸\9aราà¹\80à¸\8bอรà¹\8cà¸\99ีà¹\89 (à¸\99าà¸\99สุà¸\94 $1 à¸§à¸±à¸\99)',
 'securelogin-stick-https' => 'ยังคงเชื่อมต่อกับ HTTPS หลังจากล็อกอิน',
 'yourdomainname' => 'โดเมนของคุณ:',
-'externaldberror' => 'เกิดความผิดพลาดในการระบุตัวตนจากภายนอก หรือคุณไม่มีสิทธิในการแก้ไขบัญชีอื่น',
+'password-change-forbidden' => 'คุณไม่สามารถเปลี่ยนรหัสผ่านบนวิกินี้',
+'externaldberror' => 'มีข้อผิดพลาดของฐานข้อมูลในการพิสูจน์ตัวจริง หรือคุณไม่ได้รับอนุญาตให้ปรับบัญชีภายนอกของคุณ',
 'login' => 'ล็อกอิน',
-'nav-login-createaccount' => 'ล็อกอิน / สร้างบัญชีผู้ใช้',
-'loginprompt' => 'à¸\95à¹\89อà¸\87à¹\80à¸\9bิà¸\94à¹\83à¸\8aà¹\89à¸\84ุà¸\81à¸\81ีà¹\89à¸\81à¹\88อà¸\99à¸\97ีà¹\88à¸\88ะลà¹\87อà¸\81อิà¸\99à¹\80à¸\82à¹\89าสูà¹\88 {{SITENAME}}',
-'userlogin' => 'ล็อกอิน / สร้างบัญชีผู้ใช้',
+'nav-login-createaccount' => 'ล็อกอิน / สร้างบัญชี',
+'loginprompt' => 'ต้องเปิดใช้คุกกี้ก่อนจะล็อกอินเข้าสู่ {{SITENAME}}',
+'userlogin' => 'ล็อกอิน / สร้างบัญชี',
 'userloginnocreate' => 'ล็อกอิน',
 'logout' => 'ล็อกเอาต์',
 'userlogout' => 'ล็อกเอาต์',
 'notloggedin' => 'ไม่ได้ล็อกอิน',
-'nologin' => "ล็อกอินด้านล่างหรือ '''$1'''",
-'nologinlink' => 'สร้างบัญชีผู้ใช้',
-'createaccount' => 'สร้างบัญชีผู้ใช้',
-'gotaccount' => "มีà¸\9aัà¸\8dà¸\8aีà¸\9cูà¹\89à¹\83à¸\8aà¹\89à¹\81ลà¹\89วหรือà¹\84มà¹\88 '''$1'''",
+'nologin' => 'ไม่มีบัญชีหรือ $1',
+'nologinlink' => 'สร้างบัญชี',
+'createaccount' => 'สร้างบัญชี',
+'gotaccount' => "มีà¸\9aัà¸\8dà¸\8aีà¹\81ลà¹\89วà¹\83à¸\8aà¹\88à¹\84หม '''$1'''",
 'gotaccountlink' => 'ล็อกอิน',
-'userlogin-resetlink' => 'ลืมรายละเอียดล็อกอินของคุณ?',
-'createaccountmail' => 'à¸\9cà¹\88าà¸\99à¸\97าà¸\87อีà¹\80มล',
+'userlogin-resetlink' => 'ลืมรายละเอียดล็อกอินของคุณหรือ',
+'createaccountmail' => 'à¹\83à¸\8aà¹\89รหัสà¸\9cà¹\88าà¸\99สุà¹\88มà¸\8aัà¹\88วà¸\84ราวà¹\81ละสà¹\88à¸\87à¹\84à¸\9bยัà¸\87à¸\97ีà¹\88อยูà¹\88อีà¹\80มลà¸\97ีà¹\88ระà¸\9aุà¸\94à¹\89าà¸\99ลà¹\88าà¸\87',
 'createaccountreason' => 'เหตุผล:',
-'badretype' => 'รหัสà¸\9cà¹\88าà¸\99à¸\97ีà¹\88à¹\83สà¹\88à¹\84มà¹\88à¸\96ูà¸\81à¸\95à¹\89อà¸\87',
+'badretype' => 'รหัสà¸\9cà¹\88าà¸\99à¸\97ีà¹\88à¹\83สà¹\88à¹\84มà¹\88à¸\95รà¸\87à¸\81ัà¸\99',
 'userexists' => 'ชื่อผู้ใช้ที่กรอกมีผู้อื่นใช้ไปแล้ว กรุณาเลือกชื่ออื่น',
 'loginerror' => 'ล็อกอินผิดพลาด',
 'createaccounterror' => 'ไม่สามารถสร้างบัญชีผู้ใช้: $1',
@@ -628,50 +640,46 @@ $1',
 'noname' => 'คุณไม่ได้ใส่ชื่อผู้ใช้ที่ถูกต้อง',
 'loginsuccesstitle' => 'ล็อกอินสำเร็จ',
 'loginsuccess' => "'''ขณะนี้คุณล็อกอินเข้าสู่ {{SITENAME}} ด้วยชื่อ \"\$1\"'''",
-'nosuchuser' => 'à¹\84มà¹\88มีà¸\9cูà¹\89à¹\83à¸\8aà¹\89à¸\97ีà¹\88à¸\8aืà¹\88อ "$1"
-อัà¸\81ษรà¹\83หà¸\8dà¹\88à¹\80ลà¹\87à¸\81มีà¸\9cลà¸\95à¹\88อà¸\8aืà¹\88อà¸\9cูà¹\89à¹\83à¸\8aà¹\89
-à¸\81รุà¸\93าà¸\95รวà¸\88à¸\81ารสะà¸\81à¸\94อีà¸\81à¸\84รัà¹\89à¸\87 à¸«à¸£à¸·à¸­[[Special:UserLogin/signup|สรà¹\89าà¸\87à¸\9aัà¸\8dà¸\8aีà¸\9cูà¹\89à¹\83à¸\8aà¹\89à¹\83หมà¹\88]]',
-'nosuchusershort' => 'à¹\84มà¹\88มีà¸\8aืà¹\88อà¸\9cูà¹\89à¹\83à¸\8aà¹\89à¹\83à¸\99ชื่อ "$1" กรุณาตรวจสอบการสะกด',
+'nosuchuser' => 'ไม่มีผู้ใช้ชื่อ "$1"
+à¸\8aืà¹\88อà¸\9cูà¹\89à¹\83à¸\8aà¹\89à¸\99ัà¹\89à¸\99à¹\84วà¸\95à¹\88ออัà¸\81ษรà¹\83หà¸\8dà¹\88à¹\80ลà¹\87à¸\81
+กรุณาตรวจการสะกดอีกครั้ง หรือ[[Special:UserLogin/signup|สร้างบัญชีใหม่]]',
+'nosuchusershort' => 'à¹\84มà¹\88มีà¸\9cูà¹\89à¹\83à¸\8aà¹\89ชื่อ "$1" กรุณาตรวจสอบการสะกด',
 'nouserspecified' => 'คุณต้องระบุชื่อผู้ใช้',
-'login-userblocked' => 'à¸\9cูà¹\89à¹\83à¸\8aà¹\89à¸\99ีà¹\89à¸\96ูà¸\81à¸\9aลà¹\87อà¸\81 à¹\84มà¹\88อà¸\99ุà¸\8dาà¸\95à¹\83หà¹\89à¸\97ำà¸\81ารลà¹\87อà¸\81อิà¸\99',
-'wrongpassword' => 'รหัสà¸\9cà¹\88าà¸\99à¸\97ีà¹\88à¹\83สà¹\88à¹\84มà¹\88à¸\96ูà¸\81à¸\95à¹\89อà¸\87 à¸\81รุà¸\93าลอà¸\87à¹\83หมà¹\88',
-'wrongpasswordempty' => 'ยัà¸\87à¹\84มà¹\88à¹\84à¸\94à¹\89ระà¸\9aุรหัสà¸\9cà¹\88าà¸\99 à¸\81รุà¸\93าลอà¸\87à¹\83หมà¹\88',
-'passwordtooshort' => 'รหัสผ่านต้องมีความยาวอย่างน้อย {{PLURAL:$1|$1 ตัวอักษร}}',
-'password-name-match' => 'รหัสà¸\9cà¹\88าà¸\99à¸\82อà¸\87à¸\84ุà¸\93à¸\95à¹\89อà¸\87à¹\84มà¹\88à¹\80หมือà¸\99à¸\81ัà¸\9aชื่อผู้ใช้ของคุณ',
-'password-login-forbidden' => 'à¸\8aืà¹\88อà¸\9cูà¹\89à¹\83à¸\8aà¹\89à¹\81ละรหัสà¸\9cà¹\88าà¸\99à¸\99ีà¹\89à¸\96ูà¸\81หà¹\89ามมิà¹\83หà¹\89à¹\83à¸\8a้',
+'login-userblocked' => 'ผู้ใช้นี้ถูกบล็อก ไม่อนุญาตให้ล็อกอิน',
+'wrongpassword' => 'รหัสà¸\9cà¹\88าà¸\99à¸\97ีà¹\88à¹\83สà¹\88à¹\84มà¹\88à¸\96ูà¸\81à¸\95à¹\89อà¸\87 à¹\82à¸\9bรà¸\94ลอà¸\87อีà¸\81à¸\84รัà¹\89à¸\87',
+'wrongpasswordempty' => 'ยัà¸\87à¹\84มà¹\88à¹\84à¸\94à¹\89ระà¸\9aุรหัสà¸\9cà¹\88าà¸\99 à¹\82à¸\9bรà¸\94ลอà¸\87อีà¸\81à¸\84รัà¹\89à¸\87',
+'passwordtooshort' => 'รหัสผ่านต้องมีความยาวอย่างน้อย $1 ตัวอักษร',
+'password-name-match' => 'รหัสà¸\9cà¹\88าà¸\99à¸\82อà¸\87à¸\84ุà¸\93à¸\95à¹\89อà¸\87à¸\95à¹\88าà¸\87à¸\88าà¸\81ชื่อผู้ใช้ของคุณ',
+'password-login-forbidden' => 'หà¹\89ามà¹\83à¸\8aà¹\89à¸\8aืà¹\88อà¸\9cูà¹\89à¹\83à¸\8aà¹\89à¹\81ละรหัสà¸\9cà¹\88าà¸\99à¸\99ี้',
 'mailmypassword' => 'อีเมลรหัสผ่านใหม่',
-'passwordremindertitle' => 'คำบอกรหัสผ่านจาก {{SITENAME}}',
-'passwordremindertext' => 'ผู้ใดผู้หนึ่ง (ซึ่งอาจจะเป็นคุณได้ใช้หมายเลขไอพี $1) ขอให้ส่งรหัสผ่านใหม่
-สำหรับการล็อกอินบนเว็บไซต์ {{SITENAME}} ($4) รหัสผ่านชั่วคราวสำหรับชื่อผู้ใช้: "$2"
-คือ "$3" หากคุณได้ทำการร้องขอนี้ เราขอแนะนำให้คุณล็อกอินและเปลี่ยนรหัสผ่านทันที
-รหัสผ่านชั่วคราวของคุณจะหมดอายุใน $5 วัน
-
-หากบุคคลอื่นบุคคลใดขอรหัสผ่านใหม่ หรือหากคุณจำรหัสผ่านเก่าของคุณได้แล้ว
-และไม่ต้องการเปลี่ยนรหัสผ่านใหม่แต่อย่างใด กรุณาเพิกเฉยต่อข้อความนี้ และ
-ใช้รหัสผ่านเดิมต่อไป',
-'noemail' => 'อีเมลไม่ได้ใส่ไว้สำหรับชื่อผู้ใช้ "$1"',
-'noemailcreate' => 'คุณจำเป็นต้องใส่ที่อยู่อีเมลให้ถูกต้อง',
-'passwordsent' => 'รหัสผ่านใหม่ได้ถูกส่งไปที่อีเมลของผู้ใช้ "$1"
-กรุณาล็อกอินหลังจากที่ได้อีเมล',
-'blocked-mailpassword' => 'หมายเลขไอพีของคุณได้ถูกบล็อกจากการแก้ไข ดังนั้นไม่สามารถใช้คำสั่งร้องขอรหัสผ่านได้เพื่อป้องกันปัญหาการก่อกวน',
+'passwordremindertitle' => 'รหัสผ่านชั่วคราวใหม่สำหรับ {{SITENAME}}',
+'passwordremindertext' => 'ผู้ใดผู้หนึ่ง (ซึ่งอาจเป็นคุณ ที่ใช้หมายเลขไอพี $1) ขอให้ส่งรหัสผ่านใหม่ของ {{SITENAME}} ($4) รหัสผ่านชั่วคราวสำหรับชื่อผู้ใช้ "$2" ถูกสร้างขึ้น และกำหนดเป็น "$3" หากเป็นเจตนาของคุณ คุณจำต้องล็อกอินและเลือกรหัสผ่านใหม่ ณ ขณะนี้ รหัสผ่านชั่วคราวของคุณจะหมดอายุใน $5 วัน
+
+หากบุคคลอื่นบุคคลใดขอรหัสผ่านใหม่ หรือหากคุณจำรหัสผ่านของคุณได้แล้ว และไม่ต้องการเปลี่ยนรหัสผ่านใหม่อีกต่อไป คุณอาจละเลยข้อความนี้และใช้รหัสผ่านเดิมของคุณต่อไป',
+'noemail' => 'ไม่มีที่อยู่อีเมลบันทึกไว้สำหรับผู้ใช้ "$1"',
+'noemailcreate' => 'คุณจำต้องใส่ที่อยู่อีเมลให้ถูกต้อง',
+'passwordsent' => 'รหัสผ่านใหม่ได้ถูกส่งไปยังที่อยู่อีเมลที่ลงทะเบียนไว้ของผู้ใช้ "$1"
+กรุณาล็อกอินอีกครั้งหลังจากคุณได้รับอีเมล',
+'blocked-mailpassword' => 'หมายเลขไอพีของคุณถูกบล็อกมิให้แก้ไข ฉะนั้น จึงไม่ได้รับอนุญาตให้ใช้ฟังก์ชันขอกู้รหัสผ่านเพื่อป้องกันการกระทำผิด',
 'eauthentsent' => 'อีเมลยืนยันได้ถูกส่งไปที่อีเมลที่ได้ถูกเสนอ ก่อนที่อีเมลจะถูกส่งไปที่ชื่อบัญชีนั้น คุณต้องปฏิบัติตามคำแนะนำในอีเมลเพื่อยืนยันว่าหมายเลยบัญชีนั้นเป็นของคุณ',
-'throttled-mailpassword' => 'à¸\95ัวà¹\80à¸\95ือà¸\99รหัสà¸\9cà¹\88าà¸\99à¹\84à¸\94à¹\89à¸\96ูà¸\81สà¹\88à¸\87à¹\84à¸\9bà¹\83à¸\99 {{PLURAL:$1|1 à¸\8aัà¹\88วà¹\82มà¸\87à¸\97ีà¹\88à¸\9cà¹\88าà¸\99มา|$1 à¸\8aัà¹\88วà¹\82มà¸\87à¸\97ีà¹\88à¸\9cà¹\88าà¸\99มา}} à¸\8bึà¹\88à¸\87à¸\95ัวà¹\80à¸\95ือà¸\99รหัสà¸\9cà¹\88าà¸\99à¸\99ีà¹\89à¸\88ะà¸\96ูà¸\81สà¹\88à¸\87à¹\84à¸\94à¹\89หà¸\99ึà¹\88à¸\87à¸\84รัà¹\89à¸\87à¸\95à¹\88อ {{PLURAL:$1|1 à¸\8aัà¹\88วà¹\82มà¸\87|$1 à¸\8aัà¹\88วà¹\82มà¸\87}} à¹\80à¸\97à¹\88าà¸\99ัà¹\89à¸\99 à¹\80à¸\9eืà¹\88อà¸\9bà¹\89อà¸\87à¸\81ัà¸\99à¸\9bัà¸\8dหาà¸\81ารà¸\81à¹\88อà¸\81วà¸\99',
+'throttled-mailpassword' => 'à¸\95ัวà¹\80à¸\95ือà¸\99รหัสà¸\9cà¹\88าà¸\99à¹\84à¸\94à¹\89à¸\96ูà¸\81สà¹\88à¸\87à¹\84à¸\9bà¹\81ลà¹\89วà¹\83à¸\99 $1 à¸\8aัà¹\88วà¹\82มà¸\87à¸\97ีà¹\88à¸\9cà¹\88าà¸\99มา à¸\95ัวà¹\80à¸\95ือà¸\99รหัสà¸\9cà¹\88าà¸\99à¸\99ีà¹\89à¸\88ะà¸\96ูà¸\81สà¹\88à¸\87à¹\84à¸\94à¹\89หà¸\99ึà¹\88à¸\87à¸\84รัà¹\89à¸\87à¸\95à¹\88อ $1 à¸\8aัà¹\88วà¹\82มà¸\87à¹\80à¸\97à¹\88าà¸\99ัà¹\89à¸\99 à¹\80à¸\9eืà¹\88อà¸\9bà¹\89อà¸\87à¸\81ัà¸\99à¸\81ารà¸\81ระà¸\97ำà¸\9cิà¸\94',
 'mailerror' => 'ไม่สามารถส่งอีเมลเนื่องจาก $1',
-'acct_creation_throttle_hit' => 'à¸\9cูà¹\89à¹\80à¸\82à¹\89าà¸\8aมà¸\97ีà¹\88à¹\83à¸\8aà¹\89หมายà¹\80ลà¸\82à¹\84อà¸\9eีà¸\82อà¸\87à¸\84ุà¸\93à¹\83à¸\99วิà¸\81ิà¸\99ีà¹\89 à¹\84à¸\94à¹\89สรà¹\89าà¸\87à¸\8aืà¹\88อà¸\9aัà¸\8dà¸\8aีà¹\84วà¹\89à¹\81ลà¹\89ว {{PLURAL:$1|1 à¸\9aัà¸\8dà¸\8aี|$1 à¸\9aัà¸\8dà¸\8aี}} ในวันที่ผ่านมา ซึ่งเป็นจำนวนมากที่สุดที่อนุญาตในช่วงเวลาดังกล่าว
-à¸\88ึà¸\87สà¹\88à¸\87à¸\9cลà¹\83หà¹\89à¸\9cูà¹\89à¹\80à¸\82à¹\89าà¸\8aมà¸\97ีà¹\88à¹\83à¸\8aà¹\89หมายà¹\80ลà¸\82à¹\84อà¸\9eีà¸\99ีà¹\89 à¸\88ะà¹\84มà¹\88สามารà¸\96สรà¹\89าà¸\87à¸\9aัà¸\8dà¸\8aีà¸\9cูà¹\89à¹\83à¸\8aà¹\89à¹\84à¸\94à¹\89อีà¸\81à¹\83à¸\99à¸\95อà¸\99นี้',
+'acct_creation_throttle_hit' => 'à¸\9cูà¹\89à¹\80à¸\82à¹\89าà¸\8aมà¸\97ีà¹\88à¹\83à¸\8aà¹\89หมายà¹\80ลà¸\82à¹\84อà¸\9eีà¸\82อà¸\87à¸\84ุà¸\93à¹\83à¸\99วิà¸\81ิà¸\99ีà¹\89 à¹\84à¸\94à¹\89สรà¹\89าà¸\87à¸\8aืà¹\88อà¸\9aัà¸\8dà¸\8aีà¹\81ลà¹\89ว $1 à¸\9aัà¸\8dà¸\8aีในวันที่ผ่านมา ซึ่งเป็นจำนวนมากที่สุดที่อนุญาตในช่วงเวลาดังกล่าว
+à¸\88ึà¸\87สà¹\88à¸\87à¸\9cลà¹\83หà¹\89à¸\9cูà¹\89à¹\80à¸\82à¹\89าà¸\8aมà¸\97ีà¹\88à¹\83à¸\8aà¹\89หมายà¹\80ลà¸\82à¹\84อà¸\9eีà¸\99ีà¹\89 à¹\84มà¹\88สามารà¸\96สรà¹\89าà¸\87à¸\9aัà¸\8dà¸\8aีà¹\84à¸\94à¹\89อีà¸\81à¹\83à¸\99à¸\82à¸\93ะนี้',
 'emailauthenticated' => 'อีเมลของคุณได้รับการรับรอง ณ วันที่ $2 เวลา $3',
 'emailnotauthenticated' => 'อีเมลของคุณยังไม่ได้ถูกยืนยัน ดังนั้นคำสั่งพิเศษที่ใช้งานผ่านอีเมลยังไม่เปิดใช้งาน',
-'noemailprefs' => 'รัà¸\9aอีà¹\80มลà¸\95ามà¹\80à¸\87ืà¹\88อà¸\99à¹\84à¸\82à¸\9eิà¹\80ศษà¸\95à¹\88อà¹\84à¸\9bà¸\99ี้',
+'noemailprefs' => 'ระà¸\9aุà¸\97ีà¹\88อยูà¹\88อีà¹\80มลà¹\83à¸\99à¸\81ารà¸\95ัà¹\89à¸\87à¸\84à¹\88าà¸\82อà¸\87à¸\84ุà¸\93à¹\80à¸\9eืà¹\88อà¹\83หà¹\89à¸\84ุà¸\93ลัà¸\81ษà¸\93ะà¹\80หลà¹\88าà¸\99ีà¹\89à¸\97ำà¸\87าà¸\99à¹\84à¸\94้',
 'emailconfirmlink' => 'ยืนยันอีเมลของคุณ',
-'invalidemailaddress' => 'รูปแบบอีเมลที่คุณใส่ไม่ถูกต้อง กรุณาใส่อีเมลให้ถูกต้องตามรูปแบบ
-หรือไม่ต้องใส่ข้อความอะไรลงไปเลยในช่องนี้',
-'cannotchangeemail' => 'ที่อยู่อีเมลที่ใช้งานกับบัญชีไม่สามารถเปลี่ยนได้ในสารานุกรมนี้',
+'invalidemailaddress' => 'ไม่สามารถรับที่อยู่อีเมลได้ เพราะดูมีรูปแบบไม่ถูกต้อง
+โปรดใส่ที่อยู่ให้มีรูปแบบถูกต้อง หรือเว้นช่องนั้น',
+'cannotchangeemail' => 'ไม่สามารถเปลี่ยนที่อยู่อีเมลบนวิกินี้',
+'emaildisabled' => 'เว็บไซต์นี้ไม่สามารถส่งอีเมล',
 'accountcreated' => 'ชื่อบัญชีได้ถูกสร้างขึ้น',
 'accountcreatedtext' => 'ชื่อบัญชีสำหรับ $1 ได้ถูกสร้างขึ้นแล้ว',
-'createaccount-title' => 'สรà¹\89าà¸\87à¸\9aัà¸\8dà¸\8aีà¸\9cูà¹\89à¹\83à¸\8aà¹\89สำหรัà¸\9a {{SITENAME}}',
-'createaccount-text' => 'มีà¹\83à¸\84รà¸\9aาà¸\87à¸\84à¸\99สรà¹\89าà¸\87à¸\9aัà¸\8dà¸\8aีà¸\9cูà¹\89à¹\83à¸\8aà¹\89สำหรัà¸\9aà¸\97ีà¹\88อยูà¹\88อีà¹\80มลà¸\82อà¸\87à¸\84ุà¸\93à¹\84วà¹\89à¸\9aà¸\99 {{SITENAME}} ($4) à¹\82à¸\94ยà¹\83à¸\8aà¹\89à¸\8aืà¹\88อà¸\9aัà¸\8dà¸\8aีà¸\9cูà¹\89à¹\83à¸\8aà¹\89 "$2" à¹\81ละรหัสà¸\9cà¹\88าà¸\99 "$3" à¸\84ุà¸\93à¸\84วรลà¹\87อà¸\81อิà¸\99à¹\80à¸\9eืà¹\88อà¹\80à¸\9bลีà¹\88ยà¸\99รหัสà¸\9cà¹\88าà¸\99à¹\82à¸\94ยทันที
+'createaccount-title' => 'สร้างบัญชีสำหรับ {{SITENAME}}',
+'createaccount-text' => 'มีà¸\9aาà¸\87à¸\84à¸\99สรà¹\89าà¸\87à¸\9aัà¸\8dà¸\8aีสำหรัà¸\9aà¸\97ีà¹\88อยูà¹\88อีà¹\80มลà¸\82อà¸\87à¸\84ุà¸\93à¹\84วà¹\89à¸\9aà¸\99 {{SITENAME}} ($4) à¹\82à¸\94ยà¹\83à¸\8aà¹\89à¸\8aืà¹\88อà¸\9aัà¸\8dà¸\8aีà¸\9cูà¹\89à¹\83à¸\8aà¹\89 "$2" à¹\81ละรหัสà¸\9cà¹\88าà¸\99 "$3" à¸\84ุà¸\93à¸\84วรลà¹\87อà¸\81อิà¸\99à¹\80à¸\9eืà¹\88อà¹\80à¸\9bลีà¹\88ยà¸\99รหัสà¸\9cà¹\88าà¸\99ทันที
 
-à¸\82à¹\89อà¸\84วามà¸\99ีà¹\89อาà¸\88à¸\88ะà¹\84มà¹\88สำà¸\84ัà¸\8dสำหรัà¸\9aà¸\84ุà¸\93 à¸«à¸²à¸\81à¸\81ารสรà¹\89าà¸\87à¸\9aัà¸\8dà¸\8aีà¸\9cูà¹\89à¹\83à¸\8aà¹\89นี้เกิดจากความผิดพลาด',
+à¸\84ุà¸\93อาà¸\88à¹\80à¸\9eิà¸\81à¹\80à¸\89ยà¸\82à¹\89อà¸\84วามà¸\99ีà¹\89 à¸«à¸²à¸\81à¸\81ารสรà¹\89าà¸\87à¸\9aัà¸\8dà¸\8aีนี้เกิดจากความผิดพลาด',
 'usernamehasherror' => 'ในชื่อผู้ใช้ต้องไม่มีตัวอักษร "#"',
 'login-throttled' => 'คุณได้พยายามล็อกอินมากครั้งเกินไป
 กรุณารอสักครู่แล้วลองใหม่อีกครั้ง',
@@ -680,12 +688,12 @@ $1',
 'suspicious-userlogout' => 'คำขอของคุณเพื่อออกจากระบบถูกปฏิเสธ เพราะดูเหมือนว่าจะส่งมาจากเบราว์เซอร์หรือพร็อกซี่แคชที่เสีย',
 
 # E-mail sending
-'php-mail-error-unknown' => 'à¸\82à¹\89อà¸\9cิà¸\94à¸\9eลาà¸\94à¸\97ีà¹\88à¹\84มà¹\88รูà¹\89à¸\88ัà¸\81à¹\83à¸\99à¸\9fัà¸\87à¸\81à¹\8cà¸\8aัà¸\99 mail() à¸\82อà¸\87 PHP',
+'php-mail-error-unknown' => 'à¸\82à¹\89อà¸\9cิà¸\94à¸\9eลาà¸\94à¹\84มà¹\88à¸\97ราà¸\9aสาà¹\80หà¸\95ุà¹\83à¸\99à¸\9fัà¸\87à¸\81à¹\8cà¸\8aัà¸\99 mail() à¸\82อà¸\87à¸\9eีà¹\80อà¸\8aà¸\9eี',
 'user-mail-no-addy' => 'พยายามส่งอีเมลโดยไม่มีที่อยู่อีเมล',
 
 # Change password dialog
 'resetpass' => 'เปลี่ยนรหัสผ่าน',
-'resetpass_announce' => 'à¸\84ุà¸\93ลà¹\87อà¸\81อิà¸\99à¸\9cà¹\88าà¸\99รหัสอีà¹\80มลà¸\8aัà¹\88วà¸\84ราว à¸\84ุà¸\93à¸\95à¹\89อà¸\87à¹\83สà¹\88à¸\84à¹\88ารหัสà¸\9cà¹\88าà¸\99à¹\83หมà¹\88à¹\80à¸\9eืà¹\88อเสร็จสิ้นขั้นตอนการล็อกอิน:',
+'resetpass_announce' => 'à¸\84ุà¸\93à¹\83à¸\8aà¹\89รหัสอีà¹\80มลà¸\8aัà¹\88วà¸\84ราวลà¹\87อà¸\81อิà¸\99 à¸\84ุà¸\93à¸\95à¹\89อà¸\87à¸\81ำหà¸\99à¸\94รหัสà¸\9cà¹\88าà¸\99à¹\83หมà¹\88à¸\95รà¸\87à¸\99ีà¹\89 à¸\88ึà¸\87à¸\88ะเสร็จสิ้นขั้นตอนการล็อกอิน:',
 'resetpass_text' => '<!-- เพิ่มข้อความที่นี่ -->',
 'resetpass_header' => 'เปลี่ยนรหัสผ่าน',
 'oldpassword' => 'รหัสผ่านเดิม:',
@@ -694,7 +702,7 @@ $1',
 'resetpass_submit' => 'ตั้งรหัสผ่านและล็อกอิน',
 'resetpass_success' => 'เปลี่ยนรหัสผ่านของคุณเรียบร้อย ขณะนี้กำลังล็อกอินให้คุณ...',
 'resetpass_forbidden' => 'ไม่สามารถเปลี่ยนรหัสผ่านได้',
-'resetpass-no-info' => 'à¸\84ุà¸\93à¸\95à¹\89อà¸\87ลà¹\87อà¸\81อิà¸\99à¹\80à¸\9eืà¹\88อà¸\97ีà¹\88à¸\88ะà¹\80à¸\82à¹\89าà¸\96ึà¸\87หà¸\99à¹\89าà¸\99ีà¹\89à¹\82à¸\94ยà¸\95รà¸\87',
+'resetpass-no-info' => 'คุณต้องล็อกอินเพื่อเข้าถึงหน้านี้โดยตรง',
 'resetpass-submit-loggedin' => 'เปลี่ยนรหัสผ่าน',
 'resetpass-submit-cancel' => 'ยกเลิก',
 'resetpass-wrong-oldpass' => 'รหัสผ่านชั่วคราวหรือปัจจุบันไม่ถูกต้อง
@@ -702,24 +710,27 @@ $1',
 'resetpass-temp-password' => 'รหัสผ่านชั่วคราว:',
 
 # Special:PasswordReset
-'passwordreset' => 'ล้างรหัสผ่าน',
+'passwordreset' => 'ตั้งรหัสผ่านใหม่',
+'passwordreset-text' => 'กรอกแบบนี้เพื่อรับตัวเตือนอีเมลของรายละเอียดบัญชีของคุณ',
 'passwordreset-legend' => 'เปลี่ยนรหัสผ่าน',
-'passwordreset-disabled' => 'à¸\81ารà¹\80à¸\9bลีà¹\88ยà¸\99รหัสà¸\9cà¹\88าà¸\99à¹\84มà¹\88สามารà¸\96à¸\97ำà¹\84à¸\94à¹\89à¹\83นวิกินี้',
+'passwordreset-disabled' => 'à¸\81ารà¸\95ัà¹\89à¸\87รหัสà¸\9cà¹\88าà¸\99à¹\83หมà¹\88à¸\9bิà¸\94à¹\83à¸\8aà¹\89à¸\87าà¸\99à¸\9aนวิกินี้',
 'passwordreset-username' => 'ชื่อผู้ใช้:',
 'passwordreset-domain' => 'โดเมน:',
 'passwordreset-email' => 'ที่อยู่อีเมล:',
 'passwordreset-emailtitle' => 'รายละเอียดบัญชีบน {{SITENAME}}',
 'passwordreset-emailelement' => 'ชื่อผู้ใช้: $1
 รหัสผ่านชั่วคราว: $2',
-'passwordreset-emailsent' => 'อีà¹\80มลà¹\8cà¹\81à¸\88à¹\89à¸\87à¹\80à¸\95ือà¸\99à¹\84à¸\94à¹\89à¸\96ูà¸\81สà¹\88à¸\87à¹\84à¸\9bà¹\81ลà¹\89ว',
+'passwordreset-emailsent' => 'อีเมลแจ้งเตือนได้ถูกส่งไปแล้ว',
 
 # Special:ChangeEmail
 'changeemail' => 'เปลี่ยนที่อยู่อีเมล',
-'changeemail-header' => 'เปลี่ยนที่อยู่อีเมลของบัญชีผู้ใช้',
-'changeemail-no-info' => 'คุณจำเป็นต้องเข้าสู่ระบบเพื่อเข้าถึงหน้านี้โดยตรง',
+'changeemail-header' => 'เปลี่ยนที่อยู่อีเมลของบัญชี',
+'changeemail-text' => 'กรอกแบบนี้เพื่อเปลี่ยนที่อยู่อีเมลของคุณ คุณต้องกรอกรหัสผ่านเพื่อยืนยันการเปลี่ยนแปลงนี้',
+'changeemail-no-info' => 'คุณจำต้องล็อกอินเพื่อเข้าถึงหน้านี้โดยตรง',
 'changeemail-oldemail' => 'ที่อยู่อีเมลปัจจุบัน:',
 'changeemail-newemail' => 'ที่อยู่อีเมลใหม่:',
 'changeemail-none' => '(ไม่มี)',
+'changeemail-password' => 'รหัสผ่าน{{SITENAME}}ของคุณ:',
 'changeemail-submit' => 'เปลี่ยนอีเมล',
 'changeemail-cancel' => 'ยกเลิก',
 
@@ -731,16 +742,16 @@ $1',
 'link_sample' => 'ลิงก์เชื่อมโยง',
 'link_tip' => 'ลิงก์ภายในเว็บ',
 'extlink_sample' => 'http://www.example.com ชื่อคำอธิบายลิงก์',
-'extlink_tip' => 'ลิà¸\87à¸\81à¹\8cà¹\84à¸\9bà¸\97ีà¹\88อืà¹\88à¸\99 (อย่าลืมใส่ http:// นำหน้าเสมอ)',
+'extlink_tip' => 'ลิà¸\87à¸\81à¹\8cภายà¸\99อà¸\81 (อย่าลืมใส่ http:// นำหน้าเสมอ)',
 'headline_sample' => 'หัวข้อ',
 'headline_tip' => 'หัวข้อ',
 'nowiki_sample' => 'ใส่ข้อความที่ไม่จัดรูปแบบ',
 'nowiki_tip' => 'ข้ามการจัดรูปแบบวิกิ',
 'image_sample' => 'ตัวอย่าง.jpg',
-'image_tip' => 'à¹\83สà¹\88ภาà¸\9e',
+'image_tip' => 'à¹\83สà¹\88à¹\84à¸\9fลà¹\8c',
 'media_sample' => 'ตัวอย่าง.ogg',
 'media_tip' => 'เชื่อมโยงไฟล์สื่อ',
-'sig_tip' => 'ลายà¹\80à¸\8bà¹\87à¸\99à¸\9eรà¹\89อมลà¸\87เวลา',
+'sig_tip' => 'ลายà¹\80à¸\8bà¹\87à¸\99à¸\82อà¸\87à¸\84ุà¸\93à¸\9eรà¹\89อมà¸\95ราเวลา',
 'hr_tip' => 'เส้นนอน',
 
 # Edit pages
@@ -749,29 +760,31 @@ $1',
 'minoredit' => 'เป็นการแก้ไขเล็กน้อย',
 'watchthis' => 'เฝ้าดูหน้านี้',
 'savearticle' => 'บันทึก',
-'preview' => 'à¹\81สà¸\94à¸\87à¸\95ัวอยà¹\88าà¸\87',
+'preview' => 'ตัวอย่าง',
 'showpreview' => 'แสดงตัวอย่าง',
 'showlivepreview' => 'แสดงตัวอย่างทันที',
 'showdiff' => 'แสดงความเปลี่ยนแปลง',
-'anoneditwarning' => "'''à¸\84ำà¹\80à¸\95ือà¸\99:''' à¸«à¸¡à¸²à¸¢à¹\80ลà¸\82à¹\84อà¸\9eีà¸\82อà¸\87à¸\84ุà¸\93à¸\88ะà¸\96ูà¸\81à¹\80à¸\81à¹\87à¸\9aà¹\84วà¹\89à¹\83à¸\99สà¹\88วà¸\99à¸\9bระวัà¸\95ิà¸\82อà¸\87หà¸\99à¹\89าà¸\99ีà¹\89à¹\80à¸\99ืà¹\88อà¸\87à¸\88าà¸\81à¸\84ุà¸\93à¹\84มà¹\88à¹\84à¸\94à¹\89ลà¹\87อà¸\81อิà¸\99",
-'anonpreviewwarning' => 'คุณยังไม่ได้ล็อกอิน การบันทึกจะเก็บเลขที่อยู่ไอพีของคุณไว้ในประวัติของหน้านี้',
+'anoneditwarning' => "'''à¸\84ำà¹\80à¸\95ือà¸\99:''' à¸\84ุà¸\93มิà¹\84à¸\94à¹\89ลà¹\87อà¸\81อิà¸\99 à¸\97ีà¹\88อยูà¹\88à¹\84อà¸\9eีà¸\82อà¸\87à¸\84ุà¸\93à¸\88ะà¸\96ูà¸\81à¸\9aัà¸\99à¸\97ึà¸\81à¹\84วà¹\89à¹\83à¸\99à¸\9bระวัà¸\95ิà¸\81ารà¹\81à¸\81à¹\89à¹\84à¸\82à¸\82อà¸\87หà¸\99à¹\89าà¸\99ีà¹\89",
+'anonpreviewwarning' => "'''คุณมิได้ล็อกอิน การบันทึกจะเก็บที่อยู่ไอพีของคุณในประวัติการแก้ไขของหน้านี้'''",
 'missingsummary' => "'''อย่าลืม:''' คุณยังไม่ได้ระบุคำอธิบายการแก้ไขครั้งนี้ ถ้าคุณกดบันทึกไปส่วนคำอธิบายการแก้ไขนั้นจะว่างและไม่แสดงผล",
 'missingcommenttext' => 'กรุณาใส่ความเห็นด้านล่าง',
-'missingcommentheader' => "'''อยà¹\88าลืม:''' à¸\84ุà¸\93ยัà¸\87à¹\84มà¹\88à¹\84à¸\94à¹\89à¹\83สà¹\88หัวà¸\82à¹\89อ/à¸\88à¹\88าหัวสำหรัà¸\9aà¸\84วามà¹\80หà¹\87à¸\99à¹\83à¸\99à¸\84รัà¹\89à¸\87à¸\99ีà¹\89 à¸\96à¹\89าà¸\84ุà¸\93à¸\81à¸\94 {{int:savearticle}} à¸­à¸µà¸\81à¸\84รัà¹\89à¸\87หà¸\99ึà¹\88à¸\87 à¸\81ารà¹\81à¸\81à¹\89à¹\84à¸\82à¸\82อà¸\87à¸\84ุà¸\93à¸\88ะไม่มีหัวข้อ",
+'missingcommentheader' => "'''à¸\9bระà¸\81าศà¹\80à¸\95ือà¸\99:''' à¸\84ุà¸\93ยัà¸\87à¹\84มà¹\88à¹\84à¸\94à¹\89à¹\83สà¹\88หัวà¸\82à¹\89อ/à¸\88à¹\88าหัวสำหรัà¸\9aà¸\84วามà¹\80หà¹\87à¸\99à¸\99ีà¹\89 à¸\96à¹\89าà¸\84ุà¸\93à¸\81à¸\94 \"{{int:savearticle}}\" à¸­à¸µà¸\81à¸\84รัà¹\89à¸\87 à¸\81ารà¹\81à¸\81à¹\89à¹\84à¸\82à¸\82อà¸\87à¸\84ุà¸\93à¸\88ะà¸\96ูà¸\81à¸\9aัà¸\99à¸\97ึà¸\81à¹\82à¸\94ยไม่มีหัวข้อ",
 'summary-preview' => 'ตัวอย่างคำอธิบายการแก้ไข:',
 'subject-preview' => 'ตัวอย่างหัวข้อ:',
-'blockedtitle' => 'à¸\9cูà¹\89à¹\83à¸\8aà¹\89à¸\96ูà¸\81หà¹\89ามà¹\83à¸\8aà¹\89à¸\87าà¸\99',
-'blockedtext' => "'''ชื่อผู้ใช้หรือหมายเลขไอพีถูกของคุณถูกบล็อกการใช้งาน'''
+'blockedtitle' => 'à¸\9cูà¹\89à¹\83à¸\8aà¹\89à¸\96ูà¸\81à¸\9aลà¹\87อà¸\81',
+'blockedtext' => "'''ชื่อผู้ใช้หรือหมายเลขไอพีถูกของคุณถูกบล็อก'''
 
-$1 เป็นผู้ดำเนินการบล็อกในครั้งนี้ โดยให้เหตุผลไว้ว่า ''$2''
+$1 เป็นผู้ดำเนินการบล็อก 
+โดยให้เหตุผลว่า ''$2''
 
 * เริ่มการบล็อก: $8
-* à¸ªà¸´à¹\89à¸\99สุà¸\94การบล็อก: $6
+* à¸«à¸¡à¸\94à¹\80à¸\82à¸\95การบล็อก: $6
 * ผู้ถูกบล็อก: $7
 
-คุณสามารถติดต่อ $1 หรือ [[{{MediaWiki:Grouppage-sysop}}|ผู้ดูแลระบบ]]คนอื่นเพื่อหารือเกี่ยวกับการบล็อกนี้ หรือสามารถที่จะอีเมลผ่านระบบวิกิด้วยคำสั่ง 'อีเมลหาผู้ใช้นี้'
-(ถ้าคุณได้ตั้งค่ารองรับการใช้คำสั่งพิเศษผ่านทางอีเมลในส่วน [[Special:Preferences|การตั้งค่าผู้ใช้]] และคุณไม่ได้ถูกบล็อกจากการใช้คำสั่งนี้)
-หมายเลขไอพีปัจจุบันของคุณคือ $3 และหมายเลขการบล็อกคือ #$5 กรุณาระบุหมายเลขเหล่านี้ในการติดต่อผู้ดูแล",
+คุณสามารถติดต่อ $1 หรือ[[{{MediaWiki:Grouppage-sysop}}|ผู้ดูแลระบบ]]คนอื่นเพื่อหารือเกี่ยวกับการบล็อกนี้ 
+คุณไม่สามารถใช้คุณลักษณะ 'ส่งอีเมลหาผู้ใช้รายนี้ได้' จนกว่าจะระบุที่อยู่อีเมลที่ถูกต้องใน[[Special:Preferences|การตั้งค่าบัญชี]]ของคุณ และคุณมิได้ถูกบล็อกมิให้ใช้
+
+หมายเลขไอพีปัจจุบันของคุณคือ $3 และหมายเลขการบล็อกคือ #$5 กรุณาระบุหมายเลขเหล่านี้ในการติดต่อใด ๆ",
 'autoblockedtext' => 'หมายเลขไอพีของคุณถูกบล็อกโดยอัตโนมัติ เนื่องจากมีผู้ใช้อื่นใช้งานผ่านหมายเลขไอพีนี้มาก่อน ซึ่งถูกบล็อกโดย $1
 เหตุผลที่ให้ไว้ในการบล็อกคือ:
 
@@ -788,54 +801,56 @@ $1 เป็นผู้ดำเนินการบล็อกในคร
 หมายเลขไอพีปัจจุบันของคุณคือ $3 หมายเลขการบล็อกคือ #$5
 กรุณาระบุรายละเอียดทั้งหมดข้างต้นในการร้องขอใดๆ ที่คุณกระทำ',
 'blockednoreason' => 'ไม่ได้ให้เหตุผลไว้',
-'whitelistedittext' => 'คุณต้อง $1 เพื่อทำการแก้ไข',
-'confirmedittext' => 'à¹\84มà¹\88อà¸\99ุà¸\8dาà¸\95à¹\83หà¹\89à¹\81à¸\81à¹\89à¹\84à¸\82à¸\96à¹\89าà¹\84มà¹\88à¹\84à¸\94à¹\89à¸\97ำà¸\81ารยืà¸\99ยัà¸\99อีà¹\80มล à¸\81รุà¸\93ายืà¸\99ยัà¸\99อีà¹\80มลà¸\9cà¹\88าà¸\99à¸\97าà¸\87 [[Special:Preferences|การตั้งค่าผู้ใช้]]',
+'whitelistedittext' => 'คุณต้อง$1เพื่อทำการแก้ไขหน้า',
+'confirmedittext' => 'à¸\84ุà¸\93à¸\95à¹\89อà¸\87ยืà¸\99ยัà¸\99à¸\97ีà¹\88อยูà¹\88อีà¹\80มลà¸\82อà¸\87à¸\84ุà¸\93à¸\81à¹\88อà¸\99à¹\81à¸\81à¹\89à¹\84à¸\82หà¸\99à¹\89า à¹\82à¸\9bรà¸\94à¸\81ำหà¸\99à¸\94à¸\97ีà¹\88อยูà¹\88อีà¹\80มลà¸\82อà¸\87à¸\84ุà¸\93à¹\81ละà¸\97ำà¹\83หà¹\89à¸\96ูà¸\81à¸\95à¹\89อà¸\87à¸\9cà¹\88าà¸\99[[Special:Preferences|การตั้งค่าผู้ใช้]]',
 'nosuchsectiontitle' => 'ไม่พบหัวข้อย่อย',
-'nosuchsectiontext' => 'à¸\84ุà¸\93à¸\9eยายามà¹\81à¸\81à¹\89à¹\84à¸\82หัวà¸\82à¹\89อยà¹\88อยà¸\97ีà¹\88à¹\84มà¹\88มีอยูà¹\88à¹\81ลà¹\89วà¹\83à¸\99à¸\82à¸\93ะà¸\99ีà¹\89 à¸«à¸±à¸§à¸\82à¹\89อยà¹\88อยà¸\94ัà¸\87à¸\81ลà¹\88าวอาà¸\88à¸\96ูà¸\81ยà¹\89ายหรือลà¸\9aà¹\83à¸\99à¸\82à¸\93ะà¸\97ีà¹\88à¸\84ุà¸\93à¸\94ูหà¸\99à¹\89าà¹\80วà¹\87à¸\9aอยู่',
+'nosuchsectiontext' => 'à¸\84ุà¸\93à¸\9eยายามà¹\81à¸\81à¹\89à¹\84à¸\82à¸\95อà¸\99à¸\97ีà¹\88à¹\84มà¹\88มีอยูà¹\88 à¸\95อà¸\99à¸\94ัà¸\87à¸\81ลà¹\88าวอาà¸\88à¸\96ูà¸\81ยà¹\89ายหรือลà¸\9aà¸\82à¸\93ะà¸\97ีà¹\88à¸\84ุà¸\93à¸\94ูหà¸\99à¹\89าอยู่',
 'loginreqtitle' => 'จำเป็นต้องล็อกอิน',
 'loginreqlink' => 'ล็อกอิน',
-'loginreqpagetext' => 'à¸\96à¹\89าà¸\95à¹\89อà¸\87à¸\81ารà¸\94ูหà¸\99à¹\89าอืà¹\88à¸\99 à¸\84ุà¸\93à¸\95à¹\89อà¸\87 $1',
+'loginreqpagetext' => 'à¸\84ุà¸\93à¸\95à¹\89อà¸\87$1à¹\80à¸\9eืà¹\88อà¸\94ูหà¸\99à¹\89าอืà¹\88à¸\99',
 'accmailtitle' => 'ส่งรหัสผ่านแล้ว',
-'accmailtext' => "มีà¸\81ารสรà¹\89าà¸\87รหัสà¸\9cà¹\88าà¸\99à¹\81à¸\9aà¸\9aสุà¹\88มà¹\83หà¹\89à¸\81ัà¸\9a [[User talk:$1|$1]] à¹\82à¸\94ยรหัสà¸\9cà¹\88าà¸\99à¹\84à¸\94à¹\89รัà¸\9aà¸\81ารà¸\88ัà¸\94สà¹\88à¸\87à¹\84à¸\9bà¸\97ีà¹\88 $2
+'accmailtext' => "มีการสร้างรหัสผ่านแบบสุ่มให้กับ [[User talk:$1|$1]] โดยจัดส่งไปที่ $2
 
-สามารà¸\96à¹\80à¸\9bลีà¹\88ยà¸\99รหัสà¸\9cà¹\88าà¸\99à¸\82อà¸\87à¸\9aัà¸\8dà¸\8aีà¸\9cูà¹\89à¹\83à¸\8aà¹\89à¹\83หมà¹\88à¸\99ีà¹\89à¹\83à¸\99หà¸\99à¹\89า''[[Special:ChangePassword|à¹\80à¸\9bลีà¹\88ยà¸\99รหัสà¸\9cà¹\88าà¸\99]]'' à¸«à¸¥à¸±à¸\87à¸\88าà¸\81à¸\97ีà¹\88ล็อกอินแล้ว",
+สามารà¸\96à¹\80à¸\9bลีà¹\88ยà¸\99รหัสà¸\9cà¹\88าà¸\99à¸\82อà¸\87à¸\9aัà¸\8dà¸\8aีà¹\83หมà¹\88à¸\99ีà¹\89à¹\83à¸\99หà¸\99à¹\89า''[[Special:ChangePassword|à¹\80à¸\9bลีà¹\88ยà¸\99รหัสà¸\9cà¹\88าà¸\99]]'' à¸«à¸¥à¸±à¸\87ล็อกอินแล้ว",
 'newarticle' => '(ใหม่)',
-'newarticletext' => 'หน้านี้ยังไม่มีข้อความใด สามารถเริ่มสร้างหน้านี้โดยการพิมพ์ข้อความลงในกล่องด้านล่าง
-(ดูเพิ่มเติมที่ [[{{MediaWiki:Helppage}}|หน้าคำอธิบาย]])
-à¸\96à¹\89าà¹\84มà¹\88à¸\95à¹\89อà¸\87à¸\81ารสรà¹\89าà¸\87à¹\83หà¹\89à¸\81à¸\94à¸\9bุà¹\88ม à¸\96อยหลัà¸\87 (back) à¸\97ีà¹\88à¹\80วà¹\87à¸\9aà¹\80à¸\9aราวà¹\8cà¹\80à¸\8bอรà¹\8c',
+'newarticletext' => "คุณตามลิงก์ไปยังหน้าที่ยังไม่มีในขณะนี้
+ในการสร้างหน้า เริ่มพิมพ์ในกล่องด้านล่าง (ดูข้อมูลเพิ่มเติมใน[[{{MediaWiki:Helppage}}|หน้าคำอธิบาย]])
+à¸\96à¹\89าà¸\84ุà¸\93มาà¹\82à¸\94ยอุà¸\9aัà¸\95ิà¹\80หà¸\95ุ à¹\83หà¹\89à¸\81à¸\94'''à¸\96อยหลัà¸\87''' (back) à¸\97ีà¹\88à¹\80à¸\9aราวà¹\8cà¹\80à¸\8bอรà¹\8c",
 'anontalkpagetext' => "----''หน้านี้เป็นหน้าพูดคุยสำหรับผู้ใช้นิรนาม ซึ่งยังไม่ได้สร้างบัญชีผู้ใช้
 โดยทางเราจำเป็นต้องระบุตัวตนผ่านทางหมายเลขไอพี
 ซึ่งหมายเลขไอพีนี้อาจถูกใช้ร่วมกันโดยผู้ใช้หลายคน
 ถ้าคุณเป็นผู้ใช้นิรนาม และรู้สึกว่าความเห็นที่คุณได้รับไม่เกี่ยวข้องกับคุณแต่อย่างใด กรุณา[[Special:UserLogin/signup|สร้างบัญชีผู้ใช้]]หรือ[[Special:UserLogin|ล็อกอิน]] เพื่อป้องกันการสับสนกับผู้ใช้นิรนามรายอื่น''",
 'noarticletext' => 'ขณะนี้ไม่มีเนื้อหาในหน้านี้
-à¸\84ุà¸\93สามารà¸\96 [[Special:Search/{{PAGENAME}}|à¸\84à¹\89à¸\99หาà¸\8aืà¹\88อà¸\9aà¸\97à¸\84วามà¸\99ีà¹\89]] ในหน้าอื่น
-<span class="plainlinks">[{{fullurl:{{#Special:Log}}|page={{FULLPAGENAMEE}}}} à¸\84à¹\89à¸\99หาà¸\9aัà¸\99à¸\97ึà¸\81ที่เกี่ยวข้อง] หรือ[{{fullurl:{{FULLPAGENAME}}|action=edit}} แก้ไขหน้านี้]</span>',
+à¸\84ุà¸\93สามารà¸\96 [[Special:Search/{{PAGENAME}}|à¸\84à¹\89à¸\99หาà¸\8aืà¹\88อหà¸\99à¹\89าà¸\99ีà¹\89]]ในหน้าอื่น
+<span class="plainlinks">[{{fullurl:{{#Special:Log}}|page={{FULLPAGENAMEE}}}} à¸\84à¹\89à¸\99หาà¸\9bูมที่เกี่ยวข้อง] หรือ[{{fullurl:{{FULLPAGENAME}}|action=edit}} แก้ไขหน้านี้]</span>',
 'noarticletext-nopermission' => 'ปัจจุบันไม่มีข้อความในหน้านี้
 คุณสามารถ[[Special:Search/{{PAGENAME}}|ค้นหาชื่อบทความนี้]]ในหน้าอื่น หรือ<span class="plainlinks">[{{fullurl:{{#Special:Log}}|page={{FULLPAGENAMEE}}}} ค้นหาปูมที่เกี่ยวข้อง]</span> แต่คุณไม่มีสิทธิ์สร้างหน้านี้',
-'userpage-userdoesnotexist' => 'à¹\84มà¹\88มีà¸\9aัà¸\8dà¸\8aีà¸\9cูà¹\89à¹\83à¸\8aà¹\89 "<nowiki>$1</nowiki>" à¸­à¸¢à¸¹à¹\88à¹\83à¸\99สารà¸\9aà¸\9a  à¸\81รุà¸\93าà¸\95รวà¸\88สอà¸\9aà¹\83หà¹\89à¹\81à¸\99à¹\88à¹\83à¸\88วà¹\88าà¸\84ุà¸\93à¸\95à¹\89อà¸\87à¸\81ารสรà¹\89าà¸\87หรือà¹\81à¸\81à¹\89à¹\84à¸\82หà¸\99à¹\89าà¸\99ีà¹\89à¸\88ริà¸\87à¹\86',
-'userpage-userdoesnotexist-view' => 'à¹\84มà¹\88มีà¸\9aัà¸\8dà¸\8aีà¸\9cูà¹\89à¹\83à¸\8aà¹\89ลà¸\87à¸\97ะà¹\80à¸\9aียà¸\99à¹\83à¸\99à¸\8aืà¹\88อ "$1"',
+'userpage-userdoesnotexist' => 'à¸\9aัà¸\8dà¸\8aีà¸\9cูà¹\89à¹\83à¸\8aà¹\89 "<nowiki>$1</nowiki>" à¸¡à¸´à¹\84à¸\94à¹\89ลà¸\87à¸\97ะà¹\80à¸\9aียà¸\99 à¸\81รุà¸\93าà¸\95รวà¸\88สอà¸\9aà¸\81à¹\88อà¸\99วà¹\88าà¸\84ุà¸\93à¸\95à¹\89อà¸\87à¸\81ารสรà¹\89าà¸\87หรือà¹\81à¸\81à¹\89à¹\84à¸\82หà¸\99à¹\89าà¸\99ีà¹\89',
+'userpage-userdoesnotexist-view' => 'à¸\9aัà¸\8dà¸\8aีà¸\9cูà¹\89à¹\83à¸\8aà¹\89 "$1" à¸¡à¸´à¹\84à¸\94à¹\89ลà¸\87à¸\97ะà¹\80à¸\9aียà¸\99',
 'blocked-notice-logextract' => 'ปัจจุบันเลขที่อยู่ไอพีนี้ถูกบล็อก
-à¸\9bูมการบล็อกล่าสุดแสดงด้านล่างนี้เพื่อการอ้างอิง:',
+รายการบล็อกล่าสุดแสดงด้านล่างนี้เพื่อการอ้างอิง:',
 'clearyourcache' => "'''หมายเหตุ:''' หลังจากบันทึกแล้ว คุณอาจจะต้องล้างแคชเว็บเบราว์เซอร์ของคุณเพื่อดูการเปลี่ยนแปลง
 * '''ไฟร์ฟอกซ์ / ซาฟารี:''' กดปุ่ม ''Shift'' ค้างไว้ขณะคลิก ''Reload'' หรือกดปุ่ม ''Ctrl-F5'' หรือ ''Ctrl-R'' (''⌘-R'' บนแมคอินทอช)
 * '''กูเกิล โครม:''' กดปุ่ม ''Ctrl-Shift-R'' (''⌘-Shift-R'' บนแมคอินทอช)
 * '''อินเทอร์เน็ตเอกซ์พลอเรอร์:''' กดปุ่ม ''Ctrl'' ค้างไว้ขณะคลิก ''Refresh'' หรือกดปุ่ม ''Ctrl-F5''
 * '''คองเคอเรอร์:''' คลิก ''Reload'' หรือกดปุ่ม ''F5''
 * '''โอเปร่า:''' ล้างแคชในเมนู ''Tools → Preferences''",
-'usercssyoucanpreview' => "'''คำแนะนำ:''' กดปุ่ม \"{{int:showpreview}}\" เพื่อทดสอบ CSS สไตล์ชีทก่อนทำการบันทึก",
-'userjsyoucanpreview' => "'''คำแนะนำ:''' กดปุ่ม 'แสดงตัวอย่าง' เพื่อทดสอบสไตล์ชีตหรือจาวาสคริปต์ก่อนทำการบันทึก",
-'usercsspreview' => "'''อย่าลืมว่าสไตล์ชีตที่คุณสร้างยังไม่ได้ถูกบันทึก'''
-'''นี่คือการแสดงตัวอย่างเท่านั้น!'''",
-'userjspreview' => "'''อย่าลืมว่าจาวาสคริปต์ยังไม่ได้ถูกบันทึก ขณะนี้แสดงเพียงตัวอย่างเท่านั้น!'''",
-'sitecsspreview' => "'''โปรดจำไว้ว่า คุณกำลังแสดงตัวอย่าง CSS นี้เท่านั้น'''
+'usercssyoucanpreview' => "'''คำแนะนำ:''' กดปุ่ม \"{{int:showpreview}}\" เพื่อทดสอบสไตล์ชีท CSS ก่อนบันทึก",
+'userjsyoucanpreview' => "'''คำแนะนำ:''' กดปุ่ม \"แสดงตัวอย่าง\" เพื่อทดสอบจาวาสคริปต์ใหม่ก่อนบันทึก",
+'usercsspreview' => "'''อย่าลืมว่าคุณกำลังดูตัวอย่าง CSS ผู้ใช้ของคุณ'''
+'''ยังไม่ได้ถูกบันทึก!'''",
+'userjspreview' => "'''อย่าลืมว่าคุณกำลังทดสอบ/ดูตัวอย่างจาวาสคริปต์ผู้ใช้ของคุณ'''
+'''ยังไม่ถูกบันทึก!'''",
+'sitecsspreview' => "'''พึงระลึกว่าคุณกำลังแสดงตัวอย่าง CSS นี้เท่านั้น'''
 '''มันยังไม่ได้ถูกบันทึก!'''",
-'sitejspreview' => "'''à¹\82à¸\9bรà¸\94à¸\88ำà¹\84วà¹\89วà¹\88า à¸\84ุà¸\93à¸\81ำลัà¸\87à¹\81สà¸\94à¸\87à¸\95ัวอยà¹\88าà¸\87รหัส JavaScript นี้เท่านั้น'''
+'sitejspreview' => "'''à¸\9eึà¸\87ระลึà¸\81วà¹\88าà¸\84ุà¸\93à¸\81ำลัà¸\87à¹\81สà¸\94à¸\87à¸\95ัวอยà¹\88าà¸\87à¹\82à¸\84à¹\89à¸\94à¸\88าวาสà¸\84ริà¸\9bà¸\95à¹\8cนี้เท่านั้น'''
 '''มันยังไม่ได้ถูกบันทึก!'''",
-'userinvalidcssjstitle' => "'''à¸\84ำà¹\80à¸\95ือà¸\99:''' à¹\84มà¹\88มีà¹\81à¸\9aà¸\9aหà¸\99à¹\89าà¸\95า \"\$1\" à¸­à¸¢à¹\88าลืมวà¹\88าหà¸\99à¹\89า .css à¹\81ละ .js à¸\97ีà¹\88à¸\9bรัà¸\9aà¹\81à¸\95à¹\88à¸\87à¹\80อà¸\87 à¹\83à¸\8aà¹\89à¹\80à¸\9bà¹\87à¸\99อัà¸\81ษรตัวพิมพ์เล็กทั้งหมด เช่น ใช้ {{ns:user}}:Foo/vector.css แทนที่จะเป็น {{ns:user}}:Foo/Vector.css",
+'userinvalidcssjstitle' => "'''à¸\84ำà¹\80à¸\95ือà¸\99:''' à¹\84มà¹\88มีหà¸\99à¹\89าà¸\95า \"\$1\" à¸«à¸\99à¹\89า .css à¹\81ละ .js à¸\97ีà¹\88à¸\9bรัà¸\9aà¹\81à¸\95à¹\88à¸\87à¹\80อà¸\87 à¹\83à¸\8aà¹\89ตัวพิมพ์เล็กทั้งหมด เช่น ใช้ {{ns:user}}:Foo/vector.css แทนที่จะเป็น {{ns:user}}:Foo/Vector.css",
 'updated' => '(ปรับปรุงแล้ว)',
 'note' => "'''คำแนะนำ:'''",
 'previewnote' => "'''พึงระลึกว่านี่เป็นเพียงตัวอย่างเท่านั้น'''
 การเปลี่ยนแปลงของคุณยังไม่ได้ถูกบันทึก!",
+'continue-editing' => 'ไปยังพื้นที่แก้ไข',
 'previewconflict' => 'การแสดงผลส่วนนี้เป็นตัวอย่างของการแก้ไขด้านบน  ถ้ากดบันทึกการแสดงผลจะแสดงในลักษณะนี้ทันที',
 'session_fail_preview' => "'''ขออภัย ไม่สามารถดำเนินการแก้ไขต่อได้ เนื่องจากข้อมูลเชื่อมต่อสูญหาย
 ให้ทดลองแก้ไขอีกครั้งหนึ่ง ถ้ายังไม่สามารถทำได้ ให้ลองล็อกเอาต์และล็อกอินกลับมาอีกครั้ง'''",
@@ -847,15 +862,17 @@ $1 เป็นผู้ดำเนินการบล็อกในคร
 'token_suffix_mismatch' => "'''การแก้ไขของคุณได้ถูกปฏิเสธ เนื่องจากเครื่องลูกข่ายที่คุณใช้อยู่ได้ทำลายรูปแบบเครื่องหมายวรรคตอนในตราสารประจำการแก้ไข (edit token)'''
 ระบบไม่รับการแก้ไขของคุณเพื่อป้องกันความผิดพลาดของข้อมูล
 ในบางครั้งปัญหานี้จะเกิดขึ้นถ้าคุณใช้บริการเว็บพร็อกซีนิรนามที่มีบั๊ก",
-'edit_form_incomplete' => "'''à¸\9aาà¸\87สà¹\88วà¸\99à¸\82อà¸\87à¹\81à¸\9aà¸\9aà¹\81à¸\81à¹\89à¹\84à¸\82à¹\84à¸\9bà¹\84มà¹\88à¸\96ึà¸\87à¹\80à¸\8bิรà¹\8cà¸\9fà¹\80วอรà¹\8c à¸\95รวà¸\88สอà¸\9aอีà¸\81à¸\84รัà¹\89à¸\87วà¹\88าà¸\81ารà¹\81à¸\81à¹\89à¹\84à¸\82à¸\82อà¸\87à¸\84ุà¸\93ยัà¸\87à¸\84งอยู่และลองอีกครั้ง'''",
+'edit_form_incomplete' => "'''à¹\81à¸\9aà¸\9aà¹\81à¸\81à¹\89à¹\84à¸\82à¸\9aาà¸\87สà¹\88วà¸\99à¹\84à¸\9bà¹\84มà¹\88à¸\96ึà¸\87à¹\80à¸\8bิรà¹\8cà¸\9fà¹\80วอรà¹\8c à¸\95รวà¸\88สอà¸\9aอีà¸\81à¸\84รัà¹\89à¸\87วà¹\88าà¸\81ารà¹\81à¸\81à¹\89à¹\84à¸\82à¸\82อà¸\87à¸\84ุà¸\93ยังอยู่และลองอีกครั้ง'''",
 'editing' => 'กำลังแก้ไข $1',
-'creating' => 'สรà¹\89าà¸\87หà¸\99à¹\89า $1',
+'creating' => 'à¸\81ำลัà¸\87สรà¹\89าà¸\87 $1',
 'editingsection' => 'กำลังแก้ไข $1 (เฉพาะส่วน)',
-'editingcomment' => 'à¸\81ำลัà¸\87à¹\81à¸\81à¹\89à¹\84à¸\82 $1 (หัวà¸\82à¹\89อใหม่)',
+'editingcomment' => 'à¸\81ำลัà¸\87à¹\81à¸\81à¹\89à¹\84à¸\82 $1 (à¸\95อà¸\99ใหม่)',
 'editconflict' => 'แก้ไขชนกัน: $1',
-'explainconflict' => "ใครบางคนได้เปลี่ยนแปลงหน้านี้ขณะที่คุณกำลังแก้ไข
-ข้อความส่วนบนเป็นข้อความปัจจุบันของหน้านี้ และส่วนล่างเป็นการแก้ไขของคุณ
-คุณต้องทำการรวมการเปลี่ยนแปลงของคุณเข้ากับข้อความปัจจุบัน '''เฉพาะ'''ข้อความส่วนบนเท่านั้นที่จะถูกบันทึก เมื่อกดปุ่ม \"{{int:savearticle}}\"",
+'explainconflict' => "ใครบางคนได้เปลี่ยนแปลงหน้านี้ตั้งแต่คุณกำลังแก้ไข
+พื้นที่ข้อความส่วนบนมีข้อความหน้าที่มีอยู่ในปัจจุบัน
+การแก้ไขของคุณแสดงอยู่ในพื้นที่ข้อความส่วนล่าง
+คุณจะต้องรวมการเปลี่ยนแปลงของคุณเข้ากับข้อความที่มีอยู่
+'''เฉพาะ'''ข้อความในพื้นที่ข้อความส่วนบนเท่านั้นที่จะถูกบันทึก เมื่อกดปุ่ม \"{{int:savearticle}}\"",
 'yourtext' => 'ข้อความของคุณ',
 'storedversion' => 'รุ่นที่เก็บไว้',
 'nonunicodebrowser' => "'''คำเตือน: เว็บเบราว์เซอร์นี้ไม่สนับสนุนการใช้งานแบบยูนิโคด ตัวอักษรที่ไม่ใช่แบบแอสกีจะแสดงในกล่องการแก้ไขในลักษณะรหัสเลขฐานสิบหก'''",
@@ -871,7 +888,8 @@ $1 เป็นผู้ดำเนินการบล็อกในคร
 '''อย่าส่งงานที่มีลิขสิทธิ์เข้ามาก่อนได้รับอนุญาตจากเจ้าของ!'''",
 'longpageerror' => "'''ผิดพลาด: ข้อความที่คุณส่งเข้ามามีขนาด $1 กิโลไบต์
 ซึ่งเกินกว่าขนาดที่กำหนดไว้ที่ $2 กิโลไบต์ จึงไม่สามารถบันทึกได้'''",
-'readonlywarning' => "'''คำเตือน: ขณะนี้ฐานข้อมูลถูกล็อกเพื่อบำรุงรักษา จึงไม่สามารถบันทึกข้อมูลที่แก้ไขได้ แนะนำให้คัดลอกไปเก็บไว้ที่อื่นก่อนแล้วนำมาบันทึกในเว็บไซต์นี้ภายหลัง'''
+'readonlywarning' => "'''คำเตือน: ฐานข้อมูลถูกล็อกเพื่อบำรุงรักษา ฉะนั้นคุณจึงไม่สามารถบันทึกการเปลี่ยนแปลงของคุณได้ในขณะนี้'''
+คุณอาจต้องการคัดลอกและวางข้อความของคุณในไฟล์ข้อความ และบันทึกไว้ใช้ภายหลัง
 
 ผู้ดูแลระบบที่ล็อกฐานข้อมูลได้ให้คำอธิบายดังนี้: $1",
 'protectedpagewarning' => "'''คำเตือน: หน้านี้ถูกล็อก และแก้ไขได้เฉพาะผู้ใช้ที่มีสิทธิผู้ดูแลระบบเท่านั้น'''
@@ -879,7 +897,7 @@ $1 เป็นผู้ดำเนินการบล็อกในคร
 'semiprotectedpagewarning' => "'''หมายเหตุ:''' หน้านี้ถูกล็อก และแก้ไขได้เฉพาะผู้ใช้ที่ลงทะเบียนเท่านั้น
 รายการแก้ไขล่าสุดได้ถูกแสดงไว้ด้านล่างนี้เพื่อการอ้างอิง",
 'cascadeprotectedwarning' => "'''คำเตือน:''' หน้านี้ถูกล็อก และแก้ไขได้เฉพาะผู้ใช้ที่มีสิทธิผู้ดูแลระบบเท่านั้น เนื่องจากหน้านี้สืบทอดการล็อกมาจาก{{PLURAL:$1|หน้า|หน้า}}ต่อไปนี้:",
-'titleprotectedwarning' => "'''คำเตือน:  หน้านี้ได้รับการป้องกันไว้ให้สร้างได้โดย[[Special:ListGroupRights|ผู้ใช้ที่ได้รับสิทธิ]]เท่านั้น'''
+'titleprotectedwarning' => "'''คำเตือน: หน้านี้ได้รับการป้องกันไว้ให้สร้างได้เฉพาะโดย[[Special:ListGroupRights|ผู้ใช้ที่ได้รับสิทธิ]]เท่านั้น'''
 รายการแก้ไขล่าสุดได้ถูกแสดงไว้ด้านล่างนี้เพื่อการอ้างอิง",
 'templatesused' => '{{PLURAL:$1|แม่แบบ}}ที่ใช้ในหน้านี้:',
 'templatesusedpreview' => '{{PLURAL:$1|แม่แบบ}}ที่ใช้ในการแสดงตัวอย่าง:',
@@ -888,7 +906,6 @@ $1 เป็นผู้ดำเนินการบล็อกในคร
 'template-semiprotected' => '(กึ่งล็อก)',
 'hiddencategories' => 'หน้านี้มี {{PLURAL:$1|1 หมวดหมู่ที่ซ่อนอยู่|$1 หมวดหมู่ที่ซ่อนอยู่}} :',
 'edittools' => '<!-- ข้อความนี้จะแสดงผลใต้ฟอร์มสำหรับการแก้ไขและอัปโหลด -->',
-'nocreatetitle' => 'จำกัดการสร้างหน้าใหม่',
 'nocreatetext' => '{{SITENAME}} จำกัดการสร้างหน้าใหม่
 คุณสามารถย้อนกลับไปแก้ไขหน้าที่มีอยู่เดิม หรือ[[Special:UserLogin|ล็อกอินหรือสร้างบัญชีผู้ใช้]]',
 'nocreate-loggedin' => 'คุณไม่ได้รับอนุญาตให้สร้างหน้าใหม่',
@@ -896,7 +913,7 @@ $1 เป็นผู้ดำเนินการบล็อกในคร
 'sectioneditnotsupported-text' => 'ไม่สนับสนุนการแก้ไขหัวข้อย่อยในหน้านี้',
 'permissionserrors' => 'ข้อผิดพลาดในการใช้สิทธิ',
 'permissionserrorstext' => 'คุณไม่ได้รับสิทธิในการทำสิ่งนี้ เนื่องจาก{{PLURAL:$1|เหตุผล|เหตุผล}}ต่อไปนี้:',
-'permissionserrorstext-withaction' => 'คุณไม่มีสิทธิ$2 ด้วย{{PLURAL:$1|เหตุผล|เหตุผล}}ต่อไปนี้:',
+'permissionserrorstext-withaction' => 'คุณไม่มีสิทธิ$2 ด้วย{{PLURAL:$1|เหตุ|เหตุ}}ต่อไปนี้:',
 'recreate-moveddeleted-warn' => "'''คำเตือน: คุณกำลังสร้างหน้าซึ่งได้ถูกลบไปก่อนหน้านี้แล้วอีกครั้ง'''
 
 คุณควรพิจารณาว่าการแก้ไขหน้านี้ต่อไปเหมาะสมหรือไม่
@@ -912,40 +929,46 @@ $1 เป็นผู้ดำเนินการบล็อกในคร
 'edit-no-change' => 'การแก้ไขของคุณถูกเพิกเฉย เพราะไม่มีการเปลี่ยนแปลงใด ๆ',
 'edit-already-exists' => 'ไม่สามารถสร้างหน้าใหม่ได้
 เพราะมีหน้านี้แล้ว',
+'defaultmessagetext' => 'ข้อความสารโดยปริยาย',
+
+# Content models
+'content-model-text' => 'ข้อความธรรมดา',
+'content-model-javascript' => 'จาวาสคริปต์',
+'content-model-css' => 'CSS',
 
 # Parser/template warnings
-'expensive-parserfunction-warning' => 'คำเตือน: หน้านี้มีการเรียกใช้ฟังก์ชันแจงส่วนมากเกินไป
+'expensive-parserfunction-warning' => "'''คำเตือน:''' หน้านี้มีการเรียกใช้ฟังก์ชันแจงส่วนมากเกินไป
 
-หน้านี้ควรมีการเรียกใช้น้อยกว่า $2 {{PLURAL:$2|ครั้ง|ครั้ง}} ปัจจุบันมีการเรียกใช้ $1 {{PLURAL:$1|ครั้ง|ครั้ง}}',
+หน้านี้ควรมีการเรียกใช้น้อยกว่า $2  ครั้ง แต่ปัจจุบันมีการเรียกใช้ $1 ครั้ง",
 'expensive-parserfunction-category' => 'หน้าที่มีการเรียกใช้ฟังก์ชันแจงส่วนมากเกินไป',
-'post-expand-template-inclusion-warning' => 'คำเตือน: แม่แบบที่นำมารวมมีขนาดใหญ่เกินไป
¹\81มà¹\88à¹\81à¸\9aà¸\9aà¸\9aาà¸\87หà¸\99à¹\89าà¸\88ะà¹\84มà¹\88à¸\96ูà¸\81รวมà¹\80à¸\82à¹\89ามา',
-'post-expand-template-inclusion-category' => 'หà¸\99à¹\89าà¸\97ีà¹\88มีà¹\81มà¹\88à¹\81à¸\9aà¸\9aà¸\97ีà¹\88รวมมาà¹\80à¸\81ิà¸\99à¸\82à¸\99าà¸\94',
+'post-expand-template-inclusion-warning' => "'''คำเตือน:''' แม่แบบที่นำมารวมมีขนาดใหญ่เกินไป
¸\9aาà¸\87à¹\81มà¹\88à¹\81à¸\9aà¸\9aà¸\88ะà¹\84มà¹\88à¸\96ูà¸\81รวมà¹\80à¸\82à¹\89ามา",
+'post-expand-template-inclusion-category' => 'หน้าที่มีแม่แบบรวมมาเกินขนาด',
 'post-expand-template-argument-warning' => 'คำเตือน: หน้านี้มีแม่แบบที่มีอาร์กิวเมนต์ขนาดใหญ่เกินไป อาร์กิวเมนต์เหล่านี้จะถูกละทิ้ง',
 'post-expand-template-argument-category' => 'หน้าที่มีแม่แบบซึ่งอาร์กิวเมนต์ถูกละทิ้ง',
-'parser-template-loop-warning' => 'à¸\95รวà¸\88à¸\9eà¸\9aวà¹\88าà¹\81มà¹\88à¹\81à¸\9aà¸\9aมีà¸\81ารกลับมาเรียกตัวเอง: [[$1]]',
+'parser-template-loop-warning' => 'à¸\95รวà¸\88à¸\9eà¸\9aà¹\81มà¹\88à¹\81à¸\9aà¸\9aกลับมาเรียกตัวเอง: [[$1]]',
 'parser-template-recursion-depth-warning' => 'เรียกแม่แบบซ้อนหลายชั้นเกินขีดจำกัด ($1)',
 'language-converter-depth-warning' => 'คำสั่งในการแปลงภาษาลึกเกิน $1 ลำดับ',
 
 # "Undo" feature
-'undo-success' => 'à¸\81ารà¹\81à¸\81à¹\89à¹\84à¸\82à¸\99ีà¹\89สามารà¸\96ยà¹\89อà¸\99à¸\81ลัà¸\9aà¹\84à¸\94à¹\89 à¸\81รุà¸\93าà¸\95รวà¸\88สอà¸\9aà¸\82à¹\89อà¹\81à¸\95à¸\81à¸\95à¹\88าà¸\87à¸\94à¹\89าà¸\99ลà¹\88าà¸\87à¹\81à¸\99à¹\88à¹\83à¸\88วà¹\88าà¸\99ีà¹\88à¸\84ือสิà¹\88à¸\87à¸\97ีà¹\88à¸\84ุà¸\93à¸\95à¹\89อà¸\87à¸\81ารà¸\97ำ à¸«à¸¥à¸±à¸\87à¸\88าà¸\81à¸\99ัà¹\89à¸\99à¹\83หà¹\89à¸\97ำà¸\81ารà¸\9aัà¸\99à¸\97ึà¸\81à¸\81ารà¹\80à¸\9bลีà¹\88ยà¸\99à¹\81à¸\9bลà¸\87à¸\97ีà¹\88à¹\81สà¸\94à¸\87à¸\9cลà¸\94à¹\89าà¸\99ลà¹\88าà¸\87 à¹\81ละà¸\81à¸\94à¸\9aัà¸\99à¸\97ึà¸\81เพื่อเสร็จสิ้นขั้นตอน',
+'undo-success' => 'à¸\81ารà¹\81à¸\81à¹\89à¹\84à¸\82à¸\99ีà¹\89สามารà¸\96ยà¹\89อà¸\99à¸\81ลัà¸\9aà¹\84à¸\94à¹\89 à¸\81รุà¸\93าà¸\95รวà¸\88สอà¸\9aà¸\82à¹\89อà¹\81à¸\95à¸\81à¸\95à¹\88าà¸\87à¸\94à¹\89าà¸\99ลà¹\88าà¸\87à¹\83หà¹\89à¹\81à¸\99à¹\88à¹\83à¸\88วà¹\88าà¸\99ีà¹\88à¸\84ือสิà¹\88à¸\87à¸\97ีà¹\88à¸\84ุà¸\93à¸\95à¹\89อà¸\87à¸\81ารà¸\97ำ à¸\88าà¸\81à¸\99ัà¹\89à¸\99à¹\83หà¹\89à¸\9aัà¸\99à¸\97ึà¸\81à¸\81ารà¹\80à¸\9bลีà¹\88ยà¸\99à¹\81à¸\9bลà¸\87à¸\94à¹\89าà¸\99ลà¹\88าà¸\87เพื่อเสร็จสิ้นขั้นตอน',
 'undo-failure' => 'การแก้ไขนี้ไม่สามารถย้อนกลับได้ เนื่องจากขัดแย้งกับการแก้ไขปัจจุบัน',
-'undo-norev' => 'à¸\81ารà¹\81à¸\81à¹\89à¹\84à¸\82à¸\99ีà¹\89à¹\84มà¹\88สามารà¸\96ยà¹\89อà¸\99à¹\84à¸\94à¹\89à¹\80à¸\9eราะà¹\84มà¹\88มีหรือà¸\96ูà¸\81ลà¸\9aà¹\81ลà¹\89วà¹\83à¸\99à¸\9bัà¸\88à¸\88ุà¸\9aัà¸\99',
+'undo-norev' => 'à¹\84มà¹\88สามารà¸\96ยà¹\89อà¸\99à¸\81ารà¹\81à¸\81à¹\89à¹\84à¸\82à¸\99ีà¹\89 à¹\80à¸\9eราะà¹\84มà¹\88มีหรือà¸\96ูà¸\81ลà¸\9aà¹\84à¸\9bà¹\81ลà¹\89ว',
 'undo-summary' => 'ย้อนการแก้ไขรุ่น $1 โดย [[Special:Contributions/$2|$2]] ([[User talk:$2|พูดคุย]])',
 
 # Account creation failure
-'cantcreateaccounttitle' => 'à¹\84มà¹\88สามารà¸\96สรà¹\89าà¸\87à¸\9aัà¸\8dà¸\8aีà¸\9cูà¹\89à¹\83à¸\8aà¹\89à¹\84à¸\94à¹\89',
-'cantcreateaccount-text' => "à¸\81ารสรà¹\89าà¸\87à¸\9aัà¸\8dà¸\8aีà¸\9cูà¹\89à¹\83à¸\8aà¹\89à¹\83หมà¹\88à¸\9cà¹\88าà¸\99à¸\97าà¸\87หมายà¹\80ลà¸\82à¹\84อà¸\9eีà¸\99ีà¹\89 ('''$1''') à¸\96ูà¸\81ระà¸\87ัà¸\9aà¹\84วà¹\89โดย [[User:$3|$3]]
+'cantcreateaccounttitle' => 'ไม่สามารถสร้างบัญชีได้',
+'cantcreateaccount-text' => "à¸\81ารสรà¹\89าà¸\87à¸\9aัà¸\8dà¸\8aีà¹\83หมà¹\88à¸\88าà¸\81à¸\97ีà¹\88อยูà¹\88à¹\84อà¸\9eีà¸\99ีà¹\89 ('''$1''') à¸\96ูà¸\81ระà¸\87ัà¸\9aโดย [[User:$3|$3]]
 
 เหตุผลที่ $3 ให้ไว้ คือ ''$2''",
 
 # History pages
-'viewpagelogs' => 'à¸\94ูà¸\9aัà¸\99à¸\97ึà¸\81ของหน้านี้',
+'viewpagelogs' => 'à¸\94ูà¸\9bูมของหน้านี้',
 'nohistory' => 'ไม่มีประวัติการแก้ไขสำหรับหน้านี้',
 'currentrev' => 'รุ่นปัจจุบัน',
 'currentrev-asof' => 'รุ่นปัจจุบันของ $1',
-'revisionasof' => 'à¸\81ารà¸\9bรัà¸\9aà¸\9bรุà¸\87 เมื่อ $1',
-'revision-info' => 'à¸\81ารà¸\9bรัà¸\9aà¸\9bรุà¸\87 เมื่อ $1 โดย $2',
+'revisionasof' => 'รุà¹\88à¸\99เมื่อ $1',
+'revision-info' => 'รุà¹\88à¸\99เมื่อ $1 โดย $2',
 'previousrevision' => '←รุ่นก่อนหน้า',
 'nextrevision' => 'รุ่นถัดไป→',
 'currentrevisionlink' => 'รุ่นปัจจุบัน',
@@ -959,115 +982,117 @@ $1 เป็นผู้ดำเนินการบล็อกในคร
 'history-fieldset-title' => 'ค้นหาประวัติ',
 'history-show-deleted' => 'เฉพาะที่ถูกลบ',
 'histfirst' => 'แรกสุด',
-'histlast' => 'à¸\97à¹\89ายสุด',
-'historysize' => '({{PLURAL:$1|1 ไบต์|$1 ไบต์}})',
+'histlast' => 'ลà¹\88าสุด',
+'historysize' => '$1 ไบต์',
 'historyempty' => '(ว่าง)',
 
 # Revision feed
-'history-feed-title' => 'à¸\9bระวัà¸\95ิà¸\81ารà¸\9bรัà¸\9aà¸\9bรุà¸\87',
-'history-feed-description' => 'à¸\9bระวัà¸\95ิà¸\81ารà¸\9bรัà¸\9aà¸\9bรุà¸\87ของหน้านี้ในวิกิ',
+'history-feed-title' => 'à¸\9bระวัà¸\95ิรุà¹\88à¸\99',
+'history-feed-description' => 'à¸\9bระวัà¸\95ิรุà¹\88à¸\99ของหน้านี้ในวิกิ',
 'history-feed-item-nocomment' => '$1 เมื่อ $2',
-'history-feed-empty' => 'ไม่มีหน้าที่ต้องการ มันอาจถูกลบหรือถูกเปลี่ยนชื่อไปแล้ว ให้ลอง
-[[Special:Search|ค้นหาในวิกินี้]] สำหรับหน้าใหม่ที่เกี่ยวข้อง',
+'history-feed-empty' => 'ไม่มีหน้าที่ต้องการ 
+ซึ่งอาจถูกลบหรือถูกเปลี่ยนชื่อไปแล้ว 
+ลอง[[Special:Search|ค้นวิกินี้]]หาหน้าใหม่ที่เกี่ยวข้อง',
 
 # Revision deletion
 'rev-deleted-comment' => '(คำอธิบายอย่างย่อถูกลบออก)',
 'rev-deleted-user' => '(ชื่อผู้ใช้ถูกลบออก)',
-'rev-deleted-event' => '(หà¸\99à¹\89าà¸\97ีà¹\88à¹\83สà¹\88à¹\80à¸\82à¹\89ามาถูกลบออก)',
+'rev-deleted-event' => '(à¸\9bà¸\8fิà¸\9aัà¸\95ิà¸\81ารà¸\9bูมถูกลบออก)',
 'rev-deleted-user-contribs' => '[ชื่อผู้ใช้หรือหมายเลขไอพีถูกลบแล้ว - การแก้ไขถูกซ่อนจากรายการแก้ไข]',
-'rev-deleted-text-permission' => "รุà¹\88à¸\99à¸\81ารà¸\9bรัà¸\9aà¸\9bรุà¸\87à¸\99ีà¹\89à¸\82อà¸\87หà¸\99à¹\89าà¸\99ีà¹\89'''à¸\96ูà¸\81ลà¸\9aà¹\81ลà¹\89ว'''
-รายละà¹\80อียà¸\94อาà¸\88ยัà¸\87à¸\84à¸\87มีอยูà¹\88à¹\83à¸\99[{{fullurl:{{#Special:Log}}/delete|page={{FULLPAGENAMEE}}}} à¸\9aัà¸\99à¸\97ึà¸\81การลบ]",
-'rev-deleted-text-unhide' => "รุà¹\88à¸\99à¸\9bรัà¸\9aà¸\9bรุà¸\87à¸\82อà¸\87หà¸\99à¹\89าà¸\99ีà¹\89à¹\84à¸\94à¹\89à¸\96ูà¸\81'''ลà¸\9aออà¸\81'''
-รายละà¹\80อียà¸\94สามารà¸\96à¸\9eà¸\9aà¹\84à¸\94à¹\89à¹\83à¸\99[{{fullurl:{{#Special:Log}}/delete|page={{FULLPAGENAMEE}}}} à¸\9bูมà¸\81ารลà¸\9a]
-à¸\84ุà¸\93ยัà¸\87สามารà¸\96[$1 à¸\94ูรุà¹\88à¸\99à¸\9bรัà¸\9aà¸\9bรุà¸\87à¸\99ีà¹\89]à¹\84à¸\94à¹\89à¸\96à¹\89าà¸\84ุà¸\93à¸\95à¹\89อà¸\87à¸\81ารà¸\94ำà¹\80à¸\99ิà¸\99à¸\95à¹\88อ",
-'rev-suppressed-text-unhide' => "รุà¹\88à¸\99à¸\9bรัà¸\9aà¸\9bรุà¸\87à¸\82อà¸\87หà¸\99à¹\89าà¸\99ีà¹\89à¹\84à¸\94à¹\89à¸\96ูà¸\81'''ยัà¸\9aยัà¹\89à¸\87à¹\84วà¹\89'''
-รายละà¹\80อียà¸\94สามารà¸\96à¸\9eà¸\9aà¹\84à¸\94à¹\89à¹\83à¸\99[{{fullurl:{{#Special:Log}}/suppress|page={{FULLPAGENAMEE}}}} à¸\9bูมà¸\81ารยัà¸\9aยัà¹\89à¸\87]
-à¸\84ุà¸\93ยัà¸\87สามารà¸\96[$1 à¸\94ูรุà¹\88à¸\99à¸\9bรัà¸\9aà¸\9bรุà¸\87à¸\99ีà¹\89]à¹\84à¸\94à¹\89à¸\96à¹\89าà¸\84ุà¸\93à¸\95à¹\89อà¸\87à¸\81ารà¸\94ำà¹\80à¸\99ิà¸\99à¸\95à¹\88อ",
-'rev-deleted-text-view' => "รุà¹\88à¸\99à¸\9bรัà¸\9aà¸\9bรุà¸\87à¸\82อà¸\87หà¸\99à¹\89าà¸\99ีà¹\89à¹\84à¸\94à¹\89à¸\96ูà¸\81'''ลà¸\9aออà¸\81'''
-à¸\84ุà¸\93สามารà¸\96à¸\94ูรุà¹\88à¸\99à¸\9bรัà¸\9aà¸\9bรุà¸\87à¸\99ีà¹\89à¹\84à¸\94à¹\89 à¸\8bึà¹\88à¸\87รายละà¹\80อียà¸\94สามารà¸\96พบได้ใน[{{fullurl:{{#Special:Log}}/delete|page={{FULLPAGENAMEE}}}} ปูมการลบ]",
-'rev-suppressed-text-view' => "รุà¹\88à¸\99à¸\9bรัà¸\9aà¸\9bรุà¸\87à¸\82อà¸\87หà¸\99à¹\89าà¸\99ีà¹\89à¹\84à¸\94à¹\89à¸\96ูà¸\81'''ยัà¸\9aยัà¹\89à¸\87à¹\84วà¹\89'''
-à¸\84ุà¸\93สามารà¸\96à¸\94ูรุà¹\88à¸\99à¸\9bรัà¸\9aà¸\9bรุà¸\87à¸\99ีà¹\89à¹\84à¸\94à¹\89 à¸\8bึà¹\88à¸\87รายละà¹\80อียà¸\94สามารà¸\96พบได้ใน[{{fullurl:{{#Special:Log}}/suppress|page={{FULLPAGENAMEE}}}} ปูมการยับยั้ง]",
-'rev-deleted-no-diff' => "à¸\84ุà¸\93à¹\84มà¹\88สามารà¸\96à¹\80รียà¸\81à¸\94ูà¸\84วามà¹\80à¸\9bลีà¹\88ยà¸\99à¹\81à¸\9bลà¸\87à¸\99ีà¹\89 à¹\80à¸\99ืà¹\88อà¸\87à¸\88าà¸\81รุà¹\88à¸\99à¸\81ารà¸\9bรัà¸\9aà¸\9bรุà¸\87à¸\97ีà¹\88à¸\99ำมาà¹\80à¸\9bรียà¸\9aà¹\80à¸\97ียà¸\9aมีà¸\9aาà¸\87รุà¹\88à¸\99'''à¸\96ูà¸\81ลà¸\9aออà¸\81'''
-รายละà¹\80อียà¸\94อาà¸\88ยัà¸\87à¸\84à¸\87มีอยูà¹\88à¹\83à¸\99[{{fullurl:{{#Special:Log}}/delete|page={{FULLPAGENAMEE}}}} à¸\9aัà¸\99à¸\97ึà¸\81การลบ]",
+'rev-deleted-text-permission' => "รุà¹\88à¸\99à¸\82อà¸\87หà¸\99à¹\89าà¸\99ีà¹\89'''à¸\96ูà¸\81ลà¸\9a'''
+รายละà¹\80อียà¸\94à¸\9eà¸\9aà¹\84à¸\94à¹\89à¹\83à¸\99[{{fullurl:{{#Special:Log}}/delete|page={{FULLPAGENAMEE}}}} à¸\9bูมการลบ]",
+'rev-deleted-text-unhide' => "รุà¹\88à¸\99à¸\82อà¸\87หà¸\99à¹\89าà¸\99ีà¹\89'''à¸\96ูà¸\81ลà¸\9a'''
+รายละเอียดพบได้ใน[{{fullurl:{{#Special:Log}}/delete|page={{FULLPAGENAMEE}}}} ปูมการลบ]
+คุณยังสามารถ[$1 ดูรุ่นนี้]ได้ถ้าคุณต้องการดำเนินต่อ",
+'rev-suppressed-text-unhide' => "รุà¹\88à¸\99à¸\82อà¸\87หà¸\99à¹\89าà¸\99ีà¹\89'''à¸\96ูà¸\81ยัà¸\9aยัà¹\89à¸\87'''
+รายละเอียดพบได้ใน[{{fullurl:{{#Special:Log}}/suppress|page={{FULLPAGENAMEE}}}} ปูมการยับยั้ง]
+คุณยังสามารถ[$1 ดูรุ่นนี้]ได้ถ้าคุณต้องการดำเนินต่อ",
+'rev-deleted-text-view' => "รุà¹\88à¸\99à¸\82อà¸\87หà¸\99à¹\89าà¸\99ีà¹\89'''à¸\96ูà¸\81ลà¸\9a'''
+à¸\84ุà¸\93สามารà¸\96à¸\94ูรุà¹\88à¸\99à¸\99ีà¹\89à¹\84à¸\94à¹\89 à¸£à¸²à¸¢à¸¥à¸°à¹\80อียà¸\94พบได้ใน[{{fullurl:{{#Special:Log}}/delete|page={{FULLPAGENAMEE}}}} ปูมการลบ]",
+'rev-suppressed-text-view' => "รุà¹\88à¸\99à¸\82อà¸\87หà¸\99à¹\89าà¸\99ีà¹\89'''à¸\96ูà¸\81ยัà¸\9aยัà¹\89à¸\87'''
+à¸\84ุà¸\93สามารà¸\96à¸\94ูรุà¹\88à¸\99à¸\99ีà¹\89à¹\84à¸\94à¹\89 à¸£à¸²à¸¢à¸¥à¸°à¹\80อียà¸\94พบได้ใน[{{fullurl:{{#Special:Log}}/suppress|page={{FULLPAGENAMEE}}}} ปูมการยับยั้ง]",
+'rev-deleted-no-diff' => "à¸\84ุà¸\93à¹\84มà¹\88สามารà¸\96à¹\80รียà¸\81à¸\94ูà¸\84วามà¹\80à¸\9bลีà¹\88ยà¸\99à¹\81à¸\9bลà¸\87à¸\99ีà¹\89 à¹\80à¸\9eราะมีà¸\9aาà¸\87รุà¹\88à¸\99'''à¸\96ูà¸\81ลà¸\9a'''
+รายละà¹\80อียà¸\94à¸\9eà¸\9aà¹\84à¸\94à¹\89à¹\83à¸\99[{{fullurl:{{#Special:Log}}/delete|page={{FULLPAGENAMEE}}}} à¸\9bูมการลบ]",
 'rev-suppressed-no-diff' => "คุณไม่สามารถดูความแตกต่างระหว่างรุ่นที่เลือกได้ เนื่องจากมีความแตกต่างระหว่างรุ่นที่'''ถูกลบ'''",
-'rev-deleted-unhide-diff' => "หà¸\99ึà¹\88à¸\87à¹\83à¸\99รุà¹\88à¸\99à¸\9bรัà¸\9aà¸\9bรุà¸\87à¸\97ัà¹\89à¸\87หมà¸\94à¸\82อà¸\87รายà¸\81ารà¸\84วามà¹\81à¸\95à¸\81à¸\95à¹\88าà¸\87à¸\99ีà¹\89à¹\84à¸\94à¹\89à¸\96ูà¸\81'''ลà¸\9aออà¸\81'''
-รายละà¹\80อียà¸\94สามารà¸\96à¸\9eà¸\9aà¹\84à¸\94à¹\89à¹\83à¸\99[{{fullurl:{{#Special:Log}}/delete|page={{FULLPAGENAMEE}}}} à¸\9bูมà¸\81ารลà¸\9a]
+'rev-deleted-unhide-diff' => "รุà¹\88à¸\99หà¸\99ึà¹\88à¸\87à¸\82อà¸\87รายà¸\81ารà¸\84วามà¹\81à¸\95à¸\81à¸\95à¹\88าà¸\87à¸\99ีà¹\89'''à¸\96ูà¸\81ลà¸\9a'''
+รายละเอียดพบได้ใน[{{fullurl:{{#Special:Log}}/delete|page={{FULLPAGENAMEE}}}} ปูมการลบ]
 คุณยังสามารถ[$1 ดูความแตกต่างนี้]ได้ถ้าคุณต้องการดำเนินต่อ",
-'rev-suppressed-unhide-diff' => "หà¸\99ึà¹\88à¸\87à¹\83à¸\99รุà¹\88à¸\99à¸\9bรัà¸\9aà¸\9bรุà¸\87à¸\97ัà¹\89à¸\87หมà¸\94à¸\82อà¸\87รายà¸\81ารà¸\84วามà¹\81à¸\95à¸\81à¸\95à¹\88าà¸\87à¸\99ีà¹\89à¹\84à¸\94à¹\89à¸\96ูà¸\81'''ยัà¸\9aยัà¹\89à¸\87à¹\84วà¹\89'''
-รายละà¹\80อียà¸\94สามารà¸\96à¸\9eà¸\9aà¹\84à¸\94à¹\89à¹\83à¸\99[{{fullurl:{{#Special:Log}}/suppress|page={{FULLPAGENAMEE}}}} à¸\9bูมà¸\81ารยัà¸\9aยัà¹\89à¸\87]
+'rev-suppressed-unhide-diff' => "รุà¹\88à¸\99หà¸\99ึà¹\88à¸\87à¸\82อà¸\87รายà¸\81ารà¸\84วามà¹\81à¸\95à¸\81à¸\95à¹\88าà¸\87à¸\99ีà¹\89'''à¸\96ูà¸\81ยัà¸\9aยัà¹\89à¸\87'''
+รายละเอียดพบได้ใน[{{fullurl:{{#Special:Log}}/suppress|page={{FULLPAGENAMEE}}}} ปูมการยับยั้ง]
 คุณยังสามารถ[$1 ดูความแตกต่างนี้]ได้ถ้าคุณต้องการดำเนินต่อ",
-'rev-deleted-diff-view' => "หà¸\99ึà¹\88à¸\87à¹\83à¸\99รุà¹\88à¸\99à¸\9bรัà¸\9aà¸\9bรุà¸\87à¸\97ัà¹\89à¸\87หมà¸\94à¸\82อà¸\87รายà¸\81ารà¸\84วามà¹\81à¸\95à¸\81à¸\95à¹\88าà¸\87à¸\99ีà¹\89à¹\84à¸\94à¹\89à¸\96ูà¸\81'''ลà¸\9aออà¸\81'''
-à¸\84ุà¸\93สามารà¸\96à¸\94ูà¸\84วามà¹\81à¸\95à¸\81à¸\95à¹\88าà¸\87à¸\99ีà¹\89à¹\84à¸\94à¹\89 à¸\8bึà¹\88à¸\87รายละà¹\80อียà¸\94สามารà¸\96พบได้ใน[{{fullurl:{{#Special:Log}}/delete|page={{FULLPAGENAMEE}}}} ปูมการลบ]",
-'rev-suppressed-diff-view' => "หà¸\99ึà¹\88à¸\87à¹\83à¸\99รุà¹\88à¸\99à¸\9bรัà¸\9aà¸\9bรุà¸\87à¸\97ัà¹\89à¸\87หมà¸\94à¸\82อà¸\87รายà¸\81ารà¸\84วามà¹\81à¸\95à¸\81à¸\95à¹\88าà¸\87à¸\99ีà¹\89à¹\84à¸\94à¹\89à¸\96ูà¸\81'''ยัà¸\9aยัà¹\89à¸\87à¹\84วà¹\89'''
-à¸\84ุà¸\93สามารà¸\96à¸\94ูà¸\84วามà¹\81à¸\95à¸\81à¸\95à¹\88าà¸\87à¸\99ีà¹\89à¹\84à¸\94à¹\89 à¸\8bึà¹\88à¸\87รายละà¹\80อียà¸\94สามารà¸\96พบได้ใน[{{fullurl:{{#Special:Log}}/suppress|page={{FULLPAGENAMEE}}}} ปูมการยับยั้ง]",
+'rev-deleted-diff-view' => "รุà¹\88à¸\99หà¸\99ึà¹\88à¸\87à¸\82อà¸\87รายà¸\81ารà¸\84วามà¹\81à¸\95à¸\81à¸\95à¹\88าà¸\87à¸\99ีà¹\89'''à¸\96ูà¸\81ลà¸\9a'''
+à¸\84ุà¸\93สามารà¸\96à¸\94ูà¸\84วามà¹\81à¸\95à¸\81à¸\95à¹\88าà¸\87à¸\99ีà¹\89à¹\84à¸\94à¹\89 à¸£à¸²à¸¢à¸¥à¸°à¹\80อียà¸\94พบได้ใน[{{fullurl:{{#Special:Log}}/delete|page={{FULLPAGENAMEE}}}} ปูมการลบ]",
+'rev-suppressed-diff-view' => "รุà¹\88à¸\99หà¸\99ึà¹\88à¸\87à¸\82อà¸\87รายà¸\81ารà¸\84วามà¹\81à¸\95à¸\81à¸\95à¹\88าà¸\87à¸\99ีà¹\89'''à¸\96ูà¸\81ยัà¸\9aยัà¹\89à¸\87'''
+à¸\84ุà¸\93สามารà¸\96à¸\94ูà¸\84วามà¹\81à¸\95à¸\81à¸\95à¹\88าà¸\87à¸\99ีà¹\89à¹\84à¸\94à¹\89 à¸£à¸²à¸¢à¸¥à¸°à¹\80อียà¸\94พบได้ใน[{{fullurl:{{#Special:Log}}/suppress|page={{FULLPAGENAMEE}}}} ปูมการยับยั้ง]",
 'rev-delundel' => 'แสดง/ซ่อน',
 'rev-showdeleted' => 'แสดง',
-'revisiondelete' => 'รุà¹\88à¸\99à¸\81ารà¸\9bรัà¸\9aà¸\9bรุà¸\87 à¸\81ารลà¸\9a/à¸\81ารยà¹\89อà¸\99à¸\81ารลà¸\9a',
-'revdelete-nooldid-title' => 'à¹\84มà¹\88มีรุà¹\88à¸\99à¸\81ารà¸\9bรัà¸\9aà¸\9bรุà¸\87à¸\97ีà¹\88à¸\95à¹\89อà¸\87à¸\81าร',
-'revdelete-nooldid-text' => 'รุà¹\88à¸\99à¸\81ารà¸\9bรัà¸\9aà¸\9bรุà¸\87à¸\97ีà¹\88à¸\95à¹\89อà¸\87à¸\81ารà¹\84มà¹\88à¹\84à¸\94à¹\89à¸\81ำหà¸\99à¸\94 à¹\84มà¹\88สามารà¸\96à¹\83à¸\8aà¹\89à¸\84ำสัà¹\88à¸\87à¸\99ีà¹\89à¹\84à¸\94à¹\89',
+'revisiondelete' => 'ลà¸\9a/à¸\81ูà¹\89à¸\84ืà¸\99รุà¹\88à¸\99',
+'revdelete-nooldid-title' => 'ไม่มีรุ่นที่ต้องการ',
+'revdelete-nooldid-text' => 'à¸\84ุà¸\93มิà¹\84à¸\94à¹\89à¹\80à¸\88าะà¸\88à¸\87รุà¹\88à¸\99à¹\80à¸\9bà¹\89าหมายà¹\80à¸\9eืà¹\88อà¸\94ำà¹\80à¸\99ิà¸\99à¸\81ารà¸\9fัà¸\87à¸\81à¹\8cà¸\8aัà¸\99à¸\99ีà¹\89 à¸«à¸£à¸·à¸­à¹\84มà¹\88มีรุà¹\88à¸\99à¸\97ีà¹\88à¹\80à¸\88าะà¸\88à¸\87 à¸«à¸£à¸·à¸­à¸\84ุà¸\93à¸\81ำลัà¸\87à¸\9eยายามà¸\8bà¹\88อà¸\99รุà¹\88à¸\99à¸\9bัà¸\88à¸\88ุà¸\9aัà¸\99อยà¹\88าà¸\87à¹\83à¸\94อยà¹\88าà¸\87หà¸\99ึà¹\88à¸\87',
 'revdelete-nologtype-title' => 'ไม่ได้ระบุประเภทของปูม',
-'revdelete-nologtype-text' => 'à¸\84ุà¸\93à¹\84มà¹\88à¹\84à¸\94à¹\89ระà¸\9aุà¸\9bระà¹\80ภà¸\97à¸\82อà¸\87à¸\9bูมà¸\97ีà¹\88à¹\83à¸\8aà¹\89à¸\94ำà¹\80à¸\99ิà¸\99à¸\81ารà¸\99ีà¹\89à¸\95à¹\88อà¹\84à¸\94à¹\89',
+'revdelete-nologtype-text' => 'à¸\84ุà¸\93à¹\84มà¹\88à¹\84à¸\94à¹\89à¹\80à¸\88าะà¸\88à¸\87à¸\9bระà¹\80ภà¸\97à¸\82อà¸\87à¸\9bูมà¹\80à¸\9eืà¹\88อà¸\94ำà¹\80à¸\99ิà¸\99à¸\9bà¸\8fิà¸\9aัà¸\95ิà¸\81ารà¸\99ีà¹\89à¸\95à¹\88อ',
 'revdelete-nologid-title' => 'การแก้ไขในรายการแก้ไขไม่ถูกต้อง',
-'revdelete-nologid-text' => 'à¸\84ุà¸\93à¹\84มà¹\88à¹\84à¸\94à¹\89à¸\81ำหà¸\99à¸\94รายà¸\81ารà¹\81à¸\81à¹\89à¹\84à¸\82à¸\97ีà¹\88à¸\95à¹\89อà¸\87à¸\81ารà¸\81ระà¸\97ำà¸\81ระà¸\9aวà¸\99à¸\81ารà¸\99ีà¹\89หรือà¹\84มà¹\88à¸\9eà¸\9aรายà¸\81ารà¹\81à¸\81à¹\89à¹\84à¸\82à¸\97ีà¹\88à¸\81ำหà¸\99à¸\94',
+'revdelete-nologid-text' => 'à¸\84ุà¸\93มิà¹\84à¸\94à¹\89à¹\80à¸\88าะà¸\88à¸\87รายà¸\81ารà¸\9bูมà¹\80à¸\9bà¹\89าหมายà¹\80à¸\9eืà¹\88อà¸\94ำà¹\80à¸\99ิà¸\99à¸\81ารà¸\9fัà¸\87à¸\81à¹\8cà¸\8aัà¸\99à¸\99ีà¹\89 à¸«à¸£à¸·à¸­à¹\84มà¹\88มีรายà¸\81ารà¸\97ีà¹\88à¹\80à¸\88าะà¸\88à¸\87อยà¹\88าà¸\87à¹\83à¸\94อยà¹\88าà¸\87หà¸\99ึà¹\88à¸\87',
 'revdelete-no-file' => 'ไม่มีไฟล์ที่ระบุ',
-'revdelete-show-file-confirm' => 'à¸\84ุà¸\93à¹\81à¸\99à¹\88à¹\83à¸\88หรือà¹\84มà¹\88à¸\97ีà¹\88à¸\88ะà¸\94ูà¸\89à¸\9aัà¸\9aà¸\9bรัà¸\9aà¸\9bรุà¸\87à¸\97ีà¹\88à¸\96ูà¸\81ลà¸\9aà¸\82อà¸\87à¹\84à¸\9fลà¹\8c "<nowiki>$1</nowiki>" à¸\82อà¸\87วัà¸\99à¸\97ีà¹\88 $2 à¹\80วลา $3?',
+'revdelete-show-file-confirm' => 'à¸\84ุà¸\93à¹\81à¸\99à¹\88à¹\83à¸\88à¸\97ีà¹\88à¸\88ะà¸\94ูรุà¹\88à¸\99à¸\97ีà¹\88à¸\96ูà¸\81ลà¸\9aà¸\82อà¸\87à¹\84à¸\9fลà¹\8c "<nowiki>$1</nowiki>" à¹\80มืà¹\88อวัà¸\99à¸\97ีà¹\88 $2 à¹\80วลา $3 à¸«à¸£à¸·à¸­à¹\84มà¹\88',
 'revdelete-show-file-submit' => 'ใช่',
 'revdelete-selected' => "'''{{PLURAL:$2|รุ่นการปรับปรุงที่ถูกเลือก|รุ่นการปรับปรุงที่ถูกเลือก}}ของ [[:$1]] :'''",
-'logdelete-selected' => "'''{{PLURAL:$1|à¹\80หà¸\95ุà¸\81ารà¸\93à¹\8cà¸\9aัà¸\99à¸\97ึà¸\81à¸\97ีà¹\88à¸\96ูà¸\81à¹\80ลือà¸\81|à¹\80หà¸\95ุà¸\81ารà¸\93à¹\8cà¸\9aัà¸\99à¸\97ึà¸\81à¸\97ีà¹\88à¸\96ูà¸\81เลือก}} :'''",
-'revdelete-text' => "'''รุ่นการปรับปรุงและเหตุการณ์ที่ถูกลบ จะยังคงปรากฏในส่วนประวัติและบันทึกของหน้า แต่ส่วนของเนื้อหาจะไม่สามารถเข้าถึงได้โดยสาธารณะ'''
-à¸\9cูà¹\89à¸\94ูà¹\81ลระà¸\9aà¸\9aà¸\84à¸\99อืà¹\88à¸\99à¸\9aà¸\99 {{SITENAME}} à¸\88ะยัà¸\87à¸\84à¸\87สามารà¸\96à¹\80à¸\82à¹\89าà¸\96ึà¸\87à¹\80à¸\99ืà¹\89อหาà¸\97ีà¹\88à¸\96ูà¸\81à¸\8bà¹\88อà¸\99 à¹\81ละสามารà¸\96à¸\81ูà¹\89à¸\84ืà¸\99à¸\82ึà¹\89à¸\99มาอีà¸\81à¸\84รัà¹\89à¸\87à¹\83à¸\99ลัà¸\81ษà¸\93ะà¹\80à¸\94ิมà¹\80à¸\8aà¹\88à¸\99à¸\99ีà¹\89 à¹\80วà¹\89à¸\99à¹\81à¸\95à¹\88à¸\88ะมีà¸\81ารà¸\95ัà¹\89à¸\87à¸\84à¹\88าà¸\81ารà¸\84วà¸\9aà¸\84ุมเพิ่มเติม",
-'revdelete-confirm' => 'à¸\81รุà¸\93ายืà¸\99ยัà¸\99วà¹\88าà¸\84ุà¸\93à¸\95ัà¹\89à¸\87à¹\83à¸\88à¸\97ีà¹\88à¸\88ะลà¸\9aà¸\88ริà¸\87 à¹\81ละà¹\80à¸\82à¹\89าà¹\83à¸\88à¸\9cลà¸\81ระà¸\97à¸\9aหลัà¸\87à¸\88าà¸\81à¸\99ีà¹\89à¸\97ีà¹\88à¸\88ะà¹\80à¸\81ิà¸\94à¸\82ึà¹\89à¸\99 à¹\81ละà¸\81ระà¸\97ำà¸\81ายภายใต้[[{{MediaWiki:Policy-url}}|นโยบาย]]',
+'logdelete-selected' => "'''{{PLURAL:$1|à¹\80หà¸\95ุà¸\81ารà¸\93à¹\8cà¸\9bูมà¸\97ีà¹\88à¹\80ลือà¸\81|à¹\80หà¸\95ุà¸\81ารà¸\93à¹\8cà¸\9bูมà¸\97ีà¹\88เลือก}} :'''",
+'revdelete-text' => "'''รุ่นการปรับปรุงและเหตุการณ์ที่ถูกลบยังปรากฏในประวัติและปูมของหน้า แต่สาธารณะไม่สามารถเข้าถึงเนื้อหาบางส่วนได้'''
+à¸\9cูà¹\89à¸\94ูà¹\81ลระà¸\9aà¸\9aà¸\84à¸\99อืà¹\88à¸\99à¸\9aà¸\99 {{SITENAME}} à¸¢à¸±à¸\87สามารà¸\96à¹\80à¸\82à¹\89าà¸\96ึà¸\87à¹\80à¸\99ืà¹\89อหาà¸\97ีà¹\88à¸\96ูà¸\81à¸\8bà¹\88อà¸\99 à¹\81ละสามารà¸\96à¸\81ูà¹\89à¸\84ืà¸\99อีà¸\81à¸\84รัà¹\89à¸\87à¹\83à¸\99ลัà¸\81ษà¸\93ะà¹\80à¸\94ิมà¹\80à¸\8aà¹\88à¸\99à¸\99ีà¹\89 à¹\80วà¹\89à¸\99à¹\81à¸\95à¹\88à¸\88ะมีà¸\81ารà¸\81ำหà¸\99à¸\94à¸\81ารà¸\88ำà¸\81ัà¸\94เพิ่มเติม",
+'revdelete-confirm' => 'à¸\81รุà¸\93ายืà¸\99ยัà¸\99วà¹\88าà¸\84ุà¸\93มีà¹\80à¸\88à¸\95à¸\99าลà¸\9aà¸\88ริà¸\87 à¹\81ละà¹\80à¸\82à¹\89าà¹\83à¸\88à¸\9cลà¸\81ระà¸\97à¸\9a à¹\81ละà¸\81ระà¸\97ำภายใต้[[{{MediaWiki:Policy-url}}|นโยบาย]]',
 'revdelete-suppress-text' => "การระงับควรใช้ '''เฉพาะ''' กรณีต่อไปนี้:
 * ข้อมูลที่อาจหมิ่นประมาท
 * ข้อมูลส่วนบุคคลที่ไม่เหมาะสม
 *: ''ที่อยู่บ้านและหมายเลขโทรศัพท์บ้าน, หมายเลขประกันสังคม, ฯลฯ''",
-'revdelete-legend' => 'ระà¸\9aุà¸\81ารà¸\84วà¸\9aà¸\84ุม:',
-'revdelete-hide-text' => 'ซ่อนข้อความรุ่นที่ปรับปรุง',
+'revdelete-legend' => 'à¸\95ัà¹\89à¸\87à¸\81ารà¸\88ำà¸\81ัà¸\94à¸\97ัศà¸\99วิสัย:',
+'revdelete-hide-text' => 'ซ่อนข้อความรุ่น',
 'revdelete-hide-image' => 'ซ่อนเนื้อหาไฟล์',
-'revdelete-hide-name' => 'à¸\8bà¹\88อà¸\99à¸\81ารà¸\81ระà¸\97ำและเป้าหมาย',
-'revdelete-hide-comment' => 'à¸\8bà¹\88อà¸\99à¸\84วามà¹\80หà¹\87à¸\99à¸\81ารà¹\81à¸\81à¹\89à¹\84à¸\82',
-'revdelete-hide-user' => 'à¸\8bà¹\88อà¸\99à¸\8aืà¹\88อà¸\9cูà¹\89à¹\81à¸\81à¹\89à¹\84à¸\82à¹\81ละหมายà¹\80ลà¸\82à¹\84อà¸\9eี',
+'revdelete-hide-name' => 'à¸\8bà¹\88อà¸\99à¸\9bà¸\8fิà¸\9aัà¸\95ิà¸\81ารและเป้าหมาย',
+'revdelete-hide-comment' => 'à¸\8bà¹\88อà¸\99à¸\84ำอà¸\98ิà¸\9aายอยà¹\88าà¸\87ยà¹\88อ',
+'revdelete-hide-user' => 'à¸\8bà¹\88อà¸\99à¸\8aืà¹\88อà¸\9cูà¹\89à¹\83à¸\8aà¹\89/หมายà¹\80ลà¸\82à¹\84อà¸\9eีà¸\9cูà¹\89à¹\80à¸\82ียà¸\99',
 'revdelete-hide-restricted' => 'ระงับข้อมูลจากผู้ดูแลระบบเช่นเดียวกับผู้ใช้อื่น',
 'revdelete-radio-same' => '(ไม่เปลี่ยนแปลง)',
 'revdelete-radio-set' => 'ใช่',
 'revdelete-radio-unset' => 'ไม่',
-'revdelete-suppress' => 'à¸\8bà¹\88อà¸\99à¸\82à¹\89อมูลà¸\88าà¸\81à¸\9cูà¹\89à¸\94ูà¹\81ลระà¸\9aà¸\9aà¹\80à¸\8aà¹\88à¸\99à¹\80à¸\94ียวà¸\81ัà¸\9aà¸\9cูà¹\89à¹\83à¸\8aà¹\89à¸\97ัà¹\88วà¹\84à¸\9b',
-'revdelete-unsuppress' => 'ลà¸\9aà¸\81ารà¸\84วà¸\9aà¸\84ุมออà¸\81สำหรัà¸\9aรุà¹\88à¸\99à¸\81ารà¸\9bรัà¸\9aà¸\9bรุà¸\87à¸\97ีà¹\88à¸\96ูà¸\81à¹\80รียà¸\81à¸\81ลัà¸\9a',
+'revdelete-suppress' => 'à¸\8bà¹\88อà¸\99à¸\82à¹\89อมูลà¸\88าà¸\81à¸\9cูà¹\89à¸\94ูà¹\81ลระà¸\9aà¸\9aà¹\80à¸\8aà¹\88à¸\99à¹\80à¸\94ียวà¸\81ัà¸\9aà¸\9cูà¹\89à¹\83à¸\8aà¹\89อืà¹\88à¸\99',
+'revdelete-unsuppress' => 'ลà¸\9aà¸\81ารà¸\88ำà¸\81ัà¸\94สำหรัà¸\9aรุà¹\88à¸\99à¸\97ีà¹\88à¸\81ูà¹\89à¸\84ืà¸\99',
 'revdelete-log' => 'เหตุผล:',
 'revdelete-submit' => 'ใช้กับ{{PLURAL:$1|รุ่น|รุ่น}}ที่เลือก',
-'revdelete-success' => "'''à¸\81ารà¹\81สà¸\94à¸\87à¸\9cลà¸\82อà¸\87รุà¹\88à¸\99à¸\9bรัà¸\9aà¸\9bรุà¸\87à¸\96ูà¸\81à¸\81ำหà¸\99à¸\94à¸\84à¹\88าà¹\80รียà¸\9aรà¹\89อย'''",
-'revdelete-failure' => "'''à¸\81ารà¹\81สà¸\94à¸\87à¸\9cลà¸\82อà¸\87รุà¹\88à¸\99à¸\9bรัà¸\9aà¸\9bรุà¸\87à¹\84มà¹\88สามารà¸\96à¸\81ำหà¸\99à¸\94à¸\84à¹\88าได้:'''
+'revdelete-success' => "'''à¸\9bรัà¸\9aà¸\97ัศà¸\99วิสัยรุà¹\88à¸\99สำà¹\80รà¹\87à¸\88'''",
+'revdelete-failure' => "'''à¹\84มà¹\88สามารà¸\96à¸\9bรัà¸\9aà¸\97ัศà¸\99วิสัยà¸\82อà¸\87รุà¹\88à¸\99ได้:'''
 $1",
-'logdelete-success' => 'การเข้าดูเหตุการณ์ถูกกำหนดค่าเรียบร้อย',
-'logdelete-failure' => "'''à¹\84มà¹\88สามารà¸\96à¸\95ัà¹\89à¸\87à¸\84à¹\88าà¸\81ารà¹\81สà¸\94à¸\87à¸\9cลà¸\82อà¸\87รายà¸\81ารà¹\81à¸\81à¹\89à¹\84à¸\82ได้:'''
+'logdelete-success' => "'''ตั้งทัศนวิสัยปูมสำเร็จ'''",
+'logdelete-failure' => "'''à¹\84มà¹\88สามารà¸\96à¸\95ัà¹\89à¸\87à¸\97ัศà¸\99วิสัยà¸\82อà¸\87à¸\9bุมได้:'''
 $1",
 'revdel-restore' => 'เปลี่ยนทัศนวิสัย',
 'revdel-restore-deleted' => 'รุ่นที่ถูกลบ',
-'revdel-restore-visible' => 'à¸\81ารà¹\81à¸\81à¹\89à¹\84à¸\82ที่มองเห็นได้',
+'revdel-restore-visible' => 'รุà¹\88à¸\99ที่มองเห็นได้',
 'pagehist' => 'ประวัติหน้า',
-'deletedhist' => 'ลà¸\9aà¸\9bระวัà¸\95ิ',
-'revdelete-hide-current' => 'à¹\80à¸\81ิà¸\94à¸\84วามà¸\9cิà¸\94à¸\9eลาà¸\94à¹\83à¸\99à¸\81ารà¸\8bà¹\88อà¸\99à¸\89à¸\9aัà¸\9aà¸\9bรัà¸\9aà¸\9bรุà¸\87à¹\83à¸\99วัà¸\99à¸\97ีà¹\88 $2 à¹\80วลา $1: à¸\99ีà¹\88à¸\84ือà¸\89à¸\9aัà¸\9aà¸\9bรัà¸\87à¸\9bรุà¸\87ปัจจุบัน
+'deletedhist' => 'à¸\9bระวัà¸\95ิà¸\97ีà¹\88à¸\96ูà¸\81ลà¸\9a',
+'revdelete-hide-current' => 'à¹\80à¸\81ิà¸\94à¸\84วามà¸\9cิà¸\94à¸\9eลาà¸\94à¹\83à¸\99à¸\81ารà¸\8bà¹\88อà¸\99รุà¹\88à¸\99à¹\80มืà¹\88อวัà¸\99à¸\97ีà¹\88 $2 à¹\80วลา $1: à¸\99ีà¹\88à¸\84ือรุà¹\88à¸\99à¸\81ารà¹\81à¸\81à¹\89à¹\84à¸\82ปัจจุบัน
 ไม่สามารถซ่อนได้',
-'revdelete-show-no-access' => 'à¹\80à¸\81ิà¸\94à¸\84วามà¸\9cิà¸\94à¸\9eลาà¸\94à¹\83à¸\99à¸\81ารà¸\94ูà¸\89à¸\9aัà¸\9aà¸\9bรัà¸\9aà¸\9bรุà¸\87à¹\83à¸\99วัà¸\99à¸\97ีà¹\88 $2 à¹\80วลา $1: à¸\89à¸\9aัà¸\9aà¸\9bรัà¸\9aà¸\9bรุà¸\87à¸\99ีà¹\89à¸\96ูà¸\81à¸\81ำหà¸\99à¸\94à¹\83หà¹\89 "à¸\88ำà¸\81ัà¸\94à¸\81ารà¸\94ู"
-à¸\84ุà¸\93à¹\84มà¹\88มีสิà¸\97à¸\98ิà¹\8cà¸\94ูà¸\89à¸\9aัà¸\9aà¸\9bรัà¸\9aà¸\9bรุà¸\87ดังกล่าว',
-'revdelete-modify-no-access' => 'à¹\80à¸\81ิà¸\94à¸\84วามà¸\9cิà¸\94à¸\9eลาà¸\94à¹\83à¸\99à¸\81ารà¹\81à¸\81à¹\89à¹\84à¸\82à¸\89à¸\9aัà¸\9aà¸\9bรัà¸\9aà¸\9bรุà¸\87à¹\83à¸\99วัà¸\99à¸\97ีà¹\88 $2 à¹\80วลา $1: à¸\89à¸\9aัà¸\9aà¸\9bรัà¸\9aà¸\9bรุà¸\87à¸\99ีà¹\89à¸\96ูà¸\81à¸\81ำหà¸\99à¸\94à¹\83หà¹\89 "à¸\88ำà¸\81ัà¸\94à¸\81ารà¹\81à¸\81à¹\89à¹\84à¸\82"
-à¸\84ุà¸\93à¹\84มà¹\88มีสิà¸\97à¸\98ิà¹\8cà¹\81à¸\81à¹\89à¹\84à¸\82à¸\89à¸\9aัà¸\9aà¸\9bรัà¸\9aà¸\9bรุà¸\87ดังกล่าว',
+'revdelete-show-no-access' => 'à¹\80à¸\81ิà¸\94à¸\84วามà¸\9cิà¸\94à¸\9eลาà¸\94à¹\83à¸\99à¸\81ารà¹\81สà¸\94à¸\87รุà¹\88à¸\99à¹\80มืà¹\88อวัà¸\99à¸\97ีà¹\88 $2 à¹\80วลา $1: à¸\89à¸\9aัà¸\9aà¸\9bรัà¸\9aà¸\9bรุà¸\87à¸\99ีà¹\89à¸\96ูà¸\81à¸\81ำหà¸\99à¸\94à¹\83หà¹\89 "à¸\96ูà¸\81à¸\88ำà¸\81ัà¸\94"
+à¸\84ุà¸\93à¹\84มà¹\88มีสิà¸\97à¸\98ิà¹\80à¸\82à¹\89าà¸\96ึà¸\87รุà¹\88à¸\99ดังกล่าว',
+'revdelete-modify-no-access' => 'à¹\80à¸\81ิà¸\94à¸\84วามà¸\9cิà¸\94à¸\9eลาà¸\94à¹\83à¸\99à¸\81ารà¹\81à¸\81à¹\89à¹\84à¸\82รุà¹\88à¸\99à¸\81ารà¹\81à¸\81à¹\89à¹\84à¸\82à¹\80มืà¹\88อวัà¸\99à¸\97ีà¹\88 $2 à¹\80วลา $1: à¸£à¸¸à¹\88à¸\99à¸\81ารà¹\81à¸\81à¹\89à¹\84à¸\82à¸\99ีà¹\89à¸\96ูà¸\81à¸\81ำหà¸\99à¸\94à¹\83หà¹\89 "à¸\96ูà¸\81à¸\88ำà¸\81ัà¸\94"
+à¸\84ุà¸\93à¹\84มà¹\88มีสิà¸\97à¸\98ิà¹\8cà¹\80à¸\82à¹\89าà¸\96ึà¸\87รุà¹\88à¸\99ดังกล่าว',
 'revdelete-modify-missing' => 'เกิดความผิดพลาดในการแก้ไขฉบับปรังปรุงหมายเลข $1: รายการนี้สูญหายจากฐานข้อมูล!',
-'revdelete-no-change' => "'''à¸\84ำà¹\80à¸\95ือà¸\99:''' à¸\89à¸\9aัà¸\9aà¸\9bรัà¸\9aà¸\9bรุà¸\87วัà¸\99à¸\97ีà¹\88 $2 à¹\80วลา $1 à¸¡à¸µà¸\81ารà¸\95ัà¹\89à¸\87à¸\84à¹\88าà¸\81ารà¹\83หà¹\89à¸\94ูà¸\97ีà¹\88รà¹\89อà¸\87ขออยู่แล้ว",
-'revdelete-concurrent-change' => 'à¹\80à¸\81ิà¸\94à¸\84วามà¸\9cิà¸\94à¸\9eลาà¸\94à¹\83à¸\99à¸\81ารà¹\81à¸\81à¹\89à¹\84à¸\82à¸\89à¸\9aัà¸\9aà¸\9bรัà¸\9aà¸\9bรุà¸\87à¹\83à¸\99วัà¸\99à¸\97ีà¹\88 $2 à¹\80วลา $1: à¸ªà¸\96าà¸\99ะà¸\82อà¸\87à¸\89à¸\9aัà¸\9aà¸\9bรัà¸\9aà¸\9bรุà¸\87à¹\84à¸\94à¹\89à¸\96ูà¸\81à¹\80à¸\9bลีà¹\88ยà¸\99à¹\82à¸\94ยà¹\83à¸\84รà¸\9aาà¸\87à¸\84à¸\99à¹\83à¸\99à¸\82à¸\93ะà¸\97ีà¹\88à¸\84ุà¸\93à¸\9eยายามà¹\81à¸\81à¹\89à¹\84à¸\82อยูà¹\88
-à¸\81รุà¸\93าà¸\95รวà¸\88สอà¸\9aà¸\9bระวัà¸\95ิà¸\81ารà¹\81à¸\81à¹\89à¹\84à¸\82',
-'revdelete-only-restricted' => 'à¹\80à¸\81ิà¸\94à¸\84วามà¸\9cิà¸\94à¸\9eลาà¸\94à¹\83à¸\99à¸\81ารà¸\8bà¹\88อà¸\99à¸\89à¸\9aัà¸\9aà¸\9bรัà¸\9aà¸\9bรุà¸\87à¹\83à¸\99วัà¸\99à¸\97ีà¹\88 $2 à¹\80วลา $1: à¸\84ุà¸\93à¹\84มà¹\88สามารà¸\96ยัà¸\9aยัà¹\89à¸\87à¸\9cูà¹\89à¸\94ูà¹\81ลระà¸\9aà¸\9aà¸\88าà¸\81à¸\81ารà¸\94ูà¸\89à¸\9aัà¸\9aà¸\9bรัà¸\9aà¸\9bรุà¸\87à¸\99ีà¹\89à¹\82à¸\94ยà¸\97ีà¹\88à¹\84มà¹\88à¹\84à¸\94à¹\89à¹\80ลือà¸\81à¸\95ัวà¹\80ลือà¸\81à¸\81ารà¹\83หà¹\89à¸\94ูอืà¹\88à¸\99à¹\86',
+'revdelete-no-change' => "'''à¸\84ำà¹\80à¸\95ือà¸\99:''' à¸£à¸¸à¹\88à¸\99à¹\80มืà¹\88อวัà¸\99à¸\97ีà¹\88 $2 à¹\80วลา $1 à¸¡à¸µà¸\81ารà¸\95ัà¹\89à¸\87à¸\84à¹\88าà¸\97ัศà¸\99วิสัยà¸\95ามà¸\97ีà¹\88ขออยู่แล้ว",
+'revdelete-concurrent-change' => 'à¹\80à¸\81ิà¸\94à¸\84วามà¸\9cิà¸\94à¸\9eลาà¸\94à¹\83à¸\99à¸\81ารà¹\81à¸\81à¹\89à¹\84à¸\82รุà¹\88à¸\99à¹\80มืà¹\88อวัà¸\99à¸\97ีà¹\88 $2 à¹\80วลา $1: à¸¡à¸µà¸\9cูà¹\89อืà¹\88à¸\99à¹\80à¸\9bลีà¹\88ยà¸\99สà¸\96าà¸\99ะà¸\82อà¸\87รุà¹\88à¸\99à¸\82à¸\93ะà¸\97ีà¹\88à¸\84ุà¸\93à¸\9eยายามà¹\81à¸\81à¹\89à¹\84à¸\82
+à¸\81รุà¸\93าà¸\95รวà¸\88สอà¸\9aà¸\9bูม',
+'revdelete-only-restricted' => 'à¹\80à¸\81ิà¸\94à¸\84วามà¸\9cิà¸\94à¸\9eลาà¸\94à¹\83à¸\99à¸\81ารà¸\8bà¹\88อà¸\99รุà¹\88à¸\99à¹\80มืà¹\88อวัà¸\99à¸\97ีà¹\88 $2 à¹\80วลา $1: à¸\84ุà¸\93à¹\84มà¹\88สามารà¸\96ยัà¸\9aยัà¹\89à¸\87à¸\9cูà¹\89à¸\94ูà¹\81ลระà¸\9aà¸\9aมิà¹\83หà¹\89à¸\94ูรุà¹\88à¸\99à¸\99ีà¹\89à¹\84à¸\94à¹\89à¹\82à¸\94ยà¹\84มà¹\88à¹\80ลือà¸\81à¸\95ัวà¹\80ลือà¸\81à¸\97ัศà¸\99วิสัยอืà¹\88à¸\99à¸\94à¹\89วย',
 'revdelete-reason-dropdown' => '*เหตุผลการลบทั่วไป
 ** ละเมิดลิขสิทธิ์
-** มีข้อมูลส่วนบุคคลที่ไม่เหมาะสม
-** มีข้อมูลที่อาจหมิ่นประมาท',
-'revdelete-otherreason' => 'เหตุผลอื่นหรือเหตุผลเพิ่มเติม:',
+** ความเห็นไม่เหมาะสมหรือข้อมูลส่วนบุคคล
+** ชื่อผู้ใช้ไม่เหมาะสม
+** ข้อมูลที่อาจหมิ่นประมาท',
+'revdelete-otherreason' => 'เหตุผลอื่น/เพิ่มเติม:',
 'revdelete-reasonotherlist' => 'เหตุผลอื่น',
 'revdelete-edit-reasonlist' => 'แก้ไขเหตุผลการลบ',
-'revdelete-offender' => 'à¸\9cูà¹\89à¹\80à¸\82ียà¸\99à¸\82อà¸\87รุà¹\88à¸\99:',
+'revdelete-offender' => 'ผู้เขียนรุ่น:',
 
 # Suppression log
-'suppressionlog' => 'à¸\9aัà¸\99à¸\97ึà¸\81การระงับ',
+'suppressionlog' => 'à¸\9bูมการระงับ',
 'suppressionlogtext' => 'ด้านล่างนี้คือรายการการลบและการบล็อกที่เกี่ยวข้องกับเนื้อหาที่ถูกซ่อนจากผู้ดูแลระบบ
 ดู[[Special:BlockList|รายการบล็อกไอพี]]สำหรับการบล็อกและการระงับในปัจจุบัน',
 
@@ -1075,20 +1100,20 @@ $1",
 'mergehistory' => 'ประวัติการรวมหน้า',
 'mergehistory-header' => 'หน้านี้ไว้ให้คุณใช้รวมรุ่นต่างๆ ในประวัติการแก้ไขของหน้าต้นทาง ไปยังหน้าใหม่.
 ก่อนดำเนินการ ควรให้แน่ใจก่อนว่าการดำเนินการนี้จะไม่ทำให้ความความต่อเนื่องของประวัติหน้าเก่าๆ เสียไป.',
-'mergehistory-box' => 'รวมรุà¹\88à¸\99à¸\95à¹\88าà¸\87à¹\86 à¸\82อà¸\87หà¸\99à¹\89าà¸\97ัà¹\89à¸\87สอà¸\87à¹\80à¸\82à¹\89าà¸\94à¹\89วยà¸\81ัà¸\99:',
+'mergehistory-box' => 'รวมรุà¹\88à¸\99à¸\82อà¸\87หà¸\99à¹\89าà¸\97ัà¹\89à¸\87สอà¸\87:',
 'mergehistory-from' => 'หน้าต้นทาง:',
 'mergehistory-into' => 'หน้าปลายทาง:',
 'mergehistory-list' => 'ประวัติการแก้ไขที่สามารถรวมได้',
-'mergehistory-merge' => 'รุà¹\88à¸\99à¸\95à¹\88อà¹\84à¸\9bà¸\99ีà¹\89à¸\82อà¸\87หà¸\99à¹\89า [[:$1]] à¸ªà¸²à¸¡à¸²à¸£à¸\96รวมà¹\80à¸\82à¹\89าà¹\84à¸\9bยัà¸\87หà¸\99à¹\89า [[:$2]] à¹\84à¸\94à¹\89.  à¹\83หà¹\89à¹\80ลือà¸\81à¸\81à¸\94à¸\9bุà¹\88มà¹\80à¸\9eืà¹\88อรวมà¹\80à¸\89à¸\9eาะรุà¹\88à¸\99à¸\97ีà¹\88สรà¹\89าà¸\87à¸\99ัà¸\9aà¸\95ัà¹\89à¸\87à¹\81à¸\95à¹\88à¹\80วลาà¸\97ีà¹\88à¸\81ำหà¸\99à¸\94à¸\82ึà¹\89à¸\99à¹\84à¸\9b.  à¸­à¸¢à¹\88าลืมวà¹\88าà¸\81ารà¹\83à¸\8aà¹\89ลิà¸\87à¸\81à¹\8cà¸\99ำà¸\97าà¸\87 (navigation link) à¸\88ะà¹\84à¸\9bลà¹\89าà¸\87à¸\84à¹\88าà¹\83à¸\99à¸\8aà¹\88อà¸\87à¸\99ีà¹\89à¸\81ลัà¸\9aà¹\80à¸\9bà¹\87à¸\99à¸\84à¹\88าà¸\95ัà¹\89à¸\87à¸\95à¹\89à¸\99à¹\80หมือà¸\99à¹\80à¸\94ิม.',
+'mergehistory-merge' => 'รุà¹\88à¸\99à¸\95à¹\88อà¹\84à¸\9bà¸\99ีà¹\89à¸\82อà¸\87หà¸\99à¹\89า [[:$1]] à¸ªà¸²à¸¡à¸²à¸£à¸\96รวมà¹\80à¸\82à¹\89าà¸\81ัà¸\9aหà¸\99à¹\89า [[:$2]] à¹\84à¸\94à¹\89 à¹\83à¸\8aà¹\89à¸\84อลัมà¸\99à¹\8cà¸\9bุà¹\88มรวมà¹\80à¸\89à¸\9eาะรุà¹\88à¸\99à¸\97ีà¹\88สรà¹\89าà¸\87à¹\80วลาà¸\97ีà¹\88à¸\81ำหà¸\99à¸\94หรือà¸\81à¹\88อà¸\99หà¸\99à¹\89าà¸\99ัà¹\89à¸\99 à¸«à¸¡à¸²à¸¢à¹\80หà¸\95ุวà¹\88าà¸\81ารà¹\83à¸\8aà¹\89ลิà¸\87à¸\81à¹\8cà¸\99ำà¸\97าà¸\87à¸\88ะà¸\95ัà¹\89à¸\87à¸\84อลัมà¸\99à¹\8cà¸\99ีà¹\89à¹\83หมà¹\88',
 'mergehistory-go' => 'แสดงการแก้ไขที่สามารถรวมได้',
-'mergehistory-submit' => 'รวมรุ่นต่างๆ',
+'mergehistory-submit' => 'รวมรุ่น',
 'mergehistory-empty' => 'ไม่มีรุ่นที่สามารถรวมได้',
-'mergehistory-success' => '[[:$1]] จำนวน $3 {{PLURAL:$3|รุ่น|รุ่น}} ได้ถูกรวมเข้าไปยัง [[:$2]] เรียบร้อยแล้ว',
-'mergehistory-fail' => 'à¹\84มà¹\88สามารà¸\96รวมà¸\9bระวัà¸\95ิà¸\81ารà¹\81à¸\81à¹\89à¹\84à¸\82à¹\84à¸\94à¹\89 à¹\82à¸\9bรà¸\94à¸\95รวà¸\88สอà¸\9aà¸\84à¹\88าà¸\95ัวà¹\81à¸\9bรà¸\82อà¸\87 à¸«à¸\99à¹\89า à¹\81ละ à¹\80วลา อีกครั้ง',
+'mergehistory-success' => 'ประวัติ $3 รุ่นของ [[:$1]] ได้ถูกรวมเข้ากับ [[:$2]] แล้ว',
+'mergehistory-fail' => 'à¹\84มà¹\88สามารà¸\96รวมà¸\9bระวัà¸\95ิà¸\81ารà¹\81à¸\81à¹\89à¹\84à¸\82à¹\84à¸\94à¹\89 à¹\82à¸\9bรà¸\94à¸\95รวà¸\88สอà¸\9aà¸\84à¹\88าà¸\95ัวà¹\81à¸\9bรหà¸\99à¹\89าà¹\81ละà¹\80วลาอีกครั้ง',
 'mergehistory-no-source' => 'ไม่มีหน้าต้นทาง $1 อยู่ในสารบบ',
 'mergehistory-no-destination' => 'ไม่มีหน้าปลายทาง $1 อยู่ในสารบบ',
-'mergehistory-invalid-source' => 'หัวà¹\80รืà¹\88อà¸\87à¸\82อà¸\87หà¸\99à¹\89าà¸\95à¹\89à¸\99à¸\97าà¸\87à¸\95à¹\89อà¸\87à¸\95รà¸\87à¸\95ามà¸\82à¹\89อà¸\81ำหà¸\99à¸\94 (à¹\80à¸\8aà¹\88à¸\99 à¹\84มà¹\88มีà¸\95ัวอัà¸\81ษรà¸\97ีà¹\88à¹\84มà¹\88สามารà¸\96à¹\83à¸\8aà¹\89à¹\83à¸\99หัวà¹\80รืà¹\88อà¸\87à¹\84à¸\94à¹\89)',
-'mergehistory-invalid-destination' => 'หัวà¹\80รืà¹\88อà¸\87à¸\82อà¸\87หà¸\99à¹\89าà¸\9bลายà¸\97าà¸\87à¸\95à¹\89อà¸\87à¸\95รà¸\87à¸\95ามà¸\82à¹\89อà¸\81ำหà¸\99à¸\94 (à¹\80à¸\8aà¹\88à¸\99 à¹\84มà¹\88มีà¸\95ัวอัà¸\81ษรà¸\97ีà¹\88à¹\84มà¹\88สามารà¸\96à¹\83à¸\8aà¹\89à¹\83à¸\99หัวà¹\80รืà¹\88อà¸\87à¹\84à¸\94à¹\89)',
+'mergehistory-invalid-source' => 'หัวà¹\80รืà¹\88อà¸\87à¸\82อà¸\87หà¸\99à¹\89าà¸\95à¹\89à¸\99à¸\97าà¸\87à¸\95à¹\89อà¸\87สมà¹\80หà¸\95ุสมà¸\9cล',
+'mergehistory-invalid-destination' => 'à¸\8aืà¹\88อà¹\80รืà¹\88อà¸\87à¸\82อà¸\87หà¸\99à¹\89าà¸\9bลายà¸\97าà¸\87à¸\95à¹\89อà¸\87สมà¹\80หà¸\95ุสมà¸\9cล',
 'mergehistory-autocomment' => 'ย้าย [[:$1]] ไปยัง [[:$2]]',
 'mergehistory-comment' => 'ย้าย [[:$1]] ไปยัง [[:$2]]: $3',
 'mergehistory-same-destination' => 'หน้าต้นทางและปลายทางเป็นหน้าเดียวกันไม่ได้',
@@ -1098,61 +1123,61 @@ $1",
 'mergelog' => 'ปูมการรวมหน้า',
 'pagemerge-logentry' => 'ย้าย [[$1]] ไปยัง [[$2]] (รุ่นขึ้นอยู่กับ $3)',
 'revertmerge' => 'ยกเลิกการรวมหน้า',
-'mergelogpagetext' => 'à¸\94à¹\89าà¸\99ลà¹\88าà¸\87à¸\99ีà¹\89à¹\81สà¸\94à¸\87รายà¸\81ารลà¹\88าสุà¸\94à¸\82อà¸\87à¸\81ารรวมà¸\9bระวัà¸\95ิหà¸\99à¹\89าหà¸\99ึà¹\88à¸\87à¹\86 à¹\80à¸\82à¹\89าà¸\81ัà¸\9aอีà¸\81หà¸\99à¹\89าหà¸\99ึà¹\88à¸\87',
+'mergelogpagetext' => 'ด้านล่างนี้แสดงรายการล่าสุดของการรวมประวัติหน้าหนึ่งเข้ากับอีกหน้าหนึ่ง',
 
 # Diffs
 'history-title' => 'ประวัติรุ่นปรับปรุงของ "$1"',
 'difference-title' => 'ความแตกต่างระหว่างรุ่นของ "$1"',
 'difference-title-multipage' => 'ความแตกต่างระหว่างหน้า "$1" และ "$2"',
-'difference-multipage' => '(ความแตกต่างระหว่างหน้าต่างๆ)',
+'difference-multipage' => '(ความแตกต่างระหว่างหน้าต่าง ๆ)',
 'lineno' => 'แถว $1:',
 'compareselectedversions' => 'เปรียบเทียบสองรุ่นที่เลือก',
-'showhideselectedversions' => 'แสดง/ซ่อน รุ่นที่เลือก',
+'showhideselectedversions' => 'แสดง/ซ่อนรุ่นที่เลือก',
 'editundo' => 'ย้อน',
-'diff-multi' => 'การแก้ไข({{PLURAL:$1|หนึ่งรุ่นระหว่างรุ่นที่เปรียบเทียบ|$1 รุ่นระหว่างรุ่นที่เปรียบเทียบ}} โดย {{PLURAL:$2|หนึ่งผู้ใช้|$2 ผู้ใช้}} ไม่แสดงผล)',
-'diff-multi-manyusers' => 'การแก้ไข({{PLURAL:$1|หนึ่งรุ่นระหว่างรุ่นที่เปรียบเทียบ|$1 รุ่นระหว่างรุ่นที่เปรียบเทียบ}} โดยผู้ใช้มากกว่า {{PLURAL:$2|หนึ่งผู้ใช้|$2 ผู้ใช้}} ไม่แสดงผล)',
+'diff-multi' => '(มิได้แสดง $1 รุ่นระหว่างรุ่นที่เปรียบเทียบโดย{{PLURAL:$2|ผู้ใช้คนหนึ่ง|ผู้ใช้ $2 คน}})',
+'diff-multi-manyusers' => '(มิได้แสดง $1 รุ่นระหว่างรุ่นที่เปรียบเทียบโดยผู้ใช้กว่า $2 คน)',
 
 # Search results
-'searchresults' => 'ค้นหา',
+'searchresults' => 'à¸\9cลà¸\81ารà¸\84à¹\89à¸\99หา',
 'searchresults-title' => 'ผลการค้นหาสำหรับ "$1"',
-'searchresulttext' => 'วิà¸\98ีà¸\81ารà¸\84à¹\89à¸\99หาà¹\83à¸\99 {{SITENAME}} à¸\94ูวิà¸\98ีà¹\83à¸\8aà¹\89à¸\87าà¸\99à¹\80à¸\9eิà¹\88มที่ [[{{MediaWiki:Helppage}}|{{int:help}}]]',
-'searchsubtitle' => 'à¸\84ุà¸\93à¹\84à¸\94à¹\89สืà¸\9aà¸\84à¹\89à¸\99à¹\80à¸\9eืà¹\88อหา \'\'\'[[:$1]]\'\'\' ([[Special:Prefixindex/$1|à¸\97ุà¸\81หà¸\99à¹\89าà¸\97ีà¹\88à¸\82ึà¹\89à¸\99à¸\95à¹\89à¸\99à¸\94à¹\89วย "$1"]]{{int:pipe-separator}}[[Special:WhatLinksHere/$1|à¸\97ุà¸\81หà¸\99à¹\89าà¸\97ีà¹\88à¹\82ยà¸\87มาà¸\97ีà¹\88 "$1"]])',
+'searchresulttext' => 'สำหรัà¸\9aà¸\82à¹\89อมูลà¹\80à¸\9eิà¹\88มà¹\80à¸\95ิมà¹\80à¸\81ีà¹\88ยวà¸\81ัà¸\9aà¸\81ารà¸\84à¹\89à¸\99 {{SITENAME}} à¸\94ูที่ [[{{MediaWiki:Helppage}}|{{int:help}}]]',
+'searchsubtitle' => 'คุณได้สืบค้นหา \'\'\'[[:$1]]\'\'\' ([[Special:Prefixindex/$1|ทุกหน้าที่ขึ้นต้นด้วย "$1"]]{{int:pipe-separator}}[[Special:WhatLinksHere/$1|ทุกหน้าที่โยงมาที่ "$1"]])',
 'searchsubtitleinvalid' => "ค้นหาเกี่ยวกับ '''$1'''",
-'toomanymatches' => 'หัวà¸\82à¹\89อà¸\97ีà¹\88à¸\9eà¸\9aมีมากเกินไป กรุณาใช้คำค้นหาอื่น',
-'titlematches' => 'à¸\9eà¸\9aà¸\8aืà¹\88อหัวà¸\82à¹\89อà¸\99ีà¹\89',
-'notitlematches' => 'à¹\84มà¹\88à¸\9eà¸\9aà¸\8aืà¹\88อหัวà¸\82à¹\89อà¸\99ีà¹\89',
+'toomanymatches' => 'à¸\9eà¸\9aà¸\95รà¸\87à¸\81ัà¸\99มากเกินไป กรุณาใช้คำค้นหาอื่น',
+'titlematches' => 'à¸\9eà¸\9aà¸\8aืà¹\88อà¹\80รืà¹\88อà¸\87หà¸\99à¹\89าà¸\95รà¸\87à¸\81ัà¸\99',
+'notitlematches' => 'à¹\84มà¹\88à¸\9eà¸\9aà¸\8aืà¹\88อà¹\80รืà¹\88อà¸\87หà¸\99à¹\89าà¸\95รà¸\87à¸\81ัà¸\99',
 'textmatches' => 'พบคำนี้ในหน้า',
 'notextmatches' => 'ไม่พบข้อความในหน้า',
-'prevn' => 'ก่อนหน้า {{PLURAL:$1|$1}}',
-'nextn' => 'ถัดไป {{PLURAL:$1|$1}}',
-'prevn-title' => '$1 {{PLURAL:$1|ผลลัพธ์|ผลลัพธ์}}ก่อนหน้า',
-'nextn-title' => '$1 {{PLURAL:$1|ผลลัพธ์|ผลลัพธ์}}ถัดไป',
-'shown-title' => 'แสดง $1 {{PLURAL:$1|ผลลัพธ์|ผลลัพธ์}}ต่อหน้า',
+'prevn' => 'ก่อนหน้า $1',
+'nextn' => 'ถัดไป $1',
+'prevn-title' => '$1 ผลลัพธ์ก่อนหน้า',
+'nextn-title' => '$1 ผลลัพธ์ถัดไป',
+'shown-title' => 'แสดง $1 ผลลัพธ์ต่อหน้า',
 'viewprevnext' => 'ดู ($1 {{int:pipe-separator}} $2) ($3)',
 'searchmenu-legend' => 'ตัวเลือกการค้นหา',
 'searchmenu-exists' => "'''มีหน้าชื่อ \"[[:\$1]]\" บนวิกินี้'''",
 'searchmenu-new' => "'''สร้างหน้า \"[[:\$1]]\" บนวิกินี้'''",
 'searchhelp-url' => 'Help:สารบัญ',
-'searchmenu-prefix' => '[[Special:PrefixIndex/$1|สืà¸\9aà¸\84à¹\89à¸\99หà¸\99à¹\89าà¸\97ีà¹\88มีà¸\84ำà¸\82ึà¹\89à¸\99à¸\95à¹\89à¸\99à¹\80หลà¹\88าà¸\99ีà¹\89]]',
-'searchprofile-articles' => 'หà¸\99à¹\89าà¸\9aà¸\97à¸\84วาม',
-'searchprofile-project' => 'วิà¸\98ีà¹\83à¸\8aà¹\89และหน้าโครงการ',
+'searchmenu-prefix' => '[[Special:PrefixIndex/$1|สืบค้นหน้าที่มีคำขึ้นต้นนี้]]',
+'searchprofile-articles' => 'หà¸\99à¹\89าà¹\80à¸\99ืà¹\89อหา',
+'searchprofile-project' => 'à¸\84ำอà¸\98ิà¸\9aายและหน้าโครงการ',
 'searchprofile-images' => 'มัลติมีเดีย',
-'searchprofile-everything' => 'à¸\97ุà¸\81สิà¹\88à¸\87à¸\97ัà¹\89à¸\87หมà¸\94',
+'searchprofile-everything' => 'à¸\97ุà¸\81อยà¹\88าà¸\87',
 'searchprofile-advanced' => 'ชั้นสูง',
 'searchprofile-articles-tooltip' => 'ค้นหาใน $1',
 'searchprofile-project-tooltip' => 'ค้นหาใน $1',
 'searchprofile-images-tooltip' => 'ค้นหาไฟล์',
-'searchprofile-everything-tooltip' => 'à¸\84à¹\89à¸\99à¹\80à¸\99ืà¹\89อหาà¸\97ัà¹\89à¸\87หมà¸\94 (รวมà¸\96ึà¸\87หà¸\99à¹\89าอภิà¸\9bราย)',
+'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-size' => '$1 ($2 คำ)',
+'search-result-category-size' => '$1 สมาชิก ($2 หมวดหมู่ย่อย, $3 ไฟล์)',
 'search-result-score' => 'ความเกี่ยวข้อง : $1%',
 'search-redirect' => '(เปลี่ยนทาง $1)',
 'search-section' => '(ส่วน $1)',
-'search-suggest' => 'คุณอาจหมายถึง : $1',
+'search-suggest' => 'คุณอาจหมายถึง: $1',
 'search-interwiki-caption' => 'โครงการพี่น้อง',
 'search-interwiki-default' => '$1 ผลลัพธ์:',
-'search-interwiki-more' => '(มาà¸\81à¸\81วà¹\88า)',
+'search-interwiki-more' => '(à¹\80à¸\9eิà¹\88มà¹\80à¸\95ิม)',
 'search-relatedarticle' => 'สัมพันธ์',
 'mwsuggest-disable' => 'ยกเลิกการแนะนำในลักษณะเอแจ็กซ์',
 'searcheverything-enable' => 'สืบค้นในเนมสเปซทั้งหมด',
@@ -1161,8 +1186,8 @@ $1",
 'showingresults' => "แสดง $1 รายการ เริ่มต้นจากรายการที่ '''$2'''",
 'showingresultsnum' => "แสดง $3 รายการ เริ่มต้นจากรายการที่  '''$2'''",
 'showingresultsheader' => "{{PLURAL:$5|ผลการสืบค้น '''$1''' จาก '''$3'''|ผลการสืบค้น '''$1 - $2''' จาก '''$3'''}} สำหรับ '''$4'''",
-'nonefound' => "'''à¸\84ำà¹\80à¸\95ือà¸\99''': à¹\80à¸\99มสà¹\80à¸\9bà¸\8bà¸\9aาà¸\87สà¹\88วà¸\99à¸\88ะà¸\96ูà¸\81à¸\84à¹\89à¸\99หาà¹\80อà¸\87
¹\83หà¹\89ลอà¸\87à¹\80ลือà¸\81à¸\84ำà¸\82ึà¹\89à¸\99à¸\95à¹\89à¸\99à¸\81ารà¸\84à¹\89à¸\99หาà¸\94à¹\89วย ''all:'' à¸ªà¸³à¸«à¸£à¸±à¸\9aà¸\84à¹\89à¸\99หาà¹\80à¸\99ืà¹\89อหาà¸\97ัà¹\89à¸\87หมà¸\94 (รวมà¸\96ึà¸\87 หน้าอภิปราย แม่แบบ ฯลฯ) หรือเลือกเนมสเปซที่ต้องการ",
+'nonefound' => "'''à¸\84ำà¹\80à¸\95ือà¸\99''': à¸¡à¸µà¹\80à¸\9eียà¸\87à¸\9aาà¸\87à¹\80à¸\99มสà¹\80à¸\9bà¸\8bà¸\97ีà¹\88à¸\88ะà¸\96ูà¸\81à¸\84à¹\89à¸\99à¹\82à¸\94ยà¸\9bริยาย
¸¥à¸­à¸\87à¹\80ลือà¸\81à¸\84ำà¸\82ึà¹\89à¸\99à¸\95à¹\89à¸\99à¸\81ารà¸\84à¹\89à¸\99หาà¸\94à¹\89วย ''all:'' à¸ªà¸³à¸«à¸£à¸±à¸\9aà¸\84à¹\89à¸\99à¹\80à¸\99ืà¹\89อหาà¸\97ัà¹\89à¸\87หมà¸\94 (รวมหน้าอภิปราย แม่แบบ ฯลฯ) หรือเลือกเนมสเปซที่ต้องการ",
 'search-nonefound' => 'ไม่มีผลลัพธ์ตามคำค้นที่กำหนด',
 'powersearch' => 'ค้นหาระดับสูง',
 'powersearch-legend' => 'ค้นหาระดับสูง',
@@ -1173,7 +1198,7 @@ $1",
 'powersearch-toggleall' => 'ทั้งหมด',
 'powersearch-togglenone' => 'ไม่เลือก',
 'search-external' => 'ค้นหาจากภายนอก',
-'searchdisabled' => 'ระà¸\9aà¸\9aà¸\81ารà¸\84à¹\89à¸\99หาà¹\83à¸\99 {{SITENAME}} à¹\84มà¹\88à¹\80à¸\9bิà¸\94à¸\81ารà¹\83à¸\8aà¹\89à¸\87าà¸\99 à¸\84ุà¸\93สามารà¸\96à¸\84à¹\89à¸\99หาà¹\83à¸\99à¸\81ูà¹\80à¸\81ิลหรือà¹\80à¸\8bิรà¹\8cà¸\8aà¹\80อà¸\99à¸\88ิà¸\99อืà¹\88à¸\99 à¹\82à¸\9bรà¸\94à¸\88ำà¹\84วà¹\89ว่าเนื้อหาของ {{SITENAME}} บนเซิร์ชเอนจินอาจเป็นข้อมูลเก่า',
+'searchdisabled' => 'ระà¸\9aà¸\9aà¸\81ารà¸\84à¹\89à¸\99หาà¹\83à¸\99 {{SITENAME}} à¹\84มà¹\88à¹\80à¸\9bิà¸\94à¸\81ารà¹\83à¸\8aà¹\89à¸\87าà¸\99 à¸\84ุà¸\93สามารà¸\96à¸\84à¹\89à¸\99หาà¹\83à¸\99à¸\81ูà¹\80à¸\81ิลหรือà¹\80à¸\8bิรà¹\8cà¸\8aà¹\80อà¸\99à¸\88ิà¸\99อืà¹\88à¸\99 à¹\82à¸\9bรà¸\94à¸\97ราà¸\9aว่าเนื้อหาของ {{SITENAME}} บนเซิร์ชเอนจินอาจเป็นข้อมูลเก่า',
 
 # Quickbar
 'qbsettings' => 'แถบพิเศษ',
@@ -1185,7 +1210,7 @@ $1",
 
 # Preferences page
 'preferences' => 'ตั้งค่าส่วนตัว',
-'mypreferences' => 'à¸\95ัà¹\89à¸\87à¸\84à¹\88าสà¹\88วà¸\99à¸\95ัว',
+'mypreferences' => 'à¸\81ารà¸\95ัà¹\89à¸\87à¸\84à¹\88า',
 'prefs-edits' => 'จำนวนการแก้ไข:',
 'prefsnologin' => 'ไม่ได้ล็อกอิน',
 'prefsnologintext' => 'คุณต้อง<span class="plainlinks">[{{fullurl:{{#Special:UserLogin}}|returnto=$1}} ล็อกอิน]</span>ก่อนเพื่อตั้งค่าส่วนตัว',
@@ -1195,15 +1220,16 @@ $1",
 'datedefault' => 'ค่าตั้งต้น',
 'prefs-beta' => 'คุณลักษณะรุ่นทดสอบ',
 'prefs-datetime' => 'วันที่และเวลา',
-'prefs-labs' => 'คุณสมบัติจากห้องแลป',
+'prefs-labs' => 'คุณสมบัติทดลอง',
+'prefs-user-pages' => 'หน้าผู้ใช้',
 'prefs-personal' => 'รายละเอียดผู้ใช้',
 'prefs-rc' => 'ปรับปรุงล่าสุด',
 'prefs-watchlist' => 'รายการเฝ้าดู',
 'prefs-watchlist-days' => 'จำนวนวันที่แสดงในรายการเฝ้าดู:',
-'prefs-watchlist-days-max' => 'Maximum $1 {{PLURAL:$1|day|days}}',
-'prefs-watchlist-edits' => 'à¸\88ำà¸\99วà¸\99à¸\81ารà¹\81à¸\81à¹\89à¹\84à¸\82à¸\97ีà¹\88à¹\81สà¸\94à¸\87à¹\83à¸\99รายà¸\81ารà¹\80à¸\9dà¹\89าà¸\94ูà¸\97ีà¹\88มีà¸\81ารà¸\84ลีà¹\88ออก:',
+'prefs-watchlist-days-max' => 'มากสุด $1 วัน',
+'prefs-watchlist-edits' => 'à¸\88ำà¸\99วà¸\99à¸\81ารà¹\81à¸\81à¹\89à¹\84à¸\82มาà¸\81สุà¸\94à¸\97ีà¹\88à¹\81สà¸\94à¸\87à¹\83à¸\99รายà¸\81ารà¹\80à¸\9dà¹\89าà¸\94ูà¸\97ีà¹\88à¸\82ยายออก:',
 'prefs-watchlist-edits-max' => 'จำนวนสูงสุด: 1000',
-'prefs-watchlist-token' => 'สัà¸\8dลัà¸\81ษà¸\93à¹\8cรายการเฝ้าดู:',
+'prefs-watchlist-token' => 'à¹\82à¸\97à¹\80à¸\84à¹\87à¸\99รายการเฝ้าดู:',
 'prefs-misc' => 'เบ็ดเตล็ด',
 'prefs-resetpass' => 'เปลี่ยนรหัสผ่าน',
 'prefs-changeemail' => 'เปลี่ยนที่อยู่อีเมล',
@@ -1211,8 +1237,8 @@ $1",
 'prefs-email' => 'การตั้งค่าอีเมล',
 'prefs-rendering' => 'รูปลักษณ์',
 'saveprefs' => 'บันทึก',
-'resetprefs' => 'à¸\81ลัà¸\9aà¹\84à¸\9bยัà¸\87à¸\84à¹\88าà¸\97ี่บันทึก',
-'restoreprefs' => 'à¸\9aัà¸\99à¸\97ึà¸\81à¸\84ืà¸\99à¸\84à¹\88าà¸\95ัà¹\89à¸\87à¸\95à¹\89à¸\99ทั้งหมด',
+'resetprefs' => 'ลà¹\89าà¸\87à¸\81ารà¹\80à¸\9bลีà¹\88ยà¸\99à¹\81à¸\9bลà¸\87à¸\97ีà¹\88ยัà¸\87à¹\84ม่บันทึก',
+'restoreprefs' => 'à¸\84ืà¸\99à¸\81ารà¸\95ัà¹\89à¸\87à¸\84à¹\88าà¹\82à¸\94ยà¸\9bริยายทั้งหมด',
 'prefs-editing' => 'การแก้ไข',
 'prefs-edit-boxsize' => 'ขนาดหน้าจอกล่องแก้ไข',
 'rows' => 'แถว:',
@@ -1222,23 +1248,23 @@ $1",
 'stub-threshold' => 'ขีดแบ่งสำหรับ <a href="#" class="stub">รูปแบบโครง</a> (ความยาวบทความ):',
 'stub-threshold-disabled' => 'ปิดการใช้งาน',
 'recentchangesdays' => 'จำนวนวันที่แสดงในปรับปรุงล่าสุด:',
-'recentchangesdays-max' => '(สูงสุด $1 {{PLURAL:$1|วัน|วัน}})',
+'recentchangesdays-max' => 'มากสุด $1 วัน',
 'recentchangescount' => 'จำนวนการแก้ไขที่แสดงโดยปริยาย:',
-'prefs-help-recentchangescount' => 'à¸\99ีà¹\88รวมà¹\84à¸\9bà¸\96ึà¸\87à¸\81ารà¹\81à¸\81à¹\89à¹\84à¸\82ลà¹\88าสุà¸\94, à¸\9bระวิà¸\95ิà¸\82อà¸\87หà¸\99à¹\89า, à¹\81ละรายà¸\81ารà¹\81à¸\81à¹\89à¹\84à¸\82อืà¹\88à¸\99 à¹\86',
-'prefs-help-watchlist-token' => 'การเติมช่องนี้ด้วยรหัสลับจะสร้าง RSS feed สำหรับรายการเฝ้าดูของคุณ
-à¸\9cูà¹\89à¹\83à¸\94à¸\97ีà¹\88รูà¹\89รหัสà¹\83à¸\99à¸\8aà¹\88อà¸\87à¸\99ีà¹\89à¸\88ะสามารà¸\96à¸\94ูรายà¸\81ารà¹\80à¸\9dà¹\89าà¸\94ูà¸\82อà¸\87à¸\84ุà¸\93à¹\84à¸\94à¹\89 à¸\94ัà¸\87à¸\99ัà¹\89à¸\99เลือกรหัสที่ปลอดภัย
+'prefs-help-recentchangescount' => 'à¸\99ีà¹\88รวมà¸\96ึà¸\87à¸\81ารà¸\9bรัà¸\9aà¸\9bรุà¸\87ลà¹\88าสุà¸\94 à¸\9bระวิà¸\95ิหà¸\99à¹\89า à¹\81ละà¸\9bูม',
+'prefs-help-watchlist-token' => 'การเติมช่องนี้ด้วยรหัสลับจะสร้างฟีด RSS แก่รายการเฝ้าดูของคุณ
+à¸\9cูà¹\89à¹\83à¸\94à¸\97ีà¹\88รูà¹\89รหัสà¹\83à¸\99à¸\8aà¹\88อà¸\87à¸\99ีà¹\89à¸\88ะสามารà¸\96อà¹\88าà¸\99รายà¸\81ารà¹\80à¸\9dà¹\89าà¸\94ูà¸\82อà¸\87à¸\84ุà¸\93à¹\84à¸\94à¹\89 à¸\89ะà¸\99ัà¹\89à¸\99à¹\83หà¹\89เลือกรหัสที่ปลอดภัย
 นี่คือรหัสที่สุ่มเลือกขึ้นมาที่คุณสามารถใช้ได้: $1',
 'savedprefs' => 'การตั้งค่าของคุณได้ถูกบันทึกแล้ว',
 'timezonelegend' => 'เขตเวลา:',
 'localtime' => 'เวลาท้องถิ่น',
-'timezoneuseserverdefault' => 'à¹\83à¸\8aà¹\89à¸\84à¹\88าà¸\95ัà¹\89à¸\87à¸\95à¹\89à¸\99à¸\82อà¸\87à¹\80à¸\8bิรà¹\8cà¸\9fà¹\80วอรà¹\8c',
-'timezoneuseoffset' => 'อื่นๆ (ระบุส่วนต่างเวลา)',
+'timezoneuseserverdefault' => 'à¹\83à¸\8aà¹\89à¸\84à¹\88าà¹\82à¸\94ยà¸\9bริยายà¸\82อà¸\87วิà¸\81ิ ($1)',
+'timezoneuseoffset' => 'อื่น ๆ (ระบุส่วนต่างเวลา)',
 'timezoneoffset' => 'เวลาต่าง¹:',
-'servertime' => 'à¹\80วลาà¸\97ีà¹\88à¹\80à¸\8bิรà¹\8cà¸\9fà¹\80วอรà¹\8c:',
+'servertime' => 'เวลาเซิร์ฟเวอร์:',
 'guesstimezone' => 'เรียกค่าจากเว็บเบราว์เซอร์',
 'timezoneregion-africa' => 'แอฟริกา',
 'timezoneregion-america' => 'อเมริกา',
-'timezoneregion-antarctica' => 'แอนตาร์กติก',
+'timezoneregion-antarctica' => 'แอนตาร์กติก',
 'timezoneregion-arctic' => 'อาร์กติก',
 'timezoneregion-asia' => 'เอเชีย',
 'timezoneregion-atlantic' => 'มหาสมุทรแอตแลนติก',
@@ -1247,38 +1273,38 @@ $1",
 'timezoneregion-indian' => 'มหาสมุทรอินเดีย',
 'timezoneregion-pacific' => 'มหาสมุทรแปซิฟิก',
 'allowemail' => 'เปิดรับอีเมลจากผู้ใช้อื่น',
-'prefs-searchoptions' => 'à¸\95ัà¹\89à¸\87à¸\84à¹\88าà¸\81ารà¸\84à¹\89à¸\99หา',
+'prefs-searchoptions' => 'ค้นหา',
 'prefs-namespaces' => 'เนมสเปซ',
 'defaultns' => 'หรือค้นหาในเนมสเปซต่อไปนี้:',
-'default' => 'à¸\84à¹\88าà¸\95ัà¹\89à¸\87à¸\95à¹\89à¸\99',
+'default' => 'à¸\84à¹\88าà¹\82à¸\94ยà¸\9bริยาย',
 'prefs-files' => 'ไฟล์',
 'prefs-custom-css' => 'สไตล์ชีตปรับแต่งเอง',
 'prefs-custom-js' => 'จาวาสคริปต์ปรับแต่งเอง',
-'prefs-common-css-js' => 'CSS / JavaScript ที่ใช้ร่วมกันสำหรับสกินทั้งหมด:',
-'prefs-reset-intro' => 'à¸\84ุà¸\93สามารà¸\96à¹\83à¸\8aà¹\89หà¸\99à¹\89าà¸\99ีà¹\89à¹\80à¸\9eืà¹\88อลà¹\89าà¸\87à¸\81ารà¸\95ัà¹\89à¸\87à¸\84à¹\88าà¸\82อà¸\87à¸\84ุà¸\93à¸\81ลัà¸\9aà¹\84à¸\9bà¹\80à¸\9bà¹\87à¸\99à¸\84à¹\88าà¸\95ัà¹\89à¸\87à¸\95à¹\89à¸\99à¸\97ัà¹\89à¸\87หมà¸\94
+'prefs-common-css-js' => 'CSS / จาวาสคริปต์ที่ใช้ร่วมกันกับทุกหน้าตา:',
+'prefs-reset-intro' => 'à¸\84ุà¸\93สามารà¸\96à¹\83à¸\8aà¹\89หà¸\99à¹\89าà¸\99ีà¹\89à¸\95ัà¹\89à¸\87à¸\81ารà¸\95ัà¹\89à¸\87à¸\84à¹\88าà¸\82อà¸\87à¸\84ุà¸\93à¸\81ลัà¸\9aà¹\80à¸\9bà¹\87à¸\99à¸\84à¹\88าà¸\95ัà¹\89à¸\87à¸\95à¹\89à¸\99à¸\82อà¸\87à¹\84à¸\8bà¸\95à¹\8cà¹\83หมà¹\88
 เมื่อล้างแล้วจะไม่สามารถย้อนกลับได้',
 'prefs-emailconfirm-label' => 'การยืนยันอีเมล:',
 'prefs-textboxsize' => 'ขนาดของหน้าต่างแก้ไข',
 'youremail' => 'อีเมล:',
-'username' => 'ชื่อผู้ใช้:',
-'uid' => 'รหัสà¸\9cูà¹\89à¹\83à¸\8aà¹\89:',
-'prefs-memberingroups' => 'สมาชิกใน{{PLURAL:$1|กลุ่ม|กลุ่ม}}:',
+'username' => '{{GENDER:$1|ชื่อผู้ใช้}}:',
+'uid' => 'รหัสà¸\9bระà¸\88ำà¸\95ัว{{GENDER:$1|à¸\9cูà¹\89à¹\83à¸\8aà¹\89}}:',
+'prefs-memberingroups' => '{{GENDER:$2|สมาชิก}}ใน{{PLURAL:$1|กลุ่ม|กลุ่ม}}:',
 'prefs-registration' => 'วันเวลาที่ลงทะเบียน:',
 'yourrealname' => 'ชื่อจริง:',
 'yourlanguage' => 'ภาษา:',
 'yourvariant' => 'อักษรต่างรูปของเนื้อหา:',
 'yournick' => 'ลายเซ็น:',
-'prefs-help-signature' => 'à¸\84วามà¹\80หà¹\87à¸\99à¹\83à¸\99หà¸\99à¹\89าà¸\9eูà¸\94à¸\84ุยà¸\84วรà¸\88ะลà¸\87ลายà¹\80à¸\8bà¹\87à¸\99à¸\94à¹\89วย "<nowiki>~~~~</nowiki>" à¸\8bึà¹\88à¸\87à¸\88ะà¸\96ูà¸\81à¹\81à¸\9bลà¸\87à¹\80à¸\9bà¹\87à¸\99ลายà¹\80à¸\8bà¹\87à¸\99à¹\81ละลà¸\87วัà¸\99à¸\97ีà¹\88à¹\80à¸\82ียà¸\99',
+'prefs-help-signature' => 'à¸\84วามà¹\80หà¹\87à¸\99à¹\83à¸\99หà¸\99à¹\89าà¸\9eูà¸\94à¸\84ุยà¸\84วรà¸\88ะลà¸\87ลายà¹\80à¸\8bà¹\87à¸\99à¸\94à¹\89วย "<nowiki>~~~~</nowiki>" à¸\8bึà¹\88à¸\87à¸\88ะà¸\96ูà¸\81à¹\81à¸\9bลà¸\87à¹\80à¸\9bà¹\87à¸\99ลายà¹\80à¸\8bà¹\87à¸\99à¹\81ละà¸\95ราà¹\80วลา',
 'badsig' => 'ลายเซ็นที่ใช้ผิดพลาด กรุณาตรวจสอบคำสั่งเอชทีเอ็มแอล',
-'badsiglength' => 'ลายà¹\80à¸\8bà¹\87à¸\99à¸\82อà¸\87à¸\84ุà¸\93ยาวà¹\80à¸\81ิà¸\99à¹\84à¸\9b à¸\95à¹\89อà¸\87มีà¸\84วามยาวà¹\84มà¹\88à¹\80à¸\81ิà¸\99 $1 {{PLURAL:$1|à¸\95ัวอัà¸\81ษร|à¸\95ัวอัà¸\81ษร}}',
+'badsiglength' => 'ลายà¹\80à¸\8bà¹\87à¸\99à¸\82อà¸\87à¸\84ุà¸\93ยาวà¹\80à¸\81ิà¸\99à¹\84à¸\9b à¸\95à¹\89อà¸\87ยาวà¹\84มà¹\88à¹\80à¸\81ิà¸\99 $1 à¸\95ัวอัà¸\81ษร',
 'yourgender' => 'เพศ:',
 'gender-unknown' => 'ไม่ระบุ',
 'gender-male' => 'ชาย',
 'gender-female' => 'หญิง',
 'prefs-help-gender' => 'เป็นข้อมูลเสริม: ใช้เพื่อให้ซอฟต์แวร์แยกแยะเพศของผู้ใช้ได้ ข้อมูลนี้จะเป็นที่เปิดเผย',
 'email' => 'อีเมล',
-'prefs-help-realname' => 'à¹\84มà¹\88à¸\88ำà¹\80à¸\9bà¹\87à¸\99à¸\95à¹\89อà¸\87à¹\83สà¹\88à¸\8aืà¹\88อà¸\88ริà¸\87 à¹\82à¸\94ยà¸\8aืà¹\88อà¸\97ีà¹\88à¹\83สà¹\88à¸\99ัà¹\89à¸\99à¸\88ะà¸\96ูà¸\81à¹\83à¸\8aà¹\89à¹\80à¸\9eียà¸\87à¹\81à¸\84à¹\88à¹\81สà¸\94à¸\87à¸\9cลà¸\87าà¸\99à¸\97ีà¹\88à¸\84ุà¸\93à¹\84à¸\94à¹\89รà¹\88วมสรà¹\89าà¸\87à¹\84วà¹\89',
-'prefs-help-email' => 'à¸\97ีà¹\88อยูà¹\88อีà¹\80มลà¹\84มà¹\88à¸\88ำà¹\80à¸\9bà¹\87à¸\99à¸\95à¹\89อà¸\87à¹\83สà¹\88 แต่จำเป็นสำหรับการตั้งรหัสผ่านใหม่เมื่อคุณลืมรหัสผ่านของคุณ',
+'prefs-help-realname' => 'à¹\84มà¹\88à¸\88ำà¹\80à¸\9bà¹\87à¸\99à¸\95à¹\89อà¸\87à¹\83à¸\8aà¹\89à¸\8aืà¹\88อà¸\88ริà¸\87 à¸\96à¹\89าà¸\84ุà¸\93à¹\80ลือà¸\81à¸\97ีà¹\88à¸\88ะà¹\83à¸\8aà¹\89à¸\8aืà¹\88อà¸\88ริà¸\87 à¸\88ะà¹\83à¸\8aà¹\89à¹\80à¸\9eืà¹\88อà¹\83หà¹\89à¹\80à¸\81ียรà¸\95ิà¹\81à¸\81à¹\88à¸\87าà¸\99à¸\82อà¸\87à¸\84ุà¸\93',
+'prefs-help-email' => 'à¹\84มà¹\88à¸\95à¹\89อà¸\87à¹\83สà¹\88à¸\97ีà¹\88อยูà¹\88อีà¹\80มล แต่จำเป็นสำหรับการตั้งรหัสผ่านใหม่เมื่อคุณลืมรหัสผ่านของคุณ',
 'prefs-help-email-others' => 'คุณยังสามารถเลือกให้ผู้อื่นติดต่อคุณโดยอีเมลผ่านลิงก์บนหน้าผู้ใช้หรือหน้าพูดคุยกับผู้ใช้ของคุณ
 ที่อยู่อีเมลของคุณไม่ถูกเปิดเผยเมื่อผู้ใช้อื่นติดต่อคุณ',
 'prefs-help-email-required' => 'ต้องการที่อยู่อีเมล',
@@ -1295,30 +1321,30 @@ $1",
 'prefs-displayrc' => 'ค่าการแสดงผล',
 'prefs-displaysearchoptions' => 'ค่าการแสดงผล',
 'prefs-displaywatchlist' => 'ค่าการแสดงผล',
-'prefs-diffs' => 'สà¹\88วà¸\99à¸\95à¹\88าà¸\87à¸\81ารà¹\81à¸\81à¹\89à¹\84à¸\82',
+'prefs-diffs' => 'à¹\81à¸\95à¸\81à¸\95à¹\88าà¸\87',
 
 # User preference: e-mail validation using jQuery
-'email-address-validity-valid' => 'à¸\97ีà¹\88อยูà¹\88อีà¹\80มลà¸\94ูà¹\80หมือà¸\99วà¹\88าà¸\96ูà¸\81à¸\95à¹\89อà¸\87',
+'email-address-validity-valid' => 'ที่อยู่อีเมลดูถูกต้อง',
 'email-address-validity-invalid' => 'ป้อนที่อยู่อีเมลที่ถูกต้อง',
 
 # User rights
 'userrights' => 'บริหารสิทธิผู้ใช้',
 'userrights-lookup-user' => 'บริหารสิทธิผู้ใช้',
 'userrights-user-editname' => 'ใส่ชื่อผู้ใช้:',
-'editusergroup' => 'แก้ไขผู้ใช้',
-'editinguser' => "à¸\81ำลัà¸\87à¹\81à¸\81à¹\89à¹\84à¸\82สิà¸\97à¸\98ิà¸\82อà¸\87à¸\9cูà¹\89à¹\83à¸\8aà¹\89 '''[[User:$1|$1]]''' ([[User talk:$1|{{int:talkpagelinktext}}]]{{int:pipe-separator}}[[Special:Contributions/$1|{{int:contribslink}}]])",
-'userrights-editusergroup' => 'แก้ไขผู้ใช้',
+'editusergroup' => 'à¹\81à¸\81à¹\89à¹\84à¸\82à¸\81ลุà¹\88มà¸\9cูà¹\89à¹\83à¸\8aà¹\89',
+'editinguser' => "à¸\81ำลัà¸\87à¹\80à¸\9bลีà¹\88ยà¸\99สิà¸\97à¸\98ิà¸\9cูà¹\89à¹\83à¸\8aà¹\89à¸\82อà¸\87à¸\9cูà¹\89à¹\83à¸\8aà¹\89 '''[[User:$1|$1]]''' $2",
+'userrights-editusergroup' => 'à¹\81à¸\81à¹\89à¹\84à¸\82à¸\81ลุà¹\88มà¸\9cูà¹\89à¹\83à¸\8aà¹\89',
 'saveusergroups' => 'ตกลง',
 'userrights-groupsmember' => 'สมาชิกในกลุ่ม:',
 'userrights-groupsmember-auto' => 'สมาชิกโดยนัยของ:',
 'userrights-groups-help' => 'คุณสามารถเปลี่ยนแปลงกลุ่มที่ผู้ใช้รายนี้อยู่ใน:
 * กล่องที่ถูกเลือกหมายความว่าผู้ใช้อยู่ในกลุ่มนั้น
 * กล่องที่ไม่ถูกเลือกหมายความว่าผู้ใช้ไม่ได้อยู่ในกลุ่มนั้น
-* เครื่องหมาย * ชี้ว่าคุณไม่สามารถเอากลุ่มนั้นออกได้เมื่อใดก็ตามที่คุณเพิ่มกลุ่มนั้นไปแล้ว หรือ ในทำนองเดียวกัน',
+* เครื่องหมาย * ชี้ว่าคุณไม่สามารถเอากลุ่มนั้นออกได้เมื่อใดก็ตามที่คุณเพิ่มกลุ่มนั้นไปแล้ว หรือกลับกัน',
 'userrights-reason' => 'เหตุผล:',
-'userrights-no-interwiki' => 'คุณไม่ได้รับสิทธิในการแก้ไขสิทธิของผู้ใช้บนวิกิอื่น',
+'userrights-no-interwiki' => 'คุณไม่ได้รับสิทธิในการแก้ไขสิทธิของผู้ใช้บนวิกิอื่น',
 'userrights-nodatabase' => 'ไม่มีฐานข้อมูล $1 อยู่ หรือ ฐานข้อมูลอยู่บนเครื่องอื่น',
-'userrights-nologin' => 'à¸\84ุà¸\93à¸\95à¹\89อà¸\87[[Special:UserLogin|ลà¹\87อà¸\81อิà¸\99]]à¸\94à¹\89วยà¸\9aัà¸\8dà¸\8aีà¸\9cูà¹\89à¹\83à¸\8aà¹\89à¸\97ีà¹\88à¹\80à¸\9bà¹\87à¸\99à¸\9cูà¹\89à¸\94ูà¹\81ลสิà¸\97à¸\98ิà¹\81à¸\95à¹\88à¸\87à¸\95ัà¹\89à¸\87 à¸\88ึà¸\87à¸\88ะสามารà¸\96à¸\81ำหà¸\99à¸\94สิà¸\97à¸\98ิà¸\95à¹\88าà¸\87à¹\86 à¸\82อà¸\87ผู้ใช้ได้',
+'userrights-nologin' => 'à¸\84ุà¸\93à¸\95à¹\89อà¸\87[[Special:UserLogin|ลà¹\87อà¸\81อิà¸\99]]à¸\94à¹\89วยà¸\9aัà¸\8dà¸\8aีà¸\9cูà¹\89à¸\94ูà¹\81ลระà¸\9aà¸\9aà¸\81à¹\88อà¸\99 à¸\88ึà¸\87à¸\88ะà¸\81ำหà¸\99à¸\94สิà¸\97à¸\98ิผู้ใช้ได้',
 'userrights-notallowed' => 'บัญชีของคุณไม่ได้รับอนุญาตให้เพิ่มหรือลดสิทธิของผู้ใช้',
 'userrights-changeable-col' => 'กลุ่มที่คุณสามารถเปลี่ยนได้',
 'userrights-unchangeable-col' => 'กลุ่มที่คุณไม่สามารถเปลี่ยนได้',
@@ -1333,11 +1359,11 @@ $1",
 'group-suppress' => 'ผู้ดูแลระดับสูง',
 'group-all' => '(ทั้งหมด)',
 
-'group-user-member' => 'ผู้ใช้ใหม่',
-'group-autoconfirmed-member' => 'ผู้ใช้ทั่วไป',
-'group-bot-member' => 'บอต',
-'group-sysop-member' => 'ผู้ดูแล',
-'group-bureaucrat-member' => 'ผู้ดูแลสิทธิแต่งตั้ง',
+'group-user-member' => '{{GENDER:$1|ผู้ใช้ใหม่}}',
+'group-autoconfirmed-member' => '{{GENDER:$1|ผู้ใช้ทั่วไป}}',
+'group-bot-member' => '{{GENDER:$1|บอต}}',
+'group-sysop-member' => '{{GENDER:$1|ผู้ดูแลระบบ}}',
+'group-bureaucrat-member' => '{{GENDER:$1|ผู้ดูแลสิทธิแต่งตั้ง}}',
 'group-suppress-member' => '{{GENDER:$1|oversight}}',
 
 'grouppage-user' => '{{ns:project}}:ผู้ใช้',
@@ -1348,71 +1374,74 @@ $1",
 'grouppage-suppress' => '{{ns:project}}:ผู้ดูแลระดับสูง',
 
 # Rights
-'right-read' => 'อ่านหน้าต่าง ๆ',
+'right-read' => 'อ่านหน้า',
 'right-edit' => 'แก้ไขหน้า',
 'right-createpage' => 'สร้างหน้า (ที่ไม่ใช่หน้าอภิปราย)',
 'right-createtalk' => 'สร้างหน้าอภิปราย',
 'right-createaccount' => 'สร้างบัญชีผู้ใช้ใหม่',
 'right-minoredit' => 'ทำเครื่องหมายการแก้ไขเล็กน้อย',
 'right-move' => 'ย้ายหน้า',
-'right-move-subpages' => 'ยà¹\89ายหà¸\99à¹\89าà¸\9eรà¹\89อมà¸\81ัà¸\9aหà¸\99à¹\89ารอà¸\87à¸\94à¹\89วย',
+'right-move-subpages' => 'ยà¹\89ายหà¸\99à¹\89าà¸\9eรà¹\89อมหà¸\99à¹\89ายà¹\88อย',
 'right-move-rootuserpages' => 'ย้ายหน้าผู้ใช้หลัก',
 'right-movefile' => 'ย้ายไฟล์',
-'right-suppressredirect' => 'à¹\84มà¹\88สรà¹\89าà¸\87หà¸\99à¹\89าà¹\80à¸\9bลีà¹\88ยà¸\99à¸\97าà¸\87à¹\80มืà¹\88อà¸\97ำà¸\81ารยà¹\89ายหà¸\99à¹\89าà¹\84à¸\9bยัà¸\87à¸\8aืà¹\88อà¹\83หมà¹\88',
+'right-suppressredirect' => 'à¹\84มà¹\88สรà¹\89าà¸\87หà¸\99à¹\89าà¹\80à¸\9bลีà¹\88ยà¸\99à¸\97าà¸\87à¸\88าà¸\81หà¸\99à¹\89าà¸\95à¹\89à¸\99à¸\97าà¸\87à¹\80มืà¹\88อยà¹\89ายหà¸\99à¹\89า',
 'right-upload' => 'อัปโหลดไฟล์',
 'right-reupload' => 'เขียนทับไฟล์เดิม',
 'right-reupload-own' => 'เขียนทับไฟล์เดิมที่อัปโหลดด้วยตนเอง',
 'right-reupload-shared' => 'เขียนทับไฟล์บนคลังเก็บสื่อส่วนกลาง',
-'right-upload_by_url' => 'อัปโหลดไฟล์จาก URL',
-'right-purge' => 'ลà¹\89าà¸\87à¹\81à¸\84à¸\8aà¸\82อà¸\87à¹\80วà¹\87à¸\9aà¹\84à¸\8bà¸\95à¹\8cà¹\82à¸\94ยà¹\84มà¹\88à¸\88ำà¹\80à¸\9bà¹\87à¸\99à¸\95à¹\89อà¸\87ยืนยัน',
+'right-upload_by_url' => 'อัปโหลดไฟล์จากยูอาร์แอล',
+'right-purge' => 'ลà¹\89าà¸\87à¹\81à¸\84à¸\8aà¸\82อà¸\87à¹\80วà¹\87à¸\9aà¹\84à¸\8bà¸\95à¹\8cà¹\82à¸\94ยà¹\84มà¹\88มีà¸\81ารยืนยัน',
 'right-autoconfirmed' => 'แก้ไขหน้าที่ถูกกึ่งล็อก',
 'right-bot' => 'กำหนดว่าเป็นกระบวนการอัตโนมัติ',
 'right-nominornewtalk' => 'ไม่มีการแก้ไขเล็กน้อยที่หน้าสนทนาที่ทำให้การเตือนข้อความใหม่ปรากฏ',
 'right-apihighlimits' => 'ใช้ข้อจำกัดที่สูงขึ้นในคำสั่งเอพีไอ',
 'right-writeapi' => 'ใช้การเขียนเอพีไอ',
 'right-delete' => 'ลบหน้า',
-'right-bigdelete' => 'ลบหน้าที่มีประวัติหน้าขนาดใหญ่',
-'right-deleterevision' => 'ลบและเรียกคืนรุ่นที่เจาะจงของหน้าต่าง ๆ',
+'right-bigdelete' => 'ลบหน้าที่มีประวัติขนาดใหญ่',
+'right-deletelogentry' => 'ลบและกู้คืนรายการปูมที่เจาะจง',
+'right-deleterevision' => 'ลบและกู้คืนรุ่นที่เจาะจงของหน้าต่าง ๆ',
 'right-deletedhistory' => 'ดูรายการประวัติที่ถูกลบ โดยไม่มีข้อความที่เกี่ยวข้อง',
 'right-deletedtext' => 'เรียกดูข้อความที่ถูกลบและความเปลี่ยนแปลงระหว่างรุ่นที่ถูกลบ',
 'right-browsearchive' => 'ค้นหาหน้าที่ถูกลบ',
 'right-undelete' => 'เรียกคืนหน้า',
-'right-suppressrevision' => 'à¸\94ูà¹\81ละà¹\80รียà¸\81à¸\84ืà¸\99รุà¹\88à¸\99à¸\97ีà¹\88à¸\8bà¹\88อà¸\99à¹\82à¸\94ยà¸\9cูà¹\89à¸\94ูà¹\81ลระà¸\9aà¸\9aà¸\82ัà¹\89à¸\99à¸\9eืà¹\89à¸\99à¸\90าà¸\99',
-'right-suppressionlog' => 'à¸\94ูà¸\9aัà¸\99à¸\97ึà¸\81ส่วนตัว',
-'right-block' => 'บล็อกผู้ใช้อื่น ๆ จากการแก้ไข',
-'right-blockemail' => 'à¸\9aลà¹\87อà¸\81à¸\9cูà¹\89à¹\83à¸\8aà¹\89à¸\88าà¸\81à¸\81ารส่งอีเมล',
+'right-suppressrevision' => 'à¸\94ูà¹\81ละà¸\81ูà¹\89à¸\84ืà¸\99รุà¹\88à¸\99à¸\97ีà¹\88à¸\8bà¹\88อà¸\99à¸\88าà¸\81à¸\9cูà¹\89à¸\94ูà¹\81ลระà¸\9aà¸\9a',
+'right-suppressionlog' => 'à¸\94ูà¸\9bูมส่วนตัว',
+'right-block' => 'บล็อกผู้ใช้อื่นมิให้แก้ไข',
+'right-blockemail' => 'à¸\9aลà¹\87อà¸\81à¸\9cูà¹\89à¹\83à¸\8aà¹\89มิà¹\83หà¹\89ส่งอีเมล',
 'right-hideuser' => 'บล็อกผู้ใช้และซ่อนไม่ให้ผู้อื่นเห็น',
 'right-ipblock-exempt' => 'ผ่านการบล็อกหมายเลขไอพี บล็อกแบบอัตโนมัติ และบล็อกเป็นช่วง',
 'right-proxyunbannable' => 'ผ่านการบล็อกแบบอัตโนมัติของพร็อกซี',
-'right-unblockself' => 'ยà¸\81à¹\80ลิà¸\81à¸\81ารà¸\9bิà¸\94à¸\81ัà¹\89à¸\99à¸\94à¹\89วยเอง',
+'right-unblockself' => 'ยà¸\81à¹\80ลิà¸\81à¸\81ารà¸\9aลà¹\87อà¸\81à¸\95à¸\99เอง',
 'right-protect' => 'เปลี่ยนระดับการล็อกและแก้ไขหน้าที่ถูกล็อก',
 'right-editprotected' => 'แก้ไขหน้าที่ถูกล็อก (ที่ไม่ล็อกแบบสืบทอด)',
 'right-editinterface' => 'แก้ไขอินเตอร์เฟซของผู้ใช้',
 'right-editusercssjs' => 'แก้ไข CSS และ JS ของผู้ใช้คนอื่น',
 'right-editusercss' => 'แก้ไข CSS ของผู้ใช้คนอื่น',
 'right-edituserjs' => 'แก้ไข JS ของผู้ใช้คนอื่น',
-'right-rollback' => 'ยà¹\89อà¸\99à¸\81ารà¹\81à¸\81à¹\89à¹\84à¸\82à¸\82อà¸\87à¸\9cูà¹\89à¹\83à¸\8aà¹\89ลà¹\88าสุà¸\94à¸\97ีà¹\88à¹\81à¸\81à¹\89à¹\84à¸\82à¸\9aาà¸\87หà¸\99à¹\89าà¹\82à¸\94ยà¹\80à¸\89à¸\9eาะอยà¹\88าà¸\87รวà¸\94à¹\80รà¹\87ว',
+'right-rollback' => 'ย้อนการแก้ไขของผู้ใช้ล่าสุดที่แก้ไขหน้าโดยเฉพาะอย่างรวดเร็ว',
 'right-markbotedits' => 'ทำเครื่องหมายการย้อนว่าเป็นการแก้ไขโดยบอต',
 'right-noratelimit' => 'ไม่มีผลกระทบจากการจำกัดสิทธิตามเวลา',
 'right-import' => 'นำเข้าหน้าจากวิกิอื่น',
 'right-importupload' => 'นำเข้าหน้าจากไฟล์ที่อัปโหลด',
 'right-patrol' => 'ทำเครื่องหมายการแก้ไขของผู้อื่นว่าตรวจสอบแล้ว',
-'right-autopatrol' => 'à¸\95ัà¹\89à¸\87à¹\83หà¹\89à¸\81ารà¹\81à¸\81à¹\89à¹\84à¸\82à¸\82อà¸\87à¸\95à¸\99à¹\80อà¸\87วà¹\88าà¸\95รวà¸\88สอà¸\9aà¹\81ลà¹\89วà¹\82à¸\94ยอัตโนมัติ',
+'right-autopatrol' => 'à¸\95ัà¹\89à¸\87à¸\81ารà¹\81à¸\81à¹\89à¹\84à¸\82à¸\82อà¸\87à¸\95à¸\99à¹\80อà¸\87วà¹\88าà¸\95รวà¸\88สอà¸\9aà¹\81ลà¹\89วอัตโนมัติ',
 'right-patrolmarks' => 'ดูการเปลี่ยนแปลงล่าสุดของการทำเครื่องหมายตรวจสอบ',
-'right-unwatchedpages' => 'à¸\94ูรายà¸\8aืà¹\88อà¸\82อà¸\87หà¸\99à¹\89าà¸\97ีà¹\88à¹\84มà¹\88à¸\96ูà¸\81à¹\80à¸\9dà¹\89าà¸\94ูà¹\82à¸\94ยà¸\9cูà¹\89à¹\83à¸\8aà¹\89à¹\83à¸\94 à¹\86',
+'right-unwatchedpages' => 'à¸\94ูรายà¸\81ารหà¸\99à¹\89าà¸\97ีà¹\88à¹\84มà¹\88มีà¸\9cูà¹\89à¹\80à¸\9dà¹\89าà¸\94ู',
 'right-mergehistory' => 'รวมประวัติการแก้ไขหน้า',
 'right-userrights' => 'แก้ไขสิทธิผู้ใช้ทั้งหมด',
-'right-userrights-interwiki' => 'à¹\81à¸\81à¹\89à¹\84à¸\82สิà¸\97à¸\98ิà¸\82อà¸\87à¸\9cูà¹\89à¹\83à¸\8aà¹\89อืà¹\88à¸\99บนวิกิอื่น',
+'right-userrights-interwiki' => 'à¹\81à¸\81à¹\89à¹\84à¸\82สิà¸\97à¸\98ิà¸\9cูà¹\89à¹\83à¸\8aà¹\89à¸\82อà¸\87à¸\9cูà¹\89à¹\83à¸\8aà¹\89บนวิกิอื่น',
 'right-siteadmin' => 'ล็อกและปลดล็อกฐานข้อมูล',
 'right-override-export-depth' => 'ส่งออกหน้า รวมหน้าที่เชื่อมโยงกับหน้านี้สูงสุด 5 ลำดับชั้น',
 'right-sendemail' => 'ส่งอีเมลหาผู้ใช้อื่น',
-'right-passwordreset' => 'เปลี่ยนรหัสผ่านของผู้ใช้ ([[Special:PasswordReset|หน้าพิเศษ]])',
+'right-passwordreset' => 'ดูอีเมลตั้งรหัสผ่านใหม่',
+
+# Special:Log/newusers
+'newuserlogpage' => 'ปูมการสร้างบัญชีผู้ใช้',
+'newuserlogpagetext' => 'นี่คือปูมการสร้างบัญชีผู้ใช้',
 
 # User rights log
 'rightslog' => 'ปูมสิทธิผู้ใช้',
 'rightslogtext' => 'ส่วนนี้คือปูมการเปลี่ยนแปลงสิทธิผู้ใช้',
-'rightslogentry' => '$1 ถูกเปลี่ยนกลุ่มจาก $2 เป็น $3',
-'rightsnone' => '(ไม่มี)',
 
 # Associated actions - in the sentence "You do not have permission to X"
 'action-read' => 'อ่านหน้านี้',
@@ -1422,7 +1451,7 @@ $1",
 'action-createaccount' => 'สร้างบัญชีผู้ใช้นี้',
 'action-minoredit' => 'เป็นการแก้ไขเล็กน้อย',
 'action-move' => 'ย้ายหน้านี้',
-'action-move-subpages' => 'ย้ายหน้านี้และหน้าย่อยของหน้านี้',
+'action-move-subpages' => 'ย้ายหน้านี้ รวมทั้งหน้าย่อย',
 'action-move-rootuserpages' => 'ย้ายหน้าผู้ใช้หลัก',
 'action-movefile' => 'ย้ายไฟล์นี้',
 'action-upload' => 'อัปโหลดไฟล์นี้',
@@ -1434,24 +1463,24 @@ $1",
 'action-deleterevision' => 'ลบรุ่นนี้',
 'action-deletedhistory' => 'ดูประวัติที่ถูกลบของหน้านี้',
 'action-browsearchive' => 'ค้นหาหน้าที่ถูกลบ',
-'action-undelete' => 'à¹\80รียà¸\81คืนหน้านี้',
-'action-suppressrevision' => 'à¸\95รวà¸\88à¸\94ูà¹\81ละà¹\80รียà¸\81คืนรุ่นที่ซ่อนอยู่นี้',
-'action-suppressionlog' => 'à¸\94ูà¸\9aัà¸\99à¸\97ึà¸\81ส่วนตัว',
-'action-block' => 'à¸\9aลà¹\87อà¸\81à¸\9cูà¹\89à¹\83à¸\8aà¹\89รายà¸\99ีà¹\89à¸\88าà¸\81à¸\81ารแก้ไข',
+'action-undelete' => 'à¸\81ูà¹\89คืนหน้านี้',
+'action-suppressrevision' => 'à¸\95รวà¸\88à¸\94ูà¹\81ละà¸\81ูà¹\89คืนรุ่นที่ซ่อนอยู่นี้',
+'action-suppressionlog' => 'à¸\94ูà¸\9bูมส่วนตัว',
+'action-block' => 'à¸\9aลà¹\87อà¸\81à¸\9cูà¹\89à¹\83à¸\8aà¹\89รายà¸\99ีà¹\89มิà¹\83หà¹\89แก้ไข',
 'action-protect' => 'เปลี่ยนระดับการล็อกสำหรับหน้านี้',
-'action-import' => 'à¸\99ำà¹\80à¸\82à¹\89าหà¸\99à¹\89าà¸\99ีà¹\89มาà¸\88าà¸\81วิà¸\81ิอืà¹\88à¸\99',
+'action-import' => 'นำเข้าหน้านี้จากวิกิอื่น',
 'action-importupload' => 'นำเข้าหน้านี้จากไฟล์ที่อัปโหลดแล้ว',
 'action-patrol' => 'ทำเครื่องหมายการแก้ไขของผู้ใช้อื่นว่าตรวจแล้ว',
 'action-autopatrol' => 'ทำเครื่องหมายการแก้ไขของคุณว่าตรวจแล้ว',
-'action-unwatchedpages' => 'à¸\94ูรายà¸\81ารà¸\82อà¸\87หà¸\99à¹\89าà¸\97ีà¹\88à¹\84มà¹\88มีà¸\9cูà¹\89à¹\80à¸\9dà¹\89าà¸\94ู',
+'action-unwatchedpages' => 'ดูรายการหน้าที่ไม่มีผู้เฝ้าดู',
 'action-mergehistory' => 'รวมประวัติหน้านี้',
 'action-userrights' => 'แก้ไขสิทธิผู้ใช้ทั้งหมด',
 'action-userrights-interwiki' => 'แก้ไขสิทธิผู้ใช้สำหรับวิกินี้',
 'action-siteadmin' => 'ล็อกหรือปลดล็อกฐานข้อมูล',
-'action-sendemail' => 'ส่งอีเมล',
+'action-sendemail' => 'ส่งอีเมล',
 
 # Recent changes
-'nchanges' => '$1 {{PLURAL:$1|การแก้ไข|การแก้ไข}}',
+'nchanges' => '$1 การแก้ไข',
 'recentchanges' => 'ปรับปรุงล่าสุด',
 'recentchanges-legend' => 'ตัวเลือกปรับปรุงล่าสุด',
 'recentchanges-summary' => 'ในหน้านี้เป็นรายการล่าสุดที่มีการปรับปรุง',
@@ -1460,7 +1489,7 @@ $1",
 'recentchanges-label-minor' => 'เป็นการแก้ไขเล็กน้อย',
 'recentchanges-label-bot' => 'การแก้ไขนี้กระทำโดยบอต',
 'recentchanges-label-unpatrolled' => 'การแก้ไขนี้ยังไม่ได้ตรวจสอบ',
-'rcnote' => "รายการด้านล่างคือการแก้ไข {{PLURAL:$1|'''1''' รายการ|ล่าสุด '''$1''' รายการ}} ในช่วง {{PLURAL:$2|1 วัน|'''$2''' วัน}}ที่ผ่านมา ตั้งแต่วันที่ $5; $4",
+'rcnote' => "รายการด้านล่างคือการแก้ไข {{PLURAL:$1|'''1''' รายการ|ล่าสุด '''$1''' รายการ}} ในช่วง '''$2''' วันที่ผ่านมา จนถึง $5, $4",
 'rcnotefrom' => "แสดงการเปลี่ยนแปลงตั้งแต่ '''$2''' (แสดง '''$1''' รายการ)",
 'rclistfrom' => 'แสดงการเปลี่ยนแปลงตั้งแต่ $1',
 'rcshowhideminor' => '$1การแก้ไขเล็กน้อย',
@@ -1469,7 +1498,7 @@ $1",
 'rcshowhideanons' => '$1ผู้ใช้นิรนาม',
 'rcshowhidepatr' => '$1การแก้ไขที่ตรวจสอบแล้ว',
 'rcshowhidemine' => '$1การแก้ไขของฉัน',
-'rclinks' => 'แสดงการปรับปรุงล่าสุด $1 รายการ ในช่วง $2 วันที่ผ่านมา;<br />$3',
+'rclinks' => 'แสดงการปรับปรุงล่าสุด $1 รายการ ในช่วง $2 วันที่ผ่านมา<br />$3',
 'diff' => 'ต่าง',
 'hist' => 'ประวัติ',
 'hide' => 'ซ่อน',
@@ -1481,9 +1510,11 @@ $1",
 'number_of_watching_users_pageview' => '[$1 คนเฝ้าดู]',
 'rc_categories' => 'จำกัดเฉพาะหมวดหมู่ (แยกด้วย "|")',
 'rc_categories_any' => 'ใด ๆ',
-'newsectionsummary' => '/* $1 */ หัวข้อใหม่',
-'rc-enhanced-expand' => 'แสดงรายละเอียด (จำเป็นต้องใช้จาวาสคริปต์)',
+'rc-change-size-new' => '$1 ไบต์หลังปรับปรุง',
+'newsectionsummary' => '/* $1 */ ส่วนใหม่',
+'rc-enhanced-expand' => 'แสดงรายละเอียด (ต้องใช้จาวาสคริปต์)',
 'rc-enhanced-hide' => 'ซ่อนรายละเอียด',
+'rc-old-title' => 'เดิมถูกสร้างในชื่อ "$1"',
 
 # Recent changes linked
 'recentchangeslinked' => 'ปรับปรุงที่เกี่ยวโยง',
@@ -1496,22 +1527,22 @@ $1",
 'recentchangeslinked-to' => 'แสดงการเปลี่ยนแปลงที่เชื่อมโยงมายังหน้านี้แทน',
 
 # Upload
-'upload' => 'อัปโหลด',
-'uploadbtn' => 'อัปโหลด',
-'reuploaddesc' => 'à¸\81ลัà¸\9aà¹\84à¸\9bสูà¹\88หà¸\99à¹\89าอัปโหลด',
+'upload' => 'อัปโหลดไฟล์',
+'uploadbtn' => 'อัปโหลดไฟล์',
+'reuploaddesc' => 'ยà¸\81à¹\80ลิà¸\81à¸\81ารอัà¸\9bà¹\82หลà¸\94à¹\81ละà¸\81ลัà¸\9aà¹\84à¸\9bยัà¸\87à¹\81à¸\9aà¸\9aอัปโหลด',
 'upload-tryagain' => 'ส่งคำอธิบายไฟล์ที่ปรับแต่งแล้ว',
 'uploadnologin' => 'ไม่ได้ล็อกอิน',
-'uploadnologintext' => 'ต้องทำการ[[Special:UserLogin|ล็อกอิน]]ก่อนถึงจะอัปโหลดไฟล์ได้',
-'upload_directory_missing' => 'à¹\84à¸\94à¹\80รà¸\81à¸\97อรีสำหรัà¸\9aอัà¸\9bà¹\82หลà¸\94 ($1) à¸«à¸²à¸¢à¹\84à¸\9b à¹\81ละà¹\84มà¹\88สามารà¸\96สรà¹\89าà¸\87à¸\82ึà¹\89à¸\99à¹\83หมà¹\88à¹\82à¸\94ยà¹\80วà¹\87à¸\9aà¹\80à¸\8bิรà¹\8cà¸\9fà¹\80วอรà¹\8c',
+'uploadnologintext' => 'ต้อง[[Special:UserLogin|ล็อกอิน]]ก่อนจึงจะอัปโหลดไฟล์ได้',
+'upload_directory_missing' => 'à¹\84à¸\94à¹\80รà¸\81à¸\97อรีสำหรัà¸\9aอัà¸\9bà¹\82หลà¸\94 ($1) à¸«à¸²à¸¢à¹\84à¸\9b à¹\81ละà¹\80วà¹\87à¸\9aà¹\80à¸\8bิรà¹\8cà¸\9fà¹\80วอรà¹\8cà¹\84มà¹\88สามารà¸\96สรà¹\89าà¸\87à¹\84à¸\94à¹\89',
 'upload_directory_read_only' => 'ไม่สามารถเก็บข้อมูลในไดเรกทอรี ($1) ปัญหาเกิดที่เว็บเซิร์ฟเวอร์',
-'uploaderror' => 'à¹\80à¸\81ิà¸\94à¸\84วามà¸\82ัà¸\94à¸\82à¹\89อà¸\87à¹\83à¸\99à¸\81ารอัà¸\9bà¹\82หลด',
-'upload-recreate-warning' => "'''à¸\84ำà¹\80à¸\95ือà¸\99: à¹\84à¸\9fลà¹\8cà¸\8aืà¹\88อà¸\94ัà¸\87à¸\81ลà¹\88าวà¸\96ูà¸\81ลà¸\9aหรือà¸\96ูà¸\81ยà¹\89ายà¹\84à¸\9bแล้ว'''
+'uploaderror' => 'à¸\81ารอัà¸\9bà¹\82หลà¸\94à¹\80à¸\81ิà¸\94à¸\82à¹\89อà¸\9cิà¸\94à¸\9eลาด',
+'upload-recreate-warning' => "'''à¸\84ำà¹\80à¸\95ือà¸\99: à¹\84à¸\9fลà¹\8cà¸\8aืà¹\88อà¸\99ัà¹\89à¸\99à¸\96ูà¸\81ลà¸\9aหรือà¹\80à¸\9bลีà¹\88ยà¸\99à¸\8aืà¹\88อแล้ว'''
 
 ปูมการลบและปูมการย้ายของหน้านี้ถูกนำมาไว้ด้านล่างเพื่อความสะดวก:",
-'uploadtext' => "à¸\81รุà¸\93าà¹\83à¸\8aà¹\89à¹\81à¸\9aà¸\9aà¸\9fอรà¹\8cมà¸\94à¹\89าà¸\99ลà¹\88าà¸\87à¹\83à¸\99à¸\81ารอัà¸\9bà¹\82หลà¸\94à¹\84à¸\9fลà¹\8c
-สำหรัà¸\9aà¸\81ารà¸\94ูหรือà¸\81ารà¸\84à¹\89à¸\99หาà¹\84à¸\9fลà¹\8cà¸\97ีà¹\88à¹\80à¸\84ยอัà¸\9bà¹\82หลà¸\94à¸\81à¹\88อà¸\99หà¸\99à¹\89าà¸\99ีà¹\89 à¹\83หà¹\89à¹\84à¸\9bà¸\97ีà¹\88[[Special:FileList|รายà¸\8aืà¹\88อà¹\84à¸\9fลà¹\8cà¸\97ีà¹\88à¸\96ูà¸\81อัà¸\9bà¹\82หลà¸\94]] à¸\81ารอัà¸\9bà¹\82หลà¸\94à¹\81ละà¸\81ารอัà¸\9bà¹\82หลà¸\94à¸\8bà¹\89ำà¸\94ูà¹\84à¸\94à¹\89à¸\97ีà¹\88[[Special:Log/upload|à¸\9aัà¸\99à¸\97ึà¸\81à¸\81ารอัà¸\9bà¹\82หลà¸\94]] à¹\81ละà¸\81ารลà¸\9aà¹\84à¸\9fลà¹\8cà¸\94ูà¹\84à¸\94à¹\89à¸\97ีà¹\88[[Special:Log/delete|à¸\9aัà¸\99à¸\97ึà¸\81การลบ]]
+'uploadtext' => "กรุณาใช้แบบด้านล่างในการอัปโหลดไฟล์
+สำหรัà¸\9aà¸\81ารà¸\94ูหรือà¸\81ารà¸\84à¹\89à¸\99หาà¹\84à¸\9fลà¹\8cà¸\97ีà¹\88à¹\80à¸\84ยอัà¸\9bà¹\82หลà¸\94à¸\81à¹\88อà¸\99หà¸\99à¹\89าà¸\99ีà¹\89 à¹\83หà¹\89à¹\84à¸\9bà¸\97ีà¹\88[[Special:FileList|รายà¸\8aืà¹\88อà¹\84à¸\9fลà¹\8cà¸\97ีà¹\88à¸\96ูà¸\81อัà¸\9bà¹\82หลà¸\94]] à¸\81ารอัà¸\9bà¹\82หลà¸\94à¹\81ละà¸\81ารอัà¸\9bà¹\82หลà¸\94à¸\8bà¹\89ำà¸\94ูà¹\84à¸\94à¹\89à¸\97ีà¹\88[[Special:Log/upload|à¸\9bูมà¸\81ารอัà¸\9bà¹\82หลà¸\94]] à¹\81ละà¸\81ารลà¸\9aà¹\84à¸\9fลà¹\8cà¸\94ูà¹\84à¸\94à¹\89à¸\97ีà¹\88[[Special:Log/delete|à¸\9bูมการลบ]]
 
-ถ้าต้องการแทรกไฟล์ลงในหน้าหนึ่งๆ ให้ใช้คำสั่งหนึ่งในรูปแบบต่อไปนี้
+ถ้าต้องการแทรกไฟล์ลงในหน้าหนึ่ง ๆ ให้ใช้คำสั่งหนึ่งในรูปแบบต่อไปนี้
 * '''<code><nowiki>[[</nowiki>{{ns:file}}<nowiki>:File.jpg]]</nowiki></code>''' เพื่อใช้รูปขนาดเต็ม
 * '''<code><nowiki>[[</nowiki>{{ns:file}}<nowiki>:File.png|200px|thumb|left|ข้อความอธิบาย]]</nowiki></code>''' เพื่อใช้รูปย่อขนาดกว้าง 200 พิกเซลในกล่องที่จัดชิดซ้าย โดยมี \"ข้อความอธิบาย\" เป็นคำบรรยายใต้ภาพ
 * '''<code><nowiki>[[</nowiki>{{ns:media}}<nowiki>:File.ogg]]</nowiki></code>''' สำหรับการเชื่อมโยงไฟล์โดยตรง โดยไม่ปรากฏไฟล์นั้นออกมา",
@@ -1528,10 +1559,10 @@ $1",
 'filestatus' => 'สถานะลิขสิทธิ์:',
 'filesource' => 'แหล่งที่มา:',
 'uploadedfiles' => 'ไฟล์ที่อัปโหลดแล้ว',
-'ignorewarning' => 'à¸\9aัà¸\99à¸\97ึà¸\81à¹\84à¸\9fลà¹\8cà¹\82à¸\94ยà¹\84มà¹\88สà¸\99คำเตือน',
+'ignorewarning' => 'à¸\9aัà¸\99à¸\97ึà¸\81à¹\84à¸\9fลà¹\8cà¹\82à¸\94ยละà¹\80ลยคำเตือน',
 'ignorewarnings' => 'ไม่แสดงคำเตือน',
-'minlength1' => 'ชื่อไฟล์ต้องมีตัวอักษรอย่างน้อยหนึ่งตัวอักษร',
-'illegalfilename' => 'à¸\8aืà¹\88อà¹\84à¸\9fลà¹\8c  "$1" à¸¡à¸µà¸\95ัวอัà¸\81ษรà¸\97ีà¹\88à¹\84มà¹\88สามารà¸\96à¸\99ำมาà¹\83à¸\8aà¹\89à¹\84à¸\94à¹\89 à¸\81รุà¸\93าà¹\80à¸\9bลีà¹\88ยà¸\99à¸\8aืà¹\88อà¹\84à¸\9fลà¹\8cà¹\81ละอัà¸\9bà¹\82หลà¸\94อีà¸\81à¸\84รัà¹\89à¸\87หà¸\99ึà¹\88ง',
+'minlength1' => 'ชื่อไฟล์ต้องมีตัวอักษรอย่างน้อยหนึ่งตัว',
+'illegalfilename' => 'à¸\8aืà¹\88อà¹\84à¸\9fลà¹\8c  "$1" à¸¡à¸µà¸\95ัวอัà¸\81ษรà¸\97ีà¹\88à¹\84มà¹\88อà¸\99ุà¸\8dาà¸\95à¹\83หà¹\89à¸\9bราà¸\81à¸\8fà¹\83à¸\99à¸\8aืà¹\88อ à¸\81รุà¸\93าà¹\80à¸\9bลีà¹\88ยà¸\99à¸\8aืà¹\88อà¹\84à¸\9fลà¹\8cà¹\81ละอัà¸\9bà¹\82หลà¸\94อีà¸\81à¸\84รัà¹\89ง',
 'filename-toolong' => 'ชื่อไฟล์ไม่อาจยาวกว่า 240 ไบต์',
 'badfilename' => 'ชื่อไฟล์ถูกเปลี่ยนเป็น "$1"',
 'filetype-mime-mismatch' => 'นามสกุลไฟล์ ".$1" ไม่ตรงกับชนิด MIME ของแฟ้มที่ตรวจพบ ($2)',
@@ -1546,7 +1577,7 @@ $1",
 'filename-tooshort' => 'ชื่อไฟล์สั้นเกินไป',
 'filetype-banned' => 'ไฟล์ประเภทนี้ถูกห้าม',
 'verification-error' => 'ไฟล์นี้ไม่ผ่านการพิสูจน์ยืนยันไฟล์',
-'hookaborted' => 'สิà¹\88à¸\87à¸\97ีà¹\88à¸\84ุà¸\93à¸\9eยายามà¸\97ีà¹\88à¸\88ะà¸\97ำà¸\81ารà¸\9bรัà¸\9aà¹\80à¸\9bลีà¹\88ยà¸\99à¹\84à¸\94à¹\89ถูกยกเลิกโดยส่วนขยาย',
+'hookaborted' => 'สิà¹\88à¸\87à¸\97ีà¹\88à¸\84ุà¸\93à¸\9eยายามà¸\9bรัà¸\9aà¹\80à¸\9bลีà¹\88ยà¸\99ถูกยกเลิกโดยส่วนขยาย',
 'illegal-filename' => 'ชื่อไฟล์นี้ไม่ได้รับอนุญาต',
 'overwrite' => 'ไม่อนุญาตให้เขียนทับไฟล์ที่มีอยู่แล้ว',
 'unknown-error' => 'เกิดข้อผิดพลาดไม่ทราบสาเหตุ',
@@ -1583,9 +1614,9 @@ $1",
 'uploadwarning' => 'คำเตือนการอัปโหลด',
 'uploadwarning-text' => 'กรุณาแก้ไขคำอธิบายไฟล์ด้านล่างนี้ แล้วลองใหม่อีกครั้ง',
 'savefile' => 'บันทึกไฟล์',
-'uploadedimage' => '"[[$1]]" ถูกอัปโหลด',
+'uploadedimage' => 'อัปโหลด "[[$1]]"',
 'overwroteimage' => 'อัปโหลดรุ่นใหม่ของ "[[$1]]"',
-'uploaddisabled' => 'อัà¸\9bà¹\82หลà¸\94à¸\9bิà¸\94à¸\81ารà¹\83à¸\8aà¹\89à¸\87าà¸\99',
+'uploaddisabled' => 'à¸\9bิà¸\94à¸\81ารà¹\83à¸\8aà¹\89à¸\87าà¸\99อัà¸\9bà¹\82หลà¸\94',
 'copyuploaddisabled' => 'การอัปโหลดโดย URL ได้ถูกปิดการใช้งานไว้',
 'uploadfromurl-queued' => 'การอัพโหลดของคุณได้ถูกจัดในคิวแล้ว',
 'uploaddisabledtext' => 'การอัปโหลดไฟล์ถูกปิดการใช้งาน',
@@ -1594,7 +1625,7 @@ $1",
 'uploadscripted' => 'ไฟล์นี้มีส่วนประกอบของโค้ดเอชทีเอ็มแอลหรือสคริปต์ ซึ่งอาจก่อให้เกิดความผิดพลาดในการแสดงผลของเว็บเบราว์เซอร์',
 'uploadvirus' => 'ไฟล์นี้มีไวรัส! รายละเอียด: $1',
 'upload-source' => 'ไฟล์ต้นทาง',
-'sourcefilename' => 'à¹\84à¸\9fลà¹\8cà¸\97ีà¹\88à¸\95à¹\89อà¸\87à¸\81าร:',
+'sourcefilename' => 'à¸\8aืà¹\88อà¹\84à¸\9fลà¹\8cà¸\95à¹\89à¸\99à¸\97าà¸\87:',
 'sourceurl' => 'URL ที่มา:',
 'destfilename' => 'ชื่อไฟล์ที่ต้องการ:',
 'upload-maxfilesize' => 'ขนาดไฟล์ที่ใหญ่ที่สุดที่อนุญาต: $1',
@@ -1602,7 +1633,7 @@ $1",
 'upload-options' => 'ตัวเลือกอัปโหลด',
 'watchthisupload' => 'เฝ้าดูไฟล์นี้',
 'filewasdeleted' => 'ไฟล์ในชื่อนี้ได้ถูกอัปโหลดก่อนหน้าและถูกลบไปแล้ว กรุณาตรวจสอบ $1 ก่อนที่จะอัปโหลดใหม่อีกครั้ง',
-'filename-bad-prefix' => "ไฟล์ที่คุณกำลังจะอัปโหลดเข้ามานี้มีชื่อที่ขึ้นต้นด้วย '''\"\$1\"''' ซึ่งเป็นชื่อที่ไม่สื่อความหมายใดๆ (โดยปกติแล้วชื่อนี้จะถูกตั้งมาโดยกล้องถ่ายรูปดิจิทัล).  กรุณาตั้งชื่อไฟล์ใหม่ที่สื่อความหมายมากกว่าเดิม",
+'filename-bad-prefix' => "ไฟล์ที่คุณกำลังจะอัปโหลดเข้ามานี้มีชื่อที่ขึ้นต้นด้วย '''\"\$1\"''' ซึ่งเป็นชื่อที่ไม่สื่อความหมายใด ๆ ที่โดยปกติแล้วชื่อนี้จะถูกตั้งโดยกล้องถ่ายรูปดิจิทัลอัตโนมัติ กรุณาตั้งชื่อไฟล์ใหม่ที่สื่อความหมายกว่าเดิม",
 'upload-success-subj' => 'อัปโหลดสำเร็จ',
 'upload-success-msg' => 'การอัปโหลดของคุณจาก [$2] สำเร็จแล้ว และสามารถใช้ไฟล์ได้ที่นี่: [[:{{ns:file}}:$1]]',
 'upload-failure-subj' => 'ปัญหาการอัปโหลด',
@@ -1626,11 +1657,15 @@ $1',
 'backend-fail-backup' => 'ไม่สามารถสำรองข้อมูลไฟล์ $1.',
 'backend-fail-notexists' => 'ไม่พบไฟล์ $1 ที่ต้องการ',
 'backend-fail-delete' => 'ไม่สามารถลบไฟล์ $1 ได้',
-'backend-fail-alreadyexists' => 'ไฟล์ $1 มีอยู่แล้ว',
-'backend-fail-copy' => 'ไม่สามารถคัดลอกไฟล์ $1 ไปยัง $2 ได้',
-'backend-fail-move' => 'ไม่สามารถย้ายไฟล์ $1 ไปยัง $2 ได้',
-'backend-fail-read' => 'ไม่สามารถอ่านไฟล์ $1 ได้',
-'backend-fail-create' => 'ไม่สามารถสร้างไฟล์ $1 ได้.',
+'backend-fail-alreadyexists' => 'มีไฟล์ "$1" อยู่แล้ว',
+'backend-fail-store' => 'ไม่สามารถเก็บไฟล์ "$1" ที่ "$2" ได้',
+'backend-fail-copy' => 'ไม่สามารถคัดลอกไฟล์ "$1" ไปยัง "$2" ได้',
+'backend-fail-move' => 'ไม่สามารถย้ายไฟล์ "$1" ไปยัง "$2" ได้',
+'backend-fail-opentemp' => 'ไม่สามารถเปิดไฟล์ชั่วคราวได้',
+'backend-fail-writetemp' => 'ไม่สามารถเขียนไฟล์ชั่วคราวได้',
+'backend-fail-closetemp' => 'ไม่สามารถปิดไฟล์ชั่วคราวได้',
+'backend-fail-read' => 'ไม่สามารถอ่านไฟล์ "$1" ได้',
+'backend-fail-create' => 'ไม่สามารถเขียนไฟล์ "$1" ได้',
 
 # ZipDirectoryReader
 'zip-unsupported' => 'ไฟล์ดังกล่าวเป็นไฟล์ ZIP ซึ่งใช้คุณสมบัติ ZIP ที่ไม่ได้รับการสนับสนุนโดย MediaWiki.
@@ -1649,7 +1684,7 @@ $1',
 'img-auth-accessdenied' => 'การเข้าถึงถูกจำกัด',
 'img-auth-nopathinfo' => 'ค่า PATH_INFO สูญหาย
 เซิร์ฟเวอร์ของคุณอาจไม่ได้ถูกตั้งให้ส่งข้อมูลนี้
-หรือà¹\80à¸\8bิรà¹\8cà¸\9fà¹\80วอรà¹\8cอาà¸\88à¸\88ะà¹\80à¸\9bà¹\87à¸\99à¹\81à¸\9aà¸\9a CGI-based à¹\81ละà¹\84มà¹\88สà¸\99ัà¸\9aสà¸\99ุà¸\99à¸\82à¹\89อมูล img_auth
+หรือเซิร์ฟเวอร์อาจเป็นแบบ CGI-based และไม่สนับสนุนข้อมูล img_auth
 ดูที่ https://www.mediawiki.org/wiki/Manual:Image_Authorization',
 'img-auth-notindir' => 'ที่อยู่ที่ร้องขอไม่ได้อยู่ในไดเร็กทอรีอัพโหลดที่กำหนดไ้ว้',
 'img-auth-badtitle' => 'ไม่สามารถสร้างชื่อเรื่องที่ถูกต้องจาก "$1" ได้',
@@ -1690,9 +1725,9 @@ $1',
 # Special:ListFiles
 'listfiles-summary' => 'หน้าพิเศษนี้แสดงไฟล์ทั้งหมดที่อัปโหลด
 เมื่อกรองตามผู้ใช้แล้ว จะแสดงเฉพาะไฟล์รุ่นล่าสุดที่ผู้ใช้นั้นอัปโหลด',
-'listfiles_search_for' => 'à¸\84à¹\89à¸\99หาà¸\8aืà¹\88อภาà¸\9e:',
+'listfiles_search_for' => 'à¸\84à¹\89à¸\99หาà¸\8aืà¹\88อสืà¹\88อ:',
 'imgfile' => 'ไฟล์',
-'listfiles' => 'รายà¸\8aืà¹\88อไฟล์',
+'listfiles' => 'รายà¸\81ารไฟล์',
 'listfiles_thumb' => 'รูปย่อ',
 'listfiles_date' => 'วันที่',
 'listfiles_name' => 'ชื่อ',
@@ -1704,7 +1739,7 @@ $1',
 # File description page
 'file-anchor-link' => 'ไฟล์',
 'filehist' => 'ประวัติไฟล์',
-'filehist-help' => 'กดเลือก วัน/เวลา เพื่อดูไฟล์ที่แสดงในวันนั้น',
+'filehist-help' => 'กดเลือกวัน/เวลา เพื่อดูไฟล์ที่ปรากฏในขณะนั้น',
 'filehist-deleteall' => 'ลบทั้งหมด',
 'filehist-deleteone' => 'ลบ',
 'filehist-revert' => 'ย้อน',
@@ -1719,31 +1754,37 @@ $1',
 'filehist-comment' => 'ความเห็น',
 'filehist-missing' => 'ไฟล์หายไป',
 'imagelinks' => 'การใช้ไฟล์',
-'linkstoimage' => '{{PLURAL:$1|หน้า|หน้า}}ที่ลิงก์มายังไฟล์นี้:',
-'linkstoimage-more' => 'ไฟล์นี้มีการเชื่อมโยงมากกว่า $1 {{PLURAL:$1|แห่ง|แห่ง}}
-รายà¸\8aืà¹\88อà¸\95à¹\88อà¹\84à¸\9bà¸\99ีà¹\89à¹\81สà¸\94à¸\87à¸\81ารà¹\80à¸\8aืà¹\88อมà¹\82ยà¸\87 $1 {{PLURAL:$1|à¹\81หà¹\88à¸\87à¹\81รà¸\81|à¹\81หà¹\88à¸\87à¹\81รà¸\81}}ที่มายังไฟล์นี้เท่านั้น
+'linkstoimage' => '$1 หน้าลิงก์มายังไฟล์นี้:',
+'linkstoimage-more' => 'ไฟล์นี้มีการเชื่อมโยงมากกว่า $1 แห่ง
+รายà¸\81ารà¸\95à¹\88อà¹\84à¸\9bà¸\99ีà¹\89à¹\81สà¸\94à¸\87à¸\81ารà¹\80à¸\8aืà¹\88อมà¹\82ยà¸\87 $1 à¹\81หà¹\88à¸\87à¹\81รà¸\81ที่มายังไฟล์นี้เท่านั้น
 ดูเพิ่มได้ที่[[Special:WhatLinksHere/$2|รายชื่อเต็ม]]',
-'nolinkstoimage' => 'à¹\84มà¹\88มีหà¸\99à¹\89าà¸\97ีà¹\88à¹\83à¸\8aà¹\89ภาà¸\9eนี้',
+'nolinkstoimage' => 'à¹\84มà¹\88มีหà¸\99à¹\89าà¸\97ีà¹\88ลิà¸\87à¸\81à¹\8cมาà¹\84à¸\9fลà¹\8cนี้',
 'morelinkstoimage' => 'ดู[[Special:WhatLinksHere/$1|หน้าที่ลิงก์]]มายังไฟล์นี้เพิ่มเติม',
-'duplicatesoffile' => '{{PLURAL:$1|ไฟล์|$1 ไฟล์}}ต่อไปนี้ เป็นไฟล์เดียวกับไฟล์นี้ ([[Special:FileDuplicateSearch/$2|รายละเอียดเพิ่ม]]):',
+'linkstoimage-redirect' => '$1 (แฟ้มเปลี่ยนทาง) $2',
+'duplicatesoffile' => '$1 ไฟล์ต่อไปนี้ เป็นไฟล์เดียวกับไฟล์นี้ ([[Special:FileDuplicateSearch/$2|รายละเอียดเพิ่ม]]):',
 'sharedupload' => 'ไฟล์นี้มาจาก $1 และอาจมีการใช้ในโครงการอื่น',
 'sharedupload-desc-there' => 'ไฟล์นี้มาจาก $1 และอาจถูกใช้บนโครงการอื่น ๆ
 กรุณาดู [หน้าคำอธิบายของไฟล์ $2] สำหรับข้อมูลเพิ่มเติม',
 'sharedupload-desc-here' => 'ไฟล์นี้มาจาก $1 และอาจมีใช้ในโครงการอื่น
 คำอธิบายใน[$2 หน้าไฟล์]ได้แสดงไว้ข้างล่างนี้',
+'sharedupload-desc-edit' => 'ไฟล์นี้มาจาก $1 และอาจมีการใช้ไฟล์นี้ในโครงการอื่น ๆ อีก
+หากคุณต้องการแก้ไขคำอธิบาย ให้ดำเนินการ[$2 ที่นี่]',
+'sharedupload-desc-create' => 'ไฟล์นี้มาจาก $1 และอาจมีการใช้ไฟล์นี้ในโครงการอื่น ๆ อีก
+หากคุณต้องการแก้ไขคำอธิบาย ให้ดำเนินการ[$2 ที่นี่]',
 'filepage-nofile' => 'ไม่มีไฟล์ชื่อนี้',
-'filepage-nofile-link' => 'à¹\84มà¹\88มีà¹\84à¸\9fลà¹\8cà¸\8aืà¹\88อà¸\99ีà¹\89 à¸­à¸¢à¹\88าà¸\87à¹\84รà¸\81à¹\87à¸\95ามคุณสามารถ[$1 อัปโหลด]ได้',
+'filepage-nofile-link' => 'à¹\84มà¹\88มีà¹\84à¸\9fลà¹\8cà¸\8aืà¹\88อà¸\99ีà¹\89 à¹\81à¸\95à¹\88คุณสามารถ[$1 อัปโหลด]ได้',
 'uploadnewversion-linktext' => 'อัปโหลดรุ่นใหม่ของไฟล์นี้',
 'shared-repo-from' => 'จาก $1',
 'shared-repo' => 'คลังที่ใช้ร่วมกัน',
 'shared-repo-name-wikimediacommons' => 'วิกิมีเดียคอมมอนส์',
 'filepage.css' => '/* สไตล์ชีตในหน้านี้ถูกรวมในหน้าคำอธิบายไฟล์ และถูกรวมในวิกิผู้รับบริการต่างถิ่นด้วย */',
+'upload-disallowed-here' => 'คุณไม่สามารถอัปโหลดไฟล์ใหม่ทับไฟล์เดิมนี้ได้',
 
 # File reversion
 'filerevert' => 'ย้อน $1',
 'filerevert-legend' => 'ย้อนไฟล์กลับ',
 'filerevert-intro' => '<span class="plainlinks">คุณกำลังย้อนไฟล์ \'\'\'[[Media:$1|$1]]\'\'\' ไปยัง [รุ่น $4 วันที่ $2, $3]</span>',
-'filerevert-comment' => 'สาà¹\80หà¸\95ุ:',
+'filerevert-comment' => 'à¹\80หà¸\95ุà¸\9cล:',
 'filerevert-defaultcomment' => 'ย้อนไปรุ่น $1, $2',
 'filerevert-submit' => 'ย้อน',
 'filerevert-success' => '<span class="plainlinks">\'\'\'[[Media:$1|$1]]\'\'\' ถูกย้อนไปยัง [รุ่น $4 วันที่ $2, $3]</span>',
@@ -1756,16 +1797,16 @@ $1',
 'filedelete-intro-old' => "คุณกำลังลบ '''[[Media:$1|$1]]''' รุ่น [$4 $3, $2]",
 'filedelete-comment' => 'เหตุผล:',
 'filedelete-submit' => 'ลบ',
-'filedelete-success' => "ลà¸\9aà¹\84à¸\9fลà¹\8c '''$1''' à¹\80รียà¸\9aรà¹\89อยà¹\81ลà¹\89ว",
-'filedelete-success-old' => "à¹\84à¸\9fลà¹\8c '''[[Media:$1|$1]]''' à¸£à¸¸à¹\88à¸\99à¹\80มืà¹\88อ $3, $2 à¸\96ูà¸\81ลà¸\9aà¹\80รียà¸\9aรà¹\89อยà¹\81ลà¹\89ว",
+'filedelete-success' => "ลบไฟล์ '''$1''' แล้ว",
+'filedelete-success-old' => "ไฟล์ '''[[Media:$1|$1]]''' รุ่นเมื่อ $3, $2 ถูกลบแล้ว",
 'filedelete-nofile' => "ไม่มีไฟล์ '''$1'''",
 'filedelete-nofile-old' => "ไม่มี '''$1''' ตามคุณลักษณะที่กำหนด อยู่ในกรุ",
-'filedelete-otherreason' => 'เหตุผลอื่นเพิ่มเติม:',
+'filedelete-otherreason' => 'เหตุผลอื่น/เพิ่มเติม:',
 'filedelete-reason-otherlist' => 'เหตุผลอื่น',
-'filedelete-reason-dropdown' => '* à¹\80หà¸\95ุà¸\9cลà¸\97ัà¹\88วà¹\84à¸\9bà¸\82อà¸\87à¸\81ารลà¸\9a
+'filedelete-reason-dropdown' => '* à¹\80หà¸\95ุà¸\9cลà¸\81ารลà¸\9aà¸\97ัà¹\88วà¹\84à¸\9b
 ** ละเมิดลิขสิทธิ์
 ** ไฟล์ซ้ำ',
-'filedelete-edit-reasonlist' => 'à¹\81à¸\81à¹\89à¹\84à¸\82รายà¸\8aืà¹\88อà¹\80หà¸\95ุà¸\9cลà¹\83à¸\99การลบ',
+'filedelete-edit-reasonlist' => 'à¹\81à¸\81à¹\89à¹\84à¸\82à¹\80หà¸\95ุà¸\9cลการลบ',
 'filedelete-maintenance' => 'ปิดการลบและเรียกคืนไฟล์ไว้ชั่วคราว ในระหว่างการซ่อมบำรุง',
 'filedelete-maintenance-title' => 'ไม่สามารถลบไฟล์',
 
@@ -1776,7 +1817,7 @@ $1',
 'download' => 'ดาวน์โหลด',
 
 # Unwatched pages
-'unwatchedpages' => 'หà¸\99à¹\89าà¸\97ีà¹\88à¹\84มà¹\88มีà¸\81ารเฝ้าดู',
+'unwatchedpages' => 'หà¸\99à¹\89าà¸\97ีà¹\88à¹\84มà¹\88มีà¸\9cูà¹\89เฝ้าดู',
 
 # List redirects
 'listredirects' => 'รายการหน้าเปลี่ยนทาง',
@@ -1788,7 +1829,7 @@ $1',
 
 # Random page
 'randompage' => 'สุ่มหน้า',
-'randompage-nopages' => 'à¹\84มà¹\88มีหà¸\99à¹\89าà¹\83à¸\94à¹\86 à¹\83à¸\99{{PLURAL:$2|à¹\80à¸\99มสà¹\80à¸\9bà¸\8b}}à¸\95à¹\88อà¹\84à¸\9bà¸\99ีà¹\89: "$1"',
+'randompage-nopages' => 'ไม่มีหน้าใดใน{{PLURAL:$2|เนมสเปซ}}ต่อไปนี้: "$1"',
 
 # Random redirect
 'randomredirect' => 'สุ่มหน้าเปลี่ยนทาง',
@@ -1796,30 +1837,30 @@ $1',
 
 # Statistics
 'statistics' => 'สถิติ',
-'statistics-header-pages' => 'สถิติของหน้าต่าง ๆ',
+'statistics-header-pages' => 'สถิติของหน้า',
 'statistics-header-edits' => 'สถิติการแก้ไข',
 'statistics-header-views' => 'สถิติการเข้าชม',
 'statistics-header-users' => 'สถิติผู้ใช้',
-'statistics-header-hooks' => 'สถิติอื่น',
-'statistics-articles' => 'à¸\88ำà¸\99วà¸\99เนื้อหา',
+'statistics-header-hooks' => 'สถิติอื่น',
+'statistics-articles' => 'หà¸\99à¹\89าเนื้อหา',
 'statistics-pages' => 'หน้าทั้งหมด',
-'statistics-pages-desc' => 'หà¸\99à¹\89าà¸\97ัà¹\89à¸\87หมà¸\94à¹\83à¸\99à¹\80วà¹\87à¸\9aà¹\84à¸\8bà¸\95à¹\8cà¸\99ีà¹\89 à¸£à¸§à¸¡à¹\84à¸\9bà¸\96ึà¸\87หà¸\99à¹\89าà¸\95à¹\88าà¸\87 à¹\86 à¹\80à¸\8aà¹\88à¸\99 à¸«à¸\99à¹\89าสà¸\99à¸\97à¸\99า à¹\81ละหน้าเปลี่ยนทาง เป็นต้น',
+'statistics-pages-desc' => 'หà¸\99à¹\89าà¸\97ัà¹\89à¸\87หมà¸\94à¹\83à¸\99วิà¸\81ิà¸\99ีà¹\89 à¸£à¸§à¸¡à¸\97ัà¹\89à¸\87หà¸\99à¹\89าà¸\9eูà¸\94à¸\84ุย หน้าเปลี่ยนทาง เป็นต้น',
 'statistics-files' => 'จำนวนไฟล์ที่ถูกอัปโหลด',
-'statistics-edits' => 'การแก้ไขหน้าทั้งหมดนับแต่ก่อตั้ง{{SITENAME}}ภาษาไทย',
+'statistics-edits' => 'การแก้ไขหน้าทั้งหมดนับแต่ก่อตั้ง {{SITENAME}}',
 'statistics-edits-average' => 'จำนวนแก้ไขต่อหน้าโดยเฉลี่ย',
 'statistics-views-total' => 'จำนวนการเข้าชมทั้งหมด',
 'statistics-views-total-desc' => 'ไม่นับรวมจำนวนการเข้าชมหน้าที่ไม่มีอยู่และหน้าพิเศษ',
 'statistics-views-peredit' => 'จำนวนการเข้าดูต่อการแก้ไข:',
-'statistics-users' => '[[Special:ListUsers|à¸\9cูà¹\89à¹\83à¸\8aà¹\89]]à¸\97ีà¹\88ลà¸\87à¸\97ะà¹\80à¸\9aียà¸\99',
+'statistics-users' => '[[Special:ListUsers|ผู้ใช้]]ลงทะเบียน',
 'statistics-users-active' => 'ผู้ใช้ที่ยังแก้ไขอยู่',
-'statistics-users-active-desc' => 'à¸\9cูà¹\89à¹\83à¸\8aà¹\89à¸\97ีà¹\88à¹\84à¸\94à¹\89à¹\81à¸\81à¹\89à¹\84à¸\82ในช่วง $1 วันที่ผ่านมา',
+'statistics-users-active-desc' => 'à¸\9cูà¹\89à¹\83à¸\8aà¹\89à¸\97ีà¹\88à¸\94ำà¹\80à¸\99ิà¸\99à¸\9bà¸\8fิà¸\9aัà¸\95ิà¸\81ารในช่วง $1 วันที่ผ่านมา',
 'statistics-mostpopular' => 'หน้าที่มีการเข้าชมมากที่สุด',
 
 'disambiguations' => 'หน้าที่เชื่อมโยงกับหน้าแก้ความกำกวม',
 'disambiguationspage' => 'Template:แก้กำกวม',
-'disambiguations-text' => "หà¸\99à¹\89าà¸\95à¹\88อà¹\84à¸\9bà¸\99ีà¹\89à¹\80à¸\8aืà¹\88อมà¹\82ยà¸\87à¹\84à¸\9bยัà¸\87 '''หà¸\99à¹\89าà¸\84ำà¸\81ำà¸\81วม''' à¸\8bึà¹\88à¸\87à¹\80à¸\99ืà¹\89อหาà¹\83à¸\99หà¸\99à¹\89าà¹\80หลà¹\88าà¸\99ัà¹\89à¸\99à¸\84วรà¸\96ูà¸\81à¹\80à¸\8aืà¹\88อมà¹\82ยà¸\87à¹\84à¸\9bยัà¸\87หัวà¸\82à¹\89อà¸\97ีà¹\88à¹\80หมาะสมà¹\81à¸\97à¸\99à¸\97ีà¹\88<br />
-
-หà¸\99à¹\89าà¹\83à¸\94à¸\97ีà¹\88à¹\80รียà¸\81à¹\83à¸\8aà¹\89 [[MediaWiki:Disambiguationspage]] à¸«à¸\99à¹\89าà¹\80หลà¹\88าà¸\99ัà¹\89à¸\99à¸\88ะà¸\96ูà¸\81à¸\99ัà¸\9aà¹\80à¸\9bà¹\87à¸\99หà¸\99à¹\89าà¸\84ำกำกวม",
+'disambiguations-text' => "หà¸\99à¹\89าà¸\95à¹\88อà¹\84à¸\9bà¸\99ีà¹\89มีอยà¹\88าà¸\87à¸\99à¹\89อยหà¸\99ึà¹\88à¸\87ลิà¸\87à¸\81à¹\8cà¹\80à¸\8aืà¹\88อมà¹\82ยà¸\87à¹\84à¸\9bยัà¸\87'''หà¸\99à¹\89าà¸\84วามà¸\81ำà¸\81วม'''
+ซึ่งอาจต้องลิงก์ไปยังหน้าที่เหมาะสมแทน<br />
+หà¸\99à¹\89าà¹\83à¸\94à¸\97ีà¹\88à¹\83à¸\8aà¹\89à¹\81มà¹\88à¹\81à¸\9aà¸\9aà¸\97ีà¹\88ลิà¸\87à¸\81à¹\8cมาà¸\88าà¸\81 [[MediaWiki:Disambiguationspage]] à¸«à¸\99à¹\89าà¹\80หลà¹\88าà¸\99ัà¹\89à¸\99à¸\88ะà¸\96ูà¸\81à¸\99ัà¸\9aรวมà¹\80à¸\9bà¹\87à¸\99หà¸\99à¹\89าà¸\84วามกำกวม",
 
 'doubleredirects' => 'หน้าเปลี่ยนทางซ้ำซ้อน',
 'doubleredirectstext' => 'หน้านี้แสดงรายการชื่อที่เปลี่ยนทางไปยังหน้าเปลี่ยนทางอื่น
@@ -1839,13 +1880,13 @@ $1',
 'withoutinterwiki-legend' => 'คำนำหน้า',
 'withoutinterwiki-submit' => 'แสดง',
 
-'fewestrevisions' => 'หน้าที่มีการแก้ไขน้อย',
+'fewestrevisions' => 'หน้าที่มีการแก้ไขน้อยสุด',
 
 # Miscellaneous special pages
-'nbytes' => '$1 {{PLURAL:$1|ไบต์|ไบต์}}',
+'nbytes' => '$1 ไบต์',
 'ncategories' => '$1 หมวดหมู่',
 'nlinks' => '$1 {{PLURAL:$1|ลิงก์|ลิงก์}}',
-'nmembers' => '$1 {{PLURAL:$1|หน้า|หน้า}}',
+'nmembers' => '$1 หน้า',
 'nrevisions' => '$1 ครั้ง',
 'nviews' => '$1 ครั้ง',
 'nimagelinks' => 'ใช้ใน $1 {{PLURAL: $1|หน้า|หน้า}}',
@@ -1855,8 +1896,8 @@ $1',
 'lonelypagestext' => 'หน้าต่อไปนี้ไม่มีการเชื่อมโยงหรือถูกรวมไว้ในหน้าอื่นใน {{SITENAME}}',
 'uncategorizedpages' => 'หน้าที่ไม่ได้จัดหมวดหมู่',
 'uncategorizedcategories' => 'หมวดหมู่ที่ไม่ได้จัดหมวดหมู่',
-'uncategorizedimages' => 'ภาà¸\9eà¸\97ีà¹\88à¹\84มà¹\88à¹\84à¸\94à¹\89จัดหมวดหมู่',
-'uncategorizedtemplates' => 'à¹\81มà¹\88à¹\81à¸\9aà¸\9aà¸\97ีà¹\88à¹\84มà¹\88à¹\84à¸\94à¹\89จัดหมวดหมู่',
+'uncategorizedimages' => 'à¹\84à¸\9fลà¹\8cà¸\97ีà¹\88ยัà¸\87à¹\84มà¹\88จัดหมวดหมู่',
+'uncategorizedtemplates' => 'à¹\81มà¹\88à¹\81à¸\9aà¸\9aà¸\97ีà¹\88ยัà¸\87à¹\84มà¹\88จัดหมวดหมู่',
 'unusedcategories' => 'หมวดหมู่ที่ไม่ได้ใช้',
 'unusedimages' => 'ไฟล์ไม่ได้ใช้',
 'popularpages' => 'หน้าที่มีการเข้าดูมาก',
@@ -1870,41 +1911,43 @@ $1',
 'mostlinkedtemplates' => 'แม่แบบที่ใช้มาก',
 'mostcategories' => 'หน้าที่มีหมวดหมู่มาก',
 'mostimages' => 'ภาพที่ใช้มาก',
+'mostinterwikis' => 'หน้าที่มีลิงก์ข้ามภาษามากที่สุด',
 'mostrevisions' => 'หน้าที่มีการแก้ไขมาก',
-'prefixindex' => 'หน้าทั้งหมดตามดัชนีคำนำหน้า',
+'prefixindex' => 'หน้าทั้งหมดตามดัชนีคำขึ้นต้น',
+'prefixindex-namespace' => 'ทุกหน้าที่มีคำขึ้นต้น ($1 เนมสเปซ)',
 'shortpages' => 'หน้าสั้นมาก',
 'longpages' => 'หน้ายาวมาก',
 'deadendpages' => 'หน้าสุดทาง',
-'deadendpagestext' => 'หà¸\99à¹\89าà¸\95à¹\88อà¹\84à¸\9bà¸\99ีà¹\89à¹\84มà¹\88à¹\84à¸\94à¹\89ลิà¸\87à¸\81à¹\8cà¹\84à¸\9bหà¸\99à¹\89าหà¸\99à¹\89าà¹\83à¸\94à¹\83à¸\99วิà¸\81ิ',
+'deadendpagestext' => 'หà¸\99à¹\89าà¸\95à¹\88อà¹\84à¸\9bà¸\99ีà¹\89à¹\84มà¹\88à¹\84à¸\94à¹\89ลิà¸\87à¸\81à¹\8cà¹\84à¸\9bหà¸\99à¹\89าอืà¹\88à¸\99à¹\83à¸\99 {{SITENAME}}',
 'protectedpages' => 'หน้าถูกล็อก',
 'protectedpages-indef' => 'การล็อกแบบไม่จำกัดเท่านั้น',
 'protectedpages-cascade' => 'การล็อกแบบสืบทอดเท่านั้น',
-'protectedpagestext' => 'หà¸\99à¹\89าà¸\95à¹\88อà¹\84à¸\9bà¸\99ีà¹\89à¸\96ูà¸\81ลà¹\87อà¸\81หà¹\89ามà¹\81à¸\81à¹\89à¹\84à¸\82หรือหà¹\89ามà¹\80à¸\9bลีà¹\88ยà¸\99à¸\8aืà¹\88อ',
+'protectedpagestext' => 'หน้าต่อไปนี้ถูกล็อกห้ามแก้ไขหรือเปลี่ยนชื่อ',
 'protectedpagesempty' => 'ไม่มีหน้าใดที่ถูกล็อกตามค่าที่เลือก',
-'protectedtitles' => 'หัวà¹\80รืà¹\88อà¸\87à¸\97ีà¹\88à¹\84à¸\94à¹\89รัà¸\9aà¸\81ารป้องกัน',
-'protectedtitlestext' => 'หัวà¹\80รืà¹\88อà¸\87à¸\95à¹\88อà¹\84à¸\9bà¸\99ีà¹\89à¹\84à¸\94à¹\89รัà¸\9aà¸\81ารà¸\9bà¹\89อà¸\87à¸\81ัà¸\99à¹\84มà¹\88à¹\83หà¹\89สรà¹\89าà¸\87à¹\83หมà¹\88',
+'protectedtitles' => 'à¸\8aืà¹\88อà¹\80รืà¹\88อà¸\87à¸\97ีà¹\88à¸\96ูà¸\81ป้องกัน',
+'protectedtitlestext' => 'à¸\8aืà¹\88อà¹\80รืà¹\88อà¸\87à¸\95à¹\88อà¹\84à¸\9bà¸\99ีà¹\89à¸\96ูà¸\81à¸\9bà¹\89อà¸\87à¸\81ัà¸\99มิà¹\83หà¹\89สรà¹\89าà¸\87',
 'protectedtitlesempty' => 'ปัจจุบันไม่มีหัวเรื่องที่ได้รับการป้องกันด้วยค่าต่อไปนี้',
 'listusers' => 'รายนามผู้ใช้',
-'listusers-editsonly' => 'à¹\81สà¸\94à¸\87à¹\80à¸\89à¸\9eาะà¸\9cูà¹\89à¹\83à¸\8aà¹\89à¸\97ีà¹\88รà¹\88วมแก้ไข',
+'listusers-editsonly' => 'à¹\81สà¸\94à¸\87à¹\80à¸\89à¸\9eาะà¸\9cูà¹\89à¹\83à¸\8aà¹\89à¸\97ีà¹\88มีà¸\81ารแก้ไข',
 'listusers-creationsort' => 'เรียงลำดับตามวันสร้าง',
-'usereditcount' => 'การแก้ไข $1 {{PLURAL:$1|ครั้ง|ครั้ง}}',
-'usercreated' => '{{GENDER:$3|Created}} เมื่อ $1 เวลา $2',
+'usereditcount' => 'การแก้ไข $1 ครั้ง',
+'usercreated' => '{{GENDER:$3|ถูกสร้าง}}เมื่อ $1 เวลา $2',
 'newpages' => 'หน้าใหม่',
 'newpages-username' => 'ชื่อผู้ใช้:',
 'ancientpages' => 'หน้าที่ไม่ได้แก้ไขนานสุด',
 'move' => 'เปลี่ยนชื่อ',
 'movethispage' => 'เปลี่ยนชื่อหน้านี้',
-'unusedimagestext' => 'à¹\84à¸\9fลà¹\8cà¸\94ัà¸\87à¸\95à¹\88อà¹\84à¸\9bà¸\99ีà¹\89à¸\9bราà¸\81à¸\8fà¹\81à¸\95à¹\88à¹\84มà¹\88มีà¸\81ารà¹\80รียà¸\81à¹\83à¸\8aà¹\89à¸\97ีà¹\88หà¸\99à¹\89าà¹\83à¸\94ๆ เลย
-ภาà¸\9eà¸\99ีà¹\89อาà¸\88à¸\88ะà¸\96ูà¸\81à¹\83à¸\8aà¹\89à¸\88าà¸\81à¹\80วà¹\87à¸\9aà¹\84à¸\8bà¸\95à¹\8cอืà¹\88à¸\99 à¸\8bึà¹\88à¸\87ลิà¸\87à¸\81à¹\8cมาภาà¸\9eà¹\83à¸\99หà¸\99à¹\89าà¸\99ีà¹\89à¹\82à¸\94ยà¸\95รà¸\87 à¸\94ัà¸\87à¸\99ัà¹\89à¸\99à¹\84à¸\9fลà¹\8cà¸\94ัà¸\87à¸\81ลà¹\88าวà¸\88ะยัà¸\87à¸\9bราà¸\81à¸\8fà¹\83à¸\99รายà¸\81ารà¸\99ีà¹\89à¹\81มà¹\89วà¹\88าจะมีการใช้อย่างต่อเนื่อง',
+'unusedimagestext' => 'à¹\84à¸\9fลà¹\8cà¸\95à¹\88อà¹\84à¸\9bà¸\99ีà¹\89มีอยูà¹\88 à¹\81à¸\95à¹\88à¹\84มà¹\88มีà¸\81ารà¹\80รียà¸\81à¹\83à¸\8aà¹\89à¹\83à¸\99หà¸\99à¹\89าà¹\83à¸\94 ๆ เลย
+หมายà¹\80หà¸\95ุวà¹\88า à¹\80วà¹\87à¸\9aà¹\84วà¸\95à¹\8cอืà¹\88à¸\99อาà¸\88ลิà¸\87à¸\81à¹\8cมายัà¸\87à¹\84à¸\9fลà¹\8cà¸\94à¹\89วยยูอารà¹\8cà¹\81อลà¹\82à¸\94ยà¸\95รà¸\87 à¸\89ะà¸\99ัà¹\89à¸\99à¸\88ึà¸\87อาà¸\88ยัà¸\87มีà¸\8aืà¹\88ออยูà¹\88à¸\97ีà¹\88à¸\99ีà¹\88à¹\81มà¹\89จะมีการใช้อย่างต่อเนื่อง',
 'unusedcategoriestext' => 'หมวดหมู่ต่อไปนี้ยังมีอยู่ถึงแม้ว่าจะไม่มีว่าไม่มีหน้าไหนหรือบทความไหนใช้ส่วนนี้',
 'notargettitle' => 'ไม่พบหน้าปลายทาง',
-'notargettext' => 'à¹\84มà¹\88à¹\84à¸\94à¹\89à¹\83สà¹\88หà¸\99à¹\89าà¸\9bลายà¸\97าà¸\87หรือà¸\8aืà¹\88อà¸\9cูà¹\89à¹\83à¸\8aà¹\89à¸\97ีà¹\88à¸\95à¹\89อà¸\87à¸\81ารà¹\83à¸\8aà¹\89à¸\84ำสัà¹\88à¸\87นี้',
+'notargettext' => 'à¸\84ุà¸\93มิà¹\84à¸\94à¹\89ระà¸\9aุหà¸\99à¹\89าหรือà¸\9cูà¹\89à¹\83à¸\8aà¹\89à¹\80à¸\9bà¹\89าหมายà¸\97ีà¹\88à¸\88ะà¸\94ำà¹\80à¸\99ิà¸\99à¸\81ารà¸\9fัà¸\87à¸\81à¹\8cà¸\8aัà¸\99นี้',
 'nopagetitle' => 'ไม่มีหน้าเป้าหมายดังกล่าว',
 'nopagetext' => 'หน้าเป้าหมายที่คุณระบุไม่มีอยู่',
-'pager-newer-n' => '{{PLURAL:$1|ใหม่กว่า 1|ใหม่กว่า $1}}',
-'pager-older-n' => '{{PLURAL:$1|เก่ากว่า 1|เก่ากว่า $1}}',
-'suppress' => 'ความผิดพลาดที่ไม่ทันสังเกต',
-'querypage-disabled' => 'หà¸\99à¹\89าà¸\9eิà¹\80ศษà¸\99ีà¹\89à¸\96ูà¸\81à¸\9bิà¸\94à¸\81ารà¹\83à¸\8aà¹\89à¸\87าà¸\99à¸\94à¹\89วยà¹\80หà¸\95ุà¸\9cลà¹\80à¸\9eืà¹\88อà¸\9bระสิà¸\97à¸\98ิภาà¸\9eà¹\83à¸\99à¸\81ารà¸\97ำà¸\87าà¸\99',
+'pager-newer-n' => 'ใหม่กว่า $1',
+'pager-older-n' => 'เก่ากว่า $1',
+'suppress' => 'Oversight',
+'querypage-disabled' => 'หà¸\99à¹\89าà¸\9eิà¹\80ศษà¸\99ีà¹\89à¸\96ูà¸\81à¸\9bิà¸\94à¸\81ารà¹\83à¸\8aà¹\89à¸\87าà¸\99à¸\94à¹\89วยà¹\80หà¸\95ุà¸\9cลà¸\94à¹\89าà¸\99à¸\9bระสิà¸\97à¸\98ิภาà¸\9e',
 
 # Book sources
 'booksources' => 'ค้นหาหนังสือ',
@@ -1918,10 +1961,11 @@ $1',
 'speciallogtitlelabel' => 'เป้าหมาย (ชื่อเรื่องหรือผู้ใช้):',
 'log' => 'ปูม',
 'all-logs-page' => 'ปูมสาธารณะทั้งหมด',
-'alllogstext' => 'à¹\81สà¸\94à¸\87à¸\9bูมà¸\97ัà¹\89à¸\87หมà¸\94à¸\82อà¸\87{{SITENAME}}
-à¸\84ุà¸\93สามารà¸\96à¸\84à¹\89à¸\99หาà¹\83หà¹\89ละà¹\80อียà¸\94มาà¸\81à¸\82ึà¹\89à¸\99à¹\82à¸\94ยà¹\80ลือà¸\81à¸\9bระà¹\80ภà¸\97à¸\82อà¸\87à¸\9bูม à¸\8aืà¹\88อà¸\9cูà¹\89à¹\83à¸\8aà¹\89หรือหà¸\99à¹\89าà¸\97ีà¹\88à¸\95à¹\89อà¸\87à¸\81าร (อัà¸\81ษรà¸\9eิมà¸\9eà¹\8cà¹\80ลà¹\87à¸\81à¹\83หà¸\8dà¹\88à¹\83à¸\99ภาษาอัà¸\87à¸\81ฤษมีà¸\84à¹\88าà¹\84มà¹\88à¹\80à¸\97à¹\88าà¸\81ัà¸\99)',
-'logempty' => 'à¹\84มà¹\88มีà¹\83à¸\99à¸\9aัà¸\99à¸\97ึà¸\81à¸\81à¹\88อà¸\99หà¸\99à¹\89า',
+'alllogstext' => 'à¸\81ารà¹\81สà¸\94à¸\87à¸\9cลรวมà¸\9bูมà¸\97ีà¹\88มีà¸\97ัà¹\89à¸\87หมà¸\94à¸\82อà¸\87 {{SITENAME}}
+à¸\84ุà¸\93สามารà¸\96à¸\84à¹\89à¸\99หาà¹\83หà¹\89ละà¹\80อียà¸\94à¸\82ึà¹\89à¸\99à¹\82à¸\94ยà¹\80ลือà¸\81à¸\9bระà¹\80ภà¸\97à¸\9bูม à¸\8aืà¹\88อà¸\9cูà¹\89à¹\83à¸\8aà¹\89หรือหà¸\99à¹\89าà¸\97ีà¹\88à¸\95à¹\89อà¸\87à¸\81าร (à¹\84วà¸\95à¹\88ออัà¸\81ษรà¹\83หà¸\8dà¹\88à¹\80ลà¹\87à¸\81)',
+'logempty' => 'à¹\84มà¹\88à¸\9eà¸\9aรายà¸\81ารà¸\95รà¸\87à¸\81ัà¸\99à¹\83à¸\99à¸\9bูม',
 'log-title-wildcard' => 'ค้นหาชื่อเรื่องด้วยคำขึ้นต้น',
+'showhideselectedlogentries' => 'แสดง/ซ่อนรายการปูมที่เลือก',
 
 # Special:AllPages
 'allpages' => 'ทุกหน้า',
@@ -1938,7 +1982,7 @@ $1',
 'allpagessubmit' => 'ค้นหา',
 'allpagesprefix' => 'แสดงหน้าที่ขึ้นต้นด้วย:',
 'allpagesbadtitle' => 'ชื่อเรื่องนี้ไม่ถูกต้อง อาจสะกดผิด ลิงก์มาจากภาษาอื่นหรือวิกิอื่น หรือมีตัวอักษรที่ไม่สามารถใช้เป็นชื่อเรื่องได้',
-'allpages-bad-ns' => '{{SITENAME}} ไม่มีเนมสเปซในชื่อ "$1"',
+'allpages-bad-ns' => '{{SITENAME}} ไม่มีเนมสเปซ "$1"',
 'allpages-hide-redirects' => 'ซ่อนการเปลี่ยนทาง',
 
 # Special:Categories
@@ -1948,7 +1992,7 @@ $1',
 ดูเพิ่มที่[[Special:WantedCategories|หมวดหมู่ที่ต้องการ]]',
 'categoriesfrom' => 'แสดงหมวดหมู่โดยเริ่มจาก:',
 'special-categories-sort-count' => 'เรียงตามจำนวน',
-'special-categories-sort-abc' => 'à¹\80รียà¸\87ลำà¸\94ัà¸\9aà¸\95ามà¸\95ัวอัà¸\81ษร',
+'special-categories-sort-abc' => 'เรียงตามตัวอักษร',
 
 # Special:DeletedContributions
 'deletedcontributions' => 'การแก้ไขที่ถูกลบ',
@@ -1961,8 +2005,8 @@ $1',
 'linksearch-ns' => 'เนมสเปซ:',
 'linksearch-ok' => 'สืบค้น',
 'linksearch-text' => 'อักขระตัวแทนเช่น "*.wikipedia.org" สามารถใช้ได้
¹\82à¸\94à¹\80มà¸\99ระà¸\94ัà¸\9aà¸\9aà¸\99สุà¸\94à¸\88ำà¹\80à¸\9bà¹\87à¸\99à¸\95à¹\89อà¸\87มีเป็นอย่างน้อย เช่น "*.org"<br />
-à¹\82à¸\9eรà¹\82à¸\97à¸\84อลà¸\97ีà¹\88รอà¸\87รัà¸\9a: <code>$1</code> (อยà¹\88าà¹\83สà¹\88à¸\84ำà¹\80หลà¹\88าà¸\99ีà¹\89à¹\83à¸\99à¸\81ารสืà¸\9aà¸\84à¹\89à¸\99à¸\82อà¸\87à¸\84ุà¸\93)',
¸\95à¹\89อà¸\87à¸\81ารà¹\82à¸\94à¹\80มà¸\99ระà¸\94ัà¸\9aà¸\9aà¸\99สุà¸\94เป็นอย่างน้อย เช่น "*.org"<br />
+à¹\82à¸\9eรà¹\82à¸\97à¸\84อลà¸\97ีà¹\88รอà¸\87รัà¸\9a: <code>$1</code> (à¸\84à¹\88าà¹\82à¸\94ยà¸\9bริยายà¹\80à¸\9bà¹\89à¸\99 http:// à¸«à¸²à¸\81à¹\84มà¹\88ระà¸\9aุà¹\82à¸\9eรà¹\82à¸\97à¸\84อล)',
 'linksearch-line' => '$1 ถูกลิงก์จาก $2',
 'linksearch-error' => 'เครื่องหมายแทนอักขระ (wildcard) อยู่หน้าชื่อโฮสต์ได้เท่านั้น',
 
@@ -1970,21 +2014,17 @@ $1',
 'listusersfrom' => 'แสดงชื่อผู้ใช้โดยเริ่มต้นจาก:',
 'listusers-submit' => 'แสดง',
 'listusers-noresult' => 'ไม่พบชื่อผู้ใช้ที่ต้องการ',
-'listusers-blocked' => '(à¸\96ูà¸\81ระà¸\87ัà¸\9a)',
+'listusers-blocked' => '(à¸\96ูà¸\81à¸\9aลà¹\87อà¸\81)',
 
 # Special:ActiveUsers
 'activeusers' => 'รายการผู้ใช้ประจำ',
-'activeusers-intro' => 'à¸\99ีà¹\88à¸\84ือรายà¸\81ารà¸\9cูà¹\89à¹\83à¸\8aà¹\89à¸\97ีà¹\88มีà¸\81ิà¸\88à¸\81รรมà¹\83à¸\94à¹\86 à¹\83à¸\99รอà¸\9a $1 {{PLURAL:$1|วัà¸\99|วัà¸\99}}ที่ผ่านมา',
-'activeusers-count' => '{{PLURAL:$1|à¸\81ารà¹\81à¸\81à¹\89à¹\84à¸\82ลà¹\88าสุà¸\94|à¸\81ารà¹\81à¸\81à¹\89à¹\84à¸\82ลà¹\88าสุà¸\94 $1 à¸£à¸²à¸¢à¸\81าร}} à¹\83à¸\99{{PLURAL:$3|à¸\8aà¹\88วà¸\87วัà¸\99|à¸\8aà¹\88วà¸\87 $3 à¸§à¸±à¸\99}}ที่ผ่านมา',
+'activeusers-intro' => 'à¸\99ีà¹\88à¸\84ือรายà¸\99ามà¸\9cูà¹\89à¹\83à¸\8aà¹\89à¸\97ีà¹\88มีà¸\81ิà¸\88à¸\81รรมà¹\83à¸\94 à¹\86 à¹\83à¸\99 $1 à¸§à¸±à¸\99ที่ผ่านมา',
+'activeusers-count' => '{{PLURAL:$1|à¸\9bà¸\8fิà¸\9aัà¸\95ิà¸\81ารลà¹\88าสุà¸\94|à¸\9bà¸\8fิà¸\9aัà¸\95ิà¸\81ารลà¹\88าสุà¸\94 $1 à¸£à¸²à¸¢à¸\81าร}} à¹\83à¸\99à¸\8aà¹\88วà¸\87 $3 à¸§à¸±à¸\99ที่ผ่านมา',
 'activeusers-from' => 'แสดงชื่อผู้ใช้โดยเริ่มจาก:',
 'activeusers-hidebots' => 'ซ่อนบอต',
 'activeusers-hidesysops' => 'ซ่อนผู้ดูแลระบบ',
 'activeusers-noresult' => 'ไม่พบชื่อผู้ใช้',
 
-# Special:Log/newusers
-'newuserlogpage' => 'ปูมการสร้างบัญชีผู้ใช้ใหม่',
-'newuserlogpagetext' => 'นี่คือปูมการสร้างบัญชีผู้ใช้',
-
 # Special:ListGroupRights
 'listgrouprights' => 'สิทธิของกลุ่มผู้ใช้',
 'listgrouprights-summary' => 'รายชื่อกลุ่มผู้ใช้ต่อไปนี้ถูกกำหนดไว้บน {{SITENAME}} โดยมีสิทธิการเข้าถึงที่เกี่ยวข้อง และอาจมี[[{{MediaWiki:Listgrouprights-helppage}}|ข้อมูลเพิ่มเติม]]เกี่ยวกับสิทธิของแต่ละบุคคล',
@@ -1998,8 +2038,8 @@ $1',
 'listgrouprights-removegroup' => 'สามารถลบ{{PLURAL:$2|กลุ่มนี้|กลุ่มเหล่านี้}}ได้: $1',
 'listgrouprights-addgroup-all' => 'สามารถเพิ่มกลุ่มทั้งหมดได้',
 'listgrouprights-removegroup-all' => 'สามารถลบกลุ่มทั้งหมดได้',
-'listgrouprights-addgroup-self' => 'เพิ่ม {{PLURAL:$2|กลุ่ม|กลุ่ม}} เข้าไปในชื่อผู้ใช้: $1',
-'listgrouprights-removegroup-self' => 'ลบ {{PLURAL:$2|กลุ่ม|กลุ่ม}} ออกจากชื่อผู้ใช้: $1',
+'listgrouprights-addgroup-self' => 'เพิ่ม{{PLURAL:$2|กลุ่ม|กลุ่ม}}เข้าไปในชื่อผู้ใช้: $1',
+'listgrouprights-removegroup-self' => 'ลบ{{PLURAL:$2|กลุ่ม|กลุ่ม}}ออกจากชื่อผู้ใช้: $1',
 'listgrouprights-addgroup-self-all' => 'เพิ่มทุกกลุ่มเข้าไปในชื่อผู้ใช้นี้',
 'listgrouprights-removegroup-self-all' => 'ลบทุกกลุ่มออกจากชื่อผู้ใช้นี้',
 
@@ -2007,30 +2047,33 @@ $1',
 'mailnologin' => 'ไม่มีการส่งอีเมล',
 'mailnologintext' => 'ต้องการทำ[[Special:UserLogin|ล็อกอิน]]และตั้งค่าอีเมลในส่วน[[Special:Preferences|การตั้งค่า]] เพื่อจะส่งอีเมลหาผู้ใช้คนอื่น',
 'emailuser' => 'ส่งอีเมลหาผู้ใช้นี้',
+'emailuser-title-target' => 'ส่งอีเมลหา{{GENDER:$1|ผู้ใช้}}',
+'emailuser-title-notarget' => 'อีเมลผู้ใช้',
 'emailpage' => 'อีเมลผู้ใช้',
-'emailpagetext' => 'คุณสามารถใช้แบบฟอร์มด้านล่างส่งอีเมลหาผู้ใช้คนนี้
-à¸\8aืà¹\88ออีà¹\80มลà¸\9cูà¹\89สà¹\88à¸\87à¸\88ะà¹\83à¸\8aà¹\89à¸\8aืà¹\88ออีà¹\80มลà¸\97ีà¹\88à¹\84à¸\94à¹\89ระà¸\9aุà¹\84วà¹\89à¹\81ลà¹\89วà¹\83à¸\99[[Special:Preferences|à¸\81ารà¸\95ัà¹\89à¸\87à¸\84à¹\88าสà¹\88วà¸\99à¸\95ัวà¸\82อà¸\87à¸\84ุà¸\93]] à¸\8bึà¹\88à¸\87à¸\9cูà¹\89รัà¸\9aสามารà¸\96à¸\95อà¸\9aà¸\81ลัà¸\9aà¹\84à¸\94à¹\89',
+'emailpagetext' => 'คุณสามารถใช้แบบฟอร์มด้านล่างส่งอีเมลหา{{GENDER:$1|ผู้ใช้}}นี้
+à¸\97ีà¹\88อยูà¹\88อีà¹\80มลà¸\97ีà¹\88à¸\84ุà¸\93à¸\81รอà¸\81à¹\83à¸\99[[Special:Preferences|à¸\81ารà¸\95ัà¹\89à¸\87à¸\84à¹\88าสà¹\88วà¸\99à¸\95ัวà¸\82อà¸\87à¸\84ุà¸\93]]à¸\88ะà¸\9bราà¸\81à¸\8fà¹\80à¸\9bà¹\87à¸\99à¸\97ีà¹\88อยูà¹\88 "à¸\88าà¸\81" à¸\82อà¸\87อีà¹\80มล à¸\8bึà¹\88à¸\87à¸\9cูà¹\89รัà¸\9aสามารà¸\96à¸\95อà¸\9aà¸\81ลัà¸\9aà¸\84ุà¸\93à¹\84à¸\94à¹\89à¹\82à¸\94ยà¸\95รà¸\87',
 'usermailererror' => 'การส่งอีเมลผิดพลาด:',
-'defemailsubject' => '{{SITENAME}} อีเมล์จากผู้ใช้งาน "$1"',
-'usermaildisabled' => 'à¸\81ารสà¹\88à¸\87อีà¹\80มลหาà¸\9cูà¹\89à¹\83à¸\8aà¹\89à¹\84มà¹\88สามารà¸\96à¹\83à¸\8aà¹\89à¸\87าà¸\99à¹\84à¸\94à¹\89',
+'defemailsubject' => 'อีเมล {{SITENAME}} จากผู้ใช้ "$1"',
+'usermaildisabled' => 'สà¹\88à¸\87อีà¹\80มลหาà¸\9cูà¹\89à¹\83à¸\8aà¹\89à¸\9bิà¸\94à¸\81ารà¹\83à¸\8aà¹\89à¸\87าà¸\99',
 'usermaildisabledtext' => 'คุณไม่สามารถส่งอีเมลไปหาผู้ใช้อื่นบนวิกินี้',
-'noemailtitle' => 'à¹\84มà¹\88à¹\84à¸\94à¹\89à¸\95ัà¹\89à¸\87อีเมล',
-'noemailtext' => 'à¸\9cูà¹\89à¹\83à¸\8aà¹\89à¸\84à¸\99à¸\99ีà¹\89à¹\84มà¹\88à¹\84à¸\94à¹\89à¸\95ัà¹\89à¸\87à¸\84à¹\88าอีà¹\80มล',
+'noemailtitle' => 'à¹\84มà¹\88มีà¸\97ีà¹\88อยูà¹\88อีเมล',
+'noemailtext' => 'à¸\9cูà¹\89à¹\83à¸\8aà¹\89à¸\84à¸\99à¸\99ีà¹\89ระà¸\9aุà¸\97ีà¹\88อยูà¹\88อีà¹\80มลà¹\84มà¹\88à¸\96ูà¸\81à¸\95à¹\89อà¸\87',
 'nowikiemailtitle' => 'ไม่อนุญาตให้ใช้อีเมล',
-'nowikiemailtext' => 'ผู้ใช้ท่านนี้เลือกไม่รับอีเมลจากผู้ใช้อื่น',
-'emailtarget' => 'กรอกชื่อผู้ใช้งานของผู้รับ',
-'emailusername' => 'ชื่อผู้ใช้งาน :',
-'emailusernamesubmit' => 'ส่งข้อมูล',
-'email-legend' => 'ส่งอีเมลถึงผู้ใช้อื่นใน {{SITENAME}}',
+'nowikiemailtext' => 'ผู้ใช้คนนี้เลือกไม่รับอีเมลจากผู้ใช้อื่น',
+'emailnotarget' => 'ไม่มีชื่อผู้ใช้ของผู้รับหรือชื่อผู้ใช้ไม่ถูกต้อง',
+'emailtarget' => 'กรอกชื่อผู้ใช้ของผู้รับ',
+'emailusername' => 'ชื่อผู้ใช้ :',
+'emailusernamesubmit' => 'ส่ง',
+'email-legend' => 'ส่งอีเมลถึงผู้ใช้ {{SITENAME}} อีกคน',
 'emailfrom' => 'จาก:',
 'emailto' => 'ถึง:',
 'emailsubject' => 'หัวเรื่อง:',
 'emailmessage' => 'ข้อความ:',
 'emailsend' => 'ส่ง',
 'emailccme' => 'ส่งอีเมลสำเนากลับมา',
-'emailccsubject' => 'สà¹\88à¸\87à¸\82à¹\89อà¸\84วามà¸\8bà¹\89ำà¹\84à¸\9bà¸\97ีà¹\88$1: $2',
-'emailsent' => 'อีà¹\80มลà¹\84à¸\94à¹\89à¸\96ูà¸\81สà¹\88à¸\87à¹\80รียà¸\9aรà¹\89อย',
-'emailsenttext' => 'อีà¹\80มลà¹\84à¸\94à¹\89à¸\96ูà¸\81สà¹\88à¸\87à¹\80รียà¸\9aรà¹\89อย',
+'emailccsubject' => 'à¸\84ัà¸\94ลอà¸\81à¸\82à¹\89อà¸\84วามà¸\82อà¸\87à¸\84ุà¸\93à¹\84à¸\9bยัà¸\87$1: $2',
+'emailsent' => 'อีà¹\80มลà¸\96ูà¸\81สà¹\88à¸\87à¹\81ลà¹\89ว',
+'emailsenttext' => 'อีà¹\80มลà¸\82อà¸\87à¸\84ุà¸\93à¸\96ูà¸\81สà¹\88à¸\87à¹\81ลà¹\89ว',
 'emailuserfooter' => 'อีเมลฉบับนี้ถูกส่งโดย $1 ถึง $2 ด้วยฟังก์ชัน "อีเมลผู้ใช้รายนี้" ที่ {{SITENAME}}',
 
 # User Messenger
@@ -2040,32 +2083,30 @@ $1',
 # Watchlist
 'watchlist' => 'รายการเฝ้าดู',
 'mywatchlist' => 'รายการเฝ้าดู',
-'watchlistfor2' => 'สำหรับ $1 ($2)',
-'nowatchlist' => 'à¹\84มà¹\88à¹\84à¸\94à¹\89à¹\83สà¹\88หà¸\99à¹\89าà¹\84หà¸\99à¹\80à¸\82à¹\89ารายà¸\81ารà¹\80à¸\9dà¹\89าà¸\94ู',
-'watchlistanontext' => 'กรุณา $1 เพื่อที่จะดูหรือแก้ไขหน้าในรายการเฝ้าดู',
+'watchlistfor2' => 'สำหรับ $1 $2',
+'nowatchlist' => 'à¹\84มà¹\88มีรายà¸\81ารà¹\83à¸\99รายà¸\81ารà¹\80à¸\9dà¹\89าà¸\94ูà¸\82อà¸\87à¸\84ุà¸\93',
+'watchlistanontext' => 'กรุณา$1เพื่อดูหรือแก้ไขรายการในรายการเฝ้าดูของคุณ',
 'watchnologin' => 'ไม่ได้ล็อกอิน',
-'watchnologintext' => 'ต้อง[[Special:UserLogin|ล็อกอิน]]เพื่อแก้ไขรายการเฝ้าดู',
-'addwatch' => 'เพิ่มเข้าไปยังรายการเฝ้าดู',
-'addedwatchtext' => 'หน้า "[[:$1]]" ถูกใส่เข้าไปใน[[Special:Watchlist|รายการเฝ้าดู]]ของคุณ ถ้ามีการเปลี่ยนแปลงเกิดขึ้นในหน้าเหล่านี้ รวมถึงหน้าพูดคุยของหน้านี้
-รายชื่อหน้าจะแสดงเป็นตัวหนาในส่วนของ[[Special:RecentChanges|หน้าการเปลี่ยนแปลงล่าสุด]]เพื่อให้โดดเด่นเป็นที่สังเกต
-ถ้าไม่ต้องการเฝ้าดูให้กดที่  "เลิกเฝ้าดู" ในส่วนของเมนู',
-'removewatch' => 'ลบออกจากรายการเฝ้าดู',
-'removedwatchtext' => 'หน้า "[[:$1]]" ถูกนำออกจาก[[Special:Watchlist|รายการเฝ้าดูของท่าน]]',
+'watchnologintext' => 'ต้อง[[Special:UserLogin|ล็อกอิน]]เพื่อแก้ไขรายการเฝ้าดูของคุณ',
+'addwatch' => 'เพิ่มเข้ารายการเฝ้าดู',
+'addedwatchtext' => 'หน้า "[[:$1]]" ถูกเพิ่มเข้า[[Special:Watchlist|รายการเฝ้าดู]]ของคุณ ถ้ามีการเปลี่ยนแปลงในหน้านี้ และหน้าพูดคุยที่เกี่ยวข้องจะแสดงรายการด้านล่าง',
+'removewatch' => 'นำออกจากรายการเฝ้าดู',
+'removedwatchtext' => 'หน้า "[[:$1]]" ถูกนำออกจาก[[Special:Watchlist|รายการเฝ้าดูของคุณ]]',
 'watch' => 'เฝ้าดู',
 'watchthispage' => 'เฝ้าดูหน้านี้',
 'unwatch' => 'เลิกเฝ้าดู',
 'unwatchthispage' => 'เลิกเฝ้าดูหน้านี้',
 'notanarticle' => 'ไม่ใช่หน้าเนื้อหา',
 'notvisiblerev' => 'รุ่นดังกล่าวถูกลบเรียบร้อยแล้ว',
-'watchnochange' => 'à¹\84มà¹\88มีà¸\81ารà¹\81à¸\81à¹\89à¹\84à¸\82à¹\83à¸\99รายà¸\81ารà¹\80à¸\9dà¹\89าà¸\94ูà¹\83à¸\99à¸\8aà¹\88วà¸\87à¹\80วลาà¸\97ีà¹\88à¸\81ำหà¸\99à¸\94',
-'watchlist-details' => 'มี {{PLURAL:$1|$1 หน้า|$1 หน้า}}อยู่ในรายชื่อเฝ้าดูของคุณ ไม่รวมหน้าอภิปราย',
+'watchnochange' => 'à¹\84มà¹\88มีหà¸\99à¹\89าà¸\97ีà¹\88à¸\84ุà¸\93à¹\80à¸\9dà¹\89าà¸\94ูà¸\96ูà¸\81à¹\81à¸\81à¹\89à¹\84à¸\82à¹\83à¸\99ระยะà¹\80วลาà¸\97ีà¹\88à¹\81สà¸\94à¸\87',
+'watchlist-details' => 'มี $1 หน้าในรายการเฝ้าดูของคุณ ไม่รวมหน้าอภิปราย',
 'wlheader-enotif' => '* แจ้งเตือนผ่านอีเมลถูกเปิดใช้งาน',
-'wlheader-showupdated' => "* à¸«à¸\99à¹\89าà¸\97ีà¹\88à¸\96ูà¸\81à¹\80à¸\9bลีà¹\88ยà¸\99à¹\81à¸\9bลà¸\87à¸\95ัà¹\89à¸\87à¹\81à¸\95à¹\88à¸\81ารà¹\83à¸\8aà¹\89à¸\87าà¸\99à¸\84รัà¹\89à¸\87ลà¹\88าสุà¸\94แสดงใน'''ตัวหนา'''",
+'wlheader-showupdated' => "* à¸«à¸\99à¹\89าà¸\97ีà¹\88มีà¸\81ารà¹\80à¸\9bลีà¹\88ยà¸\99à¹\81à¸\9bลà¸\87à¸\95ัà¹\89à¸\87à¹\81à¸\95à¹\88à¸\81ารà¹\80à¸\82à¹\89าà¸\8aมà¸\84รัà¹\89à¸\87ลà¹\88าสุà¸\94à¸\82อà¸\87à¸\84ุà¸\93แสดงใน'''ตัวหนา'''",
 'watchmethod-recent' => 'ตรวจสอบการปรับปรุงล่าสุดกับหน้าเฝ้าดู',
 'watchmethod-list' => 'ตรวจสอบหน้าเฝ้าดูกับการแก้ไขล่าสุด',
 'watchlistcontains' => 'รายการเฝ้าดูของคุณมี $1 หน้า',
 'iteminvalidname' => "เกิดปัญหาชื่อไม่ถูกต้องกับ '$1'...",
-'wlnote' => 'ด้านล่างเป็นการแก้ไข $1 รายการ ในช่วง $2 ชั่วโมงที่ผ่านมา',
+'wlnote' => "ด้านล่างเป็นการแก้ไข{{PLURAL:$1|สุดท้าย|ล่าสุด '''$1''' รายการ}} ใน{{PLURAL:$2|ชั่วโมง|ช่วง '''$2''' ชั่วโมง}}ที่ผ่านมา จนถึง $3, $4",
 'wlshowlast' => 'แสดงล่าสุดใน $1 ชั่วโมง $2 วัน $3',
 'watchlist-options' => 'ตัวเลือกรายการเฝ้าดู',
 
@@ -2074,97 +2115,102 @@ $1',
 'unwatching' => 'เลิกเฝ้าดู...',
 
 'enotif_mailer' => 'แจ้งการแก้ไขจาก {{SITENAME}}',
-'enotif_reset' => 'à¸\81ำหà¸\99à¸\94à¸\97ุà¸\81หà¸\99à¹\89าวà¹\88าà¸\9cà¹\88าà¸\99à¸\95าแล้ว',
+'enotif_reset' => 'à¸\97ำà¹\80à¸\84รืà¹\88อà¸\87หมายวà¹\88าà¸\8aมà¸\97ุà¸\81หà¸\99à¹\89าแล้ว',
 'enotif_impersonal_salutation' => 'ผู้ใช้งาน {{SITENAME}}',
-'enotif_lastvisited' => 'ดู $1 สำหรับการเปลี่ยนแปลงตั้งแต่ครั้งล่าสุดที่แวะมา',
-'enotif_lastdiff' => 'ดู $1 สำหรับดูการเปลี่ยนแปลง',
+'enotif_subject_deleted' => '{{SITENAME}} หน้า $1 ถูกลบแล้วโดย {{gender:$2|$2}}',
+'enotif_subject_created' => '{{SITENAME}} หน้า $1 ถูกสร้างแล้วโดย {{gender:$2|$2}}',
+'enotif_subject_moved' => '{{SITENAME}} หน้า $1 ได้ย้ายแล้วโดย {{gender:$2|$2}}',
+'enotif_subject_changed' => '{{SITENAME}} หน้า $1 ได้เปลี่ยนแล้วโดย {{gender:$2|$2}}',
+'enotif_lastvisited' => 'ดู $1 สำหรับการเปลี่ยนแปลงทั้งหมดตั้งแต่ครั้งล่าสุดที่คุณเข้าชม',
+'enotif_lastdiff' => 'ดู $1 เพื่อดูการเปลี่ยนแปลงนี้',
 'enotif_anon_editor' => 'ผู้ใช้นิรนาม $1',
-'enotif_body' => 'เรียน $WATCHINGUSERNAME,
+'enotif_body' => 'เรียน $WATCHINGUSERNAME
 
+$PAGEINTRO $NEWPAGE
 
-à¸\97าà¸\87ระà¸\9aà¸\9aà¸\88าà¸\81à¹\80วà¹\87à¸\9a {{SITENAME}} à¸\95à¹\89อà¸\87à¸\81ารà¹\81à¸\88à¹\89à¸\87à¹\83หà¹\89à¸\97ราà¸\9aวà¹\88า à¸«à¸\99à¹\89า $PAGETITLE à¹\84à¸\94à¹\89 $CHANGEDORCREATED à¹\80มืà¹\88อ $PAGEEDITDATE à¹\82à¸\94ย $PAGEEDITOR à¸\94ูรุà¹\88à¸\99à¸\9bัà¸\88à¸\88ุà¸\9aัà¸\99à¹\84à¸\94à¹\89à¸\97ีà¹\88 $PAGETITLE_URL
+à¸\84ำอà¸\98ิà¸\9aายอยà¹\88าà¸\87ยà¹\88อà¸\82อà¸\87à¸\9cูà¹\89à¹\80à¸\82ียà¸\99: $PAGESUMMARY $PAGEMINOREDIT
 
-$NEWPAGE
-
-คำสรุปการแก้ไข: $PAGESUMMARY $PAGEMINOREDIT
-
-ติดต่อผู้แก้ไข:
-อีเมล: $PAGEEDITOR_EMAIL
+ติดต่อผู้เขียน:
+เมล: $PAGEEDITOR_EMAIL
 วิกิ: $PAGEEDITOR_WIKI
 
-จะไม่มีการแจ้งเพิ่มเติมจนกว่าคุณจะได้แวะเข้าไปที่หน้านี้
-นอกจากนี้คุณสามารถตั้งค่ายกเลิกการแจ้งของหน้าที่อยู่ในรายการเฝ้าดูได้
+จะไม่มีประกาศอื่นหากมีกิจกรรมเพิ่มเติม เว้นเสียแต่คุณจะเข้าชมหน้านี้ คุณยังสามารถตั้งค่าตัวบ่งชี้ประกาศใหม่สำหรับหน้าที่คุณเฝ้าดูทุกหน้าในรายการเฝ้าดูของคุณ
 
-             ระบบแจ้งอัตโนมัติจาก {{SITENAME}}
+ระบบประกาศ {{SITENAME}} ที่เป็นมิตรของคุณ
 
 --
-ถ้าต้องการเปลี่ยนแปลงรายการเฝ้าดู กรุณาไปที่:
+ในการเปลี่ยนการตั้งค่าประกาศอีเมลของคุณ โปรดดู
+{{canonicalurl:{{#special:Preferences}}}}
+
+ในการเปลี่ยนการตั้งค่ารายการเฝ้าดูของคุณ โปรดดู
 {{canonicalurl:{{#special:EditWatchlist}}}}
 
¸\96à¹\89าà¸\95à¹\89อà¸\87à¸\81ารลà¸\9aหà¸\99à¹\89าà¸\99ีà¹\89à¸\88าà¸\81รายà¸\81ารà¹\80à¸\9dà¹\89าà¸\94ู à¸\81รุà¸\93าà¹\84à¸\9bà¸\97ีà¹\88:
¹\83à¸\99à¸\81ารลà¸\9aหà¸\99à¹\89าà¸\88าà¸\81รายà¸\81ารà¹\80à¸\9dà¹\89าà¸\94ูà¸\82อà¸\87à¸\84ุà¸\93 à¹\82à¸\9bรà¸\94à¸\94ู
 $UNWATCHURL
 
-à¸\96à¹\89าà¸\95à¹\89อà¸\87à¸\81ารà¸\84วามà¸\8aà¹\88วยà¹\80หลือà¹\80à¸\9eิà¹\88มà¹\80à¸\95ิม à¸\81รุà¸\93าà¹\84à¸\9bà¸\97ีà¹\88:
+à¸\9cลà¸\9bà¹\89อà¸\99à¸\81ลัà¸\9aà¹\81ละà¸\84วามà¸\8aà¹\88วยà¹\80หลือà¹\80à¸\9eิà¹\88มà¹\80à¸\95ิม:
 {{canonicalurl:{{MediaWiki:Helppage}}}}',
+'created' => 'ถูกสร้าง',
+'changed' => 'ถูกเปลี่ยนแปลง',
 
 # Delete
 'deletepage' => 'ลบหน้า',
 'confirm' => 'ยืนยัน',
 'excontent' => "เนื้อหาเดิม: '$1'",
 'excontentauthor' => "เนื้อหาเดิม: '$1' (และมีผู้เขียนคนเดียว คือ '[[Special:Contributions/$2|$2]]')",
-'exbeforeblank' => "à¹\80à¸\99ืà¹\89อหาà¹\80à¸\94ิมà¸\81à¹\88อà¸\99หà¸\99à¹\89าà¸\96ูà¸\81à¸\97ำà¹\83หà¹\89วà¹\88าà¸\87: '$1'",
+'exbeforeblank' => "à¹\80à¸\99ืà¹\89อหาà¸\81à¹\88อà¸\99à¸\96ูà¸\81à¸\97ำวà¹\88าà¸\87à¸\84ือ: '$1'",
 'exblank' => 'หน้าว่าง',
 'delete-confirm' => 'ลบ "$1"',
 'delete-legend' => 'ลบ',
 'historywarning' => 'คำเตือน: หน้าที่คุณกำลังจะลบ มีประวัติการแก้ไขโดยประมาณ $1 {{PLURAL:$1|รุ่น}}:',
-'confirmdeletetext' => 'à¸\84ุà¸\93à¸\81ำลัà¸\87à¸\88ะลà¸\9aหà¸\99à¹\89าหรือภาà¸\9eà¸\99ีà¹\89 à¸£à¸§à¸¡à¹\84à¸\9bà¸\96ึà¸\87à¸\9bระวัà¸\95ิหà¸\99à¹\89าออà¸\81à¸\88าà¸\81ระà¸\9aà¸\9a
-à¸\81รุà¸\93ายืà¸\99ยัà¸\99วà¹\88าà¸\95à¹\89อà¸\87à¸\81ารà¸\94ำà¹\80à¸\99ิà¸\99à¸\81ารà¸\95à¹\88อà¹\81ละà¹\81à¸\99à¹\88à¹\83à¸\88วà¹\88าà¹\84à¸\94à¹\89à¹\80à¸\82à¹\89าà¹\83à¸\88à¹\81ละà¸\81ารลà¸\9aà¸\84รัà¹\89à¸\87à¸\99ีà¹\89สอà¸\94à¸\84ลà¹\89อà¸\87à¸\81ัà¸\9a[[{{MediaWiki:Policy-url}}]]',
+'confirmdeletetext' => 'à¸\84ุà¸\93à¸\81ำลัà¸\87ลà¸\9aหà¸\99à¹\89า à¸£à¸§à¸¡à¸\97ัà¹\89à¸\87à¸\9bระวัà¸\95ิà¸\97ัà¹\89à¸\87หมà¸\94à¸\82อà¸\87หà¸\99à¹\89า
+à¸\81รุà¸\93ายืà¸\99ยัà¸\99วà¹\88าà¸\84ุà¸\93à¹\80à¸\88à¸\95à¸\99า à¹\81ละà¸\84ุà¸\93à¹\80à¸\82à¹\89าà¹\83à¸\88à¸\9cลà¸\81ระà¸\97à¸\9a à¹\81ละà¸\81ารà¸\81ระà¸\97ำà¸\99ีà¹\89สอà¸\94à¸\84ลà¹\89อà¸\87à¸\81ัà¸\9a[[{{MediaWiki:Policy-url}}|à¸\99à¹\82ยà¸\9aาย]]',
 'actioncomplete' => 'ปฏิบัติการสำเร็จ',
 'actionfailed' => 'ปฏิบัติการล้มเหลว',
 'deletedtext' => '"$1" ถูกลบ
 ดู $2 สำหรับบันทึกการลบล่าสุด',
 'dellogpage' => 'ปูมการลบ',
-'dellogpagetext' => 'à¸\94à¹\89าà¸\99ลà¹\88าà¸\87à¹\80à¸\9bà¹\87à¸\99รายà¸\81ารà¸\82อà¸\87à¸\81ารลà¸\9aลà¹\88าสุà¸\94',
-'deletionlog' => 'à¸\9aัà¸\99à¸\97ึà¸\81การลบ',
+'dellogpagetext' => 'ด้านล่างเป็นรายการการลบล่าสุด',
+'deletionlog' => 'à¸\9bูมการลบ',
 'reverted' => 'ย้อนไปรุ่นก่อนหน้า',
 'deletecomment' => 'เหตุผล:',
-'deleteotherreason' => 'เหตุผลอื่นเพิ่มเติม:',
+'deleteotherreason' => 'เหตุผลอื่น/เพิ่มเติม:',
 'deletereasonotherlist' => 'เหตุผลอื่น',
-'deletereason-dropdown' => '* à¹\80หà¸\95ุà¸\9cลà¸\97ัà¹\88วà¹\84à¸\9bà¸\82อà¸\87à¸\81ารลà¸\9a
+'deletereason-dropdown' => '* à¹\80หà¸\95ุà¸\9cลà¸\81ารลà¸\9aà¸\97ัà¹\88วà¹\84à¸\9b
 ** รับแจ้งจากผู้เขียน
 ** ละเมิดลิขสิทธิ์
 ** ก่อกวน',
-'delete-edit-reasonlist' => 'à¹\81à¸\81à¹\89à¹\84à¸\82รายà¸\8aืà¹\88อà¹\80หà¸\95ุà¸\9cลà¹\83à¸\99การลบ',
-'delete-toobig' => 'หà¸\99à¹\89าà¸\99ีà¹\89มีà¸\9bระวัà¸\95ิà¸\81ารà¹\81à¸\81à¹\89à¹\84à¸\82มาà¸\81à¹\80à¸\81ิà¸\99à¸\81วà¹\88า $1 {{PLURAL:$1|รุà¹\88à¸\99|รุà¹\88à¸\99}} à¸\8bึà¹\88à¸\87à¸\96ือวà¹\88าà¹\80ยอะมาà¸\81 à¹\80à¸\9eืà¹\88อà¸\9bà¹\89อà¸\87à¸\81ัà¸\99à¹\84มà¹\88à¹\83หà¹\89 {{SITENAME}} à¹\84à¸\94à¹\89รัà¸\9aà¸\84วามà¹\80สียหายอยà¹\88าà¸\87à¸\97ีà¹\88à¹\84มà¹\88à¹\80à¸\84ยà¸\84าà¸\94à¸\84ิà¸\94มาà¸\81à¹\88อà¸\99 à¸\88ึà¸\87à¹\84มà¹\88อà¸\99ุà¸\8dาà¸\95à¹\83หà¹\89ลà¸\9aหà¸\99à¹\89าà¸\99ีà¹\89',
-'delete-warning-toobig' => 'หà¸\99à¹\89าà¸\99ีà¹\89มีà¸\9bระวัà¸\95ิà¸\81ารà¹\81à¸\81à¹\89à¹\84à¸\82มาà¸\81à¹\80à¸\81ิà¸\99à¸\81วà¹\88า $1 {{PLURAL:$1|รุà¹\88à¸\99|รุà¹\88à¸\99}} à¸\8bึà¹\88à¸\87à¸\96ือวà¹\88าà¹\80ยอะมาà¸\81 à¸\81ารลà¸\9aหà¸\99à¹\89าà¸\99ีà¹\89อาà¸\88à¸\97ำà¹\83หà¹\89 {{SITENAME}} à¹\84à¸\94à¹\89รัà¸\9aà¸\84วามà¹\80สียหายอยà¹\88าà¸\87à¸\97ีà¹\88à¹\84มà¹\88à¹\80à¸\84ยà¸\84าà¸\94à¸\84ิà¸\94มาà¸\81à¹\88อà¸\99 à¸\88ึà¸\87à¹\84à¸\94à¹\89à¹\80à¸\95ือà¸\99à¹\84วà¹\89 à¸\81à¹\88อà¸\99à¸\97ีà¹\88à¸\88ะà¸\81ระà¸\97ำสิà¹\88à¸\87à¸\99ีà¹\89',
+'delete-edit-reasonlist' => 'à¹\81à¸\81à¹\89à¹\84à¸\82à¹\80หà¸\95ุà¸\9cลการลบ',
+'delete-toobig' => 'หà¸\99à¹\89าà¸\99ีà¹\89มีà¸\9bระวัà¸\95ิà¸\81ารà¹\81à¸\81à¹\89à¹\84à¸\82à¸\99าà¸\94à¹\83หà¸\8dà¹\88 à¸\84ือ à¸\81วà¹\88า $1 à¸£à¸¸à¹\88à¸\99 à¸\81ารลà¸\9aหà¸\99à¹\89าà¹\80à¸\8aà¹\88à¸\99à¸\99ีà¹\89à¸\96ูà¸\81à¸\88ำà¸\81ัà¸\94à¹\80à¸\9eืà¹\88อà¸\9bà¹\89อà¸\87à¸\81ัà¸\99à¸\81ารรà¸\9aà¸\81วà¸\99{{SITENAME}}à¹\82à¸\94ยà¸\9aัà¸\87à¹\80อิà¸\8d',
+'delete-warning-toobig' => 'หà¸\99à¹\89าà¸\99ีà¹\89มีà¸\9bระวัà¸\95ิà¸\81ารà¹\81à¸\81à¹\89à¹\84à¸\82à¸\82à¸\99าà¸\94à¹\83หà¸\8dà¹\88 à¸\81วà¹\88า $1 à¸£à¸¸à¹\88à¸\99 à¸\81ารลà¸\9aหà¸\99à¹\89าà¸\99ีà¹\89อาà¸\88รà¸\9aà¸\81วà¸\99à¸\81ารà¸\97ำà¸\87าà¸\99à¸\82อà¸\87à¸\90าà¸\99à¸\82à¹\89อมูลà¸\82อà¸\87 {{SITENAME}} à¹\82à¸\9bรà¸\94à¸\94ำà¹\80à¸\99ิà¸\99à¸\81ารà¸\94à¹\89วยà¸\84วามระมัà¸\94ระวัà¸\87',
 
 # Rollback
 'rollback' => 'ย้อนการแก้ไขกลับฉุกเฉิน',
 'rollback_short' => 'ย้อนกลับฉุกเฉิน',
 'rollbacklink' => 'ย้อนกลับฉุกเฉิน',
 'rollbacklinkcount' => 'ย้อนกลับฉุกเฉิน $1 การแก้ไข',
-'rollbackfailed' => 'ย้อนไม่สำเร็จ',
-'cantrollback' => 'ไม่สามารถย้อนการแก้ไขได้ เนื่องจากหน้านี้ไม่มีผู้แก้ไขรายอื่นอีก',
-'alreadyrolled' => 'ไม่สามารถย้อนรุ่นล่าสุด
-ที่แก้โดย [[User:$2|$2]] ([[User talk:$2|พูดคุย]]{{int:pipe-separator}}[[Special:Contributions/$2|{{int:contribslink}}]]) ของหน้า [[:$1]] มีใครบางคนได้แก้ไขหรือย้อนหน้านี้ไปก่อนแล้ว
+'rollbacklinkcount-morethan' => 'ย้อนกลับฉุกเฉินกว่า $1 การแก้ไข',
+'rollbackfailed' => 'ย้อนกลับฉุกเฉินล้มเหลว',
+'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' => "สรุà¸\9bà¸\81ารà¹\81à¸\81à¹\89à¹\84à¸\82: \"''\$1''\"",
+'editcomment' => "à¸\84ำอà¸\98ิà¸\9aายอยà¹\88าà¸\87ยà¹\88อà¸\84ือ: \"''\$1''\"",
 'revertpage' => 'ย้อนการแก้ไขของ [[Special:Contributions/$2|$2]] ([[User talk:$2|Talk]]) ไปยังรุ่นของ [[User:$1|$1]]',
 'revertpage-nouser' => 'ย้อนการแก้ไขโดย (ชื่อผู้ใช้ถูกลบออก) ไปยังรุ่นล่าสุดโดย [[User:$1|$1]]',
-'rollback-success' => 'ยà¹\89อà¸\99รุà¹\88à¸\99à¸\97ีà¹\88à¹\81à¸\81à¹\89à¹\84à¸\82à¹\82à¸\94ย $1 à¹\84à¸\9bยัà¸\87รุà¹\88à¸\99ลà¹\88าสุà¸\94à¸\97ีà¹\88à¹\81à¸\81à¹\89à¹\84à¸\82à¹\82à¸\94ย $2 à¹\81ลà¹\89ว',
+'rollback-success' => 'ยà¹\89อà¸\99รุà¹\88à¸\99à¸\97ีà¹\88à¹\81à¸\81à¹\89à¹\84à¸\82à¹\82à¸\94ย $1 à¹\84à¸\9bยัà¸\87รุà¹\88à¸\99ลà¹\88าสุà¸\94à¹\82à¸\94ย $2',
 
 # Edit tokens
 'sessionfailure-title' => 'Session นี้ล้มเหลว',
-'sessionfailure' => 'à¸\97à¹\88าà¸\97าà¸\87จะมีปัญหาเกี่ยวการล็อกอินในช่วงเวลานี้ เกิดจากทางระบบป้องกันการลักลอบการขโมยล็อกอิน กรุณาย้อนกลับไปหน้าก่อนหน้า และลองโหลดใหม่อีกครั้ง',
+'sessionfailure' => 'à¹\80หมือà¸\99จะมีปัญหาเกี่ยวการล็อกอินในช่วงเวลานี้ เกิดจากทางระบบป้องกันการลักลอบการขโมยล็อกอิน กรุณาย้อนกลับไปหน้าก่อนหน้า และลองโหลดใหม่อีกครั้ง',
 
 # Protect
 'protectlogpage' => 'ปูมการล็อก',
 'protectlogtext' => 'ด้านล่างนี้คือรายการการเปลี่ยนแปลงการป้องกันหน้า
 ดู[[Special:ProtectedPages|รายการหน้าที่ถูกป้องกัน]]สำหรับการป้องกันหน้าในปัจจุบัน',
-'protectedarticle' => '"[[$1]]" ถูกล็อก',
+'protectedarticle' => 'ป้องกัน "[[$1]]"',
 'modifiedarticleprotection' => 'เปลี่ยนระดับการล็อกสำหรับ "[[$1]]"',
-'unprotectedarticle' => 'ลà¸\9aà¸\81ารà¸\9bà¸\81à¸\9bà¹\89อà¸\87à¸\82à¹\89อมูลออà¸\81จาก "[[$1]]" แล้ว',
+'unprotectedarticle' => 'ยà¸\81à¹\80ลิà¸\81à¸\81ารà¸\9bà¹\89อà¸\87à¸\81ัà¸\99จาก "[[$1]]" แล้ว',
 'movedarticleprotection' => 'ย้ายการตั้งค่าการล็อกจาก "[[$2]]" ไปยัง "[[$1]]"',
 'protect-title' => 'กำลังล็อกหน้า "$1"',
 'protect-title-notallowed' => 'ดูระดับการป้องกันของ "$1"',
@@ -2176,21 +2222,21 @@ $UNWATCHURL
 'protectexpiry' => 'หมดอายุ:',
 'protect_expiry_invalid' => 'เวลาหมดอายุไม่ถูกต้อง',
 'protect_expiry_old' => 'เวลาหมดอายุผ่านมาแล้ว',
-'protect-unchain-permissions' => 'ปลดล็อกตัวเลือกป้องกันอื่นๆ',
+'protect-unchain-permissions' => 'ปลดล็อกตัวเลือกป้องกันอื่น ๆ',
 'protect-text' => "ดูและเปลี่ยนระดับการล็อกสำหรับหน้า '''$1'''.",
 'protect-locked-blocked' => "ไม่สามารถเปลี่ยนระดับการล็อกหน้าขณะที่ถูกบล็อกได้ ดูระดับการล็อกของหน้า '''$1''':",
 'protect-locked-dblock' => "ไม่สามารถเปลี่ยนระดับการล็อกหน้าได้เนื่องจากฐานข้อมูลถูกล็อก ดูระดับการล็อกของหน้า '''$1''':",
 'protect-locked-access' => "คุณไม่สามารถเปลี่ยนระดับการล็อกหน้าได้ เนื่องจากคุณไม่มีสิทธิ  ดูระดับการล็อกของหน้า '''$1''':",
 'protect-cascadeon' => 'หน้านี้ถูกล็อกเนื่องจากเป็นส่วนหนึ่งของ{{PLURAL:$1|หน้า|หน้า}}ที่ถูกล็อกแบบสืบทอด
 คุณสามารถเปลี่ยนระดับการล็อกได้ แต่จะไม่มีผลต่อการล็อกแบบสืบทอด',
-'protect-default' => 'อà¸\99ุà¸\8dาà¸\95à¹\83หà¹\89à¹\83à¸\8aà¹\89à¸\87าà¸\99สำหรัà¸\9aà¸\9cูà¹\89à¹\83à¸\8aà¹\89à¸\97ัà¹\89à¸\87หมà¸\94',
-'protect-fallback' => 'à¸\88ำà¹\80à¸\9bà¹\87à¸\99à¸\95à¹\89อà¸\87à¹\83à¸\8aà¹\89สิà¸\97à¸\98ิà¹\83à¸\99à¸\81าร "$1"',
+'protect-default' => 'อนุญาตผู้ใช้ทั้งหมด',
+'protect-fallback' => 'อà¸\99ุà¸\8dาà¸\95à¹\80à¸\89à¸\9eาะà¸\9cูà¹\89à¹\83à¸\8aà¹\89à¸\97ีà¹\88มีสิà¸\97à¸\98ิ "$1"',
 'protect-level-autoconfirmed' => 'บล็อกผู้ใช้ใหม่และผู้ใช้ไม่ลงทะเบียน',
-'protect-level-sysop' => 'à¸\9cูà¹\89à¸\94ูà¹\81ลระà¸\9aà¸\9aà¹\81à¸\81à¹\89à¹\84à¸\82à¹\80à¸\97à¹\88าà¸\99ัà¹\89à¸\99',
+'protect-level-sysop' => 'อà¸\99ุà¸\8dาà¸\95à¹\80à¸\89à¸\9eาะà¸\9cูà¹\89à¸\94ูà¹\81ลระà¸\9aà¸\9a',
 'protect-summary-cascade' => 'สืบทอด',
 'protect-expiring' => 'หมดอายุ $1 (UTC)',
 'protect-expiring-local' => 'หมดอายุ $1',
-'protect-expiry-indefinite' => 'à¸\95ลอà¸\94à¸\81าล',
+'protect-expiry-indefinite' => 'à¹\84มà¹\88มีà¸\81ำหà¸\99à¸\94',
 'protect-cascade' => 'ล็อกหน้าที่เป็นส่วนหนึ่งของหน้านี้ (ล็อกแบบสืบทอด)',
 'protect-cantedit' => 'คุณไม่สามารถเปลี่ยนระดับการป้องกันของหน้านี้ เนื่องจากคุณไม่ได้รับสิทธิในการแก้ไขสิ่งนั้น',
 'protect-othertime' => 'ระยะเวลาอื่น:',
@@ -2198,13 +2244,13 @@ $UNWATCHURL
 'protect-existing-expiry' => 'ระยะเวลาการป้องกัน: $3, $2',
 'protect-otherreason' => 'เหตุผลอื่นเพิ่มเติม:',
 'protect-otherreason-op' => 'สาเหตุอื่น',
-'protect-dropdown' => '* à¹\80หà¸\95ุà¸\9cลà¹\82à¸\94ยà¸\97ัà¹\88วà¹\84à¸\9bสำหรัà¸\9aà¸\81ารà¸\9bà¹\89อà¸\87à¸\81ัà¸\99
+'protect-dropdown' => '* à¹\80หà¸\95ุà¸\9cลà¸\81ารà¸\9bà¹\89อà¸\87à¸\81ัà¸\99à¸\97ัà¹\88วà¹\84à¸\9b
 ** การก่อกวนจำนวนมาก
 ** สแปมจำนวนมาก
-** สงครามการแก้ไข
-** à¸«à¸\99à¹\89าสำà¸\84ัà¸\8d',
+** สงครามการแก้ไขที่ไม่สร้างสรรค์
+** à¸«à¸\99à¹\89าà¸\97ีà¹\88มีà¸\81ารà¹\80à¸\82à¹\89าà¸\8aมมาà¸\81',
 'protect-edit-reasonlist' => 'สาเหตุการป้องกันการแก้ไข',
-'protect-expiry-options' => '1 à¸\8aัà¹\88วà¹\82มà¸\87:1 hour,1 à¸§à¸±à¸\99:1 day,1 à¸ªà¸±à¸\9bà¸\94าหà¹\8c:1 week,2 à¸ªà¸±à¸\9bà¸\94าหà¹\8c:2 weeks,1 à¹\80à¸\94ือà¸\99:1 month,3 à¹\80à¸\94ือà¸\99:3 months,6 à¹\80à¸\94ือà¸\99:6 months,1 à¸\9bี:1 year,à¸\95ลอà¸\94à¸\81าล:infinite',
+'protect-expiry-options' => '1 à¸\8aัà¹\88วà¹\82มà¸\87:1 hour,1 à¸§à¸±à¸\99:1 day,1 à¸ªà¸±à¸\9bà¸\94าหà¹\8c:1 week,2 à¸ªà¸±à¸\9bà¸\94าหà¹\8c:2 weeks,1 à¹\80à¸\94ือà¸\99:1 month,3 à¹\80à¸\94ือà¸\99:3 months,6 à¹\80à¸\94ือà¸\99:6 months,1 à¸\9bี:1 year,à¹\84มà¹\88มีà¸\81ำหà¸\99à¸\94:infinite',
 'restriction-type' => 'อนุญาต',
 'restriction-level' => 'ระดับการล็อก',
 'minimum-size' => 'ขนาดอย่างน้อย',
@@ -2223,45 +2269,47 @@ $UNWATCHURL
 'restriction-level-all' => 'ระดับ',
 
 # Undelete
-'undelete' => 'à¹\80รียà¸\81à¸\84ืà¸\99',
-'undeletepage' => 'à¸\94ูà¹\81ละà¹\80รียà¸\81คืนหน้าที่ถูกลบ',
+'undelete' => 'à¸\94ูหà¸\99à¹\89าà¸\97ีà¹\88à¸\96ูà¸\81ลà¸\9a',
+'undeletepage' => 'à¸\94ูà¹\81ละà¸\81ูà¹\89คืนหน้าที่ถูกลบ',
 'undeletepagetitle' => "'''ต่อไปนี้เป็นรุ่นการแก้ไขของ [[:$1|$1]] ที่ถูกลบ'''",
 'viewdeletedpage' => 'หน้าที่ถูกลบ',
 'undeletepagetext' => '{{PLURAL:$1|หน้า|หน้า}}ต่อไปนี้ถูกลบไปแล้ว แต่ยังคงอยู่ในกรุซึ่งสามารถเรียกคืนได้ กรุข้อมูลอาจถูกลบเป็นระยะ',
-'undelete-fieldset-title' => 'à¹\80รียà¸\81à¸\84ืà¸\99รุà¹\88à¸\99à¸\95à¹\88าà¸\87ๆ',
-'undeleteextrahelp' => "à¸\96à¹\89าà¸\95à¹\89อà¸\87à¸\81ารà¹\80รียà¸\81à¸\84ืà¸\99à¸\9bระวัà¸\95ิà¸\82อà¸\87หà¸\99à¹\89าà¸\97ัà¹\89à¸\87หมà¸\94 à¹\84มà¹\88à¸\95à¹\89อà¸\87à¹\80ลือà¸\81à¸\81ลà¹\88อà¸\87à¹\83à¸\94à¹\80ลย à¹\81ลà¹\89วà¸\81à¸\94à¸\9bุà¹\88ม '''''à¹\80รียà¸\81คืน'''''
-à¸\96à¹\89าà¸\95à¹\89อà¸\87à¸\81ารà¹\80รียà¸\81à¸\84ืà¸\99à¸\9bระวัà¸\95ิà¹\80à¸\89à¸\9eาะสà¹\88วà¸\99à¹\83à¸\94สà¹\88วà¸\99หà¸\99ึà¹\88à¸\87 à¹\80ลือà¸\81à¸\81ลà¹\88อà¸\87à¸\97ีà¹\88มีà¸\9bระวัà¸\95ิสà¹\88วà¸\99à¸\97ีà¹\88à¸\95à¹\89อà¸\87à¸\81ารà¸\88ะà¹\80รียà¸\81à¸\84ืà¸\99 à¹\81ลà¹\89วà¸\81à¸\94'''''à¹\80รียà¸\81คืน'''''
+'undelete-fieldset-title' => 'à¸\81ูà¹\89à¸\84ืà¸\99รุà¹\88à¸\99à¸\95à¹\88าà¸\87 ๆ',
+'undeleteextrahelp' => "à¸\96à¹\89าà¸\95à¹\89อà¸\87à¸\81ารà¸\81ูà¹\89à¸\9bระวัà¸\95ิà¸\82อà¸\87หà¸\99à¹\89าà¸\84ืà¸\99à¸\97ัà¹\89à¸\87หมà¸\94 à¹\84มà¹\88à¸\95à¹\89อà¸\87à¹\80ลือà¸\81à¸\81ลà¹\88อà¸\87à¹\83à¸\94à¹\80ลย à¹\81ลà¹\89วà¸\81à¸\94à¸\9bุà¹\88ม '''''à¸\81ูà¹\89คืน'''''
+à¸\96à¹\89าà¸\95à¹\89อà¸\87à¸\81ารà¸\81ูà¹\89à¸\9bระวัà¸\95ิà¸\84ืà¸\99à¹\80à¸\89à¸\9eาะà¸\9aาà¸\87สà¹\88วà¸\99 à¹\83หà¹\89à¹\80ลือà¸\81à¸\81ลà¹\88อà¸\87à¸\97ีà¹\88มีà¸\9bระวัà¸\95ิสà¹\88วà¸\99à¸\97ีà¹\88à¸\95à¹\89อà¸\87à¸\81ารà¸\81ูà¹\89 à¹\81ลà¹\89วà¸\81à¸\94'''''à¸\81ูà¹\89คืน'''''
 กด '''''ล้างค่า''''' เพื่อลบค่าในกล่องความเห็นและกล่องตัวเลือกทั้งหมด",
 'undeleterevisions' => '$1 รุ่นการแก้ไขถูกเก็บไว้',
-'undeletehistory' => 'à¹\80มืà¹\88อà¸\84ุà¸\93à¹\80รียà¸\81à¸\84ืà¸\99หà¸\99à¹\89าà¹\83à¸\94หà¸\99à¹\89าหà¸\99ึà¹\88à¸\87 à¸£à¸¸à¹\88à¸\99à¸\81ารà¹\81à¸\81à¹\89à¹\84à¸\82à¸\97ัà¹\89à¸\87หมà¸\94à¸\88ะà¸\96ูà¸\81à¹\80รียà¸\81à¸\84ืà¸\99à¹\84à¸\9bยัà¸\87à¸\9bระวัà¸\95ิ à¸«à¸²à¸\81มีหà¸\99à¹\89าà¹\83หมà¹\88à¹\83à¸\99à¸\8aืà¹\88อà¹\80à¸\94ียวà¸\81ัà¸\99à¸\96ูà¸\81สรà¹\89าà¸\87à¸\82ึà¹\89à¸\99หลัà¸\87à¸\88าà¸\81à¸\81ารลà¸\9a à¸£à¸¸à¹\88à¸\99à¸\97ีà¹\88à¹\80รียà¸\81à¸\84ืà¸\99à¸\88ะà¸\9bราà¸\81à¸\8fà¹\83à¸\99à¸\8aà¹\88วà¸\87ประวัติที่มีมาก่อน',
-'undeleterevdel' => 'à¸\88ะà¹\80รียà¸\81à¸\84ืà¸\99à¹\84มà¹\88à¹\84à¸\94à¹\89à¸\96à¹\89ารุà¹\88à¸\99à¹\83à¸\99สà¹\88วà¸\99à¸\97ีà¹\88à¹\83หมà¹\88à¸\96ูà¸\81ลà¸\9aà¹\84à¸\9bà¸\9aาà¸\87สà¹\88วà¸\99 à¸\96à¹\89าà¹\80à¸\81ิà¸\94à¸\82ึà¹\89à¸\99à¹\83à¸\99à¸\81รà¸\93ีà¸\99ีà¹\89 à¸\95à¹\89อà¸\87à¸\81à¸\94à¹\81สà¸\94à¸\87à¹\83à¸\99สà¹\88วà¸\99à¹\83หมà¹\88ก่อน',
+'undeletehistory' => 'à¹\80มืà¹\88อà¸\84ุà¸\93à¸\81ูà¹\89หà¸\99à¹\89าà¹\83à¸\94หà¸\99à¹\89าหà¸\99ึà¹\88à¸\87 à¸£à¸¸à¹\88à¸\99à¸\97ัà¹\89à¸\87หมà¸\94à¸\88ะà¸\96ูà¸\81à¸\81ูà¹\89à¸\84ืà¸\99à¹\84à¸\9bยัà¸\87à¸\9bระวัà¸\95ิ à¸«à¸²à¸\81มีหà¸\99à¹\89าà¹\83หมà¹\88à¹\83à¸\99à¸\8aืà¹\88อà¹\80à¸\94ียวà¸\81ัà¸\99à¸\96ูà¸\81สรà¹\89าà¸\87à¸\82ึà¹\89à¸\99หลัà¸\87à¸\88าà¸\81à¸\81ารลà¸\9a à¸£à¸¸à¹\88à¸\99à¸\97ีà¹\88à¸\81ูà¹\89à¸\84ืà¸\99à¸\99ัà¹\89à¸\99à¸\88ะà¸\9bราà¸\81à¸\8fà¹\83à¸\99ประวัติที่มีมาก่อน',
+'undeleterevdel' => 'à¸\88ะà¸\81ูà¹\89à¸\84ืà¸\99à¹\84มà¹\88à¹\84à¸\94à¹\89หาà¸\81à¸\81ารà¸\81ูà¹\89à¸\84ืà¸\99à¸\99ัà¹\89à¸\99สà¹\88à¸\87à¸\9cลà¹\83หà¹\89รุà¹\88à¸\99ลà¹\88าสุà¸\94à¸\82อà¸\87หà¸\99à¹\89าหรือà¹\84à¸\9fลà¹\8cà¸\96ูà¸\81ลà¸\9aà¹\84à¸\9bà¸\9aาà¸\87สà¹\88วà¸\99 à¹\83à¸\99à¸\81รà¸\93ีà¹\80à¸\8aà¹\88à¸\99à¸\99ัà¹\89à¸\99 à¸\84ุà¸\93à¸\95à¹\89อà¸\87à¹\84มà¹\88à¹\80ลือà¸\81หรือà¹\81สà¸\94à¸\87รุà¹\88à¸\99à¹\83หมà¹\88สุà¸\94à¸\97ีà¹\88à¸\96ูà¸\81ลà¸\9aà¹\84à¸\9bก่อน',
 'undeletehistorynoadmin' => 'หน้านี้ถูกลบก่อนหน้านี้ โดยสาเหตุการลบและรายชื่อผู้ร่วมแก้ไขก่อนหน้าแสดงผลด้านล่าง สำหรับข้อมูลที่ถูกลบจะดูได้เฉพาะผู้ดูแลระบบ',
 'undelete-revision' => 'รุ่นที่ถูกลบของหน้า $1 (ตั้งแต่ $4 เมื่อ $5) โดย $3:',
-'undeleterevision-missing' => 'รุ่นที่ต้องการดูไม่มี ข้อมูลอาจจะโดนลบ',
+'undeleterevision-missing' => 'รุ่นไม่ถูกต้องหรือสูญหาย
+คุณอาจมีลิงก์เสีย หรือรุ่นอาจถูกกู้คืนหรือนำออกจากกรุ',
 'undelete-nodiff' => 'ไม่พบรุ่นก่อนหน้า',
-'undeletebtn' => 'à¹\80รียà¸\81คืน',
-'undeletelink' => 'à¹\80รียà¸\81à¸\94ู/à¹\80รียà¸\81คืน',
+'undeletebtn' => 'à¸\81ูà¹\89คืน',
+'undeletelink' => 'à¸\94ู/à¸\81ูà¹\89คืน',
 'undeleteviewlink' => 'เรียกดู',
 'undeletereset' => 'ล้างค่า',
 'undeleteinvert' => 'กลับค่าที่เลือก',
 'undeletecomment' => 'เหตุผล:',
-'undeletedrevisions' => '$1 รุ่นการแก้ไขถูกเรียกคืน',
-'undeletedrevisions-files' => '$1 รุ่นการแก้ไข และ $2 ไฟล์ถูกเรียกคืน',
-'undeletedfiles' => '$1 ไฟล์ถูกเรียกคืน',
-'cannotundelete' => 'เรียกคืนไม่สำเร็จ อาจมีใครบางคนเรียกคืนหน้านั้นแล้ว',
-'undeletedpage' => "'''$1 ถูกเรียกคืน'''
-
-ดูเพิ่มเติม [[Special:Log/delete|บันทึกการลบ]] สำหรับรายชื่อการลบและการเรียกคืนที่ผ่านมา",
-'undelete-header' => 'ดู [[Special:Log/delete|บันทึกการลบ]] สำหรับหน้าที่ถูกลบล่าสุด',
+'undeletedrevisions' => '$1 รุ่นการแก้ไขถูกกู้คืน',
+'undeletedrevisions-files' => '$1 รุ่น และ $2 ไฟล์ถูกกู้คืน',
+'undeletedfiles' => '$1 ไฟล์ถูกกู้คืน',
+'cannotundelete' => 'กู้คืนล้มเหลว:
+$1',
+'undeletedpage' => "'''$1 ถูกกู้คืน'''
+
+ดู[[Special:Log/delete|ปูมการลบ]] สำหรับรายชื่อการลบและการกู้คืนล่าสุด",
+'undelete-header' => 'ดู [[Special:Log/delete|ปูมการลบ]] สำหรับหน้าที่ถูกลบล่าสุด',
 'undelete-search-title' => 'ค้นหาหน้าที่ถูกลบ',
 'undelete-search-box' => 'ค้นหาหน้าที่ถูกลบ',
 'undelete-search-prefix' => 'ค้นหาหน้าที่เริ่มต้นด้วย:',
 'undelete-search-submit' => 'สืบค้น',
-'undelete-no-results' => 'à¹\84มà¹\88à¸\9eà¸\9aหà¸\99à¹\89าà¸\97ีà¹\88à¸\95à¹\89อà¸\87à¸\81ารà¸\88าà¸\81à¸\9aัà¸\99à¸\97ึà¸\81การลบ',
+'undelete-no-results' => 'à¹\84มà¹\88à¸\9eà¸\9aหà¸\99à¹\89าà¸\97ีà¹\88à¸\95รà¸\87à¸\81ัà¸\99à¹\83à¸\99à¸\81รุการลบ',
 'undelete-filename-mismatch' => 'ไม่สามารถกู้คืนไฟล์ $1: ชื่อไฟล์ไม่ถูกต้อง',
 'undelete-bad-store-key' => 'ไม่สามารถกู้คืนไฟล์ $1: ไม่มีไฟล์ก่อนที่จะถูกลบ',
 'undelete-cleanup-error' => 'เกิดปัญหาการลบไฟล์เก่า "$1"',
-'undelete-missing-filearchive' => 'à¹\84มà¹\88สามารà¸\96à¸\81ูà¹\89à¸\84ืà¸\99à¹\84à¸\9fลà¹\8cà¹\80à¸\81à¹\88ารุà¹\88à¸\99 $1 à¹\80à¸\9eราะวà¹\88าà¹\84มà¹\88มีà¹\84à¸\9fลà¹\8cอยูà¹\88à¹\83à¸\99à¸\90าà¸\99à¸\82à¹\89อมูล  à¹\84à¸\9fลà¹\8cอาà¸\88à¸\88ะà¸\96ูà¸\81à¸\81ูà¹\89à¸\84ืà¸\99à¹\84à¸\9bà¸\81à¹\88อà¸\99หà¸\99à¹\89า',
+'undelete-missing-filearchive' => 'à¹\84มà¹\88สามารà¸\96à¸\81ูà¹\89à¸\84ืà¸\99à¹\84à¸\9fลà¹\8cà¹\80à¸\81à¹\88ารุà¹\88à¸\99 $1 à¹\80à¸\9eราะà¹\84มà¹\88มีà¹\84à¸\9fลà¹\8cอยูà¹\88à¹\83à¸\99à¸\90าà¸\99à¸\82à¹\89อมูล à¹\84à¸\9fลà¹\8cอาà¸\88à¸\96ูà¸\81à¸\81ูà¹\89à¸\84ืà¸\99à¹\84à¸\9bà¹\81ลà¹\89ว',
 'undelete-error' => 'เกิดข้อผิดพลาด ไม่สามารถลบหน้าเวปได้',
 'undelete-error-short' => 'เกิดปัญหาในการกู้คืนไฟล์: $1',
 'undelete-error-long' => 'เกิดความผิดพลาดระหว่างการลบไฟล์:
@@ -2272,57 +2320,57 @@ $1',
 
 # Namespace form on various pages
 'namespace' => 'เนมสเปซ:',
-'invert' => 'à¸\97ัà¹\89à¸\87หมà¸\94à¸\97ีà¹\88à¹\84มà¹\88à¹\84à¸\94à¹\89เลือก',
+'invert' => 'à¸\81ลัà¸\9aà¸\81ารเลือก',
 'tooltip-invert' => 'เลือกกล่องนี้เพื่อซ่อนการเปลี่ยนแปลงไปยังหน้าในเนมเปซที่เลือก (และเนมสเปซที่เกี่ยวข้องถ้าเลือก)',
 'namespace_association' => 'เนมสเปซที่เกี่ยวข้อง',
 'tooltip-namespace_association' => 'เลือกกล่องนี้เพื่อรวมเนมสเปซพูดคุยหรือหัวข้อที่เกี่ยวข้องกับเนมสเปซที่เลือกด้วย',
 'blanknamespace' => '(หลัก)',
 
 # Contributions
-'contributions' => 'เรื่องที่เขียนโดยผู้ใช้นี้',
+'contributions' => 'เรื่องที่เขียนโดย{{GENDER:$1|ผู้ใช้}}นี้',
 'contributions-title' => 'เรื่องที่เขียนโดย $1',
 'mycontris' => 'เรื่องที่เขียน',
 'contribsub2' => 'สำหรับ $1 ($2)',
-'nocontribs' => 'à¹\84มà¹\88มีà¸\81ารà¹\80à¸\9bลีà¹\88ยà¸\99à¹\81à¸\9bลà¸\87à¸\95ามà¹\80à¸\87ืà¹\88อà¸\99à¹\84à¸\82à¸\97ีà¹\88à¹\83สà¹\88มา',
+'nocontribs' => 'à¹\84มà¹\88à¸\9eà¸\9aà¸\81ารà¹\80à¸\9bลีà¹\88ยà¸\99à¹\81à¸\9bลà¸\87à¸\95รà¸\87à¸\81ัà¸\9aà¹\80à¸\87ืà¹\88อà¸\99à¹\84à¸\82à¹\80หลà¹\88าà¸\99ีà¹\89',
 'uctop' => ' (บนสุด)',
 'month' => 'จากเดือน (และก่อนหน้า):',
 'year' => 'จากปี (และก่อนหน้า):',
 
 'sp-contributions-newbies' => 'แสดงการแก้ไขของผู้ใช้ใหม่เท่านั้น',
 'sp-contributions-newbies-sub' => 'สำหรับผู้ใช้ใหม่',
-'sp-contributions-newbies-title' => 'à¹\80รืà¹\88อà¸\87à¸\97ีà¹\88à¹\80à¸\82ียà¸\99à¹\82à¸\94ยà¸\9aัà¸\8dà¸\8aีà¸\9cูà¹\89à¹\83à¸\8aà¹\89à¹\83หมà¹\88',
+'sp-contributions-newbies-title' => 'เรื่องที่เขียนโดยบัญชีใหม่',
 'sp-contributions-blocklog' => 'ปูมการบล็อก',
 'sp-contributions-deleted' => 'การแก้ไขที่ถูกลบ',
 'sp-contributions-uploads' => 'อัปโหลด',
 'sp-contributions-logs' => 'ปูม',
 'sp-contributions-talk' => 'พูดคุย',
-'sp-contributions-userrights' => 'à¸\9aริหารสิทธิผู้ใช้',
+'sp-contributions-userrights' => 'à¸\88ัà¸\94à¸\81ารสิทธิผู้ใช้',
 'sp-contributions-blocked-notice' => 'ปัจจุบันเลขที่อยู่ไอพีนี้ถูกบล็อก
 ปูมการบล็อกล่าสุดแสดงด้านล่างนี้เพื่อการอ้างอิง:',
 'sp-contributions-blocked-notice-anon' => 'ปัจจุบันเลขที่อยู่ไอพีนี้ถูกบล็อก
 ปูมการบล็อกล่าสุดแสดงด้านล่างนี้เพื่อการอ้างอิง:',
 'sp-contributions-search' => 'ค้นหาการแก้ไข',
-'sp-contributions-username' => 'หมายà¹\80ลà¸\82ไอพีหรือชื่อผู้ใช้:',
+'sp-contributions-username' => 'à¹\80ลà¸\82à¸\97ีà¹\88อยูà¹\88ไอพีหรือชื่อผู้ใช้:',
 'sp-contributions-toponly' => 'แสดงเฉพาะการแก้ไขรุ่นล่าสุด',
 'sp-contributions-submit' => 'สืบค้น',
 
 # What links here
 'whatlinkshere' => 'หน้าที่ลิงก์มา',
-'whatlinkshere-title' => 'หà¸\99à¹\89าà¸\97ีà¹\88à¹\82ยà¸\87มาà¸\97ีà¹\88 "$1"',
+'whatlinkshere-title' => 'หà¸\99à¹\89าà¸\97ีà¹\88ลิà¸\87à¸\81à¹\8cมายัà¸\87 "$1"',
 'whatlinkshere-page' => 'หน้า:',
-'linkshere' => "หà¸\99à¹\89าà¸\95à¹\88อà¹\84à¸\9bà¸\99ีà¹\89ลิà¸\87à¸\81à¹\8cมาà¸\97ีà¹\88 '''[[:$1]]''':",
+'linkshere' => "หà¸\99à¹\89าà¸\95à¹\88อà¹\84à¸\9bà¸\99ีà¹\89ลิà¸\87à¸\81à¹\8cมายัà¸\87 '''[[:$1]]''':",
 'nolinkshere' => "ไม่มีหน้าใดลิงก์มาที่ '''[[:$1]]'''",
 'nolinkshere-ns' => "ไม่มีหน้าใดลิงก์มาที่'''[[:$1]]''' ในเนมสเปซที่เลือกไว้",
 'isredirect' => 'หน้าเปลี่ยนทาง',
 'istemplate' => 'รวมอยู่',
-'isimage' => 'à¹\84à¸\9fลà¹\8c à¸¥à¸´à¸\87à¸\84์',
+'isimage' => 'ลิà¸\87à¸\81à¹\8cà¹\84à¸\9fล์',
 'whatlinkshere-prev' => '{{PLURAL:$1|ก่อนหน้า|ก่อนหน้า $1 หน้า}}',
 'whatlinkshere-next' => '{{PLURAL:$1|ถัดไป|ถัดไป $1 หน้า}}',
 'whatlinkshere-links' => '← ลิงก์',
 'whatlinkshere-hideredirs' => '$1หน้าเปลี่ยนทาง',
 'whatlinkshere-hidetrans' => '$1 ถูกรวมอยู่',
 'whatlinkshere-hidelinks' => '$1 ลิงก์',
-'whatlinkshere-hideimages' => '$1 ภาพที่ลิงก์',
+'whatlinkshere-hideimages' => '$1ลิงก์ไฟล์',
 'whatlinkshere-filters' => 'ตัวกรอง',
 
 # Block/unblock
@@ -2332,9 +2380,9 @@ $1',
 'blockip' => 'บล็อกผู้ใช้',
 'blockip-title' => 'ระงับผู้ใช้',
 'blockip-legend' => 'บล็อกผู้ใช้',
-'blockiptext' => 'à¹\83à¸\8aà¹\89à¸\9fอรà¹\8cมà¸\94à¹\89าà¸\99ลà¹\88าà¸\87สำหรัà¸\9aà¸\81ารà¸\9aลà¹\87อà¸\81หมายà¹\80ลà¸\82à¹\84อà¸\9eีหรือà¸\9cูà¹\89à¹\83à¸\8aà¹\89 à¸\8bึà¹\88à¸\87à¸\81à¹\88อà¸\81วà¸\99ระà¸\9aà¸\9a à¹\82à¸\94ยà¹\81à¸\99à¹\88à¹\83à¸\88วà¹\88าà¹\84à¸\94à¹\89à¸\97ำà¸\95าม [[{{MediaWiki:Policy-url}}|นโยบาย]]
¹\83สà¹\88สาà¹\80หà¸\95ุà¸\94à¹\89าà¸\99ลà¹\88าà¸\87 (à¸\95ัวอยà¹\88าà¸\87 หน้าที่ถูกก่อกวน)',
-'ipadressorusername' => 'หมายà¹\80ลà¸\82ไอพีหรือชื่อผู้ใช้',
+'blockiptext' => 'à¹\83à¸\8aà¹\89à¹\81à¸\9aà¸\9aà¸\94à¹\89าà¸\99ลà¹\88าà¸\87à¹\80à¸\9eืà¹\88อà¸\9aลà¹\87อà¸\81สิà¸\97à¸\98ิà¹\80à¸\82à¹\89าà¸\96ึà¸\87à¸\81ารà¹\80à¸\82ียà¸\99à¸\82อà¸\87à¹\80ลà¸\82à¸\97ีà¹\88อยูà¹\88à¹\84อà¸\9eีหรือà¸\8aืà¹\88อà¸\9cูà¹\89à¹\83à¸\8aà¹\89à¹\82à¸\94ยà¹\80à¸\88าะà¸\88à¸\87 à¸\81ารà¸\9aลà¹\87อà¸\81à¸\99ีà¹\89à¸\84วรà¸\94ำà¹\80à¸\99ิà¸\99à¸\81ารà¹\80à¸\9eืà¹\88อà¸\9bà¹\89อà¸\87à¸\81ัà¸\99à¸\81ารà¸\81à¹\88อà¸\81วà¸\99à¹\80à¸\97à¹\88าà¸\99ัà¹\89à¸\99 à¹\81ละà¹\83หà¹\89สอà¸\94à¸\84ลà¹\89อà¸\87à¸\81ัà¸\9a[[{{MediaWiki:Policy-url}}|นโยบาย]]
¸\81รอà¸\81à¹\80หà¸\95ุà¸\9cลà¹\82à¸\94ยà¹\80à¸\88าะà¸\88à¸\87à¸\94à¹\89าà¸\99ลà¹\88าà¸\87 (à¹\80à¸\8aà¹\88à¸\99 à¸­à¹\89าà¸\87à¸\96ึà¸\87หน้าที่ถูกก่อกวน)',
+'ipadressorusername' => 'à¹\80ลà¸\82à¸\97ีà¹\88อยูà¹\88ไอพีหรือชื่อผู้ใช้',
 'ipbexpiry' => 'หมดอายุ',
 'ipbreason' => 'เหตุผล:',
 'ipbreasonotherlist' => 'เลือกสาเหตุ',
@@ -2346,52 +2394,52 @@ $1',
 ** คุกคามผู้อื่น
 ** ก่อกวนผู้อื่น
 ** ชื่อผู้ใช้ที่ไม่สุภาพหรือไม่ควรใช้',
-'ipb-hardblock' => 'à¸\9bà¹\89อà¸\87à¸\81ัà¸\99à¹\84มà¹\88à¹\83หà¹\89à¸\9cูà¹\89à¹\83à¸\8aà¹\89ลà¹\87อà¸\81อิà¸\99à¹\81à¸\81à¹\89à¹\84à¸\82à¸\88าà¸\81หมายà¹\80ลà¸\82ไอพีนี้',
-'ipbcreateaccount' => 'ป้องกันการสร้างบัญชีผู้ใช้',
-'ipbemailban' => 'à¸\9bà¹\89อà¸\87à¸\81ัà¸\99à¸\9cูà¹\89à¹\83à¸\8aà¹\89สà¹\88à¸\87อีà¹\80มลà¸\9cà¹\88าà¸\99ระà¸\9aà¸\9a',
-'ipbenableautoblock' => 'à¸\9aลà¹\87อà¸\81หมายà¹\80ลà¸\82à¹\84อà¸\9eีà¸\99ีà¹\89à¹\81ละà¹\84อà¸\9eีà¸\97ีà¹\88à¸\9cูà¹\89à¹\83à¸\8aà¹\89à¸\99ีà¹\89อาà¸\88à¸\88ะà¹\83à¸\8aà¹\89',
-'ipbsubmit' => 'à¸\9aลà¹\87อà¸\81à¸\8aืà¹\88อà¸\9cูà¹\89à¹\83à¸\8a้',
+'ipb-hardblock' => 'à¸\9bà¹\89อà¸\87à¸\81ัà¸\99à¹\84มà¹\88à¹\83หà¹\89à¸\9cูà¹\89à¹\83à¸\8aà¹\89ลà¹\87อà¸\81อิà¸\99à¹\81à¸\81à¹\89à¹\84à¸\82à¸\88าà¸\81à¹\80ลà¸\82à¸\97ีà¹\88อยูà¹\88ไอพีนี้',
+'ipbcreateaccount' => 'ป้องกันการสร้างบัญชี',
+'ipbemailban' => 'à¸\9bà¹\89อà¸\87à¸\81ัà¸\99มิà¹\83หà¹\89à¸\9cูà¹\89à¹\83à¸\8aà¹\89สà¹\88à¸\87อีà¹\80มล',
+'ipbenableautoblock' => 'à¸\9aลà¹\87อà¸\81à¹\80ลà¸\82à¸\97ีà¹\88อยูà¹\88à¹\84อà¸\9eีลà¹\88าสุà¸\94à¸\97ีà¹\88à¸\9cูà¹\89à¹\83à¸\8aà¹\89à¸\99ีà¹\89à¹\83à¸\8aà¹\89 à¸\97ัà¹\89à¸\87à¸\97ุà¸\81à¹\80ลà¸\82à¸\97ีà¹\88อยูà¹\88à¹\84อà¸\9eีà¸\97ีà¹\88à¸\9cูà¹\89à¸\99ัà¹\89à¸\99à¸\9eยายามà¹\83à¸\8aà¹\89à¹\81à¸\81à¹\89à¹\84à¸\82à¹\82à¸\94ยอัà¸\95à¹\82à¸\99มัà¸\95ิ',
+'ipbsubmit' => 'à¸\9aลà¹\87อà¸\81à¸\9cูà¹\89à¹\83à¸\8aà¹\89à¸\99ี้',
 'ipbother' => 'เวลาอื่น',
-'ipboptions' => '2 à¸\8aัà¹\88วà¹\82มà¸\87:2 hours,1 à¸§à¸±à¸\99:1 day,3 à¸§à¸±à¸\99:3 days,1 à¸ªà¸±à¸\9bà¸\94าหà¹\8c:1 week,2 à¸ªà¸±à¸\9bà¸\94าหà¹\8c:2 weeks,1 à¹\80à¸\94ือà¸\99:1 month,3 à¹\80à¸\94ือà¸\99:3 months,6 à¹\80à¸\94ือà¸\99:6 months,1 à¸\9bี:1 year,à¸\95ลอà¸\94à¸\81าล:infinite',
+'ipboptions' => '2 à¸\8aัà¹\88วà¹\82มà¸\87:2 hours,1 à¸§à¸±à¸\99:1 day,3 à¸§à¸±à¸\99:3 days,1 à¸ªà¸±à¸\9bà¸\94าหà¹\8c:1 week,2 à¸ªà¸±à¸\9bà¸\94าหà¹\8c:2 weeks,1 à¹\80à¸\94ือà¸\99:1 month,3 à¹\80à¸\94ือà¸\99:3 months,6 à¹\80à¸\94ือà¸\99:6 months,1 à¸\9bี:1 year,à¹\84มà¹\88มีà¸\81ำหà¸\99à¸\94:infinite',
 'ipbotheroption' => 'เลือกเวลา',
 'ipbotherreason' => 'เหตุผลอื่น',
 'ipbhidename' => 'ซ่อนผู้ใช้จากปูมการบล็อก และรายการผู้ที่ถูกบล็อก',
 'ipbwatchuser' => 'เฝ้าดูหน้าผู้ใช้และหน้าคุยกับผู้ใช้ของผู้ใช้รายนี้',
-'ipb-disableusertalk' => 'à¸\9bà¹\89อà¸\87à¸\81ัà¸\99à¹\84มà¹\88à¹\83หà¹\89à¸\9cูà¹\89à¹\83à¸\8aà¹\89à¸\99ีà¹\89à¹\81à¸\81à¹\89à¹\84à¸\82หà¸\99à¹\89าà¸\9eูà¸\94à¸\84ุยของตัวเองขณะถูกบล็อก',
+'ipb-disableusertalk' => 'à¸\81ัà¸\99à¹\84มà¹\88à¹\83หà¹\89à¸\9cูà¹\89à¹\83à¸\8aà¹\89à¸\99ีà¹\89à¹\81à¸\81à¹\89à¹\84à¸\82หà¸\99à¹\89าà¸\84ุยà¸\81ัà¸\9aà¸\9cูà¹\89à¹\83à¸\8aà¹\89ของตัวเองขณะถูกบล็อก',
 'ipb-change-block' => 'บล็อกผู้ใช้อีกครั้งด้วยการตั้งค่าเหล่านี้',
 'ipb-confirm' => 'ยืนยันการบล็อก',
-'badipaddress' => 'หมายà¹\80ลà¸\82ไอพีไม่ถูกต้อง',
+'badipaddress' => 'à¹\80ลà¸\82à¸\97ีà¹\88อยูà¹\88ไอพีไม่ถูกต้อง',
 'blockipsuccesssub' => 'บล็อกสำเร็จ',
 'blockipsuccesstext' => '[[Special:Contributions/$1|$1]] ถูกบล็อก<br />
-ดู[[Special:BlockList|รายการบล็อกไอพี]]เพื่อตรวจสอบการบล็อก',
-'ipb-blockingself' => 'à¸\84ุà¸\93à¸\81ำลัà¸\87à¸\97ำà¸\81ารà¸\9aลà¹\87อà¸\81à¸\95ัวà¸\84ุà¸\93à¹\80อà¸\87 à¸\84ุà¸\93à¹\81à¸\99à¹\88à¹\83à¸\88à¹\81ลà¹\89วหรือวà¹\88าà¸\95à¹\89อà¸\87à¸\81ารà¸\97ำà¹\80à¸\8aà¹\88à¸\99นั้น',
+ดู[[Special:BlockList|รายการบล็อก]]เพื่อทบทวนการบล็อก',
+'ipb-blockingself' => 'à¸\84ุà¸\93à¸\81ำลัà¸\87à¸\9aลà¹\87อà¸\81à¸\95ัวà¹\80อà¸\87! à¹\81à¸\99à¹\88à¹\83à¸\88à¹\81ลà¹\89วหรือวà¹\88าà¸\95à¹\89อà¸\87à¸\81ารà¸\97ำอยà¹\88าà¸\87นั้น',
 'ipb-edit-dropdown' => 'แก้ไขสาเหตุการบล็อก',
 'ipb-unblock-addr' => 'เลิกบล็อก $1',
-'ipb-unblock' => 'à¹\80ลิà¸\81à¸\9aลà¹\87อà¸\81à¸\9cูà¹\89à¹\83à¸\8aà¹\89หรือหมายà¹\80ลà¸\82ไอพี',
+'ipb-unblock' => 'à¹\80ลิà¸\81à¸\9aลà¹\87อà¸\81à¸\9cูà¹\89à¹\83à¸\8aà¹\89หรือà¹\80ลà¸\82à¸\97ีà¹\88อยูà¹\88ไอพี',
 'ipb-blocklist' => 'ดูการบล็อกปัจจุบัน',
-'ipb-blocklist-contribs' => 'à¸\9cลà¸\87าà¸\99à¸\97ีà¹\88สรà¹\89าà¸\87สรรà¸\84à¹\8cโดย $1',
+'ipb-blocklist-contribs' => 'à¸\9cลà¸\87าà¸\99à¹\80à¸\82ียà¸\99โดย $1',
 'unblockip' => 'ปลดบล็อกผู้ใช้',
-'unblockiptext' => 'à¹\83à¸\8aà¹\89à¹\81à¸\9aà¸\9aà¸\9fอรà¹\8cมà¸\94à¹\89าà¸\99ลà¹\88าà¸\87สำหรัà¸\9aà¸\9aลà¹\87อà¸\81หรือà¹\80ลิà¸\81à¸\9aลà¹\87อà¸\81หมายà¹\80ลà¸\82à¹\84อà¸\9eี à¸«à¸£à¸·à¸­à¸\9cูà¹\89à¹\83à¸\8aà¹\89',
+'unblockiptext' => 'à¹\83à¸\8aà¹\89à¹\81à¸\9aà¸\9aà¸\94à¹\89าà¸\99ลà¹\88าà¸\87สำหรัà¸\9aà¸\84ืà¸\99สิà¸\97à¸\98ิà¸\81ารà¹\80à¸\82à¹\89าà¸\96ึà¸\87à¸\81ารà¹\80à¸\82ียà¸\99à¹\81à¸\81à¹\88à¹\80ลà¸\82à¸\97ีà¹\88อยูà¹\88à¹\84อà¸\9eี à¸«à¸£à¸·à¸­à¸\8aืà¹\88อà¸\9cูà¹\89à¹\83à¸\8aà¹\89à¸\97ีà¹\88à¹\80à¸\84ยà¸\96ูà¸\81à¸\9aลà¹\87อà¸\81',
 'ipusubmit' => 'ยกเลิกการบล็อกนี้',
 'unblocked' => '[[User:$1|$1]] ถูกบล็อก',
 'unblocked-range' => '$1 ถูกปลดบล็อกแล้ว',
 'unblocked-id' => 'เลิกบล็อก $1',
 'blocklist' => 'ผู้ใช้ที่ถูกบล็อก',
 'ipblocklist' => 'ผู้ใช้ที่ถูกบล็อก',
-'ipblocklist-legend' => 'à¸\84à¹\89à¸\99หาà¸\9cูà¹\89à¹\83à¸\8aà¹\89à¸\97ีà¹\88à¸\96ูà¸\81ระà¸\87ัà¸\9aà¸\81ารà¹\83à¸\8aà¹\89à¸\87าà¸\99',
+'ipblocklist-legend' => 'à¸\84à¹\89à¸\99หาà¸\9cูà¹\89à¹\83à¸\8aà¹\89à¸\97ีà¹\88à¸\96ูà¸\81à¸\9aลà¹\87อà¸\81',
 'blocklist-userblocks' => 'ซ่อนบล็อกบัญชี',
 'blocklist-tempblocks' => 'ซ่อนบล็อกชั่วคราว',
 'blocklist-addressblocks' => 'ซ่อนบล็อกไอพีเดียว',
 'blocklist-timestamp' => 'ตราเวลา',
 'blocklist-target' => 'เป้าหมาย',
 'blocklist-expiry' => 'หมดอายุ',
-'blocklist-by' => 'à¸\81ารà¸\9aลà¹\87อà¸\81à¸\9cูà¹\89à¸\94ูà¹\81ลระà¸\9aà¸\9a',
+'blocklist-by' => 'à¸\9cูà¹\89à¸\94ูà¹\81ลระà¸\9aà¸\9aà¸\97ีà¹\88à¸\9aลà¹\87อà¸\81',
 'blocklist-params' => 'พารามิเตอร์การบล็อก',
 'blocklist-reason' => 'เหตุผล',
 'ipblocklist-submit' => 'สืบค้น',
 'ipblocklist-localblock' => 'การสกัดกั้นภายในวิกินี้',
 'ipblocklist-otherblocks' => '{{PLURAL:$1|การสกัดกั้น}}อื่นๆ',
-'infiniteblock' => 'à¸\95ลอà¸\94à¸\81าล',
+'infiniteblock' => 'à¹\84มà¹\88มีà¸\81ำหà¸\99à¸\94',
 'expiringblock' => 'หมดอายุ $1 เวลา $2',
 'anononlyblock' => 'ไม่ล็อกอินเท่านั้น',
 'noautoblockblock' => 'ยกเลิกการบล็อกอัตโนมัติ',
@@ -2399,13 +2447,13 @@ $1',
 'emailblock' => 'บล็อกการส่งอีเมล',
 'blocklist-nousertalk' => 'ไม่สามารถแก้ไขหน้าอภิปรายของตนเอง',
 'ipblocklist-empty' => 'รายการบล็อกว่าง',
-'ipblocklist-no-results' => 'หมายà¹\80ลà¸\82ไอพีหรือชื่อผู้ใช้ที่ต้องการไม่ได้ถูกบล็อก',
+'ipblocklist-no-results' => 'à¹\80ลà¸\82à¸\97ีà¹\88อยูà¹\88ไอพีหรือชื่อผู้ใช้ที่ต้องการไม่ได้ถูกบล็อก',
 'blocklink' => 'บล็อก',
 'unblocklink' => 'เลิกบล็อก',
 'change-blocklink' => 'เปลี่ยนการบล็อก',
 'contribslink' => 'เรื่องที่เขียน',
 'emaillink' => 'ส่งอีเมล',
-'autoblocker' => 'à¸\96ูà¸\81à¸\9aลà¹\87อà¸\81อัà¸\95à¹\82à¸\99มัà¸\95ิà¹\80à¸\99ืà¹\88อà¸\87à¸\88าà¸\81หมายà¹\80ลà¸\82à¹\84อà¸\9eีà¸\82อà¸\87à¸\84ุà¸\93à¸\95รà¸\87à¸\81ัà¸\9a "[[User:$1|$1]]" à¸\96ูà¸\81à¸\9aลà¹\87อà¸\81à¸\81ลà¹\88อà¸\99หà¸\99à¹\89าà¸\99ีà¹\89à¹\80à¸\99ืà¹\88อà¸\87à¸\88าà¸\81สาà¹\80หà¸\95ุ: "$2"',
+'autoblocker' => 'à¸\96ูà¸\81à¸\9aลà¹\87อà¸\81อัà¸\95à¹\82à¸\99มัà¸\95ิà¹\80à¸\99ืà¹\88อà¸\87à¸\88าà¸\81à¹\80ลà¸\82à¸\97ีà¹\88อยูà¹\88à¹\84อà¸\9eีà¸\82อà¸\87à¸\84ุà¸\93ลà¹\88าสุà¸\94à¸\96ูà¸\81à¹\83à¸\8aà¹\89à¹\82à¸\94ย "[[User:$1|$1]]" à¹\80หà¸\95ุà¸\9cลà¸\97ีà¹\88à¹\83หà¹\89à¹\81à¸\81à¹\88à¸\81ารà¸\9aลà¹\87อà¸\81 $1 à¸\84ือ: "$2"',
 'blocklogpage' => 'ปูมการบล็อก',
 'blocklog-showlog' => 'ผู้ใช้นี้ถูกสกัดกั้นมาก่อน
 ปูมการสกัดกั้นแสดงไว้ด้านล่างนี้เพื่อการอ้างอิง:',
@@ -2413,7 +2461,7 @@ $1',
 ปูมการระงับแสดงไว้ด้านล่างนี้เพื่อการอ้างอิง:',
 'blocklogentry' => 'บล็อก "[[$1]]" หมดอายุ $2 $3',
 'reblock-logentry' => 'เปลี่ยนระดับการบล็อกสำหรับ [[$1]] หมดอายุ $2 $3',
-'blocklogtext' => 'à¸\99ีà¹\88à¸\84ือà¸\9aัà¸\99à¸\97ึà¸\81การบล็อกและการเลิกบล็อกผู้ใช้
+'blocklogtext' => 'à¸\99ีà¹\88à¸\84ือà¸\9bูมการบล็อกและการเลิกบล็อกผู้ใช้
 การบล็อกที่อยู่ไอพีโดยอัตโนมัติจะไม่แสดงในรายการ
 ดู[[Special:BlockList|รายการบล็อกไอพี]]สำหรับการบล็อกและการระงับในปัจจุบัน',
 'unblocklogentry' => 'เลิกบล็อก $1',
@@ -2427,24 +2475,24 @@ $1',
 'range_block_disabled' => 'ยกเลิกการบล็อกช่วงไอพีของผู้ดูแลระบบ',
 'ipb_expiry_invalid' => 'ค่าวันหมดอายุไม่ถูกต้อง',
 'ipb_expiry_temp' => 'ผู้ใช้ที่ถูกบล็อกจะซ่อนโดยถาวร',
-'ipb_hide_invalid' => 'à¹\84มà¹\88สามารà¸\96ยัà¸\9aยัà¹\89à¸\87à¸\8aืà¹\88อà¸\9cูà¹\89à¹\83à¸\8aà¹\89à¸\99ีà¹\89à¹\84à¸\94à¹\89 à¹\80à¸\99ืà¹\88อà¸\87à¸\88าà¸\81อาà¸\88à¸\88ะมีการแก้ไขมากเกินไป',
+'ipb_hide_invalid' => 'à¹\84มà¹\88สามารà¸\96ยัà¸\9aยัà¹\89à¸\87à¸\8aืà¹\88อà¸\9cูà¹\89à¹\83à¸\8aà¹\89à¸\99ีà¹\89à¹\84à¸\94à¹\89 à¹\80à¸\9eราะอาà¸\88มีการแก้ไขมากเกินไป',
 'ipb_already_blocked' => '"$1" ถูกบล็อกแล้วก่อนหน้านี้',
 'ipb-needreblock' => '$1 ถูกบล็อกแล้ว คุณต้องการแก้ไขหรือไม่',
-'ipb-otherblocks-header' => '{{PLURAL:$1|à¸\81ารระà¸\87ัà¸\9a|à¸\81ารระà¸\87ัà¸\9a}}อืà¹\88à¸\99ๆ',
+'ipb-otherblocks-header' => '{{PLURAL:$1|à¸\81ารà¸\9aลà¹\87อà¸\81}}อืà¹\88à¸\99 ๆ',
 'unblock-hideuser' => 'คุณไม่สามารถยกเลิกการบล็อคผู้ใช้งานรายนี้ได้, เนื่องจากชื่อผู้ใช้ของผู้ใช้งานถูกซ่อนอยู่',
 'ipb_cant_unblock' => 'ปัญหา: หมายเลขบล็อก $1 ไม่พบ อาจเกิดจากได้ถูกยกเลิกการบล็อกแล้ว',
-'ipb_blocked_as_range' => 'มีà¸\82à¹\89อà¸\9cิà¸\94à¸\9eลาà¸\94: à¸«à¸¡à¸²à¸¢à¹\80ลà¸\82à¹\84อà¸\9eี $1 à¹\84มà¹\88à¹\84à¸\94à¹\89à¸\96ูà¸\81ระà¸\87ัà¸\9aà¹\82à¸\94ยà¸\95รà¸\87à¹\81ละà¹\84มà¹\88สามารà¸\96ยà¸\81à¹\80ลิà¸\81à¸\81ารระà¸\87ัà¸\9aà¹\82à¸\94ยà¸\95รà¸\87à¹\84à¸\94à¹\89.  à¸­à¸¢à¹\88าà¸\87à¹\84รà¸\81à¹\87à¸\95าม à¹\84อà¸\9eีà¸\99ีà¹\89à¸\96ูà¸\81ระà¸\87ัà¸\9aà¹\83à¸\99à¸\90าà¸\99ะà¸\97ีà¹\88à¹\80à¸\9bà¹\87à¸\99สà¹\88วà¸\99หà¸\99ึà¹\88à¸\87à¸\82อà¸\87หมายà¹\80ลà¸\82à¹\84อà¸\9eีà¹\83à¸\99à¸\8aà¹\88วà¸\87 $2 ซึ่งสามารถยกเลิกการระงับได้',
-'ip_range_invalid' => 'à¸\8aà¹\88วà¸\87ไอพีไม่ถูกต้อง',
+'ipb_blocked_as_range' => 'มีà¸\82à¹\89อà¸\9cิà¸\94à¸\9eลาà¸\94: à¹\80ลà¸\82à¸\97ีà¹\88อยูà¹\88à¹\84อà¸\9eี $1 à¹\84มà¹\88à¹\84à¸\94à¹\89à¸\96ูà¸\81ระà¸\87ัà¸\9aà¹\82à¸\94ยà¸\95รà¸\87à¹\81ละà¹\84มà¹\88สามารà¸\96ยà¸\81à¹\80ลิà¸\81à¸\81ารระà¸\87ัà¸\9aà¹\82à¸\94ยà¸\95รà¸\87à¹\84à¸\94à¹\89.  à¸­à¸¢à¹\88าà¸\87à¹\84รà¸\81à¹\87à¸\95าม à¹\84อà¸\9eีà¸\99ีà¹\89à¸\96ูà¸\81ระà¸\87ัà¸\9aà¹\83à¸\99à¸\90าà¸\99ะà¸\97ีà¹\88à¹\80à¸\9bà¹\87à¸\99สà¹\88วà¸\99หà¸\99ึà¹\88à¸\87à¸\82อà¸\87à¹\80ลà¸\82à¸\97ีà¹\88อยูà¹\88à¹\84อà¸\9eีà¹\83à¸\99à¸\9eิสัย $2 ซึ่งสามารถยกเลิกการระงับได้',
+'ip_range_invalid' => 'à¸\9eิสัยไอพีไม่ถูกต้อง',
 'ip_range_toolarge' => 'ขนาดบล็อกมีขนาดใหญ่กว่า / $1 จะไม่ได้รับอนุญาต',
 'blockme' => 'บล็อกฉัน',
 'proxyblocker' => 'บล็อกพร็อกซี',
 'proxyblocker-disabled' => 'ฟังก์ชั่นนี้ไม่สามารถใช้ได้',
-'proxyblockreason' => 'หมายà¹\80ลà¸\82ไอพีของคุณถูกบล็อกเนื่องจากเป็นพร็อกซีเปิด กรุณาติดต่อผู้ให้บริการอินเทอร์เน็ตที่คุณใช้งานอยู่เกี่ยวกับปัญหานี้',
+'proxyblockreason' => 'à¹\80ลà¸\82à¸\97ีà¹\88อยูà¹\88ไอพีของคุณถูกบล็อกเนื่องจากเป็นพร็อกซีเปิด กรุณาติดต่อผู้ให้บริการอินเทอร์เน็ตที่คุณใช้งานอยู่เกี่ยวกับปัญหานี้',
 'proxyblocksuccess' => 'บล็อกสำเร็จ',
-'sorbsreason' => 'หมายà¹\80ลà¸\82ไอพีของคุณอยู่ในพร็อกซีเปิดในส่วน DNSBL ที่ถูกใช้งานในเว็บไซต์',
-'sorbs_create_account_reason' => 'หมายà¹\80ลà¸\82ไอพีของคุณอยู่ในพร็อกซีเปิดในส่วน DNSBL ที่ถูกใช้งานในเว็บไซต์ ดังนั้นคุณไม่สามารถสร้างชื่อบัญชีผู้ใช้ได้',
+'sorbsreason' => 'à¹\80ลà¸\82à¸\97ีà¹\88อยูà¹\88ไอพีของคุณอยู่ในพร็อกซีเปิดในส่วน DNSBL ที่ถูกใช้งานในเว็บไซต์',
+'sorbs_create_account_reason' => 'à¹\80ลà¸\82à¸\97ีà¹\88อยูà¹\88ไอพีของคุณอยู่ในพร็อกซีเปิดในส่วน DNSBL ที่ถูกใช้งานในเว็บไซต์ ดังนั้นคุณไม่สามารถสร้างชื่อบัญชีผู้ใช้ได้',
 'cant-block-while-blocked' => 'คุณไม่สามารถบล็อกผู้ใช้อื่นในขณะที่คุณกำลังถูกบล็อก',
-'cant-see-hidden-user' => 'à¸\9cูà¹\89à¹\83à¸\8aà¹\88à¸\97ีà¹\88à¸\84ุà¸\93à¸\81ำลัà¸\87à¸\9eยายามระà¸\87ัà¸\9aà¸\99ัà¹\89à¸\99à¹\84à¸\94à¹\89à¸\96ูà¸\81ระà¸\87ัà¸\9aหรือà¸\8bà¹\88อà¸\99à¹\80à¸\94ิมอยูà¹\88à¹\81ลà¹\89ว à¹\83à¸\99à¸\82à¸\93ะà¸\97ีà¹\88ีà¸\84ุà¸\93à¹\84มà¹\88มีสิà¸\97à¸\98ิà¹\8cà¹\83à¸\99à¸\81ารà¸\8bà¹\88อà¸\99à¸\9cูà¹\89à¹\83à¸\8aà¹\89 à¸\84ุà¸\93ไม่สามารถดูหรือแก้ไขการระงับผู้ใช้ได้',
+'cant-see-hidden-user' => 'à¸\9cูà¹\89à¹\83à¸\8aà¹\89à¸\97ีà¹\88à¸\84ุà¸\93à¸\81ำลัà¸\87à¸\9eยายามระà¸\87ัà¸\9aà¸\99ัà¹\89à¸\99à¹\84à¸\94à¹\89à¸\96ูà¸\81ระà¸\87ัà¸\9aหรือà¸\8bà¹\88อà¸\99à¹\80à¸\94ิมอยูà¹\88à¹\81ลà¹\89ว à¹\80à¸\99ืà¹\88อà¸\87à¸\88าà¸\81à¸\84ุà¸\93à¹\84มà¹\88มีสิà¸\97à¸\98ิà¸\8bà¹\88อà¸\99à¸\9cูà¹\89à¹\83à¸\8aà¹\89 à¸\84ุà¸\93à¸\88ึà¸\87ไม่สามารถดูหรือแก้ไขการระงับผู้ใช้ได้',
 'ipbblocked' => 'คุณไม่สามารถบล็อกหรือปลดบล็อกผู้ใช้คนอื่น เนื่องจากคุณกำลังถูกบล็อก',
 'ipbnounblockself' => 'คุณไม่ได้รับอนุญาตให้ปลดบล็อกตนเอง',
 
@@ -2457,11 +2505,11 @@ $1',
 'unlockconfirm' => 'ยืนยัน ต้องการปลดล็อกฐานข้อมูล',
 'lockbtn' => 'ล็อกฐานข้อมูล',
 'unlockbtn' => 'ปลดล็อกฐานข้อมูล',
-'locknoconfirm' => 'à¸\84à¹\88าาà¸\95ัวà¹\80ลือà¸\81à¹\84มà¹\88à¹\84à¸\94à¹\89à¸\96ูà¸\81à¹\80ลือà¸\81',
+'locknoconfirm' => 'ค่าตัวเลือกไม่ได้ถูกเลือก',
 'lockdbsuccesssub' => 'ล็อกฐานข้อมูลเรียบร้อย',
 'unlockdbsuccesssub' => 'ปลดล็อกฐานข้อมูลเรียบร้อย',
 'lockdbsuccesstext' => 'ล็อกฐานข้อมูลเรียบร้อย
-<br />อย่าลืมที่จะ [[Special:UnlockDB|ปลดล็อก]] เพื่อให้ใช้งานได้ตามปกติ',
+<br />อย่าลืม[[Special:UnlockDB|ปลดล็อก]]หลังการบำรุงรักษาเสร็จสิ้น',
 'unlockdbsuccesstext' => 'ปลดล็อกฐานข้อมูลเรียบร้อย',
 'lockfilenotwritable' => 'ไม่สามารถล็อกฐานข้อมูลได้ เนื่องจากการเขียนลงฐานข้อมูล การล็อกและการปลดล็อกจำเป็นต้องทำที่เว็บเซิร์ฟเวอร์',
 'databasenotlocked' => 'ฐานข้อมูลไม่ได้ล็อก',
@@ -2469,14 +2517,18 @@ $1',
 # Move page
 'move-page' => 'ย้าย $1',
 'move-page-legend' => 'เปลี่ยนชื่อ',
-'movepagetext' => "ใช้แบบฟอร์มด้านล่างในการเปลี่ยนชื่อหน้า ซึ่งประวัติการแก้ไขของหน้านี้จะถูกย้ายตามไปด้วย
-นอกจากนี้ชื่อของหน้าเดิมจะถูกเปลี่ยนเป็นหน้าเปลี่ยนทาง ซึ่งหน้าที่ลิงก์มายังหน้าเก่าจะลิงก์ต่อมาที่หน้าใหม่ แต่ยังคงที่ชื่อเดิม
-อย่าลืมตรวจสอบหน้าเปลี่ยนทางซ้ำซ้อนที่อาจจะเกิดขึ้น
+'movepagetext' => "การใช้แบบด้านล่างจะเปลี่ยนชื่อหน้า และย้ายประวัติทั้งหมดไปยังชื่อเรื่องใหม่
+ชื่อเรื่องเก่าจะกลายเป็นหน้าเปลี่ยนทางไปยังชื่อเรื่องใหม่
+คุณสามารถปรับให้หน้าเปลี่ยนทางที่ชี้ไปยังชื่อเรื่องเดิมได้อัตโนมัติ
+แต่หากคุณเลือกไม่ทำเช่นนั้น ให้แน่ใจว่าตรวจสอบ[[Special:DoubleRedirects|หน้าเปลี่ยนทางซ้ำซ้อน]]หรือ[[Special:BrokenRedirects|หน้าเปลี่ยนทางที่เสีย]]
+คุณเป็นผู้รับผิดชอบเพื่อให้แน่ใจว่าลิงก์ต่าง ๆ ยังชี้ไปยังที่ที่สมควร
 
-การเปลี่ยนชื่อจะ'''ไม่'''สามารถเปลี่ยนทับชื่อเดิมได้ หากหน้านั้นไม่ใช่หน้าว่างหรือหน้าเปลี่ยนทาง
+โปรดทราบว่าหน้าดังกล่าวจะ'''ไม่'''ถูกย้าย ถ้ามีหน้าที่ใช้ชื่อเรื่องใหม่อยู่แล้ว เว้นแต่เป็นหน้าเปลี่ยนทาง และไม่มีประวัติการแก้ไขในอดีต
+ซึ่งหมายความว่า คุณสามารถเปลี่ยนชื่อหน้ากลับเป็นชื่อเดิมได้หากคุณทำผิดพลาด และคุณไม่สามารถเขียนทับหน้าที่มีอยู่แล้วได้
 
-<b>คำเตือน!</b>
-การเปลี่ยนชื่อจะมีผลอย่างมากกับสถิติของหน้านิยมที่มีคนเข้าดูมาก ให้แน่ใจว่าต้องการเปลี่ยนชื่อในครั้งนี้",
+'''คำเตือน!'''
+สิ่งนี้อาจเป็นการเปลี่ยนแปลงที่รุนแรงและไม่คาดคิดสำหรับหน้าที่เป็นที่นิยม
+โปรดแน่ใจว่าคุณเข้าใจถึงผลลัพธ์นี้ก่อนที่จะดำเนินการต่อไป",
 'movepagetext-noredirectfixer' => "การใช้แบบด้านล่างจะเปลี่ยนชื่อหน้า ซึ่งจะทำให้ประวัติทั้งหมดย้ายไปยังชื่อใหม่
 ชื่อเรื่องเก่าจะกลายเป็นหน้าเปลี่ยนทางไปยังชื่อเรื่องใหม่
 ให้แน่ใจว่า ตรวจสอบ[[Special:DoubleRedirects|หน้าเปลี่ยนทางซ้ำซ้อน]]หรือ[[Special:BrokenRedirects|หน้าเปลี่ยนทางที่เสีย]]
@@ -2488,29 +2540,29 @@ $1',
 '''คำเตือน!'''
 สิ่งนี้อาจเป็นการเปลี่ยนแปลงที่รุนแรงและไม่คาดคิดสำหรับหน้าที่เป็นที่นิยม
 โปรดแน่ใจว่าคุณเข้าใจถึงผลลัพธ์นี้ก่อนที่จะดำเนินการต่อไป",
-'movepagetalktext' => "หà¸\99à¹\89าà¸\9eูà¸\94à¸\84ุยà¸\82อà¸\87หà¸\99à¹\89าà¸\99ีà¹\89à¸\88ะà¸\96ูà¸\81à¹\80à¸\9bลีà¹\88ยà¸\99à¸\8aืà¹\88อà¸\95ามà¹\84à¸\9bà¸\94à¹\89วย '''à¹\80วà¹\89à¸\99à¹\80สียแต่:'''
-*มีหà¸\99à¹\89าà¸\9eูà¸\94à¸\84ุยà¸\97ีà¹\88à¹\84มà¹\88วà¹\88าà¸\87อยูà¹\88à¹\81ลà¹\89วภายà¹\83à¸\95à¹\89à¸\8aืà¹\88อà¹\83หมà¹\88 หรือ
-*à¸\84ุà¸\93à¹\80ลือà¸\81à¹\84มà¹\88à¸\95à¹\89อà¸\87à¸\81ารà¹\80à¸\9bลีà¹\88ยà¸\99à¸\8aืà¹\88อด้านล่าง
+'movepagetalktext' => "หà¸\99à¹\89าà¸\9eูà¸\94à¸\84ุยà¸\82อà¸\87หà¸\99à¹\89าà¸\99ีà¹\89à¸\88ะà¸\96ูà¸\81à¹\80à¸\9bลีà¹\88ยà¸\99à¸\8aืà¹\88อà¸\95ามà¹\84à¸\9bà¹\82à¸\94ยอัà¸\95à¹\82à¸\99มัà¸\95ิ '''à¹\80วà¹\89à¸\99แต่:'''
+*มีหà¸\99à¹\89าà¸\9eูà¸\94à¸\84ุยภายà¹\83à¸\95à¹\89à¸\8aืà¹\88อà¹\83หมà¹\88อยูà¹\88à¹\81ลà¹\89ว หรือ
+*à¸\84ุà¸\93à¹\84มà¹\88à¹\80ลือà¸\81à¸\81ลà¹\88อà¸\87ด้านล่าง
 
¹\83à¸\99à¸\81รà¸\93ีà¸\99ัà¹\89à¸\99 à¸\84ุà¸\93à¸\88ำà¸\95à¹\89อà¸\87ยà¹\89ายหรือรวมหà¸\99à¹\89าà¹\80อà¸\87หาà¸\81à¸\95à¹\89อà¸\87à¸\81าร",
¸«à¸²à¸\81à¹\80à¸\81ิà¸\94à¸\81รà¸\93ีà¹\80หลà¹\88าà¸\99ีà¹\89 à¸\84ุà¸\93à¸\88ะà¸\95à¹\89อà¸\87ยà¹\89ายหรือรวมหà¸\99à¹\89าà¹\80อà¸\87หาà¸\81à¸\95à¹\89อà¸\87à¸\81ารà¹\80à¸\9bลีà¹\88ยà¸\99à¸\8aืà¹\88อà¸\95ามà¹\83à¸\99ภายหลัà¸\87",
 'movearticle' => 'เปลี่ยนชื่อ',
-'moveuserpage-warning' => "'''à¸\84ำà¹\80à¸\95ือà¸\99''' à¸\84ุà¸\93à¸\81ำลัà¸\87à¸\88ะยà¹\89ายหà¸\99à¹\89าà¸\9cูà¹\89à¹\83à¸\8aà¹\89 à¹\82à¸\9bรà¸\94à¸\97ราà¸\9aวà¹\88าหà¸\99à¹\89าà¸\9cูà¹\89à¹\83à¸\8aà¹\89à¹\80à¸\97à¹\88าà¸\99ัà¹\89à¸\99à¸\97ีà¹\88à¸\88ะà¸\96ูà¸\81à¹\80à¸\9bลีà¹\88ยà¸\99à¸\8aืà¹\88อ à¹\81à¸\95à¹\88à¸\9cูà¹\89à¹\83à¸\8aà¹\89à¸\88ะ'''à¹\84มà¹\88'''à¸\96ูà¸\81à¹\80à¸\9bลีà¹\88ยà¸\99à¸\8aืà¹\88อ",
+'moveuserpage-warning' => "'''คำเตือน''' คุณกำลังย้ายหน้าผู้ใช้ โปรดทราบว่าหน้าผู้ใช้เท่านั้นที่จะถูกเปลี่ยนชื่อ แต่ผู้ใช้จะ'''ไม่'''ถูกเปลี่ยนชื่อ",
 'movenologin' => 'ไม่ได้ล็อกอิน',
-'movenologintext' => 'à¸\96à¹\89าà¸\95à¹\89อà¸\87à¸\81ารà¹\80à¸\9bลีà¹\88ยà¸\99à¸\8aืà¹\88อหà¸\99à¹\89าà¸\99ีà¹\89 à¸\95à¹\89อà¸\87ลà¸\87à¸\97ะà¹\80à¸\9aียà¸\99à¹\81ละà¹\83หà¹\89à¸\97ำà¸\81าร[[Special:UserLogin|ล็อกอิน]]',
-'movenotallowed' => 'à¸\84ุà¸\93à¹\84มà¹\88à¹\84à¸\94à¹\89รัà¸\9aอà¸\99ุà¸\8dาà¸\95à¹\83หà¹\89à¸\97ำà¸\81ารยà¹\89ายหà¸\99à¹\89าà¸\95à¹\88าà¸\87 à¹\86',
-'movenotallowedfile' => 'à¸\84ุà¸\93à¹\84มà¹\88มีสิà¸\97à¸\98ิà¸\97ีà¹\88à¸\88ะยà¹\89ายà¹\84à¸\9fลà¹\8c',
-'cant-move-user-page' => 'à¸\84ุà¸\93à¹\84มà¹\88มีสิà¸\97à¸\98ิà¹\83à¸\99à¸\81ารยà¹\89ายหà¸\99à¹\89าà¸\9cูà¹\89à¹\83à¸\8aà¹\89 (à¹\81ยà¸\81à¸\88าà¸\81หà¸\99à¹\89ายà¹\88อย)',
-'cant-move-to-user-page' => 'à¸\84ุà¸\93à¹\84มà¹\88มีสิà¸\97à¸\98ิà¹\83à¸\99à¸\81ารยà¹\89ายหà¸\99à¹\89าà¹\83à¸\94 à¹\86 à¹\84à¸\9bà¹\80à¸\9bà¹\87à¸\99หà¸\99à¹\89าà¸\9cูà¹\89à¹\83à¸\8aà¹\89 (ยà¸\81à¹\80วà¹\89à¸\99หà¸\99à¹\89ายà¹\88อยà¸\82อà¸\87à¸\9cูà¹\89à¹\83à¸\8aà¹\89)',
+'movenologintext' => 'à¸\96à¹\89าà¸\95à¹\89อà¸\87à¸\81ารà¹\80à¸\9bลีà¹\88ยà¸\99à¸\8aืà¹\88อหà¸\99à¹\89าà¸\99ีà¹\89 à¸\95à¹\89อà¸\87à¹\80à¸\9bà¹\87à¸\99à¸\9cูà¹\89à¹\83à¸\8aà¹\89ลà¸\87à¸\97ะà¹\80à¸\9aียà¸\99à¹\81ละ[[Special:UserLogin|ล็อกอิน]]',
+'movenotallowed' => 'à¸\84ุà¸\93à¹\84มà¹\88มีสิà¸\97à¸\98ิà¹\80à¸\9bลีà¹\88ยà¸\99à¸\8aืà¹\88อหà¸\99à¹\89า',
+'movenotallowedfile' => 'คุณไม่มีสิทธิย้ายไฟล์',
+'cant-move-user-page' => 'คุณไม่มีสิทธิย้ายหน้าผู้ใช้ (แยกจากหน้าย่อย)',
+'cant-move-to-user-page' => 'คุณไม่มีสิทธิย้ายหน้าใด ๆ ไปเป็นหน้าผู้ใช้ (ยกเว้นหน้าย่อยของผู้ใช้)',
 'newtitle' => 'ชื่อใหม่',
 'move-watch' => 'เฝ้าดูหน้านี้',
 'movepagebtn' => 'เปลี่ยนชื่อ',
 'pagemovedsub' => 'เปลี่ยนชื่อสำเร็จ',
 'movepage-moved' => '\'\'\'"$1" ถูกเปลี่ยนชื่อเป็น "$2"\'\'\'',
 'movepage-moved-redirect' => 'หน้าเปลี่ยนทางถูกสร้างขึ้น',
-'movepage-moved-noredirect' => 'หà¸\99à¹\89าà¹\80à¸\9bลีà¹\88ยà¸\99à¸\97าà¸\87à¹\84มà¹\88à¹\84à¸\94à¹\89à¸\96ูà¸\81สรà¹\89าà¸\87',
+'movepage-moved-noredirect' => 'à¸\81ารสรà¹\89าà¸\87หà¸\99à¹\89าà¹\80à¸\9bลีà¹\88ยà¸\99à¸\97าà¸\87à¸\96ูà¸\81ระà¸\87ัà¸\9a',
 'articleexists' => 'หน้าที่ต้องการมีอยู่แล้ว หรือชื่อที่เลือกไม่ถูกต้อง กรุณาเลือกชื่อใหม่',
 'cantmove-titleprotected' => 'คุณไม่สามารถเปลี่ยนชื่อหน้าเป็นชื่อนี้ได้ เนื่องจากชื่อใหม่นี้ได้รับการป้องกันไม่ให้สร้างใหม่',
-'talkexists' => "'''à¹\80à¸\9bลีà¹\88ยà¸\99à¸\8aืà¹\88อหà¸\99à¹\89าสำà¹\80รà¹\87à¸\88 à¹\81à¸\95à¹\88หà¸\99à¹\89าà¸\9eูà¸\94à¸\84ุยà¹\84มà¹\88สามารà¸\96à¸\96ูà¸\81à¹\80à¸\9bลีà¹\88ยà¸\99à¸\8aืà¹\88อà¸\84à¹\88à¸\97à¹\84à¸\94à¹\80 à¹\80à¸\99ืà¹\88อà¸\87à¸\88าà¸\81มีหà¸\99à¹\89าà¸\9eูà¸\94à¸\84ุยà¹\83à¸\99à¸\8aืà¹\88อà¹\83หมà¹\88à¹\81ลà¹\89ว à¹\82à¸\9bรà¸\94ยà¹\89ายà¹\80อà¸\87อีà¸\81à¸\84รัà¹\89à¸\87'''",
+'talkexists' => "'''à¹\80à¸\9bลีà¹\88ยà¸\99à¸\8aืà¹\88อหà¸\99à¹\89าสำà¹\80รà¹\87à¸\88 à¹\81à¸\95à¹\88หà¸\99à¹\89าà¸\9eูà¸\94à¸\84ุยà¹\84มà¹\88สามารà¸\96à¸\96ูà¸\81à¹\80à¸\9bลีà¹\88ยà¸\99à¸\8aืà¹\88อà¹\84à¸\94à¹\89 à¹\80à¸\99ืà¹\88อà¸\87à¸\88าà¸\81มีหà¸\99à¹\89าà¸\9eูà¸\94à¸\84ุยà¹\83à¸\99à¸\8aืà¹\88อà¹\83หมà¹\88à¹\81ลà¹\89ว à¹\82à¸\9bรà¸\94รวมà¹\80อà¸\87à¸\94à¹\89วยมือ'''",
 'movedto' => 'เปลี่ยนชื่อเป็น',
 'movetalk' => 'เปลี่ยนชื่อหน้าพูดคุยพร้อมกัน',
 'move-subpages' => 'ย้ายหน้าย่อยทั้งหมด (มากถึง $1 หน้า)',
@@ -2518,21 +2570,21 @@ $1',
 'movepage-page-exists' => 'หน้า $1 มีอยู่แล้วและไม่สามารถเขียนทับได้โดยอัตโนมัติ',
 'movepage-page-moved' => 'หน้า $1 ถูกเปลี่ยนชื่อเป็น $2',
 'movepage-page-unmoved' => 'หน้า $1 ไม่สามารถเปลี่ยนชื่อเป็น $2 ได้',
-'movepage-max-pages' => 'หน้าทั้งหมด $1 {{PLURAL:$1|หน้า|หน้า}} ถูกย้ายไป ซึ่งนับได้ว่าเป็นจำนวนที่มากที่สุดเท่าที่จะทได้ และหยุดการย้ายหน้าอย่างอัตโนมัติแล้ว',
-'movelogpage' => 'à¸\9aัà¸\99à¸\97ึà¸\81การเปลี่ยนชื่อ',
-'movelogpagetext' => 'à¸\94à¹\89าà¸\99ลà¹\88าà¸\87à¹\81สà¸\94à¸\87รายà¸\81าร à¸\81ารà¹\80à¸\9bลีà¹\88ยà¸\99à¸\8aืà¹\88อ',
+'movepage-max-pages' => 'หน้า $1 หน้าถูกย้ายไป ซึ่งมากสุดแล้ว และจะไม่มีหน้าใดย้ายอัตโนมัติเพิ่ม',
+'movelogpage' => 'à¸\9bูมการเปลี่ยนชื่อ',
+'movelogpagetext' => 'à¸\94à¹\89าà¸\99ลà¹\88าà¸\87à¹\80à¸\9bà¹\87à¸\99รายà¸\81ารà¸\81ารà¹\80à¸\9bลีà¹\88ยà¸\99à¸\8aืà¹\88อà¸\97ุà¸\81หà¸\99à¹\89า',
 'movesubpage' => '{{PLURAL:$1|หน้าย่อย|หน้าย่อย}}',
-'movesubpagetext' => 'หà¸\99à¹\89าà¸\99ีà¹\89มีหà¸\99à¹\89ายà¹\88อย $1 à¸«à¸\99à¹\89า à¸\94ัà¸\87à¹\81สà¸\94à¸\87à¸\94à¹\89าà¸\99ลà¹\88าà¸\87',
+'movesubpagetext' => 'หน้านี้มีหน้าย่อย $1 หน้า ดังด้านล่าง',
 'movenosubpage' => 'หน้านี้ไม่มีหน้าย่อย',
 'movereason' => 'เหตุผล:',
 'revertmove' => 'ย้อน',
 'delete_and_move' => 'ลบและย้าย',
-'delete_and_move_text' => '== à¸\88ำà¹\80à¸\9bà¹\87à¸\99à¸\95à¹\89อà¸\87ลบ ==
+'delete_and_move_text' => '== à¸\95à¹\89อà¸\87à¸\81ารลบ ==
 
-à¸\8aืà¹\88อหัวà¸\82à¹\89อà¸\97ีà¹\88à¸\95à¹\89อà¸\87à¸\81าร "[[:$1]]" à¸¡à¸µà¸­à¸¢à¸¹à¹\88à¹\81ลà¹\89ว à¹\81à¸\99à¹\88à¹\83à¸\88หรือà¹\84มà¹\88วà¹\88าà¸\95à¹\89อà¸\87à¸\81ารลà¸\9aà¹\80à¸\9eืà¹\88อà¸\97ีà¹\88à¸\88ะà¹\83หà¹\89à¸\81ารà¹\80à¸\9bลีà¹\88ยà¸\99à¸\8aืà¹\88อสำà¹\80รà¹\87à¸\88',
-'delete_and_move_confirm' => 'ยืà¸\99ยัà¸\99 à¸\95à¹\89อà¸\87à¸\81ารลà¸\9a',
-'delete_and_move_reason' => 'à¸\96ูà¸\81ลà¸\9aสำหรัà¸\9aà¸\81ารà¹\80à¸\9bลีà¹\88ยà¸\99à¸\8aืà¹\88อ',
-'selfmove' => 'à¸\8aืà¹\88อหà¸\99à¹\89าà¹\80à¸\94ิมà¹\81ละหà¸\99à¹\89าà¹\83หมà¹\88à¹\80à¸\9bà¹\87à¸\99à¸\8aืà¹\88อà¹\80à¸\94ียวà¸\81ัà¸\99 à¹\84มà¹\88สามารà¸\96à¹\80à¸\9bลีà¹\88ยà¸\99à¸\8aืà¹\88อได้',
+มีหà¸\99à¹\89าà¸\9bลายà¸\97าà¸\87 "[[:$1]]" à¹\81ลà¹\89ว à¸\84ุà¸\93à¸\95à¹\89อà¸\87à¸\81ารลà¸\9aหà¸\99à¹\89าà¸\99ัà¹\89à¸\99หรือà¹\84มà¹\88à¹\80à¸\9eืà¹\88อà¸\94ำà¹\80à¸\99ิà¸\99à¸\81ารà¸\95à¹\88อ',
+'delete_and_move_confirm' => 'à¹\83à¸\8aà¹\88 à¸¥à¸\9aหà¸\99à¹\89าà¸\99ัà¹\89à¸\99',
+'delete_and_move_reason' => 'à¸\96ูà¸\81ลà¸\9aà¹\80à¸\9eืà¹\88อà¹\80à¸\9bิà¸\94à¸\8aà¹\88อà¸\87à¹\81à¸\81à¹\88à¸\81ารà¹\80à¸\9bลีà¹\88ยà¸\99à¸\8aืà¹\88อà¸\88าà¸\81 "[[$1]]"',
+'selfmove' => 'à¸\8aืà¹\88อหà¸\99à¹\89าà¸\95à¹\89à¸\99à¸\97าà¸\87à¹\81ละà¸\9bลายà¸\97าà¸\87à¹\80à¸\9bà¹\87à¸\99à¸\8aืà¹\88อà¹\80à¸\94ียวà¸\81ัà¸\99 à¹\84มà¹\88สามารà¸\96à¹\80à¸\9bลีà¹\88ยà¸\99à¸\8aืà¹\88อà¹\84à¸\94à¹\89มาà¹\83à¸\8aà¹\89à¸\8aืà¹\88อà¹\80à¸\94ิมได้',
 'immobile-source-namespace' => 'ไม่สามารถเปลี่ยนชื่อหน้าในเนมสเปซ "$1"',
 'immobile-target-namespace' => 'ไม่สามารถย้ายหน้าไปยังเนมสเปซ "$1" ได้',
 'immobile-target-namespace-iw' => 'ไม่สามารถย้ายไปยังหน้าปลายทางที่เป็นลิงก์ interwiki ได้',
@@ -2544,9 +2596,9 @@ $1',
 'imageinvalidfilename' => 'ชื่อไฟล์เป้าหมายไม่ถูกต้อง',
 'fix-double-redirects' => 'อัปเดตหน้าเปลี่ยนทางทุกหน้าที่โอนไปยังชื่อเดิม',
 'move-leave-redirect' => 'สร้างหน้าเปลี่ยนทางตามมา',
-'protectedpagemovewarning' => "'''à¸\84ำà¹\80à¸\95ือà¸\99:''' à¸«à¸\99à¹\89าà¸\99ีà¹\89à¸\96ูà¸\81ลà¹\87อà¸\81 à¹\81ละà¹\80à¸\89à¸\9eาะà¸\9cูà¹\89à¹\83à¸\8aà¹\89à¸\97ีà¹\88มีสิà¸\97à¸\98ิà¸\9cูà¹\89à¸\94ูà¹\81ลระà¸\9aà¸\9aà¹\80à¸\97à¹\88าà¸\99ัà¹\89à¸\99à¸\97ีà¹\88ยà¹\89ายà¹\84à¸\94à¹\89
-à¸\9aัà¸\99à¸\97ึà¸\81การป้องกันล่าสุดถูกแสดงไว้ด้านล่างเพื่อการอ้างอิง:",
-'semiprotectedpagemovewarning' => "'''หมายà¹\80หà¸\95ุ:''' à¸«à¸\99à¹\89าà¸\99ีà¹\89à¸\96ูà¸\81ลà¹\87อà¸\81 à¹\81ละà¹\80à¸\89à¸\9eาะà¸\9cูà¹\89à¹\83à¸\8aà¹\89ลà¸\87à¸\97ะà¹\80à¸\9aียà¸\99à¹\80à¸\97à¹\88าà¸\99ัà¹\89à¸\99à¸\97ีà¹\88ยà¹\89ายà¹\84à¸\94à¹\89
+'protectedpagemovewarning' => "'''คำเตือน:''' หน้านี้ถูกล็อก เฉพาะผู้ใช้ที่มีสิทธิผู้ดูแลระบบเท่านั้นที่ย้ายได้
+à¸\9bูมการป้องกันล่าสุดถูกแสดงไว้ด้านล่างเพื่อการอ้างอิง:",
+'semiprotectedpagemovewarning' => "'''หมายเหตุ:''' หน้านี้ถูกล็อก เฉพาะผู้ใช้ลงทะเบียนเท่านั้นที่ย้ายได้
 รายการปูมล่าสุดได้ถูกแสดงไว้ด้านล่างนี้เพื่อการอ้างอิง:",
 'move-over-sharedrepo' => '== มีไฟล์เดิมปรากฏ ==
 ไฟล์ [[:$1]] มีปรากฏเดิมอยู่แล้วในคลังเก็บภาพส่วนกลาง การย้ายไฟล์ที่มีชื่อเรื่องนี้อาจจะเป็นการเขียนทับไฟล์เดิมในคลังเก็บได้',
@@ -2555,9 +2607,9 @@ $1',
 
 # Export
 'export' => 'ส่งออกหน้า',
-'exporttext' => 'คุณสามารถส่งออก (export) ข้อความต้นฉบับและประวัติการแก้ไขของหน้าใดๆ มากกว่าหนึ่งหน้าในคราวเดียว ออกมาในรูปแบบ XML ซึ่งสามารถนำไปใส่เข้าไว้ในเว็บไซต์วิกิแห่งอื่นที่ใช้ซอฟต์แวร์มีเดียวิกิได้ ผ่านทางคำสั่ง[[Special:Import|การนำเข้าหน้า]]
+'exporttext' => 'คุณสามารถส่งออกข้อความและประวัติการแก้ไขของหน้าใด ๆ หรือชุดหน้าในคราวเดียว ออกมาในรูปแบบ XML ซึ่งสามารถนำไปใส่เข้าไว้ในวิกิแห่งอื่นที่ใช้ซอฟต์แวร์มีเดียวิกิได้ ผ่านคำสั่ง[[Special:Import|การนำเข้าหน้า]]
 
-à¸\81ารà¸\88ะสà¹\88à¸\87ออà¸\81หà¸\99à¹\89าà¸\99ัà¹\89à¸\99สามารà¸\96à¸\97ำà¹\84à¸\94à¹\89à¹\82à¸\94ยà¹\83สà¹\88à¸\8aืà¹\88อหัวà¹\80รืà¹\88อà¸\87à¸\82อà¸\87หà¸\99à¹\89าà¸\97ีà¹\88à¸\95à¹\89อà¸\87à¸\81าร à¸¥à¸\87à¹\83à¸\99à¸\81ลà¹\88อà¸\87à¸\82à¹\89อà¸\84วามà¸\94à¹\89าà¸\99ลà¹\88าà¸\87 à¸«à¸\99ึà¹\88à¸\87à¸\8aืà¹\88อà¸\95à¹\88อหà¸\99ึà¹\88à¸\87à¸\9aรรà¸\97ัà¸\94 à¸\88าà¸\81à¸\99ัà¹\89à¸\99à¹\80ลือà¸\81วà¹\88าà¸\95à¹\89อà¸\87à¸\81ารà¸\97ัà¹\89à¸\87รุà¹\88à¸\99à¸\9bัà¸\88à¸\88ุà¸\9aัà¸\99à¹\81ละรุà¹\88à¸\99à¹\80à¸\81à¹\88าà¹\86 à¸\97ัà¹\89à¸\87หมà¸\94à¸\9eรà¹\89อมà¸\81ัà¸\9aà¸\9bระวัà¸\95ิà¸\82อà¸\87หà¸\99à¹\89าà¸\99ัà¹\89à¸\99 à¸«à¸£à¸·à¸­à¸\95à¹\89อà¸\87à¸\81ารà¹\80à¸\9eียà¸\87à¹\81à¸\95à¹\88à¹\80à¸\99ืà¹\89อหารุà¹\88à¸\99à¸\9bัà¸\88à¸\88ุà¸\9aัà¸\99à¸\9eรà¹\89อมà¸\81ัà¸\9aรายละà¹\80อียà¸\94à¸\82อà¸\87รุà¹\88à¸\99à¸\99ัà¹\89à¸\99เท่านั้น
+à¸\81ารà¸\88ะสà¹\88à¸\87ออà¸\81หà¸\99à¹\89าà¸\99ัà¹\89à¸\99สามารà¸\96à¸\97ำà¹\84à¸\94à¹\89à¹\82à¸\94ยà¹\83สà¹\88à¸\8aืà¹\88อà¹\80รืà¹\88อà¸\87หà¸\99à¹\89าà¸\97ีà¹\88à¸\95à¹\89อà¸\87à¸\81าร à¸¥à¸\87à¹\83à¸\99à¸\81ลà¹\88อà¸\87à¸\82à¹\89อà¸\84วามà¸\94à¹\89าà¸\99ลà¹\88าà¸\87 à¸«à¸\99ึà¹\88à¸\87à¸\8aืà¹\88อà¸\95à¹\88อหà¸\99ึà¹\88à¸\87à¸\9aรรà¸\97ัà¸\94 à¸\88าà¸\81à¸\99ัà¹\89à¸\99à¹\80ลือà¸\81วà¹\88าà¸\95à¹\89อà¸\87à¸\81ารà¸\97ัà¹\89à¸\87รุà¹\88à¸\99à¸\9bัà¸\88à¸\88ุà¸\9aัà¸\99à¹\81ละรุà¹\88à¸\99à¹\80à¸\81à¹\88าà¸\97ัà¹\89à¸\87หมà¸\94à¸\9eรà¹\89อมà¸\81ัà¸\9aà¸\9bระวัà¸\95ิà¸\82อà¸\87หà¸\99à¹\89าà¸\99ัà¹\89à¸\99 à¸«à¸£à¸·à¸­à¸\95à¹\89อà¸\87à¸\81ารà¹\80à¸\9eียà¸\87à¹\80à¸\99ืà¹\89อหารุà¹\88à¸\99à¸\9bัà¸\88à¸\88ุà¸\9aัà¸\99à¸\9eรà¹\89อมà¸\81ัà¸\9aสารสà¸\99à¹\80à¸\97ศà¸\82อà¸\87à¸\81ารà¹\81à¸\81à¹\89à¹\84à¸\82à¸\84รัà¹\89à¸\87สุà¸\94à¸\97à¹\89ายเท่านั้น
 
 ในกรณีที่ต้องการเฉพาะรุ่นปัจจุบัน คุณสามารถใช้ในรูปแบบของลิงก์ เช่น [[{{#Special:Export}}/{{MediaWiki:Mainpage}}]] สำหรับหน้า "[[{{MediaWiki:Mainpage}}]]"',
 'exportall' => 'ส่งออกข้อมูลทุกหน้า',
@@ -2586,7 +2638,7 @@ $1',
 'allmessages-filter-unmodified' => 'ไม่มีการแก้ไข',
 'allmessages-filter-all' => 'ทั้งหมด',
 'allmessages-filter-modified' => 'มีการแก้ไข',
-'allmessages-prefix' => 'à¸\81รอà¸\87à¸\94à¹\89วยà¸\84ำà¸\82à¹\89าà¸\87หà¸\99à¹\89า:',
+'allmessages-prefix' => 'à¸\81รอà¸\87à¸\94à¹\89วยà¸\84ำà¸\82ึà¹\89à¸\99à¸\95à¹\89à¸\99:',
 'allmessages-language' => 'ภาษา:',
 'allmessages-filter-submit' => 'ไป',
 
@@ -2600,13 +2652,13 @@ $1',
 'thumbnail_dest_directory' => 'ไม่สามารถสร้างไดเรกทอรีภาพได้',
 'thumbnail_image-type' => 'ไม่รองรับรูปแบบของไฟล์รูปภาพนี้',
 'thumbnail_gd-library' => 'การตั้งค่าไลบรารี GD ไม่สมบูรณ์: ไม่พบฟังก์ชัน $1',
-'thumbnail_image-missing' => 'à¸\94ูà¹\80หมือà¸\99วà¹\88าà¹\84à¸\9fลà¹\8cจะหายไป: $1',
+'thumbnail_image-missing' => 'à¹\84à¸\9fลà¹\8cà¸\97ีà¹\88à¹\80หมือà¸\99จะหายไป: $1',
 
 # Special:Import
 'import' => 'หน้านำเข้า',
 'importinterwiki' => 'นำเข้าข้ามวิกิ',
-'import-interwiki-text' => 'à¹\80ลือà¸\81วิà¸\81ิà¹\81ละà¸\8aืà¹\88อหัวà¸\82à¹\89อà¸\97ีà¹\88à¸\95à¹\89อà¸\87à¸\81ารà¸\99ำà¹\80à¸\82à¹\89า à¸§à¸±à¸\99à¸\97ีà¹\88à¹\81ละà¸\8aืà¹\88อà¸\9cูà¹\89à¹\81à¸\81à¹\89à¹\84à¸\82à¸\97ัà¹\89à¸\87หมà¸\94à¸\88ะà¸\96ูà¸\81à¹\80à¸\81à¹\87à¸\9aà¹\84วà¹\89 à¹\82à¸\94ยà¸\81ารà¸\99ำà¹\80à¸\82à¹\89าà¸\97ุà¸\81สà¹\88วà¸\99à¸\88ะà¸\96ูà¸\81à¹\80à¸\81à¹\87à¸\9aà¹\84วà¹\89à¹\83à¸\99 [[Special:Log/import|à¸\9aัà¸\99à¸\97ึà¸\81การนำเข้า]]',
-'import-interwiki-source' => 'หน้า/วิกิ ต้นฉบับ:',
+'import-interwiki-text' => 'à¹\80ลือà¸\81วิà¸\81ิà¹\81ละà¸\8aืà¹\88อหัวà¸\82à¹\89อà¸\97ีà¹\88à¸\95à¹\89อà¸\87à¸\81ารà¸\99ำà¹\80à¸\82à¹\89า à¸§à¸±à¸\99à¸\97ีà¹\88à¹\81ละà¸\8aืà¹\88อà¸\9cูà¹\89à¹\80à¸\82ียà¸\99à¸\97ัà¹\89à¸\87หมà¸\94à¸\88ะà¸\96ูà¸\81à¹\80à¸\81à¹\87à¸\9aà¹\84วà¹\89 à¹\82à¸\94ยà¸\81ารà¸\99ำà¹\80à¸\82à¹\89าà¸\97ุà¸\81สà¹\88วà¸\99à¸\88ะà¸\96ูà¸\81à¹\80à¸\81à¹\87à¸\9aà¹\84วà¹\89à¹\83à¸\99 [[Special:Log/import|à¸\9bูมการนำเข้า]]',
+'import-interwiki-source' => 'หน้า/วิกิต้นทาง:',
 'import-interwiki-history' => 'คัดลอกประวัติทั้งหมดในหน้านี้',
 'import-interwiki-templates' => 'รวมแม่แบบทั้งหมด',
 'import-interwiki-submit' => 'นำเข้า',
@@ -2616,16 +2668,16 @@ $1',
 'importtext' => 'กรุณาส่งออกไฟล์จากวิกิต้นทางโดยใช้[[Special:Export|เครื่องมือส่งออก]]
 บันทึกลงคอมพิวเตอร์ของคุณ และอัปโหลดที่นี่',
 'importstart' => 'กำลังนำเข้าหน้า...',
-'import-revision-count' => '$1 {{PLURAL:$1|รุ่นการแก้ไข|รุ่นการแก้ไข}}',
+'import-revision-count' => '$1 รุ่นการแก้ไข',
 'importnopages' => 'ไม่มีหน้าให้นำเข้า',
-'imported-log-entries' => 'นำ $1 {{PLURAL:$1| เข้าระบบ | รายการบันทึก}}',
+'imported-log-entries' => 'นำเข้า $1 รายการปูม',
 'importfailed' => 'การนำเข้าไม่สำเร็จ: <nowiki>$1</nowiki>',
 'importunknownsource' => 'ไม่ทราบชนิดของไฟล์นำเข้า',
 'importcantopen' => 'ไม่สามารถเปิดไฟล์นำเข้าได้',
-'importbadinterwiki' => 'ลิà¸\87à¸\81à¹\8cà¹\80à¸\8aืà¹\88อมà¹\82ยà¸\87à¸\82à¹\89ามภาษาà¹\80สีย',
+'importbadinterwiki' => 'ลิงก์ข้ามภาษาเสีย',
 'importnotext' => 'ไฟล์ว่างหรือไฟล์ไม่มีข้อความ',
 'importsuccess' => 'นำเข้าไฟล์สำเร็จ!',
-'importhistoryconflict' => 'à¸\9bระวัà¸\95ิหà¸\99à¹\89าà¸\82ัà¸\94à¹\81ยà¹\89à¸\87à¸\81ัà¸\99 (à¸\8bึà¹\88à¸\87อาจเคยนำเข้าหน้านี้มาก่อน)',
+'importhistoryconflict' => 'มีà¸\9bระวัà¸\95ิรุà¹\88à¸\99à¸\82ัà¸\94à¹\81ยà¹\89à¸\87à¸\81ัà¸\99 (อาจเคยนำเข้าหน้านี้มาก่อน)',
 'importnosources' => 'ไม่มีการกำหนดแหล่งนำเข้าข้ามวิกิ และการอัปโหลดประวัติหน้าโดยตรงถูกปิดการใช้งาน',
 'importnofile' => 'ไฟล์นำเข้าไม่ได้ถูกอัปโหลด',
 'importuploaderrorsize' => 'อัปโหลดไฟล์ข้อมูลนำเข้าไม่สำเร็จ
@@ -2644,7 +2696,7 @@ $1',
 'import-error-create' => 'หน้า "$1" ยังไม่ได้ถูกนำเข้า เนื่องจากคุณไม่ได้รับอนุญาตให้สามารถสร้างได้',
 
 # Import log
-'importlogpage' => 'à¸\9aัà¸\99à¸\97ึà¸\81การนำเข้า',
+'importlogpage' => 'à¸\9bูมการนำเข้า',
 'importlogpagetext' => 'นำเข้าไฟล์จากวิกิอื่น โดยผ่านทางผู้ดูแลระบบ',
 'import-logentry-upload' => 'นำเข้า [[$1]] ผ่านการอัปโหลดแล้ว',
 'import-logentry-upload-detail' => '$1 {{PLURAL:$1|รุ่นการแก้ไข|รุ่นการแก้ไข}}',
@@ -2673,14 +2725,14 @@ $1',
 'tooltip-ca-protect' => 'ล็อกหน้านี้',
 'tooltip-ca-unprotect' => 'เปลี่ยนแปลงการป้องกันหน้านี้',
 'tooltip-ca-delete' => 'ลบหน้านี้',
-'tooltip-ca-undelete' => 'à¹\80รียà¸\81คืนการแก้ไขหน้านี้กลับมาเป็นรุ่นก่อนที่ถูกลบ',
+'tooltip-ca-undelete' => 'à¸\81ูà¹\89คืนการแก้ไขหน้านี้กลับมาเป็นรุ่นก่อนที่ถูกลบ',
 'tooltip-ca-move' => 'เปลี่ยนชื่อหน้านี้',
 'tooltip-ca-watch' => 'เพิ่มหน้านี้เข้ารายการเฝ้าดู',
 'tooltip-ca-unwatch' => 'นำหน้านี้ออกจากรายการเฝ้าดู',
 'tooltip-search' => 'ค้นหา {{SITENAME}}',
 'tooltip-search-go' => 'ตรงไปยังหน้าที่ตรงกับชื่อนี้ (ถ้ามี)',
 'tooltip-search-fulltext' => 'ค้นหาหน้าที่มีข้อความนี้',
-'tooltip-p-logo' => 'หน้าหลัก',
+'tooltip-p-logo' => 'à¹\80à¸\82à¹\89าสูà¹\88หà¸\99à¹\89าหลัà¸\81',
 'tooltip-n-mainpage' => 'เข้าสู่หน้าหลัก',
 'tooltip-n-mainpage-description' => 'เข้าสู่หน้าหลัก',
 'tooltip-n-portal' => 'เกี่ยวกับโครงการ สิ่งที่คุณทำได้ วิธีการค้นหา',
@@ -2688,36 +2740,37 @@ $1',
 'tooltip-n-recentchanges' => 'รายการปรับปรุงล่าสุดในวิกินี้',
 'tooltip-n-randompage' => 'สุ่มหน้าขึ้นมา',
 'tooltip-n-help' => 'อธิบายการใช้งาน',
-'tooltip-t-whatlinkshere' => 'รายการหน้าวิกิที่ลิงก์มาที่นี่',
+'tooltip-t-whatlinkshere' => 'รายà¸\81ารà¸\97ุà¸\81หà¸\99à¹\89าวิà¸\81ิà¸\97ีà¹\88ลิà¸\87à¸\81à¹\8cมาà¸\97ีà¹\88à¸\99ีà¹\88',
 'tooltip-t-recentchangeslinked' => 'รายการปรับปรุงล่าสุดในหน้าที่ลิงก์จากหน้านี้',
 'tooltip-feed-rss' => 'ฟีดชนิดอาร์เอสเอส (RSS) ของหน้านี้',
-'tooltip-feed-atom' => 'à¸\9fีà¸\94à¸\8aà¸\99ิà¸\94อะà¸\95อม (Atom) à¸\82อà¸\87หà¸\99à¹\89าà¸\99ีà¹\89',
-'tooltip-t-contributions' => 'à¸\94ูหà¸\99à¹\89าà¸\97ีà¹\88à¸\9cูà¹\89à¹\83à¸\8aà¹\89à¸\84à¸\99à¸\99ีà¹\89à¹\80à¸\82ียà¸\99',
+'tooltip-feed-atom' => 'ฟีดอะตอม (Atom) ของหน้านี้',
+'tooltip-t-contributions' => 'รายà¸\81ารà¹\80รืà¹\88อà¸\87à¸\97ีà¹\88à¹\80à¸\82ียà¸\99à¹\82à¸\94ยà¸\9cูà¹\89à¹\83à¸\8aà¹\89à¸\84à¸\99à¸\99ีà¹\89',
 'tooltip-t-emailuser' => 'ส่งอีเมลถึงผู้ใช้นี้',
-'tooltip-t-upload' => 'อัà¸\9bà¹\82หลà¸\94ภาà¸\9eหรือà¹\84à¸\9fลà¹\8c',
-'tooltip-t-specialpages' => 'à¹\81สà¸\94à¸\87รายà¸\81ารหà¸\99à¹\89าà¸\9eิà¹\80ศษ',
-'tooltip-t-print' => 'หà¸\99à¹\89าà¸\97ีà¹\88à¹\81สà¸\94à¸\87à¸\9cลà¸\9eรà¹\89อมสำหรัà¸\9aà¸\9eิมà¸\9eà¹\8cออà¸\81มา',
+'tooltip-t-upload' => 'อัปโหลดไฟล์',
+'tooltip-t-specialpages' => 'รายà¸\81ารหà¸\99à¹\89าà¸\9eิà¹\80ศษà¸\97ัà¹\89à¸\87หมà¸\94',
+'tooltip-t-print' => 'รุà¹\88à¸\99à¸\97ีà¹\88à¸\9eรà¹\89อมà¸\9eิมà¸\9eà¹\8cà¸\82อà¸\87หà¸\99à¹\89าà¸\99ีà¹\89',
 'tooltip-t-permalink' => 'ลิงก์ถาวรมาที่เฉพาะรุ่นนี้ของหน้า',
 'tooltip-ca-nstab-main' => 'ดูหน้าเนื้อหา',
 'tooltip-ca-nstab-user' => 'ดูหน้าผู้ใช้',
 'tooltip-ca-nstab-media' => 'ดูหน้าสื่อ ภาพ เพลง',
-'tooltip-ca-nstab-special' => 'à¹\84มà¹\88สามารà¸\96à¹\81à¸\81à¹\89à¹\84à¸\82หà¸\99à¹\89าà¸\99ีà¹\89à¹\84à¸\94à¹\89 à¸«à¸\99à¹\89าà¸\99ีà¹\89à¹\80à¸\9bà¹\87à¸\99หà¸\99à¹\89าà¸\9eิà¹\80ศษ',
+'tooltip-ca-nstab-special' => 'หà¸\99à¹\89าà¸\99ีà¹\89à¹\80à¸\9bà¹\87à¸\99หà¸\99à¹\89าà¸\9eิà¹\80ศษ à¸\84ุà¸\93à¹\84มà¹\88สามารà¸\96à¹\81à¸\81à¹\89à¹\84à¸\82à¹\84à¸\94à¹\89',
 'tooltip-ca-nstab-project' => 'ดูหน้าโครงการ',
-'tooltip-ca-nstab-image' => 'ดูหน้าภาพ',
+'tooltip-ca-nstab-image' => 'ดูหน้าภาพไฟล์',
 'tooltip-ca-nstab-mediawiki' => 'ดูข้อความระบบ',
 'tooltip-ca-nstab-template' => 'ดูหน้าแม่แบบ',
-'tooltip-ca-nstab-help' => 'à¸\94ูหà¸\99à¹\89าวิà¸\98ีà¹\83à¸\8aà¹\89',
+'tooltip-ca-nstab-help' => 'à¸\94ูหà¸\99à¹\89าà¸\84ำอà¸\98ิà¸\9aาย',
 'tooltip-ca-nstab-category' => 'ดูหน้าหมวดหมู่',
 'tooltip-minoredit' => 'กำหนดเป็นการแก้ไขเล็กน้อย',
 'tooltip-save' => 'บันทึกการแก้ไข',
-'tooltip-preview' => 'à¹\81สà¸\94à¸\87à¸\95ัวอยà¹\88าà¸\87à¸\81ารà¹\80à¸\9bลีà¹\88ยà¸\99à¹\81à¸\9bลà¸\87à¸\97ีà¹\88à¹\80à¸\81ิà¸\94à¸\82ึà¹\89à¸\99 à¸\81รุà¸\93าà¹\83à¸\8aà¹\89à¸\84ำสัà¹\88à¸\87à¸\99ีà¹\89à¸\81à¹\88อà¸\99à¸\97ำà¸\81ารบันทึก!',
+'tooltip-preview' => 'à¹\81สà¸\94à¸\87à¸\95ัวอยà¹\88าà¸\87à¸\81ารà¹\80à¸\9bลีà¹\88ยà¸\99à¹\81à¸\9bลà¸\87à¸\82อà¸\87à¸\84ุà¸\93 à¸\81รุà¸\93าà¹\83à¸\8aà¹\89à¸\84ำสัà¹\88à¸\87à¸\99ีà¹\89à¸\81à¹\88อà¸\99บันทึก!',
 'tooltip-diff' => 'แสดงการเปลี่ยนการต่อข้อความ',
-'tooltip-compareselectedversions' => 'à¹\81สà¸\94à¸\87à¸\84วามà¹\81à¸\95à¸\81à¸\95à¹\88าà¸\87à¸\82อà¸\87รุà¹\88à¸\99สอà¸\87รุà¹\88à¸\99à¸\97ีà¹\88à¹\80ลือà¸\81',
+'tooltip-compareselectedversions' => 'à¹\81สà¸\94à¸\87à¸\84วามà¹\81à¸\95à¸\81à¸\95à¹\88าà¸\87ระหวà¹\88าà¸\87สอà¸\87รุà¹\88à¸\99à¸\97ีà¹\88à¹\80ลือà¸\81à¸\82อà¸\87หà¸\99à¹\89าà¸\99ีà¹\89',
 'tooltip-watch' => 'เพิ่มหน้านี้เข้ารายการเฝ้าดู',
+'tooltip-watchlistedit-normal-submit' => 'นำชื่อเรื่องออก',
 'tooltip-watchlistedit-raw-submit' => 'อัพเดทรายการเฝ้าดู',
-'tooltip-recreate' => 'สรà¹\89าà¸\87หà¸\99à¹\89าà¸\99ีà¹\89อีà¸\81à¸\84รัà¹\89à¸\87à¹\81มà¹\89วà¹\88าà¸\88ะถูกลบ',
+'tooltip-recreate' => 'สรà¹\89าà¸\87หà¸\99à¹\89าà¸\99ีà¹\89อีà¸\81à¸\84รัà¹\89à¸\87à¹\81มà¹\89à¹\80à¸\84ยถูกลบ',
 'tooltip-upload' => 'เริ่มอัปโหลด',
-'tooltip-rollback' => '"ยà¹\89อà¸\99à¸\81ลัà¸\9aà¸\89ุà¸\81à¹\80à¸\89ิà¸\99" à¹\83à¸\8aà¹\89ยà¹\89อà¸\99à¸\81ารà¹\81à¸\81à¹\89à¹\84à¸\82à¹\83à¸\99หà¸\99à¹\89าà¸\99ีà¹\89à¹\84à¸\9bยัà¸\87รุà¹\88à¸\99à¹\82à¸\94ยà¸\9cูà¹\89à¹\83à¸\8aà¹\89à¸\84à¸\99à¸\81à¹\88อà¸\99ในคลิกเดียว',
+'tooltip-rollback' => '"ยà¹\89อà¸\99à¸\81ลัà¸\9aà¸\89ุà¸\81à¹\80à¸\89ิà¸\99" à¹\83à¸\8aà¹\89ยà¹\89อà¸\99à¸\81ารà¹\81à¸\81à¹\89à¹\84à¸\82à¹\83à¸\99หà¸\99à¹\89าà¸\99ีà¹\89à¸\82อà¸\87à¸\9cูà¹\89à¹\80à¸\82ียà¸\99à¸\84à¸\99ลà¹\88าสุà¸\94ในคลิกเดียว',
 'tooltip-undo' => '"ย้อน" ใช้ย้อนการแก้ไขครั้งนี้และเปิดแบบแก้ไข สามารถเพิ่มคำอธิบายในตอนท้าย',
 'tooltip-preferences-save' => 'บันทึกการตั้งค่า',
 'tooltip-summary' => 'ใส่คำอธิบายอย่างย่อสั้น ๆ',
@@ -2782,10 +2835,41 @@ $1',
 
 # Info page
 'pageinfo-title' => 'ข้อมูลสำหรับ "$1"',
-'pageinfo-header-edits' => 'การแก้ไข',
+'pageinfo-not-current' => 'ขออภัย ไม่สามารถให้ข้อมูลนี้สำหรับรุ่นเก่าได้',
+'pageinfo-header-basic' => 'ข้อมูลเบื้องต้น',
+'pageinfo-header-edits' => 'ประวัติการแก้ไข',
+'pageinfo-header-restrictions' => 'การล็อกหน้า',
+'pageinfo-header-properties' => 'คุณสมบัติหน้า',
+'pageinfo-display-title' => 'แสดงชื่อ',
+'pageinfo-default-sort' => 'หลักการเรียงลำดับโดยปริยาย',
+'pageinfo-length' => 'ความยาวหน้า (ไบต์)',
+'pageinfo-article-id' => 'หมายเลขประจำหน้า',
+'pageinfo-language' => 'ภาษาเนื้อหาของหน้า',
+'pageinfo-robot-policy' => 'สถานะเสิร์ชเอนจิน',
 'pageinfo-views' => 'จำนวนการเข้าดู',
-'pageinfo-watchers' => 'จำนวนผู้เข้าดู',
-'pageinfo-edits' => 'จำนวนการแก้ไข',
+'pageinfo-watchers' => 'จำนวนผู้เข้าดูหน้า',
+'pageinfo-redirects-name' => 'หน้าเปลี่ยนทางมายังหน้านี้',
+'pageinfo-subpages-name' => 'หน้าย่อยของหน้านี้',
+'pageinfo-subpages-value' => '$1 ($2 หน้าเปลี่ยนทาง; $3 หน้าไม่เปลี่ยนทาง)',
+'pageinfo-firstuser' => 'ผู้สร้างหน้า',
+'pageinfo-firsttime' => 'วันที่สร้างหน้า',
+'pageinfo-lastuser' => 'ผู้เขียนคนล่าสุด',
+'pageinfo-lasttime' => 'วันที่แก้ไขล่าสุด',
+'pageinfo-edits' => 'จำนวนการแก้ไขรวม',
+'pageinfo-authors' => 'จำนวนผู้เขียนทั้งหมด',
+'pageinfo-recent-edits' => 'การแก้ไขล่าสุด (ภายใน $1ที่ผ่านมา)',
+'pageinfo-recent-authors' => 'จำนวนผู้เขียนล่าสุด',
+'pageinfo-hidden-categories' => 'หมวดหมู่ที่ซ่อนอยู่ ($1)',
+'pageinfo-templates' => 'แม่แบบที่ใช้ ($1)',
+'pageinfo-toolboxlink' => 'ข้อมูลหน้า',
+'pageinfo-redirectsto' => 'เปลี่ยนทางไปยัง',
+'pageinfo-contentpage' => 'นับเป็นหน้าเนื้อหา',
+'pageinfo-contentpage-yes' => 'ใช่',
+'pageinfo-protect-cascading-yes' => 'ใช่',
+'pageinfo-category-info' => 'ข้อมูลหมวดหมู่',
+'pageinfo-category-pages' => 'จำนวนหน้า',
+'pageinfo-category-subcats' => 'จำนวนหมวดหมู่ย่อย',
+'pageinfo-category-files' => 'จำนวนไฟล์',
 
 # Skin names
 'skinname-standard' => 'คลาสสิก',
@@ -2800,7 +2884,7 @@ $1',
 
 # Patrolling
 'markaspatrolleddiff' => 'ทำเครื่องหมายว่าตรวจสอบแล้ว',
-'markaspatrolledtext' => 'à¸\81ำหà¸\99à¸\94วà¹\88าà¸\9aà¸\97à¸\84วามนี้ถูกตรวจสอบแล้ว',
+'markaspatrolledtext' => 'à¸\97ำà¹\80à¸\84รืà¹\88อà¸\87หมายวà¹\88าหà¸\99à¹\89านี้ถูกตรวจสอบแล้ว',
 'markedaspatrolled' => 'ตรวจสอบแล้ว',
 'markedaspatrolledtext' => 'รุ่นการแก้ไขของ[[:$1]]ถูกกำหนดว่าตรวจสอบแล้ว',
 'rcpatroldisabled' => 'การตรวจสอบหน้าปรับปรุงล่าสุดปิดใช้งาน',
@@ -2810,19 +2894,19 @@ $1',
 'markedaspatrollederror-noautopatrol' => 'คุณไม่สามารถทำเครื่องหมายการแก้ไขของคุณเองว่าตรวจสอบแล้ว',
 
 # Patrol log
-'patrol-log-page' => 'à¸\9aัà¸\99à¸\97ึà¸\81การตรวจสอบ',
-'patrol-log-header' => 'หà¸\99à¹\89าà¸\99ีà¹\89à¸\84ือà¸\9aัà¸\99à¸\97ึà¸\81รุ่นการแก้ไขที่กำหนดว่าตรวจสอบแล้ว',
-'log-show-hide-patrol' => '$1 à¸\9aัà¸\99à¸\97ึà¸\81à¸\81ารà¸\95รวà¸\88à¸\95รา',
+'patrol-log-page' => 'à¸\9bูมการตรวจสอบ',
+'patrol-log-header' => 'หà¸\99à¹\89าà¸\99ีà¹\89à¸\84ือà¸\9bูมรุ่นการแก้ไขที่กำหนดว่าตรวจสอบแล้ว',
+'log-show-hide-patrol' => '$1 à¸\9bูมà¸\81ารà¸\95รวà¸\88สอà¸\9a',
 
 # Image deletion
 'deletedrevision' => 'รุ่นเก่าที่ถูกลบ $1',
 'filedeleteerror-short' => 'เกิดปัญหาการลบไฟล์: $1',
-'filedeleteerror-long' => 'à¹\80à¸\81ิà¸\94à¸\9bัà¸\8dหาà¸\82à¸\93ะà¸\97ีà¹\88à¸\97ำà¸\81ารลบไฟล์:
+'filedeleteerror-long' => 'à¹\80à¸\81ิà¸\94à¸\82à¹\89อà¸\9cิà¸\94à¸\9eลาà¸\94à¸\82à¸\93ะลบไฟล์:
 
 $1',
 'filedelete-missing' => 'ไม่สามารถลบไฟล์ "$1" ได้ เนื่องจากไม่มีไฟล์ชื่อนี้อยู่',
-'filedelete-old-unregistered' => 'à¹\84à¸\9fลà¹\8cà¸\97ีà¹\88ระà¸\9aุรุà¹\88à¸\99 "$1" à¹\84มà¹\88มีในฐานข้อมูล',
-'filedelete-current-unregistered' => 'à¹\84à¸\9fลà¹\8cà¸\97ีà¹\88ระà¸\9aุ "$1" à¹\84มà¹\88มีในฐานข้อมูล',
+'filedelete-old-unregistered' => 'à¹\84มà¹\88มีรุà¹\88à¸\99à¹\84à¸\9fลà¹\8c "$1" à¸\97ีà¹\88ระà¸\9aุในฐานข้อมูล',
+'filedelete-current-unregistered' => 'à¹\84มà¹\88มีà¹\84à¸\9fลà¹\8c "$1" à¸\97ีà¹\88ระà¸\9aุในฐานข้อมูล',
 'filedelete-archive-read-only' => 'ไดเรกทอรีกรุชื่อ "$1" ไม่สามารถเขียนลงได้โดยเว็บเซิร์ฟเวอร์',
 
 # Browsing diffs
@@ -2838,8 +2922,9 @@ $1',
 'file-info' => 'ขนาดไฟล์: $1, ชนิดไมม์: $2',
 'file-info-size' => '$1 × $2 พิกเซล, ขนาดไฟล์: $3, ชนิดไมม์: $4',
 'file-info-size-pages' => '$1 × $2 พิกเซล, ขนาดไฟล์: $3, ประเภท MIME: $4, $5 {{PLURAL:$5|หน้า|หน้า}}',
-'file-nohires' => 'à¹\84มà¹\88มีภาà¸\9eà¸\84วามละà¹\80อียà¸\94สูà¸\87à¸\81วà¹\88าà¸\99ีà¹\89',
+'file-nohires' => 'ไม่มีความละเอียดสูงกว่านี้',
 'svg-long-desc' => 'ไฟล์ SVG, $1 × $2 พิกเซล พอเป็นพิธี, ขนาดไฟล์: $3',
+'svg-long-error' => 'ไฟล์ SVG ไม่ถูกต้อง: $1',
 'show-big-image' => 'ความละเอียดสูงสุด',
 'show-big-image-other' => 'อื่นๆ {{PLURAL:$2|resolution|resolutions}}: $1.',
 'show-big-image-size' => '$1 × $2 พิกเซล',
@@ -2847,7 +2932,7 @@ $1',
 'file-info-gif-frames' => '$1 {{PLURAL:$1|เฟรม|เฟรม}}',
 'file-info-png-looped' => 'วนซ้ำ',
 'file-info-png-repeat' => 'เล่นแล้ว $1 {{PLURAL:$1|ครั้ง|ครั้ง}}',
-'file-info-png-frames' => '$1 {{PLURAL:$1|เฟรม|เฟรม}}',
+'file-info-png-frames' => '$1 เฟรม',
 
 # Special:NewFiles
 'newimages' => 'แกลลอรีภาพใหม่',
@@ -2866,7 +2951,14 @@ $1',
 'minutes-abbrev' => '$1 นาที',
 'hours-abbrev' => '$1 ชั่วโมง',
 'days-abbrev' => '$1 วัน',
+'seconds' => '$1 วินาที',
+'minutes' => '$1 นาที',
+'hours' => '$1 ชั่วโมง',
+'days' => '$1 วัน',
+'months' => '$1 เดือน',
+'years' => '$1 ปี',
 'ago' => '$1 มาแล้ว',
+'just-now' => 'เมื่อสักครู่นี้',
 
 # Bad image list
 'bad_image_list' => 'รูปแบบแสดงต่อไปนี้:
@@ -3198,7 +3290,7 @@ $1',
 'confirmemail_send' => 'ส่งรหัสยืนยันผ่านทางอีเมล',
 'confirmemail_sent' => 'อีเมลยืนยันได้ส่งเรียบร้อย',
 'confirmemail_oncreate' => 'รหัสยืนยันได้ถูกส่งไปที่อีเมล อย่างไรก็ตามรหัสนี้ไม่จำเป็นสำหรับการล็อกอิน เว้นเสียแต่ว่าต้องการใช้คำสั่งพิเศษในด้านอีเมลของวิกินี้',
-'confirmemail_sendfailed' => 'ขออภัย {{SITENAME}}ภาษาไทยไม่สามารถส่งอีเมลให้คุณยืนยันการใช้งานได้
+'confirmemail_sendfailed' => 'ขออภัย {{SITENAME}} ไม่สามารถส่งอีเมลให้คุณยืนยันการใช้งานได้
 กรุณาตรวจสอบอีเมลว่าถูกต้อง และไม่มีอักขระที่ไม่สามารถใช้ได้
 
 ข้อความตีกลับ: $1',
@@ -3258,7 +3350,7 @@ $5
 'confirmrecreate' => "ผู้ใช้ [[User:$1|$1]] ([[User talk:$1|พูดคุย]]) ได้ลบหน้านี้ในช่วงที่คุณกำลังแก้ไข ด้วยเหตุผลว่า:
 : ''$2''
 กรุณายืนยันว่าต้องการสร้างหน้านี้ขึ้นมาใหม่",
-'confirmrecreate-noreason' => 'ผู้ใช้ [[ผู้ใช้:$1|$1]] ([[พูดคุยกับผู้ใช้:$1|พูดคุย]]) ลบหน้านี้หลังคุณเริ่มแก้ไข โปรดยืนยันว่าคุณต้องการสร้างหน้านี้ใหม่จริง ๆ',
+'confirmrecreate-noreason' => 'ผู้ใช้ [[User:$1|$1]] ([[User talk:$1|พูดคุย]]) ลบหน้านี้หลังคุณเริ่มแก้ไข โปรดยืนยันว่าคุณต้องการสร้างหน้านี้ใหม่จริง ๆ',
 'recreate' => 'สร้างใหม่',
 
 # action=purge
@@ -3268,7 +3360,7 @@ $5
 
 # action=watch/unwatch
 'confirm-watch-button' => 'ตกลง',
-'confirm-watch-top' => 'เพิ่มหน้านี้เข้าไปยังรายการเฝ้าดูของคุณ?',
+'confirm-watch-top' => 'เพิ่มหน้านี้เข้าไปยังรายการเฝ้าดูของคุณหรือไม่',
 'confirm-unwatch-button' => 'ตกลง',
 'confirm-unwatch-top' => 'ลบหน้านี้ออกจากรายการเฝ้าดูของคุณ',
 
@@ -3330,24 +3422,24 @@ $5
 
 # Watchlist editor
 'watchlistedit-numitems' => 'รายการเฝ้าดูมี $1 รายการ ไม่รวมหน้าพูดคุย',
-'watchlistedit-noitems' => 'à¹\84มà¹\88มีหัวà¸\82à¹\89อใดในรายการเฝ้าดู',
+'watchlistedit-noitems' => 'à¹\84มà¹\88มีà¸\8aืà¹\88อà¹\80รืà¹\88อà¸\87ใดในรายการเฝ้าดู',
 'watchlistedit-normal-title' => 'แก้ไขรายการเฝ้าดู',
-'watchlistedit-normal-legend' => 'ลà¸\9aà¸\8aืà¹\88อหัวà¸\82à¹\89อออกจากรายการเฝ้าดู',
-'watchlistedit-normal-explain' => 'หัวà¸\82à¹\89อà¸\97ีà¹\88อยูà¹\88à¹\83à¸\99รายà¸\81ารà¹\80à¸\9dà¹\89าà¸\94ูแสดงด้านล่าง 
-à¸\96à¹\89าà¸\95à¹\89อà¸\87à¸\81ารลà¸\9aออà¸\81 à¹\83หà¹\89à¸\84ลิà¸\81à¹\80ลือà¸\81à¸\97ีà¹\88à¸\81ลà¹\88อà¸\87à¸\94à¹\89าà¸\99à¸\82à¹\89าà¸\87à¹\81à¸\95à¹\88ละหัวà¸\82à¹\89อ และคลิก "{{int:Watchlistedit-normal-submit}}" 
+'watchlistedit-normal-legend' => 'ลà¸\9aà¸\8aืà¹\88อà¹\80รืà¹\88อà¸\87ออกจากรายการเฝ้าดู',
+'watchlistedit-normal-explain' => 'à¸\8aืà¹\88อà¹\80รืà¹\88อà¸\87à¹\83à¸\99รายà¸\81ารà¹\80à¸\9dà¹\89าà¸\94ูà¸\82อà¸\87à¸\84ุà¸\93แสดงด้านล่าง 
+à¸\96à¹\89าà¸\95à¹\89อà¸\87à¸\81ารลà¸\9aออà¸\81 à¹\83หà¹\89à¸\84ลิà¸\81à¹\80ลือà¸\81à¸\97ีà¹\88à¸\81ลà¹\88อà¸\87à¸\94à¹\89าà¸\99à¸\82à¹\89าà¸\87à¹\81à¸\95à¹\88ละà¸\8aืà¹\88อ และคลิก "{{int:Watchlistedit-normal-submit}}" 
 หรืออาจจะ[[Special:EditWatchlist/raw|แก้ไขรายการทั้งหมด]]',
-'watchlistedit-normal-submit' => 'ลà¸\9aหัวà¸\82à¹\89อ',
+'watchlistedit-normal-submit' => 'ลà¸\9aà¸\8aืà¹\88อà¹\80รืà¹\88อà¸\87',
 'watchlistedit-normal-done' => '$1 รายการได้ถูกนำออกจากรายการเฝ้าดู:',
 'watchlistedit-raw-title' => 'แก้ไขรายการเฝ้าดูทั้งหมด',
 'watchlistedit-raw-legend' => 'แก้ไขรายการเฝ้าดูทั้งหมด',
-'watchlistedit-raw-explain' => 'หัวà¸\82à¹\89อà¹\83à¸\99รายà¸\81ารà¹\80à¸\9dà¹\89าà¸\94ูà¹\81สà¸\94à¸\87à¸\94à¹\89าà¸\99ลà¹\88าà¸\87 à¸\8bึà¹\88à¸\87สามารà¸\96à¹\80à¸\9eิà¹\88มหรือà¸\99ำออà¸\81à¹\84à¸\94à¹\89 à¸«à¸\99ึà¹\88à¸\87หัวà¸\82à¹\89อà¸\95à¹\88อหà¸\99ึà¹\88à¸\87แถว 
-à¹\80มืà¹\88อà¹\81à¸\81à¹\89à¹\84à¸\82à¹\80สรà¹\87à¸\88à¹\81ลà¹\89ว à¹\83หà¹\89à¸\84ลิà¸\81 "{{int:Watchlistedit-raw-submit}}" 
+'watchlistedit-raw-explain' => 'à¸\8aืà¹\88อà¹\80รืà¹\88อà¸\87à¹\83à¸\99รายà¸\81ารà¹\80à¸\9dà¹\89าà¸\94ูà¸\82อà¸\87à¸\84ุà¸\93à¹\81สà¸\94à¸\87à¸\94à¹\89าà¸\99ลà¹\88าà¸\87 à¸\8bึà¹\88à¸\87สามารà¸\96à¹\80à¸\9eิà¹\88มหรือà¸\99ำออà¸\81à¹\84à¸\94à¹\89 à¸«à¸\99ึà¹\88à¸\87à¸\8aืà¹\88อà¹\80รืà¹\88อà¸\87à¸\95à¹\88อแถว 
+à¹\80มืà¹\88อà¹\80สรà¹\87à¸\88à¹\81ลà¹\89ว à¹\83หà¹\89à¸\81à¸\94 "{{int:Watchlistedit-raw-submit}}" 
 ซึ่งอาจแก้ไขผ่าน [[Special:EditWatchlist|โปรแกรมแก้ไขข้อความทั่วไป]]',
-'watchlistedit-raw-titles' => 'หัวà¸\82à¹\89อ:',
-'watchlistedit-raw-submit' => 'อัà¸\9bà¹\80à¸\94à¸\95รายการเฝ้าดู',
-'watchlistedit-raw-done' => 'รายà¸\81ารà¹\80à¸\9dà¹\89าà¸\94ูà¹\84à¸\94à¹\89à¸\96ูà¸\81อัà¸\9bà¹\80à¸\94à¸\95',
-'watchlistedit-raw-added' => '$1 à¸«à¸±à¸§à¸\82à¹\89อได้ถูกเพิ่มเข้าไป:',
-'watchlistedit-raw-removed' => '$1 à¸«à¸±à¸§à¸\82à¹\89อได้ถูกนำออกไป:',
+'watchlistedit-raw-titles' => 'à¸\8aืà¹\88อà¹\80รืà¹\88อà¸\87:',
+'watchlistedit-raw-submit' => 'à¸\9bรัà¸\9aรายการเฝ้าดู',
+'watchlistedit-raw-done' => 'รายà¸\81ารà¹\80à¸\9dà¹\89าà¸\94ูà¸\82อà¸\87à¸\84ุà¸\93à¹\84à¸\94à¹\89à¸\9bรัà¸\9aà¹\81ลà¹\89ว',
+'watchlistedit-raw-added' => '$1 à¸\8aืà¹\88อà¹\80รืà¹\88อà¸\87ได้ถูกเพิ่มเข้าไป:',
+'watchlistedit-raw-removed' => '$1 à¸\8aืà¹\88อà¹\80รืà¹\88อà¸\87ได้ถูกนำออกไป:',
 
 # Watchlist editing tools
 'watchlisttools-view' => 'ดูการเปลี่ยนแปลงที่เกี่ยวข้อง',
@@ -3379,13 +3471,13 @@ $5
 'version-hook-subscribedby' => 'สนับสนุนโดย',
 'version-version' => '(รุ่น $1)',
 'version-license' => 'สัญญาอนุญาต',
-'version-poweredby-credits' => "วิกินี้จัดทำโดย '''[//www.mediawiki.org/ MediaWiki]''', สงวนลิขสิทธิ์ © 2001-$1 โดย $2.",
+'version-poweredby-credits' => "วิกินี้จัดทำโดย '''[//www.mediawiki.org/ MediaWiki]''', สงวนลิขสิทธิ์ © 2001-$1 โดย $2",
 'version-poweredby-others' => 'ผู้อื่น',
-'version-license-info' => 'มีเดียวิกิเป็นซอฟต์แวร์เสรี คุณสามารถแจกจ่ายต่อ และ/หรือ แก้ไขโปรแกรมได้ภายใต้เงื่อนไขของ GNU General Public License ที่เผยแพร่โดยมูลนิธิซอฟต์แวร์เสรี ในรุ่นที่ 2 ของใบอนุญาตหรือรุ่นอื่นใด (ตามที่คุณเลือก)
+'version-license-info' => 'มีเดียวิกิเป็นซอฟต์แวร์เสรี คุณสามารถแจกจ่าย และ/หรือ แก้ไขได้ภายใต้เงื่อนไขแห่งสัญญาอนุญาตสาธารณะทั่วไปของกนูตามที่เผยแพร่โดยมูลนิธิซอฟต์แวร์เสรี ไม่ว่ารุ่นที่ 2 แห่งสัญญาอนุญาต หรือรุ่นภายหลังอื่นใด (ตามที่คุณเลือก)
 
-มีà¹\80à¸\94ียวิà¸\81ิมีà¸\81ารà¹\81à¸\88à¸\81à¸\88à¹\88ายà¹\82à¸\94ยหวัà¸\87วà¹\88าà¸\88ะà¹\80à¸\9bà¹\87à¸\99à¸\9bระà¹\82ยà¸\8aà¸\99à¹\8c à¹\81à¸\95à¹\88à¹\84มà¹\88มีà¸\81ารรัà¸\9aà¸\9bระà¸\81ัà¸\99à¹\83à¸\94à¹\86 à¸\97ัà¹\89à¸\87สิà¹\89à¸\99 à¹\84มà¹\88มีà¹\81มà¹\89à¸\81ารรัà¸\9aà¸\9bระà¸\81ัà¸\99à¹\82à¸\94ยà¸\99ัยà¹\80à¸\9eืà¹\88อà¸\81ารà¸\84à¹\89า à¸«à¸£à¸·à¸­à¸\84วามà¹\80หมาะสมสำหรัà¸\9aวัà¸\95à¸\96ุà¸\9bระสà¸\87à¸\84à¹\8cà¹\80à¸\89à¸\9eาะ à¸\94ู GNU General Public License à¹\80à¸\9eืà¹\88อà¸\94ูรายละà¹\80อียà¸\94à¹\80à¸\9eิà¹\88มà¹\80à¸\95ิม 
+มีà¹\80à¸\94ียวิà¸\81ิมีà¸\96ูà¸\81à¹\81à¸\88à¸\81à¸\88à¹\88ายà¸\94à¹\89วยหวัà¸\87วà¹\88าà¸\88ะà¹\80à¸\9bà¹\87à¸\99à¸\9bระà¹\82ยà¸\8aà¸\99à¹\8c à¹\81à¸\95à¹\88à¹\84มà¹\88มีà¸\81ารรัà¸\9aà¸\9bระà¸\81ัà¸\99à¹\83à¸\94 à¹\86 à¸\97ัà¹\89à¸\87สิà¹\89à¸\99 à¹\84มà¹\88มีà¹\81มà¹\89à¸\81ารรัà¸\9aà¸\9bระà¸\81ัà¸\99à¹\82à¸\94ยà¸\99ัยà¹\80à¸\9eืà¹\88อà¸\81ารà¸\84à¹\89า à¸«à¸£à¸·à¸­à¸\84วามà¹\80หมาะสมสำหรัà¸\9aวัà¸\95à¸\96ุà¸\9bระสà¸\87à¸\84à¹\8cà¹\80à¸\89à¸\9eาะ à¸\94ูรายละà¹\80อียà¸\94à¹\80à¸\9eิà¹\88มà¹\80à¸\95ิมà¸\97ีà¹\88สัà¸\8dà¸\8dาอà¸\99ุà¸\8dาà¸\95สาà¸\98ารà¸\93ะà¸\97ัà¹\88วà¹\84à¸\9bà¸\82อà¸\87à¸\81à¸\99ู
 
-à¸\84ุà¸\93à¸\84วรà¸\88ะà¹\84à¸\94à¹\89รัà¸\9a [{{SERVER}}{{SCRIPTPATH}}/COPYING a copy of the GNU General Public License] à¸\9eรà¹\89อมà¸\81ัà¸\9aà¹\82à¸\9bรà¹\81à¸\81รมà¸\99ีà¹\89 à¸«à¸²à¸\81à¹\84มà¹\88à¸\9eà¸\9a à¸\81รุà¸\93าà¹\80à¸\82ียà¸\99à¸\88à¸\94หมายà¸\96ึà¸\87 Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA à¸«à¸£à¸·à¸­ [//www.gnu.org/licenses/old-licenses/gpl-2.0.html อ่านออนไลน์]',
+à¸\84ุà¸\93à¸\84วรà¹\84à¸\94à¹\89รัà¸\9a[{{SERVER}}{{SCRIPTPATH}}/COPYING à¸ªà¸³à¹\80à¸\99าà¸\82อà¸\87สัà¸\8dà¸\8dาอà¸\99ุà¸\8dาà¸\95สาà¸\98ารà¸\93ะà¸\97ัà¹\88วà¹\84à¸\9bà¸\82อà¸\87à¸\81à¸\99ู]à¸\9eรà¹\89อมà¸\81ัà¸\9aà¹\82à¸\9bรà¹\81à¸\81รมà¸\99ีà¹\89 à¸«à¸²à¸\81à¹\84มà¹\88à¸\9eà¸\9a à¸\81รุà¸\93าà¹\80à¸\82ียà¸\99à¸\88à¸\94หมายà¸\96ึà¸\87à¸\9aริษัà¸\97มูลà¸\99ิà¸\98ิà¸\8bอà¸\9fà¸\95à¹\8cà¹\81วรà¹\8cà¹\80สรี à¸\97ีà¹\88อยูà¹\88 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA à¸«à¸£à¸·à¸­[//www.gnu.org/licenses/old-licenses/gpl-2.0.html อ่านออนไลน์]',
 'version-software' => 'ซอฟต์แวร์ที่ติดตั้ง',
 'version-software-product' => 'ชื่อ',
 'version-software-version' => 'รุ่น',
@@ -3416,17 +3508,17 @@ $5
 'specialpages' => 'หน้าพิเศษ',
 'specialpages-note' => '----
 * หน้าพิเศษปกติ
-* <strong class="mw-specialpagerestricted">หน้าพิเศษสำหรับผู้ดูแล</strong>',
+* <span class="mw-specialpagerestricted">หน้าพิเศษที่ถูกจำกัด</span>',
 'specialpages-group-maintenance' => 'รายงานการเก็บกวาด',
 'specialpages-group-other' => 'หน้าพิเศษอื่น ๆ',
-'specialpages-group-login' => 'ล็อกอิน / สร้างบัญชีผู้ใช้ใหม่',
+'specialpages-group-login' => 'ล็อกอิน / สร้างบัญชี',
 'specialpages-group-changes' => 'ปรับปรุงล่าสุดและปูมต่าง ๆ',
 'specialpages-group-media' => 'รายงานเรื่องสื่อและการอัปโหลด',
 'specialpages-group-users' => 'ผู้ใช้และสิทธิ',
 'specialpages-group-highuse' => 'หน้าที่มีการใช้งานสูง',
 'specialpages-group-pages' => 'รายชื่อหน้า',
 'specialpages-group-pagetools' => 'เครื่องมือเกี่ยวกับหน้าต่าง ๆ',
-'specialpages-group-wiki' => 'à¹\80à¸\84รืà¹\88อà¸\87มือà¹\81ละà¸\82à¹\89อมูลวิà¸\81ิ',
+'specialpages-group-wiki' => 'à¸\82à¹\89อมูลà¹\81ละà¹\80à¸\84รืà¹\88อà¸\87มือ',
 'specialpages-group-redirects' => 'เปลี่ยนทางหน้าพิเศษ',
 'specialpages-group-spam' => 'เครื่องมือเกี่ยวกับสแปม',
 
@@ -3465,6 +3557,9 @@ $5
 'compare-rev1' => 'รุ่น 1',
 'compare-rev2' => 'รุ่น 2',
 'compare-submit' => 'เปรียบเทียบ',
+'compare-invalid-title' => 'ชื่อเรื่องที่คุณระบุไม่ถูกต้อง',
+'compare-title-not-exists' => 'ชื่อเรื่องที่คุณระบุไม่มีอยู่',
+'compare-revision-not-exists' => 'รุ่นที่คุณระบุไม่มีอยู่',
 
 # Database error messages
 'dberr-header' => 'วิกินี้กำลังประสบปัญหา',
@@ -3495,22 +3590,33 @@ $5
 'logentry-delete-delete' => '$1 ลบหน้า $3',
 'logentry-delete-restore' => '$1 กู้คืนหน้า $3',
 'logentry-delete-event' => '$1 เปลี่ยนทัศนวิสัยของ $5 รายการปูมใน $3: $4',
+'logentry-delete-revision' => '$1 เปลี่ยนแปลงทัศนวิสัยของ $5 รุ่น ในหน้า $3: $4',
+'logentry-delete-event-legacy' => '$1 เปลี่ยนแปลงทัศนวิสัยของเหตุการณ์ปูมในหน้า $3',
+'logentry-delete-revision-legacy' => '$1 เปลี่ยนแปลงทัศนวิสัยของรุ่นในหน้า $3',
+'logentry-suppress-delete' => '$1 ระงับหน้า $3',
+'logentry-suppress-event' => '$1 เปลี่ยนทัศนวิสัยอย่างลับ ๆ ของ $5 รายการปูมบน $3: $4',
+'logentry-suppress-revision' => '$1 เปลี่ยนทัศนวิสัยอย่างลับ ๆ ของ $5 รุ่นบนหน้า $3: $4',
+'logentry-suppress-event-legacy' => '$1 เปลี่ยนทัศนวิสัยอย่างลับ ๆ ของรายการปูมบน $3',
+'logentry-suppress-revision-legacy' => '$1 เปลี่ยนทัศนวิสัยอย่างลับ ๆ ของรุ่นบนหน้า $3',
 'revdelete-content-hid' => 'เนื้อหาถูกซ่อน',
 'revdelete-summary-hid' => 'คำอธิบายอย่างย่อถูกซ่อน',
 'revdelete-uname-hid' => 'ชื่อผู้ใช้ถูกซ่อน',
-'revdelete-restricted' => 'จำกัดให้เฉพาะผู้ดูแลระบบขั้นพื้นฐาน',
-'revdelete-unrestricted' => 'ยกเลิกการจำกัดให้เฉพาะผู้ดูแลระบบขั้นพื้นฐาน',
+'revdelete-content-unhid' => 'เนื้อหาถูกแสดง',
+'revdelete-summary-unhid' => 'คำอธิบายอย่างย่อถูกแสดง',
+'revdelete-uname-unhid' => 'ชื่อผู้ใช้ถูกแสดง',
+'revdelete-restricted' => 'เพิ่มการจำกัดกับผู้ดูแลระบบ',
+'revdelete-unrestricted' => 'ยกเลิกการจำกัดแก่ผู้ดูแลระบบ',
 'logentry-move-move' => '$1 ย้ายหน้า $3 ไปยัง $4',
 'logentry-move-move-noredirect' => '$1 ย้ายหน้า $3 ไปยัง $4 (ไม่สร้างหน้าเปลี่ยนทางตามมา)',
 'logentry-move-move_redir' => '$1 ย้ายหน้า $3 ไปยัง $4 ทับหน้าเปลี่ยนทาง',
 'logentry-move-move_redir-noredirect' => '$1 ย้ายหน้า $3 ไปยัง $4 ทับหน้าเปลี่ยนทาง (ไม่สร้างหน้าเปลี่ยนทางตามมา)',
 'logentry-patrol-patrol' => '$1 ทำเครื่องหมายว่ารุ่น $4 ของหน้า $3 ได้รับการตรวจสอบแล้ว',
 'logentry-patrol-patrol-auto' => '$1 ทำเครื่องหมายโดยอัตโนมัติว่ารุ่น $4 ของหน้า $3 ได้รับการตรวจสอบแล้ว',
-'logentry-newusers-newusers' => '$1 สร้างบัญชีผู้ใช้ใหม่',
-'logentry-newusers-create' => '$1 สร้างบัญชีผู้ใช้ใหม่',
-'logentry-newusers-create2' => '$1 สร้างบัญชีผู้ใช้ $3',
+'logentry-newusers-newusers' => 'บัญชีผู้ใช้ $1 ถูกสร้างขึ้น',
+'logentry-newusers-create' => 'บัญชีผู้ใช้ $1 ถูกสร้างขึ้น',
+'logentry-newusers-create2' => 'บัญชีผู้ใช้ $3 ถูกสร้างขึ้นโดย $1',
 'logentry-newusers-autocreate' => 'บัญชี $1 ถูกสร้างขึ้นอัตโนมัติ',
-'newuserlog-byemail' => 'รหัสผ่านถูกส่งทางอีเมล',
+'rightsnone' => '(ไม่มี)',
 
 # Feedback
 'feedback-message' => 'ข้อความ:',
@@ -3524,6 +3630,22 @@ $5
 'searchsuggest-containing' => 'ประกอบไปด้วย...',
 
 # API errors
+'api-error-empty-file' => 'ไฟล์ที่คุณส่งมานั้นว่าง',
+'api-error-emptypage' => 'ไม่อนุญาตให้สร้างหน้าใหม่ที่ว่าง',
+'api-error-file-too-large' => 'ไฟล์ที่คุณส่งมาใหญ่เกินไป',
+'api-error-filename-tooshort' => 'ชื่อไฟล์สั้นเกินไป',
+'api-error-filetype-banned' => 'ไฟล์ประเภทนี้ถูกห้าม',
 'api-error-mustbeloggedin' => 'กรุณาลงชื่อเข้าใช้เพื่ออัปโหลดไฟล์',
 
+# Durations
+'duration-seconds' => '$1 วินาที',
+'duration-minutes' => '$1 นาที',
+'duration-hours' => '$1 ชั่วโมง',
+'duration-days' => '$1 วัน',
+'duration-weeks' => '$1 สัปดาห์',
+'duration-years' => '$1 ปี',
+'duration-decades' => '$1 ทศวรรษ',
+'duration-centuries' => '$1 ศตวรรษ',
+'duration-millennia' => '$1 สหัสวรรษ',
+
 );
index a1aa29f..b36da18 100644 (file)
@@ -716,7 +716,6 @@ Gündeligiň iň soňky ýazgysy salgylanmak üçin aşakda berilýär:",
 'template-protected' => '(goragly)',
 'template-semiprotected' => '(ýarym goragly)',
 'hiddencategories' => 'Bu sahypa {{PLURAL:$1|1 gizlin kategoriýa|$1 gizlin kategoriýa}} degişlidir:',
-'nocreatetitle' => 'Sahypa döretmeklik çäklendirildi',
 'nocreatetext' => '{{SITENAME}} täze sahypa döretmek mümkinçiligini çäklendirdi.
 Yza gaýdyp, bar bolan sahypalary redaktirläp bilersiňiz ýa-da bolmasa [[Special:UserLogin|sessiýa açyp]] ýa-da [[Special:UserLogin|hasap döredip]] bilersiňiz.',
 'nocreate-loggedin' => 'Täze sahypa döretmäge rugsadyňyz ýok.',
@@ -1238,11 +1237,13 @@ $1 {{PLURAL:$1|simwoldan|simwoldan}} köp bolmaly däl.',
 'right-override-export-depth' => 'Sahypalary, şol sanda çykgytly sahypalary 5-e çenli çuňlukda eksportirle',
 'right-sendemail' => 'Başga ulanyjylara e-poçta iber',
 
+# Special:Log/newusers
+'newuserlogpage' => 'Täze ulanyjy gündeligi',
+'newuserlogpagetext' => 'Ulanyjy döretme gündeligi.',
+
 # User rights log
 'rightslog' => 'Ulanyjy hukuklarynyň gündeligi',
 'rightslogtext' => 'Ulanyjy hukuklaryndaky üýtgeşmeler gündeligi.',
-'rightslogentry' => '$1 üçin topar agzalygyny $2 toparyndan $3 toparyna üýtgetdi',
-'rightsnone' => '(hiç biri)',
 
 # Associated actions - in the sentence "You do not have permission to X"
 'action-read' => 'bu sahypany okamaga',
@@ -1788,10 +1789,6 @@ Goldanylýan protokollar: <code>$1</code>',
 'activeusers-hidesysops' => 'Administratorlary gizle',
 'activeusers-noresult' => 'Ulanyjy tapylmady.',
 
-# Special:Log/newusers
-'newuserlogpage' => 'Täze ulanyjy gündeligi',
-'newuserlogpagetext' => 'Ulanyjy döretme gündeligi.',
-
 # Special:ListGroupRights
 'listgrouprights' => 'Ulanyjy topary hukuklary',
 'listgrouprights-summary' => 'Aşakda şu wikide kesgitlenen ulanyjy toparlarynyň hem-de olaryň degişli ulanmak hukuklarynyň sanawy berilýär.
@@ -1910,6 +1907,8 @@ $UNWATCHURL
 
 Seslenme we goşmaça kömek:
 {{canonicalurl:{{MediaWiki:Helppage}}}}',
+'created' => 'döredildi',
+'changed' => 'üýtgedildi',
 
 # Delete
 'deletepage' => 'Sahypany öçür',
@@ -3153,7 +3152,7 @@ Faýlyň adyny "{{ns:file}}:" pristawkasyz giriziň.',
 # New logging system
 'revdelete-restricted' => 'administratorlara goýlan çäklendirmeler',
 'revdelete-unrestricted' => 'administratorlardan aýyrylan çäklendirmeler',
-'newuserlog-byemail' => 'parol e-poçta bilen iberildi',
+'rightsnone' => '(hiç biri)',
 
 # Search suggestions
 'searchsuggest-search' => 'Gözleg',
index e5ca777..27ded0f 100644 (file)
@@ -369,7 +369,7 @@ $messages = array(
 'viewcount' => 'Namataan na pahinang ito nang {{PLURAL:$1|isang|$1}} beses.',
 'protectedpage' => 'Pahinang nakasanggalang',
 'jumpto' => 'Tumalon sa:',
-'jumptonavigation' => 'paglilibot (nabigasyon)',
+'jumptonavigation' => 'paglilibot',
 'jumptosearch' => 'paghahanap',
 'view-pool-error' => 'Paumanhin, ngunit masyado pong abala ang mga serbidor sa sandaling ito.
 Masyadong maraming tagagamit ay sinusubukang tingnan ang pahinang ito.
@@ -440,9 +440,9 @@ Tingnan ang [[Special:Version|pahina ng bersiyon]].',
 'feed-invalid' => 'Hindi tanggap na uri ng serbisyo ng pagpaparating.',
 'feed-unavailable' => 'Walang serbisyo mula sa sindikasyong pangpaglalathala',
 'site-rss-feed' => 'Kargang RSS ng $1',
-'site-atom-feed' => 'Kargang Atom ng $1',
+'site-atom-feed' => 'Sindikasyong Atom ng $1',
 'page-rss-feed' => 'Kargang RSS ng "$1"',
-'page-atom-feed' => 'Kargang Atom ng "$1"',
+'page-atom-feed' => 'Sindikasyong Atom ng "$1"',
 'feed-atom' => 'Atom',
 'feed-rss' => 'RSS',
 'red-link-title' => '$1 (hindi umiiral ang pahina)',
@@ -567,6 +567,9 @@ Ang tagapangasiwang nagkandado nito ay nag-alok ng ganitong paliwanag: "$3".',
 
 Maaari kang tumuloy sa paggamit ng {{SITENAME}} nang hindi nakikilala (anonimo), o maaaring kang <span class='plainlinks'>[$1 lumagda/tumala muli]</span> bilang kapareho o ibang tagagamit.
 Tandaan na may ilang pahinang maaaring magpatuloy na nagpapakitang parang nakalagda ka pa rin, hanggang sa linisin mo ang iyong baunang pambasa-basa (''browser cache'').",
+'welcomeuser' => 'Mabuhay, $1!',
+'welcomecreation-msg' => 'Nilikha na ang iyong kuwenta.
+Huwag kalimutang baguhin ang iyong [[Special:Preferences|mga kagustuhan sa {{SITENAME}}]].',
 'yourname' => 'Bansag:',
 'yourpassword' => 'Hudyat:',
 'yourpasswordagain' => 'Hudyat mo uli:',
@@ -923,7 +926,6 @@ Ang pinakahuling entrada sa talaan ay ibinigay sa baba para sa inyong pagsasangg
 'hiddencategories' => 'Ang pahinang ito ay kasapi sa {{PLURAL:$1|1 nakatagong kategorya|$1 nakatagong kategorya}}:',
 'edittools' => '<!-- Ang teksto rito ay ipapakita sa ilalim ng mga pormularyo ng pagbabago at pagkarga. -->',
 'edittools-upload' => '-',
-'nocreatetitle' => 'May hangganan ang paglikha ng pahina',
 'nocreatetext' => 'Naglagay ng hangganan (restriksyon/limitasyon) ang {{SITENAME}} sa kakayahang makalikha ng bagong mga pahina.
 Maaari kang bumalik at magbago ng isang umiiral na pahina, o kaya [[Special:UserLogin|lumagda o lumikha ng kuwenta/akawnt]].',
 'nocreate-loggedin' => 'Wala kang pahintulot para lumikha ng bagong mga pahina.',
@@ -949,6 +951,10 @@ Tila binura na ito.',
 Umiiral na ito.',
 'defaultmessagetext' => 'Nakatakdang teksto ng mensahe',
 
+# Content models
+'content-model-wikitext' => 'wikiteksto',
+'content-model-text' => 'purong teksto',
+
 # Parser/template warnings
 'expensive-parserfunction-warning' => 'Babala: Naglalaman ang pahinang ito ng napakaraming mamahaling mga tawag na pantungkulin.
 
@@ -1310,7 +1316,7 @@ Hindi ito maibabalik sa dating gawi.',
 'prefs-emailconfirm-label' => 'Kumpirmasyon ng e-liham:',
 'prefs-textboxsize' => 'Sukat ng bintana ng pagbabago',
 'youremail' => 'E-liham:',
-'username' => 'Bansag:',
+'username' => '{{GENDER:$1|Bansag}}:',
 'uid' => 'ID ng tagagamit:',
 'prefs-memberingroups' => 'Kasapi ng {{PLURAL:$1|na pangkat|na mga pangkat}}:',
 'prefs-memberingroups-type' => '$1',
@@ -1465,12 +1471,13 @@ Kung pipiliin mong ibigay ito, gagamitin ito para mabigyan ka ng pagkilala para
 'right-sendemail' => 'Magpadala ng e-liham sa ibang mga tagagamit',
 'right-passwordreset' => 'Tingnan ang mga e-liham ng muling pagtatakda ng hudyat',
 
+# Special:Log/newusers
+'newuserlogpage' => 'Talaan ng paglikha ng tagagamit',
+'newuserlogpagetext' => 'Isa itong talaan ng mga paglikha ng tagagamit.',
+
 # User rights log
 'rightslog' => 'Tala ng mga karapatan ng tagagamit',
 'rightslogtext' => 'Isa itong tala ng mga pagbabago sa mga karapatan ng tagagamit.',
-'rightslogentry' => 'binago ang kasapiang pampangkat para kay $1 mula sa $2 patungong $3',
-'rightslogentry-autopromote' => 'ay kusang naitaas ang ranggo mula $2 upang maging $3',
-'rightsnone' => '(wala)',
 
 # Associated actions - in the sentence "You do not have permission to X"
 'action-read' => 'basahin itong pahina',
@@ -1711,6 +1718,7 @@ Kapag nagpatuloy ang suliranin, makipagugnayan sa isang [[Special:ListUsers/syso
 'backend-fail-notsame' => 'Isang hindi kamukhang talaksan ang umiiral na sa $1.',
 'backend-fail-invalidpath' => 'Ang $1 ay hindi isang katanggap-tanggap na landas ng imbakan.',
 'backend-fail-delete' => 'Hindi mabura ang talaksang $1.',
+'backend-fail-describe' => 'Hindi mapalitan ang metadatos para sa talaksang "$1".',
 'backend-fail-alreadyexists' => 'Umiiral na ang pahinang $1.',
 'backend-fail-store' => 'Hindi maimbak ang talaksang $1 sa $2.',
 'backend-fail-copy' => 'Hindi makopya ang talaksang $1 sa $2.',
@@ -2120,10 +2128,6 @@ Sinusuportahang mga protokolo: <code>$1</code> (huwag idagdag ang anuman sa mga
 'activeusers-hidesysops' => 'Itago ang mga tagapangasiwa',
 'activeusers-noresult' => 'Walang natagpuang mga tagagamit.',
 
-# Special:Log/newusers
-'newuserlogpage' => 'Talaan ng paglikha ng tagagamit',
-'newuserlogpagetext' => 'Isa itong talaan ng mga paglikha ng tagagamit.',
-
 # Special:ListGroupRights
 'listgrouprights' => 'Mga uri ng tagagamit',
 'listgrouprights-summary' => 'Ang sumusunod ay isang talaan ng mga pangkat ng tagagamit na binigyang kahulugang sa wiking ito, kasama ang kanilang mga kaugnay na mga karapatan.
@@ -2184,7 +2188,7 @@ Ang ipinasok mong direksiyong e-liham sa [[Special:Preferences|iyong mga kagustu
 
 # Watchlist
 'watchlist' => 'Mga binabantayan ko',
-'mywatchlist' => 'Bantayan ko',
+'mywatchlist' => 'Bantayan',
 'watchlistfor2' => 'Para sa $1 $2',
 'nowatchlist' => 'Wala kang pahinang binabantayan.',
 'watchlistanontext' => 'Paki $1 upang makita o mabago ang mga aytem sa iyong binabantayan.',
@@ -2254,6 +2258,8 @@ $UNWATCHURL
 
 Tugon at karagdagang tulong:
 {{canonicalurl:{{MediaWiki:Helppage}}}}',
+'created' => 'nilikha',
+'changed' => 'binago',
 
 # Delete
 'deletepage' => 'Burahin ang pahina',
@@ -2430,7 +2436,7 @@ $1',
 'undelete-revisionrow' => '$1 $2 ($3) $4 . . $5 $6 $7',
 
 # Namespace form on various pages
-'namespace' => 'Espasyo ng pangalan:',
+'namespace' => 'Ngalan-espasyo:',
 'invert' => 'Baligtarin and pinili',
 'tooltip-invert' => 'Tsekan ang kahong ito upang ikubli ang mga pagbabago sa mga pahina sa loob ng napiling mga puwang ng pangalan (at ang kaugnay na puwang ng pangalan kung may tsek)',
 'namespace_association' => 'Kaugnay na mga puwang na pampangalan',
@@ -2563,8 +2569,8 @@ Tingnan ang [[Special:BlockList|talaan ng mga hinadlangan]] upang suriin ang mga
 'blocklist-nousertalk' => 'hindi mo mababago ang iyong pansariling pahina ng usapan',
 'ipblocklist-empty' => 'Walang laman ang talaan ng pagharang/paghadlang.',
 'ipblocklist-no-results' => 'Nakaharang ang hiniling na IP address o bansag.',
-'blocklink' => 'harangin/hadlangan',
-'unblocklink' => 'tanggalin ang pagharang/paghadlang',
+'blocklink' => 'harangin',
+'unblocklink' => 'tanggalin ang pagharang',
 'change-blocklink' => 'baguhin ang pagharang/paghadlang',
 'contribslink' => 'ambag',
 'emaillink' => 'ipadala ang e-liham',
@@ -2860,7 +2866,7 @@ Sagipin mo ito sa iyong kompyuter at papaitaas na ikarga ito rito.',
 'tooltip-pt-logout' => 'Umalis sa pagkakalagda',
 'tooltip-ca-talk' => 'Usapan tungkol sa nilalaman ng pahinang ito',
 'tooltip-ca-edit' => 'Maaaring baguhin ang pahinang ito. Paki gamit ang buton ng paunang tingin bago itala.',
-'tooltip-ca-addsection' => 'Magsimula ng isang bagong seksyon',
+'tooltip-ca-addsection' => 'Magsimula ng isang bagong seksiyon',
 'tooltip-ca-viewsource' => 'Nakaprotekta ang pahinang ito. Makikita mo lamang ang pinagmulan (source) nito.',
 'tooltip-ca-history' => 'Nakaraang bersyon ng pahinang ito.',
 'tooltip-ca-protect' => 'Iprotekta ang pahinang ito',
@@ -2884,12 +2890,12 @@ Sagipin mo ito sa iyong kompyuter at papaitaas na ikarga ito rito.',
 'tooltip-t-whatlinkshere' => 'Tala ng lahat ng pahina ng mga wiking nakakawing dito',
 'tooltip-t-recentchangeslinked' => 'Kamakailang mga pagbabago na nakakawing mula sa pahinang ito',
 'tooltip-feed-rss' => 'Subo/Kargang RSS para sa pahinang ito',
-'tooltip-feed-atom' => 'Subo/kargang Atom para sa pahinang ito',
+'tooltip-feed-atom' => 'Sindikasyong Atom para sa pahinang ito',
 'tooltip-t-contributions' => 'Tunghayan ang tala ng mga ambag ng tagagamit na ito',
 'tooltip-t-emailuser' => 'Magpadala ng isang e-liham sa tagagamit na ito',
 'tooltip-t-upload' => 'Magkarga ng mga talaksan',
 'tooltip-t-specialpages' => 'Tala ng lahat ng mga natatanging pahina',
-'tooltip-t-print' => 'Nalilimbag na bersyon ng pahinang ito',
+'tooltip-t-print' => 'Bersiyong maililimbag ng pahinang ito',
 'tooltip-t-permalink' => 'Palagiang kawing sa bersyong ito ng pahina',
 'tooltip-ca-nstab-main' => 'Tingnan ang pahina ng nilalaman',
 'tooltip-ca-nstab-user' => 'Tingnan ang pahina ng tagagamit',
@@ -3058,7 +3064,7 @@ Maaaring manganib ang iyong sistema kapag ipinagana mo ito.",
 'widthheight' => '$1 × $2',
 'widthheightpage' => '$1 × $2, $3 {{PLURAL:$3|pahina|mga pahina}}',
 'file-info' => 'sukat ng talaksan: $1, tipo ng MIME: $2',
-'file-info-size' => '$1 × $2 piksel, sukat ng talaksan: $3, tipo ng MIME: $4',
+'file-info-size' => '$1 × $2 piksel, laki ng talaksan: $3, uri ng MIME: $4',
 'file-info-size-pages' => '$1 × $2 mga piksel, sukat ng talaksan: $3, uri ng MIME: $4, $5 {{PLURAL:$5|pahina|mga pahina}}',
 'file-nohires' => 'Walang makuhang mas mataas na resolusyon (kalinawan).',
 'svg-long-desc' => 'Talaksang SVG, nasa mga bilang na $1 × $2 mga piksel, sukat ng talaksan: $3',
@@ -3961,7 +3967,7 @@ Ipinapakita ang mga larawan sa buong kalinawan, tuwirang sinisimulan ang ibang u
 
 # Special:Tags
 'tags' => 'Tanggap na mga tatak ng pagbabago',
-'tag-filter' => '[[Special:Tags|Tatakan]] ang pansala:',
+'tag-filter' => 'Pansala ng [[Special:Tags|tatak]]:',
 'tag-filter-submit' => 'Pansala',
 'tags-title' => 'Mga tatak',
 'tags-intro' => 'Itinatala ng pahinang ito ang mga tatak na maaaring ipantatak ng sopwer sa isang pagbabago, at ang kanilang kahulugan.',
@@ -4039,7 +4045,7 @@ Ipinapakita ang mga larawan sa buong kalinawan, tuwirang sinisimulan ang ibang u
 'logentry-newusers-create' => 'Lumikha si $1 ng isang kuwenta ng tagagamit',
 'logentry-newusers-create2' => 'Lumikha si $1 ng isang kuwenta ng tagagamit na $3',
 'logentry-newusers-autocreate' => 'Kusang nalikha ang akawnt na $1',
-'newuserlog-byemail' => 'Ipinadala ang hudyat sa pamamagitan ng e-liham',
+'rightsnone' => '(wala)',
 
 # Feedback
 'feedback-bugornote' => 'Kung handa ka nang detalyadong maglarawan ng isang suliraning teknikal mangyaring [$1 iulat ang sira].
index 1f0a15a..bb33363 100644 (file)
@@ -394,7 +394,7 @@ $messages = array(
 'nstab-project' => 'Нахшә бәрәдә',
 'nstab-image' => 'Фајл',
 'nstab-template' => 'Ғәлиб',
-'nstab-category' => 'Ð\9aаÑ\82егоÑ\80иÑ\98Ó\99',
+'nstab-category' => 'ТиÑ\81пиÑ\80',
 
 # General errors
 'error' => 'Сәһв',
@@ -564,6 +564,10 @@ $messages = array(
 'revdel-restore-deleted' => 'Рәдд кардә быә рәвојәтон',
 'revdel-restore-visible' => 'Чијә рәвојәтон',
 'pagehist' => 'Сәһифә тарых',
+'revdelete-reasonotherlist' => 'Ҹо сәбәб',
+
+# History merging
+'mergehistory-reason' => 'Сәбәб:',
 
 # Merge log
 'revertmerge' => 'Бахш кардеј',
@@ -584,8 +588,10 @@ $messages = array(
 '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]]» бә ым вики-нахшәдә!'''",
+'searchhelp-url' => 'Help:Мындәриҹот',
 'searchprofile-articles' => 'Әсосә сәһифон',
 'searchprofile-project' => 'Че араијшон ијән нахшон сәһифон',
 'searchprofile-images' => 'Мултимедијә',
@@ -601,6 +607,7 @@ $messages = array(
 'search-redirect' => '(Унвони дәгиш кардеј  $1)',
 'search-section' => '(семонә $1)',
 'search-suggest' => 'Еһтимол шымә нәзәрәдә ым гәтејдәбијон: $1',
+'search-interwiki-more' => '(һәнијән)',
 'searchrelated' => 'ангыл кардә быә',
 'searchall' => 'Һәммәј',
 'showingresultsheader' => "{{PLURAL:$5|Нәтиҹә'''$1''' из '''$3'''|Нәтиҹон '''$1 — $2''' че '''$3'''}} бо '''$4'''",
@@ -628,8 +635,8 @@ $messages = array(
 'prefs-files' => 'Фајлон',
 'prefs-custom-css' => 'Хысуси CSS',
 'youremail' => 'E-номә:',
-'username' => 'Иштирокәкә ном:',
-'uid' => 'Иштирокәкә ID:',
+'username' => '{{GENDER:$1|Иштирокәкә ном}}:',
+'uid' => '{{GENDER:$1|Иштирокәкә}} ID:',
 'yourrealname' => 'Шымә әсыл ном:',
 'yourlanguage' => 'Зывон:',
 'email' => 'E-номә',
@@ -642,6 +649,9 @@ $messages = array(
 # Groups
 'group-user' => 'Иштирокәкон',
 
+# Special:Log/newusers
+'newuserlogpage' => 'Иштирокәкон ғеидијоти журнал',
+
 # Associated actions - in the sentence "You do not have permission to X"
 'action-edit' => 'Ым сәһифә сәрост кардеј',
 
@@ -767,9 +777,6 @@ $messages = array(
 # Special:LinkSearch
 'linksearch-line' => '$2-ку сәбон вардә бә $1',
 
-# Special:Log/newusers
-'newuserlogpage' => 'Иштирокәкон ғеидијоти журнал',
-
 # Special:ListGroupRights
 'listgrouprights-members' => '(иштирокәкон сијоһи)',
 
@@ -777,7 +784,7 @@ $messages = array(
 'emailuser' => 'Номә бә иштирокәкә',
 
 # Watchlist
-'watchlist' => 'ЧÑ\8bмÑ\8b Ð½оғо доә сијоһи',
+'watchlist' => 'Ð\9dоғо доә сијоһи',
 'mywatchlist' => 'Чәшәвәно кардә сијоһи',
 'watchlistfor2' => 'Бо $1 $2',
 'watch' => 'Думотоно егыниеј',
index e9d1752..afaeb6c 100644 (file)
@@ -385,7 +385,6 @@ Ko e ʻuhinga loka ko e $1 ia.",
 'templatesused' => 'Ngaahi sīpinga ʻoku ngāueʻaki he kupú ni:',
 'templatesusedpreview' => 'Ngaahi sīpinga ʻoku ngāueʻaki he vakaí ni:',
 'templatesusedsection' => 'Ngaahi sīpinga ʻoku ngāueʻaki he kongá ni:',
-'nocreatetitle' => 'ʻOku fakangatangata ʻa e fakatupu ʻo e peesi.',
 'nocreatetext' => 'Naʻe fakangatangata ʻe he tuʻuʻangá ni ʻa e lava ke fakatupu ha peesi foʻou. ʻOku ke lava ke foki pea fatu ha peesi tuʻu, pe [[Special:UserLogin|kau-ki-ai, pe fakatupu ha tohi-kau-ki-ai]].',
 
 # Account creation failure
@@ -496,10 +495,13 @@ Ko e ʻuhinga loka ko e $1 ia.",
 'group-sysop-member' => 'Pule fakafounga',
 'group-bureaucrat-member' => 'Pulelahi',
 
+# Special:Log/newusers
+'newuserlogpage' => 'Tohinoa ʻo e fakatupu kau ʻetita',
+'newuserlogpagetext' => 'Ko e tohinoa ʻeni ʻo e fakatupu kau ʻetita.',
+
 # User rights log
 'rightslog' => 'Tohinoa ʻo e kau ʻetita honau maʻu mafai',
 'rightslogtext' => 'Ko e tohinoa ʻeni ʻo e ngaah liliu ʻo e kau ʻetita ʻenau maʻu mafai',
-'rightsnone' => '(hala)',
 
 # Recent changes
 'recentchanges' => 'Ngaahi toki liliu',
@@ -728,10 +730,6 @@ Also see [[Special:WantedCategories|wanted categories]].',
 'listusersfrom' => 'ʻAsi mai kau ʻetita mei he:',
 'listusers-submit' => 'ʻAsi mai',
 
-# Special:Log/newusers
-'newuserlogpage' => 'Tohinoa ʻo e fakatupu kau ʻetita',
-'newuserlogpagetext' => 'Ko e tohinoa ʻeni ʻo e fakatupu kau ʻetita.',
-
 # E-mail user
 'mailnologin' => 'ʻOku ʻikai ha tuʻasila ke tohila ki ai',
 'emailuser' => 'Tohila ki he ʻetitá ni',
@@ -778,6 +776,9 @@ Kapau ʻaho ʻe taha, te ke fietoʻo ʻa e pēsí mei hoʻo hokohoko leʻo, lomi
 'watching' => 'ʻOku leʻo...',
 'unwatching' => 'ʻOku taʻeleʻo...',
 
+'created' => 'kuo fakatupu',
+'changed' => 'ʻosi liliu',
+
 # Delete
 'deletepage' => 'Tāmateʻi peesi',
 'confirm' => 'Fakamoʻoniʻi',
@@ -1228,4 +1229,7 @@ Kātaki fakapapauʻi te ke fie toe fatu ʻa e kupu ni.",
 # Special:SpecialPages
 'specialpages' => 'Ngaahi peesi makehe',
 
+# New logging system
+'rightsnone' => '(hala)',
+
 );
index 4126a24..39c868d 100644 (file)
@@ -466,9 +466,11 @@ Na tu yu tok tru nau olsem yu raitim dispela yu yet, o yu kisim long wanpela hap
 'right-delete' => 'Rausim ol pes',
 'right-suppressionlog' => 'Lukim ol praivet ripot',
 
+# Special:Log/newusers
+'newuserlogpage' => 'Ripot long ol nupela yusa',
+
 # User rights log
 'rightslog' => 'Ripot long ol pawa bilong ol yusa',
-'rightsnone' => 'i nogat wanpela',
 
 # Associated actions - in the sentence "You do not have permission to X"
 'action-read' => 'ridim dispela pes',
@@ -608,9 +610,6 @@ Also see [[Special:WantedCategories|wanted categories]].',
 # Special:ListUsers
 'listusers-submit' => 'Soim',
 
-# Special:Log/newusers
-'newuserlogpage' => 'Ripot long ol nupela yusa',
-
 # Special:ListGroupRights
 'listgrouprights-group' => 'Grup',
 'listgrouprights-members' => '(lista bilong ol memba)',
@@ -655,6 +654,8 @@ Sapos yu laik rausim dispela pes long lukautbuk bilong yu bihain, paitim \"Pinis
 'enotif_reset' => 'Makim olgeta pes olsem mi lukim pinis',
 'enotif_impersonal_salutation' => 'yusa long {{SITENAME}}',
 'enotif_anon_editor' => 'IP yusa $1',
+'created' => 'i kirapim',
+'changed' => 'i senisim',
 
 # Delete
 'deletepage' => 'Rausim dispela pes',
@@ -881,6 +882,9 @@ Yu inap lukim as tok bilong em',
 # HTML forms
 'htmlform-selectorother-other' => 'Narapela',
 
+# New logging system
+'rightsnone' => 'i nogat wanpela',
+
 # Search suggestions
 'searchsuggest-search' => 'Painim',
 
index 69405ee..ab954fe 100644 (file)
@@ -123,7 +123,7 @@ $specialPageAliases = array(
        'Listusers'                 => array( 'KullanıcıListesi', 'KullanıcıListele' ),
        'Lockdb'                    => array( 'DBKilitle', 'VeritabanıKilitle' ),
        'Log'                       => array( 'Günlük', 'Günlükler', 'Kayıt', 'Kayıtlar' ),
-       'Lonelypages'               => array( 'YalnızSayfalar' ),
+       'Lonelypages'               => array( 'YalnızSayfalar', 'YetimSayfalar' ),
        'Longpages'                 => array( 'UzunSayfalar' ),
        'MergeHistory'              => array( 'GeçmişBirleştir' ),
        'MIMEsearch'                => array( 'MIMEArama' ),
@@ -907,6 +907,7 @@ Geçici şifre: $2',
 'changeemail-oldemail' => 'Mevcut E-posta adresi:',
 'changeemail-newemail' => 'Yeni E-posta adresi:',
 'changeemail-none' => '(yok)',
+'changeemail-password' => '{{SITENAME}} parolanız:',
 'changeemail-submit' => "E-posta'yı değiştir",
 'changeemail-cancel' => 'İptal',
 
@@ -1075,7 +1076,6 @@ Son günlük girdisi referans amaçlı aşağıda verilmiştir:",
 'template-semiprotected' => '(yarı-korumada)',
 'hiddencategories' => 'Bu sayfa {{PLURAL:$1|1 gizli kategoriye|$1 gizli kategoriye}} mensuptur:',
 'edittools' => '<!-- Buradaki metin düzenleme ve yükleme formlarının altında gösterilecektir. -->',
-'nocreatetitle' => 'Sayfa oluşturulması sınırlandı',
 'nocreatetext' => '{{SITENAME}}, yeni sayfa oluşturulabilmesini engelledi.
 Geri giderek varolan sayfayı değiştirebilirsiniz ya da kayıtlı iseniz [[Special:UserLogin|oturum açabilir]], değilseniz [[Special:UserLogin|kayıt olabilirsiniz]].',
 'nocreate-loggedin' => 'Yeni sayfalar oluşturmaya yetkiniz yok.',
@@ -1466,9 +1466,9 @@ Kullanabileceğiniz rastgele-üretilmiş bir değer: $1',
 'prefs-emailconfirm-label' => 'E-posta doğrulaması:',
 'prefs-textboxsize' => 'Değiştirme penceresinin boyutu',
 'youremail' => 'E-posta:',
-'username' => 'Kullanıcı adı:',
-'uid' => 'Kayıt numarası:',
-'prefs-memberingroups' => '{{PLURAL:$1|Grup|Grup}} üyesi:',
+'username' => '{{GENDER:$1|Kullanıcı adı}}:',
+'uid' => '{{GENDER:$1|Kullanıcı}} kimliği:',
+'prefs-memberingroups' => '{{GENDER:$2|Üye}} {{PLURAL:$1|group|grupları}}:',
 'prefs-registration' => 'Kayıt zamanı:',
 'yourrealname' => 'Gerçek adınız:',
 'yourlanguage' => 'Dil:',
@@ -1616,12 +1616,13 @@ Diğer kullanıcılar sizinle bu yolla iletişime geçtiğinde e-posta adresiniz
 'right-sendemail' => 'Diğer kullanıcılara e-posta gönder',
 'right-passwordreset' => 'Parola sıfırlama e-postalarını görür',
 
+# Special:Log/newusers
+'newuserlogpage' => 'Yeni kullanıcı kayıtları',
+'newuserlogpagetext' => 'En son kaydolan kullanıcı kayıtları.',
+
 # User rights log
 'rightslog' => 'Kullanıcı hakları kayıtları',
 'rightslogtext' => 'Kullanıcı hakları değişiklikleri kayıtları.',
-'rightslogentry' => '$1 adlı kullanıcının yetkileri $2 iken $3 olarak değiştirildi',
-'rightslogentry-autopromote' => '$2 otomatik olarak yükseltilerek $3 yapıldı.',
-'rightsnone' => '(hiçbiri)',
 
 # Associated actions - in the sentence "You do not have permission to X"
 'action-read' => 'bu sayfayı okumaya',
@@ -2224,10 +2225,6 @@ Desteklenen iletişim kuralları: <code>$1</code> (bunların hiçbirini aramanı
 'activeusers-hidesysops' => 'Yöneticileri gizle',
 'activeusers-noresult' => 'Kullanıcı bulunamadı.',
 
-# Special:Log/newusers
-'newuserlogpage' => 'Yeni kullanıcı kayıtları',
-'newuserlogpagetext' => 'En son kaydolan kullanıcı kayıtları.',
-
 # Special:ListGroupRights
 'listgrouprights' => 'Kullanıcı grubu hakları',
 'listgrouprights-summary' => 'Aşağıdaki bu vikide tanımlanan kullanıcı gruplarının, ilgili erişim haklarıyla birlikte listesidir.
@@ -2285,7 +2282,7 @@ Bireysel haklarla ilgili [[{{MediaWiki:Listgrouprights-helppage}}|daha fazla bil
 'usermessage-editor' => 'Sistem habercisi',
 
 # Watchlist
-'watchlist' => 'İzleme listem',
+'watchlist' => 'İzleme listesi',
 'mywatchlist' => 'İzleme listesi',
 'watchlistfor2' => '$1 için $2',
 'nowatchlist' => 'İzleme listesinde hiçbir madde bulunmuyor.',
@@ -2328,34 +2325,47 @@ Sayfayı izleme listenizden çıkarmak istediğinizde "sayfayı izlemeyi durdur"
 'enotif_mailer' => '{{SITENAME}} Bildirim Postası',
 'enotif_reset' => 'Tüm sayfaları ziyaret edilmiş olarak işaretle',
 'enotif_impersonal_salutation' => '{{SITENAME}} kullanıcı',
+'enotif_subject_deleted' => '{{SITENAME}} sayfası $1, $2 tarafından {{GENDER:$2|silindi}}.',
+'enotif_subject_created' => '{{SITENAME}} sayfası $1, $2 tarafından {{GENDER:$2|açıldı}}.',
+'enotif_subject_moved' => '{{SITENAME}} sayfası $1, $2 tarafından {{GENDER:$2|taşındı}}.',
+'enotif_subject_restored' => '{{SITENAME}} sayfası $1, $2 tarafından {{GENDER:$2|geri getirildi}}.',
+'enotif_subject_changed' => '{{SITENAME}} sayfası $1, $2 tarafından {{GENDER:$2|değiştirildi}}.',
+'enotif_body_intro_deleted' => '{{SITENAME}} sayfası $1, $2 tarafından $PAGEEDITDATE tarihinde {{GENDER:$2|silindi}}, bakınız: $3.',
+'enotif_body_intro_created' => '{{SITENAME}} sayfası $1, $2 tarafından $PAGEEDITDATE tarihinde {{GENDER:$2|açıldı}}, mevcut revizyon için bakınız: $3.',
+'enotif_body_intro_moved' => '{{SITENAME}} sayfası $1, $2 tarafından $PAGEEDITDATE tarihinde {{GENDER:$2|taşındı}}, mevcut revizyon için bakınız: $3.',
+'enotif_body_intro_restored' => '{{SITENAME}} sayfası $1, $2 tarafından $PAGEEDITDATE tarihinde {{GENDER:$2|geri getirildi}}, mevcut revizyon için bakınız: $3.',
+'enotif_body_intro_changed' => '{{SITENAME}} sayfası $1, $2 tarafından $PAGEEDITDATE tarihinde {{GENDER:$2|değiştirildi}}, mevcut revizyon için bakınız: $3.',
 'enotif_lastvisited' => "Son ziyaretinizden bu yana olan tüm değişiklikleri görmek için $1'e bakın.",
 'enotif_lastdiff' => 'Bu değişikliği görmek için, $1 sayfasına bakınız.',
 'enotif_anon_editor' => 'anonim kullanıcı $1',
 'enotif_body' => 'Sayın $WATCHINGUSERNAME,
 
-{{SITENAME}} bünyesindeki $PAGETITLE başlıklı sayfa $PAGEEDITDATE tarihinde $PAGEEDITOR tarafından $CHANGEDORCREATED. Sayfanın son haline $PAGETITLE_URL adresinden ulaşabilirsiniz.
-
-$NEWPAGE
+$PAGEINTRO $NEWPAGE
 
-Değişikliği yapan kullanıcının açıklaması: $PAGESUMMARY $PAGEMINOREDIT
+Editörün girdiği özet: $PAGESUMMARY $PAGEMINOREDIT
 
-Sayfayı değiştiren kullanıcıya erişim bilgileri:
-E-posta: $PAGEEDITOR_EMAIL
-Viki: $PAGEEDITOR_WIKI
+Editörün iletişim bilgileri:
+e-posta: $PAGEEDITOR_EMAIL
+viki: $PAGEEDITOR_WIKI
 
-Bahsi geçen sayfayı ziyaret edinceye kadar sayfayla ilgili başka değişiklik bildirimi gönderilmeyecektir. İzleme listenizdeki tüm sayfalar bildirim durumlarını sıfırlayabilirsiniz.
+Bahsi geçen sayfayı ziyaret edinceye kadar sayfayla ilgili başka bildirim gönderilmeyecektir. Ayrıca izleme listenizdeki tüm sayfaların bildirim durumlarını sıfırlayabilirsiniz.
 
-              {{SITENAME}} sitesinin uyarı sistemi.
+{{SITENAME}} bildirim sistemi
 
 --
-İzleme listesi ayarlarınızı değiştirmek için:
+E-posta bildirim ayarlarınızı değiştirmek için aşağıdaki sayfayı ziyaret ediniz:
+{{canonicalurl:{{#special:Preferences}}}}
+
+İzleme listesi ayarlarınızı değiştirmek için aşağıdaki sayfayı ziyaret ediniz:
 {{canonicalurl:{{#special:EditWatchlist}}}}
 
-Sayfayı izleme listenizden silmek için:
+Sayfayı izleme listenizden silmek için aşağıdaki sayfayı ziyaret ediniz:
 $UNWATCHURL
 
 Geri bildirim ve daha fazla yardım için:
 {{canonicalurl:{{MediaWiki:Helppage}}}}',
+'created' => 'oluşturuldu',
+'changed' => 'değiştirildi',
 
 # Delete
 'deletepage' => 'Sayfayı sil',
@@ -2395,6 +2405,7 @@ dikkatle devam edin.',
 'rollback' => 'değişiklikleri geri al',
 'rollback_short' => 'geri al',
 'rollbacklink' => 'geridöndür',
+'rollbacklinkcount' => '$1 {{PLURAL:$1|değişikliği|değişikliği}} geri döndür',
 'rollbackfailed' => 'geri alma işlemi başarısız',
 'cantrollback' => 'Sayfaya son katkıda bulunan kullanıcı, sayfaya katkıda bulunmuş tek kişi olduğu için, değişiklikler geri alınamıyor.',
 'alreadyrolled' => '[[User:$2|$2]] ([[User talk:$2|Talk]]{{int:pipe-separator}}[[Special:Contributions/$2|{{int:contribslink}}]]) tarafından [[:$1]] sayfasında yapılmış son değişiklik geriye alınamıyor;
@@ -2507,7 +2518,8 @@ Revizyon onarılmış veya arşivden silinmiş olabilir ya da sahip olduğunuz b
 'undeletedrevisions' => 'Toplam {{PLURAL:$1|1 kayıt|$1 kayıt}} geri getirildi.',
 'undeletedrevisions-files' => '{{PLURAL:$1|1 revizyon|$1 revizyon}} ve {{PLURAL:$2|1 dosya|$2 dosya}} eski konumuna getirildi',
 'undeletedfiles' => '{{PLURAL:$1|1 dosya|$1 dosya}} geri getirildi.',
-'cannotundelete' => 'Sayfayı ya da medyayı sizden önce bir başka kullanıcı geri getirdiğinden dolayı sizin geri getirme işleminiz geçersiz.',
+'cannotundelete' => 'Silme başarısız oldu:
+$1',
 'undeletedpage' => "'''$1 sayfası geri getirildi'''
 
 Önceki silme ve geri getirme işlemleri için [[Special:Log/delete|silme kayıtları]]na bakınız.",
@@ -2670,7 +2682,7 @@ Engelleme günlüğü referans için aşağıda sağlanmıştır:',
 Gizleme günlüğü referans için aşağıda sağlanmıştır:',
 'blocklogentry' => ', [[$1]] kullanıcısını engelledi, engelleme süresi: $2 $3',
 'reblock-logentry' => '[[$1]] için bitiş tarihi $2 $3 olmak üzere engelleme ayarlarını değiştirdi',
-'blocklogtext' => 'Burada kullanıcı erişimine yönelik engelleme ya da engelleme kaldırma kayıtları listelenmektedir. Otomatik  IP adresi engellemeleri listeye dahil değildir. Şu anda erişimi durdurulmuş kullanıcıları [[Special:BlockList|IP engelleme listesi]] sayfasından görebilirsiniz.',
+'blocklogtext' => 'Burada kullanıcı erişimine yönelik engelleme ya da engelleme kaldırma kayıtları listelenmektedir. Otomatik  IP adresi engellemeleri listeye dahil değildir. Şu anda erişimi durdurulmuş kullanıcıları [[Special:BlockList|engelleme listesi]] sayfasından görebilirsiniz.',
 'unblocklogentry' => '$1 kullanıcının engellemesi kaldırıldı',
 'block-log-flags-anononly' => 'sadece anonim kullanıcılar',
 'block-log-flags-nocreate' => 'hesap yaratımı engellendi',
@@ -2920,6 +2932,8 @@ Geçici dosya kayıp.',
 
 # JavaScriptTest
 'javascripttest' => 'JavaScript denemesi',
+'javascripttest-title' => '$1 testleri çalışıyor',
+'javascripttest-qunit-heading' => 'MediaWiki JavaScript QUnit deneme paketi',
 
 # Tooltip help for the actions
 'tooltip-pt-userpage' => 'Kullanıcı sayfanız',
@@ -3056,6 +3070,9 @@ Geçici dosya kayıp.',
 'pageinfo-contentpage' => 'Bir içerik sayfası sayılır',
 'pageinfo-contentpage-yes' => 'Evet',
 'pageinfo-protect-cascading-yes' => 'Evet',
+'pageinfo-protect-cascading-from' => 'Korumalar üzerinden geçiş',
+'pageinfo-category-info' => 'Kategori bilgileri',
+'pageinfo-category-pages' => 'Sayfa sayısı',
 
 # Skin names
 'skinname-standard' => 'Klasik',
@@ -3106,6 +3123,7 @@ Bunu çalıştırmak, sisteminizi tehlikeye atabilir.",
 'file-info-size-pages' => '$1 × $2 piksel, dosya boyutu: $3, MIME tipi: $4, $5 {{PLURAL:$5|sayfa|sayfa}}',
 'file-nohires' => 'Daha yüksek çözünürlük yok.',
 'svg-long-desc' => 'SVG dosyası, sözde $1 × $2 piksel, dosya boyutu: $3',
+'svg-long-error' => 'Geçersiz SVG dosyası: $1',
 'show-big-image' => 'Tam çözünürlük',
 'show-big-image-preview' => 'Ön izleme boyutu: $1.',
 'show-big-image-other' => 'Diğer {{PLURAL:$2|çözünürlük|çözünürlükleri}}: $1.',
@@ -3301,6 +3319,7 @@ Diğerleri varsayılan olarak gizlenecektir.
 'exif-source' => 'Kaynak',
 'exif-urgency' => 'Aciliyet',
 'exif-fixtureidentifier' => 'Fikstür adı',
+'exif-locationdest' => 'Yerin konumu',
 'exif-contact' => 'İletişim bilgileri',
 'exif-writer' => 'Yazar',
 'exif-languagecode' => 'Dil',
@@ -3891,7 +3910,7 @@ Resimler tam çözünürlükte görüntülenir, diğer dosya tipleri ilgili prog
 'logentry-newusers-create' => 'Kullanıcı hesabı $1 oluşturdu',
 'logentry-newusers-create2' => '$1 kullanıcı hesabı oluşturdu $3',
 'logentry-newusers-autocreate' => '$1 hesabı otomatik olarak oluşturuldu',
-'newuserlog-byemail' => 'e-posta yoluyla şifre gönderilmiştir',
+'rightsnone' => '(hiçbiri)',
 
 # Feedback
 'feedback-subject' => 'Konu:',
@@ -3958,6 +3977,4 @@ Resimler tam çözünürlükte görüntülenir, diğer dosya tipleri ilgili prog
 'duration-centuries' => '$1 {{PLURAL:$1|yüzyıl|yüzyıl}}',
 'duration-millennia' => '$1 {{PLURAL:$1|bin yıl|bin yıl}}',
 
-# Unknown messages
-'svg-long-error' => 'Geçersiz SVG dosyası: $1',
 );
index 3e9b3aa..6208505 100644 (file)
@@ -464,6 +464,9 @@ Legend: '''({{int:cur}})''' = difference with latest revision, '''({{int:last}})
 'group-user' => 'Hadome',
 'group-all' => '(kulle)',
 
+# Special:Log/newusers
+'newuserlogpage' => 'User creation log',
+
 # Associated actions - in the sentence "You do not have permission to X"
 'action-edit' => 'Mşaḥlaf iFaṭaṭe',
 
@@ -585,9 +588,6 @@ The description on its [$2 file description page] there is shown below.',
 # Special:ListUsers
 'listusers-submit' => 'Maḥway',
 
-# Special:Log/newusers
-'newuserlogpage' => 'User creation log',
-
 # Special:ListGroupRights
 'listgrouprights-group' => 'Gudo',
 'listgrouprights-rights' => 'Ḥaqat',
index 56aab08..42d9c49 100644 (file)
@@ -564,6 +564,9 @@ Adiresi ya wena ya e-mail yitunberile loko van'wana va bula na wena.",
 'right-move-subpages' => "yisa matluka lawa na matluka-ntsongo ya wona, kun'wana",
 'right-delete' => 'Sula matluka lawa',
 
+# Special:Log/newusers
+'newuserlogpage' => 'Nghula ya nxaxamelo wa ku tumbuluxiwa ka vatirhisi',
+
 # Associated actions - in the sentence "You do not have permission to X"
 'action-read' => 'hlaya tluka leri',
 'action-edit' => 'Lulamisa tluka leri',
@@ -690,9 +693,6 @@ Nhlamuselo ya yona leyi nge ndzeni ka [$2 tluka ro hlamusela] hi yona leyi kombi
 'linksearch-ok' => 'Lava',
 'linksearch-line' => '$1 yi khwekerisiwe kusuka eka $2',
 
-# Special:Log/newusers
-'newuserlogpage' => 'Nghula ya nxaxamelo wa ku tumbuluxiwa ka vatirhisi',
-
 # Special:ListGroupRights
 'listgrouprights-members' => '(nxaxamelo wa valandzeri)',
 
index fcf2b51..121decf 100644 (file)
@@ -926,7 +926,6 @@ $2
 'template-protected' => '(якланган)',
 'template-semiprotected' => '(өлешчә якланган)',
 'hiddencategories' => 'Бу бит $1 {{PLURAL:$1|яшерен төркемгә}} керә:',
-'nocreatetitle' => 'Битләр төзү чикләнгән',
 'nocreatetext' => '{{SITENAME}}: сайтта яңа битләр төзү чикләнгән.
 Сез артка кайтып, төзелгән битне үзгәртә аласыз. [[Special:UserLogin|Керергә яисә теркәлергә]] тәгъдим ителә.',
 'nocreate-loggedin' => 'Сезгә яңа битләр төзү хокукы бирелмәгән.',
@@ -1344,10 +1343,12 @@ $1",
 'right-delete' => 'битләрне бетерү',
 'right-editinterface' => 'Кулланучы интерфейсын үзгәртү',
 
+# Special:Log/newusers
+'newuserlogpage' => 'Кулланучыларны теркәү көндәлеге',
+'newuserlogpagetext' => 'Яңа теркәлгән кулланучылар исемлеге',
+
 # User rights log
 'rightslog' => 'Кулланучының хокуклары көндәлеге',
-'rightslogentry' => '$1 кулланучысын $2 группасыннан $3 группасына күчерде',
-'rightsnone' => '(юк)',
 
 # Associated actions - in the sentence "You do not have permission to X"
 'action-read' => 'бу битне укырга',
@@ -1704,10 +1705,6 @@ PICT # төрле
 'activeusers-hidesysops' => 'Идарәчеләрне яшер',
 'activeusers-noresult' => 'Кулланучылар табылмады.',
 
-# Special:Log/newusers
-'newuserlogpage' => 'Кулланучыларны теркәү көндәлеге',
-'newuserlogpagetext' => 'Яңа теркәлгән кулланучылар исемлеге',
-
 # Special:ListGroupRights
 'listgrouprights' => 'Кулланучы төркемнәренең хокуклары',
 'listgrouprights-group' => 'Төркем',
@@ -1717,7 +1714,10 @@ PICT # төрле
 
 # E-mail user
 'emailuser' => 'Бу кулланучыга хат',
+'emailuser-title-target' => '{{GENDER:$1|Кулланучыга}} электрон хат язу',
+'emailuser-title-notarget' => 'Кулланучыга хат җибәрү',
 'emailpage' => 'Кулланучыга хат җибәрү',
+'emailpagetext' => 'Әлеге форма ярдәмендә {{GENDER:$1|кулланучының}} электрон почта адресына хат җибәрергә мөмкин. Җибәрелгән адрес исемендә Сезнең [[Special:Preferences|көйләнмәләрдә]] күрсәтелгән адресыгыз күрсәтеләчәк, шуның ярдәмендә Сез ул кулланучы белән турыдан-туры сөйләшә аласыз.',
 'defemailsubject' => '{{SITENAME}}: хат',
 'noemailtitle' => 'Электрон почта адресы юк',
 'noemailtext' => 'Бу кулланучы чын электрон әрҗә адресын күрсәтмәде.',
@@ -1790,6 +1790,8 @@ $UNWATCHURL
 
 Элемтә һәм ярдәм:
 {{canonicalurl:{{MediaWiki:Helppage}}}}',
+'created' => 'төзергән',
+'changed' => 'үзгәртелде',
 
 # Delete
 'deletepage' => 'Битне бетерү',
@@ -2529,7 +2531,7 @@ $1',
 'logentry-newusers-create' => '$1 хисап язмасы төзеде',
 'logentry-newusers-create2' => '$1 $3 кулланучы хисап язмасын төзеде',
 'logentry-newusers-autocreate' => 'Автоматик рәвештә $1 хисап язмасы төзелде.',
-'newuserlog-byemail' => 'серсүз электрон почта аша җибәрелде',
+'rightsnone' => '(юк)',
 
 # Feedback
 'feedback-bugornote' => 'Әгәр дә сез техник проблеманы җентекләп тасвирларга әзер икәнсез, зинһар өчен, [$1 хата турында хәбәр итегез].
index dbb8b1f..167a008 100644 (file)
@@ -731,7 +731,6 @@ Asta küzätü köndälegendäge soñğı yazma birelgän:",
 'template-protected' => '(yaqlanğan)',
 'template-semiprotected' => '(öleşçä yaqlanğan)',
 'hiddencategories' => 'Bu bit $1 {{PLURAL:$1|yäşeren törkemgä}} kerä:',
-'nocreatetitle' => 'Bitlär tözü çiklängän',
 'nocreatetext' => '{{SITENAME}}: saytta yaña bitlär tözü çiklängän.
 Sez artqa qaytıp, tözelgän bitne üzgärtä alasız. [[Special:UserLogin|Kerergä yäisä terkälergä]] täğdim itelä.',
 'nocreate-loggedin' => 'Sezgä yaña bitlär tözü xoquqı birelmägän.',
@@ -1114,10 +1113,12 @@ Ul $1 {{PLURAL:$1|xäreftän}} kübräk bulırğa tieş tügel.',
 'right-delete' => 'bitlärne beterü',
 'right-editinterface' => 'Qullanuçı interfeysın üzgärtü',
 
+# Special:Log/newusers
+'newuserlogpage' => 'Qullanuçılarnı terkäw köndälege',
+'newuserlogpagetext' => 'Yaña terkälgän qullanuçılar isemlege',
+
 # User rights log
 'rightslog' => 'Qullanuçınıñ xoquqları köndälege',
-'rightslogentry' => '$1 qullanuçısın $2 gruppasınnan $3 gruppasına küçerde',
-'rightsnone' => '(yuq)',
 
 # Associated actions - in the sentence "You do not have permission to X"
 'action-edit' => 'bu bitne üzgärtergä',
@@ -1464,10 +1465,6 @@ Asta [[Special:UnusedCategories|qullanılmağan törkemnär]] kärsätelgän.
 'activeusers-hidesysops' => 'İdaräçelärne yäşer',
 'activeusers-noresult' => 'Qullanuçılar tabılmadı.',
 
-# Special:Log/newusers
-'newuserlogpage' => 'Qullanuçılarnı terkäw köndälege',
-'newuserlogpagetext' => 'Yaña terkälgän qullanuçılar isemlege',
-
 # Special:ListGroupRights
 'listgrouprights' => 'Qullanuçı törkemnäreneñ xoquqları',
 'listgrouprights-group' => 'Törkem',
@@ -1538,6 +1535,8 @@ $UNWATCHURL
 
 Elemtä häm yärdäm:
 {{canonicalurl:{{MediaWiki:Helppage}}}}',
+'created' => 'tözergän',
+'changed' => 'üzgärtelde',
 
 # Delete
 'deletepage' => 'Bitne beterü',
@@ -2187,6 +2186,6 @@ Yulnıñ berençe sıltaması quyma öçen tıyılğan räsemgä sıltama bulır
 
 # New logging system
 'revdelete-restricted' => 'çikläwlär idaräçelärgä dä qullanıla',
-'newuserlog-byemail' => 'sersüz elektron poçta aşa cibärelde',
+'rightsnone' => '(yuq)',
 
 );
index 7ebbfb3..6467684 100644 (file)
  * @author לערי ריינהארט
  */
 
+$fallback = 'ru';
+$fallback8bitEncoding = "windows-1251";
+
 $namespaceNames = array(
        NS_MEDIA            => 'Медиа',
        NS_SPECIAL          => 'Тускай',
        NS_TALK             => 'Чугаа',
        NS_USER             => 'Aжыглакчы',
-       NS_USER_TALK        => 'AжÑ\8bглакÑ\87Ñ\8b\87Ñ\83гаазÑ\83',
-       NS_PROJECT_TALK     => '$1_Ñ\87Ñ\83гаазÑ\83',
+       NS_USER_TALK        => 'AжÑ\8bглакÑ\87Ñ\8b\87Ñ\83гаазÑ\8b',
+       NS_PROJECT_TALK     => '$1_Ñ\87Ñ\83гаазÑ\8b',
        NS_FILE             => 'Файл',
-       NS_FILE_TALK        => 'Файл_Ñ\87Ñ\83гаазÑ\83',
+       NS_FILE_TALK        => 'Файл_Ñ\87Ñ\83гаазÑ\8b',
        NS_MEDIAWIKI        => 'МедиаВики',
-       NS_MEDIAWIKI_TALK   => 'Ð\9cедиаÐ\92ики_Ñ\87Ñ\83гаазÑ\83',
-       NS_TEMPLATE         => 'Ð¥Ñ\8dÑ\8d',
-       NS_TEMPLATE_TALK    => 'Ð¥Ñ\8dÑ\8d\87Ñ\83гаазÑ\83',
+       NS_MEDIAWIKI_TALK   => 'Ð\9cедиаÐ\92ики_Ñ\87Ñ\83гаазÑ\8b',
+       NS_TEMPLATE         => 'Ð\9cайÑ\8bк',
+       NS_TEMPLATE_TALK    => 'Ð\9cайÑ\8bк_Ñ\87Ñ\83гаазÑ\8b',
        NS_HELP             => 'Дуза',
-       NS_HELP_TALK        => 'Ð\94Ñ\83за_Ñ\87Ñ\83гаазÑ\83',
-       NS_CATEGORY         => 'Ð\91өлүк',
-       NS_CATEGORY_TALK    => 'Ð\91өлүк_Ñ\87Ñ\83гаазÑ\83',
+       NS_HELP_TALK        => 'Ð\94Ñ\83за_Ñ\87Ñ\83гаазÑ\8b',
+       NS_CATEGORY         => 'Ð\9aаÑ\82егоÑ\80иÑ\8f',
+       NS_CATEGORY_TALK    => 'Ð\9aаÑ\82егоÑ\80иÑ\8f\87Ñ\83гаазÑ\8b',
 );
 
-$namespaceAliases = array(
-       'Aжыглакчы_чугаа' => NS_USER_TALK,
-       '$1_чугаа'        => NS_PROJECT_TALK,
-       'Чурук'           => NS_FILE,
-       'Чурук_чугаа'     => NS_FILE_TALK,
-       'МедиаВики_чугаа' => NS_MEDIAWIKI_TALK,
-       'Хээ_чугаа'       => NS_TEMPLATE_TALK,
-       'Дуза_чугаа'      => NS_HELP_TALK,
-       'Бөлүк_чугаа'     => NS_CATEGORY_TALK,
+
+$magicWords = array(
+       'redirect'                  => array( '0', '#ШИГЛЕДИР', '#REDIRECT' ),
+       'notoc'                     => array( '0', '__ДОПЧУЗУЧОК__', '__NOTOC__' ),
+       'toc'                       => array( '0', '__ДОПЧУЗУ__', '__TOC__' ),
+       'currentmonth'              => array( '1', 'АМГЫАЙ', 'АМГЫАЙ2', 'CURRENTMONTH', 'CURRENTMONTH2' ),
+       'currentmonth1'             => array( '1', 'АМГЫАЙ1', 'CURRENTMONTH1' ),
+       'currentmonthname'          => array( '1', 'АМГЫАЙНЫҢАДЫ', 'CURRENTMONTHNAME' ),
+       'currentday'                => array( '1', 'АМГЫХҮН', 'CURRENTDAY' ),
+       'currentday2'               => array( '1', 'АМГЫХҮН2', 'CURRENTDAY2' ),
+       'currentdayname'            => array( '1', 'АМГЫХҮННҮҢАДЫ', 'CURRENTDAYNAME' ),
+       'currentyear'               => array( '1', 'АМГЫЧЫЛ', 'CURRENTYEAR' ),
+       'currenttime'               => array( '1', 'АМГЫҮЕ', 'CURRENTTIME' ),
+       'currenthour'               => array( '1', 'АМГЫШАК', 'CURRENTHOUR' ),
+       'numberofpages'             => array( '1', 'АРЫННАРНЫҢСАНЫ', 'NUMBEROFPAGES' ),
+       'numberofarticles'          => array( '1', 'ЧҮҮЛДЕРНИҢСАНЫ', 'NUMBEROFARTICLES' ),
+       'numberoffiles'             => array( '1', 'ФАЙЛДАРНЫҢСАНЫ', 'NUMBEROFFILES' ),
+       'numberofusers'             => array( '1', 'АЖЫГЛАКЧЫЛАРНЫҢСАНЫ', 'NUMBEROFUSERS' ),
+       'numberofedits'             => array( '1', 'ӨСКЕРЛИИШКИННЕРНИҢСАНЫ', 'NUMBEROFEDITS' ),
+       'pagename'                  => array( '1', 'АРЫННЫҢАДЫ', 'PAGENAME' ),
+       'namespace'                 => array( '1', 'АТТАРДЕЛГЕМИ', 'NAMESPACE' ),
+       'namespacee'                => array( '1', 'АТТАРДЕЛГЕМИ2', 'NAMESPACEE' ),
+       'namespacenumber'           => array( '1', 'АТТАРДЕЛГЕМИНИҢСАНЫ', 'NAMESPACENUMBER' ),
+       'talkspace'                 => array( '1', 'ЧУГААДЕЛГЕМИ', 'TALKSPACE' ),
+       'talkspacee'                => array( '1', 'ЧУГААДЕЛГЕМИ2', 'TALKSPACEE' ),
+       'img_right'                 => array( '1', 'оң', 'right' ),
+       'img_left'                  => array( '1', 'солагай', 'left' ),
+       'img_center'                => array( '1', 'төп', 'center', 'centre' ),
+       'sitename'                  => array( '1', 'САЙТТЫҢАДЫ', 'SITENAME' ),
+       'ns'                        => array( '0', 'АД:', 'NS:' ),
+       'nse'                       => array( '0', 'АД2:', 'NSE:' ),
+       'currentweek'               => array( '1', 'АМГЫЧЕДИХОНУК', 'CURRENTWEEK' ),
+       'currentdow'                => array( '1', 'АМГЫЧЕДИХОНУКТУҢХҮНҮ', 'CURRENTDOW' ),
+       'raw'                       => array( '0', 'ЧИГ:', 'RAW:' ),
+       'language'                  => array( '0', '#ДЫЛ:', '#LANGUAGE:' ),
+       'special'                   => array( '0', 'тускай', 'special' ),
+       'tag'                       => array( '0', 'демдек', 'tag' ),
+       'pagesincategory_all'       => array( '0', 'шупту', 'all' ),
+       'pagesincategory_pages'     => array( '0', 'арыннар', 'pages' ),
+       'pagesincategory_files'     => array( '0', 'файлдар', 'files' ),
 );
 
 $bookstoreList = array(
@@ -55,8 +89,6 @@ $bookstoreList = array(
        'Barnes & Noble' => 'http://shop.barnesandnoble.com/bookSearch/isbnInquiry.asp?isbn=$1'
 );
 
-$fallback8bitEncoding = "windows-1251";
-
 $messages = array(
 # User preference toggles
 'tog-underline' => 'Холбааны шыяры:',
@@ -187,10 +219,10 @@ $messages = array(
 'vector-view-create' => 'Чаяары',
 'vector-view-edit' => 'Эдери',
 'vector-view-history' => 'Төөгүнү көөрү',
-'vector-view-view' => 'Номчууру',
+'vector-view-view' => 'Номчуур',
 'vector-view-viewsource' => 'Дөзү бижиин көөрү',
 'actions' => 'Кылыглар',
-'namespaces' => 'Аттар делгеми',
+'namespaces' => 'Ð\90Ñ\82Ñ\82аÑ\80 Ð´ÐµÐ»Ð³ÐµÐ¼Ð½ÐµÑ\80и',
 'variants' => 'Бир янзы',
 
 'errorpagetitle' => 'Алдаг',
@@ -198,7 +230,7 @@ $messages = array(
 'tagline' => '{{SITENAME}} деп веб-сайттан',
 'help' => 'Дуза',
 'search' => 'Диле',
-'searchbutton' => 'Дилээри',
+'searchbutton' => 'Дилээр',
 'go' => 'Баары',
 'searcharticle' => 'Күүcедири',
 'history' => 'Арынның төөгүзү',
@@ -222,12 +254,12 @@ $messages = array(
 'unprotectthispage' => 'Бо арынның камгалалын өскертири',
 'newpage' => 'Чаа арын',
 'talkpage' => 'Бо арын дугайында чугаалажыры',
-'talkpagelinktext' => 'Чугаалажыры',
+'talkpagelinktext' => 'Чугаа',
 'specialpage' => 'Тускай арын',
 'personaltools' => 'Хууда херекселдер',
 'postcomment' => 'Чаа салбыр',
 'articlepage' => 'Допчу арынны көөрү',
-'talk' => 'Чугаалажыры',
+'talk' => 'Чугаа',
 'views' => 'Көрүүшкүннери',
 'toolbox' => 'Херекселдер',
 'userpage' => 'Ажыглакчының арынын көөрү',
@@ -536,7 +568,7 @@ Please check if you want to create/edit this page.',
 
 # Search results
 'searchresults' => 'Түңнелдер',
-'searchresults-title' => '«$1» диле',
+'searchresults-title' => '«$1» Ð´ÐµÐ¿ Ð´Ð¸Ð»Ðµ',
 'prevn' => 'эрткен {{PLURAL:$1|$1}}',
 'nextn' => 'дараазында {{PLURAL:$1|$1}}',
 'prevn-title' => 'Эрткен $1 {{PLURAL:$1|бижик|бижик}}',
@@ -670,8 +702,8 @@ It must not be more than $1 {{PLURAL:$1|character|characters}} long.',
 'right-editusercss' => 'Өске ажыглакчыларның CSS файлдарын өскертири.',
 'right-edituserjs' => 'Өске ажыглакчыларның JavaScript файлдарын өскертири.',
 
-# User rights log
-'rightsnone' => '(чок)',
+# Special:Log/newusers
+'newuserlogpage' => 'Чаа ажыглакчы кырында журнал',
 
 # Associated actions - in the sentence "You do not have permission to X"
 'action-read' => 'бо арынны номчууру',
@@ -726,7 +758,7 @@ It must not be more than $1 {{PLURAL:$1|character|characters}} long.',
 'recentchangeslinked-to' => 'Айыткан арынче шөлүп турар арыннарга өскерилгелерни көргүзер',
 
 # Upload
-'upload' => 'Файлды салыры',
+'upload' => 'Файл чүдүрер',
 'uploadbtn' => 'Файлды салыры',
 'uploadnologin' => 'Кирбес',
 'uploaderror' => 'Кииреринге алдаг',
@@ -899,9 +931,6 @@ It must not be more than $1 {{PLURAL:$1|character|characters}} long.',
 'activeusers-hidebots' => 'Роботтарны чажырары',
 'activeusers-hidesysops' => 'Эргелекчыларны чажырары',
 
-# Special:Log/newusers
-'newuserlogpage' => 'Чаа ажыглакчы кырында журнал',
-
 # Special:ListGroupRights
 'listgrouprights-group' => 'Бөлүк кижилер',
 'listgrouprights-members' => '(кежигүннүң даңзызы)',
@@ -936,6 +965,7 @@ It must not be more than $1 {{PLURAL:$1|character|characters}} long.',
 
 'enotif_impersonal_salutation' => '{{grammar:genitive|{{SITENAME}}}} ажыглакчызы',
 'enotif_anon_editor' => 'ат эвес ажыглакчы $1',
+'changed' => 'өскертти',
 
 # Delete
 'deletepage' => 'Арынны ырадыры',
@@ -982,7 +1012,7 @@ It must not be more than $1 {{PLURAL:$1|character|characters}} long.',
 'blanknamespace' => '(Кол)',
 
 # Contributions
-'contributions' => 'Ажыглакчыниң салыышкыннары',
+'contributions' => '{{GENDER:$1|Ажыглакчының}} салыышкыннары',
 'contributions-title' => '«$1» деп ажыглакчының салыышкыннары',
 'mycontris' => 'Салыышкыннар',
 'contribsub2' => '$1 ($2)',
@@ -1109,7 +1139,7 @@ It must not be more than $1 {{PLURAL:$1|character|characters}} long.',
 'tooltip-search-go' => 'Шак ындыг аттыг арынче щилчиир',
 'tooltip-search-fulltext' => 'Бо бижике арыннардан дилээри',
 'tooltip-p-logo' => 'Кол Арын',
-'tooltip-n-mainpage' => 'Кол Арынны баары',
+'tooltip-n-mainpage' => 'Кол Арынче шилчиир',
 'tooltip-n-mainpage-description' => 'Кол Арынче кирери',
 'tooltip-n-portal' => 'Төлевилел дыгайында, чүнү кылып болур силер, кайда чүү чыдарыл',
 'tooltip-n-currentevents' => 'Ам болуп турар таварылгалар даңзызы',
@@ -1330,6 +1360,9 @@ It must not be more than $1 {{PLURAL:$1|character|characters}} long.',
 'htmlform-submit' => 'Күүcедири',
 'htmlform-selectorother-other' => 'Өске',
 
+# New logging system
+'rightsnone' => '(чок)',
+
 # Feedback
 'feedback-subject' => 'Кол сөс:',
 'feedback-message' => 'Чагаа:',
index 736b311..ce69a2b 100644 (file)
@@ -85,7 +85,7 @@ $messages = array(
 
 'underline-always' => 'دائىم',
 'underline-never' => 'ھەرگىز',
-'underline-default' => 'توركۆرگۈ كۆڭۈلدىكى',
+'underline-default' => 'تېرە ياكى توركۆرگۈ كۆڭۈلدىكى',
 
 # Font style option in Special:Preferences
 'editfont-style' => 'تەھرىرلەش رايونىنىڭ خەت نۇسخا ئۇسلۇبى:',
@@ -173,6 +173,7 @@ $messages = array(
 'newwindow' => '(يېڭى كۆزنەكتە ئاچ)',
 'cancel' => 'ۋاز كەچ',
 'moredotdotdot' => 'تەپسىلىي…',
+'morenotlisted' => 'تەپسىلاتى كۆرسىتىلمىگەنلىرى…',
 'mypage' => 'بەتىم',
 'mytalk' => 'مۇنازىرە بېتىم',
 'anontalk' => 'بۇ IP نىڭ مۇنازىرە بېتى',
@@ -206,6 +207,7 @@ $messages = array(
 'namespaces' => 'ئات بوشلۇقى',
 'variants' => 'ۋارىيانتلار',
 
+'navigation-heading' => 'يولباشچى تىزىملىكى',
 'errorpagetitle' => 'خاتالىق',
 'returnto' => '$1 غا قايت.',
 'tagline' => 'ئورنى {{SITENAME}}',
@@ -472,6 +474,10 @@ $2',
 
 سىز نامسىز ھالەتتە {{SITENAME}} نى ئىشلىتەلەيسىز ياكى ئوخشاش ۋە ياكى ئوخشاش بولمىغان ئىشلەتكۈچى سالاھىيىتىدە <span class='plainlinks'>[$1 تىزىمغا كىر]</span>ەلەيسىز.
 دىققەت، بەزى بەتلەر توركۆرگۈنىڭ غەملىكى تازىلانمىغۇچە يەنىلا سىزنى تىزىمغا كىرگەن ھالەتتە كۆرسىتىشى مۇمكىن.",
+'welcomeuser' => '$1، خۇش كەپسىز!',
+'welcomecreation-msg' => 'ھېساباتىڭىز قۇرۇلدى.
+
+[[Special:Preferences|{{SITENAME}} تەڭشىكىڭىزنى تەڭشەشنى ئۇنتۇپ قالماڭ]].',
 'yourname' => 'ئىشلەتكۈچى ئاتى:',
 'yourpassword' => 'ئىم:',
 'yourpasswordagain' => 'ئاچقۇچنى قايتا بەسىڭ:',
@@ -494,7 +500,7 @@ $2',
 'gotaccount' => "ھېساباتىم بار؟ '''$1'''.",
 'gotaccountlink' => 'تىزىمغا كىر',
 'userlogin-resetlink' => 'تىزىمغا كىرىش تەپسىلاتىنى ئۇنۇتتىڭىز؟',
-'createaccountmail' => 'ئېلخەتتە',
+'createaccountmail' => 'ۋاقىتلىق ئىختىيارىي بىر ئېمنى ئىشلىتىدۇ ھەمدە تۆۋەندىكى بەلگىلەنگەن تورخەت ئادرېسىغا ئەۋەتىدۇ',
 'createaccountreason' => 'سەۋەب:',
 'badretype' => 'سىز كىرگۈزگەن ئىم ماس كەلمىدى.',
 'userexists' => 'كىرگۈزگەن ئىشلەتكۈچى ئاتى ئىشلىتىلىۋاتىدۇ.
@@ -563,6 +569,7 @@ cookies نى قوزغاتقانلىقىڭىزنى جەزملەڭ، بۇ بەتن
 'emailconfirmlink' => 'ئېلخەت مەنزىلىڭىزنى جەزملەڭ',
 'invalidemailaddress' => 'ئېلخەت ئادرېس فورماتى خاتا.
 توغرا ئېلخەت ئادرېسى كىرگۈزۈڭ ياكى بۇ جاينى بوش قالدۇرۇڭ.',
+'cannotchangeemail' => 'بۇ wiki ھېساباتى تورخەت ئادرېسىنى ئۆزگەرتىشكە يول قويمايدۇ.',
 'emaildisabled' => 'بۇ تورتۇرا ئېلخەت يوللىيالمايدۇ.',
 'accountcreated' => 'ھېسابات قۇرۇلدى',
 'accountcreatedtext' => '$1 نىڭ ھېساباتى قۇرۇلدى.',
@@ -581,6 +588,7 @@ cookies نى قوزغاتقانلىقىڭىزنى جەزملەڭ، بۇ بەتن
 # E-mail sending
 'php-mail-error-unknown' => 'PHP نىڭ mail() فونكسىيەسىدىكى يوچۇن خاتالىق',
 'user-mail-no-addy' => 'ئېلخەت ئادرېسسىز خەت يوللاشنى سىنىدى.',
+'user-mail-no-body' => 'بوش ياكى مەزمۇنى قىسقا مۇۋاپىق بولمىغان تورخەت ئەۋەتىشنى سىنىدى.',
 
 # Change password dialog
 'resetpass' => 'ئىم ئۆزگەرت',
@@ -646,6 +654,7 @@ $2
 'changeemail-oldemail' => 'نۆۋەتتىكى ئېلخەت ئادرېسى:',
 'changeemail-newemail' => 'يېڭى ئېلخەت ئادرېسى:',
 'changeemail-none' => '(يوق)',
+'changeemail-password' => '{{SITENAME}} دىكى ئىم:',
 'changeemail-submit' => 'ئېلخەت ئۆزگەرت',
 'changeemail-cancel' => 'ۋاز كەچ',
 
@@ -753,10 +762,10 @@ $2
 'blocked-notice-logextract' => 'بۇ ئىشلەتكۈچى نۆۋەتتە چەكلەنگەن.
 پايدىلىنىش ئۈچۈن يېقىنقى چەكلەش خاتىرە تۈرلىرى تۆۋەندە تەمىنلەندى:',
 'clearyourcache' => "'''دىققەت''' - ساقلىغاندىن كېيىن، تور كۆرگۈنىڭ غەملىكىنى تازىلىغاندىن كېيىنلا ئاندىن ئېلىپ بارغان ئۆزگەرتىشنى كۆرەلەيسىز.
-* '''Mozilla / Firefox / Safari:''' دا ''Shift'' كۇنۇپكىسىنى بېسىپ تۇرۇپ ''قايتا يۈكلە''نى ياكى ''Ctrl-F5'' ياكى ''Ctrl-R'' (''Mac تا Command-R'')؛
-* '''Google Chrome:''' دا ''Ctrl-Shift-R'' (''Command-Shift-R''  Mac)
+* '''Firefox / Safari:''' دا ''Shift'' كۇنۇپكىسىنى بېسىپ تۇرۇپ ''قايتا يۈكلە''نى ياكى ''Ctrl-F5'' ياكى ''Ctrl-R'' (''Mac تا ⌘-R'')؛
+* '''Google Chrome:''' دا ''Ctrl-Shift-R'' (''-Shift-R''  Mac)
 *'''Internet Explorer:''' دا ''Ctrl'' نى بېسىپ تۇرۇپ ''يېڭىلا,'' ياكى ''Ctrl-F5''؛
-* '''Opera:''' دا ''قورال → مايىللىق''؛ نى بېسىپ غەملەكنى تازىلاڭ.",
+* '''Opera:''' دا ''قورال → مايىللىقلار''؛ نى بېسىپ غەملەكنى تازىلاڭ.",
 'usercssyoucanpreview' => "ئەسكەرتىش:''' ساقلاشتىن ئىلگىرى  \"{{int:showpreview}}\" توپچىنى ئىشلىتىپ يېڭى CSS نى سىناڭ.",
 'userjsyoucanpreview' => "ئەسكەرتىش:''' ساقلاشتىن ئىلگىرى  \"{{int:showpreview}}\" توپچىنى ئىشلىتىپ يېڭى JS نى سىناڭ.",
 'usercsspreview' => "'''دىققەت سىز پەقەت ئۆزىڭىزنىڭ شەخسىي CSS نى ئالدىن كۆزىتىۋاتىسىز.'''
@@ -773,7 +782,7 @@ $2
 'note' => "'''ئىزاھات:'''",
 'previewnote' => "'''ئېسىڭىزدە بولسۇنكى بۇ پەقەتلا ئالدىن كۆزىتىش.'''
 ئۆزگەرتكەن مەزمۇنىڭىز تېخى ساقلانمىدى!",
-'continue-editing' => 'تÛ\95ھرÙ\89رÙ\84Û\95Ø´Ù\86Ù\89 Ø¯Ø§Û\8bاÙ\85Ù\84اشتÛ\87ر',
+'continue-editing' => 'تÛ\95ھرÙ\89رÙ\84Û\95Ø´Ù\83Û\95 Ù\8aÛ\86تÙ\83Û\95Ù\84',
 'previewconflict' => 'بۇ ئالدىن كۆزىتىشتە ئۈستىدىكى تېكست تەھرىرلەش رايونىدىكى مەزمۇننى كۆرسەتتى. ئۇ ساقلانى تاللىغاندىن كېيىن كۆرۈنىدۇ.',
 'session_fail_preview' => "'''كەچۈرۈڭ! سىزنىڭ جەريان سانلىق مەلۇماتىڭىز يوقاپ كەتكەندە ئېلىپ بارغان تەھرىرىڭىزنى بىر تەرەپ قىلالمايمىز.'''
 قايتا سىناڭ.
@@ -818,7 +827,7 @@ $2
 'readonlywarning' => "'''ئاگاھلاندۇرۇش: ساندان قۇلۇپلىنىپ ئاسرىلىۋاتىدۇ، شۇڭلاشقا ئۆزگەرتىشىڭىزنى ساقلىيالمايسىز.'''
 سىز بۇ تېكستنى كۆچۈرۈپ تېكست ھۆججىتىگە ساقلاپ، سەل تۇرۇپ ئاندىن ئۆزگەرتىڭ.
 
-باشقۇرغۇچىنىڭ چۈشەندۈرۈشى تۆۋەندىكىچە: $1",
³Ø§Ù\86داÙ\86Ù\86Ù\89 Ù\82Û\87Ù\84Û\87Ù¾Ù\84Ù\89غاÙ\86 Ø¨Ø§Ø´Ù\82Û\87رغÛ\87Ú\86Ù\89Ù\86Ù\89Ú­ Ú\86Û\88Ø´Û\95Ù\86دÛ\88رÛ\88Ø´Ù\89 ØªÛ\86Û\8bÛ\95Ù\86دÙ\89Ù\83Ù\89Ú\86Û\95: $1",
 'protectedpagewarning' => "'''ئاگاھلاندۇرۇش:''' بۇ بەت قۇلۇپلانغان شۇڭلاشقا باشقۇرغۇچى ھوقۇقىغا ئىگە ئىشلەتكۈچىلا ئۇنى ئۆزگەرتەلەيدۇ. پايدىلىنىش ئۈچۈن تۆۋەندە يېقىنقى خاتىرە تەمىنلەندى:",
 'semiprotectedpagewarning' => "'''دىققەت:''' بۇ بەت قۇلۇپلانغان شۇڭلاشقا خەتلەتكەن ئىشلەتكۈچىلا ئۇنى تەھرىرلىيەلەيدۇ.
  پايدىلىنىش ئۈچۈن تۆۋەندە يېقىنقى خاتىرە تەمىنلەندى:",
@@ -831,9 +840,8 @@ $2
 'template-protected' => '(قوغدالغان)',
 'template-semiprotected' => '(يېرىم قوغدالغان)',
 'hiddencategories' => 'بۇ بەت {{PLURAL:$1|1 يوشۇرۇن تۈر|$1 يوشۇرۇن تۈر}} نىڭ ئەزالىرىغا تەۋە:',
-'edittools' => '<!-- Ø¨Û\87 Ø¬Ø§Ù\8aدÙ\89Ù\83Ù\89 ØªÛ\90Ù\83Ù\89ست Ø¬Û\95دÛ\8bÛ\95Ù\84 ØªÛ\95ھرÙ\89رÙ\84Û\95Ø´ Û\8bÛ\95 Ù\8aÙ\88Ù\84Ù\84اشنىڭ ئاستى تەرىپىدە كۆرۈنىدۇ. -->',
+'edittools' => '<!-- Ø¨Û\87 Ø¬Ø§Ù\8aدÙ\89Ù\83Ù\89 ØªÛ\90Ù\83Ù\89ست ØªÛ\95ھرÙ\89رÙ\84Û\95Ø´ Û\8bÛ\95 Ù\8aÙ\88Ù\84Ù\84اش Ø¬Û\95دÛ\8bÙ\89Ù\84نىڭ ئاستى تەرىپىدە كۆرۈنىدۇ. -->',
 'edittools-upload' => '-',
-'nocreatetitle' => 'بەت قۇرۇش چەكلىمىسى',
 'nocreatetext' => '{{SITENAME}} يېڭى بەت قۇرۇش ئىقتىدارىنى چەكلىگەن.
 كەينىگە قايتىپ مەۋجۇد بەتنى تەھرىرلىيەلەيسىز ياكى [[Special:UserLogin|تىزىمغا كىر ياكى يېڭى بىر ھېسابات قۇر]]الايسىز.',
 'nocreate-loggedin' => 'يېڭى بەت قۇرۇش ھوقۇقىڭىز يوق.',
@@ -859,6 +867,14 @@ $2
 ئۇ مەۋجۇد.',
 'defaultmessagetext' => 'كۆڭۈلدىكى ئۇچۇر تېكستى',
 'content-failed-to-parse' => '$2 نى $1 گە ئانالىز قلش مەغلۇپ بولدى: $3',
+'invalid-content-data' => 'مەزمۇن سانلىق مەلۇماتى ئىناۋەتسىز',
+'content-not-allowed-here' => '[[$2]] بەتتە "$1" مەزمۇنغا يول قويۇلمايدۇ',
+
+# Content models
+'content-model-wikitext' => 'wiki تېكىستى',
+'content-model-text' => 'ساپ تېكىست',
+'content-model-javascript' => 'JavaScript',
+'content-model-css' => 'CSS',
 
 # Parser/template warnings
 'expensive-parserfunction-warning' => "'''ئاگاھلاندۇرۇش:''' بۇ بەت ناھايىتى كۆپ يۇقىرى سەرپىياتتىكى گىرامماتىكىلىق ئىقتىدارنى چاقىرغان.\\n
@@ -1012,9 +1028,11 @@ $1",
 'revdelete-no-change' => "'''ئاگاھلاندۇرۇش:''' $2 $1 ۋاقىتتىكى تۈر كۆرۈنۈشچانلىق تەڭشىكىنى ئىلتىماس قىلدى.",
 'revdelete-concurrent-change' => '$2 $1 ۋاقىتتىكى تۈر خاتالىقىنى ئۆزگەرتىۋاتىدۇ: ئۇنىڭ تەڭشىكىنى ئۆزگەرتىۋاتقاندا باشقىلار ئۆزگەرتىپ بولغان. خاتىرىنى تەكشۈرۈڭ.',
 'revdelete-only-restricted' => '$2 $1 ۋاقىتتىكى تۈرنى يوشۇرغاندا خاتالىق كۆرۈلدى: سىز باشقا بىر كۆرۈنۈشچانلىق تاللانمىسىنى تاللىغاندىن كېيىن باشقۇرغۇچىنىڭ بۇ تۈرنى كۆرۈشىنى يوقاتسىڭىز بولمايدۇ.',
-'revdelete-reason-dropdown' => '*دائىملىق ئۆچۈرۈش سەۋەبلىرى
-**نەشىر ھوقۇقىغا دەخلى-تەرۇز قىلغان
-***نامۇۋاپىق شەخسىي ئۇچۇر',
+'revdelete-reason-dropdown' => '* دائىملىق ئۆچۈرۈش سەۋەبلىرى
+** نەشىر ھوقۇقىغا دەخلى-تەرۇز قىلغان
+** نامۇۋاپىق باھا ياكى شەخسىي ئۇچۇر
+** نامۇۋاپىق ئىشلەتكۈچى ئىسمى
+** يوشۇرۇن تۆھمەت ئۇچۇرى',
 'revdelete-otherreason' => 'باشقا/قوشۇمچە سەۋەب:',
 'revdelete-reasonotherlist' => 'باشقا سەۋەب',
 'revdelete-edit-reasonlist' => 'ئۆچۈرۈش سەۋەبى تەھرىر',
@@ -1068,6 +1086,10 @@ $1",
 'editundo' => 'يېنىۋال',
 'diff-multi' => '({{PLURAL:$2|ئىشلەتكۈچى|$2 ئىشلەتكۈچى}} نىڭ{{PLURAL:$1|تۈزىتىلگەن نەشرى|$1 تۈزىتىلگەن نەشرى}} كۆرسىتىلمىدى)',
 'diff-multi-manyusers' => '( $2  دىن كۆپ{{PLURAL:$2|ئىشلەتكۈچى|ئىشلەتكۈچى}} نىڭ {{PLURAL:$1|تۈزىتىلگەن نەشرى|$1 تۈزىتىلگەن نەشرى}}  كۆرسىتىلمىدى)',
+'difference-missing-revision' => '{{PLURAL:$2|نەشر|$2 نەشىر لەر}} نىڭ ($1) پەرق سېلىشتۇرما {{PLURAL:$2}} تېپىلمىدى.
+
+ئادەتتە بۇ ئۆچۈرۈلگەن بەتنىڭ ئۇلانمىسىغا كىرگەنلىك سەۋەبىدىن بولىدۇ.
+تەپسىلىي ئۇچۇرنى [{{fullurl:{{#Special:log}}/delete|page={{FULLPAGENEMEE}}}}ئۆچۈرۈش خاتىرىسى] دىن تاپقىلى بولىدۇ.',
 
 # Search results
 'searchresults' => 'ئىزدەش نەتىجىسى',
@@ -1144,7 +1166,7 @@ $1",
 
 # Preferences page
 'preferences' => 'مايىللىق',
-'mypreferences' => 'مايىللىق تەڭشىكىم',
+'mypreferences' => 'مايىللىق',
 'prefs-edits' => 'تەھرىر سانى:',
 'prefsnologin' => 'تىزىمغا كىرمىدى',
 'prefsnologintext' => 'سىز ئالدى بىلەن <span class="plainlinks">[{{fullurl:{{#Special:UserLogin}}|returnto=$1}} تىزىمغا كىر]</span>سىڭىز ئاندىن ئىشلەتكۈچى مايىللىقنى تەڭشىيەلەيسىز.',
@@ -1155,11 +1177,12 @@ $1",
 'prefs-beta' => 'سىناق ئىقتىدارلىرى',
 'prefs-datetime' => 'چېسلا ۋە ۋاقىت',
 'prefs-labs' => 'تەجرىبە ئىقتىدارلىرى',
+'prefs-user-pages' => 'ئىشلەتكۈچى بېتى',
 'prefs-personal' => 'ئىشلەتكۈچى سەپلىمە ھۆججىتى',
 'prefs-rc' => 'ئاخىرقى ئۆزگەرتىشلەر',
 'prefs-watchlist' => 'كۆزەت تىزىملىكى',
 'prefs-watchlist-days' => 'كۆزەت تىزىملىكىدە كۆرۈنىدىغان كۈن سانى:',
-'prefs-watchlist-days-max' => 'Maximum $1 {{PLURAL:$1|day|days}}',
+'prefs-watchlist-days-max' => 'ئەڭ چوڭ 1$ {{PLURAL:$1|كۈن}}',
 'prefs-watchlist-edits' => 'كۈچەيتىلگەن كۆزەت تىزىملىكىدە ئەڭ كۆپ ئۆزگەرتىش سانى:',
 'prefs-watchlist-edits-max' => 'ئەڭ كۆپ سانى: 1000',
 'prefs-watchlist-token' => 'كۆزەت تىزىملىك نىشانى:',
@@ -1206,7 +1229,7 @@ $1",
 'timezoneregion-indian' => 'ھىندى ئوكيان',
 'timezoneregion-pacific' => 'تىنچ ئوكيان',
 'allowemail' => 'باشقا ئىشلەتكۈچىلەر ئېلخەت ئەۋەتىشنى قوزغات',
-'prefs-searchoptions' => 'ئىزدەش تاللانما',
+'prefs-searchoptions' => 'ئىزدەش',
 'prefs-namespaces' => 'ئات بوشلۇقى',
 'defaultns' => 'بولمىسا بۇ ئات بوشلۇقلىرىدىن ئىزدە:',
 'default' => 'كۆڭۈلدىكى',
@@ -1219,15 +1242,16 @@ $1",
 'prefs-emailconfirm-label' => 'ئېلخەت جەزملەش:',
 'prefs-textboxsize' => 'تەھرىر كۆزنەك چوڭلۇقى',
 'youremail' => 'ئېلخەت:',
-'username' => 'ئىشلەتكۇچى ئىسمى:',
-'uid' => 'ئىشلەتكۈچى كىملىك:',
-'prefs-memberingroups' => '{{PLURAL:$1|بىر|كۆپ}} گۇرۇپپا ئەزاسى:',
+'username' => '{{GENDER:$1|ئىشلەتكۇچى ئىسمى}}:',
+'uid' => '{{GENDER:$1|ئىشلەتكۇچى}} كىملىك:',
+'prefs-memberingroups' => '{{PLURAL:$1|گۇرۇپپا}} دىكى{{GENDER:$2| ئەزا}}:',
 'prefs-memberingroups-type' => '$1',
 'prefs-registration' => 'خەتلەتكەن ۋاقىت:',
 'prefs-registration-date-time' => '$1',
 'yourrealname' => 'ﺗﻮﻟﯘﻕ ئىسىم:',
 'yourlanguage' => 'تىل:',
 'yourvariant' => 'مەزمۇن تىل شالغۇتى:',
+'prefs-help-variant' => 'بۇ ۋىكىدا كۆرسىتىشكە ئىشلىتىدىغان تىل تۈرى ياكى ئىملا تەكشۈرۈش',
 'yournick' => 'ئىمزا:',
 'prefs-help-signature' => 'مۇنازىرە بەتتە "<nowiki>~~~~</nowiki>" ئىمزا ئىشلىتىلسە ئۇ ئۆزلۈكىدىن ئىمزايىڭىزغا ئۆزگىرىپ ۋاقىت تامغا قوشۇلىدۇ.',
 'badsig' => 'ئەسلى ئىمزا خاتا.
@@ -1279,6 +1303,7 @@ HTML بەلگىسىنى تەكشۈرۈڭ.',
 'saveusergroups' => 'ئىشلەتكۈچى گۇرۇپپىسى ساقلا',
 'userrights-groupsmember' => 'ئەزاسى:',
 'userrights-groupsmember-auto' => 'مۇقىم ئەزاسى:',
+'userrights-groupsmember-type' => '$1',
 'userrights-groups-help' => 'سىز بۇ ئىشلەتكۈچى تەۋە گۇرۇپپىنى ئۆزگەرتەلەيسىز:\\n
 * تاللاش رامكىسى تاللاغلىق بولسا ئىشلەتكۈچى شۇ  گۇرۇپپىغا تەۋە:
 * تاللاش رامكىسى تاللاغلىق بولمىسا ئىشلەتكۈچى شۇ  گۇرۇپپىغا تەۋە ئەمەس.
@@ -1304,10 +1329,10 @@ HTML بەلگىسىنى تەكشۈرۈڭ.',
 
 'group-user-member' => '{{GENDER:$1|ئىشلەتكۈچى}}',
 'group-autoconfirmed-member' => 'ئۆزلۈكىدىن جەزملەنگەن ئىشلەتكۈچى',
-'group-bot-member' => 'ماشىنا ئادەم',
-'group-sysop-member' => 'باشقۇرغۇچى',
-'group-bureaucrat-member' => 'بيۇرۇكرات',
-'group-suppress-member' => 'نازارەتچى',
+'group-bot-member' => '{{GENDER:$1|ماشىنا ئادەم}}',
+'group-sysop-member' => '{{GENDER:$1|باشقۇرغۇچى}}',
+'group-bureaucrat-member' => '{{GENDER:$1|بيۇرۇكرات}}',
+'group-suppress-member' => '{{GENDER:$1|نازارەتچى}}',
 
 'grouppage-user' => '{{ns:project}}: ئىشلەتكۈچىلەر',
 'grouppage-autoconfirmed' => '{{ns:project}}:ئۆزلۈكىدىن جەزملەنگەن ئىشلەتكۈچىلەر',
@@ -1341,6 +1366,7 @@ HTML بەلگىسىنى تەكشۈرۈڭ.',
 'right-writeapi' => 'يېزىلغان API نى ئىشلەت',
 'right-delete' => 'بەتلەرنى ئۆچۈر',
 'right-bigdelete' => 'كۆپ مىقداردىكى تارىخ بېتى ئۆچۈر',
+'right-deletelogentry' => 'بەلگىلەنگەن خاتىرە تۈرىنى ئۆچۈرۈپ ۋە ئەسلىگە كەلتۈرىدۇ',
 'right-deleterevision' => 'ئۆچۈر ۋە قارشى ئۆچۈر بېتىدىكى بەلگىلەنگەن تۈزىتىلگەن نەشرى',
 'right-deletedhistory' => 'ئۆچۈرۈلگەن تۈرنى كۆرسەت، مۇناسىۋەتلىك تېكستنى ئۆز ئىچىگە ئالمايدۇ',
 'right-deletedtext' => 'ئۆچۈرۈلگەن تۈزىتىلگەن نەشرى ئارىسىدىكى ئۆچۈرۈلگەن تېكست ۋە ئۆزگەرتىشنى كۆرسەت',
@@ -1375,13 +1401,15 @@ HTML بەلگىسىنى تەكشۈرۈڭ.',
 'right-siteadmin' => 'ساندان قۇلۇپلا ۋە قۇلۇپ ئاچ',
 'right-override-export-depth' => 'بەت قەۋەتلىك ئۇلىنىشى بار بەتنى چىقار',
 'right-sendemail' => 'باشقا ئىشلەتكۈچىگە ئېلخەت يوللا',
+'right-passwordreset' => 'پارول ئەسلىگە قايتۇرۇش ئېلخەت ئادرېس كۆرۈش.',
+
+# Special:Log/newusers
+'newuserlogpage' => 'ئىشلەتكۈچى قۇرغان خاتىرە',
+'newuserlogpagetext' => '(چەكلەنگەن)',
 
 # User rights log
 'rightslog' => 'ئىشلەتكۈچى ھوقۇق خاتىرىسى',
 'rightslogtext' => 'ئىشلەتكۈچى ھوقۇق خاتىرىسى',
-'rightslogentry' => 'گۇرۇپپا ئەزاسى $1  نىڭ ھوقۇقىنى $2 دىن $3 غا ئۆزگەرت',
-'rightslogentry-autopromote' => 'ئۆزلۈكىدىن $2 دىن $3 غا ئۆرلىدى',
-'rightsnone' => '(يوق)',
 
 # Associated actions - in the sentence "You do not have permission to X"
 'action-read' => 'بۇ بەتنى ئوقۇ',
@@ -1408,6 +1436,7 @@ HTML بەلگىسىنى تەكشۈرۈڭ.',
 'action-suppressionlog' => 'بۇ شەخسىي خاتىرىنى كۆرسەت',
 'action-block' => 'بۇ ئىشلەتكۈچىنىڭ تەھرىرىنى چەكلە',
 'action-protect' => 'بۇ بەتنىڭ قوغداش دەرىجىسىنى ئۆزگەرت',
+'action-rollback' => 'ئاخىرقى ئىشلەتكۈچىنىڭ ئالاھىدە بەتكە ئېلىپ بارغان تەھرىرىنى تېزلىكتە ئەسلىگە كەلتۈرىدۇ',
 'action-import' => 'باشقا wiki دىن بۇ بەتنى ئەكىر',
 'action-importupload' => 'يۈكلىگەن بىر ھۆججەتتىن بۇ بەتنى ئەكىر',
 'action-patrol' => 'باشقا تەھرىرگە چارلاش بەلگىسى قوي',
@@ -1417,6 +1446,7 @@ HTML بەلگىسىنى تەكشۈرۈڭ.',
 'action-userrights' => 'ھەممە ئىشلەتكۈچىنىڭ ھوقۇقىنى تەھرىرلە',
 'action-userrights-interwiki' => 'باشقا wiki دىكى ئىشلەتكۈچى ھوقۇقىنى تەھرىرلە',
 'action-siteadmin' => 'ساندان قۇلۇپلا ۋە قۇلۇپ ئاچ',
+'action-sendemail' => 'ئېلخەت يوللا',
 
 # Recent changes
 'nchanges' => '$1 {{PLURAL:$1|ئۆزگەرتىش|ئۆزگەرتىش}}',
@@ -1450,9 +1480,11 @@ HTML بەلگىسىنى تەكشۈرۈڭ.',
 'rc_categories' => 'تۈر چېگرىسى ("|" بىلەن ئايرىلىدۇ )',
 'rc_categories_any' => 'خالىغان',
 'rc-change-size' => '$1',
+'rc-change-size-new' => 'ئۆزگەرتكەندىن كېيىن $1 {{PLURAL:$1|بايت}}',
 'newsectionsummary' => '* $1 * يېڭى ئابزاس',
 'rc-enhanced-expand' => 'تەپسىلاتىنى كۆرسەت (JavaScript قوللىشى زۆرۈر)',
 'rc-enhanced-hide' => 'تەپسىلاتىنى يوشۇر',
+'rc-old-title' => 'ئەڭ دەسلەپتە "$1" سۈپىتىدە قۇرۇلغان',
 
 # Recent changes linked
 'recentchangeslinked' => 'مۇناسىۋەتلىك ئۆزگەرتىشلەر',
@@ -1503,6 +1535,7 @@ HTML بەلگىسىنى تەكشۈرۈڭ.',
 'minlength1' => 'ھۆججەت ئاتى ئاز دېگەندە بىر ھەرپ بولۇشى لازىم.',
 'illegalfilename' => 'ھۆججەت ئاتى "$1"دا ماۋزۇدا چەكلىنىدىغان ھەرپ بار.
 ھۆججەت ئاتىنى ئۆزگەرتىپ ئاندىن يۈكلەشنى قايتا سىناڭ.',
+'filename-toolong' => 'ھۆججەت ئىسمى 240 بايتتىن ئاشمايدۇ.',
 'badfilename' => 'ھۆججەت ئاتى ئۆزگەرتىلدى "$1".',
 'filetype-mime-mismatch' => '".$1" ھۆججەت كېڭەيتىلگەن ئاتى ($2) ھۆججەتنىڭ MIME تىپى بىلەن ماسلاشمىدى.',
 'filetype-badmime' => 'ھۆججەتنىڭ MIME تىپى "$1" يۈكلەشكە يول قويىدىغان ھۆججەت شەكلى ئەمەس.',
@@ -1603,6 +1636,50 @@ $1',
 'upload-too-many-redirects' => 'URL دا بەك كۆپ قايتا نىشانلاش مەۋجۇد',
 'upload-unknown-size' => 'نامەلۇم چوڭلۇق',
 'upload-http-error' => 'بىر HTTP خاتالىقى مەۋجۇد: $1',
+'upload-copy-upload-invalid-domain' => 'بۇ دائىرىدىن ھۆججەت كۆچۈرۈلمىسىنى يۈكلىگىلى بولمايدۇ.',
+
+# File backend
+'backend-fail-stream' => '"$1" ھۆججەتنى ئاقما ھالەتتە يوللىيالمايدۇ.',
+'backend-fail-backup' => '"$1" ھۆججەتنى زاپاسلىيالمايدۇ.',
+'backend-fail-notexists' => '$1 ھۆججەت مەۋجۇت ئەمەس.',
+'backend-fail-hashes' => 'سېلىشتۇرۇش ھۆججەتنىڭ hashes گە ئېرىشەلمىدى.',
+'backend-fail-notsame' => '"$1" دا ئوخشاش بولمىغان ھۆججەت مەۋجۇت.',
+'backend-fail-invalidpath' => '"$1" ئىناۋەتلىك ساقلاش يولى ئەمەس.',
+'backend-fail-delete' => '"$1" ھۆججەتنى ئۆچۈرەلمىدى.',
+'backend-fail-describe' => 'ھۆججەت "$1" نىڭ مېتا سانلىق مەلۇماتىنى ئۆزگەرتەلمىدى.',
+'backend-fail-alreadyexists' => '"$1" ھۆججەت ئاللىبۇرۇن مەۋجۇت.',
+'backend-fail-store' => 'ھۆججەت "$1" نى "$2"غا ساقلىيالمىدى.',
+'backend-fail-copy' => 'ھۆججەت "$1" نى "$2" غا كۆچۈرەلمىدى.',
+'backend-fail-move' => 'ھۆججەت "$1" نى "$2" غا يۆتكىيەلمىدى.',
+'backend-fail-opentemp' => 'ۋاقىتلىق ھۆججەتنى ئاچقىلى بولمىدى.',
+'backend-fail-writetemp' => 'ۋاقىتلىق ھۆججەتكە يازغىلى بولمىدى.',
+'backend-fail-closetemp' => 'ۋاقىتلىق ھۆججەتنى تاقىغىلى بولمىدى.',
+'backend-fail-read' => '"$1" ھۆججەتنى ئوقۇغىلى بولمىدى.',
+'backend-fail-create' => '"$1" ھۆججەتنى يازغىلى بولمىدى.',
+'backend-fail-maxsize' => 'ھۆججەت "$1" نى يازالمىدى چۈنكى ئۇ {{PLURAL:$2|بىر بايت|$2 بايت}}تىن چوڭ.',
+'backend-fail-readonly' => 'ساقلاش ئاخىرقى ئۇچى "$1" نۆۋەتتە ئوقۇشقىلا بولىدىغان ھالەتتە سەۋەبى: "\'\'$2\'\'"',
+'backend-fail-synced' => 'بۇ ھۆججەت "$1" نى ئىچكى قىسىمدا ئارقا ئۇچىنى ساقلاۋاتقاندا بىردەكسىزلىك ھالەتتە تۇرۇۋاتىدۇ',
+'backend-fail-connect' => 'ساقلىغۇچ ئارقا ئۇچى "$1" غا باغلىنالمىدى.',
+'backend-fail-internal' => 'ساقلىغۇچ ئارقا ئۇچى "$1" دا بىر يوچۇن خاتالىق كۆرۈلدى.',
+'backend-fail-contenttype' => '"$1" دا ساقلانغان ھۆججەت مەزمۇن تىپىغا ھۆكۈم قىلالمىدى.',
+'backend-fail-batchsize' => 'ساقلاش ئارقا ئۇچىدىكى بىر تۈركۈم $1 ھۆججەتكە {{PLURAL:$1|مەشغۇلات}} ئېلىپ بېرىلدى: چېكى $2 {{PLURAL:$2|مەشغۇلات}}.',
+'backend-fail-usable' => 'ھوقۇق يېتەرلىك ئەمەس ياكى مۇندەرىجە/ساقلىغۇچ يوقالغان، "$1" ھۆججەتنى ئوقۇيالمايدۇ ياكى يازالمايدۇ.',
+
+# File journal errors
+'filejournal-fail-dbconnect' => 'ساقلىغۇچ ئارقا ئۇچىنىڭ خاتىرە ساندانى "$1" غا باغلىنالمايدۇ.',
+'filejournal-fail-dbquery' => 'ساقلىغۇچ ئارقا ئۇچىنىڭ خاتىرە ساندانى "$1" نى يېڭىلىيالمىدى.',
+
+# Lock manager
+'lockmanager-notlocked' => '"$1" نىڭ قۇلۇپىنى ئاچالمايدۇل؛ ئۇ قۇلۇپلانمىغان.',
+'lockmanager-fail-closelock' => '"$1" نىڭ قۇلۇپ ھۆججەتنى تاقىيالمىدى.',
+'lockmanager-fail-deletelock' => '"$1"نىڭ قۇلۇپ ھۆججىتىنى ئۆچۈرەلمىدى.',
+'lockmanager-fail-acquirelock' => '"$1" نىڭ قۇلۇپىغا ئېرىشەلمىدى.',
+'lockmanager-fail-openlock' => '"$1" نىڭ قۇلۇپ ھۆججەتنى ئاچالمىدى.',
+'lockmanager-fail-releaselock' => '"$1"نىڭ قۇلۇپنى بوشىتالمىدى.',
+'lockmanager-fail-db-bucket' => '$1 چېلەكتە يېتەرلىك قۇلۇپ ساندانى بىلەن ئالاقە قىلالمىدى.',
+'lockmanager-fail-db-release' => '$1 ساندان قۇلۇپىنى بوشىتالمىدى.',
+'lockmanager-fail-svr-acquire' => '$1 مۇلازىمېتىردىن قۇلۇپقا ئېرىشەلمىدى.',
+'lockmanager-fail-svr-release' => '$1 مۇلازىمېتىردا قۇلۇپنى بوشىتالمىدى.',
 
 # ZipDirectoryReader
 'zip-file-open-error' => 'ھۆججەت ئاچقاندا ZIP تەكشۈرۈشىدە بىر خاتالىققا يولۇقتى.',
@@ -1620,10 +1697,11 @@ $1',
 'uploadstash-badtoken' => 'بۇ مەشغۇلات غەلبىلىك تاماملانمىدى ياكى تەھرىرلىگەن ئۇچۇرىڭىزنىڭ ۋاقتى ئۆتكەن. قايتا سىناڭ.',
 'uploadstash-errclear' => 'ھۆججەت تازىلاش مۇۋەپپەقىيەتلىك تاماملانمىدى.',
 'uploadstash-refresh' => 'ھۆججەت تىزىمىنى يېڭىلا',
+'invalid-chunk-offset' => 'ئىناۋەتسىز بۆلەك چەتنىشى',
 
 # img_auth script messages
 'img-auth-accessdenied' => 'زىيارەت رەت قىلىندى',
-'img-auth-nopathinfo' => 'PATH_INFO يوقالغان.
+'img-auth-nopathinfo' => 'يوقالغان PATH_INFO.
 مۇلازىمىتىرىڭىز بۇ ئۇچۇرنى يوللاشنى تەڭشىمىگەن.
 ئۇ CGI ئاساسىدا بولغاچقا img_auth نى قوللىمايدۇ. تۆۋەندىكى ئادرېستىن كۆرۈڭ
 https://www.mediawiki.org/wiki/Manual:Image_Authorization',
@@ -1711,11 +1789,17 @@ URL نىڭ توغرىلىقى ۋە تور بېكەتنى زىيارەت قىلى
 [$2 ھۆججەت چۈشەندۈرۈش بېتى]دىكى مۇناسىۋەتلىك ئۇچۇردىن كۆرۈڭ.',
 'sharedupload-desc-here' => 'بۇ ھۆججەت $1 دىن كەلگەن، ئۇ باشقا قۇرۇلۇشتا ئىشلىتىلىشى مۇمكىن.
 [$2 ھۆججەت چۈشەندۈرۈش بېتى] نىڭ چۈشەندۈرۈشى تۆۋەندە كۆرسىتىلىدۇ.',
+'sharedupload-desc-edit' => 'بۇ ھۆججەت $1 دىن كەلگەن، ئۇ باشقا پىلان قۇرۇلۇشىدا ئىشلىتىلگەن بولۇشى مۇمكىن.
+بەلكىم سىز ئۇنىڭ [$2 ھۆججەت چۈشەندۈرۈش بېتى]دە چۈشەندۈرۈشىنى تەھرىرلىيەلىشىڭىز مۇمكىن.',
+'sharedupload-desc-create' => 'بۇ ھۆججەت $1 دىن كەلگەن، ئۇ باشقا پىلان قۇرۇلۇشىدا ئىشلىتىلگەن بولۇشى مۇمكىن.
+بەلكىم سىز ئۇنىڭ [$2 ھۆججەت چۈشەندۈرۈش بېتى]دە چۈشەندۈرۈشىنى تەھرىرلىيەلىشىڭىز مۇمكىن.',
 'filepage-nofile' => 'بۇ ئاتلىق ھۆججەت مەۋجۇد ئەمەس.',
 'filepage-nofile-link' => '[$1 يۈكلىيەلەيسىز]بۇ ئاتلىق ھۆججەت مەۋجۇد ئەمەس، ئەمما سىز.',
 'uploadnewversion-linktext' => 'بۇ ھۆججەتنىڭ يېڭى نەشرىنى يۈكلە',
 'shared-repo-from' => 'مەنبەسى $1',
 'shared-repo' => 'ھەمبەھىر ھۆججەت ئامبىرى',
+'shared-repo-name-wikimediacommons' => 'ۋىكى ۋاستە ھەمبەھىر',
+'upload-disallowed-here' => 'بۇ ھۆججەتنى قاپلىۋەتكىلى بولمايدۇ.',
 
 # File reversion
 'filerevert' => '$1 ئەسلىگە قايتۇر',
@@ -1745,6 +1829,7 @@ URL نىڭ توغرىلىقى ۋە تور بېكەتنى زىيارەت قىلى
 ** تەكرار ھۆججەت',
 'filedelete-edit-reasonlist' => 'ئۆچۈرۈش سەۋەبى تەھرىر',
 'filedelete-maintenance' => 'ئاسرىلىۋاتقاندا ھۆججەت ئۆچۈرۈش ۋە ئەسلىگە كەلتۈرۈش ۋاقىتلىق چەكلىنىدۇ.',
+'filedelete-maintenance-title' => 'ھۆججەتنى ئۆچۈرگىلى بولمايدۇ',
 
 # MIME search
 'mimesearch' => 'MIME ئىزدە',
@@ -1794,9 +1879,9 @@ URL نىڭ توغرىلىقى ۋە تور بېكەتنى زىيارەت قىلى
 'statistics-users-active-desc' => 'ئالدىنقى {{PLURAL:$1|كۈن|$1 كۈن}} دىكى مەشغۇلات قىلغان ئىشلەتكۈچىلەر',
 'statistics-mostpopular' => 'ئەڭ كۆپ كۆرۈلگەن بەتلەر',
 
-'disambiguations' => 'ئÙ\89Ù\83Ù\83Ù\89 Ø¨Ù\89سÙ\84Ù\89Ù\82 Ø¨Û\95تÙ\86Ù\89 Ù\8aÙ\88Ù\82Ù\89تÙ\89Ø´',
+'disambiguations' => 'ئÙ\89Ù\83Ù\83Ù\89 Ø¨Ù\89سÙ\84Ù\89Ù\82 Ø¨Û\95تÙ\83Û\95 Ø¦Û\87Ù\84اÙ\86غÙ\84Ù\89Ù\83بÛ\95تÙ\84Û\95ر.',
 'disambiguationspage' => 'Template:ئىككى بىسلىق بەت',
-'disambiguations-text' => "تۆۋەندىكى بەت '''ئىككى بىسلىق بەت'''كە ئۇلانغان.
+'disambiguations-text' => "تۆۋەندىكى بەتلەر '''ئىككى بىسلىق بەت'''كە ئۇلانغان.
 ئەمما ئۇلار مۇۋاپىق ماۋزۇغا ئۇلىنىشى كېرەك ئىدى.<br />
 ئەگەر بىر بەت [[MediaWiki:Disambiguationspage]] غا ئۇلانغان بولسا ئىككى بىسلىق بەت دەپ قارىلىدۇ.",
 
@@ -1823,6 +1908,7 @@ URL نىڭ توغرىلىقى ۋە تور بېكەتنى زىيارەت قىلى
 # Miscellaneous special pages
 'nbytes' => '$1 {{PLURAL:$1|بايت|بايت}}',
 'ncategories' => '$1 {{PLURAL:$1|تۈر|تۈر}}',
+'ninterwikis' => '$1 {{PLURAL:$1| تىل ھالقىغان ئۇلانما}}',
 'nlinks' => '$1 {{PLURAL:$1|ئۇلانما|ئۇلانما}}',
 'nmembers' => '$1 {{PLURAL:$1|ئەزا|ئەزا}}',
 'nrevisions' => '$1 {{PLURAL:$1|تۈزىتىش|تۈزىتىش}}',
@@ -1843,14 +1929,18 @@ URL نىڭ توغرىلىقى ۋە تور بېكەتنى زىيارەت قىلى
 'wantedpages' => 'كېرەكلىك بەتلەر',
 'wantedpages-badtitle' => 'نەتىجە گۇرۇپپىسىدىكى ئىناۋەتسىز ماۋزۇ: $1',
 'wantedfiles' => 'لازىملىق ھۆججەتلەر',
+'wantedfiletext-cat' => 'تۆۋەندە ئىشلىتىلگەن ھۆججەت مەۋجۇت ئەمەس. سىرتقى ۋاستە ئامبىرىدىكى ھۆججىتى بولۇشى مۇمكىنلىرى تىزىپ كۆرسىتىلدى. بۇ خىلدىكى ھەر قانداق خاتا دوكلات <del>شاللىۋېتىلىدۇ</del>. ئۇندىن باشقا، [[:$1]] دا سىڭدۈرمە ھۆججەت مەۋجۇت بولمىغان بەتنى كۆرسىتىدۇ.',
+'wantedfiletext-nocat' => 'تۆۋەندە ئىشلىتىلگەن ھۆججەت مەۋجۇت ئەمەس. سىرتقى ۋاستە ئامبىرىدىكى ھۆججىتى بولۇشى مۇمكىنلىرى تىزىپ كۆرسىتىلدى. بۇ خىلدىكى ھەر قانداق خاتا دوكلات <del>شاللىۋېتىلىدۇ</del>',
 'wantedtemplates' => 'لازىملىق قېلىپلار',
 'mostlinked' => 'ئەڭ كۆپ ئۇلانغان بەتلەر',
 'mostlinkedcategories' => 'ئەڭ كۆپ ئۇلانغان تۈرلەر',
 'mostlinkedtemplates' => 'ئەڭ كۆپ ئۇلانغان قېلىپلار',
 'mostcategories' => 'ئەڭ كۆپ تۈرگە ئايرىلغان بەتلەر',
 'mostimages' => 'ئەڭ كۆپ ئۇلانغان ھۆججەتلەر',
+'mostinterwikis' => 'ئەڭ كۆپ تىل ھالقىغان ئۇلانما بەتلەر',
 'mostrevisions' => 'ئەڭ كۆپ تۈزىتىلگەن بەتلەر',
 'prefixindex' => 'ھەممە بەتنىڭ ئالدى قوشۇلغۇچىسى',
+'prefixindex-namespace' => 'بارلىق سۆز تاجىسى بار بەتلەر ($1 ئىسىم بوشلۇق)',
 'shortpages' => 'قىسقا بەتلەر',
 'longpages' => 'ئۇزۇن بەتلەر',
 'deadendpages' => 'ئۇلىنىشى ئۈزۈلگەن بەت',
@@ -1894,13 +1984,14 @@ URL نىڭ توغرىلىقى ۋە تور بېكەتنى زىيارەت قىلى
 
 # Special:Log
 'specialloguserlabel' => 'ئىشلەتكۈچى:',
-'speciallogtitlelabel' => 'ماۋزۇ:',
+'speciallogtitlelabel' => 'ماۋزۇ(تىما ياكى ئىشلەتكۈچى):',
 'log' => 'خاتىرە',
 'all-logs-page' => 'بارلىق ئاممىۋى خاتىرە',
 'alllogstext' => '{{SITENAME}} بارلىق ئىشلەتكىلى بولىدىغان خاتىرىنى ئۇنىۋېرسال كۆرسىتىدۇ.
 سىز خاتىرە تىپى، ئىشلەتكۈچى ئاتى (چوڭ كىچىك يېزىلىشنى پەرقلەندۈرىدۇ) نى تاللىيالايسىز ياكى مۇناسىۋەتلىك بەت (چوڭ كىچىك يېزىلىشنى پەرقلەندۈرىدۇ) ئارقىلىق ئىزدەش دائىرىسىنى كىچىكلىتەلەيسىز.',
 'logempty' => 'خاتىرىدە ماس كېلىدىغان تۈر يوق.',
 'log-title-wildcard' => 'بۇ تېكست بىلەن باشلانغان ماۋزۇنى ئىزدە',
+'showhideselectedlogentries' => 'تالغان خاتىرىسى كۈرسەت / يوشۇر',
 
 # Special:AllPages
 'allpages' => 'ھەممە بەت',
@@ -1919,6 +2010,12 @@ URL نىڭ توغرىلىقى ۋە تور بېكەتنى زىيارەت قىلى
 'allpagesbadtitle' => 'بېرىلگەن بەت ماۋزۇسى قانۇنسىز ياكى ئىچكى تىلغا ئىگە ياكى ئىچكى wiki نىڭ ئالدى قوشۇلغۇچىسى.
 ئۇ ماۋزۇغا ئىشلەتكىلى بولمايدىغان بىر ياكى بىر قانچە ھەرپنى ئۆز ئىچىگە ئالغان بولۇشى مۇمكىن.',
 'allpages-bad-ns' => '{{SITENAME}} دا\\"$1" ئات بوشلۇقى يوق.',
+'allpages-hide-redirects' => 'قايتا نىشانلاشنى يوشۇر',
+
+# SpecialCachedPage
+'cachedspecial-viewing-cached-ttl' => 'سىز بۇ بەتنىڭ غەملەك نەشرىنى كۆرۈۋاتىسىز، ئەڭ كۆپ بولغاندا $1 كونىراق.',
+'cachedspecial-viewing-cached-ts' => 'سىز بۇ بەتنىڭ غەملەك نەشرىنى كۆرۈۋاتىسىز، ئۇ ئەڭ يېڭى تولۇق نەشرى بولماسلىقى مۇمكىن.',
+'cachedspecial-refresh-now' => 'يېقىنقىنى كۈرىشى.',
 
 # Special:Categories
 'categories' => 'كاتېگورىيە',
@@ -1935,12 +2032,13 @@ URL نىڭ توغرىلىقى ۋە تور بېكەتنى زىيارەت قىلى
 'sp-deletedcontributions-contribs' => 'تۆھپە',
 
 # Special:LinkSearch
-'linksearch' => 'سىرتقى ئۇلانما',
+'linksearch' => 'سىرتقى ئۇلانما ئىزدەش',
 'linksearch-pat' => 'ئىزدەش شەكلى:',
 'linksearch-ns' => 'ئات بوشلۇقى:',
 'linksearch-ok' => 'ئىزدەش',
-'linksearch-text' => ' \\"*.wikipedia.org\\" غا ئوخشاش ئورتاق بەلگە ئىشلىتىشكە بولىدۇ. <br />
-قوللايدىغان كېلىشىم: <code>$1</code>',
+'linksearch-text' => '"wikipedia.org.*" غا ئوخشاش ئورتاق بەلگە ئىشلىتىشكە بولىدۇ.
+ </br>ئالىي دەرىجىلىك دائىرە بۇلىشى كېرەك، مەسىلەن:"org.*".
+قوللايدىغان{{PLURAL:$2| كېلىشىم}}: <code>$1</code>.',
 'linksearch-line' => '$1 بولسا $2 دىن ئۇلانغان',
 'linksearch-error' => 'ئورتاق بەلگەنى پەقەت ئاساسىي ئاپپارات ئاتىنىڭ باشىدىلا ئىشلەتكىلى بولىدۇ.',
 
@@ -1953,16 +2051,12 @@ URL نىڭ توغرىلىقى ۋە تور بېكەتنى زىيارەت قىلى
 # Special:ActiveUsers
 'activeusers' => 'ئاكتىپ ئەزالار تىزىملىكى',
 'activeusers-intro' => 'بۇ يېقىنقى $1 {{PLURAL:$1| كۈن|كۈن}}دىكى مەشغۇلات قىلغان ئىشلەتكۈچىلەر تىزىملىكى.',
-'activeusers-count' => 'يېقىنقى {{PLURAL:$3|كۈن|$3 كۈن}}دىكى $1 {{PLURAL:$1|تەھرىر|تەھرىر}}  قېتىم سانى',
+'activeusers-count' => 'يېقىنقى {{PLURAL:$3|كۈن|$3 كۈن}}دىكى {{PLURAL:$1|مەشغۇلات}} قېتىم سانى $1',
 'activeusers-from' => 'باشلانغان ئىشلەتكۈچىنى كۆرسەت:',
 'activeusers-hidebots' => 'ماشىنا ئادەمنى يوشۇر',
 'activeusers-hidesysops' => 'باشقۇرغۇچىنى يوشۇر',
 'activeusers-noresult' => 'ئىشلەتكۈچى تېپىلمىدى.',
 
-# Special:Log/newusers
-'newuserlogpage' => 'ئىشلەتكۈچى قۇرغان خاتىرە',
-'newuserlogpagetext' => '(چەكلەنگەن)',
-
 # Special:ListGroupRights
 'listgrouprights' => 'ئىشلەتكۈچى گۇرۇپپا ھوقۇقى',
 'listgrouprights-summary' => 'تۆۋەندىكىسى بۇ wiki دا ئېنىقلىما بېرىلگەن ئىشلەتكۈچى ھوقۇق چېكى تىزىملىكى ۋە ئۇلارنىڭ زىيارەت ھوقۇق چېكى.
@@ -1973,6 +2067,7 @@ URL نىڭ توغرىلىقى ۋە تور بېكەتنى زىيارەت قىلى
 'listgrouprights-rights' => 'ھوقۇق',
 'listgrouprights-helppage' => 'Help: گۇرۇپپا ھوقۇقى',
 'listgrouprights-members' => '(ئەزالار تىزىملىكى)',
+'listgrouprights-right-display' => '<span class="listgrouprights-granted">$1 <code>($2)</code></span>',
 'listgrouprights-right-revoked' => '<span class="listgrouprights-revoked">$1 <code>($2)</code></span>',
 'listgrouprights-addgroup' => ' {{PLURAL:$2|بىر|بىر قانچە}} گۇرۇپپىغا قوشالايدۇ: $1',
 'listgrouprights-removegroup' => ' {{PLURAL:$2|بىر|بىر قانچە}} گۇرۇپپىدىن چىقىرىۋېتەلەيدۇ: $1',
@@ -1987,8 +2082,10 @@ URL نىڭ توغرىلىقى ۋە تور بېكەتنى زىيارەت قىلى
 'mailnologin' => 'يوللايدىغان ئادرېس يوق',
 'mailnologintext' => 'سىز ئالدى بىلەن [[Special:UserLogin|تىزىمغا كىر]]ىپ، [[Special:Preferences|مايىللىق]] تەڭشىكىدە ئىناۋەتلىك ئېلخەت ئادرېسىڭىزدىن بىرسى بولغاندا ئاندىن باشقا ئىشلەتكۈچىلەرگە ئېلخەت يوللىيالايسىز.',
 'emailuser' => 'بۇ ئىشلەتكۈچىگە ئېلخەت يوللا',
+'emailuser-title-target' => 'بۇ {{ئىشلەتكۈچى|GENDER:$1}} گە ئېلخەت يوللا',
+'emailuser-title-notarget' => 'ئېلخەت ئىشلەتكۈچى',
 'emailpage' => 'بۇ ئىشلەتكۈچىگە ئېلخەت يوللا',
-'emailpagetext' => 'سىز تۆۋەندىكى جەدۋەلنى ئىشلىتىپ، بۇ ئىشلەتكۈچىگە ئېلخەت يوللىيالايسىز.
+'emailpagetext' => 'سىز تۆۋەندىكى جەدۋەلنى ئىشلىتىپ، بۇ {{GENDER:$1|ئىشلەتكۈچى}} گە ئېلخەت يوللىيالايسىز.
  [[Special:Preferences|ئىشلەتكۈچى مايىللىقىڭىز]]دىكى ئېلخەت ئادرېسى  "يوللىغۇچى" ستونىدا كۆرۈنىدۇ، مۇشۇنداق بولغاندا شۇ ئىشلەتكۈچى سىزگە بىۋاسىتە جاۋاب قايتۇرالايدۇ.',
 'usermailererror' => 'Mail ئوبيېكتى خاتالىق قايتۇردى:',
 'defemailsubject' => '{{SITENAME}}بېكەتتىكى "$1" ئىشلەتكۈچىنىڭ ئېلخەت',
@@ -2017,19 +2114,19 @@ URL نىڭ توغرىلىقى ۋە تور بېكەتنى زىيارەت قىلى
 # User Messenger
 'usermessage-summary' => 'سىستېما ئۇچۇرىنى ساقلاپ قال',
 'usermessage-editor' => 'سىستېما خەۋەرچىسى',
+'usermessage-template' => 'MediaWiki:UserMessage',
 
 # Watchlist
-'watchlist' => 'كۆزەت تىزىملىكىم',
-'mywatchlist' => 'كۆزەت تىزىملىكىم',
+'watchlist' => 'كۆزەت تىزىملىكى',
+'mywatchlist' => 'كۆزىتىش تىزىملىكى',
 'watchlistfor2' => '$1 $2 ئۈچۈن',
 'nowatchlist' => 'كۆزەت تىزىملىكىڭىز بوش.',
 'watchlistanontext' => '$1 كۆزەت تىزىملىكىڭىزنى كۆرۈپ تەھرىرلەڭ.',
 'watchnologin' => 'تىزىمغا كىرمىدى',
 'watchnologintext' => 'سىز [[Special:UserLogin|تىزىمغا كىر]]گەندىلا ئاندىن كۆزەت تىزىملىكىڭىزنى ئۆزگەرتەلەيسىز.',
 'addwatch' => 'كۆزەت تىزىملىكىگە قوش',
-'addedwatchtext' => "\"[[:\$1]]\" بېتى [[Special:Watchlist|كۆزەت تىزىملىكى]]ڭىزگە قوشۇلدى.
-كەلگۈسىدە بۇ بەت ۋە ئۇنىڭ مۇنازىرە بېتىگە مۇناسىۋەتلىك ھەر قانداق ئۆزگەرتىش شۇ جايدا كۆرسىتىلىپلا قالماستىن،
-بەلكى  [[Special:RecentChanges|يېقىنقى ئۆزگەرتىش تىزىملىكى]]دىمۇ تېخىمۇ ئاسان پەرقلەندۈرۈش ئۈچۈن '''توم''' شەكلىدە كۆرسىتىلىدۇ.",
+'addedwatchtext' => '"[[:$1]]" بېتى [[Special:Watchlist|كۆزەت تىزىملىكى]]ڭىزگە قوشۇلدى.
+كەلگۈسىدە بۇ بەت ۋە ئۇنىڭ مۇنازىرە بېتىگە مۇناسىۋەتلىك ھەر قانداق ئۆزگەرتىش شۇ جايدا كۆرسىتىلدۇ.',
 'removewatch' => 'كۆزەت تىزىملىكىدىن چىقىرىۋەت',
 'removedwatchtext' => '"[[:$1]]" بېتى [[Special:Watchlist|كۆزەت تىزىملىكىڭىز]]دىن چىقىرىۋېتىلدى.',
 'watch' => 'كۆزەت',
@@ -2046,7 +2143,7 @@ URL نىڭ توغرىلىقى ۋە تور بېكەتنى زىيارەت قىلى
 'watchmethod-list' => 'كۆزىتىۋاتقان بەتنىڭ يېقىنقى ئۆزگەرتىشىنى تەكشۈر',
 'watchlistcontains' => 'كۆزەت تىزىملىكىڭىزدە $1 {{PLURAL:$1|بەت|بەت}} بار.',
 'iteminvalidname' => "بەت'$1'  خاتالىقى، ئاتى ئىناۋەتسىز…",
-'wlnote' => "تۆۋەندىكىسى يېقىنقى {{PLURAL:$2|سائەت|'''$2''' سائەت}} ئىچىدىكى ئاخىرقى '{{PLURAL:$1|'''$1''' قېتىملىق|قېتىملىق}}  ئۆزگەرتىش.",
+'wlnote' => "تۆۋەندىكىسى يېقىنقى {{PLURAL:$2|سائەت}} ئىچىدىكى ئاخىرقى '{{PLURAL:$1| قېتىملىق}}  ئۆزگەرتىش، $3 $4 گىچە.",
 'wlshowlast' => 'يېقىنقى $1 سائەت $2 كۈن $3 نىڭ ئۆزگەرتىشىنى كۆرسەت',
 'watchlist-options' => 'كۆزەت تىزىملىك تاللانما',
 
@@ -2058,16 +2155,24 @@ URL نىڭ توغرىلىقى ۋە تور بېكەتنى زىيارەت قىلى
 'enotif_mailer' => '{{SITENAME}} ئېلخەت ئۇقتۇرغۇچ',
 'enotif_reset' => 'ھەممە بەتكە ئوقۇلدى بەلگىسى سال',
 'enotif_impersonal_salutation' => '{{SITENAME}} ئىشلەتكۈچى',
+'enotif_subject_deleted' => '{{SITENAME}}نىڭ $1 بەت{{gender:$2|$2}}تەرپىدىن ئۆچۈرۈلدى',
+'enotif_subject_created' => '{{SITENAME}}نىڭ $1 بەت{{gender:$2|$2}}تەرپىدىن قۇرۇلدى',
+'enotif_subject_moved' => '{{SITENAME}}نىڭ $1 بەت{{gender:$2|$2}}تەرپىدىن يۆتكىۋېتىلدى',
+'enotif_subject_restored' => '{{SITENAME}}نىڭ $1 بەت{{gender:$2|$2}}تەرپىدىن ئەسلىگە قايتۇرۇلدى',
+'enotif_subject_changed' => '{{SITENAME}}نىڭ $1 بەت{{gender:$2|$2}}تەرپىدىن ئۆزگەرتىلدى',
+'enotif_body_intro_deleted' => '{{SITENAME}}دىكى $1 بەت $PAGEEDITDATE {{gender:$2|$2}} تەرپىدىن ئۆچۈرۈلدى، $3 دىن كۈرىڭ.',
+'enotif_body_intro_created' => '{{SITENAME}}دىكى $1 بەت $PAGEEDITDATE {{gender:$2|$2}} تەرپىدىن قۇرۇلدى، $3 دىن ھازىرقى نەشرىنى كۈرىڭ.',
+'enotif_body_intro_moved' => '{{SITENAME}}دىكى $1 بەت$PAGEEDITDATE {{gender:$2|$2}} تەرپىدىن يۆتكىۋېتىلدى، $3 دىن ھازىرقى نەشرىنى كۈرىڭ.',
+'enotif_body_intro_restored' => '{{SITENAME}}دىكى $1 بەت $PAGEEDITDATE {{gender:$2|$2}} تەرپىدىن ئەسلىگە قايتۇرۇلدى، $3 دىن ھازىرقى نەشرىنى كۈرىڭ.',
+'enotif_body_intro_changed' => '{{SITENAME}}دىكى $1 بەت $PAGEEDITDATE {{gender:$2|$2}} تەرپىدىن ئۆزگەرتىلدى، $3 دىن ھازىرقى نەشرىنى كۈرىڭ.',
 'enotif_lastvisited' => 'ئالدىنقى قېتىملىق زىيارەتتىن كېيىنكى ھەممە ئۆزگەرتىشنى $1 كۆرۈڭ.',
 'enotif_lastdiff' => 'بۇ ئۆزگەرتىشنى كۆرمەكچى بولسىڭىز $1 كۆرۈڭ.',
 'enotif_anon_editor' => '$1 ئاتسىز ئىشلەتكۈچى',
 'enotif_body' => 'قەدىرلىك $WATCHINGUSERNAME،
 
-{{SITENAME}} بېكىتىدىكى $PAGETITLE ماۋزۇلۇق بەت $PAGEEDITDATE دا $PAGEEDITOR تەرىپىدىن $CHANGEDORCREATED،نۆۋەتتىكى تۈزىتىلگەن نەشرىنى كۆرۈش ئۈچۈن $PAGETITLE_URL غا يۆتكىلىڭ.
+PAGEINTRO $NEWPAGE$
 
-$NEWPAGE
-
-تەھرىر ئۈزۈندىسى: $PAGESUMMARY $PAGEMINOREDIT
+تەھرىر ئۈزۈندىسى: PAGESUMMARY $PAGEMINOREDIT$
 
 بۇ تەھرىر بىلەن ئالاقىلىشىڭ:
 
@@ -2088,6 +2193,8 @@ $UNWATCHURL نى زىيارەت قىلىڭ
 
 قايتما ئىنكاس ياكى تېخىمۇ كۆپ ياردەمگە ئېرىشمەكچى بولسىڭىز:
 {{canonicalurl:{{MediaWiki:Helppage}}}} نى زىيارەت قىلىڭ',
+'created' => 'قۇرغان',
+'changed' => 'ئۆزگەردى',
 
 # Delete
 'deletepage' => 'بەت ئۆچۈر',
@@ -2126,6 +2233,8 @@ $UNWATCHURL نى زىيارەت قىلىڭ
 'rollback' => 'تەھرىر ئەسلىگە قايتۇر',
 'rollback_short' => 'ئەسلىگە قايتۇر',
 'rollbacklink' => 'ئەسلىگە قايتۇر',
+'rollbacklinkcount' => '$1 {{PLURAL:$1|تەھرىر}}نى ئەسلىگە قايتۇر',
+'rollbacklinkcount-morethan' => '$1 دىن كۆپ {{PLURAL:$1|تەھرىر}}نى ئەسلىگە قايتۇر',
 'rollbackfailed' => 'ئەسلىگە قايتۇرۇش مەغلۇپ بولدى',
 'cantrollback' => 'تەھرىرنى ئەسلىگە كەلتۈرەلمىدى؛
 ئاخىرقى تۆھپىكار بۇ بەتنىڭ بىردىنبىر ئاپتورى.',
@@ -2154,7 +2263,12 @@ $2 نىڭ ئاخىرقى تۈزىتىلگەن نەشرىگە ئۆزگەرتىل
 'unprotectedarticle' => '"[[$1]]" دىن قوغداشنى چىقىرىۋەتكەن',
 'movedarticleprotection' => 'قوغداش تەڭشىكى "[[$2]]" دىن "[[$1]]" غا يۆتكەلدى.',
 'protect-title' => '"$1" نىڭ قوغداش دەرىجىسىنى ئۆزگەرتىۋاتىدۇ',
+'protect-title-notallowed' => '"$1" نىڭ قوغداش دەرىجىسىنى كۆرسىتىدۇ',
 'prot_1movedto2' => '[[$1]] دىن [[$2]]غا يۆتكەلدى',
+'protect-badnamespace-title' => 'قوغداتقل بولمايدىغان ئىسىم بوشلۇق',
+'protect-badnamespace-text' => 'بۇ ئىسىم بوشلۇقىدىكى بەتنى قوغدىغىلى بولمايدۇ.',
+'protect-norestrictiontypes-text' => 'بۇ بەتنى ساقلىيالمايدۇ سەۋەبى ئىشلەتكىلى بولىدىغان قوغداش تىپى يوق.',
+'protect-norestrictiontypes-title' => 'قوغدىغىلى بولمايدىغان بەت',
 'protect-legend' => 'قوغداش جەزملە',
 'protectcomment' => 'سەۋەب:',
 'protectexpiry' => 'قەرەلى:',
@@ -2171,9 +2285,9 @@ $2 نىڭ ئاخىرقى تۈزىتىلگەن نەشرىگە ئۆزگەرتىل
 'protect-cascadeon' => 'تۆۋەندىكى {{PLURAL:$1|بىر|بىر قانچە}} بەت مەزكۇر بەتنى ئۆز ئىچىگە ئېلىش بىلەن بىللە زەنجىرسىمان قوغداش قوزغىتىلغان.
  شۇڭلاشقا بۇ بەتمۇ قوغدالغان. بۇ بەتنىڭ قوغداش دەرىجىسىنى ئۆزگەرتەلەيسىز، ئەمما زەنجىرسىمان قوغداشقا تەسىر كۆرسەتمەيدۇ.',
 'protect-default' => 'ھەممە ئىشلەتكۈچىگە يول قوي',
-'protect-fallback' => '"$1" نىڭ ئىجازىتى زۆرۈر.',
-'protect-level-autoconfirmed' => 'يېڭى ۋە تىزىملاتمىغان ئىشلەتكۈچى چەكلىنىدۇ',
-'protect-level-sysop' => 'باشقۇرغۇچىلا',
+'protect-fallback' => 'پەقەت "$1" ھوقۇقى بار ئىشلەتكۈچىلەرگىلا يول قويىدۇ',
+'protect-level-autoconfirmed' => 'ئۆزلۈكىدىن جەزملەنگەن ئىشلەتكۈچىلەرگىلا يول قويىدۇ',
+'protect-level-sysop' => 'باشقۇرغۇچىلارغىلا يول قويىدۇ',
 'protect-summary-cascade' => 'زەنجىرسىمان قۇلۇپ',
 'protect-expiring' => ' $1 (UTC) توختىتىلغان',
 'protect-expiring-local' => '$1 ۋاقتى توشىدۇ',
@@ -2240,8 +2354,8 @@ $2 نىڭ ئاخىرقى تۈزىتىلگەن نەشرىگە ئۆزگەرتىل
 'undeletedrevisions' => '{{PLURAL:$1|1 تۈزىتىش|$1 تۈزىتىش}} ئەسلىگە كەلتۈرۈلدى',
 'undeletedrevisions-files' => '{{PLURAL:$1|1 تۈزىتىش|$1 تۈزىتىش}} ۋە {{PLURAL:$2|1 ھۆججەت|$2 ھۆججەت}}  ئەسلىگە كەلتۈرۈلدى',
 'undeletedfiles' => '{{PLURAL:$1|1 ھۆججەت|$1 ھۆججەت}}  ئەسلىگە كەلتۈرۈلدى',
-'cannotundelete' => 'ئەسلىگە كەلتۈرۈش مەغلۇپ بولدى؛
-باشقىلار بۇ بەتنى بايىلا ئەسلىگە كەلتۈرگەن بولۇشى مۇمكىن.',
+'cannotundelete' => 'ئەسلىگە كەلتۈرۈش مەغلۇپ بولدى:
+$1',
 'undeletedpage' => "'''$1 ئەسلىگە كەلتۈرۈلدى'''
 
  [[Special:Log/delete|ئۆچۈرۈش خاتىرىسى]]دىن پايدىلىنىپ ئۆچۈر ۋە ئەسلىگە كەلتۈر خاتىرىسىنى كۆرۈڭ.",
@@ -2256,6 +2370,7 @@ $2 نىڭ ئاخىرقى تۈزىتىلگەن نەشرىگە ئۆزگەرتىل
 'undelete-cleanup-error' => 'ئىشلىتىلمەيدىغان ئاخىپ ھۆججەت"$1"نى ئۆچۈرگەندە خاتالىق كۆرۈلدى.',
 'undelete-missing-filearchive' => 'ھۆججەت ئارخىپىنىڭ كىملىكى $1 سانداندا بولمىغاچقا، ھۆججەت ئارخىپىدىن ئەسلىگە كەلتۈرەلمەيدۇ.
 ئۇ ئەسلىگە كەلتۈرۈلگەن بولۇشى مۇمكىن.',
+'undelete-error' => 'بەت ئەسلىگە كەلتۈرۈشتە خاتا.',
 'undelete-error-short' => 'ھۆججەت قارشى ئۆچۈرگەندە خاتالىق كۆرۈلدى: $1',
 'undelete-error-long' => 'ھۆججەتنى قارشى ئۆچۈرۈۋاتقاندا خاتالىق كۆرۈلدى:
 
@@ -2273,9 +2388,9 @@ $1',
 'blanknamespace' => '(ئاساسىي)',
 
 # Contributions
-'contributions' => 'ئىشلەتكۈچى تۆھپىسى',
+'contributions' => '{{$1:GENDER|ئىشلەتكۈچى}} تۆھپىسى',
 'contributions-title' => '$1 نىڭ ئىشلەتكۈچى تۆھپىسى',
-'mycontris' => 'تۆھپەم',
+'mycontris' => 'تۆھپە',
 'contribsub2' => '$1 نىڭ تۆھپىسى ($2)',
 'nocontribs' => 'بۇ ئۆلچەمگە ماس كېلىدىغان ئۆزگەرتىش تېپىلمىدى.',
 'uctop' => '(ئۈستى)',
@@ -2316,7 +2431,7 @@ $1',
 'whatlinkshere-hideredirs' => '$1 قايتا نىشان بەلگىلە',
 'whatlinkshere-hidetrans' => '$1 ئۆز ئىچىگە ئالغان',
 'whatlinkshere-hidelinks' => '$1 ئۇلانما',
-'whatlinkshere-hideimages' => '$1 سۈرەت ئۇلانما',
+'whatlinkshere-hideimages' => '$1 ھۆججەت ئۇلانما',
 'whatlinkshere-filters' => 'سۈزگۈچلەر',
 
 # Block/unblock
@@ -2357,7 +2472,7 @@ $1',
 'ipb-confirm' => 'چەكلەشنى جەزملە',
 'badipaddress' => 'IP ئادرېس ئىناۋەتسىز',
 'blockipsuccesssub' => 'چەكلەش مۇۋەپپەقىيەتلىك',
-'blockipsuccesstext' => '[[Special:Contributions/$1|$1]] چەكلەندى<br />
+'blockipsuccesstext' => '[[Special:Contributions/$1|$1]] چەكلەندى.<br />
  [[Special:BlockList|چەكلەنگەن IP تىزىملىكى]] نى كۆرۈپ چەكلەشنى تەكشۈرۈڭ.',
 'ipb-blockingself' => 'سىز ئۆزىڭىزنى چەكلەمسىز! راستىنلا مۇشۇنداق قىلامسىز؟',
 'ipb-confirmhideuser' => 'سىز ئىشلەتكۈچىنى يوشۇرۇش ھوقۇقى بار ئىشلەتكۈچىنى چەكلىمەكچى. بۇنداق بولغاندا ھەممە تىزىمدىكى ئىشلەتكۈچىلەرنىڭ ئاتى ۋە خاتىرە تۈرلىرى چەكلىنىدۇ. راستىنلا مۇشۇنداق قىلامسىز؟',
@@ -2550,7 +2665,7 @@ $1',
 نىشان بەت "[[:$1]]" مەۋجۇد.
 يۆتكەشكە قولاي بولۇشى ئۈچۈن بۇ بەتنى ئۆچۈرەمسىز؟',
 'delete_and_move_confirm' => 'ھەئە، بۇ بەتنى ئۆچۈر',
-'delete_and_move_reason' => 'يۆتكەشكە قولاي بولۇشى ئۈچۈن ئۆچۈر',
+'delete_and_move_reason' => ' "[[$1]]" يۆتكەشكە قولاي بولۇشى ئۈچۈن ئۆچۈرۈۋېتىلدى',
 'selfmove' => 'ئەسلى ماۋزۇ بىلەن نىشان ماۋزۇ ئوخشاش؛
 بەتنى ئۆزىدىن ئۆزىگە يۆتكىگىلى بولمايدۇ.',
 'immobile-source-namespace' => 'ئات بوشلۇقى "$1" بولغان بەتنى يۆتكىگىلى بولمايدۇ.',
@@ -2558,6 +2673,7 @@ $1',
 'immobile-target-namespace-iw' => 'بەت يۆتكىگەندە wiki دىن ھالقىغان ئۇلانما ئىناۋەتلىك نىشان ئەمەس.',
 'immobile-source-page' => 'بۇ بەتنى يۆتكىگىلى بولمايدۇ.',
 'immobile-target-page' => 'بۇ نىشان ماۋزۇغا يۆتكىگىلى بولمايدۇ.',
+'bad-target-model' => 'تەلەپ قىلغان نىشان ئوخشاش بولمىغان مەزمۇن مودېلىنى ئىشلىتىدۇ. $1 دىن $2 غا ئايلاندۇرالمايدۇ.',
 'imagenocrossnamespace' => 'ھۆججەتنى غەيرى ھۆججەت ئات بوشلۇقىغا يۆتكىگىلى بولمايدۇ.',
 'nonfile-cannot-move-to-file' => 'غەيرى ھۆججەتنى ھۆججەت ئات بوشلۇقىغا يۆتكىگىلى بولمايدۇ.',
 'imagetypemismatch' => 'بۇ يېڭى كېڭەيتىلگەن ئات بىلەن باشقا تىپ ماسلاشمىدى.',
@@ -2583,6 +2699,7 @@ $1',
 'exportcuronly' => 'ھەممە تارىخنى ئەمەس بەلكى نۆۋەتتىكى تۈزىتىلگەن نەشرىنىلا ئۆز ئىچىگە ئالىدۇ.',
 'exportnohistory' => "----
 '''دىققەت:''' ئىقتىدار سەۋەبلىك بۇ جەدۋەلدىن ھەممە تارىخنى چىقىرىش چەكلەنگەن.",
+'exportlistauthors' => 'ھەر بىر بەت تۆھپىكارلارنىڭ تولۇق تىزىمىنى ئۆز ئىچىگە ئالىدۇ',
 'export-submit' => 'چىقار',
 'export-addcattext' => 'تۈردىن بەت قوش:',
 'export-addcat' => 'قوش',
@@ -2615,6 +2732,7 @@ $1',
 'thumbnail_error' => 'كىچىك رەسىم قۇرۇش خاتالىقى: $1',
 'djvu_page_error' => 'DjVu بېتى دائىرىدىن ھالقىپ كەتتى',
 'djvu_no_xml' => 'DjVu ھۆججىتىدىن XML گە ئېرىشەلمىدى',
+'thumbnail-temp-create' => 'ۋاقىتلىق كىچىك سۈرەت ھۆججەتنى قۇرالمايدۇ',
 'thumbnail-dest-create' => 'قارار ھۈجەتتە ۋاقتلىق كىچىك ھۈجەت ساقلىغل بولمدى',
 'thumbnail_invalid_params' => 'ئىناۋەتسىز كىچىك رەسىم پارامېتىرى',
 'thumbnail_dest_directory' => 'نىشان مۇندەرىجە قۇرالمىدى',
@@ -2633,6 +2751,7 @@ $1',
 'import-interwiki-templates' => 'ھەممە قېلىپىنى ئۆز ئىچىگە ئالىدۇ',
 'import-interwiki-submit' => 'ئەكىر',
 'import-interwiki-namespace' => 'نىشان ئات بوشلۇقى:',
+'import-interwiki-rootpage' => 'نىشان غول بەت (تاللاشچان):',
 'import-upload-filename' => ':ھۆججەت ئاتى',
 'import-comment' => 'ئىزاھات:',
 'importtext' => '[[Special:Export|چىقىرىش ئىقتىدارى]]نى ئىشلىتىپ ئەسلى ۋىكىدىن ھۆججەت چىقىرىڭ .
@@ -2666,6 +2785,13 @@ $1',
 'import-invalid-interwiki' => 'بەلگىلەنگەن wiki دىن ئەكىرەلمىدى.',
 'import-error-edit' => '"$1" نى ئەكىرمىدى چۈنكى سىز ئۇنى تەھرىرلەشكە يول قويمىغان.',
 'import-error-create' => '"$1" نى ئەكىرمىدى چۈنكى سىز ئۇنى قۇرۇشقا يول قويمىغان.',
+'import-error-interwiki' => '"$1" بەتنى ئەكىرەلمىدى سەۋەبى ئۇنىڭ ئىسمى سىرتقى ۋىكى ئۇلانمىسى((interwiki))نى ئىشلىتىدۇ.',
+'import-error-special' => '"$1" بەتنى ئەكىرەلمىدى چۈنكى ئۇ بەت قۇرالمايدىغان ئالاھىدە ئات بوشلۇقى ئىشلىتىشكە ئېھتىياجلىق.',
+'import-error-invalid' => '"$1" بەتنى ئەكىرەلمىدى چۈنكى ئۇنىڭ ئىسمى ئىناۋەتسىز.',
+'import-error-unserialize' => '"$1" بەتنىڭ $2 تۈزىتىلگەن نەشرىنى تەرتىپسىزلەشتۈرەلمىدى. بۇ نەشرى ئىشلىتىدىغان مەزمۇن مودېلى $3  تەرتىپلەشتۈرۈش  $4.',
+'import-options-wrong' => '{{PLURAL:$2|تاللانما}} خاتالىقى: <nowiki>$1</nowiki>',
+'import-rootpage-invalid' => 'بېرىلگەن غول بەتنىڭ ماۋزۇسى ئىناۋەتسىز.',
+'import-rootpage-nosubpage' => '"$1" ئات بوشلۇقىنىڭ غول بېتى تارماق بەتكە يول قويمايدۇ.',
 
 # Import log
 'importlogpage' => 'ئەكىرىش خاتىرىسى',
@@ -2675,6 +2801,16 @@ $1',
 'import-logentry-interwiki' => 'wiki ھالقىغان $1',
 'import-logentry-interwiki-detail' => '$2 دىن كەلگەن $1 {{PLURAL:$1|تۈزىتىش|تۈزىتىش}}',
 
+# JavaScriptTest
+'javascripttest' => 'JavaScript سىناش',
+'javascripttest-title' => '$1 نى تەكشۈرۈش يۈرگۈزۈۋاتىدۇ',
+'javascripttest-pagetext-noframework' => 'بۇ بەت JavaScript ئىجرا قىلىپ سىناشقا قالدۇرۇلغان.',
+'javascripttest-pagetext-unknownframework' => 'يوچۇن سىناق قۇرۇلما "$1".',
+'javascripttest-pagetext-frameworks' => 'تۆۋەندىكى قۇرۇلمىدىن بىرنى تاللاڭ: $1',
+'javascripttest-pagetext-skins' => 'بىر تېرە تاللاپ سىناقنى ئىجرا قىلىڭ:',
+'javascripttest-qunit-intro' => 'mediawiki.org دىكى [$1 سىناش قوللانمىسى]نى كۆرۈڭ.',
+'javascripttest-qunit-heading' => 'MediaWiki JavaScript QUnit سىناش يۈرۈشلۈكى',
+
 # Tooltip help for the actions
 'tooltip-pt-userpage' => 'ئىشلەتكۈچى بېتىڭىز',
 'tooltip-pt-anonuserpage' => 'بۇ بېكەتنى تەھرىرلىگەندە ئىشلەتكەن IP ماس كەلگەن ئىشلەتكۈچى بېتى',
@@ -2737,6 +2873,8 @@ $1',
 'tooltip-diff' => 'بۇ تېكستكە ئېلىپ بارغان ئۆزگەرتىشنى كۆرسەت',
 'tooltip-compareselectedversions' => 'بۇ بەتتە تاللانغان ئىككى نەشرىنىڭ پەرقىنى كۆرسەت',
 'tooltip-watch' => 'بۇ بەتنى كۆزەت تىزىملىكىگە قوش',
+'tooltip-watchlistedit-normal-submit' => 'ماۋزۇ چىقىرىۋەت',
+'tooltip-watchlistedit-raw-submit' => 'كۆزەت تىزىملىكى يېڭىلا',
 'tooltip-recreate' => 'ئۆچۈرۈلگەن بولسىمۇ بۇ بەتنى قايتا قۇر',
 'tooltip-upload' => 'يۈكلەشنى باشلا',
 'tooltip-rollback' => '"ئەسلىگە قايتۇر" بىر چېكىلسە ئالدىنقى تۆھپىكارنىڭ تەھرىرىلىگەن ھالىتىگە قايتۇرىدۇ.',
@@ -2802,20 +2940,53 @@ $1',
 'spambot_username' => 'MediaWiki ئېلان تازىلىغۇچ',
 'spam_reverting' => 'ئۇلانمىسى يوق $1 نىڭ ئاخىرقى تۈزىتىلگەن نەشرىگە ئەسلىگە كەلتۈرۈۋاتىدۇ',
 'spam_blanking' => 'ھەممە ئۇلانمىنى ئۆز ئىچىگە ئالغان $1 نىڭ تۈزىتىلگەن نەشرى، توسۇۋاتىدۇ',
+'spam_deleting' => '$1 باغلىنىشى بار ھەممە تۈزىتىلگەن نەشرىنى ئۆچۈرۈۋاتىدۇ',
 
 # Info page
 'pageinfo-title' => '"$1" نىڭ ئۇچۇرى',
+'pageinfo-not-current' => 'كەچۈرۈڭ، بۇرۇنقى نەشر نۇسخىنىڭ ئۇچۇرى تەمىنلەش مۇمكىن ئەمەس.',
 'pageinfo-header-basic' => 'ئاساسىي ئۇچۇر',
 'pageinfo-header-edits' => 'تەھرىر خاتىرىسى',
 'pageinfo-header-restrictions' => 'بەت  قوغداش',
 'pageinfo-header-properties' => 'بەت خاراكتېرى',
 'pageinfo-display-title' => 'كۆرسىتىدغان نام',
+'pageinfo-default-sort' => 'كۆڭۈلدىكى تەرتىپلەش ئاچقۇچى',
+'pageinfo-length' => 'بەت چوڭلۇقى (بايت)',
 'pageinfo-article-id' => 'بەت ID',
+'pageinfo-language' => 'بەت مەزمۇن تىلى',
+'pageinfo-robot-policy' => 'ئىزدەش ماتور ھالىتى',
+'pageinfo-robot-index' => 'ئىندېكىسلاشچان',
+'pageinfo-robot-noindex' => 'ئىندېكىسلانمايدىغان',
 'pageinfo-views' => 'كۆرۈنۈش سانى',
 'pageinfo-watchers' => 'بەت كۆزەتكۈچىلەر سانى',
+'pageinfo-redirects-name' => 'بۇ بەتكە قايتا نىشانلايدۇ',
 'pageinfo-redirects-value' => '$1',
+'pageinfo-subpages-name' => 'بۇ بەتنىڭ تارماق بېتى',
+'pageinfo-subpages-value' => '$1 ($2 {{PLURAL:$2|قايتا نىشانلاش}}; $3 {{PLURAL:$3|قايتا نىشانلىماسلىق}})',
+'pageinfo-firstuser' => 'بەت قۇرغۇچى',
+'pageinfo-firsttime' => 'بەت قۇرۇلغان ۋاقتى',
+'pageinfo-lastuser' => 'يېقىنقى تەھرىرلىگۈچى',
+'pageinfo-lasttime' => 'يېقىنقى تەھرىر  ۋاقتى',
 'pageinfo-edits' => 'تەھرىر سانى',
 'pageinfo-authors' => 'يازغۇچىلار سانى',
+'pageinfo-recent-edits' => 'يېقىنقى تەھرىر سانى (ئۆتكەن $1 ئىچىدە)',
+'pageinfo-recent-authors' => 'يېقىنقى ئېنىق يازغۇچىلار سانى',
+'pageinfo-magic-words' => '{{PLURAL:$1|سېھرىي خەت}}',
+'pageinfo-hidden-categories' => '{{PLURAL:$1|يوشۇرۇلغان تۈر}}',
+'pageinfo-templates' => '{{PLURAL:$1|سىڭدۈرۈلگەن قېلىپ}}',
+'pageinfo-transclusions' => '($1) {{PLURAL:$1|بەت}}تە سىڭدۈرۈلگەن',
+'pageinfo-toolboxlink' => 'بەت ئۇچۇر',
+'pageinfo-redirectsto' => 'قايتا نىشانلىنىدىغىنى',
+'pageinfo-redirectsto-info' => ' ئۇچۇر',
+'pageinfo-contentpage' => 'مەزمۇن بېتى سۈپىتىدە ھېسابلىدى',
+'pageinfo-contentpage-yes' => 'ھەئە',
+'pageinfo-protect-cascading' => 'زەنجىرلىك قۇلۇپ بۇ جايدىن باشلىنىدۇ',
+'pageinfo-protect-cascading-yes' => 'ھەئە',
+'pageinfo-protect-cascading-from' => 'قوغداش دەرىجىسىنىڭ باغلىنىش ئورنى',
+'pageinfo-category-info' => 'تۈر ئۇچۇرى',
+'pageinfo-category-pages' => 'بەت سانى',
+'pageinfo-category-subcats' => 'تارماق تۈر سانى',
+'pageinfo-category-files' => 'ھۆججەت سانى',
 
 # Skin names
 'skinname-standard' => 'Classic',
@@ -2838,6 +3009,8 @@ $1',
 'markedaspatrollederror' => 'چارلاش بەلگىسى قويغىلى بولمايدۇ',
 'markedaspatrollederrortext' => 'مەلۇم نەشرىنى تاللىسىڭىز ئاندىن چارلاش بەلگىسى قويغىلى بولىدۇ.',
 'markedaspatrollederror-noautopatrol' => 'سىز ئۆزىڭىزنىڭ ئۆزگەرتىشىگە چارلاش بەلگىسى قويالمايسىز.',
+'markedaspatrollednotify' => '$1 نىڭ ئۆزگەرتىشىگە چارلاش بەلگىسى قويۇلدى.',
+'markedaspatrollederrornotify' => 'چارلىيالمىغانلىق بەلگىسى قويۇلدى.',
 
 # Patrol log
 'patrol-log-page' => 'چارلاش خاتىرىسى',
@@ -2870,15 +3043,19 @@ $1',
 'file-info-size-pages' => '$1 × $2 پىكسېل، ھۆججەت چوڭلۇقى: $3, MIME تىپى: $4, $5 {{PLURAL:$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' => 'تولۇق ئېنىقلىق دەرىجىسى',
 'show-big-image-preview' => 'بۇ ئالدىن كۆزىتىشنىڭ چوڭلۇقى: $1.',
-'show-big-image-other' => 'باشقا چوڭلۇقى: $1.',
+'show-big-image-other' => 'باشقا {{PLURAL:$2|چوڭلۇقى}}: $1.',
 'show-big-image-size' => '$1 × $2 پىكسېل',
 'file-info-gif-looped' => 'دەۋرىيلەنگەن',
 'file-info-gif-frames' => '$1 {{PLURAL:$1|كاندۇك|كاندۇك}}',
 'file-info-png-looped' => 'دەۋرىيلەنگەن',
 'file-info-png-repeat' => '$1 {{PLURAL:$1|قېتىم|قېتىم}} قويۇلدى',
 'file-info-png-frames' => '$1 {{PLURAL:$1|كاندۇك|كاندۇك}}',
+'file-no-thumb-animation' => "'''دىققەت: تېخنىكا چەكلىمىسى تۈپەيلىدىن، بۇ ھۆججەتنىڭ كىچىك سۈرىتىنى جانلاندۇرۇم سۈپىتىدە بىر تەرەپ قىلالمايدۇ.'''",
+'file-no-thumb-animation-gif' => "'''دىققەت: تېخنىكا چەكلىمىسى تۈپەيلىدىن، يۇقىرى ئېنىقلىقتىكى GIF سۈرەتنىڭ كىچىك سۈرىتىنى جانلاندۇرۇم سۈپىتىدە بىر تەرەپ قىلالمايدۇ.'''",
 
 # Special:NewFiles
 'newimages' => 'يېڭى ھۆججەت كارىدورى',
@@ -2898,6 +3075,14 @@ $1',
 'minutes-abbrev' => '$1m',
 'hours-abbrev' => '$1h',
 'days-abbrev' => '$1d',
+'seconds' => '{{PLURAL: $1|$1سېكۇنت}}',
+'minutes' => '{{PLURAL: $1|$1مىنۇت}}',
+'hours' => '{{PLURAL:$1|$1سائەت}}',
+'days' => '{{PLURAL:$1|$1 كۈن}}',
+'months' => '{{PLURAL:$1|$1 ئاي}}',
+'years' => '{{PLURAL:$1|$1 يىل}}',
+'ago' => '$1 بۇرۇن',
+'just-now' => 'بايا',
 
 # Bad image list
 'bad_image_list' => 'تۆۋەندىكى فورماتتا يېزىڭ:
@@ -3157,9 +3342,9 @@ Variants for Chinese language
 'exif-orientation-3' => '180° ئايلاندۇر',
 'exif-orientation-4' => 'بويىغا ئايلاندۇر',
 'exif-orientation-5' => 'سولغا 90°  بويىغا ئايلاندۇر',
-'exif-orientation-6' => 'ئÙ\88Ú­غا 90° ئايلاندۇر',
+'exif-orientation-6' => 'سÙ\88Ù\84غا 90° ئايلاندۇر',
 'exif-orientation-7' => 'ئوڭغا 90°  بويىغا ئايلاندۇر',
-'exif-orientation-8' => 'سÙ\88Ù\84غا 90° ئايلاندۇر',
+'exif-orientation-8' => 'ئÙ\88Ú­غا 90° ئايلاندۇر',
 
 'exif-planarconfiguration-1' => 'دوغىلاق ئەندىزىسى',
 'exif-planarconfiguration-2' => 'تەكشىلىك ئەندىزىسى',
@@ -3429,6 +3614,7 @@ $5
 # Scary transclusion
 'scarytranscludedisabled' => '[بېكەت ئاتلىغان كود ئايلاندۇرۇش چەكلەنگەن]',
 'scarytranscludefailed' => '[$1 نىڭ قېلىپىنى ئېلىش مەغلۇپ بولدى]',
+'scarytranscludefailed-httpstatus' => '[$1:HTTP $2 گە قېلىپ ئېرىشىش مەغلۇپ بولدى]',
 'scarytranscludetoolong' => '[URL بەك ئۇزۇن]',
 
 # Delete conflict
@@ -3513,6 +3699,9 @@ $5
 'watchlisttools-edit' => 'كۆزەت تىزىملىكىنى كۆرۈپ تەھرىرلەش',
 'watchlisttools-raw' => 'ئەسلى كۆزەت تىزىملىك تەھرىرى',
 
+# Signatures
+'signature' => '[[{{ns:user}}:$1|$2]] ([[{{ns:user_talk}}:$1|سۆزلىشىش]])',
+
 # Core parser functions
 'unknown_extension_tag' => 'نامەلۇم كېڭەيتىلگەن خەتكۈچ "$1"',
 'duplicate-defaultsort' => '\'\'\'ئاگاھلاندۇرۇش:\'\'\' كۆڭۈلدىكى تەرتىپلەش كۇنۇپكىسى "$2" ئىلگىرىكى كۆڭۈلدىكى تەرتىپلەش كۇنۇپكىسى "$1" نى قاپلىۋېتىدۇ.',
@@ -3537,6 +3726,7 @@ $5
 'version-license' => 'ئىجازەتنامە',
 'version-poweredby-credits' => "بۇ ۋىكىنى '''[//www.mediawiki.org/ MediaWiki]''' تېخنىكىلىق قوللايدۇ، نەشر ھوقۇقى © 2001-$1 $2",
 'version-poweredby-others' => 'باشقا',
+'version-credits-summary' => 'تۆۋەندىكى كىشىنىڭ [[Special:Version|MediaWiki]] غا تۆھپە قوشقانلىقىغا رەھمەت ئېيتىمىز.',
 'version-license-info' => 'MediaWiki ئەركىن يۇمشاق دېتال؛ سىز ئەركىن يۇمشاق دېتال ۋەخپىسىنىڭ ئېلان قىلغان GNU ئاممىباپ ئاممىۋى ئىجازەت ماددىلىرىدىكى بەلگىمىلەرگە ئاساسەن، بۇ پىروگراممىنى قايتا تارقىتىپ ياكى ئۆزگەرتەلەيسىز؛ مەيلى سىز مەزكۇر ئىجازەتنامىنىڭ ئىككىنچى نەشرى ياكى (ئۆزىڭىز تاللىغان) خالىغان كۈندە تارقىتىلغان نەشرىنى ئاساس قىلسىڭىز بولۇۋېرىدۇ.
 
 MediaWiki ئىشلىتىش مەقسىتىنى ئاساس قىلىپ ئېلان قىلىنغان، ئەمما ھېچقانداق كاپالەت مەسئۇلىيىتىنى ئۈستىگە ئالمايدۇ؛  سېتىشچانلىق ياكى مۇئەييەن مەقسەت بويىچە ئىشلىتىشچانلىققا كاپالەتلىك قىلمايدۇ. تەپسىلاتىنىGNU ئاممىباپ ئاممىۋى ئىجازەتنامىدىن پايدىلىنىڭ.
@@ -3545,6 +3735,9 @@ MediaWiki ئىشلىتىش مەقسىتىنى ئاساس قىلىپ ئېلان 
 'version-software' => 'قاچىلانغان يۇمشاق دېتال',
 'version-software-product' => 'مەھسۇلات',
 'version-software-version' => 'نەشرى',
+'version-entrypoints' => 'كىرىش نۇقتىسىنىڭ URL لىرى',
+'version-entrypoints-header-entrypoint' => 'كىرىش نۇقتىسى',
+'version-entrypoints-header-url' => 'URL',
 
 # Special:FilePath
 'filepath' => 'ھۆججەت يولى',
@@ -3571,14 +3764,14 @@ MediaWiki ئىشلىتىش مەقسىتىنى ئاساس قىلىپ ئېلان 
 * <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' => 'ئىشلەتكۈچى ۋە ھوقۇقى',
 'specialpages-group-highuse' => 'كۆپ ئىشلىتىلگەن بەت',
 'specialpages-group-pages' => 'بەت تىزىملىكى',
 'specialpages-group-pagetools' => 'بەت قورالى',
-'specialpages-group-wiki' => 'Wiki سانلىق مەلۇماتى ۋە قورال',
+'specialpages-group-wiki' => 'سانلىق مەلۇمات ۋە قوراللار',
 'specialpages-group-redirects' => 'قايتا نىشانلانغان ئالاھىدە بەت',
 'specialpages-group-spam' => 'ئەخلەتكە قارشى قورال',
 
@@ -3648,12 +3841,111 @@ MediaWiki ئىشلىتىش مەقسىتىنى ئاساس قىلىپ ئېلان 
 'sqlite-no-fts' => '$1 پۈتۈن تېكست ئىزدەشنى قوللىمايدۇ',
 
 # New logging system
+'logentry-delete-delete' => '$1 $3 بەتنى ئۆچۈرەتتى',
+'logentry-delete-restore' => '$1 $3 بەتنى ئەسلىگە قايتۇردى',
+'logentry-delete-event' => '$1 ئىشلەتكۈچى $3 دىكى {{PLURAL:$5|خاتىرە ھادىسە}}سىنىڭ كۆۈنۈشچانلىقىنى ئۆزگەرتتى: $4',
+'logentry-delete-revision' => '$1 ئىشلەتكۈچى $3 بەتتىكى {{PLURAL:$5|تۈزىتىلگەن نەشرى}}نىڭ كۆرۈنۈشچانلىقىنى ئۆزگەرتتى: $4',
+'logentry-delete-event-legacy' => '$3 دىكى خاتىرە كۆرۈنۈشچانلىقنى $1 ئۆزگەرتتى',
+'logentry-delete-revision-legacy' => '$3 دىكى تۈزىتىلگەن نەشرىنىڭ كۆرۈنۈشچانلىقنى $1 ئۆزگەرتتى',
+'logentry-suppress-delete' => '$3 بەتنى $1 يوشۇردى',
+'logentry-suppress-event' => '$1 مەخپىي ھالدا $3 دىكى {{PLURAL:$5|خاتىرە ھادىسە}}سىنىڭ كۆۈنۈشچانلىقىنى ئۆزگەرتتى: $4',
+'logentry-suppress-revision' => '$1 مەخپىي ھالدا $3 بەتتىكى {{PLURAL:$5|تۈزىتىلگەن نەشرى}}نىڭ كۆرۈنۈشچانلىقىنى ئۆزگەرتتى: $4',
+'logentry-suppress-event-legacy' => '$3 دىكى خاتىرە كۆرۈنۈشچانلىقنى $1 مەخپىي ئۆزگەرتتى',
+'logentry-suppress-revision-legacy' => '$3 بەتتىكى تۈزىتىلگەن نەشرىنىڭ كۆرۈنۈشچانلىقنى $1 مەخپىي ئۆزگەرتتى',
+'revdelete-content-hid' => 'مەزمۇن يوشۇرۇلدى',
+'revdelete-summary-hid' => 'خۇلاسە تەھرىرلەش يوشۇرۇلدى',
+'revdelete-uname-hid' => 'ئىشلەتكۈچى ئىسمى يوشۇرۇلدى',
+'revdelete-content-unhid' => 'مەزمۇن كۆرۈلدى',
+'revdelete-summary-unhid' => 'خۇلاسە تەھرىرلەش كۆرۈلدى',
+'revdelete-uname-unhid' => 'ئىشلەتكۈچى ئىسمى كۆرۈلدى',
 'revdelete-restricted' => 'باشقۇرغۇچى چەكلىمىسىنى قوللان',
 'revdelete-unrestricted' => 'باشقۇرغۇچىنىڭ چەكلىمىسى چىقىرىۋېتىلدى',
 'logentry-move-move' => '$1 نى $3 بەتتىن $4 غا يۆتكىدى',
 'logentry-move-move-noredirect' => 'قايتا نىشانلاشنى قالدۇرمايلا $1 نى $3 بەتتىن $4 غا يۆتكىدى',
 'logentry-move-move_redir' => 'قايتا نىشانلاپ $1 نى $3 بەتتىن $4 غا يۆتكىدى',
 'logentry-move-move_redir-noredirect' => 'قايتا نىشانلاش ئارقىلىق $1 نى $3 بەتتىن $4 غا يۆتكىدى قايتا نىشانلاشنى قالدۇرمىدى',
-'newuserlog-byemail' => 'ئىم ئىلخەتتە يوللاندى',
+'logentry-patrol-patrol' => '$3 بەتنىڭ $4 تۈزىتىلگەن نەشرىگە $1 چارلاش بەلگىسى سالدى',
+'logentry-patrol-patrol-auto' => '$3 بەتنىڭ $4 تۈزىتىلگەن نەشرىگە $1 چارلاش بەلگىسى ئاپتوماتىك سالدى',
+'logentry-newusers-newusers' => 'ئەزا $1 قۇرۇلبولدى',
+'logentry-newusers-create' => 'ئەزا $1 قۇرۇلبولدى',
+'logentry-newusers-create2' => 'ئىشلەتكۈچى ھېساباتى $3 نى $1 قۇردى',
+'logentry-newusers-byemail' => 'ئىشلەتكۈچى ھېساباتى $3 نى $1 قۇردى ھەمدە ئىمنى تورخەتكە ئەۋەتتى',
+'logentry-newusers-autocreate' => 'ئىشلەتكۈچى $1 ئاپتوماتلىق قۇرۇلدى',
+'logentry-rights-rights' => '$3 نىڭ ئىشلەتكۈچى گۇرۇپپىسىنى $4 دىن $5 غا $1 ئالماشتۇردى',
+'logentry-rights-rights-legacy' => '$3 نىڭ ئىشلەتكۈچى گۇرۇپپىسىنى $1 ئۆزگەرتتى',
+'logentry-rights-autopromote' => '$1 نىڭ ئىشلەتكۈچى گۇرۇپپىسى ئۆزلۈكىدىن $4 دىن $5 غا يۈكسەلدى',
+'rightsnone' => '(يوق)',
+
+# Feedback
+'feedback-bugornote' => 'ئەگەر بىر تېخنىكىلىق مەسىلىنى تەپسىلىي بايان قىلىشقا تەييارلانماقچى بولسىڭىز، [$1 خاتالىق دوكلات]ى يوللاڭ. ياكى تۆۋەندىكى ئاددىي جەدۋەلنى ئىشلىتىڭ. ئىنكاسىڭىز "[$3 $2]" بەتكە قوشۇلىدۇ، ئىشلەتكۈچى ئاتىڭىز ۋە ئىشلەتكەن توركۆرگۈڭىز قوشۇپ قويۇلىدۇ.',
+'feedback-subject' => 'تېما:',
+'feedback-message' => 'ئۇچۇر:',
+'feedback-cancel' => 'ۋاز كەچ',
+'feedback-submit' => 'قايتۇرما ئىنكاس يوللا',
+'feedback-adding' => 'قايتۇرما ئىنكاسنى بەتكە قوشۇۋاتىدۇ…',
+'feedback-error1' => 'خاتالىق: API دىن كەلگەن تونۇيالمايدىغان نەتىجە',
+'feedback-error2' => 'خاتا:تەھرىرلەش مەغلۇپ بولدى',
+'feedback-error3' => 'خاتالىق: API دىن ئىنكاس يوق',
+'feedback-thanks' => 'كۆپ رەھمەت! قايتۇرما ئىنكاسىڭىز "[$2 $1]" بەتكە يوللاندى.',
+'feedback-close' => 'تامام',
+'feedback-bugcheck' => 'قالتىس! كەمتۈكنىڭ ئاللىبۇرۇن يوللانغان [$1 مەلۇملۇق كەمتۈك] ياكى ئەمەسلىكىنى تەكشۈرۈڭ.',
+'feedback-bugnew' => 'تەكشۈردۈم. يېڭى بىر كەمتۈك دوكلات قىل',
+
+# Search suggestions
+'searchsuggest-search' => 'ئىزدەش',
+'searchsuggest-containing' => 'ئىچىدە…',
+
+# API errors
+'api-error-badaccess-groups' => 'ھۆججەتنى بۇ ۋىكىغا يۈكلەش ھوقۇقىڭىز يوق.',
+'api-error-badtoken' => 'ئىچكى خاتالىق: سۆزلىشىش ئىناۋەتسىز.',
+'api-error-copyuploaddisabled' => 'URL ئارقىلىق يوللايدىغان ئىقتىدارنى بۇ مۇلازىمېتىر چەكلىگەن.',
+'api-error-duplicate' => 'تورتۇرادا ئوخشاش مەزمۇندىكى {{PLURAL:$1|is [$2 باشقا ھۆججەت]|[$2 بەزى باشقا ھۆججەتلەر]}} مەۋجۇت.',
+'api-error-duplicate-archive' => 'تورتۇرادا ئىلگىرى ئوخشاش مەزمۇن بار {{PLURAL:$1|was [$2 باشقا بىر ھۆججەت]|were [$2 باشقا ھۆججەتلەر]}} مەۋجۇت ئەمما ئۆچۈرۈلگەن.',
+'api-error-duplicate-archive-popup-title' => 'تەكرار {{PLURAL:$1|ھۆججەت}} ئۆچۈرۈلدى.',
+'api-error-duplicate-popup-title' => 'تەكرار {{PLURAL:$1|ھۆججەت}}.',
+'api-error-empty-file' => 'يوللىغان ھۆججىتىڭىز بوش.',
+'api-error-emptypage' => 'يېڭىدىن قۇرۇش، قۇرۇق بەت يول قۇيۇلمايدۇ.',
+'api-error-fetchfileerror' => 'ئىچكى خاتالىق: ھۆججەتكە ئېرىشىۋاتقاندا خاتالىق كۆرۈلدى.',
+'api-error-fileexists-forbidden' => '"$1" ئاتلىق ھۆججەت مەۋجۇت، ئۇنى قاپلىغىلى بولمايدۇ.',
+'api-error-fileexists-shared-forbidden' => '"$1" ئاتلىق ھۆججەت ھەمبەھىر ۋاستە ئامبىرىدا مەۋجۇت، ئۇنى قاپلىغىلى بولمايدۇ.',
+'api-error-file-too-large' => 'يوللىغان ھۆججىتىڭىز بەك چوڭ.',
+'api-error-filename-tooshort' => 'ھۆججەت ئاتى بەك قىسقا.',
+'api-error-filetype-banned' => 'بۇ خىل ھۆججەت چەكلەنگەن.',
+'api-error-filetype-banned-type' => '$1 {{PLURAL:$4| ھۆججەت تىپىنى قوللىمايدۇ}}. قوللايدىغان {{PLURAL:$3|ھۆججەت تىپى}} $2.',
+'api-error-filetype-missing' => 'بۇ ھۆججەتنىڭ كېڭەيتىلگەن ئاتى يوق.',
+'api-error-hookaborted' => 'سىز سىنىغان ئۆزگەرتىشنى قىستۇرما توختاتتى.',
+'api-error-http' => 'ئىچكى خاتالىق:مۇلازىمېتىرغا باغلىنالمىدى.',
+'api-error-illegal-filename' => 'ھۆججەت ئاتىغا يول قويمايدۇ.',
+'api-error-internal-error' => 'ئىچكى خاتالىق:سىز يۈكلىگەن ھۆججەتنى بىرتەرەپ قېلىش جەريانىدا مەسىلە كۆرۈلدى.',
+'api-error-invalid-file-key' => 'ئىچكى خاتالىق: ۋاقىتلىق ساقلىغۇچتا ھۆججەت تېپىلمىدى.',
+'api-error-missingparam' => 'ئىچكى خاتالىق: ئىلتىماستا پارامېتىر كەم.',
+'api-error-missingresult' => 'ئىچكى خاتالىق: كۆچۈرۈشنىڭ مۇۋەپپەقىيەتلىك ياكى ئەمەسلىكىنى جەزملىيەلمىدى.',
+'api-error-mustbeloggedin' => 'ھۆججەت يوللاش ئۈچۈن تىزىملىتىڭ.',
+'api-error-mustbeposted' => 'ئىچكى خاتالىق: ئىلتىماستا HTTP POST زۆرۈر.',
+'api-error-noimageinfo' => 'مۇۋەپپەقىيەتلىك يۈكلەندى ئەمما مۇلازىمېتىر ھۆججەتكە مۇناسىۋەتلىك ئۇچۇر بەرمىدى.',
+'api-error-nomodule' => 'ئىچكى خاتالىق: يۈكلەش مودېل توپلىمى يوق.',
+'api-error-ok-but-empty' => 'ئىچكى خاتالىق: مۇلازىمېتىردا ئىنكاس يوق.',
+'api-error-overwrite' => 'مەۋجۇد ھۆججەت قاپلاشقا يول قويمايدۇ.',
+'api-error-stashfailed' => 'ئىچكى خاتالىق: مۇلازىمېتىر ۋاقىتلىق ھۆججەتنى ساقلىيالمىدى.',
+'api-error-publishfailed' => 'ئىچكى خاتالىق: مۇلازىمېتىر ۋاقىتلىق ھۆججەتنى تارقىتالمىدى.',
+'api-error-timeout' => 'مۇلازىمەت كومپيۇتېر كۆتكەن ۋاقتا ئىنكاس قايتۇرمىدى.',
+'api-error-unclassified' => 'نامەلۇم خاتالىق كۆرۈلدى.',
+'api-error-unknown-code' => 'نامەلۇم خاتالىق:"$1"',
+'api-error-unknown-error' => 'ئىچكى خاتالىق: ھۆججىتىڭىزنى يۈكلەشنى سىناۋاتقاندا خاتالىق كۆرۈلدى.',
+'api-error-unknown-warning' => 'نامەلۇم ئاگاھلاندۇرۇش:"$1"',
+'api-error-unknownerror' => 'نامەلۇم خاتالىق:"$1"',
+'api-error-uploaddisabled' => 'بۇقامۇسدا يوللاش مەجرۇھنى قىلىندى.',
+'api-error-verification-error' => 'ھۆججەت بۇزۇلغان بولۇشى مۇمكىن ياكى كېڭەيتىلگەن ئاتى خاتا.',
+
+# Durations
+'duration-seconds' => '$1 {{PLURAL:$1|سېكۇنت}}',
+'duration-minutes' => '$1 {{PLURAL: $1|مىنۇت}}',
+'duration-hours' => '$1 {{PLURAL: $1|سائەت}}',
+'duration-days' => '$1 {{PLURAL: $1|كۈن}}',
+'duration-weeks' => '$1 {{PLURAL: $1|ھەپتە}}',
+'duration-years' => '$1 {{PLURAL: $1|يىل}}',
+'duration-decades' => '$1 {{PLURAL:$1|ئون يىل}}',
+'duration-centuries' => '$1 {{PLURAL:$1|ئەسىر}}',
+'duration-millennia' => '$1 {{PLURAL:$1|مىڭ يىل}}',
 
 );
index e86304f..06ac565 100644 (file)
@@ -32,6 +32,7 @@
  * @author NickK
  * @author Olvin
  * @author Prima klasy4na
+ * @author RLuts
  * @author Riwnodennyk
  * @author Sodmy
  * @author Urhixidur
@@ -490,6 +491,7 @@ $messages = array(
 'newwindow' => '(відкривається в новому вікні)',
 'cancel' => 'Скасувати',
 'moredotdotdot' => 'Детальніше…',
+'morenotlisted' => 'Більше немає нічого…',
 'mypage' => 'Сторінка',
 'mytalk' => 'Обговорення',
 'anontalk' => 'Обговорення для цієї IP-адреси',
@@ -791,7 +793,7 @@ $1',
 'gotaccount' => "Ви вже зареєстровані? '''$1'''.",
 'gotaccountlink' => 'Увійдіть',
 'userlogin-resetlink' => 'Забули дані, потрібні для входу?',
-'createaccountmail' => 'елекÑ\82Ñ\80онноÑ\8e Ð¿Ð¾Ñ\88Ñ\82оÑ\8e',
+'createaccountmail' => 'Ð\92икоÑ\80иÑ\81Ñ\82аÑ\82и Ñ\82имÑ\87аÑ\81овий Ð²Ð¸Ð¿Ð°Ð´ÐºÐ¾Ð²Ð¸Ð¹ Ð¿Ð°Ñ\80олÑ\8c Ñ\96 Ð½Ð°Ð´Ñ\96Ñ\81лаÑ\82и Ð¹Ð¾Ð³Ð¾ Ð½Ð° Ð°Ð´Ñ\80еÑ\81Ñ\83 ÐµÐ»ÐµÐºÑ\82Ñ\80онноÑ\97 Ð¿Ð¾Ñ\88Ñ\82и, Ð²ÐºÐ°Ð·Ð°Ð½Ñ\83 Ð½Ð¸Ð¶Ñ\87е',
 'createaccountreason' => 'Причина:',
 'badretype' => 'Уведені вами паролі не збігаються.',
 'userexists' => "Уведене ім'я користувача вже існує.
@@ -870,6 +872,7 @@ $1',
 # E-mail sending
 'php-mail-error-unknown' => 'Невідома помилка в PHP-mail() функції',
 'user-mail-no-addy' => 'Спроба надсилання електронної пошти без зазначеної адреси електронної пошти.',
+'user-mail-no-body' => 'Спроба надіслати електронного листа з порожнім або надто коротким вмістом.',
 
 # Change password dialog
 'resetpass' => 'Змінити пароль',
@@ -927,6 +930,7 @@ $2
 'changeemail-oldemail' => 'Поточна адреса електронної пошти:',
 'changeemail-newemail' => 'Нова адреса електронної пошти:',
 'changeemail-none' => '(немає)',
+'changeemail-password' => 'Ваш пароль проекту {{SITENAME}}:',
 'changeemail-submit' => 'Змінити адресу електронної пошти',
 'changeemail-cancel' => 'Скасувати',
 
@@ -1114,7 +1118,6 @@ $2
 'hiddencategories' => 'Ця сторінка належить до $1 {{PLURAL:$1|прихованої категорії|прихованих категорій|прихованих категорій}}:',
 'edittools' => '<!-- Розміщений тут текст буде відображатися під формою редагування і формою завантаження. -->',
 'edittools-upload' => '-',
-'nocreatetitle' => 'Створення сторінок обмежено',
 'nocreatetext' => 'На цьому сайті обмежено можливість створення нових сторінок.
 Ви можете повернуться назад й змінити існуючу сторінку, [[Special:UserLogin|ввійти в систему, або створити новий обліковий запис]].',
 'nocreate-loggedin' => 'У вас нема дозволу створювати нові сторінки.',
@@ -1359,7 +1362,7 @@ $1",
 'editundo' => 'скасувати',
 'diff-multi' => '({{PLURAL:$1|Одна проміжна версія одного користувача не показана|$1 проміжні версії {{PLURAL:$2|одного користувача|$2 користувачів}} не показані|$1 проміжних версій {{PLURAL:$2|одного користувача|$2 користувачів}} не показані}})',
 'diff-multi-manyusers' => '({{PLURAL:$1|не показана $1 проміжна я версія|не показані $1 проміжні версії|не показано $1 проміжних версій}}, зроблених більш, ніж {{PLURAL:$2|$1 користувачем|$2 користувачами}})',
-'difference-missing-revision' => '{{PLURAL:$2|$2 Ð²ÐµÑ\80Ñ\81Ñ\96Ñ\8f|$2 Ð²ÐµÑ\80Ñ\81Ñ\96Ñ\97|$2 Ð²ÐµÑ\80Ñ\81Ñ\96й}} Ð´Ð»Ñ\8f Ñ\86Ñ\8cого Ð¿Ð¾Ñ\80Ñ\96внÑ\8fннÑ\8f ($1) Ð½Ðµ {{PLURAL:$2|знайдене|знайдені}}.
+'difference-missing-revision' => '{{PLURAL:$2|$2 Ð²ÐµÑ\80Ñ\81Ñ\96Ñ\8f|$2 Ð²ÐµÑ\80Ñ\81Ñ\96Ñ\97|$2 Ð²ÐµÑ\80Ñ\81Ñ\96й}} Ð´Ð»Ñ\8f Ñ\86Ñ\8cого Ð¿Ð¾Ñ\80Ñ\96внÑ\8fннÑ\8f ($1) Ð½Ðµ {{PLURAL:$2|знайдена|знайдені}}.
 
 Імовірно, ви перейшли за застарілим посиланням на порівняння версій вилученої сторінки.
 Подробиці можна дізнатися з [{{fullurl:{{#Special:Log}}/delete|page={{FULLPAGENAMEE}}}} журналу вилучень].',
@@ -1450,7 +1453,7 @@ $1",
 'prefs-labs' => 'Експериментальні функції',
 'prefs-user-pages' => 'Сторінки користувача',
 'prefs-personal' => 'Особисті дані',
-'prefs-rc' => 'СÑ\82оÑ\80Ñ\96нка Ð¾Ñ\81Ñ\82аннÑ\96х редагувань',
+'prefs-rc' => 'СÑ\82оÑ\80Ñ\96нка Ð½Ð¾Ð²Ð¸х редагувань',
 'prefs-watchlist' => 'Список спостереження',
 'prefs-watchlist-days' => 'Кількість днів, що відображаються у списку спостережень:',
 'prefs-watchlist-days-max' => 'Максимум $1 {{PLURAL:$1|день|дні|днів}}',
@@ -1627,7 +1630,7 @@ $1",
 'right-purge' => 'Очищення кешу для сторінки без сторінки підтвердження',
 'right-autoconfirmed' => 'Редагування частково захищених сторінок',
 'right-bot' => 'Автоматична обробка',
-'right-nominornewtalk' => 'Ð\92Ñ\96дÑ\81Ñ\83Ñ\82нÑ\96Ñ\81Ñ\82Ñ\8c Ð½ÐµÐ·Ð½Ð°Ñ\87ниÑ\85 Ñ\80едагÑ\83ванÑ\8c Ð½Ð° Ñ\81Ñ\82оÑ\80Ñ\96нкаÑ\85 Ð¾Ð±Ð³Ð¾Ð²Ð¾Ñ\80енÑ\8c Ð²ÐºÐ»Ñ\8eÑ\87аÑ\94 Ñ\80ежим Ð½Ð¾Ð²Ð¸Ñ\85 Ð¿Ð¾Ð²Ñ\96домленÑ\8c',
+'right-nominornewtalk' => 'Ð\9dезнаÑ\87нÑ\96 Ñ\80едагÑ\83ваннÑ\8f Ð½Ð° Ñ\81Ñ\82оÑ\80Ñ\96нкаÑ\85 Ð¾Ð±Ð³Ð¾Ð²Ð¾Ñ\80енÑ\8c ÐºÐ¾Ñ\80иÑ\81Ñ\82Ñ\83ваÑ\87Ñ\96в Ð½Ðµ Ð²Ð¸ÐºÐ»Ð¸ÐºÐ°Ñ\8eÑ\82Ñ\8c Ð¿Ð¾Ð¿ÐµÑ\80едженнÑ\8f Ð¿Ñ\80о Ð½Ð¾Ð²Ñ\96 Ð¿Ð¾Ð²Ñ\96домленнÑ\8f',
 'right-apihighlimits' => 'Розширення обмежень на виконання API-запитів',
 'right-writeapi' => 'Використання API для запису',
 'right-delete' => 'Вилучення сторінок',
@@ -1669,15 +1672,13 @@ $1",
 'right-sendemail' => 'відправляти пошту іншим користувачам',
 'right-passwordreset' => 'Перегляд повідомлень електронної пошти для зміни паролю',
 
+# Special:Log/newusers
+'newuserlogpage' => 'Журнал нових користувачів',
+'newuserlogpagetext' => 'Список нещодавно зареєстрованих користувачів.',
+
 # User rights log
 'rightslog' => 'Журнал прав користувача',
 'rightslogtext' => 'Це протокол зміни прав користувачів.',
-'rightslogentry' => 'змінив права доступу для користувача $1 з $2 на $3',
-'rightslogentry-autopromote' => 'був автоматично переведений з $2 до $3',
-'logentry-rights-rights' => '$1 {{GENDER:$1|змінив|змінила}} членство в групах для $3 із $4 на $5',
-'logentry-rights-rights-legacy' => '$1 {{GENDER:$1|змінив|змінила}} членство в групах для $3',
-'logentry-rights-autopromote' => '$1 було автоматично переведено із $4 в $5',
-'rightsnone' => '(нема)',
 
 # Associated actions - in the sentence "You do not have permission to X"
 'action-read' => 'перегляд цієї сторінки',
@@ -2314,9 +2315,9 @@ $1',
 'linksearch-pat' => 'Шаблон для пошуку:',
 'linksearch-ns' => 'Простір назв:',
 'linksearch-ok' => 'Знайти',
-'linksearch-text' => 'Ð\9cожна Ð²Ð¸ÐºÐ¾Ñ\80иÑ\81Ñ\82овÑ\83ваÑ\82и Ð¿Ñ\96дÑ\81Ñ\82ановоÑ\87нÑ\96 Ñ\81имволи (Ñ\88аблони), Ð½Ð°Ð¿Ñ\80иклад, "*.wikipedia.org".
\9dеобÑ\85Ñ\96дний Ð´Ð¾Ð¼ÐµÐ½ Ð¿Ñ\80инаймнÑ\96 Ð²ÐµÑ\80Ñ\85нÑ\8cого Ñ\80Ñ\96внÑ\8f, Ð½Ð°Ð¿Ñ\80иклад "*.org"<br />
-Підтримувані протоколи: <code>$1</code> (за замовчуванням http:// якщо жоден протокол не вказано)',
+'linksearch-text' => 'Ð\9cожна Ð²Ð¶Ð¸Ð²Ð°Ñ\82и Ð¿Ñ\96дÑ\81Ñ\82ановоÑ\87нÑ\96 Ñ\81имволи, Ð½Ð°Ð¿Ñ\80иклад, Â«*.wikipedia.org».
\9dеобÑ\85Ñ\96дно Ð·Ð°Ð·Ð½Ð°Ñ\87иÑ\82и Ð´Ð¾Ð¼ÐµÐ½, Ð¿Ñ\80инаймнÑ\96 Ð²ÐµÑ\80Ñ\85нÑ\8cого Ñ\80Ñ\96внÑ\8f, Ð½Ð°Ð¿Ñ\80иклад Â«*.org».<br />
+{{PLURAL:$2|Підтримується протокол|Підтримуються протоколи}}: <code>$1</code> (за замовчуванням http:// , якщо жоден протокол не зазначено).',
 'linksearch-line' => 'Посилання на $1 із $2',
 'linksearch-error' => 'Підстановочні знаки можуть використовуватися лише на початку адрес.',
 
@@ -2329,16 +2330,12 @@ $1',
 # Special:ActiveUsers
 'activeusers' => 'Список активних користувачів',
 'activeusers-intro' => 'Це список користувачів, які здійснювали які-небудь дії за {{PLURAL:$1|останній $1 день|останні $1 дні|останні $1 днів}}.',
-'activeusers-count' => '$1 {{PLURAL:$1|редагування|редагування|редагувань}} за {{PLURAL:$3|останній $3 день|останні $3 дні|останні $3 днів}}',
+'activeusers-count' => '$1 {{PLURAL:$1|дія|дії|дій}} за {{PLURAL:$3|останній $3 день|останні $3 дні|останні $3 днів}}',
 'activeusers-from' => 'Показувати користувачів, починаючи з:',
 'activeusers-hidebots' => 'Приховати ботів',
 'activeusers-hidesysops' => 'Приховати адміністраторів',
 'activeusers-noresult' => 'Не знайдено користувачів.',
 
-# Special:Log/newusers
-'newuserlogpage' => 'Журнал нових користувачів',
-'newuserlogpagetext' => 'Список нещодавно зареєстрованих користувачів.',
-
 # Special:ListGroupRights
 'listgrouprights' => 'Права груп користувачів',
 'listgrouprights-summary' => 'Нижче наведений список груп користувачів у цій вікі і права для кожної групи.
@@ -2408,7 +2405,7 @@ $1',
 'watchnologintext' => 'Ви повинні [[Special:UserLogin|ввійти до системи]], щоб мати можливість змінювати список спостереження.',
 'addwatch' => 'Додати до списку спостереження',
 'addedwatchtext' => "Сторінку «[[:$1]]» додано до вашого [[Special:Watchlist|списку спостереження]].
-Подальші редагування цієї сторінки (та пов'язаної з нею сторінки обговорення) відображатимуться в цьому списку. Також їх буде виділено '''жирним шрифтом''' на сторінці зі [[Special:RecentChanges|списком останніх редагувань]], щоб їх було легше помітити.",
+Подальші редагування цієї сторінки (та пов'язаної з нею сторінки обговорення) відображатимуться в цьому списку.",
 'removewatch' => 'Видалити зі списку спостереження',
 'removedwatchtext' => 'Сторінка «[[:$1]]» вилучена з вашого [[Special:Watchlist|списку спостереження]].',
 'watch' => 'Спостерігати',
@@ -2442,7 +2439,7 @@ $1',
 'enotif_subject_moved' => 'Сторінку {{GRAMMAR:genitive|{{SITENAME}}}} «$1» було перейменовано {{GENDER:$2|користувачем|користувачкою}} $2',
 'enotif_subject_restored' => 'Сторінку {{GRAMMAR:genitive|{{SITENAME}}}} «$1» було відновлено {{GENDER:$2|користувачем|користувачкою}} $2',
 'enotif_subject_changed' => 'Сторінку {{GRAMMAR:genitive|{{SITENAME}}}} «$1» було змінено {{GENDER:$2|користувачем|користувачкою}} $2',
-'enotif_body_intro_deleted' => 'Сторінку {{GRAMMAR:genitive|{{SITENAME}}}} «$1» було вилучено $PAGEEDITDATE {{GENDER:$2|користувачем|користувачкою}} $2, див. поточну версію $3.',
+'enotif_body_intro_deleted' => 'Сторінку {{GRAMMAR:genitive|{{SITENAME}}}} «$1» було вилучено $PAGEEDITDATE {{GENDER:$2|користувачем|користувачкою}} $2, див. $3.',
 'enotif_body_intro_created' => 'Сторінку {{GRAMMAR:genitive|{{SITENAME}}}} «$1» було створено $PAGEEDITDATE {{GENDER:$2|користувачем|користувачкою}} $2, див. поточну версію $3.',
 'enotif_body_intro_moved' => 'Сторінку {{GRAMMAR:genitive|{{SITENAME}}}} «$1» було перейменовано $PAGEEDITDATE {{GENDER:$2|користувачем|користувачкою}} $2, див. поточну версію $3.',
 'enotif_body_intro_restored' => 'Сторінку {{GRAMMAR:genitive|{{SITENAME}}}} «$1» було відновлено $PAGEEDITDATE {{GENDER:$2|користувачем|користувачкою}} $2, див. поточну версію $3.',
@@ -2476,6 +2473,8 @@ $UNWATCHURL
 
 Зворотній зв\'язок і допомога:
 {{canonicalurl:{{MediaWiki:Helppage}}}}',
+'created' => 'створена',
+'changed' => 'змінена',
 
 # Delete
 'deletepage' => 'Вилучити сторінку',
@@ -2518,10 +2517,10 @@ $UNWATCHURL
 'rollbacklinkcount' => 'скасування $1 {{PLURAL:$1|редагування|редагувань|редагувань}}',
 'rollbacklinkcount-morethan' => 'скасування більш, ніж $1 {{PLURAL:$1|редагування|редагувань|редагувань}}',
 'rollbackfailed' => 'Відкинути зміни не вдалося',
-'cantrollback' => 'Неможливо відкинути редагування, останній, хто редагував, є єдиним автором цієї сторінки.',
-'alreadyrolled' => 'Неможливо відкинути останні редагування [[:$1]], зроблені [[User:$2|$2]] ([[User talk:$2|обговорення]]{{int:pipe-separator}}[[Special:Contributions/$2|{{int:contribslink}}]]); хтось інший уже змінив чи відкинув редагування цієї статті.
+'cantrollback' => 'Неможливо відкинути редагування, оскільки останній дописувач сторінки є її автором.',
+'alreadyrolled' => 'Неможливо відкинути останні редагування [[:$1]], зроблені [[User:$2|$2]] ([[User talk:$2|обговорення]]{{int:pipe-separator}}[[Special:Contributions/$2|{{int:contribslink}}]]), оскільки хтось інший уже змінив чи відкинув редагування цієї статті.
 
\9eÑ\81Ñ\82аннÑ\96 Ñ\80едагÑ\83ваннÑ\8f Ð·Ñ\80обив [[User:$3|$3]] ([[User talk:$3|обговорення]]{{int:pipe-separator}}[[Special:Contributions/$3|{{int:contribslink}}]]).',
\9eÑ\81Ñ\82аннÑ\96 Ñ\80едагÑ\83ваннÑ\8f Ð·Ñ\80облено [[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' => "Відкинуто редагування (ім'я користувача приховано) до зробленого [[User:$1|$1]]",
@@ -2546,6 +2545,8 @@ $UNWATCHURL
 'prot_1movedto2' => '«[[$1]]» перейменована на «[[$2]]»',
 'protect-badnamespace-title' => 'Беззахисний простір імен',
 'protect-badnamespace-text' => 'Сторінки у просторі імен не можуть бути захищені.',
+'protect-norestrictiontypes-text' => 'Цю сторінку не може бути захищено, бо немає ніяких типів обмежень.',
+'protect-norestrictiontypes-title' => 'Сторінка, яку неможливо захистити',
 'protect-legend' => 'Підтвердження встановлення захисту',
 'protectcomment' => 'Причина:',
 'protectexpiry' => 'Закінчується:',
@@ -2561,9 +2562,9 @@ $UNWATCHURL
 Поточні установки для сторінки: '''$1''':",
 'protect-cascadeon' => 'Ця сторінка захищена, бо вона включена {{PLURAL:$1|до зазначеної нижче сторінки, на яку|до нижчезазначених сторінок, на які}} встановлено каскадний захист. Ви можете змінити рівень захисту цієї сторінки, але це не вплине на каскадний захист.',
 'protect-default' => 'Дозволити всім користувачам',
-'protect-fallback' => 'Ð\9fоÑ\82Ñ\80Ñ\96бен Ð´Ð¾Ð·Ð²Ñ\96л «$1»',
-'protect-level-autoconfirmed' => 'Ð\97аÑ\85иÑ\81Ñ\82иÑ\82и Ð²Ñ\96д Ð½Ð¾Ð²Ð¸Ñ\85 Ñ\96 Ð½ÐµÐ·Ð°Ñ\80еÑ\94Ñ\81Ñ\82Ñ\80ованиÑ\85 ÐºÐ¾Ñ\80иÑ\81Ñ\82Ñ\83ваÑ\87Ñ\96в',
-'protect-level-sysop' => 'ТÑ\96лÑ\8cки Ð°Ð´Ð¼Ñ\96нÑ\96Ñ\81Ñ\82Ñ\80аÑ\82оÑ\80и',
+'protect-fallback' => 'Ð\94озволено Ñ\82Ñ\96лÑ\8cки ÐºÐ¾Ñ\80иÑ\81Ñ\82Ñ\83ваÑ\87ам Ñ\96з Ð´Ð¾Ð·Ð²Ð¾Ð»Ð¾Ð¼ «$1»',
+'protect-level-autoconfirmed' => 'Ð\94озволено Ñ\82Ñ\96лÑ\8cки Ð°Ð²Ñ\82опÑ\96дÑ\82веÑ\80дженим ÐºÐ¾Ñ\80иÑ\81Ñ\82Ñ\83ваÑ\87ам',
+'protect-level-sysop' => 'Ð\94озволено Ñ\82Ñ\96лÑ\8cки Ð°Ð´Ð¼Ñ\96нÑ\96Ñ\81Ñ\82Ñ\80аÑ\82оÑ\80ам',
 'protect-summary-cascade' => 'каскадний',
 'protect-expiring' => 'закінчується $1 (UTC)',
 'protect-expiring-local' => 'закінчується $1',
@@ -2875,7 +2876,7 @@ $1',
 
 '''Попередження!'''
 Перейменування може призвести до масштабних і несподіваних змін для ''популярних'' сторінок.
-Тому перед перейменуванням упевніться, що Виоцінили можливі наслідки.",
+Тому перед перейменуванням упевніться, що Ви оцінили можливі наслідки.",
 'movepagetalktext' => "Приєднана сторінка обговорення також буде автоматично перейменована, '''окрім таких випадків:'''
 * Непорожня сторінка обговорення з такою назвою вже існує або
 * Ви не поставили галочку в полі нижче.
@@ -3038,6 +3039,7 @@ $1',
 'import-error-interwiki' => 'Сторінку "$1" не імпортовано, оскільки її назва зарезервована для зовнішніх посилань (interwiki).',
 'import-error-special' => 'Сторінку "$1" не імпортовано, оскільки вона належить до особливого простору імен, що не дозволяє створення сторінок.',
 'import-error-invalid' => 'Сторінку "$1" не імпортовано, оскільки його ім\'я неприпустиме.',
+'import-error-unserialize' => 'Версія $2 сторінки «$1» не може бути деструктурованою (десеріалізованою). Отримано повідомлення, що у цій версії використано модель $3 сериалізована як $4.',
 'import-options-wrong' => '{{PLURAL:$2|Неправильна опція|Неправильні опції}}: <nowiki>$1</nowiki>',
 'import-rootpage-invalid' => 'Вказана некоректна назва кореневої сторінки',
 'import-rootpage-nosubpage' => 'В просторі назв вказаної кореневої сторінки «$1» заборонені підсторінки',
@@ -3221,7 +3223,7 @@ The wiki server can't provide data in a format your client can read.",
 'pageinfo-watchers' => 'Кількість спостерігачів',
 'pageinfo-redirects-name' => 'Перенаправлення на цю сторінку',
 'pageinfo-subpages-name' => 'Підсторінки цієї сторінки',
-'pageinfo-subpages-value' => '$1($2 {{PLURAL:$2|перенаправлення|перенаправлення|перенаправлень}}; $3 {{PLURAL:$3|не-перенаправлення|не-перенаправлення|не-перенаправлень}})',
+'pageinfo-subpages-value' => '$1 ($2 {{PLURAL:$2|перенаправлення|перенаправлення|перенаправлень}}; $3 {{PLURAL:$3|неперенаправлення|неперенаправлення|неперенаправлень}})',
 'pageinfo-firstuser' => 'Створив сторінку',
 'pageinfo-firsttime' => 'Дата створення сторінки',
 'pageinfo-lastuser' => 'Останній редактор',
@@ -3233,6 +3235,7 @@ The wiki server can't provide data in a format your client can read.",
 'pageinfo-magic-words' => '{{PLURAL:$1|Магічне слово|Магічні слова}} ($1)',
 'pageinfo-hidden-categories' => '{{PLURAL:$1|Прихована категорія|Приховані категорії}} ($1)',
 'pageinfo-templates' => 'Включено {{PLURAL:$1|шаблон|шаблонів}} ($1)',
+'pageinfo-transclusions' => 'Включено до ($1) {{PLURAL:$1|сторінки|сторінок}}',
 'pageinfo-toolboxlink' => 'Інформація про сторінку',
 'pageinfo-redirectsto' => 'Перенаправляє на',
 'pageinfo-redirectsto-info' => 'інформація',
@@ -3241,6 +3244,10 @@ The wiki server can't provide data in a format your client can read.",
 'pageinfo-protect-cascading' => 'Звідси розпочинається каскадний захист',
 'pageinfo-protect-cascading-yes' => 'Так',
 'pageinfo-protect-cascading-from' => 'Каскадний захист починається тут',
+'pageinfo-category-info' => 'Інформація про категорію',
+'pageinfo-category-pages' => 'Кількість сторінок',
+'pageinfo-category-subcats' => 'Кількість підкатегорій',
+'pageinfo-category-files' => 'Кількість файлів',
 
 # Skin names
 'skinname-standard' => 'Стандартне',
@@ -3298,6 +3305,7 @@ $1',
 'file-nohires' => 'Нема версії з більшою роздільністю.',
 'svg-long-desc' => 'SVG-файл, номінально $1 × $2 пікселів, розмір файлу: $3',
 'svg-long-desc-animated' => 'Анімований SVG-файл, номінально $1 × $2 {{PLURAL:$2|піксель|пікселі|пікселів}}, розмір файлу: $3',
+'svg-long-error' => 'неправильний SVG-файл: $1',
 'show-big-image' => 'Повна роздільність',
 'show-big-image-preview' => 'Розмір при попередньому перегляді: $1.',
 'show-big-image-other' => '{{PLURAL:$2|Інша роздільність|Інші роздільності}}: $1.',
@@ -3332,6 +3340,8 @@ $1',
 'minutes' => '{{PLURAL:$1|$1 хвилина|$1 хвилини|$1 хвилин}}',
 'hours' => '{{PLURAL:$1|$1 година|$1 години|$1 годин}}',
 'days' => '{{PLURAL:$1|$1 день|$1 дні|$1 днів}}',
+'months' => '{{PLURAL:$1|$1 місяць|$1 місяці|$1 місяців}}',
+'years' => '{{PLURAL:$1|$1 рік|$1 роки|$1 років}}',
 'ago' => '$1 тому',
 'just-now' => 'щойно',
 
@@ -4154,7 +4164,7 @@ MediaWiki поширюється в надії, що вона буде кори
 'specialpages-group-highuse' => 'Часто вживані',
 'specialpages-group-pages' => 'Списки сторінок',
 'specialpages-group-pagetools' => 'Інструменти',
-'specialpages-group-wiki' => 'Ð\92Ñ\96кÑ\96-дані та інструменти',
+'specialpages-group-wiki' => 'Ð\94ані та інструменти',
 'specialpages-group-redirects' => 'Перенаправлення',
 'specialpages-group-spam' => 'Інструменти проти спаму',
 
@@ -4249,10 +4259,14 @@ MediaWiki поширюється в надії, що вона буде кори
 'logentry-patrol-patrol' => '$1 відпатрулював версію $4 сторінки $3',
 'logentry-patrol-patrol-auto' => '$1 автоматично відпатрулював версію $4 сторінки $3',
 'logentry-newusers-newusers' => 'Створено обліковий запис $1',
-'logentry-newusers-create' => 'Створено обліковий запис $1',
+'logentry-newusers-create' => '$1 — створено обліковий запис',
 'logentry-newusers-create2' => '$1 {{GENDER:$2|створив|створила}} обліковий запис {{GENDER:$4|користувача|користувачки}} $3',
+'logentry-newusers-byemail' => 'Обліковий запис {{GENDER:$2|користувача|користувачки}} створений {{GENDER:$4|користувачем|користувачкою}} $1 і пароль було надіслано електронною поштою',
 'logentry-newusers-autocreate' => '$1 — автоматично створений обліковий запис',
-'newuserlog-byemail' => 'пароль надісланий електронною поштою',
+'logentry-rights-rights' => '$1 {{GENDER:$1|змінив|змінила}} членство в групах для $3 із $4 на $5',
+'logentry-rights-rights-legacy' => '$1 {{GENDER:$1|змінив|змінила}} членство в групах для $3',
+'logentry-rights-autopromote' => '$1 було автоматично переведено із $4 в $5',
+'rightsnone' => '(нема)',
 
 # Feedback
 'feedback-bugornote' => 'Якщо ви готові описати технічні проблеми в деталях, будь ласка [ $1  повідомте про помилку].
@@ -4306,6 +4320,7 @@ MediaWiki поширюється в надії, що вона буде кори
 'api-error-ok-but-empty' => 'Внутрішня помилка: сервер не відповідає.',
 'api-error-overwrite' => 'Заміну існуючого файлу не дозволено.',
 'api-error-stashfailed' => 'Внутрішня помилка: сервер не зміг зберегти тимчасовий файл.',
+'api-error-publishfailed' => 'Внутрішня помилка: сервер не зміг опублікувати тимчасовий файл.',
 'api-error-timeout' => 'Сервер не відповідає протягом очікуваного часу.',
 'api-error-unclassified' => 'Сталася невідома помилка.',
 'api-error-unknown-code' => 'Невідома помилка: «$1»',
@@ -4326,6 +4341,4 @@ MediaWiki поширюється в надії, що вона буде кори
 'duration-centuries' => '$1 {{PLURAL:$1|століття|століття|століть}}',
 'duration-millennia' => '$1 {{PLURAL:$1|тисячоліття|тисячоліття|тисячоліть}}',
 
-# Unknown messages
-'svg-long-error' => 'неправильний SVG-файл: $1',
 );
index 2b844ae..aff7c2d 100644 (file)
@@ -46,6 +46,115 @@ $namespaceNames = array(
        NS_CATEGORY_TALK    => 'تبادلۂ_خیال_زمرہ',
 );
 
+$specialPageAliases = array(
+       'Activeusers'               => array( 'متحرک_صارفین' ),
+       'Allmessages'               => array( 'تمام_پیغامات' ),
+       'Allpages'                  => array( 'تمام_صفحات' ),
+       'Ancientpages'              => array( 'قدیم_صفحات' ),
+       'Badtitle'                  => array( 'خراب_عنوان' ),
+       'Blankpage'                 => array( 'خالی_صفحہ' ),
+       'Block'                     => array( 'پابندی،_دستور_شبکی_پابندی،_پابندی_بر_صارف' ),
+       'Blockme'                   => array( 'میری_پابندی' ),
+       'Booksources'               => array( 'کتابی_وسائل' ),
+       'BrokenRedirects'           => array( 'شکستہ_رجوع_مکررات' ),
+       'Categories'                => array( 'زمرہ_جات' ),
+       'ChangeEmail'               => array( 'ڈاک_تبدیل' ),
+       'ChangePassword'            => array( 'کلمہ_شناخت_تبدیل،_تنظیم_کلمہ_شناخت' ),
+       'ComparePages'              => array( 'موازنہ_صفحات' ),
+       'Confirmemail'              => array( 'تصدیق_ڈاک' ),
+       'Contributions'             => array( 'شراکتیں' ),
+       'CreateAccount'             => array( 'تخلیق_کھاتہ' ),
+       'Deadendpages'              => array( 'مردہ_صفحات' ),
+       'DeletedContributions'      => array( 'حذف_شدہ_شراکتیں' ),
+       'Disambiguations'           => array( 'ضد_ابہام_صفحات' ),
+       'DoubleRedirects'           => array( 'دوہرے_رجوع_مکررات' ),
+       'EditWatchlist'             => array( 'ترمیم_زیر_نظر' ),
+       'Emailuser'                 => array( 'صارف_ڈاک' ),
+       'Export'                    => array( 'برآمدگی' ),
+       'Fewestrevisions'           => array( 'کم_نظر_ثانی_شدہ' ),
+       'FileDuplicateSearch'       => array( 'دہری_ملف_تلاش' ),
+       'Filepath'                  => array( 'راہ_ملف' ),
+       'Import'                    => array( 'درآمدگی' ),
+       'Invalidateemail'           => array( 'ڈاک_تصدیق_منسوخ' ),
+       'JavaScriptTest'            => array( 'تجربہ_جاوا_اسکرپٹ' ),
+       'BlockList'                 => array( 'فہرست_ممنوع،_فہرست_دستور_شبکی_ممنوع' ),
+       'LinkSearch'                => array( 'تلاش_روابط' ),
+       'Listadmins'                => array( 'فہرست_منتظمین' ),
+       'Listbots'                  => array( 'فہرست_روبہ_جات' ),
+       'Listfiles'                 => array( 'فہرست_املاف،_فہرست_تصاویر' ),
+       'Listgrouprights'           => array( 'فہرست_اختیارات_گروہ،_صارفی_گروہ_اختیارات' ),
+       'Listredirects'             => array( 'فہرست_رجوع_مکررات' ),
+       'Listusers'                 => array( 'فہرست_صارفین،_صارف_فہرست' ),
+       'Log'                       => array( 'نوشتہ،_نوشتہ_جات' ),
+       'Lonelypages'               => array( 'یتیم_صفحات' ),
+       'Longpages'                 => array( 'طویل_صفحات' ),
+       'MergeHistory'              => array( 'ضم_تاریخچہ' ),
+       'Movepage'                  => array( 'منتقلی_صفحہ' ),
+       'Mycontributions'           => array( 'میرا_حصہ' ),
+       'Mypage'                    => array( 'میرا_صفحہ' ),
+       'Mytalk'                    => array( 'میری_گفتگو' ),
+       'Myuploads'                 => array( 'میرے_زبراثقالات' ),
+       'Newimages'                 => array( 'جدید_املاف،_جدید_تصاویر' ),
+       'Newpages'                  => array( 'جدید_صفحات' ),
+       'PermanentLink'             => array( 'مستقل_ربط' ),
+       'Popularpages'              => array( 'مقبول_صفحات' ),
+       'Preferences'               => array( 'ترجیحات' ),
+       'Prefixindex'               => array( 'اشاریہ_سابقہ' ),
+       'Protectedpages'            => array( 'محفوظ_صفحات' ),
+       'Protectedtitles'           => array( 'محفوظ_عناوین' ),
+       'Randompage'                => array( 'تصادف،_تصادفی_مقالہ' ),
+       'Randomredirect'            => array( 'تصادفی_رجوع_مکرر' ),
+       'Recentchanges'             => array( 'حالیہ_تبدیلیاں' ),
+       'Recentchangeslinked'       => array( 'متعلقہ_تبدیلیاں' ),
+       'Revisiondelete'            => array( 'حذف_اعادہ' ),
+       'Search'                    => array( 'تلاش' ),
+       'Shortpages'                => array( 'مختصر_صفحات' ),
+       'Specialpages'              => array( 'خصوصی_صفحات' ),
+       'Statistics'                => array( 'شماریات' ),
+       'Uncategorizedcategories'   => array( 'غیر_زمرہ_بند_زمرہ_جات' ),
+       'Uncategorizedimages'       => array( 'غیر_زمرہ_بند_املاف،_غیر_زمرہ_بند_تصاویر' ),
+       'Uncategorizedpages'        => array( 'غیر_زمرہ_بند_صفحات' ),
+       'Uncategorizedtemplates'    => array( 'غیر_زمرہ_بند_سانچے' ),
+       'Undelete'                  => array( 'بحال' ),
+       'Unusedcategories'          => array( 'غیر_مستعمل_زمرہ_جات' ),
+       'Unusedimages'              => array( 'غیر_مستعمل_املاف،_غیر_مستعمل_تصاویر' ),
+       'Unusedtemplates'           => array( 'غیر_مستعمل_سانچے' ),
+       'Unwatchedpages'            => array( 'نادیدہ_صفحات' ),
+       'Upload'                    => array( 'زبراثقال' ),
+       'Userlogin'                 => array( 'داخل_نوشتگی' ),
+       'Userlogout'                => array( 'خارج_نوشتگی' ),
+       'Userrights'                => array( 'صارفی_اختیارات' ),
+       'Version'                   => array( 'اخراجہ' ),
+       'Wantedcategories'          => array( 'مطلوب_زمرہ_جات' ),
+       'Wantedfiles'               => array( 'مطلوب_املاف' ),
+       'Wantedpages'               => array( 'مطلوب_صفحات،_شکستہ_روابط' ),
+       'Wantedtemplates'           => array( 'مطلوب_سانچے' ),
+       'Watchlist'                 => array( 'زیر_نظر_فہرست' ),
+       'Whatlinkshere'             => array( 'یہاں_کس_کا_رابطہ' ),
+       'Withoutinterwiki'          => array( 'بدون_بین_الویکی' ),
+);
+
+$magicWords = array(
+       'redirect'                  => array( '0', '#رجوع_مکرر', '#REDIRECT' ),
+       'notoc'                     => array( '0', '_فہرست_نہیں_', '__NOTOC__' ),
+       'toc'                       => array( '0', '__فہرست__', '__TOC__' ),
+       'noeditsection'             => array( '0', '__ناتحریرقسم__', '__NOEDITSECTION__' ),
+       'msg'                       => array( '0', 'پیغام:', 'MSG:' ),
+       'subst'                     => array( '0', 'نقل:', 'SUBST:' ),
+       'safesubst'                 => array( '0', 'محفوظ_نقل:', 'SAFESUBST:' ),
+       'img_thumbnail'             => array( '1', 'تصغیر', 'thumbnail', 'thumb' ),
+       'img_right'                 => array( '1', 'دائیں', 'right' ),
+       'img_left'                  => array( '1', 'بائیں', 'left' ),
+       'img_center'                => array( '1', 'درمیان', 'center', 'centre' ),
+       'sitename'                  => array( '1', 'نام_موقع', 'SITENAME' ),
+       'grammar'                   => array( '0', 'قواعد:', 'GRAMMAR:' ),
+       'gender'                    => array( '0', 'جنس:', 'GENDER:' ),
+       'special'                   => array( '0', 'خاص', 'special' ),
+       'speciale'                  => array( '0', 'خاص_عنوان', 'speciale' ),
+       'index'                     => array( '1', '__اشاریہ__', '__INDEX__' ),
+       'noindex'                   => array( '1', '__نااشاریہ__', '__NOINDEX__' ),
+);
+
 $messages = array(
 # User preference toggles
 'tog-underline' => 'ربط کی خط کشیدگی:',
@@ -655,7 +764,6 @@ $1 نے پابندی لگائی تھی.
 'template-protected' => '(محفوظ شدہ)',
 'template-semiprotected' => '(نیم محفوظ)',
 'hiddencategories' => 'یہ صفحہ {{PLURAL:$1|1 چُھپے زمرے|$1 چُھپے زمرہ جات}} میں شامل ہے:',
-'nocreatetitle' => 'تخلیقِ صفحہ محدود',
 'nocreate-loggedin' => 'آپ کو نئے صفحات تخلیق کرنے کی اجازت نہیں ہے.',
 'sectioneditnotsupported-title' => 'قطعہ کی تدوین حمایت شدہ نہیں ہے',
 'sectioneditnotsupported-text' => 'اِس صفحہ میں قطعہ کی تدوین حمایت شدہ نہیں ہے.',
@@ -980,11 +1088,13 @@ HTML tags جانچئے.',
 'right-delete' => 'صفحات حذف کریں',
 'right-sendemail' => 'دیگر صارفین کو برقی ڈاک بھیجیں',
 
+# Special:Log/newusers
+'newuserlogpage' => 'نوشتۂ آمد صارف',
+'newuserlogpagetext' => 'یہ نۓ صارفوں کی آمد کا نوشتہ ہے',
+
 # User rights log
 'rightslog' => 'نوشتہ صارفی اختیارات',
 'rightslogtext' => 'یہ صارفی اختیارات میں تبدیلیوں کا نوشتہ ہے۔',
-'rightslogentry' => 'گروہ رکنیت میں برائے $1 از $2 تا $3 تبدیلی ہوئی',
-'rightsnone' => '(کچھ نہیں)',
 
 # Associated actions - in the sentence "You do not have permission to X"
 'action-edit' => 'اس صفحہ میں ترمیم کریں',
@@ -1183,10 +1293,6 @@ Also see [[Special:WantedCategories|wanted categories]].',
 # Special:LinkSearch
 'linksearch-line' => '$1 مربوط ہے $2 سے',
 
-# Special:Log/newusers
-'newuserlogpage' => 'نوشتۂ آمد صارف',
-'newuserlogpagetext' => 'یہ نۓ صارفوں کی آمد کا نوشتہ ہے',
-
 # Special:ListGroupRights
 'listgrouprights-members' => '(اراکین کی فہرست)',
 
@@ -1213,6 +1319,9 @@ Also see [[Special:WantedCategories|wanted categories]].',
 'wlshowlast' => 'دکھائیں آخری $1 گھنٹے $2 دن $3',
 'watchlist-options' => 'اختیارات برائے زیرِنظرفہرست',
 
+'created' => 'بنا دیا گیا',
+'changed' => 'تبدیل کردیاگیا',
+
 # Delete
 'deletepage' => 'صفحہ ضائع کریں',
 'confirm' => 'یقین',
@@ -1526,6 +1635,9 @@ $1 × $2 عکصر (پکسلز)، حجم ملف: $3، MIME قسم: $4',
 # Special:SpecialPages
 'specialpages' => 'خصوصی صفحات',
 
+# New logging system
+'rightsnone' => '(کچھ نہیں)',
+
 # Search suggestions
 'searchsuggest-search' => 'تلاش',
 
index abd15bf..e6e577d 100644 (file)
@@ -8,6 +8,7 @@
  * @file
  *
  * @author Abdulla
+ * @author Akmalzhon
  * @author Behzod Saidov <behzodsaidov@gmail.com>
  * @author Casual
  * @author CoderSI
@@ -51,6 +52,54 @@ $namespaceAliases = array(
        'Kategoriya_munozarasi' => NS_CATEGORY_TALK,
 );
 
+$magicWords = array(
+       'redirect'                  => array( '0', '#YONALTIRISH', '#REDIRECT' ),
+       'notoc'                     => array( '0', '__ICHIDAGILARYOQ__', '__NOTOC__' ),
+       'nogallery'                 => array( '0', '__GALEREYAYOQ__', '__NOGALLERY__' ),
+       'forcetoc'                  => array( '0', '__ICHIDAGILARMAJBURIY__', '__FORCETOC__' ),
+       'toc'                       => array( '0', '__ICHIDAGILARI__', '__ICHIDAGILAR__', '__TOC__' ),
+       'noeditsection'             => array( '0', '__TAHRIRYOQ__', '__TARTIBLASHYOQ__', '__NOEDITSECTION__' ),
+       'currentmonth'              => array( '1', 'JORIYOY', 'JORIYOY2', 'CURRENTMONTH', 'CURRENTMONTH2' ),
+       'currentmonth1'             => array( '1', 'JORIYOY1', 'CURRENTMONTH1' ),
+       'currentmonthname'          => array( '1', 'JORIYOYNOMI', 'CURRENTMONTHNAME' ),
+       'currentmonthnamegen'       => array( '1', 'JORIYOYNOMIQARATQICH', 'CURRENTMONTHNAMEGEN' ),
+       'currentmonthabbrev'        => array( '1', 'JORIYOYQISQARTMASI', 'CURRENTMONTHABBREV' ),
+       'currentday'                => array( '1', 'JORIYKUN', 'CURRENTDAY' ),
+       'currentday2'               => array( '1', 'JORIYKUN2', 'CURRENTDAY2' ),
+       'currentdayname'            => array( '1', 'JORIYKUNNOMI', 'CURRENTDAYNAME' ),
+       'currentyear'               => array( '1', 'JORIYYIL', 'CURRENTYEAR' ),
+       'currenttime'               => array( '1', 'JORIYVAQT', 'CURRENTTIME' ),
+       'currenthour'               => array( '1', 'JORIYSOAT', 'CURRENTHOUR' ),
+       'localmonth'                => array( '1', 'MAHALLIYOY', 'MAHALLIYOY2', 'LOCALMONTH', 'LOCALMONTH2' ),
+       'localmonth1'               => array( '1', 'MAHALLIYOY1', 'LOCALMONTH1' ),
+       'localmonthname'            => array( '1', 'MAHALLIYOYNOMI', 'LOCALMONTHNAME' ),
+       'localmonthnamegen'         => array( '1', 'MAHALLIYOYQARATQICH', 'LOCALMONTHNAMEGEN' ),
+       'localmonthabbrev'          => array( '1', 'MAHALLIYOYQISQARTMASI', 'LOCALMONTHABBREV' ),
+       'localday'                  => array( '1', 'MAHALLIYKUN', 'LOCALDAY' ),
+       'localday2'                 => array( '1', 'MAHALLIYKUN2', 'LOCALDAY2' ),
+       'localdayname'              => array( '1', 'MAHALLIYKUNNOMI', 'LOCALDAYNAME' ),
+       'localyear'                 => array( '1', 'MAHALLIYYIL', 'LOCALYEAR' ),
+       'localtime'                 => array( '1', 'MAHALLIYVAQT', 'LOCALTIME' ),
+       'localhour'                 => array( '1', 'MAHALLIYSOAT', 'LOCALHOUR' ),
+       'numberofpages'             => array( '1', 'SAHIFASONI', 'NUMBEROFPAGES' ),
+       'numberofarticles'          => array( '1', 'MAQOLASONI', 'NUMBEROFARTICLES' ),
+       'numberoffiles'             => array( '1', 'FAYLSONI', 'NUMBEROFFILES' ),
+       'numberofusers'             => array( '1', 'FOYDALANUVCHISONI', 'NUMBEROFUSERS' ),
+       'numberofactiveusers'       => array( '1', 'FAOLFOYDALANUVCHISONI', 'NUMBEROFACTIVEUSERS' ),
+       'numberofedits'             => array( '1', 'OZGARISHSONI', 'NUMBEROFEDITS' ),
+       'numberofviews'             => array( '1', 'KORISHSONI', 'NUMBEROFVIEWS' ),
+       'pagename'                  => array( '1', 'SAHIFANOMI', 'PAGENAME' ),
+       'numberofadmins'            => array( '1', 'ADMINISTRATORSONI', 'NUMBEROFADMINS' ),
+       'special'                   => array( '0', 'maxsus', 'special' ),
+       'tag'                       => array( '0', 'yorliq', 'tag' ),
+       'hiddencat'                 => array( '1', '__YASHIRINTURKUM__', '__HIDDENCAT__' ),
+       'pagesincategory'           => array( '1', 'TURKUMDAGISAHIFALAR', 'PAGESINCATEGORY', 'PAGESINCAT' ),
+       'pagesize'                  => array( '1', 'SAHIFAHAJMI', 'PAGESIZE' ),
+       'index'                     => array( '1', '__INDEKS__', '__INDEX__' ),
+       'noindex'                   => array( '1', '__INDEKSYOQ__', '__NOINDEX__' ),
+       'url_wiki'                  => array( '0', 'VIKI', 'WIKI' ),
+);
+
 $linkTrail = '/^([a-zʻʼ“»]+)(.*)$/sDu';
 
 $messages = array(
@@ -169,7 +218,7 @@ $messages = array(
 'cancel' => 'Bekor qilish',
 'moredotdotdot' => 'Batafsil...',
 'mypage' => 'Sahifa',
-'mytalk' => 'Suhbatim',
+'mytalk' => 'Munozaram',
 'anontalk' => 'Bu IP uchun suhbat',
 'navigation' => 'Saytda harakatlanish',
 'and' => '&#32;va',
@@ -231,7 +280,7 @@ $messages = array(
 'unprotectthispage' => "Ushbu sahifaning himoyasini o'zgaritish",
 'newpage' => 'Yangi sahifa',
 'talkpage' => 'Bu sahifa haqida munozara',
-'talkpagelinktext' => 'Munozara',
+'talkpagelinktext' => 'munozara',
 'specialpage' => 'Maxsus sahifa',
 'personaltools' => 'Shaxsiy uskunalar',
 'postcomment' => 'Yangi boʻlim',
@@ -246,7 +295,7 @@ $messages = array(
 'templatepage' => "Andoza sahifasini ko'rish",
 'viewhelppage' => 'Yordam olish',
 'categorypage' => 'Turkum sahifasi',
-'viewtalkpage' => 'Munozara',
+'viewtalkpage' => 'Munozarani koʻrish',
 'otherlanguages' => 'Boshqa tillarda',
 'redirectedfrom' => '($1dan yoʻnaltirildi)',
 'redirectpagesub' => 'Yoʻnaltiruvchi sahifa',
@@ -277,8 +326,8 @@ $messages = array(
 'policy-url' => 'Project:Qoida',
 'portal' => 'Jamoa portali',
 'portal-url' => 'Project:Jamoa portali',
-'privacy' => 'Konfidensiallik siyosati',
-'privacypage' => 'Project:Konfidensiallik siyosati',
+'privacy' => 'Maxfiylik siyosati',
+'privacypage' => 'Project:Maxfiylik siyosati',
 
 'badaccess' => 'Ruxsatlilik xatosi',
 'badaccess-group0' => "Siz so'ralgan amallarni bajara olmaysiz",
@@ -387,7 +436,7 @@ Shuni e'tiborga olingki, ayrim sahifalar siz brauzeringiz keshini tozalamaguning
 'userloginnocreate' => 'Kirish',
 'logout' => 'Chiqish',
 'userlogout' => 'Chiqish',
-'notloggedin' => "Siz tizimda o'zingizni tanitmadingiz",
+'notloggedin' => 'Siz tizimga kirmagansiz',
 'nologin' => "Hisobingiz yoʻqmi? '''$1'''.",
 'nologinlink' => 'Hisob yaratish',
 'createaccount' => 'Hisob yaratish',
@@ -473,6 +522,7 @@ Vaqtinchalik maxfiy so'z: $2",
 'showlivepreview' => "Tezkor ko'rib chiqish",
 'showdiff' => 'O‘zgarishlarni ko‘rsatish',
 'anoneditwarning' => "'''Diqqat:''' Siz tizimga kirmagansiz. Ushbu sahifa tarixida Sizning IP manzilingiz yozib qolinadi.",
+'missingcommenttext' => 'Iltimos sharh qoldiring.',
 'summary-preview' => "Tavsif shunday bo'ladi:",
 'subject-preview' => "Sarlavha shunday bo'ladi:",
 'blockedtitle' => 'Foydalanuvchi chetlashtirildi',
@@ -489,16 +539,22 @@ You cannot use the 'e-mail this user' feature unless a valid e-mail address is s
 Sizning hozirgi IP manzilingiz - $3, chetlashtirish raqamingiz - #$5. Arizaga bularni ilova qilishingiz mumkin.",
 'blockednoreason' => "sabab ko'rsatilmadi",
 'whitelistedittext' => "Siz sahifalarni o'zgartirish uchun $1.",
-'nosuchsectiontitle' => "Bo'imni topishning iloji yo'q",
+'nosuchsectiontitle' => "Bo'limni topishning iloji yo'q",
+'nosuchsectiontext' => "Siz mavjud bo'lmagan bo'limni sharhlamoqchi bo'ldingiz.
+Siz sharhlamoqchi bo'lgan bo'lim o'chirilgan yoki boshqa sarlavhaga jildirilgan bo'lishi mumkin.",
 'loginreqtitle' => 'Shaxsiyatni aniqlash talab etiladi',
 'loginreqlink' => 'Kirish',
 'loginreqpagetext' => "Boshqa sahifalarni ko'rish uchun $1",
 'accmailtitle' => "Mahfiy so'z jo'natildi.",
 'newarticle' => '(Yangi)',
 'newarticletext' => "Bu sahifa hali mavjud emas.
-Sahifani yaratish uchun quyida matn kiritishingiz mumkin (qo'shimcha axborot uchun [[{{MediaWiki:Helppage}}|yordam sahifasini]] ko'ring).
-Agar bu sahifaga xatolik sabab kelgan bo'lsangiz brauzeringizning '''orqaga''' tugmasini bosing.",
-'noarticletext' => 'Bu sahifada hozircha hech qanday matn yoʻq. Siz bu sarlavhani boshqa sahifalardan [[Special:Search/{{PAGENAME}}|qidirishingiz]], <span class="plainlinks">[{{fullurl:{{#Special:Log}}|page={{FULLPAGENAMEE}}}} tegishli loglarga qarashingiz] yoki bu sahifani [{{fullurl:{{FULLPAGENAME}}|action=edit}} tahrirlashingiz]</span> mumkin.',
+Sahifani yaratish uchun quyida matn kiritishingiz mumkin (qoʻshimcha axborot uchun [[{{MediaWiki:Helppage}}|yordam sahifasini]] koʻring).
+Agar bu sahifaga xatolik sabab kelib qolgan boʻlsangiz brauzeringizning '''orqaga''' tugmasini bosing.",
+'anontalkpagetext' => "----''Ushbu munozara sahifasi hali hisob yozuvini yaratmagan, yoki undan foydalanmaydigan anonim ishtirokchiga tegishli.
+Shu sababli tenglashtirish uchun raqamli IP-manzildan foydalaniladi.
+Ushbu manzilning oʻzi bir nechta boshqa ishtirokchilarga ham mos kelishi mumkin.
+Agar siz anonim ishtirokchi boʻlsangiz va siz oʻzingizga yoʻnaltirilmagan xabar oldim deb taxmin qilsangiz, iltimos, boshqa anonim ishtirokchilar bilan mumkin boʻlgan chalkashliklarni chetlab oʻtish uchun [[Special:UserLogin/signup|hisob yozuvi yarating]] yoki [[Special:UserLogin|tizimga kiring]].''",
+'noarticletext' => 'Bu sahifada hozircha hech qanday matn yoʻq. Siz bu sarlavhani boshqa sahifalardan [[Special:Search/{{PAGENAME}}|qidirishingiz]], <span class="plainlinks">[{{fullurl:{{#Special:Log}}|page={{FULLPAGENAMEE}}}} tegishli qaydlarga qarashingiz] yoki bu sahifani [{{fullurl:{{FULLPAGENAME}}|action=edit}} tahrirlashingiz]</span> mumkin.',
 'clearyourcache' => "'''Eslatma.''' Saqlaganingizdan so'ng o'zgarishlarni ko'rish uchun siz o'z brauzeringiz keshini tozalashingizga to'gri kelishi mumkin.
 * '''Firefox / Safari:''' ''Shift'' tugmasini bosgan holda, ''Yangilash'' unsurlar darchasini bosing, yoki ''Ctrl-F5'' yoki ''Ctrl-R'' (Macda ''⌘-R'') ni bosing
 * '''Google Chrome:''' ''Ctrl-Shift-R'' (Macda ''⌘-Shift-R'') ni bosing
@@ -507,6 +563,7 @@ Agar bu sahifaga xatolik sabab kelgan bo'lsangiz brauzeringizning '''orqaga''' t
 'updated' => '(Yangilandi)',
 'note' => "'''Izoh:'''",
 'previewnote' => "'''Bu shunchaki ko‘rib chiqish. O‘zgartirishlar hali saqlangani yo‘q!'''",
+'continue-editing' => 'tahrirlashni davom ettirish',
 'editing' => '$1 tahrirlanmoqda',
 'creating' => '«$1» sahifasini yaratish',
 'editingsection' => '$1 (boʻlim) tahrirlanmoqda',
@@ -515,7 +572,7 @@ Agar yozganlaringiz keyinchalik tahrir qilinishi va qayta tarqatilishiga rozi bo
 Siz shuningdek bu yozganlaringiz sizniki yoki erkin litsenziya ostida ekanligini va'da qilmoqdasiz.
 '''MUALLIFLIK HUQUQLARI BILAN HIMOYALANGAN ISHLARNI ZINHOR BERUXSAT YUBORMANG!'''",
 'copyrightwarning2' => "Iltimos, shuni esda tutingki, {{SITENAME}} sahifalaridagi barcha matnlar boshqa foydalanuvchilar tomonidan tahrirlanishi, almashtirilishi yoki o'chirilishi mumkin. Agar siz yozgan ma'lumotlaringizni bunday tartibda tahrirlanishiga rozi bo'lmasangiz, unda uni bu yerga joylashtirmang.<br />
-Bundan tashqari, siz ushbu ma'lumotlarni o'zingiz yozgan bo'lishingiz yoki ruxsat berilgan internet manzilidan yoki shu kabi erkin resursdan nusxa olgan bo'lishingiz lozim (Qo'shimcha ma'lumotlar ushun $1 sahifasiga murojaat qiling).
+Bundan tashqari, siz ushbu ma'lumotlarni o'zingiz yozgan bo'lishingiz yoki ruxsat berilgan internet manzilidan yoki shu kabi erkin resursdan nusxa olgan bo'lishingiz lozim (Qo'shimcha ma'lumotlar uchun $1 sahifasiga murojaat qiling).
 '''MUALLIFLIK HUQUQI QO'YILGAN ISHLARNI RUXSATSIZ BU YERGA JOYLASHTIRMANG!'''",
 'templatesused' => 'Ushbu sahifada foydalanilgan {{PLURAL:$1|andoza|andozalar}}:',
 'templatesusedpreview' => "Ushbu ko'rib chiqilayotgan sahifada foydalanilgan {{PLURAL:$1|andoza|andozalar}}:",
@@ -523,7 +580,6 @@ Bundan tashqari, siz ushbu ma'lumotlarni o'zingiz yozgan bo'lishingiz yoki ruxsa
 'template-protected' => '(himoyalangan)',
 'template-semiprotected' => '(yarim-himoyalangan)',
 'hiddencategories' => 'Ushbu sahifa {{PLURAL:$1|1 yashirin turkum|$1 yashirin turkumlar}}ga kiradi:',
-'nocreatetitle' => 'Sahifalarni yaratish cheklangan',
 'nocreatetext' => 'Ushbu saytda yangi sahifalar yaratish taqiqlagan.
 Ortga qaytib, mavjud sahifani tahrirlashingiz yoki [[Special:UserLogin|tizimga kirishingiz]] mumkin.',
 'nocreate-loggedin' => "Sizda yangi sahifalar yaratishga ruxsat yo'q.",
@@ -535,8 +591,8 @@ Ortga qaytib, mavjud sahifani tahrirlashingiz yoki [[Special:UserLogin|tizimga k
 
 Bu sahifani yaratishda davom etishdan avval uning nega avval yoʻqotilgani bilan qiziqib koʻring.
 Qulaylik uchun quyida yoʻqotilish qaydlari keltirilgan:",
-'moveddeleted-notice' => "Bu sahifa o'chirilgan.
-Ma'lumot uchun quyida o'chirishlar va qayta nomlashlar bo'yicha jurnallardan mos yozuvlar keltirilgan.",
+'moveddeleted-notice' => 'Bu sahifa oʻchirilgan.
+Maʼlumot uchun quyida oʻchirish va qayta nomlash jurnallaridan mos yozuvlar keltirilgan.',
 'log-fulllog' => "Qaydlarni to'liq ko'rish",
 'edit-conflict' => "Tashrirlash to'qnashuvi.",
 'defaultmessagetext' => "Boshlang'ich matn",
@@ -668,7 +724,7 @@ Bu yerda: (joriy) = hozirgi koʻrinish bilan farq,
 'search-relatedarticle' => "Bog'liq",
 'mwsuggest-disable' => "AJAX-takliflarini o'chirish",
 'searcheverything-enable' => 'Barcha nomfazolarda qidir',
-'searchrelated' => "bog'langan",
+'searchrelated' => 'bogʻlangan',
 'searchall' => 'barchasi',
 'showingresults' => "Quyida №'''$2'''dan boshlab '''$1''' ta {{PLURAL:$1|natija}} ko'rsatildi.",
 'showingresultsnum' => "Quyida №'''$2'''dan boshlab '''$1''' ta {{PLURAL:$1|natija}} ko'rsatildi.",
@@ -729,6 +785,7 @@ Bu yerda: (joriy) = hozirgi koʻrinish bilan farq,
 'stub-threshold-disabled' => "O'chirib qo'yilgan",
 'recentchangesdays-max' => 'Eng koʻpi $1 kun',
 'recentchangescount' => 'Sukut boʻyicha koʻrsatiladigan tahrirlar soni',
+'savedprefs' => 'Sizning moslamalaringiz saqlandi.',
 'timezonelegend' => 'Vaqt mintaqangiz:',
 'localtime' => 'Mahalliy vaqt:',
 'timezoneuseserverdefault' => 'Server moslamalaridan foydalanish ($1)',
@@ -796,6 +853,7 @@ Agar siz uni ko'rsatsangiz, undan sahifa tahriri kim tomonidan kiritilganligini
 'prefs-diffs' => 'Versiyalar farqi',
 
 # User rights
+'editusergroup' => 'Foydalanuvchi guruxlarni taxrirlash',
 'userrights-groupsmember' => 'Aʼzolik:',
 'userrights-groupsmember-auto' => "Noaniq a'zo",
 'userrights-reason' => 'Sabab:',
@@ -830,9 +888,12 @@ Agar siz uni ko'rsatsangiz, undan sahifa tahriri kim tomonidan kiritilganligini
 'right-read' => "Sahifalarni o'qish",
 'right-edit' => 'Sahifalarni tahrirlash',
 
+# Special:Log/newusers
+'newuserlogpage' => "Ishtirokchilarni ro'yxatga olish qaydlari",
+'newuserlogpagetext' => 'Yaqinda roʻyxatdan oʻtgan foydalanuvchilar roʻyxati',
+
 # User rights log
 'rightslog' => "Ishtirokchi huquqlari bo'yicha qaydlar",
-'rightslogentry' => "ishtirokchi $1ning guruhlardagi a'zoligini $2dan $3ga o'zgartirdi",
 
 # Associated actions - in the sentence "You do not have permission to X"
 'action-edit' => 'ushbu sahifani tahrirlash',
@@ -842,7 +903,7 @@ Agar siz uni ko'rsatsangiz, undan sahifa tahriri kim tomonidan kiritilganligini
 
 # Recent changes
 'nchanges' => "$1 {{PLURAL:$1|o'zgarish|o'zgarishlar}}",
-'recentchanges' => 'Yangi o‘zgartirishlar',
+'recentchanges' => 'Yangi oʻzgarishlar',
 'recentchanges-legend' => 'Yangi tahrirlar moslamalari',
 'recentchanges-summary' => "Bu sahifada siz oxirgi o'zgartirishlarni ko'rishingiz mumkin.",
 'recentchanges-feed-description' => "Vikida mazkur oqimdagi oxirgi o'zgarishlarni kuzatish",
@@ -863,7 +924,7 @@ Agar siz uni ko'rsatsangiz, undan sahifa tahriri kim tomonidan kiritilganligini
 'diff' => 'farq',
 'hist' => 'tarix',
 'hide' => 'Yashirish',
-'show' => 'Koʻrsatish',
+'show' => 'koʻrsatish',
 'minoreditletter' => 'k',
 'newpageletter' => 'Y',
 'boteditletter' => 'b',
@@ -907,7 +968,7 @@ Agar siz uni ko'rsatsangiz, undan sahifa tahriri kim tomonidan kiritilganligini
 'listfiles_name' => 'Nomi',
 'listfiles_user' => 'Foydalanuvchi',
 'listfiles_size' => 'Oʻlchami',
-'listfiles_description' => 'TaÊ»rif',
+'listfiles_description' => 'Taʼrif',
 'listfiles_count' => 'Versiyalar',
 
 # File description page
@@ -1001,10 +1062,12 @@ Uning [$2 fayl tavsifi sahifasidan] olingan tavsifi quyida keltirilgan.',
 'prevpage' => 'Avvalgi sahifa ($1)',
 'allpagesfrom' => 'Quyidagidan boshlanuvchi sahifalarni koʻrsatish:',
 'allarticles' => 'Barcha sahifalar',
+'allnotinnamespace' => 'Barcha sahifalar ("$1" nomfazolaridan tashqari)',
 'allpagesprev' => 'Oldingi',
 'allpagesnext' => 'Keyingi',
 'allpagessubmit' => 'Oʻtish',
 'allpagesprefix' => 'Shunday prefiksli sahifalarni koʻrsatish:',
+'allpages-hide-redirects' => 'Yoʻnaltirishlarni yashirish',
 
 # SpecialCachedPage
 'cachedspecial-refresh-now' => "Oxirgi versiyasini ko'rish",
@@ -1014,31 +1077,53 @@ Uning [$2 fayl tavsifi sahifasidan] olingan tavsifi quyida keltirilgan.',
 'categoriespagetext' => 'The following {{PLURAL:$1|category contains|categories contain}} pages or media.
 [[Special:UnusedCategories|Unused categories]] are not shown here.
 Also see [[Special:WantedCategories|wanted categories]].',
+'categoriesfrom' => 'Quyidagidan boshlanuvchi turkumlarni koʻrsatish:',
+'special-categories-sort-count' => 'miqdori bo‘yicha saralash',
+'special-categories-sort-abc' => 'alifbo bo‘yicha saralash',
 
 # Special:DeletedContributions
+'deletedcontributions' => 'Foydalanuvchining o‘chirilgan hissasi',
+'deletedcontributions-title' => 'O‘chirilgan foydalanuvchilar hissalari',
 'sp-deletedcontributions-contribs' => 'hissa',
 
 # Special:LinkSearch
+'linksearch' => 'Tashqi havolalarni qidirish',
+'linksearch-pat' => 'Qidiruv uchun andaza',
 'linksearch-ns' => 'Nomfazo:',
 'linksearch-ok' => 'Qidirish',
 'linksearch-line' => '$2 ichidan $1 ga havola',
 
 # Special:ListUsers
+'listusersfrom' => 'Quyidagidan boshlanuvchi foydalanuvchilarni koʻrsatish:',
 'listusers-submit' => 'Koʻrsatish',
+'listusers-noresult' => 'Foydalanuvchilar topilmadi.',
+'listusers-blocked' => '(chetlashtirilgan)',
 
-# Special:Log/newusers
-'newuserlogpage' => "Ishtirokchilarni ro'yxatga olish qaydlari",
+# Special:ActiveUsers
+'activeusers' => 'Faol foydalanuvchilar roʻyxati',
+'activeusers-from' => 'Quyidagidan boshlanuvchi foydalanuvchilarni koʻrsatish:',
+'activeusers-hidebots' => 'Botlarni yashirish',
+'activeusers-hidesysops' => 'Maʼmurlarni yashirish',
+'activeusers-noresult' => 'Foydalanuvchilar topilmadi.',
 
 # Special:ListGroupRights
+'listgrouprights' => 'Foydalanuvchilar guruhi huquqlari',
 'listgrouprights-group' => 'Guruh',
 'listgrouprights-rights' => 'Huquqlar',
+'listgrouprights-helppage' => 'Help:Guruhlar huquqlari',
 'listgrouprights-members' => '(a’zolar ro‘yxati)',
 
 # E-mail user
 'emailuser' => 'Foydalanuvchiga maktub',
+'emailuser-title-target' => 'Ushbu {{GENDER:$1|foydalanuvchi}}ga maktub joʻnatish',
+'emailuser-title-notarget' => 'Foydalanuvchiga elektron maktub yozish',
+'emailpage' => 'Foydalanuvchiga maktub',
+'usermailererror' => 'Elektron pochta xabarini joʻnatishda xatolik yuz berdi:',
 'defemailsubject' => '{{SITENAME}} — $1 tomonidan maktub',
+'usermaildisabled' => 'Foydalanuvchi elektron pochtasi o‘chirilgan',
 'noemailtitle' => 'Elektron pochta manzili mavjud emas',
 'noemailtext' => "Bu foydalanuvchi e-mail manzil ko'rsatgani yo'q.",
+'nowikiemailtitle' => 'Maktub joʻnatishga ruxsat yoʻq',
 'emailtarget' => 'Oluvchi ishtirokchining ismini kiriting',
 'emailusername' => 'Ishtirokchi nomi:',
 'emailusernamesubmit' => "Jo'natish",
@@ -1048,6 +1133,7 @@ Also see [[Special:WantedCategories|wanted categories]].',
 'emailsubject' => 'Sarlavha:',
 'emailmessage' => 'Xabar',
 'emailsend' => 'Joʻnatish',
+'emailccme' => 'Maktub nusxasini menga joʻnatish',
 'emailccsubject' => '$1ga maktubingizning nusxasi: $2',
 'emailsent' => "Xat jo'natildi",
 'emailsenttext' => "Sizning elektron maktubingiz jo'natildi.",
@@ -1085,63 +1171,97 @@ Agar siz bu sahifani kuzatuv ro'yxatingizdan o'chirmoqchi bo'lsangiz \"Kuzatmasl
 'enotif_mailer' => "{{SITENAME}} Pochta orqali e'lon qilish xizmati",
 'enotif_reset' => "Hamma sahifalarni ko'rib chiqilgan deb belgilash",
 'enotif_impersonal_salutation' => '{{SITENAME}} ishtirokchisi',
+'enotif_subject_deleted' => '{{SITENAME}} loyihasining $1 nomli sahifasi foydalanuvchi {{gender:$2|$2}} tomonidan o‘chirildi',
+'enotif_subject_created' => '{{SITENAME}} loyihasining $1 nomli sahifasi foydalanuvchi {{gender:$2|$2}} tomonidan yaratildi',
+'enotif_subject_moved' => '{{SITENAME}} loyihasining $1 nomli sahifasi foydalanuvchi {{gender:$2|$2}} tomonidan qayta nomlandi',
+'enotif_subject_restored' => '{{SITENAME}} loyihasining $1 nomli sahifasi foydalanuvchi {{gender:$2|$2}} tomonidan tiklandi',
+'enotif_subject_changed' => '{{SITENAME}} loyihasining $1 nomli sahifasi foydalanuvchi {{gender:$2|$2}} tomonidan oʻzgartirildi',
+'enotif_body_intro_deleted' => '{{SITENAME}} loyihasining $1 nomli sahifasi $PAGEEDITDATEda foydalanuvchi {{gender:$2|$2}} tomonidan o‘chirildi, qarang: $3.',
+'enotif_body_intro_created' => '{{SITENAME}} loyihasining $1 nomli sahifasi $PAGEEDITDATEda foydalanuvchi {{gender:$2|$2}} tomonidan yaratildi, joriy variantini ko‘rish uchun $3 ga qarang.',
+'enotif_body_intro_moved' => '{{SITENAME}} loyihasining $1 nomli sahifasi $PAGEEDITDATEda foydalanuvchi {{gender:$2|$2}} tomonidan qayta nomlandi, joriy variantini ko‘rish uchun $3 ga qarang.',
+'enotif_body_intro_restored' => '{{SITENAME}} loyihasining $1 nomli sahifasi $PAGEEDITDATEda foydalanuvchi {{gender:$2|$2}} tomonidan tiklandi, joriy variantini ko‘rish uchun $3 ga qarang.',
+'enotif_body_intro_changed' => '{{SITENAME}} loyihasining $1 nomli sahifasi $PAGEEDITDATEda foydalanuvchi {{gender:$2|$2}} tomonidan o‘zgartirildi, joriy variantini ko‘rish uchun $3 ga qarang.',
 'enotif_lastvisited' => "Oxirgi tashrifingizdan buyon sodir bo'lgan barcha o'zgarishlarni ko'rish uchun $1 ga qarang.",
 'enotif_lastdiff' => "O'zgarishlar bilan tanishish uchun $1 ga qarang.",
 'enotif_anon_editor' => 'anonim ishtirokchi $1',
-'enotif_body' => "Hurmatli \$WATCHINGUSERNAME,
+'enotif_body' => 'Hurmatli $WATCHINGUSERNAME,
 
-\$PAGEEDITDATE kuni \"{{SITENAME}}\" loyihasining \$PAGETITLE sahifasi ishtirokchi \$PAGEEDITOR tomonidan \$CHANGEDORCREATED, joriy versiyani ko'rish uchun \$PAGETITLE_URL havolasi bo'yicha o'ting.
+$PAGEINTRO $NEWPAGE
 
-\$NEWPAGE
-
-O'zgarish bo'yicha qisqacha izoh: \$PAGESUMMARY \$PAGEMINOREDIT
+O‘zgarish bo‘yicha qisqacha izoh: $PAGESUMMARY $PAGEMINOREDIT
 
 Tahrirlovchiga murojaat qilish:
-el. pochta: \$PAGEEDITOR_EMAIL
-viki: \$PAGEEDITOR_WIKI
+el. pochta: $PAGEEDITOR_EMAIL
+viki: $PAGEEDITOR_WIKI
 
-Agar siz sahifaga o'tib ko'rmasangiz, u holda uning keyingi o'zgarishlari bo'yicha boshqa bildirish xabarlari kelmaydi.
-Siz shuningdek o'zingizning kuzatuv ro'yxatingizda barcha sahifalar uchun bildirish moslamasini o'chirishingiz mumkin.
+Agar siz sahifaga o‘tib ko‘rmasangiz, u holda uning keyingi o‘zgarishlari bo‘yicha boshqa bildirish xabarlari kelmaydi. Siz, shuningdek o‘z kuzatuv ro‘yxatingizda barcha sahifalar uchun xabar berish moslamasini o‘chirishingiz mumkin.
 
-             {{grammar:genitive|{{SITENAME}}}}ning axborot berish tizimi
+{{SITENAME}}ning xabar berish tizimi
 
 --
-Bildirishlar moslamalarini o'zgartirish
+Xabar berish moslamalarini o‘zgartirish uchun quyidagi havola bo‘yicha o‘ting
 {{canonicalurl:{{#special:Preferences}}}}
 
-O'zingizning kuzatuv ro'yxatingiz moslamalarini o'zgartirish
+Oʻz kuzatuv roʻyxatingiz moslamalarini o‘zgartirish uchun quyidagi havola bo‘yicha o‘ting
 {{canonicalurl:{{#special:EditWatchlist}}}}
 
-Sizning kuzatuv ro'yxatingizdagi sahifalarni o'chirish
-\$UNWATCHURL
+Oʻz kuzatuv roʻyxatingizdan sahifani o‘chirish uchun quyidagi havola bo‘yicha o‘ting
+$UNWATCHURL
 
 Qayta aloqa va yordam
-{{canonicalurl:{{MediaWiki:Helppage}}}}",
+{{canonicalurl:{{MediaWiki:Helppage}}}}',
+'created' => 'yaratildi',
+'changed' => 'o‘zgartirildi',
 
 # Delete
 'deletepage' => "Sahifani o'chirish",
 'confirm' => 'Tasdiqlash',
+'excontent' => 'tarkibi: "$1"',
+'exblank' => 'sahifa boʻsh edi',
+'delete-confirm' => '$1 — oʻchirish',
+'delete-legend' => 'O‘chirish',
 'actioncomplete' => 'Bajarildi',
 'actionfailed' => 'Jarayon amalga oshmadi',
 'deletedtext' => '"$1" yoʻqotildi.
 Yaqinda sodir etilgan yoʻqotishlar uchun $2ni koʻring.',
 'dellogpage' => 'Yoʻqotish qaydlari',
+'dellogpagetext' => 'Quyida oxirgi oʻchirish qaydlari keltirilgan',
 'deletionlog' => 'yoʻqotish qaydlari',
+'reverted' => 'Eski holiga keltirildi',
 'deletecomment' => 'Sabab:',
 'deleteotherreason' => 'Boshqa/qoʻshimcha sabab:',
 'deletereasonotherlist' => 'Boshqa sabab',
+'delete-edit-reasonlist' => 'Sabablar roʻyxatini tahrirlash',
 
 # Rollback
+'rollback' => 'Oʻzgarishlarni eski holiga keltirish',
+'rollback_short' => 'Eski holiga keltirish',
 'rollbacklink' => 'eski holiga keltirish',
+'rollbacklinkcount' => '$1 {{PLURAL:$1| ta tahrir}}ni eski holiga keltirish',
+'rollbacklinkcount-morethan' => '$1 {{PLURAL:$1| tadan koʻp tahrir}}ni eski holiga keltirish',
+'rollbackfailed' => 'Eski holiga keltirishda xatolik',
 'revertpage' => '[[Special:Contributions/$2|$2]] ([[User talk:$2|munozara]]) tahrirlari [[User:$1|$1]] versiyasiga qaytarildi',
 
+# Edit tokens
+'sessionfailure-title' => 'Seansda xatolik',
+
 # Protect
 'protectlogpage' => 'Himoyalash qaydlari',
 'protectedarticle' => '"[[$1]]" sahifasi himoyalandi',
 'modifiedarticleprotection' => '"[[$1]]" uchun himoyalash darajasini o\'zgartirdi',
 'movedarticleprotection' => 'himoyalash moslamalarini "[[$2]]"dan "[[$1]]"ga o\'tkazdi',
+'protect-legend' => 'Himoya oʻrnatishni tasdiqlang',
+'protectcomment' => 'Sabab:',
+'protectexpiry' => 'Tugaydi:',
 'protect-level-sysop' => 'Faqat administratorlar uchun',
+'protect-summary-cascade' => 'pog‘onali',
+'protect-expiring-local' => '$1da tugaydi',
 'protect-expiry-indefinite' => 'muddatsiz',
+'protect-othertime' => 'Boshqa vaqt:',
+'protect-othertime-op' => 'boshqa vaqt',
+'protect-existing-expiry' => 'Joriy tugash vaqti: $2, $3',
+'protect-otherreason' => 'Boshqa/qo‘shimcha sabab',
+'protect-otherreason-op' => 'Boshqa sabab',
 'protect-edit-reasonlist' => "Sabablar ro'yxatini tahrirlash",
 'protect-expiry-options' => '1 soat:1 hours,1 kun:1 day,1 hafta:1 week,2 hafta:2 weeks,1 oy:1 month,3 oy:3 months,6 oy:6 months,1 yil:1 year,cheksiz:infinite',
 'restriction-type' => 'Huquqlar:',
@@ -1185,8 +1305,8 @@ Yaqinda sodir etilgan yoʻqotishlar uchun $2ni koʻring.',
 'blanknamespace' => '(asosiy)',
 
 # Contributions
-'contributions' => 'Foydalanuvchining hissasi',
-'contributions-title' => '$1 {{GENDER:$1|foydalanuvchisining}} hissasi',
+'contributions' => '{{GENDER:$1|Foydalanuvchi}} hissasi',
+'contributions-title' => '{{GENDER:$1|Foydalanuvchi}} $1 hissasi',
 'mycontris' => 'Hissam',
 'contribsub2' => '$1 uchun ($2)',
 'nocontribs' => "Belgilangan shartlarga muvofiq o'zgarishlar topilmadi",
@@ -1197,9 +1317,9 @@ Yaqinda sodir etilgan yoʻqotishlar uchun $2ni koʻring.',
 'sp-contributions-newbies' => 'Faqatgina yangi foydalanuvchilarning hissalarini koʻrsat',
 'sp-contributions-newbies-sub' => 'Yangi hisob yozuvlaridan',
 'sp-contributions-newbies-title' => 'Yangi hisob yozuvlarining hissalari',
-'sp-contributions-blocklog' => 'Chetlashtirish qaydlari',
+'sp-contributions-blocklog' => 'chetlatishlar',
 'sp-contributions-deleted' => "o'chirilgan tahrirlar",
-'sp-contributions-uploads' => 'yuklanmalar',
+'sp-contributions-uploads' => 'yuklamalar',
 'sp-contributions-logs' => 'qaydlar',
 'sp-contributions-talk' => 'munozara',
 'sp-contributions-userrights' => 'foydalanuvchining huquqlarini boshqarish',
@@ -1214,6 +1334,7 @@ Yaqinda sodir etilgan yoʻqotishlar uchun $2ni koʻring.',
 'whatlinkshere-page' => 'Sahifa:',
 'linkshere' => "Quyidagi sahifalar '''[[:$1]]''' sahifasiga bog'langan:",
 'nolinkshere' => "'''[[:$1]]''' sahifasiga hech qaysi sahifa bog‘lanmagan.",
+'nolinkshere-ns' => "Tanlangan nomfazoda '''[[:$1]]'''ga bog‘langan sahifalar mavjud emas.",
 'isredirect' => 'yoʻnaltiruvchi sahifa',
 'istemplate' => 'qoʻshimcha',
 'isimage' => 'faylli havola',
@@ -1245,27 +1366,68 @@ Yaqinda sodir etilgan yoʻqotishlar uchun $2ni koʻring.',
 ** Tahdid, ishtirokchilarni ta'qib qilish
 ** Bir necha hisob yozuvlaridan o'z manfaatlarida foydalanish
 ** Ishtirokchining nomaqbul ismi",
+'ipbsubmit' => 'Ushbu foydalanuvchini chetlashtirish',
 'ipbother' => 'Boshqa vaqt:',
 'ipboptions' => '2 soat:2 hours,1 kun:1 day,3 kun:3 days,1 hafta:1 week,2 hafta:2 weeks,1 oy:1 month,3 oy:3 months,6 oy:6 months,1 yil:1 year,cheksiz:infinite',
-'ipblocklist' => 'Chetlashtirilgan IP manzillari va foydalanuvchilar',
+'ipbotheroption' => 'boshqa',
+'ipbotherreason' => 'Boshqa/qo‘shimcha sabab',
+'ipb-edit-dropdown' => 'Sabablar ro‘yxatini tahrirlash',
+'ipb-unblock-addr' => '$1dan toʻsiqni olish',
+'unblockip' => 'Foydalanuvchidan to‘siqni olib tashlash',
+'ipusubmit' => 'Ushbu chetlashtirishni olib tashlash',
+'unblocked' => '[[User:$1|$1]]dan to‘siq olib tashlandi',
+'unblocked-range' => '$1dan to‘siq olib tashlandi',
+'blocklist' => 'Chetlashtirilgan foydalanuvchilar',
+'ipblocklist' => 'Chetlashtirilgan foydalanuvchilar',
+'blocklist-timestamp' => 'Sana/vaqt',
+'blocklist-target' => 'Maqsad',
+'blocklist-expiry' => 'Tugaydi',
+'blocklist-by' => 'Chetlashtirgan maʻmur',
+'blocklist-params' => 'Chetlashtirish moslamalari',
+'blocklist-reason' => 'Sabab',
+'ipblocklist-submit' => 'Qidiruv',
+'ipblocklist-localblock' => 'Mahalliy chetlashtirish',
+'ipblocklist-otherblocks' => 'Boshqa {{PLURAL:$1|chetlashtirishlar}}',
+'infiniteblock' => 'muddatsiz',
+'expiringblock' => '$1 soat $2da tugaydi',
+'anononlyblock' => 'faqat anonimlar',
+'noautoblockblock' => 'avtochetlashtirish o‘chirilgan',
+'createaccountblock' => 'hisob yozuvi yaratish taqiqlangan',
 'emailblock' => "xatlar jo'natish taqiqlandi",
+'blocklist-nousertalk' => 'o‘zining munozara sahifasini tahrirlay olmaydi',
+'ipblocklist-empty' => 'Toʻsiqlar roʻyxati boʻsh.',
 'blocklink' => 'chetlashtirish',
 'unblocklink' => "muhosarani (to'sishni) bekor qilish",
 'change-blocklink' => "Muhosarani (to'siqni) o'zgartirmoq",
-'contribslink' => 'hissasi',
-'blocklogpage' => 'Chetlashtirish qaydlari',
+'contribslink' => 'hissa',
+'emaillink' => 'e-maktub jo‘natish',
+'blocklogpage' => 'Chetlatish qaydlari',
 'blocklogentry' => '$2 davrga [[$1]]ni chetlashtirdi $3',
 'block-log-flags-nocreate' => 'hisob ochish toʻxtatilgan',
 'block-log-flags-nousertalk' => "o'zining munozara sahifasini tahrirlay olmaydi",
+'proxyblocksuccess' => 'Bajarildi.',
 
 # Move page
-'movearticle' => "Sahifani ko'chirish",
+'move-page' => '$1 — qayta nomlash',
+'move-page-legend' => 'Sahifani qayta nomlash',
+'movearticle' => 'Sahifani qayta nomlash',
+'movenologin' => 'Siz tizimga kirmagansiz',
+'newtitle' => 'Yangi nom:',
 'movepagebtn' => 'Sahifani koʻchirish',
-'pagemovedsub' => 'Koʻchirildi',
+'pagemovedsub' => 'Sahifa qayta nomlandi',
 'movepage-moved' => '\'\'\'"$1" nomli sahifa "$2" nomli sahifaga koʻchirildi\'\'\'',
+'movepage-moved-redirect' => 'Qayta yo‘naltirish yaratildi.',
+'movedto' => 'quyidagiga qayta nomlandi',
 'movelogpage' => 'Koʻchirish qaydlari',
+'movesubpage' => '{{PLURAL:$1|Ostsahifa|Ostsahifalar}}',
+'movesubpagetext' => 'Ushbu sahifada $1 {{PLURAL:$1| ta ostsahifa}} mavjud.',
+'movenosubpage' => 'Bu sahifa ostsahifalarga ega emas.',
 'movereason' => 'Sabab:',
 'revertmove' => 'qaytarish',
+'delete_and_move' => 'O‘chirish va qayta nomlash',
+'delete_and_move_confirm' => 'Ha, ushbu sahifa o‘chirilsin',
+'move-over-sharedrepo' => '== Fayl allaqachon mavjud ==
+Umumiy omborda [[:$1]] mavjud. Faylning bu nomga qayta nomlanishi faylning umumiy omborda to‘silishiga olib keladi.',
 
 # Export
 'export' => 'Sahifalar eksporti',
@@ -1276,11 +1438,12 @@ Yaqinda sodir etilgan yoʻqotishlar uchun $2ni koʻring.',
 'export-addns' => "Qo'shish",
 'export-download' => 'Fayl sifatida saqlash',
 'export-templates' => 'Andozalarni kiritish',
+'export-pagelinks' => 'Teranligi quyidagicha bo‘lgan bog‘langan sahifalarni kiritish:',
 
 # Namespace 8 related
 'allmessages' => 'Tizim xabarlari',
 'allmessagesname' => 'Nomi',
-'allmessagesdefault' => "Boshlang'ich matn",
+'allmessagesdefault' => 'Boshlangʻich matn',
 'allmessagescurrent' => 'Joriy xabar matni',
 'allmessages-filter-all' => 'Barcha',
 'allmessages-language' => 'Til:',
@@ -1308,7 +1471,7 @@ Yaqinda sodir etilgan yoʻqotishlar uchun $2ni koʻring.',
 'tooltip-ca-talk' => 'Sahifa matni borasida munozara',
 'tooltip-ca-edit' => "Siz bu sahifani tahrirlashingiz mumkin. Iltimos, saqlashdan oldim ko'rib chiqish tugmasidan foydalaning.",
 'tooltip-ca-addsection' => 'Yangi boʻlim ochish',
-'tooltip-ca-viewsource' => "Bu sahifa himoyalangan. Siz uning manbasini ko'rishingiz mumkin.",
+'tooltip-ca-viewsource' => 'Bu sahifa himoyalangan. Siz uning manbasini koʻrishingiz mumkin.',
 'tooltip-ca-history' => 'Bu sahifaning oldingi versiyalari.',
 'tooltip-ca-protect' => 'Bu sahifani himoyalash',
 'tooltip-ca-unprotect' => "Ushbu sahifaning himoyasini o'zgaritish",
@@ -1369,6 +1532,7 @@ Yaqinda sodir etilgan yoʻqotishlar uchun $2ni koʻring.',
 'pageinfo-watchers' => 'Sahifa kuzatuvchilari soni',
 'pageinfo-edits' => 'Jami tahrirlar soni',
 'pageinfo-toolboxlink' => 'Sahifa haqida maʼlumot',
+'pageinfo-redirectsto' => 'Qayta yoʻnaltirish',
 
 # Skin names
 'skinname-standard' => 'Klassik',
@@ -1494,8 +1658,8 @@ Yaqinda sodir etilgan yoʻqotishlar uchun $2ni koʻring.',
 # New logging system
 'logentry-move-move' => '$1 $3 sahifasini $4ga koʻchirdi',
 'logentry-patrol-patrol-auto' => '$1 $3 sahifasining $4 versiyasini avtomatik patrulladi',
-'logentry-newusers-newusers' => '$1 ishtirokchisining hisob yozuvi yaratildi',
-'logentry-newusers-create' => '$1 ishtirokchisining hisob yozuvi yaratildi',
+'logentry-newusers-newusers' => '$1 hisob yozuvi yaratildi',
+'logentry-newusers-create' => '$1 hisob yozuvi yaratildi',
 
 # Feedback
 'feedback-close' => 'Bajarildi',
index 48860a1..58208a8 100644 (file)
@@ -67,7 +67,8 @@ $specialPageAliases = array(
        'Booksources'               => array( 'SercaISBN' ),
        'BrokenRedirects'           => array( 'RimandiSbalià' ),
        'Categories'                => array( 'Categorie' ),
-       'ChangePassword'            => array( 'ReinpostaPassword' ),
+       'ChangeEmail'               => array( 'CanbiaEmail' ),
+       'ChangePassword'            => array( 'CanbiaPassword' ),
        'ComparePages'              => array( 'ConfrontaPagine' ),
        'Confirmemail'              => array( 'ConfermaEMail' ),
        'Contributions'             => array( 'Contributi' ),
@@ -76,6 +77,7 @@ $specialPageAliases = array(
        'DeletedContributions'      => array( 'ContributiScancelà' ),
        'Disambiguations'           => array( 'Disanbiguassion' ),
        'DoubleRedirects'           => array( 'DópiRimandi' ),
+       'EditWatchlist'             => array( 'CanbiaTegnuiDeOcio' ),
        'Emailuser'                 => array( 'MandaEMail' ),
        'Export'                    => array( 'Esporta' ),
        'Fewestrevisions'           => array( 'PagineConMancoRevision' ),
@@ -99,6 +101,7 @@ $specialPageAliases = array(
        'MIMEsearch'                => array( 'SercaMIME' ),
        'Mostcategories'            => array( 'PagineConPiassèCategorie' ),
        'Mostimages'                => array( 'FilePiassèDoparà' ),
+       'Mostinterwikis'            => array( 'PiassèInterwiki' ),
        'Mostlinked'                => array( 'PaginePiassèRiciamà' ),
        'Mostlinkedcategories'      => array( 'CategoriePiassèDoparà' ),
        'Mostlinkedtemplates'       => array( 'ModèiPiassèDoparà' ),
@@ -107,8 +110,11 @@ $specialPageAliases = array(
        'Mycontributions'           => array( 'IMeContributi' ),
        'Mypage'                    => array( 'LaMePaginaUtente' ),
        'Mytalk'                    => array( 'LeMeDiscussion' ),
+       'Myuploads'                 => array( 'IMeCaricamenti' ),
        'Newimages'                 => array( 'FileNovi' ),
        'Newpages'                  => array( 'PagineNove' ),
+       'PasswordReset'             => array( 'ReinpostaPassword' ),
+       'PermanentLink'             => array( 'LinkParmanente' ),
        'Popularpages'              => array( 'PaginePiassèVisità' ),
        'Preferences'               => array( 'Preferense' ),
        'Prefixindex'               => array( 'Prefissi' ),
@@ -156,7 +162,7 @@ $messages = array(
 'tog-hidepatrolled' => 'Scondi i canbiamenti verificà in tei "Ultimi canbiamenti"',
 'tog-newpageshidepatrolled' => "Scondi łe pajine verifegae da l'elenco de łe pajine pì resenti",
 'tog-extendwatchlist' => "Mostra tute łe modifeghe a i oservai spesałi, no soło l'ultima",
-'tog-usenewrc' => 'Utiłisa łe ulteme modifeghe avansae (el richiede JavaScript)',
+'tog-usenewrc' => "Ragrupa łe modifeghe par pàjina inte i ultimi canbiamenti e inte łe tegnùe d'ocio (el dimanda JavaScript)",
 'tog-numberheadings' => 'Numerasion automatega de i titołi de sesion',
 'tog-showtoolbar' => 'Mostra ła bara de i strumenti de modifega (el richiede JavaScript)',
 'tog-editondblclick' => 'Modifega de łe pajine tramite dopio clic (el richiede JavaScript)',
@@ -164,17 +170,17 @@ $messages = array(
 'tog-editsectiononrightclick' => 'Modifega de łe sesion tramite clic destro sol titoło (el richiede JavaScript)',
 'tog-showtoc' => "Mostra l'indexe par łe pajine con pì de 3 sesion",
 'tog-rememberpassword' => 'Tiente in mente la me password so sto computer (par un massimo de $1 {{PLURAL:$1|zorno|zorni}})',
-'tog-watchcreations' => 'Zonta łe pajine creae a i oservai spesałi',
-'tog-watchdefault' => 'Zonta łe pajine modifegae a i oservai spesałi',
-'tog-watchmoves' => 'Zonta łe pajine spostae a i oservai spesałi',
-'tog-watchdeletion' => 'Zonta łe pajine scansełae a i oservai spesałi',
+'tog-watchcreations' => "Xonta łe pàjine creae e i file cargai a łe tegnùe d'ocio",
+'tog-watchdefault' => "Xonta łe pàjine e i file modifegai a łe tegnùe d'ocio",
+'tog-watchmoves' => "Xonta łe pàjine e i file spostai a łe tegnùe d'ocio",
+'tog-watchdeletion' => "Xonta łe pàjine e i file scansełai a łe tegnùe d'ocio",
 'tog-minordefault' => 'Segna ogni canbiamento come picenin (solo come predefinìo)',
 'tog-previewontop' => "Mostra l'anteprima sora ła caseła de modifega e no soto",
 'tog-previewonfirst' => "Mostra l'anteprima par ła prima modifega",
 'tog-nocache' => 'Disativa ła cache par łe pajine del browser',
-'tog-enotifwatchlistpages' => 'Segnałame via e-mail łe modifeghe a łe pajine oservae',
+'tog-enotifwatchlistpages' => "Segnałame via e-mail có vien canbià na pàjina o un file prexente inte ła lista de łe tegnùe d'ocio",
 'tog-enotifusertalkpages' => 'Avìseme par e-mail se i scrive su la me pagina de discussion',
-'tog-enotifminoredits' => 'Avìseme par e-mail anca par i canbiamenti picenini',
+'tog-enotifminoredits' => "Avìxeme par e-mail anca pa' i canbiamenti picenini de pàjine e file",
 'tog-enotifrevealaddr' => 'Fà védar el me indirisso e-mail in tei messagi de aviso',
 'tog-shownumberswatching' => 'Mostra el numaro de utenti che i ga ła pajina en oservasion',
 'tog-oldsig' => 'Anteprima de ła firma:',
@@ -182,7 +188,7 @@ $messages = array(
 'tog-externaleditor' => "Dopara par default un editor de testo esterno (soło par utenti esperti. Richiede l'uxo de inpostasion particołari sol proprio computer)",
 'tog-externaldiff' => "Dopara par default un programa de diff esterno (soło par utenti esperti. Richiede l'uxo de inpostasion particołari sol proprio computer)",
 'tog-showjumplinks' => 'Ativa i cołegamenti acesibiłi "va a"',
-'tog-uselivepreview' => 'Ativa ła funsion "Line preview" (el richiede JavaScript; sperimentałe)',
+'tog-uselivepreview' => 'Ativa ła funsion "Line preview" (el dimanda JavaScript; sperimentałe)',
 'tog-forceeditsummary' => "Chiedi conferma se l'ozeto de ła modifega el xé vodo",
 'tog-watchlisthideown' => 'Scondi łe me modifeghe ne i oservai spesałi',
 'tog-watchlisthidebots' => 'Scondi łe modifeghe de i bot ne i oservai spesałi',
@@ -197,7 +203,7 @@ $messages = array(
 
 'underline-always' => 'Senpre',
 'underline-never' => 'Mai',
-'underline-default' => 'Mantieni łe inpostasion del browser',
+'underline-default' => 'Mantien łe inpostasion del browser o de ła skin',
 
 # Font style option in Special:Preferences
 'editfont-style' => "Stiłe font de l'area de modifega:",
@@ -282,7 +288,8 @@ $messages = array(
 'newwindow' => '(se verze in te na finestra nova)',
 'cancel' => 'Lassa star',
 'moredotdotdot' => 'Altro...',
-'mypage' => 'La me pagina',
+'morenotlisted' => 'Altro nó elencà',
+'mypage' => 'Pàjina',
 'mytalk' => 'Discussion',
 'anontalk' => 'Discusion par sto IP',
 'navigation' => 'Navigasion',
@@ -305,10 +312,10 @@ $messages = array(
 'vector-action-protect' => 'Protezi',
 'vector-action-undelete' => 'Recupera',
 'vector-action-unprotect' => 'Canbia ła protesion',
-'vector-simplesearch-preference' => "Intaca i sugerimenti di ricerca avansadi (solo par l'interfacia Vector)",
+'vector-simplesearch-preference' => "Abiłita ła sbara par ła riserca senplifegà (soło che par l'interfacia Vector)",
 'vector-view-create' => 'Crea',
 'vector-view-edit' => 'Canbia',
-'vector-view-history' => 'Varda la storia',
+'vector-view-history' => "Varda ła 'storia",
 'vector-view-view' => 'Lezi',
 'vector-view-viewsource' => 'Varda el testo',
 'actions' => 'Asion',
@@ -467,12 +474,12 @@ L'elenco de le pagine speciali te lo cati su [[Special:SpecialPages|{{int:specia
 # General errors
 'error' => 'Erore',
 'databaseerror' => 'Erore del database',
-'dberrortext' => 'Erore de sintassi ne ła richiesta inoltrà al database.
-Ciò podaria indicare ła presensa de on bug nel software.
-L\'ultima query invià al database xè sta:
+'dberrortext' => 'Eror de sintasi inte ła dimanda inoltrà al database.
+Ciò podaria indicar ła prexensa de un bug inte\'l software.
+L\'ultema query invià al database ła xè sta:
 <blockquote><tt>$1</tt></blockquote>
 riciamà da ła funsion "<tt>$2</tt>".
-El database el ga restituio el seguente erore "<tt>$3: $4</tt>".',
+El database el ga restituio el seguente eror "<tt>$3: $4</tt>".',
 'dberrortextcl' => 'Erore de sintasi ne ła richiesta inoltrà al database.
 L\'ultima query invià al database xè sta:
 "$1"
@@ -509,6 +516,8 @@ Se prega de dìrghelo a un [[Special:ListUsers/sysop|aministradore]] indicando l
 'cannotdelete' => 'No xè sta posibiłe scansełare el file "$1".
 Podaria esare sta zà scansełà da qualcun altro.',
 'cannotdelete-title' => 'Inposibiłe ełiminare ła pajina "$1"',
+'delete-hook-aborted' => 'Modifega abortìa da parte del hook.
+No xe stà dà nisuna spiegasion in merito.',
 'badtitle' => 'Titoło mia justo',
 'badtitletext' => "El titoło de ła pajina richiesta xè vodo, erà o con carateri no amesi opure el deriva da n'erore ne i cołegamenti tra siti wiki diversi o version en łengue diverse de ło steso sito.",
 'perfcached' => 'Sti dati vien tiradi fora da na copia "cache" del database e łi podarìa no esare ajornadi. Inte ła cache xe {{PLURAL:$1|disponibiłe un rixultado|xe disponibiłi $1 rixultadi}}.',
@@ -522,12 +531,13 @@ Query: $2',
 'viewsource-title' => 'Varda el testo de $1',
 'actionthrottled' => 'Asion ritardà',
 'actionthrottledtext' => "Come misura de sicuresa contro e o spam, l'esecusion de alcune asion e a xè limità a on numaro masimo de volte en on determinà periodo de tenpo, limite che en questo caso xè sta superà. Se prega de riprovare tra qualche minuto.",
-'protectedpagetext' => 'Sta pagina la xe stà proteta de modo che nissuni possa canbiarla.',
+'protectedpagetext' => 'Sta pàjina ła xe stà proteta de modo che nisun posa canbiarla o far altre operasion.',
 'viewsourcetext' => 'Se pole vardar e copiar el testo de sta pagina:',
 'viewyourtext' => "Xè posibile vedàre e copiare el codexe sorzente de le '''to modifighe''' a sta pajina:",
-'protectedinterface' => "Sta pagina la gà drento un testo de l'interfacia utente del software, quindi la xe proteta parché nissuni la strussia.",
-'editinginterface' => "'''Ocio:''' El testo de sta pajina el fa parte de l'interfacia utente del sito. Tute łe modifeghe aportae a sta pajina se riflete so i mesaji visuałizà par tuti i utenti.
-Par łe tradusion, considera ła posibiłità de usare [//translatewiki.net/wiki/Main_Page?setlang=vec translatewiki.net], el projeto MediaWiki par ła localizasion.",
+'protectedinterface' => "Sta pàjina ła gà drento un testo de l'interfacia utente del software de sto sito, quindi la xe proteta parché nisuni ła strusie.
+Par xontar o modifegar tradusion par tute łe wiki doparar [//translatewiki.net/ translatewiki.net], el projeto de locałixasion de MediaWiki.",
+'editinginterface' => "'''Ocio:''' El testo de sta pàjina el fa parte de l'interfacia utente del sito. Tute łe modifeghe aportae a sta pajina se riflete so i mesaji visuałixà par tuti i utenti so sta wiki.
+Par xontare o modifegar łe tradusion vałide so tute łe wiki, considera ła posibiłità de doparar [//translatewiki.net/wiki/Main_Page?setlang=vec translatewiki.net], el projeto MediaWiki par ła localixasion.",
 'sqlhidden' => '(ła query SQL ła xè sta sconta)',
 'cascadeprotected' => 'So sta pajina no xè posibiłe efetuare modifeghe parché xè sta inclusa {{PLURAL:$1|ne ła pajina indicà de seguito, che xè sta proteta|ne łe pajine indicae de seguito, che e xè sta protete}} sełesionando ła protesion "ricorsiva":
 $2',
@@ -543,6 +553,7 @@ L\'aministradore che ło ga blocà ga fornìo sta spiegasion: "$3".',
 'invalidtitle-knownnamespace' => 'Titoło no vałido co namespace "$2" e testo "$3"',
 'invalidtitle-unknownnamespace' => 'Titoło no vałido co namespace sconosùo "$1" e testo "$2"',
 'exception-nologin' => 'Acesso mia efetuà',
+'exception-nologin-text' => "Sta pàjina o asion ła richiede che te gapi efetuà 'l aceso so sta wiki.",
 
 # Virus scanner
 'virus-badscanner' => 'Erore de configurasion: antivirus sconossuo: "$1"',
@@ -555,12 +566,15 @@ L\'aministradore che ło ga blocà ga fornìo sta spiegasion: "$3".',
 Te poli 'ndar vanti doparando {{SITENAME}} come utente anonimo o se nò <span class='plainlinks'>[$1 entrar da novo]</span>, col stesso nome utente o uno difarente.
 Ocio che serte pagine podarìa èssar che ti 'e vedi come se te fussi 'ncora drento col to nome de prima, fin che no te neti la ''cache'' del to browser.",
 'welcomeuser' => 'Benvegnù, $1!',
+'welcomecreation-msg' => 'El to nome utente el xe stà creà.
+Nó desmentegarte de personałixare łe [[Special:Preferences|prefarense de {{SITENAME}}]].',
 'yourname' => 'Nome utente:',
 'yourpassword' => 'Password:',
 'yourpasswordagain' => 'De novo la password:',
 'remembermypassword' => 'Tiente in mente la password su sto conputer (par un massimo de $1 {{PLURAL:$1|zorno|zorni}})',
 'securelogin-stick-https' => 'Resta tacà par HTTPS dopo èssar entrà',
 'yourdomainname' => 'Spesifegare el dominio',
+'password-change-forbidden' => 'Nó xe posibiłe canbiar ła password so sta wiki.',
 'externaldberror' => "Se xè verifegà n'erore con el server de autenticasion esterno, opure no se dispone de łe autorizasion nesesarie par ajornare el proprio aceso esterno.",
 'login' => 'Entra',
 'nav-login-createaccount' => 'Entra / Regìstrete',
@@ -576,7 +590,7 @@ Ocio che serte pagine podarìa èssar che ti 'e vedi come se te fussi 'ncora dre
 'gotaccount' => "Sito zà iscrito? '''$1'''.",
 'gotaccountlink' => 'Entra',
 'userlogin-resetlink' => "Desmentegà i to dati d'aceso?",
-'createaccountmail' => 'Par e-mail',
+'createaccountmail' => 'Dopara na password caxuałe tenporanea e inviała al indiriso e-mail spesifegà cuà soto',
 'createaccountreason' => 'Motivassion:',
 'badretype' => 'Le do password le xe difarenti.',
 'userexists' => 'El nome utente inserido vien xa doparà da cualchedun altro.
@@ -641,6 +655,7 @@ Spèta un tocheto prima de proàr da novo.',
 # E-mail sending
 'php-mail-error-unknown' => "Erore sconosudo nte'l funsionamento deła posta ełetronega PHP",
 'user-mail-no-addy' => 'Te ghe provà spedire un mesajo de posta ełetronega sensa un indiriso.',
+'user-mail-no-body' => 'Tentà de inviar na e-mail có un testo vodo o masa curto.',
 
 # Change password dialog
 'resetpass' => 'Cànbia la password',
@@ -702,6 +717,7 @@ Password tenporanea: $2',
 'changeemail-oldemail' => 'Indiriso de posta ełetronega atuałe:',
 'changeemail-newemail' => 'Novo indiriso de posta ełetronega:',
 'changeemail-none' => '(nisun)',
+'changeemail-password' => 'Ła password so {{SITENAME}}:',
 'changeemail-submit' => 'Canbia indiriso de posta ełetronega',
 'changeemail-cancel' => 'Anuła',
 
@@ -800,16 +816,16 @@ o <span class="plainlinks">[{{fullurl:{{#Special:Log}}|page={{FULLPAGENAMEE}}}}
 'noarticletext-nopermission' => 'In sto momento no ghe xe nissun testo su sta pagina.
 Te pol [[Special:Search/{{PAGENAME}}|sercar sto titolo de pagina]] in altre pagine,
 o <span class="plainlinks">[{{fullurl:{{#Special:Log}}|page={{FULLPAGENAMEE}}}} sercar in tei registri ligà a sta pagina]</span>, ma no te ghè el parmesso de crear sta pagina.',
+'missing-revision' => 'Ła revixion #$1 de ła pàjina "{{PAGENAME}}" nó ła existe.',
 'userpage-userdoesnotexist' => 'L\'account "<nowiki>$1</nowiki>" no\'l corisponde mìa a un utente registrà. Verifica se te voli dal bon crear o modificar sta pagina.',
 'userpage-userdoesnotexist-view' => 'L\'utensa "$1" no la xe gnancora registrà.',
 'blocked-notice-logextract' => "Sto utente xè atualmente blocà.
 L'ultimo ełemento del rejistro de i blochi xè riportà de seguito par informasion:",
-'clearyourcache' => "Ocio: dopo aver salvà, połe darse che te gabi da netare ła cache del to browser par védar i canbiamenti.
+'clearyourcache' => "Ocio: dopo 'ver salvà, pol darse che te gabi da netare ła cache del to browser par védar i canbiamenti.
 *Par '''Firefox / Safari:''' tien macà el boton de łe majuscołe e schicia \"Recarga\", o senò maca ''Ctrl-F5'' o ''Ctrl-R'' (''⌘-R'' se te ghè el Mac)
-*Par '''Google Chrome''':schicia ''Ctrl-Shift-R'' (''⌘-Shift-R'' co' un Mac)
+*Par '''Google Chrome''':schicia ''Ctrl-Shift-R'' (''⌘-Shift-R'' có un Mac)
 *Par '''Internet Explorer''': tien schicià el boton \"Ctrl\" fin che te schici '''Recarga''', senò schicia '''Ctrl+F5'''
-*Par '''Konqueror''': schicia \"Recarga\" o maca ''F5'';
-*Par '''Opera:''' néta la cache in ''Strumenti → Preferense;''",
+*Par '''Opera:''' néta la cache in ''Strumenti → Prefarense;''",
 'usercssyoucanpreview' => "'''Sugerimento:''' se consiglia de doparar el boton \"{{int:showpreview}} par proàr i novi CSS prima de salvarli.",
 'userjsyoucanpreview' => "'''Sugerimento:''' se consiglia de doparar el boton \"{{int:showpreview}}\" par proàr i novi JavaScript prima de salvarli.",
 'usercsspreview' => "'''Sta qua la xe solo n'anteprima del proprio CSS personal.
@@ -821,7 +837,7 @@ Le modifiche no le xe gnancora stà salvà!'''",
 'updated' => '(Agiornà)',
 'note' => "'''Nota:'''",
 'previewnote' => "Sta cua ła xe soło n'anteprima; i canbiamenti a ła pajina NO i xe gnancora stà salvài!",
-'continue-editing' => 'Continua modifegare',
+'continue-editing' => "Va a l'area de modifega",
 'previewconflict' => 'Sta anteprima la corisponde al testo ne la casèla de edizion de sora, e la fa védar come vegnarà fora la pagina se te machi "Salva la pagina" in sto momento.',
 'session_fail_preview' => "No xè stà possibiłe salvar le to modifiche parché i dati de la session i xè andai persi.
 Par piaser, riproa da novo.
@@ -858,10 +874,10 @@ Sapi che te stè prometendo che te stè inserendo un testo scrito de to pugno, o
 '''NO STA INSERIR OPERE PROTETE DA COPYRIGHT SENSA PERMESSO!'''",
 'longpageerror' => "'''Erore: el testo invià xe grando {{PLURAL:$1|1|$1}} kilobyte, che xe de pì deła dimension masima consentìa de {{PLURAL:$2|1|$2}} kilobyte.'''
 El testo no połe esare salvà.",
-'readonlywarning' => "'''OCIO: El database el xe stà blocà par manutenzion, quindi no se pol salvar le modifiche in sto momento.
-Par no pèrdarle, te pol copiar tuto quel che te ghè inserìo fin desso ne la casela de modifica, incolarlo in un programa de elaborazion de testi e salvarlo, intanto che te speti che i sbloca el database.'''
+'readonlywarning' => "'''OCIO: El database el xe stà blocà par manutension, cuindi nó se pol salvar łe modifeghe in sto momento.'''
+Par nó pèrdarle, te pol copiar tuto chel che te ghè inserìo fin deso inte ła caxeła de modifega, incołarlo inte un programa de elaborasion de testi e salvarlo, intanto che te speti che i sbloca el database.
 
-L'aministrador che gà blocà el database el gà dato la seguente spiegassion: $1",
+L'aministrador che gà blocà el database el gà dato ła seguente spiegasion: $1",
 'protectedpagewarning' => "'''Ocio:''' Sta pajina ła xe sta proteta in maniera che soło i aministradori i posa canbiarla. Sta qua ła xe l'ultima operasion catà sul registro de ła pajina:",
 'semiprotectedpagewarning' => "'''Ocio:''' Sta pajina ła xe stà proteta in maniera che soło i utenti rexistrài i posa canbiarla. Sta qua ła xe l'ultima operasion catà sul registro de ła pajina:",
 'cascadeprotectedwarning' => "'''Ocio:''' Sta pajina ła xe stà proteta in maniera che soło i utenti co priviłegi de aministrador i posa canbiarla. Questo sucede parché ła pajina ła xe inclusa {{PLURAL:\$1|'nte ła pajina indicà de seguito, che ła xe stà proteta|ne le pagine indicà de seguito, che łe xe stae protete}} sełesionando ła protesion \"ricorsiva\":",
@@ -872,7 +888,6 @@ L'aministrador che gà blocà el database el gà dato la seguente spiegassion: $
 'template-protected' => '(proteto)',
 'template-semiprotected' => '(semiproteto)',
 'hiddencategories' => 'Sta pagina la xe drento a {{PLURAL:$1|na categoria sconta|$1 categorie sconte}}:',
-'nocreatetitle' => 'Creazion de le pagine limitada',
 'nocreatetext' => 'La possibilità de crear pagine nóve su {{SITENAME}} la xe stà limità ai soli utenti registrà. Se pol tornar indrìo e modificar na pagina esistente, opure [[Special:UserLogin|entrar o crear un nóvo acesso]].',
 'nocreate-loggedin' => 'No te ghè i permessi necessari a crear pagine nove.',
 'sectioneditnotsupported-title' => 'Modifica de sezion mia suportà',
@@ -896,6 +911,9 @@ Pararìa che la sìpia stà scancelà.',
 'edit-already-exists' => 'No se pol crear na pagina nova.
 La esiste de zà.',
 'defaultmessagetext' => 'Testo predefinìo',
+'content-failed-to-parse' => "Inposibiłe anałixare $2 pa'l modèl $1: $3",
+'invalid-content-data' => 'Dati contegnui nó vałidi',
+'content-not-allowed-here' => 'Contegnùo in "$1" nó consentio inte ła pàjina [[$2]]',
 
 # Content models
 'content-model-wikitext' => 'wikitesto',
@@ -923,6 +941,7 @@ Sti argomenti i xe stà omessi.",
 'expansion-depth-exceeded-warning' => 'Sta pajina ga superà el limite de profondità de espansion',
 'parser-unstrip-loop-warning' => 'Xe sta riłevà un ciclo de Unstrip',
 'parser-unstrip-recursion-limit' => 'Superadi i limiti de recursion de Unstrip ($1)',
+'converter-manual-rule-error' => 'Rilevà eror inte ła regoła manuałe de conversion de ła lèngua',
 
 # "Undo" feature
 'undo-success' => 'Sta modifica la pode èssar anulà. Verifica el confronto presentà de seguito par èssar sicuro che el contenuto el sia come te lo voli e quindi salva le modifiche par conpletar la procedura de anulamento.',
@@ -1052,9 +1071,11 @@ No ti gà acesso su de ela.',
 'revdelete-no-change' => "''Ocio:''' la version datà $1 a le $2 la gà zà le inpostassion de visibilità da ti richieste.",
 'revdelete-concurrent-change' => "No se riesse a modificar la version datà $1 a le $2: pararìa che qualchidun altro el gavesse canbià el stato de la version intanto che ti te sercavi de far la stessa roba. Daghe n'ociada sui registri.",
 'revdelete-only-restricted' => "Eròr sercando de scondar l'elemento datà $1 a le $2: no te podi inpedirghe ai aministradori de vardar na revision se no te selessioni al tenpo stesso una de le altre opzioni de restrizion.",
-'revdelete-reason-dropdown' => '*Motivassion pi comuni par la scancelassion
-** Violassion de copyright
-** Informassion personali inapropriàe',
+'revdelete-reason-dropdown' => '*Motivasion pi comuni par la scansełasion
+** Viołasion de copyright
+** Comenti o informasion personali inapropriàe
+** Nome utente inapropià
+** Informasion potensialmente difamatoria',
 'revdelete-otherreason' => 'Altro:',
 'revdelete-reasonotherlist' => 'Altra motivassion',
 'revdelete-edit-reasonlist' => 'Modifica le motivazion par la scancelazion',
@@ -1104,6 +1125,10 @@ Assicùrete che la continuità storica de la pagina no la vegna alterà.',
 'editundo' => 'tira indrìo',
 'diff-multi' => '({{PLURAL:$1|Una revision intermedia|$1 revision intermedie}} de {{PLURAL:$2|un utente|$2 utenti}} mia mostrà)',
 'diff-multi-manyusers' => '({{PLURAL:$1|Una revision intermedia|$1 revision intermedie}} de pi de {{PLURAL:$2|un utente|$2 utenti}} mia mostrà)',
+'difference-missing-revision' => "{{PLURAL:$2|Na version|$2 version}} de sta difarensa ($1) {{PLURAL:$2|nó ła xe sta trovà|nó łe xe stae trovae}}.
+
+Cuesto se verifega de sołito seguendo un ligamente vecio de un dif a na pàjina scansełà.
+I detaji i pol esar catai inte'l [{{fullurl:{{#Special:Log}}/delete|page={{FULLPAGENAMEE}}}} registro de łe scansełasion].",
 
 # Search results
 'searchresults' => 'Risultati de la riserca',
@@ -1190,11 +1215,12 @@ Prova a métarghe \"all:\" davanti al testo che te serchi par vardar in tuti i n
 'prefs-beta' => 'Funsionałidà beta',
 'prefs-datetime' => 'Data e ora',
 'prefs-labs' => 'Funsionałidà de i laboratori',
+'prefs-user-pages' => 'Pàjine utente',
 'prefs-personal' => 'Profiło utente',
 'prefs-rc' => 'Ultime modifeghe',
-'prefs-watchlist' => 'Tegnùi de òcio',
+'prefs-watchlist' => "Pàjine tegnùe d'ocio",
 'prefs-watchlist-days' => 'Nùmaro de giòrni da far védar nei osservati speciali:',
-'prefs-watchlist-days-max' => 'Masimo $1 ',
+'prefs-watchlist-days-max' => 'Masimo $1 {{PLURAL:$1|xorno|xorni}}',
 'prefs-watchlist-edits' => 'Nùmaro de modifiche da far védar con le funzion avanzade:',
 'prefs-watchlist-edits-max' => 'Numaro massimo: 1000',
 'prefs-watchlist-token' => "Segnal par le pagine tegnùe d'ocio:",
@@ -1239,7 +1265,7 @@ Prova a métarghe \"all:\" davanti al testo che te serchi par vardar in tuti i n
 'timezoneregion-indian' => 'Oceano Indian',
 'timezoneregion-pacific' => 'Oceano Pacifico',
 'allowemail' => 'Consenti la ricezion de e-mail da altri utenti<sup>1</sup>',
-'prefs-searchoptions' => 'Opsioni de riserca',
+'prefs-searchoptions' => 'Riserca',
 'prefs-namespaces' => 'Namespace',
 'defaultns' => 'Serca in sti namespace se no diversamente specificà:',
 'default' => 'predefinìo',
@@ -1252,9 +1278,9 @@ Sta operassion no la pol èssar anulà.',
 'prefs-emailconfirm-label' => "Conferma de l'e-mail:",
 'prefs-textboxsize' => 'Dimension de la casèla de modifica',
 'youremail' => 'La to e-mail',
-'username' => 'Nome utente',
-'uid' => 'ID utente:',
-'prefs-memberingroups' => 'Menbro {{PLURAL:$1|del grupo|dei grupi}}:',
+'username' => '{{GENDER:$1|Nome utente}}:',
+'uid' => '{{GENDER:$1|ID utente}}:',
+'prefs-memberingroups' => '{{GENDER:$2|Menbro}} {{PLURAL:$1|del grupo|de i grupi}}:',
 'prefs-registration' => 'Data de registrassion:',
 'yourrealname' => 'El to vero nome:',
 'yourlanguage' => 'Lengua:',
@@ -1366,6 +1392,7 @@ Co qualcheduni te scrivarà, nol vedarà mia el to indirizo.',
 'right-writeapi' => "Doparar l'API par la modifica de la wiki",
 'right-delete' => 'Scancela pagine',
 'right-bigdelete' => 'Scancela pagine con cronologie longhe',
+'right-deletelogentry' => 'Scanseła e ripristina voxe de registrio spesifeghe',
 'right-deleterevision' => 'Scondi version specifiche de le pagine',
 'right-deletedhistory' => 'Varda i record scancelà de la cronologia, ma sensa el testo associà a lori',
 'right-deletedtext' => 'Vardar el testo scancelà e i canbiamenti tra dele revision scancelà',
@@ -1402,12 +1429,13 @@ Co qualcheduni te scrivarà, nol vedarà mia el to indirizo.',
 'right-sendemail' => 'Mandarghe e-mail a cheialtri utenti',
 'right-passwordreset' => 'Vedi i mesaji de rinpostasion de ła password',
 
+# Special:Log/newusers
+'newuserlogpage' => 'Novi utenti',
+'newuserlogpagetext' => 'Sto qua el xè el registro dei novi utenti registrai.',
+
 # User rights log
 'rightslog' => 'Diriti de i utenti',
 'rightslogtext' => 'Sto qua el xe el registro de le modifiche ai diriti assegnà ai utenti.',
-'rightslogentry' => "gà modificà l'apartenenza de $1 dal grupo $2 al grupo $3",
-'rightslogentry-autopromote' => 'xe stà automategamente promoso/a da $2 a $3',
-'rightsnone' => '(nissun)',
 
 # Associated actions - in the sentence "You do not have permission to X"
 'action-read' => 'lèxar sta pàxena',
@@ -1476,7 +1504,7 @@ Co qualcheduni te scrivarà, nol vedarà mia el to indirizo.',
 'number_of_watching_users_pageview' => '[osservà da {{PLURAL:$1|un utente|$1 utenti}}]',
 'rc_categories' => 'Limita a le categorie (separà da "|")',
 'rc_categories_any' => 'Qualsiasi',
-'rc-change-size-new' => '$1 byte dopo ła modifega',
+'rc-change-size-new' => '$1 {{PLURAL:$|byte}} dopo ła modifega',
 'newsectionsummary' => '/* $1 */ sezion nova',
 'rc-enhanced-expand' => 'Mostra detaji (richiede JavaScript)',
 'rc-enhanced-hide' => 'Scondi detaji',
@@ -1548,7 +1576,7 @@ Varda la [[Special:NewFiles|galerìa dei file nóvi]] par na vision de insieme.'
 'hookaborted' => 'La modifica che te voli fare la xe stà interota da un hook de na estension.',
 'illegal-filename' => 'El nome del file no xe parmesso.',
 'overwrite' => 'No xe parmesso de sorascrìvar un file esistente.',
-'unknown-error' => 'Se gà verifica un eror sconossùo.',
+'unknown-error' => 'Se gà verifegà un eror sconosùo.',
 'tmp-create-error' => 'Inpussibile creare el file tenporaneo.',
 'tmp-write-error' => 'Eror de scritura del file temporaneo.',
 'large-file' => 'Se racomanda de no superar mìa le dimension de $1 par ciascun file; sto file el xe grando $2.',
@@ -1631,6 +1659,7 @@ Se el problema el persiste, contatar un [[Special:ListUsers/sysop|aministrador]]
 'backend-fail-notsame' => 'Existe xà un file no identico a  $1 .',
 'backend-fail-invalidpath' => '$1 no xe un percorso de archiviasion vałido.',
 'backend-fail-delete' => 'Inposibiłe scançełare el file "$1".',
+'backend-fail-describe' => 'Inposibiłe modifegar i metadati del file "$1".',
 'backend-fail-alreadyexists' => 'El file $1 existe xà.',
 'backend-fail-store' => 'Inposibiłe memorixare el file  $1  in  $2 .',
 'backend-fail-copy' => 'Inposibiłe copiare el file "$1" in "$2".',
@@ -1645,12 +1674,48 @@ Se el problema el persiste, contatar un [[Special:ListUsers/sysop|aministrador]]
 'backend-fail-synced' => 'El file "$1" xe incoerente rento i backend de ła memoria interna.',
 'backend-fail-connect' => 'Inposibiłe conétarse al backend de memoria "$1".',
 'backend-fail-internal' => 'Se ga verifegà on erore sconosùo nte\'l backend de memoria "$1".',
-'backend-fail-usable' => 'Inposibiłe modifegare el file $1 a cauxa de autorixasion insuficenti o directory mancanti.',
+'backend-fail-contenttype' => 'Inposibiłe determinar ła tipołoxia del file da archiviar in "$1".',
+'backend-fail-batchsize' => 'El backend de memoria el ga programà na serie de $1 {{PLURAL:$1|operasion}} su file; el limite el xe de $2 {{PLURAL:$2|operasion}}.',
+'backend-fail-usable' => 'Inposibiłe lexare o scrivare el file $1 a cauxa de autorixasion insuficenti o directory/contenidori mancanti.',
+
+# File journal errors
+'filejournal-fail-dbconnect' => 'Inposibiłe coneterse al database journal par l\'archiviasion back-end "$1".',
+'filejournal-fail-dbquery' => 'Inposibiłe axornar el database journal par l\'archiviasion back-end "$1".',
+
+# Lock manager
+'lockmanager-notlocked' => 'Inposibiłe sblocar "$1"; nó \'l xe blocà.',
+'lockmanager-fail-closelock' => 'Nó riusia ła sarada del file de bloco par "$1".',
+'lockmanager-fail-deletelock' => 'Nó riusia ła scansełasion del file de bloco par "$1".',
+'lockmanager-fail-acquirelock' => 'Nó riusia acuixision bloco par "$1".',
+'lockmanager-fail-openlock' => 'Nó riusia l\'apertura del file de bloco par "$1".',
+'lockmanager-fail-releaselock' => 'Nó riusio rełaso del bloco par "$1".',
+'lockmanager-fail-db-bucket' => "Inposibiłe contatar i necesari database de bloco inte'l bucket $1.",
+'lockmanager-fail-db-release' => "Inposibiłe revocar i blochi so'l database $1.",
+'lockmanager-fail-svr-acquire' => "Inposibiłe acuixir blochi so'l server $1.",
+'lockmanager-fail-svr-release' => "Inposibiłe revocar i blochi so'l server $1.",
+
+# ZipDirectoryReader
+'zip-file-open-error' => "S'à verifegà un eror co se jera drio verxare el file pa' i controłi ZIP.",
+'zip-wrong-format' => "El file spesifegà no'l xe un file ZIP.",
+'zip-bad' => "El file el xe un file ZIP coroto o ilexibiłe.
+Nó 'l pol esar controłà par sicuresa.",
+'zip-unsupported' => "El file el xe un file ZIP che'l dopara carateristeghe ZIP nó suportae da MediaWiki.
+Nó 'l pol esar controła par sicuresa.",
+
+# Special:UploadStash
+'uploadstash' => 'Carga stash',
+'uploadstash-summary' => "Sta pàjina ła consente 'l aceso a i file che xe sta cargai (o i xe in faxe de cargamento) ma che nó xe stai ncora pùbicai so ła wiki. Sti file i xe vixibiłi soło che al utente che i ga cargai.",
+'uploadstash-clear' => 'Elimina i file in stash',
+'uploadstash-nofiles' => 'Nó te ghe file in stash.',
+'uploadstash-badtoken' => 'Sta asion nó ła ga vuo suceso, forsi parché łe to credeniałi de modifega łe xe scadue. Prova ncora.',
+'uploadstash-errclear' => 'Ła scansełasion de i file nó ła ga vù suceso.',
+'uploadstash-refresh' => "Axorna 'l elenco de i file",
+'invalid-chunk-offset' => 'Offset de ła parte nó vałido',
 
 # img_auth script messages
 'img-auth-accessdenied' => 'Acesso negà',
 'img-auth-nopathinfo' => "Manca el PATH_INFO.
-El to server no'l xe mia configurà par passar sta informassion.
+El to server no'l xe mia configurà par pasar sta informasion.
 Magari el xe basà su CGI e no'l suporta img_auth.
 Varda https://www.mediawiki.org/wiki/Manual:Image_Authorization.",
 'img-auth-notindir' => "El percorso richiesto no'l se cata in te la cartèla de caricamento configurà.",
@@ -1727,17 +1792,23 @@ De seguito xe elencà solo {{PLURAL:$1|la prima pagina che ponta|le prime $1 pag
 Se pode védar un [[Special:WhatLinksHere/$2|elenco par intiero]].',
 'nolinkstoimage' => 'Nissuna pàxena la punta a sto file.',
 'morelinkstoimage' => 'Varda i [[Special:WhatLinksHere/$1|altri colegamenti]] verso sto file.',
+'linkstoimage-redirect' => '$1 (rimando file) $2',
 'duplicatesoffile' => '{{PLURAL:$1|El file seguente el xe un dopion|I $1 file seguenti i xe dei dopioni}} de sto file ([[Special:FileDuplicateSearch/$2|ulteriori detagli]]):',
 'sharedupload' => 'Sto file el vien da $1 e se pole dopararlo anca su altri progeti.',
 'sharedupload-desc-there' => 'Sto file el vien da $1 e se pode dopararlo su altri projeti.
 Consulta la [$2 pàxena de descrission del file] par ulteriori informassion.',
 'sharedupload-desc-here' => 'Sto file el vien da $1 e se pode dopararlo su altri projeti.
 Qua soto vien mostrà la descrission presente in te la [$2 pàxena de descrission del file].',
+'sharedupload-desc-edit' => "Sto file el vien da $1 e 'l pol esar doparà da altri projeti.
+Probabilmente te vui modifegar ła descrision prexente inte ła [$2 pàjina de descrision del file].",
+'sharedupload-desc-create' => "Sto file el vien da $1 e 'l pol esar doparà da altri projeti.
+Probabilmente te vui modifegar ła descrision prexente inte ła [$2 pàjina de descrision del file].",
 'filepage-nofile' => 'No ghe xe nissun file co sto nome.',
 'filepage-nofile-link' => 'NO ghe xe un file co sto nome, ma te podi [$1 cargarlo su].',
 'uploadnewversion-linktext' => 'Carga na nova version de sto file',
 'shared-repo-from' => 'da $1',
 'shared-repo' => 'un archivio condiviso',
+'upload-disallowed-here' => 'Inposibiłe sovrascrivere sto file.',
 
 # File reversion
 'filerevert' => 'Ripristina $1',
@@ -1767,6 +1838,7 @@ Qua soto vien mostrà la descrission presente in te la [$2 pàxena de descrissio
 ** File duplicà',
 'filedelete-edit-reasonlist' => 'Modifica le motivazion par la scancelazion',
 'filedelete-maintenance' => 'La scancelassion e el riprìstino dei file i xe disabilità par un tocheto par manutension.',
+'filedelete-maintenance-title' => 'Inposibiłe scansełar el file.',
 
 # MIME search
 'mimesearch' => 'Serca in base al tipo MIME',
@@ -1816,14 +1888,16 @@ Qua soto vien mostrà la descrission presente in te la [$2 pàxena de descrissio
 
 'disambiguations' => 'Pajine cołegade a pajine de dixanbiguasion',
 'disambiguationspage' => 'Template:Disambigua',
-'disambiguations-text' => "Le pagine ne la lista che segue le contien dei colegamenti a '''pagine de disanbiguazion''' e no a l'argomento a cui le dovarìà far riferimento.<br />
-Vien considerà pagine de disanbiguazion tute quele che contien i modèi elencà in [[MediaWiki:Disambiguationspage]]",
+'disambiguations-text' => "Łe pàjine inte ła lista cuà soto łe ga drento almanco un ligamento a na '''pàjina de dixanbiguasion'''.
+Łe podaria dover puntar a na pàjina pì apropià.<br />
+Vien considerae pàjine de dixanbiguasion tute cuełe che łe ga drento i modełi elencai in [[MediaWiki:Disambiguationspage]].",
 
 'doubleredirects' => 'Redirect dopi',
 'doubleredirectstext' => 'Sta pagina le elenca pagine che rimanda a altre pagine de rimando.
 Ogni riga la contien dei colegamenti al primo e al secondo rimando, oltre a la destinassion del secondo rimando, che de solito la xe la "vera" pagina de destinassion, a cui dovarìa pontar el primo rimando.
 Le righe <del>sbarà</del> le xe xà stà sistemà.',
 'double-redirect-fixed-move' => '[[$1]] xe stà spostà, desso el xe solo un rimando a [[$2]]',
+'double-redirect-fixed-maintenance' => 'Coreto dopio rimando da [[$1]] a [[$2]].',
 'double-redirect-fixer' => 'Coretòr de redirect',
 
 'brokenredirects' => 'Redirect mìa giusti',
@@ -1841,6 +1915,7 @@ Le righe <del>sbarà</del> le xe xà stà sistemà.',
 # Miscellaneous special pages
 'nbytes' => '$1 {{PLURAL:$1|byte|byte}}',
 'ncategories' => '$1 {{PLURAL:$1|categoria|categorie}}',
+'ninterwikis' => '$1 {{PLURAL:$1|interwiki}}',
 'nlinks' => '$1 {{PLURAL:$1|colegamento|colegamenti}}',
 'nmembers' => '$1 {{PLURAL:$1|elemento|elementi}}',
 'nrevisions' => '$1 {{PLURAL:$1|revision|revision}}',
@@ -1861,14 +1936,18 @@ Le righe <del>sbarà</del> le xe xà stà sistemà.',
 'wantedpages' => 'Pagine pì domandà',
 'wantedpages-badtitle' => 'Titolo mia valido nel grupo de risultati: $1',
 'wantedfiles' => 'File domandà',
+'wantedfiletext-cat' => 'I seguenti file i xe riciamai da wikilink, ma nó i existe. I file ospitai so repository esterni i podaria esar elencai anca se de fato existenti. Sti falsi poxitivi i sarà <del>sbarai</del>. Łe pàjine che incorpora i file che nó existe łe xe elencae in [[:$1]].',
+'wantedfiletext-nocat' => 'I seguenti file i xe riciamai da wikilink, ma nó i existe. I file ospitai so repository esterni i podaria esar elencai anca se de fato existenti. Sti falsi poxitivi i sarà <del>sbarai</del>.',
 'wantedtemplates' => 'Modèi domandà',
 'mostlinked' => 'Pagine piassè puntà',
 'mostlinkedcategories' => 'Categorie piassè riciamae',
 'mostlinkedtemplates' => 'Modèi piassè doparà',
 'mostcategories' => 'Pagine con piassè categorie',
 'mostimages' => 'File piassè riciamà',
+'mostinterwikis' => 'Pàjine có pì interwiki',
 'mostrevisions' => 'Pagine con piassè revisión',
 'prefixindex' => 'Tute le pagine che taca con...',
+'prefixindex-namespace' => "Tute łe pàjine có 'l prefiso del namespace $1",
 'shortpages' => 'Pagine curte',
 'longpages' => 'Pagine longhe',
 'deadendpages' => 'Pagine sensa uscita',
@@ -1901,6 +1980,7 @@ Par piaser tien conto che altri siti web i podarìa realizar colegamenti ai file
 'pager-newer-n' => '{{PLURAL:$1|quel pi novo|i $1 pi novi}}',
 'pager-older-n' => '{{PLURAL:$1|quel pi vecio|i $1 pi vèci}}',
 'suppress' => 'Supervision',
+'querypage-disabled' => 'Sta pàjina speciałe ła xe dixativà par motivi de prestasion.',
 
 # Book sources
 'booksources' => 'Fonti librarie',
@@ -1918,6 +1998,7 @@ Par piaser tien conto che altri siti web i podarìa realizar colegamenti ai file
 Te podi restrénzar i criteri de riçerca selezionando el tipo de registro, el nome utente, o la pàxena interessà (ocio che sti ultimi du i distingue tra majuscolo e minuscolo).',
 'logempty' => "El registro no'l contien mìa elementi corispondenti a la riçerca.",
 'log-title-wildcard' => 'Riçerca dei titoli che scuminsia con',
+'showhideselectedlogentries' => 'Mostra/scondi łe voxe de registro sełesionae',
 
 # Special:AllPages
 'allpages' => 'Tute le pagine',
@@ -1938,6 +2019,8 @@ Te podi restrénzar i criteri de riçerca selezionando el tipo de registro, el n
 'allpages-hide-redirects' => 'Scondi rimandi',
 
 # SpecialCachedPage
+'cachedspecial-viewing-cached-ttl' => 'Te si drio vardar na version de sta pàjina memorixà inte ła cache, che ła pol esar vecia al masimo de $1.',
+'cachedspecial-viewing-cached-ts' => 'Te si drio vardar na version de sta pàjina memorixà inte ła cache, che ła podaria nó esar conpletamente axornà.',
 'cachedspecial-refresh-now' => "Varda l'ultima.",
 
 # Special:Categories
@@ -1959,9 +2042,9 @@ Varda anca le [[Special:WantedCategories|categorie domandà]].',
 'linksearch-pat' => 'Espression de riserca:',
 'linksearch-ns' => 'Namespace:',
 'linksearch-ok' => 'Serca',
-'linksearch-text' => 'Xe posibiłe doparare metacarateri, come "*.wikipedia.org".<br />
-Xe necesario almanco un dominio de primo liveło, tipo "*.org".<br />
-Protocołi suportadi: <code>$1</code> (no sta xontare nesuno de sti cuà inte ła to riçerca).',
+'linksearch-text' => 'Xe posibiłe doparare metacarateri, come "*.wikipedia.org".
+Xe nesesario almanco un dominio de primo liveło, tipo "*.org".<br />
+{{PLURAL:$2|Protocoło suportà|Protocołi suportai}}: <code>$1</code> (predefinio http:// se nisun protocoło el xe spesifegà).',
 'linksearch-line' => '$1 presente ne la pagina $2',
 'linksearch-error' => "I metacaràteri i pode vegner doparài solo a l'inizio del nome de l'host.",
 
@@ -1974,16 +2057,12 @@ Protocołi suportadi: <code>$1</code> (no sta xontare nesuno de sti cuà inte ł
 # Special:ActiveUsers
 'activeusers' => 'Lista dei utenti ativi',
 'activeusers-intro' => 'Sta qua xe la lista dei utenti che ga fato calcossa {{PLURAL:$1|sto ultimo zorno|sti ultimi $1 zorni}}.',
-'activeusers-count' => "$1 {{PLURAL:$1|canbiamento|canbiamenti}} {{PLURAL:$3|ne l'ultimo zorno|in tei ultimi $3 zorni}}",
+'activeusers-count' => "$1 {{PLURAL:$1|asion}} {{PLURAL:$3|inte'l ultimo xorno|inte i ultimi $3 xorni}}",
 'activeusers-from' => 'Fà védar i utenti a partir da:',
 'activeusers-hidebots' => 'Scondi i bot',
 'activeusers-hidesysops' => 'Scondi i aministradori',
 'activeusers-noresult' => 'Nissun utente catà.',
 
-# Special:Log/newusers
-'newuserlogpage' => 'Novi utenti',
-'newuserlogpagetext' => 'Sto qua el xè el registro dei novi utenti registrai.',
-
 # Special:ListGroupRights
 'listgrouprights' => 'Diriti dei grupi utenti',
 'listgrouprights-summary' => 'Sta qua la xe na lista dei grupi de utenti definìi su sta wiki, coi diriti asocià a ognuno.
@@ -1994,14 +2073,14 @@ Se pol consultar anca dele altre [[{{MediaWiki:Listgrouprights-helppage}}|inform
 'listgrouprights-rights' => 'Diriti',
 'listgrouprights-helppage' => 'Help:Diriti dei grupi',
 'listgrouprights-members' => '(Elenco de i menbri)',
-'listgrouprights-addgroup' => 'Pode zontar {{PLURAL:$2|al grupo|ai grupi}}: $1',
-'listgrouprights-removegroup' => 'Pode cavar {{PLURAL:$2|dal grupo|dai grupi}}: $1',
-'listgrouprights-addgroup-all' => 'Pode zontar tuti i grupi',
-'listgrouprights-removegroup-all' => 'Pode cavar tuti i grupi',
-'listgrouprights-addgroup-self' => 'Poder zontar la propria utensa in {{PLURAL:$2|te un grupo|più grupi}}: $1',
-'listgrouprights-removegroup-self' => 'Poder cavar la propria utensa da {{PLURAL:$2|un grupo|dei grupi}}: $1',
-'listgrouprights-addgroup-self-all' => 'Pode zontar la propria utensa in tuti i grupi',
-'listgrouprights-removegroup-self-all' => 'Pode cavar la propria utensa da tuti i grupi',
+'listgrouprights-addgroup' => 'Pol xontar {{PLURAL:$2|al grupo|ai grupi}}: $1',
+'listgrouprights-removegroup' => 'Pol cavar {{PLURAL:$2|dal grupo|dai grupi}}: $1',
+'listgrouprights-addgroup-all' => 'Pol xontar a tuti i grupi',
+'listgrouprights-removegroup-all' => 'Pol cavar da tuti i grupi',
+'listgrouprights-addgroup-self' => 'Pol xontarse {{PLURAL:$2|al grupo|ai grupi}}: $1',
+'listgrouprights-removegroup-self' => 'Pol cavarse da {{PLURAL:$2|un grupo|dei grupi}}: $1',
+'listgrouprights-addgroup-self-all' => 'Pol xontarse a tuti i grupi',
+'listgrouprights-removegroup-self-all' => 'Pol cavarse da tuti i grupi',
 
 # E-mail user
 'mailnologin' => 'Nissun indirizo a cui mandarghe el messagio',
@@ -2010,16 +2089,18 @@ Se pol consultar anca dele altre [[{{MediaWiki:Listgrouprights-helppage}}|inform
 'emailuser-title-target' => 'Scrivi na e-mail a {{GENDER:$1|sto|sta}} utente',
 'emailuser-title-notarget' => "Scrivi na e-mail a l'utente",
 'emailpage' => "Scrivi na e-mail a l'utente",
-'emailpagetext' => 'Te podi usar el modulo chi soto par mandare na e-mail a sto utente.
-La e-mail che te ghè indicà ne le [[Special:Preferences|to preferense]] la vegnarà fora nel canpo "Da" de la mail, così che el destinatario el possa rispóndarte a ti diretamente.',
+'emailpagetext' => 'Te podi usar el moduło chi soto par mandare na e-mail a sto {{GENDER:$1|utente}}.
+Ła e-mail che te ghè indicà inte łe [[Special:Preferences|to prefarense]] ła vegnarà fora inte\'l canpo "Da" de la mail, cusì che\'l destinatario el posa rispóndarte diretamente a ti.',
 'usermailererror' => "L'ogeto mail el gà restituìo l'eror:",
-'defemailsubject' => 'Messagio da {{SITENAME}}',
+'defemailsubject' => 'Mesajo da {{SITENAME}} dal utente "$1"',
 'usermaildisabled' => 'e-mail utente disabiłità',
 'usermaildisabledtext' => 'No xè posibiłe inviare e-mail ad altri utenti so sto wiki',
 'noemailtitle' => 'Nissun indirisso e-mail',
 'noemailtext' => "Sto utente no'l gà indicà nissuna casela e-mail valida.",
 'nowikiemailtitle' => 'Posta elétronega mia parmessa',
 'nowikiemailtext' => 'Sto utente el ga sielto de no ricévar e-mail da i altri utenti.',
+'emailnotarget' => 'Nome utente del destinatario inexistente o nó vałido.',
+'emailtarget' => 'Inserisi el nome utente del destinatario',
 'emailusername' => 'Nome utente:',
 'emailusernamesubmit' => 'Manda',
 'email-legend' => "Màndeghe na e-mail a n'altro utente de {{SITENAME}}",
@@ -2039,16 +2120,17 @@ La e-mail che te ghè indicà ne le [[Special:Preferences|to preferense]] la veg
 'usermessage-editor' => 'Messagero de sistema',
 
 # Watchlist
-'watchlist' => "Pagine tegnùe d'ocio",
-'mywatchlist' => "Pagine tegnùe d'ocio",
+'watchlist' => "Pàjine tegnùe d'ocio",
+'mywatchlist' => "Pàjine tegnùe d'ocio",
 'watchlistfor2' => 'De $1 $2',
 'nowatchlist' => "No te ghè indicà pagine da tegner d'ocio.",
 'watchlistanontext' => "Per vardar e modifegar l'ełenco de i osservati speciałi bisogna $1.",
 'watchnologin' => 'Acesso mia efetuà',
 'watchnologintext' => 'Te ghè prima da far el [[Special:UserLogin|login]] par modificar la to lista de osservati speciali.',
 'addwatch' => "Tien d'ocio",
-'addedwatchtext' => "La pagina \"[[:\$1]]\" la xe stà zontà a la to [[Special:Watchlist|lista de pagine da tegner d'ocio]].
-I futuri canbiamenti a sta pagina e a la so pagina de discussion i se vedarà fora qua, e la pagina la se vedarà in '''grosso''' sui [[Special:RecentChanges|ultimi canbiamenti]] par tegnerla d'ocio mejo.",
+'addedwatchtext' => 'Ła pagina "[[:$1]]" ła xe stà xontà a ła to [[Special:Watchlist|lista de pàjine da tegner d\'ocio]].
+I futuri canbiamenti a sta pàjina e a ła so pàjina de discusion i vegnarà elencai in cheła pàjina là.',
+'removewatch' => "Cava da łe tegnùe d'ocio",
 'removedwatchtext' => 'La pagina "[[:$1]]" la xe stà cavà da le to [[Special:Watchlist|pagine tegnùe de ocio]].',
 'watch' => "Tien d'ocio",
 'watchthispage' => "Tien d'ocio sta pagina",
@@ -2064,46 +2146,59 @@ I futuri canbiamenti a sta pagina e a la so pagina de discussion i se vedarà fo
 'watchmethod-list' => 'controło de i osservati speciałi par modifeghe recenti',
 'watchlistcontains' => 'La lista de i osservati speciałi la contien {{PLURAL:$1|una pagina|$1 pagine}}.',
 'iteminvalidname' => "Problemi con la voxe '$1', nome mìa vałido...",
-'wlnote' => "Qua soto te cati {{PLURAL:$1|l'ultimo canbiamento|i ultimi '''$1''' canbiamenti}} ne {{PLURAL:$2|l'ultima ora|le ultime '''$2''' ore}}.",
+'wlnote' => "Cuà soto te cati {{PLURAL:$1|'l ultimo canbiamento|i ultimi '''$1''' canbiamenti}} inte {{PLURAL:$2|l'ultema ora|łe ultime '''$2''' ore}}; i dati i xe axornai a łe $4 del $3.",
 'wlshowlast' => 'Mostra le ultime $1 ore $2 zorni $3',
 'watchlist-options' => "Inpostassion de le pagine tegnùe d'ocio",
 
 # Displayed when you click the "watch" button and it is in the process of watching
 'watching' => "Taco a tegner d'ocio...",
 'unwatching' => "Desmeto de tegner d'ocio...",
+'watcherrortext' => 'S\'à verifegà un eror durante ła modifega de łe tegnùe d\'ocio par "$1".',
 
 'enotif_mailer' => 'Sistema de notifica via e-mail de {{SITENAME}}',
 'enotif_reset' => 'Segna tute le pagine come zà viste',
 'enotif_impersonal_salutation' => 'Utente de {{SITENAME}}',
+'enotif_subject_deleted' => 'Ła pàjina $1 de {{SITENAME}} ła xe sta scansełà da {{gender:$2|$2}}',
+'enotif_subject_created' => 'Ła pàjina $1 de {{SITENAME}} ła xe sta creà da {{gender:$2|$2}}',
+'enotif_subject_moved' => 'Ła pàjina $1 de {{SITENAME}} ła xe sta spostà da {{gender:$2|$2}}',
+'enotif_subject_restored' => 'Ła pàjina $1 de {{SITENAME}} ła xe sta ripristinà da {{gender:$2|$2}}',
+'enotif_subject_changed' => 'Ła pàjina $1 de {{SITENAME}} ła xe sta canbià da {{gender:$2|$2}}',
+'enotif_body_intro_deleted' => 'Ła pàjina $1 de {{SITENAME}} ła xe sta scansełà da {{gender:$2|$2}} el $PAGEEDITDATE (varda $3 par ła version atuałe).',
+'enotif_body_intro_created' => 'Ła pàjina $1 de {{SITENAME}} ła xe sta creà da {{gender:$2|$2}} el $PAGEEDITDATE (varda $3 par ła version atuałe).',
+'enotif_body_intro_moved' => 'Ła pàjina $1 de {{SITENAME}} ła xe sta spostà da {{gender:$2|$2}} el $PAGEEDITDATE (varda $3 par ła version atuałe).',
+'enotif_body_intro_restored' => 'Ła pàjina $1 de {{SITENAME}} ła xe sta ripristinà da {{gender:$2|$2}} el $PAGEEDITDATE (varda $3 par ła version atuałe).',
+'enotif_body_intro_changed' => 'Ła pàjina $1 de {{SITENAME}} ła xe sta canbià da {{gender:$2|$2}} el $PAGEEDITDATE (varda $3 par ła version atuałe).',
 'enotif_lastvisited' => 'Varda $1 par tute le modifiche da la to ultima visita.',
 'enotif_lastdiff' => 'Varda $1 par visualizar la modifica.',
 'enotif_anon_editor' => 'utente anonimo $1',
 'enotif_body' => 'Caro/a $WATCHINGUSERNAME,
 
-ła pàxena $PAGETITLE de {{SITENAME}} la xè stà $CHANGEDORCREATED el $PAGEEDITDATE da $PAGEEDITOR, varda $PAGETITLE_URL par ła version atuałe.
-
-$NEWPAGE
+$PAGEINTRO $NEWPAGE
 
-Somario del redator: $PAGESUMMARY $PAGEMINOREDIT
+Ogeto del intervento, inserio dal autor: $PAGESUMMARY $PAGEMINOREDIT
 
-Contatta el redator:
-mail: $PAGEEDITOR_EMAIL
-wiki: $PAGEEDITOR_WIKI
+Contata l\'autor:
+via posta eletronega: $PAGEEDITOR_EMAIL
+so\'l sito: $PAGEEDITOR_WIKI
 
-No ghe sarà altre notifiche in caso de ulteriori canbiamenti, a manco che ti no te visiti sta pàxena.
-Te podi anca reinpostar l\'avixo de notifica par tuti i osservati speciałi de ła to łista.
+Nó vegnarà inviae altre notifeghe in caxo de ulteriori atività, se nó te vixiti ła pàjina. Inoltre, xe posibiłe modifegar łe inpostasion de notifega par tute łe pàjine inte ła lista de łe tegnùe d\'ocio.
 
-             El to amichevole sistema de notifica de {{SITENAME}}
+             El sistema de notifega de {{SITENAME}}, al to servisio
 
 --
-Par canbiar łe inpostassion de i to osservati speciałi, visita
-{{canonicalurl:Special:Watchlist/edit}}
+Par modifegar łe inpostasion de łe notifeghe via posta eletronega, varda 
+{{canonicalurl:{{#special:Preferences}}}}
 
-Par cavar la pagina da i to osservati speciałi, visita
+Par modifegar ła lista de łe tegnùe d\'ocio, varda 
+{{canonicalurl:{{#special:EditWatchlist}}}}
+
+Par cavar ła pàjina da ła lista de łe tegnùe d\'ocio, varda
 $UNWATCHURL
 
-Par riscontri e ulteriore assistensa:
+Par comentare e risevere ajuto:
 {{canonicalurl:{{MediaWiki:Helppage}}}}',
+'created' => 'creà',
+'changed' => 'canbià',
 
 # Delete
 'deletepage' => 'Scancela pagina',
@@ -2139,6 +2234,8 @@ Varda $2 par n'elenco de le ultime pagine scanselà.",
 'rollback' => 'Anuła łe modifighe',
 'rollback_short' => 'Rollback',
 'rollbacklink' => 'tira indrìo i canbiamenti',
+'rollbacklinkcount' => 'rollback de {{PLURAL:$1|na modifega|$1 modifeghe}}',
+'rollbacklinkcount-morethan' => 'rollback de pì de {{PLURAL:$1|na modifega|$1 modifeghe}}',
 'rollbackfailed' => 'Ripristino mìa riussìo',
 'cantrollback' => "No xè mia possibiłe tornar a na versión precedente: l'ultima modifica la xè stà aportà da l'unico utente che gà laorà a sto articoło.",
 'alreadyrolled' => "No xè mia possibile efetuar el ripristino de [[:$1]] da [[User:$2|$2]] ([[User talk:$2|discussion]]{{int:pipe-separator}}[[Special:Contributions/$2|{{int:contribslink}}]]); qualcun altro gà xà modificà o efetuà el ripristino de sta voxe.
@@ -2164,6 +2261,10 @@ Vedi ła [[Special:ProtectedPages|lista dełe pajine protete]] pa l'elenco de ł
 'protect-title' => 'Canbia el livèl de protezion par "$1"',
 'protect-title-notallowed' => 'Varda el livelo de protesion de " $1 "',
 'prot_1movedto2' => '[[$1]] spostà a [[$2]]',
+'protect-badnamespace-title' => 'Namespace nò protexibiłe',
+'protect-badnamespace-text' => 'Łe pàjine in sto namespace nò łe pol esar protete.',
+'protect-norestrictiontypes-text' => 'Sta pàjina nò ła pol esar proteta parché nò ghe xe gnaun tipo de restrision disponibiłe.',
+'protect-norestrictiontypes-title' => 'Pàjina nò protexibiłe',
 'protect-legend' => 'Conferma la protezion',
 'protectcomment' => 'Motivassion:',
 'protectexpiry' => 'Scadensa:',
@@ -2178,11 +2279,12 @@ Le inpostazion corenti par la pagina le xe '''$1''':",
 Le impostazion atuali par la pagina le xe '''$1''':",
 'protect-cascadeon' => 'Al momento sta pagina la xe blocà parché la xe inclusa {{PLURAL:$1|ne la pagina indicà de seguito, par la quale|ne le pagine indichè de seguito, par le quali}} xe ativa la protezion ricorsiva. Se pol modificar el livel de protezion individual de la pagina, ma le inpostazion derivanti da la protezion ricorsiva no le sarà mìa modificà.',
 'protect-default' => 'Autoriza tuti i utenti',
-'protect-fallback' => 'Ghe vole el parmesso de "$1"',
-'protect-level-autoconfirmed' => 'Bloca i utenti novi o mia registrà',
-'protect-level-sysop' => 'Solo aministradori',
+'protect-fallback' => 'Consentio soło che a i utenti có parmeso "$1"',
+'protect-level-autoconfirmed' => 'Consentio soło che a i utenti "autoconfermai"',
+'protect-level-sysop' => 'Consentio soło che a i aministradori',
 'protect-summary-cascade' => 'ricorsiva',
 'protect-expiring' => 'scadensa: $1 (UTC)',
+'protect-expiring-local' => 'scade el $1',
 'protect-expiry-indefinite' => 'infinìo',
 'protect-cascade' => "Protezion ricorsiva (l'estende la protezion a tute le pagine incluse in sta qua).",
 'protect-cantedit' => 'No te pol canbiar i livèi de protezion par la pagina, parché no te ghè mìa i parmessi necessari par modifegar la pagina stessa.',
@@ -2224,8 +2326,8 @@ Le impostazion atuali par la pagina le xe '''$1''':",
 'undeletepagetext' => "{{PLURAL:$1|La pàxena qua de sèvito la xe stà scancelà, ma la ghe xe 'ncora in archivio e pertanto se pole 'ncora recuperarla|Le $1 pàxene qua de sèvito le xe stà scancelè, ma le ghe xe 'ncora in archivio e pertanto se pole 'ncora recuperarle}}.
 L'archivio el vien svodà periodicamente.",
 'undelete-fieldset-title' => 'Recupera version',
-'undeleteextrahelp' => "Par recuperar la storia de la pàxena par intiero, lassa tute łe casełe desełezionàe e struca '''''Ripristina'''''.
-Par efetuar un ripristino sełetivo, seleziona łe casełe corispondenti a łe revixion da ripristinar e struca '''''Ripristina'''''. Strucando '''''Reset''''' vegnarà deselezionàe tute łe casełe e svodà el posto par el comento.",
+'undeleteextrahelp' => "Par recuperar l'intiera storia de ła pàjina, łasar tute łe caxełe desełesionae e strucar so '''''{{int:undeletebtn}}'''''.
+Par efetuar un ripristino sełetivo, sełesionar łe caxełe corispondenti a łe revixion da ripristinar e strucar so '''''{{int:undeletebtn}}'''''.",
 'undeleterevisions' => '{{PLURAL:$1|Una revision|$1 revision}} in archivio',
 'undeletehistory' => 'Recuperando sta pàxena, tute łe so revixion le vegnarà inserìe da novo ne ła rełativa cronołogia.
 Se dopo ła scancełazion xè stà creà na nova pàxena col stesso titoło, łe revixion recuperà le sarà inserìe ne ła cronołogia preçedente.',
@@ -2243,11 +2345,13 @@ Se dopo ła scancełazion xè stà creà na nova pàxena col stesso titoło, łe
 'undeletedrevisions' => '{{PLURAL:$1|Una revision recuperà|$1 revision recuperà}}',
 'undeletedrevisions-files' => '{{PLURAL:$1|Una revision|$1 revision}} e $2 file recuperà',
 'undeletedfiles' => '{{PLURAL:$1|Un file recuperà|$1 file recuperà}}',
-'cannotundelete' => "El recupero no'l xè riussìo: qualchedun altro el podarià aver xà recuperà ła pàxena.",
+'cannotundelete' => 'Ripristino nó riusìo:
+$1',
 'undeletedpage' => "'''$1 la xè stà recuperà'''
 
 Consulta el [[Special:Log/delete|registro de le scancełassion]] par vardare łe scancełassion e i recuperi pì reçenti.",
 'undelete-header' => 'Varda el [[Special:Log/delete|registro de le scancelazion]] par védar le scancelazion piassè reçenti.',
+'undelete-search-title' => 'Serca inte łe pàjine scanselae',
 'undelete-search-box' => 'Serca ne le pagine scancelà',
 'undelete-search-prefix' => 'Mostra le pagine el cui titolo scuminsia con:',
 'undelete-search-submit' => 'Serca',
@@ -2256,6 +2360,7 @@ Consulta el [[Special:Log/delete|registro de le scancełassion]] par vardare łe
 'undelete-bad-store-key' => "No se pol anular la scancelazion de la revision del file con data/ora $1: el file no'l xera disponibile prima de la scancelazion.",
 'undelete-cleanup-error' => 'Eror ne la scancelazion del file de archivio non doparà "$1".',
 'undelete-missing-filearchive' => "No se pol ripristinar l'ID $1 de l'archivio file in quanto no'l ghe xe mìà nel database. El podarìa èssar stà zà ripristinà.",
+'undelete-error' => "Eror inte'l ripristino de ła pàjina",
 'undelete-error-short' => 'Eror nel ripristino del file: $1',
 'undelete-error-long' => 'Se gà verificà dei erori nel tentativo de anular la scancelazion del file:
 
@@ -2266,6 +2371,9 @@ $1',
 # Namespace form on various pages
 'namespace' => 'Namespace:',
 'invert' => 'Inverti la selession',
+'tooltip-invert' => "Sełesion sta caxeła par scondare łe modifeghe a łe pàjine drento del namespace sełesionà (e 'l rełativo namespace, se sełesionà)",
+'namespace_association' => 'Namespace asocià',
+'tooltip-namespace_association' => "Sełesiona sta caxeła pa' includare anca ła pàjina de discusion o 'l ogeto del namespace asocià cò 'n namespace sełesionà",
 'blanknamespace' => '(Prinsipale)',
 
 # Contributions
@@ -2352,6 +2460,9 @@ $1',
 'blockipsuccesstext' => '[[Special:Contributions/$1|$1]] xe stà blocà.<br />
 Varda [[Special:BlockList|lista IP blocadi]] par vedare tuti i blochi.',
 'ipb-blockingself' => 'Sito drio blocar te steso! Sito sicuro de voerlo fare?',
+'ipb-confirmhideuser' => 'Se sta par blocar un utente cò l\'opsion "Scondi utente" abiłità.
+In sto modo se evita che\'l nome utente el vegne fora inte łeliste e łe voxe del registro.
+Sito seguro de vołer continuar?',
 'ipb-edit-dropdown' => 'Motivi par el bloco',
 'ipb-unblock-addr' => 'Sbloca $1',
 'ipb-unblock' => 'Sbloca un utente o un indirizo IP',
@@ -2363,8 +2474,19 @@ Varda [[Special:BlockList|lista IP blocadi]] par vedare tuti i blochi.',
 'unblocked' => '[[User:$1|$1]] el xe stà sblocà',
 'unblocked-range' => '$1 xè stà sblocà',
 'unblocked-id' => 'El bloco $1 el xe stà cavà',
+'blocklist' => 'Utenti blocai',
 'ipblocklist' => 'Utenti blocà',
 'ipblocklist-legend' => 'Cata fora un utente blocà',
+'blocklist-userblocks' => 'Scondi i blochi de i account',
+'blocklist-tempblocks' => 'Scondi i blochi tenporanei',
+'blocklist-addressblocks' => 'Scondi i blochi de un IP ugnoło',
+'blocklist-rangeblocks' => 'Scondi i blochi de range',
+'blocklist-timestamp' => 'Date e ora',
+'blocklist-target' => 'Destinasion',
+'blocklist-expiry' => 'Scade',
+'blocklist-by' => 'Aministrador che ga blocà',
+'blocklist-params' => 'Parametri de bloco',
+'blocklist-reason' => 'Motivo',
 'ipblocklist-submit' => 'Serca',
 'ipblocklist-localblock' => 'Bloco local',
 'ipblocklist-otherblocks' => '{{PLURAL:$1|Altro bloco|Altri blochi}}',
@@ -2406,6 +2528,7 @@ Qua soto ghe xe el registro de le sopression:',
 'ipb_already_blocked' => 'L\'utente "$1" el xe zà blocà',
 'ipb-needreblock' => '$1 xe xà blocà. Vuto canbiar le inpostassion?',
 'ipb-otherblocks-header' => '{{PLURAL:$1|Altro bloco|Altri blochi}}',
+'unblock-hideuser' => "Nò te poi sblocar sto utente, parché el so nome utente 'l'è sta sconto.",
 'ipb_cant_unblock' => 'Eror: Inpossibile catar el bloco con ID $1. El bloco el podarìa èssar zà stà cavà.',
 'ipb_blocked_as_range' => "Eror: L'indirizo IP $1 no'l xe sogeto a bloco individual e no'l pol èssar sblocà. El bloco el xe invesse ativo a livel de l'intervalo $2, che el pol èssar sblocà.",
 'ip_range_invalid' => 'Intervało de indirissi IP mìa vałido.',
@@ -2445,18 +2568,18 @@ Tiente in mente de [[Special:UnlockDB|sblocarlo]] co te ghè finìo de far manut
 # Move page
 'move-page' => 'Spostamento de $1',
 'move-page-legend' => 'Spostamento de pagina',
-'movepagetext' => "Col modulo qua soto te podi rinominar na pagina, spostando anca tuta la so storia al titolo novo.
-El vecio titolo el deventarà automaticamente un rimando (redirect) che punta al titolo novo.
-Te podi agiornar automaticamente i rimandi che punta al vecio titolo.
-Se te siegli de no farlo, tiente in mente de controlar ben che no se crea [[Special:DoubleRedirects|dopi redirect]] o [[Special:BrokenRedirects|redirect interoti]].
-Resta ne la to responsabilità de controlar che i colegamenti i continua a puntar dove che i deve.
+'movepagetext' => "Có 'l moduło cuà soto te podi rinominar na pàjina, spostando anca tuta ła so storia al titoło novo.
+El vecio titoło el devegnarà automategamente un rimando (redirect) che ponta al titoło novo.
+Te podi axornar automategamente i rimandi che ponta al vecio titoło.
+Se te siełi de nó farlo, tiente inamente de controłar ben che nó se cree [[Special:DoubleRedirects|dopi rimandi]] o [[Special:BrokenRedirects|rimandi interoti]].
+Resta inte ła to responsabiłità de controłar che i ligamenti i continue a pontar 'ndove che i deve.
 
-Ocio: la pagina '''no''' la sarà spostà se ghe fusse zà na pagina col titolo novo, a meno che no la sia na pagina voda o un rimando, e senpre che no la gabia na storia.
-Questo significa che, se te fè un eror, te podi da novo rinominar na pagina col vecio titolo, ma no te podi sovrascrìvar na pagina zà esistente.
+Ocio: ła pàjina '''nó''' ła sarà spostà se ghe fuse xà na pàjina có 'l titoło novo, a meno che nó ła sia un rimando, e senpre che nó ła gabia na storia.
+Cuesto signifega che, se te fè un eror, te podi da novo rinominar na pàjina có 'l vecio titoło, ma nó te podi sovrascrìvar na pàjina xà existente.
 
 '''OCIO!'''
-Sto canbiamento drastico el podarìa dar problemi che no se se speta, specialmente se se trata de na pagina molto visità.
-Stà ben tento a le conseguense del spostamento, prima de farlo.",
+Sto canbiamento drastico el podarìa dar problemi che nó se se speta, spesalmente se se trata de na pàjina molto vixità.
+Stà ben tento a łe conseguense del spostamento, prima de farlo.",
 'movepagetext-noredirectfixer' => "Col modulo qua soto te podi rinominar na pagina, spostando anca tuta la so storia al titolo novo.
 El vecio titolo el deventarà automaticamente un rimando (redirect) che punta al titolo novo.
 Tiente in mente de controlar ben che no se crea [[Special:DoubleRedirects|dopi redirect]] o [[Special:BrokenRedirects|redirect interoti]].
@@ -2511,13 +2634,14 @@ Par piaser, métighe un titolo difarente.",
 
 La voxe specificà come destinassion "[[:$1]]" l\'esiste xà. Vóto scancełarla par proseguir con ło spostamento?',
 'delete_and_move_confirm' => 'Sì, scancèla la pagina',
-'delete_and_move_reason' => "Scancelà par spostar n'altra pagina a sto titolo",
+'delete_and_move_reason' => 'Scanselà par rendar posibiłe el spostamento da "[[$1]]"',
 'selfmove' => 'No se pol spostar, el titolo novo el xe conpagno del vecio.',
 'immobile-source-namespace' => 'No te pol spostar pàxene in tel namespace "$1"',
 'immobile-target-namespace' => 'No te pol spostar pàxene \'ntel namespace "$1"',
 'immobile-target-namespace-iw' => "El colegamento interwiki no'l xe na valida destinassion in do spostar na pàxena.",
 'immobile-source-page' => 'Sta pàxena no la pol vegner spostà.',
 'immobile-target-page' => 'No te pol spostar a sto titolo.',
+'bad-target-model' => 'Ła destinasion dexiderà ła dopara un modèl de contegnui difarente. Nò xe posibiłe convertir da $1 a $2.',
 'imagenocrossnamespace' => 'No se pol spostar un file verso un namespace diverso da quelo dei file.',
 'nonfile-cannot-move-to-file' => 'Tuto quel che no xe un file, no se pode spostarlo al namespace dei file.',
 'imagetypemismatch' => "L'estension nova del file no la corisponde mìa al tipo de file",
@@ -2539,9 +2663,11 @@ Questo el pode in seguito vegner inportà in te n\'altro wiki che dòpara el sof
 Par esportar le pàxene, scrivi i tìtoli in te la casèla qua soto, un tìtolo par riga, e selessiona se te voli la version ùltima con tute le version preçedenti e el storico de le modìfeghe, opure la version ùltima con solo le informassion de l\'ùltima modìfega.
 
 Nel secondo caso te poli anca doparar un colegamento, par esenpio [[{{#Special:Export}}/{{MediaWiki:Mainpage}}]] par la pàxena "[[{{MediaWiki:Mainpage}}]]".',
+'exportall' => 'Esporta tute łe pàjine',
 'exportcuronly' => "Includi soło ła version attuałe, no l'intera cronołogia",
 'exportnohistory' => "----
 '''Ocio!''' Par motivi ligà a le prestazion del sistema xè stà disabiłità l'esportazion de tuta ła storia de łe pàxene fata co sto modulo.",
+'exportlistauthors' => "Includi 'l elenco conpleto de i contribudori pa' ogni pajina",
 'export-submit' => 'Esporta',
 'export-addcattext' => 'Zonta pagine da la categoria:',
 'export-addcat' => 'Zonta',
@@ -2574,6 +2700,8 @@ Par piaser visita [//www.mediawiki.org/wiki/Localisation MediaWiki Localisation]
 'thumbnail_error' => 'Eror ne la creazion de la miniatura: $1',
 'djvu_page_error' => 'Nùmaro de pagina DjVu sbaglià',
 'djvu_no_xml' => "Inpossibile otegner l'XML par el file DjVu",
+'thumbnail-temp-create' => 'Inposibiłe crear el file tenporaneo de łe miniadure',
+'thumbnail-dest-create' => 'Inposibiłe salvar ła miniadura inte ła destinasion',
 'thumbnail_invalid_params' => 'Parametri anteprima mìa giusti',
 'thumbnail_dest_directory' => 'Inpossibile crear la directory de destinazion',
 'thumbnail_image-type' => 'Tipo de imagine mia suportà',
@@ -2591,6 +2719,7 @@ Tute łe operazion de inportazion trans-wiki łe xè notà nel [[Special:Log/imp
 'import-interwiki-templates' => 'Tira dentro tuti i modèi',
 'import-interwiki-submit' => 'Inporta',
 'import-interwiki-namespace' => 'Namespace de destinassion:',
+'import-interwiki-rootpage' => 'Pàjina prinsipałe de destinasion (opsionałe):',
 'import-upload-filename' => 'Nome del file:',
 'import-comment' => 'Comento:',
 'importtext' => "Se połe esportare el file da ła fonte wiki doparando ła [[Special:Export|funsion de esportasion]].
@@ -2618,6 +2747,15 @@ Salveło so'l to conpiuter e carghelo cuà.",
 'import-upload' => 'Carga dati XML',
 'import-token-mismatch' => "I dati relativi a la session i xe 'ndài persi. Par piaser, próa da novo.",
 'import-invalid-interwiki' => 'No se pode inportar da la wiki indicà.',
+'import-error-edit' => 'Ła pàjina "$1" nò ła xe sta inportà parché no te si autorixà a modifegarla.',
+'import-error-create' => 'Ła pàjina "$1" nò ła xe sta inportà parché no te si autorixà a crearla.',
+'import-error-interwiki' => 'Ła pàjina "$1" nò ła vien inportà parché el so nome el xe riservà pa\'l ligamento foresto (interwiki).',
+'import-error-special' => 'Ła pàjina "$1" nò ła vien inportà parché ła apartien a un namespace speciałe che nò \'l permete pàjine.',
+'import-error-invalid' => 'Ła pàjina "$1" nò ła vien inportà parché el so nome nò \'l xe vałido.',
+'import-error-unserialize' => 'Ła version $2 de ła pàjina "$1" nó ła pol esar de-seriałixà. Ła version ła xe sta segnałà par doparar el modèl de contegnùo $3 seriałixà cofà $4.',
+'import-options-wrong' => '{{PLURAL:$2|Opsion sbałià|Opsion sbałiae}}: <nowiki>$1</nowiki>',
+'import-rootpage-invalid' => 'Ła pàjina prinsipałe fornia nó ła xe un titoło vałido.',
+'import-rootpage-nosubpage' => 'El namespace "$1" de ła pàjina prinsipałe nó \'l permete de \'ver sotopajine.',
 
 # Import log
 'importlogpage' => 'Inportassion',
@@ -2627,6 +2765,16 @@ Salveło so'l to conpiuter e carghelo cuà.",
 'import-logentry-interwiki' => 'gà trasferìo da altra wiki ła pàxena $1',
 'import-logentry-interwiki-detail' => '{{PLURAL:$1|una revixion importà|$1 revixion importae}} da $2',
 
+# JavaScriptTest
+'javascripttest' => 'Sperimentasion JavaScript',
+'javascripttest-title' => 'In execusion test par $1',
+'javascripttest-pagetext-noframework' => "Sta pàjina ła xe riservà a l'execusion de test de JavaScript.",
+'javascripttest-pagetext-unknownframework' => 'Framework de test sconosùo "$1".',
+'javascripttest-pagetext-frameworks' => "Par piasere, siełi uno de i seguenti framework pa' i test: $1",
+'javascripttest-pagetext-skins' => 'Siełi na skin có cui exeguir i test:',
+'javascripttest-qunit-intro' => 'Varda so mediawiki.org ła [$1 documentasion rivardante i test].',
+'javascripttest-qunit-heading' => 'Suite de test de JavaScript par QUnit in MediaWiki',
+
 # Tooltip help for the actions
 'tooltip-pt-userpage' => 'La to pagina utente',
 'tooltip-pt-anonuserpage' => 'La pàxena utente de sto indirizo IP',
@@ -2687,6 +2835,8 @@ Salveło so'l to conpiuter e carghelo cuà.",
 'tooltip-diff' => 'Varda i canbiamenti fati al testo',
 'tooltip-compareselectedversions' => 'Varda le difarense tra le do version selessionà de sta pagina.',
 'tooltip-watch' => "Tien d'ocio sta pagina",
+'tooltip-watchlistedit-normal-submit' => 'Cava i titołi',
+'tooltip-watchlistedit-raw-submit' => "Axorna ła lista de łe tegnùe d'ocio",
 'tooltip-recreate' => 'Ricrea ła pàxena anca se la xè stà scancełà',
 'tooltip-upload' => 'Intaca el caricamento',
 'tooltip-rollback' => 'El "tira indrio" el desfa i canbiamenti a sta pagina fati de l\'ultimo che gà messo le mane.',
@@ -2717,9 +2867,11 @@ Questo xe probabilmente dovùo a la presenza de un colegamento a un sito foresto
 'spambot_username' => 'MediaWiki - sistema de rimozion del spam',
 'spam_reverting' => "Ripristinà l'ultima version priva de colegamenti a $1",
 'spam_blanking' => 'Pàxena svodà, tute łe version le contegneva cołegamenti a $1',
+'spam_deleting' => 'Pàjina scansełà, tute łe version łe contegneva ligamenti a $1',
 
 # Info page
 'pageinfo-title' => 'Informasion par "$1"',
+'pageinfo-not-current' => 'Ne disipiaxe, ma xe inposibiłe fornir sta informasion par vecie version.',
 'pageinfo-header-basic' => 'Informassion de base',
 'pageinfo-header-edits' => 'Storia dei canbiamenti',
 'pageinfo-header-restrictions' => 'Protession de la pagina',
@@ -2748,6 +2900,7 @@ Questo xe probabilmente dovùo a la presenza de un colegamento a un sito foresto
 'pageinfo-magic-words' => '{{PLURAL:$1|Parola magica|Parole magiche}} ($1)',
 'pageinfo-hidden-categories' => '{{PLURAL:$1|Categoria sconta|Categorie sconte}} ($1)',
 'pageinfo-templates' => 'Template {{PLURAL:$1|incluso|inclusi}}  ($1)',
+'pageinfo-transclusions' => '{{PLURAL:$1|Pàjina incluxa|Pàjine incluxe}} so ($1)',
 'pageinfo-toolboxlink' => 'Informassion su sta pagina',
 'pageinfo-redirectsto' => 'La rimanda a',
 'pageinfo-redirectsto-info' => 'info',
@@ -2756,6 +2909,10 @@ Questo xe probabilmente dovùo a la presenza de un colegamento a un sito foresto
 'pageinfo-protect-cascading' => 'Protession ricorsiva da qua',
 'pageinfo-protect-cascading-yes' => 'Sì',
 'pageinfo-protect-cascading-from' => 'Protession ricorsiva eredità da',
+'pageinfo-category-info' => 'Informasion so ła categoria',
+'pageinfo-category-pages' => 'Nùmaro de pàjine',
+'pageinfo-category-subcats' => 'Nùmaro de sotocategorie',
+'pageinfo-category-files' => 'Nùmaro de file',
 
 # Patrolling
 'markaspatrolleddiff' => 'Segna la modifica come verificà',
@@ -2767,6 +2924,8 @@ Questo xe probabilmente dovùo a la presenza de un colegamento a un sito foresto
 'markedaspatrollederror' => 'No se pol contrassegnar ła voxe come verificà',
 'markedaspatrollederrortext' => 'Bisogna speçificare na revixion da contrassegnar come verificà.',
 'markedaspatrollederror-noautopatrol' => 'No te ghè i parmessi necessari par segnar le to stesse modifiche come verificàe.',
+'markedaspatrollednotify' => 'Ła modifega a $1 ła xe sta segnà come verifegà.',
+'markedaspatrollederrornotify' => 'Eror durante ła verifega.',
 
 # Patrol log
 'patrol-log-page' => 'Modifiche verificàe',
@@ -2796,15 +2955,22 @@ La so esecuzion la podarìa danegiar el to computer.",
 'widthheightpage' => '$1 × $2, $3 {{PLURAL:$3|pagina|pagine}}',
 'file-info' => 'Dimensioni: $1, tipo MIME: $2',
 'file-info-size' => '$1 × $2 pixel, dimension del file: $3, tipo MIME: $4',
+'file-info-size-pages' => '$1 × $2 pixel, dimension del file: $3, tipo MIME: $4, $5 {{PLURAL:$5|pàjina|pàjine}}',
 'file-nohires' => 'No ghe xe version a risolussion pì granda.',
 'svg-long-desc' => 'file en formato SVG, dimension nominałi $1 × $2 pixel, dimension del file: $3',
+'svg-long-desc-animated' => 'file in formato SVG animà, dimension nominałi $1 × $2 pixel, dimension del file: $3',
+'svg-long-error' => 'File SVG mìa valido: $1',
 'show-big-image' => 'Version ad alta risołusion',
+'show-big-image-preview' => 'Dimension de sta anteprima: $1.',
+'show-big-image-other' => '{{PLURAL:$2|Altra risołusion|Altre risołusion}}: $1.',
 'show-big-image-size' => '$1 × $2 pixel',
 'file-info-gif-looped' => 'ripetù',
 'file-info-gif-frames' => '$1 {{PLURAL:$1|frame|frame}}',
 'file-info-png-looped' => 'ripetù',
 'file-info-png-repeat' => 'ripetù $1 {{PLURAL:$1|olta|olte}}',
 'file-info-png-frames' => '$1 {{PLURAL:$1|fotograma|fotogrami}}',
+'file-no-thumb-animation' => "'''Nota: a cauxa de limitasion teniche, łe miniadure de sto file nó łe sarà animae.'''",
+'file-no-thumb-animation-gif' => "'''Nota: a cauxa de limitasion teniche, łe miniadure de łe imaxeni GIF a alta risołusion come cuesta nó łe sarà animae.'''",
 
 # Special:NewFiles
 'newimages' => 'Galeria dei file novi',
@@ -2823,6 +2989,8 @@ La so esecuzion la podarìa danegiar el to computer.",
 'minutes' => '{{PLURAL:$1|un minuto|$1 minuti}}',
 'hours' => "{{PLURAL:$1|un'ora|$1 ore}}",
 'days' => '{{PLURAL:$1|un zorno|$1 zorni}}',
+'months' => '{{PLURAL:$1|$1 mexe|$1 mexi}}',
+'years' => '{{PLURAL:$1|$1 ano|$1 ani}}',
 'ago' => '$1 fa',
 'just-now' => 'giusto desso',
 
@@ -2966,10 +3134,79 @@ I colegamenti dopo, su la stessa riga, i xe considerai come ecession (cioè, pag
 'exif-gpsareainformation' => 'Nome de ła xòna GPS',
 'exif-gpsdatestamp' => 'Data GPS',
 'exif-gpsdifferential' => 'Corezion diferensiałe GPS',
+'exif-jpegfilecomment' => 'Comento del file JPEG',
+'exif-keywords' => 'Parołe ciave',
+'exif-worldregioncreated' => "Rejon del Mondo in cui l'imaxene ła xe sta fata",
+'exif-countrycreated' => 'Paexe dove xe sta fata ła someja',
+'exif-countrycodecreated' => "Còdexe del paexe 'ndove xe sta fata ła someja",
+'exif-provinceorstatecreated' => "Provincia o stato 'ndove xe sta fata ła someja",
+'exif-citycreated' => "Sità 'ndove xe sta fata ła someja",
+'exif-sublocationcreated' => 'Parte de ła sità in cui xe sta fata ła someja',
+'exif-worldregiondest' => 'Rejon del Mondo mostrà',
+'exif-countrydest' => 'Paexe mostrà',
+'exif-countrycodedest' => 'Còdexe del Paexe mostrà',
+'exif-provinceorstatedest' => 'Provincia o stato mostrà',
+'exif-citydest' => 'Sità mostrà',
+'exif-sublocationdest' => 'Parte de ła sità mostrà',
 'exif-objectname' => 'Titoło curto',
+'exif-specialinstructions' => 'Istrusion speciałi',
+'exif-headline' => 'Titoło',
+'exif-credit' => 'Crediti',
+'exif-source' => 'Fonte',
+'exif-editstatus' => "Stato de edision de l'imaxene",
+'exif-urgency' => 'Urgensa',
+'exif-fixtureidentifier' => 'Nome del riferimento',
+'exif-locationdest' => 'Locałità rafegurà',
+'exif-locationdestcode' => 'Còdexe del liogo rafegurà',
+'exif-objectcycle' => "Momento del xorno pa'l cuałe el medium el xe progetà",
+'exif-contact' => 'Informasion de contato',
+'exif-writer' => 'Scritor',
+'exif-languagecode' => 'Léngua',
+'exif-iimversion' => 'Version IIM',
+'exif-iimcategory' => 'Categoria',
+'exif-iimsupplementalcategory' => 'Categorie xontive',
+'exif-datetimeexpires' => 'Nó doparar dopo',
+'exif-datetimereleased' => 'Rełasà el',
+'exif-originaltransmissionref' => 'Còdexe del liogo de trasmision orixenaria',
+'exif-identifier' => 'Identifegativo',
+'exif-lens' => 'Lente doparà',
+'exif-serialnumber' => 'Nùmaro de serie de ła fotocamera',
+'exif-cameraownername' => 'Paron de ła fotocamera',
+'exif-label' => 'Eticheta',
+'exif-datetimemetadata' => "Data in cui i metadata i xe stai modifegai l'ultema volta",
+'exif-nickname' => "Nome informałe de l'imaxene",
+'exif-rating' => 'Vałutasion (so 5)',
+'exif-rightscertificate' => 'Certificato de gestion de i diriti',
+'exif-copyrighted' => "Informasion so'l copyright",
+'exif-copyrightowner' => 'Detentor del copyright',
+'exif-usageterms' => "Termini d'utiłixo",
+'exif-webstatement' => 'Dichiarasion online de copyright',
+'exif-originaldocumentid' => 'ID univoco del documento orixenałe',
+'exif-licenseurl' => 'URL par ła licensa del copyright',
+'exif-morepermissionsurl' => 'Informasion so łe license alternadive',
+'exif-attributionurl' => "Pa'l riutiłixo de sta òpara, se prega de inserir un ligamento ipertestuałe a",
+'exif-preferredattributionname' => "Pa'l riutiłixo de sta òpara, se prega de atribuighine ła paternidà a",
+'exif-pngfilecomment' => 'Comento del file PNG',
+'exif-disclaimer' => 'Avertense',
+'exif-contentwarning' => "Avixo so'l contegnùo",
+'exif-giffilecomment' => 'Comento del file GIF',
+'exif-intellectualgenre' => 'Tipo de elemento',
+'exif-subjectnewscode' => 'Còdexe del ogeto',
+'exif-scenecode' => 'Còdexe de sèna IPTC',
+'exif-event' => 'Evento rafegurà',
+'exif-organisationinimage' => 'Organixasion rafegurà',
+'exif-personinimage' => 'Persona rafegurà',
+'exif-originalimageheight' => "Altesa de l'imaxene prima che ła fuse tajà",
+'exif-originalimagewidth' => "Larghesa de l'imaxene prima che ła fuse tajà",
 
 # EXIF attributes
 'exif-compression-1' => 'No conpresso',
+'exif-compression-2' => 'CCITT grupo 3 monodimensionałe - codifega run length de Huffman modifegà',
+'exif-compression-3' => 'Codifega fax CCITT Group 3',
+'exif-compression-4' => 'Codifega fax CCITT gruppo 4',
+
+'exif-copyrighted-true' => 'Proteto da copyright',
+'exif-copyrighted-false' => 'Dominio pùblico',
 
 'exif-unknowndate' => 'Data sconossiùa',
 
@@ -2988,6 +3225,8 @@ I colegamenti dopo, su la stessa riga, i xe considerai come ecession (cioè, pag
 'exif-xyresolution-i' => '$1 punti par połiçe (dpi)',
 'exif-xyresolution-c' => '$1 punti par çentimetro (dpc)',
 
+'exif-colorspace-65535' => 'Nó całibrià',
+
 'exif-componentsconfiguration-0' => 'no esiste',
 
 'exif-exposureprogram-0' => 'Non definio',
@@ -3105,6 +3344,10 @@ I colegamenti dopo, su la stessa riga, i xe considerai come ecession (cioè, pag
 'exif-gpslongitude-e' => 'Longitudine Est',
 'exif-gpslongitude-w' => 'Longitudine Ovest',
 
+# Pseudotags used for GPSAltitudeRef
+'exif-gpsaltitude-above-sealevel' => "$1 {{PLURAL:$1|metro|metri}} so'l liveło del mar",
+'exif-gpsaltitude-below-sealevel' => '$1 {{PLURAL:$1|metro|metri}} soto el liveło del mar',
+
 'exif-gpsstatus-a' => 'Mixurassion in corso',
 'exif-gpsstatus-v' => 'Mixurassion interoperabiłe',
 
@@ -3121,10 +3364,59 @@ I colegamenti dopo, su la stessa riga, i xe considerai come ecession (cioè, pag
 'exif-gpsdestdistance-m' => 'Mija',
 'exif-gpsdestdistance-n' => 'Mija nàutiche',
 
+'exif-gpsdop-excellent' => 'Esełente ($1)',
+'exif-gpsdop-good' => 'Bon ($1)',
+'exif-gpsdop-moderate' => 'Moderà ($1)',
+'exif-gpsdop-fair' => 'Discreto ($1)',
+'exif-gpsdop-poor' => 'Scarso ($1)',
+
+'exif-objectcycle-a' => 'Soło che ła matina',
+'exif-objectcycle-p' => 'Soło che ła sera',
+'exif-objectcycle-b' => 'Matina e sera',
+
 # Pseudotags used for GPSTrackRef, GPSImgDirectionRef and GPSDestBearingRef
 'exif-gpsdirection-t' => 'Diression reałe',
 'exif-gpsdirection-m' => 'Diression magnetica',
 
+'exif-ycbcrpositioning-1' => 'Centrà',
+'exif-ycbcrpositioning-2' => 'Co-situà',
+
+'exif-dc-contributor' => 'Cołaboradori',
+'exif-dc-coverage' => 'Anbito spasiałe o tenporałe de i media',
+'exif-dc-date' => 'Data (e)',
+'exif-dc-publisher' => 'Editor',
+'exif-dc-relation' => 'File ligai',
+'exif-dc-rights' => 'Diriti',
+'exif-dc-source' => 'Fonte del file',
+'exif-dc-type' => 'Tipo de file',
+
+'exif-rating-rejected' => 'Rifiutà',
+
+'exif-isospeedratings-overflow' => 'Maxor de 65535',
+
+'exif-iimcategory-ace' => 'Arte, cultura e spetacoło',
+'exif-iimcategory-clj' => 'Criminałità e dirito',
+'exif-iimcategory-dis' => 'Dixastri e insidenti',
+'exif-iimcategory-fin' => 'Economia e afari',
+'exif-iimcategory-edu' => 'Istrusion',
+'exif-iimcategory-evn' => 'Anbiente',
+'exif-iimcategory-hth' => 'Sałute',
+'exif-iimcategory-hum' => 'Interese uman',
+'exif-iimcategory-lab' => 'Laoro',
+'exif-iimcategory-lif' => 'Stiłe de vita e tenpo libaro',
+'exif-iimcategory-pol' => 'Pułitega',
+'exif-iimcategory-rel' => 'Rełijon e fè',
+'exif-iimcategory-sci' => 'Siensa e tenołoxia',
+'exif-iimcategory-soi' => 'Cuestion sociałi',
+'exif-iimcategory-spo' => 'Spor',
+'exif-iimcategory-war' => 'Guera, radeghi e dixordeni',
+'exif-iimcategory-wea' => 'Meteo',
+
+'exif-urgency-normal' => 'Normałe ($1)',
+'exif-urgency-low' => 'Basa ($1)',
+'exif-urgency-high' => 'Alta ($1)',
+'exif-urgency-other' => 'Priorità definie dal utente ($1)',
+
 # 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])',
@@ -3193,6 +3485,7 @@ El codexe de conferma el scadarà en automatego a łe $4.',
 # Scary transclusion
 'scarytranscludedisabled' => "[L'inclusion de pagine tra siti wiki no la xe ativa]",
 'scarytranscludefailed' => '[Inpossibile otegner el modèl $1]',
+'scarytranscludefailed-httpstatus' => '[Eror: inposibiłe otegner el modèl $1: HTTP $2]',
 'scarytranscludetoolong' => '[La URL la xe massa longa]',
 
 # Delete conflict
@@ -3200,6 +3493,8 @@ El codexe de conferma el scadarà en automatego a łe $4.',
 'confirmrecreate' => "L'utente [[User:$1|$1]] ([[User talk:$1|discussion]]) el ga scancełà sta voxe dopo che te ghè scuminsià a modificarla, con ła seguente motivazion:
 : ''$2''
 Par piaser, conferma che te vołi dal bon ricrear sta voxe.",
+'confirmrecreate-noreason' => 'El utente [[User:$1|$1]] ([[User talk:$1|discussion]]) el ga scansełà sta voxe dopo che te ghè scuminsià a modifegarla.
+Par piaser, conferma che te vołi dal bon ricrear sta voxe.',
 'recreate' => 'Ricrea',
 
 # action=purge
@@ -3209,7 +3504,9 @@ Par piaser, conferma che te vołi dal bon ricrear sta voxe.",
 
 # action=watch/unwatch
 'confirm-watch-button' => 'Va ben',
+'confirm-watch-top' => "Xonto sta pàjina a ła to lista de łe tegnùe d'ocio?",
 'confirm-unwatch-button' => 'Va ben',
+'confirm-unwatch-top' => "Cavo sta pàjina da ła to lista de łe tegnùe d'ocio?",
 
 # Multipage image navigation
 'imgmultipageprev' => '← la pagina prima',
@@ -3287,6 +3584,7 @@ Nota che te pol anca [[Special:EditWatchlist|modificar la lista con l'interfacia
 'version-specialpages' => 'Pagine speciali',
 'version-parserhooks' => 'Hook del parser',
 'version-variables' => 'Variabili',
+'version-antispam' => 'Prevension del spam',
 'version-skins' => 'Aspeto grafego',
 'version-other' => 'Altro',
 'version-mediahandlers' => 'Gestori de contenuti multimediài',
@@ -3300,6 +3598,7 @@ Nota che te pol anca [[Special:EditWatchlist|modificar la lista con l'interfacia
 'version-license' => 'Licensa',
 'version-poweredby-credits' => "Sta wiki la va con '''[//www.mediawiki.org/ MediaWiki]''', copyright © 2001-$1 $2.",
 'version-poweredby-others' => 'altri',
+'version-credits-summary' => "Semo contenti de riconosare łe seguenti persone p' 'ver contribuio a [[Special:Version|MediaWiki]].",
 'version-license-info' => "MediaWiki xe un software lìbaro; te pol redistribuirlo e/o modificarlo secondo i termini de la Licensa Publica Zeneral GNU publicà da la Free Software Foundation; secondo la version 2 de la Licensa, o (a scelta tua) una qualunque altra version sucessiva.
 
 MediaWiki el xe distribuìo sperando che el possa vegner utile, ma SENSA NISSUNA GARANSIA; sensa gnanca la garansia inplicita de COMERCIALIZASSION o de ADATAMENTO A UN USO PARTICOLARE. Varda la Licensa Publica Zeneral GNU par ulteriori detagli.
@@ -3308,6 +3607,8 @@ Insieme co sto programa te dovaressi 'ver ricevùo na copia de la Licensa Public
 'version-software' => 'Software instalà',
 'version-software-product' => 'Prodoto',
 'version-software-version' => 'Version',
+'version-entrypoints' => 'URL de aceso',
+'version-entrypoints-header-entrypoint' => 'Punti de aceso',
 'version-entrypoints-header-url' => 'URL',
 
 # Special:FilePath
@@ -3326,22 +3627,23 @@ Le imagini le vien mostrà a la risoluzion pi granda che se pol, par i altri tip
 'fileduplicatesearch-info' => '$1 × $2 pixel<br />Dimension: $3<br />Tipo MIME: $4',
 'fileduplicatesearch-result-1' => 'No ghe xe duplicati conpagni del file "$1".',
 'fileduplicatesearch-result-n' => 'Ghe xe {{PLURAL:$2|un duplicato conpagno|$2 duplicati conpagni}} al file "$1".',
+'fileduplicatesearch-noresults' => 'Nisun file de nome "$1" trovà.',
 
 # Special:SpecialPages
 'specialpages' => 'Pagine speciali',
 'specialpages-note' => '----
-* Pagine speciali normali.
-* <strong class="mw-specialpagerestricted">Pagine speciali ad acesso limità.</strong>',
+* 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',
-'specialpages-group-login' => 'Login / registrazion',
+'specialpages-group-login' => 'Login / registrasion',
 'specialpages-group-changes' => 'Ultime modifiche e registri',
 'specialpages-group-media' => 'Resoconti e caricamenti dei file multimediài',
 'specialpages-group-users' => 'Utenti e diriti',
 'specialpages-group-highuse' => 'Pagine doparà assè',
 'specialpages-group-pages' => 'Liste de pagine',
 'specialpages-group-pagetools' => 'Strumenti par le pagine',
-'specialpages-group-wiki' => 'Dati e strumenti wiki',
+'specialpages-group-wiki' => "Strumenti e informasion so'l projeto",
 'specialpages-group-redirects' => 'Pagine speciali de rimando',
 'specialpages-group-spam' => 'Strumenti anti spam',
 
@@ -3380,6 +3682,9 @@ Le imagini le vien mostrà a la risoluzion pi granda che se pol, par i altri tip
 'compare-rev1' => 'Revisión 1',
 'compare-rev2' => 'Revisión 2',
 'compare-submit' => 'Confronta',
+'compare-invalid-title' => "El titoło che te ghè indicà nó 'l xe mia valido.",
+'compare-title-not-exists' => "El titoło che te ghe spesifegà nó 'l existe.",
+'compare-revision-not-exists' => 'Ła revixion che te ghe spesifegà nó ła existe.',
 
 # Database error messages
 'dberr-header' => 'Sta wiki la ga un problema',
@@ -3432,22 +3737,77 @@ Le imagini le vien mostrà a la risoluzion pi granda che se pol, par i altri tip
 'logentry-move-move_redir-noredirect' => '$1 ga spostà la pajina $3 a $4 al posto de un rimando sensa metare un rimando',
 'logentry-patrol-patrol' => '$1 ga segnà la revixion $4 de la pajina $3 come verifegà',
 'logentry-patrol-patrol-auto' => '$1 ga segnà automategamente la revixion $4 de la pajina $3 come verifegà',
-'logentry-newusers-newusers' => '$1 ga creà na utensa',
-'logentry-newusers-create' => '$1 ga creà na utensa',
-'logentry-newusers-create2' => '$1 ga creà na utensa $3',
+'logentry-newusers-newusers' => "L'utensa $1 xe sta creà",
+'logentry-newusers-create' => "L'utensa $1 xe sta creà",
+'logentry-newusers-create2' => "L'utensa $3 xe sta creà da $1",
+'logentry-newusers-byemail' => "L'utensa $3 xe sta creà da $1 e ła password ła xe sta invià via e-mail",
 'logentry-newusers-autocreate' => "L'utensa $1 xè stà creà automategamente",
-'newuserlog-byemail' => 'password spedìa par e-mail',
+'logentry-rights-rights' => "$1 ga canbià l'apartenensa de $3 dal grupo $4 al grupo $5",
+'logentry-rights-rights-legacy' => "$1 ga canbià l'apartenensa a grupi de $3",
+'logentry-rights-autopromote' => '$1 xe stà automategamente promoso/a da $4 a $5',
+'rightsnone' => '(nissun)',
 
 # Feedback
+'feedback-bugornote' => 'Se se xe in grado de descrivare el problema tenico riscontrà in maniera precixa, [$1 segnałare el bug]. In alternadiva, se pol doparar el moduło senplifegà cuà soto. El comento inserio el sarà xontà a ła pàjina "[$3 $2]", insieme al propio nome utente.',
 'feedback-subject' => 'Ogeto:',
 'feedback-message' => 'Messajo:',
 'feedback-cancel' => 'Anuła',
+'feedback-submit' => 'Invia feedback',
+'feedback-adding' => 'Inserimento del feedback inte ła pàjina...',
+'feedback-error1' => 'Eror: Da ła API xe rivà un rexultà nó riconosùo',
+'feedback-error2' => 'Eror: Nó xe sta posibiłe exeguir ła modifega',
+'feedback-error3' => 'Errore: Nisuna risposta da ła API',
+'feedback-thanks' => 'Grasie! El to feedback el xe sta publicà a ła pàjina "[$2 $1]".',
 'feedback-close' => 'Fato',
+'feedback-bugcheck' => "Otimo! Verifega che nó 'l sia xà infrà i [$1 bug conosui].",
+'feedback-bugnew' => 'Controło efetuà. Segnała un novo bug',
 
 # Search suggestions
 'searchsuggest-search' => 'Serca',
 'searchsuggest-containing' => 'che contien...',
 
+# API errors
+'api-error-badaccess-groups' => 'Nó te si autorixà a cargar documenti so sta wiki.',
+'api-error-badtoken' => 'Eror interno: token fałà.',
+'api-error-copyuploaddisabled' => 'El cargamento tramite URL el xe dixabiłità so sto server.',
+'api-error-duplicate' => "So'l sito {{PLURAL:$1|ghe xe xà [$2 'n altro documento]|ghe xe xà [$2 altri documenti]}} có 'l steso contegnuo.",
+'api-error-duplicate-archive' => "{{PLURAL:$1|Ghe xera [$2 'n altro file]|Ghe xera [$2 altri file]}} xà inte'l sito có 'l steso contegnuo, ma {{PLURAL:$1|el xe sta scansełà|i xe stai scansełai}}.",
+'api-error-duplicate-archive-popup-title' => 'File duplic{{PLURAL:$1|à che xe xà sta scansełà|ai che i xe xà stai scansełai}}',
+'api-error-duplicate-popup-title' => '{{PLURAL:$1|documento duplicà|documenti duplicai}}',
+'api-error-empty-file' => 'El file sełesionà el gera vodo.',
+'api-error-emptypage' => 'Ła creasion de nove pàjine vode nó ła xe consentia.',
+'api-error-fetchfileerror' => 'Eror interno: ghe xe sta un problema durante el recupero del documento.',
+'api-error-fileexists-forbidden' => 'Un file de nome "$1" \'l existe xà e nò \'l pol esar sovrascrito.',
+'api-error-fileexists-shared-forbidden' => 'Un file de nome "$1" \'l existe xà inte\'l repository condivixo e nó \'l pol esar sovrascrito.',
+'api-error-file-too-large' => 'El file sełesionà el gera masa grando.',
+'api-error-filename-tooshort' => 'El nome del file el xe massa curto.',
+'api-error-filetype-banned' => 'Sto tipo de file el xe vietà.',
+'api-error-filetype-banned-type' => "$1 {{PLURAL:$4|nó 'l xe un tipo de file consentio|nó i xe tipi de file consentìi}}. {{PLURAL:$3|El tipo de file consentio el xe|I tipi de file consentìi i xe}} $2.",
+'api-error-filetype-missing' => "Al file ghe manca l'estension.",
+'api-error-hookaborted' => 'Ła modifega che te ghe proà a far ła xe sta interota da na estension.',
+'api-error-http' => 'Eror interno: inposibiłe conetarse al server.',
+'api-error-illegal-filename' => "El nome del file nó 'l xe parmeso.",
+'api-error-internal-error' => "Eror interno: calcosa xe ndà storo có l'elaborasion del to cargamento so ła wiki.",
+'api-error-invalid-file-key' => 'Eror interno: file nó prexente inte ła carteła de i file tenporanei.',
+'api-error-missingparam' => 'Eror interno: parametri de ła dimanda mancanti.',
+'api-error-missingresult' => 'Eror interno: inposibiłe determinar se ła copia ła xe riusia.',
+'api-error-mustbeloggedin' => "Te ghe da efetuar 'l aceso par cargar i file.",
+'api-error-mustbeposted' => 'Eror interno: ła dimanda dimanda HTTP POST.',
+'api-error-noimageinfo' => "El cargamento el xe riusio, ma 'l server nó el ne ga dato gnauna informasion so'l file.",
+'api-error-nomodule' => 'Eror interno: nó xe sta inpostà el moduło de cargamento.',
+'api-error-ok-but-empty' => 'Eror interno: nisuna risposta dal server.',
+'api-error-overwrite' => 'Nó xe parmeso de sorascrìvar un file existente.',
+'api-error-stashfailed' => "Eror interno: el server nó 'l xe riusio a memorixar el documento tenporaneo.",
+'api-error-publishfailed' => "Eror interno: el server nó 'l xe riusio a publicar el documento tenporaneo.",
+'api-error-timeout' => "El server nó 'l ga risposto entro el tenpo previsto.",
+'api-error-unclassified' => 'Se gà verifegà un eror sconosùo.',
+'api-error-unknown-code' => 'Eror sconosùo: "$1"',
+'api-error-unknown-error' => 'Eror interno: calcosa xe ndà storto có se jera drio proar a cargar el file.',
+'api-error-unknown-warning' => 'Avixo sconosùo: "$1".',
+'api-error-unknownerror' => 'Eror sconosùo: "$1".',
+'api-error-uploaddisabled' => 'El cargamento el xe dixabiłità so sta wiki.',
+'api-error-verification-error' => "Sto file el podaria esar danegià, o 'ver l'estension sbałià.",
+
 # Durations
 'duration-seconds' => '$1 {{PLURAL:$1|secondo|secondi}}',
 'duration-minutes' => '$1 {{PLURAL:$1|minuto|minuti}}',
index ed1f390..d5a2d69 100644 (file)
@@ -731,7 +731,6 @@ Alemba om anttud jäl'gmäine aiglehtesen kirjutez:",
 'template-semiprotected' => '(kaitud anonimoišpäi da uziš kävutajišpäi)',
 'hiddencategories' => "Nece lehtpol' om {{PLURAL:$1|1 peittud kategorijaspäi|$1 peittud kategorijoišpäi}}:",
 'edittools' => '<!-- Tänna sijatud tekst ozutadas redaktiruindan da jügutoitandan formiden al. -->',
-'nocreatetitle' => 'Lehtpoliden sädand om kaidetud',
 'nocreatetext' => "{{SITENAME}}-saitas uziden lehtpoliden sädand om kaidetud.
 Tö voit pörttas tagaze i redaktiruida toine lehtpol', vai [[Special:UserLogin|kirjutagatoiš sistemha, vai säkat registracii]].",
 'nocreate-loggedin' => 'Teile ei sa säta uzid lehtpolid.',
@@ -1198,11 +1197,13 @@ Ku tö kirjutat sen, nece nimi kävutadas, miše ozutada lehtpolen toižetajad.'
 'right-sendemail' => 'Oigeta e-počtad toižile kävutajile',
 'right-passwordreset' => 'Kacta e-kirjeižid peitsanan toižetandanke',
 
+# Special:Log/newusers
+'newuserlogpage' => 'Kävutajiden registracijan aigkirj',
+'newuserlogpagetext' => 'Tantoi registriruidud kävutajiden nimikirjutez.',
+
 # User rights log
 'rightslog' => 'Kävutajan oiktusiden aigkirj',
 'rightslogtext' => 'Nece om kävutajan oiktusiden toižetusen aigkirj.',
-'rightslogentry' => 'toižetin $1-kävutajan ühtnend gruppiš - oli $2, linneb $3',
-'rightsnone' => '(ei ole)',
 
 # Associated actions - in the sentence "You do not have permission to X"
 'action-read' => "lugeda necidä lehtpol't",
@@ -1689,10 +1690,6 @@ Kc. mugažo [[Special:WantedCategories|ectud kategorijoiden nimikirjutez]].',
 'activeusers-hidesysops' => 'Peitta administratorid',
 'activeusers-noresult' => 'Kävutajad ei olgoi löutud.',
 
-# Special:Log/newusers
-'newuserlogpage' => 'Kävutajiden registracijan aigkirj',
-'newuserlogpagetext' => 'Tantoi registriruidud kävutajiden nimikirjutez.',
-
 # Special:ListGroupRights
 'listgrouprights' => 'Kävutajiden gruppiden oiktused',
 'listgrouprights-group' => 'Grupp',
@@ -1801,6 +1798,8 @@ $UNWATCHURL
 
 Pid\'oitelend da joksii abu:
 {{canonicalurl:{{MediaWiki:Helppage}}}}',
+'created' => 'om sätud',
+'changed' => 'om toižetadud',
 
 # Delete
 'deletepage' => "Čuta lehtpol' poiš",
@@ -1961,7 +1960,7 @@ $1',
 'blanknamespace' => '(Pälehtpoled)',
 
 # Contributions
-'contributions' => 'Kävutajan tond',
+'contributions' => '{{GENDER:$1|Kävutajan}} tond',
 'contributions-title' => '$1-kävutajan tond',
 'mycontris' => 'Minun tond',
 'contribsub2' => '$1-kävutajan ($2) tond',
@@ -2595,6 +2594,7 @@ Ku fail redaktiruidihe sändan polhe, erased parametrad voidas erineda nügüdl
 'exif-gpsareainformation' => 'GPS-agjan nimi',
 'exif-gpsdatestamp' => 'GPS-dat',
 'exif-gpsdifferential' => 'GPS-differencialine kohenduz',
+'exif-jpegfilecomment' => 'Kommentarii JPEG-failha',
 'exif-keywords' => 'Avadimsanad',
 'exif-worldregiondest' => "Ozutadud mail'man region",
 'exif-countrydest' => 'Ozutadud ma',
@@ -2852,6 +2852,10 @@ Necen vahvištoitandkodan kävutamižen lopstrok om $4.',
 'confirm_purge_button' => 'OK',
 'confirm-purge-top' => 'Puhtastada necen lehtpolen keš?',
 
+# action=watch/unwatch
+'confirm-watch-button' => 'OK',
+'confirm-unwatch-button' => 'OK',
+
 # Multipage image navigation
 'imgmultipageprev' => "← edeline lehtpol'",
 'imgmultipagenext' => "jäl'ghine lehtpol' →",
@@ -2954,6 +2958,7 @@ Kävutagat normaline ezikacund.',
 'version-software' => 'Seižutadud programmišt',
 'version-software-product' => 'Produkt',
 'version-software-version' => 'Versii',
+'version-entrypoints-header-url' => 'URL',
 
 # Special:FilePath
 'filepath' => 'Te failannoks',
@@ -3052,7 +3057,7 @@ Kävutagat normaline ezikacund.',
 # New logging system
 'revdelete-restricted' => 'kaidendused administratoriden täht',
 'revdelete-unrestricted' => 'kaidendused heittud administratoriden täht',
-'newuserlog-byemail' => 'peisana om oigetud e-počtadme',
+'rightsnone' => '(ei ole)',
 
 # Feedback
 'feedback-subject' => 'Tem:',
@@ -3077,4 +3082,13 @@ Kävutagat normaline ezikacund.',
 'api-error-unknown-warning' => 'Tadmatoi varutuz: $1',
 'api-error-unknownerror' => 'Tundmatoi petuz: "$1"',
 
+# Durations
+'duration-seconds' => '$1 {{PLURAL:$1|sekund|sekunad}}',
+'duration-minutes' => '$1 {{PLURAL:$1|minut|minutad}}',
+'duration-hours' => '$1 {{PLURAL:$1|čas|časud}}',
+'duration-days' => '$1 {{PLURAL:$1|päiv|päiväd}}',
+'duration-weeks' => "$1 {{PLURAL:$1|nedal'|nedalid}}",
+'duration-years' => "$1 {{PLURAL:$1|voz'|vot}}",
+'duration-decades' => '$1 {{PLURAL:$1|dekad|dekadad}}',
+
 );
index 6940494..44e1dc8 100644 (file)
@@ -61,7 +61,7 @@ $specialPageAliases = array(
        'Ancientpages'              => array( 'Trang_cũ' ),
        'Badtitle'                  => array( 'Tựa_đề_hỏng' ),
        'Blankpage'                 => array( 'Trang_trắng' ),
-       'Block'                     => array( 'Cấm_IP' ),
+       'Block'                     => array( 'Cấm', 'Cấm_IP', 'Cấm_thành_viên', 'Cấm_người_dùng' ),
        'Blockme'                   => array( 'Khóa_tôi', 'Khoá_tôi' ),
        'Booksources'               => array( 'Nguồn_sách' ),
        'BrokenRedirects'           => array( 'Đổi_hướng_sai' ),
@@ -211,14 +211,17 @@ $magicWords = array(
        'img_page'                  => array( '1', 'trang=$1', 'trang $1', 'page=$1', 'page $1' ),
        'img_upright'               => array( '1', 'đứng', 'đứng=$1', 'đứng $1', 'upright', 'upright=$1', 'upright $1' ),
        'img_link'                  => array( '1', 'liên_kết=$1', 'link=$1' ),
+       'img_class'                 => array( '1', 'lớp=$1', 'class=$1' ),
        'int'                       => array( '0', 'NỘI:', 'INT:' ),
        'sitename'                  => array( '1', 'TÊNMẠNG', 'SITENAME' ),
        'ns'                        => array( '0', 'KGT:', 'NS:' ),
        'localurl'                  => array( '0', 'URLĐỊAPHƯƠNG:', 'LOCALURL:' ),
-       'articlepath'               => array( '0', 'LỐIBÀI', 'ARTICLEPATH' ),
+       'articlepath'               => array( '0', 'ĐƯỜNGDẪNBÀI', 'LỐIBÀI', 'ARTICLEPATH' ),
+       'pageid'                    => array( '0', 'IDTRANG', 'PAGEID' ),
        'server'                    => array( '0', 'MÁYCHỦ', 'SERVER' ),
        'servername'                => array( '0', 'TÊNMÁYCHỦ', 'SERVERNAME' ),
-       'scriptpath'                => array( '0', 'ĐƯỜNGDẪNSCRIPT', 'SCRIPTPATH' ),
+       'scriptpath'                => array( '0', 'ĐƯỜNGDẪNKỊCHBẢN', 'ĐƯỜNGDẪNSCRIPT', 'SCRIPTPATH' ),
+       'stylepath'                 => array( '0', 'ĐƯỜNGDẪNKIỂU', 'STYLEPATH' ),
        'grammar'                   => array( '0', 'NGỮPHÁP:', 'GRAMMAR:' ),
        'gender'                    => array( '0', 'GIỐNG:', 'GENDER:' ),
        'notitleconvert'            => array( '0', '__KHÔNGCHUYỂNTÊN__', '__NOTITLECONVERT__', '__NOTC__' ),
@@ -251,7 +254,9 @@ $magicWords = array(
        'pagesize'                  => array( '1', 'CỠTRANG', 'PAGESIZE' ),
        'numberingroup'             => array( '1', 'CỠNHÓM', 'NUMBERINGROUP', 'NUMINGROUP' ),
        'staticredirect'            => array( '1', '__ĐỔIHƯỚNGNHẤTĐỊNH__', '__STATICREDIRECT__' ),
+       'protectionlevel'           => array( '1', 'MỨCKHÓA', 'MỨCKHOÁ', 'PROTECTIONLEVEL' ),
        'url_path'                  => array( '0', 'ĐƯỜNGDẪN', 'PATH' ),
+       'url_query'                 => array( '0', 'TRUYVẤN', 'QUERY' ),
 );
 
 $datePreferences = array(
@@ -408,13 +413,13 @@ $messages = array(
 # Categories related messages
 'pagecategories' => '{{PLURAL:$1|Thể loại|Thể loại}}',
 'category_header' => 'Các trang trong thể loại “$1”',
-'subcategories' => 'Tiểu thể loại',
+'subcategories' => 'Thể loại con',
 'category-media-header' => 'Các tập tin trong thể loại “$1”',
 'category-empty' => "''Thể loại này hiện không có trang hay tập tin nào.''",
 'hidden-categories' => '{{PLURAL:$1|Thể loại ẩn|Thể loại ẩn}}',
 'hidden-category-category' => 'Thể loại ẩn',
-'category-subcat-count' => 'Thể loại này gồm {{PLURAL:$2|tiểu thể loại sau|{{PLURAL:$1||$1}} tiểu thể loại sau, trên tổng số $2 tiểu thể loại}}.',
-'category-subcat-count-limited' => 'Thể loại này gồm {{PLURAL:$1|tiểu thể loại|$1 tiểu thể loại}} sau.',
+'category-subcat-count' => 'Thể loại này gồm {{PLURAL:$2|thể loại con sau|{{PLURAL:$1||$1}} thể loại con sau, trên tổng số $2 thể loại con}}.',
+'category-subcat-count-limited' => 'Thể loại này gồm {{PLURAL:$1|thể loại con|$1 thể loại con}} sau.',
 'category-article-count' => '{{PLURAL:$2|Thể loại này gồm trang sau.|{{PLURAL:$1|Trang|$1 trang}} sau nằm trong thể loại này, trên tổng số $2 trang.}}',
 'category-article-count-limited' => '{{PLURAL:$1|Trang|$1 trang}} sau nằm trong thể loại hiện hành.',
 'category-file-count' => '{{PLURAL:$2|Thể loại này gồm tập tin sau.|{{PLURAL:$1|Tập tin|$1 tập tin}} sau nằm trong thể loại này, trong tổng số $2 tập tin.}}',
@@ -429,6 +434,7 @@ $messages = array(
 'newwindow' => '(mở cửa sổ mới)',
 'cancel' => 'Hủy bỏ',
 'moredotdotdot' => 'Thêm nữa…',
+'morenotlisted' => 'Có nhiều hơn danh sách này…',
 'mypage' => 'Trang cá nhân',
 'mytalk' => 'Tin nhắn',
 'anontalk' => 'Thảo luận với IP này',
@@ -544,8 +550,8 @@ $1',
 'policy-url' => 'Project:Quy định và hướng dẫn',
 'portal' => 'Cộng đồng',
 'portal-url' => 'Project:Cộng đồng',
-'privacy' => 'Chính sách về sự riêng tư',
-'privacypage' => 'Project:Chính sách về sự riêng tư',
+'privacy' => 'Quy định quyền riêng tư',
+'privacypage' => 'Project:Quy định quyền riêng tư',
 
 'badaccess' => 'Lỗi về quyền truy cập',
 'badaccess-group0' => 'Bạn không được phép thực hiện thao tác này.',
@@ -726,7 +732,7 @@ Hãy nhớ thay đổi [[Special:Preferences|tùy chọn cá nhân {{SITENAME}}]
 'gotaccount' => "Đã mở tài khoản rồi? '''$1'''.",
 'gotaccountlink' => 'Đăng nhập',
 'userlogin-resetlink' => 'Quên mất thông tin đăng nhập?',
-'createaccountmail' => 'qua thư điện tử',
+'createaccountmail' => 'Sử dụng mật khẩu ngẫu nhiên tạm và gửi nó cho địa chỉ thư điện tử được chỉ định ở dưới',
 'createaccountreason' => 'Lý do:',
 'badretype' => 'Hai mật khẩu không khớp.',
 'userexists' => 'Tên người dùng được nhập đã có người lấy.
@@ -788,6 +794,7 @@ Xin hãy đợi chốc lát rồi thử lại.',
 # E-mail sending
 'php-mail-error-unknown' => 'Lỗi không rõ trong hàm PHP mail()',
 'user-mail-no-addy' => 'Không có địa chỉ để gửi thư điện tử đến',
+'user-mail-no-body' => 'Không thể gửi thư điện tử rỗng hoặc có nội dung ngắn một cách vô lý.',
 
 # Change password dialog
 'resetpass' => 'Đổi mật khẩu',
@@ -856,6 +863,7 @@ Mật khẩu tạm: $2',
 'changeemail-oldemail' => 'Địa chỉ thư điện tử hiện tại:',
 'changeemail-newemail' => 'Địa chỉ thư điện tử mới:',
 'changeemail-none' => '(không có)',
+'changeemail-password' => 'Mật khẩu của bạn tại {{SITENAME}}:',
 'changeemail-submit' => 'Đổi địa chỉ',
 'changeemail-cancel' => 'Hủy bỏ',
 
@@ -941,7 +949,7 @@ Có thể nó đã bị di chuyển hoặc xóa đi trong khi bạn đang xem tr
 
 Có thể đổi mật khẩu cho tài khoản mới này 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 '''Back''' trên 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''' (''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.
@@ -959,9 +967,9 @@ Xem chi tiết trong [{{fullurl:{{#Special:Log}}/delete|page={{FULLPAGENAMEE}}}}
 'userpage-userdoesnotexist-view' => 'Chưa có tài khoản với tên “$1”.',
 'blocked-notice-logextract' => 'Người dùng này hiện đang bị cấm sửa đổi. Nhật trình cấm gần nhất được ghi ở dưới để tiện theo dõi:',
 'clearyourcache' => "'''Chú ý:''' Sau khi lưu trang, có thể bạn sẽ phải xóa bộ nhớ đệm của trình duyệt để xem các thay đổi.
-* '''Firefox / Safari:''' Giữ phím ''Shift'' trong khi nhấn ''Tải lại'' (''Reload''), hoặc nhấn tổ hợp ''Ctrl-F5'' hay ''Ctrl-R'' (⌘R trên Mac)
+* '''Firefox / Safari:''' Nhấn giữ phím ''Shift'' trong khi nhấn ''Tải lại'' (''Reload''), hoặc nhấn tổ hợp ''Ctrl-F5'' hay ''Ctrl-R'' (⌘R trên Mac)
 * '''Google Chrome:''' Nhấn tổ hợp ''Ctrl-Shift-R'' (⇧⌘R trên Mac)
-* '''Internet Explorer:''' Giữ phím ''Ctrl'' trong khi nhấn ''Làm tươi'' (''Refresh''), hoặc nhấn tổ hợp ''Ctrl-F5''
+* '''Internet Explorer:''' Nhấn giữ phím ''Ctrl'' trong khi nhấn ''Làm tươi'' (''Refresh''), hoặc nhấn tổ hợp ''Ctrl-F5''
 * '''Opera:''' Xóa bộ nhớ đệm trong ''Công cụ → Sở thích'' (''Tools → Preferences'')",
 'usercssyoucanpreview' => "'''Mẹo:''' Sử dụng nút “{{int:showpreview}}” để kiểm thử bản CSS của bạn trước khi lưu trang.",
 'userjsyoucanpreview' => "'''Mẹo:''' Sử dụng nút “{{int:showpreview}}” để kiểm thử bản JS của bạn trước khi lưu trang.",
@@ -1032,7 +1040,6 @@ Thông tin mới nhất trong nhật trình được ghi dưới đây để ti
 'template-semiprotected' => '(bị hạn chế sửa đổi)',
 'hiddencategories' => 'Trang này thuộc về {{PLURAL:$1|1 thể loại ẩn|$1 thể loại ẩn}}:',
 'edittools' => '<!-- Văn bản dưới đây sẽ xuất hiện phía dưới mẫu sửa đổi và tải lên. -->',
-'nocreatetitle' => 'Khả năng tạo trang bị hạn chế',
 'nocreatetext' => '{{SITENAME}} đã hạn chế khả năng tạo trang mới.
 Bạn có thể quay trở lại và sửa đổi các trang đã có, hoặc [[Special:UserLogin|đăng nhập hoặc tạo tài khoản]].',
 'nocreate-loggedin' => 'Bạn không có quyền tạo trang mới.',
@@ -1314,7 +1321,7 @@ Xem chi tiết trong [{{fullurl:{{#Special:Log}}/delete|page={{FULLPAGENAMEE}}}}
 'searchprofile-everything-tooltip' => 'Tìm tất cả nội dung (gồm cả các trang thảo luận)',
 'searchprofile-advanced-tooltip' => 'Tìm trong không gian tên tùy chọn',
 'search-result-size' => '$1 ({{PLURAL:$2|1 từ|$2 từ}})',
-'search-result-category-size' => '{{PLURAL:$1|1 trang thành viên|$1 trang thành viên}} ({{PLURAL:$2|1 tiểu thể loại|$2 tiểu thể loại}}, {{PLURAL:$3|1 tập tin|$3 tập tin}})',
+'search-result-category-size' => '$1 trang thành viên ($2 thể loại con, $3 tập tin)',
 'search-result-score' => 'Độ phù hợp: $1%',
 'search-redirect' => '(đổi hướng $1)',
 'search-section' => '(đề mục $1)',
@@ -1437,7 +1444,7 @@ Không có thể lùi lại tác động này.',
 'yourrealname' => 'Tên thật:',
 'yourlanguage' => 'Ngôn ngữ:',
 'yourvariant' => 'Dạng chữ của nội dung:',
-'prefs-help-variant' => 'Phép chính tả hoặc bộ chữ để hiển thị nội dung của các trang tại wiki này.',
+'prefs-help-variant' => 'Bộ chữ để hiển thị nội dung của các trang tại wiki này.',
 'yournick' => 'Chữ ký:',
 'prefs-help-signature' => 'Các ý kiến tại trang thảo luận nên được ký tên bằng cách gõ "<nowiki>~~~~</nowiki>", nó sẽ được đổi thành chữ ký của bạn cùng với thời điểm thảo luận.',
 'badsig' => 'Chữ ký không hợp lệ; hãy kiểm tra thẻ HTML.',
@@ -1582,15 +1589,13 @@ Nếu bạn đồng ý cung cấp, nó sẽ dùng để ghi nhận công lao c
 'right-sendemail' => 'Gửi thư điện tử cho thành viên khác',
 'right-passwordreset' => 'Xem các thư điện tử đặt lại mật khẩu',
 
+# Special:Log/newusers
+'newuserlogpage' => 'Nhật trình mở tài khoản',
+'newuserlogpagetext' => 'Đây là danh sách những tài khoản thành viên mở lên gần đây.',
+
 # User rights log
 'rightslog' => 'Nhật trình cấp quyền thành viên',
 'rightslogtext' => 'Đây là nhật trình lưu những thay đổi đối với các quyền hạn thành viên.',
-'rightslogentry' => 'đã đổi các nhóm liên kết của thành viên $1 từ $2 thành $3',
-'rightslogentry-autopromote' => 'được tự động phong cấp từ $2 đến $3',
-'logentry-rights-rights' => '$1 đã đổi các nhóm liên kết của $3 từ $4 đến $5',
-'logentry-rights-rights-legacy' => '$1 đã đổi các nhóm liên kết của $3',
-'logentry-rights-autopromote' => '$1 đã được tự động phong cấp từ $4 đến $5',
-'rightsnone' => '(không có)',
 
 # Associated actions - in the sentence "You do not have permission to X"
 'action-read' => 'đọc trang này',
@@ -2145,7 +2150,7 @@ Các mục <del>bị gạch bỏ</del> là các trang đã được sửa.',
 'movethispage' => 'Di chuyển trang này',
 'unusedimagestext' => 'Các tập tin sau tồn tại nhưng chưa được nhúng vào trang nào.
 Xin lưu ý là các trang Web bên ngoài có thể liên kết đến một tập tin ở đây qua một địa chỉ URL trực tiếp, do đó nhiều tập tin vẫn được liệt kê ở đây dù có thể nó đang được sử dụng.',
-'unusedcategoriestext' => 'Các trang thể loại này tồn tại mặc dù không có trang hay tiểu thể loại nào thuộc về nó.',
+'unusedcategoriestext' => 'Các trang thể loại này tồn tại mặc dù không có trang hay thể loại con nào thuộc về nó.',
 'notargettitle' => 'Chưa có mục tiêu',
 'notargettext' => 'Xin chỉ rõ trang hoặc thành viên cần thực hiện tác vụ.',
 'nopagetitle' => 'Không có trang đích nào như vậy',
@@ -2215,7 +2220,7 @@ Xem thêm [[Special:WantedCategories|thể loại cần thiết]].',
 'linksearch-pat' => 'Mẫu liên kết:',
 'linksearch-ns' => 'Không gian tên:',
 'linksearch-ok' => 'Tìm kiếm',
-'linksearch-text' => "Bạn có thể sử dụng ký tự đại diện (''wildcard''), ví dụ “*.wikipedia.org”; ít nhất phải có tên miền cấp cao nhất, thí dụ “*.org”.<br />Các giao thức này được hỗ trợ: <code>$1</code>; mặc định là <code>http://</code> nếu không định rõ giao thức trong truy vấn.",
+'linksearch-text' => "Bạn có thể sử dụng ký tự đại diện (''wildcard''), ví dụ “*.wikipedia.org”; ít nhất phải có tên miền cấp cao nhất, thí dụ “*.org”.<br />{{PLURAL:$2|Giao thức|Các giao thức}} này được hỗ trợ: <code>$1</code>; mặc định là <code>http://</code> nếu không định rõ giao thức trong truy vấn.",
 'linksearch-line' => '$1 được liên kết từ $2',
 'linksearch-error' => "Chỉ được sử dụng ký tự đại diện (''wildcard'') vào đầu tên miền (''hostname'').",
 
@@ -2228,16 +2233,12 @@ Xem thêm [[Special:WantedCategories|thể loại cần thiết]].',
 # Special:ActiveUsers
 'activeusers' => 'Danh sách thành viên tích cực',
 'activeusers-intro' => 'Dánh sách này liệt kê các thành viên đã hoạt động cách nào đó trong $1 ngày qua.',
-'activeusers-count' => '$1 {{PLURAL:$1|sửa đổi|sửa đổi}} trong {{PLURAL:$3|ngày|$3 ngày}} gần đây',
+'activeusers-count' => '$1 tác vụ trong {{PLURAL:$3|ngày|$3 ngày}} qua',
 'activeusers-from' => 'Hiển thị thành viên bắt đầu từ:',
 'activeusers-hidebots' => 'Ẩn robot',
 'activeusers-hidesysops' => 'Ẩn bảo quản viên',
 'activeusers-noresult' => 'Không thấy thành viên.',
 
-# Special:Log/newusers
-'newuserlogpage' => 'Nhật trình mở tài khoản',
-'newuserlogpagetext' => 'Đây là danh sách những tài khoản thành viên mở lên gần đây.',
-
 # Special:ListGroupRights
 'listgrouprights' => 'Nhóm thành viên',
 'listgrouprights-summary' => 'Dưới đây là danh sách nhóm thành viên được định nghĩa tại wiki này, với mức độ truy cập của từng nhóm.
@@ -2295,7 +2296,7 @@ Có [[{{MediaWiki:Listgrouprights-helppage}}|thông tin thêm]] về từng nhó
 'usermessage-editor' => 'Trình thông báo hệ thống',
 
 # Watchlist
-'watchlist' => 'Trang tôi theo dõi',
+'watchlist' => 'Danh sách theo dõi',
 'mywatchlist' => 'Trang theo dõi',
 'watchlistfor2' => 'Của $1 $2',
 'nowatchlist' => 'Danh sách theo dõi của bạn không có gì.',
@@ -2303,8 +2304,8 @@ Có [[{{MediaWiki:Listgrouprights-helppage}}|thông tin thêm]] về từng nhó
 'watchnologin' => 'Chưa đăng nhập',
 'watchnologintext' => 'Bạn phải [[Special:UserLogin|đăng nhập]] mới sửa đổi được danh sách theo dõi.',
 'addwatch' => 'Thêm vào danh sách theo dõi',
-'addedwatchtext' => "Trang “[[:$1]]” đã vào [[Special:Watchlist|danh sách theo dõi]] của bạn.
-Những sửa đổi đối với trang này và trang thảo luận của nó sẽ được liệt kê và '''tô đậm''' trong [[Special:RecentChanges|danh sách các “Thay đổi gần đây”]] để dễ nhận ra.",
+'addedwatchtext' => 'Trang “[[:$1]]” đã vào [[Special:Watchlist|danh sách theo dõi]] của bạn.
+Những sửa đổi đối với trang này và trang thảo luận của nó sẽ được liệt kê ở đấy.',
 'removewatch' => 'Gỡ khỏi danh sách theo dõi',
 'removedwatchtext' => 'Trang “[[:$1]]” đã được đưa ra khỏi [[Special:Watchlist|danh sách theo dõi]] của bạn.',
 'watch' => 'Theo dõi',
@@ -2338,7 +2339,7 @@ Những sửa đổi đối với trang này và trang thảo luận của nó s
 'enotif_subject_moved' => 'Trang $1 tại {{SITENAME}} đã được di chuyển bởi $2.',
 'enotif_subject_restored' => 'Trang $1 tại {{SITENAME}} đã được phục hồi bởi $2.',
 'enotif_subject_changed' => 'Trang $1 tại {{SITENAME}} đã được thay đổi bởi $2.',
-'enotif_body_intro_deleted' => 'Trang $1 tại {{SITENAME}} đã được $2 xóa vào $PAGEEDITDATE. Xem phiên bản hiện hành tại $3 .',
+'enotif_body_intro_deleted' => 'Trang $1 tại {{SITENAME}} đã được $2 xóa vào $PAGEEDITDATE. Xem $3 .',
 'enotif_body_intro_created' => 'Trang $1 tại {{SITENAME}} đã được $2 tạo ra vào $PAGEEDITDATE. Xem phiên bản hiện hành tại $3 .',
 'enotif_body_intro_moved' => 'Trang $1 tại {{SITENAME}} đã được $2 di chuyển vào $PAGEEDITDATE. Xem phiên bản hiện hành tại $3 .',
 'enotif_body_intro_restored' => 'Trang $1 tại {{SITENAME}} đã được $2 phục hồi vào $PAGEEDITDATE. Xem phiên bản hiện hành tại $3 .',
@@ -2372,6 +2373,8 @@ $UNWATCHURL
 
 Phản hồi và cần sự hỗ trợ:
 {{canonicalurl:{{MediaWiki:Helppage}}}}',
+'created' => 'viết mới',
+'changed' => 'thay đổi',
 
 # Delete
 'deletepage' => 'Xóa trang',
@@ -2440,6 +2443,8 @@ quay về phiên bản cuối của $2.',
 'prot_1movedto2' => '[[$1]] đổi thành [[$2]]',
 'protect-badnamespace-title' => 'Không gian tên không thể khóa',
 'protect-badnamespace-text' => 'Không thể khóa các trang tại không gian tên này.',
+'protect-norestrictiontypes-text' => 'Không thể khóa trang này vì không có sẵn tác vụ nào để hạn chế.',
+'protect-norestrictiontypes-title' => 'Trang không khóa được',
 'protect-legend' => 'Xác nhận khóa',
 'protectcomment' => 'Lý do:',
 'protectexpiry' => 'Thời hạn:',
@@ -2455,9 +2460,9 @@ hiện tại của trang '''$1''':",
 Đây là trạng thái hiện tại của trang '''$1''':",
 'protect-cascadeon' => 'Trang này hiện bị khóa vì nó được nhúng vào {{PLURAL:$1|những trang|trang}} dưới đây bị khóa với tùy chọn “khóa theo tầng” được kích hoạt. Bạn có thể đổi mức độ khóa của trang này, nhưng nó sẽ không ảnh hưởng đến việc khóa theo tầng.',
 'protect-default' => 'Cho phép mọi thành viên',
-'protect-fallback' => 'Cần quyền “$1”',
-'protect-level-autoconfirmed' => 'Cấm thành viên mới và người dùng chưa mở tài khoản',
-'protect-level-sysop' => 'Cấm mọi thành viên (trừ bảo quản viên)',
+'protect-fallback' => 'Chỉ cho phép những người dùng có quyền “$1”',
+'protect-level-autoconfirmed' => 'Chỉ cho phép các thành viên tự động xác nhận',
+'protect-level-sysop' => 'Chỉ cho phép các bảo quản viên',
 'protect-summary-cascade' => 'khóa theo tầng',
 'protect-expiring' => 'hết hạn $1 (UTC)',
 'protect-expiring-local' => 'hết hạn $1',
@@ -2756,7 +2761,7 @@ Bạn có thể cập nhật tự động các trang đổi hướng đến tên
 Nếu bạn chọn không cập nhật, hãy nhớ kiểm tra [[Special:DoubleRedirects|đổi hướng kép]] hoặc [[Special:BrokenRedirects|đổi hướng đến trang không tồn tại]].
 Bạn phải chịu trách nhiệm đảm bảo các liên kết đó tiếp tục trỏ đến nơi chúng cần đến.
 
-Chú ý rằng trang sẽ '''không''' bị di chuyển nếu đã có một trang tại tên mới, trừ khi nó rỗng hoặc là trang đổi hướng và không có lịch sử sửa đổi trước đây.
+Chú ý rằng trang sẽ '''không''' bị di chuyển nếu đã có một trang tại tên mới, trừ khi nó là trang đổi hướng và không có lịch sử sửa đổi trước đây.
 Điều này có nghĩa là bạn có thể đổi tên trang lại như cũ nếu bạn có nhầm lẫn, và bạn không thể ghi đè lên một trang đã có sẵn.
 
 '''CẢNH BÁO!'''
@@ -2937,6 +2942,7 @@ Lưu nó vào máy tính của bạn rồi tải nó lên đây.',
 'import-error-interwiki' => 'Trang “$1” không được nhập vì tên của nó được dành riêng cho liên kết ngoài (liên wiki).',
 'import-error-special' => 'Trang “$1” không được nhập vì nó thuộc về không gian tên đặc biệt không cho phép các trang không mặc định.',
 'import-error-invalid' => 'Trang “$1” không được nhập vì tên của nó không hợp lệ.',
+'import-error-unserialize' => 'Không thể giải tuần tự hóa phiên bản $2 của trang “$1”. Tập tin kết xuất cho rằng phiên bản có mô hình nội dung $3 được tuần tự hóa theo định dạng $4.',
 'import-options-wrong' => '{{PLURAL:$2|Tùy chọn|Các tùy chọn}} có vấn đề: <nowiki>$1</nowiki>',
 'import-rootpage-invalid' => 'Trang đích không hợp lệ.',
 'import-rootpage-nosubpage' => 'Không gian tên “$1” của trang gốc không cho phép các trang con.',
@@ -2971,10 +2977,10 @@ Lưu nó vào máy tính của bạn rồi tải nó lên đây.',
 'tooltip-pt-anonlogin' => 'Không đăng nhập vẫn tham gia được, tuy nhiên đăng nhập sẽ lợi hơn.',
 'tooltip-pt-logout' => 'Đăng xuất',
 'tooltip-ca-talk' => 'Thảo luận về trang này',
-'tooltip-ca-edit' => 'Bạn có thể sửa được trang này. Xin xem thử trước khi lưu.',
+'tooltip-ca-edit' => 'Bạn có thể sửa được trang này! (Xin vui lòng xem thử trước khi lưu.)',
 'tooltip-ca-addsection' => 'Bắt đầu một đề mục mới',
 'tooltip-ca-viewsource' => 'Trang này được khóa. Bạn có thể xem mã nguồn.',
-'tooltip-ca-history' => 'Những phiên bản cũ của trang này.',
+'tooltip-ca-history' => 'Các phiên bản cũ của trang này',
 'tooltip-ca-protect' => 'Khóa trang này lại',
 'tooltip-ca-unprotect' => 'Thay đổi mức khóa của trang này',
 'tooltip-ca-delete' => 'Xóa trang này',
@@ -3119,7 +3125,8 @@ Lưu nó vào máy tính của bạn rồi tải nó lên đây.',
 'pageinfo-recent-authors' => 'Số người dùng sửa đổi gần đây',
 'pageinfo-magic-words' => 'Từ thần chú ($1)',
 'pageinfo-hidden-categories' => 'Thể loại ẩn ($1)',
-'pageinfo-templates' => 'Bản mẫu được nhúng ($1)',
+'pageinfo-templates' => '{{PLURAL:$1|Bản mẫu|Các bản mẫu}} được nhúng ($1)',
+'pageinfo-transclusions' => '{{PLURAL:$1|Trang|Các trang}} nhúng ($1)',
 'pageinfo-toolboxlink' => 'Thông tin trang',
 'pageinfo-redirectsto' => 'Đổi hướng đến',
 'pageinfo-redirectsto-info' => 'thông tin',
@@ -3128,6 +3135,10 @@ Lưu nó vào máy tính của bạn rồi tải nó lên đây.',
 'pageinfo-protect-cascading' => 'Khóa theo tầng từ đây',
 'pageinfo-protect-cascading-yes' => 'Có',
 'pageinfo-protect-cascading-from' => 'Khóa theo tầng từ',
+'pageinfo-category-info' => 'Thông tin về thể loại',
+'pageinfo-category-pages' => 'Số trang',
+'pageinfo-category-subcats' => 'Số thể loại con',
+'pageinfo-category-files' => 'Số tập tin',
 
 # Skin names
 'skinname-standard' => 'Cổ điển',
@@ -3152,7 +3163,7 @@ Lưu nó vào máy tính của bạn rồi tải nó lên đây.',
 'markedaspatrollederrornotify' => 'Đánh dấu tuần tra bị thất bại.',
 
 # Patrol log
-'patrol-log-page' => 'Nhật  tuần tra',
+'patrol-log-page' => 'Nhật trình tuần tra',
 'patrol-log-header' => 'Đây là nhật trình tuần tra phiên bản.',
 'log-show-hide-patrol' => '$1 nhật trình tuần tra',
 
@@ -3184,6 +3195,7 @@ Nếu thực thi nó máy tính của bạn có thể bị tiếm quyền.",
 'file-nohires' => 'Không có độ phân giải cao hơ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-preview' => 'Kích thước của ảnh xem thử: $1.',
 'show-big-image-other' => '{{PLURAL:$2|Độ phân giải|Các độ phân giải}} khác: $1.',
@@ -3218,6 +3230,8 @@ Nếu thực thi nó máy tính của bạn có thể bị tiếm quyền.",
 'minutes' => '$1 phút',
 'hours' => '$1 giờ',
 'days' => '$1 ngày',
+'months' => '$1 tháng',
+'years' => '$1 năm',
 'ago' => 'cách đây $1',
 'just-now' => 'hồi nãy',
 
@@ -3380,7 +3394,7 @@ Những thông tin khác mặc định sẽ được ẩn đi.
 'exif-gpslongituderef' => 'Kinh độ đông hay tây',
 'exif-gpslongitude' => 'Kinh độ',
 'exif-gpsaltituderef' => 'Tham chiếu cao độ',
-'exif-gpsaltitude' => 'Độ cao',
+'exif-gpsaltitude' => 'Cao độ',
 'exif-gpstimestamp' => 'Giờ GPS (đồng hồ nguyên tử)',
 'exif-gpssatellites' => 'Vệ tinh nhân tạo dùng để đo',
 'exif-gpsstatus' => 'Tình trạng đầu thu',
@@ -3988,7 +4002,7 @@ Các hình ảnh được hiển thị ở kích thước tối đa, còn các l
 'specialpages-group-highuse' => 'Trang được dùng nhiều',
 'specialpages-group-pages' => 'Danh sách các trang',
 'specialpages-group-pagetools' => 'Công cụ cho trang',
-'specialpages-group-wiki' => 'Dữ liệu và công cụ cho wiki',
+'specialpages-group-wiki' => 'Dữ liệu và công cụ',
 'specialpages-group-redirects' => 'Đang đổi hướng trang đặc biệt',
 'specialpages-group-spam' => 'Công cụ chống spam',
 
@@ -4085,8 +4099,12 @@ Các hình ảnh được hiển thị ở kích thước tối đa, còn các l
 'logentry-newusers-newusers' => 'Đã mở tài khoản người dùng $1',
 'logentry-newusers-create' => 'Đã mở tài khoản người dùng $1',
 'logentry-newusers-create2' => '$1 đã mở tài khoản người dùng $3',
+'logentry-newusers-byemail' => '$1 đã mở tài khoản người dùng $3 và nhận mật khẩu qua thư điện tử',
 'logentry-newusers-autocreate' => 'Tài khoản $1 đã được mở tự động',
-'newuserlog-byemail' => 'gửi mật khẩu qua thư điện tử',
+'logentry-rights-rights' => '$1 đã đổi các nhóm liên kết của $3 từ $4 đến $5',
+'logentry-rights-rights-legacy' => '$1 đã đổi các nhóm liên kết của $3',
+'logentry-rights-autopromote' => '$1 đã được tự động phong cấp từ $4 đến $5',
+'rightsnone' => '(không có)',
 
 # Feedback
 'feedback-bugornote' => 'Nếu bạn đã sẵn sàng để miêu tả các chi tiết của một vấn đề kỹ thuật, xin vui lòng [$1 báo cáo lỗi].
@@ -4140,6 +4158,7 @@ Nếu không thì bạn có thể điền biểu mẫu đơn giản ở dưới.
 'api-error-ok-but-empty' => 'Lỗi nội bộ: Máy chủ không phản hồi.',
 'api-error-overwrite' => 'Không được ghi đè một tập tin đã tồn tại.',
 'api-error-stashfailed' => 'Lỗi nội bộ: Máy chủ bị thất bại trong việc lưu giữ tập tin tạm.',
+'api-error-publishfailed' => 'Lỗi nội bộ: Máy chủ bị thất bại trong việc xuất bản tập tin tạm.',
 'api-error-timeout' => 'Máy chủ không đáp ứng trong thời gian dự kiến.',
 'api-error-unclassified' => 'Gặp lỗi không ngờ',
 'api-error-unknown-code' => 'Lỗi không rõ: “$1”',
@@ -4160,6 +4179,4 @@ Nếu không thì bạn có thể điền biểu mẫu đơn giản ở dưới.
 'duration-centuries' => '$1 thế kỷ',
 'duration-millennia' => '$1 thiên niên kỷ',
 
-# Unknown messages
-'svg-long-error' => 'Tập tin SVG có lỗi: $1',
 );
index 8060c4f..926cb12 100644 (file)
@@ -549,6 +549,9 @@ Hirmid sagsd, das Du den dhägsd '''selbâr gschriim''' hasd, das däär dhägsd
 
 'grouppage-sysop' => '{{ns:project}}:Adminisdradoorn',
 
+# Special:Log/newusers
+'newuserlogpage' => 'Brodoghol iwâr dii naja bearbajdâr-ôômeldunga',
+
 # User rights log
 'rightslog' => 'Brodoghol fo rächde-dsuudaalung an bearbajdâr',
 
@@ -648,9 +651,6 @@ S'gajd awâr aa â [[Special:WhatLinksHere/$2|lisdn mid alâ fârwajs]].",
 # Special:LinkSearch
 'linksearch' => 'Linggs nach ausârhalb',
 
-# Special:Log/newusers
-'newuserlogpage' => 'Brodoghol iwâr dii naja bearbajdâr-ôômeldunga',
-
 # Special:ListGroupRights
 'listgrouprights-members' => '(Lisdn fon dâ midgliidâr)',
 
index 3126bef..7917e29 100644 (file)
@@ -719,7 +719,6 @@ Geban, kel efärmükon oni, egevon kodi at: $1",
 'template-protected' => '(pejelon)',
 'template-semiprotected' => '(dilo pejelon)',
 'hiddencategories' => 'Pad at duton lü {{PLURAL:$1|klad peklänedöl 1|klads peklänedöl $1}}:',
-'nocreatetitle' => 'Padijafam pemiedükon',
 'nocreatetext' => '{{SITENAME}} emiedükon mögi ad jafön padis nulik.
 Kanol redakön padi dabinöl, u [[Special:UserLogin|nunädön oli u jafön kali]].',
 'nocreate-loggedin' => 'No dalol jafön padis nulik.',
@@ -1139,11 +1138,13 @@ Dalol i dälön votikanes kosikön ko ol yufü gebana- u bespikapad olik nes sä
 'right-siteadmin' => 'Lökofärmükön e maifükön nünodemi',
 'right-sendemail' => 'Sedön penedis leäktronik lü gebans votik',
 
+# Special:Log/newusers
+'newuserlogpage' => 'Lised gebanijafamas',
+'newuserlogpagetext' => 'Is palisedons jafams gebanas nulik.',
+
 # User rights log
 'rightslog' => 'Jenotalised gebanagitätas',
 'rightslogtext' => 'Is palisedons votükams gebanagitätas.',
-'rightslogentry' => 'grupalimanam gebana: $1 pevotükon de $2 ad $3',
-'rightsnone' => '(nonik)',
 
 # Associated actions - in the sentence "You do not have permission to X"
 'action-read' => 'reidön padi at',
@@ -1607,10 +1608,6 @@ Protoks pestütöl: <code>$1</code>',
 'activeusers-hidesysops' => 'Klänedolöd guvanis',
 'activeusers-noresult' => 'Geban nonik petuvon.',
 
-# Special:Log/newusers
-'newuserlogpage' => 'Lised gebanijafamas',
-'newuserlogpagetext' => 'Is palisedons jafams gebanas nulik.',
-
 # Special:ListGroupRights
 'listgrouprights' => 'Gitäts gebanagrupa',
 'listgrouprights-summary' => 'Is palisedons gebanagrups in vük at dabinöls, sa gitäts tefik onsik.
@@ -1717,6 +1714,8 @@ Ad votükön parametami galädaliseda olik, loglös
 
 Küpets e yuf pluik:
 {{canonicalurl:{{MediaWiki:Helppage}}}}',
+'created' => 'pejafon',
+'changed' => 'pevotüköl',
 
 # Delete
 'deletepage' => 'Moükolöd padi',
@@ -2810,7 +2809,7 @@ Magods pajonons ma fomät gudikün, ragivasots votik pamaifükons stedöfo kobü
 # New logging system
 'revdelete-restricted' => 'miedükams pelonöfükons pro guvans',
 'revdelete-unrestricted' => 'miedükams pro guvans pemoükons',
-'newuserlog-byemail' => 'letavöd pesedon me pot leäktronik',
+'rightsnone' => '(nonik)',
 
 # Search suggestions
 'searchsuggest-search' => 'Suk',
index 5067968..6ca447b 100644 (file)
@@ -8,6 +8,7 @@
  * @file
  *
  * @author 2Q
+ * @author Aig mest ei varasta
  * @author Andrijko Z.
  * @author Comp1089
  * @author Erdemaslancan
@@ -444,9 +445,11 @@ Proovvi lizät etsün alkuu ''all:'', nii ettsü etsib kõikkõõ sisältoo (taa
 'grouppage-user' => '{{ns:project}}:Сäüttijäd',
 'grouppage-sysop' => '{{ns:project}}:Praviťeľad',
 
+# Special:Log/newusers
+'newuserlogpage' => 'Uuvvõd cäüttijäd',
+
 # User rights log
 'rightslog' => 'Cäütteminõikuslogi',
-'rightsnone' => '(eb õõ)',
 
 # Associated actions - in the sentence "You do not have permission to X"
 'action-edit' => 'muutu sitä cülciä',
@@ -597,9 +600,6 @@ Seness [$2 kuvauhsõ lehocülless] informaattsija on alapallõ annõttu.',
 # Special:ListUsers
 'listusers-submit' => 'Näüt väľľää',
 
-# Special:Log/newusers
-'newuserlogpage' => 'Uuvvõd cäüttijäd',
-
 # Special:ListGroupRights
 'listgrouprights-members' => '(selttsilainspiiska)',
 
@@ -609,7 +609,7 @@ Seness [$2 kuvauhsõ lehocülless] informaattsija on alapallõ annõttu.',
 'emailmessage' => 'Ilmottamin:',
 
 # Watchlist
-'watchlist' => 'Minu kattsõspiiska',
+'watchlist' => 'Kattsõspiiska',
 'mywatchlist' => 'Minu kattsõspiiska',
 'watchlistfor2' => '$2 - $1 vart',
 'addedwatchtext' => "Cülci \"[[:\$1]]\" on lisättü Teďďee [[Special:Watchlist|kattsospiizgallõ]].
@@ -688,7 +688,7 @@ Cüľľellä $2 on spiiska viimeiziss pühcimühsiiss.',
 'blanknamespace' => '(Artikkelid)',
 
 # Contributions
-'contributions' => 'Cäüttijää avittamizõd',
+'contributions' => '{{GENDER:$1|Cäüttijää}} avittamizõd',
 'contributions-title' => 'Cäüttijää $1 avittamizõd',
 'mycontris' => 'Minu avittamizõd',
 'contribsub2' => 'Cäüttijää $1 ($2) avittamizõd',
@@ -962,6 +962,9 @@ Kui faili on muutõttu, siiz detaaľid võivad õlla kahõllaizõd muutõtull fa
 # HTML forms
 'htmlform-selectorother-other' => 'Muu',
 
+# New logging system
+'rightsnone' => '(eb õõ)',
+
 # Feedback
 'feedback-message' => 'Ilmottamin:',
 'feedback-cancel' => 'Otmeńoit',
index a7ee7e7..f02e1ba 100644 (file)
@@ -646,7 +646,6 @@ Ku klõpsahtat nuppi \"{{int:savearticle}}\", sis pästetäs '''õnnõ''' ülemb
 'template-protected' => '(ärqkaidsõt)',
 'template-semiprotected' => '(ärqkaidsõduq nimeldä ja vahtsõq pruukjaq)',
 'hiddencategories' => 'Seo leht kuulus {{PLURAL:$1|1 käkitühe katõgooriahe|$1 käkitühe katõgooriahe}}:',
-'nocreatetitle' => 'Lehekülgi luuminõ piiret',
 'nocreatetext' => '{{SITENAME}} lupa-i luvvaq vahtsit lehti.
 Võit toimõndaq olõmanolõvit lehti vai [[Special:UserLogin|minnäq nimega sisse]].',
 'nocreate-loggedin' => 'Sul olõ-i lupa luvvaq vahtsit {{SITENAME}} lehti.',
@@ -789,6 +788,7 @@ Lisateedüst või ollaq [{{fullurl:{{#Special:Log}}/suppress|page={{FULLPAGENAME
 'searchprofile-everything-tooltip' => 'Otsiq egält puult (ka arotuslehti päält)',
 'searchprofile-advanced-tooltip' => 'Otsiq etteannõtuist nimeruumõst',
 'search-result-size' => '$1 ({{PLURAL:$2|1 sõna|$2 sõnna}})',
+'search-result-category-size' => '{{PLURAL:$1|1 lehekülg|$1 lehekülge}} ({{PLURAL:$2|1 alambkatõgooria|$2 alambkatõgooriat}}, {{PLURAL:$3|1 fail|$3 faili}})',
 'search-redirect' => '(ümbresaatminõ $1)',
 'search-section' => '(alljago $1)',
 'search-suggest' => 'Kas mõtlit: $1',
@@ -948,11 +948,12 @@ Taa tohe-i ollaq rohkõmb ku $1 {{PLURAL:$1|märk|märki}}.",
 'right-ipblock-exempt' => 'Minnäq müüdä automaatsist kinniqpidämiisist ni aadrõsijao ja IP-kinniqpidämiisist',
 'right-proxyunbannable' => 'Minnäq müüdä automaatsist vaihõserveri kinniqpidämiisist',
 
+# Special:Log/newusers
+'newuserlogpage' => 'Vahtsõq pruukjaq',
+
 # User rights log
 'rightslog' => 'Pruukmisõiguisi muutmisõ nimekiri',
 'rightslogtext' => 'Taa om pruukmisõiguisi muutmiisi nimekiri.',
-'rightslogentry' => 'Pruukja $1 õigusõq muudõti ümbre rühmäst $2 rühmä $3',
-'rightsnone' => '(olõ-i õiguisi)',
 
 # Associated actions - in the sentence "You do not have permission to X"
 'action-edit' => 'seod lehte toimõndaq',
@@ -963,6 +964,10 @@ Taa tohe-i ollaq rohkõmb ku $1 {{PLURAL:$1|märk|märki}}.",
 'recentchanges-legend' => 'Viimätside muutmiisi säädmine',
 'recentchanges-summary' => 'Kaeq seo lehe päält viimätsit muutmiisi.',
 'recentchanges-feed-description' => 'Kaeq seo lehe pääl {{SITENAME}} viimätsit muutmiisi.',
+'recentchanges-label-newpage' => 'Seo muutminõ lõi vahtsõ leheküle',
+'recentchanges-label-minor' => 'Taa om väiku parandus',
+'recentchanges-label-bot' => "Seo muutmisõ tekk' robot",
+'recentchanges-label-unpatrolled' => 'Seod muutmist olõ-õi viil üle kaet',
 'rcnote' => 'Tan ommaq {{PLURAL:$1|üts muutus|$1 viimäst muutmist}}, miä ommaq tettüq {{PLURAL:$2|üte viimädse päävä|$2 viimädse päävä}} seen (kuupääväst $5, $4 lugõma naatõn).',
 'rcnotefrom' => "Tan ommaq muutmisõq kuupääväst '''$2''' pääle (näüdätäs kooniq '''$1''' muutmist).",
 'rclistfrom' => 'Näütäq muutmiisi kuupääväst $1 pääle',
@@ -1283,9 +1288,6 @@ Also see [[Special:WantedCategories|wanted categories]].',
 'listusers-submit' => 'Näütäq',
 'listusers-noresult' => 'Olõ-s pruukjit.',
 
-# Special:Log/newusers
-'newuserlogpage' => 'Vahtsõq pruukjaq',
-
 # Special:ListGroupRights
 'listgrouprights' => 'Pruukjarühmi õigusõq',
 'listgrouprights-members' => '(liikmidõ nimekiri)',
@@ -1314,6 +1316,7 @@ ja sul piät umin [[Special:Preferences|säädmiisin]] olõma e-postiaadrõs, et
 # Watchlist
 'watchlist' => 'Perräkaemisnimekiri',
 'mywatchlist' => 'Perräkaemisnimekiri',
+'watchlistfor2' => 'Pruukja $1 $2 jaos',
 'nowatchlist' => 'Perräkaemisnimekiri om tühi.',
 'watchlistanontext' => 'Perräkaemisnimekirä pruukmisõs $1.',
 'watchnologin' => 'Olõ-i nimega sisse mint',
@@ -1366,6 +1369,8 @@ Inämb seo lehe kotsilõ teedäqandmiisi saadõta-i. Võit ka kõik su perräkae
 Perräkaemisnimekirä säädmiisi saat muutaq lehe pääl: {{canonicalurl:Special:Watchlist/edit}}
 
 As\'a kotsilõ mano kaiaq ja küssü saat lehe päält: {{canonicalurl:{{MediaWiki:Helppage}}}}',
+'created' => 'lehe loonuq',
+'changed' => 'lehte muutnuq',
 
 # Delete
 'deletepage' => 'Kistudaq lehekülg ärq',
@@ -1497,7 +1502,7 @@ Perämäidsi kistutuisi ja tagasitegemiisi saat kaiaq [[Special:Log/delete|kistu
 'sp-contributions-newbies' => 'Näütäq õnnõ vahtsidõ pruukjidõ toimõnduisi',
 'sp-contributions-newbies-sub' => 'Vahtsidõ pruukjidõ toimõndusõq',
 'sp-contributions-blocklog' => 'Kinniqpidämisnimekiri',
-'sp-contributions-talk' => 'Arotus',
+'sp-contributions-talk' => 'arotus',
 'sp-contributions-userrights' => 'Pruukja õiguisi muutminõ',
 'sp-contributions-search' => 'Otsiq muutmiisi',
 'sp-contributions-username' => 'Puutri võrgoaadrõs vai pruukjanimi:',
@@ -2257,4 +2262,7 @@ Prooviq harilikku kaehust.',
 'specialpages-group-wiki' => 'Vikiteedüseq ja tüüriistaq',
 'specialpages-group-redirects' => 'Ümbrenäütämistallitusleheq',
 
+# New logging system
+'rightsnone' => '(olõ-i õiguisi)',
+
 );
index 48e1aee..c1a3c61 100644 (file)
@@ -699,7 +699,6 @@ Li dierinne intrêye do djournå est håynêye chal pa dzo po referince:",
 'template-protected' => '(protedjî)',
 'template-semiprotected' => '(dimey-protedjî)',
 'hiddencategories' => "Cisse pådje ci est mimbe {{PLURAL:$1|d' ene categoreye catcheye|di $1 categoreyes catcheyes}}:",
-'nocreatetitle' => 'Ahivaedje di pådjes limité',
 'nocreatetext' => "{{SITENAME}} a limité l' possibilité d' ahiver des novelès pådjes.
 Vos ploz rivni en erî eyet candjî ene pådje k' egzistêye dedja, oudonbén, [[Special:UserLogin|vos elodjî ou ahiver on conte d' uzeu]].",
 'nocreate-loggedin' => "Vos n' avoz nén l' droet d' ahiver des novelès pådjes.",
@@ -1061,12 +1060,13 @@ Ciste infôrmacion serè publike po tertos.",
 'right-unblockself' => 'Si disbloker lu-minme',
 'right-protect' => "Candjî les liveas d' protedjaedje eyet candjî les pådjes protedjeyes",
 
+# Special:Log/newusers
+'newuserlogpage' => 'Djournå des noveas uzeus',
+'newuserlogpagetext' => "Chal pa dzo c' est ene djivêye des uzeus novelmint eredjîstrés.",
+
 # User rights log
 'rightslog' => 'Djournå des droets des uzeus',
 'rightslogtext' => "Çouchal, c' est on djournå des candjmints des droets des uzeus.",
-'rightslogentry' => "a candjî l' uzeu «$1» do groupe «$2» viè «$3»",
-'rightslogentry-autopromote' => 'a stî otomaticmint candjî di «$2» a «$3»',
-'rightsnone' => '(nouk)',
 
 # Associated actions - in the sentence "You do not have permission to X"
 'action-read' => 'lére cisse pådje ci',
@@ -1424,10 +1424,6 @@ Protocoles ricnoxhous: <code>$1</code> (nelzès metoz nén dins vosse tchinne di
 'listusers-noresult' => 'Nol uzeu di trové.',
 'listusers-blocked' => '({{GENDER:$1|bloké|blokêye}})',
 
-# Special:Log/newusers
-'newuserlogpage' => 'Djournå des noveas uzeus',
-'newuserlogpagetext' => "Chal pa dzo c' est ene djivêye des uzeus novelmint eredjîstrés.",
-
 # Special:ListGroupRights
 'listgrouprights-members' => '(djivêye des mimbes)',
 
@@ -1520,6 +1516,8 @@ $UNWATCHURL
 
 Po pus d\' aidance:
 {{canonicalurl:{{MediaWiki:Helppage}}}}',
+'created' => 'ahivêye',
+'changed' => 'candjeye',
 
 # Delete
 'deletepage' => "Disfacer l' pådje",
@@ -2341,7 +2339,7 @@ Acertinez s' i vs plait ki vos vloz vormint rifé cisse pådje ci.",
 'logentry-newusers-create' => "$1 a-st ahivé on conte d' uzeu",
 'logentry-newusers-create2' => "$1 a-st ahivé on conte d' uzeu $3",
 'logentry-newusers-autocreate' => 'li conte $1 a stî ahivé otomaticmint',
-'newuserlog-byemail' => "emilaedje d' on scret",
+'rightsnone' => '(nouk)',
 
 # Feedback
 'feedback-subject' => 'Sudjet',
index 8aa3e50..e3dbb83 100644 (file)
@@ -112,7 +112,7 @@ $messages = array(
 
 'underline-always' => 'Pirme',
 'underline-never' => 'Diri',
-'underline-default' => 'An aada-nga-daan nga panngaykayan',
+'underline-default' => 'An panmutos o pandalikyat nga aada-nga-daan',
 
 # Font style option in Special:Preferences
 'editfont-style' => 'Estilo hin font ha lugar hin pagliwat',
@@ -199,8 +199,9 @@ $messages = array(
 'newwindow' => '(nabuklad hin bag-o nga tamboan o bintana)',
 'cancel' => 'Pasagdi',
 'moredotdotdot' => 'Damo pa nga…',
-'mypage' => 'Akon pakli',
-'mytalk' => 'Akon paghingay',
+'morenotlisted' => 'Damo pa nga waray gintalaan...',
+'mypage' => 'Pakli',
+'mytalk' => 'Mga akon paghingay',
 'anontalk' => 'Paghingay para hini nga IP',
 'navigation' => 'Paglayag',
 'and' => '&#32;ngan',
@@ -440,7 +441,7 @@ Kweri: $2',
 'actionthrottled' => 'Ginpahinay an ginbuhat',
 'actionthrottledtext' => 'Komo uska pangontra ha spam, ikaw in ginlilimitaran paghimo hini nga pagbuhat hin sobra kadamo ha sulod hin gutiay nga oras, ngan ikaw in naglapos hini nga katubtuban.
 Alayon pagutro kahuman hin pipira ka mga minuto.',
-'protectedpagetext' => 'Ini nga pakli in pinasaliporan para mapugngan an mga pagliwat.',
+'protectedpagetext' => 'Ginpanalipdan ini nga pakli basi mapugngan an pagliwat o iba pa nga mga maburuhat.',
 'viewsourcetext' => 'Puydi ka kinmita ngan kinmopya han gintikangan han pakli:',
 'viewyourtext' => "Puydi nim makit-an ngan makopya an tinikangan han '''imo mga pagliwat''' ha dinhi nga pakli:",
 'protectedinterface' => 'Ini nga pakli in nahatag hin teksto hit interface para han software han hin nga wiki, ngan in pinasasaliporan para makalikay hit pag-abuso.
@@ -464,6 +465,7 @@ An magdudurmara nga nagtrangka hini in naghatag hini nga eksplenasyon: "$3".',
 'virus-unknownscanner' => 'diri-nasasabtan nga antivirus:',
 
 # Login and logout pages
+'welcomeuser' => '¡Uswag ngan Dayon, $1!',
 'yourname' => 'Agnay hit gumaramit:',
 'yourpassword' => 'Tigaman-pagsulod:',
 'yourpasswordagain' => 'Utroha pagbutang an tigaman-han-pagsakob:',
@@ -628,7 +630,7 @@ o <span class="plainlinks">[{{fullurl:{{#Special:Log}}|page={{FULLPAGENAMEE}}}}
 'note' => "'''Pahibaro:'''",
 'previewnote' => "'''Hinumdumi nga pahiuna-nga-paggawas pa la ini.'''
 ¡Waray pa katipig an imo mga ginbag-o!",
-'continue-editing' => 'Padayon pagliwat',
+'continue-editing' => 'Pakadto han lugar hin panliwat',
 'editing' => 'Ginliliwat an $1',
 'creating' => 'Ginhihimo an $1',
 'editingsection' => 'Ginliliwat an $1 (bahin)',
@@ -644,7 +646,6 @@ Nasaad ka liwat nga imo ini kalugaringon nga ginsurat, o ginkopya nimo ini tikan
 'template-protected' => '(pinaliporan)',
 'template-semiprotected' => '(katunga nga pinasaliporan)',
 'hiddencategories' => 'Ini nga pakli in api han {{PLURAL:$1|1 nakatago nga kaarangay|$1 nakatago nga kaarangay}}:',
-'nocreatetitle' => 'Limitado an pahimo hin pakli',
 'nocreate-loggedin' => 'Diri ka gintutugotan paghimo hin mga bag-o nga pakli.',
 'sectioneditnotsupported-title' => 'Diri suportado han pagliwat han seksyon',
 'sectioneditnotsupported-text' => 'Diri suportado an pagliwat han seksyon ha dinhi nga pakli.',
@@ -830,7 +831,7 @@ Ginpapasabot nga an sulod han mga panudlok han {{SITENAME}} in bangin daan an.',
 
 # Preferences page
 'preferences' => 'Mga karuyag',
-'mypreferences' => 'Akon mga karuyag',
+'mypreferences' => 'Mga akon karuyag',
 'prefs-edits' => 'Ihap han mga pagliwat:',
 'prefsnologin' => 'Diri nakalog-in',
 'changepassword' => 'Igliwan an tigaman-pagsulod',
@@ -986,9 +987,12 @@ Diri ka gintutugotan pagliwat han mga katungod han gumaramit ha iba nga mga wiki
 'right-userrights-interwiki' => 'Igliwat an mga katungod han gumaramit han mga gumaramit ha iba nga mga wiki',
 'right-sendemail' => 'Padad-i hin e-mail ngada ha iba nga mga gumaramit',
 
+# Special:Log/newusers
+'newuserlogpage' => 'Talaan han paghimo hin gumaramit',
+'newuserlogpagetext' => 'Ini an talaan han mga nagkahihimo nga mga gumaramit.',
+
 # User rights log
 'rightslog' => 'Talaan hin mga katungod han gumaramit',
-'rightsnone' => '(waray)',
 
 # Associated actions - in the sentence "You do not have permission to X"
 'action-read' => 'basaha ini nga pakli',
@@ -1354,10 +1358,6 @@ An paglaladawan han iya [$2 fayl han paglaladawan nga pakli] didto in ginpapakit
 'activeusers-hidesysops' => 'Igtago an mga magdudumara',
 'activeusers-noresult' => 'Waray gumaramit nga nahiagian.',
 
-# Special:Log/newusers
-'newuserlogpage' => 'Talaan han paghimo hin gumaramit',
-'newuserlogpagetext' => 'Ini an talaan han mga nagkahihimo nga mga gumaramit.',
-
 # Special:ListGroupRights
 'listgrouprights-group' => 'Hugpo',
 'listgrouprights-rights' => 'Mga katungod',
@@ -1392,8 +1392,8 @@ An paglaladawan han iya [$2 fayl han paglaladawan nga pakli] didto in ginpapakit
 'usermessage-editor' => 'Mensahero han sistema',
 
 # Watchlist
-'watchlist' => 'Akon barantayan',
-'mywatchlist' => 'Akon angay timan-an',
+'watchlist' => 'Barantayan',
+'mywatchlist' => 'Mga angay timan-an nakon',
 'watchlistfor2' => 'Para ha $1 $2',
 'watchnologin' => 'Diri nakalog-in',
 'watch' => 'Bantayi',
@@ -1405,6 +1405,8 @@ An paglaladawan han iya [$2 fayl han paglaladawan nga pakli] didto in ginpapakit
 
 'enotif_impersonal_salutation' => 'gumaramit han {{SITENAME}}',
 'enotif_anon_editor' => 'waray magpakilala nga gumaramit $1',
+'created' => 'nahimo',
+'changed' => 'naliwanan',
 
 # Delete
 'deletepage' => 'Igpara an pakli',
@@ -1480,9 +1482,9 @@ $1',
 'blanknamespace' => '(Panguna)',
 
 # Contributions
-'contributions' => 'Mga amot han gumaramit',
+'contributions' => 'Mga ámot ni {{GENDER:$1|User}}',
 'contributions-title' => 'Mga amot han gumaramit para ha $1',
-'mycontris' => 'Akon mga ámot',
+'mycontris' => 'Mga ámot nakon',
 'contribsub2' => 'Para ha $1 $2',
 'uctop' => '(bawbaw)',
 'month' => 'Tikang ha bulan (ngan uruunhan):',
@@ -1514,7 +1516,7 @@ $1',
 'whatlinkshere-hideredirs' => '$1 nga mga redirek',
 'whatlinkshere-hidetrans' => '$1 nga mga transklusyon',
 'whatlinkshere-hidelinks' => '$1 an mga sumpay',
-'whatlinkshere-hideimages' => '$1 sumpay hin hulagway',
+'whatlinkshere-hideimages' => '$1 an mga sumpay han paypay',
 'whatlinkshere-filters' => 'Mga panara',
 
 # Block/unblock
@@ -2203,7 +2205,7 @@ An iba in daan nakatago.
 'logentry-newusers-create' => '$1 in naghimo hin gumaramit nga akawnt',
 'logentry-newusers-create2' => '$1 in naghimo hin gumaramit nga akawnt $3',
 'logentry-newusers-autocreate' => 'An akawnt nga $1 in lugaring nga nahimo',
-'newuserlog-byemail' => 'Ginpadangat an tigaman-pagsulod pinaagi han e-mail',
+'rightsnone' => '(waray)',
 
 # Feedback
 'feedback-subject' => 'Himangrawon:',
index 22f6489..a4b0680 100644 (file)
@@ -681,7 +681,6 @@ Jëfandikukat yi nekk yorkat rekk a ko man a soppi.'''",
 'template-protected' => '(aar)',
 'template-semiprotected' => '(aar-diggu)',
 'hiddencategories' => '{{PLURAL:$1|wàll bu nëbbu bu|wàll yu nëbbu yu }} xët wii bokk :',
-'nocreatetitle' => 'Digalu sosteefu xët',
 'nocreatetext' => 'Jëfandikukat yi bindu rekk a man a sosi xët ci {{SITENAME}}. Man nga dellu ginnaaw walla soppi aw xët wu am ba noppi, [[Special:UserLogin|duggu walla sos am sàq]].',
 'nocreate-loggedin' => 'Amuloo sañ-sañ yu doy ngir man a sosi xët yu bees.',
 'permissionserrors' => 'Njuumte ci sañ-sañ yi',
@@ -1125,11 +1124,13 @@ Jéemala bindaale ''all'' ngir seet ci biir ëmbit gépp (boolewaale ci xëti wa
 'right-siteadmin' => 'Caabi walla caabeedi dàttub njoxe bi',
 'right-override-export-depth' => 'génne ay xët yu ëmbi xët yu lëkkaloo ba-ci xóotaay bu tolluwaayam àgg 5',
 
+# Special:Log/newusers
+'newuserlogpage' => 'Jëfandikukat yu yees yi',
+'newuserlogpagetext' => 'Xët wii daf lay won limu sáq yi fi mujjee sosu.',
+
 # User rights log
 'rightslog' => 'Sañ-sañi jëfandikukat',
 'rightslogtext' => 'Lii di toftal limu jaar-jaaru coppitey sañ-sañi jëfandikukat yi.',
-'rightslogentry' => 'moo jële jëfandikukat bii di « $1 » ci mbooloo  $2  yóbb ko ci $3',
-'rightsnone' => '(menn)',
 
 # Associated actions - in the sentence "You do not have permission to X"
 'action-read' => 'jàng wii xët',
@@ -1545,10 +1546,6 @@ Xoolal itam [[Special:WantedCategories|wàll yi ñuy laaj]].',
 'activeusers-from' => 'Wone jëfandikukat yi dalee ko ci:',
 'activeusers-noresult' => 'Benn jëfandikukat giseesu ko',
 
-# Special:Log/newusers
-'newuserlogpage' => 'Jëfandikukat yu yees yi',
-'newuserlogpagetext' => 'Xët wii daf lay won limu sáq yi fi mujjee sosu.',
-
 # Special:ListGroupRights
 'listgrouprights' => 'Sañ-sañi mbooloom jëfandikukat mi',
 'listgrouprights-summary' => 'Lii di toftal mooy limu mboolooy jëfandikukat yi ne ci bii wiki, ak sañ-sañ yi ñu leen féetaleel.
@@ -1625,6 +1622,8 @@ Coppite yiy ñëw yu xët wi ak xëtu waxtaanuwaay wi mu àndal di nañu leen fa
 'enotif_lastvisited' => 'Nemmeekul $1 ngir gis bépp coppite dale ba sa nemmeku gu mujj.',
 'enotif_lastdiff' => 'Xoolal $1 ngir gis gii coppite.',
 'enotif_anon_editor' => 'Jëfandikukat bu binduwul $1',
+'created' => 'sosu na',
+'changed' => 'soppi',
 
 # Delete
 'deletepage' => 'Far xët wi',
@@ -2199,6 +2198,6 @@ Man nga tamit  [[Special:EditWatchlist/raw|soppi ko]].',
 # New logging system
 'revdelete-restricted' => 'doxalub digal ngir yorkat yi',
 'revdelete-unrestricted' => 'digal ngir yorkat yi deñ na',
-'newuserlog-byemail' => 'baatujáll bi yónne nañu ko cib bataaxal',
+'rightsnone' => '(menn)',
 
 );
index 1e61fbd..0dfb48e 100644 (file)
@@ -624,7 +624,6 @@ $2',
 'template-protected' => '(保护)',
 'template-semiprotected' => '(半保护垃许)',
 'hiddencategories' => '箇只页面是属于$1个隐藏分类个成员:',
-'nocreatetitle' => '创建页面受限',
 'nocreatetext' => '{{SITENAME}}限制了创建新页面功能。侬可以返回并编辑已有个页面,或者[[Special:UserLogin|登录或创建新账户]]。',
 'nocreate-loggedin' => '侬呒没权限创建新页面。',
 'sectioneditnotsupported-title' => '段落编辑弗支持',
@@ -996,9 +995,11 @@ $1",
 'grouppage-sysop' => '{{ns:project}}:管理员',
 'grouppage-bureaucrat' => '{{ns:project}}:行政员',
 
+# Special:Log/newusers
+'newuserlogpage' => '用户创建日志',
+
 # User rights log
 'rightslog' => '用户权限日志',
-'rightsnone' => '(呒)',
 
 # Associated actions - in the sentence "You do not have permission to X"
 'action-edit' => '编辑箇只页面',
@@ -1188,9 +1189,6 @@ $1",
 # Special:ListUsers
 'listusers-submit' => '显示',
 
-# Special:Log/newusers
-'newuserlogpage' => '用户创建日志',
-
 # Special:ListGroupRights
 'listgrouprights-members' => '(成员列表)',
 
@@ -1225,6 +1223,9 @@ $1",
 'watching' => '监控……',
 'unwatching' => '解除监控……',
 
+'created' => '建立哉',
+'changed' => '改变哉',
+
 # Delete
 'deletepage' => '删脱页面',
 'confirm' => '确认',
@@ -1594,5 +1595,6 @@ Variants for Chinese language
 # New logging system
 'revdelete-restricted' => '已将限制应用到管理员',
 'revdelete-unrestricted' => '已移除对管理员个限制',
+'rightsnone' => '(呒)',
 
 );
index 69b64d2..a575bf4 100644 (file)
@@ -708,9 +708,11 @@ $1',
 'grouppage-sysop' => '{{ns:project}}:Закрачуд',
 'grouppage-bureaucrat' => '{{ns:project}}:Нойнчуд',
 
+# Special:Log/newusers
+'newuserlogpage' => 'Бичгдлһнә сеткүл',
+
 # User rights log
 'rightslog' => 'Демнчна зөвәнә сеткүл',
-'rightsnone' => '(уга)',
 
 # Associated actions - in the sentence "You do not have permission to X"
 'action-edit' => 'эн халхиг чиклх',
@@ -853,9 +855,6 @@ $1',
 # Special:LinkSearch
 'linksearch' => 'Һаза заалһуд',
 
-# Special:Log/newusers
-'newuserlogpage' => 'Бичгдлһнә сеткүл',
-
 # Special:ListGroupRights
 'listgrouprights-members' => '(мөчүдин сеткүл)',
 
@@ -901,6 +900,8 @@ e-mail\'ар $PAGEEDITOR_EMAIL
 
 Хәрү холва болн тус:
 {{canonicalurl:{{MediaWiki:Helppage}}}}',
+'created' => 'бүтәв',
+'changed' => 'сольв',
 
 # Delete
 'deletepage' => 'Эн халхиг һарһҗ',
@@ -1265,4 +1266,7 @@ $2 шидрә һарһлһна төлә хәләтн.',
 'htmlform-reset' => 'Сольлһиг уга кех',
 'htmlform-selectorother-other' => 'Талдан',
 
+# New logging system
+'rightsnone' => '(уга)',
+
 );
index d15992a..2deb341 100644 (file)
@@ -458,6 +458,9 @@ $messages = array(
 'grouppage-user' => '{{ns:project}}:მახვარებუეფ',
 'grouppage-sysop' => '{{ns:project}}:ხემანჯღვერეფი',
 
+# Special:Log/newusers
+'newuserlogpage' => 'მახვარებუშ რეგისტრაციაშ ჟურნალ',
+
 # User rights log
 'rightslog' => 'მახვარებუშ ნებეფიშ ჟურნალ',
 
@@ -600,9 +603,6 @@ $messages = array(
 'linksearch' => 'გალენ რცხიეფ',
 'linksearch-line' => '$1 მერცხიილი რე $2-შე',
 
-# Special:Log/newusers
-'newuserlogpage' => 'მახვარებუშ რეგისტრაციაშ ჟურნალ',
-
 # Special:ListGroupRights
 'listgrouprights-members' => '(მაკათურეფიშ ერკებული)',
 
index 1219ee7..5a7da39 100644 (file)
@@ -147,8 +147,12 @@ $magicWords = array(
        'toc'                       => array( '0', '__אינהאלט__', '__תוכן_עניינים__', '__תוכן__', '__TOC__' ),
        'noeditsection'             => array( '0', '__נישט_רעדאקטירן__', '__ללא_עריכה__', '__NOEDITSECTION__' ),
        'currentday'                => array( '1', 'לויפיקער_טאג', 'יום נוכחי', 'CURRENTDAY' ),
+       'currentyear'               => array( '1', 'לויפֿיקע_יאָר', 'שנה נוכחית', 'CURRENTYEAR' ),
+       'currenttime'               => array( '1', 'לויפֿיקע_צײַט', 'שעה נוכחית', 'CURRENTTIME' ),
        'numberofpages'             => array( '1', 'צאל_בלעטער', 'מספר דפים כולל', 'מספר דפים', 'NUMBEROFPAGES' ),
        'numberofarticles'          => array( '1', 'צאל_ארטיקלען', 'מספר ערכים', 'NUMBEROFARTICLES' ),
+       'numberoffiles'             => array( '1', 'צאל_טעקעס', 'מספר קבצים', 'NUMBEROFFILES' ),
+       'numberofusers'             => array( '1', 'צאל_באניצער', 'מספר משתמשים', 'NUMBEROFUSERS' ),
        'pagename'                  => array( '1', 'בלאטנאמען', 'שם הדף', 'PAGENAME' ),
        'namespace'                 => array( '1', 'נאמענטייל', 'מרחב השם', 'NAMESPACE' ),
        'fullpagename'              => array( '1', 'פולבלאטנאמען', 'שם הדף המלא', 'FULLPAGENAME' ),
@@ -160,8 +164,10 @@ $magicWords = array(
        'img_right'                 => array( '1', 'רעכטס', 'ימין', 'right' ),
        'img_left'                  => array( '1', 'לינקס', 'שמאל', 'left' ),
        'img_none'                  => array( '1', 'אן', 'ללא', 'none' ),
+       'img_width'                 => array( '1', '$1פיקס', '$1 פיקסלים', '$1px' ),
        'img_center'                => array( '1', 'צענטער', 'מרכז', 'center', 'centre' ),
        'img_sub'                   => array( '1', 'אונטער', 'תחתי', 'sub' ),
+       'img_super'                 => array( '1', 'איבער', 'עילי', 'super', 'sup' ),
        'img_top'                   => array( '1', 'אויבן', 'למעלה', 'top' ),
        'img_bottom'                => array( '1', 'אונטן', 'למטה', 'bottom' ),
        'img_link'                  => array( '1', 'לינק=$1', 'קישור=$1', 'link=$1' ),
@@ -429,8 +435,8 @@ $1',
 'mainpage' => 'הויפט זייט',
 'mainpage-description' => 'הויפט זייט',
 'policy-url' => 'Project:פאליסי',
-'portal' => 'קאַווע שטיבל',
-'portal-url' => 'Project:קאַווע שטיבל',
+'portal' => 'קאַווע־שטיבל',
+'portal-url' => 'Project:קאַווע־שטיבל',
 'privacy' => 'פּריוואַטקייט פּאליסי',
 'privacypage' => 'Project:פּריוואַטקייט פאליסי',
 
@@ -761,6 +767,7 @@ $2
 'changeemail-oldemail' => 'קראַנטער ע-פּאָסט אַדרעס:',
 'changeemail-newemail' => 'נײַער בליצפּאָסט אַדרעס:',
 'changeemail-none' => '(קיין)',
+'changeemail-password' => 'אייער {{SITENAME}} פאסווארט:',
 'changeemail-submit' => 'ענדערן ע־פאסט אדרעס',
 'changeemail-cancel' => 'אַנולירן',
 
@@ -790,9 +797,9 @@ $2
 'minoredit' => 'דאס איז א מינערדיגע ענדערונג',
 'watchthis' => 'טוט אױפֿפּאַסן דעם בלאט',
 'savearticle' => 'אױפֿהיטן בלאַט',
-'preview' => 'פאראויסדיגע ווייזונג',
-'showpreview' => 'פֿ×\90ָרױס×\93×\99×\92×¢ ×°×²Ö·×\96×\95× ×\92',
-'showlivepreview' => '×\9c×¢×\91×¢×\93×\99×\92×¢ ×¤×\90ר×\90×\95×\99ס×\93×\99×\92×¢ ×\95×\95×\99×\99×\96×\95× ×\92',
+'preview' => 'פֿאראויסקוק',
+'showpreview' => '×\95×\95ײַ×\96×\9f ×¤Ö¿×\90ָרױסק×\95ק',
+'showlivepreview' => '×\96×\90פֿ×\90ר×\98×\99×\92ער ×¤×\90ר×\90×\95×\99סק×\95ק',
 'showdiff' => 'ווײַז די ענדערונגען',
 'anoneditwarning' => "'''ווארענונג:''' איר זענט נישט אריינלאגירט אין אייער קאנטע. אייער איי פי אדרעס וועט ווערן דאקומענטירט אין דעם בלאטס היסטאריע פון ענדערונגען. אויב זארגט איר זיך פאר פריוואטקייטן, ביטע טוט זיך אריינלאגירן.",
 'anonpreviewwarning' => "''איר זענט נישט אַרײַנלאגירט. אויפֿהיטן וועט ארײַנשרײַבן אײַער IP אַדרעס אין דער רעדאַקטירונג היסטאריע פונעם בלאַט.''",
@@ -926,8 +933,8 @@ $2
 '''זיכט נישט באניצן מיט שטאף וואס איז באשיצט מיט קאפירעכטן!'''",
 'longpageerror' => "'''פעלער: דער טעקסט וואס איר האט ארײַנגעשטעלט איז לאנג {{PLURAL:$1|איין קילאבייט|$1 קילאבייטן}}, וואס איז לענגער פון דעם מאקסימום פון {{PLURAL:$2|איין קילאבייט|$2 קילאבייטן}}. 
 ער קען נישט ווערן אפגעהיטן.'''",
-'readonlywarning' => "'''×\95×\95×\90רענ×\95× ×\92: ×\93×\99 ×\93×\90×\98×¢×\91×\90×\96×¢ ×\90×\99×\96 ×\92×¢×\95×\95×\90ר×\9f ×¤×\90רש×\9c×\90ס×\9f ×¤×\90ר ×¡×\99×\99×\98 ×\90×\95×\99פ×\94×\90×\9c×\98×\95× ×\92,
\9e×\9e×\99×\9c×\90 ×\95×\95×¢×\98 ×\90×\99ר × ×\99ש×\98 ×§×¢× ×¢×\9f ×\90פ×\94×\99×\98×\9f ×\90×\99×\99ערע ×¢× ×\93ער×\95× ×\92×¢×\9f ×\90צ×\99× ×\93. ×\90×\99ר ×§×¢× ×\98 ×§×\90פ×\99ר×\9f ×\90×\95×\9f ×\90רײַנ×\9c×\99×\99×\92×\9f ×\93×¢×\9d ×\98עקס×\98 ×\90ר×\99×\99×\9f ×¦×\95 ×\90 ×\98עקס×\98 ×\98עקע ×\90×\95×\9f ×\93×\90ס ×\93×\90ר×\98×\9f ×\90פ×\94×\99×\98×\9f ×¤×\90ר ×©×¤×¢×\98ער.'''
+'readonlywarning' => "'''×\95×\95×\90רענ×\95× ×\92: ×\93×\99 ×\93×\90×\98× ×\91×\90×\96×¢ ×\90×\99×\96 ×\92×¢×\95×\95×\90ר×\9f ×¤×\90רש×\9c×\90ס×\9f ×¤×\90ר ×\90×\95×\99פ×\94×\90×\9c×\98×\95× ×\92, ×\9e×\9e×\99×\9c×\90 ×\95×\95×¢×\98 ×\90×\99ר × ×\99ש×\98 ×§×¢× ×¢×\9f ×\90פ×\94×\99×\98×\9f ×\90×\99×\99ערע ×¢× ×\93ער×\95× ×\92×¢×\9f ×\90צ×\99× ×\93. '''
\90×\99ר ×§×¢× ×\98 ×§×\90פ×\99ר×\9f ×\90×\95×\9f ×\90רײַנ×\9c×\99×\99×\92×\9f ×\93×¢×\9d ×\98עקס×\98 ×\90ר×\99×\99×\9f ×¦×\95 ×\90 ×\98עקס×\98 ×\98עקע ×\90×\95×\9f ×\93×\90ס ×\93×\90ר×\98×\9f ×\90פ×\94×\99×\98×\9f ×\90×\95×\99×£ ×©×¤×¢×\98ער.
 
 דער אדמיניסטראטאר וואס האט זי פארשלאסן האט מסביר געווען אזוי: $1",
 'protectedpagewarning' => "'''ווארענונג:  דער בלאט איז געווארן פארשפארט אז בלויז באניצערס מיט סיסאפ פריווילעגיעס קענען אים ענדערן.'''
@@ -938,13 +945,12 @@ $2
 'titleprotectedwarning' => "'''אזהרה: דער בלאט איז פֿארשפאַרט טא דארף מען [[Special:ListGroupRights|ספעציפֿישע רעכטן]] צו שאפֿן אים.'''
 די פֿאַרגאַנגענע לאגבוך באשרײַבונג ווערט געוויזן דאָ:",
 'templatesused' => '{{PLURAL:$1|מוסטער|מוסטערן}} באנוצט אויף דעם בלאט:',
-'templatesusedpreview' => '{{PLURAL:$1|×\9e×\95ס×\98ער| ×\9e×\95ס×\98ער×\9f}}  ×\91×\90Ö·× ×\99צ×\98  ×\90×\99×\9f ×\93×¢×\9d ×¤Ö¿×\90ָר×\90ױס×\93×\99ק×\9f ×\90ױסק×\95ק:',
+'templatesusedpreview' => '{{PLURAL:$1|מוסטער| מוסטערן}}  באַניצט  אין דעם פֿאָראױסקוק:',
 'templatesusedsection' => '{{PLURAL:$1|מוסטער|מוסטערן}} באנוצט אין דעם אפטיילונג:',
 'template-protected' => '(באשיצט)',
 'template-semiprotected' => '(טיילווייז באשיצט)',
 'hiddencategories' => 'דער דאזיגער בלאט געהערט צו {{PLURAL:$1|איין באהאלטענער קאטעגאריע|$1 באהאלטענע קאטעגאריעס}}:',
 'edittools' => '<!-- טעקסט דא וועט געוויזן ווערן אונטער ענדערן און ארויפלאדירן פארעמס. -->',
-'nocreatetitle' => 'בלאט באשאפן באגרעניצט',
 'nocreatetext' => 'די סייט האט באגרעניצט די מעגליכקייט צו שאפן נייע בלעטער.
 איר קענט צוריקגיין און ענדערן דעם עקזיסטירנדן בלאט, אדער [[Special:UserLogin|לאגירט זיך אריין אדער שאפט א קאנטע]].',
 'nocreate-loggedin' => 'איר זענט נישט ערלויבט צו שאַפֿן נײַע בלעטער.',
@@ -994,6 +1000,7 @@ $2
 'language-converter-depth-warning' => 'אַריבער דעם שפּראַך קאַנווערטער טיף לימיט ($1)',
 'node-count-exceeded-category' => 'בלעטער וואו קנופצאל איז צו פיל',
 'node-count-exceeded-warning' => 'קנופנצאל אויפן בלאט צו הויך',
+'expansion-depth-exceeded-category' => "בלעטער וואו מ'האט אריבערגעשטיגן די פארברייטערונג טיף",
 'converter-manual-rule-error' => 'געטראפן א גרײַז אין האנטלעכן שפראך־קאנווערטירן כלל',
 
 # "Undo" feature
@@ -1330,9 +1337,9 @@ $1",
 'prefs-emailconfirm-label' => 'ע-פאסט באַשטעטיקונג:',
 'prefs-textboxsize' => 'גרייס פֿון רעדאַקטירונג פֿענסטער',
 'youremail' => 'ע-פאסט:',
-'username' => 'באַניצער־נאָמען:',
-'uid' => 'באַנוצער־נומער:',
-'prefs-memberingroups' => 'מיטגליד אין {{PLURAL:$1|גרופע|גרופעס}}:',
+'username' => '{{GENDER:$1|באַניצער־נאָמען}}:',
+'uid' => '{{GENDER:$1|באַנוצער־נומער}}:',
+'prefs-memberingroups' => '{{GENDER:$2|מיטגליד}} אין {{PLURAL:$1|גרופע|גרופעס}}:',
 'prefs-registration' => 'אײַנשרײַבן צײַט:',
 'yourrealname' => 'עכטער נאמען *:',
 'yourlanguage' => 'שפּראַך:',
@@ -1439,6 +1446,7 @@ $1",
 'right-autoconfirmed' => 'רעדאקטירן האלב-געשיצטע בלעטער',
 'right-bot' => 'באַהאַנדלונג ווי אַן אויטאמאַטישער פראצעס',
 'right-nominornewtalk' => 'מינערדיקע רעדאקטירונגען צו שמועס בלעטער זאלן נישט שאפן די "נייע מודעות" מעלדונג',
+'right-apihighlimits' => 'ניצן העכערע לימיטן אין API פראגעס',
 'right-writeapi' => 'ניצן דעם שרײַבן API',
 'right-delete' => 'מעקן בלעטער',
 'right-bigdelete' => 'אויסמעקן בלעטער מיט לאַנגע היסטאריעס',
@@ -1477,15 +1485,13 @@ $1",
 'right-sendemail' => 'שיקן ע-פאסט צו אנדערע באניצער',
 'right-passwordreset' => 'באַקוקן פאַסווארט צוריקשטעלן ע־בריוו',
 
+# Special:Log/newusers
+'newuserlogpage' => 'נייע באַניצערס לאָג-בוך',
+'newuserlogpagetext' => 'דאס איז א לאג פון באַניצערס אײַנשרײַבונגען.',
+
 # User rights log
 'rightslog' => 'באַניצער רעכטן לאג',
 'rightslogtext' => 'דאָס איז אַ לאג פֿון ענדערונגען צו באַניצער רעכטן.',
-'rightslogentry' => 'געביטן די מיטגלידערשאַפֿט פֿאַר $1 פֿון $2 אויף $3',
-'rightslogentry-autopromote' => 'אויטאמאטיש פראמאווירט פון $2 צו $3',
-'logentry-rights-rights' => '$1 האט געביטן גרופע מיטגלידערשאַפֿט פֿאַר $3 פֿון $4 אויף $5',
-'logentry-rights-rights-legacy' => '$1 האט געביטן גרופע מיטגלידערשאפט פאר $3',
-'logentry-rights-autopromote' => '$1 אויטאמאטיש פראמאווירט פון $4 צו $5',
-'rightsnone' => '(גארנישט)',
 
 # Associated actions - in the sentence "You do not have permission to X"
 'action-read' => 'ליינען דעם בלאַט',
@@ -1708,6 +1714,7 @@ $1",
 'backend-fail-notexists' => 'נישט פֿאראן די טעקע $1.',
 'backend-fail-invalidpath' => '$1 איז נישט קיין גילטיקער שפייכלערן שטעג.',
 'backend-fail-delete' => 'קען נישט אויסמעקן טעקע $1.',
+'backend-fail-describe' => 'קען נישט ענדערן מעטאדאטן פאר דער טעקע "$1".',
 'backend-fail-alreadyexists' => 'די טעקע $1 עקזיסטירט שוין.',
 'backend-fail-store' => "מ'קען נישט שפייכלערן טעקע $1 בײַ $2.",
 'backend-fail-copy' => 'האט נישט געקענט קאפירן "$1" צו "$2".',
@@ -1764,6 +1771,8 @@ $1",
 'upload_source_file' => '(א טעקע אויף אײַער קאמפיוטער)',
 
 # Special:ListFiles
+'listfiles-summary' => 'דער דאזיקער באזונדערער בלאט ווייזט אלע ארויפגעלאדענע טעקעס.
+ווען געפילטערט לויטן באניצער, ווייזט מען נאר טעקעס וואס יענער באניצער האט ארויפגעלאדן די לעצטע ווערסיע.',
 'listfiles_search_for' => 'זוכן פֿאַר מעדיע נאָמען:',
 'imgfile' => 'טעקע',
 'listfiles' => 'טעקע ליסטע',
@@ -1806,6 +1815,10 @@ $1",
 זעט דעם [$2 טעקע באשרייבונג בלאט] פאר מער אינפארמאציע.',
 'sharedupload-desc-here' => 'די טעקע איז פֿון $1 און מען מעג זי ניצן אין אנדערע פראיעקטן.
 די באשרייבונג פון איר  [$2 טעקע באשרייבונג בלאט] דארט ווערן געוויזן אונטן.',
+'sharedupload-desc-edit' => 'די טעקע איז פון  $1 און מען קען זי ניצן אין אנדערע פראיעקטן.
+אפשר ווילט איר רעדאקטירן די באשרייבונג אין זיין  [$2 טעקע באשרייבונג בלאט] דארט.',
+'sharedupload-desc-create' => 'די טעקע איז פון $1 און מען קען זי ניצן אין אנדערע פראיעקטן.
+אפשר ווילט איר רעדאקטירן די באשרייבונג אין זיין  [$2 טעקע באשרייבונג בלאט] דארט.',
 'filepage-nofile' => 'עס עקזיסטירט נישט קיין טעקע מיט דעם נאמען.',
 'filepage-nofile-link' => 'עס עקזיסטירט נישט קיין טעקע מיט דעם נאמען, אבער איר קענט זי [$1 ארויפֿלאָדן].',
 'uploadnewversion-linktext' => 'ארויפֿלאדן א נײַע ווערסיע פֿוו דער טעקע',
@@ -2052,16 +2065,12 @@ $1",
 # Special:ActiveUsers
 'activeusers' => 'ליסטע פֿון אַקטיווע באַניצער',
 'activeusers-intro' => 'דאָס איז א ליסטע פֿון באַניצער וואָס זענען געווען אַקטיוו אינערהאָלב  $1 {{PLURAL:$1|דעם לעצטן טאָג|די לעצטע $1 טעג}}.',
-'activeusers-count' => '$1 {{PLURAL:$1|×\91×\90Ö·×\90ַר×\91×¢×\98×\95× ×\92\91×\90Ö·×\90ַר×\91×¢×\98×\95× ×\92×¢×\9f}} אין  {{PLURAL:$3|דעם לעצטן טאָג|די לעצטע $3 טעג}}',
+'activeusers-count' => '$1 {{PLURAL:$1|פע×\95×\9c×\94|פע×\95×\9c×\95ת}} אין  {{PLURAL:$3|דעם לעצטן טאָג|די לעצטע $3 טעג}}',
 'activeusers-from' => 'ווײַזן באַניצער אָנהייבנדיג פון:',
 'activeusers-hidebots' => 'באַהאַלטן באטן',
 'activeusers-hidesysops' => 'באַהאַלטן סיסאפן',
 'activeusers-noresult' => 'קיין באניצער נישט געטראפֿן.',
 
-# Special:Log/newusers
-'newuserlogpage' => 'נייע באַניצערס לאָג-בוך',
-'newuserlogpagetext' => 'דאס איז א לאג פון באַניצערס אײַנשרײַבונגען.',
-
 # Special:ListGroupRights
 'listgrouprights' => 'באַניצער גרופע רעכטן',
 'listgrouprights-summary' => "פֿאלגנד איז א רשימה פֿון באַניצער גרופעס דעפֿינירט אויף דער דאָזיקער וויקי, מיט זײַערע אַסאציאירטע צוטריט רעכטן.
@@ -2120,7 +2129,7 @@ $1",
 'usermessage-template' => 'MediaWiki:באניצער־מעלדונג',
 
 # Watchlist
-'watchlist' => '×\9e×\99×\99×\9f ×\90×\95×\99פפַּ×\90סונג ליסטע',
+'watchlist' => '×\90×\95×\99פֿפ×\90Ö·סונג ליסטע',
 'mywatchlist' => 'אויפפַּאסונג ליסטע',
 'watchlistfor2' => 'פֿאַר $1 $2',
 'nowatchlist' => 'איר האט נישט קיין שום בלעטער אין אייער אויפפַּאסונג ליסטע.',
@@ -2128,10 +2137,9 @@ $1",
 'watchnologin' => 'איר זענט נישט אַרײַנלאגירט',
 'watchnologintext' => 'איר דארפֿט זיין [[Special:UserLogin|אריינגלאגירט]] צו מאדיפֿיצירן אייער אויפפַּאסונג־ליסטע.',
 'addwatch' => 'צולייגן צו דער אויפֿפאַסונג ליסטע',
-'addedwatchtext' => "דער בלאט \"[[:\$1]]\" איז צוגעלײגט געוואָרן צו אײַער [[Special:Watchlist|אויפֿפאַסונג ליסטע]].
+'addedwatchtext' => 'דער בלאט "[[:$1]]" איז צוגעלײגט געוואָרן צו אײַער [[Special:Watchlist|אויפֿפאַסונג ליסטע]].
 
-ענדערונגען צו דעם בלאַט און צו זײַן פארבינדענעם רעדן בלאַט וועלן זײַן אויסגערעכענט דא.
-און דער בלאט וועט זיין '''דיק''' אין דער [[Special:RecentChanges|ליסטע פון לעצטע ענדערונגען]] צו גרינגער מאכן דאס אויפֿפאַסן.",
+ווײַטערע ענדערונגען צו דעם בלאַט און צו זײַן פארבינדענעם רעדן בלאַט וועלן זײַן אויסגערעכנט דארט.',
 'removewatch' => 'אַראָפּנעמען פון דער אויפֿפאַסונג ליסטע',
 'removedwatchtext' => 'דער בלאַט "[[:$1]]" איז אָפּגעראַמט געוואָרן פון [[Special:Watchlist|אייער אױפֿפּאַסונג ליסטע]].',
 'watch' => 'אױפֿפּאַסן',
@@ -2163,7 +2171,13 @@ $1",
 'enotif_subject_deleted' => '{{SITENAME}} בלאט $1 איז אויסגעמעקט געווארן דורך {{gender:$2|$2}}',
 'enotif_subject_created' => '{{SITENAME}} בלאט $1 איז געשאפן געווארן דורך {{gender:$2|$2}}',
 'enotif_subject_moved' => '{{SITENAME}} בלאט $1 איז בגאוועגט געווארן דורך {{gender:$2|$2}}',
+'enotif_subject_restored' => '{{SITENAME}} בלאט $1 איז צוריקגעשטעלט געווארן דורך {{gender:$2|$2}}',
 'enotif_subject_changed' => '{{SITENAME}} בלאט $1 איז געענדערט געווארן דורך {{gender:$2|$2}}',
+'enotif_body_intro_deleted' => 'דער {{SITENAME}} בלאט $1 איז אויסגעמעקט געווארן אום $PAGEEDITDATE דורך {{gender:$2|$2}}, זעט $3.',
+'enotif_body_intro_created' => 'דער {{SITENAME}} בלאט $1 איז געשאפן געווארן אום $PAGEEDITDATE דורך {{gender:$2|$2}}, זעט $3 פאר דער לויפיקער רעוויזיע.',
+'enotif_body_intro_moved' => 'דער {{SITENAME}} בלאט $1 איז באוועגט געווארן אום $PAGEEDITDATE דורך {{gender:$2|$2}}, זעט $3 פאר דער לויפיקער רעוויזיע.',
+'enotif_body_intro_restored' => 'דער {{SITENAME}} בלאט $1 איז צוריקגעשטעלט געווארן אום $PAGEEDITDATE דורך {{gender:$2|$2}}, זעט $3 פאר דער לויפיקער רעוויזיע.',
+'enotif_body_intro_changed' => 'דער {{SITENAME}} בלאט $1 איז געענדערט געווארן אום $PAGEEDITDATE דורך {{gender:$2|$2}}, זעט $3 פאר דער לויפיקער רעוויזיע.',
 'enotif_lastvisited' => 'זעט $1 פֿאַר אלע ענדערונגען זינט אײַער לעצטן וויזיט.',
 'enotif_lastdiff' => 'זעט $1 פאר דער ענדערונג.',
 'enotif_anon_editor' => 'אַנאנימער באַניצער $1',
@@ -2194,6 +2208,8 @@ $UNWATCHURL
 
 פאר מער הילף:
 {{canonicalurl:{{MediaWiki:Helppage}}}}',
+'created' => 'געשאַפֿן',
+'changed' => 'געטוישט',
 
 # Delete
 'deletepage' => 'מעק אויס בלאט',
@@ -2276,9 +2292,9 @@ $UNWATCHURL
 
 איר קענט ענדערן דעם שיצונג ניווא פונעם בלאַט, אבער דאס וועט נישט ווירקן אויף דער קאַסקאַדירטער שיצונג .',
 'protect-default' => 'אלע באניצער ערלויבט',
-'protect-fallback' => 'פֿ×\90×\93ערט "$1" ערלויבניש',
-'protect-level-autoconfirmed' => '×\91×\9c×\90ק×\99ר×\9f × ×²Ö·×¢ ×\90×\95×\9f × ×\99×\98 ×\90ײַנ×\92עשר×\99×\91×¢× ×¢ ×\91×\90Ö·× ×\99צערס',
-'protect-level-sysop' => 'נאר סיסאפן',
+'protect-fallback' => '×\93ער×\9c×\95×\99×\91×\9f × ×\90ר ×\91×\90× ×\99צער ×\9e×\99ט "$1" ערלויבניש',
+'protect-level-autoconfirmed' => '×\9c×\90×\96×\9f × ×\90ר ×\90×\95×\99×\98×\90×\9e×\90×\98×\99ש ×\91×\90ש×\98×¢×\98×\99ק×\98×¢ ×\91×\90Ö·× ×\99צער',
+'protect-level-sysop' => '×\93ער×\9c×\95×\99×\91×\9f × ×\90ר ×¡×\99ס×\90פ×\9f',
 'protect-summary-cascade' => 'קאסקאדירן',
 'protect-expiring' => 'גייט אויס $1 (UTC)',
 'protect-expiring-local' => 'לאזט אויס $1',
@@ -2353,6 +2369,7 @@ $UNWATCHURL
 'undelete-search-prefix' => 'ווײַז בלעטער וואס הייבן אן מיט:',
 'undelete-search-submit' => 'זוכן',
 'undelete-no-results' => 'נישט געטראפן קיין צוגעפאסטע בלעטער אין אויסמעקונג ארכיוו.',
+'undelete-cleanup-error' => 'גרײַז בײַם אויסמעקן נישט געניצטע ארכיוו טעקע "$1".',
 'undelete-error' => 'גרייז ביים צוריקשטעלן בלאט',
 'undelete-error-short' => 'טעות ביים צוריקשטעלן טעקע: $1',
 'undelete-error-long' => 'גרײַזן געטראפֿן בײַם ווידערשטעלן די טעקע:
@@ -2568,18 +2585,20 @@ $1',
 'move-page' => 'באַוועגן $1',
 'move-page-legend' => 'באַוועגן בלאַט',
 'movepagetext' => "זיך באניצן מיט דעם פֿארעם וועט פֿארענדערן דעם נאמען פֿון דעם בלאט, און וועט אריבערפֿירן זיין געשיכטע צום נייעם נאמען.
-
-דאס אלטע קעפל וועט ווערן א ווייטערפֿירן בלאט צום נייעם נאמען.
+דאס אלטע קעפל וועט ווערן א ווייטערפֿירן בלאט צום נייעם קעפל.
 
 איר קענט דערהיינטיגן ווייטערפֿירונגען צום אלטן נאמען אויטאמאטיש.
 
-טאמער נישט, טוט פֿארזיכערן אז עס איז נישטא קיין [[Special:DoubleRedirects|געטאפלטע]] אדער [[Special:BrokenRedirects|צעבראכענע]] ווייטערפֿירונגען.
+טאמער נישט, טוט פֿארזיכערן אז עס איז נישטא קיין [[Special:DoubleRedirects|געטאפלטע]] אדער [[Special:BrokenRedirects|צעבראכענע ווייטערפֿירונגען]].
 
-איר זענט פֿאראנטווארטלעך זיכער מאכן אז אלע פֿארבינדונגען ווערן געריכטעט צו דער געהעריגער ריכטונג.
+איר זענט פֿאראנטווארטלעך זיכער מאכן אז אלע פֿארבינדונגען ווערן געריכטעט צום געהעריגן ציל.
 
-אכטונג: דער בלאט וועט נישט ווערן אריבערגעפֿירט אויב עס איז שוין דא א בלאט אונטער דעם נייעם נאמען, אחוץ ווען ער איז ליידיג. אדער ער איז א ווייטערפֿירונג בלאט, און ער האט נישט קיין געשיכטע פון ענדערונגען. פשט דערפֿון, אז איר קענט איבערקערן א ווייטערפֿירונג וואס איר האט אט געמאכט בטעות, און איר קענט נישט אריבערשרייבן אן עקסיסטירנדן בלאט.
+דער בלאט וועט '''נישט''' ווערן אריבערגעפֿירט אויב עס איז שוין דא א בלאט אונטער דעם נייעם נאמען, אחוץ ווען ער איז א ווייטערפֿירונג בלאט, און ער האט נישט קיין געשיכטע פון ענדערונגען. 
+פשט דערפֿון, אז איר קענט איבערקערן א ווייטערפֿירונג וואס איר האט אט געמאכט בטעות, און איר קענט נישט אריבערשרייבן אן עקסיסטירנדן בלאט.
 
-'''ווארענונג:''' אזא ענדערונג קען זיין דראסטיש און נישט געווינטשען פאר א פאפולערן בלאט; ביטע פֿארזיכערט אז איר פֿארשטייט די ווייטגרייכנדע קאנסקווענסן צו דער אקציע בעפֿאר איר פֿירט דאס אויס.",
+'''ווארענונג!'''
+ אזא ענדערונג קען זיין דראסטיש און נישט געווינטשען פאר א פאפולערן בלאט; 
+ביטע פֿארזיכערט אז איר פֿארשטייט די ווייטגרייכנדע קאנסקווענסן צו דער אקציע בעפֿאר איר פֿירט דאס אויס.",
 'movepagetext-noredirectfixer' => "זיך באניצן מיט דעם פֿארעם אונטן וועט פֿארענדערן דעם נאמען פֿון דעם בלאט, און וועט אריבערפֿירן זיין געשיכטע צום נייעם נאמען.
 
 דאס אלטע קעפל וועט ווערן א ווייטערפֿירן בלאט צום נײַעם נאמען.
@@ -2607,7 +2626,7 @@ $1',
 'cant-move-to-user-page' => 'איר זענט נישט דערלויבט צו באַוועגן א בלאַט צו א באַניצער בלאַט (אַחוץ צו א באַניצער אונטערבלאַט).',
 'newtitle' => 'צו נייעם קעפל:',
 'move-watch' => 'אויפֿפאַסן אויף דעם בלאַט',
-'movepagebtn' => 'באוועגן',
+'movepagebtn' => 'באַוועגן בלאַט',
 'pagemovedsub' => 'באַוועגט מיט הצלחה',
 'movepage-moved' => 'דער בלאט "$1" איז אריבערגעפֿירט געווארן צו "$2".',
 'movepage-moved-redirect' => 'ווײַטערפֿירונג  געשאַפֿן.',
@@ -2842,7 +2861,7 @@ $1',
 'tooltip-recreate' => 'ווידערשאַפֿן דעם בלאַט כאטש ער איז אַמאל אויסגעמעקט',
 'tooltip-upload' => 'הייב אן אויפלאדן',
 'tooltip-rollback' => '"צוריקדרייען" דרײט צוריק רעדאַקטירונג(ען) צו דעם בלאַט פֿונעם לעצטן בײַשטײַערער מיט אײן קװעטש',
-'tooltip-undo' => 'עפֿנ×\98 ×\93×¢×\9d ×¨×¢×\93×\90Ö·×\92×\99ר־פֿענס×\98ער ×\90×\99×\9f ×\90Ö· ×¤Ö¿×\90ָרױס×\93×\99ק×\9f ×\90ױסק×\95ק ×\9bÖ¼×\93×\99 ×¦×\95ר×\99ק×\93רײע×\9f ×\93×\99 ×¨×¢×\93×\90ַקצ×\99×¢. ×¢×¡ ×\90×\99×\96 ×\9e×¢×\92×\9c×¢×\9a ×¦×\95צ×\95×\9cײ×\92×\9f ×\90Ö· ×¡×\99×\91×\94 ×\93ערװע×\92×\9f ×\90×\99×\9f ×\93×¢×\9d "ק×\95רץ ×°×\90ָר×\98" ×§×¢×¡×\98×\9c.',
+'tooltip-undo' => 'עפֿנט דעם רעדאַגיר־פֿענסטער אין אַ פֿאָראױסקוק כּדי צוריקדרײען די רעדאַקציע. עס איז מעגלעך צוצולײגן אַ סיבה דערװעגן אין דעם "קורץ װאָרט" קעסטל.',
 'tooltip-preferences-save' => 'היטן פרעפֿערענצן',
 'tooltip-summary' => 'אײַנגעבן א קורצע רעזומע',
 
@@ -2919,6 +2938,10 @@ $1',
 'pageinfo-contentpage' => 'געציילט ווי אן אינהאלט בלאט',
 'pageinfo-contentpage-yes' => 'יאָ',
 'pageinfo-protect-cascading-yes' => 'יאָ',
+'pageinfo-category-info' => 'קאטעגאריע אינפארמאציע',
+'pageinfo-category-pages' => 'צאָל בלעטער',
+'pageinfo-category-subcats' => 'צאָל אונטערקאטעגאריעס',
+'pageinfo-category-files' => 'צאָל טעקעס',
 
 # Skin names
 'skinname-standard' => 'קלאסיש',
@@ -2976,6 +2999,7 @@ $1',
 'file-info-size-pages' => '$1 × $2 פיקסעלן, טעקע גרייס: $3, MIME טיפ: $4,  $5 {{PLURAL:$5|בלאט|בלעטער}}',
 'file-nohires' => 'נישטא מיט א העכערער רעזאלוציע.',
 'svg-long-desc' => 'טעקע SVG, נאמינעל: $1 × $2 פיקסעלן, טעקע גרייס: $3',
+'svg-long-error' => 'אומגילטיקע SVG טעקע: $1',
 'show-big-image' => 'בילד מיט דער גרעסטער רעזאלוציע',
 'show-big-image-preview' => 'גרייס פון דעם פארויסקוק: $1.',
 'show-big-image-other' => '{{PLURAL:$2|אנדער רעזאלוציע|אנדערע רעזאלוציעס}}: $1.',
@@ -3006,6 +3030,8 @@ $1',
 'minutes' => '{{PLURAL:$1|$1 מינוט|$1 מינוט}}',
 'hours' => '{{PLURAL:$1|$1 שעה|$1 שעה}}',
 'days' => '{{PLURAL:$1|$1 טאג|$1 טעג}}',
+'months' => '{{PLURAL:$1|איין מאנאַט|$1 מאנאַטן}}',
+'years' => '{{PLURAL:$1|איין יאָר|$1 יאָר}}',
 'ago' => 'פֿאַר $1',
 'just-now' => 'גראדע יעצט',
 
@@ -3126,6 +3152,7 @@ $1',
 'exif-gpsdop' => 'מאס פוקנטליכקייט',
 'exif-gpsspeedref' => 'גיך איינהייט',
 'exif-gpsspeed' => 'גיך פון GPS־אויפֿנעמער',
+'exif-gpstrack' => 'באוועגונג ריכטונג',
 'exif-gpsimgdirectionref' => 'רעפערענץ פאר ריכטונג פון בילד',
 'exif-gpsimgdirection' => 'ריכטונג פון בילד',
 'exif-gpsdestlatituderef' => 'רעפֿערענץ פֿאַר ברייט־ליניע פון ציל',
@@ -3161,6 +3188,7 @@ $1',
 'exif-urgency' => 'דרינגלעכקייט',
 'exif-locationdest' => 'געוויזענע לאקאציע',
 'exif-locationdestcode' => 'קאד פֿון געוויזענער לאקאציע',
+'exif-contact' => 'קאנטאקט אינפארמאציע',
 'exif-writer' => 'שרײַבער',
 'exif-languagecode' => 'שפראַך',
 'exif-iimversion' => 'IIM ווערסיע',
@@ -3464,6 +3492,10 @@ $5
 # Live preview
 'livepreview-loading' => 'לאדנדיג…',
 'livepreview-ready' => 'לאדנדיג… גרייט!',
+'livepreview-failed' => 'גיכער פֿאראויסקוק דורכגעפֿאלן.
+פרובירט נארמאלן פֿאראויסקוק.',
+'livepreview-error' => 'פֿארבינדונג נישט מעגלעך: $1 "$2".
+פרובירט נארמאלן פֿאראויסקוק.',
 
 # Watchlist editor
 'watchlistedit-numitems' => 'אײַער אויפֿפאַסונג ליסטע אַנטהאַלט {{PLURAL:$1|1 טיטל|$1 טיטלען}}, אויסשליסנדיק שמועסבלעטער.',
@@ -3590,7 +3622,7 @@ $5
 'specialpages-group-highuse' => 'בלעטער וואס זענען געניצט אסאך',
 'specialpages-group-pages' => 'ליסטעס פֿון בלעטער',
 'specialpages-group-pagetools' => 'געצייג פֿאר בלעטער',
-'specialpages-group-wiki' => '×\95×\95×\99ק×\99 ×\93×\90Ö·×\98×\9f ×\90×\95×\9f ×\92עצ×\99×\99×\92',
+'specialpages-group-wiki' => 'דאַטן און געצייג',
 'specialpages-group-redirects' => 'ווײַטערפֿירן ספעציעלע בלעטער',
 'specialpages-group-spam' => 'ספאַם געצייג',
 
@@ -3613,7 +3645,7 @@ $5
 'tag-filter' => '[[Special:Tags|מאַרקירונג]] פֿילטער:',
 'tag-filter-submit' => 'פֿילטער',
 'tags-title' => 'טאַגן',
-'tags-intro' => 'דער בלאַט ווײַזט די טאַגן מיט וואס דאס ווייכווארג קען צייכענען אַן רעדאַגירונג, און זייער באַטייַט.',
+'tags-intro' => 'דער בלאַט ווײַזט די טאַגן מיט וואס דאס ווייכווארג קען צייכענען אַ רעדאַגירונג, און זייער באַטייַט.',
 'tags-tag' => 'טאַג נאָמען',
 'tags-display-header' => 'אויסזען אין ענדערונג רשימות',
 'tags-description-header' => 'פֿולי באַשרייַבונג פון באַטײַט',
@@ -3688,7 +3720,10 @@ $5
 'logentry-newusers-create' => 'באניצער קאנטע $1 געשאפן געווארן',
 'logentry-newusers-create2' => 'באניצער קאנטע $1 געשאפן געווארן דורך $3',
 'logentry-newusers-autocreate' => 'קאנטע $1 באשאפן אויטאמאטיש',
-'newuserlog-byemail' => 'פאַסווארט געשיקט דורך ע-פאסט',
+'logentry-rights-rights' => '$1 האט געביטן גרופע מיטגלידערשאַפֿט פֿאַר $3 פֿון $4 אויף $5',
+'logentry-rights-rights-legacy' => '$1 האט געביטן גרופע מיטגלידערשאפט פאר $3',
+'logentry-rights-autopromote' => '$1 אויטאמאטיש פראמאווירט פון $4 צו $5',
+'rightsnone' => '(גארנישט)',
 
 # Feedback
 'feedback-bugornote' => 'ווען איר זענט גרייט צו באשרייבן א טעכנישן פראבלעם ביטע [$1 מעלדט א פעלער].
@@ -3762,6 +3797,4 @@ $5
 'duration-centuries' => '$1 {{PLURAL:$1|יארהונדערט|יארהונדערטער}}',
 'duration-millennia' => '$1 {{PLURAL:$1|יארטויזנט|יארטויזנטער}}',
 
-# Unknown messages
-'svg-long-error' => 'אומגילטיקע SVG טעקע: $1',
 );
index cbfabe9..604f5fe 100644 (file)
@@ -101,7 +101,7 @@ $messages = array(
 
 'underline-always' => 'Nígbà gbogbo',
 'underline-never' => 'Rárá',
-'underline-default' => 'Ti agbétàkùn',
+'underline-default' => 'Ti àwọ tàbí ẹrọ́ ìtọ́kùn',
 
 # Font style option in Special:Preferences
 'editfont-style' => 'Oge fọ́ntì ààlà àtúnṣe:',
@@ -209,7 +209,7 @@ $messages = array(
 'vector-action-protect' => 'Àbò',
 'vector-action-undelete' => 'Ìmúkúrò ìparẹ́',
 'vector-action-unprotect' => 'Ìyípadà àbò',
-'vector-simplesearch-preference' => 'Ìgbàláyè àwọn ìgbànímọ̀ràn àwáàrí aláàmúdára (awọ Vector nìkan)',
+'vector-simplesearch-preference' => 'Ìgbàláyè pẹpẹ ìṣàwárí ọnídídẹ̀rọ̀ (awọ Vector nìkan)',
 'vector-view-create' => "Ṣ'èdá",
 'vector-view-edit' => 'Àtúnṣe',
 'vector-view-history' => 'Wo ìtàn',
@@ -219,6 +219,7 @@ $messages = array(
 'namespaces' => 'Àwọn orúkọàyè',
 'variants' => 'Àwọn oriṣiríṣi',
 
+'navigation-heading' => 'Ètò ìtọ́sọ́nà',
 'errorpagetitle' => 'Àsìṣe',
 'returnto' => 'Padà sí $1.',
 'tagline' => "Lát'ọwọ́ {{SITENAME}}",
@@ -316,6 +317,10 @@ $1',
 'youhavenewmessages' => 'Ẹ ní $1 ($2).',
 'newmessageslink' => 'ìránṣẹ́ tuntun',
 'newmessagesdifflink' => 'àtúnṣe tógbẹ̀yìn',
+'youhavenewmessagesfromusers' => 'Ẹ ní $1 láti ọ̀dọ̀ {{PLURAL:$3|oníṣe míràn|àwọn oníṣe $3}} ($2).',
+'youhavenewmessagesmanyusers' => 'Ẹ ní $1 láti ọ̀dọ̀ àwọn oníṣe púpọ̀ ($2).',
+'newmessageslinkplural' => '{{PLURAL:$1|ìránṣẹ́ tuntun kan|àwọn ìránṣẹ́ tuntun}}',
+'newmessagesdifflinkplural' => '{{PLURAL:$1|àtúnṣe|àwọn àtúnṣe}} tógbẹ̀yìn',
 'youhavenewmessagesmulti' => 'Ẹ ní ìránsẹ́ tuntun ni $1',
 'editsection' => 'àtúnṣe',
 'editold' => 'àtúnṣe',
@@ -409,6 +414,8 @@ Tí kì bá ṣe bẹ́ẹ̀, ó lè jẹ́ pé ẹ ti rí àsìṣe nínú atò
 'cannotdelete' => 'Ojúewé tàbí fáìlì "$1" kò ṣe é parẹ́.
 Oníṣe mìíràn le ti paárẹ́.',
 'cannotdelete-title' => 'Kò le pa ojúewè "$1" rẹ́',
+'delete-hook-aborted' => 'Hook ti ṣe ìdádúró ìparẹ́.
+Kò ṣe àlàyé kankan.',
 'badtitle' => 'Àkọ́lé búrurú',
 'badtitletext' => 'Àkọlé ojúewé tí ẹ bèrè fún kò ní ìbáramu, jẹ́ òfo, tàbí áṣìṣe wà nínú ìjápọ̀ àkọlé láàrin èdè tàbí láàrin wiki.
 Ó ṣe é ṣe kó jẹ́pé ó ní ìkan tàbí ọ̀pọ̀ àmi-lẹ́tà tí kò ṣe é lò nínú àkọlé.',
@@ -424,7 +431,7 @@ Oníṣe mìíràn le ti paárẹ́.',
 'actionthrottled' => 'Ìgbése bíntín',
 'actionthrottledtext' => 'Láti dènà spam, ìgbése yìí kò ní ṣe é ṣe lọ́nà iye púpọ̀ láàrin àsìkò bíntín, ẹ̀yin sì ti kọjá iye náà.
 Ẹjọ̀wọ́ ẹ gbíyànjú síi ní ìsẹ́jú díẹ̀.',
-'protectedpagetext' => 'Ojúewé yìí tijẹ́ títìpa. Ẹ kò le se àtúnṣe.',
+'protectedpagetext' => 'Ojúewé yìí ti jẹ́ dídáàbòbò láti dínà ìṣàtúnṣe tàbí ìṣe míràn.',
 'viewsourcetext' => 'Ẹ lè wo ati ẹ lè se àwòkọ ọ̀rọ̀àmì ojúewé yi:',
 'viewyourtext' => "Ẹ le wò bẹ́ẹ̀sìni ẹ le ṣe àwòkọ orísun '''àwọn àtúnṣe yín''' sí ojúewé yìí:",
 'protectedinterface' => 'Ojúewé yìí únpèsè ìfojúkojú ìkọ̀wé fún atòlànà, ó ti jẹ́ dídáàbòbò láti dínà ìlòkulò.',
@@ -438,6 +445,13 @@ Láti ṣ'àfikún tàbí ṣ'àyípadà àwọn ìyédèpadà fún gbogbo àw
 'customjsprotected' => 'Ẹ kò ní ìyọ̀nda láti ṣàtúnṣe ojúewé JavaScript yìí nítorípé ó ní àwọn ìtòjọ oníṣe ẹlòmíràn.',
 'ns-specialprotected' => 'Àtúnṣe kò ṣe é ṣe sí àwọn ojúewé pàtàkì.',
 'titleprotected' => "[[User:$1|$1]] ti dínà sí dídá àkọlé yìí. Ìdí rẹ̀ ni pé ''$2''.",
+'filereadonlyerror' => 'Àtúnṣe kò ṣe é ṣe sí fáìlì "$1" nítorípé ibi-àkójọ fáìlì "$2" jẹ́ fún wíwò nìkàn.
+
+Olùṣeàmójútó tó típa ṣe àlàyé yìí: "$3".',
+'invalidtitle-knownnamespace' => 'Àkọlé àìyẹ tó ní orúkọààyè "$2" àti ìkọ̀rọ̀ "$3"',
+'invalidtitle-unknownnamespace' => 'Àkọlé àìyẹ tó ní nọ́mbà orúkọààyè àìmọ̀ "$1" àti ìkọ̀rọ̀ "$2"',
+'exception-nologin' => 'Kò tí ì wọlé',
+'exception-nologin-text' => 'Ojúewé tàbí ìgbéṣe yìí pọndandan kí ẹ wọlé sórí wiki yìí.',
 
 # Virus scanner
 'virus-badscanner' => "Ìtorapọ̀ búburú: awáìpasẹ̀ èràn aláìmọ̀n : ''$1''",
@@ -458,6 +472,7 @@ Láti ṣ'àfikún tàbí ṣ'àyípadà àwọn ìyédèpadà fún gbogbo àw
 'remembermypassword' => "Ṣè'rántí ìwọlé mi lórí kọ̀mpútà yìí (fún ó pẹ́ jù {{PLURAL:$1|ọjọ́|ọjọ́}} $1)",
 'securelogin-stick-https' => 'Ìwàní sísopọ̀ mọ́ HTTPS lẹ́yín ìwọlé',
 'yourdomainname' => 'Domain yín:',
+'password-change-forbidden' => 'Ẹ kò le ṣe ìyípadà ọ̀rọ̀ìpamọ́ lórí wiki yìí.',
 'externaldberror' => 'Bóyá àsìṣe ìfidájú ibùdó dátà ló ṣẹlẹ̀ tàbí ẹ kò jẹ́ gbígbà ní ààyè láti sọ àpamọ́ òde yín di ọ̀tun.',
 'login' => 'Ìwọlé',
 'nav-login-createaccount' => 'Ìwọlé / Ìforúkọ sílẹ̀',
@@ -535,6 +550,7 @@ E-mail kankan kò ní jẹ́ fífiránṣẹ́ fún ìkankan nínú àwọn ìn
 'invalidemailaddress' => 'Àdírẹ́sì e-mail náà kò ṣe é gbà torípé ó dà bi pé irú rẹ̀ kò tọ́.
 Ẹ jọ̀wọ́ ẹ pèsè àdírẹ́sì tó tọ́ tàbí kí ẹ fi ààyè náà sí òfo.',
 'cannotchangeemail' => 'Àwọn àdírẹ́sì e-mail àpamọ́ kò ṣe é yípadà lórí wiki yìí.',
+'emaildisabled' => 'Ibiìtàkùn yìí kò le fi e-mail ránṣẹ́.',
 'accountcreated' => 'Ẹ ti fi orúkọ sílẹ̀',
 'accountcreatedtext' => "A ti ṣ'èdá àkópamọ́ oniṣe fún $1.",
 'createaccount-title' => 'Ìforúkọ sílẹ̀ fún {{SITENAME}}',
@@ -609,6 +625,7 @@ $2
 'changeemail-oldemail' => 'Àdírẹ̀sì E-mail ìsinsìnyí:',
 'changeemail-newemail' => 'Àdírẹ̀sì E-mail tuntun:',
 'changeemail-none' => '(kòsí)',
+'changeemail-password' => 'Ọ̀rọ̀ìpamọ́ {{SITENAME}} yín:',
 'changeemail-submit' => 'Ìyípadà E-mail',
 'changeemail-cancel' => 'Fagilé',
 
@@ -688,7 +705,7 @@ $1 ni ó ṣe ìdínà.
 'nosuchsectiontext' => 'Ẹ ti gbìyànjú láti ṣàtúnṣe abala tí kòsí.
 Ó ti le jẹ́ yíyípò tàbí píparẹ́ nígbà tí ẹ ún bojúwo ojúewé náà.',
 'loginreqtitle' => "Ẹ gbọ́dọ̀ kọ́kọ́ w'ọlé ná",
-'loginreqlink' => 'ẹ wọlé',
+'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.
@@ -708,6 +725,10 @@ Tó bá jẹ́ pé oníṣe aláìlórúkọ ni yín, tí ẹ sì ri pé wọ́n
 'noarticletext-nopermission' => 'Lọ́wọ́lọ́wọ́ kò sí ìkọ̀ nínú ojúewé yìí.
 Ẹ le [[Special:Search/{{PAGENAME}}|wá àkọlé ojúewé yìí]] nínú àwọn ojúewé mìíràn, tàbí
 <span class="plainlinks">[{{fullurl:{{#Special:Log}}|page={{FULLPAGENAMEE}}}} wá àwọn àkọọ́lẹ̀ tó bámu]</span>, sùgbọ́n ẹ kò ní àṣẹ láti ṣ\'ẹ̀dá ojúewé yìí.',
+'missing-revision' => 'Àtúnyẹ̀wò #$1 ojúewé tó únjẹ́ "{{PAGENAME}}" kò sí.
+
+Èyí únsábà ṣẹlẹ̀ nítorípé ẹ tẹ̀lé ìtàn àjápọ̀ tí kò ṣiṣẹ́ mọ́ wá sí orí ojúewé tó ti jẹ́ píparẹ́.
+Ẹ̀kúnrẹ́rẹ́ wà nínú [{{fullurl:{{#Special:Log}}/delete|page={{FULLPAGENAMEE}}}} àkọọ́lẹ̀ ìparẹ́].',
 'userpage-userdoesnotexist' => 'Àkópamọ́ oníṣe "<nowiki>$1</nowiki>" kò tíì jẹ́ fíforúkọsílẹ̀.
 Ẹjọ̀wọ́ ẹ ṣ\'àgbéyẹ̀wò bóyá ẹ fẹ́ dá/ṣàtúnṣe ojúewé yìí.',
 'userpage-userdoesnotexist-view' => 'Àpamọ́ oníṣe "$1" kò jẹ́ fífilórúkọsílẹ̀.',
@@ -734,7 +755,7 @@ Tó bá jẹ́ pé oníṣe aláìlórúkọ ni yín, tí ẹ sì ri pé wọ́n
 'note' => "'''Àkíyèsí:'''",
 'previewnote' => "'''Ẹ rántí pé àyẹ̀wò lásán nì yí.'''
 Àwọn àtúnṣe yín kò tíì jẹ́ kìkópamọ́!",
-'continue-editing' => 'Ìtẹ̀síwájú àtúnṣe',
+'continue-editing' => 'Ẹ lọ sí ibi ìṣàtúnṣe',
 'previewconflict' => 'Àkọ́wò yìí jẹ́ bí ìkọ̀rọ̀ inú àlà ìtúnṣe ìkọ̀rọ̀ òkè yíò ṣe hàn tí ẹ bá yàn láti ṣàmúpamọ́.',
 'session_fail_preview' => "'''Àforíjìn! A kò le gbésẹ̀ àtúnṣe yín nítorí ìpòfo data ìsinsìyí.
 Ẹ jọ̀wọ́ ẹ gbìyànjú lẹ́ẹ̀kan si.
@@ -783,7 +804,7 @@ Olùmójútó tó tìípadé ṣe àlàyé yìí: $1",
 'protectedpagewarning' => "'''Ìkìlọ̀: Ojúewé yìí ti jẹ́ títìpa, nítoríẹ̀ àwọn alámòjútó nìkan ni wọ́n ní ẹ̀tọ́ láti ṣàtúnṣe rẹ̀.'''
 Àkọọ́lẹ̀ àìpẹ́ nìyí nísàlẹ̀ fún ìtọ́kasí:",
 'semiprotectedpagewarning' => "'''Àkíyèsí:''' Ojúewé yìí ti jẹ́ títìpa nítoríẹ̀ àwọn oníṣe tí wọ́n ti forúkọsílẹ̀ nìkan ni wọ́n le ṣàtúnṣe rẹ̀.
-Àkọọ́lẹ̀ àìpẹ́ nìyí nísàlẹ̀ fún ìtọ́kasí.",
+Àkọọ́lẹ̀ àìpẹ́ nìyí nísàlẹ̀ fún ìtọ́kasí:",
 'cascadeprotectedwarning' => "'''Ìkìlọ̀:''' Ojúewé yìí ti jẹ́ dídáàbòbò bíi bẹ́ẹ̀ àwọn oníṣe tí wọ́n ní ẹ̀tọ́ amójútó nìkan ni wọ́n le ṣàtúnṣe rẹ̀, nítorípé ó wà nínú   
 {{PLURAL:$1|ojùewé|àwọn ojúewé}} aláàbò-ajámọ́ra yìí:",
 'titleprotectedwarning' => "'''Ìkìlọ̀: Ojúewé yìí ti jẹ́ dídáàbòbò bíi bẹ́ẹ̀ [[Special:ListGroupRights|àwọn ẹ̀tọ́ pàtó]] di dandan láti ṣèdá rẹ̀.'''
@@ -794,7 +815,6 @@ Olùmójútó tó tìípadé ṣe àlàyé yìí: $1",
 'template-protected' => '(aláàbò)',
 'template-semiprotected' => '(aláàbò díẹ̀)',
 'hiddencategories' => 'Ojúewé yìí jẹ́ ìkan nínú {{PLURAL:$1|ẹ̀ka bíbòmọ́lẹ̀ 1|àwọn ẹ̀ka bíbòmọ́lẹ̀ $1}}:',
-'nocreatetitle' => 'Ìdènà ìdá ojúewé',
 'nocreatetext' => "{{SITENAME}} ti pààlà ààyè láti ṣ'èdá ojúewé tuntun.
 Ẹ le padà sẹ́yìn kí ẹ ṣ'àtúnṣe ojúewé tó wà, tàbí [[Special:UserLogin|kí ẹ wọlé tàbí kí ẹ ṣ'èdá àpamọ́]].",
 'nocreate-loggedin' => "Ẹ kò ní ìyọ̀nda láti ṣe'dá ojúewé tuntun.",
@@ -818,6 +838,16 @@ Kò ṣe àlàyé kankan.',
 'edit-no-change' => 'A ṣe àìkàsí àtúnṣe yín, nítorípé ìkọ̀wé kò ní àtúnṣe kankan.',
 'edit-already-exists' => "A kò le è ṣè'dá ojúewé tuntun.
 Ó pilẹ̀ ti wà.",
+'defaultmessagetext' => 'Ìkọ ìránṣẹ́ àtìbẹ̀rẹ̀',
+'content-failed-to-parse' => 'Ìkùnà láti ṣàtúwò àkóónú $2 fún àfijúwe $1: $3',
+'invalid-content-data' => 'Àkóónú dátà tí kò yẹ',
+'content-not-allowed-here' => 'Àkóónú "$1" kò ní ìyọ̀nda lórí ojúewé [[$2]]',
+
+# Content models
+'content-model-wikitext' => 'ìkọ̀rọ̀ wiki',
+'content-model-text' => 'ìkọ̀rọ̀ kedere',
+'content-model-javascript' => 'JavaScript',
+'content-model-css' => 'CSS',
 
 # Parser/template warnings
 'expensive-parserfunction-warning' => "'''Ìkìlọ̀:''' Ojúewé yìí ní àwọn ìpè olùtúwò ìmúṣe adíyelélórí tó pọ̀ ju bóṣeyẹlọ.
@@ -833,6 +863,13 @@ Kò ṣe àlàyé kankan.',
 'parser-template-loop-warning' => 'Ìlọ́po àdàkọ ti ṣẹlẹ̀: [[$1]]',
 'parser-template-recursion-depth-warning' => 'Iye ìgbà àtúnpè àdákọ ti pọ̀ju bóṣeyẹ lọ ($1)',
 'language-converter-depth-warning' => 'Iye ìgbà ìyédèpadà ti pọ̀ju bóṣeyẹ lọ ($1)',
+'node-count-exceeded-category' => 'Àwọn ojúwé tí iye ojúìsopọ̀ wọn ju bóṣeyẹ lọ',
+'node-count-exceeded-warning' => 'Ojúewé ní iye ojúìsopọ̀ tó ju bóṣeyẹ lọ',
+'expansion-depth-exceeded-category' => 'Àwọn ojúewé tí ìjìn ìfẹ̀lọ wọn ju bóṣeyẹ lọ',
+'expansion-depth-exceeded-warning' => 'Ojúewé ní ìjìn ìfẹ̀lọ tó ju bóṣeyẹ lọ',
+'parser-unstrip-loop-warning' => 'Ìyípo unstrip ti jẹ́ fínfín',
+'parser-unstrip-recursion-limit' => 'Ó ti kọjá àlà ìlọ́po unstrip ($1)',
+'converter-manual-rule-error' => 'Àṣìṣe ti jẹ́ fínfín nínú ìlànà ìyípadà èdè àfọwọ́dá',
 
 # "Undo" feature
 'undo-success' => 'Àtúnṣe náà ṣe é múkúrò.
@@ -926,6 +963,10 @@ Kò ṣe àlàyé kankan.',
 'revdelete-text' => "'''Àwọn àtúnyẹ̀wò onípíparẹ́ àti ìṣẹ̀lẹ̀ yíò sì tún hàn nínú ojúewé ìtàn àti àkọọ́lẹ̀, sùgbọ́n àwọn apá àkóónú wọn kò ní hàn jáde sí ìgboro'''
 Àwọn olùmójútó míràn lórí {{SITENAME}} yíò sí tún le wo àkóónú àbòmọ́lẹ̀ náà bẹ́ẹ̀sìni wọ́n le mú ìparẹ́ kúrò lórí ìfojúkojú yìí, àyàfi tí àwọn ìdíwọ́ míràn bá jẹ́ títòsílẹ̀.",
 'revdelete-confirm' => 'Ẹ jọ̀wọ́ ẹ rídájú pé ohun tí ẹ fẹ́ ṣe nìyí, pé ohun tí yíò ṣẹlẹ̀ yé yín, bẹ́ẹ̀sìni pé ẹ̀ únṣe é lọ́nà tó bá  [[{{MediaWiki:Policy-url}}|àdéhùn]] mu.',
+'revdelete-suppress-text' => "Ìrẹ̀mọ́lẹ̀ gbọ́dọ̀ jẹ́ lílò fún àwọn ìṣẹ̀lẹ̀ ìsàlẹ̀ wọ̀nyí '''nìkan''':
+*Ọ̀rọ̀ tó le fa ẹjọ́ wá
+*Ọ̀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-image' => 'Ìbòmọ́lẹ̀ àkóónú fáìlì',
@@ -992,6 +1033,7 @@ Kò ṣe é bòmọ́lẹ̀.',
 'mergehistory-submit' => 'Ìdàpọ̀ àwọn àtúnyẹ̀wò',
 'mergehistory-empty' => 'Àwọn àtúnyẹ̀wó kankan kò ṣeédàpọ̀.',
 'mergehistory-success' => '{{PLURAL:$3|Àtúnyẹ̀wò|Àwọn àtúnyẹ̀wò}} $3 fún [[:$1]] jẹ́ dídàpọ̀ mọ́ [[:$2]] láyọrísírere.',
+'mergehistory-fail' => 'Kò le ṣe ìdàpọ̀ ìtàn, ẹ jọ̀wọ́ ẹ ṣàyẹ̀wò ojúewé náà àti àwọn pàrámità àkókò.',
 'mergehistory-no-source' => 'Ojúewé orísun $1 kò sí.',
 'mergehistory-no-destination' => 'Ojúewé ìdópin $1 kò sí.',
 'mergehistory-invalid-source' => 'Ojúewé orísun gbọ́dọ̀ ní àkọlé tótọ́.',
@@ -1018,6 +1060,10 @@ Kò ṣe é bòmọ́lẹ̀.',
 'editundo' => 'dápadà',
 'diff-multi' => '({{PLURAL:$1|Àtúnyẹ̀wò inú àrin kan|Àwọn àtúnyẹ̀wò inú àrin $1}} látọwọ́ {{PLURAL:$2|oníṣe kan|àwọn oníṣe $2}} kò jẹ́ fífihàn)',
 'diff-multi-manyusers' => '({{PLURAL:$1|Àtúnyẹ̀wò inú àrin kan|Àwọn àtúnyẹ̀wò inú àrin $1}} látọwọ́ {{PLURAL:$2|oníṣe|àwọn oníṣe}} tó pọ̀ju $2 lọ kò jẹ́ fífihàn)',
+'difference-missing-revision' => '{{PLURAL:$2|Àtúnyẹ̀wò kan|Àwọn àtúnyẹ̀wò $2}} ìyàtọ̀ yìí ($1) kò {{PLURAL:$2|sí|sí}}.
+
+Èyí ṣẹlẹ̀ nítorí pé ẹ tẹ̀lé àjápọ̀ ìyàtọ̀ tí kò ṣiṣẹ́ mọ́ wá sí ojúewé tó ti jẹ́ píparẹ́.
+Ẹ̀kúnrẹ́rẹ́ wà nínú [{{fullurl:{{#Special:Log}}/delete|page={{FULLPAGENAMEE}}}} àkọọ́lẹ̀ ìparẹ́].',
 
 # Search results
 'searchresults' => 'Àwọn èsì àwárí',
@@ -1091,6 +1137,7 @@ Ní báyìí ná ẹ le ṣàwárí lọ́dọ̀ Google.
 'qbsettings-fixedright' => 'Kíkàn sí ọ̀tún',
 'qbsettings-floatingleft' => 'Léfòó sí òsì',
 'qbsettings-floatingright' => 'Léfòó sí ọ̀tún',
+'qbsettings-directionality' => 'Fi sí ẹ̀gbẹ́, gẹ́gẹ́ bí ìdojúkọ lẹ́tà-ọ̀rọ̀ èdè yín bá ṣe rí',
 
 # Preferences page
 'preferences' => 'Àwọn ìfẹ́ràn',
@@ -1129,11 +1176,15 @@ Ní báyìí ná ẹ le ṣàwárí lọ́dọ̀ Google.
 'columns' => 'Àwọn ìtẹ̀lé gogoro:',
 'searchresultshead' => 'Àwárí',
 'resultsperpage' => 'Àwọn èsì ní ojúewé kọ̀ọ̀kan:',
+'stub-threshold' => 'Àlà fún idárú <a href="#" class="stub">àjàpọ̀ ẹ̀kúnrẹ́rẹ́</a> (bytes):',
 'stub-threshold-disabled' => 'Dídálẹ́kun',
 'recentchangesdays' => 'Iye ọjọ́ láti fihàn nínú àwọn àtúnṣe tuntun:',
 'recentchangesdays-max' => '{{PLURAL:$1|Ọjọ́|Ọjọ́}} $1 púpọ̀jùlọ',
 'recentchangescount' => 'Iye àtúnṣe láti fihàn látìbẹ̀rẹ̀:',
 'prefs-help-recentchangescount' => 'Àwọn àtúnṣe tuntun, ìtàn ojúewé, àti àkọọ́lẹ̀ wà nínú èyí.',
+'prefs-help-watchlist-token' => 'Tí ẹ bá fílì fọ́ọ̀mù yìí pẹ̀lú kọ́kọ́rọ́ àmìọ̀rọ̀ àsírí yíò dá feed RSS fún ìmójútó yín.
+Ẹnikẹ́ni tó bá mọ kọ́kọ́rọ́ àmìọ̀rọ̀ náà nínú fọ́ọ̀mù yìí yíò le ka ìmójútó yín, nítoríẹ̀ ẹ mú nọ́mbà tó pamọ́.
+Nọ́mbà àrìnnàkò kan nìyí tí ẹ le lò: $1',
 'savedprefs' => 'Àwọn ìfẹ́ràn yín ti jẹ́mímúpapọ́.',
 'timezonelegend' => 'Àsìkò ilẹ̀àmùrè:',
 'localtime' => 'Àkókò ìbílẹ̀:',
@@ -1166,13 +1217,14 @@ Kò ní ṣeé dápadà mọ́.',
 'prefs-emailconfirm-label' => 'E-mail ìmúdájú:',
 'prefs-textboxsize' => 'Ìtóbi fèrèsé àtúnṣe',
 'youremail' => 'E-mail:',
-'username' => 'Orúkọ oníṣe:',
-'uid' => 'Nọmba ìdámọ̀ fún oníṣe:',
-'prefs-memberingroups' => 'Ọ̀kan nínú {{PLURAL:$1|ẹgbẹ́|àwọn ẹgbẹ́}}:',
+'username' => '{{GENDER:$1|Orúkọ oníṣe}}:',
+'uid' => 'Nọmba ìdámọ̀ {{GENDER:$1|oníṣe}}:',
+'prefs-memberingroups' => '{{GENDER:$2|Ọ̀kan}} nínú {{PLURAL:$1|ẹgbẹ́|àwọn ẹgbẹ́}}:',
 'prefs-registration' => 'Àsìkò ìforúkọsílẹ́:',
 'yourrealname' => 'Orúkọ ganangan:',
 'yourlanguage' => 'Èdè:',
 'yourvariant' => 'Orísi èdè àkóónú:',
+'prefs-help-variant' => 'Irú ìfẹ́ràn tàbí ọ̀nàìkọ̀rọ̀ láti fí àkóónú ojúewé hàn lórí wiki yìí.',
 'yournick' => 'Ìtọwọ́bọ̀wé tuntun:',
 'prefs-help-signature' => 'Àwọn àwísọ lórí àwọn ojúewé ọ̀rọ̀ gbọdọ̀ jẹ́ titọwọ́bọ̀ pẹ̀lú "<nowiki>~~~~</nowiki>" tí yíò jẹ́ yíyípadà sí ìtọwọ́bọ̀wé yín àtí àmì àsìkò.',
 'badsig' => 'Ìtọwọ́bọ̀wé gidi àìtọ́.
@@ -1183,6 +1235,8 @@ Kò gbodọ̀ ju $1 {{PLURAL:$1|àmìlẹ́tà|àwọn àmìlẹ́tà}} lọ.',
 'gender-unknown' => 'Àláìtọ́kasí',
 'gender-male' => 'Akọ',
 'gender-female' => 'Abo',
+'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',
 'prefs-help-realname' => 'Orúkọ gangan kò pọndandan.
 Tí ẹ bá fisílẹ̀ a ó lòó láti tóka iṣẹ́ yín fún yín.',
@@ -1280,6 +1334,7 @@ Tí ẹ bá fisílẹ̀ a ó lòó láti tóka iṣẹ́ yín fún yín.',
 'right-writeapi' => 'Ìo ìkọ API',
 'right-delete' => 'Pa àwọn ojúewé rẹ́',
 'right-bigdelete' => 'Pa àwọn ojúewé pẹ̀lú àwọn ìtàn títóbi rẹ́',
+'right-deletelogentry' => 'Ìparẹ́ àti ìdápadà ìparẹ́ àwọn ohun inú àkọọ́lẹ̀ pàtó',
 'right-deleterevision' => 'Ìparẹ́ àti ìmúparẹ́ kúrò fún àwọn àtúnyẹ̀wò ojúewé pàtò',
 'right-deletedhistory' => 'Ìwo àwọn ìtìbọ̀ ìtàn onípíparẹ́, láì ní ìkọ wọn',
 'right-deletedtext' => 'Ìwo ìkọ onípíparẹ́ àti ìyípadà láàrin àwọn àtúnyẹ̀wò onípíparẹ́',
@@ -1316,12 +1371,13 @@ Tí ẹ bá fisílẹ̀ a ó lòó láti tóka iṣẹ́ yín fún yín.',
 'right-sendemail' => 'Fi e-mail ránṣẹ́ sí àwọn oníṣe míràn',
 'right-passwordreset' => 'Ìwo àwọn e-mail fún ìtúntò ọ̀rọ̀ìpamọ́',
 
+# Special:Log/newusers
+'newuserlogpage' => 'Àkọsílẹ̀ ìdá oníṣe',
+'newuserlogpagetext' => 'Àkọọ́lẹ̀ àwọn ìdá oníṣe nì yí.',
+
 # User rights log
 'rightslog' => 'Àwọn ẹ̀tọ́ oníṣe',
 'rightslogtext' => 'Èyì ni àkọọ́lẹ̀ kan àwọn àtúnṣe sí àwọn ẹ̀tọ́ oníṣe.',
-'rightslogentry' => 'yí ẹgbẹ́ tí $1 wà kúrò láti $2 sí $3',
-'rightslogentry-autopromote' => 'jẹ́ gbígbéga láláraẹni láti $2 sí $3',
-'rightsnone' => '(kòsí)',
 
 # Associated actions - in the sentence "You do not have permission to X"
 'action-read' => 'wo ojúewé yìí',
@@ -1461,9 +1517,10 @@ Láti fí fáìlì pọ̀mọ́ sínú ojúewé kan, ẹ lo àjápọ̀ bíi ìk
 'filename-tooshort' => 'Orúkọ fáílì kéréjú bó ṣe yẹ lọ.',
 'filetype-banned' => 'Irú fáílì yìí ti jẹ́ dídí lọ́nà.',
 'verification-error' => 'Fáìlì yìí kò kọjá ìfidájú fáìlì.',
+'hookaborted' => 'Ìtúndáṣe tí ẹ fẹ́ ṣe ti jẹ́ dídálẹ́kun látọwọ́ ìfàgùn.',
 'illegal-filename' => 'Orúkọ fáílì yìí kò jẹ́ gbígbàláàyè.',
 'overwrite' => 'Ìkọsórí fáìlì tó wà kò jẹ́ gbígbà láàyè.',
-'unknown-error' => 'Àsìṣe aláìmọ̀ kan ti ṣẹlẹ̀.',
+'unknown-error' => 'Àsìṣe àìdámọ̀ kan ti ṣẹlẹ̀.',
 'tmp-create-error' => 'Kò le dá fáìlì onígbàdíẹ̀.',
 'tmp-write-error' => 'Àsìṣe kíkọ fáìlí onígbàdíẹ̀.',
 'large-file' => 'O jẹ́ gbígbàníyànjú pé àwọn fáìlì ò gbọdọ̀ tóbi ju $1 lọ; 
@@ -1548,6 +1605,7 @@ Tí ìṣòro náà ò bá jáwọ́, ẹ bẹ [[Special:ListUsers/sysop|olùmó
 'upload-too-many-redirects' => 'URL náà ní àwọn àtúnjúwe pípọ̀jùlọ',
 'upload-unknown-size' => 'Iye ìtóbi kòsí',
 'upload-http-error' => 'Àṣìṣe HTTP ti ṣẹlẹ̀: $1',
+'upload-copy-upload-invalid-domain' => 'Àwòkọ àwọn ìrùsókè kò sí láti apá yìí.',
 
 # File backend
 'backend-fail-stream' => 'Kò le ṣe ìgbéhànjáde fáìlì "$1".',
@@ -1557,6 +1615,7 @@ Tí ìṣòro náà ò bá jáwọ́, ẹ bẹ [[Special:ListUsers/sysop|olùmó
 'backend-fail-notsame' => 'Fáìlì aláìjọra kan pilẹ̀ ti wà ní $1.',
 'backend-fail-invalidpath' => '$1 kìí ṣe ojúọ̀nà ibi-ìkópamọ́ oníìbámu.',
 'backend-fail-delete' => 'Ìparẹ́ fáìlì $1 kò ṣe é ṣe.',
+'backend-fail-describe' => 'Kò le yí metadátà padà fún fáìlì "$1".',
 'backend-fail-alreadyexists' => 'Fáìlì $1 pilẹ̀ ti wà.',
 'backend-fail-store' => 'Kò le ṣe ìkópamọ́ fáìlì $1 sí $2.',
 'backend-fail-copy' => 'Àwòkọ faili $1 sí $2 kò ṣe é ṣe.',
@@ -1566,6 +1625,18 @@ Tí ìṣòro náà ò bá jáwọ́, ẹ bẹ [[Special:ListUsers/sysop|olùmó
 'backend-fail-closetemp' => 'Kò le de fáìlì onígbàdíẹ̀.',
 'backend-fail-read' => 'Kò le ka fáìlì "$1".',
 'backend-fail-create' => 'Kò le kọ fáìlì $1.',
+'backend-fail-maxsize' => 'Kò le kọ fáìlì "$1" ntorípé o tóbi ju {{PLURAL:$2|byte kan|byte $2}} lọ.',
+'backend-fail-readonly' => 'Ibi ìfipamọ́ "$1" jẹ́ kíà nìkan báyìí. Ìdí rẹ̀ ni: "\'\'$2\'\'"',
+'backend-fail-synced' => 'Fáìlì "$1" wà ní àyè àìbáramu nínú àwọn ibi ìfipamọ́.',
+'backend-fail-connect' => 'Kò le sorapọ̀ mọ́ ibi ìfipamọ́ "$1".',
+'backend-fail-internal' => 'Àsìṣe àìdámọ̀ ṣẹlẹ̀ nínú ibi ìfipamọ́ "$1".',
+'backend-fail-contenttype' => 'Irú àkóónú fáìlì fún ìmúpamọ́ sí "$1" kò ṣe é sọ.',
+'backend-fail-batchsize' => 'Ibi ìfipamọ́ gba àdìpọ̀ {{PLURAL:$1|ìmúṣe|ìmúṣe}} fáìlì $1; ẹ̀kun jẹ́ {{PLURAL:$2|ìmúṣe|ìmúṣe}} $2.',
+'backend-fail-usable' => 'Kò le kà tàbí kọ fáìlì "$1" nítorí àìní ìyọ̀nda tàbí àìsí àpò/ìkóhunsí.',
+
+# File journal errors
+'filejournal-fail-dbconnect' => 'Kò le sorapọ̀ mọ́ ibùdó dátà fún ibi ìfipamọ́ "$1".',
+'filejournal-fail-dbquery' => 'Kò le sọ ibùdó dátà di ọ̀tun fún ibi ìfipamọ́ "$1".',
 
 # Lock manager
 'lockmanager-notlocked' => 'Kò le sí àgádágodo "$1" sílẹ̀; kò jẹ́ dídè.',
@@ -1574,7 +1645,9 @@ Tí ìṣòro náà ò bá jáwọ́, ẹ bẹ [[Special:ListUsers/sysop|olùmó
 'lockmanager-fail-acquirelock' => 'Kò le gba àgádágodo fáìlì lò fún "$1".',
 'lockmanager-fail-openlock' => 'Kò le sí àgádágodo fáìlì sílẹ̀ fún "$1".',
 'lockmanager-fail-releaselock' => 'Kò le fi àgádágodo fáìlì sílẹ̀ fún "$1".',
+'lockmanager-fail-db-bucket' => 'Kò le pàdé àgádágodo ibùdó dátà nínú garawa $1.',
 'lockmanager-fail-db-release' => 'Kò le fi àwọn àgádágodo sílẹ̀ lórí ìbùdó dátà $1.',
+'lockmanager-fail-svr-acquire' => 'Kò sí àgádágodo fún ẹ̀rọ-ìpèsè $1.',
 'lockmanager-fail-svr-release' => 'Kò le fi àwọn àgádágodo sílẹ̀ lórí ẹ̀rọ-ìwọ̀fà $1.',
 
 # ZipDirectoryReader
@@ -1590,6 +1663,7 @@ Kò ṣe é yẹ̀wò fún àbò.',
 'uploadstash-summary' => 'Ojúewé yí jẹ́ ibi ìbọ́sí sí àwọn fáìlì tó jẹ́ rírùsókè (tàbí tí wọ́n únjẹ́ rírùsókè) sùgbọ́n tí wọn kò tíì jẹ́ títẹ̀jáde sí wiki. Oníṣe tó rù wọ́n sókè nìkan ló le rí àwọn fáìlì wọ̀nyí.',
 'uploadstash-clear' => 'Pa àwọn fáìlì àkódání rẹ́',
 'uploadstash-nofiles' => 'Ẹ kò ní fáìlì àkódání kankan',
+'uploadstash-badtoken' => 'Ohun tí ẹ fẹ́ ṣe kò yọrí sí rere, bóyá agbára ìṣàtúnṣe yín ti parí. Ẹ tún dán wò.',
 'uploadstash-errclear' => 'Ìparẹ́ àwọn fáìlì náà kò yorísírere.',
 'uploadstash-refresh' => 'Àtúnraṣe àtòjọ àwọn fáìlì',
 
@@ -1683,11 +1757,16 @@ Tó bá jẹ́ jíjọ̀ gẹ́gẹ́bí oníṣe, àwọn fáìlì tí oníṣe
 Ẹ jọ̀wọ́ ẹ wọ [$2 ojúewé ìjúwe fáìlì] fún ẹ̀kúnrẹ́rẹ́.',
 'sharedupload-desc-here' => 'Fáìlì yìí wá láti $1, ó sì ṣe é lò nínú àwọn iṣẹ́ ọwọ́ míràn.
 Ìjúwe lórí [$2 ojúewé ìjúwe fáìlì] rẹ̀ níbẹ̀ nìyí lábẹ́.',
+'sharedupload-desc-edit' => 'Fáìlì yìí wá láti $1, ó sì ṣe é lò nínú àwọn iṣẹ́ ọwọ́ míràn. 
+Ó ṣe é ṣe kó jẹ́ pé ẹ fẹ́ ṣàtúnṣe ìjúwe lórí [$2 ojúewé ìjúwe fáìlì] rẹ̀ níbẹ̀.',
+'sharedupload-desc-create' => 'Fáìlì yìí wá láti $1, ó sì ṣe é ṣe pé ó jẹ́ lílò nínú àwọn iṣẹ́ ọwọ́ míràn. 
+Ó ṣe é ṣe kó jẹ́ pé ẹ fẹ́ ṣàtúnṣe ìjúwe lórí [$2 ojúewé ìjúwe fáìlì] rẹ̀ níbẹ̀.',
 'filepage-nofile' => 'Kò sí fáìlì pẹ̀lú orúkọ yìí.',
 'filepage-nofile-link' => 'Kò sí fáìlì pẹ̀lú orúkọ yìí, sùgbọ́n ẹ le [$1 rùúsókè].',
 'uploadnewversion-linktext' => 'Ẹ ṣe ìrùsókè àtúnṣe tuntun fáìlì yìí',
 'shared-repo-from' => 'láti $1',
 'shared-repo' => 'ibi-àkójọ àjọpín kan',
+'upload-disallowed-here' => 'Ẹ kò le ṣe ìkọlélórí fáìlì yìí.',
 
 # File reversion
 'filerevert' => 'Dá $1 padà',
@@ -1709,12 +1788,14 @@ Tó bá jẹ́ jíjọ̀ gẹ́gẹ́bí oníṣe, àwọn fáìlì tí oníṣe
 'filedelete-success' => "'''$1''' ti jẹ́ píparẹ́.",
 'filedelete-success-old' => "Àtúnyẹ̀wò '''[[Media:$1|$1]]''' bó ṣe wà ní $3, $2 ti jẹ́ píparẹ́.",
 'filedelete-nofile' => "'''$1''' kò sí.",
+'filedelete-nofile-old' => "Kò sí àtúnyẹ̀wò ìpamọ́ '''$1''' pẹ̀lú àwọn ìdámọ̀ tí ẹ tọ́kasí.",
 'filedelete-otherreason' => 'Ìdíẹ̀ míràn/àfikún:',
 'filedelete-reason-otherlist' => 'Ìdí mìíràn',
 'filedelete-reason-dropdown' => '*Àwọn ìdí fún ìparẹ́ 
 **Ìtakùnà ẹ̀tọ́àwòkọ
 **Fáìlì ẹ̀mejì',
 'filedelete-edit-reasonlist' => 'Àtúnṣe àwọn ìdí ìparẹ́',
+'filedelete-maintenance' => 'Ìparẹ àti ìdápadà àwọn fáìlì ìgbàdíẹ̀ jẹ́ dídálẹ́kun nígbà ìṣètọ́jú.',
 'filedelete-maintenance-title' => 'Fáìlì náà kò ṣeé parẹ́',
 
 # MIME search
@@ -1772,6 +1853,9 @@ Tó bá jẹ́ jíjọ̀ gẹ́gẹ́bí oníṣe, àwọn fáìlì tí oníṣe
 Ojúewé kan jẹ́ ṣíṣe bíi ojúewé ìṣeojúùtú tí ó bá lo àdàkọ tó jápọ̀ láti [[MediaWiki:Disambiguationspage]].",
 
 'doubleredirects' => 'Àwọn àtúnjúwe ẹ̀mẹjì',
+'doubleredirectstext' => 'Ojúewé yìí ṣe àtòjọ àwọn ojúewé tó ṣe àtúnjúwe sí àwọn ojúewé àtúnjúwe míràn. 
+Oríìlà kọ̀ọ̀kan ní àjápọ̀ sí àtúnjúwe àkọ́kọ́ àti èkejì, àti bákannáà ibi tí àtúnjúwe kejì tókasí, tó jẹ́ pé òhun ""gangan" ni ojúewé ìtọ́kasí tó yẹ kí àtúnjúwe àkọ́kọ́ nawọ́ sí.
+Àwọn ìkọsínú <del>fífagi lé lórí</del> ti jẹ́ ṣíṣe ojútùú.',
 'double-redirect-fixed-move' => '[[$1]] ti yípò padà.
 Ó ti ṣe àtúnjúwe sí [[$2]].',
 'double-redirect-fixed-maintenance' => 'Óún ṣe àtúnṣe àtúnjúwe ẹ̀mẹjì láti [[$1]] sí [[$2]].',
@@ -1792,6 +1876,7 @@ Ojúewé kan jẹ́ ṣíṣe bíi ojúewé ìṣeojúùtú tí ó bá lo àdàk
 # Miscellaneous special pages
 'nbytes' => '$1 {{PLURAL:$1|byte|bytes}}',
 'ncategories' => '{{PLURAL:$1|ẹ̀ka|àwọn ẹ̀ka}} $1',
+'ninterwikis' => '{{PLURAL:$1|interwiki|àwọn interwiki}} $1',
 'nlinks' => '{{PLURAL:$1|ìjápọ̀|àwọn ìjápọ̀}} $1',
 'nmembers' => '{{PLURAL:$1|ará|àwọn ará}} $1',
 'nrevisions' => '{{PLURAL:$1|àtúnyẹ̀wò|àwọn àtúnyẹ̀wò}} $1',
@@ -1812,12 +1897,15 @@ Ojúewé kan jẹ́ ṣíṣe bíi ojúewé ìṣeojúùtú tí ó bá lo àdàk
 'wantedpages' => 'Àwọn ojúewé àìsí',
 'wantedpages-badtitle' => 'Àkọlé aláìníìbámu nínú ìtò èsì: $1',
 'wantedfiles' => 'Àwọn fáìlì àìsí',
+'wantedfiletext-cat' => 'Àwọn fáìlì ìsàlẹ̀ wọ̀nyí jẹ́ lílò sùgbọ́n wọn kò sí. Àwọn fáìlì láti ibi-àkósí òkèrè le jẹ́ títò síbẹ̀ bótilẹ̀jẹ́pé wọ́n wà. Ìrú àwọn àdájú irọ́ báhun yíò jẹ́ <del>fífagi lé lórí</del>. Láfikún, àwọn ojúewé tí wọ́n ní fáìlì tí kò sí nínú jẹ́ títòjọ sínú [[:$1]].',
+'wantedfiletext-nocat' => 'Àwọn fáìlì ìsàlẹ̀ wọ̀nyí jẹ́ lílò sùgbọ́n wọn kò sí. Àwọn fáìlì láti ibi-àkósí òkèrè le jẹ́ títò síbẹ̀ bótilẹ̀jẹ́pé wọ́n wà. Ìrú àwọn àdájú irọ́ báhun yíò jẹ́ <del>fífagi lé lórí</del>.',
 'wantedtemplates' => 'Àwọn àdàkọ àìsí',
 'mostlinked' => 'Àwọn ojúewé tó ní ìjápọ̀ mọ́ jùlọ',
 'mostlinkedcategories' => 'Àwọn ẹ̀ka tó ní ìjápọ̀ mọ́ jùlọ',
 'mostlinkedtemplates' => 'Àwọn àdákọ tó ní ìjápọ̀mọ́ jùlọ',
 'mostcategories' => 'Àwọn ojúewé pẹ̀lú àwọn ẹ̀ka tópọ̀jùlọ',
 'mostimages' => 'Àwọn fáìlì tó ní ìjápọ̀mọ́ jùlọ',
+'mostinterwikis' => 'Àwọn ojúewé tó ní ìjápọ̀mọ́ra wiki tó pọ̀jùlọ',
 'mostrevisions' => 'Àwọn ojúewé pẹ̀lu àwọn àtúnyẹ̀wò tópọ̀jùlọ',
 'prefixindex' => 'Gbogbo ojúewé tó ní ìtọ́ka ìpele',
 'prefixindex-namespace' => 'Gbogbo ojúewé pẹ̀lú àlẹ̀mọ́wájú (orúkọàyè $1)',
@@ -1829,8 +1917,10 @@ Ojúewé kan jẹ́ ṣíṣe bíi ojúewé ìṣeojúùtú tí ó bá lo àdàk
 'protectedpages-indef' => 'Àwọn àbò aláìlópin',
 'protectedpages-cascade' => 'Àwọn àbò atẹ̀léra nìkan',
 'protectedpagestext' => 'Àwọn ojúewé ìsàlẹ̀ yìí jẹ́ dídáàbòbò láti yínìpòdà tàbí síṣàtúnṣe',
+'protectedpagesempty' => 'Kò sí àwọn ojúewé kankan tó ní àbò pẹ̀lú àwọn pàrámítà wọ̀nyí.',
 'protectedtitles' => 'Àwọn àkọlé ajẹ́dídáàbòbò',
 'protectedtitlestext' => 'Àwọn àkọlé ìsàlẹ̀ yìí jẹ́ dídáàbòbò láti dá',
+'protectedtitlesempty' => 'Kò sí àwọn àkolé kankan tó ní àbò pẹ̀lú àwọn pàrámítà wọ̀nyí.',
 'listusers' => 'Àkójọ àwọn oníṣe',
 'listusers-editsonly' => 'Ìfihàn àwọn oníṣe tí wọ́n ní àtúnṣe níkan',
 'listusers-creationsort' => 'Ìtò gẹ́gẹ́bí ọjọ́ ìdá',
@@ -1869,6 +1959,7 @@ Ojúewé kan jẹ́ ṣíṣe bíi ojúewé ìṣeojúùtú tí ó bá lo àdàk
 Ẹ le dín iwó kù nípa yíyan irú àkọọ́lẹ̀, orúkọ oníṣe (irú lẹ́tà ṣe kókó), tàbí ojúewé tókàn (irú lẹ́tà ṣe kókó).',
 'logempty' => 'Kò sí ohun ìbámu kankan nínú àkọọ́lẹ̀.',
 'log-title-wildcard' => 'Wá àkọlé tó bẹ̀rẹ̀ pẹ̀lú ìkọ yìí',
+'showhideselectedlogentries' => 'Ìfihàn/ìbòmọ́lẹ̀ àwọn ohun inú àkọọ́lẹ̀ àṣàyàn',
 
 # Special:AllPages
 'allpages' => 'Gbogbo ojúewé',
@@ -1887,6 +1978,12 @@ Ojúewé kan jẹ́ ṣíṣe bíi ojúewé ìṣeojúùtú tí ó bá lo àdàk
 'allpagesbadtitle' => 'Àkọlé ojúewé náà kò ní ìbáramu, tàbí ó ní àlẹ̀mọ́wájú aláàrin èdè tàbí aláàrin wiki.
 Ó ṣe é ṣe kó jẹ́pé ó ní ìkan tàbí ọ̀pọ̀ àmi-lẹ́tà tí kò ṣe é lò nínú àkọlé.',
 'allpages-bad-ns' => '{{SITENAME}} kò ní orúkọààyè "$1".',
+'allpages-hide-redirects' => 'Ìbòmọ́lẹ̀ àtúnjúwe',
+
+# SpecialCachedPage
+'cachedspecial-viewing-cached-ttl' => 'Ẹ̀ únwo àtúnyẹ̀wò ojúewé yìí láti inú cache, ó le pẹ́ tó $1.',
+'cachedspecial-viewing-cached-ts' => 'Ẹ únwo ojúewé yìí tó wà lati cache, ó le mọ́ bá ti gidi mú.',
+'cachedspecial-refresh-now' => 'Ẹ wo ti áìpẹ́.',
 
 # Special:Categories
 'categories' => 'Àwọn ẹ̀ka',
@@ -1907,7 +2004,11 @@ Bákannáà ẹ wo [[Special:WantedCategories|àwọn ẹ̀ka wíwá]].',
 'linksearch-pat' => 'Ọ̀nà àwáàrí:',
 'linksearch-ns' => 'Orúkọàyè:',
 'linksearch-ok' => 'Ṣàwárí',
+'linksearch-text' => 'Àwọn ọ̀rọ̀ àfiwá bíi "*.wikipedia.org" le ṣe é lò.
+Orúkọ ibiàyè pọndandan, fún àpẹrẹ "*.org".<br />
+{{PLURAL:$2|Prótókólù|Àwọn prótókólù}} tí a ṣàtìlẹ́yìn fún: <code>$1</code> (yíó bẹ̀rẹ̀ pẹ̀lú http:// tí prótókólù kankan kò bá jẹ́ títọ́kasí).',
 'linksearch-line' => '$1 jẹ́ jíjápọ̀ láti $2',
+'linksearch-error' => 'Àwọn ọ̀rọ̀ àfiwá le hàn ní ìbẹ̀rẹ̀ orúkọ ibiìtakùn (hostname) nìkan.',
 
 # Special:ListUsers
 'listusersfrom' => 'Ìfihàn àwọn oníṣe nípa bíbẹ̀rẹ̀ láti:',
@@ -1924,10 +2025,6 @@ Bákannáà ẹ wo [[Special:WantedCategories|àwọn ẹ̀ka wíwá]].',
 'activeusers-hidesysops' => 'Ìbòmọ́lẹ̀ àwọn olùmójútó',
 'activeusers-noresult' => 'Kò rí oníṣe kankan.',
 
-# Special:Log/newusers
-'newuserlogpage' => 'Àkọsílẹ̀ ìdá oníṣe',
-'newuserlogpagetext' => 'Àkọọ́lẹ̀ àwọn ìdá oníṣe nì yí.',
-
 # Special:ListGroupRights
 'listgrouprights' => 'Àwọn ẹ̀tọ́ ẹgbẹ́ oníṣe',
 'listgrouprights-summary' => 'Nísàlẹ̀ ni àtòjọ àwọn ẹgbẹ́ oníṣe tó nítumọ̀ lórí wiki yìí, pẹ̀lú àwọn ẹ̀tọ́ lílò wọn.
@@ -1951,8 +2048,10 @@ Bákannáà ẹ wo [[Special:WantedCategories|àwọn ẹ̀ka wíwá]].',
 'mailnologin' => 'Kò sí àdírẹ́sì àfiránṣẹ́',
 'mailnologintext' => 'Ẹ gbọ́dọ̀ ti [[Special:UserLogin|wọlé]] kí ẹ sì ní àdírẹ́ẹ̀sì e-mail oníìbámu nínú [[Special:Preferences|àwọn ìfẹ́ràn]] yín láti le baà le fi e-mail ránṣẹ́ sí àwọn onísẹ míràn.',
 'emailuser' => 'Ẹ fi e-mail ránṣẹ́ sí oníṣe yìí',
+'emailuser-title-target' => 'E-mail sí {{GENDER:$1|oníṣe}} yìí',
+'emailuser-title-notarget' => 'E-mail sí oníṣe',
 'emailpage' => 'E-mail sí oníṣe',
-'emailpagetext' => 'Ẹ le lo fọ́ọ̀mù ìsàlẹ̀ yìí láti fi e-mail ránṣẹ́ sí oníṣe yìí.
+'emailpagetext' => 'Ẹ le lo fọ́ọ̀mù ìsàlẹ̀ yìí láti fi e-mail ránṣẹ́ sí {{GENDER:$1|oníṣe}} yìí.
 Àdírẹ́ẹ̀sì e-mail tí ẹ tìbọ sínú [[Special:Preferences|àwọn ìfẹ́ràn oníṣe yín]] yíò hàn bíi "Láti" àdírẹ́ẹ̀sì e-mail náà, kí agbaìránṣẹ́ ó le baà fi ìdáhùn ránṣẹ́ tààrà sí yín.',
 'usermailererror' => 'Ẹ̀rọ ìránṣẹ́ mú àsìṣe padà:',
 'defemailsubject' => 'E-mail {{SITENAME}} látọwọ́ oníṣe "$1"',
@@ -1991,8 +2090,8 @@ Bákannáà ẹ wo [[Special:WantedCategories|àwọn ẹ̀ka wíwá]].',
 'watchnologin' => 'Ẹ kò tíì wọlé',
 'watchnologintext' => 'Ẹ gbọ́dọ̀ [[Special:UserLogin|wọlè]] láti ṣàtúnṣe ìmójútó yín.',
 'addwatch' => 'Ìfikún mọ́ ìmójútó',
-'addedwatchtext' => "A ti ṣ'àfikún \"[[:\$1]]\" sí [[Special:Watchlist|ìmójútó]] yín.
-A óò ṣ'àkójọ àwọn àtúnṣe ọjọ́wajú sí ojúewé yìí àti ojúewé ọ̀rọ̀ rẹ̀ sí bẹ̀. Bákanáà ojúewé náà yíò hàn '''kedere''' nìnú [[Special:RecentChanges|àkójọ àwọn àtúnṣe tuntun]] kó le ba à rọrùn láti rí.",
+'addedwatchtext' => 'A ti ṣ\'àfikún "[[:$1]]" sí [[Special:Watchlist|ìmójútó]] yín.
+A óò ṣ\'àkójọ àwọn àtúnṣe ọjọ́wajú sí ojúewé yìí àti ojúewé ọ̀rọ̀ rẹ̀ sí bẹ̀.',
 'removewatch' => 'Ìyọkúrò nínú ìmójútó',
 'removedwatchtext' => 'A ti yọ ojúewé "[[:$1]]" kúrò nínú [[Special:Watchlist|ìmójútó yín]].',
 'watch' => 'Ìmójútó',
@@ -2021,15 +2120,22 @@ A óò ṣ'àkójọ àwọn àtúnṣe ọjọ́wajú sí ojúewé yìí àti o
 'enotif_mailer' => 'Olùránṣẹ́ ìfitọ́nilétí {{SITENAME}}',
 'enotif_reset' => 'Fàlà sí gbogbo àwọn ojúewé bíi bíbẹ̀wò',
 'enotif_impersonal_salutation' => 'Oníṣe {{SITENAME}}',
+'enotif_subject_deleted' => 'Ojúewé {{SITENAME}} tó únjẹ́ $1 ti jẹ́ píparẹ́ látọwọ́ {{gender:$2|$2}}',
+'enotif_subject_created' => 'Ojúewé {{SITENAME}} tó únjẹ́ $1 ti jẹ́ dídá látọwọ́ {{gender:$2|$2}}',
+'enotif_subject_moved' => 'Ojúewé {{SITENAME}} tó únjẹ́ $1 ti jẹ́ kíkólọ látọwọ́ {{gender:$2|$2}}',
+'enotif_subject_restored' => 'Ojúewé {{SITENAME}} tó únjẹ́ $1 ti jẹ́ dídápadà látọwọ́ {{gender:$2|$2}}',
+'enotif_subject_changed' => 'Ojúewé {{SITENAME}} tó únjẹ́ $1 ti jẹ́ yíyípadà látọwọ́ {{gender:$2|$2}}',
+'enotif_body_intro_deleted' => 'Ojúewé {{SITENAME}} tó únjẹ́ $1 ti jẹ́ píparẹ́ ní $PAGEEDITDATE látọwọ́ {{gender:$2|$2}}, ẹ wo $3.',
+'enotif_body_intro_created' => 'Ojúewé {{SITENAME}} tó únjẹ́ $1 ti jẹ́ dídá ní $PAGEEDITDATE látọwọ́ {{gender:$2|$2}}, ẹ wo $3 fún àtúnyẹ̀wò ìgbàyí.',
+'enotif_body_intro_moved' => 'Ojúewé {{SITENAME}} tó únjẹ́ $1 ti jẹ́ kíkólọ ní $PAGEEDITDATE látọwọ́ {{gender:$2|$2}}, ẹ wo $3 fún àtúnyẹ̀wò ìgbàyí.',
+'enotif_body_intro_restored' => 'Ojúewé {{SITENAME}} tó únjẹ́ $1 ti jẹ́ dídápadà ní $PAGEEDITDATE látọwọ́ {{gender:$2|$2}}, ẹ wo $3 fún àtúnyẹ̀wò ìgbàyí.',
+'enotif_body_intro_changed' => 'Ojúewé {{SITENAME}} tó únjẹ́ $1 ti jẹ́ yíyípadà ní $PAGEEDITDATE látọwọ́ {{gender:$2|$2}}, ẹ wo $3 fún àtúnyẹ̀wò ìgbàyí.',
 'enotif_lastvisited' => 'Ẹ wo $1 fún gbogbo àwọn àtúnṣe látìgbà ìbẹ̀wò yín gbẹ̀yìn.',
 'enotif_lastdiff' => 'Ẹ wo $1 láti wo àtúnṣe yìí.',
 'enotif_anon_editor' => 'oníṣe aláìlórúkọ $1',
 'enotif_body' => '$WATCHINGUSERNAME ọ̀wọ́n,
 
-
-Ojúewé {{SITENAME}} $PAGETITLE ti jẹ́ $CHANGEDORCREATED lọ́jọ́ $PAGEEDITDATE látọwọ́ $PAGEEDITOR, ẹ wo $PAGETITLE_URL fún àtúnyẹ̀wò rẹ̀ báyìí.
-
-$NEWPAGE
+$PAGEINTRO $NEWPAGE
 
 Àkótán olùtúnṣe: $PAGESUMMARY $PAGEMINOREDIT
 
@@ -2043,7 +2149,6 @@ Kò ní sí ìfitọ́nilétí míràn mọ́ fún àyípadà ọjọ́ọwájú
 Sístẹ́mù ìfitọ́nilétí {{SITENAME}} yín 
 
 ---
-
 Láti ṣàyípadà ìtò ìṣeàkíyèsí e-mail yín, ẹ lọ sí
 {{canonicalurl:{{#special:Preferences}}}}
 
@@ -2055,6 +2160,8 @@ $UNWATCHURL
 
 Fún ìrànwọ́ àti ìbérè:
 {{canonicalurl:{{MediaWiki:Helppage}}}}',
+'created' => 'dídá',
+'changed' => 'títúnṣẹ',
 
 # Delete
 'deletepage' => 'Ìparẹ́ ojúewé',
@@ -2094,6 +2201,8 @@ Fún ìrànwọ́ àti ìbérè:
 'rollback' => 'Yí àwọn àtúnṣe sẹ́yìn',
 'rollback_short' => 'Yísẹ́yìn',
 'rollbacklink' => 'yísẹ́yìn',
+'rollbacklinkcount' => 'ìyíṣẹ́yìn {{PLURAL:$1|àtúnṣe|àtúnṣe}} $1',
+'rollbacklinkcount-morethan' => 'ìyíṣẹ́yìn {{PLURAL:$1|àtúnṣe|àtúnṣe}} tó ju $1 lọ',
 'rollbackfailed' => 'Ìyípadà kùnà',
 'cantrollback' => 'Kò le dá àtúnṣe padà;
 oníṣe tógbẹ̀yìn nìkan ni olùdá ojúewé yìí.',
@@ -2108,6 +2217,9 @@ jẹ́ yíyípadà sí àtúnyẹ̀wò tógbẹ̀yìn látọwọ́ $2.',
 
 # Edit tokens
 'sessionfailure-title' => 'Ìkùnà ètò iṣẹ́',
+'sessionfailure' => 'Ó dà wípé ìsòro wà pẹ̀lú ìwọlé yín;
+a ti fagilé gbogbo ohun tí ẹ ti ṣe nísìnsinyì kí ẹlòmíràn ó mọ́ baà ji mú.
+Ẹ padà sí ojúewé tó kọjá, ẹ tún ojúewé náà gbéjáde, kí ẹ tó tún tó dán wó.',
 
 # Protect
 'protectlogpage' => 'Àkọsílẹ̀ àbò',
@@ -2149,6 +2261,7 @@ Bí a ṣe to ojúewé '''$1''' nì yí:",
 'protect-cantedit' => "Ẹ kò le è ṣe àyípadà ibi àbò ojúewé yìí, nítorípé a kò yọ̀nda yín láti ṣ'àtúnṣe rẹ̀.",
 'protect-othertime' => 'Àkókò míràn:',
 'protect-othertime-op' => 'àkókò míràn',
+'protect-existing-expiry' => 'Àsìkò ìparí tó wà: $3, $2',
 'protect-otherreason' => 'Ìdí míràn/àfikún:',
 'protect-otherreason-op' => 'Ìdí míràn',
 'protect-dropdown' => '*Àwọn ìdí àbò awọ́pọ̀
@@ -2182,11 +2295,19 @@ Bí a ṣe to ojúewé '''$1''' nì yí:",
 'viewdeletedpage' => 'Wíwò àwọn ojúewé tí a ti parẹ́',
 'undeletepagetext' => '{{PLURAL:$1|Ojúewé yìí ti jẹ́ píparẹ́ ṣùgbọ́n ó sì wà nínú àpòìkópamọ́. Ó sì ṣe é mú padà.|Àwọn ojúewé $1 wọ̀nyí ti jẹ́ píparẹ́ ṣùgbọ́n wọn sì wà nínú àpòìkópamọ́. Wọn sì ṣe é mú padà.}} Àpòìkópamọ́ náà ṣe é fọ̀nù nígbàkúgbà.',
 'undelete-fieldset-title' => 'Ìdápadà àwọn àtúnyẹ̀wò',
+'undeleteextrahelp' => "Láti ṣe ìdápadà gbogbo ìtàn ojúewé, ẹ fi gbogbo ihò-àpótí sílẹ̀ láì fi àmì sí, kí ẹ sì tẹ klíkì sórí '''''{{int:undeletebtn}}'''''.
+Láti ṣe ìdápadà àwọn àtúnyẹ̀wò pàtó, ẹ ṣàmì àwọn ihò-àpótí tó bá àwọn àtúnyẹ̀wò náà mu, kí ẹ sì tẹ klíkì sórí '''''{{int:undeletebtn}}'''''.",
 'undeleterevisions' => '{{PLURAL:$1|Àtúnyẹ̀wò|Àwọn àtúnyẹ̀wò}} $1 ti jẹ́ kíkó sínú àpòìkópamọ́',
+'undeletehistory' => 'Tí ẹ bá dá ojúewé náà padà, gbogbo àwọn àtúnyẹ̀wò yíò jẹ́ títún dápadà sí ibi ìtàn.
+Tó bá jẹ́ pé ojúewé tuntun pẹ̀lú orúkọ kannáà jẹ́ dídá látìgbà ìparẹ́, àwọn àtúnyẹ̀wò tí wọn yíó jẹ́ dídápadà yíó hàn ní inú ìtàn bó ṣe wà tẹ́lẹ̀.',
+'undeleterevdel' => 'Ìdápadà ìparẹ́ kò ní ṣe é ṣe tí yíò bá fa kí ojúewé òkè tàbí àtúnyẹ̀wò fáìlì ó jẹ́ píparẹ́ díẹ̀.
+Tó bá jẹ́ báyìí, ẹ gbọ́dọ̀ yọ àmì ihò-àpótí tàbí kí ẹ ṣe àfíhàn àtúnyẹ̀wò tó tuntun julọ tó ti jẹ́ píparẹ́.',
 'undeletehistorynoadmin' => 'Ojúewé yìí ti jẹ́ píparẹ́.
 Ìdíẹ̀ fún ìparẹ́ hàn nínú àkòtán ìsàlẹ̀, lápapọ̀ mọ́ ẹ̀kúnrẹ́rẹ́ àwọn oníṣe tí wọ́n ti ṣàtúnṣe ojúewé yìí kí ó tó jẹ́ píparẹ́.
 Ìkọ gangan àwọn àtúnyẹ̀wò onípíparẹ́ wọ̀nyí wà fún àwọn olùmójútó nìkan.',
 'undelete-revision' => 'Àtúnyẹ̀wò píparẹ́ ti $1 (ní ọjọ́ $4, ní ago $5) látọwọ́ $3:',
+'undeleterevision-missing' => 'Àtúnyẹ̀wò tí kò yẹ tàbí tí kò sí.
+Ẹ le ní àjápọ̀ búburú, tàbí kó jẹ́ pé àtúnyẹ̀wò ti jẹ́ dídápadà tàbí yíyọkúrò kúrò ní ìpamọ́.',
 'undelete-nodiff' => 'Kò rí àtúnyẹ̀wò tẹ́lẹ̀ kankan.',
 'undeletebtn' => 'Dápadà',
 'undeletelink' => 'wò/dápadà',
@@ -2197,8 +2318,8 @@ Bí a ṣe to ojúewé '''$1''' nì yí:",
 'undeletedrevisions' => '{{PLURAL:$1|Àtúnyẹ̀wò 1|Àwọn àtúnyẹ̀wò $1}} ti jẹ́ dídápadà',
 'undeletedrevisions-files' => '{{PLURAL:$1|Àtúnyẹ̀wò 1|Àwọn àtúnyẹ̀wò $1}} àti {{PLURAL:$2|fáìlì 1|àwọn fáìlì $2}} ti jẹ́ dídápadà',
 'undeletedfiles' => '{{PLURAL:$1|Fáílì 1|Àwọn fáìlì $1}} ti jẹ́ dídápadà',
-'cannotundelete' => 'Ìdápadà ìparẹ́ kùnà;
-ẹlòmíràn le ti dá ìparẹ́ ojúewé náà padà.',
+'cannotundelete' => 'Ìdápadà ìparẹ́ kùnà:
+$1',
 'undeletedpage' => "'''$1 ti jẹ́ dídápadà'''
 
 Ẹ wo [[Special:Log/delete|àkọọ́lẹ̀ ìparẹ́]] fún àkọpamọ́ àwọn ìparẹ́ àti ìdápadà àìpẹ́.",
@@ -2207,6 +2328,12 @@ Bí a ṣe to ojúewé '''$1''' nì yí:",
 'undelete-search-box' => 'Wá àwọn ojúewé onípíparẹ́',
 'undelete-search-prefix' => 'Ìfihàn ojúewé tó bẹ̀rẹ̀ pẹ̀lú:',
 'undelete-search-submit' => 'Ṣàwárí',
+'undelete-no-results' => 'Kò sí ojúewé kankan tó jọọ́ nínú ìpamọ́ ìparẹ́.',
+'undelete-filename-mismatch' => 'Kò le ṣe àìjẹ́píparẹ́ àtúnyẹ̀wò fáìlì pẹ̀lú àmìàsìkò $1: Àìjọra orúkọ fáìlì.',
+'undelete-bad-store-key' => 'Kò le ṣe àìjẹ́píparẹ́ àtúnyẹ̀wò fáìlì pẹ̀lú àmìàsìkò $1: Fáìlì kò sí kí ìparẹ́ ó tó ṣẹlẹ̀.',
+'undelete-cleanup-error' => 'Àsìṣe láti pa fáìlì ìpamọ́ àìlòmọ́ "$1" rẹ́.',
+'undelete-missing-filearchive' => 'Kò le dá fáìlì ìpamọ́ nọ́mbà ìdámọ̀ $1 padà nítorí pé kò sí nínú ibùdó dátà.
+Ó le ti jẹ́ àìjẹ́píparẹ́.',
 'undelete-error' => 'Àsìṣe ìdápadà ìparẹ́ ojúewé',
 'undelete-error-short' => 'Àsìṣe láti ìmúkúrò ìparẹ́ fáílì: $1',
 'undelete-error-long' => 'Àwọn àsìṣe ṣẹlẹ̀ nígbà ìdápadà fáìlì náà:
@@ -2218,6 +2345,9 @@ $1',
 # Namespace form on various pages
 'namespace' => 'Orúkọàyè:',
 'invert' => 'Pàṣípààrọ̀ àsàyàn',
+'tooltip-invert' => 'Ẹ dínú àpótí yìí láti ṣe ìbòmọ́lẹ̀ àwọn àtúnṣe sí ojúewé nínú orúkọàyè tí ẹ yàn (àti nínú orúkọàyè àjọṣe tí ẹ bá mú òhun náà)',
+'namespace_association' => 'Orúkọàyè àjọṣe',
+'tooltip-namespace_association' => 'Ẹ tẹ ihò-àpótí yìí láti ṣàkómọ́ orúkọàyè ọ̀rọ̀ tàbí olúdálélórí tó ní ìbáṣe mọ́ orúkọàyè sísàyàn.',
 'blanknamespace' => '(Gbangba)',
 
 # Contributions
@@ -2225,6 +2355,7 @@ $1',
 'contributions-title' => 'Àwọn àfikún oníṣe fún $1',
 'mycontris' => 'Àwọn àfikún',
 'contribsub2' => 'Fún $1 ($2)',
+'nocontribs' => 'Kò sí àtúnṣe tuntun tó bá àwárí mu.',
 'uctop' => '(lókè)',
 'month' => 'Láti osù (àti sẹ́yìn):',
 'year' => 'Láti ọdún (àti sẹ́yìn):',
@@ -2307,6 +2438,7 @@ $1',
 'blockipsuccesstext' => '[[Special:Contributions/$1|$1]] ti jẹ́ dídílọ́nà.<br />
 Ẹ wo [[Special:BlockList|àtòjọ ìdínà]] láti ṣàtúnyẹ̀wò àwọn ìdínà.',
 'ipb-blockingself' => 'Ẹ ti fẹ́ dínà ara yín! Ṣé èyí dáa yín lójú?',
+'ipb-confirmhideuser' => 'Ẹ ti fẹ́ dínà oníṣe pẹ̀lú "ìbómọ́lẹ̀ oníṣe" ní ṣíṣí. Èyí yíò ṣe ìrẹ̀mọ́lẹ̀ orúkọ oníṣe nínú gbogbo àtòjọ àtí àkọọ́lẹ̀. Ṣé ó dá yín lójú pé èyí ní ẹ fẹ́ ṣe?',
 'ipb-edit-dropdown' => 'Àtúnṣe àwọn ìdí ìdínà',
 'ipb-unblock-addr' => 'Ìmúkúrò ìdínà $1',
 'ipb-unblock' => 'Ìmúkúrò ìdínà orúkọ oníṣe kan tàbí àdírẹ́sì IP',
@@ -2329,6 +2461,7 @@ $1',
 'blocklist-target' => 'Afojúsùn',
 'blocklist-expiry' => 'Ìparí',
 'blocklist-by' => 'Olùmójútó tó ṣe ìdínà',
+'blocklist-params' => 'Àwọn pàrámítà ìdínà',
 'blocklist-reason' => 'Ìdíẹ̀',
 'ipblocklist-submit' => 'Ṣàwárí',
 'ipblocklist-localblock' => 'Ìdínà abẹ́lé',
@@ -2356,40 +2489,63 @@ $1',
 Àkọọ́lẹ̀ ìfisílẹ̀ nìyí nísàlẹ̀ fún ìtọ́kasí:',
 'blocklogentry' => 'ìdínà [[$1]] yíò parí ní $2 $3',
 'reblock-logentry' => 'ti yí ìtòólẹ̀ ìdínà padà fún [[$1]] pẹ̀lú àsìkò ìparí $2 $3',
+'blocklogtext' => 'Àkọọ́lẹ̀ ìṣe ìdínà àti ìgbéìdínàkúrò nìyí.
+Àwọn àdìrẹ́ẹ̀sì IP tí wọn jẹ́ dídílọ́nà nífúnra wọn kò sí nínú àtòjọ yìí.
+Ẹ wo [[Special:BlockList|àtòjọ ìdínà]] fún àtòjọ àwọn gbogbo ohun tí a dílọ́nà báyìí.',
 'unblocklogentry' => 'mú ìdínà kúrò fùn $1',
 'block-log-flags-anononly' => 'àwọn oníṣe aláìlórúkọ nìkan',
 'block-log-flags-nocreate' => 'ìdálẹ́kun ṣíṣèdá àkópamọ́',
 'block-log-flags-noautoblock' => 'dídálẹ́kun ìdínà fúnrararẹ̀',
 'block-log-flags-noemail' => 'e-mail jẹ́ dídílọ́nà',
 'block-log-flags-nousertalk' => 'kò le ṣàtúnṣe ojúewé ọ̀rọ̀ taraẹni',
+'block-log-flags-angry-autoblock' => 'ìgbàyè ìdínà ìfúnraẹni oníkíkan',
 'block-log-flags-hiddenname' => 'orúkọ oníṣe jẹ́ bíbòmọ́lẹ̀',
 'range_block_disabled' => 'Agbára olùmójútó láti dá ìdínà àdìmọ́ jẹ́ dídálẹ́kun.',
+'ipb_expiry_invalid' => 'Àkókò ìparí kò ní ìbámu.',
 'ipb_expiry_temp' => 'Àwọn ìdínà orúkọ oníṣe bíbòmọ́lẹ̀ gbọ́dọ̀ jẹ́ aláìyẹ̀.',
+'ipb_hide_invalid' => 'Ìrẹ̀mọ́lẹ̀ àpamọ́ yìí kò ṣe é ṣe; ó le jẹ́ pé ó ní àtúnṣe púpọ̀.',
 'ipb_already_blocked' => '"$1" jẹ́ dídèlọ́nà tẹ́lẹ̀',
 'ipb-needreblock' => '"$1" jẹ́ dídèlọ́nà tẹ́lẹ̀. Ṣé ẹ fẹ́ yí àwọn ìtòólẹ̀ yí padà?',
 'ipb-otherblocks-header' => '{{PLURAL:$1|Ìdínà|Àwọn ìdínà}} mìíràn',
+'unblock-hideuser' => 'Ẹ kò le gbé ìdínà oníṣe yìí kúrò, orúkọ rẹ̀ ti jẹ́ bíbòmọ́lẹ̀.',
 'ipb_cant_unblock' => 'Àsìṣe: Ìdínà ID $1 kò sí. Ó le ti jẹ́ aláìjẹ́ dídílọ́nà tẹ́lẹ̀.',
+'ipb_blocked_as_range' => 'Àsìṣe: Àdírẹ́ẹ̀sì IP $1 kò jẹ́ dídílọ́nà tààrà, bí bẹ́ẹ̀ kò ṣe é mọ́ dí lọ́nà.
+Sùgbọ́n ó jẹ́ dídílọ́nà gẹ́gẹ́bí ìkan nínú ìgbàjá $2, èyí sì ṣe é mọ́ dí lọ́nà mọ́.',
 'ip_range_invalid' => 'Àdìmọ́ IP aláìníìbámu.',
+'ip_range_toolarge' => 'Ìgbàjá ìdínà tó tóbi ju /$1 kò jẹ́ gbígbà ní àyè.',
 'blockme' => 'Dínà mi',
 'proxyblocker' => 'Olùdínà ẹ̀rọ-ìwọ̀fà ẹlòmíràn',
 'proxyblocker-disabled' => 'Ìmúṣe yìí jẹ́ dídálẹ́kun.',
+'proxyblockreason' => 'Àdírẹ́ẹ̀sì IP yín ti jẹ́ dídílọ́nà nítorípé ó jẹ́ ẹ̀rọ alàìlórúkọ ẹlòmíràn ìgboro. Ẹ sọ ìsòro yìí fún olùpèsè ìwọ̀fà Internet yín tàbí aṣeàtìlẹyìn ẹ̀rọ-ìpèsè ibiiṣẹ́ yín.',
 'proxyblocksuccess' => 'Ṣetán',
 'sorbsreason' => 'Àdírẹ́ẹ̀sì IP yín jẹ́ títòjọ bíi ẹ̀rọ-ìwọ̀fà ẹlòmíràn àsíílẹ̀ nínú DNSBL tí {{SITENAME}} lò.',
 'sorbs_create_account_reason' => 'Àdírẹ́ẹ̀sì IP yín jẹ́ títòjọ bíi ẹ̀rọ-ìwọ̀fà ẹlòmíràn àsíílẹ̀ nínú DNSBL tí {{SITENAME}} lò.
 Ẹ kò le dá àpamọ́.',
 'cant-block-while-blocked' => 'Ẹ kò le dínà àwọn oníṣe míràn lásìkò kannáà tí ẹ jẹ́ dídílọ́nà.',
+'cant-see-hidden-user' => 'Oníṣe tí ẹ fẹ́ dínà tilẹ̀ ti jẹ́ dídílọ́nà, ó sì jẹ́ bíbòmọ́lẹ̀.
+Nítorípé ẹ kò ní ẹ̀tọ́ ìbòmọ́lẹ̀ oníṣe, ẹ kò le rí tàbí ṣàtúnṣe ìdínà oníṣe náà.',
+'ipbblocked' => 'Ẹ kò le dínà tàbí ṣe àìdínà àwọn oníṣe míràn nítorípé ẹ̀yin gangan jẹ́ dídínà.',
 'ipbnounblockself' => 'Ẹ kò le yí ìdínà ara yín padà',
 
 # Developer tools
 'lockdb' => 'De ìbùdó dátà',
 'unlockdb' => 'Ṣí ibùdó dátà sílẹ̀',
+'lockdbtext' => 'Ìdè ibùdó dátà yíò jáwọ́ agbára gbogbo àwọn oníṣe láti ṣàtúnṣe sí ojúewé, sí ìfẹ́ràn wọn, sí ìmójútó wọn, àti gbogbo ohun míràn to bá únfẹ́ àtúnṣe nínú ibúdó dátà.
+Ẹ jọ̀wọ́ ẹ fidájú pé èyí ní ẹ fẹ́ ṣe, àti pé ẹ ó ṣí ibùdọ́ dátà nígbàtí ìṣètọ́jú bá ṣe tán.',
+'unlockdbtext' => 'Ìsísílẹ̀ ibùdó dátà yíò dá agbára gbogbo àwọn oníṣe láti ṣàtúnṣe sí ojúewé, sí ìfẹ́ràn wọn, sí ìmójútó wọn, àti gbogbo ohun míràn to bá únfẹ́ àtúnṣe nínú ibúdó dátà padà.
+Ẹ jọ̀wọ́ ẹ fidájú pé èyí ní ẹ fẹ́ ṣe.',
 'lockconfirm' => 'Bẹ́ẹ̀ni, mo fẹ́ ẹ́ de ibùdó dátà pa.',
 'unlockconfirm' => 'Bẹ́ẹ̀ni, mo fẹ́ ẹ́ sí ibùdó dátà sílẹ̀.',
 'lockbtn' => 'De ibùbó dátà',
 'unlockbtn' => 'Ṣí ibùdó dátà sílẹ̀',
+'locknoconfirm' => 'Ẹ kò ṣe àmì àpótí ìmúdájú.',
 'lockdbsuccesssub' => 'Ìdèpa ibùdó dátà yọrísírere',
 'unlockdbsuccesssub' => 'Ìyọkúrò àgádágodo ibùdọ́ dátà',
+'lockdbsuccesstext' => 'Ìbùdó dátà ti jẹ́ dídèpa.<br />
+Ẹ rántí láti [[Special:UnlockDB|yọ ìdè kúrò]] lẹ́yìn tí ẹ bá parí ìtọ́jú.',
 'unlockdbsuccesstext' => 'Ìbùdó dátà ti jẹ́ sísí sílẹ̀.',
+'lockfilenotwritable' => 'Fáìlì àgádágodo ibùdó dátà kò ṣe é kọ ùnkan sí.
+Láti sí tàbí de ibúdó dátà, èyí pọndandan kó ṣe é kọ ùnkan sí látọwọ́ ẹ̀rọ-ìpèsè ibiìtakùn.',
 'databasenotlocked' => 'Ibùdó dátà kò jẹ́ dídèpa,',
 'lockedbyandtime' => '(látọwọ́ {{GENDER:$1|$1}} ní ọjọ́ $2 ago $3)',
 
@@ -2408,6 +2564,16 @@ Ojúṣe yín ni pé àwọn ìjápọ̀ ún tọ́kasí ibi tó yẹ kí wọn
 '''Ìkìlọ̀!'''
 Èyí le fa ìdàrú sí ojúewé tó gbajúmọ́;
 ẹ ríi wípé ohun tí yíò ṣẹlẹ̀ ye yín kí ẹ tó tẹ̀síwájú.",
+'movepagetext-noredirectfixer' => "Lílo fọ́ọ̀mù ìsàlẹ̀ yìí yíò ṣe àtúnsọlórúkọ ojúewé, yíò sì kó gbogbo ìtàn rẹ̀ lọ sí orí orúkọ tuntun.
+Àkọlé tó ní tẹ́lẹ̀ yíò di ojúewé àtúnjúwe sí àkọlé tuntun.
+Ẹ kí yèsi pé kò sí [[Special:DoubleRedirects|àtúnjúwe ẹ̀mejì]] tàbí [[Special:BrokenRedirects|jíjá]].
+Ojúṣe yín ni láti rí pé àwọn àjápọ̀ únnawọ́ sí ibi tó yẹ kí wọn ó lọ.
+
+Àkíyèsí pé ojúewé náà '''kò''' ní jẹ́ yíyínípòpadà tí ojúewé míràn bá ti wà ní ibi àkọlé tuntun náà, àyàfi tó bá jẹ́ òfo tàbí àtúnjúwe, tí kò sì ní ìtàn àtúnṣe tẹ́lẹ̀.
+Èyí túmọ̀sí pé ẹ le dá orúkọ ojúewé padà sí orúkọ rẹ̀ tẹ́lẹ̀ tí ẹ bá ṣe àsìṣe, tí ẹ kò sì le ṣàkọlélórí ojúewé tí únbẹ.
+
+'''Ìkìlọ̀!'''
+Èyí le jẹ́ àtúnṣe òjijì fún ojúewé tó gbajúmọ̀; Ẹ ri dájú pé ohun tí yíò ṣẹlẹ̀ yé yín kí ẹ tó tẹ̀ síwájú.",
 'movepagetalktext' => "Ojúewé ọ̀rọ̀ tó sopọ̀ mọ náà yíó yípò pọ̀ mọ fún ra rẹ̀ '''àfibí:'''
 *Tí ọ̀rọ̀ ojúewé tí kò jẹ́ òfo wà pẹ̀lú orúkọ tuntun náà, tàbí
 *Ẹ mú àmí kúrò nínú àpótí ìṣàlẹ̀ yìí.
@@ -2437,8 +2603,10 @@ Tí ó bá jẹ́ báhun, ẹ gbúdọ̀ ṣe ìyípò rẹ̀ fúnra yín.",
 'movetalk' => 'Yípò ojúewé ọ̀rọ̀ rẹ̀',
 'move-subpages' => 'Yípò àwọn ọmọ ojúewé (títí dé $1)',
 'move-talk-subpages' => 'Ìyípòdà àwọn ojúewé abẹ́ ojúewé ọ̀rọ̀ (títí dé $1)',
+'movepage-page-exists' => 'Ojúewé $1 pilẹ̀ ti wà, kò ṣe é kọlélórí nífúnra rẹ̀.',
 'movepage-page-moved' => 'Ojúewé $1 ti jẹ́ yíyípò sí $2.',
 'movepage-page-unmoved' => 'Ojúewé $1 kò ṣe é yípò sí $2.',
+'movepage-max-pages' => '{{PLURAL:$1|Ojúewé|Àwọn ojúewé}} $1 ti jẹ́ yíyínípòpadà, ìyókù kò ní yí nípò fún ra ra rẹ̀.',
 'movelogpage' => 'Àkọsílẹ́ ìyípò',
 'movelogpagetext' => 'Nísàlẹ̀ ni àtòjọ gbogbo àwọn ìyípòdà ojúewé.',
 'movesubpage' => '{{PLURAL:$1|Ojúewé abẹ́|Àwọn ojúewé abẹ́}}',
@@ -2459,11 +2627,17 @@ kò le yípò ojúewé padà sí ara rẹ̀.',
 'immobile-target-namespace-iw' => 'Àjápọ̀ aláàrinwiki kò jẹ́ àfojúsùn oníìbámu fún ìyípòdà ojúewé yìí.',
 'immobile-source-page' => 'Ojúewé yìí kòṣe é yínípò',
 'immobile-target-page' => 'Kò le yípòpadà sí ibiàyè àkọlé hun.',
+'bad-target-model' => 'Ibi tí ẹ fẹ́ kó lọ únlo àfijúwe àkóónú tó yàtọ̀. Kò le yí $1 sí $2.',
 'imagenocrossnamespace' => 'Kò le ṣe ìyípòdà fáìlì sí orúkọàyè tí kìí ṣe ti fáìlì',
 'nonfile-cannot-move-to-file' => 'Kò le yípòpadà aláìjẹ́ fáìlì sí orúkọàyè fáìlì',
 'imagetypemismatch' => 'Ìfàgùn fáìlì tuntun kó ní ìbámu mọ́ irú rẹ̀',
 'imageinvalidfilename' => 'Orúkọ fáìlì àfojúsùn kò tọ́',
+'fix-double-redirects' => 'Ìsọdọ̀tun àtúnjúwe yìówù tó bá nawọ́ sí àkọlé tàkọ́kọ́',
 'move-leave-redirect' => 'Ẹ fún ní àtúnjúwe',
+'protectedpagemovewarning' => "'''Àkíyèsí:''' Ojúewé yìí ti jẹ́ dídáàbòbò nítoríẹ̀ àwọn olùmójútó tí wọ́n ní ẹ̀tọ́ nìkan ni wọ́n le yínípòpadà.
+Àkọọ́lẹ̀ àìpẹ́ nìyí nísàlẹ̀ fún ìtọ́kasí:",
+'semiprotectedpagemovewarning' => "'''Àkíyèsí:''' Ojúewé yìí ti jẹ́ dídáàbòbò nítoríẹ̀ àwọn oníṣe tí wọ́n ti forúkọsílẹ̀ nìkan ni wọ́n le yínípòpadà.
+Àkọọ́lẹ̀ àìpẹ́ nìyí nísàlẹ̀ fún ìtọ́kasí:",
 'move-over-sharedrepo' => '==Fáìlì wà ==
 [[:$1]] wà lórí ibi-àkójọ àjọpín kan. Ìyípò fáìlì kan padà sí àkọlé yìí yíò gun fáìlì àjọpin náà lórí.',
 'file-exists-sharedrepo' => 'Orúkọ fáìlì tí ẹ yàn pilẹ̀ tí únjẹ́ lílò lórí ibi-àkójọ àjọpín kan.
@@ -2471,7 +2645,17 @@ kò le yípò ojúewé padà sí ara rẹ̀.',
 
 # Export
 'export' => 'Ìkójáde àwọn ojúewé',
+'exporttext' => 'Ẹ le ṣàkójáde ìkọ̀rọ̀ àti ìtàn àtúnṣe ojúewé pàtó kan tàbí àpapọ̀ àwọn ojúewé tí a fi XML yí.
+Èyí ṣe é kówọlé sínú wiki míràn pẹ̀lú MediaWiki láti orí [[Special:Import|ìkówọlé ojúewé]].
+
+Láti ṣàkójáde àwọn ojúewé, ẹ tẹ àkọlé wọn sínú àpótí ọ̀rọ̀ ìsàlẹ̀, àkọlé kan lórí ìlà kan, kí ẹ sì sọ bóyá ẹ fẹ́ àtúnyẹ̀wò ìwòyí àti àwọn àtúnyẹ̀wò tó ti pẹ́, pẹ̀lú ìlà ìtàn ojúewé, tàbí àtúnyẹ̀wò ìwòyí pẹ̀lú ẹ̀kúnrẹ́rẹ́ ọ̀rọ̀ nípa àtúnṣe tó gbẹ̀yìn.
+
+Ẹ tún le lo àjápọ̀, fún àpẹrẹ  [[{{#Special:Export}}/{{MediaWiki:Mainpage}}]] fún ojúewé "[[{{MediaWiki:Mainpage}}]]".',
 'exportall' => 'Ìkójáde gbogbo àwọn ojúewé',
+'exportcuronly' => 'Ìmúpọ̀ àtúnyẹ̀wò ìwòyí nìkan, kí ṣe fún gbogbo ìtàn',
+'exportnohistory' => "----
+'''Àkíyèsí:''' Ìkówọlé gbogbo ìtàn àwọn ojúewé pẹ̀lú fọ́ọ̀mù yìí ti jẹ́ dídálẹ́kun nítorípé kò siṣẹ́ dáadáa.",
+'exportlistauthors' => 'Ìmúpọ̀ ẹ̀kúnrẹ́rẹ́ àtòjọ àwọn olùkópa fún ojúewé kọ̀ọ̀kan',
 'export-submit' => 'Kósíta',
 'export-addcattext' => 'Àfikún àwọn ojúewé láti inú ẹ̀ka:',
 'export-addcat' => 'Ìròpọ̀',
@@ -2479,14 +2663,21 @@ kò le yípò ojúewé padà sí ara rẹ̀.',
 'export-addns' => 'Ìròpọ̀',
 'export-download' => 'Ìmúpamọ́ gẹ́gẹ́ bi faili',
 'export-templates' => 'Ìmúpọ̀ àwọn àdàkọ',
+'export-pagelinks' => 'Ìmúpọ̀ àwọn ojúewé jíjápọ̀mọ́ dé ìwọnú:',
 
 # Namespace 8 related
 'allmessages' => 'Àwọn ìránṣẹ́ sistẹmu',
 'allmessagesname' => 'Orúkọ',
 '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.',
+'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:',
+'allmessages-filter-unmodified' => 'Àìtúnṣe',
 'allmessages-filter-all' => 'Gbogbo wọn',
+'allmessages-filter-modified' => 'Títúnṣe',
 'allmessages-prefix' => 'Ajọ̀ pẹ̀lú àlẹ̀mọ́wájú:',
 'allmessages-language' => 'Èdè:',
 'allmessages-filter-submit' => 'Lọ',
@@ -2499,49 +2690,85 @@ kò le yípò ojúewé padà sí ara rẹ̀.',
 'djvu_no_xml' => 'Kò le mú XML wá fún fáìlì DjVu',
 'thumbnail-temp-create' => 'Kò le dá fáìlì àwòrán kékeré ìgbàdíẹ̀',
 'thumbnail-dest-create' => 'Kò le mú àwòrán kékeré pamọ́ sí ibiàyè rẹ̀',
+'thumbnail_invalid_params' => 'Àwọn pàrámìtà àwòrán kékeré tí kò yẹ',
 'thumbnail_dest_directory' => 'Kò le dá àpò ibiàyè',
 'thumbnail_image-type' => 'Kò sí àtìlẹ́yìn fún irú àwòrán yìí',
+'thumbnail_gd-library' => 'Ìtò ibi GD kò ì parí: Kò sí ìmúṣe $1',
 'thumbnail_image-missing' => 'Fáìlì dà bíi pé kòsí: $1',
 
 # Special:Import
 'import' => 'Ìkówọlé àwọn ojúewé',
 'importinterwiki' => 'Ìkówọlé láàrin àwọn wiki',
+'import-interwiki-text' => 'Ẹ mú wiki àti àkọlé ojúewé tí ẹ fẹ́ kówọlé.
+Ọjọ́ àti orúkọ olùtúnṣe àtúnyẹ̀wò kò ní yàtọ̀.
+Gbogbo ìkówọlé láàrin wiki jẹ́ kíkọsílẹ̀ sí [[Special:Log/import|àkọọ́lẹ̀ ìkówọlé]].',
 'import-interwiki-source' => 'Orísún wiki/ojúewé:',
 'import-interwiki-history' => 'Ṣe àwòkọ gbogbo àwọn àtúnyẹ̀wò ìtàn fún ojúewé yìí',
 'import-interwiki-templates' => 'Ìmúpọ̀ gbogbo àwọn àdàkọ',
 'import-interwiki-submit' => 'Ìkówọlé',
 'import-interwiki-namespace' => 'Orúkọàyè ìdópin:',
+'import-interwiki-rootpage' => 'Ojúewé ìpasẹ̀ ìbọ́sí (àṣàyàn):',
 'import-upload-filename' => 'Orúkọ faili:',
 'import-comment' => 'Àríwí:',
+'importtext' => 'Ẹ jọ̀wọ́ ṣe ìkójáde fáìlì láti wiki orísun pẹ̀lú [[Special:Export|aṣe ìkójáde]].
+Ẹ fipamọ́ sínú kọ̀mpútà yín, kí ẹ sì ṣe ìrùsókè rẹ̀ síbí.',
 'importstart' => 'Óúnkó àwọn ojúewé wọlé...',
 'import-revision-count' => '{{PLURAL:$1|Àtúnyẹ̀wò|Àwọn àtúnyẹ̀wò}} $1',
 'importnopages' => 'Kò sí àwọn ojúewé kankan láti kówọlé.',
 'imported-log-entries' => '{{PLURAL:$1|Ìtìbọ̀ àkọọ́lẹ̀|Ìtìbọ̀ àwọn àkọọ́lẹ̀}} $1 jẹ́ kíkọ́wọlé.',
 'importfailed' => 'Ìkówọlé kùnà: <nowiki>$1</nowiki>',
+'importunknownsource' => 'Irú orísun ìkówọlé àìmọ̀',
 'importcantopen' => 'Kò le sí fáìlì ìkówọlé',
 'importbadinterwiki' => 'Ìjápọ̀ interwiki búburú',
 'importnotext' => 'Òfo tàbí kòsí ìkọ',
 'importsuccess' => 'Ìkówọlé ti parí!',
+'importhistoryconflict' => 'Àtúnyẹ̀wò ìtàn tó tako èyí únbẹ (bóya ẹ ti ṣe ìkọ́wọlé ojúewé yìí tẹ́lẹ̀)',
+'importnosources' => 'Kò ì tí sí orísun ìkòwọlẹ́ láàrin wiki, bẹ́ẹ̀sìni ìrùsókè ìtàn tààrà jẹ́ dídálẹ́kun.',
+'importnofile' => 'Fáìlì àkówọlé kankan kò jẹ́ rírùsókè.',
+'importuploaderrorsize' => 'Ìrùsókè fáìlì àkówọlé kùnà.
+Fáìlì náà tóbi ju bó ṣe yẹ lọ.',
+'importuploaderrorpartial' => 'Ìrùsókè fáìlì àkówọlé kùnà.
+Fáìlì náà jẹ́ rírùsóké ní àbọ̀.',
+'importuploaderrortemp' => 'Ìrùsókè fáìlì àkówọlé kùnà.
+Àpò ìgbàdíẹ̀ fun kò sí.',
 'import-parse-failure' => 'Ìkùnà ìtúwò ìkówọlé XML',
 'import-noarticle' => 'Kò sí ojúewé kankan láti kówọlé!',
+'import-nonewrevisions' => 'Gbogbo àtúnyẹ̀wò ti jẹ́ kíkówọlé tẹ́lẹ̀.',
 'xml-error-string' => '$1 lórí ìlà $2, orí ìnàró $3 (byte $4): $5',
 'import-upload' => 'Ìrùsókè àwọn dátà XML',
+'import-token-mismatch' => 'Ìkùnà àwọn dátà ìgbàyí. 
+Ẹ jọ̀wọ́ ẹ gbìdánwò lẹ́ẹ̀kansíi.',
 'import-invalid-interwiki' => 'Kò le ṣe ìkówọlé látọ̀dọ̀ wiki tí ẹ tọ́kasí.',
 'import-error-edit' => 'Ojúewé "$1" kò jẹ́ kíkówọlé nítorípé ẹ kò jẹ́ gbígbà láyè láti ṣàtúnṣe rẹ̀.',
 'import-error-create' => 'Ojúewé "$1" kò jẹ́ kíkówọlé nítorípé ẹ kò jẹ́ gbígbà láyè láti ṣèdá rẹ̀.',
+'import-error-interwiki' => 'Ojúewé "$1" kò jẹ́ kíkówọlé nítorípé orúkọ rẹ̀ wà fún ìṣàjápọ̀ òde (láàrin wiki).',
+'import-error-special' => 'Ojúewé "$1" kò jẹ́ kíkówọlé nítorípé ó wà fún orúkọàyè pàtàkì tí kò gba ojúewé ní àyè.',
+'import-error-invalid' => 'Ojúewé "$1" kò jẹ́ kíkówọlé nítorí orúkọ rẹ̀ tí kò yẹ.',
+'import-options-wrong' => '{{PLURAL:$2|Ìṣsàyàn|Ìṣsàyàn}} tí kò dára: <nowiki>$1</nowiki>',
+'import-rootpage-invalid' => 'Ipasẹ̀ ojúewé tó jẹ́ títọ́kasí jẹ́ àkọlé àìyẹ.',
+'import-rootpage-nosubpage' => 'Orúkọàyè "$1" fún ipasẹ̀ ojúewé kò gba ojúewé abẹ́ ní àyè.',
 
 # Import log
 'importlogpage' => 'Ìgbéwọlé àkọọ́lẹ̀',
+'importlogpagetext' => 'Ìkówọlé olùmójútó àwọn ojúewé pẹ̀lú ìtàn àtúnṣe láti àwọn wiki míràn.',
+'import-logentry-upload' => 'ìkówọlé [[$1]] pẹ̀lú ìrùsókè fáìlì',
 'import-logentry-upload-detail' => '{{PLURAL:$1|Àtúnyẹ̀wò|Àwọn àtúnyẹ̀wò}} $1',
 'import-logentry-interwiki' => 'mú $1 wá láti inú wiki míràn',
 'import-logentry-interwiki-detail' => '{{PLURAL:$1|Àtúnyẹ̀wò|Àwọn àtúnyẹ̀wò}} $1 láti $2',
 
 # JavaScriptTest
 'javascripttest' => 'Ìdánwò JavaScript',
+'javascripttest-title' => 'Únṣe ìdánwò $1',
+'javascripttest-pagetext-noframework' => 'Ojúewé yìí jẹ́ dídásílẹ̀ fún ṣíṣe ìdánwò JavaScript.',
+'javascripttest-pagetext-skins' => 'Ẹ mú irú ojú ara tí ẹ fẹ́ lò láti ṣe àdánwò náà:',
+'javascripttest-qunit-intro' => 'Ẹ wo [$1 ìwé aṣàlàyé ìdánwò] ní mediawiki.org.',
+'javascripttest-qunit-heading' => 'Ibi ìdánwò QUnit JavaScript MediaWiki',
 
 # Tooltip help for the actions
 'tooltip-pt-userpage' => 'Ojúewé oníṣe yín',
+'tooltip-pt-anonuserpage' => 'Ojúewé oníṣe fún àdírẹ́ẹ̀sì IP tí ẹ únlò láti ṣàtúnṣe',
 'tooltip-pt-mytalk' => 'Ojúewé ọ̀rọ̀ yín',
+'tooltip-pt-anontalk' => 'Ọ̀rọ̀ nípa àtúnṣe láti àdírẹ́ẹ̀sì IP yìí',
 'tooltip-pt-preferences' => 'Àwọn ìfẹ́ràn mi',
 'tooltip-pt-watchlist' => 'Àkójọ àwọn ojúewé tí ẹ̀ ún mójútó bóyá wọ́nyí padà',
 'tooltip-pt-mycontris' => 'Àkójọ àwọn àfikún yín',
@@ -2558,6 +2785,7 @@ kò le yípò ojúewé padà sí ara rẹ̀.',
 'tooltip-ca-protect' => 'Dábòbò ojúewé yìí',
 'tooltip-ca-unprotect' => 'Ìyípadà àbò ojúewé yìí',
 'tooltip-ca-delete' => 'Ẹ pa ojúewé yìí rẹ́',
+'tooltip-ca-undelete' => 'Ìdápadà àwọn àtúnṣe sí ojúewé yìí kó tó di pé ó jẹ́ píparẹ́',
 'tooltip-ca-move' => 'Ìyípòdà ojúewé yìí',
 'tooltip-ca-watch' => 'Ṣe ìfikún ojúewé yìí mọ́ ìmójútó yín',
 'tooltip-ca-unwatch' => 'Ẹ yọ ojúewé yìí kúrò nínú ìmójútó yín',
@@ -2598,12 +2826,18 @@ kò le yípò ojúewé padà sí ara rẹ̀.',
 'tooltip-diff' => 'Ìfihàn àwọn àtúnṣe tí ẹ ṣe sí ìkọ yìí.',
 'tooltip-compareselectedversions' => 'Ẹ wo ìyàtò láàrin àwọn àtúnṣe tí a ṣàyàn fún ojúewé yìí.',
 'tooltip-watch' => "Ẹ ṣ'àfikún ojúewé yìí mọ́ ìmójútó yín",
+'tooltip-watchlistedit-normal-submit' => 'Ìyọkúrò àwọn àkọlé',
+'tooltip-watchlistedit-raw-submit' => 'Ìsọdọ̀tun ìmójútó',
+'tooltip-recreate' => 'Ìtúndá ojúewé náà bótilẹ̀jẹ́pé ó ti jẹ́ píparẹ́',
 'tooltip-upload' => 'Bẹ̀rẹ̀ ìrùsókè',
 'tooltip-rollback' => '"Ìyíṣẹ́yìn" ún ṣe ìdápadà àwọn àtúnṣe sí ojúewé yìí',
 'tooltip-undo' => '"Dápadà" ṣèyíṣẹ́yìn àtúnṣe yìí, yíò ṣí fọ́ọ̀mù àtúnṣe bíi àkọ́bojúwò. Ó gba ààyè láti sọ ìdí nínú àkótán.',
 'tooltip-preferences-save' => 'Ìmúpamọ́ àwọn ìfẹ́ràn',
 'tooltip-summary' => 'Ẹ kọ àkótán kúkúrú kan',
 
+# Metadata
+'notacceptable' => 'Ẹ̀rọ-ìpèsè wiki kò le pèsè dátà irú èyí tí ẹ̀rọ-ìbárà yín le kà.',
+
 # Attribution
 'anonymous' => '{{PLURAL:$1|Oníṣe|Àwọn oníṣe}} aláìlórúkọ ti {{SITENAME}}',
 'siteuser' => 'Oníṣe $1 lórí {{SITENAME}}',
@@ -2613,33 +2847,96 @@ kò le yípò ojúewé padà sí ara rẹ̀.',
 'others' => 'àwọn mìíràn',
 'siteusers' => '{{PLURAL:$2|Oníṣe|Àwọn oníṣe}} $1  {{SITENAME}}',
 'anonusers' => '{{PLURAL:$2|Oníṣe|Àwọn oníṣe}} aláìlórúkọ $1 {{SITENAME}}',
+'creditspage' => 'Àwọn ìdáwìn ojúewé',
+'nocredits' => 'Kò sí ẹ̀kúnrẹ́rẹ́ọ̀rọ̀ ìdáwìn fún ojúewé yìí.',
 
 # Spam protection
 'spamprotectiontitle' => 'Ajọ̀ àbò spam',
+'spamprotectiontext' => 'Ikọ-ọ̀rọ̀ tí ẹ fẹ́ múpamọ́ ti jẹ́ dídílọ́nà látọwọ́ ajọ̀ spam.
+Èyí le jẹ́ nítorí àjápọ̀ sí ibi-ìtakùn òde adílọ́nà.',
+'spamprotectionmatch' => 'Ikọ-ọ̀rọ̀ ìsàlẹ̀ yìí ló fa ajọ̀ spam: $1',
+'spambot_username' => 'Ìgbálẹ̀ spam MediaWiki',
+'spam_reverting' => 'Ìdápadà sí àtúnyẹ̀wò tó gbẹ̀yìn tí kò ní àjápọ̀ sí $1',
+'spam_blanking' => 'Gbogbo àtúnyẹ̀wò ní àjápọ̀ sí $1, ìmúkúrò',
+'spam_deleting' => 'Gbogbo àtúnyẹ̀wò ní àjápọ̀ sí $1, ìparẹ́',
 
 # Info page
 'pageinfo-title' => 'Àròyé fún "$1"',
+'pageinfo-not-current' => 'Ìforíjì, kò ṣe é ṣe láti pèsè ẹ̀kúnrẹ̀rẹ̀-ọ̀rọ̀ fún àwọn àtúnyẹ̀wò tó ti pẹ́.',
+'pageinfo-header-basic' => 'Ọ̀rọ̀ẹ̀kúnrẹ́rẹ́ oníkókó',
 'pageinfo-header-edits' => 'Ìtàn àtúnṣe',
+'pageinfo-header-restrictions' => 'Àbò ojúewé',
+'pageinfo-header-properties' => 'Àwọn ìníara ojúewé',
+'pageinfo-display-title' => 'Àkọlé orí',
+'pageinfo-default-sort' => 'Kọ́kọ́rọ́ ìtò àyàntẹ́lẹ̀',
+'pageinfo-length' => 'Ìgùn ojúewé (ní iye byte)',
+'pageinfo-article-id' => 'Nọ́mbà ìdámọ̀ ojúewé',
+'pageinfo-language' => 'Èdè àkóónú ojúewé',
+'pageinfo-robot-policy' => 'Ipò ẹ̀rọ ìṣàwárí',
+'pageinfo-robot-index' => 'Ṣíṣeéwárí',
+'pageinfo-robot-noindex' => 'Kò ṣeéwárí',
 'pageinfo-views' => 'Iye àwọn ìwò',
 'pageinfo-watchers' => 'Iye àwọn olùṣọ́ ojúewé',
+'pageinfo-redirects-name' => 'Àwọn àtúnjúwe sí ojúewé yìí',
+'pageinfo-subpages-name' => 'Àwọn ojúewé tó wà lábẹ́ ojúewé yìí',
+'pageinfo-subpages-value' => '$1 ({{PLURAL:$2|àtúnjúwe|àtúnjúwe}} $2; {{PLURAL:$3|àìjẹ́-àtúnjúwe|àìjẹ́-àtúnjúwe}} $3)',
+'pageinfo-firstuser' => 'Olùdá ojúewé',
+'pageinfo-firsttime' => 'Ọjọ́ ìdá ojúewé',
+'pageinfo-lastuser' => 'Olùtúnṣe ìkẹ́yìn',
+'pageinfo-lasttime' => 'Ọjọ́ àtúnṣe ìkẹ́yìn',
 'pageinfo-edits' => 'Àpapọ̀ iye àwọn àtúnṣe',
 'pageinfo-authors' => 'Àpapọ̀ iye àwọn olùdá ọ̀tọ̀ọ̀tọ̀',
+'pageinfo-recent-edits' => 'Iye àwọn àtúnṣe àìpẹ́ (láàrin $1 sẹ́yìn)',
+'pageinfo-recent-authors' => 'Iye àwọn olùtúnṣe ọ̀tọ̀ọ̀tọ̀ àìpẹ́',
+'pageinfo-magic-words' => '{{PLURAL:$1|Ọ̀rọ̀|Àwọn ọ̀rọ̀}} májìkì ($1)',
+'pageinfo-hidden-categories' => '{{PLURAL:$1|Ẹ̀ka|Àwọn ẹ̀ka}} bíbòmọ́lẹ̀ ($1)',
+'pageinfo-templates' => '{{PLURAL:$1|Àdàkọ|Àwọn àdàkọ}} ìkópọ̀mọ́ra ($1)',
+'pageinfo-toolboxlink' => 'Ọ̀rọ̀ẹ̀kúnrẹ́rẹ́ ojúewé',
+'pageinfo-redirectsto' => 'Àtúnjúwe sí',
+'pageinfo-redirectsto-info' => 'ọ̀rọ̀ẹ̀kúnrẹ̀rẹ̀',
+'pageinfo-contentpage' => 'Kíkà bíi ojúewé àkóónú',
+'pageinfo-contentpage-yes' => 'Bẹ́ẹ̀ni',
+'pageinfo-protect-cascading' => 'Àbò bẹ̀rẹ̀ láti ibí',
+'pageinfo-protect-cascading-yes' => 'Bẹ́ẹ̀ni',
+'pageinfo-protect-cascading-from' => 'Àbò bẹ̀rẹ̀ láti',
 
 # Patrolling
 'markaspatrolleddiff' => 'Ìṣààmí sí bíi sísọ́',
 'markaspatrolledtext' => 'Ìṣààmí sí ojúewé yìí bíi sísọ́',
 'markedaspatrolled' => 'Jẹ́ síṣààmí sí bíi sísọ́',
+'markedaspatrolledtext' => 'Àtúnyẹ̀wò [[:$1]] tó jẹ́ síṣàyàn ti jẹ́ síṣààmìsí bíi sísọ́.',
+'rcpatroldisabled' => 'Ìdálẹ́kun ìsọ́ àwọn àtúnṣe àìpẹ́',
+'rcpatroldisabledtext' => 'Àfiṣe ìsọ́ àtúnṣe àìpẹ́ jẹ́ dídálẹ́kun níwòyí.',
 'markedaspatrollederror' => 'Kò le jẹ́ síṣààmí sí bíi sísọ́',
+'markedaspatrollederrortext' => 'Ẹ gbọ́dọ̀ tọ́ka àtúnyẹ̀wò kan láti ṣe àmì sí bíi sísọ́.',
+'markedaspatrollederror-noautopatrol' => 'Ẹ kò ní àyè láti ṣe àmì sí àwọn àtúnṣe yín bíi sísọ́.',
+'markedaspatrollednotify' => 'Àtúnṣe yìí sí $1 ti jẹ́ síṣàmìṣí bíi sísọ́.',
+'markedaspatrollederrornotify' => 'Ìkùnà ìṣàmìsí bíi sísọ́.',
+
+# Patrol log
+'patrol-log-page' => 'Àkọọ́lẹ̀ ìsọ́',
+'patrol-log-header' => 'Àkọọ́lẹ̀ àwọn àtúnyẹ̀wò sísọ́ nì yí.',
+'log-show-hide-patrol' => '$1 àkọọ́lẹ̀ ìsọ́',
 
 # Image deletion
+'deletedrevision' => 'Àtúnyẹ̀wò àtijọ́ píparẹ́ $1',
 'filedeleteerror-short' => 'Àsìṣe ìparẹ́ fáílì: $1',
+'filedeleteerror-long' => 'Àwọn àsìṣe ṣẹlẹ̀ nígbà ìṣeìparẹ́ fáìlì náà:
+
+$1',
 'filedelete-missing' => 'Fáìlì "$1" náà kò ṣe é parẹ́ nítorípé kò sí.',
+'filedelete-old-unregistered' => 'Àtúnyẹ̀wò fáìlì "$1" tí ẹ tọ́kasí kò sí nínú ibùdó dátà.',
+'filedelete-current-unregistered' => 'Fáìlì "$1" tí ẹ tọ́kasí kò sí nínú ibùdó dátà.',
+'filedelete-archive-read-only' => 'Àpò ibi ìpamọ́ "$1" kò ṣe é kọ sí nínú látọwọ́ ẹ̀rọ-ìwọ̀fà.',
 
 # Browsing diffs
 'previousdiff' => '← Àtúnṣe tópẹ́jù',
 'nextdiff' => 'Àtúnṣe tótuntunjù →',
 
 # Media information
+'mediawarning' => "'''Ìkìlọ̀!''': Irú fáìlì yìí le ní àmìọ̀rọ̀ oníbájẹ́ nínú.
+Tí ẹ bá jẹ́ ó ṣiṣẹ́, ẹ̀rọ sístẹ́mù yín le kó sí ewu.",
+'imagemaxsize' => "Ẹ̀kun ìtóbi àwòrán:<br />''(fún ojúewé ìjúwe fáìlì)''",
 'thumbsize' => 'Ìtóbi àwòrán kékeré:',
 'widthheightpage' => '$1 × $2, $3 {{PLURAL:$3|ojúewé|àwọn ojúewé}}',
 'file-info' => 'ìtóbi faili: $1, irú MIME: $2',
@@ -2647,15 +2944,24 @@ kò le yípò ojúewé padà sí ara rẹ̀.',
 'file-info-size-pages' => '$1 × $2 pixel, ìtóbi faili: $3, irú MIME: $4, {{PLURAL:$5|ojúewé|ojúewé}} $5',
 'file-nohires' => 'Kò sí ìgbéhàn gíga jù báun lọ.',
 'svg-long-desc' => 'faili SVG, pẹ̀lú $1 × $2 pixels, ìtòbi faili: $3',
+'svg-long-desc-animated' => 'Fáìlì SVG alámùúrìn, tó jẹ́ $1 × $2 pixels, ìtóbi fáìlì: $3',
+'svg-long-error' => 'Fáìlì SVG àìyẹ: $1',
 'show-big-image' => 'Pẹ̀lú ìgbéhàn gíga',
+'show-big-image-preview' => 'Ìtóbi ìkọ́yẹ̀wò yìí: $1.',
 'show-big-image-other' => '{{PLURAL:$2|Ìgbéhàn|Àwọn ìgbéhàn}} míràn: $1.',
 'show-big-image-size' => '$1 × $2 pixels',
 'file-info-gif-looped' => 'lílọ́po',
+'file-info-gif-frames' => '{{PLURAL:$1|fèrèsé àwòrán|fèrèsé àwòrán}} $1',
 'file-info-png-looped' => 'lílọ́po',
+'file-info-png-repeat' => 'jẹ́ títa ní {{PLURAL:$1|ìgbà|ìgbà}} $1',
+'file-info-png-frames' => '{{PLURAL:$1|fèrèsé àwòrán|fèrèsé àwòrán}} $1',
+'file-no-thumb-animation' => "'''Ìkíyèsí: Nítorí ìdẹ́kun ìṣeṣẹ́ ẹ̀rọ, àwọn àwòrán kékeré fáìlì yìí kò ní jẹ́ mímúrìn.'''",
+'file-no-thumb-animation-gif' => "''Ìkíyèsí: Nítorí ìdẹ́kun ìṣeṣẹ́ ẹ̀rọ, àwọn àwòrán kékeré ìgbéhàn gíga GIF irú èyí kò ní jẹ́ mímúrìn.'''",
 
 # Special:NewFiles
 'newimages' => 'Ọ̀dẹ̀dẹ̀ àwòrán àwọn faili tuntun',
 'imagelisttext' => "Nísàlẹ̀ ni àtòjọ {{PLURAL:$1|fáìlì|àwọn fáìlì}} '''$1''' ní títò $2.",
+'newimages-summary' => 'Ojúewé pàtàkì yìí ṣe àfihàn àwọn fáìlì ìrùsókè gbẹ̀yìn.',
 'newimages-legend' => 'Ajọ̀',
 'newimages-label' => 'Orúkọ faili (tàbí apá kan rẹ̀):',
 'showhidebots' => '(àwọn bot $1)',
@@ -2670,6 +2976,7 @@ kò le yípò ojúewé padà sí ara rẹ̀.',
 'hours' => '{{PLURAL:$1|wákàtí $1}}',
 'days' => '{{PLURAL:$1|ọjọ́ $1}}',
 'ago' => '$1 sẹ́yìn',
+'just-now' => 'nísinsìnyí',
 
 # Bad image list
 'bad_image_list' => 'Onírú jẹ́ gẹ́gẹ́ bíi àtèlé yìí:
@@ -2702,59 +3009,180 @@ Tóbájẹ́pé fáìlì ọ̀hún ti jẹ́ títúnṣe sí bóṣewà ní bẹ
 # EXIF tags
 'exif-imagewidth' => 'Fífẹ̀sí',
 'exif-imagelength' => 'Gígasí',
+'exif-bitspersample' => 'Bit fún àkóónú kọ̀ọ̀kan',
+'exif-compression' => 'Ètò ìtẹ̀pọ̀',
+'exif-orientation' => 'Ìdojúdé',
+'exif-samplesperpixel' => 'Iye àkóónú',
+'exif-planarconfiguration' => 'Ìṣètò dátà',
+'exif-ycbcrpositioning' => 'Ipò Y àti C',
+'exif-xresolution' => 'Ìgbéga onígbọlọjọ',
+'exif-yresolution' => 'Ìgbéga onínàró',
 'exif-stripoffsets' => 'Ìbùdó dátà àwòrán',
+'exif-rowsperstrip' => 'Iye oríìlà fún strip kan',
+'exif-stripbytecounts' => 'Iye byte fún àfúnpọ̀ strip kan',
+'exif-jpeginterchangeformat' => 'Fò sí JPEG SOI',
 'exif-jpeginterchangeformatlength' => 'Iye byte dátà JPEG',
+'exif-datetime' => 'Ọjọ́ àti àsìkò ìyípadà fáìlì',
 'exif-imagedescription' => 'Àkọlé àwòrán',
 'exif-make' => 'Olùṣẹ̀rọ kámẹ́rà',
 'exif-model' => 'Irú kámẹ́rà',
+'exif-software' => 'Atòlànà kọ̀mpútà lílò',
 'exif-artist' => 'Olùdá',
 'exif-copyright' => 'Ẹni tóni ẹ̀tọ́ àwòkọ',
+'exif-exifversion' => 'Irú Exif',
+'exif-flashpixversion' => 'Ìṣàtìlẹ́yìn irú Flashpix',
 'exif-colorspace' => 'Àyè àwọ̀',
+'exif-componentsconfiguration' => 'Ìtumọ̀ àkóónú kọ̀ọ̀kan',
+'exif-compressedbitsperpixel' => 'Àyè ìtẹ̀pọ̀ àwòrán',
 'exif-pixelydimension' => 'Ìfẹ̀ àwòrán',
 'exif-pixelxdimension' => 'Ìga àwòrán',
 'exif-usercomment' => 'Àwọn àwìsọ oníṣe',
+'exif-relatedsoundfile' => 'Fáìlì ìfohùn tó jọra',
+'exif-datetimeoriginal' => 'Ọjọ́ àti àsìkò tí dátà jade',
+'exif-datetimedigitized' => 'Ọjọ́ àti àsìkò ìsọdi dígítà',
+'exif-subsectime' => 'Ọjọ́Àsìkò ìpín-ìṣẹ́júàáyá',
+'exif-subsectimeoriginal' => 'Ọjọ́ÀsìkòNíbẹ̀rẹ̀ ìpín-ìṣẹ́júàáyá',
+'exif-subsectimedigitized' => 'Ọjọ́ÀsìkòDígítà ìpín-ìṣẹ́júàáyá',
 'exif-exposuretime-format' => '$1 ìṣẹ́j/kejì ($2)',
 'exif-fnumber' => 'Nọ́mbà F',
+'exif-brightnessvalue' => 'Ìmọ́lẹ̀ APEX',
+'exif-subjectdistance' => 'Ìjìnnà olùdálélórí',
 'exif-lightsource' => 'Ìsun ìmọ́lẹ̀',
+'exif-flash' => 'Fláàṣì',
+'exif-focallength' => 'Ìbú ìtẹjúmọ́ dígí',
+'exif-subjectarea' => 'Àyè olùdálélórí',
+'exif-flashenergy' => 'Agbára okun fláàṣì',
+'exif-subjectlocation' => 'Ibùdó adálélórí',
 'exif-filesource' => 'Orísun fáìlì',
+'exif-whitebalance' => 'Ìbámu àwò funfun',
+'exif-focallengthin35mmfilm' => 'Ìbú ìtẹjúmọ́ nínú fílmù 35 mm',
+'exif-subjectdistancerange' => 'Ìgbàjá ìjìnnà ìdálélórí',
+'exif-imageuniqueid' => 'Nọ́mbà ìdámọ̀ àwòrán ọ̀tọ̀ọ̀tọ̀',
+'exif-gpsversionid' => 'Irú àlẹ̀mọ́ GPS',
 'exif-gpstimestamp' => 'Àsìkò GPS (ago átọ́mù)',
+'exif-gpsmeasuremode' => 'Àyè ìwọ̀n',
+'exif-gpsspeedref' => 'Ẹ̀yọ ìyárasí',
+'exif-gpsspeed' => 'Ìyárasí ẹ̀rọ ìmú GPS',
+'exif-gpsimgdirectionref' => 'Ìtọ́kasí fún ìdojúkọ àwòrán',
+'exif-gpsimgdirection' => 'Ìdojúkọ àwòrán',
+'exif-gpsdestbearingref' => 'Ìtọ́kasí fún òye ìbọ́sí',
+'exif-gpsdestbearing' => 'Òye ìbósí',
+'exif-gpsdestdistanceref' => 'Ìtọkasí fún ìjìnnà sí ìbọ́sí',
+'exif-gpsdestdistance' => 'Ìjìnnà sí ìbọ́sí',
+'exif-gpsprocessingmethod' => 'Orúkọ ọ̀nà ìgbẹ́ṣe GPS',
 'exif-gpsareainformation' => 'Orúkọ agbègbè GPS',
 'exif-gpsdatestamp' => 'Ọjọ́ọdún GPS',
+'exif-gpsdifferential' => 'Ìtúnṣe ìyàtọ̀ GPS',
 'exif-jpegfilecomment' => 'Àwísọ fáìlì JPEG',
 'exif-keywords' => 'Àwọn kókóọ̀rọ̀',
+'exif-worldregioncreated' => 'Agbègbè àgbáyé tí wọ́n ti ya àwòrán',
+'exif-countrycreated' => 'Orílẹ̀-èdè tí wọ́n ti ya àwòrán',
+'exif-countrycodecreated' => 'Àmìọ̀rọ̀ fún orílẹ̀-èdè tí wọ́n ti ya àwòrán',
+'exif-provinceorstatecreated' => 'Ìgbèríko tàbí ìpínlẹ̀ tí wọ́n ti ya àwòrán',
+'exif-citycreated' => 'Ìlú tí wọ́n ti ya àwòrán',
+'exif-sublocationcreated' => 'Àdúgbò ìlú tí wọ́n ti ya àwòrán',
 'exif-worldregiondest' => 'Agbègbè àgbáyé híhàn',
 'exif-countrydest' => 'Orílẹ̀-èdè híhàn',
 'exif-countrycodedest' => 'Àmìọ̀rọ̀ fún orílẹ̀-èdè híhàn',
+'exif-provinceorstatedest' => 'Ìgbéríko tàbí ìpínlẹ̀ tó ní',
 'exif-citydest' => 'Ìlú híhàn',
+'exif-sublocationdest' => 'Ibùdó ní ìlú àfihàn',
 'exif-objectname' => 'Àkọlé kúkúrú',
+'exif-specialinstructions' => 'Àwọn ìlànà pàtàkì',
 'exif-headline' => 'Àkọlé',
+'exif-credit' => 'Adálórúkọ/Olùpèsè',
 'exif-source' => 'Orísun',
+'exif-urgency' => 'Ìkánjú',
+'exif-locationdest' => 'Ibùdó afihàn',
+'exif-locationdestcode' => 'Àmìọ̀rọ̀ ibùdó àfihàn',
+'exif-objectcycle' => 'Àsìkò ọjọ́ tí amóhùnmáwòrán jẹ́ fífètòsí',
+'exif-contact' => 'Ibi ìbárapàdé',
 'exif-writer' => 'Olùkọ̀wé',
 'exif-languagecode' => 'Èdè',
 'exif-iimversion' => 'Àtẹ̀jáde IIM',
 'exif-iimcategory' => 'Ẹ̀ka',
 'exif-iimsupplementalcategory' => 'Àwọn ẹ̀ka aláfikún',
+'exif-datetimeexpires' => 'Ẹ mọ́ lò ó lẹ́yìn',
+'exif-datetimereleased' => 'Fisílẹ̀ ní',
+'exif-identifier' => 'Oludámọ̀',
+'exif-lens' => 'Irú awò',
+'exif-serialnumber' => 'Nọ́mbà ìtẹ̀léra kámẹ́rà',
+'exif-cameraownername' => 'Ẹni tó ni kámẹ́rà',
 'exif-label' => 'Àlẹ̀mọ́',
+'exif-datetimemetadata' => 'Ọjọ́ tí mẹtadátà jẹ́ títúnṣe kẹ́yìn',
+'exif-nickname' => 'Orúkọ àìdájú àwòrán',
+'exif-rating' => 'Máàkì (nínú 5)',
+'exif-copyrighted' => 'Ipò ẹ̀tọ́àwòkọ',
+'exif-copyrightowner' => 'Ẹni tóni ẹ̀tọ́ àwòkọ',
+'exif-usageterms' => 'Àdéhùn ìmúlò',
+'exif-licenseurl' => 'URL fún ìwé-ẹ̀rí ẹ̀tọ́àwòkọ',
+'exif-attributionurl' => 'Nígbà tí ẹ bá ṣe àtúnlò iṣẹ́ yìí, ẹ jọ̀wọ́ ẹ ṣe àjápọ̀ sí',
+'exif-preferredattributionname' => 'Nígbà tí ẹ bá ṣe àtúnlò iṣẹ́ yìí, ẹ jọ̀wọ́ ẹ ṣe ìdálórúkọ',
 'exif-pngfilecomment' => 'Àwísọ fáìlì PNG',
+'exif-contentwarning' => 'Ìkìlọ̀ àkóónú',
 'exif-giffilecomment' => 'Àwísọ fáìlì GIF',
+'exif-intellectualgenre' => 'Irú ohun',
+'exif-subjectnewscode' => 'Àmíọ̀rọ̀ olùdálélórí',
+'exif-event' => 'Ìṣẹ̀lẹ̀ tó ṣe',
+'exif-organisationinimage' => 'Àgbájọ tó ṣe',
+'exif-personinimage' => 'Ẹni àfihàn',
+
+# EXIF attributes
+'exif-compression-1' => 'Àìtẹ̀pọ̀',
+
+'exif-copyrighted-true' => 'Ó ní ẹ̀tọ́-àwòkọ',
+'exif-copyrighted-false' => 'Àyè ìgboro',
 
 'exif-unknowndate' => 'Ọjọ́ọdún àìmọ̀',
 
 'exif-orientation-1' => 'Déédé',
+'exif-orientation-3' => 'Yíyínípo 180°',
+'exif-orientation-4' => 'Dídoríkodò',
+'exif-orientation-5' => 'Yíyínípo sí 90° CCW àti dídà lórí kudò',
+'exif-orientation-6' => 'Yíyínípo sí 90° CCW',
+'exif-orientation-7' => 'Yíyínípo sí 90° CW àti dídà lórí kudò',
+'exif-orientation-8' => 'Yíyínípo sí 90° CW',
 
 'exif-componentsconfiguration-0' => 'kòsí',
 
+'exif-exposureprogram-0' => 'Kò ní ìtumọ̀',
+'exif-exposureprogram-1' => 'Aláfọwọ́ṣe',
+
 'exif-subjectdistance-value' => 'mítà $1',
 
 'exif-meteringmode-0' => 'Aláìmọ̀',
 'exif-meteringmode-1' => 'Ìpínláàrin',
+'exif-meteringmode-3' => 'Ojúàmì',
+'exif-meteringmode-4' => 'Ojúàmì-Orísi',
+'exif-meteringmode-6' => 'Onídíẹ̀',
 'exif-meteringmode-255' => 'Òmíràn',
 
 'exif-lightsource-0' => 'Aláìmọ̀',
 'exif-lightsource-1' => 'Ojúmọ́',
+'exif-lightsource-4' => 'Fláàṣì',
+'exif-lightsource-9' => 'Ojúọjọ́ dídára',
+'exif-lightsource-10' => 'Ojúọjọ́ tó ṣú',
 'exif-lightsource-11' => 'Ìbòji',
 'exif-lightsource-255' => 'Orísun ìmọ́lẹ̀ míràn',
 
+# Flash modes
+'exif-flash-fired-0' => 'Fláàṣì kò yọ iná',
+'exif-flash-fired-1' => 'Fláàṣì yọ iná',
+'exif-flash-mode-3' => 'nífúnrara',
+'exif-flash-function-1' => 'Fláàṣì kò siṣẹ́',
+
+'exif-focalplaneresolutionunit-2' => 'inches',
+
+'exif-sensingmethod-1' => 'Àìtúmọ̀',
+
+'exif-filesource-3' => 'Kámẹ́rà dígítà amúdúró',
+
+'exif-scenetype-1' => 'Àwòrán tó jẹ́ yíyà ní fọ́tò tààrà',
+
+'exif-customrendered-0' => 'Ìgbéṣe déédé',
+
+'exif-scenecapturetype-3' => 'Inú òkùnkùn',
+
 'exif-gaincontrol-0' => 'Ìkankan',
 
 'exif-contrast-0' => 'Déédé',
@@ -2764,6 +3192,8 @@ Tóbájẹ́pé fáìlì ọ̀hún ti jẹ́ títúnṣe sí bóṣewà ní bẹ
 'exif-sharpness-0' => 'Déédé',
 
 'exif-subjectdistancerange-0' => 'Aláìmọ̀',
+'exif-subjectdistancerange-2' => 'Ìpadé ìwòran',
+'exif-subjectdistancerange-3' => 'Ìwòran ọ̀ọ́kán',
 
 # Pseudotags used for GPSAltitudeRef
 'exif-gpsaltitude-above-sealevel' => '$1 {{PLURAL:$1|meter|meters}} ló fiwà lókè omi-òkun',
@@ -2774,15 +3204,36 @@ Tóbájẹ́pé fáìlì ọ̀hún ti jẹ́ títúnṣe sí bóṣewà ní bẹ
 
 # Pseudotags used for GPSSpeedRef
 'exif-gpsspeed-k' => 'Kilometers láàrin wákàtí kan',
+'exif-gpsspeed-m' => 'Mẹ́ẹ̀lì ní wákàtí kan',
 
 # Pseudotags used for GPSDestDistanceRef
 'exif-gpsdestdistance-k' => 'Kilometers',
+'exif-gpsdestdistance-m' => 'Mẹ́ẹ̀lì',
+'exif-gpsdestdistance-n' => 'Mẹ́ẹ̀lì orí-omi',
 
+'exif-gpsdop-good' => 'Dáradára ($1)',
+'exif-gpsdop-poor' => 'Àìdára ($1)',
+
+'exif-objectcycle-a' => 'Àárọ̀ nìkan',
+'exif-objectcycle-p' => 'Ìrọ̀lẹ́ nìkan',
+'exif-objectcycle-b' => 'Àárọ̀ àti ìrọ̀lẹ́',
+
+'exif-ycbcrpositioning-1' => 'Gbígbésáàrin',
+
+'exif-dc-contributor' => 'Àwọn olùkópa',
 'exif-dc-date' => 'Ọjọ́ọdún',
 'exif-dc-publisher' => 'Olùtẹ̀jáde',
+'exif-dc-relation' => 'Amóhùnmáwórán ajọra',
+'exif-dc-rights' => 'Àwọn ẹ̀tọ́',
+'exif-dc-source' => 'Orísun amóhùnmáwórán',
 'exif-dc-type' => 'Irú amóhùnmáwòrán',
 
+'exif-rating-rejected' => 'Kíkọ̀',
+
+'exif-isospeedratings-overflow' => 'Ó tóbi ju 65535 lọ',
+
 'exif-iimcategory-ace' => 'Ìṣẹ́ọnà, àṣà àti fàájì',
+'exif-iimcategory-clj' => 'Ìdanràn àti òfin',
 'exif-iimcategory-edu' => 'Ẹ̀kọ́',
 'exif-iimcategory-evn' => 'Àyíká',
 'exif-iimcategory-hth' => 'Ìlera',
@@ -2790,9 +3241,11 @@ Tóbájẹ́pé fáìlì ọ̀hún ti jẹ́ títúnṣe sí bóṣewà ní bẹ
 'exif-iimcategory-pol' => 'Ìṣèlú',
 'exif-iimcategory-rel' => 'Ẹ̀sìn àti ìgbàgbọ́',
 'exif-iimcategory-sci' => 'Sáyẹ̀nsì àti ọ̀rọ̀iṣẹ́ọnà',
+'exif-iimcategory-soi' => 'Àwọn ọ̀rọ̀ àwùjọ',
 'exif-iimcategory-spo' => 'Àwọn eréìdárayá',
 'exif-iimcategory-wea' => 'Ojúọjọ́',
 
+'exif-urgency-normal' => 'Déédé ($1)',
 'exif-urgency-low' => 'Kúkúrú ($1)',
 'exif-urgency-high' => 'Gíga ($1)',
 
@@ -2813,14 +3266,69 @@ Tóbájẹ́pé fáìlì ọ̀hún ti jẹ́ títúnṣe sí bóṣewà ní bẹ
 'confirmemail_sent' => 'E-mail ìmúdájú ti jẹ́ fífiránṣẹ́.',
 'confirmemail_oncreate' => 'A ti fi àmìọ̀rọ̀ ìmúdájú ránṣẹ́ sí ojúọ̀nà e-mail yín.
 Àmìọ̀rọ̀ yìí kò pọndandan láti mú yín wọlé, sùgbọ́n ẹ gbọ́dọ̀ mu padà kí gbogbo àwọn ohun inú wiki yìí tó dúró lórí e-mail ó tó lè ṣiṣẹ́.',
+'confirmemail_sendfailed' => '{{SITENAME}} kò le fi lẹ́tà ìmúdájú yín ránṣẹ́.
+Ẹ jọ̀wọ́ ẹ ye àdírẹ́ẹ̀sì e-mail yín wò fún irú lẹ́tà-ọ̀rọ̀ tí kò yẹ.
+
+Èsi ẹ̀rọ ìránṣẹ́: $1',
+'confirmemail_invalid' => 'Àmìọ̀rọ̀ ìmúdájú àìyẹ.
+Ó ṣe é ṣe kó jẹ́ pé àmìọ̀rọ̀ kò ṣiṣẹ́ mọ́.',
+'confirmemail_needlogin' => 'Ẹ gbọ́dò $1 láti ṣe ìmúdájú àdírẹ́ẹ́sì e-mail yín.',
+'confirmemail_success' => 'Àdírẹ́ẹ́sì e-mail yín ti jẹ́ mímúdájú.
+Ẹ le [[Special:UserLogin|wọlé]] nísìnhin láti gbádùn wiki yìí.',
 'confirmemail_loggedin' => 'Àdírẹ́ẹ̀sì e-mail yín ti dájú.',
+'confirmemail_error' => 'Àsìṣe ṣẹlẹ̀ láti fi ìmójútó yín pamọ́.',
 'confirmemail_subject' => 'Ìmúdájú àdírẹ́ẹ̀sì e-mail fún {{SITENAME}}',
+'confirmemail_body' => 'Ẹnìkan, bóyá ẹ̀yin sì ni, láti àdírẹ́ẹ̀sì IP $1,
+ti ṣe ìforúkọsílẹ̀ àpamọ́ kan "$2" pẹ̀lú àdírẹ́ẹ̀sì e-mail yìí lórí {{SITENAME}}.
+
+Láti fidájú pé àpamọ́ yìí gangan jẹ́ ti yín àtí láti bẹ́rẹ́ àwọn iṣẹ́ e-mail lórí {{SITENAME}}, ẹ sí àjápọ̀ yìí lórí ẹ̀rọ ìtakùn yín:
+
+$3
+
+Tó bá jẹ́ pé ẹ *kò* forúkọ àpamọ́ sílẹ̀, ẹ tẹ̀lé àjápọ̀ yìí láti fagilé àdírẹ́ẹ̀sì e-mail ìmúdájú:
+
+$5
+
+Àmíọ̀rọ̀ ìmúdájú yìí kò ní ṣiṣẹ́ mọ́ lẹ́yìn $4.',
+'confirmemail_body_changed' => 'Ẹnìkan, bóyá ẹ̀yin sì ni, láti àdírẹ́ẹ̀sì IP $1,
+ti ṣe ìyípadà àdírẹ́ẹ̀sì e-mail àpamọ́ "$2" sí àdírẹ́ẹ̀sì yìí lórí {{SITENAME}}.
+
+Láti fidájú pé àpamọ́ yìí gangan jẹ́ ti yín àtí láti bẹ́rẹ́ àwọn iṣẹ́ e-mail lórí {{SITENAME}}, ẹ sí àjápọ̀ yìí lórí ẹ̀rọ ìtakùn yín:
+
+$3
+
+Tó bá jẹ́ pé àpamọ́ náà *kò* jẹ́ ti yín, ẹ tẹ̀lé àjápọ̀ yìí láti fagilé àdírẹ́ẹ̀sì e-mail ìmúdájú:
+
+$5
+
+Àmíọ̀rọ̀ ìmúdájú yìí kò ní ṣiṣẹ́ mọ́ lẹ́yìn $4.',
+'confirmemail_body_set' => 'Ẹnìkan, bóyá ẹ̀yin sì ni, láti àdírẹ́ẹ̀sì IP $1,
+ti yí àdírẹ́ẹ̀sì e-mail àpamọ́ "$2" sí àdírẹ́ẹ̀sì yìí lórí {{SITENAME}}.
+
+Láti fidájú pé àpamọ́ yìí gangan jẹ́ ti yín àtí láti bẹ́rẹ́ àwọn iṣẹ́ e-mail lórí {{SITENAME}}, ẹ sí àjápọ̀ yìí lórí ẹ̀rọ ìtakùn yín:
+
+$3
+
+Tó bá jẹ́ pé àpamọ́ náà *kò* jẹ́ ti yín, ẹ tẹ̀lé àjápọ̀ yìí láti fagilé àdírẹ́ẹ̀sì e-mail ìmúdájú:
+
+$5
+
+Àmíọ̀rọ̀ ìmúdájú yìí kò ní ṣiṣẹ́ mọ́ lẹ́yìn $4.',
+'confirmemail_invalidated' => 'Ìmúdájú àdìrẹ́ẹ́sì e-mail ti jẹ́ fífagilé',
 'invalidateemail' => 'Fagilé ìmúdájú e-mail',
 
 # Scary transclusion
+'scarytranscludedisabled' => '[Ìdálẹ́kun ìjámọ́ra interwiki]',
+'scarytranscludefailed' => '[Ìmjjáde àdàkọ kùnà fún $1]',
+'scarytranscludefailed-httpstatus' => '[Ìmjjáde àdàkọ kùnà fún $1: HTTP $2]',
 'scarytranscludetoolong' => '[URL ti gùn jù]',
 
 # Delete conflict
+'deletedwhileediting' => "'''Ìkìlọ̀''': Ojúewé yìí ti jẹ́ píparẹ́ lẹ́yìn tí ẹ bẹ̀rẹ̀ àtúnṣe rẹ̀!",
+'confirmrecreate' => "Oníṣe [[User:$1|$1]] ([[User talk:$1|ọ̀rọ̀]]) pa ojúewé yìí rẹ́ lẹ́yìn tí ẹ bẹ̀rẹ̀ àtúnṣe lórí rẹ̀ nítorípè:
+: ''$2''
+Ẹ jọ̀wọ́ ẹ ṣe ìmúdájú pé ẹ fẹ́ tún ojúewé yìí dá.",
+'confirmrecreate-noreason' => 'Oníṣe [[User:$1|$1]] ([[User talk:$1|ọ̀rọ̀]]) pa ojúewé yìí rẹ́ lẹ́yìn tí ẹ bẹ̀rẹ̀ àtúnṣe lórí rẹ̀ nítorípè. Ẹ jọ̀wọ́ ẹ ṣe ìmúdájú pé ẹ fẹ́ tún ojúewé yìí dá.',
 'recreate' => 'Ìtúndá',
 
 # action=purge
@@ -2847,69 +3355,114 @@ Tóbájẹ́pé fáìlì ọ̀hún ti jẹ́ títúnṣe sí bóṣewà ní bẹ
 'table_pager_first' => 'Ojúewé ìkíní',
 'table_pager_last' => 'Ojúewé tógbẹ̀yìn',
 'table_pager_limit' => 'Ìfihàn ohun $1 lójúewé kọ̀ọ̀kan',
+'table_pager_limit_label' => 'Iye ohun ní ojúewé kọ̀ọ̀kan:',
 'table_pager_limit_submit' => 'Lọ',
 'table_pager_empty' => 'Kò sí èsì',
 
 # Auto-summaries
+'autosumm-blank' => 'Sọ ojúewé di òfo',
+'autosumm-replace' => 'Dípò àkóónú pẹ̀lú "$1"',
 'autoredircomment' => 'Ti ṣàtunjúwe ojúewé sí [[$1]]',
 'autosumm-new' => 'Ṣ\'èdá ojúewé pẹ̀lú "$1"',
 
 # Live preview
 'livepreview-loading' => 'Óúnbọ̀wá...',
 'livepreview-ready' => 'Úngbéyọ... Ti ṣetán!',
+'livepreview-failed' => 'Àkọ́yẹ̀wò ẹsẹ̀kẹsẹ̀ kùnà!
+Ẹ lo àkóyẹ̀wò onídéédé.',
+'livepreview-error' => 'Ó kùnà láti sorapọ̀: $1 "$2".
+Ẹ lo àkóyẹ̀wò onídéédé.',
+
+# Friendlier slave lag warnings
+'lag-warn-normal' => 'Àwọn àtúnṣe tí kò pẹ́ ju {{PLURAL:$1|ìṣẹ́jú-àáyá|ìṣẹ́jú-àáyá}} $1 lọ le mọ́ hàn nínú àtòjọ yìí.',
 
 # Watchlist editor
+'watchlistedit-numitems' => 'Ìmójútó yín ní {{PLURAL:$1|àkọlé 1|àkọlé $1}}, láìka àwọn ojúewé ọ̀rọ̀.',
 'watchlistedit-noitems' => 'Ìmójútó yín kò ní àwọn àkọlé kankan.',
 'watchlistedit-normal-title' => 'Àtúnṣe ìmójútó',
 'watchlistedit-normal-legend' => 'Ìyọkúrò àwọn àkọlé láti inú ìmójútó',
 'watchlistedit-normal-submit' => 'Ìyọkúrò àwọn àkọlé',
+'watchlistedit-normal-done' => '{{PLURAL:$1|Àkọlé 1|Àkọlé $1}} jẹ́ yíyọkúrò látinú ìmójútó yín:',
 'watchlistedit-raw-titles' => 'Àwọn àkọlé:',
+'watchlistedit-raw-submit' => 'Ìsọdọ̀tun ìmójútó',
 'watchlistedit-raw-done' => 'Àwọn àmójútó yín ti dọ̀tun.',
 'watchlistedit-raw-added' => '{{PLURAL:$1|Àkọlé 1|Àwọn àkọlẹ́ $1}} ti jẹ́ fífikún:',
+'watchlistedit-raw-removed' => '{{PLURAL:$1|Àkọlé 1|Àwọn àkọlẹ́ $1}} ti jẹ́ yíyọkúrò:',
 
 # Watchlist editing tools
 'watchlisttools-view' => 'Ẹ wo àwon àtúnṣe tóbaamu',
 'watchlisttools-edit' => 'Ìwò àti àtúnṣe ìmójútó',
 'watchlisttools-raw' => "Ẹ ṣ'àtúnṣe àkójọ ìmójútó látìbẹ̀rẹ̀",
 
+# Signatures
+'signature' => '[[{{ns:user}}:$1|$2]] ([[{{ns:user_talk}}:$1|ọ̀rọ̀]])',
+
 # Core parser functions
+'unknown_extension_tag' => 'Àlẹ̀mọ́ ìfàgùn àìdámọ̀ "$1"',
 'duplicate-defaultsort' => '\'\'\'Ìkìlọ̀:\'\'\' Bọ́tìnì ìtò àkọ́kọ́ṣe "$2" dípò Bọ́tìnì ìtò àkọ́kọ́ṣe "$1" tẹ́lẹ̀.',
 
 # Special:Version
 'version' => 'Àtẹ̀jáde',
+'version-extensions' => 'Àwọn ìfàgùn kíkànsínú',
 'version-specialpages' => 'Àwọn ojúewé pàtàkì',
 'version-variables' => 'Ayàtọ̀',
+'version-antispam' => 'Ìdínà spam',
 'version-skins' => 'Skin (Àwọ̀)',
 'version-other' => 'Òmíràn',
+'version-hooks' => 'Àwọn hook',
+'version-extension-functions' => 'Àwọn ìmúṣe ìfàgùn',
+'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-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ú',
+'version-software-product' => 'Èso',
 'version-software-version' => 'Àtẹ̀jáde',
+'version-entrypoints' => 'Àwọn URL ojú ìwọlé',
+'version-entrypoints-header-entrypoint' => 'Ojú ìwọlé',
 'version-entrypoints-header-url' => 'URL',
 
 # Special:FilePath
 'filepath' => 'Ipaṣẹ̀ fáìlì',
 'filepath-page' => 'Faili:',
 'filepath-submit' => 'Lọ',
+'filepath-summary' => 'Ojúewé pàtàkì yìí úndá gbogbo ipasẹ̀ fáìlì kan padà.
+Àwọn àwòrán únhàn ní kedere, àwọn irú fáìlì míràn jẹ́ bíbẹ̀rẹ̀ pẹ̀lú ètò ìbáṣe wọn tàràtà.',
 
 # Special:FileDuplicateSearch
+'fileduplicatesearch' => 'Ìṣàwárí fún àwọn fáìlì àdáwòkọ',
+'fileduplicatesearch-summary' => 'Ìṣàwárí fún àwọn fáìlì àdáwòkọ gẹ́gẹ́bí nọ́mbà hash',
+'fileduplicatesearch-legend' => 'Ìṣàwárí fún àdáwòkọ kan',
 'fileduplicatesearch-filename' => 'Orúkọ fáìlì:',
 'fileduplicatesearch-submit' => 'Àwárí',
 'fileduplicatesearch-info' => '$1 × $2 pixel<br />Ìtóbi fáìlì: $3<br />Irú MIME: $4',
+'fileduplicatesearch-result-1' => 'Fáìlì "$1" kò ní ìdáwòkọ jíjọra',
+'fileduplicatesearch-result-n' => 'Fáìlì "$1" ní {{PLURAL:$2|ìdáwòkọ jíjọra 1|ìdáwòkọ jíjọra $2}}.',
 'fileduplicatesearch-noresults' => 'Kò sí fáìlì tó únjẹ́ "$1".',
 
 # Special:SpecialPages
 'specialpages' => 'Àwọn ojúewé pàtàkì',
+'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',
 'specialpages-group-login' => 'Ìwọlé / ìdá àpamọ́',
+'specialpages-group-changes' => 'Àwọn àtúnṣe àti àkọọ́lẹ̀ àìpẹ́',
+'specialpages-group-media' => 'Ìrùsókè àti àbọ̀ amóhùnmáwòrán',
 'specialpages-group-users' => 'Àwọn oníṣe àti àwọn ẹ̀tọ́ wọn',
+'specialpages-group-highuse' => 'Àwọn ojúewé ìlò gíga',
 'specialpages-group-pages' => 'Àkójọ àwọn ojúewé',
 'specialpages-group-pagetools' => 'Àwọn irinṣẹ́ ojúewé',
+'specialpages-group-wiki' => 'Àwọn irinṣẹ́ àti dátà wiki',
+'specialpages-group-redirects' => 'Ìtúnjúwe àwọn ojúewé pàtàkì',
+'specialpages-group-spam' => 'Irínṣẹ́ spam',
 
 # Special:BlankPage
 'blankpage' => 'Ojúewé òfo',
+'intentionallyblankpage' => 'Ojúewé yìí mọ́hánmọ̀ jẹ́ òfo.',
 
 # External image whitelist
 'external_image_whitelist' => ' #Ẹ fi ìlà yìí sílẹ̀ bó ṣe wà<pre>
@@ -2923,10 +3476,14 @@ Tóbájẹ́pé fáìlì ọ̀hún ti jẹ́ títúnṣe sí bóṣewà ní bẹ
 #Ẹ fi gbogbo àwọn abala regular expression sí òkè ìlà yí. Ẹ fi ìlà yìí sílẹ̀ bó ṣe wà</pre>',
 
 # Special:Tags
+'tags' => 'Àwọn àlẹ̀mọ́ tuntun gidi',
 'tag-filter' => 'Ajọ̀ [[Special:Tags|àlẹ́mọ́]]:',
 'tag-filter-submit' => 'Ajọ̀',
 'tags-title' => 'Àwọn àlẹ̀mọ́',
+'tags-intro' => 'Ojúewé yìí ṣe àtòjọ àwọn àlẹ̀mọ́ tí atọ́nà kọ̀mpútà le ṣe àmì àtúnṣe pẹ̀lú, àti ìtumọ̀ wọn.',
 'tags-tag' => 'Orúkọ àlẹ́mọ́',
+'tags-display-header' => 'Ìhàn lórí àtòjọ tuntun',
+'tags-description-header' => 'Ìjúwe kíkún ohun tó túmọ́sì',
 'tags-hitcount-header' => 'Àwọn àtúnṣe oníàlẹ̀mọ́',
 'tags-edit' => 'àtúnṣe',
 'tags-hitcount' => '{{PLURAL:$1|Àtúnṣe|Àwọn àtúnṣe}} $1',
@@ -2945,53 +3502,125 @@ Tóbájẹ́pé fáìlì ọ̀hún ti jẹ́ títúnṣe sí bóṣewà ní bẹ
 
 # Database error messages
 'dberr-header' => 'Wiki yìí ní ìsòro',
+'dberr-problems' => 'Àforìjì!
+Ibiìtakùn yìí únkojú ìsòro ìṣìṣẹ́ẹ̀rọ.',
+'dberr-again' => 'Ẹ mú sùúrù fún ìṣẹ́jú díẹ̀ kí ẹ tó tún ṣe ìrùsókè.',
+'dberr-info' => '(Kò le farakan ẹ̀rọ-ìpèsè ibùdó dátà: $1)',
+'dberr-usegoogle' => 'Ẹ le ṣàwárí lórí Google báyìí ná.',
+'dberr-outofdate' => 'Ẹ mọ̀ pé atọ́ka wọn fún àkóónú wa le mọ́ jẹ́ tuntun.',
+'dberr-cachederror' => 'Àwòkọ ojúewé tí ẹ tọrọ nìyí láti cache, ó le mọ́ jẹ́ tuntun.',
 
 # HTML forms
+'htmlform-invalid-input' => 'Díẹ̀ nínú ìtẹ̀kọsínú yín ní ìsòro',
 'htmlform-select-badoption' => 'Iye tí ẹ tọ́kasí kì í ṣe àṣàyàn tótọ́.',
 'htmlform-int-invalid' => 'Iye tí ẹ tọ́kasí kì í ṣe nọ́mbà odidi.',
 'htmlform-float-invalid' => 'Iye tí ẹ tọ́kasí kì í ṣe nọ́mbà.',
+'htmlform-int-toolow' => 'Iye tí ẹ tọ́kasí kéré ju $1 tó yẹ kó kéréjùlọ',
+'htmlform-int-toohigh' => 'Iye tí ẹ tọ́kasí pọ̀ ju $1 tó yẹ kó pọ̀jùlọ',
 'htmlform-required' => 'Iye yìí ṣe dandan',
 'htmlform-submit' => 'Fúnsílẹ̀',
 'htmlform-reset' => 'Ìdápadà àwọn àtúnṣe',
 'htmlform-selectorother-other' => 'Òmíràn',
 
+# SQLite database support
+'sqlite-has-fts' => '$1 pẹ̀lú àtìlẹ́yìn àwárí ìkọ̀rọ̀ kíkún',
+'sqlite-no-fts' => '$1 láìní àtìlẹ́yìn àwárí ìkọ̀rọ̀ kíkún',
+
 # New logging system
 'logentry-delete-delete' => '$1 pa ojúewé $3 rẹ́',
 'logentry-delete-restore' => '$1 dá ojúewé $3 padà',
+'logentry-delete-event' => '$1 ṣe àyípadà ìhànsí {{PLURAL:$5|ìṣẹ̀lẹ̀ àkọọ́lẹ̀ kan|àwọn ìṣẹ̀lẹ̀ àkọọ́lẹ̀ $5}} lórí $3: $4',
+'logentry-delete-revision' => '$1 ṣe àyípadà ìhànsí {{PLURAL:$5|àtúnyẹ̀wò kan|àwọn àtúnyẹ̀wò $5}} lórí $3: $4',
+'logentry-delete-event-legacy' => '$1 ṣe àyípadà ìhànsí àwọn ìṣẹ̀lẹ̀ àkọọ́lẹ̀ lórí $3',
+'logentry-delete-revision-legacy' => '$1 ṣe àyípadà ìhànsí àwọn àtúnyẹ̀wò lórí ojúewé $3',
 'logentry-suppress-delete' => '$1 fi ojúewé $3 sílẹ̀',
+'logentry-suppress-event' => '$1 ṣe àyípadà ìhànsí {{PLURAL:$5|ìṣẹ̀lẹ̀ àkọọ́lẹ̀ kan|àwọn ìṣẹ̀lẹ̀ àkọọ́lẹ̀ $5}} níkọ̀kọ̀rọ̀ lórí $3: $4',
+'logentry-suppress-revision' => '$1 ṣe àyípadà ìhànsí {{PLURAL:$5|àtúnyẹ̀wò kan|àwọn àtúnyẹ̀wò $5}} níkọ̀kọ̀rọ̀ lórí $3: $4',
+'logentry-suppress-event-legacy' => '$1 ṣe àyípadà ìhànsí àwọn ìṣẹ̀lẹ̀ àkọọ́lẹ̀ lórí $3 níkọ̀kọ̀rọ̀',
+'logentry-suppress-revision-legacy' => '$1 ṣe àyípadà ìhànsí àwọn àtúnyẹ̀wò lórí ojúewé $3 níkọ̀kọ̀rọ̀',
 'revdelete-content-hid' => 'ìbòmọ́lẹ̀ àkóónú',
 'revdelete-summary-hid' => 'ìbòmọ́lẹ̀ àkótán àtúnṣe',
 'revdelete-uname-hid' => 'ìbòmọ́lẹ̀ orúkọ oníṣe',
 'revdelete-content-unhid' => 'àìbòmọ́lẹ̀ àkóónú',
 'revdelete-summary-unhid' => 'àìbòmọ́lẹ̀ àkótán àtúnṣe',
+'revdelete-uname-unhid' => 'orúkọ oníṣe kò pamọ́',
+'revdelete-restricted' => 'ṣe ìmúlò ìpàlà fún àwọn olúmójútó',
+'revdelete-unrestricted' => 'yọ ìpàlà fún àwọn olúmójútó',
 'logentry-move-move' => '$1 ṣeyípòdà ojúewé $3 sí $4',
 'logentry-move-move-noredirect' => '$1 ṣeyípòdà ojúewé $3 sí $4 láìfi àtúnjúwe sílẹ̀',
 'logentry-move-move_redir' => '$1 ṣeyípòdà ojúewé $3 sí $4 lórí àtúnjúwe',
 'logentry-move-move_redir-noredirect' => '$1 ṣeyípòdà ojúewé $3 sí $4 lórí àtúnjúwe láìfi àtúnjúwe sílẹ̀',
+'logentry-patrol-patrol' => '$1 ṣe àmí àtúnyẹ̀wò $4 ojúewé $3 bíi sísọ́',
 'logentry-patrol-patrol-auto' => '$1 fúnraẹni ṣàmì àtúnyẹ̀wò $4 ti ojúewé $3 bíi síṣọ́',
-'logentry-newusers-newusers' => "$1 ṣ'èdá àpamọ́ oníṣe",
-'logentry-newusers-create' => "$1 ṣ'èdá àpamọ́ oníṣe",
-'logentry-newusers-create2' => "$1 ṣ'èdá àpamọ́ oníṣe $3",
+'logentry-newusers-newusers' => 'Àpamọ́ oníṣe $1 jẹ́ dídá',
+'logentry-newusers-create' => 'Àpamọ́ oníṣe $1 jẹ́ dídá',
+'logentry-newusers-create2' => 'Àpamọ́ oníṣe $3 jẹ́ dídá látọwọ́ $1',
 'logentry-newusers-autocreate' => 'Àkópamọ́ $1 jẹ́ dídá fúnrarẹ̀',
-'newuserlog-byemail' => 'ọ̀rọ̀ìpamọ́ jẹ́ fífiránṣẹ́ pẹ̀lú e-mail',
+'logentry-rights-rights' => '$1 yí ìjọ́mọ ẹgbẹ́ padà fún $3 láti $4 sí $5',
+'logentry-rights-rights-legacy' => '$1 yí ìjọ́mọ ẹgbẹ́ padà fún $3',
+'logentry-rights-autopromote' => '$1 jẹ́ gbígbéga nífúnraẹni láti $4 sí $5',
+'rightsnone' => '(kòsí)',
 
 # Feedback
+'feedback-bugornote' => 'Tí ẹ bá ti ṣetán láti ṣàlàyé ìsòrò iṣẹ́ẹ̀rọ́ lẹ́ẹ̀kúnrẹ́rẹ́ ẹ jọ̀wọ́ [$1 ẹ sọ irú ìsòro náà]
+Bíbẹ̀ẹ̀kọ́, ẹ le lo fọ́ọ̀mù ìsàlẹ̀. Ẹjọ́ yín yíò jẹ́ fífikún mọ́ ojúewé "[$3 $2]", bákannáà mọ́ orúkọ oníṣe yín.',
 'feedback-subject' => 'Oríọ̀rọ̀:',
 'feedback-message' => 'Ìránṣẹ́:',
 'feedback-cancel' => 'Fagilé',
+'feedback-submit' => 'Ìfisílẹ̀ ìdáhùn',
+'feedback-adding' => 'Ìfikún ìdáhùn sí ojúewé...',
 'feedback-error1' => 'Àsìṣe: Èsì aláìdámọ́ látọ̀dọ̀ API',
 'feedback-error2' => 'Àsìṣe: Àtúnṣe kùnà',
 'feedback-error3' => 'Àsìṣe: Kò sí ìdáhùn látọ̀dọ̀ API',
+'feedback-thanks' => 'Adúpẹ́! Ìdáhùn yín ti jẹ́ fífikún sí ojúewé "[$2 $1]".',
 'feedback-close' => 'Ṣetán',
+'feedback-bugcheck' => 'Ó dáa bẹ́ẹ̀! Ẹ rí pé kò í ṣe ìkan nínú [$1 àwọn ìsòrò tí a ti mọ̀ tẹ́lẹ̀].',
+'feedback-bugnew' => 'Mo ti yẹ́wò. Fi ìsòrò sùn',
 
 # Search suggestions
 'searchsuggest-search' => 'Ṣàwárí',
 'searchsuggest-containing' => 'tó ní...',
 
 # API errors
+'api-error-badaccess-groups' => 'Ẹ kò ní àṣẹ láti ru fáìlì wọlé sí orí wiki yìí.',
+'api-error-badtoken' => 'Àsìṣe inú: Ìdáramọ̀ búburú.',
+'api-error-copyuploaddisabled' => 'Ìrùsókè pẹ̀lú URL jẹ́ dídálẹ́kun lórí ẹ̀rọ-ìpèsè yìí.',
+'api-error-duplicate' => '{{PLURAL:$1|[$2 Fáìlì míràn]|[$2 Àwọn fáìlì míràn]}} kan tilẹ̀ wà lórí ibiìtàkùn pẹ̀lú àkóónú kannáà.',
+'api-error-duplicate-archive' => '{{PLURAL:$1|[$2 Fáìlì míràn]|[$2 Àwọn fáìlì míràn]}} kan tilẹ̀ wà lórí ibiìtàkùn pẹ̀lú àkóónú kannáà, sùgbọ́n {{PLURAL:$1|ó|wọ́n}} ti jẹ́ píparẹ́.',
+'api-error-duplicate-archive-popup-title' => '{{PLURAL:$1|Fáìlì àdáwòkọ tó ti|Àwọn fáìlì àdáwòkọ tí wọ́n ti}} jẹ́ píparẹ́.',
+'api-error-duplicate-popup-title' => '{{PLURAL:$1|Fáìlì|Àwọn fáìlì}} àdáwòkọ.',
+'api-error-empty-file' => 'Fáílì tí ẹ fisílẹ̀ jẹ́ òfo.',
+'api-error-emptypage' => 'Ẹ kò ní àyè láti dá ojúewé tuntun tó jẹ́ òfo.',
+'api-error-fetchfileerror' => 'Àsìṣe inú: Kò le mú fáìlì ná jáde nítorí àsìṣe.',
+'api-error-fileexists-forbidden' => 'Fáìlì kan wà pẹ̀lú orúkọ "$1", kò ṣe é kọlélórí.',
+'api-error-fileexists-shared-forbidden' => 'Fáìlì kan wà pẹ̀lú orúkọ "$1" nínú ibi àkójọsí fáìlì, kò ṣe é kọlélórí.',
+'api-error-file-too-large' => 'Fáílì tí ẹ fisílẹ̀ jẹ́ tí tóbijù.',
 'api-error-filename-tooshort' => 'Orúkọ fáílì kéréjú bó ṣe yẹ lọ.',
+'api-error-filetype-banned' => 'Irú fáílì yìí ti jẹ́ dídí lọ́nà.',
+'api-error-filetype-banned-type' => '$1 {{PLURAL:$4|kíì ṣe|kìí ṣe àwọn}} irú fáìlì tí à gbàláyè. {{PLURAL:$3|Irú fáìlì|Àwọn irú fáìlì}} tí à gbàláyè ni $2.',
+'api-error-filetype-missing' => 'Orúkọ fáìlì kò ní ìfàgùn.',
+'api-error-hookaborted' => 'Ìtúndáṣe tí ẹ fẹ́ ṣe ti jẹ́ dídálẹ́kun látọwọ́ ìfàgùn.',
+'api-error-http' => 'Àsìṣe inú: Ìfarakan ẹ̀rọ-ìpèsè kò ṣe é ṣe.',
+'api-error-illegal-filename' => 'Orúkọ fáílì yìí kò jẹ́ gbígbàláàyè.',
+'api-error-internal-error' => 'Àsìṣe inú: Wàhálà wáyé láti ṣe ìgbéṣe ìrùsókè yín lórí wiki yìí.',
+'api-error-invalid-file-key' => 'Àsìṣe inú: Fáìlì kò sí nínú ibi ìfipamọ́ ìgbàdíẹ̀.',
+'api-error-missingparam' => 'Àsìṣe inú: Kò sí pàrámítà tó tọrọ.',
+'api-error-missingresult' => 'Àsìṣe inú: Kò le sọ bóyá àwòkọ yọrí sí rere.',
+'api-error-mustbeloggedin' => 'Ẹ gbọ́dọ̀ wọlé láti ru fáìlì sókè.',
+'api-error-mustbeposted' => 'Àsìṣe inú: Ìtọrọ bèèrè fún HTTP POST.',
+'api-error-noimageinfo' => 'Ìrùsòkè jásí rere, sùgbọ́n ẹ̀rọ-ìpèsè kò sọ ohùn kankan nípa fáìlì ọ̀hún.',
+'api-error-nomodule' => 'Àsìṣe inú: Ẹyọ ìrùsókè kankan kò sí.',
+'api-error-ok-but-empty' => 'Àsìṣe inú: Kò sí ìdáhùn látọwọ́ ẹ̀rọ-ìpèsè.',
+'api-error-overwrite' => 'Ìkọlélórí fáìlì tó wà kò jẹ́ gbígbà ní àyè.',
+'api-error-stashfailed' => 'Àsìṣe inú: Ẹ̀rọ-ìpèsè kùnà láti fi fáìlì ìgbàdíẹ̀ pamọ́.',
+'api-error-timeout' => 'Ẹ̀rọ-ìpèsè kò dáhùn ní àrin àsìkò tó yẹ.',
+'api-error-unclassified' => 'Àsìṣe àìdámọ̀ kan ti ṣẹlẹ̀.',
 'api-error-unknown-code' => 'Àsìṣe aláìlójúùtú: "$1".',
+'api-error-unknown-error' => 'Àsìṣe inú: Àsìṣe ṣẹlẹ̀ láti ṣe ìrùsókè fáìlì yín.',
+'api-error-unknown-warning' => 'Ìkìlọ̀ àìmọ̀: "$1".',
 'api-error-unknownerror' => 'Àsìṣe aláìlójúùtú: "$1".',
+'api-error-uploaddisabled' => 'Ìdálẹ́kun ìrùsókè lórí wiki yìí.',
+'api-error-verification-error' => 'Fáìlì náà le ti bàjẹ́, tàbí ó ní ìfàgún tí kò yẹ.',
 
 # Durations
 'duration-seconds' => '{{PLURAL:$1|ìṣẹ́júkejì|ìṣẹ́júkejì}} $1',
@@ -3000,5 +3629,8 @@ Tóbájẹ́pé fáìlì ọ̀hún ti jẹ́ títúnṣe sí bóṣewà ní bẹ
 'duration-days' => '{{PLURAL:$1|ọjọ́|ọjọ́}} $1',
 'duration-weeks' => '{{PLURAL:$1|ọ̀sẹ̀|ọ̀sẹ̀}} $1',
 'duration-years' => '{{PLURAL:$1|ọdún|ọdún}} $1',
+'duration-decades' => '{{PLURAL:$1|ẹ̀wàdún|ẹ̀wàdún}} $1',
+'duration-centuries' => '{{PLURAL:$1|ọ̀rúndún|ọ̀rúndún}} $1',
+'duration-millennia' => '{{PLURAL:$1|ẹ̀rúndún|ẹ̀rúndún}} $1',
 
 );
index c161856..88383e9 100644 (file)
@@ -8,6 +8,7 @@
  * @file
  *
  * @author Horacewai2
+ * @author Justincheng12345
  * @author Kaganer
  * @author KaiesTse
  * @author Mark85296341
@@ -803,8 +804,7 @@ $1',
 '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}}}} 搵有關嘅日誌]</span>。',
+'noarticletext-nopermission' => '呢一頁而家冇任何文字,你可以喺其它嘅頁面中[[Special:Search/{{PAGENAME}}|搵呢一頁嘅標題]],或者<span class="plainlinks">[{{fullurl:{{#Special:Log}}|page={{FULLPAGENAMEE}}}} 搵有關嘅日誌]</span>。',
 'userpage-userdoesnotexist' => '用戶戶口"<nowiki>$1</nowiki>"重未開。請響䦒/編輯呢版之前先檢查一下。',
 'userpage-userdoesnotexist-view' => '用戶戶口"$1"重未開。',
 'blocked-notice-logextract' => '呢位用戶而家被封鎖緊。
@@ -880,7 +880,6 @@ $1',
 'template-semiprotected' => '(半保護)',
 'hiddencategories' => '呢一版係屬於$1個隱藏類嘅成員:',
 'edittools' => '<!-- 喺呢度嘅文字會喺編輯框下面同埋上載表格中顯示。 -->',
-'nocreatetitle' => '頁面建立被限制',
 'nocreatetext' => '{{SITENAME}}已經限制咗起新版嘅能力。
 你可以番轉頭去編輯一啲已經存在嘅頁面,或者[[Special:UserLogin|登入或開個新戶口]]。',
 'nocreate-loggedin' => '你並無許可權去開新版。',
@@ -1092,7 +1091,7 @@ $1",
 'mergelogpagetext' => '下面係一個最近由一版嘅修訂記錄合併到另一個嘅一覽。',
 
 # Diffs
-'history-title' => '"$1"嘅修訂歷史',
+'history-title' => '「$1」嘅修訂歷史',
 'difference-multipage' => '(版之間嘅差異)',
 'lineno' => '第$1行:',
 'compareselectedversions' => '比較被選嘅修訂',
@@ -1173,7 +1172,7 @@ $1",
 
 # Preferences page
 'preferences' => '喜好設定',
-'mypreferences' => '安排與架生',
+'mypreferences' => '自訂喜好',
 'prefs-edits' => '編輯數:',
 'prefsnologin' => '重未登入',
 'prefsnologintext' => '你一定要去<span class="plainlinks">[{{fullurl:{{#Special:UserLogin}}|returnto=$1}} 登入]</span>設定好用戶喜好值先。',
@@ -1393,11 +1392,13 @@ $1",
 'right-override-export-depth' => '倒出包含有五層深連版嘅頁面',
 'right-sendemail' => '寄電郵畀其他用戶',
 
+# Special:Log/newusers
+'newuserlogpage' => '使用者開戶記錄',
+'newuserlogpagetext' => '呢個係一個使用者開戶嘅日誌',
+
 # User rights log
 'rightslog' => '用戶權限日誌',
 'rightslogtext' => '呢個係用戶權力嘅修改日誌。',
-'rightslogentry' => '已經將$1嘅組別從$2改到去$3',
-'rightsnone' => '(無)',
 
 # Associated actions - in the sentence "You do not have permission to X"
 'action-read' => '讀呢版',
@@ -1857,7 +1858,7 @@ Template:搞清楚',
 'listusers-editsonly' => '只顯示有編輯嘅用戶',
 'listusers-creationsort' => '按建立日期排序',
 'usereditcount' => '$1次編輯',
-'usercreated' => '響$1 $2建立',
+'usercreated' => '響$1 $2{{GENDER:$3|建立}}',
 'newpages' => '新頁',
 'newpages-username' => '用戶名:',
 'ancientpages' => '舊頁面',
@@ -1947,10 +1948,6 @@ Template:搞清楚',
 'activeusers-hidesysops' => '隱藏管理員',
 'activeusers-noresult' => '搵唔到用戶。',
 
-# Special:Log/newusers
-'newuserlogpage' => '使用者開戶記錄',
-'newuserlogpagetext' => '呢個係一個使用者開戶嘅日誌',
-
 # Special:ListGroupRights
 'listgrouprights' => '用戶組權限',
 'listgrouprights-summary' => '下面係一個響呢個wiki定義咗嘅用戶權限一覽,同埋佢哋嘅存取權。
@@ -2063,6 +2060,8 @@ wiki: $PAGEEDITOR_WIKI
 
 回饋及更多幫助:
 {{canonicalurl:{{MediaWiki:Helppage}}}}',
+'created' => '建立過',
+'changed' => '修改過',
 
 # Delete
 'deletepage' => '刪除頁面',
@@ -2227,7 +2226,7 @@ $1',
 'blanknamespace' => '(主)',
 
 # Contributions
-'contributions' => '用戶貢獻',
+'contributions' => '{{GENDER:$1|用戶}}貢獻',
 'contributions-title' => '$1嘅用戶貢獻',
 'mycontris' => '個人貢獻',
 'contribsub2' => '$1嘅貢獻 ($2)',
@@ -2317,7 +2316,7 @@ $1',
 'ipusubmit' => '拎走呢個封鎖',
 'unblocked' => '"[[User:$1|$1]]"已經解封',
 'unblocked-id' => '$1嘅封鎖已經拎走咗',
-'ipblocklist' => 'IP地址同用戶名阻止名單',
+'ipblocklist' => '封咗嘅用戶',
 'ipblocklist-legend' => '搵一位封咗嘅用戶',
 'ipblocklist-submit' => '搵',
 'ipblocklist-localblock' => '本地封鎖',
@@ -2804,7 +2803,7 @@ Variants for Chinese language
 'metadata-help' => '呢個檔案有額外嘅資料。佢應該係數碼相機或者掃描器整出來嘅。如果佢整咗之後畀人改過,裏面嘅資料未必同改過之後相符。',
 'metadata-expand' => '打開詳細資料',
 'metadata-collapse' => '收埋詳細資料',
-'metadata-fields' => '響呢個信息列出嘅 EXIF 元數據項目會喺圖像頁中包含起嚟,而且個元數據表除咗喺下面列出嘅項目之外,其它嘅項目預設會被隱藏。
+'metadata-fields' => '響呢個信息列出嘅EXIF元數據項目會喺圖像頁中包含起嚟,而且個元數據表除咗喺下面列出嘅項目之外,其它嘅項目預設會隱藏。
 * make
 * model
 * datetimeoriginal
@@ -3363,7 +3362,7 @@ MediaWiki是基於使用目的而加以發佈,但係就唔會負上任何嘅
 # New logging system
 'revdelete-restricted' => '已經應用限制到操作員',
 'revdelete-unrestricted' => '已經拎走對於操作員嘅限制',
-'newuserlog-byemail' => '密碼已由電郵寄出',
+'rightsnone' => '(無)',
 
 # Search suggestions
 'searchsuggest-search' => '搵嘢',
index 7ce17b5..78f4279 100644 (file)
@@ -651,7 +651,6 @@ Opslaene is nie meuhlijk.'''",
 'template-protected' => '(beveiligd)',
 'template-semiprotected' => '(semi-beveiligd)',
 'hiddencategories' => 'Deêze pagina val in de volhende verborhen {{PLURAL:$1|categorie|categorieën}}:',
-'nocreatetitle' => "'t Anmaeken van pagina's is beperkt",
 'nocreatetext' => "{{SITENAME}} ei de meuhlijkeid om nieuwe pagina's an te maeken beperkt.
 Je kan a bestaende pagina's wiezigen, of je kan [[Special:UserLogin|jen eihen anmelden of een gebruker  anmaeken]].",
 'nocreate-loggedin' => "Je kan hin nieuwe pagina's anmaeken.",
@@ -943,11 +942,12 @@ Een nie anekruusd vienkvakje beteêken da de gebruker hin lid is van de hroep.",
 'grouppage-bureaucrat' => "{{ns:project}}:Bureaucraot'n",
 'grouppage-suppress' => '{{ns:project}}:Toezicht',
 
+# Special:Log/newusers
+'newuserlogpage' => 'Logboek nuwe gebrukers',
+
 # User rights log
 'rightslog' => 'Gebrukersrechtenlogboek',
 'rightslogtext' => 'Ieronder staen de wiezigiengen in gebrukersrechen.',
-'rightslogentry' => 'wiezihen de gebrukersrechen voe $1 van $2 ni $3',
-'rightsnone' => '(hin)',
 
 # Associated actions - in the sentence "You do not have permission to X"
 'action-edit' => 'deêze bladzie te bewerken',
@@ -1116,9 +1116,6 @@ Also see [[Special:WantedCategories|wanted categories]].',
 # Special:LinkSearch
 'linksearch-line' => "$1 ei 'n verwiezienge in $2",
 
-# Special:Log/newusers
-'newuserlogpage' => 'Logboek nuwe gebrukers',
-
 # Special:ListGroupRights
 'listgrouprights-members' => '(ledenlieste)',
 
@@ -1400,5 +1397,6 @@ Aorre veld'n worr'n verborr'n.
 # New logging system
 'revdelete-restricted' => 'ei beperkiengen an beheêrders opeleid',
 'revdelete-unrestricted' => 'ei beperkiengen voe beheêrders opeheven',
+'rightsnone' => '(hin)',
 
 );
diff --git a/languages/messages/MessagesZh_classical.php b/languages/messages/MessagesZh_classical.php
deleted file mode 100644 (file)
index a58df39..0000000
+++ /dev/null
@@ -1,14 +0,0 @@
-<?php
-
-/** Classical Chinese (文言)
- *
- * See MessagesQqq.php for message documentation incl. usage of parameters
- * To improve a translation please visit http://translatewiki.net
- *
- * @ingroup Language
- * @file
- *
- */
-
-# Inherit everything for now
-$fallback = 'lzh';
index 0d3d157..c426b82 100644 (file)
@@ -7,14 +7,17 @@
  * @ingroup Language
  * @file
  *
+ * @author A911504820
  * @author Alebcay
  * @author Anakmalaysia
+ * @author Arlin
  * @author Bencmq
  * @author Biŋhai
  * @author Breawycker
  * @author Chenxiaoqino
  * @author Chenzw
  * @author Chinalace
+ * @author Cicku
  * @author Dimension
  * @author Dingyuang
  * @author Fantasticfears
@@ -43,6 +46,7 @@
  * @author Onecountry
  * @author PhiLiP
  * @author Shinjiman
+ * @author Shirayuki
  * @author Shizhao
  * @author Simon Shek
  * @author Supaiku
@@ -111,7 +115,7 @@ $namespaceAliases = array(
 
 $specialPageAliases = array(
        'Activeusers'               => array( '活跃用户' ),
-       'Allmessages'               => array( '所有息' ),
+       'Allmessages'               => array( '所有息' ),
        'Allpages'                  => array( '所有页面' ),
        'Ancientpages'              => array( '最早页面' ),
        'Badtitle'                  => array( '无效标题' ),
@@ -156,6 +160,7 @@ $specialPageAliases = array(
        'MIMEsearch'                => array( 'MIME搜索' ),
        'Mostcategories'            => array( '最多分类页面' ),
        'Mostimages'                => array( '最多链接文件' ),
+       'Mostinterwikis'            => array( '最多跨wiki链接页面' ),
        'Mostlinked'                => array( '最多链接页面' ),
        'Mostlinkedcategories'      => array( '最多链接分类' ),
        'Mostlinkedtemplates'       => array( '最多链接模板' ),
@@ -185,10 +190,10 @@ $specialPageAliases = array(
        'Statistics'                => array( '统计信息' ),
        'Tags'                      => array( '标签' ),
        'Unblock'                   => array( '解除封禁' ),
-       'Uncategorizedcategories'   => array( 'æ\97 分类分类' ),
-       'Uncategorizedimages'       => array( 'æ\97 分类文件' ),
-       'Uncategorizedpages'        => array( 'æ\97 分类页面' ),
-       'Uncategorizedtemplates'    => array( 'æ\97 分类模板' ),
+       'Uncategorizedcategories'   => array( 'æ\9cª分类分类' ),
+       'Uncategorizedimages'       => array( 'æ\9cª分类文件' ),
+       'Uncategorizedpages'        => array( 'æ\9cª分类页面' ),
+       'Uncategorizedtemplates'    => array( 'æ\9cª分类模板' ),
        'Undelete'                  => array( '恢复被删页面' ),
        'Unlockdb'                  => array( '解除数据库锁定' ),
        'Unusedcategories'          => array( '未使用分类' ),
@@ -356,7 +361,7 @@ $messages = array(
 'tog-editsection' => '启用[编辑]链接编辑段落',
 'tog-editsectiononrightclick' => '启用右击段落标题编辑段落(需要JavaScript)',
 'tog-showtoc' => '显示目录(对于有多于3个标题的页面)',
-'tog-rememberpassword' => '在浏览器上记住我的登录状态(最长$1天)',
+'tog-rememberpassword' => '在该浏览器保存我的登录状态(最长$1日)',
 'tog-watchcreations' => '添加我创建的页面和上传的文件至我的监视列表',
 'tog-watchdefault' => '添加我编辑的页面和文件至我的监视列表',
 'tog-watchmoves' => '将我移动的页面和文件添加到我的监视列表',
@@ -375,7 +380,7 @@ $messages = array(
 'tog-externaleditor' => '默认使用外部编辑器(供高级用户使用,需要在您的计算机上作出一些特别设置。[//www.mediawiki.org/wiki/Manual:External_editors 更多信息。])',
 'tog-externaldiff' => '默认使用外部差异分析(供高级用户使用,需要在您的计算机上作出一些特别设置。[//www.mediawiki.org/wiki/Manual:External_editors 更多信息。])',
 'tog-showjumplinks' => '启用“跳转到”访问链接',
-'tog-uselivepreview' => '使用实时预览(需要Javascript)(试验中)',
+'tog-uselivepreview' => '使用实时预览(需要JavaScript)(实验功能)',
 'tog-forceeditsummary' => '未输入编辑摘要时提醒我',
 'tog-watchlisthideown' => '在监视列表中隐藏我的编辑',
 'tog-watchlisthidebots' => '在监视列表中隐藏机器人的编辑',
@@ -476,6 +481,7 @@ $messages = array(
 'newwindow' => '(将于新窗口中打开)',
 'cancel' => '取消',
 'moredotdotdot' => '更多',
+'morenotlisted' => '更多未被列出的模板...',
 'mypage' => '页面',
 'mytalk' => '讨论',
 'anontalk' => '该IP地址的讨论',
@@ -607,10 +613,10 @@ $1',
 'youhavenewmessages' => '你有$1($2)。',
 'newmessageslink' => '新信息',
 'newmessagesdifflink' => '最后更改',
-'youhavenewmessagesfromusers' => '你有来自{{PLURAL:$3| 另一位用户| $3位用户}}的$1($2)。',
-'youhavenewmessagesmanyusers' => 'ä½ æ\9c\89æ\9d¥è\87ªå¤\9aä½\8d用户的$1($2)。',
+'youhavenewmessagesfromusers' => '你有来自{{PLURAL:$3|其他用户|$3个用户}}的$1($2)。',
+'youhavenewmessagesmanyusers' => 'ä½ æ\9c\89æ\9d¥è\87ªå¤\9a个用户的$1($2)。',
 'newmessageslinkplural' => '{{PLURAL:$1|一条新信息|新信息}}',
-'newmessagesdifflinkplural' => '最新更改',
+'newmessagesdifflinkplural' => '最后{{PLURAL:$1|更改}}',
 'youhavenewmessagesmulti' => '你在$1有新信息',
 'editsection' => '编辑',
 'editold' => '编辑',
@@ -735,8 +741,8 @@ $2',
 执行锁定的管理员给出如下解释:$3。',
 'invalidtitle-knownnamespace' => '使用名字空间“$2”和文本“$3”的无效标题',
 'invalidtitle-unknownnamespace' => '使用未知名字空间编号$1和文本“$2”的无效标题',
-'exception-nologin' => '未登',
-'exception-nologin-text' => '此动作需要先登陆到此 wiki',
+'exception-nologin' => '未登',
+'exception-nologin-text' => '该页面或操作需要你登录至本wiki。',
 
 # Virus scanner
 'virus-badscanner' => "错误的配置:未知的病毒扫描程序:''$1''",
@@ -748,15 +754,14 @@ $2',
 
 您可以继续以匿名方式使用{{SITENAME}},或再次以相同或不同用户身份<span class='plainlinks'>[$1 登录]</span>。请注意一些页面可能仍然显示您为登录状态,直到您清空您的浏览器缓存为止。",
 'welcomeuser' => '欢迎,$1!',
-'welcomecreation-msg' => '你的账户已创建。
-请别忘记更改你的[[Special:Preferences|{{SITENAME}}参数设置]]。',
+'welcomecreation-msg' => '你的账户已创建。请不要忘记更改你的[[Special:Preferences|{{SITENAME}}系统设置]]。',
 'yourname' => '用户名:',
 'yourpassword' => '密码:',
 'yourpasswordagain' => '再次输入密码:',
-'remembermypassword' => '在此浏览器上保留我的登录信息(最长$1{{PLURAL:$1|日|日}})',
-'securelogin-stick-https' => '登陆后继续使用 HTTPS 连接',
+'remembermypassword' => '在该浏览器保存我的登录状态(最长$1日)',
+'securelogin-stick-https' => '登录后继续使用HTTPS连接',
 'yourdomainname' => '您的域名:',
-'password-change-forbidden' => '您不能更改此wiki上的密码。',
+'password-change-forbidden' => '你不能在本wiki更改密码。',
 'externaldberror' => '这可能是由于验证数据库错误或您被禁止更新您的外部账号。',
 'login' => '登录',
 'nav-login-createaccount' => '登录/创建账户',
@@ -772,24 +777,23 @@ $2',
 'gotaccount' => '已经拥有账户?请$1。',
 'gotaccountlink' => '登录',
 'userlogin-resetlink' => '忘记了你的登录信息?',
-'createaccountmail' => '通过电子邮件',
+'createaccountmail' => '使用一个临时的随机密码,并将它发送到以下指定的电子邮件地址',
 'createaccountreason' => '原因:',
 'badretype' => '您所输入的密码并不相同。',
-'userexists' => '用户名已存在请使用其他名称。',
+'userexists' => '用户名已存在请使用其他名称。',
 'loginerror' => '登录错误',
 'createaccounterror' => '无法建立账户:$1',
-'nocookiesnew' => '已成功创建新账户!侦测到您已关闭Cookies,请开启它并登录。',
-'nocookieslogin' => '本站利用Cookies进行用户登录,侦测到您已关闭Cookies,请开启它并重新登录。',
-'nocookiesfornew' => '这位用户的账户未建立,我们不能确认它的来源。
-请肯定您已经开启 cookies,重载后再试。',
-'noname' => '你没有输入有效的用户名。',
+'nocookiesnew' => '本用户账户已被创建,但登录失败。{{SITENAME}}使用cookie登录。你已停用cookie。请启用cookie,然后使用你的新用户名和密码登录。',
+'nocookieslogin' => '{{SITENAME}}使用cookie登录。你已停用cookie。请启用cookie后重试。',
+'nocookiesfornew' => '本用户账户未被创建,我们不能确认它的来源。请确保你已启用cookie,刷新本页后重试。',
+'noname' => '你没有指定有效的用户名。',
 'loginsuccesstitle' => '登录成功',
 'loginsuccess' => "'''“$1”,欢迎登录{{SITENAME}}。'''",
-'nosuchuser' => 'æ\89¾ä¸\8då\88°ç\94¨æ\88·â\80\9c$1â\80\9dã\80\82ç\94¨æ\88·å\90\8dæ\98¯å¤§å°\8få\86\99æ\95\8fæ\84\9fä¸\94å\8cºå\88\86ç¹\81ç®\80ä½\93ç\9a\84ã\80\82请æ£\80æ\9f¥æ\82¨ç\9a\84æ\8b¼å\86\99ï¼\8cæ\88\96è\80\85[[Special:UserLogin/signup|建ç«\8bä¸\80个新账户]]。',
-'nosuchusershort' => '没有名为“$1”的用户。请检查您输入的文字是否有错误。',
-'nouserspecified' => '你需要指定一个用户名。',
+'nosuchuser' => '没æ\9c\89å\90\8d为â\80\9c$1â\80\9dç\9a\84ç\94¨æ\88·ã\80\82ç\94¨æ\88·å\90\8då\8cºå\88\86大å°\8få\86\99ã\80\82请æ£\80æ\9f¥ä½ ç\9a\84æ\8b¼å\86\99æ\88\96[[Special:UserLogin/signup|å\88\9b建新账户]]。',
+'nosuchusershort' => '没有名为“$1”的用户。请检查你的拼写。',
+'nouserspecified' => '你必须指定用户名。',
 'login-userblocked' => '该用户已被封禁,禁止登录。',
-'wrongpassword' => '您输入的密码错误,请再试一次。',
+'wrongpassword' => '你输入的密码错误。请重试。',
 'wrongpasswordempty' => '您没有输入密码,请重试!',
 'passwordtooshort' => '您的密码至少需要$1个字符。',
 'password-name-match' => '您的密码必须和您的用户名不相同。',
@@ -807,13 +811,13 @@ $2',
 'noemailcreate' => '您需要提供一个有效的电子邮件地址',
 'passwordsent' => '用户"$1"的新密码已经寄往所登记的电子邮件地址。
 请在收到后再登录。',
-'blocked-mailpassword' => '您的IP地址已被禁止编辑,同时为了防止密码恢复功能被滥用,亦已禁用该功能。',
+'blocked-mailpassword' => '你的IP地址被禁止编辑,为预防滥用,密码恢复功能也被禁止使用。',
 'eauthentsent' => '一封确认信已经发送到推荐的地址。在发送其它邮件到此账户前,您必须首先依照这封信中的指导确认这个电子邮箱真实有效。',
 'throttled-mailpassword' => '密码提醒已在最近$1小时内发送。为了安全起见,在每$1小时内只能发送一个密码提醒。',
 'mailerror' => '发送邮件错误:$1',
-'acct_creation_throttle_hit' => '抱歉!您已经创建了$1个账号。你不能再创建了。',
+'acct_creation_throttle_hit' => '使用你的IP地址访问本wiki的访客在过去24小时中创建了{{PLURAL:$1|$1个账户}},达到了这段时间所允许的最大值。因此,使用该IP地址的访客现在不能再创建账户。',
 'emailauthenticated' => '您的电子邮箱地址已经于$2 $3确认有效。',
-'emailnotauthenticated' => '您的邮箱地址<strong>还没被认证</strong>。以下功能将不会发送任何邮件。',
+'emailnotauthenticated' => '你的电子邮件地址未确认。你不会接收到以下任何特性的电子邮件。',
 'noemailprefs' => '指定一个电子邮箱地址以使用此功能。',
 'emailconfirmlink' => '确认您的邮箱地址',
 'invalidemailaddress' => '邮箱地址格式不正确,请输入正确的邮箱地址或清空该输入框。',
@@ -826,15 +830,15 @@ $2',
 
 如果该账户创建错误的话,您可以忽略此信息。',
 'usernamehasherror' => '用户名中不可包含哈希(hash)字符',
-'login-throttled' => '您已经尝试多次的登录动作。
-请稍等多一会再试。',
-'login-abort-generic' => '登入失败 - 放弃',
+'login-throttled' => '你最近尝试登录的次数过多。请稍后重试。',
+'login-abort-generic' => '登录失败 - 已终止',
 'loginlanguagelabel' => '语言:$1',
-'suspicious-userlogout' => '登出要求被拒绝,因为它似乎是由有设计缺陷的浏览器或缓存代理发出的。',
+'suspicious-userlogout' => '注销请求被拒绝,因为它似乎是由有设计缺陷的浏览器或缓存代理发出的。',
 
 # E-mail sending
 'php-mail-error-unknown' => '在 PHP 的 mail() 函数中的未知错误',
 'user-mail-no-addy' => '尝试发送邮件而不附带电子邮件地址。',
+'user-mail-no-body' => '试图发送空的或者主体短得不合理的电子邮件。',
 
 # Change password dialog
 'resetpass' => '更改密码',
@@ -855,7 +859,7 @@ $2',
 
 # Special:PasswordReset
 'passwordreset' => '重置密码',
-'passwordreset-text' => '完成此表格以接收一个电邮以提示你的帐户详情。',
+'passwordreset-text' => '完成该表格以接收你账户信息的邮件提醒。',
 'passwordreset-legend' => '重置密码',
 'passwordreset-disabled' => '此wiki已经禁用密码重置。',
 'passwordreset-pretext' => '{{PLURAL:$1||输入下面的数据块之一}}',
@@ -865,16 +869,16 @@ $2',
 'passwordreset-capture-help' => '如果您选中此框,电子邮件(包括临时密码)将显示,并发送给用户。',
 'passwordreset-email' => '电子邮件地址:',
 'passwordreset-emailtitle' => '在 {{SITENAME}} 的帐户详细信息',
-'passwordreset-emailtext-ip' => '有人通过IP地址 $1 (也许是你)要求获取 {{SITENAME}} ($4)上相关账户的密码提示。{{PLURAL:$3|以下账户|此账户}}与该email地址关联:
+'passwordreset-emailtext-ip' => '有人通过IP地址 $1 (可能是您)请求获取 {{SITENAME}} ($4)上相关账户的密码提示。{{PLURAL:$3|以下账户|此账户}}与该电子邮件地址关联:
 
 $2
 
-{{PLURAL:$3|è¿\99个|è¿\99äº\9b}}临æ\97¶å¯\86ç \81ä¼\9aå\9c¨{{PLURAL:$5|ä¸\80天|$5 å¤©}}å\86\85è¿\87æ\9c\9fã\80\82请ç\8e°å\9c¨ç\99»å\85¥å¹¶è®¾ç½®æ\96°ç\9a\84å¯\86ç \81ã\80\82å¦\82æ\9e\9c请æ±\82æ\98¯å\85¶ä»\96人æ\8f\90å\87ºç\9a\84ï¼\8cæ\88\96è\80\85æ\82¨è®°èµ·ä½ ç\9a\84æ\97§å¯\86ç \81并ä¸\8då\86\8dé\9c\80è¦\81æ\9b´æ\94¹ï¼\8cæ\82¨å\8f¯ä»¥æ\97 è§\86æ\9c¬æ\9d¡æ¶\88æ\81¯å¹¶ç»§ç»­ä½¿ç\94¨æ\97§æ\9c\89密码。',
-'passwordreset-emailtext-user' => 'ç\94¨æ\88· $1 è¦\81æ±\82è\8e·å\8f\96 {{SITENAME}} ($4)ä¸\8aä½ ç\9a\84è´¦æ\88·ç\9a\84å¯\86ç \81æ\8f\90示ã\80\82{{PLURAL:$3|以ä¸\8bè´¦æ\88·|此账æ\88·}}ä¸\8e该email地址关联:
+{{PLURAL:$3|è¿\99个|è¿\99个}}临æ\97¶å¯\86ç \81å°\86ä¼\9aå\9c¨{{PLURAL:$5|ä¸\80天|$5 å¤©}}å\90\8eè¿\87æ\9c\9fã\80\82请ç«\8bå\8d³ç\99»å½\95并设置æ\96°ç\9a\84å¯\86ç \81ã\80\82å¦\82æ\9e\9c请æ±\82æ\98¯å\85¶ä»\96人å\8f\91å\87ºç\9a\84ï¼\8cæ\88\96è\80\85æ\82¨å·²å\9b\9eå¿\86èµ·æ\82¨ç\9a\84æ\97§å¯\86ç \81并ä¸\8då\86\8dé\9c\80è¦\81æ\9b´æ\94¹ï¼\8cæ\82¨å\8f¯ä»¥å¿½ç\95¥æ\9c¬æ\9d¡æ¶\88æ\81¯å¹¶ç»§ç»­ä½¿ç\94¨å\8e\9f密码。',
+'passwordreset-emailtext-user' => 'ç\94¨æ\88· $1 è¯·æ±\82è\8e·å\8f\96 {{SITENAME}} ($4)ä¸\8aæ\82¨ç\9a\84è´¦æ\88·ç\9a\84å¯\86ç \81æ\8f\90示ã\80\82{{PLURAL:$3|以ä¸\8bè´¦æ\88·|此账æ\88·}}ä¸\8e该ç\94µå­\90é\82®ä»¶地址关联:
 
 $2
 
-{{PLURAL:$3|è¿\99个|è¿\99äº\9b}}临æ\97¶å¯\86ç \81ä¼\9aå\9c¨{{PLURAL:$5|ä¸\80天|$5 å¤©}}å\86\85è¿\87æ\9c\9fã\80\82请ç\8e°å\9c¨ç\99»å\85¥å¹¶è®¾ç½®æ\96°ç\9a\84å¯\86ç \81ã\80\82å¦\82æ\9e\9c请æ±\82æ\98¯å\85¶ä»\96人æ\8f\90å\87ºç\9a\84ï¼\8cæ\88\96è\80\85æ\82¨è®°èµ·ä½ ç\9a\84æ\97§å¯\86ç \81并ä¸\8då\86\8dé\9c\80è¦\81æ\9b´æ\94¹ï¼\8cæ\82¨å\8f¯ä»¥æ\97 è§\86æ\9c¬æ\9d¡æ¶\88æ\81¯å¹¶ç»§ç»­ä½¿ç\94¨æ\97§æ\9c\89密码。',
+{{PLURAL:$3|è¿\99个|è¿\99个}}临æ\97¶å¯\86ç \81å°\86ä¼\9aå\9c¨{{PLURAL:$5|ä¸\80天|$5 å¤©}}å\90\8eè¿\87æ\9c\9fã\80\82请ç«\8bå\8d³ç\99»å½\95并设置æ\96°ç\9a\84å¯\86ç \81ã\80\82å¦\82æ\9e\9c请æ±\82æ\98¯å\85¶ä»\96人å\8f\91å\87ºç\9a\84ï¼\8cæ\88\96è\80\85æ\82¨å·²å\9b\9eå¿\86èµ·æ\82¨ç\9a\84æ\97§å¯\86ç \81并ä¸\8då\86\8dé\9c\80è¦\81æ\9b´æ\94¹ï¼\8cæ\82¨å\8f¯ä»¥å¿½ç\95¥æ\9c¬æ\9d¡æ¶\88æ\81¯å¹¶ç»§ç»­ä½¿ç\94¨å\8e\9f密码。',
 'passwordreset-emailelement' => '用户名:$1
 临时密码:$2',
 'passwordreset-emailsent' => '已发送提醒电子邮件。',
@@ -887,10 +891,11 @@ $2
 'changeemail-text' => '完成此窗体可以更改您的电子邮件地址。您将需要输入您的密码以确认此更改。',
 'changeemail-no-info' => '
 您必须登录以直接访问本页。',
-'changeemail-oldemail' => 'å½\93å\89\8dç\9a\84ç\94µå­\90é\82®ä»¶å\9c°å\9d\80ï¼\9a',
+'changeemail-oldemail' => '当前电子邮件地址:',
 'changeemail-newemail' => '新的电子邮件地址:',
 'changeemail-none' => '(无)',
-'changeemail-submit' => '更改电子邮箱',
+'changeemail-password' => '你的{{SITENAME}}密码:',
+'changeemail-submit' => '更改电子邮件地址',
 'changeemail-cancel' => '取消',
 
 # Edit page toolbar
@@ -906,7 +911,9 @@ $2
 'headline_tip' => '2级标题文字',
 'nowiki_sample' => '在此插入非格式文本',
 'nowiki_tip' => '插入非格式文本',
+'image_sample' => '范例.jpg',
 'image_tip' => '插入文件',
+'media_sample' => '范例.ogg',
 'media_tip' => '文件链接',
 'sig_tip' => '带时间戳的签名',
 'hr_tip' => '水平线(请小心使用)',
@@ -926,31 +933,35 @@ $2
 'anonpreviewwarning' => "''您没有登录。保存页面将会把您的IP地址记录在此页的编辑历史中。''",
 'missingsummary' => "'''提示:'''你没有提供编辑摘要。如果你再次点击“{{int:savearticle}}”,你的编辑将不带编辑摘要保存。",
 'missingcommenttext' => '请在下面输入评论。',
-'missingcommentheader' => "'''提示:''' 您没有为此评论提供一个标题。如果您再次单击“{{int:savearticle}}”,您的编辑将不带标题保存。",
+'missingcommentheader' => "'''提示:''' 您还没有为此评论提供一个标题。如果您再次点击“{{int:savearticle}}”,您的编辑将不带标题保存。",
 'summary-preview' => '摘要预览:',
 'subject-preview' => '标题预览:',
 'blockedtitle' => '用户被封禁',
-'blockedtext' => "'''的用户名或IP地址已被封禁。'''
+'blockedtext' => "'''的用户名或IP地址已被封禁。'''
 
­¤æ¬¡å°\81ç¦\81æ\93\8dä½\9cç\94±$1å®\8cæ\88\90ï¼\8cå°\81ç¦\81å\8e\9få\9b ä¸º''$2''。
\89§è¡\8cå°\81ç¦\81ç\9a\84管ç\90\86å\91\98æ\98¯$1ã\80\82å°\81ç¦\81å\8e\9få\9b æ\98¯''$2''。
 
-* 始时间:$8
-* 终止时间:$6
-* 拟封禁对象:$7
+* 始时间:$8
+* 到期时间:$6
+* 目标用户:$7
 
-您可以联系$1或其他的[[{{MediaWiki:Grouppage-sysop}}|管理员]]讨论此次封禁。若您已在[[Special:Preferences|帐号设置]]中配置了一个有效的电子邮件地址,且未被封禁电子邮件功能,则您可通过“发送电子邮件给这位用户”功能来联络相关管理员。您当前的IP地址是$3,此次封禁的ID为#$5。请在您的查询中注明上述所有信息。",
-'autoblockedtext' => "您的IP地址因与另一位已封禁用户相同而被自动封禁,该用户是由$1封禁的。封禁原因如下
+你可以联系$1或其他[[{{MediaWiki:Grouppage-sysop}}|管理员]]讨论该封禁。只有当你在[[Special:Preferences|系统设置]]确认了电子邮件地址且未被禁止使用“电邮联系”功能时,才可以使用它。你当前的IP地址是$3,该封禁ID是#$5。请在你的询问中包含上面的所有信息。",
+'autoblockedtext' => "你的IP地址因曾被一位被$1封禁的用户使用而被自动封禁。封禁原因
 
 :''$2''
 
-* 始时间:$8
-* 终止时间:$6
-* 拟封禁对象:$7
+* 始时间:$8
+* 到期时间:$6
+* 目标用户:$7
 
-您可以联系$1或其他的[[{{MediaWiki:Grouppage-sysop}}|管理员]]讨论此次封禁。若您已在[[Special:Preferences|帐号设置]]中配置了一个有效的电子邮件地址,且未被封禁电子邮件功能,则您可通过“发送电子邮件给这位用户”功能来联络相关管理员。您当前的IP地址是$3,此次封禁的ID为#$5。请在您的查询中注明上述所有信息。",
+你可以联系$1或其他[[{{MediaWiki:Grouppage-sysop}}|管理员]]讨论该封禁。
+
+请注意,只有当你在[[Special:Preferences|系统设置]]确认了电子邮件地址且未被禁止使用“电邮联系”功能时,才可以使用它。
+
+你当前的IP地址是$3,该封禁ID是#$5。请在你的询问中包含上面的所有信息。",
 'blockednoreason' => '无给出原因',
 'whitelistedittext' => '您必须先$1才可编辑页面。',
-'confirmedittext' => '你必须确认你的电子邮件地址才能编辑本页。请通过[[Special:Preferences|用户资料设置]]设置并确认你的电子邮件地址。',
+'confirmedittext' => '你必须确认你的电子邮件地址才能编辑页面。请通过[[Special:Preferences|系统设置]]设置并确认你的电子邮件地址。',
 'nosuchsectiontitle' => '没有这个段落',
 'nosuchsectiontext' => '您尝试编辑的章节并不存在。
 可能是在您查看页面时已经移动或删除。',
@@ -971,56 +982,46 @@ $2
 
 这通常是因为进入了一个已被删除的页面的历史链接。
 详细信息可以在[{{fullurl:{{#Special:Log}}/delete|page={{FULLPAGENAMEE}}}} 删除日志]中找到。',
-'userpage-userdoesnotexist' => '用户账户"$1"未注册。
-请在创建/编辑该页之前进行核对。',
+'userpage-userdoesnotexist' => '用户账户“$1”没有注册。请在创建/编辑本页前检查。',
 'userpage-userdoesnotexist-view' => '用户账户“$1”未曾创建。',
 'blocked-notice-logextract' => '这位用户目前已被封禁。以下提供最近的封禁日志以供参考:',
 'clearyourcache' => "'''注意:'''保存之后,你必须清除浏览器缓存才能看到做出的更改。
 * '''火狐(Firefox)/Safari:'''按住“Shift”,同时单击“刷新”,或按“Ctrl-F5”或“Ctrl-R”(Mac为“⌘-R”)
-* '''谷歌浏览器(Google Chrome):'''按“Ctrl-Shift-R”(Mac为“⌘-Shift-R”)
+* '''Google Chrome:'''按“Ctrl-Shift-R”(Mac为“⌘-Shift-R”)
 * '''Internet Explorer:'''按住“Ctrl”,同时单击“刷新”,或按“Ctrl-F5”
 * '''Opera:'''在“工具→首选项”中清除缓存",
 'usercssyoucanpreview' => "'''提示:''' 在保存前请用“{{int:showpreview}}”按钮来测试您新的 CSS 。",
 'userjsyoucanpreview' => "'''提示:''' 在保存前请用“{{int:showpreview}}”按钮来测试您新的 JavaScript 。",
-'usercsspreview' => "'''记住您只是在预览您的个人 CSS。'''
-'''还没有保存!'''",
-'userjspreview' => "'''记住您只是在测试/预览您的个人 JavaScript。'''
-'''还没有保存!'''",
-'sitecsspreview' => "'''记住你现在只是预览此 CSS。'''
-'''还没有保存!'''",
-'sitejspreview' => "'''记住你现在只是预览此 JavaScript 代码。'''
-'''还没有保存!'''",
+'usercsspreview' => "'''请记住你现在只是在预览你的用户CSS。它尚未保存!'''",
+'userjspreview' => "'''请记住你现在只是在测试/预览你的用户JavaScript。它尚未保存!'''",
+'sitecsspreview' => "'''请记住你现在只是在预览该CSS。它尚未保存!'''",
+'sitejspreview' => "'''请记住你现在只是在预览该JavaScript代码。它尚未保存!'''",
 'userinvalidcssjstitle' => "'''警告:''' 不存在皮肤\"\$1\"。注意自定义的 .css 和 .js 页要使用小写标题,例如,{{ns:user}}:Foo/vector.css 不同于 {{ns:user}}:Foo/Vector.css。",
 'updated' => '(已更新)',
 'note' => "'''注意:'''",
 'previewnote' => "'''请记住这仅为预览。'''您的更改还未保存!",
 'continue-editing' => '往编辑框',
-'previewconflict' => 'è¿\99个é¢\84è§\88æ\98¾ç¤ºäº\86ä¸\8aé\9d¢æ\96\87å­\97ç¼\96è¾\91å\8cºä¸­ç\9a\84å\86\85容ã\80\82å®\83å°\86å\9c¨ä½ é\80\89æ\8b©ä¿\9då­\98å\90\8eå\87ºç\8e°。',
-'session_fail_preview' => "'''抱歉!由于会话数据丢失,我们不能处理你的编辑。'''请重试。如果再次失败,请尝试[[Special:UserLogout|退出]]后重新登录。",
-'session_fail_preview_html' => "'''抱歉!我们不能处理你在进程数据丢失时的编辑。'''
+'previewconflict' => '该é¢\84è§\88å\8f\8dæ\98 äº\86ä¸\8aé\9d¢æ\96\87å­\97ç¼\96è¾\91å\8cºä¸­ç\9a\84æ\96\87å­\97å\9c¨ä½ ä¿\9då­\98å\90\8eç\9a\84æ\98¾ç¤ºç\8a¶å\86µ。',
+'session_fail_preview' => "'''对不起!由于会话数据丢失,我们无法处理你的编辑。'''请重试。如果仍然失败,请尝试[[Special:UserLogout|退出登录]]后重新登录。",
+'session_fail_preview_html' => "'''对不起!由于会话数据丢失,我们无法处理你的编辑。'''
 
-''由于{{SITENAME}}允许使用原始的 HTML,为了防范 JavaScript 攻击,预览已被隐藏。''
+''因为{{SITENAME}}已启用原始HTML,为了预防JavaScript攻击,预览被隐藏。''
 
-'''å¦\82æ\9e\9cè¿\99æ\98¯ä¸\80次å\90\88æ³\95ç\9a\84ç¼\96è¾\91ï¼\8c请é\87\8dæ\96°è¿\9bè¡\8cå°\9dè¯\95ã\80\82'''å¦\82æ\9e\9cè¿\98ä¸\8dè¡\8cï¼\8c请[[Special:UserLogout|é\80\80å\87º]]并重新登录。",
+'''å¦\82æ\9e\9c该ç¼\96è¾\91å°\9dè¯\95å\90\88æ³\95ï¼\8c请é\87\8dè¯\95ã\80\82'''å¦\82æ\9e\9cä»\8dç\84¶å¤±è´¥ï¼\8c请å°\9dè¯\95[[Special:UserLogout|é\80\80å\87ºç\99»å½\95]]å\90\8e重新登录。",
 'token_suffix_mismatch' => "'''由于您用户端中的编辑令牌毁损了一些标点符号字元,您的编辑已经被拒绝。'''
 此次编辑被拒绝以防止页面文本损坏。
 这种情况通常在您使用含有故障的网页式匿名代理服务的时候出现。",
-'edit_form_incomplete' => "'''编辑表单的某些部分没有到达服务器 ;请检查您的编辑内容是否完整并再试一次。'''",
+'edit_form_incomplete' => "'''编辑表格的某些部分没有到达服务器,请检查你的编辑是否完整并重试。'''",
 'editing' => '编辑“$1”',
 'creating' => '创建 $1',
 'editingsection' => '编辑“$1”(段落)',
 'editingcomment' => '编辑“$1”(新段落)',
 'editconflict' => '编辑冲突:$1',
-'explainconflict' => "有人在你开始编辑后更改了页面。
-上面的文字框内显示的是目前本页的内容。
-你所做的修改显示在下面的文字框中。
-你应当将你所做的修改加入现有的内容中。
-'''只有'''在上面文字框中的内容会在你点击“{{int:savearticle}}”后被保存。",
+'explainconflict' => "其他用户在你开始编辑后更改了该页面。上面的文字区含有该页面当前的文字。下面的文字区显示你的更改。你必须把你的更改合并至现有文字。'''只有'''当你单击“{{int:savearticle}}”后,上面的文字区中的文字才会被保存。",
 'yourtext' => '你的文字',
 'storedversion' => '已保存的版本',
 'nonunicodebrowser' => "'''警告:您的浏览器不兼容Unicode编码。'''这里有一个工作区将使您能安全地编辑页面:非ASCII字符将以十六进制编码方式出现在编辑框中。",
-'editingold' => "'''警告:你正在编辑的是本页的旧版本。'''
-如果你保存它的话,在本版本之后的任何修改都会丢失。",
+'editingold' => "'''警告:你正在编辑的是本页面的旧版本。'''如果你保存该编辑,该版本后的所有更改都会丢失。",
 'yourdiff' => '差异',
 'copyrightwarning' => "请注意您对{{SITENAME}}的所有贡献都被认为是在$2下发布,请查看在$1的细节。
 如果您不希望您的文字被任意修改和再散布,请不要提交。<br />
@@ -1033,7 +1034,7 @@ $2
 '''不要在未获授权的情况下发表!'''",
 'longpageerror' => "'''错误:您所提交的文本长度有{{PLURAL:$1|1|$1}}KB,这大于{{PLURAL:$2|1|$2}}KB的最大值。'''
 因此,该文本无法保存。",
-'readonlywarning' => "'''警告:数据库被锁定以进行维护,所以您目前将无法保存您的修改。'''您或许希望将本段文字先复制并保存到文本文件,并在稍后进行修改。
+'readonlywarning' => "警告:数据库被锁定以进行维护,所以您目前将无法保存您的修改。'''您或许希望将本段文字先剪贴并保存到文本文件,并在稍后进行修改。
 
 锁定数据库的管理员有如下解释:$1",
 'protectedpagewarning' => "'''警告:本页面已被保护,只有拥有管理员权限的用户可以编辑。'''下面提供最后的日志条目以供参考:",
@@ -1047,8 +1048,7 @@ $2
 'template-semiprotected' => '(半保护)',
 'hiddencategories' => '本页面属于$1个隐藏分类:',
 'edittools' => '<!-- 这里的文字将显示在编辑和上传表格下面。 -->',
-'nocreatetitle' => '创建页面受限',
-'nocreatetext' => '{{SITENAME}}限制了创建新页面的功能。你可以返回并编辑已有的页面,或者[[Special:UserLogin|登录或创建新账户]]。',
+'nocreatetext' => '{{SITENAME}}已经限制创建新页面功能。你可以返回编辑现有页面或[[Special:UserLogin|登录或创建账户]]。',
 'nocreate-loggedin' => '你没有权限创建新页面。',
 'sectioneditnotsupported-title' => '段落编辑不支持',
 'sectioneditnotsupported-text' => '本页面不支持段落编辑。',
@@ -1065,7 +1065,7 @@ $2
 'edit-gone-missing' => '不能更新页面。
 它可能刚刚被删除。',
 'edit-conflict' => '编辑冲突。',
-'edit-no-change' => '您的编辑已经略过,因为文字无任何改动。',
+'edit-no-change' => '因为没有文字更改,你的编辑已被忽略。',
 'edit-already-exists' => '不可以建立一个新页面。
 它已经存在。',
 'defaultmessagetext' => '默认消息文本',
@@ -1102,10 +1102,10 @@ $2
 'converter-manual-rule-error' => '手动语言转换规则中检测到错误',
 
 # "Undo" feature
-'undo-success' => '此编辑可以被撤销。请检查以下比较以核实这正是您想做的,然后保存以下更改完成撤销编辑。',
+'undo-success' => '该编辑可以被撤销。请检查下面的对比以核实你想要撤销的内容,然后保存下面的更改以完成撤销。',
 'undo-failure' => '因存在冲突的中间编辑,本编辑不能撤销。',
 'undo-norev' => '由于其修订版本不存在或已删除,此编辑不能撤销。',
-'undo-summary' => '撤销由[[Special:Contributions/$2|$2]]([[User talk:$2|讨论]])所作出的修订$1',
+'undo-summary' => '撤销[[Special:Contributions/$2|$2]]([[User talk:$2|讨论]])的版本$1',
 
 # Account creation failure
 'cantcreateaccounttitle' => '无法创建账户',
@@ -1131,7 +1131,7 @@ $3的理由是''$2''",
 'histlegend' => "差异选择:选出需要对比的版本,按“回车键”或下方的按钮进行对比。<br />
 说明:'''({{int:cur}})'''=与最后版本之间的差异,'''({{int:last}})'''=与上一版本之间的差异,'''{{int:minoreditletter}}'''=小编辑。",
 'history-fieldset-title' => '浏览历史',
-'history-show-deleted' => '仅删除的',
+'history-show-deleted' => '仅删除的',
 'histfirst' => '最早',
 'histlast' => '最后',
 'historysize' => '($1字节)',
@@ -1154,9 +1154,8 @@ $3的理由是''$2''",
 'rev-suppressed-text-unhide' => "该页面修订已经被'''监督隐藏'''。在[{{fullurl:{{#Special:Log}}/suppress|page={{FULLPAGENAMEE}}}} 监督日志]中可以找到详细的信息。如果您想继续的话,您可以仍然[$1 去查看这次修订]。",
 'rev-deleted-text-view' => "本页面版本已被'''删除'''。你可以查看它,详情请见[{{fullurl:{{#Special:Log}}/delete|page={{FULLPAGENAMEE}}}} 删除日志]。",
 'rev-suppressed-text-view' => "该页面修订已经被'''监督隐藏'''。您可以查看它。在[{{fullurl:{{#Special:Log}}/suppress|page={{FULLPAGENAMEE}}}} 监督日志]中可以找到详细的信息。",
-'rev-deleted-no-diff' => "因为其中一次修订已被'''删除''',您不可以查看这个差异。
-在[{{fullurl:{{#Special:Log}}/delete|page={{FULLPAGENAMEE}}}} 删除日志]中可以找到更多的信息。",
-'rev-suppressed-no-diff' => "该页面的其中一次修订已经被'''删除''',你不可以查看这次的修订。",
+'rev-deleted-no-diff' => "你不能查看该差异,因为其中一个版本已被'''删除'''。详情请见[{{fullurl:{{#Special:Log}}/delete|page={{FULLPAGENAMEE}}}} 删除日志]。",
+'rev-suppressed-no-diff' => "你不能查看该差异,因为其中一个版本已被'''删除'''。",
 'rev-deleted-unhide-diff' => "该差异对比其中的一个修订版本已经被'''删除'''。在[{{fullurl:{{#Special:Log}}/delete|page={{FULLPAGENAMEE}}}} 删除日志]中可以找到更多的信息。如果您想继续的话,您仍然可以[$1 查看这次修订]。",
 'rev-suppressed-unhide-diff' => "该页面的其中一次修订已经被'''监督隐藏'''。
 在[{{fullurl:{{#Special:Log}}/suppress|page={{FULLPAGENAMEE}}}} 监督日志]中可以找到更多的资料。如果您想继续的话,您可以仍然[$1 去查看这次修订]。",
@@ -1173,16 +1172,17 @@ $3的理由是''$2''",
 'revdelete-nologid-title' => '无效的日志项目',
 'revdelete-nologid-text' => '您尚未指定一个目标日志项目去进行这个动作或指定的项目不存在。',
 'revdelete-no-file' => '指定的文件不存在。',
-'revdelete-show-file-confirm' => '你是否真的要查看文件“<nowiki>$1</nowiki>”在$2 $3时的已删除修订?',
+'revdelete-show-file-confirm' => '确定要查看文件“<nowiki>$1</nowiki>”于$2$3被删除的版本吗?',
 'revdelete-show-file-submit' => '是',
 'revdelete-selected' => "'''选取'''[[:$1]]'''的$2次修订:'''",
 'logdelete-selected' => "'''{{PLURAL:$1|选取的日志项目}}:'''",
 'revdelete-text' => "'''删除的修订仍将显示在页面历史中, 但它们的文本内容已不能被公众访问。'''
 在{{SITENAME}}的其他管理员将仍能访问隐藏的内容并通过与此相同的界面恢复删除,除非站点工作者进行了一些附加的限制。",
 'revdelete-confirm' => '请确认您肯定去做的话,您就要明白到后果,以及这个程序符合[[{{MediaWiki:Policy-url}}|政策]]。',
-'revdelete-suppress-text' => "'''只有'''出现以下的情况下才应阻止访问:
-* 不合适的个人信息
-*: ''家庭地址、电话号码、身份证号码等。''",
+'revdelete-suppress-text' => "阻止应该'''只'''在以下情形使用:
+*潜在的诽谤信息
+*不合适的个人信息
+*:''家庭地址、电话号码和社保号码等。''",
 'revdelete-legend' => '设置可见性之限制',
 'revdelete-hide-text' => '隐藏版本文字',
 'revdelete-hide-image' => '隐藏文件内容',
@@ -1236,7 +1236,7 @@ $1",
 'mergehistory-from' => '来源页面:',
 'mergehistory-into' => '目的页面:',
 'mergehistory-list' => '可以合并的编辑历史',
-'mergehistory-merge' => '以下[[:$1]]的修订可以合并到[[:$2]]。用该选项按钮列去合并只有在指定时间以前所创建的修订。要留意的是使用导航链接便会重设这一栏。',
+'mergehistory-merge' => '以下[[:$1]]的版本可以合并至[[:$2]]。请使用单选按钮列以合并至在指定时间及之前创建的版本。请注意,使用导航链接会重置该列。',
 'mergehistory-go' => '显示可以合并的编辑',
 'mergehistory-submit' => '合并版本',
 'mergehistory-empty' => '没有可以合并的版本。',
@@ -1322,7 +1322,7 @@ $1",
 'showingresults' => "下面显示从第'''$2'''条结果开始的'''$1'''条结果。",
 'showingresultsnum' => "下面显示从第'''$2'''条结果开始的'''$3'''条结果。",
 'showingresultsheader' => "关于'''$4'''的{{PLURAL:$5|第'''$1'''条至第'''$3'''条结果|第'''$1'''条至第'''$2'''条结果,共'''$3'''条结果}}",
-'nonefound' => "'''注意''':只有部分名字空间的页面会被默认搜索。尝试在您的搜索语句前添加“all:”前缀,这样可以搜索全部页面(包括讨论页、模板等),或者亦可使用所需名字空间作为前缀。",
+'nonefound' => "'''注意''':只有某些名字空间被默认搜索。请尝试给你的搜索内容添加前缀“all:”以搜索全部内容(包括讨论页面、模板等)或使用期望的名字空间作为前缀。",
 'search-nonefound' => '找不到和查询相匹配的结果。',
 'powersearch' => '高级搜索',
 'powersearch-legend' => '高级搜索',
@@ -1348,7 +1348,7 @@ $1",
 'preferences' => '系统设置',
 'mypreferences' => '系统设置',
 'prefs-edits' => '编辑数量:',
-'prefsnologin' => '未登录',
+'prefsnologin' => '未登录',
 'prefsnologintext' => '您必须先<span class="plainlinks">[{{fullurl:{{#Special:UserLogin}}|returnto=$1}} 登录]</span>才能设置个人参数。',
 'changepassword' => '更改密码',
 'prefs-skin' => '皮肤',
@@ -1388,7 +1388,7 @@ $1",
 'recentchangescount' => '默认显示的编辑数:',
 'prefs-help-recentchangescount' => '该项包含最近更改、页面历史和日志。',
 'prefs-help-watchlist-token' => '此栏填写的密钥可以生成您监视列表的RSS源。任何知晓本栏密钥的人都能阅读您的监视列表,因此请使用安全的数值。这里已提供了一个随机生成的数值供您选择:$1',
-'savedprefs' => '你的系统设置已保存。',
+'savedprefs' => '你的系统设置已保存。',
 'timezonelegend' => '时区:',
 'localtime' => '当地时间:',
 'timezoneuseserverdefault' => '使用wiki默认值($1)',
@@ -1421,7 +1421,7 @@ $1",
 'youremail' => '电子邮件:',
 'username' => '{{GENDER:$1|用户名}}:',
 'uid' => '{{GENDER:$1|用户}}ID:',
-'prefs-memberingroups' => '{{PLURAL:$1|用户组}}:',
+'prefs-memberingroups' => '{{GENDER:$2|用户}}{{PLURAL:$1|组}}:',
 'prefs-registration' => '注册时间:',
 'yourrealname' => '真实姓名:',
 'yourlanguage' => '语言:',
@@ -1478,7 +1478,7 @@ $1",
 'userrights-no-interwiki' => '您并没有权限去编辑在其它wiki上的用户权限。',
 'userrights-nodatabase' => '数据库$1不存在或并非为本地的。',
 'userrights-nologin' => '您必须要以管理员帐户[[Special:UserLogin|登录]]之后才可以指定用户权限。',
-'userrights-notallowed' => '您的帐户无权限添加或删除用户权限。',
+'userrights-notallowed' => '你的账户没有权限添加或删除用户权限。',
 'userrights-changeable-col' => '你可以更改的用户组',
 'userrights-unchangeable-col' => '你不能更改的用户组',
 
@@ -1568,15 +1568,13 @@ $1",
 'right-sendemail' => '电邮联系其他用户',
 'right-passwordreset' => '查看密码重置电子邮件',
 
+# Special:Log/newusers
+'newuserlogpage' => '用户创建日志',
+'newuserlogpagetext' => '这是用户创建的日志。',
+
 # User rights log
 'rightslog' => '用户权限日志',
 'rightslogtext' => '这是用户权限更改的日志。',
-'rightslogentry' => '将$1的用户组由$2更改为$3',
-'rightslogentry-autopromote' => '被自动提升自$2至$3',
-'logentry-rights-rights' => '$1将$3的用户组从$4改为$5',
-'logentry-rights-rights-legacy' => '$1更改$3的用户组',
-'logentry-rights-autopromote' => '$1的用户组已自动从$4改为$5',
-'rightsnone' => '(无)',
 
 # Associated actions - in the sentence "You do not have permission to X"
 'action-read' => '阅读本页',
@@ -1646,8 +1644,8 @@ $1",
 'rc_categories' => '分类限制(用“|”分隔)',
 'rc_categories_any' => '任意',
 'rc-change-size-new' => '更改后$1字节',
-'newsectionsummary' => '/* $1 */ 新段落',
-'rc-enhanced-expand' => '显示细节(需JavaScript支持)',
+'newsectionsummary' => '/*$1*/新段落',
+'rc-enhanced-expand' => '显示细节(需要JavaScript)',
 'rc-enhanced-hide' => '隐藏细节',
 'rc-old-title' => '最初被创建为" $1 "',
 
@@ -1735,12 +1733,10 @@ $1",
 'fileexists-thumbnail-yes' => "此文件可能是另一幅图像的缩小版本''(缩略图)''。 [[$1|thumb]]
 请仔细检查该文件<strong>[[:$1]]</strong>。
 如果被检查文件与原始大小的图像是同一幅图像,您无需上传多余的缩略图。",
-'file-thumbnail-no' => "文件名以<strong>$1</strong>开头。它可能是另一幅图像的缩小版本''(缩略图)''。
-如果你有该图像完整分辨率的版本,请上传该完整版本。否则请修改文件名。",
+'file-thumbnail-no' => "文件名以<strong>$1</strong>开始。它似乎是缩小的图像''(缩略图)''。如果你有完整分辨率的该图像,请上传它,否则请更改文件名。",
 'fileexists-forbidden' => '已存在相同名称的文件,且不能覆盖;请返回并用一个新的名称来上传此文件。[[File:$1|thumb|center|$1]]',
-'fileexists-shared-forbidden' => '在共享文件库中已存在此名称的文件。
-如果你仍然想去上传它的话,请返回并用一个新的名称来上传此文件。[[File:$1|thumb|center|$1]]',
-'file-exists-duplicate' => '这个文件与以下{{PLURAL:$1|一|多}}个文件重复:',
+'fileexists-shared-forbidden' => '共享文件库中存在该名称的文件。如果你仍想上传你的文件,请返回使用其他名称。[[File:$1|thumb|center|$1]]',
+'file-exists-duplicate' => '本文件是以下{{PLURAL:$1|文件}}的副本:',
 'file-deleted-duplicate' => '一个相同名称的文件 ([[:$1]]) 在先前删除过。您应该在重新上传之前检查一下该文件之删除纪录。',
 'uploadwarning' => '上传警告',
 'uploadwarning-text' => '请修改下面的文件说明并重试。',
@@ -1748,10 +1744,10 @@ $1",
 'uploadedimage' => '上传“[[$1]]”',
 'overwroteimage' => '上传“[[$1]]”的新版本',
 'uploaddisabled' => '上传己停用。',
-'copyuploaddisabled' => '通过网址上传功能未开通。',
+'copyuploaddisabled' => 'URL上传已停用。',
 'uploadfromurl-queued' => '上传已被列入队列。',
 'uploaddisabledtext' => '文件上传已停用。',
-'php-uploaddisabledtext' => 'PHP 文件上传已经停用。请检查 file_uploads 设置。',
+'php-uploaddisabledtext' => 'PHP文件上传停用。请检查file_uploads设置。',
 'uploadscripted' => '该文件包含可能被网络浏览器错误解释的 HTML 或脚本代码。',
 'uploadvirus' => '该文件包含病毒!
 详情:$1',
@@ -1839,11 +1835,11 @@ $1',
 不能正确检查安全。',
 
 # Special:UploadStash
-'uploadstash' => '文件贮藏',
+'uploadstash' => '上传隐藏',
 'uploadstash-summary' => '这个页面提供已经上传(或者上传中)但未发布到wiki之文件存取。这些文件除了上传的用户之外不会被其他人可见。',
 'uploadstash-clear' => '清除贮藏文件',
-'uploadstash-nofiles' => '你没有已贮藏的文件。',
-'uploadstash-badtoken' => 'è¿\9bè¡\8cè¿\99个å\8a¨ä½\9cä¸\8dæ\88\90å\8a\9fï¼\8cæ\88\96è\80\85ä½ ç\9a\84ç¼\96è¾\91ä¿¡æ\81¯å·²ç»\8fè¿\87æ\9c\9fã\80\82请å\86\8dè¯\95ã\80\82',
+'uploadstash-nofiles' => '你没有被隐藏的文件。',
+'uploadstash-badtoken' => '该æ\93\8dä½\9cæ\89§è¡\8c失败ï¼\8cå\8f¯è\83½æ\98¯å\9b ä¸ºä½ ç\9a\84ç¼\96è¾\91å\87­è¯\81å·²è¿\87æ\9c\9fã\80\82请é\87\8dè¯\95ã\80\82',
 'uploadstash-errclear' => '清除文件不成功。',
 'uploadstash-refresh' => '更新文件清单',
 'invalid-chunk-offset' => '无效区块偏移量',
@@ -1860,7 +1856,7 @@ $1',
 'img-auth-nofile' => '文件“$1”不存在。',
 'img-auth-isdir' => '您正试图访问目录“$1”。您只能访问文件。',
 'img-auth-streaming' => '流式化“$1”中。',
-'img-auth-public' => 'img_auth.php的功能是从私有wiki输出文件。但本wiki已被设置为公共wiki。出于安全考虑,img_auth.php已被停用。',
+'img-auth-public' => 'img_auth.php的功能是从非公开wiki输出文件。本wiki已被设置为公开。为了最佳安全状况,img_auth.php已停用。',
 'img-auth-noread' => '用户无权读取“$1”。',
 'img-auth-bad-query-string' => 'URL 有一个无效的查询字符串。',
 
@@ -1918,14 +1914,14 @@ $1',
 'filehist-comment' => '评论',
 'filehist-missing' => '文件遗失',
 'imagelinks' => '文件用途',
-'linkstoimage' => '以下的$1个页面链接到本文件:',
+'linkstoimage' => '以下{{PLURAL:$1|页面|$1个页面}}链接至本文件:',
 'linkstoimage-more' => '多于$1个页面连接到这个文件。
 下面的列表只列示了连去这个文件的最首$1个页面。
 一个[[Special:WhatLinksHere/$2|完整的列表]]可以提供。',
 'nolinkstoimage' => '没有页面链接到本文件。',
 'morelinkstoimage' => '查看连接到这个文件的[[Special:WhatLinksHere/$1|更多链接]]。',
 'linkstoimage-redirect' => '$1(文件重定向)$2',
-'duplicatesoffile' => '以下的$1个文件跟这个文件重复([[Special:FileDuplicateSearch/$2|更多细节]]):',
+'duplicatesoffile' => '以下{{PLURAL:$1|文件|$1个文件}}是本文件的副本([[Special:FileDuplicateSearch/$2|更多细节]]):',
 'sharedupload' => '该文件来自于$1,它可能在其它计划项目中被应用。',
 'sharedupload-desc-there' => '该文件来自于$1,它可能在其它计划项目中被应用。
 请参阅在[$2 文件描述页面]以了解其相关信息。',
@@ -1956,8 +1952,8 @@ $1',
 # File deletion
 'filedelete' => '删除$1',
 'filedelete-legend' => '删除文件',
-'filedelete-intro' => "您现正删除文件'''[[Media:$1|$1]]'''。",
-'filedelete-intro-old' => "你现正删除'''[[Media:$1|$1]]'''于[$4 $2 $3]的版本。",
+'filedelete-intro' => "你将要删除文件'''[[Media:$1|$1]]'''及其全部历史。",
+'filedelete-intro-old' => "你正在删除'''[[Media:$1|$1]]'''[$4 $2$3]的版本。",
 'filedelete-comment' => '原因:',
 'filedelete-submit' => '删除',
 'filedelete-success' => "'''$1'''已经删除。",
@@ -1971,7 +1967,7 @@ $1',
 ** 侵犯版权
 ** 重复文件',
 'filedelete-edit-reasonlist' => '编辑删除埋由',
-'filedelete-maintenance' => '当在维护时已经暂时停用文件删除和恢复。',
+'filedelete-maintenance' => '维护期间文件删除和恢复暂时停用。',
 'filedelete-maintenance-title' => '无法删除文件',
 
 # MIME search
@@ -2025,7 +2021,7 @@ $1',
 'disambiguations-text' => "以下的页面都有到'''消歧义页'''的链接,但它们可能可以链接到更适当的页面。<br />一个页面如果使用了[[MediaWiki:Disambiguationspage]]内的模板,则会被视为消歧义页。",
 
 'doubleredirects' => '双重重定向页',
-'doubleredirectstext' => '此页å\88\97å\87ºäº\86æ\89\80æ\9c\89é\87\8då®\9aå\90\91å\88°å\8f¦ä¸\80é\87\8då®\9aå\90\91页é\9d¢ç\9a\84页é\9d¢ã\80\82æ¯\8fä¸\80è¡\8cé\83½å\8c\85å\90«æ\9c\89å\88°ç¬¬ä¸\80å\92\8c第äº\8c个é\87\8då®\9aå\90\91页é\9d¢ç\9a\84é\93¾æ\8e¥ï¼\8c以å\8f\8a第äº\8c个é\87\8då®\9aå\90\91页é\9d¢ç\9a\84ç\9b®æ \87â\80\94â\80\94é\80\9a常就æ\98¯â\80\9cç\9c\9fæ­£ç\9a\84â\80\9dç\9b®æ \87页é\9d¢ï¼\8c亦å\8d³æ\98¯ç¬¬ä¸\80个é\87\8då®\9aå\90\91页é\9d¢åº\94该æ\8c\87å\90\91ç\9a\84页é\9d¢ã\80\82<del>å·²å\88\92å\8e»</del>ç\9a\84为已ç»\8f解å\86³ç\9a\84项ç\9b®。',
+'doubleredirectstext' => 'æ\9c¬é¡µé\9d¢å\88\97å\87ºé\87\8då®\9aå\90\91è\87³å\85¶ä»\96é\87\8då®\9aå\90\91页ç\9a\84页é\9d¢ã\80\82æ¯\8fè¡\8cå\90«æ\9c\89第ä¸\80å\8f\8a第äº\8cé\87\8då®\9aå\90\91ç\9a\84é\93¾æ\8e¥å\92\8c第äº\8cé\87\8då®\9aå\90\91ç\9a\84ç\9b®æ \87ï¼\88é\80\9a常æ\98¯ç¬¬ä¸\80é\87\8då®\9aå\90\91åº\94该æ\8c\87å\90\91ç\9a\84â\80\9cç\9c\9få®\9eâ\80\9dç\9b®æ \87页é\9d¢ï¼\89ã\80\82<del>带å\88 é\99¤çº¿ç\9a\84</del>æ\9d¡ç\9b®å·²è¢«è§£å\86³。',
 'double-redirect-fixed-move' => '[[$1]]已被移动。它现在重定向至[[$2]]。',
 'double-redirect-fixed-maintenance' => '修复双重重定向自[[$1]]至[[$2]]。',
 'double-redirect-fixer' => '重定向页修复器',
@@ -2052,7 +2048,7 @@ $1',
 'nviews' => '$1次浏览',
 'nimagelinks' => '用于$1个页面中',
 'ntransclusions' => '用于$1个页面中',
-'specialpage-empty' => '这个报告的结果为空。',
+'specialpage-empty' => '无该报告的结果。',
 'lonelypages' => '孤立页面',
 'lonelypagestext' => '以下页面尚未被{{SITENAME}}中的其它页面链接或被之包含。',
 'uncategorizedpages' => '未归类页面',
@@ -2110,12 +2106,12 @@ $1',
 'pager-newer-n' => '前$1个',
 'pager-older-n' => '后$1个',
 'suppress' => '监督',
-'querypage-disabled' => 'æ­¤ç\89¹æ®\8a页é\9d¢å\9fºäº\8eæ\95\88è\83½ç\9a\84å\8e\9få\9b å·²ç»\8f被停用。',
+'querypage-disabled' => 'æ\9c¬ç\89¹æ®\8a页é\9d¢å\9b æ\80§è\83½é\97®é¢\98è\80\8c停用。',
 
 # Book sources
 'booksources' => '网络书源',
 'booksources-search-legend' => '搜索网络书源',
-'booksources-isbn' => 'ISBN:',
+'booksources-isbn' => 'ISBN',
 'booksources-go' => '提交',
 'booksources-text' => '以下是一些网络书店的链接列表,其中可能有您要找的书籍的更多信息:',
 'booksources-invalid-isbn' => '提供的ISBN号码并不正确,请检查原始复制来源号码是否有误。',
@@ -2149,7 +2145,7 @@ $1',
 'allpages-hide-redirects' => '隐藏重定向页',
 
 # SpecialCachedPage
-'cachedspecial-viewing-cached-ttl' => 'ä½ æ­£å\9c¨æµ\8fè§\88æ\9c¬é¡µç\9a\84ç¼\93å­\98ç\89\88æ\9c¬ï¼\8cè\87³å¤\9aå\8f¯è\83½å­\98å\9c¨ $1 ç\9a\84延è¿\9f。',
+'cachedspecial-viewing-cached-ttl' => 'ä½ æ­£å\9c¨æ\9f¥ç\9c\8bæ\9c¬é¡µé\9d¢è\87³å°\91$1å\89\8dç\9a\84ç¼\93å­\98ç\89\88æ\9c¬。',
 'cachedspecial-viewing-cached-ts' => '您正浏览此页的缓存版本,不一定是最新的完整版本。',
 'cachedspecial-refresh-now' => '查看最新的。',
 
@@ -2163,8 +2159,8 @@ $1',
 'special-categories-sort-abc' => '按字母排列',
 
 # Special:DeletedContributions
-'deletedcontributions' => '删除的用户贡献',
-'deletedcontributions-title' => '删除的用户贡献',
+'deletedcontributions' => '删除的用户贡献',
+'deletedcontributions-title' => '删除的用户贡献',
 'sp-deletedcontributions-contribs' => '贡献',
 
 # Special:LinkSearch
@@ -2172,8 +2168,8 @@ $1',
 'linksearch-pat' => '搜索网址:',
 'linksearch-ns' => '名字空间:',
 'linksearch-ok' => '搜索',
-'linksearch-text' => 'å\88¶ä½\9cå\8f¯ä»¥ä½¿ç\94¨ç±»ä¼¼â\80\9c*.wikipedia.orgâ\80\9dç\9a\84é\80\9aé\85\8d符ã\80\82å¿\85é¡»è\87³å°\91æ\98¯é¡¶çº§å\9f\9få\90\8dï¼\8cä¾\8bå¦\82â\80\9c*.orgâ\80\9dã\80\82<br />
-支持的协议:<code>$1</code>(如果没有设置协议则默认为<nowiki>http://</nowiki>)。',
+'linksearch-text' => '可以使用类似“*.wikipedia.org”的通配符。必须至少是顶级域名,例如“*.org”。<br />
+支持的{{PLURAL:$2|协议}}:<code>$1</code>(如果没有设置协议则默认为<nowiki>http://</nowiki>)。',
 'linksearch-line' => '$1 链自 $2',
 'linksearch-error' => '通配符仅可在主机名称的开头使用。',
 
@@ -2192,10 +2188,6 @@ $1',
 'activeusers-hidesysops' => '隐藏管理员',
 'activeusers-noresult' => '找不到用户。',
 
-# Special:Log/newusers
-'newuserlogpage' => '用户创建日志',
-'newuserlogpagetext' => '这是用户创建的日志。',
-
 # Special:ListGroupRights
 'listgrouprights' => '用户组权限',
 'listgrouprights-summary' => '以下面是一个在这个wiki中定义出来的用户权限列表,以及它们的访问权。
@@ -2216,17 +2208,17 @@ $1',
 'listgrouprights-removegroup-self-all' => '删除自己的账户的所有用户组',
 
 # E-mail user
-'mailnologin' => '无电地址',
+'mailnologin' => '无电子邮件地址',
 'mailnologintext' => '你必须[[Special:UserLogin|登录]]并在你的[[Special:Preferences|系统设置]]中拥有有效的电子邮件地址才能向其他用户发送电子邮件。',
 'emailuser' => '电邮联系',
 'emailuser-title-target' => '电邮联系该{{GENDER:$1|用户}}',
 'emailuser-title-notarget' => '电邮联系',
 'emailpage' => '电邮联系',
-'emailpagetext' => '你可以使用下面的表单向该用户发送电子邮件消息。你在[[Special:Preferences|你的系统设置]]中输入的电子邮件地址将显示为该邮件的“发件人”地址,所以该用户将可以直接回复你。',
+'emailpagetext' => '你可以使用下面的表格发送电子邮件信息至该{{GENDER:$1|用户}}。你在[[Special:Preferences|系统设置]]中输入的电子邮件地址将显示为邮件的“发件人”地址,所以该用户将可以直接回复你。',
 'usermailererror' => 'Mail 对象返回错误:',
 'defemailsubject' => '{{SITENAME}}来自用户“$1”的电子邮件',
-'usermaildisabled' => '用户电邮已停用',
-'usermaildisabledtext' => '您不可以发送电邮到这个wiki上的其他用户',
+'usermaildisabled' => '用户电子邮件停用',
+'usermaildisabledtext' => '你不能发送电子邮件至本wiki的其他用户',
 'noemailtitle' => '无电子邮件地址',
 'noemailtext' => '该用户还没有指定一个有效的电子邮件地址。',
 'nowikiemailtitle' => '禁止电子邮件',
@@ -2245,7 +2237,7 @@ $1',
 'emailccsubject' => '您发送给$1的消息的副本:$2',
 'emailsent' => '电子邮件已发送',
 'emailsenttext' => '您的电子邮件已经发出。',
-'emailuserfooter' => '这封电邮是由$1寄给$2经{{SITENAME}}的“电邮用户”功能发出的。',
+'emailuserfooter' => '本电子邮件是通过{{SITENAME}}的“电邮联系”功能被$1发送至$2的。',
 
 # User Messenger
 'usermessage-summary' => '留下系统信息。',
@@ -2260,7 +2252,7 @@ $1',
 'watchnologin' => '未登录',
 'watchnologintext' => '您必须先[[Special:UserLogin|登录]]才能更改您的监视列表。',
 'addwatch' => '添加至监视列表',
-'addedwatchtext' => "页面“[[:$1]]”已添加至你的[[Special:Watchlist|监视列表]]。本页面及其讨论页面的新增更改将会列入监视列表,本页面将以'''粗体'''显示在[[Special:RecentChanges|最近更改列表]]中以方便识别。",
+'addedwatchtext' => '页面“[[:$1]]”已添加至你的[[Special:Watchlist|监视列表]]。本页面及其讨论页面的新增更改将会列入监视列表。',
 'removewatch' => '从监视列表中删除',
 'removedwatchtext' => '页面“[[:$1]]”已从[[Special:Watchlist|你的监视列表]]中删除。',
 'watch' => '监视',
@@ -2272,7 +2264,7 @@ $1',
 'watchnochange' => '在显示的时间段内您所监视的页面没有更改。',
 'watchlist-details' => '不计讨论页面,你的监视列表中有$1个页面。',
 'wlheader-enotif' => '* 已经启动电子邮件通知功能。',
-'wlheader-showupdated' => "* 在你上次查看后有被修改过的页面会显示为'''粗体'''",
+'wlheader-showupdated' => "*你上次访问后更改的页面以'''粗体'''显示",
 'watchmethod-recent' => '检查被监视页面的最近编辑',
 'watchmethod-list' => '查看监视页中的最新修改',
 'watchlistcontains' => '您的监视列表包含$1个页面。',
@@ -2289,20 +2281,24 @@ $1',
 'enotif_mailer' => '{{SITENAME}}通知发送器',
 'enotif_reset' => '标记所有页面为已访问',
 'enotif_impersonal_salutation' => '{{SITENAME}}用户',
-'enotif_subject_deleted' => '{{SITENAME}}的$1页面被$2删除',
-'enotif_subject_created' => '{{SITENAME}}的$1页面被$2创建',
-'enotif_subject_moved' => '{{SITENAME}}的$1页面被$2移动',
-'enotif_subject_restored' => '{{SITENAME}}的$1页面被$2恢复',
-'enotif_subject_changed' => '{{SITENAME}}的$1页面被$2修改',
-'enotif_lastvisited' => '请浏览 $1 查看你上次访问后的所有更改。',
-'enotif_lastdiff' => '请浏览 $1 查看该更改。',
+'enotif_subject_deleted' => '{{SITENAME}}页面$1已被$2删除',
+'enotif_subject_created' => '{{SITENAME}}页面$1已被$2创建',
+'enotif_subject_moved' => '{{SITENAME}}页面$1已被$2移动',
+'enotif_subject_restored' => '{{SITENAME}}页面$1已被$2恢复',
+'enotif_subject_changed' => '{{SITENAME}}页面$1已被$2更改',
+'enotif_body_intro_deleted' => '{{SITENAME}}页面$1已于$PAGEEDITDATE被$2{{GENDER:$2|删除}},请见$3。',
+'enotif_body_intro_created' => '{{SITENAME}}页面$1已于$PAGEEDITDATE被$2{{GENDER:$2|创建}},请浏览$3查看当前版本。',
+'enotif_body_intro_moved' => '{{SITENAME}}页面$1已于$PAGEEDITDATE被$2{{GENDER:$2|移动}},请浏览$3查看当前版本。',
+'enotif_body_intro_restored' => '{{SITENAME}}页面$1已于$PAGEEDITDATE被$2{{GENDER:$2|恢复}},请浏览$3查看当前版本。',
+'enotif_body_intro_changed' => '{{SITENAME}}页面$1已于$PAGEEDITDATE被$2{{GENDER:$2|更改}},请浏览$3查看当前版本。',
+'enotif_lastvisited' => '请浏览$1查看你上次访问后的所有更改。',
+'enotif_lastdiff' => '请浏览$1查看该更改。',
 'enotif_anon_editor' => '匿名用户$1',
 'enotif_body' => '亲爱的$WATCHINGUSERNAME:
 
 你好!
 
-{{SITENAME}}页面$PAGETITLE已于$PAGEEDITDATE被$PAGEEDITOR $CHANGEDORCREATED,请浏览 $PAGETITLE_URL 查看当前版本。
-$NEWPAGE
+$PAGEINTRO$NEWPAGE
 编辑摘要:$PAGESUMMARY $PAGEMINOREDIT
 
 你可以通过以下方式联系编者:
@@ -2312,8 +2308,7 @@ $NEWPAGE
 在你访问该页面之前,我们不会发送新增更改的通知。
 你也可以重设你的监视列表中所有监视页面的通知标志。
 
-友好的{{SITENAME}}通知系统
-
+{{SITENAME}}通知系统
 --
 更改邮件通知设置:
 {{canonicalurl:{{#special:Preferences}}}}
@@ -2323,6 +2318,8 @@ $NEWPAGE
 $UNWATCHURL
 反馈与其他帮助:
 {{canonicalurl:{{MediaWiki:Helppage}}}}',
+'created' => '创建',
+'changed' => '更改',
 
 # Delete
 'deletepage' => '删除页面',
@@ -2388,21 +2385,24 @@ $UNWATCHURL
 'prot_1movedto2' => '[[$1]]移动至[[$2]]',
 'protect-badnamespace-title' => '不可被保护的名字空间',
 'protect-badnamespace-text' => '这个名字空间内的页面无法被保护。',
+'protect-norestrictiontypes-text' => '无法保护此页,因为没有可用的保护类型',
+'protect-norestrictiontypes-title' => '不可保护页面',
 'protect-legend' => '确认保护',
 'protectcomment' => '原因:',
 'protectexpiry' => '到期:',
 'protect_expiry_invalid' => '输入的终止时间无效。',
 'protect_expiry_old' => '终止时间已过去。',
 'protect-unchain-permissions' => '解除锁定更多的保护选项',
-'protect-text' => '可以在这里浏览和修改对页面<strong>$1</strong>的保护级别。',
+'protect-text' => '可以在这里浏览和修改对页面<strong>$1</strong>的保护级别。',
 'protect-locked-blocked' => "您不能在被封禁时更改保护级别。以下是页面'''$1'''的当前设置:",
 'protect-locked-dblock' => "您不能在数据库锁定时更改保护级别。以下是页面'''$1'''的当前设置:",
 'protect-locked-access' => "您的帐户没有足够的权限去更改保护级别。以下是页面'''$1'''的当前设置:",
 'protect-cascadeon' => '以下的{{PLURAL:$1|一个|多个}}页面包含  本页面的同时,启动了连锁保护,因此本页面目前也被保护,未能编辑。您可以设置本页面的保护级别,但这并不会对连锁保护有所影响。',
 'protect-default' => '允许所有用户',
-'protect-fallback' => '需要“$1”的许可',
-'protect-level-autoconfirmed' => '禁止新的和未注册的用户',
-'protect-level-sysop' => '仅管理员',
+'protect-fallback' => '仅允许拥有“$1”权限的用户',
+'protect-level-autoconfirmed' => '仅允许自动确认用户',
+'protect-level-sysop' => '仅允许管理员',
+'protect-summary-desc' => '[$1=$2]($3)',
 'protect-summary-cascade' => '联锁',
 'protect-expiring' => '终止于$1(UTC)',
 'protect-expiring-local' => '$1到期',
@@ -2449,7 +2449,7 @@ $UNWATCHURL
 'undeleterevisions' => '$1版本存档',
 'undeletehistory' => '如果您恢复了该页面,所有版本都会被恢复到修订历史中。
 如果本页删除后有一个同名的新页面建立,被恢复的版本将会出现在先前的历史中。',
-'undeleterevdel' => '如果把最新修订部份删除,反删除便无法进行。如果遇到这种情况,您必须反选或反隐藏最新已删除的修订。',
+'undeleterevdel' => '如果把最新修订部分删除,反删除将会无法进行。如果遇到这种情况,您必须反选或反隐藏最新已删除的修订。',
 'undeletehistorynoadmin' => '这个页面已被删除。删除原因显示在下方编辑摘要中,被删除前的所有修订文本连同删除前贡献用户的细节信息只对管理员可见。',
 'undelete-revision' => '$1由$3(在$4 $5)所编写的已删除修订版本:',
 'undeleterevision-missing' => '无效或丢失的修订版本。您可能使用了错误的链接,或者此修订版本已经被从存档中恢复或移除。',
@@ -2483,13 +2483,13 @@ $1',
 'undelete-error-long' => '恢复被删除的文件时出错:
 
 $1',
-'undelete-show-file-confirm' => '确定要查看在 $2 $3 ,"<nowiki>$1</nowiki>"的已删除修订版本吗?',
+'undelete-show-file-confirm' => '确定要查看文件“<nowiki>$1</nowiki>”于$2$3被删除版本吗?',
 'undelete-show-file-submit' => '是',
 
 # Namespace form on various pages
 'namespace' => '名字空间:',
 'invert' => '反选',
-'tooltip-invert' => '选中此复选框来隐藏选定名字空间(及其相关名字空间,若该选项亦被选中)范围内的页面更改',
+'tooltip-invert' => '请选择该框以隐藏指定名字空间(及相关名字空间,若被选择)的页面更改',
 'namespace_association' => '相关名字空间',
 'tooltip-namespace_association' => '选中此复选框可包括与选定名字空间相关的讨论页或子页面',
 'blanknamespace' => '(主要)',
@@ -2508,7 +2508,7 @@ $1',
 'sp-contributions-newbies-sub' => '新手',
 'sp-contributions-newbies-title' => '新手的用户贡献',
 'sp-contributions-blocklog' => '封禁日志',
-'sp-contributions-deleted' => '删除的用户贡献',
+'sp-contributions-deleted' => '删除的用户贡献',
 'sp-contributions-uploads' => '上传',
 'sp-contributions-logs' => '日志',
 'sp-contributions-talk' => '讨论',
@@ -2565,7 +2565,7 @@ $1',
 ** 不能接受的用户名',
 'ipb-hardblock' => '阻止登录用户使用该IP地址编辑',
 'ipbcreateaccount' => '阻止创建新账号',
-'ipbemailban' => '阻止用户发送电',
+'ipbemailban' => '阻止用户发送电子邮件',
 'ipbenableautoblock' => '自动封禁该用户最后使用的IP地址,以及他们随后试图用于编辑的所有IP地址',
 'ipbsubmit' => '封禁该用户',
 'ipbother' => '其它时间:',
@@ -2623,7 +2623,7 @@ $1',
 'unblocklink' => '解封',
 'change-blocklink' => '更改封禁',
 'contribslink' => '贡献',
-'emaillink' => '发送电',
+'emaillink' => '发送电子邮件',
 'autoblocker' => '由于您与“[[User:$1|$1]]”共享一个IP地址而被自动封禁。
 $1被封禁的理由是:“$2”',
 'blocklogpage' => '封禁日志',
@@ -2686,20 +2686,18 @@ $1被封禁的理由是:“$2”',
 # Move page
 'move-page' => '移动$1',
 'move-page-legend' => '移动页面',
-'movepagetext' => "用下面的表单来重命名一个页面,并将其修订历史同时移动到新页面。
-老的页面将成为新页面的重定向页
-您可以自动地更新指到原标题的重定向
-如果您选择不去做的话,请检查[[Special:DoubleRedirects|双重]]或[[Special:BrokenRedirects|损坏重定向]]链接。
-您应当负责确定所有链接依然会链到指定的页面
+'movepagetext' => "您可以使用下面的表单来重命名一个页面,同时将其修订历史移动到新页面。
+同时老的条目将会被重定向到新条目
+您可以自动地将重定向更新到原条目
+如果您不选择这样做的话,请检查[[Special:DoubleRedirects|双重]]或[[Special:BrokenRedirects|损坏重定向]]链接。
+您有责任确保链接会被正确指向他们应该被指向的地方
 
-注意如果新页面已经有内容的话,页面将'''不会'''被移动,
-除非新页面无内容或是重定向页,而且没有修订历史。
-这意味着您再必要时可以在移动到新页面后再移回老的页面,
-同时您也无法覆盖现有页面。
+注意:即使新条目已经有对应页面,此页面也'''不会'''被移动,除非新页面无任何编辑历史或是重定向页。
+这意味着您可在误操作后将页面移回原处,同时,您也无法覆盖现有页面。
 
 '''警告!'''
-对一个经常被访问的页面而言这可能是一个重大与唐突的更改;
-请在行动前先了解其所可能带来的后果。",
+对这样一个经常被访问的页面而言这可能是一个重大且唐突的更改;
+请在行动前先了解您的修改可能带来的一切后果。",
 'movepagetext-noredirectfixer' => "用下面的表单来重命名一个页面,并将其修订历史同时移动到新页面。
 老的页面将成为新页面的重定向页。
 请检查[[Special:DoubleRedirects|双重重定向]]或[[Special:BrokenRedirects|损坏重定向]]链接。
@@ -2780,11 +2778,11 @@ $1被封禁的理由是:“$2”',
 
 # Export
 'export' => '导出页面',
-'exporttext' => '您可以将特定页面或一组页面的文本以及编辑历史以XML格式导出;这样可以将有关页面通过“[[Special:Import|导入页面]]”页面导入到另一个运行MediaWiki的网站。
+'exporttext' => '您可以将特定页面或一组页面的文本以及编辑历史以 XML 格式导出;这样可以将有关页面通过“[[Special:Import|导入页面]]”导入到另一个运行 MediaWiki 的网站。
 
-要导出页面,请在下面的文本框中输入页面标题,每行一个标题,并选择你是否需要导出带有页面历史的以前的修订本,或是只选择导出带有最后一次编辑信息的当前修订版本。
+要导出页面,请在下面的文本框中输入页面标题,每行一个标题,并选择您是否需要导出带有页面历史的以前的修订版本,或是只选择导出带有最后一次编辑信息的当前修订版本。
 
-此外你还可以利用链接导出文件,例如你可以使用[[{{#Special:Export}}/{{MediaWiki:Mainpage}}]]导出“[[{{MediaWiki:Mainpage}}]]”页面。',
+此外您还可以利用链接导出文件,例如您可以使用[[{{#Special:Export}}/{{MediaWiki:Mainpage}}]]导出“[[{{MediaWiki:Mainpage}}]]”页面。',
 'exportall' => '导出所有页面',
 'exportcuronly' => '仅包含当前的修订,而不是全部的历史。',
 'exportnohistory' => "----
@@ -2872,6 +2870,7 @@ $1被封禁的理由是:“$2”',
 'import-error-interwiki' => '页面“$1”未能导入,因为它的名称需要使用外部跨wiki链接。',
 'import-error-special' => '页面“$1”未导入,因为它需要使用一个不能创建页面的特殊名字空间。',
 'import-error-invalid' => '页面“$1”未能导入,因为它的名字无效。',
+'import-error-unserialize' => '页面“$1”的版本$2无法反序列化。此版本使用内容模型$3序列化为$4。',
 'import-options-wrong' => '{{PLURAL:$2|选项}}出错:<nowiki>$1</nowiki>',
 'import-rootpage-invalid' => '根页面的标题无效。',
 'import-rootpage-nosubpage' => '名字空间为“$1”的根页面不允许子页面。',
@@ -2887,11 +2886,11 @@ $1被封禁的理由是:“$2”',
 # JavaScriptTest
 'javascripttest' => 'JavaScript测试',
 'javascripttest-title' => '运行$1测试',
-'javascripttest-pagetext-noframework' => '此页é\9d¢è¢«ä¿\9dç\95\99ç\94¨äº\8eè¿\90行JavaScript测试。',
+'javascripttest-pagetext-noframework' => 'æ\9c¬é¡µé\9d¢è¢«ä¿\9dç\95\99è¿\9b行JavaScript测试。',
 'javascripttest-pagetext-unknownframework' => '未知的框架“$1”。',
 'javascripttest-pagetext-frameworks' => '请选择以下的框架之一:$1',
 'javascripttest-pagetext-skins' => '选择外观来运行测试:',
-'javascripttest-qunit-intro' => '请浏览mediawiki.org参阅[$1 测试文档]。',
+'javascripttest-qunit-intro' => '请见mediawiki.org的[$1 测试说明文件]。',
 'javascripttest-qunit-heading' => 'MediaWiki JavaScript QUnit 测试套件',
 
 # Tooltip help for the actions
@@ -2960,7 +2959,7 @@ $1被封禁的理由是:“$2”',
 'tooltip-upload' => '开始上传',
 'tooltip-rollback' => '单击“回退”恢复上一位贡献者对本页的编辑',
 'tooltip-undo' => '“撤销”可以恢复该编辑并在预览模式下打开编辑表单。它允许在摘要中加入原因。',
-'tooltip-preferences-save' => '保存设定',
+'tooltip-preferences-save' => '保存系统设置',
 'tooltip-summary' => '请输入简短的摘要',
 
 # Stylesheets
@@ -2993,6 +2992,10 @@ $1被封禁的理由是:“$2”',
 'simple.js' => '/* 此处的JavaScript将加载于使用Simple皮肤的用户 */',
 'modern.js' => '/* 此处的JavaScript将加载于使用Modern皮肤的用户 */',
 'vector.js' => '/* 此处的JavaScript将加载于使用Vector皮肤的用户 */',
+'group-autoconfirmed.js' => '/* 此处的JavaScript将仅加载于自动确认用户 */',
+'group-bot.js' => '/* 此处的JavaScript将仅加载于机器人 */',
+'group-sysop.js' => '/* 此处的JavaScript将仅加载于管理员 */',
+'group-bureaucrat.js' => '/* 此处的JavaScript将仅加载于行政员 */',
 
 # Metadata
 'notacceptable' => '该网站服务器不能提供您的客户端能识别的数据格式。',
@@ -3050,6 +3053,7 @@ $1被封禁的理由是:“$2”',
 'pageinfo-magic-words' => '魔术字($1)',
 'pageinfo-hidden-categories' => '隐藏分类($1)',
 'pageinfo-templates' => '使用的模板($1)',
+'pageinfo-transclusions' => '$1个包含此页的页面',
 'pageinfo-toolboxlink' => '页面信息',
 'pageinfo-redirectsto' => '重定向到',
 'pageinfo-redirectsto-info' => '信息',
@@ -3058,6 +3062,10 @@ $1被封禁的理由是:“$2”',
 'pageinfo-protect-cascading' => '从这里开始连锁保护',
 'pageinfo-protect-cascading-yes' => '是',
 'pageinfo-protect-cascading-from' => '保护级联自',
+'pageinfo-category-info' => '分类信息',
+'pageinfo-category-pages' => '页数',
+'pageinfo-category-subcats' => '子分类数',
+'pageinfo-category-files' => '文件数',
 
 # Skin names
 'skinname-standard' => '标准',
@@ -3074,8 +3082,8 @@ $1被封禁的理由是:“$2”',
 'rcpatroldisabled' => '最新更改检查被关闭',
 'rcpatroldisabledtext' => '最新更改检查的功能目前已关闭。',
 'markedaspatrollederror' => '不能标志为已检查',
-'markedaspatrollederrortext' => '你需要指定某个版本才能标志为已检查。',
-'markedaspatrollederror-noautopatrol' => '您无法将你自己所作的更改标记为已检查。',
+'markedaspatrollederrortext' => '你需要指定一个版本以标记为已巡查。',
+'markedaspatrollederror-noautopatrol' => '你不能把自己的更改标记为已检查。',
 'markedaspatrollednotify' => '$1的更改已被标记为已巡查。',
 'markedaspatrollederrornotify' => '标记为已巡查失败。',
 
@@ -3108,10 +3116,11 @@ $1',
 '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-desc' => 'SVG文件,尺寸为$1 × $2像素,文件大小:$3',
+'svg-long-desc-animated' => '动画SVG文件,尺寸为$1 × $2像素,文件大小:$3',
+'svg-long-error' => '无效的SVG文件:$1',
 'show-big-image' => '完全分辨率',
-'show-big-image-preview' => 'æ\9c¬é¢\84è§\88ç\9a\84大å°\8f:$1。',
+'show-big-image-preview' => 'æ\9c¬é¢\84è§\88ç\9a\84尺寸:$1。',
 'show-big-image-other' => '其他{{PLURAL:$2|分辨率}}:$1。',
 'show-big-image-size' => '$1×$2像素',
 'file-info-gif-looped' => '循环',
@@ -3135,10 +3144,16 @@ $1',
 'sp-newimages-showfrom' => '从$1 $2开始显示新文件',
 
 # Video information, used by Language::formatTimePeriod() to format lengths in the above messages
+'seconds-abbrev' => '$1秒',
+'minutes-abbrev' => '$1分',
+'hours-abbrev' => '$1小时',
+'days-abbrev' => '$1天',
 'seconds' => '$1秒',
 'minutes' => '$1分',
 'hours' => '$1小时',
 'days' => '$1天',
+'months' => '{{PLURAL:$1|$1个月}}',
+'years' => '{{PLURAL:$1|$1年}}',
 'ago' => '$1前',
 'just-now' => '刚刚',
 
@@ -3165,11 +3180,11 @@ Variants for Chinese language
 'variantname-zh' => '不转换',
 
 # Variants for Gan language
-'variantname-gan-hans' => '‪中文(简体)',
-'variantname-gan-hant' => '‪中文(繁体)',
+'variantname-gan-hans' => 'hans',
+'variantname-gan-hant' => 'hant',
 
 # Variants for Kazakh language
-'variantname-kk-cyrl' => '',
+'variantname-kk-cyrl' => 'kk-cyrl',
 
 # Metadata
 'metadata' => '原始数据',
@@ -3596,7 +3611,7 @@ Variants for Chinese language
 
 # E-mail address confirmation
 'confirmemail' => '确认邮箱地址',
-'confirmemail_noemail' => 'ä½ è¿\98没æ\9c\89å\9c¨ä½ ç\9a\84[[Special:Preferences|ç\94¨æ\88·èµ\84æ\96\99设置]]中设置有效的电子邮件地址。',
+'confirmemail_noemail' => 'ä½ è¿\98没æ\9c\89å\9c¨ä½ ç\9a\84[[Special:Preferences|ç³»ç»\9f设置]]中设置有效的电子邮件地址。',
 'confirmemail_text' => '{{SITENAME}}要求您在使用邮件功能之前验证您的邮箱地址。
 点击以下按钮可向您的邮箱发送一封确认邮件。该邮件包含有一行代码链接;
 请在您的浏览器中加载此链接以确认您的邮箱地址是有效的。',
@@ -3611,7 +3626,7 @@ Variants for Chinese language
 'confirmemail_needlogin' => '您需要$1以确认您的邮箱地址。',
 'confirmemail_success' => '您的邮箱已经被确认。您现在可以[[Special:UserLogin|登录]]并使用此网站了。',
 'confirmemail_loggedin' => '您的邮箱地址现在已被确认。',
-'confirmemail_error' => 'ä½ ç\9a\84确认è¿\87ç¨\8bå\8f\91ç\94\9fé\94\99误。',
+'confirmemail_error' => 'ä¿\9då­\98ä½ ç\9a\84确认æ\97¶å\87ºé\94\99。',
 'confirmemail_subject' => '{{SITENAME}}电子邮件地址确认',
 'confirmemail_body' => '来自IP地址$1的用户(可能是您)在{{SITENAME}}上创建了账户“$2”,并提交了您
 的电子邮箱地址。
@@ -3651,8 +3666,8 @@ $3
 $5
 
 确认码会在$4过期。',
-'confirmemail_invalidated' => '电地址确认已取消',
-'invalidateemail' => '取消电确认',
+'confirmemail_invalidated' => '电子邮件地址确认已取消',
+'invalidateemail' => '取消电子邮件确认',
 
 # Scary transclusion
 'scarytranscludedisabled' => '[跨网站的编码转换不可用]',
@@ -3734,7 +3749,7 @@ $5
 'watchlistedit-normal-done' => '已从你的监视列表删除$1个标题:',
 'watchlistedit-raw-title' => '编辑原始监视列表',
 'watchlistedit-raw-legend' => '编辑原始监视列表',
-'watchlistedit-raw-explain' => 'æ\82¨ç\9a\84ç\9b\91è§\86å\88\97表中ç\9a\84æ \87é¢\98å\9c¨ä¸\8bé\9d¢æ\98¾ç¤ºï¼\8cå\90\8cæ\97¶äº¦é\83½å\8f¯ä»¥é\80\9aè¿\87ç¼\96è¾\91è¿\99个表å\8e»å\8a å\85¥ä»¥å\8f\8a移é\99¤æ \87é¢\98ï¼\9bä¸\80è¡\8cä¸\80个æ \87é¢\98ã\80\82å½\93å®\8cæ\88\90以å\90\8eï¼\8cç\82¹å\87»{{int:Watchlistedit-raw-submit}}ã\80\82你亦é\83½å\8f¯ä»¥å\8e»用[[Special:EditWatchlist|标准编辑器]]。',
+'watchlistedit-raw-explain' => 'æ\82¨ç\9a\84ç\9b\91è§\86å\88\97表中ç\9a\84æ \87é¢\98å\9c¨ä¸\8bé\9d¢æ\98¾ç¤ºï¼\8cå\90\8cæ\97¶ä¹\9få\8f¯ä»¥å\8f¯ä»¥é\80\9aè¿\87ç¼\96è¾\91è¿\99个表å\8e»å\8a å\85¥ä»¥å\8f\8a移é\99¤æ \87é¢\98ï¼\9bä¸\80è¡\8cä¸\80个æ \87é¢\98ã\80\82å½\93å®\8cæ\88\90以å\90\8eï¼\8cç\82¹å\87»{{int:Watchlistedit-raw-submit}}ã\80\82æ\82¨ä¹\9få\8f¯ä»¥ä½¿用[[Special:EditWatchlist|标准编辑器]]。',
 'watchlistedit-raw-titles' => '标题:',
 'watchlistedit-raw-submit' => '更新监视列表',
 'watchlistedit-raw-done' => '您的监视列表已经更新。',
@@ -3774,11 +3789,11 @@ $5
 'version-poweredby-credits' => "本Wiki由'''[//www.mediawiki.org/ MediaWiki]'''驱动,版权所有 © 2001-$1 $2。",
 'version-poweredby-others' => '其他',
 'version-credits-summary' => '我们感谢下列人士为[[Special:Version|MediaWiki]]作出的贡献。',
-'version-license-info' => 'MediaWiki为自由软件;您可依据自由软件基金会所发表的GNU通用公共授权条款规定,就本程序再为发布与/或修改;无论您依据的是本授权的第二版或(您自行选择的)任一日后发行的版本
+'version-license-info' => "MediaWiki是自由软件,你可以依据自由软件基金会发行的'''GNU公众授权协议'''第2版或任意后续版本的条款,传播和/或修改本软件
 
-MediaWiki是基于使用目的而加以发布,然而不负任何担保责任;亦无对适售性或特定目的适用性所为的默示性担保。详情请参照GNU通用公共授权
+MediaWiki发表时预期有用,但对此'''无任何保证''',亦无隐含的'''可以销售'''或'''适合特定目的'''的保证。详情请见GNU公众授权协议
 
-您应已收到附随于本程序的[{{SERVER}}{{SCRIPTPATH}}/COPYING GNU通用公共授权的副本];如果没有,请写信至自由软件基金会:51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA,或[//www.gnu.org/licenses/old-licenses/gpl-2.0.html 在线阅读]。',
+你应该已经接受本程序附带的[{{SERVER}}{{SCRIPTPATH}}/COPYING GNU公众授权协议的副本]。如果没有,请写信至美国马萨诸塞州波士顿富兰克林大街51号5楼自由软件基金会,邮编MA 02110-1301(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-product' => '产品',
 'version-software-version' => '版本',
@@ -3792,7 +3807,7 @@ MediaWiki是基于使用目的而加以发布,然而不负任何担保责任
 'filepath' => '文件路径',
 'filepath-page' => '文件名:',
 'filepath-submit' => '提交',
-'filepath-summary' => 'æ­¤ç\89¹æ®\8a页é\9d¢è¿\94å\9b\9eæ\96\87件ç\9a\84å®\8cæ\95´è·¯å¾\84ã\80\82å\9b¾å\83\8fä¼\9a以å®\8cæ\95´ç\9a\84å\88\86辨ç\8e\87æ\98¾ç¤ºï¼\8cå\85¶å®\83ç\9a\84æ\96\87件类å\9e\8b亦å°\86ç\9b´æ\8e¥é\80\9aè¿\87å\85³è\81\94ç\9a\84åº\94ç\94¨ç¨\8båº\8f打开。',
+'filepath-summary' => 'æ\9c¬ç\89¹æ®\8a页é\9d¢è¿\94å\9b\9eæ\96\87件ç\9a\84å®\8cæ\95´è·¯å¾\84ã\80\82å\9b¾å\83\8f以å®\8cæ\95´å\88\86辨ç\8e\87æ\98¾ç¤ºï¼\8cå\85¶å®\83æ\96\87件类å\9e\8b以å\85³è\81\94ç¨\8båº\8fç\9b´æ\8e¥打开。',
 
 # Special:FileDuplicateSearch
 'fileduplicatesearch' => '搜索重复文件',
@@ -3819,7 +3834,7 @@ MediaWiki是基于使用目的而加以发布,然而不负任何担保责任
 'specialpages-group-highuse' => '高度使用页面',
 'specialpages-group-pages' => '页面列表',
 'specialpages-group-pagetools' => '页面工具',
-'specialpages-group-wiki' => 'Wiki数据与工具',
+'specialpages-group-wiki' => '数据与工具',
 'specialpages-group-redirects' => '重定向特殊页面',
 'specialpages-group-spam' => '反垃圾链接工具',
 
@@ -3868,7 +3883,7 @@ MediaWiki是基于使用目的而加以发布,然而不负任何担保责任
 本网站出现了一些技术问题。',
 'dberr-again' => '请等待几分钟后重试。',
 'dberr-info' => '(无法连接到数据库服务器:$1)',
-'dberr-usegoogle' => '在此期间您可以尝试用Google来搜索。',
+'dberr-usegoogle' => '在此期间您可以尝试用 Google 来搜索。',
 'dberr-outofdate' => '须注意他们索引出来的内容可能不是最新的。',
 'dberr-cachederror' => '这是所请求页面的缓存副本,可能不是最新的。',
 
@@ -3917,8 +3932,12 @@ MediaWiki是基于使用目的而加以发布,然而不负任何担保责任
 'logentry-newusers-newusers' => '已创建用户帐户 $1',
 'logentry-newusers-create' => '创建用户帐户$1',
 'logentry-newusers-create2' => '创建用户帐户 $3 由 $1',
+'logentry-newusers-byemail' => '$1创建用户$3并将密码用电子邮件发送',
 'logentry-newusers-autocreate' => '账户$1被自动创建',
-'newuserlog-byemail' => '密码已用电子邮件发送',
+'logentry-rights-rights' => '$1将$3的用户组从$4改为$5',
+'logentry-rights-rights-legacy' => '$1更改$3的用户组',
+'logentry-rights-autopromote' => '$1的用户组已自动从$4改为$5',
+'rightsnone' => '(无)',
 
 # Feedback
 'feedback-bugornote' => '如果你准备好详细描述一个技术问题,请[$1 报告bug]。或者你可以使用下面的简单表格。你的评论将被添加至页面“[$3 $2]”,附有你的用户名和使用的浏览器。',
@@ -3940,7 +3959,7 @@ MediaWiki是基于使用目的而加以发布,然而不负任何担保责任
 'searchsuggest-containing' => '含有...',
 
 # API errors
-'api-error-badaccess-groups' => '你没有将文件上传到此wiki的权限。',
+'api-error-badaccess-groups' => '您没有将文件上传到此 wiki 的权限。',
 'api-error-badtoken' => '内部错误:会话无效。',
 'api-error-copyuploaddisabled' => '通过URL上传的功能已被此服务器禁用。',
 'api-error-duplicate' => '在网站上已经具有相同内容的{{PLURAL:$1|[$2 另一个文件]|[$2 另一些文件]}}。',
@@ -3957,20 +3976,21 @@ MediaWiki是基于使用目的而加以发布,然而不负任何担保责任
 'api-error-filetype-banned' => '此类文件被禁止。',
 'api-error-filetype-banned-type' => '$1{{PLURAL:$4|不是允许的文件类型}}。允许的{{PLURAL:$3|文件类型是|文件类型有}}$2。',
 'api-error-filetype-missing' => '该文件没有扩展名。',
-'api-error-hookaborted' => '试图进行的修改被一个扩展钩子终止。',
+'api-error-hookaborted' => '试图进行的修改被一个扩展钩子终止。',
 'api-error-http' => '内部错误:无法连接到服务器。',
 'api-error-illegal-filename' => '文件名非法。',
-'api-error-internal-error' => '内部错误:此wiki在处理的上传数据时出现了错误。',
+'api-error-internal-error' => '内部错误:此wiki在处理的上传数据时出现了错误。',
 'api-error-invalid-file-key' => '内部错误:找不到临时文件。',
 'api-error-missingparam' => '内部错误:请求中缺少参数。',
 'api-error-missingresult' => '内部错误:无法确定是否复制成功。',
 'api-error-mustbeloggedin' => '您必须登录后再上传文件。',
-'api-error-mustbeposted' => '该软件存在故障,它没有使用正确的HTTP方法。',
+'api-error-mustbeposted' => '内部错误:请求需要HTTP POST',
 'api-error-noimageinfo' => '上传成功,但服务器没有给我们任何该文件的信息。',
 'api-error-nomodule' => '内部错误:缺少上传模块集。',
 'api-error-ok-but-empty' => '内部错误:服务器没有响应。',
 'api-error-overwrite' => '不允许覆盖现有文件。',
 'api-error-stashfailed' => '内部错误:服务器保存临时文件失败。',
+'api-error-publishfailed' => '内部错误:服务器发布临时文件失败。',
 'api-error-timeout' => '服务器没有在预期内响应。',
 'api-error-unclassified' => '出现未知错误。',
 'api-error-unknown-code' => '未知错误:$1',
@@ -3991,6 +4011,4 @@ MediaWiki是基于使用目的而加以发布,然而不负任何担保责任
 'duration-centuries' => '$1个世纪',
 'duration-millennia' => '$1千年',
 
-# Unknown messages
-'svg-long-error' => '无效的SVG文件:$1',
 );
index c2f3124..b4ad181 100644 (file)
@@ -109,12 +109,14 @@ $specialPageAliases = array(
        'Allmessages'               => array( '所有信息' ),
        'Allpages'                  => array( '所有頁面' ),
        'Ancientpages'              => array( '最早頁面' ),
+       'Badtitle'                  => array( '無效標題' ),
        'Blankpage'                 => array( '空白頁面' ),
        'Block'                     => array( '查封用戶' ),
        'Blockme'                   => array( '封禁我' ),
        'Booksources'               => array( '網絡書源' ),
        'BrokenRedirects'           => array( '損壞的重定向頁' ),
        'Categories'                => array( '頁面分類' ),
+       'ChangeEmail'               => array( '修改郵箱' ),
        'ChangePassword'            => array( '修改密碼' ),
        'ComparePages'              => array( '頁面比較' ),
        'Confirmemail'              => array( '確認電子郵件' ),
@@ -132,6 +134,7 @@ $specialPageAliases = array(
        'Filepath'                  => array( '文件路徑' ),
        'Import'                    => array( '導入頁面' ),
        'Invalidateemail'           => array( '不可識別的電郵地址' ),
+       'JavaScriptTest'            => array( 'JavaScript測試' ),
        'BlockList'                 => array( '封禁列表' ),
        'LinkSearch'                => array( '搜索網頁鏈接' ),
        'Listadmins'                => array( '管理員列表' ),
@@ -148,6 +151,7 @@ $specialPageAliases = array(
        'MIMEsearch'                => array( 'MIME搜索' ),
        'Mostcategories'            => array( '最多分類頁面' ),
        'Mostimages'                => array( '最多鏈接文件' ),
+       'Mostinterwikis'            => array( '最多跨維基連結' ),
        'Mostlinked'                => array( '最多鏈接頁面' ),
        'Mostlinkedcategories'      => array( '最多鏈接分類' ),
        'Mostlinkedtemplates'       => array( '最多鏈接模板' ),
@@ -202,6 +206,44 @@ $specialPageAliases = array(
        'Withoutinterwiki'          => array( '沒有跨語言鏈接的頁面' ),
 );
 
+$magicWords = array(
+       'notoc'                     => array( '0', '__無目錄__', '__无目录__', '__NOTOC__' ),
+       'nogallery'                 => array( '0', '__無圖庫__', '__无图库__', '__NOGALLERY__' ),
+       'forcetoc'                  => array( '0', '__強制目錄__', '__强显目录__', '__FORCETOC__' ),
+       'toc'                       => array( '0', '__目錄__', '__目录__', '__TOC__' ),
+       'noeditsection'             => array( '0', '__無段落編輯__', '__无段落编辑__', '__NOEDITSECTION__' ),
+       'currentmonth'              => array( '1', '本月', 'CURRENTMONTH', 'CURRENTMONTH2' ),
+       'currentmonthabbrev'        => array( '1', '本月簡稱', '本月简称', 'CURRENTMONTHABBREV' ),
+       'currentday'                => array( '1', '今天', 'CURRENTDAY' ),
+       'currenttime'               => array( '1', '當前時間', '此時', '此时', '当前时间', 'CURRENTTIME' ),
+       'img_thumbnail'             => array( '1', '縮圖', '缩略图', 'thumbnail', 'thumb' ),
+       'img_manualthumb'           => array( '1', '縮圖=$1', '缩略图=$1', 'thumbnail=$1', 'thumb=$1' ),
+       'img_right'                 => array( '1', '右', 'right' ),
+       'img_left'                  => array( '1', '左', 'left' ),
+       'img_none'                  => array( '1', '無', '无', 'none' ),
+       'img_width'                 => array( '1', '$1像素', '$1px' ),
+       'img_center'                => array( '1', '置中', '居中', 'center', 'centre' ),
+       'img_framed'                => array( '1', '有框', 'framed', 'enframed', 'frame' ),
+       'img_frameless'             => array( '1', '無框', '无框', 'frameless' ),
+       'img_page'                  => array( '1', '頁=$1', '$1頁', '页数=$1', '$1页', 'page=$1', 'page $1' ),
+       'img_link'                  => array( '1', '連結=$1', '链接=$1', 'link=$1' ),
+       'sitename'                  => array( '1', '網站名稱', '站点名称', 'SITENAME' ),
+       'ns'                        => array( '0', '名字空間', '名字空间:', 'NS:' ),
+       'nse'                       => array( '0', '名字空間E', '名字空间E:', 'NSE:' ),
+       'localurl'                  => array( '0', '本地URL', '本地URL:', 'LOCALURL:' ),
+       'localurle'                 => array( '0', '本地URLE', '本地URLE:', 'LOCALURLE:' ),
+       'pageid'                    => array( '0', '頁面ID', '页面ID', 'PAGEID' ),
+       'server'                    => array( '0', '伺服器', '服务器', 'SERVER' ),
+       'servername'                => array( '0', '伺服器名稱', '服务器名', 'SERVERNAME' ),
+       'gender'                    => array( '0', '性別:', '性别:', 'GENDER:' ),
+       'notitleconvert'            => array( '0', '__不轉換標題__', '__不转换标题__', '__NOTITLECONVERT__', '__NOTC__' ),
+       'nocontentconvert'          => array( '0', '__不轉換內容__', '__不转换内容__', '__NOCONTENTCONVERT__', '__NOCC__' ),
+       'displaytitle'              => array( '1', '顯示標題', '显示标题', 'DISPLAYTITLE' ),
+       'currentversion'            => array( '1', '當前版本', '当前版本', 'CURRENTVERSION' ),
+       'hiddencat'                 => array( '1', '__隱藏分類__', '__隐藏分类__', '__HIDDENCAT__' ),
+       'staticredirect'            => array( '1', '__靜態重定向__', '__静态重定向__', '__STATICREDIRECT__' ),
+);
+
 $bookstoreList = array(
        '博客來書店' => 'http://www.books.com.tw/exep/prod/booksfile.php?item=$1',
        '三民書店' => 'http://www.sanmin.com.tw/page-qsearch.asp?ct=search_isbn&qu=$1',
@@ -216,7 +258,7 @@ $messages = array(
 'tog-hideminor' => '隱藏最近更改中的小修改',
 'tog-hidepatrolled' => '隱藏最近更改中巡查過的編輯',
 'tog-newpageshidepatrolled' => '隱藏新頁面清單中巡查過的頁面',
-'tog-extendwatchlist' => '展開監視清單以顯示所有更改,不只是最近的',
+'tog-extendwatchlist' => '展開監視列表以顯示所有更改,不只是最近的',
 'tog-usenewrc' => '在最近更改和監視列表中整合同一頁的修改 (需要JavaScript)',
 'tog-numberheadings' => '標題自動編號',
 'tog-showtoolbar' => '顯示編輯工具欄 (需要JavaScript)',
@@ -243,7 +285,7 @@ $messages = array(
 'tog-externaleditor' => '預設使用外部編輯器 (進階者專用,需要在您的電腦上作出一些特別設定。[//www.mediawiki.org/wiki/Manual:External_editors 更多信息。])',
 'tog-externaldiff' => '預設使用外部差異分析 (進階者專用,需要在您的電腦上作出一些特別設定。[//www.mediawiki.org/wiki/Manual:External_editors 更多信息。])',
 'tog-showjumplinks' => '啟用「跳轉到」訪問連結',
-'tog-uselivepreview' => '使用實時預覽 (需要JavaScript) (試驗中)',
+'tog-uselivepreview' => '使用實時預覽 (需要JavaScript)(試驗中)',
 'tog-forceeditsummary' => '當沒有輸入摘要時提醒我',
 'tog-watchlisthideown' => '監視列表中隱藏我的編輯',
 'tog-watchlisthidebots' => '監視列表中隱藏機器人的編輯',
@@ -344,8 +386,9 @@ $messages = array(
 'newwindow' => '(以新視窗開啟)',
 'cancel' => '取消',
 'moredotdotdot' => '更多...',
+'morenotlisted' => '更多未列出的項目...',
 'mypage' => '頁面',
-'mytalk' => '對話頁',
+'mytalk' => '討論',
 'anontalk' => '該IP的對話頁',
 'navigation' => '導覽',
 'and' => '和',
@@ -459,7 +502,7 @@ $1',
 'policy-url' => 'Project:方針',
 'portal' => '社群主頁',
 'portal-url' => 'Project:社區主頁',
-'privacy' => 'é\9a±ç§\81æ¬\8aæ\94¿ç­\96',
+'privacy' => '隱私政策',
 'privacypage' => 'Project:隱私權政策',
 
 'badaccess' => '權限錯誤',
@@ -475,10 +518,10 @@ $1',
 'youhavenewmessages' => '您有$1($2)。',
 'newmessageslink' => '新訊息',
 'newmessagesdifflink' => '最後更改',
-'youhavenewmessagesfromusers' => '你有來自{{PLURAL:$3| 另一位用戶| $3位用戶}}的$1 ( $2 )。',
+'youhavenewmessagesfromusers' => '你有來自{{PLURAL:$3|另一位用戶|$3位用戶}}的$1($2)。',
 'youhavenewmessagesmanyusers' => '你有來自多位用戶的$1( $2 )。',
 'newmessageslinkplural' => '{{PLURAL:$1|一項新訊息|新訊息}}',
-'newmessagesdifflinkplural' => '最新更改',
+'newmessagesdifflinkplural' => '最新{{PLURAL:$1|更改|更改}}',
 'youhavenewmessagesmulti' => '您在 $1 有一條新訊息',
 'editsection' => '編輯',
 'editold' => '編輯',
@@ -541,37 +584,38 @@ $1',
 「$1」
 來自於函數「$2」。
 數據庫返回錯誤「$3: $4」。',
-'laggedslavemode' => '警告: 頁面可能不包含最近的更新。',
+'laggedslavemode' => "'''警告:'''頁面可能不包含最近的更新。",
 'readonly' => '資料庫禁止訪問',
 'enterlockreason' => '請輸入禁止訪問原因, 包括估計重新開放的時間',
 'readonlytext' => '資料庫目前禁止輸入新內容及更改,
 這很可能是由於資料庫正在維修,之後即可恢復。
-管理員有如下解釋: $1',
-'missing-article' => '資料庫找不到文字"$1" $2。
 
-<p>通常這是由於修訂歷史頁上過時的連結到已經被刪除的頁面所導致的。</p>
+管理員有如下解釋:$1',
+'missing-article' => '資料庫找不到文字「$1」 $2。
+
+通常這是由於修訂歷史頁上過時的連結到已經被刪除的頁面所導致的。
 
-<p>如果情況不是這樣,您可能找到了軟體內的一個臭蟲。
-請記錄下URL地址,並向[[Special:ListUsers/sysop|管理員]]報告。</p>',
+果情況不是這樣,您可能找到了軟體內的一個臭蟲。
+請記錄下URL地址,並向[[Special:ListUsers/sysop|管理員]]報告',
 'missingarticle-rev' => '(修訂#: $1)',
 'missingarticle-diff' => '(差異: $1, $2)',
 'readonly_lag' => '附屬資料庫伺服器正在將快取更新到主伺服器,資料庫已被自動鎖定',
 'internalerror' => '內部錯誤',
 'internalerror_info' => '內部錯誤:$1',
-'fileappenderrorread' => '當附加時無法讀取"$1"。',
-'fileappenderror' => '不能附加"$1"到"$2"。',
-'filecopyerror' => '無法複製檔案"$1"到"$2"。',
-'filerenameerror' => '無法重新命名檔案"$1"到"$2"。',
+'fileappenderrorread' => '當附加時無法讀取「$1」。',
+'fileappenderror' => '不能附加「$1」到「$2」。',
+'filecopyerror' => '無法複製檔案「$1」到「$2」。',
+'filerenameerror' => '無法重新命名檔案「$1」到「$2」。',
 'filedeleteerror' => '無法刪除「$1」檔案。',
-'directorycreateerror' => '無法建立目錄"$1"。',
+'directorycreateerror' => '無法建立目錄「$1」。',
 'filenotfound' => '找不到「$1」檔案。',
 'fileexistserror' => '無法寫入檔案"$1": 檔案已存在',
 'unexpected' => '不正常值:"$1"="$2"。',
 'formerror' => '錯誤:無法提交表單',
 'badarticleerror' => '無法在此頁進行該操作。',
-'cannotdelete' => '無法刪除頁面或圖片“$1”
+'cannotdelete' => '無法刪除頁面或圖片「$1」
 它可能已經被其他人刪除了。',
-'cannotdelete-title' => '無法刪除“$1”',
+'cannotdelete-title' => '無法刪除頁面「$1」',
 'delete-hook-aborted' => '刪除被勾點中止。
 它沒有提供解釋。',
 'badtitle' => '錯誤的標題',
@@ -586,7 +630,8 @@ $1',
 'viewsource' => '查看原始碼',
 'viewsource-title' => '查看$1的源代碼',
 'actionthrottled' => '動作已壓制',
-'actionthrottledtext' => '基於反垃圾的考量,您現在於這段短時間之中限制去作這一個動作,而您已經超過這個上限。請在數分鐘後再嘗試。',
+'actionthrottledtext' => '基於反垃圾的考量,您現在於這段短時間之中限制去作這一個動作,而您已經超過這個上限。
+請在數分鐘後再嘗試。',
 'protectedpagetext' => '該頁面已被保護以防止編輯或其他操作。',
 'viewsourcetext' => '{{GENDER:|你|妳|你}}可以檢視並複製本頁面的原始碼。',
 'viewyourtext' => "您可以查看並複製'''您對此頁面作出編輯後'''的源代碼:",
@@ -596,16 +641,16 @@ $1',
 改變此頁將影響其他在此wiki上的用戶介面外觀。
 如欲修改所有wiki的翻譯,請到[//translatewiki.net/ translatewiki.net]上的MediaWiki本地化計畫。",
 'sqlhidden' => '(隱藏SQL查詢)',
-'cascadeprotected' => '這個頁面已經被保護,因為這個頁面被以下已標註"聯鎖保護"的{{PLURAL:$1|一個|多個}}被保護頁面包含:
+'cascadeprotected' => '這個頁面已經被保護,因為這個頁面被以下已標註"聯鎖保護"的{{PLURAL:$1|一個|多個}}被保護頁面包含
 $2',
 'namespaceprotected' => "您並沒有權限編輯'''$1'''名字空間的頁面。",
 'customcssprotected' => '你並無權限編輯此CSS頁面,因為它包含了其他用戶的個人設置。',
 'customjsprotected' => '你並無權限去編輯此JavaScript頁面,因為他包含了另一位用戶的個人設定。',
 'ns-specialprotected' => '特殊頁面是不可以編輯的。',
 'titleprotected' => "這個標題已經被[[User:$1|$1]]保護以防止建立。理由是''$2''。",
-'filereadonlyerror' => '無法修改文件" $1 "因為文件庫" $2 "處於唯讀模式。 !
-管理員鎖定它的解釋是:" $3 "。',
-'invalidtitle-knownnamespace' => '使用名字空間“$2”和文本“$3”的無效標題',
+'filereadonlyerror' => '無法修改文件「$1」因為文件庫「$2」處於唯讀模式。 !
+管理員鎖定它的解釋是:「$3」。',
+'invalidtitle-knownnamespace' => '使用名字空間「$2」和文本「$3」的無效標題',
 'invalidtitle-unknownnamespace' => '使用未知名字空間編號$1和文本“$2”的無效標題',
 'exception-nologin' => '未登入',
 'exception-nologin-text' => '你需要登錄此wiki查閲此頁或進行操作。',
@@ -625,10 +670,10 @@ $2',
 不要忘記設置[[Special:Preferences|{{SITENAME}}的個人參數]]。',
 'yourname' => '用戶名:',
 'yourpassword' => '您的密碼:',
-'yourpasswordagain' => '再次輸入密碼:',
+'yourpasswordagain' => '再次輸入密',
 'remembermypassword' => '在這個瀏覽器上記住我的登入資訊(可維持 $1 {{PLURAL:$1|天|天}})',
 'securelogin-stick-https' => '登入後繼續以HTTPS連接',
-'yourdomainname' => '您的網域:',
+'yourdomainname' => '您的網域',
 'password-change-forbidden' => '您不可更改此wiki上的密碼。',
 'externaldberror' => '這可能是由於驗證資料庫錯誤或您被禁止更新您的外部賬號。',
 'login' => '登入',
@@ -645,7 +690,7 @@ $2',
 'gotaccount' => '已經擁有帳號?$1。',
 'gotaccountlink' => '登入',
 'userlogin-resetlink' => '忘記了你的登錄信息?',
-'createaccountmail' => '通過電郵',
+'createaccountmail' => '使用一個臨時的隨機密碼,並將它發送到以下指定的電子郵件地址',
 'createaccountreason' => '理由:',
 'badretype' => '您所輸入的密碼並不相同。',
 'userexists' => '!您所輸入的用戶名稱已經存在,請另選一個名稱。',
@@ -678,9 +723,9 @@ $2',
 
 如果是其他人發出了該請求,或者您已經記起了您的密碼並不準備改變它,
 您可以忽略此消息並繼續使用您的舊密碼。',
-'noemail' => '用戶"$1"沒有登記電子郵件地址。',
+'noemail' => '用戶「$1」沒有登記電子郵件地址。',
 'noemailcreate' => '您需要提供一個有效的電子郵件地址',
-'passwordsent' => '用戶"$1"的新密碼已經寄往所登記的電子郵件地址。
+'passwordsent' => '用戶「$1」的新密碼已經寄往所登記的電子郵件地址。
 請在收到後再登入。',
 'blocked-mailpassword' => '您的IP地址處於查封狀態而不允許編輯,為了安全起見,密碼恢復功能已被禁用。',
 'eauthentsent' => '一封確認信已經發送到所示的地址。在發送其它郵件到此賬戶前,您必須首先依照這封信中的指導確認這個電子郵件信箱真實有效。',
@@ -705,12 +750,13 @@ $2',
 'login-throttled' => '您已經嘗試多次的登入動作。
 請稍等多一會再試。',
 'login-abort-generic' => '登入錯誤 - 中止',
-'loginlanguagelabel' => '語言$1',
+'loginlanguagelabel' => '語言$1',
 'suspicious-userlogout' => '您登出的要求已經被拒絕,因為它可能是由已損壞的瀏覽器或者快取代理傳送。',
 
 # E-mail sending
 'php-mail-error-unknown' => '在 PHP 的 mail() 參數中的未知錯誤',
 'user-mail-no-addy' => '嘗試不帶電郵地址發送電郵。',
+'user-mail-no-body' => '試圖發送空的或主體不合理短的電子郵件。',
 
 # Change password dialog
 'resetpass' => '更改密碼',
@@ -773,6 +819,7 @@ $2
 'changeemail-oldemail' => '當前電郵地址:',
 'changeemail-newemail' => '新電郵地址:',
 'changeemail-none' => '(無)',
+'changeemail-password' => '您的{{SITENAME}}密碼:',
 'changeemail-submit' => '更改電郵',
 'changeemail-cancel' => '取消',
 
@@ -796,10 +843,10 @@ $2
 
 # Edit pages
 'summary' => '摘要:',
-'subject' => '主題:',
+'subject' => '主題',
 'minoredit' => '這是一個小修改',
 'watchthis' => '監視本頁',
-'savearticle' => '儲存頁面',
+'savearticle' => '儲存本頁',
 'preview' => '預覽',
 'showpreview' => '顯示預覽',
 'showlivepreview' => '即時預覽',
@@ -811,7 +858,7 @@ $2
 'missingcommenttext' => '請在下面輸入評論。',
 'missingcommentheader' => "'''提示:''' 您沒有為此評論提供一個標題。如果您再次單擊「{{int:savearticle}}」,您的編輯將不帶標題儲存。",
 'summary-preview' => '摘要預覽:',
-'subject-preview' => '主題/標題預覽:',
+'subject-preview' => '主題/標題預覽:',
 'blockedtitle' => '用戶被查封',
 'blockedtext' => "'''您的用戶名或IP地址已被封禁。'''
 
@@ -851,10 +898,10 @@ $2
 'newarticle' => '(新)',
 'newarticletext' => '您進入了一個尚未建立的頁面。
 要建立該頁面,請在下面的編輯框中輸入內容(詳情參見[[{{MediaWiki:Helppage}}|幫助]])。
-如果您是不小心來到此頁面,直接點擊您瀏覽器中的“返回”按鈕返回。',
+如果您是不小心來到此頁面,直接點擊您瀏覽器中的「返回」按鈕返回。',
 'anontalkpagetext' => "---- ''這是一個還未建立賬號的匿名用戶的對話頁。我們因此只能用IP地址來與他/她聯絡。該IP地址可能由幾名用戶共享。如果您是一名匿名用戶並認為本頁上的評語與您無關,請[[Special:UserLogin/signup|創建新賬號]]或[[Special:UserLogin|登入]]以避免在未來於其他匿名用戶混淆。''",
-'noarticletext' => '此頁目前沒有內容,您可以在其它頁[[Special:Search/{{PAGENAME}}|搜此頁標題]],
-<span class="plainlinks">[{{fullurl:{{#Special:Log}}|page={{FULLPAGENAMEE}}}} 搜有關日誌],
+'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}}}} 搜尋有關日誌]</span>,但您沒有權限建立此頁。',
@@ -862,7 +909,8 @@ $2
 
 這通常是因為過時的頁面歷史鏈接被刪除。
 詳情請閱[{{fullurl:{{#Special:Log}}/delete|page={{FULLPAGENAMEE}}}} 刪除日誌]。',
-'userpage-userdoesnotexist' => '未曾創建用戶名「<nowiki>$1</nowiki>」。請在創建/編輯這個頁面前先檢查一下。',
+'userpage-userdoesnotexist' => '用戶「$1」尚未註冊。
+請在建立/編輯這個頁面前先檢查一下。',
 'userpage-userdoesnotexist-view' => '未曾建立用戶名「$1」。',
 'blocked-notice-logextract' => '這位用戶現正被封鎖。
 下面有最近的封鎖紀錄以供參考:',
@@ -881,7 +929,8 @@ $2
 '''還沒有儲存!'''",
 'sitejspreview' => "'''記住你現在只是預覽此 JavaScript 代碼。'''
 '''還沒有儲存!'''",
-'userinvalidcssjstitle' => "'''警告:''' 不存在面板\"\$1\"。注意自訂的 .css 和 .js 頁要使用小寫標題,例如,{{ns:user}}:Foo/vector.css 不同於 {{ns:user}}:Foo/Vector.css。",
+'userinvalidcssjstitle' => "'''警告:''' 不存在面板「$1」。
+注意自訂的 .css 和 .js 頁要使用小寫標題,例如,{{ns:user}}:Foo/vector.css 不同於 {{ns:user}}:Foo/Vector.css。",
 'updated' => '(已更新)',
 'note' => "'''注意:'''",
 'previewnote' => "'''請記住這只是預覽。'''
@@ -899,10 +948,10 @@ $2
 'token_suffix_mismatch' => "'''由於您用戶端中的編輯信符毀損了一些標點符號字元,為防止編輯的文字損壞,您的編輯已經被拒絕。'''
 這種情況通常出現於使用含有很多臭蟲、以網絡為主的匿名代理服務的時候。",
 'edit_form_incomplete' => '編輯表單的某些部分沒有到達伺服器 ;請檢查您的編輯內容是否完整並再試一次。',
-'editing' => '編輯“$1”',
+'editing' => '編輯「$1」',
 'creating' => '創建$1',
-'editingsection' => '編輯“$1”(段落)',
-'editingcomment' => '編輯“$1”(新段落)',
+'editingsection' => '編輯「$1」(段落)',
+'editingcomment' => '編輯「$1」(新段落)',
 'editconflict' => '編輯衝突:$1',
 'explainconflict' => "有人在{{GENDER:|你|妳|你}}開始編輯後更改了頁面。
 上面的文字框內顯示的是目前本頁的內容。
@@ -926,7 +975,8 @@ $2
 '''不要在未獲授權的情況下發表!'''",
 'longpageerror' => "'''錯誤:您所提交的文本長度有{{PLURAL:$1|1|$1}}KB,這大於{{PLURAL:$2|1|$2}}KB的最大值。 '''
 因此,該文本無法保存。",
-'readonlywarning' => "'''警告: 資料庫被鎖定以進行維護,所以您目前將無法保存您的修改。'''您或許希望先將本段文字複製並保存到文字檔案,然後等一會兒再修改。
+'readonlywarning' => "'''警告: 資料庫被鎖定以進行維護,所以您目前將無法保存您的修改。'''
+您可先複製您的文字並保存到文字檔案,然後等一會兒再修改。
 
 鎖定資料庫的管理員有如下解釋:$1",
 'protectedpagewarning' => "'''警告:本頁已經被保護,只有擁有管理員許可權的用戶才可修改。'''
@@ -943,7 +993,6 @@ $2
 'template-semiprotected' => '(半保護)',
 'hiddencategories' => '這個頁面是屬於$1個隱藏分類的成員:',
 'edittools' => '<!-- 此處的文字將被顯示在編輯和上傳表單以下。 -->',
-'nocreatetitle' => '創建頁面受限',
 'nocreatetext' => '{{SITENAME}}限制了創建新頁面的功能。{{GENDER:|你|妳|你}}可以返回並編輯已有的頁面,或者[[Special:UserLogin|登錄或創建新賬戶]]。',
 'nocreate-loggedin' => '您並無許可權去創建新頁面。',
 'sectioneditnotsupported-title' => '不支持段落編輯',
@@ -969,7 +1018,7 @@ $2
 'defaultmessagetext' => '預設訊息文字',
 'content-failed-to-parse' => '未能轉換$2 內容成為$1:$3',
 'invalid-content-data' => '內容資料無效',
-'content-not-allowed-here' => '[[$2]]不允許"$1"頁上的內容',
+'content-not-allowed-here' => '[[$2]]頁面上不允許「$1」內容',
 
 # Content models
 'content-model-wikitext' => 'wiki語法',
@@ -1015,8 +1064,8 @@ $2
 'viewpagelogs' => '查詢這個頁面的日誌',
 'nohistory' => '沒有本頁的修訂記錄。',
 'currentrev' => '最新修訂版本',
-'currentrev-asof' => '$1的最新修訂版本',
-'revisionasof' => '在$1所做的修訂版本',
+'currentrev-asof' => '$1的最新修訂版本',
+'revisionasof' => '$1的修訂版本',
 'revision-info' => '在$1由$2所做的修訂版本',
 'previousrevision' => '←上一修訂',
 'nextrevision' => '下一修訂→',
@@ -1072,7 +1121,7 @@ $2
 'revdelete-nologid-title' => '無效的日誌項目',
 'revdelete-nologid-text' => '您尚未指定一個目標日誌項目去進行這個動作或指定的項目不存在。',
 'revdelete-no-file' => '指定的檔案不存在。',
-'revdelete-show-file-confirm' => '{{GENDER:|你|妳|你}}是否真的是想去檢視於$2 $3刪除 "$1" 的檔案修訂?',
+'revdelete-show-file-confirm' => '{{GENDER:|你|妳|你}}是否真的是想去檢視於$2 $3刪除「<nowiki>$1</nowiki>」的檔案修訂?',
 'revdelete-show-file-submit' => '是',
 'revdelete-selected' => "'''選取[[:$1]]的$2次修訂:'''",
 'logdelete-selected' => "'''{{PLURAL:$1|選取的日誌項目}}:'''",
@@ -1158,9 +1207,9 @@ $1",
 'mergelogpagetext' => '以下是一個最近由一個頁面的修訂歷史合併到另一個頁面的列表。',
 
 # Diffs
-'history-title' => '$1:修訂歷史',
+'history-title' => '「$1」的修訂歷史',
 'difference-title' => '$1:修訂版本之間的差異',
-'difference-title-multipage' => '"$1"和"$2": 頁面之間的差異',
+'difference-title-multipage' => '頁面「$1」與「$2」之間的差異',
 'difference-multipage' => '(頁面間的差異)',
 'lineno' => '第$1行:',
 'compareselectedversions' => '比較選定的修訂版本',
@@ -1176,9 +1225,9 @@ $1",
 # 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"',
+'searchresulttext' => '有關搜索{{SITENAME}}的更多詳情參見[[{{MediaWiki:Helppage}}|{{int:help}}]]。',
+'searchsubtitle' => "查詢'''[[:$1]]'''([[Special:Prefixindex/$1|所有以「$1」開頭的頁面]]{{int:pipe-separator}}[[Special:WhatLinksHere/$1|所有連結到「$1」的頁面]])",
+'searchsubtitleinvalid' => "查詢'''$1'''",
 'toomanymatches' => '過多的匹配已回應,請嘗試一個不同的查詢',
 'titlematches' => '頁面標題相符',
 'notitlematches' => '沒有找到匹配頁面題目',
@@ -1204,13 +1253,13 @@ $1",
 'searchprofile-project-tooltip' => '在$1中搜尋',
 'searchprofile-images-tooltip' => '搜尋檔案',
 'searchprofile-everything-tooltip' => '搜尋全部(包括討論頁面)',
-'searchprofile-advanced-tooltip' => '在自定名字空間中搜尋',
+'searchprofile-advanced-tooltip' => '在自定名字空間中搜尋',
 'search-result-size' => '$1 ($2個字)',
 'search-result-category-size' => '$1個成員($2個子分類,$3個檔案)',
 'search-result-score' => '相關度: $1%',
 'search-redirect' => '(重定向 $1)',
 'search-section' => '(段落 $1)',
-'search-suggest' => '{{GENDER:|你|妳|你}}是否解: $1',
+'search-suggest' => '{{GENDER:|你|妳|你}}是不是要找:$1',
 'search-interwiki-caption' => '姊妹計劃',
 'search-interwiki-default' => '$1項結果:',
 'search-interwiki-more' => '(更多)',
@@ -1261,9 +1310,9 @@ $1",
 'prefs-personal' => '用戶資料',
 'prefs-rc' => '最近更改',
 'prefs-watchlist' => '監視列表',
-'prefs-watchlist-days' => '監視列表中顯示記錄的天數:',
+'prefs-watchlist-days' => '監視列表中顯示的天數:',
 'prefs-watchlist-days-max' => '最多$1{{PLURAL:$1|天}}',
-'prefs-watchlist-edits' => '在增強的監視列表中顯示的最多更改次數:',
+'prefs-watchlist-edits' => '擴展監視列表中顯示更改次數上限:',
 'prefs-watchlist-edits-max' => '最大數量:1000',
 'prefs-watchlist-token' => '監視列表密鑰:',
 'prefs-misc' => '雜項',
@@ -1295,7 +1344,7 @@ $1",
 'localtime' => '當地時間:',
 'timezoneuseserverdefault' => '使用預設($1)',
 'timezoneuseoffset' => '其他 (指定偏移)',
-'timezoneoffset' => '時差¹:',
+'timezoneoffset' => '時差¹',
 'servertime' => '伺服器時間:',
 'guesstimezone' => '從瀏覽器填寫',
 'timezoneregion-africa' => '非洲',
@@ -1341,10 +1390,10 @@ $1",
 'prefs-help-gender' => '可選:用於軟體中的性別指定。此項資料將會被公開。',
 'email' => '電子郵件',
 'prefs-help-realname' => '真實姓名是可選的。
-如果您選擇提供它,那它便用以對您的貢獻署名。',
+如果您選擇提供它,它會用於貢獻署名。',
 'prefs-help-email' => '電子郵件是可選的,但當您忘記您的密碼時需要將新密碼重設,就會用電郵寄回給您。',
 'prefs-help-email-others' => '您亦可以在您沒有公開自己的用戶身分時透過您的用戶頁或用戶討論頁與您聯繫。',
-'prefs-help-email-required' => 'é\9c\80è¦\81é\9b»å­\90é\83µä»¶å\9c°å\9d\80。',
+'prefs-help-email-required' => 'é\9b»å­\90é\83µä»¶å\9c°å\9d\80æ\98¯å¿\85å¡«é \85ç\9b®。',
 'prefs-info' => '基本資料',
 'prefs-i18n' => '國際化',
 'prefs-signature' => '簽名',
@@ -1372,9 +1421,9 @@ $1",
 'editinguser' => "更改用戶'''[[User:$1|$1]]''' 的用戶權限 $2",
 'userrights-editusergroup' => '編輯用戶群組',
 'saveusergroups' => '保存用戶群組',
-'userrights-groupsmember' => '屬於:',
-'userrights-groupsmember-auto' => '固有屬於:',
-'userrights-groups-help' => '您可以改動這位用戶所屬的群組:
+'userrights-groupsmember' => '屬於',
+'userrights-groupsmember-auto' => '固有屬於',
+'userrights-groups-help' => '您可以改動這位用戶所屬的群組
 * 已剔選的核取方塊代表該用戶屬於該群組。
 * 未剔選的核取方塊代表該用戶不是屬於該群組。
 * 有 * 項目表示一旦您加入該群組之後便不能移除它,反之亦然。',
@@ -1472,15 +1521,13 @@ $1",
 'right-sendemail' => '發電子郵件給其他用戶',
 'right-passwordreset' => '查看重置密碼郵件',
 
+# Special:Log/newusers
+'newuserlogpage' => '新進用戶名冊',
+'newuserlogpagetext' => '這是一個最近被創建用戶的新日誌',
+
 # User rights log
 'rightslog' => '用戶權限日誌',
 'rightslogtext' => '以下記錄了用戶權限的更改記錄。',
-'rightslogentry' => '將 $1 的權限從 $2 改為 $3',
-'rightslogentry-autopromote' => '自動由$2晉升至$3',
-'logentry-rights-rights' => '$1將$3的權限從$4改為$5',
-'logentry-rights-rights-legacy' => '$1更改$3的權限',
-'logentry-rights-autopromote' => '$1的權限自動從$4改為$5',
-'rightsnone' => '無',
 
 # Associated actions - in the sentence "You do not have permission to X"
 'action-read' => '閱讀這個頁面',
@@ -1512,7 +1559,7 @@ $1",
 'action-importupload' => '由一個檔案上載中匯入這個頁面',
 'action-patrol' => '標示其它的編輯為已巡查的',
 'action-autopatrol' => '將您的編輯標示為已巡查的',
-'action-unwatchedpages' => '檢視未被監視的頁面',
+'action-unwatchedpages' => '檢視未被監視的頁面',
 'action-mergehistory' => '合併這個頁面的歷史',
 'action-userrights' => '編輯所有的權限',
 'action-userrights-interwiki' => '編輯在其它wiki上用戶的權限',
@@ -1521,7 +1568,7 @@ $1",
 
 # Recent changes
 'nchanges' => '$1次更改',
-'recentchanges' => '近期變動',
+'recentchanges' => '最近更改',
 'recentchanges-legend' => '最近更改選項',
 'recentchanges-summary' => '跟蹤這個wiki上的最新更改。',
 'recentchanges-feed-description' => '追蹤此訂閱在 wiki 上的最近更改。',
@@ -1546,14 +1593,14 @@ $1",
 'minoreditletter' => '小',
 'newpageletter' => '新',
 'boteditletter' => '機',
-'number_of_watching_users_pageview' => '[$1個關注用戶]',
+'number_of_watching_users_pageview' => '[$1位用戶在監視]',
 'rc_categories' => '分類界限(以"|"分割)',
 'rc_categories_any' => '任意',
 'rc-change-size-new' => '更改後$1字節',
 'newsectionsummary' => '/* $1 */ 新段落',
 'rc-enhanced-expand' => '顯示細節 (需要 JavaScript)',
 'rc-enhanced-hide' => '隱藏細節',
-'rc-old-title' => 'æ\9c\80å\88\9då\89µå»ºç\82º"$1"',
+'rc-old-title' => 'æ\9c\80å\88\9d建ç«\8bç\82ºã\80\8c$1ã\80\8d',
 
 # Recent changes linked
 'recentchangeslinked' => '相關更改',
@@ -1587,29 +1634,29 @@ $1",
 * '''<code><nowiki>[[</nowiki>{{ns:file}}<nowiki>:File.jpg]]</nowiki></code>'''使用檔案的完整版本
 * '''<code><nowiki>[[</nowiki>{{ns:file}}<nowiki>:File.png|200px|thumb|left|替換文字]]</nowiki></code>'''使用放置於左側的一個框內的 200 像素寬的圖片,同時使用「替換文字」作為描述
 * '''<code><nowiki>[[</nowiki>{{ns:media}}<nowiki>:File.ogg]]</nowiki></code>'''直接連結到檔案而不顯示檔案",
-'upload-permitted' => '准許的檔案類型$1。',
-'upload-preferred' => '建議的檔案類型$1。',
-'upload-prohibited' => '禁止的檔案類型$1。',
+'upload-permitted' => '准許的檔案類型$1。',
+'upload-preferred' => '建議的檔案類型$1。',
+'upload-prohibited' => '禁止的檔案類型$1。',
 'uploadlog' => '上載紀錄',
 'uploadlogpage' => '上載紀錄',
 'uploadlogpagetext' => '以下是最近上載的檔案的一覽表。
 檢視[[Special:NewFiles|新檔案畫廊]]去看更富圖片的總覽。',
 'filename' => '檔案名',
 'filedesc' => '檔案描述',
-'fileuploadsummary' => '檔案描述:',
+'fileuploadsummary' => '檔案描述',
 'filereuploadsummary' => '檔案更改說明:',
-'filestatus' => '版權狀態:',
+'filestatus' => '版權狀態',
 'filesource' => '來源:',
 'uploadedfiles' => '已上載檔案',
 'ignorewarning' => '忽略警告並儲存檔案',
 'ignorewarnings' => '忽略所有警告',
 'minlength1' => '檔案名字必須至少有一個字母。',
-'illegalfilename' => '檔案名“$1”包含有頁面標題所禁止的字符。請改名後重新上傳。',
+'illegalfilename' => '檔案名「$1」包含有頁面標題所禁止的字符。請改名後重新上傳。',
 'filename-toolong' => '文件名不能超過240字節。',
 'badfilename' => '檔案名已被改為「$1」。',
 'filetype-mime-mismatch' => '檔案擴展名 ".$1" 不配所偵測檔案的MIME類型 ($2)。',
-'filetype-badmime' => 'MIME類別"$1"不是容許的檔案格式。',
-'filetype-bad-ie-mime' => '不可以上傳這個檔案,因為 Internet Explorer 會將它偵測為 "$1",它是一種不容許以及有潛在危險性之檔案類型。',
+'filetype-badmime' => 'MIME類別「$1」不是容許的檔案格式。',
+'filetype-bad-ie-mime' => '不可以上傳這個檔案,因為 Internet Explorer 會將它偵測為「$1」,它是一種不容許以及有潛在危險性之檔案類型。',
 'filetype-unwanted-type' => "'''\".\$1\"'''是一種不需要的檔案類型。
 建議的{{PLURAL:\$3|一種|多種}}檔案類型有\$2。",
 'filetype-banned-type' => "'''「.$1」'''{{PLURAL:$4|不是允許的檔案類型|是不允許的檔案類型}}。 
@@ -1659,14 +1706,14 @@ $1",
 'php-uploaddisabledtext' => 'PHP 檔案上載已經停用。請檢查 file_uploads 設定。',
 'uploadscripted' => '該檔案包含可能被網路瀏覽器錯誤解釋的 HTML 或腳本代碼。',
 'uploadvirus' => '該檔案包含有病毒!
-詳情$1',
+詳情$1',
 'uploadjava' => '該檔案是 ZIP 檔案,其中包含 Java 的.class 檔案。
 不允許上傳 Java 檔案,是因為他們可能會跳過安全限制。',
 'upload-source' => '來源檔案',
 'sourcefilename' => '來源檔案名:',
 'sourceurl' => '來源網址:',
 'destfilename' => '目標檔案名:',
-'upload-maxfilesize' => '檔案最大限制大小$1',
+'upload-maxfilesize' => '檔案最大限制大小$1',
 'upload-description' => '檔案描述',
 'upload-options' => '上載選項',
 'watchthisupload' => '監視這個檔案',
@@ -1690,33 +1737,33 @@ $1',
 'upload-too-many-redirects' => '在網址中有太多重新定向',
 'upload-unknown-size' => '未知的大小',
 'upload-http-error' => '已發生一個HTTP錯誤:$1',
-'upload-copy-upload-invalid-domain' => '不能從該域名上載檔ð£\97\88å\89¯æ\9c¬ã\80\82',
+'upload-copy-upload-invalid-domain' => '不能從該域名上載檔æ¡\88å\89¯æ\9c¬ã\80\82',
 
 # File backend
-'backend-fail-stream' => '無法流傳送文件$1。',
-'backend-fail-backup' => '無法備份文件$1。',
+'backend-fail-stream' => '無法流傳送文件「$1」。',
+'backend-fail-backup' => '無法備份文件「$1」。',
 'backend-fail-notexists' => '條目$1不存在。',
 'backend-fail-hashes' => '比較無法獲取文件hashes',
-'backend-fail-notsame' => '$1已存在不同的文件。',
-'backend-fail-invalidpath' => '$1不是有效的存儲路徑。',
+'backend-fail-notsame' => '「$1」已存在不同的檔案。',
+'backend-fail-invalidpath' => '「$1」不是有效的存儲路徑。',
 'backend-fail-delete' => '無法刪除「$1」檔案。',
 'backend-fail-describe' => '無法修改檔案「$1」的元數據。',
-'backend-fail-alreadyexists' => '“$1”頁面已存在',
+'backend-fail-alreadyexists' => '檔案「$1」已存在。',
 'backend-fail-store' => '無法在$2存儲文件$1。',
 'backend-fail-copy' => '無法複製文件$1到$2。',
 'backend-fail-move' => '無法移動文件$1到$2。',
 'backend-fail-opentemp' => '無法打開臨時文件。',
 'backend-fail-writetemp' => '無法寫臨時文件。',
 'backend-fail-closetemp' => '無法創建臨時文件。',
-'backend-fail-read' => 'æ\89¾ä¸\8då\88°æ\96\87件â\80\9c$1â\80\9d。',
-'backend-fail-create' => '無法寫入檔案  $1。',
-'backend-fail-maxsize' => '無法寫入檔𣗈$1​​,因為它大於$2字節。',
+'backend-fail-read' => 'æ\89¾ä¸\8då\88°æª\94æ¡\88ã\80\8c$1ã\80\8d。',
+'backend-fail-create' => '無法寫入檔案「$1」。',
+'backend-fail-maxsize' => '無法寫入檔案「$1」​​,因為它大於$2字節。',
 'backend-fail-readonly' => '「$1」儲存後端目前是唯讀模式,因為:「$2」',
-'backend-fail-synced' => '文件"$1"在內部存儲後端是不一致的區域。',
-'backend-fail-connect' => '無法連結至存儲後方“$1”。',
-'backend-fail-internal' => '存儲後方“$1”發生了一個未知錯誤。',
-'backend-fail-contenttype' => '無法確定檔案的內容類型以存儲於“$1”。',
-'backend-fail-batchsize' => '存儲後端被給予了$1次æª\94ð£\97\88 {{PLURAL:$1|æ\93\8dä½\9c\93\8dä½\9c}} ï¼\9bé\99\90å\88¶æ\98¯$2次{{PLURAL:$2|æ\93\8dä½\9c\93\8dä½\9c}}ã\80\82',
+'backend-fail-synced' => '文件「$1」在內部存儲後端是不一致的區域。',
+'backend-fail-connect' => '無法連結至存儲後方「$1」。',
+'backend-fail-internal' => '存儲後方「$1」發生了一個未知錯誤。',
+'backend-fail-contenttype' => '無法確定檔案的內容類型以存儲於「$1」。',
+'backend-fail-batchsize' => '存儲後端被給予了ã\80\8c$1ã\80\8d次æª\94æ¡\88 {{PLURAL:$1|æ\93\8dä½\9c\93\8dä½\9c}} ï¼\9bé\99\90å\88¶æ\98¯$2次{{PLURAL:$2|æ\93\8dä½\9c\93\8dä½\9c}}ã\80\82',
 'backend-fail-usable' => '由於沒有足夠的權限或缺少路徑/容器,所以無法讀取或寫入檔案 $1 。',
 
 # File journal errors
@@ -1760,16 +1807,16 @@ $1',
 它可能是基於CGI的,因而不支持img_auth。
 請參見 https://www.mediawiki.org/wiki/Manual:Image_Authorization',
 'img-auth-notindir' => '所請求的路徑不在已經設定的上載目錄。',
-'img-auth-badtitle' => '不能夠由"$1"建立一個有效標題。',
-'img-auth-nologinnWL' => '您而家並未登入,"$1"不在白名單上。',
-'img-auth-nofile' => '檔案"$1"不存在。',
-'img-auth-isdir' => '您嘗試過存取一個目錄"$1"
+'img-auth-badtitle' => '不能夠由「$1」建立一個有效標題。',
+'img-auth-nologinnWL' => '您而家並未登入,「$1」不在白名單上。',
+'img-auth-nofile' => '檔案「$1」不存在。',
+'img-auth-isdir' => '您嘗試過存取一個目錄「$1」
 只是可以存取檔案。',
-'img-auth-streaming' => '串流中"$1"。',
+'img-auth-streaming' => '串流「$1」中。',
 'img-auth-public' => 'img_auth.php的功能是由一個公共wiki中輸出檔案。
 這個wiki是已經設定做一個公共wiki。
 基於保安最佳化,img_auth.php已經停用。',
-'img-auth-noread' => '用戶無存取權去讀"$1"。',
+'img-auth-noread' => '用戶無權讀取「$1」。',
 'img-auth-bad-query-string' => 'URL有一個無效的查詢字符串',
 
 # HTTP errors
@@ -1788,7 +1835,7 @@ $1',
 'upload-curl-error28' => '上傳超時',
 'upload-curl-error28-text' => '網站回應時間過長。請檢查此網站的訪問是否正常,過一會再進行嘗試。您可能需要在網路訪問空閒時間再次進行嘗試。',
 
-'license' => '授權:',
+'license' => '授權',
 'license-header' => '授權',
 'nolicense' => '未選定',
 'license-nopreview' => '(無預覽可用)',
@@ -1906,7 +1953,7 @@ $1',
 
 # Random redirect
 'randomredirect' => '隨機重定向頁面',
-'randomredirect-nopages' => '在 "$1" 名字空間中沒有重定向頁面。',
+'randomredirect-nopages' => '在「$1」名字空間中沒有重定向頁面。',
 
 # Statistics
 'statistics' => '統計',
@@ -2061,7 +2108,7 @@ Template:消除歧義',
 'allpagessubmit' => '提交',
 'allpagesprefix' => '顯示具有此前綴(名字空間)的頁面:',
 'allpagesbadtitle' => '給定的頁面標題是非法的,或者具有一個內部語言或內部 wiki 的前綴。它可能包含一個或更多的不能用於標題的字元。',
-'allpages-bad-ns' => '在{{SITENAME}}中沒有一個叫做"$1"的名字空間。',
+'allpages-bad-ns' => '在{{SITENAME}}中沒有一個叫做「$1」的名字空間。',
 'allpages-hide-redirects' => '隱藏重定向頁',
 
 # SpecialCachedPage
@@ -2089,7 +2136,7 @@ Template:消除歧義',
 'linksearch-ns' => '名字空間:',
 'linksearch-ok' => '搜尋',
 'linksearch-text' => '可使用通配符,如“*.wikipedia.org”。至少需要一個頂級域名,例如“*.org”。<br />
-支持的協議:<code>$1</code>(若沒有指定協議,預設為http://)。',
+支持的{{PLURAL:$2|協議|協議}}:<code>$1</code>(若沒有指定協議,預設為http://)。',
 'linksearch-line' => '$1 連自 $2',
 'linksearch-error' => '萬用字元僅可在主機名稱的開頭使用。',
 
@@ -2108,10 +2155,6 @@ Template:消除歧義',
 'activeusers-hidesysops' => '隱藏管理員',
 'activeusers-noresult' => '找不到用戶。',
 
-# Special:Log/newusers
-'newuserlogpage' => '新進用戶名冊',
-'newuserlogpagetext' => '這是一個最近被創建用戶的新日誌',
-
 # Special:ListGroupRights
 'listgrouprights' => '用戶群組權限',
 'listgrouprights-summary' => '以下面是一個在這個wiki中定義出來的用戶權限清單,以及它們的存取權。
@@ -2143,7 +2186,7 @@ Template:消除歧義',
 'emailpagetext' => '您可以用下面的表格去寄一封電郵給這位{{Gender:$1|用戶}}。
 您在[[Special:Preferences|您的參數設置]]中所輸入的電子郵件地址將出現在郵件「發件人」一欄中,這樣該用戶就可以回覆您。',
 'usermailererror' => '目標郵件地址返回錯誤:',
-'defemailsubject' => '{{SITENAME}}來自用戶“$1”的電子郵件',
+'defemailsubject' => '{{SITENAME}}來自用戶「$1」的電子郵件',
 'usermaildisabled' => '用戶電郵已停用',
 'usermaildisabledtext' => '您不可以發送電郵到這個wiki上的其他用戶',
 'noemailtitle' => '無e-mail地址',
@@ -2177,10 +2220,10 @@ Template:消除歧義',
 'nowatchlist' => '您的監視列表為空。',
 'watchlistanontext' => '請$1以檢視或編輯您的監視列表。',
 'watchnologin' => '未登入',
-'watchnologintext' => '您必須先[[Special:UserLogin|登入]]
-才能更改您的監視列表',
+'watchnologintext' => '您必須先[[Special:UserLogin|登入]],才能更改您的監視列表。',
 'addwatch' => '加至監視列表',
-'addedwatchtext' => "頁面「[[:$1]]」已經被加入到您的[[Special:Watchlist|監視清單]]中。將來有關此頁面及其討論頁的任何修改將會在那裡列出,而且還會在[[Special:RecentChanges|近期變動]]中以'''粗體'''形式列出以使起更容易識別。",
+'addedwatchtext' => '頁面「[[:$1]]」已加到您的[[Special:Watchlist|監視清單]]中。
+將來有關此頁面及其討論頁的任何修改將會在那裡列出。',
 'removewatch' => '停止監視',
 'removedwatchtext' => '[[:$1]]已經從[[Special:Watchlist|您的監視頁面]]中移除。',
 'watch' => '監視',
@@ -2204,7 +2247,7 @@ Template:消除歧義',
 # Displayed when you click the "watch" button and it is in the process of watching
 'watching' => '正在監視...',
 'unwatching' => '正在停止監視...',
-'watcherrortext' => '在更改你的監視列表設定"$1"時發生了錯誤',
+'watcherrortext' => '更改「$1」的監視列表設定時發生錯誤。',
 
 'enotif_mailer' => '{{SITENAME}}郵件通知器',
 'enotif_reset' => '將所有頁面標為已閱讀',
@@ -2214,7 +2257,7 @@ Template:消除歧義',
 'enotif_subject_moved' => '{{SITENAME}}的「$1」頁面被$2移動',
 'enotif_subject_restored' => '{{SITENAME}}的「$1」頁面被$2恢復',
 'enotif_subject_changed' => '{{SITENAME}}的「$1」頁面被$2修改',
-'enotif_body_intro_deleted' => '{{SITENAME}}的「$1」頁面於$PAGEEDITDATE被$2刪除,請見$3瀏覽當前版本。',
+'enotif_body_intro_deleted' => '{{SITENAME}}的「$1」頁面於$PAGEEDITDATE被$2刪除,請見$3。',
 'enotif_body_intro_created' => '{{SITENAME}}的「$1」頁面於$PAGEEDITDATE被$2建立,請見$3瀏覽當前版本。。',
 'enotif_body_intro_moved' => '{{SITENAME}}的「$1」頁面於$PAGEEDITDATE被$2移動,請見$3瀏覽當前版本。',
 'enotif_body_intro_restored' => '{{SITENAME}}的「$1」頁面於$PAGEEDITDATE被$2恢復,請見$3瀏覽當前版本。',
@@ -2249,6 +2292,8 @@ $UNWATCHURL
 
 回饋和其他幫助:
 {{canonicalurl:{{MediaWiki:Helppage}}}}',
+'created' => '建立了',
+'changed' => '更改',
 
 # Delete
 'deletepage' => '刪除頁面',
@@ -2312,10 +2357,12 @@ $UNWATCHURL
 'unprotectedarticle' => '已解除"[[$1]]"保護',
 'movedarticleprotection' => '已將「[[$2]]」的保護設定移動至「[[$1]]」',
 'protect-title' => '更改「$1」的保護等級',
-'protect-title-notallowed' => '查看“$1”的保護等級',
+'protect-title-notallowed' => '查看「$1」的保護等級',
 'prot_1movedto2' => '[[$1]]移動到[[$2]]',
 'protect-badnamespace-title' => '不可被保護的名字空間',
 'protect-badnamespace-text' => '這個名字空間內的頁面無法被保護。',
+'protect-norestrictiontypes-text' => '此頁不可被保護因沒有任何限制可用。',
+'protect-norestrictiontypes-title' => '不可保護的頁面',
 'protect-legend' => '確認保護',
 'protectcomment' => '理由:',
 'protectexpiry' => '到期:',
@@ -2331,9 +2378,10 @@ $UNWATCHURL
 以下是'''$1'''現時的保護級別:",
 'protect-cascadeon' => '以下的{{PLURAL:$1|一個|多個}}頁面包含着本頁面的同時,啟動了連鎖保護,因此本頁面目前也被保護,未能編輯。您可以設定本頁面的保護級別,但這並不會對連鎖保護有所影響。',
 'protect-default' => '容許所有用戶',
-'protect-fallback' => '需要"$1"的許可',
-'protect-level-autoconfirmed' => '禁止新的和未註冊的用戶',
-'protect-level-sysop' => '僅操作員',
+'protect-fallback' => '僅允許有「$1」權限的用戶',
+'protect-level-autoconfirmed' => '僅允許自動確認使用者',
+'protect-level-sysop' => '僅允許管理員',
+'protect-summary-desc' => '[$1=$2]($3)',
 'protect-summary-cascade' => '連鎖',
 'protect-expiring' => '終止於 $1 (UTC)',
 'protect-expiring-local' => '$1到期',
@@ -2407,7 +2455,7 @@ $UNWATCHURL
 'undelete-no-results' => '刪除記錄裡沒有符合的結果。',
 'undelete-filename-mismatch' => '不能刪除帶有時間截記的檔案修訂 $1: 檔案不匹配',
 'undelete-bad-store-key' => '不能刪除帶有時間截記的檔案修訂 $1: 檔案於刪除前遺失。',
-'undelete-cleanup-error' => '刪除無用的存檔檔案 "$1" 時發生錯誤。',
+'undelete-cleanup-error' => '刪除無用的存檔檔案「$1」時發生錯誤。',
 'undelete-missing-filearchive' => '由於檔案存檔 ID $1 不在資料庫中,不能在檔案存檔中恢復。它可能已經反刪除了。',
 'undelete-error' => '恢復已刪除頁面時出錯',
 'undelete-error-short' => '反刪除檔案時發生錯誤: $1',
@@ -2627,7 +2675,7 @@ $1被封禁的理由是“$2”',
 您應當負責確定所有連結依然會連到指定的頁面。
 
 注意如果新頁面已經有內容的話,頁面將'''不會'''被移動,
-除非新頁面無內容或是重定向頁,而且沒有修訂歷史。
+除非新頁面是重定向頁,而且沒有修訂歷史。
 這意味著您再必要時可以在移動到新頁面後再移回老的頁面,
 同時您也無法覆蓋現有頁面。
 
@@ -2810,8 +2858,9 @@ $1被封禁的理由是“$2”',
 'import-error-edit' => '「$1」無法導入,因為您不准編輯它。',
 'import-error-create' => '「$1」無法導入,因為您不准創造它。',
 'import-error-interwiki' => '頁面"$1"未能導入,這是因為他的頁面名稱預留了供跨維基連結使用。',
-'import-error-special' => '"$1"未能導入因為該頁面使用一個不能創建頁面的特殊名字空間。',
-'import-error-invalid' => '"$1"不能導入,因為名字無效。',
+'import-error-special' => '「$1」未能導入因為該頁面使用一個不能創建頁面的特殊名字空間。',
+'import-error-invalid' => '「$1」不能導入,因為名字無效。',
+'import-error-unserialize' => '頁面「$1」的修訂版本「$2」不能反序列。該修訂版本是以$3內容模式序列為$4。',
 'import-options-wrong' => '{{PLURAL:$2|選項}}出錯:<nowiki>$1</nowiki>',
 'import-rootpage-invalid' => '指定的根頁標題無效。',
 'import-rootpage-nosubpage' => '名字空間「$1」的根頁面不允許子頁面。',
@@ -2828,7 +2877,7 @@ $1被封禁的理由是“$2”',
 'javascripttest' => 'JavaScript測試',
 'javascripttest-title' => '運行$1測試。',
 'javascripttest-pagetext-noframework' => '這個頁面預留了作JavaScript測試。',
-'javascripttest-pagetext-unknownframework' => '未知框架"$1"',
+'javascripttest-pagetext-unknownframework' => '未知的測試框架「$1」。',
 'javascripttest-pagetext-frameworks' => '請選擇以下其中一個測試框架:$1',
 'javascripttest-pagetext-skins' => '選擇運行測試的外觀:',
 'javascripttest-qunit-intro' => '請看mediawiki.org的[$1 測試說明]',
@@ -2882,7 +2931,7 @@ $1被封禁的理由是“$2”',
 'tooltip-ca-nstab-user' => '檢視使用者頁面',
 'tooltip-ca-nstab-media' => '檢視多媒體檔案資訊頁面',
 'tooltip-ca-nstab-special' => '本頁面會隨著資料庫的數據即時更新,任何人均不能直接編輯',
-'tooltip-ca-nstab-project' => '檢視項目頁面',
+'tooltip-ca-nstab-project' => '檢視計劃頁面',
 'tooltip-ca-nstab-image' => '檢視檔案頁面',
 'tooltip-ca-nstab-mediawiki' => '檢視系統資訊',
 'tooltip-ca-nstab-template' => '檢視模板',
@@ -2898,8 +2947,8 @@ $1被封禁的理由是“$2”',
 'tooltip-watchlistedit-raw-submit' => '更新監視列表',
 'tooltip-recreate' => '重建該頁面,無論是否被刪除。',
 'tooltip-upload' => '開始上傳',
-'tooltip-rollback' => '『反轉』可以一按恢復上一位貢獻者對這個頁面的編輯',
-'tooltip-undo' => 'ã\80\8e復å\8e\9fã\80\8f可以在編輯模式上開啟編輯表格以便復原。它容許在摘要中加入原因。',
+'tooltip-rollback' => '按「恢復」恢復上一位貢獻者對本頁面的編輯',
+'tooltip-undo' => 'ã\80\8c復å\8e\9fã\80\8d可以在編輯模式上開啟編輯表格以便復原。它容許在摘要中加入原因。',
 'tooltip-preferences-save' => '儲存使用偏好',
 'tooltip-summary' => '輸入一個簡短的摘要',
 
@@ -2989,7 +3038,8 @@ $1被封禁的理由是“$2”',
 'pageinfo-recent-authors' => '最近作者數目',
 'pageinfo-magic-words' => '魔術{{PLURAL:$1|字|字}}($1)',
 'pageinfo-hidden-categories' => '隱藏{{PLURAL:$1|分類|分類}}($1)',
-'pageinfo-templates' => '被引用的{{PLURAL:$1|模版|模版}}($1)',
+'pageinfo-templates' => '使用的模板($1)',
+'pageinfo-transclusions' => '使用的頁面($1)',
 'pageinfo-toolboxlink' => '頁面資訊',
 'pageinfo-redirectsto' => '重定向到',
 'pageinfo-redirectsto-info' => '資訊',
@@ -2998,6 +3048,10 @@ $1被封禁的理由是“$2”',
 'pageinfo-protect-cascading' => '從此開始連鎖保護',
 'pageinfo-protect-cascading-yes' => '是',
 'pageinfo-protect-cascading-from' => '從此連鎖保護',
+'pageinfo-category-info' => '分類資訊',
+'pageinfo-category-pages' => '頁面數量',
+'pageinfo-category-subcats' => '子分類數量',
+'pageinfo-category-files' => '編輯數量',
 
 # Skin names
 'skinname-standard' => '標準',
@@ -3030,10 +3084,10 @@ $1被封禁的理由是“$2”',
 'filedeleteerror-long' => '當刪除檔案時遇到錯誤:
 
 $1',
-'filedelete-missing' => '因為檔案 "$1" 不存在,所以它不可以刪除。',
-'filedelete-old-unregistered' => '所指定的檔案修訂 "$1" 在資料庫中不存在。',
-'filedelete-current-unregistered' => '所指定的檔案 "$1" 在資料庫中不存在。',
-'filedelete-archive-read-only' => '存檔目錄 "$1" 在網頁伺服器中不可寫。',
+'filedelete-missing' => '因為檔案「$1」不存在,所以它不可以刪除。',
+'filedelete-old-unregistered' => '所指定的檔案修訂「$1」在資料庫中不存在。',
+'filedelete-current-unregistered' => '所指定的檔案「$1」在資料庫中不存在。',
+'filedelete-archive-read-only' => '存檔目錄「$1」在網頁伺服器中不可寫。',
 
 # Browsing diffs
 'previousdiff' => '←上一版本',
@@ -3051,6 +3105,7 @@ $1',
 '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' => '完整解像度',
 'show-big-image-preview' => '此預覽的大小:$1.',
 'show-big-image-other' => '其他{{PLURAL:$2||}}解析度:$1。',
@@ -3080,6 +3135,8 @@ $1',
 'minutes' => '$1分鍾',
 'hours' => '$1小時',
 'days' => '$1天',
+'months' => '{{PLURAL:$1|$1個月|$1個月}}',
+'years' => '{{PLURAL:$1|$1年|$1年}}',
 'ago' => '$1前',
 'just-now' => '剛才',
 
@@ -3689,8 +3746,8 @@ $5
 'signature' => '[[{{ns:user}}:$1|$2]]([[{{ns:user_talk}}:$1|留言]])',
 
 # Core parser functions
-'unknown_extension_tag' => '不明的擴展標籤 "$1"',
-'duplicate-defaultsort' => '警告: 預設的排序鍵 "$2" 覆蓋先前的預設排序鍵 "$1"。',
+'unknown_extension_tag' => '不明的擴展標籤「$1」',
+'duplicate-defaultsort' => '警告: 預設的排序鍵「$2」覆蓋先前的預設排序鍵「$1」。',
 
 # Special:Version
 'version' => '版本',
@@ -3738,9 +3795,9 @@ MediaWiki是基於使用目的而加以發佈,然而不負任何擔保責任
 'fileduplicatesearch-filename' => '檔案名稱:',
 'fileduplicatesearch-submit' => '搜尋',
 'fileduplicatesearch-info' => '$1 × $2 像素<br />檔案大小:$3<br />MIME 類型:$4',
-'fileduplicatesearch-result-1' => '檔案 "$1" 無完全相同的重覆。',
-'fileduplicatesearch-result-n' => '檔案 "$1" 有$2項完全相同的重覆。',
-'fileduplicatesearch-noresults' => '沒有發現名為"$1"的文件。',
+'fileduplicatesearch-result-1' => '檔案「$1」無完全相同的重覆。',
+'fileduplicatesearch-result-n' => '檔案「$1」有$2項完全相同的重覆。',
+'fileduplicatesearch-noresults' => '沒有發現名為「$1」的文件。',
 
 # Special:SpecialPages
 'specialpages' => '特殊頁面',
@@ -3757,7 +3814,7 @@ MediaWiki是基於使用目的而加以發佈,然而不負任何擔保責任
 'specialpages-group-highuse' => '高度使用頁面',
 'specialpages-group-pages' => '頁面清單',
 'specialpages-group-pagetools' => '頁面工具',
-'specialpages-group-wiki' => 'Wiki 資料和工具',
+'specialpages-group-wiki' => '資料和工具',
 'specialpages-group-redirects' => '重新定向特殊頁面',
 'specialpages-group-spam' => '反垃圾工具',
 
@@ -3855,8 +3912,12 @@ MediaWiki是基於使用目的而加以發佈,然而不負任何擔保責任
 'logentry-newusers-newusers' => '已建立用戶「$1」',
 'logentry-newusers-create' => '已建立用戶「$1」',
 'logentry-newusers-create2' => '用戶「$1」建立用戶「$3」',
+'logentry-newusers-byemail' => '$1建立用戶$3並電郵密碼給他',
 'logentry-newusers-autocreate' => '帳戶$1被自動創建',
-'newuserlog-byemail' => '密碼已由電子郵件寄出',
+'logentry-rights-rights' => '$1將$3的權限從$4改為$5',
+'logentry-rights-rights-legacy' => '$1更改$3的權限',
+'logentry-rights-autopromote' => '$1的權限自動從$4改為$5',
+'rightsnone' => '無',
 
 # Feedback
 'feedback-bugornote' => '如果您準備好了詳細描述一個技術問題,請[$1 報告一個bug]。或者,您可以使用下面的簡易表單。您的評論將被添加到頁面“[$3 $2]”,並帶有您的用戶名和使用的瀏覽器。',
@@ -3908,7 +3969,8 @@ MediaWiki是基於使用目的而加以發佈,然而不負任何擔保責任
 'api-error-nomodule' => '內部錯誤:缺少上傳模塊集。',
 'api-error-ok-but-empty' => '內部錯誤:伺服器沒有響應。',
 'api-error-overwrite' => '不允許覆蓋現有檔案。',
-'api-error-stashfailed' => '內部錯誤:伺服器保存臨時文件失敗。',
+'api-error-stashfailed' => '內部錯誤:伺服器保存臨時檔案失敗。',
+'api-error-publishfailed' => '內部錯誤:伺服器發佈臨時檔案失敗。',
 'api-error-timeout' => '伺服器沒有在預期的時間內回應。',
 'api-error-unclassified' => '發生未知錯誤。',
 'api-error-unknown-code' => '未知錯誤:$1',
@@ -3929,6 +3991,4 @@ MediaWiki是基於使用目的而加以發佈,然而不負任何擔保責任
 'duration-centuries' => '$1個世紀',
 'duration-millennia' => '$1千年',
 
-# Unknown messages
-'svg-long-error' => '無效的SVG檔案:$1',
 );
diff --git a/languages/messages/MessagesZh_min_nan.php b/languages/messages/MessagesZh_min_nan.php
deleted file mode 100644 (file)
index 23b4f92..0000000
+++ /dev/null
@@ -1,13 +0,0 @@
-<?php
-/** Min Nan (Bân-lâm-gú/閩南話)
- *
- * See MessagesQqq.php for message documentation incl. usage of parameters
- * To improve a translation please visit http://translatewiki.net
- *
- * @ingroup Language
- * @file
- *
- */
-
-# Inherit everything for now
-$fallback = 'nan';
diff --git a/languages/messages/MessagesZh_yue.php b/languages/messages/MessagesZh_yue.php
deleted file mode 100644 (file)
index a2848f4..0000000
+++ /dev/null
@@ -1,13 +0,0 @@
-<?php
-/** Cantonese (粵語/廣東話)
- *
- * See MessagesQqq.php for message documentation incl. usage of parameters
- * To improve a translation please visit http://translatewiki.net
- *
- * @ingroup Language
- * @file
- *
- */
-
-# Inherit everything for now
-$fallback = 'yue';
index b0371c0..2a8b8e5 100644 (file)
@@ -342,7 +342,7 @@ abstract class Maintenance {
         */
        protected function error( $err, $die = 0 ) {
                $this->outputChanneled( false );
-               if ( php_sapi_name() == 'cli' ) {
+               if ( PHP_SAPI == 'cli' ) {
                        fwrite( STDERR, $err . "\n" );
                } else {
                        print $err;
@@ -936,13 +936,9 @@ abstract class Maintenance {
                $dbw = $this->getDB( DB_MASTER );
                $dbw->begin( __METHOD__ );
 
-               $tbl_arc = $dbw->tableName( 'archive' );
-               $tbl_rev = $dbw->tableName( 'revision' );
-               $tbl_txt = $dbw->tableName( 'text' );
-
                # Get "active" text records from the revisions table
                $this->output( 'Searching for active text records in revisions table...' );
-               $res = $dbw->query( "SELECT DISTINCT rev_text_id FROM $tbl_rev" );
+               $res = $dbw->select( 'revision', 'rev_text_id', array(), __METHOD__, array( 'DISTINCT' ) );
                foreach ( $res as $row ) {
                        $cur[] = $row->rev_text_id;
                }
@@ -950,16 +946,19 @@ abstract class Maintenance {
 
                # Get "active" text records from the archive table
                $this->output( 'Searching for active text records in archive table...' );
-               $res = $dbw->query( "SELECT DISTINCT ar_text_id FROM $tbl_arc" );
+               $res = $dbw->select( 'archive', 'ar_text_id', array(), __METHOD__, array( 'DISTINCT' ) );
                foreach ( $res as $row ) {
-                       $cur[] = $row->ar_text_id;
+                       # old pre-MW 1.5 records can have null ar_text_id's.
+                       if ( $row->ar_text_id !== null ) {
+                               $cur[] = $row->ar_text_id;
+                       }
                }
                $this->output( "done.\n" );
 
                # Get the IDs of all text records not in these sets
                $this->output( 'Searching for inactive text records...' );
-               $set = implode( ', ', $cur );
-               $res = $dbw->query( "SELECT old_id FROM $tbl_txt WHERE old_id NOT IN ( $set )" );
+               $cond = 'old_id NOT IN ( ' . $dbw->makeList( $cur ) . ' )';
+               $res = $dbw->select( 'text', 'old_id', array( $cond ), __METHOD__, array( 'DISTINCT' ) );
                $old = array();
                foreach ( $res as $row ) {
                        $old[] = $row->old_id;
@@ -973,8 +972,7 @@ abstract class Maintenance {
                # Delete as appropriate
                if ( $delete && $count ) {
                        $this->output( 'Deleting...' );
-                       $set = implode( ', ', $old );
-                       $dbw->query( "DELETE FROM $tbl_txt WHERE old_id IN ( $set )" );
+                       $dbw->delete( 'text', array( 'old_id' => $old ), __METHOD__ );
                        $this->output( "done.\n" );
                }
 
@@ -1207,7 +1205,7 @@ abstract class Maintenance {
                        $encPrompt = wfEscapeShellArg( $prompt );
                        $command = "read -er -p $encPrompt && echo \"\$REPLY\"";
                        $encCommand = wfEscapeShellArg( $command );
-                       $line = wfShellExec( "$bash -c $encCommand", $retval );
+                       $line = wfShellExec( "$bash -c $encCommand", $retval, array(), array( 'walltime' => 0 ) );
 
                        if ( $retval == 0 ) {
                                return $line;
diff --git a/maintenance/archives/patch-ufg_group-length-increase-255.sql b/maintenance/archives/patch-ufg_group-length-increase-255.sql
new file mode 100644 (file)
index 0000000..4b7f0d3
--- /dev/null
@@ -0,0 +1,2 @@
+ALTER TABLE /*_*/user_former_groups
+       MODIFY COLUMN ufg_group varbinary(255) NOT NULL default '';
diff --git a/maintenance/archives/patch-ufg_group-length-increase.sql b/maintenance/archives/patch-ufg_group-length-increase.sql
deleted file mode 100644 (file)
index e24cba0..0000000
+++ /dev/null
@@ -1,2 +0,0 @@
-ALTER TABLE /*_*/user_former_groups
-       MODIFY COLUMN ufg_group varbinary(32) NOT NULL default '';
diff --git a/maintenance/archives/patch-ug_group-length-increase-255.sql b/maintenance/archives/patch-ug_group-length-increase-255.sql
new file mode 100644 (file)
index 0000000..79e17ac
--- /dev/null
@@ -0,0 +1,2 @@
+ALTER TABLE /*_*/user_groups
+       MODIFY COLUMN ug_group varbinary(255) NOT NULL default '';
diff --git a/maintenance/archives/patch-ug_group-length-increase.sql b/maintenance/archives/patch-ug_group-length-increase.sql
deleted file mode 100644 (file)
index e944a85..0000000
+++ /dev/null
@@ -1,2 +0,0 @@
-ALTER TABLE /*_*/user_groups
-       MODIFY COLUMN ug_group varbinary(32) NOT NULL default '';
index 591c753..b043196 100644 (file)
@@ -3,7 +3,7 @@
 CREATE TABLE /*_*/user_former_groups (
   -- Key to user_id
   ufg_user int unsigned NOT NULL default 0,
-  ufg_group varbinary(32) NOT NULL default ''
+  ufg_group varbinary(255) NOT NULL default ''
 ) /*$wgDBTableOptions*/;
 
 CREATE UNIQUE INDEX /*i*/ufg_user_group ON /*_*/user_former_groups (ufg_user,ufg_group);
index 81e61b7..0b8b344 100644 (file)
@@ -294,7 +294,7 @@ class TextPassDumper extends BackupDumper {
        }
 
        function setTimeExceeded() {
-               $this->timeExceeded = True;
+               $this->timeExceeded = true;
        }
 
        function checkIfTimeExceeded() {
diff --git a/maintenance/benchmarks/bench_wfBaseConvert.php b/maintenance/benchmarks/bench_wfBaseConvert.php
new file mode 100644 (file)
index 0000000..a1e5c6a
--- /dev/null
@@ -0,0 +1,77 @@
+<?php
+/**
+ * Benchmark for wfBaseConvert
+ *
+ * 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 Benchmark
+ * @author Tyler Romeo
+ */
+
+require_once( __DIR__ . '/Benchmarker.php' );
+
+/**
+ * Maintenance script that benchmarks wfBaseConvert().
+ *
+ * @ingroup Benchmark
+ */
+class bench_wfBaseConvert extends Benchmarker {
+
+       public function __construct() {
+               parent::__construct();
+               $this->mDescription = "Benchmark for wfBaseConvert.";
+               $this->addOption( "inbase", "Input base", false, true );
+               $this->addOption( "outbase", "Output base", false, true );
+               $this->addOption( "length", "Size in digits to generate for input", false, true );
+       }
+
+       public function execute() {
+               $inbase = $this->getOption( "inbase", 36 );
+               $outbase = $this->getOption( "outbase", 16 );
+               $length = $this->getOption( "length", 128 );
+               $number = self::makeRandomNumber( $inbase, $length );
+
+               $this->bench( array(
+                       array(
+                               'function' => 'wfBaseConvert',
+                               'args' => array( $number, $inbase, $outbase, 0, true, 'php' )
+                       ),
+                       array(
+                               'function' => 'wfBaseConvert',
+                               'args' => array( $number, $inbase, $outbase, 0, true, 'bcmath' )
+                       ),
+                       array(
+                               'function' => 'wfBaseConvert',
+                               'args' => array( $number, $inbase, $outbase, 0, true, 'gmp' )
+                       ),
+               ));
+
+               $this->output( $this->getFormattedResults() );
+       }
+
+       protected static function makeRandomNumber( $base, $length ) {
+               $baseChars = "0123456789abcdefghijklmnopqrstuvwxyz";
+               $res = "";
+               for( $i = 0; $i < $length; $i++ ) {
+                       $res .= $baseChars[mt_rand(0, $base - 1)];
+               }
+               return $res;
+       }
+}
+
+$maintClass = 'bench_wfBaseConvert';
+require_once( RUN_MAINTENANCE_IF_MAIN );
index 0a22f58..1e44e23 100644 (file)
@@ -368,4 +368,3 @@ class CheckSyntax extends Maintenance {
 
 $maintClass = "CheckSyntax";
 require_once( RUN_MAINTENANCE_IF_MAIN );
-
index dc03c34..441e8ae 100644 (file)
@@ -44,6 +44,7 @@ class UploadStashCleanup extends Maintenance {
                global $wgUploadStashMaxAge;
 
                $repo = RepoGroup::singleton()->getLocalRepo();
+               $tempRepo = $repo->getTempRepo();
 
                $dbr = $repo->getSlaveDb();
 
@@ -58,54 +59,80 @@ class UploadStashCleanup extends Maintenance {
                        __METHOD__
                );
 
-               if( !is_object( $res ) || $res->numRows() == 0 ) {
-                       $this->output( "No files to cleanup!\n" );
-                       // nothing to do.
-                       return;
-               }
-
-               // finish the read before starting writes.
-               $keys = array();
-               foreach( $res as $row ) {
-                       array_push( $keys, $row->us_key );
-               }
+               // Delete all registered stash files...
+               if ( $res->numRows() == 0 ) {
+                       $this->output( "No stashed files to cleanup according to the DB.\n" );
+               } else {
+                       // finish the read before starting writes.
+                       $keys = array();
+                       foreach( $res as $row ) {
+                               array_push( $keys, $row->us_key );
+                       }
 
-               $this->output( 'Removing ' . count( $keys ) . " file(s)...\n" );
-               // this could be done some other, more direct/efficient way, but using
-               // UploadStash's own methods means it's less likely to fall accidentally
-               // out-of-date someday
-               $stash = new UploadStash( $repo );
+                       $this->output( 'Removing ' . count( $keys ) . " file(s)...\n" );
+                       // this could be done some other, more direct/efficient way, but using
+                       // UploadStash's own methods means it's less likely to fall accidentally
+                       // out-of-date someday
+                       $stash = new UploadStash( $repo );
 
-               $i = 0;
-               foreach( $keys as $key ) {
-                       $i++;
-                       try {
-                               $stash->getFile( $key, true );
-                               $stash->removeFileNoAuth( $key );
-                       } catch ( UploadStashBadPathException $ex ) {
-                               $this->output( "Failed removing stashed upload with key: $key\n"  );
-                       } catch ( UploadStashZeroLengthFileException $ex ) {
-                               $this->output( "Failed removing stashed upload with key: $key\n"  );
-                       }
-                       if ( $i % 100 == 0 ) {
-                               $this->output( "$i\n" );
+                       $i = 0;
+                       foreach( $keys as $key ) {
+                               $i++;
+                               try {
+                                       $stash->getFile( $key, true );
+                                       $stash->removeFileNoAuth( $key );
+                               } catch ( UploadStashBadPathException $ex ) {
+                                       $this->output( "Failed removing stashed upload with key: $key\n"  );
+                               } catch ( UploadStashZeroLengthFileException $ex ) {
+                                       $this->output( "Failed removing stashed upload with key: $key\n"  );
+                               }
+                               if ( $i % 100 == 0 ) {
+                                       $this->output( "$i\n" );
+                               }
                        }
+                       $this->output( "$i done\n" );
                }
-               $this->output( "$i done\n" );
 
-               $tempRepo = $repo->getTempRepo();
+               // Delete all the corresponding thumbnails...
                $dir      = $tempRepo->getZonePath( 'thumb' );
                $iterator = $tempRepo->getBackend()->getFileList( array( 'dir' => $dir ) );
-
                $this->output( "Deleting old thumbnails...\n" );
                $i = 0;
                foreach ( $iterator as $file ) {
-                       $i++;
                        if ( wfTimestamp( TS_UNIX, $tempRepo->getFileTimestamp( "$dir/$file" ) ) < $cutoff ) {
-                               $tempRepo->quickPurge( "$dir/$file" );
+                               $status = $tempRepo->quickPurge( "$dir/$file" );
+                               if ( !$status->isOK() ) {
+                                       $this->error( print_r( $status->getErrorsArray(), true ) );
+                               }
+                               if ( ( ++$i % 100 ) == 0 ) {
+                                       $this->output( "$i\n" );
+                               }
                        }
-                       if ( $i % 100 == 0 ) {
-                               $this->output( "$i\n" );
+               }
+               $this->output( "$i done\n" );
+
+               // Apparently lots of stash files are not registered in the DB...
+               $dir      = $tempRepo->getZonePath( 'public' );
+               $iterator = $tempRepo->getBackend()->getFileList( array( 'dir' => $dir ) );
+               $this->output( "Deleting orphaned temp files...\n" );
+               if ( strpos( $dir, '/local-temp' ) === false ) { // sanity check
+                       $this->error( "Temp repo is not using the temp container.", 1 ); // die
+               }
+               $i = 0;
+               foreach ( $iterator as $file ) {
+                       // Absolute sanity check for stashed files and file segments
+                       if ( !preg_match( '#(^\d{14}!|\.\d+\.\w+\.\d+$)#', basename( $file ) ) ) {
+                               $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 ) {
+                                       $this->output( "$i\n" );
+                               }
                        }
                }
                $this->output( "$i done\n" );
index aebdee1..4e3c7fa 100644 (file)
@@ -134,6 +134,17 @@ class CopyFileBackend extends Maintenance {
                $ops = array();
                $fsFiles = array();
                $copiedRel = array(); // for output message
+
+               // Download the batch of source files into backend cache...
+               if ( $this->hasOption( 'missingonly' ) ) {
+                       $srcPaths = array();
+                       foreach ( $srcPathsRel as $srcPathRel ) {
+                               $srcPaths[] = $src->getRootStoragePath() . "/$backendRel/$srcPathRel";
+                       }
+                       $fsFiles = $src->getLocalReferenceMulti( array( 'srcs' => $srcPaths, 'latest' => 1 ) );
+               }
+
+               // Determine what files need to be copied over...
                foreach ( $srcPathsRel as $srcPathRel ) {
                        $srcPath = $src->getRootStoragePath() . "/$backendRel/$srcPathRel";
                        $dstPath = $dst->getRootStoragePath() . "/$backendRel/$srcPathRel";
@@ -144,8 +155,9 @@ class CopyFileBackend extends Maintenance {
                                $this->output( "Already have $srcPathRel.\n" );
                                continue; // assume already copied...
                        }
-                       // Note: getLocalReference() is fast for FS backends
-                       $fsFile = $src->getLocalReference( array( 'src' => $srcPath, 'latest' => 1 ) );
+                       $fsFile = array_key_exists( $srcPath, $fsFiles )
+                               ? $fsFiles[$srcPath]
+                               : $src->getLocalReference( array( 'src' => $srcPath, 'latest' => 1 ) );
                        if ( !$fsFile ) {
                                $this->error( "Could not get local copy of $srcPath.", 1 ); // die
                        } elseif ( !$fsFile->exists() ) {
@@ -167,6 +179,7 @@ class CopyFileBackend extends Maintenance {
                        $copiedRel[] = $srcPathRel;
                }
 
+               // Copy in the batch of source files...
                $t_start = microtime( true );
                $status = $dst->doQuickOperations( $ops, array( 'bypassReadOnly' => 1 ) );
                if ( !$status->isOK() ) {
diff --git a/maintenance/deleteEqualMessages.php b/maintenance/deleteEqualMessages.php
new file mode 100644 (file)
index 0000000..38e6956
--- /dev/null
@@ -0,0 +1,143 @@
+<?php
+/**
+ * This program is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation; either version 2 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License along
+ * with this program; if not, write to the Free Software Foundation, Inc.,
+ * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
+ * http://www.gnu.org/copyleft/gpl.html
+ *
+ * @file
+ * @ingroup Maintenance
+ */
+
+require_once( __DIR__ . '/Maintenance.php' );
+
+/**
+ * Maintenance script that deletes all pages in the MediaWiki namespace
+ * of which the content is equal to the system default.
+ *
+ * @ingroup Maintenance
+ */
+class DeleteEqualMessages extends Maintenance {
+       public function __construct() {
+               parent::__construct();
+               $this->mDescription = "Deletes all pages in the MediaWiki namespace that are equal to the default message";
+               $this->addOption( 'delete', 'Actually delete the pages' );
+               $this->addOption( 'delete-talk', 'Don\'t leave orphaned talk pages behind' );
+               $this->addOption( 'lang-code', 'Check for subpages of this lang-code (default: root page against content language)', false, true );
+       }
+
+       public function execute() {
+               global $wgUser, $wgContLang;
+
+               $doDelete = $this->hasOption( 'delete' );
+               $doDeleteTalk = $this->hasOption( 'delete-talk' );
+               $forLangCode = $this->getOption( 'lang-code' );
+
+               if ( $forLangCode ) {
+                       $langObj = Language::factory( $forLangCode );
+                       $langCode = $langObj->getCode();
+                       $nonContLang = true;
+               } else {
+                       $langObj = $wgContLang;
+                       $langCode = $wgContLang->getCode();
+                       $nonContLang = false;
+               }
+
+               $this->output( "Checking for pages with default message..." );
+
+               /* Based on SpecialAllmessages::reallyDoQuery #filter=modified */
+
+               $messageNames = Language::getLocalisationCache()->getSubitemList( 'en', 'messages' );
+               // Normalise message names for NS_MEDIAWIKI page_title
+               $messageNames = array_map( array( $langObj, 'ucfirst' ), $messageNames );
+               // TODO: Do the below for each language code (e.g. delete /xxx subpage if equal to MessagesXxx)
+               // Right now it only takes care of the root override, which is enough since most wikis aren't multi-lang wikis.
+               $statuses = AllmessagesTablePager::getCustomisedStatuses( $messageNames, $langCode, $nonContLang );
+
+               $relevantPages = 0;
+               $equalPages = 0;
+               $equalPagesTalks = 0;
+               $results = array();
+               foreach ( $messageNames as $key ) {
+                       $customised = isset( $statuses['pages'][$key] );
+                       if ( $customised ) {
+                               $actual = wfMessage( $key )->inLanguage( $langCode )->plain();
+                               $default = wfMessage( $key )->inLanguage( $langCode )->useDatabase( false )->plain();
+
+                               $relevantPages++;
+                               if ( $actual === $default ) {
+                                       $hasTalk = isset( $statuses['talks'][$key] );
+                                       $results[] = array(
+                                               'title' => $key,
+                                               'hasTalk' => $hasTalk,
+                                       );
+                                       $equalPages++;
+                                       if ( $hasTalk ) {
+                                               $equalPagesTalks++;
+                                       }
+                               }
+                       }
+               }
+
+               if ( $equalPages === 0 ) {
+                       // No more equal messages left
+                       $this->output( "done.\n" );
+                       return;
+               }
+
+               $this->output( "\n{$relevantPages} pages in the MediaWiki namespace override messages." );
+               $this->output( "\n{$equalPages} pages are equal to the default message ({$equalPagesTalks} talk pages).\n" );
+
+               if ( !$doDelete ) {
+                       $this->output( "\nRun the script again with --delete to delete these pages" );
+                       if ( $equalPagesTalks !== 0 ) {
+                               $this->output( " (include --delete-talk to also delete the talk pages)" );
+                       }
+                       $this->output( "\n" );
+                       return;
+               }
+
+               $user = User::newFromName( 'MediaWiki default' );
+               if ( !$user ) {
+                       $this->error( "Invalid username", true );
+               }
+               $wgUser = $user;
+
+               // Hide deletions from RecentChanges
+               $user->addGroup( 'bot' );
+
+               // Handle deletion
+               $this->output( "\n...deleting equal messages (this may take a long time!)...", 'msg' );
+               $dbw = wfGetDB( DB_MASTER );
+               foreach ( $results as $result ) {
+                       wfWaitForSlaves();
+                       $dbw->ping();
+                       $dbw->begin( __METHOD__ );
+                       $title = Title::makeTitle( NS_MEDIAWIKI, $result['title'] );
+                       $page = WikiPage::factory( $title );
+                       $error = ''; // Passed by ref
+                       $page->doDeleteArticle( 'No longer required', false, 0, false, $error, $user );
+                       if ( $result['hasTalk'] && $doDeleteTalk ) {
+                               $title = Title::makeTitle( NS_MEDIAWIKI_TALK, $result['title'] );
+                               $page = WikiPage::factory( $title );
+                               $error = ''; // Passed by ref
+                               $page->doDeleteArticle( 'Orphaned talk page of no longer required message', false, 0, false, $error, $user );
+                       }
+                       $dbw->commit( __METHOD__ );
+               }
+               $this->output( "done!\n", 'msg' );
+       }
+}
+
+$maintClass = "DeleteEqualMessages";
+require_once( RUN_MAINTENANCE_IF_MAIN );
index 4f82a63..114aefd 100644 (file)
@@ -101,4 +101,3 @@ class DeleteOldRevisions extends Maintenance {
 
 $maintClass = "DeleteOldRevisions";
 require_once( RUN_MAINTENANCE_IF_MAIN );
-
index dcbf739..f0da9a8 100644 (file)
@@ -91,4 +91,3 @@ class DeleteOrphanedRevisions extends Maintenance {
 
 $maintClass = "DeleteOrphanedRevisions";
 require_once( RUN_MAINTENANCE_IF_MAIN );
-
index ac96f45..1d5070b 100644 (file)
@@ -21,7 +21,7 @@
  * @file
  */
 
-if ( php_sapi_name() != 'cli-server' ) {
+if ( PHP_SAPI != 'cli-server' ) {
        die( "This script can only be run by php's cli-server sapi." );
 }
 
index 2bb2a0f..f470aed 100644 (file)
@@ -111,8 +111,10 @@ try {
 
        // Potentially debug globals
        $maintenance->globals();
+
+       // log profiling info
+       wfLogProfilingData();
 } catch ( MWException $mwe ) {
        echo( $mwe->getText() );
        exit( 1 );
 }
-
index 153fdd7..08aae29 100644 (file)
@@ -76,4 +76,3 @@ class DumpLinks extends Maintenance {
 
 $maintClass = "DumpLinks";
 require_once( RUN_MAINTENANCE_IF_MAIN );
-
index ad4c12f..93fc3e7 100644 (file)
@@ -93,4 +93,3 @@ class EditCLI extends Maintenance {
 
 $maintClass = "EditCLI";
 require_once( RUN_MAINTENANCE_IF_MAIN );
-
index 69cf548..95f46ff 100644 (file)
@@ -80,5 +80,3 @@ while ( ( $line = Maintenance::readconsole() ) !== false ) {
 }
 
 print "\n";
-
-
index d98cfe3..4cb5e10 100644 (file)
@@ -55,7 +55,8 @@ class TestFileOpPerformance extends Maintenance {
 
                $profiler = Profiler::instance();
                $profiler->setTemplated( true );
-               $profiler->logData(); // prints
+
+               //NOTE: as of MW1.21, $profiler->logData() is called implicitly by doMaintenance.php.
        }
 
        protected function doPerfTest( FileBackend $backend ) {
index 8bf556f..ab7603d 100644 (file)
@@ -67,7 +67,7 @@ class FixSlaveDesync extends Maintenance {
                $dbw = wfGetDB( DB_MASTER );
                $masterIDs = array();
                $res = $dbw->select( 'page', array( 'page_id', 'page_latest' ), array( 'page_id<6054123' ), __METHOD__ );
-               $this->output( "Number of pages: " . $dbw->numRows( $res ) . "\n" );
+               $this->output( "Number of pages: " . $res->numRows() . "\n" );
                foreach ( $res as $row ) {
                        $masterIDs[$row->page_id] = $row->page_latest;
                        if ( !( ++$n % 10000 ) ) {
index 600ca97..691ed80 100644 (file)
@@ -76,5 +76,3 @@ class MaintenanceFormatInstallDoc extends Maintenance {
 
 $maintClass = 'MaintenanceFormatInstallDoc';
 require_once( RUN_MAINTENANCE_IF_MAIN );
-
-
index 1c96a57..445a3fb 100644 (file)
@@ -2041,7 +2041,7 @@ class api extends pageTest {
        }
 
        // Adds all the elements to the array, using the specified prefix.
-       private static function addListParams( &$array, $prefix, $elements )  {
+       private static function addListParams( &$array, $prefix, $elements ) {
                foreach ( $elements as $element ) {
                        $array[$prefix . $element] = self::getParamDetails( $element );
                }
@@ -2709,5 +2709,3 @@ for ( $count = 0; true; $count++ ) {
                break;
        }
 }
-
-
index ac5d144..2b3d551 100644 (file)
  *
  * @param $dir string Path to directory to search
  * @param $exts Array of extensions to search for
+ * @param $recurse Bool Search subdirectories recursively
  * @return mixed Array of filenames on success, or false on failure
  */
-function findFiles( $dir, $exts ) {
+function findFiles( $dir, $exts, $recurse = false ) {
        if ( is_dir( $dir ) ) {
                $dhl = opendir( $dir );
                if ( $dhl ) {
@@ -38,8 +39,11 @@ function findFiles( $dir, $exts ) {
                        while ( ( $file = readdir( $dhl ) ) !== false ) {
                                if ( is_file( $dir . '/' . $file ) ) {
                                        list( /* $name */, $ext ) = splitFilename( $dir . '/' . $file );
-                                       if ( array_search( strtolower( $ext ), $exts ) !== false )
+                                       if ( array_search( strtolower( $ext ), $exts ) !== false ) {
                                                $files[] = $dir . '/' . $file;
+                                       }
+                               } elseif ( $recurse && is_dir( $dir . '/' . $file ) && $file !== '..' && $file !== '.' ) {
+                                       $files = array_merge( $files, findFiles( $dir . '/' . $file, $exts, true ) );
                                }
                        }
                        return $files;
index d94b948..782f502 100644 (file)
@@ -64,7 +64,7 @@ $extensions = isset( $options['extensions'] )
        : $wgFileExtensions;
 
 # Search the path provided for candidates for import
-$files = findFiles( $dir, $extensions );
+$files = findFiles( $dir, $extensions, isset( $options['search-recursively'] ) );
 
 # Initialise the user for this operation
 $user = isset( $options['user'] )
@@ -332,6 +332,7 @@ Options:
 --from=<name>           Ignore all files until the one with the given name. Useful for resuming
                         aborted imports. <name> should be the file's canonical database form.
 --skip-dupes            Skip images that were already uploaded under a different name (check SHA1)
+--search-recursively    Search recursively for files in subdirectories
 --sleep=<sec>           Sleep between files. Useful mostly for debugging.
 --user=<username>       Set username of uploader, default 'Maintenance script'
 --check-userblock       Check if the user got blocked during import.
index b76f921..b1c16ad 100644 (file)
@@ -581,14 +581,14 @@ class languages {
                # Check default namespace name
                if( isset( $this->mNamespaceNames[$code][NS_PROJECT_TALK] ) ) {
                        $default = $this->mNamespaceNames[$code][NS_PROJECT_TALK];
-                       if ( strpos( $default, '$1' ) === FALSE ) {
+                       if ( strpos( $default, '$1' ) === false ) {
                                $namespaces[$default] = 'default';
                        }
                }
 
                # Check namespace aliases
                foreach( $this->mNamespaceAliases[$code] as $key => $value ) {
-                       if ( $value == NS_PROJECT_TALK && strpos( $key, '$1' ) === FALSE ) {
+                       if ( $value == NS_PROJECT_TALK && strpos( $key, '$1' ) === false ) {
                                $namespaces[$key] = '';
                        }
                }
index d22070f..3b2292f 100644 (file)
@@ -214,10 +214,11 @@ $wgIgnoredMessages = array(
        '1movedto2',
        '1movedto2_redir',
        'move-redirect-suppressed',
-       // 'newuserlog-byemail',
        'newuserlog-create-entry',
        'newuserlog-create2-entry',
        'newuserlog-autocreate-entry',
+       'rightslogentry',
+       'rightslogentry-autopromote',
        'suppressedarticle',
        'deletedarticle',
        // 'uploadedimage',
@@ -365,6 +366,7 @@ $wgOptionalMessages = array(
        'exif-maxaperturevalue-value',
        'exif-subjectnewscode-value',
        'booksources-isbn',
+       'protect-summary-desc',
        'sp-contributions-explain',
        'sorbs',
        'video-dims',
@@ -480,6 +482,8 @@ $wgOptionalMessages = array(
        'categoryviewer-pagedlinks',
        'undelete-revisionrow',
        'pageinfo-redirects-value',
+       'created', // @deprecated. Remove in MediaWiki 1.23.
+       'changed', // @deprecated. Remove in MediaWiki 1.23.
 );
 
 /** EXIF messages, which may be set as optional in several checks, but are generally mandatory */
index 87625b0..1ab22e2 100644 (file)
@@ -167,6 +167,7 @@ $wgMessageStructure = array(
                'newwindow',
                'cancel',
                'moredotdotdot',
+               'morenotlisted',
                'mypage',
                'mytalk',
                'anontalk',
@@ -513,6 +514,7 @@ $wgMessageStructure = array(
                'php-mail-error',
                'php-mail-error-unknown',
                'user-mail-no-addy',
+               'user-mail-no-body',
        ),
        'resetpass' => array(
                'resetpass',
@@ -672,7 +674,6 @@ $wgMessageStructure = array(
                'hiddencategories',
                'edittools',
                'edittools-upload',
-               'nocreatetitle',
                'nocreatetext',
                'nocreate-loggedin',
                'sectioneditnotsupported-title',
@@ -1189,15 +1190,13 @@ $wgMessageStructure = array(
                'right-sendemail',
                'right-passwordreset',
        ),
+       'newuserlog' => array(
+               'newuserlogpage',
+               'newuserlogpagetext',
+       ),
        'rightslog' => array(
                'rightslog',
                'rightslogtext',
-               'rightslogentry',
-               'rightslogentry-autopromote',
-               'logentry-rights-rights',
-               'logentry-rights-rights-legacy',
-               'logentry-rights-autopromote',
-               'rightsnone',
        ),
        'action' => array(
                'action-read',
@@ -1849,10 +1848,6 @@ $wgMessageStructure = array(
                'activeusers-submit',
                'activeusers-noresult',
        ),
-       'newuserlog' => array(
-               'newuserlogpage',
-               'newuserlogpagetext',
-       ),
        'listgrouprights' => array(
                'listgrouprights',
                'listgrouprights-summary',
@@ -1965,6 +1960,8 @@ $wgMessageStructure = array(
                'enotif_lastdiff',
                'enotif_anon_editor',
                'enotif_body',
+               'created',
+               'changed',
        ),
        'delete' => array(
                'deletepage',
@@ -2022,6 +2019,8 @@ $wgMessageStructure = array(
                'prot_1movedto2',
                'protect-badnamespace-title',
                'protect-badnamespace-text',
+               'protect-norestrictiontypes-text',
+               'protect-norestrictiontypes-title',
                'protect-legend',
                'protectcomment',
                'protectexpiry',
@@ -2037,6 +2036,7 @@ $wgMessageStructure = array(
                'protect-fallback',
                'protect-level-autoconfirmed',
                'protect-level-sysop',
+               'protect-summary-desc',
                'protect-summary-cascade',
                'protect-expiring',
                'protect-expiring-local',
@@ -2717,6 +2717,7 @@ $wgMessageStructure = array(
                'pageinfo-magic-words',
                'pageinfo-hidden-categories',
                'pageinfo-templates',
+               'pageinfo-transclusions',
                'pageinfo-footer',
                'pageinfo-toolboxlink',
                'pageinfo-redirectsto',
@@ -2726,6 +2727,10 @@ $wgMessageStructure = array(
                'pageinfo-protect-cascading',
                'pageinfo-protect-cascading-yes',
                'pageinfo-protect-cascading-from',
+               'pageinfo-category-info',
+               'pageinfo-category-pages',
+               'pageinfo-category-subcats',
+               'pageinfo-category-files'
        ),
        'skin' => array(
                'skinname-standard',
@@ -2782,6 +2787,7 @@ $wgMessageStructure = array(
                'file-nohires',
                'svg-long-desc',
                'svg-long-desc-animated',
+               'svg-long-error',
                'show-big-image',
                'show-big-image-preview',
                'show-big-image-other',
@@ -2816,6 +2822,8 @@ $wgMessageStructure = array(
                'minutes',
                'hours',
                'days',
+               'months',
+               'years',
                'ago',
                'just-now',
        ),
@@ -3727,8 +3735,12 @@ $wgMessageStructure = array(
                'logentry-newusers-newusers',
                'logentry-newusers-create',
                'logentry-newusers-create2',
+               'logentry-newusers-byemail',
                'logentry-newusers-autocreate',
-               'newuserlog-byemail',
+               'logentry-rights-rights',
+               'logentry-rights-rights-legacy',
+               'logentry-rights-autopromote',
+               'rightsnone',
        ),
        'logging-irc' => array(
                'revdelete-logentry',
@@ -3749,7 +3761,6 @@ $wgMessageStructure = array(
                '1movedto2',
                '1movedto2_redir',
                'move-redirect-suppressed',
-               // 'newuserlog-byemail',
                'newuserlog-create-entry',
                'newuserlog-create2-entry',
                'newuserlog-autocreate-entry',
@@ -3757,6 +3768,8 @@ $wgMessageStructure = array(
                'deletedarticle',
                // 'uploadedimage',
                // 'overwroteimage',
+               'rightslogentry',
+               'rightslogentry-autopromote',
        ),
        'feedback' => array(
                'feedback-bugornote',
@@ -3809,6 +3822,7 @@ $wgMessageStructure = array(
                'api-error-ok-but-empty',
                'api-error-overwrite',
                'api-error-stashfailed',
+               'api-error-publishfailed',
                'api-error-timeout',
                'api-error-unclassified',
                'api-error-unknown-code',
diff --git a/maintenance/language/zhtable/.gitignore b/maintenance/language/zhtable/.gitignore
new file mode 100644 (file)
index 0000000..c4cf2eb
--- /dev/null
@@ -0,0 +1,3 @@
+*.zip
+*.tar.gz
+*.tgz
diff --git a/maintenance/language/zhtable/Makefile b/maintenance/language/zhtable/Makefile
new file mode 100644 (file)
index 0000000..9d3637f
--- /dev/null
@@ -0,0 +1,2 @@
+../../../includes/ZhConversion.php: Makefile.py $(wildcard *.manual)
+       ./Makefile.py
diff --git a/maintenance/language/zhtable/Makefile.py b/maintenance/language/zhtable/Makefile.py
new file mode 100755 (executable)
index 0000000..7e19794
--- /dev/null
@@ -0,0 +1,391 @@
+#!/usr/bin/env python
+# -*- coding: utf-8 -*-
+# @author Philip
+import tarfile as tf
+import zipfile as zf
+import os, re, shutil, sys, platform
+
+pyversion = platform.python_version()
+islinux = platform.system().lower() == 'linux'
+
+if pyversion[:3] in ['2.6', '2.7']:
+    import urllib as urllib_request
+    import codecs
+    open = codecs.open
+    _unichr = unichr
+    if sys.maxunicode < 0x10000:
+        def unichr(i):
+            if i < 0x10000:
+                return _unichr(i)
+            else:
+                return _unichr( 0xD7C0 + ( i>>10 ) ) + _unichr( 0xDC00 + ( i & 0x3FF ) )
+elif pyversion[:2] == '3.':
+    import urllib.request as urllib_request
+    unichr = chr
+
+def unichr2( *args ):
+    return [unichr( int( i.split('<')[0][2:], 16 ) ) for i in args]
+
+def unichr3( *args ):
+    return [unichr( int( i[2:7], 16 ) ) for i in args if i[2:7]]
+
+# DEFINE
+UNIHAN_VER = '6.2.0'
+SF_MIRROR = 'dfn'
+SCIM_TABLES_VER = '0.5.11'
+SCIM_PINYIN_VER = '0.5.92'
+LIBTABE_VER = '0.2.3'
+# END OF DEFINE
+
+def download( url, dest ):
+    if os.path.isfile( dest ):
+        print( 'File %s is up to date.' % dest )
+        return
+    global islinux
+    if islinux:
+        # we use wget instead urlretrieve under Linux, 
+        # because wget could display details like download progress
+        os.system( 'wget %s -O %s' % ( url, dest ) )
+    else:
+        print( 'Downloading from [%s] ...' % url )
+        urllib_request.urlretrieve( url, dest )
+        print( 'Download complete.\n' )
+    return
+
+def uncompress( fp, member, encoding = 'U8' ):
+    name = member.rsplit( '/', 1 )[-1]
+    print( 'Extracting %s ...' % name )
+    fp.extract( member )
+    shutil.move( member, name )
+    if '/' in member:
+        shutil.rmtree( member.split( '/', 1 )[0] )
+    return open( name, 'rb', encoding, 'ignore' )
+
+unzip = lambda path, member, encoding = 'U8': \
+        uncompress( zf.ZipFile( path ), member, encoding )
+
+untargz = lambda path, member, encoding = 'U8': \
+        uncompress( tf.open( path, 'r:gz' ), member, encoding )
+
+def parserCore( fp, pos, beginmark = None, endmark = None ):
+    if beginmark and endmark:
+        start = False
+    else: start = True
+    mlist = set()
+    for line in fp:
+        if beginmark and line.startswith( beginmark ):
+            start = True
+            continue
+        elif endmark and line.startswith( endmark ):
+            break
+        if start and not line.startswith( '#' ):
+            elems = line.split()
+            if len( elems ) < 2:
+                continue
+            elif len( elems[0] ) > 1 and \
+                len( elems[pos] ) > 1: # words only
+                mlist.add( elems[pos] )
+    return mlist
+
+def tablesParser( path, name ):
+    """ Read file from scim-tables and parse it. """
+    global SCIM_TABLES_VER
+    src = 'scim-tables-%s/tables/zh/%s' % ( SCIM_TABLES_VER, name )
+    fp = untargz( path, src, 'U8' )
+    return parserCore( fp, 1, 'BEGIN_TABLE', 'END_TABLE' )
+
+ezbigParser = lambda path: tablesParser( path, 'EZ-Big.txt.in' )
+wubiParser = lambda path: tablesParser( path, 'Wubi.txt.in' )
+zrmParser = lambda path: tablesParser( path, 'Ziranma.txt.in' )
+
+def phraseParser( path ):
+    """ Read phrase_lib.txt and parse it. """
+    global SCIM_PINYIN_VER
+    src = 'scim-pinyin-%s/data/phrase_lib.txt' % SCIM_PINYIN_VER
+    dst = 'phrase_lib.txt'
+    fp = untargz( path, src, 'U8' )
+    return parserCore( fp, 0 )
+
+def tsiParser( path ):
+    """ Read tsi.src and parse it. """
+    src = 'libtabe/tsi-src/tsi.src'
+    dst = 'tsi.src'
+    fp = untargz( path, src, 'big5hkscs' )
+    return parserCore( fp, 0 )
+
+def unihanParser( path ):
+    """ Read Unihan_Variants.txt and parse it. """
+    fp = unzip( path, 'Unihan_Variants.txt', 'U8' )
+    t2s = dict()
+    s2t = dict()
+    for line in fp:
+        if line.startswith( '#' ):
+            continue
+        else:
+            elems = line.split()
+            if len( elems ) < 3:
+                continue
+            type = elems.pop( 1 )
+            elems = unichr2( *elems )
+            if type == 'kTraditionalVariant':
+                s2t[elems[0]] = elems[1:]
+            elif type == 'kSimplifiedVariant':
+                t2s[elems[0]] = elems[1:]
+    fp.close()
+    return ( t2s, s2t )
+
+def applyExcludes( mlist, path ):
+    """ Apply exclude rules from path to mlist. """
+    excludes = open( path, 'rb', 'U8' ).read().split()
+    excludes = [word.split( '#' )[0].strip() for word in excludes]
+    excludes = '|'.join( excludes )
+    excptn = re.compile( '.*(?:%s).*' % excludes )
+    diff = [mword for mword in mlist if excptn.search( mword )]
+    mlist.difference_update( diff )
+    return mlist
+
+def charManualTable( path ):
+    fp = open( path, 'rb', 'U8' )
+    ret = {}
+    for line in fp:
+        elems = line.split( '#' )[0].split( '|' )
+        elems = unichr3( *elems )
+        if len( elems ) > 1:
+            ret[elems[0]] = elems[1:]
+    return ret
+        
+def toManyRules( src_table ):
+    tomany = set()
+    for ( f, t ) in src_table.iteritems():
+        for i in range( 1, len( t ) ):
+            tomany.add( t[i] )
+    return tomany
+
+def removeRules( path, table ):
+    fp = open( path, 'rb', 'U8' )
+    texc = list()
+    for line in fp:
+        elems = line.split( '=>' )
+        f = t = elems[0].strip()
+        if len( elems ) == 2:
+            t = elems[1].strip()
+        f = f.strip('"').strip("'")
+        t = t.strip('"').strip("'")
+        if f:
+            try:
+                table.pop( f )
+            except:
+                pass
+        if t:
+            texc.append( t )
+    texcptn = re.compile( '^(?:%s)$' % '|'.join( texc ) )
+    for (tmp_f, tmp_t) in table.copy().iteritems():
+        if texcptn.match( tmp_t ):
+            table.pop( tmp_f )
+    return table
+
+def customRules( path ):
+    fp = open( path, 'rb', 'U8' )
+    ret = dict()
+    for line in fp:
+        elems = line.split( '#' )[0].split()
+        if len( elems ) > 1:
+            ret[elems[0]] = elems[1]
+    return ret
+
+def dictToSortedList( src_table, pos ):
+    return sorted( src_table.items(), key = lambda m: m[pos] )
+
+def translate( text, conv_table ):
+    i = 0
+    while i < len( text ):
+        for j in range( len( text ) - i, 0, -1 ):
+            f = text[i:][:j]
+            t = conv_table.get( f )
+            if t:
+                text = text[:i] + t + text[i:][j:]
+                i += len(t) - 1
+                break
+        i += 1
+    return text
+
+def manualWordsTable( path, conv_table, reconv_table ):
+    fp = open( path, 'rb', 'U8' )
+    reconv_table = {}
+    wordlist = [line.split( '#' )[0].strip() for line in fp]
+    wordlist = list( set( wordlist ) )
+    wordlist.sort( key = len, reverse = True )
+    while wordlist:
+        word = wordlist.pop()
+        new_word = translate( word, conv_table )
+        rcv_word = translate( word, reconv_table )
+        if word != rcv_word:
+            reconv_table[word] = word
+        reconv_table[new_word] = word
+    return reconv_table
+
+def defaultWordsTable( src_wordlist, src_tomany, char_conv_table, char_reconv_table ):
+    wordlist = list( src_wordlist )
+    wordlist.sort( key = len, reverse = True )
+    word_conv_table = {}
+    word_reconv_table = {}
+    conv_table = char_conv_table.copy()
+    reconv_table = char_reconv_table.copy()
+    tomanyptn = re.compile( '(?:%s)' % '|'.join( src_tomany ) )
+    while wordlist:
+        conv_table.update( word_conv_table )
+        reconv_table.update( word_reconv_table )
+        word = wordlist.pop()
+        new_word_len = word_len = len( word )
+        while new_word_len == word_len:
+            add = False
+            test_word = translate( word, reconv_table )
+            new_word = translate( word, conv_table )
+            if not reconv_table.get( new_word ) \
+               and ( test_word != word \
+               or ( tomanyptn.search( word ) \
+               and word != translate( new_word, reconv_table ) ) ):
+                word_conv_table[word] = new_word
+                word_reconv_table[new_word] = word
+            try:
+                word = wordlist.pop()
+            except IndexError:
+                break
+            new_word_len = len(word)
+    return word_reconv_table
+
+def PHPArray( table ):
+    lines = ['\'%s\' => \'%s\',' % (f, t) for (f, t) in table if f and t]
+    return '\n'.join(lines)
+
+def main():
+    #Get Unihan.zip:
+    url = 'http://www.unicode.org/Public/%s/ucd/Unihan.zip' % UNIHAN_VER
+    han_dest = 'Unihan.zip'
+    download( url, han_dest )
+    
+    # Get scim-tables-$(SCIM_TABLES_VER).tar.gz:
+    url  = 'http://%s.dl.sourceforge.net/sourceforge/scim/scim-tables-%s.tar.gz' % ( SF_MIRROR, SCIM_TABLES_VER )
+    tbe_dest = 'scim-tables-%s.tar.gz' % SCIM_TABLES_VER
+    download( url, tbe_dest )
+    
+    # Get scim-pinyin-$(SCIM_PINYIN_VER).tar.gz:
+    url  = 'http://%s.dl.sourceforge.net/sourceforge/scim/scim-pinyin-%s.tar.gz' % ( SF_MIRROR, SCIM_PINYIN_VER )
+    pyn_dest = 'scim-pinyin-%s.tar.gz' % SCIM_PINYIN_VER
+    download( url, pyn_dest )
+    
+    # Get libtabe-$(LIBTABE_VER).tgz:
+    url  = 'http://%s.dl.sourceforge.net/sourceforge/libtabe/libtabe-%s.tgz' % ( SF_MIRROR, LIBTABE_VER )
+    lbt_dest = 'libtabe-%s.tgz' % LIBTABE_VER
+    download( url, lbt_dest )
+    
+    # Unihan.txt
+    ( t2s_1tomany, s2t_1tomany ) = unihanParser( han_dest )
+
+    t2s_1tomany.update( charManualTable( 'trad2simp.manual' ) )
+    s2t_1tomany.update( charManualTable( 'simp2trad.manual' ) )
+    
+    t2s_1to1 = dict( [( f, t[0] ) for ( f, t ) in t2s_1tomany.iteritems()] )
+    s2t_1to1 = dict( [( f, t[0] ) for ( f, t ) in s2t_1tomany.iteritems()] )
+    
+    s_tomany = toManyRules( t2s_1tomany )
+    t_tomany = toManyRules( s2t_1tomany )
+
+    # noconvert rules
+    t2s_1to1 = removeRules( 'trad2simp_noconvert.manual', t2s_1to1 )
+    s2t_1to1 = removeRules( 'simp2trad_noconvert.manual', s2t_1to1 )
+    
+    # the supper set for word to word conversion
+    t2s_1to1_supp = t2s_1to1.copy()
+    s2t_1to1_supp = s2t_1to1.copy()
+    t2s_1to1_supp.update( customRules( 'trad2simp_supp_set.manual' ) )
+    s2t_1to1_supp.update( customRules( 'simp2trad_supp_set.manual' ) )
+    
+    # word to word manual rules
+    t2s_word2word_manual = manualWordsTable( 'simpphrases.manual', s2t_1to1_supp, t2s_1to1_supp )
+    t2s_word2word_manual.update( customRules( 'toSimp.manual' ) )
+    s2t_word2word_manual = manualWordsTable( 'tradphrases.manual', t2s_1to1_supp, s2t_1to1_supp )
+    s2t_word2word_manual.update( customRules( 'toTrad.manual' ) )
+
+    # word to word rules from input methods
+    t_wordlist = set()
+    s_wordlist = set()
+    t_wordlist.update( ezbigParser( tbe_dest ),
+                       tsiParser( lbt_dest ) )
+    s_wordlist.update( wubiParser( tbe_dest ),
+                       zrmParser( tbe_dest ),
+                       phraseParser( pyn_dest ) )
+
+    # exclude
+    s_wordlist = applyExcludes( s_wordlist, 'simpphrases_exclude.manual' )
+    t_wordlist = applyExcludes( t_wordlist, 'tradphrases_exclude.manual' )
+
+    s2t_supp = s2t_1to1_supp.copy()
+    s2t_supp.update( s2t_word2word_manual )
+    t2s_supp = t2s_1to1_supp.copy()
+    t2s_supp.update( t2s_word2word_manual )
+
+    # parse list to dict
+    t2s_word2word = defaultWordsTable( s_wordlist, s_tomany, s2t_1to1_supp, t2s_supp )
+    t2s_word2word.update( t2s_word2word_manual )
+    s2t_word2word = defaultWordsTable( t_wordlist, t_tomany, t2s_1to1_supp, s2t_supp )
+    s2t_word2word.update( s2t_word2word_manual )
+    
+    # Final tables
+    # sorted list toHans
+    t2s_1to1 = dict( [( f, t ) for ( f, t ) in t2s_1to1.iteritems() if f != t] )
+    toHans = dictToSortedList( t2s_1to1, 0 ) + dictToSortedList( t2s_word2word, 1 )
+    # sorted list toHant
+    s2t_1to1 = dict( [( f, t ) for ( f, t ) in s2t_1to1.iteritems() if f != t] )
+    toHant = dictToSortedList( s2t_1to1, 0 ) + dictToSortedList( s2t_word2word, 1 )
+    # sorted list toCN
+    toCN = dictToSortedList( customRules( 'toCN.manual' ), 1 )
+    # sorted list toHK
+    toHK = dictToSortedList( customRules( 'toHK.manual' ), 1 )
+    # sorted list toSG
+    toSG = dictToSortedList( customRules( 'toSG.manual' ), 1 )
+    # sorted list toTW
+    toTW = dictToSortedList( customRules( 'toTW.manual' ), 1 )
+    
+    # Get PHP Array
+    php = '''<?php
+/**
+ * Simplified / Traditional Chinese conversion tables
+ *
+ * Automatically generated using code and data in includes/zhtable/
+ * Do not modify directly!
+ *
+ * @file
+ */
+
+$zh2Hant = array(\n'''
+    php += PHPArray( toHant ) \
+        +  '\n);\n\n$zh2Hans = array(\n' \
+        +  PHPArray( toHans ) \
+        +  '\n);\n\n$zh2TW = array(\n' \
+        +  PHPArray( toTW ) \
+        +  '\n);\n\n$zh2HK = array(\n' \
+        +  PHPArray( toHK ) \
+        +  '\n);\n\n$zh2CN = array(\n' \
+        +  PHPArray( toCN ) \
+        +  '\n);\n\n$zh2SG = array(\n' \
+        +  PHPArray( toSG ) \
+        +  '\n);\n'
+    
+    f = open( os.path.join( '..', '..', '..', 'includes', 'ZhConversion.php' ), 'wb', encoding = 'utf8' )
+    print ('Writing ZhConversion.php ... ')
+    f.write( php )
+    f.close()
+    
+    # Remove temporary files
+    print ('Deleting temporary files ... ')
+    os.remove('EZ-Big.txt.in')
+    os.remove('phrase_lib.txt')
+    os.remove('tsi.src')
+    os.remove('Unihan_Variants.txt')
+    os.remove('Wubi.txt.in')
+    os.remove('Ziranma.txt.in')
+    
+
+if __name__ == '__main__':
+    main()
diff --git a/maintenance/language/zhtable/README b/maintenance/language/zhtable/README
new file mode 100644 (file)
index 0000000..7e3f87e
--- /dev/null
@@ -0,0 +1,33 @@
+The various .manual files contains special mappings not included in the
+unihan database, and phrases not included in the SCIM package. 
+
+- simp2trad.manual: Simplified to Traditional character mapping. Most
+  data adapted from
+
+   冯寿忠,“非对称繁简字”对照表, 《语文建设通讯》1997-9第53期.
+   /http://www.yywzw.com/jt/feng/fengb01.htm
+
+- trad2simp.manual: Traditional to Simplified character mapping.
+
+- simp2trad_noconvert.manual: Do not convert the chars as inapporiate.
+
+- trad2simp_noconvert.manual: Do not convert the chars as inapporiate.
+
+- tradphrases.manual: Phrases in Traditional Chinese. A portition is obtained
+  from the TongWen package (http://tongwen.mozdev.org/)
+
+- simpphrases.manual: Phrases in Simplified Chinese.
+
+- tradphrases_exclude.manual: Excluding several phrases from 
+  the SCIM phrases as inappoiated.
+
+- simpphrases_exclude.manual: Excluding several phrases from
+  the SCIM phrases as inapporated.
+
+- toTrad.manual, toSimp.manual: Special phrase mappings that 
+  tradphrases.manual or simphrases.manual cannot be handled.
+
+- toTW.manual, toCN.manual, toSG.manual and toHK.manual: Special phrase
+  mappings. 
+
+zhengzhu at gmail dot com & shinjiman at gmail dot com
diff --git a/maintenance/language/zhtable/simp2trad.manual b/maintenance/language/zhtable/simp2trad.manual
new file mode 100644 (file)
index 0000000..1b84f8e
--- /dev/null
@@ -0,0 +1,372 @@
+U+03CE0㳠|U+06FBE澾|
+U+0447D䑽|U+26A99𦪙|
+U+0497A䥺|U+091FE釾|
+U+0497D䥽|U+093FA鏺|
+U+04983䦃|U+0942F鐯|
+U+04985䦅|U+09425鐥|
+U+04B6A䭪|U+297AF𩞯|
+U+04C9F䲟|U+09BA3鮣|
+U+04CA0䲠|U+09C06鰆|
+U+04CA1䲡|U+09C0C鰌|
+U+04CA2䲢|U+09C27鰧|
+U+04CA3䲣|U+04C77䱷|
+U+04DAE䶮|U+09F91龑|
+U+04E07万|U+0842C萬|U+04E07万|
+U+04E0E与|U+08207與|U+04E0E与|
+U+04E11丑|U+04E11丑|U+0919C醜|
+U+04E2A个|U+0500B個|U+07B87箇|
+U+04E30丰|U+08C50豐|U+04E30丰|
+U+04E3A为|U+070BA為|U+07232爲|
+U+04E48么|U+04E48么|U+09EBD麽|U+05E7A幺|U+09EBC麼|
+U+04E86了|U+04E86了|U+077AD瞭|
+U+04E8E于|U+065BC於|U+04E8E于|
+U+04E91云|U+096F2雲|U+04E91云|
+U+04EA7产|U+07522產|U+07523産|
+U+04EC6仆|U+04EC6仆|U+050D5僕|
+U+04EC7仇|U+04EC7仇|U+08B8E讎|
+U+04ED1仑|U+04F96侖|U+05D19崙|
+U+04EF7价|U+050F9價|U+04EF7价|
+U+04F17众|U+0773E眾|U+08846衆|
+U+04F19伙|U+04F19伙|U+05925夥|
+U+04F2A伪|U+0507D偽|U+050DE僞|
+U+04F53体|U+09AD4體|U+04F53体|
+U+04F59余|U+04F59余|U+09918餘|
+U+04F63佣|U+04F63佣|U+050AD傭|
+U+0501F借|U+0501F借|U+085C9藉|
+U+0513F儿|U+05152兒|U+0513F儿|
+U+0514B克|U+0514B克|U+0524B剋|
+U+0515A党|U+09EE8黨|U+0515A党|
+U+051AC冬|U+051AC冬|U+09F15鼕|
+U+051B2冲|U+06C96沖|U+0885D衝|
+U+051C6准|U+051C6准|U+06E96準|
+U+051E0几|U+05E7E幾|U+051E0几|
+U+051EB凫|U+09CE7鳧|U+09CEC鳬|
+U+051FA出|U+051FA出|U+09F63齣|
+U+05212划|U+05283劃|U+05212划|
+U+0522B别|U+05225別|U+05F46彆|
+U+0522E刮|U+0522E刮|U+098B3颳|
+U+05236制|U+05236制|U+088FD製|
+U+05343千|U+05343千|U+097C6韆|
+U+05347升|U+05347升|U+06607昇|U+0965E陞|
+U+0535C卜|U+0535C卜|U+08514蔔|
+U+05360占|U+05360占|U+04F54佔|
+U+05364卤|U+09E75鹵|U+06EF7滷|
+U+05377卷|U+05377卷|U+06372捲|
+U+0537A卺|U+05DF9巹|
+U+05382厂|U+05EE0廠|U+05382厂|
+U+05386历|U+06B77歷|U+066C6曆|U+053A4厤|
+U+05395厕|U+05EC1廁|U+053A0厠|
+U+05398厘|U+05398厘|U+091D0釐|
+U+053D1发|U+0767C發|U+09AEE髮|
+U+053EA只|U+053EA只|U+096BB隻|
+U+053F0台|U+053F0台|U+081FA臺|U+06AAF檯|U+098B1颱|
+U+053F6叶|U+08449葉|U+053F6叶|
+U+05401吁|U+05401吁|U+07C72籲|
+U+05408合|U+05408合|U+095A4閤|
+U+0540A吊|U+0540A吊|U+05F14弔|
+U+0540C同|U+0540C同|U+08855衕|
+U+0540E后|U+05F8C後|U+0540E后|
+U+05411向|U+05411向|U+056AE嚮|U+066CF曏|
+U+0542F启|U+0555F啟|U+05553啓|
+U+05446呆|U+05446呆|U+07343獃|
+U+054B8咸|U+054B8咸|U+09E79鹹|
+U+054C4哄|U+054C4哄|U+09B28鬨|
+U+05582喂|U+05582喂|U+09935餵|
+U+056DE回|U+056DE回|U+08FF4迴|
+U+056E2团|U+05718團|U+07CF0糰|
+U+056F0困|U+056F0困|U+0774F睏|
+U+05742坂|U+05742坂|U+0962A阪|
+U+0574F坏|U+058DE壞|U+0574F坏|
+U+0575B坛|U+058C7壇|U+07F48罈|
+U+057FC埼|U+057FC埼|U+07895碕|
+U+05899墙|U+07246牆|U+058BB墻|
+U+058F3壳|U+06BBC殼|U+06BBB殻|
+U+0590D复|U+05FA9復|U+08907複|
+U+05956奖|U+0734E獎|U+0596C奬|
+U+05978奸|U+05978奸|U+059E6姦|
+U+059AB妫|U+05AAF媯|U+05B00嬀|
+U+059DC姜|U+059DC姜|U+08591薑|
+U+05B81宁|U+05BE7寧|U+05B81宁|
+U+05BB6家|U+05BB6家|U+050A2傢|
+U+05C3D尽|U+076E1盡|U+05118儘|
+U+05CB3岳|U+05CB3岳|U+05DBD嶽|
+U+05E03布|U+05E03布|U+04F48佈|
+U+05E18帘|U+07C3E簾|U+05E18帘|
+U+05E5E幞|U+08946襆|
+U+05E72干|U+05E72干|U+04E7E乾|U+05E79幹|U+069A6榦|
+U+05E76并|U+04E26並|U+04F75併|
+U+05E78幸|U+05E78幸|U+05016倖|
+U+05E7F广|U+05EE3廣|U+05E7F广|
+U+05E84庄|U+05E84庄|U+0838A莊|
+U+05EB5庵|U+05EB5庵|U+083F4菴|
+U+05F25弥|U+05F4C彌|U+07030瀰|
+U+05F53当|U+07576當|U+05679噹|
+U+05F55录|U+09304錄|U+09332録|
+U+05F69彩|U+05F69彩|U+07DB5綵|
+U+05F81征|U+05F81征|U+05FB5徵|
+U+05FA1御|U+05FA1御|U+079A6禦|
+U+05FD7志|U+05FD7志|U+08A8C誌|
+U+06076恶|U+060E1惡|U+05641噁|
+U+060AB悫|U+06128愨|U+06164慤|
+U+0613F愿|U+09858願|U+0613F愿|
+U+0621A戚|U+0621A戚|U+0617C慼|U+093DA鏚|
+U+0624D才|U+0624D才|U+07E94纔|
+U+0624E扎|U+0624E扎|U+07D2E紮|
+U+06258托|U+06258托|U+08A17託|
+U+06298折|U+06298折|U+0647A摺|
+U+062C5担|U+064D4擔|U+062C5担|
+U+062FC拼|U+062FC拼|U+062DA拚|
+U+06328挨|U+06328挨|U+06371捱|
+U+0633D挽|U+0633D挽|U+08F13輓|
+U+0636E据|U+064DA據|U+0636E据|
+U+06597斗|U+06597斗|U+09B25鬥|
+U+065CB旋|U+065CB旋|U+0955F镟|
+U+065D7旗|U+065D7旗|U+065C2旂|
+U+066F2曲|U+066F2曲|U+09EAF麯|U+09EB4麯|
+U+0672F术|U+08853術|U+0672E朮|
+U+06731朱|U+06731朱|U+07843硃|
+U+06734朴|U+06734朴|U+06A38樸|
+U+0676F杯|U+0676F杯|U+076C3盃|
+U+0677E松|U+0677E松|U+09B06鬆|
+U+0677F板|U+0677F板|U+095C6闆|
+U+06781极|U+06975極|U+06781极|
+U+067DC柜|U+06AC3櫃|U+067DC柜|
+U+06817栗|U+06817栗|U+06144慄|
+U+06881梁|U+06881梁|U+06A11樑|
+U+068F1棱|U+068F1棱|U+07A1C稜|
+U+06B32欲|U+06B32欲|U+0617E慾|
+U+06C47汇|U+0532F匯|U+06ED9滙|U+05F59彙|
+U+06C84沄|U+06C84沄|U+06F90澐|
+U+06C88沈|U+06C88沈|U+0700B瀋|
+U+06CA9沩|U+06E88溈|U+06F59潙|
+U+06CE8注|U+06CE8注|U+08A3B註|
+U+06D82涂|U+05857塗|U+06D82涂|
+U+06D8C涌|U+06D8C涌|U+06E67湧|
+U+06DC0淀|U+06DC0淀|U+06FB1澱|
+U+06E38游|U+06E38游|U+0904A遊|
+U+06EAF溯|U+06EAF溯|U+06CDD泝|
+U+06F13漓|U+06F13漓|U+07055灕|
+U+070BC炼|U+07149煉|U+0934A鍊|
+U+0753B画|U+0756B畫|U+07575畵|
+U+075C7症|U+075C7症|U+07665癥|
+U+07618瘘|U+0763A瘺|U+0763B瘻|
+U+0786E确|U+078BA確|U+0786E确|
+U+07877硷|U+07906礆|U+09E7C鹼|
+U+079CB秋|U+079CB秋|U+097A6鞦|
+U+079CD种|U+07A2E種|U+079CD种|
+U+07A57穗|U+07A57穗|U+07E50繐|
+U+07AD6竖|U+08C4E豎|U+07AEA竪|
+U+07B51筑|U+07BC9築|U+07B51筑|
+U+07B7E签|U+07C3D簽|U+07C64籤|
+U+07CFB系|U+07CFB系|U+07E6B繫|U+04FC2係|
+U+07D2F累|U+07D2F累|U+07E8D纍|
+U+07EA4纤|U+07E96纖|U+07E34縴|
+U+07EBF线|U+07DDA線|U+07DAB綫|
+U+07EDD绝|U+07D55絕|U+07D76絶|
+U+07EE3绣|U+07D89綉|U+07E61繡|
+U+07EE6绦|U+07D5B絛|U+07E27縧|
+U+07EF1绱|U+07DD4緔|U+0979D鞝|
+U+07EF7绷|U+07DB3綳|U+07E43繃|
+U+07EFF绿|U+07DA0綠|U+07DD1緑|
+U+07F30缰|U+097C1韁|U+07E6E繮|
+U+07FA1羡|U+07FA8羨|
+U+080DC胜|U+052DD勝|U+080DC胜|
+U+080E1胡|U+080E1胡|U+09B0D鬍|U+0885A衚|
+U+0810F脏|U+081DF臟|U+09AD2髒|
+U+0814A腊|U+081D8臘|U+0814A腊|
+U+081F4致|U+081F4致|U+07DFB緻|
+U+0820D舍|U+0820D舍|U+06368捨|
+U+082B8芸|U+082B8芸|U+08553蕓|
+U+082CE苎|U+082E7苧|
+U+082CF苏|U+08607蘇|U+056CC囌|U+07C64甦|
+U+082E7苧|U+085B4薴|
+U+082F9苹|U+0860B蘋|U+082F9苹|
+U+08303范|U+08303范|U+07BC4範|
+U+0836F药|U+0846F葯|U+085E5藥|
+U+083B7获|U+07372獲|U+07A6B穫|
+U+083BC莼|U+08493蒓|U+084F4蓴|
+U+08499蒙|U+08499蒙|U+077C7矇|U+06FDB濛|U+061DE懞|
+U+084D1蓑|U+084D1蓑|U+07C11簑|
+U+08511蔑|U+08511蔑|U+0884A衊|
+U+08574蕴|U+0860A蘊|U+085F4藴|
+U+0866B虫|U+087F2蟲|U+0866B虫|
+U+08721蜡|U+0881F蠟|U+08721蜡|
+U+0874E蝎|U+0880D蠍|
+U+08868表|U+08868表|U+09336錶|
+U+08BF4说|U+08AAA說|U+08AAC説|
+U+08C23谣|U+08B20謠|U+08B21謡|
+U+08C2B谫|U+08B7E譾|U+08B2D謭|
+U+08C37谷|U+08C37谷|U+07A40穀|
+U+08D43赃|U+08D13贓|U+08D1C贜|
+U+08D4D赍|U+09F4E齎|U+08CEB賫|
+U+08D5D赝|U+08D17贗|U+08D0B贋|
+U+08D5E赞|U+08D0A贊|U+08B9A讚|
+U+08F9F辟|U+08F9F辟|U+095E2闢|
+U+09002适|U+09069適|U+09002适|
+U+090C1郁|U+090C1郁|U+09B31鬱|
+U+0915D酝|U+0919E醞|U+09196醖|
+U+09170酰|U+09170酰|U+091AF醯|
+U+09178酸|U+09178酸|U+075E0痠|
+U+091C7采|U+091C7采|U+063A1採|U+057F0埰|
+U+091CC里|U+091CC里|U+088E1裡|U+088CF裏|
+U+093AD鎭|U+093AE鎮|
+U+0949F钟|U+0937E鍾|U+09418鐘|
+U+094A9钩|U+09264鉤|U+0920E鈎|
+U+094B5钵|U+07F3D缽|U+09262鉢|
+U+094F2铲|U+093DF鏟|U+05277剷|
+U+09508锈|U+092B9銹|U+093FD鏽|
+U+09510锐|U+092B3銳|U+092ED鋭|
+U+09528锨|U+06774杴|U+09341鍁|
+U+0954C镌|U+0942B鐫|U+093B8鎸|
+U+09562镢|U+09481钁|U+0941D鐝|
+U+09605阅|U+095B1閱|U+095B2閲|
+U+096C7雇|U+096C7雇|U+050F1僱|
+U+096D5雕|U+096D5雕|U+09D70鵰|
+U+09709霉|U+09709霉|U+09EF4黴|
+U+09762面|U+09762面|U+09EB5麵|U+09EAA麪|U+09EAB麫|
+U+097B2鞲|U+097DD韝|
+U+0987B须|U+09808須|U+09B1A鬚|
+U+09893颓|U+09839頹|U+0983D頽|
+U+0989C颜|U+0984F顏|U+09854顔|
+U+09965饥|U+098E2飢|U+09951饑|
+U+09980馀|U+09918餘|
+U+09986馆|U+09928館|U+08218舘|
+U+09A82骂|U+07F75罵|U+099E1駡|
+U+09C87鲇|U+09BF0鯰|U+09B8E鮎|
+U+09C9E鲞|U+09BD7鯗|U+09B9D鮝|
+U+09CC4鳄|U+09C77鱷|U+09C10鰐|
+U+09E21鸡|U+096DE雞|U+09DC4鷄|
+U+09E5A鹚|U+09DBF鶿|U+09DC0鷀|
+U+09E6E鹮|U+04D09䴉|
+U+09F44齄|U+09F47齇|
+U+20BB6𠮶|U+055F0嗰|
+U+26216𦈖|U+04308䌈|
+U+28C3E𨰾|U+093B7鎷|
+U+28C3F𨰿|U+091F3釳|
+U+28C40𨱀|U+2895B𨥛|
+U+28C41𨱁|U+09220鈠|
+U+28C42𨱂|U+0920B鈋|
+U+28C43𨱃|U+09232鈲|
+U+28C44𨱄|U+0922F鈯|
+U+28C45𨱅|U+09241鉁|
+U+28C47𨱇|U+092B6銶|
+U+28C48𨱈|U+092C9鋉|
+U+28C49𨱉|U+09344鍄|
+U+28C4A𨱊|U+289F1𨧱|
+U+28C4B𨱋|U+09302錂|
+U+28C4C𨱌|U+093C6鏆|
+U+28C4D𨱍|U+093AF鎯|
+U+28C4E𨱎|U+0936E鍮|
+U+28C4F𨱏|U+0939D鎝|
+U+28C50𨱐|U+28AD2𨫒|
+U+28C52𨱒|U+093C9鏉|
+U+28C53𨱓|U+0940E鐎|
+U+28C54𨱔|U+0940F鐏|
+U+28C55𨱕|U+28B82𨮂|
+U+28E02𨸂|U+0958D閍|
+U+28E03𨸃|U+09590閐|
+U+293FC𩏼|U+04A8F䪏|
+U+293FD𩏽|U+293EA𩏪|
+U+293FE𩏾|U+293A2𩎢|
+U+293FF𩏿|U+04A98䪘|
+U+29400𩐀|U+04A97䪗|
+U+29595𩖕|U+294E3𩓣|
+U+29596𩖖|U+09843顃|
+U+29597𩖗|U+04AF4䫴|
+U+29665𩙥|U+098B0颰|
+U+29666𩙦|U+295C0𩗀|
+U+29667𩙧|U+295E1𩗡|
+U+29668𩙨|U+29639𩘹|
+U+29669𩙩|U+29600𩘀|
+U+2966A𩙪|U+098B7颷|
+U+2966B𩙫|U+098BE颾|
+U+2966C𩙬|U+2963A𩘺|
+U+2966D𩙭|U+2961D𩘝|
+U+2966E𩙮|U+04B18䬘|
+U+2966F𩙯|U+04B1D䬝|
+U+29670𩙰|U+29648𩙈|
+U+29805𩠅|U+297D0𩟐|
+U+29806𩠆|U+29726𩜦|
+U+29807𩠇|U+04B40䭀|
+U+29808𩠈|U+04B43䭃|
+U+2980B𩠋|U+29754𩝔|
+U+2980C𩠌|U+09938餸|
+U+299E6𩧦|U+2987A𩡺|
+U+299E8𩧨|U+099CE駎|
+U+299E9𩧩|U+2990A𩤊|
+U+299EA𩧪|U+04BBE䮾|
+U+299EB𩧫|U+099DA駚|
+U+299EC𩧬|U+298A1𩢡|
+U+299ED𩧭|U+04B7F䭿|
+U+299EE𩧮|U+298BE𩢾|
+U+299EF𩧯|U+09A4B驋|
+U+299F0𩧰|U+04B9D䮝|
+U+299F1𩧱|U+29949𩥉|
+U+299F2𩧲|U+099E7駧|
+U+299F3𩧳|U+298B8𩢸|
+U+299F4𩧴|U+099E9駩|
+U+299F5𩧵|U+298B4𩢴|
+U+299F6𩧶|U+298CF𩣏|
+U+299FA𩧺|U+099F6駶|
+U+299FB𩧻|U+298F5𩣵|
+U+299FC𩧼|U+298FA𩣺|
+U+299FF𩧿|U+04BA0䮠|
+U+29A00𩨀|U+09A14騔|
+U+29A01𩨁|U+04B9E䮞|
+U+29A03𩨃|U+09A1D騝|
+U+29A04𩨄|U+09A2A騪|
+U+29A05𩨅|U+29938𩤸|
+U+29A06𩨆|U+29919𩤙|
+U+29A08𩨈|U+09A1F騟|
+U+29A09𩨉|U+29932𩤲|
+U+29A0A𩨊|U+09A1A騚|
+U+29A0B𩨋|U+29944𩥄|
+U+29A0C𩨌|U+29951𩥑|
+U+29A0D𩨍|U+29947𩥇|
+U+29A0F𩨏|U+04BB3䮳|
+U+29A10𩨐|U+299C6𩧆|
+U+29F79𩽹|U+09B65魥|
+U+29F7A𩽺|U+29D69𩵩|
+U+29F7B𩽻|U+29D79𩵹|
+U+29F7C𩽼|U+09BF6鯶|
+U+29F7D𩽽|U+29DB1𩶱|
+U+29F7E𩽾|U+09B9F鮟|
+U+29F7F𩽿|U+29DB0𩶰|
+U+29F80𩾀|U+09B95鮕|
+U+29F81𩾁|U+09BC4鯄|
+U+29F83𩾃|U+09BB8鮸|
+U+29F84𩾄|U+29DF0𩷰|
+U+29F85𩾅|U+29E03𩸃|
+U+29F86𩾆|U+29E26𩸦|
+U+29F87𩾇|U+09BF1鯱|
+U+29F88𩾈|U+04C59䱙|
+U+29F8A𩾊|U+04C6C䱬|
+U+29F8B𩾋|U+04C70䱰|
+U+29F8C𩾌|U+09C47鱇|
+U+29F8C𩾌|U+09C47鱇|
+U+29F8E𩾎|U+29F47𩽇|
+U+2A242𪉂|U+04CB0䲰|
+U+2A243𪉃|U+09CFC鳼|
+U+2A244𪉄|U+29FEA𩿪|
+U+2A245𪉅|U+2A026𪀦|
+U+2A246𪉆|U+09D32鴲|
+U+2A248𪉈|U+09D1C鴜|
+U+2A249𪉉|U+2A048𪁈|
+U+2A24A𪉊|U+09DE8鷨|
+U+2A24B𪉋|U+2A03E𪀾|
+U+2A24C𪉌|U+2A056𪁖|
+U+2A24D𪉍|U+09D5A鵚|
+U+2A24E𪉎|U+2A086𪂆|
+U+2A24F𪉏|U+2A0CF𪃏|
+U+2A250𪉐|U+2A0CD𪃍|
+U+2A251𪉑|U+09DD4鷔|
+U+2A252𪉒|U+2A115𪄕|
+U+2A254𪉔|U+2A106𪄆|
+U+2A255𪉕|U+2A1F3𪇳|
+U+2A388𪎈|U+04D2C䴬|
+U+2A389𪎉|U+09EB2麲|
+U+2A38A𪎊|U+09EA8麨|
+U+2A38B𪎋|U+04D34䴴|
+U+2A38C𪎌|U+09EB3麳|
+U+2A68F𪚏|U+2A600𪘀|
+U+2A690𪚐|U+2A62F𪘯|
diff --git a/maintenance/language/zhtable/simp2trad_noconvert.manual b/maintenance/language/zhtable/simp2trad_noconvert.manual
new file mode 100644 (file)
index 0000000..a46560a
--- /dev/null
@@ -0,0 +1,139 @@
+著
+竈
+彞
+=>"余"
+=>"𫗭"
+=>"𪨧"
+=>"𫚭"
+=>"𫔀"
+=>"𫊻"
+=>"𫋌"
+=>"蚃"
+=>"𩾂"
+=>"𫚜"
+=>"𫚢"
+=>"𧉰"
+=>"䙌"
+=>"𫊮"
+=>"𫋇"
+=>"𫉄"
+=>"𫘛"
+=>"𫘜"
+=>"𫘝"
+=>"𫘟"
+=>"𩧨"
+=>"𩧫"
+=>"𫘞"
+=>"𫘠"
+=>"𩧲"
+=>"𩧴"
+=>"𫘡"
+=>"𩧺"
+=>"𫘣"
+=>"𫘤"
+=>"𫘧"
+=>"𫘥"
+=>"𫘦"
+=>"𩨀"
+=>"𩨊"
+=>"𫘩"
+=>"𩨃"
+=>"𫘪"
+=>"𫘪"
+=>"𫘫"
+=>"𫘬"
+=>"𩨈"
+=>"𫘨"
+=>"𩨄"
+=>"𫘭"
+=>"𩧯"
+=>"𫘯"
+=>"𫘰"
+=>"𫘱"
+=>"𫘽"
+=>"𫚉"
+=>"𩽹"
+=>"𫚌"
+=>"𫚍"
+=>"𫚒"
+=>"𫚑"
+=>"𫚖"
+=>"𩽾"
+=>"䲟"
+=>"𫚓"
+=>"𫚗"
+=>"𫚔"
+=>"𫚛"
+=>"𩾃"
+=>"𫚚"
+=>"𩾁"
+=>"𫚙"
+=>"𫚡"
+=>"𫚞"
+=>"𩾇"
+=>"𩽼"
+=>"𫚣"
+=>"䲠"
+=>"䲡"
+=>"𫚊"
+=>"𫚥"
+=>"𫚕"
+=>"𫚤"
+=>"䲢"
+=>"𫚦"
+=>"𫚧"
+=>"𫚋"
+=>"𩾌"
+=>"𫚪"
+=>"𫚫"
+=>"𫚈"
+=>"𫚭"
+=>"𫛛"
+=>"𪉃"
+=>"𫛚"
+=>"𫛜"
+=>"𫛞"
+=>"𫛝"
+=>"𫛤"
+=>"𫛡"
+=>"𫁡"
+=>"𪉈"
+=>"𫛣"
+=>"𫛦"
+=>"𪉆"
+=>"𫛩"
+=>"𫛪"
+=>"𫛥"
+=>"𪉍"
+=>"𫛭"
+=>"𫛨"
+=>"𫛳"
+=>"𫛱"
+=>"𫛲"
+=>"𫛵"
+=>"𫛶"
+=>"𫛸"
+=>"𫛷"
+=>"𫛯"
+=>"𫛫"
+=>"𫛽"
+=>"𫜀"
+=>"𪉑"
+=>"𫜃"
+=>"𫛴"
+=>"𪉊"
+=>"𫜁"
+=>"𫜄"
+=>"𫛢"
+=>"𫛟"
+=>"𪎊"
+=>"𤿲"
+=>"𪎉"
+=>"𪎌"
+=>"𫜑"
+=>"𫜩"
+=>"𫜪"
+=>"𫜭"
+=>"𫜬"
+=>"𫜮"
+=>"𫜰"
diff --git a/maintenance/language/zhtable/simp2trad_supp_set.manual b/maintenance/language/zhtable/simp2trad_supp_set.manual
new file mode 100644 (file)
index 0000000..a5038a5
--- /dev/null
@@ -0,0 +1,2 @@
+余    餘
+着    著
\ No newline at end of file
diff --git a/maintenance/language/zhtable/simpphrases.manual b/maintenance/language/zhtable/simpphrases.manual
new file mode 100644 (file)
index 0000000..d8602fe
--- /dev/null
@@ -0,0 +1,2239 @@
+乾上乾下
+乾为天
+乾为阳
+乾九
+乾乾
+乾亨
+乾仪
+乾位
+乾健
+乾元
+乾光
+乾兴
+乾冈
+乾刘
+乾刚
+乾化
+乾卦
+乾县
+乾台
+乾吉
+乾启
+乾命
+乾和
+乾嘉
+乾图
+乾坤
+乾城
+乾基
+乾始
+乾姓
+乾宁
+乾宅
+乾宇
+乾安
+乾定
+乾封
+乾居
+乾岗
+乾巛
+乾州
+乾式
+乾录
+乾律
+乾德
+乾心
+乾文
+乾断
+乾方
+乾施
+乾旦
+乾明
+乾昧
+乾晖
+乾景
+乾晷
+乾曜
+乾构
+乾枢
+乾栋
+乾步
+乾氏
+乾泉
+乾清宫
+乾渥
+乾灵
+乾男
+乾皋
+乾盛世
+乾矢
+乾祐
+乾穹
+乾窦
+乾竺
+乾笃
+乾符
+乾策
+乾精
+乾红
+乾纲
+乾纽
+乾络
+乾统
+乾维
+乾罗
+乾花
+乾荫
+乾行
+乾衡
+乾覆
+乾象
+乾象历
+乾贞
+乾贶
+乾车
+乾轴
+乾造
+乾道
+乾鉴
+乾钧
+乾闼
+乾陀
+乾陵
+乾隆
+乾音
+乾顾
+乾风
+乾首
+乾马
+乾鹄
+乾鹊
+乾龙
+乾,健也
+乾,天也
+乾健也
+乾天也
+坤乾
+天道为乾
+尼乾陀
+康乾
+张法乾
+旋乾转坤
+易·乾
+《易乾
+周易乾
+易经·乾
+易经乾
+李乾德
+萧乾
+郭子乾
+雍乾
+乾务
+乾沓和
+乾沓婆
+乾通
+乾忠
+乾淳
+李乾顺
+黄润乾
+男性为乾
+男为乾
+阳为乾
+乾一组
+乾一坛
+陈乾生
+陈公乾生
+字乾生
+不着痕迹
+不着边际
+与着
+与著书
+与著作
+与著名
+与著录
+与著称
+与著者
+与著述
+丑着
+丑著书
+丑著作
+丑著名
+丑著录
+丑著称
+丑著者
+丑著述
+临着
+临著书
+临著作
+临著名
+临著录
+临著称
+临著者
+临著述
+丽着
+丽著书
+丽著作
+丽著名
+丽著录
+丽著称
+丽著者
+丽著述
+乐着
+乐著书
+乐著作
+乐著名
+乐著录
+乐著称
+乐著者
+乐著述
+乘着
+乘著书
+乘著作
+乘著名
+乘著录
+乘著称
+乘著者
+乘著述
+争着
+争著书
+争著作
+争著名
+争著录
+争著称
+争著者
+争著述
+亮着
+亮著书
+亮著作
+亮著名
+亮著录
+亮著称
+亮著者
+亮著述
+仗着
+仗著书
+仗著作
+仗著名
+仗著录
+仗著称
+仗著者
+仗著述
+代表着
+代表著书
+代表著作
+代表著名
+代表著录
+代表著称
+代表著者
+代表著述
+伴着
+伴著书
+伴著作
+伴著名
+伴著录
+伴著称
+伴著者
+伴著述
+低着
+低著书
+低著作
+低著名
+低著录
+低著称
+低著者
+低著述
+住着
+住著书
+住著作
+住著名
+住著录
+住著称
+住著者
+住著述
+侧着
+侧著书
+侧著作
+侧著名
+侧著录
+侧著称
+侧著者
+侧著述
+保障着
+保障著书
+保障著作
+保障著名
+保障著录
+保障著称
+保障著者
+保障著述
+信着
+信著书
+信著作
+信著名
+信著录
+信著称
+信著者
+信著述
+候着
+候著书
+候著作
+候著名
+候著录
+候著称
+候著者
+候著述
+借着
+借著书
+借著作
+借著名
+借著录
+借著称
+借著者
+借著述
+做着
+做著书
+做著作
+做著名
+做著录
+做著称
+做著者
+做著述
+偷着
+偷著书
+偷著作
+偷著名
+偷著录
+偷著称
+偷著者
+偷著述
+光着
+光著书
+光著作
+光著名
+光著录
+光著称
+光著者
+光著述
+关着
+关著书
+关著作
+关著名
+关著录
+关著称
+关著者
+关著述
+冀着
+冀著书
+冀著作
+冀著名
+冀著录
+冀著称
+冀著者
+冀著述
+冒着
+冒著书
+冒著作
+冒著名
+冒著录
+冒著称
+冒著者
+冒著述
+写着
+写著书
+写著作
+写著名
+写著录
+写著称
+写著者
+写著述
+凉着
+凉著书
+凉著作
+凉著名
+凉著录
+凉著称
+凉著者
+凉著述
+制着
+制著书
+制著作
+制著名
+制著录
+制著称
+制著者
+制著述
+刻着
+刻著书
+刻著作
+刻著名
+刻著录
+刻著称
+刻著者
+刻著述
+办着
+办著书
+办著作
+办著名
+办著录
+办著称
+办著者
+办著述
+动着
+动著书
+动著作
+动著名
+动著录
+动著称
+动著者
+动著述
+努力着
+努力著书
+努力著作
+努力著名
+努力著录
+努力著称
+努力著者
+努力著述
+努着
+努著书
+努著作
+努著名
+努著录
+努著称
+努著者
+努著述
+印着
+印著书
+印著作
+印著名
+印著录
+印著称
+印著者
+印著述
+压着
+压著书
+压著作
+压著名
+压著录
+压著称
+压著者
+压著述
+去着
+去著书
+去著作
+去著名
+去著录
+去著称
+去著者
+去著述
+受着
+受著书
+受著作
+受著名
+受著录
+受著称
+受著者
+受著述
+变着
+变著书
+变著作
+变著名
+变著录
+变著称
+变著者
+变著述
+叫着
+叫著书
+叫著作
+叫著名
+叫著录
+叫著称
+叫著者
+叫著述
+向着
+向著书
+向著作
+向著名
+向著录
+向著称
+向著者
+向著述
+含着
+含著书
+含著作
+含著名
+含著录
+含著称
+含著者
+含著述
+听得着
+听不着
+听着
+听著书
+听著作
+听著名
+听著录
+听著称
+听著者
+听著述
+吹着
+吹著书
+吹著作
+吹著名
+吹著录
+吹著称
+吹著者
+吹著述
+味着
+味著书
+味著作
+味著名
+味著录
+味著称
+味著者
+味著述
+响着
+响著书
+响著作
+响著名
+响著录
+响著称
+响著者
+响著述
+哭着
+哭著书
+哭著作
+哭著名
+哭著录
+哭著称
+哭著者
+哭著述
+唱着
+唱著书
+唱著作
+唱著名
+唱著录
+唱著称
+唱著者
+唱著述
+喝着
+喝著书
+喝著作
+喝著名
+喝著录
+喝著称
+喝著者
+喝著述
+嚷着
+嚷著书
+嚷著作
+嚷著名
+嚷著录
+嚷著称
+嚷著者
+嚷著述
+因着
+因著书
+因著作
+因著名
+因著录
+因著称
+因著者
+因著述
+困着
+困著书
+困著作
+困著名
+困著录
+困著称
+困著者
+困著述
+围着
+围著书
+围著作
+围著名
+围著录
+围著称
+围著者
+围著述
+在着
+在著书
+在著作
+在著名
+在著录
+在著称
+在著者
+在著述
+坐着
+坐著书
+坐著作
+坐著名
+坐著录
+坐著称
+坐著者
+坐著述
+备着
+备著书
+备著作
+备著名
+备著录
+备著称
+备著者
+备著述
+夹着
+夹著书
+夹著作
+夹著名
+夹著录
+夹著称
+夹著者
+夹著述
+孤着
+孤著书
+孤著作
+孤著名
+孤著录
+孤著称
+孤著者
+孤著述
+学着
+学著书
+学著作
+学著名
+学著录
+学著称
+学著者
+学著述
+守着
+守著书
+守著作
+守著名
+守著录
+守著称
+守著者
+守著述
+定着
+定著书
+定著作
+定著名
+定著录
+定著称
+定著者
+定著述
+对着
+对著书
+对著作
+对著名
+对著录
+对著称
+对著者
+对著述
+寻着
+寻著书
+寻著作
+寻著名
+寻著录
+寻著称
+寻著者
+寻著述
+展着
+展著书
+展著作
+展著名
+展著录
+展著称
+展著者
+展著述
+带着
+带著书
+带著作
+带著名
+带著录
+带著称
+带著者
+带著述
+帮着
+帮著书
+帮著作
+帮著名
+帮著录
+帮著称
+帮著者
+帮著述
+应着
+应著书
+应著作
+应著名
+应著录
+应著称
+应著者
+应著述
+康着
+康著书
+康著作
+康著名
+康著录
+康著称
+康著者
+康著述
+开着
+开著书
+开著作
+开著名
+开著录
+开著称
+开著者
+开著述
+当着
+当著书
+当著作
+当著名
+当著录
+当著称
+当著者
+当著述
+待着
+待著书
+待著作
+待著名
+待著录
+待著称
+待著者
+待著述
+得着
+得著书
+得著作
+得著名
+得著录
+得著称
+得著者
+得著述
+循着
+循著书
+循著作
+循著名
+循著录
+循著称
+循著者
+循著述
+心着
+心著书
+心著作
+心著名
+心著录
+心著称
+心著者
+心著述
+忍着
+忍著书
+忍著作
+忍著名
+忍著录
+忍著称
+忍著者
+忍著述
+志着
+志著书
+志著作
+志著名
+志著录
+志著称
+志著者
+志著述
+忙着
+忙著书
+忙著作
+忙著名
+忙著录
+忙著称
+忙著者
+忙著述
+怀着
+怀著书
+怀著作
+怀著名
+怀著录
+怀著称
+怀著者
+怀著述
+急着
+急著书
+急著作
+急著名
+急著录
+急著称
+急著者
+急著述
+性着
+性著书
+性著作
+性著名
+性著录
+性著称
+性著者
+性著述
+恋着
+恋著书
+恋著作
+恋著名
+恋著录
+恋著称
+恋著者
+恋著述
+悠着
+悠著书
+悠著作
+悠著名
+悠著录
+悠著称
+悠著者
+悠著述
+惯着
+惯著书
+惯著作
+惯著名
+惯著录
+惯著称
+惯著者
+惯著述
+想着
+想著书
+想著作
+想著名
+想著录
+想著称
+想著者
+想著述
+战着
+战著书
+战著作
+战著名
+战著录
+战著称
+战著者
+战著述
+戴着
+戴著书
+戴著作
+戴著名
+戴著录
+戴著称
+戴著者
+戴著述
+扎着
+扎著书
+扎著作
+扎著名
+扎著录
+扎著称
+扎著者
+扎著述
+打着
+打著书
+打著作
+打著名
+打著录
+打著称
+打著者
+打著述
+扛着
+扛著书
+扛著作
+扛著名
+扛著录
+扛著称
+扛著者
+扛著述
+找得着
+找不着
+抓着
+抓著作
+抓著名
+抓著录
+抓著称
+抓著者
+抓著述
+披着
+披著书
+披著作
+披著名
+披著录
+披著称
+披著者
+披著述
+抬着
+抬著作
+抬著名
+抬著录
+抬著称
+抬著者
+抬著述
+抱着
+抱著作
+抱著名
+抱著录
+抱著称
+抱著者
+抱著述
+拉着
+拉著书
+拉著作
+拉著名
+拉著录
+拉著称
+拉著者
+拉著述
+拎着
+拎著作
+拎著名
+拎著录
+拎著称
+拎著者
+拎著述
+拖着
+拖著作
+拖著名
+拖著录
+拖著称
+拖著者
+拖著述
+拼着
+拼著作
+拼著名
+拼著录
+拼著称
+拼著者
+拼著述
+拿着
+拿著作
+拿著名
+拿著录
+拿著称
+拿著者
+拿著述
+持着
+持著作
+持著名
+持著录
+持著称
+持著者
+持著述
+挑着
+挑著作
+挑著名
+挑著录
+挑著称
+挑著者
+挑著述
+挡着
+挡著作
+挡著名
+挡著录
+挡著称
+挡著者
+挡著述
+挣着
+挣著书
+挣著作
+挣著名
+挣著录
+挣著称
+挣著者
+挣著述
+挥着
+挥著作
+挥著名
+挥著录
+挥著称
+挥著者
+挥著述
+挨着
+挨著作
+挨著名
+挨著录
+挨著称
+挨著者
+挨著述
+捆着
+捆著作
+捆著名
+捆著录
+捆著称
+捆著者
+捆著述
+据着
+据著书
+据著作
+据著名
+据著录
+据著称
+据著者
+据著述
+掖着
+掖著作
+掖著名
+掖著录
+掖著称
+掖著者
+掖著述
+接着
+接著作
+接著名
+接著录
+接著称
+接著者
+接著述
+揉着
+揉著书
+揉著作
+揉著名
+揉著录
+揉著称
+揉著者
+揉著述
+提着
+提著作
+提著名
+提著录
+提著称
+提著者
+提著述
+搂着
+搂著作
+搂著名
+搂著录
+搂著称
+搂著者
+搂著述
+摆着
+摆著作
+摆著名
+摆著录
+摆著称
+摆著者
+摆著述
+撼着
+撼著书
+撼著作
+撼著名
+撼著录
+撼著称
+撼著者
+撼著述
+敞着
+敞著作
+敞著名
+敞著录
+敞著称
+敞著者
+敞著述
+数着
+数著作
+数著名
+数著录
+数著称
+数著者
+数著述
+斗着
+斗著书
+斗著作
+斗著名
+斗著录
+斗著称
+斗著者
+斗著述
+斥着
+斥著书
+斥著作
+斥著名
+斥著录
+斥著称
+斥著者
+斥著述
+昂着
+昂著书
+昂著作
+昂著名
+昂著录
+昂著称
+昂著者
+昂著述
+映着
+映著书
+映著作
+映著名
+映著录
+映著称
+映著者
+映著述
+晃着
+晃著作
+晃著名
+晃著录
+晃著称
+晃著者
+晃著述
+暗着
+暗著书
+暗著作
+暗著名
+暗著录
+暗著称
+暗著者
+暗著述
+有着
+有著书
+有著作
+有著名
+有著录
+有著称
+有著者
+有著述
+望着
+望著作
+望著名
+望著录
+望著称
+望著者
+望著述
+朝着
+朝著作
+朝著名
+朝著录
+朝著称
+朝著者
+朝著述
+本着
+本著书
+本著作
+本著名
+本著录
+本著称
+本著者
+本著述
+杀着
+杀著书
+杀著作
+杀著名
+杀著录
+杀著称
+杀著者
+杀著述
+杂着
+杂著书
+杂著作
+杂著名
+杂著录
+杂著称
+杂著者
+杂著述
+来着
+来著书
+来著作
+来著名
+来著录
+来著称
+来著者
+来著述
+枕着
+枕著作
+枕著名
+枕著录
+枕著称
+枕著者
+枕著述
+梦着
+梦著书
+梦著作
+梦著名
+梦著录
+梦著称
+梦著者
+梦著述
+梳着
+梳著作
+梳著名
+梳著录
+梳著称
+梳著者
+梳著述
+求着
+求著书
+求著作
+求著名
+求著录
+求著称
+求著者
+求著述
+沉着
+沉著书
+沉著作
+沉著名
+沉著录
+沉著称
+沉著者
+沉著述
+沿着
+沿著书
+沿著作
+沿著名
+沿著录
+沿著称
+沿著者
+沿著述
+活着
+活著书
+活著作
+活著名
+活著录
+活著称
+活著者
+活著述
+流着
+流著书
+流著作
+流著名
+流著录
+流著称
+流著者
+流著述
+浮着
+浮著书
+浮著作
+浮著名
+浮著录
+浮著称
+浮著者
+浮著述
+润着
+润著书
+润著作
+润著名
+润著录
+润著称
+润著者
+润著述
+涵着
+涵著书
+涵著作
+涵著名
+涵著录
+涵著称
+涵著者
+涵著述
+渴着
+渴著书
+渴著作
+渴著名
+渴著录
+渴著称
+渴著者
+渴著述
+溢着
+溢著书
+溢著作
+溢著名
+溢著录
+溢著称
+溢著者
+溢著述
+演着
+演著书
+演著作
+演著名
+演著录
+演著称
+演著者
+演著述
+漫着
+漫著书
+漫著作
+漫著名
+漫著录
+漫著称
+漫著者
+漫著述
+点着
+点著作
+点著名
+点著录
+点著称
+点著者
+点著述
+烧着
+烧著作
+烧著名
+烧著录
+烧著称
+烧著者
+烧著述
+照着
+照著书
+照著作
+照著名
+照著录
+照著称
+照著者
+照著述
+爱着
+爱著书
+爱著作
+爱著名
+爱著录
+爱著称
+爱著者
+爱著述
+牵着
+牵著书
+牵著作
+牵著名
+牵著录
+牵著称
+牵著者
+牵著述
+犯得着
+犯不着
+独着
+独著书
+独著作
+独著名
+独著录
+独著称
+独著者
+独著述
+猜着
+猜着书
+猜著作
+猜著名
+猜著录
+猜著称
+猜著者
+猜著述
+甜着
+甜著书
+甜著作
+甜著名
+甜著录
+甜著称
+甜著者
+甜著述
+用得着
+用不着
+用着
+用著书
+用著作
+用著名
+用著录
+用著称
+用著者
+用著述
+留着
+留着书
+留著作
+留著名
+留著录
+留著称
+留著者
+留著述
+疑着
+疑著书
+疑著作
+疑著名
+疑著录
+疑著称
+疑著者
+疑著述
+皱着
+皱著书
+皱著作
+皱著名
+皱著录
+皱著称
+皱著者
+皱著述
+盛着
+盛著书
+盛著作
+盛著名
+盛著录
+盛著称
+盛著者
+盛著述
+盯着
+盯着书
+盯著作
+盯著名
+盯著录
+盯著称
+盯著者
+盯著述
+盾着
+盾著书
+盾著作
+盾著名
+盾著录
+盾著称
+盾著者
+盾著述
+看得着
+看不着
+看着
+看着书
+看著作
+看著名
+看著录
+看著称
+看著者
+看著述
+瞧着
+瞧着书
+瞧著作
+瞧著名
+瞧著录
+瞧著称
+瞧著者
+瞧著述
+着业
+着丝
+着么
+着人
+着什么急
+着他
+着令
+着位
+着体
+着你
+着便
+着凉
+着力
+着劲
+着号
+着呢
+着哩
+着地
+着墨
+着声
+着处
+着她
+着妳
+着姓
+着它
+着定
+着实
+着己
+着帐
+着床
+着庸
+着式
+着录
+着心
+着志
+着忙
+着急
+着恼
+着惊
+着想
+着意
+着慌
+着我
+着手
+着抹
+着摸
+着撰
+着数
+着明
+着末
+着极
+着格
+着棋
+着槁
+着气
+着法
+着浅
+着火
+着然
+着甚
+着生
+着疑
+着白
+着相
+着眼
+着着
+着祂
+着积
+着稿
+着笔
+着籍
+着紧
+着緑
+着绊
+着绩
+着绯
+着绿
+着肉
+着脚
+着舰
+着色
+着节
+着花
+着莫
+着落
+着藁
+着衣
+着装
+着要
+着警
+着趣
+着边
+着迷
+着迹
+着重
+着録
+着闻
+着陆
+着雝
+着鞭
+着题
+着魔
+睡得着
+睡不着
+睡着
+睡著书
+睡著作
+睡著名
+睡著录
+睡著称
+睡著者
+睡著述
+瞒着
+瞒著书
+瞒著作
+瞒著名
+瞒著录
+瞒著称
+瞒著者
+瞒著述
+瞪着
+瞪著书
+瞪著作
+瞪著名
+瞪著录
+瞪著称
+瞪著者
+瞪著述
+福着
+福著书
+福著作
+福著名
+福著录
+福著称
+福著者
+福著述
+空着
+空著书
+空著作
+空著名
+空著录
+空著称
+空著者
+空著述
+穿着
+穿著书
+穿著作
+穿著名
+穿著录
+穿著称
+穿著者
+穿著述
+竖着
+竖著书
+竖著作
+竖著名
+竖著录
+竖著称
+竖著者
+竖著述
+站着
+站著书
+站著作
+站著名
+站著录
+站著称
+站著者
+站著述
+笑着
+笑著书
+笑著作
+笑著名
+笑著录
+笑著称
+笑著者
+笑著述
+管着
+管著书
+管著作
+管著名
+管著录
+管著称
+管著者
+管著述
+绑着
+绑著书
+绑著作
+绑著名
+绑著录
+绑著称
+绑著者
+绑著述
+绕着
+绕著书
+绕著作
+绕著名
+绕著录
+绕著称
+绕著者
+绕著述
+缠着
+缠著书
+缠著作
+缠著名
+缠著录
+缠著称
+缠著者
+缠著述
+罩着
+罩著书
+罩著作
+罩著名
+罩著录
+罩著称
+罩著者
+罩著述
+美着
+美著书
+美著作
+美著名
+美著录
+美著称
+美著者
+美著述
+耀着
+耀著书
+耀著作
+耀著名
+耀著录
+耀著称
+耀著者
+耀著述
+考着
+考著书
+考著作
+考著名
+考著录
+考著称
+考著者
+考著述
+背着
+背著书
+背著作
+背著名
+背著录
+背著称
+背著者
+背著述
+胶着
+胶著书
+胶著作
+胶著名
+胶著录
+胶著称
+胶著者
+胶著述
+艺着
+艺著书
+艺著作
+艺著名
+艺著录
+艺著称
+艺著者
+艺著述
+苦着
+苦著书
+苦著作
+苦著名
+苦著录
+苦著称
+苦著者
+苦著述
+获着
+获著书
+获著作
+获著名
+获著录
+获著称
+获著者
+获著述
+落着
+落著书
+落著作
+落著名
+落著录
+落著称
+落著者
+落著述
+蒙着
+蒙著书
+蒙著作
+蒙著名
+蒙著录
+蒙著称
+蒙著者
+蒙著述
+藏着
+藏著书
+藏著作
+藏著名
+藏著录
+藏著称
+藏著者
+藏著述
+蘸着
+蘸著书
+蘸著作
+蘸著名
+蘸著录
+蘸著称
+蘸著者
+蘸著述
+行着
+行著书
+行著作
+行著名
+行著录
+行著称
+行著者
+行著述
+衣着
+衣著书
+衣著作
+衣著名
+衣著录
+衣著称
+衣著者
+衣著述
+装着
+装著书
+装著作
+装著名
+装著录
+装著称
+装著者
+装著述
+裹着
+裹著书
+裹著作
+裹著名
+裹著录
+裹著称
+裹著者
+裹著述
+见着
+见著书
+见著作
+见著名
+见著录
+见著称
+见著者
+见著述
+记着
+记著书
+记著作
+记著名
+记著录
+记著称
+记著者
+记著述
+试着
+试著书
+试著作
+试著名
+试著录
+试著称
+试著者
+试著述
+语着
+语著书
+语著作
+语著名
+语著录
+语著称
+语著者
+语著述
+豫着
+豫著书
+豫著作
+豫著名
+豫著录
+豫著称
+豫著者
+豫著述
+贞着
+贞著书
+贞著作
+贞著名
+贞著录
+贞著称
+贞著者
+贞著述
+走着
+走著书
+走著作
+走著名
+走著录
+走著称
+走著者
+走著述
+赶着
+赶著书
+赶著作
+赶著名
+赶著录
+赶著称
+赶著者
+赶著述
+趴着
+趴著书
+趴著作
+趴著名
+趴著录
+趴著称
+趴著者
+趴著述
+跃着
+跃著书
+跃著作
+跃著名
+跃著录
+跃著称
+跃著者
+跃著述
+跑着
+跑著书
+跑著作
+跑著名
+跑著录
+跑著称
+跑著者
+跑著述
+跟着
+跟著书
+跟著作
+跟著名
+跟著录
+跟著称
+跟著者
+跟著述
+跪着
+跪著书
+跪著作
+跪著名
+跪著录
+跪著称
+跪著者
+跪著述
+跳着
+跳著书
+跳著作
+跳著名
+跳著录
+跳著称
+跳著者
+跳著述
+踏着
+踏著书
+踏著作
+踏著名
+踏著录
+踏著称
+踏著者
+踏著述
+踩着
+踩著书
+踩著作
+踩著名
+踩著录
+踩著称
+踩著者
+踩著述
+身着
+身著书
+身著作
+身著名
+身著录
+身著称
+身著者
+身著述
+躺着
+躺著书
+躺著作
+躺著名
+躺著录
+躺著称
+躺著者
+躺著述
+转着
+转著书
+转著作
+转著名
+转著录
+转著称
+转著者
+转著述
+载着
+载著书
+载著作
+载著名
+载著录
+载著称
+载著者
+载著述
+达着
+达著书
+达著作
+达著名
+达著录
+达著称
+达著者
+达著述
+远着
+远著书
+远著作
+远著名
+远著录
+远著称
+远著者
+远著述
+连着
+连著书
+连著作
+连著名
+连著录
+连著称
+连著者
+连著述
+追着
+追著书
+追著作
+追著名
+追著录
+追著称
+追著者
+追著述
+逆着
+逆著书
+逆著作
+逆著名
+逆著录
+逆著称
+逆著者
+逆著述
+逼着
+逼著书
+逼著作
+逼著名
+逼著录
+逼著称
+逼著者
+逼著述
+遇着
+遇著书
+遇著作
+遇著名
+遇著录
+遇著称
+遇著者
+遇著述
+配着
+配著书
+配著作
+配著名
+配著录
+配著称
+配著者
+配著述
+酿着
+酿著书
+酿著作
+酿著名
+酿著录
+酿著称
+酿著者
+酿著述
+铺着
+铺著书
+铺著作
+铺著名
+铺著录
+铺著称
+铺著者
+铺著述
+闭着
+闭著书
+闭著作
+闭著名
+闭著录
+闭著称
+闭著者
+闭著述
+闲着
+闲著书
+闲著作
+闲著名
+闲著录
+闲著称
+闲著者
+闲著述
+附着
+附著书
+附著作
+附著名
+附著录
+附著称
+附著者
+附著述
+陋着
+陋著书
+陋著作
+陋著名
+陋著录
+陋著称
+陋著者
+陋著述
+陪着
+陪著书
+陪著作
+陪著名
+陪著录
+陪著称
+陪著者
+陪著述
+随着
+随著书
+随著作
+随著名
+随著录
+随著称
+随著者
+随著述
+隔着
+隔著书
+隔著作
+隔著名
+隔著录
+隔著称
+隔著者
+隔著述
+雅着
+雅著书
+雅著作
+雅著名
+雅著录
+雅著称
+雅著者
+雅著述
+顶着
+顶著书
+顶著作
+顶著名
+顶著录
+顶著称
+顶著者
+顶著述
+顺着
+顺著书
+顺著作
+顺著名
+顺著录
+顺著称
+顺著者
+顺著述
+领着
+领著书
+领著作
+领著名
+领著录
+领著称
+领著者
+领著述
+飘着
+飘著书
+飘著作
+飘著名
+飘著录
+飘著称
+飘著者
+飘著述
+驾着
+驾著书
+驾著作
+驾著名
+驾著录
+驾著称
+驾著者
+驾著述
+骂着
+骂著书
+骂著作
+骂著名
+骂著录
+骂著称
+骂著者
+骂著述
+骑着
+骑著书
+骑著作
+骑著名
+骑著录
+骑著称
+骑著者
+骑著述
+骗着
+骗著书
+骗著作
+骗著名
+骗著录
+骗著称
+骗著者
+骗著述
+高着
+高著书
+高著作
+高著名
+高著录
+高著称
+高著者
+高著述
+髭着
+髭著书
+髭著作
+髭著名
+髭著录
+髭著称
+髭著者
+髭著述
+黏着
+黏著书
+黏著作
+黏著名
+黏著录
+黏著称
+黏著者
+黏著述
+新著龙虎门
+护着
+护著书
+护著作
+护著名
+护著录
+护著称
+护著者
+护著述
+保护着
+爱护着
+庇护着
+传着
+传著书
+传著作
+传著名
+传著录
+传著称
+传著者
+传著述
+标志着
+流露着
+靠着
+靠著作
+靠著名
+靠著录
+靠著称
+靠著者
+靠著述
+玩着
+迫着
+吃得着
+吃不着
+吃着
+闻得着
+闻不着
+闻着
+嗅得着
+嗅不着
+嗅着
+警戒着
+於乎
+於戏
+魏徵
+柳诒徵
+於姓
+於氏
+於夫罗
+於梨华
+卷舌
+樊於期
+於菟
+於潜县
+石碁镇
+因著《
+因著〈
+李泽钜
+於祥玉
+於崇文
+於世成
+於乙宇同
+於宇同
+朴於宇同
+於哲
+於除鞬
+於志贺
+覆蓋
+五箇山
+麽麽
+幺厮
+幺半群
+幺元
+幺爹
+幺叔
+幺舅
+幺爸
+幺妈
+幺姨
+幺娘
+幺妹
+幺小
+幺姓
+姓幺
+幺氏
+麽氏
+幺蛾子
+幺麽
+幺麽小丑
+幺凤
+幺二三
+幺篇
+幺谦
+麴义
+麴英
+麯崇裕
+阿部正瞭
+醯酱
+醯鸡
+醯醋
+醯醢
+醯壶
+苧烯
+近角聪信
+米泽瑠美
+峯岸南
+僧伽吒
+王道乾
+後姓
diff --git a/maintenance/language/zhtable/simpphrases_exclude.manual b/maintenance/language/zhtable/simpphrases_exclude.manual
new file mode 100644 (file)
index 0000000..3e9d3ec
--- /dev/null
@@ -0,0 +1,21 @@
+整飭
+後
+谘
+彷佛
+三番四复
+三复
+藉
+关於
+对於
+属於
+至於
+夥计
+薹
+嚇
+醣
+捱
+簑
+樑
+摺叠
+餗
+安甯
\ No newline at end of file
diff --git a/maintenance/language/zhtable/toCN.manual b/maintenance/language/zhtable/toCN.manual
new file mode 100644 (file)
index 0000000..243f61b
--- /dev/null
@@ -0,0 +1,275 @@
+」    ”
+「    “
+『    ‘
+』    ’
+記憶體      内存
+預設 默认
+串列 串行
+串列加速器        串列加速器
+乙太網      以太网
+點陣圖      位图
+常式 例程
+光碟 光盘
+光碟機      光驱
+全形 全角
+載入 加载
+半形 半角
+變數 变量
+雜訊 噪声
+因數 因子
+功能變數名稱     域名
+音效卡      声卡
+字型大小   字号
+字型檔      字库
+欄位 字段
+字元 字符
+字元济      字元济
+字元濟      字元济
+字元会      字元会
+字元會      字元会
+存檔 存盘
+定址 寻址
+章節附註   尾注
+非同步      异步
+匯流排      总线
+括弧 括号
+介面 接口
+控制項      控件
+許可權      权限
+碟片 盘片
+矽片 硅片
+矽谷 硅谷
+硬碟 硬盘
+磁碟 磁盘
+磁軌 磁道
+程式控制   程控
+遠程控制   远程控制
+远程控制   远程控制
+運算元      算子
+演算法      算法
+晶片 芯片
+晶元 芯片
+片語 词组
+軟碟機      软驱
+快閃記憶體        快闪存储器
+滑鼠 鼠标
+滑鼠蛇      滑鼠蛇
+二進位      二进制
+滿二進位   满二进位
+六進位      六进制
+滿六進位   满六进位
+滿十六進位        满十六进位
+八進位      八进制
+滿八進位   满八进位
+十進位      十进制
+滿十進位   满十进位
+16進位       16进位
+滿16進位    满16进位
+二進位制   二进位制
+六進位制   六进位制
+八進位制   八进位制
+十進位制   十进位制
+16進位制    16进位制
+互動式      交互式
+優先順序   优先级
+感測 传感
+攜帶型      便携式
+資訊理論   信息论
+迴圈 循环
+防寫 写保护
+解析度      分辨率
+伺服器      服务器
+等於 等于
+區域網      局域网
+巨集 宏
+掃瞄器      扫瞄仪
+寬頻 宽带
+資料庫      数据库
+萬曆 万历
+永曆 永历
+辭彙 词汇
+母音 元音
+字母 字母
+頭槌 头球
+進球 入球
+顆進球      粒入球
+射門 打门
+蓋火鍋      火锅盖帽
+印表機      打印机
+打印機      打印机
+位元組      字节
+字節 字节
+列印 打印
+打印 打印
+硬體 硬件
+二極體      二极管
+二極管      二极管
+三極體      三极管
+三極管      三极管
+軟體 软件
+軟件 软件
+網路 网络
+網絡 网络
+人工智慧   人工智能
+太空梭      航天飞机
+穿梭機      航天飞机
+網際網路   互联网
+互聯網      互联网
+機械人      机器人
+機器人      机器人
+行動電話   移动电话
+流動電話   移动电话
+調制解調器        调制解调器
+數據機      调制解调器
+短訊 短信
+簡訊 短信
+烏茲別克   乌兹别克斯坦
+葉門 也门
+伯利茲      伯利兹
+貝里斯      伯利兹
+維德角      佛得角
+克羅埃西亞        克罗地亚
+甘比亞      冈比亚
+幾內亞比索        几内亚比绍
+列支敦斯登        列支敦士登
+賴比瑞亞   利比里亚
+迦納 加纳
+加彭 加蓬
+波札那      博茨瓦纳
+盧安達      卢旺达
+瓜地馬拉   危地马拉
+厄瓜多爾   厄瓜多尔
+厄瓜多尔   厄瓜多尔
+厄瓜多      厄瓜多尔
+厄利垂亞   厄立特里亚
+吉布地      吉布提
+哈薩克      哈萨克斯坦
+哥斯大黎加        哥斯达黎加
+吐瓦魯      图瓦卢
+土庫曼      土库曼斯坦
+聖露西亞   圣卢西亚
+聖吉斯納域斯     圣基茨和尼维斯
+聖克里斯多福及尼維斯 圣基茨和尼维斯
+聖文森及格瑞那丁       圣文森特和格林纳丁斯
+聖馬利諾   圣马力诺
+蓋亞那      圭亚那
+坦尚尼亞   坦桑尼亚
+衣索匹亞   埃塞俄比亚
+衣索比亞   埃塞俄比亚
+吉里巴斯   基里巴斯
+塔吉克      塔吉克斯坦
+塞拉利昂   塞拉利昂
+塞普勒斯   塞浦路斯
+塞席爾      塞舌尔
+多米尼克   多米尼加国
+安地卡及巴布達  安提瓜和巴布达
+尼日利亞   尼日利亚
+尼日利亚   尼日利亚
+奈及利亞   尼日利亚
+尼日爾      尼日尔
+尼日尔      尼日尔
+巴貝多      巴巴多斯
+巴布亞紐幾內亞  巴布亚新几内亚
+布基納法索        布基纳法索
+布吉納法索        布基纳法索
+蒲隆地      布隆迪
+帛琉 帕劳
+義大利      意大利
+索羅門群島        所罗门群岛
+汶萊 文莱
+史瓦濟蘭   斯威士兰
+斯洛維尼亞        斯洛文尼亚
+紐西蘭      新西兰
+格瑞那達   格林纳达
+茅利塔尼亞        毛里塔尼亚
+毛里裘斯   毛里求斯
+模里西斯   毛里求斯
+沙地阿拉伯        沙特阿拉伯
+沙烏地阿拉伯     沙特阿拉伯
+波士尼亞赫塞哥維納    波斯尼亚和黑塞哥维那
+辛巴威      津巴布韦
+宏都拉斯   洪都拉斯
+千里達托貝哥     特立尼达和托巴哥
+諾魯 瑙鲁
+萬那杜      瓦努阿图
+溫納圖      瓦努阿图
+葛摩 科摩罗
+象牙海岸   科特迪瓦
+突尼西亞   突尼斯
+索馬利亞   索马里
+寮國 老挝
+肯雅 肯尼亚
+肯亞 肯尼亚
+蘇利南      苏里南
+莫三比克   莫桑比克
+賴索托      莱索托
+貝南 贝宁
+尚比亞      赞比亚
+亞塞拜然   阿塞拜疆
+阿拉伯聯合大公國       阿拉伯联合酋长国
+南韓 韩国
+馬爾地夫   马尔代夫
+馬爾他      马耳他
+馬利共和國        马里共和国
+即食麵      方便面
+快速面      方便面
+速食麵      方便面
+泡麵 方便面
+笨豬跳      蹦极跳
+绑紧跳      蹦极跳
+冷盤 凉菜
+冷菜 凉菜
+散钱 零钱
+谐星 笑星
+夜学 夜校
+华乐 民乐
+中樂 民乐
+軍中樂園    军中乐园
+华乐街      华乐街
+屋价 房价
+計程車      出租车
+單車 自行车
+節慶 节日
+芝士 乾酪
+狗隻 犬只
+士多啤梨   草莓
+忌廉 奶油
+桌球 台球
+撞球 台球
+衞生 卫生
+衛生 卫生
+賓士 奔驰
+平治 奔驰
+平治之亂   平治之乱
+平治之乱   平治之乱
+積架 捷豹
+福斯 大众
+福士 大众
+萬事得      马自达
+寶獅 标志
+拿破崙      拿破仑
+布殊 布什
+布希 布什
+布希亞      布希亚
+布希亚      布希亚
+柯林頓      克林顿
+海珊 侯赛因
+梵谷 凡高
+大衛碧咸   大卫·贝克汉姆
+米高奧雲   迈克尔·欧文
+卡佩雅蒂   珍妮弗·卡普里亚蒂
+沙芬 马拉特·萨芬
+舒麥加      迈克尔·舒马赫
+希特拉      希特勒
+黛安娜      戴安娜
+榴槤 榴莲
+榴梿 榴莲
+矽    硅
+矽肺 矽肺
+矽塵 矽尘
+矽尘 矽尘
+矽鋼 矽钢
+矽钢 矽钢
+侏儸紀      侏罗纪
+甚麽 什么
+甚麼 什么
diff --git a/maintenance/language/zhtable/toHK.manual b/maintenance/language/zhtable/toHK.manual
new file mode 100644 (file)
index 0000000..1f7fe7d
--- /dev/null
@@ -0,0 +1,2300 @@
+”    」
+“    「
+‘    『
+’    』
+鉤    鈎
+衛    衞
+凶殺 兇殺
+凶殘 兇殘
+緝凶 緝兇
+買凶 買兇
+印表機      打印機
+字节 位元組
+字節 位元組
+列印 打印
+硬件 硬件
+硬體 硬件
+二極體      二極管
+三極體      三極管
+軟體 軟件
+網路 網絡
+人工智慧   人工智能
+航天飞机   穿梭機
+太空梭      穿梭機
+因特网      互聯網
+網際網路   互聯網
+机器人      機械人
+機器人      機械人
+移动电话   流動電話
+行動電話   流動電話
+數據機      調制解調器
+短信 短訊
+簡訊 短訊
+查德 乍得
+葉門 也門
+貝里斯      伯利茲
+維德角      佛得角
+克羅埃西亞        克羅地亞
+甘比亞      岡比亞
+幾內亞比索        幾內亞比紹
+列支敦斯登        列支敦士登
+賴比瑞亞   利比里亞
+迦納 加納
+加彭 加蓬
+波札那      博茨瓦納
+盧安達      盧旺達
+瓜地馬拉   危地馬拉
+厄瓜多尔   厄瓜多爾
+厄瓜多爾   厄瓜多爾
+厄瓜多      厄瓜多爾
+厄利垂亞   厄立特里亞
+吉布地      吉布堤
+哥斯大黎加        哥斯達黎加
+吐瓦魯      圖瓦盧
+聖露西亞   聖盧西亞
+圣基茨和尼维斯  聖吉斯納域斯
+聖克里斯多福及尼維斯 聖吉斯納域斯
+聖文森及格瑞那丁       聖文森特和格林納丁斯
+聖馬利諾   聖馬力諾
+蓋亞那      圭亞那
+坦尚尼亞   坦桑尼亞
+衣索匹亞   埃塞俄比亞
+衣索比亞   埃塞俄比亞
+吉里巴斯   基里巴斯
+塞普勒斯   塞浦路斯
+塞席爾      塞舌爾
+安地卡及巴布達  安提瓜和巴布達
+尼日利亚   尼日利亞
+尼日利亞   尼日利亞
+奈及利亞   尼日利亞
+尼日尔      尼日爾
+尼日爾      尼日爾
+尼日 尼日爾
+巴貝多      巴巴多斯
+巴布亞紐幾內亞  巴布亞新畿內亞
+布吉納法索        布基納法索
+蒲隆地      布隆迪
+帕劳 帛琉
+義大利      意大利
+索羅門群島        所羅門群島
+文莱 汶萊
+史瓦濟蘭   斯威士蘭
+斯洛維尼亞        斯洛文尼亞
+紐西蘭      新西蘭
+格瑞那達   格林納達
+茅利塔尼亞        毛里塔尼亞
+毛里求斯   毛里裘斯
+模里西斯   毛里裘斯
+沙地阿拉伯        沙特阿拉伯
+沙烏地阿拉伯     沙特阿拉伯
+波士尼亞赫塞哥維納    波斯尼亞黑塞哥維那
+辛巴威      津巴布韋
+宏都拉斯   洪都拉斯
+千里達托貝哥     特立尼達和多巴哥
+諾魯 瑙魯
+萬那杜      瓦努阿圖
+葛摩 科摩羅
+索馬利亞   索馬里
+寮國 老撾
+肯尼亚      肯雅
+肯亞 肯雅
+莫三比克   莫桑比克
+賴索托      萊索托
+貝南 貝寧
+尚比亞      贊比亞
+亞塞拜然   阿塞拜疆
+阿拉伯聯合大公國       阿拉伯聯合酋長國
+馬爾地夫   馬爾代夫
+馬利共和國        馬里共和國
+方便面      即食麵
+快速面      即食麵
+速食麵      即食麵
+泡麵 即食麵
+土豆 馬鈴薯
+土豆网      土豆網
+土豆網      土豆網
+华乐 中樂
+民乐 中樂
+計程車      的士
+出租车      的士
+公車 巴士
+公車上書   公車上書
+自行车      單車
+犬只 狗隻
+台球 桌球
+撞球 桌球
+冰淇淋      雪糕
+賓士 平治
+捷豹 積架
+福斯 福士
+雪铁龙      先進
+雪鐵龍      先進
+沃尓沃      富豪
+马自达      萬事得
+馬自達      萬事得
+寶獅 標致
+布什 布殊
+布希 布殊
+布希亞      布希亞
+布希亚      布希亞
+柯林頓      克林頓
+萨达姆      薩達姆
+海珊 侯賽因
+大卫·贝克汉姆   大衛碧咸
+迈克尔·欧文      米高奧雲
+珍妮弗·卡普里亚蒂     卡佩雅蒂
+马拉特·萨芬      沙芬
+迈克尔·舒马赫   舒麥加
+希特勒      希特拉
+狄安娜      戴安娜
+黛安娜      戴安娜
+颁布 頒佈
+頒布 頒佈
+挨著 挨着
+愛著 愛着
+暗著 暗着
+昂著 昂着
+擺著 擺着
+伴著 伴着
+辦著 辦着
+幫著 幫着
+綁著 綁着
+抱著 抱着
+背著 背着
+備著 備着
+本著 本着
+逼著 逼着
+閉著 閉着
+變著 變着
+猜著 猜着
+踩著 踩着
+藏著 藏着
+側著 側着
+纏著 纏着
+敞著 敞着
+唱著 唱着
+朝著 朝着
+沉著 沉着
+乘著 乘着
+持著 持着
+斥著 斥着
+醜著 醜着
+穿著 穿着
+吹著 吹着
+達著 達着
+打著 打着
+待著 待着
+帶著 帶着
+戴著 戴着
+當著 當着
+擋著 擋着
+得著 得着
+瞪著 瞪着
+低著 低着
+點著 點着
+盯著 盯着
+頂著 頂着
+定著 定着
+動著 動着
+鬥著 鬥着
+獨著 獨着
+對著 對着
+盾著 盾着
+犯得著      犯得着
+犯不著      犯不着
+福著 福着
+趕著 趕着
+高著 高着
+隔著 隔着
+跟著 跟着
+孤著 孤着
+關著 關着
+管著 管着
+慣著 慣着
+光著 光着
+跪著 跪着
+裹著 裹着
+撼著 撼着
+喝著 喝着
+候著 候着
+懷著 懷着
+晃著 晃着
+揮著 揮着
+活著 活着
+獲著 獲着
+獲著 獲着
+急著 急着
+記著 記着
+冀著 冀着
+夾著 夾着
+駕著 駕着
+見著 見着
+閑著 閑着
+叫著 叫着
+接著 接着
+借著 借着
+借著 借着
+據著 據着
+開著 開着
+看得著      看得着
+看不著      看不着
+看著 看着
+康著 康着
+扛著 扛着
+考著 考着
+渴著 渴着
+刻著 刻着
+空著 空着
+哭著 哭着
+苦著 苦着
+捆著 捆着
+困著 困着
+拉著 拉着
+來著 來着
+樂著 樂着
+努力著      努力着
+麗著 麗着
+連著 連着
+戀著 戀着
+涼著 涼着
+亮著 亮着
+臨著 臨着
+拎著 拎着
+領著 領着
+流著 流着
+留著 留着
+摟著 摟着
+陋著 陋着
+落著 落着
+罵著 罵着
+瞞著 瞞着
+漫著 漫着
+忙著 忙着
+冒著 冒着
+美著 美着
+夢著 夢着
+蒙著 蒙着
+拿著 拿着
+逆著 逆着
+釀著 釀着
+努著 努着
+趴著 趴着
+跑著 跑着
+陪著 陪着
+配著 配着
+披著 披着
+騙著 騙着
+飄著 飄着
+拼著 拼着
+鋪著 鋪着
+騎著 騎着
+牽著 牽着
+求著 求着
+去著 去着
+嚷著 嚷着
+繞著 繞着
+忍著 忍着
+揉著 揉着
+潤著 潤着
+燒著 燒着
+身著 身着
+沉著 沉着
+盛著 盛着
+試著 試着
+守著 守着
+受著 受着
+梳著 梳着
+豎著 豎着
+數著 數着
+睡得著      睡得着
+睡不著      睡不着
+睡著 睡着
+順著 順着
+隨著 隨着
+踏著 踏着
+抬著 抬着
+躺著 躺着
+提著 提着
+甜著 甜着
+挑著 挑着
+跳著 跳着
+聽得著      聽得着
+聽不著      聽不着
+聽著 聽着
+偷著 偷着
+拖著 拖着
+望著 望着
+圍著 圍着
+味著 味着
+想著 想着
+響著 響着
+向著 向着
+笑著 笑着
+心著 心着
+信著 信着
+行著 行着
+性著 性着
+學著 學着
+尋著 尋着
+循著 循着
+壓著 壓着
+雅著 雅着
+沿著 沿着
+耀著 耀着
+掖著 掖着
+衣著 衣着
+疑著 疑着
+溢著 溢着
+藝著 藝着
+因著 因着
+印著 印着
+應著 應着
+映著 映着
+用得著      用得着
+用不著      用不着
+用著 用着
+悠著 悠着
+有著 有着
+與著 與着
+語著 語着
+豫著 豫着
+遠著 遠着
+躍著 躍着
+雜著 雜着
+載著 載着
+在著 在着
+紮著 紮着
+展著 展着
+站著 站着
+戰著 戰着
+蘸著 蘸着
+仗著 仗着
+找得著      找得着
+找不著      找不着
+照著 照着
+罩著 罩着
+貞著 貞着
+枕著 枕着
+爭著 爭着
+掙著 掙着
+制著 制着
+志著 志着
+皺著 皺着
+住著 住着
+抓著 抓着
+轉著 轉着
+裝著 裝着
+追著 追着
+髭著 髭着
+走著 走着
+坐著 坐着
+做著 做着
+含著 含着
+涵著 涵着
+演著 演着
+保障著      保障着
+黏著 黏着
+膠著 膠着
+附著 附着
+代表著      代表着
+浮著 浮着
+寫著 寫着
+遇著 遇着
+殺著 殺着
+著筆 着筆
+著鞭 着鞭
+著法 着法
+著火 着火
+著急 着急
+著艦 着艦
+著腳 着腳
+著她 着她
+著緊 着緊
+著力 着力
+著涼 着涼
+著陸 着陸
+著錄 着錄
+著落 着落
+著忙 着忙
+著迷 着迷
+著墨 着墨
+著妳 着妳
+著你 着你
+著色 着色
+著什麼急   着什麼急
+著實 着實
+著手 着手
+著數 着數
+著絲 着絲
+著他 着他
+著它 着它
+著祂 着祂
+著我 着我
+著想 着想
+著眼 着眼
+著衣 着衣
+著意 着意
+著重 着重
+著重 着重
+著裝 着裝
+著地 着地
+不著邊際   不着邊際
+不著痕跡   不着痕跡
+挨著作      挨著作
+挨著者      挨著者
+挨著名      挨著名
+挨著述      挨著述
+挨著稱      挨著稱
+挨著錄      挨著錄
+愛著作      愛著作
+愛著者      愛著者
+愛著名      愛著名
+愛著述      愛著述
+愛著稱      愛著稱
+愛著錄      愛著錄
+愛著書      愛著書
+暗著作      暗著作
+暗著者      暗著者
+暗著名      暗著名
+暗著述      暗著述
+暗著稱      暗著稱
+暗著錄      暗著錄
+暗著書      暗著書
+昂著作      昂著作
+昂著者      昂著者
+昂著名      昂著名
+昂著述      昂著述
+昂著稱      昂著稱
+昂著錄      昂著錄
+昂著書      昂著書
+擺著作      擺著作
+擺著者      擺著者
+擺著名      擺著名
+擺著述      擺著述
+擺著稱      擺著稱
+擺著錄      擺著錄
+伴著作      伴著作
+伴著者      伴著者
+伴著名      伴著名
+伴著述      伴著述
+伴著稱      伴著稱
+伴著錄      伴著錄
+伴著書      伴著書
+辦著作      辦著作
+辦著者      辦著者
+辦著名      辦著名
+辦著述      辦著述
+辦著稱      辦著稱
+辦著錄      辦著錄
+辦著書      辦著書
+幫著作      幫著作
+幫著者      幫著者
+幫著名      幫著名
+幫著述      幫著述
+幫著稱      幫著稱
+幫著錄      幫著錄
+幫著書      幫著書
+綁著作      綁著作
+綁著者      綁著者
+綁著名      綁著名
+綁著述      綁著述
+綁著稱      綁著稱
+綁著錄      綁著錄
+綁著書      綁著書
+抱著作      抱著作
+抱著者      抱著者
+抱著名      抱著名
+抱著述      抱著述
+抱著稱      抱著稱
+抱著錄      抱著錄
+背著作      背著作
+背著者      背著者
+背著名      背著名
+背著述      背著述
+背著稱      背著稱
+背著錄      背著錄
+背著書      背著書
+備著作      備著作
+備著者      備著者
+備著名      備著名
+備著述      備著述
+備著稱      備著稱
+備著錄      備著錄
+備著書      備著書
+本著作      本著作
+本著者      本著者
+本著名      本著名
+本著述      本著述
+本著稱      本著稱
+本著錄      本著錄
+本著書      本著書
+逼著作      逼著作
+逼著者      逼著者
+逼著名      逼著名
+逼著述      逼著述
+逼著稱      逼著稱
+逼著錄      逼著錄
+逼著書      逼著書
+閉著作      閉著作
+閉著者      閉著者
+閉著名      閉著名
+閉著述      閉著述
+閉著稱      閉著稱
+閉著錄      閉著錄
+閉著書      閉著書
+變著作      變著作
+變著者      變著者
+變著名      變著名
+變著述      變著述
+變著稱      變著稱
+變著錄      變著錄
+變著書      變著書
+猜著作      猜著作
+猜著者      猜著者
+猜著名      猜著名
+猜著述      猜著述
+猜著稱      猜著稱
+猜著錄      猜著錄
+猜著書      猜著書
+踩著作      踩著作
+踩著者      踩著者
+踩著名      踩著名
+踩著述      踩著述
+踩著稱      踩著稱
+踩著錄      踩著錄
+踩著書      踩著書
+藏著作      藏著作
+藏著者      藏著者
+藏著名      藏著名
+藏著述      藏著述
+藏著稱      藏著稱
+藏著錄      藏著錄
+藏著書      藏著書
+側著作      側著作
+側著者      側著者
+側著名      側著名
+側著述      側著述
+側著稱      側著稱
+側著錄      側著錄
+側著書      側著書
+纏著作      纏著作
+纏著者      纏著者
+纏著名      纏著名
+纏著述      纏著述
+纏著稱      纏著稱
+纏著錄      纏著錄
+纏著書      纏著書
+敞著作      敞著作
+敞著者      敞著者
+敞著名      敞著名
+敞著述      敞著述
+敞著稱      敞著稱
+敞著錄      敞著錄
+唱著作      唱著作
+唱著者      唱著者
+唱著名      唱著名
+唱著述      唱著述
+唱著稱      唱著稱
+唱著錄      唱著錄
+唱著書      唱著書
+朝著作      朝著作
+朝著者      朝著者
+朝著名      朝著名
+朝著述      朝著述
+朝著稱      朝著稱
+朝著錄      朝著錄
+沉著作      沉著作
+沉著者      沉著者
+沉著名      沉著名
+沉著述      沉著述
+沉著稱      沉著稱
+沉著錄      沉著錄
+沉著書      沉著書
+乘著作      乘著作
+乘著者      乘著者
+乘著名      乘著名
+乘著述      乘著述
+乘著稱      乘著稱
+乘著錄      乘著錄
+乘著書      乘著書
+持著作      持著作
+持著者      持著者
+持著名      持著名
+持著述      持著述
+持著稱      持著稱
+持著錄      持著錄
+斥著作      斥著作
+斥著者      斥著者
+斥著名      斥著名
+斥著述      斥著述
+斥著稱      斥著稱
+斥著錄      斥著錄
+斥著書      斥著書
+醜著作      醜著作
+醜著者      醜著者
+醜著名      醜著名
+醜著述      醜著述
+醜著稱      醜著稱
+醜著錄      醜著錄
+醜著書      醜著書
+穿著作      穿著作
+穿著者      穿著者
+穿著名      穿著名
+穿著述      穿著述
+穿著稱      穿著稱
+穿著錄      穿著錄
+穿著書      穿著書
+吹著作      吹著作
+吹著者      吹著者
+吹著名      吹著名
+吹著述      吹著述
+吹著稱      吹著稱
+吹著錄      吹著錄
+吹著書      吹著書
+達著作      達著作
+達著者      達著者
+達著名      達著名
+達著述      達著述
+達著稱      達著稱
+達著錄      達著錄
+達著書      達著書
+打著作      打著作
+打著者      打著者
+打著名      打著名
+打著述      打著述
+打著稱      打著稱
+打著錄      打著錄
+打著書      打著書
+待著作      待著作
+待著者      待著者
+待著名      待著名
+待著述      待著述
+待著稱      待著稱
+待著錄      待著錄
+待著書      待著書
+帶著作      帶著作
+帶著者      帶著者
+帶著名      帶著名
+帶著述      帶著述
+帶著稱      帶著稱
+帶著錄      帶著錄
+帶著書      帶著書
+戴著作      戴著作
+戴著者      戴著者
+戴著名      戴著名
+戴著述      戴著述
+戴著稱      戴著稱
+戴著錄      戴著錄
+戴著書      戴著書
+當著作      當著作
+當著者      當著者
+當著名      當著名
+當著述      當著述
+當著稱      當著稱
+當著錄      當著錄
+當著書      當著書
+擋著作      擋著作
+擋著者      擋著者
+擋著名      擋著名
+擋著述      擋著述
+擋著稱      擋著稱
+擋著錄      擋著錄
+得著作      得著作
+得著者      得著者
+得著名      得著名
+得著述      得著述
+得著稱      得著稱
+得著錄      得著錄
+得著書      得著書
+瞪著作      瞪著作
+瞪著者      瞪著者
+瞪著名      瞪著名
+瞪著述      瞪著述
+瞪著稱      瞪著稱
+瞪著錄      瞪著錄
+瞪著書      瞪著書
+低著作      低著作
+低著者      低著者
+低著名      低著名
+低著述      低著述
+低著稱      低著稱
+低著錄      低著錄
+低著書      低著書
+點著作      點著作
+點著者      點著者
+點著名      點著名
+點著述      點著述
+點著稱      點著稱
+點著錄      點著錄
+點著書      點著書
+盯著作      盯著作
+盯著者      盯著者
+盯著名      盯著名
+盯著述      盯著述
+盯著稱      盯著稱
+盯著錄      盯著錄
+盯著書      盯著書
+頂著作      頂著作
+頂著者      頂著者
+頂著名      頂著名
+頂著述      頂著述
+頂著稱      頂著稱
+頂著錄      頂著錄
+頂著書      頂著書
+定著作      定著作
+定著者      定著者
+定著名      定著名
+定著述      定著述
+定著稱      定著稱
+定著錄      定著錄
+定著書      定著書
+動著作      動著作
+動著者      動著者
+動著名      動著名
+動著述      動著述
+動著稱      動著稱
+動著錄      動著錄
+動著書      動著書
+鬥著作      鬥著作
+鬥著者      鬥著者
+鬥著名      鬥著名
+鬥著述      鬥著述
+鬥著稱      鬥著稱
+鬥著錄      鬥著錄
+鬥著書      鬥著書
+獨著作      獨著作
+獨著者      獨著者
+獨著名      獨著名
+獨著述      獨著述
+獨著稱      獨著稱
+獨著錄      獨著錄
+獨著書      獨著書
+對著作      對著作
+對著者      對著者
+對著名      對著名
+對著述      對著述
+對著稱      對著稱
+對著錄      對著錄
+對著書      對著書
+盾著作      盾著作
+盾著者      盾著者
+盾著名      盾著名
+盾著述      盾著述
+盾著稱      盾著稱
+盾著錄      盾著錄
+盾著書      盾著書
+犯不著作   犯不著作
+犯不著者   犯不著者
+犯不著名   犯不著名
+犯不著述   犯不著述
+犯不著稱   犯不著稱
+犯不著錄   犯不著錄
+犯不著書   犯不著書
+福著作      福著作
+福著者      福著者
+福著名      福著名
+福著述      福著述
+福著稱      福著稱
+福著錄      福著錄
+福著書      福著書
+趕著作      趕著作
+趕著者      趕著者
+趕著名      趕著名
+趕著述      趕著述
+趕著稱      趕著稱
+趕著錄      趕著錄
+趕著書      趕著書
+高著作      高著作
+高著者      高著者
+高著名      高著名
+高著述      高著述
+高著稱      高著稱
+高著錄      高著錄
+高著書      高著書
+隔著作      隔著作
+隔著者      隔著者
+隔著名      隔著名
+隔著述      隔著述
+隔著稱      隔著稱
+隔著錄      隔著錄
+隔著書      隔著書
+跟著作      跟著作
+跟著者      跟著者
+跟著名      跟著名
+跟著述      跟著述
+跟著稱      跟著稱
+跟著錄      跟著錄
+跟著書      跟著書
+孤著作      孤著作
+孤著者      孤著者
+孤著名      孤著名
+孤著述      孤著述
+孤著稱      孤著稱
+孤著錄      孤著錄
+孤著書      孤著書
+關著作      關著作
+關著者      關著者
+關著名      關著名
+關著述      關著述
+關著稱      關著稱
+關著錄      關著錄
+關著書      關著書
+管著作      管著作
+管著者      管著者
+管著名      管著名
+管著述      管著述
+管著稱      管著稱
+管著錄      管著錄
+管著書      管著書
+慣著作      慣著作
+慣著者      慣著者
+慣著名      慣著名
+慣著述      慣著述
+慣著稱      慣著稱
+慣著錄      慣著錄
+慣著書      慣著書
+光著作      光著作
+光著者      光著者
+光著名      光著名
+光著述      光著述
+光著稱      光著稱
+光著錄      光著錄
+光著書      光著書
+跪著作      跪著作
+跪著者      跪著者
+跪著名      跪著名
+跪著述      跪著述
+跪著稱      跪著稱
+跪著錄      跪著錄
+跪著書      跪著書
+裹著作      裹著作
+裹著者      裹著者
+裹著名      裹著名
+裹著述      裹著述
+裹著稱      裹著稱
+裹著錄      裹著錄
+裹著書      裹著書
+撼著作      撼著作
+撼著者      撼著者
+撼著名      撼著名
+撼著述      撼著述
+撼著稱      撼著稱
+撼著錄      撼著錄
+撼著書      撼著書
+喝著作      喝著作
+喝著者      喝著者
+喝著名      喝著名
+喝著述      喝著述
+喝著稱      喝著稱
+喝著錄      喝著錄
+喝著書      喝著書
+候著作      候著作
+候著者      候著者
+候著名      候著名
+候著述      候著述
+候著稱      候著稱
+候著錄      候著錄
+候著書      候著書
+懷著作      懷著作
+懷著者      懷著者
+懷著名      懷著名
+懷著述      懷著述
+懷著稱      懷著稱
+懷著錄      懷著錄
+懷著書      懷著書
+晃著作      晃著作
+晃著者      晃著者
+晃著名      晃著名
+晃著述      晃著述
+晃著稱      晃著稱
+晃著錄      晃著錄
+揮著作      揮著作
+揮著者      揮著者
+揮著名      揮著名
+揮著述      揮著述
+揮著稱      揮著稱
+揮著錄      揮著錄
+活著作      活著作
+活著者      活著者
+活著名      活著名
+活著述      活著述
+活著稱      活著稱
+活著錄      活著錄
+活著書      活著書
+獲著作      獲著作
+獲著者      獲著者
+獲著名      獲著名
+獲著述      獲著述
+獲著稱      獲著稱
+獲著錄      獲著錄
+獲著書      獲著書
+獲著作      獲著作
+獲著者      獲著者
+獲著名      獲著名
+獲著述      獲著述
+獲著稱      獲著稱
+獲著錄      獲著錄
+獲著書      獲著書
+急著作      急著作
+急著者      急著者
+急著名      急著名
+急著述      急著述
+急著稱      急著稱
+急著錄      急著錄
+急著書      急著書
+記著作      記著作
+記著者      記著者
+記著名      記著名
+記著述      記著述
+記著稱      記著稱
+記著錄      記著錄
+記著書      記著書
+冀著作      冀著作
+冀著者      冀著者
+冀著名      冀著名
+冀著述      冀著述
+冀著稱      冀著稱
+冀著錄      冀著錄
+冀著書      冀著書
+夾著作      夾著作
+夾著者      夾著者
+夾著名      夾著名
+夾著述      夾著述
+夾著稱      夾著稱
+夾著錄      夾著錄
+夾著書      夾著書
+駕著作      駕著作
+駕著者      駕著者
+駕著名      駕著名
+駕著述      駕著述
+駕著稱      駕著稱
+駕著錄      駕著錄
+駕著書      駕著書
+見著作      見著作
+見著者      見著者
+見著名      見著名
+見著述      見著述
+見著稱      見著稱
+見著錄      見著錄
+見著書      見著書
+閑著作      閑著作
+閑著者      閑著者
+閑著名      閑著名
+閑著述      閑著述
+閑著稱      閑著稱
+閑著錄      閑著錄
+閑著書      閑著書
+叫著作      叫著作
+叫著者      叫著者
+叫著名      叫著名
+叫著述      叫著述
+叫著稱      叫著稱
+叫著錄      叫著錄
+叫著書      叫著書
+接著作      接著作
+接著者      接著者
+接著名      接著名
+接著述      接著述
+接著稱      接著稱
+接著錄      接著錄
+借著作      借著作
+借著者      借著者
+借著名      借著名
+借著述      借著述
+借著稱      借著稱
+借著錄      借著錄
+借著書      借著書
+借著作      借著作
+借著者      借著者
+借著名      借著名
+借著述      借著述
+借著稱      借著稱
+借著錄      借著錄
+借著書      借著書
+據著作      據著作
+據著者      據著者
+據著名      據著名
+據著述      據著述
+據著稱      據著稱
+據著錄      據著錄
+據著書      據著書
+開著作      開著作
+開著者      開著者
+開著名      開著名
+開著述      開著述
+開著稱      開著稱
+開著錄      開著錄
+開著書      開著書
+看著作      看著作
+看著者      看著者
+看著名      看著名
+看著述      看著述
+看著稱      看著稱
+看著錄      看著錄
+看著書      看著書
+康著作      康著作
+康著者      康著者
+康著名      康著名
+康著述      康著述
+康著稱      康著稱
+康著錄      康著錄
+康著書      康著書
+扛著作      扛著作
+扛著者      扛著者
+扛著名      扛著名
+扛著述      扛著述
+扛著稱      扛著稱
+扛著錄      扛著錄
+扛著書      扛著書
+考著作      考著作
+考著者      考著者
+考著名      考著名
+考著述      考著述
+考著稱      考著稱
+考著錄      考著錄
+考著書      考著書
+渴著作      渴著作
+渴著者      渴著者
+渴著名      渴著名
+渴著述      渴著述
+渴著稱      渴著稱
+渴著錄      渴著錄
+渴著書      渴著書
+刻著作      刻著作
+刻著者      刻著者
+刻著名      刻著名
+刻著述      刻著述
+刻著稱      刻著稱
+刻著錄      刻著錄
+刻著書      刻著書
+空著作      空著作
+空著者      空著者
+空著名      空著名
+空著述      空著述
+空著稱      空著稱
+空著錄      空著錄
+空著書      空著書
+哭著作      哭著作
+哭著者      哭著者
+哭著名      哭著名
+哭著述      哭著述
+哭著稱      哭著稱
+哭著錄      哭著錄
+哭著書      哭著書
+苦著作      苦著作
+苦著者      苦著者
+苦著名      苦著名
+苦著述      苦著述
+苦著稱      苦著稱
+苦著錄      苦著錄
+苦著書      苦著書
+捆著作      捆著作
+捆著者      捆著者
+捆著名      捆著名
+捆著述      捆著述
+捆著稱      捆著稱
+捆著錄      捆著錄
+困著作      困著作
+困著者      困著者
+困著名      困著名
+困著述      困著述
+困著稱      困著稱
+困著錄      困著錄
+困著書      困著書
+拉著作      拉著作
+拉著者      拉著者
+拉著名      拉著名
+拉著述      拉著述
+拉著稱      拉著稱
+拉著錄      拉著錄
+拉著書      拉著書
+來著作      來著作
+來著者      來著者
+來著名      來著名
+來著述      來著述
+來著稱      來著稱
+來著錄      來著錄
+來著書      來著書
+樂著作      樂著作
+樂著者      樂著者
+樂著名      樂著名
+樂著述      樂著述
+樂著稱      樂著稱
+樂著錄      樂著錄
+樂著書      樂著書
+努力著作   努力著作
+努力著者   努力著者
+努力著名   努力著名
+努力著述   努力著述
+努力著稱   努力著稱
+努力著錄   努力著錄
+努力著書   努力著書
+麗著作      麗著作
+麗著者      麗著者
+麗著名      麗著名
+麗著述      麗著述
+麗著稱      麗著稱
+麗著錄      麗著錄
+麗著書      麗著書
+連著作      連著作
+連著者      連著者
+連著名      連著名
+連著述      連著述
+連著稱      連著稱
+連著錄      連著錄
+連著書      連著書
+戀著作      戀著作
+戀著者      戀著者
+戀著名      戀著名
+戀著述      戀著述
+戀著稱      戀著稱
+戀著錄      戀著錄
+戀著書      戀著書
+涼著作      涼著作
+涼著者      涼著者
+涼著名      涼著名
+涼著述      涼著述
+涼著稱      涼著稱
+涼著錄      涼著錄
+涼著書      涼著書
+亮著作      亮著作
+亮著者      亮著者
+亮著名      亮著名
+亮著述      亮著述
+亮著稱      亮著稱
+亮著錄      亮著錄
+亮著書      亮著書
+臨著作      臨著作
+臨著者      臨著者
+臨著名      臨著名
+臨著述      臨著述
+臨著稱      臨著稱
+臨著錄      臨著錄
+臨著書      臨著書
+拎著作      拎著作
+拎著者      拎著者
+拎著名      拎著名
+拎著述      拎著述
+拎著稱      拎著稱
+拎著錄      拎著錄
+領著作      領著作
+領著者      領著者
+領著名      領著名
+領著述      領著述
+領著稱      領著稱
+領著錄      領著錄
+領著書      領著書
+流著作      流著作
+流著者      流著者
+流著名      流著名
+流著述      流著述
+流著稱      流著稱
+流著錄      流著錄
+流著書      流著書
+留著作      留著作
+留著者      留著者
+留著名      留著名
+留著述      留著述
+留著稱      留著稱
+留著錄      留著錄
+留著書      留著書
+摟著作      摟著作
+摟著者      摟著者
+摟著名      摟著名
+摟著述      摟著述
+摟著稱      摟著稱
+摟著錄      摟著錄
+陋著作      陋著作
+陋著者      陋著者
+陋著名      陋著名
+陋著述      陋著述
+陋著稱      陋著稱
+陋著錄      陋著錄
+陋著書      陋著書
+落著作      落著作
+落著者      落著者
+落著名      落著名
+落著述      落著述
+落著稱      落著稱
+落著錄      落著錄
+落著書      落著書
+罵著作      罵著作
+罵著者      罵著者
+罵著名      罵著名
+罵著述      罵著述
+罵著稱      罵著稱
+罵著錄      罵著錄
+罵著書      罵著書
+瞞著作      瞞著作
+瞞著者      瞞著者
+瞞著名      瞞著名
+瞞著述      瞞著述
+瞞著稱      瞞著稱
+瞞著錄      瞞著錄
+瞞著書      瞞著書
+漫著作      漫著作
+漫著者      漫著者
+漫著名      漫著名
+漫著述      漫著述
+漫著稱      漫著稱
+漫著錄      漫著錄
+漫著書      漫著書
+忙著作      忙著作
+忙著者      忙著者
+忙著名      忙著名
+忙著述      忙著述
+忙著稱      忙著稱
+忙著錄      忙著錄
+忙著書      忙著書
+冒著作      冒著作
+冒著者      冒著者
+冒著名      冒著名
+冒著述      冒著述
+冒著稱      冒著稱
+冒著錄      冒著錄
+冒著書      冒著書
+美著作      美著作
+美著者      美著者
+美著名      美著名
+美著述      美著述
+美著稱      美著稱
+美著錄      美著錄
+美著書      美著書
+夢著作      夢著作
+夢著者      夢著者
+夢著名      夢著名
+夢著述      夢著述
+夢著稱      夢著稱
+夢著錄      夢著錄
+夢著書      夢著書
+蒙著作      蒙著作
+蒙著者      蒙著者
+蒙著名      蒙著名
+蒙著述      蒙著述
+蒙著稱      蒙著稱
+蒙著錄      蒙著錄
+蒙著書      蒙著書
+拿著作      拿著作
+拿著者      拿著者
+拿著名      拿著名
+拿著述      拿著述
+拿著稱      拿著稱
+拿著錄      拿著錄
+逆著作      逆著作
+逆著者      逆著者
+逆著名      逆著名
+逆著述      逆著述
+逆著稱      逆著稱
+逆著錄      逆著錄
+逆著書      逆著書
+釀著作      釀著作
+釀著者      釀著者
+釀著名      釀著名
+釀著述      釀著述
+釀著稱      釀著稱
+釀著錄      釀著錄
+釀著書      釀著書
+努著作      努著作
+努著者      努著者
+努著名      努著名
+努著述      努著述
+努著稱      努著稱
+努著錄      努著錄
+努著書      努著書
+趴著作      趴著作
+趴著者      趴著者
+趴著名      趴著名
+趴著述      趴著述
+趴著稱      趴著稱
+趴著錄      趴著錄
+趴著書      趴著書
+跑著作      跑著作
+跑著者      跑著者
+跑著名      跑著名
+跑著述      跑著述
+跑著稱      跑著稱
+跑著錄      跑著錄
+跑著書      跑著書
+陪著作      陪著作
+陪著者      陪著者
+陪著名      陪著名
+陪著述      陪著述
+陪著稱      陪著稱
+陪著錄      陪著錄
+陪著書      陪著書
+配著作      配著作
+配著者      配著者
+配著名      配著名
+配著述      配著述
+配著稱      配著稱
+配著錄      配著錄
+配著書      配著書
+披著作      披著作
+披著者      披著者
+披著名      披著名
+披著述      披著述
+披著稱      披著稱
+披著錄      披著錄
+披著書      披著書
+騙著作      騙著作
+騙著者      騙著者
+騙著名      騙著名
+騙著述      騙著述
+騙著稱      騙著稱
+騙著錄      騙著錄
+騙著書      騙著書
+飄著作      飄著作
+飄著者      飄著者
+飄著名      飄著名
+飄著述      飄著述
+飄著稱      飄著稱
+飄著錄      飄著錄
+飄著書      飄著書
+拼著作      拼著作
+拼著者      拼著者
+拼著名      拼著名
+拼著述      拼著述
+拼著稱      拼著稱
+拼著錄      拼著錄
+鋪著作      鋪著作
+鋪著者      鋪著者
+鋪著名      鋪著名
+鋪著述      鋪著述
+鋪著稱      鋪著稱
+鋪著錄      鋪著錄
+鋪著書      鋪著書
+騎著作      騎著作
+騎著者      騎著者
+騎著名      騎著名
+騎著述      騎著述
+騎著稱      騎著稱
+騎著錄      騎著錄
+騎著書      騎著書
+牽著作      牽著作
+牽著者      牽著者
+牽著名      牽著名
+牽著述      牽著述
+牽著稱      牽著稱
+牽著錄      牽著錄
+牽著書      牽著書
+求著作      求著作
+求著者      求著者
+求著名      求著名
+求著述      求著述
+求著稱      求著稱
+求著錄      求著錄
+求著書      求著書
+去著作      去著作
+去著者      去著者
+去著名      去著名
+去著述      去著述
+去著稱      去著稱
+去著錄      去著錄
+去著書      去著書
+嚷著作      嚷著作
+嚷著者      嚷著者
+嚷著名      嚷著名
+嚷著述      嚷著述
+嚷著稱      嚷著稱
+嚷著錄      嚷著錄
+嚷著書      嚷著書
+繞著作      繞著作
+繞著者      繞著者
+繞著名      繞著名
+繞著述      繞著述
+繞著稱      繞著稱
+繞著錄      繞著錄
+繞著書      繞著書
+忍著作      忍著作
+忍著者      忍著者
+忍著名      忍著名
+忍著述      忍著述
+忍著稱      忍著稱
+忍著錄      忍著錄
+忍著書      忍著書
+揉著作      揉著作
+揉著者      揉著者
+揉著名      揉著名
+揉著述      揉著述
+揉著稱      揉著稱
+揉著錄      揉著錄
+揉著書      揉著書
+潤著作      潤著作
+潤著者      潤著者
+潤著名      潤著名
+潤著述      潤著述
+潤著稱      潤著稱
+潤著錄      潤著錄
+潤著書      潤著書
+燒著作      燒著作
+燒著者      燒著者
+燒著名      燒著名
+燒著述      燒著述
+燒著稱      燒著稱
+燒著錄      燒著錄
+燒著書      燒著書
+身著作      身著作
+身著者      身著者
+身著名      身著名
+身著述      身著述
+身著稱      身著稱
+身著錄      身著錄
+身著書      身著書
+沉著作      沉著作
+沉著者      沉著者
+沉著名      沉著名
+沉著述      沉著述
+沉著稱      沉著稱
+沉著錄      沉著錄
+沉著書      沉著書
+盛著作      盛著作
+盛著者      盛著者
+盛著名      盛著名
+盛著述      盛著述
+盛著稱      盛著稱
+盛著錄      盛著錄
+盛著書      盛著書
+試著作      試著作
+試著者      試著者
+試著名      試著名
+試著述      試著述
+試著稱      試著稱
+試著錄      試著錄
+試著書      試著書
+守著作      守著作
+守著者      守著者
+守著名      守著名
+守著述      守著述
+守著稱      守著稱
+守著錄      守著錄
+守著書      守著書
+受著作      受著作
+受著者      受著者
+受著名      受著名
+受著述      受著述
+受著稱      受著稱
+受著錄      受著錄
+受著書      受著書
+梳著作      梳著作
+梳著者      梳著者
+梳著名      梳著名
+梳著述      梳著述
+梳著稱      梳著稱
+梳著錄      梳著錄
+豎著作      豎著作
+豎著者      豎著者
+豎著名      豎著名
+豎著述      豎著述
+豎著稱      豎著稱
+豎著錄      豎著錄
+豎著書      豎著書
+數著作      數著作
+數著者      數著者
+數著名      數著名
+數著述      數著述
+數著稱      數著稱
+數著錄      數著錄
+睡著作      睡著作
+睡著者      睡著者
+睡著名      睡著名
+睡著述      睡著述
+睡著稱      睡著稱
+睡著錄      睡著錄
+睡著書      睡著書
+順著作      順著作
+順著者      順著者
+順著名      順著名
+順著述      順著述
+順著稱      順著稱
+順著錄      順著錄
+順著書      順著書
+隨著作      隨著作
+隨著者      隨著者
+隨著名      隨著名
+隨著述      隨著述
+隨著稱      隨著稱
+隨著錄      隨著錄
+隨著書      隨著書
+踏著作      踏著作
+踏著者      踏著者
+踏著名      踏著名
+踏著述      踏著述
+踏著稱      踏著稱
+踏著錄      踏著錄
+抬著作      抬著作
+抬著者      抬著者
+抬著名      抬著名
+抬著述      抬著述
+抬著稱      抬著稱
+抬著錄      抬著錄
+躺著作      躺著作
+躺著者      躺著者
+躺著名      躺著名
+躺著述      躺著述
+躺著稱      躺著稱
+躺著錄      躺著錄
+躺著書      躺著書
+提著作      提著作
+提著者      提著者
+提著名      提著名
+提著述      提著述
+提著稱      提著稱
+提著錄      提著錄
+甜著作      甜著作
+甜著者      甜著者
+甜著名      甜著名
+甜著述      甜著述
+甜著稱      甜著稱
+甜著錄      甜著錄
+甜著書      甜著書
+挑著作      挑著作
+挑著者      挑著者
+挑著名      挑著名
+挑著述      挑著述
+挑著稱      挑著稱
+挑著錄      挑著錄
+跳著作      跳著作
+跳著者      跳著者
+跳著名      跳著名
+跳著述      跳著述
+跳著稱      跳著稱
+跳著錄      跳著錄
+跳著書      跳著書
+聽著作      聽著作
+聽著者      聽著者
+聽著名      聽著名
+聽著述      聽著述
+聽著稱      聽著稱
+聽著錄      聽著錄
+聽著書      聽著書
+偷著作      偷著作
+偷著者      偷著者
+偷著名      偷著名
+偷著述      偷著述
+偷著稱      偷著稱
+偷著錄      偷著錄
+偷著書      偷著書
+拖著作      拖著作
+拖著者      拖著者
+拖著名      拖著名
+拖著述      拖著述
+拖著稱      拖著稱
+拖著錄      拖著錄
+望著作      望著作
+望著者      望著者
+望著名      望著名
+望著述      望著述
+望著稱      望著稱
+望著錄      望著錄
+望著書      望著書
+圍著作      圍著作
+圍著者      圍著者
+圍著名      圍著名
+圍著述      圍著述
+圍著稱      圍著稱
+圍著錄      圍著錄
+圍著書      圍著書
+味著作      味著作
+味著者      味著者
+味著名      味著名
+味著述      味著述
+味著稱      味著稱
+味著錄      味著錄
+味著書      味著書
+想著作      想著作
+想著者      想著者
+想著名      想著名
+想著述      想著述
+想著稱      想著稱
+想著錄      想著錄
+想著書      想著書
+響著作      響著作
+響著者      響著者
+響著名      響著名
+響著述      響著述
+響著稱      響著稱
+響著錄      響著錄
+響著書      響著書
+向著作      向著作
+向著者      向著者
+向著名      向著名
+向著述      向著述
+向著稱      向著稱
+向著錄      向著錄
+向著書      向著書
+笑著作      笑著作
+笑著者      笑著者
+笑著名      笑著名
+笑著述      笑著述
+笑著稱      笑著稱
+笑著錄      笑著錄
+笑著書      笑著書
+心著作      心著作
+心著者      心著者
+心著名      心著名
+心著述      心著述
+心著稱      心著稱
+心著錄      心著錄
+心著書      心著書
+信著作      信著作
+信著者      信著者
+信著名      信著名
+信著述      信著述
+信著稱      信著稱
+信著錄      信著錄
+信著書      信著書
+行著作      行著作
+行著者      行著者
+行著名      行著名
+行著述      行著述
+行著稱      行著稱
+行著錄      行著錄
+行著書      行著書
+性著作      性著作
+性著者      性著者
+性著名      性著名
+性著述      性著述
+性著稱      性著稱
+性著錄      性著錄
+性著書      性著書
+學著作      學著作
+學著者      學著者
+學著名      學著名
+學著述      學著述
+學著稱      學著稱
+學著錄      學著錄
+學著書      學著書
+尋著作      尋著作
+尋著者      尋著者
+尋著名      尋著名
+尋著述      尋著述
+尋著稱      尋著稱
+尋著錄      尋著錄
+尋著書      尋著書
+循著作      循著作
+循著者      循著者
+循著名      循著名
+循著述      循著述
+循著稱      循著稱
+循著錄      循著錄
+循著書      循著書
+壓著作      壓著作
+壓著者      壓著者
+壓著名      壓著名
+壓著述      壓著述
+壓著稱      壓著稱
+壓著錄      壓著錄
+壓著書      壓著書
+雅著作      雅著作
+雅著者      雅著者
+雅著名      雅著名
+雅著述      雅著述
+雅著稱      雅著稱
+雅著錄      雅著錄
+雅著書      雅著書
+沿著作      沿著作
+沿著者      沿著者
+沿著名      沿著名
+沿著述      沿著述
+沿著稱      沿著稱
+沿著錄      沿著錄
+沿著書      沿著書
+耀著作      耀著作
+耀著者      耀著者
+耀著名      耀著名
+耀著述      耀著述
+耀著稱      耀著稱
+耀著錄      耀著錄
+耀著書      耀著書
+掖著作      掖著作
+掖著者      掖著者
+掖著名      掖著名
+掖著述      掖著述
+掖著稱      掖著稱
+掖著錄      掖著錄
+衣著作      衣著作
+衣著者      衣著者
+衣著名      衣著名
+衣著述      衣著述
+衣著稱      衣著稱
+衣著錄      衣著錄
+衣著書      衣著書
+疑著作      疑著作
+疑著者      疑著者
+疑著名      疑著名
+疑著述      疑著述
+疑著稱      疑著稱
+疑著錄      疑著錄
+疑著書      疑著書
+溢著作      溢著作
+溢著者      溢著者
+溢著名      溢著名
+溢著述      溢著述
+溢著稱      溢著稱
+溢著錄      溢著錄
+溢著書      溢著書
+藝著作      藝著作
+藝著者      藝著者
+藝著名      藝著名
+藝著述      藝著述
+藝著稱      藝著稱
+藝著錄      藝著錄
+藝著書      藝著書
+因著作      因著作
+因著者      因著者
+因著名      因著名
+因著述      因著述
+因著稱      因著稱
+因著錄      因著錄
+因著書      因著書
+印著作      印著作
+印著者      印著者
+印著名      印著名
+印著述      印著述
+印著稱      印著稱
+印著錄      印著錄
+印著書      印著書
+應著作      應著作
+應著者      應著者
+應著名      應著名
+應著述      應著述
+應著稱      應著稱
+應著錄      應著錄
+應著書      應著書
+映著作      映著作
+映著者      映著者
+映著名      映著名
+映著述      映著述
+映著稱      映著稱
+映著錄      映著錄
+映著書      映著書
+用著作      用著作
+用著者      用著者
+用著名      用著名
+用著述      用著述
+用著稱      用著稱
+用著錄      用著錄
+用著書      用著書
+悠著作      悠著作
+悠著者      悠著者
+悠著名      悠著名
+悠著述      悠著述
+悠著稱      悠著稱
+悠著錄      悠著錄
+悠著書      悠著書
+有著作      有著作
+有著者      有著者
+有著名      有著名
+有著述      有著述
+有著稱      有著稱
+有著錄      有著錄
+有著書      有著書
+與著作      與著作
+與著者      與著者
+與著名      與著名
+與著述      與著述
+與著稱      與著稱
+與著錄      與著錄
+與著書      與著書
+語著作      語著作
+語著者      語著者
+語著名      語著名
+語著述      語著述
+語著稱      語著稱
+語著錄      語著錄
+語著書      語著書
+豫著作      豫著作
+豫著者      豫著者
+豫著名      豫著名
+豫著述      豫著述
+豫著稱      豫著稱
+豫著錄      豫著錄
+豫著書      豫著書
+遠著作      遠著作
+遠著者      遠著者
+遠著名      遠著名
+遠著述      遠著述
+遠著稱      遠著稱
+遠著錄      遠著錄
+遠著書      遠著書
+躍著作      躍著作
+躍著者      躍著者
+躍著名      躍著名
+躍著述      躍著述
+躍著稱      躍著稱
+躍著錄      躍著錄
+躍著書      躍著書
+雜著作      雜著作
+雜著者      雜著者
+雜著名      雜著名
+雜著述      雜著述
+雜著稱      雜著稱
+雜著錄      雜著錄
+雜著書      雜著書
+載著作      載著作
+載著者      載著者
+載著名      載著名
+載著述      載著述
+載著稱      載著稱
+載著錄      載著錄
+載著書      載著書
+在著作      在著作
+在著者      在著者
+在著名      在著名
+在著述      在著述
+在著稱      在著稱
+在著錄      在著錄
+在著書      在著書
+紮著作      紮著作
+紮著者      紮著者
+紮著名      紮著名
+紮著述      紮著述
+紮著稱      紮著稱
+紮著錄      紮著錄
+紮著書      紮著書
+展著作      展著作
+展著者      展著者
+展著名      展著名
+展著述      展著述
+展著稱      展著稱
+展著錄      展著錄
+展著書      展著書
+站著作      站著作
+站著者      站著者
+站著名      站著名
+站著述      站著述
+站著稱      站著稱
+站著錄      站著錄
+站著書      站著書
+戰著作      戰著作
+戰著者      戰著者
+戰著名      戰著名
+戰著述      戰著述
+戰著稱      戰著稱
+戰著錄      戰著錄
+戰著書      戰著書
+蘸著作      蘸著作
+蘸著者      蘸著者
+蘸著名      蘸著名
+蘸著述      蘸著述
+蘸著稱      蘸著稱
+蘸著錄      蘸著錄
+蘸著書      蘸著書
+仗著作      仗著作
+仗著者      仗著者
+仗著名      仗著名
+仗著述      仗著述
+仗著稱      仗著稱
+仗著錄      仗著錄
+仗著書      仗著書
+照著作      照著作
+照著者      照著者
+照著名      照著名
+照著述      照著述
+照著稱      照著稱
+照著錄      照著錄
+照著書      照著書
+罩著作      罩著作
+罩著者      罩著者
+罩著名      罩著名
+罩著述      罩著述
+罩著稱      罩著稱
+罩著錄      罩著錄
+罩著書      罩著書
+貞著作      貞著作
+貞著者      貞著者
+貞著名      貞著名
+貞著述      貞著述
+貞著稱      貞著稱
+貞著錄      貞著錄
+貞著書      貞著書
+枕著作      枕著作
+枕著者      枕著者
+枕著名      枕著名
+枕著述      枕著述
+枕著稱      枕著稱
+枕著錄      枕著錄
+爭著作      爭著作
+爭著者      爭著者
+爭著名      爭著名
+爭著述      爭著述
+爭著稱      爭著稱
+爭著錄      爭著錄
+爭著書      爭著書
+掙著作      掙著作
+掙著者      掙著者
+掙著名      掙著名
+掙著述      掙著述
+掙著稱      掙著稱
+掙著錄      掙著錄
+掙著書      掙著書
+制著作      制著作
+制著者      制著者
+制著名      制著名
+制著述      制著述
+制著稱      制著稱
+制著錄      制著錄
+制著書      制著書
+志著作      志著作
+志著者      志著者
+志著名      志著名
+志著述      志著述
+志著稱      志著稱
+志著錄      志著錄
+志著書      志著書
+皺著作      皺著作
+皺著者      皺著者
+皺著名      皺著名
+皺著述      皺著述
+皺著稱      皺著稱
+皺著錄      皺著錄
+皺著書      皺著書
+住著作      住著作
+住著者      住著者
+住著名      住著名
+住著述      住著述
+住著稱      住著稱
+住著錄      住著錄
+住著書      住著書
+抓著作      抓著作
+抓著者      抓著者
+抓著名      抓著名
+抓著述      抓著述
+抓著稱      抓著稱
+抓著錄      抓著錄
+轉著作      轉著作
+轉著者      轉著者
+轉著名      轉著名
+轉著述      轉著述
+轉著稱      轉著稱
+轉著錄      轉著錄
+轉著書      轉著書
+裝著作      裝著作
+裝著者      裝著者
+裝著名      裝著名
+裝著述      裝著述
+裝著稱      裝著稱
+裝著錄      裝著錄
+裝著書      裝著書
+追著作      追著作
+追著者      追著者
+追著名      追著名
+追著述      追著述
+追著稱      追著稱
+追著錄      追著錄
+追著書      追著書
+髭著作      髭著作
+髭著者      髭著者
+髭著名      髭著名
+髭著述      髭著述
+髭著稱      髭著稱
+髭著錄      髭著錄
+髭著書      髭著書
+走著作      走著作
+走著者      走著者
+走著名      走著名
+走著述      走著述
+走著稱      走著稱
+走著錄      走著錄
+走著書      走著書
+坐著作      坐著作
+坐著者      坐著者
+坐著名      坐著名
+坐著述      坐著述
+坐著稱      坐著稱
+坐著錄      坐著錄
+坐著書      坐著書
+做著作      做著作
+做著者      做著者
+做著名      做著名
+做著述      做著述
+做著稱      做著稱
+做著錄      做著錄
+做著書      做著書
+含著作      含著作
+含著者      含著者
+含著名      含著名
+含著述      含著述
+含著稱      含著稱
+含著錄      含著錄
+含著書      含著書
+涵著作      涵著作
+涵著者      涵著者
+涵著名      涵著名
+涵著述      涵著述
+涵著稱      涵著稱
+涵著錄      涵著錄
+涵著書      涵著書
+演著作      演著作
+演著者      演著者
+演著名      演著名
+演著述      演著述
+演著稱      演著稱
+演著錄      演著錄
+演著書      演著書
+保障著作   保障著作
+保障著者   保障著者
+保障著名   保障著名
+保障著述   保障著述
+保障著稱   保障著稱
+保障著錄   保障著錄
+保障著書   保障著書
+黏著作      黏著作
+黏著者      黏著者
+黏著名      黏著名
+黏著述      黏著述
+黏著稱      黏著稱
+黏著錄      黏著錄
+黏著書      黏著書
+膠著作      膠著作
+膠著者      膠著者
+膠著名      膠著名
+膠著述      膠著述
+膠著稱      膠著稱
+膠著錄      膠著錄
+膠著書      膠著書
+附著作      附著作
+附著者      附著者
+附著名      附著名
+附著述      附著述
+附著稱      附著稱
+附著錄      附著錄
+附著書      附著書
+代表著作   代表著作
+代表著者   代表著者
+代表著名   代表著名
+代表著述   代表著述
+代表著稱   代表著稱
+代表著錄   代表著錄
+代表著書   代表著書
+浮著作      浮著作
+浮著者      浮著者
+浮著名      浮著名
+浮著述      浮著述
+浮著稱      浮著稱
+浮著錄      浮著錄
+浮著書      浮著書
+寫著作      寫著作
+寫著者      寫著者
+寫著名      寫著名
+寫著述      寫著述
+寫著稱      寫著稱
+寫著錄      寫著錄
+寫著書      寫著書
+遇著作      遇著作
+遇著者      遇著者
+遇著名      遇著名
+遇著述      遇著述
+遇著稱      遇著稱
+遇著錄      遇著錄
+遇著書      遇著書
+殺著作      殺著作
+殺著者      殺著者
+殺著名      殺著名
+殺著述      殺著述
+殺著稱      殺著稱
+殺著錄      殺著錄
+殺著書      殺著書
+標誌著      標誌着
+幹著 幹着
+干着 幹着
+干着急      干着急
+流露著      流露着
+靠著 靠着
+靠著作      靠著作
+靠著名      靠著名
+靠著錄      靠著錄
+靠著录      靠著錄
+靠著稱      靠著稱
+靠著称      靠著稱
+靠著者      靠著者
+靠著述      靠著述
+新著龍虎門        新著龍虎門
+迫著 迫着
+心繫著      心繫着
+藉著 藉着
+吃得著      吃得着
+吃不著      吃不着
+吃著 吃着
+聞得著      闻得着
+聞不著      闻不着
+聞著 闻着
+嗅得著      嗅得着
+嗅不著      嗅不着
+嗅著 嗅着
+警戒著      警戒着
+榴莲 榴槤
+榴蓮 榴槤
+发布 發佈
+發布 發佈
+掛鉤 掛鈎
+鉤心鬥角   鈎心鬥角
+咤    咤
+叱吒 叱咤
+叱咤 叱咤
+醯    酰
+醯醬 醯醬
+醯雞 醯雞
+醯酱 醯醬
+醯鸡 醯雞
+醯醋 醯醋
+醯醢 醯醢
+醯壶 醯壺
+醯壺 醯壺
+菸    煙
+雪裡紅      雪裏紅
+雪裡蕻      雪裏蕻
+雪里蕻      雪裏蕻
+雪里红      雪裏紅
+森林裡      森林裏
+森林里      森林裏
+日子裡      日子裏
+日子里      日子裏
+故事裡      故事裏
+故事里      故事裏
+領域裡      領域裏
+领域里      領域裏
+時間裡      時間裏
+时间里      時間裏
+深淵裡      深淵裏
+深渊里      深渊裏
+醫院裡      醫院裏
+医院里      医院裏
+春假裡      春假裏
+春假里      春假裏
+暑假裡      暑假裏
+暑假里      暑假裏
+秋假裡      秋假裏
+秋假里      秋假裏
+寒假裡      寒假裏
+寒假里      寒假裏
+春天裡      春天裏
+春天里      春天裏
+夏天裡      夏天裏
+夏天里      夏天裏
+秋天裡      秋天裏
+秋天里      秋天裏
+冬天裡      冬天裏
+冬天里      冬天裏
+春日裡      春日裏
+夏日裡      夏日裏
+秋日裡      秋日裏
+冬日裡      冬日裏
+春日里      春日裏
+夏日里      夏日裏
+秋日里      秋日裏
+冬日里      冬日裏
+嘴裡 嘴裏
+嘴里 嘴裏
+心裡 心裏
+心里 心裏
+皮裡陽秋   皮裏陽秋
+皮里阳秋   皮裏陽秋
+肚裡 肚裏
+肚里 肚裏
+苦裡 苦裏
+苦里 苦裏
+裡勾外連   裏勾外連
+里勾外连   裏勾外連
+裡面 裏面
+里面 裏面
+這裡 這裏
+這里 這裏
+點裡 點裏
+点里 點裏
+中文裡      中文裏
+中文里      中文裏
+山洞里      山洞裏
+山洞裡      山洞裏
+近角聪信   近角聰信
+近角聰信   近角聰信
+世界里      世界裏
+世界裡      世界裏
+眼睛里      眼睛裏
+眼睛裡      眼睛裏
+百科裡      百科裏
+百科里      百科裏
+歷史裡      歷史裏
+历史里      歷史裏
+戲裡 戲裏
+戏里 戲裏
+作品裡      作品裏
+作品里      作品裏
+專輯裡      專輯裏
+专辑里      專輯裏
+年代裡      年代裏
+年代里      年代裏
+棺材裡      棺材裏
+棺材里      棺材裏
+學裡 學裏
+学里 學裏
+獄裡 獄裏
+狱里 獄裏
+館裡 館裏
+馆里 館裏
+系列裡      系列裏
+系列里      系列裏
+村子裡      村子裏
+村子里      村子裏
+分布 分佈
+分布于      分佈於
+分布於      分佈於
+想象 想像
+無線電視   無綫電視
+无线电视   無綫電視
+無線收費   無綫收費
+无线收费   無綫收費
+無線節目   無綫節目
+无线节目   無綫節目
+無線劇集   無綫劇集
+无线剧集   無綫劇集
+東鐵線      東鐵綫
+东铁线      東鐵綫
+觀塘線      觀塘綫
+观塘线      觀塘綫
+荃灣線      荃灣綫
+荃湾线      荃灣綫
+港島線      港島綫
+港岛线      港島綫
+東涌線      東涌綫
+东涌线      東涌綫
+將軍澳線   將軍澳綫
+将军澳线   將軍澳綫
+西鐵線      西鐵綫
+西铁线      西鐵綫
+馬鞍山線   馬鞍山綫
+马鞍山线   馬鞍山綫
+迪士尼線   迪士尼綫
+迪士尼线   迪士尼綫
+沙田至中環線     沙田至中環綫
+沙田至中环线     沙田至中環綫
+沙中線      沙中綫
+沙中线      沙中綫
+北環線      北環綫
+北环线      北環綫
+機場快線   機場快綫
+机场快线   機場快綫
+505線 505綫
+505线 505綫
+507線 507綫
+507线 507綫
+610線 610綫
+610线 610綫
+614線 614綫
+614线 614綫
+614P線        614P綫
+614P线        614P綫
+615線 615綫
+615线 615綫
+615P線        615P綫
+615P线        615P綫
+705線 705綫
+705线 705綫
+706線 706綫
+706线 706綫
+751線 751綫
+751线 751綫
+751P線        751P綫
+751P线        751P綫
+761P線        761P綫
+761P线        761P綫
diff --git a/maintenance/language/zhtable/toSG.manual b/maintenance/language/zhtable/toSG.manual
new file mode 100644 (file)
index 0000000..2d39aa3
--- /dev/null
@@ -0,0 +1,21 @@
+」    ”
+「    “
+『    ‘
+』    ’
+方便面      快速面
+速食麵      快速面
+即食麵      快速面
+泡麵 快速面
+蹦极跳      绑紧跳
+笨豬跳      绑紧跳
+凉菜 冷菜
+冷盤 冷菜
+零钱 散钱
+散紙 散钱
+笑星 谐星
+夜校 夜学
+民乐 华乐
+住房 住屋
+房价 屋价
+榴莲 榴梿
+榴蓮 榴梿
\ No newline at end of file
diff --git a/maintenance/language/zhtable/toSimp.manual b/maintenance/language/zhtable/toSimp.manual
new file mode 100644 (file)
index 0000000..e22447a
--- /dev/null
@@ -0,0 +1,166 @@
+乾县 乾县
+萧乾 萧乾
+乾断 乾断
+乾图 乾图
+乾纲 乾纲
+乾红 乾红
+乾清宫      乾清宫
+乾仪 乾仪
+乾兴 乾兴
+乾冈 乾冈
+乾刘 乾刘
+乾刚 乾刚
+乾启 乾启
+乾宁 乾宁
+乾岗 乾岗
+乾录 乾录
+乾晖 乾晖
+乾构 乾构
+乾枢 乾枢
+乾栋 乾栋
+乾灵 乾灵
+乾窦 乾窦
+乾笃 乾笃
+乾纽 乾纽
+乾络 乾络
+乾统 乾统
+乾维 乾维
+乾罗 乾罗
+乾荫 乾荫
+乾象历      乾象历
+乾贞 乾贞
+乾贶 乾贶
+乾车 乾车
+乾轴 乾轴
+乾鉴 乾鉴
+乾钧 乾钧
+乾闼 乾闼
+乾顾 乾顾
+乾风 乾风
+乾马 乾马
+乾鹄 乾鹄
+乾鹊 乾鹊
+乾龙 乾龙
+张法乾      张法乾
+旋乾转坤   旋乾转坤
+天道为乾   天道为乾
+易经·乾    易经·乾
+易经乾      易经乾
+乾务 乾务
+黄润乾      黄润乾
+男性为乾   男性为乾
+男为乾      男为乾
+阳为乾      阳为乾
+男性为乾   男性为乾
+男性爲乾   男性为乾
+男为乾      男为乾
+男爲乾      男为乾
+阳为乾      阳为乾
+陽爲乾      阳为乾
+乾一组      乾一组
+乾一坛      乾一坛
+陈乾生      陈乾生
+陈公乾生   陈公乾生
+柳诒徵      柳诒徵
+於夫罗      於夫罗
+於梨华      於梨华
+於潜县      於潜县
+於志贺      於志贺
+憑藉 凭借
+藉端 借端
+藉故 借故
+藉口 借口
+藉助 借助
+藉手 借手
+藉詞 借词
+藉機 借机
+藉此 借此
+藉由 借由
+藉著 借着
+藉着 借着
+沈積 沉积
+沈船 沉船
+沈默 沉默
+沈沒 沉没
+彷彿 仿佛
+項鍊 项链
+肘手鍊足   肘手链足
+鍊子 链子
+鍊條 链条
+拉鍊 拉链
+鉸鍊 铰链
+鍊鎖 链锁
+鎖鍊 锁链
+鐵鍊 铁链
+金鍊 金链
+銀鍊 银链
+鍊錘 链锤
+洗鍊 洗练
+石碁镇      石碁镇
+反覆 反复
+回覆 回复
+答覆 答复
+反反覆覆   反反复复
+重覆 重复
+覆核 复核
+覆查 复查
+鬱姓 鬱姓
+鬱氏 鬱氏
+侏儸紀      侏罗纪
+夥計 伙计
+吳其濬      吴其濬
+吴其濬      吴其濬
+乾泉水      干泉水
+么半群      幺半群
+么元 幺元
+么爹 幺爹
+么叔 幺叔
+么舅 幺舅
+么爸 幺爸
+么媽 幺妈
+么姨 幺姨
+么娘 幺娘
+么孃 幺娘
+幺孃 幺娘
+么妹 幺妹
+么小 幺小
+么姓 幺姓
+么氏 幺氏
+么蛾子      幺蛾子
+幺厮 幺厮
+睪丸 睾丸
+附睪 附睾
+隱睪 隱睾
+麼麼 麽麽
+么麼 幺麽
+么麼小丑   幺麽小丑
+么鳳 幺凤
+么二三      幺二三
+么篇 幺篇
+么謙 幺谦
+这么 这么
+麴义 麴义
+乾乾淨淨   干干净净
+乾乾脆脆   干干脆脆
+肉乾乾      肉干干
+魚乾乾      鱼干干
+於于同      於于同
+於乙于同   於乙于同
+閻懷禮      闫怀礼
+醯酱 醯酱
+醯鸡 醯鸡
+醯壶 醯壶
+苧烯 苧烯
+李乾顺      李乾顺
+幹著 干着
+氾濫 泛滥
+显著 显著
+顯著 显著
+標誌著      标志着
+近角聪信   近角聪信
+修鍊 修炼
+米泽瑠美   米泽瑠美
+太閤 太阁
+候覆 候复
+待覆 待复
+批覆 批复
diff --git a/maintenance/language/zhtable/toTW.manual b/maintenance/language/zhtable/toTW.manual
new file mode 100644 (file)
index 0000000..1a14e99
--- /dev/null
@@ -0,0 +1,411 @@
+”    」
+“    「
+‘    『
+’    』
+着    著
+鈎    鉤
+钩    鉤
+衞 衛
+元凶 元凶
+元兇 元凶
+凶器 凶器
+兇器 凶器
+凶徒 凶徒
+兇徒 凶徒
+凶手 凶手
+兇手 凶手
+凶案 凶案
+兇案 凶案
+凶残 凶殘
+凶殘 凶殘
+兇殘 凶殘
+凶杀 凶殺
+凶殺 凶殺
+兇殺 凶殺
+疑凶 疑凶
+疑兇 疑凶
+真凶 真凶
+真兇 真凶
+缉凶 緝凶
+緝凶 緝凶
+緝兇 緝凶
+行凶 行凶
+行兇 行凶
+行凶后      行凶後
+行凶後      行凶後
+行兇後      行凶後
+买凶 買凶
+買凶 買凶
+買兇 買凶
+追凶 追凶
+追兇 追凶
+逞凶斗狠   逞凶鬥狠
+逞凶鬥狠   逞凶鬥狠
+逞兇鬥狠   逞凶鬥狠
+复苏 復甦
+復蘇 復甦
+缺省 預設
+串行 串列
+串列加速器        串列加速器
+以太网      乙太網
+位图 點陣圖
+例程 常式
+光标 游標
+光盘 光碟
+光驱 光碟機
+全角 全形
+加载 載入
+半角 半形
+变量 變數
+噪声 雜訊
+脱机 離線
+声卡 音效卡
+老字号      老字號
+连字号      連字號
+字号 字型大小
+字库 字型檔
+字段 欄位
+字符 字元
+字符集      字符集
+存盘 存檔
+寻址 定址
+尾注 章節附註
+异步 非同步
+总线 匯流排
+括号 括弧
+接口 介面
+控件 控制項
+权限 許可權
+盘片 碟片
+硅片 矽片
+硅谷 矽谷
+硬盘 硬碟
+磁盘 磁碟
+磁道 磁軌
+程控 程式控制
+远程控制   遠程控制
+遠程控制   遠程控制
+行程控制   行程控制
+流程控制   流程控制
+端口 埠
+算子 運算元
+算法 演算法
+芯片 晶片
+芯片 晶元
+词组 片語
+译码 解碼
+软驱 軟碟機
+快闪存储器        快閃記憶體
+闪存 快閃記憶體
+鼠标 滑鼠
+进制 進位
+交互式      互動式
+仿真 模擬
+优先级      優先順序
+传感 感測
+便携式      攜帶型
+信息论      資訊理論
+写保护      防寫
+分辨率      解析度
+服务器      伺服器
+等于 等於
+局域网      區域網
+扫瞄仪      掃瞄器
+宽带 寬頻
+数据库      資料庫
+奶酪 乳酪
+手电 手電筒
+手电筒      手電筒
+万历 萬曆
+永历 永曆
+词汇 辭彙
+习用 慣用
+元音 母音
+新纪元      新紀元
+新紀元      新紀元
+宋元 宋元
+头球 頭槌
+入球 進球
+粒入球      顆進球
+打门 射門
+火锅盖帽   蓋火鍋
+打印机      印表機
+打印機      印表機
+字节 位元組
+字節 位元組
+打印 列印
+打印 列印
+硬件 硬體
+硬件 硬體
+二极管      二極體
+二極管      二極體
+三极管      三極體
+三極管      三極體
+软件 軟體
+軟件 軟體
+网络 網路
+網絡 網路
+人工智能   人工智慧
+航天飞机   太空梭
+航天大学   航天大學
+穿梭機      太空梭
+因特网      網際網路
+互聯網      網際網路
+机器人      機器人
+機械人      機器人
+移动电话   行動電話
+流動電話   行動電話
+调制解调器        數據機
+調制解調器        數據機
+短信 簡訊
+短訊 簡訊
+乌兹别克斯坦     烏茲別克
+乍得 查德
+乍得 查德
+也门 葉門
+也門 葉門
+伯利兹      貝里斯
+伯利茲      貝里斯
+佛得角      維德角
+克罗地亚   克羅埃西亞
+克羅地亞   克羅埃西亞
+冈比亚      甘比亞
+岡比亞      甘比亞
+几内亚比绍        幾內亞比索
+幾內亞比紹        幾內亞比索
+列支敦士登        列支敦斯登
+列支敦士登        列支敦斯登
+利比里亚   賴比瑞亞
+利比里亞   賴比瑞亞
+加纳 迦納
+加納 迦納
+加蓬 加彭
+加蓬 加彭
+博茨瓦纳   波札那
+博茨瓦納   波札那
+卡塔尔      卡達
+卡塔爾      卡達
+卢旺达      盧安達
+盧旺達      盧安達
+危地马拉   瓜地馬拉
+危地馬拉   瓜地馬拉
+厄瓜多尔   厄瓜多
+厄瓜多爾   厄瓜多
+厄立特里亚        厄利垂亞
+厄立特里亞        厄利垂亞
+吉布提      吉布地
+吉布堤      吉布地
+哈萨克斯坦        哈薩克
+哥斯达黎加        哥斯大黎加
+哥斯達黎加        哥斯大黎加
+图瓦卢      吐瓦魯
+圖瓦盧      吐瓦魯
+土库曼斯坦        土庫曼
+圣卢西亚   聖露西亞
+聖盧西亞   聖露西亞
+圣基茨和尼维斯  聖克里斯多福及尼維斯
+聖吉斯納域斯     聖克里斯多福及尼維斯
+圣文森特和格林纳丁斯 聖文森及格瑞那丁
+聖文森特和格林納丁斯 聖文森及格瑞那丁
+圣马力诺   聖馬利諾
+聖馬力諾   聖馬利諾
+圭亚那      蓋亞那
+圭亞那      蓋亞那
+坦桑尼亚   坦尚尼亞
+坦桑尼亞   坦尚尼亞
+埃塞俄比亚        衣索比亞
+埃塞俄比亞        衣索比亞
+基里巴斯   吉里巴斯
+基里巴斯   吉里巴斯
+塔吉克斯坦        塔吉克
+塞拉利昂   獅子山
+塞拉利昂   獅子山
+塞浦路斯   塞普勒斯
+塞浦路斯   塞普勒斯
+塞舌尔      塞席爾
+塞舌爾      塞席爾
+多米尼加共和国  多明尼加
+多米尼加共和國  多明尼加
+多明尼加共和國  多明尼加
+多米尼加国        多米尼克
+多明尼加國        多米尼克
+安提瓜和巴布达  安地卡及巴布達
+安提瓜和巴布達  安地卡及巴布達
+尼日利亚   奈及利亞
+尼日利亞   奈及利亞
+尼日尔      尼日
+尼日爾      尼日
+巴巴多斯   巴貝多
+巴布亚新几内亚  巴布亞紐幾內亞
+巴布亞新畿內亞  巴布亞紐幾內亞
+布基纳法索        布吉納法索
+布基納法索        布吉納法索
+布隆迪      蒲隆地
+布隆迪      蒲隆地
+帕劳 帛琉
+意大利      義大利
+所罗门群岛        索羅門群島
+所羅門群島        索羅門群島
+文莱 汶萊
+斯威士兰   史瓦濟蘭
+斯威士蘭   史瓦濟蘭
+斯洛文尼亚        斯洛維尼亞
+斯洛文尼亞        斯洛維尼亞
+新西兰      紐西蘭
+新西蘭      紐西蘭
+格林纳达   格瑞那達
+格林納達   格瑞那達
+格鲁吉亚   喬治亞
+格魯吉亞   喬治亞
+佐治亚      喬治亞
+佐治亞      喬治亞
+毛里塔尼亚        茅利塔尼亞
+毛里塔尼亞        茅利塔尼亞
+毛里求斯   模里西斯
+毛里裘斯   模里西斯
+沙特阿拉伯        沙烏地阿拉伯
+沙地阿拉伯        沙烏地阿拉伯
+波斯尼亚和黑塞哥维那 波士尼亞赫塞哥維納
+波斯尼亞黑塞哥維那    波士尼亞赫塞哥維納
+津巴布韦   辛巴威
+津巴布韋   辛巴威
+洪都拉斯   宏都拉斯
+洪都拉斯   宏都拉斯
+特立尼达和托巴哥       千里達托貝哥
+特立尼達和多巴哥       千里達托貝哥
+瑙鲁 諾魯
+瑙魯 諾魯
+瓦努阿图   萬那杜
+瓦努阿圖   萬那杜
+溫納圖萬   那杜
+科摩罗      葛摩
+科摩羅      葛摩
+科特迪瓦   象牙海岸
+突尼斯      突尼西亞
+索马里      索馬利亞
+索馬里      索馬利亞
+老挝 寮國
+老撾 寮國
+肯尼亚      肯亞
+肯雅 肯亞
+苏里南      蘇利南
+莫桑比克   莫三比克
+莱索托      賴索托
+萊索托      賴索托
+贝宁 貝南
+貝寧 貝南
+赞比亚      尚比亞
+贊比亞      尚比亞
+阿塞拜疆   亞塞拜然
+阿拉伯联合酋长国       阿拉伯聯合大公國
+阿拉伯聯合酋長國       阿拉伯聯合大公國
+马尔代夫   馬爾地夫
+馬爾代夫   馬爾地夫
+马耳他      馬爾他
+马里共和国        馬利共和國
+馬里共和國        馬利共和國
+方便面      速食麵
+快速面      速食麵
+即食麵      速食麵
+薯仔 土豆
+土豆网      土豆網
+土豆網      土豆網
+蹦极跳      笨豬跳
+绑紧跳      笨豬跳
+冷菜 冷盤
+凉菜 冷盤
+出租车      計程車
+台球 撞球
+桌球 撞球
+卫生 衛生
+衞生 衛生
+平治之亂   平治之亂
+平治之乱   平治之亂
+平治 賓士
+奔驰 賓士
+積架 捷豹
+雪铁龙      雪鐵龍
+萬事得      馬自達
+拿破仑      拿破崙
+拿破侖      拿破崙
+布什 布希
+布殊 布希
+克林顿      柯林頓
+克林頓      柯林頓
+侯赛因      海珊
+侯賽因      海珊
+凡高 梵谷
+狄安娜      黛安娜
+戴安娜      黛安娜
+颁布 頒布
+頒佈 頒布
+彩带 彩帶
+彩排 彩排
+彩楼 彩樓
+彩牌楼      彩牌樓
+彩球 綵球
+彩绸 綵綢
+彩线 綵線
+彩船 綵船
+彩衣 綵衣
+结彩 結綵
+戏彩娱亲   戲綵娛親
+剪彩 剪綵
+榴莲 榴槤
+榴蓮 榴槤
+掛鈎 掛鉤
+挂钩 掛鉤
+鈎心鬥角   鉤心鬥角
+钩心斗角   鉤心鬥角
+酰    醯
+雪裏紅      雪裡紅
+雪裏蕻      雪裡蕻
+森林裏      森林裡
+日子裏      日子裡
+故事裏      故事裡
+領域裏      領域裡
+時間裏      時間裡
+深淵裏      深淵裡
+醫院裏      醫院裡
+春假裏      春假裡
+暑假裏      暑假裡
+秋假裏      秋假裡
+寒假裏      寒假裡
+春天裏      春天裡
+夏天裏      夏天裡
+秋天裏      秋天裡
+冬天裏      冬天裡
+春日裏      春日裡
+夏日裏      夏日裡
+秋日裏      秋日裡
+冬日裏      冬日裡
+百科裏      百科裡
+歷史裏      歷史裡
+戲裏 戲裡
+作品裏      作品裡
+專輯裏      專輯裡
+年代裏      年代裡
+棺材裏      棺材裡
+嘴裏 嘴裡
+心裏 心裡
+皮裏陽秋   皮裡陽秋
+肚裏 肚裡
+苦裏 苦裡
+裏勾外連   裡勾外連
+裏面 裡面
+這裏 這裡
+點裏 點裡
+中文裏      中文裡
+山洞裏      山洞裡
+世界裏      世界裡
+眼睛裏      眼睛裡
+學裏 學裡
+獄裏 獄裡
+館裏 館裡
+系列裏      系列裡
+村子裏      村子裡
+青霉素      青黴素
+想象 想像
+锎    鉲
+信道 信道
+綫    線
diff --git a/maintenance/language/zhtable/toTrad.manual b/maintenance/language/zhtable/toTrad.manual
new file mode 100644 (file)
index 0000000..b0efd28
--- /dev/null
@@ -0,0 +1,186 @@
+手塚治虫   手塚治虫
+校仇 校讎
+仇校 讎校
+仇夷 讎夷
+仇問 讎問
+無言不仇   無言不讎
+視如寇仇   視如寇讎
+往日無仇   往日無讎
+近日無仇   近日無讎
+李連杰      李連杰
+周杰倫      周杰倫
+寶曆 寶曆
+涂謹申      涂謹申
+涂鴻欽      涂鴻欽
+涂壯勳      涂壯勳
+於姓 於姓
+於氏 於氏
+於夫羅      於夫羅
+於梨華      於梨華
+鄭凱云      鄭凱云
+筑陽 筑陽
+筑後 筑後
+采石磯      采石磯
+采石之戰   采石之戰
+張三丰      張三丰
+丰韻 丰韻
+丰儀 丰儀
+丰標不凡   丰標不凡
+干細胞      幹細胞
+干熱 乾熱
+二里頭      二里頭
+水里鄉      水里鄉
+蒙胧 朦朧
+酒曲 酒麴
+呆里呆气   呆裡呆氣
+拜托 拜託
+委托书      委託書
+委托 委託
+挽詞 輓詞
+挽聯 輓聯
+挽詩 輓詩
+於夫罗      於夫羅
+府干預      府干預
+府干擾      府干擾
+分布圖      分布圖
+頁面 頁面
+面條目      面條目
+黃鈺筑      黃鈺筑
+仿佛 彷彿
+凶殘 兇殘
+凶殺 兇殺
+緝凶 緝兇
+行凶後      行兇後
+買凶 買兇
+逞凶鬥狠   逞兇鬥狠
+合著者      合著者
+答复 答覆
+反复 反覆
+索馬里      索馬里
+洗练 洗鍊
+朝乾夕惕   朝乾夕惕
+乾象曆      乾象曆
+乾象历      乾象曆
+不好干預   不好干預
+不干預      不干預
+不干擾      不干擾
+不干牠      不干牠
+矽谷 矽谷
+范文瀾      范文瀾
+發表 發表
+機械系      機械系
+頂多 頂多
+馬占山      馬占山
+叱咤樂壇   叱咤樂壇
+闫怀礼      閆懷禮
+变髒 變髒
+薴烯 薴烯
+后豐 后豐
+于謙 于謙
+詩云 詩云
+鄭凱云      鄭凱云
+云為 云為
+古書云      古書云
+古語云      古語云
+經有云      經有云
+語有云      語有云
+显著标志   顯著標志
+占領 佔領
+采納 採納
+風采 風采
+于樂 于樂
+于軍 于軍
+于堅 于堅
+于帥 于帥
+于濤 于濤
+于贈 于贈
+于會泳      于會泳
+于偉國      于偉國
+于光遠      于光遠
+于鳳至      于鳳至
+于台煙      于台煙
+于國楨      于國楨
+于大寶      于大寶
+于學忠      于學忠
+于小偉      于小偉
+于山國      于山國
+于幼軍      于幼軍
+于廣洲      于廣洲
+于從濂      于從濂
+于志寧      于志寧
+于成龍      于成龍
+于明濤      于明濤
+于根偉      于根偉
+于樹潔      于樹潔
+于正昇      于正昇
+于漢超      于漢超
+于洪區      于洪區
+于湘蘭      于湘蘭
+于蔭霖      于蔭霖
+于遠偉      于遠偉
+于都縣      于都縣
+于震寰      于震寰
+于震環      于震環
+于非闇      于非闇
+于風政      于風政
+于鳳桐      于鳳桐
+于默奧      于默奧
+于爾岑      于爾岑
+于默奧      于默奧
+于貝爾      于貝爾
+于爾根      于爾根
+于雙戈      于雙戈
+于澤爾      于澤爾
+于斯達爾   于斯達爾
+于爾里克   于爾里克
+于奇庫杜克        于奇庫杜克
+于韋斯屈萊        于韋斯屈萊
+于克-蘭多縣       于克-蘭多縣
+于斯納爾斯貝里  于斯納爾斯貝里
+夏于喬      夏于喬
+涂澤民      涂澤民
+涂長望      涂長望
+涂敏恆      涂敏恆
+台历 枱曆
+艷后 艷后
+廢后 廢后
+后髮座      后髮座
+后髮星系團        后髮星系團
+后髮FK型星 后髮FK型星
+后海灣      后海灣
+賈后 賈后
+賢后 賢后
+呂后 呂后
+蟻后 蟻后
+馬格里布   馬格里布
+佳里鎮      佳里鎮
+埔裡社撫墾局     埔裏社撫墾局
+埔裏社撫墾局     埔裏社撫墾局
+有只採      有只採
+任何表達   任何表達
+會干擾      會干擾
+党項 党項
+余三勝      余三勝
+簡筑翎      簡筑翎
+楊雅筑      楊雅筑
+杰威爾音樂        杰威爾音樂
+尸羅精舍   尸羅精舍
+索馬里      索馬里
+騰格里      騰格里
+村里長      村里長
+進制 進制
+模范三軍   模范三軍
+黃詩杰      黃詩杰
+陳冲 陳冲
+劉佳怜      劉佳怜
+范賢惠      范賢惠
+于國治      于國治
+于楓 于楓
+黎吉雲      黎吉雲
+于飛島      于飛島
+鄉愿 鄉愿
+奇迹 奇蹟
+候复 候覆
+待复 待覆
+批复 批覆
+划槳 划槳
diff --git a/maintenance/language/zhtable/trad2simp.manual b/maintenance/language/zhtable/trad2simp.manual
new file mode 100644 (file)
index 0000000..747a240
--- /dev/null
@@ -0,0 +1,153 @@
+U+04E99亙|U+04E98亘|
+U+04F48佈|U+05E03布|
+U+04F48佈|U+05E03布|
+U+04F54佔|U+05360占|
+U+05016倖|U+05E78幸|
+U+050A2傢|U+05BB6家|
+U+050F1僱|U+096C7雇|
+U+05138儸|U+03469㑩|U+07F57罗|
+U+05147兇|U+051F6凶|
+U+05277剷|U+094F2铲|
+U+052F3勳|U+052CB勋|
+U+0537D卽|U+05373即|
+U+053A4厤|U+05386历|
+U+055AB喫|U+05403吃|
+U+05641噁|U+06076恶|
+U+05690嚐|U+05C1D尝|
+U+056A5嚥|U+054BD咽|
+U+056AE嚮|U+05411向|
+U+056CC囌|U+082CF苏|
+U+0585A塚|U+051A2冢|
+U+058B0墰|U+0575B坛|
+U+058DC壜|U+0575B坛|
+U+05925夥|U+04F19伙|
+U+05BC0寀|U+091C7采|
+U+05D11崑|U+06606昆|
+U+05D19崙|U+04ED1仑|
+U+05D57嵗|U+05C81岁|
+U+05DBD嶽|U+05CB3岳|
+U+05DD6巖|U+05CA9岩|
+U+05DF9巹|U+0537A卺|
+U+05F14弔|U+0540A吊|
+U+05F46彆|U+0522B别|
+U+0617C慼|U+0621A戚|
+U+0617E慾|U+06B32欲|
+U+061DE懞|U+08499蒙|
+U+062DA拚|U+062FC拼|
+U+06331挱|U+06332挲|
+U+06371捱|U+06328挨|
+U+06372捲|U+05377卷|
+U+0647A摺|U+06298折|
+U+065C2旂|U+065D7旗|
+U+065E3旣|U+065E2既|
+U+06607昇|U+05347升|
+U+0672E朮|U+0672F术|
+U+068CA棊|U+068CB棋|
+U+069A6榦|U+05E72干|
+U+069D3槓|U+06760杠|
+U+06A11樑|U+06881梁|
+U+06B05欅|U+06989榉|
+U+06B4E歎|U+053F9叹|
+U+06BAD殭|U+050F5僵|
+U+06C59汙|U+06C61污|
+U+06CDD泝|U+06EAF溯|
+U+06D29洩|U+06CC4泄|
+U+06DD2淒|U+051C4凄|
+U+06DE8淨|U+051C0净|
+U+06DE9淩|U+051CC凌|
+U+06E67湧|U+06D8C涌|
+U+06ED9滙|U+06C47汇|
+U+06F90澐|U+06C84沄|
+U+06FBE澾|U+03CE0㳠|
+U+06FDB濛|U+06FDB濛|U+08499蒙|
+U+07030瀰|U+05F25弥|
+U+071EC燬|U+06BC1毁|
+U+07232爲|U+04E3A为|
+U+07343獃|U+05446呆|
+U+07515甕|U+074EE瓮|
+U+07526甦|U+082CF苏|
+U+0752F甯|U+05B81宁|
+U+0756B畫|U+0753B画|U+05212划|
+U+07575畵|U+0753B画|U+05212划|
+U+075E0痠|U+09178酸|
+U+07652癒|U+06108愈|
+U+07661癡|U+075F4痴|
+U+076C3盃|U+0676F杯|
+U+0771E眞|U+0771F真|
+U+077AD瞭|U+04E86了|
+U+077C7矇|U+08499蒙|
+U+07843硃|U+06731朱|
+U+07895碕|U+057FC埼|
+U+07958祘|U+07B97算|
+U+07A1C稜|U+068F1棱|
+U+07B87箇|U+04E2A个|
+U+07C11簑|U+084D1蓑|
+U+07C64籤|U+07B7E签|
+U+07C72籲|U+05401吁|
+U+07CF0糰|U+056E2团|
+U+07D2E紮|U+0624E扎|
+U+07DAB綫|U+07EBF线|
+U+07DB5綵|U+05F69彩|U+0433D䌽|
+U+07E34縴|U+07EA4纤|
+U+07E50繐|U+07A57穗|
+U+07E94纔|U+0624D才|
+U+07F4E罎|U+0575B坛|
+U+07FA8羨|U+07FA1羡|
+U+08123脣|U+05507唇|
+U+081E5臥|U+05367卧|
+U+08218舘|U+09986馆|
+U+083F4菴|U+05EB5庵|
+U+08457著|U+08457著|U+07740着|
+U+08518蔘|U+053C2参|
+U+08591薑|U+059DC姜|
+U+085C9藉|U+085C9藉|U+0501F借|
+U+0880D蠍|U+0874E蝎|
+U+0884A衊|U+08511蔑|
+U+088CF裏|U+091CC里|
+U+08946襆|U+05E5E幞|
+U+08986覆|U+08986覆|U+0590D复|
+U+08A17託|U+06258托|U+08BAC讬|
+U+08AEE諮|U+054A8咨|U+08C18谘|
+U+08B6D譭|U+06BC1毁|
+U+08B8E讎|U+04EC7仇|
+U+08B9A讚|U+08D5E赞|
+U+08C54豔|U+08273艳|
+U+08FF4迴|U+056DE回|
+U+09031週|U+05468周|
+U+0904A遊|U+06E38游|
+U+09061遡|U+06EAF溯|
+U+091A3醣|U+07CD6糖|
+U+091AF醯|U+09170酰|
+U+0934A鍊|U+070BC炼|U+094FE链|
+U+0938C鎌|U+09570镰|
+U+093AD鎭|U+093AE镇|
+U+093DA鏚|U+0621A戚|
+U+09451鑑|U+09274鉴|
+U+0955F镟|U+065CB旋|
+U+09592閒|U+095F2闲|
+U+095A4閤|U+05408合|
+U+095E2闢|U+08F9F辟|
+U+0962A阪|U+0962A阪|U+05742坂|
+U+0965E陞|U+05347升|
+U+097A6鞦|U+079CB秋|U+097A7鞧|
+U+097C6韆|U+05343千|
+U+097DD韝|U+097B2鞲|
+U+09858願|U+0613F愿|
+U+098F1飱|U+098E7飧|
+U+09918餘|U+04F59余|U+09980馀|
+U+09931餱|U+07CC7糇|
+U+09935餵|U+05582喂|
+U+09B28鬨|U+054C4哄|
+U+09D70鵰|U+096D5雕|U+05F6B彫|
+U+09E7C鹼|U+078B1碱|U+07877硷|
+U+09EAA麪|U+09762面|
+U+09EAB麫|U+09762面|
+U+09EAF麯|U+066F2曲|
+U+09EB4麴|U+066F2曲|U+09EB4麴|
+U+09EF4黴|U+09709霉|
+U+09F15鼕|U+051AC冬|
+U+09F47齇|U+09F44齄|
+U+09F63齣|U+051FA出|
+U+09F91龑|U+04DAE䶮|
+U+21ED5𡻕|U+05C81岁|
+U+298F5𩣵|U+299FB𩧻|
diff --git a/maintenance/language/zhtable/trad2simp_noconvert.manual b/maintenance/language/zhtable/trad2simp_noconvert.manual
new file mode 100644 (file)
index 0000000..052bab6
--- /dev/null
@@ -0,0 +1,5 @@
+"余"=>
+碁
+藉
+=>"獃"
+𫚭
diff --git a/maintenance/language/zhtable/trad2simp_supp_set.manual b/maintenance/language/zhtable/trad2simp_supp_set.manual
new file mode 100644 (file)
index 0000000..d1728f0
--- /dev/null
@@ -0,0 +1,3 @@
+著    着
+藉    借
+濛    蒙
\ No newline at end of file
diff --git a/maintenance/language/zhtable/trad2simp_supp_unset.manual b/maintenance/language/zhtable/trad2simp_supp_unset.manual
new file mode 100644 (file)
index 0000000..e69de29
diff --git a/maintenance/language/zhtable/tradphrases.manual b/maintenance/language/zhtable/tradphrases.manual
new file mode 100644 (file)
index 0000000..e20ca05
--- /dev/null
@@ -0,0 +1,4311 @@
+零隻
+〇隻
+一隻
+二隻
+兩隻
+三隻
+四隻
+五隻
+六隻
+七隻
+八隻
+九隻
+0隻
+1隻
+2隻
+3隻
+4隻
+5隻
+6隻
+7隻
+8隻
+9隻
+0隻
+1隻
+2隻
+3隻
+4隻
+5隻
+6隻
+7隻
+8隻
+9隻
+0只支援
+1只支援
+2只支援
+3只支援
+4只支援
+5只支援
+6只支援
+7只支援
+8只支援
+9只支援
+0只支持
+1只支持
+2只支持
+3只支持
+4只支持
+5只支持
+6只支持
+7只支持
+8只支持
+9只支持
+百隻
+千隻
+萬隻
+億隻
+最多
+至多
+頂多
+多隻
+0多隻
+0多隻
+零多隻
+十多隻
+百多隻
+千多隻
+萬多隻
+億多隻
+這只能
+這只可
+這只在
+這只是
+這只需
+這只會
+這只用
+那只能
+那只可
+那只在
+那只是
+那只需
+那只會
+那只用
+多只能
+多只可
+多只在
+多只有
+多只是
+多只需
+多只會
+多只用
+大只能
+大只可
+大只在
+大只有
+大只是
+大只需
+大只會
+小只能
+小只可
+小只在
+小只有
+小只是
+小只需
+小只會
+隻身
+形單影隻
+首隻
+數天後
+幾天後
+多天後
+零天後
+一天後
+二天後
+兩天後
+三天後
+四天後
+五天後
+六天後
+七天後
+八天後
+九天後
+十天後
+百天後
+千天後
+萬天後
+億天後
+0天後
+1天後
+2天後
+3天後
+4天後
+5天後
+6天後
+7天後
+8天後
+9天後
+0天後
+1天後
+2天後
+3天後
+4天後
+5天後
+6天後
+7天後
+8天後
+9天後
+天後來
+天後天
+天後半
+後印
+萬象
+並存著
+乾絲
+乾著急
+乾魚
+魚乾
+乾梅
+糕乾
+黃乾黑瘦
+馬乾
+香乾
+趲幹
+謀幹
+詞幹
+蟶乾
+薄幹
+腦幹
+營幹
+老乾
+老幹部
+管幹
+盲幹
+煨乾
+海乾
+乾漆
+淚乾
+沒幹
+沒乾沒淨
+枝不得大於榦
+杯乾
+打幹
+打乾噦
+徐幹
+府幹
+乾館
+乾顙
+幹革命
+乾霍亂
+乾雷
+乾阿奶
+乾量
+乾醋
+乾逼
+乾貨
+乾衣
+幹蠱
+乾虔
+乾落
+幹營生
+乾茶錢
+乾茨臘
+乾苔
+乾花
+乾肥
+乾耗
+幹缺
+乾繃
+乾結
+乾餱
+乾篾片
+乾稿
+乾禮
+乾瞪眼
+乾白兒
+乾疥
+乾生子
+乾生受
+幹父之蠱
+乾熬
+乾燈盞
+乾濕
+乾澀
+幹濟
+乾沒
+乾死
+乾村沙
+乾暖
+乾料
+乾敲梆子不賣油
+乾支支
+乾支剌
+乾擦
+乾撇下
+乾撂台
+乾折
+乾急
+幹當
+乾式
+乾屎橛
+幹家
+乾奴才
+幹頭
+乾塢
+乾圓潔淨
+乾回付
+乾啼
+乾哭
+乾噦
+乾咽
+乾和
+幹吏
+乾吊著下巴
+乾號
+乾颱
+乾卦
+乾剝剝
+乾刻版
+乾芻
+幹人
+乾產
+乾喬
+夯幹
+大目乾連
+國之楨榦
+唇乾
+單幹
+勾幹
+豆乾
+果乾
+如果幹
+乾麵
+乾柴
+枯乾
+晒乾
+顛乾倒坤
+強幹
+乾著
+乾眼
+幹的停當
+乾巴
+偎乾
+眼乾
+偷雞不著
+几絲
+划著
+划著走
+別著
+刮著
+千絲萬縷
+參合
+參考價值
+參與
+參與人員
+參與制
+參與感
+參與者
+參觀團
+參觀團體
+參閱
+吃著不盡
+合著
+吊帶褲
+吊掛著
+吊著
+吊褲
+吊褲帶
+向著
+嚴絲合縫
+回絲
+回著
+塗著
+壟斷價格
+壟斷資產
+壟斷集團
+姜絲
+帶團參加
+干著急
+幾絲
+彆著
+怎麼著
+憑藉著
+憑藉
+接著說
+擔著
+擔負著
+敘說著
+斗轉參橫
+旋繞著
+板著臉
+正當著
+沈著
+沖著
+派團參加
+涂著
+湊合著
+瀰漫著
+為著
+煙斗絲
+率團參加
+畫著
+當著
+發著
+直接參与
+睡著了
+秋褲
+積极參与
+積极參加
+簽著
+系著
+絕對參照
+絲來線去
+絲布
+絲板
+絲瓜布
+絲絨布
+絲線
+絲織廠
+絲蟲
+緊繃著
+繃著
+繃著臉
+繃著臉兒
+繫著
+罵著
+肉絲麵
+背向著
+菌絲體
+著兒
+著書立說
+著色軟體
+著重指出
+著錄
+著錄規則
+薑絲
+藉著
+蘊含著
+蘊涵著
+衝著
+被覆著
+覆著
+覆蓋著
+反覆
+訴說著
+說著
+請參閱
+謝絕參觀
+豎著
+豐濱
+豐濱鄉
+豐度
+象徵著
+這麼著
+那麼著
+配合著
+醞釀著
+錄著
+鍛鍊出
+關係著
+雞絲
+雞絲麵
+面朝著
+面臨著
+颳著
+髮絲
+斷髮
+不斷發
+判斷發
+評斷發
+買斷發
+賣斷發
+打斷發
+披頭散髮
+髮禁
+鬥著
+鬧著玩兒
+鯰魚
+世界盃
+其次辟地
+開闢
+闢地
+精闢
+別闢
+另闢
+闢佛
+闢田
+闢築
+闢謠
+闢辟
+透闢
+墾闢
+翕闢
+軒闢
+闢建
+闢室
+各闢
+增闢
+闢邪以律
+錶盤
+錶板
+錶帶
+錶針
+錶蒙子
+袋錶
+腕錶
+碼錶
+錶冠
+魔錶
+彆口氣
+彆強
+皺彆
+一彆頭
+并州
+併兼
+併產
+併骨
+併網
+併線
+併流
+逼併
+併名
+併當
+併火
+併肩子
+併除
+併疊
+忙併
+打併
+簡併
+並發表
+並發現
+並發展
+並發動
+並發布
+火並非
+舉手表
+揮手表
+併一不二
+連三併四
+相併
+撤併
+數罪併罰
+催併
+狂併潮
+薝蔔
+提摩太後書
+當家纔知柴米價
+剛纔一載
+裏海
+骨頭裡掙出來的錢纔做得肉
+恰纔
+遠縣纔至
+別日南鴻纔北去
+然身死纔數月耳
+纔得兩年
+纔則
+纔此
+你纔子發昏
+纔可容顏十五餘
+不採
+披榛採蘭
+謬採虛聲
+採樵人
+回採
+觀採
+開採
+揪採
+樵採
+採訪
+採辦
+採補
+採買
+採風問俗
+採納
+採獵
+採蓮
+採錄
+採購
+採光
+採礦
+採花
+採集
+採擷
+採掘
+採芹人
+採取
+採選
+採摭
+採摘
+採珠
+採種
+採茶
+採石
+採拾
+採收
+採生折割
+採樹種
+採擇
+採藥
+採薇
+採用
+盜採
+採信
+採行
+採證
+採菊
+博採
+採空採穗
+採挖
+採鐵
+採金
+採氣
+採油
+採煤
+採鹽
+採區
+採運
+採風
+官地為寀
+寮寀
+蔘綏
+個人# “個人參數”不是“個人蔘數”
+人蔘
+蕭蔘
+人參與
+人參選
+人參觀
+人參考
+人參展
+人參加
+人參議
+人參謀
+人參酌
+人參照
+人參政
+人參戰
+人參拜
+人參閱
+人參禪
+人參贊
+人參見
+人參透
+人參看
+東衝西突
+天克地衝
+六衝
+撞陣衝軍
+衝波
+衝風
+衝頭陣
+衝堅陷陣
+衝陷
+衝心
+衝州撞府
+衝殺
+衝然
+衝盹
+左衝右突
+虫部
+手塚治虫
+群醜
+百拙千醜
+大醜
+地醜德齊
+丟醜
+亮醜
+揭醜
+倛醜
+嫌好道醜
+醜巴怪
+醜末
+醜婦
+醜地
+醜頭怪臉
+醜女效顰
+醜剌剌
+醜話
+醜媳
+醜吒
+醜聲遠播
+醜夷
+弄醜
+露醜
+摧堅獲醜
+謷醜
+不嫌母醜
+一爭兩醜
+惡直醜正
+很醜
+醜男
+醜斃了
+醜奴兒
+醜言
+醜徒
+醜雜
+醜儕
+醜沮
+醜辭
+醜比
+醜辱
+醜逆
+醜史
+醜賊生
+醜婆子
+出乖弄醜
+出乖露醜
+獲匪其醜
+乙丑
+丁丑
+己丑
+辛丑
+癸丑
+丑時
+丑日
+丑月
+丑年
+文丑
+武丑
+女丑
+小丑
+大丑
+丑婆子
+丑旦
+丑角
+丑三
+丑表功
+公孫丑
+么麼小丑
+齣電影
+齣電視
+齣動畫
+齣節目
+齣卡通
+齣戲
+齣劇
+平平當當
+滿滿當當
+當當丁丁
+丁丁當當
+停停當當
+快快當當
+咯噹
+啷噹
+党參
+党進
+党太尉
+党項
+撲鼕
+洗髮
+牽一髮
+白發其事
+后髮座
+后髮星系團
+后髮FK型星
+波髮藻
+辮髮
+逋髮
+抿髮
+髮漂
+髮匪
+髮腳
+髮癬
+髮釵
+髮飾
+髮紗
+髮上指冠
+髮上沖冠
+髮乳
+髮引千鈞
+髮踴沖冠
+董氏封髮
+胎髮
+禿妃之髮
+捉髮
+綠髮
+括髮
+髡髮
+鵠髮
+截髮
+解髮佯狂
+淨髮
+秋髮
+噙齒戴髮
+青山一髮
+晞髮
+細不容髮
+心細如髮
+祝髮
+擢髮
+齒髮
+齒危髮秀
+沖冠髮怒
+甩髮
+絲髮
+絲恩髮怨
+蒜髮
+算髮
+有髮頭陀寺
+髮箋
+髮屋
+櫛髮工
+鬒髮
+模范棒棒堂
+模范三軍
+模范七棒
+模范14棒
+模范21棒
+顏範
+儀範
+典範
+坤範
+壼範
+容範
+懿範
+明範
+格範
+模範
+樣範
+母範
+洪範
+淑範
+遺範
+科範
+立範
+貽範
+道範
+閨範
+閫範
+雅範
+霽範
+鴻範
+沒樣範
+錢範
+銅範
+金範
+範金
+垂範
+範性形變
+範字
+有事之無範
+置言成範
+吾爲之範我馳驅
+天地為範
+範數
+丰采
+丰標不凡
+丰神
+丰茸
+丰儀
+丰度
+丰情
+丰韵
+子之丰兮
+艸木丰丰
+張三丰
+復始
+複分析
+複輔音
+複元音
+複平面
+複函數
+複流
+反複製
+複對數
+顛覆
+答覆
+覆沒
+覆亡
+覆水難收
+翻雲覆雨
+覆雨翻雲
+覆轍
+覆巢之下無完卵
+覆蓋
+覆命
+天翻地覆
+天覆地載
+撥穀
+扁擬穀盜蟲
+不穀
+辟穀
+米穀
+田穀
+脫穀機
+年穀
+礱穀機
+孤寡不穀
+穀米
+穀旦
+穀圭
+穀貴餓農
+穀食
+穀日
+館穀
+禾穀
+積穀
+嘉穀
+嚼穀
+九穀
+戩穀
+錢穀
+息穀
+殖穀
+川穀
+曬穀
+臧穀亡羊
+種穀
+颳雪
+刮風下雪倒便宜
+广部
+亂鬨不過來
+斗鬨
+亂鬨
+開鬨
+花鬨
+鬨動
+交鬨
+喧鬨
+起鬨
+內鬨
+於後
+猜三划五
+划龍舟
+南迴線
+南迴鐵路
+北迴線
+北迴鐵路
+文匯報
+河流匯集
+品彙
+博彙
+滙豐
+伙頭
+方几
+伏几
+高几
+雪窗螢几
+燕几
+隱几
+饑饉
+乾薑
+毛薑
+薑母
+薑湯
+薑桂
+薑是老的辣
+吃薑
+薑老辣
+野薑
+咬薑呷醋
+薑蓉
+薑黃
+狐藉虎威
+滑藉
+藉寇兵
+藉箸代籌
+藉手
+藉此
+龍捲
+捲舌
+夸父
+夸克
+夸特
+夸毗
+夸麗
+夸姣
+夸人
+夸容
+大言非夸
+言大而夸
+睏覺
+愛睏
+纍堆
+纍紲
+纍臣
+纍瓦結繩
+湘纍
+印纍綬若
+灕湘
+灕然
+澤滲灕而下降
+裏勾外連
+裏手
+水里鄉
+水里溪
+水里濁水溪
+二里頭
+年歷史
+西歷史
+國歷史
+國歷代
+國歷任
+國歷屆
+國歷經
+國歷來
+新歷史
+夏歷史
+百花曆
+寶曆
+穆罕默德曆
+大明曆
+大曆
+台曆
+太初曆
+通曆
+曆本
+曆命
+曆紀
+曆始
+曆室
+曆日
+曆尾
+曆元
+律曆志
+官曆
+回曆
+巧曆
+慶曆
+朱理安曆
+長曆
+藏曆
+四分曆
+三統曆
+額我略曆
+埃及曆
+伊斯蘭教曆
+合曆
+玉曆
+農民曆
+桌曆
+商曆
+周曆
+大衍曆
+皇極曆
+儒略改革曆
+希伯來曆
+格里曆
+格里高利曆
+共和曆
+掛曆
+曆獄
+天文曆表
+日心曆表
+地心曆表
+復活節曆表
+月球曆表
+伊爾汗曆表
+延曆
+共和歷史
+厤物之意
+爰定祥厤
+白黴
+黴黧
+黴黑
+麴黴
+蒙霧露
+懞懞懂懂
+懞直
+老懞
+放懞掙
+矇著
+矇聵
+矇瞍
+矇事
+矇頭轉
+矇松雨
+藏矇歌兒
+矇著鍋兒
+朦朧
+濛濛細雨
+濛汜
+冥濛
+溟濛
+淡濛濛
+凌濛初
+涳濛
+灰濛濛
+澒濛
+瀰山遍野
+瀰瀰
+冷麵
+撈麵
+煮麵
+炆麵
+煎麵
+泡麵
+食麵
+公仔麵
+方便麵
+白粉麵
+棒子麵
+麵缸
+麵坯兒
+麵碼兒
+麵坊
+麵湯
+麵疙瘩
+麵館
+麵漿
+甜水麵
+麵人兒
+麵塑
+捏麵人
+趕麵棍
+擀麵
+過水麵
+蕎麥麵
+巧婦做不得無麵餺飥
+削麵
+小米麵
+壯麵
+吃板刀麵
+吃辣麵
+扯麵
+搋麵
+重羅麵
+雜麵
+雜合麵兒
+溲麵
+索麵
+一鍋麵
+伊府麵
+藥麵兒
+意大利麵
+湯下麵
+茶麵
+麵糰
+冷面相
+糞穢衊面
+湟潦生苹
+食野之苹
+苹縈
+青苹
+青蘋果
+僕僕
+有僕
+冉有僕
+屢顧爾僕
+僕少
+僕雖罷駑
+僕夫
+僕僮
+僕吏
+僕姑
+僕固懷恩
+僕程
+僕使
+僕憎
+僕歐
+僕射
+太僕
+僮僕
+金僕姑
+僕婢
+樸實
+樸訥
+樸念仁
+白樸
+抱素懷樸
+抱朴而長吟兮
+樸鄙
+樸馬
+樸父
+樸陋
+樸魯
+樸厚
+樸學
+樸質
+樸拙
+樸重
+樸素
+樸樕
+樸野
+反樸
+古樸
+胡樸安
+返樸
+渾樸
+儉樸
+簡樸
+拙樸
+斫雕為樸
+斲雕為樸
+質樸
+誠樸
+純樸
+曾樸
+郁樸
+棫樸
+敦樸
+樸鈍
+樸直
+見素抱樸
+掣籤
+標籤
+書籤
+發籤
+粉籤子
+路籤
+更籤
+好籤
+火籤
+籤幐
+籤押
+照入籤
+制籤
+抽公籤
+瑤籤
+藥籤
+萬籤插架
+雲笈七籤
+上簽名
+上簽字
+上簽收
+上簽寫
+下簽名
+下簽字
+下簽收
+下簽寫
+犖确
+磽确
+确瘠
+言辯而确
+數與虜确
+關弓與我确
+拚捨
+廣捨
+齊王捨牛
+捨墮
+捨實
+棄捨
+捨安就危
+施舍之道
+瀋河
+瀋水
+瀋州
+瀋山線
+瀋吉線
+墨沈
+瀋海鐵路
+遼瀋
+胜肽
+胜鍵
+雙胜類
+兀朮
+白朮
+蒼朮
+赤朮
+朮赤
+髼鬆
+皮鬆
+濛鬆雨
+發鬆
+翻鬆
+浮鬆
+弄鬆
+精鬆
+懈鬆
+鬆蛋
+鬆寬
+鬆氣
+鬆一口氣
+鬆元音
+鬆喉
+囉囉囌囌
+囉囌
+骨罈
+罈騞
+餵驢
+剪牡丹喂牛
+鹹粥
+鹹食
+鹹潟
+鹹嘴淡舌
+鹽打怎麼鹹
+鹹派
+鹹批
+錦綉花園
+籲天
+勃鬱
+怫鬱
+氣鬱
+沉鬱
+神荼鬱壘
+躁鬱
+蒼鬱
+漚鬱
+伊鬱
+壹鬱
+悒鬱
+氤鬱
+湮鬱
+陰鬱
+泱鬱
+坱鬱
+滃鬱
+蓊鬱
+紆鬱
+鬱勃
+鬱陶
+鬱律
+鬱壘
+鬱火
+鬱積
+鬱金
+鬱江
+鬱血
+鬱蒸
+鬱症
+鬱沉沉
+鬱熱
+鬱塞
+鬱伊
+鬱邑
+鬱挹
+鬱堙不偶
+鬱泱
+鬱蓊
+鬱紆
+鬱燠
+肝鬱
+鬱卒
+鬱鬱不平
+鬱鬱不樂
+鬱鬱寡歡
+鬱鬱蔥蔥
+鬱鬱而終
+愿樸
+愿而恭
+許愿起經
+北嶽
+嶽麓
+但云
+胡云
+詩云
+注云
+鄭凱云
+云乎
+云然
+云為
+對摺
+網誌
+標標致致
+澄澹精致
+呆緻緻
+光緻緻
+工緻
+功緻
+縝緻
+堅緻
+种放
+种師道
+种師中
+後庄
+舊庄
+正官庄
+龜山庄
+寶山庄
+冬山庄
+員山庄
+松山庄
+厂部
+閤府
+佈道
+剪綵
+衝量
+衝車
+書獃子
+相干
+府干預
+府干涉
+府干政
+府干擾
+府干犯
+府干卿
+一干人
+未乾
+未干涉
+抹乾
+餅乾
+拭乾
+擦乾
+晾乾
+烘乾
+肉乾
+菜乾
+腐乾
+乾脆
+乾淨
+乾燥
+乾旱
+乾涸
+乾洗
+乾女
+乾等
+乾糧
+乾枯
+乾薪
+乾爹
+乾粉
+乾爽
+乾兒
+乾子
+乾渴
+乾股
+乾果
+乾草
+乾菜
+乾笑
+乾餾
+乾電
+乾飯
+乾冰
+乾嘔
+乾材
+乾媽
+乾季
+葡萄乾
+提子乾
+蘿蔔乾
+蘋果乾
+芒果乾
+菠蘿乾
+鳳梨乾
+豆腐乾
+果子乾
+龍眼乾
+乾乾淨淨
+乾柴烈火
+乾乾兒的
+桑乾
+撈乾
+搭乾鋪
+揩乾
+敢幹
+幹探
+幹事
+幹什麼
+幹細胞
+悶著頭兒幹
+配水幹管
+繐幃飄井幹
+站乾岸兒
+秋陰入井幹
+沒梢幹
+楨幹
+據榦而窺井底
+井榦摧敗
+杰特
+李連杰
+周杰倫
+杰倫
+姜文杰
+稜鏡
+稜角
+稜台
+稜錐
+觚稜
+稜子
+稜層
+稜柱
+盧稜伽
+波稜菜
+菠稜菜
+稜縫
+稜等登
+稜稜
+嶒稜
+蹭稜子
+稜體
+二不稜登
+有稜有角
+威稜
+負債纍纍
+傷痕纍纍
+儒略曆
+伊斯蘭曆
+酒麴
+昇平
+爾冬陞
+澹臺
+拜託
+委託
+輓曲
+敬輓
+万俟
+万旗
+鬚鯨
+鬚鯊
+兇手
+兇徒
+兇案
+兇器
+兇殺
+兇殘
+行兇
+緝兇
+追兇
+真兇
+疑兇
+買兇
+元兇
+叶韻
+叶音
+叶恭弘
+叶 恭弘
+叶 恭弘
+於1
+於2
+於3
+於4
+於5
+於6
+於7
+於8
+於9
+於0
+於1
+於2
+於3
+於4
+於5
+於6
+於7
+於8
+於9
+於0
+於一
+於二
+於三
+於四
+於五
+於六
+於七
+於八
+於九
+於十
+於半
+於夫羅
+於梨華
+置於
+佈於
+散於
+播於
+國於
+敗於
+於一役
+畢於
+畢業於
+寒於
+任於
+拘於
+插於
+中於
+於市
+於野
+敏於
+聽於
+短於
+成於
+樊於期
+淡於
+於陸
+於密
+於盡
+禍於
+格於
+猛於
+施於
+於牆
+於物
+於己
+於你
+於我
+於他
+於她
+於它
+於祂
+拒人於
+拒於
+潰於
+窮於
+相於
+形於
+半於
+於始
+於終
+詢於
+美於
+醜於
+好於
+坏於
+強於
+弱於
+差於
+劣於
+於美
+於醜
+於好
+於坏
+於強
+於弱
+於差
+於劣
+於垂
+染指於
+於火
+存十一於千百
+存於
+於勤
+隱於
+藏於
+嚴於
+寬於
+於幕
+給於
+於穆
+於呼哀哉
+於時
+於該
+危於
+於伏
+於何
+於家
+於國
+於潛縣
+於焉
+於徵
+離於
+於畢
+麗於
+下於
+亞於
+同於
+屑於
+絕於
+致於
+於行
+遜於
+任教於
+教於
+自於
+來於
+附於
+於人
+於世
+阻於
+於民
+於盲
+於色
+囿於
+直於
+建於
+都於
+於農
+於樂
+於前
+役於
+於心
+於法
+於事
+助於
+害於
+損於
+益於
+從於
+隨於
+順於
+汲於
+溺於
+迷於
+醉於
+行於
+泥於
+身於
+足於
+溢於
+於衷
+畏於
+視於
+衷於
+狃於
+疲於
+通於
+於途
+老於
+耿於
+於懷
+服於
+臻於
+匿於
+因於
+似於
+遷於
+怒於
+心於
+集於
+容於
+髒詞
+髒心
+新紮
+紙紮
+紮鐵
+紮寨
+一紮
+兩紮
+三紮
+四紮
+五紮
+六紮
+七紮
+八紮
+九紮
+十紮
+百紮
+千紮
+萬紮
+佔1
+佔2
+佔3
+佔4
+佔5
+佔6
+佔7
+佔8
+佔9
+佔0
+佔1
+佔2
+佔3
+佔4
+佔5
+佔6
+佔7
+佔8
+佔9
+佔0
+佔零
+佔〇
+佔一
+佔二
+佔兩
+佔三
+佔四
+佔五
+佔六
+佔七
+佔八
+佔九
+佔十
+佔百
+佔千
+佔万
+佔億
+佔超過
+佔不足
+佔至少
+佔少
+佔至多
+佔半
+佔多
+佔大
+佔小
+佔中
+佔東
+佔西
+佔南
+佔北
+佔平均
+佔總
+獨佔鰲頭
+所佔
+市佔
+佔率
+市佔率
+佔市場
+佔世界
+佔全
+佔國內
+佔美
+佔台
+佔香
+佔澳
+佔加
+佔新
+佔馬
+佔印
+佔英
+佔法
+佔德
+佔葡
+佔俄
+佔蘇
+佔缺
+佔A
+佔B
+佔C
+佔D
+佔E
+佔F
+佔G
+佔H
+佔I
+佔J
+佔K
+佔L
+佔M
+佔N
+佔O
+佔P
+佔Q
+佔R
+佔S
+佔T
+佔U
+佔V
+佔W
+佔X
+佔Y
+佔Z
+佔a
+佔b
+佔c
+佔d
+佔e
+佔f
+佔g
+佔h
+佔i
+佔j
+佔k
+佔l
+佔m
+佔n
+佔o
+佔p
+佔q
+佔r
+佔s
+佔t
+佔u
+佔v
+佔w
+佔x
+佔y
+佔z
+佔A
+佔B
+佔C
+佔D
+佔E
+佔F
+佔G
+佔H
+佔I
+佔J
+佔K
+佔L
+佔M
+佔N
+佔O
+佔P
+佔Q
+佔R
+佔S
+佔T
+佔U
+佔V
+佔W
+佔X
+佔Y
+佔Z
+佔a
+佔b
+佔c
+佔d
+佔e
+佔f
+佔g
+佔h
+佔i
+佔j
+佔k
+佔l
+佔m
+佔n
+佔o
+佔p
+佔q
+佔r
+佔s
+佔t
+佔u
+佔v
+佔w
+佔x
+佔y
+佔z
+佔不佔
+不佔
+佔了
+佔穩
+佔資源
+佔人便宜
+佔頭
+佔道
+佔屋
+佔網
+佔床
+佔座
+佔分
+佔飯
+佔個位
+佔後
+佔著
+佔山
+馬占山
+佔比
+佔停車
+佔哺乳
+佔下風
+少佔
+多佔
+費佔
+佔查
+佔壓
+佔優
+佔劣
+穩佔
+佔整體
+佔局部
+日佔
+美佔
+英佔
+德佔
+法佔
+俄佔
+葡佔
+西佔
+奧佔
+意佔
+義佔
+地佔
+佔場
+佔耕
+狂佔
+徵佔
+圈佔
+已佔
+佔囁
+佔主
+佔次
+寡佔
+佔去
+將佔
+將占卜
+要佔
+要占卜
+會佔
+會占卜
+占卜
+夢有五不占
+占有五不驗
+誌異
+筑前
+筑後
+筑紫
+筑波
+筑州
+筑肥
+筑西
+筑北
+肥筑方言
+筑邦
+筑陽
+南筑
+批准的
+核准的
+為準
+準直
+擺鐘
+編鐘
+碰鐘
+鳴鐘
+晨鐘
+鐘體
+飯後鐘
+盜鐘
+一天鐘
+撞鐘
+殿鐘自鳴
+天文鐘
+天文學鐘
+洛鐘東應
+亮鐘
+郘鐘
+歌鐘
+鐘不撞不鳴
+毀鐘為鐸
+洪鐘
+擊鐘
+警世鐘
+竊鐘掩耳
+琴鐘
+見鐘不打
+釁鐘
+朝鐘
+木鐘
+鐘不扣不鳴
+鐘鳴
+鐘塔
+鐘漏
+鐘琴
+鐘磬
+鐘形蟲
+鐘乳洞
+鐘乳石
+鐘在寺裡
+詩鐘
+懸鐘
+山崩鐘應
+坐鐘
+宗周鐘
+塞耳盜鐘
+二缶鐘惑
+口鐘
+鐘的
+的鐘
+這鐘
+叩鐘
+音聲如鐘
+應鐘
+原子鐘
+泳氣鐘
+電子鐘
+電子鐘錶
+石英鐘錶
+石英鐘
+鐘錶王
+鐘律
+看鐘
+看錶
+看表面
+鐵鐘
+看下鐘
+看下錶
+瞅下鐘
+瞅下錶
+拿下鐘
+拿下錶
+鐘不敲不響
+對準鐘
+對準鐘錶
+對準錶
+鐘錶快
+鐘快
+錶快
+鐘錶慢
+鐘慢
+錶慢
+響鐘
+鐘敲
+大本鐘敲
+大笨鐘敲
+世紀鐘錶
+世紀鐘
+錶王
+鐘王
+鐘錶
+古鐘
+古鐘錶
+鐘面
+鐘表面
+南京鐘
+南京鐘錶
+造鐘錶
+造鐘
+九龍表行
+鐘錶行
+鐘行
+錶行
+小型鐘表面
+小型鐘面
+小型鐘錶
+小型鐘
+中型鐘表面
+中型鐘面
+中型鐘錶
+中型鐘
+大型鐘表面
+大型鐘面
+大型鐘錶
+大型鐘
+鐘匠
+深山何處鐘
+下課鐘
+上課鐘
+老爺鐘
+萬年曆錶
+個鐘
+個鐘錶
+喜歡鐘
+喜歡鐘錶
+喜歡錶
+大鐘
+佛鐘
+鐘壁
+鐘腰
+鐘口
+鐘身
+鐘模
+鐘頂
+鐘紐
+鐘座
+他鐘
+寺鐘
+座鐘
+盜鐘
+大笨鐘
+大本鐘
+鐘錶歷史
+錶的歷史
+鐘錶的歷史
+點多鐘
+點半鐘
+分多鐘
+刻多鐘
+分半鐘
+刻半鐘
+教學鐘
+操作鐘
+南屏晚鐘
+敲鐘
+瞧著鐘
+瞧著鐘錶
+瞧著錶
+警報鐘
+猶如鐘
+猶如鐘錶
+猶如錶
+舊鐘錶
+繁鐘
+四面鐘
+更鐘
+警示鐘
+鐘差
+任何鐘錶
+任何鐘
+任何錶
+任何表示
+任何表達
+任何表演
+選手表現
+選手表達
+選手表示
+選手表明
+選手表決
+分子鐘
+飛行鐘
+鐘罩
+主鐘差
+花鐘
+磬鐘
+主鐘曲線
+鐘速
+紅鐘
+各類鐘
+打著鐘
+鐘意
+衛星鐘
+該鐘
+錶轉
+鐘調
+調鐘錶
+調錶
+原鐘
+鐘錶速
+件鐘
+鐘發音
+逆鐘
+拂鐘無聲
+鐘不空則啞
+看著鐘錶
+看著鐘
+看著錶
+晚鐘
+潛水鐘錶
+潛水鐘
+潛水錶
+樂器鐘
+鐘左右
+埋頭尋鐘錶
+埋頭尋鐘
+埋頭尋錶
+鐘陳列
+驚鐘
+望著鐘錶
+望著鐘
+望著錶
+鐘錶停
+鐘停
+銫鐘
+數字鐘錶
+數字鐘
+顯示鐘錶
+顯示鐘
+顯示錶
+坐如鐘
+錶停
+西周鐘
+東周鐘
+錶速
+機械鐘錶
+機械鐘
+機械錶
+之鐘
+鐘形
+架鐘
+順鐘向
+逆鐘向
+遺傳鐘
+鬧錶
+華嚴鐘
+懷鐘
+生物鐘
+鐘錶的
+錶的嘀嗒
+的鐘錶
+嘀嗒的錶
+鐘好
+鐘太
+鐘不
+鐘有
+鐘盤
+鐘錶盤
+鐘沒
+鐘被
+制鐘
+布穀鳥鐘
+咕咕鐘
+拉克施爾德鐘
+鐘上
+鐘下
+摸鐘
+舊鐘
+舊錶
+台鐘
+鐘響
+叩鐘
+計時錶
+防水錶
+射鵰
+神鵰
+神雕像
+采石磯
+采石之戰
+采石之役
+聊齋志異
+部落發
+角落發
+村落發
+蛇髮女妖
+畢生發展
+對華發動
+中美發表
+尸魂界
+樹樑
+屋樑
+樑柱
+柱樑
+下樑
+上梁山
+昇陽
+僥倖
+夏遊
+秋遊
+冬遊
+黑奴籲天錄
+林郁方
+讚歌
+編餘
+餘墨
+唾餘
+餘韻
+歸餘
+公餘
+寬餘
+餘糧
+餘慶
+餘殃
+餘燼
+劫餘
+結餘
+燼餘
+淨餘
+餕餘
+餘暉
+餘輝
+羨餘
+餘悸
+心餘
+刑餘
+緒餘
+血餘
+朱慶餘
+諸餘
+餘論
+茶餘
+廚餘
+餘裕
+餘氣
+詩餘
+詞餘
+餘僇
+餘辜
+餘責
+餘罪
+無餘
+耳餘
+餘烈
+餘思
+鹽餘
+嬴餘
+贏餘
+王餘魚
+紆餘
+餘波
+餘杯
+餘步
+餘妙
+餘音
+餘聲
+餘明
+餘風
+餘黨
+餘毒
+餘桃
+餘桶
+餘利
+餘瀝
+餘膏
+餘光
+餘杭
+餘竅
+餘缺
+餘暇
+餘閒
+餘羨
+餘響
+餘興
+餘蓄
+餘緒
+餘珍
+餘眾
+餘酲
+餘喘
+餘食
+餘熱
+餘刃
+餘閏
+餘存
+餘業
+餘姚
+餘蔭
+餘映
+餘外
+餘威
+餘味
+餘溫
+餘勇
+多餘
+剩餘
+餘生
+餘歡
+有餘
+一餘
+二餘
+兩餘
+三餘
+四餘
+五餘
+六餘
+七餘
+八餘
+九餘
+十餘
+百餘
+千餘
+萬餘
+億餘
+兆餘
+0餘
+1餘
+2餘
+3餘
+4餘
+5餘
+6餘
+7餘
+8餘
+9餘
+0餘
+1餘
+2餘
+3餘
+4餘
+5餘
+6餘
+7餘
+8餘
+9餘
+余姓
+余光生
+余光中
+余思敏
+余威德
+余子明
+余三勝
+崑山
+崑曲
+崑腔
+崑調
+崑劇
+崑蘇
+蘇崑
+分布圖
+一干家中
+星期後
+不准你
+不准我
+不准他
+不准她
+不准它
+不准誰
+不准許
+准不准你
+准不准我
+准不准他
+准不准她
+准不准它
+准不准誰
+准不准許
+依依不捨
+戀戀不捨
+窮追不捨
+緊追不捨
+鍥而不捨
+稜登
+前言不答後語
+繃扒弔拷
+不弔
+不通弔慶
+陪弔
+盆弔
+屁股大弔了心
+撇弔
+憑弔
+門弔兒
+伐罪弔民
+打出弔入
+搗鬼弔白
+弔膀子
+弔民
+弔民伐罪
+弔奠
+弔頭
+弔古
+弔古尋幽
+弔詭
+弔詭矜奇
+弔客
+弔拷
+弔拷繃扒
+弔扣
+弔賀迎送
+弔鶴
+弔喉
+弔謊
+弔祭
+弔腳兒事
+弔頸
+弔橋
+弔取
+弔孝
+弔紙
+弔者大悅
+弔場
+弔書
+弔詞
+弔死問孤
+弔死問疾
+弔撒
+弔喪
+弔喪問疾
+弔腰撒跨
+弔唁
+弔宴
+弔喭
+弔影
+弔慰
+弔文
+弔問
+頭巾弔在水裡
+提心弔膽
+弄鬼弔猴
+管人弔腳兒事
+開弔
+鶴弔
+昊天不弔
+花馬弔嘴
+會弔
+吉凶慶弔
+蟣蝨相弔
+祭弔
+祭弔文
+青蠅弔客
+慶弔
+形影相弔
+哀弔
+一弔
+唁弔
+於水
+安於
+迫於
+罷於
+蹪於
+於敝
+於過
+甚於
+等於
+定於
+利於
+對於
+推舟於陸
+退藏於密
+歸於
+難於
+移禍於
+生於
+立於
+多於
+勝於
+傳於
+流於
+過於
+關於
+毀於
+基於
+急於
+嫁禍於
+借聽於聾
+見於
+鑒於
+謹於心
+求道於盲
+始於
+於藍
+出於
+輕於
+行百里者半於九十
+幸於
+怠於
+詢於芻蕘
+止於
+至於
+拙於
+忠於
+終於
+重於
+垂於
+善於
+死於
+屬於
+浮於
+在於
+厝薪於火
+易於
+精於
+由於
+於此
+燕巢於幕
+於菟
+於乎
+於戲
+於邑
+補於
+位於
+於今
+於是
+於是乎
+於斯
+寓於
+月離於畢
+月麗於箕
+源於
+且於
+長於
+短於
+現於
+較於
+於之
+分布於
+分散於
+優於
+早於
+晚於
+感於
+鬼谷子
+于美人
+緊緻
+冗餘
+曰云
+若干
+徵婚
+鬥鬨
+事有鬥巧
+歹鬥
+鬥茶
+鬥鴨
+爭奇鬥妍
+誇能鬥智
+春香鬥學
+鬥引
+鬥彩
+鬥武
+鬥悶
+鬥牙拌齒
+鬥幌子
+鬥腳
+雞吵鵝鬥
+辯鬥
+廝鬥
+誇多鬥靡
+臨潼鬥寶
+鬥趣
+撩鬥
+傲霜鬥雪
+賭鬥
+搬鬥
+鬥爭鬥合
+鬥疊
+鬥文
+耍鬥
+鬥巧
+油鬥
+蚊動牛鬥
+卵與石鬥
+挑鬥
+爭奇鬥異
+鬥葉子
+鬥分子
+爭妍鬥奇
+不鬥
+鬥心眼
+鬥頭
+挌鬥
+好鬥
+鬥合
+拚鬥
+兩虎共鬥
+兩鼠鬥穴
+鬥犀臺
+鬥牙鬥齒
+惡鬥
+鬥勝
+鬥富
+鬥艦
+鬥葉兒
+鬥彆氣
+鬥話
+鬥牌
+鬥百草
+鬥打
+鬥犬
+鬥風
+鬥雪紅
+鬥暴
+鬥閑氣
+龍鬥虎傷
+殷師牛鬥
+二虎相鬥
+鬥力
+爭紅鬥紫
+鬥麗
+鬥狠
+鬥飣
+虎鬥
+引鬥
+爭妍鬥豔
+轉鬥千里
+鬥而鑄兵
+困鬥
+好勇鬥狠
+爭奇鬥豔
+使其鬥
+鬥地主
+石樑
+木樑
+藏歷史
+頁面
+方面
+表面
+面條目
+課餘
+節餘
+盈餘
+病餘
+餘地
+餘力
+餘子
+餘事
+扶餘國
+腐餘
+富餘
+之餘
+餘澤
+流風餘俗
+流風餘韻
+淋餘土
+餘一
+餘二
+餘三
+餘四
+餘五
+餘六
+餘七
+餘八
+餘九
+餘十
+零餘
+〇餘
+餘零
+餘〇
+餘1
+餘2
+餘3
+餘4
+餘5
+餘6
+餘7
+餘8
+餘9
+餘0
+餘1
+餘2
+餘3
+餘4
+餘5
+餘6
+餘7
+餘8
+餘9
+餘0
+餘數
+其餘
+尸居餘氣
+賸餘
+餘孽
+殘餘
+業餘
+餘割
+餘款
+餘角
+餘切
+餘霞
+餘下
+餘弦
+餘震
+餘貾
+餘額
+禹餘糧
+餘人
+編余
+病余
+餘俗
+餘倍
+同餘
+大讚
+唄讚
+褒讚
+謬讚
+誄讚
+祝讚
+詩讚
+賞讚
+讚唄
+飛紮
+紮裹
+紮腳
+紮詐
+紮囮
+住紮
+佔畢
+佔頭籌
+佔高枝兒
+隱佔
+憑摺
+沒摺至
+大摺兒
+大週摺
+火摺子
+裝摺
+變徵
+談徵
+納徵
+流徵
+柳詒徵
+固徵
+貴徵
+考徵
+咎徵
+杞宋無徵
+休徵
+徵辟
+徵名責實
+徵發
+徵風召雨
+徵答
+徵啟
+徵選
+徵招
+徵士
+徵庸
+之徵
+瑞徵
+三徵七辟
+額徵
+有徵
+有征服
+有征戰
+有征伐
+有征討
+無徵不信
+文徵明
+徵跡
+徵車
+徵效
+徵怪
+徵聖
+徵咎
+徵吏
+徵令
+本徵
+船鐘
+黃鈺筑
+齊莊
+鴻案相莊
+項莊
+韋莊
+鍋莊
+鄭莊公
+通莊
+蒙莊
+端莊
+票莊
+矜莊
+楚莊問鼎
+楚莊絕纓
+整莊
+打路莊板
+莊騷
+莊語
+莊舄越吟
+莊房
+莊客
+莊農
+平泉莊
+布莊
+香山庄
+寶莊
+坐莊
+周莊王
+發莊
+卞莊
+包莊
+剔莊貨
+劉克莊
+冷莊子
+石家莊
+卞莊子
+新莊市
+當準
+憑準
+沒準
+蜂準
+推情準理
+寇準
+合準
+準保
+準譜
+準分子
+準點
+一個準
+準擬
+準貨幣
+準軍事
+準式
+認準
+三準
+鵝準
+有準
+崑崙
+鎌倉
+請君入甕
+甕安
+痊癒
+治癒
+病癒
+大病初癒
+癒合
+槓桿
+宣洩
+圖鑑
+諮詢
+勳章
+張勳
+趙治勳
+殭屍
+有栖川
+兇惡
+兇狠
+兇猛
+兇橫
+兇悍
+兇險
+兇相
+兇犯
+嫌兇
+兇嫌
+兇疑
+兇刀
+兇槍
+很兇
+兇巴巴
+行兇前
+凝鍊
+鍊貧
+鍊度
+鍊形
+鍊師
+鍊石
+鍊字
+鍊冶
+細鍊
+陳鍊
+闖鍊
+鍊汞
+淬鍊
+鋼之鍊金術師
+索馬里
+范登堡
+世田谷
+製漿
+三統歷史
+伊斯蘭教歷史
+伊斯蘭歷史
+儒略改革歷史
+儒略歷史
+公歷史
+台歷史
+合歷史
+周歷史
+商歷史
+四分歷史
+回歷史
+埃及歷史
+大明歷史
+大歷史
+大衍歷史
+太初歷史
+官歷史
+寶歷史
+巧歷史
+希伯來歷史
+弘歷史
+慶歷史
+日歷史
+星歷史
+月歷史
+朱理安歷史
+桌歷史
+永歷史
+玉歷史
+百花歷史
+皇歷史
+皇極歷史
+穆罕默德歷史
+算歷史
+紀歷史
+舊歷史
+航海歷史
+萬歷史
+行事歷史
+農歷史
+農民歷史
+通歷史
+長歷史
+陰歷史
+陽歷史
+額我略歷史
+黃歷史
+天曆
+天歷史
+美醜
+獻醜
+出醜
+家醜
+遮醜
+醜八怪
+醜名
+醜詆
+醜態
+醜女
+醜類
+醜陋
+醜虜
+醜化
+醜劇
+醜媳婦
+醜小鴨
+醜行
+醜事
+醜聲
+醜人
+醜惡
+醜丫頭
+醜聞
+醜語
+母醜
+一齣子
+齣兒
+賣獃
+發獃
+大獃
+獃獃
+獃等
+獃頭
+獃腦
+獃根
+獃磕
+獃憨獃
+獃話
+獃氣
+獃想
+獃性
+獃滯
+獃著
+獃痴
+獃串了皮
+獃事
+獃人
+獃子
+好獃
+占便宜的是獃
+阿獃
+丰標
+丰姿
+丰韻
+鵰翎
+鵰心雁爪
+鵰鶚
+雙鵰
+撲鼕鼕
+普鼕鼕
+鼕鼕鼓
+令人髮指
+爆發指數
+開發
+剪其髮
+吐哺捉髮
+吐哺握髮
+含齒戴髮
+大金髮苔
+寸髮千金
+心長髮短
+戴髮含齒
+拔髮
+拔鬚
+揪髮
+揪鬚
+整髮用品
+斷髮文身
+滿頭洋髮
+燙一個髮
+燙一次髮
+燙個髮
+燙完髮
+燙次髮
+理一個髮
+理一次髮
+理個髮
+理完髮
+理次髮
+細如髮
+繫於一髮
+膚髮
+皮膚
+生華髮
+蒼髮
+被髮佯狂
+被髮入山
+被髮左衽
+被髮纓冠
+被髮陽狂
+身體髮膚
+髒髮
+髮光可鑑
+髮已霜白
+髮油
+髮為血之本
+髮網
+髮踊沖冠
+髮際
+黃髮
+齒落髮白
+剷頭
+剷刈
+口燥唇乾
+舌乾唇焦
+花菴詞選
+渾箇
+箇中原因
+箇中理由
+箇中高手
+箇中好手
+箇中強手
+箇中滋味
+箇中奧秘
+箇中奧妙
+箇中玄機
+箇中消息
+箇中資訊
+箇中訊息
+對表達
+對表現
+對表演
+對表揚
+對表中
+對表明
+不準確
+並不準確
+一伙頭
+一伙食
+一半只
+一干弟兄
+一干弟子
+一干部下
+一斗斗
+一面食
+萬一只
+上面糊
+不克自制
+不准沒
+不加自制
+不占凶吉
+不占卜
+不占吉凶
+不占算
+不好干涉
+不好干預
+不干預
+不干涉
+不干休
+不干犯
+不干擾
+不干你
+不干我
+不干他
+不干她
+不干它
+不干事
+不斗膽
+不每只
+不采聲
+專向往
+丰容
+之一只
+之二只
+之八九只
+也斗了膽
+事情干脆
+事都干脆
+二只得
+亦云
+人云
+以自制
+們斗了膽
+你斗了膽
+其一只
+其二只
+其八九只
+內面包
+內面包的
+准保護
+准保釋
+几上
+几淨窗明
+几凳
+几子
+几旁
+几椅
+几榻
+几面上
+出征收
+擊扑
+划一槳
+划了一會
+划到岸
+划到江心
+前面店
+千只可
+千只夠
+千只怕
+千只能
+千只足夠
+半只可
+半只夠
+占了卜
+口干冒
+口干政
+口干涉
+口干犯
+口干預
+古書云
+古語云
+只占卜
+只占吉
+只占神問卜
+只占算
+只身上已
+只身上無
+只身上有
+只身上沒
+只身上的
+只身世
+只身為
+只身份
+只身體
+只身前
+只身受
+只身後
+只身子
+只身形
+只身影
+只身心
+只身旁
+只身材
+只身段
+只身邊
+只身首
+只身高
+只采聲
+可自制
+台子女
+台子孫
+台布景
+台面前
+合府上
+後面店
+向往常
+向往日
+向往時
+向往來
+唯一只
+喂了一聲
+喜向往
+四出徵收
+四面包
+多半只
+好斗大
+好斗室
+好斗笠
+好斗篷
+好斗膽
+好斗蓬
+家具體
+家具備
+家具有
+小几
+尸利
+尸祿
+尸臣
+尸鳩
+已占卜
+已占算
+并迭
+所云
+所云云
+所占卜
+所占星
+所占算
+手表決
+手表態
+手表明
+手表演
+手表現
+手表示
+手表達
+手表露
+手表面
+才干休
+才干戈
+才干擾
+才干政
+才干涉
+才干預
+扎好底子
+扎好根
+扑撻
+打吨
+折向往
+拉面上
+拉面具
+拉面前
+拉面巾
+拉面無
+拉面皮
+拉面罩
+拉面色
+拉面部
+捉奸黨
+捉奸徒
+捉奸細
+捉奸賊
+敢情欲
+敢斗了膽
+敲扑
+方向往
+望了望
+桌几
+每每只
+法自制
+洒滌
+洒淅
+洒濯
+洒然
+灘涂
+特制住
+特制定
+特制止
+特制訂
+百只可
+百只夠
+百只怕
+百只足夠
+皮制服
+相克制
+相克服
+短几
+石几
+秒表明
+秒表示
+窗明几亮
+竹几
+精制伏
+精制住
+精制服
+經有云
+給我干脆
+編制法
+能干休
+能干戈
+能干擾
+能干政
+能干涉
+能干預
+能自制
+自制一下
+自制下來
+自制不
+自制之力
+自制之能
+自制他
+自制伏
+自制你
+自制地
+自制她
+自制情
+自制我
+自制服
+自制的能
+自制能力
+船只得
+船只有
+船只能
+草荐
+荐居
+荐臻
+荐饑
+要自制
+語有云
+跌扑
+轉向往
+酒帘
+裡面包
+金表態
+金表情
+金表揚
+金表明
+金表演
+金表現
+金表示
+金表達
+金表露
+金表面
+長几
+隆准許
+雄斗斗
+面包住
+面包辦
+面包廂
+面包含
+面包圍
+面包容
+面包庇
+面包紮
+面包抄
+面包括
+面包攬
+面包涵
+面包管
+面包羅
+面包著
+面包藏
+面包裝
+面包裹
+面包起
+面店舖
+面粉碎
+面粉紅
+面食麵
+面食飯
+顛顛仆仆
+高干擾
+高干預
+高度自制
+黃金表
+天后宮
+一吊錢
+不食乾腊
+傳位于四太子
+儉确之教
+党懷英
+八蜡
+憑几
+南宮适
+大蜡
+子云
+分子雲
+小价
+歲聿云暮
+崖广
+恕乏价催
+悲筑
+折子戲
+揮杆
+搤肮拊背
+文采郁郁
+木杆
+洪适
+球杆
+腊之以為餌
+腊毒
+蜡月
+蜡祭
+言云
+宜云
+貴价
+郁郁菲菲
+馬杆
+造麯
+麴生
+麴秀才
+麴塵
+麴櫱
+大麴
+黃麴毒素
+酒醴麴櫱
+麴道士
+麴錢
+麴車
+麴院
+鼠麴草
+不乾不淨
+生發生
+必須
+須根據
+·范
+、剋制
+,剋制
+。剋制
+!剋制
+?剋制
+;剋制
+:剋制
+不剋制
+也剋制
+了剋制
+他剋制
+們剋制
+剋制不了
+剋制不住
+力剋制
+力求剋制
+可以剋制
+和剋制
+在剋制
+地剋制
+夠剋制
+她剋制
+你剋制
+您剋制
+就剋制
+彼此剋制
+得剋制
+快剋制
+想剋制
+意剋制
+應剋制
+我剋制
+才剋制
+於剋制
+易剋制
+無法剋制
+的剋制
+盡量剋制
+而剋制
+能剋制
+與剋制
+著剋制
+要剋制
+軍隊剋制
+空投佈雷
+火箭佈雷
+海灣佈雷
+空中佈雷
+海上佈雷
+佈雷的
+佈雷,
+佈雷、
+佈雷。
+佈雷;
+佈雷艦
+佈雷艇
+佈雷速度
+佈雷封鎖
+滿拚自盡
+拚生盡死
+拚卻
+拚老命
+拚絕
+成於思
+單單於
+積澱
+澱積
+澱北片
+澱解物
+澱謂之滓
+淺澱
+堙澱
+茂都澱
+並曰入澱
+澱乃不耕之地
+藍澱
+皆可作澱
+澱山
+海淀山後
+澱澱
+掛鈎
+薴悴
+絡腮鬍
+落腮鬍
+山羊鬍
+幸運鬍
+刮鬍
+剃鬍
+吹鬍
+蓄鬍
+白鬍
+長鬍
+鬍髯
+髯鬍
+髭鬍
+鬚鬍
+范文瀾
+范文同
+范文正公
+范文程
+范文芳
+范文藤
+范文虎
+范文照
+發表
+乾重
+若干
+鈎心鬥角
+若干
+乾重
+全面包圍
+全面包裹
+機械系
+體系
+心理
+複分解
+鹰鵰
+叱咤903
+叱咤MY903
+叱咤My903
+叱咤樂壇
+叱咤咤
+叱咤叱咤叱咤咤
+叱咤叱叱咤
+正在叱咤
+空餘
+變髒
+天地志狼
+薴烯
+阿斯圖里亞斯
+雙折射
+心繫家
+心繫國
+心繫祖
+心繫北
+心繫京
+心繫南
+心繫西
+心繫東
+心繫四
+心繫川
+心繫浙
+心繫汶
+心繫廣
+心繫湖
+心繫山
+心繫台
+心繫江
+心繫昌
+心繫香
+心繫澳
+心繫港
+心繫泰
+心繫健
+心繫天
+心繫地
+心繫大
+心繫小
+心繫全
+心繫眾
+心繫奧
+心繫世
+心繫中
+心繫高
+心繫災
+心繫非
+心繫群
+心繫新
+心繫沈
+心繫唐
+心繫黃
+心繫乔
+心繫阮
+心繫父
+心繫母
+心繫病
+心繫故
+心繫哪
+心繫中
+心繫英
+心繫美
+心繫日
+心繫德
+心繫功
+心繫曉
+心繫神
+心繫萬
+心繫的
+心繫在
+心繫兩
+心繫社
+心繫曼
+心繫彼
+心繫風
+心繫募
+心繫一
+心繫何
+心繫困
+心繫輸
+心繫人
+心繫民
+心繫十
+心繫百
+心繫千
+心繫和
+心繫選
+心繫囑
+心繫我
+心繫你
+心繫您
+心繫他
+心繫她
+心繫它
+心繫伊
+心繫長
+心繫舞
+心繫蘭
+心繫五
+心繫生
+心繫婦
+心繫幼
+心繫茶
+心繫動
+心繫沙
+心繫林
+心繫摩
+心繫农
+心繫慈
+心繫麥
+心繫貧
+心繫富
+心繫遠
+心繫近
+心繫宣
+心繫傳
+心繫紅
+心繫老
+心繫重
+心繫震
+心繫妻
+心繫夫
+心繫女
+心繫子
+心繫著
+重回
+挑大樑
+扛大樑
+后豐
+製得
+限制
+控制
+製取
+第四出局
+心臟
+肝臟
+脾臟
+肺臟
+腎臟
+參與
+浮誇
+星巴克
+于謙
+于寘
+淳于
+于禁
+于敏中
+註:# 不作“注:”
+呆呆獸
+劃為# 不作“划為”
+併為一體
+併為一家
+一個# 避免“個裡”的錯誤
+兩個
+二個
+三個
+四個
+五個
+六個
+七個
+八個
+九個
+十個
+百個
+千個
+萬個
+億個
+兆個
+零個
+云:# 不作“雲:”
+電子表格
+雪裡紅
+雪裡蕻
+森林裡
+日子裡
+故事裡
+領域裡
+時間裡
+深淵裡
+醫院裡
+春假裡
+暑假裡
+秋假裡
+寒假裡
+春天裡
+夏天裡
+秋天裡
+冬天裡
+春日裡
+夏日裡
+秋日裡
+冬日裡
+嘴裡
+心裡
+皮裡陽秋
+肚裡
+苦裡
+裡勾外連
+裡面
+這裡
+中文裡
+山洞裡
+世界裡
+眼睛裡
+首發
+夸脫
+誰幹的
+鐘螺
+風采
+代碼表
+編碼表
+字碼表
+電碼表
+科斗
+佔領
+灕水
+點裡
+這只是
+這只不
+這只容
+這只允
+這只採
+這只用
+有只是
+有只不
+有只容
+有只允
+有只採
+有只用
+葉叶琹
+胡子昂
+包括
+特别致
+分别致
+會上簽訂
+會上簽署
+周一 # (及以下)避免“周一齣版”的錯誤
+周二
+周三
+周四
+周五
+周六
+韶山沖
+總裁制
+于丹
+于樂
+于冕
+于軍
+于吉
+于堅
+于姓
+于氏
+于娜
+于娟
+于山
+于帥
+于慧
+于振
+于敏
+于斌
+于晴
+于波
+于濤
+于衡
+于贈
+于越
+于靖
+于勒
+于格
+于仁泰
+于會泳
+于偉國
+于佳卉
+于光遠
+于克勒
+于凌奎
+于鳳至
+于化虎
+于占元
+于台煙
+于品海
+于國楨
+于大寶
+于天仁
+于子千
+于孔兼
+于學忠
+于家堡
+于小偉
+于小彤
+于山國
+于幼軍
+于廣洲
+于康震
+于式枚
+于從濂
+于德海
+于志寧
+于慎行
+于成龍
+于振武
+于明濤
+于是之
+于晨楠
+于根偉
+于樹潔
+于欣源
+于正昇
+于正昌
+于永波
+于漢超
+于江震
+于洪區
+于浩威
+于海洋
+于湘蘭
+于特森
+于玉立
+于秀敏
+于素秋
+于若木
+于蔭霖
+于西翰
+于遠偉
+于道泉
+于都縣
+于震寰
+于震環
+于非闇
+于風政
+于鳳桐
+于默奧
+于家堡
+于爾岑
+于默奧
+于貝爾
+于爾根
+于雙戈
+于里察
+于澤爾
+于斯塔德
+于斯達爾
+于爾里克
+于奇庫杜克
+于韋斯屈萊
+于克-蘭多縣
+于斯納爾斯貝里
+夏于喬
+涂姓
+涂坤
+涂天相
+涂序瑄
+涂澤民
+涂紹煃
+涂羽卿
+涂逢年
+涂長望
+涂謹申
+涂鴻欽
+涂壯勳
+涂醒哲
+涂善妮
+涂敏恆
+總裁制
+故云
+強制作用
+鬱南
+西米谷
+一出生
+二出生
+三出生
+四出生
+五出生
+六出生
+七出生
+八出生
+九出生
+十出生
+一出版
+二出版
+三出版
+四出版
+五出版
+六出版
+七出版
+八出版
+九出版
+十出版
+一出刊
+二出刊
+三出刊
+四出刊
+五出刊
+六出刊
+七出刊
+八出刊
+九出刊
+十出刊
+一出逃
+二出逃
+三出逃
+四出逃
+五出逃
+六出逃
+七出逃
+八出逃
+九出逃
+十出逃
+一出口
+二出口
+三出口
+四出口
+五出口
+六出口
+七出口
+八出口
+九出口
+十出口
+一出祁山
+二出祁山
+三出祁山
+四出祁山
+五出祁山
+六出祁山
+七出祁山
+八出祁山
+九出祁山
+十出祁山
+鬱林
+饑荒
+免徵
+亞美尼亞曆
+百科裡
+歷史裡
+戲裡
+作品裡
+專輯裡
+年代裡
+棺材裡
+注釋
+月面
+路面
+修杰楷
+修杰麟
+學裡
+獄裡
+館裡
+系列裡
+村子裡
+艷后
+廢后
+妖后
+后海灣
+仙后
+賈后
+賢后
+蜂后
+皇后
+王后
+王侯后
+母后
+武后
+歌后
+影后
+封后
+太后
+天后
+呂后
+后里
+后街
+后羿
+后稷
+后座
+后平路
+后安路
+后土
+后北街
+后冠
+望后石
+后角
+蟻后
+后妃
+大周后
+小周后
+染殿后
+准三后
+風后
+后母戊
+風後,
+人如風後入江雲
+中風後
+屏風後
+颱風後
+颳風後
+整風後
+打風後
+遇風後
+聞風後
+逆風後
+順風後
+大風後
+馬格里布
+伊里布
+劃入
+中庄子
+埔裏社撫墾局
+懸掛
+僱傭
+四捨六入
+宿舍
+會干擾
+代表
+高清愿
+瓷製
+竹製
+絲製
+莜麵
+劃入
+簡筑翎
+楊雅筑
+魔杰座
+杰威爾音樂
+彭于晏
+尸羅精舍
+索馬里 # (及以下)避免里海=>裏海的轉換
+西西里
+騰格里
+阿里
+村里長
+進制
+黃詩杰
+陳冲
+何杰
+劉佳怜
+于小惠
+于品海
+于耘婕
+于洋
+于澄
+于光新
+范賢惠
+于國治
+于楓
+于熙珍
+涂善妮
+邱于庭
+熊杰
+卜云吉
+黎吉雲
+于飛島
+代表
+水無怜奈
+傲遊 # 浏览器名
+夏于喬
+賭后
+后海灣
+立后綜
+甲后路
+劉芸后
+謝華后
+趙惠后
+趙威后
+聖后
+陳有后
+許虬
+網遊
+狄志杰
+伊適杰
+于冠華
+于台煙
+于雲鶴
+于忠肅集
+于友澤
+于和偉
+于來山
+于樂
+于天龍
+于謹
+于榮光
+電波鐘
+余三勝
+掛名
+啟發式
+舞后
+甄后
+郭后
+0年 # 協助分詞
+1年
+2年
+3年
+4年
+5年
+6年
+7年
+8年
+9年
+0年
+1年
+2年
+3年
+4年
+5年
+6年
+7年
+8年
+9年
+〇年
+零年
+一年
+兩年
+二年
+三年
+四年
+五年
+六年
+七年
+八年
+九年
+十年
+百年
+千年
+萬年
+億年
+周后
+0周後
+1周後
+2周後
+3周後
+4周後
+5周後
+6周後
+7周後
+8周後
+9周後
+0周後
+1周後
+2周後
+3周後
+4周後
+5周後
+6周後
+7周後
+8周後
+9周後
+零周後
+〇周後
+一周後
+二周後
+兩周後
+三周後
+四周後
+五周後
+六周後
+七周後
+八周後
+九周後
+十周後
+百周後
+千周後
+萬周後
+億周後
+幾周後
+多周後
+前往
+后瑞站
+帝后臺
+新井里美
+樗里子
+伊達里子
+濱田里佳子
+尊后
+叶志穗
+叶不二子
+于立成
+山谷道
+李志喜
+于欣
+于少保
+于海
+於海邊
+於海上
+于凌辰
+于魁智
+于鬯
+于仲文
+于再清
+于震
+於震前
+於震后
+於震中
+固定制
+毗婆尸佛
+尸棄佛
+划船
+划不來
+划拳
+划槳
+划動
+划艇
+划行
+划算
+總裁制
+恒生
+嚴云農
+手裏劍
+秦莊襄王
+伊東怜
+衛後莊公
+餘量
+並行
+郁郁青青
+協防
+對表格
+對表示
+對表達
+對表演
+對表明
+了然後
+戴表元
+張樂于張徐
+余力為
+葉叶琴
+万俟
+幾個
+澀谷區
+協調
+選手
+併發症
+併發重症
+併發模式
+併發型模式
+金色長髮
+紅色長髮
+一頭長髮
+的長髮
+黑色長髮
+前天
+昨天
+今天
+明天
+後天
+數學家
+科學家
+物理學家
+化學家
+生物學家
+天文學家
+游離
+子晳
+紅后假說
+書面
+不只
+高涌泉
+請求
+考試
+測試
+筆試
+口試
+冰冷
+王田里
+后姓
+台州
+田庄英雄
+計劃
+抑制劑
diff --git a/maintenance/language/zhtable/tradphrases_exclude.manual b/maintenance/language/zhtable/tradphrases_exclude.manual
new file mode 100644 (file)
index 0000000..e6abb4e
--- /dev/null
@@ -0,0 +1,330 @@
+三國誌
+聊齋誌異
+北迴
+南迴
+併排
+併進
+併在
+併成
+衝衝
+臺
+著
+佈
+纔
+采
+着
+借
+甦
+荐
+担
+可憐虫
+一齣
+上弔
+弔車
+弔橋
+弔嗓子
+弔床
+弔架
+弔桶
+弔桿
+弔橋
+弔燈
+弔環
+弔籃
+弔胃口
+弔臂
+弔銷
+形影相弔
+被髮
+散髮
+長髮
+髮毛
+髮端
+周而複始
+答複
+複興
+複舊
+顛複
+修複
+報複
+複活
+反複
+迴首
+彙總
+饑餓
+饑不擇食
+饑荒
+憑藉
+藉故
+藉口
+藉端
+藉詞
+藉酒
+蛋捲
+行李捲
+克裡
+纍纍
+華裡
+裡海
+瞭解
+明瞭
+發黴
+矇蔽
+矇住
+濛濛
+矇矇
+下麵
+白麵
+切麵
+和麵
+過水麵
+復甦
+複蘇
+甦醒
+体
+繫數
+遊擊
+馥鬱
+鬱鬱
+改製
+獃住
+獃氣
+獃子
+獃頭獃腦
+儘量
+希腊
+腊肉
+瞭如
+昇
+武鬆
+赤鬆
+黑鬆
+鬆林
+鬆科
+鬆濤
+鬆毛蟲
+鬆節油
+濕地鬆
+尼克鬆
+紮伊爾
+阿布紮比
+阿紮尼亞
+利比裡亞
+斯裡蘭卡
+烏蘇裡江
+加裡寧
+歐幾裡得
+格裡
+巴裡
+居裡
+卡裡
+墨索裡尼
+底裡
+裡人
+裡加
+裡裡
+馬裡
+裡拉
+阿裡
+裡斯
+鄰裡
+鄉裡
+百裡
+特裡
+海裡
+三元裡
+漏鬥
+春捲
+採邑
+嚮日
+佔城
+水錶
+名錶
+錶面
+彆腳
+併力
+併列
+併為
+豐富多採
+採採
+尼採
+小醜
+辛醜
+整齣
+嚴複
+枯幹
+干著急
+單於
+攻剋
+剋服
+闢邪
+釐米
+後樑
+石樑
+木樑
+舊莊
+介係詞
+介繫詞
+餘年
+大阪
+阪田
+豪杰
+七拚八湊
+一捲
+十捲
+上捲
+下捲
+加捲
+不捨
+不識檯舉
+稜登
+半弔子
+分布圖
+星鬥
+筋鬥
+斗鬨
+料鬥
+煙鬥
+熨鬥
+笆鬥
+箕鬥
+金鬥
+門鬥
+風鬥
+鬥子
+鬥笠
+老板娘
+剋制
+洋麵
+病癥
+製裁
+台製
+石家庄
+酒盃
+積极
+殭尸
+上梁不正
+項鍊
+鍊子
+鍊條
+拉鍊
+鉸鍊
+鍊鎖
+鐵鍊
+鍛鍊
+鍊乳
+鍊丹
+至于
+浮于
+附于
+次于
+于人
+助于
+行于
+于衷
+于事
+低于
+大于
+高于
+等于
+位于
+用于
+答覆
+複蓋
+反覆
+藉藉
+蘊藉
+蹈藉
+醞藉
+氆氌
+慰藉
+文藉
+枕藉
+狼藉
+別隻
+鼕鼕
+矇松雨
+佈雷
+丰度
+剪彩
+脣
+菴
+公裡
+箇中
+樑子
+樑書
+讚成
+讚同
+鐘表店
+精採
+鞭尸
+尸身
+尸首
+行尸走肉
+裹尸
+慼慼
+痠
+簑
+捱
+朝乾夕惕
+大曲酒
+神麴
+便于
+偏于
+勇于
+居于
+常見于
+強加于
+從事于
+忙于
+敢于
+服務于
+服從于
+樂于
+歸罪于
+歸諸于
+活動于
+瀕于
+苦于
+莫過于
+處于
+適于
+乾和
+鉤
+高陞
+大胆
+託福
+繫系
+酰
+醯
+大樑
+光採
+鍾錶
+複原
+參与
+浮夸
+剋日
+羡
+旅游
+穀風
+復讎
+避暑山庄
+遊牧
+烟草
+征
+占領
+入夥
+懸挂
+註釋
+浮遊
+冶鍊
+裡子
+裡外
+單隻
+聯係
+那裏
+殺虫藥
+好家伙
+姦污
+併發
+衚衕
index 4358989..01fbac7 100644 (file)
@@ -23,7 +23,7 @@
  * @ingroup LockManager Maintenance
  */
 
-if ( php_sapi_name() !== 'cli' ) {
+if ( PHP_SAPI !== 'cli' ) {
        die( "This is not a valid entry point.\n" );
 }
 error_reporting( E_ALL );
@@ -79,9 +79,9 @@ class LockServerDaemon {
                foreach ( array( 'address', 'port', 'authKey' ) as $par ) {
                        if ( !isset( $config[$par] ) ) {
                                die( "Usage: php LockServerDaemon.php " .
-                                       "--address <address> --port <port> --authkey <key> " .
+                                       "--address <address> --port <port> --authKey <key> " .
                                        "[--lockTimeout <seconds>] " .
-                                       "[--maxLocks <integer>] [--maxClients <integer>] [--maxBacklog <integer>]"
+                                       "[--maxLocks <integer>] [--maxClients <integer>] [--maxBacklog <integer>]\n"
                                );
                        }
                }
index e07e62d..4e0f291 100644 (file)
 /** */
 require_once( __DIR__ . '/commandLine.inc' );
 
-$mcc = new MWMemcached( array( 'persistent' => true/*, 'debug' => true*/ ) );
-$mcc->set_servers( $wgMemCachedServers );
-# $mcc->set_debug( true );
+$debug = in_array( '--debug', $argv );
+$help = in_array( '--help', $argv );
 
-function mccShowHelp( $command ) {
+if( $help ) {
+       mccShowUsage();
+       exit( 0 );
+}
+$mcc = new MWMemcached( array(
+       'persistent' => true,
+       'debug' => $debug,
+) );
+
+if ( $wgMainCacheType === CACHE_MEMCACHED ) {
+       $mcc->set_servers( $wgMemCachedServers );
+} elseif( isset( $wgObjectCaches[$wgMainCacheType] ) ) {
+       $mcc->set_servers( $wgObjectCaches[$wgMainCacheType]['servers'] );
+} else {
+       print "MediaWiki isn't configured for Memcached usage\n";
+       exit( 1 );
+}
+
+/**
+ * Show this command line tool usage.
+ */
+function mccShowUsage() {
+       echo <<<EOF
+Usage:
+       mcc.php [--debug]
+       mcc.php --help
+
+MemCached Command (mcc) is an interactive command tool that let you interact
+with the MediaWiki memcached cache.
+
+Options:
+       --debug Set debug mode on the memcached connection.
+       --help  This help screen.
+
+Interactive commands:
+
+EOF;
+       print "\t";
+       print str_replace( "\n", "\n\t", mccGetHelp( false ) );
+       print "\n";
+}
+
+function mccGetHelp( $command ) {
+       $output = '';
        $commandList = array(
                'get' => 'grabs something',
                'getsock' => 'lists sockets',
@@ -48,13 +90,15 @@ function mccShowHelp( $command ) {
        if ( $command === 'fullhelp' ) {
                $max_cmd_len = max( array_map( 'strlen', array_keys( $commandList ) ) );
                foreach ( $commandList as $cmd => $desc ) {
-                       printf( "%-{$max_cmd_len}s: %s\n", $cmd, $desc );
+                       $output .= sprintf( "%-{$max_cmd_len}s: %s\n", $cmd, $desc );
                }
        } elseif ( isset( $commandList[$command] ) ) {
-               print "$command: $commandList[$command]\n";
+               $output .= "$command: $commandList[$command]\n";
        } else {
-               print "$command: command does not exist or no help for it\n";
+               $output .= "$command: command does not exist or no help for it\n";
        }
+
+       return $output;
 }
 
 do {
@@ -72,8 +116,8 @@ do {
        switch ( $command ) {
                case 'help':
                        // show an help message
-                       mccShowHelp( array_shift( $args ) );
-               break;
+                       print mccGetHelp( array_shift( $args ) );
+                       break;
 
                case 'get':
                        $sub = '';
@@ -93,7 +137,7 @@ do {
                        } else {
                                var_dump( $res );
                        }
-               break;
+                       break;
 
                case 'getsock':
                        $res = $mcc->get( $args[0] );
index 691b832..42461c5 100644 (file)
@@ -40,14 +40,21 @@ class mcTest extends Maintenance {
        }
 
        public function execute() {
-               global $wgMemCachedServers, $wgMemCachedTimeout;
+               global $wgMainCacheType, $wgMemCachedTimeout, $wgObjectCaches;
 
                $iterations = $this->getOption( 'i', 100 );
                if ( $this->hasArg() ) {
-                       $wgMemCachedServers = array( $this->getArg() );
+                       $servers = array( $this->getArg() );
+               } elseif ( $wgMainCacheType === CACHE_MEMCACHED ) {
+                       global $wgMemCachedServers;
+                       $servers = $wgMemCachedServers ;
+               } elseif( isset( $wgObjectCaches[$wgMainCacheType] ) ) {
+                       $servers = $wgObjectCaches[$wgMainCacheType]['servers'];
+               } else {
+                       $this->error( "MediaWiki isn't configured for Memcached usage", 1 );
                }
 
-               foreach ( $wgMemCachedServers as $server ) {
+               foreach ( $servers as $server ) {
                        $this->output( $server . " ", $server );
                        $mcc = new MemCachedClientforWiki( array(
                                'persistant' => true,
index cea6433..62596b2 100644 (file)
@@ -82,6 +82,9 @@ class MergeMessageFileList extends Maintenance {
                if ( $this->hasOption( 'output' ) ) {
                        $mmfl['output'] = $this->getOption( 'output' );
                }
+               if ( $this->hasOption( 'quiet' ) ) {
+                       $mmfl['quiet'] = true;
+               }
        }
 }
 
@@ -92,7 +95,9 @@ foreach ( $mmfl['setupFiles'] as $fileName ) {
                continue;
        }
        $fileName = str_replace( '$IP', $IP, $fileName );
-       fwrite( STDERR, "Loading data from $fileName\n" );
+       if ( empty( $mmfl['quiet'] ) ) {
+               fwrite( STDERR, "Loading data from $fileName\n" );
+       }
        include_once( $fileName );
 }
 fwrite( STDERR, "\n" );
@@ -120,4 +125,3 @@ if ( isset( $mmfl['output'] ) ) {
 } else {
        echo $s;
 }
-
index 496af72..f3e5957 100644 (file)
@@ -55,7 +55,9 @@ class MigrateUserGroup extends Maintenance {
                $blockEnd = $start + $this->mBatchSize - 1;
                // Migrate users over in batches...
                while ( $blockEnd <= $end ) {
+                       $affected = 0;
                        $this->output( "Doing users $blockStart to $blockEnd\n" );
+
                        $dbw->begin( __METHOD__ );
                        $dbw->update( 'user_groups',
                                array( 'ug_group' => $newGroup ),
@@ -64,19 +66,42 @@ class MigrateUserGroup extends Maintenance {
                                __METHOD__,
                                array( 'IGNORE' )
                        );
-                       $count += $dbw->affectedRows();
+                       $affected += $dbw->affectedRows();
+                       // Delete rows that the UPDATE operation above had to ignore.
+                       // This happens when a user is in both the old and new group.
+                       // Updating the row for the old group membership failed since
+                       // user/group is UNIQUE.
                        $dbw->delete( 'user_groups',
                                array( 'ug_group' => $oldGroup,
                                        "ug_user BETWEEN $blockStart AND $blockEnd" ),
                                __METHOD__
                        );
-                       $count += $dbw->affectedRows();
+                       $affected += $dbw->affectedRows();
                        $dbw->commit( __METHOD__ );
+
+                       // Clear cache for the affected users (bug 40340)
+                       if ( $affected > 0 ) {
+                               // XXX: This also invalidates cache of unaffected users that
+                               // were in the new group and not in the group.
+                               $res = $dbw->select( 'user_groups', 'ug_user',
+                                       array( 'ug_group' => $newGroup,
+                                               "ug_user BETWEEN $blockStart AND $blockEnd" ),
+                                       __METHOD__
+                               );
+                               if ( $res !== false ) {
+                                       foreach ( $res as $row ) {
+                                               $user = User::newFromId( $row->ug_user );
+                                               $user->invalidateCache();
+                                       }
+                               }
+                       }
+
+                       $count += $affected;
                        $blockStart += $this->mBatchSize;
                        $blockEnd += $this->mBatchSize;
                        wfWaitForSlaves();
                }
-               $this->output( "Done! $count user(s) in group '$oldGroup' are now in '$newGroup' instead.\n" );
+               $this->output( "Done! $count users in group '$oldGroup' are now in '$newGroup' instead.\n" );
        }
 }
 
index 6e01291..429e3b3 100644 (file)
@@ -43,7 +43,7 @@
 # Variables / Configuration
 #
 
-if ( php_sapi_name() != 'cli' ) {
+if ( PHP_SAPI != 'cli' ) {
        echo 'Run "' . __FILE__ . '" from the command line.';
        die( -1 );
 }
index 4197a35..6067a82 100644 (file)
@@ -147,14 +147,13 @@ class NamespaceConflictChecker extends Maintenance {
        /**
         * Get the interwiki list
         *
-        * @todo Needs to respect interwiki cache!
         * @return Array
         */
        private function getInterwikiList() {
-               $result = $this->db->select( 'interwiki', array( 'iw_prefix' ) );
+               $result = Interwiki::getAllPrefixes();
                $prefixes = array();
                foreach ( $result as $row ) {
-                       $prefixes[] = $row->iw_prefix;
+                       $prefixes[] = $row['iw_prefix'];
                }
                return $prefixes;
        }
index 17a3f2e..032d6f9 100644 (file)
@@ -18,7 +18,6 @@
  * http://www.gnu.org/copyleft/gpl.html
  *
  * @file
- * @todo Make this work on PostgreSQL and maybe other database servers
  * @ingroup Maintenance
  */
 
@@ -33,13 +32,21 @@ class nextJobDB extends Maintenance {
        public function __construct() {
                parent::__construct();
                $this->mDescription = "Pick a database that has pending jobs";
-               $this->addOption( 'type', "The type of job to search for", false, true );
+               $this->addOption( 'type', "Search by job type", false, true );
+               $this->addOption( 'types', "Space separated list of job types to search for", false, true );
        }
 
        public function execute() {
                global $wgMemc;
 
-               $type = $this->getOption( 'type', false );
+               $type = false; // job type required/picked
+               if ( $this->hasOption( 'types' ) ) {
+                       $types = explode( ' ', $this->getOption( 'types' ) );
+               } elseif ( $this->hasOption( 'type' ) ) {
+                       $types = array( $this->getOption( 'type' ) );
+               } else {
+                       $types = JobQueueGroup::singleton()->getDefaultQueueTypes();
+               }
 
                $memcKey = 'jobqueue:dbs:v3';
                $pendingDbInfo = $wgMemc->get( $memcKey );
@@ -75,36 +82,33 @@ class nextJobDB extends Maintenance {
                do {
                        $again = false;
 
-                       if ( $type === false ) {
-                               $candidates = call_user_func_array( 'array_merge', $pendingDBs );
-                       } elseif ( isset( $pendingDBs[$type] ) ) {
-                               $candidates = $pendingDBs[$type];
-                       } else {
-                               $candidates = array();
+                       $candidates = array(); // list of (type, db)
+                       // Flatten the tree of candidates into a flat list so that a random
+                       // item can be selected, weighing each queue (type/db tuple) equally.
+                       foreach ( $pendingDBs as $type => $dbs ) {
+                               if ( in_array( $type, $types ) ) {
+                                       foreach ( $dbs as $db ) {
+                                               $candidates[] = array( $type, $db );
+                                       }
+                               }
                        }
-                       if ( !$candidates ) {
-                               return;
+                       if ( !count( $candidates ) ) {
+                               return; // no jobs for this type
                        }
 
-                       $candidates = array_values( $candidates );
-                       $db = $candidates[ mt_rand( 0, count( $candidates ) - 1 ) ];
-                       if ( !$this->checkJob( $type, $db ) ) {
-                               if ( $type === false ) {
-                                       // There are no jobs available in the current database
-                                       foreach ( $pendingDBs as $type2 => $dbs ) {
-                                               $pendingDBs[$type2] = array_diff( $pendingDBs[$type2], array( $db ) );
-                                       }
-                               } else {
-                                       // There are no jobs of this type available in the current database
-                                       $pendingDBs[$type] = array_diff( $pendingDBs[$type], array( $db ) );
-                               }
+                       list( $type, $db ) = $candidates[ mt_rand( 0, count( $candidates ) - 1 ) ];
+                       if ( !$this->checkJob( $type, $db ) ) { // queue is actually empty?
+                               $pendingDBs = $this->delistDB( $pendingDBs, $db, $type );
                                // Update the cache to remove the outdated information.
                                // Make sure that this does not race (especially with full rebuilds).
-                               $pendingDbInfo['pendingDBs'] = $pendingDBs;
                                if ( $wgMemc->add( "$memcKey:lock", 1, 60 ) ) { // lock
                                        $curInfo = $wgMemc->get( $memcKey );
-                                       if ( $curInfo && $curInfo['timestamp'] === $pendingDbInfo['timestamp'] ) {
-                                               $wgMemc->set( $memcKey, $pendingDbInfo );
+                                       if ( is_array( $curInfo ) ) {
+                                               $curInfo['pendingDBs'] =
+                                                       $this->delistDB( $curInfo['pendingDBs'], $db, $type );
+                                               $wgMemc->set( $memcKey, $curInfo );
+                                               // May as well make use of this newer information
+                                               $pendingDBs = $curInfo['pendingDBs'];
                                        }
                                        $wgMemc->delete( "$memcKey:lock" ); // unlock
                                }
@@ -112,7 +116,24 @@ class nextJobDB extends Maintenance {
                        }
                } while ( $again );
 
-               $this->output( $db . "\n" );
+               if ( $this->hasOption( 'types' ) ) {
+                       $this->output( $db . " " . $type . "\n" );
+               } else {
+                       $this->output( $db . "\n" );
+               }
+       }
+
+       /**
+        * Remove a type/DB entry from the list of queues with jobs
+        *
+        * @param $pendingDBs array
+        * @param $db string
+        * @param $type string
+        * @return Array
+        */
+       private function delistDB( array $pendingDBs, $db, $type ) {
+               $pendingDBs[$type] = array_diff( $pendingDBs[$type], array( $db ) );
+               return $pendingDBs;
        }
 
        /**
@@ -122,18 +143,8 @@ class nextJobDB extends Maintenance {
         * @param $dbName string
         * @return bool
         */
-       function checkJob( $type, $dbName ) {
-               $group = JobQueueGroup::singleton( $dbName );
-               if ( $type === false ) {
-                       foreach ( $group->getDefaultQueueTypes() as $type ) {
-                               if ( !$group->get( $type )->isEmpty() ) {
-                                       return true;
-                               }
-                       }
-                       return false;
-               } else {
-                       return !$group->get( $type )->isEmpty();
-               }
+       private function checkJob( $type, $dbName ) {
+               return !JobQueueGroup::singleton( $dbName )->get( $type )->isEmpty();
        }
 
        /**
diff --git a/maintenance/oracle/archives/patch-fa_sha1.sql b/maintenance/oracle/archives/patch-fa_sha1.sql
new file mode 100644 (file)
index 0000000..70c9e60
--- /dev/null
@@ -0,0 +1,5 @@
+define mw_prefix='{$wgDBprefix}';
+
+ALTER TABLE &mw_prefix.filearchive ADD fa_sha1 VARCHAR2(32);
+CREATE INDEX &mw_prefix.filearchive_i05 ON &mw_prefix.filearchive (fa_sha1);
+
diff --git a/maintenance/oracle/archives/patch-job_attempts.sql b/maintenance/oracle/archives/patch-job_attempts.sql
new file mode 100644 (file)
index 0000000..b05c877
--- /dev/null
@@ -0,0 +1,4 @@
+define mw_prefix='{$wgDBprefix}';
+
+ALTER TABLE &mw_prefix.job ADD   job_attempts NUMBER DEFAULT 0 NOT NULL;
+CREATE INDEX &mw_prefix.job_i05 ON &mw_prefix.job (job_attempts);
diff --git a/maintenance/oracle/archives/patch-job_token.sql b/maintenance/oracle/archives/patch-job_token.sql
new file mode 100644 (file)
index 0000000..1a730e9
--- /dev/null
@@ -0,0 +1,12 @@
+define mw_prefix='{$wgDBprefix}';
+
+ALTER TABLE &mw_prefix.job ADD (
+       job_random NUMBER DEFAULT 0 NOT NULL,
+       job_token VARCHAR2(32),
+       job_token_timestamp TIMESTAMP(6) WITH TIME ZONE,
+       job_sha1 VARCHAR2(32)
+);
+
+CREATE INDEX &mw_prefix.job_i03 ON &mw_prefix.job (job_sha1);
+CREATE INDEX &mw_prefix.job_i04 ON &mw_prefix.job (job_cmd,job_token,job_random);
+
diff --git a/maintenance/oracle/archives/patch-sites.sql b/maintenance/oracle/archives/patch-sites.sql
new file mode 100644 (file)
index 0000000..868b210
--- /dev/null
@@ -0,0 +1,34 @@
+define mw_prefix='{$wgDBprefix}';
+
+CREATE SEQUENCE sites_site_id_seq MINVALUE 0 START WITH 0;
+CREATE TABLE &mw_prefix.sites (
+  site_id NUMBER NOT NULL,
+  site_global_key VARCHAR2(32) NOT NULL,
+  site_type VARCHAR2(32) NOT NULL,
+  site_group VARCHAR2(32) NOT NULL,
+  site_source VARCHAR2(32) NOT NULL,
+  site_language VARCHAR2(32) NOT NULL,
+  site_protocol VARCHAR2(32) NOT NULL,
+  site_domain VARCHAR2(255) NOT NULL,
+  site_data BLOB NOT NULL,
+  site_forward NUMBER(1) NOT NULL,
+  site_config BLOB NOT NULL
+);
+ALTER TABLE &mw_prefix.sites ADD CONSTRAINT &mw_prefix.sites_pk PRIMARY KEY (site_id);
+CREATE UNIQUE INDEX &mw_prefix.sites_u01 ON &mw_prefix.sites (site_global_key);
+CREATE INDEX &mw_prefix.sites_i01 ON &mw_prefix.sites (site_type);
+CREATE INDEX &mw_prefix.sites_i02 ON &mw_prefix.sites (site_group);
+CREATE INDEX &mw_prefix.sites_i03 ON &mw_prefix.sites (site_source);
+CREATE INDEX &mw_prefix.sites_i04 ON &mw_prefix.sites (site_language);
+CREATE INDEX &mw_prefix.sites_i05 ON &mw_prefix.sites (site_protocol);
+CREATE INDEX &mw_prefix.sites_i06 ON &mw_prefix.sites (site_domain);
+CREATE INDEX &mw_prefix.sites_i07 ON &mw_prefix.sites (site_forward);
+
+CREATE TABLE &mw_prefix.site_identifiers (
+  si_site NUMBER NOT NULL,
+  si_type VARCHAR2(32) NOT NULL,
+  si_key VARCHAR2(32) NOT NULL
+);
+CREATE UNIQUE INDEX &mw_prefix.site_identifiers_u01 ON &mw_prefix.site_identifiers (si_type, si_key);
+CREATE INDEX &mw_prefix.site_identifiers_i01 ON &mw_prefix.site_identifiers (si_site);
+CREATE INDEX &mw_prefix.site_identifiers_i02 ON &mw_prefix.site_identifiers (si_key);
diff --git a/maintenance/oracle/archives/patch-ufg_group-length-increase-255.sql b/maintenance/oracle/archives/patch-ufg_group-length-increase-255.sql
new file mode 100644 (file)
index 0000000..6a4a751
--- /dev/null
@@ -0,0 +1,9 @@
+define mw_prefix='{$wgDBprefix}';
+
+/*$mw$*/
+BEGIN
+       EXECUTE IMMEDIATE 'ALTER TABLE &mw_prefix.user_former_groups MODIFY ufg_group VARCHAR2(255) NOT NULL';
+EXCEPTION WHEN OTHERS THEN
+       IF (SQLCODE = -01442) THEN NULL; ELSE RAISE; END IF;
+END;
+/*$mw$*/
diff --git a/maintenance/oracle/archives/patch-ufg_group-length-increase.sql b/maintenance/oracle/archives/patch-ufg_group-length-increase.sql
deleted file mode 100644 (file)
index a48b8bf..0000000
+++ /dev/null
@@ -1,9 +0,0 @@
-define mw_prefix='{$wgDBprefix}';
-
-/*$mw$*/
-BEGIN
-       EXECUTE IMMEDIATE 'ALTER TABLE &mw_prefix.user_former_groups MODIFY ufg_group VARCHAR2(32) NOT NULL';
-EXCEPTION WHEN OTHERS THEN
-       IF (SQLCODE = -01442) THEN NULL; ELSE RAISE; END IF;
-END;
-/*$mw$*/
diff --git a/maintenance/oracle/archives/patch-ug_group-length-increase-255.sql b/maintenance/oracle/archives/patch-ug_group-length-increase-255.sql
new file mode 100644 (file)
index 0000000..00a5e7b
--- /dev/null
@@ -0,0 +1,9 @@
+define mw_prefix='{$wgDBprefix}';
+
+/*$mw$*/
+BEGIN
+       EXECUTE IMMEDIATE 'ALTER TABLE &mw_prefix.user_groups MODIFY ug_group VARCHAR2(255) NOT NULL';
+EXCEPTION WHEN OTHERS THEN
+       IF (SQLCODE = -01442) THEN NULL; ELSE RAISE; END IF;
+END;
+/*$mw$*/
diff --git a/maintenance/oracle/archives/patch-ug_group-length-increase.sql b/maintenance/oracle/archives/patch-ug_group-length-increase.sql
deleted file mode 100644 (file)
index 89e5532..0000000
+++ /dev/null
@@ -1,9 +0,0 @@
-define mw_prefix='{$wgDBprefix}';
-
-/*$mw$*/
-BEGIN
-       EXECUTE IMMEDIATE 'ALTER TABLE &mw_prefix.user_groups MODIFY ug_group VARCHAR2(32) NOT NULL';
-EXCEPTION WHEN OTHERS THEN
-       IF (SQLCODE = -01442) THEN NULL; ELSE RAISE; END IF;
-END;
-/*$mw$*/
diff --git a/maintenance/oracle/archives/patch-uploadstash-us_props.sql b/maintenance/oracle/archives/patch-uploadstash-us_props.sql
new file mode 100644 (file)
index 0000000..8962dc7
--- /dev/null
@@ -0,0 +1,4 @@
+define mw_prefix='{$wgDBprefix}';
+
+ALTER TABLE &mw_prefix.uploadstash ADD us_props BLOB;
+
index 59147eb..c14824e 100644 (file)
@@ -2,7 +2,7 @@ define mw_prefix='{$wgDBprefix}';
 
 CREATE TABLE &mw_prefix.user_former_groups (
   ufg_user   NUMBER      DEFAULT 0 NOT NULL,
-  ufg_group  VARCHAR2(16)     NOT NULL
+  ufg_group  VARCHAR2(255)     NOT NULL
 );
 ALTER TABLE &mw_prefix.user_former_groups ADD CONSTRAINT &mw_prefix.user_former_groups_fk1 FOREIGN KEY (ufg_user) REFERENCES &mw_prefix.mwuser(user_id) ON DELETE CASCADE DEFERRABLE INITIALLY DEFERRED;
 CREATE UNIQUE INDEX &mw_prefix.user_former_groups_u01 ON &mw_prefix.user_former_groups (ufg_user,ufg_group);
index f28c61f..b5b3b07 100644 (file)
@@ -31,7 +31,7 @@ INSERT INTO &mw_prefix.mwuser
 
 CREATE TABLE &mw_prefix.user_groups (
   ug_user   NUMBER      DEFAULT 0 NOT NULL,
-  ug_group  VARCHAR2(32)     NOT NULL
+  ug_group  VARCHAR2(255)     NOT NULL
 );
 ALTER TABLE &mw_prefix.user_groups ADD CONSTRAINT &mw_prefix.user_groups_fk1 FOREIGN KEY (ug_user) REFERENCES &mw_prefix.mwuser(user_id) ON DELETE CASCADE DEFERRABLE INITIALLY DEFERRED;
 CREATE UNIQUE INDEX &mw_prefix.user_groups_u01 ON &mw_prefix.user_groups (ug_user,ug_group);
@@ -39,7 +39,7 @@ CREATE INDEX &mw_prefix.user_groups_i01 ON &mw_prefix.user_groups (ug_group);
 
 CREATE TABLE &mw_prefix.user_former_groups (
   ufg_user   NUMBER      DEFAULT 0 NOT NULL,
-  ufg_group  VARCHAR2(16)     NOT NULL
+  ufg_group  VARCHAR2(255)     NOT NULL
 );
 ALTER TABLE &mw_prefix.user_former_groups ADD CONSTRAINT &mw_prefix.user_former_groups_fk1 FOREIGN KEY (ufg_user) REFERENCES &mw_prefix.mwuser(user_id) ON DELETE CASCADE DEFERRABLE INITIALLY DEFERRED;
 CREATE UNIQUE INDEX &mw_prefix.user_former_groups_u01 ON &mw_prefix.user_former_groups (ufg_user,ufg_group);
@@ -361,7 +361,8 @@ CREATE TABLE &mw_prefix.filearchive (
   fa_user               NUMBER          DEFAULT 0 NOT NULL,
   fa_user_text          VARCHAR2(255)         NOT NULL,
   fa_timestamp          TIMESTAMP(6) WITH TIME ZONE,
-  fa_deleted            NUMBER      DEFAULT 0 NOT NULL
+  fa_deleted            NUMBER      DEFAULT 0 NOT NULL,
+  fa_sha1              VARCHAR2(32)
 );
 ALTER TABLE &mw_prefix.filearchive ADD CONSTRAINT &mw_prefix.filearchive_pk PRIMARY KEY (fa_id);
 ALTER TABLE &mw_prefix.filearchive ADD CONSTRAINT &mw_prefix.filearchive_fk1 FOREIGN KEY (fa_deleted_user) REFERENCES &mw_prefix.mwuser(user_id) ON DELETE SET NULL DEFERRABLE INITIALLY DEFERRED;
@@ -370,6 +371,7 @@ CREATE INDEX &mw_prefix.filearchive_i01 ON &mw_prefix.filearchive (fa_name, fa_t
 CREATE INDEX &mw_prefix.filearchive_i02 ON &mw_prefix.filearchive (fa_storage_group, fa_storage_key);
 CREATE INDEX &mw_prefix.filearchive_i03 ON &mw_prefix.filearchive (fa_deleted_timestamp);
 CREATE INDEX &mw_prefix.filearchive_i04 ON &mw_prefix.filearchive (fa_user_text,fa_timestamp);
+CREATE INDEX &mw_prefix.filearchive_i05 ON &mw_prefix.filearchive (fa_sha1);
 
 CREATE SEQUENCE uploadstash_us_id_seq;
 CREATE TABLE &mw_prefix.uploadstash (
@@ -388,7 +390,8 @@ CREATE TABLE &mw_prefix.uploadstash (
   us_media_type         VARCHAR2(32) DEFAULT NULL,
        us_image_width                          NUMBER,
        us_image_height                         NUMBER,
-       us_image_bits                                   NUMBER
+       us_image_bits                                   NUMBER,
+  us_props BLOB
 );
 ALTER TABLE &mw_prefix.uploadstash ADD CONSTRAINT &mw_prefix.uploadstash_pk PRIMARY KEY (us_id);
 ALTER TABLE &mw_prefix.uploadstash ADD CONSTRAINT &mw_prefix.uploadstash_fk1 FOREIGN KEY (us_user) REFERENCES &mw_prefix.mwuser(user_id) ON DELETE SET NULL DEFERRABLE INITIALLY DEFERRED;
@@ -527,10 +530,18 @@ CREATE TABLE &mw_prefix.job (
   job_title      VARCHAR2(255)      NOT NULL,
   job_timestamp         TIMESTAMP(6) WITH TIME ZONE NULL,
   job_params     CLOB      NOT NULL
+  job_random NUMBER NOT NULL default 0,
+  job_token VARCHAR2(32),
+  job_token_timestamp TIMESTAMP(6) WITH TIME ZONE,
+  job_sha1 VARCHAR2(32),
+  job_attempts NUMBER NOT NULL default 0
 );
 ALTER TABLE &mw_prefix.job ADD CONSTRAINT &mw_prefix.job_pk PRIMARY KEY (job_id);
 CREATE INDEX &mw_prefix.job_i01 ON &mw_prefix.job (job_cmd, job_namespace, job_title);
 CREATE INDEX &mw_prefix.job_i02 ON &mw_prefix.job (job_timestamp);
+CREATE INDEX &mw_prefix.job_i03 ON &mw_prefix.job (job_sha1);
+CREATE INDEX &mw_prefix.job_i04 ON &mw_prefix.job (job_cmd,job_token,job_random);
+CREATE INDEX &mw_prefix.job_i05 ON &mw_prefix.job (job_attempts);
 
 CREATE TABLE &mw_prefix.querycache_info (
   qci_type       VARCHAR2(32) NOT NULL,
@@ -670,6 +681,39 @@ CREATE TABLE &mw_prefix.module_deps (
 );
 CREATE UNIQUE INDEX &mw_prefix.module_deps_u01 ON &mw_prefix.module_deps (md_module, md_skin);
 
+CREATE SEQUENCE sites_site_id_seq MINVALUE 0 START WITH 0;
+CREATE TABLE &mw_prefix.sites (
+  site_id NUMBER NOT NULL,
+  site_global_key VARCHAR2(32) NOT NULL,
+  site_type VARCHAR2(32) NOT NULL,
+  site_group VARCHAR2(32) NOT NULL,
+  site_source VARCHAR2(32) NOT NULL,
+  site_language VARCHAR2(32) NOT NULL,
+  site_protocol VARCHAR2(32) NOT NULL,
+  site_domain VARCHAR2(255) NOT NULL,
+  site_data BLOB NOT NULL,
+  site_forward NUMBER(1) NOT NULL,
+  site_config BLOB NOT NULL
+);
+ALTER TABLE &mw_prefix.sites ADD CONSTRAINT &mw_prefix.sites_pk PRIMARY KEY (site_id);
+CREATE UNIQUE INDEX &mw_prefix.sites_u01 ON &mw_prefix.sites (site_global_key);
+CREATE INDEX &mw_prefix.sites_i01 ON &mw_prefix.sites (site_type);
+CREATE INDEX &mw_prefix.sites_i02 ON &mw_prefix.sites (site_group);
+CREATE INDEX &mw_prefix.sites_i03 ON &mw_prefix.sites (site_source);
+CREATE INDEX &mw_prefix.sites_i04 ON &mw_prefix.sites (site_language);
+CREATE INDEX &mw_prefix.sites_i05 ON &mw_prefix.sites (site_protocol);
+CREATE INDEX &mw_prefix.sites_i06 ON &mw_prefix.sites (site_domain);
+CREATE INDEX &mw_prefix.sites_i07 ON &mw_prefix.sites (site_forward);
+
+CREATE TABLE &mw_prefix.site_identifiers (
+  si_site NUMBER NOT NULL,
+  si_type VARCHAR2(32) NOT NULL,
+  si_key VARCHAR2(32) NOT NULL
+);
+CREATE UNIQUE INDEX &mw_prefix.site_identifiers_u01 ON &mw_prefix.sites (si_type, si_key);
+CREATE INDEX &mw_prefix.site_identifiers_i01 ON &mw_prefix.site_identifiers (si_site);
+CREATE INDEX &mw_prefix.site_identifiers_i02 ON &mw_prefix.site_identifiers (si_key);
+
 -- do not prefix this table as it breaks parserTests
 CREATE TABLE wiki_field_info_full (
 table_name VARCHAR2(35) NOT NULL,
index 78f98f5..3b1a9b0 100644 (file)
@@ -87,7 +87,7 @@ class Orphans extends Maintenance {
                        FROM $revision LEFT OUTER JOIN $page ON rev_page=page_id
                        WHERE page_id IS NULL
                " );
-               $orphans = $dbw->numRows( $result );
+               $orphans = $result->numRows();
                if ( $orphans > 0 ) {
                        global $wgContLang;
                        $this->output( "$orphans orphan revisions...\n" );
@@ -139,7 +139,7 @@ class Orphans extends Maintenance {
                        FROM $page LEFT OUTER JOIN $revision ON page_latest=rev_id
                        WHERE rev_id IS NULL
                " );
-               $widows = $dbw->numRows( $result );
+               $widows = $result->numRows();
                if ( $widows > 0 ) {
                        $this->output( "$widows childless pages...\n" );
                        $this->output( sprintf( "%10s %11s %2s %s\n", 'page_id', 'page_latest', 'ns', 'page_title' ) );
index 059b6fe..fa9d512 100644 (file)
@@ -83,4 +83,3 @@ class PopulateLogUsertext extends LoggedUpdateMaintenance {
 
 $maintClass = "PopulateLogUsertext";
 require_once( RUN_MAINTENANCE_IF_MAIN );
-
diff --git a/maintenance/postgres/archives/patch-sites.sql b/maintenance/postgres/archives/patch-sites.sql
new file mode 100644 (file)
index 0000000..a4f9ed9
--- /dev/null
@@ -0,0 +1,31 @@
+CREATE SEQUENCE sites_site_id_seq;
+CREATE TABLE sites (
+  site_id           INTEGER     NOT NULL    PRIMARY KEY DEFAULT nextval('sites_site_id_seq'),
+  site_global_key   TEXT        NOT NULL,
+  site_type         TEXT        NOT NULL,
+  site_group        TEXT        NOT NULL,
+  site_source       TEXT        NOT NULL,
+  site_language     TEXT        NOT NULL,
+  site_protocol     TEXT        NOT NULL,
+  site_domain       TEXT        NOT NULL,
+  site_data         TEXT        NOT NULL,
+  site_forward      SMALLINT    NOT NULL,
+  site_config       TEXT        NOT NULL
+);
+CREATE UNIQUE INDEX site_global_key ON sites (site_global_key);
+CREATE INDEX site_type ON sites (site_type);
+CREATE INDEX site_group ON sites (site_group);
+CREATE INDEX site_source ON sites (site_source);
+CREATE INDEX site_language ON sites (site_language);
+CREATE INDEX site_protocol ON sites (site_protocol);
+CREATE INDEX site_domain ON sites (site_domain);
+CREATE INDEX site_forward ON sites (site_forward);
+
+CREATE TABLE site_identifiers (
+  si_site   INTEGER NOT NULL,
+  si_type   TEXT    NOT NULL,
+  si_key    TEXT    NOT NULL
+);
+CREATE UNIQUE INDEX si_type_key ON site_identifiers (si_type, si_key);
+CREATE INDEX si_site ON site_identifiers (si_site);
+CREATE INDEX si_key ON site_identifiers (si_key);
index 845193d..cb3df8d 100644 (file)
@@ -530,12 +530,14 @@ CREATE TABLE job (
   job_timestamp       TIMESTAMPTZ,
   job_params          TEXT      NOT NULL,
   job_random          INTEGER   NOT NULL DEFAULT 0,
+  job_attempts        INTEGER   NOT NULL DEFAULT 0,
   job_token           TEXT      NOT NULL DEFAULT '',
   job_token_timestamp TIMESTAMPTZ,
   job_sha1            TEXT NOT NULL DEFAULT ''
 );
 CREATE INDEX job_sha1 ON job (job_sha1);
 CREATE INDEX job_cmd_token ON job (job_cmd, job_token, job_random);
+CREATE INDEX job_cmd_token_id ON job (job_cmd, job_token, job_id);
 CREATE INDEX job_cmd_namespace_title ON job (job_cmd, job_namespace, job_title);
 CREATE INDEX job_timestamp_idx ON job (job_timestamp);
 
@@ -697,3 +699,35 @@ CREATE TABLE module_deps (
   md_deps    TEXT  NOT NULL
 );
 CREATE UNIQUE INDEX md_module_skin ON module_deps (md_module, md_skin);
+
+CREATE SEQUENCE sites_site_id_seq;
+CREATE TABLE sites (
+  site_id           INTEGER     NOT NULL    PRIMARY KEY DEFAULT nextval('sites_site_id_seq'),
+  site_global_key   TEXT        NOT NULL,
+  site_type         TEXT        NOT NULL,
+  site_group        TEXT        NOT NULL,
+  site_source       TEXT        NOT NULL,
+  site_language     TEXT        NOT NULL,
+  site_protocol     TEXT        NOT NULL,
+  site_domain       TEXT        NOT NULL,
+  site_data         TEXT        NOT NULL,
+  site_forward      SMALLINT    NOT NULL,
+  site_config       TEXT        NOT NULL
+);
+CREATE UNIQUE INDEX site_global_key ON sites (site_global_key);
+CREATE INDEX site_type ON sites (site_type);
+CREATE INDEX site_group ON sites (site_group);
+CREATE INDEX site_source ON sites (site_source);
+CREATE INDEX site_language ON sites (site_language);
+CREATE INDEX site_protocol ON sites (site_protocol);
+CREATE INDEX site_domain ON sites (site_domain);
+CREATE INDEX site_forward ON sites (site_forward);
+
+CREATE TABLE site_identifiers (
+  si_site   INTEGER NOT NULL,
+  si_type   TEXT    NOT NULL,
+  si_key    TEXT    NOT NULL
+);
+CREATE UNIQUE INDEX si_type_key ON site_identifiers (si_type, si_key);
+CREATE INDEX si_site ON site_identifiers (si_site);
+CREATE INDEX si_key ON site_identifiers (si_key);
index 87fc997..bb3d68b 100644 (file)
@@ -95,4 +95,3 @@ class PreprocessDump extends DumpIterator {
 
 $maintClass = "PreprocessDump";
 require_once( RUN_MAINTENANCE_IF_MAIN );
-
index 10892c4..2ccf703 100644 (file)
@@ -21,7 +21,7 @@
  * @ingroup Maintenance
  */
 
-if( php_sapi_name() != 'cli' ) {
+if( PHP_SAPI != 'cli' ) {
        die( 1 );
 }
 
index 4b3c382..58fe880 100644 (file)
@@ -86,7 +86,7 @@ class PurgeList extends Maintenance {
                );
 
                $start   = 0;
-               $end = $dbr->numRows( $result );
+               $end = $result->numRows();
                $this->output( "Will purge $end pages from namespace $ns\n" );
 
                # Do remaining chunk
index a91abf9..2d79f36 100644 (file)
@@ -180,4 +180,3 @@ class ReassignEdits extends Maintenance {
 
 $maintClass = "ReassignEdits";
 require_once( RUN_MAINTENANCE_IF_MAIN );
-
index 83849de..db77564 100644 (file)
@@ -53,6 +53,15 @@ class RebuildLocalisationCache extends Maintenance {
                return '1000M';
        }
 
+       public function finalSetup() {
+               # This script needs to be run to build the inital l10n cache. But if
+               # $wgLanguageCode is not 'en', it won't be able to run because there is
+               # no l10n cache. Break the cycle by forcing $wgLanguageCode = 'en'.
+               global $wgLanguageCode;
+               $wgLanguageCode = 'en';
+               return parent::finalSetup();
+       }
+
        public function execute() {
                global $wgLocalisationCacheConf;
 
index 41b245f..534b7ca 100644 (file)
@@ -92,22 +92,37 @@ class RebuildTextIndex extends Maintenance {
                $this->output( "Rebuilding index fields for {$count} pages...\n" );
                $n = 0;
 
+               $fields = array_merge(
+                       Revision::selectPageFields(),
+                       Revision::selectFields(),
+                       Revision::selectTextFields()
+               );
+
                while ( $n < $count ) {
                        if ( $n ) {
                                $this->output( $n . "\n" );
                        }
                        $end = $n + self::RTI_CHUNK_SIZE - 1;
 
-                       $res = $this->db->select( array( 'page', 'revision', 'text' ),
-                               array( 'page_id', 'page_namespace', 'page_title', 'old_flags', 'old_text' ),
+                       $res = $this->db->select( array( 'page', 'revision', 'text' ), $fields,
                                array( "page_id BETWEEN $n AND $end", 'page_latest = rev_id', 'rev_text_id = old_id' ),
                                __METHOD__
-                               );
+                       );
 
                        foreach ( $res as $s ) {
-                               $revtext = Revision::getRevisionText( $s );
-                               $u = new SearchUpdate( $s->page_id, $s->page_title, $revtext );
-                               $u->doUpdate();
+                               try {
+                                       $title = Title::makeTitle( $s->page_namespace, $s->page_title );
+
+                                       $rev = new Revision( $s );
+                                       $content = $rev->getContent();
+                                       $text = $content->getTextForSearchIndex();
+
+                                       $u = new SearchUpdate( $s->page_id, $title, $text );
+                                       $u->doUpdate();
+                               } catch ( MWContentSerializationException $ex ) {
+                                       $this->output( "Failed to deserialize content of revision {$s->rev_id} of page "
+                                               . "`" . $title->getPrefixedDBkey() . "`!\n" );
+                               }
                        }
                        $n += self::RTI_CHUNK_SIZE;
                }
index 9ba8682..7b25566 100644 (file)
@@ -105,7 +105,7 @@ class RefreshLinks extends Maintenance {
                                array(),
                                array( 'redirect' => array( "LEFT JOIN", "page_id=rd_from" ) )
                        );
-                       $num = $dbr->numRows( $res );
+                       $num = $res->numRows();
                        $this->output( "Refreshing $num old redirects from $start...\n" );
 
                        $i = 0;
@@ -126,7 +126,7 @@ class RefreshLinks extends Maintenance {
                                        "page_id >= $start" ),
                                __METHOD__
                        );
-                       $num = $dbr->numRows( $res );
+                       $num = $res->numRows();
                        $this->output( "$num new articles...\n" );
 
                        $i = 0;
@@ -176,8 +176,16 @@ class RefreshLinks extends Maintenance {
        }
 
        /**
-        * Update the redirect entry for a given page
-        * @param $id int The page_id of the redirect
+        * Update the redirect entry for a given page.
+        *
+        * This methods bypasses the "redirect" table to get the redirect target,
+        * and parses the page's content to fetch it. This allows to be sure that
+        * the redirect target is up to date and valid.
+        * This is particularly useful when modifying namespaces to be sure the
+        * entry in the "redirect" table points to the correct page and not to an
+        * invalid one.
+        *
+        * @param $id int The page ID to check
         */
        private function fixRedirect( $id ) {
                $page = WikiPage::newFromID( $id );
@@ -191,14 +199,25 @@ class RefreshLinks extends Maintenance {
                        return;
                }
 
-               $rt = $page->getRedirectTarget();
+               $rt = null;
+               $content = $page->getContent( Revision::RAW );
+               if ( $content !== null ) {
+                       $rt = $content->getUltimateRedirectTarget();
+               }
 
                if ( $rt === null ) {
                        // The page is not a redirect
                        // Delete any redirect table entry for it
-                       $dbw->delete( 'redirect', array( 'rd_from' => $id ),
-                               __METHOD__ );
+                       $dbw->delete( 'redirect', array( 'rd_from' => $id ), __METHOD__ );
+                       $fieldValue = 0;
+               } else {
+                       $page->insertRedirectEntry( $rt );
+                       $fieldValue = 1;
                }
+
+               // Update the page table to be sure it is an a consistent state
+               $dbw->update( 'page', array( 'page_is_redirect' => $fieldValue ),
+                       array( 'page_id' => $id ), __METHOD__ );
        }
 
        /**
@@ -215,7 +234,7 @@ class RefreshLinks extends Maintenance {
                }
 
                $content = $page->getContent( Revision::RAW );
-               if ( null === false ) {
+               if ( $content === null ) {
                        return;
                }
 
index 8bc27c1..b4528ca 100644 (file)
@@ -77,6 +77,8 @@ class RemoveUnusedAccounts extends Maintenance {
                        $this->output( "\nDeleting inactive accounts..." );
                        $dbw = wfGetDB( DB_MASTER );
                        $dbw->delete( 'user', array( 'user_id' => $del ), __METHOD__ );
+                       $dbw->delete( 'logging', array( 'log_user' => $del ), __METHOD__ );
+                       $dbw->delete( 'recentchanges', array( 'rc_user' => $del ), __METHOD__ );
                        $this->output( "done.\n" );
                        # Update the site_stats.ss_users field
                        $users = $dbw->selectField( 'user', 'COUNT(*)', array(), __METHOD__ );
@@ -97,8 +99,13 @@ class RemoveUnusedAccounts extends Maintenance {
         */
        private function isInactiveAccount( $id, $master = false ) {
                $dbo = wfGetDB( $master ? DB_MASTER : DB_SLAVE );
-               $checks = array( 'revision' => 'rev', 'archive' => 'ar', 'logging' => 'log',
-                                                'image' => 'img', 'oldimage' => 'oi', 'filearchive' => 'fa' );
+               $checks = array(
+                       'revision' => 'rev',
+                       'archive' => 'ar',
+                       'image' => 'img',
+                       'oldimage' => 'oi',
+                       'filearchive' => 'fa'
+               );
                $count = 0;
 
                $dbo->begin( __METHOD__ );
@@ -106,6 +113,10 @@ class RemoveUnusedAccounts extends Maintenance {
                        $conds = array( $fprefix . '_user' => $id );
                        $count += (int)$dbo->selectField( $table, 'COUNT(*)', $conds, __METHOD__ );
                }
+
+               $conds = array( 'log_user' => $id, 'log_type != ' . $dbo->addQuotes( 'newusers' ) );
+               $count += (int)$dbo->selectField( 'logging', 'COUNT(*)', $conds, __METHOD__ );
+
                $dbo->commit( __METHOD__ );
 
                return $count == 0;
index f06e6b0..0cf0217 100644 (file)
@@ -53,6 +53,10 @@ class RunJobs extends Maintenance {
        public function execute() {
                global $wgTitle;
 
+               if ( wfReadOnly() ) {
+                       $this->error( "Unable to run jobs; the wiki is in read-only mode.", 1 ); // die
+               }
+
                if ( $this->hasOption( 'procs' ) ) {
                        $procs = intval( $this->getOption( 'procs' ) );
                        if ( $procs < 1 || $procs > 1000 ) {
@@ -74,14 +78,16 @@ class RunJobs extends Maintenance {
                $group = JobQueueGroup::singleton();
                do {
                        $job = ( $type === false )
-                               ? $group->pop() // job from any queue
+                               ? $group->pop( JobQueueGroup::TYPE_DEFAULT, JobQueueGroup::USE_CACHE )
                                : $group->get( $type )->pop(); // job from a single queue
                        if ( $job ) { // found a job
                                // Perform the job (logging success/failure and runtime)...
                                $t = microtime( true );
                                $this->runJobsLog( $job->toString() . " STARTING" );
                                $status = $job->run();
-                               $group->ack( $job ); // done
+                               if ( $status ) {
+                                       $group->ack( $job ); // done
+                               }
                                $t = microtime( true ) - $t;
                                $timeMs = intval( $t * 1000 );
                                if ( !$status ) {
@@ -97,7 +103,7 @@ class RunJobs extends Maintenance {
                                        break;
                                }
                                // Don't let any slaves/backups fall behind...
-                               $group->get( $type )->waitForBackups();
+                               $group->get( $job->getType() )->waitForBackups();
                        }
                } while ( $job ); // stop when there are no jobs
        }
index 1dceb79..8b49517 100644 (file)
@@ -39,21 +39,24 @@ class ShowJobs extends Maintenance {
                $this->mDescription = "Show number of jobs waiting in master database";
                $this->addOption( 'group', 'Show number of jobs per job type' );
        }
+
        public function execute() {
-               $dbw = wfGetDB( DB_MASTER );
+               $group = JobQueueGroup::singleton();
                if ( $this->hasOption( 'group' ) ) {
-                       $res = $dbw->select(
-                               'job',
-                               array( 'job_cmd', 'count(*) as count' ),
-                               array(),
-                               __METHOD__,
-                               array( 'GROUP BY' => 'job_cmd' )
-                       );
-                       foreach ( $res as $row ) {
-                               $this->output( $row->job_cmd . ': ' . $row->count . "\n" );
+                       foreach ( $group->getQueueTypes() as $type ) {
+                               $queue   = $group->get( $type );
+                               $pending = $queue->getSize();
+                               $claimed = $queue->getAcquiredCount();
+                               if ( ( $pending + $claimed ) > 0 ) {
+                                       $this->output( "{$type}: $pending queued; $claimed acquired\n" );
+                               }
                        }
                } else {
-                       $this->output( $dbw->selectField( 'job', 'count(*)', '', __METHOD__ ) . "\n" );
+                       $count = 0;
+                       foreach ( $group->getQueueTypes() as $type ) {
+                               $count += $group->get( $type )->getSize();
+                       }
+                       $this->output( "$count\n" );
                }
        }
 }
index 982c7cb..657c056 100644 (file)
@@ -71,4 +71,3 @@ class ShowStats extends Maintenance {
 
 $maintClass = "ShowStats";
 require_once( RUN_MAINTENANCE_IF_MAIN );
-
diff --git a/maintenance/sqlite/archives/patch-ufg_group-length-increase-255.sql b/maintenance/sqlite/archives/patch-ufg_group-length-increase-255.sql
new file mode 100644 (file)
index 0000000..edd0a3d
--- /dev/null
@@ -0,0 +1,15 @@
+ CREATE TABLE /*_*/user_former_groups_tmp (
+  ufg_user int unsigned NOT NULL default 0,
+  ufg_group varbinary(255) NOT NULL default ''
+) /*$wgDBTableOptions*/;
+
+INSERT INTO /*_*/user_former_groups_tmp
+       SELECT ufg_user, ufg_group
+               FROM /*_*/user_former_groups;
+
+DROP TABLE /*_*/user_former_groups;
+
+ALTER TABLE /*_*/user_former_groups_tmp RENAME TO /*_*/user_former_groups;
+
+CREATE UNIQUE INDEX /*i*/ufg_user_group ON /*_*/user_former_groups (ufg_user,ufg_group);
+
diff --git a/maintenance/sqlite/archives/patch-ufg_group-length-increase.sql b/maintenance/sqlite/archives/patch-ufg_group-length-increase.sql
deleted file mode 100644 (file)
index c6dcea5..0000000
+++ /dev/null
@@ -1,15 +0,0 @@
-CREATE TABLE /*_*/user_former_groups_tmp (
-  ug_user int unsigned NOT NULL default 0,
-  ug_group varbinary(32) NOT NULL default ''
-) /*$wgDBTableOptions*/;
-
-INSERT INTO /*_*/user_former_groups_tmp
-       SELECT ug_user, ug_group
-               FROM /*_*/user_groups;
-
-DROP TABLE /*_*/user_former_groups;
-
-ALTER TABLE /*_*/user_former_groups_tmp RENAME TO /*_*/user_former_groups;
-
-CREATE UNIQUE INDEX /*i*/ufg_user_group ON /*_*/user_former_groups (ufg_user,ufg_group);
-
diff --git a/maintenance/sqlite/archives/patch-ug_group-length-increase-255.sql b/maintenance/sqlite/archives/patch-ug_group-length-increase-255.sql
new file mode 100644 (file)
index 0000000..3daeb7c
--- /dev/null
@@ -0,0 +1,15 @@
+CREATE TABLE /*_*/user_groups_tmp (
+  ug_user int unsigned NOT NULL default 0,
+  ug_group varbinary(255) NOT NULL default ''
+) /*$wgDBTableOptions*/;
+
+INSERT INTO /*_*/user_groups_tmp
+       SELECT ug_user, ug_group
+               FROM /*_*/user_groups;
+
+DROP TABLE /*_*/user_groups;
+
+ALTER TABLE /*_*/user_groups_tmp RENAME TO /*_*/user_groups;
+
+CREATE UNIQUE INDEX /*i*/ug_user_group ON /*_*/user_groups (ug_user,ug_group);
+CREATE INDEX /*i*/ug_group ON /*_*/user_groups (ug_group);
diff --git a/maintenance/sqlite/archives/patch-ug_group-length-increase.sql b/maintenance/sqlite/archives/patch-ug_group-length-increase.sql
deleted file mode 100644 (file)
index 5e81093..0000000
+++ /dev/null
@@ -1,15 +0,0 @@
-CREATE TABLE /*_*/user_groups_tmp (
-  ug_user int unsigned NOT NULL default 0,
-  ug_group varbinary(32) NOT NULL default ''
-) /*$wgDBTableOptions*/;
-
-INSERT INTO /*_*/user_groups_tmp
-       SELECT ug_user, ug_group
-               FROM /*_*/user_groups;
-
-DROP TABLE /*_*/user_groups;
-
-ALTER TABLE /*_*/user_groups_tmp RENAME TO /*_*/user_groups;
-
-CREATE UNIQUE INDEX /*i*/ug_user_group ON /*_*/user_groups (ug_user,ug_group);
-CREATE INDEX /*i*/ug_group ON /*_*/user_groups (ug_group);
index 951ab1a..d636283 100644 (file)
@@ -115,7 +115,7 @@ class CompressOld extends Maintenance {
                do {
                        $res = $dbw->select( 'text', array( 'old_id','old_flags','old_text' ),
                                "old_id>=$start", __METHOD__, array( 'ORDER BY' => 'old_id', 'LIMIT' => $chunksize, 'FOR UPDATE' ) );
-                       if( $dbw->numRows( $res ) == 0 ) {
+                       if( $res->numRows() == 0 ) {
                                break;
                        }
                        $last = $start;
@@ -256,7 +256,7 @@ class CompressOld extends Maintenance {
                        $pageRes = $dbr->select( 'page',
                                array('page_id', 'page_namespace', 'page_title','page_latest'),
                                $pageConds + array('page_id' => $pageId), __METHOD__ );
-                       if ( $dbr->numRows( $pageRes ) == 0 ) {
+                       if ( $pageRes->numRows() == 0 ) {
                                continue;
                        }
                        $pageRow = $dbr->fetchObject( $pageRes );
index d394558..30cbcf1 100644 (file)
@@ -349,4 +349,3 @@ class FixBug20757 extends Maintenance {
 
 $maintClass = 'FixBug20757';
 require_once( RUN_MAINTENANCE_IF_MAIN );
-
index e4a2a45..1049e0c 100644 (file)
@@ -124,5 +124,3 @@ function moveToExternal( $cluster, $maxID, $minID = 1 ) {
                }
        }
 }
-
-
index fe62ddf..5e5cc8f 100644 (file)
@@ -809,4 +809,3 @@ class CgzCopyTransaction {
                }
        }
 }
-
index 0f5cd2b..414eab8 100644 (file)
@@ -110,4 +110,3 @@ function resolveStub( $id, $stubText, $flags ) {
                ), $fname
        );
 }
-
index 1afecc4..3187c31 100644 (file)
@@ -113,4 +113,3 @@ SQL;
 
 $maintClass = 'StorageTypeStats';
 require_once( RUN_MAINTENANCE_IF_MAIN );
-
index 9487bbf..e13e1b1 100644 (file)
@@ -99,4 +99,3 @@ foreach ( $keys as $id => $key ) {
 }
 $t += microtime( true );
 printf( "Decompression time: %5.2f ms\n", $t * 1000 );
-
index c9a188b..14d7422 100644 (file)
@@ -152,7 +152,7 @@ CREATE TABLE /*_*/user_groups (
   -- with particular permissions. A user will have the combined
   -- permissions of any group they're explicitly in, plus
   -- the implicit '*' and 'user' groups.
-  ug_group varbinary(32) NOT NULL default ''
+  ug_group varbinary(255) NOT NULL default ''
 ) /*$wgDBTableOptions*/;
 
 CREATE UNIQUE INDEX /*i*/ug_user_group ON /*_*/user_groups (ug_user,ug_group);
@@ -164,7 +164,7 @@ CREATE INDEX /*i*/ug_group ON /*_*/user_groups (ug_group);
 CREATE TABLE /*_*/user_former_groups (
   -- Key to user_id
   ufg_user int unsigned NOT NULL default 0,
-  ufg_group varbinary(32) NOT NULL default ''
+  ufg_group varbinary(255) NOT NULL default ''
 ) /*$wgDBTableOptions*/;
 
 CREATE UNIQUE INDEX /*i*/ufg_user_group ON /*_*/user_former_groups (ufg_user,ufg_group);
index 1cb97f9..c52f07c 100644 (file)
@@ -70,4 +70,3 @@ class DummyTermColorer {
                return '';
        }
 }
-
diff --git a/maintenance/upgrade1_5.php b/maintenance/upgrade1_5.php
deleted file mode 100644 (file)
index 1e268de..0000000
+++ /dev/null
@@ -1,1337 +0,0 @@
-<?php
-/**
- * Alternate 1.4 -> 1.5 schema upgrade.
- * This does only the main tables + UTF-8 and is designed to allow upgrades to
- * interleave with other updates on the replication stream so that large wikis
- * can be upgraded without disrupting other services.
- *
- * Note: this script DOES NOT apply every update, nor will it probably handle
- * much older versions, etc.
- * Run this, FOLLOWED BY update.php, for upgrading from 1.4.5 release to 1.5.
- *
- * 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
- */
-
-require_once( __DIR__ . '/Maintenance.php' );
-
-define( 'MW_UPGRADE_COPY',     false );
-define( 'MW_UPGRADE_ENCODE',   true  );
-define( 'MW_UPGRADE_NULL',     null  );
-define( 'MW_UPGRADE_CALLBACK', null  ); // for self-documentation only
-
-/**
- * @ingroup Maintenance
- */
-class FiveUpgrade extends Maintenance {
-
-       /**
-        * @var DatabaseBase
-        */
-       protected $db;
-
-       function __construct() {
-               parent::__construct();
-
-               $this->mDescription = 'Script for upgrades from 1.4 to 1.5 (NOT 1.15) in very special cases.';
-
-               $this->addOption( 'upgrade', 'Really run the script' );
-               $this->addOption( 'noimage', '' );
-               $this->addOption( 'step', 'Only do a specific step', false, true );
-       }
-
-       public function getDbType() {
-               return Maintenance::DB_ADMIN;
-       }
-
-       public function execute() {
-               $this->output( "ATTENTION: This script is for upgrades from 1.4 to 1.5 (NOT 1.15) in very special cases.\n" );
-               $this->output( "Use update.php for usual updates.\n" );
-
-               if ( !$this->hasOption( 'upgrade' ) ) {
-                       $this->output( "Please run this script with --upgrade key to actually run the updater.\n" );
-                       return;
-               }
-
-               $this->setMembers();
-
-               $tables = array(
-                       'page',
-                       'links',
-                       'user',
-                       'image',
-                       'oldimage',
-                       'watchlist',
-                       'logging',
-                       'archive',
-                       'imagelinks',
-                       'categorylinks',
-                       'ipblocks',
-                       'recentchanges',
-                       'querycache'
-               );
-
-               foreach ( $tables as $table ) {
-                       if ( $this->doing( $table ) ) {
-                               $method = 'upgrade' . ucfirst( $table );
-                               $this->$method();
-                       }
-               }
-
-               if ( $this->doing( 'cleanup' ) ) {
-                       $this->upgradeCleanup();
-               }
-       }
-
-       protected function setMembers() {
-               $this->conversionTables = $this->prepareWindows1252();
-
-               $this->loadBalancers = array();
-               $this->dbw = wfGetDB( DB_MASTER );
-               $this->dbr = $this->streamConnection();
-
-               $this->cleanupSwaps = array();
-               $this->emailAuth = false; # don't preauthenticate emails
-               $this->step      = $this->getOption( 'step', null );
-       }
-
-       function doing( $step ) {
-               return is_null( $this->step ) || $step == $this->step;
-       }
-
-       /**
-        * Open a connection to the master server with the admin rights.
-        * @return DatabaseBase
-        * @access private
-        */
-       function newConnection() {
-               $lb = wfGetLBFactory()->newMainLB();
-               $db = $lb->getConnection( DB_MASTER );
-
-               $this->loadBalancers[] = $lb;
-               return $db;
-       }
-
-       /**
-        * Commit transactions and close the connections when we're done...
-        */
-       function close() {
-               foreach ( $this->loadBalancers as $lb ) {
-                       $lb->commitMasterChanges();
-                       $lb->closeAll();
-               }
-       }
-
-       /**
-        * Open a second connection to the master server, with buffering off.
-        * This will let us stream large datasets in and write in chunks on the
-        * other end.
-        * @return DatabaseBase
-        * @access private
-        */
-       function streamConnection() {
-               $timeout = 3600 * 24;
-               $db = $this->newConnection();
-               $db->bufferResults( false );
-               if ( $db->getType() == 'mysql' ) {
-                       $db->query( "SET net_read_timeout=$timeout" );
-                       $db->query( "SET net_write_timeout=$timeout" );
-               }
-               return $db;
-       }
-
-       /**
-        * Prepare a conversion array for converting Windows Code Page 1252 to
-        * UTF-8. This should provide proper conversion of text that was miscoded
-        * as Windows-1252 by naughty user-agents, and doesn't rely on an outside
-        * iconv library.
-        *
-        * @return array
-        * @access private
-        */
-       function prepareWindows1252() {
-               # Mappings from:
-               # http://www.unicode.org/Public/MAPPINGS/VENDORS/MICSFT/WINDOWS/CP1252.TXT
-               static $cp1252 = array(
-                       0x80 => 0x20AC, # EURO SIGN
-                       0x81 => 0xFFFD, # REPLACEMENT CHARACTER (no mapping)
-                       0x82 => 0x201A, # SINGLE LOW-9 QUOTATION MARK
-                       0x83 => 0x0192, # LATIN SMALL LETTER F WITH HOOK
-                       0x84 => 0x201E, # DOUBLE LOW-9 QUOTATION MARK
-                       0x85 => 0x2026, # HORIZONTAL ELLIPSIS
-                       0x86 => 0x2020, # DAGGER
-                       0x87 => 0x2021, # DOUBLE DAGGER
-                       0x88 => 0x02C6, # MODIFIER LETTER CIRCUMFLEX ACCENT
-                       0x89 => 0x2030, # PER MILLE SIGN
-                       0x8A => 0x0160, # LATIN CAPITAL LETTER S WITH CARON
-                       0x8B => 0x2039, # SINGLE LEFT-POINTING ANGLE QUOTATION MARK
-                       0x8C => 0x0152, # LATIN CAPITAL LIGATURE OE
-                       0x8D => 0xFFFD, # REPLACEMENT CHARACTER (no mapping)
-                       0x8E => 0x017D, # LATIN CAPITAL LETTER Z WITH CARON
-                       0x8F => 0xFFFD, # REPLACEMENT CHARACTER (no mapping)
-                       0x90 => 0xFFFD, # REPLACEMENT CHARACTER (no mapping)
-                       0x91 => 0x2018, # LEFT SINGLE QUOTATION MARK
-                       0x92 => 0x2019, # RIGHT SINGLE QUOTATION MARK
-                       0x93 => 0x201C, # LEFT DOUBLE QUOTATION MARK
-                       0x94 => 0x201D, # RIGHT DOUBLE QUOTATION MARK
-                       0x95 => 0x2022, # BULLET
-                       0x96 => 0x2013, # EN DASH
-                       0x97 => 0x2014, # EM DASH
-                       0x98 => 0x02DC, # SMALL TILDE
-                       0x99 => 0x2122, # TRADE MARK SIGN
-                       0x9A => 0x0161, # LATIN SMALL LETTER S WITH CARON
-                       0x9B => 0x203A, # SINGLE RIGHT-POINTING ANGLE QUOTATION MARK
-                       0x9C => 0x0153, # LATIN SMALL LIGATURE OE
-                       0x9D => 0xFFFD, # REPLACEMENT CHARACTER (no mapping)
-                       0x9E => 0x017E, # LATIN SMALL LETTER Z WITH CARON
-                       0x9F => 0x0178, # LATIN CAPITAL LETTER Y WITH DIAERESIS
-                       );
-               $pairs = array();
-               for ( $i = 0; $i < 0x100; $i++ ) {
-                       $unicode = isset( $cp1252[$i] ) ? $cp1252[$i] : $i;
-                       $pairs[chr( $i )] = codepointToUtf8( $unicode );
-               }
-               return $pairs;
-       }
-
-       /**
-        * Convert from 8-bit Windows-1252 to UTF-8 if necessary.
-        * @param string $text
-        * @return string
-        * @access private
-        */
-       function conv( $text ) {
-               global $wgUseLatin1;
-               return is_null( $text )
-                       ? null
-                       : ( $wgUseLatin1
-                               ? strtr( $text, $this->conversionTables )
-                               : $text );
-       }
-
-       /**
-        * Dump timestamp and message to output
-        * @param $message String
-        * @access private
-        */
-       function log( $message ) {
-               $this->output( wfWikiID() . ' ' . wfTimestamp( TS_DB ) . ': ' . $message . "\n" );
-       }
-
-       /**
-        * Initialize the chunked-insert system.
-        * Rows will be inserted in chunks of the given number, rather
-        * than in a giant INSERT...SELECT query, to keep the serialized
-        * MySQL database replication from getting hung up. This way other
-        * things can be going on during conversion without waiting for
-        * slaves to catch up as badly.
-        *
-        * @param int $chunksize Number of rows to insert at once
-        * @param int $final Total expected number of rows / id of last row,
-        *                   used for progress reports.
-        * @param string $table to insert on
-        * @param string $fname function name to report in SQL
-        * @access private
-        */
-       function setChunkScale( $chunksize, $final, $table, $fname ) {
-               $this->chunkSize  = $chunksize;
-               $this->chunkFinal = $final;
-               $this->chunkCount = 0;
-               $this->chunkStartTime = microtime( true );
-               $this->chunkOptions = array( 'IGNORE' );
-               $this->chunkTable = $table;
-               $this->chunkFunction = $fname;
-       }
-
-       /**
-        * Chunked inserts: perform an insert if we've reached the chunk limit.
-        * Prints a progress report with estimated completion time.
-        * @param array &$chunk -- This will be emptied if an insert is done.
-        * @param int $key A key identifier to use in progress estimation in
-        *                 place of the number of rows inserted. Use this if
-        *                 you provided a max key number instead of a count
-        *                 as the final chunk number in setChunkScale()
-        * @access private
-        */
-       function addChunk( &$chunk, $key = null ) {
-               if ( count( $chunk ) >= $this->chunkSize ) {
-                       $this->insertChunk( $chunk );
-
-                       $this->chunkCount += count( $chunk );
-                       $now = microtime( true );
-                       $delta = $now - $this->chunkStartTime;
-                       $rate = $this->chunkCount / $delta;
-
-                       if ( is_null( $key ) ) {
-                               $completed = $this->chunkCount;
-                       } else {
-                               $completed = $key;
-                       }
-                       $portion = $completed / $this->chunkFinal;
-
-                       $estimatedTotalTime = $delta / $portion;
-                       $eta = $this->chunkStartTime + $estimatedTotalTime;
-
-                       printf( "%s: %6.2f%% done on %s; ETA %s [%d/%d] %.2f/sec\n",
-                               wfTimestamp( TS_DB, intval( $now ) ),
-                               $portion * 100.0,
-                               $this->chunkTable,
-                               wfTimestamp( TS_DB, intval( $eta ) ),
-                               $completed,
-                               $this->chunkFinal,
-                               $rate );
-                       flush();
-
-                       $chunk = array();
-               }
-       }
-
-       /**
-        * Chunked inserts: perform an insert unconditionally, at the end, and log.
-        * @param array &$chunk -- This will be emptied if an insert is done.
-        * @access private
-        */
-       function lastChunk( &$chunk ) {
-               $n = count( $chunk );
-               if ( $n > 0 ) {
-                       $this->insertChunk( $chunk );
-               }
-               $this->log( "100.00% done on $this->chunkTable (last chunk $n rows)." );
-       }
-
-       /**
-        * Chunked inserts: perform an insert.
-        * @param array &$chunk -- This will be emptied if an insert is done.
-        * @access private
-        */
-       function insertChunk( &$chunk ) {
-               // Give slaves a chance to catch up
-               wfWaitForSlaves();
-               $this->dbw->insert( $this->chunkTable, $chunk, $this->chunkFunction, $this->chunkOptions );
-       }
-
-       /**
-        * Helper function for copyTable array_filter
-        * @param $x
-        * @return bool
-        */
-       static private function notUpgradeNull( $x ) {
-               return $x !== MW_UPGRADE_NULL;
-       }
-
-       /**
-        * Copy and transcode a table to table_temp.
-        * @param string $name Base name of the source table
-        * @param string $tabledef CREATE TABLE definition, w/ $1 for the name
-        * @param array $fields set of destination fields to these constants:
-        *              MW_UPGRADE_COPY   - straight copy
-        *              MW_UPGRADE_ENCODE - for old Latin1 wikis, conv to UTF-8
-        *              MW_UPGRADE_NULL   - just put NULL
-        * @param $callback callback An optional callback to modify the data
-        *                           or perform other processing. Func should be
-        *                           ( object $row, array $copy ) and return $copy
-        * @access private
-        */
-       function copyTable( $name, $tabledef, $fields, $callback = null ) {
-               $name_temp = $name . '_temp';
-               $this->log( "Migrating $name table to $name_temp..." );
-
-               $table_temp = $this->dbw->tableName( $name_temp );
-
-               // Create temporary table; we're going to copy everything in there,
-               // then at the end rename the final tables into place.
-               $def = str_replace( '$1', $table_temp, $tabledef );
-               $this->dbw->query( $def, __METHOD__ );
-
-               $numRecords = $this->dbw->selectField( $name, 'COUNT(*)', '', __METHOD__ );
-               $this->setChunkScale( 100, $numRecords, $name_temp, __METHOD__ );
-
-               // Pull all records from the second, streaming database connection.
-               $sourceFields = array_keys( array_filter( $fields, 'FiveUpgrade::notUpgradeNull' ) );
-               $result = $this->dbr->select( $name,
-                       $sourceFields,
-                       '',
-                       __METHOD__ );
-
-               $add = array();
-               foreach ( $result as $row ) {
-                       $copy = array();
-                       foreach ( $fields as $field => $source ) {
-                               if ( $source === MW_UPGRADE_COPY ) {
-                                       $copy[$field] = $row->$field;
-                               } elseif ( $source === MW_UPGRADE_ENCODE ) {
-                                       $copy[$field] = $this->conv( $row->$field );
-                               } elseif ( $source === MW_UPGRADE_NULL ) {
-                                       $copy[$field] = null;
-                               } else {
-                                       $this->log( "Unknown field copy type: $field => $source" );
-                               }
-                       }
-                       if ( is_callable( $callback ) ) {
-                               $copy = call_user_func( $callback, $row, $copy );
-                       }
-                       $add[] = $copy;
-                       $this->addChunk( $add );
-               }
-               $this->lastChunk( $add );
-
-               $this->log( "Done converting $name." );
-               $this->cleanupSwaps[] = $name;
-       }
-
-       function upgradePage() {
-               $chunksize = 100;
-
-               if ( $this->dbw->tableExists( 'page' ) ) {
-                       $this->error( 'Page table already exists.', true );
-               }
-
-               $this->log( "Checking cur table for unique title index and applying if necessary" );
-               $this->checkDupes();
-
-               $this->log( "...converting from cur/old to page/revision/text DB structure." );
-
-               list ( $cur, $old, $page, $revision, $text ) = $this->dbw->tableNamesN( 'cur', 'old', 'page', 'revision', 'text' );
-
-               $this->log( "Creating page and revision tables..." );
-               $this->dbw->query( "CREATE TABLE $page (
-                       page_id int(8) unsigned NOT NULL auto_increment,
-                       page_namespace int NOT NULL,
-                       page_title varchar(255) binary NOT NULL,
-                       page_restrictions tinyblob NOT NULL default '',
-                       page_counter bigint(20) unsigned NOT NULL default '0',
-                       page_is_redirect tinyint(1) unsigned NOT NULL default '0',
-                       page_is_new tinyint(1) unsigned NOT NULL default '0',
-                       page_random real unsigned NOT NULL,
-                       page_touched char(14) binary NOT NULL default '',
-                       page_latest int(8) unsigned NOT NULL,
-                       page_len int(8) unsigned NOT NULL,
-
-                       PRIMARY KEY page_id (page_id),
-                       UNIQUE INDEX name_title (page_namespace,page_title),
-                       INDEX (page_random),
-                       INDEX (page_len)
-                       ) TYPE=InnoDB", __METHOD__ );
-               $this->dbw->query( "CREATE TABLE $revision (
-                       rev_id int(8) unsigned NOT NULL auto_increment,
-                       rev_page int(8) unsigned NOT NULL,
-                       rev_text_id int(8) unsigned NOT NULL,
-                       rev_comment tinyblob NOT NULL default '',
-                       rev_user int(5) unsigned NOT NULL default '0',
-                       rev_user_text varchar(255) binary NOT NULL default '',
-                       rev_timestamp char(14) binary NOT NULL default '',
-                       rev_minor_edit tinyint(1) unsigned NOT NULL default '0',
-                       rev_deleted tinyint(1) unsigned NOT NULL default '0',
-
-                       PRIMARY KEY rev_page_id (rev_page, rev_id),
-                       UNIQUE INDEX rev_id (rev_id),
-                       INDEX rev_timestamp (rev_timestamp),
-                       INDEX page_timestamp (rev_page,rev_timestamp),
-                       INDEX user_timestamp (rev_user,rev_timestamp),
-                       INDEX usertext_timestamp (rev_user_text,rev_timestamp)
-                       ) TYPE=InnoDB", __METHOD__ );
-
-               $maxold = intval( $this->dbw->selectField( 'old', 'max(old_id)', '', __METHOD__ ) );
-               $this->log( "Last old record is {$maxold}" );
-
-               global $wgLegacySchemaConversion;
-               if ( $wgLegacySchemaConversion ) {
-                       // Create HistoryBlobCurStub entries.
-                       // Text will be pulled from the leftover 'cur' table at runtime.
-                       echo "......Moving metadata from cur; using blob references to text in cur table.\n";
-                       $cur_text = "concat('O:18:\"historyblobcurstub\":1:{s:6:\"mCurId\";i:',cur_id,';}')";
-                       $cur_flags = "'object'";
-               } else {
-                       // Copy all cur text in immediately: this may take longer but avoids
-                       // having to keep an extra table around.
-                       echo "......Moving text from cur.\n";
-                       $cur_text = 'cur_text';
-                       $cur_flags = "''";
-               }
-
-               $maxcur = $this->dbw->selectField( 'cur', 'max(cur_id)', '', __METHOD__ );
-               $this->log( "Last cur entry is $maxcur" );
-
-               /**
-                * Copy placeholder records for each page's current version into old
-                * Don't do any conversion here; text records are converted at runtime
-                * based on the flags (and may be originally binary!) while the meta
-                * fields will be converted in the old -> rev and cur -> page steps.
-                */
-               $this->setChunkScale( $chunksize, $maxcur, 'old', __METHOD__ );
-               $result = $this->dbr->query(
-                       "SELECT cur_id, cur_namespace, cur_title, $cur_text AS text, cur_comment,
-                       cur_user, cur_user_text, cur_timestamp, cur_minor_edit, $cur_flags AS flags
-                       FROM $cur
-                       ORDER BY cur_id", __METHOD__ );
-               $add = array();
-               foreach ( $result as $row ) {
-                       $add[] = array(
-                               'old_namespace'  => $row->cur_namespace,
-                               'old_title'      => $row->cur_title,
-                               'old_text'       => $row->text,
-                               'old_comment'    => $row->cur_comment,
-                               'old_user'       => $row->cur_user,
-                               'old_user_text'  => $row->cur_user_text,
-                               'old_timestamp'  => $row->cur_timestamp,
-                               'old_minor_edit' => $row->cur_minor_edit,
-                               'old_flags'      => $row->flags );
-                       $this->addChunk( $add, $row->cur_id );
-               }
-               $this->lastChunk( $add );
-
-               /**
-                * Copy revision metadata from old into revision.
-                * We'll also do UTF-8 conversion of usernames and comments.
-                */
-               # $newmaxold = $this->dbw->selectField( 'old', 'max(old_id)', '', __METHOD__ );
-               # $this->setChunkScale( $chunksize, $newmaxold, 'revision', __METHOD__ );
-               # $countold = $this->dbw->selectField( 'old', 'count(old_id)', '', __METHOD__ );
-               $countold = $this->dbw->selectField( 'old', 'max(old_id)', '', __METHOD__ );
-               $this->setChunkScale( $chunksize, $countold, 'revision', __METHOD__ );
-
-               $this->log( "......Setting up revision table." );
-               $result = $this->dbr->query(
-                       "SELECT old_id, cur_id, old_comment, old_user, old_user_text,
-                       old_timestamp, old_minor_edit
-                       FROM $old,$cur WHERE old_namespace=cur_namespace AND old_title=cur_title",
-                       __METHOD__ );
-
-               $add = array();
-               foreach ( $result as $row ) {
-                       $add[] = array(
-                               'rev_id'         =>              $row->old_id,
-                               'rev_page'       =>              $row->cur_id,
-                               'rev_text_id'    =>              $row->old_id,
-                               'rev_comment'    => $this->conv( $row->old_comment ),
-                               'rev_user'       =>              $row->old_user,
-                               'rev_user_text'  => $this->conv( $row->old_user_text ),
-                               'rev_timestamp'  =>              $row->old_timestamp,
-                               'rev_minor_edit' =>              $row->old_minor_edit );
-                       $this->addChunk( $add );
-               }
-               $this->lastChunk( $add );
-
-
-               /**
-                * Copy page metadata from cur into page.
-                * We'll also do UTF-8 conversion of titles.
-                */
-               $this->log( "......Setting up page table." );
-               $this->setChunkScale( $chunksize, $maxcur, 'page', __METHOD__ );
-               $result = $this->dbr->query( "
-                       SELECT cur_id, cur_namespace, cur_title, cur_restrictions, cur_counter, cur_is_redirect, cur_is_new,
-                                       cur_random, cur_touched, rev_id, LENGTH(cur_text) AS len
-                       FROM $cur,$revision
-                       WHERE cur_id=rev_page AND rev_timestamp=cur_timestamp AND rev_id > {$maxold}
-                       ORDER BY cur_id", __METHOD__ );
-               $add = array();
-               foreach ( $result as $row ) {
-                       $add[] = array(
-                               'page_id'           =>              $row->cur_id,
-                               'page_namespace'    =>              $row->cur_namespace,
-                               'page_title'        => $this->conv( $row->cur_title ),
-                               'page_restrictions' =>              $row->cur_restrictions,
-                               'page_counter'      =>              $row->cur_counter,
-                               'page_is_redirect'  =>              $row->cur_is_redirect,
-                               'page_is_new'       =>              $row->cur_is_new,
-                               'page_random'       =>              $row->cur_random,
-                               'page_touched'      =>              $this->dbw->timestamp(),
-                               'page_latest'       =>              $row->rev_id,
-                               'page_len'          =>              $row->len );
-                       # $this->addChunk( $add, $row->cur_id );
-                       $this->addChunk( $add );
-               }
-               $this->lastChunk( $add );
-
-               $this->log( "...done with cur/old -> page/revision." );
-       }
-
-       function upgradeLinks() {
-               $chunksize = 200;
-               list ( $links, $brokenlinks, $pagelinks, $cur ) = $this->dbw->tableNamesN( 'links', 'brokenlinks', 'pagelinks', 'cur' );
-
-               $this->log( 'Checking for interwiki table change in case of bogus items...' );
-               if ( $this->dbw->fieldExists( 'interwiki', 'iw_trans' ) ) {
-                       $this->log( 'interwiki has iw_trans.' );
-               } else {
-                       global $IP;
-                       $this->log( 'adding iw_trans...' );
-                       $this->dbw->sourceFile( $IP . '/maintenance/archives/patch-interwiki-trans.sql' );
-                       $this->log( 'added iw_trans.' );
-               }
-
-               $this->log( 'Creating pagelinks table...' );
-               $this->dbw->query( "
-CREATE TABLE $pagelinks (
-  -- Key to the page_id of the page containing the link.
-  pl_from int(8) unsigned NOT NULL default '0',
-
-  -- Key to page_namespace/page_title of the target page.
-  -- The target page may or may not exist, and due to renames
-  -- and deletions may refer to different page records as time
-  -- goes by.
-  pl_namespace int NOT NULL default '0',
-  pl_title varchar(255) binary NOT NULL default '',
-
-  UNIQUE KEY pl_from(pl_from,pl_namespace,pl_title),
-  KEY (pl_namespace,pl_title)
-
-) TYPE=InnoDB" );
-
-               $this->log( 'Importing live links -> pagelinks' );
-               $nlinks = $this->dbw->selectField( 'links', 'count(*)', '', __METHOD__ );
-               if ( $nlinks ) {
-                       $this->setChunkScale( $chunksize, $nlinks, 'pagelinks', __METHOD__ );
-                       $result = $this->dbr->query( "
-                         SELECT l_from,cur_namespace,cur_title
-                               FROM $links, $cur
-                               WHERE l_to=cur_id", __METHOD__ );
-                       $add = array();
-                       foreach ( $result as $row ) {
-                               $add[] = array(
-                                       'pl_from'      =>              $row->l_from,
-                                       'pl_namespace' =>              $row->cur_namespace,
-                                       'pl_title'     => $this->conv( $row->cur_title ) );
-                               $this->addChunk( $add );
-                       }
-                       $this->lastChunk( $add );
-               } else {
-                       $this->log( 'no links!' );
-               }
-
-               $this->log( 'Importing brokenlinks -> pagelinks' );
-               $nbrokenlinks = $this->dbw->selectField( 'brokenlinks', 'count(*)', '', __METHOD__ );
-               if ( $nbrokenlinks ) {
-                       $this->setChunkScale( $chunksize, $nbrokenlinks, 'pagelinks', __METHOD__ );
-                       $result = $this->dbr->query(
-                               "SELECT bl_from, bl_to FROM $brokenlinks",
-                               __METHOD__ );
-                       $add = array();
-                       foreach ( $result as $row ) {
-                               $pagename = $this->conv( $row->bl_to );
-                               $title = Title::newFromText( $pagename );
-                               if ( is_null( $title ) ) {
-                                       $this->log( "** invalid brokenlink: $row->bl_from -> '$pagename' (converted from '$row->bl_to')" );
-                               } else {
-                                       $add[] = array(
-                                               'pl_from'      => $row->bl_from,
-                                               'pl_namespace' => $title->getNamespace(),
-                                               'pl_title'     => $title->getDBkey() );
-                                       $this->addChunk( $add );
-                               }
-                       }
-                       $this->lastChunk( $add );
-               } else {
-                       $this->log( 'no brokenlinks!' );
-               }
-
-               $this->log( 'Done with links.' );
-       }
-
-       function userDupeCallback( $str ) {
-               echo $str;
-       }
-
-       function upgradeUser() {
-               // Apply unique index, if necessary:
-               $duper = new UserDupes( $this->dbw, array( $this, 'userDupeCallback' ) );
-               if ( $duper->hasUniqueIndex() ) {
-                       $this->log( "Already have unique user_name index." );
-               } else {
-                       $this->log( "Clearing user duplicates..." );
-                       if ( !$duper->clearDupes() ) {
-                               $this->log( "WARNING: Duplicate user accounts, may explode!" );
-                       }
-               }
-
-               $tabledef = <<<END
-CREATE TABLE $1 (
-  user_id int(5) unsigned NOT NULL auto_increment,
-  user_name varchar(255) binary NOT NULL default '',
-  user_real_name varchar(255) binary NOT NULL default '',
-  user_password tinyblob NOT NULL default '',
-  user_newpassword tinyblob NOT NULL default '',
-  user_email tinytext NOT NULL default '',
-  user_options blob NOT NULL default '',
-  user_touched char(14) binary NOT NULL default '',
-  user_token char(32) binary NOT NULL default '',
-  user_email_authenticated CHAR(14) BINARY,
-  user_email_token CHAR(32) BINARY,
-  user_email_token_expires CHAR(14) BINARY,
-
-  PRIMARY KEY user_id (user_id),
-  UNIQUE INDEX user_name (user_name),
-  INDEX (user_email_token)
-
-) TYPE=InnoDB
-END;
-               $fields = array(
-                       'user_id'                  => MW_UPGRADE_COPY,
-                       'user_name'                => MW_UPGRADE_ENCODE,
-                       'user_real_name'           => MW_UPGRADE_ENCODE,
-                       'user_password'            => MW_UPGRADE_COPY,
-                       'user_newpassword'         => MW_UPGRADE_COPY,
-                       'user_email'               => MW_UPGRADE_ENCODE,
-                       'user_options'             => MW_UPGRADE_ENCODE,
-                       'user_touched'             => MW_UPGRADE_CALLBACK,
-                       'user_token'               => MW_UPGRADE_COPY,
-                       'user_email_authenticated' => MW_UPGRADE_CALLBACK,
-                       'user_email_token'         => MW_UPGRADE_NULL,
-                       'user_email_token_expires' => MW_UPGRADE_NULL );
-               $this->copyTable( 'user', $tabledef, $fields,
-                       array( &$this, 'userCallback' ) );
-       }
-
-       function userCallback( $row, $copy ) {
-               $now = $this->dbw->timestamp();
-               $copy['user_touched'] = $now;
-               $copy['user_email_authenticated'] = $this->emailAuth ? $now : null;
-               return $copy;
-       }
-
-       function upgradeImage() {
-               $tabledef = <<<END
-CREATE TABLE $1 (
-  img_name varchar(255) binary NOT NULL default '',
-  img_size int(8) unsigned NOT NULL default '0',
-  img_width int(5)  NOT NULL default '0',
-  img_height int(5)  NOT NULL default '0',
-  img_metadata mediumblob NOT NULL,
-  img_bits int(3)  NOT NULL default '0',
-  img_media_type ENUM("UNKNOWN", "BITMAP", "DRAWING", "AUDIO", "VIDEO", "MULTIMEDIA", "OFFICE", "TEXT", "EXECUTABLE", "ARCHIVE") default NULL,
-  img_major_mime ENUM("unknown", "application", "audio", "image", "text", "video", "message", "model", "multipart") NOT NULL default "unknown",
-  img_minor_mime varchar(32) NOT NULL default "unknown",
-  img_description tinyblob NOT NULL default '',
-  img_user int(5) unsigned NOT NULL default '0',
-  img_user_text varchar(255) binary NOT NULL default '',
-  img_timestamp char(14) binary NOT NULL default '',
-
-  PRIMARY KEY img_name (img_name),
-  INDEX img_size (img_size),
-  INDEX img_timestamp (img_timestamp)
-) TYPE=InnoDB
-END;
-               $fields = array(
-                       'img_name'        => MW_UPGRADE_ENCODE,
-                       'img_size'        => MW_UPGRADE_COPY,
-                       'img_width'       => MW_UPGRADE_CALLBACK,
-                       'img_height'      => MW_UPGRADE_CALLBACK,
-                       'img_metadata'    => MW_UPGRADE_CALLBACK,
-                       'img_bits'        => MW_UPGRADE_CALLBACK,
-                       'img_media_type'  => MW_UPGRADE_CALLBACK,
-                       'img_major_mime'  => MW_UPGRADE_CALLBACK,
-                       'img_minor_mime'  => MW_UPGRADE_CALLBACK,
-                       'img_description' => MW_UPGRADE_ENCODE,
-                       'img_user'        => MW_UPGRADE_COPY,
-                       'img_user_text'   => MW_UPGRADE_ENCODE,
-                       'img_timestamp'   => MW_UPGRADE_COPY );
-               $this->copyTable( 'image', $tabledef, $fields,
-                       array( &$this, 'imageCallback' ) );
-       }
-
-       function imageCallback( $row, $copy ) {
-               if ( !$this->hasOption( 'noimage' ) ) {
-                       // Fill in the new image info fields
-                       $info = $this->imageInfo( $row->img_name );
-
-                       $copy['img_width'     ] = $info['width'];
-                       $copy['img_height'    ] = $info['height'];
-                       $copy['img_metadata'  ] = ""; // loaded on-demand
-                       $copy['img_bits'      ] = $info['bits'];
-                       $copy['img_media_type'] = $info['media'];
-                       $copy['img_major_mime'] = $info['major'];
-                       $copy['img_minor_mime'] = $info['minor'];
-               }
-
-               // If doing UTF8 conversion the file must be renamed
-               $this->renameFile( $row->img_name, 'wfImageDir' );
-
-               return $copy;
-       }
-
-       function imageInfo( $filename ) {
-               $info = array(
-                       'width'  => 0,
-                       'height' => 0,
-                       'bits'   => 0,
-                       'media'  => '',
-                       'major'  => '',
-                       'minor'  => '' );
-
-               $magic = MimeMagic::singleton();
-               $mime = $magic->guessMimeType( $filename, true );
-               list( $info['major'], $info['minor'] ) = explode( '/', $mime );
-
-               $info['media'] = $magic->getMediaType( $filename, $mime );
-
-               $image = UnregisteredLocalFile::newFromPath( $filename, $mime );
-
-               $info['width'] = $image->getWidth();
-               $info['height'] = $image->getHeight();
-
-               $gis = $image->getImageSize( $filename );
-               if ( isset( $gis['bits'] ) ) {
-                       $info['bits'] = $gis['bits'];
-               }
-
-               return $info;
-       }
-
-
-       /**
-        * Truncate a table.
-        * @param string $table The table name to be truncated
-        */
-       function clearTable( $table ) {
-               print "Clearing $table...\n";
-               $tableName = $this->db->tableName( $table );
-               $this->db->query( "TRUNCATE $tableName" );
-       }
-
-       /**
-        * Rename a given image or archived image file to the converted filename,
-        * leaving a symlink for URL compatibility.
-        *
-        * @param $oldname string pre-conversion filename
-        * @param $subdirCallback string
-        * @param $basename string pre-conversion base filename for dir hashing, if an archive
-        * @return bool|string
-        * @access private
-        */
-       function renameFile( $oldname, $subdirCallback = 'wfImageDir', $basename = null ) {
-               $newname = $this->conv( $oldname );
-               if ( $newname == $oldname ) {
-                       // No need to rename; another field triggered this row.
-                       return false;
-               }
-
-               if ( is_null( $basename ) ) $basename = $oldname;
-               $ubasename = $this->conv( $basename );
-               $oldpath = call_user_func( $subdirCallback, $basename ) . '/' . $oldname;
-               $newpath = call_user_func( $subdirCallback, $ubasename ) . '/' . $newname;
-
-               $this->log( "$oldpath -> $newpath" );
-               if ( rename( $oldpath, $newpath ) ) {
-                       $relpath = wfRelativePath( $newpath, dirname( $oldpath ) );
-                       if ( !symlink( $relpath, $oldpath ) ) {
-                               $this->log( "... symlink failed!" );
-                       }
-                       return $newname;
-               } else {
-                       $this->log( "... rename failed!" );
-                       return false;
-               }
-       }
-
-       function upgradeOldImage() {
-               $tabledef = <<<END
-CREATE TABLE $1 (
-  -- Base filename: key to image.img_name
-  oi_name varchar(255) binary NOT NULL default '',
-
-  -- Filename of the archived file.
-  -- This is generally a timestamp and '!' prepended to the base name.
-  oi_archive_name varchar(255) binary NOT NULL default '',
-
-  -- Other fields as in image...
-  oi_size int(8) unsigned NOT NULL default 0,
-  oi_width int(5) NOT NULL default 0,
-  oi_height int(5) NOT NULL default 0,
-  oi_bits int(3) NOT NULL default 0,
-  oi_description tinyblob NOT NULL default '',
-  oi_user int(5) unsigned NOT NULL default '0',
-  oi_user_text varchar(255) binary NOT NULL default '',
-  oi_timestamp char(14) binary NOT NULL default '',
-
-  INDEX oi_name (oi_name(10))
-
-) TYPE=InnoDB;
-END;
-               $fields = array(
-                       'oi_name'         => MW_UPGRADE_ENCODE,
-                       'oi_archive_name' => MW_UPGRADE_ENCODE,
-                       'oi_size'         => MW_UPGRADE_COPY,
-                       'oi_width'        => MW_UPGRADE_CALLBACK,
-                       'oi_height'       => MW_UPGRADE_CALLBACK,
-                       'oi_bits'         => MW_UPGRADE_CALLBACK,
-                       'oi_description'  => MW_UPGRADE_ENCODE,
-                       'oi_user'         => MW_UPGRADE_COPY,
-                       'oi_user_text'    => MW_UPGRADE_ENCODE,
-                       'oi_timestamp'    => MW_UPGRADE_COPY );
-               $this->copyTable( 'oldimage', $tabledef, $fields,
-                       array( &$this, 'oldimageCallback' ) );
-       }
-
-       function oldimageCallback( $row, $copy ) {
-               global $options;
-               if ( !isset( $options['noimage'] ) ) {
-                       // Fill in the new image info fields
-                       $info = $this->imageInfo( $row->oi_archive_name, 'wfImageArchiveDir', $row->oi_name );
-                       $copy['oi_width' ] = $info['width' ];
-                       $copy['oi_height'] = $info['height'];
-                       $copy['oi_bits'  ] = $info['bits'  ];
-               }
-
-               // If doing UTF8 conversion the file must be renamed
-               $this->renameFile( $row->oi_archive_name, 'wfImageArchiveDir', $row->oi_name );
-
-               return $copy;
-       }
-
-
-       function upgradeWatchlist() {
-               $chunksize = 100;
-
-               list ( $watchlist, $watchlist_temp ) = $this->dbw->tableNamesN( 'watchlist', 'watchlist_temp' );
-
-               $this->log( 'Migrating watchlist table to watchlist_temp...' );
-               $this->dbw->query(
-"CREATE TABLE $watchlist_temp (
-  -- Key to user_id
-  wl_user int(5) unsigned NOT NULL,
-
-  -- Key to page_namespace/page_title
-  -- Note that users may watch patches which do not exist yet,
-  -- or existed in the past but have been deleted.
-  wl_namespace int NOT NULL default '0',
-  wl_title varchar(255) binary NOT NULL default '',
-
-  -- Timestamp when user was last sent a notification e-mail;
-  -- cleared when the user visits the page.
-  -- FIXME: add proper null support etc
-  wl_notificationtimestamp varchar(14) binary NOT NULL default '0',
-
-  UNIQUE KEY (wl_user, wl_namespace, wl_title),
-  KEY namespace_title (wl_namespace,wl_title)
-
-) TYPE=InnoDB;", __METHOD__ );
-
-               // Fix encoding for Latin-1 upgrades, add some fields,
-               // and double article to article+talk pairs
-               $numwatched = $this->dbw->selectField( 'watchlist', 'count(*)', '', __METHOD__ );
-
-               $this->setChunkScale( $chunksize, $numwatched * 2, 'watchlist_temp', __METHOD__ );
-               $result = $this->dbr->select( 'watchlist',
-                       array(
-                               'wl_user',
-                               'wl_namespace',
-                               'wl_title' ),
-                       '',
-                       __METHOD__ );
-
-               $add = array();
-               foreach ( $result as $row ) {
-                       $add[] = array(
-                               'wl_user'      =>                          $row->wl_user,
-                               'wl_namespace' => MWNamespace::getSubject( $row->wl_namespace ),
-                               'wl_title'     =>             $this->conv( $row->wl_title ),
-                               'wl_notificationtimestamp' =>              '0' );
-                       $this->addChunk( $add );
-
-                       $add[] = array(
-                               'wl_user'      =>                          $row->wl_user,
-                               'wl_namespace' =>    MWNamespace::getTalk( $row->wl_namespace ),
-                               'wl_title'     =>             $this->conv( $row->wl_title ),
-                               'wl_notificationtimestamp' =>              '0' );
-                       $this->addChunk( $add );
-               }
-               $this->lastChunk( $add );
-
-               $this->log( 'Done converting watchlist.' );
-               $this->cleanupSwaps[] = 'watchlist';
-       }
-
-       function upgradeLogging() {
-               $tabledef = <<<ENDS
-CREATE TABLE $1 (
-  -- Symbolic keys for the general log type and the action type
-  -- within the log. The output format will be controlled by the
-  -- action field, but only the type controls categorization.
-  log_type char(10) NOT NULL default '',
-  log_action char(10) NOT NULL default '',
-
-  -- Timestamp. Duh.
-  log_timestamp char(14) NOT NULL default '19700101000000',
-
-  -- The user who performed this action; key to user_id
-  log_user int unsigned NOT NULL default 0,
-
-  -- Key to the page affected. Where a user is the target,
-  -- this will point to the user page.
-  log_namespace int NOT NULL default 0,
-  log_title varchar(255) binary NOT NULL default '',
-
-  -- Freeform text. Interpreted as edit history comments.
-  log_comment varchar(255) NOT NULL default '',
-
-  -- LF separated list of miscellaneous parameters
-  log_params blob NOT NULL default '',
-
-  KEY type_time (log_type, log_timestamp),
-  KEY user_time (log_user, log_timestamp),
-  KEY page_time (log_namespace, log_title, log_timestamp)
-
-) TYPE=InnoDB
-ENDS;
-               $fields = array(
-                       'log_type'      => MW_UPGRADE_COPY,
-                       'log_action'    => MW_UPGRADE_COPY,
-                       'log_timestamp' => MW_UPGRADE_COPY,
-                       'log_user'      => MW_UPGRADE_COPY,
-                       'log_namespace' => MW_UPGRADE_COPY,
-                       'log_title'     => MW_UPGRADE_ENCODE,
-                       'log_comment'   => MW_UPGRADE_ENCODE,
-                       'log_params'    => MW_UPGRADE_ENCODE );
-               $this->copyTable( 'logging', $tabledef, $fields );
-       }
-
-       function upgradeArchive() {
-               $tabledef = <<<ENDS
-CREATE TABLE $1 (
-  ar_namespace int NOT NULL default '0',
-  ar_title varchar(255) binary NOT NULL default '',
-  ar_text mediumblob NOT NULL default '',
-
-  ar_comment tinyblob NOT NULL default '',
-  ar_user int(5) unsigned NOT NULL default '0',
-  ar_user_text varchar(255) binary NOT NULL,
-  ar_timestamp char(14) binary NOT NULL default '',
-  ar_minor_edit tinyint(1) NOT NULL default '0',
-
-  ar_flags tinyblob NOT NULL default '',
-
-  ar_rev_id int(8) unsigned,
-  ar_text_id int(8) unsigned,
-
-  KEY name_title_timestamp (ar_namespace,ar_title,ar_timestamp)
-
-) TYPE=InnoDB
-ENDS;
-               $fields = array(
-                       'ar_namespace'  => MW_UPGRADE_COPY,
-                       'ar_title'      => MW_UPGRADE_ENCODE,
-                       'ar_text'       => MW_UPGRADE_COPY,
-                       'ar_comment'    => MW_UPGRADE_ENCODE,
-                       'ar_user'       => MW_UPGRADE_COPY,
-                       'ar_user_text'  => MW_UPGRADE_ENCODE,
-                       'ar_timestamp'  => MW_UPGRADE_COPY,
-                       'ar_minor_edit' => MW_UPGRADE_COPY,
-                       'ar_flags'      => MW_UPGRADE_COPY,
-                       'ar_rev_id'     => MW_UPGRADE_NULL,
-                       'ar_text_id'    => MW_UPGRADE_NULL );
-               $this->copyTable( 'archive', $tabledef, $fields );
-       }
-
-       function upgradeImagelinks() {
-               global $wgUseLatin1;
-               if ( $wgUseLatin1 ) {
-                       $tabledef = <<<ENDS
-CREATE TABLE $1 (
-  -- Key to page_id of the page containing the image / media link.
-  il_from int(8) unsigned NOT NULL default '0',
-
-  -- Filename of target image.
-  -- This is also the page_title of the file's description page;
-  -- all such pages are in namespace 6 (NS_FILE).
-  il_to varchar(255) binary NOT NULL default '',
-
-  UNIQUE KEY il_from(il_from,il_to),
-  KEY (il_to)
-
-) TYPE=InnoDB
-ENDS;
-                       $fields = array(
-                               'il_from' => MW_UPGRADE_COPY,
-                               'il_to'   => MW_UPGRADE_ENCODE );
-                       $this->copyTable( 'imagelinks', $tabledef, $fields );
-               }
-       }
-
-       function upgradeCategorylinks() {
-               global $wgUseLatin1;
-               if ( $wgUseLatin1 ) {
-                       $tabledef = <<<ENDS
-CREATE TABLE $1 (
-  cl_from int(8) unsigned NOT NULL default '0',
-  cl_to varchar(255) binary NOT NULL default '',
-  cl_sortkey varchar(86) binary NOT NULL default '',
-  cl_timestamp timestamp NOT NULL,
-
-  UNIQUE KEY cl_from(cl_from,cl_to),
-  KEY cl_sortkey(cl_to,cl_sortkey),
-  KEY cl_timestamp(cl_to,cl_timestamp)
-) TYPE=InnoDB
-ENDS;
-                       $fields = array(
-                               'cl_from'      => MW_UPGRADE_COPY,
-                               'cl_to'        => MW_UPGRADE_ENCODE,
-                               'cl_sortkey'   => MW_UPGRADE_ENCODE,
-                               'cl_timestamp' => MW_UPGRADE_COPY );
-                       $this->copyTable( 'categorylinks', $tabledef, $fields );
-               }
-       }
-
-       function upgradeIpblocks() {
-               global $wgUseLatin1;
-               if ( $wgUseLatin1 ) {
-                       $tabledef = <<<ENDS
-CREATE TABLE $1 (
-  ipb_id int(8) NOT NULL auto_increment,
-  ipb_address varchar(40) binary NOT NULL default '',
-  ipb_user int(8) unsigned NOT NULL default '0',
-  ipb_by int(8) unsigned NOT NULL default '0',
-  ipb_reason tinyblob NOT NULL default '',
-  ipb_timestamp char(14) binary NOT NULL default '',
-  ipb_auto tinyint(1) NOT NULL default '0',
-  ipb_expiry char(14) binary NOT NULL default '',
-
-  PRIMARY KEY ipb_id (ipb_id),
-  INDEX ipb_address (ipb_address),
-  INDEX ipb_user (ipb_user)
-
-) TYPE=InnoDB
-ENDS;
-                       $fields = array(
-                               'ipb_id'        => MW_UPGRADE_COPY,
-                               'ipb_address'   => MW_UPGRADE_COPY,
-                               'ipb_user'      => MW_UPGRADE_COPY,
-                               'ipb_by'        => MW_UPGRADE_COPY,
-                               'ipb_reason'    => MW_UPGRADE_ENCODE,
-                               'ipb_timestamp' => MW_UPGRADE_COPY,
-                               'ipb_auto'      => MW_UPGRADE_COPY,
-                               'ipb_expiry'    => MW_UPGRADE_COPY );
-                       $this->copyTable( 'ipblocks', $tabledef, $fields );
-               }
-       }
-
-       function upgradeRecentchanges() {
-               // There's a format change in the namespace field
-               $tabledef = <<<ENDS
-CREATE TABLE $1 (
-  rc_id int(8) NOT NULL auto_increment,
-  rc_timestamp varchar(14) binary NOT NULL default '',
-  rc_cur_time varchar(14) binary NOT NULL default '',
-
-  rc_user int(10) unsigned NOT NULL default '0',
-  rc_user_text varchar(255) binary NOT NULL default '',
-
-  rc_namespace int NOT NULL default '0',
-  rc_title varchar(255) binary NOT NULL default '',
-
-  rc_comment varchar(255) binary NOT NULL default '',
-  rc_minor tinyint(3) unsigned NOT NULL default '0',
-
-  rc_bot tinyint(3) unsigned NOT NULL default '0',
-  rc_new tinyint(3) unsigned NOT NULL default '0',
-
-  rc_cur_id int(10) unsigned NOT NULL default '0',
-  rc_this_oldid int(10) unsigned NOT NULL default '0',
-  rc_last_oldid int(10) unsigned NOT NULL default '0',
-
-  rc_type tinyint(3) unsigned NOT NULL default '0',
-  rc_moved_to_ns tinyint(3) unsigned NOT NULL default '0',
-  rc_moved_to_title varchar(255) binary NOT NULL default '',
-
-  rc_patrolled tinyint(3) unsigned NOT NULL default '0',
-
-  rc_ip char(15) NOT NULL default '',
-
-  PRIMARY KEY rc_id (rc_id),
-  INDEX rc_timestamp (rc_timestamp),
-  INDEX rc_namespace_title (rc_namespace, rc_title),
-  INDEX rc_cur_id (rc_cur_id),
-  INDEX new_name_timestamp(rc_new,rc_namespace,rc_timestamp),
-  INDEX rc_ip (rc_ip)
-
-) TYPE=InnoDB
-ENDS;
-               $fields = array(
-                       'rc_id'             => MW_UPGRADE_COPY,
-                       'rc_timestamp'      => MW_UPGRADE_COPY,
-                       'rc_cur_time'       => MW_UPGRADE_COPY,
-                       'rc_user'           => MW_UPGRADE_COPY,
-                       'rc_user_text'      => MW_UPGRADE_ENCODE,
-                       'rc_namespace'      => MW_UPGRADE_COPY,
-                       'rc_title'          => MW_UPGRADE_ENCODE,
-                       'rc_comment'        => MW_UPGRADE_ENCODE,
-                       'rc_minor'          => MW_UPGRADE_COPY,
-                       'rc_bot'            => MW_UPGRADE_COPY,
-                       'rc_new'            => MW_UPGRADE_COPY,
-                       'rc_cur_id'         => MW_UPGRADE_COPY,
-                       'rc_this_oldid'     => MW_UPGRADE_COPY,
-                       'rc_last_oldid'     => MW_UPGRADE_COPY,
-                       'rc_type'           => MW_UPGRADE_COPY,
-                       'rc_moved_to_ns'    => MW_UPGRADE_COPY,
-                       'rc_moved_to_title' => MW_UPGRADE_ENCODE,
-                       'rc_patrolled'      => MW_UPGRADE_COPY,
-                       'rc_ip'             => MW_UPGRADE_COPY );
-               $this->copyTable( 'recentchanges', $tabledef, $fields );
-       }
-
-       function upgradeQuerycache() {
-               // There's a format change in the namespace field
-               $tabledef = <<<ENDS
-CREATE TABLE $1 (
-  -- A key name, generally the base name of of the special page.
-  qc_type char(32) NOT NULL,
-
-  -- Some sort of stored value. Sizes, counts...
-  qc_value int(5) unsigned NOT NULL default '0',
-
-  -- Target namespace+title
-  qc_namespace int NOT NULL default '0',
-  qc_title char(255) binary NOT NULL default '',
-
-  KEY (qc_type,qc_value)
-
-) TYPE=InnoDB
-ENDS;
-               $fields = array(
-                       'qc_type'      => MW_UPGRADE_COPY,
-                       'qc_value'     => MW_UPGRADE_COPY,
-                       'qc_namespace' => MW_UPGRADE_COPY,
-                       'qc_title'     => MW_UPGRADE_ENCODE );
-               $this->copyTable( 'querycache', $tabledef, $fields );
-       }
-
-       /**
-        * Check for duplicate rows in "cur" table and move duplicates entries in
-        * "old" table.
-        *
-        * This was in cleanupDupes.inc before.
-        */
-       function checkDupes() {
-               $dbw = wfGetDB( DB_MASTER );
-               if ( $dbw->indexExists( 'cur', 'name_title' ) &&
-                       $dbw->indexUnique( 'cur', 'name_title' ) ) {
-                       echo wfWikiID() . ": cur table has the current unique index; no duplicate entries.\n";
-                       return;
-               } elseif ( $dbw->indexExists( 'cur', 'name_title_dup_prevention' ) ) {
-                       echo wfWikiID() . ": cur table has a temporary name_title_dup_prevention unique index; no duplicate entries.\n";
-                       return;
-               }
-
-               echo wfWikiID() . ": cur table has the old non-unique index and may have duplicate entries.\n";
-
-               $dbw = wfGetDB( DB_MASTER );
-               $cur = $dbw->tableName( 'cur' );
-               $old = $dbw->tableName( 'old' );
-               $dbw->query( "LOCK TABLES $cur WRITE, $old WRITE" );
-               echo "Checking for duplicate cur table entries... (this may take a while on a large wiki)\n";
-               $res = $dbw->query( <<<END
-SELECT cur_namespace,cur_title,count(*) as c,min(cur_id) as id
-  FROM $cur
- GROUP BY cur_namespace,cur_title
-HAVING c > 1
-END
-               );
-               $n = $dbw->numRows( $res );
-               echo "Found $n titles with duplicate entries.\n";
-               if ( $n > 0 ) {
-                       echo "Correcting...\n";
-                       foreach ( $res as $row ) {
-                               $ns = intval( $row->cur_namespace );
-                               $title = $dbw->addQuotes( $row->cur_title );
-
-                               # Get the first responding ID; that'll be the one we keep.
-                               $id = $dbw->selectField( 'cur', 'cur_id', array(
-                                       'cur_namespace' => $row->cur_namespace,
-                                       'cur_title'     => $row->cur_title ) );
-
-                               echo "$ns:$row->cur_title (canonical ID $id)\n";
-                               if ( $id != $row->id ) {
-                                       echo "  ** minimum ID $row->id; ";
-                                       $timeMin = $dbw->selectField( 'cur', 'cur_timestamp', array(
-                                               'cur_id' => $row->id ) );
-                                       $timeFirst = $dbw->selectField( 'cur', 'cur_timestamp', array(
-                                               'cur_id' => $id ) );
-                                       if ( $timeMin == $timeFirst ) {
-                                               echo "timestamps match at $timeFirst; ok\n";
-                                       } else {
-                                               echo "timestamps don't match! min: $timeMin, first: $timeFirst; ";
-                                               if ( $timeMin > $timeFirst ) {
-                                                       $id = $row->id;
-                                                       echo "keeping minimum: $id\n";
-                                               } else {
-                                                       echo "keeping first: $id\n";
-                                               }
-                                       }
-                               }
-
-                               $dbw->query( <<<END
-INSERT
-  INTO $old
-         (old_namespace, old_title,      old_text,
-          old_comment,   old_user,       old_user_text,
-          old_timestamp, old_minor_edit, old_flags,
-          inverse_timestamp)
-SELECT cur_namespace, cur_title,      cur_text,
-          cur_comment,   cur_user,       cur_user_text,
-          cur_timestamp, cur_minor_edit, '',
-          inverse_timestamp
-  FROM $cur
- WHERE cur_namespace=$ns
-   AND cur_title=$title
-   AND cur_id != $id
-END
-                               );
-                               $dbw->query( <<<END
-DELETE
-  FROM $cur
- WHERE cur_namespace=$ns
-   AND cur_title=$title
-   AND cur_id != $id
-END
-                                       );
-                       }
-               }
-               $dbw->query( 'UNLOCK TABLES' );
-               echo "Done.\n";
-       }
-
-       /**
-        * Rename all our temporary tables into final place.
-        * We've left things in place so a read-only wiki can continue running
-        * on the old code during all this.
-        */
-       function upgradeCleanup() {
-               $this->renameTable( 'old', 'text' );
-
-               foreach ( $this->cleanupSwaps as $table ) {
-                       $this->swap( $table );
-               }
-       }
-
-       function renameTable( $from, $to ) {
-               $this->log( "Renaming $from to $to..." );
-
-               $fromtable = $this->dbw->tableName( $from );
-               $totable   = $this->dbw->tableName( $to );
-               $this->dbw->query( "ALTER TABLE $fromtable RENAME TO $totable" );
-       }
-
-       function swap( $base ) {
-               $this->renameTable( $base, "{$base}_old" );
-               $this->renameTable( "{$base}_temp", $base );
-       }
-
-}
-
-$maintClass = 'FiveUpgrade';
-require_once( RUN_MAINTENANCE_IF_MAIN );
index 2181e44..1e1f24b 100644 (file)
@@ -33,4 +33,3 @@ $uo = new userOptions( $options, $args );
 $uo->run();
 
 print "Done.\n";
-
index 0e4131b..cbbf2ab 100644 (file)
@@ -349,7 +349,7 @@ function getEscapedProfileUrl( $_filter = false, $_sort = false, $_expand = fals
 
        return htmlspecialchars(
                '?' .
-               wfArrayToCGI( array(
+               wfArrayToCgi( array(
                        'filter' => $_filter ? $_filter : $filter,
                        'sort' => $_sort ? $_sort : $sort,
                        'expand' => implode( ',', array_keys( $_expand ) )
index 80b9a76..672f457 100644 (file)
  * @file
  */
 
+if( !defined( 'MEDIAWIKI' ) ) {
+       die( 'Not an entry point.' );
+}
+
 return array(
 
        /* Special modules who have their own classes */
@@ -143,6 +147,7 @@ return array(
        ),
        'jquery.client' => array(
                'scripts' => 'resources/jquery/jquery.client.js',
+               'targets' => array( 'desktop', 'mobile' ),
        ),
        'jquery.collapsibleTabs' => array(
                'scripts' => 'resources/jquery/jquery.collapsibleTabs.js',
@@ -157,6 +162,7 @@ return array(
        ),
        'jquery.cookie' => array(
                'scripts' => 'resources/jquery/jquery.cookie.js',
+               'targets' => array( 'desktop', 'mobile' ),
        ),
        'jquery.delayedBind' => array(
                'scripts' => 'resources/jquery/jquery.delayedBind.js',
@@ -210,6 +216,7 @@ return array(
        ),
        'jquery.mwExtension' => array(
                'scripts' => 'resources/jquery/jquery.mwExtension.js',
+               'targets' => array( 'desktop', 'mobile' ),
        ),
        'jquery.placeholder' => array(
                'scripts' => 'resources/jquery/jquery.placeholder.js',
@@ -647,9 +654,11 @@ return array(
        ),
        'mediawiki.notify' => array(
                'scripts' => 'resources/mediawiki/mediawiki.notify.js',
+               'targets' => array( 'desktop', 'mobile' ),
        ),
        'mediawiki.searchSuggest' => array(
                'scripts' => 'resources/mediawiki/mediawiki.searchSuggest.js',
+               'styles' => 'resources/mediawiki/mediawiki.searchSuggest.css',
                'messages' => array(
                        'searchsuggest-search',
                        'searchsuggest-containing',
@@ -687,6 +696,7 @@ return array(
                ),
                'messages' => array( 'showtoc', 'hidetoc' ),
                'position' => 'top', // For $wgPreloadJavaScriptMwUtil
+               'targets' => array( 'desktop', 'mobile' ),
        ),
 
        /* MediaWiki Action */
@@ -759,6 +769,7 @@ return array(
                                'mediawiki.language.data',
                                'mediawiki.cldr'
                        ),
+               'targets' => array( 'desktop', 'mobile' ),
        ),
 
        'mediawiki.cldr' => array(
@@ -766,14 +777,17 @@ return array(
                'dependencies' => array(
                        'mediawiki.libs.pluralruleparser',
                ),
+               'targets' => array( 'desktop', 'mobile' ),
        ),
 
        'mediawiki.libs.pluralruleparser' => array(
                'scripts' => 'resources/mediawiki.libs/CLDRPluralRuleParser.js',
+               'targets' => array( 'desktop', 'mobile' ),
        ),
 
        'mediawiki.language.init' => array(
                'scripts' => 'resources/mediawiki.language/mediawiki.language.init.js',
+               'targets' => array( 'desktop', 'mobile' ),
        ),
 
        'mediawiki.jqueryMsg' => array(
@@ -782,6 +796,7 @@ return array(
                        'mediawiki.util',
                        'mediawiki.language',
                ),
+               'targets' => array( 'desktop', 'mobile' ),
        ),
 
        /* MediaWiki Libs */
@@ -912,6 +927,9 @@ return array(
                ),
                'dependencies' => array( 'mediawiki.libs.jpegmeta', 'mediawiki.util' ),
        ),
+       'mediawiki.special.userlogin.signup' => array(
+               'scripts' => 'resources/mediawiki.special/mediawiki.special.userLogin.signup.js',
+       ),
        'mediawiki.special.javaScriptTest' => array(
                'scripts' => 'resources/mediawiki.special/mediawiki.special.javaScriptTest.js',
                'messages' => array_merge( Skin::getSkinNameMessages(), array(
index 488d106..a1fd679 100644 (file)
  */
 ( function ( $ ) {
        $.fn.arrowSteps = function () {
-               var $steps, width, arrowWidth;
+               var $steps, width, arrowWidth,
+                       paddingSide = $( 'body' ).hasClass( 'rtl' ) ? 'padding-left' : 'padding-right';
+
                this.addClass( 'arrowSteps' );
                $steps = this.find( 'li' );
 
                width = parseInt( 100 / $steps.length, 10 );
                $steps.css( 'width', width + '%' );
 
-               // every step except the last one has an arrow at the right hand side. Also add in the padding
-               // for the calculated arrow width.
+               // Every step except the last one has an arrow pointing forward:
+               // at the right hand side in LTR languages, and at the left hand side in RTL.
+               // Also add in the padding for the calculated arrow width.
                arrowWidth = parseInt( this.outerHeight(), 10 );
                $steps.filter( ':not(:last-child)' ).addClass( 'arrow' )
-                     .find( 'div' ).css( 'padding-right', arrowWidth.toString() + 'px' );
+                     .find( 'div' ).css( paddingSide, arrowWidth.toString() + 'px' );
 
                this.data( 'arrowSteps', $steps );
                return this;
index ae6f2b0..b0bd685 100644 (file)
                                        // Strings which precede a version number in a user agent string - combined and used as match 1 in
                                        // version detectection
                                        versionPrefixes = [
-                                               'camino', 'chrome', 'firefox', 'netscape', 'netscape6', 'opera', 'version', 'konqueror',
+                                               'camino', 'chrome', 'firefox', 'iceweasel', 'netscape', 'netscape6', 'opera', 'version', 'konqueror',
                                                'lynx', 'msie', 'safari', 'ps3'
                                        ],
                                        // Used as matches 2, 3 and 4 in version extraction - 3 is used as actual version number
                                        versionSuffix = '(\\/|\\;?\\s|)([a-z0-9\\.\\+]*?)(\\;|dev|rel|\\)|\\s|$)',
                                        // Names of known browsers
                                        names = [
-                                               'camino', 'chrome', 'firefox', 'netscape', 'konqueror', 'lynx', 'msie', 'opera',
+                                               'camino', 'chrome', 'firefox', 'iceweasel', 'netscape', 'konqueror', 'lynx', 'msie', 'opera',
                                                'safari', 'ipod', 'iphone', 'blackberry', 'ps3', 'rekonq'
                                        ],
                                        // Tanslations for conforming browser names
 
                        var conditions, dir, i, op, val;
                        profile = $.isPlainObject( profile ) ? profile : $.client.profile();
-
                        dir = $( 'body' ).is( '.rtl' ) ? 'rtl' : 'ltr';
                        // Check over each browser condition to determine if we are running in a compatible client
                        if ( typeof map[dir] !== 'object' || map[dir][profile.name] === undefined ) {
                                return true;
                        }
                        conditions = map[dir][profile.name];
+                       if ( conditions === false ) {
+                               return false;
+                       }
                        for ( i = 0; i < conditions.length; i++ ) {
                                op = conditions[i][0];
                                val = conditions[i][1];
-                               if ( val === false ) {
-                                       return false;
-                               }
                                if ( typeof val === 'string' ) {
                                        if ( !( eval( 'profile.version' + op + '"' + val + '"' ) ) ) {
                                                return false;
                                        }
                                }
                        }
+
                        return true;
                }
        };
index ad15607..ace4a55 100644 (file)
@@ -74,26 +74,26 @@ $.fn.makeCollapsible = function () {
                                                $containers = $collapsible.find( '> tbody > tr' );
                                                if ( $defaultToggle ) {
                                                        // Exclude tablerow containing togglelink
-                                                       $containers.not( $defaultToggle.closest( 'tr' ) ).stop(true, true).fadeOut();
+                                                       $containers = $containers.not( $defaultToggle.closest( 'tr' ) );
+                                               }
+
+                                               if ( options.instantHide ) {
+                                                       $containers.hide();
                                                } else {
-                                                       if ( options.instantHide ) {
-                                                               $containers.hide();
-                                                       } else {
-                                                               $containers.stop( true, true ).fadeOut();
-                                                       }
+                                                       $containers.stop( true, true ).fadeOut();
                                                }
 
                                        } else if ( $collapsible.is( 'ul' ) || $collapsible.is( 'ol' ) ) {
                                                $containers = $collapsible.find( '> li' );
                                                if ( $defaultToggle ) {
                                                        // Exclude list-item containing togglelink
-                                                       $containers.not( $defaultToggle.parent() ).stop( true, true ).slideUp();
+                                                       $containers = $containers.not( $defaultToggle.parent() );
+                                               }
+
+                                               if ( options.instantHide ) {
+                                                       $containers.hide();
                                                } else {
-                                                       if ( options.instantHide ) {
-                                                               $containers.hide();
-                                                       } else {
-                                                               $containers.stop( true, true ).slideUp();
-                                                       }
+                                                       $containers.stop( true, true ).slideUp();
                                                }
 
                                        } else {
@@ -111,10 +111,14 @@ $.fn.makeCollapsible = function () {
                                                // Otherwise assume this is a customcollapse with a remote toggle
                                                // .. and there is no collapsible-content because the entire element should be toggled
                                                } else {
-                                                       if ( $collapsible.is( 'tr' ) || $collapsible.is( 'td' ) || $collapsible.is( 'th' ) ) {
-                                                               $collapsible.fadeOut();
+                                                       if ( options.instantHide ) {
+                                                               $collapsible.hide();
                                                        } else {
-                                                               $collapsible.slideUp();
+                                                               if ( $collapsible.is( 'tr' ) || $collapsible.is( 'td' ) || $collapsible.is( 'th' ) ) {
+                                                                       $collapsible.fadeOut();
+                                                               } else {
+                                                                       $collapsible.slideUp();
+                                                               }
                                                        }
                                                }
                                        }
index edc18a7..303b18f 100644 (file)
@@ -49,8 +49,8 @@
 
 $.suggestions = {
        /**
-        * Cancel any delayed updateSuggestions() call and inform the user so
-        * they can cancel their result fetching if they use AJAX or something
+        * Cancel any delayed maybeFetch() call and callback the context so
+        * they can cancel any async fetching if they use AJAX or something.
         */
        cancel: function ( context ) {
                if ( context.data.timerID !== null ) {
@@ -93,12 +93,12 @@ $.suggestions = {
                        }
                }
 
-               // Cancel previous call
-               if ( context.data.timerID !== null ) {
-                       clearTimeout( context.data.timerID );
-               }
+               // Cancels any delayed maybeFetch call, and invokes context.config.cancel.
+               $.suggestions.cancel( context );
+
                if ( delayed ) {
-                       // Start a new asynchronous call
+                       // To avoid many started/aborted requests while typing, we're gonna take a short
+                       // break before trying to fetch data.
                        context.data.timerID = setTimeout( maybeFetch, context.config.delay );
                } else {
                        maybeFetch();
@@ -113,7 +113,7 @@ $.suggestions = {
                        setTimeout( function () {
                                // Render special
                                var $special = context.data.$container.find( '.suggestions-special' );
-                               context.config.special.render.call( $special, context.data.$textbox.val() );
+                               context.config.special.render.call( $special, context.data.$textbox.val(), context );
                        }, 1 );
                }
        },
@@ -125,7 +125,7 @@ $.suggestions = {
         */
        configure: function ( context, property, value ) {
                var newCSS,
-                       $autoEllipseMe, $result, $results, $span,
+                       $autoEllipseMe, $result, $results, childrenWidth,
                        i, expWidth, matchedText, maxWidth, text;
 
                // Validate creation using fallback values
@@ -237,33 +237,34 @@ $.suggestions = {
                                                                        context.data.selectedWithMouse = true;
                                                                        $.suggestions.highlight(
                                                                                context,
-                                                                               $(this).closest( '.suggestions-results div' ),
+                                                                               $(this).closest( '.suggestions-results .suggestions-result' ),
                                                                                false
                                                                        );
                                                                } )
                                                                .appendTo( $results );
                                                        // Allow custom rendering
                                                        if ( typeof context.config.result.render === 'function' ) {
-                                                               context.config.result.render.call( $result, context.config.suggestions[i] );
+                                                               context.config.result.render.call( $result, context.config.suggestions[i], context );
                                                        } else {
                                                                // Add <span> with text
-                                                               if( context.config.highlightInput ) {
-                                                                       matchedText = context.data.prevText;
-                                                               }
                                                                $result.append( $( '<span>' )
                                                                                .css( 'whiteSpace', 'nowrap' )
                                                                                .text( text )
                                                                        );
+                                                       }
 
-                                                               // Widen results box if needed
-                                                               // New width is only calculated here, applied later
-                                                               $span = $result.children( 'span' );
-                                                               if ( $span.outerWidth() > $result.width() && $span.outerWidth() > expWidth ) {
-                                                                       // factor in any padding, margin, or border space on the parent
-                                                                       expWidth = $span.outerWidth() + ( context.data.$container.width() - $span.parent().width());
-                                                               }
-                                                               $autoEllipseMe = $autoEllipseMe.add( $result );
+                                                       if ( context.config.highlightInput ) {
+                                                               matchedText = context.data.prevText;
                                                        }
+
+                                                       // Widen results box if needed
+                                                       // New width is only calculated here, applied later
+                                                       childrenWidth = $result.children().outerWidth();
+                                                       if ( childrenWidth > $result.width() && childrenWidth > expWidth ) {
+                                                               // factor in any padding, margin, or border space on the parent
+                                                               expWidth = childrenWidth + ( context.data.$container.width() - $result.width() );
+                                                       }
+                                                       $autoEllipseMe = $autoEllipseMe.add( $result );
                                                }
                                                // Apply new width for results box, if any
                                                if ( expWidth > context.data.$container.width() ) {
@@ -309,25 +310,35 @@ $.suggestions = {
                                        result = context.data.$container.find( '.suggestions-result:last' );
                                } else {
                                        result = selected.prev();
+                                       if ( !( result.length && result.hasClass( '.suggestions-result' ) ) ) {
+                                               // there is something in the DOM between selected element and the wrapper, bypass it
+                                               result = selected.parents( '.suggestions-results > *' ).prev().find( '.suggestions-result' ).eq(0);
+                                       }
+
                                        if ( selected.length === 0 ) {
                                                // we are at the beginning, so lets jump to the last item
                                                if ( context.data.$container.find( '.suggestions-special' ).html() !== '' ) {
                                                        result = context.data.$container.find( '.suggestions-special' );
                                                } else {
-                                                       result = context.data.$container.find( '.suggestions-results div:last' );
+                                                       result = context.data.$container.find( '.suggestions-results .suggestions-result:last' );
                                                }
                                        }
                                }
                        } else if ( result === 'next' ) {
                                if ( selected.length === 0 ) {
                                        // No item selected, go to the first one
-                                       result = context.data.$container.find( '.suggestions-results div:first' );
+                                       result = context.data.$container.find( '.suggestions-results .suggestions-result:first' );
                                        if ( result.length === 0 && context.data.$container.find( '.suggestions-special' ).html() !== '' ) {
                                                // No suggestion exists, go to the special one directly
                                                result = context.data.$container.find( '.suggestions-special' );
                                        }
                                } else {
                                        result = selected.next();
+                                       if ( !( result.length && result.hasClass( '.suggestions-result' ) ) ) {
+                                               // there is something in the DOM between selected element and the wrapper, bypass it
+                                               result = selected.parents( '.suggestions-results > *' ).next().find( '.suggestions-result' ).eq(0);
+                                       }
+
                                        if ( selected.is( '.suggestions-special' ) ) {
                                                result = $( [] );
                                        } else if (
@@ -503,21 +514,25 @@ $.fn.suggestions = function () {
                                                // textbox loses focus. Instead, listen for a mousedown followed
                                                // by a mouseup on the same div.
                                                .mousedown( function ( e ) {
-                                                       context.data.mouseDownOn = $( e.target ).closest( '.suggestions-results div' );
+                                                       context.data.mouseDownOn = $( e.target ).closest( '.suggestions-results .suggestions-result' );
                                                } )
                                                .mouseup( function ( e ) {
-                                                       var $result = $( e.target ).closest( '.suggestions-results div' ),
+                                                       var $result = $( e.target ).closest( '.suggestions-results .suggestions-result' ),
                                                                $other = context.data.mouseDownOn;
 
                                                        context.data.mouseDownOn = $( [] );
                                                        if ( $result.get( 0 ) !== $other.get( 0 ) ) {
                                                                return;
                                                        }
-                                                       $.suggestions.highlight( context, $result, true );
-                                                       context.data.$container.hide();
-                                                       if ( typeof context.config.result.select === 'function' ) {
-                                                               context.config.result.select.call( $result, context.data.$textbox );
+                                                       // do not interfere with non-left clicks or if modifier keys are pressed (e.g. ctrl-click)
+                                                       if ( !( e.which !== 1 || e.altKey || e.ctrlKey || e.shiftKey || e.metaKey ) ) {
+                                                               $.suggestions.highlight( context, $result, true );
+                                                               context.data.$container.hide();
+                                                               if ( typeof context.config.result.select === 'function' ) {
+                                                                       context.config.result.select.call( $result, context.data.$textbox );
+                                                               }
                                                        }
+                                                       // but still restore focus to the textbox, so that the suggestions will be hidden properly
                                                        context.data.$textbox.focus();
                                                } )
                                )
@@ -537,10 +552,14 @@ $.fn.suggestions = function () {
                                                        if ( $special.get( 0 ) !== $other.get( 0 ) ) {
                                                                return;
                                                        }
-                                                       context.data.$container.hide();
-                                                       if ( typeof context.config.special.select === 'function' ) {
-                                                               context.config.special.select.call( $special, context.data.$textbox );
+                                                       // do not interfere with non-left clicks or if modifier keys are pressed (e.g. ctrl-click)
+                                                       if ( !( e.which !== 1 || e.altKey || e.ctrlKey || e.shiftKey || e.metaKey ) ) {
+                                                               context.data.$container.hide();
+                                                               if ( typeof context.config.special.select === 'function' ) {
+                                                                       context.config.special.select.call( $special, context.data.$textbox );
+                                                               }
                                                        }
+                                                       // but still restore focus to the textbox, so that the suggestions will be hidden properly
                                                        context.data.$textbox.focus();
                                                } )
                                                .mousemove( function ( e ) {
index 6297f9a..8320304 100644 (file)
@@ -86,7 +86,7 @@
                return false;
        }
 
-       function getElementText( node ) {
+       function getElementSortKey( node ) {
                var $node = $( node ),
                        // Use data-sort-value attribute.
                        // Use data() instead of attr() so that live value changes
                        // like charAt, toLowerCase and split are expected.
                        return String( data );
                } else {
-                       return $node.text();
+                       if ( node.tagName.toLowerCase() === 'img' ) {
+                               return $node.attr( 'alt' ) || ''; // handle undefined alt
+                       } else {
+                               return $.map( $.makeArray( node.childNodes ), function( elem ) {
+                                       // 1 is for document.ELEMENT_NODE (the constant is undefined on old browsers)
+                                       if ( elem.nodeType === 1 ) {
+                                               return getElementSortKey( elem );
+                                       } else {
+                                               return $.text( elem );
+                                       }
+                               } ).join( '' );
+                       }
                }
        }
 
        function getTextFromRowAndCellIndex( rows, rowIndex, cellIndex ) {
                if ( rows[rowIndex] && rows[rowIndex].cells[cellIndex] ) {
-                       return $.trim( getElementText( rows[rowIndex].cells[cellIndex] ) );
+                       return $.trim( getElementSortKey( rows[rowIndex].cells[cellIndex] ) );
                } else {
                        return '';
                }
                        cache.row.push( $row );
 
                        for ( var j = 0; j < totalCells; ++j ) {
-                               cols.push( parsers[j].format( getElementText( $row[0].cells[j] ), table, $row[0].cells[j] ) );
+                               cols.push( parsers[j].format( getElementSortKey( $row[0].cells[j] ), table, $row[0].cells[j] ) );
                        }
 
                        cols.push( cache.normalized.length ); // add position for rowCache
index cddf6cc..602aadb 100644 (file)
        }
 
        $( document ).ready( function () {
+               // Do not enable on user .js/.css pages, as there's no sane way of "previewing"
+               // the scripts or styles without reloading the page.
+               if ( $( '#mw-userjsyoucanpreview' ).length || $( '#mw-usercssyoucanpreview' ).length ) {
+                       return;
+               }
+
                // The following elements can change in a preview but are not output
                // by the server when they're empty until the preview reponse.
                // TODO: Make the server output these always (in a hidden state), so we don't
index 7a9ceee..c15fa0d 100644 (file)
@@ -2,13 +2,9 @@
  * This module enables double-click-to-edit functionality
  */
 ( function ( mw, $ ) {
-       $( function () {
-               var url = $( '#ca-edit a' ).attr( 'href' );
-               if ( url ) {
-                       mw.util.$content.dblclick( function ( e ) {
-                               e.preventDefault();
-                               window.location = url;
-                       } );
-               }
+       mw.util.$content.dblclick( function ( e ) {
+               e.preventDefault();
+               // Trigger native HTMLElement click instead of opening URL (bug 43052)
+               $( '#ca-edit a' ).get( 0 ).click();
        } );
 }( mediaWiki, jQuery ) );
index d02d432..61d9d15 100644 (file)
@@ -1,4 +1,4 @@
-/*
+/**
  * JavaScript to enable right click edit functionality.
  * When the user right-clicks in a heading, it will open the
  * edit screen.
@@ -8,23 +8,19 @@ jQuery( function ( $ ) {
        // Don't use the ":has:(.editsection a)" selector because it performs very bad.
        // http://jsperf.com/jq-1-7-2-vs-jq-1-8-1-performance-of-mw-has/2
        $( document ).on( 'contextmenu', 'h1, h2, h3, h4, h5, h6', function ( e ) {
-               var $edit, href;
-
-               $edit = $( this ).find( '.editsection a' );
+               var $edit = $( this ).find( '.editsection a' );
                if ( !$edit.length ) {
                        return;
                }
 
-               // Get href of the editsection link
-               href = $edit.prop( 'href' );
-
                // Headings can contain rich text.
                // Make sure to not block contextmenu events on (other) anchor tags
                // inside the heading (e.g. to do things like copy URL, open in new tab, ..).
                // e.target can be the heading, but it can also be anything inside the heading.
-               if ( href && e.target.nodeName.toLowerCase() !== 'a' ) {
-                       window.location = href;
+               if ( e.target.nodeName.toLowerCase() !== 'a' ) {
+                       // Trigger native HTMLElement click instead of opening URL (bug 43052)
                        e.preventDefault();
+                       $edit.get( 0 ).click();
                }
        } );
 } );
index 514dbd5..f8af0a0 100644 (file)
@@ -77,17 +77,20 @@ var language = {
        /**
         * Converts a number using digitTransformTable.
         *
-        * @param {num} number Value to be converted
+        * @param {Number} number Value to be converted
         * @param {boolean} integer Convert the return value to an integer
+        * @return {Number|String} formatted number
         */
        convertNumber: function ( num, integer ) {
                var i, tmp, transformTable, numberString, convertedNumber;
 
-               if ( !mw.language.digitTransformTable ) {
+               // Set the target Transform table:
+               transformTable = mw.language.getData( mw.config.get( 'wgUserLanguage' ), 'digitTransformTable' );
+
+               if ( !transformTable ) {
                        return num;
                }
-               // Set the target Transform table:
-               transformTable = mw.language.digitTransformTable;
+
                // Check if the "restore" to Latin number flag is set:
                if ( integer ) {
                        if ( parseInt( num, 10 ) === num ) {
index 077adcd..2a158df 100644 (file)
@@ -2,8 +2,7 @@
  * JavaScript for Special:Block
  */
 ( function ( mw, $ ) {
-       $( function ( $ ) {
-
+       $( document ).ready( function () {
                var $blockTarget = $( '#mw-bi-target' ),
                        $anonOnlyRow = $( '#mw-input-wpHardBlock' ).closest( 'tr' ),
                        $enableAutoblockRow = $( '#mw-input-wpAutoBlock' ).closest( 'tr' ),
                        $watchUser = $( '#mw-input-wpWatch' ).closest( 'tr' );
 
                function updateBlockOptions( instant ) {
-                       if ( !$blockTarget.length ) {
-                               return;
-                       }
-
                        var blocktarget = $.trim( $blockTarget.val() ),
                                isEmpty = blocktarget === '',
                                isIp = mw.util.isIPv4Address( blocktarget, true ) || mw.util.isIPv6Address( blocktarget, true ),
                        }
                }
 
-               // Bind functions so they're checked whenever stuff changes
-               $blockTarget.keyup( updateBlockOptions );
+               if ( $blockTarget.length ) {
+                       // Bind functions so they're checked whenever stuff changes
+                       $blockTarget.keyup( updateBlockOptions );
 
-               // Call them now to set initial state (ie. Special:Block/Foobar?wpBlockExpiry=2+hours)
-               updateBlockOptions( /* instant= */ true );
+                       // Call them now to set initial state (ie. Special:Block/Foobar?wpBlockExpiry=2+hours)
+                       updateBlockOptions( /* instant= */ true );
+               }
        } );
 }( mediaWiki, jQuery ) );
 
index cab0bbd..14c2f03 100644 (file)
@@ -1,42 +1,42 @@
-/*
+/**
  * JavaScript for Special:ChangeEmail
  */
 ( function ( mw, $ ) {
+       /**
+        * Given an email validity status (true, false, null) update the label CSS class
+        */
+       function updateMailValidityLabel( mail ) {
+               var isValid = mw.util.validateEmail( mail ),
+                       $label = $( '#mw-emailaddress-validity' );
 
-/**
- * Given an email validity status (true, false, null) update the label CSS class
- */
-function updateMailValidityLabel( mail ) {
-       var     isValid = mw.util.validateEmail( mail ),
-               $label = $( '#mw-emailaddress-validity' );
-
-       // We allow empty address
-       if( isValid === null ) {
-               $label.text( '' ).removeClass( 'valid invalid' );
+               // We allow empty address
+               if ( isValid === null ) {
+                       $label.text( '' ).removeClass( 'valid invalid' );
 
-       // Valid
-       } else if ( isValid ) {
-               $label.text( mw.msg( 'email-address-validity-valid' ) ).addClass( 'valid' ).removeClass( 'invalid' );
+               // Valid
+               } else if ( isValid ) {
+                       $label.text( mw.msg( 'email-address-validity-valid' ) ).addClass( 'valid' ).removeClass( 'invalid' );
 
-       // Not valid
-       } else {
-               $label.text( mw.msg( 'email-address-validity-invalid' ) ).addClass( 'invalid' ).removeClass( 'valid' );
+               // Not valid
+               } else {
+                       $label.text( mw.msg( 'email-address-validity-invalid' ) ).addClass( 'invalid' ).removeClass( 'valid' );
+               }
        }
-}
 
-$( document ).ready( 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 direct feedback if it was invalid onblur
-       $( '#wpNewEmail' ).one( 'blur', function () {
-               if ( $( '#mw-emailaddress-validity' ).length === 0 ) {
-                       $(this).after( '<label for="wpNewEmail" id="mw-emailaddress-validity"></label>' );
-               }
-               updateMailValidityLabel( $(this).val() );
-               $(this).keyup( function () {
-                       updateMailValidityLabel( $(this).val() );
+       $( document ).ready( 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 () {
+                               updateMailValidityLabel( $this.val() );
+                       } );
                } );
        } );
-} );
-
 }( mediaWiki, jQuery ) );
index 3589ea1..fcdeba1 100644 (file)
@@ -31,22 +31,22 @@ table.mw-enhanced-rc td.mw-enhanced-rc-nested {
        float: none;
 }
 
-/* If JS is disabled, the arrow shouldn't be shown */
-.client-nojs .mw-enhancedchanges-arrow.mw-collapsible-toggle {
+/* If JS is disabled, the arrows or the placeholder space shouldn't be shown */
+.client-nojs .mw-enhancedchanges-arrow-space {
        display: none;
 }
 
-.mw-enhancedchanges-arrow {
+.mw-enhancedchanges-arrow-space {
        display: inline-block;
        *display: inline; /* IE7 and below */
        zoom: 1;
        width: 15px;
        height: 15px;
-       cursor: pointer;
 }
 
-.mw-enhancedchanges-arrow.mw-enhancedchanges-arrow-space {
-       background: none;
+/* let it look like it is clickable */
+.mw-enhancedchanges-arrow.mw-collapsible-toggle {
+       cursor: pointer;
 }
 
 .mw-enhancedchanges-arrow.mw-collapsible-toggle-collapsed {
index 7a55806..f719d07 100644 (file)
@@ -1,7 +1,6 @@
 /**
  * JavaScript for Special:MovePage
  */
-
-jQuery( function( $ ) {
+jQuery( document ).ready( function ( $ ) {
        $( '#wpReason, #wpNewTitleMain' ).byteLimit();
 } );
index d8d092b..46384a8 100644 (file)
@@ -1,4 +1,4 @@
-/*
+/**
  * JavaScript for Special:Preferences
  */
 jQuery( document ).ready( function ( $ ) {
@@ -8,20 +8,19 @@ jQuery( document ).ready( function ( $ ) {
 
        $( '#prefsubmit' ).attr( 'id', 'prefcontrol' );
 
-               $preftoc = $('<ul id="preftoc"></ul>'),
-               $preferences = $( '#preferences' )
-                       .addClass( 'jsprefs' )
-                       .before( $preftoc ),
-               $fieldsets = $preferences.children( 'fieldset' )
-                       .hide()
-                       .addClass( 'prefsection' ),
-               $legends = $fieldsets
-                       .children( 'legend' )
-                       .addClass( 'mainLegend' );
+       $preftoc = $('<ul id="preftoc"></ul>');
+       $preferences = $( '#preferences' )
+               .addClass( 'jsprefs' )
+               .before( $preftoc );
+       $fieldsets = $preferences.children( 'fieldset' )
+               .hide()
+               .addClass( 'prefsection' );
+       $legends = $fieldsets
+               .children( 'legend' )
+               .addClass( 'mainLegend' );
 
        /**
-        * It uses document.getElementById for security reasons (html injections in
-        * jQuery()).
+        * It uses document.getElementById for security reasons (HTML injections in $()).
         *
         * @param String name: the name of a tab without the prefix ("mw-prefsection-")
         * @param String mode: [optional] A hash will be set according to the current
index 3cba9d3..d1c1354 100644 (file)
@@ -2,19 +2,16 @@
  * JavaScript for Special:RecentChanges
  */
 ( function ( mw, $ ) {
-       var rc,
-               $checkboxes,
-               $select;
+       var rc, $checkboxes, $select;
 
        rc = {
-
                /**
                 * Handler to disable/enable the namespace selector checkboxes when the
                 * special 'all' namespace is selected/unselected respectively.
                 */
                updateCheckboxes: function () {
                        // The option element for the 'all' namespace has an empty value
-                       var isAllNS = $select.find( 'option:selected' ).val() === '';
+                       var isAllNS = $select.val() === '';
 
                        // Iterates over checkboxes and propagate the selected option
                        $checkboxes.prop( 'disabled', isAllNS );
@@ -30,7 +27,7 @@
                }
        };
 
-       $( rc.init );
+       $( document ).ready( rc.init );
 
        mw.special.recentchanges = rc;
 
index 0cca26d..2dab302 100644 (file)
@@ -1,8 +1,8 @@
-/*
+/**
  * JavaScript for Special:Search
  */
-( function ( $, mw ) {
-       $( function () {
+( function ( mw, $ ) {
+       $( document ).ready( function () {
                var $checkboxes, $headerLinks;
 
                // Emulate HTML5 autofocus behavior in non HTML5 compliant browsers
@@ -50,4 +50,4 @@
 
        } );
 
-}( jQuery, mediaWiki ) );
+}( mediaWiki, jQuery ) );
index c6e5d61..d20aab5 100644 (file)
@@ -1,11 +1,11 @@
-/*
- * JavaScript for Specical:Undelete
+/**
+ * JavaScript for Special:Undelete
  */
 jQuery( document ).ready( function ( $ ) {
        $( '#mw-undelete-invert' ).click( function ( e ) {
-               e.preventDefault();
                $( '#undelete input[type="checkbox"]' ).prop( 'checked', function ( i, val ) {
                        return !val;
                } );
+               e.preventDefault();
        } );
 } );
index b05fd71..75532f1 100644 (file)
@@ -6,7 +6,7 @@
        /**
         * Add a preview to the upload form
         */
-       $( function ( $ ) {
+       $( document ).ready( function () {
                /**
                 * Is the FileAPI available with sufficient functionality?
                 */
@@ -25,7 +25,7 @@
                 * @return boolean
                 */
                function fileIsPreviewable( file ) {
-                       var     known = ['image/png', 'image/gif', 'image/jpeg', 'image/svg+xml'],
+                       var known = ['image/png', 'image/gif', 'image/jpeg', 'image/svg+xml'],
                                tooHuge = 10 * 1024 * 1024;
                        return ( $.inArray( file.type, known ) !== -1 ) && file.size > 0 && file.size < tooHuge;
                }
@@ -62,7 +62,7 @@
                        $( '#mw-htmlform-source' ).parent().prepend( thumb );
 
                        fetchPreview( file, function ( dataURL ) {
-                               var     img = new Image(),
+                               var img = new Image(),
                                        rotation = 0;
 
                                if ( meta && meta.tiff && meta.tiff.Orientation ) {
        /**
         * Disable all upload source fields except the selected one
         */
-       $( function ( $ ) {
+       $( document ).ready( function () {
                var i, $row,
                        $rows = $( '.mw-htmlform-field-UploadSourceField' );
 
diff --git a/resources/mediawiki.special/mediawiki.special.userLogin.signup.js b/resources/mediawiki.special/mediawiki.special.userLogin.signup.js
new file mode 100644 (file)
index 0000000..bba4260
--- /dev/null
@@ -0,0 +1,10 @@
+/**
+ * JavaScript for Special:UserLogin/signup
+ */
+jQuery( document ).ready( function ( $ ) {
+       $( '#wpCreateaccountMail' )
+               .on( 'change', function() {
+                       $( '.mw-row-password' ).toggle( !$( this ).attr( 'checked' ) );
+               } )
+               .trigger( 'change' );
+} );
index 2cb4c3a..643e5c3 100644 (file)
@@ -76,8 +76,8 @@
 
        // Regular expressions to parse many common URIs.
        var parser = {
-               strict: /^(?:([^:\/?#]+):)?(?:\/\/(?:(?:([^:@]*)(?::([^:@]*))?)?@)?([^:\/?#]*)(?::(\d*))?)?((?:[^?#\/]*\/)*[^?#]*)(?:\?([^#]*))?(?:#(.*))?/,
-               loose:  /^(?:(?![^:@]+:[^:@\/]*@)([^:\/?#.]+):)?(?:\/\/)?(?:(?:([^:@]*)(?::([^:@]*))?)?@)?([^:\/?#]*)(?::(\d*))?((?:\/(?:[^?#](?![^?#\/]*\.[^?#\/.]+(?:[?#]|$)))*\/?)?[^?#\/]*)(?:\?([^#]*))?(?:#(.*))?/
+               strict: /^(?:([^:\/?#]+):)?(?:\/\/(?:(?:([^:@\/?#]*)(?::([^:@\/?#]*))?)?@)?([^:\/?#]*)(?::(\d*))?)?((?:[^?#\/]*\/)*[^?#]*)(?:\?([^#]*))?(?:#(.*))?/,
+               loose:  /^(?:(?![^:@]+:[^:@\/]*@)([^:\/?#.]+):)?(?:\/\/)?(?:(?:([^:@\/?#]*)(?::([^:@\/?#]*))?)?@)?([^:\/?#]*)(?::(\d*))?((?:\/(?:[^?#](?![^?#\/]*\.[^?#\/.]+(?:[?#]|$)))*\/?)?[^?#\/]*)(?:\?([^#]*))?(?:#(.*))?/
        },
 
        // The order here matches the order of captured matches in the above parser regexes.
index 6e2d3b4..934e906 100644 (file)
                 */
                return function () {
                        var $target = this.empty();
+                       // TODO: Simply $target.append( failableParserFn( arguments ).contents() )
+                       // or Simply $target.append( failableParserFn( arguments ) )
                        $.each( failableParserFn( arguments ).contents(), function ( i, node ) {
                                $target.append( node );
                        } );
                                regularLiteral, regularLiteralWithoutBar, regularLiteralWithoutSpace, backslash, anyCharacter,
                                escapedOrLiteralWithoutSpace, escapedOrLiteralWithoutBar, escapedOrRegularLiteral,
                                whitespace, dollar, digits,
-                               openExtlink, closeExtlink, openLink, closeLink, templateName, pipe, colon,
+                               openExtlink, closeExtlink, wikilinkPage, wikilinkContents, openLink, closeLink, templateName, pipe, colon,
                                templateContents, openTemplate, closeTemplate,
                                nonWhitespaceExpression, paramExpression, expression, result;
 
                                 var result = nOrMore( 1, escapedOrLiteralWithoutBar )();
                                 return result === null ? null : result.join('');
                        }
+
+                       // Used for wikilink page names.  Like literalWithoutBar, but
+                       // without allowing escapes.
+                       function unescapedLiteralWithoutBar() {
+                               var result = nOrMore( 1, regularLiteralWithoutBar )();
+                               return result === null ? null : result.join('');
+                       }
+
                        function literal() {
                                 var result = nOrMore( 1, escapedOrRegularLiteral )();
                                 return result === null ? null : result.join('');
                        }
                        openLink = makeStringParser( '[[' );
                        closeLink = makeStringParser( ']]' );
+                       pipe = makeStringParser( '|' );
+
+                       function template() {
+                               var result = sequence( [
+                                       openTemplate,
+                                       templateContents,
+                                       closeTemplate
+                               ] );
+                               return result === null ? null : result[1];
+                       }
+
+                       wikilinkPage = choice( [
+                               unescapedLiteralWithoutBar,
+                               template
+                       ] );
+
+                       function pipedWikilink() {
+                               var result = sequence( [
+                                       wikilinkPage,
+                                       pipe,
+                                       expression
+                               ] );
+                               return result === null ? null : [ result[0], result[2] ];
+                       }
+
+                       wikilinkContents = choice( [
+                               pipedWikilink,
+                               wikilinkPage // unpiped link
+                       ] );
+
                        function link() {
-                               var result, parsedResult;
+                               var result, parsedResult, parsedLinkContents;
                                result = null;
+
                                parsedResult = sequence( [
                                        openLink,
-                                       expression,
+                                       wikilinkContents,
                                        closeLink
                                ] );
                                if ( parsedResult !== null ) {
-                                        result = [ 'WLINK', parsedResult[1] ];
+                                       parsedLinkContents = parsedResult[1];
+                                       result = [ 'WLINK' ].concat( parsedLinkContents );
                                }
                                return result;
                        }
                                // use a CONCAT operator if there are multiple nodes, otherwise return the first node, raw.
                                return expr.length > 1 ? [ 'CONCAT' ].concat( expr ) : expr[0];
                        }
-                       pipe = makeStringParser( '|' );
+
                        function templateWithReplacement() {
                                var result = sequence( [
                                        templateName,
                        ] );
                        openTemplate = makeStringParser('{{');
                        closeTemplate = makeStringParser('}}');
-                       function template() {
-                               var result = sequence( [
-                                       openTemplate,
-                                       templateContents,
-                                       closeTemplate
-                               ] );
-                               return result === null ? null : result[1];
-                       }
                        nonWhitespaceExpression = choice( [
                                template,
                                link,
                                replacement,
                                literalWithoutBar
                        ] );
+
                        expression = choice( [
                                template,
                                link,
                                replacement,
                                literal
                        ] );
+
                        function start() {
                                var result = nOrMore( 0, expression )();
                                if ( result === null ) {
                                                $span.append( childNode );
                                        } );
                                } else {
-                                       // strings, integers, anything else
-                                       $span.append( node );
+                                       // Let jQuery append nodes, arrays of nodes and jQuery objects
+                                       // other things (strings, numbers, ..) are appended as text nodes (not as HTML strings)
+                                       $span.append( $.type( node ) === 'object' ? node : document.createTextNode( node ) );
                                }
                        } );
                        return $span;
                 * Note that we expect the parsed parameter to be zero-based. i.e. $1 should have become [ 0 ].
                 * if the specified parameter is not found return the same string
                 * (e.g. "$99" -> parameter 98 -> not found -> return "$99" )
-                * TODO throw error if nodes.length > 1 ?
+                * TODO: Throw error if nodes.length > 1 ?
                 * @param {Array} of one element, integer, n >= 0
                 * @return {String} replacement
                 */
                        var index = parseInt( nodes[0], 10 );
 
                        if ( index < replacements.length ) {
-                               if ( typeof arg === 'string' ) {
-                                       // replacement is a string, escape it
-                                       return mw.html.escape( replacements[index] );
-                               } else {
-                                       // replacement is no string, don't touch!
-                                       return replacements[index];
-                               }
+                               return replacements[index];
                        } else {
                                // index not found, fallback to displaying variable
                                return '$' + ( index + 1 );
 
                /**
                 * Transform wiki-link
-                * TODO unimplemented
+                *
+                * TODO:
+                * It only handles basic cases, either no pipe, or a pipe with an explicit
+                * anchor.
+                *
+                * It does not attempt to handle features like the pipe trick.
+                * However, the pipe trick should usually not be present in wikitext retrieved
+                * from the server, since the replacement is done at save time.
+                * It may, though, if the wikitext appears in extension-controlled content.
+                *
                 * @param nodes
                 */
-               wlink: function () {
-                       return 'unimplemented';
+               wlink: function ( nodes ) {
+                       var page, anchor, url;
+
+                       page = nodes[0];
+                       url = mw.util.wikiGetlink( page );
+
+                       // [[Some Page]] or [[Namespace:Some Page]]
+                       if ( nodes.length === 1 ) {
+                               anchor = page;
+                       }
+
+                       /*
+                        * [[Some Page|anchor text]] or
+                        * [[Namespace:Some Page|anchor]
+                        */
+                       else {
+                               anchor = nodes[1];
+                       }
+
+                       return $( '<a />' ).attr( {
+                               title: page,
+                               href: url
+                       } ).text( anchor );
                },
 
                /**
                        var form = nodes[0],
                                word = nodes[1];
                        return word && form && this.language.convertGrammar( word, form );
+               },
+
+               /**
+                * Tranform parsed structure into a int: (interface language) message include
+                * Invoked by putting {{MediaWiki:othermessage}} into a message
+                * @param {Array} of nodes
+                * @return {string} Other message
+                */
+               int: function ( nodes ) {
+                       return mw.jqueryMsg.getMessageFunction()( nodes[0].toLowerCase() );
+               },
+
+               /**
+                * Takes an unformatted number (arab, no group separators and . as decimal separator)
+                * and outputs it in the localized digit script and formatted with decimal
+                * separator, according to the current language
+                * @param {Array} of nodes
+                * @return {Number|String} formatted number
+                */
+               formatnum: function ( nodes ) {
+                       var isInteger = ( nodes[1] && nodes[1] === 'R' ) ? true : false,
+                               number = nodes[0];
+
+                       return this.language.convertNumber( number, isInteger );
                }
        };
        // Deprecated! don't rely on gM existing.
                // Caching is somewhat problematic, because we do need different message functions for different maps, so
                // we'd have to cache the parser as a member of this.map, which sounds a bit ugly.
                // Do not use mw.jqueryMsg unless required
-               if ( this.map.get( this.key ).indexOf( '{{' ) < 0 ) {
+               if ( !/\{\{|\[/.test(this.map.get( this.key ) ) ) {
                        // Fall back to mw.msg's simple parser
                        return oldParser.apply( this );
                }
index e059ed1..7879d6f 100644 (file)
@@ -37,6 +37,7 @@ templateParam
 templateName
   = tn:[A-Za-z_]+ { return tn.join('').toUpperCase() }
 
+/* TODO: Update to reflect separate piped and unpiped handling */
 link
   = "[[" w:expression "]]" { return [ 'WLINK', w ]; }
 
diff --git a/resources/mediawiki/mediawiki.searchSuggest.css b/resources/mediawiki/mediawiki.searchSuggest.css
new file mode 100644 (file)
index 0000000..0fb862b
--- /dev/null
@@ -0,0 +1,16 @@
+/* Make sure the links are not underlined or colored, ever. */
+/* There is already a :focus / :hover indication on the <div>. */
+.suggestions a.mw-searchSuggest-link,
+.suggestions a.mw-searchSuggest-link:hover,
+.suggestions a.mw-searchSuggest-link:active,
+.suggestions a.mw-searchSuggest-link:focus {
+       text-decoration: none;
+       color: black;
+}
+
+.suggestions-result-current a.mw-searchSuggest-link,
+.suggestions-result-current a.mw-searchSuggest-link:hover,
+.suggestions-result-current a.mw-searchSuggest-link:active,
+.suggestions-result-current a.mw-searchSuggest-link:focus {
+       color: white;
+}
index 99a5557..2bc7cea 100644 (file)
@@ -3,7 +3,7 @@
  */
 ( function ( mw, $ ) {
        $( document ).ready( function ( $ ) {
-               var map, searchboxesSelectors,
+               var map, resultRenderCache, searchboxesSelectors,
                        // Region where the suggestions box will appear directly below
                        // (using the same width). Can be a container element or the input
                        // itself, depending on what suits best in the environment.
                        return;
                }
 
+               // Compute form data for search suggestions functionality.
+               function computeResultRenderCache( context ) {
+                       var $form, formAction, baseHref, linkParams;
+
+                       // Compute common parameters for links' hrefs
+                       $form = context.config.$region.closest( 'form' );
+
+                       formAction = $form.attr( 'action' );
+                       baseHref = formAction + ( formAction.match(/\?/) ? '&' : '?' );
+
+                       linkParams = {};
+                       $.each( $form.serializeArray(), function ( idx, obj ) {
+                               linkParams[ obj.name ] = obj.value;
+                       } );
+
+                       return {
+                               textParam: context.data.$textbox.attr( 'name' ),
+                               linkParams: linkParams,
+                               baseHref: baseHref
+                       };
+               }
+
+               // The function used to render the suggestions.
+               function renderFunction( text, context ) {
+                       if ( !resultRenderCache ) {
+                               resultRenderCache = computeResultRenderCache( context );
+                       }
+
+                       // linkParams object is modified and reused
+                       resultRenderCache.linkParams[ resultRenderCache.textParam ] = text;
+
+                       // this is the container <div>, jQueryfied
+                       this
+                               .append(
+                                       // the <span> is needed for $.autoEllipsis to work
+                                       $( '<span>' )
+                                               .css( 'whiteSpace', 'nowrap' )
+                                               .text( text )
+                               )
+                               .wrap(
+                                       $( '<a>' )
+                                               .attr( 'href', resultRenderCache.baseHref + $.param( resultRenderCache.linkParams ) )
+                                               .addClass( 'mw-searchSuggest-link' )
+                               );
+               }
+
+               function specialRenderFunction( query, context ) {
+                       var $el = this;
+
+                       if ( !resultRenderCache ) {
+                               resultRenderCache = computeResultRenderCache( context );
+                       }
+
+                       // linkParams object is modified and reused
+                       resultRenderCache.linkParams[ resultRenderCache.textParam ] = query;
+
+                       if ( $el.children().length === 0 ) {
+                               $el
+                                       .append(
+                                               $( '<div>' )
+                                                       .addClass( 'special-label' )
+                                                       .text( mw.msg( 'searchsuggest-containing' ) ),
+                                               $( '<div>' )
+                                                       .addClass( 'special-query' )
+                                                       .text( query )
+                                                       .autoEllipsis()
+                                       )
+                                       .show();
+                       } else {
+                               $el.find( '.special-query' )
+                                       .text( query )
+                                       .autoEllipsis();
+                       }
+
+                       if ( $el.parent().hasClass( 'mw-searchSuggest-link' ) ) {
+                               $el.parent().attr( 'href', resultRenderCache.baseHref + $.param( resultRenderCache.linkParams ) + '&fulltext=1' );
+                       } else {
+                               $el.wrap(
+                                       $( '<a>' )
+                                               .attr( 'href', resultRenderCache.baseHref + $.param( resultRenderCache.linkParams ) + '&fulltext=1' )
+                                               .addClass( 'mw-searchSuggest-link' )
+                               );
+                       }
+               }
+
                // General suggestions functionality for all search boxes
                searchboxesSelectors = [
                        // Primary searchbox on every page in standard skins
                                        }
                                },
                                result: {
+                                       render: renderFunction,
                                        select: function ( $input ) {
                                                $input.closest( 'form' ).submit();
                                        }
                // Special suggestions functionality for skin-provided search box
                $searchInput.suggestions( {
                        result: {
+                               render: renderFunction,
                                select: function ( $input ) {
                                        $input.closest( 'form' ).submit();
                                }
                        },
                        special: {
-                               render: function ( query ) {
-                                       var $el = this;
-                                       if ( $el.children().length === 0 ) {
-                                               $el
-                                                       .append(
-                                                               $( '<div>' )
-                                                                       .addClass( 'special-label' )
-                                                                       .text( mw.msg( 'searchsuggest-containing' ) ),
-                                                               $( '<div>' )
-                                                                       .addClass( 'special-query' )
-                                                                       .text( query )
-                                                                       .autoEllipsis()
-                                                       )
-                                                       .show();
-                                       } else {
-                                               $el.find( '.special-query' )
-                                                       .text( query )
-                                                       .autoEllipsis();
-                                       }
-                               },
+                               render: specialRenderFunction,
                                select: function ( $input ) {
                                        $input.closest( 'form' ).append(
                                                $( '<input type="hidden" name="fulltext" value="1"/>' )
index 05ffcc0..9b2faa8 100644 (file)
                                        profile.platform === 'mac'
                                                // Chrome on Mac
                                                ? 'ctrl-option-'
-                                               : profile.platform === 'win'
-                                                       // Chrome on Windows
-                                                       // (both alt- and alt-shift work, but alt-f triggers Chrome wrench menu
-                                                       // which alt-shift-f does not)
-                                                       ? 'alt-shift-'
-                                                       // Chrome on other (Ubuntu?)
-                                                       : 'alt-'
+                                               // Chrome on Windows or Linux
+                                               // (both alt- and alt-shift work, but alt with E, D, F etc does not
+                                               // work since they are browser shortcuts)
+                                               : 'alt-shift-'
                                );
 
                        // Non-Windows Safari with webkit_version > 526
index 0be614a..09aec79 100644 (file)
@@ -93,4 +93,3 @@ function unixLineEndings( $var ) {
        }
        return $var;
 }
-
index 54dada3..75b807a 100644 (file)
@@ -36,7 +36,7 @@ class SkinChick extends SkinTemplate {
        /**
         * @param $out OutputPage
         */
-       function setupSkinUserCss( OutputPage $out ){
+       function setupSkinUserCss( OutputPage $out ) {
                parent::setupSkinUserCss( $out );
 
                $out->addModuleStyles( 'skins.chick' );
index 56c6b08..21b07f7 100644 (file)
@@ -38,7 +38,7 @@ class SkinCologneBlue extends SkinTemplate {
        /**
         * @param $out OutputPage
         */
-       function setupSkinUserCss( OutputPage $out ){
+       function setupSkinUserCss( OutputPage $out ) {
                $out->addModuleStyles( 'mediawiki.legacy.shared' );
                $out->addModuleStyles( 'mediawiki.legacy.oldshared' );
                $out->addModuleStyles( 'skins.cologneblue' );
@@ -290,7 +290,7 @@ class CologneBlueTemplate extends BaseTemplate {
                <div id="siteNotice"><?php echo $this->getSkin()->getSiteNotice() ?></div>
                <?php } ?>
                <h1 id="firstHeading" lang="<?php
-                       $this->data['pageLanguage'] = $this->getSkin()->getTitle()->getPageLanguage()->getCode();
+                       $this->data['pageLanguage'] = $this->getSkin()->getTitle()->getPageViewLanguage()->getCode();
                        $this->html( 'pageLanguage' );
                ?>"><span dir="auto"><?php echo $this->data['title'] ?></span></h1>
                <?php if ( $this->translator->translate( 'tagline' ) ) { ?>
index 900bdd8..9dbefb1 100644 (file)
@@ -37,7 +37,7 @@ class SkinModern extends SkinTemplate {
        /**
         * @param $out OutputPage
         */
-       function setupSkinUserCss( OutputPage $out ){
+       function setupSkinUserCss( OutputPage $out ) {
                parent::setupSkinUserCss( $out );
                $out->addModuleStyles ('skins.modern');
        }
@@ -66,7 +66,7 @@ class ModernTemplate extends MonoBookTemplate {
 
        <!-- heading -->
        <div id="mw_header"><h1 id="firstHeading" lang="<?php
-               $this->data['pageLanguage'] = $this->getSkin()->getTitle()->getPageLanguage()->getCode();
+               $this->data['pageLanguage'] = $this->getSkin()->getTitle()->getPageViewLanguage()->getCode();
                $this->html( 'pageLanguage' );
        ?>"><span dir="auto"><?php $this->html('title') ?></span></h1></div>
 
index 1b262a6..f03d31b 100644 (file)
@@ -85,7 +85,7 @@ class MonoBookTemplate extends BaseTemplate {
        <?php if($this->data['sitenotice']) { ?><div id="siteNotice"><?php $this->html('sitenotice') ?></div><?php } ?>
 
        <h1 id="firstHeading" class="firstHeading" lang="<?php
-               $this->data['pageLanguage'] = $this->getSkin()->getTitle()->getPageLanguage()->getCode();
+               $this->data['pageLanguage'] = $this->getSkin()->getTitle()->getPageViewLanguage()->getCode();
                $this->html( 'pageLanguage' );
        ?>"><span dir="auto"><?php $this->html('title') ?></span></h1>
        <div id="bodyContent" class="mw-body">
index c3f73e5..3028915 100644 (file)
@@ -36,7 +36,7 @@ class SkinNostalgia extends SkinLegacy {
        /**
         * @param $out OutputPage
         */
-       function setupSkinUserCss( OutputPage $out ){
+       function setupSkinUserCss( OutputPage $out ) {
                parent::setupSkinUserCss( $out );
                $out->addModuleStyles( 'skins.nostalgia' );
        }
index 49a0ad5..5b358e0 100644 (file)
@@ -37,7 +37,7 @@ class SkinStandard extends SkinLegacy {
        /**
         * @param $out OutputPage
         */
-       function setupSkinUserCss( OutputPage $out ){
+       function setupSkinUserCss( OutputPage $out ) {
                parent::setupSkinUserCss( $out );
                $out->addModuleStyles( 'skins.standard' );
 
index 8d685bd..c4349c6 100644 (file)
@@ -65,7 +65,7 @@ class SkinVector extends SkinTemplate {
         * fixes bug 22916
         * @param $out OutputPage object
         */
-       function setupSkinUserCss( OutputPage $out ){
+       function setupSkinUserCss( OutputPage $out ) {
                parent::setupSkinUserCss( $out );
                $out->addModuleStyles( 'skins.vector' );
        }
@@ -166,7 +166,7 @@ class VectorTemplate extends BaseTemplate {
                        <?php endif; ?>
                        <!-- firstHeading -->
                        <h1 id="firstHeading" class="firstHeading" lang="<?php
-                               $this->data['pageLanguage'] = $this->getSkin()->getTitle()->getPageLanguage()->getCode();
+                               $this->data['pageLanguage'] = $this->getSkin()->getTitle()->getPageViewLanguage()->getCode();
                                $this->html( 'pageLanguage' );
                        ?>"><span dir="auto"><?php $this->html( 'title' ) ?></span></h1>
                        <!-- /firstHeading -->
index 48dd943..6cb213f 100644 (file)
@@ -125,7 +125,9 @@ li#privacy,
 .mw-hidden-catlinks,
 tr.mw-metadata-show-hide-extended,
 span.mw-filepage-other-resolutions,
-#filetoc {
+#filetoc,
+.usermessage,
+#mw-navigation {
        /* Hides all the elements irrelevant for printing */
        display: none;
 }
index 34d3357..aa75a2a 100644 (file)
@@ -313,6 +313,11 @@ input#wpSummary {
        padding-left: 0.25em;
        border-left: none;
 }
+
+/* (bug 5346) make category redirects italic */
+.catlinks li a.mw-redirect {
+       font-style: italic;
+}
 /**
  * Hidden categories
  */
index 8373b51..264ba69 100644 (file)
@@ -77,7 +77,7 @@ $wgAutoloadClasses += array(
        'GenericArrayObjectTest' => "$testDir/phpunit/includes/libs/GenericArrayObjectTest.php",
 
        # tests/phpunit/includes/site
-       'SiteObjectTest' => "$testDir/phpunit/includes/site/SiteObjectTest.php",
+       'SiteTest' => "$testDir/phpunit/includes/site/SiteTest.php",
        'TestSites' => "$testDir/phpunit/includes/site/TestSites.php",
 
        # tests/phpunit/languages
@@ -101,4 +101,3 @@ $wgAutoloadClasses += array(
        'SeleniumTestSuite' => "$testDir/selenium/SeleniumTestSuite.php",
        'SeleniumConfig' => "$testDir/selenium/SeleniumConfig.php",
 );
-
index ea1b290..db3c84a 100644 (file)
@@ -966,7 +966,7 @@ class ParserTest {
        private function teardownGlobals() {
                RepoGroup::destroySingleton();
                FileBackendGroup::destroySingleton();
-               LockManagerGroup::destroySingleton();
+               LockManagerGroup::destroySingletons();
                LinkCache::singleton()->clear();
 
                foreach ( $this->savedGlobals as $var => $val ) {
index af4d218..c25f158 100644 (file)
@@ -549,6 +549,15 @@ nowiki 3
 
 !! end
 
+!! test
+Entities inside <nowiki>
+!! input
+<nowiki>&lt;</nowiki>
+!! result
+<p>&lt;
+</p>
+!! end
+
 
 ###
 ### Comments
@@ -785,6 +794,24 @@ x <div>foo</div> z
 
 !! end
 
+!! test
+Empty lines between block tags to test open p-tags are closed between the block tags
+!! input
+<div></div>
+
+
+<div></div>a
+
+b
+!! result
+<div></div>
+<p><br />
+</p>
+<div></div>a
+<p>b
+</p>
+!! end
+
 ###
 ### Preformatted text
 ###
@@ -889,6 +916,15 @@ Bug 6200: Preformatted in <blockquote>
 
 !! end
 
+!! test
+Entities inside <pre>
+!! input
+<pre>&lt;</pre>
+!! result
+<pre>&lt;</pre>
+
+!! end
+
 !! test
 <pre> with forbidden attribute values (bug 3202)
 !! input
@@ -1207,6 +1243,23 @@ c
 
 !!end
 
+!!test
+2c. Indent-Pre and tables (bug 42252)
+!!input
+{|
+ |+ foo
+ !  | bar
+|}
+!!result
+<table>
+<caption> foo
+</caption>
+<tr>
+<th> bar
+</th></tr></table>
+
+!!end
+
 !!test
 3a. Indent-Pre and block tags (single-line html)
 !!input
@@ -1291,6 +1344,20 @@ c
 
 !!end
 
+!! test
+5. White-space in indent-pre
+NOTE: the white-space char on 2nd line is significant
+!! input
+ a<br/>
+ b
+!! result
+<pre>a<br />
+
+b
+</pre>
+!! end
+
 ###
 ### HTML-pre (some to spec PHP parser behavior and some Parsoid-RT-centric)
 ###
@@ -2724,6 +2791,45 @@ A table with nothing but a caption
 
 !! end
 
+!! test
+A table with caption with default-spaced attributes and a table row
+!! input
+{|
+|+ style="color: red;" | caption1
+|-
+| foo
+|}
+!! result
+<table>
+<caption style="color: red;"> caption1
+</caption>
+<tr>
+<td> foo
+</td></tr></table>
+
+!! end
+
+!! test
+A table with captions with non-default spaced attributes and a table row
+!! input
+{|
+|+style="color: red;"|caption2
+|+ style="color: red;"| caption3
+|-
+| foo
+|}
+!! result
+<table>
+<caption style="color: red;">caption2
+</caption>
+<caption style="color: red;"> caption3
+</caption>
+<tr>
+<td> foo
+</td></tr></table>
+
+!! end
+
 !! test
 Table td-cell syntax variations
 !! input
@@ -3232,6 +3338,28 @@ Link with suffix
 </p>
 !! end
 
+!! article
+prefixed article
+!! text
+Some text
+!! endarticle
+
+!! test
+Bug 43661: Piped links with identical prefixes
+!! input
+[[prefixed article|prefixed articles with spaces]]
+
+[[prefixed article|prefixed articlesaoeu]]
+
+[[Main Page|Main Page test]]
+!! result
+<p><a href="/wiki/Prefixed_article" title="Prefixed article">prefixed articles with spaces</a>
+</p><p><a href="/wiki/Prefixed_article" title="Prefixed article">prefixed articlesaoeu</a>
+</p><p><a href="/wiki/Main_Page" title="Main Page">Main Page test</a>
+</p>
+!! end
+
+
 !! test
 Link with HTML entity in suffix / tail
 !! input
@@ -3602,6 +3730,24 @@ language=kaa
 </p>
 !! end
 
+!! test
+Parsoid-centric test: Whitespace in ext- and wiki-links should be preserved
+!! input
+[[Foo|  bar]]
+
+[[Foo|  ''bar'']]
+
+[http://wp.org   foo]
+
+[http://wp.org   ''foo'']
+!! result
+<p><a href="/index.php?title=Foo&amp;action=edit&amp;redlink=1" class="new" title="Foo (page does not exist)">  bar</a>
+</p><p><a href="/index.php?title=Foo&amp;action=edit&amp;redlink=1" class="new" title="Foo (page does not exist)">  <i>bar</i></a>
+</p><p><a rel="nofollow" class="external text" href="http://wp.org">foo</a>
+</p><p><a rel="nofollow" class="external text" href="http://wp.org"><i>foo</i></a>
+</p>
+!! end
+
 ###
 ### Interwiki links (see maintenance/interwiki.sql)
 ###
@@ -4064,6 +4210,73 @@ Nested lists 8 (multiple nesting transitions)
 
 !! end
 
+!! test
+Unbalanced closing block tags break a list
+(Disabled since php parser generates broken html -- relies on Tidy to fix up)
+!! options
+disabled
+!! input
+<div>
+*a</div><div>
+*b</div>
+!! result
+<div>
+<ul><li>a
+</li></ul></div><div>
+<ul><li>b
+</li></ul></div>
+!! end
+
+!! test
+Unbalanced closing non-block tags don't break a list
+(Disabled since php parser generates broken html -- relies on Tidy to fix up)
+!! options
+disabled
+!! input
+<span>
+*a</span><span>
+*b</span>
+!! result
+<p><span></span>
+</p>
+<ul><li>a<span></span>
+</li><li>b
+</li></ul>
+!! end
+
+!! test
+Unclosed formatting tags that straddle lists are closed and reopened
+(Disabled since php parser generates broken html -- relies on Tidy to fix up)
+!! options
+disabled
+!! input
+# <s> a
+# b </s>
+!! result
+<ol><li> <s> a </s>
+</li><li> <s> b </s>
+</li></ol>
+!! end
+
+!!test
+List embedded in a non-block tag
+(Ugly Parsoid output -- worth fixing; Disabled for PHP parser since it relies on Tidy)
+!! options
+disabled
+!!input
+<small>
+* foo
+</small>
+!!result
+<p><small></small></p>
+<small>
+<ul>
+<li> foo</li>
+</ul>
+</small>
+<p><small></small></p>
+!!end
+
 !! test
 List items are not parsed correctly following a <pre> block (bug 785)
 !! input
@@ -4553,7 +4766,7 @@ Magic links: RFC (bug 479)
 !! input
 RFC 822
 !! result
-<p><a class="external mw-magiclink-rfc" href="//tools.ietf.org/html/rfc822">RFC 822</a>
+<p><a class="external mw-magiclink-rfc" rel="nofollow" href="//tools.ietf.org/html/rfc822">RFC 822</a>
 </p>
 !! end
 
@@ -4571,7 +4784,7 @@ Magic links: PMID incorrectly converts space to underscore
 !! input
 PMID 1234
 !! result
-<p><a class="external mw-magiclink-pmid" href="//www.ncbi.nlm.nih.gov/pubmed/1234?dopt=Abstract">PMID 1234</a>
+<p><a class="external mw-magiclink-pmid" rel="nofollow" href="//www.ncbi.nlm.nih.gov/pubmed/1234?dopt=Abstract">PMID 1234</a>
 </p>
 !! end
 
@@ -4878,8 +5091,14 @@ Main Page
 Template as link source
 !! input
 [[{{linktest2}}]]
+
+[[{{linktest2}}|Main Page]]
+
+[[{{linktest2}}]]Page
 !! result
 <p><a href="/wiki/Main_Page" title="Main Page">Main Page</a>
+</p><p><a href="/wiki/Main_Page" title="Main Page">Main Page</a>
+</p><p><a href="/wiki/Main_Page" title="Main Page">Main Page</a>Page
 </p>
 !! end
 
@@ -5393,8 +5612,23 @@ Templates: Links: 2. Generation of link href
 Templates: Links: 3. Generation of part of a link href
 !!input
 [[Fo{{echo|o}}|bar]]
+
+[[Foo{{echo|bar}}]]
+
+[[Foo{{echo|bar}}baz]]
+
+[[Foo{{echo|bar}}|bar]]
+
+[[:Foo{{echo|bar}}]]
+
+[[:Foo{{echo|bar}}|bar]]
 !!result
 <p><a href="/index.php?title=Foo&amp;action=edit&amp;redlink=1" class="new" title="Foo (page does not exist)">bar</a>
+</p><p><a href="/index.php?title=Foobar&amp;action=edit&amp;redlink=1" class="new" title="Foobar (page does not exist)">Foobar</a>
+</p><p><a href="/index.php?title=Foobarbaz&amp;action=edit&amp;redlink=1" class="new" title="Foobarbaz (page does not exist)">Foobarbaz</a>
+</p><p><a href="/index.php?title=Foobar&amp;action=edit&amp;redlink=1" class="new" title="Foobar (page does not exist)">bar</a>
+</p><p><a href="/index.php?title=Foobar&amp;action=edit&amp;redlink=1" class="new" title="Foobar (page does not exist)">Foobar</a>
+</p><p><a href="/index.php?title=Foobar&amp;action=edit&amp;redlink=1" class="new" title="Foobar (page does not exist)">bar</a>
 </p>
 !!end
 
@@ -6710,7 +6944,7 @@ BUG 1887: A RFC with a thumbnail
 !! input
 [[Image:foobar.jpg|thumb|This is RFC 12354]]
 !! result
-<div class="thumb tright"><div class="thumbinner" style="width:182px;"><a href="/wiki/File:Foobar.jpg" class="image"><img alt="" src="http://example.com/images/thumb/3/3a/Foobar.jpg/180px-Foobar.jpg" width="180" height="20" class="thumbimage" srcset="http://example.com/images/thumb/3/3a/Foobar.jpg/270px-Foobar.jpg 1.5x, http://example.com/images/thumb/3/3a/Foobar.jpg/360px-Foobar.jpg 2x" /></a>  <div class="thumbcaption"><div class="magnify"><a href="/wiki/File:Foobar.jpg" class="internal" title="Enlarge"><img src="/skins/common/images/magnify-clip.png" width="15" height="11" alt="" /></a></div>This is <a class="external mw-magiclink-rfc" href="//tools.ietf.org/html/rfc12354">RFC 12354</a></div></div></div>
+<div class="thumb tright"><div class="thumbinner" style="width:182px;"><a href="/wiki/File:Foobar.jpg" class="image"><img alt="" src="http://example.com/images/thumb/3/3a/Foobar.jpg/180px-Foobar.jpg" width="180" height="20" class="thumbimage" srcset="http://example.com/images/thumb/3/3a/Foobar.jpg/270px-Foobar.jpg 1.5x, http://example.com/images/thumb/3/3a/Foobar.jpg/360px-Foobar.jpg 2x" /></a>  <div class="thumbcaption"><div class="magnify"><a href="/wiki/File:Foobar.jpg" class="internal" title="Enlarge"><img src="/skins/common/images/magnify-clip.png" width="15" height="11" alt="" /></a></div>This is <a class="external mw-magiclink-rfc" rel="nofollow" href="//tools.ietf.org/html/rfc12354">RFC 12354</a></div></div></div>
 
 !! end
 
@@ -7710,6 +7944,15 @@ I always thought &eacute; was a cute letter.
 </p>
 !! end
 
+!! test
+text with entity-escaped character entity-like string: eacute
+!! input
+I always thought &amp;eacute; was a cute letter.
+!! result
+<p>I always thought &amp;eacute; was a cute letter.
+</p>
+!! end
+
 !! test
 text with undefined character entity: xacute
 !! input
@@ -10311,7 +10554,7 @@ Double RFC
 !! input
 RFC RFC 1234
 !! result
-<p>RFC <a class="external mw-magiclink-rfc" href="//tools.ietf.org/html/rfc1234">RFC 1234</a>
+<p>RFC <a class="external mw-magiclink-rfc" rel="nofollow" href="//tools.ietf.org/html/rfc1234">RFC 1234</a>
 </p>
 !! end
 
@@ -10329,7 +10572,7 @@ RFC code coverage
 !! input
 RFC   983&#x20;987
 !! result
-<p><a class="external mw-magiclink-rfc" href="//tools.ietf.org/html/rfc983">RFC 983</a>&#x20;987
+<p><a class="external mw-magiclink-rfc" rel="nofollow" href="//tools.ietf.org/html/rfc983">RFC 983</a>&#x20;987
 </p>
 !! end
 
@@ -10789,6 +11032,22 @@ Both [[Dunav]] and [[Дунав]] are names for this river.
 </p>
 !!end
 
+!! article
+Дуна
+!! text
+content
+!! endarticle
+
+!! test
+Link to another existing title shouldn't be parsed as self-link even if it's a variant of this title
+!! options
+title=[[Duna]] language=sr
+!! input
+[[Дуна]] is not a self-link while [[Duna]] and [[Dуна]] are still self-links.
+!! result
+<p><a href="/wiki/%D0%94%D1%83%D0%BD%D0%B0" title="Дуна">Дуна</a> is not a self-link while <strong class="selflink">Duna</strong> and <strong class="selflink">Dуна</strong> are still self-links.
+</p>
+!! end
 
 !! test
 Link to pages in language variants
@@ -10861,6 +11120,29 @@ language=sr cat
 !! end
 
 
+!! article
+Category:分类
+!! text
+blah
+!! endarticle
+
+!! article
+Category:分類
+!! text
+blah
+!! endarticle
+
+!! test
+Don't convert blue categorylinks to another variant (bug 33210)
+!! options
+language=zh cat
+!! input
+[[A]][[Category:分类]]
+!! result
+<a href="/wiki/Category:%E5%88%86%E7%B1%BB" title="Category:分类">分类</a>
+!! end
+
+
 !! test
 Stripping -{}- tags (language variants)
 !! options
@@ -10933,6 +11215,20 @@ language=zh variant=zh-tw
 !! end
 
 
+!! test
+Conversion around HTML tags
+!! options
+language=sr variant=sr-ec
+!! input
+-{H|span=>sr-ec:script;title=>sr-ec:src;}-
+<span title="La-{sr-el:L;sr-ec:C;}-tin">ski</span>
+!! result
+<p>
+<span title="ЛаCтин">ски</span>
+</p>
+!! end
+
+
 !! test
 Explicit session-wise language variant mapping (A flag and - flag)
 !! options
@@ -10987,6 +11283,20 @@ China
 </p>
 !! end
 
+!! test
+Recursive conversion of alt and title attrs shouldn't clear converter state
+!! options
+language=zh variant=zh-cn showtitle
+!! input
+-{H|zh-cn:Exclamation;zh-tw:exclamation;}-
+Should be stripped-{T|zh-cn:China;zh-tw:Taiwan}-<span title="exclamation">!</span>
+!! result
+China
+<p>
+Should be stripped<span title="Exclamation">!</span>
+</p>
+!! end
+
 !! test
 Bug 24072: more test on conversion rule for title
 !! options
@@ -12418,6 +12728,23 @@ File:foobar.jpg|caption|alt=galleryalt|link=" onclick="alert('malicious javascri
 
 !! end
 
+!!test
+Gallery with invalid title as link (bug 43964)
+!! input
+<gallery>
+File:foobar.jpg|link=<
+</gallery>
+!! result
+<ul class="gallery">
+               <li class="gallerybox" style="width: 155px"><div style="width: 155px">
+                       <div class="thumb" style="width: 150px;"><div style="margin:68px auto;"><a href="/wiki/File:Foobar.jpg" class="image"><img alt="Foobar.jpg" src="http://example.com/images/thumb/3/3a/Foobar.jpg/120px-Foobar.jpg" width="120" height="14" /></a></div></div>
+                       <div class="gallerytext">
+                       </div>
+               </div></li>
+</ul>
+
+!! end
+
 !!test
 Language parser function
 !! input
@@ -13003,6 +13330,23 @@ disabled
 </tbody></table>
 !! end
 
+!! test
+Tables: 4d. No escaping needed
+!! input
+{|
+||+1
+||-2
+|}
+!! result
+<table>
+<tr>
+<td>+1
+</td>
+<td>-2
+</td></tr></table>
+
+!! end
+
 #### --------------- Links ---------------
 #### 1. Quote marks in link text
 #### 2. Wikilinks: Escapes needed
@@ -13259,6 +13603,137 @@ disabled
 </p>
 !! end
 
+!! test
+HTML tag with necessary entities in attributes
+!! input
+<span title="&amp;amp;">foo</span>
+!! result
+<p><span title="&amp;amp;">foo</span>
+</p>
+!! end
+
+!! test
+HTML tag with 'unnecessary' entity encoding in attributes
+!! input
+<span title="&amp;">foo</span>
+!! result
+<p><span title="&amp;">foo</span>
+</p>
+!! end
+
+!! test
+HTML tag with broken attribute value quoting
+!! input
+<span title="Hello world>Foo</span>
+!! result
+<p><span>Foo</span>
+</p>
+!! end
+
+!! test
+Parsoid-only: HTML tag with broken attribute value quoting
+!! options
+disabled
+!! input
+<span title="Hello world>Foo</span>
+!! result
+<p><span title="Hello world">Foo</span>
+</p>
+!! end
+
+!! test
+Table with broken attribute value quoting
+!! input
+{|
+| title="Hello world|Foo
+|}
+!! result
+<table>
+<tr>
+<td>Foo
+</td></tr></table>
+
+!! end
+
+!! test
+Table with broken attribute value quoting on consecutive lines
+!! input
+{|
+| title="Hello world|Foo
+| style="color:red|Bar
+|}
+!! result
+<table>
+<tr>
+<td>Foo
+</td>
+<td>Bar
+</td></tr></table>
+
+!! end
+
+!! test
+Parsoid-only: Table with broken attribute value quoting on consecutive lines
+!! options
+disabled
+!! input
+{|
+| title="Hello world|Foo
+| style="color:red|Bar
+|}
+!! result
+<table>
+<tr>
+<td title="Hello world">Foo
+</td><td style="color: red;">Bar
+</td></tr></table>
+
+!! end
+
+!!test
+Accept empty td cell attribute
+!!input
+{|
+| align="center" | foo ||  |
+|}
+!!result
+<table>
+<tr>
+<td align="center"> foo </td>
+<td>
+</td></tr></table>
+
+!!end
+
+!!test
+Non-empty attributes in th-cells
+!!input
+{|
+! Foo !! style="color: red" | Bar
+|}
+!!result
+<table>
+<tr>
+<th> Foo </th>
+<th style="color: red"> Bar
+</th></tr></table>
+
+!!end
+
+!!test
+Accept empty attributes in th-cells
+!!input
+{|
+!| foo !!| bar
+|}
+!!result
+<table>
+<tr>
+<th> foo </th>
+<th> bar
+</th></tr></table>
+
+!!end
 
 TODO:
 more images
index 8a55dae..c3e2a30 100644 (file)
@@ -2,7 +2,7 @@
 .DEFAULT: warning
 
 SHELL = /bin/sh
-CONFIG_FILE = $(shell pwd)/suite.xml
+CONFIG_FILE = ${PWD}/suite.xml
 PHP = php
 PU = ${PHP} phpunit.php --configuration ${CONFIG_FILE} ${FLAGS}
 
index b675000..0434bb3 100644 (file)
@@ -2,10 +2,11 @@
 
 class MediaWikiPHPUnitCommand extends PHPUnit_TextUI_Command {
 
-       static $additionalOptions = array(
+       public static $additionalOptions = array(
                'regex=' => false,
                'file=' => false,
                'use-filebackend=' => false,
+               'use-bagostuff=' => false,
                'keep-uploads' => false,
                'use-normal-tables' => false,
                'reuse-db' => false,
index cbf9a8e..dfc5881 100644 (file)
@@ -71,7 +71,7 @@ abstract class MediaWikiTestCase extends PHPUnit_Framework_TestCase {
                $this->backupStaticAttributes = false;
        }
 
-       function run( PHPUnit_Framework_TestResult $result = NULL ) {
+       function run( PHPUnit_Framework_TestResult $result = null ) {
                /* Some functions require some kind of caching, and will end up using the db,
                 * which we can't allow, as that would open a new connection for mysql.
                 * Replace with a HashBag. They would not be going to persist anyway.
@@ -365,7 +365,7 @@ abstract class MediaWikiTestCase extends PHPUnit_Framework_TestCase {
                                'page_id' => 0,
                                'page_namespace' => 0,
                                'page_title' => ' ',
-                               'page_restrictions' => NULL,
+                               'page_restrictions' => null,
                                'page_counter' => 0,
                                'page_is_redirect' => 0,
                                'page_is_new' => 0,
@@ -513,12 +513,12 @@ abstract class MediaWikiTestCase extends PHPUnit_Framework_TestCase {
                return $this->assertTrue( $value == '', $msg );
        }
 
-       static private function unprefixTable( $tableName ) {
+       private static function unprefixTable( $tableName ) {
                global $wgDBprefix;
                return substr( $tableName, strlen( $wgDBprefix ) );
        }
 
-       static private function isNotUnittest( $table ) {
+       private static function isNotUnittest( $table ) {
                return strpos( $table, 'unittest_' ) !== 0;
        }
 
@@ -862,6 +862,46 @@ abstract class MediaWikiTestCase extends PHPUnit_Framework_TestCase {
                }
        }
 
+       /**
+        * Check whether we have the 'gzip' commandline utility, will skip
+        * the test whenever "gzip -V" fails.
+        *
+        * Result is cached at the process level.
+        *
+        * @return bool
+        *
+        * @since 1.21
+        */
+       protected function checkHasGzip() {
+               static $haveGzip;
+
+               if( $haveGzip === null ) {
+                       $retval = null;
+                       wfShellExec( 'gzip -V', $retval );
+                       $haveGzip = ($retval === 0);
+               }
+
+               if( !$haveGzip ) {
+                       $this->markTestSkipped( "Skip test, requires the gzip utility in PATH" );
+               }
+
+               return $haveGzip;
+       }
+
+       /**
+        * Check if $extName is a loaded PHP extension, will skip the
+        * test whenever it is not loaded.
+        *
+        * @since 1.21
+        */
+       protected function checkPHPExtension( $extName ) {
+               $loaded = extension_loaded( $extName );
+               if( ! $loaded ) {
+                       $this->markTestSkipped( "PHP extension '$extName' is not loaded, skipping." );
+               }
+               return $loaded;
+       }
+
        /**
         * Asserts that an exception of the specified type occurs when running
         * the provided code.
index 2d1243d..8ea9c68 100644 (file)
@@ -9,4 +9,3 @@ $result = array( 'xmp-exif' =>
                'GPSVersionID' => '2.2.0.0'
         )
 );
-
index 29931c8..bdd4853 100644 (file)
@@ -167,7 +167,7 @@ class BlockTest extends MediaWikiLangTestCase {
                // Reload block from DB
                $userBlock = Block::newFromTarget( $username );
                $this->assertTrue(
-                       (bool) $block->prevents( 'createaccount' ),
+                       (bool)$block->prevents( 'createaccount' ),
                        "Block object in DB should prevents 'createaccount'"
                );
 
@@ -180,7 +180,7 @@ class BlockTest extends MediaWikiLangTestCase {
                // Reload user
                $u = User::newFromName( $username );
                $this->assertTrue(
-                       (bool) $u->isBlockedFromCreateAccount(),
+                       (bool)$u->isBlockedFromCreateAccount(),
                        "Our sandbox user '$username' should NOT be able to create account"
                );
        }
@@ -223,7 +223,7 @@ class BlockTest extends MediaWikiLangTestCase {
 
                $block = Block::newFromID( $res['id'] );
                $this->assertEquals( 'UserOnForeignWiki', $block->getTarget()->getName(), 'Correct blockee name' );
-               $this->assertEquals( '14146',  $block->getTarget()->getId(), 'Correct blockee id' );
+               $this->assertEquals( '14146', $block->getTarget()->getId(), 'Correct blockee id' );
                $this->assertEquals( 'MetaWikiUser', $block->getBlocker(), 'Correct blocker name' );
                $this->assertEquals( 'MetaWikiUser', $block->getByName(), 'Correct blocker name' );
                $this->assertEquals( 0, $block->getBy(), 'Correct blocker id' );
index 32c84ef..add585d 100644 (file)
@@ -3,7 +3,6 @@
 /**
  * Test the CDB reader/writer
  */
-
 class CdbTest extends MediaWikiTestCase {
 
        protected function setUp() {
@@ -13,6 +12,9 @@ class CdbTest extends MediaWikiTestCase {
                }
        }
 
+       /**
+        * @group medium
+        */
        public function testCdb() {
                $dir = wfTempDir();
                if ( !is_writable( $dir ) ) {
index 361b412..dcd9ddd 100644 (file)
@@ -22,7 +22,7 @@ class DiffHistoryBlobTest extends MediaWikiTestCase {
         * @dataProvider provideXdiffAdler32
         */
        function testXdiffAdler32( $input ) {
-               $xdiffHash = substr( xdiff_string_rabdiff( $input, '' ),  0, 4 );
+               $xdiffHash = substr( xdiff_string_rabdiff( $input, '' ), 0, 4 );
                $dhb = new DiffHistoryBlob;
                $myHash = $dhb->xdiffAdler32( $input );
                $this->assertSame( bin2hex( $xdiffHash ), bin2hex( $myHash ),
index fe6c60d..99544e7 100644 (file)
@@ -78,4 +78,4 @@ class ExternalStoreFOO {
 
                return $this->data[$cluster][$id];
        }
-}
\ No newline at end of file
+}
index ca1615e..46aa6fc 100644 (file)
@@ -40,7 +40,7 @@ class ExtraParserTest extends MediaWikiTestCase {
        /* Test the parser entry points */
        function testParse() {
                $title = Title::newFromText( __FUNCTION__ );
-               $parserOutput = $this->parser->parse( "Test\n{{Foo}}\n{{Bar}}" , $title, $this->options );
+               $parserOutput = $this->parser->parse( "Test\n{{Foo}}\n{{Bar}}", $title, $this->options );
                $this->assertEquals( "<p>Test\nContent of <i>Template:Foo</i>\nContent of <i>Template:Bar</i>\n</p>", $parserOutput->getText() );
        }
        
@@ -54,7 +54,7 @@ class ExtraParserTest extends MediaWikiTestCase {
        
        function testPreprocess() {
                $title = Title::newFromText( __FUNCTION__ );
-               $outputText = $this->parser->preprocess( "Test\n{{Foo}}\n{{Bar}}" , $title, $this->options );
+               $outputText = $this->parser->preprocess( "Test\n{{Foo}}\n{{Bar}}", $title, $this->options );
                
                $this->assertEquals( "Test\nContent of ''Template:Foo''\nContent of ''Template:Bar''", $outputText );
        }
@@ -140,7 +140,7 @@ class ExtraParserTest extends MediaWikiTestCase {
                $catName =  wfMessage( 'broken-file-category' )->inContentLanguage()->text();
                $cat = Title::makeTitleSafe( NS_CATEGORY, $catName );
                $expected = array( $cat->getDBkey() );
-               $parserOutput = $this->parser->parse( "[[file:nonexistent]]" , $title, $this->options );
+               $parserOutput = $this->parser->parse( "[[file:nonexistent]]", $title, $this->options );
                $result = $parserOutput->getCategoryLinks();
                $this->assertEquals( $expected, $result );
        }
@@ -151,7 +151,7 @@ class ExtraParserTest extends MediaWikiTestCase {
        function testTrackingCategorySpecial() {
                // Special pages shouldn't have tracking cats.
                $title = SpecialPage::getTitleFor( 'Contributions' );
-               $parserOutput = $this->parser->parse( "[[file:nonexistent]]" , $title, $this->options );
+               $parserOutput = $this->parser->parse( "[[file:nonexistent]]", $title, $this->options );
                $result = $parserOutput->getCategoryLinks();
                $this->assertEmpty( $result );
        }
index af28f79..99f8fb7 100644 (file)
@@ -61,12 +61,12 @@ class FormOptionsInitializationTest extends MediaWikiTestCase {
        }
 
        public function testAddIntegers() {
-               $this->object->add( 'one',     1 ); 
-               $this->object->add( 'negone', -1 ); 
+               $this->object->add( 'one', 1 );
+               $this->object->add( 'negone', -1 );
                $this->assertEquals(
                        array(
                                'negone' => array(
-                                       'default'  => -1, 
+                                       'default'  => -1,
                                        'value' => null,
                                        'consumed' => false,
                                        'type'   => FormOptions::INT,
index d4e3c5e..bdc5f12 100644 (file)
@@ -33,8 +33,8 @@ class FormOptionsTest extends MediaWikiTestCase {
                $this->object = new FormOptions;
                $this->object->add( 'string1', 'string one' );
                $this->object->add( 'string2', 'string two' );
-               $this->object->add( 'integer',  0 );
-               $this->object->add( 'intnull',  0, FormOptions::INTNULL );
+               $this->object->add( 'integer', 0 );
+               $this->object->add( 'intnull', 0, FormOptions::INTNULL );
        }
 
        /** Helpers for testGuessType() */
index 0dc18a2..105ce6d 100644 (file)
@@ -132,14 +132,14 @@ class GlobalTest extends MediaWikiTestCase {
         * @dataProvider provideArrayToCGI
         */
        function testArrayToCGI( $array, $result ) {
-               $this->assertEquals( $result, wfArrayToCGI( $array ) );
+               $this->assertEquals( $result, wfArrayToCgi( $array ) );
        }
 
 
        function testArrayToCGI2() {
                $this->assertEquals(
                        "baz=bar&foo=bar",
-                       wfArrayToCGI(
+                       wfArrayToCgi(
                                array( 'baz' => 'bar' ),
                                array( 'foo' => 'bar', 'baz' => 'overridden value' ) ) );
        }
@@ -183,7 +183,7 @@ class GlobalTest extends MediaWikiTestCase {
         * @dataProvider provideCgiRoundTrip
         */
        function testCgiRoundTrip( $cgi ) {
-               $this->assertEquals( $cgi, wfArrayToCGI( wfCgiToArray( $cgi ) ) );
+               $this->assertEquals( $cgi, wfArrayToCgi( wfCgiToArray( $cgi ) ) );
        }
 
        function testMimeTypeMatch() {
@@ -496,6 +496,7 @@ class GlobalTest extends MediaWikiTestCase {
         * @param String $expectedText: Text after merge has been completed
         *
         * @dataProvider provideMerge()
+        * @group medium
         */
        public function testMerge( $old, $mine, $yours, $expectedMergeResult, $expectedText ) {
                $this->checkHasDiff3();
@@ -685,4 +686,3 @@ class GlobalTest extends MediaWikiTestCase {
        }
        /* TODO: many more! */
 }
-
diff --git a/tests/phpunit/includes/GlobalFunctions/wfBaseConvertTest.php b/tests/phpunit/includes/GlobalFunctions/wfBaseConvertTest.php
new file mode 100644 (file)
index 0000000..21e5032
--- /dev/null
@@ -0,0 +1,182 @@
+<?php
+
+/**
+ * Tests for wfBaseConvert()
+ */
+class wfBaseConvertTest extends MediaWikiTestCase {
+       public static function provideSingleDigitConversions() {
+               return array(
+                       //      2    3    5    8   10   16   36
+                       array( '0', '0', '0', '0', '0', '0', '0' ),
+                       array( '1', '1', '1', '1', '1', '1', '1' ),
+                       array( '10', '2', '2', '2', '2', '2', '2' ),
+                       array( '11', '10', '3', '3', '3', '3', '3' ),
+                       array( '100', '11', '4', '4', '4', '4', '4' ),
+                       array( '101', '12', '10', '5', '5', '5', '5' ),
+                       array( '110', '20', '11', '6', '6', '6', '6' ),
+                       array( '111', '21', '12', '7', '7', '7', '7' ),
+                       array( '1000', '22', '13', '10', '8', '8', '8' ),
+                       array( '1001', '100', '14', '11', '9', '9', '9' ),
+                       array( '1010', '101', '20', '12', '10', 'a', 'a' ),
+                       array( '1011', '102', '21', '13', '11', 'b', 'b' ),
+                       array( '1100', '110', '22', '14', '12', 'c', 'c' ),
+                       array( '1101', '111', '23', '15', '13', 'd', 'd' ),
+                       array( '1110', '112', '24', '16', '14', 'e', 'e' ),
+                       array( '1111', '120', '30', '17', '15', 'f', 'f' ),
+                       array( '10000', '121', '31', '20', '16', '10', 'g' ),
+                       array( '10001', '122', '32', '21', '17', '11', 'h' ),
+                       array( '10010', '200', '33', '22', '18', '12', 'i' ),
+                       array( '10011', '201', '34', '23', '19', '13', 'j' ),
+                       array( '10100', '202', '40', '24', '20', '14', 'k' ),
+                       array( '10101', '210', '41', '25', '21', '15', 'l' ),
+                       array( '10110', '211', '42', '26', '22', '16', 'm' ),
+                       array( '10111', '212', '43', '27', '23', '17', 'n' ),
+                       array( '11000', '220', '44', '30', '24', '18', 'o' ),
+                       array( '11001', '221', '100', '31', '25', '19', 'p' ),
+                       array( '11010', '222', '101', '32', '26', '1a', 'q' ),
+                       array( '11011', '1000', '102', '33', '27', '1b', 'r' ),
+                       array( '11100', '1001', '103', '34', '28', '1c', 's' ),
+                       array( '11101', '1002', '104', '35', '29', '1d', 't' ),
+                       array( '11110', '1010', '110', '36', '30', '1e', 'u' ),
+                       array( '11111', '1011', '111', '37', '31', '1f', 'v' ),
+                       array( '100000', '1012', '112', '40', '32', '20', 'w' ),
+                       array( '100001', '1020', '113', '41', '33', '21', 'x' ),
+                       array( '100010', '1021', '114', '42', '34', '22', 'y' ),
+                       array( '100011', '1022', '120', '43', '35', '23', 'z' )
+               );
+       }
+
+       /**
+        * @dataProvider provideSingleDigitConversions
+        */
+       public function testDigitToBase2( $base2, $base3, $base5, $base8, $base10, $base16, $base36 ) {
+               $this->assertSame( $base2, wfBaseConvert( $base3, '3', '2' ) );
+               $this->assertSame( $base2, wfBaseConvert( $base5, '5', '2' ) );
+               $this->assertSame( $base2, wfBaseConvert( $base8, '8', '2' ) );
+               $this->assertSame( $base2, wfBaseConvert( $base10, '10', '2' ) );
+               $this->assertSame( $base2, wfBaseConvert( $base16, '16', '2' ) );
+               $this->assertSame( $base2, wfBaseConvert( $base36, '36', '2' ) );
+       }
+
+       /**
+        * @dataProvider provideSingleDigitConversions
+        */
+       public function testDigitToBase3( $base2, $base3, $base5, $base8, $base10, $base16, $base36 ) {
+               $this->assertSame( $base3, wfBaseConvert( $base2, '2', '3' ) );
+               $this->assertSame( $base3, wfBaseConvert( $base5, '5', '3' ) );
+               $this->assertSame( $base3, wfBaseConvert( $base8, '8', '3' ) );
+               $this->assertSame( $base3, wfBaseConvert( $base10, '10', '3' ) );
+               $this->assertSame( $base3, wfBaseConvert( $base16, '16', '3' ) );
+               $this->assertSame( $base3, wfBaseConvert( $base36, '36', '3' ) );
+       }
+
+       /**
+        * @dataProvider provideSingleDigitConversions
+        */
+       public function testDigitToBase5( $base2, $base3, $base5, $base8, $base10, $base16, $base36 ) {
+               $this->assertSame( $base5, wfBaseConvert( $base2, '2', '5' ) );
+               $this->assertSame( $base5, wfBaseConvert( $base3, '3', '5' ) );
+               $this->assertSame( $base5, wfBaseConvert( $base8, '8', '5' ) );
+               $this->assertSame( $base5, wfBaseConvert( $base10, '10', '5' ) );
+               $this->assertSame( $base5, wfBaseConvert( $base16, '16', '5' ) );
+               $this->assertSame( $base5, wfBaseConvert( $base36, '36', '5' ) );
+       }
+
+       /**
+        * @dataProvider provideSingleDigitConversions
+        */
+       public function testDigitToBase8( $base2, $base3, $base5, $base8, $base10, $base16, $base36 ) {
+               $this->assertSame( $base8, wfBaseConvert( $base2, '2', '8' ) );
+               $this->assertSame( $base8, wfBaseConvert( $base3, '3', '8' ) );
+               $this->assertSame( $base8, wfBaseConvert( $base5, '5', '8' ) );
+               $this->assertSame( $base8, wfBaseConvert( $base10, '10', '8' ) );
+               $this->assertSame( $base8, wfBaseConvert( $base16, '16', '8' ) );
+               $this->assertSame( $base8, wfBaseConvert( $base36, '36', '8' ) );
+       }
+
+       /**
+        * @dataProvider provideSingleDigitConversions
+        */
+       public function testDigitToBase10( $base2, $base3, $base5, $base8, $base10, $base16, $base36 ) {
+               $this->assertSame( $base10, wfBaseConvert( $base2, '2', '10' ) );
+               $this->assertSame( $base10, wfBaseConvert( $base3, '3', '10' ) );
+               $this->assertSame( $base10, wfBaseConvert( $base5, '5', '10' ) );
+               $this->assertSame( $base10, wfBaseConvert( $base8, '8', '10' ) );
+               $this->assertSame( $base10, wfBaseConvert( $base16, '16', '10' ) );
+               $this->assertSame( $base10, wfBaseConvert( $base36, '36', '10' ) );
+       }
+
+       /**
+        * @dataProvider provideSingleDigitConversions
+        */
+       public function testDigitToBase16( $base2, $base3, $base5, $base8, $base10, $base16, $base36 ) {
+               $this->assertSame( $base16, wfBaseConvert( $base2, '2', '16' ) );
+               $this->assertSame( $base16, wfBaseConvert( $base3, '3', '16' ) );
+               $this->assertSame( $base16, wfBaseConvert( $base5, '5', '16' ) );
+               $this->assertSame( $base16, wfBaseConvert( $base8, '8', '16' ) );
+               $this->assertSame( $base16, wfBaseConvert( $base10, '10', '16' ) );
+               $this->assertSame( $base16, wfBaseConvert( $base36, '36', '16' ) );
+       }
+
+       /**
+        * @dataProvider provideSingleDigitConversions
+        */
+       public function testDigitToBase36( $base2, $base3, $base5, $base8, $base10, $base16, $base36 ) {
+               $this->assertSame( $base36, wfBaseConvert( $base2, '2', '36' ) );
+               $this->assertSame( $base36, wfBaseConvert( $base3, '3', '36' ) );
+               $this->assertSame( $base36, wfBaseConvert( $base5, '5', '36' ) );
+               $this->assertSame( $base36, wfBaseConvert( $base8, '8', '36' ) );
+               $this->assertSame( $base36, wfBaseConvert( $base10, '10', '36' ) );
+               $this->assertSame( $base36, wfBaseConvert( $base16, '16', '36' ) );
+       }
+
+       public function testLargeNumber() {
+               $this->assertSame( '1100110001111010000000101110100', wfBaseConvert( 'sd89ys', 36, 2 ) );
+               $this->assertSame( '11102112120221201101', wfBaseConvert( 'sd89ys', 36, 3 ) );
+               $this->assertSame( '12003102232400', wfBaseConvert( 'sd89ys', 36, 5 ) );
+               $this->assertSame( '14617200564', wfBaseConvert( 'sd89ys', 36, 8 ) );
+               $this->assertSame( '1715274100', wfBaseConvert( 'sd89ys', 36, 10 ) );
+               $this->assertSame( '663d0174', wfBaseConvert( 'sd89ys', 36, 16 ) );
+       }
+
+       public static function provideNumbers() {
+               $x = array();
+               $chars = '0123456789abcdefghijklmnopqrstuvwxyz';
+               for( $i = 0; $i < 50; $i++ ) {
+                       $base = mt_rand( 2, 36 );
+                       $len = mt_rand( 10, 100 );
+
+                       $str = '';
+                       for( $j = 0; $j < $len; $j++ ) {
+                               $str .= $chars[mt_rand(0, $base - 1)];
+                       }
+
+                       $x[] = array( $base, $str );
+               }
+               return $x;
+       }
+
+       /**
+        * @dataProvider provideNumbers
+        */
+       public function testIdentity( $base, $number ) {
+               $this->assertSame( $number, wfBaseConvert( $number, $base, $base, strlen( $number ) ) );
+       }
+
+       public function testInvalid() {
+               $this->assertFalse( wfBaseConvert( '101', 1, 15 ) );
+               $this->assertFalse( wfBaseConvert( '101', 15, 1 ) );
+               $this->assertFalse( wfBaseConvert( '101', 37, 15 ) );
+               $this->assertFalse( wfBaseConvert( '101', 15, 37 ) );
+               $this->assertFalse( wfBaseConvert( 'abcde', 10, 11 ) );
+               $this->assertFalse( wfBaseConvert( '12930', 2, 10 ) );
+               $this->assertFalse( wfBaseConvert( '101', 'abc', 15 ) );
+               $this->assertFalse( wfBaseConvert( '101', 15, 'abc' ) );
+       }
+
+       public function testPadding() {
+               $number = "10101010101";
+               $this->assertSame( strlen( $number ) + 5, strlen( wfBaseConvert( $number, 2, 2, strlen( $number ) + 5 ) ) );
+               $this->assertSame( strlen( $number ), strlen( wfBaseConvert( $number, 2, 2, strlen( $number ) - 5 ) ) );
+       }
+}
index 4c4c4c0..15f3507 100644 (file)
@@ -32,4 +32,3 @@ class wfGetCaller extends MediaWikiTestCase {
                        $this->assertEquals( "wfGetCaller::intermediateFunction", self::intermediateFunction( $i + 1, $i ) );
        }
 }
-
index e455f0f..89e789b 100644 (file)
@@ -111,7 +111,7 @@ class HooksTest extends MediaWikiTestCase {
 class NothingClass {
        public $calls = 0;
 
-       static public function someStatic( &$foo, &$bar ) {
+       public static function someStatic( &$foo, &$bar ) {
                $foo = 'bah';
                return true;
        }
index b49de65..92a1c9c 100644 (file)
@@ -54,7 +54,7 @@ class HttpTest extends MediaWikiTestCase {
        function testIsValidUri( $expect, $URI, $message = '' ) {
                $this->assertEquals(
                        $expect,
-                       (bool) Http::isValidURI( $URI ),
+                       (bool)Http::isValidURI( $URI ),
                        $message
                );
        }
index c4a6c55..5284812 100644 (file)
@@ -119,7 +119,7 @@ class IPTest extends MediaWikiTestCase {
                        $c = sprintf( "%01d", $i );
                        foreach ( array_unique( array( $a, $b, $c ) ) as $f ) {
                                $ip = "$f.$f.$f.$f";
-                               $this->assertTrue( IP::isValid( $ip ) , "$ip is a valid IPv4 address" );
+                               $this->assertTrue( IP::isValid( $ip ), "$ip is a valid IPv4 address" );
                        }
                }
                foreach ( range( 0x0, 0xFFFF, 0xF ) as $i ) {
@@ -128,7 +128,7 @@ class IPTest extends MediaWikiTestCase {
                        $c = sprintf( "%02x", $i );
                        foreach ( array_unique( array( $a, $b, $c ) ) as $f ) {
                                $ip = "$f:$f:$f:$f:$f:$f:$f:$f";
-                               $this->assertTrue( IP::isValid( $ip ) , "$ip is a valid IPv6 address" );
+                               $this->assertTrue( IP::isValid( $ip ), "$ip is a valid IPv6 address" );
                        }
                }
                // test with some abbreviations
@@ -173,7 +173,7 @@ class IPTest extends MediaWikiTestCase {
                        $c = sprintf( "%02s", $i );
                        foreach ( array_unique( array( $a, $b, $c ) ) as $f ) {
                                $ip = "$f:$f:$f:$f:$f:$f:$f:$f";
-                               $this->assertFalse( IP::isValid( $ip ) , "$ip is not a valid IPv6 address" );
+                               $this->assertFalse( IP::isValid( $ip ), "$ip is not a valid IPv6 address" );
                        }
                }
                // Have CIDR
@@ -264,7 +264,7 @@ class IPTest extends MediaWikiTestCase {
         */
        public function testip2longWrapper() {
                // @todo FIXME: Add more tests ?
-               $this->assertEquals( pow(2,32) - 1, IP::toUnsigned( '255.255.255.255' ));
+               $this->assertEquals( pow(2,32) - 1, IP::toUnsigned( '255.255.255.255' ) );
                $i = 'IN.VA.LI.D';
                $this->assertFalse( IP::toUnSigned( $i ) );
        }
index 3325885..244e4a8 100644 (file)
@@ -160,4 +160,3 @@ class LinksUpdateTest extends MediaWikiTestCase {
                $this->assertSelect( $table, $fields, $condition, $expectedRows );
        }
 }
-
index c5a9dc1..7b64a33 100644 (file)
@@ -105,5 +105,3 @@ class LocalFileTest extends MediaWikiTestCase {
                $this->assertThat( $file, $this->isInstanceOf( 'LocalFile' ), 'wfLocalFile() returns LocalFile for valid Titles' );
        }
 }
-
-
index 01d406a..d0b3814 100644 (file)
@@ -570,4 +570,3 @@ class MWNamespaceTest extends MediaWikiTestCase {
                $this->assertFalse( MWNamespace::subjectEquals( $ns1, $ns2, $msg ) );
        }
 }
-
index 22450dc..c378bb8 100644 (file)
@@ -49,6 +49,13 @@ class MessageTest extends MediaWikiLangTestCase {
                $this->assertEquals( '(Заглавная страница $1)', wfMessage( 'parentheses' )->rawParams( 'Заглавная страница $1' )->plain() );
        }
 
+       function testDeliciouslyManyParams() {
+               $msg = new RawMessage( '$1$2$3$4$5$6$7$8$9$10$11$12' );
+               // One less than above has placeholders
+               $params = array( 'a', 'b', 'c', 'd', 'e', 'f', 'g', 'h', 'i', 'j', 'k' );
+               $this->assertEquals( 'abcdefghijka2', $msg->params( $params )->plain(), 'Params > 9 are replaced correctly' );
+       }
+
        function testInContentLanguage() {
                global $wgLang, $wgForceUIMsgAsContentMsg;
                $wgLang = Language::factory( 'fr' );
diff --git a/tests/phpunit/includes/OutputPageTest.php b/tests/phpunit/includes/OutputPageTest.php
new file mode 100644 (file)
index 0000000..8b68703
--- /dev/null
@@ -0,0 +1,172 @@
+<?php
+
+/**
+ *
+ * @author Matthew Flaschen
+ *
+ * @group Output
+ *
+ */
+class OutputPageTest extends MediaWikiTestCase {
+       const SCREEN_MEDIA_QUERY = 'screen and (min-width: 982px)';
+       const SCREEN_ONLY_MEDIA_QUERY = 'only screen and (min-width: 982px)';
+
+       /**
+        * Tests a particular case of transformCssMedia, using the given input, globals,
+        * expected return, and message
+        *
+        * Asserts that $expectedReturn is returned.
+        *
+        * options['printableQuery'] - value of query string for printable, or omitted for none
+        * options['handheldQuery'] - value of query string for handheld, or omitted for none
+        * options['handheldForIPhone'] - value of the $wgHandheldForIPhone global
+        * options['media'] - passed into the method under the same name
+        * options['expectedReturn'] - expected return value
+        * options['message'] - PHPUnit message for assertion
+        *
+        * @param array $args key-value array of arguments as shown above
+        */
+       protected function assertTransformCssMediaCase($args) {
+               $queryData = array();
+               if ( isset( $args['printableQuery'] ) ) {
+                       $queryData['printable'] = $args['printableQuery'];
+               }
+
+               if ( isset( $args['handheldQuery'] ) ) {
+                       $queryData['handheld'] = $args['handheldQuery'];
+               }
+
+               $fauxRequest = new FauxRequest( $queryData, false );
+               $this->setMWGlobals( array(
+                               'wgRequest' => $fauxRequest,
+                               'wgHandheldForIPhone' => $args['handheldForIPhone']
+               ) );
+
+               $actualReturn = OutputPage::transformCssMedia( $args['media'] );
+               $this->assertSame( $args['expectedReturn'], $actualReturn, $args['message']);
+       }
+
+       /**
+        * Tests a case of transformCssMedia with both values of wgHandheldForIPhone.
+        * Used to verify that behavior is orthogonal to that option.
+        *
+        * If the value of wgHandheldForIPhone should matter, use assertTransformCssMediaCase.
+        *
+        * @param array $args key-value array of arguments as shown in assertTransformCssMediaCase.
+        * Will be mutated.
+        */
+       protected function assertTransformCssMediaCaseWithBothHandheldForIPhone($args) {
+               $message = $args['message'];
+               foreach( array( true, false ) as $handheldForIPhone ) {
+                       $args['handheldForIPhone'] = $handheldForIPhone;
+                       $stringHandheldForIPhone = var_export($handheldForIPhone, true);
+                       $args['message'] = "$message. \$wgHandheldForIPhone was $stringHandheldForIPhone";
+                       $this->assertTransformCssMediaCase( $args );
+               }
+       }
+
+       /**
+        * Tests print requests
+        */
+       public function testPrintRequests() {
+               $this->assertTransformCssMediaCaseWithBothHandheldForIPhone( array(
+                       'printableQuery' => '1',
+                       'media' => 'screen',
+                       'expectedReturn' => null,
+                       'message' => 'On printable request, screen returns null'
+               ) );
+
+               $this->assertTransformCssMediaCaseWithBothHandheldForIPhone( array(
+                       'printableQuery' => '1',
+                       'media' => self::SCREEN_MEDIA_QUERY,
+                       'expectedReturn' => null,
+                       'message' => 'On printable request, screen media query returns null'
+               ) );
+
+               $this->assertTransformCssMediaCaseWithBothHandheldForIPhone( array(
+                       'printableQuery' => '1',
+                       'media' => self::SCREEN_ONLY_MEDIA_QUERY,
+                       'expectedReturn' => null,
+                       'message' => 'On printable request, screen media query with only returns null'
+               ) );
+
+               $this->assertTransformCssMediaCaseWithBothHandheldForIPhone( array(
+                       'printableQuery' => '1',
+                       'media' => 'print',
+                       'expectedReturn' => '',
+                       'message' => 'On printable request, media print returns empty string'
+               ) );
+       }
+
+       /**
+        * Tests screen requests, without either query parameter set
+        */
+       public function testScreenRequests() {
+               $this->assertTransformCssMediaCase( array(
+                       'handheldForIPhone' => false,
+                       'media' => 'screen',
+                       'expectedReturn' => 'screen',
+                       'message' => 'On screen request, with handheldForIPhone false, screen media type is preserved'
+               ) );
+
+               $this->assertTransformCssMediaCaseWithBothHandheldForIPhone( array(
+                       'media' => self::SCREEN_MEDIA_QUERY,
+                       'expectedReturn' => self::SCREEN_MEDIA_QUERY,
+                       'message' => 'On screen request, screen media query is preserved.'
+               ) );
+
+               $this->assertTransformCssMediaCaseWithBothHandheldForIPhone( array(
+                       'media' => self::SCREEN_ONLY_MEDIA_QUERY,
+                       'expectedReturn' => self::SCREEN_ONLY_MEDIA_QUERY,
+                       'message' => 'On screen request, screen media query with only is preserved.'
+               ) );
+
+               $this->assertTransformCssMediaCaseWithBothHandheldForIPhone( array(
+                       'media' => 'print',
+                       'expectedReturn' => 'print',
+                       'message' => 'On screen request, print media type is preserved'
+               ) );
+       }
+
+       /**
+        * Tests handheld and wgHandheldForIPhone behavior
+        */
+       public function testHandheld() {
+               $this->assertTransformCssMediaCaseWithBothHandheldForIPhone(array(
+                       'handheldQuery' => '1',
+                       'media' => 'handheld',
+                       'expectedReturn' => '',
+                       'message' => 'On request with handheld querystring and media is handheld, returns empty string'
+               ) );
+
+               $this->assertTransformCssMediaCaseWithBothHandheldForIPhone(array(
+                       'handheldQuery' => '1',
+                       'media' => 'screen',
+                       'expectedReturn' => null,
+                       'message' => 'On request with handheld querystring and media is screen, returns null'
+               ) );
+
+               // A bit counter-intuitively, $wgHandheldForIPhone should only matter if the query handheld is false or omitted
+               $this->assertTransformCssMediaCase(array(
+                       'handheldQuery' => '0',
+                       'media' => 'screen',
+                       'handheldForIPhone' => true,
+                       'expectedReturn' => 'screen and (min-device-width: 481px)',
+                       'message' => 'With $wgHandheldForIPhone true, screen media type is transformed'
+               ) );
+
+               $this->assertTransformCssMediaCase(array(
+                       'media' => 'handheld',
+                       'handheldForIPhone' => true,
+                       'expectedReturn' => 'handheld, only screen and (max-device-width: 480px)',
+                       'message' => 'With $wgHandheldForIPhone true, handheld media type is transformed'
+               ) );
+
+               $this->assertTransformCssMediaCase( array(
+                       'media' => 'handheld',
+                       'handheldForIPhone' => false,
+                       'expectedReturn' => 'handheld',
+                       'message' => 'With $wgHandheldForIPhone false, handheld media type is preserved'
+               ) );
+       }
+}
index 4fa42f3..1301bf3 100644 (file)
@@ -127,8 +127,7 @@ class RevisionStorageTest extends MediaWikiTestCase {
        /**
         * @covers Revision::__construct
         */
-       public function testConstructFromRow()
-       {
+       public function testConstructFromRow() {
                $orig = $this->makeRevision();
 
                $dbr = wfgetDB( DB_SLAVE );
@@ -146,8 +145,7 @@ class RevisionStorageTest extends MediaWikiTestCase {
        /**
         * @covers Revision::newFromRow
         */
-       public function testNewFromRow()
-       {
+       public function testNewFromRow() {
                $orig = $this->makeRevision();
 
                $dbr = wfgetDB( DB_SLAVE );
@@ -166,8 +164,7 @@ class RevisionStorageTest extends MediaWikiTestCase {
        /**
         * @covers Revision::newFromArchiveRow
         */
-       public function testNewFromArchiveRow()
-       {
+       public function testNewFromArchiveRow() {
                $page = $this->createPage( 'RevisionStorageTest_testNewFromArchiveRow', 'Lorem Ipsum', CONTENT_MODEL_WIKITEXT );
                $orig = $page->getRevision();
                $page->doDeleteArticle( 'test Revision::newFromArchiveRow' );
@@ -187,8 +184,7 @@ class RevisionStorageTest extends MediaWikiTestCase {
        /**
         * @covers Revision::newFromId
         */
-       public function testNewFromId()
-       {
+       public function testNewFromId() {
                $orig = $this->makeRevision();
 
                $rev = Revision::newFromId( $orig->getId() );
@@ -199,8 +195,7 @@ class RevisionStorageTest extends MediaWikiTestCase {
        /**
         * @covers Revision::fetchRevision
         */
-       public function testFetchRevision()
-       {
+       public function testFetchRevision() {
                $page = $this->createPage( 'RevisionStorageTest_testFetchRevision', 'one', CONTENT_MODEL_WIKITEXT );
                $id1 = $page->getRevision()->getId();
 
@@ -223,8 +218,7 @@ class RevisionStorageTest extends MediaWikiTestCase {
        /**
         * @covers Revision::selectFields
         */
-       public function testSelectFields()
-       {
+       public function testSelectFields() {
                global $wgContentHandlerUseDB;
 
                $fields = Revision::selectFields();
@@ -245,8 +239,7 @@ class RevisionStorageTest extends MediaWikiTestCase {
        /**
         * @covers Revision::getPage
         */
-       public function testGetPage()
-       {
+       public function testGetPage() {
                $page = $this->the_page;
 
                $orig = $this->makeRevision( array( 'page' => $page->getId() ) );
@@ -258,8 +251,7 @@ class RevisionStorageTest extends MediaWikiTestCase {
        /**
         * @covers Revision::getText
         */
-       public function testGetText()
-       {
+       public function testGetText() {
                $this->hideDeprecated( 'Revision::getText' );
 
                $orig = $this->makeRevision( array( 'text' => 'hello hello.' ) );
@@ -271,8 +263,7 @@ class RevisionStorageTest extends MediaWikiTestCase {
        /**
         * @covers Revision::getContent
         */
-       public function testGetContent_failure()
-       {
+       public function testGetContent_failure() {
                $rev = new Revision( array(
                        'page'       =>  $this->the_page->getId(),
                        'content_model' => $this->the_page->getContentModel(),
@@ -290,8 +281,7 @@ class RevisionStorageTest extends MediaWikiTestCase {
        /**
         * @covers Revision::getContent
         */
-       public function testGetContent()
-       {
+       public function testGetContent() {
                $orig = $this->makeRevision( array( 'text' => 'hello hello.' ) );
                $rev = Revision::newFromId( $orig->getId() );
 
@@ -301,8 +291,7 @@ class RevisionStorageTest extends MediaWikiTestCase {
        /**
         * @covers Revision::revText
         */
-       public function testRevText()
-       {
+       public function testRevText() {
                $this->hideDeprecated( 'Revision::revText' );
                $orig = $this->makeRevision( array( 'text' => 'hello hello rev.' ) );
                $rev = Revision::newFromId( $orig->getId() );
@@ -313,8 +302,7 @@ class RevisionStorageTest extends MediaWikiTestCase {
        /**
         * @covers Revision::getRawText
         */
-       public function testGetRawText()
-       {
+       public function testGetRawText() {
                $this->hideDeprecated( 'Revision::getRawText' );
 
                $orig = $this->makeRevision( array( 'text' => 'hello hello raw.' ) );
@@ -326,8 +314,7 @@ class RevisionStorageTest extends MediaWikiTestCase {
        /**
         * @covers Revision::getContentModel
         */
-       public function testGetContentModel()
-       {
+       public function testGetContentModel() {
                global $wgContentHandlerUseDB;
 
                if ( !$wgContentHandlerUseDB ) {
@@ -344,8 +331,7 @@ class RevisionStorageTest extends MediaWikiTestCase {
        /**
         * @covers Revision::getContentFormat
         */
-       public function testGetContentFormat()
-       {
+       public function testGetContentFormat() {
                global $wgContentHandlerUseDB;
 
                if ( !$wgContentHandlerUseDB ) {
@@ -363,8 +349,7 @@ class RevisionStorageTest extends MediaWikiTestCase {
        /**
         * @covers Revision::isCurrent
         */
-       public function testIsCurrent()
-       {
+       public function testIsCurrent() {
                $page = $this->createPage( 'RevisionStorageTest_testIsCurrent', 'Lorem Ipsum', CONTENT_MODEL_WIKITEXT );
                $rev1 = $page->getRevision();
 
@@ -390,8 +375,7 @@ class RevisionStorageTest extends MediaWikiTestCase {
        /**
         * @covers Revision::getPrevious
         */
-       public function testGetPrevious()
-       {
+       public function testGetPrevious() {
                $page = $this->createPage( 'RevisionStorageTest_testGetPrevious', 'Lorem Ipsum testGetPrevious', CONTENT_MODEL_WIKITEXT );
                $rev1 = $page->getRevision();
 
@@ -408,8 +392,7 @@ class RevisionStorageTest extends MediaWikiTestCase {
        /**
         * @covers Revision::getNext
         */
-       public function testGetNext()
-       {
+       public function testGetNext() {
                $page = $this->createPage( 'RevisionStorageTest_testGetNext', 'Lorem Ipsum testGetNext', CONTENT_MODEL_WIKITEXT );
                $rev1 = $page->getRevision();
 
@@ -426,8 +409,7 @@ class RevisionStorageTest extends MediaWikiTestCase {
        /**
         * @covers Revision::newNullRevision
         */
-       public function testNewNullRevision()
-       {
+       public function testNewNullRevision() {
                $page = $this->createPage( 'RevisionStorageTest_testNewNullRevision', 'some testing text', CONTENT_MODEL_WIKITEXT );
                $orig = $page->getRevision();
 
index 9cddbe8..197bb06 100644 (file)
@@ -64,16 +64,14 @@ class RevisionTest extends MediaWikiTestCase {
        }
 
        function testGetRevisionTextGzip() {
-               if ( !function_exists( 'gzdeflate' ) ) {
-                       $this->markTestSkipped( 'Gzip compression is not enabled (requires zlib).' );
-               } else {
-                       $row = new stdClass;
-                       $row->old_flags = 'gzip';
-                       $row->old_text = gzdeflate( 'This is a bunch of revision text.' );
-                       $this->assertEquals(
-                               'This is a bunch of revision text.',
-                               Revision::getRevisionText( $row ) );
-               }
+               $this->checkPHPExtension( 'zlib' );
+
+               $row = new stdClass;
+               $row->old_flags = 'gzip';
+               $row->old_text = gzdeflate( 'This is a bunch of revision text.' );
+               $this->assertEquals(
+                       'This is a bunch of revision text.',
+                       Revision::getRevisionText( $row ) );
        }
 
        function testGetRevisionTextUtf8Native() {
@@ -97,31 +95,27 @@ class RevisionTest extends MediaWikiTestCase {
        }
 
        function testGetRevisionTextUtf8NativeGzip() {
-               if ( !function_exists( 'gzdeflate' ) ) {
-                       $this->markTestSkipped( 'Gzip compression is not enabled (requires zlib).' );
-               } else {
-                       $row = new stdClass;
-                       $row->old_flags = 'gzip,utf-8';
-                       $row->old_text = gzdeflate( "Wiki est l'\xc3\xa9cole superieur !" );
-                       $GLOBALS['wgLegacyEncoding'] = 'iso-8859-1';
-                       $this->assertEquals(
-                               "Wiki est l'\xc3\xa9cole superieur !",
-                               Revision::getRevisionText( $row ) );
-               }
+               $this->checkPHPExtension( 'zlib' );
+
+               $row = new stdClass;
+               $row->old_flags = 'gzip,utf-8';
+               $row->old_text = gzdeflate( "Wiki est l'\xc3\xa9cole superieur !" );
+               $GLOBALS['wgLegacyEncoding'] = 'iso-8859-1';
+               $this->assertEquals(
+                       "Wiki est l'\xc3\xa9cole superieur !",
+                       Revision::getRevisionText( $row ) );
        }
 
        function testGetRevisionTextUtf8LegacyGzip() {
-               if ( !function_exists( 'gzdeflate' ) ) {
-                       $this->markTestSkipped( 'Gzip compression is not enabled (requires zlib).' );
-               } else {
-                       $row = new stdClass;
-                       $row->old_flags = 'gzip';
-                       $row->old_text = gzdeflate( "Wiki est l'\xe9cole superieur !" );
-                       $GLOBALS['wgLegacyEncoding'] = 'iso-8859-1';
-                       $this->assertEquals(
-                               "Wiki est l'\xc3\xa9cole superieur !",
-                               Revision::getRevisionText( $row ) );
-               }
+               $this->checkPHPExtension( 'zlib' );
+
+               $row = new stdClass;
+               $row->old_flags = 'gzip';
+               $row->old_text = gzdeflate( "Wiki est l'\xe9cole superieur !" );
+               $GLOBALS['wgLegacyEncoding'] = 'iso-8859-1';
+               $this->assertEquals(
+                       "Wiki est l'\xc3\xa9cole superieur !",
+                       Revision::getRevisionText( $row ) );
        }
 
        function testCompressRevisionTextUtf8() {
@@ -139,8 +133,9 @@ class RevisionTest extends MediaWikiTestCase {
        }
 
        function testCompressRevisionTextUtf8Gzip() {
-               global $wgCompressRevisions;
+               $this->checkPHPExtension( 'zlib' );
 
+               global $wgCompressRevisions;
                $wgCompressRevisions = true;
 
                $row = new stdClass;
@@ -313,8 +308,7 @@ class RevisionTest extends MediaWikiTestCase {
         * @group Database
         * @dataProvider dataGetSize
         */
-       public function testGetSize( $text, $model, $expected_size )
-       {
+       public function testGetSize( $text, $model, $expected_size ) {
                $rev = $this->newTestRevision( $text, 'RevisionTest_testGetSize', $model );
                $this->assertEquals( $expected_size, $rev->getSize() );
        }
@@ -331,8 +325,7 @@ class RevisionTest extends MediaWikiTestCase {
         * @group Database
         * @dataProvider dataGetSha1
         */
-       public function testGetSha1( $text, $model, $expected_hash )
-       {
+       public function testGetSha1( $text, $model, $expected_hash ) {
                $rev = $this->newTestRevision( $text, 'RevisionTest_testGetSha1', $model );
                $this->assertEquals( $expected_hash, $rev->getSha1() );
        }
index 88bbc07..1439e44 100644 (file)
@@ -103,4 +103,3 @@ class TestSample extends MediaWikiLangTestCase {
                $this->assertEquals( "Test", $title->isLocal() );
        }
 }
-
index 5930d6c..2d039d9 100644 (file)
@@ -112,57 +112,70 @@ class SanitizerTest extends MediaWikiTestCase {
                        'Self-closing closing div'
                );
        }
-       
-       function testDecodeTagAttributes() {
-               $this->assertEquals( Sanitizer::decodeTagAttributes( 'foo=bar' ), array( 'foo' => 'bar' ), 'Unquoted attribute' );
-               $this->assertEquals( Sanitizer::decodeTagAttributes( '    foo   =   bar    ' ), array( 'foo' => 'bar' ), 'Spaced attribute' );
-               $this->assertEquals( Sanitizer::decodeTagAttributes( 'foo="bar"' ), array( 'foo' => 'bar' ), 'Double-quoted attribute' );
-               $this->assertEquals( Sanitizer::decodeTagAttributes( 'foo=\'bar\'' ), array( 'foo' => 'bar' ), 'Single-quoted attribute' );
-               $this->assertEquals( Sanitizer::decodeTagAttributes( 'foo=\'bar\'   baz="foo"' ), array( 'foo' => 'bar', 'baz' => 'foo' ), 'Several attributes' );
-               
-               $this->assertEquals( Sanitizer::decodeTagAttributes( 'foo=\'bar\'   baz="foo"' ), array( 'foo' => 'bar', 'baz' => 'foo' ), 'Several attributes' );
-               $this->assertEquals( Sanitizer::decodeTagAttributes( 'foo=\'bar\'   baz="foo"' ), array( 'foo' => 'bar', 'baz' => 'foo' ), 'Several attributes' );
-               
-               $this->assertEquals( Sanitizer::decodeTagAttributes( ':foo=\'bar\'' ), array( ':foo' => 'bar' ), 'Leading :' );
-               $this->assertEquals( Sanitizer::decodeTagAttributes( '_foo=\'bar\'' ), array( '_foo' => 'bar' ), 'Leading _' );
-               $this->assertEquals( Sanitizer::decodeTagAttributes( 'Foo=\'bar\'' ), array( 'foo' => 'bar' ), 'Leading capital' );
-               $this->assertEquals( Sanitizer::decodeTagAttributes( 'FOO=BAR' ), array( 'foo' => 'BAR' ), 'Attribute keys are normalized to lowercase' );
-               
-               # Invalid beginning
-               $this->assertEquals( Sanitizer::decodeTagAttributes( '-foo=bar' ), array(), 'Leading - is forbidden' );
-               $this->assertEquals( Sanitizer::decodeTagAttributes( '.foo=bar' ), array(), 'Leading . is forbidden' );
-               $this->assertEquals( Sanitizer::decodeTagAttributes( 'foo-bar=bar' ), array( 'foo-bar' => 'bar' ), 'A - is allowed inside the attribute' );
-               $this->assertEquals( Sanitizer::decodeTagAttributes( 'foo-=bar' ), array( 'foo-' => 'bar' ), 'A - is allowed inside the attribute' );
-               
-               $this->assertEquals( Sanitizer::decodeTagAttributes( 'foo.bar=baz' ), array( 'foo.bar' => 'baz' ), 'A . is allowed inside the attribute' );
-               $this->assertEquals( Sanitizer::decodeTagAttributes( 'foo.=baz' ), array( 'foo.' => 'baz' ), 'A . is allowed as last character' );
-               
-               $this->assertEquals( Sanitizer::decodeTagAttributes( 'foo6=baz' ), array( 'foo6' => 'baz' ), 'Numbers are allowed' );
-               
-               # This bit is more relaxed than XML rules, but some extensions use it, like ProofreadPage (see bug 27539)
-               $this->assertEquals( Sanitizer::decodeTagAttributes( '1foo=baz' ), array( '1foo' => 'baz' ), 'Leading numbers are allowed' );
-               
-               $this->assertEquals( Sanitizer::decodeTagAttributes( 'foo$=baz' ), array(), 'Symbols are not allowed' );
-               $this->assertEquals( Sanitizer::decodeTagAttributes( 'foo@=baz' ), array(), 'Symbols are not allowed' );
-               $this->assertEquals( Sanitizer::decodeTagAttributes( 'foo~=baz' ), array(), 'Symbols are not allowed' );
-               
-               
-               $this->assertEquals( Sanitizer::decodeTagAttributes( 'foo=1[#^`*%w/(' ), array( 'foo' => '1[#^`*%w/(' ), 'All kind of characters are allowed as values' );
-               $this->assertEquals( Sanitizer::decodeTagAttributes( 'foo="1[#^`*%\'w/("' ), array( 'foo' => '1[#^`*%\'w/(' ), 'Double quotes are allowed if quoted by single quotes' );
-               $this->assertEquals( Sanitizer::decodeTagAttributes( 'foo=\'1[#^`*%"w/(\'' ), array( 'foo' => '1[#^`*%"w/(' ), 'Single quotes are allowed if quoted by double quotes' );
-               $this->assertEquals( Sanitizer::decodeTagAttributes( 'foo=&amp;&quot;' ), array( 'foo' => '&"' ), 'Special chars can be provided as entities' );
-               $this->assertEquals( Sanitizer::decodeTagAttributes( 'foo=&foobar;' ), array( 'foo' => '&foobar;' ), 'Entity-like items are accepted' );
+
+
+       /**
+        * @dataProvider provideTagAttributesToDecode
+        * @cover Sanitizer::decodeTagAttributes
+        */
+       function testDecodeTagAttributes( $expected, $attributes, $message = '' ) {
+               $this->assertEquals( $expected,
+                       Sanitizer::decodeTagAttributes( $attributes ),
+                       $message
+               );
+       }
+
+       function provideTagAttributesToDecode() {
+               return array(
+                       array( array( 'foo' => 'bar' ), 'foo=bar', 'Unquoted attribute' ),
+                       array( array( 'foo' => 'bar' ), '    foo   =   bar    ', 'Spaced attribute' ),
+                       array( array( 'foo' => 'bar' ), 'foo="bar"', 'Double-quoted attribute' ),
+                       array( array( 'foo' => 'bar' ), 'foo=\'bar\'', 'Single-quoted attribute' ),
+                       array( array( 'foo' => 'bar', 'baz' => 'foo' ), 'foo=\'bar\'   baz="foo"', 'Several attributes' ),
+                       array( array( 'foo' => 'bar', 'baz' => 'foo' ), 'foo=\'bar\'   baz="foo"', 'Several attributes' ),
+                       array( array( 'foo' => 'bar', 'baz' => 'foo' ), 'foo=\'bar\'   baz="foo"', 'Several attributes' ),
+                       array( array( ':foo' => 'bar' ), ':foo=\'bar\'', 'Leading :' ),
+                       array( array( '_foo' => 'bar' ), '_foo=\'bar\'', 'Leading _' ),
+                       array( array( 'foo' => 'bar' ), 'Foo=\'bar\'', 'Leading capital' ),
+                       array( array( 'foo' => 'BAR' ), 'FOO=BAR', 'Attribute keys are normalized to lowercase' ),
+
+                       # Invalid beginning
+                       array( array(), '-foo=bar', 'Leading - is forbidden' ),
+                       array( array(), '.foo=bar', 'Leading . is forbidden' ),
+                       array( array( 'foo-bar' => 'bar' ), 'foo-bar=bar', 'A - is allowed inside the attribute' ),
+                       array( array( 'foo-' => 'bar' ), 'foo-=bar', 'A - is allowed inside the attribute' ),
+                       array( array( 'foo.bar' => 'baz' ), 'foo.bar=baz', 'A . is allowed inside the attribute' ),
+                       array( array( 'foo.' => 'baz' ), 'foo.=baz', 'A . is allowed as last character' ),
+                       array( array( 'foo6' => 'baz' ), 'foo6=baz', 'Numbers are allowed' ),
+
+
+                       # This bit is more relaxed than XML rules, but some extensions use
+                       # it, like ProofreadPage (see bug 27539)
+                       array( array( '1foo' => 'baz' ), '1foo=baz', 'Leading numbers are allowed' ),
+                       array( array(), 'foo$=baz', 'Symbols are not allowed' ),
+                       array( array(), 'foo@=baz', 'Symbols are not allowed' ),
+                       array( array(), 'foo~=baz', 'Symbols are not allowed' ),
+                       array( array( 'foo' => '1[#^`*%w/(' ), 'foo=1[#^`*%w/(', 'All kind of characters are allowed as values' ),
+                       array( array( 'foo' => '1[#^`*%\'w/(' ), 'foo="1[#^`*%\'w/("', 'Double quotes are allowed if quoted by single quotes' ),
+                       array( array( 'foo' => '1[#^`*%"w/(' ), 'foo=\'1[#^`*%"w/(\'', 'Single quotes are allowed if quoted by double quotes' ),
+                       array( array( 'foo' => '&"' ), 'foo=&amp;&quot;', 'Special chars can be provided as entities' ),
+                       array( array( 'foo' => '&foobar;' ), 'foo=&foobar;', 'Entity-like items are accepted' ),
+               );
        }
 
        /**
         * @dataProvider provideDeprecatedAttributes
+        * @cover Sanitizer::fixTagAttributes
         */
-       function testDeprecatedAttributesUnaltered( $inputAttr, $inputEl ) {
-
-               $this->assertEquals( " $inputAttr", Sanitizer::fixTagAttributes( $inputAttr, $inputEl ) );
+       function testDeprecatedAttributesUnaltered( $inputAttr, $inputEl, $message = '' ) {
+               $this->assertEquals( " $inputAttr",
+                       Sanitizer::fixTagAttributes( $inputAttr, $inputEl ),
+                       $message
+               );
        }
 
        public static function provideDeprecatedAttributes() {
+               /** array( <attribute>, <element>, [message] ) */
                return array(
                        array( 'clear="left"', 'br' ),
                        array( 'clear="all"', 'br' ),
@@ -180,10 +193,10 @@ class SanitizerTest extends MediaWikiTestCase {
 
        /**
         * @dataProvider provideCssCommentsFixtures
+        * @cover Sanitizer::checkCss
         */
        function testCssCommentsChecking( $expected, $css, $message = '' ) {
-               $this->assertEquals(
-                       $expected,
+               $this->assertEquals( $expected,
                        Sanitizer::checkCss( $css ),
                        $message
                );
@@ -213,4 +226,3 @@ class SanitizerTest extends MediaWikiTestCase {
                );
        }
 }
-
index 8f6aafa..3989fad 100644 (file)
@@ -161,7 +161,7 @@ testBrowser                 = "firefox"
                SeleniumConfig::getSeleniumSettings($seleniumSettings,
                        $seleniumBrowsers,
                        $seleniumTestSuites);
-               $this->assertEquals($seleniumSettings, $this->testSettings0 ,
+               $this->assertEquals($seleniumSettings, $this->testSettings0,
                'The selenium settings should have been read from the file defined in $wgSeleniumConfigFile'
                );
                $this->assertEquals($seleniumBrowsers, $this->testBrowsers0,
@@ -207,7 +207,7 @@ testBrowser                 = "firefox"
        private function writeToTempFile($textToWrite) {
                $this->tempFileName = tempnam(sys_get_temp_dir(), 'test_settings.');
                $tempFile =      fopen( $this->tempFileName, "w" );
-               fwrite($tempFile , $textToWrite);
+               fwrite($tempFile, $textToWrite);
                fclose($tempFile);
        }
 
index 27c0bb5..fc7d8d0 100644 (file)
@@ -306,7 +306,7 @@ class SiteConfigurationTest extends MediaWikiTestCase {
                $this->assertEquals( $getall['simple'], $GLOBALS['simple'], 'extractAllGlobals(): simple setting' );
                $this->assertEquals( $getall['fallback'], $GLOBALS['fallback'], 'extractAllGlobals(): fallback setting' );
                $this->assertEquals( $getall['params'], $GLOBALS['params'], 'extractAllGlobals(): parameter replacement' );
-               $this->assertEquals( $getall['global'], $GLOBALS['global'],  'extractAllGlobals(): merging with global' );
-               $this->assertEquals( $getall['merge'], $GLOBALS['merge'],  'extractAllGlobals(): merging setting' );
+               $this->assertEquals( $getall['global'], $GLOBALS['global'], 'extractAllGlobals(): merging with global' );
+               $this->assertEquals( $getall['merge'], $GLOBALS['merge'], 'extractAllGlobals(): merging setting' );
        }
 }
index 03b94ae..a793bab 100644 (file)
@@ -23,6 +23,7 @@ class TemplateCategoriesTest extends MediaWikiLangTestCase {
                $status = $template->doEditContent( new WikitextContent( '[[Category:Solved bugs]]' ), 'Add a category through a template', 0, false, $user );
 
                // Run the job queue
+               JobQueueGroup::destroySingletons();
                $jobs = new RunJobs;
                $jobs->loadParamsAndArgs( null, array( 'quiet' => true ), null );
                $jobs->execute();
index 6352160..de2f855 100644 (file)
@@ -29,7 +29,7 @@ class TimestampTest extends MediaWikiTestCase {
         */
        function testValidOutput( $format, $expected, $original ) {
                $timestamp = new MWTimestamp( $original );
-               $this->assertEquals( $expected, (string) $timestamp->getTimestamp( $format ) );
+               $this->assertEquals( $expected, (string)$timestamp->getTimestamp( $format ) );
        }
 
        /**
@@ -55,6 +55,10 @@ class TimestampTest extends MediaWikiTestCase {
        function testHumanOutput() {
                $timestamp = new MWTimestamp( time() - 3600 );
                $this->assertEquals( "1 hour ago", $timestamp->getHumanTimestamp()->inLanguage( 'en' )->text() );
+               $timestamp = new MWTimestamp( time() - 5184000 );
+               $this->assertEquals( "2 months ago", $timestamp->getHumanTimestamp()->inLanguage( 'en' )->text() );
+               $timestamp = new MWTimestamp( time() - 31536000 );
+               $this->assertEquals( "1 year ago", $timestamp->getHumanTimestamp()->inLanguage( 'en' )->text() );
        }
 
        /**
index 3a30b12..05f1408 100644 (file)
@@ -356,8 +356,6 @@ class TitlePermissionTest extends MediaWikiLangTestCase {
 
                $this->assertEquals( array( array( 'badaccess-group0' ), array( 'ns-specialprotected' ) ),
                                                         $this->title->getUserPermissionsErrors( 'bogus', $this->user ) );
-               $this->assertEquals( array( array( 'badaccess-group0' ) ),
-                                                        $this->title->getUserPermissionsErrors( 'execute', $this->user ) );
 
                $this->setTitle( NS_MAIN );
                $this->setUserPerm( 'bogus' );
index 8647954..6399d48 100644 (file)
@@ -79,6 +79,122 @@ class TitleTest extends MediaWikiTestCase {
                }
        }
        
+       /**
+        * Provides test parameter values for testIsValidMoveOperation()
+        */
+       function dataTestIsValidMoveOperation() {
+               return array(
+                       array( 'Test', 'Test', 'selfmove' ),
+                       array( 'File:Test.jpg', 'Page', 'imagenocrossnamespace' )
+               );
+       }
+
+       /**
+        * Auth-less test of Title::userCan
+        *
+        * @param array $whitelistRegexp
+        * @param string $source
+        * @param string $action
+        * @param array|string|true $expected Required error
+        *
+        * @covers Title::checkReadPermission
+        * @dataProvider dataWgWhitelistReadRegexp
+        */
+       function testWgWhitelistReadRegexp($whitelistRegexp, $source, $action, $expected) {
+
+               // $wgWhitelistReadRegexp must be an array. Since the provided test cases
+               // usually have only one regex, it is more concise to write the lonely regex
+               // as a string. Thus we cast to an array() to honor $wgWhitelistReadRegexp
+               // type requisite.
+               if( is_string( $whitelistRegexp ) ) {
+                       $whitelistRegexp = array( $whitelistRegexp );
+               }
+
+               $title = Title::newFromDBkey( $source );
+
+               global $wgGroupPermissions;
+               $oldPermissions = $wgGroupPermissions;
+               // Disallow all so we can ensure our regex works
+               $wgGroupPermissions = array();
+               $wgGroupPermissions['*']['read'] = false;
+
+               global $wgWhitelistRead;
+               $oldWhitelist = $wgWhitelistRead;
+               // Undo any LocalSettings explicite whitelists so they won't cause a
+               // failing test to succeed. Set it to some random non sense just
+               // to make sure we properly test Title::checkReadPermissions()
+               $wgWhitelistRead = array( 'some random non sense title' );
+
+               global $wgWhitelistReadRegexp;
+               $oldWhitelistRegexp    = $wgWhitelistReadRegexp;
+               $wgWhitelistReadRegexp = $whitelistRegexp ;
+
+               // Just use $wgUser which in test is a user object for '127.0.0.1'
+               global $wgUser;
+               // Invalidate user rights cache to take in account $wgGroupPermissions
+               // change above.
+               $wgUser->clearInstanceCache();
+               $errors = $title->userCan( $action, $wgUser );
+
+               // Restore globals
+               $wgGroupPermissions = $oldPermissions;
+               $wgWhitelistRead = $oldWhitelist;
+               $wgWhitelistReadRegexp = $oldWhitelistRegexp;
+
+               if( is_bool( $expected ) ) {
+                       # Forge the assertion message depending on the assertion expectation
+                       $allowableness = $expected
+                               ? " should be allowed"
+                               : " should NOT be allowed"
+                       ;
+                       $this->assertEquals( $expected, $errors, "User action '$action' on [[$source]] $allowableness." );
+               } else {
+                       $errors = $this->flattenErrorsArray( $errors );
+                       foreach ( (array)$expected as $error ) {
+                               $this->assertContains( $error, $errors );
+                       }
+               }
+       }
+
+       /**
+        * Provides test parameter values for testWgWhitelistReadRegexp()
+        */
+       function dataWgWhitelistReadRegexp() {
+               $ALLOWED    = true;
+               $DISALLOWED = false;
+
+               return array(
+                       // Everything, if this doesn't work, we're really in trouble
+                       array( '/.*/', 'Main_Page', 'read', $ALLOWED ),
+                       array( '/.*/', 'Main_Page', 'edit', $DISALLOWED ),
+
+                       // We validate against the title name, not the db key
+                       array( '/^Main_Page$/', 'Main_Page', 'read', $DISALLOWED ),
+                       // Main page
+                       array( '/^Main/', 'Main_Page', 'read', $ALLOWED ),
+                       array( '/^Main.*/', 'Main_Page', 'read', $ALLOWED ),
+                       // With spaces
+                       array( '/Mic\sCheck/', 'Mic Check', 'read', $ALLOWED ),
+                       // Unicode multibyte
+                       // ...without unicode modifier
+                       array( '/Unicode Test . Yes/', 'Unicode Test Ñ Yes', 'read', $DISALLOWED ),
+                       // ...with unicode modifier
+                       array( '/Unicode Test . Yes/u', 'Unicode Test Ñ Yes', 'read', $ALLOWED ),
+                       // Case insensitive
+                       array( '/MiC ChEcK/', 'mic check', 'read', $DISALLOWED ),
+                       array( '/MiC ChEcK/i', 'mic check', 'read', $ALLOWED ),
+
+                       // From DefaultSettings.php:
+                       array( "@^UsEr.*@i", 'User is banned', 'read', $ALLOWED ),
+                       array( "@^UsEr.*@i", 'User:John Doe', 'read', $ALLOWED ),
+
+                       // With namespaces:
+                       array( '/^Special:NewPages$/', 'Special:NewPages', 'read', $ALLOWED ),
+                       array( null, 'Special:Newpages', 'read', $DISALLOWED ),
+
+               );
+       }
+
        function flattenErrorsArray( $errors ) {
                $result = array();
                foreach ( $errors as $error ) {
index e5a014d..a9dfca1 100644 (file)
@@ -175,7 +175,7 @@ class UserTest extends MediaWikiTestCase {
                // let the user have a few (3) edits
                $page = WikiPage::factory( Title::newFromText( 'Help:UserTest_EditCount' ) );
                for( $i = 0; $i < 3; $i++ ) {
-                       $page->doEdit( (string) $i, 'test', 0, false, $user );
+                       $page->doEdit( (string)$i, 'test', 0, false, $user );
                }
 
                $user->clearInstanceCache();
diff --git a/tests/phpunit/includes/api/ApiAccountCreationTest.php b/tests/phpunit/includes/api/ApiAccountCreationTest.php
new file mode 100644 (file)
index 0000000..60f6537
--- /dev/null
@@ -0,0 +1,156 @@
+<?php
+
+/**
+ * @group Database
+ * @group API
+ * @group medium
+ */
+class ApiCreateAccountTest extends ApiTestCase {
+       function setUp() {
+               parent::setUp();
+               LoginForm::setCreateaccountToken();
+       }
+
+       /**
+        * Test the account creation API with a valid request. Also
+        * make sure the new account can log in and is valid.
+        *
+        * This test does multiple API requests so it might end up being
+        * a bit slow. Raise the default timeout.
+        * @group medium
+        */
+       function testValid() {
+               global $wgServer;
+
+               if ( !isset( $wgServer ) ) {
+                       $this->markTestIncomplete( 'This test needs $wgServer to be set in LocalSettings.php' );
+               }
+
+               $password = User::randomPassword();
+
+               $ret = $this->doApiRequest( array(
+                       'action' => 'createaccount',
+                       'name' => 'Apitestnew',
+                       'password' => $password,
+                       'email' => 'test@domain.test',
+                       'realname' => 'Test Name'
+               ) );
+
+               $result = $ret[0];
+               $this->assertNotInternalType( 'bool', $result );
+               $this->assertNotInternalType( 'null', $result['createaccount'] );
+
+               // Should first ask for token.
+               $a = $result['createaccount'];
+               $this->assertEquals( 'needtoken', $a['result'] );
+               $token = $a['token'];
+
+               // Finally create the account
+               $ret = $this->doApiRequest( array(
+                       'action' => 'createaccount',
+                       'name' => 'Apitestnew',
+                       'password' => $password,
+                       'token' => $token,
+                       'email' => 'test@domain.test',
+                       'realname' => 'Test Name' ), $ret[2]
+               );
+
+               $result = $ret[0];
+               $this->assertNotInternalType( 'bool', $result );
+               $this->assertEquals( 'success', $result['createaccount']['result'] );
+
+               // Try logging in with the new user.
+               $ret = $this->doApiRequest( array(
+                       'action' => 'login',
+                       'lgname' => 'Apitestnew',
+                       'lgpassword' => $password,
+                       )
+               );
+
+               $result = $ret[0];
+               $this->assertNotInternalType( 'bool', $result );
+               $this->assertNotInternalType( 'null', $result['login'] );
+
+               $a = $result['login']['result'];
+               $this->assertEquals( 'NeedToken', $a );
+               $token = $result['login']['token'];
+
+               $ret = $this->doApiRequest( array(
+                       'action' => 'login',
+                       'lgtoken' => $token,
+                       'lgname' => 'Apitestnew',
+                       'lgpassword' => $password,
+                       ), $ret[2]
+               );
+
+               $result = $ret[0];
+
+               $this->assertNotInternalType( 'bool', $result );
+               $a = $result['login']['result'];
+
+               $this->assertEquals( 'Success', $a );
+
+               // log out to destroy the session
+               $ret = $this->doApiRequest( array(
+                       'action' => 'logout',
+                       ), $ret[2]
+               );
+               $this->assertEquals( array(), $ret[0] );
+       }
+
+       /**
+        * Make sure requests with no names are invalid.
+        * @expectedException UsageException
+        */
+       function testNoName() {
+               $ret = $this->doApiRequest( array(
+                       'action' => 'createaccount',
+                       'token' => LoginForm::getCreateaccountToken(),
+                       'password' => 'password',
+               ) );
+       }
+
+       /**
+        * Make sure requests with no password are invalid.
+        * @expectedException UsageException
+        */
+       function testNoPassword() {
+               $ret = $this->doApiRequest( array(
+                       'action' => 'createaccount',
+                       'name' => 'testName',
+                       'token' => LoginForm::getCreateaccountToken(),
+               ) );
+       }
+
+       /**
+        * Make sure requests with existing users are invalid.
+        * @expectedException UsageException
+        */
+       function testExistingUser() {
+               $this->doApiRequest( array(
+                       'action' => 'createaccount',
+                       'name' => 'Apitestsysop',
+                       'token' => LoginForm::getCreateaccountToken(),
+                       'password' => 'password',
+                       'email' => 'test@domain.test',
+               ) );
+       }
+
+       /**
+        * Make sure requests with invalid emails are invalid.
+        * @expectedException UsageException
+        */
+       function testInvalidEmail() {
+               global $wgEnableEmail;
+               if( !$wgEnableEmail ) {
+                       $this->markTestSkipped( 'email is not enabled, so createaccount does not check it' );
+               }
+               $this->doApiRequest( array(
+                       'action' => 'createaccount',
+                       'name' => 'Test User',
+                       'token' => LoginForm::getCreateaccountToken(),
+                       'password' => 'password',
+                       'email' => 'invalid',
+               ) );
+       }
+}
index 52f1d28..dd4d598 100644 (file)
@@ -3,6 +3,7 @@
 /**
  * @group API
  * @group Database
+ * @group medium
  */
 class ApiBlockTest extends ApiTestCase {
 
index 60ae608..e5a8717 100644 (file)
@@ -1,4 +1,8 @@
 <?php
+
+/**
+ * @group API
+ */
 class ApiGeneratorTest extends MediaWikiTestCase {
 
        /**
index b30b356..902b7b8 100644 (file)
@@ -3,6 +3,7 @@
 /**
  * @group API
  * @group Database
+ * @group medium
  */
 class ApiOptionsTest extends MediaWikiLangTestCase {
 
@@ -21,7 +22,11 @@ class ApiOptionsTest extends MediaWikiLangTestCase {
 
                // Set up groups
                $this->mUserMock->expects( $this->any() )
-                       ->method( 'getEffectiveGroups' )->will( $this->returnValue( array( '*', 'user')) );
+                       ->method( 'getEffectiveGroups' )->will( $this->returnValue( array( '*', 'user' ) ) );
+
+               // Set up callback for User::getOptionKinds
+               $this->mUserMock->expects( $this->any() )
+                       ->method( 'getOptionKinds' )->will( $this->returnCallback( array( $this, 'getOptionKinds' ) ) );
 
                // Create a new context
                $this->mContext = new DerivativeContext( new RequestContext() );
@@ -55,6 +60,8 @@ class ApiOptionsTest extends MediaWikiLangTestCase {
        }
 
        public function hookGetPreferences( $user, &$preferences ) {
+               $preferences = array();
+
                foreach ( array( 'name', 'willBeNull', 'willBeEmpty', 'willBeHappy' ) as $k ) {
                        $preferences[$k] = array(
                                'type' => 'text',
@@ -82,6 +89,36 @@ class ApiOptionsTest extends MediaWikiLangTestCase {
                return true;
        }
 
+       public function getOptionKinds( IContextSource $context, $options = null ) {
+               // Match with above.
+               $kinds = array(
+                       'name' => 'registered',
+                       'willBeNull' => 'registered',
+                       'willBeEmpty' => 'registered',
+                       'willBeHappy' => 'registered',
+                       'testmultiselect-opt1' => 'registered-multiselect',
+                       'testmultiselect-opt2' => 'registered-multiselect',
+                       'testmultiselect-opt3' => 'registered-multiselect',
+                       'testmultiselect-opt4' => 'registered-multiselect',
+               );
+
+               if ( $options === null ) {
+                       return $kinds;
+               }
+
+               $mapping = array();
+               foreach ( $options as $key => $value ) {
+                       if ( isset( $kinds[$key] ) ) {
+                               $mapping[$key] = $kinds[$key];
+                       } elseif ( substr( $key, 0, 7 ) === 'userjs-' ) {
+                               $mapping[$key] = 'userjs';
+                       } else {
+                               $mapping[$key] = 'unused';
+                       }
+               }
+               return $mapping;
+       }
+
        private function getSampleRequest( $custom = array() ) {
                $request = array(
                        'token' => '123ABC',
@@ -161,7 +198,8 @@ class ApiOptionsTest extends MediaWikiLangTestCase {
 
        public function testReset() {
                $this->mUserMock->expects( $this->once() )
-                       ->method( 'resetOptions' );
+                       ->method( 'resetOptions' )
+                       ->with( $this->equalTo( array( 'all' ) ) );
 
                $this->mUserMock->expects( $this->never() )
                        ->method( 'setOption' );
@@ -176,6 +214,24 @@ class ApiOptionsTest extends MediaWikiLangTestCase {
                $this->assertEquals( self::$Success, $response );
        }
 
+       public function testResetKinds() {
+               $this->mUserMock->expects( $this->once() )
+                       ->method( 'resetOptions' )
+                       ->with( $this->equalTo( array( 'registered' ) ) );
+
+               $this->mUserMock->expects( $this->never() )
+                       ->method( 'setOption' );
+
+               $this->mUserMock->expects( $this->once() )
+                       ->method( 'saveSettings' );
+
+               $request = $this->getSampleRequest( array( 'reset' => '', 'resetkinds' => 'registered' ) );
+
+               $response = $this->executeQuery( $request );
+
+               $this->assertEquals( self::$Success, $response );
+       }
+
        public function testOptionWithValue() {
                $this->mUserMock->expects( $this->never() )
                        ->method( 'resetOptions' );
@@ -200,7 +256,7 @@ class ApiOptionsTest extends MediaWikiLangTestCase {
 
                $this->mUserMock->expects( $this->once() )
                        ->method( 'setOption' )
-                       ->with( $this->equalTo( 'name' ), $this->equalTo( null ) );
+                       ->with( $this->equalTo( 'name' ), $this->identicalTo( null ) );
 
                $this->mUserMock->expects( $this->once() )
                        ->method( 'saveSettings' );
@@ -215,24 +271,24 @@ class ApiOptionsTest extends MediaWikiLangTestCase {
                $this->mUserMock->expects( $this->never() )
                        ->method( 'resetOptions' );
 
-               $this->mUserMock->expects( $this->at( 1 ) )
+               $this->mUserMock->expects( $this->at( 2 ) )
                        ->method( 'getOptions' );
 
-               $this->mUserMock->expects( $this->at( 2 ) )
+               $this->mUserMock->expects( $this->at( 3 ) )
                        ->method( 'setOption' )
-                       ->with( $this->equalTo( 'willBeNull' ), $this->equalTo( null ) );
+                       ->with( $this->equalTo( 'willBeNull' ), $this->identicalTo( null ) );
 
-               $this->mUserMock->expects( $this->at( 3 ) )
+               $this->mUserMock->expects( $this->at( 4 ) )
                        ->method( 'getOptions' );
 
-               $this->mUserMock->expects( $this->at( 4 ) )
+               $this->mUserMock->expects( $this->at( 5 ) )
                        ->method( 'setOption' )
                        ->with( $this->equalTo( 'willBeEmpty' ), $this->equalTo( '' ) );
 
-               $this->mUserMock->expects( $this->at( 5 ) )
+               $this->mUserMock->expects( $this->at( 6 ) )
                        ->method( 'getOptions' );
 
-               $this->mUserMock->expects( $this->at( 6 ) )
+               $this->mUserMock->expects( $this->at( 7 ) )
                        ->method( 'setOption' )
                        ->with( $this->equalTo( 'willBeHappy' ), $this->equalTo( 'Happy' ) );
 
@@ -250,17 +306,17 @@ class ApiOptionsTest extends MediaWikiLangTestCase {
                $this->mUserMock->expects( $this->once() )
                        ->method( 'resetOptions' );
 
-               $this->mUserMock->expects( $this->at( 2 ) )
+               $this->mUserMock->expects( $this->at( 3 ) )
                        ->method( 'getOptions' );
 
-               $this->mUserMock->expects( $this->at( 3 ) )
+               $this->mUserMock->expects( $this->at( 4 ) )
                        ->method( 'setOption' )
                        ->with( $this->equalTo( 'willBeHappy' ), $this->equalTo( 'Happy' ) );
 
-               $this->mUserMock->expects( $this->at( 4 ) )
+               $this->mUserMock->expects( $this->at( 5 ) )
                        ->method( 'getOptions' );
 
-               $this->mUserMock->expects( $this->at( 5 ) )
+               $this->mUserMock->expects( $this->at( 6 ) )
                        ->method( 'setOption' )
                        ->with( $this->equalTo( 'name' ), $this->equalTo( 'value' ) );
 
@@ -283,21 +339,21 @@ class ApiOptionsTest extends MediaWikiLangTestCase {
                $this->mUserMock->expects( $this->never() )
                        ->method( 'resetOptions' );
 
-               $this->mUserMock->expects( $this->at( 1 ) )
-                       ->method( 'setOption' )
-                       ->with( $this->equalTo( 'testmultiselect-opt1' ), $this->equalTo( true ) );
-
                $this->mUserMock->expects( $this->at( 2 ) )
                        ->method( 'setOption' )
-                       ->with( $this->equalTo( 'testmultiselect-opt2' ), $this->equalTo( false ) );
+                       ->with( $this->equalTo( 'testmultiselect-opt1' ), $this->identicalTo( true ) );
 
                $this->mUserMock->expects( $this->at( 3 ) )
                        ->method( 'setOption' )
-                       ->with( $this->equalTo( 'testmultiselect-opt3' ), $this->equalTo( false ) );
+                       ->with( $this->equalTo( 'testmultiselect-opt2' ), $this->identicalTo( null ) );
 
                $this->mUserMock->expects( $this->at( 4 ) )
                        ->method( 'setOption' )
-                       ->with( $this->equalTo( 'testmultiselect-opt4' ), $this->equalTo( false ) );
+                       ->with( $this->equalTo( 'testmultiselect-opt3' ), $this->identicalTo( false ) );
+
+               $this->mUserMock->expects( $this->at( 5 ) )
+                       ->method( 'setOption' )
+                       ->with( $this->equalTo( 'testmultiselect-opt4' ), $this->identicalTo( false ) );
 
                $this->mUserMock->expects( $this->once() )
                        ->method( 'saveSettings' );
@@ -310,4 +366,47 @@ class ApiOptionsTest extends MediaWikiLangTestCase {
 
                $this->assertEquals( self::$Success, $response );
        }
+
+       public function testUnknownOption() {
+               $this->mUserMock->expects( $this->never() )
+                       ->method( 'resetOptions' );
+
+               $this->mUserMock->expects( $this->never() )
+                       ->method( 'saveSettings' );
+
+               $request = $this->getSampleRequest( array(
+                       'change' => 'unknownOption=1'
+               ) );
+
+               $response = $this->executeQuery( $request );
+
+               $this->assertEquals( array(
+                       'options' => 'success',
+                       'warnings' => array(
+                               'options' => array(
+                                       '*' => "Validation error for 'unknownOption': not a valid preference"
+                               )
+                       )
+               ), $response );
+       }
+
+       public function testUserjsOption() {
+               $this->mUserMock->expects( $this->never() )
+                       ->method( 'resetOptions' );
+
+               $this->mUserMock->expects( $this->at( 2 ) )
+                       ->method( 'setOption' )
+                       ->with( $this->equalTo( 'userjs-option' ), $this->equalTo( '1' ) );
+
+               $this->mUserMock->expects( $this->once() )
+                       ->method( 'saveSettings' );
+
+               $request = $this->getSampleRequest( array(
+                       'change' => 'userjs-option=1'
+               ) );
+
+               $response = $this->executeQuery( $request );
+
+               $this->assertEquals( self::$Success, $response );
+       }
 }
index b5dabf0..93ff24a 100644 (file)
@@ -3,6 +3,7 @@
 /**
  * @group API
  * @group Database
+ * @group medium
  */
 class ApiParseTest extends ApiTestCase {
 
index d903714..3ab77fd 100644 (file)
@@ -3,6 +3,7 @@
 /**
  * @group API
  * @group Database
+ * @group medium
  */
 class ApiPurgeTest extends ApiTestCase {
 
index 28dcb97..19da81c 100644 (file)
@@ -3,6 +3,7 @@
 /**
  * @group API
  * @group Database
+ * @group medium
  */
 class ApiQueryRevisionsTest extends ApiTestCase {
 
index dbf02f7..1b1886e 100644 (file)
@@ -3,6 +3,7 @@
 /**
  * @group API
  * @group Database
+ * @group medium
  */
 class ApiQueryTest extends ApiTestCase {
 
index a1b941d..2f2f5f9 100644 (file)
@@ -3,6 +3,7 @@
 /**
  * @group API
  * @group Database
+ * @group medium
  */
 class ApiTest extends ApiTestCase {
 
index 7e054a4..fcd581a 100644 (file)
@@ -147,6 +147,17 @@ abstract class ApiTestCase extends MediaWikiLangTestCase {
                        'prop' => 'info' ), $session, false, $user->user );
                return $data;
        }
+
+       public function testApiTestGroup() {
+               $groups = PHPUnit_Util_Test::getGroups( get_class( $this ) );
+               $constraint = PHPUnit_Framework_Assert::logicalOr(
+                       $this->contains( 'medium' ),
+                       $this->contains( 'large' )
+               );
+               $this->assertThat( $groups, $constraint,
+                       'ApiTestCase::setUp can be slow, tests must be "medium" or "large"'
+               );
+       }
 }
 
 class UserWrapper {
index 9f281bd..458bea4 100644 (file)
@@ -108,19 +108,19 @@ abstract class ApiTestCaseUpload extends ApiTestCase {
 
        }
 
-       function fakeUploadChunk(  $fieldName, $fileName, $type, & $chunkData ){
+       function fakeUploadChunk(  $fieldName, $fileName, $type, & $chunkData ) {
                $tmpName = tempnam( wfTempDir(), "" );
-               // copy the chunk data to temp location: 
+               // copy the chunk data to temp location:
                if ( !file_put_contents( $tmpName, $chunkData ) ) {
                        throw new Exception( "couldn't copy chunk data to $tmpName" );
                }
-               
+
                clearstatcache();
                $size = filesize( $tmpName );
                if ( $size === false ) {
                        throw new Exception( "couldn't stat $tmpName" );
                }
-               
+
                $_FILES[ $fieldName ] = array(
                        'name'          => $fileName,
                        'type'          => $type,
index b7ae292..4fecec0 100644 (file)
@@ -3,6 +3,7 @@
 /**
  * @group API
  * @group Database
+ * @group medium
  * @todo This test suite is severly broken and need a full review
  */
 class ApiWatchTest extends ApiTestCase {
index 69b01ea..3bacb05 100644 (file)
@@ -1,7 +1,8 @@
 <?php
 
 /**
- * Checks that all API query modules, core and extensions, have unique prefixes
+ * Checks that all API query modules, core and extensions, have unique prefixes.
+ *
  * @group API
  */
 class PrefixUniquenessTest extends MediaWikiTestCase {
index 8209f59..a59983d 100644 (file)
@@ -3,17 +3,17 @@
 /**
  * @group API
  * @group Database
+ * @group medium
  */
 class ApiFormatPhpTest extends ApiFormatTestBase {
 
        function testValidPhpSyntax() {
-               
+
                $data = $this->apiRequest( 'php', array( 'action' => 'query', 'meta' => 'siteinfo' ) );
-               
+
                $this->assertInternalType( 'array', unserialize( $data ) );
-               $this->assertGreaterThan( 0, count( (array) $data ) );
-               
-               
+               $this->assertGreaterThan( 0, count( (array)$data ) );
+
        }
 
 }
index ee34562..a054283 100644 (file)
@@ -47,5 +47,3 @@ class GenerateRandomImages extends Maintenance {
 
 $maintClass = 'GenerateRandomImages';
 require( RUN_MAINTENANCE_IF_MAIN );
-
-
index 73d0012..e12c8c7 100644 (file)
@@ -103,7 +103,7 @@ class ContentHandlerTest extends MediaWikiTestCase {
 
                if ( $expected ) {
                        $this->assertNotNull( $name, "no name found for content model $id" );
-                       $this->assertTrue( preg_match( $expected, $name ) > 0 ,
+                       $this->assertTrue( preg_match( $expected, $name ) > 0,
                                "content model name for #$id did not match pattern $expected"
                        );
                } else {
@@ -361,8 +361,7 @@ class DummyContentForTesting extends AbstractContent {
         * @return mixed the native representation of the content. Could be a string, a nested array
         *  structure, an object, a binary blob... anything, really.
         */
-       public function getNativeData()
-       {
+       public function getNativeData() {
                return $this->data;
        }
 
@@ -415,7 +414,7 @@ class DummyContentForTesting extends AbstractContent {
         *
         * @return ParserOutput
         */
-       public function getParserOutput( Title $title, $revId = null, ParserOptions $options = NULL, $generateHtml = true ) {
+       public function getParserOutput( Title $title, $revId = null, ParserOptions $options = null, $generateHtml = true ) {
                return new ParserOutput( $this->getNativeData() );
        }
 }
index 3501aec..ca387a2 100644 (file)
@@ -349,12 +349,15 @@ class TextContentTest extends MediaWikiLangTestCase {
         * @dataProvider dataGetDeletionUpdates
         */
        public function testDeletionUpdates( $title, $model, $text, $expectedStuff ) {
-               $title = Title::newFromText( $title );
-               $title->resetArticleID( 2342 ); //dummy id. fine as long as we don't try to execute the updates!
+               $ns = $this->getDefaultWikitextNS();
+               $title = Title::newFromText( $title, $ns );
 
                $content = ContentHandler::makeContent( $text, $title, $model );
 
-               $updates = $content->getDeletionUpdates( WikiPage::factory( $title ) );
+               $page = WikiPage::factory( $title );
+               $page->doEditContent( $content, '' );
+
+               $updates = $content->getDeletionUpdates( $page );
 
                // make updates accessible by class name
                foreach ( $updates as $update ) {
@@ -377,6 +380,8 @@ class TextContentTest extends MediaWikiLangTestCase {
                                $this->assertEquals( $value, $v, "unexpected value for field $field in instance of $class" );
                        }
                }
+
+               $page->doDeleteArticle( '' );
        }
 
        public static function provideConvert() {
index b76e9aa..7cf473e 100644 (file)
@@ -69,11 +69,14 @@ more stuff
         * @group Database
         */
        public function testGetSecondaryDataUpdates( $title, $model, $text, $expectedStuff ) {
-               $title = Title::newFromText( $title );
-               $title->resetArticleID( 2342 ); //dummy id. fine as long as we don't try to execute the updates!
+               $ns = $this->getDefaultWikitextNS();
+               $title = Title::newFromText( $title, $ns );
 
                $content = ContentHandler::makeContent( $text, $title, $model );
 
+               $page = WikiPage::factory( $title );
+               $page->doEditContent( $content, '' );
+
                $updates = $content->getSecondaryDataUpdates( $title );
 
                // make updates accessible by class name
@@ -92,6 +95,8 @@ more stuff
                                $this->assertEquals( $value, $v, "unexpected value for field $field in instance of $class" );
                        }
                }
+
+               $page->doDeleteArticle( '' );
        }
 
        public static function dataGetSection() {
index 51127f8..9a62abc 100644 (file)
@@ -145,4 +145,4 @@ class DatabaseSQLTest extends MediaWikiTestCase {
                        ),
                );
        }
-}
\ No newline at end of file
+}
index 7958a8a..3e71603 100644 (file)
@@ -12,7 +12,10 @@ class MockDatabaseSqlite extends DatabaseSqliteStandalone {
                return true;
        }
 
-       function replaceVars( $s ) {
+       /**
+        * Override parent visibility to public
+        */
+       public function replaceVars( $s ) {
                return parent::replaceVars( $s );
        }
 }
@@ -232,7 +235,7 @@ class DatabaseSqliteTest extends MediaWikiTestCase {
         * @todo: currently only checks list of tables
         */
        public function testUpgrades() {
-               global $IP, $wgVersion;
+               global $IP, $wgVersion, $wgProfileToDatabase;
 
                // Versions tested
                $versions = array(
@@ -251,6 +254,9 @@ class DatabaseSqliteTest extends MediaWikiTestCase {
 
                $currentDB = new DatabaseSqliteStandalone( ':memory:' );
                $currentDB->sourceFile( "$IP/maintenance/tables.sql" );
+               if ( $wgProfileToDatabase ) {
+                       $currentDB->sourceFile( "$IP/maintenance/sqlite/archives/patch-profiling.sql" );
+               }
                $currentTables = $this->getTables( $currentDB );
                sort( $currentTables );
 
@@ -372,4 +378,12 @@ class DatabaseSqliteTest extends MediaWikiTestCase {
                ksort( $indexes );
                return $indexes;
        }
+
+       function testCaseInsensitiveLike() {
+               // TODO: Test this for all databases
+               $db = new DatabaseSqliteStandalone( ':memory:' );\r
+               $res = $db->query( 'SELECT "a" LIKE "A" AS a' );\r
+               $row = $res->fetchRow();\r
+               $this->assertFalse( (bool)$row['a'] );\r
+       }
 }
index cbbdc1f..8c992c7 100644 (file)
@@ -210,5 +210,3 @@ class DatabaseTest extends MediaWikiTestCase {
                );
        }
 }
-
-
index 8516241..596d0bd 100644 (file)
@@ -43,19 +43,19 @@ abstract class ORMRowTest extends \MediaWikiTestCase {
         * @since 1.20
         * @return string
         */
-       protected abstract function getRowClass();
+       abstract protected function getRowClass();
 
        /**
         * @since 1.20
         * @return IORMTable
         */
-       protected abstract function getTableInstance();
+       abstract protected function getTableInstance();
 
        /**
         * @since 1.20
         * @return array
         */
-       public abstract function constructorTestProvider();
+       abstract public function constructorTestProvider();
 
        /**
         * @since 1.20
@@ -222,4 +222,4 @@ abstract class ORMRowTest extends \MediaWikiTestCase {
 
        // TODO: test all of the methods!
 
-}
\ No newline at end of file
+}
index 2ed3dd3..4cadf31 100644 (file)
  * @ingroup Test
  *
  * @group ORM
+ * @group Database
  *
  * @licence GNU GPL v2+
  * @author Jeroen De Dauw < jeroendedauw@gmail.com >
+ * @author Daniel Kinzler
  */
-abstract class ORMTableTest extends MediaWikiTestCase {
+class ORMTableTest extends MediaWikiTestCase {
 
        /**
         * @since 1.21
         * @return string
         */
-       protected abstract function getTableClass();
+       protected function getTableClass() {
+               return 'PageORMTableForTesting';
+       }
 
        /**
         * @since 1.21
@@ -62,4 +66,81 @@ abstract class ORMTableTest extends MediaWikiTestCase {
                $this->assertTrue( $class::singleton() === $class::singleton() );
        }
 
+       /**
+        * @since 1.21
+        */
+       public function testIgnoreErrorsOverride() {
+               $table = $this->getTable();
+
+               $db = $table->getReadDbConnection();
+               $db->ignoreErrors( true );
+
+               try {
+                       $table->rawSelect( "this is invalid" );
+                       $this->fail( "An invalid query should trigger a DBQueryError even if ignoreErrors is enabled." );
+               } catch ( DBQueryError $ex ) {
+                       $this->assertTrue( true, "just making phpunit happy" );
+               }
+
+               $db->ignoreErrors( false );
+       }
+
+}
+
+/**
+ * Dummy ORM table for testing, reading Title objects from the page table.
+ *
+ * @since 1.21
+ */
+
+class PageORMTableForTesting extends ORMTable {
+
+       /**
+        * @see ORMTable::getName
+        *
+        * @return string
+        */
+       public function getName() {
+               return 'page';
+       }
+
+       /**
+        * @see ORMTable::getRowClass
+        *
+        * @return string
+        */
+       public function getRowClass() {
+               return 'Title';
+       }
+
+       /**
+        * @see ORMTable::newRow
+        *
+        * @return IORMRow
+        */
+       public function newRow( array $data, $loadDefaults = false ) {
+               return Title::makeTitle( $data['namespace'], $data['title'] );
+       }
+
+       /**
+        * @see ORMTable::getFields
+        *
+        * @return array
+        */
+       public function getFields() {
+               return array(
+                       'id' => 'int',
+                       'namespace' => 'int',
+                       'title' => 'str',
+               );
+       }
+
+       /**
+        * @see ORMTable::getFieldPrefix
+        *
+        * @return string
+        */
+       protected function getFieldPrefix() {
+               return 'page_';
+       }
 }
index 7beb4fe..b0e07f2 100644 (file)
@@ -799,7 +799,7 @@ class FileBackendTest extends MediaWikiTestCase {
                        $status = $this->prepare( array( 'dir' => dirname( $path ) ) );
                        $this->assertGoodStatus( $status,
                                "Preparing $path succeeded without warnings ($backendName)." );
-                       $ops[] = array( 'op' => 'create', 'dst' => $path, 'content' => mt_rand(0,50000) );
+                       $ops[] = array( 'op' => 'create', 'dst' => $path, 'content' => mt_rand(0, 50000) );
                        $purgeOps[] = array( 'op' => 'delete', 'src' => $path );
                }
                $purgeOps[] = array( 'op' => 'null' );
@@ -1998,12 +1998,22 @@ class FileBackendTest extends MediaWikiTestCase {
 
                $this->assertEquals( $expected, $list, "Correct dir listing ($backendName)." );
 
+               $iter = $this->backend->getDirectoryList( array( 'dir' => "$base/unittest-cont1/e/subdir1" ) );
+               $items = is_array( $iter ) ? $iter : iterator_to_array( $iter );
+               $this->assertEquals( array(), $items, "Directory listing is empty." );
+
                foreach ( $files as $file ) { // clean up
                        $this->backend->doOperation( array( 'op' => 'delete', 'src' => $file ) );
                }
 
                $iter = $this->backend->getDirectoryList( array( 'dir' => "$base/unittest-cont1/not/exists" ) );
-               foreach ( $iter as $iter ) {} // no errors
+               foreach ( $iter as $file ) {} // no errors
+               $items = is_array( $iter ) ? $iter : iterator_to_array( $iter );
+               $this->assertEquals( array(), $items, "Directory listing is empty." );
+
+               $iter = $this->backend->getDirectoryList( array( 'dir' => "$base/unittest-cont1/e/not/exists" ) );
+               $items = is_array( $iter ) ? $iter : iterator_to_array( $iter );
+               $this->assertEquals( array(), $items, "Directory listing is empty." );
        }
 
        public function testLockCalls() {
index 7d815e9..5f01c70 100644 (file)
@@ -84,7 +84,7 @@ class StoreBatchTest extends MediaWikiTestCase {
                $f = $this->storeit( $fn, $infn, 0 );
                $this->assertTrue( $f->isOK(), 'failed to store a new file' );
                $this->assertEquals( $f->failCount, 0, "counts wrong {$f->successCount} {$f->failCount}" );
-               $this->assertEquals( $f->successCount, 1 , "counts wrong {$f->successCount} {$f->failCount}" );
+               $this->assertEquals( $f->successCount, 1, "counts wrong {$f->successCount} {$f->failCount}" );
                if ( $fromrepo ) {
                        $f = $this->storeit( "Other-$fn", $infn, FileRepo::OVERWRITE);
                        $infn = $f->value;
@@ -93,17 +93,17 @@ class StoreBatchTest extends MediaWikiTestCase {
                $f = $this->storeit( $fn, $infn, FileRepo::OVERWRITE );
                $this->assertTrue( $f->isOK(), 'We should be allowed to overwrite' );
                $this->assertEquals( $f->failCount, 0, "counts wrong {$f->successCount} {$f->failCount}" );
-               $this->assertEquals( $f->successCount, 1 , "counts wrong {$f->successCount} {$f->failCount}" );
+               $this->assertEquals( $f->successCount, 1, "counts wrong {$f->successCount} {$f->failCount}" );
                // This should fail because we're overwriting.
                $f = $this->storeit( $fn, $infn, 0 );
                $this->assertFalse( $f->isOK(), 'We should not be allowed to overwrite' );
                $this->assertEquals( $f->failCount, 1, "counts wrong {$f->successCount} {$f->failCount}" );
-               $this->assertEquals( $f->successCount, 0 , "counts wrong {$f->successCount} {$f->failCount}" );
+               $this->assertEquals( $f->successCount, 0, "counts wrong {$f->successCount} {$f->failCount}" );
                // This should succeed because we're overwriting the same content.
                $f = $this->storeit( $fn, $infn, FileRepo::OVERWRITE_SAME );
                $this->assertTrue( $f->isOK(), 'We should be able to overwrite the same content' );
                $this->assertEquals( $f->failCount, 0, "counts wrong {$f->successCount} {$f->failCount}" );
-               $this->assertEquals( $f->successCount, 1 , "counts wrong {$f->successCount} {$f->failCount}" );
+               $this->assertEquals( $f->successCount, 1, "counts wrong {$f->successCount} {$f->failCount}" );
                // This should fail because we're overwriting different content.
                if ( $fromrepo ) {
                        $f = $this->storeit( "Other-$fn", $otherfn, FileRepo::OVERWRITE);
@@ -112,7 +112,7 @@ class StoreBatchTest extends MediaWikiTestCase {
                $f = $this->storeit( $fn, $otherfn, FileRepo::OVERWRITE_SAME );
                $this->assertFalse( $f->isOK(), 'We should not be allowed to overwrite different content' );
                $this->assertEquals( $f->failCount, 1, "counts wrong {$f->successCount} {$f->failCount}" );
-               $this->assertEquals( $f->successCount, 0 , "counts wrong {$f->successCount} {$f->failCount}" );
+               $this->assertEquals( $f->successCount, 0, "counts wrong {$f->successCount} {$f->failCount}" );
        }
 
        public function teststore() {
index 54f6607..2cd86ea 100644 (file)
@@ -458,6 +458,16 @@ class CSSJanusTest extends MediaWikiTestCase {
                                ".foo\t{\tleft\t:\t0;}",
                                ".foo\t{\tright\t:\t0;}"
                        ),
+
+                       // Guard against partial keys
+                       array(
+                               '.foo { leftxx: 0; }',
+                               '.foo { leftxx: 0; }'
+                       ),
+                       array(
+                               '.foo { rightxx: 0; }',
+                               '.foo { rightxx: 0; }'
+                       ),
                );
        }
 
@@ -534,16 +544,6 @@ class CSSJanusTest extends MediaWikiTestCase {
         */
        function provideTransformBrokenCases() {
                return array(
-                       // Guard against partial keys
-                       array(
-                               '.foo { leftxx: 0; }',
-                               '.foo { leftxx: 0; }'
-                       ),
-                       array(
-                               '.foo { rightxx: 0; }',
-                               '.foo { rightxx: 0; }'
-                       ),
-
                        // Guard against selectors that look flippable
                        array(
                                # <foo-left-x attr="x">
index c0f8a96..3bbf3aa 100644 (file)
@@ -36,7 +36,7 @@ abstract class GenericArrayObjectTest extends MediaWikiTestCase {
         *
         * @return array
         */
-       public abstract function elementInstancesProvider();
+       abstract public function elementInstancesProvider();
 
        /**
         * Returns the name of the concrete class being tested.
@@ -45,7 +45,7 @@ abstract class GenericArrayObjectTest extends MediaWikiTestCase {
         *
         * @return string
         */
-       public abstract function getInstanceClass();
+       abstract public function getInstanceClass();
 
        /**
         * Provides instances of the concrete class being tested.
index d6cbbee..2fa2cc0 100755 (executable)
@@ -43,6 +43,13 @@ class LogFormatterTest extends MediaWikiLangTestCase {
                $this->context->setLanguage( $wgLang );
        }
 
+       protected function tearDown() {
+               parent::tearDown();
+
+               global $wgLang;
+               $wgLang->getLocalisationCache()->recache( $wgLang->getCode() );
+       }
+
        public function newLogEntry( $action, $params ) {
                $logEntry = new ManualLogEntry( 'phpunit', $action );
                $logEntry->setPerformer( $this->user );
index 8a0a421..c074696 100755 (executable)
@@ -12,4 +12,4 @@ $messages['en'] = array(
        'log-description-phpunit' => 'Log for PHPUnit-tests',
        'logentry-phpunit-test'   => '$1 {{GENDER:$2|tests}} with page $3',
        'logentry-phpunit-param'  => '$4',
-);
\ No newline at end of file
+);
index d52fecc..88b2a83 100644 (file)
@@ -222,41 +222,40 @@ class ExifRotationTest extends MediaWikiTestCase {
                        )
                );
        }
-       
-       
+
+
        const TEST_WIDTH = 100;
        const TEST_HEIGHT = 200;
-       
+
        /**
         * @dataProvider provideBitmapExtractPreRotationDimensions
         */
        function testBitmapExtractPreRotationDimensions( $rotation, $expected ) {
                $result = $this->handler->extractPreRotationDimensions( array(
-                               'physicalWidth' => self::TEST_WIDTH, 
+                               'physicalWidth' => self::TEST_WIDTH,
                                'physicalHeight' => self::TEST_HEIGHT,
                        ), $rotation );
                $this->assertEquals( $expected, $result );
        }
-       
+
        function provideBitmapExtractPreRotationDimensions() {
                return array(
                        array(
                                0,
-                               array( self::TEST_WIDTH, self::TEST_HEIGHT ) 
+                               array( self::TEST_WIDTH, self::TEST_HEIGHT )
                        ),
                        array(
                                90,
-                               array( self::TEST_HEIGHT, self::TEST_WIDTH ) 
+                               array( self::TEST_HEIGHT, self::TEST_WIDTH )
                        ),
                        array(
                                180,
-                               array( self::TEST_WIDTH, self::TEST_HEIGHT ) 
+                               array( self::TEST_WIDTH, self::TEST_HEIGHT )
                        ),
                        array(
                                270,
-                               array( self::TEST_HEIGHT, self::TEST_WIDTH ) 
+                               array( self::TEST_HEIGHT, self::TEST_WIDTH )
                        ),
                );
        }
 }
-
index 99df4f8..4e4c649 100644 (file)
@@ -46,5 +46,3 @@ class MediaHandlerTest extends MediaWikiTestCase {
                }
        }
 }
-
-
index e027668..0260f29 100644 (file)
@@ -9,6 +9,8 @@ class PNGMetadataExtractorTest extends MediaWikiTestCase {
         * Tests zTXt tag (compressed textual metadata) 
         */
        function testPngNativetZtxt() {
+               $this->checkPHPExtension( 'zlib' );
+
                $meta = PNGMetadataExtractor::getMetadata( $this->filePath .
                        'Png-native-test.png' );
                $expected = "foo bar baz foo foo foo foof foo foo foo foo";
index d9a59ca..f131972 100644 (file)
@@ -106,4 +106,3 @@ class SVGMetadataExtractorTest extends MediaWikiTestCase {
                );
        }
 }
-
diff --git a/tests/phpunit/includes/objectcache/BagOStuffTest.php b/tests/phpunit/includes/objectcache/BagOStuffTest.php
new file mode 100644 (file)
index 0000000..f5264be
--- /dev/null
@@ -0,0 +1,108 @@
+<?php
+/**
+ * This class will test BagOStuff.
+ *
+ * @author     Matthias Mullie <mmullie@wikimedia.org>
+ */
+class BagOStuffTest extends MediaWikiTestCase {
+       private $cache;
+
+       protected function setUp() {
+               parent::setUp();
+
+               // type defined through parameter
+               if ( $this->getCliArg( 'use-bagostuff=' ) ) {
+                       $name = $this->getCliArg( 'use-bagostuff=' );
+
+                       $this->cache = ObjectCache::newFromId( $name );
+
+               // no type defined - use simple hash
+               } else {
+                       $this->cache = new HashBagOStuff;
+               }
+
+               $this->cache->delete( wfMemcKey( 'test' ) );
+       }
+
+       protected function tearDown() {
+       }
+
+       public function testMerge() {
+               $key = wfMemcKey( 'test' );
+
+               $usleep = 0;
+
+               /**
+                * Callback method: append "merged" to whatever is in cache.
+                *
+                * @param BagOStuff $cache
+                * @param string $key
+                * @param int $existingValue
+                * @use int $usleep
+                * @return int
+                */
+               $callback = function( BagOStuff $cache, $key, $existingValue ) use ( &$usleep ) {
+                       // let's pretend this is an expensive callback to test concurrent merge attempts
+                       usleep( $usleep );
+
+                       if ( $existingValue === false ) {
+                               return 'merged';
+                       }
+
+                       return $existingValue . 'merged';
+               };
+
+               // merge on non-existing value
+               $merged = $this->cache->merge( $key, $callback, 0 );
+               $this->assertTrue( $merged );
+               $this->assertEquals( $this->cache->get( $key ), 'merged' );
+
+               // merge on existing value
+               $merged = $this->cache->merge( $key, $callback, 0 );
+               $this->assertTrue( $merged );
+               $this->assertEquals( $this->cache->get( $key ), 'mergedmerged' );
+
+               /*
+                * Test concurrent merges by forking this process, if:
+                * - not manually called with --use-bagostuff
+                * - pcntl_fork is supported by the system
+                * - cache type will correctly support calls over forks
+                */
+               $fork = (bool)$this->getCliArg( 'use-bagostuff=' );
+               $fork &= function_exists( 'pcntl_fork' );
+               $fork &= !$this->cache instanceof HashBagOStuff;
+               $fork &= !$this->cache instanceof EmptyBagOStuff;
+               $fork &= !$this->cache instanceof MultiWriteBagOStuff;
+               if ( $fork ) {
+                       // callback should take awhile now so that we can test concurrent merge attempts
+                       $usleep = 5000;
+
+                       $pid = pcntl_fork();
+                       if ( $pid == -1 ) {
+                               // can't fork, ignore this test...
+                       } elseif ( $pid ) {
+                               // wait a little, making sure that the child process is calling merge
+                               usleep( 3000 );
+
+                               // attempt a merge - this should fail
+                               $merged = $this->cache->merge( $key, $callback, 0, 1 );
+
+                               // merge has failed because child process was merging (and we only attempted once)
+                               $this->assertFalse( $merged );
+
+                               // make sure the child's merge is completed and verify
+                               usleep( 3000 );
+                               $this->assertEquals( $this->cache->get( $key ), 'mergedmergedmerged' );
+                       } else {
+                               $this->cache->merge( $key, $callback, 0, 1 );
+
+                               // Note: I'm not even going to check if the merge worked, I'll
+                               // compare values in the parent process to test if this merge worked.
+                               // I'm just going to exit this child process, since I don't want the
+                               // child to output any test results (would be rather confusing to
+                               // have test output twice)
+                               exit;
+                       }
+               }
+       }
+}
index 5f670fc..c82ae9b 100644 (file)
@@ -189,7 +189,7 @@ class MagicVariableTest extends MediaWikiTestCase {
         */
        private function assertMagic( $expected, $magic ) {
                if( in_array( $magic, $this->expectedAsInteger ) ) {
-                       $expected = (int) $expected;
+                       $expected = (int)$expected;
                }
 
                # Generate a message for the assertion
index b15365c..013b02c 100644 (file)
@@ -22,7 +22,7 @@ class MediaWikiParserTest {
                         * and then was ucfirst( basename( $filename, '.txt' )
                         * but that didn't work with names like foo.tests.txt
                         */
-                       $className = str_replace( '.', '_',  ucfirst( $testsName ) );
+                       $className = str_replace( '.', '_', ucfirst( $testsName ) );
 
                        eval( "/** @group Database\n@group Parser\n*/ class $className extends NewParserTest { protected \$file = '" . strtr( $filename, array( "'" => "\\'", '\\' => '\\\\' ) ) . "'; } " );
 
index e0f95b6..f3a12d0 100644 (file)
@@ -30,4 +30,3 @@ class ParserMethodsTest extends MediaWikiLangTestCase {
 
        // TODO: Add tests for cleanSig() / cleanSigInSig(), getSection(), replaceSection(), getPreloadText()
 }
-
index 2244fdb..68f77ab 100644 (file)
@@ -35,4 +35,21 @@ class ParserOutputTest extends MediaWikiTestCase {
 
                $this->assertEquals( $shouldMatch, ParserOutput::isLinkInternal( $server, $url ) );
        }
+
+       public function testExtensionData() {
+               $po = new ParserOutput();
+
+               $po->setExtensionData( "one", "Foo" );
+
+               $this->assertEquals( "Foo", $po->getExtensionData( "one" ) );
+               $this->assertNull( $po->getExtensionData( "spam" ) );
+
+               $po->setExtensionData( "two", "Bar" );
+               $this->assertEquals( "Foo", $po->getExtensionData( "one" ) );
+               $this->assertEquals( "Bar", $po->getExtensionData( "two" ) );
+
+               $po->setExtensionData( "one", null );
+               $this->assertNull( $po->getExtensionData( "one" ) );
+               $this->assertEquals( "Bar", $po->getExtensionData( "two" ) );
+       }
 }
index 8b83b67..c3a251f 100644 (file)
@@ -226,4 +226,3 @@ class PreprocessorTest extends MediaWikiTestCase {
                $this->assertEquals( $this->normalizeXml( $expectedXml ), $this->preprocessToXml( $wikiText ) );
        }
 }
-
index 511166a..7339fb8 100644 (file)
@@ -31,6 +31,8 @@ class SearchEngineTest extends MediaWikiLangTestCase {
 
        protected function tearDown() {
                unset( $this->search );
+
+               parent::tearDown();
        }
 
        function pageExists( $title ) {
index 208ab1e..0cecdee 100644 (file)
  * @ingroup Test
  *
  * @group Site
- * @group Database
  *
  * @licence GNU GPL v2+
  * @author Jeroen De Dauw < jeroendedauw@gmail.com >
  */
-class MediaWikiSiteTest extends SiteObjectTest {
-
-       public function setUp() {
-               parent::setUp();
-
-               static $hasSites = false;
-
-               if ( !$hasSites ) {
-                       TestSites::insertIntoDb();
-                       $hasSites = true;
-               }
-       }
-
-       public function testFactoryConstruction() {
-               $this->assertInstanceOf( 'MediaWikiSite', MediaWikiSite::newFromGlobalId( 'enwiki' ) );
-               $this->assertInstanceOf( 'Site', MediaWikiSite::newFromGlobalId( 'enwiki' ) );
-               $this->assertInstanceOf( 'MediaWikiSite', SitesTable::singleton()->newRow( array( 'type' => Site::TYPE_MEDIAWIKI ) ) );
-       }
+class MediaWikiSiteTest extends SiteTest {
 
        public function testNormalizePageTitle() {
-               $site = MediaWikiSite::newFromGlobalId( 'enwiki' );
+               $site = new MediaWikiSite();
+               $site->setGlobalId( 'enwiki' );
 
                //NOTE: this does not actually call out to the enwiki site to perform the normalization,
                //      but uses a local Title object to do so. This is hardcoded on SiteLink::normalizePageTitle
@@ -73,8 +56,7 @@ class MediaWikiSiteTest extends SiteObjectTest {
         * @dataProvider fileUrlProvider
         */
        public function testGetFileUrl( $url, $filePath, $pathArgument, $expected ) {
-               $site = MediaWikiSite::newFromGlobalId( 'enwiki' );
-
+               $site = new MediaWikiSite();
                $site->setFilePath( $url . $filePath );
 
                $this->assertEquals( $expected, $site->getFileUrl( $pathArgument ) );
@@ -97,10 +79,9 @@ class MediaWikiSiteTest extends SiteObjectTest {
         * @dataProvider provideGetPageUrl
         */
        public function testGetPageUrl( $path, $page, $expected ) {
-               /* @var MediaWikiSite $site */
-               $site = MediaWikiSite::newFromGlobalId( 'enwiki' );
-
+               $site = new MediaWikiSite();
                $site->setLinkPath( $path );
+
                $this->assertContains( $path, $site->getPageUrl() );
                $this->assertContains( $expected, $site->getPageUrl( $page ) );
        }
diff --git a/tests/phpunit/includes/site/SiteArrayTest.php b/tests/phpunit/includes/site/SiteArrayTest.php
deleted file mode 100644 (file)
index 613f63f..0000000
+++ /dev/null
@@ -1,92 +0,0 @@
-<?php
-
-/**
- * Tests for the SiteArray class.
- * The tests for methods defined in the SiteList interface are in SiteListTest.
- *
- * 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
- *Both
- * Bith
- * @file
- * @since 1.21
- *
- * @ingroup Site
- * @ingroup Test
- *
- * @group Site
- *
- * @licence GNU GPL v2+
- * @author Jeroen De Dauw < jeroendedauw@gmail.com >
- */
-class SiteArrayTest extends GenericArrayObjectTest {
-
-       /**
-        * @see GenericArrayObjectTest::elementInstancesProvider
-        *
-        * @since 1.21
-        *
-        * @return array
-        */
-       public function elementInstancesProvider() {
-               $sites = TestSites::getSites();
-
-               $siteArrays = array();
-
-               $siteArrays[] = $sites;
-
-               $siteArrays[] = array( array_shift( $sites ) );
-
-               $siteArrays[] = array( array_shift( $sites ), array_shift( $sites ) );
-
-               return $this->arrayWrap( $siteArrays );
-       }
-
-       /**
-        * @see GenericArrayObjectTest::getInstanceClass
-        *
-        * @since 1.21
-        *
-        * @return array
-        */
-       public function getInstanceClass() {
-               return 'SiteArray';
-       }
-
-       /**
-        * @dataProvider instanceProvider
-        *
-        * @since 1.21
-        *
-        * @param SiteArray $list
-        */
-       public function testSerializationMore( SiteArray $list ) {
-               $serialization = serialize( $list );
-               /**
-                * @var SiteArray $copy
-                */
-               $copy = unserialize( $serialization );
-
-               $this->assertArrayEquals( $list->getGlobalIdentifiers(), $copy->getGlobalIdentifiers() );
-
-               /**
-                * @var Site $site
-                */
-               foreach ( $list as $site ) {
-                       $this->assertTrue( $copy->hasInternalId( $site->getInternalId() ) );
-               }
-       }
-
-}
\ No newline at end of file
index bb8367f..0307d4d 100644 (file)
@@ -1,7 +1,7 @@
 <?php
 
 /**
- * Tests for the SiteList implementing classes.
+ * Tests for the SiteList class.
  *
  * 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
@@ -41,7 +41,7 @@ class SiteListTest extends MediaWikiTestCase {
                $listInstances = array();
 
                foreach ( $sitesArrays as $sitesArray ) {
-                       $listInstances[] = new SiteArray( $sitesArray[0] );
+                       $listInstances[] = new SiteList( $sitesArray[0] );
                }
 
                return $this->arrayWrap( $listInstances );
@@ -164,5 +164,28 @@ class SiteListTest extends MediaWikiTestCase {
                $this->assertArrayEquals( $expected, $identifiers );
        }
 
+       /**
+        * @dataProvider siteListProvider
+        *
+        * @since 1.21
+        *
+        * @param SiteList $list
+        */
+       public function testSerialization( SiteList $list ) {
+               $serialization = serialize( $list );
+               /**
+                * @var SiteArray $copy
+                */
+               $copy = unserialize( $serialization );
+
+               $this->assertArrayEquals( $list->getGlobalIdentifiers(), $copy->getGlobalIdentifiers() );
+
+               /**
+                * @var Site $site
+                */
+               foreach ( $list as $site ) {
+                       $this->assertTrue( $copy->hasInternalId( $site->getInternalId() ) );
+               }
+       }
 
-}
\ No newline at end of file
+}
diff --git a/tests/phpunit/includes/site/SiteObjectTest.php b/tests/phpunit/includes/site/SiteObjectTest.php
deleted file mode 100644 (file)
index 207f46c..0000000
+++ /dev/null
@@ -1,294 +0,0 @@
-<?php
-
-/**
- * Tests for the SiteObject class.
- *
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License as published by
- * the Free Software Foundation; either version 2 of the License, or
- * (at your option) any later version.
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License along
- * with this program; if not, write to the Free Software Foundation, Inc.,
- * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
- * http://www.gnu.org/copyleft/gpl.html
- *
- * @file
- * @since 1.21
- *
- * @ingroup Site
- * @ingroup Test
- *
- * @group Site
- * @group Database
- *
- * @licence GNU GPL v2+
- * @author Jeroen De Dauw < jeroendedauw@gmail.com >
- */
-class SiteObjectTest extends ORMRowTest {
-
-       /**
-        * @see ORMRowTest::getRowClass
-        * @since 1.21
-        * @return string
-        */
-       protected function getRowClass() {
-               return 'SiteObject';
-       }
-
-       /**
-        * @see ORMRowTest::getTableInstance
-        * @since 1.21
-        * @return IORMTable
-        */
-       protected function getTableInstance() {
-               return SitesTable::singleton();
-       }
-
-       /**
-        * @see ORMRowTest::constructorTestProvider
-        * @since 1.21
-        * @return array
-        */
-       public function constructorTestProvider() {
-               $argLists = array();
-
-               $argLists[] = array( 'global_key' => 'foo' );
-
-               $argLists[] = array( 'global_key' => 'bar', 'type' => Site::TYPE_MEDIAWIKI );
-
-               $constructorArgs = array();
-
-               foreach ( $argLists as $argList ) {
-                       $constructorArgs[] = array( $argList, true );
-               }
-
-               return $constructorArgs;
-       }
-
-       /**
-        * @dataProvider instanceProvider
-        * @param Site $site
-        */
-       public function testGetInterwikiIds( Site $site ) {
-               $this->assertInternalType( 'array', $site->getInterwikiIds() );
-       }
-
-       /**
-        * @dataProvider instanceProvider
-        * @param Site $site
-        */
-       public function testGetNavigationIds( Site $site ) {
-               $this->assertInternalType( 'array', $site->getNavigationIds() );
-       }
-
-       /**
-        * @dataProvider instanceProvider
-        * @param Site $site
-        */
-       public function testAddNavigationId( Site $site ) {
-               $site->addNavigationId( 'foobar' );
-               $this->assertTrue( in_array( 'foobar', $site->getNavigationIds(), true ) );
-       }
-
-       /**
-        * @dataProvider instanceProvider
-        * @param Site $site
-        */
-       public function testAddInterwikiId( Site $site ) {
-               $site->addInterwikiId( 'foobar' );
-               $this->assertTrue( in_array( 'foobar', $site->getInterwikiIds(), true ) );
-       }
-
-       /**
-        * @dataProvider instanceProvider
-        * @param Site $site
-        */
-       public function testGetLanguageCode( Site $site ) {
-               $this->assertTypeOrFalse( 'string', $site->getLanguageCode() );
-       }
-
-       /**
-        * @dataProvider instanceProvider
-        * @param Site $site
-        */
-       public function testSetLanguageCode( Site $site ) {
-               $site->setLanguageCode( 'en' );
-               $this->assertEquals( 'en', $site->getLanguageCode() );
-       }
-
-       /**
-        * @dataProvider instanceProvider
-        * @param Site $site
-        */
-       public function testNormalizePageName( Site $site ) {
-               $this->assertInternalType( 'string', $site->normalizePageName( 'Foobar' ) );
-       }
-
-       /**
-        * @dataProvider instanceProvider
-        * @param Site $site
-        */
-       public function testGetGlobalId( Site $site ) {
-               $this->assertInternalType( 'string', $site->getGlobalId() );
-       }
-
-       /**
-        * @dataProvider instanceProvider
-        * @param Site $site
-        */
-       public function testSetGlobalId( Site $site ) {
-               $site->setGlobalId( 'foobar' );
-               $this->assertEquals( 'foobar', $site->getGlobalId() );
-       }
-
-       /**
-        * @dataProvider instanceProvider
-        * @param Site $site
-        */
-       public function testGetType( Site $site ) {
-               $this->assertInternalType( 'string', $site->getType() );
-       }
-
-       /**
-        * @dataProvider instanceProvider
-        * @param Site $site
-        */
-       public function testGetPath( Site $site ) {
-               $this->assertTypeOrFalse( 'string', $site->getPath( 'page_path' ) );
-               $this->assertTypeOrFalse( 'string', $site->getPath( 'file_path' ) );
-               $this->assertTypeOrFalse( 'string', $site->getPath( 'foobar' ) );
-       }
-
-       /**
-        * @dataProvider instanceProvider
-        * @param Site $site
-        */
-       public function testGetAllPaths( Site $site ) {
-               $this->assertInternalType( 'array', $site->getAllPaths() );
-       }
-
-       /**
-        * @dataProvider instanceProvider
-        * @param Site $site
-        */
-       public function testSetAndRemovePath( Site $site ) {
-               $count = count( $site->getAllPaths() );
-
-               $site->setPath( 'spam', 'http://www.wikidata.org/$1' );
-               $site->setPath( 'spam', 'http://www.wikidata.org/foo/$1' );
-               $site->setPath( 'foobar', 'http://www.wikidata.org/bar/$1' );
-
-               $this->assertEquals( $count + 2, count( $site->getAllPaths() ) );
-
-               $this->assertInternalType( 'string', $site->getPath( 'foobar' ) );
-               $this->assertEquals( 'http://www.wikidata.org/foo/$1', $site->getPath( 'spam' ) );
-
-               $site->removePath( 'spam' );
-               $site->removePath( 'foobar' );
-
-               $this->assertEquals( $count, count( $site->getAllPaths() ) );
-
-               $this->assertFalse( $site->getPath( 'foobar' ) );
-               $this->assertFalse( $site->getPath( 'spam' ) );
-       }
-
-       public function testSetLinkPath() {
-               /* @var SiteObject $site */
-               $site = $this->getRowInstance( $this->getMockFields(), false );
-               $path = "TestPath/$1";
-
-               $site->setLinkPath( $path );
-               $this->assertEquals( $path, $site->getLinkPath() );
-       }
-
-       public function testGetLinkPathType() {
-               /* @var SiteObject $site */
-               $site = $this->getRowInstance( $this->getMockFields(), false );
-
-               $path = 'TestPath/$1';
-               $site->setLinkPath( $path );
-               $this->assertEquals( $path, $site->getPath( $site->getLinkPathType() ) );
-
-               $path = 'AnotherPath/$1';
-               $site->setPath( $site->getLinkPathType(), $path );
-               $this->assertEquals( $path, $site->getLinkPath() );
-       }
-
-       public function testSetPath() {
-               /* @var SiteObject $site */
-               $site = $this->getRowInstance( $this->getMockFields(), false );
-
-               $path = 'TestPath/$1';
-               $site->setPath( 'foo', $path );
-
-               $this->assertEquals( $path, $site->getPath( 'foo' ) );
-       }
-
-       public function testProtocolRelativePath() {
-               /* @var SiteObject $site */
-               $site = $this->getRowInstance( $this->getMockFields(), false );
-
-               $type = $site->getLinkPathType();
-               $path = '//acme.com/'; // protocol-relative URL
-               $site->setPath( $type, $path );
-
-               $this->assertEquals( '', $site->getProtocol() );
-       }
-
-       public function provideGetPageUrl() {
-               //NOTE: the assumption that the URL is built by replacing $1
-               //      with the urlencoded version of $page
-               //      is true for SiteObject but not guaranteed for subclasses.
-               //      Subclasses need to override this provider appropriately.
-
-               return array(
-                       array( #0
-                               'http://acme.test/TestPath/$1',
-                               'Foo',
-                               '/TestPath/Foo',
-                       ),
-                       array( #1
-                               'http://acme.test/TestScript?x=$1&y=bla',
-                               'Foo',
-                               'TestScript?x=Foo&y=bla',
-                       ),
-                       array( #2
-                               'http://acme.test/TestPath/$1',
-                               'foo & bar/xyzzy (quux-shmoox?)',
-                               '/TestPath/foo%20%26%20bar%2Fxyzzy%20%28quux-shmoox%3F%29',
-                       ),
-               );
-       }
-
-       /**
-        * @dataProvider provideGetPageUrl
-        */
-       public function testGetPageUrl( $path, $page, $expected ) {
-               /* @var SiteObject $site */
-               $site = $this->getRowInstance( $this->getMockFields(), false );
-
-               //NOTE: the assumption that getPageUrl is based on getLinkPath
-               //      is true for SiteObject but not guaranteed for subclasses.
-               //      Subclasses need to override this test case appropriately.
-               $site->setLinkPath( $path );
-               $this->assertContains( $path, $site->getPageUrl() );
-
-               $this->assertContains( $expected, $site->getPageUrl( $page ) );
-       }
-
-       protected function assertTypeOrFalse( $type, $value ) {
-               if ( $value === false ) {
-                       $this->assertTrue( true );
-               }
-               else {
-                       $this->assertInternalType( $type, $value );
-               }
-       }
-
-}
\ No newline at end of file
diff --git a/tests/phpunit/includes/site/SiteSQLStoreTest.php b/tests/phpunit/includes/site/SiteSQLStoreTest.php
new file mode 100644 (file)
index 0000000..cf4ce94
--- /dev/null
@@ -0,0 +1,123 @@
+<?php
+
+/**
+ * Tests for the SiteSQLStore class.
+ *
+ * This program is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation; either version 2 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License along
+ * with this program; if not, write to the Free Software Foundation, Inc.,
+ * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
+ * http://www.gnu.org/copyleft/gpl.html
+ *
+ * @file
+ * @since 1.21
+ *
+ * @ingroup Site
+ * @ingroup Test
+ *
+ * @group Site
+ * @group Database
+ *
+ * @licence GNU GPL v2+
+ * @author Jeroen De Dauw < jeroendedauw@gmail.com >
+ */
+class SiteSQLStoreTest extends MediaWikiTestCase {
+
+       public function testGetSites() {
+               $expectedSites = TestSites::getSites();
+               TestSites::insertIntoDb();
+
+               $store = SiteSQLStore::newInstance();
+
+               $sites = $store->getSites();
+
+               $this->assertInstanceOf( 'SiteList', $sites );
+
+               /**
+                * @var Site $site
+                */
+               foreach ( $sites as $site ) {
+                       $this->assertInstanceOf( 'Site', $site );
+               }
+
+               foreach ( $expectedSites as $site ) {
+                       if ( $site->getGlobalId() !== null ) {
+                               $this->assertTrue( $sites->hasSite( $site->getGlobalId() ) );
+                       }
+               }
+       }
+
+       public function testSaveSites() {
+               $store = SiteSQLStore::newInstance();
+
+               $sites = array();
+
+               $site = new Site();
+               $site->setGlobalId( 'ertrywuutr' );
+               $site->setLanguageCode( 'en' );
+               $sites[] = $site;
+
+               $site = new MediaWikiSite();
+               $site->setGlobalId( 'sdfhxujgkfpth' );
+               $site->setLanguageCode( 'nl' );
+               $sites[] = $site;
+
+               $this->assertTrue( $store->saveSites( $sites ) );
+
+               $site = $store->getSite( 'ertrywuutr' );
+               $this->assertInstanceOf( 'Site', $site );
+               $this->assertEquals( 'en', $site->getLanguageCode() );
+               $this->assertTrue( is_integer( $site->getInternalId() ) );
+               $this->assertTrue( $site->getInternalId() >= 0 );
+
+               $site = $store->getSite( 'sdfhxujgkfpth' );
+               $this->assertInstanceOf( 'Site', $site );
+               $this->assertEquals( 'nl', $site->getLanguageCode() );
+               $this->assertTrue( is_integer( $site->getInternalId() ) );
+               $this->assertTrue( $site->getInternalId() >= 0 );
+       }
+
+       public function testReset() {
+               $store1 = SiteSQLStore::newInstance();
+               $store2 = SiteSQLStore::newInstance();
+
+               // initialize internal cache
+               $this->assertGreaterThan( 0, $store1->getSites()->count() );
+               $this->assertGreaterThan( 0, $store2->getSites()->count() );
+
+               // Clear actual data. Will purge the external cache and reset the internal
+               // cache in $store1, but not the internal cache in store2.
+               $this->assertTrue( $store1->clear() );
+
+               // sanity check: $store2 should have a stale cache now
+               $this->assertNotNull( $store2->getSite( 'enwiki' ) );
+
+               // purge cache
+               $store2->reset();
+
+               // ...now the internal cache of $store2 should be updated and thus empty.
+               $site = $store2->getSite( 'enwiki' );
+               $this->assertNull( $site );
+       }
+
+       public function testClear() {
+               $store = SiteSQLStore::newInstance();
+               $this->assertTrue( $store->clear() );
+
+               $site = $store->getSite( 'enwiki' );
+               $this->assertNull( $site );
+
+               $sites = $store->getSites();
+               $this->assertEquals( 0, $sites->count() );
+       }
+
+}
diff --git a/tests/phpunit/includes/site/SiteTest.php b/tests/phpunit/includes/site/SiteTest.php
new file mode 100644 (file)
index 0000000..c11165b
--- /dev/null
@@ -0,0 +1,268 @@
+<?php
+
+/**
+ * Tests for the Site class.
+ *
+ * This program is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation; either version 2 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License along
+ * with this program; if not, write to the Free Software Foundation, Inc.,
+ * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
+ * http://www.gnu.org/copyleft/gpl.html
+ *
+ * @file
+ * @since 1.21
+ *
+ * @ingroup Site
+ * @ingroup Test
+ *
+ * @group Site
+ *
+ * @licence GNU GPL v2+
+ * @author Jeroen De Dauw < jeroendedauw@gmail.com >
+ */
+class SiteTest extends MediaWikiTestCase {
+
+       public function instanceProvider() {
+               return $this->arrayWrap( TestSites::getSites() );
+       }
+
+       /**
+        * @dataProvider instanceProvider
+        * @param Site $site
+        */
+       public function testGetInterwikiIds( Site $site ) {
+               $this->assertInternalType( 'array', $site->getInterwikiIds() );
+       }
+
+       /**
+        * @dataProvider instanceProvider
+        * @param Site $site
+        */
+       public function testGetNavigationIds( Site $site ) {
+               $this->assertInternalType( 'array', $site->getNavigationIds() );
+       }
+
+       /**
+        * @dataProvider instanceProvider
+        * @param Site $site
+        */
+       public function testAddNavigationId( Site $site ) {
+               $site->addNavigationId( 'foobar' );
+               $this->assertTrue( in_array( 'foobar', $site->getNavigationIds(), true ) );
+       }
+
+       /**
+        * @dataProvider instanceProvider
+        * @param Site $site
+        */
+       public function testAddInterwikiId( Site $site ) {
+               $site->addInterwikiId( 'foobar' );
+               $this->assertTrue( in_array( 'foobar', $site->getInterwikiIds(), true ) );
+       }
+
+       /**
+        * @dataProvider instanceProvider
+        * @param Site $site
+        */
+       public function testGetLanguageCode( Site $site ) {
+               $this->assertTypeOrValue( 'string', $site->getLanguageCode(), null );
+       }
+
+       /**
+        * @dataProvider instanceProvider
+        * @param Site $site
+        */
+       public function testSetLanguageCode( Site $site ) {
+               $site->setLanguageCode( 'en' );
+               $this->assertEquals( 'en', $site->getLanguageCode() );
+       }
+
+       /**
+        * @dataProvider instanceProvider
+        * @param Site $site
+        */
+       public function testNormalizePageName( Site $site ) {
+               $this->assertInternalType( 'string', $site->normalizePageName( 'Foobar' ) );
+       }
+
+       /**
+        * @dataProvider instanceProvider
+        * @param Site $site
+        */
+       public function testGetGlobalId( Site $site ) {
+               $this->assertTypeOrValue( 'string', $site->getGlobalId(), null );
+       }
+
+       /**
+        * @dataProvider instanceProvider
+        * @param Site $site
+        */
+       public function testSetGlobalId( Site $site ) {
+               $site->setGlobalId( 'foobar' );
+               $this->assertEquals( 'foobar', $site->getGlobalId() );
+       }
+
+       /**
+        * @dataProvider instanceProvider
+        * @param Site $site
+        */
+       public function testGetType( Site $site ) {
+               $this->assertInternalType( 'string', $site->getType() );
+       }
+
+       /**
+        * @dataProvider instanceProvider
+        * @param Site $site
+        */
+       public function testGetPath( Site $site ) {
+               $this->assertTypeOrValue( 'string', $site->getPath( 'page_path' ), null );
+               $this->assertTypeOrValue( 'string', $site->getPath( 'file_path' ), null );
+               $this->assertTypeOrValue( 'string', $site->getPath( 'foobar' ), null );
+       }
+
+       /**
+        * @dataProvider instanceProvider
+        * @param Site $site
+        */
+       public function testGetAllPaths( Site $site ) {
+               $this->assertInternalType( 'array', $site->getAllPaths() );
+       }
+
+       /**
+        * @dataProvider instanceProvider
+        * @param Site $site
+        */
+       public function testSetAndRemovePath( Site $site ) {
+               $count = count( $site->getAllPaths() );
+
+               $site->setPath( 'spam', 'http://www.wikidata.org/$1' );
+               $site->setPath( 'spam', 'http://www.wikidata.org/foo/$1' );
+               $site->setPath( 'foobar', 'http://www.wikidata.org/bar/$1' );
+
+               $this->assertEquals( $count + 2, count( $site->getAllPaths() ) );
+
+               $this->assertInternalType( 'string', $site->getPath( 'foobar' ) );
+               $this->assertEquals( 'http://www.wikidata.org/foo/$1', $site->getPath( 'spam' ) );
+
+               $site->removePath( 'spam' );
+               $site->removePath( 'foobar' );
+
+               $this->assertEquals( $count, count( $site->getAllPaths() ) );
+
+               $this->assertNull( $site->getPath( 'foobar' ) );
+               $this->assertNull( $site->getPath( 'spam' ) );
+       }
+
+       public function testSetLinkPath() {
+               $site = new Site();
+               $path = "TestPath/$1";
+
+               $site->setLinkPath( $path );
+               $this->assertEquals( $path, $site->getLinkPath() );
+       }
+
+       public function testGetLinkPathType() {
+               $site = new Site();
+
+               $path = 'TestPath/$1';
+               $site->setLinkPath( $path );
+               $this->assertEquals( $path, $site->getPath( $site->getLinkPathType() ) );
+
+               $path = 'AnotherPath/$1';
+               $site->setPath( $site->getLinkPathType(), $path );
+               $this->assertEquals( $path, $site->getLinkPath() );
+       }
+
+       public function testSetPath() {
+               $site = new Site();
+
+               $path = 'TestPath/$1';
+               $site->setPath( 'foo', $path );
+
+               $this->assertEquals( $path, $site->getPath( 'foo' ) );
+       }
+
+       public function testProtocolRelativePath() {
+               $site = new Site();
+
+               $type = $site->getLinkPathType();
+               $path = '//acme.com/'; // protocol-relative URL
+               $site->setPath( $type, $path );
+
+               $this->assertEquals( '', $site->getProtocol() );
+       }
+
+       public function provideGetPageUrl() {
+               //NOTE: the assumption that the URL is built by replacing $1
+               //      with the urlencoded version of $page
+               //      is true for Site but not guaranteed for subclasses.
+               //      Subclasses need to override this provider appropriately.
+
+               return array(
+                       array( #0
+                               'http://acme.test/TestPath/$1',
+                               'Foo',
+                               '/TestPath/Foo',
+                       ),
+                       array( #1
+                               'http://acme.test/TestScript?x=$1&y=bla',
+                               'Foo',
+                               'TestScript?x=Foo&y=bla',
+                       ),
+                       array( #2
+                               'http://acme.test/TestPath/$1',
+                               'foo & bar/xyzzy (quux-shmoox?)',
+                               '/TestPath/foo%20%26%20bar%2Fxyzzy%20%28quux-shmoox%3F%29',
+                       ),
+               );
+       }
+
+       /**
+        * @dataProvider provideGetPageUrl
+        */
+       public function testGetPageUrl( $path, $page, $expected ) {
+               $site = new Site();
+
+               //NOTE: the assumption that getPageUrl is based on getLinkPath
+               //      is true for Site but not guaranteed for subclasses.
+               //      Subclasses need to override this test case appropriately.
+               $site->setLinkPath( $path );
+               $this->assertContains( $path, $site->getPageUrl() );
+
+               $this->assertContains( $expected, $site->getPageUrl( $page ) );
+       }
+
+       protected function assertTypeOrFalse( $type, $value ) {
+               if ( $value === false ) {
+                       $this->assertTrue( true );
+               }
+               else {
+                       $this->assertInternalType( $type, $value );
+               }
+       }
+
+       /**
+        * @dataProvider instanceProvider
+        * @param Site $site
+        */
+       public function testSerialization( Site $site ) {
+               $this->assertInstanceOf( 'Serializable', $site );
+
+               $serialization = serialize( $site );
+               $newInstance = unserialize( $serialization );
+
+               $this->assertInstanceOf( 'Site', $newInstance );
+
+               $this->assertEquals( $serialization, serialize( $newInstance ) );
+       }
+
+}
diff --git a/tests/phpunit/includes/site/SitesTest.php b/tests/phpunit/includes/site/SitesTest.php
deleted file mode 100644 (file)
index 7675d42..0000000
+++ /dev/null
@@ -1,87 +0,0 @@
-<?php
-
-/**
- * Tests for the Sites class.
- *
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License as published by
- * the Free Software Foundation; either version 2 of the License, or
- * (at your option) any later version.
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License along
- * with this program; if not, write to the Free Software Foundation, Inc.,
- * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
- * http://www.gnu.org/copyleft/gpl.html
- *
- * @file
- * @since 1.21
- *
- * @ingroup Site
- * @ingroup Test
- *
- * @group Site
- * @group Database
- *
- * @licence GNU GPL v2+
- * @author Jeroen De Dauw < jeroendedauw@gmail.com >
- */
-class SitesTest extends MediaWikiTestCase {
-
-       public function setUp() {
-               parent::setUp();
-               TestSites::insertIntoDb();
-       }
-
-       public function testSingleton() {
-               $this->assertInstanceOf( 'Sites', Sites::singleton() );
-               $this->assertTrue( Sites::singleton() === Sites::singleton() );
-       }
-
-       public function testGetSites() {
-               $this->assertInstanceOf( 'SiteList', Sites::singleton()->getSites() );
-       }
-
-
-       public function testGetSite() {
-               $count = 0;
-               $sites = Sites::singleton()->getSites();
-
-               /**
-                * @var Site $site
-                */
-               foreach ( $sites as $site ) {
-                       $this->assertInstanceOf( 'Site', $site );
-
-                       $this->assertEquals(
-                               $site,
-                               Sites::singleton()->getSite( $site->getGlobalId() )
-                       );
-
-                       if ( ++$count > 100 ) {
-                               break;
-                       }
-               }
-       }
-
-       public function testNewSite() {
-               $this->assertInstanceOf( 'Site', Sites::newSite() );
-               $this->assertInstanceOf( 'Site', Sites::newSite( 'enwiki' ) );
-       }
-
-       public function testGetGroup() {
-               $wikipedias = Sites::singleton()->getSiteGroup( "wikipedia" );
-
-               $this->assertFalse( $wikipedias->isEmpty() );
-
-               /* @var Site $site */
-               foreach ( $wikipedias as $site ) {
-                       $this->assertEquals( 'wikipedia', $site->getGroup() );
-               }
-       }
-
-}
index 6003a8d..a5656a7 100644 (file)
@@ -39,21 +39,22 @@ class TestSites {
        public static function getSites() {
                $sites = array();
 
-               $site = Sites::newSite( 'foobar' );
+               $site = new Site();
+               $site->setGlobalId( 'foobar' );
                $sites[] = $site;
 
-               $site = Sites::newSite( 'enwiktionary' );
+               $site = new MediaWikiSite();
+               $site->setGlobalId( 'enwiktionary' );
                $site->setGroup( 'wiktionary' );
-               $site->setType( Site::TYPE_MEDIAWIKI );
                $site->setLanguageCode( 'en' );
                $site->addNavigationId( 'enwiktionary' );
                $site->setPath( MediaWikiSite::PATH_PAGE, "https://en.wiktionary.org/wiki/$1" );
                $site->setPath( MediaWikiSite::PATH_FILE, "https://en.wiktionary.org/w/$1" );
                $sites[] = $site;
 
-               $site = Sites::newSite( 'dewiktionary' );
+               $site = new MediaWikiSite();
+               $site->setGlobalId( 'dewiktionary' );
                $site->setGroup( 'wiktionary' );
-               $site->setType( Site::TYPE_MEDIAWIKI );
                $site->setLanguageCode( 'de' );
                $site->addInterwikiId( 'dewiktionary' );
                $site->addInterwikiId( 'wiktionaryde' );
@@ -61,9 +62,9 @@ class TestSites {
                $site->setPath( MediaWikiSite::PATH_FILE, "https://de.wiktionary.org/w/$1" );
                $sites[] = $site;
 
-               $site = Sites::newSite( 'spam' );
+               $site = new Site();
+               $site->setGlobalId( 'spam' );
                $site->setGroup( 'spam' );
-               $site->setType( Site::TYPE_UNKNOWN );
                $site->setLanguageCode( 'en' );
                $site->addNavigationId( 'spam' );
                $site->addNavigationId( 'spamz' );
@@ -72,9 +73,9 @@ class TestSites {
                $sites[] = $site;
 
                foreach ( array( 'en', 'de', 'nl', 'sv', 'sr', 'no', 'nn' ) as $langCode ) {
-                       $site = Sites::newSite( $langCode . 'wiki' );
+                       $site = new MediaWikiSite();
+                       $site->setGlobalId( $langCode . 'wiki' );
                        $site->setGroup( 'wikipedia' );
-                       $site->setType( Site::TYPE_MEDIAWIKI );
                        $site->setLanguageCode( $langCode );
                        $site->addInterwikiId( $langCode );
                        $site->addNavigationId( $langCode );
@@ -92,23 +93,9 @@ class TestSites {
         * @since 0.1
         */
        public static function insertIntoDb() {
-               $dbw = wfGetDB( DB_MASTER );
-
-               $dbw->begin( __METHOD__ );
-
-               $dbw->delete( 'sites', '*', __METHOD__ );
-               $dbw->delete( 'site_identifiers', '*', __METHOD__ );
-
-               /**
-                * @var Site $site
-                */
-               foreach ( TestSites::getSites() as $site ) {
-                       $site->save();
-               }
-
-               $dbw->commit( __METHOD__ );
-
-               Sites::singleton()->getSites( false ); // re-cache
+               $sitesTable = SiteSQLStore::newInstance();
+               $sitesTable->clear();
+               $sitesTable->saveSites( TestSites::getSites() );
        }
 
-}
\ No newline at end of file
+}
index d757734..34c57aa 100644 (file)
@@ -20,6 +20,8 @@ class UploadTest extends MediaWikiTestCase {
        protected function tearDown() {
                global $wgHooks;
                $wgHooks = $this->hooks;
+
+               parent::tearDown();
        }
 
 
index 2d2b53a..3601274 100755 (executable)
@@ -18,8 +18,9 @@ else if ( has_binary pear ); then
     echo Installing phpunit with pear
     pear channel-discover pear.phpunit.de
     pear channel-discover components.ez.no
-    pear channel-discover pear.symfony-project.com
-    pear install phpunit/PHPUnit
+    pear channel-discover pear.symfony.com
+    pear update-channels
+    pear install --alldeps phpunit/PHPUnit
 else if ( has_binary apt-get ); then
     echo Installing phpunit with apt-get
     apt-get install phpunit
diff --git a/tests/phpunit/languages/LanguageBhTest.php b/tests/phpunit/languages/LanguageBhTest.php
deleted file mode 100644 (file)
index 5af7adb..0000000
+++ /dev/null
@@ -1,26 +0,0 @@
-<?php
-/**
- * @author Santhosh Thottingal
- * @copyright Copyright © 2012, Santhosh Thottingal
- * @file
- */
-
-/** Tests for MediaWiki languages/LanguageBh.php */
-class LanguageBhTest extends LanguageClassesTestCase {
-
-       /** @dataProvider providePlural */
-       function testPlural( $result, $value ) {
-               $forms =  array( 'one', 'other' );
-               $this->assertEquals( $result, $this->getLang()->convertPlural( $value, $forms ) );
-       }
-
-       function providePlural() {
-               return array (
-                       array( 'one', 0 ),
-                       array( 'one', 1 ),
-                       array( 'other', 2 ),
-                       array( 'other', 200 ),
-               );
-       }
-
-}
diff --git a/tests/phpunit/languages/LanguageBhoTest.php b/tests/phpunit/languages/LanguageBhoTest.php
new file mode 100644 (file)
index 0000000..5bbd4fe
--- /dev/null
@@ -0,0 +1,26 @@
+<?php
+/**
+ * @author Santhosh Thottingal
+ * @copyright Copyright © 2012, Santhosh Thottingal
+ * @file
+ */
+
+/** Tests for MediaWiki languages/LanguageBho.php */
+class LanguageBhoTest extends LanguageClassesTestCase {
+
+       /** @dataProvider providePlural */
+       function testPlural( $result, $value ) {
+               $forms =  array( 'one', 'other' );
+               $this->assertEquals( $result, $this->getLang()->convertPlural( $value, $forms ) );
+       }
+
+       function providePlural() {
+               return array (
+                       array( 'one', 0 ),
+                       array( 'one', 1 ),
+                       array( 'other', 2 ),
+                       array( 'other', 200 ),
+               );
+       }
+
+}
index b7f6182..10ff664 100644 (file)
@@ -11,7 +11,7 @@ class LanguageMlTest extends LanguageClassesTestCase {
        /** see bug 29495 */
        /** @dataProvider providerFormatNum*/
        function testFormatNum( $result, $value ) {
-               $this->assertEquals( $result,  $this->getLang()->formatNum( $value ) );
+               $this->assertEquals( $result, $this->getLang()->formatNum( $value ) );
        }
 
        function providerFormatNum() {
index 94ccfd0..9507714 100644 (file)
@@ -307,20 +307,132 @@ class LanguageTest extends LanguageClassesTestCase {
                );
        }
 
+       /**
+        * Test Language::isWellFormedLanguageTag()
+        * @dataProvider provideWellFormedLanguageTags
+        */
+       function testWellFormedLanguageTag( $code, $message = '' ) {
+               $this->assertTrue(
+                       Language::isWellFormedLanguageTag( $code ),
+                       "validating code $code $message"
+               );
+       }
+
+       /**
+        * The test cases are based on the tests in the GaBuZoMeu parser
+        * written by Stéphane Bortzmeyer <bortzmeyer@nic.fr>
+        * and distributed as free software, under the GNU General Public Licence.
+        * http://www.bortzmeyer.org/gabuzomeu-parsing-language-tags.html
+        */
+       function provideWellFormedLanguageTags() {
+               return array(
+                       array( 'fr', 'two-letter code' ),
+                       array( 'fr-latn', 'two-letter code with lower case script code' ),
+                       array( 'fr-Latn-FR', 'two-letter code with title case script code and uppercase country code' ),
+                       array( 'fr-Latn-419', 'two-letter code with title case script code and region number' ),
+                       array( 'fr-FR', 'two-letter code with uppercase' ),
+                       array( 'ax-TZ', 'Not in the registry, but well-formed' ),
+                       array( 'fr-shadok', 'two-letter code with variant' ),
+                       array( 'fr-y-myext-myext2', 'non-x singleton' ),
+                       array( 'fra-Latn', 'ISO 639 can be 3-letters' ),
+                       array( 'fra', 'three-letter language code' ),
+                       array( 'fra-FX', 'three-letter language code with country code' ),
+                       array( 'i-klingon', 'grandfathered with singleton' ),
+                       array( 'I-kLINgon', 'tags are case-insensitive...' ),
+                       array( 'no-bok', 'grandfathered without singleton' ),
+                       array( 'i-enochian', 'Grandfathered' ),
+                       array( 'x-fr-CH', 'private use' ),
+                       array( 'es-419', 'two-letter code with region number' ),
+                       array( 'en-Latn-GB-boont-r-extended-sequence-x-private', 'weird, but well-formed' ),
+                       array( 'ab-x-abc-x-abc', 'anything goes after x' ),
+                       array( 'ab-x-abc-a-a', 'anything goes after x, including several non-x singletons' ),
+                       array( 'i-default', 'grandfathered' ),
+                       array( 'abcd-Latn', 'Language of 4 chars reserved for future use' ),
+                       array( 'AaBbCcDd-x-y-any-x', 'Language of 5-8 chars, registered' ),
+                       array( 'de-CH-1901', 'with country and year' ),
+                       array( 'en-US-x-twain', 'with country and singleton' ),
+                       array( 'zh-cmn', 'three-letter variant' ),
+                       array( 'zh-cmn-Hant', 'three-letter variant and script' ),
+                       array( 'zh-cmn-Hant-HK', 'three-letter variant, script and country' ),
+                       array( 'xr-p-lze', 'Extension' ),
+               );
+       }
+
+       /**
+        * Negative test for Language::isWellFormedLanguageTag()
+        * @dataProvider provideMalformedLanguageTags
+        */
+       function testMalformedLanguageTag( $code, $message = '' ) {
+               $this->assertFalse(
+                       Language::isWellFormedLanguageTag( $code ),
+                       "validating that code $code is a malformed language tag - $message"
+               );
+       }
+
+       /**
+        * The test cases are based on the tests in the GaBuZoMeu parser
+        * written by Stéphane Bortzmeyer <bortzmeyer@nic.fr>
+        * and distributed as free software, under the GNU General Public Licence.
+        * http://www.bortzmeyer.org/gabuzomeu-parsing-language-tags.html
+        */
+       function provideMalformedLanguageTags() {
+               return array(
+                       array( 'f', 'language too short' ),
+                       array( 'f-Latn', 'language too short with script' ),
+                       array( 'xr-lxs-qut', 'variants too short' ), # extlangS
+                       array( 'fr-Latn-F', 'region too short' ),
+                       array( 'a-value', 'language too short with region' ),
+                       array( 'tlh-a-b-foo', 'valid three-letter with wrong variant' ),
+                       array( 'i-notexist', 'grandfathered but not registered: invalid, even if we only test well-formedness' ),
+                       array( 'abcdefghi-012345678', 'numbers too long' ),
+                       array( 'ab-abc-abc-abc-abc', 'invalid extensions' ),
+                       array( 'ab-abcd-abc', 'invalid extensions' ),
+                       array( 'ab-ab-abc', 'invalid extensions' ),
+                       array( 'ab-123-abc', 'invalid extensions' ),
+                       array( 'a-Hant-ZH', 'short language with valid extensions' ),
+                       array( 'a1-Hant-ZH', 'invalid character in language' ),
+                       array( 'ab-abcde-abc', 'invalid extensions' ),
+                       array( 'ab-1abc-abc', 'invalid characters in extensions' ),
+                       array( 'ab-ab-abcd', 'invalid order of extensions' ),
+                       array( 'ab-123-abcd', 'invalid order of extensions' ),
+                       array( 'ab-abcde-abcd', 'invalid extensions' ),
+                       array( 'ab-1abc-abcd', 'invalid characters in extensions' ),
+                       array( 'ab-a-b', 'extensions too short' ),
+                       array( 'ab-a-x', 'extensions too short, even with singleton' ),
+                       array( 'ab--ab', 'two separators' ),
+                       array( 'ab-abc-', 'separator in the end' ),
+                       array( '-ab-abc', 'separator in the beginning' ),
+                       array( 'abcd-efg', 'language too long' ),
+                       array( 'aabbccddE', 'tag too long' ),
+                       array( 'pa_guru', 'A tag with underscore is invalid in strict mode' ),
+                       array( 'de-f', 'subtag too short' ),
+               );
+       }
+
+       /**
+        * Negative test for Language::isWellFormedLanguageTag()
+        */
+       function testLenientLanguageTag() {
+               $this->assertTrue(
+                       Language::isWellFormedLanguageTag( 'pa_guru', true ),
+                       'pa_guru is a well-formed language tag in lenient mode'
+               );
+       }
+
        /**
         * Test Language::isValidBuiltInCode()
         * @dataProvider provideLanguageCodes
         */
        function testBuiltInCodeValidation( $code, $message = '' ) {
                $this->assertTrue(
-                       (bool) Language::isValidBuiltInCode( $code ),
+                       (bool)Language::isValidBuiltInCode( $code ),
                        "validating code $code $message"
                );
        }
 
        function testBuiltInCodeValidationRejectUnderscore() {
                $this->assertFalse(
-                       (bool) Language::isValidBuiltInCode( 'be_tarask' ),
+                       (bool)Language::isValidBuiltInCode( 'be_tarask' ),
                        "reject underscore in language code"
                );
        }
@@ -337,6 +449,56 @@ class LanguageTest extends LanguageClassesTestCase {
                );
        }
 
+       /**
+        * Test Language::isKnownLanguageTag()
+        * @dataProvider provideKnownLanguageTags
+        */
+       function testKnownLanguageTag( $code, $message = '' ) {
+               $this->assertTrue(
+                       (bool) Language::isKnownLanguageTag( $code ),
+                       "validating code $code - $message"
+               );
+       }
+
+       function provideKnownLanguageTags() {
+               return array(
+                       array( 'fr', 'simple code' ),
+                       array( 'bat-smg', 'an MW legacy tag' ),
+                       array( 'sgs', 'an internal standard MW name, for which a legacy tag is used externally' ),
+               );
+       }
+
+       /**
+        * Test Language::isKnownLanguageTag()
+        */
+       function testKnownCldrLanguageTag() {
+               if ( !class_exists( 'LanguageNames' ) ) {
+                       $this->markTestSkipped( 'reason' );
+               }
+
+               $this->assertTrue(
+                       (bool) Language::isKnownLanguageTag( 'pal' ),
+                       'validating code "pal" an ancient language, which probably will not appear in Names.php, but appears in CLDR in English'
+               );
+       }
+
+       /**
+        * Negative tests for Language::isKnownLanguageTag()
+        * @dataProvider provideUnKnownLanguageTags
+        */
+       function testUnknownLanguageTag( $code, $message = '' ) {
+               $this->assertFalse(
+                       (bool) Language::isKnownLanguageTag( $code ),
+                       "checking that code $code is invalid - $message"
+               );
+       }
+
+       function provideUnknownLanguageTags() {
+               return array(
+                       array( 'mw', 'non-existent two-letter code' ),
+               );
+       }
+
        /**
         * @dataProvider provideSprintfDateSamples
         */
@@ -847,35 +1009,36 @@ class LanguageTest extends LanguageClassesTestCase {
                                '2 days',
                        ),
                        array(
-                               365.25 * 86400, // 365.25 * 86400 = 31557600
+                               // ( 365 + ( 24 * 3 + 25 ) / 400 ) * 86400 = 31556952
+                               ( 365 + ( 24 * 3 + 25 ) / 400.0 ) * 86400,
                                '1 year',
                        ),
                        array(
-                               2 * 31557600,
+                               2 * 31556952,
                                '2 years',
                        ),
                        array(
-                               10 * 31557600,
+                               10 * 31556952,
                                '1 decade',
                        ),
                        array(
-                               20 * 31557600,
+                               20 * 31556952,
                                '2 decades',
                        ),
                        array(
-                               100 * 31557600,
+                               100 * 31556952,
                                '1 century',
                        ),
                        array(
-                               200 * 31557600,
+                               200 * 31556952,
                                '2 centuries',
                        ),
                        array(
-                               1000 * 31557600,
+                               1000 * 31556952,
                                '1 millennium',
                        ),
                        array(
-                               2000 * 31557600,
+                               2000 * 31556952,
                                '2 millennia',
                        ),
                        array(
@@ -887,11 +1050,11 @@ class LanguageTest extends LanguageClassesTestCase {
                                '1 hour and 1 second'
                        ),
                        array(
-                               31557600 + 2 * 86400 + 9000,
+                               31556952 + 2 * 86400 + 9000,
                                '1 year, 2 days, 2 hours and 30 minutes'
                        ),
                        array(
-                               42 * 1000 * 31557600 + 42,
+                               42 * 1000 * 31556952 + 42,
                                '42 millennia and 42 seconds'
                        ),
                        array(
@@ -910,7 +1073,7 @@ class LanguageTest extends LanguageClassesTestCase {
                                array( 'seconds' ),
                        ),
                        array(
-                               31557600 + 2 * 86400 + 9000,
+                               31556952 + 2 * 86400 + 9000,
                                '1 year, 2 days and 150 minutes',
                                array( 'years', 'days', 'minutes' ),
                        ),
@@ -920,7 +1083,7 @@ class LanguageTest extends LanguageClassesTestCase {
                                array( 'years', 'days' ),
                        ),
                        array(
-                               31557600 + 2 * 86400 + 9000,
+                               31556952 + 2 * 86400 + 9000,
                                '1 year, 2 days and 150 minutes',
                                array( 'minutes', 'days', 'years' ),
                        ),
@@ -1110,5 +1273,64 @@ class LanguageTest extends LanguageClassesTestCase {
                        array( 'dummy', 'dummy', 'return garbage as is' ),
                );
        }
-}
 
+       /**
+        * @covers Language::commafy()
+        * @dataProvider provideCommafyData
+        */
+       function testCommafy( $number, $numbersWithCommas ) {
+               $this->assertEquals(
+                       $numbersWithCommas,
+                       $this->getLang()->commafy( $number ),
+                       "commafy('$number')"
+               );
+       }
+
+       function provideCommafyData() {
+               return array(
+                       array( 1, '1' ),
+                       array( 10, '10' ),
+                       array( 100, '100' ),
+                       array( 1000, '1,000' ),
+                       array( 10000, '10,000' ),
+                       array( 100000, '100,000' ),
+                       array( 1000000, '1,000,000' ),
+                       array( 1.0001, '1.0001' ),
+                       array( 10.0001, '10.0001' ),
+                       array( 100.0001, '100.0001' ),
+                       array( 1000.0001, '1,000.0001' ),
+                       array( 10000.0001, '10,000.0001' ),
+                       array( 100000.0001, '100,000.0001' ),
+                       array( 1000000.0001, '1,000,000.0001' ),
+               );
+       }
+
+       function testListToText() {
+               $lang = $this->getLang();
+               $and = $lang->getMessageFromDB( 'and' );
+               $s = $lang->getMessageFromDB( 'word-separator' );
+               $c = $lang->getMessageFromDB( 'comma-separator' );
+
+               $this->assertEquals( '', $lang->listToText( array( ) ) );
+               $this->assertEquals( 'a', $lang->listToText( array( 'a' ) ) );
+               $this->assertEquals( "a{$and}{$s}b", $lang->listToText( array( 'a', 'b' ) ) );
+               $this->assertEquals( "a{$c}b{$and}{$s}c", $lang->listToText( array( 'a', 'b', 'c' ) ) );
+               $this->assertEquals( "a{$c}b{$c}c{$and}{$s}d", $lang->listToText( array( 'a', 'b', 'c', 'd' ) ) );
+       }
+
+       /**
+        * @dataProvider provideIsSupportedLanguage
+        */
+       function testIsSupportedLanguage( $code, $expected, $comment ) {
+               $this->assertEquals( $expected, Language::isSupportedLanguage( $code ), $comment );
+       }
+
+       static function provideIsSupportedLanguage() {
+               return array(
+                       array( 'en', true, 'is supported language' ),
+                       array( 'fi', true, 'is supported language' ),
+                       array( 'bunny', false, 'is not supported language' ),
+                       array( 'FI', false, 'is not supported language, input should be in lower case' ),
+               );
+       }
+}
index 033164b..58fcf16 100644 (file)
@@ -9,7 +9,7 @@ class CLDRPluralRuleEvaluatorTest extends MediaWikiTestCase {
         * @dataProvider validTestCases
         */
        function testValidRules( $expected, $rules, $number, $comment ) {
-               $result = CLDRPluralRuleEvaluator::evaluate( $number, (array) $rules );
+               $result = CLDRPluralRuleEvaluator::evaluate( $number, (array)$rules );
                $this->assertEquals( $expected, $result, $comment );
        }
 
@@ -18,7 +18,7 @@ class CLDRPluralRuleEvaluatorTest extends MediaWikiTestCase {
         * @expectedException CLDRPluralRuleError
         */
        function testInvalidRules( $rules, $comment ) {
-               CLDRPluralRuleEvaluator::evaluate( 1, (array) $rules );
+               CLDRPluralRuleEvaluator::evaluate( 1, (array)$rules );
        }
 
        function validTestCases() {
index 0f3a6a1..106fab8 100644 (file)
@@ -57,7 +57,7 @@ abstract class DumpTestCase extends MediaWikiLangTestCase {
         */
        protected function gunzip( $fname ) {
                $gzipped_contents = file_get_contents( $fname );
-               if ( $gzipped_contents === FALSE ) {
+               if ( $gzipped_contents === false ) {
                        $this->fail( "Could not get contents of $fname" );
                }
                // We resort to use gzinflate instead of gzdecode, as gzdecode
index a0ed745..b9c0fb8 100644 (file)
@@ -191,44 +191,44 @@ class MaintenanceTest extends MediaWikiTestCase {
 
        function testOutputEmpty() {
                $this->m->output( "" );
-               $this->assertOutputPrePostShutdown( "", False );
+               $this->assertOutputPrePostShutdown( "", false );
        }
 
        function testOutputString() {
                $this->m->output( "foo" );
-               $this->assertOutputPrePostShutdown( "foo", False );
+               $this->assertOutputPrePostShutdown( "foo", false );
        }
 
        function testOutputStringString() {
                $this->m->output( "foo" );
                $this->m->output( "bar" );
-               $this->assertOutputPrePostShutdown( "foobar", False );
+               $this->assertOutputPrePostShutdown( "foobar", false );
        }
 
        function testOutputStringNL() {
                $this->m->output( "foo\n" );
-               $this->assertOutputPrePostShutdown( "foo\n", False );
+               $this->assertOutputPrePostShutdown( "foo\n", false );
        }
 
        function testOutputStringNLNL() {
                $this->m->output( "foo\n\n" );
-               $this->assertOutputPrePostShutdown( "foo\n\n", False );
+               $this->assertOutputPrePostShutdown( "foo\n\n", false );
        }
 
        function testOutputStringNLString() {
                $this->m->output( "foo\nbar" );
-               $this->assertOutputPrePostShutdown( "foo\nbar", False );
+               $this->assertOutputPrePostShutdown( "foo\nbar", false );
        }
 
        function testOutputStringNLStringNL() {
                $this->m->output( "foo\nbar\n" );
-               $this->assertOutputPrePostShutdown( "foo\nbar\n", False );
+               $this->assertOutputPrePostShutdown( "foo\nbar\n", false );
        }
 
        function testOutputStringNLStringNLLinewise() {
                $this->m->output( "foo\n" );
                $this->m->output( "bar\n" );
-               $this->assertOutputPrePostShutdown( "foo\nbar\n", False );
+               $this->assertOutputPrePostShutdown( "foo\nbar\n", false );
        }
 
        function testOutputStringNLStringNLArbitrary() {
@@ -239,7 +239,7 @@ class MaintenanceTest extends MediaWikiTestCase {
                $this->m->output( "ba" );
                $this->m->output( "" );
                $this->m->output( "r\n" );
-               $this->assertOutputPrePostShutdown( "foo\nbar\n", False );
+               $this->assertOutputPrePostShutdown( "foo\nbar\n", false );
        }
 
        function testOutputStringNLStringNLArbitraryAgain() {
@@ -250,49 +250,49 @@ class MaintenanceTest extends MediaWikiTestCase {
                $this->m->output( "a" );
                $this->m->output( "" );
                $this->m->output( "r\n" );
-               $this->assertOutputPrePostShutdown( "foo\nbar\n", False );
+               $this->assertOutputPrePostShutdown( "foo\nbar\n", false );
        }
 
        function testOutputWNullChannelEmpty() {
                $this->m->output( "", null );
-               $this->assertOutputPrePostShutdown( "", False );
+               $this->assertOutputPrePostShutdown( "", false );
        }
 
        function testOutputWNullChannelString() {
                $this->m->output( "foo", null );
-               $this->assertOutputPrePostShutdown( "foo", False );
+               $this->assertOutputPrePostShutdown( "foo", false );
        }
 
        function testOutputWNullChannelStringString() {
                $this->m->output( "foo", null );
                $this->m->output( "bar", null );
-               $this->assertOutputPrePostShutdown( "foobar", False );
+               $this->assertOutputPrePostShutdown( "foobar", false );
        }
 
        function testOutputWNullChannelStringNL() {
                $this->m->output( "foo\n", null );
-               $this->assertOutputPrePostShutdown( "foo\n", False );
+               $this->assertOutputPrePostShutdown( "foo\n", false );
        }
 
        function testOutputWNullChannelStringNLNL() {
                $this->m->output( "foo\n\n", null );
-               $this->assertOutputPrePostShutdown( "foo\n\n", False );
+               $this->assertOutputPrePostShutdown( "foo\n\n", false );
        }
 
        function testOutputWNullChannelStringNLString() {
                $this->m->output( "foo\nbar", null );
-               $this->assertOutputPrePostShutdown( "foo\nbar", False );
+               $this->assertOutputPrePostShutdown( "foo\nbar", false );
        }
 
        function testOutputWNullChannelStringNLStringNL() {
                $this->m->output( "foo\nbar\n", null );
-               $this->assertOutputPrePostShutdown( "foo\nbar\n", False );
+               $this->assertOutputPrePostShutdown( "foo\nbar\n", false );
        }
 
        function testOutputWNullChannelStringNLStringNLLinewise() {
                $this->m->output( "foo\n", null );
                $this->m->output( "bar\n", null );
-               $this->assertOutputPrePostShutdown( "foo\nbar\n", False );
+               $this->assertOutputPrePostShutdown( "foo\nbar\n", false );
        }
 
        function testOutputWNullChannelStringNLStringNLArbitrary() {
@@ -303,7 +303,7 @@ class MaintenanceTest extends MediaWikiTestCase {
                $this->m->output( "ba", null );
                $this->m->output( "", null );
                $this->m->output( "r\n", null );
-               $this->assertOutputPrePostShutdown( "foo\nbar\n", False );
+               $this->assertOutputPrePostShutdown( "foo\nbar\n", false );
        }
 
        function testOutputWNullChannelStringNLStringNLArbitraryAgain() {
@@ -314,17 +314,17 @@ class MaintenanceTest extends MediaWikiTestCase {
                $this->m->output( "a", null );
                $this->m->output( "", null );
                $this->m->output( "r\n", null );
-               $this->assertOutputPrePostShutdown( "foo\nbar\n", False );
+               $this->assertOutputPrePostShutdown( "foo\nbar\n", false );
        }
 
        function testOutputWChannelString() {
                $this->m->output( "foo", "bazChannel" );
-               $this->assertOutputPrePostShutdown( "foo", True );
+               $this->assertOutputPrePostShutdown( "foo", true );
        }
 
        function testOutputWChannelStringNL() {
                $this->m->output( "foo\n", "bazChannel" );
-               $this->assertOutputPrePostShutdown( "foo", True );
+               $this->assertOutputPrePostShutdown( "foo", true );
        }
 
        function testOutputWChannelStringNLNL() {
@@ -333,23 +333,23 @@ class MaintenanceTest extends MediaWikiTestCase {
                // outputChanneled with a string ending in a nl ... which is not allowed
                // according to the documentation of outputChanneled)
                $this->m->output( "foo\n\n", "bazChannel" );
-               $this->assertOutputPrePostShutdown( "foo\n", True );
+               $this->assertOutputPrePostShutdown( "foo\n", true );
        }
 
        function testOutputWChannelStringNLString() {
                $this->m->output( "foo\nbar", "bazChannel" );
-               $this->assertOutputPrePostShutdown( "foo\nbar", True );
+               $this->assertOutputPrePostShutdown( "foo\nbar", true );
        }
 
        function testOutputWChannelStringNLStringNL() {
                $this->m->output( "foo\nbar\n", "bazChannel" );
-               $this->assertOutputPrePostShutdown( "foo\nbar", True );
+               $this->assertOutputPrePostShutdown( "foo\nbar", true );
        }
 
        function testOutputWChannelStringNLStringNLLinewise() {
                $this->m->output( "foo\n", "bazChannel" );
                $this->m->output( "bar\n", "bazChannel" );
-               $this->assertOutputPrePostShutdown( "foobar", True );
+               $this->assertOutputPrePostShutdown( "foobar", true );
        }
 
        function testOutputWChannelStringNLStringNLArbitrary() {
@@ -360,7 +360,7 @@ class MaintenanceTest extends MediaWikiTestCase {
                $this->m->output( "ba", "bazChannel" );
                $this->m->output( "", "bazChannel" );
                $this->m->output( "r\n", "bazChannel" );
-               $this->assertOutputPrePostShutdown( "foobar", True );
+               $this->assertOutputPrePostShutdown( "foobar", true );
        }
 
        function testOutputWChannelStringNLStringNLArbitraryAgain() {
@@ -371,7 +371,7 @@ class MaintenanceTest extends MediaWikiTestCase {
                $this->m->output( "a", "bazChannel" );
                $this->m->output( "", "bazChannel" );
                $this->m->output( "r\n", "bazChannel" );
-               $this->assertOutputPrePostShutdown( "foo\nbar", True );
+               $this->assertOutputPrePostShutdown( "foo\nbar", true );
        }
 
        function testOutputWMultipleChannelsChannelChange() {
@@ -379,7 +379,7 @@ class MaintenanceTest extends MediaWikiTestCase {
                $this->m->output( "bar", "bazChannel" );
                $this->m->output( "qux", "quuxChannel" );
                $this->m->output( "corge", "bazChannel" );
-               $this->assertOutputPrePostShutdown( "foobar\nqux\ncorge", True );
+               $this->assertOutputPrePostShutdown( "foobar\nqux\ncorge", true );
        }
 
        function testOutputWMultipleChannelsChannelChangeNL() {
@@ -387,7 +387,7 @@ class MaintenanceTest extends MediaWikiTestCase {
                $this->m->output( "bar\n", "bazChannel" );
                $this->m->output( "qux\n", "quuxChannel" );
                $this->m->output( "corge", "bazChannel" );
-               $this->assertOutputPrePostShutdown( "foobar\nqux\ncorge", True );
+               $this->assertOutputPrePostShutdown( "foobar\nqux\ncorge", true );
        }
 
        function testOutputWAndWOChannelStringStartWO() {
@@ -395,7 +395,7 @@ class MaintenanceTest extends MediaWikiTestCase {
                $this->m->output( "bar", "bazChannel" );
                $this->m->output( "qux" );
                $this->m->output( "quux", "bazChannel" );
-               $this->assertOutputPrePostShutdown( "foobar\nquxquux", True );
+               $this->assertOutputPrePostShutdown( "foobar\nquxquux", true );
        }
 
        function testOutputWAndWOChannelStringStartW() {
@@ -403,27 +403,27 @@ class MaintenanceTest extends MediaWikiTestCase {
                $this->m->output( "bar" );
                $this->m->output( "qux", "bazChannel" );
                $this->m->output( "quux" );
-               $this->assertOutputPrePostShutdown( "foo\nbarqux\nquux", False );
+               $this->assertOutputPrePostShutdown( "foo\nbarqux\nquux", false );
        }
 
        function testOutputWChannelTypeSwitch() {
                $this->m->output( "foo", 1 );
                $this->m->output( "bar", 1.0 );
-               $this->assertOutputPrePostShutdown( "foo\nbar", True );
+               $this->assertOutputPrePostShutdown( "foo\nbar", true );
        }
 
        function testOutputIntermittentEmpty() {
                $this->m->output( "foo" );
                $this->m->output( "" );
                $this->m->output( "bar" );
-               $this->assertOutputPrePostShutdown( "foobar", False );
+               $this->assertOutputPrePostShutdown( "foobar", false );
        }
 
        function testOutputIntermittentFalse() {
                $this->m->output( "foo" );
                $this->m->output( false );
                $this->m->output( "bar" );
-               $this->assertOutputPrePostShutdown( "foobar", False );
+               $this->assertOutputPrePostShutdown( "foobar", false );
        }
 
        function testOutputIntermittentFalseAfterOtherChannel() {
@@ -431,35 +431,35 @@ class MaintenanceTest extends MediaWikiTestCase {
                $this->m->output( "foo" );
                $this->m->output( false );
                $this->m->output( "bar" );
-               $this->assertOutputPrePostShutdown( "qux\nfoobar", False );
+               $this->assertOutputPrePostShutdown( "qux\nfoobar", false );
        }
 
        function testOutputWNullChannelIntermittentEmpty() {
                $this->m->output( "foo", null );
                $this->m->output( "", null );
                $this->m->output( "bar", null );
-               $this->assertOutputPrePostShutdown( "foobar", False );
+               $this->assertOutputPrePostShutdown( "foobar", false );
        }
 
        function testOutputWNullChannelIntermittentFalse() {
                $this->m->output( "foo", null );
                $this->m->output( false, null );
                $this->m->output( "bar", null );
-               $this->assertOutputPrePostShutdown( "foobar", False );
+               $this->assertOutputPrePostShutdown( "foobar", false );
        }
 
        function testOutputWChannelIntermittentEmpty() {
                $this->m->output( "foo", "bazChannel" );
                $this->m->output( "", "bazChannel" );
                $this->m->output( "bar", "bazChannel" );
-               $this->assertOutputPrePostShutdown( "foobar", True );
+               $this->assertOutputPrePostShutdown( "foobar", true );
        }
 
        function testOutputWChannelIntermittentFalse() {
                $this->m->output( "foo", "bazChannel" );
                $this->m->output( false, "bazChannel" );
                $this->m->output( "bar", "bazChannel" );
-               $this->assertOutputPrePostShutdown( "foobar", True );
+               $this->assertOutputPrePostShutdown( "foobar", true );
        }
 
        // Note that (per documentation) outputChanneled does take strings that end
@@ -467,23 +467,23 @@ class MaintenanceTest extends MediaWikiTestCase {
 
        function testOutputChanneledEmpty() {
                $this->m->outputChanneled( "" );
-               $this->assertOutputPrePostShutdown( "\n", False );
+               $this->assertOutputPrePostShutdown( "\n", false );
        }
 
        function testOutputChanneledString() {
                $this->m->outputChanneled( "foo" );
-               $this->assertOutputPrePostShutdown( "foo\n", False );
+               $this->assertOutputPrePostShutdown( "foo\n", false );
        }
 
        function testOutputChanneledStringString() {
                $this->m->outputChanneled( "foo" );
                $this->m->outputChanneled( "bar" );
-               $this->assertOutputPrePostShutdown( "foo\nbar\n", False );
+               $this->assertOutputPrePostShutdown( "foo\nbar\n", false );
        }
 
        function testOutputChanneledStringNLString() {
                $this->m->outputChanneled( "foo\nbar" );
-               $this->assertOutputPrePostShutdown( "foo\nbar\n", False );
+               $this->assertOutputPrePostShutdown( "foo\nbar\n", false );
        }
 
        function testOutputChanneledStringNLStringNLArbitraryAgain() {
@@ -494,28 +494,28 @@ class MaintenanceTest extends MediaWikiTestCase {
                $this->m->outputChanneled( "a" );
                $this->m->outputChanneled( "" );
                $this->m->outputChanneled( "r" );
-               $this->assertOutputPrePostShutdown( "\nfoo\n\n\nb\na\n\nr\n", False );
+               $this->assertOutputPrePostShutdown( "\nfoo\n\n\nb\na\n\nr\n", false );
        }
 
        function testOutputChanneledWNullChannelEmpty() {
                $this->m->outputChanneled( "", null );
-               $this->assertOutputPrePostShutdown( "\n", False );
+               $this->assertOutputPrePostShutdown( "\n", false );
        }
 
        function testOutputChanneledWNullChannelString() {
                $this->m->outputChanneled( "foo", null );
-               $this->assertOutputPrePostShutdown( "foo\n", False );
+               $this->assertOutputPrePostShutdown( "foo\n", false );
        }
 
        function testOutputChanneledWNullChannelStringString() {
                $this->m->outputChanneled( "foo", null );
                $this->m->outputChanneled( "bar", null );
-               $this->assertOutputPrePostShutdown( "foo\nbar\n", False );
+               $this->assertOutputPrePostShutdown( "foo\nbar\n", false );
        }
 
        function testOutputChanneledWNullChannelStringNLString() {
                $this->m->outputChanneled( "foo\nbar", null );
-               $this->assertOutputPrePostShutdown( "foo\nbar\n", False );
+               $this->assertOutputPrePostShutdown( "foo\nbar\n", false );
        }
 
        function testOutputChanneledWNullChannelStringNLStringNLArbitraryAgain() {
@@ -526,23 +526,23 @@ class MaintenanceTest extends MediaWikiTestCase {
                $this->m->outputChanneled( "a", null );
                $this->m->outputChanneled( "", null );
                $this->m->outputChanneled( "r", null );
-               $this->assertOutputPrePostShutdown( "\nfoo\n\n\nb\na\n\nr\n", False );
+               $this->assertOutputPrePostShutdown( "\nfoo\n\n\nb\na\n\nr\n", false );
        }
 
        function testOutputChanneledWChannelString() {
                $this->m->outputChanneled( "foo", "bazChannel" );
-               $this->assertOutputPrePostShutdown( "foo", True );
+               $this->assertOutputPrePostShutdown( "foo", true );
        }
 
        function testOutputChanneledWChannelStringNLString() {
                $this->m->outputChanneled( "foo\nbar", "bazChannel" );
-               $this->assertOutputPrePostShutdown( "foo\nbar", True );
+               $this->assertOutputPrePostShutdown( "foo\nbar", true );
        }
 
        function testOutputChanneledWChannelStringString() {
                $this->m->outputChanneled( "foo", "bazChannel" );
                $this->m->outputChanneled( "bar", "bazChannel" );
-               $this->assertOutputPrePostShutdown( "foobar", True );
+               $this->assertOutputPrePostShutdown( "foobar", true );
        }
 
        function testOutputChanneledWChannelStringNLStringNLArbitraryAgain() {
@@ -553,7 +553,7 @@ class MaintenanceTest extends MediaWikiTestCase {
                $this->m->outputChanneled( "a", "bazChannel" );
                $this->m->outputChanneled( "", "bazChannel" );
                $this->m->outputChanneled( "r", "bazChannel" );
-               $this->assertOutputPrePostShutdown( "foo\nbar", True );
+               $this->assertOutputPrePostShutdown( "foo\nbar", true );
        }
 
        function testOutputChanneledWMultipleChannelsChannelChange() {
@@ -561,7 +561,7 @@ class MaintenanceTest extends MediaWikiTestCase {
                $this->m->outputChanneled( "bar", "bazChannel" );
                $this->m->outputChanneled( "qux", "quuxChannel" );
                $this->m->outputChanneled( "corge", "bazChannel" );
-               $this->assertOutputPrePostShutdown( "foobar\nqux\ncorge", True );
+               $this->assertOutputPrePostShutdown( "foobar\nqux\ncorge", true );
        }
 
        function testOutputChanneledWMultipleChannelsChannelChangeEnclosedNull() {
@@ -569,7 +569,7 @@ class MaintenanceTest extends MediaWikiTestCase {
                $this->m->outputChanneled( "bar", null );
                $this->m->outputChanneled( "qux", null );
                $this->m->outputChanneled( "corge", "bazChannel" );
-               $this->assertOutputPrePostShutdown( "foo\nbar\nqux\ncorge", True );
+               $this->assertOutputPrePostShutdown( "foo\nbar\nqux\ncorge", true );
        }
 
        function testOutputChanneledWMultipleChannelsChannelAfterNullChange() {
@@ -577,7 +577,7 @@ class MaintenanceTest extends MediaWikiTestCase {
                $this->m->outputChanneled( "bar", null );
                $this->m->outputChanneled( "qux", null );
                $this->m->outputChanneled( "corge", "quuxChannel" );
-               $this->assertOutputPrePostShutdown( "foo\nbar\nqux\ncorge", True );
+               $this->assertOutputPrePostShutdown( "foo\nbar\nqux\ncorge", true );
        }
 
        function testOutputChanneledWAndWOChannelStringStartWO() {
@@ -585,7 +585,7 @@ class MaintenanceTest extends MediaWikiTestCase {
                $this->m->outputChanneled( "bar", "bazChannel" );
                $this->m->outputChanneled( "qux" );
                $this->m->outputChanneled( "quux", "bazChannel" );
-               $this->assertOutputPrePostShutdown( "foo\nbar\nqux\nquux", True );
+               $this->assertOutputPrePostShutdown( "foo\nbar\nqux\nquux", true );
        }
 
        function testOutputChanneledWAndWOChannelStringStartW() {
@@ -593,114 +593,114 @@ class MaintenanceTest extends MediaWikiTestCase {
                $this->m->outputChanneled( "bar" );
                $this->m->outputChanneled( "qux", "bazChannel" );
                $this->m->outputChanneled( "quux" );
-               $this->assertOutputPrePostShutdown( "foo\nbar\nqux\nquux\n", False );
+               $this->assertOutputPrePostShutdown( "foo\nbar\nqux\nquux\n", false );
        }
 
        function testOutputChanneledWChannelTypeSwitch() {
                $this->m->outputChanneled( "foo", 1 );
                $this->m->outputChanneled( "bar", 1.0 );
-               $this->assertOutputPrePostShutdown( "foo\nbar", True );
+               $this->assertOutputPrePostShutdown( "foo\nbar", true );
        }
 
        function testOutputChanneledWOChannelIntermittentEmpty() {
                $this->m->outputChanneled( "foo" );
                $this->m->outputChanneled( "" );
                $this->m->outputChanneled( "bar" );
-               $this->assertOutputPrePostShutdown( "foo\n\nbar\n", False );
+               $this->assertOutputPrePostShutdown( "foo\n\nbar\n", false );
        }
 
        function testOutputChanneledWOChannelIntermittentFalse() {
                $this->m->outputChanneled( "foo" );
                $this->m->outputChanneled( false );
                $this->m->outputChanneled( "bar" );
-               $this->assertOutputPrePostShutdown( "foo\nbar\n", False );
+               $this->assertOutputPrePostShutdown( "foo\nbar\n", false );
        }
 
        function testOutputChanneledWNullChannelIntermittentEmpty() {
                $this->m->outputChanneled( "foo", null );
                $this->m->outputChanneled( "", null );
                $this->m->outputChanneled( "bar", null );
-               $this->assertOutputPrePostShutdown( "foo\n\nbar\n", False );
+               $this->assertOutputPrePostShutdown( "foo\n\nbar\n", false );
        }
 
        function testOutputChanneledWNullChannelIntermittentFalse() {
                $this->m->outputChanneled( "foo", null );
                $this->m->outputChanneled( false, null );
                $this->m->outputChanneled( "bar", null );
-               $this->assertOutputPrePostShutdown( "foo\nbar\n", False );
+               $this->assertOutputPrePostShutdown( "foo\nbar\n", false );
        }
 
        function testOutputChanneledWChannelIntermittentEmpty() {
                $this->m->outputChanneled( "foo", "bazChannel" );
                $this->m->outputChanneled( "", "bazChannel" );
                $this->m->outputChanneled( "bar", "bazChannel" );
-               $this->assertOutputPrePostShutdown( "foobar", True );
+               $this->assertOutputPrePostShutdown( "foobar", true );
        }
 
        function testOutputChanneledWChannelIntermittentFalse() {
                $this->m->outputChanneled( "foo", "bazChannel" );
                $this->m->outputChanneled( false, "bazChannel" );
                $this->m->outputChanneled( "bar", "bazChannel" );
-               $this->assertOutputPrePostShutdown( "foo\nbar", True );
+               $this->assertOutputPrePostShutdown( "foo\nbar", true );
        }
 
        function testCleanupChanneledClean() {
                $this->m->cleanupChanneled();
-               $this->assertOutputPrePostShutdown( "", False );
+               $this->assertOutputPrePostShutdown( "", false );
        }
 
        function testCleanupChanneledAfterOutput() {
                $this->m->output( "foo" );
                $this->m->cleanupChanneled();
-               $this->assertOutputPrePostShutdown( "foo", False );
+               $this->assertOutputPrePostShutdown( "foo", false );
        }
 
        function testCleanupChanneledAfterOutputWNullChannel() {
                $this->m->output( "foo", null );
                $this->m->cleanupChanneled();
-               $this->assertOutputPrePostShutdown( "foo", False );
+               $this->assertOutputPrePostShutdown( "foo", false );
        }
 
        function testCleanupChanneledAfterOutputWChannel() {
                $this->m->output( "foo", "bazChannel" );
                $this->m->cleanupChanneled();
-               $this->assertOutputPrePostShutdown( "foo\n", False );
+               $this->assertOutputPrePostShutdown( "foo\n", false );
        }
 
        function testCleanupChanneledAfterNLOutput() {
                $this->m->output( "foo\n" );
                $this->m->cleanupChanneled();
-               $this->assertOutputPrePostShutdown( "foo\n", False );
+               $this->assertOutputPrePostShutdown( "foo\n", false );
        }
 
        function testCleanupChanneledAfterNLOutputWNullChannel() {
                $this->m->output( "foo\n", null );
                $this->m->cleanupChanneled();
-               $this->assertOutputPrePostShutdown( "foo\n", False );
+               $this->assertOutputPrePostShutdown( "foo\n", false );
        }
 
        function testCleanupChanneledAfterNLOutputWChannel() {
                $this->m->output( "foo\n", "bazChannel" );
                $this->m->cleanupChanneled();
-               $this->assertOutputPrePostShutdown( "foo\n", False );
+               $this->assertOutputPrePostShutdown( "foo\n", false );
        }
 
        function testCleanupChanneledAfterOutputChanneledWOChannel() {
                $this->m->outputChanneled( "foo" );
                $this->m->cleanupChanneled();
-               $this->assertOutputPrePostShutdown( "foo\n", False );
+               $this->assertOutputPrePostShutdown( "foo\n", false );
        }
 
        function testCleanupChanneledAfterOutputChanneledWNullChannel() {
                $this->m->outputChanneled( "foo", null );
                $this->m->cleanupChanneled();
-               $this->assertOutputPrePostShutdown( "foo\n", False );
+               $this->assertOutputPrePostShutdown( "foo\n", false );
        }
 
        function testCleanupChanneledAfterOutputChanneledWChannel() {
                $this->m->outputChanneled( "foo", "bazChannel" );
                $this->m->cleanupChanneled();
-               $this->assertOutputPrePostShutdown( "foo\n", False );
+               $this->assertOutputPrePostShutdown( "foo\n", false );
        }
 
        function testMultipleMaintenanceObjectsInteractionOutput() {
@@ -712,7 +712,7 @@ class MaintenanceTest extends MediaWikiTestCase {
                $this->assertEquals( "foobar", $this->getActualOutput(),
                                "Output before shutdown simulation (m2)" );
                $m2->simulateShutdown();
-               $this->assertOutputPrePostShutdown( "foobar", False );
+               $this->assertOutputPrePostShutdown( "foobar", false );
        }
 
        function testMultipleMaintenanceObjectsInteractionOutputWNullChannel() {
@@ -724,7 +724,7 @@ class MaintenanceTest extends MediaWikiTestCase {
                $this->assertEquals( "foobar", $this->getActualOutput(),
                                "Output before shutdown simulation (m2)" );
                $m2->simulateShutdown();
-               $this->assertOutputPrePostShutdown( "foobar", False );
+               $this->assertOutputPrePostShutdown( "foobar", false );
        }
 
        function testMultipleMaintenanceObjectsInteractionOutputWChannel() {
@@ -736,7 +736,7 @@ class MaintenanceTest extends MediaWikiTestCase {
                $this->assertEquals( "foobar", $this->getActualOutput(),
                                "Output before shutdown simulation (m2)" );
                $m2->simulateShutdown();
-               $this->assertOutputPrePostShutdown( "foobar\n", True );
+               $this->assertOutputPrePostShutdown( "foobar\n", true );
        }
 
        function testMultipleMaintenanceObjectsInteractionOutputWNullChannelNL() {
@@ -748,7 +748,7 @@ class MaintenanceTest extends MediaWikiTestCase {
                $this->assertEquals( "foo\nbar\n", $this->getActualOutput(),
                                "Output before shutdown simulation (m2)" );
                $m2->simulateShutdown();
-               $this->assertOutputPrePostShutdown( "foo\nbar\n", False );
+               $this->assertOutputPrePostShutdown( "foo\nbar\n", false );
        }
 
        function testMultipleMaintenanceObjectsInteractionOutputWChannelNL() {
@@ -760,7 +760,7 @@ class MaintenanceTest extends MediaWikiTestCase {
                $this->assertEquals( "foobar", $this->getActualOutput(),
                                "Output before shutdown simulation (m2)" );
                $m2->simulateShutdown();
-               $this->assertOutputPrePostShutdown( "foobar\n", True );
+               $this->assertOutputPrePostShutdown( "foobar\n", true );
        }
 
        function testMultipleMaintenanceObjectsInteractionOutputChanneled() {
@@ -772,7 +772,7 @@ class MaintenanceTest extends MediaWikiTestCase {
                $this->assertEquals( "foo\nbar\n", $this->getActualOutput(),
                                "Output before shutdown simulation (m2)" );
                $m2->simulateShutdown();
-               $this->assertOutputPrePostShutdown( "foo\nbar\n", False );
+               $this->assertOutputPrePostShutdown( "foo\nbar\n", false );
        }
 
        function testMultipleMaintenanceObjectsInteractionOutputChanneledWNullChannel() {
@@ -784,7 +784,7 @@ class MaintenanceTest extends MediaWikiTestCase {
                $this->assertEquals( "foo\nbar\n", $this->getActualOutput(),
                                "Output before shutdown simulation (m2)" );
                $m2->simulateShutdown();
-               $this->assertOutputPrePostShutdown( "foo\nbar\n", False );
+               $this->assertOutputPrePostShutdown( "foo\nbar\n", false );
        }
 
        function testMultipleMaintenanceObjectsInteractionOutputChanneledWChannel() {
@@ -796,7 +796,7 @@ class MaintenanceTest extends MediaWikiTestCase {
                $this->assertEquals( "foobar", $this->getActualOutput(),
                                "Output before shutdown simulation (m2)" );
                $m2->simulateShutdown();
-               $this->assertOutputPrePostShutdown( "foobar\n", True );
+               $this->assertOutputPrePostShutdown( "foobar\n", true );
        }
 
        function testMultipleMaintenanceObjectsInteractionCleanupChanneledWChannel() {
@@ -815,7 +815,7 @@ class MaintenanceTest extends MediaWikiTestCase {
                                "Output after second cleanup" );
 
                $m2->simulateShutdown();
-               $this->assertOutputPrePostShutdown( "foobar\n\n", False );
+               $this->assertOutputPrePostShutdown( "foobar\n\n", false );
        }
 
 
index 2ebb351..2a12806 100644 (file)
@@ -156,7 +156,7 @@ class TextPassDumperTest extends DumpTestCase {
                );
 
                // The mock itself
-               $prefetchMock = $this->getMock( 'BaseDump', array( 'prefetch' ), array(), '', FALSE );
+               $prefetchMock = $this->getMock( 'BaseDump', array( 'prefetch' ), array(), '', false );
                $prefetchMock->expects( $this->exactly( 6 ) )
                        ->method( 'prefetch' )
                        ->will( $this->returnValueMap( $prefetchMap ) );
@@ -230,7 +230,7 @@ class TextPassDumperTest extends DumpTestCase {
                $nameOutputDir = $this->getNewTempDirectory();
 
                $stderr = fopen( 'php://output', 'a' );
-               if ( $stderr === FALSE ) {
+               if ( $stderr === false ) {
                        $this->fail( "Could not open stream for stderr" );
                }
 
@@ -417,6 +417,7 @@ class TextPassDumperTest extends DumpTestCase {
         * @group large
         */
        function testCheckpointGzip() {
+               $this->checkHasGzip();
                $this->checkpointHelper( "gzip" );
        }
 
index 8a8dea5..afd8f43 100644 (file)
@@ -172,6 +172,8 @@ class BackupDumperLoggerTest extends DumpTestCase {
        function testXmlDumpsBackupUseCaseLogging() {
                global $wgContLang;
 
+               $this->checkHasGzip();
+
                // Preparing the dump
                $fname = $this->getNewTempFile();
                $dumper = new BackupDumper( array ( "--output=gzip:" . $fname,
@@ -186,7 +188,7 @@ class BackupDumperLoggerTest extends DumpTestCase {
                // to be able to alert (once dumping produces reports) that this test
                // needs updates.
                $dumper->stderr = fopen( 'php://output', 'a' );
-               if ( $dumper->stderr === FALSE ) {
+               if ( $dumper->stderr === false ) {
                        $this->fail( "Could not open stream for stderr" );
                }
 
index 227e04a..d7f2feb 100644 (file)
@@ -19,6 +19,12 @@ class BackupDumperPageTest extends DumpTestCase {
        private $namespace, $talk_namespace;
 
        function addDBData() {
+               // be sure, titles created here using english namespace names
+               $this->setMwGlobals( array(
+                       'wgLanguageCode' => 'en',
+                       'wgContLang' => Language::factory( 'en' ),
+               ));
+
                $this->tablesUsed[] = 'page';
                $this->tablesUsed[] = 'revision';
                $this->tablesUsed[] = 'text';
@@ -79,11 +85,6 @@ class BackupDumperPageTest extends DumpTestCase {
        protected function setUp() {
                parent::setUp();
 
-               $this->setMwGlobals( array(
-                       'wgLanguageCode' => 'en',
-                       'wgContLang' => Language::factory( 'en' ),
-               ));
-
                // Since we will restrict dumping by page ranges (to allow
                // working tests, even if the db gets prepopulated by a base
                // class), we have to assert, that the page id are consecutively
@@ -231,6 +232,8 @@ class BackupDumperPageTest extends DumpTestCase {
        }
 
        function testCurrentStubGzip () {
+               $this->checkHasGzip();
+
                // Preparing the dump
                $fname = $this->getNewTempFile();
                $dumper = new BackupDumper( array ( "--output=gzip:" . $fname ) );
@@ -283,6 +286,8 @@ class BackupDumperPageTest extends DumpTestCase {
                // We reproduce such a setup with our mini fixture, although we omit
                // chunks, and all the other gimmicks of xmldumps-backup.
                //
+               $this->checkHasGzip();
+
                $fnameMetaHistory = $this->getNewTempFile();
                $fnameMetaCurrent = $this->getNewTempFile();
                $fnameArticles = $this->getNewTempFile();
@@ -301,7 +306,7 @@ class BackupDumperPageTest extends DumpTestCase {
                // computer. We only check that reporting does not crash the dumping
                // and that something is reported
                $dumper->stderr = fopen( 'php://output', 'a' );
-               if ( $dumper->stderr === FALSE ) {
+               if ( $dumper->stderr === false ) {
                        $this->fail( "Could not open stream for stderr" );
                }
 
index 8041e35..04536f8 100644 (file)
@@ -18,7 +18,7 @@ class SemiMockedFetchText extends FetchText {
        /**
         * @var bool Whether or not a text for stdin has been provided
         */
-       private $mockSetUp = False;
+       private $mockSetUp = false;
 
        /**
         * @var Array Invocation counters for the mocked aspects
@@ -32,10 +32,9 @@ class SemiMockedFetchText extends FetchText {
         *
         * @param $stdin String The string to be used instead of stdin
         */
-       function mockStdin( $stdin )
-       {
+       function mockStdin( $stdin ) {
                $this->mockStdinText = $stdin;
-               $this->mockSetUp = True;
+               $this->mockSetUp = true;
        }
 
        /**
@@ -44,16 +43,14 @@ class SemiMockedFetchText extends FetchText {
         * @return Array An array, whose keys are function names. The corresponding values
         * denote the number of times the function has been invoked.
         */
-       function mockGetInvocations()
-       {
+       function mockGetInvocations() {
                return $this->mockInvocations;
        }
 
        // -----------------------------------------------------------------
        // Mocked functions from FetchText follow.
 
-       function getStdin( $len = null )
-       {
+       function getStdin( $len = null ) {
                $this->mockInvocations['getStdin']++;
                if ( $len !== null ) {
                        throw new PHPUnit_Framework_ExpectationFailedException(
index 0b7c758..699571b 100644 (file)
@@ -52,11 +52,11 @@ class GetSlaveServerTest extends MediaWikiTestCase {
 
                // The main answer
                $output = $this->getActualOutput();
-               $firstLineEndPos = strpos( $output,"\n");
-               if ( $firstLineEndPos === FALSE ) {
+               $firstLineEndPos = strpos( $output, "\n" );
+               if ( $firstLineEndPos === false ) {
                        $this->fail( "Could not find end of first line of output" );
                }
-               $firstLine = substr( $output, 0 , $firstLineEndPos );
+               $firstLine = substr( $output, 0, $firstLineEndPos );
                $this->assertRegExp( "/^" . self::getServerRE() . "$/D",
                        $firstLine, "DB Server" );
 
index 89337f4..85ed0b4 100644 (file)
@@ -10,10 +10,6 @@ class SideBarTest extends MediaWikiLangTestCase {
        /** Local cache for sidebar messages */
        private $messages;
 
-       function __construct() {
-               parent::__construct();
-       }
-
        /** Build $this->messages array */
        private function initMessagesHref() {
                # List of default messages for the sidebar:
index f286fa1..56f6447 100644 (file)
@@ -8,8 +8,8 @@
          convertNoticesToExceptions="true"
          convertWarningsToExceptions="true"
          stopOnFailure="false"
-                timeoutForSmallTests="2"
-                timeoutForMediumTests="10"
+                timeoutForSmallTests="10"
+                timeoutForMediumTests="30"
                 timeoutForLargeTests="60"
          strict="true"
                 verbose="true">
index 843aaf9..366d8f2 100644 (file)
@@ -88,6 +88,8 @@ class UploadFromUrlTestSuite extends PHPUnit_Framework_TestSuite {
                FileBackendGroup::destroySingleton();
 
                $this->teardownUploadDir( $this->uploadDir );
+
+               parent::tearDown();
        }
 
        private $uploadDir;
index 29c6657..44aaefd 100644 (file)
                                        rtl: true
                                }
                        },
+                       // Iceweasel 10.0.6
+                       'Mozilla/5.0 (X11; Linux i686; rv:10.0.6) Gecko/20100101 Iceweasel/10.0.6': {
+                               title: 'Iceweasel 10.0.6',
+                               platform: 'Linux',
+                               profile: {
+                                       name: 'iceweasel',
+                                       layout: 'gecko',
+                                       layoutVersion: 20100101,
+                                       platform: 'linux',
+                                       version: '10.0.6',
+                                       versionBase: '10',
+                                       versionNumber: 10
+                               },
+                               wikiEditor: {
+                                       ltr: true,
+                                       rtl: true
+                               }
+                       },
                        // Firefox 5
                        // Safari 3
                        // Safari 4
index 0000f0c..b8d816e 100644 (file)
                }
        );
 
+QUnit.test( 'Sorting images using alt text', function ( assert ) {
+       var $table = $(
+               '<table class="sortable">' +
+               '<tr><th>THEAD</th></tr>' +
+               '<tr><td><img alt="2"/></td></tr>' +
+               '<tr><td>1</td></tr>' +
+               '</table>'
+       );
+       $table.tablesorter().find( '.headerSort:eq(0)' ).click();
+
+       assert.equal(
+               $table.find( 'td' ).first().text(),
+               '1',
+               'Applied correct sorting order'
+       );
+} );
+
+QUnit.test( 'Sorting images using alt text (complex)', function ( assert ) {
+       var $table = $(
+               '<table class="sortable">' +
+               '<tr><th>THEAD</th></tr>' +
+               '<tr><td><img alt="D" />A</td></tr>' +
+               '<tr><td>CC</td></tr>' +
+               '<tr><td><a><img alt="A" /></a>F</tr>' +
+               '<tr><td><img alt="A" /><strong>E</strong></tr>' +
+               '<tr><td><strong><img alt="A" />D</strong></tr>' +
+               '<tr><td><img alt="A" />C</tr>' +
+               '</table>'
+       );
+       $table.tablesorter().find( '.headerSort:eq(0)' ).click();
+
+       assert.equal(
+               $table.find( 'td' ).text(),
+               'CDEFCCA',
+               'Applied correct sorting order'
+       );
+} );
+
+QUnit.test( 'Sorting images using alt text (with format autodetection)', function ( assert ) {
+       var $table = $(
+               '<table class="sortable">' +
+               '<tr><th>THEAD</th></tr>' +
+               '<tr><td><img alt="1" />7</td></tr>' +
+               '<tr><td>1<img alt="6" /></td></tr>' +
+               '<tr><td>5</td></tr>' +
+               '<tr><td>4</td></tr>' +
+               '</table>'
+       );
+       $table.tablesorter().find( '.headerSort:eq(0)' ).click();
+
+       assert.equal(
+               $table.find( 'td' ).text(),
+               '4517',
+               'Applied correct sorting order'
+       );
+} );
+
 }( jQuery, mediaWiki ) );
index 7fc7453..9eb2efc 100644 (file)
                assert.ok( relativePath.indexOf( uri.fragment ) >= 0, 'fragement in relative path' );
        } );
 
+       QUnit.test( 'Parse a uri with an @ symbol in the path and query', 1, function ( assert ) {
+               var uri = new mw.Uri( 'http://www.example.com/test@test?x=@uri&y@=uri&z@=@' );
+
+               assert.deepEqual(
+                       {
+                               protocol: uri.protocol,
+                               user: uri.user,
+                               password: uri.password,
+                               host: uri.host,
+                               port: uri.port,
+                               path: uri.path,
+                               query: uri.query,
+                               fragment: uri.fragment,
+                               queryString: uri.getQueryString()
+                       },
+                       {
+                               protocol: 'http',
+                               user: undefined,
+                               password: undefined,
+                               host: 'www.example.com',
+                               port: undefined,
+                               path: '/test@test',
+                               query: { x: '@uri', 'y@': 'uri', 'z@': '@' },
+                               fragment: undefined,
+                               queryString: 'x=%40uri&y%40=uri&z%40=%40'
+                       },
+                       'basic object properties'
+               );
+       } );
+
        QUnit.test( 'Handle protocol-relative URLs', 5, function ( assert ) {
                var UriRel, uri;
 
index bce7bd7..d7c73e5 100644 (file)
@@ -1,16 +1,27 @@
 ( function ( mw, $ ) {
 
+var mwLanguageCache = {}, oldGetOuterHtml, formatnumTests;
+
 QUnit.module( 'mediawiki.jqueryMsg', QUnit.newMwEnvironment( {
        setup: function () {
                this.orgMwLangauge = mw.language;
                mw.language = $.extend( true, {}, this.orgMwLangauge );
+               oldGetOuterHtml = $.fn.getOuterHtml;
+               $.fn.getOuterHtml = function () {
+                       var $div = $( '<div>' ), html;
+                       $div.append( $( this ).eq( 0 ).clone() );
+                       html = $div.html();
+                       $div.empty();
+                       $div = undefined;
+                       return html;
+               };
        },
        teardown: function () {
                mw.language = this.orgMwLangauge;
+               $.fn.getOuterHtml = oldGetOuterHtml;
        }
 }) );
 
-var mwLanguageCache = {};
 function getMwLanguage( langCode, cb ) {
        if ( mwLanguageCache[langCode] !== undefined ) {
                mwLanguageCache[langCode].add( cb );
@@ -38,6 +49,59 @@ function getMwLanguage( langCode, cb ) {
        });
 }
 
+QUnit.test( 'Replace', 9, function ( assert ) {
+       var parser = mw.jqueryMsg.getMessageFunction();
+
+       mw.messages.set( 'simple', 'Foo $1 baz $2' );
+
+       assert.equal( parser( 'simple' ), 'Foo $1 baz $2', 'Replacements with no substitutes' );
+       assert.equal( parser( 'simple', 'bar' ), 'Foo bar baz $2', 'Replacements with less substitutes' );
+       assert.equal( parser( 'simple', 'bar', 'quux' ), 'Foo bar baz quux', 'Replacements with all substitutes' );
+
+       mw.messages.set( 'plain-input', '<foo foo="foo">x$1y&lt;</foo>z' );
+
+       assert.equal(
+               parser( 'plain-input', 'bar' ),
+               '&lt;foo foo="foo"&gt;xbary&amp;lt;&lt;/foo&gt;z',
+               'Input is not considered html'
+       );
+
+       mw.messages.set( 'plain-replace', 'Foo $1' );
+
+       assert.equal(
+               parser( 'plain-replace', '<bar bar="bar">&gt;</bar>' ),
+               'Foo &lt;bar bar="bar"&gt;&amp;gt;&lt;/bar&gt;',
+               'Replacement is not considered html'
+       );
+
+       mw.messages.set( 'object-replace', 'Foo $1' );
+
+       assert.equal(
+               parser( 'object-replace', $( '<div class="bar">&gt;</div>' ) ),
+               'Foo <div class="bar">&gt;</div>',
+               'jQuery objects are preserved as raw html'
+       );
+
+       assert.equal(
+               parser( 'object-replace', $( '<div class="bar">&gt;</div>' ).get( 0 ) ),
+               'Foo <div class="bar">&gt;</div>',
+               'HTMLElement objects are preserved as raw html'
+       );
+
+       assert.equal(
+               parser( 'object-replace', $( '<div class="bar">&gt;</div>' ).toArray() ),
+               'Foo <div class="bar">&gt;</div>',
+               'HTMLElement[] arrays are preserved as raw html'
+       );
+
+       mw.messages.set( 'wikilink-replace', 'Foo [$1 bar]' );
+       assert.equal(
+               parser( 'wikilink-replace', 'http://example.org/?x=y&z' ),
+               'Foo <a href="http://example.org/?x=y&amp;z">bar</a>',
+               'Href is not double-escaped in wikilink function'
+       );
+} );
+
 QUnit.test( 'Plural', 3, function ( assert ) {
        var parser = mw.jqueryMsg.getMessageFunction();
 
@@ -47,7 +111,6 @@ QUnit.test( 'Plural', 3, function ( assert ) {
        assert.equal( parser( 'plural-msg', 2 ), 'Found 2 items', 'Plural test for english' );
 } );
 
-
 QUnit.test( 'Gender', 11, function ( assert ) {
        // TODO: These tests should be for mw.msg once mw.msg integrated with mw.jqueryMsg
        // TODO: English may not be the best language for these tests. Use a language like Arabic or Russian
@@ -133,7 +196,7 @@ QUnit.test( 'Grammar', 2, function ( assert ) {
        assert.equal( parser( 'grammar-msg-wrong-syntax' ), 'Przeszukaj ' , 'Grammar Test with wrong grammar template syntax' );
 } );
 
-QUnit.test( 'Output matches PHP parser', mw.libs.phpParserData.tests.length, function ( assert ) {
+QUnit.test( 'Match PHP parser', mw.libs.phpParserData.tests.length, function ( assert ) {
        mw.messages.set( mw.libs.phpParserData.messages );
        $.each( mw.libs.phpParserData.tests, function ( i, test ) {
                QUnit.stop();
@@ -154,4 +217,245 @@ QUnit.test( 'Output matches PHP parser', mw.libs.phpParserData.tests.length, fun
        } );
 });
 
+QUnit.test( 'Wikilink', 6, function ( assert ) {
+       var parser = mw.jqueryMsg.getMessageFunction(),
+               expectedListUsers,
+               expectedDisambiguationsText,
+               expectedMultipleBars,
+               expectedSpecialCharacters,
+               specialCharactersPageName;
+
+       /*
+        The below three are all identical to or based on real messages.  For disambiguations-text,
+        the bold was removed because it is not yet implemented.
+       */
+
+       mw.messages.set( 'statistics-users', '注册[[Special:ListUsers|用户]]' );
+
+       expectedListUsers = '注册' + $( '<a>' ).attr( {
+               title: 'Special:ListUsers',
+               href: mw.util.wikiGetlink( 'Special:ListUsers' )
+       } ).text( '用户' ).getOuterHtml();
+
+       assert.equal(
+               parser( 'statistics-users' ),
+               expectedListUsers,
+               'Piped wikilink'
+       );
+
+       expectedDisambiguationsText = 'The following pages contain at least one link to a disambiguation page.\nThey may have to link to a more appropriate page instead.\nA page is treated as a disambiguation page if it uses a template that is linked from ' +
+               $( '<a>' ).attr( {
+                       title: 'MediaWiki:Disambiguationspage',
+                       href: mw.util.wikiGetlink( 'MediaWiki:Disambiguationspage' )
+               } ).text( 'MediaWiki:Disambiguationspage' ).getOuterHtml() + '.';
+       mw.messages.set( 'disambiguations-text', 'The following pages contain at least one link to a disambiguation page.\nThey may have to link to a more appropriate page instead.\nA page is treated as a disambiguation page if it uses a template that is linked from [[MediaWiki:Disambiguationspage]].' );
+       assert.equal(
+               parser( 'disambiguations-text' ),
+               expectedDisambiguationsText,
+               'Wikilink without pipe'
+       );
+
+       mw.messages.set( 'version-entrypoints-index-php', '[https://www.mediawiki.org/wiki/Manual:index.php index.php]' );
+       assert.equal(
+               parser( 'version-entrypoints-index-php' ),
+               '<a href="https://www.mediawiki.org/wiki/Manual:index.php">index.php</a>',
+               'External link'
+       );
+
+       // Pipe trick is not supported currently, but should not parse as text either.
+       mw.messages.set( 'pipe-trick', '[[Tampa, Florida|]]' );
+       assert.equal(
+               parser( 'pipe-trick' ),
+               'pipe-trick: Parse error at position 0 in input: [[Tampa, Florida|]]',
+               'Pipe trick should return error string.'
+       );
+
+       expectedMultipleBars = $( '<a>' ).attr( {
+               title: 'Main Page',
+               href: mw.util.wikiGetlink( 'Main Page' )
+       } ).text( 'Main|Page' ).getOuterHtml();
+       mw.messages.set( 'multiple-bars', '[[Main Page|Main|Page]]' );
+       assert.equal(
+               parser( 'multiple-bars' ),
+               expectedMultipleBars,
+               'Bar in anchor'
+       );
+
+       specialCharactersPageName = '"Who" wants to be a millionaire & live on \'Exotic Island\'?';
+       expectedSpecialCharacters = $( '<a>' ).attr( {
+               title: specialCharactersPageName,
+               href: mw.util.wikiGetlink( specialCharactersPageName )
+       } ).text( specialCharactersPageName ).getOuterHtml();
+
+       mw.messages.set( 'special-characters', '[[' + specialCharactersPageName + ']]' );
+       assert.equal(
+               parser( 'special-characters' ),
+               expectedSpecialCharacters,
+               'Special characters'
+       );
+});
+
+QUnit.test( 'Int', 4, function ( assert ) {
+       var parser = mw.jqueryMsg.getMessageFunction(),
+           newarticletextSource = 'You have followed a link to a page that does not exist yet. To create the page, start typing in the box below (see the [[{{Int:Helppage}}|help page]] for more info). If you are here by mistake, click your browser\'s back button.',
+               expectedNewarticletext;
+
+       mw.messages.set( 'helppage', 'Help:Contents' );
+
+       expectedNewarticletext = 'You have followed a link to a page that does not exist yet. To create the page, start typing in the box below (see the ' +
+               $( '<a>' ).attr( {
+                       title: mw.msg( 'helppage' ),
+                       href: mw.util.wikiGetlink( mw.msg( 'helppage' ) )
+               } ).text( 'help page' ).getOuterHtml() + ' for more info). If you are here by mistake, click your browser\'s back button.';
+
+       mw.messages.set( 'newarticletext', newarticletextSource );
+
+       assert.equal(
+               parser( 'newarticletext' ),
+               expectedNewarticletext,
+               'Link with nested message'
+       );
+
+       mw.messages.set( 'portal-url', 'Project:Community portal' );
+       mw.messages.set( 'see-portal-url', '{{Int:portal-url}} is an important community page.' );
+       assert.equal(
+               parser( 'see-portal-url' ),
+               'Project:Community portal is an important community page.',
+               'Nested message'
+       );
+
+       mw.messages.set( 'newarticletext-lowercase',
+               newarticletextSource.replace( 'Int:Helppage', 'int:helppage' ) );
+
+       assert.equal(
+               parser( 'newarticletext-lowercase' ),
+               expectedNewarticletext,
+               'Link with nested message, lowercase include'
+       );
+
+       mw.messages.set( 'uses-missing-int', '{{int:doesnt-exist}}' );
+
+       assert.equal(
+               parser( 'uses-missing-int' ),
+               '[doesnt-exist]',
+               'int: where nested message does not exist'
+       );
+});
+
+// Tests that getMessageFunction is used for messages with curly braces or square brackets,
+// but not otherwise.
+QUnit.test( 'mw.msg()', 8, function ( assert ) {
+       // Should be
+       var map, oldGMF, outerCalled, innerCalled;
+
+       map = new mw.Map();
+       map.set( {
+               'curly-brace': '{{int:message}}',
+               'single-square-bracket': '[https://www.mediawiki.org/ MediaWiki]',
+               'double-square-bracket': '[[Some page]]',
+               'regular': 'Other message'
+       } );
+
+       oldGMF = mw.jqueryMsg.getMessageFunction;
+
+       mw.jqueryMsg.getMessageFunction = function() {
+               outerCalled = true;
+               return function() {
+                       innerCalled = true;
+               };
+       };
+
+       function verifyGetMessageFunction( key, shouldCall ) {
+               outerCalled = false;
+               innerCalled = false;
+               ( new mw.Message( map, key ) ).parser();
+               assert.strictEqual( outerCalled, shouldCall, 'Outer function called for ' + key );
+               assert.strictEqual( innerCalled, shouldCall, 'Inner function called for ' + key );
+       }
+
+       verifyGetMessageFunction( 'curly-brace', true );
+       verifyGetMessageFunction( 'single-square-bracket', true );
+       verifyGetMessageFunction( 'double-square-bracket', true );
+       verifyGetMessageFunction( 'regular', false );
+
+       mw.jqueryMsg.getMessageFunction = oldGMF;
+} );
+
+formatnumTests = [
+       {
+               lang: 'en',
+               number: 987654321.654321,
+               result: '987654321.654321',
+               description: 'formatnum test for English, decimal seperator'
+       },
+       {
+               lang: 'ar',
+               number: 987654321.654321,
+               result: '٩٨٧٦٥٤٣٢١٫٦٥٤٣٢١',
+               description: 'formatnum test for Arabic, with decimal seperator'
+       },
+       {
+               lang: 'ar',
+               number: '٩٨٧٦٥٤٣٢١٫٦٥٤٣٢١',
+               result: 987654321,
+               integer: true,
+               description: 'formatnum test for Arabic, with decimal seperator, reverse'
+       },
+       {
+               lang: 'ar',
+               number: -12.89,
+               result: '-١٢٫٨٩',
+               description: 'formatnum test for Arabic, negative number'
+       },
+       {
+               lang: 'ar',
+               number: '-١٢٫٨٩',
+               result: -12,
+               integer: true,
+               description: 'formatnum test for Arabic, negative number, reverse'
+       },
+       {
+               lang: 'nl',
+               number: 987654321.654321,
+               result: '987654321,654321',
+               description: 'formatnum test for Nederlands, decimal seperator'
+       },
+       {
+               lang: 'nl',
+               number: -12.89,
+               result: '-12,89',
+               description: 'formatnum test for Nederlands, negative number'
+       },
+       {
+               lang: 'nl',
+               number: 'invalidnumber',
+               result: 'invalidnumber',
+               description: 'formatnum test for Nederlands, invalid number'
+       }
+];
+
+QUnit.test( 'formatnum', formatnumTests.length, function ( assert ) {
+       mw.messages.set( 'formatnum-msg', '{{formatnum:$1}}' );
+       mw.messages.set( 'formatnum-msg-int', '{{formatnum:$1|R}}' );
+       $.each( formatnumTests, function ( i, test ) {
+               QUnit.stop();
+               getMwLanguage( test.lang, function ( langClass ) {
+                       QUnit.start();
+                       if ( !langClass ) {
+                               assert.ok( false, 'Language "' + test.lang + '" failed to load' );
+                               return;
+                       }
+                       mw.messages.set(test.message );
+                       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',
+                                       [ test.number ] ).html(),
+                               test.result,
+                               test.description
+                       );
+               } );
+       } );
+});
+
 }( mediaWiki, jQuery ) );
index f59ee0f..7816860 100644 (file)
--- a/thumb.php
+++ b/thumb.php
@@ -170,11 +170,11 @@ function wfStreamThumb( array $params ) {
 
        // Check the source file storage path
        if ( !$img->exists() ) {
-               wfThumbError( 404, 'The source file for the specified thumbnail does not exist.' );
+               wfThumbError( 404, "The source file '$fileName' does not exist." );
                wfProfileOut( __METHOD__ );
                return;
        } elseif ( $img->getPath() === false ) {
-               wfThumbError( 500, 'The source file is not locally accessible.' );
+               wfThumbError( 500, "The source file '$fileName' is not locally accessible." );
                wfProfileOut( __METHOD__ );
                return;
        }